mirror of
https://github.com/Snailclimb/JavaGuide
synced 2025-06-20 22:17:09 +08:00
309 lines
20 KiB
Markdown
309 lines
20 KiB
Markdown
---
|
||
title: Java
|
||
category: 计算机书籍
|
||
---
|
||
|
||
## Java 基础
|
||
|
||
如果你之前没有学习过编程的话,我建议你可以看看视频教程。
|
||
|
||
像尚硅谷的 [《 Java 基础教程系列》](https://www.bilibili.com/video/BV1Kb411W75N) 和韩顺平老师的[《零基础 30 天学会 Java》](https://www.bilibili.com/video/BV1fh411y7R8)就很不错。
|
||
|
||

|
||
|
||
学习过 Java 的朋友,大部分应该都看过韩老师的课程吧!韩老师毕业于清华大学,录制的视频课程质量都非常高。内容易懂,并且不失严谨。
|
||
|
||
韩老师的[《零基础 30 天学会 Java》](https://www.bilibili.com/video/BV1fh411y7R8)系列不光会教你 Java 基础,还会帮你建立编程思想,让你知道学习了 Java 之后,你可以从事什么工作。
|
||
|
||
看视频的同时,配套一本好书也是非常有作用的。
|
||
|
||
**[《Head First Java》](https://book.douban.com/subject/2000732/)** 这本书在是入门 Java 的很不错的书籍 。
|
||
|
||

|
||
|
||
《Head First Java》这本书的内容很轻松有趣,可以说是我学习编程初期最喜欢的几本书之一了。同时,这本书也是我的 Java 启蒙书籍。我在学习 Java 的初期多亏了这本书的帮助,自己才算是跨进 Java 语言的大门。
|
||
|
||
我觉得我在 Java 这块能够坚持下来,这本书有很大的功劳。我身边的的很多朋友学习 Java 初期都是看的这本书。
|
||
|
||
有很多小伙伴就会问了:**这本书适不适合编程新手阅读呢?**
|
||
|
||
我个人觉得这本书还是挺适合编程新手阅读的,毕竟是 “Head First” 系列。
|
||
|
||

|
||
|
||
**[《Java 核心技术卷 1+卷 2》](https://book.douban.com/subject/34898994/)** 这两本书也非常不错。不过,这两本书的内容很多,全看的话比较费时间。我现在是把这两本书当做工具书来用,就比如我平时写文章的时候,碰到一些 Java 基础方面的问题,经常就翻看这两本来当做参考!
|
||
|
||
我当时在大学的时候就买了两本放在寝室,没事的时候就翻翻。建议有点 Java 基础之后再读,介绍的还是比较深入和全面的,非常推荐。
|
||
|
||

|
||
|
||
**[《Java 编程思想 》](https://book.douban.com/subject/2130190/)** 这本书被很多人称之为 Java 领域的圣经(_感觉有点过了~~~_)。不太推荐编程初学者阅读,有点劝退的味道,稍微有点基础后阅读更好。
|
||
|
||
我第一次看的时候还觉得有点枯燥,那时候还在上大二,看了 1/3 就没看下去了。
|
||
|
||

|
||
|
||
另外,Java 8 算是一个里程碑式的版本,现在一般企业还是用 Java 8 比较多。掌握 Java 8 的一些新特性比如 Lambda、Strean API 还是挺有必要的。这块的话,我推荐 **[《Java 8 实战》](https://book.douban.com/subject/26772632/)** 这本书。
|
||
|
||
学完 Java 基础之后,你可以用自己学的东西实现一个简单的 Java 程序,也可以尝试用 Java 解决一些编程问题,以此来将自己学到的东西付诸于实践。
|
||
|
||
不太建议学习 Java 基础的之后通过做游戏来巩固。为什么培训班喜欢通过这种方式呢?说白点就是为了找到你的 G 点。新手学习完 Java 基础后做游戏一般是不太现实的,还不如找一些简单的程序问题解决一下比如简单的算法题。
|
||
|
||
记得多总结!打好基础!把自己重要的东西都记录下来。 API 文档放在自己可以看到的地方,以备自己可以随时查阅。为了能让自己写出更优秀的代码,《Effective Java》、《重构》 这两本书没事也可以看看。
|
||
|
||
## Java并发
|
||
|
||
多线程这部分内容稍微会比较难以理解和实践。如果你刚学完 Java 基础的话,我建议你学习并发这部分内容的时候,可以先简单地了解一下基础知识比如线程和进程的对比。到了后面,你对于 Java 了解的更深了之后,再回来仔细看看这部分的内容。
|
||
|
||
下面是一些我比较推荐的书籍。
|
||
|
||
**[《Java 并发编程之美》](https://book.douban.com/subject/30351286/)**
|
||
|
||

|
||
|
||
_这本书还是非常适合我们用来学习 Java 多线程的。这本书的讲解非常通俗易懂,作者从并发编程基础到实战都是信手拈来。_
|
||
|
||
另外,这本书的作者加多自身也会经常在网上发布各种技术文章。这本书也是加多大佬这么多年在多线程领域的沉淀所得的结果吧!他书中的内容基本都是结合代码讲解,非常有说服力!
|
||
|
||
**[《实战 Java 高并发程序设计》](https://book.douban.com/subject/30358019/)**
|
||
|
||

|
||
|
||
这个是我第二本要推荐的书籍,比较适合作为多线程入门/进阶书籍来看。这本书内容同样是理论结合实战,对于每个知识点的讲解也比较通俗易懂,整体结构也比较清。
|
||
|
||
**[《深入浅出 Java 多线程》](https://github.com/RedSpider1/concurrent)**
|
||
|
||

|
||
|
||
这本书是几位大厂的大佬开源的。
|
||
|
||
这几位作者为了写好《深入浅出 Java 多线程》这本书阅读了大量的 Java 多线程方面的书籍和博客,然后再加上他们的经验总结、Demo 实例、源码解析,最终才形成了这本书。
|
||
|
||
这本书的质量也是非常过硬!给作者们点个赞!这本书有统一的排版规则和语言风格、清晰的表达方式和逻辑。并且每篇文章初稿写完后,作者们就会互相审校,合并到主分支时所有成员会再次审校,最后再通篇修订了三遍。
|
||
|
||
**[《Java 并发实现原理:JDK 源码剖析》](https://book.douban.com/subject/35013531/)**
|
||
|
||

|
||
|
||
这本书是 2020 年新出的,所以,现在知道的人还不是很多。
|
||
|
||
这本书主要是对 Java Concurrent 包中一些比较重要的源码进行了讲解,另外,像 JMM、happen-before、CAS 等等比较重要的并发知识这本书也都会一并介绍到。
|
||
|
||
不论是你想要深入研究 Java 并发,还是说要准备面试,你都可以看看这本书。
|
||
|
||
下面是我总结的一些关于并发的小问题,你可以拿来自测:
|
||
|
||
1. 什么是线程和进程? 线程与进程的关系,区别及优缺点?
|
||
2. 说说并发与并行的区别?
|
||
3. 为什么要使用多线程呢?
|
||
4. 使用多线程可能带来什么问题?(内存泄漏、死锁、线程不安全等等)
|
||
5. 创建线程有哪几种方式?(a.继承 Thread 类;b.实现 Runnable 接口;c. 使用 Executor 框架;d.使用 FutureTask)
|
||
6. 说说线程的生命周期和状态?
|
||
7. 什么是上下文切换?
|
||
8. 什么是线程死锁?如何避免死锁?
|
||
9. 说说 `sleep()` 方法和 `wait()` 方法区别和共同点?
|
||
10. Java 内存模型(JMM)、重排序与 happens-before 原则了解吗?
|
||
11. `synchronized` 关键字、volatile 关键字
|
||
12. `ThreadLocal` 有啥用(解决了什么问题)?怎么用?原理了解吗?内存泄露问题了解吗?
|
||
13. 为什么要用线程池?`ThreadPoolExecutor` 类的重要参数了解吗?`ThreadPoolExecutor` 饱和策略了解吗?线程池原理了解吗?几种常见的线程池了解吗?为什么不推荐使用`FixedThreadPool`?如何设置线程池的大小?
|
||
14. AQS 了解么?原理?AQS 常用组件:`Semaphore` (信号量)、`CountDownLatch` (倒计时器) `CyclicBarrier`(循环栅栏)
|
||
15. `ReentrantLock` 、 `ReentrantReadWriteLock` 、`StampedLock`(JDK8)
|
||
16. CAS 了解么?原理?
|
||
17. Atomic 原子类
|
||
18. 并发容器:`ConcurrentHashMap` 、 `CopyOnWriteArrayList` 、 `ConcurrentLinkedQueue` `BlockingQueue` 、`ConcurrentSkipListMap`
|
||
19. `Future` 和 `CompletableFuture`
|
||
20. ......
|
||
|
||
## JVM
|
||
|
||
**为什么要学习 JVM?** 对于 Java 程序员来说,JVM 帮助我们做了很多事情比如内存管理、垃圾回收等等。在 JVM 的帮助下,我们的程序出现内存泄漏这些问题的概率相对来说是比较低的。但是,这并不代表我们在日常开发工作中不会遇到。万一你在工作中遇到了 OOM 问题,你至少要知道如何去排查和解决问题吧!并且,就单纯从面试角度来说,JVM 是 Java 后端面试(大厂)中非常重要的一环。不论是应届还是社招,面试国内的一些大厂,你都会被问到很多 JVM 相关的问题(应届的话侧重理论,社招实践)。
|
||
|
||
**只有搞懂了 JVM 才有可能真正把 Java 语言“吃透”。** 学习 JVM 这部分的内容,一定要注意要实战和理论结合。
|
||
|
||
**什么时候可以开始学习 JVM 呢?** 理论上来说,学完了 Java 基础就可以学习 JVM。不过,由于 JVM 部分的知识还是有点难度的。我建议你可以在熟练使用 Java 语言解决一些实际问题之后(比如搭建网站)再开始学习 JVM。另外,学习 JVM 之前,最好提前学习一下并发编程。
|
||
|
||
书籍的话,**[《深入理解 Java 虚拟机》](https://book.douban.com/subject/34907497/)** 这本书是首先要推荐的。
|
||
|
||

|
||
|
||
这本书就一句话形容:**国产书籍中的战斗机,实实在在的优秀!** (真心希望国内能有更多这样的优质书籍出现!加油!💪)
|
||
|
||
这本书的第 3 版 2019 年底已经出来了,新增了很多实在的内容比如 ZGC 等新一代 GC 的原理剖析。目前豆瓣上是 9.5 的高分,🐂 不 🐂 我就不多说了!
|
||
|
||
不论是你面试还是你想要在 Java 领域学习的更深,你都离不开这本书籍。这本书不光要看,你还要多看几遍,里面都是干货。这本书里面还有一些需要自己实践的东西,我建议你也跟着实践一下。
|
||
|
||
类似的书籍还有 **[《实战 Java 虚拟机》](https://book.douban.com/subject/26354292/)**、**[《虚拟机设计与实现:以 JVM 为例》](https://book.douban.com/subject/34935105/)** ,这两本都是非常不错的!
|
||
|
||

|
||
|
||
如果你对实战比较感兴趣,想要自己动手写一个简易的 JVM 的话,可以看看 **[《自己动手写 Java 虚拟机》](https://book.douban.com/subject/26802084/)** 这本书。
|
||
|
||

|
||
|
||
书中的代码是基于 Go 语言实现的,搞懂了原理之后,你可以使用 Java 语言模仿着写一个,也算是练练手! 如果你当前没有能力独立使用 Java 语言模仿着写一个的话,你也可以在网上找到很多基于 Java 语言版本的实现,比如[《zachaxy 的手写 JVM 系列》](https://zachaxy.github.io/tags/JVM/) 。
|
||
|
||
这本书目前在豆瓣有 8.2 的评分,我个人觉得张秀宏老师写的挺好的,这本书值得更高的评分。
|
||
|
||
另外,R 大在豆瓣发的[《从表到里学习 JVM 实现》](https://www.douban.com/doulist/2545443/)这篇文章中也推荐了很多不错的 JVM 相关的书籍,推荐小伙伴们去看看。
|
||
|
||
再推荐两个视频给喜欢看视频学习的小伙伴。
|
||
|
||
第 1 个是尚硅谷的宋红康老师讲的[《JVM 全套教程》](https://www.bilibili.com/video/BV1PJ411n7xZ)。这个课程的内容非常硬,一共有接近 400 小节。
|
||
|
||
课程的内容分为 3 部分:
|
||
|
||
1. 《内存与垃圾回收篇》
|
||
2. 《字节码与类的加载篇》
|
||
3. 《性能监控与调优篇》
|
||
|
||

|
||
|
||
第 2 个是你假笨大佬的 **[《JVM 参数【Memory 篇】》](https://club.perfma.com/course/438755/list)** 教程,很厉害了!
|
||
|
||

|
||
|
||
下面是我总结的一些关于 JVM 的小问题,你可以拿来自测:
|
||
|
||
1. 什么是虚拟机?
|
||
2. Java 内存区域是怎么划分的?大对象放在哪个内存区域?
|
||
3. 垃圾回收有哪些算法?GC 的流程
|
||
4. 什么是类加载?何时类加载?类加载流程?
|
||
5. 知道哪些类加载器。类加载器之间的关系?
|
||
6. 类加载器的双亲委派了解么? 结合 Tomcat 说一下双亲委派(Tomcat 如何打破双亲委托机制?...)。
|
||
7. 常见调优参数有哪些?
|
||
8. ......
|
||
|
||
## 常用工具
|
||
|
||
非常重要!非常重要!特别是 Git 和 Docker。
|
||
|
||
1. **IDEA** :熟悉基本操作以及常用快捷。你可以通过 Github 上的开源教程 [《IntelliJ IDEA 简体中文专题教程》](https://github.com/judasn/IntelliJ-IDEA-Tutorial) 来学习 IDEA 的使用。
|
||
2. **Maven** :强烈建议学习常用框架之前可以提前花几天时间学习一下**Maven**的使用。(到处找 Jar 包,下载 Jar 包是真的麻烦费事,使用 Maven 可以为你省很多事情)。
|
||
3. **Git** :基本的 Git 技能也是必备的,试着在学习的过程中将自己的代码托管在 Github 上。你可以看看这篇 Github 上开源的 [《Git 极简入门》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Git) 。
|
||
4. **Docker** :学着用 Docker 安装学习中需要用到的软件比如 MySQL ,这样方便很多,可以为你节省不少时间。你可以看看这篇 Github 上开源的 [《Docker 基本概念解读》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker) 、[《一文搞懂 Docker 镜像的常用操作!》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Docker-Image)
|
||
|
||
除了这些工具之外,我强烈建议你一定要搞懂 Github 的使用。一些使用 Github 的小技巧,你可以看[《Github 小技巧》](https://snailclimb.gitee.io/javaguide/#/docs/tools/Github%E6%8A%80%E5%B7%A7)这篇文章。
|
||
|
||
## 常用框架
|
||
|
||
### Spring/SpringBoot
|
||
|
||
**Spring 和 SpringBoot 真的很重要!**
|
||
|
||
一定要搞懂 AOP 和 IOC 这两个概念。Spring 中 bean 的作用域与生命周期、SpringMVC 工作原理详解等等知识点都是非常重要的,一定要搞懂。
|
||
|
||
企业中做 Java 后端,你一定离不开 SpringBoot ,这个是必备的技能了!一定一定一定要学好!
|
||
|
||
像 SpringBoot 和一些常见技术的整合你也要知识怎么做,比如 SpringBoot 整合 MyBatis、 ElasticSearch、SpringSecurity、Redis 等等。
|
||
|
||
下面是一些比较推荐的书籍/专栏。
|
||
|
||
**[《Spring 实战》](https://book.douban.com/subject/34949443/)**
|
||
|
||

|
||
|
||
_比较一般!_
|
||
|
||
不建议当做入门书籍读,入门的话可以找点国人的书或者视频看。这本定位就相当于是关于 Spring 的一个概览,只有一些基本概念的介绍和示例,涵盖了 Spring 的各个方面,但都不够深入。就像作者在最后一页写的那样:“学习 Spring,这才刚刚开始”。
|
||
|
||
**[《Spring 5 高级编程》](https://book.douban.com/subject/30452637/)**
|
||
|
||

|
||
|
||
_工具人!_
|
||
|
||
对于 Spring5 的新特性介绍的比较详细,也说不上好。另外,感觉全书翻译的有一点蹩脚的味道,还有一点枯燥。全书的内容比较多,我一般拿来当做工具书参考。
|
||
|
||
**[《Spring Boot 编程思想(核心篇)》](https://book.douban.com/subject/33390560/)**
|
||
|
||

|
||
|
||
_稍微有点啰嗦,但是原理介绍的比较清楚。_
|
||
|
||
SpringBoot 解析,不适合初学者。我是去年入手的,现在就看了几章,后面没看下去。书很厚,感觉很多很多知识点的讲解过于啰嗦和拖沓,不过,这本书对于 SpringBoot 内部原理讲解的还是很清楚。
|
||
|
||
**[《Spring Boot 实战》](https://book.douban.com/subject/26857423/)**
|
||
|
||

|
||
|
||
比较一般的一本书,可以简单拿来看一下。
|
||
|
||
**《Spring Boot 实战派》**
|
||
|
||

|
||
|
||
这本书使用的 Spring Boot 2.0+的版本,还算比较新。整本书采用“知识点+实例”的形式编写。
|
||
|
||
另外,这本书的干货很多,作者在注意实战的过程中还不忘记对于一些重要的基础知识的讲解。
|
||
|
||
如果你要学习 Spring Boot 的话,我还是比较推荐这本书的。
|
||
|
||
### Netty
|
||
|
||
但凡涉及到网络通信就必然必然离不开网络编程。 Netty 目前作为 Java 网络编程最热门的框架,毫不夸张地说是每个 Java 程序员必备的技能之一。
|
||
|
||
**为什么说学好 Netty 很有必要呢?**
|
||
|
||
1. Netty 基于 NIO (NIO 是一种同步非阻塞的 I/O 模型,在 Java 1.4 中引入了 NIO )。使用 Netty 可以极大地简化并简化了 TCP 和 UDP 套接字服务器等网络编程,并且性能以及安全性等很多方面都非常优秀。
|
||
2. 我们平常经常接触的 Dubbo、RocketMQ、Elasticsearch、gRPC、Spark、Elasticsearch 等等热门开源项目都用到了 Netty。
|
||
3. 大部分微服务框架底层涉及到网络通信的部分都是基于 Netty 来做的,比如说 Spring Cloud 生态系统中的网关 Spring Cloud Gateway 。
|
||
|
||
下面是一些比较推荐的书籍/专栏。
|
||
|
||
**《Netty 实战》**
|
||
|
||

|
||
|
||
这本书可以用来入门 Netty ,内容从 BIO 聊到了 NIO、之后才详细介绍为什么有 Netty 、Netty 为什么好用以及 Netty 重要的知识点讲解。
|
||
|
||
这本书基本把 Netty 一些重要的知识点都介绍到了,而且基本都是通过实战的形式讲解。
|
||
|
||
**《Netty 进阶之路:跟着案例学 Netty》**
|
||
|
||

|
||
|
||
内容都是关于使用 Netty 的实践案例比如内存泄露这些东西。如果你觉得你的 Netty 已经完全入门了,并且你想要对 Netty 掌握的更深的话,推荐你看一下这本书。
|
||
|
||
**《Netty 入门与实战:仿写微信 IM 即时通讯系统》**
|
||
|
||

|
||
|
||
_质量很高的一个小册!_
|
||
|
||
通过一个基于 Netty 框架实现 IM 核心系统为引子,带你学习 Netty。整个小册的质量还是很高的,即使你没有 Netty 使用经验也能看懂。
|
||
|
||
## 性能调优
|
||
|
||
**[《Java 性能权威指南》](https://book.douban.com/subject/26740520/)**
|
||
|
||

|
||
|
||
_希望能有更多这 Java 性能优化方面的好书!_
|
||
|
||
O'Reilly 家族书,性能调优的入门书,我个人觉得性能调优是每个 Java 从业者必备知识。
|
||
|
||
这本书介绍的实战内容很不错,尤其是 JVM 调优,缺点也比较明显,就是内容稍微有点老。市面上这种书很少。这本书不适合初学者,建议对 Java 语言已经比价掌握了再看。另外,阅读之前,最好先看看周志明大佬的《深入理解 Java 虚拟机》。
|
||
|
||
## 网站架构
|
||
|
||
看过很多网站架构方面的书籍,比如《大型网站技术架构:核心原理与案例分析》、《亿级流量网站架构核心技术》、《架构修炼之道——亿级网关、平台开放、分布式、微服务、容错等核心技术修炼实践》等等。
|
||
|
||
目前我觉得能推荐的只有李运华老师的**[《从零开始学架构》](https://book.douban.com/subject/30335935/)** 这本。
|
||
|
||

|
||
|
||
这本书对应的有一个极客时间的专栏—《从零开始学架构》,里面的很多内容都是这个专栏里面的,两者买其一就可以了。我看了很小一部分,内容挺全面的,是一本真正在讲如何做架构的书籍。
|
||
|
||
## 面试
|
||
|
||
**《JavaGuide 面试突击版》**
|
||
|
||

|
||
|
||
[JavaGuide](https://javaguide.cn/) 的面试版本,涵盖了 Java 后端方面的大部分知识点比如 集合、JVM、多线程还有数据库 MySQL 等内容。
|
||
|
||
公众号后台回复 :“**面试突击**” 即可免费获取,无任何套路。
|
||
|
||

|
||
|
||
# |