给我的感觉是他们很注重效率,三天、面试三次。
一、
第一次电面是26号中午打过来,因为有些原因,就约了晚上七点面试,可能是那时候一面的面试官开会或是正在面试其他人。到晚上8点多电话打过来,当时正在食堂吃完饭,巧的是正准备拿饭的时候电话过来,我就赶紧接了电话,手上的拌面放在一边。
一面的面试官是一个很随和的人(貌似面试官都很随和,很nice),开始让我讲述自己在技术方面比较感兴趣的东西,当然我从自己做过的东西入手,将自己对于服务端编程的理解讲给面试官,中间问了很多怎么处理负载,以及查看服务端程序运行状况的问题,问我自己常用的系统工具,测试工具之类的问题。我将自己知道的都说出来,又谈了一些关于进程和线程的问题。总之,一面自己觉得和面试官聊的还行,很多问题根据自己的理解都说了出来,
当然也最后说到了考研的问题,我说了自己的想法。总之和一面面试官聊得不错,人很nice 。也谢谢我的一面面试官。
一面时间:35分钟左右。
二.第二次电面是27日,同样是中午电话过来,当时十分不好意思的又约了晚上七点,因为下午还有课。我觉得很不好意思。当然,晚上7点多,电话准时过来。二面给我的一个总体感觉就是被虐了,而且面试官还没“狠狠”虐我,非常感谢。很多问题自己当时没反应上来,总结下自己下载还记得的一些问题如下:
1. glibc中关于strlen()函数的实现。(200多行,效率比我们自己随便写的O(n) 高多了)。自己当时也只能说自己曾经看过,(因为貌似去年帆哥就是这个)只记得它用了很多位运算去优化效率。
2.关于epoll_wait()函数中第四个参数事件返回的问题,还有关于epoll_wait()可以处理的事件都有那些,可以用在客户端么。
3.关于实现UDP可靠性传输,我自己只能以TCP为基础回答,只知道重传和定时检测包首位校验和。然后其他的问题就基本不会了,面试官也没有太为难我,转而问QQ的协议实现是基于TCP还是UDP,我说了自己对与视频聊天的理解,然后自己又扯到抓包问题,wireshake和TCPDUMP自己只是简单玩过,原始套接字抓包也只是简单写过程序,分析IP、协议、以及MAC信息,如果面试官深入,我直接就跪死了。
4.不知怎么说到了无锁循环队列的实现,啊啊,但是自己不知道怎么了,一直考虑的是加锁互斥,却一直没想起来原子操作可以用在这里。CAS就是去判断旧值与新值的关系,去实现的。当然面试官问我怎么判断操作是原子的,自己当时一直给面试官说,我记得++操作不是原子的,但是就是忘了怎么检查,我知道面试官想考察的就是在你不知道怎么办的前提下,自己解决和分析问题的能力,唉,自己当时脑子貌似秀逗了,最简单的就是看++操作的汇编代码。这样直接就可以了。。。唉,当时思维就混乱了,怎么也没想到。
5.就是多进程、与多线程的优缺点,当时真的可能是脑子秀逗了,一直在扯多线程提高响应速率,降低延时,多进程独立性什么的,其实可能问题就是多线程中一个线程跪了,其他线程都跪的问题。。。唉,脑子当时完全不在状态。
6.就是调试问题,core文件的产生与处理,gdb的问题,backtrace 之类的。
7.关于C的错误处理,面试官问得是程序一开始打开文件,后面一堆的错误处理,一堆关闭文件,或是一堆内存分配错误,问怎么避免,我一直说C++的RAII,可是面试官想听到的答案就是C怎么做,我说了do while(0),以及有限状态机的东西,不知道当时答没答到点子上,而且当时竟然没想起来setjump() 、longjump(),这对错误处理函数,说实话,这个自己真心知道,也在用,可是当时就是脑热,完全不再状态,我也不清楚面试官是不是在考察这对函数,如果是,啊啊啊啊啊啊。
很多问题现在都记得不是很清楚,貌似是压力面,可是我知道面试官还没有狠狠虐我,如果再深入说些问题,我估计什么都说不上来。不过感谢二面的面试官,最后和我聊了很多,给了我很多指导的建议,真的感觉二面的面试官很nice,一方面是因为他让我过了,另一方面很感谢二面的面试官愿意去了解我其他的方面,看我写的一些东西。并没有完全否定我,这才是我特别感谢二面面试官的原因。
二面时间:47分钟左右
三.第三轮,也就是今天,28号,中午正在上课的时候电话过来,又很抱歉的到教室外面接电话并且说另约时间,下午2:30电话过来,三面面试官同样是很nice的一个人,让我自我介绍,还问我有没有给妹子写过。。。省略,简短的寒暄过后,面试官开始问自己一些技术问题了,也是一开始了解我擅长的一些东西,问了一些关于服务器框架的问题,I/O复用,我从C/S模型的角度入手,说了自己了解到的服务端模型,以及自己用到的框架,事件驱动、IPC、多进程、多线程这些。然后三面面试官问我自己负载怎么样,什么地方是系统的瓶颈,我说内存、磁盘I/O,网络带宽. 自己一开始把着眼点放在了内存上,面试官追问,如果这些都够大呢,当时说出的就是memcache,然后貌似答对了,就问我用过吗?我只在机子上装过,知道存储方式是键值的形式,然后说自己只知道这么多。
后面问到了进程模型的通信机制,以及关于对共享内存的访问控制的一些问题,还有就是关于gdb的调试,查看段错误等调试技巧,我就说了自己知道的那些,dmesg, strace 以及gdb的bt.然后问我怎么切换到子进程中调试,这个,,额。不知道。自己刚才看看,set follow-fork-mode ,或是attach pid 的方式。
然后问到了自己的其他方面的东西,我说了一下和大家一起做的小内核,关于这个东西很多细节自己记得也不太清楚了,当时讲了Grub加载,以及界面打印,这些讲的还算蛮清晰。然后说了说自己对于GDT以及段页的理解。算是粗略说说,然后面试官也没有深入问。
最后聊了一些生活方面,考研什么的。有什么体育爱好,打不打游戏之类的。
三面时间:35分钟左右
大概这三次面试过程,就是这样.貌似写的挺罗嗦。。
期待自己还可以最后获得赏识,总之,真的,很多时候,我们只需要一个机会和内心的平静。