一面:
1、首先自我介绍吧
2、结构体字节对齐?(给了个只有Int、char类型的结构体,32位机器,求大小,然后问字节对齐问题)
3、询问对C中的字符串操作函数是否熟悉,手写字符串拷贝函数
4、问对数据结构和算法是否熟悉,手写单链表反转
5、TCP和UDP有什么区别?
6、TIME_WAIT的两个作用?
7、TIME_WAIT和CLOSE_WAIT的区别?
8、TCP如何保证可靠性传输?
9、TCP的四个定时器?
(1)超时重传定时器:在发送端发送数据后,启动超时重传定时器,在给定时间内没有收到对端发送的确认消息,此定时器超时,发送端重新发送数据,并将此定时器复位。
(2)坚持定时器:发送端给接收端发送一部分数据后,接收端的缓存已满无法在接收数据,就向接收端发送一个滑窗大小为0的ACK通知发送方停止发送数据,接收方收到此消息后,启动坚持定时器,并向接收方发送大小为1个字节的探测报文,在定时器超时后还未收到接收端窗口更新的消息,将坚持定时器加倍并复位,直到坚持定时器已达max=60s,接下来就每隔60s发送探测报文,直到收到接收端的窗口更新消息。
设计此定时器的原因:假设发送端收到滑窗大小为0的ACK消息后,接收端发现自己已经可以接受数据了,于是向发送方发送滑窗大小不为0的ACK,不巧的是这个ACK丢了,发送方若没有坚持定时器,则一直在等待发送端通知自己什么时候可以发数据,而接收端认为自己已经通知发送方了,但是没有收到发送方的数据,这就会造成一种死锁状态。
(3)保活定时器:在一个TCP成功连接后,接收端在收到一次发送方的数据后,会启动一个保活定时器,时间为2h,如果此定时器超时,发送方会每隔75s发送一个探测报文,在尝试10次以后,发送方就可以断开这个连接。
(4)2MS定时器:此定时器是为了处理TCP连接中主动断开连接的一方处于TIME_WAIT状态而设置的,大小为2MSL(数据包在网络上存活的最大时长的两倍,即一个往返时间),处于此状态的一方无法立即建立新的连接,设置此状态下的定时器有连个作用,其一,防止断开连接时的最后一个ACK丢失,保证TCP连接的可靠性;其二,防止旧的连接上传送的脏数据被新的连接收到。
Tips:此问题的答案参考网上的博客以及书籍《UNIX网络编程 I》
10、TCP粘包问题?
11、如何查看耗时最大的函数?使用什么工具?
12、epoll和select的区别?
13、listen、accept、bind调用时,内核层面发生了什么?
14、C++的虚标指针是什么?多重继承虚标指针有几张?
15、C中static的作用?
16、C如何调用C++函数?
17、最近有没有关注新技术?比如人工智能?区块链?
18、你平时都有浏览博客等方式去学习么?
19、举一个例子说明你平时学习到的东西?
二面:
1、自我介绍(呵,万年不变呀。。。)
2、ARP是什么?协议是怎么实现的?
3、ARP是怎么找到MAC地址的?
4、讲一下你做的一个项目?
5、你觉得你做的模块在整个项目中的价值占比多少?
6、出现空指针会出现什么情况?怎么处理?
7、局部变量和全局变量的区别?
8、全局变量未初始化时为什么时随机值?
9、有两个进程,有同名变量,这个变量是共享的吗?如果是动态库呢?
10、你觉得你对你自己还有什么要补充的?
11、如果能入职,可能要学习很多新东西,你能接受吗?
12、你还有什么要问的?
另一个部门的面试
一面:
1、做一个自我介绍?
2、两个进程要通信,什么样的方式最快?
3、父进程使用malloc得到一块内存,子进程可以使用吗?
4、进程使用malloc分配一块100M的内存,是马上就得到这块内存了吗?
5、有一个进程突然卡死了,你是怎么定位这个问题的?
6、怎么查看CPU的占用情况?
7、某一个线程占用很大的内存,怎么解决?
8、你平时有看开源的项目吗?
9、讲一个你平时做的项目?
10、你在工作中有遇到什么技术难点吗?
11、建立网络链接时,客户端和服务器的过程?
12、发送数据时阻塞和非阻塞的区别?
13、recv调用成功是已经正确收到数据了吗?
去年也有过一次深信服失败的面试经历,详情请看这里:https://www.cnblogs.com/kks170716/p/7778739.html
深信服面试每次都是一个小册子,也就是公司的题库,什么时候才能把小册子的东西掌握呀,,,
现在的真实感受是:哪有什么天生的好运呀,不过是付出的努力在某一刻遇到了合适的机会,便成了所谓的好运,继续努力吧。