Young87

SmartCat's Blog

So happy to code my life!

游戏开发交流QQ群号60398951

当前位置:首页 >AI写作

c#题例-2025-07-07 19:18:35

当然可以!下面是一道**专家级别**的 C# 程序员逻辑面试题,它结合了 **委托、泛型、闭包、异步编程模型(TPL)以及设计模式的理解**,非常适合考察一个高级或专家级 C# 开发人员对语言机制和架构思维的掌握。

---

### 🧠 面试题:实现一个“延迟执行管道”`DeferredExecutionPipeline`

#### 💬 题目描述:

请设计并实现一个名为 `DeferredExecutionPipeline` 的泛型类,该类允许用户注册多个异步处理函数(`Func>`),但这些函数并不会立即执行。只有当调用 `.RunAsync(T input)` 方法时,才会按注册顺序依次异步执行所有已注册的处理器,并将前一个处理器的输出作为下一个处理器的输入传递下去。

此外,要求支持“条件性注册”,即在注册处理器时可以附加一个谓词(`Func`),只有当该谓词返回 `true` 时才执行对应的处理器。

---

### ✅ 功能要求如下:

```csharp
var pipeline = new DeferredExecutionPipeline();

pipeline.Add(async x => await Task.FromResult(x + 1));
pipeline.Add(
async x => await Task.FromResult(x * 2),
condition: x => x > 5
);

pipeline.Add(async x => await Task.FromResult(x - 3));

int result = await pipeline.RunAsync(3); // 应该输出:(3+1) -> (4) 不大于5,跳过乘法 -> 4-3 = 1

Console.WriteLine(result); // 输出:1
```

---

### 🎯 考察点:

1. **泛型与委托理解**:如何组织 `Func>` 和 `Func`。
2. **封装与接口设计**:如何优雅地暴露 `.Add(...)` 和 `.RunAsync(...)` 接口。
3. **异步流程控制**:使用 TPL 正确串行执行多个 `Task`。
4. **状态管理与闭包处理**:确保中间状态正确传递,避免闭包捕获错误。
5. **扩展性与可维护性**:结构清晰,便于未来扩展(如添加异常处理、日志等)。

---

### 🚫 不允许使用:

- 使用 `dynamic` 类型。
- 使用反射来实现核心功能。
- 使用第三方库。

---

### 💡 参考答案(实现示例):

```csharp
public class DeferredExecutionPipeline
{
private class PipelineStep
{
public Func> Handler { get; set; }
public Func Condition { get; set; } = _ => true;
}

private readonly List _steps = new();

public void Add(Func> handler, Func condition = null)
{
_steps.Add(new PipelineStep
{
Handler = handler,
Condition = condition ?? (_ => true)
});
}

public async Task RunAsync(T input)
{
var current = input;

foreach (var step in _steps)
{
if (step.Condition(current))
{
current = await step.Handler(current);
}
}

return current;
}
}
```

---

### 📌 进阶讨论(供面试中引导深入):

- 如何支持并发执行某些步骤?
- 如何加入日志记录/性能监控?
- 如何加入异常恢复机制?
- 如果要让这个管道可组合复用(类似中间件),你会怎么设计?

---

如果你希望我再出一道偏向 LINQ 表达式树优化、内存泄漏排查、或者 unsafe 代码相关的题目,也可以告诉我 😊

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: c#题例-2025-07-08 00:51:48

下一篇: c#题例-2025-07-07 06:58:37

精华推荐