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

一面出 LRU 算法题算难吗

  •  
  •   yuanyao · 32 天前 via iPhone · 11376 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    如果就是想压力测试一个人,那就这么直接问也无可厚非
    lwlizhe
        130
    lwlizhe  
       32 天前
    那你提醒下呗,引导和提醒下还不会的,那是真不知道的,
    稍微背过或者接触过的,提醒和引导下估摸也写的差不多,原理又不难,这不一下子就区分开了
    zeroSummer
        131
    zeroSummer  
       32 天前
    这种题一点意义都没有,不准备的基本都搞不出来,准备的也是背出来的
    ahbicj
        132
    ahbicj  
       32 天前
    手搓的都是玩具,太多适应面试造轮子的人,在生产中喜欢自己搓轮子造成的故障了
    holdeer
        133
    holdeer  
       32 天前
    说说是怎么出的?
    mingdongshensen
        134
    mingdongshensen  
       32 天前
    如果人家恰好看过题进来了,该干的活不会,该如何应对
    me1onsoda
        135
    me1onsoda  
       32 天前
    对目标大厂的应届生是基操啦,他们没工作经历,只能卷基础,告诉你我很能卷,选我就对了。老油条没必要卷这个
    fengsi
        136
    fengsi  
       32 天前
    是力扣的那个 LRU 吗?那玩意真难吗?现在很多面试比他难得题目多了去了,另外居然还有人形容成 “背诵题”,我也是醉了,没见过的话第一次没写出来没关系。说到底这个不就是一个 map 加一个双向链表的事吗?我甚至觉得这个的难度,比我当初刚学链表时老师让下课思考的题目简单多了,毕竟当时有些个问题困扰许久,但这个 LRU ,说实话我第一次见他就感觉比较 easy ,很容易就是 map+链表,移动下链表完事,比反转链表都好写了觉得。当然我觉得他们压根不理解 LRU 。
    pippoflow
        137
    pippoflow  
       32 天前
    @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  
       32 天前
    @matrix1010 是的,跟刷题没关系,题目要求一看就要能想到双向链表+哈希表,剩下的就是移动链表的事了,也没晒奇怪的,写不出来绝对是不达标的
    panbeta
        139
    panbeta  
       32 天前
    如果候选人没准备过这题,也不能说明候选人不行。
    恰恰好这是考察候选人编码实力的最佳时机。
    作为面试官你可以从 LRU 的概念开始,给出提示,然后看候选人思考的广度和深度。
    toma77
        140
    toma77  
       32 天前 via iPhone
    @zy445566 #16 你认识乐哥吗
    yuanyao
        141
    yuanyao  
    OP
       31 天前 via iPhone
    @holdeer 就直接给 leetcode 那个原题,写之前会让说下实现思路,想不出来的一直给提示
    dingyaguang117
        142
    dingyaguang117  
       31 天前
    如果直接告诉是 Hash 加链表,让实现。感觉没毛病
    victorc
        143
    victorc  
       29 天前
    @pippoflow 我儿子,5 年级小学生的写的答案

    void move_zones(std::vector<int> &nums)
    {

    auto it = std::remove(nums.begin(),nums.end(),0);
    std::fill(it,nums.end(),0);
    return;
    }
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:23 · PVG 04:23 · LAX 13:23 · JFK 16:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.