Linux问答题

vi编辑器有哪些工作模式,它们之间是如何进行切换的?

命令模式:

命令模式是启动vi后进入的工作模式,并可转换为文本编辑模式和最后行模式。在命令模式下,
从键盘上输入的任何字符都被当作编辑命令来解释,而不会在屏幕上显示。
如果输入的字符是合法的vi命令,则vi就会完成相应的动作;否则vi会响铃警告。

lz只要记住 曼切斯特是1从高到低 0从低到高
差分曼切斯特 是遇到0要在上一个码的末位置跳一下 1则不用

文本编辑模式:

文本编辑模式用于字符编辑。在命令模式下输入i(插入命令)、a(附加命令)等命令后进入文本编辑模式,
此时输入的任何字符都被vi当作文件内容显示在屏幕上。按Esc键可从文本编辑模式返回到命令模式。

最后行模式:

在命令模式下,按“:”键进入最后行模式,此时vi会在屏幕的底部显示“:”符号年作为最后行模式的提示符,
等待用户输入相关命令。命令执行完毕后,vi自动回到命令模式。

共享库与静态库相比有什么优点?

静态库
当程序与静态库连接时,库中目标文件所含的所有将被程序使用的函数的机器码被 copy 到最终的可执行文件中。
这就会导致最终生成的可执行代码量相对变多,相当于编译器将代码补充完整了,
优点,这样运行起来相对就快些。不过会有个缺点: 占用磁盘和内存空间. 静态库会被添加到和它连接的每个程序中,
而且这些程序运行时, 都会被加载到内存中. 无形中又多消耗了更多的内存空间。

动态库
与共享库连接的可执行文件只包含它需要的函数的引用表,
而不是所有的函数代码,只有在程序执行时, 那些需要的函数代码才被拷贝到内存中。
优点,这样就使可执行文件比较小, 节省磁盘空间,
更进一步,操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用,也同时节约了内存。
缺点,不过由于运行时要去链接库会花费一定的时间,执行速度相对会慢一些,总的来说静态库是牺牲了空间效率,
换取了时间效率,共享库是牺牲了时间效率换取了空间效率,没有好与坏的区别,只看具体需要了。
另外,一个程序编好后,有时需要做一些修改和优化,如果我们要修改的刚好是库函数的话,
在接口不变的前提下,使用共享库的程序只需要将共享库重新编译就可以了,
而使用静态库的程序则需要将静态库重新编译好后,将程序再重新编译一便。
这也是使用过程当中的差别,以现在的项目举例,在远程更新的时候,
如果只是.so动态库封装内容变化了,那么只需要更新.so即可。

名词解释:(1)套接字 (2)阻塞 (3)可重入性 (4)僵尸进程

1.Socket(套接字)可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中
2.指进程或线程在执行设备操作或管道,或则网络时,不能获取到资源就被挂起
3.可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。
4.僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。

什么是信号?什么是可靠信号?

是一个软件中断;通知进程发生了某件事情,中断进程当前操作,让进程去处理这件事情
可靠性是指信号是否会丢失,即该信号是否支持排队;
如果支持排队就是可靠的,不支持排队就是不可靠的。

线程与进程相比,具有哪些特点?

1.进程有自己独立的地址空间;而线程共享进程的地址空间;
2.一个程序至少有一个进程,一个进程至少有一个线程;
3.线程是处理器调度的基本单位,但进程不是;
4.二者均可并发执行

什么是ThreadLocal,ThreadLocal有哪些应用场景?

ThreadLocal叫做线程变量,即ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。场景1:
保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保了独享的对象的线程安全。
场景2:
用作每个线程内需要独立保存信息,以便供其他方法更方便地获取该信息的场景。每个线程前面执行的方法保存了信息后,后续方法可以通过ThreadLocal直接获取到,避免传参。

什么是协程,协程与线程相比有哪些优势?

协程(Coroutines)是一种比线程更加轻量级的存在,一个线程可以拥有多个协程。协程不是被操作系统内核所管理的,而是完全由程序所控制,在用户态执行。
和多线程比,协程具有以下优势:
极高的执行效率:因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显;
不需要多线程的锁机制:因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。

什么是惊群效应?它有哪些不良影响?

惊群效应也叫雷鸣群体效应,指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么操作系统会唤醒等待的所有进程(或者线程),
但最终却只可能有一个进程(线程)对该事件进行处理,而其他进程(线程)只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。
惊群效应到底消耗了什么
(1)、系统对用户进程/线程频繁地做无效的调度,上下文切换系统性能大打折扣。
(2)、为了确保只有一个线程得到资源,用户必须对资源操作进行加锁保护,进一步加大了系统开销。

9.什么是epoll?epoll与pool,select相比,具有什么特点?

1.单个进程所能打开的最大连接数有FD_SETSIZE宏定义,poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的,epoll连接数有上限,但是很大
2.epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题
3.epoll通过内核和用户空间共享一块内存来实现的,而select和poll是需要内核将消息传递到用户空间的,需要内核拷贝动作

10.给出Socket编程TCP服务器和客户端API的调用关系图

原文地址:https://www.cnblogs.com/lavard/p/15240721.html