四、面经篇
四、面经篇
必看
双非本科、0实习、0比赛项目经历。3个月上岸百度
前段时间,小贾在星球向我询问 offer 选择的问题,我才知道小贾已经斩获两个还不错的 offer。
小贾和我一样都是双非本科,学历上面我们和大部分一样都没有任何优势。他的校招经历挺波折的,非常有参考价值。
于是,我就找到小贾让他写一篇文章分享一下自己秋招的一些准备面试的经历以及经验。
贾哥写的太用心了,整篇文章大概有1w+字。我将分为两次来发。觉得内容不错的话,大家记得点赞催更。
希望贾哥的分享对小伙伴们有帮助!
01 关于我
秋招这一路跌跌撞撞的走来,经历了很多心酸,也成长了很多。
从信心满满的开始,到不断地自我怀疑。从一个一无所知的菜鸡,到现在还是一个菜鸟。
我或许没有很多成功的逆袭经验来分享给大家。但是!我从一个秋招的裸奔男孩到理想上岸,收获的更多是失败的经验、成长的阅历和人生的考验吧!
我对计算机并没有激情满满的热爱,更多的是随着投入的时间和学习而产生的兴趣吧!
听过很多秋招大佬的传奇逆袭经历,向往他们将热爱都投身到刷力扣的成就感中,羡慕他们在秋招时斩获大把Offer。
社会遵循着2-8原则,我或许应该被归到8这一类当中。我有时在不断问自己,你真的适合开发这一行吗?你会在这条路上走多远呀?评估自己的实力与大佬们的差距,可能就是我学习的动力吧!
作为一个被秋招毒打的打工人,我想和大家分享我的经历!
02 确立目标
带着高考的些许遗憾,我来到了我的母校,西安某不知名双非一本,专业为数字媒体技术。
这个专业虽然归类在计算机学院下,但是我们的课程方向是游戏动画,影视建模方向。
导致每次面试官问我专业,我都要解释一遍,我是计算机专业的,计算机的公共基础课(数据结构、计算机网络等)我们都会学。
我们的就业方向貌似更加偏向新媒体方向,虽然编程知识也会学,甚至还学了那本西瓜书的《机器学习》。
大学前两年,自己就是一种浑浑噩噩的状态。我没有很明确的目标和方向,每天都是在宿舍-食堂-教室,上好该上的课。
曾经想拿个综测的专业第一,但是好像光靠成绩还是不够的,后来标准降到了考试尽力考个高分就行。
对于学习数据结构、操作系统等等计算机专业课程,我有一个深深的感触:考试分数高不代表你真的“学会了” 。
这些基础课程,我基本都是上课认真听听,考前复习半个月,拿个不错的分数过了,感觉任务就完成了。
现在熬夜补这些知识的时候,眼里都是悔恨的泪水呀🥺。
大三,才意识到自己马上要毕业了,考虑了一个月,放弃考研的打算。我想了很久很久,感觉还是做一个打工人吧!
C/C++中的指针让我头晕眼花,于是我选择了Java。
2019年10月,开始了自己在大学里,真正有目标,有动力的去学习!
在一个失眠焦虑的夜晚,我写下这段话来激励自己:
今年在综测时,拿到了专业第一,可以申请保研(我校保研一般只能保本校)。也动摇过,秋招真的太难了,要不就放弃吧。但是想到自己大三时立下的雄心壮志,既然选择了这条路,就一抹黑的走下去吧,秋招不上岸,春招还能搏一把;这条路实在走不通,那我就考研!
然后,我就开始在B站、慕课网、油管、MOOC上找Java的视频学习。
从JavaSE、JavaWeb、框架的学习。2020年2月份,似乎感觉,把这些内容都过了一遍。
期间一边看网课、博客文章、Guide哥的专栏总结,一边写博客加深理解。寒假租了房,每天按部就班的输入,过年前几天才回家。过年那天晚上,都是一边看春晚,一边在复习。
03 压抑的一段时间
到3月份,认识的几个同学开始投滴滴、百度的实习,我才开始写简历,到牛客看面经,也准备投实习。但是,看到面经的各种提问,我感觉自己像没学一样,全都是知识盲区。
了解的东西不够深入,到不了面试那种深层次提问,还有数据结构、网络、操作系统这些都没怎么复习。自己学过的这些课,脑海里仅仅残留着一点点印象。
更关键的是,我简历写完了技能列表,项目实在没得可写。面对空白乏力的简历,我感觉自己还有好多好多知识要补,完全就是在精卫填海。
本来打算过完年早早去出租屋里学习,年前就定了正月除六的车票打算赶过去。但是,突如其来的疫情,只能让我待在家里,打乱了我安排好的学习计划。
每天,面对面经上满满的知识盲区,自己在家里的效率又比较低,开学又遥遥无期,学习计划一拖再拖。
同时,我的两位伙伴在5月都去到了北京实习,我还在家里天天感觉无所事事。
找实习已经是不可能了,只能直接秋招了。然而,项目经历还是空白,做过的课设项目含金量低,单纯的管理系统实在不想往简历上去写。
对比朋友每天大厂的实习日常,再看看自己的狼狈不堪。每天,整个人都有着巨大的心里压力和焦虑。学校在线的网课都是在后台静音放着,天天跑到教育厅下询问开学时间,“又是不开学的一天!哎,到底什么以后才能去学校呀!”。
那段时间,真的过得非常压抑,每天都是忐忑不安、内心焦躁。自己仿佛在一条漆黑的路上跌跌撞撞的走着,这条路没有光亮,没有尽头。
后来,心态渐渐放平,全国都在众志成城的抗击疫情,大家都在努力着。换个角度想想,自己最大的财富,不就是拥有健康吗?
为了赶上既定的任务安排,我只能每天早早起来学习,虽然中途可能被一些其他事情打断,但是用时间来弥补效率,一直复习到深夜。有时莫名感觉,自己20多年来,第一次真正的这么努力。
2020年6月,我不顾我妈的劝阻,来到了西安,和好基友小贤租了间房。他也没有找到实习,我们都是共赴秋招的裸奔男孩,两个人开始做秋招的最后冲刺!
04 复习基础知识
来到西安后,我便开始集中精力复习基础知识:
- 把多线程、集合类相关的知识重头复习了一遍,专门针对这一块的面试提问看了很多文章;
- 在B站刷了两遍宋红康老师讲的**《JVM从入门到精通》,真的良心推荐👍,零零散散看了下《深入理解Java虚拟机》**这本圣经;
- 复习了一遍计算机网络,主要是针对TCP-IP体系结构、HTTP协议,看着面经来复习知识点
- 数据库只做了简单复习,基本的SQL能写出来,牛客做了些题
眼看秋招提前批已到来,而且没有笔试,对我来说是个莫大的机会。但是,由于自己项目还没整理,没有可写的内容到简历上。所以只能任之溜走了。
这是对Guide哥之前的一次提问,让我很清楚自己接下来的两个月该做什么!
05 准备项目
7月份的时候,自己的项目经历还是空白,导致简历一直没法完善。
于是我开始着手开始准备项目。顺带着晚上刷题。
学校稍微有代表性的一点就是老师指导我们组做了个国家级的大创项目,但是我负责前端相关的内容。课设都是很基础的类似新闻管理系统、学生管理系统,还有Unity做的两个游戏Demo,实在没法往简历上写。自己学习的方向是后端,只能找有代表性的项目来做!
Github Star了些Java相关的项目,但当我拉下代码导入,发现自己搞不懂有些地方为什么要这样写,项目的架构是怎么设计的?关键的技术点在哪里?可能出现什么问题?如何去改善?
因为这些问题搞不懂,吃不透,虽然简历上写的是你的项目,但面试官一问就被问住了,所以终究还是不属于你。
由于自己底子薄,框架探究没那么深入,自己虽然学了SSM、SpringBoot这些框架,但是也只是能简单上手使用下。当下也没时间来深入探究底层原理学习,只能停留在简单了解和使用上。开源项目我可能没法吃透,我需要找个视频教程跟着做,然后基于自己理解再做拓展。
我把B站所有有关Java的项目都找了一遍,搜索不同的关键字足足过了三遍进行筛选统计。我发现项目大体可以分为两大类:
- 【原理性】:就是造轮子,对已有框架或者协议自己来做个实现;如Guide哥的RPC框架和HTTP的轻量级框架,其他的如实现Tomcat功能、性能基准测试框架、实现网络协议等
- 【功能性】:项目实现具体的业务功能;如各种权限管理系统、博客系统、商城、管理系统等。形式有前后端分离的,有基于微信小程序的后台的、还有客户端的
筛选了大概一周,我找到了适合自己的项目。一个是基于自己之前练手的Demo,跟着视频学习自己做了拓展,一个是前后端分离的项目。
项目没必要功能业务多么复杂,涉及的技术栈有多广,但是一定能够自己吃透,原理性、结构性的层面自己搞懂,还有一定要有亮点!
因为面试官想听的不是你做了什么,而是怎么去做的。就我而言,更多的是考察你发现问题、分析问题、解决问题的能力。即便项目本身简单,但是一些特殊情况要考虑到,为什么这么设计?出现问题了怎么改进?如何去完善?其他技术方式怎么实现?
在百度三面主管面时,全程都在问项目,大概问了50min之久。虽然我觉得准备时自己考虑的很周到了,但是毕竟没参加工作,很多问题根本不知道:
因为基于WebSocket协议做的聊天室,本身是应用层的协议,直接就用TCP来保证消息可靠传输,如果访问量大,为了高效可以改用UDP。这个项目准备的重心没有放在网络层面,而是考虑到多线程下并发聊天,会存在线程安全的问题,准备了很多多线程相关的针对项目的改善、应对策略,消息存储发送。
但是面试官全程都在针对网络层面做拓展,我只能根据已有的知识和对自己项目的拓展了解做回答。面试结束,我感觉自己被按在地上摩擦,又限了入了深深的自我怀疑中~
06 完善简历
到了 8 月份的时候,我才开始完善简历以及刷题。
我的简历大概前前后后改了十二版,最初是改简历的布局,内容块;后面就是字字斟酌,细微调整。
经常删删改改,一句话可能要思考好久;我把我掌握的知识点都很详细的列出来,虽然技能列表看起来很基础,但是我有自信对自己写的内容负责
小伙伴们一定要重视简历!多花点精力在完善简历上!
我的刷题大概从6月就已经开始,断断续续在LeetCode上刷一些题。在8月的时候,我开始每天集中抽出很多时间来刷题。
没错,大佬们天天坚持刷个一年半载,我7、8月才开始每天集中刷题。
我大三就意识到了刷题得重要性,因为做题能力差,报了蓝桥杯比赛没去。
既然意识到重要性,为什么不早点去每天坚持刷题呢?
**我尝试过,最终放弃了。**这么做可能更多是临时抱佛脚的心态,对刚做完的题有个印象。
对我来说,复习路上最大的阻碍就是刷题了,因为自己的代码能力实在太差了。
三月份,我大概做了半个月题。《剑指Offer》上的常规题,我基本上就是半天一道题,因为自己做这些题实在是想不来,想半个小时尝试去解决,但大多时候都是“差一点”,或者思路正确但又不能用代码实现出来。然后看题解,看别人不同的解法,自己再独立写一遍。
因为时间紧任务重,半天能够让我复习好多知识点了,所以想等复习完提纲之后再来刷题。而且,关键是做的题目,当时感觉自己懂了、会了,但是过一段时间又忘了,只能隐约留下个解题思路,还是不能够独立AC。
七月份,只能是逼着自己来。因为大厂太看重代码能力了,即便是我理论知识掌握的再好,笔试都过不了,根本没得机会去面试。
然后,就开始分类刷题。参考labuladong哥的刷题套路,weiwei哥的刷题分类,小齐姐的刷题经验,剑指OfferKrahets路飞哥的精彩题解,每天花8个小时左右刷题,复习数据结构。
一道单链表反转的题,我整整想了一天半才搞懂。该题下的所有题解全部看了一遍,包括公众号的一些文章。递归的解法,短短几句话,我始终无法理解。
小贤从4月份一直开始刷题,在这期间一直和小贤在一起复习。他是C++方向,算法和代码能力很强,刷题方面我都是请教他的。
单链表递归解法,他画图整整给我解释了一个晚上,从斐波那契的递归,到链表的实现。第二天,我终于搞懂了,在力扣发布了自己写的最认真的一次题解。单链表反转,自己写了不下20遍了吧;这次,可能真的是永远记住了吧。
8月份,小贤由于有事回家了。房间只剩我一个人,我和老板续了房租,继续备战秋招。
期间,刷题有任何问题,我都会立即给小贤打电话过去交流。
【刷题的误区】
开始,我觉得自己不是在刷题,而是不断地重复写,好像在“背代码”。因为有些题说思路,我能够很清晰的表达出来,做的多了发现解题的套路还是比较固定的(虽然也没做多少🤔),但是到实际的动手写,又写不出来了。
针对这个问题,我也很痛苦。一方面觉得“背代码”很可耻,自己真的就这么差吗,做个简单题都写不出来吗?但是,我真的是没办法,只能用做的少,练得少来安慰自己。
就这样,每天逼着自己,刷了大概170题左右,每天将基础的八大排序写一遍
其实,前期的刷题,自己没见过没思路很正常,参考别人的题解,把这种解法引用到类似的题目上。就像写作文一样,针对不同问题有不同的模板,根据具体问题调整边界即可。我自己总结来说,就是两大因素:
- 针对不同问题求解的代码模板,要恰当灵活的应用(如双指针、滑窗、列表DP等)
- 代码熟练度。模板是基于代码的熟练度而存在的,就像写排序算法一样能够很快的写出来
但是,这个量还有我的认知,对秋招来说是远远不够的。这是一项长期的积累和训练,谁也不可能偷懒,达到立竿见影的效果。因此,在后来的秋招笔试中,我重重的摔了跟头😭,这是可预见的。
听学姐说她们去年是互联网的寒冬,找工作难。今年,因为疫情的原因,仿佛一切都变得更难,竞争更加激烈。
八月,2020年的秋招已正式开始,但是我还在刷题复习中,准备即将到来的“金九银十”。这份简历,整整迟投出一个月……
07 开始投递简历
总是喜欢一个人到新田径场静静呆坐着
9 月 1 号返校,在陕西省教育厅下蹲了四个月,终于等到了学校开学。我退了房,回到了宿舍,准备加入秋招得大军中…
9 月 2 日,开始正式投递简历。一开始不敢投大厂,想着先投中小公司刷刷副本。
👇 以下是通过语雀记录的!
我将公司归为四类:小厂、实习、中厂、一线厂。
为了好做做统一管理,我记录了投递时间、岗位、笔试时间、面试时间。
9 月 8 号之前,我一直以中小厂为主,因为自己感觉没实力和自信去投大厂。
但是,到 9 月 9 号时,我才了解到像腾讯、百度、美团、京东、网易这些大厂秋招到 9 月中下旬就会截止网申。
不投就没有机会了!投了起码能有一丝机会进入笔试面试,所以就开始投递大厂了。
我主要投递的都是 Java 研发,自己学的就是这一块的内容。随着学习的深入,也对 Java 后端开发产生了兴趣。
但是!因为投递较晚,好多大厂都没了研发的 HC,我就投测开岗。没 Java 后端开发,我就投移动端,C++,甚至 PHP。
我才发现,原来,今年的秋招 8 月甚至 7 月就开始了。
秋招一般是从暑假那会就已经开始了!很多公司尤其是大厂都有提前批!
我一直想着是等自己复习完,刷些题,准备好了再去投简历;但是,机会是不等人的。
我至今,都没敢投字节和阿里的秋招岗。好几次点入到官网的链接,又退了出来。因为自己知道没能力过得了笔试这一关。
我想:“春招一定要去弥补这个遗憾,通过笔试,一定要去争取到面试机会!”
机会,并不是等你准备好了才来的。 这句话,可能是秋招给我最惨痛的一个教训。机会本来就瞬转即逝,你必须时刻准备着!
期间,陆续有简历被挂的情况。我参考了网上 IT 相关的简历不下 20 份,简历改了那么多次,到底是哪里出问题了呢?
我自己一个字一个字的读了遍简历,还是觉得没有问题。找了个已工作的学长询问,学长说你作为一个双非本,可能更看重实习经历吧!
是呀,我是双非本,还没有实习经历,比赛经历。唯一能写的奖项,就是连续两年获得国家励志奖学金和学校的综测奖学金吧。所以说自己是秋招中裸奔的人,没有任何光环加持,只能跌跌撞撞的摸索。
08 我的第一场正式面试
同秋招的同学,8 月份开始投简历,9 月每天都有平均一场面试。
再看看自己,投了简历,做测评,笔试,然后就没音讯……然后每天一边焦虑,一边自我安慰。
白天投简历,晚上复习…..好希望有个公司能够面我一下,哪怕是给我挂了,我也心甘情愿,面到就是赚到。
终于,在 9 月 13 日,我收到了好未来的面试,也是我人生中一次正式的面试,岗位为测试开发。
我也不奢望自己能进入二面,只要能被面到,积累面试经验就可以了。 而且,今年绝大多数公司都是线上面试,这个还是线下。
我很紧张和畏惧,尤其还是测开岗位,自己对测试的知识根本没有接触过。
但是,我还是积极准备,恶补了下测试的相关知识,看了下面经,第二天早早到了指定地方。
在叫到我进去面试时,我看了一眼堆排,这样感觉更安心些。
我从容的来到面试厅,因为早已知道自己肯定会挂,所以也不那么紧张了。
面试厅有 20 多个面试官在针对到场的同学进行面试,和我一同走进去的,还有个西安交大的小姐姐,也是测开,我们两的面试官也是挨着的。
一面的面试官非常好,也正是他,给了备受打击的我一点自信,给了我很多的建议和指导。
如果将来我有机会做面试官,一定也要做像这位前辈一样谦逊、耐心的人。
他问了我为什么要做测试,我说:“我刚接触测试,自己一直学习 Java 开发线管的知识,觉得测试是从另一个角度来思考问题。测试更加注重问题的细节,逆向的思维,全局的观念,我觉得和研发互为补充,所以想尝试一下”。
期间,面试官问了我登录跳转的一个测试用例,可能对测试的同学来说是入门级的简单题。但是,我之前完全没接触过,只能靠着之前恶补的知识和自己写 Demo 时的经验,把能想到的情况全说了一遍。
一面面试官一直很耐心的听着,并没有因为我说的不正确或者跑偏而打断我。我回答完后,又很耐心的给我指出我错误的地方,同时给我写了测试开发在项目研发中参与的流程和工作,让我有了个主观的认知。又和我谈了些职业规划,给了我宝贵的建议。
剩下的就是一道基础的算法题(括号匹配),我竟然写出来了。还有网络和语言的基础问题,写了三个 SQL 语句。
面试持续了 45 分,面试完,我很真诚的说了感谢。我说:“这是我秋招开始投递简历以来,第一次参加面试。非常感谢您给了我这样的机会,同时谢谢您的建议和指导”。遇到给我带来启迪的面试官,真的十分的荣幸!
很意外,我对测试完全不知道的门外汉,面试官竟然给我过了,等待第二轮面试。
二面是在结果之中,自己没有对测试知识的了解,写算法题也没做出来,就挂了。
当我收拾东西准备推门离开的那一刻,刚好那个小姐姐面试通过,进去参加 HR 面。
我淘汰失败,她晋级成功。不同的方向,不同的结果。虽早已知晓答案,但心中还是羡慕。啥时候自己才能上岸呀!
09 被笔试毒打的日子
好未来面完,我基本上没啥面试了。每天就是在做测评,笔试,然后就没音讯…
期间,大厂的笔试题,对我这个算法菜鸡来说,简直就是被吊着锤 🥺。
大厂的笔试题,基本最多 AC 一道,剩下的只能是 A 一部分,边界情况基本都没改对过。DP 相关的题,我都是只写个框架,过个 0.X 这样。因为我只能保证一个小时左右才能拿下一道题,其他题没时间考虑;要么思路是正确的,本地跑通,提交就是过一半多,边界改不对。
这就导致我根本无缘大厂,第一关笔试就被挡在了门外。
影响最深刻的是美团,5 道题两个小时,我一道都没做出来。剩下的两道有半点思路,也只过了 0.2、0.15。很多大厂和独角兽企业的笔试,基本都是笔试完了,就真的完了!甚至,有好多测评和笔试都没给……
幸运的是,通过了小米和百度的笔试,拿到了面试机会。可能是运气来了吧,均为 3 道题,分别过了 2.1 和 2.4。
中小厂的还凑合,笔试题做的还行,大部分笔试完都能争取到面试,但面试都集中在了 10 月。
唯一笔试完有些许成就感的就是巨人和阅文,4 道题全 AK 了,但至今仍没音讯,可能自己投的太晚了哈哈~
对当晚参加完的笔试,第二天我几乎要花一天的时间来消化昨天的题目,请教牛客评论区的大佬们,自己再试着做一遍,好多还是做不出来。
DP 虐我千百遍,再见了依然是相逢何必曾相识~ 看着几十行的题目描述,有时甚至读多遍题都抽象不出问题模型,20 多分下来,依然无从下手。
九月,真的是非常难熬的一个月。每天都在投简历,做测评,笔试,理解笔试题。
准备了这么久,一次次被笔试挡在了门外,都没机会表达自己了解的知识。面对为数不多的几场面试,自己力不从心,很难把握住。
从开始时希望满满的投递简历,发现都是笔试一轮游。到后面自暴自弃不想去投递。再到自我安慰的去投递,相关公司的岗位都投一遍,因为不投递连一点点机会都没有,我也不期望一次上岸,只希望多积攒些面试经验。
我只想要个面试机会,哪怕面一次挂了也行啊!
没有面试,我就到牛客网上参加模拟面试,对着 AI 讲。及时记录自己的盲区,知道但是表述不完整,还有长时间没复习遗忘的知识。唯一有所慰藉的是,9 月末拿到了钜泉科技的 Offer,偏硬件的测试开发岗。
虽然与预期的岗位不符,但是好歹在 9 月拿到了自己的第一个 Offer,算是给挫败的自己一点小小的鼓励吧!我这菜鸡,还是有公司要的呀。还剩一个多月,加油,一定可以的!
10 获得百度 Offer
国庆八天假期,我给自己放了两天假,其实就是倒头大睡了两天。印象中每年的国庆假期,西安仿佛都在下雨。
睡醒了就躺在床上想:“自己还有什么知识点没掌握牢固?每次开篇的自我介绍该怎么表达才能让面试官印象深刻?结束时针对面试官的“你还有什么要问我的吗” 该怎么去提问?想到了就立刻记下来,自己改怎么去更正”。
10 月 3 日,我起的很早,开始了 10 月份的战斗准备。剩下的 6 天,重点就是在复习数据库。
我把 MySQL 锁,索引,事务等相关的面试高频知识点结合面经总结了一遍。因为 9 月面 CVTE 时,问了很多数据库相关的问题,而我只会写写简单的 SQL 语句,问到时都是一脸懵。
期间,加了个内推群,了解到今年由于疫情的原因,群里好多海归、985/211 研究生大佬们都还是 0-Offer,对比自己目前的境况,又有些释然。
排除最重要的主观因素个人能力不说,今年这样的大环境,竞争真的是异常激烈。 即便是海归或者高校的光环加持,大家求职也和我有类似的情况。
所以,我已经做好了春招的打算。一边投正式岗,一边投大厂的实习岗。
由于实习没笔试,能争取到面试,面到就是赚到!(但是,到现在为止实习被捞起来的,也只有滴滴一家,可能大部分都是针对 22 届的吧。三面时项目回答的不是太好,笔试题写了太久才勉强做出来,最终还是挂了!)
我告诉自己,当机会没来的时候,你一定要做好准备,等待它,把握它! 一定要沉下心来,不断复盘自己之前的面试,及时查漏补缺,巩固知识点。
十月,貌似自己积攒了很久的好运和人品来了。陆续拿到了恒生,大华,泛微,苏宁,闻泰,ThoughtWorks 的 Offer,最意外的,还是收获了百度的 Offer。
点开邮件的那一刻,我没有丝毫的兴奋和激动。因为我觉得这不是真的,一定是 HR 发错邮件了吧!
回想当时一天三轮的技术面,三面主管面时问项目问到我说不出话,感觉答的那么差,当时面试结束就知道没了。
但也不亏,踩了很多坑,这是第一次真正面大厂,果然难度很大。自己也没查过官网的状态变化,因为面试结束的那一刻,我已经知道自己“挂了”的结果。
所以,我觉得这就和我开个玩笑吧!当天夜里,我一直在想这是不是真的。问了百度实习转正的同学,说我拿到 Offer 了,等着 HR 谈薪就好了。
我辗转反侧,一边喜悦,我终于上岸大厂了!一边顾虑,万一是 HR 发错了或者还不能十拿九稳怎么办,因为意向书上并没有我的名字,虽然我可以登录填写信息的入职后台。
就是这种纠结与矛盾,让我理智了下来。我告诉自己:“就当是个以外的惊喜吧,是的话当然如愿了;不是的话,不止于心里落差太大。你还是要全力备战所剩不多的机会,就当这个惊喜不存在”!
后面,也走完了小米,TW,滴滴的技术面试流程。
可能,这就是运气的推波助澜吧!让不可能变成了可能。感谢百度收了我,对我的认可。
我相信此刻还在找工作,或者准备参加春招的小伙伴们,你们一定很焦虑。如人饮水,冷暖自知。
有的时候,并不是你不够努力和优秀,而是属于你的那一份好运和机遇还没到吧。
以我个人为例,我觉得找工作就是 能力 + 机遇。
- 70%是个人实力。因为你的专业素养足够强,你才能胜任你要求职的工作岗位
- 30%是机遇(运气)吧。有的时候,当运气来的时候,以你的能力为支撑,你的求职真的是一帆风顺的。
小贤最近才找到自己理想的工作。以他为例,我觉得就是运气来的稍微晚些吧!
我觉得在算法做题方面,他比我真的厉害很多;专业知识和项目等都掌握的很牢固。但是,面试很多都是最后一轮技术面面完就没音讯了,他也很苦恼,很焦虑,准备去实习春招了。但是,就在昨天,他也理想上岸了。
秋招到现在,已基本结束。
现在,自己的算法、刷题能力依然是一塌糊涂!可能开始刷题对我来说会有一种恐惧感,拿到一道题,首先不是去想这道题该怎么做,而是我能不能做得出来。
但是,自己经历过一天做一道题的那种痛苦期,现在能够很客观的去对待刷题这件事,心里已经消除了这种恐惧感,多刷多积累即可。
就像我开始对编程并不感冒,完全是投入的时间和经历让我觉得做这件事是有意义的,慢慢才产生了兴趣。
11 下一站是未来
我不确定自己能在这条路上走多远,因为人生充满了挑战与无限可能,面对日新月异的技术更迭,终身学习才能保持竞争力而不会被淘汰!
既然做出了选择,就要坚持走下去;技术没有强弱之分,只有接触的先后之差;能力不够,就多花时间和经历来沉淀。
每次当我笔试面试完失意时,就会循环放《追梦赤子心》:“关于理想我从来没选择放弃,即使在灰头土脸的日子里”。
也许每个失意的人,都需要找一个点来慰藉自己。这并不是引人肺腑的鸡汤文,而是迷茫挫败时的自我鼓励,当你内心有了坚定的追求,愿望和希望才会驱使你去奋斗,你才能有勇气和毅力走出眼前的困境。
校园生活即将落下帷幕,打工人的生涯才刚刚开始。秋招对我来说不仅仅是招聘,更重要的是它为我迈出社会的第一步做了警醒。
大学四年,我没有什么很值得骄傲的经历,可能就是一个默默无闻的“平凡带学生”吧。但是,平凡,不能平庸。大学四年里,我好像从来没有把一件事情给做好过,这一次,我想要专心做好一件事,让自己不留遗憾。
我始终坚信一句话:凡事皆有可能,永远别说永远!
2年经验,2021 阿里、头条、美团,滴滴,京东面经
最近一段时间面试了几家互联网公司,陆续通过了阿里、头条、美团,滴滴,京东的面试,基本上面试的公司都通过了,所以在这里想分享一些自己面试的经验给大家,希望能帮助大家拿到心仪的 offer
我的基本情况:19 届本科,现在在一家小公司,毕业一年半,后端开发
面试准备
简历
重点放在专业技能和项目经验两块
- 你的简历就是你给面试官提供的考点,简历上的东西必须自己 Hold 住,万一自己写的东西被问住了,会很尴尬,给面试官留下的印象也不好,所以就是会啥写啥
- 技术栈最好不要写精通,你敢写面试官就敢问,被问倒了很尴尬的,写熟悉,了解就行
怎么投简历
我这里强烈建议找人内推,这样简历通过的概率大些,如果找不到,可以试试脉脉,我就是从脉脉投的简历,把状态改成寻找机会就行,会有很多人找你的
推荐一个简历制作模版,我一直用的: https://www.polebrief.com/index 。
算法
这个该刷还是得刷,别偷懒,我个人感觉刷完下面几个已经够了,大家可以根据自己的基础情况选择
- 剑指 Offer:https://www.nowcoder.com/ta/coding-interviews
- 刷 Leetcode,刷 Leetcode,刷 Leetcode!重要的事情说三遍,Leetcode 前 200 道
- 经典排序算法:https://blog.csdn.net/qq_35508033/article/details/109399281
复习
我复习主要以看书为主,推荐一些我看的书籍和资料,有时间的话尽量看的细一点,多看几遍,没时间的话就挑重点看
- 并发编程:Java 并发编程的艺术,Java 发编程实战
- JVM:深入理解 Java 虚拟机
- Redis:Redis 设计与实现,Redis 开发与运维
- MySQL:高性能 MySQL,MySQL 技术内幕
- SpringBoot 和 SpringCloud:https://blog.didispace.com/
- Kafka:Apache Kafka 实战
- 设计模式:大话设计模式,设计模式之禅
- 分布式:从 Paxos 到 Zookeeper 分布式一致性原理与实践
需要书籍的 pdf 文档可以关注我的公众号,月伴飞鱼,回复 666 获取
项目经验
社招面试项目很重要,不光是你项目本身的技术复杂度,还有业务复杂度,你本身在项目中担任的什么角色,遇到过什么问题,瓶颈在哪,怎么解决的,这几个问题是非常重要的,很多公司到最后基本上都是围绕着你的项目在问,给面试官讲明白你的项目是必须具备的能力
总结下社招面试问项目最主要的问题套路:
- 你项目为什么这么设计,你这样设计有什么好处,解决了什么问题,会产生什么问题,还有什么可以优化的
- 这么设计有什么瓶颈吗,遇到了什么问题,有什么改善的方案
- 项目遇到的难点,技术挑战,你是怎么解决的,为什么用这种方式解决,还有更好的方式么
- 根据你简历上提到的具体功能去扣细节
面试技巧
- 面试得自信且谦虚,声音自信,面试表现谦虚,得给面试官一种你啥都会,很稳的感觉(实际内心很慌),然后语言表达流畅,吐字清晰,回答问题也要有逻辑性,不能支支吾吾半天说不明白,面试官都听不懂,这就很尴尬了,这个可以自己多练习一下
- 面试本质是一个自我优势展示的过程,不要让面试官问一句自己回答一句,主动抛出一些可能的点让面试官来主动问你,还有就是不会的问题就说不会,这个没关系的,千万别瞎说
- 不要眼高手低,不少小伙伴看面经觉得自己啥都会,但是会与面试过程中能清晰有层次的说出来是两回事,费曼学习法可以了解一下,举个例子:比如 sychronized 的原理,能不能说出点面试官眼前一亮的东西,这还是不容易的,其实面试主要是证明你比别人更有技术的深度,广度,不然都是背八股文,那面试官看不出你有什么不一样的,这个面试过的概率就大大降低了
个人建议,面试没准备好,不要随便面试,一些大厂都会有面试评价记录,太多差评影响以后的面试,同时面完之后要多总结,复盘,整理知识点,查漏补缺
面试最后
面试结束时问面试官什么问题
我一般会问:
- 我面试的岗位的具体工作是什么
- 使用的技术栈有哪些
面试总结
阿里的面试更倾向于实用性,基本是从各种场景出发,来给你一个场景,让你来解决实际的问题,那么在解决问题的过程中,对于各种知识的应用就是亮点了
头条更看重计算机基础,算法,以及对各种中间件的了解
面试也有不少的运气成分的,毕竟每个面试官的侧重点可能不一样,大家放平心态就好
学习建议
学习要形成自己的知识体系,不要天天盯着别人的面经(当然,我的面经可以看,哈哈)做碎片化学习,面经只是辅助作用,查漏补缺的,一旦你的知识体系有了,很多问题都能举一反三,这时候面试就很稳了
下面是热乎乎的面经
注意:有些面试的题目比较少,因为有些面试题因为会被多个公司重复问 ,就不重复写了
美团
一面
- 线程安全的类有哪些,平时有使用么,用来解决什么问题
- mysql 日志文件有哪些,分别介绍下作用
- 你们项目为什么用 redis,快在哪,怎么保证高性能,高并发的
- redis 字典结构,hash 冲突怎么办,rehash,负载因子
- jvm 了解哪些参数,用过哪些指令
- zookeeper 的基本原理,数据模型,znode 类型,应用场景有哪些
- 一个热榜功能怎么设计,怎么设计缓存,如何保证缓存和数据库的一致性
- 容器化技术了解么,主要解决什么问题,原理是什么
- 算法:对于一个字符串,计算其中最长回文子串的长度
- 项目介绍
美团
因为之前的部门一面通过后,该部门没有 hc 了,就给我推荐到其他部门了,大厂 hc 还是挺紧张的
一面
- redis 集群,为什么是 16384,哨兵模式,选举过程,会有脑裂问题么,raft 算法,优缺点
- jvm 类加载器,自定义类加载器,双亲委派机制,优缺点,tomcat 类加载机制
- tomcat 热部署,热加载了解么,怎么做到的
- cms 收集器过程,g1 收集器原理,怎么实现可预测停顿的,region 的大小,结构
- 内存溢出,内存泄漏遇到过么,什么场景产生的,怎么解决的
- 锁升级过程,轻量锁可以变成偏向锁么,偏向锁可以变成无锁么,自旋锁,对象头结构,锁状态变化过程
- kafka 重平衡,重启服务怎么保证 kafka 不发生重平衡,有什么方案
- 怎么理解分布式和微服务,为什么要拆分服务,会产生什么问题,怎么解决这些问题
- 你们用的什么消息中间件,kafka,为什么用 kafka,高吞吐量,怎么保证高吞吐量的,设计模型,零拷贝
- 算法 1:给定一个长度为 N 的整形数组 arr,其中有 N 个互不相等的自然数 1-N,请实现 arr 的排序,但是不要把下标 0∼N−1 位置上的数通过直接赋值的方式替换成 1∼N
- 算法 2:判断一个树是否是平衡二叉树
二面
- Innodb 的结构了解么,磁盘页和缓存区是怎么配合,以及查找的,缓冲区和磁盘数据不一致怎么办,mysql 突然宕机了会出现数据丢失么
- redis 字符串实现,sds 和 c 区别,空间预分配
- redis 有序集合怎么实现的,跳表是什么,往跳表添加一个元素的过程,添加和获取元素,获取分数的时间复杂度,为什么不用红黑树,红黑树有什么特点,左旋右旋操作
- io 模型了解么,多路复用,selete,poll,epoll,epoll 的结构,怎么注册事件,et 和 lt 模式
- 怎么理解高可用,如何保证高可用,有什么弊端,熔断机制,怎么实现
- 对于高并发怎么看,怎么算高并发,你们项目有么,如果有会产生什么问题,怎么解决
- 项目介绍
- 算法:给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少,这个路径的开始节点和结束节点可以是二叉树中的任意节点
三面
- 项目介绍
- 算法:求一个 float 数的立方根,牛顿迭代法
- 什么时候能入职,你对岗位的期望是什么
- 你还在面其他公司么,目前是一个什么流程
阿里
一面
- synchronized 原理,怎么保证可重入性,可见性,抛异常怎么办,和 lock 锁的区别,2 个线程同时访问 synchronized 的静态方法,2 个线程同时访问一个 synchronized 静态方法和非静态方法,分别怎么进行
- volatile 作用,原理,怎么保证可见性的,内存屏障
- 你了解那些锁,乐观锁和悲观锁,为什么读要加锁,乐观锁为什么适合读场景,写场景不行么,会有什么问题,cas 原理
- 什么情况下产生死锁,怎么排查,怎么解决
- 一致性 hash 原理,解决什么问题,数据倾斜,为什么是 2 的 32 次方,20 次方可以么
- redis 缓存穿透,布隆过滤器,怎么使用,有什么问题,怎么解决这个问题
- redis 分布式锁,过期时间怎么定的,如果一个业务执行时间比较长,锁过期了怎么办,怎么保证释放锁的一个原子性,你们 redis 是集群的么,讲讲 redlock 算法
- mysql 事务,acid,实现原理,脏读,脏写,隔离级别,实现原理,mvcc,幻读,间隙锁原理,什么情况下会使用间隙锁,锁失效怎么办,其他锁了解么,行锁,表锁
- mysql 索引左前缀原理,怎么优化,哪些字段适合建索引,索引有什么优缺点
- 线上遇到过慢查询么,怎么定位,优化的,explain,using filesort 表示什么意思,产生原因,怎么解决
- 怎么理解幂等性,有遇到过实际场景么,怎么解决的,为什么用 redis,redis 过期了或者数据没了怎么办
二面
- hashmap 原理,put 和 get,为什么是 8 转红黑树,红黑树节点添加过程,什么时候扩容,为什么是 0.75,扩容步骤,为什么分高低位,1.7 到 1.8 有什么优化,hash 算法做了哪些优化,头插法有什么问题,为什么线程不安全
- arraylist 原理,为什么数组加 transient,add 和 get 时间复杂度,扩容原理,和 linkedlist 区别,原理,分别在什么场景下使用,为什么
- 了解哪些并发工具类
- reentrantlock 的实现原理,加锁和释放锁的一个过程,aqs,公平和非公平,可重入,可中断怎么实现的
- concurrenthashmap 原理,put,get,size,扩容,怎么保证线程安全的,1.7 和 1.8 的区别,为什么用 synchronized,分段锁有什么问题,hash 算法做了哪些优化
- threadlocal 用过么,什么场景下使用的,原理,hash 冲突怎么办,扩容实现,会有线程安全问题么,内存泄漏产生原因,怎么解决
- 垃圾收集算法,各有什么优缺点,gc roots 有哪些,什么情况下会发生 full gc
- 了解哪些设计模式,工厂,策略,装饰者,桥接模式讲讲,单例模式会有什么问题
- 对 spring aop 的理解,解决什么问题,实现原理,jdk 动态代理,cglib 区别,优缺点,怎么实现方法的调用的
- mysql 中有一个索引(a,b,c),有一条 sql,where a = 1 and b > 1 and c =1;可以用到索引么,为什么没用到,B+树的结构,为什么不用红黑树,B 树,一千万的数据大概多少次 io
- mysql 聚簇索引,覆盖索引,底层结构,主键索引,没有主键怎么办,会自己生成主键为什么还要自定义主键,自动生成的主键有什么问题
- redis 线程模型,单线程有什么优缺点,为什么单线程能保证高性能,什么情况下会出现阻塞,怎么解决
- kafka 是怎么保证高可用性的,讲讲它的设计架构,为什么读写都在主分区,这样有什么优缺点
- 了解 DDD 么,不是很了解
- 你平时是怎么学习的
- 项目介绍
三面
- 线程有哪些状态,等待状态怎么产生,死锁状态的变化过程,中止状态,interrupt()方法
- 你怎么理解线程安全,哪些场景会产生线程安全问题,有什么解决办法
- mysql 多事务执行会产生哪些问题,怎么解决这些问题
- 分库分表做过么,怎么做到不停机扩容,双写数据丢失怎么办,跨库事务怎么解决
- 你们用的 redis 集群么,扩容的过程,各个节点间怎么通信的
- 对象一定分配在堆上么,JIT,分层编译,逃逸分析
- es 的写入,查询过程,底层实现,为什么这么设计
- es 集群,脑裂问题,怎么产生的,如何解决
- while(true)里面一直 new thread().start()会有什么问题
- socket 了解么,tcp 和 udp 的实现区别,不了解,用的不多
- 设计一个秒杀系统能承受千万级并发,如果 redis 也扛不住了怎么办
- 项目介绍
四面
- 讲讲你最熟悉的技术,jvm,mysql,redis,具体哪方面
- new Object[100]对象大小,它的一个对象引用大小,对象头结构
- mysql 主从复制,主从延时怎么解决
- 怎么保证 redis 和 mysql 的一致性,redis 网络原因执行超时了会执行成功么,那不成功怎么保证数据一致性
- redis 持久化过程,aof 持久化会出现阻塞么,一般什么情况下使用 rdb,aof
- 线上有遇到大流量的情况么,产生了什么问题,为什么数据库 2000qps 就撑不住了,有想过原因么,你们当时怎么处理的
- 限流怎么做,如果让你设计一个限流系统,怎么实现
- dubbo 和 spring cloud 区别,具体区别,分别什么场景使用
- 给了几个场景解决分布式事务问题
- 项目介绍
- 你觉得你们的业务对公司有什么实际价值,体现在哪,有什么数据指标么
五面
hr 面完后又来了一面,说是交叉面
- 怎么理解用户态,内核态,为什么要分级别,有几种转换的方式,怎么转换的,转换失败怎么办
- 怎么理解异常,它的作用是什么,你们工作中是怎么使用的
- 你们用 redis 么,用来做什么,什么场景使用的,遇到过什么问题,怎么解决的
- jvm 元空间内存结构,永久代有什么问题
- 你平时开发中怎么解决问题,假如现在线上有一个告警,你的解决思路,过程
- 你们为什么要用 mq,遇到过什么问题么,怎么就解决的
- 你觉得和友商相比,你们的优势在哪
- 聊天:炒股么,为什么买 B 站,天天用,看好他
菜鸟
不知道为啥可以同时两个流程,可能真的缺人(想去阿里的大家抓紧机会)
算是给我 2 次选择机会了,面了几面(2 面只用了 11 分钟,哈哈),主要问项目了
抖音
感觉头条不怎么问项目,或许是我项目太 low 了,比较喜欢问计算机基础和中间件知识
一面
- http 请求头,expire,cache-control 字段,状态码,301,302,401,403
- https 原理,数字签名,数字证书,非对称加密算法过程,有什么问题
- tcp 连接 client 和 server 有哪些状态,time_wait 状态
- 虚拟内存,虚拟地址和物理地址怎么转换,内存分段,内存分页,优缺点
- linux 最多可以建立多少个 tcp 连接,client 端,server 端,超过了怎么办
- eureka 原理,强一致性么,为什么,怎么保证强一致性,多级缓存怎么保证一致性,eureka 集群,宕机了服务还能调用么
- hystrix 原理,半开状态知道么,具体的一个转换过程,它的隔离是怎么实现的
- zookeeper 一致性保证,zab 协议原理,半数原则如果查询到另外一半呢,那 zookeeper 属于哪种一致性,强一致性么,还是最终一致性
- zookeeper 选举机制,选举过程有什么问题
- 算法:最长不重复的连续子串
- 聊天:头条为什么用 go,对 java 和 go 怎么看,愿意转 go 么
二面
- 函数 a 调用函数 b 的过程,是怎么传参的
- java 里面的函数调用有哪些,io 流里面有函数调用么
- fork 函数,父子进程的区别,孤儿进程,僵尸进程会有什么问题,进程有哪些状态,进程间怎么同步,通信,消息队列,管道怎么实现的,进程调度算法,各有什么优缺点
- dos 攻击,ddos 攻击,drdos 攻击,怎么解决,syn flood
- 自旋锁,线程上下文切换的开销具体是什么,中断,有哪些中断,用户态和内核态切换过程
- 一张大表怎么更改表的数据结构,字段,用 alter 会有什么问题,怎么解决呢,有什么好的方案,双写的话会有什么问题,还有其他方案么
- redis 管道用过么,用来做什么,它的原理是,保证原子性么,和事务的区别,redis 事务保证原子性么
- redis 强一致性么,怎么保证强一致性,有什么方案
- kafka 怎么保证消息不丢失的
- 算法:找出所有相加之和为 n 的 k 个数的组合,组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字,输入: k = 3, x = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
三面
感觉面试官很忙,就问了几个电商场景的技术解决方案
算法:一个环上有 10 个点,编号为 0-9,从 0 点出发,每步可以顺时针到下一个点,也可以逆时针到上一个点,求:经过 n 步又回到 0 点有多少种不同的走法
举例:
如果 n=1,则从 0 出发只能到 1 或者 9,不可能回到 0,共 0 种走法
如果 n=2,则从 0 出发有 4 条路径:0->1->2, 0->1->0, 0->9->8, 0->9->0,其中有两条回到了 0 点,故一共有 2 种走法
快手
感觉像刷 kpi 的,一看 JD 发现招的资深研发工程师,我对快手的印象又不好了
一面
手写 hashmap(卒)
滴滴
一面
- 排序算法了解哪些,快排,快排复杂度,优化,堆排序,建堆过程
- 反射了解么,原理是什么
- treemap 和 linkdedhashmap 区别,实现原理
- jvm 类加载的过程讲讲,符号引用是什么,哪些情况会发生初始化
- spring 的循环依赖,怎么解决的,为什么需要加个三级缓存,二级不行么
- springboot 有什么特点,相比与 spring,了解 springboot 的自动装配的一个原理么
- kafka 支持事务么,你们项目中有使用么,它的原理是什么
- 怎么统计一亿用户的日活,hyperloglog 有什么缺点,bitmap 不行么
- 算法:求一个环形链表的环的长度
二面
- redis 的几种数据类型,你们用过哪些,zset 有用来做什么
- 垃圾收集器,cms 垃圾收集过程,为什么停顿时间短,有什么缺点,concurrent mode failure 怎么办,内存碎片怎么解决,为什么不用标记整理法
- 线程池原理,核心参数,线程数设置,参数动态调整后变化过程,Tomcat 线程池原理,常用的线程池,你们一般使用哪种,为什么,会有什么问题,线程抛异常怎么办,阻塞队列原理
- 做过分库分表么,为什么要分库分表,会有什么问题,多少数据适合分库分表,跨库,聚合操作怎么做
- 项目介绍
- 算法:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
- 你对自己有什么规划,想学习什么技术,最近在看什么书
三面
- nio 讲讲,实现原理,优缺点
- 了解 netty 么,讲讲 netty 的设计模型,架构,使用场景
- zookeeper 读写数据过程
- 项目介绍
京东
一面
- tcp 和 udp 的区别,tcp 怎么保证可靠连接的,出现网络拥塞怎么解决
- tcp 和 udp 的报文结构了解么
- 给了一个业务场景写 sql 语句
- 你们建表会定义自增 id 么,为什么,自增 id 用完了怎么办
- 一般你们怎么建 mysql 索引,基于什么原则,遇到过索引失效的情况么,怎么优化的
- jvm 内存结构,堆结构,栈结构,a+b 操作数栈过程,方法返回地址什么时候回收,程序计数器什么时候为空
- redis 实现分布式锁,还有其他方式么,zookeeper 怎么实现,各有什么有缺点,你们为什么用 redis 实现
- 算法:返回一个树的左视图
二面
- spring 你比较了解哪方面,讲讲,生命周期,bean 创建过程
- 使用过事务么,遇到过事务失效的情况么,原因是什么
- springboot 是怎么加载类的,通过什么方式
- 什么对象会进入老年代,eden 和 survivor 比例可以调整么,参数是什么,调整后会有什么问题
- 微信朋友圈设计,点赞,评论功能实现,拉黑呢,redis 数据没了怎么办
- 项目介绍
- 算法:给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
- 请你将两个数相加,并以相同形式返回一个表示和的链表
三面
感觉面试官对 es 很熟悉,一直问 es 问题
- es 倒排索引,原理,lucene,分词,分片,副本
- es 写数据原理,数据实时么,为什么不实时,会丢数据么,segment,cache,buffer,translog 关系
- es 深度分页,优化
- 项目介绍
- 算法:验证二叉搜索树
秋招拿下科大讯飞 SSP 经验分享
这是一位学弟热乎的面经。这位学弟本 211 硕 985,秋招大大小小拿了十几个 offer,三方签了荣耀 15b,两方签了科大讯飞(薪资等同 15a),京东实习转正。
这份面经非常详细,希望对你有帮助!
下面是正文。
个人情况
本 211 硕 985,半科班,一段研究所 C++实习,一段京东 Java 实习。几个专利,几个小比赛。秋招主要面向中小厂拿了十几个 OFFER,终签约科大讯飞(SSP,40W 左右)。
时间路线表
下面是我从开始学习直到现在的时间路线表。
- 2020 年十月到 2021 年五月学习 C++,后续转为学习 Java 后端。
- 2021 年暑期研究所实习 C++。
- 2021 年七月开始学习力扣,至 2022 年 3 月初,300 余道;截止目前近 500 道。学习力扣先看了 B 站 UP 主爱学习的是饲养员的入门课程,另外就是左程云的课程。其他基本是依靠力扣官网的解答。开了一个季度的力扣会员。
- 2021 年七月开始学习 Java 基础,集合,多线程,JavaWeb,SSM,SpringBoot。这些我基本是学习的尚硅谷的课程。当然也有一些是黑马程序员(例如 JUC、Java 集合)的。十月,开始了第一个项目:尚融宝。学习尚融宝我大致明白了 SpringBoot 怎么用,SSM 的一些基础知识,会一些 ElementUI 、Vue,NodeJs,EasyExcel 组件。以及对中间件 MySQL,Redis,单点登录有一定的了解。但尚融宝项目较大,其实我做了一半就面临找实习压力中途终止了。
- 2022 年三月一日,开始了我秋招第一场面试,阿里云一面。我初生牛犊不怕虎,有很多没答上,我依照自己的想法试着猜测底层实现方式,面试官最后给我过了,并且对我进行了一个比较高了评价。然而,阿里云二面,没有这么幸运,由于八股根本没准备过,二十分钟草草结束了。
- 2022 年三月,我开始学习八股文。我找实习期间的资料主要来自公众号代码界的小白、公众号 JavaGuide、美团技术博客、掘金和 CSDN 文章、UP 主跟着 Mic 学架构,以及牛客面经,知识星球 的 《Java 面试指北》。八股文的背诵主要通过面试加深印象,往往被面试官问住的八股你后续记忆是最清楚的。也许你这个时候还没准备好,那么试试面面小公司吧,面试小公司你可以大致了解到 Java 后端面试的重点集中在哪些地方。
- 2022 年三月十日左右,面了一个西安的小公司,外企风格,一场面试手写了四个题,写出了三个半(最后一个是字典树)。我拿到了第一个 OFFER,但规模确实很小,或许并不是我想要的,我就拒了。不过给我找实习路上增加了信心。
- 2022 年四月,我开始了第二个项目:牛客论坛。我选择牛客论坛的原因很简单:论坛具有一定的实用性,论坛包含的技术栈 MQ、ES 我还没了解过,以及 Spring 框架使用我不熟练。于是花了一个多月把牛客论坛做完了。同期,深入学习了 Redis 和 Mysql。
- 2022 年四月,京东一面,面试官上来就是一道回溯题,四个场景,说能写几个场景写几个场景,但写题时间只有半小时。我写了第一个,第二个一直有问题,我同面试官讲“我可能做不完,我讲一下我的思路”。面试官安慰我“我还是希望你把第二个写出来,你可以 debug,多打印一下中间变量”。于是我找到了 arraylist 拷贝的时候我只拷贝了地址,后面改为了构造函数拷贝就对了。总共写了 2 个场景的代码,顺利地,一面过了,二面也过了。五月,HR OC。
- 2022 年暑期,去京东实习了。在京东学习了很多,编码规范,部门的技术文章,组内系统的设计方案,每周的质量周会,跳点分析,以及实习导师对我严格的要求。实习期间主要负责做了一个并发场景下的组件,自己得到了锻炼。很幸运呆在一个氛围很不错的组,实习转正成功。同期,深入学习了 ES,独自开发过程中踩了 Spring 一些常见的坑。
- 2022 年 7 月初,开始了我的秋招。我的意向工作地点是成都。秋招我主要是通过官网投递简历,部分意向一般的企业是通过牛客一键投递的,国企大多是用前程无忧投递,意向度较高的企业是通过官网投递保证能进招聘的系统里。秋招的过程中,系统学习了小林 Codeing 的 Http 协议、TCP/IP 协议、操作系统相关知识,一个名为“Java 全栈知识体系”的网站中的基础知识,也学习了一个叫做“老齐谈架构”UP 主的一些视频,受益匪浅。提升了面试过程中场景题的应对能力。写了半个 Redis,跟着 B 站诸葛老师写了一个仅包含 IOC 和 AOP 功能的 Mini-Spring。同期,深入学习了 Kafka,了解了 SpringCloud 中的部分组件。
- 秋招我给自己定的是循序渐进的目标,初期希望薪资 15w,拿到 15w offer 再找 20w,再 25w,30w。其实我没想到秋招能找个 40w 左右的,主要原因是今年寒气逼人,Java 很卷,成都岗位数量少,大厂难进。后面讯飞打来电话,薪资我很满意,就签约上岸了。
实习面试
小厂实习面试
Java 基础
- HashMap 的底层实现
- 快排有没有了解,归并和快排的区别,快排要递归吗
- 抽象类和接口区别
- Java 线程状态如何变迁
- 线程怎么进入等待
- 用 put get lock unlock notiy 设计阻塞队列
- 什么是协程
- 什么是观察者模式
- 讲一下堆插入元素的详细过程以及堆的应用
JVM
- 讲一下 JVM 内存回收机制
- 讲一下 Stop-The-World
网络与操作系统
- TCP/IP
- TCP 与 UDP 对比
- TCP 哪些机制保证可靠传输
- HTTP 协议
中间件部分
- mybatis 分页插件
- springboot 注解
- springboot 线程池创建
- 微服务和分布式谈一下理解
- 对象存储存什么,OSS 权限管理怎么保证用户隐私
- 微服务远程调用
- 消息队列
- 单点登录
- 说一下事务
- 说一下 redis
- Mybatis 缓存了解吗
- 了解 JPA 吗
- 自定义配置文件的读取方式有哪些
中大厂实习面试面经
实习主要是通过 boss 直聘投递简历,简历单薄,导致投递反馈率比较低。好在东哥给了个机会,不然找实习大概率要灰溜溜收场了。
阿里云实习二面
- Mysql 查询(出生日期,性别)在表(id,性别,年龄,出生日期)中怎么设置索引
- springboot 怎么实现自动装配?用到 springboot 哪些功能
- 进程与线程的区别
- 线程间的通信
- redis 设置过期时间的命令
- 你的使用场景 redis 宕机了怎么办
- 你的数据字典存放有优化方案吗
- 你的 redis 的使用场景
- arraylist 扩容机制?具体怎么扩容
- 如何让 hash 表里的数据 value 排序输出
- treemap 是对 key 还是对 value 进行排序
- 讲一下 TCP 的滑动窗口
蚂蚁支付宝实习一面
- 面向对象的三大特性,讲一下封装
- mysql 索引怎么选择?索引的优缺点?还有什么缺点
- mysql 事务的特性?什么是持久性
- 业务里 redis 的过期策略设置
- hashmap 的扩容机制?为什么扩容选择 2 倍。conhashmap 是线程安全的吗?怎么保证是线程安全的
- 线程的创建方式
- 进程间的通信方式讲一下
- 讲一下 tcp 和 udp 区别
- tcp 建立连接后怎么保证可靠传输的
- 说一下快排,快排是稳定的吗?归并的稳定的吗?哪些排序算法是稳定哪些是不稳定的
- jvm 垃圾回收机制,怎么找到垃圾、怎么回收垃圾
- redis 的缓存击穿、穿透、雪崩各是什么情况
- 乐观锁、悲观锁、讲一下 cas,典型场景
- 读过开源项目源码吗?当项目领导你会怎么安排前后端人员工作
- 业务中的对象存储隐私问题怎么解决
字节暑期实习一面
- 讲一下索引的你的理解
- 事务的特性
- 讲一下存储引擎,各有什么区别
- MyISAM 与 InnoDB 的区别
- 数据库隔离级别
- 讲一下三次握手、四次分手具体
- 如何保证可靠传输
- 点击一个 url 如何处理
- http 状态码讲一下
- 进程和线程的区别
- 进程间的通信,具体应用场景
- 写 sql,查出总成绩排名 3-10 名的 id
- 行升序二维数组的 top k
- 最长不重复子字符串
京东实习一面
- 一道回溯题
- String 是不是基本类型、与 StringBuffer、与 StringBuilder 区别
- 索引失效的场景、场景题的索引设计
- oss 数据库与 mysql 数据库不一致怎么解决
- hashmap 原理、数组和链表的区别
- redis 使用场景
- 异常和错误的区别
京东实习二面
- 个人爱好
- 你觉得好的商业模式
秋招面试
秋招面试概况
秋招部分面试题
以下是我秋招过程中出现的部分面试八股,大多是经过回忆简单记录下,若有八股问题不全请海涵。
Java 基础
- HashMap
- 讲一下 TreeMap、HashMap、HashTable 的区别
- 排序稳定性
- 抽象类和接口的区别
- 继承和重写
- 敏捷开发模型
JVM
- 垃圾回收算法
- GCroot 有哪些
- 垃圾回收器选择原则
- 运行时数据区包含哪些
并发多线程
- 进程和线程的区别
- 什么是死锁,死锁怎么解决
- 线程池参数
- 线程间的同步
- 并发编程包里有哪些常用 API
- 讲一下线程的同步
网络与操作系统
- 网络模型的分层,网络模型为什么要分层
- 讲 https 是否安全
- tcp 为什么是三次握手,而不是两次或者四次握手
- tcp 和 udp 的区别
- udp 的特点
- AWK grep 了解吗
- 是否用过管道
- 多进程编程
- 讲一下进程间的通信
- 并发的锁机制
- 用户态和内核态的区别
- 虚拟内存和管道的选用
- 讲一下 gdb
- 虚拟内存的作用
- 多线程会用到虚拟内存吗
- 虚拟地址
- 软中断了解吗
- 零拷贝拷贝几次
数据库
- 索引是什么,讲下索引类型
- 数据库的隔离级别
- mySQL 怎么用游标
- 慢 sql 优化
- mySQL 死锁怎么解决?mySQL 不能解决死锁的原因
- sql 执行计划 range index 等
- 同一条 sql,不同规模数据会走同一条索引吗
- mysql 删除一列 SQL 语句
SSM
- 如何解决容器初始化 bean A 前初始化 bean B
- 讲一下 SpringCloud
- 微服务的远程调用有哪些可以实现
中间件
redis 的应用场景
redis 的淘汰策略
redis 的过期策略
kafka 丢失消息和重发消息怎么解决
Kafka 消息丢失
Kafka 能否保证幂等性
了解 rabbitMQ 吗
es 为什么快,技术选型为什么不用 mongdb 或者 mysql
场景题
- 上传多个 zip 文件到 oss,设计一个方案,需要前端展示上传进度
- 项目怎么分工的,有几个人,如何安排的方案
- 配置连接的账号密码怎么保证安全性
- 讲一下提交登录信息需要用到哪些注解
- 服务器开发,问安全性如何保证,接口安全性
综合问题
- 你的性格
- 兴趣爱好
- 实习的收获
- 描述最有意义的一件事
- 最自豪的事儿
- 讲下代码的最佳实践
- 操作系统怎么学
- Java 怎么学的,为什么不学其他语言
- 说下金庸或者金庸武侠里的人物,说下最近了解的实事
- 源于创新性的体现,一分钟内说下报纸的用途
手写代码
- 反转每对括号间的子串
- 最长不重复字符串
- 两数之和
- 复原 IP 地址
- 找出最长的对称的字符串
- 二叉搜索树的判定
- 树的层序遍历
最后
我所信奉的秋招原则:永远没有准备好的时候,尽可能早的投递公司;算法题需要多做,大一点的公司(非国企)都会考算法;选择就业方向并充满信心,坚持下去;不要孤军作战,与同学做到互通有无。
我的秋招面试经验:对于某些不会的知识点,你可以用你的猜想去表达而不是不说话。面试官考验的不仅仅是你的知识储备,求职者跟面试官的沟通也同等重要。
2022
双非本秋招总结与心路历程,上岸 OPPO
一位学弟的面经,非常详细地记录了自己的学习过程和心路历程。
下面是正文。
我的学历是双非本、文科学校(非杭电、深大或邮电类计算机强校),科班,leetcode 300+,后端开发方向。
秋招从 7 月中上旬开始到 11 月中旬,共投递近 200 家公司,约面公司约 14 家,有几家面试后来推掉了,今天最后一个池子终于开了,总结最终收获如下:
- 签约:OPPO
- Offer/OC/预录取:4399、政采云、乐刻运动、玄武云
说一下自己的学习过程和心路吧,就当个故事听吧,真心希望对大家有帮助。(长文预警!!!)
兴趣的起源
初中的时候同学都在看 DC 的超英剧闪电侠、绿箭侠之类的,我也跟着看,后来被安利了钢铁侠了,于是就一发不可收拾,我疯狂迷恋上了钢铁侠的高科技战甲,也为我之后职业选择埋下伏笔。
自己高中的时候其实是就读于潮汕地区数一数二的高中,高一高二都不好好学习,因为喜欢钢铁侠的缘故,去参加学校的科技社团搞机器人比赛,当时一直梦想着造出一个类似钢铁侠的外骨骼装甲,和同学一起造的机器人拿了省一等奖还搞了个专利,也因此认识了现在的女朋友。
Guide:这里划重点,认识了现在的女朋友!
之后高三一年也没多拼命学,最后只考上了广州本地一个普通一本。在专业选择上本来也想读自动化、机械电子之类的专业,但是因为想留在广东、女朋友、学校性质等原因,最后选择了现在这个外语学校的计算机专业,也是学校里唯一的工科专业了,也算是和自己兴趣比较接近的专业了,
但是近几年因为疫情和国际形势等的原因,学校的高考分数线不断下降,今年甚至爆冷上了热搜第二,我们自己都开玩笑说要变成带专了。上了这个双非大学心理落差其实非常大,因为自己初中成绩是年级一直第一才考上这么好的高中,高中全级的平均水平也是华工这样的 985,所以自己在高中就是个吊车尾的差生,和高中老同学一起时也会感到些许自卑。
走上后端开发这条路
上了大学后加入了学校里的一个专门做开发的 IT 社团,从大一开始就学习后端开发,从 PHP 到 Go,最后再到 Java,做了大大小小不少项目,也帮学校开发了一个社团管理系统并被学校采用(我们社团其中一项重要工作就是帮学校建设一些数字化系统)。在我们学校某一天举办社团节活动上,这个项目需要被学校里很多同学使用,当天流量 PV 达到 10 万+,当时也非常有成就感,更加坚定了我要走后端开发的路。
还有就是去年社团里很多师兄师姐都进了大厂,而且还有微信的 HR 主动联系我们团队要简历,让我感觉虽然学历差点,但是努力提高技术水平,大厂还是很有希望的,也以此作为自己的一个目标和动力继续前进。自己也一直在这个团队里干了三年才退休,第三年也是担任了团队的最高负责人,参加这个团队是对我大学影响最大的一个经历。
实习经历
第一份实习是大二暑假时找的,面试进入了一个师姐的创业项目,一个小公司,没有办公场地只能线上办公,优点就是可以和学校的事情比较好地平衡时间,最后干了几个月就准备找下一份了实习了,还是想体会线下实习上班的感觉,这次实习的收获主要是积累了个项目经验。离开后我就开始系统化准备八股,冲三四月春招的实习了。
找第二份实习的过程给我挺大的打击,当时大中小厂都有投 ,先拿小厂练手后初步掌握了面试的感觉后,就开始面大中厂了。首先面了阿里,答得还不错,但是等了很久没有消息,问了内推人说过了,等面试官抽时间二面,结果之后又告诉我找到更合适的人选了。。。
之后被另一个部门捞了也是一面挂;之后面了网易又是一面挂,问到挺多自己盲区的,也意识到自己很多知识掌握的漏洞;最难受的是虎牙,一二面体验都不错,一面面试官水平很高,二面聊项目聊得很开心,面试官人也很好,结果苦等两周后 HR 说你很不错,但是我们的 hc 锁了(受腾讯影响),所有面试者的流程都冻结了,又在牛客上问了一个比我早一点面试然后成功进去实习的老哥,他说组里开会的时候说觉得我挺不错的想让我去,可惜被锁 hc 了,还说想帮我申请特批,但是这行情下人人自危最后也就作罢。
得知被锁 hc 后我非常难受,想不通为什么自己这么倒霉,两周里满怀希望、心心念念,结果不是自己实力不够,而是时代尘埃落在自己身上的一座大山,这个时候其实就已经开始感觉到行情非常不对劲了,寒气第一次真真切切地影响到了我。但好在最后拿到了数字广东实习的 Offer,很感谢数广的收留,当时学校里很多人也是去数广实习,因为今年数广真的是广州本地少数有在招实习生而且招得还不少的企业了,就凭这一点我吹爆数广,挽救了寒冬中不少人的实习下落!
实习期间也是第一次体会打工人上班以及企业开发的流程,组里氛围也非常好,办工环境也很 nice,各种下午茶福利也很多,非常难忘快乐的实习经历。因为疫情不能随意进出校门,最后也是和同学一起去外面租房了。同时了解到同级里搞前端、C++、网安、客户端的同学都找到了比我好很多的中大厂实习,年级里基本没几个搞 Java 后端的,所以那时也很郁闷,因为除了算法,Java 在开发领域的卷度说第二没人敢说第一,当时也开始有点后悔选了 Java 这个方向。
艰难的秋招
七月下旬在数广辞职,组里的老大很想留我,甚至后来有确定有转正 hc 还叫我回去,非常感动,但是由于自己还是想专心秋招就还是没有留下了。然后就是正式开启的秋招之旅。
七月的时候最开始投了十多家,然后就开始复习。虽然春招找实习的时候已经感受到了寒气,加上学历差更加举步维艰,但是还是相信秋招作为应届生最大规模的校招,情况肯定还是会好转些的,但是现实让我狠狠打脸。七月剩下的日子和整个八月除了零星测评和笔试外,一个面试都没有。我开始慌了,八月下旬的时候开始海投几十家,而且同时听说另外一个同学早就投超过七八十家了还是 0 面试,所以心态开始有点小崩。之后到九月之前的日子也是测评笔试轮流转,还是一个面试也没有,当情绪到达低谷的时候,终于迎来了些许曙光。。。
九月,我终于开始有第一场面试,先是本地一家做数据库的小厂,再是 4399,广发银行、政采云等,慢慢就好了起来,面试也渐入佳境。9 月底也拿到了第一家意向——政采云,也是 9 月进的几个中小厂池子里最满意的一个,就有点想躺了。而且这个时候其实面了 OPPO 的一面,当时觉得这个时间点约我这个学历的来面是铁 KPI,但是这是我秋招所有有面试机会的公司中最大的一家,怎么能暴殄天物呢?所以也老老实实面了,但是心里属实没有报太大希望。国庆时也和女朋友出去耍了两天。
十月过完国庆后,又有多了几家中小厂的面试,比如途虎、百奥、拖了一个多月的 4399 终面、宁波银行深分等,同时也 9 月积攒的池子又开了一两个小厂,虽然有政采云保底,但是因为面试也不少,加上国庆又摆了几天,所以精神还是比较紧绷的。同时 OPPO 也迎来二面综合面,面试官非常和蔼可亲,会引导我,而且第一次有面试官愿意看我 GitHub,最后面完 11 点多了还赶紧让我去吃饭,当时面完心情也是非常好,想着就算是挂也是值了,有一个好的面试官真的真的对面试体验起到非常大的影响,非常感谢这个二面面试官,当时一整天心里都暖暖的。
之后不久也约了 HR 面,然后看到大家都在说 HR 面秒挂,我也没有抱太大的希望了,但是作为一场面试无论如何还是要尽力去准备和表现的,这是态度问题。看到别人的面经中会问是否用过或了解 OPPO 产品等的问题时,想到自己作为一个前 OPPO 用户,高中毕业典礼时还把当时的 OPPO A59m 给摔碎屏了哈哈哈。在这个问题上自己还是认真去准备了的,包括去官网了解各种手机型号、不同的产品线、自研芯片、生态等,了解了 OPPO 的三大发展战略,马里亚纳、潘塔纳尔等等。。。但是最后居然没问到,有点可惜。
过了一周后,进了池子并且很快就开到了(应该刚好赶上那一批),发了意向并在两天后正式 Offer,自己非常惊讶,本来已经做好去杭州的准备了,思考了几个被捞到的原因:除了前面的大佬拒了(一般是拿到了别的大厂),还有可能是和二面面试官聊得很来,最后就是之前虎牙锁我 hc 给的我攒下的人品吧。。。
之后零零散散还有些厂的约面,游卡、CVTE 等都拒了,开摆了,笔试也是,然后等到 11 月中旬最后一家 4399 才开出来,也是等了很久。最后也没啥悬念签下绿厂,结束了 23 届秋招这场异常艰难的战役。
所想与感悟
所以秋招也让我明白一个道理,找工作不像高考一样,可以精确地用分数来量化你是否达到了录用的门槛,每个高校都有自己非常明确的分数线,过了就是过了,没过就是没过;而找工作则是除了自己技术能力上达到要求之外(问的问题都基本答得出来),可能还和过往的经历、面试过程中对自己能力的展现、遇到的面试官的态度、与面试官是否有眼缘、其它竞争者的情况、前面是否有大佬拒了、公司的经营情况、hc 数量等等因素综合影响下,最后得出的结果。所以其实大家无论最后秋招确定去了哪里,符合预期也好,不符合预期也好,都要相信技术实力永远是决定你的下限的兜底,只要你技术摆在那,无论如何之后结果都不会太差的,校招不理想可以社招再跳,人生不会仅仅因为一场秋招而被定性,就像不会被一场高考而定性一样。
回看自己走过的长长的路,可以说是在寒冬中蹒跚前进,最后到达一个冰雪暂时消融的地方小憩,并期盼着春暖花开来临之际。在最后还算顺利地结束秋招之后,自己心里还是比较惶恐的,毕竟很怕进去之后身边都是各种 92 硕大佬被吊打,所以还是要保持一个持续学习不断前进的状态,同时也要搞毕设了。当然还是好好地享受一下成为社畜之前为数不多的假期,重拾下健身、好好打游戏之类的。
一些建议
如果是要给 24 届或之后的师弟师妹们一些建议的话,我觉得网上一些总所周知的就不说了,毕竟 Java 人从来不缺学习资料,比如刷题用代码随想录、八股看 JavaGuide 这些我就不再赘述了,应该说只要是行内人都非常熟悉了吧,说下几个我个人觉得比较实用的建议吧:
- 关于提高面试通过率和项目准备上,我也是看了一个 b 站一个 up 主的分享觉得非常一针见血,打算分享给大家。大概意思就是说在项目中要体现自己的思考,通过思考的过程把项目的发展串联起来,引起面试官的兴趣,层层诱敌深入,让自己掌握面试的主导权,既然面试官被你引导得基本在聊你最熟悉的项目,问到你不会的八股的概率就大大减少了,面试通过率自然也就提高了。具体大家可以仔细品品原视频:https://www.bilibili.com/video/BV1oP4y1U769/
- 关于赛道选择上,如果自己学历普通比如双非本科,想提高自己进大厂的概率,并且对自己实力比较有信心,可以不做我们普通的前后端开发,转而选择做基础架构方向,搞开源,例如牛客上最有名的 A 佬和 hzh 佬,他们都是我非常崇拜的大神,也是今年寒冬还可以疯狂收割大厂的本科生。当然难度上自然会高不少,但是也意味着能和你卷同个方向的人也少了很多。
- 关于软实力上,我觉得可能也是面试中很多人会忽略的一个点。比如你面试时表现出来的精神面貌、你的沟通表达或者说语言的运用能力、你的礼貌、你对一个问题是否有自己独到的看法(独立思考能力)等等。。。可能有人认为这不是非技术岗才会看的东西吗,我认为就算是技术岗这些同样不可忽视,因为等你步入职场后,人际交往、沟通表达等软实力也是非常重要的(更深的含义自己体会了),程序员不能仅仅只会写那么几个代码。
最后
最后非常感谢你能看到这里,希望我的经历和建议对你有些许帮助,不管是能力提升上的作用也好还是精神上的激励也好,最后送给大家一句计算机之神 Knuth 老爷子的名言,希望真正热爱技术的大家可以坚持自己的热爱:
A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better.
NLP 转后端开发,顺利拿到字节实习 offer!!
简单介绍一下我的基本情况,上海双非本 + 985 硕,目前在读研二。本科 + 研究生大部分时间都在搞算法, NLP 相关,今年终于认识到了理想和现实的差距,遂在 5 月份下定决心转后端开发。之后处理一些事情,暑假 7 月底的时候正式开始学习 Java,历时三个月, 9 月底开始投日常实习,10 月 17 结束。面试过的公司包括: B 站,蔚来,百度以及字节,B 站挂在二面,其他均拿到日常实习的 Offer,最终选择了字节跳动。
从以上我的基本情况大家能看出,我的战线比较短。但是在这些时间里,我的作息基本上都是早 7 晚 11,很辛苦。
这篇文章首先分享我的面试经历,后面的部分与大家分享我的学习经验。
面经部分
下面的部分总结了面试过程中被问到的知识点(还记得的部分),以及我个人的一些心得体会,供大家参考。
百度
百度给我的面试体验还是蛮好的,是我面试的所有公司中唯一一家对八股考察非常详细的。一面是非常详细的八股面试,涉及到 Java 基础知识、数据库、spring、jvm、多线程、场景设计等等,基本上准备的都被问过了,但是整体来说难度不高,知识面比较广但是不会深挖。二面来说区别就非常大了,注重实践能力的考查,而且会深入到底层原理。
面试之前会有自我介绍的环节,包括项目介绍。百度两面对我的项目提问都不多,可能是我介绍项目的时候就比较详细的原因。
接下来的部分是知识点整理:
百度一面(1h+)
- 常用 GC 算法,常用的垃圾收集器, G1 了解吗
- 场景题: cpu 打满且频繁 full GC,怎么解决?
- 有 jvm 调优的经验吗?实际工作中遇到过内存相关的问题吗?用过哪些堆栈工具调试?
- Mysql 索引,数据结构为什么使用 B+ 树
- 索引覆盖了解吗
- 索引失效的场景
- 简单描述一下数据库的四种隔离级别以及对应的三种相关问题
- MVCC + 锁 保证隔离性
- 造成幻读的原因了解吗,快照读、当前读。
- 数据库自增 ID 和 UUID 对比
- HashMap 源码,数据结构,如何避免哈希冲突,对比 HashTable
- HashMap 源码中,计算 hash 值为什么有一个 高 16 位 和 低 16 位异或的过程?
- 为什么重写 equals 还要重写 hashCode,不重写会有什么问题
- ConcurrentHashMap 底层实现,扩容问题。
- 如果让你自己实现哈希表,你会考虑什么问题?
- 场景题:亿级别黑名单、短链接,你考虑使用什么数据结构?布隆过滤器、前缀树。其中布隆过滤器问了基本的原理和实现方式
- Java 引用类型,强软弱虚
- Java 是引用传递还是值传递
- Object 类你了解哪些方法
- 接口和抽象类的区别
- 线程池核心参数,以及工作原理
- ReentrantLock 对比 sync 锁
- lockInterruptibly()、acquire()、tryAcquire() 方法
- CAS 机制了解吗,存在什么问题
- 对象锁和类锁的区别
- 如果让你自己实现阻塞队列,如何实现?阻塞唤醒这一部分,如何实现?
- ThreadLocal ,Volatile
- 看你项目中用到了 Netty,简单介绍下吧。这里还有个 问题是问到 Netty 和 SpringBoot 整合的,但我一直都没理解她想问什么
- 粘包拆包问题,Netty 解决粘包拆包的 Decoder
- Spring 事务了解吗,Spring 事务的注解不生效,是什么原因
- 算法题: 手写快速排序,时间复杂度,稳定性
整理感觉不错,基本都答上来了,按照 Guide 哥星球里的内容,认真准备就好。
百度二面(45 min)
- 看你项目中用了一致性哈希做负载均衡,简单介绍一下
- 项目中 CompletableFuture 如何使用的
- 算法题:给定一个字符串,找到其中最长回文串
- 计网和组成原理学过吧,你认为哪个掌握的好? 我选了计网。这一部分问的很深入,我没来得及记录,以下部分只是一些零散片段,但是整体问的时候是有逻辑的。
- OSI 七层模型
- TCP 三次握手,四次挥手整个过程包括状态的转换。为什么是三次握手、四次挥手。发送 Fin ,实际的意义代表什么?(发送方没有数据要发送了,可以断开连接)
- 四次挥手,为什么等待 2 MSL
- 流量控制、拥塞控制
- 后面关于网络就更深入了,TCP 底层是怎么实现的,如果让你用 Java 模拟 TCP 的过程,做一个仿真,你有什么想法。大学学习计网的时候,协议栈之类的了解过吗(这部分我都不懂,认栽了)
- 看你项目中用到了 Spring,自动装配的过程了解吗。
- Spring 启动类的注解,介绍一下
- 因为我项目中用到了,所以被提问了 Spring 二次开发常用的扩展点,还涉及到了 Bean 的生命周期。 BeanPostProcessor,在你项目中如何使用的
- Spring 中你常用哪些注解? Autowired 实现原理
计网仿真 TCP 以及后面深入的部分我不懂, Autowired 实现原理 没说清除,其余的都答上来了。
字节跳动
在我整个的面试过程中,字节给我的体验是最好的。一面二面的面试官都非常好,面试的问题、要求都说的很清楚,需要注意的点都提前告诉了我,甚至二面的面试官会提醒我,"在回答问题的时候这边会有敲键盘的声音,是我在记录,不要影响你回答问题。"对于初次求职面试,体验感拉满。
除此之外,字节的面试和百度思路不一样。百度是从八股出发,引出一些实际场景遇到的问题。字节几乎没有八股,是从项目出发,结合工程经验,主要考察思考的过程,关键点答出来之后,结果对错可能不是很重要(这里是我主观臆断的)。
字节一面(1h)
- 自我介绍,项目部分主要介绍了 rpc 项目,后续的问题都是基于这个项目
- rpc 远程调用的整个流程
- 项目中的 SPI 机制,介绍一下原理以及你做了哪些改进
- 项目中用到了负载均衡算法,详细介绍一下
- 一致性哈希的原理,虚拟结点
- 项目中的序列化方案,为什么序列化,你都了解哪些常用的序列化方法。
- 你项目中使用了 Kyro 序列化,优点你提到了,缺点了解吗
- 通信协议是你自己设计的,假如后面需要变更,比如添加新的字段,你项目中如何处理的?
- 服务的灰度发布介绍一下,如何实现的?
- Zookeeper 作为注册中心,假如崩溃了怎么办?这里开始连环问了
- 你提到了 Zookeeper 的一致性,它是如何保证的?
- ZAB 协议,选举的过程,这里问的很详细
- Zookeeper 是强一致性吗?
- 网络分区了解吗,CAP 理论
- Zookeeper 如何应对网络分区的,脑裂问题了解吗,如何解决?
- 假如我同一时间有大量服务发布,你提到了 Zookeeper 只有主节点负责写, 怎么解决?假如主节点崩溃了,新选举出的主节点仍然没办法面对我的大流量,也崩溃了,如何解决?
- MQ 的原理,你知道哪些 MQ,各自有什么特点,什么时候需要用 MQ
- 你刚才提到了服务端保护机制,如何实现的?这里我答了限制连接数以及接口限流,基于责任链模式。之后问了用到的令牌桶以外的常用限流算法。
- 算法题:链表反转,你知道的所有实现方式。这里我写了递归和非递归两种。
整个面试的过程中大脑都是高速思考的,甚至从面试官的问题中得到了好多启发,是背八股掌握不到的,体验非常好。面试的问题几乎都答上来了,有一些不太熟悉的在面试官的提醒下也都回忆起来了(这点非常 nice,其他面试不会就直接过了,而字节会认真引导你,看你究竟掌握到什么程度)。事后 hr 小姐姐还告诉我面评非常好,鼓励我认真准备二面。
字节二面(1h)
字节二面的经历比较魔幻了, 面试官在伦敦有时差,因此是晚上九点开始面试的,由于面试官比较忙,整个面试过程比较简单,自我介绍 + 项目介绍之后简单提问了几个问题(没有印象深刻的技术问题,这里就不重复整理了),沟通了一下实习时间,直接做算法题了。
- 算法题:有一个 n * n 的棋盘,每个格子有 RB@ 三个状态,R 表示红色,B 表示蓝色,@ 表示此路不通。机器人从左上角走到右下角,每次只有上下左右四个方向选择,相同颜色之间没有代价,跨越不同颜色代价为 1,求解机器人从左上角走到右下角,最少的代价。
- 这里我用回溯求解的,很快就写出来了,思路也没问题。但是复杂度计算卡住了,在面试官多次且反复的提示下,算出来了。 最后提问环节面试官跟我说后续优化可以加一些剪枝操作
二面没有遇到难度比较大的问题,大部分时间都被我卡在了算时间复杂度(很菜勿喷)....
B 站
综合来说,B 站面试给我的体验是非常差的,一面的时候我感觉还没进行比较深入的交流,问了一些八股,很快就结束了。二面上来之后,问了你觉得自己项目有什么亮点吗,然后就来了一道 Hard 算法,又结束了.......
B 站一面(30 min)
- Rpc 远程调用的流程
- 一致性哈希算法详细介绍
- 为什么选用 Zookeeper 作为注册中心,注册中心作用是什么
- 动态代理
- Redis 在你项目中如何使用的,穿透、雪崩、击穿了解吗
- 你项目中用的是 RabbitMQ,为什么,和其他 MQ 对比如何?
- RabbitMQ 的原理
- 你项目中的 灰度发布、分组管理如何实现的
- 无算法题
之后在我以为他准备深入提问的时候,面试官告诉我面试结束了,整个过程不到 30 min,而且没有算法题。
B 站二面(30 min)
- 简单介绍下你的项目,是工程项目、学校项目还是自己学习的
- 你认为项目中有什么亮点?
- 算法题:K 个有序数组,输出最终排序后的数组 (K merge)。
B 站是我第一个走面试流程的公司,二面在字节一面的前一天。B 站二面是我第一次在面试过程中写算法题,结果就遇到个这,当时心态是崩掉的。因为第一次确实有些紧张,思路不清晰。虽然是力扣 Hard 难度吧,但是事后觉得也没有很难,做不出来还是大多归因于自己。但是复盘的过程中,我发现在面试的过程中,虽然太紧张了没实现出来,我把两种解题思路都思考到了,并且面试官提问时间复杂度,在提示下也求解出来了(很菜勿喷),整体表现自我感觉也算可圈可点吧。
给大家的经验就是,平时刷题的时候时间复杂度求解一定要重视!
备战部分
下面是我从七月底写出第一行 Java HelloWorld 直到现在的大致时间表:
- 七月底,正式开始投入时间学 Java,在师兄、师姐的推荐下选择了 JavaGuide 作为主线的学习资料,之后加入了知识星球,认真阅读了关于学习路线的内容。
- 七月份用了一周多的时间熟悉 Java 语法。前期主要跟随 小码哥恋上数据结构课程,一边复习算法数据结构,一遍熟悉 Java 语法。
- 八月份开始,选择了 Guide 哥推荐的千峰商城项目作为入门,大概用了两周时间,全程跟随视频敲完代码,收获非常大。这一过程中,恋上数据结构这门课程是同步学习的,基本就是早晚做项目,下午学算法。
- 多线程、Jvm 方面的知识,我选择了马士兵的课程。这两部分是同时学习的,理解为主。选择马士兵课程的原因之一,是因为马老师讲课是以面试为导向的,一边理解一边掌握八股文了,效率比较高,总共耗时两周左右。
- 网络 IO 部分的知识 以及 Zookeeper、MQ 等中间件,这三部分是一起学习的,参考的资料包括马士兵课程、稀土掘金的 Zookeeper 课程、慕课网的 MQ 课程以及尚硅谷的一些资料,耗时大概一周左右吧。
- 以上打基础大概花费了一个月的时间。
- 九月份返校之后,开始着手准备简历上的项目,花了一些时间在 Guide 哥的知识星球里翻看优秀开源项目介绍,选择了 Guide 哥的手写 Rpc 项目以及星球推荐的 IM 项目。
- 有了基础之后,项目做起来还是比较快的,加上有源码可以参考,各自用了一周就基本实现完成了。这里总共耗时两周。
- 后面的时间里,我针对这两个项目做了深入研究。在极客时间和稀土掘金里,我分别找到了 rpc 和 IM 的相关课程。由于都是文字的形式,加上自己实现过基本功能,读起来非常快,快速整理出了课程内作者对于项目深入思考的部分,之后融合到自己的项目中。这里我认为是非常关键的一步,在面试的时候我能够顶住面试官的连环问,和这些课程中的相关内容以及思考题的深度是分不开的。在这一过程中,我还有幸加了几个作者大大的微信,不停地和作者交流自己的思考,甚至发现了课程中的一些小瑕疵。非常幸运他们都很有耐心,给予了我很多指导,尤其是 crossoverJie 大佬,几乎是有问必答,甚至在我面试之前,还给予了我很大鼓励(相当感动)。
- 大概到九月中旬,我就开始整理简历并且投递了,之后一边复习八股,一边完善项目。
- 九月底,我的项目已经基本整理完成了。我花了一周的时间系统梳理八股文,制作了很长的脑图帮助我回忆知识点。
- 十月份,国庆节的假期里,我保持着每天 15+题的速度,快速找回了算法题的手感。由于时间真的太仓促了,时间复杂度这一块我没有重视,后面也付出了惨痛的代价。提醒各位读者,算法复杂度的计算一定要重视起来。
- 最终功夫不负有心人,我收获了百度、蔚来以及字节的日常实习 offer。JavaGuide 以及知识星球内部的 《Java 面试指北》在我整个备战的过程中起了很大作用,是我的指路明灯。
写在最后
由于从本科开始就一直做算法 NLP 相关的工作,对后端开发了解甚少,加上时间紧迫,我不得不采取一种囫囵吞枣的方式进行学习。对我而言,在不到三个月的时间里,从 Java 的入门阶段到通过日常实习面试实在付出了太多,每天早 7 晚 11 的作息时间对身体也产生了一些伤害,如果时间允许,我更希望节奏慢下来,把每个知识点都学扎实、学透彻。
本篇面经实际上没有太多东西可以分享给大家,因为笔者实际上也只是一个才学了不到三个月 Java 的新手小白。如果说文章里有什么是值得大家参考的话,我希望是面对目标绝对坚持的毅力以及面对困难永不退缩的决心,是它们支撑着我逐渐越过一个又一个的“不可能”。
2 年经验大厂(网易、字节、B站、阿里...)面经分享
这是一位20届球友的社招面经,获得了滴滴、网易、字节、B站、携程等公司的 offer,最终选择了字节。
下面是正文。
北京滴滴(offer)
一面
自我介绍
介绍自己做的项目,难点有哪些,怎么处理的?
拆分读服务是微服务的什么思想?
拆新的服务和之前服务水平扩展 有什么不一样?
数据库层面有没有数据扩展?
QPS 8W 总单量是多少 ?
本地缓存怎么保证数据一致性?
MQ 如果挂了 怎么办?
Redis 集群了解吗?
数据清洗怎么做的?
如何保证最终一致性?
顺序消息如何保证?
ES 怎么用的?数据量级多少?为什么用ES 不用Hbase?
Zookeeper 作为注册中心有什么问题?如果 海量服务同时重启会出现什么问题
算法:环形链表 II
二面
项目介绍
大促期间服务总QPS , 多少个服务,每个服务多少个线程
服务器线程数量根据什么来配置?
Redis 集群的工作原理? gossip协议? 写和读的流程? CRC16 再取余 这个计算 在client 还是服务端?可以决定哪个key 放在哪个节点吗?
Redis 主从同步流程?
Redis 的 hash结构 怎么 rehash的?如果渐进式时,这些的key突然都不访问了 会有什么问题
MySQL innodb 引擎的索引结构,B+树一般都多高? 层高怎么计算?
联合索引 abc where a = 3 and b > 3 and c= 3 怎么走索引?
如果MySQL 表中有一个字段很大有几K会有什么问题?
索引下推了解吗?
场景设计:如何设计一个会议室预定系统?
算法: 给数组arry 和值 x 计算 数组 array 中差值绝对值为X的数对;
三面(HRBP)
离职原因;
用三个词评价一下你的领导;
未来规划;
你有什么缺点;
遇到过最大的问题;
总结
一面整体上全是项目和场景考虑,因为他们是用go开发,我之前是用Java,所以一直在问中间件,没有Java八股文,不过中间件问的蛮深,面试体验很好;
杭州网易(offer)
一面
讲一下JUC 下的线程池,线程池参数以及提交任务后怎么执行
Lock 的加锁和解锁过程和公平锁和非公平锁实现原理
Conditional 源码有没有看过
阻塞队列 源码有没有看过
JVM 调优讲一下?非常细 什么命令 怎么分析的 面板什么样子都有问
CMS + ParNew 算法的对象分配和垃圾回收流程
什么时候会出发full gc
old区什么时候触发CMS GC 什么参数 配置大了会怎么样 配置小了会怎么样
为什么会产生浮动垃圾
MySQL 的隔离级别,MVCC 原理 ,乐观锁 在什么隔离级别才能使用?
Kafka 的ISR是什么,HW呢?怎么保证可靠性, Kafka 怎么实现顺序消息?为什么Kafka的broker上topic越多 效率越慢?
讲一下项目的完整流程 数据模型,多个版本经常变化怎么控制的?(每个校验模块提供原子能力 可以配置化,如何设计)
分布式事务 是怎么保证的, MQ的方式 如果本地执行成功同时服务挂掉了 这个MQ没有记录 怎么办?
二面
Zookeeper工作原理讲一下,有没有看过源码;
讲一下你负责的业务的服务架构,以及你们部门的服务架构;
你觉得现在架构有什么不合理的地方?
有没有看过什么中间件的源码?
区块链了解吗?
总结
因为简历投错了部门,投到了区块链,所以问我很多源码,比较底层的东西,因为做区块链开发可能会难一点,所以会问有没有看过源码,整体面试体验很好;
Shopee(offer)
一面
项目问题( 聊了 30分钟);
MySQL 主从同步原理;
MySQL 索引优化;
线上问题定位 以及优化过程;
Redis 集群 的工作原理,集群写入数据原理, 增删节点 如何数据同步?Redis的hash过程;
Kafka 讲一下,offset存储原理;
算法: 1.栈实现队列 2.三数之和
二面
介绍一下自己的亮点;
讲一下做的项目;
Kafka 讲一下;
MySQL 的索引讲一下;
Redis 的key过期 怎么删除的 ?主动删除 和被动删除;
Redis 击穿 雪崩 穿透 和解决办法;
MQ 同步信息怎么保证数据的一致性和实时性?
JVM调优过程说一下;
算法:1.二叉树的前序,中序,后序遍历; 2.最长重复子数组
总结
参加的是周末专场面试,一个周末面完+出结果,整体是项目+中间件,算法每一面都是两道一个easy,一个mid,整体面试体验很不错;
B站(offer)
一面
MySQL 行级锁,表级锁。意向锁 加锁时机是什么? 项目中有没有使用过意向锁?
如果查询语句有没有索引,SQL调优过程?
Spring 事务注解原理,事务传播机制,使用过什么传播机制?
RocketMq 消费者重平衡 会有什么问题?重复消费? 消费失败? 这些场景如何处理
数据一致性怎么保证? 分布式事务怎么实现?
动态代理有哪些,什么区别,使用注意方式;
二面
项目主要负责什么?
数据清洗怎么做的?
Kafka 怎么保证消息一定被消费?
qps8W 多少台机器? 什么配置? 总qps? 线程数量? mysql 版本? 走的什么索引? 会不会回表?
说了自己加redis和本地缓存 然后问我本地缓存的配置?
如何保证Redis,DB数据一致性?双删策略 为什么要多删除一次?
HashMap的扩容过程? 会发生什么问题?
MyBatis 的接口和mapper怎么对应执行?
还做过什么技术优化?
分布式锁怎么实现? 分布式锁怎么实现阻塞队列?
本地锁 怎么实现阻塞队列的唤醒的?
Zookeeper 怎么实现Cp?
ZK 怎么选举的 怎么投票的?
算法:1.多线程循环打印ABC; 2反转链表。因为是现场面试,纸上手写,所以给了两道题目难度都还好
三面
你们部门的服务架构讲一下?
接口优化怎么做?
什么场景下,都用过哪些并发?你用多线程的时候 Synchrionzed和ReentranLock怎么选择的?选择原则是什么?
压测和故障演练做过吗? 你都扮演什么角色?有什么收获?
用的什么rpc和注册中心?有什么优缺点?
未来三五年规划?期望薪资?
总结
因为是使用Java的,所以Spring问的比较多,一面比较贴合实际,都是面试官开发中常见的问题;二面对项目整体做个梳理和一些中间件知识;三面从架构和优化,压测等角度去问看看广度和高度吧主要;
携程(offer)
一面
讲一下ArrayList和HashMap 底层数据结构,优缺点,使用方式;
CuurentHashMap有用过吗?
CAS 设计思路和原理?
ThreadLocal底层原理?
什么场景使用的ThreadLocal?
什么场景使用了多并发?
用到了Java jdk8的哪些新特性?
Lambda怎么用的,Stream的实现原理?
除了刚刚的场景 还有什么场景使用过异步任务,并发任务计算结果后做聚合 怎么做?
网络编程 用过吗? IO讲一下
你开发中都用到了什么设计模式?
工厂模式的设计理念是什么?有什么好处?体现了什么编程思想?
适配器模式了解吗? 策略和适配器模式有什么区别,你为什么选择用策略模式而不是适配器原因是什么?
设计模式都有什么开发原则?
JVM调优经验 说一下做了什么?
JVM 知识你讲一下?
Spring 事务注解Transaction 实现原理?
A方法调用B方法,如果B方法开启事务 则直接用B方法的事务,如果是你 你怎么设计怎么做?
InnoDb的默认隔离级别,可重复读,解决了什么问题 没有解决什么问题?
什么场景下使用了ES?
倒排索引 是什么讲一下?
为什么ES检索比较快?
你使用MQ(RocketMq和Kafka)的应用场景什么?
二面
服务器都多少线程,发起一个请求去调用第三方,是新增加一个请求吗?如果服务器线程使用完了怎么办?
灰度上线流程怎么做的?
数据洗刷 怎么做的 双写 怎么避免循环写?
ES 数据结构是怎么样的?
25匹马 5个赛道 怎么跑 才能最少批次找到最快的三匹马?
分裤分表下 怎么做业务逻辑查询?怎么生成一个全局唯一的id?
场景设计:给一个10G的文件,里面只有两行记录是一样的,如何找出(电脑内存只有500M)
算法:有效的括号
三面
负责的·项目 业务流程和 服务架构都说一下?(20min)
bigdecimal 使用需要注意什么,还有什么其他编程时需要注意的规范?
MySQL 库表上线之前需要做什么工作?
索引为什么是B+树结构,MySQL都有哪些引擎,有什么区别?
MySQL深度分页怎么解决?
ThreadLocal原理?使用需要注意什么?
如果做海外的业务,使用数据库需要注意什么地方?时区
有没有做过海外业务?多语言,多币种有没有什么解决方案?
总结
感觉携程的面试比较中规中矩,基本上所有知识面都有考察到,也比较符合实际,项目,基础知识,场景设计,算法,代码规范都有,但是相应更看重 项目和基础知识和代码规范,面试体验很好;
阿里(曲折的面试经历)
阿里一共面了三个部门:淘宝,饿了吗,供应链
年前面淘宝两面,到三面没有hc了,搁浅;饿了吗有同学联系,面完两面,结合自己情况不再考虑这个机会;年后又面了供应链,后来有offer,没有继续走流程;
淘宝一面
先聊了20分钟项目 问难点 如何解决
HashMap在使用时需要注意什么地方 至少说出四点;
你的多并发控制是怎么使用的,都有哪些多并发控制手段
线上有死循环代码 你怎么排查定位到
MySQL的 事务 实现原理和隔离级别
对于索引,你觉得在开发中需要注意什么?
分布式锁的实现 和 底层原理 以及都有什么问题?
NIO 和 AIO 的区别
Kafka 的 架构和工作原理?
Kafka为什么这么快,顺序写 是这么实现的?
你觉得你做的业务的价值是什么 解决了什么问题?
你觉得 你做的对业务最有价值的一件事情是什么?
笔试:1.找出代码的bug 一段多线程代码 找出三个bug
给你Memcached Clinet 实现一个消息队列
淘宝二面
设计方案主要做哪些事
线程池的阻塞队列有几种,你们用的那种,拒绝策略有几种,你们用的哪个,为什么
线程池里面的execute 和 submit 方法有什么区别
线上线程池打满,如何优化的?JVM 你了解什么? CMS 为什么会有浮动垃圾? 什么时候会进行CMS GC? 什么时候会进行Full GC?CMSGC和 FULL GC有什么不一样?
spring中bean的生命周期
explain 执行分析,你们主要关注哪些字段,为什么
线程池核心参数
java内存模型讲讲,内存屏障是干嘛的
Zookeeper 作注册中心 和nacos 和eruka 有什么差异 ?基于什么理论选择?
JVM调优经验说一下
总结
很遗憾面到三面没有hc了(拥抱变化),面试更贴合实际,比如:HashMap在使用时需要注意什么地方 至少说出四点,看起来很简单,但是需要知道HasHMap的结构和工作原理,JVM和Spring问题会多一点,也会关注你的业务Sense,对业务有没有推动;
字节(offer)
一面
项目问题(20min)
binlog 和 redolog 有什么区别?
MySQL 不同存储引擎有什么区别
Kafka 为什么这么快,主从同步怎么做的?HW 和LEO分别是什么;
让你实现一个消息中间件,你会设计哪些模块?
ES查询流程?
B+树的特性?
Select / Poll / Epoll 的区别?
Redis 集群工作原理? 如何通信?MOVED和ASKED 有什么区别?
服务设计:设计一个短链系统;
算法:接雨水
二面
项目问题(10min)
JVM 的内存模型
G1 和CMS GC过程都说一下,分别适用什么场景? JVM调优过程说一下?
内存溢出和内存泄漏?什么情况下会出现? 怎么避免?
HTTPS 的工作原理? 有哪些常见的加密算法?
顺序消息 如何实现?
数据库索引的原理?联合索引和索引下推?
Redis数据结构?为什么用快表而不用平衡查找树?
Redis主从复制过程?
一个数组 int[10] 在JVM内存上怎么分配的?多大空间?
场景设计:设计一个分布式限流器
算法:寻找重复的子树
三面
项目介绍;
DDD了解吗,讲一下?
RocketMQ有什么缺点? Kafka有什么缺点?使用场景分别是什么?
用过什么设计模式?
使用Redis 需要注意哪些地方?
工作遇到过什么问题? 如何解决的?
工作中和同事遇到冲突,如何解决?
场景设计:公司的各系统都有计数需求(如头条文章的阅读数、评论数、点赞数等),请设计一个统一计数服务。
算法:LFU 缓存
还有一些忘记了。。。
总结
一二面考察比较全面,以技术问题为主,涉及面较广;具体包括:计算机基础、编程语言、数据结构与算法、系统设计题等一些问题会涉及到原理与细节;三面也会看反应力、方法论。面试体验比较好。
腾讯云Java工程师一面 + 被捞一面 + 二面面经
【一面】全程55min
先自我介绍一下吧
Java1.8 的新特性?你说到了 Lambda 表达式,你说说它的优缺点?
Java 8 的 Stream 流用过吗?有什么特点?
线程池创建的方式有哪些?ThreadPoolExecuter 的参数有哪些?
ArrayList 和 LinkedList 的区别在哪里?Queue 与 Deque 的区别?
HashMap 和 TreeMap 区别?
假设有一个10W的数据请求,你会有什么方法来实现这些数据的增删改查?
数据库的三大范式是什么?
MyISAM 和 InnoDB 的区别?
MySQL主键索引和普通索引的区别是什么?谁的性能更好一些?如果是在10W级的数据下,谁的性能更好些?
介绍一下联合索引吧?
以(a,b,c)为例,在什么情况下,单查 b 也能够命中联合索引?
算法题:手写代码实现单向链表的结构体,完成增删改查。
反问环节:你有什么问题想问我的不?
面试总结:感觉问题的题目不是太难,只怪自己太菜,基础没掌握好,面试官人不错,要是有人捞,我还想再来一次!第二天流程已结束。。
好家伙,不知道发生了什么,我又开始了新的流程,这难道就是传说中的二战!!!还是腾讯云。
【一面】全程46min
自我介绍,
接着就是来俩算法题:题1:统计一串字符中,重叠字符出现的次数。(如AAABBBCC,输出A_3_B_3_C_2)题2:求两个字符的最长公共子串
你用过哪些数据库?MySQL数据库的存储引擎了解过哪些?这些存储引擎的特点是什么?
MySQL 默认是什么存储引擎,为啥用这个?
InnoDB和MyISAM的有啥区别?和MEMORY呢?
InnoDB为啥索引的数据结果要用B+树?
为啥不用Hash索引?Hash索引查找的时候不是更快吗?
网络编程了解过吗?说说如何创建一个Socket连接
C++的基本数据结构了解过吗?
反问环节:你有什么问题想问我的不?
【二面】全程43min
今天上午突然给我发邮件让我下午二面,这霸道总裁的通知风格。。。
看你有个比赛,你这个比赛里面做的什么?(15min)
你还写过哪些应用程序,说说看?数据存储用的什么,web服务器用的什么?
C++了解过吗?
软件设计师什么时候考的??
写过多进程和多进程吗?都在什么情况下用过?遇到了什么困难不?
有没有 Linux 下的编程经验?
Linux常用命令了解哪些?
网络编程用过吗?Sokect?
Linux中的epoll和select这些多路复用了解过吗?
说说五层网络模型吧,说说对应的协议吧
抓过网络包吗?
如果要设计一个快速插入和查找的数据结构,你会用什么结构?Hash冲突的解决方法?
有一个容量为N的数组,里面存放了N个数,每个数的取值范围是1~N,有没有什么快速办法判断是否有重复元素,哪个元素重复了?空间复杂度要求是O(1)
求二叉树深度的算法呢?说说看?时间和空间尽可能的小
设计模式了解过吗?了解一下
UML类图理解的怎么样?画个类图吗?
云计算的知识了解吗?容器用过吗?大数据套件了解过吗?ELK了解过吗?看过开源架构系统的代码吗?(这全是知识盲区啊。。。)
分布式存储了解过吗?
一个进程的栈大小是多少知道吗?打开文件的上限是多少?
你觉得你擅长做什么业务?
反问环节
总结:整个过程主动补充有点少,导致场面数次陷入安静的尴尬场面,最长的一次甚至长达30多秒。以后的面试还是要多多扩展自己讲的内容。
文|牛客网:牛客71576213号
参考答案
上面的绝大部分问题,你都可以在下面的这几篇文章中找到答案。
步步高 Java 后端校招 6 面面经
我对步步高的记忆主要还停留在小时候,那时候步步高点点读机是真的火爆,广告直接都给洗脑了。
步步高虽然不是什么大型互联网公司,但是这份面经总体还是非常高质量的!这侧面说明了这家公司的的技术栈也还是比较主流的。
一面(50 分钟)3 月 3 号
介绍一下项目
项目是视频还是通过什么途径学习的?
你认为项目中复杂的点是什么?
Redis 的使用场景?
Redis 的高并发是依靠什么去保证的?
ThreadLocal 用在哪,为什么选择 ThreadLocal 呢?
项目上线了嘛?部署在哪里?怎么部署的?
注解实现缓存和日志统一处理是怎么做的?
SpringBoot 分哪些模块?
项目中的分页是怎么实现的?
项目中都有哪些 sql 表说一下吧?
消息队列 MQ 用过吗?说一下?-
分布式锁这块有用到吗?-
说一下常用的一些集合?
说一下 HashSet 的原理?
说一下 HashSet 与 HashMap 的区别?
线程安全的集合类有哪些?
锁重入了解过嘛?那些锁支持锁重入?
说一下锁升级的过程?
数据库中的锁有哪些?
Java8 的新特性 Stream 流、Lambda 表达式说一下?
TCP 和 HTTP 协议之间的关系,有什么区别?
TCP/IP 参考模型,每层都是封装的什么?
TCP 是可靠的嘛?那么 UDP 呢?
TCP 如何保证我们的可靠传输的?
说一下 TCP 中拥塞控制的一个过程?
Linux 查看 ip 地址的命令?
说一下聚簇索引和非聚簇的区别?
事务的隔离级别和每个级别所产生的问题?
实际开发中最常使用的隔离界别
创建线程的方式?说一下?
讲一下同步和异步的区别?
说一下项目中 Nginx 的作用?
说一下 JMM 吧
说一下常见的垃圾回收算法吧?
JMM 的三个特性是哪三个?
如何保证原子性,volatile 的作用呢?
ThreadLocal 和 synchronized 的区别
Redis 的 rdb 和 aof 说一下吧,区别呢?
为什么 fork 一个子进程呢?
Redis 有持久化为什么还要用 MySQL 呢?
MySQL 数据也会有丢失的情况呀?是如何保证的呢?
单节点和集群的区别,集群解决了什么问题?
主从复制解决了什么问题?
Redis 集群的原理
MySQL 为什么要采用读写分离呢?
除了 MySQL、Redis 外还了解过其他数据库嘛?
用过 Docker 嘛?
使用 Docker 部署的好处是什么?相比原始部署?
最近看了哪些书呢?
反问
二面(25 分钟) 3 月 5 号
Redis 为什么快?
线程的创建方式?
怎么在 Linux 服务器上部署项目?
使用过 Docker 嘛?
Docker 与 Linux 相比为什么性能更好?
如何进行 sql 优化?你自己实践哪些手段?
我们 MySQL 读写压力很大,怎么解决?
说一下 TCP 三次握手、四次挥手?
MQ 是什么?
项目是怎么做的?实习项目还是自己做的?
如何设计秒杀系统
实际开发中如何解决高并发的问题?你知道哪些手段?实践过哪些手段?
校园的实践经历
为什么来参加春招,是没 offer 吗?
手里有几个 offer ?
以后的发展方向是走技术管理,还是架构方向?
说一下在你眼里技术管理和技术架构的区别?
如果领导让你 3 天完成一个任务,但是你 4 天才能完成
谈一下你对加班的看法?
你将来计划打算学到什么,提升 Java 哪方面技能?
反问
三面(HR 面,20 分钟) 3 月 8 号
为什么会有写博客的习惯呢,出发点是什么?
这个博客是有粉丝的吗?你有多少粉丝呢?
大学校园经历中有意义的一些事情?
大学当中跟室友的关系怎么样?
为什么没有参加秋招呢?
找工作跟考研之间是怎么权衡的呢?
讲一下在自己的个人项目中学到了什么呢?
大学期间有没有低谷期间
手里有其他的公司的 offer 吗?
offer 是哪家公司的?
期望薪资是多少,年薪呢?
反问
四面(终面,7 分钟) 3 月 11 号
一个非常让人讨厌的领导,说话阴阳怪气的,开头第一句话就是你的成绩不咋地啊(无挂科平均成绩在 80+)。
1。 有没有实习的经验 ?
2。 为什么秋招没有找到工作?
3。 你是怎么学习一个技术的?说一个擅长的
结果
面试结束半个月 3 月 25 号,收到消息未通过面试的消息,理由是:因与人才画像不匹配 !
作者:持续学习爪洼
参考答案
你可以在下面这两份资料中找到上面绝大部分面试问题的准确答案:
JavaGuide:https://javaguide.cn/home.html
《Java 面试指北》:https://t.zsxq.com/Uv3ByZn
金蝶 Java 后端校招三面面经(已OC)
一位球友的金蝶面试经历,已经拿到了 offer,不过,后面因为觉得公司的风评不好就拒掉了。
一面
自我介绍
项目的架构图画一下
项目是怎么部署到服务器的
为什么要用 Docker
做项目的过程中遇到了什么问题没有,如何解决的,学到了什么。
项目数据库表怎么设计的
项目的日志怎么做的
项目有没有做权限管理,怎么做的
说一下自己对 IoC、AOP 的理解
网络协议说一下
数据库优化
有没有用过针对多表查询如何优化
HR面
自我介绍
学校的成绩,有没有获得过什么奖项
介绍一下项目,业务情况,当时是怎么做这个项目的
项目中充当的角色,负责做什么
项目带给你最大的收获是什么
说一件你在校园中做过对自己来说最有价值的事情
你觉得一个好的开发工程师应该具备怎样的素质
平时有健身运动的习惯么,频率怎么样
讲讲你的个人优势
手里的 offer 情况
反问
二面
Spring,Spring MVC,Spring Boot 之间什么关系?
@Autowired 和 @Resource 的区别是什么?
静态代理和动态代理的区别
除了 JDK 提供的动态代理实现还有其他实现方式么(CGLIB )
谈谈对 MySQL 索引的了解,哪些字段应该考虑创建索引,哪些字段尽量不要创建索引
为什么 InnoDB 引擎要选择 B+Tree 作为索引数据结构?
MySQL 中 一条 SQL 语句的执行流程
从执行流程的层面说说如何优化一条 SQL 语句的查询速度,发生在哪个部分
多表联合查询的时候,SQL语句的执行流程
目前正在学习什么知识
反问:新人培训体系是怎么样的
三面
自我介绍
简单介绍一下自己的项目
项目中用了哪些设计模式
单例模式有什么好处
项目中用了线程池干什么
为什么实际生产建议使用 ThreadPoolExecutor 构造函数来创建线程池
如何理解线程安全和不安全
平时怎么学习的
反问:公司目前的技术栈,是否有 CodeReview
三面这个面试官基本没怎么问题技术,后面找我唠嗑半天就闲聊一些大学生活啥的。
总结
金蝶的八股文整体还是挺简单的,没有问到特别难的问题的,整体体验一般。
参考答案
你可以在下面这两份资料中找到上面绝大部分面试问题的准确答案:
JavaGuide:https://javaguide.cn/home.html
《Java 面试指北》:https://t.zsxq.com/Uv3ByZn
美团、华为、字节(已获 offer)春招面经(附参考答案)
一位球友的 2022 春招面经,拿到了美团、字节、华为等公司的 offer。
面经中涵盖的问题,我几乎都找到了对应的参考答案,希望可以帮助到你。
美团
一面
挖项目,问的太多了,这里就不一一列举了,大部分是某个功能是怎么实现的或者如果要加某个功能应该怎么实现。
进程线程区别。
死锁,死锁条件。
知不知道中断和轮询的区别。
数据库索引,讨论了一下B+树能存多少数据。
数据库存储引擎知道哪些,有什么区别。
数据库锁。
算法题:起始点到终点最短路径。
部分问题参考答案 :
- Java 并发常见知识点&面试题总结(基础篇)
- Java 并发常见知识点&面试题总结(进阶篇)
- 选中断还是轮询方式?深究其中的区别
- MySQL 索引知识点总结
- MySQL面试题/知识点总结!
- MySQL锁总结
- 《Java 面试指北》 - 技术面试题篇
- LCP 35. 电动车游城市 - LeetCode
二面
- 问项目。
- 什么是序列化反序列化。
- 负载均衡,知道哪些负载均衡 。
- 什么时候会OOM,服务OOM怎么办,如何排查。
- Spring 启动流程。
- Spring 设计模式。
- 对于模版模式的理解,应用场景,你在项目中是怎么使用的。
- HTTP 请求过程 。
- TCP 和 UDP 区别。
- Linux知道哪些命令。
- 设置索引有什么注意的地方。
- 最近看了哪些书,有什么收获。
- 算法题:合并有序数组 O(N)时间 O(1)空间。
- 数据库设计:只能以半小时为单位订会议室。
部分问题参考答案 :
- 招银网络二面:什么是序列化?常见的序列化协议有哪些?
- 《Java 面试指北》 - 技术面试题篇 - 高并发模块
- 系统稳定性——OutOfMemoryError 常见原因及解决方法 - 3.2.1 异常诊断
- Spring常见问题总结
- 设计模式最佳套路4 —— 愉快地使用模板模式
- 一次 HTTP 请求的完整过程
- TCP和UDP的区别
- Linux 基础知识总结
- MySQL 索引知识点总结
- 88. 合并两个有序数组 - LeetCode
华为
一面
项目、论文。
String 能否被继承。
Java 内存泄露和排查。
Hash 方式和 Hash 冲突解决。
静态代理和动态代理。
线程通信方式。
Volitate关键字。
Java 高效拷贝数组。
算法题 跳跃游戏 leetcode 55。
部分问题参考答案 :
二面
- 简单说说项目、论文。
- 项目是自己学习的还是落地项目。
- 本科保研绩点高,为啥研究生期间没有刷绩点。
- 对华为的了解,这个聊了比较久 因为我本身就是华为用户,比较了解,主管也给我介绍和补充。
- 实习时间。
- 反问部门、技术栈,是否可以自己选项目。
字节
一面
- 问项目,聊怎么实现,从项目里学到什么。
- 手写单例模式,和 Spring 的单例有什么区别。
- 算法题:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
- SQL 题:根据题目要求写出对应的 SQL,由于太久没写,不会做。
- 智力题 1-N批次其中有一批次重量不合格 用最少称重次数找到
1) 刚开始说二分 面试官说不是最优
2) 提示可以从每批次拿不同数量:第N批拿N个 算重量差值就可以确定
部分问题参考答案 :
二面
- 问项目。
- volitate 关键字。
- JVM新生代怎么划分,大对象怎么分配。
- 新生代有哪些垃圾回收器。
- ParNew 原理。
- Innodb 默认隔离级别,RR能防止幻读吗,RR默认使用间隙锁吗。
- 怎么理解最终一致性,有哪些实现方案。
- 分布式事务。
- 算法题:数组里每个数右边第一个比他大的数。
部分问题参考答案 :
- Java 并发常见知识点&面试题总结(基础篇)
- Java 并发常见知识点&面试题总结(进阶篇)
- Java 内存区域详解
- JVM 垃圾回收详解
- MySQL面试题/知识点总结!
- 最终一致性,一致只会迟到,但绝不会缺席
- 《Java 面试指北》 - 技术面试题篇 - 分布式模块
- 496. 下一个更大元素 I - LeetCode
三面
- 问项目。
- RAFT 脑裂、一致性。
- 负载均衡。
- 各种排序算法,分析复杂度和稳定性。
- 其他想不起来了,八股很少,一直问项目。
- 算法题:旋转图像(90度旋转矩阵)。
部分问题参考答案 :
- Raft实战系列,集群成员如何变更?日志怎么压缩?
- 《Java 面试指北》 - 技术面试题篇 - 高并发模块
- 十大经典排序算法最强总结(含 Java、Python 码实现)
- 48. 旋转图像 - LeetCode
字节跳动 Java 后端实习面经(附参考答案)
这是一位读者的 2022 字节跳动 Java 后端实习面经,已经拿到了 offer。字节虽然用 Go 居多,但也是有挺多 Java 岗位的招聘。
我对他在面试遇到的问题进行了整理并给出了详细的参考答案,希望对准备面试的小伙伴有帮助!另外,建议准备面试的小伙伴一定要多看一些面经,根据自己的简历多多自测,这对于面试非常有帮助!
个人情况
末流 211,软件工程专业,2023 届毕业生。本来没抱多大希望,没想到最后过了。
一面(60分钟)
- 自我介绍。
- 问项目:登录鉴权是怎么做的?为什么采用 JWT 的方式?有什么好处?如何防止 Token 被篡改?
- 问项目:如何使用缓存的?技术选型的考虑?为什么要用 Sorted Set 实现排行榜?Redis 数据同步和数据迁移如何做?
- 问项目:如何防止表单重复提交?
- 问 Spring:怎么理解 AOP的?你在项目中是怎么使用的?Spring AOP 和 AspectJ AOP 有什么区别?
- 问线程池:如何理解线程池、参数、拒绝策略、原理?你的项目是如何使用线程池的?如果然你设计一个线程池,你会怎么做?
- 问 Java 并发(这块问的太深入了,顶不住啊。。。):进程和线程,了解协程吗?JMM 的理解,作用。happens-before 原则的理解,作用。Java 里面的锁你知道哪些? synchronized 关键字的理解、原理、锁升级过程。AQS 了解、原理。ReentrantLock 源码。ThreadLocal 理解、原理、内存泄露问题。
- 继续问 Java 并发:手写 DCL(Double Check Lock) 线程安全方法。为什么需要加 volatile? volatile 的作用、底层原理。
- 问计算机网络: HTTPS 和HTTP 区别、 HTTPS 加密过程。
- Leetcode 199. 二叉树的右视图
- ......
参考答案 :
- 虾皮二面:什么是 JWT? 如何基于 JWT 进行身份验证?、虾皮二面后续:JWT 身份认证优缺点
- Redis 5 种基础数据结构总结、Redis 数据同步和数据迁移如何做?
- 招银网络一面:AOP 了解吗?有什么用?切面执行顺序如何控制?
- Java 线程池详解、面试题 -- 如何设计一个线程池
- JMM(Java 内存模型)详解
- AQS 详解
- Java 并发常见面试题总结(上)、Java 并发常见面试题总结(中)
- ReentrantLock源码详细解读
- HTTP vs HTTPS(应用层)
二面(50分钟)
- 自我介绍。
- 问计算机网络: HTTPS 和HTTP 区别、SSL/TLS 的工作原理、中间人攻击了解吗?
- 问计算机网络(比较深入,有一些没有回答上来,还是要多补补基础):TCP 与 UDP 的区别,TCP 三次握手四次挥手,TIME-WAIT 和 CLOSE-WAIT 是干什么的? 为什么要三次握手两次不行吗?有大量连接处于 TIME-WAIT 的原因? TCP 是长连接还是短连接?
- 问计算机网络:从输入URL到浏览器显示页面的流程。
- 问数据库: MySQL 索引的理解、底层数据结构。如何看 SQL 语句是否使用了索引?
- 问数据库:如何理解事务?表级锁和行级锁的理解,幻读、脏读问题的解决。
- 问 JVM: GC 如何判断回收的垃圾对象?GC 算法有哪些?Minor Gc 和 Full GC 有什么不同呢?ZGC 垃圾回收器了解吗?
- 问 JVM:双亲委派模型的理解,有没有在项目中实践过自定义类加载器。
- 问场景题:几十G的数据都是URL,内存空间只有1G,磁盘空间无限,统计频率最高的Top 10;
- Leetcode 32. 最长有效括号、Leetcode 110. 平衡二叉树
- ......
参考答案 :
- HTTP vs HTTPS(应用层)、你连 HTTPS 原理都不懂,还讲“中间人攻击”?
- TCP 与 UDP 的区别?、TCP 为什么要三次握手?
- 从输入URL到浏览器显示页面的流程
- 深入理解 MySQL 索引底层原理、最完整的Explain总结,SQL优化不再困难
- MySQL 事务的默认隔离级别是什么?可以解决幻读问题么?、MySQL 中有哪些锁?表级锁和行级锁有什么区别
- JVM 垃圾回收详解、新一代垃圾回收器ZGC的探索与实践
- 类加载器详解、JVM自定义类加载器在代码扩展性的实践
- 10 道 BAT 大厂海量数据面试题(附题解+方法总结)、海量大数据处理面试题和思路总结
三面
这一面问的技术问题变少了很多,更多的是和面试官交流技术思维。
- 自我介绍。
- 你感觉你一二面表现的怎么样?
- 除了 Java 你还学习过什么其他的编程语言么?我说了 C 语言。面试官紧接着让我说说 Java 和 C 的使用感受,应用场景。
- 爬虫有了解吗?大学的时候写过爬虫没有?如何构建一个爬虫代理服务?
- 分布式缓存设计、缓存问题解决思路(雪崩、穿透)。
- 自己做过印象最深的一个项目,学到了什么。
- Leetcode 44.二叉树每层找最大值
- ......
参考答案 :
HR 面
随便聊了一下。
自我介绍。
项目里面做了什么,担任什么角色,最有成就感的事情。
对于公司的了解?还面了哪些公司?为什么要选择实习?
平时是怎么学习的?
你有什么要问我的?
平时除了技术喜欢干什么?
......
总结
字节的面试难度还是比较大的,不过,效率很高,体验也很不错。几个面试官给我的感觉还是不错的,一看就是做技术的,不整一些虚头巴脑的东西。
面试之前,我一直对照着 JavaGuide 网站(地址:javaguide.cn)和 《Java 面试指北》复习知识点,准备对应的八股文。Java 后端的知识点比较多,我主要是根据自己的简历来进行针对性地复习。面试的时候,不出意外,面试官问的几乎都是简历上写的东西。
2021
从考研失败到收获到自己满意的Offer
关于我
我现在是本科大三学生,在电子科大就读软件工程专业,在我大一大二的时候其实也并没有找到所谓的方向,将来想要从事什么岗位。只是一心想着先学好学校的专业课程,工作就业的事以后再说。我就一直用自己在学校课程上取得的一点点成绩在麻痹自己,逃避就业的现实。其实大家也都非常清楚,现在高校里面讲授的内容很多都是偏向于底层的一些理论知识,并不会具体教你框架、怎么做项目、怎么样写代码、即使有很多实验课程也都是非常地老套和实际情况差距非常大。这就直接导致一个很大的问题:我的编程能力很差,没有一点自信。
由于我们学院特殊的安排,我们基本所有必修专业课程的学习都在大一和大二修完,大三上半学期有少量的专业选修课程和思政课。大三下整个学期都是要去企业完成 6 个月的实习。了解到很多优秀的学长在大三实习的时候就拿到了非常厉害的 offer 和优厚实习待遇,我当然是非常的心动,希望能够在大三下学期的时候能拿到一个不错的实习岗位。由于我个人是非常不愿意去做测试开发,算法开发的门槛又相对较高,然后就选择了 Java 这个方向。
准备面试
我其实在大二上半学期的时候修了 Java 这门课程,但是学校的 Java 课程是非常老套,和实际企业里的开发是完全脱节。在大三上半学期我当时就在网上找各种 Java 的学习路线,但我发现有很多学习路线看完都是“实力劝退”的感觉,因为内容太多太杂,对于一个想要入门开发的 Javaer 非常不友好。也是机缘巧合,在一个学长(很厉害的一个学长,目前在华科直博)推荐下,了解到 JavaGuide 这个开源项目,从那时起我才算是打开了新世界的大门。学习路线非常清楚,特别对于我们这种初学者的人来说非常友好,知识点的总结也在我后来面试过程帮了大忙。
看到身边的大佬们手拿多个大厂实习 offer 不知道怎么选时,一方面是非常羡慕,另一方面就是觉得自己是在还以前欠下的债,所以大三上整个学期我的压力都是挺大的,边学习 Java 的技术栈边准备面试。前前后后面试的公司有百度、成都 SAP、京东(京东数科)、新浪微博等,最终也算是如愿以偿,马上准备入职京东。
至于我怎么准备的面试?我觉得很重要的一点就是根据自己写的简历和所投递岗位的 JD 有针对性地复习。在简历上最为重要的版块就是项目经历和技能清单这两块,这两部分直接决定了能不能拿到面试资格和面试官怎样提问。所以我当时就遇到了一种窘境,因为我是边学 Java 边面试,项目这部分可写的非常少,基本就没有。
我看过各大公司的招聘需求:Java 开发现在基本都是 SSM、SpringBoot 框架等等,当我学完了这部分之后,我就跟着学校老师那边做了一个 Java 后端的项目把学的框架练习了一遍,写在了简历上,之后我就对项目中的技术点进行复盘。
在当时我确实有着投机的心态,但是必须要有这样一个项目,否则我可能连面试的机会都没有,在参加了多次面试之后我的感受就是:作为实习生,项目这一方面重点在于面试官他要确认你是实实在在地做了,并且有你自己的思考和收获。面试的重点其实是在很多基础的问题上(面试题放在后面),在基础这部分,我反复地复习 JavaGuide 上面的基础知识点,在这里必须感谢 JavaGuide,这可以说直接影响了我在面试中的表现。
面试真题
下面的面试题是来自百度、京东、新浪微博,我进行了一个总结,希望能帮到大家,划重点的部分表示反复被问到
数据结构与算法篇
B 树和 B+树的区别
你了解哪些排序算法?算法的思想、时间复杂度、空间复杂度?
LeetCode 第 1 题及第 15 题:两数之和及三数之和问题
计算机网络篇
- TCP 三次握手、四次挥手流程?为什么三次,为什么四次?
- TCP 和 UDP 区别,有 TCP 为什么还要有 UDP?
- TCP 粘包和拆包问题有了解吗?
- TCP 是怎样保持连接的?
操作系统篇
并发编程中死锁有了解吗?死锁产生的条件是什么?你在项目中是怎样解除避免和解除死锁的?
进程的都有哪些状态?怎么转换的?
Linux 下文件的操作命令
数据库篇
数据库范式了解吗?在你的项目中怎么运用的?会出现什么问题?
数据库索引了解吗?MySQL 中索引底层是怎么实现的?
MySQL 中存储引擎 InnoDB 和 MyISAM 有什么区别?分别用于什么场景?
数据库事务有了解吗?事务的隔离级别?你在项目中使用的隔离级别是什么?
SQL 优化有什么思路?
项目中使用到外键了吗?外键作用?使用外键要注意些什么问题?
除了 MySQL 数据库你还用到哪些数据库?Redis 数据库和 MySQL 数据库的区别?
设计一个数据库表
Java 基础篇
类和对象的区别?
讲讲 static 关键字和 final 关键字
synchronized 关键字是怎么用的?底层实现有了解吗?还有用过其他的锁吗?
BIO、NIO、AIO 区别有哪些?项目中有用到吗?Netty 了解吗?
接口和抽象类的区别?什么时候用接口,什么时候用抽象类?接口可以继承接口吗?
HashMap 和 HashTable 的区别是什么?
ConcurrentHashMap和HashMap的区别是什么?ConcurrentHashMap为什么线程安全?
HashMap 和 HashSet 的区别?HashSet 是如何检查重复的?
Java 中线程的状态?join()、yield()方法是干什么?
Object 类下有哪些方法?
字符串"123"转换成整型123的API是什么?整型123转换成字符串“123”的 API 又是什么?
创建线程有几种方式?分别是怎么做的?
线程池用过吗?如何创建一个线程池?其中各个参数的含义是什么?为什么要用线程池?coreSize?
synchronized、ReentrantLock 区别?
CountDownLatch 和 Semaphore 用过吗?他们的区别是什么?CountDownLatch 应用场景?比如现在要让第 5 个线程等待前 4 个线程执行完毕再执行,具体怎么做?
使用 synchronized 来实现单缓冲区的生产者消费者模型?
JVM 有了解吗?JVM 中参数–Xms和-Xmx是什么意思?
设计模式有了解过哪些?单例设计模式知道哪几种写法?策略设计模式了解吗?你在项目中用到了哪些设计模式?
Spring 中依赖注入有几种方式?怎么做的?
Spring 框架中有哪些组件了解吗?分别做什么的?
SpringMVC 的这种 MVC 模式了解吗?他的工作原理是什么?用到了哪些设计模式?(基本每轮面试都被问到)
SpringMVC 中要接受用户传来的参数要怎么做?REST 的风格呢?
Spring 中 bean 的创建过程了解吗?
SpringBoot 和 SpringMVC 的区别和联系是什么?了解 SpringBoot 的启动流程吗?SpringBoot 自动配置是如何实现的?
总结:其实我们看上面的问题,整体来说还是非常地基础,尤其对于实习生和应届生来说,基础是第一位的,就包括百度和京东的面试官都在面试最后给我强调基础的重要性
写在最后
以前觉得自己还小还早,告诉自己才大一大二,可是当突然把自己推向生活的洪流,我仿佛什么都做不了。有了这段找实习的经历,我觉得自己成长了不少,要勇敢地跳出自己的舒适圈,当自己不知道做什么的时候就去面试,让社会对你进行评价。
在这个过程中,我也眼看着很多好的机会从我身边流走,都是因为自己还不够优秀,虽然现在有幸拿到了实习机会,但我也时刻告诫自己要保持学习,沉淀自己,当有更好的机会来临时我能够抓的住。
在 Java 开发这条路上,我也算是刚刚入门,要学的还很多,作为 JavaGuide 的忠实粉丝,再次感谢 JavaGuide! (Guide 哥故意加粗了一下,开心 😄)
Guide 哥注:生活要继续,学习也要继续。对我而言,JavaGuide 还有太多太多不足的地方,后面的日子会继续完善下去。
五面阿里,终获 offer
前言
在接触 Java 之前我接触的比较多的是硬件方面,用的比较多的语言就是 C 和 C++。到了大三我才正式选择 Java 方向,到目前为止使用 Java 到现在大概有一年多的时间,所以 Java 算不上很好。刚开始投递的时候,实习刚辞职,也没准备笔试面试,很多东西都忘记了。所以,刚开始我并没有直接就投递阿里,毕竟心里还是有一点点小害怕的。于是,我就先投递了几个不算大的公司来练手,就是想着刷刷经验而已或者说是练练手(ps:还是挺对不起那些公司的)。面了一个月其他公司后,我找了我实验室的学长内推我,后面就有了这 5 次面试。
下面简单的说一下我的这 5 次面试:4 次技术面+1 次 HR 面,希望我的经历能对你有所帮助。
一面(技术面)
- 自我介绍(主要讲自己会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
- 聊聊项目(就是一个很普通的分布式商城,自己做了一些改进),让我画了整个项目的架构图,然后针对项目抛了一系列的提高性能的问题,还问了我做项目的过程中遇到了那些问题,如何解决的,差不读就这些吧。
- 可能是我前面说了我会数据库优化,然后面试官就开始问索引、事务隔离级别、悲观锁和乐观锁、索引、ACID、MVVC 这些问题。
- 浏览器输入 URL 发生了什么? TCP 和 UDP 区别? TCP 如何保证传输可靠性?
- 讲下跳表怎么实现的?哈夫曼编码是怎么回事?非递归且不用额外空间(不用栈),如何遍历二叉树
- 后面又问了很多 JVM 方面的问题,比如 Java 内存模型、常见的垃圾回收器、双亲委派模型这些
- 你有什么问题要问吗?
二面(技术面)
- 自我介绍(主要讲自己会的技术细节,项目经验,经历那些就一语带过,后面面试官会问你的)。
- 操作系统的内存管理机制
- 进程和线程的区别
- 说下你对线程安全的理解
- volatile 有什么作用 ,sychronized 和 lock 有什么区别
- ReentrantLock 实现原理
- 用过 CountDownLatch 么?什么场景下用的?
- AQS 底层原理。
- 造成死锁的原因有哪些,如何预防?
- 加锁会带来哪些性能问题。如何解决?
- HashMap、ConcurrentHashMap 源码。HashMap 是线程安全的吗?Hashtable 呢?ConcurrentHashMap 有了解吗?
- 是否可以实习?
- 你有什么问题要问吗?
三面(技术面)
- 有没有参加过 ACM 或者他竞赛,有没有拿过什么奖?( 我说我没参加过 ACM,本科参加过数学建模竞赛,名次并不好,没拿过什么奖。面试官好像有点失望,然后我又赶紧补充说我和老师一起做过一个项目,目前已经投入使用。面试官还比较感兴趣,后面又和他聊了一下这个项目。)
- 研究生期间,做过什么项目,发过论文吗?有什么成果吗?
- 你觉得你有什么优点和缺点?你觉得你相比于那些比你更优秀的人欠缺什么?
- 有读过什么源码吗?(我说我读过 Java 集合框架和 Netty 的,面试官说 Java 集合前几面一定问的差不多,就不问了,然后就问我 Netty 的,我当时很慌啊!)
- 介绍一下自己对 Netty 的认识,为什么要用。说说业务中,Netty 的使用场景。什么是 TCP 粘包/拆包,解决办法。Netty 线程模型。Dubbo 在使用 Netty 作为网络通讯时候是如何避免粘包与半包问题?讲讲 Netty 的零拷贝?巴拉巴拉问了好多,我记得有好几个我都没回答上来,心里想着凉凉了啊。
- 用到了那些开源技术、在开源领域做过贡献吗?
- 常见的排序算法及其复杂度,现场写了快排。
- 红黑树,B 树的一些问题。
- 讲讲算法及数据结构在实习项目中的用处。
- 自己的未来规划(就简单描述了一下自己未来的设想啊,说的还挺诚恳,面试官好像还挺满意的)
- 你有什么问题要问吗?
四面(半个技术面)
三面面完当天,晚上 9 点接到面试电话,感觉像是部门或者项目主管。 这个和之前的面试不大相同,感觉面试官主要考察的是你解决问题的能力、学习能力和团队协作能力。
- 让我讲一个自己觉得最不错的项目。然后就巴拉巴拉的聊,我记得主要是问了项目是如何进行协作的、遇到问题是如何解决的、与他人发生冲突是如何解决的这些。感觉聊了挺久。
- 出现 OOM 后你会怎么排查问题?
- 自己平时是如何学习新技术的?除了 Java 还回去了解其他技术吗?
- 上一段实习经历的收获。
- NginX 如何做负载均衡、常见的负载均衡算法有哪些、一致性哈希的一致性是什么意思、一致性哈希是如何做哈希的
- 你有什么问题问我吗?
- 还有一些其他的,想不起来了,感觉这一面不是偏向技术来问。
五面(HR 面)
- 自我介绍(主要讲能突出自己的经历,会的编程技术一语带过)。
- 你觉得你有什么优点和缺点?如何克服这些缺点?
- 说一件大学里你自己比较有成就感的一件事情,为此付出了那些努力。
- 你前面跟其他面试官讲过一些你做的项目吧?可以给我讲讲吗?你要考虑到我不是一个做技术的人,怎么让我也听得懂。项目中有什么问题,你怎么解决的?你最大的收获是什么?
- 你目前有面试过其他公司吗?如果让你选,这些公司和阿里,你选哪个?(送分题,回答不好可能送命)
- 你期望的工作地点是哪里?
- 你有什么问题吗?
总结
- 可以看出面试官问我的很多问题都是比较常见的问题,所以记得一定要提前准备,还要深入准备,不要回答的太皮毛。很多时候一个问题可能会牵扯出很多问题,遇到不会的问题不要慌,冷静分析,如果你真的回答不上来,也不要担心自己是不是就要挂了,很可能这个问题本身就比较难。
- 表达能力和沟通能力太重要了,一定要提前练一下,我自身就是一个不太会说话的人,所以,面试前我对于自我介绍、项目介绍和一些常见问题都在脑子里练了好久,确保面试的时候能够很清晰和简洁的说出来。
- 等待面试的过程和面试的过程真的好熬人,那段时间我压力也比较大,好在我私下找到学长聊了很多,心情也好了很多。
- 面试之后及时总结,面的好的话,不要得意,尽快准备下一场面试吧!
我觉得我还算是比较幸运的,最后也祝大家都能获得心仪的 Offer。
2021 华为|字节|腾讯|京东|网易|滴滴面经分享(6个offer)
本文是一位读者的面经分享。希望这篇文章的内容可以对小伙伴们有帮助!
每个人成功的经历都不可复制, 我们可以借鉴吸收别人的经验为己所用。
另外,把自己上岸的经历分享出来是一件非常棒的事情,我在这里实名为这位读者点个赞👍
个人介绍
目前大三,本科就读于电子科技大学。
我在大一进入学校实验室学习,负责数据收集、日常开发、NLP。用到的技术包括:
- 语言:Java、Python
- 技术:
- 爬虫:协程、异步OI、正则表达式
- 后端:SpringBoot、MyBatis、MySQL
- 前端:HTML、CSS、JavaScript、BootStrap
- 深度学习:Pytorch、Keras
在实验室接触的比较广泛,不过感觉不够深入,于是在大二下开始深入后端技术。
我在大二下开始做了些开源项目并深入Java相关技术,深入学习了: Java核心技术、Java虚拟机、Java并发编程、设计模式、MySQL、Spring、SpringBoot、Mybatis。
在大三上期,11月开始准备Java实习相关事务:
一个月的面试后,陆续拿到了字节,网易、京东、滴滴、腾讯和某区块链公司的6个实习offer。
复习经历
因为之前就深入学习过,所以总的复习时间也不长,大概是一周左右,后面是通过边面试边查漏补缺的方式来补短板。
前两天的复习内容:
Java基础
面向对象特性:封装,多态(动态绑定,向上转型),继承
泛型,类型擦除
反射,原理,优缺点
static,final 关键字
String,StringBuffer,StringBuilder底层区别
BIO、NIO、AIO
Object 类的方法
自动拆箱和自动装箱
Java集合框架
List :ArrayList、LinkedList、Vector、CopyOnWriteArrayList
Set:HashSet、TreeSet、LinkedHashSet
Queue:PriorityQueue
Map:HashMap,TreeMap,LinkedHashMap
fast-fail,fast-safe机制
源码分析(底层数据结构,插入、扩容过程)、线程安全。
Java虚拟机
- 类加载机制、双亲委派模式、3种类加载器(BootStrapClassLoader,ExtensionClassLoader,ApplicationClassLoader)
- 运行时内存分区(PC,Java虚拟机栈,本地方法栈,堆,方法区(永久代,元空间))
- JMM:Java内存模型
- 引用计数、可达性分析
- 垃圾回收算法:标记-清除,标记-整理,复制
- 垃圾回收器:比较,区别(Serial,ParNew,Parallel Scavenge ,CMS,G1)Stop The World
- 强、软、弱、虚引用
- 内存溢出、内存泄漏排查
- JVM调优,常用命令
Java并发
三种线程初始化方法(Thread、Callable,Runnable)区别
线程池(ThreadPoolExecutor,7大参数,原理,四种拒绝策略,四个变型:Fixed,Single,Cached,Scheduled)
有界、无界任务队列,手写BlockingQueue。
乐观锁:CAS(优缺点,ABA问题,DCAS)
悲观锁:
Synchronized:
使用:方法(静态,一般方法),代码块(this,ClassName.class)
1.6优化:锁粗化,锁消除,自适应自旋锁,偏向锁,轻量级锁
锁升级的过程和细节:无锁->偏向锁->轻量级锁->重量级锁(不可逆)
重量级锁的原理(monitor对象,monitorenter,monitorexit)
ReentrantLock:和Synchronized区别?(公平锁、非公平锁、可中断锁....)、原理、用法
ThreadLocal :底层数据结构:ThreadLocalMap、原理、应用场景。
Atomic 类(原理,应用场景)
AQS:原理、Semaphore、CountDownLatch、CyclicBarrier
Volatile:原理:有序性,可见性
第三天的复习内容:
MySQL
- 架构:Server层,引擎层(缓存,连接器,分析器,优化器,处理器)
- 引擎:InnoDB,MyISAM,Memory区别
- 聚簇索引,非聚簇索引区别(从二叉平衡搜索树复习(AVL,红黑树)到B树,最后B+树)
- MySQL、SQL优化方法
- 覆盖索引,最左前缀匹配
- 当前读,快照读
- MVCC原理(事务ID,隐藏字段,Undo,ReadView)
- Gap Lock、Next-Key Lock、Record Lock
- 三大范式
SQL
- 常用SQL
- 连接:自连接,内连接(等值,非等值,自然连接),外连接(左,右,全)
- Group BY 和 Having
- Explain
第四天的复习内容:
Spring
- AOP原理(JDK动态代理,CGLIB动态代理)和 IOC原理
- Spring Bean生命周期
- SpringMVC 原理
- SpringBoot常用注解
设计模式
- 三种类型:创建、结构、行为
- 单例模式:饿汉,懒汉,DCL
- 简单工厂,工厂方法,抽象工厂
- 代理模式
- 装饰器模式
- 观察者模式
- 策略模式
- 迭代器模式
- ....
第五天的复习内容:
计算机网络
- OSI模型、TCP/IP模型
- TCP和UDP区别
- TCP可靠性传输原理:重传、流量控制、拥塞控制、序列号与确认应达号、校验和
- 三次握手、四次挥手过程、原理
- timewait、closewait
- HTTP
- 报文格式
- 1.0 1.1 2.0
- 状态码
- 无状态解决(Cookie Session原理)
- HTTPS
- CA证书
- 对称加密
- 非对称加密
- DNS解析过程,原理
- IP协议、ICMP协议(Ping、Tracert)、ARP协议、路由协议
- 攻击手段与防范:XSS、CSRF、SQL注入、DOS、DDOS
第六天的复习内容:
操作系统
- 进程、线程和协程区别
- 进程通信方式(管道,消息队列,共享内存,信号,信号量,socket)
- 进程调度算法(先来先服务,短作业优先,时间片轮换,多级反馈队列,优先级调度)
- 内存管理:分页(页面置换算法:手写LRU)、分段、虚拟内存
第七天和以后的复习内容:
每天做点刷算法题(剑指offer、LeetCode 面试Hot题) +查漏补缺。
字节跳动
第一面
自我介绍,介绍项目
协程、线程、进程区别
手写LRU(要求用泛型写)、手写DCL
DNS解析过程
输入一个URL到浏览器,整体流程
谈谈Java虚拟机你的认识?垃圾回收算法?垃圾回收器
知道哪些Java的锁?CAS的缺点?
第二面
自我介绍、介绍项目
手写最大堆
设计模式了解吗?几大类型?谈谈工厂模式?
谈一下Java集合框架?HashMap线程安全的吗?会出现什么问题?
说说MySQL的架构?
InnoDB和MyISAM区别?
知道聚簇索引和非聚簇索引吗?B树和B+树区别?
一道LeetCode难问题:接雨水(动态规划解决)
第三面
自我介绍、介绍开源项目
线程池了解吗?原理?可以写个BlockingQueue吗?
说说fast-fail和fast-safe?
了解死锁吗?怎么解决?
进程间通信方式?哪种最高效?
说说MYSQL优化策略?
说了一下部门介绍,主要业务,说可能会转GO等等
第四面(HR)
介绍自己
团队怎么协作?有没有矛盾?怎么解决的?
入职时间?实习多久?
华为
第一面
- 自我介绍
- 谈项目(谈了很久)
- HTTP 的无状态怎么解决?(Cookie Session)
- TCP如何保证可靠性传输?(校验和,序列号和确认应答号,重传,流量控制,拥塞控制)
- ARP过程?
- 进程调度算法?
- 一道动态规划题目:不同路径
第二面
自我介绍
谈项目(你觉得收获最大的项目)
谈谈Spring AOP 和 IOC
谈谈你知道的MySQL所有内容
手写个归并排序
谈谈你对分布式系统的认识?
谈谈你对华为的认识?华为的文化和价值观?
HR
技术面试都通过了,问HR怎么样,说应该没问题,等了一星期offer,最后发offer的时候,HR说我的性格测试没通过,Offer审批不下来,人傻了。因为华为在成都,字节在北京,而且技术官的意向是很稳能进华为,我想着在家近的地方实习,在等待的一周中就把字节拒了,最后华为没发到offer,直接架空,崩溃!第一次找实习没太多经验,策略不对,心里很难受,不过调整了一下,继续了新的面试
网易
第一面
自我介绍
介绍一个对自己影响深刻的项目
说说进程间调度的算法
说说匿名函数
说说协程、线程、进程。
你对游戏引擎了解多少?
手写地杰斯特拉算法?
了解A*算法吗?
说说Python和Java的区别?
Java是怎么进行垃圾回收的?
然后聊了很多生活上的问题,非技术问题。
第二面
自我介绍
介绍项目
说说深度优先搜索算法、回溯算法
一道算法题:一个走迷宫问题,DFS+回溯解决。
你对C熟悉吗?Lua使用过吗?
介绍业务,主要工作内容。
HR面
自我介绍
介绍一个项目中遇到的问题,怎么解决的?
介绍一下博客?开源项目?为什么花时间做这些?
大学最成功的一件事?
滴滴
第一面
自我介绍、介绍项目
Java面向对象的三大特性?
了解Java哪些锁?Synchronized优化内容?锁升级过程?
谈谈Java虚拟机?类加载机制?
知道双亲委派模式吗?有什么好处?
Java运行时内存分区?
死锁了解吗?如何解决?
哪些对象可以作为GC ROOTS?
了解的设计模式?手写一下DCL吧
第二面
自我介绍
介绍项目(难点以及怎么解决的?)
谈谈MySQL的各种引擎?
覆盖索引和非覆盖索引区别?
MYSQL优化方法有哪些?
讲讲HashMap的原理,put过程?resize过程?线程安全吗?死循环问题?
了解什么中间件吗?
讲讲Java里面的锁?
一道算法题:最长公共子串
HR面
自我介绍
到岗时间
自己的优势
大学最失败的一件事
对加班的看法
京东
第一面
自我介绍
谈项目
TCP如何保证可靠传输?拥塞控制算法?
讲讲Spring的AOP?
SpringBoot常用哪些注解?
谈谈Java虚拟机?
垃圾回收算法有哪些?
了解哪些垃圾回收器?讲一下CMS垃圾回收过程
算法题:
a. 两个栈实现队列
b. 最近公共祖先节点
第二面
自我介绍
讲讲Java集合框架,HashMap原理。
知道哪些锁?
谈谈公平锁和非公平锁?
Synchronized和ReentrantLock区别
MySQL的索引为什么快?有哪些索引?原理数据结构?
MySQL有哪些优化的策略?
死锁了解吗?
ThreadLocal了解吗?原理?
手写一个堆排序。
一道算法题:完全平方数(动态规划)
HR面
自我介绍
多久可以到岗?实习时间?
对加班看法?
如何团队分工的?
腾讯
第一面
自我介绍
介绍项目
说说协程和线程区别?
Java虚拟机的作用?垃圾回收的过程?
了解的垃圾回收器?
手写快排
算法题:按K位反转链表
一百亿个数,n个机器,怎么排序?(桶排序)
第二面
自我介绍
介绍项目
TCP和UDP区别?如何保证可靠性?
HTTP的状态码记得哪些?
ICMP是哪层的?有什么用?
会哪些框架?
Spring的AOP认识?
MySQL InnoDB和MyISAM区别?
谈谈各种索引?为什么用B+树不用B树?
死锁的条件?如何解决?
OOM怎么排查?
介绍业务
HR面
自我介绍
多久能来实习?实习多久?
加班看法?
看你掌握技术挺多,如何快速学习一个技术的?
总结
因为之前学的也比较深入,复习时间也没用太多,主要就是写点算法题保持手感。
面试中遇到的问题,9成都已经复习了,而且也比较基础,也都在掌握之中。
像中间件、微服务这些我没写在简历上,不是很会,面试官也不会刻意刁难你,实习的话,感觉大厂可能更注重基础和对知识的深入度,面试了一个月收货还是挺多的,希望总结一下面经,帮到更多的人~
准备大厂面试的话,注重基础,多练算法题,基本上就没问题了!加油!
2021 虾皮,网易云,京东,阿里校招面经!附参考答案
虾皮 sg 三轮面经(通过)
一面(2021.7.8)
【项目】介绍下百度的实习经历
用户登录密码存储,哈希和加盐的过程是在前端还是后端
浏览器输入 URL 过程
tcp 连接建立过程
http 与 https 的区别
【项目】介绍下分片降低 redis 热键访问压力
写 db 数据如何同步到 cache
cache key 失效后大量流量请求 db 如何处理(数据存在于 db 种)
【项目】介绍下数据库慢查询的优化
MySQL 索引默认数据结构
B+树相对 B 树优点
MySQL 里的主键,外键以及组合索引分别在什么场景下使用
为什么实际项目里建议不用外键
【设计题】根据查询场景设计索引
常见的用来计算哈希的方法
如何解决哈希冲突
【算法题】实现 LRU cache
【算法题】给定数字 N,打印 1~N 中心螺旋矩阵
参考答案 :
如何加密传输和存储用户密码 : https://zhuanlan.zhihu.com/p/36603247
HTTP vs HTTPS(应用层):https://javaguide.cn/cs-basics/network/http&https.html
计算机网络常见知识点&面试题(补充):https://javaguide.cn/cs-basics/network/other-network-questions.html
安全系列之——主流 Hash 散列算法介绍和使用:https://cloud.tencent.com/developer/news/682510
Redis 知识点&面试题总结:https://javaguide.cn/database/redis/redis-questions-01.html
MySQL 知识点&面试题总结 : https://javaguide.cn/database/mysql/mysql-questions-01.html
如何在 Java 中实现 LRU 缓存 :https://www.baeldung.com/java-lru-cache
二面(2021.7.16)
团队介绍
自我介绍
印象最深刻的项目
redis 的 zset 数据结构
加盐的目的
重放指的是什么
介绍下彩虹表,彩虹表为什么叫彩虹表
用户登录状态怎么保持
https 为什么需要证书
加盐过程,盐如何存储
实现一个向用户展示商品历史价格的网站,
百万级别商品,爬虫脚本怎么解决
什么样的分布式方案
布隆过滤器原理
用户量增大,如何提升系统容量
消息队列作用
loadbalancer 如何实现分布式
缓存如何实现分布式
哈希如何减少重哈希代价
如何分析热键
增强 db 能力的方案
网站会面临的安全问题
介绍下 csrf,攻击者如何拿到用户身份,csrf 预防方法,csrf token 如何实现无法伪造
如何应对 shopee 钓鱼网站
为什么选 sg shopee,国内与 sg 的倾向,有通过渠道了解过 sg 吗
字节与百度工作方式的区别,眼下喜欢哪一种
反问环节
参考答案(部分参考答案和一面中的重合了,这里就不多放一编了):
- 什么是彩虹表?:https://www.zhihu.com/question/19790488 、密码破解的利器——彩虹表(rainbow table):https://www.jianshu.com/p/732d9d960411
- TikTok 三面:“聊聊 TCP/IP 常见的攻击手段”:https://mp.weixin.qq.com/s/U8S8IEb_rH5FHUKvoBJCUg
- 消息队列知识点&面试题总结 : https://javaguide.cn/high-performance/message-queue/message-queue.html
- 布隆过滤器:https://javaguide.cn/cs-basics/data-structure/bloom-filter/
- 谈谈 redis 的热 key 问题如何解决:https://www.cnblogs.com/rjzheng/p/10874537.html、如何快速定位 Redis 热 key:https://www.infoq.cn/article/3l3zaq4h8xpnom2glsyi
HR 面(2021.7.26)
英文自我介绍
为什么投递 shopee 职位
为什么选择 sg
sg 介绍
反问环节
网易云音乐三轮后端(通过)
一面(2021.8.30)
自我介绍
【项目】实习项目在技术架构上,除了语言的差别,还有哪些更深入的差异
【项目】选择一个实习项目,介绍下具体做的事情
【项目】随着活动事件越来越多,如何从后端进行设计上的优化
使用 mq 对业务进行异步解耦之后,在消息消费上有哪些需要注意的点
【项目】在发放奖励场景下,如何保证消费的幂等性
【redis】有了解过 redis 集群如何部署的吗
【redis】用 redis 如何实现分布式锁
【redis】zset 实现原理是什么
【redis】跳表优化的理念是什么
【redis】为什么采用跳表,而不使用哈希表或平衡树实现呢?
【redis】在数据量比较小时,跳表相较其他数据结构的缺点是什么
【项目】数据库是单节点还是分布式的,有做分库分表吗
【项目】在你的业务场景下,是怎么进行分库分表的?
【分库分表】在查询分库分表的数据时,没有带分库分表的 key,底层查询是怎么样的,对性能有影响吗
【分库分表】分库分表下 ID 全局唯一是如何做的?
【MySQL】MySQL 联合索引查询时需要注意哪些问题
【MySQL】从数据结构角度分析为何需要最左匹配原则
【项目】有性能优化案例吗
【IO】BIO 和 NIO 的区别是什么
【JVM】java gc 算法了解哪些
【JVM】可达性分析里哪些对象可以作为 gc root
【JVM】类的 static 变量时 gc root 吗,一个普通 map 对象的 key,value 可以被回收吗
【JVM】想要 map 里的 value 在 gc 时可以被及时回收,应该对 map 做什么样的改造呢
【多线程】java 多线程下的变量可见性有什么解决方案
【多线程】阻塞队列里锁的如何实现的,设计阻塞队列时,主要阻塞在哪些操作上
【多线程】线程安全的数组和链表有哪些
【网络】tcp 协议的连接、断开过程
【网络】挥手时为什么需要等待 2 倍 MSL
反问环节
参考答案 :
- Redis 知识点&面试题总结:https://javaguide.cn/database/redis/redis-questions-01.html
- 【Redis】拼多多面试官问我 zset 底层是如何实现的,我反手就把跳表的数据结构画了出来:https://segmentfault.com/a/1190000037473381
- 为啥 redis 使用跳表(skiplist)而不是使用 red-black?:https://www.zhihu.com/question/20202931
- 分布式 ID:https://javaguide.cn/distributed-system/distributed-id.html
- 读写分离&分库分表:https://javaguide.cn/high-performance/read-and-write-separation-and-library-subtable.html
- MySQL 知识点&面试题总结:https://javaguide.cn/database/mysql/mysql-questions-01.html
- JVM 垃圾回收详解:https://javaguide.cn/java/jvm/jvm-garbage-collection.html
- Java 并发常见知识点&面试题总结(进阶篇):https://javaguide.cn/java/concurrent/java-concurrent-questions-02.html
- JDK 提供的并发容器总结:https://javaguide.cn/java/concurrent/java-concurrent-collections.html
- 「为什么这么设计系列」为什么 TCP 建立连接需要三次握手:https://draveness.me/whys-the-design-tcp-three-way-handshake/
- 用 Java 如何设计一个阻塞队列,然后说说 ArrayBlockingQueue 和 LinkedBlockingQueue:https://www.cnblogs.com/jimoer/p/14887921.html
二面(2021.9.4)
自我介绍
哪个实习项目成长比较大
【项目】实习项目里主要做了哪些的工作
【项目】了解任务系统等项目相关信息
【项目】项目中最大的难点是什么
【项目】如何保证缓存和数据库的一致性
【项目】分布式锁是怎么用的
【分布式锁】如果需要一个严格的分布式锁,需要怎么做
【分布式锁】如何处理分布式锁因为超时被提前释放的问题
【设计题】高并发场景下评论点赞功能的设计(点赞数量须持久化到 db)
反问环节
参考答案 :
- 拜托,面试请不要再问我 Redis 分布式锁的实现原理!【石杉的架构笔记】:https://juejin.im/post/5bf3f15851882526a643e207
- 微博架构组面试:类微博点赞系统设计:https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247505978&idx=2&sn=d9190cb5345c5798a07d460811d51c74&chksm=cea197f1f9d61ee772de9c02f2b04f432b4493078152c67626c7bccb48b5ca31b17ca4ec6412&token=1069133552&lang=zh_CN#rd
HR 面(2021.9.8)
自我介绍
base 地偏好
还有哪些公司在面试中,面试进展
有什么爱好或热爱
未来职业规划
为什么选择互联网
求职过程中在团队或工作氛围上有什么样的想法
平时有使用过网易云音乐产品吗
平时在什么场景下使用到我们的产品
听歌听哪种风格多一点
了解乡村音乐吗
基于哪些维度对面试公司做出最终的选择
期望第一年的收入达到什么范围
反问环节
京东后端三轮面经(通过)
一面 (2021.7.28)
自我介绍
【项目】收获最大的项目,两个项目有什么不一样,自己承担什么角色,实现哪些内容
【项目】项目为什么引入 etcd
【Java 基础】Java 中的==和 equals 区别
【Java 基础】hashmap 的实现原理、1.8 之后的改变
【Java 基础】接口和抽象类的区别
【Java 基础】可变长参数
【Java 新特性】java8 有哪些新特性
【Java 多线程】介绍下 ThreadLocal 和使用场景
【JVM】jvm 优化工具
【设计模式】简单工厂和抽象工厂的区别
【设计模式】熟悉的设计模式有哪些
【设计模式】优化 if-else 方法
【MySQL】MySQL 里行锁和表锁及其特性
【MySQL】介绍乐观锁、悲观锁、重入锁、排他锁
对方屏幕共享项目中一个源文件,找代码里的优缺点(单例实现的策略模式)
【算法题】递归实现单链表反转
反问环节
参考答案 :
- Java 基础知识&面试题总结: https://javaguide.cn/java/basis/java-basic-questions-01.html
- 接口和抽象类有什么区别?:https://www.zhihu.com/question/20149818
- Java 集合框架基础知识&面试题总结: https://javaguide.cn/java/collection/java-collection-questions-01.html
- Java 并发常见知识点&面试题总结(进阶篇):https://javaguide.cn/java/concurrent/java-concurrent-questions-02.html
- 设计模式之工厂模式(factory pattern):https://www.cnblogs.com/yssjun/p/11102162.html
- 设计模式总结 :https://www.cnblogs.com/chenssy/p/3357683.html
- 条件语句的多层嵌套问题优化:https://mp.weixin.qq.com/s/7i-TPFovLwrSmbWaIiX8dQ
- MySQL 锁:灵魂七拷问 :https://tech.youzan.com/seven-questions-about-the-lock-of-mysql/、通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其 Java 实现!:https://zhuanlan.zhihu.com/p/71156910
二面(2021.8.5)
自我介绍
字节和有取向吗
【项目】介绍下 redis 在项目中是怎么使用的?
【项目】介绍下 redis 分布式锁项目中有什么作用?怎么实现的?
【MySQL】MySQL 优化的方法
【Java 多线程】介绍下 ThreadLocal 的原理和使用场景
【Java 基础】equals 和 hashcode 区别
【Java 基础】java 的基本类型和空间大小
【Spring Boot】Spring Boot 自动装配原理
【Java 基础】Java I/O 流有用过吗
【设计模式】软件设计原则有哪些?
【设计模式】介绍下模板方法
【设计模式】装饰器模式
找工作的标准
像从事的方向偏业务还是偏底层框架
反问环节
参考答案 :
- MySQL 高性能优化规范建议:https://javaguide.cn/database/mysql/mysql-high-performance-optimization-specification-recommendations.html
- Java 基础知识&面试题总结: https://javaguide.cn/java/basis/java-basic-questions-01.html
- Java 并发常见知识点&面试题总结(进阶篇):https://javaguide.cn/java/concurrent/java-concurrent-questions-02.html
- Spring Boot 自动装配原理:https://javaguide.cn/system-design/framework/spring/spring-boot-auto-assembly-principles.html
- 设计模式总结 :https://www.cnblogs.com/chenssy/p/3357683.html
阿里巴巴后端面经(通过)
【cto线-业务平台事业部】一面(2021.8.11)
【闲聊】去年为什么没有接实习offer
【闲聊】为什么没有选择直接去字节和百度?两家公司感觉有什么区别?
【闲聊】对阿里的印象怎么样
【项目】介绍下你在百度实习做的项目,做这个项目过程中有什么难点
【项目】讲讲你对依赖倒置原则的理解,你是如何基于这个原则来重构项目代码的?
【项目】如何保证重构不会影响正常的业务?
【项目】单测的覆盖率有多少?
【编程语言】Go 跟 Java 的区别在哪?为什么Docker/Kubernetes们选择Go?
【编程语言】协程和线程有什么区别
【项目】简单说下单点登录的实现
【认证授权】如果 Cookie 禁用的话如何解决?Cookie 和 Session 有什么区别?
【认证授权】什么是 Token?什么是 JWT??如何解决token方案无法主动过期的问题?
【认证授权】RBAC 模型了解吗?
【多线程】Java线程池的原理
【JVM】jvm的内存区域?
【JVM】垃圾收集算法有哪些?如何判断一个对象是否已经死亡?
【设计模式】设计模式了解哪些
参考答案 :
- 再读《重构》- ThoughtWorks 洞见:https://insights.thoughtworks.cn/reread-refactoring/
- 单元测试到底是什么?应该怎么做? - 腾讯技术工程的回答 - 知乎 :https://www.zhihu.com/question/28729261/answer/1058317111
- 为什么Docker/Kubernetes们选择Go?:https://zhuanlan.zhihu.com/p/446697672
- Go 面试官:什么是协程,协程和线程的区别和联系?:https://segmentfault.com/a/1190000040373756
- JWT 身份认证优缺点分析以及常见问题解决方案:https://javaguide.cn/system-design/security/advantages&disadvantages-of-jwt.html
- 认证授权基础:https://javaguide.cn/system-design/security/basis-of-authority-certification.html
- Java线程池学习总结: https://javaguide.cn/java/concurrent/java-thread-pool-summary.html
- Java 内存区域详解:https://javaguide.cn/java/jvm/memory-area.html
- JVM 垃圾回收详解:https://javaguide.cn/java/jvm/jvm-garbage-collection.html
- 设计模式总结 :https://www.cnblogs.com/chenssy/p/3357683.html
【cto线-业务平台事业部】二面(2021.8.20)
【闲聊】自我介绍
【闲聊】学校里有无发表过论文、专利或者参加过竞赛
【闲聊】百度、字节有没有给offer?还有其他offer吗?
【项目】百度项目的业务效果怎么样、QPS怎么样?
【项目】介绍下用户邀请分享的实现?
【JVM】jvm内存分为哪几个区域,哪些是线程私有的,哪些是线程共享的
【Java基础】ClassNotFound 与 NoClassDefinedError 有什么区别
【多线程】能说下什么是CAS吗?什么是 ABA 问题?ABA 问题怎么解决?
【MySQL】MySQL数据库的索引为什么使用B+树而不是B树
【Redis】Redis中有哪些数据结构?为啥 redis 使用跳表(skiplist)而不是使用红黑树?
【Redis】有没有遇到过缓存被击穿的情况
【算法题】leetcode 1478. 安排邮筒
参考答案 :
- ClassNotFoundException 和 NoClassDefFoundError 的区别:https://cloud.tencent.com/developer/article/1153789
- 如何理解ABA问题:https://elsef.com/2020/03/08/如何理解ABA问题/
- AQS 原理以及 AQS 同步组件总结:https://javaguide.cn/java/concurrent/aqs.html
- 深入理解 MySQL 索引底层原理:https://zhuanlan.zhihu.com/p/113917726
- Redis 知识点&面试题总结 :https://javaguide.cn/database/redis/redis-questions-01.html
- 为啥 redis 使用跳表(skiplist)而不是使用红黑树?:https://www.zhihu.com/question/20202931
【cto线-零售云事业部】终面(2021.9.18)
(流程转到该部门)
【闲聊】自我介绍
【实习】百度实习团队规模,项目流量怎么样
【项目】采用哪些方法应对高并发流量
【项目】配置缓存的时候有哪些考虑,哪些数据放哪些不放入缓存
(HR入会)介绍/宣传部门业务
反问环节