研发必看的两本秘籍

原创
2019/11/25 15:47
阅读数 469

作为一名研发人员,经常会通过看书提升自己的技术能力,但是市面上有关研发的书非常多,我们绝对没有时间把所有的书都看完,何况有一部分书是根本没有什么价值。弱水三千,只取一勺,下面我为大家推荐研发必看的两本书。

《算法导论》

市面上的关于算法的书那么多,为什么偏偏选择这一本呢? 因为很多算法书都是垃圾,甚至作者自己都不知道在说什么,阅读起来很费劲,自然没有必要在那些书上花时间。还不如选择一本世界公认的《算法导论》。

 

程序世界里面有一个公式: 程序=数据结构+算法,可以见得算法在研发中处于多么重要的地位,也是互联网公司的面试都喜欢出算法题的原因。算法决定了一个程序员的基础水平,不懂算法的程序员不是好程序员。相信很多研发面试都是挂在算法上,我面试别人的时候也会出算法题,写不出快速排序的候选人基本上都被我淘汰了。

 

这本书几乎涵盖了所有研发平时都会直接或间接用到的算法(当然不包括机器学习方向),可以说90%的算法面试都能在这本书里面找到答案。仅仅是排序算法就有接近10种,时间复杂度从o(n^2) -> o(n*logn) -> o(n)都有,估计很多人都不不知道居然还有o(n)的排序算法;举个例子: 就快速排序而言,本书会告诉你什么情况下效率能达到最高o(n*logn),什么情况下效率会退化到o(n^2),并且如何避免退化。除了快速排序,还有我们常用的散列表(哈希表),二叉数,红黑树(据说有些面试官喜欢考手写红黑树),动态规划等等。如果大家能把这本书好好消化掉,至少算法方面已经有90%的成功率了。

 

《深入理解计算机系统》

如果《算法导论》是程序员的“九阳神功”,那么本书则是“乾坤大挪移”。仅仅知道算法并不能发挥出研发的真正能力力,还要了解计算机的基本原理,操作系统,网络等专业知识。如果没有这些专业知识,你写出来的程序可能一堆bug,但又不知道是怎么回事。

 

本书涵盖的知识有: 数据存储和运算(整数,浮点数),进程,线程,内存管理,虚拟内存,编译原理,程序进程间通讯,程序优化,网路编程,网络协议,并发编程等等。举几个实用的例子吧:

 

  1. 浮点数运算
    0.7 + 0.1 == 0.8 的结果是什么呢?如果不了解浮点数原理,都会认为结果是true,但是实际上结果是false,原因可以在这本书里面找到答案。

     

  2. 增加算术运算效率
    乘法在cpu运算中是一个效率比较低的运算,但是在特殊情况下,可以通过逻辑运算代替乘法,举个例子: a * 2可以使用 a << 1来替代提高效率(a为整型),这也是为什么很多语言的可变数组增加容量都是翻倍操作。

     

  3. Linux写拷贝技术
    当在linux系统里面创建一个新的进程的时候,子进程是父进程的一个拷贝,但是内存并不是真正意义是上的拷贝,而是通过内存映射的方式指向同一个区域,只有在子进程内存发生修改的时候,才会拷贝到新的内存区域,我曾经利用这个特性为一个游戏服务节省了70%的内存空间,减少了2/3的服务器成本。

     

  4. 极简shell和web服务器
    我们会经常用到shell(bash,zsh)和web服务器(nginx,apache,tomcat),但是有多少人知道这些程序的实现原理呢? 阅读本书之后,可以让你自己亲自实现一个简单的shell程序和web服务器,同时在实现的过程中可以了解http协议是如何工作的,妈妈再也不用担心前后端的对接问题了。

     

总结来说,如果你将这本书认真看完,你基本上能了解绝大多数程序的实现方式,写出高效并且更少bug的代码。

 

关注公众号,分别输入 “算法导论” “深入理解计算机系统” 获取这两本书

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部