时至今日,经历了3个月的找实习工作终于落下了帷幕,幸运的是,最终拿到了自己最心仪的蚂蚁金服的offer。往年的话在现在这个时间点本来应该在实验室搬砖的,而今年受到疫情的影响,到现在还在家中。但在家也有在家的好处,在家如果有压力的话其实也能够全神贯注地去学习去准备找实习。
上次过年本来打算只在家呆两周就回学校复习的,但因为疫情导致回学校遥遥无期。时间不等人,各个公司招聘的节奏又跟往常一样,所以早早在家就开始复习了。一开始给自己定的目标,最理想的是蚂蚁金服,因为自己比较喜欢金融这一块的东西。蚂蚁算是国内金融+互联网这一块的巨头(貌似是估值最高的独角兽?第二是字节)。支付宝和微信几乎成了每个人必备的工具。发展的前景不可谓不好。在蚂蚁金服之后的理想的去向是字节跳动和腾讯。字节跳动作为估值仅次于蚂蚁金服的大厂,在近几年凭借着头条,抖音的火爆而迅速崛起。字节的产品可以说是占据了当代中青年内容输入的大头。我的同学,朋友,包括爸妈,爷爷奶奶都是头条或抖音的拥趸,每天把看头条当做读报纸一样的习惯去看。我自己也在疫情期间几乎每天都上头条了解国内外疫情的最新进展。在内容质量,排版方面来说,头条做的确实要比其他一些新闻应用做得好。例如相比于腾讯新闻,其内容的质量,排版都要更优(现在的腾讯新闻已经变成了百家号的聚集地,芝麻大的事情能发1000字的文章,狗屁不通浪费时间,如果腾讯新闻再不把把质量关感觉真的不行)。而相比于澎湃这种更专业的新闻应用。它又显得更亲民,少了一些复杂的专业术语,多了一些家长里短的闲聊。而抖音更是被誉为当代年轻人的精神鸦片,其影响力可见一斑。腾讯就不用多说了,游戏大厂,不说口碑,但用户量应该是国内毫无争议的第一。我给自己定的目标就是这三个,蚂蚁金服第一,腾讯or字节第二。但蚂蚁因为是阿里系,技术栈是java的,我自己本身的用java的,虽然说一个优秀的程序员无所谓语言,但是更换语言,尤其是对一门语言了解的越深入,更换的成本就越大,对于一门新语言的机制,语言特性都要重新学起。所以在语言方面,阿里对于我无疑是更合适的选择;而腾讯用的是C++,字节多用python和go,都需要更换成本。
这次算是第二次找工作了,自己也是有了之前一些找工作的经验,而且自己本身就耽误了1,2年,所以也没有时间再去试错,就要一步到位去定居的地方了。距离家乡近的,互联网方向发展前景好的地方,看下来应该就只有西安和成都两个地方。相比西安,成都的发展前景必然更好,天府之国,气候也湿润,其实是更适合人居住的。所以这次找工作就只把目标定在了成都,专心找成都的工作。
字节跳动
从2月中旬开始着手复习,先是把深入理解JVM又全面地看了一遍,把自己之前做的笔记也认真复盘,自己的项目也全面复盘了一遍。在二月底的时候就开始着手投简历了,其实这算投的比较早了,不过这种事情赶早不赶晚。早点投了简历也能逼迫自己早点进入学习的状态,先是投了一波京东,字节,和网易雷火。京东和字节是成都的,网易是杭州的,是为了练手(但网易效率真的太低了。。直到2个月后我都落定了才来了笔试邀请,有事就给鸽了🥶,京东到现在都没下文,要是能把北邮的简历都给筛了只能说明真的强无敌。。)。所以最后只来了字节的笔试邀请。成都的字节跳动是效率工程,之前是专门为内部hr做提高效率的工具,属于对内的一个团队。不过后来听说也要对外去卖产品了。非常有名的飞书(Lark)就是其产品,可以说是做的相当不错,国外也有很多团队在用。
这里要夸一波字节,效率真的高,全程都有hr跟进进度,不论结果怎样都会通知一声,而且流程很正式。就全程都给人感觉很舒服。字节的笔试不难,算是leetcode的medium难度。题目如下:
1 | 1.峰值定义:比前后元素都大;数组可能存在多个峰值,返回任意一个就行:如1 2 3 2 1 4 3,可以返回4或者3 |
所以最终笔试了90分(50+40)
笔试完的第二天,hr打电话来告诉我笔试通过,约了当天下午的一面。这是我找实习经历中的第一次面试。
题目如下:
1 | 1. jvm内存模型,垃圾回收方法,对象可达性分析 |
其实真是要特别感谢这位面试官,给我找到了好多知识的欠缺之处。最明显的例子就是问了我cms的并发标记和重新标记之间的过程,其实这个部分在书上和其他面经或资料上很少提到,但却是CMS中很重要的部分,就是并发预清理,带着对这个部分的疑问,又去深入了解的三色标记法。可以说是对整个cms有了更深刻的认识。而hashmap更是老生常谈的问题,但要把它的整个工作过程完整细致地描述出来也不是一件轻松的事,这就是熟能生巧了。而对于算法题其实也是leetcode上的一道原题(bfs+标记),只不过最后因为时间不够就没做完了,但还是详细地描述了解法。整体答得还行。唯一的缺憾就是题没有做完。
面完第二天hr打电话来说一面通过,约了一下二面的时间(效率是真的高)
二面题目如下:
1 | 实现62进制加法:0-9,a-z A-Z |
上来先是做题,不得不说字节对于算法能力看得真的很重。先笔试,然后每一轮面都有做题。算法题不难,就是多进制的加法,处理好映射和进位的问题就能迎刃而解,再者这种题做的太多了,几乎是不假思索地动手写。很快就写完了。剩余问的基础题也不难。只要好好准备一般都是在覆盖范围之内的。最后问了一道开放题。微博中如何长连接变短,变成t.cn/dasgjkd 这种形式。我回答的是在微博服务端利用hash对长连接生成相应的短连接,然后将其映射关系保存在数据库中,在访问的时候请求先到微博服务端,然后取出真正的连接后通过redirect或者forward来转到真实的地址。而对于网络的相关问题,重点在于幂等性上,知识并不难,但需要有所了解才能回答得上,所以还是应该广泛地涉猎知识
二面后隔了几天,hr打电话说二面通过了,简单聊了一下(基本是为什么想来成都,以及对于互联网快节奏的看法等)。之后就发offer了,效率是真的很高。
总结:字节作为互联网新贵,其前景相当不错。整个面笔试的流程突出的特点:
第一就是十分注重代码能力,除了1轮笔试,2轮面试都要做题。所以平常刷题还是很有必要的。
第二就是注重基础知识,对于网络,基础容器原理(hashmap,chm),并发原理(aqs工作原理、cas)的侧重点会更加多。
第三就是对于校招来说不太看项目,这是我面试过程中少有的两轮完全没有问任何项目,全程都在做题和问基础知识。因此突出一个基础知识以及刷题的重要性。
字节整个面试都使用飞书,体验感觉也很不错,感觉钉钉和飞书视频会议这部分做的很不错的
必须要感谢字节,首先发了offer让我心里有了底,而且指示了面试的大方向和重点。
之后经同学介绍,美团的业务部门也面了一下,整体的感觉也还行,面试题目如下:
1 | 序列化和反序列化一棵二叉树 |
整体回答的还行,但最后问到入职的时间,人家需要能马上入职的,感觉不合适,就没有再继续了。
蚂蚁金服(阿里巴巴)
接下来是旷日持久的阿里的面试,从3月5日一面,到4月30日意向书发放,耗时2个月,经历了 笔试 + 基础面+主管面+交叉面+总监面+hr面+补笔试。基本算是7次试了。流程虽然很长,但非常有幸认识了非常好的主管,他的提问过程是非常比较体现语言魅力的,会挖掘你的潜力,去引导回答问题,而且不仅仅是问技术基础,还会提问一些开放性的问题来综合体现各方面的素质。还有一点是我觉得他的语气非常亲切,让人在交流过程中也不会紧张。而且他还给了我一些非常宝贵的建议,不仅仅是技术方面的提高建议,还有思维方面,在平时的工作生活中要养成多观察的建议。而且后续也一直是他帮忙跟进我的流程状态直到拿到offer,真的是非常非常感谢他。
今年的笔试是所有技术岗都必须参加的,但不得不说,题目真的太难了,只有第二题a了10%
题目如下:
1 | 1.输入10个int表示10种牌个数(1到10的牌),可以打单牌(1),对子(11),顺子(12345), 连对(112233),求最少几次可以打完所有牌 |
第一题可能是需要贪心的就是类似于剪绳子,把绳子剪成2和3的小段,核心思想是去减4的段和5的段,所以我觉得应该是去尽可能凑其中的某两种或者某一种组合,如果直接使用递归形式的深度优先遍历,在复杂度低时可以解决,但是当数很大时就会耗很久,我也下来后写了代码进行验证,在数组全满的情况下需要将近10秒,所以其实还是不能全a的。由于做的时候没形成合适的代码流,(其实可以回溯拼一拼的)
第二题因为本来是以为和数组的最长递增子序列的做法类似,用动态规划的方法,只不过每次叠加的长度是其中字符串的长度,但这样做过不了,所以现在还没想到更好的办法,网上搜索也没有搜到更好的做法。
阿里的笔试风格和平常刷的leetcode的风格相差比较大,不太好做针对性的练习,所以还得平常多积累,多找找类似风格的题做
整个面试问题如下:
1 | 一面: |
因为之前笔试成绩比较低,所以又补了一轮笔试,这轮的题目比较符合平常做的题目类型:
1 | 题目一:判断数字是否是回文对称数字 |
第一道题直接用StringBuilder的reverse。第二个可以用HashMap+LinkedList,map来映射k-v关系,list来维护要淘汰的顺序。
由于四月是阿里整个财年的年底,所以hr很忙,一直到4月30号晚上才发了意向书,整个阿里实习求职历经两个月终于能画下个比较完美的句号了
整个阿里面试流程的重点在以下几个方面:
- java基础知识,包括并发,容器(hashmap是重中之重)。
- 数据库基础知识,这一块比较广,涉猎的多总不是坏事
- 框架,主要是spring的原理,这一部分还是应该去看一下源码,用小demo打断点跑一下流程的,因为spring继承体系纷繁复杂,各种抽象类之间跳来跳去,干看代码很难走通逻辑,所以打断点看流程是最好的学习方式。
- 在项目中的难点和总结,必须要对项目有比较深刻的理解和想法,所以平时在做项目的时候要多总结多输出知识
在5月之前拿到了自己理想的offer,也算是对自己的辛苦刷题和学习有所交代,期间还有一些其他公司的小插曲不足道,拿到了两个自己最想要的offer,后面就要好好努力了!