一面(技术面),大概五十分钟。
上来自我介绍,我说我精通C++,熟悉算法,了解Linux。面试官问我的是进程和线程的异同。我简单聊了一下我的理解,可能他不是特别满意,就没继续深入问了。
接着简单聊了聊做过的论文和项目。有的地方第一遍解释得不是特别到位,面试官有些困惑,我又重新组织语言和思路说了一遍。他终于明白了大体流程,但还是没什么太大兴趣。
接下来,面试官问了我数据结构和算法相关的问题。第一道是动态规划。我举了0-1背包问题的例子,解释了一下状态转移方程。我问要不要写代码,他说不用了。第二个问题是中序遍历二叉树。刚开始写了一个递归,面试官说写一个非递归吧。想了一会儿,没有想出来,有点尴尬,于是和他沟通,询问他解决办法,他给予了我一些提示,后来根据提示把代码了出来。
最后就是例行的“面试者提问”环节,我很教科书地问面试官他的职责是什么,他也很套路地用提前画好的“工作架构图”回答了我。
一面感受:
我会C++,面试官却没问。我猜,面试被问到的基础知识与面试官(来自网络操作系统部)所熟知的领域有关。
关于二叉树中序遍历,我提前和面试官沟通问他是写递归还是非递归代码或许会更好。
感觉表现一般,有小亮点(面试官对我机试满分、编写过扫雷等小游戏有赞许),但没有特别大的出彩的地方。
二面(boss面),大概半小时。
关于终面我做的不够好。虽然之前有听到说是最后一面boss面,但是我还是把它当成了技术面,自我介绍的时候还是在说自己的专业技能而不是自己的处事方式。
我跟面试官说想做开发,于是他问我技术面被问及了什么问题,我把之前面试的动归和中序遍历说了一下。
面试官问我“你为什么投某个部门?”“你对华为怎么看?”“你对这个行业怎么看?”“你喜欢面对挑战么?”“你面临的最大挫折是什么,收获是什么?”“为什么本科阶段参加的活动多,硕士期间却并没有什么太大成就?”之类的问题,自己临场发挥的还不错。
面试官问我快排的时间复杂度和空间复杂度时,我有一处亮点以及三处失误。亮点是,我把 STL::sort 函数的底层实现机制(即,自省的快排算法)跟他讲了一遍,他比较满意。失误在于,第一是时间复杂度,关于快排的最差情况没有完全说对。第二是空间复杂度一时间竟然糊涂了忘了是O(logn)的了。第三是由于之前的失误导致我有十几秒钟气场全无。
最后的提问环节,我也是完全不知道要如何提问中层领导,因为我当时感觉问他“你的职责是什么”会很奇怪。
二面感受:
终面的最后环节准备不充分表现不够好。
面试收获:
面试的提问环节,来自知乎的回答:http://www.zhihu.com/question/21559274
我的理解是,提前做好功课,表现出对公司及行业的兴趣。下面四条是摘抄自知乎链接的:
1. 如果是校招一面,我的策略是问面试官最近在负责公司的哪个产品,因为往往校招二面官是一面官的上司,这样回去后可以为二面做准备,提前调研。
2. 如果是社招,更应该提前做好调研,最好提出自己对公司产品的分析或者建议。
3. 如果面试官是hr,可以问职业发展方向,培训体系等。
4. 如果面试官是最后的大boss,可以问对这个行业的看法,最好自己做过充分调研,保证自己也能说出来有价值的内容。