Morgan Stanley Technology Summer Analyst Intern复盘
前言
因为一些机缘巧合,这几天以一个没有准备好的情况下被赶鸭子上架进行了一次Morgan Stanley(大摩)的笔面经历,简单复盘下,总结一下流程和记录下自己的一些感悟。
时间跨度:3.11—>3.15—>3.22(3.31)
流程总体还是很快的,每次都会发邮件给反馈。
Whole process
可能因为这个是提前批次,所以流程有所简化,轮次相对较少,大概是code test -> phone interview -> online interview -> offer。注意:interview都是全英文,30分钟左右。
0307 参加宣讲会。有一说一摩根是真的有钱,妇女节来临之际,给每个来宣讲会的女生送了伴手礼(一束花+一个欧舒丹护手霜),且每张桌子上放了帆布包或文具袋;
0308通过邮箱收到含code test链接、账户及密码的邮件,要求0312中午前完成(code test内容下面会详细说明);
0311 完成code test,结果是2道AC。
0313 收到通知进入下一轮电面(phone interview)的邮件,邮件内说明会在电面前邮件通知你时间;
0314 下午1点收到邮件,约0315 10:00-10:30时间电面,非常人性化地征求了意见;
0315 约定的时间进行了电面。
Code Test
笔试平台为hackerrank,要求40min完成2道题,不限语言,难度大概是中等题,但是想要规定时间内都AC具有一定的难度。不过让我比较意外的是这次所有人的code test题目甚至都是一样的,原本以为是不打算笔试刷人的意思,但是后来得知只有都AC的才能进入下一轮……
这次的题目为:
题目一:给定target字符串,要让与target字符转等长的全零字符串翻转成target,求解最小翻转次数,其中翻转规则如下:
将给定位置以其右边的数字全部取反
target: 0100
全零字符串: 0000
第一次从3的位置翻转:0011
第二次从1的位置翻转:0100
至少需要两次
从最左边开始搜索,找到有几次变化,答案就是几
题目二:
给定两个字符串数组,例如A:[“tea”, “boy”, “aaa”],B:[“aet”, “aoy”, “aa”],要将A中的每一个字符串转化为B中,如果可以就是转换次数,例”tea”变成“aet”只需要0次,”boy”变成”aoy”,需要1次, “aaa”变成”aa”不能则是-1,答案是[0,1,-1]
0315-Phone Interview
电面过程
电面前一天晚上,我在网上搜索了一下面经,发现摩根问的问题有一些相似的情况,甚至可以形成一个题库。(也很合理,毕竟面试你的人技术基础和英语很难兼得)。我主要参考的是这个博客整理的题库:
并结合其他面经,我整理了一套自己的题库,大约35个问题Q&A,形成了一个word文档,等过两天我也会整理了上传。
非常准时10点拨来,原本以为会是直接上来就说英文,发现对面的interviewer先是中文开场,然后问是否可以开始面试。然后英文介绍了一下主要面试流程,他先自己进行了brief self- introduction。然后让我进行3 min self- introduction。我主要说了一些自己的项目经历科研成果,但是他告诉我他今天不会详细问我自己的研究内容,主要是一些standard questions。
首先问了我Why you choose Morgan?
我就先夸了夸摩根,然后从一些soft skills的角度说了下原因, 并说自己上周听了宣讲会,宣讲会中提到的比如kind mentor, the balanced gender ratio and the work-life balance之类的很吸引我(表现自己有认真听宣讲会)。然后就宣讲会他也问了我一个问题。
接着是一些关于技术的问题,主要是以下内容:
- Stack overflow
- hash table & hash map
- memory leak/leakage 和cpp 和java在这方面分别如何预防该问题
- Garbage collection 和cpp 和java在这方面的区别
- transaction 和一些深入的问题(我因为没太听懂他的意思,就猜测一个问题的答案为deadlock,但是看他的反应应该不是,于是他根据deadlock深入问我下面的问题。|| 后来意识到应该是答案是脏读不可重复读幻读等,但是当时确实没听清楚)
- deadlock是什么&怎么预防
- Sql injection
其中大部分在我原本准备的范围内,但是会深入问,如果对该内容了解不够就会回答不上来。有的内容因为我了解并不够,所以我也不敢直接照着说答案,怕被质疑觉得作弊的可能性。所以还是需要well prepared才行。
技术面差不多结束,是一个soft question:describe a time you make a tough decision
但由于我对外企的套路不够熟悉,且没准备过这个问题,我当时有点懵。一时想不起来有什么可以分享的自己做过什么艰难的决定……所以说的有点磕磕绊绊。
最后是让我反问,我原本是问了英文,但是interviewer说可以直接中文问他(大概是他也不想英文回答吧)。通过反问了解到:1)面试官并不确定你何时可以接到是否能进入下一轮的通知,要看hr。2)外企很看重技术基础。3)Morgan不同部门不同组情况不同,不过整体上不算stressed。
电面复盘
其实于我而言结果并不重要,我只是希望可以增加一次人生经历,某种程度上我甚至很害怕进入下一轮。但是今天的电面复盘让我有一些反思。
- 外企相比国内互联网大厂,可能对你本身的项目情况并不看重,也不会问很多很难的八股文,更看重的是你对计算机基础技术的掌握情况(也就是本保研er没准备过的408内容)。外企也很看重算法,可能没有国内互联网大厂的难度高,但是从只有都AC了才给过也能看出对算法的要求。此外,对英语能力比较看重。Morgan这次的面试总体还是比较温柔的风格,不会过分为难你,点到即止。可能外企的风格都是这样吧,不像国内互联网大厂喜欢搞压力面。原本我觉得30分钟全英文面很难,但是后来发现其实很多时间会被你浪费在思考问题、思考如何表达和一些无意义“嗯啊呃”以及“I beg you pardon”中。30分钟很快就过去了。所以如果有朋友真的想去外企,还是尽可能让口语更加流利一些。(不过即便是中文面试,也是尽量避免这些无意义的水词比较好)
- 因为害怕被质疑作弊,本着希望对方认为自己诚信的原则,所以有的自己其实准备了但不懂的问题并没有展开去说,事后是后悔的,因为如果说了的话对方至少会觉得你是好好准备了的,如果深入的部分不会到时候再说自己不知道。毕竟按照现在的情况,很多人其实都有一套作弊机制,那如果你想要表现的不作弊和坦诚,很可能就比不过别人……(这就是那种不良性的内卷吧……)
- 心态真的很重要,本科的时候由于答辩经验丰富,我完全不害怕面试。(当然也有保研面试中,一般规律是如果有项目和科研情况会只问这些而不问基础专业知识,所以我当时只需要准备好我的项目内容即可的原因。)但是近两年很少经历答辩和面试,又是针对我自己准备不够充分且不够擅长的领域,所以即便我并不看重此次面试的结果,但是不可避免地我还是非常紧张,前一天晚上睡眠质量很差。之后有机会还是可以多尝试面试答辩等场合,磨练心态,尤其在自己非常想要争取的事情上,一定要提前多磨练自己!
- 最后的感受就是机会永远给有准备的人,比如针对此次Morgan的经历,不论是宣讲会当天如果携带简历会skip一些流程(我当时猜到会这样,但是我因为意愿不高所以并没有做这个准备),还是多看面经/平时把408基础夯实/准备好八股文,不论是怎样的面试都不会太慌。换到其他方面也一样。
0331-Final Interview
由于疫情原因,终面现在只能线上进行,往年需要亲自去Morgan进行Assessment Center Interview(简称AC面)。
一些曲折
3月17日晚收到进入final interview的邮件,然而不知道为什么被归入了垃圾邮件,导致我没有能及时收到。3月18日下午Morgan开始给我打电话,大概2小时内打了4个未接来电,然后经过提醒我才意识到我错过了这个邮件,并赶紧回复了邮件。邮件通知我final interview的时间为3月22日13:20-16:30,大概流程为下图所示。
当发现要3个小时3轮全英文面试的时候我是有些懵的,这是从来没有经历过的,坦白讲畏难情绪先占了上风。然而后来3月19日晚得到了学校因存在核酸检测异常要施行“7+7”防控措施,紧急封闭楼宇并进行网格化管理,而我的宿舍网络环境实在不佳,无法保证3h的稳定连接,并且我本人由于担任学生干部,做了我所在楼层的层长,事发紧急,第一天手忙脚乱,琐碎的事情较多,22日大概率也需要做核酸,考虑到以上问题,我选择在20日给Morgan发了邮件(越早发的话hr更方便安排),阐述了目前面临的情况,期望可以申请延期进行面试,如若不行则选择放弃这次机会。令人感动的是,hr第二天回复我“No worries, please be safe. We can invite you in next batch if you cannot attend tomorrow’s session.”当时非常感动于Morgan的人性化。
于是在3月23日收到邮件通知3月31日8:50-11:50进行面试。
终面过程
round2-4是全程开摄像头+共享屏幕。每轮会换面试官。
由于没有开录音,细节记得不是很清楚,可能有遗漏,但是和我之前在牛客上看到的面经分享相差很大,round3让我措手不及。下面详细谈谈。面试前我也准备了一些内容,之后有机会一起整理上传吧。下面是详细的过程:
8:50-9:00:hr介绍今天的流程和一些注意点。
9:00-9:30:code test,2道算法题,平台依然是hackerrank,会议里会给同一场的candidate测试平台的代码。坦白说难度不算高,但是如果想30分钟都AC太短。不过开头时面试官说了是最后结束时再submit,之前不用submit,面试结束的时候再submit(本人亲身体验会自动submit)。
- Question 1: 调整数组顺序使奇数位于偶数前面,与leetcode 21很像(也有区别)。开始的时候用的双指针,但只能通过4/12个测试用例,百思不得其解问题在哪,后来在round2的break环节换了方法和数据类型才AC。
- Question 2:使数组元素相等的最小移动次数,与leetcode 453基本一样,主要是数据类型为long long
9:30-10:15:round 2
是一个女面试官,首先她自我介绍,然后让我讲刚刚的算法思路。我表达了对第1题的困惑,她问我如果给我多5min,我会如何debug。接着让我进行3min self- introduction,而后根据我的简历问了些问题。
- 惯用语言(我说了java和C++),我也顺便谈了谈我现在正在参与做的项目
- 在团队中如何决定具体使用的语言
- 我的项目使用的http还是https,区别
- 我的项目使用的什么数据库,使用过什么数据库
- 对Redis的理解,和早年的一个项目为什么使用Redis
- 如何防止transaction concurrency problems
- Java和C++的区别
- 由于我谈到了两个语言在platform上的区别,看看我平时使用的platform
- 由于我谈到了java的garbage collection,让我谈谈GC
- 关于Java APIs使用的一些问题,然后也衍生到了我的一篇论文提问
- 可能因为看到我是mac电脑,问我linux的问题,linux如何查询内存消耗和线程进程情况
- 用Java编程时如何检查内存消耗情况
- 有没有接触过multi-thread编程,理解+举例
- 针对我的举例,问我当时为什么使用multi-thread而不使用multi-process
- 因为我的项目比较科研,我自己也提到了之前打算过读phd,不过现在放弃了,然后问了我soft question,做出这个选择的原因是什么
- 反问环节,我问了她1)我的question1的code,她经验较丰富,如果是她如何5min内debug,她回答的也比较笼统,大概也是针对test case找问题;2)对我有什么advice,她一方面是说可能需要再improve English,还有就是针对我个人经历她提出了点人生规划建议(?),她觉得做决定要主要depend on personal willings,这样才会竭尽全力。并且和我分享了Morgan对女性而言比较好的点。
总的来说,我挺喜欢round2的面试官,面试过程总体比较顺畅。
10:30-11:15:round 3
这一轮简直是我的噩梦,是我会半夜三点会因为想到“elevator”而惊醒开始尴尬抠脚的程度。这一轮进来了2个面试官,1男1女,女士还是我的校友学姐(15届),上来先说的中文,让我还挺意外,她俩自我介绍完开始英文,先让我进行了1min self- introduction。
我原本以为是问八股一点的问题,或者谈算法的设计思路,结果直接让我打开编译器设计elevator,我完全没预料到这一环节会出现这个词,一时没反应过来在说什么,还以为是java的某个发音相似的关键字。结果面试官给我解释了一下,是设计电梯……开始以为是关于电梯调度算法/策略,结果回答不是,就是真的设计一个elevator类……可能是考设计模式吧,但是我完全没预想到会考这个,我预想了考什么“如何设计一个taobao一样的系统”,如何“设计一个搜索引擎”,等等。然后我就写卡壳了,很尴尬地问能不能换题。然后让我设计一个VendingMachine。我说一般写这种的话应该设计数据库,然后用JDBC连接数据库。面试官说现在不用,就正常设计类,具体的数据你可以随便安排一下。在大二上学期刚学java的时候写过类似的内容后,再也没写过了。因为对不熟悉的内容怀有生涩感和畏惧感,越写越慌,很不自信,也忘了加@override,变量名的命名逻辑也有点糟糕,后来几次被提醒让我写某个关键函数之类的,提醒我时间不多了之类的……总之感觉这轮我的表现很不行。我最后就在那说“平时主要都在写leetcode之类的code test,很久没涉及过OOD,感谢这次经历让我明白要加强OOD,Thx for your time, I’m sorry for wasting your time”之类的……TAT
11:30-12:15:round 4
这轮面试官是一个感觉和我年龄相差不大的小姐姐,首先让我3min self-introduction,然后问了我一些soft questions。
- 我所说的这些论文等工作,遇到过什么challenging的问题,如何解决的
Why choose Morgan
是否遇到过需要make decisions against your values 的confliction,因为我没有特别明白这个问题,她还拿自己的故事作了说明。
- 一个类似上一个的问题,make difficult decision时候,不同option会有什么risk和potential results
最后是让共享屏幕编程,计算string中word出现的frequency,区分大小写,无数字。然后讲思路,写test case。
终面复盘
- 如果平时写代码都是leetcode这类或者套模板啥的会忽略头文件和main函数,更是没准备过设计模式设计类等OOD相关的类型。如果要准备互联网求职,还是要好好准备这方面,代码能力很重要;
- 如果要去外企的话,口语和英文都要再加强,有些词一时会想不起来或者想不起来怎么读;
- 408问题还是得准备,尤其关于linux、计算机网络和数据库;
- 总的来说,不论结果,是一次难得的经历(3h全英文是真的累),外企的面试不会过分为难你,可以守护好我的玻璃心。然而难过的事情会被忘记,开心的事情会被忘记,但是尴尬的事情不会TAT
- 我要好好克服我该死的拖延症,最后还是拖到临面试前一天才开始准备……
- 最后,感谢Hoohoo一直以来的陪伴。