Bộ câu hỏi phỏng vấn .Net Core phần 2

CTS là gì?


Common Type System (CTS) chuẩn hóa các kiểu dữ liệu của tất cả các ngôn ngữ lập trình sử dụng .NET dưới sự bảo trợ của .NET thành kiểu dữ liệu chung để giao tiếp dễ dàng và mượt mà giữa các ngôn ngữ .NET này.

CTS được thiết kế như một hệ thống phân cấp đối tượng gốc duy nhất với System.Object là kiểu cơ sở mà từ đó tất cả các kiểu khác được bắt nguồn từ đó. CTS hỗ trợ hai loại kiểu khác nhau:

  • Value Types: Chứa các giá trị cần được lưu trữ trực tiếp trên stack hoặc được cấp phát nội tuyến trong một structure. Chúng có thể được tích hợp sẵn (các kiểu Standard primitive), do người dùng xác định (được xác định trong source code) hoặc kiểu enumerations (tập hợp các giá trị được liệt kê được biểu thị bằng labels nhưng được lưu trữ dưới dạng kiểu số).
  • Reference Types: Lưu trữ một tham chiếu đến địa chỉ bộ nhớ của giá trị và được cấp phát trên heap. Các reference types có thể bất kỳ là pointer types, interface types hoặc self-describing types (các arrays và kiểu class chẳng hạn như class do người dùng định nghĩa, boxed value types và delegates).

Một unmanaged resource là gì?


  • Nếu bạn tìm thấy nó trong Microsoft .NET Framework: đó là managed.
  • Nếu bạn tự tìm kiếm nó quanh MSDN, đó là unmanaged.
  • Bất kỳ thứ gì ở ngoài mọi thứ tuyệt vời của .NET Framework mà bạn dùng lệnh gọi P/Invoke để sử dụng đều là unmanaged - và bạn phải chịu trách nhiệm dọn dẹp nó.

Giải thích hai loại triển khai (deployment) cho các ứng dụng .NET Core?


Framework-dependent deployment (FDD) - nó dựa vào phiên bản được chia sẻ trên toàn hệ thống của .NET Core trên hệ thống đích. Ứng dụng chỉ chứa mã của riêng nó và bất kỳ third-party dependencies bên ngoài các thư viện .NET Core. FDD chứa các tệp .dll có thể được khởi chạy bằng cách sử dụng tiện ích dotnet từ command line.

dotnet app.dll

Self-contained deployment - không như FDD, self-contained deployment (SCD) không dựa vào các thành phần được chia sẻ trên hệ thống đích. Tất cả các thành phần, bao gồm cả các thư viện .NET Core và .NET Core runtime, đều được bao gồm trong ứng dụng và độc lập với các ứng dụng .NET Core khác. SCD bao gồm tệp thực thi (chẳng hạn như app.exe trên nền tảng Windows), là phiên bản được đổi tên của máy chủ .NET Core dành riêng cho nền tảng, và tệp .dll (chẳng hạn như app.dll), là ứng dụng thực tế.

NuGet packages và packages.config là gì?


  • Tệp package.config không nào nữa. Tất cả packages hiện nay sẽ được quản lý trong tệp .csproj.
  • Tệp .csproj đã được dọn dẹp và nó cũng đóng vai trò của package.config (hoặc package.json trong Nodejs). Đó là nơi các packages và versions của bạn được lưu trữ.
  • NuGet packages là đơn vị tham chiếu và chúng có thể phụ thuộc vào các NuGet packages khác, nhưng chúng cũng có thể phụ thuộc vào các projects. Và như trước đây, các projects cũng có thể phụ thuộc vào các NuGet packages và projects khác. Điều đó có nghĩa là các projects và NuGet packages có thể hoán đổi cho nhau.
  • Với .NET Core, bạn có thể dễ dàng biến các dự án của mình thành các NuGet packages chỉ bằng một cú click bên trong các properties.

Trình biên dịch JIT là gì?


Trước khi máy tính có thể thực thi mã nguồn, các chương trình đặc biệt được gọi là trình biên dịch phải viết lại nó thành các lệnh máy, còn được gọi là object code. Quá trình này (thường được gọi đơn giản là “biên dịch”) có thể được thực hiện một cách rõ ràng hoặc ngầm định.

Biên dịch ngầm định là một quá trình gồm hai bước:

  • Bước đầu tiên là chuyển đổi mã nguồn sang ngôn ngữ trung gian bằng trình biên dịch dành riêng cho ngôn ngữ.
  • Bước thứ hai là chuyển ngôn ngữ trung gian sang hướng dẫn máy. Sự khác biệt chính với các trình biên dịch rõ ràng là chỉ các đoạn mã ngôn ngữ trung gian được thực thi mới được biên dịch thành các lệnh máy, trong runtime. .NET framework gọi trình biên dịch này là trình biên dịch JIT (Just-In-Time).

Explicit Compilation là gì?


  • Explicit compilation (biên dịch rõ ràng) chuyển đổi ngôn ngữ cấp trên thành object code trước khi thực thi chương trình.
  • Các Ahead of time (AOT) compilers (trình biên dịch trước thời hạn) được thiết kế để đảm bảo rằng, CPU có thể hiểu mọi dòng mã trước khi bất kỳ tương tác nào diễn ra.

Tại sao cần sử dụng IDisposable interface?


Công dụng "chính" của IDisposable interface là dọn dẹp các Unmanaged resources.

Lưu ý rằng mục đích của Dispose pattern là cung cấp một cơ chế để dọn dẹp cả hai Managed/Unmanaged resources và thời điểm điều đó xảy ra phụ thuộc vào cách mà phương thức Dispose được gọi.

BCL là gì?


  • Một .NET Framework library, BCL là tiêu chuẩn cho C# runtime library và một trong các Common Language Infrastructure (CLI) standard libraries.
  • BCL cung cấp các kiểu đại diện cho các kiểu dữ liệu CLI được tích hợp sẵn, quyền truy cập tệp cơ bản, collections, thuộc tính tùy chỉnh, định dạng, thuộc tính bảo mật, I/O streams, thao tác chuỗi và hơn nữa.
  • Base Class Library (BCL) theo nghĩa đen là cơ sở. Nó chứa các kiểu cơ bản, cơ bản như System.StringSystem.DateTime.

Sự khác biệt giữa .NET Core, .NET Framework, và Xamarin?


  • .NET Framework là hương vị "đầy đủ" hoặc "truyền thống" của .NET được phân phối với Windows. Sử dụng .NET Framework khi bạn đang xây dựng một ứng dụng Windows hoặc UWP hoặc làm việc với ASP.NET 4.6+ cũ hơn.
  • .NET Core.NET đa nền tảng chạy trên Windows, Mac và Linux. Sử dụng .NET Core khi bạn muốn xây dựng console hoặc ứng dụng web có thể chạy trên bất kỳ nền tảng nào, kể cả bên trong Docker containers. Điều này không bao gồm các ứng dụng UWP/Desktop hiện tại.
  • Xamarin được sử dụng để xây dựng các ứng dụng di động có thể chạy trên các thiết bị iOS, Android hoặc Windows Phone.

image

Xamarin thường chạy trên Mono, là phiên bản .NET được xây dựng để hỗ trợ đa nền tảng trước khi Microsoft quyết định chính thức sử dụng .NET Core. Giống như Xamarin, nền tảng Unity cũng chạy trên nền tảng Mono.

Những lợi ích của Explicit compilation là gì?


Ahead of time (AOT) mang lại thời gian khởi động nhanh hơn, đặc biệt là trong các ứng dụng lớn, nơi có nhiều mã cần thực thi khi khởi động. Nhưng nó đòi hỏi nhiều dung lượng ổ đĩa hơn và nhiều bộ nhớ / không gian địa chỉ ảo hơn để giữ cả IL và hình ảnh được biên dịch trước. Trong trường hợp này, JIT Compiler phải thực hiện nhiều thao tác I/O đĩa, chúng khá tốn kém.

Implicit compilation là gì?


Implicit Compilation (biên dịch ngầm định) là một quy trình gồm hai bước và nó cần một Virtual Machine để có thể thực thi mã của bạn.

  • Bước đầu tiên của quy trình là chuyển đổi chương trình của bạn sang một mã bytecode mà Virtual Machine có thể hiểu được. .NET bytecode được gọi là Common Intermediate Language (CIL). Nó còn được gọi là Microsoft Intermediate Language (MSIL) hoặc Intermediate Language (IL).
  • Bước thứ hai là chuyển đổi mã CIL thành mã máy. Đây là nhiệm vụ của Virtual Machine. Common Language Runtime (.NET Virtual Machine) chỉ chuyển đổi các đoạn CIL được thực thi thành các lệnh CPU trong runtime. .NET framework gọi trình biên dịch này là JIT (Just-In-Time) compiler.

Kestrel là gì?


  • Kestrel là một web server đa nền tảng được xây dựng cho ASP.NET Core dựa trên Libuv - một thư viện I / O bất đồng bộ đa nền tảng.
  • Nó là một máy chủ web mặc định được chọn để sử dụng trong tất cả các ASP.NET Core templates.
  • Nó thực sự rất nhanh.
  • Nó đủ an toàn và tốt để sử dụng mà không cần một Reverse proxy server. Tuy nhiên, bạn vẫn nên sử dụng IIS, Nginx hoặc Apache hoặc thứ gì đó khác.

Common Language Specification (CLS) có nghĩa là gì?


  • Common Language Specification (CLS) là một tập hợp các tính năng ngôn ngữ cơ bản được hỗ trợ bởi Common Language Runtime (CLR) của .NET Framework.
  • CLS là một phần đặc điểm kỹ thuật của .NET Framework.
  • CLS được thiết kế để hỗ trợ các cấu trúc ngôn ngữ thường được các nhà phát triển sử dụng và tạo ra mã xác minh cho phép tất cả các ngôn ngữ tuân theo CLS để đảm bảo độ an toàn của loại mã.
  • CLS bao gồm các tính năng chung cho nhiều ngôn ngữ lập trình hướng đối tượng. Nó tạo thành một tập hợp con các chức năng của Common Type System (CTS) và có nhiều quy tắc hơn được định nghĩa trong CTS.

.NET Core bao gồm những gì?


  • Một .NET runtime, cung cấp một type system, assembly loading, một trình thu gom rác (garbage collector), tương tác với native code và các dịch vụ cơ bản khác.
  • Một tập hợp các framework libraries, cung cấp các kiểu dữ liệu primitive, các kiểu hợp thành ứng dụng và các tiện ích cơ bản.
  • Một bộ công cụ SDK và trình biên dịch ngôn ngữ cho phép nhà phát triển cơ sở trải nghiệm , có sẵn trong .NET Core SDK.
  • Máy chủ ứng dụng 'dotnet', được sử dụng để chạy các ứng dụng .NET Core. Nó chọn runtime và lưu trữ runtime, cung cấp chính sách assembly loading và chạy ứng dụng. - Máy chủ tương tự cũng được sử dụng để khởi chạy các công cụ SDK theo cách tương tự.

Giải thích sự khác biệt giữa "managed" code và "unmanaged" code?


  • Managed code không được biên dịch thành mã máy mà sang một ngôn ngữ trung gian được một số dịch vụ trên máy thông dịch và thực thi, do đó nó đang hoạt động trong một framework bảo mật để xử lý những thứ nguy hiểm như memory và threads cho bạn. Nó chạy trên CLR (Common Language Runtime), cùng với những thứ khác, cung cấp các dịch vụ như thu gom rác, kiểm tra loại run-time và kiểm tra tham chiếu. Vì vậy, hãy nghĩ về nó như là, "Code của tôi được quản lý bởi CLR."
  • Unmanaged code được biên dịch thành mã máy và do đó được hệ điều hành thực thi trực tiếp. Do đó, nó có khả năng làm những điều gây tổn hại hoặc những tính năng mà Managed code không làm được. Đây là cách mọi thứ được sử dụng để hoạt động, vì vậy nó thường được liên kết với những thứ cũ như .dlls

Bạn biết gì về file .csproj?


  • File .csproj hiện được sử dụng làm nơi quản lý các NuGet packages cho ứng dụng của bạn.
  • File explorer và Project explorer hiện được đồng bộ hóa. Đối với các dự án .NET Core, bạn có thể dễ dàng drop một file từ File explorer vào một project hoặc xóa nó khỏi hệ thống file và file đó sẽ biến mất khỏi project. Không còn source files nào trong file .csproj nữa.
  • Hiện tại bạn có thể chỉnh sửa file .csproj trực tiếp mà không cần unloading project.

Sự khác biệt giữa Class Library trong .NET Standard và Class Library trong .NET Core?


  • Compatibility (tính tương thích): các Class Libraries trong .NET Standard sẽ chạy trên bất kỳ runtime thuộc .NET Standard, chẳng hạn như .NET Core, .NET Framework, Mono / Xamarin. Mặt khác, các Class Libraries trong .NET Core chỉ có thể chạy trên runtime thuộc .NET Core.
  • API Surface Area: Các .NET Standard libraries đi kèm với mọi thứ trong NETStandard.Library trong khi các .NET Core libraries đi kèm với mọi thứ trong Microsoft.NETCore.App. Cái thứ hai bao gồm khoảng 20 thư viện bổ sung, một số trong số đó chúng ta có thể tự thêm vào .NET Standard library của mình (chẳng hạn như System.Threading.Thread) và một số trong số đó không tương thích với .NET Standard (chẳng hạn như Microsoft.NETCore.CoreCLR).
Avatar Techmely Team
VIẾT BỞI

Techmely Team