Linux 系统复习知识要点

秋招复习笔记——八股文部分:操作系统 操作系统部分的一些笔记 阅读详情

【IO】
    1. 库函数和系统函数的区别:
        共同点:
            1) 都是设计者设计出来供使用者使用的函数接口;
            2) 都是模块化的编程,做到代码的重用;
        不同点:
            1) 系统函数是底层向上层提供的函数接口,底层为上层进行服务;
                而库函数更多是对系统函数的封装(标准IO)和常见算法(math、jpeg、ts)的实现
            2) 移植性:系统函数只能在对应系统下被调用,
                而库函数它可以在多个系统平台下被调用;
            3) 执行效率:系统函数效率高于库函数;
        
    2. 标准IO和文件IO的区别:
        缓冲方式:标准IO(缓冲IO)    文件IO(非缓冲IO)
        操作对象:标准IO(流FILE*)      文件IO(文件描述符--非负整数,即文件的ID号)
        共同点:
        不同点:缓存方式、操作对象、函数接口
        
        标准IO常用的函数:
        fopen/fclose    ---打开和关闭标准IO流
        fgets/fputs     ---
        fgetc    ---从流中读取一个字符(按照字符输入)int fgetc(FILE *stream);     stream为打开的文件流
        fputc    ---往流中输出c(按照字符输出)int fputs(int c, FILE *stream);
        fwrite/fread
        perror  ---输出用户信息及errno对应的错误信息
        error  ---全局错误码
        注意:fgets函数容易造成缓冲区溢出,不推荐使用。
        文件IO常用的函数:
        open()/creat()   ---文件的打开和创建
        close()          ---关闭一个打开的文件
        read()           ---文件的读取
        write()          ---缓冲区的数据写入
        lseek()          ---显示定位一个打开的文件
    3. 动态库和静态库:
        静态库:对函数库的链接是放在编译时期完成的
        动态库:把对一些库函数的链接载入推迟到程序运行的时期        
        共同点:
        不同点:
            1) 连接方式不同:
                静态库在链接的时候,将对应的库代码在拷贝到可执行程序中;
                动态库在链接的时候,将对应的库代码信息添加可执行程序中;
            2) 库代码的加载时间不同:
                静态是在程序编译链接的时候,而动态库是在程序执行的时候;
            3) 体积不同:
                静态库的体积要大一些;
            4) 执行效率:
                静态库在执行的时候,按顺序执行,不需要调整
                动态库需要在程序执行的时候跳转到动态库执行,所以效率偏低;
            5) 静态库在执行的不需要库的支持,而动态库需要库的支持;
            
进程、线程:

    1. 多进程相关概念:
        
    2. 进程的状态(运行态、等待态、停止态、死亡态);
    
    3. 僵尸进程、孤儿进程:
        1) 如何产生的;
        2) 所占的资源:
        3) 谁的危害更大;
    4. 进程的创建:
        1) 可执行程序执行;
        2) 可以在进程中调用fork和vfork函数来创建;
    
    5. fork和vfork的区别:
        共同点:在一个父进程中去创建一个新的子进程;
        不同点:
            1) 父子进程执行顺序:
                fork创建的子进程和父进程执行顺序是随机的,不确定;
                vfork创建的子进程和父进程执行顺序是确定的,子进程执行优先于父进程执行,
                    并且是子进程执行结束或者在子进程中调用exec函数族之后,父进程才会执行;
            2) 所占空间:
                fork创建的子进程会完全拷贝父进程的整个资源,父子进程操作的资源是相对独立
                vfork创建的子进程会和父进程共享同一物理内存的数据,写时拷贝。
            
            3) 创建或者销毁的效率:
                fork的效率低于vfrok;
            4) 应用:
                fork创建的子进程可以用来调用进程执行函数或者通过exec函数族去调用其他可执行程序;
                vfork更多用于通过exec函数族去调用其他可执行程序
    
    6. exec函数的认识:
        l:可执行程序的命令以列表的方式使用
        v:可执行程序的命令以数组的方式使用
        e:可以给可执行程序传递环境变量
        p:可执行如果在环境变量指定了路径的情况下,可以直接用名字就OK
        
    7. 进程的退出:
        _exit/exit
        相同点:都是让进程退出
        不同:
            _exit:是系统函数,只会让进程退出,不会刷新缓存中的数据,
            进程退出的时候,不能保证数据的完整性;
            exit:是库函数,进程退出之前,会刷新缓存中的数据,
            在退出整个进程,可以保证数据的完整性;
    8. 进程等待:wait、waitpid
        
    9. 进程的类型:交互进程、批处理进程、守护进程
        1) 守护进程的创建流程:
             (1)创建子进程,父进程退出   ---fork()/exit()函数
             (2)在子进程中创建新会话     ---setsid()函数
             (3)改变当前目录为根目录     ---chdir()函数
             (4)重设文件权限掩码         ---umask(0)函数
             (5)关闭文件描述符           ---close(fd)函数   
            
        2) 守护进程的应用:
        
线程:共享进程相同地址空间的多个任务。
    10. 进程间的通信方式:
    无名管道(pipe)、有名管道(fifo)、信号(signal)
    IPC对象: 共享内存 、消息队列、信号灯
    11. 同步和互斥:
        1) 概念:同步指的是多个任务(线程)   互斥:保证共享数据的操作完整性
        2) 他们之间的关系;
        3) 实现了互斥,不一定实现了同步,实现了同步一定实现了互斥,对还是错?为什么?
            错,
    12. 多线程:
        库: pthread
        线程的创建 pthread_create
        线程的阻塞 pthread_join
        线程的退出 pthread_exit
        线程的取消 pthread_cancel
        子线程和主线程分离 pthread_detach

    多进程和多线程的区别:
        共同点:多任务的并发执行
        不同点:
        
    生产者和消费者的问题:
    读者和写者的问题:
    哲学家吃饭和思考:
    
通用网络编程接口socket:
    1. 基本概念:
        四层模型和七层模型:每一层的名称、作用、协议
        网络体系结构(OSI):指网络的层次结构和每层所使用协议的集合
        两类重要体系结构:
                OSI和TCP/IP
            OSI模型           TCP/IP协议
         应用层     
         表示层               应用层            Telnet、www、FTP、Ping、http 
         会话层
         传输层                                 TCP、UDP
         网络层                                 IP、ICMP、IGMP
         数据链路层                      
         物理层                                 网卡驱动和物理接口
            
        常见的协议:
            TCP/IP UDP TCP http/https dns smtp ftp tftp arp rarp 
        socket类型:
            流式套接字(SOCK_STREAM)  ---->用于TCP编程
            数据报套接字(SOCK_DGRAM) ---->用于UDP编程
            原始套接字(SOCK_RAW)
        ip地址:
            ip地址的分类 A、b c d e
            IP:     192.168.3.160 = > 分类
            网关     192.168.3.1
            子网掩码 255.255.255.0
            A : 1个字节网络地址+3个字节主机地址    0  0.0.0.1 - 127.255.255.255
            B : 2个字节网络地址+2个字节主机地址    10 128.0.0.1 - 191.255.255.255
            C : 3个字节网络地址+1个字节主机地址 C类IP以110开头,从 192.0.0.1 到 223.255.255.255
            网络地址 = IP & 子网掩码    
            主机地址 = IP & ~子网掩码
        大端:字节的高位在内存中放在存储单元的起始位置
        小端:字节的低位在内存中放在存储单元的起始位置
        
    2.    TCP(传输控制以协议):是一种面向连接的传输层协议,它能提供可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信) 
         UDP:数据报套接字,无连接,不可靠;传输效率高
        TCP:流式套接字, 有连接,可靠的(数据为差错、无丢失、无失序、无重复到达),传输效率低
            
        TCP服务端的通信流程:socket(创建套接字)->bind(绑定)->listen(监听)->accept(连接客户端)->send/recv(接收和发送)->close(关闭)
        TCP客户端的通信流程:socket->connect(请求服务器连接)->send/recv->close
        UDP服务端的通信流程:socket->bind->recvfrom->sendto
        UDP服务端的通信流程:socket->sendto->recvfrom
        三次握手:    1. 客户端向服务器发送syn请求;
                        2. 服务器向客户端回复ack应答,同时向客户端发送syn请求;
                        3. 客户端向服务器回复ack应答;
        为什么是三次握手,而不是两次或者四次?
                在第一次:服务器知道客户端可以发送数据
                在第二次:客户端知道服务器可以接受和发送数据
                在第三次:服务器知道客户端可以接受和发送数据
                两次不能证明对端能够接受和发送数据;
                三次可以完成不需要更多的次数
        
        DOS攻击是如何实现的,
Dos攻击:https://www.cnblogs.com/davidwang456/p/3590846.html{
        DOS攻击之详解--转载
源地址没有找到,间接引用地址:http://wushank.blog.51cto.com/3489095/1156004

DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒绝服务的缩写。

    DoS是Denial of Service的简称,即拒绝服务,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务。最常见的DoS攻击有计算机网络带宽攻击和连通性攻击。

 一、概念理解:

    作个形象的比喻来理解DoS。街头的餐馆是为大众提供餐饮服务,如果一群地痞流氓要DoS餐馆的话,手段会很多,比如霸占着餐桌不结账,堵住餐馆的大门不让路,骚扰餐馆的服务员或厨子不能干活,甚至更恶劣……相应的计算机和网络系统则是为Internet用户提供互联网资源的,如果有黑客要进行DoS攻击的话,可以想象同样有好多手段!今天最常见的DoS攻击有对计算机网络的带宽攻击和连通性攻击。带宽攻击指以极大的通信量冲击网络,使得所有可用网络资源都被消耗殆尽,最后导致合法的用户请求无法通过。连通性攻击指用大量的连接请求冲击计算机,使得所有可用的操作系统资源都被消耗殆尽,最终计算机无法再处理合法用户的请求。
    传统上,攻击者所面临的主要问题是网络带宽,由于较小的网络规模和较慢的网络速度的限制,攻击者无法发出过多的请求。虽然类似“thepingofdeath”的攻击类型只需要较少量的包就可以摧毁一个没有打过补丁的UNIX系统,但大多数的DoS攻击还是需要相当大的带宽的,而以个人为单位的黑客们很难使用高带宽的资源。为了克服这个缺点,DoS攻击者开发了分布式的攻击。攻击者简单利用工具集合许多的网络带宽来同时对同一个目标发动大量的攻击请求,这就是DDoS攻击。
无论是DoS攻击还是DDoS攻击,简单的看,都只是一种破坏网络服务的黑客方式,虽然具体的实现方式千变万化,但都有一个共同点,就是其根本目的是使受害主机或网络无法及时接收并处理外界请求,或无法及时回应外界请求。其具体表现方式有以下几种:
  1. 制造大流量无用数据,造成通往被攻击主机的网络拥塞,使被攻击主机无法正常和外界通信。
  2. 利用被攻击主机提供服务或传输协议上处理重复连接的缺陷,反复高频的发出攻击性的重复服务请求,使被攻击主机无法及时处理其它正常的请求。
  3. 利用被攻击主机所提供服务程序或传输协议的本身实现缺陷,反复发送畸形的攻击数据引发系统错误的分配大量系统资源,使主机处于挂起状态甚至死机。
二、攻击流程:

    要理解dos攻击,首先要理解TCP连接的三次握手过程(Three-wayhandshake)。在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
    1.第一次握手:建立连接时,客户端发送SYN包((SYN=i)到服务器,并进入SYN SEND状态,等待服务器确认;
    2.第二次握手:服务器收到SYN包,必须确认客户的SYN (ACK=i+1 ),同时自己也发送一个SYN包((SYN=j)}即SYN+ACK包,此时服务器进入SYN_RECV状态;
    3.第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=j+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。
 
    在上述过程中,还有一些重要的概念:
 
   1. 半连接:收到SYN包而还未收到ACK包时的连接状态称为半连接,即尚未完全完成三次握手的TCP连接。
   2. 半连接队列:在三次握手协议中,服务器维护一个半连接队列,该队列为每个客户端的SYN包(SYN=i )开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于SYN_ RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
   3. Backlog参数:表示半连接队列的最大容纳数目。
   4. SYN-ACK重传次数:服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间 仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息、从半连接队列中删除。注意,每次重传等待的时间不一定 相同。
   5. 半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
 
上面三个参数对系统的TCP连接状况有很大影响。
 
    SYN洪水攻击属于DoS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。 SYN攻击除了能影响主机外,还可以危害路由器、防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施。从图 4-3可看到,服务器接收到连接请求(SYN=i )将此信息加入未连接队列,并发送请求包给客户端( SYN=j,ACK=i+1 ),此时进入SYN_RECV状态。当服务器未收到客户端的确认包时,重发请求包,一直到超时,才将此条目从未连接队列删除。配合IP欺骗,SYN攻击能 达到很好的效果,通常,客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送SYN包,服务器回复确认包,并等待客户的确认,由于源地址是不存 在的,服务器需要不断的重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN 请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。过程如下:
 
       攻击主机C(地址伪装后为C')-----大量SYN包---->被攻击主机
       C&apos;<-------SYN/ACK包----被攻击主机
 
由于C’地址不可达,被攻击主机等待SYN包超时。攻击主机通过发大量SYN包填满未连接队列,导致正常SYN包被拒绝服务。另外,SYN洪水攻击还可以通过发大量ACK包进行DoS攻击。
三、攻击手段:

    拒绝服务攻击是一种对网络危害巨大的恶意攻击。今天,DoS具有代表性的攻击手段包括PingofDeath、TearDrop、UDPflood、SYNflood、LandAttack、IPSpoofingDoS等。看看它们又是怎么实现的。 

   1. 死亡之ping (pingofdeath)
    ICMP(InternetControlMessageProtocol,Internet控制信息协议)在Internet上用于错误处理和传递控制信息。它的功能之一是与主机联系,通过发送一个“回音请求”(echorequest)信息包看看主机是否“活着”。最普通的ping程序就是这个功能。而在TCP/IP的RFC文档中对包的最大尺寸都有严格限制规定,许多操作系统的TCP/IP协议栈都规定ICMP包大小为64KB,且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区。"PingofDeath"就是故意产生畸形的测试Ping(PacketInternetGroper)包,声称自己的尺寸超过ICMP上限,也就是加载的尺寸超过64KB上限,使未采取保护措施的网络系统出现内存分配错误,导致TCP/IP协议栈崩溃,最终接收方宕机。
   2. 泪滴 (teardrop)
   泪滴攻击利用在TCP/IP协议栈实现中信任IP碎片中的包的标题头所包含的信息来实现自己的攻击。IP分段含有指示该分段所包含的是原包的哪一段的信息,某些TCP/IP协议栈(例如NT在servicepack4以前)在收到含有重叠偏移的伪造分段时将崩溃。
 
   3. UDP泛洪(UDPflood)
    UDPflood攻击:如今在Internet上UDP(用户数据包协议)的应用比较广泛,很多提供WWW和Mail等服务设备通常是使用Unix的服务器,它们默认打开一些被黑客恶意利用的UDP服务。如echo服务会显示接收到的每一个数据包,而原本作为测试功能的chargen服务会在收到每一个数据包时随机反馈一些字符。UDPflood假冒攻击就是利用这两个简单的TCP/IP服务的漏洞进行恶意攻击,通过伪造与某一主机的Chargen服务之间的一次的UDP连接,回复地址指向开着Echo服务的一台主机,通过将Chargen和Echo服务互指,来回传送毫无用处且占满带宽的垃圾数据,在两台主机之间生成足够多的无用数据流,这一拒绝服务攻击飞快地导致网络可用带宽耗尽。
 
   4. SYN泛洪(SYNflood)
    SYNflood攻击:我们知道当用户进行一次标准的 TCP(TransmissionControlProtocol)连接时,会有一个3次握手过程。首先是请求服务方发送一个 SYN(SynchronizeSequenceNumber)消息,服务方收到SYN后,会向请求方回送一个SYN-ACK表示确认,当请求方收到 SYN-ACK后,再次向服务方发送一个ACK消息,这样一次TCP连接建立成功。“SYNFlooding”则专门针对TCP协议栈在两台主机间初始化连接握手的过程进行DoS攻击,其在实现过程中只进行前2个步骤:当服务方收到请求方的SYN-ACK确认消息后,请求方由于采用源地址欺骗等手段使得服务方收不到ACK回应,于是服务方会在一定时间处于等待接收请求方ACK消息的状态。而对于某台服务器来说,可用的TCP连接是有限的,因为他们只有有限的内存缓冲区用于创建连接,如果这一缓冲区充满了虚假连接的初始信息,该服务器就会对接下来的连接停止响应,直至缓冲区里的连接企图超时。如果恶意攻击方快速连续地发送此类连接请求,该服务器可用的TCP连接队列将很快被阻塞,系统可用资源急剧减少,网络可用带宽迅速缩小,长此下去,除了少数幸运用户的请求可以插在大量虚假请求间得到应答外,服务器将无法向用户提供正常的合法服务。
 
    5. Land(LandAttack)攻击
    在Land攻击中,黑客利用一个特别打造的SYN包--它的原地址和目标地址都被设置成某一个服务器地址进行攻击。此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时,在Land攻击下,许多UNIX将崩溃,NT变得极其缓慢(大约持续五分钟)。
     6. IP欺骗dos攻击
     这种攻击利用TCP协议栈的RST位来实现,使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。假设现在有一个合法用户(100.100.100.100)已经同服务器建立了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为100.100.100.100,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从100.100.100.100发送的连接有错误,就会清空缓冲区中已建立好的连接。这时,合法用户100.100.100.100再发送合法数据,服务器就已经没有这样的连接了,该用户就被拒绝服务而只能重新开始建立新的连接。

     7. smurf攻击

    Smurf是一种简单但有效的DDoS攻击技术,它利用了ICMP(Internet控制信息协议)。ICMP在Internet上用于错误处理和传递控制信息。它的功能之一是与主机联系,通过发送一个“回音请求”(echorequest)信息包看看主机是否“活着”。最普通的ping程序就使用了这个功能。Smurf是用一个偷来的帐号安装到一个计算机上的,然后用一个伪造的源地址连续ping一个或多个计算机网络,这就导致所有计算机所响应的那个计算机并不是实际发送这个信息包的那个计算机。这个伪造的源地址,实际上就是攻击的目标,它将被极大数量的响应信息量所淹没。对这个伪造信息包做出响应的计算机网络就成为攻击的不知情的同谋。

四、常见的DoS攻击与防护
   1. SYN Flood攻击
      原理:
    问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的 ACK报文的(第三次握手无法完成),这 种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒 -2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个 非常大的半连接列表而消耗非常 多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重 试。实际上如果服务器的TCP/IP栈不够强大,最 后的结果往往是堆栈溢出崩溃---即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的 正常请求比率非常之小),此时从 正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。
      防范:
    第一种是缩短SYN Timeout时间 
    第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。
           >netstat -n -p tcp >result.txt
 
    2. Smurf攻击:
       原理:
    发送伪装的ICMP数据包,目的地址设为某个网络的广播地址,源地址设为要攻击的目的主机,使所有收到此ICMP数据包的主机都将对目的主机发出一个回应,使被攻击主机在某一段时间内收到 成千上万的数据包
       防范:
     在cisco路由器上配置如下可以防止将包传递到广播地址上:
         Router(config-if)# no ip directed-broadcast
 
    3. Ping of Death
       原理:
     "ping of death"攻击就是我们常说的"死亡Ping"
这种攻击通过发送大于65536字节的ICMP包使操作系统崩溃;通常不可能发送大于65536个字节的ICMP包,但可以把报文分割成片段,然后在目标主机上重组;最终会导致被攻击目标缓冲区溢出,引起拒绝服务攻击。有些时候导致telnet和http服务停止,有些时候路由器重启。
   
    4. 泪滴攻击
       原理:
     对于一些大的IP数据包,往往需要对其进行拆分传送,这是为了迎合链路层的MTU(最大传输单元)的要求。比如,一个6000字节的IP包,在MTU为2000的链路上传输的时候,就需要分成3个IP 包。在IP报头中有一个偏移字段和一个拆分标志(MF)。如果MF标志设置为1,则表示这个IP包是一个大IP包的片段,其中偏移字段指出了这个片段在整 个IP包中的位置。例如,对一个6000字 节的IP包进行拆分(MTU为2 000),则3个片段中偏移字段的值依次为0,2000,4000。这样接收端在全部接收完IP数据包后,就可以根据这些信息重新组装这几个分次接收的拆分IP包。在这 里就有一个安全漏洞可以利用了,就是如果黑客们在截取IP数据包后,把偏移字段设置成不正确的值,这样接收端在收到这些分拆的数据包后,就不能按数据包中 的偏移字段值正确组合这些拆 分的数据包,但接收端会不断尝试,这样就可能致使目标计算机操作系统因资源耗尽而崩溃。
 
     5. DRDOS
        原理:
    攻击时,攻击者巧妙的利用了反弹服务器群来将洪 水数据包反弹给目标主机 反弹服务是指某些服务器在收到一个请求数据报后就会产生一个回应数据报。所有的 Web 服务器、DNS 服务器及路 由器都是反弹服务器,他们会对 SYN 报文或其他 TCP 报文回应 SYNACKs 或 RST 报文, 以及对一些 IP 报文回应 ICMP 数据报超时或目的地不可达消息的数据 报。任何用于普通目的 TCP 连 接许可的网络服务器都可以用做数据包反射服务器
        
        }
        
    并发服务器的模型:    
        多进程、多线程、IO多路
    IO模型:
        阻塞
        非阻塞
        
        IO多路复用
            机制:
            1. 创建一个集合,把所要关心的文件描述符装入集合中;
            2. 查看集合中是否有准备就绪的事件,有准备就绪,就返回;没有准就绪的事件,就阻塞
            3. 循环的判断找到准备就绪事件所对应的文件描述符
            4. 处理事件;
            
            select:集合数多、执行效率比较低
                创建的集合数根关心事件的类型有关,读事件需要创建一个读事件的集合;
                fd_set
                查看的时候,会将所要关心的集合传递进去,同时返回准备就绪事件文件描述符;
                轮询的时候,将集合中所有的文件描述符进行判断;效率很低
                处理事件
            poll:
                在创建集合的时候,只会创建一个集合 struct pollfd poll[1024];
                struct pollfd {
                    int   fd;         /* file descriptor */
                    short events;     /* requested events */
                    short revents;    /* returned events */
                };
                
                轮询的时候,将整个集合中所有文件描述依次遍历;效率很低;
                poll对比select,好处是创建集合的数量可以减少;不足是空间消耗较大;

            epoll:
                在创建集合的时候,只要创建一个epoll实例(文件描述符)
                int epoll_create(int size);
                    参数size:表示集合所能关心事件所对应文件描述符的个数;
                    返回值:epoll实例所对应的文件名描述符;
                添加事件:
                int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
                    参数1, epfd表示epoll实例;
                    参数2,op(选项)
                    EPOLL_CTL_ADD 将事件和文件描述符添加到epoll实例中
                        Register the target file descriptor fd on the epoll instance referred to by the file descriptor epfd and associate the  event
                    event with the internal file linked to fd.

                    EPOLL_CTL_MOD 改变epoll实例中文件描述符所关心的事件
                        Change the event event associated with the target file descriptor fd.

                    EPOLL_CTL_DEL 删除epoll实例对应的事件文件描述符
                        Remove  (deregister) the target file descriptor fd from the epoll instance referred to by epfd.  The event is ignored and can
                    be NULL (but see BUGS below).:
                    参数3,fd所要操作的文件描述符
                    参数4,event 所要操作的事件;
                
                
                int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
                    参数1, epoll实例
                    参数2, events存储准备就绪的多个事件;
                    参数3, maxevents 所关心的个数;
                    参数4, 超时时间;
                
        信号驱动IO
        

    
        
                
            
            
            

Java后端面试该复习什么?只需一张图 在今年这个恶劣的大环境下,换个更好的工作甚至只是换个工作都并不容易。这不前两天任正非在网上传出“寒气”,未来的企业要准备好过苦日子,岗位只会更少,那我们未来的求职压力只会更大。所以,在准备面试的时候对于面试要点做到心中有数,有完善的知识网络,可以让我们有的放矢,事半功倍。注意,本文所述内容是针对Java后端开发岗位。主要是面试要点,并不会列举详细的面试问题,详细问题未来会列为专题专门做补充。不多说,推荐保存下图!‍,获得共享文档链接,欢迎一同编辑。 阅读详情

相关推荐

嵌入式操作系统网络编程复习题

一、 题型和分值 1、 单项选择题 10分 10题 2、 判断题 5分 5题 3、 简答题 25分 5题 4、 编程题 60分 4题 二、 复习要点 1、 文件编程 文件内容的复制 从键盘输入字符并写入文件中,接收到特定字符结束 把文件中的字符转换成大写(使用主函数参数输入文件名) 2、 创建子进程 子进程输出字符 父进程 等待子进程结束 然后退出 3、 编写网络程序 分别编写客户端和服务器端程序 客户端输入信息传给服务器 服务器接收后显示 客户端传递字符串给服务器后 服务器显

qq_46338854的博客 2157

DOS攻击之详解--转载

源地址没有找到,间接引用地址:http://wushank.blog.51cto.com/3489095/1156004 DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒绝服务的缩写。     DoS是Denial of Service的简称,即拒绝服务,造成...

weixin_34342992的博客 173

DOA估计算法从原理到仿真——CBF、Capon、MUSIC算法

从原理出发理解并实现经典的DOA估计算法

m0_55845774的博客 1万+

C语言 系统函数与库函数的区别、网络编程(UDP)

系统函数与库函数的区别: 系统函数可以说是原材料,库函数是对原函数的封装。 ======================================================================== 网络编程 1.创建套接字: 函数原型: int socket(int domain , int tpye , int potocol); 头文件: #include <sy...

weixin_42191545的博客 806

为什么传统CNN在视网膜分割中败给Mamba?从血管拓扑学揭秘Serp-Mamba的蛇形扫描黑科技

本文深入分析了传统CNN在视网膜血管分割任务中的局限性,特别是在处理高分辨率图像和复杂血管拓扑结构时。针对这些问题,文章重点介绍了Serp-Mamba模型的核心创新——蛇形交织自适应扫描(SIA)机制,该机制通过让扫描路径自适应地贴合血管曲率,并结合模糊驱动双重校准(ADDR)模块应对极端类别失衡,从而在视网膜血管分割任务上实现了性能的显著突破。

ss78901的博客 894

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6012

Linux复习资料

1、DNS服务器的守护进程是named。 2、Linux系统中DNS设置文件是/etc/resolv.conf。 3、Linux内核版本有稳定版和开发版两种。 4、超级用户root的家目录是 /root。 5、Shell命令根据执行方式分为内置命令和外部命令 。 6、Bash默认最多保存 1000 个Shell命令的历史记录。 7、在Linux系统中,切换用户的命令是su。 8、在一块磁盘上,主分区最大个数是4个。 9、Linux文件系统物理结构有顺序、串联、索引和多重索引 等方式。 10、如果未指

aiaias的博客 2588

STM32F407驱动OV2640摄像头全栈解析:DCMI+DMA+SCCB协同设计

图像采集是嵌入式视觉系统的基石,其核心在于传感器与MCU间的数据通路构建。原理上需理解并行接口(如DCMI)的硬件同步捕获机制、串行控制总线(如SCCB/I²C)的寄存器级配置逻辑,以及DMA在高吞吐数据搬运中的关键作用。技术价值体现在解放CPU、保障实时性、降低功耗,并支撑JPEG压缩与RGB565直显等差异化应用。典型场景包括智能终端实时预览、低带宽图像上传、工业现场视频监控及教学实验平台搭建。本文以STM32F407与OV2640集成实践为载体,深入剖析DCMI时序约束、SCCB软件模拟实现及DMA循

weixin_36151775的博客 180

Linux期末复习总结

Linux是unix在基础上开发,具有全部功能。**Linux特点:**开放性、多用户、多任务、出色的稳定性、良好的用户界面、设备独立性、丰富的网络功能、安全性、可移植性由4个主要部分组成:内核、Shell、文件系统、应用程序**内核:**硬件方面:控制硬件设备、管理内存、通过接口、处理基本I/O;软件方面:管理文件系统、为程序分配内存和CPU时间。**Shell:**系统的用户界面、命令解释器、编程语言。/为根目录 目前流行的文件系统:ext2、ext3、fat等。

孙宇航的博客 5568

【Java基础】还看不懂JDK7 HashMap环的产生原理你来打我

JDK7对旧table数据重定位到新table的函数transfer如下,其中重点关注部分以标出。 头插法正常情况下: 并发情况下 线程1只执行了Entry<K,V> next = e.next就被挂起了,而线程2正常执行完毕,结果图如下: 线程1接着下面继续执行: 通过逐步分析跟绘图可以知道红色部分会有环产生。 ...

sowhat 4244

在 SAP S/4HANA 里把 OData Client Proxy 用顺手,借助 Service Consumption Model 2.0 提前打通远程 OData 调用

摘要:本文探讨了在SAP S/4HANA集成开发中调用外部OData服务的解决方案。传统ABAP代码直接调用方式存在诸多不便,而OData Client Proxy提供了更稳定的途径。文章详细介绍了如何通过Service Consumption Model 2.0在SAP BTP生成模型类,并将其移植到SAP S/4HANA进行适配改造,最终注册为可用的OData Proxy Client。该方法适用于较新版本的SAP S/4HANA系统,通过源码替换实现模型转换,为系统集成提供了高效的类型安全调用方案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1092

Linux操作系统期末复习

Linux的期末复习知识点[考点]合集。

qq_67931344的博客 2936

Pyinstaller打包为可执行文件编码错误的问题

Pyinstaller打包为可执行文件编码错误的问题 写好的python程序在vscode上运行没有任何问题,将程序利用pyinstaller打包后,运行程序发生了错误。 错误代码 UnicodeDecodeError: ‘utf-8' codec can't decode byte 0xce in position 20-21:invalid cotinuation byte 网上找到的解决方案是: 1.在命令行中输入 chcp 65001 2.按正常方式进行封装 pyinstaller

xuefeng_he的博客 1559

linux操作系统基础及应用课后答案,Linux操作系统课后习题答案及复习要点

《Linux操作系统课后习题答案及复习要点》由会员分享,可在线阅读,更多相关《Linux操作系统课后习题答案及复习要点(7页珍藏版)》请在人人文库网上搜索。1、Linux操作系统课后习题答案及复习要点- 一 - Linux 操作系统 填空部分 1. Linux是在GRL版权协议下发行的遵循POSIX 标准的操作系统内核. 2. Linux内核的作者是linus torvalds . 3. Linu...

weixin_42522148的博客 1367

⭐️VMwareWorkstation17.0虚拟机搭建WindowsXP虚拟机(完整安装步骤详细图文教程)

Windows XP是微软公司研发的计算机操作系统,于2001年10月25日正式发布。其名字中“XP”的意思来自英文中的“体验”(Experience)。Windows XP使用了Luna图形用户界面和双列开始菜单,提升了系统的安全性和工作性能,提供了WiFi支持,简化了软件的安装和运行,并增加了远程桌面功能。

Python老吕的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

中南民族大学Linux考试题,中南民族大学_Linux_复习资料.pdf

中南民族大学_Linux_复习资料.pdf第一章思考题:1. 1.UNIX 的大部分代码是用 C 语言编写的2.UNIX 系统的特点有哪些?3.什么是Linux,创始人是谁?4.LInux 操作系统的诞生发展和成长过程始终依赖着的重要支柱有哪些?5.简述Linux 系统的特点?6.常见的Linux 发行版本有哪些?二。单项选择1.linux 最初是以()操作系统为模版而开发出...

weixin_39892019的博客 357

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Unix复习提纲-APUE

复习要点: (1)什么是操作系统?什么是UNIX操作系统?什么是Linux操作系统?它们之间的关系是怎样的? (2)UNIX操作系统有哪些典型的分支? (3)什么是Shell?内置变量$$、$*、$@、$?、$#的具体含义是什么? (4)常用的Shell命令,如ls、cd、dd、pwd、ps、cp、chown、chmod、mkdir等的具体用法。 (5)什么是内部命令?什么是外部命令?它们的区别是...

weixin_30856725的博客 161

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

linux ctrlc 退出循环_linux基础命令归纳,再也不怕没有资料复习啦

- MERRY CHRISTMAS -linux命令归纳马上就是圣诞节啦提前祝大家圣诞节快乐距离2021年也只剩短短的12天,不知大家在将要过去的2020年收获到了什么东西呢?不过距离今年的圣诞节也只剩5天啦,不知道大家今年的圣诞节有没有人一起过呢,哈哈不过最痛苦的莫过于期末考试了,临近紧张的复习周,今年要考的科目也挺多(概率论,数据结构,数字逻辑,英语,linux,马原等等),提起li...

weixin_36249618的博客 430

Linux 复习导图

个人的复习思路。

WSK1454360679的博客 106

1、Linux 入门指南:基础与实践

本博客为 Linux 入门指南,全面介绍了 Linux 操作系统的基础知识与实践技能。内容涵盖 Linux 的基本概念、发行版选择、软件许可、命令行操作、文件与进程管理、用户权限设置、网络连接配置以及脚本编写等核心主题。通过系统化的知识结构和丰富的实践建议,帮助新手快速上手 Linux,并为深入学习和实际应用打下坚实基础。

gin88的博客 56

Linux就该这么学——Day6

6.1 一切从“/”开始 Linux 系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。 FHS 是根据以往无数 Linux 系统用户和开发者的经验而总结出来的,用于指导我们应该把文件保存到什么位置,以及告诉用户应该在何处找到所需的文件。 目录名称 应放置文件的内容 /boot 开机所需文件—内核、开机菜单以及所需配置文件等 /dev 以文件形式存放任

MiLK_iro的博客 521

操作系统复习第四天

weixin_45844931的博客 114

大数据技术复习划分知识点

本文摘要: Hadoop技术体系核心知识点梳理,包含五大模块:1)HDFS架构与读写流程,重点解析NameNode、DataNode角色及Shell操作命令;2)MapReduce计算框架核心流程与WordCount案例实现;3)Hive数据仓库的表设计、分区优化及SQL调优技巧;4)Linux环境基础命令与Java异常处理机制;5)高频考点包括集群状态检查、HDFS块大小、核心配置文件及YARN架构组件。全文聚焦分布式系统核心原理与实践操作,适用于大数据开发人员快速掌握关键技术要点。

wdloumiga的博客 351

操作系统(5) (POSIX--Linux线程编程pthread_t/create/join/exit)

讲解基本POSIX语法

2301_80176774的博客 604

Java后端面试八股文三天复习:构建知识网络从容应对

后端开发知识体系庞大,Java基础、并发编程、JVM、Spring、MySQL、Redis、Kafka等中间件看似独立,实则通过数据流转和故障排查链路紧密相连。面试官追问“为什么”的背后,是在考察候选人能否理解原理、场景与代价,而不是单纯背诵结论。以技术链路为骨架,把HashMap扩容、Bean生命周期、索引失效、缓存穿透等高频考点串成网络,就能在有限时间内完成高效复习。这种能力不仅服务于面试,更是日常工程实践中定位线上问题、设计高可用系统的底层支撑。掌握机制原理、明确应用场景、权衡技术代价,是后端工程师从

weixin_33404102的博客 260
上一篇: C语言基础
下一篇: 系统移植
_脏不张
博客等级 码龄9年 4粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值