细数2019年读过的书

2019-09-14

前言

嗯这里说的都是技术相关的书,虽然花里胡哨的沙雕小说也看了几本不过….

DB方向

《Redis开发与运维》

Redis入门书籍,其实17年实习的时候就已经有在使用Redis,不过缺少一些基础的知识,比如知道Redis有5种数据类型但是不知道各自还有多种底层的数据结构实现。这本书相对还算比较浅(orz可能最后面比较难的地方还没看到就跳去另一本书了)所以看起来非常顺畅,能让人对Redis的基础功能都有所了解和掌握使用。

《Redis设计和实现》

略微偏向源码解读的书,分为4部分:

  • Redis的数据结构
  • 单机Feature的实现
  • 多机Feature的实现
  • 独立功能的实现

从《Redis开发与运维》了解到zset使用了ziplist和skiplist(实际上是redis mod的zskiplist)还不够,从《Redis设计和实现》进一步了解ziplist和skiplist是什么样的结构,为什么要使用skiplist和dict来实现zset。

书里面各部分的内容基本都给出了对应的源码和注释,当然源码大都是某种数据结构的定义,具体相关的方法还是要到源码里面自己阅读才会有。不过这本书对Redis真的讲得非常详细,如果不用开发Redis,看完这本书基本能掌握Redis所有实践里面需要用到的Feature了。

《深入理解Elasticsearch》

好吧这个书不应该先读的因为并不能看懂在讲的什么东西。反倒是在书里面反复提到了:

Elasticsearch服务器开发

应该是Elasticsearch的入门书籍,除了官方文档以外比较可靠的书。具体来说了解了ES的工作原理,包括索引、结构等,当然少不了语法的介绍虽然都跳过了。不过对于想了解ES为什么能实现高速的模糊查询,了解完整的查询过程和数据存储的过程的人应该很实用。书里面也有介绍多机实现的集群方案,虽然读来读去还是搞不懂怎么样去优化大数据量的查询噗。

编程语言

《Fluent Python》

这本啃的是影印版,也就是英文书。非常有意思的一本书,买之前定计划1个月看完结果到手发现根本不可能,除非忍不住。非常厚,啃完了第一部分介绍数据结构然后很后悔没有做读书笔记方便复习orz。第一部分对基本的数据结构有详细的讲解,很多奇怪的特性读完之后就豁然开朗,比如对list generator:

list1 = [[None] * 5 for _ in range(5)]

为什么不能直接:

list1 = [[None] * 5 ] * 5

还简洁易懂不是?(答:不是)

入门Python看完廖雪峰老师的博客基本上该会用的都应该会用了,但是很多东西只会用是不行的,从这本书的学习中很多东西应该认识到必须从“用”转为“改造”才能打造出最适合的Feature。很多时候比如日常业务借助框架简单实现一些功能,如果缺乏对实现的思考,那这个功能其实在后续优化的过程中提升的空间是较为有限的。写的东西如果缺乏理解,一旦出现问题定位起来就会更困难。跟着这本书其实它一路解答疑惑一路也让读者有更多对Python的思考,了解实现才能在开发上更流畅。

CS基础

说到CS基础真的如果非科班的同学没有尽早准备实际上在这块是会非常吃亏的。实习的时候觉得这些协议、架构、设计什么的跟开发有毛线关系,实际上真的会有影响的。很多东西不从源头出发,问题只能解决一半,解决表面。所以虽然时间很紧张但是还是必须要补牢基础知识。

《图解HTTP》

这大概是最简单的HTTP协议介绍的书籍了吧。插图非常多,基本可以当漫画书看。从协议的大纲细到握手细节书里面都有介绍。但是也仅限于“介绍”。当然对于了解一个协议来说是足够用的了。

《HTTP: The Definitive Guide》

可以看作上一本书的进阶,不过没有时间全部读,打印了HTTPS一章书了解了HTTPS的一些在《图解HTTP》里面没有解答或者描述不太透彻的问题。

这本书(好吧其实就一章)看的是英文版,个人一直认为一些较为Official向的东西是不应该参考翻译的因为很多时候翻译并不能准确的express原书的意义(当然一些优秀的翻译是可靠的,但是并不想花时间去了解哪些靠谱哪些不行),而且因为看的内容比较短因此花了几个小时带着词典就把一章吃完了。能够补充《图解》的内容,推荐看完前书之后就接着看这本,差不多的内容可以跳过,把展开介绍的补充积累一下。

《图解TCP/IP》

要摊牌了看这些书其实最初有部分原因还是因为应付面试。不过随着阅读发现原来网络真的可以这么有意思。

和《图解HTTP》一样是本漫画书,而且个人比较关注TCP一节不过书的前半部分介绍网络模型的内容也比较详(长)细。

学TCP可以具体看一下OSI模型和书中TCP/UDP的章节,不过看完之后我又补充看了TCP协议的原文,很多握手细节、握手异常情况一般在书里面是不会展开的,书上写着Client发Hello,Server回OK,然而有各种花里胡哨的Client发错人,发错握手批次等等的情况,不知道就不能算了解TCP了。

所以这本书应该和协议原文搭配食用,效果更佳。

中间件

深入RabbitMQ

消息队列肯定是在今年的学习计划之内的,因为不可能什么都靠Redis来玩,事实上Redis是个Cache的角色,它能当消息队列用但是真正遇上的消息队列的场景还是应该由对应的消息队列的实现来完成。

RabbitMQ想要使用可以直接看官网的6章教程,点一下看半天学习不花一分钱,开箱即用的Pika包,各种基本类型的实现代码都有。看完疑问三连:什么是AMQP?什么是Exchange?bind key和route key不是一个东西吗?

这本书名叫“深入”其实感觉还是属于入门类型的,从AMQP入手介绍了协议的基本知识,因为RabbitMQ是基于AMQP协议的,和平时接触最多的HTTP通信有共同点但也有很多不同。可以理解为RabbitMQ基于AMQP协议作了一些实现队列高可用和高性能上的扩展。掌握了AMQP之后很多RabbitMQ的Feature也相对通俗易懂了。