Java漏洞原理与实战
一、基本概念
1、序列化与反序列化
(1)序列化:将对象写入IO流中,ObjectOutputStream类的writeobject()方法可以实现序列化
(2)反序列化:从IO流中恢复对象,ObjectinputStream类的readObject()方法用于反序列化
(3)意义:序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以保存到磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在
(4)序列化与反序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化储存。主要应用在以下场景:
HTTP:多平台之间的通信,管理等,也可以用于流量带外
RMI:是Java的一组拥护开发分布式应用程序的API,实现了不同操作系统之间程序的方法调用。值得注意的是,RMI的传输100%基于反序列化,Java RMI的默认端口是1099端口
JMX:JMX是一套标准的代理和服务,用户可以在任何Java应用程序中使用这些代理和服务实现管理,中间件weblogic的管理页面就是基于JMX开发的,而JBoss则整个系统都基于JMX框架
(5)Java代码审计思路
如果是Java原生类,则需要入口类readObject方法,同时实现了序列化接口,使其可以进行有效的反序列化,此时如果存在DNS解析,或者实现反序列化(利用Runtime对象进行类反射操作)
需要有最终的执行函数(可以执行代码或者命令),比如Runtime.getRuntime().exec,ProcessBuilder().start,getHostAddress,文件读写...等等,这些函数需要自己平常去收集,这样审计起来会更得心应手
2、Java类反射机制
(1) 反射机制的作用:通过Java语言中的反射机制可以操作字节码文件(可以读和修改字节码文件),可以通过另外的方式调用到类的属性和方法,甚至私有属性和方法
(2)反射机制的相关类在java.lang.reflect.*包下面
(3)反射机制的相关类有哪些:Constructor、Field、Method、Class等类
(4)java.lang.Class代表字节码文件,代表整个类
(5)java.lang.reflect.Method代表字节码中的方法字节码,代表类中的方法java.lang.reflect.Constructor代表字节码中的构造方法字节码,代表类中的构造方法java.lang.reflect.Field代表字节码中的属性字节码,代表类中的属性
(6)Java中为什么要使用反射机制,直接创建对象不是更方便?
如果有多个类,每个用户所需求的对象不同,直接创建对象,就要不断的去new一个对象,非常不灵活。而Java反射机制,在运行时确定类型,绑定对象,动态编译最大限度发挥了java的灵活性
(7)获取成员变量
(8)获取并调用方法
(9)获取构造方法
(10)访问私有属性
二、类反射机制实践
package com.woniu.vul;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;class Test{public String name = "蜗牛学苑";public int age = 8;private String addr = "西安";private int price = 10000;public Test() {}public Test(int price){this.price = price;}public int setPrice(int price){System.out.println("新价格为:" + price);return price;}public int getPrice(){return this.price;}private void getAddr(){System.out.println("私有方法:" + addr);}}public class Reflect {public static void main(String[] args) throws Exception {/*Test t = new Test();System.out.println(t.getPrice());Test t1 = new Test(15000);System.out.println(t1.getPrice());System.out.println(t.name);*///使用反射机制实现属性和方法的调用(包括构造方法)//使用Class.forName可以获取到类本身,在JVM中动态加载Test类//Class clazz = Class.forName("com.woniu.vul.Test");//Class clazz = Test.class;//使用new Instance进行实例化//Test t = (Test) clazz.newInstance();//System.out.println(t.getPrice());//Object o = clazz.newInstance(); //实例化动态加载的类,类型必须是Object// Method m1 = clazz.getMethod("getPrice");
// int price1 = (int)m1.invoke(o,null);
// System.out.println(price1);
//
// Method m2 = clazz.getMethod("setPrice",int.class);
// int price2 = (int)m2.invoke(o,15000);
// System.out.println(price2);//调用price私有属性和getAddr私有方法,getFiled只能调用公有属性,getDeclareField才能调私有属性//Field f1 = clazz.getDeclaredField("price");//f1.setAccessible(true); //设置私有属性可访问//System.out.println(f1.get(o));//getMethod只能调用公有方法,而getDeclareMethod才能嗲用私有方法//Method m1 = clazz.getDeclaredMethod("getAddr");//m1.setAccessible(true);//m1.invoke(o,null);//构造方法如果有参数,怎么办?Class clazz = Class.forName("com.woniu.vul.Test");Constructor c = clazz.getConstructor(int.class); //获取到一个带参数的构造器Object o = c.newInstance(10); //用构造器去构造一个动态加载的类Method m1 = clazz.getDeclaredMethod("getPrice");int price = (int) m1.invoke(o,null);System.out.println(price);//遍历所有方法或操作Method[] methods = clazz.getDeclaredMethods();for (Method method : methods) {System.out.println(method + " " + method.getName() + " " + method.getModifiers());}Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {System.out.println(field + " " + field.getName() + " " + field.getModifiers());}}
}
三、序列化与反序列化
序列化的实现代码
package com.woniu.vul;import java.io.*;class Student implements Serializable {public String name = "";public int id = 0;public String phone = "";public Student(){System.out.println("构造方法运行");}public void study(){System.out.println("学生正在学习");}public void sleep(){System.out.println("学生正在休息");}
}public class Unserial {public void serial() throws Exception {Student s = new Student();s.name = "张三";s.id = 12345;s.phone = "188123456786";FileOutputStream fos = new FileOutputStream("./data/student.ser");ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(s);}public void unserial() throws Exception {FileInputStream fis = new FileInputStream("./data/student.ser");ObjectInputStream ois = new ObjectInputStream(fis);Student obj =(Student) ois.readObject();System.out.println(obj.name);obj.study();}public static void main(String[] args) throws Exception {Unserial us = new Unserial();//us.serial();us.unserial();}
}
序列化的内容如下:
然后进行反序列化,切记不要去改我们的序列化内容,不然无法反序列化回去
我们再补充两个小问题
正常情况下,高亮部分是可以被序列化的,但是如果在这之前加上transient来修饰的话就无法序列化
高亮部分的意思就是定义一个序列化版本的编号,也就是唯一标识
这个标识是用来干嘛的
接下来我们看看
我们重新反序列化看看效果
报错信息告诉我们是一个不可用的类
为什么不可用,让我们继续看报错信息
序列化的时候类的ID是前面的那一个,但是反序列的时候类的ID是后面那一个,序列化和反序列化的时候标识号是不一样的,意思就是这个类并不是我们需要反序列化的类
我们将代码中的ID改为其序列化时候原本的ID,那我们就可以完成反序列化的操作了
也就是说这个类在序列化的时候会记录下其类的标识UID
接下来我们看看反序列化产生的机制
首先这个序列化对象一旦有重写的方法,那我们在反序列化的时候会优先调用重写的readObject
因为我们重写了readObject,所以就会先调用readObject,这就是Java反序列化的起点,也是唯一的起点
也就是说Java反序列化漏洞能够被利用,我们得有一个最基本的前提,就是目标类必须重写readObject方法,只有这样,代码才会被自动调用,否则就没有起点
如果不重写readObject方法的话,就不会发生Java反序列化漏洞
而我们的代码已经重写了readObject方法,所以我们可以对其利用
我们可以直接在重写方法的下面加上终点,也就是攻击者想要达到的效果,有始有终,整个攻击链才算完整
当然我们也可以使用类反射机制的手段去执行命令
因为getRuntime的实例不是纯粹的new出来的,而是通过调用getRuntime这个方法来获取其实例的,然后再通过这个实例去调用exec
加载java.lang.Runtime类
获取Runtime类中的getRuntime方法
调用Runtime方法,获取Runtime类的实例
获取Runtime类中的exec(string)方法
调用exec(String)方法,运行外部命令ifconfig
运行代码,发现没有报错,说明应该是利用成功了,我不知道为啥不会显示执行ifconfig命令的内容,如果是Windows的话,可以将ifconfig改为calc.exe,大概率会显示出计算器
当然为了执行命令,不仅仅只有Runtime,还有ProcessBuilder
接下来我们看看其反射的调用
根据正常的调用来构造反射
先使用Class.forName这个方法来加载java.lang.ProcessBuilder这个类
然后使用Class对象的getConstructor来获取Processbuilder类的构造函数
接着使用Constructor对象的newInstance方法来创建ProcessBuilder的实例
然后使用Class对象的getMethod方法去获取ProcessBuilder中的start方法
最后使用Method对象的invoke方法去调用start方法
然后运行,发现报错,是类型出现了错误
我们先去看看ProcessBuilder的构造方法,它不是严格意义上的String,是String...(可变长的字符串)如果是whoami /user这条命令的话,我们得写到两个字符串里面,在Java中,对于可变长的字符串是将其放入到数组当中去
然后我们将其修改为String[].class
然后继续运行,然后还是报错说类型不匹配
就是因为我们上面定义的是数组,下面是字符串,所以会报错
所以我们要将下面的类型转换为数组类型就可以了,也就是将其放到数组中就可以了,如下
继续运行,发现还是报错,报错信息还是类型不匹配
我们去看看newInstace的构造方法,发现还是一个数组,它的类型是数组,数组里面的参数还是一个数组
所以这个cmd的类型要定义成二维数组,二维数组只需加两个{}即可,如下
然后去运行,发现没有报错,但是也没有回显命令的内容,应该是电脑的问题,如果是Windows的话在命令那一块改为calc.exe就可以打开计算器了
相关文章:
Java漏洞原理与实战
一、基本概念 1、序列化与反序列化 (1)序列化:将对象写入IO流中,ObjectOutputStream类的writeobject()方法可以实现序列化 (2)反序列化:从IO流中恢复对象,ObjectinputStream类的readObject()方法用于反序列化 (3)意义:序列化机制允许将实现序列化的J…...
查看matlab函数帮助文档的方法
方法一:在命令行窗口中使用help命令 方法二:在命令行窗口中使用doc命令 方法三:在帮助文档中搜索关键字...
string函数具体事例
输出所有字串出现的位置 输入两个字符串A和B,输出B在A中出现的位置 输入 两行 第一行是一个含有空格的字符串 第二行是要查询的字串 输出 字串的位置 样例输入 I love c c python 样例输出 -1 样例输入 I love c c c 样例输出 8 12 #include<iostream> #inclu…...
OpenCV 中的分水岭算法的原理及其应用---图像分割的利器
图像分割作为计算机视觉的基石领域,历经数十年的演进与革新,从传统的图像处理方法到如今蓬勃发展的深度学习技术,始终推动着计算机视觉应用的边界拓展。本系列文章将通过三篇深度技术博客,分别对三种极具代表性的图像分割技术展开…...
Python项目--基于机器学习的股票预测分析系统
1. 项目介绍 在当今数字化时代,金融市场的数据分析和预测已经成为投资决策的重要依据。本文将详细介绍一个基于Python的股票预测分析系统,该系统利用机器学习算法对历史股票数据进行分析,并预测未来股票价格走势,为投资者提供决策…...
第三阶段面试题
Nginx nginx常用模块以及其功能 proxy模块,进行代理功能 ssl模块,进行HTTPS协议的使用 gzip模块,进行传输数据的压缩 upstream模块,进行反向代理时使用 static模块,静态资源进行访问的模块 cache模块࿰…...
spring响应式编程系列:总体流程
目录 示例 程序流程 just subscribe new LambdaMonoSubscriber MonoJust.subscribe new Operators.ScalarSubscription onSubscribe request onNext 时序图 类图 数据发布者 MonoJust …...
基于PySide6与pyCATIA的圆柱体特征生成工具开发实战——NX建模之圆柱命令的参考与移植
引言 在机械设计领域,特征建模的自动化是提升设计效率的关键。本文基于PySide6与pycatia技术栈,深度解析圆柱特征自动化生成系统的开发实践,涵盖参数化建模、交互式元素选择、异常处理等核心模块,实现比传统手动操作提升3倍效率的…...
kafka jdbc connector适配kadb数据实时同步
测试结论 源端增量获取方式包括:bulk、incrementing、timestamp、incrementingtimestamp(混合),各种方式说明如下: bulk: 一次同步整个表的数据 incrementing: 使用严格的自增列标识增量数据。不支持对旧数据的更新…...
pgsql中使用jsonb的mybatis-plus和jps的配置
在pgsql中使用jsonb类型的数据时,实体对象要对其进行一些相关的配置,而mybatis和jpa中使用各不相同。 在项目中经常会结合 MyBatis-Plus 和 JPA 进行开发,MyBatis_plus对于操作数据更灵活,jpa可以自动建表,两者各取其…...
4.17-4.18学习总结 多线程
并发与并行: 并发和并行是有可能都在发生的。 多线程的实现方式: 第一种:创建子类对象,调用start方法启动线程。 第二种: 第三种: 第一种和第二种不可以获取到多线程结果,但第三章种可以。 多…...
无人机在农业中的应用与挑战!
一、无人机在农业中的作用 1. 提升作业效率与降低成本 无人机在喷洒农药、播种、施肥、吊运等环节显著提升效率。例如,湖北秭归县使用大疆T100无人机吊运脐橙,单次85公斤的运输任务仅需2分钟,而人工需1小时,综合成本降低250元…...
无刷电机槽数相同、转子极数不同的核心区别
一、基础原理差异 无刷电机的核心参数: 槽数(定子槽数,记为 ( Z )):定子铁芯上的绕组槽数量,决定绕组布局。极数(转子磁极数,记为 ( 2p )):转子上的永磁体磁极对数(总极数为 ( 2p ),如 ( p=4 ) 表示 8 极)。核心关系:槽极配合(( Z/2p ))决定电机电磁结构,相同…...
为您的照片提供本地 AI 视觉:使用 Llama Vision 和 ChromaDB 构建 AI 图像标记器
有没有花 20 分钟浏览您的文件夹以找到心中的特定图像或屏幕截图?您并不孤单。 作为工作中的产品经理,我总是淹没在竞争对手产品的屏幕截图、UI 灵感以及白板会议或草图的照片的海洋中。在我的个人生活中,我总是捕捉我在生活中遇到的事物&am…...
OpenAI 34页最佳构建Agent实践
penAI发布O4,也发布34页最佳构建Agent实践,值得阅读。 什么是Agent? 传统软件使用户能够简化和自动化工作流程,而代理能够以高度独立的方式代表用户执行相同的工作流程。 代理是能够独立地代表您完成任务的系统。 工作流程是必…...
第 5 期(进阶版):训练第一个 DDPM 模型(使用 CIFAR-10 数据集)
—— 用 DDPM 模型生成彩色图像,感受扩散魔法在 CIFAR-10 上的威力! 本期目标 将 MNIST 替换为 CIFAR-10; 模型结构适配 RGB 三通道输入; 保持原始扩散与采样流程; 增加图像可视化对比! 数据准备&…...
进程间通信(IPC)----共享内存
进程间通信(IPC)的共享内存机制允许不同进程直接访问同一块物理内存区域,是速度最快的IPC方式(无需数据拷贝)。 一、共享内存核心概念 1. 基本原理 共享内存区域:由内核管理的特殊内存段,可被…...
Xcode16 调整 Provisioning Profiles 目录导致证书查不到
cronet demo 使用的 ninja 打包,查找 Provisioning Profiles 路径是 ~/Library/MobileDevice/Provisioning Profiles,但 Xcode16 把该路径改为了 ~/Library/Developer/Xcode/UserData/Provisioning Profiles,导致在编译 cronet 的demo 时找不…...
Debian服务器环境下env变量丢失怎么办
在 Debian服务器环境下,如果出现了 env 环境变量丢失的问题,比如常见的 PATH、JAVA_HOME、PYTHONPATH 等系统变量或自定义变量不起作用,可能会导致一些命令无法执行、服务无法启动、脚本报错等。 这个问题常见于: 使用 cron、sy…...
搜广推校招面经七十八
字节推荐算法 一、实习项目:多任务模型中的每个任务都是做什么?怎么确定每个loss的权重 这个根据实际情况来吧。如果实习时候用了moe,就可能被问到。 loss权重的话,直接根据任务的重要性吧。。。 二、特征重要性怎么判断的&…...
ctf.show—Web(1-10)详细通关教程
Web1-签到题 1、按F12查看元素,发现有一段被注释的字符串 2、看起来并不像flag,格式类似于Base64编码 扔到Base64在线编码平台:Base64 编码/解码 - 锤子在线工具此工具是一个 Base64 编码或解码在线工具,实现把字符串转成 Base6…...
双层Key缓存
双层 Key 缓存是一种针对 缓存击穿 和 雪崩问题 的优化方案,其核心思想是通过 主备双缓存 的机制,确保在热点数据过期时仍能提供可用服务,同时降低对数据库的瞬时压力。以下是其核心原理、实现细节及适用场景的深度解析: 一、核心…...
android编译使用共享缓存
注意 服务器端与客户端系统的版本号需为Ubuntu20.04ccache版本不能低于4.4执行用户需要为sudo权限服务器端nfs目录权限必须为nobody:nogroup 一、服务端配置: 在服务器192.168.60.142上配置 NFS 共享 1.安装 NFS 服务器: 1 sudo apt-get install nfs…...
如何使用Labelimg查看已经标注好的YOLO数据集标注情况
文章目录 1、 安装并运行Labelimg1.1、安装Labelimg1.2、运行Labelimg 2、查看数据集标注情况2.1、创建类别名称文件classes.txt2.2、使用Labelimg打开查看标注文件2.3、正式标注 3、目标检测系列文章 本文主要介绍一下如何使用LabelImg查看已经标注好的YOLO数据集标注情况&…...
Web3架构下的数据隐私与保护
在这个信息爆炸的时代,Web3的概念如同一股清流,以其去中心化的特性,为数据隐私与保护带来了新的希望。Web3,也被称作下一代互联网,它通过区块链技术实现数据的去中心化存储和处理,旨在提高数据的安全性和隐…...
PCM 参数深度解析:采样率、帧、缓存大小与多通道关系
将下面的 PCM 配置作为例子: config.channels 2; // 立体声(2 个通道) config.rate 48000; // 采样率 48000 Hz,即每秒 48000 帧 config.period_size 1024; // 每个周…...
Kafka消费者端重平衡流程
重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端,重平衡分为两个步骤:分别是加入组和等待领导者消费者(Leader Consumer)分配方案。这两个步骤分别对应两类…...
【字节跳动AI论文】海姆达尔:生成验证的测试时间扩展
摘要:人工智能系统只能在能够验证知识本身的范围内创建和维护知识。 最近关于长链推理的研究表明,LLM在解决竞争问题方面具有巨大的潜力,但它们的验证能力仍然很弱,而且没有得到充分的研究。 在本文中,我们提出了Heimd…...
【Datawhale Al春训营】气象预测(AI+航空安全)竞赛笔记
这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...
大模型应用开发实战:AI Agent与智能体开发技术解析
更多AI大模型应用开发学习内容,尽在聚客AI学院 一、AI Agent的核心概念 AI Agent(智能体)是基于大模型构建的自主任务执行系统,能够根据用户指令拆解目标、调用工具、完成复杂任务(如数据分析、自动化办公)…...
《Learning Langchain》阅读笔记3-基于 Gemini 的 Langchain如何从LLMs中获取特定格式
纯文本输出是有用的,但在某些情况下,我们需要 LLM 生成结构化输出,即以机器可读格式(如 JSON、XML 或 CSV)或甚至以编程语言(如 Python 或 JavaScript)生成的输出。当我们打算将该输出传递给其他…...
Mac mini 安装mysql数据库以及出现的一些问题的解决方案
首先先去官网安装一下mysql数据库,基本上都是傻瓜式安装的流程,我也就不详细说了。 接下来就是最新版的mysql安装的时候,他就会直接让你设置一个新的密码。 打开设置,拉到最下面就会看到一个mysql的图标: 我设置的就是…...
智能体时代的产业范式确立,中国企业以探索者姿态走出自己的路
作者 | 曾响铃 文 | 响铃说 当前,一个新的20年的产业升级期已经开启,系统性的发展路径也正在形成。 前不久,以“共建智能体时代“为主题的超聚变探索者大会2025在河南郑州举办。超聚变变数字技术有限公司(以下简称:…...
电路安全智控系统与主机安全防护系统主要功能是什么
电路安全智控系统被称为电路安全用电控制系统。电路安全智控系统具备一系列强大且实用的功能。电路安全智控系统能够对总电压、总电流、总功率、总电能,以及各分路的电压、电流、功率、电能和功率因素等进行全方位的监控。在大型工厂的电力分配中,通过对…...
MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构,基于2025年技术演进与产业实践
MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构 (基于2025年技术演进与产业实践) MCP模型上下文协议 一、技术底座革新:MCP协议重构AI时代的"数字接口" 传统SaaS软件向大模型AI应用转型的核心矛盾…...
【工具变量】地市农业播种面积及粮食产量等21个相关指标(2013-2022年)
粮食产量、粮食播种面积及农作物播种面积等,是衡量农业发展水平和粮食安全的重要指标。随着全球粮食需求的持续增长,准确掌握这些数据对制定农业政策、优化生产结构和提高农业生产效率至关重要。因此,缤本次分享数据包括《中国统计NJ》、《中…...
使用 PySpark 批量清理 Hive 表历史分区
使用 PySpark 批量清理 Hive 表历史分区 在大数据平台中,Hive 表通常采用分区方式存储数据,以提升查询效率和数据管理的灵活性。随着数据的不断积累,历史分区会越来越多,既占用存储空间,也影响元数据管理性能。因此&a…...
A. k-th equality(1700)
Problem - 1835A - Codeforces Daily_CF_Problems/daily_problems/2025/04/0417/solution/cf1835a.md at main Yawn-Sean/Daily_CF_Problems 考虑所有形式为 abc 的等式,其中 a有 A 位数, b 有 B 位数, c 有 C 位数。所有数字都是正整数,求…...
深度学习-torch,全连接神经网路
3. 数据集加载案例 通过一些数据集的加载案例,真正了解数据类及数据加载器。 3.1 加载csv数据集 代码参考如下 import torch from torch.utils.data import Dataset, DataLoader import pandas as pd class MyCsvDataset(Dataset):def __init__(self, fil…...
echarts饼图中心呈现一张图片,并且能动态旋转的效果react组件
实现效果: 父组件: import React from react import styles from ./style.less import GaugeChart from ./GaugeChart;export default function index() {return (<div><div className{styles.bg} ></div><div style{{ width: 500…...
使用Docker搭建开源Email服务器
使用Docker搭建开源Email服务器 1 介绍 开源的Email服务器比较多,例如:poste.io、MailCatcher、Postal、mailcow等。由于poste.io支持docker安装,页面比较美观,使用简单,支持SMTP IMAP POP3等协议,安全…...
css图片设为灰色
使用filter方式将图片设置为灰色 普通图片使用:filter: saturate(0); 纯白图片使用: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"width…...
2025 年第十五届 MathorCup竞赛赛题浅析-助攻快速选题
本届妈杯竞赛各赛题难度均已经达到了国赛难度,也更好的回应了大家更为关心的,在当前AI环境下,似乎“数学建模变成了AI使用竞赛一样”。但是国委会一直以来都是一个态度:AI现在是无法直接解决任何一个国赛赛题的。对应的如今这句话…...
【android bluetooth 案例分析 03】【PTS 测试 1】【pts基本介绍】
Bluetooth SIG(Special Interest Group)提供的 PTS(Profile Tuning Suite)测试 是蓝牙认证过程中一项极为关键的步骤。它主要用于验证设备是否符合 Bluetooth SIG 制定的各项 蓝牙规范(Bluetooth Specification&#x…...
Java集合框架深度解析:HashMap、HashSet、TreeMap、TreeSet与哈希表原理详解
一、核心数据结构总览 1. 核心类继承体系 graph TDMap接口 --> HashMapMap接口 --> TreeMapSet接口 --> HashSetSet接口 --> TreeSetHashMap --> LinkedHashMapHashSet --> LinkedHashSetTreeMap --> NavigableMapTreeSet --> NavigableSet 2. 核心…...
【深度学习】张量计算:爱因斯坦求和约定|tensor系列03
博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾:【深度学习】详解矩阵乘法、点积,内积,外积、哈达玛积极其应用|tensor系列02每日一言🌼: “岱宗夫如何&…...
OpenHarmony-Risc-V上运行openBLAS中的benchmark
OpenHarmony-Risc-V上运行openBLAS中的benchmark 文章目录 OpenHarmony-Risc-V上运行openBLAS中的benchmark前言一、编译openBLAS1.源码下载2.工具链下载3.编译并安装openBLAS 二、编译open BLAS中的benchmark三、上设备运行总结 前言 参考https://zhuanlan.zhihu.com/p/18825…...
CCF CSP 第36次(2024.12)(2_梦境巡查_C++)
CCF CSP 第36次(2024.12)(2_梦境巡查_C) 解题思路:思路一: 代码实现代码实现(思路一): 时间限制: 1.0 秒 空间限制: 512 MiB 原题链接 解题思路…...
windows下安装mcp servers
以sequential-thinking为例 macos下安装就像github readme中那样安装即可: {"mcpServers": {"sequential-thinking": {"command": "npx","args": ["-y","modelcontextprotocol/server-sequenti…...
OpenGauss 数据库介绍
OpenGauss 数据库介绍 OpenGauss 是华为基于 PostgreSQL 开发的企业级开源关系型数据库,现已成为开放原子开源基金会的项目。以下是 OpenGauss 的详细介绍: 一 核心特性 1.1 架构设计亮点 特性说明优势多核并行NUMA感知架构充分利用现代CPU多核性能行…...