招聘那些需要注意的细节,你知道多少?
很多同学最近私聊我,说自己打算参加春招,看看能不能找个大厂的工作,想让我给他简单的说下注意事项。进大厂面试,这件事我打算按照时间的维度拆解一下,分成事前、事中和事后分别说说。
事前
算法的准备。算法是最基础的内容,也是进大厂的必备技能。一听到算法可能有些朋友比较头疼,我自己也是挺头疼的。一方面我们平时工作直接写算法的时候并不是很多,另一方面学习算法要付出大量的时间,并且短期内没有明显效果且枯燥。这方面准备我从大学就开始了,最开始看书,刘汝佳的《算法竞赛入门经典》,然后每天都在 UVA Onlie Judge 上面刷一道题给自己定的最低标准是无论多忙,每天必须刷一道,保证量不能少。至于为什么量不能少,其实就是“破窗理论”,如果某一天你没坚持,有其一就有其二,久而久之就坚持不下去了,这项计划最后就废弃了,还好自己最后坚持下来了。毕业后参加工作仍然刷题,刷 leetcode,因为工作后时间相对没那么可控了,不能保证一天刷一道。所以,对于现在想准备算法的朋友,如果有时间每天刷刷题还是有必要的,如果没时间或者就是为了应付面试可以买一些算法面试的课程,有针对性的突击效果会更好。从我的面试经历来看社招大部分岗位算法不会像校招那么难,掌握基本的算法,会算时间、空间复杂度,多反复练习,这一关没有想象的那么难。
工作内容。算法考察的是程序员的基础能力,而工作内容就是考察实践能力以及解决问题的能力。这块总结有两点,第一,需要对自己用的技术、框架的核心原理和运行机制要非常熟,如果有精力能看一些核心源码绝对是加分项。第二,要总结平时遇到的每个问题,比如:内存溢出、系统不稳定、吞吐量低以及高时延等问题,除了要记录如何解决的,还要寻根溯源了解问题的底层原理,并且要上网多看别人是否遇到同样的问题以及是如何解决的。对于这两点我平时都有注意积累,但唯一的遗憾是没有及时的整理、输出。有些问题当时解决了,也了解背后的原理了,但是不及时记录导致时间长了以后基本上都忘了。所以这里强烈建议各位朋友一定养成善于总结、记录的习惯,一方面总结的过程本身就是提升的过程,另一方面防止以后忘记。
新技术。对于一些平时工作中没有用到的新技术也要有一定的了解。如果面试官提几个新名词,你都是“不了解”、“不清楚”之类的回答,那给人的感觉就是你并不是一个对技术比较热爱的人。对于工作 1-3 年的朋友,新技术虽然不需要熟悉底层原理,但起码知道技术的作用以及适用场景。而对于 3-5 年的朋友,最好能够了解新技术背后的架构设计是怎么样的,以及相对于现有技术的改进是什么。这一点其实我自己的做的是不够的,还需要继续努力。
事中
每个公司面试流程不太一样,一般来说,一面先自我介绍,然后再考察基础的算法、编码能力和技术或者框架的原理。二面考察实际的解决的问题能力,以及系统设计的能力。三面不太考察具体的技术,而是考察整体的素质,比如你对项目的整体掌握程度,对自己的角色和定位是否认识清晰,以及如何跟其他业务团队联动。HR面基本上就是最后一面了,当然这一面也很关键。下面分解说说每个过程中如何面对。
一面过程中一般会给一个算法题目要求手写代码。首先先梳理思路,如果没有思路没必要上来就写代码。如果这个算法题想了一段时间仍然没有思路,这时候可以让面试官给你一些提示。这个阶段除了算法的正确性还要注意代码的书写规范,以及异常处理,这些都是体现程序员基本素质的地方。可以考虑先写伪代码,把算法思路理顺了、变量定义清楚、把异常情况考虑全了,最后把最终代码规整地写下来,这样会给面试官一个比较好的感觉。毕竟面试官以后可能要跟你一起写代码,如果看到代码写的乱七八糟,变量名没有任何可读性,也不考虑异常情况,那他可能不太敢让你通过面试。对于技术或者框架的原理的考察没有什么技巧,就在于自己实际的掌握情况和积累,平时可以多总结,输出,面试的时候直接拿来复习效果更好。
二面时面试官会让你介绍平时工作中遇到的哪些问题以及怎么解决或者优化的。作为求职者应该先简单介绍一些业务背景,以及遇到的问题,然后再说说自己的优化方案,最终落脚点是对业务的提升是怎么样的以及技术上有什么样的成长和积累。因为优化往往是要结合业务的,而面试官不太了解你的业务场景,所以回答问题之前先言简意赅地介绍一下业务场景,既可以给面试官一个比较好的体感,又显得自己的回答逻辑清晰,更有条理性。这个环节如果网上有些优化场景与你的业务类似也可以说说,这其实也是自己学习能力的一个体现。在你的介绍过程中面试官肯定会打断你问你一些问题,对于不同经验的求职者,面试官考察的重点也不太一样。我自己的理解是这样的,对于1-3年经验的人重点考察原理是什么,怎么优化的;对于 3-5 年经验的重点考察原理为什么是这样,而不是那样。
如果面试提问了一个自己不会的问题,不要说 ”我不知道“,应该说”这个问题之前没关注过,我先思考一下“。给自己一点时间思考一下,你可以假设自己在做设计时如果遇到这样的问题你可能会怎么做,即便不会也可以谈谈自己的想法和理解。如果真的没有任何思路,就诚实的说“我不知道”就好了,但这个“我不知道”跟之前的不一样,这个是经过自己思考之后的结果。记得我去某团面试遇到过一个问题 “运行 Spark 任务,会指定 CPU core 个数,你怎么知道系统一定会给这个任务这么多的 CPU core”,我想了下确实不知道,然后面试官一笑,说 “我也不知道”,当然这并没有影响我拿 offer。二面可能会有系统设计问题,因为谈自己的业务往往是自己熟悉的,这时候面试官会给你一个他们的业务场景,问你如何设计,可能存在的问题以及优化。这个时候就要先深入思考一下,然后跟面试沟通需求和问题,不断地完善设计。这个过程重点突出自己的思考以及和面试官的沟通。
三面要注重你对自己项目整体的把握,清晰的知道自己的角色和定位,以及与其他业务团队的职责边界。切忌不要对现团队有负面的评价。之前面某东面试官就提过这样一个问题,“你对现在团队最不满意的地方是什么”,类似的问题要考虑清楚再回答。即便现团队确实不好也要客观评价,不要掺杂过多的个人情感。
HR面要好好重视,他们往往有一票否决权。HR 可能不太了解技术,所以对于技术和业务的介绍一定要熟练、自信,不要让人家觉得你不专业。其次,要凸显你的工作经验以及在团队中的沟通、协作能力。最后谈薪资是大家比较关心的,但是对于这块我没好建议,我的经验是可以多面几家,对于想去的公司期望薪资可以保守一些,对于不想去的可以报的高一些,面几家你对自己的薪资水位就有个大概的估计了。这个阶段面试的心态总结俩字:自信。
事后
其实一次面试的经验总结非常宝贵,通过一次面试你就知道自己哪些方面表现的不好,哪些方面表现的让面试官满意。对于表现不好的地方要查漏补缺,避免二次跌倒。对于表现好的地方更好进行总结,因为这会是你下一场面试打动面试官的亮点。可以把自己要表达的东西画个思维导图,然后不断在脑海重复它,不断地强化。多面试几轮你会发现你的表达越来越流利,越来越自信。
上面都是我自己经历总结的,我自己也是这样做的,这份总结更适合工作 5 年内的朋友。当然这可能不是什么万能钥匙,毕竟我自己也有面试失败的时候,但参考一下对你绝对是有帮助的。目前经济环境不好,建议各位换工作也要谨慎一些,不好轻易裸辞。希望正在面试的朋友都能顺利。
除了打算面试的同学,也有不少的同学才刚刚开始学习编程,这里也是帮助大家整理了一些相关的资料,需要的同学可以私聊我分享。不管怎么样,都要检出学习,编程的路不是一成不变,需要不断的学习新的知识,一直向前。