Java中验证码功能的解决方案

news2025/1/15 23:02:08

目录​​​​​​​

1、前言

2、随机数字验证码

2.1 使用Java的Random类生成随机数字

2.2 使用Java的Graphics2D类在图片上绘制验证码

3、字符验证码

3.1 生成包含随机字符的字符串

3.2 使用Java的Graphics2D类在图片上绘制验证码

​​​​​​​​​​​​​​4、数学运算验证码

4.1 生成简单的数学运算题,如加法、减法等

4.2 验证用户输入的结果是否正确

5、图片验证码

5.1 使用Java的BufferedImage类生成带有随机数字或字符的图片

5.2 使用Java的Graphics2D类在图片上绘制干扰线、干扰点等

​​​​​​​​​​​​​​6、基于算法的验证码

6.1 使用Java的加密算法生成验证码

6.2 验证用户输入的结果是否与算法生成的结果一致

7、使用第三方库

7.1 使用第三方库,如Kaptcha、Google reCAPTCHA等

7.2 集成第三方库的验证码功能到Java项目中

8、结语

1、前言

        在现代互联网应用中,为了提高用户账户的安全性,常常会使用验证码(Verification Code)功能来对用户进行身份验证。验证码是一种随机生成的图形或数字,要求用户在输入框中正确地输入才能通过验证。Java是一种非常流行的编程语言,也提供了许多解决方案来实现验证码功能。

        Java中有多种解决方案来实现验证码功能。开发人员可以根据自己的需求和技术要求选择适合的解决方案,并根据具体情况进行定制和扩展。通过实现验证码功能,可以提高用户账户的安全性,防止恶意攻击和非法访问。

2、随机数字验证码

2.1 使用Java的Random类生成随机数字

你可以使用Java的Random类生成随机数字。以下是一个例子:

import java.util.Random;

public class RandomNumberGenerator {
    public static void main(String[] args) {
        Random random = new Random();
        
        // 生成一个随机整数
        int randomNumber = random.nextInt();
        System.out.println("随机整数: " + randomNumber);
        
        // 生成一个指定范围内的随机整数
        int min = 1;
        int max = 100;
        int randomInRange = random.nextInt(max - min + 1) + min;
        System.out.println("指定范围内的随机整数: " + randomInRange);
        
        // 生成一个随机浮点数
        double randomDouble = random.nextDouble();
        System.out.println("随机浮点数: " + randomDouble);
        
        // 生成一个随机布尔值
        boolean randomBoolean = random.nextBoolean();
        System.out.println("随机布尔值: " + randomBoolean);
    }
}

以上代码使用Random类的nextInt()、nextDouble()和nextBoolean()方法生成随机整数、随机浮点数和随机布尔值。如果你要生成一个指定范围内的随机整数,你可以使用nextInt(max - min + 1) + min方法,其中min是范围的最小值,max是范围的最大值。

2.2 使用Java的Graphics2D类在图片上绘制验证码

要在图片上绘制验证码,可以使用Java的Graphics2D类。下面是一个示例代码:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

public class CaptchaGenerator {

    public static String generateCaptcha(int width, int height) {
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();

        // 设置背景颜色
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, width, height);

        // 设置字体
        Font font = new Font("Arial", Font.BOLD, 24);
        g.setFont(font);

        // 生成随机验证码
        Random random = new Random();
        String captcha = "";
        for (int i = 0; i < 4; i++) {
            char ch = (char) ('A' + random.nextInt(26));
            captcha += ch;
        }

        // 绘制验证码
        g.setColor(Color.BLACK);
        g.drawString(captcha, 10, 25);

        // 添加干扰线
        for (int i = 0; i < 5; i++) {
            int x1 = random.nextInt(width);
            int y1 = random.nextInt(height);
            int x2 = random.nextInt(width);
            int y2 = random.nextInt(height);
            g.drawLine(x1, y1, x2, y2);
        }

        // 添加噪点
        for (int i = 0; i < 50; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            image.setRGB(x, y, random.nextInt(256));
        }

        // 释放资源
        g.dispose();

        // 保存图片到本地
        try {
            ImageIO.write(image, "png", new File("captcha.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }

        return captcha;
    }

    public static void main(String[] args) {
        String captcha = generateCaptcha(200, 50);
        System.out.println("Captcha: " + captcha);
    }

}

这段代码首先创建了一个指定宽度和高度的BufferedImage对象来作为图片的画布。然后设置背景颜色,字体和生成随机验证码。接下来,使用Graphics2D对象在画布上绘制验证码,并添加干扰线和噪点。最后,将图片保存到本地,并返回生成的验证码。

你可以根据实际需求调整代码中的宽度、高度、字体等参数。

3、字符验证码

3.1 生成包含随机字符的字符串

要生成包含随机字符的字符串,可以使用Java中的Random类和StringBuilder类来实现。下面是一个示例代码:

import java.util.Random;

public class RandomStringGenerator {
    private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    public static String generateRandomString(int length) {
        Random random = new Random();
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < length; i++) {
            int randomIndex = random.nextInt(CHARACTERS.length());
            char randomChar = CHARACTERS.charAt(randomIndex);
            sb.append(randomChar);
        }

        return sb.toString();
    }

    public static void main(String[] args) {
        int length = 10;
        String randomString = generateRandomString(length);
        System.out.println(randomString);
    }
}

在上面的示例代码中,CHARACTERS是包含所有可能字符的字符串。generateRandomString方法接受一个整数参数length,表示要生成的随机字符串的长度。在方法内部,使用Random类生成一个随机索引值,然后根据该索引值取出对应位置的字符,并将其添加到StringBuilder对象中。最后,通过toString方法将StringBuilder对象转换为字符串并返回。在main方法中,我们指定了长度为10的随机字符串,并将其打印出来。

3.2 使用Java的Graphics2D类在图片上绘制验证码

你可以使用Java的Graphics2D类在图片上绘制验证码。下面是一个简单的例子:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;

public class CaptchaGenerator {
    private static final int WIDTH = 200;
    private static final int HEIGHT = 50;
    private static final String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    public static BufferedImage generateCaptcha() {
        BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = image.createGraphics();

        // 设置背景色为白色
        g2d.setColor(Color.WHITE);
        g2d.fillRect(0, 0, WIDTH, HEIGHT);

        // 设置字体样式
        Font font = new Font("Arial", Font.BOLD, 30);
        g2d.setFont(font);

        // 生成随机验证码
        Random random = new Random();
        StringBuilder captcha = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            int index = random.nextInt(CHARACTERS.length());
            char c = CHARACTERS.charAt(index);
            captcha.append(c);
        }

        // 绘制验证码
        g2d.setColor(Color.BLACK);
        g2d.drawString(captcha.toString(), 50, 35);

        // 绘制干扰线
        g2d.setColor(Color.GRAY);
        for (int i = 0; i < 10; i++) {
            int x1 = random.nextInt(WIDTH);
            int y1 = random.nextInt(HEIGHT);
            int x2 = random.nextInt(WIDTH);
            int y2 = random.nextInt(HEIGHT);
            g2d.drawLine(x1, y1, x2, y2);
        }

        g2d.dispose();

        return image;
    }

    public static void main(String[] args) {
        BufferedImage captchaImage = generateCaptcha();
        // 将验证码图片保存到文件或者输出到浏览器等
    }
}

这个例子中,我们使用BufferedImage类创建了一个指定大小的图片对象。然后使用Graphics2D类的方法在图片上绘制文字、干扰线等元素,最后返回生成的验证码图片。

你可以根据需要调整图片的大小、验证码的长度、字体样式、颜色等。最后将生成的验证码图片保存到文件或者输出到浏览器等。

​​​​​​​​​​​​​​4、数学运算验证码

4.1 生成简单的数学运算题,如加法、减法等

可以通过以下代码生成简单的加法和减法题目:

import java.util.Random;

public class MathProblemGenerator {
    public static void main(String[] args) {
        int numProblems = 5; // 设置生成题目的数量

        for (int i = 0; i < numProblems; i++) {
            int a = generateRandomNumber(10); // 生成0-10之间的随机数
            int b = generateRandomNumber(10);
            int operator = generateRandomNumber(2); // 随机选择运算符

            String problem;

            if (operator == 0) {
                problem = a + " + " + b + " = ";
            } else {
                problem = a + " - " + b + " = ";
            }

            System.out.println(problem);
        }
    }

    public static int generateRandomNumber(int limit) {
        Random random = new Random();
        return random.nextInt(limit + 1);
    }
}

上述代码中,generateRandomNumber方法用于生成指定范围内的随机数。main方法中的循环用于生成指定数量的数学题目,通过随机选择加法或减法运算符来生成不同类型题目。每生成一个题目,都会打印出来。

4.2 验证用户输入的结果是否正确

下面是一个简单的示例代码,用于实现Java中的数学运算验证码验证用户输入结果是否正确。

import java.util.Scanner;

public class MathCaptcha {
    public static void main(String[] args) {
        // 生成随机的数学运算验证码
        int num1 = (int) (Math.random() * 10);
        int num2 = (int) (Math.random() * 10);
        int operator = (int) (Math.random() * 3);

        String operatorStr;
        int expectedResult;

        switch (operator) {
            case 0:
                operatorStr = "+";
                expectedResult = num1 + num2;
                break;
            case 1:
                operatorStr = "-";
                expectedResult = num1 - num2;
                break;
            case 2:
                operatorStr = "*";
                expectedResult = num1 * num2;
                break;
            default:
                return;
        }

        System.out.println("请计算以下数学运算验证码:");
        System.out.println(num1 + " " + operatorStr + " " + num2);
        System.out.print("请输入结果:");

        // 获取用户输入的结果
        Scanner scanner = new Scanner(System.in);
        int userInput = scanner.nextInt();

        // 验证用户输入的结果是否正确
        if (userInput == expectedResult) {
            System.out.println("验证通过!");
        } else {
            System.out.println("验证失败!");
        }
    }
}

该程序首先生成两个随机数和一个随机运算符,然后根据运算符计算出验证码的正确结果。接下来,程序通过Scanner类获取用户输入的结果,并通过比较用户输入的结果和正确结果来验证用户的输入是否正确。最后,程序输出验证结果。

5、图片验证码

5.1 使用Java的BufferedImage类生成带有随机数字或字符的图片

要使用Java的BufferedImage类生成带有随机数字或字符的图片,你可以按照以下步骤进行操作:

        1. 创建一个BufferedImage对象,指定图片的宽度、高度和颜色模式。例如,你可以创建一个RGB模式的图片,宽度为200像素,高度为100像素。

int width = 200;
int height = 100;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

        2. 获取图像的Graphics对象,用于在图片上绘制内容。

Graphics g = image.getGraphics();

        3. 设置字体样式和颜色。你可以使用Font类设置字体样式,使用Color类设置颜色。

Font font = new Font("Arial", Font.BOLD, 24);
g.setFont(font);

Color color = new Color(0, 0, 0); // 黑色
g.setColor(color);

        4. 在图片上绘制随机数字或字符。你可以使用Random类生成随机数字或字符,并使用Graphics对象的drawString方法在图片上绘制。

Random random = new Random();
int x = 10; // 起始x坐标
int y = 50; // 起始y坐标

String text = String.valueOf(random.nextInt(10)); // 随机生成一个数字
g.drawString(text, x, y);

        5. 释放Graphics对象。

g.dispose();

        6. 将生成的图片保存到文件或使用其他方式展示。

File output = new File("image.png");
ImageIO.write(image, "png", output);

完整的示例代码如下:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;

public class RandomImageGenerator {
    public static void main(String[] args) {
        int width = 200;
        int height = 100;
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        
        Graphics g = image.getGraphics();
        
        Font font = new Font("Arial", Font.BOLD, 24);
        g.setFont(font);
        
        Color color = new Color(0, 0, 0); // 黑色
        g.setColor(color);
        
        Random random = new Random();
        int x = 10; // 起始x坐标
        int y = 50; // 起始y坐标
        
        String text = String.valueOf(random.nextInt(10)); // 随机生成一个数字
        g.drawString(text, x, y);
        
        g.dispose();
        
        File output = new File("image.png");
        try {
            ImageIO.write(image, "png", output);
            System.out.println("图片已生成");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

运行以上代码后,会生成一个名为"image.png"的图片文件,其中包含一个随机数字。你可以根据需求进行修改和扩展。

5.2 使用Java的Graphics2D类在图片上绘制干扰线、干扰点等

以下是使用Java的Graphics2D类在图片上绘制干扰线和干扰点的示例代码:

import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.Random;

public class ImageUtils {

    private static final int LINE_COUNT = 10; // 干扰线数量
    private static final int POINT_COUNT = 100; // 干扰点数量

    // 在图片上绘制干扰线和干扰点
    public static void applyDistortion(BufferedImage image) {
        Graphics2D g2d = image.createGraphics();

        // 绘制干扰线
        Random random = new Random();
        for (int i = 0; i < LINE_COUNT; i++) {
            int x1 = random.nextInt(image.getWidth());
            int y1 = random.nextInt(image.getHeight());
            int x2 = random.nextInt(image.getWidth());
            int y2 = random.nextInt(image.getHeight());
            g2d.drawLine(x1, y1, x2, y2);
        }

        // 绘制干扰点
        for (int i = 0; i < POINT_COUNT; i++) {
            int x = random.nextInt(image.getWidth());
            int y = random.nextInt(image.getHeight());
            g2d.setColor(new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256)));
            g2d.fillOval(x, y, 1, 1);
        }

        g2d.dispose();
    }

    public static void main(String[] args) {
        // 创建一个宽度为200、高度为100的图片
        BufferedImage image = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);

        // 在图片上绘制干扰线和干扰点
        applyDistortion(image);

        // 将图片保存到文件(可选)
        try {
            ImageIO.write(image, "png", new File("distorted_image.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

这个示例代码使用Java的Graphics2D类来绘制干扰线和干扰点。首先创建一个指定宽度和高度的BufferedImage对象,然后通过调用applyDistortion()方法在图片上绘制干扰线和干扰点。applyDistortion()方法使用Graphics2D对象来绘制10条干扰线和100个干扰点。最后,将生成的图片保存到文件中(可选)。

请注意,示例代码中的applyDistortion()方法是在传入的BufferedImage对象上直接进行绘制操作,因此在调用该方法之前,需要确保BufferedImage对象已经被创建并初始化。另外,如果要将图片保存到文件中,需要导入javax.imageio.ImageIOjava.io.File类。

​​​​​​​​​​​​​​6、基于算法的验证码

6.1 使用Java的加密算法生成验证码

可以使用Java中的java.util.Random类来生成随机的验证码,然后再通过加密算法对验证码进行加密。以下是一个示例代码:

import java.util.Random;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class CaptchaGenerator {
    public static void main(String[] args) {
        // 生成随机验证码
        String captcha = generateCaptcha();
        System.out.println("验证码:" + captcha);

        // 对验证码进行加密
        String encryptedCaptcha = encryptCaptcha(captcha);
        System.out.println("加密后的验证码:" + encryptedCaptcha);
    }

    public static String generateCaptcha() {
        // 验证码长度
        int length = 6;
        // 验证码字符集
        String charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int index = random.nextInt(charset.length());
            sb.append(charset.charAt(index));
        }
        return sb.toString();
    }

    public static String encryptCaptcha(String captcha) {
        String encryptedCaptcha = null;
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] digest = md.digest(captcha.getBytes());
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                sb.append(String.format("%02x", b));
            }
            encryptedCaptcha = sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return encryptedCaptcha;
    }
}

在上述代码中,generateCaptcha方法用来生成随机的验证码,encryptCaptcha方法用来对验证码进行SHA-256加密。可以根据需求自行调整验证码的长度和字符集,以及加密算法。

6.2 验证用户输入的结果是否与算法生成的结果一致

下面是一个示例,演示如何基于算法验证用户输入的验证码是否与算法生成的结果一致:

import java.util.Scanner;

public class CaptchaVerification {

    public static void main(String[] args) {
        // 生成验证码
        String captcha = generateCaptcha();
        System.out.println("生成的验证码是:" + captcha);

        // 获取用户输入的验证码
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入验证码:");
        String userInput = scanner.nextLine();

        // 验证用户输入的验证码是否与算法生成的结果一致
        if (verifyCaptcha(userInput, captcha)) {
            System.out.println("验证码验证通过");
        } else {
            System.out.println("验证码验证失败");
        }
    }

    // 生成验证码的算法,这里示意为一个简单的随机数生成
    public static String generateCaptcha() {
        // 生成一个四位的随机数
        int randomNumber = (int) (Math.random() * 10000);
        return String.format("%04d", randomNumber);
    }

    // 验证用户输入的验证码是否与算法生成的结果一致
    public static boolean verifyCaptcha(String userInput, String captcha) {
        return userInput.equals(captcha);
    }
}

在示例中,首先通过调用 generateCaptcha() 生成一个四位的随机数字验证码,然后通过用户输入获取用户输入的验证码,最后调用 verifyCaptcha() 方法来验证用户输入的验证码是否与算法生成的结果一致。如果一致,则输出 "验证码验证通过",否则输出 "验证码验证失败"。

7、使用第三方库

7.1 使用第三方库,如Kaptcha、Google reCAPTCHA等

要使用第三方库实现验证码功能,可以按照以下步骤进行:

  1. 选择合适的验证码库:首先,选择一个合适的验证码库。Kaptcha和Google reCAPTCHA是两个常用的库,其中Kaptcha是一个Java库,而reCAPTCHA是一个Google提供的跨平台验证码解决方案。

  2. 引入库的依赖:根据你选择的库,将其相应的依赖添加到你的项目中。如果使用Maven管理项目依赖,可以在项目的pom.xml文件中添加所需库的依赖。

  3. 配置库的参数:根据库的文档,配置相应的参数。例如,Kaptcha需要配置生成验证码的长度、宽度、高度等属性,而reCAPTCHA需要配置网站的密钥等参数。

  4. 在你的应用中使用验证码:根据库的文档,将验证码集成到你的应用中。这通常包括在用户注册或登录等页面上,展示验证码,验证用户输入的验证码等步骤。

下面给出一个使用Kaptcha库实现验证码功能的示例代码:

@Configuration
public class KaptchaConfig {

    @Bean
    public Producer kaptchaProducer() {
        Properties properties = new Properties();
        // 配置验证码的长度、宽度、高度等参数
        properties.setProperty("kaptcha.image.width", "150");
        properties.setProperty("kaptcha.image.height", "50");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        // 更多配置参数可以根据需要自行添加

        DefaultKaptcha kaptcha = new DefaultKaptcha();
        Config config = new Config(properties);
        kaptcha.setConfig(config);

        return kaptcha;
    }
}

在这个示例中,我们使用了Spring的@Configuration注解将Kaptcha配置为一个bean,并通过@Bean注解将其注册到Spring容器中。然后,我们可以在需要使用验证码的地方注入这个bean,并调用其生成验证码的方法。

这只是一个示例,具体的步骤和配置可能因使用的库不同而有所不同。如果使用reCAPTCHA等其他库,你需要根据其官方文档进行相应的配置和集成。

7.2 集成第三方库的验证码功能到Java项目中

要将第三方库的验证码功能集成到Java项目中,可以按照以下步骤进行操作:

  1. 在Java项目的构建管理工具(如Maven或Gradle)的配置文件中,添加第三方库的依赖。可以查找该库的官方文档或在Maven中央仓库中查找正确的依赖信息。

  2. 在Java代码中,根据第三方库的文档,创建验证码生成和验证的实例。通常,会有一个验证码生成器和一个验证码验证器。

  3. 使用验证码生成器生成验证码,并将其展示给用户。生成的验证码可以是一个图片、一个数字字符串或其他形式,具体根据第三方库的要求来实现。

  4. 将用户输入的验证码与生成的验证码进行比较,使用验证码验证器进行验证。验证的结果可以是成功或失败。

以下是一个简单的示例,使用Google的reCaptcha验证码库(需要在reCAPTCHA官网注册并获得Site key和Secret key):

        1. 在Maven的pom.xml文件中,添加以下依赖:

<dependency>
    <groupId>com.google.recaptcha</groupId>
    <artifactId>recaptcha-java</artifactId>
    <version>版本号</version>
</dependency>

         2. 在Java代码中,创建验证码生成和验证的实例:

import com.google.recaptcha.ReCaptcha;
import com.google.recaptcha.ReCaptchaFactory;
import com.google.recaptcha.ReCaptchaResponse;

public class CaptchaExample {
    private static final String SITE_KEY = "your-site-key";
    private static final String SECRET_KEY = "your-secret-key";
    
    public static void main(String[] args) {
        ReCaptcha reCaptcha = ReCaptchaFactory.newReCaptcha(SITE_KEY, SECRET_KEY, false);
        
        // 生成验证码
        String challenge = reCaptcha.createRecaptchaHtml(null, null);
        System.out.println("Challenge: " + challenge);
        
        // 验证用户输入的验证码
        String response = "user-inputted-response";
        ReCaptchaResponse captchaResponse = reCaptcha.checkAnswer(null, null, response);
        if (captchaResponse.isValid()) {
            System.out.println("验证码验证通过");
        } else {
            System.out.println("验证码验证失败");
        }
    }
}

这只是一个简单的示例,实际上,具体的实现会根据使用的第三方库而有所不同。你应该查看相应的文档和示例代码以了解更详细的使用方法和配置选项。

8、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请考虑给予一点打赏。

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

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

相关文章

【设计模式】代理模式例子解析

代理模式&#xff0c;顾名思义&#xff0c;就是我们在需要访问一个类时&#xff0c;并不直接调用这个类&#xff0c;而是通过一个"代理"来间接地实现这个过程。 这个“代理”就像是真实对象的一个接口&#xff0c;所有的对于真实对象的操作都需要通过这个“代理”来…

IP劫持的危害分析及应对策略

在当今数字化时代&#xff0c;网络安全问题备受关注&#xff0c;其中IP劫持是一种常见而危险的威胁。本文将深入探讨IP劫持的危害&#xff0c;并提供一些有效的应对策略。 第一部分&#xff1a;IP劫持的定义 IP劫持是指黑客通过各种手段获取并篡改目标IP地址的控制权&#xf…

怎么提升搜狗网站排名

在当今数字化时代&#xff0c;网站排名对于品牌、企业以及个人都至关重要。而对于许多网站来说&#xff0c;搜狗搜索引擎是一个重要的流量来源。为了在搜狗上取得更好的排名&#xff0c;不仅需要优化网站内容&#xff0c;还需要巧妙运用一些工具和技巧。在本文中&#xff0c;我…

gitee码云如何提交pr

步骤 fork 源码到自己的仓库 git clone 自己的仓库 git clone xxxxxxxxxxxxxxx查看自己是否与本地仓库建立了连接 git remote -v如果没有关联&#xff0c;先关联本地仓库 git remote add origin xxxxxxxxxx //例 git remote add origin https://gitee.com/YZRDEG/DLT6…

DevEco Studio4.0/3.1预览器报错综合整理

题外话&#xff1a;额&#xff0c;这篇文章的由来&#xff0c;是在这篇文章DevEco Studio3.1报错...发布后&#xff0c;仍有人没解决预览不了的问题&#xff0c;然后就有小伙伴让我看看到底哪个地方出错了&#xff0c;为什么按照文章上的去做了&#xff0c;还是无法使用&#x…

在Qt中通过控制按钮实现登录界面密码与明码的转换

创建控件&#xff1a; 首先&#xff0c;在Qt设计师界面界面上创建QLineEdit类文本框&#xff0c;用于输入密码&#xff0c;并且实现密码与明码相互转化。 设置初始状态&#xff1a; 默认情况下&#xff0c;输入密码的文本框应该是可见的并允许用户输入。 添加切换按钮&…

计算机网络——面试问题

1 从输⼊ URL 到⻚⾯展示到底发⽣了什么&#xff1f; 1. 先检查浏览器缓存⾥是否有缓存该资源&#xff0c;如果有直接返回&#xff1b;如果没有进⼊下⼀ 步⽹络请求。 2. ⽹络请求前&#xff0c;进⾏ DNS 解析 &#xff0c;以获取请求域名的 IP地址 。 3. 浏览器与服务器…

代码随想录二刷 |回溯 | 组合

代码随想录二刷 &#xff5c;回溯 &#xff5c; 组合 题目描述解题思路代码实现 题目描述 77.组合 给定两个整数 n 和 k&#xff0c;返回 1 … n 中所有可能的 k 个数的组合。 示例: 输入: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 解题思路 递归…

浅析:HarmonyOS 一次开发多端部署

万物互联时代&#xff0c;应用的设备底座将从几十亿手机扩展到数百亿设备。全新的全场景设备体验&#xff0c;正深入改变消费者的使用习惯&#xff0c; 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变&#xff0c;通过全场景多设备作为全新的底座&#xff0c;为…

Vue3+ElementUI 多选框中复选框和名字点击方法效果分离

现在的需求为 比如我点击了Option A &#xff0c;触发点击Option A的方法&#xff0c;并且复选框不会取消勾选&#xff0c;分离的方法。 <el-checkbox-group v-model"mapWork.model_checkArray.value"> <div class"naipTypeDom" v-for"item …

【GitHub项目推荐--最简洁的人脸识别库】【转载】

本项目是世界上最简洁的人脸识别库&#xff0c;你可以使用 Python 和命令行工具提取、识别、操作人脸。本项目的人脸识别是基于业内领先的 C 开源库 dlib 中的深度学习模型&#xff0c;用Labeled Faces in the Wild 人脸数据集进行测试&#xff0c;有高达 99.38% 的准确率。 …

年味渐近 其乐龍龍!2024四川省网联会年货节闪亮来袭!

1月19日&#xff0c;“其乐龍龍2024四川省网联会年货节”正式启动&#xff0c;此次活动由四川省网联会主办&#xff0c;以直播、短视频多种形式在抖音、微博、小红书等多平台同步呈现&#xff0c;旨在为广大消费者带来一场别开生面的年货盛宴&#xff0c;助力激发消费活力。 年…

1985-2022年企业级数字经济核心产业专利数据库

1985-2022年企业级数字经济核心产业专利数据库 1、时间&#xff1a;1985-2022年 2、指标&#xff1a;分类号类型、发明人、专利公开号、分类号、专利名称、主分类号、专利类型、代理机构、专利摘要、分案原申请号、申请人、优先权、专利申请号、国际申请、申请日、国际公布、…

ChatGPT时代对大数据应用的展望

前言&#xff1a; 2022年底&#xff0c;科技圈有个爆炸性新闻&#xff0c;ChatGPT的诞生&#xff0c;引发了世界范围内的震惊&#xff1b;人工智能在与人交流上有了划时代的技术突破&#xff0c;可以和人深入的理解交流&#xff0c;让许多公司和领域对这项技术有了更多遐想。对…

day25 组合总和Ⅲ 电话号码的字母组合

题目1&#xff1a;216 组合总和Ⅲ 题目链接&#xff1a;216 组合总和Ⅲ 题意 找出相加之和为n的k个数的组合 数字只可使用1~9之间的数&#xff08;包括 1 9&#xff09;且每个数字只能使用1遍 题目中有两个限制条件&#xff1a;1&#xff09;k个数 2&#xff09;k个…

HNU-数据挖掘-实验2-数据降维与可视化

数据挖掘课程实验实验2 数据降维与可视化 计科210X 甘晴void 202108010XXX 文章目录 数据挖掘课程实验<br>实验2 数据降维与可视化实验背景实验目标实验数据集说明实验参考步骤实验过程1.对数据进行初步降维2.使用无监督数据降维方法&#xff0c;比如PCA&#xff0c;I…

AttributeError: module ‘numpy‘ has no attribute ‘float‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Linux第32步_编译ST公司的TF-A源码

正点原子STM32MP157开发板使用的CPU型号是STM32MP157DAA1&#xff0c;而开发板硬件参考了ST公司的STM32MP157 EVK开发板&#xff0c;因此我们在移植的时候需要关注“stm32mp157d-ev1”。 一、了解SDK 包 ST公司会从ARM官方下载TF-A软件包&#xff0c;然后将STM32MP1 芯片添加…

实例分割中mIOU的定义是什么?

问题描述&#xff1a;实例分割中mIOU的定义是什么&#xff1f; 问题解答&#xff1a; mIOU&#xff08;Mean Intersection over Union&#xff09;是实例分割任务中常用的性能指标之一&#xff0c;用于评估模型的准确性。mIOU 是每个类别的 Intersection over Union&#xff…

【Oracle】收集Oracle数据库内存相关的信息

文章目录 【Oracle】收集Oracle数据库内存相关的信息收集Oracle数据库内存命令例各命令的解释输出结果例参考 【声明】文章仅供学习交流&#xff0c;观点代表个人&#xff0c;与任何公司无关。 编辑|SQL和数据库技术(ID:SQLplusDB) 【Oracle】收集Oracle数据库内存相关的信息 …