算法面试准备
一道排序体题需要考与面试官沟通的点
- 有没有可能包含大量的重复元素
- 是否近乎有序
- 数据取值范围是否有限
- 是否需要稳定排序
- 是否用链式存储
- 数据大小足够装载内存里
算法面试优秀不意味技术面试优秀
- 考虑项目经历和项目中遇到的实际问题
- 印象最深的bug
- 面向对象
- 设计模式
- 网络相关:安全相关、内存相关、并发相关
- 系统设计:scalability
技术面试优秀不意味着能够拿到Offer
创建自己的项目
- 自己做小应用
- 自己解决小问题
- “不是项目”的项目:书籍的整理
- 技术分享,blog、github
了解过去自身的思考行为方式
- 遇到最大的挑战
- 犯过的错误
- 遭遇的失败
- 最享受的工作内容
- 遇到冲突处理方式
- 做的最与众不同的事儿
准备好问面试官的问题
- 整个小组的大概运行模式是怎么样的
- 整个项目组的后续规划是如何
- 这个产品中某个问题的解决方案
- 为什么选择某些技术?标准?
- 对某技术很感性局,是否有机会深入
算法面试没这么难
- 没必要啃完《算法导论》
- 高级数据结构和算法面试提及概率很低(红黑树、计算几何、B-Tree、数论、斐波那契堆、FFT)
准备范围
*关注基础算法和数据结构,非“有意思”的题目
*
- 各种排序算法
- 基础数据结构和算法实现:堆、二叉树、图…
- 基础数据结构使用:链表、栈、队列、哈希表、图、Trie…
- 基础算法:深度优先、广度优先、二分查找、递归…
- 基本算法思想:递归、分支、回溯搜索、贪心、动态规划…
解决算法问题的整体思路
- 注意题目中的条件
- 当没有思路时(测试用例,暴力解法——>优化)
- 优化算法(算法思路、数据结构、空间换时间、预处理数据、瓶颈除找解决方案)
- 实际编写问题,极端条件的判断(数组为空、字符串为空、数据为NULL),代码规范(变量名、模块化、复用性)