易燃物汇聚 YouTube 有声书与书评
剑指Offer 封面

剑指Offer

何海涛著

3万人在读
18.8万字总字数
¥18定价

有声书与视频解读 YouTube视频解读 21

内容简介

本书剖析了50个典型的程序员面试题。全书分为7章,主要包括面试的流程,讨论面试流程中每一环节需要注意的问题;面试需要的基础知识,从编程语言、数据结构及算法三方面总结了程序员面试的知识点;高质量的代码,讨论影响代码质量的的3个要素;解决面试题的思路,总结在编程面试中解决难题的常用思路;面试中的各种能力,本章总结应聘者在面试过程中如何表现学习能力和沟通能力;两个面试案例,这两个案例总结了应聘者在面试过程中哪些举动是不好的行为,而哪些表现又是面试官所期待的行为。

读者书评

★★★★★

一本好书。对数据结构和算法的理解又深入了一步。喜欢链表/树/位运算/辅助栈/队列/排序这种类型的题目,但每次出现递归题,需要在纸上画半天才能理解[流泪]感慨自己的智商捉急。尤其是递归函数嵌套在代码中间的代码,更是难上加难。。。 anyway,有趣的程序有趣的代码!继续努力吧! 全书都是基于c++语言实现的,相当于又温习了一遍c++。

★★★★★

虽然知识点和我的专业关系不大,但是逻辑思维和处理方法还是相通的,让我想起来之前每次去面试的时候,遇到技术面就抓瞎,回答不上来问题就很尴尬,但是有一点是深圳的技术面试官很装逼,有些觉得自己懂一点技术就厉害的不行,但是真正的技术大佬都很和蔼可亲,这就是反差,面试找工作这件事也是得看缘分的。纸质书已经买了。

★★★★★

回忆 10 多年 这本神书. 好多那会计算机年轻人靠这本书改变了穷苦命. 那会会这本书基本上能进入很不错的平台, 完成第一桶金积累

★★★★★

面试必看的一本书,非常经典,看完收获不少,还是要多动手,提到的面试题不多,看了下附上的完整代码,每一个都有各种不同输入测试,争取自己先刷一遍,然后对照一下找差距。

★★★★★

很多时候我们不是个人能力有多大的缺陷,而是因为自己没有做过面试官,不清楚面试要考察的到底是什么,造成面试的时候唯唯诺诺,猜测面试官想听到什么答案。这本书从面试官的角度,剖析了面试时考察的是应聘者的哪些方面,我们了解了这些之后,针对相关考察内容展示自己的能力就可以做到更加从容。最后,作为一个工作了几年的开发者,感谢作者帮我打开了应对面试的思路~

★★★★☆

有思路讲解,覆盖了面试中常见的问题和场景。只是选题已经比较老了还可以再经典一些,比自己闷头刷题效率和质量上都好很多。 通常面试官除了期待应聘者写出的代码能够完成基本的功能之外,还能应对特殊情况并对非法输入进行合理的处理。 >通常面试官除了期待应聘者写出的代码能够完成基本的功能之外,还能应对特殊情况并对非法输入进行合理的处理。 除此之外,有些面试官还喜欢考查应聘者的知识迁移能力、抽象建模能力和发散思维能力。 >除此之外,有些面试官还喜欢考查应聘者的知识迁移能力、抽象建模能力和发散思维能力。 如果面试的时候遇到的题目很难,我们可以试图把一个大的复杂的问题分解成若干个小的简单的子问题,然后递归地去解决这些子问题。 >如果面试的时候遇到的题目很难,我们可以试图把一个大的复杂的问题分解成若干个小的简单的子问题,然后递归地去解决这些子问题。 如何从基本功能测试、边界值测试、性能测试等方面去设计测试用例,从而提高编写高质量代码的能力 >如何从基本功能测试、边界值测试、性能测试等方面去设计测试用例,从而提高编写高质量代码的能力 ◆ 1.2 面试的三种形式 如果应聘者是先写单元测试用例,再写解决问题的函数,我相信面试官定会对你刮目相看,因为能做到测试在前、开发在后的程序员实在是太稀缺了,他会毫不犹豫地抛出绿色的橄榄枝。 >如果应聘者是先写单元测试用例,再写解决问题的函数,我相信面试官定会对你刮目相看,因为能做到测试在前、开发在后的程序员实在是太稀缺了,他会毫不犹豫地抛出绿色的橄榄枝。 ◆ 1.3 面试的三个环节 面试官除了希望应聘者的代码能够完成基本的功能之外,还会关注应聘者是否考虑了边界条件、特殊输入(比如 NULL 指针,空字符串等)及错误处理。 >面试官除了希望应聘者的代码能够完成基本的功能之外,还会关注应聘者是否考虑了边界条件、特殊输入(比如 NULL 指针,空字符串等)及错误处理。 面试小提示: 如果在面试的时候遇到难题,我们有 3 种办法分析、解决复杂的问题:画图能使抽象问题形象化,举例使抽象问题具体化,分解使复杂问题简单化。 >面试小提示: 如果在面试的时候遇到难题,我们有 3 种办法分析、解决复杂的问题:画图能使抽象问题形象化,举例使抽象问题具体化,分解使复杂问题简单化。 ◆ 1.4 本章小结 基础知识是否扎实、能否写出高质量的代码、思路是否清晰、是否有优化效率的能力,以及包括学习能力、沟通能力在内的综合素质是否优秀。 >基础知识是否扎实、能否写出高质量的代码、思路是否清晰、是否有优化效率的能力,以及包括学习能力、沟通能力在内的综合素质是否优秀。 ◆ 2.3 数据结构 在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针 >在C/C++中,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针 当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却有所不同。数组会先分配一块内存,然后将字符内容拷贝到内存中。所以是不同的内存地址。 >为了节省内存,C/C++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却有所不同。 ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是: 1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。 2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。 3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。 out 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。 若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。 不必初始化作为 out 参数传递的变量。 >ref或者out 合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。 >合并两个数组(包括字符串)时,如果从前往后复制每个数字(或字符)需要重复移动数字(或字符)多次,那么我们可以考虑从后往前复制,这样就能减少移动的次数,从而提高效率。 ◆ 2.4 算法和数据操作 >> 哈希表最主要的优点是我们利用它能够在 O(1)时间查找某一元素,是效率最高的查找方式。但其缺点是需要额外的空间来实现哈希表。 >> 快速排序虽然总体的平均效率是最好的,但也不是任何时候都是最优的算法。比如数组本身已经排好序了,而每一轮排序的时候都是以最后一个数字作为比较的标准,此时快速排序的效率只有O(n2) >> 因为除法的效率比移位运算要低得多,在实际编程中应尽可能地用移位运算符代替乘除法。 二进制问题的杀手锏–>如何消去最右边的1–>数的二进制中有多少个1 >把一个整数减去 1 之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0。很多二进制的问题都可以用这个思路解决。 ◆ 2.5 本章小结 >> 查找(特别是二分查找)和排序(特别是快速排序和归并排序)是面试中最经常考查的算法,应聘者一定要熟练掌握。 ◆ 3.3 代码的完整性 >> 通常面试官会检查应聘者的代码是否完成了基本功能、输入边界值是否能得到正确的输出、是否对各种不合规范的非法输入做出了合理的错误处理。 >> 通常我们可以从功能测试、边界测试和负面测试三方面设计测试用例,以确保代码的完整性 >> 如果面试题是关于 n位的整数并且没有限定 n的取值范围,或者是输入任意大小的整数,那么这个题目很有可能是需要考虑大数问题的。字符串是一个简单、有效的表示大数的方法。 ◆ 3.4 代码的鲁棒性 >> 也就是说解耦的好处就是提高了代码的重用性 避免数组插入造成O(n)复杂度,可以在数组头尾定义两个指针来解决,快排的一轮排序算法也是在这个基础上增加两个交换操作实现的。 >要在短时间内按照要求把数组分隔成两部分,不是一件容易的事情,需要较快的思维能力。 >> 鲁棒性是指程序能够判断输入是否合乎规范要求,并对不合要求的输入予以合理的处理。 >> 容错性是鲁棒性的一个重要体现。 >> 提高代码的鲁棒性的有效途径是进行防御性编程。防御性编程是一种编程习惯,是指预见在什么地方可能会出现问题,并为这些可能出现的问题制定处理方式。 >> 在面试时,最简单也最实用的防御性编程就是在函数入口添加代码以验证用户输入是否符合要求。 ◆ 第4章 解决面试题的思路 >> 应聘者可以采用举例子、画图等多种方式,解释清楚问题本身和问题解决方案是关键。 ◆ 4.2 画图让抽象问题形象化 >> 很多面试题很抽象,不是很容易找到解决办法。这时不妨画出一些与题目相关的图形,借以辅助自己观察和思考。图形能使抽象的问题具体化、形象化 >> 很多时候空想未必能想明白题目中隐含的规律和特点,随手画几张图却能让我们轻易找到窍门。 ◆ 4.3举例让抽象问题具体化 >> 如果面试题是要求处理一棵二叉树的遍历序列,我们可以先找到二叉树的根结点,再基于根结点把整棵树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,接下来再递归地处理这两个子序列。 ◆ 4.4 分解让复杂问题简单化 >> 通常分治法思路都可以用递归的代码实现 ◆ 5.2 时间效率 >> 比如 C/C++程序员要养成采用引用(或指针)传递复杂类型参数的习惯。如果采用值传递的方式,从形参到实参会产生一次复制操作。这样的复制是多余的操作,我们应该尽量避免 >> 当需要在某数据容器内频繁查找及替换最大值时,我们要想到二叉树是个合适的选择,并能想到用堆或者红黑树等特殊的二叉树来实现。 >> 虽然通常我们用递归的方式分析动态规划的问题,但最终都会基于循环去编码。 >> 一个有效的比较规则需要3个条件:自反性、对称性和传递性 ◆ 6.2 沟通能力和学习能力 >> 面试是一个双向交流的过程,面试官可以问应聘者问题,同样应聘者也可以向面试官提问。如果应聘者能够针对面试题主动地提出几个高质量的问题,面试官就会觉得他有很强的沟通能力和学习能力。 江湖险恶,HR难测。 >有些面试官故意一开始不把题目描述清楚,让题目存在一定的二义性。他期待应聘者能够一步步通过提问来弄明白题目的要求。 >> 有些面试官故意一开始不把题目描述清楚,让题目存在一定的二义性。他期待应聘者能够一步步通过提问来弄明白题目的要求。 ◆ 6.3 知识迁移能力 >> 每个结点只遍历一次的解法,正是面试官喜欢的 >> 通常我们可以用循环求一个连续序列的和,但考虑到每一次操作之后的序列和操作之前的序列相比大部分数字都是一样的,只是增加或者减少了一个数字,因此我们可以在前一个序列的和的基础上求操作之后的序列的和。这样可以减少很多不必要的运算,从而提高代码的效率。 ◆ 6.4 抽象建模能力 >> 建模的第一步是选择合理的数据结构来表述问题。 >> 建模的第二步是分析模型中的内在规律,并用编程语言表述这种规律。

★★★☆☆

10年出版的,当时C++11标准都没有,放到现在很多题目的代码语法已经过时了。 另外这本书讲解题目的语言逻辑存在硬伤,很多情况下对解题思路没有遵循从头到尾的顺序,中间莫名其妙跳过了重点衔接部分直接给出结论。 最后是书中相当多的题目,在今天已经是基础中的基础,好多更复杂的数据结构和算法得额外学习,仅仅满足于链表-栈-队列-二叉树是完全不够的,更为复杂的图结构、拓扑排序、动态规划还得完善。 不得不感慨,计算机行业发展迅速,知识更新周期短,到2025年之后,大模型可以直接生成高质量的标准化代码,使得本书涉及的技术放在2010年能够搞定工程任务,放到现在只够打个基础。想达到平均水准自然也是水涨船高,任重而道远啊

★★★★★

全书分为7章,各章的主要内容如下: 第 1 章介绍面试的流程。通常整个面试过程可以分为电话面试、共享桌面远程面试和现场面试 3 个阶段,每一轮面试又可以分为行为面试、技术面试和应聘者提问 3 个环节。本章详细讨论了面试中每一环节需要注意的问题。其中第1.3.2节深入讨论了技术面试中的5个要素,是全书的大纲,接下来的第2~6章逐一讨论每个要点。 第 2 章梳理应聘者接受技术面试时需要用到的基础知识。本章从编程语言、数据结构及算法三方面总结了程序员面试的知识点。 第3 章讨论应聘者在面试时写出高质量代码的3 个要点。通常面试官除了期待应聘者写出的代码能够完成基本的功能之外,还能应对特殊情况并对非法输入进行合理的处理。读完这一章,读者将学会如何从规范性、完整性和鲁棒性3个方面提高代码的质量。 第 4 章总结在编程面试中解决难题的常用思路。如果在面试过程中遇到复杂的难题,应聘者最好在写代码之前形成清晰的思路。读者在读完这一章之后将学会如何用画图、举例和分解复杂问题3种思路来解决问题。 第 5 章介绍如何优化代码的时间效率和空间效率。如果一个问题有多种解法,面试官总是期待应聘者能找到最优的解法。读完这一章,读者将学会优化时间效率及空间换时间的常用算法。 第 6 章总结面试中的各项能力。面试官在面试过程中会一直关注应聘者的学习能力和沟通能力。除此之外,有些面试官还喜欢考查应聘者的知识迁移能力、抽象建模能力和发散思维能力。读完这一章,读者将学会如何培养和运用这些能力。 第 7 章是两个面试的案例。在这两个案例中,我们将看到应聘者在面试过程中的哪些举动是不好的行为,而哪些表现又是面试官所期待的行为。衷心地希望应聘者能在面试时少犯甚至不犯错误,完美地表现出自己的综合素质,最终拿到心仪的Offer。

★★★★★

很经典的一本编程算法面试备考书籍,里面有很多经典的例题,都是曾经的高频考点。大多数题目并不是很难,但是看到书中巧妙解答,总有一种醍醐灌顶的感觉。作者讲到的优化解法很有启发,受益匪浅。

★★★★★

2024.No53: 24年第24本技术书。关于程序员面试,首先,也是必不可少的一些经验之谈,如面试形式、流程。 然后直入主题,毕竟这是一本技术书。内容包括:基础数据结构(数组、字符串、链表、树、队列、栈)、基础算法(查找、排序、递归、循环、位运算)、时间和空间复杂度、能力(知识迁移、抽象建模、发散思维)。基本上不用看书就能对书本的目录章节设置猜出个7~8成。 想拿到好的Offer,一定要擅长算法。大环境不好,程序员(尤其是Java、Python、JS前端)门槛低+行业卷+经济下行等因素,面试官被迫在1~2个小时内考查出一个人的综合素质。 怎么考察?算法呗。

书籍信息

作者何海涛著
出版社电子工业出版社
出版时间2012-01-01
ISBN9787121148750
分类计算机-编程设计
格式EPUB
完结状态连载中
章节数98