笔者入职3月有余,今天把以前求职的资料整理了,获取方式在文末。当然,笔者在研究生期间以及研究生之前都是做嵌入式的,主要以Linux为主,很久以前也搞过单片机,主要是STM32,因此笔者的求职主要以嵌入式为主,主要投递的简历公司有:中兴、华为、联发科、紫光展锐、大华、联想等,笔者是重庆人,考虑了地域问题,只选择了成渝地区的一些与嵌入式相关的公司。

笔者作为一名初入职场的菜鸟,也没啥工作经验之谈,但是作为一个过来人,我想从事嵌入式的一些工作岗位,供大家参考。嵌入式产品从技术上讲,分为两大类:一类简单的,没有操作系统支持的;一类复杂的,有操作系统的。就目前发展方向看,后一种是趋势。前一种从程序实现上可分为3层:硬件层、驱动层、应用层;后一种分为4层:硬件层、驱动层、系统层、应用层。所以,嵌入式的开发大致需要这么从下到上四类工程师:嵌入式硬件开发、嵌入式驱动开发、嵌入式系统开发、嵌入式软件开发。

1.嵌入式硬件开发
这是硬件工程师来做,一般出身为自动化,电子,通信等专业,要求熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力,熟悉硬件开发模式和设计模式,熟悉各种芯片及外围设备,熟悉8位16位32位处理器嵌入式硬件平台开发。有的要求有FPGA的开发经验,精通常用的硬件设计工具:Protel/PADS(PowerPCB)/Cadence/ OrCad。一般要有4~8层高速PCB设计经验。由于本人不是做硬件的,对这一块的不熟悉,所以不敢妄言。

2.嵌入式驱动开发
这个可以硬件工程师来做,也可以软件工程师来做,主要还是取决于设备。目前驱动开发,除非是简单的设备驱动,实际上很多时候都是移植,所以更多的是需要掌握目标平台的硬件和系统特性。所以至少得掌握一些操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM/MIPS/PowerPC架构。具有单片机、某种或多种32位嵌入式处理器的移植开发能力,熟悉bootloader过程,具有扎实的硬件知识,理解硬件原理图,能独立完成相关硬件驱动调试,能够根据芯片手册编写软件驱动程序。如果涉及到网络设备,或许还要掌握很多高层的网络协议的原理。个人感觉这一块虽然大部分不是很难,但却是极为重要的。当然如果要在这一层次提供对上层的多线程支持,某些驱动也是很难写的。

我这里主要指Linux操作系统的驱动开发。公司每时每刻都要推出新产品,每一个新产品出来了,要能被操作系统所使用,是必须写驱动程序的。写驱动程序就必须掌握操作系统的内部工作原理,还涉及到少量硬件知识,难度较大,所以这方面的人很难找。想成为高手,也可从驱动程序方面获得突破。

3.嵌入式系统开发
这个没听说硬件工程师来做的。做这块,熟悉操作系统的原理是必不可少的,比如内存管理,比如线程调度,比如文件系统等等;还要精通处理器体系结构、指令集、寻址方式、调试、汇编和混合编程等方面的内容;熟悉操作系统启动流程。

对于linux,要熟悉Linux配置文件的修改,掌握内核裁减、内核移植、交叉编译、内核调试、启动程序Bootloader编写、根文件系统制作和集成部署Linux系统等整个流程。这一块要是真写起来,困难程度那是相当恐怖的,好在大多都是移植,很少听说有公司要去开发个操作系统的,没Google的实力啊。

4.嵌入式软件开发
这个嘛,没有操作系统的话,程序一般不会特别复杂,如果有操作系统的支持,这个要求就是熟悉系统的API,精通C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识、数据结构的基础内容;掌握面向对象编程的基本思想,以及C++语言的基础内容。

对于Linux,需要精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库;熟悉常用的图形库的编程,如QT、GTK、miniGUI、fltk、nano-x等,掌握各种应用层的网络协议使用,以及各种音视频技术等。

总的来说,嵌入式行业工作还不错,岗位也多,因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水 平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,发展太快,很多软硬件技术出现时间不长或正在出现(如ARM处理器、嵌入式操作系统、无线通信协议等),掌握这些新技术的人当然很找。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软 件,另外需要有经验的人进行指导开发流程。

最后我想对搞嵌入式的朋友叮嘱一句:多实践,多思考,不达目的不罢休!

共勉:

Stay Hungry. Stay Foolish!



本资料大体涵盖以下内容

  • C/C++ 基础知识
  • 数据结构
  • 网络
  • 操作系统
  • 数据库
  • 笔试题(算法)

《求职》C_C++求职资料汇总

推荐书籍

语言

  • 《C++ Primer》
  • 《Effective C++》
  • 《More Effective C++》
  • 《深度探索 C++ 对象模型》
  • 《深入理解 C++11》
  • 《STL 源码剖析》
  • 《高质量 C++C 编程指南》
  • 《C语言深度剖析》
  • 《C陷阱与缺陷》
  • 《C专家编程》
  • 《微软C编程精粹》

算法

  • 《剑指 Offer》
  • 《编程珠玑》
  • 《程序员面试宝典》

系统

  • 《深入理解计算机系统》
  • 《Unix 环境高级编程》

网络

  • 《Unix 网络编程》
  • 《TCP/IP 详解》

其他

  • 《程序员的自我修养》

推荐复习刷题网站

推荐面试题目经验

牛客网

知乎

Segmentfault

Leetcode Problems

剑指 Offer

程序员面试金典



资料获取

1.识别并关注公众号[嵌入式实验楼]
2.在公众号回复关键词[interview]领取资料

《求职》C_C++求职资料汇总



欢迎访问我的网站:

BruceOu的哔哩哔哩
BruceOu的主页
BruceOu的博客
BruceOu的CSDN博客
BruceOu的简书

相关文章: