当前位置: 首页 > news >正文

【Java基础增强】类加载器和反射

1.类加载器

1.1类加载器【理解】

  • 作用

    负责将.class文件(存储的物理文件)加载在到内存中

1.2类加载的过程【理解】

  • 类加载时机

    • 创建类的实例(对象)

    • 调用类的类方法

    • 访问类或者接口的类变量,或者为该类变量赋值

    • 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象

    • 初始化某个类的子类

    • 直接使用java.exe命令来运行某个主类

  • 类加载过程

    1. 加载

      • 通过包名 + 类名,获取这个类,准备用流进行传输

      • 在这个类加载到内存中

      • 加载完毕创建一个class对象

    2. 链接

      • 验证

        确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全

        (文件中的信息是否符合虚拟机规范有没有安全隐患)

      • 准备

        负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值

        (初始化静态变量)

      • 解析

        将类的二进制数据流中的符号引用替换为直接引用

        (本类中如果用到了其他类,此时就需要找到对应的类)

    3. 初始化

      根据程序员通过程序制定的主观计划去初始化类变量和其他资源

      (静态变量赋值以及初始化其他资源)

  • 小结

    • 当一个类被使用的时候,才会加载到内存

    • 类加载的过程: 加载、验证、准备、解析、初始化

1.3类加载的分类【理解】

  • 分类

    • Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null

    • Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块

    • System class loader:系统类加载器,负责加载用户类路径上所指定的类库

  • 类加载器的继承关系

    • System的父加载器为Platform

    • Platform的父加载器为Bootstrap

  • 代码演示

    public class ClassLoaderDemo1 {public static void main(String[] args) {//获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();//获取系统类加载器的父加载器 --- 平台类加载器ClassLoader classLoader1 = systemClassLoader.getParent();//获取平台类加载器的父加载器 --- 启动类加载器ClassLoader classLoader2 = classLoader1.getParent();System.out.println("系统类加载器" + systemClassLoader);System.out.println("平台类加载器" + classLoader1);System.out.println("启动类加载器" + classLoader2);}
    }

1.4双亲委派模型【理解】

  • 介绍

    如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式

1.5ClassLoader 中的两个方法【应用】

  • 方法介绍

    方法名说明
    public static ClassLoader getSystemClassLoader()获取系统类加载器
    public InputStream getResourceAsStream(String name)加载某一个资源文件
  • 示例代码

    public class ClassLoaderDemo2 {public static void main(String[] args) throws IOException {//static ClassLoader getSystemClassLoader() 获取系统类加载器//InputStream getResourceAsStream(String name)  加载某一个资源文件//获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();//利用加载器去加载一个指定的文件//参数:文件的路径(放在src的根目录下,默认去那里加载)//返回值:字节流。InputStream is = systemClassLoader.getResourceAsStream("prop.properties");Properties prop = new Properties();prop.load(is);System.out.println(prop);is.close();}
    }

2.反射

2.1反射的概述【理解】

  • 反射机制

    是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意属性和方法; 这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

2.2获取Class类对象的三种方式【应用】

  • 三种方式分类

    • 类名.class属性

    • 对象名.getClass()方法

    • Class.forName(全类名)方法

  • 示例代码

    public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void study(){System.out.println("学生在学习");}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
    }
    public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException {//1.Class类中的静态方法forName("全类名")//全类名:包名 + 类名Class clazz = Class.forName("com.itheima.myreflect2.Student");System.out.println(clazz);//2.通过class属性来获取Class clazz2 = Student.class;System.out.println(clazz2);//3.利用对象的getClass方法来获取class对象//getClass方法是定义在Object类中.Student s = new Student();Class clazz3 = s.getClass();System.out.println(clazz3);System.out.println(clazz == clazz2);System.out.println(clazz2 == clazz3);}
    }

2.3反射获取构造方法并使用【应用】

2.3.1Class类获取构造方法对象的方法

  • 方法介绍

    方法名说明
    Constructor<?>[] getConstructors()返回所有公共构造方法对象的数组
    Constructor<?>[] getDeclaredConstructors()返回所有构造方法对象的数组
    Constructor<T> getConstructor(Class<?>... parameterTypes)返回单个公共构造方法对象
    Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)返回单个构造方法对象
  • 示例代码

    public class Student {private String name;private int age;//私有的有参构造方法private Student(String name) {System.out.println("name的值为:" + name);System.out.println("private...Student...有参构造方法");}//公共的无参构造方法public Student() {System.out.println("public...Student...无参构造方法");}//公共的有参构造方法public Student(String name, int age) {System.out.println("name的值为:" + name + "age的值为:" + age);System.out.println("public...Student...有参构造方法");}
    }
    public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//method1();//method2();//method3();//method4();}private static void method4() throws ClassNotFoundException, NoSuchMethodException {//        Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):
    //                                      返回单个构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor constructor = clazz.getDeclaredConstructor(String.class);System.out.println(constructor);}private static void method3() throws ClassNotFoundException, NoSuchMethodException {//        Constructor<T> getConstructor(Class<?>... parameterTypes):
    //                                      返回单个公共构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");//小括号中,一定要跟构造方法的形参保持一致.Constructor constructor1 = clazz.getConstructor();System.out.println(constructor1);Constructor constructor2 = clazz.getConstructor(String.class, int.class);System.out.println(constructor2);//因为Student类中,没有只有一个int的构造,所以这里会报错.Constructor constructor3 = clazz.getConstructor(int.class);System.out.println(constructor3);}private static void method2() throws ClassNotFoundException {//        Constructor<?>[] getDeclaredConstructors():
    //                                      返回所有构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getDeclaredConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}}private static void method1() throws ClassNotFoundException {//        Constructor<?>[] getConstructors():
    //                                      返回所有公共构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}}
    }

2.3.2Constructor类用于创建对象的方法

  • 方法介绍

    方法名说明
    T newInstance(Object...initargs)根据指定的构造方法创建对象
    setAccessible(boolean flag)设置为true,表示取消访问检查
  • 示例代码

    public class Student {private String name;private int age;//私有的有参构造方法private Student(String name) {System.out.println("name的值为:" + name);System.out.println("private...Student...有参构造方法");}//公共的无参构造方法public Student() {System.out.println("public...Student...无参构造方法");}//公共的有参构造方法public Student(String name, int age) {System.out.println("name的值为:" + name + "age的值为:" + age);System.out.println("public...Student...有参构造方法");}
    }
    public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//method1();//method2();//method3();//method4();}private static void method4() throws ClassNotFoundException, NoSuchMethodException {//        Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes):
    //                                      返回单个构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor constructor = clazz.getDeclaredConstructor(String.class);System.out.println(constructor);}private static void method3() throws ClassNotFoundException, NoSuchMethodException {//        Constructor<T> getConstructor(Class<?>... parameterTypes):
    //                                      返回单个公共构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");//小括号中,一定要跟构造方法的形参保持一致.Constructor constructor1 = clazz.getConstructor();System.out.println(constructor1);Constructor constructor2 = clazz.getConstructor(String.class, int.class);System.out.println(constructor2);//因为Student类中,没有只有一个int的构造,所以这里会报错.Constructor constructor3 = clazz.getConstructor(int.class);System.out.println(constructor3);}private static void method2() throws ClassNotFoundException {//        Constructor<?>[] getDeclaredConstructors():
    //                                      返回所有构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getDeclaredConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}}private static void method1() throws ClassNotFoundException {//        Constructor<?>[] getConstructors():
    //                                      返回所有公共构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}}
    }

2.3.3小结

  • 获取class对象

    三种方式: Class.forName(“全类名”), 类名.class, 对象名.getClass()

  • 获取里面的构造方法对象

    getConstructor (Class<?>... parameterTypes) getDeclaredConstructor (Class<?>... parameterTypes)

  • 如果是public的,直接创建对象

    newInstance(Object... initargs)

  • 如果是非public的,需要临时取消检查,然后再创建对象

    setAccessible(boolean) 暴力反射

2.4反射获取成员变量并使用【应用】

2.4.1Class类获取成员变量对象的方法

  • 方法分类

    方法名说明
    Field[] getFields()返回所有公共成员变量对象的数组
    Field[] getDeclaredFields()返回所有成员变量对象的数组
    Field getField(String name)返回单个公共成员变量对象
    Field getDeclaredField(String name)返回单个成员变量对象
  • 示例代码

    public class Student {public String name;public int age;public String gender;private int money = 300;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +", money=" + money +'}';}
    }
    public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {// method1();//method2();//method3();//method4();}private static void method4() throws ClassNotFoundException, NoSuchFieldException {//        Field getDeclaredField(String name):返回单个成员变量对象//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取money成员变量Field field = clazz.getDeclaredField("money");//3.打印一下System.out.println(field);}private static void method3() throws ClassNotFoundException, NoSuchFieldException {//        Field getField(String name):返回单个公共成员变量对象//想要获取的成员变量必须是真实存在的//且必须是public修饰的.//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取name这个成员变量//Field field = clazz.getField("name");//Field field = clazz.getField("name1");Field field = clazz.getField("money");//3.打印一下System.out.println(field);}private static void method2() throws ClassNotFoundException {//        Field[] getDeclaredFields():返回所有成员变量对象的数组//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取所有的Field对象Field[] fields = clazz.getDeclaredFields();//3.遍历for (Field field : fields) {System.out.println(field);}}private static void method1() throws ClassNotFoundException {//        Field[] getFields():返回所有公共成员变量对象的数组//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取Field对象.Field[] fields = clazz.getFields();//3.遍历for (Field field : fields) {System.out.println(field);}}
    }

2.4.2Field类用于给成员变量赋值的方法

  • 方法介绍

    方法名说明
    void set(Object obj, Object value)赋值
    Object get(Object obj)获取值
  • 示例代码

    // Student类同上一个示例,这里就不在重复提供了
    public class ReflectDemo2 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {
    //        Object get(Object obj) 返回由该 Field表示的字段在指定对象上的值。//method1();//method2();}private static void method2() throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取成员变量Field的对象Field field = clazz.getDeclaredField("money");//3.取消一下访问检查field.setAccessible(true);//4.调用get方法来获取值//4.1创建一个对象Student student = (Student) clazz.newInstance();//4.2获取指定对象的money的值Object o = field.get(student);//5.打印一下System.out.println(o);}private static void method1() throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {//        void set(Object obj, Object value):给obj对象的成员变量赋值为value//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取name这个Field对象Field field = clazz.getField("name");//3.利用set方法进行赋值.//3.1先创建一个Student对象Student student = (Student) clazz.newInstance();//3.2有了对象才可以给指定对象进行赋值field.set(student,"zhangsan");System.out.println(student);}
    }

2.5反射获取成员方法并使用【应用】

2.5.1Class类获取成员方法对象的方法

  • 方法分类

    方法名说明
    Method[] getMethods()返回所有公共成员方法对象的数组,包括继承的
    Method[] getDeclaredMethods()返回所有成员方法对象的数组,不包括继承的
    Method getMethod(String name, Class<?>... parameterTypes)返回单个公共成员方法对象
    Method getDeclaredMethod(String name, Class<?>... parameterTypes)返回单个成员方法对象
  • 示例代码

    public class Student {//私有的,无参无返回值private void show() {System.out.println("私有的show方法,无参无返回值");}//公共的,无参无返回值public void function1() {System.out.println("function1方法,无参无返回值");}//公共的,有参无返回值public void function2(String name) {System.out.println("function2方法,有参无返回值,参数为" + name);}//公共的,无参有返回值public String function3() {System.out.println("function3方法,无参有返回值");return "aaa";}//公共的,有参有返回值public String function4(String name) {System.out.println("function4方法,有参有返回值,参数为" + name);return "aaa";}
    }
    public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//method1();//method2();//method3();//method4();//method5();}private static void method5() throws ClassNotFoundException, NoSuchMethodException {//        Method getDeclaredMethod(String name, Class<?>... parameterTypes):
    //                                返回单个成员方法对象//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取一个成员方法showMethod method = clazz.getDeclaredMethod("show");//3.打印一下System.out.println(method);}private static void method4() throws ClassNotFoundException, NoSuchMethodException {//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取一个有形参的方法function2Method method = clazz.getMethod("function2", String.class);//3.打印一下System.out.println(method);}private static void method3() throws ClassNotFoundException, NoSuchMethodException {//        Method getMethod(String name, Class<?>... parameterTypes) :
    //                                返回单个公共成员方法对象//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取成员方法function1Method method1 = clazz.getMethod("function1");//3.打印一下System.out.println(method1);}private static void method2() throws ClassNotFoundException {//        Method[] getDeclaredMethods():
    //                                返回所有成员方法对象的数组,不包括继承的//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取Method对象Method[] methods = clazz.getDeclaredMethods();//3.遍历一下数组for (Method method : methods) {System.out.println(method);}}private static void method1() throws ClassNotFoundException {//        Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取成员方法对象Method[] methods = clazz.getMethods();//3.遍历for (Method method : methods) {System.out.println(method);}}
    }

2.5.2Method类用于执行方法的方法

  • 方法介绍

    方法名说明
    Object invoke(Object obj, Object... args)运行方法

    参数一: 用obj对象调用该方法

    参数二: 调用方法的传递的参数(如果没有就不写)

    返回值: 方法的返回值(如果没有就不写)

  • 示例代码

    public class ReflectDemo2 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
    //        Object invoke(Object obj, Object... args):运行方法
    //        参数一:用obj对象调用该方法
    //        参数二:调用方法的传递的参数(如果没有就不写)
    //        返回值:方法的返回值(如果没有就不写)//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取里面的Method对象  function4Method method = clazz.getMethod("function4", String.class);//3.运行function4方法就可以了//3.1创建一个Student对象,当做方法的调用者Student student = (Student) clazz.newInstance();//3.2运行方法Object result = method.invoke(student, "zhangsan");//4.打印一下返回值System.out.println(result);}
    }

相关文章:

【Java基础增强】类加载器和反射

1.类加载器 1.1类加载器【理解】 作用 负责将.class文件&#xff08;存储的物理文件&#xff09;加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例&#xff08;对象&#xff09; 调用类的类方法 访问类或者接口的类变量&#xff0c;或者为该类变量赋值 …...

【Java】数据类型变量

【Java】数据类型&变量 文章目录 【Java】数据类型&变量1、字面常量2、数据类型3、变量3.1 整型变量3.1.1 整型变量3.1.2 长短整型变量3.1.3 字节型变量 3.2 浮点型变量3.2.1 双精度浮点型3.2.2 单精度浮点型 3.3 字符型变量3.4 布尔型变量3.5 类型转换3.5.1 自动类型转…...

护目镜佩戴检测识别算法

护目镜佩戴检测识别算法通过opencvpython网络深度学习模型&#xff0c;护目镜佩戴检测识别算法实时监测工人的护目镜佩戴情况&#xff0c;发现未佩戴或错误佩戴的情况&#xff0c;及时提醒调整。与C / C等语言相比&#xff0c;Python速度较慢。也就是说&#xff0c;Python可以使…...

NOIOLPJ2022B. 数学游戏 分析

数学游戏 题目描述 Kri 喜欢玩数字游戏。 一天&#xff0c;他在草稿纸上写下了 ttt 对正整数 (x,y)(x,y)(x,y)&#xff0c;并对于每一对正整数计算出了 zxygcd⁡(x,y)z x \times y \times \gcd(x,y)zxygcd(x,y)。 可是调皮的 Zay 找到了 Kri 的草稿纸&#xff0c;并把每一组的…...

android studio gradle build running慢 卡住不动 失败 原因与解决方式

快速导航 分析原因解决办法 分析原因 主要原因是 gradle 构建时无法从网络获取需要的包或库。 解决办法 将国外库替换为阿里云镜像库。 例如 google 对应的库是 maven { url ‘https://maven.aliyun.com/repository/google’ }...

如何保障Facebook账号登录稳定

当谈到保障Facebook账号的稳定性时&#xff0c;我们不得不提到那些令人头疼的情况——Facebook账号被封。尽管我们已经踏入数字化的未来&#xff0c;但是被封号似乎是一个时常困扰着社交媒体用户的问题。那么&#xff0c;让我们来看看一些常见的Facebook账号被封的原因&#xf…...

当前目录下的excel文件的两列内容的相似度比较

# -- coding: utf-8 --** from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity import numpy as np import pandas as pd import os # 获取当前目录 current_dir os.getcwd() # 获取当前目录下所有xlsx文件…...

Cookie for Mac:隐私保护工具保护您的在线隐私

随着互联网的发展&#xff0c;我们每天都会浏览各种网站&#xff0c;享受在线购物、社交娱乐和学习资料等各种便利。然而&#xff0c;您是否曾经遇到过需要频繁输入用户名和密码的情况&#xff1f;或者不方便访问您常用的网站&#xff1f;如果是这样&#xff0c;那么Cookie for…...

Huggingface训练Transformer

在之前的博客中&#xff0c;我采用SFT&#xff08;监督优化训练&#xff09;的方法训练一个GPT2的模型&#xff0c;使得这个模型可以根据提示语进行回答。具体可见博客召唤神龙打造自己的ChatGPT_gzroy的博客-CSDN博客 Huggingface提供了一个TRL的扩展库&#xff0c;可以对tra…...

IA-YOLO项目中DIP模块的初级解读

IA-YOLO项目源自论文Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions&#xff0c;其提出端到端方式联合学习CNN-PP和YOLOv3&#xff0c;这确保了CNN-PP可以学习适当的DIP&#xff0c;以弱监督的方式增强图像检测。IA-YOLO方法可以自适应地处理正常和不…...

MathType7.4mac最新版本数学公式编辑器安装教程

MathType7.4中文版是一款功能强大且易于使用的公式编辑器。该软件可与word软件配合使用&#xff0c;有效提高了教学人员的工作效率&#xff0c;避免了一些数学符号和公式无法在word中输入的麻烦。新版MathType7.4启用了全新的LOGO&#xff0c;带来了更多对数学符号和公式的支持…...

为Claude的分析内容做准备:提取PDF页面内容的简易应用程序

由于Claude虽然可以分析整个文件&#xff0c;但是对文件的大小以及字数是有限制的&#xff0c;为了将pdf文件分批传入Claude人工智能分析和总结文章内容&#xff0c;才有了这篇博客&#xff1a; 在本篇博客中&#xff0c;我们将介绍一个基于 wxPython 和 PyMuPDF 库编写的简易的…...

js中作用域的理解?

1.作用域 作用域&#xff0c;即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合 换句话说&#xff0c;作用域决定了代码区块中变量和其他资源的可见性 举个例子 function myFunction() {let inVariable "函数内部变量"; } myFunction();//要先执行这…...

机器学习基础之《分类算法(4)—案例:预测facebook签到位置》

一、背景 1、说明 2、数据集 row_id&#xff1a;签到行为的编码 x y&#xff1a;坐标系&#xff0c;人所在的位置 accuracy&#xff1a;定位的准确率 time&#xff1a;时间戳 place_id&#xff1a;预测用户将要签到的位置 3、数据集下载 https://www.kaggle.com/navoshta/gr…...

【Java】反射 之 调用方法

调用方法 我们已经能通过Class实例获取所有Field对象&#xff0c;同样的&#xff0c;可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method&#xff1a; Method getMethod(name, Class...)&#xff1a;获取某个public的Method&#xff08;包括父类&a…...

Java——单例设计模式

什么是设计模式&#xff1f; 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱&#xff0c;不同的棋局&#xff0c;我们用不同的棋谱、“套路”。 经典的设计模式共有23种。…...

Java实现excel表数据的批量存储(结合easyexcel插件)

场景&#xff1a;加哥最近在做项目时&#xff0c;苦于系统自身并未提供数据批量导入的功能还不能自行添加上该功能&#xff0c;且自身不想手动一条一条将数据录入系统。随后&#xff0c;自己使用JDBC连接数据库、使用EasyExcel插件读取表格并将数据按照业务逻辑批量插入数据库完…...

Config:客户端连接服务器访问远程

springcloud-config: springcloud-config push pom <?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:schemaLocatio…...

【KMP算法-代码随想录】

目录 1.什么是KMP2.什么是next数组3.什么是前缀表&#xff08;1&#xff09;前后缀含义&#xff08;2&#xff09;最长公共前后缀&#xff08;3&#xff09;前缀表的必要性 4.计算前缀表5.前缀表与next数组&#xff08;1&#xff09;使用next数组来匹配 6.构造next数组&#xf…...

【手写promise——基本功能、链式调用、promise.all、promise.race】

文章目录 前言一、前置知识二、实现基本功能二、实现链式调用三、实现Promise.all四、实现Promise.race总结 前言 关于动机&#xff0c;无论是在工作还是面试中&#xff0c;都会遇到Promise的相关使用和原理&#xff0c;手写Promise也有助于学习设计模式以及代码设计。 本文主…...

常量和常量表达式1

一、基础定义&#xff08;C/C通用核心定义&#xff09; 1. 常量&#xff08;Constant&#xff09; 程序整个生命周期内值不可修改、固定不变的量&#xff0c;是值的实体&#xff08;单个固定值/命名固定值&#xff09;&#xff0c;其值的确定时机可在编译期/预处理期&#xff0…...

OpenClaw安全加固:Qwen3.5-4B-Claude操作权限精细化控制

OpenClaw安全加固&#xff1a;Qwen3.5-4B-Claude操作权限精细化控制 1. 为什么需要权限控制&#xff1f; 上周我在调试OpenClaw自动化脚本时&#xff0c;差点酿成一场"灾难"——AI助手误将我的工作文档识别为临时文件&#xff0c;准备执行删除操作。幸亏当时设置了…...

用Python脚本让Crazyflie 2.X无人机动起来:手把手教你写第一个自主飞行程序

用Python脚本让Crazyflie 2.X无人机动起来&#xff1a;从零编写自主飞行程序 当第一次看到Crazyflie这个巴掌大的无人机在桌面上悬停时&#xff0c;我意识到微小型飞行器的编程控制远比想象中更有趣。与传统无人机不同&#xff0c;Crazyflie 2.X系列通过Python脚本就能实现毫米…...

Wan2.2-I2V-A14B企业级部署:Nginx反向代理+HTTPS+负载均衡扩展方案

Wan2.2-I2V-A14B企业级部署&#xff1a;Nginx反向代理HTTPS负载均衡扩展方案 1. 企业级部署概述 Wan2.2-I2V-A14B作为高性能文生视频模型&#xff0c;在企业级应用中需要满足高并发、高可用和安全访问等需求。本文将详细介绍基于Nginx反向代理、HTTPS加密和负载均衡的完整部署…...

春联生成模型-中文-base行业落地:新能源车企‘碳中和’‘智驾’等科技春联生成

春联生成模型-中文-base行业落地&#xff1a;新能源车企碳中和智驾等科技春联生成 1. 引言&#xff1a;当传统春联遇上现代科技 春节贴春联是千百年来的传统习俗&#xff0c;但传统的"福禄寿喜"已经难以完全表达现代企业的科技内涵。特别是新能源车企&#xff0c;既…...

新手福音:利用快马一键生成mobaxterm中文界面配置脚本

作为一个经常需要远程连接服务器的用户&#xff0c;MobaXterm一直是我的主力工具之一。但刚开始使用时&#xff0c;全英文的界面确实让我这个新手有点手足无措。最近发现用InsCode(快马)平台可以快速生成配置脚本&#xff0c;简直不要太方便&#xff01; 为什么需要中文界面 对…...

M2LOrder模型跨操作系统部署:从Windows到Linux的兼容性实战

M2LOrder模型跨操作系统部署&#xff1a;从Windows到Linux的兼容性实战 你是不是也遇到过这种情况&#xff1f;在Windows电脑上跑得好好的一个AI服务&#xff0c;想迁移到Linux服务器上&#xff0c;结果各种报错&#xff0c;环境依赖、路径问题、权限设置……折腾半天也搞不定…...

NUS-WIDE数据集实战:从原始文件到多模态数据集的完整预处理指南

1. NUS-WIDE数据集简介与下载指南 NUS-WIDE是一个经典的多标签图像数据集&#xff0c;由新加坡国立大学的研究团队构建。这个数据集包含了269,648个样本和81个类别&#xff0c;每个样本可能同时属于多个类别&#xff08;这就是多标签的含义&#xff09;。数据集最初是为了研究网…...

网络验证卡密系统(软件授权验证)的核心逻辑

网络验证卡密系统(通常指软件授权验证)的核心逻辑是**“凭据验证”与“状态管理”**。它通过验证用户输入的卡密(Key)来授权软件使用权限,并实时监控授权状态。 以下是其核心逻辑架构与工作流程: 1. 核心逻辑架构 系统通常采用 C/S(客户端/服务器)架构 或 B/S(浏览…...

高精度运放在电流传感器中的设计与应用

高精度运算放大器在电流传感器中的应用设计1. 电流传感器概述1.1 电流传感器类型与特性电流传感器是用于测量电路电流的关键元件&#xff0c;根据测量原理主要分为以下几种类型&#xff1a;传感器类型测量范围典型应用场景分流电阻式μA~100A电池监测、电机控制磁感应式10mA~1k…...