it面试常考的算法(算法面试怎么准备)
it面试常考的算法(算法面试怎么准备)算法面试只是技术面试中的一部分遇见难题不要沮丧,关键在于表达出解决问题的思路有可能没有完美方案,需要做平衡数据有啥特征?对排序有什么额外的要求
正确看待算法面试面试 ≠ 考试,不一定要求大家给出一个“正确”答案,有正确合适的思考方向更加重要。
- 不可能刷遍所有的题,总有没见过的,有思路是前提
- 在算法面试中,展示出自己有应用算法解决问题的能力更重要
法面试更关注候选人是否具备应用算法解决问题的能力,而不是能否“正确”回答那道题
- 绝对的“正确”只在考试中存在
- 可以把算法面试看做是一次问题讨论
- 关于问题的细节和应用的场景都可以进行提问,沟通
- 在面试中,这些沟通往往很重要
举例:对一组数据进行排序
- 快速排序算法O(nlogn)
实际工作中要根据实际情况选择最优解
有可能没有完美方案,需要做平衡
数据有啥特征?
- 是否包含大量重复元素 (三路快排)
- 是否近乎有序的数据 (插入排序)
- 数据是否有固定的取值范围 (计数排序)
对排序有什么额外的要求
- 是否需要稳定排序 ? (归并排序更好)
- 如果是使用链表存储的 (归并排序)
- 数据是否可以全部装入内存 (外排)
遇见难题不要沮丧,关键在于表达出解决问题的思路
- 不要放弃,积极思考,
- 如果实在给不出具体实现,给出思考方向,查阅哪些资料可以解决
算法面试只是技术面试中的一部分
- 考察项目
- 技术领域的其他问题
- 面向对象、设计模式、网络相关、内存相关、并发相关
offer不仅取决于技术
- 通过面试考察候选人的过往经验,技术水平,思考行为方式等等
- 项目经验至关重要
从面试角度来说,项目经历更加重要
- 工作中的项目
- 研究生实验室项目
- 本科生,毕业设计课程设计
非科班毕业、转行如何获得项目经验
- 在线项目视频
- GitHub开源项目
创建自己的项目
- 自己做小应用
- 网络爬虫、数据分析、可视化展示
- 写技术博客
除了技术面试以外,还可能问一些开放性非技术问题
- 遇到最大的挑战
- 谈一谈自己的优点和缺点
- 遇到的挫折,犯过的错误
- 工作中与同事/领导发生矛盾的处理方式
法面试并没有想象中那么难
- 不需要读完厚厚的算法书,过于强调理论
- 高级数据结构和算法,被问到概率很低
(红黑树,计算几何,B-Tree,数论,FFT……)
- 不是编程大赛
重视基础算法和数据结构
各种排序算法
- 基础数据结构和算法实现 (堆,二叉树、图……)
- 基础数据结构的使用:如链表、栈、队列、哈希表……)
- 基础算法思想:深度优先、广度优先、二分查找、递归……
选择合适的刷题网站,多动手
- 牛客网
- LeetCode
- 注意题目中给出的条件
- 给定一个有序数组… …
- 限定了算法复杂度
- 空间限制
- 数据规模
当没有思路的时候
- 造简单的数据尝试,找思路
- 如果能想到暴力解法,也要说出来,算法复杂度可以继续优化
从暴力解法开始,优化算法,改进算法复杂度
- 遍历常见的算法思路
- 遍历常见的数据结构
- 数据预处理
- 空间换时间
注意代码规范和程序健壮性
- 变量名
- 如果程序稍微复杂,考虑复用性
- 边界条件,极端条件判断