zoukankan      html  css  js  c++  java
  • 基础问答【二】

    网络编程

    【1】线程和进程的区别

    •  一个程序至少有一个进程,一个进程至少有一个线程
    • 进程是资源分配的最小单位,线程是程序执行的最小单位
    • 一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行

      主要差别在它们是不同的操作系统资源管理方式,进程有独立的地址空间,一个进程奔溃后,在保护模式下不会对其它的进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,是共享地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程进行切换时,耗费资源较大,效率差一些,但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

      每个独立的线程有一个程序运行的入口,顺序执行的序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。从逻辑角度来看,多线程的意义在于一个应用程序中,有个多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。

      多线程和多进程的区别?

       1)多进程数据是分开的,共享复杂,需要用IPC,同步简单,多线程共享进程数据简单,同步复杂

       2)进程创建销毁、切换复杂、速度慢

       3)进程占用内存多,CPU利用率低

       4)进程间不会互相影响,一个线程挂掉将导致整个进程挂掉

     

     【2】三次握手与四次握手

      

        

    三次握手过程说明:
    1、由客户端发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,seq=x,x为随机生成数值)
    2、由服务端回复客户端发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将SYN置为1,而且会产生ACK字段,ACK字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,
       以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接。
    3、客户端收到服务端发送的TCP建立验证请求后,会使自己的序列号加1表示,并且再次回复ACK验证请求,在服务端发过来的seq上加1进行回复。(SYN=1,ACK=y+1,seq=x+1)
    

      

    四次握手过程:
    由于TCP连接是全双工的,断开连接会比建立连接麻烦一点点。
    1、客户端先向服务器发送FIN报文,请求断开连接,其状态变为FIN_WAIT1;
    2、服务器收到FIN后向客户端发送ACK,服务器的状态围边CLOSE_WAIT;
    3、客户端收到ACK后就进入FIN_WAIT2状态,此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送;
    4、直到发完数据,就会发送FIN报文,此时服务器进入LAST_ACK状态;
    5、客户端收到服务器的FIN后,马上发送ACK给服务器,此时客户端进入TIME_WAIT状态;
    6、再过了2MSL长的时间后进入CLOSED状态。服务器收到客户端的ACK就进入CLOSED状态。至此,还有一个状态没有出来:CLOSING状态。
    
    CLOSING状态表示: 客户端发送了FIN,但是没有收到服务器的ACK,却收到了服务器的FIN, 这种情况发生在服务器发送的ACK丢包的时候,因为网络传输有时会有意外。

     【3】自旋锁和互斥锁的区别?

      

     【4】什么是原子操作?

      原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就会一直运行到结束

     【5】什么是滑动窗口?

      TCP协议里窗口机制有2种,

     【6】TCP重发机制怎么实现的?

      1.滑动窗口机制

      2.选择重传

    服务器开发

    【1】帧同步与状态同步的理解

    所谓同步,就是要多个客户端表现效果是一致的

    最大的区别就是战斗核心逻辑写在哪,状态同步的战斗逻辑在服务端,帧同步的战斗逻辑在客户端

    在状态同步下,客户端更像是服务端数据的表现层

    • 流量:状态同步比帧同步的流量消耗大,每次改变都需要同步属性,服务器压力更大
    • 安全性:状态同步比帧同步高,逻辑和数据都在服务端,
    • 断线重连:状态同步更好做,

    【2】怎么断线重连?

    【3】卡帧怎么处理?

    【4】帧同步与状态同步实现的方法?

    做一个优秀的程序媛
  • 相关阅读:
    软件工程-事后Postmortem 会议
    软件工程-项目复审
    团队作业-冲刺博客(日更)
    团队作业-冲刺博客(任务与计划)
    团队作业-需求改进&系统设计
    软件工程团队作业-需求规格说明书
    TooBug,出撃!
    FileReader
    Javascript刷新页面的几种方法:
    软件工程-个人项目
  • 原文地址:https://www.cnblogs.com/oytt/p/14971357.html
Copyright © 2011-2022 走看看