看了慕课网bobo老师的玩转算法面试课程,做了一些笔记。
算法面试是什么?
算法面试需要有一个合理的思考路径;算法只是技术的一部分。
- 不代表能够“正确”回答每一个算法问题,但是合理的思考方向其实更重要,也是正确完成算法面试问题的前提
- 算法面试优秀不意味着技术面试优秀
- 技术面试优秀不意味着能够拿到Offer
算法面试的目的不是给出一个“正确”答案,而是展示给面试官你思考问题的方式。
算法面试不是考试,把这个过程看作是和面试官一起探讨一个问题的解决方案。
对于问题的细节和应用环境,可以和面试官沟通。这种沟通暗示着你思考问题的方式
思考问题方式
对一组数据进行排序
和面试官沟通,这组数据有什么样的特征?
- 有没有肯包含有大量重复的元素? 采用三路快排。
- 是否大部分数据距离它正确的位置很近?是否近似有序? 插入排序
- 是否数据的取值范围非常有限?学生考试成绩。 计数排序
- 是否需要稳定排序? 需要稳定排序时 归并排序
- 数据的储存情况?是否是使用链表存储? 如果是链表存储,使用归并排序(快速排序依赖数组的随机存储)
- 数据的大小是否可以装载在内存中? 数据量很大,或者内存很小,不足以装载在内存里,需要使用外部排序算法。(海量数据问题)
对问题的独到见解,优化,代码规范,容错性
表达出解决问题的思路。
算法面试优秀不意味着技术面试优秀
技术面试包含
- 简历上的项目经历
- 项目经历和项目中遇到的实际问题
- 遇到的印象最深的bug是什么?
- 面向对象
- 设计模式
- 网络相关,安全相关,内存相关;并发相关
- 系统设计;scalability;
- …
技术面试优秀不意味着能拿到Offer
技术面试只是面试的一部分,面试还考察你的过去以及形成的思考行为方式。
过去参与的技术项目很重要
如何找项目?
- 实习
- 参加实战课程学习
创建自己的项目
- 创建小应用:计划表;备忘录,播放器等
- 自己解决小问题:爬虫,数据分析,词频统计等
- 一本优秀技术书籍的代码整理等
- 自己的技术博客,github等
通过过去了解你的思考行为方式(hr面):
- 遇到的最大的挑战?
- 犯过的错误?
- 遭遇的失败?
- 最享受的工作内容?
- 遇到冲突的处理方式?
- 做的最与众不同的事?
- …
结合具体的实际项目阐述,而非泛泛而谈。
反问环节
准备好合适的问题问面试官。
- 整个小组的大概运行模式是怎么样的?
- 整个项目的后续规划是如何的?
- 这个产品中的某个问题是如何解决的?
- 为什么会选择某些技术?标准?
- 我对某一个技术很感兴趣,在你的小组中我会有怎样的机会深入该技术?