(v_b - v_a)*t = 100
t = 50
调用select时,会发生以下事情:
从用户空间拷贝fd_set到内核空间;
注册回调函数__pollwait;
遍历所有fd,对全部指定设备做一次poll(这里的poll是一个文件操作,它有两个参数,一个是文件fd本身,一个是当设备尚未就绪时调用的回调函数__pollwait,这个函数把设备自己特有的等待队列传给内核,让内核把当前的进程挂载到其中);
当设备就绪时,设备就会唤醒在自己特有等待队列中的【所有】节点,于是当前进程就获取到了完成的信号。poll文件操作返回的是一组标准的掩码,其中的各个位指示当前的不同的就绪状态(全0为没有任何事件触发),根据mask可对fd_set赋值;
如果所有设备返回的掩码都没有显示任何的事件触发,就去掉回调函数的函数指针,进入有限时的睡眠状态,再恢复和不断做poll,再作有限时的睡眠,直到其中一个设备有事件触发为止。
只要有事件触发,系统调用返回,将fd_set从内核空间拷贝到用户空间,回到用户态,用户就可以对相关的fd作进一步的读或者写操作了。!
典型面试题
剑指经典面试题
2 3 1 0 2 5 3
第一次,将2放到正确的位置 1 3 2 0 2 5 3
然后再将1,放到正确的位置 3 1 2 0 2 5 3
然后将0,放到正确的位置 0 1 2 3 2 5 3
然后将下一个2放到正确位置,发现2已经正确位置,所以说明2是重复的。
维护一个10个元素的最小堆。使用C++ 优先队列实现
Leetcode 难题。
、
全排列递归回溯
大体上来说,首先通过DNS协议,浏览器获取域名对应的ip地址。浏览器基于该ip地址与百度服务器通过TCP三次握手协议建立连接,连接建立之后,基于HTTP协议,浏览器发送方法字段为GET的HTTP请求报文,百度服务器收到该请求报文后,把网页内容填充进HTTP的响应报文,浏览器收到该请求报文后,将前段页面渲染出来,展现在用户面前。 更具体地,在本地与服务器的通信过程中,本地构造完整报文的过程为沿着网络协议栈,由上向下,TCP协议、IP协议、链路层协议分别在上层协议的基础上增加首部字段,构造出完整的链路层帧,然后经过交换机、路由器的转发,基于BGP、OSPF等路由协议,最终到达百度服务器。百度服务器再沿着网络协议栈由下向上,分别解析出每一层的内容,直到应用层提取出HTTP请求报文的内容。 此外,在百度服务器端,还存在负载均衡、nginx工作流程等细节。
同步就是等待,异步就是不等待
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
什么叫二叉树,满二叉树,完全二叉树.
二叉树:每个结点最多有两个子树的有序树,通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。 完全二叉树:只有最下面的两层结点度小于2,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树; 满二叉树:除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树。
字符串模拟阶乘
最简单可以借助一个HashMap和再开一个字符串实现。
也可以用双指针算法再第一个字符串的基础上原地删除。
- D选项要看继承方式,公有继承到派生类中仍然是公有的,私有继承到派生类中是私有的,保护继承在派生类中是保护的。
sizeof(A) = 4+2+2=8
sizeof(B)=4+4+4=12
使用快慢指针,第二个指针先走n-1步,当第二个指针到达末尾后,第一个指针指向要删除元素的前一个位置。
int类型的指针偏移动4*6=24个单位,所以是24
用户id,用户名
找出数组中出现一半的数字,使用摩尔投票法,一定可以找到。
\
正确答案
(1)7
(2)37
答案解析
判定树的高度,也就是为最坏一次查找时,需要比较的次数,所以为log2n+1。
最后一层的节点数为,n=100,h=7,代入得37。
使用字符串模拟加法
客户端: - TCP需要connect进行三次握手,UDP不需要 - 如果数据量小,TCP通过send发送的数据也不一定会一次全部发送完毕,UDP通过send发送的数据一定会一次发送完 - UDP可以通过sendto在发送的时候指定目标IP和端口,TCP不行 服务 : - TCP需要listen和accept来接收客户端的连接请求,UDP不需要 - 接收数据时,TCP客户端单次发送的数据服务器不一定会一次全部收到,UDP客户端发送的数据服务器一定会一次全部收到
根据描述程度酌情给分 1. DNS解析。 2. TCP过程。 3. 内核报文封装过程。 4. 路由选择过程,包括三层路由和二层。 5. HTTP请求过程。
1 内容加密:建立一个信息安全通道,确保信息传输安全; 2 身份认证:确保网站的真实性; 3 数据完整性校验:防止内容被第三方冒充或者篡改
函数库调用 在所有的ANSI C编译器版本中,C库函数是相同的 它调用函数库中的一段程序(或函数) 与用户程序相联系 在用户地址空间执行 它的运行时间属于“用户时间” 属于过程调用,调用开销较小 在C函数库libc中有大约300个函数 典型的C函数库调用:system fprintf malloc 系统调用 各个操作系统的系统调用是不同的 它调用系统内核的服务 是操作系统的一个入口点 在内核地址空间执行 它的运行时间属于“系统”时间 需要在用户空间和内核上下文环境间切换,开销较大 在UNIX中大约有90个系统调用