一面约40min
本来预定是1h,但是没想到40min左右就结束了,感觉还不错
面试官看起来比较严肃(头有点秃),很厉害的样子,上来就说明今天面试分为两部分:基础知识和项目情况
基础知识方面
1.介绍一下信号量和锁,底层是如何实现的,以及它们的区别
2.你知道自旋锁吗,说一下和互斥锁的区别
3.讲一下红黑树的特征,应用场景
4.说一下浏览器输入网址后,接收到响应的一系列流程
5.说一下cookie和session的区别
(问题很少,但是每个都能叭叭很久)
项目情况
没有问深入的业务和细节,针对我的项目都是问项目是做什么的,具体的分工。
最后提问环节,他问了我对哪方面感兴趣,问了一下我简历上写的实验室研究方向;我问了他base,部门的工作,以及对我整体的评价:
说整体还不错,前面都答上来了。但是他说觉得我项目有点杂(前端,后端小程序啥都有),对我实际的一个水平还没有很清晰。建议我后面其他面试官有问到的话,好好准备一下(自我感觉应该是稳了,祈求二面)
二面 1h
二面约的是电话面,面试官和我确认了上一个面试官对我项目的提问情况,我说上一个面试官问的情况,他就表示不会细问项目,多问一些c++相关的。面试开始
- 因为项目写了Qt,所以他问我Qt是如何对事件响应的。我用信号和槽函数回答。
- 问了一个搜索问题:如何找出所有内容中含有某个字符串的文件。思路不是很明确,回答往B+树建立索引方向,讲了一下B+树的优点,为什么这么想;但是具体怎么用B+树来实现,没有回答上来。
- 问了一下文本压缩,知道什么算法。 上来就回答哈夫曼编码,讲了实现过程,以及能够这种编码有效的原因。
- 回答一下一亿个浮点数当中,如何找到最大的10个
很显然是top-k问题,说用一个大顶堆来维护,然后又问堆是如何维护的,大概说了一下流程就过了 - 口述一个算法:一个二维平面中有很多点,如何找到最小的一个凸多边形,将所有的点包住。 回答思路是找到最外侧的点,一开始说的很模糊很混乱,最后回答用暴力,求所有最远的点对,最远的点对就是端点 感觉没答好
- 问还有用c/c++做过其他项目吗? 介绍了一下操作系统课设,做的是模拟linux的文件系统。然后是问了一些实现的细节。
- 让我设计一个内存池,用什么样的数据结构,提供怎样的API。
回答是仿照缓冲池,维护一个空链表,一个占用链表。
每一个节点就是一个“页”或者块whatever;
每一次申请,都从空链表当中申请节点,把结点写满,然后挂载到占用链表;以此类推。返回的是页面的索引编号。
然后又问到了如何选节点,回答四种内存分配算法。回答上,但记忆有些模糊,磕绊
-
问了一下项目当中的TextCnn,实现原理和过程,用的什么数据集,做了哪些优化工作等等。幸好有准备,基本都答上了。
-
聊天环节,让我提问,问了一下整场的表现,对于深挖项目的建议。
整场一个小时差不多。面试官挺和蔼,挺年轻,会笑(不知道是不是在嘲笑我某些愚蠢的点),然后所有问题也基本都是开放性,逐步深入引导回答。自我感觉一般,算法答得不够好,很多点口条不够顺,回答得很磕绊,语句冗余。祈求三面!!!