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

Java反射详细介绍

 的反射(Reflection)是一种强大的机制,允许程序在运行时动态获取类的信息、操作类的成员(属性、方法、构造器),甚至修改类的行为。它是框架开发(如 Spring、MyBatis)、单元测试工具(如 JUnit)的核心技术之一。

一、认识反射

反射的核心是在运行时获取类的元数据(类的结构信息),突破了传统编程 “编译时确定类型” 的限制。例如:

运行时判断任意对象的所属类;

运行时构造任意类的对象;

运行时获取 / 修改类的属性、调用类的方法(包括私有成员)

运行时处理注解。

二、Class 类详解

在  中,Class 类是反射的入口。每个类被加载到 JVM 时,会生成唯一的 Class 对象,存储该类的所有元数据(如类名、父类、接口、属性、方法等)。

2.1 获取 Class 对象的 3 种方式

// 方式1:通过 类名.class(编译时已知类)

Class<String> stringClass = String.class;

// 方式2:通过 对象.getClass()(已知对象)

String str = "hello";Class<? extends String> strClass = str.getClass();

// 方式3:通过 Class.forName("全限定类名")(动态加载,最常用)

try {

Class<?> userClass = Class.forName("com.example.User"); }

catch (ClassNotFoundException e) {

e.printStackTrace();

}

2.2 Class 类的常用方法

方法

说明

getName()

获取类的全限定名(如 .lang.String)

getSimpleName()

获取类的简单名(如 String)

getSuperclass()

获取父类的 Class 对象

getInterfaces()

获取实现的接口数组

getFields()

获取所有公有属性(含父类)

getDeclaredFields()

获取所有属性(含私有,不含父类)

getMethods()

获取所有公有方法(含父类)

getDeclaredMethods()

获取所有方法(含私有,不含父类)

getConstructors()

获取所有公有构造器

getDeclaredConstructors()

获取所有构造器(含私有)

三、Class 类与多态

多态的本质是 “父类引用指向子类对象”,但反射可以突破多态的表象,直接操作子类或父类的真实信息。

示例:通过反射获取多态对象的真实类信息
假设有继承关系:Animal(父类)→ Dog(子类)。

class Animal {

 public void eat() {

 System.out.println("Animal eat");

  } 

}

class Dog extends Animal { 

@Override 

public void eat() { 

System.out.println("Dog eat"); 

}

 }

public class PolymorphismDemo {

    public static void main(String[] args) {

        Animal animal = new Dog(); // 多态:父类引用指向子类对象

        

        // 传统方式调用方法(表现多态)

        animal.eat(); // 输出:Dog eat

        

        // 反射获取真实类的信息

        Class<?> realClass = animal.getClass(); 

        System.out.println("真实类名:" + realClass.getSimpleName()); // 输出:Dog

        

        // 反射调用父类的方法(绕过多态)

        try {

            Method parentEat realClass.getSuperclass().getMethod("eat");

            parentEat.invoke(animal); // 输出:Animal eat(调用了父类的原始方法)

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

输出结果:

Dog eat

真实类名:Dog

Animal eat

四、反射创建类对象

通过反射可以动态创建类的实例,即使类的构造器是私有的(需设置 setAccessible(true))。

4.1 无参构造创建对象

class User {

    private String name;

    public User() { System.out.println("无参构造被调用"); }

public User(String name) { this.name = name; }

}

public class CreateObjectDemo {

    public static void main(String[] args) {

        try {

            // 1. 获取User的Class对象

            Class<?> userClass = Class.forName("com.example.User");

            

            // 2. 通过无参构造创建实例(等价于 new User())

            User user = (User) userClass.getDeclaredConstructor().newInstance();

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

输出:无参构造被调用

4.2 有参构造创建对象

public class CreateObjectWithArgsDemo {

    public static void main(String[] args) {

        try {

            Class<?> userClass = Class.forName("com.example.User");

            

            // 获取有参构造器(参数类型为String)

            Constructor<?> constructor = userClass.getDeclaredConstructor(String.class);

            

            // 创建实例(等价于 new User("xxx"))

            User user = (User) constructor.newInstance("xxx");

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

4.3 私有构造器创建对象(突破访问限制)

class SecretClass {

private SecretClass() { System.out.println("私有构造被调用"); 

}

}

public class CreatePrivateObjectDemo {

    public static void main(String[] args) {

        try {

            Class<?> secretClass = Class.forName("com.example.SecretClass");

            

            // 获取私有构造器

            Constructor<?> privateConstructor = secretClass.getDeclaredConstructor();

            

            // 允许访问私有成员(关键!)

            privateConstructor.setAccessible(true);

            

            // 创建实例

            SecretClass instance = (SecretClass) privateConstructor.newInstance();

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

输出:私有构造被调用

五、反射调用类方法

通过反射可以调用任意对象的方法(包括私有方法),甚至可以调用未实现的方法(动态代理的基础)。

5.1 调用公有方法

class Calculator {

public int add(int a, int b) { return a + b; }

}

public class InvokeMethodDemo {

    public static void main(String[] args) {

        try {

            Calculator calc = new Calculator();

            Class<?> calcClass = calc.getClass();

            

            // 获取add方法(参数类型为int, int)

            Method addMethod = calcClass.getMethod("add", int.class, int.class);

            

            // 调用方法(等价于 calc.add(3, 5))

            int result = (int) addMethod.invoke(calc, 3, 5);

            System.out.println("计算结果:" + result); // 输出:8

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

5.2 调用私有方法(突破访问限制)

class PrivateMethodClass {

    private String formatName(String name) {

        return "Hello, " + name + "!";

}

}

public class InvokePrivateMethodDemo {

    public static void main(String[] args) {

        try {

            PrivateMethodClass obj = new PrivateMethodClass();

            Class<?> clazz = obj.getClass();

            

            // 获取私有方法(方法名、参数类型)

            Method privateMethod = clazz.getDeclaredMethod("formatName", String.class);

            

            // 允许访问私有成员

            privateMethod.setAccessible(true);

            

            // 调用方法(等价于 obj.formatName("xxx"))

            String result = (String) privateMethod.invoke(obj, "xxx");

            System.out.println(result); // 输出:Hello, xxx!

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

六、反射修改类属性

通过反射可以直接修改对象的属性值(包括私有属性),甚至绕过 setter 方法。

6.1 修改公有属性

class Book {

public String title = "默认书名";

}

public class ModifyFieldDemo {

    public static void main(String[] args) {

        try {

            Book book = new Book();

            Class<?> bookClass = book.getClass();

            

            // 获取公有属性title

            Field titleField = bookClass.getField("title");

            

            // 修改属性值(等价于 book.title = "反射详解")

            titleField.set(book, "反射详解");

            

            System.out.println(book.title); // 输出:反射详解

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

6.2 修改私有属性(突破访问限制)

class User {

    private String password = "123456";}

public class ModifyPrivateFieldDemo {

    public static void main(String[] args) {

        try {

            User user = new User();

            Class<?> userClass = user.getClass();

            

            // 获取私有属性password

            Field passwordField = userClass.getDeclaredField("password");

            

            // 允许访问私有成员

            passwordField.setAccessible(true);

            

            // 修改属性值(等价于 user.password = "new_password")

            passwordField.set(user, "new_password");

            

            // 验证修改结果

            System.out.println("新密码:" + passwordField.get(user)); // 输出:new_password

        } catch (Exception e) {

            e.printStackTrace();

        }

}

}

七、类加载器

类加载器(Class Loader)负责将 .class 文件加载到 JVM 中,生成对应的 Class 对象。 采用双亲委派模型,确保类的唯一性和安全性。

7.1 类加载器的层级

引导类加载器(Bootstrap Class Loader):加载 JDK 核心类(如 .lang.*),由 C++ 实现,无法通过  代码获取。

扩展类加载器(Extension Class Loader):加载 jre/lib/ext 目录下的 JAR 包。

应用类加载器(Application Class Loader):加载用户项目中的类(classpath 下的类)。

7.2 示例:查看类的加载器

public class ClassLoaderDemo {

    public static void main(String[] args) {

        // 获取String类的加载器(引导类加载器,输出null)

        ClassLoader stringLoader = String.class.getClassLoader();

        System.out.println("String类的加载器:" + stringLoader); // 输出:null

        

        // 获取当前类的加载器(应用类加载器)

        ClassLoader selfLoader = ClassLoaderDemo.class.getClassLoader();

        System.out.println("当前类的加载器:" + selfLoader); 

        // 输出:sun.misc.Launcher$AppClassLoader@18b4aac2

        

        // 获取应用类加载器的父加载器(扩展类加载器)

        ClassLoader parentLoader = selfLoader.getParent();

        System.out.println("父加载器:" + parentLoader); 

        // 输出:sun.misc.Launcher$ExtClassLoader@1b6d3586

}

}

7.3 双亲委派模型的作用

当加载一个类时,类加载器会先委托父类加载器尝试加载,直到引导类加载器。如果父类无法加载,才由当前类加载器加载。
好处:避免重复加载,防止核心类被篡改(如自定义 .lang.String 不会被加载)。

反射是  的 “动态之魂”,但过度使用会降低代码可读性和安全性(如破坏封装性)。实际开发中,框架(如 Spring)已封装了反射的复杂操作,开发者只需理解原理即可。建议结合源码(如 Spring 的 BeanFactory)深入学习反射的应用。

相关文章:

Java反射详细介绍

的反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时动态获取类的信息、操作类的成员&#xff08;属性、方法、构造器&#xff09;&#xff0c;甚至修改类的行为。它是框架开发&#xff08;如 Spring、MyBatis&#xff09;、单元测试工具&a…...

2025年土木建筑与水利工程国际会议(ICCHE 2025)

2025 International Conference on Civil and Hydraulic Engineering (ICCHE 2025) &#xff08;一&#xff09;会议信息 会议简称&#xff1a;ICCHE 2025 大会地点&#xff1a;中国银川 投稿邮箱&#xff1a;icchesub-paper.com 收录检索&#xff1a;提交Ei Compendex,CPCI,C…...

适应性神经树:当深度学习遇上决策树的“生长法则”

1st author: Ryutaro Tanno video: Video from London ML meetup paper: Adaptive Neural Trees ICML 2019 code: rtanno21609/AdaptiveNeuralTrees: Adaptive Neural Trees 背景 在机器学习领域&#xff0c;神经网络&#xff08;NNs&#xff09;凭借其强大的表示学习能力&…...

IBM BAW(原BPM升级版)使用教程第十四讲

续前篇&#xff01; 一、流程设计中的编程 在 IBM Business Automation Workflow (BAW) 中&#xff0c;编程部分涵盖了多种技术、工具和策略&#xff0c;帮助用户定制和扩展流程。BAW 主要通过脚本、集成、服务和自定义代码来实现流程的灵活性和定制化。下面将详细讲解 BAW …...

【计算机网络 第8版】谢希仁编著 第四章网络层 题型总结3 SDN OpenFlow

SDN OpenFlow题型 这题其实&#xff0c;认真看书P196-197的例子也不难理解。我个人认为所谓防自学设计主要就是你没看懂这张图的时候就是天书&#xff0c;你知道怎么读这张图的时候就很简单。不过我相信这个用心一点应该也都是能懂的。 题目 4.66-4.69 4-66 我最大的一个问题…...

【React中函数组件和类组件区别】

在 React 中,函数组件和类组件是两种构建组件的方式,它们在多个方面存在区别,以下详细介绍: 1. 语法和定义 类组件:使用 ES6 的类(class)语法定义,继承自 React.Component。需要通过 this.props 来访问传递给组件的属性(props),并且通常要实现 render 方法返回 JSX…...

多线程代码案例-1 单例模式

单例模式 单例模式是开发中常见的设计模式。 设计模式&#xff0c;是我们在编写代码时候的一种软性的规定&#xff0c;也就是说&#xff0c;我们遵守了设计模式&#xff0c;代码的下限就有了一定的保证。设计模式有很多种&#xff0c;在不同的语言中&#xff0c;也有不同的设计…...

langChain存储文档片段,并进行相似性检索

https://python.langchain.ac.cn/docs/how_to/document_loader_pdf/#vector-search-over-pdfs 这段代码展示了如何使用LangChain框架中的InMemoryVectorStore和OpenAIEmbeddings来存储文档片段&#xff0c;并基于提供的查询进行相似性搜索。下面是对每一行代码的详细解释&…...

MQTT协议技术详解:深入理解物联网通信基础

MQTT协议技术详解&#xff1a;深入理解物联网通信基础 1. MQTT协议概述 MQTT (Message Queuing Telemetry Transport) 是一种轻量级的发布/订阅消息传输协议&#xff0c;专为资源受限设备和低带宽、高延迟或不可靠网络环境设计。作为物联网通信的核心协议之一&#xff0c;MQTT…...

python中的进程锁与线程锁

在Python中&#xff0c;线程和进程使用锁的机制有所不同&#xff0c;需分别通过threading和multiprocessing模块实现。以下是具体用法及注意事项&#xff1a; 一、线程锁&#xff08;Thread Lock&#xff09; 基本用法 线程锁用于多线程环境下保护共享资源&#xff0c;防止数据…...

导出导入Excel文件(详解-基于EasyExcel)

前言&#xff1a; 近期由于工作的需要&#xff0c;根据需求需要导出导入Excel模板。于是自学了一下下&#xff0c;在此记录并分享&#xff01;&#xff01; EasyExcel&#xff1a; 首先我要在这里非常感谢阿里的大佬们&#xff01;封装这么好用的Excel相关的API&#xff0c;真…...

仿正点原子驱动BMP280气压传感器实例

文章目录 前言 一、寄存器头文件定义 二、设备树文件中添加节点 三、驱动文件编写 四、编写驱动测试文件并编译测试 总结 前言 本文驱动开发仿照正点原子的iic驱动实现&#xff0c;同时附上bmp280的数据手册&#xff0c;可访问下面的链接&#xff1a; BMP280_Bosch(博世…...

Java 反射机制(Reflection)

一、理论说明 1. 反射的定义 Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为 Jav…...

每日Prompt:发光线条解剖图

提示词 一幅数字插画&#xff0c;描绘了一个 [SUBJECT]&#xff0c;其结构由一组发光、干净且纯净的蓝色线条勾勒而成。画面设定在深色背景之上&#xff0c;以突出 [SUBJECT] 的形态与特征。某个特定部位&#xff0c;如 [PART]&#xff0c;通过红色光晕加以强调&#xff0c;以…...

从新手到高手:全面解析 AI 时代的「魔法咒语」——Prompt

引言&#xff1a;AI 时代的「语言炼金术」 在人工智能技术突飞猛进的今天&#xff0c;我们正在经历一场堪比工业革命的生产力变革。从聊天机器人到图像生成&#xff0c;从数据分析到自动化写作&#xff0c;AI 模型正在重塑人类与信息交互的方式。而在这一切背后&#xff0c;隐…...

【SpringBoot】集成kafka之生产者、消费者、幂等性处理和消息积压

目录 配置文件 application.properties启动类 ApplicationKafka 配置Message 消息实体类MessageRepository 消息处理消息积压监控服务Kafka消息消费者服务Kafka消息生产者服务API控制器提供测试接口关键特性说明生产环境建议 配置文件 application.properties # 应用配置 serv…...

[SAP] 通过事务码Tcode获取程序名

如何通过事务码查找对应的程序名&#xff1f; 方法一&#xff1a;直接运行事务码&#xff0c;跳转至功能详情页面&#xff0c;点击【系统】|【状态】即可获取对应事务码的程序名 从上面可以了解到自定义的事务码"ZMM01"对应的程序名为"ZYT36_ZMM001_01"&a…...

蓝桥杯12届国B 纯质数

题目描述 如果一个正整数只有 1 和它本身两个约数&#xff0c;则称为一个质数&#xff08;又称素数&#xff09;。 前几个质数是&#xff1a;2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 。 如果一个质数的所有十进制数位都是质数&#xff0c;我们称它为纯质数。例如&#xff1…...

国产大模型「五强争霸」,决战AGI!

来源 | 新智元 DeepSeek的横空出世&#xff0c;已经彻底改变了全球的AI局势。 从此&#xff0c;不仅中美大模型竞争格局改变&#xff0c;国产大模型的产业版图&#xff0c;也被一举打破&#xff01; 纵观中国基础大模型的市场&#xff0c;可以看到&#xff0c;如今的基础大模…...

C++修炼:继承

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…...

Mysql新增

插入一个记录需要的时间由下列因素组成&#xff0c;其中的数字表示大约比例&#xff1a; 连接&#xff1a;(3)发送查询给服务器&#xff1a;(2)分析查询&#xff1a;(2)插入记录&#xff1a;&#xff08;1x记录大小&#xff09;插入索引&#xff1a;&#xff08;1x索引&#x…...

华秋2025电子设计与制造技术研讨会(华东站)成功举办!

“探索科技前沿&#xff0c;共筑创新未来”——华秋“2025电子设计与制造技术研讨会第一站&#xff1a;华东站”在江苏苏州圆满落幕。 随着电子信息产业的持续增长和数字化经济的加速转型&#xff0c;数字化电子供应链的作用愈发显著。本届研讨聚焦EDA设计、DFM软件分析、多层…...

[学习] RTKLib详解:qzslex.c、rcvraw.c与solution.c

RTKLib详解&#xff1a;qzslex.c、rcvraw.c与solution.c 本文是 RTKLlib详解 系列文章的一篇&#xff0c;目前该系列文章还在持续总结写作中&#xff0c;以发表的如下&#xff0c;有兴趣的可以翻阅。 [学习] RTKlib详解&#xff1a;功能、工具与源码结构解析 [学习]RTKLib详解…...

【Ubuntu】neovim Lazyvim安装与卸载

安装neovim # 下载 AppImage wget https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage# 添加执行权限 chmod ux nvim-linux-x86_64.appimage# 移动到系统路径&#xff0c;重命名为 nvim sudo mv nvim-linux-x86_64.appimage /usr/local/b…...

数据结构(一) 绪论

一. 时间复杂度: (1)定义: 时间复杂度是衡量算法执行时间随输入规模(通常用n表示)增长的变化趋势的指标,时间复杂度用O符号表示 用于描述算法在最坏情况下或平均情况下的时间需求 时间复杂度关注的是操作次数的增长率&#xff0c;而非具体执行时间 常见的时间复杂度由小到大依次…...

数据库事务并发问题

目录 脏读 幻读 不可重复读 三者的区别 脏读、幻读和不可重复读是在数据库并发操作中可能出现的问题&#xff0c;以下是对它们的详细介绍&#xff1a; 脏读 定义&#xff1a;指一个事务读取了另一个未提交事务修改的数据。示例&#xff1a;事务 A 修改了一条数据&#xf…...

Android之横向滑动列表

文章目录 前言一、效果图二、使用步骤1.xml布局2.代码3.HomeHxBean3.adapter4.item布局5.两个drawable 总结 前言 横向滑动列表有多种实现方式&#xff0c;也可以用tablayout&#xff0c;也可以用recyclerview&#xff0c;今天主要介绍recyclerview。 一、效果图 二、使用步骤…...

系统稳定性之上线三板斧

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…...

aardio - godking.vlistEx.listbar + win.ui.tabs 实现多标签多页面切换

方法一&#xff1a; import win.ui; import godking.vlistEx.listbar; import fonts.fontAwesome; /*DSG{{*/ mainForm win.form(text"vlistEx - table adapter";right895;bottom503) mainForm.add({ custom{cls"custom";text"自定义控件";lef…...

鸿蒙 核心与非核心装饰器

HarmonyOS NEXT 版本中完整的 ArkTS 装饰器分类整理&#xff08;含核心与非核心装饰器&#xff0c;已剔除废弃特性&#xff09; 一、核心装饰器&#xff08;Essential Decorators&#xff09; 1. 组件基础 装饰器功能Entry应用入口组件&#xff0c;每个模块必须且仅有一个&am…...

TypeScript 知识框架

一、TypeScript 基础 1. 类型系统 基本类型: number, string, boolean, null, undefined, symbol, bigint 引用类型: object, array, function, class 特殊类型: any, unknown, void, never 类型推断与类型注解 类型断言 (as 语法和 <Type> 语法) 2. 接口与类型别名 接口…...

web-ui开源程序是建立在浏览器使用的基础上,旨在使 AI 代理可以访问网站

​一、软件介绍 文末提供程序和源码下载 web-ui开源程序是建立在浏览器使用的基础上&#xff0c;旨在使 AI 代理可以访问网站。WebUI&#xff1a;基于 Gradio 构建&#xff0c;支持大部分 browser-use 功能。此 UI 设计为用户友好型&#xff0c;并支持与浏览器代理轻松交互。扩…...

【ns3】TCP三次握手源码解析

文章目录 TCP三次握手过程三次握手源码 TCP三次握手过程 三次握手源码 下面是ns3里三次握手整体过程的源码&#xff0c;和上面图解一一对应&#xff1a; TCP socket的状态枚举&#xff1a; 整体过程&#xff1a; 客户端首先connect&#xff1a;tcp-socket-base::connect调用Do…...

【YOLO模型】参数全面解读

使用YOLO模型时&#xff0c;需要调节各种参数&#xff0c;网络文章和官方文档有点不方便&#xff0c;整理了下面的内容备用&#xff1a; 获取最全最新的参数列表: Ultralytics官方文档: 这是获取YOLOv11&#xff08;以及YOLOv8等&#xff09;最权威、最详细参数信息的地方。通…...

跨境电商定价革命:亚马逊“逆向提价“策略背后的价值重构逻辑

导言&#xff1a;打破价格魔咒的销量奇迹 2024年Q3亚马逊平台上演商业悖论&#xff1a;在TOP5000卖家中&#xff0c;12%实施5%-15%温和提价的商户&#xff0c;41%实现单量30.4%的季度增长。这一现象颠覆"低价即流量"的电商铁律&#xff0c;揭开新消费时代"价值定…...

Kafka、RabbitMQ、RocketMQ的区别

以下是 RabbitMQ、RocketMQ、Kafka 的核心区别对比&#xff1a; 一、架构设计差异 ‌Kafka‌ 基于分布式日志的发布-订阅模型&#xff0c;通过分区&#xff08;Partition&#xff09;实现水平扩展&#xff0c;依赖 ZooKeeper 管理集群消费者通过消费者组&#xff08;Consumer G…...

win10 局域网内聊天

在 Windows 10 的局域网 中&#xff0c;如果你想实现 多个用户之间的聊天功能&#xff0c;可以选择以下几种方案&#xff0c;取决于你需要的是&#xff1a; • ✅ 命令行纯文字聊天&#xff08;如 Linux talk&#xff09; • ✅ 图形界面聊天室 • ✅ 局域网广播消息 • ✅ 多人…...

【前端三剑客】Ajax技术实现前端开发

目录 一、原生AJAX 1.1AJAX 简介 1.2XML 简介 1.3AJAX 的特点 1.3.1AJAX 的优点 1.3.2AJAX 的缺点 1.4AJAX 的使用 1.4.1核心对象 1.4.2使用步骤 1.4.3解决IE 缓存问题 1.4.4AJAX 请求状态 二、jQuery 中的AJAX 2.1 get 请求 2.2 post 请求 三、跨域 3.1同源策略…...

论文学习_Trex: Learning Execution Semantics from Micro-Traces for Binary Similarity

摘要&#xff1a;检测语义相似的函数在漏洞发现、恶意软件分析及取证等安全领域至关重要&#xff0c;但该任务面临实现差异大、跨架构、多编译优化及混淆等挑战。现有方法多依赖语法特征&#xff0c;难以捕捉函数的执行语义。对此&#xff0c;TREX 提出了一种基于迁移学习的框架…...

数据压缩的概念和优缺点

一、数据压缩的概念 数据压缩是通过特定算法&#xff08;压缩算法&#xff09;对数据进行重新编码&#xff0c;以减少数据存储空间或传输带宽的技术。其核心目标是在不丢失关键信息&#xff08;或允许一定程度信息损失&#xff09;的前提下&#xff0c;降低数据量&#xff0c;…...

spaCy基础入门

spaCy 概览说明 spaCy 是一个现代、快速、工业级 NLP 工具库&#xff0c;专门为实际工程应用设计&#xff0c;提供&#xff1a; • 分词&#xff08;Tokenization&#xff09; • 词性标注&#xff08;POS Tagging&#xff09; • 命名实体识别&#xff08;NER&#xff09; •…...

vue3项目创建-配置-elementPlus导入-路由自动导入

目录 方法一&#xff1a;create-vue 方法二 &#xff1a;Vite Vue Vite.config.ts配置 引入element-plus 安装 如何在项目中使用 Element Plus 完整引入 按需导入 vue3vite中自动配置路由的神器&#xff1a;vite-plugin-pages 1. 安装 2、修改vite.config.js中配置…...

2025年的电脑能装win7吗_2025年组装电脑装win7详细图文教程

2025年的电脑能装win7吗&#xff1f;2025年的电脑可以安装Win7&#xff0c;但存在一些限制和挑战。2025年的电脑基本上是14代和15代处理器&#xff0c;需要特定的条件和步骤才能安装win7&#xff0c;并且只能采用独立显卡&#xff0c;因为没有集成显卡驱动。另外注意目前2025年…...

windowsC++操作ADB

文章目录 一、ADB基础1. 工作原理2. 安装与配置 二、常用ADB指令分类1. 设备连接与管理2. 文件传输3. 应用管理4. 设备交互5. 系统信息6. 日志与调试7. 网络与端口转发 三、高级用法1. 多设备管理2. 无线ADB连接3. 批量执行命令4. ADB脚本示例 四、常见问题与解决方案五、注意事…...

Springboot实现重试机制

背景 研发工作中时常遇到要和其他服务对接&#xff0c;依赖对方能力的情况&#xff0c;最恶心的是对方提供的服务不稳定&#xff0c;时灵时不灵的&#xff0c;进而影响到自己功能的稳定性。万一发生了这种事&#xff0c;做为研发&#xff0c;咱该怎么办&#xff1f;通过容错直接…...

CS内网渗透 ----【内网渗透实战】PsExec vs Telnet:建立IPC通道实现横向移动与域控上线全解析

目录 1. 什么是 PsExec&#xff1f; 2. 什么是 Telnet&#xff1f; 3. PsExec 与 Telnet 的区别及优势 3.1 主要区别 3.2 内网渗透中的优势 4. 实际案例 —— 使用 PsExec 上线域控主机 案例背景 操作步骤 案例效果 5. 总结 利用 PsExec 建立 IPC 通道 —— IPC 的定…...

第二十三天打卡

作业&#xff1a; 整理下全部逻辑的先后顺序&#xff0c;看看能不能制作出适合所有机器学习的通用pipeline 数据预处理 → 特征选择 → 降维 → 模型训练 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split, GridSearchCV from sk…...

aardio - 将文本生成CSS格式显示

import win.ui; /*DSG{{*/ var winform win.form(text"aardio form";right759;bottom469) winform.add( button{cls"button";text"Button";left340;top130;right430;bottom180;z3}; edit{cls"edit";text"我是一串文本";lef…...

【漫话机器学习系列】256.用 k-NN 填补缺失值

用 k-NN 填补缺失值&#xff1a;原理、实现与应用 在实际的数据科学项目中&#xff0c;我们经常会遇到数据缺失&#xff08;Missing Values&#xff09;的问题。缺失值如果处理不当&#xff0c;不仅会影响模型训练&#xff0c;还可能导致最终结果偏差。 今天&#xff0c;我们…...

tomcat与nginx之间实现多级代理

准备工作 准备5台虚拟主机&#xff1b;至少准备3台虚拟主机&#xff1b; 设备1作为代理服务器&#xff1b;设备2与设备4作为处理静态资源请求服务器&#xff08;使用nginx&#xff09;&#xff1b;设备3与设备5作为处理动态资源服务器&#xff08;使用tomcat&#xff09; 设…...