20210817阳光电源的嵌入式校招
–一面 没什么好记录的,好像挺看重项目经历的,主要是问我简历上的项目,但是简历上的项目不是嵌入式的,好像面试管不怎么感兴趣,没聊多久就没话说了,只大概给他介绍了我的项目是做什么的,大概背景是什么样种种。 另外面试官提了一下,问我在校成绩排名怎么样。 无他了,估计凉了吧,没有相关项目面试确实太尴尬了。
-------下面是面试之前准备的东西,结果一个基础知识都没有问 0.0 –strcpy和memcpy区别? (1)复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。 (2)复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。 (3)用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
–嵌入式系统是指以应用为中心,以计算机技术为基础,软件、硬件可裁剪,适用应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
–嵌入式系统的特点: (1)专用,软硬件可裁剪、可配置。(2)低功耗,高可靠性,高性能。(3)软件代码短小精悍。(4)实时性、交互性。(5)有专门的开发工具和开发环境。(6)对开发设计人员要求高。
–单片机:单片机是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
–Arm处理器的优良性能: (1)体积小、低功耗、低成本、高性能。(2)支持thumb(16位)和arm(32位)双指令集。(3)大量使用寄存器,指令执行的速度更快。(4)大多数数据操作在寄存器内完成。
–Arm基本数据类型:arm采用的是32位架构,其基本数据类型有4种。 (1)Byte:字节,8位 (2)Halfword:半字,16位 (3)Word:字,32位 (4) DoubleWord:两字。
–Arm工作状态 (1) Thumb状态:处理16位,半字对齐 (2)arm状态:处理32位,字对齐
–Arm体系结构的存储格式:大端格式、小端格式
–Cortex处理器的比较 Cortex-a系列:最广泛的应用,性能最高,最具功能效率的处理器。主要用于手机、多媒体等各种消费娱乐和无线产品。 Cortex-r系列:优化时间方面,可以实时控制。主要用于具有严格的实时响应限制的深层嵌入式实时系统。(硬实时,在军事上使用较多) Cortex-m系列:对价格敏感,具有高系统效能需求的嵌入式应用设计。如智能仪器仪表、汽车和工业控制系统、家用电器、传感器、医疗器械等。
–交叉编译 gcc编译,可以理解为“本地编译”,直接将源文件编译出来的程序,编译出来的程序可以在当前平台下进行运行。而所谓的交叉编译器正好与本地编译相对应,在当前编译平台下,编译出来的程序能运行在体系结构不同的另一种目标平台上,但是编译平台本身却不能运行该程序。
– 为什么要交叉编译(交叉编译的主要原因): (1)速度:目标平台的运行速度往往比主机慢得多,许多专用的嵌入式硬件被设计为低成本和低功耗,没有太高的性能 (2)能力:整个编译过程是非常消耗资源的,嵌入式系统往往没有足够的内存或磁盘空间 (3)可用性:即使目标平台资源很充足,可以本地编译,但是第一个在目标平台上运行的本地编译器总需要通过交叉编译获得 (4)灵活性:一个完整的Linux编译环境需要很多支持包,交叉编译使我们不需要花时间将各种支持包移植到目标板上
–线程同步 问题一:线程同步有几种方法? 线程同步方式:互斥量、读写锁、条件变量、自旋锁。 问题二:什么是死锁? 所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 问题三:死锁的四种产生条件是什么? 虽然进程在运行过程中,可能发生死锁,但死锁的发生必须具备一定的条件,死锁的发生必须具有以下四个必要条件。 (1)互斥条件 指进程对所分配的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用完释放。 (2)请求和保持条件 只进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。 (3)不剥夺条件 只进程已获得的资源,在未使用之前,不能被剥夺,只能在使用完时由自己释放。 (4)环路等待条件 只在发生死锁时,必然在一个进程 – 资源的环形链,即进程集合{P0, P1, P2 …, Pn} 中的 P0 正在等待一个 P1 占用的资源;P1 正在等待 P2 占用的资源,…,Pn正在等待已被 P0 占用的资源。
–为什么连接的时候是三次握手,关闭的时候却是四次握手? 答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
–为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态? 答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
|