999kao.com
四川托普软件投资股份有限公司8月招聘面试题107道2020810

阅读以下程序说明和C++程序,将程序段中(1)~(7)空缺处的语句填写完整。

[说明]

使用MFC的CSocket类在两个或者多个应用程序之间建立通信。服务器应用程序先创建一个特殊的 Socket,用于监听客户应用程序的连接请求,然后再创建新的Socket来完成连接。从客户和服务器两端读取该连接,直到一个需要处理的报文到来为止。以下C++程序将封装这些功能,这样所有应用程序需要完成的只是创建一个Socket连接,然后处理到来的报文。这将包括一个新的服务器Socket类、新客户端Socket类和新的报文队列类。

创建新的服务器Socket类程序的框架如下。第1个函数ListenEx()用于通知Socket开始监听客户应用程序。第2个函数OnAccept()在接收到连接请求时被调用。在其中创建新的Socket,并立刻设置它开始从客户应用程序读取报文,这些是通过调用第3个函数RecvThread()来完成的,该函数位于它自己的线程中。

[C++程序]

[ListenEX()函数]


正确答案:这是一道要求读者使用Socket与另一个Windows应用程序或者与任何支持Socket的应用程序通信的编程题。本题的解答思路如下。 题干已给出“函数ListenEx()用于通知Socket开始监听客户应用程序”ListenEx()通过调用CSocket的Listen()函数监听来自客户应用程序的连接请求。ListenEx()同时在结构中设置其调用参数这些参数最终被传递到RecvThread()函数以实现读操作。因此()空缺处应填入“Listen()”。 函数OnAccept()在接收到连接请求时被调用。它使用文本编辑器(TextEdit)重载CSocket的OnAccept()函数在其中将创建新的Socket用于建立与客户应用程序的连接同时使用由用户定义的标识符作为关键字将该Socket保存到对象映射表中。然后设置Socket进入同步模式并创建一个线程从套接字中读取数据。因此(2)空缺处应填入“newCSocket”用于完成初始化工作。 函数RecvThread()使用CSocket的Receive()函数等待直到通过套接字接收到新的报文。该线程假定每一个报文包含固定字长的报头和可变长度的报文体。对于每一个新的套接字报文RecvThread()还向应用程序发送WM_New_MESSAGE消息通知新的报文等待处理。如果套接字关闭线程将在终止前向应用程序发送WM_DONE_MESSAGE消息所以(3)空缺处应填入“len+=res”。该函数没有返回值所以(4)空缺处应填入“return 0”。 接下来添加函数SendEx()向客户应用程序发回报文该函数将根据用户定义的标识符从对象映射表中取出Socket对象然后调用线程函数向该Socket发送报文因此(5)空缺处应填入“m_mapSockets[id]”。 SendThread使用CSocket类的Send()函数将报文数据发送出去因此(6)空缺处应填入“Send”。 服务器套接字类中的最后需要创建关闭函数这个函数不仅将关闭监听套接字而且将关闭创建的所有与客户端连接的套接字因此(7)空缺处应填入“Close()”。
这是一道要求读者使用Socket与另一个Windows应用程序或者与任何支持Socket的应用程序通信的编程题。本题的解答思路如下。 题干已给出“函数ListenEx()用于通知Socket开始监听客户应用程序”,ListenEx()通过调用CSocket的Listen()函数监听来自客户应用程序的连接请求。ListenEx()同时在结构中设置其调用参数,这些参数最终被传递到RecvThread()函数以实现读操作。因此()空缺处应填入“Listen()”。 函数OnAccept()在接收到连接请求时被调用。它使用文本编辑器(TextEdit)重载CSocket的OnAccept()函数,在其中将创建新的Socket,用于建立与客户应用程序的连接,同时使用由用户定义的标识符作为关键字将该Socket保存到对象映射表中。然后,设置Socket进入同步模式,并创建一个线程从套接字中读取数据。因此(2)空缺处应填入“newCSocket”,用于完成初始化工作。 函数RecvThread()使用CSocket的Receive()函数等待,直到通过套接字接收到新的报文。该线程假定每一个报文包含固定字长的报头和可变长度的报文体。对于每一个新的套接字报文,RecvThread()还向应用程序发送WM_New_MESSAGE消息,通知新的报文等待处理。如果套接字关闭,线程将在终止前向应用程序发送WM_DONE_MESSAGE消息,所以(3)空缺处应填入“len+=res”。该函数没有返回值,所以(4)空缺处应填入“return 0”。 接下来添加函数SendEx()向客户应用程序发回报文,该函数将根据用户定义的标识符从对象映射表中取出Socket对象,然后调用线程函数向该Socket发送报文,因此(5)空缺处应填入“m_mapSockets[id]”。 SendThread使用CSocket类的Send()函数将报文数据发送出去,因此(6)空缺处应填入“Send”。 服务器套接字类中的最后需要创建关闭函数,这个函数不仅将关闭监听套接字,而且将关闭创建的所有与客户端连接的套接字,因此(7)空缺处应填入“Close()”。


TCP协议的“三次握手”中,第一次握手指的是什么( )。

A、客户端再次向服务器端发送确认信息,确认连接

B、服务器端向客户端回送一个响应,通知客户端收到了连接请求

C、客户端向服务器端发出连接请求,等待服务器确认

D、以上答案全部错误


参考答案:C


为实现可靠传输,TCP在数据传输之前要通过三次握手建立连接,下面说话正确的是( )。

A、在三次握手中,不仅要完成初始化建立连接,同时也在传送应用层数据

B、SYN标志位只有在建立连接时才被置为1,握手完成后就被置为0

C、所有主机的序列号都是从1开始

D、其中一台主机以序列号X开始,则另外一台主机的应答序列号以X+1开始


正确答案:BD


● TCP 使用三次握手协议来建立连接,设甲乙双方发送报文的初始序号分别为 X和 Y,甲方发送 (69) 的报文给乙方,乙方接收报文后发送 (70) 的报文给甲方,然后甲方发送一个确认报文给乙方便建立了连接。


正确答案:A,C


TCP使用三次握手协议来建立连接,设甲乙双方发送报文的初始序号分别为X和 Y,甲方发送(69)的报文给乙方,乙方接收报文后发送(70)的报文给甲方,然后甲方发送一个确认报文给乙方便建立了连接。

(注:ACK的下标为捎带的序号)

A.SYN=1,序号=X

B.SYN=1,序号=X+1,ACKX=1

C.SYN=1,序号=Y

D.SYN=1,序号=Y,ACKY+1=1


正确答案:A


四川托普软件投资股份有限公司8月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1:什么是arp协议?可用的回答 : ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。 问题 Q2:在Python中切片是什么?可用的回答 :从序列类型(如列表,元组,字符串等)中选择一系列项目的机制称为切片。问题 Q3:简述 三次握手、四次挥手的流程?可用的回答 : 三次握手: 初始状态:客户端A和服务器B均处于CLOSED状态,然后服务器B创建socket,调用监听接口使得服务器处于LISTEN状态,等待客户端连接。(后续内容用A,B简称代替) 1、A首先向B发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号seq=x(一般是随机的), 消息发送后,A进入SYN_SENT状态,SYN=1的报文段不能携带数据,但要消耗一个序号。 2、B收到A的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1,确认序号为ack=x+1, 然后选定自己的初始序号seq=y(一般是随机的),确认消息发送后, B进 入SYN_RCVD状态,与连接消息一样,这条消息也不能携带数据,同时消耗一个序号。 3、A收到B的确认消息后,需要给B回复确认数据,这时TCP头部中的ACK标识位值为1, 确认序号是ack=y+1,自己的序号在连接请求的序号上加1,也就是seq=x+1, 此时A进入ESTABLISHED状态,当B收到A的确认回复后,B也进入ESTABLISHED状态, 至此TCP成功建立连接,A和B之间就可以通过这个连接互相发送数据了。 四次挥手: 初始状态:客户端A和服务器B之间已经建立了TCP连接,并且数据发送完成,打算断开连接, 此时客户端A和服务器B是等价的,双方都可以发送断开请求,下面以客户端A主动发起断开请求为例。(后续内 容用A,B简称代替) 1、A首先向B发送断开连接消息,这时TCP头部中的FIN标识位值为1,序号是seq=m,m为A前面正常发送数据最后一个字节序号加1得到的, 消息发送后A进入FNI_WAIT_1状态,FIN=1的报文段不能携带数据,但要消耗一个序号。 2、B收到A的断开连接请求需要发出确认消息,这时TCP头部中的ACK标识位值为1,确认号为 ack=m+1, 而自己的序号为seq=n,n为B前面正常发送数据最后一个字节序号加1得到的, 然后B进入 CLOSE_WAIT状态,此时就关闭了A到B的连接, A无法再给B发数据,但是B仍然可以给A发数据,同时B端通知上方应用层,处理完成后被动关闭连接。 然后A收到B的确认信息后,就进入了 FIN_WAIT_2状态。 3、B端应用层处理完数据后,通知关闭连接, B向A发送关闭连接的消息,这时TCP头部中的FIN和ACK标识位值均为1, 确认号ack=m+1,自己的序号为seq=k,消息发送后B进入LACK_ACK状态。 4、A收到B的断开连接的消息后,需要发送确认消息, 这是这时TCP头部中的ACK标识位值为1,确认号ack=k+1,序号为m+1(因为A向B发送断开连接的消息时消耗了一个消息号), 然后A进入TIME_WAIT 状态,若等待时间经过2MSL后,没有收到B的重传请求, 则表明B收到了自己的确认,A进入CLOSED状态, B收到A的确认消息后则直接进入CLOSED状态。至此TCP成功断开连接。 问题 Q4:为何基于tcp协议的通信比基于udp协议的通信更可靠?可用的回答 : TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。 而UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。 不过UDP的发送速度是TCP比不了的,而且UDP的反应速度更快。 问题 Q5:Django 和 Flask 之间有什么区别?可用的回答 :Flask是一个“微框架”,主要用于具有更简单要求的小型应用程序。在Flask中,必须使用外部库。Django也可以用于更大的应用程序。它包括一个ORM。问题 Q6:简述 yield和yield from关键字?可用的回答 : 1、可迭代对象与迭代器的区别 可迭代对象:指的是具备可迭代的能力,即enumerable. 在Python中指的是可以通过for-in 语句去逐个访问元素的一些对象,比如元组tuple,列表list,字符串string,文件对象file 等。 迭代器:指的是通过另一种方式去一个一个访问可迭代对象中的元素,即enumerator。 在python中指的是给内置函数iter()传递一个可迭代对象作为参数,返回的那个对象就是迭代器,然后通过迭代器的next()方法逐个去访问。 问题 Q7:常见的HTTP方法有哪些?可用的回答 : GET:请求指定的页面信息,返回实体主体; HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于捕获报头; POST:向指定资源提交数据进行处理请求(比如表单提交或者上传文件),。数据被包含在请求体中。 PUT:从客户端向服务端传送数据取代指定的文档的内容; DELETE:请求删除指定的页面; CONNNECT:HTTP1.1协议中预留给能够将连接方式改为管道方式的代理服务器; OPTIONS:允许客户端查看服务器的性能; TRACE:回显服务器的请求,主要用于测试或者诊断。 问题 Q8:深拷贝和浅拷贝有什么区别?可用的回答 :在创建新实例类型时使用浅拷贝,并保留在新实例中复制的值。浅拷贝用于复制引用指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也将影响它的原始副本。浅拷贝允许更快地执行程序,它取决于所使用的数据的大小。深拷贝用于存储已复制的值。深拷贝不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。原始副本中所做的更改不会影响使用该对象的任何其他副本。由于为每个被调用的对象创建了某些副本,因此深拷贝会使程序的执行速度变慢。问题 Q9:、isinstance作用以及应用场景?可用的回答 : isinstance(obj, c

TCP使用3次握手协议来建立连接,设甲乙双方发送报文的初始序号分别为X和Y,甲方先发送(6)的报文给乙方,乙方接收报文后发送(7)的报文给甲方,然后甲方发送一个确认报文给乙方便建立连接(注:ACK的下标为捎带的序号)。

A.SYN=1,序号=X

B.SYN=1,序号=X+1,ACKX=1

C.SYN=1,序号=Y

D.SYN=1,序号=Y,ACKY+1=1


正确答案:A


TCP 协议在建立连接的过程中可能处于不同的状态,用 netstat 命令显示出 TCP 连接的状态为 SYN_SEND时,则这个连接正处于()。

A. 监听对方的建立连接请求
B. 已主动发出连接建立请求
C. 等待对方的连接释放请求
D. 收到对方的连接建立请求

答案:B
解析:
主机主动发出连接建立请求,状态变为syn-send


Windows中的Netstat命令显示有关协议的统计信息。当TCP连接处于SYN_SENT状态时,表示( )。

A. 已经发出了连接请求
B. 连接已经建立
C. 处于连接监听状态
D. 等待对方的释放连接响应

答案:A
解析:


Windows中的Netstat命令显示有关协议的统计信息。下图中显示列表第二列Local Address显示的是()。当TCP连接处于SYN_SENT状态时,表示( 请作答此空)。

A. 已经发出了连接请求
B. 连接已经建立
C. 处于连接监听状态
D. 等待对方的释放连接响应

答案:A
解析:


TCP 协议使用三次握手机制建立连接,其中被请求方在第二次握手时需应答的关键信息及其作用是( ) 。

A.确认号是发起方设定的初始序号加1之后的数值,确认被请求者的身份
B.确认号是发起方设定的初始序号+1,确认发起方的身份
C.确认号是被请求者设定的初始序号+1,同步将要接收的数据流编号
D.确认号是被请求者设定的初始序号+1,确认发起方的身份

答案:A
解析:
TCP建立连接采用三次握手的机制,其过程如下图所示。

服务器应答的信息中,ack=x+l中的x是发起方设定的一个初始序号,应答方应答此序号表明应答者确实收到了发起方的信息,据此预防冒充者应答,因冒充者收不到发起方的报文,不知道x的值。

更多 “四川托普软件投资股份有限公司8月招聘面试题107道2020810” 相关考题
考题 在TCP连接的三次握手过程中,第一步是由发起端发送()。A、NULL包B、SYN包C、SCK包D、UDP包正确答案:B

考题 TCP协议三次握手中的第一步是()A、客户端向服务器主动发送SYN建立连接B、服务器根据客户端SYN回复一个SYN/ACKC、客户端发送ACK确认来自服务器的SYN/ACKD、客户端向服务器主动发送带有FIN标识的数据包正确答案:A

考题 TCP会话通过3次握手来建立连接。其中第一次握手:源主机发送一个同步标志位SYN=( )的TCP数据段。源主机进入SYN_SENT状态。第二次握手:目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1。A.0 B.1 C.2 D.3 答案:B解析: TCP会话通过三次握手来建立连接。三次握手的目标是使数据段的发送和接收同步,同时也向其他主机表明其一次可接收的数据量(窗口大小)并建立逻辑连接。这三次握手的过程可以简述如下:双方通信之前均处于CLOSED状态。(1)第一次握手源主机发送一个同步标志位SYN=1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值,即SYN=1,SEQ=x。源主机进入SYN-SENT状态。(2)第二次握手目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1,同时确认序号字段表明目标主机期待收到源主机下一个数据段的序号,即ACK=x+1(表明前一个数据段已收到且没有错误)。此外,在此段中设置SYN=1,并包含目标主机的段初始序号y,即ACK=1,确认序号ACK=x+1,SYN=1,自身序号SEQ=y。此时目标主机进入SYN-RCVD状态,源主机进入ESTABLISHED 状态。(3)第三次握手源主机再回送一个确认数据段,同样带有递增的发送序号和确认序号(ACK=1,确认序号ACK=y+1,自身序号SEQ),TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。三次握手的过程如图 4所示。

考题 以下关于TCP连接“三次握手”过程的描述中,错误的是()A、客户进程发送“连接建立请求报文”不携带数据,需要给报文一个序号seqB、“连接建立请求报文”的序号seq值x是随机产生的,可以为0C、服务器进程同意建立连接,则发送SYN=1、ACK=1的“连接建立请求确认报文”D、客户进程用“连接建立请求确认报文”来确认TCP连接建立正确答案:B

考题 TCP协议的“三次握手”中,第一-次握手指的是什么?()A、客户端再次向服务器端发送确认信息,确认连接B、服务器端向客户端回送一.个响应,通知客户端收到了连接请求C、客户端向服务器端发出连接请求,等待服务器确认D、以上答案全部错误正确答案:C

考题 建立Sochet类的服务器端需要哪些步骤?()A、服务器端对任意指定的IP地址和端口号进行监听B、监听端口,等待客户端的连接C、建立一个服务器端对象,提供监听的端口号D、当获得其它客户端的连接后,停止监听,创建一个Socket类,用于通讯E、服务器端在此端口继续进行监听正确答案:B,E

考题 TCP会话通过( )次握手来建立连接。其中第一次握手:源主机发送一个同步标志位SYN=( )的TCP数据段。源主机进入( )状态。第二次握手:目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=( )。此时目标主机进入( )状态,源主机进入( )状态。而TCP释放连接可以分为( )次断开A.一 B.二 C.三 D.四 答案:C解析: TCP会话通过三次握手来建立连接。三次握手的目标是使数据段的发送和接收同步,同时也向其他主机表明其一次可接收的数据量(窗口大小)并建立逻辑连接。这三次握手的过程可以简述如下:双方通信之前均处于CLOSED状态。(1)第一次握手源主机发送一个同步标志位SYN=1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值,即SYN=1,SEQ=x。源主机进入SYN-SENT状态。(2)第二次握手目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1,同时确认序号字段表明目标主机期待收到源主机下一个数据段的序号,即ACK=x+1(表明前一个数据段已收到且没有错误)。此外,在此段中设置SYN=1,并包含目标主机的段初始序号y,即ACK=1,确认序号ACK=x+1,SYN=1,自身序号SEQ=y。此时目标主机进入SYN-RCVD状态,源主机进入ESTABLISHED 状态。(3)第三次握手源主机再回送一个确认数据段,同样带有递增的发送序号和确认序号(ACK=1,确认序号ACK=y+1,自身序号SEQ),TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。三次握手的过程如图 4所示。

考题 单选题通过在传输层使用UDP与服务器建立通信时,客户端将执行哪个操作?()A 客户端将设置会话的窗口大小。B 客户端将发送ISN到服务器以开始三次握手。C 客户端将随机选择源端口号。D 客户端将发送同步数据段以开始会话。正确答案:A解析:暂无解析

考题 TCP会话通过三次握手来建立连接。其中第一次握手:源主机发送一个同步标志位SYN=1的TCP数据段。源主机进入SYN-SENT 状态。第二次握手:目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1。此时目标主机进入( )状态。A.SYN-SENT B.SYN-RCVD C.ESTABLISHED D.CLOSE-WAIT 答案:B解析: TCP会话通过三次握手来建立连接。三次握手的目标是使数据段的发送和接收同步,同时也向其他主机表明其一次可接收的数据量(窗口大小)并建立逻辑连接。这三次握手的过程可以简述如下:双方通信之前均处于CLOSED状态。(1)第一次握手源主机发送一个同步标志位SYN=1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值,即SYN=1,SEQ=x。源主机进入SYN-SENT状态。(2)第二次握手目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1,同时确认序号字段表明目标主机期待收到源主机下一个数据段的序号,即ACK=x+1(表明前一个数据段已收到且没有错误)。此外,在此段中设置SYN=1,并包含目标主机的段初始序号y,即ACK=1,确认序号ACK=x+1,SYN=1,自身序号SEQ=y。此时目标主机进入SYN-RCVD状态,源主机进入ESTABLISHED 状态。(3)第三次握手源主机再回送一个确认数据段,同样带有递增的发送序号和确认序号(ACK=1,确认序号ACK=y+1,自身序号SEQ),TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。三次握手的过程如图 4所示。

考题 TCP会话通过3次握手来建立连接。其中第一次握手:源主机发送一个同步标志位SYN=1的TCP数据段。源主机进入SYN-SENT状态。第二次握手:目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1。此时目标主机进入(SYN-RCVD)状态,源主机进入( )状态。A.SYN-SENT B.SYN-RCVD C.ESTABLISHED D.CLOSE-WAIT 答案:C解析: TCP会话通过三次握手来建立连接。三次握手的目标是使数据段的发送和接收同步,同时也向其他主机表明其一次可接收的数据量(窗口大小)并建立逻辑连接。这三次握手的过程可以简述如下:双方通信之前均处于CLOSED状态。(1)第一次握手源主机发送一个同步标志位SYN=1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值,即SYN=1,SEQ=x。源主机进入SYN-SENT状态。(2)第二次握手目标主机接收到SYN包后发回确认数据报文。该数据报文ACK=1,同时确认序号字段表明目标主机期待收到源主机下一个数据段的序号,即ACK=x+1(表明前一个数据段已收到且没有错误)。此外,在此段中设置SYN=1,并包含目标主机的段初始序号y,即ACK=1,确认序号ACK=x+1,SYN=1,自身序号SEQ=y。此时目标主机进入SYN-RCVD状态,源主机进入ESTABLISHED 状态。(3)第三次握手源主机再回送一个确认数据段,同样带有递增的发送序号和确认序号(ACK=1,确认序号ACK=y+1,自身序号SEQ),TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。三次握手的过程如图 4所示。