Java经典问题解答(9题)

文章目录

    • 1、通关jwt靶场的其中任意两关(该题与Java无关)
      • 启动环境
      • 第4关
      • 第5关
      • 第7关
    • 2、java是如何跨平台通信的
    • 3、java为什么需要类名和文件名一致
    • 4、main函数的作用是什么
    • 5、.class文件和.java是什么关系
    • 6、java在编写函数的时候void是什么意思
    • 7、java声明变量的时候,写int,String是为了申请内存,为什么不直接写内存宽度
    • 8、为什么java有面向对象的概念,请举例说明
    • 9、继承的作用是什么
    • 10、为什么子类要重写父类的方法

1、通关jwt靶场的其中任意两关(该题与Java无关)

启动环境

将文件拷贝到kali虚拟机的桌面,在终端中进入桌面,输入下面命令,安装靶场,端口指定为8888:

sudo java -jar webgoat-server-8.0.0.M17.jar --server.port=8888

如图,启动成功:

在这里插入图片描述

打开bp的内置浏览器,输入127.0.0.1:8888/WebGoat打开靶场网站:

在这里插入图片描述

注册一个账号:

在这里插入图片描述

注册成功后点击Broken Authentication中的JWT token,来到第一关:
在这里插入图片描述

第4关

点击第四关,这一关是一个投票界面,选择Tom用户,然后点击删除按钮,出现一段提示只有管理员可以重置该投票:

在这里插入图片描述

点击删除投票,并用bp抓到post请求包,发送到repeater模块,在cookie字段找到JWT:

在这里插入图片描述

将这段JWT放到JWT解码网站中解码,发现payload载荷信息中用户是Tom,admin字段值是false:

在这里插入图片描述

将这段信息复制到base64加密网站中,将false改为true,并复制加密后除=外的base64密文,并替换原来的payload字段:

在这里插入图片描述

和修改payload方法一样,修改JWT头部的算法类型为none,让它不要加密,替换原来的payload字段:

在这里插入图片描述

将修改后的header和payload字段替换数据包中的cookie字段,注意加上点,这样后端才能识别,点击send发送,提示重置投票成功:

在这里插入图片描述

回到网页刷新,发现票数均变为1:

在这里插入图片描述

第5关

这关给出了JWT,要求修改exp并爆破密钥

在这里插入图片描述

复制这段JWT,vim在桌面新建一个JWT.txt文件,放入复制的密钥:

在这里插入图片描述

用下面命令爆破JWT的密钥,字典用1.txt:

hashcat -m 16500 JWT.txt -a 3 -w 3 1.txt

-a 3 代表蛮力破解

-w 3 可以理解为高速破解,就是会让桌面进程无响应的那种高速

JWT.txt 是我把题目要求破解的 token 保存到的文件

爆破成功,密钥为victory:
在这里插入图片描述

按照题目的要求,修改username为WebGoat,并修改时间戳:

在这里插入图片描述

输入爆破出的密钥:

在这里插入图片描述

将修改后的JWT提交后即可通关:

在这里插入图片描述

第7关

来到第7关,这一关要求冒充Tom用户为另一个无JWT的非法用户付钱
在这里插入图片描述

点击右下角的购买,提示没有JWT:

在这里插入图片描述

用bp抓包,发送到repeater模块,发现该数据包有一个单独存放JWT的Authorization字段:

在这里插入图片描述

右键here,在新窗口打开,可以查看日志:

在这里插入图片描述

复制一个用户的token:

在这里插入图片描述

解码后发现是Tom用户的token:
在这里插入图片描述

将该token在数据包中替换之前抓到数据包的Authorization字段,发送后依然报错,提示我们在日志中找到的JWT已经过期:
在这里插入图片描述

复制Tom用户的exp字段,这里的一串数字就是payload的过期时间戳,复制到网站解码,显示过期时间是2018-5-13:
在这里插入图片描述

用一个新的时间戳:

在这里插入图片描述

替换原来的exp字段,加密后替换原来的payload,由于没有密钥,JWT头部也需要替换,修改后发送,发现提示成功:

在这里插入图片描述

2、java是如何跨平台通信的

如下图,Java文件经过编译变为class文件(字节码文件),然后由Java虚拟机即JVM运行class文件。Linux和Windows都是不能直接识别class文件的,所以需要JVM来运行。

正是由于JVM的存在,所以Java文件可以在不同平台上运行

在这里插入图片描述

3、java为什么需要类名和文件名一致

因为Java虚拟机JVM只认识Java文件中的类名,如果类名和文件名不一致,JVM就无法识别,如下面代码:

public class Hello{public static void main(String[] args){System.out.println("123456");}
}

执行它的hello.java文件:

在这里插入图片描述

4、main函数的作用是什么

main()函数是Java应用程序的入口函数。main函数是Java中格式固定的、能被JVM识别的函数,只有main函数中的代码才能被执行,main()函数的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。如果没有main函数,JVM就不知道如何执行。 如下面的Java代码:

public class Hello{public static void main(String[] args){System.out.println("123456");}
}

它就相当于php中的这段代码:

<?php
echo "123456"
?>

5、.class文件和.java是什么关系

.class 文件可以被视为已编译的 .java 文件。它是在 JVM(Java 虚拟机)上运行的文件。

.java文件只有一个,.class文件不一定只有一个,它的数量取决于.java文件中类的个数,有几个类,编译后就有几个.class文件。

6、java在编写函数的时候void是什么意思

如下图的java代码,void是函数的返回值类型,表示返回值为空,在不需要返回值时使用void。

public class Person{public int age;public String name;public void talk(){System.out.println("Person 说话了");}
}

7、java声明变量的时候,写int,String是为了申请内存,为什么不直接写内存宽度

因为不同类型的变量在内存空间中的存储格式是不同的,不同的存储格式有不同的读取方法,只有声明变量的类型,java程序才知道如何读取存储的数据,如下图是小数在内存空间存储,0.25在内存中的存储也是0和1,只有声明合适的类型才能正确读取。

在这里插入图片描述

8、为什么java有面向对象的概念,请举例说明

因为java是一种面向对象的编程语言。而面向对象是为了解决系统的可维护性,可扩展性,可重用性

面向对象的三大特征是封装、继承和多态,面向对象能有效提高编程的效率。

通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。

通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。

Java是一个典型的面向对象的编程语言,它属于解释型的语言,由于它只在运行时才逐句进行翻译,所以它引用的变量的类型和该变量调出的类的方法在编程时并不能确定,只能在运行时才能确定,类似于**“薛定谔的猫”,不同的是,这个形态时可以人为引导它“塌陷”**到某一具体的类,这样一来,程序员可以在不修改源代码的情况下,就可以让引用的变量绑定不同的类,从而调用不同的方法,让程序可以选择多个状态,这就是面向对象语言的多态性。

9、继承的作用是什么

避免重复造轮子。子类继承父类的函数,避免了重复写代码。通过使用继承我们能够非常方便地复用以前的代码,能够大大的提高开发的效率。

10、为什么子类要重写父类的方法

如果子类不对分类的方法进行重写,那么子类的方法会完全继承父类,不能达成程序员想要实现的功能,如下面的父类:

public class Person{public int age;public String name;public void talk(){System.out.println("Person 说话了");}
}

继承但未重写的子类:

public class Student extends Person{public void talk(){}
}

子类调用父类的方法:

public class Testpublic static void main(String[] args){Student st1 = new Student ();stl.talk();}
}

输出的结果:

在这里插入图片描述

这样的结果明显不是我们想要的,重写子类:

public class Student extends Person{
public void talk(){System.out.println("Student 说话了");}
}

再次输出,结果为:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/132814.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

慢查询SQL如何优化

一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录&#xff0c;它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…

模拟信号电压或电流信号转变频器频率传感器信号隔离变送器0-5V/0-10V/0-20mA/4-20mA转0-5KHz/0-10KHz/1-5KHz

主要特性: 精度等级&#xff1a;0.1 级、0.2 级。产品出厂前已检验校正&#xff0c;用户可以直接使用输 入 &#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA 等输出信号&#xff1a;0-5KHz/0-10KHz/1-5KHz 等标准信号辅助电源&#xff1a;5V、9V、12V、15V 或 24V 直流单电…

使用branch and bound分支定界算法选择UTXO

BnB算法原理 分支定界算法始终围绕着一颗搜索树进行的&#xff0c;我们将原问题看作搜索树的根节点&#xff0c;从这里出发&#xff0c;分支的含义就是将大的问题分割成小的问题。 大问题可以看成是搜索树的父节点&#xff0c;那么从大问题分割出来的小问题就是父节点的子节点…

怎么裁剪图片?总结了下面几个方法

怎么裁剪图片&#xff1f;在日常的生活中&#xff0c;图片已经成为了我们不可或缺的一部分。或许你正在整理自己的相册时&#xff0c;或者我们需要向互联网上发布一些图片的时候&#xff0c;总之我们随时都可能会遇到一张需要进行裁剪的图片。比如说&#xff0c;一些图片上存在…

每日一博 - 反向代理、API 网关、负载均衡

文章目录 概述图解 概述 反向代理、API网关和负载均衡是在网络和服务器架构中用于不同目的的重要组件&#xff0c;它们有不同的功能和应用场景。以下是它们之间的区别和联系&#xff1a; 反向代理&#xff08;Reverse Proxy&#xff09;&#xff1a; 功能&#xff1a;反向代理…

Xilinx FPGA未使用管脚上下拉状态配置(ISE和Vivado环境)

文章目录 ISE开发环境Vivado开发环境方式1&#xff1a;XDC文件约束方式2&#xff1a;生成选项配置 ISE开发环境 ISE开发环境&#xff0c;可在如下Bit流文件生成选项中配置。 右键点击Generate Programming File&#xff0c;选择Process Properties&#xff0c; 在弹出的窗口选…

分类预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入分类预测

分类预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入分类预测 目录 分类预测 | MATLAB实现基于SVM-Adaboost支持向量机结合AdaBoost多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SVM-Adaboost支持向量机结合Ada…

软件开发代码审查(review)工具

软件开发代码审查&#xff08;Code Review&#xff09;是一个重要的质量保证实践&#xff0c;旨在发现和修复潜在的问题、缺陷和安全漏洞。为了进行有效的代码审查&#xff0c;开发团队通常使用各种代码审查工具。以下是一些常见的软件开发代码审查工具及其特点&#xff0c;希望…

数据结构之洗牌算法

洗牌算法 1.买一副牌(生成一副牌)2.洗牌3.揭牌完整代码 1.买一副牌(生成一副牌) 2.洗牌 3.揭牌 完整代码 card中的代码: cardDemo中的代码 测试类代码

【日积月累】SpringBoot启动流程

目录 SpringBoot启动流程 1.前言2.构造一个SpringApplication的实例&#xff0c;完成初始化的工作SpringApplication实例构造完之后调用run方法&#xff0c;启动SpringApplication3.SpringBoot启动代码SpringBootConfigurationComponentScanEnableAutoConfiguration 总结参考…

神经网络-pytorch版本

pytorch神经网络基础 torch简介 torch和numpy import torch import numpy as np np_datanp.arange(6).reshape((2,3)) torch_datatorch.from_numpy(np_data) tensor2arraytorch_data.numpy() print(np_data,"\n",torch_data,"\n",tensor2array)torch的数…

竞赛 基于机器视觉的火车票识别系统

文章目录 0 前言1 课题意义课题难点&#xff1a; 2 实现方法2.1 图像预处理2.2 字符分割2.3 字符识别部分实现代码 3 实现效果最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的火车票识别系统 该项目较为新颖&#xff0c;适合作为竞赛…

【Linux学习笔记】 - 常用指令学习及其验证(上)

前言&#xff1a;本文主要记录对Linux常用指令的使用验证。环境为阿里云服务器CentOS 7.9。关于环境如何搭建等问题&#xff0c;大家可到同平台等各大资源网进行搜索学习&#xff0c;本文不再赘述。 由于本人对Linux学习程度尚且较浅&#xff0c;本文仅介绍验证常用指令的常用…

27、Flink 的SQL之SELECT (SQL Hints 和 Joins)介绍及详细示例(2-1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

7-15 求矩阵的局部极大值

输入格式&#xff1a; 输入在第一行中给出矩阵A的行数M和列数N&#xff08;3≤M,N≤20&#xff09;&#xff1b;最后M行&#xff0c;每行给出A在该行的N个元素的值。数字间以空格分隔。 输出格式&#xff1a; 每行按照“元素值 行号 列号”的格式输出一个局部极大值&#xff0…

事件监听-@TransactionalEventListener与@EventListener的介绍、区别和使用

文章目录 前言事件监听-TransactionalEventListener与EventListener的介绍、区别和使用1. EventListener 是什么?2. TransactionalEventListener 是什么?3. TransactionalEventListener与EventListener的缺点3.1. TransactionalEventListener 的缺点&#xff1a;3.2. EventLi…

2.9 PE结构:重建导入表结构

脱壳修复是指在进行加壳保护后的二进制程序脱壳操作后&#xff0c;由于加壳操作的不同&#xff0c;有些程序的导入表可能会受到影响&#xff0c;导致脱壳后程序无法正常运行。因此&#xff0c;需要进行修复操作&#xff0c;将脱壳前的导入表覆盖到脱壳后的程序中&#xff0c;以…

openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据

文章目录 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 openGauss学习笔记-69 openGauss 数据库管理-创建和管理普通表-更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行、所有行或者指定的部分行。还可以独立更新…

【linux基础(六)】Linux中的开发工具(中)--gcc/g++

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux中的开发工具 1. 前言2.…

为什么建议将常量用const关键字来修饰

嵌入式软件中&#xff0c;内存资源是非常宝贵的&#xff0c;即sram资源。因此我们在编码过程中需要规划好并且使用好sram资源&#xff0c;这点非常重要&#xff01; 在此之前需要预备一点基础知识&#xff0c;在IAR中&#xff0c;一般会用ICF配置文件给工程配置存储区域&#…