[玩转算法面试]什么是算法面试?

来源:互联网 发布:mac配置sublime text3 编辑:程序博客网 时间:2024/05/18 00:05

算法面试

什么是算法面试?

·不代表能够“正确回答”每个算法问题,合理的思考方向更重要,是正确完成算法面试的前提;

·算法面试优秀不意味着技术面试优秀;

·技术面试的游戏不意味着能够拿到offer

对一组数据进行排序

·这组数据有什么样的特征?

·有没有可能包含大量重复的元素?

  如果有这种可能的话,三路排序法是更好的选择

如果可以肯定数组中每个元素都是独特的,那么普通的快速排序法是最佳的。

·是否大部分数据距离它正确的位置很近?是否近乎有序?

  如果是这种可能的话,插入排序是更好的选择

·是否数据的取值范围非常有限?比如说对学生的成绩排序。

  如果是这种可能的话,计数排序是更好的选择

·对排序有什么额外的要求?

  是否需要稳定排序?

  如果是的话,归并排序是更好的选择

·数据具体的存储状况是怎么样的?

  快速排序非常依赖数组的随机存储

  若使用链表进行排序,归并排序是更好的选择

·数据的大小是否可以装载在内存里?

  数据量很大,或者内存很小,不足以装载再内存里,需要使用外排序算法。

面试问题:

·项目经历和项目中遇到的实际问题

·你遇到的印象最深的bug是什么?

·面向对象

·设计模式

·网络相关、安全相关、内存相关、并发相关……

·系统设计;scalability

通过过去了解思考行为方式

·遇到的最大的挑战?

·犯过的错误?

·遭遇的失败?

·最享受的工作内容?

·遇到冲突的处理方式?

·做的最与众不同的事儿?

准备好合适的问题问面试官

·整个小组的大概运行模式是怎样的?

·整个项目的后续/中长期规划是如何的?

·这个产品中的某个问题是如何解决的?

·为什么选择某些技术?标准?

·我对某个技术很感兴趣,在你的小组中我会有怎样的机会深入这种技术?

高级数据结构和算法面试提及概率很低:

·红黑树

·B-Tree

·斐波那契堆

·计算几何

·数论

·FFT

基础算法和数据结构

·各种排序算法

·基础数据结构和算法的实现:如堆、二叉树、图……

·基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集

·基础算法:深度优先、广度优先、二分查找、递归……

·基本算法思想:递归、分治、回溯搜索、贪心、动态规划……

选择合适的OJ(在线判题系统)

·LeetCode真实的面试问题 www.leetcode.com

·HackerRank对问题的分类很详细www.hackerrank.com

注意题目中的条件

·给定一个有序数组……

·有一些题目中的条件本质是暗示:

  ·设计一个O(nlogn)的算法——分治法(搜索树)、是否是考虑先排序,再找

O(n)或者O(logn)的算法

  ·无需考虑额外的空间——考虑是否开辟额外空间,以空间换时间的方法

  ·数据规模大概是10000——设计O(n^2)的算法

……

当没有思路的时候

·用几个简单的测试用例、体验一下

·不要忽视暴力解法。暴力解法通常是思考的起点

优化算法

·遍历常见的算法思路

·遍历常见的数据结构

·空间和事件的交换(哈希表)

·预处理信息(排序)

·在瓶颈处寻找答案:O(nlogn)+O(n^2); O(n^3)

实际编写问题

·极端条件的判断

  -数组为空?字符串为空?数量为0?指针为NULL?

·变量名

·模块化、复用性

原创粉丝点击