Grammarly OA 面试真题解析:实现基础 Pub/Sub 订阅发布系统

20次阅读
没有评论

You can select any programming language.

Implement a basic Pub/Sub following the given interface.

// Interface
interface Subscription {unsubscribe(): void
}

interface Subject<T> {publish(value: T): void
  subscribe(cb: (value: T) => void): Subscription
}

// Usage

const subject = new Subject()
const subscription1 = subject.subscribe(x => console.log(x))
const subscription2 = subject.subscribe(x => console.log(x + 10))

subject.publish(1) // prints 1 and 11 in any order

subscription1.unsubscribe()

这道题要求你实现一个基础的 Pub/Sub 订阅发布系统,核心是维护订阅者列表,并支持发布消息和取消订阅两个操作。每次调用 subscribe 时,需要返回一个 Subscription 对象,之后可以通过 unsubscribe() 将对应回调从列表中移除;调用 publish(value) 时,则要把当前消息广播给所有仍然有效的订阅者。题目强调同一条消息会被所有订阅者收到,且输出顺序可以任意,因此实现时重点在于数据结构设计、订阅管理和取消订阅的正确性,通常可以用数组、哈希表或集合来保存回调。

正文完
 0