面试官:面试结果半年内会通知你。。
刚看到个程序员网友吐槽,说面试被要求手撕B+树,还要逐字母背map遍历代码😅。最后问面试结果多久出来,面试官居然说“半年内通知”——这怕是通知考公吧?
我觉得这事吧,考算法手撕是常规操作,但背代码逐字母就纯属刁难,像是在刷存在感。半年通知更是离谱,互联网项目迭代都好几轮了,你的面试结果还在冷宫里躺着。网友评论有人笑称“这HR是在等地球自转半圈”,也有人说这是礼貌版的“回去等通知”。
这种面试流程就像O(n²)的算法,明知低效还死守,纯浪费双方时间。面试本质是双向选择,遇到明显不尊重候选人的公司,早点止损才是最优解。
总的来说,别被这种“半年内”PUA到,及时clear掉无效进程【备注:文末可领最新资料】
面试题:可怜的小猪
昨天晚上十一点多,在公司楼下抽烟,我跟我们组那个小李瞎聊,他突然问我:东哥那个…呃…“可怜的小猪”怎么做来着?我脑子里一激灵,这题不是那种看着像脑筋急转弯、其实是算发…算法题嘛。风一吹我有点困,就边比划边说:你别把猪当传感器数量,准确点说它们是“位数”。
就是有 buckets 桶毒药,minutesToDie 分钟内中毒会挂,整场测试有 minutesToTest。你能安排几轮喝。每只猪在整场里只会有两种结局:某一轮后的某个时刻死,或者一直活着。重点来了——一只猪能区分的“状态数”不是 2,而是 rounds + 1,因为有 rounds = minutesToTest // minutesToDie 轮,第 1、2、…、rounds 轮后死,加上活到最后,共 rounds+1 种可能。是不是。
我当时在路灯下画了个格子图:有 k 只猪,就能拼出 (rounds+1)^k 种组合状态,每种状态映射到一个桶。只要这个数 ≥ 桶数,咱就稳。公式就自然冒出来了——
需要的猪数 = ⌈ log_{rounds+1}(buckets) ⌉
有人在群里问为啥不是 2 的幂,我说你想想,每轮结束能“读一次值”,读出来的是“第几轮死”,那就是多进制,不是二进制。对吧对吧。
比如 1000 桶,minutesToDie=15,minutesToTest=60。那 rounds = 60 // 15 = 4,每猪 5 种状态。要覆盖 1000:5^4=625 不够,5^5=3125 够,所以要 5 只。听起来有点玄,其实就像把桶编号写成 5 进制,然后第 i 只猪只在“该位等于某个数字”的那些桶里喝,等到哪一轮倒下,就读到那一位的数字…等等我接个电话…好,继续。
import math
defpoorPigs(buckets: int, minutesToDie: int, minutesToTest: int) -> int:
if buckets <= 1:
return0
rounds = minutesToTest // minutesToDie
# 理论上 rounds >= 1;若 rounds == 0 代表无法测试,题目一般不会给这种
base = rounds + 1
return math.ceil(math.log(buckets, base))
我故意不写一大堆 if…else,别把简洁事儿做复杂了。有人还想反推出“该怎么喂”。思路也别怕:把桶编号从 0…b-1,转换成 base=rounds+1 进制,每一位代表“第 i 只猪在哪一轮喝这个桶”。第 t 位是 0 就整场不喝,是 1 就第一轮喝…这样安排,最后“第 i 只猪第几轮死”就是这位的数字;都没死就当 0。组合回来就知道是哪个桶。
那个…别把 minutesToTest / minutesToDie 写成浮点计算,整除就行;还有 buckets=1 返回 0,这是有可能的;rounds=0 基本不会出,但要是你野路子场景遇到,那就是没法区分,多半只能靠玄学了,算了不想解释了。
行了我回去改个 Bug…哦对,刚才说到哪儿了?算了明早再聊。
-END-
我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB,点击下方公众号回复关键字 python 全部免费领