主要介绍算法面试的一些问题、以及如何准备算法面试

算法面试不仅仅是正确的回答问题

对于面试中遇到的大多数问题,都能有一个合理的思考路径

什么是算法面试?

  • 让大家在面对面试中的算法问题时,有一个合理的思考路径:

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

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

  • 技术面试优秀不意味着能够拿到Offer

什么是给出合理的思考路径?

  • 算法面试的目的不是给出一个“正确”答案,

  • 而是展示给面试官你思考问题的方式。

“正确”本身是一个相对概念

  • 算法面试不是高考。

  • 把这个过程看作是和面试官一起探讨一个问题的解决方案。

  • 对于问题的细节和应用环境,可以和面试官沟通。

  • 这种沟通本身很重要,它暗示着你思考问题的方式。

例子

我们需要对一组数据进行排序

  • 设计排序接口,标准库的设计,业务中排序算法。

  • 排序是基础操作,很重要。

解决

快速排序算法:O(nlogn)

  • 忽略了算法使用的基础环境。要动态选择。

(向面试官提问):这组数据有什么样的特征?

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

  • 如果有这种可能的话,三路快排是更好地选择。

  • 普通数据:普通快速排序就行了;java语言标准库排序使用的三路快排。

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

  • 如果是这样的话,插入排序是更好地选择。

    • 按照业务发生顺序,先发生先完成,几乎有序,插入排序是更好的选择。

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

    • 如果是这样的话,计数排序是更好地选择。高考成绩取值范围有限:计数排序更好。

(向面试官提问):对排序有什么额外的要求?

  • 是否需要稳定排序?

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

(向面试官提问):数据的存储状况是怎样的?

  • 是否是使用链表存储的?

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

    • 快排依赖于数组的随机存取。

(向面试官提问):数据的存储状况是怎样的?

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

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

对一组数据进行排序小结

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

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

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

  • 是否需要稳定排序?

  • 是否是使用链表存储的?

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

什么是“正确”的回答一个算法问题

  • 正确除了你能把代码编出来运行出正确的结果。正确还包含对问题的独到见解;优化;代码规范;容错性;

    • 不仅仅是给出解决算法问题的代码,还要把上面因素包括。

    • 如果是非常难的问题,对你的竞争对手来说,也是难的。

  • 关键在于你所表达出的解决问题的思路。

  • 甚至通过表达解题思路的方向,得出结论:这个问题的解决方案,应该在哪一个领域,我可以通过查阅或者进一步学习解决问题。

算法面试只是面试的一部分

  • 算法面试只是技术面试的一部分。

  • 根据你的简历和应聘职位的不同,势必要考察其他技术方面。

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

    • 解决能力,是否参与

    • 深入思考

    • 技术态度

面试前梳理自己简历上所写到的项目:整理一下可能会问到的。

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

  • 面向对象

  • 设计模式

  • 网络相关;安全相关;内存相关;并发相关;…

  • 系统设计;scalability(大规模)

技术面试优秀不意味着能够拿到Offer

技术面试只是面试的一部分。面试不仅仅是考察你的技术水平,还是了解你的过去以及形成的思考行为方式。

  • 关于过去:参与项目至关重要

项目经历:

  • 工作人士

  • 研究生

  • 本科生

    • 毕业设计

    • 其他课程设计(大作业)

如何找到项目?

  • 实习

  • 创建自己的项目

    • 自己做小应用:计划表;备忘录;播放器…

    • 自己解决小问题:爬虫;数据分析;词频统计...

    • “不是项目”的项目:一本优秀的技术书籍的代码整理等…(github)

    • 分享:自己的技术博客;github等等

行为类问题

通过过去了解你的思考行为方式:

  • 遇到的最大的挑战?

  • 犯过的错误?

  • 遭遇的失败?

  • 最享受的工作内容?

  • 遇到冲突的处理方式?

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

具体阐述:我在某某项目中遇到一个怎样的算法问题:这个问题是怎样的。它是我遇到的最大的挑战,我是如何克服解决的。

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

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

  • 整个项目的后续规划是如何的?

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

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

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

算法面试仍然是非常重要的一部分

如何准备算法面试

准备面试和准备算法面试 是两个概念

  • 算法面试,只是面试中的一个环节。

  • 远远不需要啃完一本《算法导论》

    • 强调理论证明

    • 第一遍读不需要弄懂证明

    • 前几遍阅读应该记住结论就行了,不需要弄懂证明。把更多的精力放在算法思想上。

  • 针对算法面试,算法导论里面的理论推导和证明不是很重要的方面。

学习切记完美主义

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

  • 基础的概念要知道,但是不需要实现等更深入的层面。

  • 远远不需要到达信息学竞赛的水平

算法面试的准备范围

  • 不要轻视基础算法和数据结构,而只关注“有意思”的题目

  • 各种排序算法

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

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

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

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

例子

Intel的面试题:

初始序列为1 8 6 2 5 4 7 3的一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:( )

A. 8 3 2 5 1 6 4 7

B. 3 2 8 5 1 4 6 7

C. 3 8 2 5 1 6 7 4

D. 8 2 3 5 1 4 7 6

乐视的面试题:

对一个含有20个元素的有序数组做二分查找,数组起始下标为1,则查找A[2]的比较序列的下标为()

A. 9、5、4、2

B. 10、5、3、2

C. 9、6、2

D. 20、10、5、3、2

考查二分查找法。

阿里巴巴面试题

一组记录排序码为(5、11、7、2、3、17),则利用堆排序方法建立的初始堆为()

A. (11、5、7、2、3、17)

B. (11、5、7、2、17、3)

C. (17、11、7、2、3、5)

D. (17、11、7、5、3、2)

E. (17、7、11、3、5、2)

F. (17、7、11、3、2、5)

百度面试题

在图采用邻接表存储时,求最小生成树的Prim算法的时间复杂度为( )

  • O(n)

  • O(n+e)

  • O(n^2)

  • O(n^3)

重点关注

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

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

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

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

  • 不要选择过于偏向程序设计竞赛的OJ *面向竞赛难度过高

  • 选择合适的oj

  • leetcode

    • Online Portal for IT Interview

    • 真实的面试问题

    • www.leetcode.com

  • HackerRank

    • 特点是对于问题的分类很详细。偏难,不过可以对某一类细分问题解决。

    • www.hackerrank.com

注意

  • 在学习和实践做题之间,要掌握平衡

  • 基础算法实现与算法思想

如何回答算法面试问题

解决算法面试问题的整体思路

  • 注意题目中的条件

    • 给定一个有序数组...(二分法)

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

    • 设计一个O(nlogn)的算法(分治:在一颗搜索树中完成任务,对于数据排序)

    • 无需考虑额外的空间(用空间换时间上的优化)

    • 数据规模大概是10000(O(n^2)就可以)

当没有思路的时候

  • 自己给自己几个简单的测试用例,试验一下

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

例子

LeetCode 3 Longest Substring Without Repeating Characters

在一个字符串中寻找没有重复字母的最长子串 如”abcabcbb”,则结果为”abc” 如”bbbbb”,则结果为”b”

  • 对于字符串s的子串s[i...j]

  • 使用O(n^2)的算法遍历i,j,可以得到所有的子串s[i...j]

  • 使用O(length(s[i...j]))的算法判断s[i...j]中是否含有重复字母

  • 三重循环:复杂度O(n^3),对于n=100的数据,可行

优化算法

  • 遍历常见的算法思路

  • 遍历常见的数据结构

  • 空间和时间的交换 (哈希表)

  • 预处理信息(排序)

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

    • O(n^2)能否优化。

  • 什么样的问题使用什么样的思路和数据结构。

实际编写问题

  • 极端条件的判断

    • 数组为空?

    • 字符串为空?

    • 数量为0?

    • 指针为NULL?

  • 代码规范:

    • 变量名

    • 模块化

    • 复用性

算法与面试之-如何准备算法面试相关推荐

  1. java面试时候算法题多吗_java程序员面试中最容易被问到的18个算法题(附答案!)...

    作者:cpp软件架构狮 链接:https://www.toutiao.com/i6618515311836529156/ (点击阅读原文前去围观) 算法是比较复杂又基础的学科,每个学编程的人都会学习大 ...

  2. 阿里资深算法专家:如何突围大厂算法面试?

    2020 届秋招,算法岗灰飞烟灭. 最聪明的应届生 / 程序员 ,都在极度竞争中,面临着前所未有的激烈 PK . 学生因"内卷"而迷茫:初级程序员遇职业发展瓶颈而困惑...面对重重 ...

  3. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  4. 【每日一念经】算法岗面经,一万字面试经验你确定不看?

    微信改版,加星标不迷路! 算法岗面经,一万字面试经验你确定不看? 作者:CyC 前言 2018,有过迷茫,有过努力,也有很多收获.为了记录这一年以来的感受,于是有了这篇文章. Offer 情况 经过了 ...

  5. 编程面试的10大算法概念汇总

    编程面试的10大算法概念汇总 嘿,第一次翻译文章,在ProgramCreek看到的,原文章名为Top 10 Algorithms for Coding Interview, 对于我这个明年即将直奔BA ...

  6. Interview:算法岗位面试—10.25早上—上海某电公司算法岗位(偏图像算法,国企)技术面试之比赛历程、项目收获(Pytorch和Tensorflow)、未来方向

    Interview:算法岗位面试-10.25早上-上海某电公司算法岗位(偏图像算法,国企)技术面试之比赛历程.项目收获(Pytorch和Tensorflow).未来方向 导读:10.25早上一位博士技 ...

  7. Interview:算法岗位面试—10.15上午—上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴

    Interview:算法岗位面试-10.15上午-上海某公司算法岗位(偏图像算法,制造行业)技术面试考点之AI算法与实际场景结合产生商业价值的头脑风暴 导读:一心想去互联网,未必能够发挥自己最大价值, ...

  8. Interview:算法岗位面试—上海某公司算法岗位技术(偏机器学习,证券基金行业)面试考点之进程与线程区别、GD改进的算法、ROC和AUC

    Interview:算法岗位面试-上海某公司算法岗位技术(偏机器学习,证券基金行业)面试考点之进程与线程区别.GD改进的算法.ROC和AUC 导读:其实,考察的知识点,博主都做过,但是,emmm,这些 ...

  9. Interview:算法岗位面试—上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链的TPS等问题

    Interview:算法岗位面试-上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区Interview:算法岗位面试-上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链 ...

最新文章

  1. oracle 提示:ORA-02292:integrity constraint(xxxxxxx) violated - child record found
  2. 10冰点还原安装不了_荣耀智慧屏X1性能有多强?荣耀智慧屏X1怎么安装第三方软件?...
  3. 程序员都讨厌写文档?这4个工具让你事半功倍
  4. 分类模型的评估方法-召回率(Recall)
  5. JSF和“立即”属性–命令组件
  6. minitab怎么算西格玛水平_六西格玛黑带培训工具因子分析的使用
  7. 中芯国际:公司客户需求强劲 订单饱满
  8. C语言 如何计算结构体的大小
  9. Ubuntu系统安装vmwaretools时the path is not a valid path to the 3.13
  10. 智能优化算法:材料生成优化算法-附代码
  11. ae效果英文版翻译对照表_AE CS6 最全特效中英翻译
  12. 五个维度打造研发管理体系
  13. Android6.0风格图标,jQuery仿Android样式扁平风格图标插件
  14. 微信pc端window10多开应用
  15. mysql生成序列_mysql 自动生成编号函数
  16. 安装caffe遇到/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o):relocation R_X86_64_32S against
  17. ev4a ev6 ev8文件转换为mp4翻录教程
  18. 基于scrapy-redis的分布式腾讯新闻爬虫
  19. return -1是什么意思
  20. 关于安装Python过程中 无法访问Windows Installer服务问题解决

热门文章

  1. Spring Boot 参考指南(运行你的应用程序)
  2. 思科透露其“星舰”计划 旨在主导云服务器自动化领域
  3. HDU 3183 A Magic Lamp(RMQ问题, ST算法)
  4. 使用infinite-scroll实现Ghost博文列表的滚动加载
  5. 书评 - 《展望敏捷软件测试》
  6. 如何在Web页面上直接打开、编辑、创建Office文档 (转载)
  7. IL入门之旅(三)——Dump对象
  8. IT经理世界:专注莫如史玉柱
  9. 最优化问题的求解分类
  10. Python-OpenCV之图片缩放(cv2.resize)