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

时间:2022-09-04 23:03:04

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

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

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

  作者何海涛在本书中非常详细地剖析了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. 书评<<剑指offer 名企面试官精讲典型编程题>>

      前前后后阅读了一周, 感慨很多, 面试考察的是一个人的综合能力, 这一点从面试官的角度去解读, 确实对面试的理解更立体. *) 具体考察的点1) 扎实的基础2) 高质量的代码3) 清晰的思路4) ...

  2. 剑指offer+名企面试官精讲典型编程题,28题扩展题

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  3. 【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题

    各位程序猿:         <剑指Offer>一书源自该书作者何海涛坚持更新与编写的博客(http://zhedahht.blog.163.com/),该博客收集整理了大量如微软.Goo ...

  4. 剑指Offer——中国银行面试知识储备

    剑指Offer--中国银行面试知识储备+面试内容 事件介绍 时间:2016.11.23 08:30 地点:北京市海淀区永丰路299号南门(中国银行软件中心) 事件:中国银行面试(中英文面试) 注意事项 ...

  5. 剑指Offer——网易校招内推笔试题&plus;模拟题知识点总结

    剑指Offer--网易校招内推笔试题+模拟题知识点总结 前言 2016.8.2 19:00网易校招内推笔试开始进行.前天晚上利用大约1小时时间完成了测评(这个必须做,关切到你能否参与面试).上午利用2 ...

  6. 剑指offer二刷(精刷)

    剑指 Offer 03. 数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次. ...

  7. 剑指Offer——面试小提示(持续更新中)

    (1)应聘者在电话面试的时候应尽可能用形象的语言把细节说清楚. (2)假设在英语面试时没有听清或没有听懂面试官的问题,应聘者要敢于说Pardon. (3)在共享桌面远程面试中.面试官最关心的是应聘者的 ...

  8. 21&period;Merge Two Sorted Lists---《剑指offer》面试17

    题目链接:https://leetcode.com/problems/merge-two-sorted-lists/description/ 题目大意: 给出两个升序链表,将它们归并成一个链表,若有重 ...

  9. 105&period;Construct Binary Tree from Preorder and Inorder Traversal---《剑指offer》面试6

    题目链接 题目大意:根据先序遍历和中序遍历构造二叉树. 法一:DFS.根据模拟步骤,直接从先序和中序数组中找值然后加入二叉树中,即先从先序数组中确定根结点,然后再去中序数组中确定左子树和右子树的长度, ...

随机推荐

  1. 深入理解JavaScript中创建对象模式的演变(原型)

    深入理解JavaScript中创建对象模式的演变(原型) 创建对象的模式多种多样,但是各种模式又有怎样的利弊呢?有没有一种最为完美的模式呢?下面我将就以下几个方面来分析创建对象的几种模式: Objec ...

  2. &lbrack;Ubuntu&rsqb; Ubuntu DNS服务器配置

    服务器IP:10.68.19.61 操作系统:Ubuntu 13.04 DNS程序:Bind9 测试域名:mycloud.com 目标IP:10.68.19.134 配置步骤 1.安装BIND9程序包 ...

  3. MySQL Backup mysqldump 常用选项与主要用法

    The mysqldump client utility performs logical backups, producing a set of SQL statements that can be ...

  4. cdh 5&period;13 hadoop 集群IP变更详细步骤

    1.因一些不可抗因素,集群IP变更. 修改CM的数据库IP地址 /etc/cloudera-scm-server/db.p... 2.修改每个主机的hosts列表 3.修改SCM数据库的hosts表中 ...

  5. Searching with Deep Learning 深度学习的搜索应用

    本文首发于 vivo 互联网技术微信公众号 https://mp.weixin.qq.com/s/wLMvJPXXaND9xq-XMwY2Mg作者:Eike Dehling翻译:杨振涛 本文由来自 T ...

  6. Caused by&colon; java&period;lang&period;NumberFormatException&colon; For input string&colon; &amp&semi;quot&semi;&amp&semi;quot&semi;

    1.错误描写叙述 java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatEx ...

  7. jQuery用noConflict代替&dollar;

    js框架很多的情况下,很容易出现冲突,建议使用noConflict代替$ //消除$对jquery缩写 $.noConflict(); //使用了noConflict后,用$就会无效,应用jQuery ...

  8. 4&period;5 基于STM32&plus;MC20远程短信控制开关

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  9. GPIO设备虚拟文件结点的创建【转】

    本文转载自:http://blog.csdn.net/dwyane_zhang/article/details/6742066 所谓GPIO设备虚拟文件结点,就是方便用户在应用程序直接操纵GPIO的值 ...

  10. eclipse的maven、Scala环境搭建

    最近重新搭建了一下maven+Scala的环境,发现很多东西都不记得了,于是重新记录一遍. 嫌搭建麻烦的话也可以直接下载Scala官方做好的环境http://scala-ide.org/downloa ...