39+ câu hỏi phỏng vấn OOP nhà tuyển dụng hay hỏi nhất

ITNavi 29 Sep 2023 2381

Câu hỏi phỏng vấn OOP được coi là một chủ đề được ưa thích trong các buổi phỏng vấn technical. Chính bởi sự phổ biến của nó, nên trong bài viết dưới đây ITnavi sẽ tổng hợp các câu hỏi và câu trả lời phỏng vấn về tất cả các khía cạnh của OOP level fresher, middle đến senior,... cùng kinh nghiệm phỏng vấn “bách phát bách trúng”.

Các câu hỏi phỏng vấn OOP fresher, junior

Đầu tiên, chúng ta đến với phần cơ bản nhưng cực kỳ quan trọng. Cần nắm vững về khái niệm và các thành phần của OOP, nếu không trả lời phần câu hỏi phỏng vấn OOP này được thì khả năng fail là rất cao. Bạn hãy chú ý nhé.

1. OOPS là gì?

OOPS (Object-Oriented Programming: lập trình hướng đối tượng) là một mô hình lập trình dựa trên các khái niệm về class và object. Trong đó, các đối tượng chứa các dữ liệu, thuộc tính và phương thức hoạt động trên dữ liệu đó. 

2. Các tính chất của OOPS gồm những tính chất nào?

Lập trình hướng đối tượng có 4 tính chất cốt lõi:

  • Tính đóng gói
  • TÍnh kế thừa
  • Tính trừu tượng
  • Tính đa hình

3. Class trong OOP là gì?

Một class nói đơn giản là đại diện của một loại đối tượng, có thể là bản thiết kế/kế hoạch/mẫu mô tả chi tiết của đối tượng. Class định nghĩa đầy đủ về cấu trúc và hành vi của đối tượng thuộc về class đó.

4. Hãy cho biết đối tượng (Object) trong OOP là gì?

Một đối tượng là một thể hiện cụ thể của một class, có trạng thái, hành vi và bản sắc. Đối tượng chứa dữ liệu và thực hiện phương thức (method) mà class đó định nghĩa.

5. Nêu khái niệm đóng gói (Encapsulation) trong OOP là gì?

Đóng gói (Encapsulation) là một thuộc tính của một đối tượng (object), có chứa tất cả dữ liệu bị ẩn. Dữ liệu ẩn đó có thể bị hạn chế đối với các thành viên của class đó.

Các cấp độ của Encapsulation là: 

  • Công khai
  • Được bảo vệ
  • Riêng tư
  • Nội bộ
  • Nội bộ được bảo vệ

6.  Đa hình (Polymorphism) trong OOP là gì?

Đa hình là khái niệm trong lập trình hướng đối tượng, cho phép đối tượng của các class khác nhau thực hiện cùng một phương thức, nhưng theo cách riêng biệt. Nói một cách đơn giản, tính đa hình có nhiều hơn một dạng.

7. Kế thừa (Inheritance) là gì?

Kế thừa (Inheritance) là một khái niệm trong đó một lớp chia sẻ cấu trúc và hành vi được xác định trong class khác. Nếu Kế thừa áp dụng cho một class được gọi là kế thừa đơn. Nếu nó phụ thuộc vào nhiều class thì nó được gọi là đa kế thừa.

8. Manipulators trong OOP là gì?

Manipulators là các hàm có thể được sử dụng cùng với các toán tử chèn (<<) và trích xuất (>>) trên một đối tượng. Ví dụ là endl và setw.

9. Hàm tạo (constructor) là gì?

Hàm tạo (constructor) là một phương thức được sử dụng để khởi tạo trạng thái của một đối tượng và nó được gọi tại thời điểm tạo đối tượng. Các quy tắc cho hàm tạo là:

  • Tên hàm tạo cần giống với tên class.
  • Hàm tạo không được có return type.

10. Hàm hủy (Destructor) OOP là gì?

Hàm hủy là một phương thức được gọi tự động khi đối tượng được tạo trong scope hoặc bị phá hủy. Tên hàm hủy (Destructor) cũng giống như tên lớp nhưng có ký hiệu “ ~ “trước tên.

11. Hàm Inline trong OOP là gì?

Hàm Inline là một hàm được định nghĩa bằng từ khóa inline, được trình biên dịch dùng và hướng dẫn chèn nội dung hoàn chỉnh của hàm vào bất cứ nơi nào hàm đó được sử dụng trong source code chương trình.

12. Hàm ảo là gì?

Hàm ảo (virtual function) là hàm thành viên của một class và chức năng của nó có thể bị ghi đè trong lớp dẫn xuất của nó. Hàm này có thể được triển khai bằng cách sử dụng từ khóa virtual và nó có thể được đưa ra trong quá trình khai báo hàm.

Một hàm ảo có thể được khai báo bằng token(virtual) trong C++. Nó có thể được khai báo trong ngôn ngữ C/Python bằng cách sử dụng con trỏ hàm hoặc con trỏ để hoạt động (pointers to function).

13. Hàm overloading là gì?

Nạp chồng (overloading) hàm là một hàm thông thường nhưng được gán nhiều tham số. Nó cho phép định nghĩa nhiều phương thức có cùng tên, nhưng khác nhau về số lượng hoặc loại đầu vào, đầu ra của hàm.

Ví dụ:

void add(int& a, int& b);

void add(double& a, double& b);

void add(struct bob& a, struct bob& b);

 

14. Toán tử overloading là gì?

Toán tử overloading là một hàm trong đó các toán tử khác nhau được áp dụng và phụ thuộc vào các đối số. Toán tử,-,* có thể được sử dụng để truyền qua hàm và nó có quyền ưu tiên riêng để thực thi. Toán tử overloading có thể được sử dụng trong nhiều ngôn ngữ lập trình như Python, C++, Java và JavaScript.

15. Hãy cho biết lớp trừu tượng (abstract class) là gì?

Lớp trừu tượng (abstract class) là lớp không thể khởi tạo được. Chúng ta không thể tạo một đối tượng bằng một abstract class, nhưng nó có thể được kế thừa từ hàm cơ sở. Một abstract class chứa ít nhất một abstract method.

Câu hỏi phỏng vấn OOP level senior, master

Nhóm câu hỏi phỏng vấn OOP nâng cao này đánh giá kiến thức của các ứng viên có trên 3 năm kinh nghiệm lập trình OOP hoặc làm việc liên quan đến OOP. Ngoài câu trả lời gợi ý, để tăng tính thuyết phục và thể hiện năng lực bản thân, bạn cũng có thể kèm thêm các ví dụ hoặc tình huống đã từng gặp trong thực tế với nội dung được đề cập.

1. Khái niệm OOPS nào được sử dụng làm reuse mechanism?

Kế thừa (Inheritance) là khái niệm OOPS có thể được sử dụng như một cơ chế tái sử dụng.

2. Trình xác định truy cập mặc định trong định nghĩa class là trình nào?

Trong định nghĩa class, trình xác định quyền truy cập mặc định là public trong một số ngôn ngữ lập trình như Java, C#, and Python. Tuy nhiên, có một vài trường hợp ngoại lệ, trình xác định truy cập mặc định cho một lớp được khai báo trong một lớp khác là private (riêng tư).

3. Từ khóa nào có thể được sử dụng để nạp chồng (overloading)?

Từ khóa toán tử (Operator keyword) được sử dụng để nạp chồng.

4. Có thể tạo bao nhiêu instances cho một lớp trừu tượng (abstract class)?

Không thể tạo bất kỳ instances nào cho lớp trừu tượng vì lớp trừu tượng (abstract class) là lớp mà không thể tạo đối tượng trực tiếp, chỉ có thể sử dụng hàm cơ sở để tạo các class con. 

5. Static và dynamic Binding (Ràng buộc tĩnh và động) là gì?

Ràng buộc (Binding) là quá trình liên kết giữa tên với class.

  • Ràng buộc tĩnh (Static Binding) còn được gọi là liên kết sớm, xảy ra trong thời gian biên dịch, khi trình biên dịch xác định method nào sẽ được gọi dựa trên kiểu của đối tượng tham chiếu.
  • Ràng buộc động, còn được gọi là liên kết muộn, xảy ra trong thời gian chạy khi trình runtime xác định method nào sẽ được gọi dựa trên kiểu đối tượng thực tế.

6. Lớp cơ sở (base class), lớp con (subclass) và lớp cha (superclass) là gì?

  • Lớp cơ sở là lớp tổng quát nhất và được gọi là lớp gốc, cung cấp thuộc tính và phương thức chung cho các lớp con. Lớp cơ sở chính là lớp mà các lớp khác kế thừa.
  • Lớp con là lớp kế thừa từ một hoặc nhiều base class.
  • Lớp cha là lớp mà lớp con kế thừa, cung cấp thuộc tính và phương thức chung cho các lớp con.

7. Từ khóa virtual thể hiện điều gì trong method definition?

Nó có nghĩa là chúng ta có thể ghi đè phương thức bởi các lớp con.

8. Chúng ta có yêu cầu tham số cho hàm tạo (constructors) không?

Không, chúng ta không yêu cầu tham số cho hàm tạo. Hàm tạo có thể có tham số hoặc là không.

9. Tất cả các toán tử không thể nạp chồng (overload) là gì?

Sau đây là các toán tử không thể được nạp chồng:

  • Scope Resolution (::)
  • Member Selection (.)
  • Member selection thông qua con trỏ tới hàm (.*)

10. Pure virtual function (hàm thuần ảo) là gì?

Hàm thuần ảo là hàm có thể được ghi đè trong lớp dẫn xuất nhưng không thể định nghĩa được. Một hàm ảo có thể được khai báo là Pure bằng cách sử dụng toán tử =0.

Ví dụ:

Virtual void function1() // Virtual, Not pure

 

Virtual void function2() = 0 //Pure virtual

11. Công cụ sửa đổi truy cập mặc định (default access modifier) trong một class là gì?

Công cụ sửa đổi truy cập mặc định (default access modifier) của một class là internal và công cụ sửa đổi truy cập mặc định của thành viên class là Riêng tư (private).

12. Ràng buộc sớm (early Binding) và ràng buộc muộn (late Binding) là gì?

  • Ràng buộc sớm đề cập đến việc gán giá trị cho các biến trong thời gian thiết kế
  • Ràng buộc muộn đề cập đến việc gán giá trị cho các biến trong runtime.

13. Có những loại hàm tạo (constructors) nào?

Có ba loại hàm tạo:

  • Trình xây dựng mặc định (Default Constructor) – Không có tham số.
  • Hàm tạo tham số (Parametric Constructor) – Có tham số. Tạo một instance mới của một lớp và đồng thời truyền các đối số.
  • Copy Constructor – Tạo một đối tượng mới dưới dạng bản sao của đối tượng hiện có.

14. Làm thế nào chúng ta có thể gọi phương thức cơ sở mà không cần tạo một  instance?

Ta có thể gọi phương thức cơ sở mà không cần tạo instance bằng “Static method”. Tức là thực hiện kế thừa từ lớp đó. Sử dụng từ khóa super() và nó sẽ trả về đối tượng tham chiếu đến lớp cơ sở.

15. Trong lập trình hướng đối tượng, công cụ sửa đổi truy cập (access modifiers) là gì?

Công cụ sửa đổi quyền truy cập xác định phạm vi của phương thức hoặc các biến có thể được truy cập từ các đối tượng hoặc class khác nhau. Có năm loại công cụ sửa đổi truy cập gồm:

  • Private
  • Protected
  • Public
  • Friend
  • Protected Friend

Một số câu hỏi phỏng vấn OOP khác

Dưới đây là các câu hỏi phỏng vấn OOP chi tiết trong các chủ đề và mở rộng sang các kiến thức liên quan khác như PHP, Java, C#, C++,... Những câu hỏi dưới đây sẽ là cơ sở để nhà tuyển dụng đánh giá khả năng chủ động học hỏi và tìm hiểu chuyên sâu của ứng viên.

Câu hỏi phỏng vấn OOP PHP

 

1. Bạn hãy lấy một ví dụ về khái niệm OOP trong PHP

Dưới đây là một ví dụ về OOP trong PHP:

// Định nghĩa một lớp (class) Animal

class Animal {

    // Thuộc tính (property)

    public $name;

    

    // Phương thức (method)

    public function speak() {

        echo "This animal speaks.";

    }

}

 

// Tạo một đối tượng (object) từ lớp Animal

$cat = new Animal();

 

// Đặt giá trị cho thuộc tính "name" của đối tượng

$cat->name = "Cat";

 

// Gọi phương thức "speak" của đối tượng

$cat->speak(); // Output: "This animal speaks."

2. Require và Include trong PHP có giống nhau không?

Không. Câu lệnh Require và Include trong PHP có nhiều điểm gần như giống hệt nhau ở phiên bản PHP 4 trở lên. Nhưng vẫn có điểm khác biệt:

  • Include: Gồm các tệp đã chỉ định và đánh giá nó. Trình biên dịch PHP sẽ chỉ hiện thị cảnh báo nếu xuất hiện lỗi.
  • Require: Bắt buộc phải có tệp và trình biên dịch sẽ dừng thực thi, thông báo lỗi nếu tệp được yêu cầu không tồn tại.

3. Self và $this khác nhau thế nào?

  • Self: tham chiếu đến class hiện tại. self::$member dùng cho các thành viên static.
  • $this: tham chiếu đến object hiện tại. Dùng $this->member cho các thành viên non-static.

 

 Ngoài những câu hỏi phỏng vấn OOP về PHP phía trên, ITNavi cũng tổng hợp một số câu hỏi khác mang tính chuyên sâu hơn phía dưới đây:

  • Từ khóa "final" trong PHP có tác dụng gì?
  • Namespace trong PHP là gì?
  • Bạn hãy nêu các hoạt động của các phương thức Magic __construct, __destruct, __get, và __set
  • Dependency Injection (DI) trong OOP là gì?
  • Hãy giải thích Constructor và Destructor trong PHP là gì?

Câu hỏi phỏng vấn OOP Java

Một số câu hỏi phỏng vấn OOP chủ đề Java bạn có thể tham khảo dưới đây.

1. Tính đa hình trong OOP Java là gì?

Tính đa hình là khả năng một object có thể thực hiện một tác vụ theo nhiều cách khác nhau, cụ thể là cho phép biến/hàm hoặc đối tượng có thể có nhiều dạng khác nhau.

Có 2 loại đa hình là:

  • Đa hình tĩnh (Static polymorphism): Được thực hiện tại thời điểm biên dịch.
  • Đa hình động (Dynamic polymorphism): Được thực hiện tại thời điểm chạy.

2. Nêu khái niệm tính trừu tượng trong Java là gì?

Tính trừu tượng là khả năng cung cấp thông tin cần thiết cho người dùng, ẩn đi các chi tiết triển khai, giúp tập trung vào các tính năng và hành vi của object mà không cần quan tâm đến cách thức thực hiện.

Tính trừu tượng có thể thực hiện bằng cách sử dụng abstract class và abstract method.

3. Hãy nêu khái niệm tính kế thừa trong Java là gì?

Tính kế thừa trong Java cho phép một lớp con kế thừa các thuộc tính, phương thức từ một class cha.

4. Runtime polymorphism là gì?

Đa hình động (Runtime polymorphism) là khái niệm trong lập trình hướng đối tượng, cho phép đối tượng được thể hiện của một lớp con có thể thực hiện một phương thức mà nó đã được định nghĩa lại từ class cha. Trong Java, Runtime polymorphism thường sử dụng phương thức ghi đè (method overriding).

Câu hỏi phỏng vấn OOP C++

Dưới đây là các câu hỏi phỏng vấn OOP về chủ đề C++ thường được nhà tuyển dụng hỏi và đánh giá.

1. Các loại công cụ sửa đổi quyền truy cập C++ là gì?

Có 3 loại công cụ sửa đổi quyền truy cập là:

  • Public
  • Private
  • Protected

2. Hàm tạo trong C++ là gì?

Trong C++, hàm tạo là một thành viên được dùng để khởi tạo một object mới, gọi phương thức của đối tượng hoặc thực hiện bất cứ nhiệm vụ nào để khởi tạo đối tượng. Hàm tạo trùng tên với class mà nó thuộc về.

3. STL là gì?

STL C++ là một thư viện chuẩn của ngôn ngữ lập trình C++, cung cấp các cấu trúc dữ liệu (mảng, danh sách, cây,...) và thuật toán (sắp xếp, tìm kiếm, duyệt) chung, thực hiện các tác vụ phổ biến trong lập trình.

Kinh nghiệm phỏng vấn OOP ‘mượt’ nhất

Trong hội đồng phỏng vấn IT sẽ luôn có HR và người phỏng vấn chuyên môn (dev lead, dev manager, PM,...). Vì vậy, ngoài những câu hỏi phỏng vấn OOP từ người phỏng vấn chuyên môn, thì HR cũng sẽ đặt ra các câu hỏi khác để đánh giá về tính cách, phong cách và sự phù hợp với văn hóa doanh nghiệp. Và, dù có là câu hỏi về chủ đề gì, thì bạn cũng nên lưu tâm một số kinh nghiệm để buổi phỏng vấn diễn ra trơn tru, thành công nhất. 

  • Chuẩn bị và điều chỉnh portfolio phù hợp với vị trí ứng tuyển.
  • CV thể hiện tính chuyên nghiệp, “giao diện” thân thiện với nhà tuyển dụng.
  • Luôn trung thực, thể hiện thái độ cầu thị, tinh thần cầu tiến.
  • Khéo léo biến cuộc phỏng vấn thành buổi trao đổi kiến thức trong trường hợp những kiến thức chuyên môn đó bạn chưa nắm vững hoặc chưa có cơ hội làm thực tế.
  • Xác nhận đúng, đủ các yêu cầu về bài test và chú ý “clean code” trong các bài thực hành
  • Đưa ra câu trả lời và có thể giải thích thêm về phương thức, công cụ, logic mà bạn giải quyết bài toán.
  • Gửi mail cảm ơn đã có cơ hội cùng trao đổi và học hỏi thêm nhiều kiến thức sau buổi phỏng vấn.

Lựa chọn việc làm OOP chế độ tốt ở đâu?

Với sứ mệnh kết nối việc làm và mang đến cho các lập trình viên, kỹ sư CNTT những cơ hội phát triển sự nghiệp lập trình OOP của mình, ITNavi đem đến giải pháp tìm kiếm việc làm IT dễ dàng, hợp gu và chất lượng hàng đầu.

2000+ từ hơn 100 công ty công nghệ hàng đầu được đăng tuyển mới nhất trên nền tảng ITNavi. Đăng ký nhận cập nhật từ ITNavi để chộp lấy cơ hội nhận offer công việc lập trình OOP:

  • Thu nhập hấp dẫn, đãi ngộ tốt
  • Việc làm “Chuẩn gu”, hợp yêu cầu
  • Dễ dàng tìm kiếm việc làm lập trình OOP

Trên đây, ITNavi đã chia sẻ tổng hợp các câu hỏi phỏng vấn OOP level fresher, middle, senior,... và kinh nghiệm phỏng vấn thuyết phục mọi nhà tuyển dụng. Nắm vững các câu hỏi trên không chỉ giúp bạn củng cố kiến thức về OOP mà còn tăng cơ hội thể hiện tốt trong các buổi phỏng vấn lập trình. Hãy chia sẻ và thực hành triển khai các nội dung về OOP trong các dự án thực tế để thêm cho mình những kinh nghiệm quý báu.

 

ITNavi - Nền tảng kết nối việc làm IT

Nguồn: 39+ câu hỏi phỏng vấn OOP nhà tuyển dụng hay hỏi nhất

Bài viết liên quan

NEWSLETTER

Nhập địa chỉ email của bạn dưới đây để đăng ký nhận tin mới nhất

KẾT NỐI VÀ THEO DÕI