目录
写在前面
一,美团——快驴事业部
1,时间线
2,笔试
3,面试
一面
二面
二,阿里——大淘宝技术
1,时间线
2,笔试
3,面试
一面
二面
三,微软——苏州STCA
1,时间线
2,笔试
3,面试
一面
终面
四,字节——商业化技术
1,时间线
2,笔试
3,面试
一面
二面
三面
hr面
五,米哈游——数据开发
1,时间线
2,笔试
3,面试
六,再说一点吧
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面试重灾区:
03.01 简历投递
03.02 笔试邀请
03.05 参加笔试
03.10 一面
03.16 二面
03.22 OC意向一起发(没有hr面)
五道编程题,4算法+1工程。难度中等偏上。具体题目记不太清了,比较灵活,偏场景些;
a了两题,额外偷了0.6,总共应该是2.6题;
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,编程题:给定有序数组查找指定元素第一个出现的位置,该元素存在,二分查找模板题
小结:
1,在学校学了哪些课程?聊一聊对中断的理解?从键盘上敲下一个按键开始,到记事本上显示出来敲下的字符,中间经历了哪些步骤?越详细越好
2,堆排序的空间复杂度,时间复杂度,建堆和排序时间复杂度各是多少?自顶向下和自底向上建堆时间复杂度区别?简单推导一下
3,编程题:二分查找模板题,和一面差不多,但是如果找不到的话返回最接近目标元素的左边的值,比如查找7,数组中只有6和8,则返回6
小结:
03.03 简历投递
03.03 心理素质测评(时间随意,不是决定性因素,但也要认真对待)、笔试邀请
03.14 参加笔试
03.16 一面
03.22 二面
03.22 流程终止
单选、多选、三道编程题。选择题覆盖计网、数据库、操作系统、Linux等基础知识。算法前两题中等难度;
a了两道,第二题需要用到dp;
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,平时学习新知识的途径?看过哪些书?比较感兴趣的是哪个方向?自己的长处和短处?
小结:
02.25 简历投递
02.26 笔试邀请
02.27 参加笔试
03.14 一面
03.18 终面
04.06 感谢信+流程中止
05.09 hr通知还有hc问来不来(wl轮到了,但是没想到这么多人鸽微软(っ °Д °;)っ)
三道编程题,签到题、dfs、寻找范围内出现的1的个数;
a了两道,第三道暴力写了出来,无法通过最大规格的测试用例;
1,问项目,背景、遇到的难点、解决办法等
2,编程题:1)有序双向链表的插入删除。
小结:
1,问项目,主要关注项目整体的逻辑,对细节部分扣的比较深,但没有问如何扩展自己的系统
2,编程题:1)给一个日志文件,记录了ip的访问信息,计算每五分钟内访问次数,需要考虑日期格式等边界问题(字符串处理、日期格式处理真是噩梦,用到好像是格林尼治时间,毫秒部分精确了7位,用Java转换时间戳时会出现时区问题。一开始就被这些繁琐的细节给搞晕了,忘记了工程题目的大忌,应该自顶向下逐步抽象的解决问题,搞一个方法假装它已经实现了某个功能)。
小结:
03.06 简历投递
03.11 一面
03.15 二面
03.21 三面
03.23 hr面+OC
03.24 offer审批完毕,确认任职时间
04.01 意向书(愚人节快乐!真快乐)
有一说一,字节的面试推进过程真的超级快,点名表扬!据说有同学一天就完成了所有技术面试。
参加了学校的内推,没有笔试流程
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)二分查找模板题。对,很基础的那种(●'◡'●)。
小结:
1,问项目,对细节进行深入的探讨,项目做了多久?
2,对并发控制比较好的数据结构有哪些?HashMap的底层结构以及扩容机制?处理哈希冲突的其他方法?
3,java的锁了解过哪些?synchronize消耗的是哪些资源?
4,volatile和synchronize区别?
5,线程池的一些参数?如何工作?
6,java内存空间是如何划分的?常见的垃圾回收算法?
7,熟悉哪些排序算法?堆排序原理?平均和最差的时间复杂度?
8,redis常见数据类型和数据结构?
9,redis缓存一致性解决方案?
10,MySQL事务解决什么问题?
11,数据库索引的数据结构?设计索引需要遵循哪些基本原则?
12,编程题:1)判断是否为平衡二叉树,需要自己构建树并验证。
小结:
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)设计数据库表来实现学生、课程、教室、老师之间的映射关系
小结:
1,博客主要内容?如何吸引这么多关注呢?写博客的动机?一句话概括博客带来的收获?
2,做过最成功的一个项目?在团队中发挥的作用?做过最不满意的一个项目?
3,遇到最大的困难?
4,你的朋友有提到自己的缺点吗?
5,确认下实习信息:毕业时间、最快到岗时间、远程实习最早工作时间
小结:
03.06 简历投递
03.17 笔试邀请
03.20 参加笔试
03.29 一面
04.02 二面
04.13 bp(类似于hr面了)
04.14 OC
04.21 意向书
和阿里类似,选择+三道编程题;
a了两道,最后一题拿了0.3,一共2.3道;
mhy的面试和笔试内容是高压线,不方便透露。主体内容还是和其他面试差不太多的,同样也是非常注重基础,可能考察角度会更灵活些,类似于美团,抛出场景题,针对具体的场景进行分析,并给出自己的解决方案。此外对简历上提到的所有内容必须非常熟悉,比如项目、博客之类的。
至于数据开发,个人没有接触过太多大数据组件相关的知识,面试官也就没有为难,最后还提到不了解问题不大,除了专门开设大数据课程的学校,其他学校也没有重点介绍,对在校生要求不会特别严格,基础扎实更重要。
面试过程不一定会有算法题,要看具体的面试官。
小结:
基础,基础,还是基础!每次面试完都会问面试官最看重实习生哪方面的素质,毫无例外全都提到了基础,其他诸如思维逻辑、解决问题能力等等是仁者见仁了。
1,春招实习过程真的超级幸运,遇到了贴心的内推学长、温柔的面试官、心仪的岗位等等。幸运的同时也让我惶恐,常常会问自己自己的实力是否能配得上这份幸运,但想太多也没有用,还是踏踏实实的走好每一步,不够聪明就用努力来弥补,还年轻,不要害怕失败。
2,有时间多和同学沟通交流面试经验。非常感谢身边同学真诚的意见,在和同学交流中,及时发现了自己的问题,然后拼命复习基础、面试、整理复盘,大概有两个星期左右,两点睡早上七点自然醒,醒了继续复习o( ̄┰ ̄*)ゞ。没办法,找工作和单纯的项目demo区别很大,平时学校的课程重点又比较散,计网、嵌入式、大数据、云计算都是摸一点,浅尝辄止,写不到简历上,稍微问深一点就罚站了,所以一定要对学习和工作间的落差做好心理准备。
3,不要自暴自弃。发现问题然后努力去解决就是了,考虑其他杂七杂八的事情只会徒增烦恼。
4,学历很重要,说真的,可能之前没有太大感觉,但是从今年的春招实习情况来看,学历很重要,即使是华五研究生,本科学历也很重要。本来名额就少,投的简历又多,我是hr我也这么搞。学历不行的话就要靠技术来弥补了,比如ACM牌子、大型比赛奖项、实习经历等。
5,写博客是个好习惯。而且相比于比赛而言,能够沉淀下来的东西也更多。
6,拿到offer不要急着拒绝,比如今年就有公司在三月底毁意向,这时候去哪找实习?你不仁别怪我不义,人不能太老实。
7,人的时间和精力有限,要学会协调自己的工作、学习、娱乐和生活。
8,命要紧,其他都是次要的。
最后,真诚祝愿每一位努力的人都能得到应有的回报。