1.算法是解决问题的,分析问题的细节和应用环境。一个合理的解决路径。(算法与数据结构)
以一组数据进行排序为例
- 快速排序
- 有没有大量重复元素
- 是否近乎有序
- 是否取值 范围有限
- 是否需要稳定排序
- 是否使用链表存储
- 数据大小是否可以装载在内存
2.项目经历和项目中遇到的实际问题
- 面对的影响最深刻的bug
- 面向对象
- 设计模式
- 网络相关,安全相关,内存相关
- 系统设计,scalability
3.关于过去,参与项目至关重要
实习,实战课程学(慕课网),创建自己的项目(小应用:计划表,备忘录,爬虫,数据分析,词频统计,代码整理(博客,github))
- 最大的挑战?
- 犯过的错误?
- 遭遇的失败
- 最享受的工作内容
- 冲突的处理方式
- 最与众不同的事?
4.准备好适合的问题问面试管
- 整个小组的运行模式?
- 项目的后续规划?
- 会选择那些技术?标准?
- 自己的后续成长?
5基础算法和数据结构 - 各种排序算法
- 基础数据结构和算法的实现:如堆二叉树,图
- 基础数据结构使用:如链表,栈,队列,哈希表,图,tree,并查集
- 基础算法:深度优先,广度优先,二分查找,递归
- 基础算法思想:递归,分治,回溯搜索,贪心,动态规划
6选择合适的OJ(online judge) - 偏向程序设计竞赛的(CODEFORCES,topcoder,CODECHEF)
- 面向面试的(leetcode,HackerRank对问题的分类很详细)
7.解决算法面试的整体思路
- 注意给定的条件
- 当没有思路时,可以试用一个测试用例,也可以暴力解法。
- 优化算法,遍历常见的算法思路,遍历常见的数据结构,空间和时间的交换(哈希表),预处理信息(排序),在瓶颈处寻找答案
- 极端条件的判断:数据为空,字符串为空,