Việc làm

18/09 · Hồ Chí Minh · Đà Nẵng · Tại văn phòng

Automotive Embedded Software Engineer (ASAP)

Hitachi Digital Services Vietnam · Embedded 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. 01Bạn thiết kế firmware thế nào để dễ test, dễ port sang vi điều khiển khác và áp dụng SOLID?C/C++ & Embedded · Senior

    Gợi ý trả lời

    Tách phần phụ thuộc phần cứng ra sau một lớp trừu tượng, để logic nghiệp vụ chạy và test được trên máy tính.

    • Phân lớp: driver thanh ghi / HAL → BSP → service (giao thức, lưu trữ) → application.
    • Dependency inversion: application phụ thuộc interface (struct chứa con trỏ hàm trong C, abstract class hoặc template trong C++), không gọi thẳng thanh ghi.
    • Single responsibility: mỗi module một việc, như đọc cảm biến, lọc tín hiệu, gửi dữ liệu.
    • Unit test trên host với Unity, CppUTest hoặc GoogleTest bằng driver giả; test trên phần cứng (HIL) cho phần còn lại.
    • Máy trạng thái (state machine) rõ ràng cho logic phức tạp.
    • CI build nhiều target, chạy static analysis và kiểm tra theo chuẩn code (vd. MISRA).

    Người phỏng vấn muốn nghe: bạn cân đối được giữa trừu tượng hoá và giới hạn RAM, flash, thời gian thực.

    Ôn thêm câu hỏi C/C++ & Embedded →
  2. 02Con 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 →
  3. 03Stack và heap khác nhau thế nào? Memory leak và dangling pointer là gì?C/C++ & Embedded · Junior

    Gợi ý trả lời

    Stack chứa biến cục bộ, cấp phát và giải phóng tự động theo phạm vi hàm, rất nhanh nhưng kích thước nhỏ. Heap cấp phát động (new/malloc), sống đến khi giải phóng thủ công, linh hoạt nhưng chậm hơn và dễ phân mảnh.

    • Memory leak: cấp phát trên heap mà không giải phóng, bộ nhớ tăng dần. Trên thiết bị nhúng chạy lâu ngày đây là lỗi chết người.
    • Dangling pointer: con trỏ vẫn giữ địa chỉ của vùng nhớ đã giải phóng hoặc biến đã hết phạm vi.
    • Double free: giải phóng một vùng hai lần.

    Phòng tránh: dùng RAII và smart pointer trong C++, đặt con trỏ về NULL sau free trong C, kiểm tra bằng AddressSanitizer hoặc Valgrind.

    Người phỏng vấn muốn nghe (nhúng): nhiều hệ thống hạn chế hoặc cấm cấp phát động sau khi khởi động, dùng memory pool hoặc mảng tĩnh.

    Ôn thêm câu hỏi C/C++ & Embedded →
  4. 04Mô hình OSI có mấy tầng? Switch, router và firewall hoạt động ở tầng nào?Network & System Admin · Junior

    Gợi ý trả lời

    OSI có 7 tầng: Physical, Data Link, Network, Transport, Session, Presentation, Application. Thực tế người ta hay dùng mô hình TCP/IP 4 tầng, nhưng vẫn gọi tên theo OSI.

    • Switch (L2): chuyển frame theo địa chỉ MAC; switch L3 có thêm định tuyến.
    • Router (L3): định tuyến gói theo địa chỉ IP giữa các mạng.
    • Firewall: lọc ở L3/L4 (IP, port); firewall thế hệ mới đọc được tới L7 (ứng dụng, URL).
    • TCP/UDP ở L4; HTTP, DNS ở L7.

    Người phỏng vấn muốn nghe: dùng OSI để khoanh vùng sự cố, ví dụ "ping được nhưng không mở được web" là vấn đề từ L4 trở lên.

    Ôn thêm câu hỏi Network & System Admin →
  5. 05TCP khác UDP thế nào? Kể vài dịch vụ dùng mỗi loại.Network & System Admin · Junior

    Gợi ý trả lời

    TCP có kết nối (bắt tay 3 bước), đảm bảo thứ tự và gửi lại gói mất; UDP không kết nối, không đảm bảo, nhưng nhẹ và độ trễ thấp.

    • TCP: HTTP/HTTPS (trừ HTTP/3), SSH (22), SMTP, RDP, database.
    • UDP: DNS (53, chuyển sang TCP khi trả lời lớn), DHCP (67/68), NTP (123), VoIP, game, video call.
    • HTTP/3 chạy trên QUIC, mà QUIC dựa trên UDP.

    Hay sai: chỉ mở TCP 53 hoặc UDP 53 trên firewall cho DNS server; nên mở cả hai.

    Ôn thêm câu hỏi Network & System Admin →
  6. 06Từ khoá volatile dùng để làm gì trong lập trình nhúng?C/C++ & Embedded · Junior

    Gợi ý trả lời

    volatile báo cho compiler rằng giá trị biến có thể thay đổi ngoài luồng code hiện tại, nên mỗi lần truy cập phải đọc hoặc ghi thật vào bộ nhớ, không được tối ưu bỏ hay cache vào thanh ghi.

    Dùng cho:

    • Thanh ghi phần cứng ánh xạ bộ nhớ (memory-mapped register).
    • Biến chia sẻ giữa ISR (hàm phục vụ ngắt) và vòng lặp chính.
    volatile bool data_ready = false;
    void UART_IRQHandler(void) { data_ready = true; }
    while (!data_ready) { }  // không có volatile có thể thành lặp vô hạn
    

    Hay sai: nghĩ volatile đảm bảo thread-safe hoặc atomic. Nó không chống race condition và không tạo memory barrier giữa các core; cần atomic, tắt ngắt hoặc mutex.

    Ôn thêm câu hỏi C/C++ & Embedded →
  7. 07Giả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 →
  8. 08RAII 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 →
  9. 09Một máy tính mới cắm mạng sẽ nhận IP qua DHCP thế nào? Nếu máy nhận IP 169.254.x.x thì sao?Network & System Admin · Junior

    Gợi ý trả lời

    DHCP gồm 4 bước DORA: Discover (máy phát broadcast tìm server), Offer (server đề nghị IP), Request (máy xin IP đó), Acknowledge (server xác nhận, kèm gateway, DNS, thời hạn lease).

    IP 169.254.x.x (APIPA) nghĩa là máy không liên lạc được DHCP server. Kiểm tra:

    • Cáp, cổng switch, Wi-Fi có kết nối không.
    • Cổng switch có đúng VLAN không.
    • DHCP server còn chạy, scope còn IP trống không.
    • Khác VLAN thì router/switch L3 đã cấu hình DHCP relay (ip helper-address) chưa.

    Người phỏng vấn muốn nghe: đi từ tầng vật lý lên, không vội cài lại máy.

    Ôn thêm câu hỏi Network & System Admin →
  10. 10Vì sao bạn muốn rời công ty hiện tại?Câu hỏi hành vi & văn hoá

    Gợi ý trả lời

    Trả lời thật nhưng hướng về phía trước: nói điều bạn đang tìm kiếm, không kể xấu nơi cũ.

    Lý do chấp nhận được: muốn thử thách mới, muốn làm sản phẩm, dự án kết thúc, công ty tái cấu trúc, thu nhập chưa tương xứng (nói khéo).

    Câu mẫu: "Em đã làm 2 năm ở dự án outsourcing, học được nhiều về quy trình và làm việc với khách nước ngoài. Giờ em muốn gắn bó lâu dài với một sản phẩm để thấy được tác động của những gì mình làm, và vị trí bên mình đúng hướng đó."

    Hay sai: chê sếp, chê đồng nghiệp, kể chuyện drama. Người phỏng vấn sẽ nghĩ bạn cũng sẽ nói về công ty họ như vậy. Nếu nhảy việc nhiều, chuẩn bị lời giải thích cho từng lần.

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

Bạn đã phỏng vấn ở Hitachi Digital Services 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