zoukankan      html  css  js  c++  java
  • 《剑指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的整数次幂的操作,我们都可以用左右移位操作来代替。还有很多问题,想考虑使用二进制做掩码,可以高效解决很多问题。

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

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/lrh-xl/p/5258428.html
Copyright © 2011-2022 走看看