其他分享
首页 > 其他分享> > 【CVTE嵌入式面试汇总】CVTE嵌入式面试经验贴

【CVTE嵌入式面试汇总】CVTE嵌入式面试经验贴

作者:互联网

我是做嵌入式开发的,主要是linux,来公司后也有开发android,所以一个我的建议是在学习c的同时也需要把android相关的东西也看看,这样的话有更高的机会能够进入cvte。
第一次技术面问的问题:
1、项目几个人,自己的工作。
2、项目遇到的难题,如何解决的。
3、觉得项目哪些地方还有待改进。
4、static的作用。
5、常见的文件系统有哪些。
6、I2C有几根线,分别是什么
7、三次握手四次挥手分别是什么。
8、volatile的作用,可以和const公用吗。
9、中断函数的注意事项。
10.多态是什么。
11、二叉树的遍历方式。
12、如何插入链表。

第二次技术面问的问题:
1、我看你做了内核移植,交叉编译链是什么,那个公司的,什么版本?

答:免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。作为学习,答到以上三个就行。

2、能说一下具体操作系统移植的过程么?

答:内核启动流程:uboot->kernel->rootfs uboot基本都不会做修改,直接拿来烧在板上即可,uboot主要在调试模式修改一些环境变量,包括tftp的下载地址(serverip、ipaddr),包括bootcmd传给内核的参数,传给根文件系统的参数bootargs,并熟悉相应的命令使用(nand scrub、set pri、boot);内核源码编译,内核参考开发板的参数进行修改(开发板和母版的参数差异),make menuconfig进行模块选择,ulmage的制作;然后内核利用bootargs参数进行根文件系统启动,再就是根文件目录树的创建及其基本文件的创建。

(以上基本就能应付,很少有面试官深入,因为应届毕业生做arm移植的太少了=-=,更深的问题:为什么内核初始化地址是0x30008000,ulmage和zlmage的差别,make menuconfig添加模块的依据,)

3、移植遇到比较困难的问题

我说我当时移植QT的库时 ,发现版子上分区内存不够,当时也不知道怎么解决 就去学习分区挂载的知识,用df查看分区,发现有分区但是没挂载,导致空间不够,但是又不想在系统启动每次手动去挂载,于是就研究根文件启动init的过程,在配置文件inittab添加挂载命令,系统就会自启动并挂载分区了。

4、接着问,如果开发板上只有十兆空间,但是你的移植的QT库有二十兆,你会怎么做?

我说的扩容,他说除了扩容呢,我接着说移植的文件中有一个stripped属性,用strip命令去除库文件中的符号表,会小很多,他说QT编译一般会做这个工作,还有别的方法么…我就答不上来了。

5、会shell脚本么

这个自己能看懂shell脚本,大概知道怎么写,以前项目压测的时候有写过简单的shell脚本

6、字符设备的编写流程

主要答probe函数的实现,platform总线的思想

设备号分配------->cdev结构体的初始化(绑定fops)------->cdev结构体的注册

7、linux调度算法有哪些

SCHED_OTHER 分时调度策略,

SCHED_FIFO实时调度策略,先到先服务

SCHED_RR实时调度策略,时间片轮转

8、多线程为什么要设置属性,为什么要设置栈大小

我答的不够用所以要分配更多的空间…后来百度了一下,linux线程默认分配8M的调用栈,那么太多的线程会导致栈溢出的问题,所以可以调用pthread_attr_setstack自动分配合理的大小防止栈溢出。当然线程还有其他的一些属性。

9、进程通信有哪些,如果我需要传输大量数据使用那种方式效率最高。

管道,命名管道,消息队列,共享内存,信号量,socket unix域,数据很大的时候,用共享内存是最好的,不用从用户态到内核态的频繁切换和拷贝数据,直接从内存中读取就可以,速度最快,但是共享内存开辟空间就必须要使用同步机制,这是他的缺点。

10、为什么选择sqlite

轻量级、跨平台。

其实基本都是问的我c语言的问题,android那个时候我也不会,后来进公司都是自学的。目前正在秋招。如果大家有需要我可以内推:
内推码:i_yangjinchai@cvte.com
网申地址: http://campus.cvte.com/

大家一定记得填写内推码,这样的面试官看见是公司内部人推送的可能会更多的考虑一下。

标签:编译,分区,嵌入式,面试,内核,挂载,CVTE,cvte,移植
来源: https://blog.csdn.net/qq_45125250/article/details/120112288