c#题例-2025-07-22 07:18:46
日期: 2025-07-22 分类: AI写作 17次阅读
当然可以!以下是一道**专家级别**的 C# 程序员逻辑面试题,它融合了 **委托、泛型、闭包、线程安全、异步编程** 等高级概念,适合考察候选人的综合能力。
---
### 💼 面试题:构建一个线程安全的事件总线(Event Bus)
#### 🧠 题目描述:
请设计并实现一个轻量级的**线程安全事件总线(Event Bus)**,支持以下功能:
1. 注册事件处理器(订阅者):
- 可以订阅特定类型的事件(泛型)。
- 支持多个订阅者监听同一事件。
- 支持使用 `Func
2. 取消注册事件处理器(取消订阅)。
3. 发布事件:
- 广播事件给所有已注册的处理函数。
- 所有事件处理应**异步执行**,但发布者不等待处理完成(fire-and-forget)。
- 如果处理器是 `Func
4. 保证线程安全:
- 多线程环境下注册、取消注册和发布事件的操作必须是线程安全的。
---
### ✅ 要求:
- 使用 C# 的高级特性实现,如泛型、委托、并发集合等。
- 不使用第三方库(如 `System.Reactive`)。
- 提供一个简单的使用示例。
- 可选:支持事件处理器的优先级或同步/异步混合处理。
---
### 🧪 示例用法:
```csharp
var eventBus = new EventBus();
// 订阅一个事件
eventBus.Subscribe
{
Console.WriteLine($"Received event with message: '{@event.Message}'");
});
// 发布事件
eventBus.Publish(new SampleEvent { Message = "Hello World!" });
```
---
### 🧱 参考答案(部分实现):
```csharp
using System;
using System.Collections.Concurrent;
using System.Threading.Tasks;
public interface IEventBus
{
void Subscribe
void Subscribe
void Unsubscribe
void Unsubscribe
void Publish
}
public class EventBus : IEventBus
{
private readonly ConcurrentDictionary
new ConcurrentDictionary
public void Subscribe
{
GetOrAddHandlerList
}
public void Subscribe
{
GetOrAddHandlerList
}
public void Unsubscribe
{
if (_handlers.TryGetValue(typeof(T), out var list))
{
((ConcurrentBag
}
}
public void Unsubscribe
{
if (_handlers.TryGetValue(typeof(T), out var list))
{
((ConcurrentBag
}
}
public void Publish
{
if (_handlers.TryGetValue(typeof(T), out var handlers))
{
foreach (var handler in (ConcurrentBag
{
if (handler is Action
{
Task.Run(() => actionHandler(@event));
}
else if (handler is Func
{
Task.Run(async () => await asyncHandler(@event).ConfigureAwait(false))
.ConfigureAwait(false);
}
}
}
}
private ConcurrentBag
{
return (ConcurrentBag
}
}
// 示例事件
public class SampleEvent
{
public string Message { get; set; }
}
```
---
### 📌 进阶问题(可选):
1. 如何支持事件处理器的优先级?
2. 如何限制事件处理的最大并发数?
3. 如何实现事件处理的同步/异步混合模式?
4. 如何实现事件的过滤机制(如只处理某个子类型的事件)?
---
这道题目可以考察候选人:
- 对 C# 委托与泛型的理解。
- 对异步编程模型的掌握(async/await + Task)。
- 对线程安全和并发集合的应用。
- 对设计模式的理解(如观察者模式)。
- 编码风格与系统设计能力。
如果你需要我进一步解释或扩展这个实现,也可以告诉我!
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐