前言
马上过年了,迫于买了kindle & kindle ultimate,今年看了很多书,看完之后如果不写点总结有点遗憾,趁周末写下读后感。
我看的书书书书书书书
专业书
《代码大全》
不要被名字骗了,这本书英文名《Code Complete》,'complete'意为完整,完成,完备.'code complelte'即完备的代码
,它并不是代码的百科全书,而是教你如何写出工程化,规范化,遵循最佳实践的代码.初入公司时写出的代码,emm...屎一样,现在一直看书+实践,好了很多。
恰当的命名十分重要
-
智力上的可管理性,隐藏的信息越多同一时间需要考虑的信息就越少.
从代码层面来讲就是拆分子函数 - 语义的主要性:函数不要带有副作用,它完成的功能应该符合它的名字
- 注释! 注释! 注释!,
写出为什么这么做,而不是怎么做的
- 修改老代码前,先做些简单的重构,
个人实践,十分有效
一本值得反复阅读
的书,可能明年会翻出来再看一遍
《Java并发编程的艺术》
Java并发编程的底层原理和实现,国人写的书,本来只是因为kindle uiltimate 免费才随便看看,看到第三章就彻底被吸引了.完完整整看了三四遍,推荐观看,尤其是第三章,全书的精华
- 为了解决硬件速度的不匹配(cpu,内存,硬盘),计算机中存在各种级别的缓存(CPU缓存,线程缓存,内存缓存),这些缓存提高了计算机的运行效率,也导致数据的不一致,引入了同步问题.
- 在计算机中,软件技术和硬件技术的一个共同目标:在不改变程序执行结果的前提下,尽可能提高并行.
- 锁的三个层次——偏向锁,轻量级锁,重量级锁。层次越高性能损耗越高,锁只能升级,不能降级
- JSR-133,java内存模型(JMM)的重大更新,volatile的语义增强(现在的volatile和锁拥有相同的语义),final的修复。引入了happends-before规则,as-if-serial规则,这些规则方便我们(程序员)理解。
- 编译器的代码重排序优化,处理器的指令重排序优化.以及为了正确的执行结果引入的内存屏障
- Java是基于共享内存的通信机制,线程之间的通信是隐式的,同步是显式的
- 并发容器的基石——CAS和volatile以及
Doug Lea
个人强烈推荐,准备买本实体书收藏
《重构》
如何安全的改造老代码? 看它就对了.这本书的内容和《代码大全》有很大一部分重叠,比如命名和提取子函数,但它更着重于如何安全的改造旧代码
,这一点是很多像我一样的新手容易忽略的。
看这本书也是有起因的: 之前有一个功能是我来做的,上线之后虽然能跑,但是逻辑太乱,代码太烂,就在空闲时间改了很多,交给大佬审得到的回复是:你这完全是重写,不是重构
,之后就一直思考这个问题,直到看到这本书,才明白重构的真正意义:改造代码使其逻辑更清晰,代码更整洁是重构的一个目的,改造后的代码可以正常运行是更重要的目的,如果不满足第二个条件,恭喜,又一个背锅侠诞生了
《编写可读代码的艺术》
相当于《代码大全》的一个子集,比较独特的是它把可读代码的编写分为了几个层级
- 表面层次的改进——命名和注释
- 简化循环和逻辑——控制流和表达式拆分
- 重新组织代码——提取子函数
- 易于测试的代码——TDD
印象已经不太深了,可以作为代码大全的进阶读本
《高性能MySQL》
只学到了这本书的20%,不过对于开发来说,足够了
- 没有索引加持的查询很慢
- null字段弊大于利,如非必要不要使用
- 聚簇索引,二级索引的区别
- MVCC(multi version concurrent control,多版本并发控制 )——隐藏的两列,事务版本和删除版本
-
最左前缀索引原则
,它的限制真的很多,很难用好 - 主从复制的原理——binlog(binary log)
《Maven实战》
一本很好的工具书,看完之后对maven的原理基本理解了,作者为了凑字数强加了很多代码,可以跳过。必看
- 构件(maven中的术语,比如log4j就是一个构件)的定位原理
- 依赖管理——scope的含义,依赖传递的处理以及依赖冲突的解决办法,
一定多看几遍,你会用到的
- 超级pom:‘儿子,我是你爸爸’——maven一直说约定大于配置,'约定'就在
超级pom
里,所有pom都继承自超级pom,如果有一些默认配置你不清楚,去超级pom里看下就明白了 - 生命周期-resource,compile,test-resource,test-compile,test,jar,install。
插件和生命周期的绑定
以及插件简写是如何解析的(mvn compile 这里的compile就是插件简写)
- dependencyManagement——按需对依赖版本进行管理,如果你的项目有多个模块,记得看下
- 模块的继承和组合——继承-爸爸不知道儿子,儿子知道爸爸。组合-爸爸知道儿子,儿子不知道爸爸。
- 构件仓库/插件仓库&镜像——在国内不知道怎么设置镜像,拉取速度会让你痛苦的
《深入理解Java虚拟机》
JVM方面这本算是必备书,针对JDK7。有些内容如新生代老年代不太适用目前版本的JDK。大致有这几块
- JVM中的内存划分
- 共享——堆,方法区
- 私有——虚拟机栈,本地方法栈,程序计数器
- GC
- 对象还活着吗?——引用计数法和可达性分析算法
- Java卡顿的原因-GC时stop the world
- GC算法——标记-清理,复制,标记-整理
- 新生代——大多数对象朝生夕死,使用
复制
算法快速回收 - 老年代——少数对象生存时间长,使用
标记-整理
和标记-清理
回收 - 新生代收集器——
Serial
,ParNew
,Parallel Scavenge
- 老年代收集器——
Serial Old
,Parallel Old
,CMS(目前最常用)
- JDK7时的前沿收集器——G1,
可预测的停顿
,并行
,分代整理
。整体基于“标记-整理”算法,局部(两个Region)基于复制算法
- 类加载
- 加载流程——加载,验证,准备,解析,初始化,使用,卸载。
以上阶段可能交替进行
- 双亲委派机制,以及对双亲委派机制的破坏-线程上下文类加载器
- 类加载器——引导(Bootstrap)类加载器,拓展(Extension)类加载器,系统(System)类加载器
- 加载流程——加载,验证,准备,解析,初始化,使用,卸载。
- JVM的各种神优化
- 编译期优化——在源码翻译到字节码时起作用,举个比较有趣的:解语法糖,诟病已久的以擦出为基础的范型的底层原理,foreach在字节码中表示,已经自动装箱拆箱。
- 运行期优化—— 解释运行和编译运行,编译运行的不同级别
C1
,C2
.JIT(just in time)
即时编译器和热点代码
- 各种优化术语——延迟编译,分层编译,栈上替换,乐观判断,分支预测,公共子表达式消除,逃逸分析,锁消除。。。。等等,第一次看到这些名词可能不明觉厉,不要害怕,认真读一遍,很多技术后面的思想都是很简单的(这并不代表实现很简单)
有兴趣可以看下我之前写的几篇相关文章JVM专题
《Go语言实战》
Go很火,自己私下也使用过,找了这本书,看了一遍,结合对底层原理的理解终于明白:Go火起来时有道理的
- 线程模型——kernel threads, user threads, and fibers。Java目前使用的主要是Kernel threads(或者说kernel thread的高级抽象LWP),Go用的是user threads,这时Go并行的基础,也
直接决定了它们使用的内存模型
- 内存模型——共享内存和信息传递,Java用的共享内存,Go用的消息传递
- Go的不足之处——糟糕的异常机制,过多的约束
参见之前写过的一篇Go语言之思
《精通正则表达式》
正则表达式基础,介绍了正则表达式的流派和它背后的原理,看过两个月后80%的内容都忘了,印象最深刻的就是环视
,推荐快速过一遍,了解下原理就可以,以后用到知道往哪方面找。
《敏捷软件开发(原则模式与实践)》
经典,过了一遍,第一次觉得结对编程是真实存在并且有效的,快速设计,快速反馈,快速修改以及TDD,领略到了不一样的风采。
《Java8实战》
十分有用,lambda,Stream,Optional更是重点
,之前Stream用的挺多,大都是filter,map,collect一把梭,用的很爽然而没有什么提升。看这本书期间正好在做一个版本,现学现卖,都用了上去,代码量减了不少,语义也更清晰
,以前想试下设计模式,奈何都要搞一个继承体系(如模版方法),得不偿失,有了lambda终于试了一下,感觉良好。
- lambda的语法—— ([ArgType arg...])->[{[return] }],lambda中很多语法组成都是可选的,这也是lambda的目标:
尽可能的简洁
- lambda的匹配规则——鸭子类型,如果它走起来像鸭子,叫起来像鸭子(实现了接口要的方法),它就是一只鸭子(可以被赋值给接口的值),这点和Go挺像的
3.Stream的高阶使用——分组,多级分组,partitionBy,collect()的自定义使用。如果使用恰当,代码可以从几十行缩减到1行,并且语义更清晰。 - 不要滥用parallel,参见不要滥用parallel
- Optional,null的另一种解决方案,提升代码的流畅度,对于
代码语义
真的意义重大
有兴趣可以再看下这篇工作复盘,有一部分讲了怎么实践的
闲书
《自控力》
个人学到最重要的:学会原谅自己&及时行乐。
《非暴力沟通》
emm,挺有意思的一本书,相比于书中的语言,我们平时沟通确实算的上暴力沟通
《男人来自火星,女人来自金星》
男女之间有些差异很神奇!作者研究的很透彻,从他的对男人的描述中,可以看到自己的影子,可惜的是,看完之后,还是不知道怎么哄女朋友。
《无声告白》
be yourself!live for your own。
《系统之美》
简单点说,强迫自己看的,只能说不太适合我,唯一get到的就是正反馈和负反馈。
《人间失格》
致郁系的书,看了一章,看着很扎心。
《给投资新手的极简股票课》
两个小时看完,对股票没那么多的误会了(没区别,我又不会买股票,23333)
《码农翻身》
刘欣刘大的书,用故事讲技术,通俗易懂又不失深度,强推。
明年准备看的书
- 《CSAPP》大三看到第三章停了,不求全理解,只希望能过一遍
- 《算法4》 算法一直是心中之痛,一直不得其法,完整看一遍,把基本算法记下来
- 《SICP》 Lisp,让我体会一下函数式编程的魅力吧
后记
终身学习。