其实从三月份投递简历开始准备面试到四月份收offer,也不过1个月的时间,但这都是建立在我过去一年的积累啊,无数次的通宵自习室,图书馆的专属椅子都被我坐的陷进去。避免误导大家,这次也不做标题党,写了准备一年,踏踏实实干事。
以下
剑指offer刷一遍、数据结构、JavaSE、JVM、多线程
①剑指offer有些搞不懂的直接跳过,等下个月第二遍再刷;
②数据结构重点是各种树、二叉树、红黑树的一些特性以及链表的特性;
③JavaSE主要是类对象接口的区别,能不能继承,Static的特点,各种Hashmap,ArrayList等集合框架的原理源码;
④JVM是根据网上整合的高频面试题进行学习的,刷了一遍面试题之后才去看周志华的《深入理解Java虚拟机》,JVM难的不是JVM布局,垃圾回收算法等这些理论,而是结合代码和项目场景。比如说一段代码,有很多个类、方法,其中又有静态类和全局变量,这时候项目跑起来的时候哪些先加载,哪些变量存放在哪个区,不止要懂理论,还要结合代码懂理论。还有就是项目中的OOM,栈溢出,JVM的参数调优等等。
⑤多线程也是刷网上面试题和博客的,几本多线程的书都是一坨一坨的,理解不来。先动手把几个多线程实现方法实现了一遍,然后分析优缺点,再由此切进去线程不安全和各种锁。多线程学习不同JVM,自己多动手,多调试一下,控制台都会告诉你答案。
剑指offer二刷,数据库、操作系统、网络、准备面试:
①剑指offer第二遍重点刷第一遍时思路懂代码不懂的。
②数据库刷了牛客网SQL实战100多题的,其他都是索引原理,悲观乐观锁等理论。
③操作系统刷高频面试题。死锁的产生条件、解决方法等等,资源调度算法,并发和并行等。
④网络也是刷面试题。三次握手四次挥手以及为什么要这样做、TCP和UDP、网页请求过程、DNS解析过程、网络模型、响应码的意思等。
⑤我每刷一道算法或者理解了一道面试题都会进行整理,所以到面试之前看看整理的文档和博客就行,异常轻松。这个月也继续投递简历进行面试,从三月份开始都是边投边准备,不存在全部准备好再去投。
总结:
一定要列好自己的学习计划,也要学会根据自己的学习情况调整计划。项目是面试的敲门砖,也是面试的大头,我是从大二出去实习的,所以在项目这边可以花较少的时间,不用从零开始学。底层理论一定要会,不然大厂无望。算法一定要硬刚,总共就那几种题型,我刚开始也很抵触的,觉得太难了,后面迎难而上也就那么回事。第一遍不行就第二遍,不然就第三遍,直到现在剑指offer里面也有一些我不懂的题目,但我也不会去深究,大局为重,不抠细节。
以上是我过去一年的准备,说说我从投递简历到收offer这一个月的准备。
1.复习算法。把以前刷过的算法题分类整理了一下,因为之前有整理过,所以复习起来没用多少时间,还特意去理解了长长的KMP算法,LRU算法。
2.复习理论基础。除了复习整理的面经和资料之外,还特意去了解了一下Golang,因为头条用的go语言。
3.特意准备了几个项目技术难点,能在面试的时候炫一下。
头条一面(Java+项目)
1.倒排索引
2.讲讲redis里面的哈希表?
3.happen-before的规则?
4.volatile修饰符,synchronize锁
5.java单例模式的实现,懒汉、饿汉?
6.进程与线程的区别,多进程和多线程的区别?
7.HashMap原理,为什么用红黑树,红黑树的特点?
8.快排时间空间复杂度,最好最坏的情况,优化方案?
9.TCP的拥塞控制,具体过程是怎么样的?UDP有拥塞控制吗?如何解决?
10.讲讲了解的垃圾回收算法和回收器,什么时候执行STOP THE WORLD?
11.了解Go语言吗?
头条二面(大数据+项目)
1.Kylin的项目架构
2.Paxos和ZAB协议
3.CAP理论,分区容错性的意义
4.大表Join小表优化,如何处理数据倾斜?
5. 讲一下最大堆和最小堆
6.HDFS的读取、写入,容错处理。(源码)
7.MapReduce的过程(第一版和第二版的)
8.MR shuffle,Spark shuffle。
9.namenode HA,脑裂,Yarn的调度机制。
10. Hive的内部表和外部表区别、数仓建模模型、数仓分层、雪花模型和星型模型。
11.了解ClickHouse吗?它与Kylin的区别?
头条三面(算法+场景题)
1.LRU算法实现(伪代码)
2.链表倒数第K个数(讲思路)
3.一堆螺丝和螺母用最短时间匹配(代码实现)
4.求每天浏览页面的新用户(Hive QL实现)
5.求抖音小视频每日点击量最高的10个(Hash + 最大堆)
总结:
我一直崇尚「曲线救国」的做法,也一直在向别人传播这种做法。现在能力背景不足没关系,只要规划好自己的学习路线,一步步阶梯式往上爬,总可以实现目标。因为我自己二本出身,但我意识的早,大二就开始实习,用项目和实习经历弥补我背景不足,然后一步步走到「offer自由」。很多时候并不是只有巨人才可以成功,你只需要做到行动上的普通人,就可以超过很多思想上的巨人,行动上的矮子。
写在最后
我把学习资料都整理在网盘了,获取方式:点击链接《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。