2018读书总结

前言

马上过年了,迫于买了kindle & kindle ultimate,今年看了很多书,看完之后如果不写点总结有点遗憾,趁周末写下读后感。

我看的书书书书书书书

专业书

《代码大全》

不要被名字骗了,这本书英文名《Code Complete》,'complete'意为完整,完成,完备.'code complelte'即完备的代码,它并不是代码的百科全书,而是教你如何写出工程化,规范化,遵循最佳实践的代码.初入公司时写出的代码,emm...屎一样,现在一直看书+实践,好了很多。

  1. 恰当的命名十分重要
  2. 智力上的可管理性,隐藏的信息越多同一时间需要考虑的信息就越少.从代码层面来讲就是拆分子函数
  3. 语义的主要性:函数不要带有副作用,它完成的功能应该符合它的名字
  4. 注释! 注释! 注释!,写出为什么这么做,而不是怎么做的
  5. 修改老代码前,先做些简单的重构,个人实践,十分有效

一本值得反复阅读的书,可能明年会翻出来再看一遍

《Java并发编程的艺术》

Java并发编程的底层原理和实现,国人写的书,本来只是因为kindle uiltimate 免费才随便看看,看到第三章就彻底被吸引了.完完整整看了三四遍,推荐观看,尤其是第三章,全书的精华

  1. 为了解决硬件速度的不匹配(cpu,内存,硬盘),计算机中存在各种级别的缓存(CPU缓存,线程缓存,内存缓存),这些缓存提高了计算机的运行效率,也导致数据的不一致,引入了同步问题.
  2. 在计算机中,软件技术和硬件技术的一个共同目标:在不改变程序执行结果的前提下,尽可能提高并行.
  3. 锁的三个层次——偏向锁,轻量级锁,重量级锁。层次越高性能损耗越高,锁只能升级,不能降级
  4. JSR-133,java内存模型(JMM)的重大更新,volatile的语义增强(现在的volatile和锁拥有相同的语义),final的修复。引入了happends-before规则,as-if-serial规则,这些规则方便我们(程序员)理解。
  5. 编译器的代码重排序优化,处理器的指令重排序优化.以及为了正确的执行结果引入的内存屏障
  6. Java是基于共享内存的通信机制,线程之间的通信是隐式的,同步是显式的
  7. 并发容器的基石——CAS和volatile以及Doug Lea

个人强烈推荐,准备买本实体书收藏

《重构》

如何安全的改造老代码? 看它就对了.这本书的内容和《代码大全》有很大一部分重叠,比如命名和提取子函数,但它更着重于如何安全的改造旧代码,这一点是很多像我一样的新手容易忽略的。

看这本书也是有起因的: 之前有一个功能是我来做的,上线之后虽然能跑,但是逻辑太乱,代码太烂,就在空闲时间改了很多,交给大佬审得到的回复是:你这完全是重写,不是重构,之后就一直思考这个问题,直到看到这本书,才明白重构的真正意义:改造代码使其逻辑更清晰,代码更整洁是重构的一个目的,改造后的代码可以正常运行是更重要的目的,如果不满足第二个条件,恭喜,又一个背锅侠诞生了

《编写可读代码的艺术》

相当于《代码大全》的一个子集,比较独特的是它把可读代码的编写分为了几个层级

  1. 表面层次的改进——命名和注释
  2. 简化循环和逻辑——控制流和表达式拆分
  3. 重新组织代码——提取子函数
  4. 易于测试的代码——TDD

印象已经不太深了,可以作为代码大全的进阶读本

《高性能MySQL》

只学到了这本书的20%,不过对于开发来说,足够了

  1. 没有索引加持的查询很慢
  2. null字段弊大于利,如非必要不要使用
  3. 聚簇索引,二级索引的区别
  4. MVCC(multi version concurrent control,多版本并发控制 )——隐藏的两列,事务版本和删除版本
  5. 最左前缀索引原则,它的限制真的很多,很难用好
  6. 主从复制的原理——binlog(binary log)
《Maven实战》

一本很好的工具书,看完之后对maven的原理基本理解了,作者为了凑字数强加了很多代码,可以跳过。必看

  1. 构件(maven中的术语,比如log4j就是一个构件)的定位原理
  2. 依赖管理——scope的含义,依赖传递的处理以及依赖冲突的解决办法,一定多看几遍,你会用到的
  3. 超级pom:‘儿子,我是你爸爸’——maven一直说约定大于配置,'约定'就在超级pom里,所有pom都继承自超级pom,如果有一些默认配置你不清楚,去超级pom里看下就明白了
  4. 生命周期-resource,compile,test-resource,test-compile,test,jar,install。插件和生命周期的绑定以及插件简写是如何解析的(mvn compile 这里的compile就是插件简写)
  5. dependencyManagement——按需对依赖版本进行管理,如果你的项目有多个模块,记得看下
  6. 模块的继承和组合——继承-爸爸不知道儿子,儿子知道爸爸。组合-爸爸知道儿子,儿子不知道爸爸。
  7. 构件仓库/插件仓库&镜像——在国内不知道怎么设置镜像,拉取速度会让你痛苦的
《深入理解Java虚拟机》

JVM方面这本算是必备书,针对JDK7。有些内容如新生代老年代不太适用目前版本的JDK。大致有这几块

  1. JVM中的内存划分
    • 共享——堆,方法区
    • 私有——虚拟机栈,本地方法栈,程序计数器
  2. GC
    • 对象还活着吗?——引用计数法和可达性分析算法
    • Java卡顿的原因-GC时stop the world
    • GC算法——标记-清理,复制,标记-整理
    • 新生代——大多数对象朝生夕死,使用复制算法快速回收
    • 老年代——少数对象生存时间长,使用标记-整理标记-清理回收
    • 新生代收集器——Serial,ParNew,Parallel Scavenge
    • 老年代收集器——Serial Old,Parallel Old,CMS(目前最常用)
    • JDK7时的前沿收集器——G1,可预测的停顿并行分代整理。整体基于“标记-整理”算法,局部(两个Region)基于复制算法
  3. 类加载
    • 加载流程——加载,验证,准备,解析,初始化,使用,卸载。以上阶段可能交替进行
    • 双亲委派机制,以及对双亲委派机制的破坏-线程上下文类加载器
    • 类加载器——引导(Bootstrap)类加载器,拓展(Extension)类加载器,系统(System)类加载器
  4. JVM的各种神优化
    • 编译期优化——在源码翻译到字节码时起作用,举个比较有趣的:解语法糖,诟病已久的以擦出为基础的范型的底层原理,foreach在字节码中表示,已经自动装箱拆箱。
    • 运行期优化—— 解释运行和编译运行,编译运行的不同级别C1C2.JIT(just in time)即时编译器和热点代码
    • 各种优化术语——延迟编译,分层编译,栈上替换,乐观判断,分支预测,公共子表达式消除,逃逸分析,锁消除。。。。等等,第一次看到这些名词可能不明觉厉,不要害怕,认真读一遍,很多技术后面的思想都是很简单的(这并不代表实现很简单)

有兴趣可以看下我之前写的几篇相关文章JVM专题

《Go语言实战》

Go很火,自己私下也使用过,找了这本书,看了一遍,结合对底层原理的理解终于明白:Go火起来时有道理的

  1. 线程模型——kernel threads, user threads, and fibers。Java目前使用的主要是Kernel threads(或者说kernel thread的高级抽象LWP),Go用的是user threads,这时Go并行的基础,也直接决定了它们使用的内存模型
  2. 内存模型——共享内存和信息传递,Java用的共享内存,Go用的消息传递
  3. Go的不足之处——糟糕的异常机制,过多的约束

参见之前写过的一篇Go语言之思

《精通正则表达式》

正则表达式基础,介绍了正则表达式的流派和它背后的原理,看过两个月后80%的内容都忘了,印象最深刻的就是环视,推荐快速过一遍,了解下原理就可以,以后用到知道往哪方面找。

《敏捷软件开发(原则模式与实践)》

经典,过了一遍,第一次觉得结对编程是真实存在并且有效的,快速设计,快速反馈,快速修改以及TDD,领略到了不一样的风采。

《Java8实战》

十分有用,lambda,Stream,Optional更是重点,之前Stream用的挺多,大都是filter,map,collect一把梭,用的很爽然而没有什么提升。看这本书期间正好在做一个版本,现学现卖,都用了上去,代码量减了不少,语义也更清晰,以前想试下设计模式,奈何都要搞一个继承体系(如模版方法),得不偿失,有了lambda终于试了一下,感觉良好。

  1. lambda的语法—— ([ArgType arg...])->[{[return] }],lambda中很多语法组成都是可选的,这也是lambda的目标:尽可能的简洁
  2. lambda的匹配规则——鸭子类型,如果它走起来像鸭子,叫起来像鸭子(实现了接口要的方法),它就是一只鸭子(可以被赋值给接口的值),这点和Go挺像的
    3.Stream的高阶使用——分组,多级分组,partitionBy,collect()的自定义使用。如果使用恰当,代码可以从几十行缩减到1行,并且语义更清晰。
  3. 不要滥用parallel,参见不要滥用parallel
  4. Optional,null的另一种解决方案,提升代码的流畅度,对于代码语义真的意义重大

有兴趣可以再看下这篇工作复盘,有一部分讲了怎么实践的


闲书

《自控力》

个人学到最重要的:学会原谅自己&及时行乐。

《非暴力沟通》

emm,挺有意思的一本书,相比于书中的语言,我们平时沟通确实算的上暴力沟通

《男人来自火星,女人来自金星》

男女之间有些差异很神奇!作者研究的很透彻,从他的对男人的描述中,可以看到自己的影子,可惜的是,看完之后,还是不知道怎么哄女朋友。

《无声告白》

be yourself!live for your own。

《系统之美》

简单点说,强迫自己看的,只能说不太适合我,唯一get到的就是正反馈和负反馈。

《人间失格》

致郁系的书,看了一章,看着很扎心。

《给投资新手的极简股票课》

两个小时看完,对股票没那么多的误会了(没区别,我又不会买股票,23333)

《码农翻身》

刘欣刘大的书,用故事讲技术,通俗易懂又不失深度,强推。


明年准备看的书

  1. 《CSAPP》大三看到第三章停了,不求全理解,只希望能过一遍
  2. 《算法4》 算法一直是心中之痛,一直不得其法,完整看一遍,把基本算法记下来
  3. 《SICP》 Lisp,让我体会一下函数式编程的魅力吧

后记

终身学习。

你可能感兴趣的:(2018读书总结)