目录
- 一、选择题
- 二、编程题
- 2.1 电话号码
- 2.1.1 题目
- 2.1.2 题解
- 2.2 求和
- 2.2.1 题目
- 2.2.2 题解
一、选择题
(1)下列关于synflood攻击的说法错误的是(B)
A.服务端由于连接队列被占满而不能对外服务
B.不但能攻击TCP服务,还能攻击UDP服务
C.大量连接处于SYN_RECV状态
D.使用硬件防火墙可以一定程度上抵御攻击
synflood是syn泛红攻击,恶意客户端伪造IP发送大量SYN给服务器,但是不进行第三次握手,是服务器连接队列爆满无法对合法请求进行处理
(2)A,B两台机器都正常工作,B机器未监听任何端口,如果A机器向B机器80端口发送SYN包,会收到何种类型的回包(D)
A.ACK包
B.FIN包
C.不会收到回包
D.RST包
RST用于重置因为某种原因导致的错误连接,以及拒绝非法的数据和请求
(3)假设在x86平台上,有一个int型变量,在内存中的内部由低到高分别是0x12,0x34,0x56,0x78当通过网络发送该数据时,正确的发送顺序是(B)
A.0x12,0x34,0x56,0x78
B.0x78,0x56,0x34,0x12
C.0x34,0x12,0x78,0x56
D.0x56,0x78,0x12,0x34
在x86平台上采用的是小端存储(低位存低地址)
但网络传输使用大端字节序,并且从低地址开始发送,因此需要先将小端存储转换成大端存储后,从低地址开始发送
(4)当我们在局域网内使用ping www.newcoder.com时,哪种协议没有被使用(D)
A.ICMP
B.ARP
C.DNS
D.TCP
ping用于探测网络状况的,进行域名解析之后获取到服务器IP地址,然后目标主机发送ICMP请求,ping使用的时ICMP报文,只涉及网络层以下,因此直接就是IP,ARP用于获取相邻设备的MAC地址,域名解析使用DNS(DNS一般使用UDP)
(5)从浏览器打开 www.sohu.com,TCP/IP协议簇中不会被使用到的协议是(A)
A.SMTP
B.HTTP
C.TCP
D.IP
SMTP是邮件传输协议
浏览器打开一个网站,经历的阶段
- 域名解析得到服务器IP地址
- 搭建TCP客户端连接服务器
- 组织HTTP请求,通过搭建的客户端发送请求给服务器
二、编程题
2.1 电话号码
2.1.1 题目
2.1.2 题解
代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<Character,Integer> map=new HashMap<>();
map.put('A',2);
map.put('B',2);
map.put('C',2);
map.put('D',3);
map.put('E',3);
map.put('F',3);
map.put('G',4);
map.put('H',4);
map.put('I',4);
map.put('J',5);
map.put('K',5);
map.put('L',5);
map.put('M',6);
map.put('N',6);
map.put('O',6);
map.put('P',7); map.put('Q',7); map.put('R',7); map.put('S',7);
map.put('T',8); map.put('U',8); map.put('V',8);
map.put('W',9); map.put('X',9); map.put('Y',9); map.put('Z',9);
while (scanner.hasNext()) {
int n = scanner.nextInt();
Set<String> set = new HashSet<>();
for (int i = 0; i < n; i++) {
String str=scanner.next();
StringBuffer sb = new StringBuffer();
for (int j = 0; j < str.length(); j++) {
if(str.charAt(j)>='0' && str.charAt(j)<='9'){
sb.append(str.charAt(j));
} else if(str.charAt(j)>='A' && str.charAt(j)<='Z'){
sb.append(map.get(str.charAt(j)));
}
}
set.add(sb.toString());
}
String[] ss=set.toArray(new String[0]);
Arrays.sort(ss);//题目要求按照字典序输出,所以要进行排序
for(int i=0;i<ss.length;i++){
for(int j=0;j<ss[i].length();j++){
if(j==2){
System.out.print(ss[i].charAt(j)+"-");
}else {
System.out.print(ss[i].charAt(j));
}
}
System.out.println();
}
System.out.println();
}
}
}
2.2 求和
2.2.1 题目
2.2.2 题解
思路:递归+回溯
代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextInt()){
int n=scanner.nextInt();
int m=scanner.nextInt();
ArrayList<Integer> list=new ArrayList<>();
dfs(1,0,m,n,list);
}
}
public static void dfs(int pos,int curSum,int m,int n,List<Integer> queue){
if(curSum>m) return;
if(curSum==m){
for(int i=0;i<queue.size()-1;i++){
System.out.print(queue.get(i)+" ");
}
System.out.println(queue.get(queue.size()-1));
return;
}
for(int i=pos;i<=n;i++){
queue.add(i);
dfs(i+1,curSum+i,m,n,queue);
queue.remove(queue.size()-1);
}
}
}