笔试强训(三十八)

一、选择题

(1)下列关于URL的描述错误的是(A)
A.http表名使用TCP协议
B.又名统一资源定位符,方便确定一个资源,并表示他在哪里
C.URL中隐藏了端口号,默认是80端口
D.访问URL可使用大写字母

(2)不属于交换机攻击的是(A)
A.目录遍历攻击
B.MAC防洪攻击
C.VLAN攻击
D.DHCP攻击

交换机攻击主要有以下5种类型:VALN跳跃攻击,生成树攻击,MAC表洪水攻击,ARP攻击,VTP攻击
DHCP攻击:DHCP欺骗攻击就是伪造真正的DHCP服务器为客户端主机分配一个错误的IP地址
DHCP攻击针对的目标是网络中的DHCP服务器,原理是耗尽DHCP服务器的所有IP地址资源,使其无法正确提供地址分配服务。然后在网络中再假设假冒的DHCP服务器为客户端分配IP地址,从而实现中间人攻击
DHCP攻击原理:DHCP没有认证机制,并不知道接收的报文是否是同一个主机发的,所以攻击者可以使用以下两种方式进行攻击

  1. 攻击者发送大量的DHCP Discover报文,堵塞DHCP服务器的处理速度,以至于瘫痪DHCP服务器
  2. 制造大量的伪造MAC地址来请求地址,导致DHCP服务器中的IP地址耗尽

目录遍历攻击是HTTP所存在的一个安全漏洞,它使得攻击者能够访问受限的目录,并在Web服务器的根目录以外执行命令。不属于交换机攻击

(3)IP地址块为211.168.15.192/26,211.168.15.160/27,211.168.15.128/27三个地址块经聚合后可用地址数为(A)
A.126
B.62
C.128
D.68

在这里插入图片描述

(4)以下不是合法的HTTP请求方法的是(B)
A.GET
B.SET
C.HEAD
D.PUT

在这里插入图片描述

二、编程题

2.1 蘑菇矩阵

2.1.1 题目

在这里插入图片描述

2.1.2 题解

思路:动态规划
dp[i][j]的含义是:从起点走到i,j位置且不踩到蘑菇的概率

代码:

public static void main(String[] args){
    Scanner scanner=new Scanner(System.in);
    while(scanner.hasNextInt()){
      int n=scanner.nextInt();
      int m=scanner.nextInt();
      int k=scanner.nextInt();
      int[][] map=new int[n+1][m+1];
      while(k>0){
        int x=scanner.nextInt();
        int y=scanner.nextInt();
        map[x][y]=1;
        k--;
      }
      double[][] dp=new double[n+1][m+1];
      dp[1][1]=1.0;
      
      for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
          if(map[i][j]!=1 && !(i==1&& j==1)){
         dp[i][j] = dp[i-1][j]*(j==m? 1.0:0.5) + dp[i][j-1]*
(i==n? 1.0:0.5);
          }
        }
      }
      System.out.printf("%.2f\n", dp[n][m]);
    }
  }

2.2 红与黑

2.2.1 题目

在这里插入图片描述

2.2.2 题解

思路:深度优先遍历

具体步骤:

step1:处理输入,在输入的过程中找到并记录起始位置x,y
step2:进行深度优先遍历,没到达一个位置,检查该位置是否为红瓷砖,如果是直接返回,如果不是count++,并将该位置修改为红瓷砖,防止重复计数
step3:分别深度遍历黑瓷砖的四个方向,进入递归之前检查下标的合法性

代码:

import java.util.*;
public class Main{
  private static int count=0;
  private static int[][] dirs={{-1,0},{1,0},{0,1},{0,-1}};
  public static void main(String[] args){
    Scanner scanner=new Scanner(System.in);
    while(scanner.hasNext()){
      int m=scanner.nextInt();
      int n=scanner.nextInt();
      if(m * n==0){
        continue;
      }
      int x=0;
      int y=0;
      char[][] map=new char[m][n];
      for(int i=0;i<m;i++){
        String s=scanner.next();
        for(int j=0;j<n;j++){
          map[i][j]=s.charAt(j);
          if(map[i][j]=='@'){
            x=i;
            y=j;
          }
        }
      }
      count=0;
       dfs(map,x,y,m,n);
      System.out.println(count);
    }
     
  }
  private static void dfs(char[][] map,int x,int y,int row,int col){
      if('#' == map[x][y])
        return;
    // 说明(x, y)位置为黑砖, 将该砖遍历之后,修改其标记
     ++count;
    map[x][y] = '#';
    for(int i = 0; i < 4; ++i){
     int nx = x + dirs[i][0];
     int ny = y + dirs[i][1];
      if(nx >= 0 && nx < row && ny >= 0 && ny < col){
        dfs(map, nx, ny, row, col);
      }
    }
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值