不得不看的几本好书

Linux多线程服务端编程

作者: 陈硕

出版社: 电子工业出版社

副标题: 使用muduo C++网络库

出版年: 2013-1-15

本书主要讲述采用现代C++ 在x86-64 Linux 上编写多线程TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。这是在Linux 下以native 语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的服务端网络应用程序。本书以muduo 网络库为例,讲解这种编程模型的使用方法及注意事项。

本书的宗旨是贵精不贵多。掌握两种基本的同步原语就可以满足各种多线程同步的功能需求,还能写出更易用的同步设施。掌握一种进程间通信方式和一种多线程网络编程模型就足以应对日常开发任务,编写运行于公司内网环境的分布式服务统。

这本书展示了使用 C++、多线程进行网络编程的许多最佳实践,甚至称为标准做法也不为过。比如当谈到 C++ 的内存管理问题的时候,以“不配对的 new[]/delete”为例,用“把 new[] 统统替换为 std::vector/scoped_array”为解决方案,提出使用“智能指针”解决大部分内存问题,堪称金玉良言。又比如当谈到“如何限制并发连接数”时,作者直接引用了 libev 作者 Marc Lehmann 提出的几个方案,并另外给出一个更为简单的方案。

这本书展示了基础的重要性。直接读,可以发现很多章节讲的内容都可以说是常识,但是作为一名久经考验的程序员,可以说,我觉得这里面讲的常识都是“一不留神坑死你”的。比如“shared_ptr 技术与陷阱”一节中,作者提到析构的线程不一定是是对象诞生的线程,我的膝盖就中过一箭。当时我为一个动作游戏编写非玩家角色的人工智能,在游戏中,大部分 CPU 资源都被用在图形渲染上,留给人工智能的资源非常有限,我又要做计算量超大的团队人工智能,所以很“卡”。后来的优化方案是把内存释放操作放到另一条线程去执行,虽然当时没有使用 shared_ptr,但因为问题的原因和解决方案都是一样的,如果我们当时都读过这本书,应该不会踏入这个坑。如果有出身草莽的野路子程序员,读一下这本书,应该还是大有补益的。

现在很多章节看了不下3遍,书中并不是讲使用muduo库,而是重点放在怎样实现一个网络库和作者多年来积累的服务端编程经验。不要去在乎什么boost库,这不是重点,重点是各种服务端技术和网络经验。说一点虚的,这是我近两年看的最认真的一本书,最有收获的一本书。如果想做服务端的同学,看看这本书绝对收获颇丰。

看到有评论说muduo实现的如何不好,严重怀疑这些人没看过这本书,其实我觉得书的重点不在这。我力推这本书但是并没有用过muduo。因为我觉得重点在作者在书中大量的经验之谈,绝对醍醐灌顶,不服来辩

高质量程序设计指南

作者: 林锐 / 韩永泉

出版社: 电子工业

副标题: —C++/C语言

出版年: 2007-5

《高质量程序设计指南:C++、C语言》(第3版)以轻松幽默的笔调向读者论述了高质量软件开发方法与C++/C编程规范。它是作者多年从事软件开发工作的经验总结。《高质量程序设计指南:C++、C语言》(第3版)共17章,第1章到第4章重点介绍软件质量和基本的程序设计方法;第5章到第16章重点阐述 C++/C编程风格、面向对象程序设计方法和一些技术专题;第17章阐述STL 的原理和使用方法。

《高质量程序设计指南:C++、C语言》(第3版)第1版和第2版部分章节曾经在Internet上广泛流传,被国内IT企业的不少软件开发人员采用。《高质量程序设计指南:C++、C语言》(第3版)的附录C《大学十年》是作者在网上发表的一个短篇传记,文中所描述的充满激情的学习和生活态度,感染了大批莘莘学子。

本书也就定位在初、中级C/C++技术水平。你不可能通过本书学会C++,也不能读过此书就精通了C++,这本书只是众多C++技术书籍中值得你阅读的一本。

真有不少公司就是用该书后面的C/C++测试题做笔试题,虽然这对没读过这本书的同学有些不公平。不过如果真理解了那些测试题,对C++初学者的帮助也是很明显的。

是一本有特色的国产技术书,比现在市面上好多互相抄来抄去的书要好出很多。在传统C++语法书之外,这本书可以辅助我们对一些内容进行再次的深刻认识。书里面有一些编程规范的东西,对于写程序的人来说,还是不错的,可以培养好的编码习惯。

"C++ 语言的函数内联机制既具备宏代码的效率,又增加了安全性,而且可以自由操作类的数据成员。所以在C++ 程序中,应该用内联函数取代所有宏代码,“断言assert”恐怕是唯一的例外。"

C++编程思想(第1卷)

作者: [美] Bruce Eckel

出版社: 机械工业出版社

副标题: 标准C++导引

译者: 刘宗田 / 袁兆山 / 潘秋菱

出版年: 2002-9

《C++编程思考》第2版与第1版相比,在章节安排上有以下改变。增加了两章:“对象的创建与使用”和“C++中的C”,前者与“对

象导言”实际上是第1版“对象的演化”一章的彻底重写,增加了近几年面向对象方法和编程方法的最瓣研究与实践的有效成果,后者的添加使不熟悉C的读者可以直接使用这本书。删去了四章:“输入输出流介绍”、“多重继承”、“异常处理”和“运行时类型识别”,删去的内容属于C++中较复杂的主题,作者将它们连同C++标准完成后又增加的一些内容放到第2卷中,使得第1卷的内容更加集中,供不同程度的读者选择阅读。需要强调的是,第2版的改变不仅体现在这些章节的调整上,更多的改变体现在每一章的字里行间中,包括例子的调整和练习的补充。与众不同的精心选材和认真推敲的叙述使得第2版更趋成熟。

这本书是C++领域的一本权威著作,书中的内容、讲授方法、选用例子和跟随练习既适合课堂教学,又适合读者自学。

这本书带领我走入了C++和面向对象的大门,Bruce Eckel独特的思路可以让读者理清面向对象的脉络,抓住面向对象的核心,同时又能学习到C++语言本身最重要的那些知识。

C++中比较困难的主题:如拷贝构造函数,虚函数及其实现内幕,模板等等都有专门的章节讲解。

总之,Thinking in C++将C++的核心讲解得很透彻,如果认真读了,绝对能成为C++领域的“入门级高手”。

对于计算机编程人员,就算截止到今天,能够很好地使用面向对象思想的人,也绝对不多,一是因为这个思想属于设计层面;另一个因为大家工作的层次都是面对函数,面对系统的机会很少。

本书确实能让那些每天精通于函数的人人们豁然开朗,发现原来,面向对象真的是可以利用的一种很好的方法呀。

希望你读完本书,能够开始逐渐走出面向过程的语言,进入虚函数的实际使用,进入对象的世界。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180124A0O41400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券