Bộ câu hỏi phỏng vấn Embedded Developer chinh phục nhà tuyển dụng

4178

Embedded hay Embedded System được gọi là hệ thống nhúng, là một hệ thống có khả năng tự trị được nhúng vào một môi trường hay hệ thống mẹ. Đó chứa cả phần cứng và phần mềm nhằm phục vụ cho các bài toán chuyên dụng trong nhiều lĩnh vực đặc biệt là công nghiệp tự động hóa. Với sự phát triển của AI, IoT và cuộc cách mạng công nghiệp 4.0 hiện nay; lập trình viên nhúng đang là vị trí được nhiều công ty săn đón. Hôm nay chúng ta cùng nhau tìm hiểu top 10 câu hỏi phỏng vấn cho vị trí Embedded Developer thường gặp nhất nhé. 

Câu 1: Nêu những thành phần cơ bản của hệ thống nhúng

Một hệ thống nhúng thông thường gồm những thành phần cơ bản là:

  • ROM: Nơi chứa chương trình và dữ liệu cố định dùng để nạp và sử dụng khi chạy chương trình
  • RAM: Chứa chương trình thực thi và các biến tạm
  • MCU: Bộ xử lý tính toán trung tâm
  • Các bộ phận khác: gồm các thiết bị ngoại vi như ADC, DAC hay các khối giao tiếp như UART, I2C,…

Embedded System

Câu 2: Liệt kê một số hệ thống nhúng trong các lĩnh vực thực tế

  • Hệ thống định vị vệ tinh, tên lửa, dẫn đường,…
  • Hệ thống viễn thông, di động
  • Thiết bị kết nối mạng như Gateway, Router,…
  • Thiết bị y tế như máy chụp X-quang, máy điều hòa nhịp tim,…
  • Thiết bị điện tử dân dụng như Tivi, tủ lạnh, điều hòa,…
  • Ngành sản xuất ô tô, chế tạo robot, các dây chuyền sản xuất công nghiệp,…

Hệ thống nhúng hiện nay có mặt gần như ở tất cả các lĩnh vực từ trong cuộc sống hàng ngày đến sản xuất công nghiệp và kỹ thuật cao.

  Embedded Developer là gì? Cần học gì để trở thành Embedded Developer

  Cơ bản về Embedded và ứng dụng

Câu 3: So sánh công việc của Embedded hardware và Embedded software 

Embedded hardware là những công việc liên quan đến phần cứng như thiết kế board mạch, thiết kế PCB, test board mạch. Những công việc này cần đòi hỏi kiến thức chuyên môn liên quan đến mạch, điện tử cũng như phần cứng của hệ thống, thiết bị,… Ngược lại với Embedded software là những công việc liên quan đến phần mềm, là những lập trình viên thực hiện việc xây dựng và phát triển phần mềm cho các sản phẩm nhúng như driver, hệ điều hành, firmware, phần mềm ứng dụng, …

Một dự án phát triển hệ thống nhúng luôn đòi hỏi sự hợp tác chặt chẽ của 2 phần hardware và software; vì thế các lập trình viên trong ngành này thường cũng có kinh nghiệm về phần cứng nhất định.

Tuyển dụng kỹ sư lập trình nhúng đãi ngộ hấp dẫn tại đây!

Câu 4: Ngôn ngữ nào được sử dụng phổ biến nhất trong lập trình nhúng

C và C++

Trong lập trình nhúng, C và C++ vẫn là những ngôn ngữ phổ biến và được hỗ trợ rộng rãi nhất. C hay C++ là những ngôn ngữ gần với phần cứng, giúp tối ưu phần mềm, không đòi hỏi nhiều thư viện, vì thế giúp chương trình nhẹ nhàng và phù hợp với các hệ thống nhúng giới hạn về phần cứng. 95% mã nguồn hệ thống nhúng hiện nay đang được viết bằng C/C++.

Ngoài C/C++ thì hiện nay Python cũng đang là ngôn ngữ được nhiều hệ thống nhúng sử dụng; nó đang là ngôn ngữ có tốc độ phát triển người dùng nhanh nhất. Ưu điểm của Python là khả năng ghi, giảm lỗi và dễ đọc, các thư viện mã nguồn mở phong phú giúp các lập trình viên giảm thời gian viết code. Mặc dù vậy Python chỉ được dùng cho những hệ thống mà có cấu hình tốt về phần cứng.

Tham khảo tuyển dụng embedded Hà Nội lương cao trên TopDev

Câu 5: Giải thích từ khóa Volatile trong lập trình nhúng

Trong lập trình nhúng, trình compiler có sẵn tính năng optimization (tối ưu) sẽ thực hiện việc lược bỏ những phần code mà nó nghĩ là không cần thiết (ví dụ như biến không sử dụng). Trong một số trường hợp biến của bạn được khai báo nhưng để sử dụng ở 1 vị trí khác (biến global) hoặc map vào vùng nhớ ngoại vi khác dẫn đến việc thực chất là biến “có ích” và có nhiệm vụ của nó nhưng tính năng tối ưu sẽ vẫn đánh dấu nó là không cần thiết.

Để tránh việc tự động này, từ khóa Volatile đặt trước biến để báo cho trình optimization rằng không cần quan tâm đến nó. Trong thực tế, có 3 trường hợp bạn hay sử dụng từ khóa này:

  • Thanh ghi ngoại vi có ánh xạ đến ô nhớ
  • Biến toàn cục được truy xuất từ các tiến trình con xử lý ngắt
  • Biến toàn cục được truy xuất từ nhiều tác vụ trong một ứng dụng đa luồng

Câu 6: Phân biệt Little Endian và Big Endian

Little Endian và Big Endian là hai cơ chế lưu trữ dữ liệu theo việc sắp xếp các byte dữ liệu. Little endian xuất phát từ little-end nghĩa là kết thúc nhỏ – tức là byte cuối cùng trong biểu diễn nhị phân sẽ được ghi trước; và ngược lại Big endian hay big-end là cơ chế ghi dữ liệu mà byte đầu tiên sẽ ghi đầu tiên. Lưu ý là BE hay LE chỉ khác ở thứ tự các byte chứ không ảnh hưởng đến thứ tự các bit trong byte.

Big Endian sẽ phổ biến và thuận tự nhiên cho chúng ta đọc hơn. Đối với máy tính, không có sự khác biệt nào về tốc độ trong việc đọc ghi thứ tự các byte theo 2 cách trên. Dù vậy có 1 số trường hợp mà BE và LE thể hiện sự khác biệt, ví dụ:

  • Nếu chúng ta ép kiểu từ int (4 bytes) sang big int (8 bytes), với LE chúng ta không cần thay đổi địa chỉ bộ nhớ, chỉ cần ghi tiếp các byte lớn hơn mà thôi. BE sẽ phải làm bước dịch địa chỉ bộ nhớ hiện tại thêm 4 bytes thì mới có không gian lưu trữ.
  • Tuy vậy nếu khi cần đọc byte đầu tiên để xác định xem giá trị đó là số âm hay số dương (được quy định bởi byte lớn nhất) thì BE sẽ tỏ ra lợi thế hơn so với LE.

Câu 7: Sự khác nhau giữa Inline Function và Macro

Macro là những hàm được viết ở phần Preprocessor, một loại lệnh mở rộng tại thời điểm gọi của nó. Inline Function (hàm nội tuyến) cũng là một loại lệnh mở rộng tại thời điểm gọi của nó, nhưng nó được mở rộng trong quá trình biên dịch.

Hàm nội tuyến sử dụng từ khóa inline để đề nghị trình biên dịch (compiler) thực hiện inline expansion (khai triển nội tuyến) – chèn code của hàm đó tại địa chỉ mà nó được gọi. Sử dụng inline functions không khác nhiều so với hàm thông thường, tuy vậy khi thực thi nó sẽ chạy nhanh hơn, tiết kiệm chi phí gọi hàm.

Macro định nghĩa một cách chuyển văn bản code đầu vào nào đó thành văn bản code đầu ra theo ý mình muốn sử dụng từ khóa define. Macro giúp chúng ta tiết kiệm thời gian viết những đoạn code lặp lại trong chương trình.

Inline Function và Macro
Nguồn ảnh: https://stackoverflow.com/questions/70103669/difference-between-a-macro-and-function-outside-c

Câu 8: So sánh các giao thức UART, SPI và I2C

UART, SPI và I2C là 3 chuẩn truyền thông nối tiếp cơ bản nhất với MCU, trong đó:

  • UART là một chuẩn nối tiếp không đồng bộ, còn SPI và I2C là 2 chuẩn nối tiếp đồng bộ nên chúng có đường clock còn UART thì không.
  • SPI hỗ trợ tốc độ truyền lớn nhất nhưng các kết nối của nó phức tạp nhất.
  • UART có thể truyền đi với khoảng cách xa hơn, SPI và I2C chỉ truyền trên bo mạch.

Tham khảo tuyển dụng embedded fresher lương cao trên TopDev

Câu 9: Hãy giải thích về Interrupt (ngắt) và trình phục vụ ngắt ISR

Ngắt (Interrupt) là một sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu. Quá trình ngắt xảy ra như sau:

  • Khi có một thiết bị bất kỳ cần được phục vụ => nó sẽ báo cho bộ vi điều khiển bằng cách gửi 1 tín hiệu ngắt.
  • Khi nhận được tín hiệu ngắt => bộ vi điều khiển ngừng tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị gọi ngắt đồng thời lưu lại địa chỉ của lệnh kế tiếp.
  • Sau khi phục vụ ngắt xong => bộ vi điều khiển quay trở lại điểm bị ngắt trước đó; lấy lại địa chỉ lệnh kế tiếp và tiếp tục thực hiện công việc.

Chương trình ngắt trên được gọi là trình phục vụ ngắt ISR viết tắt của Interrupt Service Routine

Câu 10: Bạn nghĩ sao về triển vọng của ngành hệ thống nhúng và IoT

IoT hay Internet of Things là một trong 4 trụ cột của cách mạng công nghiệp 4.0, có tính ứng dụng cao, đóng vai trò quan trọng trong sự phát triển của nền kinh tế, vì vậy chuyên ngành này hứa hẹn sẽ có tốc độ phát triển rất mạnh ở cả trên thế giới lẫn Việt Nam.

IoT sẽ cần phải xây dựng, thiết kế và tạo ra các thiết bị, cỗ máy thông minh có kết nối với Internet phục vụ cho nhiều lĩnh vực khác nhau; và để làm được điều này thì cũng đồng nghĩa với việc xây dựng nhiều các hệ thống nhúng gồm cả phần cứng và phần mềm. Nói cách khác thì 2 ngành này đi liền với nhau, muốn làm IoT thì phải có các hệ thống nhúng. Vì thế trong tương lai, nhu cầu về tuyển dụng ngành hệ thống nhúng sẽ ngày càng lớn hơn.

Kết bài

Trên đây là list 10 câu hỏi bạn sẽ thường gặp phải nhất khi đi phỏng vấn vị trí lập trình viên Nhúng – Embedded System Developer. Hy vọng bài viết này sẽ giúp bạn phần nào đó hoàn thành tốt những câu hỏi đến từ nhà tuyển dụng. Cảm ơn các bạn đã đọc bài và hẹn gặp lại các bạn trong các bài viết tiếp theo của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

Tham khảo việc làm IT lương cao tại TopDev