程序员老鬼

某大厂的员工爆料说,+1和组里的外包有情况,更炸裂的是,这位外包在部门内已有一位npy,在公司外还有一个…

刚看到个贴子,说某大厂有员工爆料:+1跟组里一个外包“走得挺近”,资源也明显倾斜。更离谱的是,这位外包在部门里已经有个npy,部门外还有一个……

Image

网友们直接开始脑补小说名,笑点倒是挺密。

Image

我觉得这事吧,八卦是八卦,但背后反映的问题不轻。

首先,资源分配一旦不透明,团队氛围肯定被搅得跟一锅粥一样;其次,办公室恋情本身不是原罪,但牵扯利益、影响别人工作,那就是另一回事了。

网友的调侃虽然好笑,但很多“吃瓜”的愤怒,其实是因为大家都讨厌职场里那种靠关系、不靠本事的玩法。

换个角度想,真正健康的职场,不怕谁谈恋爱,就怕有人凭感情拿资源、凭暧昧堵别人路。网友里也有人说“这戏怎么总在大厂上演”,我倒是不太悲观,毕竟越多曝光,说明大家越不愿意忍这些事。【备注:文末可领最新资料】

面试题:统计重复个数

哎我刚才在工位那边…不对在茶水间倒水的时候突然想起来你这个“统计重复个数”的算法,脑子里嗡一下就像昨天我在看我们组小李写的那个 for 循环一样——绕半天还没进去主题…行我现在坐下了你等我把杯子放这……好继续说。

昨天晚上十一点多我在公司楼下那条风贱贱的长椅那坐着吃泡面,小李跑过来跟我说他的接口返回总感觉有问题,“为啥我统计重复次数老是不准啊是不是 Java 出 bug 了”。我当时一口汤差点喷出来,哪有这种事,对吧。

我瞄了一眼他的代码,哎呦那 for 套 for 的写法,把自己整晕了还怪语言,那肯定不行啊。后来我跟他说你别绕了,用个 Map 就完事了。

你想统计重复个数吧,说白了就是数一数每个元素出现了多少次,你不管是数组还是字符串都一样。昨天我就顺手给他敲了个版本,大概这样(我回忆一下…可能跟昨天写的稍微有点不一样你凑合看哈):

publicstatic Map<Integer, Integer> countDup(int[] nums){
    Map<Integer, Integer> map = new HashMap<>();
for (int n : nums) {
// 这个…我昨天敲的时候还打错字,哈哈
        map.put(n, map.getOrDefault(n, 0) + 1);
    }
return map;
}

这玩意就特别像…嗯你们知道吧,就像那种便利店老板记账本,你每来一个顾客他就在本子上把你那行往上加一,不会搞漏。

我昨天给小李看完,他说“东哥我数据量有点大几百万级的那种,用 HashMap 会不会卡啊?”

我当时正在拆辣条,手一抖掉桌子上了,我说你先别管 Map 卡不卡,你先看看你是不是单线程跑的、是不是有 IO 阻塞、是不是 GC 老在那跳。他看了我半天然后说“哦好像确实是我打印日志太多了”…你看吧,典型背锅给算法的案例。

昨天我们组那个新来的小姑娘问我“东哥如果我只想统计某些元素重复次数怎么办比如只统计>5 的元素那种”,我当时已经喝困了,嘴里嘟囔一句“那你过滤啊以后多写点 stream…”

我就随手写了一个,她说看起来像魔法一样:

publicstatic Map<Integer, Long> countDupFilter(int[] nums){
return Arrays.stream(nums)
            .filter(v -> v > 5)   // 随便举例
            .boxed()
            .collect(Collectors.groupingBy(v -> v, Collectors.counting()));
}

她一脸震惊说“哇这要我写一天”,我说“啊…其实也就那样反正你写多了就顺了”。

其实你只要记住一个点:统计重复个数=映射表计数。你非要上什么复杂结构也不是不行,但说实话大部分业务场景都没有那个必要。

除非你遇到那种特别变态的数据分布,比如全是重复值一大堆一样的,那可能 Map 也没你想得那么轻松,不过大部分项目都够用了。

算了先把这个结尾说了,不然我又忘了。

反正在 Java 里这种题真的就是基础操作,你用 for 循环自己数也可以,用 Map 最省心,用 stream 最优雅。你根据场景挑就行了。

我去加个奶回来,如果我回来还记得你这个事我再跟你说另外两个写法…不对我好像也不会再说了算了先这样哈。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领,也可以链接我微信:hls404