【奇安信】C++岗-一二三面,面试体验超好

今天一天走完了奇安信的流程,虽然比较累,但是很开心,终于有一家公司走完流程了。

提前批一面(75min)
自我介绍
堆排序和快排的平均时间复杂度和最坏时间复杂度
哈希表实现
哈希表线程安全问题
红黑树
红黑树和哈希表的场景
从内存池实现,聊到对象池、ptmalloc,还有一个比较有意思的问题:内存池分配出去的内存,怎么检测访问越界?例如调用memset的时候越界。
使用hook的方法,将memset封装起来,对外提供封装版本的menset函数,内存池的内存块除了内容以外,使用起始的 4 个字节记录内存块的内容区域的大小。memset被调用的时候,会比较内存块大小和传进来得len。如果len更大,内存访问就越界,抛出异常。面试官提到这个方案的一个问题:没法检测得到p + 5的这种情况。
ping baidu.com的请求过程,尽可能详细地描述
TCP 滑动窗口的作用
介绍项目,介绍到日志系统的时候,面试官提到无锁队列(多写者单读者)
提问环节
一面面试官体验很好,还给我介绍了微软的工具包,里面有很多无锁队列。

提前批二面(50min)
strcpy会拷贝字符串最后的/0吗?
new和malloc的区别
现有一程序崩溃了,且知道了崩溃的代码,需要通过调试,获得该行被调用了多少次之后程序才崩溃:
程序运行很久才能到崩溃的地方,但是程序编译很快
程序编译很久,但是很快就能运行到崩溃的地方
我们有程序的源代码和编译环境,需要检查程序的内存泄漏情况:
内存池
类似tcmalloc的思路
类似valgrind的思路
对象的构造函数、析构函数中统计内存使用量
面试官提示换种思路,不从系统库替代的层面考虑,通过观察任务管理器。
内存泄漏在循环或者递归中,可以观察到内存突然暴增,循环或者递归结束,程序内存趋于平稳
内存泄漏不在在循环或者递归中,因为我们有源代码,可以将main函数逻辑放到一个循环中(面试官提示)
常见的代码缺陷
char c = fgetc(fp);这行代码会有什么问题?
十万以内的不相等的数字,使用时间复杂度最优的方法排序(桶排序 + bitmap 优化空间)
类似老鼠试毒的智力题
(我简历上的)项目的来源、测试性能
二面的面试体验是春招依赖最好的,面试官说了很多遍“很不错”,还跟我说:“跟你说实话,今天都没其他说过这话”,这也太直率了,赞。讨论调试内存泄漏情况的时候,还说:“不要有压力,前面回答得已经很好了,现在只是在考察思考深度,没想到也没关系”。后面从hr那了解到面试官是做代码卫士的,保证代码安全性。难怪问了调试方面的场景题和代码缺陷(这名词还是第一次在面试中被问到)。

提前批hr面(50min)
hr面比较常规:

个人信息、学校情况
实习内容和收获
平时的学习方法
兴趣爱好
秋招公司、偏向
提问环节
总结
奇安信的面试体验实在太好了,特别是二面的体验。这也算最近比较顺利的面试,希望能拿到offer,安慰安慰最近被虐的心灵。

关于sp
有点狂了,开始打sp的坏主意了。请教一下大家,我从hr那了解到,两面面试官对我的评价还蛮好的,尤其是二面面试官。如果能拿到offer,不知道能不能依据这个 argue sp。当然前提是要先能拿到offer。有其他offer,对于 argue sp 有帮助。

发表评论

后才能评论