面试题汇总
一 . C基础
-
gcc编译器编译的完整流程,分别有什么作用?
答:预处理、编译、汇编、链接。预处理:头文件的展开/宏的替换/去掉注释/条件编译。编译:检查语法,生成汇编。汇编:汇编代码转换成机器码。链接:链接到一起生成可执行文件。
-
什么是回调函数?
答: 回调函数是一段可执行的代码段,它作为一个参数传递给其他的代码,其作用是在需要的时候方便调用这段(回调函数)代码。
-
地址能否使用printf函数中的 %u形式打印?
答:不能。
无论是不是unsigned,内存中存储的char类型的值都是一样的,都是0xFF。
printf("%u") 输出时,对char类型的变量会类型提升为int型。
因为 char 是带符号数字类型,所以会进行符号拓展。a 从 0xFF 拓展为 0xFFFFFFFF (4294967295)。
unsigned char 则会进行零拓展,b 从 0xFF 拓展为 0x000000FF (255)。 -
结构体与共用体的区别
答:结构体 联合体,又称共用体。编程的时候需要使几种不同类型的变量存放到同一段内存单元中,而衍生出来的一种类型。也就是说,联合体中每次只能存其中的一个变量,这个变量在联合体变量中存入新的成员就失效了!!!用法与结构体一致,但是多用于结构体内部。
注意:
(1)在struct中,各成员都占有自己的内存空间,它们是同时存在的。一个struct变量的总长度等于所有成员长度之和。在Union中,所有成员不能同时占用它的内存空间,它们不能同时存在。Union变量的长度等于最长的成员的长度。
(2)对于union的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于struct的不同成员赋值是互不影响的
-
static、const、volatile关键字有什么作用?
答:static:限定作用,延长生命周期。const:防止变量被修改。volatile:防止编译器过度优化,告诉编译器,每次取值都去内存中取。volatile主要用于中断函数子程序访问的非自动变量、多线程共享的全局变量、并行设备的寄存器。
-
声明变量和定义变量的区别
答:
-
赋值与赋初值有什么不同?
-
局部变量和全局变量能否重命名
-
如何引用一个已经定义过的外部变量
-
全局变量和局部变量的存储方式有什么区别?
-
const 与 # define 相比有何优点?
-
数组与指针的区别是什么?
-
为什么作为函数形参的数组和指针可以互换?
-
形参和实参有什么区别?
-
指针、数组和地址之间的关系是的什么?
-
void指针就是空指针吗?他有什么作用?
-
与内存息息相关的重要概念有哪些?(野指针、栈(stack)、堆(heap)、静态区)
-
#include<> 和 #include”” 有什么区别?
-
x=x+1 , x+=1 , x++ 哪个效率高?
-
为无符号类型变量赋值时,数据类型应怎样转换?
-
cpu执行程序的流程?
答:开辟一段0-4g的内存空间,开辟一个进程,把代码加载到寄存器中…
二 . Linux基础
-
字符设备、块设备、管道等在Linux下有个统称叫什么?
答: 系统中能够随机(不需要按顺序)访问固定大小数据片的设备被称作块设备 。
字符设备、块设备主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,而块设备则不然,它利用一块系统内存作为缓冲区,当用户进程对设备请求能满足用户的要求时,就返回请求的数据,如果不能就调用请求函数来进行实际的I/O操作,因此,块设备主要是针对磁盘等慢速设备设计的,以免消耗过多的CPU时间来等待
-
查看一个文件的类型常用的有几种方式
答:ls-l、ls-ld、file、stat
-
Linux下常用的安装工具?
答:apt-get install
-
分别解释shell命令、shell、shell脚本
-
printf与scanf操作的是否是同一个文件
-
Linux常用的文件系统类型?如何查看文件系统类型?
-
windows下有没有文件系统?文件系统有何作用?
-
头文件和库文件一般在哪个路径下?
-
系统如何区别同名的文件
-
系统如何区别不同的进程。
-
查看文件有哪些命令
答:find、ls
-
如修改文件的权限
答:chmod 777 xxx
-
什么是符号链接?
三 . 数据结构
-
数据结构主要研究的是什么?
答: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
-
数组和链表的区别(逻辑结构、内存存储、访问方式三个方面辨析)
-
快速排序的算法
-
hash查找的算法
-
判断单链表是否有环
-
判断一个括号字符串是否匹配正确,如果括号有多种,怎么做?如(([]))正确,[[(()错误
四. IO进程
- 标准IO和文件IO区别?
- 简述流指针?
- 简述系统调用?
- 简述静态库和动态库的区别?
- 如何将程序执行直接运行与后台?
- 进程的状态
- 什么是僵尸进程?
- 简述创建子进程中的写时拷贝技术?
- 多线程较多进程的优势?
- 线程池的使用?
- 线程池的组成部分?
- 线程的同步互斥机制?
- 简述互斥锁的实现原理?
- 简述死锁的情景?
- 简述信号量的原理?
- 简述进程的通信机制?
- 管道的通信原理?
- 用户进程对信号的响应方式?
- 共享内存通信原理?
五. 网络编程
- ISO七层网络通信结构和TCP/IP四层网络通信结构
- tcp通信的优缺点
- udp通信的优缺点
- pool与select的区别
- io模型有哪几种
- 如何实现tcp并发服务器
- 网络超时检测的本质和实现方式
- tcp网络编程流程
- udp网络编程流程
- udp本地通信需要注意哪些方面
- 怎么修改文件描述符的标志位
- sqlite数据库的基本使用,包括增删改查
- 基于udp的聊天室如何实现数据群发
- 在线词典如何实现查询单词
- TCP和UDP的区别
- OSI七层网络模式,每层的主要作用,主要的协议
- OSI的四层和五层网络模型
- TCP的三次握手和四次挥手分别作用,主要做什么
- 如何实现并发服务器,并发服务器的实现方式以及有什么异同
六.C++
-
new、delete、malloc、free关系
-
delete与 delete []区别
-
C++有哪些性质(面向对象特点)
-
子类析构时要调用父类的析构函数吗?
-
多态,虚函数,纯虚函数
-
求下面函数的返回值(微软)
-
什么是“引用”?申明和使用“引用”要注意哪些问题?
-
将“引用”作为函数参数有哪些特点?
-
在什么时候需要使用“常引用”?
-
将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
-
结构与联合有和区别?
-
试写出程序结果:
int a=4; int &f(int x){ a=a+x; return a; } int main(void) { int t=5; cout<<f(t)<<endl; a = 9f(t)=20; a = 20cout<<f(t)<<endl; t = 5,a = 20 a = 25t=f(t); a = 30 t = 30cout<<f(t)<<endl; } //t = 60
-
重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?
-
有哪几种情况只能用intialization list 而不能用assignment?
-
C++是不是类型安全的?
-
main 函数执行以前,还会执行什么代码?
-
描述内存分配方式以及它们的区别?
-
分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
-
请说出const与#define 相比,有何优点?
-
简述数组与指针的区别?
-
int (*s[10])(int) 表示的是什么?
-
栈内存与文字常量区
-
将程序跳转到指定内存地址
-
int id[sizeof(unsigned long)];这个对吗?为什么?
-
引用与指针有什么区别?
-
const 与 #define 的比较 ,const有什么优点?
-
内存的分配方式有几种?
-
基类的析构函数不是虚函数,会带来什么问题?
-
全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的?
七. ARM体系结构编程
- 简单描述一下ARM处理器的特点,至少说出5个以上的特点。
- ARM内核有多少种工作模式?请写出这些工作模式的英文缩写,有几种异常模式,有几种特权模式,cortex_a系列有几种特权模式,几种工作模式
- ARM内核有多少个寄存器,简述一下
- ARM通用寄存器中,有3个寄存器有特殊功能和作用,请写出它们的名字和作用。
- 请描述一下CPSR寄存器中相关Bit的情况和作用。
- 什么是立即数?立即数的本质是什么
- 请问BL指令跳转时LR寄存器保存的是什么内容?并请简述原因
- 请描述一下什么是处理器现场,如何进行保存现场?
- ATPCS默认使用的是什么栈?
- 什么是满栈、空栈,什么是增栈、减栈?
- 请写出一条完整的ARM软件中断指令,并简要描述其作用。
- 请描述一下ARM体系中异常向量表的概念。
- 请写出一个ARM程序生成的bin文件映像中包含哪些内容?
- 请举例说明在ARM处理器上进行一次中断处理和中断异常处理的差异。
- 请简述异常中断处理发生时,是通过什么完成初始化步骤,这些初始化的具体步骤是什么?
- uboot的主要作用
- uboot是怎样引导启动内核的?
- uboot的启动过程的重要干了什么
- bootcmd和bootargs两个uboot环境变量的作用
- linux内核的启动过程
- uImage,zImage,vmlinux的区别
- Kconfig,.config,Makefile三个文件之间的关系
八. 系统移植
- Linux内核启动流程
- 什么是bootloader?在嵌入式系统当中bootloader的作用是什么?
- 为什么汇编语言对硬件平台有依赖性而C语言却可以不依赖硬件平台?
- 什么叫做交叉编译?
- Linux平台下的可执行文件是什么格式?
- 什么叫做反汇编?
- 简述nfs服务的概念与作用?
- 简述一个装有linux内核的开发板的启动过程?
- 简述uboot的主要功能有哪些?
- uboot如何设置环境变量?
- 简述uboot中bootcmd环境变量的作用?
- 简述uboot中bootargs环境变量的作用?
- 简述什么叫平台相关代码什么叫平台无关代码?
- 如何理解linux/uboot支持各种硬件平台?
- 如何配置uboot使其适合特定的开发板平台?
- 如何编译uboot生成二进制文件?
- 简述uboot的启动过程?
- 操作系统的作用有哪些?
- 如何配置linux源码使其适合特定的处理器?
- 在make menuconfig界面下有些驱动可以被选成三种状态即“Y”,“N”,“M”这三种状态分别是什么含义?
- 如何编译被选中为“M”选项的驱动模块?
- 简述设备树的作用?
- 编写设备树文件的主要依据是什么?
- 简述如何将一个内核源码中已有的驱动程序编译到内核中?
- 简述如何将一个自己编写的驱动程序编译到内核中?
- 在内核启动过程中如果控制台已经初始化我们一般采用什么方式来调试内核?
- linux内核在启动过程中遇到什么情况会打印系统崩溃报告Oops?
- linux内核在启动过程中遇到某些问题会打印系统崩溃报告Oops,报告中主要打印哪些内容?
- 简述什么叫文件系统?什么叫根文件系统?
- 开发板中为什么一般不需要安装静态库?
九. 驱动开发
-
什么是模块?
-
驱动类型有几种
-
字符设备驱动框架编程流程?
-
什么是并发,驱动中产生竞态的原因有哪些?
-
解决竞态的途径有哪些?分别有什么特点?
-
驱动中IO模型有几种?
-
设计linux设备模型的主要作用?
-
字符设备驱动框架与linux设备模型是否矛盾?
-
platform架构分别分为哪个部分?他们通过什么进行匹配
-
设备树与platform架构是否有矛盾?
-
为什么要将中断分为上下半部?上下半部机制有哪些?
-
工作队列与tasklet的区别?
-
内核中内存分配函数分别有哪些?分别有什么特点?
-
内核调试
-
字符设备驱动的框架
-
字符设备和块设备和网络设备的区别
-
并发和竞态概念,那些情况会出现竟态,解决竟态的方法,以及区别,使用场景。
答:并发:
-
自旋锁和信号量的区别
答:当一个进程访问资源时获得一把自旋锁时,另一个进程也想访问资源,他就会不停的自旋询问,是否能访问资源,不停的消耗cpu资源。而当一个进程访问资源时获取到一个信号量时,另一个进程也想访问资源,此时他就会处于等待,等到第一个进程访问完了以后,会通知到到第二个进程让其进行访问。
-
谈谈你对中断上下文,进程上下文的理解
-
中断低半部主要做了什么
-
Platfprm平台总线驱动模型
-
IIC子系统驱动框架
-
输入子系统驱动框架
-
比如:如果主机不知道从机的7位地址,你如何才能找到从机?
答:当主机不知道从机的地址时,主机会遍历所有的从机地址,当有一个从机做出应答时,这个从机就是我们要找的从机。
十. 物联仓储
- 在项目中你负责的是什么?
- 在项目中你们小组遇到了什么困难,怎么解决的,你遇到的最棘手的问题是怎么解决的?
- 你认为这个项目还有什么可以优化的地方
- A53主程序开发流程
- 客户端和服务器是如何通信的
- 移植uboot时自启动参数的设置方式
- 项目中环境信息是如何实时显示在客户端的
- 项目中如何实现线程间的同步互斥?
- 服务器与M0是如何通信的
- M0上发送上来的数据是什么形式的?
- 数据接收线程是如何读取数据的
- 简述视频流服务器的工作原理
- 客户端为什么可以访问服务器上的数据
- 搭建嵌入式开发环境需要执行哪些步骤
- 项目中如果遇到段错误应该怎么解决?
- 为什么要使用线程?与进程相比有哪些好处?
- 如何让系统上电后自动开始运行?
- 编译内核时生成的是zImage还是uImage,二者有什么不同
- 消息队列在系统中的作用是什么?
- 消息队列和共享内存是在哪里开辟空间?
- 如果服务器端数据分析的速度追不上数据接收的速度会出现什么问题,应该怎么解决?
- 调用sqlite_get_table()查询数据时,result中返回的结果是什么?
- 请简述ZigBee的组网原理
- 说说你对zstack协议栈的认识
- 实现两个zigbee模块的数据透传,需要做什么?
- Boa服务器的作用
- Boa服务器默认使用的端口号是什么?boa.conf这个文件中描述了哪些重要的配置
十一. 百度语音识别
-
如果我有一个已经一直好Linux系统的开发板,我要怎么做可以实现调用百度 AI语音识别的接口(libcurl、openssl、alsa这些库的作用和移植方法)
-
怎么实现开发板可以ping通外网,可以ping通百度
-
在实现的过程中遇到过什么问题?怎么产生的?怎么解决的?
-
怎么查看自己当前系统的版本
不是很全面,请各位谅解…