美文网首页
剑指Offer——读书笔记

剑指Offer——读书笔记

作者: 别笑我呆 | 来源:发表于2015-03-07 19:09 被阅读241次

    @[C++|面试|数据结构|算法]

    高质量的代码

    代码的规范性

    • 书写清晰
    • 布局清晰
    • 命名合理

    代码的完整性

    • 完成基本功能
    • 考虑边界条件
    • 做好错误处理

    代码的鲁棒性

    • 采取防御式编程
    • 处理无效的输入

    优化时间和空间效率

    编程面试的时候,面试官通常对时间复杂度和空间复杂度都会有要求,并且一般情况下面试官更加关注时间复杂度。

    降低时间复杂度的方法:

    • 改用更加高效的算法,如联想快速排序中的Partition,采用动态规划等算法
    • 用空间换取时间,经常通过辅助内存和简单的哈希表,实现利用较小的空间的消耗提高时间效率

    当然,也不是所有情况下,以空间换取时间都是可行的

    • 如果辅助空间消耗的太多,可能得不偿失
    • 如果是在嵌入式开发等对空间要求较高的情况下,也要格外注意空间消耗

    解决面试题的思路

    画图

    图形化能使抽象的问题形象化。当面试题涉及链表、二叉树等数据结构时,如果在纸上画几张草图,题目中隐藏的规律就有可能变得很直观。

    举列

    一两个例子能使抽象的问题具体化。很多与算法相关的问题都很抽象,未必一眼就能看出它们的规律。这个时候我们不妨举几个例子,一步一步模拟运行的过程,说不定就能发现其中的规律,从而找到解决问题的窍门。

    分解

    把复杂的问题分解成若干个小问题,是解决很多复杂问题的有效方法。如果我们遇到的问题很大,可以尝试先把大问题分解成小的问题,然后递归地解决这些小问题。分治法、动态规划等方法都是应用分解复杂问题的思路。


    面试中的各项能力

    “应聘者会被问及一些需求不是很明确的问题,解决这些问题需要应聘者和面试官进行沟通,以及在讲解思路和代码的过程中与需要和面试官交流互动。沟通及学习能力是面试成绩中关键的考察点。” ——尧敏(淘宝,资深经理)

    应聘者的综合素质

    • 编程能力
    • 沟通能力
    • 学习能力
    • 知识迁移能力
    • 发散思维能力
    • 抽象建模能力
    • ...

    沟通能力和学习能力

    随着软件、系统功能越来越复杂,开发团队的规模越来越大,开发者、测试者和项目经理的沟通交流变得越来越重要。因此在面试过程中,面试官也越来越看重沟通能力,因此也常常在面试的过程中,面试题描述比较含糊,从而希望应聘者能够主动沟通,充分理解题意,有效表达自己的想法和见解。

    而对于学习能力,由于软件技术发展日新月异,只有具备很强的学习能力和学习欲望的人,才能不断完善自己的知识结构,不断学习新的现金技术,让自己职业生涯保持长久的生命力。

    知识迁移能力

    知识迁移能力的通俗说法就是“举一反三”的能力。能够根据已知的知识来理解新的概念,以及根据解决一道题的思路,从而去解决一类问题。如面试题求解二叉树的深度

    int TreeDepth(BinaryTreeNode* pRoot)
    {
        if(pRoot == NULL)
            return 0;
            
        int nLeft = TreeDepth(pRoot->m_pLeft);
        int nRight = TreeDepth(pRoot->m_pRight);
        
        return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1); 
    }
    

    知识迁移能力能够帮助我们轻松地解决很多问题。有些面试官在提问难题之前,会问一道相关但比较简单的题目,也是希望我们能够从解决问题的过程中受到启发,最总解决较为复杂的问题。

    抽象建模能力

    • 建模的第一步就是选择合理的数据结构来表述问题。实际生产生活中的问题千变万化,而常用的数据结构却只有有限的几种。
    • 建模的第二部就是分析模型中的内在规律,并用编程语言表述这种规律。

    发散思维能力

    • 发散思维的特点是思维活动的多向性和变通性,也就是我们在思考问题时注重运用多思路、多方案、多途径地解决问题。
    • 通过考查发散思维能力,面试官能够
      • 了解应聘者探索新思路的激情
      • 了解应聘者的灵活性和变通性
      • 了解面试者知识面的广度和深度

    备注:文中主要内容参考《剑指Offer》——何海涛,书中有很多编程实例,就不在这里赘述了,推荐急于找工作的同学和感兴趣的人阅读

    相关文章

      网友评论

          本文标题: 剑指Offer——读书笔记

          本文链接:https://www.haomeiwen.com/subject/ptrvxttx.html