1.算法题
快速刷题。初期一天刷五题其实也是很高的负担,一般来说刚刷题,一题都至少要半个小时,一天五道的话,可能至少也要两个半小时。所以我们在刷题的时候,为了节约时间,五分钟没有思路,就别浪费时间了,直接看答案. 另外一个原因,面试的时候,也不可能让你思考很久。要明确认知,这个和高考刷题没什么区别,理解不了,先背下来。
掌握多种解法。算法题面试,做出来是一方面, 如果能够在这个题目上掌握不同时间复杂度的解法,然后再呈现给面试官,面试官自然会更加满意的。假设一个同学在面试的时候,先写时间复杂度和空间复杂度最高的方法,面试官很有可能会问你这个题目有更优的解法吗,你再写时间复杂度和空间复杂度稍低一点的解法,如果面试官继续问你能不能更优化一点,你再写出时间复杂度和空间复杂度最优的方案,面试官会认为你的思考是有深度的,如果一开始就写出时间复杂度和空间复杂度最优的方法,面试官只是会觉得这个题目你以前做过而已。
算法题的一些思路,建议记牢,来自《左耳听风》专栏
LeetCode 是一个不错的地方。如果你能完成其中 50% 的题,那么你基本上可以想面哪里就面哪里了。这里,你要知道,一些面试官也是新手,他们也是从网上找一些算法题来考你。所以,你不用太害怕算法题,都是有套路的。比如:
- 如果是数据排序方面的题,那基本上是和二分查找有关系的。
- 如果是在一个无序数组上的搜索或者统计,基本上来说需要动用 O(1) 时间复杂度的 hash 数据结构。
- 在一堆无序的数据中找 top n 的算法,基本上来说,就是使用最大堆或是最小堆的数据结构。
- 如果是穷举答案相关的题(如八皇后、二叉树等),基本上来说,需要使用深度优先、广度优先或是回溯等递归的思路。
- 动态规划要重点准备一下,这样的题很多,如最大和子数组、买卖股票、背包问题、爬楼梯、改字符……这里有一个 Top 20 的动态规划题的列表
- 一些经典的数据结构算法也要看一下,比如,二叉树、链表和数组上的经典算法,LRU 算法,Trie 树,字符串子串匹配,回文等,这些常见的题都是经常会被考到的。
2.简历
简历的注意事项也有蛮多。首先,简历最好平时就注意更新,自己有些什么成长、成果,记得及时更新到简历里,临时抱佛脚往往准备不好;其次,简历的书写需要符合逻辑性,最好按结构化思维、金字塔原理、STAR原理等进行简历的结构编排;然后,简历里不允许出现错别字,这个小细节很影响面试官的第一印象;最后,需要对自己的简历进行尽可能的量化,自己做过的项目、产品,需要有可量化的描述,不然很难定义你的价值,模棱两可的描述往往会让人觉得不靠谱、不自信。
2.1 简历的编排
一般来说,简历需要包括以下几项内容。
- 自我简介。这个自我简介是用最简单的话来说明自己的情况,不超过 200 字。比如:10+ 年的软件开发经验(说明你的主业),4+ 年的团队 leader 经验(说明你的领导力),擅长高可用高性能的分布式架构(说明你的专业和专攻),多年互联网和金融行业背景(说明你的行业背景),任职于 XXX 公司的 XX 职位(说明你的职业),负责 XXX 平台或系统(说明你的业务场景)……
-
个人信息。
- 基本信息。电子邮箱建议用 Gmail,千万不要用 QQ 邮箱,要让人感觉职业化一些。
- 个人网站。如果你有个人主页、博客、GitHub 或是 Stack Overflow,请一定附上,这是加分项。如果个人主页或博客有独立域名,那更好,这会给人一种你爱动手做事的感觉。页面也要干净有美感,这样会让人感觉你有品味。
- 网站内容。一般来说这些项都会被面试官点看浏览,所以,里面的内容你需要小心组织和呈现,千万不要造假。另外,除了技术上的一些知识总结(不要太初级,要有深度的、原理型的、刨根问底型的文章),你也可以秀一秀自己的技术价值观(比如,对代码整洁的追求,对一些技术热点事件的看法),这会让你更容易获得面试官的好感。面试官的好感很重要。
- 作品展。如果你有一些作品展现,会更好。当然,对于前端程序员来说,这是比较容易的。而对于后端程序员来说,这会比较难一些,只能展示一下自己的 GitHub 了。如果你有一些比较不错的证书或奖项(如微软的认证、Oracle 的认证),也可以展示一下。
- 个人技能。个人信息下面你应该罗列几条个人的技能。这些内容要能很明显地让对方了解你掌握的技术和熟悉的领域。
- 技术技能栈。其中包括你擅长和会用的编程语言(如 Java、Go、Python 等),编程框架或一些重要的库(如 Spring Boot、Netty、React.js、gRPC 等),熟悉的一些技术软件(如 Redis、Kafka、Docker 等),设计或架构(如面向对象设计、分布式系统架构、异步编程、高性能调优等)。
- 技术领域。前端、算法、机器学习、分布式、底层、数据库等。
- 业务领域。一方面是行业领域,如金融、电商、电信等,另一方面是业务领域,如 CRM、支付、物流、商品等。经验和软技能。带过多少人的团队、有多少年的项目管理经验、学习能力如何、执行力怎么样、设计过什么样的系统。
-
工作经历和教育经历
列一下你的工作经历。每份工作完成的主要项目(不要列一大堆项目,挑重要的),主要突出项目的难度、规模、挑战、职责,以及获得的认可和荣誉。
工作经历和教育经历,主要是对上述的个人技能的印证。不要东拉西扯,要紧紧地围绕着你的技能、特长和亮点来展开。
画外音:
- 对应于你的简历,如果能和职位需求看齐有相类似的描述,这样可以快速地让人觉得你和要应聘的职位很匹配;
- 通过简历获得面试官的好感很重要,好感是好的面试结果的前提;
- 一般来说,你简历中的内容最好控制在两页 A4 纸以内,最好有中英文版,简历不要是 Word 版的,最好是 PDF 版,然后**简历的格式和风格请参考 LinkedIn **上的(在微软的 Office 模板网站上也能找到一些不错的简历模板)。
简历的内容不要太多,内容太多,重点就不明显了。写简历的目的是呈现自己的特长、亮点和特点。只要你能呈现出 **2-3 **个亮点和特长,就可以吸引到人了。
2.2 工作项目的准备
一般来说,会有下面这样的几个经典的面试问题。
- 说一个你做过的最自豪的项目,或是最近做过的一个项目。
- 说一个你解决过的最难的技术问题,或是最有技术含量的问题。
- 说一个你最痛苦的项目,或最艰难的项目。
- 说一个犯过的最大的技术错误,或是引发的技术故障。
对于上面这四个问题:第一个问题,主要是想看看你过去工作中做过的最高级的事是什么,还有你的兴趣点和兴奋点是什么;第二和第三个问题,主要是想看看你解决难题的能力,以及面对压力和困难时的心态;第四个问题,主要是想了解一下你面对错误时的态度,还要了解你是否会对错误有所总结和改进。
如何描述一个项目:
- 要有框架。讲故事要学会使用 STAR 。Situation - 在什么样的环境和背景下,Task - 你要干什么样的事,Action - 你采取了什么样的行动和努力,Result - 最终得到了什么样的效果。这是整个语言组织的框架,不要冗长啰嗦。
- 要有细节。没有细节的故事听起来就很假,所以,其中要有很多细节。因为是技术方面的,所以,一定要有很多技术细节。
- 要有感情。讲这些故事一定要带感情。要让面试官感受到你的热情、骄傲、坚韧和顽强。一定要是真实的,只有真实的事才会有真实的感情。
- 要有思考。只有细节和故事还不够,还要有自己的思考和得失总结,以及后续的改进。
3.面试过程
3.1 形象和谈吐
形象方面
最好还是穿工作便装,休闲的也没事,但是要让人感到干净、整洁。不要有异味,不要邋遢。
谈吐方面
- 保持微笑,表现得热情、开朗和幽默是非常重要的。经常微笑,表现出自己的热情,适当开开玩笑,自嘲一下,会让人觉得你很容易亲近。
- 交谈时千万不要像挤牙膏一样,别人问你一句,你答一句,要把完整的前因后果讲完。别人问你个事,你就多分享一些这个事中的酸甜苦辣,把故事讲得生动有趣点儿。
- 说话的时候,要看着对方,一方面这是对对方的尊重和礼貌,另一方面,这也是一种自信。就算没有面好,也不要低着头,又不是做错了什么事。有什么事说不清楚的,不要犹豫,该画图画图。对于比较复杂的面试官听不懂的问题,要变换不同的方式来描述。
- 面试官问的问题,你要给出充足的细节,千万不要让面试官不断地追问,那样就被动了。你问我解决过的最难的问题是什么,我就把这个问题的来龙去脉和其中的各种细节给你滔滔不绝地讲个遍。当然,也要讲得清楚干净有条理。
3.2答不出来
- 面试中有一些问题很难,但是不要放弃,要不断尝试。很多时候,面试官并不期待你能在很短的时候内解出一道难题,他只是想看一下你遇到难题时的态度和思维方式。
- 如果你能证明给面试官看,你解决问题的方向和方法是正确的,就算是没有找到答案,也是很不错的。因为只要方向走对了,剩下的就是时间问题了。
- 如果实在解不出来,或是被问了不懂的知识性问题,那么就直接说不懂就好了。记下来,回去多看多练,下次记住了就好。
- 另外,对于没有答上来的问题,有的人会在面试后请教一下面试官。但是我觉得更好的方式是,问面试官要个他的邮箱或微信,回去后,努力搞懂,举一反三,然后写个东西再发回去。这样做是有可能让你起死回生的。多少可以暗示对方:“你看,我有不懂的,但是我能下工夫很快就搞懂了,你看我的学习能力还不错哦。你就不再考虑一下了吗?
3.3 尖锐问题
1. 你为什么要离开现在的公司?
这种问题一般都是来问你的离职动机的,招聘方有理由相信,你是怎样离开前东家的,就会怎样离开我。另外,从这个问题上,招聘方想了解你真实的动机,对工作的想法和个人的喜好。
一般来说,永远不要说之前公司的坏话,最标准的外交词令是:“我离开现有公司的原因是我太喜欢你们公司了”。这样的回答,对于招聘方来说毫无破绽可言,而如果你开始抱怨你现在的公司了,很可能会引出很多问题把你问到最后都抬不起头来。
当然,你也可以说前公司的问题,比如:自己心爱的项目被公司废弃了、公司转型了、公司业绩下滑了、在现有的公司没有成长空间了…… 这些都还是可以说的。
2. 说一下你的缺点?并给出几个例子。
这个问题也是很难很难回答的。但是,我想说,人无完人,是个人总是会有缺点的,但是有的缺点也有点不好意思说。所以,这个问题是比较难的。
- 这个问题不能说套话,说套话会显得特别假。
- 这个问题还是要说实话,也不能说一些不痛不痒的小毛病,这样会让他觉得你避重就轻。
只要你认识到任何性格的人都有问题,那么这个问题你就好回答了。
比如,对我来说,我个是比较着急的人,急性子,而且是个做事的人。所以,我最大的问题就是在推进一些事的时候,会忽略别人的感受。当压力变大的时候,我甚至会说出一些别人难以接受的话(俗话说的情商为零)。这个没什么不好意思承认的,我这么多年来也在改进自己。
总之,我想说的是,我们每个人都应审视一下自己,思考一下自己光明面的后面。而回答这个问题的最佳方法,就是想想附着在正面事件上的阴暗面,那就是你的答案。
比如,我对事情的要求太高了,跟我在一起工作人的压力太大。我太内向了,所以别人和我沟通起来有点费劲。我太过关心团队了,所以,有时候会忽略了项目成本和时间进度……
最后还要补一句,我知道我的缺点,我也在努力改正,我正在通过什么样的方式改正。这非常关键,因为这基本上是面试官最喜欢看到的答案了,就是你不仅能正视自己的缺点,而且还能不断地改正。
另外,与这个问题相对应的是,说一下你的优点。这个问题是比较坑的,你的优点是需要用证据来说明的。比如,我通常的回答是,我的优点就是学习能力强,因为我掌握的技术面很广,而且,我什么样的技术都学,比如最新的 Cloud Native 技术。作为后端人员我还学前端方面的技术如 React.js 和 Vue.js,这一切都来源于我扎实的基础知识……回答这个问题的时候,一般都会反衬出你的价值观,HR 就是想了解你的价值观。比如,我比较踏实,我想把技术一直做到老。再比如,我有韧性,我受过哪些挫折、失败、不公、无奈和无助,我没有当逃兵……
3.你为什么换工作换得这么勤?
很多公司的 HR 都会对应聘者频繁换工作持比较负面的评价。频繁换工作在职业生涯中真不是一件好事,因为用人方会觉得要么是你太不踏实了,要么是你太不行了。所以,工作不要换得太频繁。
但是如果换得太频繁了,我给你一个建议,在简历里面写上离职原因。另外,在面试时被问到这个问题时,你需要给出合理的解释,以消除用人方的疑惑。怎么给出合理的解释呢?
- 一方面,你还是需要诚恳一点儿
- 另一方面,你在解释时需要承认频繁换工作也不是自己想的,自己何尝不想在一份工作上干得时间长一点儿。无奈,要么是公司有变化,要么就是自己没选好。一方面表达自己也厌倦了频繁换工作这种事,另一方面,你要把这个话题引到另外一个方向上——什么样的工作自己可以干很久?自己所期望的工作内容和工作环境是什么样的?这样就转而去谈你所向往的工作内容和环境了,并再表达一下在这样的工作环境下,是可以很长时间做下去的,并愿意和公司一起发展。
但是,先不要说得太理想了,不然,用人方也会觉得自己是做不到的。正确的说法是,自己并不担心公司有各种各样的问题,只要有一起扛事的队友一起拼搏,这才是最关键的。
小结
回答尖锐问题你会有两种方法:
一般是比较官方的,像外交或是政治词令
另一种是比较诚恳的、真实的。虽然两者都可以,但是我觉得后者更好一些。因为那是能打动人的。
对于一些不礼貌的问题,我觉得你要站在更高的维度教育他们,这样才会显得他们的 low。
3.4 结尾问题
如果你面得比较好
这个时候可以问几个尖锐的问题,这样有利于后面谈 offer 和岗位(抓住机会反转被动为主动)。
比如,我就问过国外某一线公司的面试官下面两组问题:你们公司有多少一线开发经理还在写代码?你们的一线经理都没有时间来写代码了,不知道细节怎么做好管理?另外是不是说明你们公司有大量的内耗?任何公司都有好的有不好的,你能不能分享一下你最喜欢这个公司的地方和最不喜欢的地方?
如果你面得一般
这个时候你也可以问些加分的问题。
比如:目前贵公司或是贵团队最需要解决什么样的问题?我能帮贵公司做些什么?能不能给我一些资料我先了解一下,这样我后面如果能进来,就能上手更快一些了。
因为你面得一般的话,面试官会比较犹豫和纠结,此时你需要让面试官不要犹豫,所以,你可以表现得更加热情和主动一点。你看,竟然一副通过面试明天就要上班的“无耻嘴脸”也会为你加点分的……
如果你面得很不行,基本挂掉了。
这个时候,也要问问题。但最好问一下面试官对你的评价,并且让他指出你的不足和需要改进的地方。面试本来就是一次经历和一次学习,你也可以把其当作是一种受教育的过程。所以,不要放过自己可以成长的机会。通过面试官给你的评价,你日后就知道自己需要努力的地方和方向了。这是多好的一件事儿啊。
3.参考
1.《左耳听风》专栏:https://time.geekbang.org/column/intro/48