应用篇
一、C语言
1、static、const、volatile关键字有什么 作用?
2、const * 和 *const的区别?
3、#include< > 和 #include” ” 有什么区别?
4、声明变量和定义变量的区别?
5、如何避免头文件重复包含、嵌套问题?
6、const 与 # define 相比有何优点?
7、void指针就是空指针吗?有什么作用?
8、野指针是什么?如何避免?
9、值传递与址传递?
10、大小端字节序的区别,如何判断?
11、为无符号类型变量赋值时,数据类型应怎样转换?
12、memcpy、memmove自己实现?
13、什么是回调函数?钩子函数?
14、全局变量和局部变量的存储方式有什么区别?Linux进程虚拟内存分布?
15、结构体对齐问题?
16、内存泄漏是什么?如何定位内存泄漏?
17、面向对象的编程的思想?
18、可变参函数的使用方法?
二、编译问题
1、gcc编译器编译的完整流程,分别有什么作用?
2、C++如何调用C语言函数API?
3、写一个最简单的Makefile?
4、Makefile的伪目标是什么?有什么作用?
5、objdump、readelf、addr2line等反汇编相关命令的使用?
6、CMake工具是否使用过?
7、什么是交叉编译?为什么需要交叉编译?
8、编译乱序和执行乱序问题?
9、静态库与动态库的区别?
10、动态库的编译路径、加载路径?
三、Linux基础
1、如何查看CPU信息?如何查看CPU的使用情况?
2、如何查看内存使用情况?
3、查看进程、线程状态?如何杀死进程?
4、如何文件修改权限?0664代表什么意思?
5、文件描述符0、1、2代表什么?
6、文件的7种类型有什么?
7、Linux常用的文件系统类型?如何查看文件系统类型?
8、文件IO和标准IO的区别?
9、空洞文件的作用?空洞文件的占用磁盘空间大小?
四、进程&线程
1、进程有几种状态?如何转换?
2、进程与线程的区别?
3、进程间通信方式有哪些?
4、多线程较多进程的优势?
5、如何创建一个线程?线程如何回收?
6、同一个进程下的线程,哪些资源是共享的,哪些是私有的?
7、线程同步机制有几种?互斥锁、条件变量如何使用?
8、什么是死锁?如何避免死锁?(死锁的必要条件?)
9、如何创建一个守护进程?
10、高并发问题如何处理?
11、共享内存通信原理?
12、同步与异步区别?阻塞与非阻塞区别?
13、select、poll、epoll有什么区别?
14、常见的信号?可靠信号的特点?
15、线程池的创建方法?
16、什么是符号链接?
五、问题调试
1、GDB常用调试命令?如何调试正在运行的进程?
2、系统卡如何快速定位?
3、网络不通如何快速解决?
六、数据结构
1、数组和链表的区别?(逻辑结构、内存存储、访问方式三个方面辨析)
2、循环链表的实现?
3、队列和栈的区别?
4、二叉树的遍历?
5、判断单链表是否有环?
七、网络编程
1、TCP 和UDP的区别?优缺点?
2、OSI 七层模型 和 TCP/IP 四层、五层模型?每层的主要作用?包含的常见协议举例子?
3、描述TCP的连接与断开过程(三次握手、四次挥手)?
4、ping命令的实现原理?
5、实现一个TCP的客户端和服务器的流程?
6、IP的分类?组播IP与广播IP?
7、windows文件传输到Linux的方法?
八、算法
1、算法复杂度计算方法?(时间复杂度与空间复杂度)
2、会哪些排序算法?快排和冒泡排序的时间复杂度?
3、树的遍历
4、贪心算法、深度优先算法、广度优先算法等
十、数据库
1、熟悉哪些数据库的使用?
2、sqlite数据库的基本使用,包括增删改查?
十一、代码管理工具
1、是否使用过svn或git的常用命令?
2、svn或git提交代码流程?
3、merge功能是否会用?
十二、交换机相关问题
1、 交换机报文转发流程?
2、mac和phy的区别?
3、如果有1M的mac学习容量,哪种数据结构查找效率最高(不考虑增删),为什么?
4、Vlan协议IEEE 802.1Q的内容?VLAN的作用是什么?
5、交换机端口类型的区别Trunk 、access、 hybrid ?
6、你最熟悉的交换芯片,芯片带宽多大?支持多少mac地址学习?还支持哪些特性?
7、交换机和路由器分别工作在7层模型的哪一层?有什么区别?
8、二层交换跟三层交换的区别?
9、ACL匹配策略与行为?
10、mac与phy的连接方式?千兆口的时钟频率?
11、交换机打流测试方法?
12、网络风暴的产生常见原因?如何解决?
13、VLAN虚接口的作用?
14、了解QOS技术吗?QOS的作用?
驱动篇
一、Linux内核
1、描述内核编译过程?
2、描述内核启动流程?
3、zImage与uImage的区别?
4、进程管理的实现原理
5、并发与竞态产生的根本原因?
6、进程调度算法?进程优先级?调度策略?
7、实时系统与分时系统的区别?
8、多核CPU如何指定在某个核运行程序?
9、用户态与内核态的通信方式有哪些?
10、为什么要将中断分为上下半部?上下半部机制有哪些?工作队列与tasklet的区别?
11、优化内存屏障的作用?
12、VFS虚拟文件系统结构?
13、proc文件系统的内容?
14、linux内核在启动过程中遇到某些问题会打印系统崩溃报告Oops,报告中主要打印哪些内容?
15、常用的内核调试方法有哪些?
二、驱动
1、驱动程序的三要素?
2、驱动的开发方式(静态、动态)?
3、驱动开发与应用开发有什么不同?
4、加载删除模块命令?如何查看驱动是否加载成功?
5、驱动加载时如何传参?
6、驱动模块符号导出方法?
7、file_ops结构体包含哪些常用的方法?
8、字符设备驱动框架编程流程?
9、gpio如何高效获取上下沿变化?
10、你熟悉的驱动子系统?gpio子系统了解吗?
11、platform架构分别分为哪个部分?他们通过什么进行匹配
12、字符设备驱动、块设备驱动不同?
13、sys文件系统节点的创建?
14、伙伴算法申请内存?
15、举例常见的异常类型?
16、设备树的作用?
17、根文件系统构建方式(busybox、buildroot)?
18、磁盘挂载命令?
19、DMA设备的作用?
20、内存测试、CPU压力测试、磁盘读写压力测试是否做过?
21、系统时间与硬件时间的同步?
三、通信总线
1、串口的常见波特率?帧格式?
2、IIC的时序图?
3、IIC子系统驱动框架?
4、SPI的时序图?
5、IIC与SPI对比优缺点?使用场景?
6、对CAN总线的理解?CAN的帧ID范围?帧结构?帧类型?终端电阻的作用?
7、CAN的实时性(CAN ID)?CAN仲裁机制原理?
8、CAN与CANFD的区别?
9、双工模式的理解?串行与并行总线的区别?同步与异步总线的区别?
10、pcie的枚举过程?
四、u-boot
1、uboot编译流程?
2、uboot启动流程?如何向内核传参?
3、uboot常用命令?boot下读写寄存器命令?
4、bootcmd和bootargs参数的作用?自启动参数如何设置?
5、为什么boot可以ping同电脑,电脑ping不同设备?
五、ARM架构
1、简单描述一下ARM处理器的特点,至少说出5个以上的特点。
2、ARM内核有多少种工作模式?有几种异常模式,有几种特权模式?
3、异常中断处理流程(4大步,3小步)
4、ARM架构与X86架构的区别?开发时有什么要注意的?
5、ARM CPU寄存器和指令集?
6、描述一下什么是处理器现场,如何进行保存现场?
7、什么是满栈、空栈,什么是增栈、减栈?
8、ARM体系中异常向量表?
9、ARM程序生成的bin文件映像中包含哪些内容?
六、硬件基础
1、是否了解芯片集成方案设计?
2、时钟倍频与分频?pll?
3、芯片选型的考虑因素?
4、单片机与Linux设备的区别?优缺点?
5、soc由哪些部分组成?