标签题目
Linux相关面试题第 2 页
内存泄漏如何定位和排查?
内存泄漏如何定位和排查?这道腾讯牛客题的关键是围绕“内存泄漏定位与排查”讲清概念、机制、取舍和边界。内存泄漏排查要先确认是进程常驻内存持续增长、堆对象无法释放,还是缓存、连接、文件句柄等资源增长。Java 场景重点看堆转储、GC Roots 和对象引用链;C/C++ 场景还要看 malloc/new 未释放和越界破坏。
c++程序从编译到可执行文件的流程?
c++程序从编译到可执行文件的流程?这道腾讯牛客题的关键是围绕“C++ 从源码到可执行文件的构建链路”讲清概念、机制、取舍和边界。C++ 程序从源码到可执行文件通常经过预处理、编译、汇编和链接四个阶段。预处理展开头文件和宏,编译把翻译单元转成汇编或中间表示并做语义检查,汇编生成目标文件,链接解析符号并合并目标文件和库。
内存中堆和栈有什么区别?
内存中堆和栈有什么区别?这道腾讯牛客题的关键是围绕“内存堆与栈区别”讲清概念、机制、取舍和边界。内存中的栈主要保存函数调用帧、局部自动变量、返回地址和寄存器保存信息,生命周期随函数调用自动管理;堆用于动态分配对象,生命周期由 malloc/free、new/delete 或运行时 GC 管理。
epoll 的 LT 和 ET 两种触发模式有什么区别?
epoll 的 LT 和 ET 两种触发模式有什么区别?这道腾讯牛客题的关键是围绕“epoll LT 与 ET 触发模式”讲清概念、机制、取舍和边界。epoll 常说的两种触发模式是 LT 水平触发和 ET 边缘触发。LT 只要 fd 仍然处于可读或可写状态,就会持续通知;ET 只在状态从不可读变为可读、不可写变为可写这类边缘变化时通知一次。
线程间的通信机制?
线程间的通信机制?这道腾讯牛客题的关键是围绕“线程互斥与通信机制”讲清概念、机制、取舍和边界。线程互斥用于保护共享资源,常见 mutex、spinlock、rwlock、atomic/CAS 和 semaphore;线程通信常用 condition variable、线程安全队列、future/promise、eventfd 或 channel 风格封装。
进程有哪些常见状态?
进程有哪些常见状态?这道腾讯牛客题的关键是围绕“Linux 进程状态”讲清概念、机制、取舍和边界。Linux 常见进程状态包括 R 运行或可运行、S 可中断睡眠、D 不可中断睡眠、T 停止、Z 僵尸。面试时要说明这些状态代表任务是在用 CPU、等事件、等不可中断 I/O、被暂停,还是已经退出等待父进程回收。
怎么实现线程之间的互斥?
怎么实现线程之间的互斥?这道腾讯牛客题的关键是围绕“线程互斥实现”讲清概念、机制、取舍和边界。线程互斥的目标是保护共享临界区,确保同一时刻只有一个线程修改共享状态。常见手段包括 mutex、spinlock、rwlock、atomic/CAS 和 semaphore,其中 mutex 是最常用的阻塞互斥原语。
线程上下文和进程上下文区别?
线程上下文和进程上下文区别?这道腾讯牛客题的关键是围绕“线程上下文与进程上下文切换”讲清概念、机制、取舍和边界。线程上下文切换和进程上下文切换都要保存/恢复寄存器、程序计数器、栈指针和调度状态;区别在于同进程线程共享地址空间,通常不需要切换完整 mm_struct 和页表,而进程切换更可能带来地址空间、TLB 和 cache 扰动。
Linux中,如何查询系统负载情况?
Linux中,如何查询系统负载情况?这道腾讯牛客题的关键是围绕“Linux 系统负载查询”讲清概念、机制、取舍和边界。Linux 查询系统负载常用 uptime、top、w 或 cat /proc/loadavg。load average 的 1/5/15 分钟值表示一段时间内处于可运行 R 或不可中断睡眠 D 状态的任务平均数。
如果定时任务多了单个线程处理不了,要使用多线程怎么处理?
如果定时任务多了单个线程处理不了,要使用多线程怎么处理?这道腾讯牛客题的关键是围绕“多线程任务调度与线程数配置”讲清概念、机制、取舍和边界。多线程处理任务要先把任务放进队列,再由线程池消费,避免无限创建线程。CPU 密集型线程数通常接近 CPU 核数或核数加一;I/O 密集型可以按 cores*(1+wait/compute) 估算,并通过压测校准。
如何实现多线程?
如何实现多线程?这道腾讯牛客题的关键是围绕“多线程实现方式”讲清概念、机制、取舍和边界。实现多线程要讲创建线程、任务执行、同步共享状态和生命周期收尾。C/C++ 常用 pthread_create 或 std::thread,Java 可用 Thread、Runnable、ExecutorService,Go 用 goroutine 但它是 runtime 调度的轻量协程。
协程和进程和线程的区别?
协程和进程和线程的区别?这道腾讯牛客题的关键是围绕“进程、线程与 Go 协程差异”讲清概念、机制、取舍和边界。进程是资源隔离单位,线程是内核调度实体,Go 协程 goroutine 是由 Go runtime 管理的轻量用户态执行单元。goroutine 不是 OS 线程,而是通过 GMP 调度模型以 M:N 方式复用到少量内核线程上运行。
io密集型和cpu密集型如何分配线程,多分配线程数量还是少?
io密集型和cpu密集型如何分配线程,多分配线程数量还是少?这道腾讯牛客题的关键是围绕“CPU 密集与 I/O 密集线程数配置”讲清概念、机制、取舍和边界。CPU 密集型任务线程数通常接近 CPU 核数或 cores+1,避免过多线程争抢 CPU;I/O 密集型任务有大量等待时间,可以按 cores*(1+wait/compute) 估算更高线程数,再用压测校准。
进程的虚拟地址是怎么分区的?
进程的虚拟地址是怎么分区的?这道腾讯牛客题的关键是围绕“进程虚拟地址空间分区”讲清概念、机制、取舍和边界。进程虚拟地址空间通常包括代码段 text、只读数据 rodata、已初始化数据 data、未初始化数据 bss、堆 heap、mmap 区、用户栈 stack 和内核空间映射边界。
进程线程区别?
进程线程区别?这道腾讯牛客题的关键是围绕“进程与线程区别及上下文切换”讲清概念、机制、取舍和边界。进程是资源拥有和隔离单位,线程是同一进程内的调度执行单位。同一进程的线程共享地址空间、堆、全局变量和文件描述符,但有独立栈、寄存器上下文、线程局部存储和调度状态。
进程间通信方式?
进程间通信方式?这道腾讯牛客题的关键是围绕“进程间通信方式”讲清概念、机制、取舍和边界。进程间通信方式包括匿名管道、命名管道 FIFO、消息队列、共享内存、信号量、信号、Unix domain socket、TCP socket、mmap 和文件锁。选择取决于是否亲缘进程、吞吐、延迟、同步需求和是否跨机器。
如何将一个已排序的大文件随机打乱?
如何将一个已排序的大文件随机打乱?这道腾讯牛客题的关键是围绕“大文件外部随机打乱”讲清概念、机制、取舍和边界。已排序大文件随机打乱不能直接 Fisher-Yates 全量加载。常见精确方案是为每条记录生成随机 key,然后按随机 key 做外部排序;近似方案是分桶随机分配、桶内 shuffle,再随机输出桶顺序。
进程和线程有什么区别,线程优先级如何理解?
进程和线程有什么区别,线程优先级如何理解?这道腾讯牛客题的关键是围绕“进程线程区别与线程优先级”讲清概念、机制、取舍和边界。进程是资源隔离和拥有单位,线程是同一进程内的调度执行单位。同一进程线程共享地址空间、堆、全局变量和文件描述符,但有独立栈、寄存器、TLS 和调度状态。线程优先级要放到调度器语境理解,Linux 普通线程受 CFS/nice 权重影响,实时线程受 SCHED_FIFO/SCHED_RR 优先级影响。
Linux 中如何远程检查端口是否连通?
Linux 中如何远程检查端口是否连通?这道腾讯牛客题的关键是围绕“Linux 端口连通与占用排查”讲清概念、机制、取舍和边界。远程检查端口连通常用 nc -vz host port、telnet host port、curl -v、nmap 或 bash /dev/tcp;本机查看端口被哪个进程占用常用 ss -lntp、netstat -lntp 或 lsof -i :port。
Linux 中 source 命令的作用是什么?
Linux 中 source 命令的作用是什么?这道腾讯牛客题的关键是围绕“Linux source 命令”讲清概念、机制、取舍和边界。source 或 . 命令会在当前 shell 进程中执行脚本,而不是启动新的子 shell。因此脚本里导出的环境变量、函数、alias 或 cd 修改会影响当前 shell 会话。
进程和线程有什么区别?
进程和线程有什么区别?这道腾讯牛客题的关键是围绕“进程与线程区别及上下文切换”讲清概念、机制、取舍和边界。进程是资源拥有和隔离单位,线程是同一进程内的调度执行单位。同一进程的线程共享地址空间、堆、全局变量和文件描述符,但有独立栈、寄存器上下文、线程局部存储和调度状态。
epoll 的 EPOLLONESHOT 是什么,适用于什么场景?
epoll 的 EPOLLONESHOT 是什么,适用于什么场景?这道腾讯牛客题的关键是围绕“epoll EPOLLONESHOT”讲清概念、机制、取舍和边界。EPOLLONESHOT 表示某个 fd 上的事件被触发并返回一次后,内核会临时禁用这个 fd 的后续事件通知。应用处理完当前事件后,需要用 epoll_ctl 的 EPOLL_CTL_MOD 重新 armed,才能再次收到通知。
Linux 下如何查看进程状态?
Linux 下如何查看进程状态?这道腾讯牛客题的关键是围绕“Linux 进程状态与 ps 输出”讲清概念、机制、取舍和边界。Linux 常见进程状态包括 R 运行或可运行、S 可中断睡眠、D 不可中断睡眠、T 停止、Z 僵尸。ps aux 还能看到 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME、COMMAND 等字段。
Linux 下如何查看一个进程打开了哪些文件?
Linux 下如何查看一个进程打开了哪些文件?这道腾讯牛客题的关键是围绕“查看进程打开文件”讲清概念、机制、取舍和边界。Linux 查看进程打开了哪些文件,常用 lsof -p PID,或 ls -l /proc/PID/fd。输出里不仅有普通文件,也包括 socket、pipe、eventfd、anon_inode 和已删除但仍被占用的文件。
Linux 下如何终止一个进程?
Linux 下如何终止一个进程?这道腾讯牛客题的关键是围绕“Linux 终止进程”讲清概念、机制、取舍和边界。Linux 终止进程通常先用 kill -TERM PID 发送 SIGTERM,让进程有机会优雅退出;无响应时再考虑 kill -KILL 或 kill -9。也可用 pkill/killall 按名称发送信号。
GDB 调试其他进程时为什么能读取其状态和内存信息?
GDB 调试其他进程时为什么能读取其状态和内存信息?这道腾讯牛客题的关键是围绕“GDB attach 与 ptrace 权限”讲清概念、机制、取舍和边界。GDB 调试其他进程能读取其状态和内存,核心依赖操作系统提供的 ptrace 调试接口。gdb attach 到目标进程后,内核会暂停目标进程,并允许调试器读取寄存器、内存和映射信息。
为什么线程上下文切换的开销通常小于进程上下文切换?
为什么线程上下文切换的开销通常小于进程上下文切换?这道腾讯牛客题的关键是围绕“进程与线程区别及上下文切换”讲清概念、机制、取舍和边界。进程是资源拥有和隔离单位,线程是同一进程内的调度执行单位。同一进程的线程共享地址空间、堆、全局变量和文件描述符,但有独立栈、寄存器上下文、线程局部存储和调度状态。
Linux 文件系统的基本存储结构是什么?
Linux 文件系统的基本存储结构是什么?这道腾讯牛客题的关键是围绕“Linux 文件系统存储结构”讲清概念、机制、取舍和边界。Linux 文件系统基本存储结构包括 superblock、inode、dentry、data block、inode/block bitmap、journal 和 page cache。目录项把文件名映射到 inode,inode 保存权限、大小、时间戳和数据块索引,data block 保存文件内容。
进程间和线程间分别有哪些同步方式?
进程间和线程间分别有哪些同步方式?这道腾讯牛客题的关键是围绕“线程同步与进程同步方式”讲清概念、机制、取舍和边界。线程同步发生在同一进程共享地址空间内,常用 mutex、rwlock、condition variable、semaphore、barrier、atomic 和 futex;进程同步跨地址空间,常用命名信号量、文件锁、共享内存配进程共享 mutex、管道、消息队列和 socket。
Java 中实现多线程有哪些方式?
Java 中实现多线程有哪些方式?这道腾讯牛客题的关键是围绕“Java 线程与多线程实现方式”讲清概念、机制、取舍和边界。Java 实现多线程可以从 Thread、Runnable、Callable/Future、线程池和 CompletableFuture 等方式回答。更底层看,Java 线程通常映射到操作系统原生线程,由 JVM 负责创建、调度协作、栈管理和状态维护。
Java 线程是如何实现的?
Java 线程是如何实现的?这道腾讯牛客题的关键是围绕“Java Thread 到 OS 线程实现”讲清概念、机制、取舍和边界。现代 HotSpot 中 Java Thread 通常映射到操作系统原生线程,JVM 内部有 JavaThread/OSThread 等结构承接 Java 层 Thread 对象和 OS 调度实体。
platform driver 的 probe 没有执行,可能是什么原因?
这题考 Linux platform 驱动匹配排障,回答要先判断是否完成设备和驱动匹配,再检查设备树、模块、表项和资源依赖。
一个 I2C 传感器在新板子上如何从设备树到驱动到用户态 bring up?
这题考新板传感器 bring-up 的全链路能力,回答要覆盖硬件确认、设备树描述、驱动匹配、寄存器验证和用户态接口。
Linux 驱动如何用异步通知把设备数据准备好这件事通知用户程序?
这题考 Linux 驱动事件通知机制,回答要讲清用户进程开启异步通知、驱动维护 fasync 队列、数据就绪时发送信号并由用户再读取数据。
Linux 用户空间和内核空间如何隔离,mmap 映射的是哪类地址?
这题考虚拟地址空间和驱动映射,回答要区分用户虚拟地址、内核虚拟地址、物理页和设备寄存器映射。
应用层调用 open 后如何进入内核驱动的 open?
这题考 VFS 到字符设备驱动的调用链,回答要从用户态系统调用、路径解析、inode/file、major/minor 到 file_operations.open 讲清楚。
驱动 probe 成功但设备仍异常,说明什么,如何排查?
这题考驱动 bring-up 排障思路,回答要说明 probe 成功只代表绑定和初始资源申请成功,不代表设备功能完全正确。
设备树中配置 64 位地址空间时,reg 里的四个数字分别表示什么?
这题考设备树地址编码规则,回答要强调 reg 由父节点的 address-cells 和 size-cells 决定,四个数字通常是 64 位地址高低和 64 位长度高低。
pinctrl 子系统如何调用设备树内容,描述符起什么作用?
这题考 pinctrl 子系统和设备树的关系,回答要说明设备树描述 pin state,pinctrl 核心解析成映射,控制器描述符提供可用引脚、复用和配置操作。
platform 与设备树是什么关系,二者有什么区别?
这题考 Linux 设备模型基础,回答要区分 platform 是非可发现设备的总线/驱动框架,设备树是描述硬件资源的数据来源。
Linux 驱动 probe 失败时资源清理策略是什么,devm_* 如何简化清理?
这题考驱动资源生命周期管理,回答要说明手动清理需按申请逆序 unwind,devm_* 把资源绑定到 device 生命周期并在失败或移除时自动释放。
驱动里申请 GPIO 或中断一般调用哪些接口,为什么不能直接操作寄存器?
这题考内核资源管理意识,回答要说明 GPIO 和 IRQ 应通过 descriptor、设备树和 devm 接口申请,不能绕过 pinctrl/irqchip 直接写寄存器。
ARM64 架构下 Linux 中断处理流程是什么,需要保存哪些寄存器?
这题考 ARM64 Linux 中断入口和上下文保存,回答要讲清异常向量、保存 pt_regs、GIC 分发、通用中断层处理和返回恢复。
insmod 和 modprobe 有什么区别,驱动模块依赖如何处理?
这题考内核模块加载工具差异,回答要说明 insmod 只插入指定 ko,modprobe 会按模块库、别名和依赖自动加载。
Linux 内核模块的 module_init 底层原理是什么?
这题考内核模块初始化机制,回答要说明 module_init 宏把初始化函数注册到特定入口,加载模块时内核完成 ELF 装载、符号解析、重定位后调用它。
Linux 内核空间和用户空间有哪些通信方式?
这题考内核用户态交互方式选型,回答要按控制、数据流、事件通知、配置调试和大块共享分别说明适用场景。
驱动中如何把内核内存拷贝到用户空间,需要注意什么?
这题考驱动用户拷贝安全,回答要说明必须使用 copy_to_user 等接口,检查长度和返回值,避免在原子上下文、持自旋锁或暴露未初始化数据。
Linux I2C 子系统和 input 子系统如何协作完成触摸屏驱动上报?
这题考触摸屏驱动架构,回答要把总线驱动负责寄存器访问、输入子系统负责事件上报、中断负责触发读取串起来。