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

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

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

  作者何海涛在本书中非常详细地剖析了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-名企面试官精讲典型编程题》读后感的更多相关文章

  1. 《DevOps软件架构师行动指南》读后感

    从软件架构师视角讲解了引入DevOps实践所需要拥有的技术能力,涵盖运维.部署流水线.监控.安全与审计以及质量关注,这是本书一开始内容简介的开头,本书的作者是伦恩·拜斯(Len Bass).英戈·韦伯 ...

  2. nodejs开发指南读后感

    nodejs开发指南读后感 阅读目录 使用nodejs创建http服务器; supervisor的使用及nodejs常见的调式代码命令了解; 了解Node核心模块; ejs模板引擎 Express 理 ...

  3. DevOps:软件架构师行动指南(文摘)

    第一部分 背景 第1章 DevOps是什么 第二部分 部署流水线 第三部分 横切关注点 第四部分 案例研究 第五部分 走向未来

  4. 2020年DevOps工程师入门指南

    DevOps兴起于2010年代,到现在DevOps已经在行业中拥有了一席之地,并在继续发展壮大. 有兴趣成为一名DevOps工程师吗?如果想要成为一名DevOps工程师,需要做到以下五点: 要有开发者 ...

  5. 5月29日 Java性能调优指南 读后感

    并行垃圾收集器 串行垃圾收集器 并发标记清除(CMS)垃圾收集器 Garbage First(G1)垃圾收集器 没有深入的学习G1的原理,只是看了大概的思想; SA工具:待学习

  6. 敏捷开发、DevOps相关书籍——书单

    自己瞎整理的一些书单,都是豆瓣评分比较高的书,可以作为选择的一个参考. 书名 豆瓣链接 持续交付:发布可靠软件的系统方法 https://book.douban.com/subject/6862062 ...

  7. 有奖试读—Windows PowerShell实战指南(第2版)

    为什么要学PowerShell? Windows用户都已习惯于使用图形化界面去完成工作,因为GUI总能轻易地实现很多功能,并且不需要记住很多命令.使得短时间学会一种工具成为可能. 但是不幸的是,GUI ...

  8. [转载]你所不了解的DevOps

    DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...

  9. 给 DevOps 初学者的入门指南

    当我们谈到 DevOps 时,可能讨论的是:流程和管理,运维和自动化,架构和服务,以及文化和组织等等概念.那么,到底什么是"DevOps"呢? 什么是DevOps 随着软件发布迭代 ...

  10. CI Weekly #3 | 关于微服务、Docker 实践与 DevOps 指南

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

随机推荐

  1. phalcon: dispatcher调度控制器

    phalcon: dispatcher调度控制器 我所理解的dispatcher调度控制器,实际上是对 router或者特定的url参数给与重组. 引用特定的类: //add use Phalcon\ ...

  2. 【转】loading 三种实现方式

    转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=76872 一.通过动画实现 定义res/anim/loading.xml如 ...

  3. 韩系高端PK:whoo后VS雪花秀(转载)

    产品广告代言人是李英爱(韩剧“大长今”的扮演者)产品设计也是贵妇风格.------------//就是大长今的女主角用过的牌子  LG旗下的WHOO后 WHOO后洁面霜:这是我非常喜欢的洁面霜,淡黄色 ...

  4. python3.x随手笔记1

    语法分析 Python程序读取的 解析器 . 解析器的输入流 令牌 ,生成的 词法分析程序 . 这一章描述了如何 词法分析程序把一个文件分解成令牌. Python读取程序文本作为Unicode代码点; ...

  5. chrome浏览器下页面顶部出现一条空白解决

    最近遇到页面在chrome浏览器下,顶部会出现一条空白的问题.后来知道是bom头的问题. 1.什么是bom头? BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑 ...

  6. ember

    为什么要用这种单页面应用.单页面应用就可以是一个web app ,而不是一个web site了,但是百度的大王是退mvc的,考虑到gc什么的? 所以说写组件component和mvc压根是两个完全从角 ...

  7. Java基础:多线程

    基本概念 程序&线程&进程 程序是一个段可以提供业务功能的代码,它可以包含1个或多个进程.程序在OS上运行时表现为进程对各种资源(CPU,内存,Disk..)的消耗和处理. 进程是OS ...

  8. hdu----(4545)魔法串(LCS)

    魔法串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submiss ...

  9. postgres 正则表达式

    PostgreSQL正则表达式 基础: Operator Description Example ~ Matches regular expression, case sensitive 'thoma ...

  10. css中的zoom

    CSS中zoom:1的作用兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题. ...