根据面经准备面试第9期-c软件2026创维

感觉是我目前最难的,太菜了,知识很多都忘了,不熟练

  1. git,拉取,上传,冲突怎么解决
  2. 怎么安全线程退出
  3. linux系统启动流程
  4. linux系统线程崩溃,怎么解决
  5. 用户态和内核态联系
  6. #我的失利项目复盘#
  7. dma的作用
  8. BootLoader
  9. BootLoader怎么起作用的
  10. 进程间通信,选一个具体讲讲
  11. 线程间怎么共享变量
  12. socket端口怎么使用
  13. cs架构
  14. IP地址与Mac地址,作用
  15. epoll与select区别
  16. cmake与makefile怎么编写,基本配置
  17. 什么时候用单例,什么时候用工厂
  18. static作用,能否修改
  19. linux驱动什么流程
  20. linux系统启动流程
  21. linux命令,下载,
  22. 消息队列具体是怎么通知接收方的
  23. 端口什么时候阻塞,什么时候不阻塞

  • git,拉取,上传,冲突怎么解决

拉取git pull,拉取远程分支更新到本地

git add.暂存修改,git commit-m描述,提交到本地仓库,git push origin分支名,推送到远程

冲突解决:

拉取若冲突,git status查看冲突文件

打开文件,找到冲突标记,

手动编辑保留正确内容,删除标记

重新git add ,git commit,git push完成提交

  • 怎么安全线程退出

避免强制终止,如pthread——cancel可能导致资源泄漏

采用协作式退出,定义共享标志位,volatie bool is——exit,线程定期检查

主线程需退出,设置is——exit=true,并通过条件变量pthread——cond——signal唤醒阻塞中的线程

线程检测到标志位后,主动释放资源,最后调用pthread——exit退出

  • linux系统启动流程

BIOS:初始化硬件cpu、内存、磁盘,检测启动设备,读取主引导记录或系统分区

bootloader,加载uboot,解析配置,加载内核到内存

内核初始化,解压内核,检测硬件,初始化驱动,挂载跟文件系统,是linux系统启动时挂载的第一个文件系统,是操作系统的核心文件系统,包含系统正常运行所必须的关键文件和目录结构

系统启动基础,内核初始化完成,第一个挂载的文件系统就是跟文件系统,没有它系统无法正常启动,内核通过跟文件系统找到初始化进程并启动

包含核心组件,存放操作系统运行必需的文件,目录结构,确保不同Linux发行版的目录结构一致,便于应用程序兼容

多种存在形式,可以是磁盘分区,initramfs,内存中的临时文件系统,网络文件系统,具体设备上的跟文件系统通常需要内核对应的文件系统格式

  • linux系统线程崩溃,怎么解决 看core文件,用gdb程序名core分析,段错误位置,调用栈

修复根源,根据调试结果修复代码,如空指针、数组越界、内存泄漏

主线程通过pthread——join监控子线程状态,崩溃后重启线程,或用信号处理

  • 用户态和内核态联系 用户态是应用程序运行的低权限状态,不能直接访问硬件,内核态是操作系统运行的高权限状态,可访问所有资源,
  • 切换机制,通过系统调用,read/write、中断、如外设io完成,异常除以0触发切换

用户态程序发起程序-》陷入内核态,内核处理,读写硬盘-》返回硬核态并带回结果

  • #我的失利项目复盘#
  • dma的作用 dma直接内存访问,允许外设直接与内存交换数据,无需cpu全程参与

减少cpu负担,cpu只需初始化dma控制器,指定源地址,目标地址,传输长度

提升数据传输效率,尤其大块数据,传输完成后需通过中断cpu

  • BootLoader 系统上电后运行的第一个程序,是内核加载的桥梁

作用:硬件初始化:关闭看门狗,设置时钟,初始化内存

加载内核:从flash/硬盘读取内核镜像到内存

启动内核:跳转到内核入口地址,移交控制权

  • BootLoader怎么起作用的
  • 进程间通信,选一个具体讲讲 半双工,仅用于进程通信

pipe创建管道,

父进程fork子进程,关闭无关端

父进程通过write写入,子进程通过read读取

数据在内存中临时存储,进程退出后释放

  • 线程间怎么共享变量 线程共享进程的地址空间,

默认共享全局变量、静态变量

显式共享,堆内存malloc分配,线程间传递指针即可访问

需要用互斥锁,或条件变量同步,避免竟态条件

  • socket端口怎么使用

端口是16位整数,用于标识进程

服务器端,socket创建套接字,bind绑定ip和端口,listen监听,accpet接受连接

客户端,socket套接字,connect指定服务器ip和端口

通信,通过套接字描述符read/write或send/recv传输数据

  • cs架构 客户端发起请求、浏览器、app

接收并且处理请求,返回响应,服务器

  • IP地址与Mac地址,作用 网络层逻辑地址,标识跨网络的主机,用于路由选择,跨网段通信

数据链路层物理地址,用于局域网内设备识别,通过arp协议将ip地址映射为mac

  • epoll与select区别 select轮询所有文件描述符fd,低效,受fd——setsize限制,通常1024,每次调用需要重置fd集合,仅仅水平触发

epoll事件驱动,只处理fd,高效,无限制,fd可复用,支持水平触发和边缘触发

  • cmake与makefile怎么编写,基本配置 定义依赖规则,目标依赖,编译命令

cmakelist通过cmakelist生成makefile,基本配置,最低版本,项目名,生成可执行文件,链接数学库

  • 什么时候用单例,什么时候用工厂 需保证类只有一个实例,配置管理器、日志器,提供全局访问点,避免资源竞争

工厂模式,创建对象时隐藏实例化逻辑,客户端无需知道具体类名,

  • static作用,能否修改 c中:修饰全局变量/函数-》作用域限制为本文件,修饰局部变量,生命周期延长至程序结束,仅仅初始一次

c++中,额外修改类成员-》属于类而非对象,无this指针

能否修改,能修改值,合法,仅仅存储和作用域退缩

  • linux驱动什么流程 编写驱动代码,实习模块初始化,退出cleanup——module,定义file_operations体

open/read/write操作

编写makefile,指定内核路径,生成。ko模块

insmod驱动。ko加载-》mknod/dev/设备名c主设备号,次设备号,创建设备节点,用户态通过open/read驱动

  • linux系统启动流程
  • linux命令,下载, 下载文件:wget URL(如wget https://xxx.txt)、curl -O URL
  • 安装软件:Debian 系用apt-get install 包名,RedHat 系用yum install 包名

  • 消息队列具体是怎么通知接收方的

阻塞等待,msgrcv()调用时若队列空,线程阻塞至有消息

非阻塞,msgrcv如加ipc——nowait,无消息立即返回错误

发送方,msgsnd通过kill给接收方进程发信号,接收方注册信号处理函数,收到信号后调用msgrcv获取

  • socket端口什么时候阻塞,什么时候不阻塞

当套接字处于阻塞模式时,以下操作会导致线程阻塞(暂停执行),直到操作完成或出错:

  • accept():服务器调用时,若没有客户端连接请求,会一直阻塞等待,直到有新连接到来。
  • recv()/read():读取数据时,若缓冲区中没有数据,会阻塞直到有数据到达或连接关闭。
  • send()/write():发送数据时,若缓冲区已满(如网络拥堵),会阻塞直到缓冲区有空闲空间。
  • connect():客户端发起连接时,会阻塞直到与服务器建立连接或超时。

适用场景:简单的单连接程序(如一对一通信),无需复杂的并发处理,代码实现简单。

当套接字通过fcntl()或ioctl()设置为非阻塞模式时,所有操作不会阻塞线程,而是立即返回:

若操作可以完成(如缓冲区有数据可读),返回实际结果(如读取的字节数)。

若操作暂时无法完成(如无数据可读),返回错误码(Linux 下为EAGAIN或EWOULDBLOCK),线程可继续执行其他任务。

适用场景:高并发程序(如服务器同时处理多个客户端),需配合select/poll/epoll等 I/O 多路复用机制,避免线程因等待 I/O 而闲置。

关键区别

阻塞模式:操作未完成时,线程挂起,不占用 CPU 资源,但会阻塞其他任务执行。

非阻塞模式:操作未完成时,立即返回错误,线程可继续处理其他事务,但需通过轮询或事件通知机制判断操作是否就绪,可能消耗额外 CPU。

实际开发中,非阻塞模式常与 I/O 多路复用结合,既避免阻塞,又减少无效轮询,是高性能网络编程的常用方案(如 Nginx、Redis 的网络模型)。

全部评论
前两天也面了这个,太难了。已经进人才库了还给我发面试
点赞 回复 分享
发布于 09-26 10:05 河北
点赞 回复 分享
发布于 09-25 22:10 湖北

相关推荐

评论
点赞
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务