写在前面
- 被秋招严重摧残了,笔试挺多,面试机会却很少很少,算法这块真实软肋,现在仍然是0offer的状态,希望能通过比较系统的学习把算法这块补上,不期望能成为什么大佬,只希望自己不要太渣。
- 接下来的算法学习主要看 【玩转算法面试 从真题到思维全面提升算法思维】 的视频教学,这里简单记录下学习笔记。
一、算法面试解决思路
- 在思考面试官的题目的时候,不要急着找出正确的答案,而是要能够思考题目是否有不同的情况,在跟面试官的交流中进一步去展现自己的思路,找出当前情境下的最优解。
1、例子:对一组数组进行排序(快排、插入排序、计数排序、归并排序)
- 数据特征:
- 是否有大量的重复数据?
- 是:三路快排
- 否:普通快排
- 是否已经接近有序?(如银行业务)
- 是:插入排序
- 数据的取值范围是否有限?(如成绩排序)
- 是:计数排序
- 是否有大量的重复数据?
- 排序的额外要求:
- 是否需要稳定的排序
- 是:归并排序
- 是否需要稳定的排序
- 数据的存储状况:
- 数据是否为数组存储?(快排依赖于数组的随机存储)
- 否:归并排序
- 数据是否可以存储在内存中?
- 否:使用外排序算法
- 数据是否为数组存储?(快排依赖于数组的随机存储)
2、“正确”的答案包含:独到见解、代码优化、代码规范、容错性(封装)
二、项目经历
- 毕设
- 大作业
- 实战课程教学
- 创建自己的项目
- 做小应用:计划表、备忘录、播放器
- 解决小问题:爬虫、数据分析、词频统计
- 阅读书籍:整理优秀的技术书籍的代码(Github)
- 推荐:
head first 设计模式
- 推荐:
- 分享:技术博客、github
三、过往经历
面试官问的:(应该提前自问一遍,并能够完整的回答出来)
- 遇到的最大的挑战?
- 犯过的错误?
- 遭遇的失败?
- 最享受的工作内容?
- 遇到冲突的处理方式?
- 做的最与众不同的事
我问的:
- 准备好合适的问题问面试官
- 小组的运行模式是怎么样的?
- 项目的后续规划如何?
- 产品的某个问题是如何解决的?
- 为什么会选择某些技术?标准?
- 我对某项技术很感兴趣,在你的小组中我会有怎样的机会深入这种技术?