到得还来别无事,庐山烟雨浙江潮。
一、选择题
1、TCP建立连接的三次握手中,第二次握手发送的包会包含的标记,最正确的描述是()
A、SYN, PSH
B、ACK
C、SYN,ACK
D、SYN
答案:C。分析:
2、当使用TCP协议编程时,下列问思哪个是必须由程序员考虑和处理的()
A、网络拥塞处理
B、乱产数据包的重传
C、数据传输过程中的纠错
D、发送数据的格式和应用层协议
答案:D。
3、主机甲和主机乙新建一个 TCP 连接,甲的拥塞控制初始阈值为 32KB,甲向乙始终以 MSS=1KB 大小的段发送数据,并一直有数据发送;乙为该连接分面16KB 接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发送超时的情况下,经过4个RTT后,甲的发送窗口是()
A、16KB
B、1KB
C、0KB
D、32KB
答案:B。
4、现在有很多网站都开始选择HTTPS作为默认的协议,HTTPS的用途是()
A.可以加速页面的加载,提高响应速度
B.可以让服务器端主动推送消息到客户端
C.可以确保传输数据的安全性和防篡改
D.为了提高浏览器兼容性
答案:C。分析:https 中的 s 代表security ,所以用HTTPS比HTTP要来的安全。
5、TCP断开连接的四次挥手中,第四次挥手发送的包会包含的标记,最正确的描述是()
A.FIN
B. FIN, PSH
C.ACK
D. FIN,ACK
答案:C。分析:我们假设由client提出关闭,则:
第一次:FIN(client发给server)
第二次:ACK(server发给client)第三次:FIN(server发给client )第四次:ACK(client发给server)1.1MB
第三次:FIN(server发给client)
二、编程题
1、数据库连接池
解题思路:就是利用栈的进栈和出栈,计算n次循环过程中的栈内数据最大值。
代码示例:
usingnamespacestd; intmain() { intn; while (cin>>n) { stringid, op; intMax=0; stack<string>s1; for (inti=0; i<n; i++) { cin>>id>>op; if (op=="connect") { s1.push(id); } elseif (op=="disconnect") { s1.pop(); } inth=s1.size(); Max=max(Max, h); } cout<<Max<<endl; } return0; }
2、mkdir
这题题目较难,我也是借鉴了别人的想法
代码示例:
usingnamespacestd; intmain() { intn; while (cin>>n) { vector<string>s1(n);//存取每一次输入vector<bool>flag(n, true); for (inti=0; i<n; i++) cin>>s1[i]; sort(s1.begin(), s1.end()); for (inti=0; i<s1.size() -1; i++) { // 1、两串相同// 2、前串是后串的子串,而且后串后一位是 '/'if (s1[i] ==s1[i+1]) flag[i] =false; elseif (s1[i].size() <s1[i+1].size() &&\s1[i] ==s1[i+1].substr(0, s1[i].size()) &&s1[i+1][s1[i].size()] =='/') flag[i] =false; } for (inti=0; i<s1.size(); ++i) if (flag[i]) cout<<"mkdir -p "<<s1[i] <<endl; cout<<endl; } return0; }
总结
本文总共讲了5题牛客高频的选择题,以及两道牛客编程题,希望大家读后能够有所收获!