ihg

英国程序员找工作经验分享

之前有段时间博客更新频率很低,因为我去找工作啦!现在总算是大功告成,就写篇总结经验,英国的程序员小伙伴们或可用于参考。

首先本人背景:在英国八年工作经验,目前在一家小公司当Tech Lead / Senior Software Engineer,主要的技术背景是Python和AWS。这次找工作主要还是对准Senior的岗位,而我这样的背景在伦敦薪资水平较好的公司入职底薪基本都是100K-110K,再高就很难了,而福利差别主要在于年终奖和股票等。

这个数字和美国不能比、包括国内很多大厂应该也能给更高,不过一分钱一分货嘛——英国多数公司的程序员都是5*8,没有加班需求,而wlb(工作强度)比较好的公司一天实际工作时间可能也就一半吧。

【准备工作】

找工作的途径无非是三个:自己申请,内推和猎头。首先一个Linkedin的个人页面还是要有的,设置好了之后不愁没有接踵而至的猎头,如果你懒得自己动手、或者确实无从下手,找猎头帮忙也未尝不可。

但是我这次找工作还是比较有目的性的,而且行业内的朋友也很多,所以完全没有用到猎头。其实大厂就那么几个、自己对于投行、基金或者Fintech感兴趣再筛选一下,就能找出来不少公司了。有内推当然最好,没有的话就简历下点功夫也差别不大。

神器Glassdoor大家肯定都知道了,主要用途之一在于找面经,看看前人分享的面试经验和题目等;之二在于也可以看到大概的薪资标准、以及更重要的“员工打分”。我选公司的时候第一件事就是看看Work-Life Balance一栏的分数是多少(嘿嘿),数字还是比较可靠的。比如谷歌和推特都是4.2,脸书只有3.6,抖音是3.1,不过最逆天的还是Citadel的2.5……

对于公司的工资标准也要了解清楚,省的做无用功;有朋友在内部最好,否则最开始的HR面就是提问的好机会。JP Morgan完全没有HR打电话,直接就给我安排了技术面,我只好依赖于Glassdoor的大概薪资标准,直接撤回申请了。

最后也是我本次找工作吸取到的教训:一定要安排好面试的顺序和时间。原因之一是经验积累很重要,除非是纯算法面试,否则其它类型的面试都是越往后越纯熟,成功几率也越大。原因之二是offer时效的问题,比如你的次优选已经发了offer并要求马上答复,但最优选还没开始面试,时间安排上就会很紧张。

下面就给大家讲讲各种面试的大概准备方法。

【算法】

别名Leetcode,大家都懂。尽管包括我在内的很多人都非常反感此类面试,但大环境如此,如果你申请的公司有此类面试,也只有刷题一途了。直接Leetcode买个会员,找到对应公司的tag,按频率从高往低开始吧!

这次申请的公司里只有两个是纯算法面试,我都在第一轮惨死。但实际上谷歌和推特的面试题都远比我想象中要好,完全没有稀奇古怪的算法题,后面会细说。

编程】

和“算法”类似却不同,编程题只考察你的思维能力、工作经验和代码质量,也是现在很多公司采用的一种面试方式。有些编程面试也是在Hackerrank之类的平台上,但一般没有数学、算法之类弯弯绕绕的地方;另一种Live Programming的形式更加普遍,现场告诉你问题,然后在自选的IDE上编写程序。

尽管说编程能力是在工作中日积月累的,但准备也必不可少,个人还是建议在Leetcode上找些中等和简单难度的题目刷刷找手感。一方面是了解常见的解题思路,另一方面是熟悉下平时工作中可能不太遇到、但面试中常见的数据结构等。以Python为例,defaultdict和queue都是一定要掌握的。

还有一些要点:

  • 事先调试好IDE
  • 注意函数和变量的命名
  • 模块化
  • Unit Test
  • Bug调试(print等)
  • 注释

如果你平时有良好的编程习惯,这些都不是问题。

【编程语言】

比较容易被忽略的一项能力,事实上考察这点的公司还挺多的。而且相关知识很多你在实际工作中可能很少接触,所以面试之前找本书温习一下非常有必要。仍然以Python为例,经常考到的点包括:

  • First Class Object
  • Mutable v.s. Immutable
  • Iterator & Generator
  • Keyword & Positional Arguments
  • Operator Overloading
  • (Multiple) Inheritance
  • Garbage Collection
  • Asynchronous Processing

【系统设计】

除非你是应届生,不然大多数公司都会有系统设计这一轮。一些需要准备的系统包括:

  • Google Doc / Git
  • Twitter / Instagram
  • Whatsapp
  • Uber
  • Yelp / TripAdvisor
  • Web Crawler
  • Rate Limiter

我在油管上看了很多Tech Dummies Narendra L这个频道的视频,这个哥们讲得非常好,推荐。

我是很反感上来让你设计个Google Doc或者Twitter这种问题的,我又不是应聘你们公司CTO?但话虽如此还是要多看看相关视频或者文章,以掌握其中的思路和知识为主。我这次的面试过程中也没有碰到这些老掉牙的大问题,都是些比较专门的应用,确实是做项目可能遇到的。

给两点相关建议吧。回答此类问题第一要点就是gather requirements,先罗列出Functional Requirements和Non-Functional Requirements帮助自己理清思路同时面试官也看得赏心悦目。

另一点就是一定要搞明白对方的最终目的是什么:如果只是要求系统框架那就没有后顾之忧,但很多时候对方会希望你详细解释Deployment / Testing / CI+CD / Monitoring的各个步骤,此时就一定要面面俱到不能遗漏。

Culture】

Culture,或者“企业文化”,也是现在所有公司面试的必答题。一般来说考察的是两个方面:首先是你的沟通能力、应变能力和学习能力等等,说得夸张点只要你情商在线就不应该过不了;其次是领导能力和项目管理能力等,当然如果你本身工作经验不多就不需要太在意这一块了。

好消息是所有公司的Culture问题都大差不离,我只在第一次面试之前写了一天,之后基本就不需要再做准备,甚至到最后对方话音刚落我就已经对答如流了。一些必备的题目包括:

  • Constructive feedback you’ve received / given
  • How you’ve mentored a junior and helped them develop
  • How a project got delayed and you put it back on track
  • How you’ve resolved disagreement with other people
  • How you’ve worked with teammates / other teams to deliver
  • How you’ve quantified the outcome of a project or experiment
  • How a problem you’ve solved also helps other people / team

回答框架基本都是起因 – 事件 – 解决方式,注意言简意赅,一个忌讳就是不要乱扯技术细节!我在面试别人的时候就碰到过这样的,要知道Culture考察的能力和技术完全无关,甚至你的面试官可能都是非技术人员,多讲技术细节有百害而无一利。

【面经】

Skyscanner

这就不需要跟读者们解释我为什么对他们家感兴趣了吧!六月份的时候跟朋友闲聊听说他老婆去了天巡,才知道原来他家在伦敦也有部门了(总部在爱丁堡),也直接促使我正式开始了找工作的大业。话说天巡前两年被携程给收购了现在算是中国公司了吧……

  • 第一轮:非常简单的Hackerrank算法题
  • 第二轮:Present一个自己做过的工程项目 + Culture
  • 第三轮:两道系统设计题 + Culture

整个面试流程可谓独树一帜,除了一道很简单的Hackrrank以外完全没有对编程能力的考察,两轮系统设计和两轮Culture也是有点重口味。值得一提的是他家的Recruiter是我见过的最负责的,从头到尾保持沟通,面试前帮你准备、包括告诉你Culture有可能会遇见什么样的题目。

可惜我有一轮系统设计没面好,最后只拿到了一个Mid-level的职位,刚刚开始面试经验不足有点可惜。话说我当时的天真计划是只申请天巡这一家,然后给offer就直接接受……不过结合我和朋友的offer以及Glassdoor上的数据,他家的工资水平应该不高,Senior Band目测是80k-100k。

Quantile

冷门小公司(算是Fintech),只通过外部猎头招聘,我因为好朋友在这里工作就要了个内推随便面下。

  • 第一轮:Python知识+非常基础的pandas
  • 第二轮:经理面,Python知识+一道很简单的编程题
  • 第三轮:CTO面,主要是谈天加深双方了解,然后有一些high-level的算法和设计问题

真的是我经历过最随性的面试,一部分也是因为小公司本身就没有很严格的流程。CTO人非常好,终面的时候给我这个门外汉通俗解释了公司业务以及盈利模式,甚至当场表明了录取意向以及大概的工资标准。

当时就是有点措手不及没想到offer来得这么快、而且钱挺多的,毕竟我找工作刚刚开始,还好等了接近两周才正式给我发了offer(貌似是因为我朋友度假去了,然后CTO想等他回来确认一下我的资质……)。

由于有朋友在所以我掌握有十分靠谱的信息。公司的一大优点就是虽然规模小但已经实现盈利,每年都有比较可观的奖金,而且由于是扁平结构所以不存在Salary Band,每年的工资上调也有保障,再有就是wlb非常好没什么工作压力。但由于公司还是属于银行这一块所以技术不太新,未来的职业发展是一个顾虑,而且我本身偏向中大型公司所以还是有点遗憾地拒绝了。CTO非常耐心地等了我两周多的时间,在确认拿到更心仪的offer之后我马上给了答复。

Comply Advantage

一个朋友之前用来面试练手的公司,我看了下感觉还挺有意思的就申请了下。公司是做KYC和欺诈检测这一块的,而我刚好对于金融产品和数据处理都比较感兴趣,就公司业务和职位而言CA大概和我最为契合。

  • 第一轮:经理面,主要是聊背景经验和兴趣,也涉及一些Culture问题
  • 第二轮:前半小时还是集中在工作经验和专业知识上,后一小时是Hackerrank三道题,基本没有算法也没什么弯弯绕绕的地方,四十分钟搞定
  • 第三轮:系统设计,题目先发给你准备个几天再Present

个人认为他家的面试安排是最合理有效的,覆盖了编程能力、系统设计和专业知识几大块,而每一场面试都有些Culture的部分所以也没必要再单独安排一场面试了。不过第三轮安排得有点紧张,结果一个面试官是之前已经面了我的,另一个是不懂技术的Engineering Manager,最后还问了我一堆Leadership相关的问题就搞得有点奇怪。

相较之下他家的薪资福利有点一般,虽然基础工资在范围内但没有入职奖金也没有年终奖,甚至没有私人医保,只给了一点期权。最让我担心的是他家在Glassdoor上的评分有点低,而且我不喜欢这个Engineering Manager,光这两点就足以让我谢绝了。

Man Group

说实话我至今没太搞明白他家是做什么的,好像是世界上最大的对冲基金之一,是朋友内推申请的。

  • 第一轮:Take-home task,写一个随机数生成器
  • 第二轮:一场Pair programming,设计一个简单的程序;一场杂七杂八的问题,有比较简单的算法,还有一些很底层的Python问题,包括garbbage collection和hashmap实现原理等等

Pair programming那场的女面官一直在刷手机我也是醉了,然后我自己抽风非要简单问题复杂化,搞得最后写测试的时间很紧张。第二场的那些底层问题有点懵,我一个developer对这些东西真的不关心,虽然在对方一步步提示下还是答了出来。

第二轮之后就挂了。他家的薪资待遇还是不错的,主要是每年的年终奖有保障,比例也很不错。

Jane Street

这公司是做什么的我就更不知道了(后来了解到貌似也是对冲基金),纯粹是朋友有研究过推荐的,据说是英国给程序员工资最高的公司。

第一轮是电面,很诡异的是他家强调电话优先,如果用Zoom要把镜头给关掉。问了一道我刷过的Leetcode,结果面试官全程极其rude,就是不停打断你然后花样说you are wrong,但也不告诉你为什么,你试图解释算法的优点他也完全不准备听。这是我有史以来第一次几乎挂电话的面试。

后来回想下是我自己没有gather requirement,我的算法在那个特定情境下确实不是最优,但面试官这种粗鲁的态度也大可不必。

Two Sigma

著名高薪养老院,发现他家也突然开始招人就找朋友内推了一下,不过知道是算法面所以也没抱什么希望。

结果比我预料得更惨,第一轮Hackerrank就挂了。75分钟做两道题,第一题倒没什么算法,但是很多弯弯绕绕不太容易写对,费老大劲儿写出来了有一个test case还TLE过不去;第二题则是树搜索有关的纯算法题,都没来得及写完。两道题的题设都整得特别复杂,全部读明白都得几分钟时间。

这也是本次遭遇的唯一一次默拒,对于有此行径的公司我还是比较唾弃的。

GoCardless

同样是朋友之前面试练手的公司,做的是支付清算的业务,在英国小有名气,公司规模算中等。

  • 第一轮:杂七杂八的约二十道简答题,涉及前端、数据库和信息安全
  • 第二轮,共三场:
    • 代码阅读理解+挑错,和简单的系统设计
    • Pair programming,使用API接口完成一些简单的数据操作
    • Culture

第一轮的二十道简答有点奇葩,问的很多题目和我的专业背景以及申请职位都毫不相关,有不少也称不上常识。后来Recruiter也表示这个反馈他们经常收到,年底会取缔该轮次。

第二轮倒是整体比较轻松,就是系统设计部分如果准备不足时间可能有点紧张。我特别喜欢他们的代码阅读部分,面试官会一步步指引你发现问题,涉及到函数设计、数据结构、测试和异步处理等方方面面。

他家的基础工资不错,面试表现良好可以给5K-15K的入职奖励,期权也有不少;不过年终奖就不要太指望了,因为最近两年公司都是以扩张为主,并没有实现盈利。Gocardless的员工福利看上去也很可以,免费食堂+私人医保+三十多天带薪年假,Glassdoor上的评分很高,最主要是wlb一栏很棒(我只在乎这个哈哈哈)。

Google

好些年前面过一次,算法惨败。这次本来也没打算申请,而且谷歌没在招人,结果当年的Recruiter突然发信问要不要重新试试,来得早不如来得巧,就随便面下玩玩吧。

  • 第一轮:电面,简单的树构造和搜索题目,算法不多
  • 第二轮,五小时马拉松Virtual Onsite:
    • 编程一:纯算法题,leetcode medium难度,卡着时间点勉强写完
    • 编程二:实际应用题,需要考虑一些算法、写一点代码,但更主要还是看技术能力和发散性思维,最后甚至问到了finite state machine
    • 编程三:函数设计,代码很简单就是写一个递归,后续问了很多关于edge case、调用外部函数可能出现何种错误、函数行为以及如何优化内存的问题
    • 系统设计
    • Culture

实际面试下来体验非常不错,纯粹的算法题只有一道而且难度适中,另外两轮和算法的关联有限,并没有要求你在45分钟里写出奇形怪状且毫无意义的代码。

Recruiter也是全程都比较负责,VO一周后给了我答复。我本来以为编程一挂了,结果反馈是三轮编程都没什么问题,挂在了系统设计上。可以在接近一年之后重试,并且免电面直接VO。如果愿意重试的话他们会把每一轮的详细feedback发给你帮助改进,不过我已经有愿意接受的offer了,也不可能为了谷歌再等一年。

Twitter

因为有朋友最近申请过就随手试了下,主要也是看到有个招人的组还挺对我胃口。他家在伦敦的办公室好像挺新的,对于薪资情况和公司文化我也是完全不知道,就当小白鼠了。

  • 第一轮:电面,很简单的编程题,后续问了点算法和函数设计
  • 第二轮:Virtual Onsite,因为是完全分开的四场所以并不累:
    • OOD:给一个类和两个接口让你设计并写pseudo code,也是我唯一面的一场OOD。主要就是考察你编程经验习惯和代码质量,是否能理解系统要求,以及异常处理和对函数的拓展能力等等
    • 算法:结合推特应用的一道普通算法题,也没什么弯弯绕绕的地方,我写出了次优解,然后在对方提示下想出了最优解不过没时间写了
    • 系统设计
    • Culture

推特的面试真的是非常独树一帜,题目本身不难,然而他们考核的点和其它公司完全不一样所以不专门准备的话很容易挂掉。简单来说他们要求你具有独立的问题解决能力,最理想的情况是你读完题目之后问几个问题,然后他们全程闭嘴,你从解释思路、写代码、计算复杂度、跑代码以及查错等步骤从头到尾一气呵成。这和别家循序渐进由面试官主导的面试完全不一样,如果需要面试官问你问题,那么即使你的答案完美也是要扣分的。相较之下能不能写出最优解反而并不重要。

我朋友说她在面试的时候对方完全不给提示,我本来也觉得怎么这么奇怪,自己面完之后总算懂了。还好在电面之后Recruiter给了我很详细的feedback我自己针对性准备了一下,在VO的时候尽量主动引导面试的进程。

由于我在VO之前告诉他们我除了推特已经全部面完了,所以后续进展还是挺快的,三天之后就给了我答复。原本面的那个Senior职位没有过,因为系统设计说的有点浅、然后Culture面经理觉得我带项目的经验不够——后者我是不太赞同的,不过也无所谓了。好消息是另一个组想招我进去当Mid-level,而恰好这个组我更感兴趣,而且最后开出的薪资比别家Senior的都要高我就欣然接受啦~

好了讲完啦,祝大家每年工资暴涨,换工作顺利!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注