深入理解Java核心技术:写给Java工程师的干货笔记(基础篇)
  • 推荐0
  • 收藏0
  • 浏览861

深入理解Java核心技术:写给Java工程师的干货笔记(基础篇)

张洪亮 (作者) 

  • 书  号:978-7-121-43260-6
  • 出版日期:2022-05-01
  • 页  数:504
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:陈晓猛
纸质版 ¥138.00
本书是《Java工程师成神之路》系列的第一本,主要聚焦于Java开发者必备的Java核心基础知识。全书共23章,主要内容包括面向对象、基础数据类型、自动拆装箱、字符串、集合类、反射、序列化、枚举、I/O、动态代理、注解、泛型、时间处理、编码方式、语法糖、BigDecimal、常用工具库及Java新版本特性等,比较全面地覆盖了Java开发者日常工作中用到的大部分基础知识。
“有道无术,术尚可求,有术无道,止于术”。本系列更加注重对Java之“道”的学习,即对原理的解读。对于很多语法概念及使用方式的介绍并不是本书的重点。所以,有一定编程语言常识或者写过Java代码的读者阅读起来会更加容易。

本书既适合读者进行体系化的学习,也适合读者查缺补漏,将以往所学的知识点连成线,进而构建并完善自己的知识体系。
张洪亮(@Hollis)
阿里巴巴技术专家,51CTO 专栏作家,CSDN 博客专家,掘金优秀作者,《程序员的三门课》联合作者,《Java工程师成神之路》系列文章作者;热衷于分享计算 机编程相关技术,博文全网阅读量数千万。
本书缘起
2015年,我刚毕业时,为了可以更好地学习Java相关知识,更方便地查缺补漏,我整理了一份自己准备学习的Java相关知识的目录。随着自身技术能力的提升,我也一直在不断地完善这份知识目录。
最开始,我把它命名为《Java工程师成神之路》,之所以起这个名字,是因为我觉得整个体系太过庞大,庞大到如果能把它完全掌握,就是当之无愧的“大神”。这个名字也寄托了我对自己的无限期待。
最开始《Java工程师成神之路》只是一些知识点组成的目录,或者说是一份学习路径总结。很多人通过这个路径,可以知道自己处于什么样的阶段,可以快速地找到自己有哪些知识点是不了解的。
后来在2019年,在很多读者的建议下,我把《Java工程师成神之路》开源了,并且开始逐步完善其中的知识点,让它不再是一份目录,而是一个完整的知识体系。
在2020年,阿里云开发者社区的朋友找到我,我和他们联合把之前整理的这份知识体系文章做成了一本电子书。电子书一经问世,就一直在阿里云开发者社区霸榜。这本电子书还因此获得了阿里云颁发的“最受开发者欢迎的电子书奖”奖项!
截至2022年3月初,《Java工程师成神之路》在GitHub上的开源版本已经收获了22.4k个Star,根据其制作出来的GitHub Page和Gitee Page共收获了超过50万的访问次数,总访客数达40多万。其相关电子书在阿里云开发者社区的下载榜中排名前三,共收获40万次阅读,6万多次下载。
在不知不觉中,我历时6年打造的“成神之路”,影响了几十万名Java开发者。很多人可能不知道Hollis是谁,但却知道这份《Java工程师成神之路》。
后来,在很多读者的鼓励下,我终于决定把它出版成书。但是因为内容实在是太多了,所以目前大家看到的这一本只是把其中“基础篇”的内容做了整理。
虽然这本书的大纲我早就整理好了,而且之前发行过电子版,我以为纸质书的出版会比较顺利,但是事情没那么简单。偏偏我又是一个完美主义者,所以,在原来五年积累的很多文章的基础上,我又足足改了将近1年的时间。现在这个版本和之前开源的版本相比,大概重写了其中80%的内容。整体结构上比开源的版本更加合理,内容也比开源的版本更加丰富。
本书特色
为了方便读者阅读和理解,除了前两章,本书尽量摒弃了太过枯燥的概念性描述,也避免堆砌大篇幅的代码,试图通过举例、比喻、引用等方式把Java体系中的很多原理知识讲解清楚。
因为Java体系中的很多知识点都是相关联的,所以本书在提到其他知识点时,为了方便读者进行关联性学习,会标注相关章节和内容提要。
本书更加注重对原理的解读,很多语法的概念介绍及使用方式并不是本书的重点。所以,本书中大部分内容均是Java开发者需要重点关注的一些知识点,很多知识点的总结均来源于日常开发中遇到的对各种线上问题的排查与总结。
勘误和支持
因个人能力有限,书中难免有疏漏之处,恳请广大读者批评指正。
如果读者在阅读的过程中遇到任何表述不清、内容错误及影响学习体验的问题,都可以通过以下方式反馈给我,我和本书编辑一定会在第一时间进行改正。
(1)在开源项目toBeTopJavaer(https://github.com/hollischuang/toBeTopJavaer)中提交勘误Issue。
(2)我的个人公众号“Hollis”的底部菜单栏设置了纠错入口,读者可以在其中反馈书中的问题。
请提出修改意见的读者朋友同时附上页码、章节序号,以便我们进行核对,谢谢大家。
配套资源
本书是《Java工程师成神之路》系列的第一本,随书赠送了一份《Java工程师成神之路》思维导图。Java开发者可以通过这份思维导图对所学知识进行查缺补漏,完善自己的知识体系,愿所有读者都能早日成为大神。
如果想获得本书思维导图的电子原版,请通过以下方式领取:
在我的个人公众号“Hollis”的对话中,回复“成神导图”即可。
致谢
感谢所有的读者朋友,包括所有不认识我但是看过我的文章的朋友们,感谢大家对我的支持与鼓励。
感谢所有在我的开源项目toBeTopJavaer中提交Issue和“PR”的朋友们,感谢你们对本书的认可与帮助。
感谢电子工业出版社的工作人员,特别是本书编辑陈晓猛老师,正是你们的认真负责,才让本书可以高质量地呈现给所有期待的读者们。
感谢我的爱人——杨婉鹭女士,感谢你在我创作本书的过程中对我的包容和理解。
感谢我的父母——张奎先生和王洪贤女士,感谢你们这么多年来对我的默默付出与支持。
谨以此书,献给所有在我成长道路上帮助过我的亲人、师长、同事、朋友、读者,感谢你们对我的提携与帮助!
本书全部稿费将以Hollis及其所有读者的名义用于公益事业,具体细节我会在我的公众号上公布,欢迎监督。

张洪亮(@Hollis)

目录

第1章 什么是面向对象
1.1 面向过程与面向对象
1.2 面向对象的三大基本特征
1.3 面向对象的五大基本原则
第2章 面向对象的核心概念
2.1 重载和重写
2.2 多态
2.3 继承与实现
2.4 多继承
2.5 组合与继承
2.6 构造函数
2.7 变量
第3章 Java对象
3.1 Object类
3.2 JavaBean
3.3 equals和hashCode的关系
3.4 对象的clone方法
第4章 平台无关性
4.1 什么是平台无关性
4.2 JVM支持的语言
第5章 值传递
5.1 什么是值传递
5.2 Java中的值传递
第6章 基本数据类型
6.1 基本类型
6.2 浮点数
6.3 Java中负数的绝对值并不一定是正数
第7章 自动拆装箱
7.1 自动拆箱
7.2 缓存
7.3 基本类型和包装类怎么选
第8章 字符串
8.1 字符串的不可变性
8.2 JDK6和JDK7中substring的原理与区别
8.3 replace、replaceAll和replaceFirst的区别
8.4 String对“+”的重载
8.5 字符串拼接的几种方式和区别
8.6 StringJoiner
8.7 从字符串中删除空格的多种方式
8.8 switch对String的支持
8.9 字符串池
8.10 Class常量池
8.11 字面量是什么时候存入字符串池的
8.12 intern
8.13 String有没有长度限制
第9章 异常
9.1 Java的异常体系
9.2 和异常有关的关键字
9.3 异常链
9.4 异常处理的最佳实践
9.5 自定义异常
9.6 try-with-resources
9.7 finally是在什么时候执行的
第10章 集合类
10.1 Java的集合体系
10.2 如何对集合进行遍历
10.3 ArrayList、LinkedList和Vector之间的区别
10.4 SynchronizedList和Vector有什么区别
10.5 为什么ArrayList的subList结果不能转换成ArrayList
10.6 HashSet、LinkedHashSet和TreeSet之间的区别
10.7 HashMap、Hashtable和ConcurrentHashMap之间的区别
10.8 不要使用双括号语法初始化集合
10.9 同步容器的所有操作一定是线程安全的吗
10.10 HashMap的数据结构
10.11 HashMap的size和capacity有什么区别
10.12 HashMap的扩容机制
10.13 HashMap的loadFactor和threshold
10.14 为什么建议集合初始化时指定容量大小
10.15 HashMap的初始容量设置为多少合适
10.16 HashMap的hash()方法
10.17 为什么HashMap的默认容量设置成16
10.18 为什么HashMap的默认负载因子设置成0.75
10.19 HashMap的线程安全问题
10.20 为什么不能在foreach循环里对集合中的元素进行remove/add操作
10.21 如何在遍历的同时删除ArrayList中的元素
10.22 什么是fail-fast和fail-safe
10.23 为什么Java 8中的Map引入了红黑树
10.24 为什么将HashMap转换成红黑树的阈值设置为8
10.25 Java 8中Stream的相关用法
10.26 Java中的并发容器
第11章 反射
11.1 反射的概念及作用
11.2 反射是如何破坏单例模式的
11.3 利用反射与工厂模式实现Spring IoC
第12章 序列化
12.1 序列化和反序列化
12.2 什么是transient
12.3 序列化底层原理
12.4 为什么不能随便更改serialVersionUID
12.5 序列化如何破坏单例模式
12.6 使用序列化实现深拷贝
12.7 Apache-Cmmons-Collections的反序列化漏洞
12.8 fastjson的反序列化漏洞
12.9 JavaBean属性名对序列化的影响
第13章 枚举
13.1 枚举的用法
13.2 枚举是如何实现的
13.3 如何比较Java中的枚举
13.4 switch对枚举的支持
13.5 如何实现枚举的序列化
13.6 为什么说枚举是实现单例最好的方式
13.7 为什么接口返回值不能使用枚举类型
第14章 I/O
14.1 什么是I/O流,如何分类
14.2 同步/异步与阻塞/非阻塞
14.3 Linux的五种I/O模型
14.4 BIO、NIO和AIO
第15章 动态代理
15.1 静态代理与动态代理
15.2 动态代理的几种实现方式
第16章 注解
16.1 注解及注解的使用
16.2 Java中的5个元注解
16.3 注解的继承与组合
16.4 注解与反射的结合
16.5 日常开发中的常用注解
16.6 不要过度依赖注解
第17章 泛型
17.1 什么是泛型
17.2 什么是类型擦除
17.3 在泛型为String的List中存放Integer对象
17.4 泛型与桥接方法
17.5 泛型会带来哪些问题
17.6 泛型中K、T、V、E、?等的含义
17.7 泛型中的限定通配符和非限定通配符
17.8 泛型的PECS原则
第18章 时间处理
18.1 什么是时区
18.2 时间戳
18.3 几种常见时间的含义和关系
18.4 SimpleDateFormat的线程安全性问题
18.5 Java 8中的时间处理
18.6 为什么日期格式化时使用y表示年,而不能用Y
第19章 编码方式
19.1 什么是ASCII和Unicode
19.2 有了Unicode为什么还需要UTF-8
19.3 有了UTF-8为什么还需要GBK
19.4 为什么会存在乱码
第20章 语法糖
20.1 什么是语法糖,如何解糖
20.2 解糖:方法变长参数
20.3 解糖:内部类
20.4 解糖:条件编译
20.5 解糖:断言
20.6 解糖:数值字面量
20.7 解糖:Lambda表达式
20.8 警惕语法糖
第21章 BigDecimal
21.1 什么是BigDecimal
21.2 为什么不能直接使用double创建一个BigDecimal
21.3 为什么不能使用BigDecimal的equals方法比较大小
第22章 常用的Java工具库
22.1 Apache Commons
22.2 各类BeanUtils工具的性能对比
22.3 MapStruct
22.4 BeanUtils与深/浅拷贝
22.5 Guava
22.6 Lombok
第23章 Java新版本特性
23.1 Java 8:函数式编程
23.2 Java 8:接口的默认方法
23.3 Java 9:模块化技术
23.4 Java 10:本地变量类型推断
23.5 Java 11:增强var
23.6 Java 12:switch表达式
23.7 Java 13:text block
23.8 Java 14:更有价值的NullPointerException
23.9 Java 14:record类型
23.10 Java 15:封闭类
23.11 Java 16:instanceof模式匹配
23.12 Java 17:switch模式匹配


读者评论

  • 没有电子版?

    RRR发表于 2022/6/10 16:55:34
    • 暂无电子书出版:)

      陈晓猛发表于 2022/6/14 11:22:24

相关博文

  • 全网阅读量千万的Java工程师成神之路学习笔记出书啦!

    全网阅读量千万的Java工程师成神之路学习笔记出书啦!

    博文小编 2022-05-11

    Hollis大神出书啦!Hollis是谁? Hollis,张洪亮,阿里巴巴技术专家,51CTO 专栏作家,CSDN 博客专家,掘金优秀作者,《程序员的三门课》联合作者,《Java工程师成神之路》系列文章作者;热衷于分享计算 机编程相关技术...

    博文小编 2022-05-11
    1062 0 0 0
  • 烫烫屯屯锟斤拷

    烫烫屯屯锟斤拷

    博文小编 2022-05-24

    你可能看到过国内超市售卖22元一盒的“锟斤拷”!? 就连国外也有出售过的“屯屯屯”!? 电脑出现“烫烫烫”的时候难道是CPU发热的自救信号? 其实上面这些都是乱码。 但是这些乱码都是怎么来的?我们要从计算机的编码方式讲起。 什...

    博文小编 2022-05-24
    676 0 0 0
  • 求你了,不要再在对外接口中使用枚举类型了!

    求你了,不要再在对外接口中使用枚举类型了!

    博文小编 2022-06-08

    【本文原创:Hollis】 最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛出了一个IllegalArgumentException,分析堆栈后,发现最根本的的异常是以下内容: 大概就是以上的内容,看起来还是很简单的,提示...

    博文小编 2022-06-08
    143 0 0 0
  • SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!(文末彩蛋)

    SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!(文末彩蛋)

    博文小编 2022-06-27

    【本文原创:Hollis】 最近,有很多人在传说 SpringBoot要出3.0的版本了,并且宣布不再支持 Java 8,最低要求是 Java 17了。 其实,早在2021年9月份,关于 Spring Framework 6.0...

    博文小编 2022-06-27
    1070 0 0 0