面试复盘|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、信号量与互斥锁的区别是什么?


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

#面试复盘##面经##校招##腾讯##C++工程师#
全部评论
csig的难度都这么大了吗。。。
2 回复 分享
发布于 2021-08-26 14:20
csig这种垃圾bg还这么难……
2 回复 分享
发布于 2021-08-26 16:17
**,这也太折磨了,问了这么多
1 回复 分享
发布于 2021-08-26 15:56
感觉可能碰到了同一个面试官。。。全程都在找我聊内核,上来就是进程调度linux内核是怎么实现的,了解过优先级反转嘛,完事让我写个socket,跟我聊每一个函数都干了什么,内核是怎么处理出现的各种情况的,掰开了聊,属实是招架不住,也是腾讯云做网络的,可能也是这地方吧。。
1 回复 分享
发布于 2021-08-28 10:25
吓得我抱紧了我的锤锤
点赞 回复 分享
发布于 2021-08-26 10:39
点赞 回复 分享
发布于 2021-08-26 10:42
这就是腾讯吗?恐怖如斯……
点赞 回复 分享
发布于 2021-08-26 10:45
点赞 回复 分享
发布于 2021-08-26 13:23
我的天啊,楼楼怎么把问题记得这么清楚的
点赞 回复 分享
发布于 2021-08-26 14:43
比我的CDG难多了,我面的全是正经的八股文+简单题....
点赞 回复 分享
发布于 2021-08-26 18:02
你这个太恐怖了….
点赞 回复 分享
发布于 2021-08-26 18:56
看了口吐**
点赞 回复 分享
发布于 2021-08-26 22:04
破防了
点赞 回复 分享
发布于 2021-08-26 22:08
**,我都不会,直接gg
点赞 回复 分享
发布于 2021-08-26 22:23
请问是csig的什么部门的?
点赞 回复 分享
发布于 2021-08-26 23:36
CSIG那么难的吗....
点赞 回复 分享
发布于 2021-08-27 01:11
感觉难度有点大了,尤其那个1千万个数排序用多久,这种和cpu,内存硬件相关性也很高。很多问题也答不上来,菜鸟强行回答下最后那3个问题,如果答错了希望大佬可以补充下。 1、 怎么做到不使用信号量可以让消费者知道数据已经到来了?这应该是问线程或进程的同步方式有哪些吧,使用锁,信号(有名或无名),管道(有名或无名),条件变量(针对线程),共享内存(进程和线程不同,进程间的3种方式,共享内存段,共享内存对象,文件映射IO,线程的话通过全局变量),消息队列。 2、dynamic转换引用的情况失败怎么处理的?不懂 3、信号量与互斥锁的区别是什么?信号量:二值信号量(不同任务申请释放,解决同步,互斥),计数信号量,互斥信号量(同一任务申请释放)。互斥锁感觉可以理解为互斥信号量。
点赞 回复 分享
发布于 2021-08-27 11:34
楼主研究生方向是做DPDK这种的么?
点赞 回复 分享
发布于 2021-08-29 20:10
抽背八股了属于是,一场七十个问题就离谱
点赞 回复 分享
发布于 2021-09-12 20:52

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
联通 技术人员 总包不低于12
点赞 评论 收藏
分享
22 74 评论
分享
牛客网
牛客企业服务