V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
monkeyWie
V2EX  ›  程序员

最近负责 Java 面试,吐槽下

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

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

    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 就有局部变量类型推导了
    182 条回复    2022-06-27 09:40:51 +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 循环的事,真就很多人写不出来
    q1angch0u
        9
    q1angch0u  
       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
    我第一反应也是有诈 有点容易过头了
    wunonglin
        15
    wunonglin  
       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 我过了么?
    wunonglin
        19
    wunonglin  
       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()
    q1angch0u
        24
    q1angch0u  
       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 呢,各位聊好
    Mexion
        28
    Mexion  
       2022-06-24 16:36:43 +08:00
    @wunonglin 最大最小不直接 Math.Max(...list)完事了,还搁这花里胡哨😂
    q1angch0u
        29
    q1angch0u  
       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 就行呀。
    fzdwx
        37
    fzdwx  
       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 的遍历, 也是没写出来, 我大哥直接不想面他了
    eghao
        47
    eghao  
       2022-06-24 17:06:51 +08:00
    @rabbbit list.stream().max(Integer::compareTo).get()
    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 就写出来
    hay313955795
        51
    hay313955795  
       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 循环才过关? 这。。。真不算有诈吗?
    hay313955795
        56
    hay313955795  
       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  
       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 个。
    如果这列表不长还好说,如果有数量非常多的话,你还先排序吗?
    fzdwx
        89
    fzdwx  
       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 ,可以减少一次循环
    fzdwx
        95
    fzdwx  
       2022-06-24 18:05:16 +08:00
    fzdwx
        96
    fzdwx  
       2022-06-24 18:05:30 +08:00
    @misaka19000 #94 开始卷了
    NeezerGu
        97
    NeezerGu  
       2022-06-24 18:08:13 +08:00
    @monkeyWie 这倒是,毕竟算是基础了。
    oneisall8955
        98
    oneisall8955  
       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   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:36 · PVG 05:36 · LAX 13:36 · JFK 16:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.