引言
很多程序员面试完了,尤其是面试不通过的情况下,都会吐槽面试官:问的问题真多!你掌握了吗,就问我?我简历上都没写,你问我干什么?岗位JD没要求,你也问?总结起来就是一个现象:面试时感觉是要造火箭,实际大家都知道就是拧螺丝!这个现象,其实还挺普遍的!我个人认为面试官这么操作,是合理的,也是必须的!对于候选人来说,也有一些面试的技巧。
面试官的筛选策略
一场精心安排的面试,对于面试官来说,要尽可能的寻找到最优秀的人才;对于候选人来说,要尽可能的证明自己就是那个最优秀的人才。面试官可能一天要面对数十个候选人,而候选人可能一天只需要面对1个面水管。从体力上来说,面试官处于劣势地位。这个时候,面试官最有效的策略就是尽可能的否定候选人的优秀,而不是证明候选人的优秀,因为要否定一个候选人的优秀相对成本更低,“挑刺”总是很容易的嘛!
策略指导行为方式,既然面试官秉持着“尽可能的否定候选人优秀,而不是证明候选人优秀”的策略,那么其行为方式就只能是尽可能的“挑刺”。如何“挑刺”呢?最直接的方式就是扩大面试涉及知识的广度!也就是说会考察候选人简历说明的知识点之外,或者岗位JD描述之外的知识。如果候选人不了解,那就可以作为一个潜在的淘汰候选人的“刺”。
扩大面试涉及知识的广度,总给候选人一种被欺负的感觉:我简历上都明确写了掌握了哪些知识,岗位JD上也没说明要掌握这个知识,为什么要问呢!事实上,更优的策略不是在增加知识广度,而是增加知识深度!也就是针对候选人简历和岗位JD中涉及的知识点的深度做细致考察。这样,正常的候选人不会感觉委屈,而是会认识到自己的不足。当然,要在知识深度上做考察,对于面试官的要求会更高,这样的面试官相对来说也更少。
还有一种情况是面试官想让候选人更全面的展示能力,担心你的能力不止于简历上所写,想更全面的了解你!这个时候,对于候选人来说是一个难得的机会,把握好了也许是个加分项!
要勇于说出“不了解”
候选人面试时,对于完全不了解,或者掌握深度不够的知识,究竟应该怎么回答面试官呢?基于压力下的自我保护意识,候选人的第一反应大概率会是:总要说点什么吧。其结果就是越说破绽越多,越说越没自信,越说思维越混乱,越说越紧张!甚至有的候选人会答非所问,把问题往自己熟悉的知识强行去靠。这样其实面试效果会更差,因为本来面试官只是认为你的知识广度或深度不够,结果因为答非所问会让面试官严重怀疑你的沟通能力!
与其忐忐忑忑的回答一个自己也不理解的答案,还不如大大方方的说:这个我没有了解过。这样的回答最起码会给面试官一个干净利落、说话不拖泥带水、沟通能力不错的印象。 当然,要做到这点其实是有点反人性的,需要在每次面试过程中不断的刻意练习,而且承认自己不知道也是自信的一种表现!
承认自己不知道只是会让你的面试尽量少的减分,而要让其加分,更好的回答应该是:这个我没有了解过,但是我根据自己的经验可以简单谈一谈!很多技术问题,处理的思路都是想通的,背后的思想很可能都是殊途同归的。所以哪怕你没有真正遇到并处理过这种问题,也可以针对如何解决这个问题给出大体的策略。比如这样一个开放性问题:如何优化系统性能?我相信不是候选人做过系统性能优化,但是优秀的候选人仍然可以回答出具体的处理策略!
问题:如何优化系统性能?下边只是给出一个很简要的回答纲要,实际还需要每个结合自身经验作答。
1. 定位系统性能瓶颈
1.1 定位是否数据库性能导致
1.1.1 是否数据库连接池不足导致
1.1.2 是读取导致还是写入
1.2 定位是否接口性能导致
1.2.1 是否打印日志过多导致
1.2.2 是否RPC序列化导致
2. 解决系统性能瓶颈
2.1 如果是数据库连接数不够,是否可以增加连接池大小?
2.2 如果是读取导致,看是否可以走备库分流?
2.3 如果是打印日志过多,是否可以调整日志级别?优化日志打印数量?
2.4 如果是RPC序列化导致,是否序列化组件Bug?或者是对象过大?