Python技术迷

组里有个P7,为了防止被裁,把核心计费模块的代码写得晦涩难懂,还加了自定义的混淆逻辑,甚至不提交 Git~

刚看到个贴子,说有个P7,为了防裁员,把核心计费代码写得谁都看不懂,还自己搞了一套混淆逻辑,只放服务器不提代码库,自以为公司不敢动他。结果CTO直接找外包重写模块,对比无误当天就让他走人,还因为“违规操作生产环境”,赔偿压到最低。

Image

对员工来说,把自己变成“人质型员工”,短期看像是安全感,长期就是在给自己挖坑。真正的不可替代,是你能把系统做得稳、文档清楚、任何人接手都不容易做得比你好,而不是别人一看你代码就想骂人。

对公司来说,只靠抓把柄、玩阴招解决问题,说明风控和管理早就有漏洞了。

换个角度想,职场的底线就是:专业+诚信。技术可以牛,但别拿公司和团队当筹码。

算法题:森林中的兔子

昨天晚上十一点多吧,我在公司楼下抽烟,我们组那个小李突然微信丢我一句:“东哥,那个森林里的兔子你会不?面试官就盯着我笑……”我当时困得眼睛都睁不开,但这题还真挺像线上排查:别人给你一堆“口径”,你得把真实规模算出来,不然库存、账、指标全对不上。

题里每只兔子会回答一个数 x,意思是“跟我同色的还有 x 只”。你别把它当成“我看见 x 只”,它其实就是在说:我们这帮同色兔子这一组,组大小必须是 x+1。就跟你做分库分表一样,人家告诉你一个分片容量,你就得按容量凑整,不够也得补位。

那怎么补位呢?比如回答 2 的兔子有 c 只,每组容量是 3。你要把 c 塞进若干个 3 的盒子里,装不满也得开新盒子,最后兔子总数就是 盒子数 * 3。盒子数就是 ceil(c/3)。换成通用就是:对每个答案 x,统计出现次数 c,然后加上 ceil(c/(x+1))*(x+1)。

我当时还顺手给小李举了个很“缺德”的例子:答案 0 的兔子,说白了就是“同色就我一个”,来了几个就算几个,不用凑整;但答案 5 的来了 1 个,你也得按 6 算,因为它的“口径”已经把组规模锁死了——这就像配置里写了线程池 core=6,你只跑一个请求也得把那套资源模型按规则对齐,反正就是这么不讲道理,哈哈。

代码我直接甩他了,用 Python 写得干净点,面试现场也不容易念错:

from collections import Counter
import math

defnum_rabbits(answers):
    cnt = Counter(answers)
    total = 0
for x, c in cnt.items():
        group = x + 1
        groups_needed = (c + group - 1) // group  # ceil(c / group)
        total += groups_needed * group
return total

# 随手测两下
print(num_rabbits([1, 1, 2]))      # 5
print(num_rabbits([10, 10, 10]))   # 11

你看第二个测试就很“阴间”:三个兔子都说还有 10 个同色,那说明至少得有一组 11 个,回答的人再少也不能把组缩小,这就是题的坑。小李当时说“哦哦哦,原来是向上取整凑组”,我说你记成一句话就行:答案是容量,计数是需求,结果是按容量凑整的总供给。嗯我说得像在讲资源池,其实这题就是资源池。

行了我先不扯了,我这会儿还在回消息,产品那边又在问“为啥指标多了 3”,我一看就知道又有人把 ceil 写成 int 了……我去看一眼日志哈。