算法面试课程笔记001算法面试到底是什么鬼
===============================================================================
本文地址 :
===============================================================================
算法面试是什么?
让大家在面对面试中的算法问题时,有一个合理的思考路径;
- ·不代表能够"正确"回答每一个算法问题,但是合理的思考方向其实更重要,也是正确完成算法面试问题的前提
- ·算法面试优秀不意味着技术面试优秀
- ·技术面试优秀不意味着能够拿到Offer
一.什么是"正确"的回答一个算法问题
合理的思考路径:算法面试的目的不是给出一个"正确"答案;正确还包含对问题的独到见解;优化;代码规范;封装出的代码的容错性;
把这个过程看作是和面试官一起探讨一个问题的解决方案。
对于问题的细节和应用环境,可以和面试官沟通。
这种沟通本身很重要,它暗示着你思考问题的方式。
举例:假如对一组数据进行排序。 算法&数据结构
正常最优的为快速排序算法O(nlogn) 。但是是否考虑过以下这几种情况呢?
- ·有没有可能包含有大量重复的元素?
- ·是否大部分数据距离它正确的位置很近?是否近乎有序?
- ·是否数据的取值范围非常有限?比如对学生成绩排序。
- ·是否需要稳定排序?
- ·是否是使用链表存储的?
- ·数据的大小是否可以装载在内存里?
这组数据有什么样的特征?
·有没有可能包含有大量重复的元素?
·如果有这种可能的话,三路快排是更好地选择。
·是否大部分数据距离它正确的位置很近?是否近乎有序?
·如果是这样的话,插入排序是更好地选择。
·是否数据的取值范围非常有限?比如对学生成绩排序。
·如果是这样的话,计数排序是更好地选择。
对排序有什么额外的要求?
·是否需要稳定排序?
·如果是的话,归并排序是更好地选择。
数据的存储状况是怎样的?
·是否是使用链表存储的?
·如果是的话,归并排序是更好地选择。
·是否是使用随机存储的?
·如果是的话,快速排序是更好地选择。
数据的存储状况是怎样的?
·数据的大小是否可以装载在内存里?
·数据量很大,或者内存很小,不足以装载在内存里,需要使用外排序算法。
如果一个问题是非常难的问题,对你的竞争对手来说,也是难的。
关键在于你所表达出的解决问题的思路。甚至通过表达解题思路的方向,得出结论:这个问题的解决方案,应该在哪一个领域,我可以通过查阅或者进一步学习解决问题。
二.算法面试优秀不意味着技术面试优秀
算法面试只是技术面试的一部分。
根据你的简历和应聘职位的不同,势必要考察其他技术方面。
技术面试的内容:(根据自己职位而定)
- 项目经历和项目中遇到的实际问题
- 你遇到的印象最深的bug是什么?
- 面向对象
- 设计模式
- 网络相关;安全相关;内存相关;并发相关;…
- 系统设计;scalability
技术面试只是面试的一部分。面试不仅仅是考察你的技术水平,还是了解你的过去以及形成的思考行为方式。
项目经历
- 工作人士
- 研究生
- 本科生
-毕业设计
-其他课程设计
如何找到项目?
- 实习
- 参与实战课程学习
- 慕课网
- Coursera
创建自己的项目
- 自己做小应用:计划表;备忘录;播放器.…
- 自己解决小问题:爬虫;数据分析;词频统计…
- 自己做网站,为别人提供服务,做博客;
- "不是项目"的项目:一本优秀的技术书籍的代码整理等…
- ·分享:自己的技术博客;github等等通过过去了解你的思考行为方式
通过过去了解你的思考行为方式
- 遇到的最大的挑战? (项目中的算法问题)
- 犯过的错误?
- 遭遇的失败?
- 最享受的工作内容?
- 遇到冲突的处理方式?
- 做的最与众不同的事儿?
准备好合适的问题问面试官
- 整个小组的大概运行模式是怎样的?
- 整个项目的后续规划是如何的?
- 这个产品中的某个问题是如何解决的?
- ·为什么会选择某些技术?标准?
- 我对某个技术很感兴趣,在你的小组中我会有怎样的机会深入这种技术?
算法面试仍然是非常重要的一部分
===============================================================================
路漫漫其修远兮,吾将上下而求索。Let‘s grow up together !
===============================================================================