c#题例-2025-08-06 00:51:51
日期: 2025-08-06 分类: AI写作 89次阅读
当然可以!以下是一道**专家级别**的 C# 程序员逻辑面试题,它不仅考察语言特性,还涉及设计模式、多线程、委托/事件、泛型、以及面向对象设计能力,适合用于考察高级工程师的综合理解与实战能力。
---
### 🧠 面试题:实现一个线程安全的事件总线(Event Bus)
#### 📌 背景:
在现代应用程序中(尤其是解耦架构,如 MVVM、CQRS、微服务等),**事件总线(Event Bus)** 是一种常见的设计模式,用于在组件之间发布和订阅事件。
#### ✅ 任务:
请你使用 C# 实现一个**线程安全的事件总线**,满足以下要求:
1. 支持订阅和取消订阅事件。
2. 支持泛型事件(例如:`EventA`, `EventB`)。
3. 支持多个订阅者。
4. 事件处理必须是线程安全的(支持并发发布事件)。
5. 支持同步和异步事件处理(即支持同步和异步的订阅方法)。
6. 支持事件处理的优先级(可选加分项)。
7. 提供一个示例说明如何使用你的事件总线。
---
### 📦 示例接口设计建议(可自定义):
```csharp
public interface IEventBus
{
    void Subscribe
    void SubscribeAsync
    void Unsubscribe
    void Publish
    Task PublishAsync
}
```
---
### 💡 提示与考察点:
- 使用 `ConcurrentDictionary` 或 `Dictionary + lock` 来管理事件订阅。
- 每个事件类型 `T` 应该有其对应的订阅者列表。
- 考虑使用 `WeakReference` 避免内存泄漏(加分项)。
- 异步处理时要处理异常并避免阻塞主线程。
- 使用 `CancellationToken` 控制异步取消(可选加分)。
- 可使用 `System.Reactive` 中的 `IObservable` 来扩展功能(加分)。
- 可使用 `System.Collections.Concurrent` 中的线程安全集合。
- 可以引入优先级队列来实现事件优先级处理。
---
### ✅ 示例用法:
```csharp
class Program
{
    public class MyEvent
    {
        public string Message { get; set; }
    }
    public class MySubscriber
    {
        public void HandleEvent(MyEvent e)
        {
            Console.WriteLine($"Sync handler received: {e.Message}");
        }
        public async Task HandleEventAsync(MyEvent e)
        {
            await Task.Delay(100);
            Console.WriteLine($"Async handler received: {e.Message}");
        }
    }
    static void Main()
    {
        var eventBus = new ThreadSafeEventBus();
        var subscriber = new MySubscriber();
        eventBus.Subscribe
        eventBus.SubscribeAsync
        eventBus.Publish(new MyEvent { Message = "Hello EventBus!" });
        Console.ReadLine();
    }
}
```
---
### 🧾 预期输出:
```
Sync handler received: Hello EventBus!
Async handler received: Hello EventBus!
```
---
### 🧩 加分项(面试官最爱):
- 支持自动取消订阅(如使用 `IDisposable`)。
- 支持基于属性的自动订阅(通过反射)。
- 支持事件过滤、优先级排序。
- 使用 `Expression Trees` 来优化委托调用。
- 使用 `Span
---
如果你需要参考实现或者想看一个完整实现示例,我也可以提供 😎
是否需要我给出一个完整的参考实现?
 除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐

