前言
立刻过年了,迫于买了kindle & kindle ultimate,今年看了不少书,看完以后若是不写点总结有点遗憾,趁周末写下读后感。java
我看的书书书书书书书
专业书
《代码大全》
不要被名字骗了,这本书英文名《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%,不过对于开发来讲,足够了app
- 没有索引加持的查询很慢
- 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,让我体会一下函数式编程的魅力吧
后记
终身学习。