Tìm kiếm


    Câu hỏi phỏng vấn C# và .Net - Fresher


    Hôm nay mình sẽ chia sẻ cho các bạn các câu hỏi phỏng vấn về C# và .NET.

    Ở phần 1 sẽ là các câu hỏi ở dạng Basic phù hợp với vị trí Fresher. Cùng bắt đầu nào...

    1. OOP là gì?

    OOP tức là lập trình hướng đối tượng, nó gồm 4 tính chất (Mỗi tính chất cac bạn phải hiểu và lấy ví dụ được đồng thời các bạn cũng phải nêu ra được tác dụng của nó):

    • - Tính đóng gói (Encapsulation): Là cách để che dấu những tính chất xử lý bên trong của đối tượng, những đối tượng khác không thể tác động trực tiếp làm thay đổi trạng thái chỉ có thể tác động thông qua các method public của đối tượng đó.
    • - Tính kế thừa (Inheritance): Là kỹ thuật cho phép kế thừa lại những tính năng mà một đối tượng cha đã có, giúp tránh việc code lặp dư thừa mà chỉ xử lý công việc tương tự.
    • - Tính đa hình (Polymorphism ): Là một đối tượng thuộc các lớp khác nhau có thể hiểu cùng một thông điệp theo cách khác nhau.
    • - Tính trừu tượng (Abstraction): Là phương pháp trừu tượng hóa định nghĩa lên những hành động, tính chất của loại đối tượng nào đó cần phải có.

    2. Nên sử dụng override, overload khi nào?

    – Sử dụng override khi ở lớp cha có một phương thức thực hiện công việc A, và lớp con khi kế thừa phương thức này nó muốn làm khác đi công việc A đó thì chúng ta sẽ dùng override.

    – Sử dụng overload khi chúng ta muốn chỉ sử dụng một tên method cho nhiều xử lý có ý nghĩa tương tự nhau trong cùng một class, để dễ gợi nhớ, tránh trường hợp đặt nhiều tên method khác nhau mà chúng lại có chung xử lý.

    3. Sự khác nhau giữa override và overload là gì?

    Override Overload
    - Kiểu dữ liệu trả về, tên phương thức, danh sách tham số của phương thức override và phương thức được override phải giống nhau.

    – Kiểu dữ liệu trả về của các phương thức overload có thể giống nhau hoặc khác nhau.

    – Số lượng tham số hoặc kiểu dữ liệu của tham số ở các phương thức overload phải khác nhau.

    – Không thể thu hẹp phạm vi truy cập(access modifier) của phương thức được override. – Có thể mở rộng hoặc thu hẹp phạm vi truy cập(access modifier) của phương thức được overload.
    – Không thể overriding constructor method. – Overloading được constructor method.
    – Chỉ thực hiện được đối với các class có quan hệ kế thừa. Do đó overriding thực hiện ở ngoài phạm vi của một class. – Chỉ thực hiện trong cùng phạm vi, trong nội bộ của một class.
    – Là hình thức đa hình khi chạy(runtime) (tức là chỉ khi chương trình chạy, thì chúng ta mới biết phương thức được gọi từ lớp nào). – Là hình thức đa hình khi biên dịch(compiler) (tức là khi biên dịch mới biết đang sử dụng phương thức ở trong lớp nào).
    – Không cho phép tạo ra những ngoại lệ khác loại hoặc không phải đối tượng thuộc lớp con của lớp có thể hiện là ngoại lệ từ phương thức được override. – Cho phép tạo ra những ngoại lệ hoàn toàn mới so với những ngoại lệ từ phương thức được overload.

     4. 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.

    5. 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ệ.

    6. Sự khác biệt giữa câu lệnh continue và break trong C # là gì?

    • - Sử dụng câu lệnh break, bạn có thể nhảy ra khỏi vòng lặp.
    • - Sử dụng câu lệnh continue, bạn có thể nhảy qua một lần lặp và sau đó tiếp tục thực hiện vòng lặp của mình.

    đấ

    7. Serialization là gì?

    Là sự chuyển chuyển đối tượng thành 1 luồng các bytes.

    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. 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.

    10. Khác nhau giữa ActionResult và JsonResult?

    • - ActionResult thường được sử dụng khi bạn muốn trả về 1 view hoặc file hoặc jsondata hoặc điều hướng tới 1 url khác.
    • - JsonResult thường được sử dụng khi bạn muốn trả về jsondata tới 1 client.
    • - JsonResult là 1 loại ActionResult trong MVC. Nó giúp gửi dữ liệu theo chuẩn format JavaScript Object Notation (JSON).

    Cũng như vậy, JsonRequestBehavior là gì? Nếu bạn cần gửi JSON trong 1 request có phương thức là GET, bạn cần phải cho phép hành động này bằng cách dùng JsonRequestBehaviorAllowGet là tham số thứ 2 trong phương thức Json. Tuy nhiên đây cũng là cơ hội để hacker có thể truy cập vào phần tải dữ liệu JSON thông qua 1 quá trình gọi là JSON Hijacking.

    [HttpGet]
    public JsonResult GetListEmail()
    {
        List list = new List() {
            "[email protected]", 
            "[email protected]", 
            "[email protected]"
        };
    
        return Json(list, JsonRequestBehavior.AllowGet);
    }

    11. 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#).

    12 .NET có hỗ trợ thừa kế từ nhiều lớp hay không (multiple inheritance)?

    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ó.

    13. Sự khác nhau giữa static readonly và const?

    Const là hằng số được khởi tạo khi biên dịch chương trình.

    Static readonly là hằng số được khởi tạo khi thực thi chương trình.

    14. 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.

    Ví dụ: Một người cùng một lúc có thể có đặc điểm khác nhau. Giống như một người đàn học sinh thời là một người con trai, một người bạn, một người anh. Vì vậy, cùng một người sở hữu những hành vi khác nhau trong các tình huống khác nhau. Điều này được gọi là đa hình.

    15. 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.

    16. Property Accessors là gì?

    Các phần hoặc khối get và set của một thuộc tính được gọi là accessors (trình truy cập).

    public class Person
    {
        private string name; // field
        public string Name // property
        {
            get { return name; } // get method
            set { name = value; } // set method
        }
    }
    

    Chúng rất hữu ích để hạn chế khả năng truy cập của một thuộc tính.

    set chỉ định rằng chúng ta có thể gán một giá trị cho một trường riêng tư (private) trong một thuộc tính, và nếu không có thuộc tính set này, trường nói trên sẽ giống như một trường chỉ để đọc (read-only field).

    Với get, chúng ta có thể truy cập giá trị của trường riêng tư. Một bộ truy cập get chỉ định rằng chúng ta có thể truy cập công khai giá trị của một trường.

    17. Sự khác nhau giữa == và phương thức Equals?

    • - Equals so sánh theo kiểu tham chiếu.
    • - == so sánh theo kiểu giá trị.

    19. 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.

    19. 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.

    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. Sự khác nhau giữa abstract class và interface?

    Giống nhau:

    • - Abstract class và Interface đều không thể khởi tạo đối tượng bên trong được.
    • - Abstract class và Interface đều có thể khai báo các phương thức nhưng không thực hiện chúng.
    • - Abstract class và Interface đều bao gồm các phương thức abstract.
    • - Abstract class và Interface đều được thực thi từ các class con hay còn gọi kế thừa, dẫn xuất.
    • - Abstract class và Interface đều có thể kế thừa từ nhiều interface

    Khác nhau:

    Abstract class:

    • - Cho phép khai báo field.
    • - Các phương thức có thể có thân hàm hoặc không có thân hàm.
    • - Class dẫn xuất chỉ kế thừa được từ 1 abstract class và nhiều interface.
    • - Có chứa constructor.
    • - Các phương thức có từ khóa access modifier.

    Interface:

    • - Chỉ khai báo không có thân hàm.
    • - Class triển khai có thể triển khai nhiều interface.

    22. 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.

    23. Sự khác nhau giữa try{}catch{} và try{}catch{Exception ex}?

    Không có sự khác nhau.

    24. Object là gì?

    Theo MSDN, "một định nghĩa lớp hoặc cấu trúc giống như một bản thiết kế chỉ định những gì kiểu có thể làm. Về cơ bản một Object  là một khối bộ nhớ đã được cấp phát và cấu hình theo bản thiết kế. Một chương trình có thể tạo ra nhiều Object của cùng lớp. Các Object còn được gọi là instance và chúng có thể được lưu trữ trong một biến hoặc trong một mảng hoặc trong một tập hợp. Mã client là mã sử dụng các biến này để gọi các phương thức và truy cập các thuộc tính chung của đối tượng. Trong một ngôn ngữ hướng đối tượng như C #, một chương trình điển hình bao gồm nhiều Object tương tác động".

    Các Object giúp chúng ta truy cập thành viên của một lớp hoặc cấu trúc hoặc chúng có thể là trường, phương thức hoặc thuộc tính bằng cách sử dụng ".".

    25. Sự khác nhau giữa Dispose, Destructor và Finalize?

    • - Destructor sẽ được chuyển thành Finalize khi biên dịch.
    • - 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ớ.

    26. 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.

    27. 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ý.

    28. 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.

    29. 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ớ.
    • - 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.

    30. Mục đích của thừa kế (inheritance)?

    Để tái sử dụng.

    Kết

    Trên đó là 30 câu hỏi phỏng vấn ở dạng Basic cho vị trí Fresher nhất cho C# và .NET. Hi vọng có thể giúp ích được các bạn. Ở bài tới mình sẽ làm về những câu hỏi ở mức độ cao hơn phù hợp với các vị trí như Junior Senior.

    Hẹn gặp các bạn ở các bài viêt sau.


    Tiểu sử
    Are you one or zero?


    Bình luận