前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面对算法面试,“不畏惧”

面对算法面试,“不畏惧”

作者头像
用户1212940
发布2022-04-13 15:17:24
1660
发布2022-04-13 15:17:24
举报
文章被收录于专栏:Lambda

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

因为面试中的算法问题,通常并不“复杂”,远远不需要啃完一本《算法导论》面对算法面试,不畏惧

如何轻松的解决算法面试呢?

  • 算法面试不代表一定“正确”的回答每一道算法问题,但是合理的思考方式其实很重要,也是正确完成算法面试的前提
  • 算法面试优秀不意味着技术方面优秀
  • 技术面试优秀不意味着能拿到Offer

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

首先算法面试目的不是给出一个“正确”的答案,而是要向面试官展示你解决问题的思路。“正确”本身就是一个相对的概念!

  • 算法面试不是考试
  • 把这个过程看作是和面试官一起探讨一个问题的解决方案
  • 对于问题的细节和应用环境,可以和面试官沟通,这种沟通本身很重要,它暗示了你的思考问题的方式。
  • 不要把自己当做解题的机器,一定记得调动你自身的积极性、热情。

比如面试官问你:“我们需要对一组数据进行排序” 我们该如何回答?

如果你只是说我考虑采用“快速排序”算法,它的时间复杂度 O(nlogn)相对于其它排序来说它的时间复杂度是最优的,所以我会选择它。

但是这种回答并不一定会让面试官满意,因为基于这个回答你只能让面试官只能看出来你确实会“快速排序算法”,可以你却忽略算法使用的具体环境,而在实际的项目中很多时候其实是有诸多正确的选择,而此时我们关注的不仅是“正确”,而更关注于更“优”。所以此时你就应该和面试官探讨,这组数据有什么特征?

一组数据进行排序,问题情况分析

  • 1. 说它是不是包含有大量的重复元素? 如果有这种可能的话,三路快排是更好的选择
  • 2. 如果可以肯定这组数据的所有元素都是独特的 使用普通的快速排序就可以了
  • 3.这组数据有什么样的特征? 是否大部分数据距离它正确的位置很近?是否近乎有序?

银行业务按照业务的发生时间进行排序,这样的数据大多数都是在业务完成是存入库,如果按照业务发展的顺序去看他的话,就是近乎有序的,只有少数业务晚于业务时间查询。 此时,插入排序是更好的选择

  • 4.数据取值范围是否有限?比如对学生成绩排序 这种情况,计数排序是更好的选择
  • 5.对排序有什么额外的要求?是否需要稳定的排序? 如果是的话,归并排序可能是更好的选择
  • 6.数据的存储结构是怎样的?是否使用链表存储? 如果是的话,快速排序就不适用了,而归并排序可能是更好的选择
  • 7.数据存储状态是怎样的?大小是否可以装载到内存里? 数据量很大,或者内存很小,不足以装载在内存里,需要使用外排序

在面试过程中如果遇到了非常难的问题,对于你的对手来时也是难的。

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

面试中经常被问到的问题点

  • 项目经历和项目中遇到的实际问题
  • 你遇到的印象最深的bug是什么?
  • 面向对象编程
  • 设计模式
  • 网络安全;安全相关;内存相关;并发相关 ...
  • 系统设计

所以在准备算法面试的同时,也不要忘记上面的点。

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

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

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

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

  • 整个小组的大概运行模式、工作模式是怎样的?
  • 如果后要做的这个项目后续的规划是怎么规划的?
  • 对于产品中的某个问题是如何解决的?比如,你们公司遇到分布式事务解决方案?
  • 参与项目用的技术?为什么选择某些技术?选择技术的标准? 比如,为什么选择用angluar,而不是vue?
  • 我对某项技术很感兴趣,在你的小组中我会有怎样的机会深入其中?

如何准备算法面试

这里再次强掉一点,算法面试和面试时两个概念。算法面试只是面试中的一个环节。

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

  • 各种排序算法
  • 基础数据结构和算法的实现:如堆、二叉树、图...
  • 基础数据结构的使用:如链表、栈、队列、哈希表、图、Trie、并查集..
  • 基础算法:深度优先、广度优先、二分查找、递归...
  • 基础算法思想:递归、分治、回溯搜索、贪心、动态规划...

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

  • 注意题目中的条件 比如,给定一个有序数组...
  • 有一些题目中的条件本质就是暗示: 比如,设计一个0(nlogn)的算法
  • 无需考虑额外的空间 就要考虑能不能开辟额外的空间,用额外的空间来换取时间优化。
  • 数据规模大概是1000 设计一个O(n2)的算法就可以,因为O(nlogn)是可以处理百万级数据的

当没有思路的时候

不要忽视暴力解法。暴力解法通常是思考的起点。 例子:在一个字符从中寻找没有重复字母的最长子串 如"abcabcbb",则结果为"abc" "bbbbb",则结果为 "b"

常用排序算法的时间复杂度

11464886-9e6e33d0ded46cd7.png
11464886-9e6e33d0ded46cd7.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/09/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何轻松的解决算法面试呢?
  • 什么是给出合理的思考路径
    • 一组数据进行排序,问题情况分析
      • 面试中经常被问到的问题点
        • 技术面试优秀不意味着能拿到Offer
          • 准备好合适的问题问面试官
          • 如何准备算法面试
            • 解决算法面试问题的整体思路
              • 当没有思路的时候
                • 常用排序算法的时间复杂度
                相关产品与服务
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档