深信服线下面试9.25
总体流程很快,我约的十点半的面试,十点到了酒店,等五分钟不到就开始一面了。
一面(约30分钟到四十分钟)
经典自我介绍
看你成绩还可以,有带成绩单吗?邮件没说要带
排序算法了解吧,写一下堆排序,快排?写一下堆排吧
我:可以用标准库的堆吗?
肯定不能啊,太难了的话那你写一下快排吧,三到六分钟
说实话很久没写有点忘了,约十分钟写完了(后面看感觉有些小问题,不是很对)
问:思想是什么?怎么算复杂度
主要思想是找到一种中枢点,前一半都比中枢小,后一半都比中枢大,然后再对前一半和后一半进行这个快排的过程。
复杂度如果数据本身有序的话最差是n平方,本身比较无序的话是nlogn
问了一下科研项目,这个技术是解决什么问题的,给他举了个例子
野指针是啥?答:忘了
那如果有两个指针指向同一块内存,如果其中一个释放了这块内存,另一个指针再访问会出现什么情况。
答:释放内存的话,会把这块内存返回给操作系统,或者返还给内存池,如果这段内存这段时间内没有重新分配给其他地方,那么再访问可能不会出现问题,是偶发性的,如果这段内存已经分配给其他,那么可能会导致系统崩溃,越界访问,是一种未定义的行为。
C++11特性你用过哪些?
答:比如RAII机制,可以帮助自动释放内存balabala...
你说的是共享指针这块,那你说一下共享指针的机制
答:shared_ptr是引用计数的方式做共享指针,balabala...
进程的内存不够可能是什么原因?
答:有可能是本身软件使用的内存较多,物理机器的内存不够,还有可能是申请了内存,然后没有释放,出现了内存泄露的问题。
内存泄露怎么排查?
答:如果手工的方式的话,比如我主函数中调用了多个函数,那我每个函数后使用pause查看该进程此时占用内存多少,这样能大致定位出在哪个函数中出现了内存泄露。还有一种方法是使用开源的工具,可以帮助定位内存泄露问题,这个工具的机制是对我们申请的内存块前几个字节加入一些控制块,从而掌握程序运行中我们申请的内存块,这样我们能够找到哪个内存块可能未被释放。
反问阶段:
你们业务主要是哪方面?
他balabala说了一堆,我没仔细听
感觉面的不好所以第二个问题是:你对我求职这块有啥建议吗?
他直接回答:没有。 我:愣住,呃呃,好的,那暂时没问题了,谢谢。
然后回到大本营等待结果,其实已经感觉挂了,应该没机会了,5分钟后,叫我二面
二面(约50分钟)
经典自我介绍开局
你为什么选择软件工程专业?我:高中喜欢上网
计算机行业你有没有比较佩服的人?
答:雷军,雷布斯,(问为啥),白手起家,赚很多钱,大学就能写书写软件赚钱
问科研项目那块(我简历上两个项目,一个科研项目,一个webserver, 面试官对webserver完全没兴趣,完全没问这方面)
他不太理解这个项目,让我画一下软件架构图(不知道咋画,瞎画的,寄)
tcp解决了什么问题?
答:可靠性、端到端传输、拥塞控制
那可靠性怎么保证的?
答:序列号,详细过程(过程中指正了序列号中,如果接受方很久没收到发送方的数据包,会重发ack)
DNS主要解决了什么问题,架构是啥样的?
balabala说了一堆
那根域名服务器有什么作用?
不知道,给他瞎扯了一堆。他告诉我:根域名服务器类似于默认路由,当你不知道去哪查域名就去找他,balabala
你在开发过程中遇到过什么难点,怎么解决的?
这个我不知道咋回答,瞎扯(他连续问了我三次这个问题)
回大本营,三分钟后告知今天面试结束