技术题linux 内核空间和用户空间的通讯方式系统调用、ioctl、netlink、mmap 共享内存、管道 / 命名管道、消息队列、信号、socket。为什么中断不能睡眠中断上下文无进程结构体task_struct无法被调度唤醒睡眠会导致系统卡死且中断需快速执行睡眠会占用中断资源。内核的内存分配方式伙伴系统、slab 等等伙伴系统管理物理页框分配大内存解决碎片slab/slub/slob基于伙伴系统分配小内存缓存常用对象vmalloc分配虚拟连续、物理不连续内存kmem_cacheslab 的专用对象缓存池。kmalloc 最小内存分配预期分配 128 字节实际多少按内核内存块对齐规则实际分配 128 字节部分架构因最小块限制可能为 256 字节内对齐的 128 字节无冗余。define 和 const 区别分别什么时候生效define预处理阶段编译前替换无类型检查占代码段const编译阶段生效有类型检查占数据段不可直接修改。了解大小端吗大小端的区别小端低字节存低地址ARM/x86 默认大端低字节存高地址网络协议 / 部分外设。cache 一致性多核 / CPU 中保证同一物理地址的 Cache 数据副本一致靠 MESI/MOESI 硬件协议自动维护或 dmb/dsb 软件指令辅助同步。cache 的三级缓存知道吗知道L1核心独占最快最小分 I/D CacheL2核心独占 / 共享中速中容L3多核心共享最慢最大逐级缓存数据降低 CPU 访存延迟。堆栈区别栈系统自动分配释放先进后出存局部变量 / 参数空间小且连续堆手动分配释放无序存动态数据空间大且非连续易产生碎片。介绍一下 DMA具体原理是什么DMA直接内存访问外设无需 CPU 参与直接与内存传输数据原理CPU 配置 DMA 控制器地址 / 长度 / 方向DMA 自主传输完成后通过中断通知 CPU。虚拟地址到物理地址的转换拆分虚拟地址为页目录号、页表号、页内偏移多级页表查找物理页框号页框号 偏移组成物理地址转换失败触发缺页异常。MMU 的具体工作流程页表大小工作流程接收虚拟地址→查 TLB未命中查内存页表→地址转换 权限校验→输出物理地址页表大小32 位系统4KB 页二级页表总 2KB64 位系统按部分页无固定值。进程的上下文包括什么进程运行环境包括用户上下文寄存器、PC、栈指针、内存映射和内核上下文task_struct、内核栈、页表、文件描述符、信号掩码。char constp 有什么特点地址变吗*特点指向的字符串内容不可修改p 本身地址指向的目标地址可修改如 p、指向其他字符串。Static、volatile 的作用static局部变量延长生命周期全局 / 函数限制文件内作用域volatile告知编译器变量异步修改禁止优化直接读取内存。结构体和联合体的区别C 语言位段了解吗区别结构体成员独立占内存总大小 成员 对齐联合体成员共享内存总大小 最大成员位段了解结构体中用冒号指定成员二进制位数节省内存如 uint8_t a:4。Define 和 typedef 的区别define预处理替换无类型检查可定义常量 / 宏函数typedef编译阶段定义类型别名有类型检查仅作用于类型。C 语言函数里面如何定义多个名字相同的变量变量作用域比如 for 里面进行定义变量作用域嵌套函数内定义变量if/for 内部再定义同名变量块内覆盖外部函数内变量为局部作用域for 内变量仅在循环内有效外部变量被块内变量隐藏。c 的函数的入参是存放在哪里所有入参都是栈吗默认存栈ARMv8/x86-64 架构前几个参数存寄存器多余参数存栈并非所有入参都在栈。进程是虚拟地址空间的进程虚拟地址空间的用户栈 / 内核栈区域进程创建时由操作系统分配栈指针管理栈向下生长。c 语言位段了解吗了解结构体中通过冒号指定成员二进制位数节省内存适用于寄存器配置 / 数据压缩需注意跨字节对齐问题。define 宏为什么要加括号避免宏替换时运算符优先级导致逻辑错误如#define M(ab) a b加括号(ab)可规避计算偏差。锁的类型有哪些自旋锁中断上下文 / 短持有、互斥锁进程上下文 / 长持有、读写锁区分读写并发、条件变量配合互斥锁、信号量多资源同步。系统调用用户态到内核态会发生什么触发软中断→保存用户态上下文→切换内核栈与页表→执行系统调用服务函数→恢复用户态上下文并返回。linux 进程通讯方式无名管道父子进程、命名管道无亲缘、信号、消息队列、共享内存、信号量、socket跨网络 / 本机。linux 内核如何获取用户态 pidcurrent-pid当前进程 pid、current-tgid用户态线程组 pid遍历进程链表可获取其他进程 pid。linux 内核调度机制普通进程用 CFS 完全公平调度器按虚拟运行时间公平调度实时进程用 SCHED_FIFO/SCHED_RR 调度器优先级抢占高优先级进程优先执行。linux 驱动第一个被执行的函数如何实现为什么有了 init 和 exit 就会去执行对应的函数module_init()/module_exit()函数为实现这个执行rmmod 时执行 exit。32 位的 linux 的虚拟内存空间的分布情况高端内存映射区是什么他的地址是什么分布0x00000000~0xBFFFFFFF3GB 用户空间、0xC0000000~0xFFFFFFFF1GB 内核空间高端内存映射区内核空间 0xF8000000~0xFFFFFFFF映射超过 896MB 的物理内存解决内核直接寻址不足。用户态堆栈在系统调用时会发生什么变化吗用户态堆栈本身不变CPU 会将用户态栈指针、PC 等寄存器保存到内核栈系统调用返回后恢复用户态栈指针。Arm v8 有多少个寄存器有几种模式异常等级有几种工作模式有哪些arm 上电复位后进入哪种模式31 个通用 64 位寄存器 PCPSTATE模式EL1h/t、EL2h/t、EL3h/th 句柄态t 线程态异常等级4 种EL0~EL3工作模式安全 / 非安全模式复位进入 EL3安全监控模式。知道哪些调试方法gdb 调试怎么调用函数怎么设置打印 16 位的变量怎么跟踪变量变量值改变时自动提示如何设置断点死机后怎么办调试方法gdb、kdb、printk、kmemleak、ftrace、crash、串口打印gdbcall函数名 (参数)打印 16 位变量p/x (uint16_t)变量跟踪变量watch 变量写/rwatch读断点b 行号/函数名死机后分析 core dump、dmesg 日志、crash 工具查内存镜像。知道 ftrace 吗知道怎么用吗知道函数跟踪挂载跟踪器echo function current_tracer→开启跟踪echo 1 tracing_on→执行操作→停止跟踪→cat trace查看结果。Linux 操作系统的三大块了解吗了解内核进程 / 内存 / IO 管理、根文件系统用户程序 / 配置 / 库、引导加载程序U-Boot/GRUB加载内核驱动。现在让你开展一个项目主要负责生物语音识别你该怎么开展需要考虑哪些因素开展步骤需求分析→技术选型模型 / 框架 / 平台→数据采集预处理→模型训练优化→部署测试→迭代考虑因素识别精度、实时性、硬件资源、功耗、数据隐私、兼容性、稳定性。英文问题什么时候毕业I will graduate in June 202X.毕业了什么时候能到岗I can join the company immediately after graduation, or as early as mid-June 202X if required.有那么多候选人给我几个理由让我把 offer 给你First, I have solid professional knowledge (Linux kernel, embedded development) and rich project experience to quickly adapt to the job. Second, I have strong problem-solving ability in technical issues like driver stability. Third, I am eager to learn and can bring long-term value to the team.总结题技术题核心聚焦 Linux 内核、C 语言基础、硬件架构、调试方法回答需直击原理兼顾实操场景英文问题简洁真诚突出自身专业能力、问题解决能力和学习潜力整体回答符合高通面试的技术深度要求兼顾简洁性和准确性。