c#题例-2025-07-22 00:31:46
日期: 2025-07-22 分类: AI写作 13次阅读
当然可以!以下是一道**专家级别**的 C# 程序员逻辑面试题,涉及 **委托、泛型、异步编程、闭包捕获、线程安全** 和 **设计模式** 的综合应用,适合用于考察高级工程师的综合能力。
---
### 🧠 面试题:异步缓存装饰器(Async Cache Decorator)
#### 题目描述:
请实现一个通用的 **异步缓存装饰器类 `AsyncCacheDecorator
要求如下:
1. 使用泛型,支持任意返回类型 `T`。
2. 支持传入一个 `Func
3. 缓存结果应具有 TTL(过期时间)。
4. 多个并发请求在缓存失效时应 **只执行一次原始函数**(防止缓存击穿)。
5. 线程安全。
6. 支持取消操作(`CancellationToken`)。
#### 示例代码结构:
```csharp
public class AsyncCacheDecorator
{
private readonly Func
private readonly TimeSpan _ttl;
// TODO: 实现构造函数和 InvokeAsync 方法
public AsyncCacheDecorator(Func
{
// 实现
}
public async Task
{
// 实现
}
}
```
#### 使用示例:
```csharp
var cachedFunc = new AsyncCacheDecorator
async ct =>
{
Console.WriteLine("Executing real function...");
await Task.Delay(100, ct);
return "Hello World";
},
TimeSpan.FromSeconds(5)
);
// 第一次调用:执行函数
var result1 = await cachedFunc.InvokeAsync(CancellationToken.None);
// 第二次调用(5秒内):从缓存获取,不执行函数
var result2 = await cachedFunc.InvokeAsync(CancellationToken.None);
```
---
### 🧪 考察点解析:
| 考察点 | 说明 |
|--------|------|
| 泛型编程 | 使用泛型支持任意返回值类型 |
| 委托与闭包 | 理解 `Func
| 异步编程 | 使用 `async/await` 正确处理并发和异步资源竞争 |
| 线程安全 | 缓存访问和更新需线程安全(使用 `ConcurrentDictionary` 或 `lock` 等) |
| 缓存击穿 | 多个并发请求应只执行一次原始函数(使用 `Task
| 取消传播 | 正确将 `CancellationToken` 传递给底层函数 |
| 设计模式 | 使用装饰器模式封装功能,体现良好设计能力 |
---
### ✅ 进阶加分项:
- 实现缓存刷新机制(如滑动过期、主动刷新)。
- 添加缓存键支持多个参数(扩展为支持 `Func
- 支持序列化和持久化缓存(如写入 Redis)。
---
如果你需要我提供参考答案或详解实现思路,也可以告诉我 😊
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐