Sưu tầm câu hỏi phỏng vấn C++

Ai có câu hỏi hay về phỏng vấn lập trình C++ thì comment phía bên dưới với nhé.Tiện đây em cũng có câu hỏi thế này:
1- tại sao có thể gán:
int a = 5, b = 6; a = b;
nhưng không thể gán 5 = 6
2 - size của kiểu dữ liệu enum là bao nhiêu và tại sao

Toàn những câu hỏi rất “khắm mùi” những kiểu interview cổ lổ sỉ và ngu ngốc để đánh giá ứng viên.

  1. 5 không thể = 6 bởi đơn giản Compiler không cho phép làm thế với hằng số.
    Câu hỏi cũng không rõ ràng " Cái gì không co gán 5=6"?
    5 và 6 không hề được cấp phát bộ nhớ và lưu trữ dự liệu lấy đâu ra chỗ mà lưu cái gì vào.
  2. Google sẽ ra 1 đống những câu trả lời kiểu vớ vẩn 2 byte 4 byte.
    Nếu có kinh nghiệm làm việc với C11 thì sẽ thấy size này hoàn toàn linh động. 2 4 8.
    Không rõ. Và cũng đêch quan trọng… với 1 lập trình viên.

Theo mình nên tập trung vào những kiến thức cơ bản trước sau đó dùng nó giải những bài toàn cụ thể thay vì học thuộc những câu hỏi tào lao ntn.

5 Likes

Hi Thắng Nguyễn.
Mình có một câu : Tại sao Anh/Chị lại lựa chọn phỏng vấn C++ mà không phải ngôn ngữ lập trình khác ?

1 Like

Dạng câu hỏi này để kiểm tra thái độ ứng viên, và xem ứng viên có khả năng trình bày rõ ràng. Thường câu này sẽ hỏi cho các bạn sinh viên khá giỏi nhưng chưa có kinh nghiệm.

Với lại em nên sửa lại cho câu văn nhẹ bớt nhé.

4 Likes

Bản thân bạn tại sao bạn chọn c++ mà bạn lại ko biết lý do tại sao à ? , bạn lấy thông tin công ty từ đâu, đọc requirements của công ty rồi apply vào thì cứ phang mấy cái trog đó vào, bạn phải thấy nó phù hợp thì bạn mới vào chứ

1 Like

tùy ngôn ngữ họ tuyển mà họ hỏi bạn thôi.chứ đâu phải mỗi C++ đâu nhỉ

rồi anh nhé.Tại trước em có hỏi mà mấy bạn cứ rep chửi ngu, sao 5 gán cho 6 được :v kaka

1 Like

Cách 1: 5 = 6 gán không được vì 5 là số + tỏ thái độ interviewer sao đưa câu hỏi ngu ngốc thế này => loại.

Cách 2: 5 = 6 không được vì vế trái của = phải là biến, tạm chấp nhận được, nhưng có thái độ không tốt cũng dễ dàng loại.

Cách 3: câu lệnh chỉ có 5 = 6, xét thêm nữa 5 = 6 là expresion, nghĩa là expression tính toán có side-effect nhưng bỏ giá trị trả về. Parser đọc token 5, sau đó tìm xem rule nào phù hợp có 5 là terminal symbol đầu tiên hay không. Thử từng rule, nhưng không có rule nào thoả token thứ 2 là “=”, parser báo lỗi không thể thực thi nữa và đưa ra dòng cảnh báo, kí tự “=” ở vị trí không phù hợp.

Hoặc sử dụng looking-ahead, sau khi đọc 5, parser đọc tiếp token “=” để có thêm thông tin, quá trình parse chính xác. Khi đọc được “5” và “=”, parser tìm các rule thoả mãn 2 terminal symbol đầu tiên là “5 =”, không có. Parser tìm tiếp rule có “=” (vì = mang nhiều ngữ nghĩa hơn 5), được 1 rule assignment-expression -> lhs “=” rhs. Vì không có rule nào để lhs thành 5 nên nó sẽ báo lỗi 5 không gán được, ngữ nghĩa rõ ràng hơn.

Đương nhiên trả lời như 2 là tốt rồi, trả lời kiểu 3 để hù lại người phỏng vấn.


Câu 2 rắc rối hơn tí, nhưng lười quá.

3 Likes

Hi Hung.

  1. Theo mình thấy thì 5, 6 được trình biên dịch coi là hằng số nên không thể gán giá trị cho nó được.
  2. Mình đọc ở đây có vẻ hợp lý embedded:
    2.1 Đặc tả của C/C++ không quy định kích tước của kiểu enum (Cái này là chuyện bình thường trong C/C++) mà việc đó do trình biên dịch tự quy định.
    2.2 Mục đích của enum là liệt kê nên trình biên dịch đủ thông minh để quy định kích thước sao cho phù hợp và tối ưu nhất thường là 1 từ máy. Nếu thiếu (thường ít xảy ra trong thực tế) thì sẽ dùng 2 từ máy.
2 Likes

1- tại sao có thể gán:
int a = 5, b = 6; a = b;
nhưng không thể gán 5 = 6

Câu hỏi hay, để trả lời được câu hỏi này bạn cần tìm hiểu thêm về “rvalue” và “lvalue” trong c++. Một khái niệm ít được nhắc tới.
Thân!!!
Trang.

No,
It is not related at all

Bạn hiểu gì về rvalue và lvalue ? bạn thử tìm hiểu nó chưa? Nếu hiểu thì mình mong được mở rộng tầm mắt ?

1 Like

thế bạn thử tìm hiểu “rvalue” “lvalue” trong C++ chưa? : V :V :V Nếu tìm hiểu rồi thì sẽ ko nhắc tới nó nữa vì nó nhiều và khó hiểu quá =)) Nỗi 1 cái xvalue đã hơn 10 trang để đọc rồi mà rvalue có xvalue ở trỏng :flushed:

hỏi ngược lại tại sao lại có thể gán 5=6 mà đi hỏi ngu vậy :flushed: Có thằng nào tâm thần gán giá trị 6 cho giá trị 5 ko, gán xong từ nay đếm ngón tay đều ra 6 ngón hết à :dizzy_face:

2 Likes
  • Câu hỏi khi đi phỏng vấn lần đầu tiên ( Samsung ): "What is static variable in C? " -> lúc đấy chịu chết ko trả lời được, các anh bên đấy chán không buồn hỏi tiếp.:sweat_smile:
    3 năm sau phỏng vấn ở mức cao hơn, lần này pass :laughing::

  • Khi biên dịch một chương trình C, compiler sẽ thực hiện những gì?

  • Trong object file nó có chứa những gì?

  • Em có phân biệt được Pointer với reference không?

  • Em có biết rvalue không?

  • Shallow copy là gì? Deep copy là gì?

  • Trong C++ khi nào dùng template, khi nào dùng đa hình?

3 Likes

cái này phải học như nào mới đủ sâu kiến thức vậy a, em học c++ r mà đọc mấy cái này như chưa từng quen vậy :joy::joy:

Bạn có học STL không :smiley:

Không kỹ bác ơi, chỉ học cơ bản thôi, học trên trường ý. Ý em là học biết dùng cơ bản nhưng mà không sâu về lý thuyết.

trả lời được hết không bạn, nếu được thì cho list câu trả lời luôn vs ạ.Đa tạ

Hi Trang,
r - Right
l - Left
Những khái niệm này được đọc ở C++ nhưng nó không thực sự quyết định bạn có viết 5 = 6 được hay không.

Mình đồng ý có thể hiểu trong cách nhận diện Expression phía bên trái 5 chỉ được xem là r-Value ( chỉ dùng cho bên phải phép gán = ). Nhưng sau tất cả nó không phải vấn đề theo kiểu có hoặc không hay xây dựng 1 bộ lọc cho ô cái này là rValue cái kia la lValue. Mặc dù nó vẫn được đề cập đến.
rValue hay lValue Vấn đề mấu chốt là ở Memory Allocation.

  1. Có cấp phát bộ nhớ ( định danh được bằng địa chỉ và có thể thay đổi được )
    Xem xét nguyên cả bộ expression ( 5+a*1 )

  2. Các trường hợp còn lại
    Hoặc không được định danh bằng 1 địa chỉ trong bộ nhớ, hoặc là const …vv thì không thể thay đổi giá trị được tức không đặt bên trái phép gán được.

Vậy nên nói 5 = 6 vì 5 không phải lValue là không thuyết phục.
Mình rút lại câu nói " not related at all" và sorry bạn nếu làm bạn không vui. It related but not a root cause.

Câu hỏi khá hay, mình cũng đang tìm các câu hỏi để trả lời phỏng vấn về C++.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?