自学嵌入式能找到工作吗_如何找到理想的嵌入式软件工作

本文介绍了如何准备嵌入式软件面试,包括选择语言(如C或C++),理解基础知识,如位操作、计算机架构和操作系统,以及面试技巧。作者强调了位操作的重要性,并分享了在面试中的思考过程和代码编写注意事项。文章指出,虽然面试准备与软件面试相似,但嵌入式软件更注重硬件和底层知识。
摘要由CSDN通过智能技术生成

自学嵌入式能找到工作吗

by Rohan Dasika

通过罗汉·达西卡(Rohan Dasika)

如何找到理想的嵌入式软件工作 (How to land your dream embedded software job)

Guides on preparing for software interviews are aplenty. Embedded software interviews are somewhat similar, but it’s still a different game you have to play.

有关准备软件面试的指南很多。 嵌入式软件的采访有些相似,但是您仍然需要玩另一种游戏。

There is some helpful material on the Internet and some content for software interview prep does carry over. But in general, I wasn’t able to find a comprehensive guide to get me started.

Internet上有一些有用的材料,并且一些准备软件面试的内容会继续存在。 但总的来说,我无法找到全面的指南来入门。

Recruiting and doing interview prep for embedded software over the last 4 months taught me a great deal about how to approach the process. I recently received offers from a few big tech companies. In this post, I’ll be sharing some insights I gained along the way.

在过去的四个月中,招聘和进行嵌入式软件的面试准备教会了我很多有关如何进行该过程的知识。 我最近收到了一些大型科技公司的报价。 在这篇文章中,我将分享我在此过程中获得的一些见解。

I’ll be dividing this post into a couple sections, so feel free to jump around! There are already tons of content on smart ways to recruit, so I’m not going to go into how to get interviews here.

我将把这个帖子分成几个部分,请随时跳转! 关于聪明的招募方式已经有大量的内容,所以我不会在这里讨论如何进行面试。

  • Content to prepare and review

    准备和审查的内容
  • The interview itself!

    面试本身!

选择一种语言 (Picking a language)

As a standard, embedded software development is mostly done in C, although C++ is becoming more popular recently. If you’ve taken any computer architecture or embedded systems courses, you’ve probably used one or the other. Make sure you know which language the company you’re interviewing with uses. If you’re more familiar with C++ but they use C, be upfront about that — if you know one, you’ll be able to switch between the two fairly easily.

作为标准,嵌入式软件开发主要是用C语言完成的,尽管C ++最近变得越来越流行。 如果您上过任何计算机体系结构或嵌入式系统课程,则可能已使用其中一个。 确保您知道要面试的公司使用的语言。 如果您对C ++更熟悉,但他们使用C,那么请提前做好准备—如果您知道一个,就可以轻松地在这两个之间切换。

Since I’m most familiar with C++, companies have allowed me to write code in C++. If necessary, they helped me transition that code to C. For the most part, it doesn’t really make a difference. This is unless you’re working with some specific C++ standard library functions and containers.

由于我最熟悉C ++,因此公司允许我用C ++编写代码。 如有必要,他们帮助我将代码转换为C。在大多数情况下,它实际上并没有什么不同。 除非您正在使用某些特定的C ++标准库函数和容器。

Verilog is used mostly for FPGA development. Python is used a fair amount to communicate between the user and the embedded system they’re working on. Chances are you won’t be asked any questions on those.

Verilog主要用于FPGA开发。 大量使用Python在用户和他们正在使用的嵌入式系统之间进行通信。 您将不会有关于这些的任何问题。

Same goes with assembly language (thankfully!! ?).

汇编语言也是如此(非常感谢!?)。

基础就是基础 (The basics are the basics)

I began the journey in a similar fashion to most computer science students — by reviewing my data structures and algorithms. But soon, I realized that content for embedded software splits off at a certain point. It’s much more focused on computer architecture, operating systems, and some hardware fundamentals than higher level data structures like trees or sorting algorithms.

通过回顾我的数据结构和算法,我以与大多数计算机科学专业学生相似的方式开始了旅程。 但是很快,我意识到嵌入式软件的内容在某个时候会分裂。 它侧重于计算机体系结构,操作系统,和一些硬件基础不是像树木或排序算法更高级别的数据结构。

You deal with lower level code and hardware in embedded software roles. But from a programming standpoint, your data structures and algorithms are still highly relevant. Similar to software interviews, there are tons of resources to help you prepare for the basics! Doing a few problems from each section in Cracking the Coding Interview was a good starting point.

您需要处理嵌入式软件角色中的较低级别的代码和硬件。 但是从编程的角度来看,您的数据结构和算法仍然高度相关。 与软件面试类似,有大量资源可帮助您准备基础知识! 在“ 破解编码面试”的每个部分中做一些问题是一个很好的起点。

Quickly after that, I preferred to use LeetCode due to the capability to run and test instantly. LeetCode is an incredible platform with a great community. In my opinion, has questions most similar to ones you’ll encounter in interviews. It saves all your submitted solutions and calculates runtimes as well. Do most of the “Easy” and a decent portion of the “Medium” questions and you should be okay :)

之后很快,由于可以立即运行和测试,我更喜欢使用LeetCode 。 LeetCode是一个拥有强大社区的令人难以置信的平台。 我认为,您所遇到的问题您在面试中遇到的问题最相似 。 它会保存您所有提交的解决方案,并计算运行时间。 回答大部分“简单”问题和“中等”问题,您应该可以:)

Additionally, Geeks For Geeks is a great resource with very thorough explanations for hundreds of problems.

此外, Geeks For Geeks是一个很好的资源,它对数百个问题进行了详尽的解释。

从软件面试中继承下来 (Carry-over from Software Interviews)

The following few topics are very similar to the concepts from software interviews, and these are tested heavily, so make sure you know them well!

以下几个主题与软件访谈中的概念非常相似,并且已经过大量测试,因此请确保您对它们很熟悉!

  • Algorithmic complexity (both time and memory)

    算法复杂度(时间和内存)
  • Pointers

    指针
  • Arrays

    数组
  • Linked Lists

    链表
  • Strings (and C-strings)

    字符串(和C字符串)
  • Stacks & Queues

    堆栈和队列

The following topics aren’t really tested, but be familiar with them conceptually. Know how they work, their complexities, and how to solve them at a basic level.

以下主题并未经过真正的测试,但从概念上熟悉它们。 了解它们的工作原理,复杂性以及如何从根本上解决它们。

  • Recursion

    递归
  • Trees

    树木
  • Heaps

  • Hashing

    散列
  • Sorting

    排序

超越软件 (Beyond the Software)

This is where the real embedded stuff starts!

这是真正的嵌入式东西开始的地方!

位操作!! (Bit manipulation!!)

Know this like the back of your hand.

像手背一样知道这一点。

It’s possibly the most important topic of your interviews. On this specific topic, do all the questions on LeetCode.

这可能是您面试中最重要的话题。 关于这个特定主题,请在LeetCode上回答所有问题。

  • Know how negative numbers are represented in binary

    知道负数如何用二进制表示
  • Know the differences between one’s and two’s complements

    了解一个人和两个人的补语之间的区别
  • Be able to convert between binary, decimal, and hexadecimal

    能够在二进制,十进制和十六进制之间转换
  • The XOR operation is powerful. Know what all it can do.

    XOR操作功能强大 。 知道它能做什么。

Here’s a great resource I used for helpful tips and tricks

这是我有用的有用技巧的绝妙资源

计算机架构 (Computer architecture)

A close second to bit manipulation.

仅次于位操作。

You probably won’t be asked to implement any of these, but you definitely will be asked about how things work underneath the hood. Some topics to read up on include…

您可能不会被要求实施其中任何一个,但是肯定会询问您有关引擎盖下的工作方式。 一些需要阅读的主题包括…

  • Important registers and how they work

    重要寄存器及其工作方式
  • Difference between caller-save and callee-save

    呼叫者保存和被呼叫者保存之间的区别
  • How interrupts work

    中断如何工作
  • A basic understanding of instruction pipelines

    对指令流水线的基本了解
  • Caches, TLBs, and how virtual memory is implemented

    缓存,TLB以及如何实现虚拟内存
  • Various types of memory (ROM vs RAM, DDR, EEPROM, Flash, etc)

    各种类型的存储器(ROM与RAM,DDR,EEPROM,闪存等)
  • Memory padding (instructs & classes)

    内存填充(指示和类)
  • What happens when you boot a system

    引导系统时会发生什么
操作系统 (Operating Systems)

Depending on the company and the role, operating systems can be a very important topic. You won’t be asked to implement any of these, but know how things work at a conceptual level!

取决于公司和角色,操作系统可能是一个非常重要的主题。 您不会被要求实现其中任何一个,但是知道事情在概念上是如何工作的!

  • Process vs. Thread

    进程与线程
  • How multi-threading works

    多线程如何工作
  • Real-Time Operating Systems vs traditional OS

    实时操作系统与传统操作系统
  • Task scheduling (FIFO, Round Robin, Priority-based)

    任务调度(FIFO,循环调度,基于优先级)
  • How semaphores & mutexes protect data

    信号灯和互斥锁如何保护数据
  • Priority inversion, priority inheritance, spinlocks, and deadlocks

    优先级倒置,优先级继承,自旋锁和死锁
  • What makes a function ‘reentrant’?

    是什么使函数“可重入”?
  • Critical sections

    关键部分
  • Priority levels in microcontrollers (EL0 — EL3)

    微控制器中的优先级(EL0-EL3)
通讯协议 (Communication Protocols)

Know the benefits and tradeoffs of using the following protocols:

了解使用以下协议的好处和折衷方法:

  • UART

    串口
  • SPI

    SPI
  • I2C

    I2C

Based on your previous experiences, the role you’re applying for, and the company, you may be asked about others as well. Typically, companies don’t expect you to know about these specific protocols and will train you on the job. But having a basic understanding can always help wow the interviewer!

根据您以前的经验,所申请的职位以及公司,可能还会询问您有关其他人的信息。 通常,公司不希望您了解这些特定的协议,而是会培训您的工作。 但是有一个基本的了解总是可以使面试官赞叹不已!

  • Automotive: CAN, LIN

    汽车: CAN,LIN

  • Wireless: 3G, 4G LTE, basics of 5G, 802.11(Wifi), Bluetooth

    无线: 3G,4G LTE,5G基础知识,802.11(Wifi),蓝牙

  • Networking: HTTP, TCP/UDP, IP, 802.11(Wifi), Ethernet

    网络: HTTP,TCP / UDP,IP,802.11(Wifi),以太网

硬件基础 (Hardware Fundamentals)

Hardware isn’t tested a whole lot for embedded software, but depending on the role, your level of interaction may vary. Check the job descriptions and talk to people who work there for a better idea!

硬件并未针对嵌入式软件进行大量测试,但是取决于角色,您的交互级别可能会有所不同。 查看工作说明,并与在那里工作的人交谈,以获得更好的主意!

  • Watchdog timers

    看门狗定时器
  • Timers in general

    计时器一般
  • Details about any peripherals you may have used in your projects (accelerometers, any sensors, LiDAR, motors, etc)

    有关您在项目中可能使用过的任何外围设备的详细信息(加速度计,任何传感器,LiDAR,电机等)

练习 (Practicing)

Practice is key — there’s really no way around that. Make sure to dedicate at least 2 hours a day for interview prep, not including applying for jobs and reaching out to recruiters.

实践是关键 -真的没有办法解决。 确保每天至少安排 2个小时进行面试准备,这不包括申请工作和联系招聘人员。

While practicing on LeetCode, comment your code. Explain your algorithm and the runtime complexities. Every day before you begin coding, review the problems you worked on the previous day. At the end of the week, review every problem you worked on that week. This’ll help you remember the algorithms better and bit by bit, you’ll become a pro at pattern matching.

在使用LeetCode进行练习时,请注释您的代码。 解释您的算法和运行时的复杂性。 在开始编码之前,每天都要检查一下前一天遇到的问题。 在一周结束时,请查看您在该周工作的所有问题。 这将帮助您更好地记忆算法,并逐渐成为模式匹配专家。

Embedded interviews tend to be more conceptual than your typical software interviews, due to the nature of some of the topics tested. For these areas, I maintained a Google doc of all the questions that I might be asked, but also all their answers. I also included a link to where I can read more information to be helpful. It helped me stay organized and review faster.

由于某些测试主题的性质,嵌入式访谈比一般的软件访谈更具概念性。 对于这些领域,我维护了一个Google文档,其中包含可能会问到我的所有问题以及所有答案。 我还提供了指向我可以阅读更多信息的链接,以提供帮助。 它帮助我保持井井有条,并加快了审核速度。

A lot of people have asked me for the link to the Google doc, so here it is: Embedded Interview Questions

很多人要求我提供Google文档的链接,所以这里是: 嵌入式面试问题

在面试时 (At the interview)

You made it — great job!

您做到了–很棒!

Take a deep breath. It’s time to put all your hard work to good use. Usually, you and the interviewer will go through a few conceptual questions. You will also discuss your previous experiences and projects. Make sure you’re able to answer questions about your contributions and various challenges you faced in detail.

深吸一口气。 是时候充分利用所有辛勤工作了。 通常,您和面试官会遇到一些概念性问题。 您还将讨论您以前的经验和项目。 确保您能够回答有关自己的贡献以及详细面临的各种挑战的问题。

If this is an interview that’s happening remotely, you’ll probably be asked to code in a shared document. Have some paper ready to jot down important points and diagrams. If it helps, you can also have some notes that you can refer to during the interview. I always keep a sheet of basic algorithmic complexities handy.

如果这是一次远程采访,则可能会要求您在共享文档中进行编码。 准备一些文件来记下要点和图表。 如果有帮助,您还可以在面试中参考一些笔记。 我总是随时准备一张基本的算法复杂性表。

Check the timezones. Double check them. Don’t forget to use headphones. Be in a quiet environment so there are no disturbances. Communication issues are only going to make the interview more difficult.

检查时区。 请仔细检查。 不要忘记使用耳机。 请在安静的环境中进行操作。 沟通问题只会使面试更加困难。

当您收到问题时 (When you get the question)

Never start coding right away. As important as arriving at the right solution is, the interviewer is really looking at your approach.

切勿立即开始编码。 与找到正确的解决方案一样重要,面试官实际上正在研究您的方法。

Take a second and repeat the question back to the interviewer, just to make sure you both are on the same page. And if there are any misunderstandings, the interviewer can always repeat and clarify any doubts.

花一秒钟,然后将问题重复给面试官,以确保您都在同一页面上。 并且,如果有任何误解,面试官可以随时重复并澄清任何疑问。

Next, understand the scope of the problem

接下来,了解问题的范围

  • How big is the input?

    输入多少?
  • Is it sorted?

    排序了吗?
  • Is there a certain time or memory complexity that you should meet?

    您是否应该满足一定的时间或内存复杂性?
  • Are there duplicates? Negative values? Empty values?

    有重复吗? 负值? 空值?
  • Do you have to perform error checking?

    您必须执行错误检查吗?

Then, walk through your algorithm. Start off with the most basic, brute-force approach. It can be super inefficient and mention that you’re using this as a starting point. Explain the time and memory complexities and why it’s a poor solution.

然后,遍历您的算法。 从最基本的暴力方法开始。 这可能是超级低效的,并提到您将其用作起点。 解释时间和内存的复杂性,以及为什么它不是一个好的解决方案。

From there, it’s time to optimize. Generally look for places where you might be storing unnecessary amounts of data or repeating sections of code. For embedded applications, memory is important! Instead of using an array or vector, consider using a bitset. If you’re just dealing with values between 0 and 31, toggle bits in an integer! This is where bit manipulation comes in handy.

从那里开始,是时候进行优化了。 通常,寻找可能存储不必要数量的数据或重复代码段的地方。 对于嵌入式应用程序,内存很重要! 除了使用数组或向量,还可以考虑使用位集。 如果您只处理0到31之间的值,请切换整数! 这是位操纵派上用场的地方。

It’s important to think out loud while you’re brainstorming. If you’re stuck or heading in the wrong direction, the interviewer can help bring you back on track. Once you’ve both agreed on a solution, then it’s finally time to start coding.

在头脑风暴时大声思考很重要。 如果您陷入困境或朝错误的方向前进,面试官可以帮助您重回正轨。 双方就解决方案达成协议后,终于可以开始编码了。

编写代码 (Writing code)

Reading others’ code isn’t always the most enjoyable thing. Make the job a little easier for your interviewer by using good style. That doesn’t mean that you have to put down every semicolon or bracket, but indent well and use meaningful variable names. Try to write neatly and use the whiteboard space well.

阅读别人的代码并不总是最有趣的事情。 通过使用良好的风格,使您的面试官的工作更轻松一些。 这并不意味着您必须放下每个分号或方括号,而是要缩进并使用有意义的变量名。 尝试书写整齐,并充分利用白板空间。

While you’re writing code, keep checking against the algorithm you’ve devised. Similar to the brainstorming phase, think out loud. Provide verbal comments to your code. At each step, explain what you’re checking, what you hope to achieve, and any design decisions you make.

在编写代码时,请继续检查所设计的算法。 与集思广益阶段相似,请大声思考 。 为您的代码提供语言注释。 在每个步骤中,说明您要检查的内容,希望实现的内容以及您做出的任何设计决策。

After you’re done writing code, don’t say you’re done yet. Take a step back and analyze your code from a high-level perspective. Check the inputs, the outputs, and your logic for any bugs. Be sure to spot any off-by-one errors! Then, walk through the code with a few test cases. If there are any issues that you see, review and rework your code as necessary.

完成代码编写后,不要说尚未完成。 退后一步,从高角度分析代码。 检查输入,输出和您的逻辑是否有错误。 确保发现任何一一错误! 然后,通过一些测试用例遍历代码。 如果发现任何问题,请根据需要检查并重新编写代码。

Depending on the interview, you might have one big question or a couple smaller ones. But once the interviewer has agreed with your solution, there is a chance he or she might extend it different parameters. You probably won’t have to rework the code, but you might have to discuss how to change parts of your approach. Like I mentioned before, memory is important in embedded applications. So a common follow-up question is usually about further memory optimization.

根据访谈的不同,您可能有一个大问题,也可能有几个小问题。 但是,一旦访问员同意您的解决方案,他或她就有可能将其扩展为不同的参数。 您可能不必重新编写代码,但是您可能必须讨论如何更改部分方法。 如前所述,内存在嵌入式应用程序中很重要。 因此,常见的后续问题通常是关于进一步的内存优化。

最后的想法 (Final Thoughts)

The nature of embedded software interviews is heavily dependent on the company and the work they prioritize. Companies working on a specific communication protocol will look for different things than a company developing a real-time operating system or a company working on an IoT product.

嵌入式软件采访的性质在很大程度上取决于公司及其优先工作。 与开发实时操作系统的公司或从事IoT产品的公司相比,从事特定通信协议的公司所寻求的东西将有所不同。

I wanted to use this article as a place to share some common themes in the interviews I’ve had, but this is by no means comprehensive. This is intended to be used as a starting point. But please reach out to current employees and check Glassdoor for more company-specific interview tips.

我想将本文用作在我所接受的访谈中分享一些共同主题的地方,但这绝不是全面的。 这旨在用作起点。 但是,请与现有员工联系,并查看Glassdoor了解更多公司特定的面试技巧。

Interviews are tough, but preparing well and working hard now can help you land a job you love :)

面试很难,但是现在做好准备并努力工作可以帮助您找到自己喜欢的工作:)

I hope this article helped, and wish you the best of luck!

希望本文对您有所帮助,并祝您好运!

If you enjoyed this article, please don’t forget to leave a ?. You can also follow me on Twitter or Quora:)

如果您喜欢这篇文章,请不要忘记留下?。 您也可以在T witter或Q uora上关注我:)

翻译自: https://www.freecodecamp.org/news/how-to-landing-your-embedded-software-dream-job-4ff9674bf1c4/

自学嵌入式能找到工作吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值