c#题例-2025-08-07 16:58:28
日期: 2025-08-07 分类: AI写作 8次阅读
当然可以!下面是一道**专家级别**的 C# 程序员逻辑面试题,涉及 **泛型、委托、闭包、线程安全、表达式树(Expression Trees)** 和 **设计模式** 的综合运用,适合考察高级开发者的综合能力。
---
### 🧠 面试题:实现一个线程安全、延迟编译的条件过滤器工厂
#### 背景:
你正在开发一个高性能的规则引擎,需要支持动态构建过滤器(`Func
#### 任务:
请实现一个泛型类 `FilterFactory
1. **支持动态添加条件表达式**(使用 `Expression
2. **可以组合多个条件**(AND / OR)。
3. **支持缓存已编译的委托**(避免重复编译表达式树,提升性能)。
4. **线程安全**(多个线程并发使用时不会出错)。
5. **延迟编译**(只在第一次调用时才编译表达式)。
6. **支持注册命名条件**,例如 `"HighPriority"` 或 `"IsLocal"`,供后续组合使用。
---
### 示例用法:
```csharp
var factory = new FilterFactory
factory.Register("IsActive", x => x.IsActive);
factory.Register("IsLocal", x => x.Region == "LOCAL");
var filter1 = factory.And("IsActive", "IsLocal");
var filter2 = factory.Or("IsActive", x => x.Score > 90);
List
// 应用组合条件
var result1 = data.Where(d => filter1.Compile()(d));
var result2 = data.Where(d => filter2.Compile()(d));
```
---
### 要求:
- 实现 `FilterFactory
- 实现 `Register`, `And`, `Or` 方法。
- 使用 `Expression
- 使用线程安全机制(如 `ConcurrentDictionary`, `Lazy
- 可以使用 `Expression.Invoke` 或表达式树拼接实现组合。
---
### 可选加分项:
- 支持嵌套组合(例如:`And(Or("A", "B"), Not("C"))`)。
- 支持缓存组合后的表达式和编译后的委托。
- 支持条件复用、别名机制。
- 提供单元测试验证逻辑正确性。
---
### 💡 提示:
- 可使用 `Expression.AndAlso` / `Expression.OrElse` 来组合条件。
- 使用 `Expression.Lambda
- 使用 `ConcurrentDictionary
- 可以使用 `Lazy
---
是否需要我提供参考答案?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
标签:AI写作
精华推荐