关于 JavaGuide 的相关介绍请看:关于 JavaGuide 的一些说明 。
准备面试的小伙伴可以考虑面试专版:《Java 面试进阶指南》 ,欢迎加入我的星球获取更多实用干货。
阿里云最近在做活动,服务器不到 10 元/月,小伙伴们搭建一个网站提高简历质量。支持国内开源做的比较好的公司!点击此链接直达活动首页。
《JavaGuide 面试突击版》PDF 版本+3 本 PDF Java 学习手册,在公众号 JavaGuide 后台回复“面试突击”即可获取。
如果 Github 访问速度比较慢或者图片无法刷新出来的话,可以转移到码云查看,或者在线阅读。如果你要提交 issue 或者 pr 的话请到 Github 提交。
如要进群或者请教问题,请联系我 (备注来自 Github。请直入问题,工作时间不回复)。
开始阅读之前必看 :完结撒花!JavaGuide 面试突击版来啦! 。
![]() |
![]() |
知识点/面试题:
重要知识点详解:
- 枚举 (很重要的一个数据结构,用好枚举真的没有那么简单!)
- Java 常见关键字总结:final、static、this、super!
- 什么是反射机制?反射机制的应用场景有哪些?
- 代理模式详解:静态代理+JDK/CGLIB 动态代理实战
- BIO,NIO,AIO 总结
- Java 容器常见面试题/知识点总结(推荐!)
- 源码分析 :ArrayList源码+扩容机制分析 、LinkedList 源码 、HashMap(JDK1.8)源码+底层数据结构分析 、[ConcurrentHashMap 源码+底层数据结构分析](docs/java/collection/ConcurrentHashMap 源码+底层数据结构分析.md)
并发这部分内容非常重要,还是面试中的重点中的重点!但是,学习起来难度较大,因此我写了:多线程学习指南 帮助你学习。
知识点/面试题:
重要知识点详解:
- 线程池:Java 线程池学习总结、拿来即用的线程池最佳实践
- 乐观锁与悲观锁
- ThreadLocal 关键字解析
- 并发容器总结
- JUC 中的 Atomic 原子类总结
- AQS 原理以及 AQS 同步组件总结
- Java 内存区域
- JVM 垃圾回收
- JDK 监控和故障处理工具
- 类文件结构
- 类加载过程
- 类加载器
- 【待完成】最重要的 JVM 参数指南(翻译完善了一半)
- JVM 配置常用参数和常用 GC 调优策略
- 【加餐】大白话带你认识 JVM
- Java 8 :Java 8 新特性总结、Java 8 学习资源推荐、Java8 forEach 指南
- Java9~Java14 : [一文带你看遍 JDK9
14 的重要新特性!](./docs/java/new-features/一文带你看遍JDK914 的重要新特性!.md)
算法这部分内容非常重要,如果你不知道如何学习算法的话,可以看下我写的:《硬核的算法学习书籍+资源推荐》 。
常见算法问题总结:
总结:
重要知识点:
如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 《J2EE 基础知识》 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对Java 后台技术发展有更深的认识。
知识点/面试题:
重要知识点详解:
认证授权基础:搞清 Authentication,Authorization 以及 Cookie、Session、Token、OAuth 2、SSO
SSO(Single Sign On)即单点登录说的是用户登陆多个子系统的其中一个就有权访问与其相关的其他系统。举个例子我们在登陆了京东金融之后,我们同时也成功登陆京东的京东超市、京东家电等子系统。相关阅读:SSO 单点登录看这篇就够了!
用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch(推荐) 和 Solr。
让调用远程服务调用像调用本地方法那样简单。
网关主要用于请求转发、安全认证、协议转换、容灾。
在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求。相关阅读:为什么要分布式 id ?分布式 id 生成方案有哪些?
前两篇文章可能有内容重合部分,推荐都看一遍。
消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: 消息队列总结 。
- RabbitMQ : RabbitMQ 入门
- RocketMQ : RocketMQ 入门、RocketMQ 的几个简单问题与答案
- Kafka :Kafka 常见面试题总结
读写分离主要是为了将数据库的读和写操作分不到不同的数据库节点上。主服务器负责写,从服务器负责读。另外,一主一从或者一主多从都可以。
读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。
分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。 常见的分库分表工具有:sharding-jdbc
(当当)、TSharding
(蘑菇街)、MyCAT
(基于Cobar)、Cobar
(阿里巴巴)...。
推荐使用 sharding-jdbc
。 因为,sharding-jdbc
是一款轻量级 Java
框架,以 jar
包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。
高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。相关阅读: 《如何设计一个高可用系统?要考虑哪些地方?》 。
CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。
BASE 是 Basically Available(基本可用) 、Soft-state(软状态) 和 Eventually Consistent(最终一致性) 三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,它大大降低了我们对系统的要求。
限流为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。比如某一接口的请求限制为 100 个每秒, 对超过限制的请求放弃处理或者放到队列中等待处理。限流可以有效应对突发请求过多。相关阅读:限流算法有哪些?
限流是从用户访问压力的角度来考虑如何应对故障,降级是从系统功能优先级的角度考虑如何应对故障
服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。根据服务方式:可以拒接服务,可以延迟服务,也有时候可以随机服务。根据服务范围:可以砍掉某个功能,也可以砍掉某些模块。总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好。
熔断和降级是两个比较容易混淆的概念,因为单纯从名字上看好像都有禁止某个功能的意思,但其实内在含义是不同的,原因在于降级的目的是应对系统自身的故障,而熔断的目的是应对依赖的外部系统故障的情况。
另类的一种限流,类比于现实世界的排队。玩过英雄联盟的小伙伴应该有体会,每次一有活动,就要经历一波排队才能进入游戏。
- Java :JAD 反编译、手把手教你定位常见 Java 性能问题
- Git :Git 入门
- Docker : Docker 基本概念解读 、一文搞懂 Docker 镜像的常用操作!
这部分很多内容比如大厂面经、真实面经分析被移除,详见完结撒花!JavaGuide 面试突击版来啦!。
- 【备战面试 1】程序员的简历就该这样写
- 【备战面试 2】初出茅庐的程序员该如何准备面试?
- 【备战面试 3】7 个大部分程序员在面试前很关心的问题
- 【备战面试 4】Github 上开源的 Java 面试/学习相关的仓库推荐
- 【备战面试 5】如果面试官问你“你有什么问题问我吗?”时,你该如何回答
- 【备战面试 6】应届生面试最爱问的几道 Java 基础问题
- 【备战面试 6】美团面试常见问题总结(附详解答案)
- Netty 总结
- 数据结构总结重构(---正在进行中---)
项目的发展离不开你的支持,如果 JavaGuide 帮助到了你找到自己满意的 offer,请作者喝杯咖啡吧 ☕ 后续会继续完善更新!加油!
下面是笔主收集的一些对本仓库提过有价值的 pr 或者 issue 的朋友,人数较多,如果你也对本仓库提过不错的 pr 或者 issue 的话,你可以加我的微信与我联系。下面的排名不分先后!
如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号。
《Java 面试突击》: 由本文档衍生的专为面试而生的《Java 面试突击》V2.0 PDF 版本公众号后台回复 "Java 面试突击" 即可免费领取!
Java 工程师必备学习资源: 一些 Java 工程师常用学习资源公众号后台回复关键字 “1” 即可免费无套路获取。