经过两个月的准备和面试,第一份工作终于找到了。作为一个大学后半段才转学编程的人,深感其中的不易。所以我希望把自己所经历的这些,写下来跟大家分享。

首先,我们来看一下招聘的公司。整个招聘的开始,一共有28家公司:其中19家公司是我主动投的,另有9家是邀请我去面试的。在这28家公司里面,因为各种原因,最后拿到一面的有8家:

  • Alten(录取)
  • Amazon(录取)
  • Extia(录取)
  • Google
  • Meritis
  • Microsoft
  • Nuxeo(录取)
  • Red Hat(录取)

没有一面的原因有很多,有的觉得我能力不够与职位不匹配的(比如BlaBlaCar和IBM),有的根本没有回复(比如华为,本来很想去试试的,唉~),有的是因为我要求的薪水太高,还有的是我不喜欢。反正最后就剩下8家了。

上面的8家公司分为两类,互联网公司和IT咨询公司。

互联网公司主要是考算法题,通过在线编程笔试、现场编程面试来考量应聘者的编程能力。作为应届毕业生的我们,一般要通过1个HR面试、1-2个在线编程,4-5个现场编程面试(onsite interviews)才能拿到Offer。对于现场面试,他们会付交通费和酒店,邀请你去相应的公司分部,费用不必担心。IT咨询公司则更多看重你的语言能力,因为你要代表公司去客户那边工作,除了编程,工作内容也涉及到文档编写、与客户沟通等。技术方面一般他们不考算法,但是考查某个领域的现有技术,例如Java / Java EE的技术。题目以选择题为主,题量大约是50-100道,1-2小时。

如果想往技术方面发展的话,建议大家去互联网公司:一,他们一般都要做高质量的软件产品,所以对个人的技术提升有好处;二,从面试的难度说,程序员的水平都是经过检验的,所以队友水平高;三,薪水高,这样无需把过多的心思放在日后的跳槽上面,能够专心写代码。如果想往管理方面走的话,可能IT公司比较好,因为你能具备除了编程以外很多的技能,例如理解客户需求、了解各类项目、项目价格评估等。

下面,就让我来详细地说说每一个公司的流程和他们的面试题吧。


Logo Alten

Alten是一家IT咨询公司,主要负责提供技术咨询、网络通讯、信息系统等解决方案。在欧洲、亚洲、北美的20个国家有分部。在2015年,在职员工约20400人,其中18000人是各类工程师。这次面试的是法国巴黎的Alten。

一面。Alten很大,一整座楼,一进去面试官见到我就先要考Java,真是一言不合就上题啊。面试有27道题,是网上答题,可以使用网络查资料。其中有很多关于语言的基础知识,例如Extension、Interface、Visibility等,还有常用的一些基本工具。然后有5道算法题,关于String、Array、Math。我基本都做对了,除了有一道完全不会,是在N个球队踢比赛,两两配对,问有多少种可能。我直觉是C(2, N),可是又不是很确定。后来越想越深,很紧张就卡住了。这题只有十五分钟,后来就跳过了。最后结果显示我各方面都比较好,但是对特殊情况的考虑不周全。考完笔试就是常规的面试咯:主要介绍各种公司客户blablabla…接着各种聊天。面我的是分部的老大,后来又见了工业区的老大。老大讲话好快啊…当天的测试结果在所有4年或以下经验的人中排名第五,他们对我还是挺满意的。

二面。还是在老地方。这次他们已经决定录用我了,面试主要是跟我谈价钱签合同,然后尽快安排我去见客户。价钱方面开得很低, 我提出来要涨价,他们不太愿意。我想先见客户,再考虑是否加入,但是Alten坚持先录用、后见客。我很欣赏他们这一点,因为这是对公司信用的保证。有不少人说Alten一般,但就从我的面试官来看,他们是很有负责的公司,对客户负责,对员工也负责。面试官是我未来的领导,她有根据我的需求和想法,帮我去找相应的公司。整个面试过程氛围非常的融洽。

  • 面试人员:5.0/5.0
  • 面试难度:3.0/5.0
  • 薪资待遇:3.5/5.0
  • 公司氛围:4.0/5.0

Logo Amazon

Amazon就不用多介绍了,大家都知道。这次面试的是卢森堡的Amazon,职位是Software Engineer,主要负责给他们在整个欧洲的各个在建的物流仓库设计软件系统。要跟数以亿计的货物打交道,听起来就是充满的挑战的事情啊!

先说一面。一面是网上做题,一共三道题,编程语言任选。

  1. 第一道是一个送货点的问题:给定一个二维的地图,长为L宽为W,地图中每个点由坐标(row,col)表示。已知地图中有N个Amazon送货点:[(row1, col1), (row2, col2) .. (rowN, colN)],求地图中每个点到地图上最近的亚马逊送货点的距离。比如,地图是4x4,而送货点是[(1, 1), (3, 3)],那么期待的结果是:

    0 1 2 3
    1 2 1 2
    2 1 0 1
    3 2 1 2
    
  2. 第二题是给社交网络上的某个人targetUser推荐在线学习课程。这个课程必须是他自己没有上过,但他的朋友或者他朋友的朋友上过的课。你可以使用两个API:

    List<Integer> getDirectFriends(int uid);
    List<Integer> getAttemptedCourses(int uid);
    
  3. 第三题,解释第二题解决方案的时间复杂度和空间复杂度。

再说二面。二面在卢森堡,从下午两点面到下午六点,一共四个小时。三道算法题,一道系统设计题。答案要写在白板上:

  1. 假设你是一个电影评分网站的开发者,每天都收到来自不同网友对于不同电影的评分。每个电影评分都是针对一个电影,评分从1分到100分,1分为最高分。求:最近四个评分的最高分。
  2. 有一个长为L宽为W的二维字母板grid,全部为大写英语字母。另提供一个英语字典API。求出此grid的所有单词。比如:

    H E L L O
    W O R L D
    X J X X D
    

    含有单词["HELLO", "WORLD", "JOE", "ODD"]

  3. 关于亚马逊推荐算法的一些设计和前端页面加载的讨论。
  4. Word Ladder:如何从一个单词A,通过一个合法的路径,变成另一个单词B。求其中的一个合法路径。已知:单词A和单词B是相同长度的单词;合法路径的意思是,路径上每次变动只能是基于上一个单词对于一个单词的更改。例如从"hot"变成"cat"的一个合法路径是

    "hot->hat->cat"
    

这里面所有的题都做出来啦,所以我也就顺理成章地拿到了他们家的offer。不得不说,亚马逊还是很有钱的,底薪分红加股票,税前收入是很多法国公司两倍。因为一些个人的原因,我把亚马逊拒绝了。不过他们真的是态度很好,很希望留住我,说如果不想去卢森堡,可以把我派到欧洲别的国家,比如西班牙或者德国。亚马逊真的是很好,网购还有优惠券,建议大家可以试试看哦!

  • 面试人员:5.0/5.0
  • 面试难度:4.5/5.0
  • 薪资待遇:5.0/5.0
  • 公司氛围:4.7/5.0

Logo Extia

Extia也是一家IT咨询公司。他们的团队非常年轻,很有活力。他们的商务工程师是我见过这么多家咨询公司里最活跃的。面试、制定方案、见客户,整个流程一气呵成,效率奇高。感觉像是法国的华为,哈哈哈。我从来没有见过那个公司对于客户和程序员这么重视的。

一面从傍晚6点到进行到晚上8点半。一开始跟Business manager聊,说了一个半小时关于公司氛围,项目,报酬。又说了关于我,个人经历,项目的经验等等。又说了一下英语,一切都表现得挺好。技术测试面的是Java和Java Java EE的:50道选择题。题目问了很多东西,包含了主要是语言的掌握程度,继承、接口、Visibility、Exception分析、String、JVM、Java版本、常用库。后面还有很多关于Java EE的问题,各种配置,JSP的好处/错误处理、Spring、Hibernate的配置/使用。这次考得很烂,好多题都不会做。48题里面,40题多选,8个问答。虽然它出的题很刁钻,没有考任何逻辑思维和写代码的题,但也算借此找到了很多不会的东西。

二面是谈工资,谈规划。然后问我希望对什么项目,然后给我找客户。基本是瞎聊,没有什么技术的东西。

三面是见第一个客户:法国兴业银行面向个体客户的分部,大数据部门。他们想要招一个大数据的,主要用是Spark和Scala,结果我不太会。除了对RDD有点基本概念以外,剩余的一窍不通。所以悲剧了。

四面是见第二个客户:法国兴业银行的投资部门。他们想招一个10人的精英团队,难题都给这个team做,比如给其他部门去做Code Review,或者面对竞争对手的新产品,快速开发出一个相应的解决方案,还会参与到欧洲和亚洲其他银行部门的技术支持。这个面试的主管挺喜欢我的,然后有一个100分钟的技术测试,五道简单的算法题。具体内容我已经记不清了,但除了几个特殊情况没有掌握好,其他全部做出来了。所以最后也顺利地拿到了offer。

  • 面试人员:5.0/5.0
  • 面试难度:3.8/5.0
  • 薪资待遇:3.8/5.0
  • 公司氛围:4.8/5.0

Logo Google

好了,到了大名鼎鼎的谷歌!!!我看到面试邀请的那一刻简直不敢相信自己的眼睛,做梦也没想到。谷歌的面试流程大概是五轮:第一轮HR视频或电话面试;第二轮也是一个视频或电话面试,45分钟,需要在Google Doc上写算法题。对,你没有听错,是Google Doc:这就意味着你没有高亮,没有错误提醒。而他们对你的期待是:代码能够正确运行、完善考虑到各种特殊情况、并保证一个优秀的时间与空间复杂度。编程语言任选;三面是现场面试,他们会邀请你到谷歌的办公室进行一整天的面试,面试一共五个,其中四个是关于算法的,一个是关于系统设计的。全部题目都是在白板上编程。中午有一个免费的午餐;第四轮和第五轮都是senior managers对你材料的审核和再面试。我因为止步二轮,所以对后续流程也没有太关注。

现在说说我的面试吧。HR那个面试,她跟我视频了半小时了解情况,看看简历上面有没有什么漏掉的信息。还有我想去哪里工作,对什么感兴趣,并安排下一轮面试。跟我面试的HR超级好,还给我介绍书籍和视频去准备算法题。二面的话,我当时的题目是PlusOne:已知一个代表某十进制正整数N的数组,数组中每一个元素代表正整数的一位数。要求返回一个能够代表N+1的新数组。面试官还问你会用什么数据来做单元测试,为什么用它们。接下来,他问了一道网络的题(DNS的作用)和一道数据结构的题(哈希表HashTable的读写的时间复杂度,以及HashCode对于这个事情的影响)。我一直以为哈希表的读写都是O(1),原来可能是O(n),又涨知识了!最后,面试官让我根据一些特定的要求设计一个软件接口Interface。

后来HR给我打电话,说我面试不错,Google Doc写的题对了,不过我对数据结构掌握不好(HashCode那边),所以我被拒了。不过她也说让我不要灰心,就回去好好准备,准备好了,18个月内可以随时再来面试。

  • 面试人员:5.0/5.0
  • 面试难度:5.0/5.0
  • 薪资待遇:不知道
  • 公司氛围:不知道

Logo Meritis

Meritis也是一个IT咨询公司,主要代理金融和银行方面的软件项目。 他们是在招聘网站上找到的我, 他们公司的人很不错,当时去面试也聊得挺开心。面试前,我在家做了一个笔试。笔试题非常难,估计是我做过的那么多题里面最难的。他们完全不考算法,也不需要编程。但是你需要对Java EE的技术了如指掌才能做得对。考试问的问题很多跟框架有关,例如JMS、JPA、JSF、EJB等,因为没学过很多都做不出来。这家公司其实挺好的,唯一让我不太满意的是,在线笔试题做完了,他们在面试的时候居然只字不提,让我觉得很可惜。后来因为面试太多忙不过来,所以把他们婉拒了。如果你对金融银行类的项目感兴趣,不妨一试。

  • 面试人员:4.0/5.0
  • 面试难度:3.0/5.0
  • 薪资待遇:3.5/5.0
  • 公司氛围:4.0/5.0

Logo Microsoft

微软也给我笔试机会了。我本来投法国巴黎的分部,没有offer。但HR说他们有在捷克共和国招人,做Dynamic CRM和Micorosoft Cloud。我答应了。

一面是视频面试,时长三十分钟。算法题很简单,题目是把一个句子的单词顺序翻过来,比如"Trump or Hillary"就变成了"Hillary or Trump"。然后问了一个SQL的问题,就是为什么数据库的表要加index?如果index这么好用,是不是越多越好?虽然问题不难,但30分钟还是挺紧的。

他们HR联系我的时间跟Google差不多,不过时至今日,我仍然不知道我这个面试是否通过。。。

  • 面试人员:4.5/5.0
  • 面试难度:只面了一轮,很难说啊
  • 薪资待遇:不知道
  • 公司氛围:不知道

Logo Red Hat

现在,说说Red Hat吧。Red Hat是我的大恩人,没有Red Hat就没有今天的我,因为之前我的导师就是带了我四个月,做完了Hibernate Search的那个项目,才有的我今天这么多的面试机会。所以我很感谢他们!我当时也是第一个投的Red Hat,九月中就偷了。法国导师还亲自给我写推荐信,把我推荐到了Red Hat Cloud Enablement,我真是何德何能啊!这个部门的工作是把所有的JBoss产品包装成Docker,全部打包到OpenShift上来。感觉非常的高大上!

面试是和4个团队成员视频,有加拿大、美国和波兰人,随便聊聊天,也没有问算法题。然后HR就告诉我说基本没问题,大家都很满意。不过她说看看手续要怎么办。但是这个职位是100%远程办公,我的所有同事都不在我的身边,而且我对DevOps不太了解,不知道是不是自己真正喜欢的东西。虽然HR说我被录取了,后来我也没有去。

  • 面试人员:4.5/5.0
  • 面试难度:4.3/5.0
  • 薪资待遇:不知道
  • 公司氛围:4.5/5.0

Logo Nuxeo

最后,让我来介绍一下自己去的公司吧! Nuxeo是一个开源的CMS内容管理系统。内容管理系统可以将相关的内容集中存储在云端,并具有群组管理、版本控制等功能。管理的内容包括文档、图片、视频等。这个公司非常有潜力,2000年创立在法国创立,从2012年以来每年年增长超过40%,在美国、法国和葡萄牙都有分部。所有的代码、持续集成CI都是对外开放的,我们可以在GitHub上面看到他们的代码。他们的客户有很多,包括波音、美国海军、E.A.、法国电信等。我在他们公司一共面了三轮。

一面是在线编程笔试。测试主要考察对于字符串的认识:寻找某一个字符在字符串中的位置,压缩字符串,排序等。一个小时五道小题,其实还是挺紧的。

二面是跟在纽约的CTO聊聊天。三面也是聊天,跟在巴黎的同事聊。。。好吧,说具体点。后两次面试主要是谈谈我做过一些什么,我对什么感兴趣,之后的职业规划,他们在做什么,他们的运营模式,他们的开发团队以及商业计划等。让我很吃惊的是,虽然面试官都不是程序员,但是他们对技术很懂,所以交流起来非常顺畅。跟他们相处也没有那种上下级的压迫感。对于代码那一块,尽管面试聊得少,但他们的代码都放在网上了,可以自己去看:他们写的代码质量很高:代码本身以及测试结果。他们有很多的CI在跑,每个commit以后都会重跑相关测试,也都有code review,整个流程非常规范。Nuxeo有很多Java的东西,但也有关于Python、JavaScript、Docker的工作任务。我认为这样开放、全面的任务像一本高质量的教科书,在这里工作一定能学到很多东西。不仅如此,他们的程序员离职率很低,大家工作之余有说有笑,感觉像一个大家庭。另外最加分的一项,是他们的UI做的非常漂亮,让我爱不释手!综上,我选择了他们作为我的第一家公司,开始自己的职业生涯。

  • 面试人员:5.0/5.0
  • 面试难度:4.0/5.0
  • 薪资待遇:4.5/5.0
  • 公司氛围:5.0/5.0

写了那么多,总结一下:我觉得在法国找程序员的工作不难,市场完全是向求职者倾斜的。只要肯努力,肯定可以找到心仪的工作。对于咨询公司来说,最重要的三点是:法语、实习经验、框架使用经验;对于Big Tech公司来说,最重要的三点是:杰出的简历、算法与数据结构、英语。

咨询公司面试你的人都不是做技术的。法语说得好,你才能够跟他们解释你做过的东西,证明你的实力,并且借此商量薪水。因为面试官对技术了解少,工作经历上面的企业名气也成为他们衡量你水平的重要标志,所以实习经历很重要。最后是各种技术框架,他们招人都想要现成的,你会的越多、越深就越有优势。

Big Tech则完全不一样。面试你的人全部都是做技术的,HR只是帮忙安排面试,全程没有任何其他非技术人员参与。他们的应聘者很多,所以唯有一份出众的简历才能帮你突出重围,拿到笔试资格:名校、成绩排名、实习、论文、竞赛……不要放过任何展现能力的机会。第二是算法和数据结构,他们非常看重你的思维能力和计算机功底,也很期待能招到极具潜力的新人。多花时间在算法上面,买本书或者在线上做题,做得差不多了再去报名参加面试。第三是英语,整个流程全部都用英语交流,所以英语很重要。

文章这么长,你居然看完了!好啦,这就是小聪这两个月找工作的心得体会。一个职业要做40年,路很长。祝大家都能找到自己称心满意的工作。谢谢关注~!