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 16 câu hỏi phỏng vấn lập trình C++ phổ biến nhất ở cấp độ chuyên gia (Experienced). 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 độ chuyên gia đang đi xin việc và nhà tuyển dụng.
Câu 1: Viết chương trình kiểm tra một số xem nó có phải là số palindrome hay không?
Trả lời:
Câu 2: Hàm khởi tạo bản sao là gì?
Trả lời: Hàm bản sao là một hàm thành viên sử dụng một đối tượng khác từ cùng một lớp để khởi tạo một thứ mới. Nói một cách đơn giản, hàm sao chép là một hàm tạo ra một đối tượng bằng cách khởi tạo nó với một đối tượng khác của cùng một lớp đã được xây dựng.
Code mẫu:
#include <iostream>
using namespace std;
class A
{
Public:
int x;
A(int a) // parameterized constructor.
{
x=a;
}
A(A &i) // copy constructor
{
x = i.x;
}
};
int main()
{
A a1(20); // Calling the parameterized constructor.
A a2(a1); // Calling the copy constructor.
cout<<a2.x;
return 0;
}
Câu 3: Viết chương trình tìm giai thừa của một số?
Trả lời:
Câu 4: Kế thừa là gì?
Trả lời: Kế thừa là cơ chế mà trong đó bạn có thể tạo ra một lớp mới hay còn gọi là lớp con từ lớp hiện tại hay còn gọi là lớp cha. Lớp con này còn được gọi là lớp dẫn xuất và lớp cha còn được gọi là lớp cơ sở.
Câu 5: Trừu tượng là gì?
Trả lời: Trừu tượng có thể được định nghĩa là một kỹ thuật trong đó bạn chỉ hiển thị chức năng cho người dùng, tức là các chi tiết mà bạn muốn người dùng nhìn thấy, ẩn đi các chi tiết bên trong hoặc các chi tiết của quá trình triển khai.
Câu 6: Đoạn code sau đây trả về kết quả là gì?
A: 5.
B: 4.
C: 7.
D: 6.
Trả lời: Kết quả là D, 6. Toán tử bậc ba được sử dụng, giá trị của a nhỏ hơn b vi phạm điều kiện nên 6 là câu trả lời cuối cùng.
Câu 7: Viết chương trình tìm tần suất của một số trong C++?
Trả lời:
Câu 8: Đoạn code sau đây trả về kết quả là gì?
A: 1010.
B: 1001.
C: 11.
D: 1000.
Trả lời: Kết quả là A, 1010. Giá trị của j được tăng lên 11, sau đó giá trị j được thêm vào 100 nhưng không được gán và cuối cùng, giá trị của j (là 11) được thêm vào 999 và cho ra kết quả cuối cùng là 1010.
Câu 9: Tuyên bố nào sau đây về các đối tượng chuỗi trong C++ là chính xác?
A: Các đối tượng chuỗi luôn phải được kết thúc bằng ký tự null.
B: Các đối tượng chuỗi có kích thước tĩnh.
C: Các đối tượng chuỗi có kích thước động.
D: Các đối tượng chuỗi sử dụng nhiều bộ nhớ hơn yêu cầu.
Trả lời: Kết quả là C, các đối tượng chuỗi có kích thước động.
Câu 10: So sánh sự khác biệt giữa shallow copy và deep copy.
Trả lời:
Shallow Copy | Deep Copy |
Nó lưu trữ các tham chiếu của đối tượng đến địa chỉ bộ nhớ ban đầu | Nó tạo ra một bản sao mới và riêng biệt của toàn bộ đối tượng và địa chỉ bộ nhớ duy nhất của nó |
Nhanh hơn | Tương đối chậm |
Nó phản ánh những thay đổi được thực hiện đối với đối tượng mới/được sao chép trong đối tượng ban đầu | Nó không phản ánh những thay đổi được thực hiện đối với đối tượng mới/được sao chép trong đối tượng ban đầu |
Câu 11: Hàm ảo với hàm ảo thuần túy khác nhau như thế nào?
Trả lời: Hàm ảo là hàm thành viên của lớp cơ sở mà lớp dẫn xuất có thể sửa đổi. Hàm thành viên của lớp cơ sở là hàm ảo thuần túy phải được định nghĩa trong kiểu dẫn xuất; nếu không lớp dẫn xuất cũng trở nên trừu tượng.
class
interface Woocommerce{
void print();
}
class Bat implements Woo{
public void print(){System.out.println("Woo!");}
public static void main(String args[]){
Bat obj = new Bat();
obj.print();
}
}
Câu 12: Lớp D được dẫn xuất từ lớp cơ sở B. Nếu tạo đối tượng kiểu D thì hàm tạo của lớp này sẽ được gọi theo thứ tự nào?
Trả lời: Lớp dẫn xuất bao gồm hai phần: Phần cơ sở và phần dẫn xuất. C++ xây dựng các đối tượng dẫn xuất theo từng giai đoạn. Quá trình bắt đầu với việc xây dựng lớp cơ sở nhiều nhất (ở trên cùng của cây thừa kế), tiếp theo là xây dựng từng lớp con theo thứ tự và sau đó là lớp con nhiều nhất. Do đó, đầu tiên, hàm khởi tạo của lớp B sẽ được gọi, sau đó là hàm khởi tạo của lớp D.
Câu 13: Hàm ảo có thể được gọi từ một hàm khởi tạo không?
Trả lời: Một quy trình ảo được gọi là một hàm Object nhưng hãy thận trọng. Nó có thể hoạt động khác với những gì bạn mong đợi. Cơ chế gọi ảo trong một hàm Object bị vô hiệu hóa do việc ghi đè từ các lớp dẫn xuất chưa xảy ra. Các khối xây dựng được sử dụng để tạo ra các đối tượng, "cơ sở trước khi dẫn xuất".
class Dog{
void make(){
System.out.println("labrador");
}
}
public class Big extends Dog{
void make(){
System.out.println("Big Dog labrador ");
}
public static void main(String args[]){
Dog ob1 = new Big();
ob1.make();
}
}
Câu 14: Con trỏ void là gì?
Trả lời: Trong C++, một con trỏ void không có kết nối với bất kỳ kiểu dữ liệu cụ thể nào. Nó chỉ định một vị trí cho dữ liệu cụ thể trong bộ lưu trữ. Điều này chỉ ra rằng nó đang trỏ đến địa chỉ của một biến. Nó cũng có tên là "con trỏ mục đích chung".
#include <iostream>
using namespace std;
int main()
{
int a = 10;
char b = 'x';
void* p = &a; // void pointer holds address of int 'a'
p = &b; // void pointer holds address of char 'b'
}
Câu 15: Làm cách nào để giải phóng và cấp phát bộ nhớ trong C++?
Trả lời: Trong C++, heap được sử dụng để cấp phát bộ nhớ động và các hàm này là một phần của thư viện chuẩn. Malloc() và free() là hai thao tác quan trọng với bộ nhớ động. Kích thước của vùng bộ nhớ mong muốn tính bằng byte, tham số duy nhất được chấp nhận bởi hàm malloc().
Quản Trị Mạng hy vọng rằng bài viết này sẽ có ích đối với bạn.