挑战Java15-40k面试进行中

    技术2023-08-08  114

    1、TCP、UDP、HTTP区别?

    TCP三次握手机制 第一次:客户端发送一个SYN包到服务端,并进入SYN_SEND状态,等待服务端的响应。 第二次:服务端收到SYN包,并确认,同时自己也发送一个SYN包,即SYN+ACK包,此时服务端进入SYN_RECV状态。 第三次:客户端收到服务端的SYN+ACK包,向服务端发送一个确认ACK包,进入ESTABLISHED状态,完成连接

    UDP

    UDP也是传输层的一个协议。但是与TCP不同的是,UDP不是面向连接的,并不保证传输的可靠性,没有TCP的建立连接的三次握手机制,对于传输效率上面有了提升。

    HTTP

    HTTP是在应用层的一个协议,本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传输协议。  HTTP协议基于请求\响应模型的,并且是基于TCP协议的。

     

    2、tcp和udp是哪层的协议?

    OSI七层网络模型      TCP/IP四层概念模型           对应网络协议

    传输层                  传输层                  TCP(传输控制协议)、UDP(用户数据报协议)

    3、TCP通信连接模式及其特点?

    通信连接模式主要有以下三大类:

    (一)SERVER/CLIENT方式

    1.一个Client方连接一个Server方,或称点对点(peer to peer):  2.多个Client方连接一个Server方,这也是通常的并发服务器方式。  3.一个Client方连接多个Server方,这种方式很少见,主要  用于一个客户向多个服务器发送请求情况。

    (二)连接方式

    1.长连接 

    Client方与Server方先建立通讯连接,连接建立后不断开,  然后再进行报文发送和接收。这种方式下由于通讯连接一直  存在,可以用下面命令查看连接是否建立: 

    netstat –f inet|grep 端口号(如5678)。 

    此种方式常用于点对点通讯。 

    2.短连接 

    Client方与Server每进行一次报文收发交易时才进行通讯连  接,交易完毕后立即断开连接。此种方式常用于一点对多点  通讯,比如多个Client连接一个Server.

    (三)发送接收方式 

    1.异步 

    报文发送和接收是分开的,相互独立的,互不影响。这种方  式又分两种情况: 

    (1)异步双工:接收和发送在同一个程序中,有两个不同的  子进程分别负责发送和接收  (2)异步单工:接收和发送是用两个不同的程序来完成。 

    2.同步 

    报文发送和接收是同步进行,既报文发送后等待接收返回报文。  同步方式一般需要考虑超时问题,即报文发上去后不能无限等  待,需要设定超时时间,超过该时间发送方不再等待读返回报  文,直接通知超时返回。  

    实际通信方式是这三类通信方式的组合。比如一般书上提供的  TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的  组合是基本不用的,比较常用的有价值的组合是以下几种: 

    同步短连接Server/Client  同步长连接Server/Client  异步短连接Server/Client  异步长连接双工Server/Client  异步长连接单工Server/Client 

    其中异步长连接双工是最为复杂的一种通信方式,有时候经  常会出现在不同银行或不同城市之间的两套系统之间的通信。  比如金卡工程。由于这几种通信方式比较固定,所以可以预  先编制这几种通信方式的模板程序。

    4、ISO8583报文结构?什么是位图?

    报文结构:报文长度(2字节)+TPDU(5字节)+报文头(6字节)+域数据(指令码(0域 2字节)+位图(8/16字节,如果首字节为1,表示使用扩展域,为16字节)+其他域数据)

    位图:位图,又称为点阵图像、像素图或栅格图像,是由像素(图片元素)的单个点组成。这些点可以进行不同的排列和染色以构成图样。

    5、简述RPC框架,原理及其特点,如何实现一个RPC框架?

    简述RPC框架:RPC(Remote Procedure Call)–远程过程调用,通过网络通信调用不同的服务,共同支撑一个软件系统,微服务实现的基石技术。使用RPC可以解耦系统,方便维护,同时增加系统处理请求的能力。

    原理:

    特点:解耦系统,方便维护,同时增加系统处理请求的能力

    如何实现一个RPC框架?

    从下面几个方面思考,仅供参考:

    1.通信模型:假设通信的为A机器与B机器,A与B之间有通信模型,在Java中一般基于BIO或NIO;。

    2.过程(服务)定位:使用给定的通信方式,与确定IP与端口及方法名称确定具体的过程或方法;

    3.远程代理对象:本地调用的方法(服务)其实是远程方法的本地代理,因此可能需要一个远程代理对象,对于Java而言,远程代理对象可以使用Java的动态对象实现,封装了调用远程方法调用;

    4.序列化,将对象名称、方法名称、参数等对象信息进行网络传输需要转换成二进制传输,这里可能需要不同的序列化技术方案。如:protobuf,Arvo等。

     

    Processed: 0.012, SQL: 10