当准备 Linux 面试时,以下是一些可能会遇到的常见 Linux 面试题:
1. 什么是Linux?解释一下Linux操作系统的特点。
2. 什么是Linux内核?Linux内核的作用是什么?
3. 如何在Linux系统上查看当前的IP地址和子网掩码?
4. 如何在Linux系统上查看当前的内存使用情况?
5. 如何在Linux系统上查看CPU使用情况?
6. 列出你知道的Linux常见命令,并解释它们的功能。
7. 如何在Linux系统上查看一个文件的内容?
8. 怎样在Linux系统上查看正在运行的进程?
9. 请解释一下什么是文件权限,并说明 rwx 权限表示的含义。
10. 如何在Linux系统上安装软件包?
11. 怎样在Linux系统上重启或关机?
12. 解释一下Linux系统中的硬链接和软链接。
13. 怎样使用grep命令在文件中搜索特定的字符串?
14. 怎样使用scp命令在不同的Linux系统之间复制文件?
15. 怎样查找Linux系统中的大文件或大文件夹?
16. 解释一下什么是Linux文件系统以及常见的文件系统类型。
17. 如何在Linux系统中查看日志文件?
18. 怎样使用crontab设置定时任务?
19. 解释一下Linux中的环境变量,以及如何设置和使用环境变量。
20. 怎样使用tar命令对文件和目录进行打包和压缩?
这些问题只是一些可能的示例,你还可能面对其他与Linux相关的问题。建议你在面试前对这些问题进行准备,并确保对Linux的基本概念、命令和常见操作有一定的掌握。同时,记得在回答问题时要简洁明了,并尽量提供具体的实例或命令来支持你的回答。
1.标准IO是标准C库定义的一组输入输出的函数接口,而文件IO是系统定义的一组输入输出的函数接口。
2.标准IO有缓存机制,而文件IO没有缓存机制,每次都引起系统调用。
3.标准IO只能操作普通文件,而文件IO处理目录文件其余文件都可以操作。
4.标准IO是通过流来操作文件,而文件IO是围绕文件描述符进行操作,文件描述符是非负整数,依次分配。
5.标准IO默认打开三个流,stdin,stdout,stderr;文件IO默认打开三个文件描述符,0(标准输入),1(标砖输出),2(标准错误);
静态库和动态库的本质区别是代码载入时刻不同
1.静态库:静态库在程序编译时被连接到目标代码。
优点:程序运行不需要该静态库,运行时不需要库,运行效率高。
缺点:(1)程序将静态库的代码复制到目标代码中,代码体积大。
(2)静态库进行升级后,程序需要重新编译。
2.动态库:动态库是在运行时被载入代码中。
优点:(1)不需要将代码复制到程序中,代码体积小。
(2)库升级后,不需要重新编译,升级简单。
(3)不同的程序若需要相同的动态库,动态库存在一份即可。
缺点:运行时库必须存在,移植性差。
1.当父进程比子进程先结束,子进程成为孤儿进程,内init进程收养,成为后台进程。
2.当子进程比父进程先结束,父进程没有及时对子进程进行回收,此时子进程成为僵尸进程,要避免僵尸进程的产生。
守护进程:该类进程在后台运行,运行时间比较长,一般在Linux启动时运行,在系统关闭时停止执行,脱离终端,并且按照周期执行。
1.创建子进程,父进程退出(fork),让子进程成为孤儿进程,成为后台进程;
2.在子进程中创建会话(setsid),让子进程成为会话组组长,为了让子进程完全脱离终端
3.改变子进程运行路径为根目录,程序运行的路径不能删除或卸载。(chdir("/"))
4.修改文件权限掩码,提高文件权限,增强灵活性umask(0);
5.关闭文件描述符,关闭不需要的文件描述符(close)
相同点:进程和线程都为系统提供了并发执行能力。
不同点:
资源和调度:进程是资源分配的最小单位,线程是系统调用的最小单位。
地址空间:一个进程创建的多个线程共享进程的资源,而进程之间地址空间相互独立。
通信机制:线程之间通信相对简单,通过全局变量就可相互通信,但要考虑临界资源的问题,而进程之间的通信相对复杂,需要进程间的通信机制(3-4G内核空间)进行通信。
安全性:进程的安全性相对较差,当一个进程结束时会导致所有线程退出,进程相对安全。
死锁:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源和通信造成的阻塞,如果没有外力的作用,它们都将无法推动下去。
1.互斥使用:当资源被一个线程占有时,别的线程不可使用
2.不可抢占:资源申请者不能强制夺取资源占有者的资源,只能等待资源占有者主动释放
3.请求和保持:资源请求者在请求资源的同时保持对原有资源的占有
4.循环等待:存在一个等待队列,p1占有p2的资源,p2占有p3的资源,p3占有p1的资源,形成一个等待环路。
1.同步:指的是多个任务(线程),按照规定的顺序执行共同完成一件事情。
2.互斥:多个线程访问临界资源时,同一时间内只能有一个线程访问临界资源
信号量,互斥锁+条件变量,信号灯集
1.无名管道,2.有名管道,3.信号,4.共享内存,5.消息队列,6.信号,7.套接字
1.无名管道只能用于具有亲缘关系的两个进程之间的通信,而有名管道可以用于两个没有任何关系的进程之间的通信。
2.无名管道和有名管道都采用半双工通信,
3.无名管道可以看成特殊的文件,可以通过文件IO进行操作,文件系统不可见。有名管道可以用路径名来指出,文件系统可见,但内容保存在内存;
4.有名管道和无名管道都基于文件描述符的通信方式,当无名管道建立时会自动创建两个文件描述符fd[0],fd[1],fd[0]是固定的读端,fd[1]是固定的写端。而有名管道需要自己打开文件获得文件描述符。
5.有名管道和无名管道遵循先进先出的原则,有名管道不支持lseek操作
共享内存:1.创建key值(ftok),2.创建或打开共享内存(shmget)3.映射共享内存到用户空间(shmat)4.撤销映射(shmdt)5.删除共享内存(shmctl)
信号灯集:1.创建key值(ftok)2.创建或打开信号灯集(semget)3.初始化信号灯集(semctl)4.进行pv操作(semop)5.删除信号灯集(semctl)
消息队列:1.创建key值(ftok)2.创建或打开消息队列(msgget)3.添加消息:将消息按照类型添加到已打开的队列末尾(msgsnd)4.读取消息:将消息按照类型从队列中读取(msgrcv)5.删除消息队列(msgctl)
1.客户端通过connect函数主动连接,客户端发送一个SYN握手包,并且进入发送状态
2.服务器通过accept建立通信,服务器发送ACK表示确认,并且发送SYN包给客户端,发送完成后进入接收状态。
3.客户端收到服务器的ACK和SYN后向服务器发送确认包,发送完毕后进入确认状态。服务器收到ACK包后也进入确认状态。
1.主动关闭方会发送一个FIN包给被动方进入FIN_WAIT状态
2.被动方收到FIN包后,会给主动方发送ACK包表示确认,并进入CLOSE_WAIT状态,如果有数据没有发送完毕,则继续发送,直到发送完毕。
3.被动方发送FIN包,进入LAST_ACK状态
4.主动关闭方收到FIN包后,会回复一个ACK包。被动关闭方收到ACK后关闭连接。
1.序列号和确认机制
每次数据传输,都会有PUSH,每次PUSH包发送之后,接收者都会回复ACK包,表示确认,是TCP可靠通信的原因之一。
2.超时重发机制
如果发送方在一段时间内没有收到确认消息,发送者会认为数据丢失,重新发送数据
3.三次握手机制
4.四次挥手机制