跳槽季如何快速全面复习面试题

去年的这个时候楼主经过两个月的复习拿到了阿里巴巴的 offer,有一些运气,也有一些心得,借着跳槽季来临特此分享出来。
简单梳理一下个人复习思路,同时也但愿和你们一块儿交流讨论,一块儿学习,若是不对之处欢迎指正一块儿学习。本文便是复习思路,亦可当作学习思路。git

我大体把 JAVA 的复习分为以下几个方向。github

  • JVM;
  • 排序算法和 Java 集合&工具类;
  • 多线程和并发包;
  • 存储相关:Redis 、Elastic Search、MySQL;
  • 框架:Spring,SpringMVC,Spring Boot
  • 分布式:Dubbo;
  • 设计模式;

下面简单说一下如何复习上面的知识,首先明确,楼主不会讲解具体的知识点,而是一个思路,纵观互联网上面的帖子、文章误人子弟的多一些,因此就不误人子弟了,而是推荐分析出知识点而后以看书为主。毕竟书是多方校对权威出版的读物。面试

JVM

JVM 是每个开发人员必备的技能,推荐看国内比较经典的 JVM 书籍,里面包含JVM的内存接口,类的加载机制等基础知识,是否是以为这些在面试中似曾相识?因此对于 JVM 方面的知识的巩固与其在网上看一些零零碎碎的文章不如啃一下这本书。固然在啃书的时候切记不能图快,你对知识的积累不是经过看书的数量来决定,而是看书的深度。因此在看每一章节的时候看到不懂的要配合网上的文章理解,而且须要看几篇文章理解,由于一篇文章极可能是错误的,楼主认为文章的可信度顺序,自建域名>*.github.io>SF>简书=博客园>CSDN>转载。这是购买书籍的地址,固然你能够选择在网上搜索一下 PDF 版本:《深刻理解 Java 虚拟机:JVM 高级特性与最佳实践(第 2 版)》,固然了若是你的英文好强烈推荐看 Oracle 最新发布的 JAVA 虚拟机规范。算法

排序算法和 Java 集合&工具类

排序算法和 Java 集合&工具类。这一个分类是每个人必须掌握的并熟练使用的,那么为何我把他们放在一块儿呢?
由于工具和集合类都源于算法,在准备算法复习以前你要理解,为何要必考算法。正式由于排序算法和咱们编程息息相关。举两个“栗子”。
你能够看一下Collections 中的mergeSort和sort 方法,你会发现 mergeSort 就是归并排序的实现,而 sort 方法结合了归并排序和插入排序,这样使得 sort 方法最差O(NlogN)最好能够达到O(N)的效果。那么只有你本身理解了排序方法的实现,才能更好的使用 JAVA 中的集合类啊?
第二个“栗子”,你们都听闻过 TopN 问题吧,常常在面试中遇到请写一下 TopN 的实现,说到算法他就是一个大顶堆,说到 JAVA 它是一个 PriorityQueue 的实现,那么你理解了 TopN 问题,知道他的时间复杂度,优缺点了,那么是否是即可以熟练运用 JAVA 的工具类写更高效的程序了?
之因此排序算法和 JAVA 集合&工具类 同样重要是由于他们和咱们天天的编程息息相关。面试官老是问排序算法也不是在难为你,而是在考察你的编程功底。因此呢你须要对着排序算法和基本的算法配合 JAVA 的集合类、工具类仔细的研究一番,这样才能更深刻的理解他们的关联关系。数据库

多线程和并发包

多线程和并发包,重要性就不累述了,直接说一下学习方法。你首先要理解多线程不只仅是 Thread 和 Runnable 那么简单,整个并发包下面的工具都是在为多线程服务。对于多线程的学习切不可看几篇面试文章,或者几个关键字 CountDownLatch,Lock 巴拉巴拉就觉得理解了多线程的精髓,楼主整理了一个大图

你须要针对这个大图或者本身梳理一个大图,对里面的类各个击破,他们的使用场景,优缺点。看的差很少你就会发现,其实他和 JAVA 集合类、工具类密不可分。那么天然把它列为重要知识点的缘由不言而喻。编程

Redis,MySQL,ElasticSearch

存储相关相关都是咱们平时经常使用的工具,Redis,MySQL,ElasticSearch。它的知识点分为两方面,一方面是你平时使用过程当中积累的经验,另外一方面是你对其的深刻理解。因此对这个地方的建议就是经过书籍来巩固技术知识, 《Redis设计与实现 (数据库技术丛书)》,《高性能 MySQL》,《ElasticSearch 权威指南》这三本数不必定是该领域最好的书籍,可是若是你吃透了,对于你对知识的理解和程序的设计一定有很大帮助。书里面的内容太多,仍是举两个“栗子”。
第一个“栗子”,使用 Redis 切不可只用他当作 key-value 缓存数据库。楼主了解到它的5种基本类型中一种类型叫作 sorted set。sorted set 里 items 内容大于 64 的时候同时使用了 hash 和 skiplist 两种设计实现。这也会为了排序和查找性能作的优化。添加和删除都须要修改 skiplist,因此复杂度为 O(log(n))。 可是若是仅仅是查找元素的话能够直接使用 hash,其复杂度为 O(1) ,其余的 range 操做复杂度通常为 O(log(n)),固然若是是小于 64 的时候,由于是采用了 ziplist 的设计,其时间复杂度为 O(n)。这样之后查询和更新阅读都变得简单,那是否是能够用其实现 TopN 的需求呢?这样相似的需求就不须要你查数据,再在内存里面计算和操做了。好比咱们简单的周排行,月排行均可以考虑使用这个数据结构实现,固然并不必定这是最好的解决方案,而是提供了一种解题思路。
另外一个“栗子”,PriorityQueue 是优先队列咱们上文已经了解,那么 ElasticSearch 的 query 也是用的优先队列分别在每个分片上面获取,而后再合并优先队列你了解吗?这个“栗子”告诉咱们其实算法是想通的,你理解一个即可以触类旁通举一反三。小程序

框架

一谈框架就想起来 Spring,一说 Spring 就想起来 IOC,AOP。由于你们都在用这个框架,因此对于框架也不须要看一些其余的,直接就深刻了解一下 Spring 就能够了。经过上面的叙述你已经了解了楼主的思路,看什么都要看他的实现原理,因此直接推荐你一本书《Spring 技术内幕》而后对着本身现有的 Spring 项目 Debug,从请求开始梳理知识点。楼主认为 Spring 出来这么久你们对基本的知识已经了然于胸,重要的是看其解决问题的思路和原理,栗子又来了。
好比须要实如今 Bean 刚刚初始化的时候作一些操做,InitializingBean 具体怎么使用,它的原理是什么,Spring Bean 的生命周期是什么样子,经过具体的使用场景逐步展开说明。 这样复习效果会更好一些。设计模式

分布式

这是一个老生常谈的话题,也是这几年比较火的话题,提及分布式就必定和 Dubbo 有关系,可是不能仅仅就理解到 Dubbo。首先咱们须要思考它解决的问题,为何要引入 Dubbo 这个概念。随着业务的发展、用户量的增加,系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代,应运而生的 Dubbo 出现了,它做为 RPC 的出现使得咱们搭建微服务项目变得简单,可是咱们不只仅要思考 Dubbo带来的框架支撑。同时须要思考服务的幂等,分布式事务,服务之间的 Trace 定位,数据对帐,重试机制等,于此同时考虑 MQ 对系统的解耦和压力的分担、数据库分布式部署和分库分表、限流、熔断等机制。因此最终总结是不只仅要看 Dubbo 的使用,原理同时还要思考上下游和一些系统设计的问题,这块相对的知识点较多,能够有一个初步的概念而后各个击破。缓存

设计模式

设计模式不少,可是经常使用的就几种,楼主认为这个地方能够分两个地方准备。
1,学以至用,设计模式不是背出来的,而是用出来了,平时多注意思考当前项目的设计,是否能够套用设计模式,固然必须先理解每个设计模式存在的意义。
2,在现有框架中思考设计模式的体现,上面已经讲过框架怎么学习,用 Spring 距离,它里面一共用了9种设计模式,你都知道用到哪里了吗?若是不知道,试着把他们找出来,同时思考为何这么设计,所有找到之后,基本的设计模式的用法和原理你也就都理解了。性能优化

关注

小编运营的微信订阅号 “码匠笔记”,就前后就任于 ThoughtWorks、阿里巴巴等互联网公司的经验分享,包含但不限于 JAVA、并发编程、性能优化、架构设计、小程序、开源软件等。有兴趣能够关注一波,一块儿学习、讨论。

关注

相关文章
相关标签/搜索