Pure Storage OA 面试真题解析:Callback Registration and Event Dispatch

29次阅读
没有评论

Implement a simple event system with two operations.

public interface Callback {void run();
}

class Event {void registerCallback(Callback cb) {// fill this in}

    void eventFired() {// fill this in}
}

Callbacks can be registered before or after the event is fired. If the event has not fired yet, registered callbacks should be stored and run later when eventFired() is called. If the event has already fired, a newly registered callback should run immediately. Any callback should run at most once.

这道题考察的是一个最基础但很经典的事件回调机制:在事件触发前注册的回调需要先缓存起来,等到 <code>eventFired()</code> 被调用时统一执行;而在事件已经触发之后再注册的回调,则应该立刻执行。解题关键是维护一个“是否已触发”的状态,再配合一个容器保存尚未执行的回调。常见做法是用列表 / 队列存储 pending callbacks,并在事件触发时一次性遍历执行,然后清空;如果后续再次注册,则直接调用 <code>cb.run()</code>。

正文完
 0