2 Star 7 Fork 3

朱慧培 / JavaGuide

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

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

👍推荐2021最新实战项目源码下载

书单已经被移动到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 容器常见问题总结 (必看 :+1:)
  2. 源码分析ArrayList 源码+扩容机制分析LinkedList 源码HashMap(JDK1.8)源码+底层数据结构分析ConcurrentHashMap 源码+底层数据结构分析

并发

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

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

重要知识点详解:

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

JVM (必看 :+1:)

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

重要知识点:

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

Redis

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

系统设计

编码之道(必看 :+1:)

  1. RestFul API 简明教程
  2. Java 编程规范以及优雅 Java 代码实践总结
  3. Java 命名之道

常用框架

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

Spring/SpringBoot (必看 :+1:)

知识点/面试题:

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

重要知识点详解:

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

MyBatis

Netty (必看 :+1:)

  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. Java 学习路线和方法推荐
  2. Java 培训四个月能学会吗?
  3. 新手学习 Java,有哪些 Java 相关的博客,专栏,和技术学习网站推荐?
  4. Java 还是大数据,你需要了解这些东西!

其他

贡献者

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

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

待办

  • 数据结构总结重构

优质原创PDF资源

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

捐赠支持

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

点击捐赠支持作者

联系我

公众号

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

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

我的公众号

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

暂无描述 展开 收起
Java
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/zhuhuipei/JavaGuide.git
git@gitee.com:zhuhuipei/JavaGuide.git
zhuhuipei
JavaGuide
JavaGuide
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891