首页 > 面试复盘|CSIG一面凉经(132min)
头像
漫漫云天自翱翔
编辑于 2021-08-27 08:45
+ 关注

面试复盘|CSIG一面凉经(132min)

第一次面试35min

1、自我介绍
开始问我项目
2、你的代理服务器架构是怎么样的?
3、客户端与代理服务器,与实服务器的网络关系?客户端与代理服务器处于广域网,代理服务器与实服务器处于同一个局域网
4、客户端是与代理服务器建立连接吗,还是与实服务器?
5、怎么知道你请求的数据返回到对应的连接上?五元组hash
6、我想说的是通过你的RDMA技术,怎么对应上具体连接接
7、DPDK工作在哪
8、DPDK补包谁来拆包?
9、对于HTTP的包,你怎么进行拆包的?
10、第三个项目,你为什么要这么做,这样做的好处?
11、第三个项目的架构是怎么样的?
12、怎么对包过滤?首包过滤方案?
13、你的PM服务器是做成的一个DNS网关?
14、你知道云服务器的情况吗?硬件是在实时更新的,你的这些数据也是在实时的更新的你怎么处理?
15、怎么处理针对某一个连接在数据传输的过程中,被ACL匹配为禁止访问的条目?
16、怎么动态更新ACL规则?异步咯
17、队列的判断怎么判断队满
反问:
自己需要改进点:
1、对于同一个项目的别人做的部分,自己也需要掌握成为自己的知识
2、有点怯场


第二次面试97min

直接开干项目
1、、说一说你为什么做这个项目?
2、黑白名单与ACL规则你是怎么存的?
3、hash表性能考虑过吗?你了解ACL吗?怎么构建ACL?说了NFA,DFA
4、NFA、DFA怎么构建?
5、NFA、DFA区别?构建的时间,查询时间复杂方面
6、NFA、DFA除了用在ACL匹配上,还有哪些具体的应用场景呢?
7、这是多模式匹配问题吧?有没有了解过单模式匹配算法呢?
8、PM硬件的具体作用是什么?
9、测试过端对端的通信时延吗?怎么测试这个时延,请具体描述下?
10、开一个全局变量够吗?一对连接采用一对全局变量测试时延
11、你怎么实现的无锁循环队列呢?原理是什么?
12、怎么支持队列的扩容问题?
13、CAS操作原理你知道吗?
14、单线程读写的情况写,还需要CAS操作吗?我答的修改执行顺序,可以不需要CAS操作
15、那你知道CPU会将语句的执行顺序变更吗?知道
16、怎么处理?linux下通过汇编指令,C++11的话通过内存屏障?
17、还能举出什么场景必须要用内存屏障?单例设计模式的懒汉实现,双重锁也不安全
18、你的无锁循环队列是消费者生产者模式吧?是的
19、你的消费者与生产者实在同一个进程中吗?
20、你用的什么机制进行消费者生产者之间的通讯的呢?目前用的轮询,未来修改成信号量
21、信号量怎么使用的,知道吗?
22、怎么做到不使用信号量可以让消费者知道数据已经到来了?
23、信号量与互斥锁的区别是什么?
24、既然你用的是轮询,会带来什么问题,你知道吗?CPU满载
25、怎么处理这种情况?这里我讨论了很久,面试官说用一个语句,我心里想的是sleep,但是我怂了不敢说是sleep,我觉得这样解决太简单了,但面试官真的就想的是sleep
26、为什么不敢说sleep?我说太简单了,而且使用sleep,不好控制这个sleep长短,导致数据时延太长或者cpu负载还是高的情况
27、你认为什么是最优的睡眠时间呢 ?
28、1ms对于RDMA是长还是短呢?1ms对于一个客户是长还是短呢?
29、怎么去测试出这个最优的睡眠时间?
30、上述的设计会不会导致丢包问题呢?睡眠太长会导致循环队列写了一圈,覆盖掉之前的数据包,导致丢包
31、怎么处理这个问题?
32、dpdk你学过是吧?
33、cache line有什么用?
34、缓存一致性是什么?
35、为什么要有缓存一致性,缓存一致性协议名是什么?
36、举一个使用cache line的例子说明?我说类似于字节对齐吗?
37、说了为什么要字节对齐?从内存的读取原理上解释了不对奇会导致两次的CPU读取指令
38、写过服务器程序没?
39、对于很多客户端的情况,你是怎么处理的?(开进程、线程、IO复用)
40、对于epoll有几种模式,各自的区别是什么?
41、ET模式下,一个客户端一直写入数据会导致什么问题?最开始理解错误,以为是问epoll原理,就答了epoll通过注册回调函数到内核,只要有数据过来,就会将文件描述符放入rdlist队列里面,不同文件描述符之间数据有无是互不干扰的,反正epoll_waite是去去rdlist队列。
42、服务端需要一直读,直到读完所有的数据,导致其他连接产生饥饿无法响应,怎么处理此类问题?在后面接一个线程池
43、不可以使用线程池,怎么处理?做一个策略只读取一定时间、或者只读取一定字节数,超过了就干掉他
44、在不干掉的情况下怎么优雅的保持对于每一个的连接的公平性?针对epoll_wait中每一个事件,每一个连接读取一定字节数,没有读完就放入一个下次读取的队列中,将事件列表全部处理完了再去处理这一个临时的队列,再根据策略读几轮,之后去执行epoll_wait,获取新的事件,这样保证对每一个连接的相对公平性。
45、红黑树的一个插入、查询的时间复杂度是多少?
46、上面你提到了红黑树,我们来做一个动态统计各个IP的流量的数据结构,并实时显示前K个流量最高的IP?红黑树+hash表+链表的思路
47、红黑树中采用哪一个值来排序,出现同值的情况,怎么处理?
48、C语言中memmove与memcpy接口的区别?
49、C++类型转换知道吗?
50、聊一下danamic_cast的原理,为什么能准确的类型转换?
51、dynamic转换引用的情况呢?为什么这样处理?
52、你平时使用的是哪个C++版本?
53、auto作用?你平时在哪实现auto?
54、右值引用是什么?原理是什么?怎么写的?什么场景下使用右值引用?
55、操作系统的零拷贝实现原理?
56、你还用过哪些C++11语法?
57、智能指针有使用过吗?
58、在使用share_ptr的过程会出现什么问题?我认为三个问题:循环引用,调用函数时直接构建,用get去初始化新的share_ptr指针
59、怎么解决上述问题?weak_ptr
60、unique_ptr的问题呢?
61、ping 一个地址,数据包的交互是怎么样的?
62、DNS端口是多少,走的是什么协议?
63、能否用tcp实现DNS?
64、构建ICMP包的mac地址填的是哪个的?
65、怎么获取到所需要的mac地址?
66、arp广播,单播怎么做的,包怎么构建?
67、arp包可以跨局域网吗?
68、UDP、TCP、ICMP的协议号是多少?(这个问题本来我知道,直接被问道说不记得了)
69、一千万个数排序需要花多长的时间,你估计下?不是要你说出计算的思路,而是看你测试过此类问题?需要10s吗?

反问:

1、部门业务,SDN
2、自己还有什么改进的地方,我已经发现自己的基础十分不牢固?工作期间遇到的问题都是你没有遇到过的问题,所以需要有用已知知识推断未知的问题的能力。

反思:

1、自己在面试中,一定要对自己说过的话负责,因为 面试官的下一个问题就会从你刚才的回答中出现
2、偏底层的原理,自己掌握的还不够,需要未来加强对底层的学习。
3、对于自己的回答坚定一点,在回答中被面试官反问之后,我认为我的回答是错误的,导致后续的问题答不上来

不会的问题,希望大佬们翻牌子给我解答下:
1、怎么做到不使用信号量可以让消费者知道数据已经到来了?
2、dynamic转换引用的情况失败怎么处理的?
3、信号量与互斥锁的区别是什么?


最后附一张电话面的时长图

更多模拟面试

全部评论

(19) 回帖
加载中...
话题 回帖