目录
写在前面
1,竞赛(比如ACM区域赛之类)、项目(最好是和投递职位有关联,比如投递java最好填和java相关的项目)、学历(越高越好)至少要有一个;
2,越早准备越好,准备越充分越好(建议寒假期间打磨好简历及项目。2月份就可以投递一些公司,外企截止时间比较早,参考亚马逊、微软。3月初最好做足准备开始投递简历,建议先投小厂熟悉流程。最好不要拖到三月中旬,因为流程推进也需要时间)
3,提前批难度较大但也是机会,如果不会影响后面的面试可以尝试,切忌丧失信心!阿里有三个志愿,但是第一志愿挂掉后,其他两个志愿也很难通过,其他面试官可以看到面评。字节有两个志愿,投递较晚的话,流程会慢一些,但整体来看字节的面试推进速度还是极快的
4,刷题,刷题,还是刷题!(力扣Hot100、CodeTop)
5,不要过早躺平,一切皆有可能发生!即使到了hr或者过了hr也不能掉以轻心,互联网的寒冬不只是说说(锁hc、毁意向等等o( ̄┰ ̄*)ゞ);
6,投简历时提前打听好部门是否卡学历,比如只收本科211及以上的。就算过了简历关,也很有可能被hr吊着;
7,面试拼的不仅是技术更是战术,在擅长的领域拖的时间越久,越不容易暴露自己的缺点。项目、竞赛、博客都是为了这一刻而准备;
8,如果后端开发卷不下去,前端也是不错的选择;
9,对于后端开发:Java需求量大,需要掌握的八股文也多,难度也较高,但整体来看不是不可到达的高度。go的八股比Java少,且缺口大,相对而言优质的参考学习资料较少。C/C++不是真正的高手,请慎重选择。python还是只把它当成工具吧,需求量少;
10,有不会的问题不要紧,可以思考一会然后告诉面试官不是很熟悉这部分内容,关键是会的领域能钻多深、思考问题的过程是否合乎逻辑并且具有一定深度。此外如果问到的问题没有思路,可以尝试把话题引到与之相关并且自己熟悉的领域;
Java面试重灾区:
- 基础部分:jvm(类加载、垃圾回收、内存模型等等)、多线程(线程池、多线程交替打印)、常用工具类底层源码实现(如HashMap、ConcurrentHashMap)、synchronize和lock实现和底层原理;
- 计网:TCP三次握手和四次挥手、http和https、状态码、一次http请求经历的过程、TCP为什么可靠
- 数据库:事务的ACID特性及实现、隔离级别、常用数据库引擎区别、事务并发可能遇到的问题及解决方案、根据情景设计数据库表、数据库索引实现及原因
- 操作系统:进程线程协程区别、进程间通信、中断过程
- 数据结构:常用排序算法时间、空间复杂度、稳定性、常见数据结构的区别及应用场景(如链表和数组)
1,时间线
03.01 简历投递
03.02 笔试邀请
03.05 参加笔试
03.10 一面
03.16 二面
03.22 OC意向一起发(没有hr面)
2,笔试
五道编程题,4算法+1工程。难度中等偏上。具体题目记不太清了,比较灵活,偏场景些;
a了两题,额外偷了0.6,总共应该是2.6题;
3,面试
一面
1,分布式锁在项目中的作用?锁的key?发送端吞吐量?redis分布式锁底层实现机制大概讲一下?
2,spring启动经历的过程?bean生命周期?
3,一次http请求中request和response过程?http请求头部包括哪些信息?http协议中request和response内容?
4,给一段代码,大致意思是String s = "",s循环加上int类型的i(i从1~100000),逐行分析jvm内部发生了什么?(字符串常量、包装类、字符串拼接及优化、垃圾回收)
5,ArrayList扩容机制?
6,编程题:给定有序数组查找指定元素第一个出现的位置,该元素存在,二分查找模板题
小结:
- 人生中第一场实习面试,很多地方都准备的不充分,jvm基础数据结构等回答的比较浅。面试完就感觉没了,复盘时录音根本都听不下去o( ̄┰ ̄*)ゞ
- 面试官人很棒,是位很稳重的大叔,声音也很温柔,虽然答得不怎么样,但还是很耐心的讲解,体验很棒!
- 基础,基础,还是基础!
二面
1,在学校学了哪些课程?聊一聊对中断的理解?从键盘上敲下一个按键开始,到记事本上显示出来敲下的字符,中间经历了哪些步骤?越详细越好
2,堆排序的空间复杂度,时间复杂度,建堆和排序时间复杂度各是多少?自顶向下和自底向上建堆时间复杂度区别?简单推导一下
3,编程题:二分查找模板题,和一面差不多,但是如果找不到的话返回最接近目标元素的左边的值,比如查找7,数组中只有6和8,则返回6
小结:
- 二面面试官好年轻,有点像我表哥,哈哈哈。
- 面试过程很温柔,而且超级礼貌!(面试前亲自私聊我调整时间,说是一起面试的小伙伴,我当时还纳闷,跟我一起面试?后来才反应过来是面试官,哈哈哈)虽然前面两个问题答得非常差劲(操作系统中断确实是基础,还是要重点关照下。数据结构又理解的不透彻),但是中途一直都很耐心,虽然会给我设坑,看我反应,中招后还会主动解释刚才是他设计的陷阱(⓿_⓿)。总之面试过程还是很棒的,面试官对于计算机底层知识也非常感兴趣,可以感觉到是一位技术爱好者,在这样一位领导下工作应该会很舒服吧
- 一面和二面都让我觉得自己到底有多差劲,很庆幸问题发现的比较早,非常感谢两位面试官的指点。最后收到OC真的非常意外,我记得那是淘宝二面寄了的一天晚上,一通电话打来,给......
- 基础,基础,还是基础!
1,时间线
03.03 简历投递
03.03 心理素质测评(时间随意,不是决定性因素,但也要认真对待)、笔试邀请
03.14 参加笔试
03.16 一面
03.22 二面
03.22 流程终止
2,笔试
单选、多选、三道编程题。选择题覆盖计网、数据库、操作系统、Linux等基础知识。算法前两题中等难度;
a了两道,第二题需要用到dp;
3,面试
一面
1,三次握手、四次挥手(没有要求详细介绍参数)
2,http和https区别?端口?http请求中有几种方法?返回的状态码?(问的也比较浅。没想到状态码真的问了)
3,虚拟机内存区域,运行状态
4,多线程间数据共享?
5,垃圾收集算法?分代收集?
6,内存溢出排查?用哪些命令看大的对象?用过相关工具吗?
7,数组和链表区别?循环遍历效率差别?ArrayList扩容机制
8,Java基本数据类型有几种
9,知道几种设计模式(还以为要详细说,就没敢讲太多。。。)
10,wait和sleep区别?
11,synchronize在哪修饰?可以修饰对象吗?可以修饰int类型吗?
12,mysql查询第10w页的第1000条?如何优化?
13,隔离级别种类,MySQL的隔离级别,MySQL几种引擎?区别?
14,redis如何实现分布式缓存?或者说redis数据库如何防止超卖?不同地域如何处理?
15,autowaire和resource注解区别?
16,spring实现事务一般用transectional,一个类中两个方法都使用该注解修饰,并互相调用,事务会生效吗?为什么?
17,编程题:1)判断线索二叉树。2)简单的统计排序,具体记不清楚了(用hashmap+优先队列)
小结:
- 可以看出问题覆盖的面还是比较广的,但是还好问的不是特别深,尽管如此,很多题目回答的仍然不够具体,为后面的面试埋下了隐患;
- 面试过程中时间安排的非常紧凑,问题一个接一个,有明显的压迫感。听声音像是一个小哥哥,但丝毫不减威严。
二面
1,博客主要有哪些内容?
2,计算机为什么使用二进制?
3,java中,在文本中写入代码到机器执行,这个过程发生了什么?虚拟机加载class到真正在物理硬件里执行机器码中间的步骤?不同类型的数据在java内存中的存储方式?Java虚拟机如何知道从内存中具体哪个地方加载使用具体的类 或者 说class在虚拟机内部是怎么描述的?(这里面试官提醒的已经十分明显了,但是当时没有太深入的了解虚拟机内部的东西,回答的比较尴尬)
4,ThreadLocal为什么会出现内存泄露?如何避免这种现象?
5,多线程中有几种级别的锁?轻量级锁和重量级锁区别?轻量级锁实现原理?
6,输入网址到返回页面,中间发生了哪些步骤?
7,项目核心难点?详细的技术方案?当数据量进一步增大的话该如何扩展?备选的消息中间件有哪些?各种中间件的优势?相比于redis,可靠性更高的原理?你觉得消息中间件要怎样设计?核心要关注哪些功能?消息发送到消息中间件后,如何消费消息?(以上问题可以回答不知道,如果还是追问的话,可以给出一个自己觉得有道理的解决方案并且明确这是自己的猜想,并未看过具体的设计。比如消费消息可以考虑在本机中设计循环队列来存入、去取出数据,通过指针移动的方法表示消息已经被消费,分布式场景下则需要考虑rpc调用等问题)
8,项目中遇到过哪些异常或者bug,解决比较久的(这个问题就是考察到底有没有真正做过项目,就算没有也要编一个!不然很可能就认为项目不是你自己做的)?这些过程在博客上有记录吗?
9,个人觉得不错的博客是哪一篇?讲一讲里面的内容?
10,除了简历上的还有其他技术实践吗?
11,有研究过设计模式吗?介绍一下熟悉的设计模式?具体实践中用到哪些?代理模式如何实现?(当时回答成了底层实现,应该回答项目中怎么使用的)
12,平时学习新知识的途径?看过哪些书?比较感兴趣的是哪个方向?自己的长处和短处?
小结:
- 面试过程中有许多地方可以深入讲的,但是害怕面试官觉得我太强势,就没多说,导致问的问题比较多,给面试官留下的印象就是回答问题不够深入,呜呜呜(找学姐要了面评)
- 可以明显感觉到有些点挖掘的还是比较深入的,所以不熟悉的东西一定不要乱挖坑;
- 淘宝二面的面试官应该是面过我的面试官里,最敏锐的一个,对我回答中的每个方面都能很快抓住重点并且继续追问下去,让人有点喘不过气的感觉,但归根结底还是基础太差;
- 基础,基础,还是基础!
1,时间线
02.25 简历投递
02.26 笔试邀请
02.27 参加笔试
03.14 一面
03.18 终面
04.06 感谢信+流程中止
05.09 hr通知还有hc问来不来(wl轮到了,但是没想到这么多人鸽微软(っ °Д °;)っ)
2,笔试
三道编程题,签到题、dfs、寻找范围内出现的1的个数;
a了两道,第三道暴力写了出来,无法通过最大规格的测试用例;
3,面试
一面
1,问项目,背景、遇到的难点、解决办法等
2,编程题:1)有序双向链表的插入删除。
小结:
- 微软最看重的就是算法能力,题目做不出来基本就没了。但是一面的题目确实简单(但是细节部分还是要好好斟酌的,而且需要自己设计测试用例),看上去有点放水了,实际上确实放水了,面试官是一个学校的,哈哈哈,运气真不错,整个面试过程也比较轻松
- 算法题目核心部分基本没问题,但是遍历展示链表内容时,忽略了头节点不存值的问题,找了好长时间。结束后面试官提醒可以多试试debug
终面
1,问项目,主要关注项目整体的逻辑,对细节部分扣的比较深,但没有问如何扩展自己的系统
2,编程题:1)给一个日志文件,记录了ip的访问信息,计算每五分钟内访问次数,需要考虑日期格式等边界问题(字符串处理、日期格式处理真是噩梦,用到好像是格林尼治时间,毫秒部分精确了7位,用Java转换时间戳时会出现时区问题。一开始就被这些繁琐的细节给搞晕了,忘记了工程题目的大忌,应该自顶向下逐步抽象的解决问题,搞一个方法假装它已经实现了某个功能)。
小结:
- 说实话,二面的面试官真的不像是leader,更像是一个超级有礼貌的朋友,应该是这次春招过程中面试体验最好的一次(并不是指自己的表现好)。打断我时都会先说一句“实在不好意思,我这个地方有点不太理解,你可以再详细讲一下吗?”。一个词形容——受宠若惊。
- 可惜最后的编程题乱了手脚,要不然希望还是很大的;
- 微软一面和二面是平行面,过了一面后就可以直接进入leader面了;
1,时间线
03.06 简历投递
03.11 一面
03.15 二面
03.21 三面
03.23 hr面+OC
03.24 offer审批完毕,确认任职时间
04.01 意向书(愚人节快乐!真快乐)
有一说一,字节的面试推进过程真的超级快,点名表扬!据说有同学一天就完成了所有技术面试。
2,笔试
参加了学校的内推,没有笔试流程
3,面试
一面
1,项目的吞吐量?如何保证高可用?写redis之前还是之后写入mysql?分布式锁在项目中的使用场景?
2,项目使用maven,引入了很多不同依赖包,引入相同的依赖,该如何选择版本?
3,mybatis查询sql整体流程?
4,配置一些动态sql,通过sql、查数据库、返回结果这个过程?
5,mybatis中$和#区别?
6,spring的ioc和aop?
7,循环依赖怎么办?三级缓存通过提前曝光的形式一定能解决所有循环依赖吗?
8,spring事务传播机制?
9,分布式锁当主节点挂掉,会出现什么情况?
10,redis集群搭建协议?
11,redis使用rdb持久化方式,如果保存快照后宕机,数据不一致该如何恢复?
12,redis集群新增节点会出现什么问题?讲讲一致性hash
13,编程题:1)二分查找模板题。对,很基础的那种(●'◡'●)。
小结:
- 一面是一个帅气的小哥哥!脾气非常好,问的问题也很有针对性,对框架和redis方面了解的比较深入,但是不知道为什么,面试过程看上去好像比我还要紧张(*/ω\*),感觉有点奇妙。
- 面试过程是针对简历上提到的东西,挨个提问。过程中有感觉答得不好的地方,面试官还安慰道没事,哈哈哈,信心大增!
二面
1,问项目,对细节进行深入的探讨,项目做了多久?
2,对并发控制比较好的数据结构有哪些?HashMap的底层结构以及扩容机制?处理哈希冲突的其他方法?
3,java的锁了解过哪些?synchronize消耗的是哪些资源?
4,volatile和synchronize区别?
5,线程池的一些参数?如何工作?
6,java内存空间是如何划分的?常见的垃圾回收算法?
7,熟悉哪些排序算法?堆排序原理?平均和最差的时间复杂度?
8,redis常见数据类型和数据结构?
9,redis缓存一致性解决方案?
10,MySQL事务解决什么问题?
11,数据库索引的数据结构?设计索引需要遵循哪些基本原则?
12,编程题:1)判断是否为平衡二叉树,需要自己构建树并验证。
小结:
- 面试官提到对实习生要求时,第一个提到的居然是人品比较好!第二个才说基础扎实;
- 问的问题都有所准备,而且没有很刁难,面试过程还是比较顺利的,面试官应该不是专攻java,所以java方面问的不是特别细;
三面
1,问项目,明确指出了项目中不太合理的地方,比如技术选型方面的缺陷,业界常用的做法等。一次请求到完成时延大概是多少?介绍下项目中redis的分布式锁?
2,介绍下对redis的了解?redis的持久化机制?aof持久化机制中文件过大怎么办?文件重写功能有了解过吗?redis如何保证高可用?
3,java线程池机制?executor原理?线程状态的切换?线程池的回收机制?为什么要采用线程池的机制?
4,java实际应用过程中节省gc开销的措施?
5,select * from A where x=1,x为一个索引值,内部执行过程?优化器有了解过吗?有用过MySQL索引吗?索引失效场景?
6,网址中输入url到页面渲染的整个过程?页面渲染完毕后连接不关闭吗?为什么要四次挥手?三次握手中某一次失败会怎么样,所有情况都列举一下?
7,编程题:1)手写一个简单的阻塞队列。2)设计数据库表来实现学生、课程、教室、老师之间的映射关系
小结:
- 第一次遇到女面试官,有种雷厉风行的感觉,气场很强!我全程都在发抖,太哈人了┗( T﹏T )┛。但是从提问问题的角度来看还是很亲和的,比如在回答数据库索引失效场景时,当时只想起来两种,面试官安慰说能回答两种已经可以了(超级感动,呜呜呜),打断回答时也很有礼貌,仅次于微软二面面试官了;
- 面试过程很紧张,可能是第一次遇到女面试官的原因,但是面试官人还是很好的,对想不起来的地方也及时进行提示和指引,而且很有礼貌。虽然比较紧张,但问道的题目都有所准备,所以面试过程也没有出现太大的过失;
- 编程环节太尴尬了。阻塞队列之前也只是听说过,没有具体进行实现,在控制并发和设计阻塞循环范围那里绕了好久,面试官看做不出来就下一题了〒▽〒。数据库表时间长没做,都忘了实体和关系表之间的关系了,直接在实体表中添加关系映射,结果越写越乱,好在面试官耐心的提醒,最后磕磕绊绊的写了出来。整个编程环节持续了42min,太菜了;
hr面
1,博客主要内容?如何吸引这么多关注呢?写博客的动机?一句话概括博客带来的收获?
2,做过最成功的一个项目?在团队中发挥的作用?做过最不满意的一个项目?
3,遇到最大的困难?
4,你的朋友有提到自己的缺点吗?
5,确认下实习信息:毕业时间、最快到岗时间、远程实习最早工作时间
小结:
- 算下来这是第一次hr面,果然风格不太一样,问题侧重于对人格和沟通能力的考察;
- hr也是会挂人的,所以还是要好好准备。还有就是在后面的沟通过程中,一直在强调最早到岗时间和是否发放offer有关,搞得很害怕。而且后面因为和hr反复修改到岗时间,也搞得比较尴尬。说实话,导师和学校放人的话巴不得立马飞过去〒▽〒;
1,时间线
03.06 简历投递
03.17 笔试邀请
03.20 参加笔试
03.29 一面
04.02 二面
04.13 bp(类似于hr面了)
04.14 OC
04.21 意向书
2,笔试
和阿里类似,选择+三道编程题;
a了两道,最后一题拿了0.3,一共2.3道;
3,面试
mhy的面试和笔试内容是高压线,不方便透露。主体内容还是和其他面试差不太多的,同样也是非常注重基础,可能考察角度会更灵活些,类似于美团,抛出场景题,针对具体的场景进行分析,并给出自己的解决方案。此外对简历上提到的所有内容必须非常熟悉,比如项目、博客之类的。
至于数据开发,个人没有接触过太多大数据组件相关的知识,面试官也就没有为难,最后还提到不了解问题不大,除了专门开设大数据课程的学校,其他学校也没有重点介绍,对在校生要求不会特别严格,基础扎实更重要。
面试过程不一定会有算法题,要看具体的面试官。
小结:
- 整体面试感觉非常棒!一面和二面的面试官都非常和蔼,虽然我报的是数据开发(因为后台相关的只有数据开发和云游戏后台研发,游戏后台又是用的C++,而且个人也是比较愿意从事数据开发方面的工作),但是并没有特别刁难;
- 不要以为一面问过基础,后面就不会再问了;
- 基础方面没有直接问八股,而是通过场景来引导思考,比较考察思维能力;
- 在介绍公司时,可以感受到面试官对公司由衷的热爱,可以看出对公司文化的认可——追求极致,能在这样的团队中工作,一定不会觉得一事无成,希望能有机会加入到这样的团队中去,发挥自己的一份光和热!
基础,基础,还是基础!每次面试完都会问面试官最看重实习生哪方面的素质,毫无例外全都提到了基础,其他诸如思维逻辑、解决问题能力等等是仁者见仁了。
1,春招实习过程真的超级幸运,遇到了贴心的内推学长、温柔的面试官、心仪的岗位等等。幸运的同时也让我惶恐,常常会问自己自己的实力是否能配得上这份幸运,但想太多也没有用,还是踏踏实实的走好每一步,不够聪明就用努力来弥补,还年轻,不要害怕失败。
2,有时间多和同学沟通交流面试经验。非常感谢身边同学真诚的意见,在和同学交流中,及时发现了自己的问题,然后拼命复习基础、面试、整理复盘,大概有两个星期左右,两点睡早上七点自然醒,醒了继续复习o( ̄┰ ̄*)ゞ。没办法,找工作和单纯的项目demo区别很大,平时学校的课程重点又比较散,计网、嵌入式、大数据、云计算都是摸一点,浅尝辄止,写不到简历上,稍微问深一点就罚站了,所以一定要对学习和工作间的落差做好心理准备。
3,不要自暴自弃。发现问题然后努力去解决就是了,考虑其他杂七杂八的事情只会徒增烦恼。
4,学历很重要,说真的,可能之前没有太大感觉,但是从今年的春招实习情况来看,学历很重要,即使是华五研究生,本科学历也很重要。本来名额就少,投的简历又多,我是hr我也这么搞。学历不行的话就要靠技术来弥补了,比如ACM牌子、大型比赛奖项、实习经历等。
5,写博客是个好习惯。而且相比于比赛而言,能够沉淀下来的东西也更多。
6,拿到offer不要急着拒绝,比如今年就有公司在三月底毁意向,这时候去哪找实习?你不仁别怪我不义,人不能太老实。
7,人的时间和精力有限,要学会协调自己的工作、学习、娱乐和生活。
8,命要紧,其他都是次要的。
最后,真诚祝愿每一位努力的人都能得到应有的回报。