Python技术迷

外包年薪55万,正编年薪28万如何选?目前我是在一家顶级外企的外包岗位做资深研发公司也舍得给钱,年薪55要,目前已经在公司呆了两年了。

刚看到个贴子,说博主在顶级外企做外包,资深研发,年薪55万,干了两年。年底拿到某大厂正编 offer,年薪只有28万,一下子犯难:钱和“身份”怎么选?

Image

从我的角度看,先把账算清楚:55对28,不是差几千块,是差一半人生体验的钱。房贷、存款、家里压力,都是真实的。而“正编”“大厂”这些标签,短期是好听,但能不能变成你简历上的溢价,还得看你进去之后做什么项目、成长有多快。

我比较认同的选法是:先想清楚自己这两三年的主线任务,如果现在最缺的是现金流和安全垫,那就别嫌外包身份低;如果已经手里有点底气了,愿意用降薪换平台和赛道,那再考虑28万的正编。

算法题:判断二分图

昨晚十一点多吧,我在公司楼下抽烟,我们组那个小李突然发我一句:“哥,二分图咋判断啊?我面试被问懵了。”我当时脑子还停在“线上那个服务又抖了”的状态,就顺手拿这个事儿跟他掰扯了两分钟。

你们想象个特别接地气的场景:你要把一堆服务实例分到两台机器上,A机和B机。然后有些服务之间就是“天生不合”,不能放同一台(比如抢同一把锁、同一块GPU、或者互相调用会形成死循环那种…嗯我说的有点玄)。我们就把服务当点,把“不能同放”当边。你问能不能把所有点分成两堆,边的两端永远落在不同堆里——这不就是二分图嘛。

那怎么判断呢,别背概念,直接上“染色”。我一般就两种颜色:0/1,或者叫黑/白都行。随便挑一个点染成0,它的邻居必须是1,邻居的邻居又得是0。一路推下去,如果你发现某条边两头颜色一样了,完了,说明里头藏了个奇数环(就是绕一圈回来,发现要你既0又1那种精神分裂)。还有个坑:图可能不连通,你得每个没染过的点都开一遍。

我昨天给小李打字打得贼快,差不多就这个代码,你直接拿去跑,别抄网上那种一堆类一堆输入输出模板的,看着就烦:

from collections import deque
from typing import List, Tuple

defis_bipartite(n: int, edges: List[Tuple[int, int]]) -> bool:
"""
    n: 节点数,默认节点编号 0..n-1
    edges: 无向边列表 (u, v)
    """

    g = [[] for _ in range(n)]
for u, v in edges:
if u == v:
# 自环必然不是二分图
returnFalse
        g[u].append(v)
        g[v].append(u)

    color = [-1] * n  # -1 表示没染色,0/1 表示两种阵营

for i in range(n):
if color[i] != -1:
continue

# 这个点可能是孤立点,随便给个颜色也行
        color[i] = 0
        q = deque([i])

while q:
            u = q.popleft()
for v in g[u]:
if color[v] == -1:
                    color[v] = color[u] ^ 1
                    q.append(v)
elif color[v] == color[u]:
returnFalse

returnTrue


if __name__ == "__main__":
# 一个二分图:0-1-2-3 这样链式,肯定能分两堆
    print(is_bipartite(4, [(0, 1), (1, 2), (2, 3)]))  # True

# 不是二分图:0-1-2-0 这是三角形,奇数环
    print(is_bipartite(3, [(0, 1), (1, 2), (2, 0)]))  # False

你看这玩意儿跟我们平时“把请求打到两组集群做隔离”那个思路其实挺像的:你想维持一个约束系统,约束一多,最怕的就是在某个角落里打结。二分图这个题的“结”就是奇数环。你不用死记什么奇偶性证明,真遇到冲突,代码会直接把它揪出来:某个点被要求染成两种颜色,啪一下就露馅。

哦对了,小李还问我“用DFS行不行”,我说行啊,你递归也能写,但线上Python递归深度你得小心点,图大一点就给你RecursionError,别到时候面试官没把你卡住,Python先把你卡住…我一般就BFS队列,稳一点。

然后我俩聊着聊着他又扯到“那如果是有向图呢”,我说你先别急,判断二分图默认就是无向的,你硬要拿有向边当约束,通常也是把它当无向关系去看,不然你又得定义一堆新规则,面试官听了也头疼。行了我先不说了,我这会儿还在看告警,手机又震了两下…