48天笔试训练错题——day37

目录

选择题

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

编程题

1. 数据库连接池

2. mkdir


选择题

1.

2.

数据的五元组:源IP,源端口,目的IP,目的端口,协议。

源IP:描述数据从哪个主机上产生。

目的IP:描述数据去往哪个主机。

源端口:描述数据从源主机的哪个进程产生。

目的端口:描述数据去往目的主机的哪个进程。

协议:双方网络通信使用的网络协议。

源端口地址:源IP + 源端口

目的端口地址:目的IP + 目的端口

在 TCP/UDP 传输段中,源端口地址和目的端口地址是不能相同的,否则就会建立自己到自己的连接,白白耗费资源。网络攻击中的 LAND 攻击就是利用这个这一点进行攻击的。

3.

154.27.0.0 是 B 类 IP 地址(B类主机地址范围:128.0.0.1 到 191.255.255.254,前两字节是网络地址,后两字节是主机地址),不做子网划分,主机号就有 2^16(65536) 个,除去全 0 (网段号154.27.0.0) 和全 1 (广播号154.27.255.255) ,可以支持 65534 台主机。

4.

简单网络管理协议(SNMP) 是 TCP/IP 模型的一个应用层协议。

应用层:文件传输协议(FTP),远程登录协议(Telnet),电子邮件协议(SMTP),网络文件服务协议(NFS),网络管理协议(SNMP),域名解析协议(DNS)。

传输层:TCP,UDP 协议。

网络层:IP,ICMP,ARP,RARP。

5.

5xx 的状态码是服务器出错,4xx 的状态码是客户端出错,3xx 的状态码是重定向,2xx 状态码是成功。

6.

因为第一个数据包丢失,B 会重新向主机 A 索要第一个数据包(确认号为 70),而不是返回 100,如果返回了 100,就说明 B 已经完整接收到了 100 以及之前的数据包,这样主机就不会重传了。

7.

主机名本质上就是域名,比如 www.jd.com,将域名转为 IP 地址的过程就是域名解析。

8.

MIME(多用途互联网邮件扩展类型),是设定某种扩展名的文件,用一种应用程序来打开的方式类型,当该扩展名被访问的时候,浏览器会自动使用指定应用程序来打开。

HTTP 请求中 host 才是表示初始 URL 中的主机和端口。css 是页面的样式。

9.

在同一信道上同一时刻,可进行双向数据传送的通信方式是全双工。

TCP 协议是有连接的,UDP 是无连接的。

OSI 结构是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

网络号 = IP地址 & 子网掩码           

(255 是全 1)

192.168.8.123        (01111011)

&

255.255.255.248    (11111000)

=

192.168.8.120        (01111000)

10.

404 是找不到资源,502 是错误网关。

403 是没权限拒绝访问,304 会读取浏览器缓存。

200 是成功,500 是服务器错误。

编程题

1. 数据库连接池

我们可以利用 set 来完成,先创建个 count 来记录需要创建的连接池数量,然后直接遍历数组,然后看看字符串的第一个字符(请求编号)是否在 set 中存在,如果不存在,则将字符放入 set 中,如果存在,那就先判断下当前 set 的 size 是否大于 count,如果大于,就更新 count,然后再将该字符从 set 中删除。

代码实现:

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            in.nextLine();
            Set<Character> set = new HashSet<>();
            int count = 0;
            for (int i = 0; i < n; i++) {
                String str = in.nextLine();
                char c = str.charAt(0);
                if (set.contains(c)) {
                    set.remove(c);
                } else {
                    set.add(c);
                    if (set.size() > count) {
                        count = set.size();
                    }
                }
            }
            System.out.println(count);
        }
    }
}

2. mkdir

看例子,如果输入的目录包含子目录,就需要将相同的目录和子目录剔除,如果不是子目录,就得按照字母顺序输出,因为要排序,所以我们可以先将数组排序,然后再遍历数组,比较两个目录,如果两个目录相同,就删除前一个目录,如果前一个目录是后一个目录的子目录(前目录长度小于后目录,并且后目录包含前目录,而且后目录包含前目录的下一个字符是 '/' ),就删除前一个目录。然后再次遍历数组,将未被删除的目录构造成命令输出即可。

代码实现:

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int n = in.nextInt();
            String[] paths = new String[n];
            for (int i = 0; i < n; i++) {
                paths[i] = in.next();
            }
            // 首先对数组进行排序
            Arrays.sort(paths);

            // 然后遍历数组,剔除掉相同的目录和子目录
            boolean[] flg = new boolean[n];// 用来标记数组中某些元素被删除
            for (int i = 0; i < n - 1; i++) {
                // 目录相同,剔除目录
                if (paths[i].equals(paths[i + 1])) {
                    flg[i] = true;
                }
                // 剔除子目录,/a   /ab   /a/b   
                // /a/b 包含 /a,并且 /a/b 长度大于 /a,并且 /a/b 在 /a 的后一个字符是 /
                if (paths[i + 1].contains(paths[i]) && paths[i + 1].length() > paths[i].length() && paths[i + 1].charAt(paths[i].length()) == '/') {
                    flg[i] = true;
                }
            }

            // 最后构造命令并输出即可。
            for (int i = 0; i < n; i++) {
                if (!flg[i]) {
                    System.out.println("mkdir -p " + paths[i]);
                }
            }

            System.out.println();
            
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值