八股文是一种特殊文体,每篇文章包括破题、承题、起讲、入手、起股、中股、后股、束股八个部分,要求严格对仗,字数有限定,题目出自《四书》。 而现在大家常用八股文来指代面试中常见的一些知识、问题。日常工作中我们往往围绕业务逻辑进行开发而忽略这些看似简单却可能不能立马给出精确回答的八股问题上。所以如果你有找工作/换工作的计划,请拿出点时间看看八股,唤醒一下记忆深处的那段代码。
1. Linux中的文件描述符是什么?
文件描述符(fd) 是Linux中访问文件/设备/socket的整数索引。
- 默认预分配:
0=stdin、1=stdout、2=stderr
使用限制:
- 进程级限制:
ulimit -n 查看,默认通常1024 - 系统级限制:
/proc/sys/fs/file-max,内核总共能打开的文件数 - 可通过
setrlimit() 或修改 /etc/security/limits.conf 调整
2. Linux中进程是什么?进程的基本属性?
Linux中 进程是资源分配的基本单位。
基本属性:
每个进程有独立的 页表(虚拟地址空间隔离)
3. Linux进程间通信机制有哪些?
Linux进程间通信(IPC)机制:
- 管道(Pipe):半双工,父子进程间通信,
pipe() 创建 - 命名管道(FIFO):有文件系统路径名,无亲缘关系进程也能用
- 信号(Signal):异步通知机制(如
SIGKILL、SIGTERM)
4. 什么是/proc文件系统?常用的proc接口有哪些?
/proc文件系统是Linux内核信息的虚拟文件接口。不占磁盘空间,文件内容由内核动态生成.
常用接口:
/proc/sys/:可读写的内核参数(如 net.core.somaxconn)
/proc是Linux系统管理和调试的核心工具,很多命令(如top、ps)底层都读取/proc。
5. 信号量和共享内存有什么区别?
信号量和共享内存解决不同问题:
信号量:用于同步和互斥
共享内存:用于数据共享
6. 硬链接和软链接的区别是什么?
硬链接:
- 和原文件共享同一个 inode,是同一份数据的另一个名字
- 删除原文件不影响硬链接(只要引用计数>0数据还在)
软链接(符号链接):
用 ln file hard_link 创建硬链接,ln -s file soft_link 创建软链接。
7. 如何实现跨平台的条件编译?
__arm__、__aarch64__:ARM架构
GCC内置宏:__GNUC__、__SIZEOF_POINTER__(指针大小判断32/64位)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") 设置不同编译选项target_compile_definitions(myapp PRIVATE MY_PLATFORM_LINUX)
8. Linux中如何获取系统时间?
time():秒级精度,返回自1970年以来的秒数
gettimeofday():微秒精度,返回 struct timeval
clock_gettime():纳秒精度,推荐使用
clock_gettime(CLOCK_REALTIME, &ts):系统实时时钟clock_gettime(CLOCK_MONOTONIC, &ts):单调递增时钟
9. Linux中的ELF文件格式的基本结构?
ELF(Executable and Linkable Format) 是Linux的可执行文件格式。
ELF基本结构:
- ELF Header:魔数、架构、入口点地址、段表/节表偏移
- Program Header Table:描述段(
Segment)信息,加载器使用 - Section Header Table:描述节(
Section)信息,链接器使用 - 常见节:
.text(代码)、.data(已初始化数据)、.bss(未初始化)、.rodata(常量)
ELF类型:
10. Linux中的GDB调试常用命令和技巧有哪些?
常用命令:
- 断点:
break main、break file.c:42、break func if x>10(条件断点) - 执行控制:
next(单步过)、step(单步入)、continue、finish(执行到函数返回) - 查看变量:
print var、print *ptr、print arr[0]@10(数组) - 内存查看:
x/16xb addr(16个字节十六进制显示) - 栈信息:
backtrace(调用栈)、frame N(切换栈帧) - 多线程:
info threads、thread N