15+ câu hỏi thường gặp nhất khi phỏng vấn lập trình nhúng

Bạn đang theo dõi bài viết 15+ câu hỏi thường gặp nhất khi phỏng vấn lập trình nhúng tại ivntalent.edu.vnBạn có thể truy cập nhanh bằng mục lục của bài viết để có thể xem thông tin mình cần nhanh chóng nhất nhé.

Vị trí nhân viên lập trình nhúng là một công việc hết sức quan trọng trong một phòng ban công nghệ thông tin. Những câu hỏi cho vị trí này thường sẽ xoay quanh kiến thức chuyên môn cũng như kinh nghiệm trong quá trình trước đó của ứng viên. Cùng tìm hiểu bài viết sau để tham khảo hơn 15 câu hỏi thường gặp nhất khi phỏng vấn lập trình nhúng, bạn nhé!

I. Cần chuẩn bị những gì trước khi tham gia phỏng vấn lập trình nhúng

15+ câu hỏi thường gặp nhất khi phỏng vấn lập trình nhúng

1. Trang bị những kỹ năng Hard Skills

Hard Skills là những kiến thức chuyên môn, nền tảng phải có ở bất kỳ chuyên ngành nào. Theo đó, một kỹ sư lập trình nhúng cần phải có những kiến thức cơ bản về cácngôn ngữ lập trình, kiến thức cơ bản vềkiến trúc máy tính,kiến trúc hệ điều hành,…

Ngoài ra, quan trọng nhất là những kiến thức chuyên sâu về lập trình nhúng mà ứng viên đã học được.

2. Trang bị những kỹ năng mềm (Soft skills)

Ngoài những kiến thức Hard Skills mà ứng viên đã được rèn luyện qua. Lập trình viên cũng cần có những kỹ năng mềm khác như: Tính tỉ mỉ và cẩn thận trong công việc, khả năng phân tích, giải quyết vấn đề, kỹ năng sắp xếp và tổ chức công việc một cách khoa học,…

3. Chú ý về trang phục khi đi phỏng vấn

Chỉnh chu trong trang phục khi đi phỏng vấn là một cách tạo sự ấn tượng tốt và thể hiện sự tôn trọng dành cho người phỏng vấn. Vì thế, cần phải chuẩn bị trang phục sao cho chỉnh chu, lịch sự để phù hợp cho buổi tuyển dụng.

Tìmviệc làm, tuyển dụngCông nghệ thông tin/ IT/ Lập trìnhcó thể bạn quan tâm:

.NET Core/Java Developers

Nhân viên IT Siêu thị (IT helpdesk)

Nhân Viên Lập Trình Firmware

II. 15+ câu hỏi hay xuất hiện nhất trong các buổi phỏng vấn lập trình nhúng

1. Đâu là thành phần cơ bản của hệ thống nhúng?

Hệ thống nhúng cơ bản gồm những phần sau:

RAM:Ramlà một phần quan trọng trong các thiết bị truy cập điện tử, là bộ nhớ truy cập ngẫu nhiên có khả năng tự đọc và ghi dữ liệu và sẽ bị mất đi nếu thiết bị mất nguồn điện cung cấp.

ROM:ROMlà bộ nhớ lưu trữ dùng để lưu trữ dữ liệu điện tử, ROM càng cao thì dung lượng được càng lớn. Khác với RAM, nếu mất đi nguồn điện ROM vẫn sẽ lưu trữ thông tin một cách bình thường.

MCU: Là một bộ mạch gắn trên chip được lập trình để điều khiển hoạt động của cả một hệ thống tính toán trung tâm.
Ngoài ra còn các bộ phận thiết bị ngoại vi khác: các khối giao tiếp UART, I2C, ổ cứng gắn ngoài, ADC, DAC,…

2. Nêu một vài hệ thống nhúng trong thực tế

Hệ thống nhúng xuất hiện ở hầu hết các thiết bị điện tử phổ thông hằng ngày như:

Điện thoại,máy tính bàn,laptop,..

– Thiết bị dùng kết nối mạng: Gateway,Router,…

– Thiết bị gia dụng:Máy giặt,tivi,máy lạnh.

Đến các thiết bị kỹ thuật cao:

– Ngành sản xuất ô tô, hàng không – vũ trụ, robot, dây chuyền công nghiệp,…

– Các thiết bị y tế: Máy chụp X – quang, thiết bị hỗ trợ tim mạch,…

3. Chỉ ra điểm khác biệt trong công việc của Embedded hardware và Embedded software

Embedded hardware:Những việc lập trình thiên về phần cứng: thiết kế và kiểm trang bảng mạch chính, thiết kế PCB. Những công việc này đòi hỏi khá nhiều kinh nghiệm chuyên môn đến mạch và phần cứng.

Embedded software:Công việc chính của chuyên ngành này liên quan đến việc xây dựng và thiết kế phần mềm để hỗ trợ cho các sản phẩm lập trình nhúng như: drive, phần mềm ứng dụng, hệ điều hành,…

4. Đâu là ngôn ngữ được dùng phổ biến nhất trong lập trình nhúng

Đây là một câu hỏi khá phổ biến mỗi khi tham gia các buổi phỏng vấn IT mà mọi ứng viên nên tham khảo trước mỗi lần tham gia phỏng vấn, đặc biệt là ở vị trí lập trình nhúng.

Các lập trình nhúng viên đa phần đều sử dụngC/C++theo sau đó làPYTON. Mỗi ngôn ngữ đều mang ưu nhược điểm khác nhau, nhưng nhìn chung đều là những ngôn ngữ mà các cty bắt buộc ứng viên của mình phải thành thạo.

5. Từ khóa Volatile là gì?

Những trường hợp xảy ra khi lập trình mà bạn hay dùng Volatile:

– Biến được map vào thanh ghi ánh xạ đến ô nhớ.

– Biến global được truy xuất từ nhiều task trong chương trình ứng dụng đa luồng.

– Biến toàn cục được nâng cấp qua ISR.

Đây là một thuật ngữ trong công việc lập trình nhúng, nói đơn giản đây là từ khóa này nghĩa là sẽ lược bỏ những phần không cần thiết trong truy xuất dữ liệu (compiler optimize code).

6. Watchdog Timer là gì? Tầm quan trọng của nó ra sao?

Watchdog Timerviết tắt là WDT, là một bộ bộ đếm thông tin tới một giá trị được chỉ định, lúc đó nó sẽ tạo ra tín hiệu để reset toàn bộ hệ thống, tránh tình trạng treo lâu mất thời gian hoặc mắc kẹt system gây hại đến phần cứng.

7. Sự khác nhau giữa Little Endian và Big Endian

Khi lưu trữ dữ liệuLittle Endian (LE)được hiểu là Little End sẽ lưu trữ dữ liệu có byte thấp vào vùng lưu trữ có dung lượng thấp. Khác với LE,Big Endian (BE)hiểu là Big End sẽ ghi những dữ liệu đầu tiên của byte.

Cả Little Endian và Big Endian đều là cơ chế lưu trữ dựa trên việc sắp xếp việc đếm byte. Ngoài ra, cả 2 chỉ ảnh hưởng tới thứ tự trong byte mà không hề ảnh hưởng tới số lượng và thứ tự bit trong byte.

8. Phân biệt Inline Function và Macro

Macro thường được biết đến là sử dụng hàm mở rộng được viết ở Preprocessor. Mặc khác, Macro giúp chúng ta tiết kiệm thời gian bằng việc sử dụng đoạn code ban đầu nào đó thành một nội dung code đầu ra bằng việc sử dụng lệnh define, từ đó trách việc phải viết đoạn code lặp lại trong hệ thống.

Inline Function được hiểu là nội tuyến, nó giống với các hàm bình thường khác, nhưng thường trước từ khóa sẽ được dòng inline.

Inline Function và Macro khác nhau như bản sau đây:

Cơ sở để so sánh

Nội tuyến

Vĩ mô

Căn bản

Các hàm nội tuyến được phân tích cú pháp bởi trình biên dịch.

Macro được mở rộng bởi bộ tiền xử lý.

Cú pháp

return return_type func_name (tham số) {. . . }

#define macro_name char_ resultence

Từ khóa được sử dụng

nội tuyến

#định nghĩa

Xác định

Nó có thể được định nghĩa bên trong hoặc bên ngoài lớp.

Nó luôn được xác định khi bắt đầu chương trình.

Đánh giá

Nó đánh giá đối số chỉ một lần.

Nó đánh giá đối số mỗi lần nó được sử dụng trong mã.

Sự bành trướng

Trình biên dịch có thể không nội tuyến và mở rộng tất cả các chức năng.

Macro luôn được mở rộng.

Tự động hóa

Các hàm ngắn, được định nghĩa bên trong lớp được tự động tạo thành các hàm nội tuyến.

Macro nên được xác định cụ thể.

Truy cập

Một hàm thành viên nội tuyến có thể truy cập các thành viên dữ liệu của lớp.

Macro không bao giờ có thể là thành viên của lớp và không thể truy cập các thành viên dữ liệu của lớp.

Chấm dứt

Định nghĩa hàm nội tuyến chấm dứt với dấu ngoặc nhọn ở cuối hàm nội tuyến.

Định nghĩa vĩ mô chấm dứt với dòng mới.

Gỡ lỗi

Gỡ lỗi dễ dàng cho một hàm nội tuyến vì việc kiểm tra lỗi được thực hiện trong quá trình biên dịch.

Việc gỡ lỗi trở nên khó khăn đối với các macro vì việc kiểm tra lỗi không xảy ra trong quá trình biên dịch.

Ràng buộc

Một hàm nội tuyến liên kết tất cả các câu lệnh trong phần thân của hàm cũng như phần thân của hàm bắt đầu và kết thúc bằng dấu ngoặc nhọn.

Một macro phải đối mặt với vấn đề ràng buộc nếu nó có nhiều hơn một câu lệnh, vì nó không có ký hiệu kết thúc.


9. So sánh giao thức UART, SPI và I2C

UART, SPI và I2C là ba chuẩn truyền thông nối tiếp quan trọng ở một hệ thống tính toán trung tâm.

– SPI và I2C là 2 chuẩn nối tiếp đồng bộ trên cùng một đường truyền clock còn UART là một chuẩn nối tiếp không được đồng bộ.

– SPI và I2C chỉ truyền được thông tin ở trên board, UART có thể truyền với phạm vi xa hơn rất nhiều so với 2 giao thức kia.

-SPI thường có tốc độ truyền rất lớn, là loại giao nhất có độ truyền nhanh nhất trong cả ba, vì thế chúng có cấu tạo khá phức tạp so với UART và I2C.

UART, SPI và I2C là ba chuẩn truyền thông nối tiếp quan trọng ở một hệ thống tính toán trung tâm.

10. So sánh struct và union

Điểm chung của 2 giao thức này đều là do lập trình viên tự tạo ra (user defined type), bên cạnh đó chúng đều sử dụng dấu “.” để có thể truy cập các phần tử.

Điểm khác biệt của chúng có thể thấy rõ trong mô hình so sánh sau đây:

Struct

Union

Keyword

Dùng keyword “struct” để define struct.

Dùng keyword “union” để define union.

Size

Lớn hơn hoặc bằng tổng size các member (tùy vào data alignment).

Lấy theo size của của member lớn nhất.

Memory

Mỗi member có vùng nhớ riêng biệt.

Các member dung chung 1 vùng nhớ.

Modif giá trị

Modify một member không ảnh hưởng member khác.

Việc modify bất kỳ member nào cũng ảnh hưởng đám còn lại.

Truy cập member

Truy cập bất kỳ thành viên nào ở thời điển nào cũng được.

Trong một lúc chỉ truy cập được một thành viên mà thôi.

Init giá trị đầu

Member nào cũng init được.

Chỉ member đầu tiên là có thể init.

11. Trình bày về Interrupt (ngắt) và trình phục vụ ngắt ISR

Ngắt (Interrupt) bắt buộc bộ vi điều khiển tạm dừng lệnh đang chạy và ngay lập tức thực hiện việc ngắt như yêu cầu. Thông thường việc ngắt này xảy ra khi có lỗi khẩn cấp ở trong hoặc ngoài bộ vi điều khiển. Quá trình ngắt này sẽ được thực hiện theo các bước sau:

Bước 1:Khi thiết bị cần được thực hiện, nó sẽ báo cho bộ vi điều khiển thông qua việc gửi 1 tín hiệu ngắt.

Bước 2:Sau khi nhận được tín hiệu ngắt, bộ vi điều khiển sẽ đóng những nhiệm vụ nó đang thực hiện, để chuyển sang phục vụ lệnh gọi ngắt từ thiết bị. Bộ vi điều khiển khi thực hiện lệnh ngắt vẫn sẽ lưu lại nhiệm vụ của phần trước để tiếp tục hoàn thành chúng.

Bước 3:Sau khi thực hiện xong việc ngắt, bộ vi điều khiển sẽ quay lại nhiệm vụ đã được lưu trước đó, lấy lại địa chỉ câu lệnh để tiếp tục hoàn thành công việc đang làm
Để phục vụ việc ngắt trên, ta thường dùng chương trình của Interrupt Service Routine (ISR).

12. Phần cứng và dữ liệu được nhúng trong vi điều khiển có an toàn không?

Ngoại trừ những vi điều khiển cứng có chất lượng cao, đắt tiền hoặc đã được xây dựng kỹ dùng để đối phó với việc tải lên hoặc thâm nhập sửa đổi phần hệ thống lõi, thì sẽ khá dễ dàng nếu một ai đó muốn hack hay sửa đổi phần lõi và tải chúng ngược trở lên.

13. Đối với các nền tảng có các ràng buộc đáng kể về dung lượng bộ nhớ, phân bổ bộ nhớ tĩnh hay động sẽ tốt hơn?

Câu hỏi này nhằm kiểm tra ứng viên trong việc sử dụng bộ nhớ và trong những tình huống thực tế sẽ giải quyết chúng như thế nào.Nếu các nền tảng có bộ nhớ có kilobyte thấp hoặc nhỏ hơn nữa, việc lưu trữ trên bộ nhớ tĩnh sẽ tốt hơn.

Ngược lại, nếu dữ liệu cao hoặc CPU bị quá tải thì việc sử dụng bộ nhớ động sẽ phát huy tác dụng tốt hơn từ đó có thể tiết kiệm được chi phí cho công ty.

14. Lý do nào mà C và C ++ vẫn rất phổ biến trong việc phát triển phần mềm nhúng?

Khi làm việc lập trình nhúng, các kỹ sư thường xuyên làm việc về phần cứng, các dữ liệu, tốc độ CPU,… Do đó ngôn ngữ lập trình C/C++ sẽ giúp bạn dễ dàng tương tác với các nhiệm vụ trên hơn bất kỳ ngôn ngữ nào.

15. Bạn nghĩ sao về triển vọng của ngành hệ thống nhúng

Lập trình nhúng là một trong những nhiệm vụ hết sức quan trọng trong việc thiết kế, xây dựng và điều hành toàn bộ thiết bị. Nói cách khác, bắt buộc phải có hệ thống nhúng để một sản phẩm công nghệ có thể hoạt động một cách thông minh và hạn chế gặp lỗi nhiều nhất có thể.

Xây dựng một thống nhúng chuyên nghiệp là một điều bắt buộc phải có ở một cty hay một quốc gia muốn phát triển công nghệ hiện đại. Vì thế ngành này ở tương lai sẽ có tốc độ phát triển rất nhanh trên thế giới cũng như là lập trình Việt Nam.

Xem thêm:

– Ngôn ngữ lập trình là gì? Phân biệt các loại ngôn ngữ lập trình phổ biến

– IT là gì? Các yêu cầu và cơ hội việc làm của ngành IT

– Những tài liệu IT Helpdesk cần tham khảo cho người mới bắt đầu

Hy vọng bài viết đã giúp bạn có thêm kinh nghiệm và kiến thức để trả lời tự tin bước vào vòng trao đổi với nhà tuyển dụng để trả lời những câu hỏi thường gặp nhất ở vị trí lập trình nhúng. Cảm ơn bạn đã theo dõi bài viết, đừng quên chia sẻ cho người thân nếu bạn thấy nội dung này bổ ích nhé!

Cảm ơn bạn đã theo dõi bài viết 15+ câu hỏi thường gặp nhất khi phỏng vấn lập trình nhúng do ivntalent.edu.vnsưu tầm. Mong rằng các bạn có những thông tin bổ ích nhé. Mọi thông tin khiếu nại về bản quyền vui lòng liên hệ contact để xử lý nhanh nhất nhé. Cảm ơn các bạn.