c#题例-2025-07-10 05:18:26
日期: 2025-07-10 分类: AI写作 10次阅读
当然可以!下面是一道**专家级别**的 C# 逻辑面试题,涵盖了 **委托、泛型、闭包、线程安全、异步编程**等多个高级概念,考察候选人对语言特性和多线程编程的理解深度:
---
### 🧠 面试题:实现一个线程安全的缓存装饰器(Thread-Safe Cache Decorator)
#### 背景:
你正在开发一个高性能服务,其中某些计算开销很大但输入参数相同的情况下结果不变。为了提升性能,你需要为这些方法添加缓存机制。
#### 要求:
编写一个通用的 `CacheDecorator
1. 使用泛型支持任意键值类型。
2. 缓存必须是线程安全的(多个线程同时调用时不会重复计算)。
3. 支持缓存过期时间(TTL),每个缓存项在创建后一段时间内有效。
4. 实现懒加载更新策略(即缓存过期后,在下次请求时重新计算)。
5. 不使用任何第三方库或 `System.Runtime.Caching`。
#### 示例代码结构:
```csharp
public class CacheDecorator
{
private readonly Func
private readonly TimeSpan _ttl;
// TODO: 成员变量定义
public CacheDecorator(Func
{
_func = func ?? throw new ArgumentNullException(nameof(func));
_ttl = ttl;
}
public Func
{
return key =>
{
// TODO: 实现缓存逻辑
};
}
}
```
#### 使用示例:
```csharp
var expensiveFunc = new Func
{
Thread.Sleep(1000); // 模拟耗时操作
return x * x;
});
var cachedFunc = new CacheDecorator
.GetCachedFunc();
Console.WriteLine(cachedFunc(5)); // 第一次慢
Console.WriteLine(cachedFunc(5)); // 第二次快
Thread.Sleep(5000);
Console.WriteLine(cachedFunc(5)); // 第三次又慢
```
---
### ✅ 考察点解析:
| 技术点 | 是否考察 |
|--------|----------|
| 委托与闭包 | ✅ |
| 泛型编程 | ✅ |
| 线程安全(并发字典、锁等) | ✅ |
| 缓存机制与 TTL 实现 | ✅ |
| 异步/同步控制 | ⚠️(视是否要求延迟刷新) |
| 性能优化意识 | ✅ |
| 代码结构设计能力 | ✅ |
---
### 💡 提示(供面试官参考):
- 推荐使用 `ConcurrentDictionary
- 每个缓存项应包含 `Value` 和 `Timestamp`。
- 可考虑使用 `Lazy
- 对于更高级的要求,可让候选人实现“后台刷新”机制,而不是阻塞等待重新计算。
---
需要我提供一份完整实现吗?或者你可以试着写一版看看 😄
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐