工作十年,分享看过的优质 Java 书籍
不知不觉,我已经接触 Java 11 年了——从 2008 年北京奥运会那年开始,到现在;未来还会更久。这期间我读了不少 Java 方面的书籍,纸质版的少说有三十来本吧,更何况还有不少的电子书。万事都有好坏,书也一样。有的是精神粮食,有的纯粹是浪费时间。这里就分享一些我精挑细选后的优质书籍,希望能帮大家少走点弯路。
在读这些书的过程中,我还写下了不少博文,这些文章也帮助过不少年轻人,他们经常发私信感谢我,这让我感觉自己的分享很有意义。
第一本,《Head First Java》
不止是图片,还有游戏、拼图、解谜题以及意想不到的内容。真的是一点都不“正经”,正因为如此,阅读起来才感觉兴趣盎然。
第一章主要介绍了 Java 的工作原理、发展简史、程序结构。
第二章主要介绍了 Java 的面向对象,包括继承、覆盖等内容。
第三章主要介绍了 Java 的变量。关键点:引用变量存储的是对象的地址(储存方式)、数组也是对象。
第四章主要介绍了 Java 的方法。关键点:实参和形参、值传递和引用传递、== 和 equals()。
第六章主要介绍了 Java 的 API。关键点:ArrayList。
第九章主要介绍了构造器与垃圾收集器。关键点:对象存储在堆中,对象引用在栈中;当对象失去最后一个引用变量时,它会被回收。
第十章主要介绍了静态类、静态方法、静态变量。关键点:final、常量、数字格式化、日期表示法。
第十二章和第十三章,主要介绍了 GUI 和 Swing。关键点:事件处理机制。
第十四章主要介绍了序列化和文件输入/输出。关键点:Serializable接口。
Java 网络编程:必知必会的 URL 和 URLConnection
第二本,《Java 核心技术卷一》
《Java核心技术卷一》是唯一可以和《Java编程思想》媲美的一本 Java 入门书。单从技术的角度来看,前者更好一些。但上升到思想层面嘛,自然后者更好,两者的偏重点不同。
思想不会变,所以《Java编程思想》还停留在第 4 版(2007 年);而技术是要更新迭代的,所以《Java核心技术卷一》来到了第十版(2016 年)。
第十三章:讲的是应用部署和 Applet,显然 Applet 也没必要学了。出版社没有把这部分内容删掉,纯粹是为了让这本书变得更笨重(定价就高了)。
第十四章:并发编程。这也是 Java 学习过程中最难的一块之一,另外一难是 Java 虚拟机。但这是初级程序员迈向高手的必经之路。
整体上来讲,《Java核心技术卷一》非常值得一读,广度和深度都恰到好处。强烈推荐。
先来通过思维导图看一下这 9 篇 Java 核心技术博文涉及到的内容。
Java面试官:兄弟,你确定double精度比float低吗?
第三本,《Java 编程思想》
记得刚上大学那会,就在某宝上买了一本影印版的《Java 编程思想》,但由于初学 Java,对编程极度缺乏信心,导致看这本书有一种看天书的感觉。后来,去苏州参加工作的时候把它作为最宝贵的纪念品带了过去。
先来通过思维导图看一下这 25 篇 Java 博文涉及到的知识点。
Java 访问权限控制:public、private、protected
《Java编程思想》无疑一直都会被大力推荐,可是第四版的出版时间竟然早在 2007 年,全书大部分的代码是基于 JDK 1.5 完成的。如今什么年代了?
告诉你一个好消息,《Java编程思想》的作者 Bruce Eckel 在 2017 年的时候发布了第五版,没想到吧?为什么在网上都看不到这本书的消息呢?因为改名了,而且只有电子版。
https://github.com/BruceEckel/OnJava8-Examples
如果英语水平像我一样菜,看英文版比较费劲,可以在 GitHub 上查看大婶们的译本,传送门:
https://github.com/LingCoder/OnJava8
如果英语水平还不错,可以自行购买电子版的《On Java 8》,虽然比较贵。
第四本,《Effective Java》
我这里整理了一份第三版的中文在线翻译文档,大家可以参照一下。
- 01. 考虑使用静态工厂方法替代构造方法.md
- 02. 当构造方法参数过多时使用builder模式.md
- 03. 使用私有构造方法或枚类实现Singleton属性.md
- 04. 使用私有构造方法执行非实例化.md
- 05. 使用依赖注入取代硬连接资源(hardwiring resources).md
- 06. 避免创建不必要的对象.md
- 07. 消除过期的对象引用.md
- 08. 避免使用Finalizer和Cleaner机制.md
- 09. 使用try-with-resources语句替代try-finally语句.md
- 10. 重写equals方法时遵守通用约定.md
- 11. 重写equals方法时同时也要重写hashcode方法.md
- 12. 始终重写 toString 方法.md
- 13. 谨慎地重写 clone 方法.md
- 14. 考虑实现Comparable接口.md
- 15. 使类和成员的可访问性最小化.md
- 16. 在公共类中使用访问方法而不是公共属性.md
- 17. 最小化可变性.md
- 18. 组合优于继承.md
- 19. 如使用继承则设计,应当文档说明,否则不该使用.md
- 20. 接口优于抽象类.md
- 21. 为后代设计接口.md
- 22. 接口仅用来定义类型.md
- 23. 优先使用类层次而不是标签类.md
- 24. 优先考虑静态成员类.md
- 25. 将源文件限制为单个顶级类.md
- 26. 不要使用原始类型.md
- 27. 消除非检查警告.md
- 28. 列表优于数组.md
- 29. 优先考虑泛型.md
- 30. 优先使用泛型方法.md
- 31. 使用限定通配符来增加API的灵活性.md
- 32. 合理地结合泛型和可变参数.md
- 33. 优先考虑类型安全的异构容器.md
- 34. 使用枚举类型替代整型常量.md
- 35. 使用实例属性替代序数.md
- 36. 使用EnumSet替代位属性.md
- 37. 使用EnumMap替代序数索引.md
- 38. 使用接口模拟可扩展的枚举.md
- 39. 注解优于命名模式.md
- 40. 始终使用Override注解.md
- 41. 使用标记接口定义类型.md
- 42. lambda表达式优于匿名类.md
- 43. 方法引用优于lambda表达式.md
- 44. 优先使用标准的函数式接口.md
- 45. 明智审慎地使用Stream.md
- 46. 优先考虑流中无副作用的函数.md
- 47. 优先使用Collection而不是Stream来作为方法的返回类型.md
- 48. 谨慎使用流并行.md
- 49. 检查参数有效性.md
- 50. 必要时进行防御性拷贝.md
- 51. 仔细设计方法签名.md
- 52. 明智审慎地使用重载.md
- 53. 明智审慎地使用可变参数.md
- 54. 返回空的数组或集合,不要返回 null.md
- 55. 明智审慎地返回 Optional.md
- 56. 为所有已公开的 API 元素编写文档注释.md
- 57. 最小化局部变量的作用域.md
- 58. for-each 循环优于传统 for 循环.md
- 59. 了解并使用库.md
- 60. 若需要精确答案就应避免使用 float 和 double 类型.md
- 61. 基本数据类型优于包装类.md
- 62. 当使用其他类型更合适时应避免使用字符串.md
- 63. 当心字符串连接引起的性能问题.md
- 64. 通过接口引用对象.md
- 65. 接口优于反射.md
- 66. 明智审慎地本地方法.md
- 67. 明智审慎地进行优化.md
- 68. 遵守被广泛认可的命名约定.md
- 69. 只针对异常的情况下才使用异常.md
- 70. 对可恢复的情况使用受检异常,对编程错误使用运行时异常.md
- 71. 避免不必要的使用受检异常.md
- 72. 优先使用标准的异常.md
- 73. 抛出与抽象对应的异常.md
- 74. 每个方法抛出的异常都需要创建文档.md
- 75. 在细节消息中包含失败一捕获信息.md
- 76. 保持失败原子性.md
- 77. 不要忽略异常.md
- 78. 同步访问共享的可变数据.md
- 79. 避免过度同步.md
- 80. executor 、task 和 stream 优先于线程.md
- 81. 相比 wait 和 notify 优先使用并发工具.md
- 82. 文档应包含线程安全属性.md
- 83. 明智审慎的使用延迟初始化.md
- 84. 不要依赖线程调度器.md
- 85. 优先选择 Java 序列化的替代方案.md
- 86. 非常谨慎地实现 Serializable.md
- 87. 考虑使用自定义的序列化形式.md
- 88. 保护性的编写 readObject 方法.md
- 89. 对于实例控制,枚举类型优于 readResolve.md
- 90. 考虑用序列化代理代替序列化实例.md
为什么要将局部变量的作用域最小化?
面试官:兄弟,说说基本类型和包装类型的区别吧
第五本,《Java网络编程》
这本书的整体评价并不算高,吐槽的反而更多。但是,对于学习 Java 网络编程的基础知识非常的有用。
第六本,《Java 并发编程实战》
但我必须要说的是,《Java并发编程实战》这本书并没有摆脱翻译枯燥的老毛病,读起来很需要耐住性子,不然就很难把这本书吃透。当然了,并发编程本身就很难,大家要做好心理准备。
Java 并发编程(一):简介
Java 并发编程(二):如何保证共享变量的原子性?
Java 并发编程(三):如何保证共享变量的可见性?
Java 并发编程(四):如何保证对象的线程安全性
第七本《深入理解Java虚拟机》
《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第 2 版)》是唯一一本我们国内程序员写的经典书,可以媲美《Java 编程思想》。
这本书牛逼到什么程度,几乎所有写 Java 虚拟机方面的文章,没有一个不在文章最后注明:本文参考字周志明老师的《深入理解 Java 虚拟机》。假如这篇文章最后没有注明的话,那保不准是不尊重版权。
第 1 版两年内印刷近 10 次,好评(五星)如潮,是整个 Java 图书领域公认的经典著作和畅销书。
第 2 版共分为 5 大部分,围绕内存管理、执行子系统、程序编译与优化、高效并发等核心主题对 JVM 进行了全面深入的分析,深刻揭示了 JVM 的工作原理。
第一部分主要介绍了 Java 的技术体系、Java 和 JVM 的发展历程。
第二部分主要介绍了 JVM 的自动内存管理,包括虚拟机的内存区域划分原理,内存溢出产生的原因、常见的垃圾收集算法、垃圾收集器的工作原理等等。
第三部分主要介绍了类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎。
第四部分主要介绍了程序的编译和代码的优化,阐述了泛型、自动装箱拆箱、条件编译等语法糖的原理;还有 HotSpot 的即时编译器。
第五部分主要介绍了 Java 实现高效并发的原理,包括 JVM 内存模型等。
作者周志明更成为了广大 Java 程序员心目中的大神级人物,厉害厉害了!有读者曾这样感叹道:“国内程序员很难再写出这么经典的书了!”
如果大家想要成为一名优秀的 Java 程序员,本书不得不读啊!并且是细细品味的那种。
第八本,《Java性能权威指南》
第九本,《代码整洁之道》
如何写出整洁的代码呢?Keep It Simple Stupid:代码简单直接,不仅能够提高代码的效率,还能够让阅读代码的人赏心悦目。
本书的第一章,对整洁代码下了一个定义,每个程序员都应该铭记在心。
1、整洁的代码力求专注,每个方法、每个类都应该全神贯注于一件事;命名更要给人一种“顾名思义”的感觉。
2、整洁的代码简单直接,从不隐藏设计者的意图。
3、整洁的代码应当有单元测试。
4、整洁的代码拒绝重复,其表达力直击人的心灵。
第十本,《设计模式之禅》
第一部分(第 1~6 章),包含有单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则等内容,对面向对象程序员设计的 6 大原则进行了深刻解读。
我在《Java极客技术》星球上解读过几篇模式,这里推荐给大家读一读。
第三部分(第 30~33 章)对同类型和相关联的模式进行了比较,旨在说明它们之间的差别。
第四部分(第 34~36 章)探讨了如何在实际开发中将各种设计模式混合起来使用的可能性,以发挥设计模式的最大功效。
第五部分(第 37~38 章)主要讲解了 5 种新的设计模式的原理、意图和最佳实践。
大家都听说过,学习设计模式非常的重要,那么为什么这么重要呢,设计模式到底是什么?打个比喻学编程就像学武功一样。
武功要练得很牛逼,有两样东西不能丢。第一,是内功;第二,是武功秘籍。内功对应到编程就是我们编程基础能力,那编程的设计模式就可以想象成武术中的武功秘籍。
第十一本,《Java开发手册》
《Java开发手册》是每个 Java 程序员都值得拥有的一本参考指南。该手册涵盖了编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约灯 7 个部分,参考价值极大。
据说,这本手册在阿里内部打磨了很久很久才对外开放的,所以倾注了很多大佬们的心血。况且,阿里作为一个大厂,拿出来一份有瑕疵的手册,多少会丢脸,所以这本手册绝对值得读一读。
代码规范这事情,它是一个吃力不讨好,短期没结果,费心又费力的事情。唯有自己内心的技术情怀。
第十二本,《重构——改善既有的代码设计》
这本书在业界的名声也非常的响,只不过看起来就需要一些精力和耐力,上面这些书看完后,可以看这一本,对于重新审视现有代码有极大的帮助。
第十三本,《算法》
说起数据结构和算法,我就觉得不好意思,脸上泛起难为情的红晕。但为什么我还要说呢?
因为我深受其苦。
我是一个农村走出来的娃,体会过其中的酸甜苦辣,所以我会奉劝各位,以后碰上什么知识分子上山下乡的活动,千万不要去。那不叫体验生活,那叫体验“艰苦”生活。
那在敲代码的过程中,我就经常遇到一些实际的问题,由于无法充分利用数据结构,将数据之间的关系通过合适的算法策略进行有效地存储转换,就导致程序的性能很低。
所以我劝各位新人,趁有大把的时间和精力,多投入一点到数据结构和算法上面去。基础知识就像是一座大楼的地基,它决定了我们的技术高度。数据结构和算法就是最重要的基础知识,学习它们的过程就像是在打地基。
上面这张思维导图提到的数据结构在工作当中太经常使用了,频率高得就像隔三差五会看到隔壁老王这个词一样。
对于算法,如果觉得《算法》这本鸿篇巨制太过枯燥的话,可以选择《趣学算法》、《啊哈算法》等一些非译作的,相对趣味化的入门书。
可能很多人会存在这样一个误区:算法在工作当中很少会用到,需要的时候面向搜索引擎解决一下就行了。
但我想说的是,跳槽的时候很有用,因为一些大厂就喜欢考算法。除此之外,算法对阅读源码也很有帮助;况且,谁不想做一名编程的艺术家呢?长期来看,大脑思考能力是一个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。
好了,好了,再也不用担心被读者朋友们催了。
以上提到的这些书籍,如果大家需要 PDF 版,可以微信搜索「沉默王二」,关注公众号后回复「Java」即可免费获取。强烈大家购买纸质版,读起来不费眼哦。
最后,不要忘记三连操作啊,点赞、收藏、留言。
工作十年,分享看过的优质 Java 书籍相关推荐
- java书籍_Java程序员必看的 13 本 Java 书籍!
原文:Java程序员必看的 13 本 Java 书籍! 作者: java技术栈 关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,J ...
- 好程序员:Java书籍推荐,程序员必看的5本Java书籍,赶紧收藏!
今天好程序员给大家推荐5本Java书籍,各大高校都在使用(具体名单如下),所有学习Java的程序员都不应该错过! 第一本Java书籍<Java EE(SSM框架)企业应用实战> 本书全面介 ...
- Java程序员应该看的14本Java书籍!
关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单. 在下面这 1 ...
- 阿里P8大牛推荐Java程序员必看的 13 本 Java 书籍
关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,Java程序员你们准备好了吗?双手奉上Java程序员必读之热门书单. 在下面这 1 ...
- 【9102年】考研还是找工作?分享看完心得体会(如果你错过了月亮,那就不要错过星星了)
本人大三学生,这学期也要过完了,已经确定了自己方向是要找工作了!也是一位ACMer(从本人博客就能看出嘛)还在学习ing 对于ACM也还是在坚持中 下面是在网上看到的一篇博客,好像书写时间也是挺早的 ...
- 从国内跳槽至新加坡工作的经验分享
前言 记录和分享自己在新加坡的工作生活以及新加坡的基本介绍,如果你只想了解我是如何来到新加坡的可以直接跳到最后一章. 为帮助大家玩转新加坡,快速适应当地生活 更新历史 2019年02月14日 - 更新 ...
- “工作十年还买不起一个厕所”:底层打工人的命运,该何去何从?
01 前段时间,网友在圈子中讨论,有人说了这样的一件事. 网友张先生今年已经三十六岁了,但是,他如今依旧是过得不怎么好.为何?因为他在大城市工作了十年,连房子首付都付不起. 张先生二十六岁研究生毕业, ...
- 推荐一位大佬,在腾讯工作十年
今天给大家推荐一个技术大牛:大飞.微信早期员工,腾讯高级工程师,技术leader.他高中开始接触编程,大学校招实习生进入腾讯,在腾讯工作十年,算是微信部门的资深架构师.做过一线技术小兵,带过团队,做过 ...
- 华为牛人在华为工作十年的感悟!--总结[华为的10年工作]
华为牛人在华为工作十年的感悟!--总结 分类: 没有读的文章 职场 2010-08-13 16:1972人阅读评论(0)收藏举报 一."从小事做起,学会吃亏,与他人合作",这是研究 ...
- 工作十年的程序员,却拿着毕业三年的工资……
工作十年的程序员,却拿着毕业三年的工资-- 导语:小韩是一家小公司的软件程序员,而十年后他还在那家公司,依然是一名普通的程序员.算起来,他工作也有十多年了,但是,他却告诉我,他的工资已经好几年没有涨过 ...
最新文章
- mysql分库主键_分库主键设计-Mysql
- linux中的NFS服务器配置及/etc/exports
- 学习js,尝试写一个表单验证框架(1)-规划
- JSP PO VO BO DTO POJO DAO解释
- net core WebApi——使用xUnits来实现单元测试
- ubuntu中mysql怎么退出命令_Ubuntu下MySQL简单操作
- 详细解读css中的浮动以及清除浮动的方法
- Sublime Text 3 初试牛刀
- JavaScript学习笔记之数组(一)
- 线程同步机制的区别与比较及进程通信方法
- C# 调用控制台应用程序及传参
- 雅马哈音箱的usb驱动MAC-WINDOWS
- 软件测试工程师调研报告,软件测试工程师竞聘报告范文.docx
- 为了对电脑进行保护,已经阻止此应用。
- php 支付宝验签失败,支付宝移动支付,服务端对异步通知信息验签的时候验签失败...
- Shell多进程ping检测指定网段ip是否在线
- 《飞轮效应》 - 系统动力学 - 增强回路 - 推荐序 /刘润
- 未来 3~5 年内,哪个方向的机器学习人才最紧缺?
- 程序员多赚20k的接私活必备网站
- android canvas空心圆,用canvas画实心圆和空心圆的方法
热门文章
- java实现语法分析实验报告_[源码和文档分享]基于JAVA实现的基于LL(1)语法分析构造表...
- OpenCV编程:最大熵阈值分割算法实现(代码可运行)
- C++学习之-std::make_unique 与std::unique_ptr
- 第一章 ZeroMQ基础
- 浅谈MyBatis源码工具类之——Reflector类
- python 分类 投票_使用python+redis实现文章发布,投票,分组排名功能
- db2查询字段备注_SQL基础7:SQLSERVER、ORACLE、DB2中SQL语句查询表字段名、注释、字段类型...
- leftjoin多表联合查询_图解面试题:多表如何查询?
- android studio 自动实现方法,Android Studio怎么自动实现所有的接口函数
- mysql主从同步 忽略库_主从复制中忽略库的参数