算法面试课笔记——①基本框架

181 阅读2分钟

Hello world!

算法面试优秀≠技术面试优秀

技术面试常见问题

  1. 项目经历和项目中遇到的实际问题
  2. 遇到的印象最深的bug,是如何解决的(高下立见)
  3. 面向对象编程
  4. 设计相关
  5. 网络、安全、内存、并发相关
  6. 系统设计(scalability)
    • 系统在大规模使用时可能遇到的问题

技术面试优秀≠能拿到offer

过去参与的项目至关重要,通过项目让人了解你

  • 慕课网、coursera上的实战课程
  • 创建自己的项目:计划书、备忘录、播放器
  • 自己解决小问题:爬虫、数据分析、词频统计
  • 不是项目的项目:一本优秀的技术书籍的代码整理
  • 分享:自己的技术博客、GitHub账号

算法面试并不需要啃完一本《算法导论》

  • 刚开始阅读可以跳读,抓大放小;理论证明部分可以略读
    • 高级数据结构和算法面试提及的概率很低(红黑树、B-Tree、斐波那契堆、计算几何、数论、FFT)
  • 远远不需要达到信息学竞赛的水平

关注基础算法和数据结构

  1. 各种排序算法
  2. 基础数据结构和算法的实现,如堆、二叉树、图……
  3. 基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集
  4. 基础算法:深度优先、广度优先、二分查找、递归
  5. 基本算法思想:递归、分治、回溯搜索、贪心、动态规划……

选择合适的OJ (Online Judge)

解决算法问题的整体思路

  1. 注意题目的条件
  • O(nlogn)的算法
  • 无需考虑额外空间:需要开辟额外空间
  • 数据规模时是10000:设计O(n^2)
  1. 当没有思路的时候
  • 自己给自己几个简单的测试用例,试验一下(最简单的情况如何求解)
  • 暴力解法通常是思考的起点
    • 优化算法
      1. 遍历常见算法思路(对问题做分类,看是哪个算法下的问题)
      2. 遍历常见的数据结构
      3. 常规思路
        • 空间和时间的交换(哈希表)
        • 预处理信息(排序)
        • 在瓶颈处寻找答案:O(nlogn)+O(n^2)+O(n^3)
      4. 实际编写问题
        • 极端条件的判断
          • 数组、字符串为空?数量为0?指针为NULL?
          • 变量名有语义
          • 代码模块化、复用性
        • 对于基本问题白板编程