摩杰注册
首先,你英语要好。好到什么程度呢?聊天时能够清楚表达自己就好了。并不需要特别厉害,托福口语 20 分水平应该就可以了吧。单词量阅读能力什么的,基本上能过六级就差不多了。当然,这只是底线,因为码农说话本来就少。如果将来想有更好的发展,语言和沟通能力还是很重要的。
中国人容易忽视但是回报率超高的有两点,一是对专业术语和(互联网)行业内常见概念的理解,这个一般 Google 一下,看几篇 Wikipedia 就可以了。二是外国人寒暄和说再见的方式。在 Email 和电话里,表现得礼貌而职业,十分重要。
然后就可以各种渠道查找招聘信息了:
1. 由已经出国的朋友推荐
这条途径最为靠谱。因为不仅可以享有内部推荐的优先权,还能提前打听目标公司的工作环境、氛围、薪酬待遇等等。出国了有个朋友照应,也更容易适应新生活。如果你的朋友够热心,还可以帮你追踪进度和反馈。一般都有 referral bonus 拿的,所以也不要怕麻烦对方哈。
2. 更新 LinkedIn ,等猎头上门
到 LinkedIn 上去打磨好你的简历 https://www.linkedin.com/
然后加几个行业内关系很多的红人,比如冯大辉什么的,然后猎头们自然会顺藤摸瓜找到你。
如果你以前工作过的公司碰巧很有名的话,机会就更多了。
3. 主动出击
如果你是一个合格的程序员,应该至少知道这两个网站:
GitHub Jobs Stack Overflow Careers
可以在上面寻找提供 relocation 的公司,查看工作描述是否符合你自己的技能。
Glassdoor 和 LinkedIn 上也能搜索到工作机会。一个一个投简历过去看看吧。
还有一些地区性的,针对 Startups 的机会:
Berlin Startup Jobs Silicon Valley Startup Jobs
你也可以直接去大公司的招聘网站上去看看。一般来说,大公司接收到的简历都足够多,可能并不需要到这些招聘网站发帖。
另外,我想强调一点,大家不一定要都去挤美帝,每年留学生赶都赶不完,人家凭什么那么大老远来中国请你?荷兰德国这些欧洲国家也不错的,大部分公司技术方面要求都不算高,在 BAT 或者创业公司里锻炼过的,分分钟出来碾压他们。英语练好,cultural acceptance 方面的心态调整好,你是可以过得很开心的。
-------
接下来就是准备面试了。
面试如何准备,要看你自身能力和目标公司的要求如何,Glassdoor 上的面经非常有用,有时候在 Quora 上也能找到一些「在 XX 公司工作是什么体验」的问题,都可以帮助你
--------
最后,附送一张我家门口的日落火烧云:
https://instagram.com/ktmud/ 贱草的相册-阿姆斯特丹的秋天
祝大家开心!
本文章由海外兔 (https://osjobs.net) 撰写,我们团队有丰富的面试官经验,能帮助你分析简历,模拟面试,重新规划你的职业生涯。详细信息请浏览求职课程 (https://osjobs.net/co/)
求职系列文章:
电影《独立游戏大电影》中,主人公 Tommy 自我介绍说,"我非常非常擅长编程。" 当时在屏幕前的我第一反应是被吓到了,虽然程序员之间存在鄙视链,但是大部分的程序员都谦逊且不擅于社交,我极少听过自己非常擅长编程这样的直白。第二反应是一些不屑,我当时觉得要像 Linus 这种程度的程序员才能自称非常擅长编程吧,一般人配不上这几个字。不过后来的几年我慢慢明白,这或许是国内教育给我的烙印,缺乏自信而不擅长表现自己。其实不需要成为 Linus 才能自称擅长编程,无论是做业务开发,运维管理还是人工智能,只要认真钻研于一个领域,有一定的技术能力,有人喜欢你的代码写出来的产品,那么你就已经比世界上 95% 的程序员要优秀了。所以前期规划中,建立自信是非常重要的,程序员出国工作并不难,对学历和技术的要求也不高,只要有出国的意愿都可以来尝试。
国外求职意味着要和全球的优秀人才竞争,而且近几年越来越多其他专业的人才转到编程领域,所以竞争越来越激烈。之前我的项目招一名远程开发的工程师,一个多月时间,我收到大约 100份 求职者的简历,里面不乏顶尖学校如伯克利,哥伦比亚,加州大学的应届生简历,也有几名十多年工作经验的工程师以及一名前谷歌高级工程师的简历。同国内收到的简历一样,越优秀的人越重视自己的简历。简历的基本写法可以参考我们之前的文章如何写一份更好的简历,不过英文简历与中文简历要求不同,并不是直接拿中文简历翻译就可以,例如投美国的简历通常不允许出现照片,年龄,种族等个人资料,还有些公司会要求提供 Cover letter,也就是一段个人简介以及想加入该公司的原因。怎么写 Cover Letter 呢,可以分为两个部分,第一部分是个人简介,也就是精简版的简历,主要讲自己的相关工作经验以及特长,控制在四句话内:
Dear XXX, Foure-year experience in computer programming has urged me to apply for this position. As you can see in the enclosed resume, I have a very strong academic background in operating systems combined with over five years research experience in search engine optimization. My recent job at CPython, allowed me to further develop and strengthen my technical skills.
第二部分介绍对公司的了解以及自己为什么适合这个工作,可以从岗位描述入手:
I have studied your products carefully and found the following advantages... I had experience in Natural Language Processing, web scraping, Go, and React during my last company, that is why I suitable for this role.
你也可以参考这里的 Cover Letter 例句。我自己的求职方向是后端工程师以及全栈工程师,所以准备了两份简历。如果不确定自己写得怎么样的话,你也可以使用我们提供的简历修改服务,我们会提供简历修改以及模拟面试等内容。
当你放眼全球的话,国家与地区的选择实在太多了。近的如新加坡,日本,远的如欧洲,美国。不过我很清楚自己的目标,我最终要到 Google,但是现在英语与算法能力还不够好,所以先到英语系国家锻炼英语以及学习,永居暂时不是我的目标。首先要清楚自己的目标,再决定走向哪个方向。如果你没去过当地旅游,我建议出国工作前最好先逛逛当地的留学生论坛或者华人论坛(美国的一亩三分地,德国的 abcdv)了解下华人眼中的当地情况。当然,这些国家不是说去就能去的,需要根据当地的要求申请工作签证。这里我整理了各个国家地区的工作签证在 https://info.osjobs.net/,给大家做一个初步的了解。
每个国家都有大量的求职平台,我一开始也常常担心会错过一些好公司。而且有些平台不是上传简历就好,还需要填写额外资料以及信息,极为耗时。所以最有效率的方式是找内推,在领英上搜索国人内推会是比较靠谱的方式,其次才是使用求职平台。抱着多了解,多锻炼的想法,我海投了超过一百家公司。从回复率来说,AngelList 以及 Whoishiring 比较高,我建议先从这两者入手投递。
实力包括英语能力,计算机能力以及软技能三方面。有时候英语能力以及软禁甚至比计算机能力更重要,应该先了解自己不足的地方,再按实际情况去分配时间准备。
英语水平:
英语水平分为听说读写四个部分,面试对读和写的要求并不高,所以你应该着重在听和说两方面。
- 听
由于面试官可能来自各个国家,如果两个母语都不是英语的人用英语来面试,体验难以置信地差。以我的经验,印度与法国的口语比较难听懂,有一次面试中我把 Symmetric and Asymmetric (对称和非对称) 听成了 Synchronize and Asynchronous(同步与异步),我回答了一通之后,面试官给了我一个疑惑的表情然后说了句" Forget about it "。所以如果你不确定你的听力水平的话,建议上 Udacity 的课程或者浏览 YouTube 上编程相关的频道练习听力,者能让你熟悉常见的技术名词是怎么读的,例如 Ajax 这类不好读的单词,不然面试的时候根本无法回答。
- 说
面试前我找了一名英语老师(微信号:bohe_yoyo)上了 10节 商务英语以及英语模拟面试的课程,课程中她会问我一些常见的非技术问题,然后根据我的回答给出反馈以及建议,所以在真实面试中,我发现有一些问题都曾经模拟过,回答起来也就得心应手。在本文之后的章节我也会举相关的一些例子。另外,我还使用 Pramp 进行算法模拟面试,系统会按照你的选择自动匹配一名工程师与你轮流担任面试官和求职者,求职者需要使用半小时解决一道算法题并与面试官保持沟通。经过多次的训练之后,我从一开始的战战兢兢到现在的心如止水,真正感受到 Pramp 的名字所暗示的 Practice makes Perfect,Pramp 既训练算法还训练口语表达能力,实在是两全其美,关键的是它还是免费的。
- 读
最好阅读自己感兴趣领域的文章,我从两年前开始经常阅读 Hackernews 的文章,里面发布着业内最新的资讯,有些文章艰深而且词汇量多,不像文档那么易读。令我坚持下来的是这里聚集着全球最优秀的工程师以及追赶新技术的热情。两年后,我的阅读能力大有进步,现在能阅读原文的技术书籍,这部分并没有捷径,只有努力。
- 写
我使用 Grammarly 修正 GitHub,开源社区以及邮件中的语句的语法,同时写英语博客。一部分锻炼自己的写作能力,另一方面也能让面试官更能了解我的技术水平。
计算机能力:
按照不同的方向有不同的准备方法,具体可以参考我们的另外一篇文章程序员如何准备技术面试。
软技能:
面试官会问一些 behavior 问题,回答这些问题可以根据事先模拟面试中记下的要点来回答,这样会更容易记忆以及有条理。举几个题目为例:
What kind of colleagues do you like?
- Collaboration and easy going
- Creative and flexible
- Optimistic and keep on learning
How do you keep up with current trends and advances in this field?
- Programmer must also be an eternal student.
- Networking with other programmers
- Be open to debate, discussion
What does your best day of work look like?
- flexible time arrangement
- working at home
- highly effective teamwork and cooperation
How did you get all of your work done with heavy pressure?
- make time arrangement in advance
- solve problems in order of priority
- set up rewards
- ask for supervising
我面了大概 20家 公司,位于新加坡,美国,欧洲不同的国家以及地区。面国内的公司我很少紧张,因为经验丰富,而且用的是母语,但是国外不同公司的面试要点都不一样。顺便提下,这个过程中没有一家公司问过我的年龄,接下来我简单介绍面试流程以及各个流程要注意的地方:
- 约定时间
如果公司觉得简历符合他们的要求,一般会请你使用 Calendly 约定面试时间,建议大家先把它的教程过一遍,我就因为不熟悉而错过了一次面试时间。选好面试时间后,使用手机/邮件设定面试前的 1小时 提醒自己,这时候抽时间了解下公司的背景以及产品,过一遍模拟面试中的常见问答。
2. 笔试题
一般公司会使用 Hackerrank 让你解决一些算法题,这部分可以使用 Leetcode 多锻炼。有的公司会让你完成一个小项目,虽然耗时但是相对简单,可以阅读类似项目的文章,确保有简单的文档和清晰的 git commit messages 。
3. 视频面试
一般视频面试使用的软件是 Google Hangout,如果没用过的话请先下载,然后学习如何开启摄像头,麦克风等基本操作。由于大陆所在地区 Google Hangout 不稳定,我一般请求对方使用 Skype 或者 Zoom。这部分异常重要,想象下对方有口音而且网络不好断断续续,面试效果极差。建议大家先提前测试下这几款软件,看哪款信号最好然后提前与公司沟通确定。
自我介绍
自我介绍大概 1分钟,可以从 3个 方面进行阐述:
- 项目经验以及技术能力
- 团队能力
- 为什么来这家公司
由于自我介绍经常被问到,所以我建议你把自我介绍背下来。
专业问答
相对于国内偏项目经验的问答。国外偏重编程基础,系统设计以及算法。编程基础根据你的方向因人而异,系统设计会问类似“如何设计推特的时间流功能?“这类的问题,要考虑系统架构,工具选型以及可能出现的瓶颈。
软技能
这部分可以根据模拟面试中记下来的要点回答,我们举一些常见的例子:
Do you know anything about our company?
- I learned about it in advance, your company is engaged in …., with the idea of ...... I think it fits me well.
- I have studied your products carefully and found the following advantages…… Several problems were also found ... I think we can improve in this way ……
What do you think of your technical ability?
- After years of accumulation and growth, I am now confident in my own technology. I am a senior developer, and I feel capable of various development tasks.
Q&A
面试官一般会给你提问的时间,这时候可以问问公司的对候选人的期望:
I attach great importance to/ think highly of this interview, so I want to know more about the company's expectations and goals for this job. I 'm used to getting to work on time, so I'd like to know your company's work hours. The company is certain to often have temporary task, I can cooperate to work overtime, but do you have overtime pay?
我感觉国外面试的气氛都比较轻松,如果在面试过程中能发挥下幽默感就更好了。另外一点就是放慢语速,因为对方是 native speaker,语速快很正常。但是如果你英语水平不够却尝试跟上对方语速的话,既会减少思考问题的时间,也会由于想不到如何表达所以断断续续,可能会使面试官非常难受。面试结束后,根据邮件反馈进行下一步即可,国外一般处理时间是以周为单位的,定时发邮件问问进度就好,同时准备面试其他公司。
同软件开发一样,找到好工作并没有银弹,经过这几个月的面试,我觉得自己的眼界也更加开阔了,了解到不同国家大企以及创业公司的文化。其实我们担心的并不是人到中年,而是人到中年却碌碌无为。勤能补拙是良训,一分耕耘一分才。最后希望大家能脱离 996,找到自己喜欢的工作。
如果你觉得这篇文章帮助到你,希望我们能继续分享自己的技术知识和求职经验,请帮我们点赞吧。
就我最近在国内通过远程面试拿到的一家德国电商(Zalando)的工作机会来分享一下我的经验吧。
首先你的简历要能通过筛选,这个基本上是一个比较长期的过程,我基本上是做到了如下几个点。
- 需要有一份英文简历,最好是放到Linkedin上面,并且能够时不时的更新,这样就会有一些猎头或者公司的Recruiter来主动联系你,更新的方面包括你最近做的项目啊,你参加的网上的培训的课程啊(我有参加了很多codeschool, codecademy的课程都放到了Linkedin的简历里面)。关于英文简历的修改,推荐一个神器Grammarly, 能够帮你纠正英文写作的一些常见错误,用他们家免费的就够了,支持Mac/Windows平台,还有Chrome浏览器插件。
- 活跃的Stack Overflow账号的profile,我曾经有一段时间几乎每天都有去Stack Overflow上面提问题和回答问题。
- 活跃的GitHub账号以及可以拿出手介(chui)绍(niu)的开源项目
- 要通过简历关,其实还有个捷径就是找朋友内推,一般内推的话,基本都能过简历关。
关于Stack Overflow和GitHub我是之前看到有些公司说这两个是加分项,所以我很早之前就开始打理我的这两个网站账号了,事实证明确实如此,靠这个我拿到了爱尔兰的Riot Games的面试机会,并且面试的时候面试官也提到了。
简历关通过了的话,接下来就是面试了。我最近面得比较多的都是大厂,而大厂的面试流程几乎都是标准化的,大同小异,基本上最关键的两个部分就是 算法题 + 系统设计。
- 算法题, 一般大部分的公司在开始面试的时候都会给你一个做在线编程题的网站,比如codility或者hackerrank这样的,一般的公司可能是30分钟一个编程大题,基本上都是1小时左右完成两个编程大题。如果你经常上LeetCode刷算法题的话,这种关卡可以轻松拿下。接下来可能就是面试官跟你约个时间然后共享屏幕来做算法题了,一般的公司可能会允许你通过IDE来完成,难度大一点的公司,比如Google,会要求你用Google Docs来白板编程。
- 系统设计,这一关我一直比较弱,最后拿下Zalando的offer也差点栽在这个上面,后来有网友推荐了educative.io的系统设计课程,并且这个课程也是在一亩三分地上被推荐最多的应付大厂系统设计课程。所以如果你不知道如何准备系统设计面试的话,可以看看这个课程。
除了算法题和系统设计,我还要说说可能比较重要的一关,就是Behavior Questions(行为测试),基本上就是问诸如“如果你跟你的领导发生了争执,你会怎么处理”, “说说你遇到的一次挫折”,诸如此类的直击灵魂深处的拷问(因为很多时候只能靠编故事 )。 这种面试在Amazon这样的公司,占到了50%的比重,之前参加了加拿大亚马逊的面试,整个4轮下来,每一关的面试官都是花了一半的时间在问这类问题,并且也听到一种说法是很多技术面过关了的面试者,最终因为Behavior Questions折戟沉沙。如果你马上要面试亚马逊的话,不妨看看油管上Dan Croitor的视频,他有一系列如何应对这类问题的视频。
好了,我要分享的我的面试国外公司的经验基本就是这些,如果你有什么问题,欢迎留言评论或者直接私信我。
或者如果你有兴趣直接从国内找海外的工作,也欢迎联系我交流经验。:)
我是从深圳直接跳槽到德国的,讲一讲去德国(欧洲)的途径。主要讲两部分内容,一是相关签证,二是个人能力。
程序员出国工作,无非分两步:先合法地拿到 offer,再合法地开始工作。
找工作这一步,可以申请 JSV 签证,然后直接登陆当地求职。JSV,全称 job seeker visa,即找工作签证。拿到德国的 JSV 以后,你就有了半年的时间来德国慢慢找。除了德国境内,周边的法国、瑞典等国的工作岗位都可以试试。
这个签证不难申请,对于符合要求的,下签很快。门槛不算高,不外乎学历、语言、经济来源、保险、目的是去找工作等等。学历方面,德方有个数据库,如果你的母校被收录了,直接认可;否则需要另外做学历认证,这个认证耗时挺长,有想法的尽量提前查一查。语言方面,不要求德语,不过本条有时效性,建议去大使馆官网查最新规定。存款和保险是为了确保你在找工作的六个月中有足够的生活费。申请签证的目的是找工作这一点也容易证明,先网投两份简历,收到回信就行了。拒信也算。目前由于疫情的原因,短期签证暂停了。有意向的同学可以先在网上远程投简历面试,反正就算你在当地投,前一两轮一般也都是电面。
拿到 offer 后,还不能直接开始工作。JSV 只允许你合法地找工作,要开始工作,必须换工作类的签证,一般是蓝卡或工签。这两种签证对留学生差别不大,对咱们工作的人则不然,一定尽量拿蓝卡。蓝卡以吸引人才为目的,开出了比普通工签优越很多的条件:有效期长、申永居快、配偶可以工作等等。相应地,蓝卡申请门槛也高,不过程序员一般都能拿到。
首先肯定是英语啦。作为一门通用的外语,只会英语也可以在德国工作。在柏林、慕尼黑、杜塞等城市,有很多国际化的公司,内部工作语言就是英语。我甚至见过在招聘文案中写“Life is too short to learn German”的。生活中,年轻人也基本都会说英语,在一起喝酒吹牛没问题。去政府部门办事可能会不太方便,很多大龄公务员只说德语,好在只是偶尔去。我目前也还没怎么学德语。
然后就是工作能力。程序员有一个优势:不管是技术,还是互联网公司那一套工作流程,都是全球通用的。我们的能力可以很快迁移到地球另一边的新公司,不会有不适应的现象。至于具体岗位的要求,千差万别,我就不多说了。
还有就是找工作的方法。
如果已经有心仪的公司,肯定是直接去官网投简历,或者搭关系找内推了。工作的明白,不多说。
如果只是想去某个国家,想在这个范围内找合适自己的公司,那就需要类似拉钩,BOSS 这样的网站了,我个人强烈推荐 glassdoor。
这家网站上在德国的英语岗位多,信息丰富,有员工或应聘者给出的评价,非常值得参考。这是我当时用得最多的一家招聘网站。
此外,indeed、xing、Stack Overflow 求职区等也多逛逛。
除了自己投简历,你还需要一个展示自己的平台,让急着招人的 HR 能找得到你。这种平台里最好的就是领英,没有之一。(毕竟 HR 一般不看 GitHub)
领英在国外的普及程度大于国内,想找欧美的工作,领英的重要性不言而喻。一定要经营好自己的领英账户,我就吃过这个亏,错失了不少工作机会。因为觉得自己的履历太过普通,我的领英主页一直是空白状态,直到去年才简单编辑了下,也就是写了写工作经历、技术栈等,没太用心。让我意外的是,从那以后,隔三差五地收到各路 HR 的私信,大意都是“我们这里有个岗位,和你的经历挺契合,要不要来试一下啊”这种。可惜这个时候我早已入职了。
所以,一定不要因为觉得自己的履历普通,就放弃这条路啊。HR 招人不是专找大牛,而是找和岗位要求契合的人。普通人也有大把机会。
领英的另外一个用处就是勾搭人。想去某家心仪的公司时,如果能找到个校友,帮你内推一下,可以省去不少的中间环节。工作的人都懂。
上面这些是想去欧洲求职要特别注意的。至于其他的,比如写好简历、有稳定更新的技术博客、GitHub 开源项目啥的,要求跟国内差不多,就不多说了。
最后,我也贴一张晚霞:
主要内容刊载于我的博客:
我所经历的欧美科技公司的面试 - Sicheng's blog
我所经历的欧美科技公司的面试普通程序员出国工作,主要三条路
- 出国读书,然后在当地找工作。
- 进入中国的欧美外企,然后找机会 transfer 到国外。
- 直接拿一个欧美公司的 offer。
我是通过第三条路去的德国,现在来说说我的经验。首先,前提是你的英语过关,能够应付面试和日常工作。我发现很多中国工程师都是卡在了面试上,我本人从 17 年 10 月份到德国工作,到现在 2022 年,四年期间我面试了很多家公司。作为程序员,时不时的去面试一下是非常好的习惯,这样你可以了解一下市场上的薪资水平如何,也可以了解市场上对于程序员的技能需求是怎么样的,毕竟软件工程师是一个需要不断学习的职业。还有一个好处是,面试需要的技能其实并不完全和你平时的工作紧相关,偶尔面试能让你不要完全忘记面试的技能。
每个科技公司的面试大致都由 4 – 6 轮构成,每一轮的内容各个公司都大同小异,但是各个公司,甚至不同的组侧重点都不一样,有些公司喜欢考算法多一点,有些公司喜欢问项目经验多一点。但是总体而言,基本上各轮面试都可能会有下面说的几种形式之一。
有些公司在和HR聊完以后,在正式的技术面试之前会发一个 home work 给你做。往往是要求你完成一个小项目,完成以后把项目代码发过去。这种项目往往说不希望你花太多时间,最多也就两个小时,但是期望你的代码是 production ready , 并且有完善的测试。个人非常不喜欢这种技术面试的方式,因为不同于其他的面试方式,因为你不知道面试官的标准在哪里,所以这种小项目理论上你可以无限打磨的你的代码。
我要不要写这个测试?恩还是写吧,万一因为没有测试挂了呢。
我要不要写一个运行指引?恩还是写吧,万一面试官不知道怎么运行呢。
我还见过的 home work 里面给的代码有注释 this is just an toy project, so we take a short cut,但是给你的要求是 you should right production-ready code.
我曾经花了一个星期写了一个作业,最后倒在了谈薪资的那一轮。
所以我的建议是:
如果不是非得找工作,尽量避免这种面试。如果决定面试了,就尽可能的把作业做的尽善尽美。花两三个小时搞一个半吊子的方案是肯定过不了面试官的 review,而且你还是浪费了时间。
这种面试形式是经常见到的,也是被讨论最多的,关于如果准备算法面试我之前的博文了提到了。这种面试形式也是被讨论最多的,因为美国的科技公司的标准化面试都有 3 – 4 轮的算法题。我强烈推荐一个叫做花花的博主,他的题解是我见到的做的最好的。在这里我就不在累述了。
系统设计我碰到过两种,一种是非常教科书般的系统设计题目,比如设计一个短链接服务,设计一个 Uber, 设计一个 Twitter 等等。这种没什么好说的,去 Github 上 system design primer 或者 Educative 上的 Grokking the System Design Interview 看看思路,然后尝试用自己的话给表达出来。另外一种比较有意思的方式是面试官往往要你设计一个他们正在做的项目,这种基本上没有标准答案,也是比较能考察出候选人的真实水平。比如我有一次在一个面试中,被问到如何设计一个用消息队列设计一个任务系统,聊着聊着面试官说他们现在就在用这个,但是遇到了A B C 问题。我正好又做过相关的工作,就给了几个解决方案,最后顺利的拿到了 offer。
不同于算法题,这种面试往往是要你打开 IDE 去写一小段代码,比如设计一个类,设计一个模块等等。我个人比较喜欢这种面试,这算是最贴近日常工作的一种形式了。比如这是一个典型的 low level design 的题目:
设计一个超市里面的扫码器,这个扫描器能扫描述货物的条形码,最后在结账的时候能够输出总金额。
这种题目往往用非常简单的文字描述,实际上面试官也考察候选人理清需求的能力。我作为面试官参加了很多次针对一个候选人面试以后的讨论,提到的最多的问题就是说这个候选人没有把问题给了解清楚就开始写代码了。回到刚刚那个题目,其实需要考虑的点挺多,比如金额怎么存,从哪里获取价格信息,最后输出的内容除了金额是否还需要明细等等。
这种题目往往不涉及到什么复杂的算法,但是在面试中过程可以真实考察候选人的真实的代码能力,例如代码的可测试性,代码结构的划分是否合理,测试案例的设计,变量函数命名的合理性等等。采取这种面试方法的公司还挺多,其实准备的方式也很简单,就是在平时的工作中,努力的提高自己的代码水平,不需要特地去刷题。这也是我作为面试者和面试官都喜欢这种面试方式的原因。我推荐一本叫做 A Philosophy of Software Design 的书,里面讲如何组织代码。
没错,国外科技面试也有面试八股文的,一般是小公司问的多。国外的八股文没有国内那么八股,因为其实面试官也是半吊子水平,动不动要你调优 JVM,操纵字节码等等。我的建议是对于平时工作中用到的框架,语言,数据库,中间件去做一些深入的了解而且不是只停留在 API 调用的层面,这是对一个资深程序员的最基本的要求。你在你简历上写到任何东西在任何一轮技术面试中都会被问到,你必须要对你简历上写的东西有足够了解。虽然现实情况是,很多人加入公司以后不是做一个新项目,技术选型早已完成,但是不妨自己问自己,如果现在这个项目刚刚开始,我应该如果选择技术框架,为什么要选择关系型数据库还不是 NoSQL 数据?
项目经历往往是在各个面试轮之间穿插着问,因为实际情况是,你做的项目可能面试官也不了解,问不出什么东西。我唯一碰到的一次是有一个公司有专门项目经历轮,就是在一堆人面前讲一下你之前的做的一个你觉得有挑战的项目。我之前做过一个用 AWS Kinesis 实时报警的事情,并且写在了自己的英文博客上。当时面试的时候,就直接对着自己的博客文章讲了一遍,然后和面试官们讨论。这种面试形式不多,而且有时候也涉及的知识产权商业机密什么的,所以无需特殊准备。
这种面试通常是由你的 hiring manager,也就是招人的 manager 来进行的。主要考察你的软技能,包括团队合作,为什么换工作啊。如果面试亚马逊,这种面试就是所谓的 LP (leadship principle),YouTube 上有一个博主专门讲亚马逊的 LP 面试。我对这种面试的感觉特别矛盾,一方面我不相信真的有那么完美的人,在工作中能够和团队亲密无间的合作,能够一直不断的提升团队的 bar,能够一直把客户放在第一,能够坚持自己的判断但是又能够虚心听取其他人的建议,等等。我在进行这种面试的时候,免不了要编故事,而且我也编得非常糟糕。但是另外一方面,这些好的品质确实是成为一个优秀的程序员所不可或缺的。 好比我之前的呆过的阿里,最后一轮面试都是 HR 的闻“味”环节,看看你有没有所谓的阿里味。这听起来很荒唐,但是等我到了阿里以后发现,那些晋升得快的人,阿里味都很足。
以上就是我这几年参加过的面试中碰到的所有的方式,总得来说,想要顺利通过技术公司的面试,拿到心仪的 offer 主要分两方面。第一方面是平时工作中的积累,包括
– 对项目中用到的技术栈,语言,中间件,数据库特性的深入理解,有助于你进行系统面试。
– 对自己代码能力的不断提升。
– 多看看比自己级别高的同事是如何推进项目和技术决策的,看看自己能否推动一些技术决策。
另外一方面,可以在面试期间突击一下 LeetCode,这是硬功夫,也是游戏规则。
最后祝大家在虎年都拿到自己心仪的 offer,拿大包裹。