c#题例-2025-07-14 01:52:56
日期: 2025-07-14 分类: AI写作 14次阅读
当然可以!下面是一道**专家级别**的 C# 逻辑面试题,涉及 **委托、泛型、闭包、异步编程和线程安全** 的综合运用,考察候选人对语言特性的深入理解以及在复杂场景下的设计能力。
---
### 🧠 面试题:实现一个线程安全的事件总线(Event Bus)
#### 背景说明:
你需要实现一个轻量级的线程安全的事件发布/订阅系统(Event Bus),支持多个事件类型,并确保在并发环境下订阅、发布和取消订阅操作的安全性。
---
### 💡 题目要求:
请使用 C# 编写一个泛型 `EventBus` 类,满足以下功能:
1. 支持注册事件处理函数(`Subscribe
2. 支持注销事件处理函数(`Unsubscribe
3. 支持异步发布事件(`PublishAsync
4. 确保线程安全:多个线程可同时调用 `PublishAsync`、`Subscribe
5. 处理程序应以“快照”方式执行:在发布过程中即使有人取消订阅,不影响当前正在执行的处理程序列表。
6. 不允许使用第三方库或 `System.Reactive`。
---
### ✅ 示例代码结构:
```csharp
public class EventBus
{
public void Subscribe
public void Unsubscribe
public Task PublishAsync
}
```
---
### 🧪 使用示例:
```csharp
var bus = new EventBus();
bus.Subscribe
await bus.PublishAsync("Hello");
// 输出:Received: Hello
bus.Unsubscribe
```
---
### 📌 高阶考点:
- 泛型与委托的高级用法
- `ConcurrentDictionary` 或锁机制的合理使用
- 异步多播委托的执行方式
- 快照行为的实现(复制订阅者列表)
- 对闭包和捕获变量的理解
- `Task.Run()` 是否需要?是否要并行执行?如何异常处理?
- 如何避免内存泄漏?
---
### 🧩 可扩展问题(用于深入追问):
- 如何支持事件继承(如发布 `Dog` 也触发 `Animal` 类型的监听器)?
- 如何实现优先级排序的监听器?
- 如何实现一次性订阅?
- 如何测试线程安全性?
- 如果处理程序抛出异常,应该如何处理?
---
如果你需要这道题的参考答案或解析,请告诉我,我可以为你详细解释实现思路与代码。
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐