本来这家不想记的, 但是写牛客的时候考虑到完整性, 还是大概记(吐)录(槽)一下吧

首先是在 boss 上先约面试, 面试前一天才问我要简历.

2024.7.13

翻一下日历就会发现这天是周六, 周六面试的公司, 不好评价.

先是共享屏幕写个算法题, 题目是返回数组中第一个没有重复的数字, 否则返回 null, 比较简单, 也没什么算法优化, 迅速写完以后给他看, 然后逆天的就来了.

对面看了将近五分钟说看不懂我写的什么, 我解释了以后又说我的写法不常见, 开始说我的代码风格有问题, 命名和注释的问题. 不是, 哥们, 你就一个暴力的算法题我还要给你写个四五行注释解释一下吗?

我是用了两个 HashMap 完成操作, 一个记录出现次数, 一个记录出现的位置, 确实我这一开始写的有些复杂了, 所以我在听了他的 “教导” 之后开始进行优化, 改成了一个 HashMap 完成.

然后他又说我写的不好, 如果我用 LinkedHashMap 就可以直接记录数据的先后位置, 好的, 你说得对, 我改.

接着我们又就这些写法产生了分歧, 这个时候我已经不想面了, 所以直接和他开始对峙.

int[] a = new int[10];
a[0]++;

这里他说a[0]的值不确定, 可能不为 0, 所以不能用a[0]++, 我说现有版本的 jvm 变量初值都为零值, 就是可以用a[0]++.

于是他又开始扣我这个地方的null不该赋值, 他认为对象一定为null, 我的回答是我乐意, 不赋null编辑器会提示.

Integer res = null;
int a = map.getOrDefault(0, 0);
a++;
map.put(0, a);

上面一段代码, 他说mapget修改值后再put会让人产生疑惑. 不是, 就两行代码你疑惑你 🐎 呢, 所以我让他来个更好的写法给哥们开开眼, 于是他给出了下面写法.

map.put(0, map.getOrDefault(0, 0) + 1);

我直接打问号, 这有什么区别? 他的解释: 在一行之内就不让人疑惑, 分开写就需要写个注释解释一下才不会让人疑惑. 艹了, 你老年痴呆了吧, 这么多疑惑.

然后又是一段代码

Integer res = null;

if (nums.length == 0){
    return res;
}

// 中间省略

for (int i = 0; i < nums.length; i++) {
    if (map.get(nums[i]) == 1) {
        res = nums[i];
        break;
    }
}

return res;

这里他的挑刺: 应该直接return nums[i], 不用break, 这样也可以少一个变量, 前面几行也可以省略.

我: for代码中间直接return会破坏代码结构.

后面就开始说学校的事情, 问排名, 问有多少人, 然后说他自己当年上学的怎么怎么样, 谁问你了 😅

最后还建议我看《代码大全》、《代码整洁之道》这些书, 然后问我平时有没有看过编程书. 我说你说的那些我都看过 (确实看过, 虽然没看完), 还看了《算法与数据结构》. 他于是又开始了: 你是科班学了数据结构怎么还看数据结构的书. 你怎么不想想自己为什么昨天吃了饭今天还要吃饭, 学校就教那点东西连个力扣都做不下来, 不额外看点东西我能来面试?

结束的时候对面更是来了句重量级的话: 你加一下我联系方式吧, 我最近一段时间都上不了 Boss. 一瞬间我都已经想好对面是不是做什么非法勾当的被举报了, 孤注一掷的情节瞬间浮现眼前, 关键他家在 boss 上还显示的开的确实挺高的, 更加让人怀疑, 所以我就也没加他.

一场观感体验极差的面试到此结束, 后面牛客上搜了搜好像还搜到一个哥们进去以后被坑惨了, 正准备跑路, 据他的只言片语描述, 这个老板非常变态.