剑指Offer(第二版)面试题目分析与实现-面试需要的基础知识

面试官谈基础知识:

  • C++语言基础知识;设计模式;UML图;软件工程知识;
  • C++内存管理;
  • 数据结构和算法;编程能力;部分数据知识,概率、线性代数知识;问题分析的能力;
  • 编程基本功;并发控制;算法和时间、空间复杂度;语言的基本概念;
  • 编程基础;计算系统基础知识;算法及设计能力;
  • OS了解程度:内存管理,文件操作,程序性能,多线程,线程安全;编程语言的掌握程度;经典的算法和数据结构
  • 从我自身角度来分析,应该是还差经典的算法和数据结构;

编程语言:

  • 问编程语言语法知识;使用一种编程语言写代码解决一个问题;通过使用代码,判断应聘者对语言的掌握程度;
  • C++面试:
    • 面试官直接询问对C++语言的理解;(概念题)
    • 面试官拿出事先准备好的代码,让应聘者分析结果;(代码分析题)
    • 要求应聘者写代码定义一个类型或者实现类型中的成员函数;
    • Effective C++;C++ primer;深度探索C++对象模型;The C++ programming Language;

数据结构:(围绕下面几个常见数据结构展开)(编程题)

  • 关于数据结构的介绍可以参考:经典数据结构实现与分析
  • 数组:线性表结构;寻找重复的数字;可以把数组作为哈希数组来进行使用;二维数组查找;
  • 字符串:线性表结构;字符串是由若干字符组成的序列;字符串替换,要问清楚是在原字符串替换,还是利用新的内存来进行字符串替换;注意c++ 字符串操作api
  • 链表:链表由指针把若干个节点连接成链状结构;复杂链表:链表中除了有指向下一节点的指针,还有指向任意节点的指针;
  • 树:二叉树遍历的6中写法;考察树的题目,多考察复杂指针的操作;
  • 栈:与递归密切相关;使用两个栈来进行模拟队列的行为;
  • 队列;FIFO 原理;可以借助队列来实现广度优先搜索;

算法和数据操作:具体查看基础算法策略总结

  • 递归和循环:递归实现比较简洁,循环实现性能比较高;在面试过程中,我们可以和面试官讨论,选择合适的方法编程;
  • 查找和排序:查找排序算法是考查算法的重点;排序的环境是什么,有哪些约束条件;要和面试官沟通好,根据不同排序算法的特点,选择最好的排序算法;
  • 回溯法:可以用递归容易实现回溯的方法;但是如果不能使用递归,可以和面试官沟通进行使用栈来进行实现;用回溯法解决问题的所有选项可以用树状结构描述;在某一步可能有n个选项,那么该步骤可以看做树状结构中的一个节点,每个选项可以看做树中节点的连线;经过这些连线达到该节点的n个子节点。树的叶节点对应着终结状态。如果叶节点的状态满足题目的约束条件,那么我们找到了一个可行的解决方案;解决问题过程中,尝尝需要使用数组,记录标记过的点;
  • 动态规划:问题可以分解为子问题,从递归角度进行分析问题;子问题之间有重叠。为了避免重复计算;可以自下而上的循环代码实现;把子问题的最优解先计算出来并进行用数组保存;接下来基于子问题的解来求解最大的问题的解;动态规划往往用来进行优化算法,优化重叠子问题,以求得最优解(最大值,最小值);
    • 求一个问题的最优解;
    • 整体问题的最优解依赖于子问题的最优解;
    • 子问题之间存在重叠;
  • 贪婪算法:如果分解子问题有特殊选择,采用这一选择一定能得到最优解;可以使用贪心算法;必要的时候需要证明贪心算法的正确性;
  • 位运算:位运算属于数据操作;总共有与,或,异或,非,左移与右移6中运算操作;注意理解 原码,反码和补码 的概念;

保持更新,转载请注明出处;更多内容请关注cnblogs.com/xuyaowen;

代码仓库:https://github.com/yaowenxu/codes/tree/master/剑指Offer

posted @ 2020-04-01 15:13  Michael-Xu  阅读(341)  评论(0编辑  收藏  举报