最近负责 Java 面试,吐槽下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
monkeyWie
0.65D
V2EX    程序员

最近负责 Java 面试,吐槽下

  •  2
     
  •   monkeyWie
    monkeyWie 2022-06-24 16:18:21 +08:00 17396 次点击
    这是一个创建于 1205 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出了个编程题作为第一题,题目很简单就是一个列表找最大值:

    var list = List.of(5, 23, 6, 112, 44, 33, 31); // 找出 list 中的最大值并输出 

    但是没想到这么多人卡在这题上了,讲道理这题如果在 leecode 上应该是 very easy 的难度吧,各位 v 友们觉得呢,是题目太难了还是面试的人太水了?

    第 1 条附言    2022-06-24 18:34:20 +08:00
    补充下,别再纠结 var 了,java10 就有局部变量类型推导了
    183 条回复    2025-01-23 10:10:01 +08:00
    1  2  
    xx6412223
        1
    xx6412223  
       2022-06-24 16:21:04 +08:00   25
    太简单了,他们以为有诈
    ifdef
        2
    ifdef  
       2022-06-24 16:22:13 +08:00
    这个 Collections.sort 不就可以了
    lu5je0
        3
    lu5je0  
       2022-06-24 16:23:58 +08:00   11
    @ifdef 你这一 sort ,面试不就凉了
    murmur
        4
    murmur  
       2022-06-24 16:24:24 +08:00
    我也觉得有诈,for 一次就搞定的题,为啥拿来做面试题

    另外,为啥要 sort 啊,有说要输出有几个最大值么
    lihahahayang
        5
    lihahahayang  
       2022-06-24 16:25:00 +08:00
    手写排序?
    offswitch
        6
    offswitch  
       2022-06-24 16:25:21 +08:00
    那就别考 leetcode ,这不就行了。
    jesson
        7
    jesson  
       2022-06-24 16:25:29 +08:00
    大佬还招人吗?这题我会做
    monkeyWie
        8
    monkeyWie  
    OP
       2022-06-24 16:26:06 +08:00
    @murmur 真不是有诈,一个 for 循环的事,真就很多人写不出来
    ryanbuu
        9
    ryanbuu  
       2022-06-24 16:26:31 +08:00
    认真的……base 北京的话还招人吗
    Mithril
        10
    Mithril  
       2022-06-24 16:26:34 +08:00   8
    现在有很多这种,说起框架八股文一套一套的,面经背的滚瓜烂熟。
    让他们写个第一门编程课的课后题都写不出来。
    就不用说什么遍历二叉树链表这种稍微涉及点数据结构的,就连递归算个斐波那契都不一定写得出来,甚至一个最简单的双层循环打印菱形的题都能卡出去一大半人。
    你都不知道这些精通大数据高并发深入了解 JVM 的人才到底写没写过代码。
    ifdef
        11
    ifdef  
       2022-06-24 16:27:41 +08:00
    看错了,以为排序,那就 max ?
    nicegoing
        12
    nicegoing  
       2022-06-24 16:27:44 +08:00 via iPhone
    这不就是个 for 循环吗?难道要分成两半,再查找
    monkeyWie
        13
    monkeyWie  
    OP
       2022-06-24 16:27:45 +08:00
    @Mithril 对对对,就是前面面的太多都是背八股文的,人人都会,我就想着搞点编程题吧,别光说不练啊是吧
    jtping
        14
    jtping  
       2022-06-24 16:28:19 +08:00
    我第一反应也是有诈 有点容易过头了
    shakaraka
        15
    shakaraka  
    PRO
       2022-06-24 16:28:49 +08:00   7
    最大:[5, 23, 6, 112, 44, 33, 31].reduce((a, b) => a > b ? a : b) // 112

    最小:[5, 23, 6, 112, 44, 33, 31].reduce((a, b) => a < b ? a : b) // 5
    Renco
        16
    Renco  
       2022-06-24 16:29:47 +08:00
    直接给一个手写四种 排序方法的题试试
    ifdef
        17
    ifdef  
       2022-06-24 16:29:48 +08:00
    java 哪来的 reduce
    @wunonglin #15
    isno
        18
    isno  
       2022-06-24 16:30:05 +08:00
    Collections.max(list)

    op 我过了么?
    shakaraka
        19
    shakaraka  
    PRO
       2022-06-24 16:30:51 +08:00
    @ifdef #17 用 js 举例而已
    monkeyWie
        20
    monkeyWie  
    OP
       2022-06-24 16:32:04 +08:00
    @isno 那肯定不行啊,用 for 循环实现才过关
    monkeyWie
        21
    monkeyWie  
    OP
       2022-06-24 16:32:30 +08:00
    @q1angch0u 在深圳哦
    cpstar
        22
    cpstar  
       2022-06-24 16:33:24 +08:00
    这到底是 JAVA 还是 Javascript ?为啥我看到了 VAR ?
    sheeta
        23
    sheeta  
       2022-06-24 16:34:48 +08:00   1
    @ifdef 你好,有的。list.stream().reduce((a, b) -> a < b ? a : b).get()
    ryanbuu
        24
    ryanbuu  
       2022-06-24 16:35:17 +08:00
    @cpstar jdk10 支持了 var……
    jesson
        25
    jesson  
       2022-06-24 16:35:28 +08:00
    @monkeyWie 大佬 我在深圳,真的在找工作,求 JD
    ifdef
        26
    ifdef  
       2022-06-24 16:35:39 +08:00   1
    @sheeta #23 好了,你面试挂了,op 要用 for 实现
    cpstar
        27
    cpstar  
       2022-06-24 16:36:28 +08:00   1
    好吧,我还活在 java 1.8 呢,各位聊好
    Wanex
        28
    Wanex  
       2022-06-24 16:36:43 +08:00
    @wunonglin 最大最小不直接 Math.Max(...list)完事了,还搁这花里胡哨
    ryanbuu
        29
    ryanbuu  
       2022-06-24 16:36:57 +08:00
    一波炸出来了很多 jdk8 的用户哈哈哈哈
    rabbbit
        30
    rabbbit  
       2022-06-24 16:39:32 +08:00
    List<Integer> integers = Arrays.asList(5, 23, 6, 112, 44, 33, 31);
    int maxNum = integers.stream().reduce(0, (max, num) -> max > num ? max : num);
    System.out.println(maxNum);
    NeroKamin
        31
    NeroKamin  
       2022-06-24 16:43:03 +08:00
    哈哈哈估计是太简单了怀疑有诈?
    monkeyWie
        32
    monkeyWie  
    OP
       2022-06-24 16:43:07 +08:00
    @jesson 只招初、中级哦,你考虑吗
    MatthewHan
        33
    MatthewHan  
       2022-06-24 16:46:52 +08:00
    int max = 0xC0C0C0C0;
    MoYi123
        34
    MoYi123  
       2022-06-24 16:47:32 +08:00
    @rabbbit list 是[-1,-2]的时候错了.
    bookbox
        35
    bookbox  
       2022-06-24 16:49:12 +08:00
    哈哈,有点儿东西呀 防欺诈人人有责
    moioooo
        36
    moioooo  
       2022-06-24 16:50:34 +08:00
    不考虑优雅和高端、性能的话。直接 for 就行呀。
    lllllliiii
        37
    lllllliiii  
       2022-06-24 16:53:53 +08:00
    还招吗,老哥邮箱多少
    bruce0
        38
    bruce0  
       2022-06-24 16:54:15 +08:00
    你这个启发我了 以后面试可以别只问八股文了, 直接让他写段代码试试, 别光嘴上说的天花乱坠, 给他键盘, 一行代码写不出来. 听我同事说, 以前我们公司面一个人, 不是特别想要他(各种综合原因吧, 但是缺人) 后来经理说, 让他写个冒泡排序, 能写出了就要他, 那个人就是没写出来, 我感觉这个写冒泡 应该是给他机会了 0.0
    Jooooooooo
        39
    Jooooooooo  
       2022-06-24 16:55:07 +08:00
    sort 解法是什么鬼...
    golangLover
        40
    golangLover  
       2022-06-24 16:55:41 +08:00 via Android   1
    list.stream().max(Comparator:comparing(Integer:valueOf)).orElse(0)
    Timefly
        41
    Timefly  
       2022-06-24 16:58:18 +08:00
    你要是问第 k 大得数可能别人还会, 最大的没刷过,不会 , hhh
    ifdef
        42
    ifdef  
       2022-06-24 16:58:48 +08:00
    看到上面帖子,突然发现我也不会写冒泡。只想一脸崇拜花痴地看着会写冒泡的哥哥疯狂输出代码
    cassyfar
        43
    cassyfar  
       2022-06-24 17:00:19 +08:00   37
    System.out.println(112)
    monkeyWie
        44
    monkeyWie  
    OP
       2022-06-24 17:00:50 +08:00
    @bruce0 冒泡比这个难多了,这个只要有点逻辑思维应该就能推出来的啊,冒泡很多人也是背模板
    nicegoing
        45
    nicegoing  
       2022-06-24 17:04:25 +08:00 via iPhone
    @cassyfar System.out.println(112) 这个神了,哈哈
    bruce0
        46
    bruce0  
       2022-06-24 17:06:04 +08:00
    @monkeyWie 确实冒泡比这个要难多了, 这个一个 for 循环就出来, 冒泡只是举个栗子嘛, 也是想看一下他的代码基本功. 忽然又想起一个我司的事情, 我大哥面一个 C++, 让面试的写一个 map 的遍历, 也是没写出来, 我大哥直接不想面他了
        47
    eghao  
       2022-06-24 17:06:51 +08:00
    @rabbbit list.stream().max(Integer::compareTo).get()
    eghao
    aitaii
        48
    aitaii  
       2022-06-24 17:09:15 +08:00
    冒泡排序,二分查找 随便一个应该过了,for 循环可能觉得有诈
    teemobighero
        49
    teemobighero  
       2022-06-24 17:09:37 +08:00
    List < Long > lOngList= new ArrayList < > ();
    longList.add(1L);
    longList.add(2L);
    longList.add(3L);
    Long max = longList.stream().max(Long::compareTo).get();
    System.out.println(max);
    dqzcwxb
        50
    dqzcwxb  
       2022-06-24 17:10:40 +08:00

    这种都写不出来的话,应该是不知道 var 是什么要不然随便 for 就写出来
    hay0577
        51
    hay0577  
       2022-06-24 17:11:45 +08:00
    @monkeyWie 为什么一定要用 for 循环啊?
    我这样 应该也能过了吧
    Stream.of(5, 23, 6, 112, 44, 33, 31).max(Integer::compareTo).get()
    daimubai
        52
    daimubai  
       2022-06-24 17:17:58 +08:00
    Integer max = 0;
    for (Integer i : list) {
    if (i > max) {
    max = i;
    }
    }
    System.out.println("max = " + max);

    楼主是想要这种?
    monkeyWie
        53
    monkeyWie  
    OP
       2022-06-24 17:18:09 +08:00
    @hay313955795 可以过,但是我还是会要求用 for 写一遍
    monkeyWie
        54
    monkeyWie  
    OP
       2022-06-24 17:18:30 +08:00
    @daimubai 对 就这么简单
    NeezerGu
        55
    NeezerGu  
       2022-06-24 17:18:44 +08:00
    @monkeyWie
    出了个编程题作为第一题,题目很简单就是一个列表找最大值:

    var list = List.of(5, 23, 6, 112, 44, 33, 31);
    // 找出 list 中的最大值并输出
    但是没想到这么多人卡在这题上了,讲道理这题如果在 leecode 上应该是 very easy 的难度吧,各位 v 友们觉得呢,是题目太难了还是面试的人太水了?

    ---

    那肯定不行啊,用 for 循环实现才过关

    ---

    非杠,好奇问问,全文没说必须用 for ,为啥 for 循环才过关? 这。。。真不算有诈吗?
    hay0577
        56
    hay0577  
       2022-06-24 17:20:34 +08:00
    @monkeyWie 那我什么时候去你那边上班..哈哈哈
    ifdef
        57
    ifdef  
       2022-06-24 17:20:54 +08:00
    @daimubai #52 这个不对吧,应该是 int max 。Integer 是会自动 unboxing 的,你这样打印出来是 object ?
    daimubai
        58
    daimubai  
       2022-06-24 17:22:37 +08:00
    @ifdef 初始化 0 了
    xiangyuecn
        59
    xiangyuecn  
       2022-06-24 17:22:57 +08:00
    应该是都学了 stream 吧,一下子还真不知道怎么写。。。

    另:stream 真丑,如果需要链式调用,我宁愿自己封装。
    NoNewWorld
        60
    NoNewWorld  
       2022-06-24 17:23:13 +08:00
    我面试就是这样,除了项目八股文,还会找几个 leetcode 的 easy 题让面试者选一个写下,看下功底,毕竟 easy 题大部分都会
    cheng6563
        61
    cheng6563  
       2022-06-24 17:23:59 +08:00
    我问个 int 占几字节都能筛掉大半
    monkeyWie
        62
    monkeyWie  
    OP
       2022-06-24 17:24:40 +08:00
    @NeezerGu 我觉得能不依赖类库实现才是最满足我的期望啊,就像写快排一样直接调用 sort()也出来了结果,但那有什么意义呢
    zapper
        63
    zapper  
       2022-06-24 17:24:53 +08:00   1
    System.out.print("112");
    glaucus
        64
    glaucus  
       2022-06-24 17:28:57 +08:00
    @ifdef #56 Integer 有重写 toString 吧
    Mika43
        65
    Mika43  
       2022-06-24 17:29:05 +08:00 via Android
    不难,无非就是学校程序设计基础的题
    huihuiHK
        66
    huihuiHK  
       2022-06-24 17:32:33 +08:00
    这题我会,公司还招人吗?哈哈
    ifdef
        67
    ifdef  
       2022-06-24 17:32:36 +08:00
    @glaucus #64 我试了一下,真的有哎,哇,哥哥好棒棒,好厉害
    winglight2016
        68
    winglight2016  
       2022-06-24 17:36:42 +08:00
    @monkeyWie #61 虽然我能理解”不依赖类库“能写出来有意义,但是,你的题目也没提不能用现成的类库呀?说是有诈,不为过了。
    Salticey
        69
    Salticey  
       2022-06-24 17:38:19 +08:00 via Android
    @sheeta 这不是找最小的么
    facelezz
        70
    facelezz  
       2022-06-24 17:38:49 +08:00
    好强的既视感,感觉以前见过这个帖子
    vainl1
        71
    vainl1  
       2022-06-24 17:41:32 +08:00
    @daimubai 如果列表中全部为负数,这个代码就得不到正确结果了。求最大最小值,使用循环,应该使用列表的第一个值来初始化。
    NeezerGu
        72
    NeezerGu  
       2022-06-24 17:41:34 +08:00   4
    @monkeyWie 那我有个疑惑哈。。。 记得快排,和不记得快排的程序员,在实力上有差别吗?
    或者应该这样问,快排是否能体现一个程序员的实力呢?

    真的非杠,作为非程序员,我个人会觉得这玩意记不记得好像真的没区别啊。。。拿到一个需求,如果需要排序或者需要最大值,不都是 sorts 和 max 吗?
    BrookO
        73
    BrookO  
       2022-06-24 17:43:37 +08:00
    list.stream().reduce(Integer.MIN_VALUE, Math::max);
    BrookO
        74
    BrookO  
       2022-06-24 17:45:13 +08:00
    说实话,确实简单到容易让人多想
    AlisaDestiny
        75
    AlisaDestiny  
       2022-06-24 17:45:37 +08:00
    不是,你这招的几年 Java 的啊,这都写不出来,这刚编程入门一个月的也能写出来了。
    kongkongyzt
        76
    kongkongyzt  
      &bsp;2022-06-24 17:49:52 +08:00
    话说第一眼看上去还以为有诈........
    lianjun1991
        77
    lianjun1991  
       2022-06-24 17:51:28 +08:00
    首先从小到大排序,然后用 for 循环取出 n-1 ,就是最大值
    28Sv0ngQfIE7Yloe
        78
    28Sv0ngQfIE7Yloe  
       2022-06-24 17:55:11 +08:00
    难道是看到 var 愣住了?
    none
        79
    none  
       2022-06-24 17:55:14 +08:00
    几年没写 java 了,都已经可以 var 声明变量了啊。。。
    zero47
        80
    zero47  
       2022-06-24 17:55:42 +08:00
    @daimubai 不能初始化 0 吧,应该判空列表,取列表第一个初始化。
    LeetCode 经验( doge )
    Suddoo
        81
    Suddoo  
       2022-06-24 17:56:49 +08:00 via iPhone
    哈哈,这比背八股文有意思多了

    开口底层原理、框架内核、JVM 调得炉火纯青,结果送分题不会写,一看就是没怎么做过项目的
    misaka19000
        82
    misaka19000  
       2022-06-24 17:58:21 +08:00
    一个冒泡就行了
    quanjw
        83
    quanjw  
       2022-06-24 17:59:52 +08:00
    如果最大值有多个呢
    ifdef
        84
    ifdef  
       2022-06-24 18:00:01 +08:00 via Android
    var max = 112
    System.out.print(max)
    monkeyWie
        85
    monkeyWie  
    OP
       2022-06-24 18:00:05 +08:00
    @NeezerGu 我个人觉得吧,那些复杂的算法写不写的出都无所谓,能理解大概的原理就行,有点偏题了啊,其实这道题就是考察简单的逻辑思维能力吧,这题目都做不出,以后业务中出现点稍微复杂的逻辑问题那不是也够呛
    hjwcn
        86
    hjwcn  
       2022-06-24 18:00:20 +08:00   1
    @daimubai 不严谨,要是全部小于 0 呢,初始话,应该是列表第一个
    misaka19000
        87
    misaka19000  
       2022-06-24 18:00:36 +08:00
    楼上居然还有那么多人说要排序。。。这题不需要排序
    Mithril
        88
    Mithril  
       2022-06-24 18:01:05 +08:00
    @NeezerGu 区别很大。
    快排,或者说大多数算法,虽说是用来解决某些特定问题的,但实际上提供的是解决类似问题的思路。
    比如说有个列表里面有一堆商品,让你找出其中最便宜的 5 个。
    如果这列表不长还好说,如果有数量非常多的话,你还先排序吗?
    lllllliiii
        89
    lllllliiii  
       2022-06-24 18:01:11 +08:00
    @misaka19000

    这个不需要冒泡,只用一个 for 。。。
    int max = Integer.MIN_VALUE;
    for (final Integer i : list) {
    if (i > max) {
    max = i;
    }
    }
    Leviathann
        90
    Leviathann  
       2022-06-24 18:01:18 +08:00
    理解 reduce 的比只会 for 的更会 编程 一些
    monkeyWie
        91
    monkeyWie  
    OP
       2022-06-24 18:01:30 +08:00
    @AlisaDestiny 不是,我也以为这题应该是都会做啊,不然怎么放在第一题,但是来的都是 3-4 年工作经验的都写不出
    arvinsilm
        92
    arvinsilm  
       2022-06-24 18:02:25 +08:00
    @daimubai 没有考虑 List 都是负数的情况,pass ( doge
    misaka19000
        93
    misaka19000  
       2022-06-24 18:04:06 +08:00
    @fzdwx #88 嗯,你说的这个就是我说的冒泡啊,不断的把最大的值往后移,是不是就像水里的泡泡一样,你写的其实和我说的是同一个意思

    冒泡排序的前半部分用的就是这个思想,所以我管这个叫冒泡
    misaka19000
        94
    misaka19000  
       2022-06-24 18:04:57 +08:00
    @fzdwx #88 你这个还可以优化,把第一个值设置为 max ,可以减少一次循环
    lllllliiii
        95
    lllllliiii  
       2022-06-24 18:05:16 +08:00
    lllllliiii
        96
    lllllliiii  
       2022-06-24 18:05:30 +08:00
    @misaka19000 #94 开始卷了
    NeezerGu
        97
    NeezerGu  
       2022-06-24 18:08:13 +08:00
    @monkeyWie 这倒是,毕竟算是基础了。
    itechify
        98
    itechify  
    PRO
       2022-06-24 18:08:43 +08:00 via Android
    一次循环 O(n)?
    zamaojava
        99
    zamaojava  
       2022-06-24 18:09:45 +08:00
    我不会..........
    blockmin
        100
    blockmin  
       2022-06-24 18:09:46 +08:00
    简单到让人多想,但凡你要取最大的两个或以上,我都会觉得是考察 TopK 。上面说排序的,取一个还排个锤子的序
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5483 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 08:33 PVG 16:33 LAX 01:33 JFK 04:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86