文章四:25 .NET Interview Questions I Ask (With Real Answers)

這是一篇針對 .NET 開發者的面試問題集,涵盖了从基础到架構的多个层面,旨在区分出初级與具備實戰能力的開發者。

1. IEnumerable<T> vs IQueryable<T>

IEnumerable<T> 在記憶體中執行查詢(客戶端)。IQueryable<T> 在資料庫上執行查詢(伺服器端)。

// 從資料庫拉回所有 Employees,然後在記憶體中過濾
IEnumerable<Employee> local = dbContext.Employees.ToList().Where(e => e.Age > 30);

// 在資料庫中生成 SQL `WHERE Age > 30`,只拉回符合條件的資料
IQueryable<Employee> remote = dbContext.Employees.Where(e => e.Age > 30);

2. .NET 中的依賴注入 (DI) 如何運作?

DI 是一種设计模式,物件從外部接收其依賴,而非自己實例化。在 .NET 中,通过 Program.cs (或 Startup.cs) 的內建支援來使用。

services.AddScoped<IUserService, UserService>();

3. asyncawait 的目的是什麼?

它們 ermöglicht 异步、非阻塞的程式碼執行。这对高效能 API 和 UI 的響應性至關重要。

public async Task<List<User>> GetUsersAsync() => await _db.Users.ToListAsync();

4un. .NET Core 中服務的不同生命週期是什麼?

5. TaskValueTask 的区别是什么?

ValueTask 為輕量級的異步操作减少記憶體分配。僅當结果通常可同步獲得时才使用它。

6. ASP.NET Core 中的模型驗證如何運作?

使用 [Required], [Range] 等註解或自訂驗證器,並在控制器中檢查 ModelState.IsValid

7. 什麼是 ASP.NET Core 中的中介軟體 (Middleware)?

中介軟體是在一個管道中處理 HTTP 请求/回应的軟體。

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

8. 解釋儲存庫模式 (Repository Pattern) 及其使用時機。

它將資料存取邏輯从業務邏輯中抽象出來。

public interface IUserRepository {
    User GetById(int id);
}

11. EF 中的延遲加載 (Lazy Loading) vs 積極加載 (Eager Loading)。

19. ref, out, 和 in 的區別是什麼?

20. 抽象類別 (Abstract class) 和 介面 (Interface) 的區別?

21. 用簡單的術语解釋 CQRS。

CQRS (命令查詢責任分離) 是一种軟體架構模式,它将系统中的讀取和寫入操作分離到不同的模型中,以提高可擴展性和清晰度。

整篇文章總結與結論

作為資深工程師,我認為這份包含 25 個問題的清單,是一份相當高品質且务实的 .NET 開發者能力檢核表。它成功地涵盖了从 C# 语言基础 (ref/out/in),到 .NET 核心框架 (DI, Middleware, async/await),再到 資料存取 (EF Core, IQueryable) 和 架構设计 (Repository, CQRS) 的广泛领域。

这些问题之所以出色,是因为它们大多不是单纯的记忆题,而是能够探测出开发者是否真正理解了这些技术背后的「為什麼」。例如,IEnumerable vs IQueryable 考验效能意识,Task vs ValueTask 考验对記憶體优化的追求,而抽象類別 vs 介面則考验物件導向设计的思维深度。

我的結論是: 这份面试题集对于招聘方和求职者都极具价值。对于招聘方,它可以有效地筛选出那些不僅会「用」.NET, 而且懂「為什麼」这样用的中高级開發者。对于求职者,它提供了一张清晰的学习地图,指明了從一个合格的 .NET 開發者成长为一名优秀工程师所需掌握的關鍵知识点。