Ngày đăng: 10/03/2023 | No Comments
Ngày cập nhật: 10/03/2023
Phỏng vấn là một phần cần thiết trong quá trình lựa chọn của bất kỳ công ty hoặc tổ chức nào. Để đối mặt với thử thách này, bạn cần chuẩn bị đầy đủ về mặt tinh thần lẫn chất lượng các câu trả lời. Đặc biệt là trong lĩnh vực IT, khi các câu hỏi kỹ thuật được cho là chủ đề chính trong các buổi phỏng vấn. Bài tổng hợp các câu hỏi phỏng vấn C++ đến từ Glints ở dưới đây sẽ giúp bạn có được sự chuẩn bị ưng ý nhất!
Đây là dạng câu hỏi cơ bản nhất trong số các câu hỏi phỏng vấn C++ thường gặp. Có 4 kiểu dữ liệu trong C++, cụ thể:
Trong C++, class hay lớp được hiểu là bản thiết kế của object – đối tượng. Nó là kiểu dữ liệu do người dùng định nghĩa với các thành viên dữ liệu và các hàm thành viên và được định nghĩa bằng từ khóa class.
Ngược lại, bạn có thể định nghĩa object – đối tượng là sự thể hiện hay xuất hiện của một class – lớp. Khi nó tạo đối tượng, thì nó có thể hoạt động trên cả thành viên dữ liệu và hàm thành viên.
Các câu hỏi phỏng vấn C++ dạng này đòi hỏi bạn phải có kiến thức vững chắc về cả C lẫn C++. C++ không chỉ duy trì tất cả các khía cạnh tốt đẹp từ ngôn ngữ C, nó còn đơn giản hóa việc quản lý bộ nhớ và thêm một số tính năng như:
Vòng lặp while xác minh điều kiện; nếu nó đúng, thì nó sẽ lặp lại vòng lặp cho đến khi điều kiện trở thành sai. Nếu điều kiện là sai trong vòng lặp while, thì không một câu lệnh nào sẽ thực thi bên trong vòng lặp.
Đối với vòng lặp do-while, mọi chuyện diễn ra khác hơn ở phần sau. Đầu tiên, vòng lặp do-while lặp lại thân vòng lặp một lần, sau đó nó kiểm tra điều kiện. Nếu điều kiện trong vòng lặp do-while là sai, thì phần thân cũng sẽ thực hiện một lần.
Đọc thêm: Các Câu Hỏi Phỏng Vấn Java Thường Gặp Nhất
Có, chúng ta hoàn toàn có thể biên dịch một chương trình mà không có hàm main. Tuy nhiên ta không thể chạy hoặc thực thi chương trình vì hàm main() là điểm bắt đầu. Từ hàm main, tất cả quá trình thực thi bắt đầu một cách tuần tự.
Đối với tiền tố – prefix (++i), đầu tiên, nó tăng giá trị, sau đó nó gán giá trị cho biểu thức. Ngược lại, đối với hậu tố – postfix (i++), nó gán giá trị cho biểu thức, sau đó nó tăng giá trị của biến.
Thuật ngữ đa hình đề cập đến sự hiện diện của nhiều hình thức. Thuật ngữ này cũng được đề cập khá thường xuyên trong các câu hỏi phỏng vấn C++.
Tính đa hình thường xảy ra khi có một hệ thống phân cấp của các lớp được liên kết với nhau bằng tính kế thừa. Tính đa hình trong C++ có nghĩa là tùy thuộc vào loại đối tượng gọi hàm mà một hàm khác sẽ được thực thi.
Một hàm thành viên trong lớp cơ sở được định nghĩa lại trong lớp dẫn xuất là một hàm ảo. Nó được khai báo bằng từ khóa virtual. Chức năng ảo có nhiệm vụ đảm bảo sự chính xác trong việc gọi đối tượng của một hàm. Điều này đúng trong mọi trường hợp kể cả khi chúng ta tạo lệnh với tham chiếu hay con trỏ để gọi hàm đó. Các chức năng ảo chủ yếu được sử dụng cho đa hình thời gian chạy.
Trừu tượng hóa là quá trình hiển thị các chi tiết cần thiết cho người dùng và ẩn các chi tiết mà nhà phát triển không muốn hiển thị cho người dùng hoặc ẩn các chi tiết không liên quan đến một người dùng cụ thể.
Đối với các câu hỏi phỏng vấn C++, ba loại chỉ định truy cập thường dễ gây nhầm lẫn. Cụ thể:
Không thể quá tải hàm hủy. Hàm hủy không nhận đối số, vì vậy chỉ có một cách để hủy đối tượng. Đó chính là lý do không thể quá tải hàm hủy.
Khi một biến trong một lớp được khai báo là tĩnh, không gian dành cho nó sẽ được phân bổ trong suốt thời gian tồn tại của chương trình. Cho dù có bao nhiêu đối tượng của lớp đó đã được tạo, thì chỉ có một bản sao của thành viên tĩnh. Vì vậy, cùng một thành viên tĩnh có thể được truy cập bởi tất cả các đối tượng của lớp đó.
Hàm thành viên tĩnh có thể được gọi ngay cả khi không có đối tượng nào của lớp tồn tại. Ngoài ra, bạn chỉ có thể truy cập hàm tĩnh bằng tên lớp và toán tử phân giải phạm vi.
Khái niệm OOP trong C++ cũng thường hay xuất hiện trong các câu hỏi phỏng vấn C++. Bạn có thể diễn giải khái niệm này gồm những thành phần như sau:
Trong phương thức gọi theo giá trị, bạn 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 gửi đế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 thêm: Các Câu Hỏi Phỏng Vấn PHP Thường Gặp
Kiểu trả về void() trong C++ không hợp lệ, vì không thể khai báo một hàm trả về một kiểu dữ liệu không hợp lệ. Tuy nhiên, ta có thể sử dụng kiểu trả về void trong C++ khi chúng ta muốn chỉ thực hiện một hành động mà không cần trả về bất kỳ giá trị nào từ hàm đó.
Con trỏ là một biến thường dùng trong C++ với nhiệm vụ 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
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:
Nạp chồng toán tử là một yếu tố rất cần thiết để thực hiện các thao tác trên các kiểu dữ liệu do người dùng định nghĩa. Bằng cách nạp chồng toán tử, chúng ta có thể sửa đổi ý nghĩa mặc định cho các toán tử như +, -, *, /, <=, v.v.
Các câu hỏi phỏng vấn C++ ở mức độ Advanced thường hay đề cập đến khả năng phân biệt hai khái niệm đối lập nhau. Bản sao nông lưu trữ các tham chiếu của các đối tượng đến địa chỉ bộ nhớ ban đầu. Bản sao nông nhanh hơn bản sao sâu và 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.
Ngược lại, bản sao sâu tạo một bản sao mới và riêng biệt của toàn bộ đối tượng với địa chỉ bộ nhớ duy nhất của nó. Bản sao sâu tương đối chậm. Bản sao sâu 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 gốc
Dạng câu hỏi tình huống như trên cũng hay xuất hiện trong các câu hỏi phỏng vấn C++. Lớp dẫn xuất có hai phần, phần cơ sở và phần dẫn xuất. Khi C++ xây dựng các đối tượng dẫn xuất, nó thực hiện theo từng giai đoạn. Đầu tiên, lớp cơ sở nhất (ở trên cùng của cây thừa kế) được xây dựng. Sau đó, mỗi lớp con được xây dựng theo thứ tự cho đến khi lớp con nhiều nhất được xây dựng sau cùng.
Vì vậy, hàm tạo đầu tiên của lớp B sẽ được gọi và sau đó hàm tạo của lớp D sẽ được gọi. Trong quá trình phá hủy, mọi thứ sẽ tuân theo thứ tự ngược. Đó là hàm hủy bắt đầu ở lớp có nguồn gốc cao nhất và di chuyển xuống lớp cơ sở. Vì vậy, hàm hủy đầu tiên của lớp D sẽ được gọi và sau đó hàm hủy của lớp B sẽ được gọi.
Có, chúng ta có thể gọi một hàm ảo từ một hàm tạo. Nhưng có một chút khác biệt trong trường hợp này. Khi một chức năng ảo được gọi, cuộc gọi ảo sẽ được giải quyết trong thời gian chạy. Nó luôn là hàm thành viên của lớp hiện tại được gọi. Đó là máy ảo không hoạt động trong hàm tạo.
STL là viết tắt của thư viện mẫu tiêu chuẩn. Nó là một thư viện chứa các mẫu chứa cung cấp các lớp và hàm chung.
Các thành phần STL là các containers, thuật toán, trình vòng lặp và đối tượng hàm.
Kế thừa là cơ chế trong đó bạn có thể tạo một lớp mới, tức là lớp con từ lớp hiện có, hay còn gọi là lớp cha. Lớp con hay được các dev C++ gọi là lớp dẫn xuất. Tương tự, lớp cha cũng hay được gọi là lớp cơ sở.
Vậy là Glints đã cùng bạn tìm hiểu các câu hỏi phỏng vấn C++ thường gặp cùng những gợi ý cơ bản cho phần trả lời. Tuỳ vào vị trí và vai trò ứng tuyển, bạn có thể thêm một số ví dụ thực tế để làm cho câu trả lời của mình trở nên sinh động hơn. Nếu cảm thấy hứng thú với các bài viết thuộc chủ đề tương tự, hãy ghé qua Blog của Glints để tìm đọc thêm nhiều nội dung chất lượng về C++ và các ngôn ngữ lập trình khác nhé!
Leave a Reply