08 2019 档案

摘要:用户态到内核态的切换发生了什么 1.读取tr寄存器,访问TSS段 TSS段保存内核栈信息2.从TSS段中的sp0获取进程内核栈的栈顶指针 sp:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。3.在内核栈中保存当前cs,ss,eip,esp寄存器的值(地址) cs 为代码段寄存器 s 阅读全文
posted @ 2019-08-29 19:03 李湘沅 阅读(742) 评论(0) 推荐(0) 编辑
摘要:C++中几种智能指针的区别 为什么要使用智能指针: 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。所以智能指针的作 阅读全文
posted @ 2019-08-27 18:29 李湘沅 阅读(1799) 评论(0) 推荐(0) 编辑
摘要:转自https://www.cnblogs.com/findumars/p/9845429.html 首先第一点: 为什么运行时多态无法在编译期进行: 比如 对于这样一种最简单的形式,A1派生类对基类A中的func方法进行了重写。 在我们的程序中,假如有一个A*型指针pa: 对于pa->func() 阅读全文
posted @ 2019-08-27 15:36 李湘沅 阅读(908) 评论(0) 推荐(0) 编辑
摘要:内联函数inline violate关键字 宏#define OutOfMemory brk调用 位图(bitmap) 并查集 核心线程 为什么select定时参数更精确 C++11:mutex和lock_guard 锁的底层 优雅的关闭连接 单例模式 LRU 环形缓冲区 排序写法,及稳定性 树的遍 阅读全文
posted @ 2019-08-26 20:44 李湘沅 阅读(145) 评论(0) 推荐(0) 编辑
摘要:菜鸡就是菜鸡,越学发现以前学的东西越浅,慢慢加油吧。 1.算法题。剑指offer看完,常考的算法题,常用的排序。 2.C++。深度探索C++对象模型好好看完,多刷刷面经,不仅仅要学到皮毛,还要深入深入深入深入深入!!! 还有C++11,老是忘!把这个补上来!!! 3.网络。CYC的PDF多看看几遍, 阅读全文
posted @ 2019-08-26 20:13 李湘沅 阅读(194) 评论(0) 推荐(0) 编辑
摘要:题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任 阅读全文
posted @ 2019-08-24 11:01 李湘沅 阅读(318) 评论(0) 推荐(0) 编辑
摘要:和为S的连续正数数列 输出描述: 输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序 一开始看到这个题没有什么思路,实际上可以利用滑动窗口的思想来解决。 left指向窗口左侧,right指向窗口右侧,一开始窗口不满足要求,因此要使窗口满足和为sum。当窗口和小于 阅读全文
posted @ 2019-08-23 09:44 李湘沅 阅读(176) 评论(0) 推荐(0) 编辑
摘要:首先考虑归并排序: 归并排序为什么能相比普通的排序方法,将时间复杂度从O(n^2)提升至O(nlogn)? 最主要的一点是引入了两个有序数组合并的思想,真正提升效率就是在这个地方。 首先我们考虑,如果两个数组无序的话,比如: 如果使用O(n^2)的方法,在这样一个数组中,每一个数都要跟其他的数比较一 阅读全文
posted @ 2019-08-22 09:56 李湘沅 阅读(287) 评论(0) 推荐(0) 编辑
摘要:首先关于迭代器: 迭代器不属于容器,它与容器属于不同的类,但通过迭代器(迭代器中有某些成员变量;同时也对*等运算符进行了重载),可以访问到容器内的元素(比如list的迭代器,它不属于list,但它里面存放了一个指针,这个指针指向list结构里的成员node,这样就可以借用迭代器去访问容器了。迭代器并 阅读全文
posted @ 2019-08-21 20:59 李湘沅 阅读(189) 评论(0) 推荐(0) 编辑
摘要:成员函数的调用: 1.非静态成员函数: 对静态函数的调用实际上经历了以下的过程: 1.改写函数原型,安插一个this指针作为额外的参数 2.将函数内对非静态成员的存取改为经由this指针来存取(静态成员不属于特定的某个实例,属于整个类,不应被绑定在this指针上) 3.将成员函数重新写成一个新的外部 阅读全文
posted @ 2019-08-21 17:49 李湘沅 阅读(178) 评论(0) 推荐(0) 编辑
摘要:时延 总时延 = 排队时延 + 处理时延 + 传输时延 + 传播时延 1. 排队时延分组在路由器的输入队列和输出队列中排队等待的时间,取决于网络当前的通信量(输入队列用于排队进入路由器,输出队列用于路由器处理完决定往哪转发后排队发出去)。2. 处理时延主机或路由器收到分组时进行处理所需要的时间,例如 阅读全文
posted @ 2019-08-21 15:09 李湘沅 阅读(777) 评论(0) 推荐(0) 编辑
摘要:编写一个程序,找出第 n 个丑数。 丑数就是只包含质因数 2, 3, 5 的正整数。 剑指OFFER上也有这道题。 思路: 对于某一个丑数来说,它一定是它前面的某个丑数乘以2或3或5得到的,我们要选取 所得到的 所有丑数中最小的一个作为这个位置的新丑数,比如1 2 3 4 5后,6,8,9都是丑数, 阅读全文
posted @ 2019-08-21 09:40 李湘沅 阅读(274) 评论(0) 推荐(0) 编辑
摘要:剑指offer上的一道题: 把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 在类里定义了一个比较函数cmp,但是使用这个比较函数进行sort 阅读全文
posted @ 2019-08-20 09:13 李湘沅 阅读(763) 评论(0) 推荐(0) 编辑
摘要:1.单一继承下的虚函数(待更新) 2.多重继承下的虚函数 多重继承讲给虚函数带来很大的问题,主要有三点: 1.虚析构函数: 析构函数一般都是虚函数,不然删除某个指向派生类的基类指针将不会析构派生类的内容。 首先关于多重继承: 如以下这个关系: A与B同级,C分别继承这两个类。 如果A* a=new 阅读全文
posted @ 2019-08-19 18:50 李湘沅 阅读(239) 评论(0) 推荐(0) 编辑
摘要:对于01背包,用二维数组做DP的情况如下: F[i,v]代表,在背包容量为v的情况下,从前i件物品中选出若干件(因背包容量的限制,可能不会所有i件都在里面,取最大值时背包里应该是权值相对较大的那些物品)所能得到的最大价值。 第一句对dp设置初始条件。 两个for循环遍历所有的情况:i从1~N表示从i 阅读全文
posted @ 2019-08-19 14:18 李湘沅 阅读(824) 评论(0) 推荐(0) 编辑
摘要:链接:https://www.nowcoder.com/questionTerminal/fe9be0ec96a14b39b2ec5c90fd7d554b?orderByHotValue=1&page=1&onlyReference=false来源:牛客网估计递归问题复杂度的通式,只要复杂度符合以下 阅读全文
posted @ 2019-08-19 09:56 李湘沅 阅读(393) 评论(0) 推荐(0) 编辑
摘要:对红黑树的插入处理,真正需要考虑的有以下几点: 1).插入位置:插入在外侧还是内侧。插入位置影响的是单次旋转是否足够使新树遵守红黑树规则,具体看下面分析。 2).伯父节点的颜色:伯父节点的颜色是红色还是黑色。红色时只要变换颜色即可处理,而黑色则需要进行旋转了。 3).曾祖父节点的颜色:曾祖父点的颜色 阅读全文
posted @ 2019-08-17 17:44 李湘沅 阅读(709) 评论(0) 推荐(0) 编辑
摘要:TCP怎么保证可靠性 TCP保证可靠性: (1)序列号、确认应答、超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进 阅读全文
posted @ 2019-08-13 17:56 李湘沅 阅读(617) 评论(0) 推荐(0) 编辑
摘要:TopK算法: https://www.cnblogs.com/lxy-xf/p/11338652.html 二叉树的直径: leetcode543: 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。 思路: 很简单的遍历二叉树, 阅读全文
posted @ 2019-08-13 12:03 李湘沅 阅读(824) 评论(0) 推荐(0) 编辑
摘要:剑指OFFER上的一道原题,钻了个牛角尖 求二进制中1的个数 问题出现在负数,因为要保持负数的性质,所以对负数进行右移操作后将在首位重新补1,若干次右移后将变为0xFFFFFFFF. 如果要去掉负数的符号位,可以考虑用: int a=-127; a=a^(0x80000000); 0x8000000 阅读全文
posted @ 2019-08-13 08:39 李湘沅 阅读(3176) 评论(0) 推荐(0) 编辑
摘要:进程与线程的概念,以及为什么要有进程线程,其中有什么区别 进程是对运行时程序的封装,是系统进行资源调度和分配的基本单位,实现了操作系统的并发; 线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发。线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个 阅读全文
posted @ 2019-08-12 16:50 李湘沅 阅读(1548) 评论(0) 推荐(0) 编辑
摘要:TopK算法,用于寻找若干个数据中最大或最小的K个数。 实现TopK有两种方法,一种是基于快排的思想,一种是基于堆排的思想。 他们区别在于: 快排:时间复杂度O(n) 需要修改输入数组 不能处理海量数据,因为内存不够加载 堆排:时间复杂度O(nlogk) 不需要修改输入数组 可以处理海量数据 基于快 阅读全文
posted @ 2019-08-12 11:21 李湘沅 阅读(5640) 评论(2) 推荐(0) 编辑
摘要:在看剑指offer时遇到了这个题目:寻找旋转排序数组中的最小值 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。 看到这个题目第一时间就 阅读全文
posted @ 2019-08-12 09:19 李湘沅 阅读(150) 评论(0) 推荐(0) 编辑
摘要:map和set有什么区别,分别又是怎么实现的? map和set都是C++的关联容器,其底层实现都是红黑树(RB-Tree)。由于 map 和set所开放的各种操作接口,RB-tree 也都提供了,所以几乎所有的 map 和set的操作行为,都只是转调 RB-tree 的操作行为。 map和set区别 阅读全文
posted @ 2019-08-11 16:57 李湘沅 阅读(183) 评论(0) 推荐(0) 编辑
摘要:static关键字的作用: 1. 全局静态变量 作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾(只在本cpp内可见)。 2. 局部静态变量 作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁 阅读全文
posted @ 2019-08-09 16:25 李湘沅 阅读(266) 评论(0) 推荐(0) 编辑
摘要:插入排序: 1).直接插入排序: 假设当前排序到了第i个元素arr[i],则此时i左侧[0,i-1]已经有序,对于arr[i]来说,如果arr[i]>=arr[i-1],则不用排序,直接进入[i+1];否则要在左侧有序表中找到一个合适的位置j令arr[j]<=arr[i]<arr[j+1]。 每一趟 阅读全文
posted @ 2019-08-09 11:46 李湘沅 阅读(380) 评论(0) 推荐(0) 编辑
摘要:转载自http://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 分析一下常见的排序算法的稳定性,每个都给出简单的理由。 冒泡排序冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个 阅读全文
posted @ 2019-08-08 15:39 李湘沅 阅读(8517) 评论(0) 推荐(3) 编辑
摘要:考虑以下这种情形: 目前有若干个消费者,一个生产者,现在流水线队列中已满,生产者在: 生产者在notFull.wait()中陷入阻塞。 此时某个消费者拿走了一个产品,并通过notFull.notify()通知生产者队列未满,可以生产。 生产者从wait中醒来,再次竞争锁。 但很不幸,这个锁再次被另外 阅读全文
posted @ 2019-08-07 21:12 李湘沅 阅读(185) 评论(0) 推荐(0) 编辑
摘要:给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 示例: 先看这个题目,这个题目不仅仅是一个排序的问题,它的特点在于数组中的元素是固定的3个0,1,2 阅读全文
posted @ 2019-08-07 11:04 李湘沅 阅读(258) 评论(0) 推荐(0) 编辑
摘要:给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。 示例: 输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明: 如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。 阅读全文
posted @ 2019-08-07 09:51 李湘沅 阅读(125) 评论(0) 推荐(0) 编辑
摘要:AVL树是非常重要的一种数据结构,这里实现了在AVL树中的插入操作,包括插入后整个树的自平衡。 这里有几点值得注意的地方: 1).左旋L_Rotate与右旋R_Rotate操作: 这两个操作传递进来的参数是以TreeNode*&的形式传递进来的,也就是说传递的是指针的引用,效果等价于传递二级指针 如 阅读全文
posted @ 2019-08-06 21:06 李湘沅 阅读(1059) 评论(0) 推荐(0) 编辑
摘要:EPOLLSHOT的作用主要用于多线程中 epoll在某次循环中唤醒一个事件,并用某个工作进程去处理该fd,此后如果不注册EPOLLSHOT,在该fd时间如果工作线程处理的不及时,主线程仍会唤醒这个时间,并另派线程池中另一个线程也来处理这个fd。 为了避免这种情况,需要在注册时间时加上EPOLLSH 阅读全文
posted @ 2019-08-06 09:43 李湘沅 阅读(903) 评论(0) 推荐(0) 编辑
摘要:给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board =[['A','B','C','E'],['S','F','C','S'],[ 阅读全文
posted @ 2019-08-05 11:21 李湘沅 阅读(138) 评论(0) 推荐(0) 编辑
摘要:首先看UnassignGuard类的结构: 可以看到UnassignGuard类中成员只有一把锁,接口只有一个构造函数和一个析构函数。 构造函数的特点是对该锁的持有者清0,析构函数的特点是设置该锁的持有者线程。 关于UnassignGuard,它是配合条件变量来使用的。 首先我们看下条件变量,一般使 阅读全文
posted @ 2019-08-02 15:58 李湘沅 阅读(610) 评论(0) 推荐(1) 编辑
摘要:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]。 首先定义: 对柱形图中的一个矩形i来说,我们计算以heights[i]为 阅读全文
posted @ 2019-08-02 12:05 李湘沅 阅读(206) 评论(0) 推荐(0) 编辑
摘要:图的关节点: 如果删去某个节点及依附在该节点上的边后,该图被分割为两个或两个以上的连通图,则该节点为关节点。 计算关节点的关键思路: 在该图的深度优先生成树上,如果某个节点的孩子节点(不一定是二叉树,孩子节点可能大于2)的子树中,所有孩子节点的子树中都有回边能回到该节点的祖先上,则该节点不是关键节点 阅读全文
posted @ 2019-08-01 17:00 李湘沅 阅读(1375) 评论(0) 推荐(0) 编辑
摘要:迪杰斯特拉算法用于计算:某点v0到其他所有点的最短路径,时间复杂度为O(n^2) 初态: 设定V为所有顶点的集合。 设定S为已经得到的最短路径的顶点vi的集合。即S中的顶点vi,都是已经确定下来v0到vi间的最短距离的顶点的集合。 设定V-S为尚未计算得到最短路径的顶点集合。 初态下,S为空,V-S 阅读全文
posted @ 2019-08-01 16:50 李湘沅 阅读(1365) 评论(0) 推荐(0) 编辑