文章目录
- 第二章 面试需要的基础知识
- 1.1 面试官谈基础知识
- 1.2 编程语言
- 1.3 数据结构
- 1.4 算法和数据操作
第二章 面试需要的基础知识
1.1 面试官谈基础知识
- 数据结构和算法,编程能力,部分数学能力,问题分析和推理能力
- 编程基础,计算机基础,算法设计
- 计算机操作系统,编程语言,数据结构
1.2 编程语言
- 考察形式
- 语言的语法
- 通过实际写代码解决问题
- C++
- 推荐的书籍<effect c++>
- 设计模式中单例模式时常常考的内容
1.3 数据结构
- 数据结构是技术面试中的重点
- 主要围绕着数组,链表,字符串,树,队列,栈几种常见的数据结构
- 数组和链表是面试中常常考的两种数据结构,由于使用了指针,应该注意程序的鲁棒性2.
- 数组
- 数组需要实现申明空间大小,数组支持随机存取,读取时间复杂度为O(1),插入删除操作时间复杂度为O(N)
- 动态数组的考察,数组和指针的关系
- 当我们遇到复杂的问题的时候,一个有效的方法就是从一个具体的问题入手,通过分析简单具体的例子,找出普遍的规律。(二位数组的查找)
- 字符串
- C/C++中的字符串都是以“\n”结尾的。
- 为了节省内存,C/C++把常量字符串放到单独的一个内存区域中,当使用几个不同的指针指向的时候,实际指向的是相同的内存地址。
- 常考的字符串的复制,比较,插入等。可以打破常规思维,从后往前遍历。
- 链表
- 链表是面试时候被问及最多的一种数据结构
- 链表的创建,插入删除节点和查询节点实现起来代码量都不大。
- 在面试中如果要修改输入数据时,最好问面试官是否允许进行修改。
在写测试用例的时候,常常分为功能测试和特殊输入测试。
- 树
- 树是一种在实际编程中常常用到的数据结构,由于树的实验涉及到大量的指针,所以面试中考的概率不大
- 面试中要考察的树常常为二叉树,常考查二叉树的遍历:
- 前序遍历
- 中序遍历
- 后序遍历
3种遍历方法都有循环和递归的时现,需要对这6种方法比较了解。
- 二叉树的另外两个特例是堆和红黑树
- 有很多快速找到最大值和最小值的算法都用到堆来实现
- 栈和队列
- 栈是一个非常常见的数据结构,在计算机中被广泛应用。
- 通常栈是一个不考虑排序的数据结构,找到最大值或者最小值需要O(N)的时间。
- 队列是另外一种比较重要的数据结构
- 对列和栈两个数据结构是相互联系的,可以相互表示。
1.4 算法和数据操作
重点掌握二分查找,归并排序,快速排序,能够做到随时随地快速准确的用代码实现他们。
很多算法都可以使用循环和递归实现,其中递归方法看起来代码简洁,但是性能不佳。
位操作应该也要进行掌握
- 查找和排序
- 查找和排序是程序设计中常用到的算法
- 查找比较简单,包括:顺序查找,二分查找,哈希查找和二叉树查找。
- 如果面试中要对一个排好序的数组或者部分排序的数组进行查找,都可以考虑使用二分查找的方法
- 哈希表最主要的优点是可以完成在O(1)时间内查找某个元素,但是需要额外的空间来实现哈希表。
- 二叉搜索树是树结构在查找算法中的应用。
- 排序算法比查找算法要难一些,需要我们对常见的一些排序算法熟记于心。
- 插入排序,冒泡排序,归并排序,快速排序等不同排序算法的优劣。
- 可以从空间消耗,平均时间复杂度和最坏时间复杂度去分析比较。
- 快速排序的代码常常被要求写出。
- 如果面试官要求实现一个排序算法,一定要问清楚排序算法的应用背景,再来决定使用哪种排序算法。
- 递归和循环
- 如归针对一个问题需要重复多次计算相同的问题,则可以使用递归或者循环两种方法。
- 递归代码相比于循环代码常常比较简洁;在树的前序,中序,后序遍历中常常采用递归算法。如果面试中没有说明用循环还是递归,最好先用循环实现后,再用递归实现。
测试用例:功能测试,边界值测试,性能测试
- 位运算
- 位运算是把数字用二进制表示后,对每一位上的0或者1进行运算。
- 熟练掌握2进制和10进制之间的转换关系,熟悉掌握二进制数的与,或,异或,左移好和右移操作。