前言
估计有同学会有疑问,为什么要精确到天?是为了装逼吗?
答:仅仅是为了证明咱的严谨(其实就是为了装逼)
肯定有同学心里会吐槽:真的是小厂吗?估计又是个标题党,吹牛逼,*&¥%¥
答:真的是小厂哈,在某传统电信公司,主要做项目外包。其实如果从我离职的那天算起,应该是2月3个月24天。2年6个月11天是从我这条咸鱼突然萌生了想翻身的想法那天算起,拒绝做标题党(づ ̄3 ̄)づ
当一条咸鱼多好,怎么突然想不通,想要翻身了?
答:
外包也有厉害的,你是不是菜的没那么明显?
答:我当时连成员变量是啥都不知道,要比菜没怕过的。
面经都发了那么久(19年8月),现在才写这篇文章,最近半年也没有技术文章(水文)产出,是不是堕落了,又过上咸鱼的日子了?
答:其实19年就想着要写这篇文章,希望能帮助到那些跟曾经的我一样的同学(咸鱼)们,当时想着是找个有空的周末!有空的周末!有空的周末!写一下,结果到今年5月还没写,刚才业务还打电话找我对需求(周六),已经被榨干。。。
文章介绍的修仙教程适合所有人吗?会不会走火入魔?
答:本教程仅适合单身狗修炼,有家室者请勿偷偷修炼,否则一切后果(轻则吵闹不休、鸡犬不宁,重则妻离子散...),本人概不负责
我公交车都快到站了,你还不开始?
答:好嘞,容小弟为大爷您细细道来
正文
修仙第一步:炼体(菜鸟期)
首先,我到网上搜了一堆 Java 基础面试题,啥也不说,先背了个几天几夜,这个方法看似粗暴,实在暗藏玄机。
当时的我菜的很真实,很多基础概念都不懂,背面试题能让我快速掌握 Java 核心基础知识。
放到现在来看,对于 Java 初学者,我还是建议可以采用此方法,因为面试题基本都是比较重要的内容,也能起到一定的筛选作用,避免初学者漫无目的的学习(瞎搞)。
有些人可能会以背题为耻,垃圾才背题,我才不背,我要裸面,展示自己的实力。
结果大概率是二面挂、一面挂、简历筛选挂,然后默默的背题,然后。。。
我个人觉得背题其实挺正常的,大部分人的日常工作基本就是CRUD,很多面试的知识点日常基本都用不到。我一个QPS不到10的系统,你问我高并发、熔断、降级、秒杀系统的设计?
在阿里,大多数人要出去面试时,我相信即使不是背题,肯定也要温习准备一段时间 。阿里内网还有个老哥写了篇文章“那些年,为了进阿里背过的面试题”,截至目前得到487个点赞,1755个收藏。。
背完基础面试题后,估计有些同学已经膨胀了,觉得自己很能打了,就出去面试了,然后出去大概率被面试官一顿疯狂操作,最后收到那句已经听过无数遍的话:今天的面试就到这,如果有结果我们会再通知您。
小结:该阶段主要做两件事:1)帮助自己快速掌握 Java 的核心基础概念;2)所有第二阶段要系统学习的东西在这边都要了解个大概,至少要知道核心概念。
一般花1个月左右的时间学习,能学习的时间有公交车上、地铁上、午休、晚上下班后、周末、带薪拉💩时,能利用的时间都要利用起来。可能有同学说周末要陪女朋友,女朋友?不存在的。
修仙第二步:练气(学徒期)
熟悉了 Java 的核心基础概念后,第二阶段我们要开始系统的学习一些 Java 核心知识点:集合、IO、反射、并发、锁、多线程、数据库原理、JVM基础、常用中间件(Dubbo、Kafka、Redis、Zookeeper)核心原理和框架(Spring、Mybatis、SpringBoot、SpringCloud)核心原理等。
学习方式我建议以看源码和看书为主,看博文和看视频为辅。可能有的同学听说要看源码就懵了。
看源码是吃一手饭,其他几种方式是吃别人嚼过的饭,别人的东西我们无法保证其质量,因此还是优先吃一手饭。另外,看源码是对自己学习能力的一种锻炼,刚开始痛苦,但是摸清套路后,其实也没那么难,并且会让自己受用终身。
刚开始看源码的话我这边墙裂推荐 ArrayList,ArrayList 比较常用并且很简单,非常适合初学者。
JDK1.8 中 ArrayList 的源码有1400多行(注释估计占了一半),但是我们不需要全部看,我们只需要看其中重要的内容:基础属性、构造方法、get 方法、set 方法、add 方法、remove 方法、扩容方法等。
看完 ArrayList 之后再继续看它的老婆类 LinkedList,面试中这2个类一般会被拿来一起问。看完这两个类的源码后,再结合源码看看面试中会问的题目,这个知识点基本就掌握的差不多了。
看完 ArrayList 后,估计有同学又膨胀了,源码也不过如此,渣渣。
这时候建议可以开始看复杂一点的,优先推荐 HashMap,HashMap 是现在面试中被问的最多的基础知识点应该没有之一,HashMap 的源码比 ArrayList 复杂的不是一点半点,再加上 JDK 那写的贼不规范的源码,看着就脑壳疼。
当然,一手饭固然香,但是难度会比较大,所以我们也要适当吃一些二手饭(软饭,阿姨,我不想努力了)。
如果要吃二手饭,我们也要有选择,不然你吃到的可能不是饭,而是泔水。在这些中,书一般比较有保障,特别是那些豆瓣评价不错的书都是经过很多人检验的。还有就是一些坚持原创的优质公众号/博客,例如公众号程序员囧辉(老脸一红)。
看书的话,我当时最先看的是那本在大学时候买的,被我垫在枕头下面,陪伴了我无数个夜晚的《Java 编程思想》,但是说句实话,我个人感觉这本书不是很适合初学者读,给我带来的帮助也没那么大,所以如果时间不是很多的话,我这边不推荐先看这本书,但是用来垫枕头还是香的,贼厚。
我看过的书中,在这个阶段,我个人推荐的是:《Java 并发编程的艺术》、《Java 并发编程实战》、《深入理解 Java 虚拟机》(最近出了第三版)、《Redis设计与实现》。当时的我还是个小菜鸡,但是读这几本书,并不会觉得有读不下去的感觉,因此我觉得适合在这个阶段去读。
小结:本阶段的学习是持续不断的,在这个阶段我们主要把一些重要的知识点进行了系统的学习,夯实自己的基础,提升自己的知识广度。
源码学习集中在 JDK 源码(JDK 1.8),其他的主要是学习其核心原理。如果不知道某个知识点的核心原理,则可以对照着面试题去学,面试题问的一般就是核心的东西。
如果你当前在外包公司或者是一些传统公司,修炼完本阶段之后,可以尝试先跳一波。从外包直接跳阿里也不是没有,但是少。因此,我们要先找一个平台来当作跳板,最好是独角兽,就是喊出来大家至少能知道有这么个公司的。
修仙第三步:筑基(入门期)
本阶段主要在第二阶段的基础上,进一步提升自己的知识深度和项目实践。说的直白点就是提升自己的亮点,让自己在面试时有装逼的资本。
本阶段我们会挑选一到两个常用的中间件或框架,来深入学习其源码,例如:Spring、Mybatis、SpringBoot、SpringCloud、RPC(Dubbo、gRpc、公司自研)、MQ(Kafka、RocketMQ、公司自研)、Redis、Zookeeper、JVM、数据库中间件(TDDL、MyCat)等。
JDK 源码直接肉眼看的话问题不大,但是如果你直接肉眼看中间件和框架源码的话,你会知道什么叫做残忍。比较合理的的学习方法是反复debug源码+做笔记,我一般是把源码下载到本地,然后直接在源码上做笔记。
除了源码,本阶段另一个重要的内容是要提升自己的项目亮点。估计大部分同学在面试时都被问到过这个问题:你在项目中有什么亮点吗?此时自己内心的OS是:我TM一个QPS不到10的项目,有个鸡儿亮点。
如果你的项目本身就有高并发、大数据量的情况,那么找亮点应该不难。否则,我们可以从以下几个方向去找:1)比较复杂的场景方案设计;2)系统稳定性保障方面的设计:限流、熔断、降级等(6位数的密码保护2位数的存款);3)线上问题的排查和解决:死锁、宕机、Full GC 频繁等。
除了列举的这几个,还有很多其他的,只要我们在碰到项目难题时,能迎男而上,找到自己的项目亮点是顺其自然的事。
小结:本阶段主要是集中于提升自己的知识深度和项目中的亮点。让自己在面试的时候,能有装逼的资本。但是切记,装逼要把握好尺度,切勿过火,毕竟我们是来讨饭恰的,不是来装逼的。
总结
修仙之路很苦,无数个寂寞的夜晚,无数的诱惑(马路对面的洗脚城是我不敢奢求的梦)。如果能坚持下来,我相信大多数人都能轻松的讨一口饭恰,混个人模狗样也是很有可能的。
但是要坚持下来真的不容易,囧辉现在回忆起那无数个寂寞的夜晚,眼角不禁湿润了。这边有本武林秘籍可能对坚持学习有一点帮助:如何养成学习的习惯,希望能助你成功。
有同学可能会有疑惑,修仙不是有十层,怎么只介绍了三层?
答:小弟才疏学浅,自认为目前在第四层修炼中。
怎么判断自己有没有走火入魔?
答:如果你觉得自己在这过程中学到了不少东西,但是发现不懂的东西更多了,说明你大概率是走在正确的修仙路上,祝大家早日修成正果。
囧辉你变了,你再也不是那个安静的美男子了。
答:听到这句话,囧辉的眼角又一次湿润了。囧辉曾经励志要做一个有骨气的技术博主,不搞花里胡哨的,但是后来偶然的机会囧辉回看了一篇自己1年前的博文时,内心的OS是:这是什么狗屎,又臭又长。
因此,后续囧辉在创作时,会尽量避免通篇源码分析,尽量以更通俗易懂的文字和图片来呈现,同时夹带着一点骚气。
越努力,越幸运。老铁们的【点赞】【转发】是囧辉创作的最大动力。