学习推荐书籍:
- 《C 和指针》,指针是 C 语言的灵魂,这本书指针部分讲的还可以,更深层的知识可以网上找技术博客看;
- 《王道程序员求职宝典》,这里边会有很多笔试或者面试中语言本身的基础但又很容易出错的知识点,非常推荐,平时项目中有些就会碰到,看这本书的时候就会更加理解;
- 《剑指 Offer》,笔试刷题用到,与 LeetCode 结合刷题;
- 《大话数据结构》,数据结构入门推荐,C 语言版本,更好理解但不利于编程,需要造轮子;
- 《程序是怎样跑起来的》、《计算机是怎样跑起来的》、《网络是怎样连接的》,全面而整体理解程序、计算机、网络的基本组成,运行机理;
- 《Unix 网络编程》、《Unix 环境高级编程》,适合当参考书,需要学习的时候翻看一下;
- 《ARM 体系结构与编程》-杜春雷,其中的 ARM 中断和异常部分我是看的最多的,还有寄存器部分;
- 《Linux 内核完全注释》-赵炯,麻雀虽小五脏俱全;
- 《Linux 设备驱动开发详解:基于 Linux4.0 内核》,驱动参考书籍;
- 《C/C++代码调试的艺术》,常见代码调试方法,面试中目前很多都问了,内存泄漏、内存溢出相关问题;
- 《程序员的自我修养》,特别是内存管理和预处理、编译、链接的过程,面试经常问;
- 【正点原子】I.MX6U 嵌入式 Linux 驱动开发指南 V1.6.pdf;
- 野火 PDF《STM32 HAL 库开发实战指南》、《FreeRTOS 内核实现与应用开发实战指南》;
- 韦东山老师官方文档《嵌入式 Linux 应用开发完全手册 V4.0_韦东山全系列视频文档-IMX6ULL 开发板》
中国商飞、乐鑫、联发科、中兴、浙江大华、大疆、海康威视、商汤、汇顶、华为、芯原、CVTE、卓胜微、经纬恒润、中电 10 所等公司
- static 和 const 区别
- 布尔型,int,float 怎么和 0 比较
- 进程和线程的区别
- 任务调度方法有哪些
- 各种排序的特点
- μC/OS-III 和之前版本区别
- RS232 和 RS485 区别
- LUA 语言和 C 语言区别
- 协议栈
- 线程进程区别
- linux 内核进程间不共享内存,信号量存在哪里
- 怎么对 malloc 进行第二层封装优化
- 函数调用过程中那些用到了堆栈
- flash 不能够怎么办
- 几个函数占内存特别大怎么办
- 函数调用联合体怎么进入不同的功能
- 说几个熟悉的 GDB 指令
- 程序崩了用 GDB 怎么查看地址
- μC/OS-III 的调度点
- μC/OS-III 的任务优先级安排
- 中断里为什么不能使用信号量
- SPI 总线最大速率,用在哪里
- I2C 总线速率及通信过程
- 电源线的布线注意事项
- 怎么减少电源纹波
- 怎么测量电源纹波
- 电容的分类和选用
- 三极管和 MOS 管区别
- 指针常量和常量指针
- static 的作用
- 与服务器通信协议
- STM32 内存映射表
- STM32 进入硬中断原因及怎么处理
- 结构体怎么设置 n 字节对齐
- ARM 和 FPGA 主要都完成哪些任务
- 温湿度传感器用的什么
- 单线制怎么传输数据
- μCOS 最多设置多少个优先级,
- μCOS 有哪些通信机制
- ARM 的工作模式
- 怎么存储大链接数据,采用什么数据结构
- 怎么优化堆和栈
- ARM 工作模式介绍
- 协议栈处理
- 系统任务管理
- 中断处理程序注意事项
- 虚拟内存物理内存映射
- 实时操作系统的性能指标
- 优先级反转问题
- SPI 从模式 DMA 传输
- 内存分配
- ARM 的模式介绍
- 优先级反转问题
- 用宏定义表示一星期的毫秒数
- 定义一个结构体,里面包括 char,short,int,占用空间
- 移位操作
- ARM 体系结构介绍
- 项目中的通信及同步
- 对共享资源的保护方式
- 实时系统和通用系统的特点
- 衡量实时系统的性能指标
- 中断要注意的事项
- 中断速度过频怎么办
- 高噪声下微小信号采集系统设计
- 基于流水线的延迟汇编操作
- ARM 体系结构介绍
- 说一个你比较熟悉的总线:i2c
- 画 I2C 的时序图
- I2C 空闲时两线的状态
- I2C 怎么暂停传输
- I2C 的死锁
- I2C 的总线仲裁
- 如何使用内核对象如信号量进行通信和同步。
- 对共享资源的上锁
- 自旋锁的特点和内部实现
总结: 自我介绍+项目介绍+项目框图。这个是基本套路,所有上面牵扯到的内容必须整理好。
项目细节+项目中的问题及解决。这个是一般附加的内容,也必须整理好。
各种基础知识:C 语言等等这些是必备的就不再说。
一定要有自己的亮点:你可以所有基础都一般,但是一定要有一个方面是你的亮点,或者理解的比较深。这样你就可以在面试过程中往那个方面去靠,找到自己的主场。比如说,我的亮点就是微机原理和 ARM 体系结构部分,再加上实时系统。所以我后面面试罗列的很多问题都是相关的问题,这也是我面试中一直引导的原因。
并且,你可以在项目介绍或者框图介绍中想办法加入相关内容,直接突出自己的亮点。不至于让面试官自己去挖掘发现,很多情况下,面试官对那方面不感兴趣的话,就基本不会问到,那你的面试结果就会很普通。对于这点,我的一点办法可能没有普遍性,不再举例。
《C 与指针》 《王道程序员面试宝典》
- 基础的知识还可以看《深入理解计算机系统》。这本是别人推荐的,太厚了,我基本没看。。。如果你有时间可以看一看。
- 编程能力可以刷一刷《剑指 offer》,我的书买来就没拆封。虽然说嵌入式对编程能力要求不高,但是你掌握比较好的话也能成为你的亮点。
- 数据结构可以看《大话数据机构》。我只简单看了几部分。
- 操作系统及内核可以从《嵌入式实时操作系统 μC/OS-III》开始简单理解,这本书我是仔细看了的,从《linux 内核设计与实现》去深入。
准备阶段:C++的学习可以分为,C++基础、数据结构与算法、计算机网络和操作系统。另外,需要特别指出来的就是编程能力(如果要归类的话,应该是属于 C++基础和数据结构和算法的综合)。个人认为最为重要的就是编程能力。可以通过刷题(剑指 offer、LeetCode)来提高编程能力。下面就上面的 4 大块罗列一些书籍和资料,需要指出的是,这些书籍和资料有点多,有时间有能力全部吃透,当然最好,但是如果时间紧张的话,我还是建议大家有重点地看。另外建议大家尽早准备,可以在提前批抢占先机,在提前批最大的一个感受就是,难度并不大,最大的问题就是没得准备好,需要时间准备。
C++基础:
(1)C++ primer
这本书将的比较全面,并且比较基础,是看其他书籍的基础。
学习建议:看书的过程中要动手,把课后习题过一遍,不动手的话,是根本没有办法掌握的。
(2)Effective C++
正如这本书的封面所写的:改善程序与设计的 55 个具体做法。这本书绝对经典
(3)深入探索 C++对象模型
C++的底层实现
(4)STL 源码剖析
STL 的底层实现,建议学完数据结构和算法之后再看
面试过程中,如果要问 C++基础的话,常常会问 C++的底层实现和 C++编程当中的注意事项,这才是 C++基础中的重点。因此,Effective C++、深入探索 C++对象模型、STL 源码剖析绝对值得一看(可以有重点地看),但是看看这些书的基础是 C++ primer,基础必须打扎实。
数据结构和算法:
(1)浙大的网易公开课:
http://www.icourse163.org/learn/ZJU-93001?tid=1002019005#/learn/announce
个人认为要要比大话数据结构强很多,入门强推。并且在看视频学习的同时,建议把课件上的代码敲一遍,还有习题也是要做的。
(2)算法导论
难度比较大,个人建议还是有一定数据结构和算法基础之后再看,并且可以选一部分看。我建议可以看一下贪心算法、动态规划和红黑树,特别是红黑树。
(3)剑指 offer
强强强推,编程能力的提高就靠它了,面试过程中的手写代码好多都是这本书的内容,建议大家,早刷,有时间的话,多刷几遍。
计算机网络:
计算机网络(谢希仁)
其他的书籍:图解 TCP/IP、TCP/IP 详解、图解 HTTP
本人只看了计算机网络一本书,计算机网络这本书讲 TCP/IP 这部分还可以,但是 http 这部分讲的并不是很详细,所以建议大家可以看一下其他的书籍做一下补充。
**作系统:
(1)北京大学的《**作系统原理》
http://www.chinesemooc.org/kvideo.php?do=course_progress&kvideoid=4747&classesid=1971
(2)现代操作系统
可以配合上面的视频一起看
(3)深入理解计算机系统
这本书强推,有能力的同学可以全看,但是如果时间紧张的话,可以有重点的看。看起来可能有些吃力,大家要有个心理准备。
其他:
其他比较重要的部分还有:linux 系统相关、网络编程相关、数据库相关,设计模式相关,脚本语言相关,由于本人对这些涉猎很少,也就不敢班门弄斧了,这些内容大家可以根据自己的实际情况学习。
面试阶段:
关于招聘信息:
(1)牛客网(2)校园招聘网(3)各种公众号
关于是否参加提前批:
非常建议大家参加提前批,不要因为担心提前批不过会影响校招。原因有以下几个方面:
(1)正如那些公司宣传的,参加提前批等于多了一次机会,提前批也没有想象中那么难,很有可能就会被录取
(2)大多公司的提前批提供的 offer 都是 sp,薪资的话,大家懂得,但是校招的话,这样的机会还是比较少的。
(3)提前批相比于秋招的话,难度略低,所以不要担心实力不够,丧失信心。
(4)面试中是有一些套路、技巧和一些要避讳的事情的,因此,可能把提前批当做是一种练习,给自己犯错的机会,在秋招中避免犯相同的错误,把握住机会。
(5)百度的提前批是分部门的,不会影响校招,并且可以同时面试多个部门,是个很好的练习的机会。
(6)提前批进不去阿里,校招基本上没得机会能够进去阿里。
关于面试阶段的学习:
(1)做总结,记笔记。面试之前,看面经做笔记,面试之后,查缺补漏做笔记,
(2)多和自己的小伙伴谈论,交换信息,这是一个很重要的成长的过程。
关于面试的一些建议:
(1)态度要谦逊
(2)项目介绍过程中要流利,不然面试官就会认为项目不是你做的。可以为每一个项目准备一套说辞。对每个项目也要足够熟悉,不能被项目官问倒了。
(3)问你有什么优缺点:优点避免说自己勤奋好学
(4)问你项目中是怎么分工的:这时候考察是你的团队合作能力,有些答案是很避讳的,即使这个项目真的是你负责了大部分的工作。
(5)问你有什么问题想问的:最好能够体现出你的上进心,是很好的一个加分项
(6)面试过程中遇到不会的问题,不会的题目很正常,要调整好心态,不要慌,积极地思考。
技术栈 C 语言基础、单片机开发、RTOS 原理,计算机网络 面试经历 tcp 和 udp,sizeof 和 strlen,嵌入式操作系统的知识和应用,内存泄露的原理,内联函数的原理和应用 ; hr,工作地点,成绩保研考研,其他经历,支教社团工作都可以。 简单问问项目,项目介绍,时间同步算法(路由机制带来时间的随机性如何避免?以后想一想这个问题); hr 问题,有什么被误解的事情? 帮了朋友最大的忙,你的收获是什么? 如果上级给了你一个很难完成的任务,你怎么办?
技术栈
C 语言基础、单片机开发、操作系统,计算机网络
面试经历
流水线面试,项目阐述和部分问题,函数传参的入栈顺序,大小端的概念以及网络传输数据的格式,三次握手和四次挥手的过程,进程的基本状态,strlen 和 sizeof 的区别,指针占空间的大小;
C 语言参数入栈顺序为从右到左,动态参数数量;
大端存储模式:数据的低位保存在内存的高地址中,数据的高位,保存在内存的低地址中,和我们平时的阅读习惯一致;小端存储模式:数据的低位保存在内存的低地址中,数据的高位,保存在内存的高地址中。网络传输采用了大端模式。
sizeof 是算符,strlen 是函数,所以 sizeof 在编译时已经计算好了,把数组名和指针传入 sizeof 会得到不一样的结果,当传入指针时候会计算指针的大小,传入数组名的时候会计算数组的占用的空间,strlen 是计算字符串的长度,数到“\0”结束。
视频二面,看项目聊实习,问了一下本科的学习情况,聊一下兴趣,对所做的东西的总结,针对 FreeRTOS 问了调度器的运行机制,调度器中相同优先级的任务在排队时候如何调度,内存管理的实现。
技术栈
C 语言基础,Linux 编程,嵌入式编程,编译原理;
面试经历
笔试体验稀烂,猿圈科技的笔试提交的答案在页面消失。项目问的非常细节,问 linux 的内容,不问 RTOS,问试卷出错的问题,BSS 和 Data 段,bootloader 做什么,考察知识范围,设计系统的思路,如何查找问题,为什么对网络和协议栈感兴趣,是否看过编译的结果和 BSS、data 和 text 数据如何分配,如何手动分配存储空间减少内存消耗,内存不够的时候如何解决