Việc làm

6 ngày trước · Hồ Chí Minh · Tại văn phòng

Embedded C++ Engineer (1-year contract)

Bosch Global Software Technologies · 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, Business Analyst). 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. 01RTOS 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 →
  2. 02Undefined behavior trong C/C++ là gì? Cho ví dụ và cách phát hiện.C/C++ & Embedded · Senior

    Gợi ý trả lời

    Undefined behavior (UB) là những thao tác mà chuẩn ngôn ngữ không quy định kết quả. Compiler được phép giả định UB không bao giờ xảy ra và tối ưu theo giả định đó, nên lỗi có thể chỉ lộ ra ở bản build -O2 hoặc trên một compiler khác.

    Ví dụ hay gặp:

    • Tràn số nguyên có dấu (tràn số không dấu thì được định nghĩa là quay vòng).
    • Truy cập mảng ngoài phạm vi, dereference con trỏ null hoặc dangling.
    • Đọc biến chưa khởi tạo, data race giữa các thread.
    • Vi phạm strict aliasing, vd. ép float* sang int* rồi đọc (nên dùng memcpy hoặc std::bit_cast từ C++20).

    Phát hiện: bật cảnh báo -Wall -Wextra, chạy test với -fsanitize=address,undefined, dùng static analysis (clang-tidy, cppcheck, MISRA checker).

    Người phỏng vấn muốn nghe: "chạy đúng trên máy tôi" không chứng minh code không có UB.

    Ôn thêm câu hỏi C/C++ & Embedded →
  3. 03Thiết bị nhúng thỉnh thoảng bị treo hoặc reset ngoài hiện trường. Bạn debug thế nào?C/C++ & Embedded · Senior

    Gợi ý trả lời

    Cần thu thập dấu vết từ thiết bị trước, sau đó tái hiện trong phòng lab.

    • Lưu nguyên nhân reset: đọc thanh ghi reset cause (watchdog, brown-out, hard fault) khi khởi động và ghi vào flash hoặc gửi log lên.
    • Hard fault handler: lưu các thanh ghi PC, LR và stack frame để biết lệnh gây lỗi, sau đó tra file .map hoặc addr2line.
    • Stack overflow: bật kiểm tra stack của RTOS, tô mẫu (stack painting) để đo mức dùng tối đa.
    • Watchdog: chỉ "đá" watchdog khi mọi task quan trọng còn sống, không đá trong ISR timer.
    • Kiểm tra phần cứng: nguồn sụt áp, nhiễu, nhiệt độ.

    Trong lab dùng JTAG/SWD với GDB, logic analyzer và chạy stress test dài.

    Người phỏng vấn muốn nghe: một ca thật bạn đã xử lý, cách khoanh vùng và cách chứng minh đã sửa đúng.

    Ôn thêm câu hỏi C/C++ & Embedded →
  4. 04Làm BA cho dự án ngân hàng/fintech, bạn cần lưu ý gì khác so với dự án thông thường?Business Analyst · Senior

    Gợi ý trả lời

    Điểm khác chính là quy định, bảo mật và độ chính xác của dữ liệu tiền.

    • Tuân thủ quy định của cơ quan quản lý và chính sách nội bộ: cần làm việc với bộ phận pháp chế, compliance, rủi ro ngay từ đầu.
    • Phân quyền và kiểm soát: nguyên tắc maker-checker, hạn mức, phê duyệt nhiều cấp, audit log đầy đủ.
    • Xác thực: OTP, sinh trắc học, quy trình eKYC.
    • Nghiệp vụ tính toán: lãi, phí, làm tròn, ngày làm việc, cut-off time; cần ví dụ số cụ thể trong AC.
    • Tích hợp nhiều hệ thống: core banking, cổng thanh toán, hệ thống cũ, đối soát.
    • UAT nghiêm ngặt, nhiều tầng phê duyệt, tài liệu kỹ hơn.

    Người phỏng vấn muốn nghe: bạn biết domain knowledge quan trọng ngang kỹ năng BA. Nếu chưa làm fintech, nói rõ bạn đã tìm hiểu nghiệp vụ nào và cách bạn học domain mới.

    Ôn thêm câu hỏi Business Analyst →
  5. 05Khách hàng UAT xong nói 'không giống những gì tôi muốn', dù đã ký duyệt tài liệu. Bạn xử lý ra sao?Business Analyst · Senior

    Gợi ý trả lời

    Trước hết phân loại: đây là lỗi (làm sai so với tài liệu), hiểu sai giữa hai bên, hay nhu cầu mới phát sinh khi khách thấy sản phẩm thật.

    • Lắng nghe cụ thể từng điểm khách không hài lòng, ghi lại, đừng phản ứng phòng thủ.
    • Đối chiếu với tài liệu đã duyệt: lỗi thì team sửa; nhu cầu mới thì đi theo quy trình change request.
    • Với điểm mơ hồ trong tài liệu, nhận phần trách nhiệm và cùng PM thương lượng hướng xử lý hợp lý.
    • Ưu tiên cùng khách: điểm nào chặn go-live, điểm nào để giai đoạn sau.

    Rút kinh nghiệm cho lần sau: demo sớm theo từng sprint, dùng prototype có thể bấm thử, để khách thấy sản phẩm trước UAT.

    Hay sai: chỉ vào chữ ký trên tài liệu để từ chối mọi thứ. Đúng quy trình nhưng mất quan hệ khách hàng.

    Ôn thêm câu hỏi Business Analyst →
  6. 06Lập trình đa luồng trong C++ hiện đại: std::atomic, mutex và memory order dùng khi nào?C/C++ & Embedded · Senior

    Gợi ý trả lời

    Dữ liệu chia sẻ giữa các thread mà có ít nhất một thread ghi thì phải đồng bộ, nếu không là data race (undefined behavior).

    • std::mutex với std::lock_guard hoặc std::scoped_lock (khoá nhiều mutex không deadlock): dùng cho vùng găng có nhiều biến hoặc logic phức tạp.
    • std::atomic<T>: cho biến đơn lẻ như cờ, bộ đếm, không cần khoá.
    • Memory order: mặc định seq_cst an toàn nhất. acquire/release dùng cho mẫu producer/consumer; relaxed chỉ cho bộ đếm thống kê không cần thứ tự.
    • C++20 bổ sung std::jthread (tự join, có stop token), std::latch, std::barrier, std::counting_semaphore.
    std::atomic<int> hits{0};
    hits.fetch_add(1, std::memory_order_relaxed);
    

    Hay sai: dùng memory order yếu khi chưa thật hiểu, hoặc lock-free hoá sớm khi mutex đã đủ nhanh. Kiểm tra bằng ThreadSanitizer.

    Ôn thêm câu hỏi C/C++ & Embedded →
  7. 07Bạ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 →
  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. 09Bạn ưu tiên backlog như thế nào khi mọi stakeholder đều nói yêu cầu của họ là gấp nhất?Business Analyst · Senior

    Gợi ý trả lời

    Dùng tiêu chí minh bạch để quyết định, thay vì ai nói to hơn thì được làm trước.

    • Gắn mỗi yêu cầu với mục tiêu kinh doanh: tăng doanh thu, giảm chi phí, tuân thủ quy định, giảm rủi ro.
    • Ước lượng giá trị và effort cùng team, dùng ma trận value/effort, MoSCoW, hoặc chấm điểm kiểu RICE/WSJF.
    • Yêu cầu bắt buộc theo luật hoặc hạn chót cố định thường được ưu tiên.
    • Xét phụ thuộc kỹ thuật: một số việc phải làm trước để mở đường.
    • Chia sẻ kết quả ưu tiên và lý do cho stakeholder; người quyết định cuối cùng thường là PO.

    Người phỏng vấn muốn nghe: bạn có framework, biết nói "chưa" một cách có lý do và giữ được quan hệ với các bên.

    Ôn thêm câu hỏi Business Analyst →
  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 ở Bosch Global Software Technologies?

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