C++面试复习(7)2025.4.25
1,说一说常用的 Linux 命令(NIUKE)
1,cat 查看文件内容
cat filename2,rm 删除
rm filename:删除文件。
rm -r directory:删除目录及其内容。
rm -f filename:强制删除文件(不询问确认)。3,cp 复制
cp source destination:复制文件或目录。
cp -r source_directory destination_directory:递归复制目录及其内容。
示例:
cp source.txt /home/user/destination.txt
cp -r my_folder /home/user/backup/4,pwd 显示当前工作目录5,tar 对文件打包
tar -cvf archive.tar file1 file2:将文件 file1 和 file2 打包成 archive.tar 文件。
tar -xvf archive.tar:解压 archive.tar 文件。
tar -czvf archive.tar.gz folder:将目录 folder 压缩成 .tar.gz 格式。
tar -xzvf archive.tar.gz:解压 .tar.gz 文件。
示例:
tar -cvf archive.tar my_folder
tar -xzvf archive.tar.gz6,free 查看内存试用情况
free:显示内存的使用情况,包括总内存、已用内存、空闲内存等。
free -h:以可读性更高的格式显示内存使用情况(比如 MB、GB)。
简述一下 GDB 常见的调试命令
1.启动调试:
gdb ./your_program2.设置断点:
(gdb) break main # 在 main 函数处设置断点
(gdb) break 10 # 在第 10 行设置断点3.运行程序:
(gdb) run # 启动程序
(gdb) run arg1 arg2 # 带参数启动程序4.单步执行:
(gdb) step # 单步进入函数
(gdb) next # 单步跳过当前行,进入下一个语句5.继续执行:
(gdb) continue # 继续程序运行,直到下一个断点6.查看变量值:
(gdb) print var_name # 打印变量的当前值7.查看堆栈信息:
(gdb) backtrace # 显示函数调用栈8.退出 GDB:
(gdb) quit
3.说一说进程调度算法有哪些!?
答:总:先来先服务(FCFS)调度算法、短作业优先(SJF)调度算法、优先级调度算法、高响应比优先调度算法、时间片轮转调度算法、多级反馈队列调度算法
分:
1,先来先服务(FCFS)调度算法 先来先去服务调度算法是一种最简单的调度算法,也称为先进先出或严格排队方案。每次调度都是从后备作业(进程)队列中选择一个或多个最先进入该队列的作业(进程),将它们调入内存,为它们分配资源、创建进程,当每个进程就绪后,它加入就绪队列。当前正运行的进程停止执行,选择在就绪队列中存在时间最长的进程运行。 2. 短作业优先(SJF)调度算法 短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业(进程),将它们调入内存运行,短进程优先(SPF)调度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或者发生某件事而阻塞时,才释放处理机。 3. 优先级调度算法 优先级调度算法又称优先权调度算法,该算法既可以用于作业调度,也可以用于进程调度,该算法中的优先级用于描述作业运行的紧迫程度。在作业调度中,优先级调度算法每次从后备作业队列中选择优先级最髙的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列;在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。 4. 高响应比优先调度算法 高响应比优先调度算法主要用于作业调度,该算法是对 FCFS 调度算法和 SJF 调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。 5. 时间片轮转调度算法 时间片轮转调度算法主要适用于分时系统。每次调度时,把 CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几 ms 到几百 ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。 6. 多级反馈队列调度算法 多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合和发展,通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标。
说一说什么是大端、小端,如何判断大端和小端
解释:大端”和“小端”是描述计算机如何存储多字节数据(如整数或浮点数)的两种方式。它们定义了数据在内存中的字节序(byte order)排列顺序。
大端:大端表示数据的高字节(即最重要的字节)存储在内存的低地址处,而低字节(即最不重要的字节)存储在内存的高地址处。
小端:小端表示数据的低字节(即最不重要的字节)存储在内存的低地址处,而高字节(即最重要的字节)存储在内存的高地址处在代码中,unsigned char *c = (unsigned char *)&x; 将 unsigned int * 类型的指针(指向 x 的指针)转换为 unsigned char * 类型的指针。这样,c 便指向了 x 内存中存储的第一个字节。
什么是孤儿进程,什么是僵尸进程,如何解决僵尸进程
孤儿进程是指那些父进程已经退出或终止,但是它们自己仍然在运行的进程。孤儿进程会被 init 进程(通常是 PID 为 1 的进程)收养。init 进程会定期回收这些孤儿进程的资源,防止它们成为僵尸进程。僵尸进程是指已经完成执行(即已经终止),但其父进程尚未调用 wait() 或类似系统调用来读取其退出状态的进程。换句话说,僵尸进程是已终止但没有被完全清理的进程,它们仍然占据着进程表中的一个条目,虽然它们不再执行任何代码。
最常见的解决方式是父进程在子进程终止后调用 wait() 或 waitpid() 函数来获取子进程的退出状态,并清理僵尸进程。
在上面的代码中,父进程通过 signal(SIGCHLD, handle_signal) 来注册一个信号处理程序,当子进程退出时,父进程会通过 handle_signal() 自动清理僵尸进程。
说一说进程通信的方式有哪些
无名管道:主要用于父子进程之间的通信。它不需要创建文件,通常通过 fork() 创建子进程时传递数据命名管道(FIFO):在文件系统中创建一个特殊的文件作为管道,通过该文件进行进程间通信。可以用于无亲缘关系的进程间通信。等
说一说进程有多少种状态,如何转换
新建、就绪、运行、阻塞、终止、**挂起(就绪挂起、阻塞挂起)
转换:
创建:一个进程启动,首先进入创建状态,需要获取系统资源创建进程管理块(PCB:Process Control Block)完成资源分配。- 就绪状态:在创建状态完成之后,进程已经准备好,处于就绪状态,但是还未获得处理器资源,无法运行。- 运行状态:获取处理器资源,被系统调度,当具有时间片开始进入运行状态。如果进程的时间片用完了就进入就绪状态。- 阻塞状态:在运行状态期间,如果进行了阻塞的操作,此时进程暂时无法操作就进入到了阻塞状态,在这些操作完成后就进入就绪状态。等待再次获取处理器资源,被系统调度,当具有时间片就进入运行状态。- 终止状态:进程结束或者被系统终止,进入终止状态。