2018读书总结

前言

立刻过年了,迫于买了kindle & kindle ultimate,今年看了不少书,看完以后若是不写点总结有点遗憾,趁周末写下读后感。java

我看的书书书书书书书

专业书

《代码大全》

不要被名字骗了,这本书英文名《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%,不过对于开发来讲,足够了app

  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,让我体会一下函数式编程的魅力吧

后记

终身学习。

相关文章
相关标签/搜索