春招总结


I. 序言

春招总结以及没什么卵用的人生经验,感慨一下真是遇人不淑。


II. 简历投递

从3月初开始投递,坚持广撒网的策略,投递的公司从外企、互联网、创业公司、小公司无所不包….

具体的结果如表格所示:

投递时间 公司名 岗位 结果
3月1日 微软 软件开发实习生 Offer(5.27)
3月初 腾讯AlloyTeam 前端开发 漏接电话,没有然后了
3月初 腾讯 iOS开发 提前批二面被刷、正式批咕
3月初 阿里 iOS开发 一面被刷
3月初 网易雷火 前端开发
3月初 字节跳动 前端开发 只做了笔试,面试咕
3月初 华为 软件开发实习生 只做了笔试,面试咕
3月初 思慕创意 前端开发 面了一波进人才库(笑)
3月初 SAP 软件开发实习生
3月中 蔚来汽车 前端开发 邮件被outlook屏蔽了…
4月25日? 海康威视 iOS开发 简历石沉大海
4月26日? Airbnb iOS开发 一面被刷
4月29日? bilibili iOS开发 明天二面
5月2日 字节跳动 iOS开发 没人卵我
5月3日? 富士通苏州 软件开发部实习 Offer(5.17)

接下来按照时间线记述一下春招的经历…

可能有时间不明确和前后顺序错误,但是谁在乎呢…


III. 3月

刚赶完 J2EE 和 .NET 的那一周(3.4 - 3.10),3月7号做了腾讯iOS提前批的笔试题。之后可能是AlloyTeam给我打电话,但是那天我把手机放桌子上出去背书了,回机房的时候zy说你有个未接电话,反拨过去是腾讯的座机…

然后那个周六腾讯iOS面试官给我打电话,有漏接了…但是周日看到了,是手机号,打过去和他重新约了一下,当天晚上开始了腾讯一面,主要是我做的项目 FocusHour(话说我还计划写一篇其编码实现的文章的,咕)相关,以及swift的一些语法特性,以及算法和计算机网络。

关于这场面试几个比较在意的东西:一个是“4只老鼠一次检测出16瓶药水中有毒的一瓶””(药水编号0 - 15,老鼠对应4个2进制位,每瓶药根据编号给对应的老鼠喝,例如10号药水对应1010,就给第一和第三只老鼠喝,15号对应1111,四只老师都喝,根据死掉的老鼠来确定毒药编号);另一个是”数据包到了路由器上怎么找到你的设备(ARP,地址解析协议)

下一个周一 3.11下午,去了思慕创意,这个公司还是你院学生搞出来的,面试官是两个学长,然后简历里写的课程作业就被抓出来了233,他们还问了在源涂前端实习时做了什么…说了一下我做了页面开发+一些组件,还抓着问组件细节?喵喵喵,都过去半年了谁还能记得细节….最后还说我们会把你放进人才库云云,在欢声笑语中打出GG。

然后当天晚上去了网易雷火的宣讲会,讲了一堆Unity的东西….然后也没什么了

3月12日,微软没消息、鹅厂没消息、字节跳动内推没动静、刚被思慕肛了一波很难受,垂头丧气不想去微软宣讲会,觉得自己没机会了。结果竟然在下午四点半收到通知面试的邮件(内推无笔试)…垂死病中惊坐起,跑去仙林听宣讲会,还和梁神面了一波基,还收到了鹅厂二面的电话。

周三开始了鹅厂的二面,除了项目相关和swift基础知识外,准备了很久的计算机网络没有用到….印象里还记得的题目就是”一个页面从输入URL到渲染完成发生了什么”的经典题目233。然后有两个东西没答出来:一个是”为什么单页应用URL改变了不会整个刷新?(History API)” 和 “iOS说一说响应链和事件机制(https://zhoon.github.io/ios/2015/04/12/ios-event.html)"。

话说鹅厂两个面试官都劝我转前端…结果最后就死在二面了。还被捞起了两次,一次是了解了一下情况直接挂了,另一次是聊了半个小时就没了…到了月底面试进度灰了….

3月19号就是去微软苏州第一次onsite,见另一篇文章。前一晚阿里面试官突然电话来面试,当时因为张贺和春招等破事,很累很想休息,强作精神答。扔了两道算法题手动编写、手动写测试用例、扔到线上运行,还问了一些别的我不太记得了,然后问了响应链,那篇文章还没看熟,凭着记忆说了一些还被怼了。大概一个多钟头后,傻逼的面试就结束了。

阿里这个面试官是我面过这么多唯一一个浑身戾气的人,动不动就要开怼,而且很没有耐心、嗓门又大,语气粗鲁得很。本来就对阿里加班严重略有耳闻,坏印象更是加了一层。后来的福报论、669什么的,还有网上了解到的阿里的黄色破冰,实在是让我感觉这个公司恶心至极。

然后3月底做了华为的笔试题目,只记得有个蜜蜂采蜜的问题,是旅行商问题的简化…

于是三月结束了…


IV. 4月

4月4号去面了微软过后HR和我说”我们会给你发offer”,还说会在4月底之前完成,于是兴高采烈回南京了…..

事实证明这个屑轻易地开出了一张有可能不会兑现的空头支票,而我竟愚蠢地相信了…HR,至少说M$的屑HR,有这种”没的收成有的”、”不确定的说成确定的”夸大其辞的习惯,对于她们的话只可信一半,因为牵扯到业绩,肯定是拉住一个是一个,人家才不会管你信了的话会怎么样呢….

4月8日收到了“面试通过,审批后发offer”的暧昧邮件,于是被快乐冲昏头脑的我,接连咕了网易雷火笔试、腾讯正式批笔试、华为面试、SAP电话面试…..至于蔚来汽车,它3月发的通知被鬼才软件outlook收到了垃圾箱里…

结果4月16日cjd收到了offer,而我没有,慌了,发邮件问HR和HR Leader,都不卵我…..然后第二天给屑HR打电话,说是有快有慢,这周内完成……结果周五还没有,再打过去口径就变啦!

「我帮你查了一下,你的面试虽然通过了,但是部门经理没有审批;我们要和后面的候选人进行比较之后才能做出最终决定….」

做NMLGB,我4号就问过你这个屑会不会有这种情况,你还信誓旦旦一般没有问题云云,你大爷的这不就出问题了?没有百分百的确定空口放什么狗屁?但是心里MMP,嘴上还得笑嘻嘻,只能用文字不带脏话地表达了自己的不满,然后致以虚伪的感谢…..

因为这件事情,对于微软的好感骤降至冰点,一度超过大二时默拒我的SAP….但是我也学到凡事都要有一个PlanB来处理异常情况,绝不能鸡蛋放在一个篮子里;也不要听信别人道貌岸然的鬼话,因为人家是利益相关,抓到只肥羊可不拿命薅羊毛…

于是开始了长达四十天的自闭…

在四月底,还申请了海康威视、B站和Airbnb,海康威视一点声音都没,剩下两个另说….

4月27号还有字节跳动的笔试,但是心累,根本没做…


V. 5月

在自闭的同时,从4月底开始做了之前一直计划的iOS Markdown编辑器,取名MarkUP,5月2号终于写完了。在此期间字节跳动还发了个iOS实习生的招聘,于是修改简历投了过去(最后没声音),还改了一下海康威视和B站的简历信息,Airbnb好像因为什么所以不能改?不太记得了….

五一回家期间,父母还帮忙拖人询问:我妈那边有个很远的熟人是苏州华为的管理层,然并卵,人头满了,而且四月太调皮自己堵死了;我爸那边又个熟人是HR,帮我给研发扔了简历,愿意要我,是南京一家公司……(真的差一点就去了….)

我哥和我说你可以投一下富士通苏州,然后看了一下,软件开发部实习生,日语加成吼啊,虽然不算方向对口,但是我也没什么选择权,投…

5月5号还收到了上海拜椰特HR的电话,邀请面试,但是他一直吹他们的”全新编程语言”,导致我慌的一批,给了onsite面试通知。和华为的那个前辈交流了一下个人感觉不太靠谱,因为之后和富士通约的面试冲突了,就回绝了…

5号晚上收到了Airbnb的作业,一个小项目,做了一波交了…周二和富士通确定周五onsite,回绝拜椰特….

10号周五去了富士通,下午面试,上午一直在看数据库….HR领我进去后就喝研发部的两个人开聊,聊了一下大学、成绩什么的,顺便diss了一下我N1的分数不太高,之后给我布置了三道题,说一下其中一道挺难的算法吧,另外两个是一道SQL,一道读文件然后文本替换,是个人都会写那种:

100个选手和4个评委,每个选手选择两个评委进行面试,每一个评委同时只能评审一个选手,每次面试都是一对一,每次面试5分钟。编程设计排序方式,使得面试时间最短。(先写思路)

其实真的操作起来代码肯定很”脏”,就是说有很多工具性质而不是逻辑性质的东西,所以重点是思路,我的解法如下:

  • 假设4个评委中,1号评委被选手指名的次数最多,那么最短面试时间必然大于等于 1号评委被指名次数 * 5,因为A只能一个一个处理指名他的选手,所以我们只要给出一个方法,使得我们得出的时间等于A评委面试完成的时间,那么我们的这个方法一定是”时间最短的方法”。

  • 选手X选了1和3号评委,选手Y选了2和4号评委,我们称他们的选择为互补对(12和34、14和23同理)。先挑出所有的互补对并进行面试。剩下的情况只可能是:12、13、14和12、13、23这两种情况(基于 1号被选数 >= 2号被选数 >= 3号被选数 >= 4号被选数),具体论证不表了…

  • 对于12、13、14,必须迁就1号,显然最终时间由1号评委被指名次数决定。

  • 对于12、13、23,可以很方便地得到 12数 >= 13数 >= 23数,并且每一组「12、13、23」可以仅消耗10分钟来处理掉,于是剩下的只有12和13,还得迁就1号,最终时间仍然由1号评委被指名次数决定。

  • 所以按照这个步骤处理,我们得到的结果必然是时间最短的。

周末Airbnb HR联系我,14号周二接到富士通体检通知,周三Airbnb面试,各种Swift基础知识,什么值对象引用对象,extension里面能不能写成员变量、class和strut区别等一大堆,扣得太细,平常没人会在意的语言特性拿命抠,还聊了作业项目,没什么意外地挂了….

周四回苏州,周五一波体检,下午有了实习通知….

下周二,5月21日,B站HR突然电话:小伙子,面试8!约了周四11点,奈何面试官咕咕,下午call我重约到周五11点….

聊了FocusHour和MarkUP,然后是堆栈区别、数组链表区别、说几种排序、Http/TCP不同、TCP和UDP不同…..状态良好、欢声笑语,聊了些有的没的,嘴贱来了一句:”我还以为您会问GCD、Runloop这种呢。” “那我们在聊一会。”……

巴拉巴拉讲了一堆GCD的。”你说说dispatch_sync和dispatch_syanc两个的区别吧。”哦我记得,巴拉巴拉说了一堆。”你的理解有一些偏差,你可以再看看。”…..结束面试

周一MS来电,小伙子还来♂玩吗,我们要发offer。行,毕竟你是爸爸。不确定这次给我打电话的是不是那个屑HR。因为4月份的破事,特意追问有没有问题,答曰会催同事这周完成,一下子凉了半截,上次也是这周完成然后没了….

中午又来电话,说O365满了,回去别的部门,行反正我没有选择权….又追问了一遍具体情况,称人没满,于是从waiting list到了offer list,希望甚大云云….又不是真的发offer了,只是开始排队了,又不是一定有,又开始这种强行夸大的说法….

结果当晚居然发offer了….虽然开心,但是已经没有原来的快乐了。本来十分的喜悦,因为之前恶心人的空头支票一下子到了七八分的胃口,剩下的那些也就两三分了…此外加上中美贸易战的影响,相当于原先的金饭碗,不仅裂了条大口子,旁边还来了把锤子….

今天5月29日,B站HR来约了第二面,走起,Plan B不能丢…


VI. 总结

emmmm

不要信HR的鬼话,以及时刻准备Plan B

4月初的时候,本来打算直接微软工作的,现在想想,还是准备夏令营吧,一来是无法转正的Plan B;二来中美贸易战的影响可能会对外企造成大的重启;此外就是国内的话学历挺重要…

就这样吧….

微软苏州实习生2019春招面试经历


I. 简历投递

寒假回来后开始准备春招的事情,虽然心仪公司是微软苏州(钱还行、不加班、离家近、发展空间好),但是考虑到自身水平不是很突出,所以还是海投了简历,此处不表。

3月1号简历制作完之后进行了投递,并请梁神帮忙来了一波内推。过了很久觉得没有希望了,终于在12号微软宣讲会当天收到了面试邀请。话说这一波内推实际上是很重要的,如果不内推的话,就要做微软那个据说很可怕的笔试题(四道题据说做出一道能进面试),而且不走内推对于时间还有很大影响,今天2019.4.4我走完了所有的流程,而有的同学昨天刚做了笔试。(wrh手撕了两道半之后就关了,而mmz说很简单…)


II. 第一次现场面试

3月19号去微软苏州进行了前两轮面试,从两点到四点,两场一个小时,虽然没有亲自确认,但是应该是两场分别打分,只要两个面试官中有一个给Positive就可以进入最终面。我大概十二点多到了微软苏州办公楼,在下面复习了一段时间后,大约快到两点面试官会下楼叫人,跟着进到九楼,在一个单独的小房间面试。第一场结束后隔壁的面试官来给我做第二面。


2.1 第一面

2.1.1 自我介绍

第一面的时候,面试官让我来段自我介绍,而他在这个时间段读简历,于是我就顺着简历上的聊了聊自己做的项目,其中重点聊了下我寒假里模仿Forest做的一个iOS应用FocusHour(垃圾Apple不给我上架,xxx,为什么)。第一个面试是做移动端outlook的开发的,面试时候拿的也是一台Mac,所以他对这个很感兴趣,也讨论了一些实现上的东西。

2.1.2 手撕代码

之后就问了一道滑雪场的算法题。我一开始觉得这个问题可以有很巧妙的解决方法,试图使用动态规划,但是发现处理不了问题的复杂性,然后面试官让我先写个暴力,就递归一下。然后问我怎么优化,怎么优化?不就是加个字典保存结果吗?就这么和他说了,然后就是改了下代码,问题就这么结束了。

然后面试官让我问他几个问题,就问这题最好的解法是什么,答曰就是深搜加记忆;此外大概问了下work-life balance和面试进程安排等。说实话答题过程有点微妙,题目本身不难,但是我自己加了太多戏,导致过程有点尴尬,此外这道题感觉很“脏”,就是说有很多边界条件要判断,很容易写错或者忽略点的位置和值等细节,做起来不是很舒服。

2.1.3 算法题

一个二维数组表示滑雪场,每一个点的值表示高度,你可以从某一个点滑到它上下左右四个点(注意只能从高的点滑到低的点,且不能超出滑雪场)。求你能滑的不同路程中,最长那条路程的长度。

2.1.4 解法

对于每一个点,对上下左右四个点中各个点能滑的最长距离进行比较,从中取得最大值,自己这个点能滑的距离就是这个最大值+1,用字典保存出现过的数据。


2.2 第二面

第一面结束后马上第二面,类似的一上来自我介绍和项目经历,之后开始手撕代码题,对点分组。

2.2.1 手撕代码

一开始写了一个解法,只要遍历输入的点的列表一轮,被面试官指出这个算法可能类似如下错误:如果A和B距离合法,B和C距离合法,但是A和C距离不合法,这时如果以A、C、B的顺序遍历,C就会被认为是不合法的。于是开始改。最终写出来是联想到这个和Leetcode上一道叫做“朋友圈(circle number)”的题目很类似,就按照回忆起来的实现重写了代码,然后花了很多口舌和他解释清楚,最后也因为这个这场稍微拖了一点时间。其实出来后想到代码里好像一个地方有几圈无用的循环。

2.2.2 算法题

输入点的列表,每一项是一个点,点包括x和y两个属性,两个点的距离小于D可以被认为是一组(D已知)。此外如果A和B两个点距离小于D,B和C距离也小于D,但是A和C距离大于D,ABC仍然算一组。输出点分组结果。

2.2.3 解法

结果数组是一个二维数组result。

遍历输入的点集,pop一个点出来,并以这个点自己形成一个组group(用数组表示),时候对于这个组group做如下操作:只要组group中仍然有点,就pop2一个点出来,并遍历输入的点集,对于和pop2中的这个点距离小于D的点全部删除,并添加到到group当中,重复此步骤直到group为空。

与此同时这些从group中pop2的点保存到一个新的数组group2中,这个group2就是一个完整的分组,然后就是把group2添加到result当中。

上面这一堆做完后就是循环中的一次结束了,之后继续从输入点集pop点并进行类似操作,当把输入点集弄成空的时候就结束了。

值得注意的是,每一组形成的group2中,已经把可能在这个组中的点全部拿过来了,之后输入点集pop的新的点肯定和之前的组没有关系。


III. 第二次现场面试

二面结束之后,21号星期四收到过了的通知,之后和HR约定4月4号也就是今天再去苏州进行leader面。

四号和cjd一起到苏州,今天还有很多别的学校的同学,好像大多数是来做一面二面的,要是positive的话下午直接leader面。托梁神的福,我们的进展算是很快了。HR把我们一堆人带到五楼的会议室,然后等着面试官叫你。


3.1 leader面

3.1.1 英文会话

11点半,leader面试开始。这个面试官是做office 365的。一上来就要我英文自我介绍,喵喵喵?好久没说嘤语了,至少简单介绍名字,学校和意向后把话题切到项目上,还是FocusHour,用英文介绍了feature,之后聊了下实时切换应用程序内语言的实现和可能的弊端(iOS启动app的时候会一口气加载资源文件,即Bundle.main,这导致即使切换了语言偏好,也得等下次启动才会加载新的语言资源包,可以使用自定义的BundleEx类,以及OC的set_object方法来解决)。话说除了计算机相关的英文,别的都还给老师了。

3.1.2 手撕代码

之后开始手撕代码,文章标签问题,一开始一口气写完了,然后他说你这个有问题啊小火汁。仔细看了一下,是和二面一样的问题,淦。

于是凭借着对于二面和朋友圈的印象(三者有一些共同之处,说明微软很喜欢这类搜索的题目),写了和二面类似的解法,然后他提出这个时间复杂度太高,我也承认了。

他说能不能一次遍历,我想了想说可以用字典和树来做,维护一个表示父子关系的树形结构,用字典根据tagid来查找对应的树节点。写完后他说我这个方法会被调用多次,你有什么优化方法吗?我说要不在这整个方法外部来个字典?他说希望减少空间使用,可以增加时间复杂度,我说可以在构造树的时候用节点保存文章…

这一段写的不太清楚,感觉我有点微妙地偏离了他要求的点,因为时间问题这个问题没展开。然后他又问了输入数据可能有什么错误,我说要么是重复,要么有环,重复的话将树节点的children属性由list改成set,环的话在dfs中保存访问过的点…时间也到了,就大致说了一下,然后就结束了。

结束时已经超时了几分钟。出来时还舔了一波面试官,要是您觉得可以还麻烦给个过什么的…

3.1.3 算法题

系统中有很多个tag,tag间存在父子关系,如“iOS”和“Android”这两个tag都是“编程”这个tag的孩子。一篇文章会包含多个tag,给一个tag,输出包含这个tag以及其子tag的文章的列表。

  • 输入tag_record,这其中的每一项都是一个 (父tag,子tag) 的二元组

  • 输入tag_article,这其中的每一项都是一个 (文章tag,文章id)的二元组

  • 输入tag,即查找的tag

  • 输出符合的文章名列表

3.1.4 解法

用字典和树,用字典根据tag来查找树中的节点,书中的某个节点对应一个tag,节点保存了tag值,以及children这个属性,children存了所有直接子tag的id。一遍遍历tag_record后就维护了这个有父子关系的树结构,然后就可以很方便地查到输入tag以及它的子tag们,然后和tag_article中的记录比较来查找即可。


IV. 后续

中午HR叫我出去,告知发放口头offer,正式offer争取在四月底之前发放。cjd也是这样,不过HR和他说是两周内,是加急了吗?

然后下午去了趟苏博,人太多要买票回学校时发现没票了,最后搞了半天买汽车票回南京,于是在车上写文章….四点半出发,最后九点多才到南京,长途客车环境很脏,空气也很闷,感觉很难受…所以凡事预则立,对于形成的安排还是早做打算的好。

4月8日,收到了告知即将发放offer的邮件。


4月25日更新,之前问了HR,说部门的Manager没有批,必须和后面的候选人比较,到月底有结果….然而同去的cjd在一周前已经拿到了,可能凉了吧….


5月27日更新,收到了HR的电话,虽然Office365的人满了,但是别的部门有空缺,然后我从waiting list到了offer list,傍晚收到了offer email…

我らは所詮運命の糸によって操られた人形に過ぎん。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×