c#题例-2025-07-02 16:31:47
日期: 2025-07-02 分类: AI写作 79次阅读
当然可以!以下是一道**专家级别**的 C# 程序员逻辑面试题,涉及 **泛型、委托、闭包、线程安全和设计模式**等多个高级知识点:
---
### 🧠 面试题:实现一个线程安全的事件总线(Event Bus)
#### 背景说明:
在大型系统或组件化架构中,`Event Bus` 是一种常见的解耦机制,允许发布/订阅事件模型。你需要设计并实现一个轻量级、线程安全、支持泛型事件的消息总线。
---
### ✅ 要求如下:
1. 实现一个 `IEventBus` 接口,包含以下方法:
- `void Subscribe
订阅某个类型的事件。
- `void Unsubscribe
取消对某个类型事件的订阅。
- `void Publish
发布一个事件,通知所有订阅者。
2. 支持多个事件类型(例如:`UserCreatedEvent`, `OrderShippedEvent`等)。
3. 保证线程安全(多线程下订阅、取消订阅、发布事件是安全的)。
4. 不允许内存泄漏(特别注意避免因委托导致的对象无法释放问题)。
5. (加分项)使用弱引用防止订阅者无法被GC回收。
---
### 📌 示例代码结构:
```csharp
public interface IEventBus
{
void Subscribe
void Unsubscribe
void Publish
}
public class EventBus : IEventBus
{
// TODO: 实现细节
}
```
---
### 💡 提示与考察点:
- 使用 `ConcurrentDictionary` 存储不同类型事件对应的委托列表。
- 使用 `Action
- 多线程并发访问下的正确处理(如并发添加/移除订阅者)。
- 泛型类型处理及反射的合理使用(如果需要)。
- 对委托调用链的理解以及闭包陷阱。
- 是否考虑异步发布事件(可选扩展)。
---
### 🔍 示例使用场景:
```csharp
var bus = new EventBus();
// 订阅
bus.Subscribe
// 发布
bus.Publish(new UserCreatedEvent { UserName = "Alice" });
```
---
### 🎯 考察目的:
这道题不仅测试候选人的基础语言掌握程度,还深入考察其对:
- 多线程编程的理解;
- 委托与闭包的使用;
- 内存管理意识(弱引用);
- 泛型编程能力;
- 设计模式理解(观察者、中介者);
- 架构思维与工程实践能力。
---
如果你需要参考答案或希望我给出完整实现,也可以告诉我 😄
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐