不废话,直接推荐几本我读过的、自认不错的书。
网络编程,虽然有了 Netty 框架等很优质的网络框架了,但是理解背后的原理,对咱们定位项目的 bug,优化代码的性能,帮助非常大。
《Java TCP/IP Socket编程》(豆瓣 8.0 分)
这本书,我们既可以去学到必要的网络基础,也能学会怎么用 Java 去网络编程,非常推荐。
对于网络编程,大家都知道,这是易学难精的技能。学懂原理,了解网络编程,看看我上面推荐的书就够了。但是,要精通网络编程,写好网络相关的程序,那是相当不容易的。
所以,在 Java 圈,一旦遇到网络编程相关的事情,大家都会采用 Netty 框架去做。Netty 框架让我们能不需要成为网络编程大师,就能写出非常优秀的网络应用。
了解 Netty 框架对咱们也是非常重要的一件事,学习 Netty 框架,推荐《Netty实战》(豆瓣 7.5 分)。
这本书,把 Netty 的方方面面讲的很全,Netty 的设计思想也覆盖了大部分,对于熟练使用 Netty 完全够用了。
对Java程序员来说,多线程编程很重要。因为只有懂了多线程编程,咱们才能处理各种稍微困难的需求。比如,快速处理大量用户对系统的访问;又比如,想同时访问多个第三方接口。
多线程编程又叫并发编程,其实是很复杂的事情,看一本书就想掌握它是不太现实的。我这里会推荐三本书,配合起来,一步步从多线程的原理到多线程的实战全部贯穿起来。
对于多线程的理解,我推荐的第一本书是《Java并发编程实战》(豆瓣 9.0 分)。
这本书是一本非常经典的关于多线程编程的书。里面对Java的多线程方方面面的细节都讲的非常到位。
《Java并发编程实战》这本书的下载方式看这个,这里还有其他多线程必读书籍:
只是由于多线程确实太复杂,涉及到的知识也太广了,导致《Java并发编程实战》这本书出现了两个问题:
所以,我这里推荐第二本书《Java多线程编程实战指南(核心篇)》(豆瓣 9.0 分)。
这本书代码例子多,《Java并发编程实战 》有些讲不透的知识点,这本书会有所弥补。所以,当看《Java并发编程实战 》的时候,不管是需要练习代码,还是想去搞清楚知识点,《Java多线程编程实战指南 》这本书都极为合适。
多线程我再强调一下,这是 Java 很高级的特性,也是很难的部分,很多哪怕是工作了 3、4 年的程序员,对此也掌握的不到位。
上面说的两本书,有原理,有代码示例,如果是换成别的知识,那可能足够了。可是对于多线程这么复杂的东西,我们还需要把学过的所有零碎知识点去综合贯穿起来,形成关于多线程的知识体系才算是真正掌握到位。
所以,这就得推荐第三本书《图解Java多线程设计模式》(豆瓣 8.6 分)。
跟着这本书的讲解,把咱们所有的知识点通过练习书中介绍的所有模式,去串起来,才最终算是多线程的学习告了一个段落。
除了看书,学多线程还得多动手练习,尤其是高并发知识,纸上得来终觉浅……但是很多人在工作中又接触不到高并发项目……怎么办?无解了吗?
在这里我分享一个高并发的学习经验。
你可以自己写一个小的电商项目,从最简单的单体项目开始,然后按照以下三个阶段来学习高并发。
在高并发条件下,学习对单机性能优化。
用 Docker 容器去运行电商项目,然后用 jmeter、wrk 等工具去压测。
在压测期间,你会发现:由于系统每个模块不同,所以性能表现就不一样。
这是正常的,不同模块、不同产品对并发指标的要求本身想·是不一样的。例如,商品浏览和下订单,一个读为主,一个写为主。
基于这种情况,你最好要编写复杂的压测脚本,能自动实现不同模块的压测任务。
然后在这种不断地压测探测下,去探测问题,并且通过优化代码、JVM 去解决问题。
比如,解决误用 HashMap 导致死循环的问题。又比如,误用不带缓存的文件 IO 流,去读取文件的问题等等。
在程序和 JVM 优化完毕后,你可能又会发现数据库也存在问题。于是,你又要去研究如何优化数据库 SQL,如何对数据库分表等问题。
也是在这个阶段,你可能还会学的到,缓存的必要性以及同步缓存数据状态的重要性等重要知识点。
在搞了单机优化后,没有办法再通过单机的压测学到什么新的东西了。于是,转向第二阶段。
从阿里云买了两台机器,开始尝试使用负载均衡去分担高并发的压力。
同样的,也是借助压测工具去模拟了高并发。在压测期间,负载均衡和系统屡屡出现和单机完全不一样的问题。
比如,负载均衡本身的性能问题。比如,在一些时候,负载均衡后面的机器负载是不平衡的,需要对负载算法进行调整。
这个阶段,你会接触到负载均衡中大部分的细节。
但是,高并发中,很多系统的构成会很复杂,以至于需要分布式架构系统的程度。他们需要各种中间件做通信,做存储。
所以,继续第三阶段的练习。
为了能熟悉市面上各中间件的使用,开始对单体的电商平台进行改造。
比如,一些本地调用的方法,替换成 Dubbo 远程调用。
比如,一些模块间调用,替换成 MQ 中间件传消息。
再比如,一些放在关系数据库的被频繁访问的数据,改存在 MongoDB 中……
当然,压测依然继续。就这样,你可以实践到很多中间件和分布式框架的使用。
在模拟高并发练习的同时,别忘了去读各种高并发高性能的书籍。比如,《大型网站服务器容量规划》、《互联网创业核心技术:构建可伸缩的web应用》等书籍。
三个阶段的学习之后,面试的大部分基础问题你基本可以应付了。
我在这里想推荐 3 本书,这 3 本书能让程序员们对架构师的工作先有个初步的了解,从而让他们能对架构的思维略窥门径。
要转成架构师思维,首先得知道架构师是如何思考问题的,当业务人员给出具体的需求之后,架构师们是如何根据需求去做对应的设计和分析的。
因此,我推荐先可以看看《架构师修炼之道》这本书。
这本书的英文版我其实也读过,自认为里面的所思所想,确实是我做架构时都考虑过的事情,甚至里面提及的一些思路,我自身都没考虑过。
这本书,我认为可以作为程序员转架构师的第一本书:
它起码会提醒程序员,从上到下思考系统架构,到底是怎样的一个思路。
了解了架构师是如何从上而下的思考和设计系统架构的,初步对架构师的思维有了些许印象后,就需要找个师傅能全面带你一把,能通过走一遍架构师的工作流程,去开始尝试架构师工作入门,去通过实践,一点点的让这些思维形成习惯。
而这个师傅我认为是《从零开始学架构》这本书。
这本书读起来非常快,读的也很过瘾,是我看到的最贴近中国架构师日常实践的书。
书里面对架构师从设计到经常用的模式,以及对应的理论都做了介绍。
尤其是架构设计中的一些重要的大坑,和架构师重要的取舍思想都做了清晰的介绍,非常适合帮助实践入门,对程序员的技能提升有肉眼可见的帮助。
我前面说的两本中文书,缺少了很重要的一部分,就是
架构师是对新技术是如何调研和学习的。
架构师引入新技术,也是架构师工作很重要的部分。
这方面的书,我读过的极其出色的一本就是《Thinking Architecturally》。
只是可惜这本书是英文书。不过,我始终认为,作为 IT 行业的程序员,英语还是重要的,国内引进的优秀技术书籍毕竟有限,很多优秀的书籍因为语言问题,从而错失品鉴的机会,非常可惜。
这本书介绍了怎么评估新工具、新技术,包括新技术引入后的一些注意事项,介绍的都非常详细。
可以说,从我读过这本书以后,看新技术、学新技术、引入新技术都有了坚实的理论基础。不仅如此,读了这本书以后,我甚至引入新技术后,风险的预估能力都提升了非常多。
而且更难得的是,这本书写的十分通俗易懂,也不需要太多的技术门槛。也强烈推荐入门阅读。
以上 3 本书,我认为对一名打算将来进阶成为架构师的程序员,作为入门的引导,以及寻找后面努力的方向是非常足够了。
要知道,架构师不仅仅是个工作,同时也代表着各种各样的更高阶的技术能力,而要提升能力之前,先拥有一套全局的架构师思维,知道架构师都做什么事情,从而能得到努力前进的方向,是极其重要的第一步。
迈出这一步之后,你就会明白,什么架构模式、架构设计、各种原理,都是以架构师的思维为基础的工具。
希望大家能把 3 本书好好学一遍,把通往架构师的路走的更加坚实。