Việc làm

15/09 · Hồ Chí Minh · Tại văn phòng

Intern C/C++ Embedded & Systems Engineer

IVC (ISB Vietnam) · Network Engineer

Xem mô tả & ứng tuyển trên ITviecMô tả công việc, lương và ứng tuyển nằm ở ITviec.

10 câu hỏi có thể gặp khi phỏng vấn

Chọn theo kỹ năng và cấp của tin (C/C++ & Embedded, Network & System Admin). Gợi ý trả lời do Drama Công Ty biên soạn để bạn ôn nhanh, không phải đề của công ty.

  1. 01Giải thích 4 tính chất OOP và virtual function / vtable trong C++.C/C++ & Embedded · Junior

    Gợi ý trả lời

    Bốn tính chất: đóng gói (ẩn dữ liệu sau interface), kế thừa, đa hình (gọi cùng interface, hành vi theo kiểu thật) và trừu tượng (chỉ lộ cái cần thiết).

    Đa hình lúc chạy trong C++ dùng virtual: mỗi class có hàm ảo có một bảng vtable chứa địa chỉ hàm, mỗi object giữ một con trỏ vptr tới bảng đó. Gọi qua con trỏ hoặc tham chiếu lớp cha sẽ tra vtable để gọi hàm của lớp con.

    struct Sensor { virtual ~Sensor() = default; virtual int read() = 0; };
    struct TempSensor : Sensor { int read() override { return 25; } };
    

    Hay sai: quên destructor ảo ở lớp cha, khi delete qua con trỏ lớp cha sẽ không gọi destructor lớp con. Trên nhúng cũng nên nhắc chi phí: thêm vptr cho mỗi object và một lần gọi gián tiếp.

    Ôn thêm câu hỏi C/C++ & Embedded →
  2. 02RAII là gì? So sánh unique_ptr, shared_ptr và weak_ptr.C/C++ & Embedded

    Gợi ý trả lời

    RAII (Resource Acquisition Is Initialization): gắn tài nguyên vào vòng đời một object; constructor lấy tài nguyên, destructor tự giải phóng. Nhờ vậy không rò rỉ kể cả khi có exception hoặc return sớm.

    • unique_ptr: sở hữu duy nhất, chỉ move được, không tốn thêm chi phí so với con trỏ thường. Nên là lựa chọn mặc định.
    • shared_ptr: sở hữu chung bằng bộ đếm tham chiếu (cập nhật atomic), giải phóng khi bộ đếm về 0.
    • weak_ptr: quan sát một shared_ptr mà không tăng bộ đếm, dùng phá vòng tham chiếu (vd. con trỏ ngược từ con về cha).
    auto dev = std::make_unique<Device>("/dev/i2c-1");
    

    Hay sai: dùng shared_ptr khắp nơi "cho an toàn", làm mờ quyền sở hữu và tốn chi phí atomic.

    Ôn thêm câu hỏi C/C++ & Embedded →
  3. 03Move semantics và rvalue reference giải quyết vấn đề gì? Rule of 3/5/0 là gì?C/C++ & Embedded

    Gợi ý trả lời

    Move semantics cho phép chuyển tài nguyên (buffer, handle) từ một object tạm hoặc sắp bị bỏ đi sang object khác thay vì sao chép sâu. Rvalue reference T&& nhận các object như vậy; std::move chỉ là phép ép kiểu để cho phép move.

    std::vector<int> a(1'000'000);
    std::vector<int> b = std::move(a);  // chuyển con trỏ, không chép 1 triệu phần tử
    
    • Rule of 3: nếu tự viết destructor, copy constructor hoặc copy assignment thì gần như phải viết đủ cả ba.
    • Rule of 5: thêm move constructor và move assignment.
    • Rule of 0: tốt nhất là không tự viết hàm nào, để các thành viên RAII (vector, unique_ptr) lo.

    Hay sai: dùng lại object sau khi đã move. Object vẫn hợp lệ nhưng ở trạng thái không xác định.

    Ôn thêm câu hỏi C/C++ & Embedded →
  4. 04VLAN là gì và vì sao cần chia VLAN? Trunk port khác access port thế nào?Network & System Admin

    Gợi ý trả lời

    VLAN chia một switch vật lý thành nhiều mạng L2 logic tách biệt, giúp thu nhỏ vùng broadcast và cô lập các nhóm (kế toán, khách, camera, server).

    • Access port: thuộc một VLAN, nối với máy trạm; frame không gắn tag.
    • Trunk port: mang nhiều VLAN giữa switch với switch hoặc router, frame gắn tag 802.1Q.
    • Các VLAN muốn nói chuyện với nhau phải qua thiết bị L3 (router, switch L3, firewall), nơi có thể đặt ACL.

    Hay sai: để Wi-Fi khách chung VLAN với mạng nội bộ, hoặc cho phép mọi VLAN đi qua trunk khi không cần.

    Ôn thêm câu hỏi Network & System Admin →
  5. 05Server Linux chạy chậm. Bạn dùng những lệnh nào để tìm nguyên nhân?Network & System Admin

    Gợi ý trả lời

    Xác định tài nguyên nào đang nghẽn: CPU, RAM, ổ đĩa hay mạng.

    uptime; top          # load average, process ngốn CPU/RAM
    free -h              # còn RAM không, có dùng swap nhiều?
    df -h; df -i         # đầy dung lượng hoặc hết inode
    iostat -x 1          # ổ đĩa có quá tải (%util, await)?
    ss -tunap            # kết nối mạng
    journalctl -p err -b # lỗi từ lần boot này
    
    • Load cao nhưng CPU rảnh: thường là chờ I/O (wa cao trong top).
    • dmesg có OOM killer: thiếu RAM.

    Hay sai: xoá file log đang được process mở; dung lượng không giải phóng cho tới khi restart process (xem lsof +L1).

    Ôn thêm câu hỏi Network & System Admin →
  6. 06Viết hàm phục vụ ngắt (ISR) cần lưu ý những gì?C/C++ & Embedded

    Gợi ý trả lời

    ISR phải ngắn và nhanh: ghi nhận sự kiện, lấy dữ liệu tối thiểu, rồi để phần xử lý nặng cho task hoặc vòng lặp chính.

    • Không gọi hàm có thể block (delay, chờ mutex), không printf, tránh cấp phát động.
    • Biến dùng chung với code chính khai báo volatile và truy cập atomic, hoặc tắt ngắt ngắn khi đọc dữ liệu nhiều byte.
    • Xoá cờ ngắt đúng cách để không bị gọi lại liên tục.
    • Với RTOS, chỉ dùng API dành cho ngắt (vd. hàm có hậu tố FromISR trong FreeRTOS) để báo task qua semaphore, queue hoặc task notification.
    • Dùng ring buffer cho dữ liệu đến liên tục như UART.

    Người phỏng vấn muốn nghe: bạn biết về độ ưu tiên ngắt, ngắt lồng nhau, và cách đo thời gian chạy ISR bằng cách bật tắt một chân GPIO rồi xem trên oscilloscope.

    Ôn thêm câu hỏi C/C++ & Embedded →
  7. 07RTOS khác vòng lặp super-loop thế nào? Mutex khác semaphore ra sao?C/C++ & Embedded

    Gợi ý trả lời

    Super-loop chạy tuần tự các việc trong một vòng while(1), đơn giản nhưng một việc chậm sẽ làm trễ mọi việc khác. RTOS có scheduler preemptive theo độ ưu tiên, giúp các việc cần thời gian thực được đáp ứng đúng hạn.

    • Mutex: khoá loại trừ cho tài nguyên dùng chung, có khái niệm sở hữu (ai khoá thì người đó mở) và thường có priority inheritance để giảm đảo ưu tiên.
    • Binary semaphore: dùng để báo hiệu giữa ISR và task hoặc giữa các task, không có sở hữu.
    • Counting semaphore: quản lý N tài nguyên giống nhau.

    Hay sai: dùng semaphore thay mutex để bảo vệ tài nguyên, gặp priority inversion: task ưu tiên cao chờ task thấp đang giữ khoá, trong khi task trung bình chiếm CPU.

    Người phỏng vấn muốn nghe: bạn biết đặt độ ưu tiên task và kích thước stack hợp lý, và từng phát hiện stack overflow.

    Ôn thêm câu hỏi C/C++ & Embedded →
  8. 08Con trỏ và tham chiếu (reference) trong C++ khác nhau thế nào?C/C++ & Embedded · Junior

    Gợi ý trả lời

    Con trỏ là biến chứa địa chỉ, có thể nullptr và trỏ sang đối tượng khác. Tham chiếu là tên gọi khác của một đối tượng đã tồn tại, phải khởi tạo ngay và không gán lại được.

    int x = 1, y = 2;
    int* p = &x;  p = &y;   // đổi đối tượng được trỏ
    int& r = x;   r = y;    // gán giá trị y cho x
    
    • Truyền tham số: dùng const T& cho đối tượng lớn chỉ đọc, T& khi cần sửa, con trỏ khi tham số có thể vắng mặt.
    • Có con trỏ tới con trỏ và phép toán số học trên con trỏ; tham chiếu thì không.

    Hay sai: trả về tham chiếu hoặc con trỏ tới biến cục bộ. Biến bị huỷ khi hàm kết thúc và dùng nó là undefined behavior.

    Ôn thêm câu hỏi C/C++ & Embedded →
  9. 09When would you be available to start? Do you have a notice period?Phỏng vấn tiếng Anh

    Gợi ý trả lời

    "My current contract requires a 30-day notice period, so I could start about a month after accepting an offer. I'd like to make sure I hand over my work properly to my team. If you need someone sooner, I can discuss with my manager whether an earlier date is possible, but I can't promise that yet."

    Mẹo: nói đúng thời gian báo trước theo hợp đồng của bạn, đừng hứa đi làm ngay để lấy điểm. Dùng "notice period", "hand over", "start date". Tránh nói "I can go to work immediately" khi bạn vẫn còn hợp đồng.

    Ôn thêm câu hỏi Phỏng vấn tiếng Anh →
  10. 10Mức lương mong muốn của bạn là bao nhiêu?Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Tìm hiểu trước mặt bằng lương cho vị trí và số năm kinh nghiệm (dữ liệu lương trên Drama Công Ty, bạn bè cùng ngành), rồi đưa ra một khoảng có căn cứ.

    • Nói rõ gross hay net. Gross là lương trước khi trừ bảo hiểm bắt buộc và thuế thu nhập cá nhân; net là số thực nhận.
    • Hỏi tổng thu nhập: lương tháng 13 (không bắt buộc theo luật), thưởng, chu kỳ review lương, bảo hiểm sức khoẻ.
    • Lương thử việc theo luật tối thiểu bằng 85% lương chính thức; nhiều công ty trả 100%, cứ hỏi rõ.

    Câu mẫu: "Dựa trên kinh nghiệm và mặt bằng thị trường, em mong muốn khoảng X đến Y triệu gross. Em cũng muốn hiểu thêm về thưởng và review lương bên mình."

    Hay sai: nói "tuỳ công ty" (dễ bị trả thấp), hoặc khai khống lương hiện tại.

    Ôn thêm câu hỏi Câu hỏi hành vi & văn hoá →

Bạn đã phỏng vấn ở IVC (ISB Vietnam)?

Kể lại các vòng và câu hỏi đã gặp (ẩn danh) để người sau ôn đúng trọng tâm.

Chia sẻ kinh nghiệm phỏng vấn