Skip to content

「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!

License

Notifications You must be signed in to change notification settings

yuhuazhai/JavaGuide

 
 

Repository files navigation

👉 如果你不知道该学习什么的话,请看 Java 学习线路图是怎样的? (原创不易,欢迎点赞),这是 2021 最新最完善的 Java 学习路线!

👉 推荐 在线阅读 (Github 访问速度比较慢可能会导致部分图片无法刷新出来)

👉 书单已经被移动到awesome-cs 这个仓库。

  1. 介绍:关于 JavaGuide 的相关介绍请看:关于 JavaGuide 的一些说明
  2. PDF版本《JavaGuide 面试突击版》PDF 版本图解计算机基础 PDF 版
  3. 知识星球 : 简历指导/Java学习/面试指导/面试小册。欢迎加入我的知识星球 。星球内部更新的《Java面试进阶指北 打造个人的技术竞争力》这个小册的质量很高,专为面试打造。
  4. 面试专版 :准备面试的小伙伴可以考虑面试专版:《Java 面试进阶指南》
  5. 转载须知 :以下所有文章如非文首说明皆为我(Guide哥)的原创,转载在文首注明出处,如发现恶意抄袭/搬运,会动用法律武器维护自己的权益。让我们一起维护一个良好的技术创作环境!⛽️

阅读 公众号 公众号 投稿 投稿 投稿

Sponsor

Java

基础

知识点/面试题:(必看:+1: )

  1. Java 基础知识
  2. Java 基础知识疑难点/易错点

重要知识点详解:

  1. 枚举 (很重要的一个数据结构,用好枚举真的没有那么简单!)
  2. Java 常见关键字总结:final、static、this、super!
  3. 什么是反射机制?反射机制的应用场景有哪些?
  4. 代理模式详解:静态代理+JDK/CGLIB 动态代理实战
  5. 常见的 IO 模型有哪些?Java 中的 BIO、NIO、AIO 有啥区别?

容器

  1. Java 容器常见问题总结 (必看 👍)
  2. 源码分析ArrayList 源码+扩容机制分析LinkedList 源码HashMap(JDK1.8)源码+底层数据结构分析ConcurrentHashMap 源码+底层数据结构分析

并发

知识点/面试题: (必看 👍)

  1. Java 并发基础常见面试题总结
  2. Java 并发进阶常见面试题总结

重要知识点详解:

  1. 线程池Java 线程池学习总结拿来即用的线程池最佳实践
  2. ThreadLocal 关键字解析
  3. 并发容器总结
  4. JUC 中的 Atomic 原子类总结
  5. AQS 原理以及 AQS 同步组件总结

JVM (必看 👍)

  1. Java 内存区域
  2. JVM 垃圾回收
  3. JDK 监控和故障处理工具
  4. 类文件结构
  5. 类加载过程
  6. 类加载器
  7. 【待完成】最重要的 JVM 参数指南(翻译完善了一半)
  8. 【加餐】大白话带你认识 JVM

新特性

  1. Java 8Java 8 新特性总结Java8常用新特性总结Java 8 学习资源推荐Java8 forEach 指南
  2. Java9~Java14 : 一文带你看遍 JDK9~14 的重要新特性!

网络

  1. 计算机网络常见面试题
  2. 计算机网络基础知识总结

操作系统

  1. 操作系统常见问题总结!
  2. 后端程序员必备的 Linux 基础知识
  3. Shell 编程入门

数据结构与算法

数据结构

算法

算法这部分内容非常重要,如果你不知道如何学习算法的话,可以看下我写的:

常见算法问题总结:

数据库

MySQL

总结:

  1. MySQL知识点总结 (必看 👍)
  2. 阿里巴巴开发手册数据库部分的一些最佳实践
  3. 一千行 MySQL 学习笔记
  4. MySQL 高性能优化规范建议

重要知识点:

  1. MySQL数据库索引总结
  2. 事务隔离级别(图文详解)
  3. 一条 SQL 语句在 MySQL 中如何执行的
  4. 关于数据库中如何存储时间的一点思考

Redis

  1. Redis 常见问题总结
  2. 面试/工作必备!3种常用的缓存读写策略!

系统设计

系统设计必备基础

RESTful API

我们在进行后端开发的时候,主要的工作就是为前端或者其他后端服务提供 API 比如查询用户数据的 API 。RESTful API 是一种基于 REST 构建的 API,它是一种被设计的更好使用的 API。

相关阅读:RestFul API 简明教程

命名

编程过程中,一定要重视命名。因为好的命名即是注释,别人一看到你的命名就知道你的变量、方法或者类是做什么的!

相关阅读: Java 命名之道

常用框架

如果你没有接触过 Java Web 开发的话,可以先看一下我总结的 《J2EE 基础知识》 。虽然,这篇文章中的很多内容已经淘汰,但是可以让你对 Java 后台技术发展有更深的认识。

Spring/SpringBoot (必看 👍)

知识点/面试题:

  1. Spring 常见问题总结
  2. SpringBoot 入门指南
  3. 面试常问:“讲述一下 SpringBoot 自动装配原理?”

重要知识点详解:

  1. Spring/Spring Boot 常用注解总结!安排!
  2. Spring 事务总结
  3. Spring 中都用到了那些设计模式?

MyBatis

Netty (必看 👍)

  1. 剖析面试最常见问题之 Netty(上)
  2. 剖析面试最常见问题之 Netty(下)

ZooKeeper

前两篇文章可能有内容重合部分,推荐都看一遍。

  1. 【入门】ZooKeeper 相关概念总结
  2. 【进阶】ZooKeeper 相关概念总结
  3. 【实战】ZooKeeper 实战

安全

认证授权

《认证授权基础》 这篇文章中我会介绍认证授权常见概念: Authentication,Authorization 以及 CookieSession、Token、OAuth 2SSO 。如果你不清楚这些概念的话,建议好好阅读一下这篇文章。

数据脱敏

数据脱敏说的就是我们根据特定的规则对敏感信息数据进行变形,比如我们把手机号、身份证号某些位数使用 * 来代替。

分布式

CAP 理论

CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。

关于 CAP 的详细解读请看:《CAP理论解读》

BASE 理论

BASEBasically Available(基本可用)Soft-state(软状态)Eventually Consistent(最终一致性) 三个短语的缩写。BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。

关于 BASE 的详细解读请看:《BASE理论解读》

Paxos 算法和 Raft 算法

Paxos 算法诞生于 1990 年,这是一种解决分布式系统一致性的经典算法 。但是,由于 Paxos 算法非常难以理解和实现,不断有人尝试简化这一算法。到了2013 年才诞生了一个比 Paxos 算法更易理解和实现的分布式一致性算法—Raft 算法

搜索引擎

用于提高搜索效率,功能和浏览器搜索引擎类似。比较常见的搜索引擎是 Elasticsearch(推荐) 和 Solr。

RPC

RPC 让调用远程服务调用像调用本地方法那样简单。

Dubbo 是一款国产的 RPC 框架,由阿里开源。相关阅读:

API 网关

网关主要用于请求转发、安全认证、协议转换、容灾。

  1. 为什么要网关?你知道有哪些常见的网关系统?
  2. 如何设计一个亿级网关(API Gateway)?

分布式 id

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如数据量太大之后,往往需要对进行对数据进行分库分表,分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求。相关阅读:为什么要分布式 id ?分布式 id 生成方案有哪些?

分布式事务

分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。

简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

微服务

  1. 大白话入门 Spring Cloud
  2. 微服务/分布式大厂真实面试问题解答

高并发

消息队列

消息队列在分布式系统中主要是为了解耦和削峰。相关阅读: 消息队列常见问题总结

  1. RabbitMQ : RabbitMQ 入门
  2. RocketMQ : RocketMQ 入门RocketMQ 的几个简单问题与答案
  3. KafkaKafka 常见问题总结

读写分离&分库分表

读写分离主要是为了将数据库的读和写操作分不到不同的数据库节点上。主服务器负责写,从服务器负责读。另外,一主一从或者一主多从都可以。

读写分离可以大幅提高读性能,小幅提高写的性能。因此,读写分离更适合单机并发读请求比较多的场景。

分库分表是为了解决由于库、表数据量过大,而导致数据库性能持续下降的问题。

常见的分库分表工具有:sharding-jdbc(当当)、TSharding(蘑菇街)、MyCAT(基于 Cobar)、Cobar(阿里巴巴)...。 推荐使用 sharding-jdbc。 因为,sharding-jdbc 是一款轻量级 Java 框架,以 jar 包形式提供服务,不要我们做额外的运维工作,并且兼容性也很好。

相关阅读: 读写分离&分库分表常见问题总结

负载均衡

负载均衡系统通常用于将任务比如用户请求处理分配到多个服务器处理以提高网站、应用或者数据库的性能和可靠性。

常见的负载均衡系统包括 3 种:

  1. DNS 负载均衡 :一般用来实现地理级别的均衡。
  2. 硬件负载均衡 : 通过单独的硬件设备比如 F5 来实现负载均衡功能(硬件的价格一般很贵)。
  3. 软件负载均衡 :通过负载均衡软件比如 Nginx 来实现负载均衡功能。

高可用

高可用描述的是一个系统在大部分时间都是可用的,可以为我们提供服务的。高可用代表系统即使在发生硬件故障或者系统升级的时候,服务仍然是可用的 。

相关阅读: 如何设计一个高可用系统?要考虑哪些地方?

限流

限流是从用户访问压力的角度来考虑如何应对系统故障。

限流为了对服务端的接口接受请求的频率进行限制,防止服务挂掉。比如某一接口的请求限制为 100 个每秒, 对超过限制的请求放弃处理或者放到队列中等待处理。限流可以有效应对突发请求过多。相关阅读:限流算法有哪些?

降级

降级是从系统功能优先级的角度考虑如何应对系统故障。

服务降级指的是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。

熔断

熔断和降级是两个比较容易混淆的概念,两者的含义并不相同。

降级的目的在于应对系统自身的故障,而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。

排队

另类的一种限流,类比于现实世界的排队。玩过英雄联盟的小伙伴应该有体会,每次一有活动,就要经历一波排队才能进入游戏。

集群

相同的服务部署多份,避免单点故障。

超时和重试机制

一旦用户的请求超过某个时间得不到响应就结束此次请求并抛出异常。 如果不进行超时设置可能会导致请求响应速度慢,甚至导致请求堆积进而让系统无法在处理请求。

另外,重试的次数一般设为 3 次,再多次的重试没有好处,反而会加重服务器压力(部分场景使用失败重试机制会不太适合)。

大型网站架构

工具

  1. JavaJAD 反编译手把手教你定位常见 Java 性能问题
  2. GitGit 入门
  3. GithubGithub小技巧
  4. Docker : Docker 基本概念解读Docker从入门到上手干事

Java 学习常见问题汇总

  1. 2021最新 Java 学习路线!凎!
  2. Java 培训四个月能学会吗?
  3. 新手学习 Java,有哪些 Java 相关的博客,专栏,和技术学习网站推荐?
  4. Java 还是大数据,你需要了解这些东西!

其他

贡献者

你可以点此链接查看JavaGuide的所有贡献者。 感谢你们让 JavaGuide 变得更好!如果你们来到武汉一定要找我,我请你们吃饭玩耍。

悄悄话:JavaGuide 会不定时为贡献者们送福利。

待办

  • 数据结构总结重构

优质原创PDF资源

为了避免恶意传播,微信搜“Github掘金计划”后台回复 “006” 即可获取。

捐赠支持

项目的发展离不开你的支持,如果 JavaGuide 帮助到了你找到自己满意的 offer,请作者喝杯咖啡吧 ☕ 后续会继续完善更新!加油!

点击捐赠支持作者

联系我

公众号

如果大家想要实时关注我更新的文章以及分享的干货的话,可以关注我的公众号“JavaGuide”。

《Java 面试突击》: 由本文档衍生的专为面试而生的《Java 面试突击》V4.0 PDF 版本公众号后台回复 "面试突击" 即可领取!

我的公众号

About

「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%