jdk8新特性
目录
1 lambda表达式
1.1 类型推断
1.2 局部变量限制
2 函数式接口
2.1 Predicate 函数式接口
2.2 Supplier函数式接口
2.3 Consumer函数式接口
2.4 Function函数式接口
2.5 Runnable函数式接口
3 方法引用和构造器引用
3.1 对象方法引用
3.2 静态方法引用
3.3 构造方法引用
4 stream API
4.1 获取流
4.2 流的筛选
4.2.1 过滤
4.2.2 去重
4.2.3 获取前几条
4.2.4 跳过几条
4.3 映射
4.3.1 map类型转换
4.3.2 flatMap类型转换
4.4 匹配
4.4.1 任意一条匹配为true
4.4.2 全部匹配成功为true
4.4.3 都不匹配为true
4.5 查找
4.5.1 查询任意元素
4.5.2 查询第一个元素
4.6 归约
4.6.1 同一类型两个数据合并为一个数据
4.6.2 求最大值
4.6.3 求最小值
4.7 汇总统计
4.7.1 汇总操作
4.7.2 求总数
4.8 遍历
5 并行流
6 新日期API
6.1 LocalDate
6.2 LocalTime
7 接口的默认方法和静态方法
7.1 接口默认方法
7.2 接口静态方法
8 方法参数反射
1 lambda表达式
- lambda本质上是一段匿名内部类
- 也可以是一段可传递的代码
- 完整的lambda由三部分组成:参数列表,箭头,声明语句
- 完整语法
(Type1 param1,Type2 param2,...,TypeN paramN) ->{//执行语句块
}
- 大部分场景下,参数类型可以根据上下文环境推断出来,因此参数类型可以省略
(param1,param2,...,paramN) ->{//执行语句块
}
- 当只有一个参数时小括号可以省略
param ->{//执行语句块
}
- 当执行语句只有一行代码时,可以省略花括号,return和语句结尾的分号
param -> System.out.println("lambda")
1.1 类型推断
- 根据上下文信息推断出参数类型,而不需要显式声明
1.2 局部变量限制
- lambda表达式执行代码块中可以直接使用外部变量
- 被lambda表达式使用的外部变量必须显式声明为final,或者事实上是final
- 不建议在代码块中直接使用外部变量
2 函数式接口
- 只有一个抽象方法的接口
- lambda表达式就是用使用函数式接口来承接
- jdk中java.util.function包下定义了常用的函数式接口
- 注解@FunctionalInterface表名接口是函数式接口
2.1 Predicate 函数式接口
- 断言,用户判断是否符合条件
- 入参为泛型,返回值为true或者false
- 使用示例
public class App {private void test(Predicate<String> predicate){if (predicate.test("hello")){System.out.println("is hello");}else {System.out.println("is not hello");}}public static void main(String[] args) {new App().test(s -> s.equals("hello"));}
}
2.2 Supplier函数式接口
- 获取某种类型对象
- 无入参,返回泛型
- 使用示例
public class App {private void test(Supplier<String> predicate){System.out.println(predicate.get());}public static void main(String[] args) {new App().test(() -> "hello");new App().test(() -> {return "123";});}
}
2.3 Consumer函数式接口
- 消费者,消费某种类型对象
- 入参为泛型,无返回值
- 使用示例
public class App {private void test(Consumer<String> predicate){
predicate.accept("123");}public static void main(String[] args) {new App().test(str -> System.out.println("test==>"+str));}
}
2.4 Function函数式接口
- 类型转换,将一种类型的对象转换为另外一种类型
- 入参为泛型,出参也为泛型
- 使用示例
public class App {private void test(Function<String,Integer> function){Integer apply = function.apply("123");System.out.println("test==>"+apply);}public static void main(String[] args) {new App().test(str -> Integer.valueOf(str)+1);}
}
2.5 Runnable函数式接口
- 执行某段功能逻辑代码
- 无入参,无出参
- 使用示例
public class App {private void test(Runnable runnable){
runnable.run();}public static void main(String[] args) {new App().test(() -> System.out.println("run"));}
}
3 方法引用和构造器引用
- lambda表达式的简写方式
- 语法格式
类名::方法名
对象::方法名
3.1 对象方法引用
- 入参为一个时
public class App {public static void main(String[] args) {Consumer<String> c1 = str -> System.out.println(str);
c1.accept("hello1");Consumer<String> c2 = System.out::println;
c2.accept("hello2");}
}
- lambda入参均作为执行方法入参
- 执行方法入参个数以及方法返回值需要和函数式接口(即lambda表达式)保持一致
- 入参为两个时
public class App {public static void main(String[] args) {BiFunction<String, String, Boolean> b1 = (a,b)->a.equals(b);System.out.println(b1.apply("a","b"));BiFunction<String, String, Boolean> b2 = String::equals;System.out.println(b2.apply("a","b"));}
}
- 第一个参数作为方法调用者
- 其余参数作为执行方法入参
- 执行方法入参个数+1=函数式接口(即lambda表达式)所需要参数
- 执行方法返回值需要和函数式接口(即lambda表达式)保持一致
3.2 静态方法引用
public class App {public static void main(String[] args) {BiFunction<Integer, Integer, Integer> b1 = (a,b)->Integer.compare(a,b);System.out.println(b1.apply(1,2));BiFunction<Integer, Integer, Integer> b2 = Integer::compare;System.out.println(b2.apply(1,2));}
}
- 执行方法入参个数以及方法返回值需要和函数式接口(即lambda表达式)保持一致
- lambda入参均作为执行方法入参
3.3 构造方法引用
- 无参构造引用
public class App {public static void main(String[] args) {Supplier<String> s1 = () -> new String();System.out.println(s1.get());Supplier<String> s2 = String::new;System.out.println(s2.get());}
}
- 带参构造引用
public class App {public static void main(String[] args) {Function<String,Integer> s1 = (a) -> new Integer(a);System.out.println(s1.apply("123"));Function<String,Integer> s2 = Integer::new;System.out.println(s2.apply("123"));}
}
4 stream API
- 简化代码
- 支持并行流
- 流对象只能使用一次
4.1 获取流
- 集合获取流
- Map获取流
public class App {public static void main(String[] args) {Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.keySet().stream().forEach(System.out::println);
map.values().stream().forEach(System.out::println);}
}
- 数组获取流
public class App {public static void main(String[] args) {String[] arr = new String[]{"hello","world"};Stream<String> stream = Stream.of(arr);
stream.forEach(System.out::println);}
}
4.2 流的筛选
4.2.1 过滤
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.stream().filter(s -> !s.equals("2")).forEach(System.out::println);}
}
4.2.2 去重
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.stream().distinct().forEach(System.out::println);}
}
4.2.3 获取前几条
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.stream().limit(2).forEach(System.out::println);}
}
4.2.4 跳过几条
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.stream().skip(1).forEach(System.out::println);}
}
4.3 映射
4.3.1 map类型转换
- 类型T转换为类型R
- 一对一转换
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.stream().map(Integer::valueOf).forEach(System.out::println);}
}
4.3.2 flatMap类型转换
- 类型T转换为类型R的流
- 一对多转换
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1,2,3");
list.add("2,3,4");
list.add("3,4,5");
list.stream().flatMap(s -> Stream.of(s.split(","))).forEach(System.out::println);}
}
4.4 匹配
4.4.1 任意一条匹配为true
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1,2,3");
list.add("2,3,4");
list.add("3,4,5");boolean b = list.stream().anyMatch(s -> s.contains("2"));System.out.println(b);}
}
4.4.2 全部匹配成功为true
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1,2,3");
list.add("2,3,4");
list.add("3,4,5");boolean b = list.stream().allMatch(s -> s.contains("2"));System.out.println(b);}
}
4.4.3 都不匹配为true
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1,2,3");
list.add("2,3,4");
list.add("3,4,5");boolean b = list.stream().noneMatch(s -> s.contains("6"));System.out.println(b);}
}
4.5 查找
4.5.1 查询任意元素
- 返回任意元素
- 在非并行流中,返回的总是第一个元素
- 在并行流中,返回的哪个元素不确定
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1,2,3");
list.add("2,3,4");
list.add("3,4,5");Optional<String> any = list.stream().findAny();System.out.println(any);}
}
4.5.2 查询第一个元素
public class App {public static void main(String[] args) {List<String> list = new ArrayList<>();
list.add("1,2,3");
list.add("2,3,4");
list.add("3,4,5");Optional<String> any = list.stream().findFirst();System.out.println(any);}
}
4.6 归约
4.6.1 同一类型两个数据合并为一个数据
public class App {public static void main(String[] args) {List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);Optional<Integer> any = list.stream().reduce(Integer::sum);System.out.println(any);}
}
4.6.2 求最大值
public class App {public static void main(String[] args) {List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);Optional<Integer> any = list.stream().max(Integer::compare);System.out.println(any);}
}
4.6.3 求最小值
public class App {public static void main(String[] args) {List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);Optional<Integer> any = list.stream().min(Integer::compare);System.out.println(any);}
}
4.7 汇总统计
4.7.1 汇总操作
public class App {public static void main(String[] args) {List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);//汇总为set集合Set<Integer> collect = list.stream().collect(Collectors.toSet());System.out.println(collect);//汇总为map集合,当存在重复key是会报错Map<Integer, Integer> collect1 = list.stream().collect(Collectors.toMap(key -> key, value -> value));System.out.println(collect1);
list.add(2);//按照值分组Map<Integer, List<Integer>> collect2 = list.stream().collect(Collectors.groupingBy(key -> key));System.out.println(collect2);}
}
4.7.2 求总数
public class App {public static void main(String[] args) {List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);long count = list.stream().count();System.out.println(count);}
}
4.8 遍历
public class App {public static void main(String[] args) {List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.stream().forEach(System.out::println);}
}
5 并行流
- 在流对象的基础上调用parallel(),返回的是并行流对象
- 或者直接调用集合的parallelStream()方法
- 依赖ForkJoin并行框架
6 新日期API
- java.time包
6.1 LocalDate
6.2 LocalTime
7 接口的默认方法和静态方法
7.1 接口默认方法
- default修饰
- 子类可以不用实现
7.2 接口静态方法
8 方法参数反射
- 在class文件中·保存方法参数名
- 默认不保留参数名
- 编译时通过参数 -parameters指定保存方法参数名
相关文章:
jdk8新特性
目录 1 lambda表达式 1.1 类型推断 1.2 局部变量限制 2 函数式接口 2.1 Predicate 函数式接口 2.2 Supplier函数式接口 2.3 Consumer函数式接口 2.4 Function函数式接口 2.5 Runnable函数式接口 3 方法引用和构造器引用 3.1 对象方法引用 3.2 静态方法引用 3.3 构造方法引用 4 …...
ZooKeeper 和 Dubbo 的关系:技术体系与实际应用
引言 在现代微服务架构中,服务治理和协调是至关重要的环节。ZooKeeper 和 Dubbo 是两个在分布式系统中常用的技术工具,它们之间有着紧密的联系。本文将详细探讨 ZooKeeper 和 Dubbo 的关系,从基础概念、技术架构、具体实现到实际应用场景&am…...
ESP32-S3模组上跑通esp32-camera(43)
接前一篇文章:ESP32-S3模组上跑通esp32-camera(42) 一、OV5640初始化 2. 相机初始化及图像传感器配置 上一回继续对reset函数的后一段代码进行解析。为了便于理解和回顾,再次贴出reset函数源码,在components\esp32-camera\sensors\ov5640.c中,如下: static int reset…...
解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
解决Spring Boot中MySQL数据库报错“Bad SQL Grammar”的问题 目录 解决Spring Boot中MySQL数据库报错“Bad SQL Grammar”的问题 问题描述解决步骤解决方案结论附:MySql常用配置参数及使用场景 在使用Spring Boot连接MySQL数据库时,有时候会遇到“B…...
NCV4275CDT50RKG 车规级LDO线性电压调节器芯片——专为新能源汽车设计的高可靠性电源解决方案
产品概述: NCV4275CDT50RKG 是一款符合 AEC-Q100 车规认证的高性能LDO(低压差线性稳压器),专为新能源汽车的严苛工作环境设计。该芯片支持 输出调节为 5.0 V 或 3.3 V,最大输出电流达 450mA,具备超低静态电流…...
DeepSeek Window本地私有化部署
前言 最近大火的国产AI大模型Deepseek大家应该都不陌生。除了在手机上安装APP或通过官网在线体验,其实我们完全可以在Windows电脑上进行本地部署,从而带来更加便捷的使用体验。 之前也提到过,本地部署AI模型有很多好处,比如&…...
镜头放大倍率和像素之间的关系
相互独立的特性 镜头放大倍率:主要取决于镜头的光学设计和结构,决定了镜头对物体成像时的缩放程度,与镜头的焦距等因素密切相关。比如,微距镜头具有较高的放大倍率,能将微小物体如昆虫、花朵细节等放大成像࿰…...
【RabbitMQ重试】重试三次转入死信队列
以下是基于RabbitMQ死信队列实现消息重试三次后转存的技术方案: 方案设计要点 队列定义改造(核心参数配置) Bean public Queue auditQueue() {Map<String, Object> args new HashMap<>();args.put("x-dead-letter-exchan…...
【一文读懂】卫星轨道的轨道参数(六根数)和位置速度矢量转换及其在终端距离、相对速度和多普勒频移计算中的应用
卫星轨道的六根数参数及其在终端距离、相对速度和多普勒频移计算中的应用 卫星轨道运动的描述离不开开普勒六要素(也称为六根数参数),它们完整地刻画了一颗卫星在引力场中的轨道信息。本文将介绍这六个参数的意义,并探讨如何利用…...
车载诊断框架 --- 使用CAPL脚本实现诊断测试吧(中)
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...
Lockdir加密忘记密码:解锁数据恢复之道
Lockdir加密忘记密码现象解析 Lockdir作为一款知名的文件夹加密软件,因其强大的加密功能和便捷的操作体验而广受用户好评。然而,当谈及Lockdir加密忘记密码这一情况时,不少用户却面露难色。Lockdir加密忘记密码,简而言之…...
SQL优化方式
避免select *:开发中禁止使用select * 。它会增加查询解析器成本,无法走索引覆盖而产生回表操作,还会增加网络消耗,浪费CPU和内存资源,应指定具体查询字段。小表驱动大表:关联查询时,用数据量小…...
java项目之基于推荐算法的图书购物网站源码(ssm+mybatis+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于推荐算法的图书购物网站项目。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于推荐算法的…...
java中的线程安全
线程安全的定义 线程安全:一个类或方法在多线程环境下可以被多个线程同时访问,而不会导致数据的不一致或错误。 线程不安全:一个类或方法在多线程环境下不能被多个线程同时访问,否则可能导致数据的不一致或错误。线程安全的实现 线…...
day44 QT核心机制
头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QLabel> //标签类头文件 #include<QPushButton> //按钮类头文件 #include<QLineEdit> //行编辑器类头文件QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …...
字节跳动后端一面
📍1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式,它使用DEFLATE算法来减少文件大小,广泛应用于网络传输和文件存储中以提高效率。 🚀 使用场景: • 网站优化:通过压缩HTML、CSS、JavaScript文件来…...
WebSocket推送数据快,条数多导致前端卡顿问题解决
WebSocket推送数据快,条数多导致前端卡顿问题解决 前言方案优化消息频率使用高效的数据格式Protobuf 和 MessagePack的对比 启用压缩前端性能优化 WebSocket使用注意事项连接管理处理断开连接负载均衡监控和维护日志记录定期维护安全最佳实践限流 最后 前言 在项目…...
android动态设置是否允许应用卸载
摘要:通过广播设置全局参数控制应用是否允许卸载,全局参数在Launcher和PackageInstaller两个模块中使用到。此功能可用于MDM后台控制是否允许设备卸载应用。 1. 静态注册广播 由于系统安装和卸载的功能集中在PackageInstaller模块中,为了更…...
【C/C++】每日温度 [ 栈的应用 ] 蓝桥杯/ACM备赛
数据结构考点:栈 题目描述: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高࿰…...
开启蓝耘之旅:DeepSeek R1 模型在智算平台的起步教程
----------------------------------------------------------我的个人主页-------------------- 动动你的手指----------------------------------------点赞👍 收藏❤--------------------------------------------------------------- 引言 在深度学习的广袤领…...
基于SpringBoot+Vue实现航空票务管理系统
作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,…...
基于改进型灰狼优化算法(GWO)的无人机路径规划
内容: 基于改进型灰狼优化算法的无人机轨迹规划 GWO是一种群体智能优化算法,模仿灰狼的社会等级和狩猎行为。原始的GWO有一些局限性,比如容易陷入局部最优,收敛速度慢等,所以改进型的GWO可能通过不同的策略来优化这些…...
高级记事本 Sublime Text 下载与使用教程:附百度网盘地址
一、引言 在编程和文本编辑领域,Sublime Text 被誉为一款功能强大的高级记事本。它以其轻量级、高效、多语言支持等特点,深受开发者和文本工作者的喜爱。本文将详细介绍 Sublime Text 的下载方法、安装步骤、使用技巧,并提供百度网盘下载地址…...
4G核心网的演变与创新:从传统到虚拟化的跨越
4G核心网 随着移动通信技术的不断发展,4G核心网已经经历了从传统的硬件密集型架构到现代化、虚拟化网络架构的重大转型。这一演变不仅提升了网络的灵活性和可扩展性,也为未来的5G、物联网(LOT)和边缘计算等技术的发展奠定了基础。…...
Jmeter快速实操入门
以下操作需要提前安装了JDK(JDK版本要Java8),并且配置了环境变量。 1、下载Jmeter,下载连接。选择zip版本,解压即可。 2、解压后的文件目录如下。 3、进入bin文件夹,双击ApacheJMeter,运行Jmeter。 4、在测…...
JavaScript中的防抖与节流:提升性能的关键技巧 (1)
文章目录 JavaScript 中的防抖与节流:提升性能的关键技巧一、防抖(Debounce)1.1 概念1.2 应用场景1.3 代码实现 二、节流(Throttle)2.1 概念2.2 应用场景2.3 代码实现2.3.1 时间戳方式2.3.2 定时器方式 三、防抖与节流…...
Java数据类型转换(自动转换和强制转换)
数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。 自动数据…...
【大数据技术】Spark分布式实现词频统计(hadoop+python+spark)
Spark分布式实现词频统计(hadooppythonspark) 搭建完全分布式高可用大数据集群(VMwareCentOSFinalShell) 搭建完全分布式高可用大数据集群(HadoopMapReduceYarn) 本机PyCharm远程连接CentOS虚拟机&#x…...
UMLS初探
什么是UMLS UMLS(Unified Medical Language System,统一医学语言系统),简单来说就是将不同的医学标准统一到一套体系的系统,主要为了医疗系统的统一而构建出的。 UMLS的主要组成部分 Metathesaurus:一个…...
Redis持久化机制详解
为什么需要持久化 Redis通常被作为缓存使用,但是Redis一旦宕机,内存中的数据全部丢失,可能会导致数据库崩溃。如果是从数据库中恢复这些数据就会存在频繁访问数据库和读取速度慢的问题。所以redis实现数据的持久化,是至关重要的。…...
Python 鼠标轨迹 - 防止游戏检测
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...
PB-DW-数据窗口-降级-从12.5降级到9.0
PB 数据窗口从125降级到90 供参考,有哪些属性仍然需要删除,请在评论区留言。谢谢。 如果您有更好的工具,能分享给我一份的话,就更好了,感谢。 12.5数据窗口降级9.01- release 12.5; 更改为 release 9;2- 第二行的 d…...
Logo语言的测试开发
Logo语言的测试开发 引言 随着编程教育的不断发展,学习编程的门槛逐渐降低,各种编程语言应运而生。其中,Logo语言作为一种经典的教育编程语言,在培养儿童的逻辑思维和解决问题的能力方面,发挥了重要的作用。本文将深…...
位图的深入解析:从数据结构到图像处理与C++实现
在学习优选算法课程的时候,博主学习位运算了解到位运算的这个概念,之前没有接触过,就查找了相关的资料,丰富一下自身,当作课外知识来了解一下。 位图(Bitmap)是一种用于表示图像的数据结构&…...
Faveo Helpdesk存在目录遍历漏洞(CVE-2024-37700)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
【Pytorch函数】PyTorch随机数生成全解析 | torch.rand()家族函数使用指南
🌟 PyTorch随机数生成全解析 | torch.rand()家族函数使用指南 🌟 📌 一、核心函数参数详解 PyTorch提供多种随机数生成函数(注意:无直接torch.random()函数),以下是常用函数及参数:…...
ML.NET库学习004:ML.NET基础知识复盘
文章目录 ML.NET库学习004:ML.NET基础知识复盘背景简单的 ML.NET 应用程序代码工作流机器学习模型基础进阶 ML.NET 架构构建管道训练模型使用模型 数据模型和架构模型部署 ML.NET库学习004:ML.NET基础知识复盘 学了几个小项目,发现好多方法莫…...
2. UVM的基本概念和架构
文章目录 前言1. UVM的基本概念1.1 UVM的核心组件1.2 UVM的基本架构1.3 UVM的工作流程 2. UVM的架构2.1 UVM的层次结构2.2 UVM的组件交互 3. 总结 前言 首先,得确定UVM的基本概念和架构包含哪些关键部分。我回忆起UVM的核心组件,比如uvm_component、uvm…...
算法10--哈希
哈希 原理经典例题[1. 两数之和](https://leetcode.cn/problems/two-sum/description/)[面试题 01.02. 判定是否互为字符重排](https://leetcode.cn/problems/check-permutation-lcci/description/)[217. 存在重复元素](https://editor.csdn.net/md?not_checkout1&spm1015…...
磁盘文件删除后恢复
磁盘文件删除后,文件数据并未立即消失,只是文件系统的指针被移除,标记该空间为可覆盖。要恢复文件,可以尝试以下方法: 1. 使用数据恢复软件 Recuva:适合Windows,能恢复多种文件类型。PhotoRec…...
STM32 CUBE Can调试
STM32 CUBE Can调试 1、CAN配置2、时钟配置3、手动添加4、回调函数5、启动函数和发送函数6、使用方法(采用消息队列来做缓存)7、数据不多在发送函数中获取空邮箱发送,否则循环等待空邮箱 1、CAN配置 2、时钟配置 3、手动添加 需要注意的是STM32CUBE配置的代码需要再…...
【大模型】Ubuntu下安装ollama,DeepSseek-R1:32b的本地部署和运行
1 ollama 的安装与设置 ollama官网链接:https://ollama.com/ 在左上角的【Models】中展示了ollama支持的模型在正中间的【Download】中课可以下载支持平台中的安装包。 其安装和模型路径配置操作流程如下: ollama的安装 这里选择命令安装curl -fsSL …...
Goland 内存逃逸问题
内存逃逸是什么? 在go语言中,内存分配存在两个方式:堆分配;栈分配。 栈分配:是在函数调用时为局部变量分配内存,当函数返回时,这些内存会自动释放。 堆分配:通过 new 或者 make 函…...
我们来学人工智能 -- 本地部署DeepSeek
本地部署DeepSeek 题记思考正题结语 题记 时不待我AI会淘汰各领域一些岗位AI可以精简部门,DP白菜价的落地,2025年会更加明显会AI的淘汰不会AI的第四次工业革命将在中国爆发 全产业链多年数字化建设以DP为代表的全球领先白菜价人工智能在各行各业的普及 …...
【GitHub】GitHub 2FA 双因素认证 ( 使用 Microsoft Authenticator 应用进行二次验证 )
文章目录 一、GitHub 的 2FA 双因素认证二、使用 Microsoft Authenticator 应用进行二次验证1、TOTP 应用2、下载 Microsoft Authenticator 应用3、安装使用 Authenticator 应用 三、恢复码重要性 一、GitHub 的 2FA 双因素认证 现在登录 GitHub 需要进行二次身份验证 ; 先登录…...
通过脚本实现自动将标签内容复制到下一个标签文件中
只需要将下面内容运行前 修改文件夹路径(控制修改范围的文件名 不需要的话 就随便写一个不相同的文件名 就行 需要的话就是在这个文件名字之前的会被修改) import os import time # 文件夹路径 image_directory r"C:\Users\Lenovo\Desktop\新建文件夹\images" # 替…...
Elasticsearch+Kibana安装启动与操作教程
在大数据时代,Elasticsearch(简称 ES)和 Kibana 作为强大的数据搜索与可视化工具,受到了众多开发者的青睐。本文将为您详细介绍在 Windows 和 Mac 系统上安装、启动 Elasticsearch 和 Kibana 的步骤,以及常用命令和 Ki…...
CSS Overflow 属性详解:控制内容溢出的利器
在前端开发中,处理内容溢出是一个常见的需求。CSS 提供了 overflow 属性,帮助我们控制当内容超出元素框时的显示方式。本文将详细介绍 overflow 属性的各种取值及其应用场景。 1. 什么是 overflow 属性? overflow 属性用于控制当元素的内容…...
什么是XMLHttpRequest?及其详细使用说明
XMLHttpRequest(通常缩写为XHR)是一个JavaScript对象,用于在浏览器和服务器之间进行异步通信。它允许网页在不重新加载整个页面的情况下,向服务器发送请求并接收响应。XHR是Ajax(Asynchronous JavaScript and XML&…...
Chrome浏览器原理及优化
1. 相关面试题 1.1. 请说说从输入 URL 到页面渲染完成的全过程 1. 输入URL,用户在浏览器的地址栏输入一个URL,并按下回车键; 2. DNS解析; 浏览器需要将域名转换为服务器的IP地址,以建立连接。 (1). 如果浏览器缓存、操作系统缓存或路由器缓存中已有该域名的IP地址,…...