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

最近负责 Java 面试,吐槽下

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

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

    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  
    NeezerGu
        101
    NeezerGu  
       2022-06-24 18:09:56 +08:00
    @Mithril
    啊。。。 难道。。不是排序吗?。。 从小到大取前五个?
    xuanbg
        102
    xuanbg  
       2022-06-24 18:11:26 +08:00
    var list = List.of(5, 23, 6, 112, 44, 33, 31);
    int max = list.get(0);
    for (int i : list){
    max = max >= i ? max : i;
    }
    System.out.println(max);
    shanghai1943
        103
    shanghai1943  
       2022-06-24 18:13:22 +08:00
    这有啥诈。。题目只说了输出,没说如何高效输出。我觉得应聘者是不是太怂了,内心戏太多了导致不敢下手。
    ForkNMB
        104
    ForkNMB  
       2022-06-24 18:20:22 +08:00
    我猜大概是他们在心中默背快排发现记不起来就觉得做不出来了
    muchenlou
        105
    muchenlou  
       2022-06-24 18:21:53 +08:00 via iPhone
    @monkeyWie 发个 JD ,我在深圳。
    muchenlou
        106
    muchenlou  
       2022-06-24 18:22:34 +08:00 via iPhone
    想投简历试试。。。
    monkeyWie
        107
    monkeyWie  
    OP
       2022-06-24 18:22:34 +08:00 via Android
    @NeezerGu 还真不行,这种 topK 只能用最大最小堆,不然内存就溢出了
    monkeyWie
        108
    monkeyWie  
    OP
       2022-06-24 18:23:54 +08:00 via Android
    @blockmin 兄弟这题已经过滤一大批人了,出 topK 还要不要招人?
    Wdafff
        109
    Wdafff  
       2022-06-24 18:24:48 +08:00
    被 var 吓到了吧😅
    muchenlou
        110
    muchenlou  
       2022-06-24 18:26:39 +08:00 via iPhone
    或者给个邮箱,让我投个简历。
    L4Linux
        111
    L4Linux  
       2022-06-24 18:29:20 +08:00 via Android
    编程题能上网查 api 不?我现在离开 docs oracle 不会写 Java ,离开 cppreference 不会写 C++。

    不能查的话,考啥都挺扯的。
    NeezerGu
        112
    NeezerGu  
       2022-06-24 18:46:31 +08:00
    @monkeyWie 原来如此,感谢科普
    cheng6563
        113
    cheng6563  
       2022-06-24 18:46:34 +08:00
    @L4Linux 这题根本不要 API 啊
    dengji85
        114
    dengji85  
       2022-06-24 18:55:09 +08:00
    第一眼知道循环能写出来,但自己会试图揣测面试官的用意,是在考什么,是否有坑
    daimubai
        115
    daimubai  
       2022-06-24 18:59:39 +08:00
    @hjwcn 好吧,我被 pass 了
    z1645444
        116
    z1645444  
       2022-06-24 19:00:42 +08:00
    我感觉面试中的 easy 题应该是比 op 给出的题目难一些的

    这个由于太过于简单,平时写题当然秒杀,但是出现在面试中,难免会多想:“面试官出这么简单的题目,不对劲,肯定有猫腻”,然后就一想想很久,但是不至于甚至上一个 while 的解法都不肯说出来吧
    iwh718
        117
    iwh718  
       2022-06-24 19:07:30 +08:00
    前几天我做的面试题,题目让把一些列时间改成指定格式,我没看懂题目是干什么,问面试的,结果面试的也说是我想的那样子,结果我也没做好,中途说可以查资料,我挺惊讶的,就百度了(当时没挂代理),然后看了几个包裹 MDN ,MDN 太慢了,我就看了其他几个解答,后面觉得不靠谱我又看了 MDN ,翻译了英文,最后面试问我英文文档是不是都要翻译,说效率是不是比准确度更重要。说实话我之前觉得面试很好的,没有一个题目难为人,都是基础的。聊着也很和谐。这几个问题给我问懵了。远程录屏面试,我还有心思看英文目录找结果,或者等 MDN 刷新出来吗,后面没做好题目,心态崩了。结束后,我又看了一遍题目,想了很久才看出来要求,就是很简单的写个社区回帖那种时间工具,我正没看出来那个题目是这个意思,当时也是紧张没理解。虽然面试凉了,也发现自己很笨,写了几年代码,基础题都不会。就会写垃圾代码。唉。
    bigxianyu
        118
    bigxianyu  
       2022-06-24 19:11:01 +08:00 via Android
    语言这种东西,要多练
    jaswer
        119
    jaswer  
       2022-06-24 19:16:45 +08:00
    @lu5je0 我校招 sort 过,面试官笑了,直接给我过了
    asanelder
        120
    asanelder  
       2022-06-24 19:17:04 +08:00
    @monkeyWie #90 md, 都这么菜的么, 俺突然对自己好有信心了, 现在 leetcode hard 级别做不出来, 都不敢出去面试了...
    imycc
        121
    imycc  
       2022-06-24 19:18:32 +08:00
    可能刷题的时候跳过了吧,你要不加大点难度,求从大到小求前 k 个数值(
    boks
        122
    boks  
       2022-06-24 19:18:59 +08:00
    槽,我想起来之前去面试前端,面试官让我手写 vue 的 v-for 输出数组的姓名和年龄,还有 Promise 封装函数。我写完说:就这? 面试官说好多人写不出来😂
    loryyang
        123
    loryyang  
       2022-06-24 19:34:36 +08:00
    你别说,我们当年面试过一个北大的同学,写不出数组反转(不是链表)
    tzl
        124
    tzl  
       2022-06-24 19:51:39 +08:00
    java 面试这么简单的吗?两年前毕业连个 java 面都没,转行 c++了,感觉亏了呀
    cherryas
        125
    cherryas  
       2022-06-24 20:24:40 +08:00
    问这问题很没劲,但凡学过高强度学过会点 java 都能写出来, 真答了 for 循环在你这等于没过.
    wunonglin
        126
    wunonglin  
       2022-06-24 20:28:13 +08:00
    @Mexion #28 我看 op 用 Array ,就下意识用 reduce 了。
    ffgrinder
        127
    ffgrinder  
       2022-06-24 20:38:26 +08:00
    我觉得好像大家都跑题了。这题核心就是写个 O(n)的算法吧,for 不 for 的只是实现方式?哪怕逐个 pop 都行吧(我不清楚 java 的 reduce 是不是线性时间的)。

    sort 一定是不应该过的,因为在这个 case 下慢和蠢。
    Bingchunmoli
        128
    Bingchunmoli  
       2022-06-24 21:08:04 +08:00
    第一反应就是冒泡。QWQ
    onlineme
        129
    onlineme  
       2022-06-24 21:35:59 +08:00 via Android
    楼主我复习了冒泡算法
    securityCoding
        130
    securityCoding  
       2022-06-24 21:44:58 +08:00
    我出个快排算法题面试了七八个人只有一个写出来了。
    AyaseEri
        131
    AyaseEri  
       2022-06-24 22:09:28 +08:00
    不大可能有人写不出,但是写不出确实在排查问题的能力上有所欠缺,觉得有诈问清楚就完事了。
    yangbin9317
        132
    yangbin9317  
       2022-06-24 22:17:14 +08:00
    分析:列表中的所有数值都比最大值小

    class Solution:
    def findMax(self, l: List[int]) -> int:
    import random
    while True:
    candidate = random.choice(l)
    if not all(map(lambda x: x <= candidate, l)):
    continue
    return candidate
    Foxii
        133
    Foxii  
       2022-06-24 23:00:15 +08:00 via Android
    有没有那种 就是那种
    k8s 启动 list.size ()个微服务
    启动完毕 kafka 推消息给中心
    中心发启动倒计时消息
    微服务分别跑 list.get ( i )秒的倒计时
    完了用 Kafka 推过来,取第 list.size ()个的秒数
    mikywei
        134
    mikywei  
       2022-06-24 23:30:59 +08:00
    java 有 var 这个数据类型吗?
    fzdwx
        135
    fzdwx  
       2022-06-24 23:33:40 +08:00
    @mikywei ... 关键词这是,纯纯的刻板印象。
    suxiaohuan
        136
    suxiaohuan  
       2022-06-24 23:50:12 +08:00
    是因为 var 吧,你不出这题我都不知道 Java 还能用 var 了……
    我第一反应就是不可能这么简单吧?肯定是因为 var 有什么我不了解的特性,导致直接写 for loop 会出现难以察觉的神秘 bug
    不过要是反正也不知道怎么办的话,难道不该先硬写一个吗──
    LGA1150
        137
    LGA1150  
       2022-06-25 00:09:24 +08:00
    int max = Integer.MIN_VALUE;
    for (int i : list)
    max = Math.max(max, i);
    LGA1150
        138
    LGA1150  
       2022-06-25 00:12:07 +08:00
    @ifdef List.of() 返回的 List 是不可变对象,不能原地 sort

    | java.lang.UnsupportedOperationException
    | at ImmutableCollections.uoe (ImmutableCollections.java:142)
    | at ImmutableCollections$AbstractImmutableList.sort (ImmutableCollections.java:261)
    | at Collections.sort (Collections.java:145)
    Macolor21
        139
    Macolor21  
       2022-06-25 00:24:37 +08:00 via iPhone
    @aitaii 你二分不得先有序?不是多遍历了一层
    nightwitch
        140
    nightwitch  
       2022-06-25 01:04:53 +08:00
    for 循环本身就是最优解了,O(1)空间复杂度,O(n)时间复杂度,缓存友好。
    nightwitch
        141
    nightwitch  
       2022-06-25 01:10:45 +08:00
    @Mithril #10 双层打印菱形也不算那么直观吧,印象里打印任意层数的菱形要算每层打印多少个空格多少个*这种还是挺琐碎的,得用纸笔画几个图案找规律才行
    CookCoder
        142
    CookCoder  
       2022-06-25 06:53:17 +08:00
    这题的难度值得去争议一下?
    sadfQED2
        143
    sadfQED2  
       2022-06-25 08:22:25 +08:00 via Android
    你这个题目,我第一眼也觉得有诈,肯定是想考什么 var 或者 list.of 的神奇特性。

    我自己面试,第一题喜欢问多线程并发顺序打印 123456 。这题目好理解,一听就懂题目意思,而且一眼就能看出对方有没有写过并发程序以及对编程语言的熟悉程度
    sch1111878
        144
    sch1111878  
       2022-06-25 09:18:49 +08:00
    @arvinsilm 89 楼 用了 MIN_VALUE 考虑了哈哈
    ffkjjj
        145
    ffkjjj  
       2022-06-25 09:19:30 +08:00
    这么离谱的吗
    Austin2035
        146
    Austin2035  
       2022-06-25 10:05:25 +08:00
    上次面试遇到了,说是找最大值,但是他描述的是找第一个 max 啥的。我就直接怼了个快排。。。他说,最简单的方法是什么?哈哈哈。我才懂,初值为数组首元素,遍历一圈就有了。
    xiaofan305
        147
    xiaofan305  
       2022-06-25 10:15:41 +08:00 via Android
    终于看到一题我会的
    neptuno
        148
    neptuno  
       2022-06-25 10:42:51 +08:00 via iPhone
    我第一眼也觉得有诈,但也要说一下最简单的 for 循环解法吧,然后再想别的方法
    VincentWang
        149
    VincentWang  
       2022-06-25 10:51:19 +08:00
    @monkeyWie #20 必须 for 才算过?果然面试官的思路面试者是跟不上的..... 不知道面试官在考察什么....
    lucaslee
        150
    lucaslee  
       2022-06-25 11:37:16 +08:00
    杠一下,楼主是必须要招了解 Java 10 以上特性的人么?
    Mithril
        151
    Mithril  
       2022-06-25 12:57:09 +08:00
    @nightwitch 确实,但是编程这东西,大部分时间应对的都是这种繁琐又需要找规律的工作,又不是造火箭,哪里天天有那么多高难度问题。
    而且作为面试或者笔试题,也不需要你完全写对,循环套对了,大概思路有了就行。不需要真的算对那些细节,那是 debug 的工作。
    wdwwtzy
        152
    wdwwtzy  
       2022-06-25 13:18:55 +08:00
    var list = new []{ 1, 3, 5 };
    list.Max(); // 5

    欢迎大家来试用一下 C#
    cheng6563
        153
    cheng6563  
       2022-06-25 13:20:07 +08:00
    @lu5je0 我遇见过 10 年老 Java 根本不会用排序 API ,排序全靠 SQL 查出来时的 order by
    secondwtq
        154
    secondwtq  
       2022-06-25 13:39:36 +08:00
    赛博空城计了属于是
    xyjincan
        155
    xyjincan  
       2022-06-25 13:54:38 +08:00 via Android
    写出来也不是一定要
    janus77
        156
    janus77  
       2022-06-25 14:27:05 +08:00
    我也感觉有诈。。。。你没说要求,但是有人会觉得你设了要求故意不说,希望你用很高级的解法做出来,万一我用了简单方法解出来被你说不是你想的答案怎么办?
    而且就算我这个题没解出来也不能证明我是真的那么菜,我第一题解不出来但是最难得题解出来了,这还不能说明我的实力吗?根本没必要纠结第一题能不能做出来
    wangkun025
        157
    wangkun025  
       2022-06-25 14:36:58 +08:00
    ```ruby
    [5, 23, 6, 112, 44, 33, 31].max
    ```
    xsqfjys
        158
    xsqfjys  
       2022-06-25 16:07:32 +08:00
    你不按套路出牌呀,网上的 java 面试题都是些什么破东西应该都有了解
    xsqfjys
        159
    xsqfjys  
       2022-06-25 16:11:22 +08:00
    我要是平时遇到应该会用 stream.max
    clf
        160
    clf  
       2022-06-25 16:16:17 +08:00
    我司还遇到了问 Integer 间比较为什么不推荐用 ==,说不知道的。
    11232as
        161
    11232as  
       2022-06-25 19:22:20 +08:00
    @clf 好奇问一下,是因为要拆包?
    TWorldIsNButThis
        162
    TWorldIsNButThis  
       2022-06-25 20:00:48 +08:00 via iPhone
    @11232as 对象类型要用 equal
    ==是比较对象的地址
    zsp1987
        163
    zsp1987  
       2022-06-25 20:43:18 +08:00 via Android
    on 肯定可以做出来。如果做出来,延伸问题到 topk ,然后 list 有特别大,考察用哪种排序。
    11232as
        164
    11232as  
       2022-06-25 20:50:22 +08:00
    @TWorldIsNButThis 果然自己还是不够熟悉啊...
    narfnas
        165
    narfnas  
       2022-06-25 20:52:29 +08:00
    就是直接 for 啊,只找固定最大个都是 for ,时间复杂度 on
    sort 那是 onlogn
    TWorldIsNButThis
        166
    TWorldIsNButThis  
       2022-06-25 20:54:33 +08:00 via iPhone   ❤️ 1
    @11232as 这其实是 Java 的问题
    现代语言比如 kotlin 有运算符重载,默认会把对象的==重载为 equal
    yogogo
        167
    yogogo  
       2022-06-25 20:56:58 +08:00
    @Mithril #10 脑子有写了,还没动手写
    ecloud
        168
    ecloud  
       2022-06-25 22:12:47 +08:00
    很多 java 程序员实际上是“面向框架编程”,比如 Spring
    hundandadi
        169
    hundandadi  
       2022-06-25 22:16:21 +08:00 via Android
    有点好奇,用 java8 以上的都是啥行业的呢
    Zwying
        170
    Zwying  
       2022-06-25 23:34:56 +08:00
    什么牛马 var
    Unclev21x
        171
    Unclev21x  
       2022-06-25 23:55:50 +08:00 via iPhone
    @cassyfar 老哥,我这个编程门外汉居然看懂了并且笑出声了😂
    xyjincan
        172
    xyjincan  
       2022-06-26 07:15:11 +08:00 via Android
    @cherryas 你的参考答案是什么
    shmilypeter
        173
    shmilypeter  
       2022-06-26 07:56:34 +08:00
    @Mithril 精通大数据深入高并发那是背的。
    代码倒是真的写过,不过就是复制粘贴的业务代码,一多半还是工具自动生成的,然后 debug 调调。

    中国只考八股不考算法,要不然一些复杂的算法,背也给你背下来
    monkeyWie
        174
    monkeyWie  
    OP
       2022-06-26 09:28:41 +08:00 via Android
    @hundandadi 互联网行业,新项目上新 jdk 不是很正常吗,还死守着 jdk8?
    maji91fan
        175
    maji91fan  
       2022-06-26 10:50:41 +08:00
    一个两年半没写过代码的人都觉得这不会纯粹是逻辑不太好,和计算机没啥关系
    jwenjian
        176
    jwenjian  
       2022-06-26 11:15:16 +08:00
    return list.get(3)
    lingalonely
        177
    lingalonely  
       2022-06-26 14:24:06 +08:00
    我面试就不爱问八股,直接一道逻辑题,甚至是现场想的,甚至是存在问题,看面试者的分析能力,能有条有理的分析基本就通过了,基本 30 分钟一道题,是不是不讲武德[笑脸]。
    fhj
        178
    fhj  
       2022-06-26 16:57:37 +08:00
    大佬,工资多少哈哈
    hanai
        179
    hanai  
       2022-06-26 23:39:13 +08:00 via iPhone
    觉得有诈的,当场直接问下面试官不就行了?
    hundandadi
        180
    hundandadi  
       2022-06-27 07:58:53 +08:00 via Android
    死守谈不上吧,这种东西也不是一个小小程序员可以定的不是吗,我就是好奇用 java8 以上的有啥优点吗,没必要被鄙视吧
    jjwjiang
        181
    jjwjiang  
       2022-06-27 09:18:08 +08:00
    @hundandadi 最简单的有没有 Stream ,操作集合的时候那是天差地别的差距
    karatsuba
        182
    karatsuba  
       2022-06-27 09:40:51 +08:00
    面试出这种题干嘛呢,大一的我说不定会毫不犹豫写个 for
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4774 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 09:57 · PVG 17:57 · LAX 01:57 · JFK 04:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.