知识点标签

Linux面试题解析第 2 页

Linux 相关面试题,覆盖系统调用、I/O、网络编程和服务端基础。

97 道题 6 个岗位 14 个公司

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 扰动。

如果定时任务多了单个线程处理不了,要使用多线程怎么处理?

如果定时任务多了单个线程处理不了,要使用多线程怎么处理?这道腾讯牛客题的关键是围绕“多线程任务调度与线程数配置”讲清概念、机制、取舍和边界。多线程处理任务要先把任务放进队列,再由线程池消费,避免无限创建线程。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 负责创建、调度协作、栈管理和状态维护。