2020Java书单推荐

前言

对于程序员来说,个人感觉最佳学习方式是看书,视频花费时间太长,而博客则不够系统。初学相关领域最好的方式就是找到一本经典的好书,然后啃完它。
经常有网友需要推荐一些Java方面的书籍,这次博主就整理下网上现有的推荐,再加上自己这几年看的书籍,统一开一篇来介绍下。

1. 正文

如果你也有写博客,但是不知道从何入手,那博主推荐就是从读书下手,然后按章节总结写成博客。这样知识不仅有巩固,还有产出,方便以后自己复习。还没有博客的话,可以参考搭建:
http://www.tengj.top/2016/02/20/hexoTotal/
下面就来介绍几本新手到老手都可以看的经典书籍。

1.1. 学生、职场新人

《Java核心技术·卷1 基础知识(原书第10版)》
新手入门这本就够了,这一卷讲的非常基础,又易懂,比《Java编程思想》更容易啃下来。建议人手一本。已经到第10版了,覆盖最新技术,平时经常翻阅。

1.2. 个人提升

《Java8 实战》
Java8的新特性讲得最全最仔细的。

《Effective Java》
Effective Java是我读过的最好的编程书籍之一,它包含大量的优秀Java编程实践,并对泛型和并发这两个充满陷阱的Java特性给出了充满洞察力的建议,以至于Java之父James Gosling为这本书作序:“我很希望10年前就拥有这本书。可能有人认为我不需要任何Java方面的书籍,但是我需要这本书。”

1.3. Spring框架

《Spring实战(第4版)》
《精通Spring 4.x -企业应用开发实战》

TIP:以上2本都是超级棒的书!

《Spring Boot实战》
《JavaEE开发的颠覆者:Spring Boot实战》
《SpringBoot揭秘:快速构建微服务体系》

TIP:以上3本也是很棒的书!

1.4. 虚拟机相关

《深入理解 Java 虚拟机 第2版》
非常优秀且难得的国产佳作,系统的介绍了Java虚拟机和相关工具,并给出了一些调优建议。

1.5. 并发编程

《Java并发编程实战》
Java并发经典,人手一本不用多说了,系统全面的介绍了Java的并发,如何设计支持并发的数据结构,以及如何编写正确的并发程序。
《实战Java高并发程序设计》
国人新作,流畅易读,内容也比上面一本来得新。

1.6. 设计模式

《Head First 设计模式》
对新人来说,一本Java写的《Head First 设计模式》,知道什么叫设计模式就够了。
《大话设计模式》

1.7. Redis

《Redis实战》
本书深入浅出地介绍了Redis的5种数据类型,并通过多个实用示例展示了Redis的用法。除此之外,书中还讲述了Redis的优化方法以及扩展方法,是一本对于学习和使用 Redis 来说不可多得的参考书籍。
《Redis设计与实现》
Redis 是近些年来特别火爆的 NoSQL 之一。纵观中外各种书籍还没有一本能对 Redis 内部进行深入剖析,《Redis 设计与实现》可谓开此先河。

《Redis实战》和《Redis设计与实现》都是同一个作者,只不过实战是作者翻译国外英文原版,后者是作者自己写的,自己看情况选择把。

1.8. 工具类

《Maven实战》
个人感觉写的挺好的,从基础到应用,很全,适合初学者,当然有一点经验的人也挺适合的,读完这本平时工作够用了。

1.9. 性能优化

《Java性能优化权威指南》
比起多年前那部调优圣经,讲得更加深入,也更加贴近现在的JDK。可以从里面挑些知识点来,做Java调优的面试题。

1.10. 单元测试

《有效的单元测试》
不同于那些动辄BDD的高深书籍,专注于如何写“好”的,可维护的单元测试,拿来给团队看,能省很多口水。

1.11. 程序员个人修养

《重构:改善既有代码的设计》
《代码整洁之道》
《代码整洁之道 程序员的职业素养》

以上这3本虽是老书,但是都是值得一看的。满减凑单的时候可以带上。

1.12. 养生

《程序员健康指南》

2. 总结

个人认为,作为程序员不要吝啬对自己的投资,只有自己强大了才能更好的赚钱。每年都要买几本书投资一下,未来的回报会超出你的想象的。
关于电子书,博主想说,经典的书才值的购买实体书,但绝大部分书只要电子书就可以了,你也可以先通过查看电子书,如果感觉这书不错,再去购买实体书,这样就不会造成浪费。

3. 电子书汇总:

2018/7/23 已更新320 本

03_SpringBoot相关:
《Spring Boot 2参考手册中文文档》
《Spring Boot 2精髓带书签目录高清版》
04SpringCloud相关:
《疯狂Spring Cloud微服务架构实战》
《Spring Cloud Finchley.RELEASE参考手册 中文文档》
07Hibernate相关:
《Hibernate实战(第2版-人民邮电出版社)》
《HIBERNATE逍遥游记》
14设计模式相关:
《设计模式之禅(第2版)》
15Nginx相关:
《实战Nginx:取代Apache的高性能Web服务器 张宴.扫描版》
27架构相关:
《系统架构:复杂系统的产品设计与开发》
30大数据相关:
《HBase实战》
《Spark快速数据处理》
31_Java_EE相关:
《servlet和jsp学习指南》
《解密搜索引擎技术实战Java精华版》
《深入分析Java Web技术内幕》
《Activiti权威指南》
《Java.Web开发学习手册-明日科技》
《RESTful Web Services Cookbook 中文版12879413》
《Web安全开发指南》
《Web应用安全权威指南》
33Docker相关:
《Docker+容器与容器云(第2版)

2018/5/2 已更新300本

JAVAEE相关:
《Java EE互联网轻量级框架整合开发 SSM框架(Spring MVC+Spring+MyBatis)和Redis实现》
《高性能响应式Web开发实战》
微信相关:
《从零开始学微信小程序开发》
《微信小程序开发入门与实践》
《微信小程序入门指南》
《小程序 巧应用-微信小程序开发实战》
大数据相关:
《大数据时代:生活、工作与思维的大变革》
《大数据之路:阿里巴巴大数据实践》
《白话大数据与机器学习》
《大数据:互联网大规模数据挖掘与分布式处理》
《大数据存储MongoDB实战指南》
《大数据架构师指南》
《大数据架构详解:从数据获取到深度学习》
《大数据算法》
《大数据挖掘:系统方法与实例分析》
《数据算法 Hadoop Spark大数据处理技巧》
《用户网络行为画像 大数据中的用户网络行为画像分析与内容推荐应用》
《云计算和大数据时代网络技术揭秘》
《自己动手做大数据系统.张魁(带书签文字版)》
《白话大数据与机器学习》
《Druid实时大数据分析原理与实践》
《Hadoop大数据分析与挖掘实战》
《Hadoop权威指南.大数据的存储与分析.第4版.修订版&升级版》
《Python机器学习——预测分析核心算法》
《Tensorflow 实战Google深度学习框架(完整版pdf)》
程序员个人修养:
《高效程序员的45个习惯(修订版)敏捷开发修炼之道》
《人件(3版)》
《人月神话.40周年中文纪念版.2015》

2018/3/1 已更新272本

Nginx相关:
《决战Nginx 技术卷:高性能Web服务器部署与运维》
《深入理解Nginx模块开发与架构解析》
《深入剖析Nginx》
《学习Nginx HTTP Server中文版》
《Nginx开发从入门到精通》
MongoDb相关:
《深入学习MongoDb》
《MongoDB实战》
数据库相关:
《MySQL数据库开发的三十六条规定-石展》
《SQL HACKS:100个业界最尖端的技巧和工具》
《MySQL开发者SQL权威指南》
《MySQL技术内幕.第5版》
《MySQL技术内幕 InnoDB存储引擎 第2版》
《MySQL管理之道,性能调优,高可用与监控(第二版)》
《MySQL LVS+Keepalived+MHA 高可用群集 应用部署操作手册》
《MySQL 5权威指南中文版第3版》
《高性能MySQL 第3版 中文 》
微服务相关:
《微服设计》
《轻量级微服务架构(上册)》
《轻量级微服务架构(下册)
大数据:
《Hive 简明教程》
《Spark大数据处理 技术、应用与性能优化》
架构相关
《大规模分布式存储系统:原理解析与架构实战.杨传辉》
《大规模分布式系统架构与设计实战.完整版》
git相关:
《Git权威指南》
elasticSearch相关:
《深入理解ElasticSearch》
2018/2/2 已更新本247
Docker相关
《Docker — 从入门到实践》
《KUBERNETES权威指南 从DOCKET到KURBERNETES实践全接触》
Elasticsearch相关
《Elasticsearch服务器开发(第2版)》
《Elasticsearch技术解析与实战》
《Elasticsearch权威指南(中文版)》
tomcat相关
《深入剖析Tomcat(中文版)》
《Tomcat架构解析.刘光瑞(详细书签)》
spring Cloud相关
《Spring Cloud与Docker微服务架构实战》
Spring相关
《Spring Cloud与Docker微服务架构实战》
《Spring Data实战》
多线程相关
《实战Java高并发程序设计》
《图解Java多线程设计模式》
《Java并发编程的艺术》
《Java多线程编程实战指南 设计模式篇》
git相关
《GitHub入门与实践(日)》
架构相关
《大型网站技术架构:核心原理与案例分析》
数据结构和算法相关
《编程珠玑2》
《大话数据结构》
《数据结构(Java版)》
《程序员的数学3+线性代数》

2017/12/25 已更新227本

Docker相关
《循序渐进学Docker》
struts
《精通Struts基于MVC的JavaWeb设计与开发》
sql相关
《[漫画数据库].(日)高桥麻奈》
《DB2+SQL性能调优秘笈》
《干净的数据++数据清洗入门与实践》
《MySQL最佳优化完美攻略》
《SQL.24小时自学手册》
《SQL语言艺术》
Spring相关
《精通Spring MVC4》
《Spring+MVC+MYBatis企业应用实战》
《Spring+Security3+张卫滨(译)》
Spring Cloud
《Spring Cloud Dalston中文文档+参考手册+中文版》
python相关
《Flask+Web开发:基于Python的Web应用开发实战》
nodejs相关
《了不起的Node js将JavaScript进行到底》
myabtis
《MyBatis技术内幕》
《MyBatis3用户指南中文版》
《MyBatis从入门到精通__刘增辉(著)》
Kylin相关
《Apache Kylin权威指南》
性能相关
《构建高性能WEB站点》
《零成本实现Web性能测试》
《java性能优化权威指南(带书签)》
《Web性能测试实战详解+Web开发典藏大系》
网络编程
《TCPIP网络编程技术基础》
前端相关
《术与道 移动应用UI设计必修课》
《写给大家看的设计书(第4版)》
《Ajax安全技术》
架构
《程序员必读之软件架构》
《架构即未来 现代企业可扩展的Web架构流程和组织原书第2版》
《架构探险 从零开始写javaweb框架》
《人人都是架构师+分布式系统架构落地与瓶颈突破》
《软件构架实践第二版林巴斯等著》
《系统架构:复杂系统的产品设计与开发》
《一线架构师实践指南》
《云计算架构技术与实践+第2版》
《O2O实战+他们是如何利用互联网的》

2017/09/22 已更新192本

Docker相关
《Docker技术入门与实战》
《Docker容器与容器云(第2版)》
《第一本Docker书 PDF电子书下载 带书签目录 完整版》
Elasticsearch相关:
《ElasticSearch可扩展的开源弹性搜索解决方案》
《实战Elasticsearch、Logstash、Kibana++分布式大数据搜索与日志挖掘及可视化解决方案》
Hibernate相关:
《Hibernate5用户手册中文版》
spring Boot相关:
《深入实践Spring Boot.陈韶健》
Java EE:
《[使用Java.Web服务构建SOA].(汉森).成保栋》
《Java+Web开发与实战–Eclipse+Tomcat+Servlet+JSP整合应用》
《HTTPS权威指南 在服务器和Web应用上部署SSL&TLS和PKI》
《Java EE7权威指南卷2》
《Java Web企业项目实战》
《Java+Web技术整合应用与项目实战JSP+Servlet+Struts2+Hibernate+Spring3》
《JavaEE7精粹》
Java相关:
《Java8函数式编程》
《深入理解JAVA内存模型》
多线程:
《JAVA并发编程 核心方法与框架 ,高洪岩著》

2017/08/10 已更新175本

java:
《Head First Java 中文高清版》
《Java核心技术(卷I)基础知(原书第9版)》
《Java核心技术 卷II 高级特性(原书第9版)》
算法:
《数据结构与算法分析_Java语言描述(第2版)》
《算法基础.打开算法之门》
《算法导论(原书第3版)》
《算法概论》
多线程
《Java并发编程:设计原则与模式(第二版)》
《java线程》
《Java虚拟机并发编程》
git
《Git版本控制管理(第2版)
《完全学会GIT GITHUB GIT SERVER的24堂课》
nginx:
《Nginx高性能Web服务器详解》
2017/07/02 已更新162本
java;
《阿里双11系统管控调度架构与实践》
《淘宝技术这十年,完整最终确认版》
《啊哈!算法》
《图解HTTP》完整彩色版
《Apache服务器配置与使用工作笔记》
《JAVA 8实战》
《Java NIO 中文版》
《Java+JVM》
《Jsp、Tomcat、Sqlserver部分笔记》
《从Paxos到Zookeeper 分布式一致性原理与实践(书签版)》
《大型网站系统与JAVA中间件实践(高清版)》
《深入分析Java Web技术修订版》
Hibernate相关:
《精通 Hibernate:Java 对象持久化技术详解(第2版)》
HTML5相关:
《HTML5移动Web开发指南》
《HTML5移动开发即学即用(双色)》
linux相关:
《循序渐进Linux第2版 》
Netty相关:
《Netty in Action第五版》
Nginx相关:
《Nginx教程从入门到精通》
spring相关:
《SPRING技术内幕:深入解析SPRING架构与设计原理》
《Spring源码深度解析》
SpringCloud:
《Spring Cloud微服务实战》
tomcat相关:
《How Tomcat Works中文版》
《Tomcat权威指南(第2版)》
《Tomcat源码研究》
数据库:
《Effective MySQL之SQL语句最优化》
《Sql Cookbook中文版》
《SQL HACKS:100个业界最尖端的技巧和工具》
《sql两日速成》
《SQL注入攻击与防御 原书第2版》
《数据库查询优化器的艺术:原理解析与SQL性能优化》
项目管理:
《项目管理》

2017/06/22 已更新131本

java:
《Java典型应用彻查1000例:Java入门》
《Java典型应用彻查1000例:Web应用开发》
《Java典型应用彻查1000例:数据库应用基础》
《Java典型应用彻查1000例:图形与网络游戏开发》
《Java典型应用彻查1000例:网络应用开发》
《Java典型应用彻查1000例:网站数据库设计》
《Java TCP IP Socket编程(原书第2版)》
《Java程序员面试宝典(第2版)(欧立奇,刘洋,段韬) PDF 扫描版》
《Java程序员面试宝典(杨磊) PDF 扫描版》
《Java程序员面试笔试真题库2017版》
《Java程序员面试笔试真题与解析迷你书_2017版》
《TCPIP详解卷1》
《TCPIP详解卷2》
《TCPIP详解卷3》
《UML精粹》
《图解HTTP》
多线程:
《七周七并发模型》
程序员个人修养:
《编写高质量代码:改善Java程序的151个建议》
linux相关:
《LINUX SHELL脚本攻略(中文版带书签)》
MongoDB相关:
《MongoDB权威指南》
Mybatis相关:
《Mybatis_3中文用户指南》
Node.js相关:
《Node.js 开发指南》
Struts相关:
《Struts2 技术内幕——深入解析Struts2架构设计与实现原理》
Spring相关:
《Spring实战(第4版)》
《Java EE设计模式:Spring企业级开发最佳实践》
AngularJS相关:
《AngularJS权威教程》
《AngularJS深度剖析与最佳实践》

2017/06/02 已更新104本

java:
《Java虚拟机并发编程》
多线程:
《Java并发编程学习笔记》
《Java多线程编程深入详解》
数据库:
《MySQL性能调优与架构设计》
《SQL必知必会》
thymeleaf相关:
《thymeleaf3.0.5中文参考手册》
Redis相关:
《Redis小白入门指南》
MyBatis相关:
《深入浅出MyBatis技术原理与实战》
前端:
《锋利的jQuery2》
《[jQuery攻略].(印)哈瓦尼.扫描版》
《锋利的jQuery》(高清扫描版-有书签)
《jquery高級編程》

2017/05/11 已更新92本

java:
《Java RESTful Web Service实战 》
《JAVA解惑》
Netty相关:
《Netty权威指南》
Redis相关
《Redis设计与实现》

2017/05/01

多线程:
《Java 7并发编程实战手册》
《Java并发编程实战(中文版)》
Spring:
《spring揭秘(完整)》
《精通Spring》
Nginx相关:
《实战nginx》

2017/04/29

《Java常用算法手册 第三版本》 博主付费购买
《数据结构与算法 Java版》 博主付费购买
《图解数据结构-使用Java》 博主付费购买

2017/04/28

Spring相关:
《精通Spring4.X企业应用开发实战》 博主付费购买
《亿级流量网站架构核心技术-跟开涛学搭建高可用高并发系统》 博主付费购买

2017/04/27

前端相关:
《超越CSS:Web设计艺术精髓》
《精通CSS.-.高级Web标准解决方案.中文版》
《CSS权威指南》
CSS时尚编程百例
CSS禅意花园
linux相关:
鸟哥私房菜(全)
[鸟哥的Linux私房菜:服务器架设篇(第二版)]

2017/04/25

java目录:
实战Java高并发程序设计
Head First Servlet JSP(清晰中文版)
java基础教程(强烈推荐)
编程之美-完整版
大话数据结构
算法与数据结构-实用算法基础教程
Java核心技术 卷Ⅰ 基础知识(第8版)
Java核心技术 卷Ⅱ 高级特性(第8版)

2017/04/21

java目录:
Java程序性能优化 让你的Java程序更快、更稳定.pdf

4.码农翻身-大学期间更应该学什么

4.1. 前言

最近有不少还在读书的同学来问我大学期间到底应该学什么,学了Java,看了JS, HTML,CSS, 尝试了一下SSH以后似乎就迷茫了, 这其中还有不少是计算机系的同学。
毫无疑问,为了毕业后找个好工作,在大学期间应该学一些应用层的技能,掌握一门应用广泛的语言及其框架。最好做过实际的项目,有过实习的经验, 这些都是简历中能看得到的加分项,是脱颖而出的重要砝码。
但是这些东西都是一颗大树的枝叶和花朵, 在大学期间更应该学习的是看不见的根,也就是基础知识, 对于科班出身的人更是如此。
原因很简单,基础知识虽然可以在工作以后再补,但是再也找不到这么多大块的时间,这么安静的环境,让你心无旁骛的钻研了。
你不用考虑着第二天怎么去应对客户的脸色,也不用去想着怎么去给领导解释昨晚的严重Bug不是我们的问题, 你只需要单纯的学习就好,看到有这么多同学把美好的时光都花在打游戏上,实在是令我扼腕叹息,要是把这些时间给我就好了!
我现在只能利用一些碎片时间补一下基础的知识,如果时光倒流,让我再坐到图书馆中去静静地看书该多好!
同学甲说: 基础,又是基础,老刘你说了多少遍了!我耳朵都听出茧子来了!
抱歉,基础就是这么很重要,我还是要像祥林嫂一样继续啰嗦。
我认为大学期间应该搞定的基础知识应该包括(不限于)这些:

4.2. C语言

大学期间不要忙着去学Java , Python等高级语言, 你应该先去搞定C语言(不是C++啊),因为这门语言太贴近机器了, 能帮助你理解计算机的运行原理,不信你看看《深入理解计算机系统》, 通篇都是C语言,它怎么不用Java,Python去描述啊? 因为他们太高级了,太抽象了,描述不了底层啊。
学会C语言,才能给其他基础知识打下基础,因为大部分基础软件、系统软件、数据库软件都是C语言写的,你看不懂C程序那怎么行?
不要像我当年一样,看到别人已经能做网页了,自己还在命令行的小黑窗口中折腾,头脑一热就把C语言给扔了,后来又花了很多时间来弥补。
要记住你学会了C这门贴近硬件的,简单而又复杂的语言以后,再去学别的语言,几乎不费吹灰之力, 他们都太简单了!

书籍:《深入理解计算机系统》

4.3. 理解计算机的组成原理

如果你是科班的,老老实实地把《计算机组成原理》和《数字电路》这两门课学了,把那些实验内容(如门电路,半加器,全加器,触发器等,理解这些电路的工作原理)兢兢业业地做好。
你应该定个目标: 自己折腾一个简单的CPU,简单的就是进行数值运算,复杂一点儿的可以实现指令, 如果觉得教材实在枯燥,可以结合《编码》或者《穿越计算机的迷雾》 来学习, 如果实在喜欢玩游戏,可以到《我的世界》游戏中去制造CPU啊,已经有大牛这么做了。

书籍:《计算机组成原理》《数字电路》《编码》《穿越计算机迷雾》

4.4. 理解操作系统原理

操作系统太重要了, 对操作系统的理解决定了你以后工作中能达到的深度,这里边藏着太多极为重要的概念, 例如进程,线程的概念,锁、调度,IO模型,虚拟存储等等 , 他们会在你以后做高性能,高并发系统这一块儿起到重要作用。
即使你先学会了Java , SSH/SSM, 随着你能力的提升,最后你还是得走入这些基础知识的世界。为什么不在大学期间把他们都搞定呢?
有人可能觉得OS太枯燥了,实在是看不下去,其实OS是一门动手实践课, 你可以去看看早期Linux 内核的源码(要求C语言啊),书籍文章多如牛毛; 也可以自己动手自制简单的操作系统,视频书籍也不少,就看你愿不愿意把玩游戏的时间花在上面了。
举个例子:哈工大的VOID同学就在本科期间从零开始做了一个类似于Linux 0.11的操作系统出来,他拿到了阿里的Special Offer , 目前在阿里就职。 他录制的《从零开始编写操作系统》视频可以在B站看到: https://www.bilibili.com/video/av12169693/
同学乙要问了: “人家是大牛,还有一个好学校,我一个三本的渣渣怎么可能做得出来? 你这不是给我设置了一个不可能完成的任务吗?”
确实是这样,天才永远只有少数,不可能每个人都成为天才,也不可能每个人都做出天才的成果。
但是我们也要在天才铺好的道路上坚持往前走走, 也许有一天就会发现,哦,我已经超越了这么多人了啊!
坚持使用Linux而不是Windows,立志在后端做开发的更是要如此, 别像我大学时安装个双系统,结果整天宠幸Windows , 从来不翻Linux的牌子。

书籍:自己找操作系统相关的书籍

4.5. 网络、数据库、编译原理

把这三者合到一起, 是我个人觉得他们的重要性没有前面的高。
对于网络,需要理解网络分层模型,可靠性传输原理,TCP/IP协议,Socket编程,和操作系统结合起来可以考虑写一个Web服务器。
数据库的话首先理解SQL、关系模型、事务、索引, 要想深入学习的话可以看看查询是怎么实现的,事务是怎么实现的, 如果确实感兴趣一定要看看sqlite的源码。
学编译最好的方式就是自制一个编程语言了, 搞出来以后会对编程语言有个极为透彻的理解。

书籍:计算机网络、数据库原理、编译原理相关的数据

4.6 数据结构和算法

这个重要性就不用再强调了,经常看码农翻身的可能都要烦了,可以看看之前的文章《学习数据结构有什么用?》
学习的过程中除了看书理解各种算法和数据结构外,更重要的就是做题、做题、做题!
同学丙说: “老刘,你说的不都是计算机的专业课吗?”
是的,就是计算机的专业课,一般来说,工作个几年以后你才会体会到他们的珍贵,更会痛惜大学时为什么不好好学,就像我现在这样。
不要局限于学校发的教材,现在网上的视频资源异常丰富,世界级大学的课程我们也可以看到,千万不要浪费。 哈佛大学公开课:计算机cs50
同学丁说:老刘你别瞎BB了,你让我学Java,做项目,现在又让我造CPU,写操作系统,数据库,服务器… 我都没时间和女朋友约会了。
恭喜你,已经有女朋友了,超越了大部分同学了,在大学谈一场恋爱,享受一下青春也是非常重要的事情。
但是我想说的是,你不可能把所有的都学会,你能做的就是集中火力突击一个方向,那就是你最感兴趣的方向。 只有那些经得住寂寞,耐得住诱惑的才最有可能成功,如果再和自己的兴趣结合起来,那简直肯定成功。
总而言之,计算机的基础知识让你和别人区分开来,让你有着比别人更快的加速度。
但是老刘瞎BB这么多估计也没太大用处,因为你不行动我也没有办法。

书籍:数据结构和算法相关的书籍

5. 码农翻身-假如时光倒流,我会这么学Java

回头看看, 码农翻身进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。

5.1. 入门

我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让人哭啊。
后来我就看《Thinking in Java》 ,《 Java 核心技术 》, 感觉也不吃力。

如果我之前没学过别的语言,或者半路出家转到计算机行业, 我不会先看上面那两本, 相反我会选《Head First Java》, 这本书非常适合零基础的小白, 读起来轻松搞笑, 不信你看看第一页。

但是光看书也挺无趣的,不妨和视频结合着看, 我觉得传智播客的Java基础视频很不错 (唉, 给传智打了个广告)。
注意:视频的好处就是能看到敲代码的过程, 代码是活的, 这点很爽。 如果视频只是按PPT讲编程, 果断扔掉。
书也有书的好处,能写成书的, 肯定是作者经过系统化思考,梳理才能形成的东西, 所以系统性比较强
书还有其他优点, 例如可以随便的翻, 找到重点反复的看。
所以混合着看经典书+优秀的视频 应该是最好的入门。
Java 入门, 我不会去上培训班,白白浪费钱 ,自学就够了。
自学过程中如果有实战经验丰富的高人指导一下, 给我绘出路线图, 指出攀登的方向,哪些地方有陷阱, 哪些地方不应该浪费时间, 我的自学就可以减少摸索,少走弯路
很不幸, 我当年没有遇到, 如果时光倒流, 我会想办法找一个来指导我。-现在就可以自己帮自己找一个方法指导自己。

书籍:《Head First Java》《Thinking in Java》《Java核心技术卷》

5.2. 实践

软件行业的一大特点就是光看不做永远都学不会,编码不到10万行都不好意思出去打招呼。
所以实践,实践,实践
在校期间,我还是会尽可能的去找项目做(参见我的另一篇文章《从现在开始丰富你的简历》, 回复“简历”查看) , 实在没找到,也可以先把基础打好
我上大学的时候用的是严蔚敏的《数据结构》, 当时我也把习题都做了一遍,考高级程序员的时候, 成绩非常好。
后来我知道了一本更好的算法入门书《算法》, 如果时光能够重来, 我还是会这本书上提到的所有数据结构和算法用Java 都实现一遍, 课后作业也争取都做一遍。
这是个非常重要的训练,因为我知道, 真的做了, 就会发现工作以后只要不是设计算法, 基本的数据结构没有能难住我的。

书籍:《数据结构-严蔚敏》《算法-谢路云》

5.3. Java SE

对于Java集合框架, 不但要学会用, 我还会尝试着实现一遍,List, ArrayList, Set ,HashSet, Map ,HashSet 等等, 要是不知道怎么写, 看看JDK的源码就可以了, 那里有最好的老师。
实现一遍能更好的明白面向对象的设计, 接口,抽象类, 具体类的关系, 怎么分离职责,会学习到设计模式中的模板方法, Iterator 等 。
值得一提的是Iterator, 很有趣, 我还清楚的记得那一年自己实现集合框架中 Iterator 的时候的激动心情啊 😃
在实现Java 集合框架的时候, 可以顺便把泛型也学了, 不学不行,要不然实现不了啊。
Java 世界里,万事万物都是对象, 大家都知道封装,继承,多态, 但是仅仅了解这些只是入了门, 不可能做出真正的面向对象的程序。
有一本经典的书《敏捷软件开发, 原则,模式,实践》,里边详细的讲解了一个薪水支付案例,是迄今为止最好的面向对象设计的例子
我会用Java 把它实现一遍, 真正的体会一下OOD, 了解怎么才能把合适的责任分给合适的类, 什么叫面向接口而不是面向实现编程, 什么是优先使用组合而不是继承。

对于Java线程, 重点还是理解概念, 因为我知道在以后的工作中(除非从事系统级编程) ,自己写线程/线程池的机会是非常罕见的,都被类库,框架给封装好了。所以重点是理解,看书的话就当然是《Java并发编程实战》 ,一大群大牛写的啊。

对于Java IO, 我觉得架构设计的很优雅,典型的学院派, 可就是不太实用, 打开读取一个文件都得用装饰者模式包装来包装去, 太累了。
项目实战中呢,也就是读取个property 文件, xml 文件。 我还是重点去理解概念和设计吧。
不过自己写个简单的xml 解析器倒是不错。
至于 AWT, Swing , 简单看看就行了, 我不会去深入研究, Java 是典型的服务器端的语言, 开发客户端程序的极少, 你想想, 你用Swing/AWT搞个桌面程序出来, 还得让客户装个JRE才能运行, 是不是有点过分 ? 据我所知,也即是银行的一些应用在用Swing ,AWT了。有人可能说 Applet, 它曾经流行过, 现在早都没人用了。所以我不会在Swing和AWT上浪费时间。
Java Reflection 看起来没有集合框架,线程,OO等那么耀眼, 但它可是很多框架(SSH) 的基础啊(回复“反射”查看相关文章), 先把基础学会,后面的Java EE得用到它。
想真正的学好Java ,不了解Java 虚拟机怎么可能? 《深入理解Java 虚拟机》一定得看,看完的目标就是写个简单的Java 反编译器。
想真正的学好Java ,不了解Java 虚拟机怎么可能? 《深入理解Java 虚拟机》一定得看,看完的目标就是写个简单的Java 反编译器。

书籍:《敏捷软件开发, 原则,模式,实践》《Java并发编程实战》《深入理解Java虚拟机》

5.4. 做个有素养的码农

我记得08的时候, 我的IBM经理说设计模式是必备技能, 不懂设计模式的我们不能要了。
所以设计模式是必学, 其实Java里边用的非常多,简直就是设计模式的活教材工厂方法,单例,模板方法, 装饰者,责任链都有体现。
当然我会去先看一下轻松的《Head First Design Patterns》《设计模式》的作者之一 Eric Gamma 都大力推荐, 绝对不容错过。

又过了几年, 我的IBM经理又说,现在我们默认设计模式大家都会了, 敏捷实践(敏捷开发)是必备技能 !
所以, JUnit 我得会, 重构我得会, TDD持续集成这些最最基本的敏捷实践也得知道, 要不然会被人鄙视啊。
作为一个有追求的Java码农, 我写代码的时候要遵循Java 的编码规范,例如类名首字母大写, 报名要小写, 方法名要首字母小写…等等。
作为代码洁癖, 我受不了脏代码, 我会不断的打磨自己的代码,直到它像一个工艺品。
Java 的最佳实践 《effective java》 怎么能错过? 里边满满的全是JDK的作者们总结出来的java 编程最佳用法。
不过翻译的实在是不咋滴, 很多句子都得仔细的琢磨一下才知道什么意思, 所以我打算录一系列视频讲解一下,敬请期待。

书籍:《Head First Design Patterns》《设计模式》《Effective Java》

5.5. Java EE

走了这么远, 终于来到Java EE了, Java 不就是写服务器端的Web应用的吗?
我会自己写个Web程序, 可以考虑把上面提到的经典的薪水支付案例改造成Web 版, 用最基础的技术Servlet/jsp/jdbc
然后 研究struts, 自己写个简单mvc框架, 在自己的Web 程序中用起来, 这叫吃自己的狗粮。
然后研究Hibenete , 自己写个简单的OR mapping框架, 再吃一次自己的狗粮。
然后读一下经典的书《J2EE development without EJB》 , 对,就是Spring 的作者Rod Johnson写的, 它颠覆了大家对于重量级EJB的认识, 开启了新的时代。
有了这本书的铺垫, 自己写个简化的依赖注入也不是难事, 写好后还是在自己的Web程序中用起来, 最后一次吃自己的狗粮。

等你做了就知道, 所有这些,都依赖Java Reflection
再往后走, 就应该是找真正的项目做, 或者去找实习了, 那是另外一个话题了,以后再聊。

书籍:Servlet相关、Tomcat相关、struts相关、Hibernate相关、《J2EE development without EJB》

5.6. 阅读代码

熟读唐诗三百首,不会作诗也会吟。
模仿是最好的学习! 多看看大牛们的代码是怎么写的, 潜移默化,自己的武功也能提高。
我身边要是有个好师傅, 跟着他,看着他编程, 提高的该有多快啊。
在学习Java SE和Java EE的同时, 我会读一下这些源代码:
JDK中的 Java Collection 源码 : 老祖宗的东西绝对经典
JUnit 源码 : 看看Eric Gamma 和 Kent beck 是怎么通过模式来创建系统的 (回复"JUnit"查看)
SpringSide : 以Spring Framework为核心的,Pragmatic风格的JavaEE应用参考示例,是JavaEE世界中的主流技术选型,最佳实践的总结与演示。
国人开发的,大力推荐一下。
此外我还是会研究下本世纪初著名的Jive论坛, 虽然非常古老, 虽然源码学院派十足, 但简直是设计模式的大本营, 都是活生生的应用的例子
里边有个用代理模式实现权限控制, 让我记忆犹新。
另外如果有余力的,有兴趣的话, 当然可以阅读Struts, Spring, Hibernate的源码, 甚至参与进去开发了。
如何学习Java ,这是我这么多年来的感受, 也只是我的一家之谈。 欢迎和我交流 。
学习编程从来就不是一件容易的事情, 不可能看看视频,看看书就学会, 需要大量的编程和实践。 编程虽然是极为辛苦的脑力和体力劳动, 但其中蕴含的创造的乐趣也是无与伦比的。 希望每个人都能够享受这个过程,乐在其中。
我在自学的过程中, 有个非常强烈的感受,那就是缺乏牛人的指导, 在黑暗中摸索乱撞, 容易走上弯路。并且一个人学习的话,遇到问题,没人沟通, 非常苦闷。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页