Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >AI写作

c#题例-2025-07-04 04:19:02

当然可以!下面是一道**专家级别**的 C# 程序员逻辑面试题,涉及 **委托、泛型、闭包、线程安全、异步编程和设计模式**等多个高级概念:

---

### 🧠 面试题:实现一个线程安全的事件总线(Event Bus)

#### 问题描述:

你需要实现一个名为 `ThreadSafeEventBus` 的类,用于在系统中发布和订阅事件。它应该支持以下功能:

1. 任意类型都可以作为事件类型。
2. 支持订阅者通过委托来注册对某个事件类型的兴趣。
3. 支持同步和异步事件处理。
4. 支持取消订阅。
5. 必须是线程安全的(多线程下也能正常工作)。
6. 不允许内存泄漏(例如,弱引用或显式取消订阅机制)。

---

### 接口定义如下:

```csharp
public interface IEventBus
{
void Subscribe(Action handler) where T : class;
void SubscribeAsync(Func handler) where T : class;
void Unsubscribe(Action handler) where T : class;
void UnsubscribeAsync(Func handler) where T : class;
void Publish(T @event) where T : class;
Task PublishAsync(T @event) where T : class;
}
```

---

### 要求你完成以下任务:

1. 实现 `ThreadSafeEventBus` 类并继承自 `IEventBus`。
2. 解释你在实现中如何处理:
- 多线程并发访问的问题;
- 委托存储与查找;
- 异步事件执行顺序与异常处理;
- 内存泄漏风险控制(可选但加分);
3. 提供一个使用示例,包括多个订阅者和异步事件发布。

---

### 示例代码框架:

```csharp
public class ThreadSafeEventBus : IEventBus
{
private readonly Dictionary _handlers = new();
private readonly object _lock = new();

// TODO: Implement all methods
}
```

---

### ✅ 考察点总结:

| 技术点 | 是否考察 |
|------------------|---------|
| 委托与事件处理 | ✅ |
| 泛型编程 | ✅ |
| 线程安全(锁、并发集合等) | ✅ |
| 异步编程(async/await) | ✅ |
| 设计模式(观察者、中介者) | ✅ |
| 内存管理与垃圾回收 | ✅(加分) |

---

如果你需要这道题的标准答案和详细解释,我也可以为你提供完整的实现方案和设计思路分析。是否需要?

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: c#题例-2025-07-04 09:52:36

下一篇: c#题例-2025-07-03 21:31:44

精华推荐