code[class*="language-"],
pre[class*="language-"] {
background-color: #fdfdfd;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
margin-bottom: 1em;
}

:not(pre) > code[class*="language-"] {
position: relative;
padding: .2em;
-webkit-border-radius: 0.3em;
-moz-border-radius: 0.3em;
-ms-border-radius: 0.3em;
-o-border-radius: 0.3em;
border-radius: 0.3em;
color: #c92c2c;
border: 1px solid rgba(0, 0, 0, 0.1);
display: inline;
white-space: normal;
}

pre[class*="language-"]:before,
pre[class*="language-"]:after {
content: '';
z-index: -2;
display: block;
position: absolute;
bottom: 0.75em;
left: 0.18em;
width: 40%;
height: 20%;
max-height: 13em;
-webkit-box-shadow: 0px 13px 8px #979797;
-moz-box-shadow: 0px 13px 8px #979797;
box-shadow: 0px 13px 8px #979797;
-webkit-transform: rotate(-2deg);
-moz-transform: rotate(-2deg);
-ms-transform: rotate(-2deg);
-o-transform: rotate(-2deg);
transform: rotate(-2deg);
}

:not(pre) > code[class*="language-"]:after,
pre[class*="language-"]:after {
right: 0.75em;
left: auto;
-webkit-transform: rotate(2deg);
-moz-transform: rotate(2deg);
-ms-transform: rotate(2deg);
-o-transform: rotate(2deg);
transform: rotate(2deg);
}

.token.comment,
.token.block-comment,
.token.prolog,
.token.doctype,
.token.cdata {
color: #7D8B99;
}

.token.punctuation {
color: #5F6364;
}

.token.property,
.token.tag,
.token.boolean,
.token.number,
.token.function-name,
.token.constant,
.token.symbol,
.token.deleted {
color: #c92c2c;
}

.token.selector,
.token.attr-name,
.token.string,
.token.char,
.token.function,
.token.builtin,
.token.inserted {
color: #2f9c0a;
}

.token.operator,
.token.entity,
.token.url,
.token.variable {
color: #a67f59;
background: rgba(255, 255, 255, 0.5);
}

.token.atrule,
.token.attr-value,
.token.keyword,
.token.class-name {
color: #1990b8;
}

.token.regex,
.token.important {
color: #e90;
}

.language-css .token.string,
.style .token.string {
color: #a67f59;
background: rgba(255, 255, 255, 0.5);
}

.token.important {
font-weight: normal;
}

.token.bold {
font-weight: bold;
}
.token.italic {
font-style: italic;
}

.token.entity {
cursor: help;
}

.namespace {
opacity: .7;
}

@media screen and (max-width: 767px) {
pre[class*="language-"]:before,
pre[class*="language-"]:after {
bottom: 14px;
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}

}

.token.tab:not(:empty):before,
.token.cr:before,
.token.lf:before {
color: #e0d7d1;
}

pre[class*="language-"].line-numbers {
padding-left: 0;
}

pre[class*="language-"].line-numbers code {
padding-left: 3.8em;
}

pre[class*="language-"].line-numbers .line-numbers-rows {
left: 0;
}

pre[class*="language-"][data-line] {
padding-top: 0;
padding-bottom: 0;
padding-left: 0;
}
pre[data-line] code {
position: relative;
padding-left: 4em;
}
pre .line-highlight {
margin-top: 0;
}

pre.line-numbers {
position: relative;
padding-left: 3.8em;
counter-reset: linenumber;
}

pre.line-numbers > code {
position: relative;
}

.line-numbers .line-numbers-rows {
position: absolute;
pointer-events: none;
top: 0;
font-size: 100%;
left: -3.8em;
width: 3em; /* works for line-numbers below 1000 lines */
letter-spacing: -1px;
border-right: 1px solid #999;

-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}

.line-numbers-rows > span {
pointer-events: none;
display: block;
counter-increment: linenumber;
}

.line-numbers-rows > span:before {
content: counter(linenumber);
color: #999;
display: block;
padding-right: 0.8em;
text-align: right;
}
-->

下面列了我读过的一些编程相关的书籍,写了一些对书的印象,都是个人观点。书名后是我个人对书的推荐强烈度打的分(5分满分),都是拍脑袋打的。

我比较习惯读纸质书,买书也比较谨慎,踩的坑少(围笑),分打得可能比较高一些。

操作系统


《Linux内核设计与实现》5分:全书都在讲 Linux 内核的设计思想,实现并不多,作为操作系统的入门书非常适合。没有很多复杂的接口,思想也容易理解。对我个人来说,解开了我很多对操作系统运行的疑惑,也对编程很有借鉴意义。建议对操作系统不清楚的早读这本书。(2018)

《Unix环境高级编程》4分:著名的 APUE,编程刚入门时看的,当时没什么基础,详细内容忘得差不多了,印象很深的就是文件操作接口的参数很多。书里介绍了很多操作系统常用接口,新手可以大概看一遍对系统提供的接口有个印象。我准备再读一遍。(2016)

《Unix网络编程 卷二 进程间通信》5分:把 UNP 放在这里是因为卷二讲了很多系统内部的 IPC,一直在用的 unix domain sockets 是真神器,推荐后端工程师一定要看这本书。(2016)

《深入理解计算机系统》3分:好像是一本用来作课本的书,全书确实讲了整个计算机系统,以操作系统为界分为上中下三篇,上篇讲操作系统以下,包括计算机体系结构、机器级的信息和存储体系等(略翻过的,看得有点懵),中篇讲操作系统的进程及内存管理,下篇则偏向于操作系统之上的内核接口和并发编程的相关知识。比较佩服用本书作课本的学校,一本书讲了我们四本书的知识。但总的来说,收获不大,上篇对程序员透明可以不多作过多了解,中篇不如《Linux内核设计与实现》全面,下篇则不如《Java并发编程实战》和《UNP》等书,全而不精,不太推荐看。(2017)

《性能之巅》5分:著名性能大神 Brendan Gregg 的大作,600 页的大部头,不过作为非原理性书籍,知识点并不“深奥”。这本书从内存、CPU、网络等各个方面总结了排查性能问题的方法,由名词概念到 Linux 命令再到结果分析,把原本非常散乱的知识系统化了。排查性能问题之前,如果读过这本书,应该会少走很多弯路。(2019)

《树莓派开始,玩转Linux》3分:由《协议森林》关注了作者。买这本书因为看目录觉得从硬件到系统讲得都很全,到手之后发现知识点全则全矣,深度却不够,像系统中极重要的”虚拟内存”的概念,本书只介绍了两三页,由于我之前对系统知识有了一定的了解,所以会觉得收获不够。不过算是很系统的书了,适合系统初学者读,对我来说,等玩起树莓派后可以作为工具书。(2018)

网络


《TCP/IP详解 卷一》5分:从链路层到传输层把各种网络协议都介绍了一遍,TCP 的各种实现也讲得非常细,新手可以略翻一下理解一下网络。对应用层协议熟悉了之后再回过来仔细读一下本书。(2016)

再读:4分 又带着一些问题更深入细节翻了一遍,对比看过的各种博客,细节上不输,全局观上更是完胜,只是少了些开发中的具体案例和应用。不过书中有很多实现算法之类的东西,由于用不到,看过之后就没什么印象了,可能需要存放起来作为工具书了。(2019)

《Unix网络编程 卷一 套接字联网API》4分:UNP。讲了很多网络 socket 相关接口,有很多客户端和服务器代码实现,同样我还得再读一遍。(2016)

《Web性能权威指南》3分:书的重点是性能,分别从传输层协议、无线网络和HTTP协议讲怎么做性能优化,不过全都是理论。最后还介绍了浏览器、websocket 和 WebRTC,最后一个做 B/S 的真心没听过,也算开了下眼界。(2017)

《构建高性能Web站点》4分:全书也在重点讲 Web 性能,不过更偏向于服务端架构和实践,如缓存的使用、数据库性能优化。书中列举了很多实用的方案,也对不同的方案使用 AB 和 strace 进行了充分的测试对比。中级后端工程师应该早点读这本书。(2017)

数据库


《Redis设计与实现》4分:从底层介绍了 Redis 多种数据结构的设计与实现,还有多种配套策略的实现,如数据持久化、集群等。可以说对 Redis 所有部分的设计都介绍得很清楚,毕竟是作者是分析过全部源码的。推荐 Redis 运维或对 Redis 的实现感兴趣的读。(2017)

《MySQL技术内幕:Innodb存储引擎》4分:如副标题,全书都在讲 Innodb 存储引擎。通过各个模块的设计实现,再给出我们使用 Innodb 时的需要注意的点和优化方案。推荐中级开发工程师读。(2017)

编程语言


《C Primer Plus》4分:C 语言入门的推荐书,主要是 C 的语法,详细而权威,没什么好说的。(2017)

《Java 核心技术 卷I》3分:确实是由浅入深的一本书,但感觉书里深浅知识在不停交错,书里 Swing 相关的东西篇幅还挺大,而且有很多跟 C++ 的对照,最主要的是翻译很奇怪地让我觉得有些句子很难读得通。不过也书里讲解得内容还是挺丰富的,通读的话会学到不少东西。(2018)

《Java并发编程实战》5分:这本书介绍 Java 并发编程非常全面,从内置关键字、锁、同步容器、同步工具类引入并发编程的基础知识,又介绍了 Executor、ThreadPool 等成熟的并发编程框架,然后又从死锁、性能、测试等方面来思考并发编程的安全性,最后通过显示锁、各种高级线程同步工具的对比、Java 线程模型等高级主题来深入理解并发编程。由浅入深,中级到高级都能从中有所收获。个人认为,Java 开发者至少应该读一遍,对并发编程有个整体的印象。(2018)

《深入理解Java虚拟机》5分:作为 JVM 语言,更偏向于 Java 本质的内容在于其虚拟机。本书相对于我看过的理论书偏实战一些,主要讲了 Java 内存模型、GC算法,字节码及虚拟机加载、执行字节码和优化效率的全过程。国人的书没了翻译味读着很舒服,理论讲得很清晰,特别是书里的一些调试案例非常赞。对于刚接解 Java 的小白来说看本书有些深,且 Java 的封装性让这些知识对程序员来说都是透明的,推荐想对 Java 有深入了解的中级来读。(2018)

《PHP和MySQL Web开发》1分:刚开始学PHP时,看过一部网络教学视频后看的,当时的感觉是真的简单,看完后收获不多。如果你也是初学者,建议你还是省点钱,看看视频或文档撸一下代码来得实在。(2015)

《JavaScript高级程序设计》5分:红宝书,Web 入门时看的,Js、Dom讲得很详细了,当时准备入前端坑时读了一遍,虽然有些朦胧,还是感觉收获很大。Js入了门的同学应该赶快读一下这本书,并且有几章还得跟着搜索引擎多看几遍。(2015)

《Linux Shell脚本攻略》3分:书的内容挺充实的,把 linux 内的各种 bash 命令都介绍到了(好像没有软件包安装相关命令),也提供了很多实例来解析命令。问题是介绍 shell 脚本相关技巧介绍较少,比如函数传数组参数这些常见的坑就没讲到,了解很多 bash 命令脚本也不一定能写得好啊。而且定位比较尴尬,不像鸟哥的私房菜(只看过前几章),由浅到深整体熟悉 linux,本书是分模块来讲解的,ls、cd 等常见命令后面才提到,所以它不太适合新手看,而对于比较熟悉 linux 命令的人来说,能学到的知识又较少。总之本书适合用来查漏补缺或当工具书。(2018)

《Effective Java 第二版》4分:我看过的唯一一本介绍语言的“进阶”书,可能 Java 确实有些复杂吧。书里 Java 1.6 及之前版本常见的各种坑都讲清楚了,看完很有收获,推荐在了解完 Java 语法后就读。(2018)

《Sprint Boot 实战》1分:首先在 Spring-Boot 里介绍 Grails、Actuator,不了解不多作评价,但整体来看像是很多篇博客堆叠出来的,没有层次感。其次 200 页的书竟然有 50 页是 Spring-Boot 包-特性速查,这些东西完全可以放在网站上,只用一个链接就搞定了,还便于实时更新。最后翻译后的版式我必须吐槽,中文和英文单词之间不加空格看着真的难受。(2019)

数据结构与算法


《数据结构与算法分析 - C语言实现》3分:作为一个数学渣,对算法有本能的恐惧,这本书是咬着牙读下去的,还跳过了很多部分。书很生硬,没有形象的比喻,通过一堆堆的代码和数学公式去理解算法真的挺不容易的。(2016)

代码


《Head First 设计模式》4分:跟外面的那些技术书籍一点也不一样,全书充满了插图,每一个设计模式都通过一个浮夸的故事来讲(外国人嘛)。文中代码中用 Java 实现,不过都是最基本的语法。好像只写了 16 个设计模式?不过我觉得用来学习设计模式完全 OK。(2017)

《代码大全 第二版》4分:中文名是真的俗,代码百货?不过书不是代码展览馆,而是教人怎么写出优良的代码的。可能我个人一直对代码质量比较在意,让我眼前一亮的地方不是特别的多,不过不可否认书真的不错,建议新手早读一遍。(2017)

《重构:改善既有代码的设计》2分:在一次重构之前买来看的,讲得是对小块代码的重构方式,全书就像一个整齐排放的货架,上面全是对一些代码重构方式的抽象,列得让人有点懵,如果新手看这本书并对照着重构代码的话,我觉得效果应该不会太好(委婉)。(2017)

再读:2分 试图再读一遍,结果读了一半就坚持不下去了,总结了一下这本书不合我口味的地方:很多重构方法的具体做法写得太详细太傻瓜式了,例子占大量篇幅又让我觉得没干货。可能看一遍目录,遇到一眼看不明白的方法进去看内容前一两段或总结会比较好。(2018)

思考


《黑客与画家》4分:总体感觉比期望差一些。我把内容分为三部分:由于中美环境不同,前面讲”书呆子”特质的部分我没有太大共鸣;中间讲财富的部分很精彩,让我觉得非常惊艳;后面讲编程语言的部分更像是硬贴在书后面的,虽然有所感悟,但却让人觉得有些突兀(我期望的不是此类内容);总的来说,是一本让我挺有收获的书。(2018)

《思考,快与慢》4分:网络上普遍将它分类为经济学书籍,实际上我感觉本书大部分篇幅都是心理学,从一开始的系统1和系统2,到对我们各种选择的分析(我印象最深刻的是怎样克服系统1的影响选择投资方式),再到最后由”幸福程度”引出的峰终定理,给人提出了各种思考的方向和可能性,可能思考得多了之后,也能帮我矫正一些想法吧。(2018)

《乌合之众.冯克利译》4分:这本书是大众心理学研究的经典著作,从通常意义上来说,它对个人并不是一本非常“有用”的书,但作为社会动物,我们不可避免地会常常陷入人群中,这本书可能会帮助你跳出人群看自己和他人,新的视角可能会有新的感悟。(2019)

书还在读,列表也会增加,之前读过的书还可能会再读一遍写一些新的感受,欢迎关注。

我的书单(Book List)的更多相关文章

  1. java提升路线书单(原文自知乎刘欣)

    复制黏贴自知乎刘欣大神,作为个人的书单与指导路线 原文链接:https://www.zhihu.com/question/19848946/answer/92536822   刘欣 追寻内心的真正兴趣 ...

  2. .NET程序员走向高端必读书单汇总

    .NET程序员走向高端必读书单汇总 一.知识树 1. 基本能力 1.1 数学 1.2 英语 1.3 语言表达 2. 计算机组织与体系结构 3. 算法与数据结构 4. 操作系统 5. 计算机网络 6. ...

  3. PHPer书单

    想提升自己,还得多看书!多看书!多看书! 下面是我收集到的一些PHP程序员应该看得书单及在线教程,自己也没有全部看完.共勉吧! Github地址:https://github.com/52fhy/ph ...

  4. A Year Of Books - 2016 Javaer书单

    A Year Of Books - 2016 Javaer书单 (PS:欢迎留言推荐,很多来自白衣大哥的推荐) 1. OS & Networking <编码 : 隐匿在计算机软硬件背后的 ...

  5. 我的GTD中收集的书单

    在几年的GTD过程中,收集了一些想读的书目,没有系统地整理,每当读完一本之后,就翻翻书单,寻找下一本感兴趣的书,书是不可能读完的,只能找有兴趣的.符合自己目标方向的.有些书记录了豆瓣上的评分,虽然不是 ...

  6. C语言和数据结构的书单-再次推荐

    一.推荐专业书单: 1)         C语言方面: n  明解C语言——适合初学者 豆瓣链接:https://book.douban.com/subject/23779374/ 推荐理由:< ...

  7. 一个很不错的适合PHPER们书单,推荐给大家【转】

    来我博客的访客们中,有一些是PHP的初学者,是不是很迷茫PHP应该怎么学?应该买什么样的书?到处问人,到处求助?这下好了. 正好看到黑夜路人在博客上推荐了一个书单,看上去都非常不错,很多我也没有读过, ...

  8. 【转载】.NET程序员走向高端必读书单汇总

    原文:.NET程序员走向高端必读书单汇总 .NET程序员走向高端必读书单汇总 一.知识树 1. 基本能力 1.1 数学 1.2 英语 1.3 语言表达 2. 计算机组织与体系结构 3. 算法与数据结构 ...

  9. 架构师书单 2nd Edition--转载

    作者:江南白衣,原文出处: http://blog.csdn.net/calvinxiu/archive/2007/03/06/1522032.aspx,转载请保留. 为了2007年的目标,列了下面待 ...

  10. java开发必读 书单

    希望读的书单 重构 改善既有代码的设计 设计模式 可复用面向对象软件的基础 高性能MySQL第3版 Effective Java第1版 Effective Java第2版 Java核心技术I-基础知识 ...

随机推荐

  1. anaconda使用方法

    我是用的win10.想写爬虫,所以使用了  anaconda .总结一下使用的方法. 安装阶段跳过.: 再终端输入  jupyter notebook  然后就会在. 浏览器显示一个网页.其实这个也不 ...

  2. PHP整理--PHP语句流程

    PHP跟JS一样是从上往下的执行语句:同样的PHP也有if语句.循环.数组和函数. 一.条件语句   if..else...    swich  (1)多条if语句 $name=30; if($nam ...

  3. 自定义扩展实现相对于addRoutes的removeRoutes方法——vue-router

    使用vue-router的addRoutes方法做登录权限控制,当用户推出登录回到login页后,切换不同权限的账号,如果不reload页面,会导致router权限问题,故在vue-router代码中 ...

  4. Mac使用Charles进行HTTPS抓包

    技术来源: PengYunjing 第一步 配置HTTP代理,这步与抓取HTTP请求是一样的: 选择在8888端口上监听,然后确定.够选了SOCKS proxy,还能截获到浏览器的http访问请求. ...

  5. Python之路(第三十五篇) 并发编程:操作系统的发展史、操作系统的作用

    一.操作系统发展史 第一阶段:手工操作 —— 真空管和穿孔卡片 ​ 第一代之前人类是想用机械取代人力,第一代计算机的产生是计算机由机械时代进入电子时代的标志,从Babbage失败之后一直到第二次世界大 ...

  6. node vue 项目部署问题汇总

    场景:vue-router为history模式,不带项目名访问的部署,如果资源是用相对路径加载,则资源匹配路径不对 一.带项目名称访问,如部署到tomcat服务上 webpack:  build/ut ...

  7. 文件扩展关联命令(assoc)

    assoc 命令: // 描述: (association) --> 联想.关联 显示或修改文件扩展名关联. 如果在没有参数的情况下使用,assoc将显示所有当前文件扩展名关联的列表. // 语 ...

  8. oracle 12c centos 7 安装配置

    1,安装centos 7 安装 宿主机配置信息: 内存:8G 系统盘:30G swap分区:30G (笑了oracle安装自检不过) /u01(50G) :oracle安装目录 /u02(50G): ...

  9. java的OSGi确实是个坑

    sun已经把java的OSGi这个坑填得够深了,sun估计短时间想把这个坑调回来是不可能了,跟.net比包管理模块化开发确实java够烂的. java的模块化架构开发只能让OSGi回去睡觉,自定义模块 ...

  10. linux上安装mysql5.7

    1.下载tar包,这里使用wget从官网下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2. ...