百度二面(四十五分钟)
软件研发工程师。
先自我介绍,然后面试官问项目,我大概讲了一下。
面试官先是问 C 语言的知识:struct 齐位的问题,解释两个关键字 static 和 volatile。关于 C 语言中“static 修饰的函数只能被本文件里内容使用”这个知识点我没有回答出来。面试官又问我 C 中的互斥锁等几个锁,我说没听过,他就跳过了。
接着面试官问我操作系统了解多少,有没有看过源码。我回答说没有,只看过 STL 的源码。然后是多进程和多线程的问题。这个有好好准备过,跟他详细解释了一下进程线程的区别以及进程/线程切换时系统发生的行为。接着他问我线程之间除了共享进程的程序段和数据段,还有什么,我说共享一些资源,比如文件描述符。他追问还有什么,我答不上来了。
然后面试官问我会不会网络,我说不会。他转而问我一道内存管理方面的题。int *p=malloc(1024); 请问 p[10]=1; 这个语句的具体语义是什么(即指针 p 的寻址规则是什么)。我回答说寻址时会做 p+10*sizeof(int),即 p+40 的操作,所以 1 会被写入在 p+40 这个地址上。接着他问我 p 这个指针保存的是物理地址还是虚拟地址,我说不知道。
最后是一道编程题:一棵拥有父亲指针和左右孩子指针的二叉树,给定任意一个结点,找出其中序遍历时的下一个结点。这道题目不难,把逻辑弄清楚、边界情况考虑全面之后写代码,写的还算不错。
到了我的提问环节,我问了面试官他的工作体验以及他目前的工作,他简单介绍了一下,他以前是做底层操作系统的,现在正在转型做云计算。我就接着跟他聊了一下云计算,大概是勾起了他的兴趣,他又如数家珍般跟我说了一遍他对云计算虚拟化的理解,并问我目前的 offer 情况,我也如实相告。
我的感受:
1.面试官做的是操作系统方面,并不是我的强项,因此面试表现很一般。面试就是看缘分,遇到一个和自己专业对口的面试官,就能够发挥出很好的表现。
2.面试中我几乎察觉不到自己有明显的失误,该做对的题都做得不错,但不会的也是基本上答不出来。毕竟自己能力有限,所以这次面试表现中规中矩。
3.技术提问环节几乎没有任何亮点。最后面试者提问环节表现不错,但这只能是锦上添花的部分,并不能雪中送炭。