目录
正在加载目录...

Stripe OA | Stripe OA 一亩三分地

Stripe OA | Stripe OA 一亩三分地

Stripe OA 题型依然是熟悉的那一套,整体来说变化不大: 时长:60 min 题目数量:1 题 类型:Hard OOD(面向对象设计) 虽然只有一道题,但千万不要被数量迷惑。

题面非常长、实现量也很大,基本属于一边读题一边设计类结构,同时还要快速完成代码实现,对 coding 速度和设计能力都有要求。 目前Stripe OA 题库其实非常小。这家公司这么多年下来,基本就反复在出三套题,很多同学做过几十套 OA 统计下来,也还是这几道经典题轮换。

Stripe OA 真题分享

解题思路

维护每台服务器的活跃连接数 cnt、连接明细 con、以及对象到目标机的绑定 obj_to_t 与引用计数 obj_use

CONNECT:若对象已绑定则必须发往该机;否则在未禁用且未满的机器里选“最小负载,若并列取较小下标”。成功时输出一条日志。

DISCONNECT:从所在机器移除并更新对象引用计数;若对象计数归零则解除绑定。

SHUTDOWN:把目标机上的连接按“连接ID首次出现的顺序”驱逐,临时将该机加入 disabled,先全部断开再按既有规则逐个重连(依然受对象固定与容量限制约束),最后解除禁用

代码

def route_request(numTargets, maxConnectionsPerTarget, requests):
    n, cap = numTargets, maxConnectionsPerTarget
    cnt = [0] * n                       
    con = {}                            
    per_t = [set() for _ in range(n)]  
    obj_to_t = {}                      
    obj_use = {}                        
    disabled = set()                    
    logs = []
    seen_order = {}                    
    order_seq = 0
    def pick_target(exclude_disabled=True):
        best_t, best_load = None, None
        for i in range(n):
            if exclude_disabled and i in disabled:
                continue
            if cnt[i] >= cap:
                continue
            if best_t is None or cnt[i] < best_load or (cnt[i] == best_load and i < best_t):
                best_t, best_load = i, cnt[i]
        return best_t

    def attach(cid, uid, oid):
        if oid in obj_to_t:
            t = obj_to_t[oid]
            if t in disabled or cnt[t] >= cap:
                return False
        else:
            t = pick_target()
            if t is None:
                return False
        con[cid] = (t, uid, oid)
        per_t[t].add(cid)
        cnt[t] += 1
        obj_use[oid] = obj_use.get(oid, 0) + 1
        obj_to_t[oid] = t
        logs.append(f"{cid},{uid},{t+1}")
        return True

    def detach(cid):
        v = con.pop(cid, None)
        if not v:
            return
        t, _, oid = v
        if cid in per_t[t]:
            per_t[t].remove(cid)
        cnt[t] -= 1
        k = obj_use.get(oid, 0) - 1
        if k <= 0:
            obj_use.pop(oid, None)
            obj_to_t.pop(oid, None)
        else:
            obj_use[oid] = k

    for line in requests:
        parts = [x.strip() for x in line.split(",")]
        op = parts[0]

        if op == "CONNECT":
            _, cid, uid, oid = parts
            if cid not in seen_order:
                order_seq += 1
                seen_order[cid] = order_seq
            attach(cid, uid, oid)

        elif op == "DISCONNECT":
            _, cid, uid, oid = parts
            if cid in con:
                detach(cid)

        else:  
            _, idx = parts
            t = int(idx) - 1
            disabled.add(t)
            evict_list = sorted(
                [cid for cid in per_t[t] if cid in con and con[cid][0] == t],
                key=lambda c: (seen_order.get(c, float("inf")), c)
            )
            triples = []
            for cid in evict_list:
                _, uid, oid = con[cid]
                triples.append((cid, uid, oid))
            for cid in evict_list:
                detach(cid)
            per_t[t].clear()
            for cid, uid, oid in triples:
                attach(cid, uid, oid)

            disabled.discard(t)

    return logs

OA代写|大厂笔试|HackerRank 包过专业服务

如果你正被 OA / 大厂笔试反复卡住,这里可以给你一个更稳、更省时间的选择。我们提供专业的OA代写服务,覆盖各类大厂笔试与 HackerRank / 牛客网 / CodeSignal 等主流平台。全程由经验丰富的北美工程师人工完成,确保所有测试用例 100% 通过,如未通过则不收费。
操作方式采用远程控制,无需共享账号,不留任何操作痕迹,流程稳定、安全、低风险。全程私域对接,响应快、沟通直接,适合临近截止、容错率极低的关键 OA 阶段,帮你把精力留给真正重要的面试环节。

正文完