Bộ Câu Hỏi Kỹ Thuật C++ Cho Vị Trí Lập Trình Viên Backend

Tổng Quan Về Các Vấn Đề Kỹ Thuật Trong C++

Dưới đây là tập hợp các câu hỏi trắc nghiệm thường gặp trong quá trình tuyển dụng vị trí phát triển phần mềm sử dụng ngôn ngữ lập trình C++. Nội dung bao phủ từ cú pháp cơ bản, quản lý bộ nhớ, lập trình hướng đối tượng đến kiến trúc hệ điều hành và cấu trúc dữ liệu.

Phần 1: Trắc Nghiệm Chuyên Môn

1. Truy Cập Mảng

Khi định nghĩa một mảng hai chiều như int matrix[2][3];, cách truy xuất phần tử nào sau đây được coi là hợp lệ về mặt cú pháp và phạm vi?


A. matrix[0][2]
B. matrix[1][3]
C. matrix[1, 2]
D. matrix(1)(2)
2. Đặc Điểm Của Hàm Quá Tải (Overloading)

Về cơ chế hàm quá tải trong C++, nhận định nào sau đây chính xác nhất?

  • A. Tên hàm phải giống nhau nhưng số lượng tham số có thể khác.
  • B. Kiểu dữ liệu trả về là yếu tố duy nhất để phân biệt các hàm quá tải.
  • C. Tên hàm có thể khác nhau miễn là thực hiện chức năng tương tự.
  • D. Chỉ cần số lượng tham số khác nhau là đủ, không quan tâm kiểu dữ liệu.
3. Vòng Lặp và Điều Kiện Đẩy

Xét đoạn mã dưới đây, kết quả chạy sẽ như thế nào?


int value = -1;
do {
    value = value * value;
} while (!value);

Chọn đáp án đúng về số lần thực thi vòng lặp:

  • A. Thực hiện 1 lần
  • B. Thực hiện 2 lần
  • C. Là vòng lặp vô tận
  • D. Báo lỗi cú pháp ngay từ đầu
4. Bộ Nhớ Chuỗi Ký Tự

Cho khai báo chuỗi ký tự: char text[] = "DevOps";. Tổng số byte chiếm dụng bởi mảng này trên bộ nhớ là bao nhiêu?

  • A. 5 byte
  • B. 6 byte
  • C. 7 byte
  • D. 8 byte
5. Con Trỏ Với Mảng 2 Chiều

Biến arr là một mảng 2 chiều. Biểu thức nào dùng con trỏ để lấy giá trị phần tử tại hàng i cột j?


A. *(arr + i + j)
B. *(*((arr) + i) + j)
C. *(arr + i) + j
D. *arr + i + j
6. Cấu Trúc Union Và Byte Order

Giả sử hệ thống sử dụng mô hình Big-Endian. Xem xét chương trình sau:


union MixData {
  int integerVal;
  short shortVal;
};

int main() {
    MixData data;
    data.integerVal = 3;
    // Giả sử sizeof(int) = 4, sizeof(short) = 2
    printf("%d", data.shortVal & 1); 
    return 0;
}

Hệ thống sẽ in ra kết quả nào?

  • A. 3
  • B. 1
  • C. 2
  • D. 0
7. Thao Tác Trên Con Trỏ

Đoạn mã dưới đây sẽ hiển thị giá trị của biến a ra màn hình là gì?


int main() {
  int val = 20;
  int* ptr = &val;
  *ptr = 5;
  std::cout << val;
  return 0;
}
  • A. 5
  • B. 20
  • C. Không xác định
  • D. Lỗi biên dịch
8. Kế Thừa Và Biến Thành Viên

Kết quả in ra khi chạy đoạn mã liên quan đến kế thừa và tên biến trùng nhau trong lớp con là:


class Base {
 public:
  Base() { counter++; }
  virtual void show() { std::cout << counter; }
 private:
  static int counter;
};
class Child : public Base {
 public:
  virtual void show() { std::cout << counter; }
 private:
  int counter = 0;
};

int main() {
  Base* obj = new Child();
  obj->show();
  return 0;
}
  • A. 0
  • B. 1
  • C. 2
  • D. 3
9. Vòng Lặp Điều Kiện

Gia trị cuối cùng của biến x và nội dung màn hình hiển thị của chương trình này là gì?


int main() {
  int k = 0;
  int target = 0;
  do {
    if (k % 3 == 0) {
      std::cout << target;
      target++;
    }
    ++k;
  } while (k < 6);
  std::cout << target;
  return 0;
}
  • A. 01
  • B. 012
  • C. 011
  • D. 02
10. Lớp Trừu Tượng Và Khởi Tạo

Xét sự kế thừa từ một lớp chứa hàm thuần ảo:


class Root {
 public:
   virtual void action() = 0;
   Root() { std::cout << "R "; }
};
class Leaf : public Root {
 public:
   Leaf() { std::cout << "L "; }
};

int main() {
  Root* node = new Leaf();
  return 0;
} 

Nội dung sẽ hiển thị hoặc lỗi là gì?

  • A. R L
  • B. L R
  • C. Lỗi biên dịch
  • D. Không có gì cả
11. Kích Thước Đối Tượng抽象

Sử dụng hàm sizeof để kiểm tra kích thước của lớp trừu tượng sau trên nền tảng 64-bit:


class VoidInterface {
 public:
   virtual void callMethod() = 0;
 private:
   void* pointerRef;
};

int main() {
  std::cout << sizeof(VoidInterface);
  return 0;
}

Kết quả trả về xấp xỉ là bao nhiêu byte?

  • A. 4
  • B. 8
  • C. 16
  • D. 32
12. Nguyên Lý Cục Bộ (Locality)

Khái niệm "nguyên lý cục bộ" trong tổ chức bộ nhớ máy tính ám chỉ điều gì cốt lõi?

  • A. Tốc độ xử lý tuần tự của CPU
  • B. Việc truy cập bộ nhớ diễn ra không đồng đều
  • C. Các biến được lưu trữ liên tục trong RAM
  • D. Thứ tự thực thi các lệnh là cố định
13. Cơ Chế Đồng Bộ Hóa (Semaphore)

m tiến trình cạnh tranh truy cập vào tài nguyên chung. Sử dụng tín hiệu量 semaphore cho việc độc quyền truy cập. Giá trị cực tiểu và cực đại của semaphore là bao nhiêu?

  • A. 1 xuống -(m-1)
  • B. 1 lên m-1
  • C. 1 xuống -m
  • D. 1 lên m
14. Khối Điều Khiển Tiến Trình (PCB)

Thông tin nào dưới đây thường KHÔNG được lưu trực tiếp trong bảng điều khiển tiến trình?

  • A. ID tiến trình
  • B. Trạng thái hiện tại
  • C. Trạng thái thiết bị I/O cụ thể
  • D. Nội dung thanh ghi CPU
15. Quản Lý Bộ Nhớ Động

Một phương pháp quản lý bộ nhớ nào hỗ trợ tốt nhất cho cơ chế liên kết động (Dynamic Linking) của các module chương trình?

  • A. Quản lý theo ngăn (Segmentation)
  • B. Quản lý theo trang (Paging)
  • C. Phân bổ vùng thay đổi kích thước
  • D. Phân bổ vùng cố định
16. Thuput Trang (Page Replacement)

Hệ thống sử dụng thuật toán LRU với cơ chế thay thế cục bộ. Nếu cấp phát 4 khung trang và truy cập tuần tự 0, 1, 2, 3, 0, 1, 4... thì số lần phải thay thế trang (page fault after initial load) xảy ra nhiều nhất là bao nhiêu trong chu kỳ đó?

  • A. 1
  • B. 2
  • C. 3
  • D. 4
17. Cấu Trúc Dữ Liệu Hỗ Trợ

Kiến trúc dữ liệu nào thường được dùng làm hàng đợi tạm thời khi thực hiện duyệt đồ thị theo chiều rộng (BFS)?

  • A. Stack
  • B. Queue (Hàng đợi)
  • C. Red-Black Tree
  • D. Hash Table
18. Định Nghĩa Cây堆

Cấu trúc cây heap đặc biệt trong khoa học máy tính chính xác là một loại cây nhị phân nào?

  • A. Cây đầy đủ (Complete Binary Tree)
  • B. Cây nhị phân tìm kiếm
  • C. Cây AVL cân bằng hoàn toàn
  • D. Cây đỏ đen
19. Cơ Chế Lưu Trữ Chuẩn STL

Trong thư viện chuẩn C++ (STL), container nào có cấu trúc cài đặt nội tại là cây cân bằng màu (Red-Black Tree)?

  • A. std::vector
  • B. std::list
  • C. std::map
  • D. std::deque
20. Độ Phức Tạp Tìm Kiếm Hash Table

Đối với bảng băm (Hash Map) chứa n yếu tố, độ dài tìm kiếm trung bình phụ thuộc chủ yếu vào yếu tố nào?

  • A. Phụ thuộc tuyến tính O(n)
  • B. Phụ thuộc logarit O(log n)
  • C. Phụ thuộc bậc nhân O(n log n)
  • D. Không trực tiếp tỷ lệ thuận với n
21. Phân Tích Thuật Toán Sắp Xếp

Xét quy trình sắp xếp nhanh (Quick Sort). Trong các trạng thái trung gian của danh sách, trật tự nào sau đây KHÔNG thể là kết quả sau đúng 2 lượt chia mốc (pivot partition)?

  • A. 10, 20, 5, 30, 40, 60, 8, 90
  • B. 5, 8, 10, 20, 30, 40, 60, 90
  • C. 10, 5, 8, 20, 30, 60, 90, 40
  • D. 5, 10, 8, 30, 20, 60, 40, 90
22. Chu Kỳ Sống Của Đối Tượng

Tính tổng số phiên bản của lớp TestClass được sinh ra trên stack và heap sau khi thực thi đoạn code này:


TestClass obj(1);
TestClass arr[2];
TestClass ref = obj;
TestClass copy = obj;
TestClass* dynamicPtr = new TestClass(4);
  • A. 4
  • B. 5
  • C. 6
  • D. 7
23. Quản Lý Chuỗi Và Bộ Nhớ

Cho thấy thao tác nối chuỗi ký tự: strcat(dest, src). Trường hợp nào dưới đây dẫn đến rủi ro tràn bộ nhớ nghiêm trọng nếu không kiểm tra kích thước?

  • A. dest nhỏ hơn chuỗi gốc
  • B. dest đủ lớn chứa chuỗi gốc
  • C. dest bằng 0 byte
  • D. Dest rỗng nhưng không cấp phát thêm
24. Giá Trị Enum Mặc Định

Kết quả giá trị của hằng số x ở ngoài hàm khi định nghĩa Enum như sau:


enum MyEnum {
  v1, v2, v3 = 5, v4, v5
} x;
  • A. 0
  • B. 4
  • C. 8
  • D. Sai phạm vi
25. Quản Lý Tài Nguyên Tự Động

Trong phương thức thành viên, thao tác delete this; sẽ gây ra hậu quả gì nếu chưa xóa con trỏ gọi lại NULL ngay lập tức?


void MyClass::cleanup() {
    delete this;
}
// Sau khi gọi cleanup(), con trỏ vẫn còn giữ địa chỉ cũ
  • A. Gây tràn ngăn xếp (Stack Overflow)
  • B. Không lỗi ngay lập tức nhưng rủi ro treo máy nếu truy cập tiếp
  • C. Chặn biên dịch
  • D. Luôn gây lỗi Segmentation Fault ngay dòng lệnh
26. Căn Chỉnh Bộ Nhớ (Alignment)

Với cấu trúc dữ liệu struct Info chứa các trường: char (1), int* (8), int (4), bool (1), double (8) trên kiến trúc 64-bit. Phát biểu nào đúng?


struct Info {
    char a;
    long* ptr;
    int b;
    bool flag;
    double score;
};
  • A. sizeof(a) trả về 8
  • B. sizeof(ptr) trả về 4
  • C. sizeof(score) trả về 8
  • D. Tổng kích thước cấu trúc luôn nhỏ hơn tổng thành phần đơn lẻ

Thẻ: c++11 Object Oriented Programming Memory Layout Data Structures Operating System Concepts

Đăng vào ngày 1 tháng 7 lúc 16:29