👨‍💻面试官:工作两年了,这么简单的算法题你都不会?

简介: 工友们,看到题目,先别愤怒,第一小节,咱们先铺垫讲一个 “面试问题应该从问【是什么】到问【为什么】” 的逻辑。

工友们,看到题目,先别愤怒,第一小节,咱们先铺垫讲一个 “面试问题应该从问【是什么】到问【为什么】” 的逻辑。


image.png

🤔面试问题从【是什么】到【为什么】



关于前端是否有必要面试算法,本瓜看过很多争论,相信你也一样听过不少,诸如此类:


正方:


“工作中又用不到,有必要吗?”、“一般后端都会把数据格式处理好”、“算法跟面试背八股文一样,不能测出真实能力”。。。


反方:


“面试内卷,拉开层次,算法必会”、“数据结构和算法是程序员的基本功”、“处理复杂场景,算法思维能提供更大帮助”。。。


这里不去谈论两类阵营的观点孰对与错,而想分享一位大佬的经验,从另外一个角度看待这个问题:


原话:


面试应该搞清楚【为什么】,而不是停留在【是什么】。

image.png


什么意思?


如果面试官问你某一个问题,你没答出来,他就以此判定你“不合格”,那这位面试官也是“不合格”的。判定应试者不知道某一个问题,属于【是什么】(是不是知道?);合格的面试官、应该深挖一步,追问【为什么】(为什么不知道?)。是因为平常没有遇到过这样的类似场景吗?还是因为采用的是其它技术手段或方案?或者因为更擅长别的点?。。。如果现在遇到了,会怎么去考虑呢。。。


每个人的经历、经验不一样,结合分析问应试者【为什么】,顺着一个思路问下去,进行更深入、有效的交流,能更好的去匹配职位需求。


那么,再看“前端是否该面试算法”问题,用这个逻辑来想想。


  • 不知道数据结构堆、栈、BFS、DFS 这些。 —— 为什么不知道?因为非科班出身,半路转岗?因为平常都在专注业务开发,对业务理解更透彻,数据结构这些都忘了?
  • 递归算法写不出来 —— 为什么写不出?因为平常写的少、对递归不熟悉?还是因为对面试题的理解、过程抽象有问题?
  • LRU、LFU 缓存算法没听过 —— 为什么没听过?vue keep-alive 缓存组件的策略了解过吗?是因为平常对 http 缓存或 dns 缓存关注更多吗?

......


一场好的面试一定是应试者和面试官双方都在吸收、成长。

(小技巧:下一次,如果遇到面试官直白的问:你会写 XX 算法吗?而刚好你听都没听过,不用紧张,你可以沉着、冷静、平和的反问:我之前工作中没接触过这个算法,单纯好奇啊哈哈,我想问下您这个算法在前端都有哪些应用场景?)


🤬“工作两年,这么简单的算法题都不会?”



好了,有了第一小节的铺垫,我们再来看本文标题。(这句话来自于 fatfish 的一位朋友最近经历的一场面试中面试官说的。传送门:medium


听完后,作为应试者,几乎可以愤怒回怼这个面试官:我不会怎么了呢?工作不照样好好的?两年怎么了?吃你家一粒米了吗?你了解我的经历吗?我出套八股文面试题,你敢来面吗?想不通,去一边自己慢慢想去吧~~

......


理性一点思考:这位面试官不懂问【是什么】到问【为什么】的面试逻辑,估计他准备的题目也是挺随意的吧,或者一直局限于自己的一点眼界。


也属实没必要跟这号人打嘴仗了,纠缠不休,嘴贱自有天收。(这么没礼貌的面试官即使存在,应该也是少数)不如咱心态好一点,坚持自己的逻辑:从面试经历中吸收、成长就好。


技术题目无罪,不要让不好的面试体验干涉到技术学习上来。


有些算法题,想想也挺有意思~ 用平静的心态一起来看看这位两年经验老哥遇到的什么题?上题!

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

例1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
例2:
输入: nums = [3,2,4], target = 6
输出: [1,2]
例3:
输入: nums = [3,3], target = 6
输出: [0,1]


噢!刷过力扣的 xdm 应该都知道了,此题典中典,题库第一题 (就像英语四级的 abandon) —— 两数之和。


江湖上还流传过【不知两数和,刷尽力扣也枉然】的言论;看评论,这题甚至还难倒过某博士生老哥🐶 哈哈哈,其特殊可见一斑!


image.png


刷过此题的都知道:这题考察的不是双层 for 循环暴力解题,而是转换思路,用 map,减少使用一层 for 循环,降低时间复杂度解题;


所以面试官看似问你怎么解题,实则留了一手,要问你:怎么优化暴力解法?

如果之前又恰好没有看过、学习过这类转换思路,在面试的情况下,短时间有可能真的就想不起来。


解一:双层 for 循环暴力解法


const twoSum = (nums, target) => {
  const len = nums.length
  for (let i = 0; i < len; i++) {
    // 因为同一元素不允许重复出现,所以从i的下一位开始遍历
    for (let j = i + 1; j < len ; j++) {
      // find the answer, return
      if (nums[ i] + nums[ j ] === target) {
        return [ i, j ]
      }
    }
  }
}


解二:利用 map 解,降低时间复杂度


var twoSum = function(nums, target) {
    const map = new Map();
    for(let i = 0, len = nums.length;i < len;i++) {
    // 一层遍历,用 target 减去每一项,在 map 的 key 中寻找
        if(map.has(target - nums[i])) {
        // 存在则返回结果
            return [map.get(target - nums[i]), i];
        }
        // 不存在,则设置 map key 和 val
        map.set(nums[i], i);
    }
    return [];
};


这位两年经验老哥就是这样,回答出来了第一种解法,在第二种解法折戟。

image.png

无奈,面试官总想要的更多......


其实也不止这题,很多面试算法题都是这样,暴力解法只是整个问题的第 1 小问,关键是第 2 小问怎么转换思路、优化暴力解法,减少时间/空间复杂度。

无独有偶,这让我想起:当本瓜还是前端二年级生的时候,就在某次大厂面试中遇到过和这个非常类似的算法面试题,以前的文章提到过-剑指 Offer II 016. 不含重复字符的最长子字符串,后来我才知道这题优化双层 for 循环暴力解法思路 —— 滑动窗口,当时是真的一点不知道。


好在,那位面试官没有说:“这都不会?” 不然直接自闭。

image.png


小结一两句:


愿技术大牛、老大哥们,对新人多一点善意吧。不是谁都是高校计算机科班出身、有大厂实习经验、或遇到贵人指出职业规划、学习重点等等。


我就见过也还不少吧,学材料的、学金融的、甚至学雕塑的,转投互联网行业,学技术、做开发。没有计算机基础,没看过数据结构的书。有家庭需要去支撑、有在大城市打拼站住脚的想法;没有孰好孰坏,大家经历不一样、阶段不一样而已。


前端面算法,可以,说出个条条道道,通过一场面试,能帮助应试者能成长,也是帮自己成长吧。找工作而已,说难听的话,没必要。

image.png

OK,以上便是本篇分享。点赞关注评论,为好文助力👍

我是掘金安东尼 🤠 100 万人气前端技术博主 💥 INFP 写作人格坚持 1000 日更文 ✍ 关注我,安东尼陪你一起度过漫长编程岁月 🌏



相关文章
|
7月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
7月前
|
算法 Go
[go 面试] 雪花算法与分布式ID生成
[go 面试] 雪花算法与分布式ID生成
|
5月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
5月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
5月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
201 2
|
6月前
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。
|
7月前
|
消息中间件 存储 算法
这些年背过的面试题——实战算法篇
本文是技术人面试系列实战算法篇,面试中关于实战算法都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
7月前
|
JavaScript 算法 索引
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
这篇文章深入分析了Vue中的diff算法,解释了其在新旧虚拟DOM节点比较中的工作机制,包括同层节点比较、循环向中间收拢的策略,并通过实例演示了diff算法的执行过程,同时提供了源码层面的解析,说明了当数据变化时,如何通过Watcher触发patch函数来更新DOM。
【Vue面试题二十三】、你了解vue的diff算法吗?说说看
|
7月前
|
算法
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
|
7月前
|
机器学习/深度学习 算法 数据中心
【机器学习】面试问答:PCA算法介绍?PCA算法过程?PCA为什么要中心化处理?PCA为什么要做正交变化?PCA与线性判别分析LDA降维的区别?
本文介绍了主成分分析(PCA)算法,包括PCA的基本概念、算法过程、中心化处理的必要性、正交变换的目的,以及PCA与线性判别分析(LDA)在降维上的区别。
156 4

热门文章

最新文章