一周前,我去参加了一场面试。面试的过程中,我的表现很差。这几天闲着的时候都在反思面试过程中出现的问题,现在把其中一部分写出来。本来想写一份完整版的,包括我所能够记得的面试中面试官问我的问题,然而觉得太啰嗦,就砍掉这部分内容了。
大错误
从全局的角度看,我犯的最大错误是没有将“对方更看重技术水平,现在是技术面试”这个意识放在面试的核心位置。
没有做好充分的准备是我犯下的第二大错误。
自我介绍部分
这次的自我介绍已然是老套路,结合大学前对大学的规划以及规划的实现把大学四年串起来。不过这次在以往的基础上又详细说了不少。我感觉要是再面试几次,光是自我介绍就要半天了。
这也暴露出我在面试过程中的一个严重的问题:话太多,不够简练。
强行回答
-
口头叙述从浏览器输入一个网站地址开始,到用户看到界面,之间发生了什么
这是其中一道笔试题,之前写在卷子上,面试的时候要求我口述。在我说到 DNS 解析的时候,要求我画图。正当我想往后说的时候,面试官一个问题让我蒙圈了:主机如何知道该向哪台 DNS 服务器发送请求?
我的回答是:主机在连到网络时,会发送广播帧,从而知道 DNS 服务器的存在。
这个回答是错误的。在主机连入网络后,ISP(例如中国联通)会给主机分配一个 DNS 服务器1。在我看过的书上没有这个内容。也就是说我只要回答“不知道,这个没学过”就可以了,然而我选择了根据已有的知识“通过广播帧发现其他设备”来进行推断。
除此之外,我一开始为了从下往上讲体系结构,说到了物理层。让面试官以为我想说的是主机在物理层发送广播帧,这是失败的开始……我在解释是链路层发送广播帧的时候,被面试官抓着问“那 DNS 服务器是在哪一层”。我强行猜了个网络层(其实是应用层)。
这时面试官生气了,对我说“不懂就不要乱回答”。
-
好像还有,之后看着补充。
简历之坑
看我之前软工课程的队友在简历上写了“用 C/S 架构”,我也瞎跟着写,结果被面试官问到了项目架构。我大致回答说客户端向服务器发送请求,在服务器中处理完再把结果发给客户端。(其实现在我也还没搞清楚应该往哪个方向回答 _(:з」∠)_ ,望高人指点迷津)
这里给面试官的感觉就是对简历上写的东西准备不充分。
提问题环节
在提出问题这个环节,我表现得很差。同样,给面试官一种没有事先准备好问题的感觉。
我一般是这样开头的:“假如我被你们公司录用了,那么 balabala……?”。
后来我一琢磨,感觉这个环节可以有比较大的提高。在面试过程中,面试官无疑是能够发现很多我们自己无法发现的问题。那么可以试试在这个环节中通过适当的问题,请面试官指出我面试中的一些不足之处。
例如,面试官说“在面试中我们也没办法看出一个人是否好学”,那么我可以问问他认为的“好学”的标准是什么,我可以通过什么样的方式证明我的好学。面试官说我“大学四年是很失败的”,那么我可以问问这个失败主要表现在哪个方面,以及他认为怎么样的大学是成功的。
在之前的面试中,我总是在这个提问的环节被局限在想了解公司的什么。其实提问的环节可能弥补之前的不足,澄清我给面试官造成的错误印象。
最后的评价
在一轮技术面试之后,还有一轮。这次的面试官是该公司的产品副总裁,不过在面试的时候我是不知道的 _(:з」∠)_
两轮面试共一个半小时左右。
最终给我的评价我记不太清了(好可惜!!),总之基本都是负面的。大概的意思是技术水平没有什么亮点,拥有的一些非技术能力在他们公司也派不上用场,大学四年是比较(还是“很”来着?)失败的,不符合他们的要求。不过也不是没有优点,优点是人比较成熟(然而跟技术水平完全没有关系= =),不知道是否好学,总之还有机会,等过一阵子再给消息(已经等了一个礼拜了~)。
其实他在给我评价的时候,我的内心是没有什么波动的。因为我感觉他说得没错,从他那角度看,我的确没什么亮点,或者说我没有把自己的亮点给表现出来。如果我是面试官,我也会得出相同的结论。带着赞同听完了他的评价,然后没全部记起来……天呐,我怎么这么蠢!面试面傻了?
事实上,我一直以来比谁都清楚自己的技术实力跟优秀的距离有多大,我也清楚别人对我的赞扬并不能改变这个事实。非常感谢该公司的两位面试官,证明了我不是自卑,而是对自己有着清晰的认识。以后别人夸我的时候,我就可以把这次面试经历拿出来,这样别人也就不会说我谦虚了。
在以后的日子中,我会把原定于大三和大四的计划移动到毕业之后,该补的一个都不会少,只不过进度可能就没办法像在学校里那样快了。不管怎样,永远都不会停止追求优秀的脚步!
好像跟面试没有什么关系的部分
当初在上大学一年级的时候,有两条路可以走。
- 不顾其他的,一心培养技术,加入 ACM 以及做项目积累项目经验
- 稍微涉及一些非专业技术的领域,培养自己的综合能力。等大学后期或者毕业后再一心一意往技术方向发展。
我选择了后者、原因是我当时认为自己的其他方面水平太低:不怎么会说话、不会处理一些比较复杂的事情、做事条理性不够、逻辑性不强和缺少大局观。
我也不知道是在网上哪里看到的,说是程序员的技术岗位的提升总是会达到一个瓶颈。而我则希望提前为此做一些准备,在技术达到瓶颈的时候可以做出合适的调整。这是否是过早的优化呢?
在技术方面,我所体现出的是杂而不精。我从以前就认为不能让自己杂而不精,但是现在看来,没想到自己却变成了这样的情况。一方面我想要在技术某个方面深入钻研,另一方面我又害怕钻研进去后不足以形成竞争力。当然从现在往回看,这样的顾虑是没有必要的,甚至是愚蠢的。目前这样的水平 7.5k - 8k 的 offer 可以拿到,但是 12k + 期权的 offer 就显得无力了。
很有趣的一点就是,我之前没有追求这么好的待遇,甚至 8k 这样的薪资对我来说已经可以接受了。那究竟是什么,让我想要去追求更好的待遇,甚至不惜放弃到目前为止积累的优势,放弃 7.5k-8k 这样一个从整个年级看来都是很好的 offer 呢?这是我需要仔细反思的一件事。
除了大三下学期临时决定要考研并放弃做算法题目和深入研究知识以增强就业竞争力之外,其他的都还是按照我的规划走的。现在大三上学期积累的优势也基本耗光了,回到了最初的状态。作为一个成年人,我可以反思过去所做的错误决定,但我不会后悔做出这个决定,并且承担这个决定带来的所有后果。
从结果上来看,虽然没有什么特别拿得出手的地方,但我这四年较好地完成了自己的目标。因此我认为自己的大学四年是比较成功的(才怪,是相当失败的)。
关于非技术方面
看来不少人都在纠结我说的这点。我想我得展开讲讲了。
瓶颈问题在我看来,没有你们理解的对我那么重要。这是我在大一时做的决定。在人生的几十年中,我只花了半年多的时间在上面,收获也是非常可观的(尤其在看问题方面有了多个角度)。
在这半年之后,我全部投入到专业知识中。
所以我大二的时候不玩手机,不在电脑上玩娱乐的东西,甚至不上QQ,只为了能学好专业知识。最后不仅是理论课成绩,我实践课的成绩也很高。
所以你们可以看到我的成绩排名从100多名提升到第一名,并且拿了一等奖学金。这样还不够?那我 23:00 睡, 06:00 起的作息再压缩一下?
你们也可以看到我在大三上学期在软件工程这门课上的投入程度,甚至不惜压缩了其他非计算机课程或者重要程度不高的计算机课程的时间,将精力更多地投入到软件工程。如果这还不叫重视计算机能力的训练,那我只能请教如何才叫重视了。
再者,如果我大一没有花这半年多的时间在上面,我肯定不可能加入到构建之法的群里面,更不可能当助教。
在这之后,如果我没有听从建议放弃我接下去的计划,放弃我前两年积累的优势去考研(当然,我是想清楚结果再做出选择的,并且我这个做决定的人应当承担所有责任)。你们还可能看到我每天至少一篇关于 leetcode 的博客,还有我参加一些比赛的总结,还有很多篇关于设计模式的博客,还有很多篇关于 Android 技术深入的文章,可能还有其他的。(好吧,历史不容假设)
也就是说,我想要在非技术方面的投入仅仅是几十年中的半年,在未来我就不打算像这样投入在这上面了。而这半年在很大程度上弥补了我十多年来的不足。
这样的话,这半年仍然是不应该的吗?如果真的那么不应该,那么我当助教是为了什么呢?当助教能对我的算法能力有什么帮助?对我的计算机网络知识有什么帮助呢?为什么不把这些时间拿去好好准备简历准备面试呢?为什么我要坚持到现在,甚至打算积极去推动助教的一些工作呢?
请你告诉我答案。
如果你想问“为何不能两者兼顾呢”。我想说的是,我一直在尝试。从大一到现在,凡是重要且需要兼顾的事,没有一次不两者兼失的。大一的时候想做班长的同时兼顾成绩,结果两者都做得很差。大二倒是只学习。大三想兼顾软件工程和其他课程的成绩,结果其他课程崩了,软件工程的表现也没有我预期中的好。大四考研前期想兼顾考研和计算机技术的提升,结果考研复习进度太慢,也就放弃一个。尽管最后还是崩了。
为什么知道不能兼顾还想要兼顾呢?你可能知道“屡败屡战”。我就是想要两者兼顾的能力。