编辑
2025-06-21
技术杂谈
00
请注意,本文编写于 46 天前,最后修改于 46 天前,其中某些信息可能已经过时。

目录

1
2
3
4 并发编程
5

回忆版

1

  1. 什么是操作系统
  2. 什么是文件描述符
  3. 为什么说linux的管道是一种进程间通信的机制?
  4. 为什么要避免数据竞争?
  5. 什么是设备驱动程序

2

  1. 简述mmap的作用(无须写出定义)
  2. 有人说1号进程是/usr/bin/systemd, 有人认为是/usr/bin/init, 怎么判断1号进程到底是哪一个二进制文件?
  3. 除了用户定义的全局变量,libc维护了哪些全局变量?
  4. System V ABI规定进程的初始栈中有一些auxiliary vector entries. 根据你对操作系统的理解,可以有哪些辅助数据,又有什么作用?

3

readelf -a filename如下

rela.text: 记不得offset R_X86_64_PC32 x-8 记不得offset R_X86_64_PLT32 foo-4
  1. 这个文件是什么ELF文件? R_X86_64_PC32和R_X86_64_PLT32各自是什么意思?
  2. 写出main三参数的函数。解释每个参数的含义.
  3. 动态链接的a.out执行到main函数之间的过程?
  4. LD_PRELOAD可以指定预先加载的动态链接库,你可以想到一个用它做什么有意思的应用?

4 并发编程

有字符串a,b,并行地做Longest Common Sequence

C
void Tlcs(int i, int j){ if(i==0 || j==0) return; // TODO dp[i][j] = max3(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]+(a[i]==b[j])) // TODO } int main(){ for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ spawn(Tlcs,i,j); } } join(); printf("%d\n",dp[n][m]); return 0; }

添加代码,使得可以正确同步. 允许添加初始化代码

5

  1. 什么是RAID技术? 有什么应用
  2. 如果要对一个文件进行保存,并希望在系统崩溃(断电等)之后数据仍然正确。进行的系统调用的顺序应该是怎样的?
  3. Linux的inode存放着用户的uid,如果硬盘被偷走,则可以读取所有文件。如何保护高度机密的文件?
  4. readdir函数可以遍历一个目录,在面对有上百万个文件的目录时,会遇到性能瓶颈。你觉得该如何添加新的API?