Chuyện phỏng vấn intern

Xin chào mọi người, mình hiện tại đang năm 3. Vừa rồi mình có đi pv bên 1 công ty thì gặp phải HR hỏi rất khó. Mình muốn hỏi cảm nhận của mọi người xem liệu câu hỏi có hợp lí không ạ, tiện thể xin luôn câu trả lời chính xác ạ!

  • Đầu tiên trước khi pv thì mọi ứng viên làm bài test trên giấy với 5 câu hỏi trong 45p:
    • B1 khác nhau giữa pass by reference và pass by value
    • B2 khác nhau giữa do while và while
    • B3 khóa chính khóa phụ là gì
    • B4: Input: arr. Output: arr mới sao cho xếp hết số 0 vào cuối mảng
    • B5: Input :arr. Output: số nguyên xuất hiện chỉ 1 lần trong mảng
  • Sau đó dựa vào bài test mà được phòng vấn.
  • Mình làm b4 với độ phức tạp là 2n và b5 với độ phức tạp là n^2.
  • HR có hỏi mình là có thể tối ưu b4 và b5 thành độ phức tạp là n được không(câu này mình ko trả lời được nhưng hiện tại mình đã tối ưu được b4)
  • Có hỏi thêm về sự khác nhau giữa con trỏ và tham chiếu thì câu trả lời của mình không được chấp nhận : “Con trỏ trỏ tới địa chỉ tham số còn tham chiếu dùng chính tham số đó”.
  • Mọi người có thể cho mình xin đánh giá về lần phỏng vấn này và cho mình xin câu trả lời về câu hỏi con trỏ, tham chiếu; và code của b5 với độ phức tạp n được không ạ?
    Cảm ơn mn đã đọc

bài này dùng hashmap để đếm

bạn tự đọc lại xem câu trả trả lời của bạn có nghĩa gì không, câu trả lời quá tối nghĩa và sai, địa chỉ tham số là địa chỉ gì? tham chiếu dùng chính tham số là sao?

pass by value đúng như cái tên của nó, chỉ truyền giá trị, bản thân cái biên không bị ảnh huỏng/thay đổi sau khi gọi hàm
pass by reference, với c++ thì là truyền con trỏ vào, là biến bên ngoài với biến tham chiếu đó cùng trỏ đến cùng một ví trí bộ nhớ, nên trong hàm thay đổi thì những biến khác cùng tham chiếu vào địa chỉ bộ nhớ đó cũng sẽ thay đổi theo

3 Likes

mình code = c++ bạn ơi, chứ code = java thì mình làm xong lâu rồi ạ

khác nhau giữa con trỏ với tham chiếu ạ, chứ không phải pass by value với pass by reference ạ

Bài 4: Các phần tử khác 0 có cần đảm bảo thứ tự không vậy?

  • Nếu không cần đảm bảo thứ tự thì dùng kỹ thuật 2 pointers tráo đổi số 0 về cuối mảng, O(n^2).
  • Nếu cần đảm bảo thứ tự thì cũng dùng kỹ thuật 2 pointers lúc đọc số vào mảng, O(n).

Bài này có khá nhiều cách làm, nhưng độ phức tạp tốt nhất vẫn là \Theta(n).

Bài 5: Về mặt Data Structure, bạn sử dụng hash map. 1 thứ tương tự hash map trong C++ là std::map<T, U> hoặc std::unordered_map<T, U>. Độ phức tạp lý tưởng là O(n), nếu dùng std::map thì mất O(n log n) do tốn O(log n) truy cập vào std::map.

Nếu bạn không thích tốn thêm O(n) bộ nhớ cho hash map, bạn có thể sort lại mảng, sau đó duyệt từng phần tử xem có phần tử nào chỉ xuất hiện 1 lần hay không. Độ phức tạp thuật toán vẫn là O(n log n) nhưng có vẻ tốt hơn vì không tốn độ phức tạp không gian.

Mở rộng hơn 1 chút, có 1 bài toán hẹp hơn cho bài toán này, cho 1 mảng mà chỉ có 1 phần tử u xuất hiện 1 lần, còn các phần tử khác xuất hiện 2 lần (hoặc chẵn lần). Tìm phần tử u.

2 Likes

Dạ cảm ơn anh vì câu trả lời. Em tính hỏi về cái này

sự khác nhau giữa con trỏ và tham chiếu, hỏi câu này thiệt là vớ vẫn, 2 cái thứ này có phải là gì đó cùng loại đâu mà so với chả sánh
còn muốn định nghĩa của 2 cái đó thì bạn cứ google: con trỏ là gì? là ra thôi
bản thân từ tham chiếu khi đó đứng 1 mình cũng chẳng có ý nghĩa gì cả, nên cũng không biết người hỏi muốn cái gì từ câu hỏi này

còn phần hashmap, câu phản hồi của bạn làm mình thấy quá chán, nghe người ta nói cái gì đó mfinh chưa biết chưa chắc thì bỏ ra vài giây để search
ở nhiều ngôn ngữ nó có thể có nhiều cái tên khác nhau, còn concept thì nó là như nhau, bạn chưa search thử đã vội từ chối câu trả lời, hóa ra bạn học như một cái máy, giải được bài hay không thì phải phụ thuộc vào ngôn ngữ lập trình

Đầu tiên, mình xin lỗi vì chưa tìm hiểu kĩ.
Thứ hai là vì HR hỏi mình có thể code được với độ phức tạp là O(n) được không nên mình tạm thời không nghĩ tới hashmap vì mình không biết là truy cập và sử dụng hàm của class Hashmap mất bao nhiêu độ phức tạp để trả lời HR nếu bị hỏi thêm về hashmap.
Cảm ơn vì câu trả lời của bạn

Người nào mà hỏi câu này thì thường expect câu trả lời là “reference là const pointer (không phải pointer to const)” :stuck_out_tongue:

2 Likes

Nếu phỏng vấn intern mà hỏi tới cơ chế bên trong standard library của một ngôn ngữ luôn thì hơi bị kinh dị rồi đó
Mình đánh giá câu hỏi kiểu đó không dành cho level dưới senior
Không biết phúc lợi như nào mà đánh đố người ta quá

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