算法面试准备

一道排序体题需要考与面试官沟通的点

  • 有没有可能包含大量的重复元素
  • 是否近乎有序
  • 数据取值范围是否有限
  • 是否需要稳定排序
  • 是否用链式存储
  • 数据大小足够装载内存里

算法面试优秀不意味技术面试优秀

  • 考虑项目经历和项目中遇到的实际问题
  • 印象最深的bug
  • 面向对象
  • 设计模式
  • 网络相关:安全相关、内存相关、并发相关
  • 系统设计:scalability

技术面试优秀不意味着能够拿到Offer

创建自己的项目

  • 自己做小应用
  • 自己解决小问题
  • “不是项目”的项目:书籍的整理
  • 技术分享,blog、github

了解过去自身的思考行为方式

  • 遇到最大的挑战
  • 犯过的错误
  • 遭遇的失败
  • 最享受的工作内容
  • 遇到冲突处理方式
  • 做的最与众不同的事儿

准备好问面试官的问题

  • 整个小组的大概运行模式是怎么样的
  • 整个项目组的后续规划是如何
  • 这个产品中某个问题的解决方案
  • 为什么选择某些技术?标准?
  • 对某技术很感性局,是否有机会深入

算法面试没这么难

  • 没必要啃完《算法导论》
  • 高级数据结构和算法面试提及概率很低(红黑树、计算几何、B-Tree、数论、斐波那契堆、FFT)

准备范围

*关注基础算法和数据结构,非“有意思”的题目
*

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

解决算法问题的整体思路

  • 注意题目中的条件
  • 当没有思路时(测试用例,暴力解法——>优化)
  • 优化算法(算法思路、数据结构、空间换时间、预处理数据、瓶颈除找解决方案)
  • 实际编写问题,极端条件的判断(数组为空、字符串为空、数据为NULL),代码规范(变量名、模块化、复用性)