剑指offer_02

第二章 面试需要的基础知识

1.1 面试官谈基础知识

  1. 数据结构和算法,编程能力,部分数学能力,问题分析和推理能力
  2. 编程基础,计算机基础,算法设计
  3. 计算机操作系统,编程语言,数据结构

1.2 编程语言

  1. 考察形式
  • 语言的语法
  • 通过实际写代码解决问题
  1. C++
  • 推荐的书籍<effect c++>
  • 设计模式中单例模式时常常考的内容

1.3 数据结构

  1. 数据结构是技术面试中的重点
  • 主要围绕着数组,链表,字符串,树,队列,栈几种常见的数据结构
  • 数组和链表是面试中常常考的两种数据结构,由于使用了指针,应该注意程序的鲁棒性2.
  1. 数组
  • 数组需要实现申明空间大小,数组支持随机存取,读取时间复杂度为O(1),插入删除操作时间复杂度为O(N)
  • 动态数组的考察,数组和指针的关系
  • 当我们遇到复杂的问题的时候,一个有效的方法就是从一个具体的问题入手,通过分析简单具体的例子,找出普遍的规律。(二位数组的查找)
  1. 字符串
  • C/C++中的字符串都是以“\n”结尾的。
  • 为了节省内存,C/C++把常量字符串放到单独的一个内存区域中,当使用几个不同的指针指向的时候,实际指向的是相同的内存地址。
  • 常考的字符串的复制,比较,插入等。可以打破常规思维,从后往前遍历。
  1. 链表
  • 链表是面试时候被问及最多的一种数据结构
  • 链表的创建,插入删除节点和查询节点实现起来代码量都不大。
  • 在面试中如果要修改输入数据时,最好问面试官是否允许进行修改。

在写测试用例的时候,常常分为功能测试和特殊输入测试。

  1. 树是一种在实际编程中常常用到的数据结构,由于树的实验涉及到大量的指针,所以面试中考的概率不大
  2. 面试中要考察的树常常为二叉树,常考查二叉树的遍历:
  • 前序遍历
  • 中序遍历
  • 后序遍历

3种遍历方法都有循环和递归的时现,需要对这6种方法比较了解。

  • 二叉树的另外两个特例是堆和红黑树
  • 有很多快速找到最大值和最小值的算法都用到堆来实现
  1. 栈和队列
  2. 栈是一个非常常见的数据结构,在计算机中被广泛应用。
  • 通常栈是一个不考虑排序的数据结构,找到最大值或者最小值需要O(N)的时间。
  1. 队列是另外一种比较重要的数据结构
  • 对列和栈两个数据结构是相互联系的,可以相互表示。

1.4 算法和数据操作

重点掌握二分查找,归并排序,快速排序,能够做到随时随地快速准确的用代码实现他们。
很多算法都可以使用循环和递归实现,其中递归方法看起来代码简洁,但是性能不佳。
位操作应该也要进行掌握

  1. 查找和排序
  • 查找和排序是程序设计中常用到的算法
  • 查找比较简单,包括:顺序查找,二分查找,哈希查找和二叉树查找。
    • 如果面试中要对一个排好序的数组或者部分排序的数组进行查找,都可以考虑使用二分查找的方法
    • 哈希表最主要的优点是可以完成在O(1)时间内查找某个元素,但是需要额外的空间来实现哈希表。
    • 二叉搜索树是树结构在查找算法中的应用。
  • 排序算法比查找算法要难一些,需要我们对常见的一些排序算法熟记于心。
    • 插入排序,冒泡排序,归并排序,快速排序等不同排序算法的优劣。
    • 可以从空间消耗,平均时间复杂度和最坏时间复杂度去分析比较。
    • 快速排序的代码常常被要求写出。
    • 如果面试官要求实现一个排序算法,一定要问清楚排序算法的应用背景,再来决定使用哪种排序算法。
  1. 递归和循环
  • 如归针对一个问题需要重复多次计算相同的问题,则可以使用递归或者循环两种方法。
  • 递归代码相比于循环代码常常比较简洁;在树的前序,中序,后序遍历中常常采用递归算法。如果面试中没有说明用循环还是递归,最好先用循环实现后,再用递归实现。

测试用例:功能测试,边界值测试,性能测试

  1. 位运算
  • 位运算是把数字用二进制表示后,对每一位上的0或者1进行运算。
  • 熟练掌握2进制和10进制之间的转换关系,熟悉掌握二进制数的与,或,异或,左移好和右移操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值