Cấp bậc tác giả:

TRAINING

Câu hỏi phỏng vấn chuyên ngành DOTNET

Được viết bởi QuangIT ngày 10/10/2012 lúc 01:01 PM
CLR là viết tắt của Common Language Runtime, nó là trái tim của .NET framework.
  • 0
  • 23378

Câu hỏi phỏng vấn chuyên ngành DOTNET

CLR là viết tắt của Common Language Runtime, nó là trái tim của .NET framework.
Các ngôn ngữ đều có bộ phận quản lí đoạn mã khi nó chạy. Chẳng hạn VC++ có MSCRT40.DLL, VB6 có MSVBVM60.DLL, Java có Java Virtual Machine (máy ảo Java), v.v. Tương tự vậy .NET có CLR. Dưới đây là các bộ phận của CLR và nhiệm vụ của từng bộ phận:
- Garbage Collection (GC): Bộ phận thu gom rác.
CLR tự động quản lí kí ức, nhằm làm giảm sự rò rỉ kí ức. Một lúc nào đó (do CLR tự chọn), GC sẽ nhảy vào giải phóng các vùng kí ức không còn được cái gì trỏ đến (không dùng nữa); lập trình viên không phải làm việc này (trừ lúc cố tình).
- Code Access Security: (CAS)
CAS cung cấp quyền hạn cho các chương trình, tùy thuộc vào các thiết lập bảo mật của máy. Chẳng hạn, thiết lập bảo mật của máy cho phép chương trình chạy trên đó được sửa hay tạo file mới, nhưng không cho phép nó xóa file. CAS sẽ chăm sóc các đoạn mã, không cho phép chúng làm trái với các qui định này.
- Code Verification: Bộ phận chứng nhận đoạn mã.
Nó đảm bảo cho việc chạy các đoạn mã là đúng đắn, không loạng quạng, và đảm bảo an toàn kiểu dữ liệu. Nó ngăn chặn các đoạn mã hành động phi pháp như truy nhập vào các vùng kí ức không được phép.
- IL-to-native translators and optimizer's: Bộ phận chuyển IL thành mã máy và tối ưu chương trình.
CLR dùng trình biên dịch JIT để chuyển các đoạn mã IL thành mã máy và chạy chúng. CLR đồng thời dựa vào đặc điểm của máy mà tinh chỉnh để tối ưu việc thực thi đoạn mã đó.

Hệ thống kiểu công cộng (Common Type System - CTS): Hệ thống kiểu công cộng là một hệ thống gồm nhiều kiểu dữ liệu được xây dựng sẵn trong CLR. Nó hỗ trợ các kiểu và các tác vụ trong hầu hết các ngôn ngữ lập trình. CTS hỗ trợ rất nhiều hiện thực hiệu chỉnh của các ngôn ngữ lập trình.
Đặc tả ngôn ngữ công cộng (Common Language Specification – CLS): Đặc tả ngôn ngữ công cộng là một tập hợp các cấu trúc và quy tắc phục vụ cho các nhà lập trình thư viện (library writer) hay các nhà lập trình trình biên dịch (compiler writer). Đặc tả này cho phép sử dụng bất kỳ ngôn ngữ nào hỗ trợ CLS để viết chương trình, và có thể tích hợp các ngôn ngữ đó với nhau. CLS là một tập con của CTS. CLS cũng quan trọng đối với các nhà phát triển ứng dụng, những người đang viết mã cho các nhà phát triển khác sử dụng. Khi nhà phát triển thiết kế một API (Application Programming Interface – giao diện lập trình ứng dụng) tuân theo CLS, thì API đó có thể được dùng bởi bất cứ ngôn ngữ nào được CLS hỗ trợ.
Ngôn ngữ trung gian của Microsoft (Microsoft Intermediate Language – MSIL): MSIL là một tập lệnh không phụ thuộc vào CPU do chương trình của .NET Framework được biên dịch sang. Nó bao gồm các lệnh để nạp, chứa, khởi tạo và gọi các phương thức của đối tượng. Kết hợp với siêu dữ liệu và CTS, MSIL cho phép hiện thực việc tích hợp xuyên ngôn ngữ. Trước khi thực thi, MSIL được chuyển sang mã máy. Tuy nhiên đây không phải là quá trình thông dịch.

1. Sự khác nhau giữa các lớp Trace và Debug?
- Trace dùng để theo dõi các hành động xảy ra. Nó hoạt động trong các đóng gói cả Debug lẫn Release. Trace là khả năng của chương trình tự đưa ra các thông tin về hành động của mình.
- Debug dùng để tìm và sửa các lỗi trong chương trình. Nó chỉ hoạt động trong đóng gói Debug.
2. Sự khác nhau giữa static readonly và const?
- Static readonly là hằng số được khởi tạo khi thực thi chương trình.
- Const là hằng số được khởi tạo khi biên dịch chương trình.
3. Sự khác nhau giữa String và StringBuilder?
- String là lớp không thay đổi. Mọi phương thức sẽ tạo ra một biến String mới.
- StringBuilder là lớp thay đổi. Các phương thức của biến sẽ ảnh hưởng đến đến biến StringBuilder hiện tại.
4. Sự khác nhau giữa “” và String.Empty?
- “” sẽ tạo thêm 1 đối tượng khi làm việc với nó (so sánh, copy…)
- String.Empty không tạo đối tượng nào cả. String.Emtpy nằm trong mscorlib.
Khi kiểm tra 1 String có rỗng hay không nên dùng String.Length == 0 để có tốc độ nhanh nhất.
5. Có thể gán một struct bằng null hay không?
- Có thể nếu bạn lập trình với C# 2.0. Ví dụ: int? var = 1; var = null;
6. Sự khác nhau giữa == và phương thức Equals?
- == so sánh theo kiểu giá trị.
- Equals so sánh theo kiểu tham chiếu.
7. Sự khác nhau giữa throw và throw ex?
- throw đế đưa lại toàn bộ các tầng theo dõi của lỗi ra.
- throw ex bỏ bớt các tầng theo dõi bên dưới phương thức gọi throw ex.
8. Connection Pooling dùng để làm gì?
- Cho phép tăng tốc độ của các ứng dụng Web bằng cách dùng lại các kết nối thay vì tạo các kết nối mới với mỗi yêu cầu.
9. .NET có hỗ trợ thừa kế từ nhiều lớp hay không (multiple inheritance)? Tại sao?
- Không. Vì sẽ không hiểu được khi gọi 1 phương thức mà 2 lớp cha cùng override nó.
10. Sự khác nhau giữa abstract class và interface?
- Có thể thừa kế từ nhiều interface nhưng chỉ có thể thừa kế từ 1 abstract class.
- Có thể viết sẵn các thực thi trong Abstract class, nhưng interface thì không.
- Interface dùng để gom các hành động cần được hiện thực , các khả năng của một đối tượng (ví dụ con người và xe cộ cùng có khả năng đi lại, nhưng con người không cùng tính chất với xe cộ), còn abstract class cho các lớp thừa kế cùng 1 loại, tính chất hay trạng thái (ví dụ đàn ông, phụ nữ, trẻ con, người già đều là con người).
- Abstract class có tốc độ thực thi nhanh hơn interface.
- Thêm 1 tính năng mới vào interface sẽ phá vỡ toàn bộ các lớp hiện thực, còn abstract thì không.
11. Hàm GetHasCode() trong System.Object dùng để làm gì?
- Trả về giá trị của một đối tượng. Chú ý hàm này mặc định không trả về giá trị duy nhất hoặc không đổi. Hàm này có thể override.
12. Sự khác nhau giữa DataSet và DataReader?
- DataSet có thể đọc và ghi trong khi DataReader chỉ có thể đọc. 
- DataSet có thể chứa nhiều bảng còn DataReader chỉ có thể chứa 1 bảng. 
- DataSet làm việc ở chế độ không kết nối còn DataReader làm việc ở chế độ kết nối. 
- DataSet có thể di chuyển tới và trở lại còn DataReader thì chỉ có thể di chuyển tới. 
- DataSet truy cập chậm hơn DataReader.
13. Sự khác nhau giữa các phuơng thức Copy và Clone?
- Clone chỉ copy cấu trúc trong khi Copy copy cả cấu trúc lẫn dữ liệu.
14. Sự khác nhau giữa Dispose, Destructor và Finalize?
- Destructor sẽ được chuyển thành Finalize khi biên dịch. Hàm Finalize được gọi bởi .NET Runtime và chúng ta không thể đoàn được nó được gọi khi nào, nhưng nó chắc chắn sẽ được gọi. - Dispose sẽ giải phóng bộ nhớ ngay khi nó được gọi. Lưu ý nếu lớp nào override Dispose mà quên gọi thì các đối tượng sẽ không tự giải phóng bộ nhớ.
15. Serialization là gì?
- Là sự chuyển chuyển đối tượng thành 1 luồng các bytes.
16. Sự khác nhau giữa XmlSerializer, BinaryFormatter và SoapFormatter?
- XmlSerializer dùng cho dịch vụ Web. 
- BinaryFormatter/SoapFormatter dùng cho Remoting. 
- SoapFormatter dùng để tuần tự hóa 1 đối tượng thành SOAP. 
- BinaryFormatter dùng để tuần tự hóa 1 đối tượng thành dạng nhị phân. 
- XmlSerializer chỉ chuyển đổi các tính chất public còn BinaryFormatter/SoapFormatter chuyển đổi cả public lẫn private.
17. Sự khác nhau giữa overriding và shadowing?
- Overriding cung cấp sự hiện thực mới của 1 hàm ở lớp thừa kế nhưng không thay đổi số biến, kiểu trả về, mức truy cập còn shadowing thì có thể thay đổi (từ khóa new trong C#).
18. Sự khác nhau giữa class, object, struct và interface?
- Class là cấu trúc dữ liệu định nghĩa bởi người dùng chứa các tính chất và phương thức. Object là một trường hợp cụ thể của class. Class không chiếm bộ nhớ, còn Object được tạo trong bộ nhớ. 
- Class là cấu trúc dữ liệu định nghĩa bởi người dùng chứa các tính chất và phương thức. Struct là kiểu giá trị được lưu trữ trong stack còn class là kiểu tham chiếu (các object) được lưu trữ trong heap. 
- Khi struct được khởi tạo không bằng hàm khởi tạo người dùng sẽ phải khởi tạo tất cả các Fields trước khi sử dụng nó.
- Interface là một hợp đồng gồm một nhóm các phương thức cần được hiện thực.
19. Sự khác nhau giữa Property và Field?
- Property dùng để quản lý sự truy cập đến Field. Dùng Property để đảm bảo Field không bị gán các giá trị không hợp lệ.
20. Sự khác nhau giữa static Method, static constructor với method và constructor thông thường?
- Static method có thể gọi mà không cần khởi tạo biến. Static constructor chỉ được gọi đúng một lần khi object đầu tiên được khởi tạo.
21. Các biến tĩnh và chỉ dẫn chương trình được lưu ở đâu?
- Ở 1 vùng bộ nhớ đặc biệt gọi là Permanent Storage area.
22. Sự khác nhau giữa stack và heap?
- Stack và heap là các vùng bộ nhớ. Heap nằm giữa stack và Permanent Storage area, và độ lớn có thể thay đổi khi thực thi chương trình.
23. Sự khác nhau giữa Boxing and Un-Boxing?
- Boxing là chuyển đổi kiểu giá trị thành kiểu tham chiếu. Un-Boxing ngược lại.
24. Mục đích của thừa kế (inheritance)?
- Để tái sử dụng.
25. Mục đích của đa hình (poymophism)?
- Một hành động có thể xảy ra theo nhiều cách khác nhau.
26. Sự khác nhau giữa Compile Time Polymorphism và Run Time Polymorphism?
- Compile Time Polymorphism - ví dụ Overloading, một hàm có thể có nhiều cách biểu diễn.
- Run Time Polymorphism - ví dụ Overriding, một hàm có thể có nhiều cách xử lý.
27. Sự khác nhau giữa delegate và event?
- delegate là một lớp (class) đại diện cho hàm con trỏ kiểu an toàn hoặc hàm gọi (call backs) chỉ đến địa chỉ tham chiếu của một (hay nhiều) hàm. Con trỏ hàm chứa trong delegate được gắn vào một đối tượng đích (target) và khi delegate được kích hoạt phương thức sẽ được gọi ở đối tượng đích. Sự hữu ích của delegate không nằm ở chỗ giữ địa chỉ tham chiếu của các hàm mà để định nghĩa và dùng các tên hàm khi runtime thay vì compile time. - event cho phép xác định một delegate sẽ được gọi khi có sự xuất hiện của “sự kiện” nào đó. event là một modifier trong khi delegate là một lớp. event cho phép một delegate được khai báo trong interface.
29. AppDomain là gì?
- Là một miền riêng biệt lưu trữ code và dữ liệu cho một application. Một process có thể chứa nhiều AppDomains. Khi bạn copy một DLL mới vào bin, ASP.NET runtime sẽ không thể đưa nó vào một AppDomain đang chạy.Nó sẽ dừng từ từ AppDomain cũ (dừng hẳn khi nó dừng tất cả các requests) và mở một AppDomain mới.
30. Sự khác nhau giữa publish và published interfaces.
- publish interface là interface mà bạn có thể sửa tất cả những code nào dùng nó còn published interface là interface mà bạn không thể sửa code dùng nó.
31. Sự khác nhau giữa try{}catch{} và try{}catch{Exception ex}?
- Chúng giống hệt nhau.
32. Sự khác nhau giữa 1/0; và try{1/0;} catch {throw;}
- Chúng giống hệt nhau. Vì vậy nếu không xử lý catch thì đừng catch.
33. Sự khác nhau giữa Remoting và Web service?
- Web service không có trạng thái, không cần biết đến client chỉ sử dụng trên HTTP, hỗ trợ không đồng nhất các môi trường, tốc độ chậm hơn Remoting. - Remoting có trạng thái kết nối, hỗ trợ nhiều giao thức hơn HTTP, TCP…, đòi hỏi môi trường đồng nhất, tốc độ nhanh đặc biệt khi dùng trên TCP.
34. Sự khác nhau giữa error và exception?
- Error là lỗi của chương trình còn exception là lỗi chương trình được phát hiện và có thể xử lý.
35. Sự khác nhau giữa Procedure và OO?
- Procedure gồm các hàm và các biến, tất cả các hàm đều có thể truy cập đến tất cả các biến. Không thể quản lý các biến. - OO gom hàm và biến vào các đơn vị object. Các hàm và biến được quản lý trong nội bộ object. Các object tương tác với nhau thông qua các interfaces.
36. CLR, CTS, CLS, MSIL, JIT, PE, GAC là viết tắt của những gì?
- Là Common Language Runtime: môi trường để chạy các ứng dụng .NET - Là Common Type System: mô tả các loại dữ liệu trong .NET. - Là Common Language Specification: mô tả các quy định và chuẩn cho các ngôn ngữ trong .NET - Là Microsoft Intermediate Language: ngôn ngữ thông dịch của .NET. - Là Just In Time: trình biên dịch MSIL thành mã máy. - Là Portable Executable: file chứa MSIL. - Là Global Assembly Cache: nơi lưu trữ các Asembly dùng chung.
37. Các mâu thuẫn giữa OO và RDBMS?
- Cấu trúc cấp bậc trong OO có thể là vô tận trong khi ở RDBMS chỉ có 4 loại table, row, column, cell. 
- Các đối tượng trong OO bản thân là phân biệt trong khi trong RDBMS cần phải có primary-key. 
- Các đối tượng trong OO có thể tham chiếu đến nhau rất đơn giản nhưng trong RDBMS thì phức tạp thông qua JOIN 
- Sự thừa kế trong OO là đơn giản trong khi trong RDBMS hầu như không có khái niệm đó. Một bảng cần chứa tất cả các tính chất, có khi là thừa. 
- Các đối tượng trong OO có thể có các hành động tác động đến tối tương khác.trong RDBMS thì phức tạp thông qua TRIGGER 
- Khả năng truy cập trong OO là hạn chế trong khi ở RDBMS là không giới hạn.
38. Sự khác nhau giữa Response.Redirect và Server.Transfer.
- Response.Redirect đơn thuần là chuyển bạn đến một trang mới giống như bạn gõ địa chỉ trang đó trên browser và request đến server. 
- Server.Transfer cũng chuyển bạn đến trang mới nhưng ở phía server, làm giảm request đến server, giữa nguyên URL của bạn và có thể chuyển cả các query string và biến trên form đên địa chỉ mới, chỉ thực hiện giữa các trang trên cùng 1 host.
39. Vai trò của ASPX page và ASPX page code-behind trong MVC.
- ASPX page là View còn ASPX page code-behind là Controller.
40. Làm thế nào để try/catch trên toàn bộ 1 ASPX page.
- Dùng Page_Error event.
41. Sự khác nhau giữa Cohesion và Coupling
- Cohesion là sự liên kết giữa các thành phần trong một module. Một thiết kế tốt nên có sự liên kết giữa các thành phần thật chặt chẽ. 
- Coupling là sự kết nối giữa các module với nhau. Một thiết kế tốt nên có sự kết nối thật lỏng lẽo giữa các module.
42. Refractoring là gì?
- Là sự thiết kế lại cấu trúc của code bằng cách thay đổi cấu trúc bên trong mà không ảnh hưởng đến các hành vi bên ngoài (interface) của đoạn code (module, system) đó.
43. Phân biệt HttpApplication, Session, ViewSate và HttpContext?
- Cả 4 thành phần trên đều dùng để lưu dữ liệu của một Web Application. 
- HttpApplication có tác dụng trong toàn bộ quá trình thực thi của Web Application. 
- Session có tác dụng trong 1 lần ghé thăm (visit) của người dùng. Nó kết thúc khi gặp timeout. 
- ViewState có tác dụng trong trong 1 trang web. 
- HttpContext có tác dụng trong 1 request.

Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML