V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yuanyao
V2EX  ›  职场话题

一面出 LRU 算法题算难吗

  •  
  •   yuanyao · 1 天前 via iPhone · 9617 次点击

    面了几个三年经验 bat 大厂的候选人都没做出来,是不是难度高了

    142 条回复    2025-02-22 07:51:01 +08:00
    1  2  
    ychost
        101
    ychost  
       1 天前
    不刷题还是难搞的,主要是白板写代码,平时工作也不会这么干
    hylqs
        102
    hylqs  
       1 天前
    @RadishWind 今年为什么这样,不应该更卷吗
    stnaw
        103
    stnaw  
       1 天前
    我猜你是上来就直接扔了个类似于 “怎么实现一个 LRU 算法”的问题 ? L R U 的猜单词游戏 哈哈哈
    Plutooo
        104
    Plutooo  
       1 天前
    @xz410236056 #47 一面就会问吗,那是我肤浅了
    Meld
        105
    Meld  
       1 天前
    很多人一看到算法就打怵就否认自己,其实 LRU 需求给的细一点安安静静一会儿就能写出来
    mooyo
        106
    mooyo  
       1 天前
    这都写不出来的,也别面了。
    mooyo
        107
    mooyo  
       1 天前
    leetcode + 系统设计就是新八股啊,有啥问题。不问这些,问你那一堆 CRUD 的项目有什么能问的,背诵 java boy 的祖传 20 年的 jvm 调参参数么? Copilot 背的不比你利索?
    JZen
        108
    JZen  
       1 天前
    我前几天去面试 Android ,让我手写(写在纸上)一些 Android 的功能实现,因为没有提前做面试准备,我完全写不出来,谁没事干会去背那些 SDK 方法名和参数名啊,又不是考研,真的离谱。
    我觉得更合适的是,给个场景,问我如何解决给出思路,或者让我上机写。
    以前面试过一家特别舒服的,老板也是程序员,他让我上机写代码,限定时间,可以随意上网,不允许用 AI 。
    crh3188
        109
    crh3188  
       1 天前
    2.7 年大厂经验(还在持续搬砖中),让我突然写出来,有点慌, 仔细思考下还是能写的。
    aug31xxx
        110
    aug31xxx  
       1 天前
    不难
    icyalala
        111
    icyalala  
       1 天前
    我也写过移动端 LRU Cache ,开源而且用得人很多
    但我现在没准备要我直接写,我不一定能写好。。。
    tohuer00
        112
    tohuer00  
       1 天前
    如果是三年前我找工作那会儿,简单。
    如果是现在,很难。

    所以这种问题的价值在哪?
    victorc
        113
    victorc  
       1 天前
    这个属于 leetcode 中等难度题,大厂招聘门槛题

    你说 BAT 候选人没有做出来,大概率是百度/阿里的,字节出来人没有问题


    过去 10 几年互联网大发展,吃了时代红利,很多人浑水摸鱼进来了,根本不认真练习技术

    未来 5 年内,ai 辅助编程会把这类程序员清空,大幅度压缩 初级中级程序员的工作岗位,未来会出现一个岗位,AI 编程驾驶员,工资 1 万出头,而名校计算机博士,起薪 200 万人民币

    我在二线城市,程序员水平太差了,面试只能降低要求,出 easy 难度题目,比如下面这题

    https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked

    给定一个数组 nums ,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。


    好多工作 10 来年的程序员花了 20 分钟都做不出来,不知道干什么吃的

    我发给我儿子做,一个小学 5 年级学生,才学了 3 个月 c++,1 分钟之内做出来
    pkoukk
        114
    pkoukk  
       1 天前
    @tohuer00 LRU 是个经典且常见的缓存设计啊,这种设计的思路是可以广泛应用在很多地方的。
    我觉得考 LRU 比考快排合理多了,一个完全没刷过算法题,但是好好做过项目的人,给提示和时间绝对写的出 LRU 。
    但是快排这种设计,没背过算法,有几个人想得出来?那么容易想的出来,就不会 1960 年才提出了
    yuanyao
        115
    yuanyao  
    OP
       1 天前
    @victorc 我想了几分钟才想出来,这种题和工作经验无关,考思维能力。
    Futuroscope
        116
    Futuroscope  
       1 天前 via Android
    我之前见大厂面试还喜欢让人手写 shared_ptr ,个人认为这个比 lru 简单一些。可能这已经变成大厂面试的门槛了?
    不过我更倾向于这跟工作要求有关。虽然我也是写业务,但是业务跟几何打交道,经常碰到类似装箱问题这种 np 问题,或者一些几何算法,或者一些很经典的算法场景例如 dp 。面试的话如果这些算法做不出来,最低需要展现一定的思考深度吧。
    NoString
        117
    NoString  
       1 天前
    我喜欢让候选人写 BFS 或者 DFS 这种,代码也不复杂,能说清楚递归思路也行,能看出来应对面试态度。如果是单出 LRU 我认为难度也适中,不是什么恶心题,涉及 01 背包/动态规划/贪心算法的相关问题其实就有点上强度了。突然让我写上面说的这些我都写不明白,但是如果是去心怡的公司面试,我应该会准备好,最起码不会太离谱。(刚毕业的时候面试到后面可以手写矩阵乘法/各类排序,最后一家公司写的是斐波那契数列递归、回文字符串,虽然现在换了四家公司,再也没遇到写编程题的场景了)
    RadishWind
        118
    RadishWind  
       1 天前
    @hylqs 不知道 可能和我从事的行业也有关系? 不是纯互联网了
    123zouwen
        119
    123zouwen  
       1 天前   ❤️ 1
    @yuanyao 我面试一般会先看项目经历, 考察基础知识. 再让面试者说说拿到一个需求后他的工作流程是怎么样的, 再结合几个业务上的问题, 大概就能了解这个人的真实水平 以及他有没有系统设计能力. 一个需求能不能放心的交给他,考虑问题是否全面, 是否有责任心, 靠不靠谱.

    虽然说大部分人都是 crud 但写代码跟写可维护的工程是不一样的. 现在大部分业务的代码有什么难度可言, 重要的是对待一个需求的态度是怎么样的, 有没有自己的想法, 别给后人挖坑.
    leon0918
        120
    leon0918  
       1 天前
    一般劝退的时候我会出这个,放水的就原地翻转链表
    zangbianxuegu
        121
    zangbianxuegu  
       1 天前
    三年经验有点过了
    szdev
        122
    szdev  
       1 天前
    国内卷八股就算了,还有拉上算法··
    Jinyang7
        123
    Jinyang7  
       1 天前
    没准备的话,确实写不出来
    wulili
        124
    wulili  
       1 天前
    很多人是不是不知道 LRU 是啥,这都没涉及到什么算法,完全是很直白的逻辑,比冒泡排序还简单的逻辑。
    runlongyao2
        125
    runlongyao2  
       1 天前
    好像不是很难
    runlongyao2
        126
    runlongyao2  
       1 天前
    算法对代码好看很有帮助
    tjfamtf
        127
    tjfamtf  
       1 天前
    看过一遍怎么写的,现在忘了
    lrvy
        128
    lrvy  
       1 天前
    巧了,我经常考 LRU || LFU ,作为算法基础题不算难,主要是考察思路和编码习惯,校招得要写出来,社招写不出来没啥,如果思路不对或一行代码都写不出就要 pass 。作为 RD ,校招会主要考察基础和算法编码,社招主要考察系统架构设计和项目规划,侧重不同。
    kinkin666
        129
    kinkin666  
       1 天前
    难是不难,但个人认为有的有工作经验的人写代码可能会考虑更多别的东西,会更倾向于使用现成的组件,会潜意识里会觉得有些地方会很棘手,从而不想写;

    比方说要一个 LRU Cache 无非就是要一个容量有限的缓存,那为什么不用 Guava 的 Cache ,为什么不用 EhCache ,为什么不用 Redis ,这些组件还有更多选项可以设置呢,还能自动过期呢;

    如果把#82 的代码的实现都删掉,告诉他能做到 O(1)最好,让人填空,相当于把鸭子赶到架子前面,不上也得上了,这种情况下可以看人实现或许更容易让更多人接受;

    如果就是想压力测试一个人,那就这么直接问也无可厚非
    lwlizhe
        130
    lwlizhe  
       1 天前
    那你提醒下呗,引导和提醒下还不会的,那是真不知道的,
    稍微背过或者接触过的,提醒和引导下估摸也写的差不多,原理又不难,这不一下子就区分开了
    zeroSummer
        131
    zeroSummer  
       1 天前
    这种题一点意义都没有,不准备的基本都搞不出来,准备的也是背出来的
    ahbicj
        132
    ahbicj  
       1 天前
    手搓的都是玩具,太多适应面试造轮子的人,在生产中喜欢自己搓轮子造成的故障了
    holdeer
        133
    holdeer  
       1 天前
    说说是怎么出的?
    mingdongshensen
        134
    mingdongshensen  
       1 天前
    如果人家恰好看过题进来了,该干的活不会,该如何应对
    me1onsoda
        135
    me1onsoda  
       1 天前
    对目标大厂的应届生是基操啦,他们没工作经历,只能卷基础,告诉你我很能卷,选我就对了。老油条没必要卷这个
    fengsi
        136
    fengsi  
       1 天前
    是力扣的那个 LRU 吗?那玩意真难吗?现在很多面试比他难得题目多了去了,另外居然还有人形容成 “背诵题”,我也是醉了,没见过的话第一次没写出来没关系。说到底这个不就是一个 map 加一个双向链表的事吗?我甚至觉得这个的难度,比我当初刚学链表时老师让下课思考的题目简单多了,毕竟当时有些个问题困扰许久,但这个 LRU ,说实话我第一次见他就感觉比较 easy ,很容易就是 map+链表,移动下链表完事,比反转链表都好写了觉得。当然我觉得他们压根不理解 LRU 。
    pippoflow
        137
    pippoflow  
       1 天前
    @victorc 这道题要做到最快,感觉还是需要很敏锐的嗅觉的。比如这两个提交的差别:

    class Solution {
    public static void moveZeroes(int[] nums) {
    int n = nums.length;
    int i = 0;
    for (int j = 0; j < n; j++) {
    if (nums[j] != 0) {
    int t = nums[i];
    nums[i] = nums[j];
    nums[j] = t;
    i++;
    }
    }
    }
    }

    class Solution {
    public void moveZeroes(int[] nums) {
    int i = 0;
    int j = 0;
    while(i < nums.length) {
    if (nums[i] == 0) {
    while (j < nums.length && nums[j] == 0) {
    j++;
    }
    if (j == nums.length) {
    break;
    }
    nums[i] = nums[j];
    nums[j] = 0;
    }
    i++;
    j++;
    }
    }
    }
    fengsi
        138
    fengsi  
       1 天前
    @matrix1010 是的,跟刷题没关系,题目要求一看就要能想到双向链表+哈希表,剩下的就是移动链表的事了,也没晒奇怪的,写不出来绝对是不达标的
    panbeta
        139
    panbeta  
       1 天前
    如果候选人没准备过这题,也不能说明候选人不行。
    恰恰好这是考察候选人编码实力的最佳时机。
    作为面试官你可以从 LRU 的概念开始,给出提示,然后看候选人思考的广度和深度。
    toma77
        140
    toma77  
       1 天前 via iPhone
    @zy445566 #16 你认识乐哥吗
    yuanyao
        141
    yuanyao  
    OP
       20 小时 4 分钟前 via iPhone
    @holdeer 就直接给 leetcode 那个原题,写之前会让说下实现思路,想不出来的一直给提示
    dingyaguang117
        142
    dingyaguang117  
       19 小时 50 分钟前
    如果直接告诉是 Hash 加链表,让实现。感觉没毛病
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   948 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:41 · PVG 03:41 · LAX 11:41 · JFK 14:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.