阿里员工140万年薪,嫌女友收入差低,准备。。
昨天晚上加班回家的路上刷到这条新闻,阿里一哥们儿,年薪140万,嫌弃女朋友一年15万,说啥担心差距越来越大,想换人…我第一反应是:哥们儿你这是在做性能优化还是负载均衡啊?😂 两年感情,直接用“薪资对比”SQL筛选女朋友,这判断条件也太硬编码了吧。
作为程序员我就想说,代码里的魔法值我们都知道得抽出来配置,感情里更不能用数字写死啊。人和人之间的价值,不是你工资单的数字类型能完全存储的(哪怕是double类型)。
再说了,项目合作看重的是配合默契,女朋友就是你人生的长期合作伙伴,不是临时外包。你现在嫌收入差距大,等你哪天发量减少、KPI掉了,她是不是也能直接下线你?
所以啊,感情这事别用“if (income < x)”来判断,换个思路,多想想“共同成长”这种可持续架构才靠谱 【备注:文末可领最新资料】
算法题:可怜的小猪
昨晚十一点多,我在公司楼下拿着还没喝完的美式,小李追上来问我:“东哥,那个…可怜的小猪咋做啊?”我一愣,这题不是面试老熟人嘛,脑子里立刻过了下片段儿——一堆桶,一只毒的,猪喝了会在 minutesToDie 分钟后挂,整场测试总时长 minutesToTest。要问最少几只猪能把毒桶找出来。嗯,别急,我们慢慢来。
就是那个…关键点在“你能试几轮”。能试的轮数 r = minutesToTest / minutesToDie(向下取整)。为啥?一轮喂一次,等一轮观察结果,再喂下一轮。比如 60 分钟总时长、15 分钟毒发,那就能试 4 轮。
但为啥是“r+1”种状态
你们想啊,每只猪最终会呈现 1 种“死亡时刻”或者“活到最后”。死亡时刻可能发生在第 1、2、…、r 轮末尾,加上“始终没死”这一档,一共 r+1 种结果。单只猪能区分 r+1 种状态,多只猪就能“组合编码”。这就像把“桶号”写成 (r+1) 进制数,每只猪就是一位,最后看谁在第几轮阵亡就把那一位定出来。是不是有点意思。
公式就一句话
需要的猪数 p 满足: (r+1)^p ≥ buckets。 所以 p = ceil( log_{r+1}(buckets) )。就这个,别背场面话,背这个就够用了。
顺手举个面试常见数:buckets=1000, minutesToDie=15, minutesToTest=60。 r=4,r+1=5。5^4=625 不够,5^5=3125 够,所以要 5 只。面试官一般点点头就过了。等等我接个电话……好了继续。
现场有人问:“那具体怎么给猪喂?”思路是把桶编号写成 5 进制(上例),每只猪管其中一位;第 k 轮就喂所有该位为 k 的桶。等结果出来,看第 i 只猪死在第几轮,就还原该位数字;都没死就是 0。最后拼回十进制,就锁定那只毒桶。实现里其实不用真的模拟喂食,只要算最小 p 就行。
publicclassPoorPigs{
publicintpoorPigs(int buckets, int minutesToDie, int minutesToTest){
if (buckets <= 1) return0;
int rounds = minutesToTest / minutesToDie; // 能试几轮
int states = rounds + 1; // 每只猪的状态数
int pigs = 0;
long cap = 1; // (states)^pigs
while (cap < buckets) {
pigs++;
cap *= states;
}
return pigs;
}
// 小测一下
publicstaticvoidmain(String[] args){
PoorPigs s = new PoorPigs();
System.out.println(s.poorPigs(1000, 15, 60)); // 5
System.out.println(s.poorPigs(4, 15, 15)); // 2
}
}
别把 r 写成向上取整;别忘了 buckets=1 时返回 0;还有整数乘法可能溢出,我上面用 long 兜着。哦对了,现场白板演算时,别死记硬背,先说“状态数=轮数+1”,面试官就知道你是会的…行了我得回去加班了,改天把“多毒桶扩展”再跟你们唠。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html