面试以前先刷几篇面经,或者作几道热门面试题,想必是你们很熟悉的一种复习方式了,就像咱们当年常常作五年高考三年模拟同样。可是可不要把面试题和面经当成你的主要复习方式,它只是锦上添花,绝非雪中送炭!前端
面经是别人的面试经验,所谓前车可鉴,后事之师。咱们能够经过面筋对本身的不足查缺补漏,却不能把这些面试题等同于咱们所要掌握的知识点。缘由很简单,两篇面经可能会有不少的重复知识点,100篇面经也没法包含全部知识点,因此在只刷面经的问题就是:重复多、不全面。python
其实笔者之前也很喜欢刷面经,在面试前几天把该公司这个岗位的面经刷一遍,面试时仍是能够遇到不少相似的问题的。这种作法短时间内效果确实好,可是若是从长计议,只刷面经的复习方法实为下策。程序员
做者在春招时才发现问题的严重性,吃了很多亏,简单来讲就是:别人的面试题和面试总结看了又忘,忘了又看,本质性的东西没有掌握。面试
在春招刚刚结束的这段时间,我总结了一下春招面试过程当中的一些问题,主要就是:以前学过的东西忘记了不少,特别是那些理解的不够深的知识点,老是特别容易忘记。另外我发现,虽然我在笔记中记录了不少的知识点和面试题,可是每每我只看过一次,不会再去看第二次。算法
这也意味着,虽然记录的内容不少,可是真正消化吸取的内容不多,脑子里充斥着老是那些零碎的知识点和面试问题,对于完整的知识体系知之甚少。这些问题在春招期间也不断地暴露出来,让我思考了好久。sql
面对如此窘境,我想作出改变,趁着如今时间充裕,我想要为这些内容作一次减法,而且借此机会,推翻本身原有的知识体系,重建新的知识框架。简单说来,就是从新开始学习Java后端,此次我要用一种更高效的方式,避免走以前走的弯路,要用最高效,最合理的方式去复习。因为我以前已经有基础,因此我对完成这一目标有信心,相应地我也为此作出了明确且详细的学习计划。数据库
忘记过去,才能更好地开始。固然,也不是真的要你们忘记之前学过的知识点,只是建议各位把以前学的不扎实的技术从新地学一遍,不要只凭着印象去记忆知识点。编程
前面提到我在秋招前完成了知识体系重建,那在这里我也想跟你们分享一下我当时大体的知识体系构成。就跟我前面说的同样,我选择从新再学一遍Java后端相关的技术内容,由于我知道大体的学习方向,而且有必定的基础,因此看不少文章变得更加驾轻就熟,写文章和作总结也更加有底气了。segmentfault
首先在Java基础方面,我写了20多篇原创博客,主要是对Java核心技术的解析,好比"Java反射"、"Java序列化和反序列化"、"Java异常体系"等等。后端
在Java集合类方面,我原创了部分文章,另外整合了一些比较好的技术文章,其中最主要的就是关于hashmap的文章,当时我整合的文章几乎没有遗漏任何一个知识点。
在Java并发编程方面,我主要参考了并发编程网以及一些优质博客的文章,先搞懂了Java并发原理,再一步步学习JUC并发包的组件,其中重点看了chm,并发工具类以及阻塞队列等JDK源码的解析文章,除此以外,我还会在IDE中跑JUC相关的emo,毕竟这方面的内容很是须要实践。
在Java网络编程方面,我先从最基础的socket入手,再讲到NIO,AIO,而且加入了几篇对Linux IO模型解析的文章,让整个知识体系更加完整(由于NIO是基于Linux Epoll实现的),接着我又加入了对Netty的探讨,以及Tomcat中对NIO的应用,能够说是把Java网络编程一些比较重要的部分都囊括进来了。为了更好理解这部份内容,我也在网上参考了不少客户端和服务端通讯的demo,最后我分别用Socket,NIO,AIO以及Netty把C/S 通讯的demo都写了一遍。
在JVM虚拟机方面,我则按照《深刻理解JVM虚拟机》这本书的行文脉络进行文章的整理。在搞定JVM基本原理之后,我着重了解了JVM调优和实践中常遇到的问题,而且整理了经常使用的JVM调优工具,场景问题以及调优实践的案例,这也是由于面试中对JVM调优实践愈来愈重视了。
在JavaWeb方面,我从JavaWeb相关技术的发展入手,一步步了解了每种技术存在的意义,好比JSP,Servlet,JDBC,Spring等等,而后对每种技术进行了比较全面的了解,而且着重地看了Spring和SpringMVC的源码分析文章,另一方面,我花了不少时间去研究Tomcat的工做原理。除此以外,JavaWeb项目中经常使用的maven,日志组件,甚至是单测试组件,也归入了个人系列文章里。
在数据库和缓存方面,我主要学习了MySQL和Redis这两种最经常使用的数据库。对于Mysql,我从简单的sql开始了解,而后开始了解sql优化,MySQL的存储引擎和索引,事务及锁,还有更复杂的主从复制,分库分表等内容。对于Redis,我也是从简单的api入手,而后去了解每一种数据结构的底层实现原理,接着尝试去学习Redis的持久化方式,以及做为缓存常须要考虑的技术点,固然,也包括Redis的分布式锁实现,以及它的分布式集群方案。
最后一部分就是分布式相关的理论和技术了,这个也是困扰我好久的一块内容,我主要把这块内容分为两个部分,分别是分布式理论和分布式技术,理论方面,我先了解CAP,BASE等基本知识,而后开始学习一致性协议和算法,接着探讨分布式事务。
对于分布式技术,涉及的东西就更多了,例如分布式session,负载均衡,分布式锁等内容,这些知识点我都会用一到两篇文章去总结,对于分布式缓存,消息队列,以及分布式服务等内容,我会花比较多的时间去全面学习,而后总结出一个系列的文章出来。固然,对于这些技术的学习主要仍是停留在理论方面,在本身的项目中能用到的比较少。
至此,个人知识体系基本构建完成,这也是我在秋招中可以成功闯过那么多面试的缘由。
黄小斜是 985 硕士,阿里巴巴Java工程师,在自学编程、技术求职、Java学习等方面有丰富经验和独到看法,但愿帮助到更多想要从事互联网行业的程序员们。
做者专一于 JAVA 后端技术栈,热衷于分享程序员干货、学习经验、求职心得,以及自学编程和Java技术栈的相关干货。
黄小斜是一个斜杠青年,坚持学习和写做,相信终身学习的力量,但愿和更多的程序员交朋友,一块儿进步和成长!
原创电子书:
关注微信公众号【程序员黄小斜】后回复【原创电子书】便可领取我原创的电子书《菜鸟程序员修炼手册:从技术小白到阿里巴巴Java工程师》这份电子书总结了我2年的Java学习之路,包括学习方法、技术总结、求职经验和面试技巧等内容,已经帮助不少的程序员拿到了心仪的offer!
英雄不问出处,编程不看出身。这里是自学编程爱好者的汇集地,也是程序员IT学习资源的藏经阁。点击关注,一块儿成为更优秀的程序员!
程序员3T技术学习资源: 一些程序员学习技术的资源大礼包,关注公众号【程序员江湖】后,后台回复关键字 “资料” 便可免费无套路获取,包括Java、python、C++、大数据、机器学习、前端、移动端等方向的技术资料。
关注公众号【程序员江湖】后回复「Java」、「Python」、「C++」、「大数据」、「算法」、「AI」、「Android」、「前端」、「iOS」、「BAT」、「校招」、「笔试」、「面试」、「计算机基础」、「LeetCode」 等关键字能够获取对应的免费程序员学习资料。