คำถามและคำตอบสัมภาษณ์ .Net 40 อันดับแรก (2026)

การเตรียมตัวสำหรับการสัมภาษณ์งานผ่าน .Net จำเป็นต้องมีความชัดเจนในสิ่งที่คุณอาจพบเจอ และการเข้าใจแนวคิดหลักถือเป็นสิ่งสำคัญ เนื่องจากประโยคที่สองต้องมี “คำถามสัมภาษณ์งานผ่าน .Net” เพื่อให้มีความเกี่ยวข้องทันที
การสำรวจการสัมภาษณ์ผ่าน .Net เปิดโอกาสให้อาชีพการงานที่แข็งแกร่ง ซึ่งได้รับการสนับสนุนจากแนวโน้มอุตสาหกรรม การประยุกต์ใช้จริง และประสบการณ์ทางเทคนิคที่ลึกซึ้ง ผู้เชี่ยวชาญที่มีความเชี่ยวชาญเฉพาะด้าน ประสบการณ์ระดับพื้นฐาน และทักษะการวิเคราะห์ที่แข็งแกร่ง จะได้รับประโยชน์จากคำถามและคำตอบยอดนิยม ซึ่งช่วยให้ทั้งผู้สมัครใหม่และผู้มีประสบการณ์สามารถเสริมสร้างทักษะของตนเองในการสนทนาทางเทคนิคระดับพื้นฐาน ระดับสูง ระดับกลาง ระดับอาวุโส และระดับ viva อ่านเพิ่มเติม ...
👉 ดาวน์โหลด PDF ฟรี: คำถามและคำตอบสัมภาษณ์ .Net
1) .NET Framework คืออะไร และมีส่วนประกอบหลักอะไรบ้าง?
.NET Framework เป็นแพลตฟอร์มการพัฒนาซอฟต์แวร์ที่พัฒนาโดย Microsoft ซึ่งมอบสภาพแวดล้อมที่ควบคุมได้สำหรับการสร้าง การปรับใช้ และการรันแอปพลิเคชัน รองรับหลายภาษา เช่น C#, VB.NET และ F# เฟรมเวิร์กนี้รับประกันความสามารถในการทำงานร่วมกันของภาษาและการจัดการหน่วยความจำผ่าน Common Language Runtime (CLR)
ส่วนประกอบสำคัญ:
| ตัวแทน | Descriptไอออน |
|---|---|
| CLR (รันไทม์ภาษาทั่วไป) | จัดการหน่วยความจำ ความปลอดภัย และการดำเนินการของโค้ด |
| FCL (ไลบรารีคลาสเฟรมเวิร์ก) | คอลเลกชันขนาดใหญ่ของคลาส อินเทอร์เฟซ และประเภทค่าที่นำมาใช้ซ้ำได้ |
| ASP.NET | ช่วยให้สามารถพัฒนาแอปพลิเคชันเว็บแบบไดนามิก |
| ADO.NET | ให้บริการการเข้าถึงข้อมูลจากแหล่งข้อมูลต่างๆ |
ตัวอย่าง: แอปพลิเคชัน AC# สามารถใช้ ADO.NET เพื่อเชื่อมต่อกับฐานข้อมูล SQL Server ผ่านสภาพแวดล้อมที่ได้รับการจัดการ ช่วยให้มั่นใจถึงความปลอดภัยและความสามารถในการปรับขนาดได้
2) อธิบายความแตกต่างระหว่าง .NET Framework, .NET Core และ .NET 5/6/7
Microsoft ได้พัฒนา .NET ให้เป็นแพลตฟอร์มรวมเพื่อรองรับการพัฒนาข้ามแพลตฟอร์ม
NET Framework ที่ is Windows-เท่านั้น ในขณะที่ .NET Core เป็นโอเพ่นซอร์สและข้ามแพลตฟอร์ม จาก .NET5 เป็นต้นไป Microsoft รวมเข้าเป็นรันไทม์รวมหนึ่งเดียว
| ลักษณะ | NET Framework ที่ | .NET Core | .NET 5/6/7+ |
|---|---|---|---|
| การสนับสนุนแพลตฟอร์ม | Windows เพียง | ข้ามแพลตฟอร์ม | ข้ามแพลตฟอร์ม |
| โอเพนซอร์ส | ไม่ | ใช่ | ใช่ |
| ประสิทธิภาพ | ปานกลาง | จุดสูง | สูงมาก |
| การใช้งาน | ทั้งระบบ | อยู่ในตัวเอง | เรามีความยืดหยุ่น |
| ตัวอย่างการใช้งาน | แอปองค์กรแบบเก่า | คลาวด์และไมโครเซอร์วิส | แอปพลิเคชันหลายแพลตฟอร์มที่ทันสมัย |
3) Common Language Runtime (CLR) จัดการการทำงานของโค้ดอย่างไร
CLR ทำหน้าที่เป็นกลไกประมวลผลสำหรับแอปพลิเคชัน .NET โดยแปลงโค้ด Intermediate Language (IL) ให้เป็นโค้ดเครื่องเนทีฟผ่านการคอมไพล์แบบ Just-In-Time (JIT) นอกจากนี้ CLR ยังจัดการหน่วยความจำอัตโนมัติโดยใช้ Garbage Collection อีกด้วย
ฟังก์ชันหลักของ CLR:
- การจัดการหน่วยความจำ – จัดสรรและยกเลิกการจัดสรรหน่วยความจำโดยอัตโนมัติ
- การจัดการความปลอดภัย – ตรวจสอบความปลอดภัยในการเข้าถึงรหัสและความปลอดภัยตามบทบาท
- การจัดการข้อยกเว้น – ช่วยให้แน่ใจว่าข้อผิดพลาดรันไทม์ถูกจับและจัดการอย่างถูกต้อง
- การจัดการเธรด – ช่วยให้สามารถดำเนินการโค้ดมัลติเธรดได้อย่างมีประสิทธิภาพ
ตัวอย่าง: เมื่อโปรแกรม .NET ทำงาน CLR จะคอมไพล์โค้ด IL เป็นโค้ดเนทีฟตามความต้องการ เพื่อให้แน่ใจว่ามีการดำเนินการที่เหมาะสมที่สุด
4) คอมไพเลอร์ JIT ใน .NET มีกี่ประเภท?
CLR มีคอมไพเลอร์ Just-In-Time (JIT) สามประเภท:
| ประเภท | Descriptไอออน | ใช้กรณี |
|---|---|---|
| พรี-JIT (NGen) | คอมไพล์โค้ดทั้งหมดในครั้งเดียวเมื่อถึงเวลาปรับใช้ | ลดระยะเวลาในการเริ่มต้นใช้งาน |
| อีโคโน-เจไอที | คอมไพล์เฉพาะวิธีการที่เรียกในระหว่างการรันไทม์และลบทิ้งในภายหลัง | สภาพแวดล้อมที่มีข้อจำกัดด้านหน่วยความจำ |
| JIT ปกติ | รวบรวมโค้ดทีละวิธีในระหว่างการดำเนินการ | รูปแบบการดำเนินการมาตรฐาน |
แนวทาง JIT แต่ละวิธีมีความสมดุลระหว่าง การปฏิบัติ และ การใช้ทรัพยากร ขึ้นอยู่กับบริบทการปรับใช้
5) แอสเซมบลีใน .NET คืออะไร และแตกต่างจากเนมสเปซอย่างไร
An การชุมนุม เป็นหน่วยที่เล็กที่สุดของแอปพลิเคชัน .NET ที่สามารถปรับใช้ได้ ซึ่งประกอบด้วยโค้ดที่คอมไพล์แล้ว เมตาดาต้า และทรัพยากร namespaceในทางกลับกัน เป็นการจัดกลุ่มคลาสเชิงตรรกะที่ใช้สำหรับการจัดระเบียบโค้ด
| การเปรียบเทียบ | Assembly | namespace |
|---|---|---|
| ธรรมชาติ | ไฟล์ทางกายภาพ (DLL/EXE) | การจัดกลุ่มตรรกะ |
| จุดมุ่งหมาย | การปรับใช้และการกำหนดเวอร์ชัน | การจัดระเบียบโค้ด |
| ประกอบด้วย | เมตาดาต้า, แมนิเฟสต์, MSIL | คลาส, อินเทอร์เฟซ |
| ตัวอย่าง | System.Data.dll |
System.Data.SqlClient |
ตัวอย่าง: System.Data.dll แอสเซมบลีสามารถมีเนมสเปซหลายรายการได้ เช่น System.Data และ System.Data.SqlClient.
6) ความแตกต่างระหว่างประเภทค่าและประเภทการอ้างอิงใน .NET คืออะไร
ใน .NET ประเภทค่า เก็บข้อมูลโดยตรงในขณะที่ ประเภทการอ้างอิง เก็บข้อมูลอ้างอิงไปยังที่อยู่หน่วยความจำของข้อมูล
| ฐาน | ประเภทค่า | ประเภทอ้างอิง |
|---|---|---|
| พื้นที่จัดเก็บ | กอง | กอง |
| ประเภทตัวอย่าง | int, float, bool, struct | คลาส, อาร์เรย์, สตริง |
| การทำสำเนา | คัดลอกค่าจริง | คัดลอกข้อมูลอ้างอิง |
| อนุญาตเป็นค่าว่าง | ไม่ | ใช่ |
ตัวอย่าง:
int a = 5; int b = a; → ทั้งสองมีสำเนาแยกกัน
ClassObj x = new ClassObj(); ClassObj y = x; → ทั้งสองหมายถึงวัตถุเดียวกัน
7) การรวบรวมขยะทำงานอย่างไรใน .NET?
Garbage Collection (GC) ใน .NET จะจัดการหน่วยความจำโดยอัตโนมัติโดยการเรียกคืนวัตถุที่ไม่ได้ใช้งาน ซึ่งทำงานใน ชั่วอายุคน เพื่อเพิ่มประสิทธิภาพการทำงาน
GC ตามรุ่น:
- เจน 0: วัตถุที่มีอายุสั้น (เช่น ตัวแปรชั่วคราว)
- เจน 1: วัตถุที่มีอายุปานกลางได้รับการส่งเสริมจาก Gen 0
- เจน 2: วัตถุที่มีอายุยืนยาว (เช่น ข้อมูลคงที่)
ประโยชน์ที่ได้รับ:
- ป้องกันการรั่วไหลของหน่วยความจำ
- ปรับปรุงประสิทธิภาพการใช้งาน
- ช่วยลดความซับซ้อนในการจัดการหน่วยความจำสำหรับนักพัฒนา
ตัวอย่าง: เมื่อไม่มีการอ้างอิงวัตถุอีกต่อไป GC จะลบวัตถุนั้นออกจากฮีป ทำให้หน่วยความจำว่างเพื่อนำมาใช้ซ้ำได้
8) ผู้แทนคืออะไร และแตกต่างจากงานกิจกรรมอย่างไร
A ตัวแทน เป็นประเภทที่แสดงการอ้างอิงถึงวิธีการ ในขณะที่ เหตุการณ์ เป็นกลไกที่ทำให้สามารถสื่อสารระหว่างคลาสผ่านตัวแทนได้
| แง่มุม | ตัวแทน | อีเว้นท์ |
|---|---|---|
| คำนิยาม | วัตถุที่ชี้ไปยังวิธีการ | กลไกการแจ้งเตือน |
| การภาวนา | สามารถโทรได้โดยตรง | เรียกใช้ผ่านสมาชิก |
| ตัวอย่าง | Action<int> myDelegate; |
event EventHandler myEvent; |
ตัวอย่าง:
public delegate void Notify(); public event Notify OnProcessCompleted;
ที่นี่ OnProcessCompleted เป็นเหตุการณ์ที่เกิดขึ้นตาม Notify ผู้แทน
9) ข้อดีและข้อเสียหลักๆ ของการใช้ .NET Core คืออะไร
| ข้อดี | ข้อเสีย |
|---|---|
| การสนับสนุนข้ามแพลตฟอร์ม | เส้นโค้งการเรียนรู้ที่สูงชันสำหรับผู้เริ่มต้น |
| โอเพ่นซอร์สและขับเคลื่อนโดยชุมชน | การสนับสนุนที่จำกัดสำหรับกรอบงานเดิม |
| ประสิทธิภาพสูงด้วยเซิร์ฟเวอร์ Kestrel | ความท้าทายในการย้ายข้อมูลสำหรับโครงการเก่า |
| การฉีดการอ้างอิงในตัว | API บางตัวยังคงพัฒนาอยู่ |
ตัวอย่าง: .NET Core เหมาะอย่างยิ่งสำหรับการสร้างไมโครเซอร์วิสที่ทำงานบนคอนเทนเนอร์ Docker บน Linux และ Windows เซิร์ฟเวอร์
10) อธิบายวงจรชีวิตของหน้า ASP.NET
วงจรชีวิตของเพจ ASP.NET กำหนดวิธีการเริ่มต้น ประมวลผล และแสดงผลเพจ แต่ละขั้นตอนจะมีเหตุการณ์ที่นักพัฒนาสามารถจัดการเพื่อดำเนินการตามตรรกะที่กำหนดเอง
| ระยะ | Descriptไอออน |
|---|---|
| คำขอเพจ | ผู้ใช้ร้องขอหน้าเป็นครั้งแรก |
| เริ่มต้น | กำหนดว่าคำขอนั้นเป็นการโพสต์แบ็คหรือไม่ |
| การเขียนอักษรย่อ | การควบคุมทั้งหมดได้รับการเริ่มต้นแล้ว |
| โหลด | โหลดข้อมูลหน้าและการควบคุมแล้ว |
| การจัดการเหตุการณ์โพสต์แบ็ก | จัดการเหตุการณ์ที่เกิดจากการควบคุม |
| การแสดงผล | หน้าจะถูกแสดงเป็น HTML |
| ปลดปล่อย | ขั้นตอนการทำความสะอาดหลังจากส่งการตอบกลับแล้ว |
ตัวอย่าง: นักพัฒนามักใช้ Page_Load or Page_Init เหตุการณ์ที่จะเริ่มต้นการควบคุมหรือตั้งค่าการผูกข้อมูล
11) Entity Framework (EF) คืออะไร และช่วยลดความซับซ้อนของการดำเนินการฐานข้อมูลได้อย่างไร
Entity Framework (EF) คือ Microsoft's Object-Relational Mapper (ORM) ซึ่งช่วยลดความจำเป็นในการใช้โค้ดเข้าถึงข้อมูลส่วนใหญ่ โดยอนุญาตให้นักพัฒนาสามารถโต้ตอบกับฐานข้อมูลโดยใช้ .NET Objects จัดการการสร้าง SQL การแมปข้อมูล และการจัดการความสัมพันธ์โดยอัตโนมัติ
คุณสมบัติเด่น:
- รองรับ LINQ-to-Entities คำสั่ง
- เสนอ การติดตามการเปลี่ยนแปลงอัตโนมัติ และ ขี้เกียจโหลด.
- ให้ โค้ดก่อน ฐานข้อมูลก่อนและ นางแบบเป็นอันดับแรก วิธีการ
ตัวอย่าง:
using (var context = new AppDbContext())
{
var employees = context.Employees.Where(e => e.Salary > 50000).ToList();
}
ที่นี่ EF จะแปลแบบสอบถาม LINQ เป็น SQL ดึงผลลัพธ์ และแมปผลลัพธ์เหล่านั้น Employee วัตถุโดยอัตโนมัติ
12) อธิบายความแตกต่างระหว่างแนวทาง Code-First, Database-First และ Model-First ใน Entity Framework
| เข้าใกล้ | Descriptไอออน | ใช้กรณี |
|---|---|---|
| โค้ด-เฟิร์ส | กำหนดคลาสและให้ EF สร้างฐานข้อมูล | โครงการกรีนฟิลด์ |
| ฐานข้อมูล-ก่อน | สร้างฐานข้อมูลก่อน จากนั้น EF จะสร้างคลาสเอนทิตี้ | ฐานข้อมูลที่มีอยู่ |
| นางแบบเป็นอันดับแรก | ออกแบบเอนทิตีด้วยภาพ และ EF จะสร้างทั้ง DB และคลาส | การออกแบบที่ขับเคลื่อนด้วยแผนภาพ |
ตัวอย่าง: ในแนวทาง Code-First นักพัฒนาจะสร้างคลาส C# เช่น Customer และ Orderและ EF จะสร้างตารางที่สอดคล้องกันใน SQL Server โดยอัตโนมัติ
13) LINQ คืออะไร และมีข้อดีอะไรบ้างในการพัฒนา .NET?
แบบสอบถามแบบรวมภาษา (LINQ) ช่วยให้สามารถสอบถามข้อมูลจากแหล่งต่างๆ (อ็อบเจ็กต์, XML, ฐานข้อมูล) โดยใช้รูปแบบไวยากรณ์ที่สอดคล้องกันโดยตรงภายใน C# หรือ VB.NET
มันช่วยเพิ่ม การอ่าน, ความปลอดภัยประเภทและ การตรวจสอบเวลาคอมไพล์.
ข้อดีของ LINQ:
- รูปแบบไวยากรณ์รวมสำหรับแหล่งข้อมูลที่แตกต่างกัน
- ลดความซับซ้อนของโค้ด
- มอบ IntelliSense และการตรวจสอบเวลาคอมไพล์
- รองรับการดำเนินการที่เลื่อนออกไปเพื่อเพิ่มประสิทธิภาพการทำงาน
ตัวอย่าง:
var highSalaries = employees.Where(e => e.Salary > 70000)
.OrderBy(e => e.Name)
.ToList();
14) ความแตกต่างระหว่าง IEnumerable, ICollection และ IQueryable ใน .NET คืออะไร
| อินเตอร์เฟซ | ประเภทการดำเนินการ | ใช้กรณี | ความแตกต่างที่สำคัญ |
|---|---|---|---|
| IEnumerable | การวนซ้ำในหน่วยความจำ | คอลเลกชันท้องถิ่น | ดำเนินการบนฝั่งไคลเอ็นต์ |
| ไอคอลเล็คชั่น | ในหน่วยความจำ รองรับการเพิ่ม/ลบ | ปรับเปลี่ยนคอลเลกชัน | ขยาย IEnumerable ด้วยการจัดการคอลเลกชัน |
| ฉันสามารถสอบถามได้ | การดำเนินการที่เลื่อนออกไป (ระยะไกล) | LINQ ถึง SQL/EF | ดำเนินการที่ระดับฐานข้อมูล |
ตัวอย่าง: การใช้ IQueryable ใน Entity Framework เปิดใช้งานการกรองด้านฐานข้อมูล ซึ่งมีประสิทธิภาพมากกว่าการใช้ IEnumerable ในความทรงจำ.
15) การเขียนโปรแกรมแบบอะซิงโครนัสคืออะไร และอะซิงโครนัสและอะรอทำงานอย่างไรใน .NET
การเขียนโปรแกรมแบบอะซิงโครนัสใน .NET ช่วยให้สามารถดำเนินการหลายอย่างได้โดยไม่บล็อกเธรดหลัก จึงทำให้ตอบสนองได้ดีขึ้นในแอปพลิเคชันเว็บและเดสก์ท็อป
คีย์ Concepts:
asyncทำเครื่องหมายวิธีการเป็นแบบอะซิงโครนัสawaitระงับการดำเนินการวิธีการจนกว่างานที่รอจะเสร็จสิ้น- ป้องกันการขาดเธรดและการหยุดทำงานของ UI
ตัวอย่าง:
public async Task<int> GetDataAsync()
{
var data = await httpClient.GetStringAsync("https://api.example.com");
return data.Length;
}
ประโยชน์: เธรดหลักยังคงว่างอยู่เพื่อจัดการงานอื่นๆ ในขณะที่การดำเนินการ I/O ดำเนินการในเบื้องหลัง
16) Dependency Injection (DI) คืออะไร และเหตุใดจึงสำคัญใน .NET Core
Dependency Injection (DI) เป็นรูปแบบการออกแบบที่ช่วยให้ ข้อต่อหลวม ระหว่างคลาสโดยการฉีดการอ้างอิงแทนที่จะสร้างขึ้นภายใน
ข้อดี:
- ปรับปรุงความสามารถในการทดสอบ
- Promoการออกแบบโมดูลาร์
- ทำให้การจัดการการกำหนดค่าง่ายขึ้น
ตัวอย่าง:
public class OrderService
{
private readonly IEmailService _emailService;
public OrderService(IEmailService emailService)
{
_emailService = emailService;
}
}
ใน .NET Core DI ถูกสร้างขึ้นในกรอบงานผ่าน IServiceCollection ภาชนะที่ใช้ใน Startup.cs.
17) คุณจัดการข้อยกเว้นในแอปพลิเคชัน .NET ได้อย่างมีประสิทธิภาพอย่างไร
การจัดการข้อยกเว้นช่วยให้มั่นใจว่าข้อผิดพลาดรันไทม์ได้รับการจัดการอย่างถูกต้องโดยไม่ทำให้แอปพลิเคชันหยุดทำงาน กลไกหลักคือ ลองจับในที่สุด กลุ่ม
ตัวอย่าง:
try
{
int result = 10 / divisor;
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero.");
}
finally
{
Console.WriteLine("Operation completed.");
}
ปฏิบัติที่ดีที่สุด:
- ควรจับข้อยกเว้นที่เฉพาะเจาะจงก่อนเสมอ
- ใช้
finallyสำหรับตรรกะการล้างข้อมูล - หลีกเลี่ยงการบล็อกจับที่ว่างเปล่า
- ใช้การจัดการข้อยกเว้นทั่วโลกใน ASP.NET Core (
UseExceptionHandler()มิดเดิลแวร์)
18) แนวทางปฏิบัติด้านความปลอดภัยที่สำคัญในแอปพลิเคชัน .NET มีอะไรบ้าง
ความปลอดภัย ใน .NET ครอบคลุมหลายชั้น รวมถึงการตรวจสอบสิทธิ์ การอนุญาต การเข้ารหัสข้อมูล และการตรวจสอบอินพุต
แนวทางปฏิบัติที่สำคัญ:
- ใช้ เอกลักษณ์ ASP.NET สำหรับการตรวจสอบสิทธิ์และการจัดการบทบาท
- ทำให้สามารถ HTTPS (SSL/TLS) เพื่อการเข้ารหัสข้อมูล
- สมัครสมาชิก การตรวจสอบข้อมูลและแบบสอบถามแบบพารามิเตอร์ เพื่อป้องกันการแทรก SQL
- ใช้ API การปกป้องข้อมูล สำหรับการรักษาความปลอดภัยคุกกี้และโทเค็น
- Implement JWT (โทเค็นเว็บ JSON) สำหรับการตรวจสอบสิทธิ์แบบไร้สถานะใน API
ตัวอย่าง: การตรวจสอบสิทธิ์ตาม JWT มักใช้ในไมโครเซอร์วิสเพื่อตรวจสอบตัวตนของผู้ใช้โดยไม่ต้องรักษาสถานะเซสชัน
19) อธิบายความแตกต่างระหว่างคลาสแบบนามธรรมและอินเทอร์เฟซใน C#
| ลักษณะ | คลาสนามธรรม | อินเตอร์เฟซ |
|---|---|---|
| การดำเนินงาน | สามารถมีการนำวิธีการไปใช้งานได้ | การประกาศเท่านั้น (C# 8 อนุญาตให้ใช้ค่าเริ่มต้น) |
| มรดกหลายรายการ | ไม่ได้รับการสนับสนุน | ที่สนับสนุน |
| ตัวสร้าง | สามารถมี constructor ได้ | ไม่สามารถมี constructor ได้ |
| ใช้กรณี | คลาสฐานที่มีโค้ดที่ใช้ร่วมกัน | สัญญาสำหรับคลาสที่ไม่เกี่ยวข้องหลายคลาส |
ตัวอย่าง:
abstract class Animal { public abstract void Speak(); }
interface IPet { void Play(); }
A Dog คลาสสามารถสืบทอดจาก Animal และนำไปใช้ IPet พร้อมกัน
20) รูปแบบการออกแบบที่ใช้กันทั่วไปใน .NET มีอะไรบ้าง และมีประโยชน์อะไรบ้าง?
รูปแบบการออกแบบได้รับการพิสูจน์แล้วว่าเป็นวิธีแก้ปัญหาการออกแบบซอฟต์แวร์ที่เกิดขึ้นซ้ำๆ พวกมันช่วยเพิ่มประสิทธิภาพ ความสามารถในการบำรุงรักษา ความสามารถในการปรับขนาด และความสามารถในการอ่าน.
| ประเภทรูปแบบ | ตัวอย่าง | Descriptไอออน |
|---|---|---|
| สร้างสรรค์ | ซิงเกิลตัน โรงงาน | จัดการการสร้างวัตถุ |
| โครงสร้าง | อะแดปเตอร์, เดคคอร์เรเตอร์ | รวมคลาสหรืออ็อบเจ็กต์เข้าด้วยกัน |
| เกี่ยวกับพฤติกรรม | ผู้สังเกตการณ์ กลยุทธ์ | กำหนดการสื่อสารวัตถุ |
ตัวอย่าง: ใน .NET Core ลายซิงเกิล มักใช้สำหรับบริการที่ใช้ร่วมกัน (เช่น การบันทึก) โดยการลงทะเบียนด้วย AddSingleton() ในการฉีดพึ่งพา
21) .NET MAUI คืออะไร และแตกต่างจาก Xamarin?
.NET MAUI (UI แอปหลายแพลตฟอร์ม) เป็นวิวัฒนาการของ Xamarin.แบบฟอร์ม ช่วยให้นักพัฒนาสามารถสร้าง แอปพลิเคชันข้ามแพลตฟอร์ม สำหรับ AndroidIOS, macOSและ Windows จากฐานรหัสที่ใช้ร่วมกันเพียงอันเดียว
| ลักษณะ | Xamarin.แบบฟอร์ม | .NET เมา |
|---|---|---|
| ฐานกรอบ | .NET Framework / โมโน | .NET 6+ แบบรวม |
| Archiเทคเจอร์ | โครงการเฉพาะแพลตฟอร์ม | โครงสร้างโครงการเดี่ยว |
| ประสิทธิภาพ | ปานกลาง | ปรับปรุงด้วยรันไทม์ .NET |
| โหลดซ้ำสุดฮอต | ถูก จำกัด | รองรับการโหลดซ้ำแบบร้อนเต็มรูปแบบ |
ตัวอย่าง: โสด .NET MAUI โครงการสามารถรวมโค้ดเฉพาะแพลตฟอร์มไว้ในโฟลเดอร์เช่น Platforms/Android or Platforms/iOSในขณะที่แบ่งปันส่วนประกอบ UI ทั่วไปข้ามแพลตฟอร์ม
ประโยชน์: ทำให้การพัฒนาข้ามแพลตฟอร์มง่ายขึ้นและปรับปรุงการบำรุงรักษา
22) Blazor คืออะไร และมีรูปแบบโฮสติ้งที่แตกต่างกันอย่างไรบ้าง?
เสื้อคลุม เป็นกรอบงานสำหรับสร้าง UI เว็บแบบโต้ตอบโดยใช้ C# แทน Javaสคริปต์ ช่วยให้สามารถพัฒนาเว็บแบบฟูลสแต็กด้วย .NET
| รูปแบบการโฮสต์ | Descriptไอออน | สถานที่ดำเนินการ |
|---|---|---|
| เซิร์ฟเวอร์ Blazor | ทำงานบนเซิร์ฟเวอร์ ส่งการอัปเดต UI ผ่านทาง SignalR | เซิร์ฟเวอร์ |
| บลาเซอร์เว็บAssembly | รันฝั่งไคลเอนต์ในเบราว์เซอร์โดยใช้เว็บAssembly | เบราว์เซอร์ |
| เบลเซอร์ ไฮบริด (MAUI) | ผสมผสาน UI เว็บกับแอปเดสก์ท็อป/มือถือดั้งเดิม | แอปท้องถิ่น |
ตัวอย่าง: แอปพลิเคชัน Blazor Server เหมาะสำหรับแดชบอร์ดขององค์กรที่ต้องการการควบคุมแบบรวมศูนย์ที่ปลอดภัย ในขณะที่ Blazor WebAssembly เหมาะกับการใช้งานแบบออฟไลน์
23) ไมโครเซอร์วิสใน .NET คืออะไร และมีข้อดีเหนือสถาปัตยกรรมแบบโมโนลิธิกอย่างไร
สถาปัตยกรรมไมโครเซอร์วิสจะแยกแอปพลิเคชันออกเป็น บริการอิสระที่สามารถปรับใช้ได้โดยแต่ละแห่งจะรับผิดชอบความสามารถทางธุรกิจที่เฉพาะเจาะจง
| แง่มุม | เป็นเสาหิน | Microservices |
|---|---|---|
| การใช้งาน | หน่วยเดียว | บริการอิสระ |
| scalability | แอปทั้งหมดปรับขนาด | มาตราส่วนต่อบริการ |
| กองเทคโนโลยี | คงที่ | การสนับสนุนหลายภาษา |
| การแยกตัวไม่เป็นผล | ต่ำ | จุดสูง |
ข้อดี:
- การปรับใช้และการปรับขนาดแบบอิสระ
- การแยกข้อผิดพลาดที่ง่ายขึ้นและการกู้คืนที่รวดเร็วยิ่งขึ้น
- เปิดใช้งาน CI/CD pipeline และแนวทางปฏิบัติ DevOps
ตัวอย่าง: ระบบอีคอมเมิร์ซที่ใช้ .NET อาจแยกออกจากกัน OrderService, InventoryServiceและ PaymentService ในรูปแบบบริการ REST หรือ gRPC แต่ละรายการ
24) gRPC ช่วยปรับปรุงการสื่อสารในไมโครเซอร์วิส .NET เมื่อเทียบกับ REST API ได้อย่างไร
gRPC (การเรียกขั้นตอนระยะไกลของ Google) เป็นกรอบการทำงานการสื่อสารประสิทธิภาพสูงโดยใช้ โปรโตคอล Buffers (โปรโตบัฟ) สำหรับการเรียงลำดับข้อความ
| ลักษณะ | REST API | ก.ร.ป |
|---|---|---|
| รูปแบบ | JSON | ไบนารี (โปรโตบัฟ) |
| ความเร็ว | ช้าลงเนื่องจากการแยกวิเคราะห์ JSON | เร็วขึ้นมาก |
| การสื่อสาร | HTTP 1.1 | HTTP/2 (แบบสองทิศทาง) |
| สัญญา | OpenAPI | ไฟล์ .proto |
| ใช้กรณี | เว็บแอพ | การสื่อสารบริการภายใน |
ตัวอย่าง: ใน .NET บริการ gRPC ถูกกำหนดโดยใช้ .proto ไฟล์และคอมไพล์เป็นโค้ด C# ช่วยให้การส่งข้อความรวดเร็วและกระชับยิ่งขึ้น เหมาะสำหรับไมโครเซอร์วิสและ IoT
25) แนวทางปฏิบัติที่ดีที่สุดสำหรับการเพิ่มประสิทธิภาพการทำงานในแอปพลิเคชัน .NET มีอะไรบ้าง
การปรับแต่งประสิทธิภาพเป็นทักษะสำคัญสำหรับนักพัฒนาซอฟต์แวร์ระดับสูง การปรับแต่งประสิทธิภาพควรมุ่งเน้นไปที่ประสิทธิภาพของโค้ด การจัดการหน่วยความจำ และการโต้ตอบกับฐานข้อมูล
ปฏิบัติที่ดีที่สุด:
- ใช้การเขียนโปรแกรมแบบอะซิงโครนัส (
async/await) เพื่อป้องกันการบล็อค - แคชข้อมูลที่ใช้บ่อย การใช้ MemoryCache หรือ Redis
- ลดการจัดสรรให้เหลือน้อยที่สุด และการใช้งาน
Span<T>หรือการรวบรวมข้อมูลขนาดใหญ่ - รหัสโปรไฟล์ โดยใช้เครื่องมือเช่น dotTrace หรือ PerfView
- เพิ่มประสิทธิภาพการสอบถาม EF สีสดสวย
AsNoTracking()สำหรับข้อมูลที่อ่านอย่างเดียว
ตัวอย่าง:
var users = context.Users.AsNoTracking().ToList();
วิธีนี้จะช่วยหลีกเลี่ยงการติดตามค่าใช้จ่ายเพิ่มเติม และปรับปรุงประสิทธิภาพสำหรับชุดผลลัพธ์ขนาดใหญ่
26) มีเทคนิคการแคชอะไรบ้างใน .NET Core?
การแคชช่วยปรับปรุงประสิทธิภาพโดยการจัดเก็บข้อมูลชั่วคราวเพื่อนำมาใช้ซ้ำ
| ประเภทแคช | Descriptไอออน | ตัวอย่างการใช้งาน |
|---|---|---|
| แคชในหน่วยความจำ | จัดเก็บข้อมูลในหน่วยความจำเซิร์ฟเวอร์ | IMemoryCache |
| แคชแบบกระจาย | แคชที่ใช้ร่วมกันระหว่างเซิร์ฟเวอร์ | IDistributedCache, เรดิส |
| การแคชการตอบสนอง | แคชการตอบสนอง HTTP | ResponseCache คุณลักษณะ |
| การแคชเอาต์พุต | นำเอาท์พุตที่เรนเดอร์เต็มรูปแบบกลับมาใช้ใหม่ | มิดเดิลแวร์ ASP.NET Core |
ตัวอย่าง:
_cache.Set("EmployeeList", employeeData, TimeSpan.FromMinutes(30));
สำหรับการแคชแบบกระจาย Redis มักใช้สำหรับสภาพแวดล้อมที่มีการโหลดสมดุล
27) คุณนำการบันทึกและการตรวจสอบไปใช้ในแอปพลิเคชัน .NET Core ได้อย่างไร
การบันทึกข้อมูลเป็นสิ่งสำคัญสำหรับการติดตามปัญหาและตรวจสอบสุขภาพของระบบ .NET Core มีการแยกส่วนการบันทึกข้อมูลในตัวที่สามารถบูรณาการกับผู้ให้บริการบุคคลที่สามได้
เทคนิค:
- ใช้ ไอล็อกเกอร์ อินเทอร์เฟซสำหรับการบันทึกข้อมูลแบบมีโครงสร้าง
- ผสานรวมกับ เซอร์ล็อก, เอ็นล็อกหรือ Application Insights.
- จัดเก็บบันทึกในระบบรวมศูนย์เช่น ELK (Elastic Stack).
ตัวอย่าง:
public class UserController
{
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
}
เครื่องมือตรวจสอบ:
- Azure Application Insights
- โพรมีธีอุส + กราฟาน่า
- นิวเรลิค / ดาต้าด็อก
28) ตัวเลือกการปรับใช้หลักที่มีให้สำหรับแอปพลิเคชัน .NET มีอะไรบ้าง
แอปพลิเคชัน .NET สามารถปรับใช้ได้โดยใช้วิธีการยืดหยุ่นหลายวิธี:
| ประเภทการทำให้ใช้งานได้ | Descriptไอออน | ใช้กรณี |
|---|---|---|
| การปรับใช้ที่ขึ้นอยู่กับกรอบงาน (FDD) | ต้องมีการติดตั้ง .NET Runtime บนโฮสต์ | เซิฟเวอร์ที่ใช้ร่วมกัน |
| การปรับใช้แบบครบวงจร (SCD) | รวม .NET runtime ในแพ็คเกจ | แอปคลาวด์แบบแยกส่วน |
| คอนเทนเนอร์นักเทียบท่า | แพ็กเกจแอปพร้อมการอ้างอิง | ไมโครเซอร์วิสและ CI/CD |
| Azure บริการแอป | โฮสติ้งบนคลาวด์สำหรับแอปบนเว็บ | แอป SaaS ที่ปรับขนาดได้ |
ตัวอย่าง: การปรับใช้ .NET 8 Web API เป็นคอนเทนเนอร์ Docker ช่วยเพิ่มความสามารถในการพกพาและการทำงานอัตโนมัติของ CI/CD
29) เป็นยังไงบ้าง Azure บูรณาการกับแอพพลิเคชั่น .NET สำหรับการพัฒนาบนคลาวด์หรือไม่?
Azure มอบการบูรณาการระดับชั้นนำกับ .NET สำหรับการสร้าง การปรับใช้ และการจัดการแอปพลิเคชันเนทีฟบนคลาวด์
คีย์ Azure บริการสำหรับ .NET:
- Azure บริการแอป – โฮสต์แอปพลิเคชันเว็บ
- Azure ฟังก์ชั่น – การประมวลผลแบบไร้เซิร์ฟเวอร์สำหรับงานพื้นหลัง
- Azure ฐานข้อมูล SQL – ฐานข้อมูลเชิงสัมพันธ์ที่ได้รับการจัดการอย่างเต็มรูปแบบ
- Azure รถบัสบริการ – การจัดคิวข้อความสำหรับระบบแบบกระจาย
- Azure คีย์ Vault – รักษาความลับและข้อมูลประจำตัวให้ปลอดภัย
ตัวอย่าง: ไมโครเซอร์วิส .NET อาจใช้ Azure คีย์ Vault เพื่อจัดเก็บสตริงการเชื่อมต่อฐานข้อมูลอย่างปลอดภัยในขณะที่ใช้งานผ่าน Azure ไปป์ไลน์ CI/CD ของ DevOps
30) กรอบการทดสอบใดบ้างที่ใช้กันทั่วไปใน .NET และแตกต่างกันอย่างไร?
การทดสอบช่วยให้มั่นใจถึงความน่าเชื่อถือและความสามารถในการบำรุงรักษาของแอปพลิเคชัน .NET รองรับกรอบงานการทดสอบหลายแบบ
| กรอบ | Descriptไอออน | Key Features |
|---|---|---|
| เอ็กซ์ยูนิต | เครื่องมือทดสอบโอเพ่นซอร์สที่ทันสมัย | การดำเนินการทดสอบแบบคู่ขนาน |
| หน่วย | โตเต็มที่ ใช้กันอย่างแพร่หลายในองค์กรต่างๆ | การทดสอบตามคุณลักษณะ |
| เอ็มเอสเทสต์ | Microsoftกรอบการทำงานการทดสอบดั้งเดิมของ | การบูรณาการกับ Visual Studio |
ตัวอย่าง:
[Fact]
public void Add_ReturnsSum()
{
Assert.Equal(4, Calculator.Add(2, 2));
}
ปฏิบัติที่ดีที่สุด:
- ใช้ การล้อเลียน (Moq) สำหรับการอ้างอิง
- เก็บรักษา การครอบคลุมการทดสอบสูง ด้วยการบูรณาการ CI/CD
- เพิ่ม การทดสอบบูรณาการ สำหรับการตรวจสอบ API
31) ฟีเจอร์ใหม่ที่สำคัญที่เปิดตัวใน .NET 8 มีอะไรบ้าง?
.NET 8 แนะนำ การเพิ่มประสิทธิภาพการทำงาน, AOT ดั้งเดิมและปรับปรุง เมฆพื้นเมือง ความสามารถ มันยังคงดำเนินต่อไป Microsoftเป้าหมายของเราคือการสร้างระบบนิเวศแบบรวมศูนย์และข้ามแพลตฟอร์ม
ไฮไลท์สำคัญ:
- AOT ดั้งเดิม (การรวบรวมล่วงหน้า): ลดเวลาในการเริ่มต้นระบบและการใช้หน่วยความจำ
- การปรับปรุง ASP.NET Core: การกำหนดเส้นทางที่รวดเร็วขึ้นและการรองรับ HTTP/3 ที่ได้รับการปรับปรุง
- แบลซอร์ ยูไนเต็ด: รวมฝั่งเซิร์ฟเวอร์และเว็บAssembly โมเดลสำหรับแอปไฮบริด
- เพิ่มประสิทธิภาพการทำงาน: การทำงานของ EF Core และ LINQ เร็วขึ้น 20–30%
- การสนับสนุน MAUI ขยาย: ปรับปรุงเครื่องมือสำหรับ UI ข้ามแพลตฟอร์ม
ตัวอย่าง: AOT ดั้งเดิมอนุญาตให้มีไฟล์ปฏิบัติการขนาดเล็กที่แยกจากกัน เหมาะสำหรับไมโครเซอร์วิสและการปรับใช้แบบคอนเทนเนอร์
32) การคอมไพล์แบบ Ahead-of-Time (AOT) ใน .NET คืออะไร และควรใช้เมื่อใด
การรวบรวม AOT คอมไพล์ .NET Intermediate Language (IL) ล่วงหน้าเป็นโค้ดเนทีฟก่อนรันไทม์ ปรับปรุงประสิทธิภาพการเริ่มต้นระบบ และลดการพึ่งพาคอมไพเลอร์ JIT
| ประเภท | Descriptไอออน | กรณีใช้งานที่ดีที่สุด |
|---|---|---|
| JIT (ทันเวลา) | คอมไพล์ IL ในระหว่างการรันไทม์ | แอปเดสก์ท็อปหรือเซิร์ฟเวอร์ |
| AOT (ก่อนเวลา) | คอมไพล์ IL ก่อนรันไทม์ | ไมโครเซอร์วิส, IoT, ระบบหน่วงเวลาต่ำ |
ข้อดี:
- เวลาเริ่มต้นใช้งานที่รวดเร็วยิ่งขึ้น
- ขนาดหน่วยความจำเล็กลง
- ประสิทธิภาพของคอนเทนเนอร์ดีขึ้น
ตัวอย่าง:
dotnet publish -r linux-x64 -p:PublishAot=true
คำสั่งนี้จะสร้างไฟล์ไบนารีที่คอมไพล์โดย AOT ดั้งเดิมสำหรับ Linux
33) นักพัฒนา .NET สามารถบูรณาการความสามารถของ AI หรือ ML เข้ากับแอปพลิเคชันได้อย่างไร
การบูรณาการ AI ใน .NET สามารถทำได้โดยใช้ เอ็มแอล.เน็ต, Azure บริการองค์ความรู้หรือห้องสมุดภายนอก
วิธีการ:
- ML.NET: สร้างและฝึกอบรมโมเดลการเรียนรู้ของเครื่องโดยตรงใน .NET
- Azure บริการทางปัญญา: ใช้ API ที่ได้รับการฝึกอบรมล่วงหน้าสำหรับการมองเห็น การพูด และภาษา
- รันไทม์ ONNX: รันโมเดลที่ได้รับการฝึกอบรมใน Python/TensorFlow ภายในแอป .NET
- การรวม API ของ OpenAI: เข้าถึง AI เชิงสร้างสรรค์ (เช่น โมเดล GPT) อย่างปลอดภัยผ่าน REST
ตัวอย่าง (ML.NET):
var mlContext = new MLContext();
var model = mlContext.Model.Load("model.zip", out _);
ใช้กรณี: การคาดการณ์การเปลี่ยนแปลงของผู้ใช้ การตรวจจับความผิดปกติ หรือคำแนะนำอัจฉริยะในระบบองค์กร
34) ความแตกต่างหลักระหว่าง REST API และ Minimal API ใน .NET 8 คืออะไร
API ขั้นต่ำ มอบวิธีน้ำหนักเบาในการสร้าง HTTP API ด้วยโค้ดสำเร็จรูปขั้นต่ำ
| ลักษณะ | REST API (แบบใช้ตัวควบคุม) | API ขั้นต่ำ |
|---|---|---|
| โครงสร้าง | ใช้ตัวควบคุมและการกำหนดเส้นทาง | คำจำกัดความเส้นทางอินไลน์ |
| การติดตั้ง | จำเป็นต้องมีคุณลักษณะและมิดเดิลแวร์ | เร็วขึ้นและง่ายขึ้น |
| ประสิทธิภาพ | ปานกลาง | เร็วขึ้นเล็กน้อย (ค่าใช้จ่ายน้อยลง) |
| ใช้กรณี | API ขององค์กรที่ซับซ้อน | ไมโครเซอร์วิสหรือ API ขนาดเล็ก |
ตัวอย่าง:
app.MapGet("/hello", () => "Hello, World!");
API ขั้นต่ำเหมาะอย่างยิ่งสำหรับไมโครเซอร์วิสและแอปพลิเคชันที่ไม่มีเซิร์ฟเวอร์เนื่องจากความเรียบง่ายและประสิทธิภาพ
35) หลักการสำคัญของการเขียนโค้ดอย่างปลอดภัยในแอปพลิเคชัน .NET คืออะไร
จะต้องบังคับใช้ความปลอดภัยตั้งแต่ขั้นตอนการพัฒนา .NET มีกลไกในตัวและแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียนโค้ดที่ปลอดภัย
หลักการสำคัญ:
- ตรวจสอบข้อมูลอินพุตทั้งหมด: ป้องกันการโจมตีแบบฉีด
- ใช้แบบสอบถามแบบพารามิเตอร์: หลีกเลี่ยงการฉีด SQL
- เข้ารหัสข้อมูลที่ละเอียดอ่อน: ใช้
System.Security.Cryptography. - จัดเก็บความลับอย่างปลอดภัย: ใช้ Azure คีย์ Vault หรือความลับของผู้ใช้
- ใช้การตรวจสอบและอนุญาต: Implement
ASP.NET Identityหรือโทเค็น JWT - ใช้หลักการ HTTPS และ CORS: ป้องกันการรั่วไหลของข้อมูลและการเข้าถึงโดยไม่ได้รับอนุญาต
ตัวอย่าง:
using (var cmd = new SqlCommand("SELECT * FROM Users WHERE Id = @id", conn))
{
cmd.Parameters.AddWithValue("@id", userId);
}
36) คุณใช้เครื่องมือสร้างโปรไฟล์และวินิจฉัยเพื่อเพิ่มประสิทธิภาพการทำงานของ .NET ได้อย่างไร
การสร้างโปรไฟล์ช่วยระบุปัญหาคอขวดด้านประสิทธิภาพใน CPU, หน่วยความจำ หรือ I/O
เครื่องมือยอดนิยม:
| เครื่องมือ | จุดมุ่งหมาย |
|---|---|
| dotTrace / dotMemory | การสร้างโปรไฟล์และการตรวจจับการรั่วไหลของหน่วยความจำ |
| เพอร์ฟวิว | การวิเคราะห์ประสิทธิภาพระดับต่ำ |
| ดอทเน็ตเทรซ | การติดตามบรรทัดคำสั่ง |
| Application Insights | การวัดระยะไกลแบบเรียลไทม์ในการผลิต |
วิธีการ:
- ระบุคอขวดโดยใช้ตัวนับประสิทธิภาพ
- เส้นทางโค้ดโปรไฟล์และการจัดสรรหน่วยความจำ
- เพิ่มประสิทธิภาพการค้นหา LINQ และลดการสร้างวัตถุ
ตัวอย่าง: ใช้ dotnet-counters monitor เพื่อติดตามเมตริกแบบเรียลไทม์เช่นกิจกรรม CPU และ GC
37) แนวทางปฏิบัติ DevOps ที่มีประสิทธิผลสำหรับแอปพลิเคชัน .NET มีอะไรบ้าง
การบูรณาการ DevOps รับประกันการส่งมอบที่รวดเร็วยิ่งขึ้นและคุณภาพที่ดีขึ้นผ่านระบบอัตโนมัติและการทำงานร่วมกัน
แนวทางปฏิบัติที่สำคัญ:
- ท่อ CI/CD: ใช้ GitHub Actions หรือ Azure DevOps สำหรับการสร้างและการปรับใช้แบบอัตโนมัติ
- โครงสร้างพื้นฐานเป็นรหัส (IaC): ปรับใช้ด้วยเทมเพลต ARM, Terraform หรือ Bicep
- การทดสอบอัตโนมัติ: รวม xUnit/NUnit ในเวิร์กโฟลว์ CI
- คอนเทนเนอร์: ใช้ Docker Image และ Kubernetes (AKS)
- การตรวจสอบ: การวัดระยะไกลอย่างต่อเนื่องด้วย Application Insights
ตัวอย่าง: ท่อ CI/CD ใน Azure DevOps สามารถสร้าง ทดสอบ และปรับใช้ .NET API ได้ Azure App Service จะทำงานโดยอัตโนมัติเมื่อมีการคอมมิต Git
38) คุณจะมั่นใจได้อย่างไรว่าระบบแบบกระจายที่ใช้ .NET นั้นมีความสามารถในการปรับขนาดได้และทนต่อข้อผิดพลาด
ความสามารถในการปรับขนาดและการทนต่อข้อผิดพลาดสามารถทำได้โดยใช้หลักการออกแบบแบบกระจายและรูปแบบที่ยืดหยุ่น
กลยุทธ์:
- การปรับขนาดแนวนอน: ปรับใช้อินสแตนซ์หลายตัวไว้ด้านหลังตัวปรับสมดุลการโหลด
- รูปแบบเบรกเกอร์: ใช้ไลบรารี Polly เพื่อจัดการกับข้อผิดพลาดชั่วคราว
- การแคชและการจัดคิว: ใช้ Redis และ Azure บัสบริการสำหรับการประมวลผลแบบอะซิงโครนัส
- การแบ่งฐานข้อมูล: กระจายชุดข้อมูลขนาดใหญ่
- ตรวจสุขภาพ: ใช้
AddHealthChecks()มิดเดิลแวร์ใน .NET Core
ตัวอย่าง (เซอร์กิตเบรกเกอร์):
Policy.Handle<HttpRequestException>()
.CircuitBreaker(3, TimeSpan.FromMinutes(1));
39) การสร้างคอนเทนเนอร์มีบทบาทอย่างไรในระบบ .NET สมัยใหม่?
คอนเทนเนอร์โดยหลักผ่าน นักเทียบท่าแยกแอปพลิเคชันและการอ้างอิงเพื่อให้แน่ใจว่ามีความสอดคล้องกันในทุกสภาพแวดล้อม
ประโยชน์ที่ได้รับ:
- การปรับใช้ที่คาดเดาได้ (ใช้งานได้บนโฮสต์ใดก็ได้)
- การปรับขนาดที่ง่ายขึ้นด้วย Kubernetes (AKS)
- น้ำหนักเบาและเร็วกว่าเครื่องเสมือน
- รวมเข้ากับเวิร์กโฟลว์ CI/CD ได้อย่างง่ายดาย
ตัวอย่าง (Dockerfile):
FROM mcr.microsoft.com/dotnet/aspnet:8.0 WORKDIR /app COPY . . ENTRYPOINT ["dotnet", "MyApp.dll"]
ใช้กรณี: การปรับใช้คลัสเตอร์ไมโครเซอร์วิส .NET ใน Kubernetes ช่วยเพิ่มความสามารถในการปรับขนาดและการแยกข้อผิดพลาด
40) คุณจะออกแบบระบบ .NET ที่ปรับขนาดได้สำหรับผู้ใช้หลายล้านคนได้อย่างไร
การออกแบบระบบใน .NET จำเป็นต้องมีการมองการณ์ไกลด้านสถาปัตยกรรมที่ผสมผสานระหว่างประสิทธิภาพ ความพร้อมใช้งาน และความสามารถในการบำรุงรักษา
คีย์ Archiการตัดสินใจด้านโครงสร้าง:
- ใช้ไมโครเซอร์วิส: แต่ละบริการสามารถปรับใช้ได้อย่างอิสระ
- นำ CQRS มาใช้ + การจัดหาแหล่งข้อมูลเหตุการณ์: แยกโมเดลการอ่าน/การเขียน
- การส่งข้อความแบบอะซิงโครนัส: ใช้ Azure รถบัสบริการ หรือ คาฟคา
- API เกตเวย์: จัดการการจราจรและความปลอดภัย
- เลเยอร์แคช: Redis หรือ MemoryCache เพื่อการเข้าถึงความเร็วสูง
- ความสามารถในการปรับขนาดฐานข้อมูล: ใช้ Azure Cosmos DB หรือ SQL แบบแบ่งพาร์ติชั่น
- การปรับขนาดอัตโนมัติ: กำหนดค่าผ่าน Azure แอปเซอร์วิส หรือ AKS
ตัวอย่างขั้นตอนการออกแบบ:
ผู้ใช้ → API Gateway → ตัวปรับสมดุลการโหลด → ไมโครเซอร์วิส (.NET 8 API) → ฐานข้อมูล + แคช Redis → การวัดระยะไกลผ่าน Application Insights
🔍 คำถามสัมภาษณ์ .NET ยอดนิยมพร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์
ด้านล่างนี้คือ 10 คำถามสัมภาษณ์ .NET ที่พบบ่อยและสมจริง พร้อมคำอธิบายเชิงกลยุทธ์และตัวอย่างคำตอบ มีทั้งคำถามเชิงความรู้ คำถามเชิงพฤติกรรม และคำถามเชิงสถานการณ์
วลีที่จำเป็นได้ถูกใช้ไปแล้วครั้งละหนึ่งรายการ
1) คุณสามารถอธิบายความแตกต่างระหว่าง .NET Framework, .NET Core และ .NET 6/7/8 ได้หรือไม่
สิ่งที่คาดหวังจากผู้สมัคร: ทำความเข้าใจเกี่ยวกับวิวัฒนาการของระบบนิเวศ .NET ความสามารถข้ามแพลตฟอร์ม และการสนับสนุนในระยะยาว
ตัวอย่างคำตอบ: “.NET Framework เป็นต้นฉบับ Windows- กรอบงานแบบเฉพาะ ในขณะที่ .NET Core แนะนำความสามารถข้ามแพลตฟอร์มและประสิทธิภาพที่ดีกว่า .NET 6 และรุ่นหลังรวมระบบนิเวศภายใต้ SDK ข้ามแพลตฟอร์มที่ทันสมัยตัวเดียวพร้อมการปรับปรุงที่สำคัญในด้านประสิทธิภาพ ความพร้อมของคลาวด์ และความเร็วในการพัฒนา
2) คุณจะนำการฉีดการอ้างอิงไปใช้ใน .NET ได้อย่างไร และเหตุใดจึงมีประโยชน์
สิ่งที่คาดหวังจากผู้สมัคร: ความเข้าใจเรื่องการแยกส่วน ความสามารถในการบำรุงรักษา และความสามารถในการทดสอบ
ตัวอย่างคำตอบ: การฉีดการอ้างอิงใน .NET โดยทั่วไปจะดำเนินการผ่านคอนเทนเนอร์ในตัวใน Microsoft.Extensions.DependencyInjection เนมสเปซ ช่วยลดความเชื่อมโยงที่แน่นหนา ปรับปรุงความสามารถในการทดสอบ และลดความซับซ้อนในการจัดการวงจรชีวิต โดยอนุญาตให้แก้ไขการอ้างอิงได้ในขณะรันไทม์
3) อธิบายโครงการ .NET ที่ท้าทายที่คุณทำงานด้วยและคุณมีส่วนสนับสนุนให้โครงการนั้นประสบความสำเร็จได้อย่างไร
สิ่งที่คาดหวังจากผู้สมัคร: การมีส่วนร่วม การแก้ปัญหา และความเป็นเจ้าของในโลกแห่งความเป็นจริง
ตัวอย่างคำตอบ: ในบทบาทก่อนหน้า ผมได้ช่วยปรับแต่งแอปพลิเคชัน .NET เดิมให้มีประสิทธิภาพสูงสุด โดยการออกแบบเลเยอร์การเข้าถึงข้อมูลใหม่ และนำระบบแคชมาใช้เพื่อลดเวลาในการตอบสนอง ซึ่งช่วยเพิ่มประสิทธิภาพได้มากกว่า 30 เปอร์เซ็นต์ และยกระดับประสบการณ์ผู้ใช้อย่างมีนัยสำคัญ
4) คุณจะมั่นใจได้อย่างไรถึงประสิทธิภาพและความสามารถในการปรับขนาดของแอปพลิเคชัน .NET
สิ่งที่คาดหวังจากผู้สมัคร: การใช้เครื่องมือสร้างโปรไฟล์ รูปแบบสถาปัตยกรรม และแนวทางปฏิบัติที่ดีที่สุดในการเขียนโค้ด
ตัวอย่างคำตอบ: “ฉันตรวจสอบประสิทธิภาพโดยใช้เครื่องมือสร้างโปรไฟล์ เช่น dotTrace และ Application Insights ใช้การเขียนโปรแกรมแบบอะซิงโครนัสเมื่อเหมาะสม ใช้แคช และใช้รูปแบบสถาปัตยกรรมที่ปรับขนาดได้ เช่น ไมโครเซอร์วิสเมื่อจำเป็น”
5) อธิบายความแตกต่างระหว่าง async/await และ multithreading ใน .NET
สิ่งที่คาดหวังจากผู้สมัคร: ความเข้าใจเกี่ยวกับโมเดลการทำงานพร้อมกัน
ตัวอย่างคำตอบ: “Async และ await ช่วยให้สามารถใช้งานแบบ nonblocking ได้ โดยใช้ประโยชน์จากรูปแบบ Asynchronous ที่อิงตามงาน ในขณะที่มัลติเธรดดิ้งเกี่ยวข้องกับการสร้างเธรดแยกต่างหากที่ทำงานแบบขนาน การเขียนโปรแกรมแบบอะซิงโครนัสเหมาะอย่างยิ่งสำหรับงานที่ผูกติดกับ I/O ในขณะที่มัลติเธรดดิ้งมีประโยชน์สำหรับการทำงานที่ผูกติดกับ CPU”
6) เล่าให้ฟังหน่อยถึงสถานการณ์ที่คุณต้องเรียนรู้เทคโนโลยี .NET ใหม่ ๆ อย่างรวดเร็ว คุณจัดการมันอย่างไร
สิ่งที่คาดหวังจากผู้สมัคร: ความสามารถในการปรับตัวและการเรียนรู้อย่างต่อเนื่อง
ตัวอย่างคำตอบ: “ในตำแหน่งก่อนหน้านี้ ผมจำเป็นต้องเรียนรู้ Blazor อย่างรวดเร็วสำหรับโปรเจ็กต์ของลูกค้า ผมจึงอุทิศเวลาให้กับ Microsoft การจัดทำเอกสาร ฝึกฝนกับโครงการแซนด์บ็อกซ์ขนาดเล็ก และร่วมมือกับสมาชิกในทีมเพื่อให้แน่ใจว่าฉันจะส่งมอบผลลัพธ์ที่มีคุณภาพตรงเวลา”
7) คุณจะออกแบบ RESTful API ใน ASP.NET Core อย่างไร? คุณยึดหลักการสำคัญอะไรบ้าง?
สิ่งที่คาดหวังจากผู้สมัคร: ความรู้เกี่ยวกับวิธีการ HTTP การกำหนดเส้นทาง การกำหนดเวอร์ชัน และแนวทางปฏิบัติที่ดีที่สุด
ตัวอย่างคำตอบ: ฉันปฏิบัติตามหลักการ REST เช่น การตั้งชื่อทรัพยากรที่ถูกต้อง สถานะไร้รัฐ และการใช้คำกริยา HTTP อย่างถูกต้อง นอกจากนี้ ฉันยังใช้การตรวจสอบความถูกต้องของโมเดล รหัสสถานะที่ถูกต้อง การกำหนดเวอร์ชัน และกลไกการตรวจสอบสิทธิ์ เช่น JWT อีกด้วย
8) คุณจัดการกับกำหนดเวลาที่กระชั้นชิดอย่างไรเมื่อต้องทำงานในโครงการ .NET หลายโครงการพร้อมๆ กัน?
สิ่งที่คาดหวังจากผู้สมัคร: การกำหนดลำดับความสำคัญ การจัดระเบียบ การสื่อสาร
ตัวอย่างคำตอบ: “ในงานก่อนหน้านี้ ฉันจัดการกับกำหนดเวลาที่กระชั้นชิดด้วยการแบ่งงานออกเป็นส่วนประกอบที่จัดการได้ กำหนดลำดับความสำคัญของคุณสมบัติที่สำคัญ และรักษาการสื่อสารอย่างต่อเนื่องกับผู้ถือผลประโยชน์เพื่อกำหนดความคาดหวังที่สมจริง”
9) คุณรักษาคุณภาพโค้ดในแอปพลิเคชัน .NET ได้อย่างไร
สิ่งที่คาดหวังจากผู้สมัคร: ความคุ้นเคยกับการทดสอบ บทวิจารณ์ และเครื่องมือ
ตัวอย่างคำตอบ: “ผมรักษาคุณภาพของโค้ดด้วยการทดสอบยูนิตด้วย xUnit การตรวจสอบโค้ด การวิเคราะห์โค้ดแบบคงที่ และการยึดมั่นตามหลักการ SOLID ขั้นตอนเหล่านี้ช่วยให้มั่นใจได้ถึงความสามารถในการบำรุงรักษาและความน่าเชื่อถือในระยะยาว”
10) สมมติว่า API ของ .NET ที่ใช้งานจริงเริ่มส่งคืนข้อผิดพลาด 500 เป็นระยะๆ คุณจะวินิจฉัยปัญหาอย่างไร
สิ่งที่คาดหวังจากผู้สมัคร: การดีบักอย่างมีโครงสร้าง การใช้เครื่องมือ และความสงบภายใต้แรงกดดัน
ตัวอย่างคำตอบ: ในบทบาทสุดท้ายของผม ผมจะเริ่มต้นด้วยการตรวจสอบบันทึก ตรวจสอบความสมบูรณ์ของการอ้างอิง และใช้ Application Insights หรือเครื่องมือที่คล้ายกันเพื่อติดตามข้อผิดพลาด จากนั้นผมจะแยกแยะว่าปัญหานั้นเกี่ยวข้องกับฐานข้อมูล เกี่ยวข้องกับการกำหนดค่า หรือเกี่ยวข้องกับโค้ด และนำการแก้ไขเฉพาะจุดมาใช้หลังจากการจำลองข้อมูลและการตรวจสอบความถูกต้องแล้ว
