早上去洪广大酒店去面了百度现场一面,C++研发岗。
我前一个室友面了1个小时多,结果我只面了40分钟,有点奇妙。
僵尸进程和孤儿进程,怎么解决的?
正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
-
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
-
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
僵尸进程危害场景: -
例如有个进程,它定期的产 生一个子进程,这个子进程需要做的事情很少,做完它该做的事情之后就退出了,因此这个子进程的生命周期很短,但是,父进程只管生成新的子进程,至于子进程 退出之后的事情,则一概不闻不问,这样,系统运行上一段时间之后,系统中就会存在很多的僵死进程,倘若用ps命令查看的话,就会看到很多状态为Z的进程。 严格地来说,僵死进程并不是问题的根源,罪魁祸首是产生出大量僵死进程的那个父进程。因此,当我们寻求如何消灭系统中大量的僵死进程时,答案就是把产生大 量僵死进程的那个元凶枪毙掉(也就是通过kill发送SIGTERM或者SIGKILL信号啦)。枪毙了元凶进程之后,它产生的僵死进程就变成了孤儿进 程,这些孤儿进程会被init进程接管,init进程会wait()这些孤儿进程,释放它们占用的系统进程表中的资源,这样,这些已经僵死的孤儿进程 就能瞑目而去了。
信号有哪些,kill发送的是什么信号?
https://www.cnblogs.com/niupan369/p/4119607.html
感觉有点太偏了。
TCP模型画一下,分别描述。
https://blog.csdn.net/u012501459/article/details/48178065



TCP和UDP的区别。
略
拥塞算法描述。
-
慢启动
当新建连接时,cwnd初始化为1个报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1倍。这样cwnd的值就随着网络往返时间RTT呈指数级增长.
这里设置了一个慢开始门限ssthresh。
cwnd < ssthresh时,进行慢开始算法。
cwnd>ssthresh时,进行拥塞避免算。
cwnd = ssthresh时,两者皆可。 -
拥塞避免
每个轮次结束都让cwnd增加一个,而不是一倍,增加的更加缓慢。
不论是慢开始还是拥塞避免只要网络出现拥塞(没有按时到达)时,就把ssthresh的值置为出现拥塞时的拥塞窗口的一半,以及cwnd置为1,进行慢开始 -
快重传
发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。 -
快恢复
不从慢启动重新开始,门限设置为窗口的一半,从门限开始拥塞避免
快重传和快恢复往往配合一起使用。了解的不够精确,再看一下。
- 怎么判断是32位机还是64位机?
先是说了sizeof一个指针,然后说不用这个怎么做,我就说访问4G之后的内存会抛出异常,然后就让我写了一段这个代码。
char * p = 0xFFFFFFFF;
long long a ;
try{
a = *(long long *)p;
}
catch(long long ){
cerr << "32 bit machine" << endl;
}
看网上还有0xFFFFFFFF+1来跟~0比较的,感觉应该是不行的。
后来同学说无法访问程序地址空间外的地址,因为没有页表。
不用sizeof的话可以类似输出指针的地址差值?
说对我项目不熟,聊了一下redis。
redis的sorted_set底层是怎么实现的,然后引申到跳表,讲了一下跳表的实现,查找,插入等复杂度。最后问了跳表如何增加层数,我说是概率p,redis是0.25,指针数量每个就是1.33,具体怎么算忘记了。
了解一下跳表怎么增加层数的。
写二分查找。
挑了我溢出的刺,(left + right)可能溢出int 还有单个元素的时候考虑不周。
网友评论