春招暑期实习面经
春招暑期实习面经
之前就想去大厂感受一下了,现在终于有了这个机会,花了大概一个月吧,春招也算圆满结束了,从开始一个什么都不懂的小白,到问学长、刷牛客、刷LeetCode、刷八股、问导员也算有所收获,期间也焦虑过,特别是在COVID era,各种机会都在变少,整个社会都在变卷,初期也因为简历没人睬焦虑到天亮过,后期也因为收到第一封offer兴奋到天亮过
总之想写个面经记录一下自己的春招,主要还是给未来的自己看
实习招聘流程和"术语"
投简历->HR初筛简历->对应技术部门二筛简历->笔试(有的厂如果简历优秀可以免笔试)->技术一面->技术二面->技术三面(有的厂没有)->HR面(有的厂没有)->ranking->OC->offer
HR(Human resource)
:人力资源部门,主要负责简历初筛,以及最后一面HR面,还有OC时的沟通(薪资福利待遇等),以及招聘过程中与候选人的联系,包括但不限于:面试时间的安排与协调、帮候选人催面试流程
BU(Business Unit)
:业务部门,比如字节可以分成不同的部门抖音,头条,飞书,教育业务等部门,当然对应的部门下面有不同的岗位:前端、后端、客户端等
BP(Business Partner)
:人力资源业务合作伙伴,可以理解为比该部门对应HR更高的官,HR想要加快流程需要催BP
hc(head count)
:人头数,公司每个招聘季会分给对应部门相应的预计招聘的名额,一般来说发出的offer数<=hc,否则可能会出现即使发出offer到时候公司方面仍然毁约的情况(常见于正式员工,对,说的就是某里),暑期实习一般来说不会出现此情况
ranking
:排序,所有面试结束后如果没挂,会入池,公司对应部门没过一段时间会从优先队列里面poll出对应的人数发offer,具体优先级由所有面试过程的表现决定
面评
:每一次面试后,面试官都会给当次面试过程,特别是你的表现进行相应的记录,所以说如果没准备好尽量先准备,一旦面评很差后面基本很难搞了,甚至会影响到秋招以及来年的春招
OC(offer call)
:如果被从池子里选出来,就会收到hr打来的电话,协商入职时间、薪资、福利待遇等相关事宜
offer
:OC过后会正式发放offer,一旦收到offer基本稳了,剩下的就是考虑接受与否的问题,这时候ranking的权力就给到了候选人(毕竟是双选的过程)
kpi面(Key Performance Indicators)
:关键绩效指标,一般来说大厂里面对于每个部门每个员工都是由面试过的人头数的要求的,一般如果遇到KPI面,面试官会表现得很随意,比如不问技术问生活,交流意愿低,甚至开始PUA面试者,一般来说不开摄像头是KPI面的必要但不充分条件,自己心理清楚就好
如果确认并且想发泄可以在最后强行进入反问阶段(因为一般来说此时面试官想早早结束 不会提供反问阶段),可以问的问题有:
- 先简单的做个自我介绍吧
- 你的日常工作是什么样的?
- 有没有被领导骂过?
- 有没有自我怀疑、自卑过?
- 你们部门主要做什么?要详细的说!
Java后端必备知识
刷题
Leetcode我只刷了170+个,建议
- 先刷剑指(专项训练):建立一下框架,真的很推荐专项训练,他把不同的题放在了一起,精刷每一题,看时间/空间复杂度怎么优化,还可以去买剑指对应的书,上面会有些评论区没有人提到的思想内核,能理解这个比做10道类似的题更强
- 刷面经里的手撕题:牛客上会有对应公司的面经,看看别人手撕代码撕的是什么题,自己在15min内能否做出
- 图论的题建议不用刷太多:因为个人感觉图论比较死,搞来搞去就是那几个知识点,手撕的时候一般不会有(我没遇到),如果有就直接套模板(
别忘了装作自己思考了的样子和表情管理)
八股
八股在网上已经有很多资源了,基本上牛客网都能搜到前辈们分享的八股,看的时候注意理解与实操,在掌握java的时候多看源码,特别是容器、多线程的底层源码,如果面试的时候能说我知道他底层源码是什么样的可以加很多分,如果还能说出自己具体在什么场景什么地方用到过,自己对他的独特理解就能加更多分
另外看八股文不是原模原样的背,而是理解,能自己组织语言说出大概意思就好,如果死记硬只会显得你并没有理解,并且还会浪费很多时间
比方说如果面试官问线程和进程能讲讲嘛?这个时候说出基本概念是必须的,之后如果你能说出为什么会有线程和进程,为什么这么设计,有什么好处,两者的区别、优缺点,什么时候用什么更好,甚至你还可以引导面试官,比如这个问题答完最后问:"线程和进程的调度算法以及他是怎么调度、切换的需要讲讲嘛?"在这个问题上肯定就是满分了
需要重点掌握的
java、MySQL、计网、操作系统
需要了解的
体系结构、分布式、缓存、并发编程
设计模式(推荐一个网站https://refactoringguru.cn/design-patterns/book)
这个网站介绍了22种主流的设计模式,并且每种都有伪代码和类图,此外还有可爱的小动物等图片说明,短时间了解必备
不同大厂的面经
Tips
一定要把自己的项目重新润色,放到github上,写好说明文档,说实话由于是在校生,公司对于Spring这些框架,还有Redis,Kafka这些要求还是很低的,当然如果掌握了可以加分,可以写上简历,如果写上了但不会这就属于简历欺骗了,一旦问到只能自求多福了
注意笔试的时候敲定一种语言,可能有同学对多种语言都了解,但都不是太熟悉,比如Python写起来就很快,Java运行时间很短,还被归到其他语言里(非C/Cpp),可以说是好事占尽
我初期做笔试就处于摇摆阶段,有时候可能因为对语言不够了解出Bug,然后实在找不出来换另一种语言写,导致一个题可能要写两遍
然后注意大厂一般选择牛客网笔试,一般是ACM模式,需要自己处理输入输出,对于卡IO的题,Java可以通过BufferedReader,BufferedWriter解决,还有就是所有输入你必须全部读入,如果有一行没读入,基本RE,最恶心的是还不知道是因为没读完导致的RE(有的题最后几行可能不用读就能判断出来结果),刚从leetcode核心代码模式切过来是很不适应的
面试阶段没啥好说的,多面面,不要怯场,自信点,注意交流很重要!当然前期可能过不过要看面试官心情,后期的话,由于已经成面霸了,基本面试官想问啥都很清楚,把面试官镇住基本就过了
还有就是从0offer到1是非常重要的,不仅是心态上的从容,更是谈判桌上的筹码
如果有offer的话,面完之后如果你感觉发挥很好,直接call HR:"能不能麻烦帮我加快下流程啊?XX公司催的很紧,谢谢~"
注意每面开始的时候录音,之后复盘,每场面试之后可以有反问环节,我感觉几个问题必问:
- 我还有什么改进的地方?(这个问题的答案基本知道此面过没过)
- 面试结果大概什么时候出?
- 能帮我加快下流程嘛?因为我现在有个offer,然后XX公司催的比较紧(当然也不排除0offer用这招的可行性)
- 如果是leader面还可以问问主要业务是做什么的?(如果没用几句话敷衍你,那么恭喜你基本稳了)
由于面试是不能当场说出面试结果的,所以面试结果如何这种就别问了
HR面的话一般会问现在有几个offer,具体说谎还是说实话各有利弊,自己权衡吧,还会问XX公司和我们公司都给你发offer的话,你去哪个啊?(这不废话嘛,我要说XX你会给我发offer嘛) 还有就是最好多了解下公司特别是你投的BU的相关工作,不排除有挂的可能性(一般不挂)
MS
1.很简单的题 需要用到前缀和 保证每个前缀和大于等于0即可
2.在一个矩阵中选出4个相邻的格子保证构造的数最大
3.count 1~n中1出现的次数 需要分个、十、百千分别数(注意列举的时候可能会重复 但是统计的时候不会重复) 将n切成三部分
寄
阿里
笔试
1.进制转换:int 溢出 第一次遇到 de了好久
2.字符串处理:
3.DP:具体忘了,没做出来
寄
一面
主要是聊项目
算法:
expr字符串求值
二面
问了下项目?
问了线程和进程的区别
中断处理?为什么要有中断?
TLB是什么?为什么要有TLB?
python和java的多线程区别?
设计模式了解嘛?观察者模式?
Spring相关问题(直接G 我没说会啊)
线程 进程状态
http post get 区别
预防死锁的方法
TCP UDP特点
算法:前缀树(字典树)
快手
免笔试
一面
线程的创建过程?
mysql索引分类?可以自己选索引吗?默认什么索引?
主键索引 外键索引?
各种排序算法的时间复杂度 平均 最差?
图论算法了解哪些?
B树和B+树 数据量与层数的关系?两者的区别?
线程池 加入新任务的过程?
不可变对象是什么?如何实现?举个JDK种的例子?
算法:
1.长方形交集
2.大数相乘
二面
讲讲项目
算法:
简单的回溯 回溯模板秒杀 优化?
场景题 给个车库 然后构造系统统计空闲车位 (感觉这种题随便做 注意和面试官讨论交流即可 关键是看你的思考过程)
hr面
讲讲项目里遇到的困难的事?
学到了什么?
有什么优缺点?
快手和字节选哪个?你觉得两者的理念有什么差异?
网易
笔试
1.给规则找规律打印 很简单
2.k个有序数里寻找n个求和为x的数
3.图论算法 最小生成树
4.dp (记不太清了)
这次笔试牛客网崩了至少30min交不了题目 心态有点裂 恶心人
牛客说还要重考?赶紧滚吧
美团
笔试
比较简单全AC 记不住题了
一面
面试官竟然和我自我介绍?!!面试体验最好的一次了 不愧是美团
先来个SQL题 发现几乎所有的sql题group by having都能秒(一般是查询) 学校里那一套 not exists 是真的没用 即使你写出来了 别人也很难看懂 会要你换一种方式
in (1,2)
123NF说一下?
给了一个不满足3NF的表 要你拆表满足3NF?
对名字建立索引然后回表的过程?
组合索引? 有没有不需要回表的情况?
索引的优缺点?
什么时候索引没用?
什么字段适合建立索引?
事务的特性?细说?
事务隔离级别?可能会出现的问题?
数据库怎么通过索引实防止重复项的插入?(开始没说是通过索引 我答的触发器)
面向对象和面向过程的区别?
细说封装?
private public protected default访问修饰符的访问限制区别?
抽象类和接口的区别?
String s = new String("123"); new 了多少个对象?
String底层数据类型了解嘛?char和byte数组的转化了解嘛?
容器有哪些 说一说 然后说一说底层源码?
实例可以做key嘛?需要做什么准备?
多线程细说?
synchronized和reentrantlock的区别?
synchronized具体用法有哪些?有什么区别?
wait和sleep的区别?
线程池用过吗?为什么要有线程池?
什么是死锁?死锁的解决方法?
没有算法题 总体体验极佳 必须吹爆美团!
腾讯
笔试
前三题很简单不记得了
4.给一个链表数组,每串都是环状链表上的一段 还原环之后 找出环上的最小字典序(可以从任何节点开始,可以顺时针或者逆时针方向)】
5.股票最佳抛售时机
一面
Java C Cpp你觉得有什么区别?
递归调用时底层具体的处理?
先问我的电脑内存多大? 32bit的CPU怎么寻址超过4GB的内存?(关键要知道ALU里reg的字长和寻址的字长的区别)
Linux操作系统指令?Linux指令的本质?
TCP面向连接 如何理解 连接 挂断的话 对面会不会发现?
unicode utf-8编码的理解?
线程之间的同步方法?
算法:二分查找
二面
估计是个总监 看年龄就很大
X86和MIPS架构有什么不同?
详细说项目
线程和进程的区别?
如何使用线程?
算法:没有算法
实现单例模式,要求线程安全
我焯 单例模式双检锁竟然没写出来.... 还是把我捞起来了
三面
讲项目
怎么保证线程同步?
什么是死锁?怎么解决死锁?
synchronized 有哪些用法,分别锁的是什么东西?
算法:单词粒度的String翻转 要求空间复杂度O(1) 时间复杂度O(n)
算法写出了一个bug 麻了
字节
免笔试
一面
同时做编译器和网站 时间允许嘛?
你这个预告片怎么做的?
如果高并发同时看预告片怎么做?
CPU分配算法?
线程和进程?
如何访问同一个对象?
JVM运行时内存分区?
堆的内存划分?
标记算法细说?
HashMap get过程?
Hash冲突?
延迟消息怎么实现?
怎么手动实现?
redis用过嘛?
消息队列清楚嘛?
算法:二叉树最大宽度?
二面
为什么感觉长得和一面面试官一样?
主要是围绕项目的八股
细说做完最有成就感的项目?
XX项目最难的点在哪?
项目做完之后怎么做测试?如何保证正确性?
mysql有没有用事务 有没有考虑高并发的情况?
数据库引擎用的什么?事务隔离级别用的什么?
sql语句写进去经过了什么过程?
TCP 三次握手 四次挥手细说过程? 为什么是三次和四次?
DNS域名解析的过程?
输入url之后经过了什么过程?
http和https的区别?如何在http的基础上实现https?SSL怎么实现的?
对称加密非对称加密说下?
有没有用过JDK的队列?
SQL
两个select 查询题 需要使用count avg having group by等
select from where group by having的优先级
select .. where id = 1;
select .. where name = '123';
区别?
算法:
用数组实现队列? 怎么优化?
生产者消费者模式,将队列改成线程安全的容器
三面
http和https的区别
对称加密和非对称加密?底层数学原理
redis基本数据类型?zset的底层结构?
为什么要三次握手?
为什么要有wait time?
MySQL引擎?为什么要有B+树?
Hash冲突怎么解决?
主从数据库是什么?(主从复制)
binlog和redolog的区别?
幻读?
CAP中的C和ACID的C的区别
IO的种类?
多路复用IO的种类?区别?
JVM内存分区?为什么要分区
智力题:
25匹马 5个赛道跑多少次可以选出前三名?
优缺点?
为什么想来字节?
算法题:
1.同花顺
2.层序遍历(面试官问我想做简单的还是难的 是不是G了) 看来是想要我啊!怕我挂啊 还好没说什么要难的(战术后仰)
华为
太慢了,不打算面了,我只能说华子的池子深不见底 、
笔试
1.较为复杂的规则下的排序 细心点就好
2.3记不清了
一面
光头面试官 面过的最和蔼的面试官(此时美团还没面)
数据结构怎么理解的?
说说熟悉的数据结构?
线程和进程说下?
线程之间、进程之间的切换过程?
为什么要有线程和进程?
java多线程用过吗?
如何访问共享对象?
锁升级过程?
除了锁还可以怎么实现?
算法题:链表求和 不能改变原链表
总结
听说美团锁HC了,反正我一面肯定过了,隔了这么久还不联系,我估计应该是锁了
华子直接忽略就好
腾讯的话是客户端,不是很想去,并且offer也还没发(不过感觉问题不大)
最终在快手和字节里面选了字节,还是想多锻炼自己一下(听学长学姐说字节注重对实习生的培养,会把核心工作给实习生做),并且离学校很近,但就是可能需要被迫转Go,不过技多不压身,也行
虽然说有点对不起快手,一面面试官带着我改简历,让我不是一投就石沉大海,教我怎么准备面试,怎么回答问题,还最先给我发offer,然后成为我谈判桌上的筹码,让我自信的说出"保底"两个字
但没办法,在魔幻的世界就必须做出魔幻的选择,对不住了...
#春招##实习##面经##笔经##面试流程##Java##校招#