Java基础 - 14 - Java高级技术
一.单元测试
就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试
1.1 Junit单元测试框架
可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,如IDEA)
优点
可以灵活的编写测试代码,可以针对某个方法执行测试,也支持一键完成对全部方法的自动化测试,且各自独立
不需要程序员去分析测试的结果,会自动生成测试报告出来

//StringUtil
public class StringUtil {public static void printNumber(String name){if(name == null){System.out.println("名字长度:" + 0);return;}System.out.println("名字长度:" + name.length());}//求字符串的最大索引public static int getMaxIndex(String data){if(data == null){return -1;}return data.length()-1;}
}//StringUtilTest
//测试类
public class StringUtilTest {@Test //测试方法的必须拥有@Test注解public void testPrintNumber(){StringUtil.printNumber("admin");StringUtil.printNumber(null);}@Test //测试方法的必须拥有@Test注解public void testGetMaxIndex(){int index1 = StringUtil.getMaxIndex(null);System.out.println(index1);int index2 = StringUtil.getMaxIndex("admin");System.out.println(index2);//断言机制:程序员可以通过预测业务方法的结果Assert.assertEquals("方法内有bug",4,index2);}
}
1.2 Junit框架的常用注解

在测试方法执行前执行的方法,常用于:初始化资源
在测试方法执行完后再执行的方法,常用于:释放资源
//测试类
public class StringUtilTest {@Beforepublic void test1(){System.out.println("----> test1 Before 执行了 -----------");}@Afterpublic void test2(){System.out.println("----> test2 After 执行了 -----------");}@BeforeClasspublic static void test3(){System.out.println("----> test3 BeforeClass 执行了 -----------");}@AfterClasspublic static void test4(){System.out.println("----> test4 AfterClass 执行了 -----------");}@Test //测试方法的必须拥有@Test注解public void testPrintNumber(){StringUtil.printNumber("admin");StringUtil.printNumber(null);}@Test //测试方法的必须拥有@Test注解public void testGetMaxIndex(){int index1 = StringUtil.getMaxIndex(null);System.out.println(index1);int index2 = StringUtil.getMaxIndex("admin");System.out.println(index2);//断言机制:程序员可以通过预测业务方法的结果Assert.assertEquals("方法内有bug",4,index2);}
}

二.反射
反射(Reflection)就是加载类,并允许以编程的方式解剖类中的各种成分(成员变量、方法、构造器等)
反射学什么?
学习获取类的信息、操作它们
1.反射第一步:加载类,获取类的字节码:Class对象
2.获取类的构造器:Constructor对象
3.获取类的成员变量:Field对象
4.获取类的成员方法:Method对象
2.1 反射第一步:加载类,获取类的字节码:Class对象
获取Class对象的三种方式
· Class c1 = 类名.class
· 调用class提供方法:public static Class forName(String package);
· Object提供的方法:public Class getClass(); Class c3 = 对象.getClass();
//demo
public class demo {public static void main(String[] args) throws Exception {Class c1 = Student.class;System.out.println(c1.getName()); //全类名System.out.println(c1.getSimpleName()); //简名Class c2 = Class.forName("com.wosun.jinjie.Student");System.out.println(c1 == c2);Student student = new Student();Class c3 = student.getClass();System.out.println(c3 == c1);}
}//Student
public class Student {
}
2.2 获取类的构造器:Constructor对象
获取类构造器的作用:依然是初始化对象返回
//TestConstructor
public class TestConstructor {//拿全部的构造器@Testpublic void testGetConstructors() {//1.反射第一步:必须先得到这个类的Class对象Class c = Cat.class;//2.获取类的全部构造器//Constructor[] constructors = c.getConstructors(); //只能获取public修饰的构造器Constructor[] constructors = c.getDeclaredConstructors(); //只要存在的构造器都能拿到//遍历数组中的每个构造器对象for (Constructor constructor : constructors) {System.out.println(constructor.getName() + "---->" + constructor.getParameterCount());}}//拿某个构造器@Testpublic void testGetConstructor() throws Exception {//1.反射第一步:必须先得到这个类的Class对象Class c = Cat.class;//2.获取类的某个构造器:无参数构造器//Constructor constructor1 = c.getConstructor(); //只能获取public修饰的构造器Constructor constructor1 = c.getDeclaredConstructor(); //只要存在的构造器都能拿到System.out.println(constructor1.getName() + "---->" + constructor1.getParameterCount());constructor1.setAccessible(true); //禁止检查访问权限Cat cat1 = (Cat) constructor1.newInstance();System.out.println(cat1);//3.获取类的某个构造器:有参数构造器//Constructor constructor2 = c.getConstructor(String.class , int.class); //只能获取public修饰的构造器Constructor constructor2 = c.getDeclaredConstructor(String.class , int.class);System.out.println(constructor2.getName() + "---->" + constructor2.getParameterCount());constructor1.setAccessible(true); //禁止检查访问权限Cat cat2 = (Cat) constructor2.newInstance("叮当猫", 3);System.out.println(cat2);}
}//Cat
public class Cat {private String name;private int age;public Cat() {System.out.println("无参数构造器执行了");}public Cat(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;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", age=" + age +'}';}
}
2.3 获取类的成员变量:Field对象
获取到成员变量的作用:依然是赋值、取值

//TestField
public class TestField {@Testpublic void TestGetFields() throws Exception {//1.反射第一步:必须先得到类的class对象Class c = Cat.class;//2.获取类的全部成员变量Field[] fields = c.getDeclaredFields();//3.遍历成员变量数组for (Field field : fields) {System.out.println(field.getName() + "---->" + field.getType());}//4.定位某个成员变量Field fName = c.getDeclaredField("name");System.out.println(fName.getName() + "===>" + fName.getType());Field fAge = c.getDeclaredField("age");System.out.println(fAge.getName() + "===>" + fAge.getType());//赋值Cat cat = new Cat();fName.setAccessible(true);fName.set(cat, "咖啡猫");System.out.println(cat);//取值String name = (String) fName.get(cat);System.out.println(name);}
}//Cat
public class Cat {private static int a;public static final String COUNTRY = "CHN";private String name;private int age;public Cat() {System.out.println("无参数构造器执行了");}public Cat(String name, int age) {System.out.println("有参数构造器执行了");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;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", age=" + age +'}';}
}
2.4 获取类的成员方法:Method对象
成员方法的作用:依然是执行
//TestMethod
public class TestMethod {@Testpublic void TestGetMethods() throws Exception {//1.反射第一步:先得到Class对象Class c = Cat.class;//2.获取类的全部成员方法Method[] methods = c.getDeclaredMethods();//3.遍历数组中的每个方法对象for (Method method : methods) {System.out.println(method.getName() + "===>" + method.getParameterCount() + "===>" + method.getReturnType());}Method method_run = c.getDeclaredMethod("run");System.out.println(method_run.getName() + "===>" + method_run.getParameterCount() + "===>" + method_run.getReturnType());Method method_eat =c.getDeclaredMethod("eat", String.class);System.out.println(method_eat.getName() + "===>" + method_eat.getParameterCount() + "===>" + method_eat.getReturnType());Cat cat = new Cat();method_run.setAccessible(true);Object rs1 = method_run.invoke(cat);//调用无参的run方法,用cat对象触发调用的System.out.println(rs1);Object rs2 = method_eat.invoke(cat,"🐟");System.out.println(rs2);}
}//Cat
public class Cat {private static int a;public static final String COUNTRY = "CHN";private String name;private int age;public Cat() {System.out.println("无参数构造器执行了");}public Cat(String name, int age) {System.out.println("有参数构造器执行了");this.name = name;this.age = age;}private void run(){System.out.println("跑的真快");}public void eat(){System.out.println("爱吃猫粮");}public String eat(String name){return "猫最爱吃" + name;}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;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", age=" + age +'}';}
}
2.5 反射的作用、应用场景
反射的作用
· 基本作用:可以得到一个类的全部成分然后操作
· 可以破坏封装性
· 最重要的用途是:适合做Java的框架,基本上主流的框架都会基于反射设计出一些通用的功能


//TestFrame
public class TestFrame {@Testpublic void save() throws Exception {Student s1 = new Student("张三",22,'男',180.5,"编程");Teacher t1 = new Teacher("李四",1000000);//需求:把任意对象的字段名和其对应的值等信息,保存到文件中ObjectFrame.saveObject(s1);ObjectFrame.saveObject(t1);}
}//ObjectFrame
public class ObjectFrame {//目的:保存任意对象的字段和其数据到文件中去public static void saveObject(Object obj) throws Exception {//创建打印流PrintStream ps = new PrintStream(new FileOutputStream("src\\data.txt",true));//obj是任意对象,到底有多少个字段要保存呢?Class c = obj.getClass();String cName = c.getSimpleName();ps.println("---------" + cName + "---------");//从这个类中提取它的全部成员变量Field[] fields = c.getDeclaredFields();//遍历每个成员变量for (Field field : fields) {//拿到成员变量的名字String name = field.getName();//拿到这个成员变量在对象中的数据field.setAccessible(true); //禁止检查访问控制String value = field.get(obj) + "";ps.println(name + "=" + value);}ps.close();}
}//Student
public class Student {private String name;private int age;private char sex;private double height;private String hobby;public Student() {}public Student(String name, int age, char sex, double height, String hobby) {this.name = name;this.age = age;this.sex = sex;this.height = height;this.hobby = hobby;}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 char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}
}//Teacher
public class Teacher {private String name;private double salary;public Teacher() {}public Teacher(String name, double salary) {this.name = name;this.salary = salary;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}
}
三.注解
注解(Annotation)就是Java代码里的特殊标记,比如:@Override、@Test等,作用是让其他程序根据注解信息来决定怎么执行该程序
· 注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上、等位置处
自定义注解
public @interface 注解名称 {
public 属性类型 属性名() default 默认值;
}
特殊属性名:value
· 如果注解中只有一个value属性,使用注解后,value名称可以不写!!
//AnnotationTest @MyTest1(aaa = "牛魔王", ccc = {"java","python"})
// @MyTest2(value = "孙悟空")
// @MyTest2("孙悟空") //如果只有一个属性,可以不写value
// @MyTest2(value = "孙悟空", age = 100)
@MyTest2("孙悟空") //如果除了value其他属性都有默认值,也可以不写value
public class AnnotationTest {@MyTest1(aaa = "铁扇公主", bbb = false, ccc = {"c","c++"})public void test1(){}
}/*** 自定义注解*/
public @interface MyTest1 {String aaa();boolean bbb() default true;String[] ccc();
}public @interface MyTest2 {String value(); //特殊属性int age() default 22;
}

· 注解本质是一个接口,Java中所有注解都继承了Annotation接口的
· @注解(…):其实就是一个实现类对象,实现了该注解以及Annotation接口
3.1 元注解
指的是:修饰注解的注解

//MyTest3@Target({ElementType.TYPE, ElementType.METHOD}) //ElementType.TYPE当前被修饰的注解只能用在类上
@Retention(RetentionPolicy.RUNTIME) //控制下面的注解一直保留到运行时
public @interface MyTest3 {
}
3.2 注解的解析
就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来
如何解析注解?
· 指导思想:要解析谁上面的注解,就应该先拿到谁
· 比如要解析类上面的注解,则应该先获取该类的Class对象,再通过Class对象解析其上面的注解
· 比如要解析成员方法上的注解,则应该获取到该成员方法的method对象,再通过Method对象解析其上面的注解
· Class、Method、Field、Constructor都实现了AnnotatedElement接口,它们都拥有解析注释的能力


//MyTest4@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest4 {String value();double aaa() default 100;String[] bbb();
}//demo@MyTest4(value = "张三", aaa = 99, bbb={"java","python"})
public class demo {@MyTest4(value = "李四", bbb={"c","c++"})public void test1(){}
}//AnnotationTest2 public class AnnotationTest2 {@Testpublic void parseClass(){//1.先得到Class对象Class c = demo.class;//2.解析类上的注解//判断类上是否包含了某个注解if(c.isAnnotationPresent(MyTest4.class)){MyTest4 myTest4 = (MyTest4) c.getDeclaredAnnotation(MyTest4.class);System.out.println(myTest4.value());System.out.println(myTest4.aaa());System.out.println(Arrays.toString(myTest4.bbb()));}}@Testpublic void parseMethod() throws Exception {//1.先得到Class对象Class c = demo.class;Method m = c.getDeclaredMethod("test1");//2.解析类上的注解//判断方法上是否包含了某个注解if(m.isAnnotationPresent(MyTest4.class)){MyTest4 myTest4 = (MyTest4) m.getDeclaredAnnotation(MyTest4.class);System.out.println(myTest4.value());System.out.println(myTest4.aaa());System.out.println(Arrays.toString(myTest4.bbb()));}}
}
3.3 注解的应用场景

//MyTest@Target(ElementType.METHOD) //只能注解方法
@Retention(RetentionPolicy.RUNTIME) //让当前注解可以一直存活
public @interface MyTest {}//AnnotationTest
public class AnnotationTest {// @MyTestpublic void test1(){System.out.println("=====test1=====");}@MyTestpublic void test2(){System.out.println("=====test2=====");}// @MyTestpublic void test3(){System.out.println("=====test3=====");}@MyTestpublic void test4(){System.out.println("=====test4=====");}public static void main(String[] args) throws Exception {AnnotationTest t = new AnnotationTest();//启动程序//1.得到class对象Class c = AnnotationTest.class;//2.提取类中的全部成员方法Method[] methods = c.getDeclaredMethods();//3.遍历这个数组中的每个方法,看这个方法是否存在@Mytest注解for (Method method : methods) {if(method.isAnnotationPresent(MyTest.class)){//说明当前方法上是存在@MyTestmethod.invoke(t);}}}
}
四.动态代理
程序为什么需要代理?
对象如果嫌身上干的事情太多,可以通过代理来转移部分职责
代理长什么样?
对象有什么方法想被代理,代理就一定要有对应的方法
中介如何知道要派有什么样方法的代理呢?
接口!

//Test
public class Test {public static void main(String[] args) {BigStar bigStar = new BigStar("张三");Star starProxy = ProxyUtil.createProxy(bigStar);String rs = starProxy.sing("好日子");System.out.println(rs);starProxy.dance();}
}//ProxyUtil
public class ProxyUtil {public static Star createProxy(BigStar bigStar){/*** public static Object newProxyInstance(ClassLoader loader,* Class<?>[] interfaces,* InvocationHandler h)* 参数1:用于指定一个类加载器* 参数2:指定生成的代理长什么样子,也就是有哪些方法* 参数3:用来指定生成的代理对象想干什么事情*/Star startProxy = (Star)Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),new Class[]{Star.class}, new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//代理对象要做的事情if(method.getName().equals("sing")){System.out.println("收钱20w");//return method.invoke(bigStar,args);}else if(method.getName().equals("dance")){System.out.println("收钱30w");//return method.invoke(bigStar,args);}return method.invoke(bigStar,args);}});return startProxy;}
}//Star
public interface Star {String sing(String name);void dance();
}//BIgStar
public class BigStar implements Star{private String name;public BigStar(String name) {this.name = name;}public String sing(String name){System.out.println(this.name + "正在唱" +name);return "thanks";}public void dance(){System.out.println(this.name + "正在跳舞");}
}相关文章:
Java基础 - 14 - Java高级技术
一.单元测试 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试 1.1 Junit单元测试框架 可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,如IDEAÿ…...
glsl着色器学习(六)
准备工作已经做完,下面开始渲染 gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);gl.clearColor(0.5, 0.7, 1.0, 1.0); gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);gl.enable(gl.DEPTH_TEST); gl.enable(gl.CULL_FACE);设置视口 gl.viewport(0,…...
毒枸杞事件启示录:EasyCVR视频AI智能监管方案如何重塑食品卫生安全防线
一、方案背景 近年来,食品安全问题频发,引发了社会各界的广泛关注。其中,毒枸杞事件尤为引人关注。新闻报道,在青海格尔木、甘肃靖远等地,部分商户为了提升枸杞的品相,违规使用焦亚硫酸钠和工业硫磺进行“…...
git进阶·团队开发的时候为何要创建临时分支来修复bug
若在团队开发中,突然遇到一个功能性bug,你会怎么使用git来管理分支呢? 在近些年来,团队工作的经验中,我总结出来的是,最好是先创建一个临时分支来修复bug,修复好后,再合并到主分支或…...
Unity 性能优化工具收集
本文地址:https://blog.csdn.net/t163361/article/details/141809415 Unity原始工具 UPR 官方 UPR UPR桌面端解决方案,减轻测试设备性能压力,使测试过程更加顺畅。提供CLI用于自动化测试系统对接。 PerformanceBenchmarkReporter Unity 性…...
linux下的Socket网络编程教程
套接字概念 Socket本身有“插座”的意思,在Linux环境下,用于表示进程间网络通信的特殊文件类型。本质为内核借助缓冲区形成的伪文件。与管道类似的,Linux系统将其封装成文件的目的是为了统一接口,使得读写套接字和读写文件的操作…...
华为人工智能重要服务总结
一,视觉智能服务 一,图像识别服务 1.媒资图像标签服务 媒资素材管理,内容推荐广告营销等 2.图像描述服务 融合计算机视觉,自然语言处理和多模态技术,对输入图像进行画面内容描述 3.主体识别服务 像主体识别能检测出…...
涉嫌欺诈者利用机器人通过播放AI创作的音乐赚取1000万美元版税
北卡罗莱纳州的一名男子因涉嫌上传数十万首由AI生成的歌曲到流媒体服务平台,并使用机器人播放数十亿次而面临诈骗指控。自2017年以来,Michael Smith据称通过这一方式获得了超过1000万美元的版税收入。更多详情 现年52岁的Smith于周三被逮捕。同一天公布…...
k8s helm
k8s Helm 是Kubernetes的包管理工具,类似于Linux系统中常用的apt、yum等包管理工具。Helm通过定义、安装和升级Kubernetes应用程序来简化Kubernetes应用部署的复杂性。以下是对k8s Helm的详细解析: 一、Helm的基本概念 Chart:Chart是Helm的…...
KMP 详解
KMP数组存的是什么 对于一个字符串 b,下标从1开始。 则kmp[i]表示 以i结尾的连续子串 s的前缀的最大值(等价于前缀最大结尾处) 如何求KMP 假设 i 以前的KMP都被求出来了。 j 表示上一个字符可以成功匹配的长度(等价于下标) …...
go语言并发编程-超详细mutex解析
文章目录 1 go语言并发编程学习-mutex1.1 学习过程1.2 如何解决资源并发访问的问题?【基本用法】1.2.1 并发访问带来的问题1.2.1.1 导致问题的原因 1.2.2 race detector检查data race1.2.3 mutex的基本实现机制以及使用方法1.2.3.1 具体使用-11.2.3.1 具体使用-2 1 …...
VirtualBox Debian 自动安装脚本
概览 相较于原脚本(安装目录/UnattendedTemplates/debian_pressed.cfg)更新如下内容: 配置清华镜像源配置仅主机网卡(后续只需添加仅主机网卡即可)配置Root用户远程登录配置用户sudo组 脚本 debian_pressed.cfg ##…...
最好的开放式耳机?五款红榜开放式耳机推荐!
面对众多的开放式耳机选项,消费者可能会感到难以抉择。买耳机不一定要买最贵最好的,但是一定要选最适合自己的,为了使选择过程更加容易,我提供了一些建议,推荐了几款既适合日常使用又佩戴舒适的热门开放式耳机。 开放式…...
线性代数之线性方程组
目录 线性方程组 1. 解的个数 齐次线性方程组: 非齐次线性方程组: 2. 齐次线性方程组的解 3. 非齐次线性方程组的解 4. 使用 Python 和 NumPy 求解线性方程组 示例代码 齐次线性方程组 非齐次线性方程组 示例结果 齐次线性方程组 非齐次线性…...
速盾:怎么查看是否使用cdn服务?
CDN(Content Delivery Network),即内容分发网络,是一种加速网络内容传输的技术。通过在全球各地建立分布式的节点服务器,将网站的静态资源缓存到最近的节点服务器上,使用户可以从离自己地理位置最近的节点服…...
828华为云征文|采用Flexus云服务器X实例部署RTSP直播服务器
一、前言 这篇文章讲解: 采用华为云最新推出的Flexus云服务器X实例搭建RTSP服务器,完成视频直播需求。 随着实时视频流传输需求的增长,RTSP(实时流协议)服务器成为了许多视频监控、直播和多媒体应用的核心组件。在当…...
Spring Cloud Gateway(二)
Spring Cloud Gateway(二) 文章目录 Spring Cloud Gateway(二)Gateway工作原理为什么使用API网关高并发Gateway性能优化 Gateway工作原理 Spring Cloud Gateway旨在为微服务架构提供简单、有效并且统一的API路由管理方式。它不仅…...
docker 简易入门
# docker 简易入门 docker由几个组成部分 docker client: 即 docker 命令行工具 docker host: 宿主机,docker daemon 的运行环境服务器 docker daemon: docker 的守护进程,docker client 通过命令行与 docker daemon 交互 container: 最小型的一个操…...
【看雪-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
记录一个前端学习小组的收集的模版
问题1:输入“您的姓名”,选择“短答案”作为问题类型。问题2:输入“您是否愿意继续参加前端学习小组?”,选择“单选”作为问题类型,并添加选项“是”和“否”。问题3:输入“如果您选择‘是’&am…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
