c#题例-2025-07-30 23:51:54
日期: 2025-07-30 分类: AI写作 16次阅读
当然可以!下面是一道**专家级别**的 C# 程序员逻辑面试题,涉及 **委托、泛型、闭包、线程安全、表达式树**等多个高级概念,考察候选人对语言底层机制的理解和实际应用能力:
---
### 🧠 面试题:实现一个线程安全的缓存工厂(Thread-Safe Cache Factory)
#### 背景:
你需要实现一个泛型缓存工厂方法,可以根据传入的键值对生成缓存数据。缓存的生成逻辑是延迟的,并且需要线程安全地处理重复请求。
---
### 📌 要求:
编写一个静态类 `CacheFactory`,包含一个泛型方法 `CreateConcurrentCache
```csharp
public static class CacheFactory
{
public static Func
Func
IEqualityComparer
where TKey : notnull
{
// 实现该方法
}
}
```
- `valueFactory` 是用于根据 `TKey` 生成 `TValue` 的函数。
- 返回值是一个 `Func
- 缓存必须是线程安全的,即多个线程同时请求相同的键时,`valueFactory` 只应被调用一次。
- 如果 `keyComparer` 为 `null`,则使用默认的比较器。
- 不能使用 `ConcurrentDictionary`(考察手动实现线程安全机制)。
---
### 🧪 示例:
```csharp
var cache = CacheFactory.CreateConcurrentCache
{
Console.WriteLine($"Computing value for key {key}");
return $"Value-{key}";
});
Parallel.For(0, 10, i =>
{
var result = cache(i % 3);
Console.WriteLine(result);
});
```
输出中 `Computing value for key` 应只出现三次(每个键只计算一次)。
---
### 💡 提示与考察点:
- 使用 `lock` 机制 + `Dictionary
- 理解闭包与委托捕获变量的机制。
- 理解泛型约束和 `IEqualityComparer
- 熟悉懒加载策略(如 `Lazy
- 能否识别并避免 **double-check locking** 陷阱。
- 是否考虑缓存膨胀问题(可加分)。
---
### ✅ 扩展加分项(面试官可追问):
- 如果要求支持缓存过期时间该如何设计?
- 如何支持表达式树(`Expression
- 如何在不使用锁的情况下实现高性能缓存?
---
如果你需要这道题的标准答案或实现思路,我可以继续为你提供。是否需要?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐