Phỏng vấn là một bước quan trọng với cả người lao động và doanh nghiệp. Với người lao động, bạn cần trả lời tốt các câu hỏi phỏng vấn để được nhận vào làm. Trong khi đó, doanh nghiệp có nhu cầu tuyển dụng phải tạo ra một bộ câu hỏi phù hợp để đánh giá chuẩn xác nhất năng lực của ứng viên.
Trong bài viết này, Quản Trị Mạng sẽ tổng hợp 20 câu hỏi phỏng vấn lập trình C++ phổ biến nhất ở cấp độ trung cấp (Intermediate). Quản Trị Mạng hy vọng rằng bài viết này sẽ có ích đối với cả những lập trình viên ở trình độ trung cấp đang đi xin việc và nhà tuyển dụng.
Câu 1: Khái niệm OOP trong C++ là gì?
Trả lời: Khái niệm OOP trong C++ là:
- Đối tượng (Object)
- Lớp (Class)
- Kế thừa (Inheritance)
- Đa hình (Polymorphism)
- Đóng gói (Encapsulation)
- Trừu tượng (Abstraction)
Đối tượng: Bất cứ thứ gì tồn tại trong thế giới thực đều được gọi là đối tượng.
Lớp: Tập hợp các đối tượng được gọi là lớp.
Kế thừa: Các thuộc tính của lớp cha được kế thừa vào lớp con gọi là kế thừa.
Đa hình: Đó là khả năng tồn tại ở nhiều dạng.
Đóng gói: Liên kết code và dữ liệu với nhau thành một đơn vị.
Trừu tượng: Ẩn các chi tiết bên trong và hiển thị chức năng cho người dùng.
Câu 2: Kiểu trả về void() được sử dụng khi nào?
Trả lời: Kiểu trả về void() được sử dụng khi chúng ta không muốn trả về bất kỳ giá trị nào. Nó chỉ định rằng hàm không trả về giá trị. Hàm có kiểu trả về void hoàn thành nhiệm vụ của nó và sau đó trả lại điều khiển cho người gọi.
Câu 3: Trong C++, gọi theo giá trị và gọi theo tham chiếu là gì?
Trả lời: Trong phương thức gọi theo giá trị, chúng ta chuyển các bản sao của tham số thực sang tham số hình thức của hàm. Điều này có nghĩa là nếu có bất kỳ thay đổi nào về giá trị bên trong hàm thì thay đổi đó sẽ không ảnh hưởng đến giá trị thực.
Trong phương thức gọi theo tham chiếu, tham chiếu hoặc địa chỉ của các tham số thực tế được đến các tham số chính thức của hàm. Điều này có nghĩa là mọi thay đổi về giá trị bên trong hàm sẽ được phản ánh trong các giá trị thực tế.
Câu 4: Hàm nội tuyến là gì?
Trả lời: Một hàm nội tuyến khi được gọi sẽ mở rộng theo dòng. Khi bạn gọi hàm này, toàn bộ code của hàm nội tuyến sẽ được chèn hoặc thay thế tại lệnh gọi hàm nội tuyến.
Cú pháp:
Inline return-type function-name(parameters)
{
}
Câu 5: Con trỏ trong C++ là gì?
Trả lời: Con trỏ là biến lưu trữ địa chỉ bộ nhớ của biến khác. Kiểu của biến phải tương ứng với kiểu của con trỏ.
Cú pháp: type *name
Câu 6: Toán tử phân giải phạm vi là gì?
Trả lời: Toán tử phân giải phạm vi được biểu diễn dưới dạng ::.
Toán tử này được sử dụng để liên kết định nghĩa hàm với một lớp cụ thể.
Toán tử phạm vi được sử dụng cho các mục đích sau:
- Để truy cập một biến toàn cục khi bạn có một biến cục bộ trùng tên.
- Để định nghĩa một hàm bên ngoài lớp.
Câu 7: Chương trình C++ dưới đây sẽ trả về kết quả là gì?
A: 01
B: 02
C: 012
D: 011
Trả lời: Kết quả là C, 012. Giá trị của i là 0 và i chia cho 5 (i%5) bằng 0, một phép chia hết không dư, vì vậy x được hiển thị và tăng lên và i cũng được tăng lên. Sau đó 1%5 khác là một phép chia có dư vì vậy không đáp ứng điều kiện. Tương tự như thế, quá trình sẽ lặp lại cho khi i bằng 5. Khi đó, 5%5 là một phép chia không dư, x bằng 1 và giá trị i và x lại được tăng lên thành 2. Quá trình sẽ lặp lại cho 6,7,8,9 và tới 10 thì phép chia 10%10 lại là chia hết, giá trị của x được trả về, là 2.
Câu 8: Hàm khởi tạo là gì?
Trả lời: Một hàm khởi tạo được định nghĩa là một hàm thành viên được gọi bất cứ khi nào bạn tạo một đối tượng; nó có cùng tên với lớp.
Có hai loại hàm khởi tạo:
- Hàm khởi tạo mặc định: Hàm này được tạo ra một cách tự động và không nhận bất kỳ đối số nào.
- Hàm khởi tạo được tham số hóa: Trong hàm khởi tạo này, nó có thể truyền các đối số.
Câu 9: Định nghĩa nạp chồng toán tử và nạp chồng hàm.
Trả lời: Nạp chồng toán tử là một ví dụ về đa hình thời gian biên dịch (compile-time). Đó là khái niệm sửa đổi toán tử C++ hiện có mà không làm thay đổi ý nghĩa ban đầu của nó.
Dưới đây la ví dụ của nạp chồng toán tử:
class A
{
};
int main()
{
A a1,a2,a3;
a3= a1 + a2;
return 0;
}
Nạp chồng hàm (function overloading) là tính năng của ngôn ngữ C++ (không có trong C). Kỹ thuật này cho phép sử dụng cùng một tên gọi cho nhiều hàm (có cùng mục đích). Nhưng khác nhau về kiểu dữ liệu tham số hoặc số lượng tham số.
Câu 10: Làm thế nào để nhập một chuỗi có dấu cách trong C++?
Trả lời:
Câu 11: new và malloc có gì khác nhau?
Trả lời:
new | malloc |
new là một toán tử | malloc() là một hàm |
Nói gọi hàm khởi tạo | Hàm malloc không gọi hàm khởi tạo |
Khi sử dụng new() không cần chỉ định kích thước bộ nhớ cụ thể | Bạn sẽ phải chỉ định kích thước bộ nhớ cụ thể |
Toán tử new có thể nạp chồng | Hàm malloc() không bao giờ có thể nạp chồng |
Câu 12: Nạp chồng toán tử là gì?
Trả lời: Nạp chồng toán tử là một cơ chế trong đó toán tử được trao cho một ý nghĩa đặc biệt.
Ví dụ, bạn có thể nạp chồng toán tử "+" trong một chuỗi giống như lớp để nối hai chuỗi chỉ bằng cách sử dụng "+".
Câu 13: Chương trình C++ dưới đây sẽ trả về kết quả là gì?
A: 0 3
B: 0 8
C: 0 6
D: 0 2
Trả lời: Kết quả là C, 0 6. Trong enum, giá trị của phần tử lớn hơn một so với phần tử trước đó. Giá trị của màu xanh da trời (blue) là 0 theo mặc định và giá trị của màu xanh lá (green) là 5 do vậy giá trị của GREAT sẽ tự động trở thành 6.
Câu 14: Điều gì sau đây được sử dụng để trả về số lượng ký tự trong một chuỗi?
A: Size (Kích thước)
B: Length (Chiều dài)
C: Cả size và length (Cả kích thước và chiều dài)
D: Name (Tên)
Trả lời: Đáp án là C, cả kích thước và chiều dài đều được sử dụng để trả về số lượng ký tự trong một chuỗi.
Câu 15: Câu trả lời nào đúng với chương trình dưới đây:
A: Kết quả trả về sẽ là 7.
B: Kết quả trả về sẽ là 14.
C: Kết quả trả về sẽ là 0.
D: Kết quả trả về sẽ là 1.
Trả lời: Kết quả trả về sẽ là 7. Con trỏ 0 có địa chỉ bộ nhớ là x và nếu bạn hiển thị con trỏ với một toán tử khác thì nó sẽ hiển thị giá trị là 7.
Câu 16: Câu trả lời nào đúng với chương trình dưới đây:
A: Kết quả trả về sẽ là 245.
B: Kết quả trả về sẽ là 222.
C: Kết quả trả về sẽ là 4810.
D: Kết quả trả về sẽ là 4812.
Trả lời: Kết quả trả về sẽ là 4810, bởi vì bạn đang chuyển các tham chiếu của hàm ở đây.
Câu 17: Hàm bạn là gì?
Trả lời: Bạn có thể định nghĩa hàm bạn là một hàm có thể truy cập các thành viên riêng tư, công khai và được bảo vệ của lớp. Bạn khai báo hàm bạn với sự trợ giúp của từ khóa friend. Bạn khai báo hàm này bên trong lớp.
Câu 18: Để tìm kích thước của một đối tượng hoặc một kiểu, bạn dùng công cụ nào dưới đây?
A: sizeof.
B: malloc.
C: realloc.
D: calloc.
Trả lời: Đáp án là A, sizeof. Toán tử sizeof được sử dụng để tìm kích thước của một đối tượng hoặc kiểu.
Câu 19: Hàm nào dưới đây không phải là một thành viên của một lớp?
A: Hàm tĩnh.
B: Hàm ảo.
C: Hàm const.
D: Hàm bạn.
Trả lời: Đáp án là D, hàm bạn.
Câu 20: STL là gì?
Trả lời: STL là viết tắt của standard template library (thư viện template tiêu chuẩn). Nó là một thư viện chứa các mẫu cung cấp các lớp và hàm chung.
Các thành phần của STL là các container, thuật toán, trình vòng lặp và đối tượng hàm.
Quản Trị Mạng hy vọng rằng bài viết này sẽ có ích đối với các bạn!