《剑指offer-名企面试官精讲典型编程题》读后感

  首先,不得不说这是一本好书!!!

  我接触这本书是在学长的推荐下去看的,而且口碑还是挺好的一本书,豆瓣的评分也比较高,当我刚看了它,我就深深的爱上了这本书,到现在为止,我已经看了三遍这本书了,平时无聊时侯也会拿这本书来翻翻。还有就是做一般的算法题,没有思路的时候,我也会翻开这本书来寻找一些解题思路。我喜欢书中一针见血地的解析,对于解题的点可谓是抓的狠准稳,很容易为读者所理解,不像有的书,大话连篇,最后也就是那么一句话完事了。

  这本书虽说是面向软件行业求职者写的,非常适合求职者去读,此外我觉得也非常适合正在学习算法、数据结构的人去读,也算是提前为求职面试做准备吧。而且我觉得这本书不应该被作为求职者临时抱佛脚去读的书,要是那样的话就有点糟蹋了这本书了。

  作者何海涛在本书中非常详细地剖析了50多个经典的面试题,那个纪念版的好像新增了20多个,那么中共就有70多个面试题,知识面涵盖软件行业的大部分知识点。从基础知识、代码质量、解题思路、优化效率、和综合能力等五方面系统的整理了影响面试的要点。当然对于面临求职还远的读者可以跳过第一章关于面试的一些介绍,但是我觉得还是要看一下,未雨绸缪,早作准备吧。

  下面说说我读这本书的一些收获和感想吧。

  首先,我觉得说或最大的就是本书给我指定了一个方向。关于面试、基础知识、代码质量、解题思路、性能优化等等一些方面的知识方向,我该去学习什么东西,怎么去学。当然这本书没有全部的只是内容都写进来,而是进行了高度浓缩,把精华部分呈现给读者,留给读者举一反三的机会。

  在基础知识方面,作者推荐我们至少要熟悉一门编程语言,因为算法总是要基于编程语言来实现。对于算法题我个人觉得最适合的语言莫过于C/C++,像用C#或者Java做算法题我总觉得有些别扭,感觉效率也没有C/C++高,代码易读性、可读性也没有那么高(以上只是个人观点)。本书总提到了一些关于编程语言的一些基础概念性的问题。比如在C++中,有哪4个与类型转换有关的关键字?(答案static_cast、const_cast、dynamic_cast、reinterpret_cast)这样我们知道了这4个关键字,但是你会甘心只知道这几个关键字吗?当然还会想知道这几个关键字它的用法是什么,又有什么特点。还有一些题目是要对这一门语言非常了解才能解答的,不然就有可能掉进陷进里面,比如:“定义一个空的类型,里面没有任何成员函数和成员变量,对该类型求sizeof,得到的结果是多少?”,如果没有丰厚的基础知识,可能我们就会回答是0。但是答案是由编译器决定( Visual  Studio 中每个空类型的实例占 1字节的空间)。为什么呢?空类型的实例中不包含任何信息,本来求得是0 。但是当我们声明该类型实例的时候,他必须在内存中占有一定的空间,否则无法使用这些实例。然后这个问题在深入一点,”如果在该类型中添加一个构造函数和析构函数,在对 该类型求sizeof,得到的结果又是多少?“,然后再再深入一点,“如果把析构函数标记为虚函数呢?”,要准确得出这些答案就得考查我们深厚的内力了。其实,我还是蛮喜欢这样写书风格的,层层深入,很能考查读者对某个知识点的掌握程度,然后再跟着作者再往前走一走,这样读者的提高就很快(个人感觉)。本书还有很多地方都是采用这种层层深入的写法写的。我印象比较深刻的就是实现singleton模式,作者首先给出了我们一般人都知道的写法(私有化构造函数,然后通过共有函数返回对象),接着就分析了这种大众化的写法有什么缺点,缺点就是单线程下可以运行,但是在多线程下可能就会出现问题了,那么知道了问题所在当然就得去解决,接着就出来了优化后的第一个版本,加判断加锁实现同步,就解决了多线程问题。多线程问题解决了,由于加锁很耗性能,我们能否尽可能地减少加锁的次数呢。那么优化版本二出来了,就是采用双判断,只有真正的没有创建对象的时候我们才去加锁并创建对象。接着思考还有没有更好的办法实现既不用加锁也能保证单例呢?当然有利用C#的静态构造函数只调用一次的特性岂不是更好。到这里singleton已经出来4个版本了。C#的静态构造函数的调用时间比较早,不能实现按需创建实例,所以又有了一个优化的方向,那就是实现按需创建实例。所以lingleton就有了5种实现的方法,至于孰优孰略读者心中也有了定论。

  除了基础知识方面,本书还有关于数据结构方面的知识。我以前对链表,树,二叉树,二叉搜索树,图什么的都不是很了解,删除节点,插入节点,遍历的都不是理解得很透。以及这些数据结构的一些特性,该用于什么场合,看了这本书的一些面试题和答案解析及拓展都收获很大。比如说,链表方面的,从尾到头打印链表,反转链表,复杂链表等等的问题,咋一看我都懂啊。其实我也是这样的,但是再看看自己的实现方法的时间复杂度和空间复杂度有事多少呢,这本书的有事多少呢。树方面的,重建二叉树,树的镜像,从上往下逐层打印二叉树,二叉树的平衡等等很多问题,我们有些懂有些不懂,本书都给我们分析得很到位(个人感觉)。基于本书的分析,我们还可以此类推,举一反三,我们平时觉得很难的算法题,好像也没有那么毫无头绪了,至少我们知道往哪方面去思考这些问题了。

  还有本书还介绍了一些关于位操作方面的东西。对于位操作我们都知道位操作是高效的,但是我们平时好像都会去忽略了他,或者不想这一方面去思考问题。我看完这本书之后我会有意识无意识的往这方面思考。一个整数执行除2操作和一个整数向右移一位实现的功能是一样的,那么谁的效率会更高呢?对于除以2的整数次幂的操作,我们都可以用左右移位操作来代替。还有很多问题,想考虑使用二进制做掩码,可以高效解决很多问题。

  罗里吧嗦地就说了这么多,我就是觉得这是本好书,然后不说点什么感觉有点不舒服,,,,

你可能感兴趣的:(《剑指offer-名企面试官精讲典型编程题》读后感)