《剑指Offer v2》数据结构与算法
面试考察的是一个人的综合能力, 这一点从面试官的角度去解读, 确实对面试的理解更立体。
一 具体考察的点
- 扎实的基础知识
- 高质量的代码
- 解决问题清晰的思路
- 优化时间和空间效率的能力
- 全面的综合能力
二 高质量的代码
- 代码的规范性
1.1清晰地书写
1.2清晰的布局
1.3合理的命名 - 代码的完整性
2.1功能测试
2.2边界测试
2.3负面测试(特殊输入测试) - 代码的鲁棒性
采取防御性编程 - 代码的高效性
4.1时间消耗与空间占用
4.2性能测试
进阶要求:
- 代码的可扩展性【资深开发工程师】
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面【用一个单独的函数来判断是否符合标准,用函数指针调用函数】
剑指 Offer 60. n个骰子的点数【全局变量g_max_value表示骰子最大点数】 - 代码的可维护性
- 代码的可移植性
三 解决问题清晰的思路
3 种思路来解决问题:
- 画图让抽象问题形象化
- 举例让抽象问题具体化
- 分解让复杂问题简单化
四 优化时间和空间效率的能力
优化时间效率及空间换时间的常用算法。
五 全面的综合能力
沟通能力和学习能力、知识迁移能力、抽象建模能力和发散思维能力。
六 职业素养
- 有时候面试官故意把题意说得模糊些, 需要面试者主动去询问, 并理解思路, 因为这样的面试者更主动, 而且更容易沟通;
- 在编写代码前, 先主动向面试官解说自己的解题思路, 然后实际编写代码, 优秀程序员的好习惯;
- 良好的编程习惯:
1先进行分析与设计;
2然后设计全面的测试用例;
3在编写代码时体现测试用例;
4最后用测试用例进行检查测试;
5提交; - 防御性编程的习惯,写出鲁棒的程序。
七 基本技能体现
- 对边界条件的判断和意识, 空指针, 整数溢出
- 优化能力, 基本算法优化技巧, 动态规划, 空间换效率
- 知识迁移, 学习和建模能力
八 常见程序崩溃或错误问题
1数组越界导致程序崩溃
2大数溢出问题
3向量下标超出范围
4数值的上、下边界溢出
5空间不够用
6需要另起炉灶的额外处理
7除0的意外操作
九 常见测试用例总结
二叉树:
功能测试:普通的二叉树;二叉树的所有节点都没有左子树或者右子树;只有一个节点的二叉树;
特殊输入测试:二叉树的根节点为nullptr指针;