小米校招面试题

打个广告提一下我新写的秋招面试指南目录如下有需要的文末加微信
在这里插入图片描述电话面试过程
面试官上来先来了一段他自己的自我介绍
1、请进行一个简单的自我介绍(2分钟)

2、C语言全局变量可否定义在头文件中?
回答:不能,并且这不是一个好的习惯。

3、全局变量和局部变量是否可以重名?
回答:可以重名。只是作用域不同,局部变量在局部生效。

4、extern C 的作用?
回答:extern C 的主要作用就是为了能够正确实现C++代码调用其他C语言代码,即在C++代码中嵌入式C语言代码。

5、从代码编译到可执行文件的流程?
回答:一个源程序到一个可执行程序的过程:预编译、编译、汇编、链接。

6、进程和线程的区别?
回答:进程是资源(CPU、内存等)分配的基本单位,线程是CPU调度和分配的基本单位(程序执行的最小单位)。同一时间,如果CPU是单核,只有一个进程在执行,所谓的并发执行,也是顺序执行,只不过由于切换速度太快,你以为这些进程在同步执行而已。多核CPU可以同一时间点有多个进程在执行。

7、手撕代码:写一个双向链表的插入。

8、问简历上面的项目。

9、IIC协议说一下(因为我简历里面写了IIC)
回答:I2C协议有两条信号线,SDA和SCL,分别是数据线和时钟线,同一总线可以挂载多个IIC设备,靠设备地址区分。起始信号和终止信号如下,更具体的请自行百度:

10、C++有了解吗,用它做过什么项目没有。
回答:我主要用C语言,C++用的比较少。

11、设备树有了解吗?
在此补充回答:Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,ARM Linux社区对此作出了回应,引入设备树。
ARM Device Tree起源于OpenFirmware (OF),在过去的Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。为了改变这种局面,Linux社区的大牛们参考了PowerPC等体系架构中使用的Flattened Device Tree(FDT),也采用了Device Tree结构,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。
Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。

12、内存分为哪几个部分?
回答:内存分为四区:堆区、栈区、全局区、代码区。具体如下

13、二分法查找的原理?
回答:类似于快速排序算法。二分法使用的前提是数组已经是有序序列,原理是折半查找,每次把表分成两半,因为已经排序的,所以只需要和中间数比较就能确定是在哪一半,然后不断分成两半,直到匹配,或者没有数字,表示查找失败。

14、内核裁剪说一下。
回答:个人理解,内核裁剪的原因主要是Linux内核本身很庞大,但客户有时候不需要这么多功能,想裁剪,定制内核,定制功能。
简单的内核的配置有两种方式,在命令行输入:
1、make config 文本配置方式;
2、make menuconfig 菜单配置方式;

我一般采用第二种去配置内核,配置完以后make。
补充个例子:假如客户需要在手机固件升级的时候,有个指示灯闪烁,该怎么办?这个时候你单纯写应用代码是没用的,因为手机固件升级的时候,系统都没有跑起来,这时候代码只能写在Linux内核的bootloader里,因为bootloader起来了。做嵌入式开发还是要熟悉Linux内核的,没学习的赶紧学习,用到是早晚的事。

15、memcpy(), strcpy(), strcmp(), strcat()有什么区别,如何避免内存越界?
回答:这几个函数,做嵌入式岗位必须要会,按照学校老师的话来讲:这道题是这次考试的必考题,15分就放在那里,爱背不背。这道题,浙江大华也考了,mtk也考了,做嵌入式对内存太敏感,必考。
strcpy函数会导致内存溢出。strcpy拷贝函数不安全,他不做任何的检查措施,也不判断拷贝大小,不判断目的地址内存是否够用。
char *strcpy(char *strDest,const char *strSrc)
strncpy拷贝函数,虽然计算了复制的大小,但是也不安全,没有检查目标的边界。
strncpy(dest, src, sizeof(dest));
strncpy_s是安全的
strcmp(str1,str2),是比较函数,若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。(比较字符串)
strncat()主要功能是在字符串的结尾追加n个字符。
char * strncat(char *dest, const char *src, size_t n);
strcat()函数主要用来将两个char类型连接。例如:
char d[20]=“Golden”;
char s[20]=“View”;
strcat(d,s);
//打印d
printf(“%s”,d);
输出 d 为 GoldenView (中间无空格)
memcpy拷贝函数,它与strcpy的区别就是memcpy可以拷贝任意类型的数据,strcpy只能拷贝字符串类型。
memcpy 函数用于把资源内存(src所指向的内存区域)拷贝到目标内存(dest所指向的内存区域);有一个size变量控制拷贝的字节数;
函数原型:
void *memcpy(void *dest, void *src, unsigned int count);

16、栈和队列的区别?
回答:这两种数据结构都很重要,栈是先入后出,队列是先入先出。

17、memcpy函数以什么结尾?
回答:与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节,函数原型在上面。

18、你最有成就的项目或者经历是什么?

29、你有什么想问的吗?

加我微信收费秋招面试指南,备注来意
在这里插入图片描述
有帮助点赞+收藏+转发三连

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值