Làm thế nào để đạt được công việc phần mềm nhúng mơ ước của bạn

Rất nhiều hướng dẫn chuẩn bị cho các cuộc phỏng vấn phần mềm. Các cuộc phỏng vấn phần mềm nhúng hơi giống nhau, nhưng nó vẫn là một trò chơi khác mà bạn phải chơi.

Có một số tài liệu hữu ích trên Internet và một số nội dung để chuẩn bị phỏng vấn phần mềm được thực hiện. Nhưng nói chung, tôi không thể tìm thấy hướng dẫn toàn diện để bắt đầu.

Việc tuyển dụng và chuẩn bị phỏng vấn cho phần mềm nhúng trong 4 tháng qua đã dạy tôi rất nhiều về cách tiếp cận quy trình. Gần đây tôi đã nhận được đề nghị từ một vài công ty công nghệ lớn. Trong bài đăng này, tôi sẽ chia sẻ một số thông tin chi tiết mà tôi có được trong suốt quá trình.

Tôi sẽ chia bài đăng này thành một vài phần, vì vậy hãy thoải mái tham khảo! Đã có rất nhiều nội dung về các cách tuyển dụng thông minh, vì vậy tôi sẽ không đi sâu vào cách phỏng vấn ở đây.

  • Nội dung cần chuẩn bị và ôn tập
  • Cuộc phỏng vấn chính nó!

Chọn một ngôn ngữ

Như một tiêu chuẩn, phát triển phần mềm nhúng chủ yếu được thực hiện bằng C, mặc dù C ++ đang trở nên phổ biến hơn gần đây. Nếu bạn đã tham gia bất kỳ khóa học nào về kiến ​​trúc máy tính hoặc hệ thống nhúng, có thể bạn đã sử dụng cái này hoặc cái kia. Đảm bảo rằng bạn biết công ty bạn đang phỏng vấn sử dụng ngôn ngữ nào. Nếu bạn quen thuộc hơn với C ++ nhưng họ sử dụng C, hãy nói trước về điều đó - nếu bạn biết một, bạn sẽ có thể chuyển đổi giữa hai cách khá dễ dàng.

Vì tôi quen thuộc nhất với C ++ nên các công ty đã cho phép tôi viết mã bằng C ++. Nếu cần, họ đã giúp tôi chuyển mã đó sang C. Đối với hầu hết các phần, nó không thực sự tạo ra sự khác biệt. Điều này là trừ khi bạn đang làm việc với một số hàm và vùng chứa thư viện chuẩn C ++ cụ thể.

Verilog được sử dụng chủ yếu để phát triển FPGA. Python được sử dụng khá nhiều để giao tiếp giữa người dùng và hệ thống nhúng mà họ đang làm việc. Rất có thể bạn sẽ không được hỏi bất kỳ câu hỏi nào về những điều đó.

Tương tự với hợp ngữ (rất may !!?).

Những điều cơ bản là những điều cơ bản

Tôi bắt đầu cuộc hành trình theo cách tương tự như hầu hết các sinh viên khoa học máy tính - bằng cách xem xét các cấu trúc dữ liệu và thuật toán của tôi. Nhưng ngay sau đó, tôi nhận ra rằng nội dung cho phần mềm nhúng đã tách ra ở một điểm nhất định. Nó nhiều hơn tập trung vào kiến trúc máy tính, hệ điều hành, và một số nguyên tắc cơ bản phần cứng hơn so với cấu trúc dữ liệu cấp độ cao hơn như cây hoặc các thuật toán sắp xếp.

Bạn xử lý mã và phần cứng cấp thấp hơn trong vai trò phần mềm nhúng. Nhưng từ quan điểm lập trình, cấu trúc dữ liệu và thuật toán của bạn vẫn liên quan cao . Tương tự như phỏng vấn phần mềm, có rất nhiều tài nguyên để giúp bạn chuẩn bị cho những điều cơ bản! Thực hiện một số vấn đề từ mỗi phần trong Phỏng vấn mã hóa là một điểm khởi đầu tốt.

Ngay sau đó, tôi thích sử dụng LeetCode hơn do khả năng chạy và kiểm tra ngay lập tức. LeetCode là một nền tảng đáng kinh ngạc với một cộng đồng tuyệt vời. Theo tôi, có những câu hỏi gần giống với những câu hỏi bạn sẽ gặp trong các cuộc phỏng vấn. Nó lưu tất cả các giải pháp đã gửi của bạn và cũng tính toán thời gian chạy. Làm hầu hết các câu hỏi “Dễ” và một phần khá trong số các câu hỏi “Trung bình” và bạn sẽ ổn :)

Ngoài ra, Geeks For Geeks là một nguồn tài nguyên tuyệt vời với những giải thích rất cặn kẽ cho hàng trăm vấn đề.

Chuyển tiếp từ các cuộc Phỏng vấn phần mềm

Một số chủ đề sau đây rất giống với các khái niệm từ các cuộc phỏng vấn phần mềm và những chủ đề này được thử nghiệm rất nhiều, vì vậy hãy đảm bảo bạn biết rõ về chúng!

  • Độ phức tạp của thuật toán (cả thời gian và bộ nhớ)
  • Con trỏ
  • Mảng
  • Danh sách được Liên kết
  • Chuỗi (và chuỗi C)
  • Ngăn xếp & Hàng đợi

Các chủ đề sau không thực sự được thử nghiệm, nhưng hãy làm quen với chúng về mặt khái niệm. Biết cách chúng hoạt động, mức độ phức tạp của chúng và cách giải quyết chúng ở mức cơ bản.

  • Đệ quy
  • Cây
  • Đống
  • Băm
  • Sắp xếp

Ngoài phần mềm

Đây là nơi mà nội dung nhúng thực sự bắt đầu!

Thao túng bit !!

Biết điều này như mu bàn tay của bạn.

Đó có thể là chủ đề quan trọng nhất trong các cuộc phỏng vấn của bạn. Về chủ đề cụ thể này, hãy làm tất cả các câu hỏi trên LeetCode.

  • Biết cách biểu diễn số âm trong hệ nhị phân
  • Biết sự khác biệt giữa phần bổ sung của một và hai
  • Có thể chuyển đổi giữa nhị phân, thập phân và thập lục phân
  • Hoạt động XOR rất mạnh mẽ . Biết tất cả những gì nó có thể làm.

Đây là một tài nguyên tuyệt vời mà tôi đã sử dụng cho các mẹo và thủ thuật hữu ích

Kiến trúc máy tính

Một giây gần với thao tác bit.

Bạn có thể sẽ không được yêu cầu thực hiện bất kỳ điều nào trong số này, nhưng bạn chắc chắn sẽ được hỏi về cách mọi thứ hoạt động bên dưới mui xe. Một số chủ đề cần đọc bao gồm…

  • Các thanh ghi quan trọng và cách chúng hoạt động
  • Sự khác biệt giữa lưu người gọi và lưu thư viện
  • Cách hoạt động của ngắt
  • Hiểu biết cơ bản về đường ống hướng dẫn
  • Bộ nhớ đệm, TLB và cách bộ nhớ ảo được triển khai
  • Nhiều loại bộ nhớ (ROM so với RAM, DDR, EEPROM, Flash, v.v.)
  • Bộ nhớ đệm (hướng dẫn và lớp học)
  • Điều gì xảy ra khi bạn khởi động một hệ thống

Các hệ điều hành

Tùy thuộc vào công ty và vai trò, hệ điều hành có thể là một chủ đề rất quan trọng. Bạn sẽ không được yêu cầu triển khai bất kỳ điều nào trong số này, nhưng hãy biết cách mọi thứ hoạt động ở cấp độ khái niệm!

  • Xử lý so với Chủ đề
  • Cách hoạt động của đa luồng
  • Hệ điều hành thời gian thực so với hệ điều hành truyền thống
  • Lập lịch tác vụ (FIFO, Round Robin, Dựa trên mức độ ưu tiên)
  • Cách semaphores & mutexes bảo vệ dữ liệu
  • Đảo ngược ưu tiên, kế thừa ưu tiên, spinlock và deadlock
  • Điều gì làm cho một hàm 'reentrant'?
  • Phần quan trọng
  • Mức độ ưu tiên trong vi điều khiển (EL0 - EL3)

Giao thức truyền thông

Biết những lợi ích và sự cân bằng của việc sử dụng các giao thức sau:

  • UART
  • SPI
  • I2C

Dựa trên kinh nghiệm trước đây của bạn, vai trò bạn đang ứng tuyển và công ty, bạn cũng có thể được hỏi về những người khác. Thông thường, các công ty không mong đợi bạn biết về các giao thức cụ thể này và sẽ đào tạo bạn trong công việc. Nhưng hiểu biết cơ bản luôn có thể giúp người phỏng vấn ngạc nhiên!

  • Ô tô: CAN, LIN
  • Không dây: 3G, 4G LTE, thông tin cơ bản về 5G, 802.11 (Wifi), Bluetooth
  • Kết nối mạng: HTTP, TCP / UDP, IP, 802.11 (Wifi), Ethernet

Nguyên tắc cơ bản về phần cứng

Phần cứng không được kiểm tra nhiều cho phần mềm nhúng, nhưng tùy thuộc vào vai trò, mức độ tương tác của bạn có thể khác nhau. Kiểm tra mô tả công việc và nói chuyện với những người làm việc ở đó để có ý tưởng tốt hơn!

  • Bộ định giờ cơ quan giám sát
  • Hẹn giờ nói chung
  • Thông tin chi tiết về bất kỳ thiết bị ngoại vi nào bạn có thể đã sử dụng trong các dự án của mình (gia tốc kế, bất kỳ cảm biến nào, LiDAR, động cơ, v.v.)

Thực hành

Thực hành là chìa khóa - thực sự không có cách nào xung quanh điều đó. Đảm bảo dành ít nhất 2 giờ mỗi ngày để chuẩn bị phỏng vấn, không bao gồm việc nộp đơn xin việc và tiếp cận nhà tuyển dụng.

Trong khi thực hành trên LeetCode, hãy bình luận mã của bạn. Giải thích thuật toán của bạn và sự phức tạp trong thời gian chạy. Mỗi ngày trước khi bạn bắt đầu viết mã, hãy xem lại các vấn đề bạn đã làm vào ngày hôm trước. Vào cuối tuần, hãy xem xét lại mọi vấn đề bạn đã làm trong tuần đó. Điều này sẽ giúp bạn ghi nhớ các thuật toán tốt hơn và từng chút một, bạn sẽ trở thành người chuyên nghiệp trong việc so khớp mẫu.

Các cuộc phỏng vấn nhúng có xu hướng mang tính khái niệm hơn các cuộc phỏng vấn phần mềm thông thường của bạn, do bản chất của một số chủ đề được thử nghiệm. Đối với những lĩnh vực này, tôi duy trì một tài liệu Google về tất cả các câu hỏi mà tôi có thể được hỏi, cũng như tất cả các câu trả lời của họ. Tôi cũng bao gồm một liên kết đến nơi tôi có thể đọc thêm thông tin hữu ích. Nó giúp tôi tổ chức và xem xét nhanh hơn.

Rất nhiều người đã hỏi tôi liên kết đến tài liệu Google, vì vậy đây là: Câu hỏi phỏng vấn được nhúng

Tại cuộc phỏng vấn

Bạn đã làm được - công việc tuyệt vời!

Hít thở sâu. Đã đến lúc vận dụng tốt tất cả công việc khó khăn của bạn. Thông thường, bạn và người phỏng vấn sẽ trải qua một vài câu hỏi khái niệm. Bạn cũng sẽ thảo luận về những kinh nghiệm và dự án trước đây của bạn. Đảm bảo rằng bạn có thể trả lời chi tiết các câu hỏi về đóng góp của mình và các thách thức khác nhau mà bạn phải đối mặt.

Nếu đây là một cuộc phỏng vấn diễn ra từ xa, bạn có thể sẽ được yêu cầu viết mã trong một tài liệu được chia sẻ. Chuẩn bị sẵn một số giấy để ghi lại các điểm và sơ đồ quan trọng. Nếu nó hữu ích, bạn cũng có thể có một số lưu ý mà bạn có thể tham khảo trong cuộc phỏng vấn. Tôi luôn luôn có sẵn một tờ thông tin về các thuật toán phức tạp cơ bản.

Kiểm tra múi giờ. Kiểm tra kỹ chúng. Đừng quên sử dụng tai nghe. Ở trong một môi trường yên tĩnh để không có bất kỳ xáo trộn nào. Các vấn đề về giao tiếp sẽ chỉ làm cho cuộc phỏng vấn trở nên khó khăn hơn.

Khi bạn nhận được câu hỏi

Không bao giờ bắt đầu viết mã ngay lập tức. Người phỏng vấn đang thực sự xem xét cách tiếp cận của bạn.

Hãy dành một giây và lặp lại câu hỏi với người phỏng vấn, chỉ để đảm bảo rằng cả hai bạn đều ở trên cùng một trang. Và nếu có bất kỳ hiểu lầm nào, người phỏng vấn luôn có thể lặp lại và làm rõ bất kỳ nghi ngờ nào.

Tiếp theo, hãy hiểu phạm vi của vấn đề

  • Đầu vào lớn như thế nào?
  • Nó được sắp xếp?
  • Có thời gian hoặc độ phức tạp bộ nhớ nhất định mà bạn nên đáp ứng không?
  • Có trùng lặp không? Giá trị âm? Giá trị trống?
  • Bạn có phải thực hiện kiểm tra lỗi không?

Sau đó, xem qua thuật toán của bạn. Bắt đầu với cách tiếp cận cơ bản nhất, bạo lực. Nó có thể siêu kém hiệu quả và hãy đề cập rằng bạn đang sử dụng điều này như một điểm khởi đầu. Giải thích sự phức tạp về thời gian và bộ nhớ và tại sao đó là một giải pháp kém.

Từ đó, đã đến lúc tối ưu hóa. Nói chung, hãy tìm những nơi mà bạn có thể đang lưu trữ lượng dữ liệu không cần thiết hoặc các đoạn mã lặp lại. Đối với các ứng dụng nhúng, bộ nhớ rất quan trọng! Thay vì sử dụng một mảng hoặc vectơ, hãy xem xét sử dụng một tập hợp các bit. Nếu bạn chỉ xử lý các giá trị từ 0 đến 31, hãy chuyển đổi các bit trong một số nguyên! Đây là lúc mà thao tác bit có ích.

Điều quan trọng là phải suy nghĩ thành tiếng trong khi động não. Nếu bạn bị mắc kẹt hoặc đi sai hướng, người phỏng vấn có thể giúp đưa bạn trở lại đúng hướng. Khi cả hai bạn đã đồng ý về một giải pháp, thì cuối cùng đã đến lúc bắt đầu viết mã.

Viết mã

Đọc mã của người khác không phải lúc nào cũng là điều thú vị nhất. Làm cho công việc dễ dàng hơn một chút cho người phỏng vấn của bạn bằng cách sử dụng phong cách tốt. Điều đó không có nghĩa là bạn phải đặt xuống mọi dấu chấm phẩy hoặc dấu ngoặc vuông, nhưng hãy thụt lề tốt và sử dụng các tên biến có ý nghĩa. Cố gắng viết gọn gàng và sử dụng tốt không gian bảng trắng.

Trong khi bạn đang viết mã, hãy tiếp tục kiểm tra thuật toán bạn đã nghĩ ra. Tương tự với giai đoạn động não, hãy suy nghĩ thành tiếng . Cung cấp nhận xét bằng lời nói cho mã của bạn. Ở mỗi bước, giải thích những gì bạn đang kiểm tra, những gì bạn hy vọng đạt được và bất kỳ quyết định thiết kế nào bạn đưa ra.

Sau khi bạn viết mã xong, đừng nói rằng bạn đã hoàn tất. Lùi lại một bước và phân tích mã của bạn từ góc độ cấp cao. Kiểm tra các đầu vào, đầu ra và logic của bạn để tìm bất kỳ lỗi nào. Hãy chắc chắn phát hiện ra bất kỳ lỗi nào từng lỗi một! Sau đó, xem qua mã với một vài trường hợp thử nghiệm. Nếu có bất kỳ vấn đề nào mà bạn gặp phải, hãy xem lại và làm lại mã của bạn nếu cần.

Tùy thuộc vào cuộc phỏng vấn, bạn có thể có một câu hỏi lớn hoặc một vài câu hỏi nhỏ hơn. Nhưng một khi người phỏng vấn đã đồng ý với giải pháp của bạn, có khả năng họ có thể mở rộng các thông số khác cho nó. Bạn có thể sẽ không phải làm lại mã, nhưng bạn có thể phải thảo luận về cách thay đổi các phần trong cách tiếp cận của mình. Giống như tôi đã đề cập trước đây, bộ nhớ rất quan trọng trong các ứng dụng nhúng. Vì vậy, một câu hỏi tiếp theo phổ biến thường là về tối ưu hóa bộ nhớ hơn nữa.

Lời kết

Bản chất của các cuộc phỏng vấn phần mềm nhúng phụ thuộc nhiều vào công ty và công việc mà họ ưu tiên. Các công ty làm việc trên một giao thức truyền thông cụ thể sẽ tìm kiếm những thứ khác với một công ty phát triển hệ điều hành thời gian thực hoặc một công ty làm việc trên một sản phẩm IoT.

Tôi muốn sử dụng bài viết này như một nơi để chia sẻ một số chủ đề phổ biến trong các cuộc phỏng vấn mà tôi đã có, nhưng điều này không có nghĩa là toàn diện. Điều này được dự định sẽ được sử dụng như một điểm khởi đầu. Nhưng vui lòng liên hệ với các nhân viên hiện tại và kiểm tra Glassdoor để biết thêm các mẹo phỏng vấn cụ thể của công ty.

Các cuộc phỏng vấn rất khó khăn, nhưng chuẩn bị tốt và làm việc chăm chỉ ngay bây giờ có thể giúp bạn tìm được công việc mà bạn yêu thích :)

Tôi hy vọng bài viết này sẽ giúp ích, và chúc bạn những điều may mắn nhất!

Nếu bạn thích bài viết này, xin đừng quên để lại a ?. Bạn cũng có thể theo dõi tôi trên Twitter hoặc Quora :)