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

深入浅出Java-Lambda表达式

深入浅出Java-Lambda表达式

  • 一、Lambda 表达式特征
  • 二、Lambda 表达式的基础语法与结构
    • 2.1 基本语法格式
    • 2.2 语法简化规则
    • 2.3 与匿名内部类的对比
  • 三、函数式接口:Lambda 表达式的载体
    • 3.1 函数式接口的定义
    • 3.2 常用函数式接口分类
      • 3.2.1 消费型接口(Consumer)
      • 3.2.2 供给型接口(Supplier)
      • 3.2.3 函数型接口(Function<T, R>)
      • 3.2.4 断言型接口(Predicate)
    • 3.3 自定义函数式接口
  • 四、Lambda 表达式的高级特性
    • 4.1 方法引用(Method Reference)
      • 4.1.1 静态方法引用
      • 4.1.2 实例方法引用(对象::实例方法)
      • 4.1.3 类实例方法引用(类名::实例方法)
      • 4.1.4 构造方法引用
    • 4.2 变量捕获与闭包
      • 4.2.1 捕获外部变量
      • 4.2.2 闭包特性
    • 4.3 复合 Lambda 表达式
  • 五、Lambda 表达式与 Stream API 的深度整合
    • 5.1 Stream 中的 Lambda 应用场景
      • 5.1.1 过滤(filter)
      • 5.1.2 映射(map/flatMap)
      • 5.1.3 归约(reduce)
    • 5.2 并行流中的 Lambda 注意事项
  • 六、Lambda 表达式的实践与设计模式
    • 6.1 策略模式的 Lambda 实现
    • 6.2 事件监听的简化
    • 6.3 延迟执行优化
  • 七、Lambda 表达式的常见问题与避坑指南
    • 7.1 类型推断失败
    • 7.2 与匿名内部类的性能差异
    • 7.3 调试困难
  • 八、Lambda 表达式的性能与原理分析
    • 8.1 字节码层面分析
    • 8.2 与匿名内部类的性能对比
  • 九、总结
    • 9.1 优势功能总结
    • 9.2 后续功能
    • 9.3 学习建议

一、Lambda 表达式特征

在 Java 8 之前,匿名内部类是实现函数式接口的主要方式,但冗长的语法往往导致代码可读性下降。Lambda 表达式的引入,正是为了简化这一过程,它通过匿名函数的形式,将行为作为参数传递,让 Java 开发者能够以更简洁的方式编写函数式代码。以如下特征闻名:

  • 代码简洁性:减少样板代码,聚焦核心逻辑

  • 函数式编程支持:与 Stream API、并行计算等深度整合

  • 行为参数化:将 “做什么” 与 “如何做” 分离,提升代码灵活性

二、Lambda 表达式的基础语法与结构

2.1 基本语法格式

Lambda 表达式由参数列表箭头符号(->)和代码块三部分组成,语法格式如下:

(参数类型1 参数名1, 参数类型2 参数名2) -> { 代码块; }

2.2 语法简化规则

场景 示例(原语法) 简化后语法
参数类型可推导 (Integer a, Integer b) -> {} (a, b) -> {}
单一参数无括号 (a) -> {} a -> {}
代码块单一语句 (a, b) -> {return a + b;} (a, b) -> a + b
无参数情况 () -> {} () -> {}
调用已有方法(方法引用) () -> System.out.println() System.out::println

2.3 与匿名内部类的对比

匿名内部类实现 Runnable

new Thread(new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类实现");}
}).start();

Lambda 表达式实现 Runnable

new Thread(() -> System.out.println("Lambda实现")).start();

三、函数式接口:Lambda 表达式的载体

3.1 函数式接口的定义

  • 仅包含单个抽象方法的接口(允许包含默认方法和静态方法)

  • 可通过@FunctionalInterface注解显式声明(非必须,但推荐使用)

3.2 常用函数式接口分类

3.2.1 消费型接口(Consumer)

  • 作用:接收参数,无返回值

  • 核心方法void accept(T t)

Consumer<String> printConsumer = str -> System.out.println("消费型接口:" + str);
printConsumer.accept("Hello Lambda");

3.2.2 供给型接口(Supplier)

  • 作用:无参数,返回数据

  • 核心方法T get()

Supplier<Double> randomSupplier = () -> Math.random();
System.out.println("随机数:" + randomSupplier.get());

3.2.3 函数型接口(Function<T, R>)

  • 作用:接收一个参数,返回另一种类型结果

  • 核心方法R apply(T t)

Function<String, Integer> strToInt = str -> Integer.parseInt(str);
int num = strToInt.apply("123");

3.2.4 断言型接口(Predicate)

  • 作用:接收参数,返回布尔值

  • 核心方法boolean test(T t)

Predicate<Integer> evenPredicate = n -> n % 2 == 0;
boolean isEven = evenPredicate.test(4); // true

3.3 自定义函数式接口

@FunctionalInterface
interface Calculator {int calculate(int a, int b); // 唯一抽象方法
}// Lambda实现
Calculator adder = (a, b) -> a + b;
System.out.println("自定义接口计算:" + adder.calculate(3, 5)); // 8

四、Lambda 表达式的高级特性

4.1 方法引用(Method Reference)

通过::操作符引用已有方法,进一步简化 Lambda 表达式。常见类型包括:

4.1.1 静态方法引用

// 原Lambda:str -> Integer.parseInt(str)
Function<String, Integer> ref1 = Integer::parseInt;

4.1.2 实例方法引用(对象::实例方法)

String str = "hello";
// 原Lambda:() -> str.toUpperCase()
Supplier<String> ref2 = str::toUpperCase;

4.1.3 类实例方法引用(类名::实例方法)

// 原Lambda:(s1, s2) -> s1.equals(s2)
BiPredicate<String, String> ref3 = String::equals;

4.1.4 构造方法引用

// 原Lambda:() -> new ArrayList<>()
Supplier<List<String>> ref4 = ArrayList::new;

4.2 变量捕获与闭包

4.2.1 捕获外部变量

Lambda 表达式可访问所在作用域的final 或等效 final 变量(Java 8 后允许隐式 final):

int factor = 2; // 等效final
Function<Integer, Integer> doubleFunc = n -> n * factor;
System.out.println(doubleFunc.apply(5)); // 10
// factor = 3; // 编译错误,变量不可修改

4.2.2 闭包特性

  • Lambda 表达式中的变量捕获与匿名内部类行为一致

  • 捕获的变量在 Lambda 内部为只读,无法重新赋值

4.3 复合 Lambda 表达式

通过andThenor等方法组合多个函数式接口:

Predicate<Integer> isPositive = n -> n > 0;
Predicate<Integer> isEven = n -> n % 2 == 0;// 组合:正数且为偶数
Predicate<Integer> positiveEven = isPositive.and(isEven);
System.out.println(positiveEven.test(4)); // true

五、Lambda 表达式与 Stream API 的深度整合

5.1 Stream 中的 Lambda 应用场景

5.1.1 过滤(filter)

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0) // Lambda作为Predicate.collect(Collectors.toList()); // [2, 4]

5.1.2 映射(map/flatMap)

List<String> words = Arrays.asList("apple", "banana");
List<Integer> lengths = words.stream().map(String::length) // 方法引用替代Lambda.collect(Collectors.toList()); // [5, 6]

5.1.3 归约(reduce)

int sum = numbers.stream().reduce(0, (acc, n) -> acc + n); // Lambda作为BinaryOperator

5.2 并行流中的 Lambda 注意事项

  • 避免修改共享状态,推荐使用不可变对象或Atomic

  • 优先使用线程安全的收集器(如Collectors.toConcurrentMap

六、Lambda 表达式的实践与设计模式

6.1 策略模式的 Lambda 实现

传统策略模式需要定义多个策略类,而 Lambda 可简化为:

// 策略接口
interface SortStrategy {void sort(List<Integer> list);
}// Lambda实现策略
SortStrategy bubbleSort = list -> list.sort(Comparator.naturalOrder());
SortStrategy quickSort = list -> Collections.sort(list, Comparator.reverseOrder());

6.2 事件监听的简化

在 GUI 编程中,Lambda 替代匿名内部类实现事件监听:

button.addActionListener(e -> {// 事件处理逻辑System.out.println("按钮点击事件");
});

6.3 延迟执行优化

通过 Supplier 接口实现延迟计算,避免不必要的开销:

public static void log(String message, Supplier<String> detailSupplier) {if (isDebugEnabled()) {System.out.println(message + detailSupplier.get());}
}// 调用时才计算detail
log("数据加载完成", () -> "耗时:" + calculateTime());

七、Lambda 表达式的常见问题与避坑指南

7.1 类型推断失败

问题:Lambda 参数类型无法被正确推断解决方案:显式声明参数类型或使用方法引用

// 错误:无法推断类型
BiFunction f = (a, b) -> a + b; 
// 正确:显式声明类型
BiFunction<Integer, Integer, Integer> f = (int a, int b) -> a + b;

7.2 与匿名内部类的性能差异

  • Lambda 表达式在首次调用时会编译为字节码,冷启动略有开销

  • 多次调用时性能与匿名内部类接近,无需过度优化

7.3 调试困难

解决方案

  • 使用peek()方法在 Stream 中打印中间值

  • 对复杂 Lambda 提取为单独的方法或变量

Predicate<User> isAdult = user -> {System.out.println("验证用户年龄");return user.getAge() >= 18;
};

八、Lambda 表达式的性能与原理分析

8.1 字节码层面分析

Lambda 表达式在编译后会生成合成方法(Synthetic Method)或 invokedynamic 指令(取决于是否启用 invokedynamic 优化)。通过javap -c命令反编译可查看:

// Lambda表达式
Runnable r = () -> System.out.println("Lambda");// 反编译后(简化版)invokedynamic #2, 0 // InvokeDynamic: makeRunnable

8.2 与匿名内部类的性能对比

操作 Lambda 表达式 匿名内部类
内存占用 更低(无类加载开销) 较高
执行速度 略快(无接口调用开销) 略慢
冷启动时间 首次略慢 首次略快

九、总结

9.1 优势功能总结

  • 函数式编程入门:降低 Java 函数式编程门槛

  • 代码质量提升:减少样板代码,提升可读性

  • 生态整合:与 Stream、并行计算、新时间 API 深度集成

9.2 后续功能

  • 语法增强:Java 10 + 的局部变量类型推断(var)与 Lambda 结合

  • 性能优化:JVM 对 Lambda 的编译优化持续加强

  • 领域扩展:在响应式编程(如 Reactor 框架)中广泛应用

9.3 学习建议

  1. 掌握核心接口:熟练使用ConsumerFunctionPredicate等基础接口

  2. 结合 Stream 实战:通过实际案例练习 Lambda 与 Stream 的组合使用

  3. 理解原理:了解 Lambda 的编译机制与闭包特性,避免使用误区

通过我在本文的解析,相信你已初步掌握 Lambda 表达式的核心语法、高级特性及实战技巧,在接下来的实际开发中,希望你能合理运用 Lambda 表达式,提升代码的简洁性与灵活性,尤其在处理集合数据、事件监听等场景中发挥优势。

若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ

相关文章:

深入浅出Java-Lambda表达式

深入浅出Java-Lambda表达式 一、Lambda 表达式特征二、Lambda 表达式的基础语法与结构2.1 基本语法格式2.2 语法简化规则2.3 与匿名内部类的对比 三、函数式接口&#xff1a;Lambda 表达式的载体3.1 函数式接口的定义3.2 常用函数式接口分类3.2.1 消费型接口&#xff08;Consum…...

FreeCAD傻瓜教程-外螺纹的绘制,利用两个实体进行布尔运算来实现

起因&#xff1a;因为要设计一个波珠螺丝固定器&#xff0c;为了不跑偏&#xff0c;需要在螺柱上加工一个直径6mm&#xff0c;深度1.2mm的圆弧凹槽所以想用泉州制造的6.8车铣加工。 但是该加工目前不支持轴向的钻孔&#xff0c;所以想着干脆在两端加上M8的螺栓&#xff0c;也起…...

java并发-线程池

文章目录 线程池定义组成工作参数设置种类关闭 线程池 定义 线程池就是提前创建好一批线程&#xff0c;反复复用处理任务&#xff0c;避免频繁创建销毁线程&#xff0c;同时控制线程数量&#xff0c;让系统更高效、稳定。 举个例子&#xff1a; 场景假设&#xff1a; 你开了…...

openlayer:06点击按钮实现地图动画移动

如何实现点击去辽宁按钮实现用动画效果将地图顺滑的切换到辽宁区域&#xff0c;点击回北京按钮后同样将地图使用动画效果移动回到辽宁。 本文介绍了如何通过OpenLayers库实现地图在北京市和辽宁省之间的平滑切换动画。首先&#xff0c;使用View类设置地图的初始中心点为北京市…...

使用 Matter.js 创建封闭箱体与里面的小球

下面是一个使用 Matter.js 创建的示例,包含一个地面、由4个长方形组成的封闭箱体,箱体内有10个不同颜色的小球。箱体可以被拖动,而小球被限制在箱体内部。 <!DOCTYPE html> <html> <head><title>Matter.js 可拖动箱体与小球</title><styl…...

自动化软件如何确保高可用性和容错性?

在数字化转型的浪潮中&#xff0c;RPA&#xff08;机器人流程自动化&#xff09;技术成为众多企业和机构实现业务流程优化的得力助手。以金智维为例&#xff0c;作为 RPA 领域的佼佼者&#xff0c;其技术在金融、政务等行业广泛应用&#xff0c;承担着大量关键业务流程的自动化…...

变电站综合自动化系统

系统介绍 a安科瑞 18702112163 变电站综合自动化系统为企业变电站提供了完整的SCADA功能&#xff0c;包括主接线图、设备工况、实时数据显示、定值管理、SOE报警/记录/查询/打印、棒图、实时/历史曲线、语音报警、历史信息查询、用户权限管理、各种运行数据统计分析报表等。系…...

【2025.05】Anaconda新手安装+配置+环境创建教程

本文目录 一、安装前述二、下载与安装1、下载2、选择安装类型3、选择安装路径&#xff1a; 三、设置环境1、添加conda目录到path2、修改envs\pgks默认目录第一种&#xff1a;修改.condarc文件第二种&#xff1a;使用conda config命令 四、修改镜像源五、常用命令&#xff08;27…...

React-改变当前页class默认的样式

比如antd for mobile&#xff0c;已经定义了默认的ui的class样式&#xff0c;如果想在当前页面的控件显示特殊的样式&#xff0c;除了指定style外&#xff0c;还可以强制改变默认class的样式&#xff0c;比如我想改变list.item的字体。 在返回渲染布局里面加上 return (<&…...

腾讯游戏安全与高通合作构建PC端游安全新格局

导语&#xff1a;5月16日&#xff0c;2025游戏安全行业峰会在深圳举行&#xff0c;腾讯游戏安全ACE与高通&#xff08;中国&#xff09;在峰会上就腾讯游戏安全方案正式宣布达成行业生态合作。双方将依托高通技术公司专门面向AI PC打造的骁龙X系列平台&#xff0c;共同为《无畏…...

Token类型与用途详解:数字身份的安全载体图谱

在现代数字身份体系中&#xff0c;Token如同"数字DNA"&#xff0c;以不同形态流转于各类应用场景。根据Okta的最新研究报告&#xff0c;平均每个企业应用使用2.7种不同类型的Token实现身份验证和授权。本文将系统梳理主流Token类型及其应用场景&#xff0c;通过行业典…...

【Linux基础I/O】文件调用接口、文件描述符、重定向和缓冲区

【Linux基础I/O一】文件描述符和重定向 1.C语言的文件调用接口2.操作系统的文件调用接口2.1open接口2.2close接口2.3write接口2.4read接口 3.文件描述符fd的本质4.标准输入、输出、错误5.重定向5.1什么是重定向5.2输入重定向和输出重定向5.3系统调用的重定向dup2 6.缓冲区 1.C语…...

软考中级软件设计师——操作系统考试题型

一、PV操作与进程同步&#xff08;必考大题&#xff09; 1. 真题示例&#xff08;2020年真题&#xff09; 题目&#xff1a; 三个进程P1、P2、P3共享一个缓冲区&#xff0c;P1生产数据放入缓冲区&#xff0c;P2和P3消费数据。要求&#xff1a; 缓冲区大小为10&#xff0c;满时…...

transformer归一化层优化:深度解读 RMSNorm (Root Mean Square Layer Normalization,均方根层归一化)

导读&#xff1a;RMSNorm 把传统 LayerNorm 的“减均值&#xff08;centering&#xff09; 除标准差&#xff08;scaling&#xff09;”简化为“直接除以向量均方根 (Root Mean Square, RMS&#xff0c;均方根)”。这一改动让归一化既 更省算 又 同样稳定&#xff0c;因而成为 …...

java基础 之 Hash家族(一)

文章目录 HashCode定义代码使用使用场景 HashMap定义常用方法使用场景 ConcurrentHashMap定义常用方法使用场景 HashTable定义常用方法使用场景 HashSet定义常用方法使用场景你想到过吗&#xff1f; HashMap、ConcurrentHashMap、HashTable的对比总结 HashCode 定义 hashcode是…...

windows服务器部署jenkins工具(二)

jenkins的大致流程&#xff1a;新增任务->配置任务->构建&#xff08;打包&#xff09;项目->部署&#xff08;发布&#xff09; 具体如何使用&#xff0c;我这里就不多讲了。这次就给大家讲讲&#xff0c;jenkins安装之后使用过程中存在的一些问题。 1.maven项目如…...

机器学习第二十讲:网格搜索 → 像尝试所有密码组合找最佳解锁方式

机器学习第二十讲&#xff1a;网格搜索 → 像尝试所有密码组合找最佳解锁方式 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1a;超详细手把手指南 网…...

【人工智能发展史】从黎明到曙光01

人工智能的史诗&#xff1a;从黎明到曙光 序曲&#xff1a;晨曦微露 故事的序幕拉开于一个思想激荡的年代&#xff0c;1956年&#xff0c;达特茅斯会议的钟声&#xff0c;如同第一缕晨曦&#xff0c;宣告了"人工智能"纪元的到来。那个夏天&#xff0c;在新罕布什尔…...

ollama使用gpu运行大模型

罗列ollma镜像 ollama list拉取ollama镜像源里面的模型&#xff1a; ollama pull qwen2:1.5b下载CudaToolkit https://developer.nvidia.com/cuda-toolkit-archive 我这里选择11.7的万金油版本&#xff0c;从来没出过bug Ollama安装好后&#xff0c;为了让推理跑在GPU上&am…...

Linux电源管理——PSCI初始化流程和多核启动流程

目录 一、PSCI 初始化流程 1、PSCI设备树节点 2、PSCI kernel初始化流程 get_set_conduit_method set_conduit psci_probe 二、CPU PSCI 操作初始化流程 1、CPU 设备树节点 2、 struct cpu_operations 3、kernel 流程 cpu_read_bootcpu_ops smp_init_cpus 三、CPU…...

Linux问题排查-引起服务器带宽使用率高的内鬼

Linux网络流量监控与瓶颈分析全攻略&#xff1a;从基础命令到进程级方案 一、网络带宽查询与实时流量监控 1. 查询主机网络带宽 网卡理论带宽 通过ethtool命令查看网卡最大支持速率&#xff0c;例如&#xff1a; ethtool eth0 # 替换为实际网卡名&#xff08;如ens33&#x…...

《微服务架构设计模式》笔记

思维导图 1-3章 4-6 章 5-13 章 资料 配套代码仓库&#xff1a;https://github.com/microservices-patterns/ftgo-application 作者网站&#xff1a;https://microservices.io/...

基于JDBC的信息管理系统,那么什么是JDBC呢?

JDBC 即 Java Database Connectivity&#xff0c;是 Java 语言中用于与数据库进行交互的一套 API。它提供了一种标准的方式&#xff0c;让 Java 程序能够连接到各种不同类型的数据库&#xff0c;并执行 SQL 语句来实现对数据库的查询、插入、更新和删除等操作。 主要功能 建立…...

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表

百度地图的地铁图API所有城市的城市名和citycode的对照关系列表 城市keywordcitycode北京beijing131上海shanghai289广州guangzhou257深圳shenzhen340重庆chongqing132天津tianjin332石家庄shijiazhuang150南京nanjing315成都chengdu75沈阳shenyang58杭州hangzhou179武汉wuhan2…...

信息学奥赛一本通 1853:【08NOIP提高组】传纸条 | 洛谷 P1006 [NOIP 2008 提高组] 传纸条

【题目链接】 ybt 1853&#xff1a;【08NOIP提高组】传纸条 洛谷 P1006 [NOIP 2008 提高组] 传纸条 【题目考点】 1. 动态规划&#xff1a;坐标型动态规划 【解题思路】 抽象问题&#xff0c;存在m乘n的网格&#xff0c;每个格子中有一个数值&#xff0c;即同学愿意帮忙的…...

APM32小系统键盘PCB原理图设计详解

APM32小系统键盘PCB原理图设计详解 一、APM32小系统简介 APM32微控制器是国内半导体厂商推出的一款高性能ARM Cortex-M3内核微控制器&#xff0c;与STM32高度兼容&#xff0c;非常适合DIY爱好者用于自制键盘、开发板等电子项目。本文将详细讲解如何基于APM32 CBT6芯片设计一款…...

【Linux我做主】探秘进程与fork

进程和fork 父子进程和forkgithub地址前言1. 进程的标识符PID1.1 查看系统内所有的进程1.2 kill杀掉进程1.3 获取进程的PID1.4 bash与父子进程 2. 创建进程与fork2.1 fork创建子进程2.2 fork困惑的解释0. fork的工作原理1. 为什么给子进程返回0&#xff0c;给父进程返回子进程P…...

学习python day4

1.顺序语句结构 #赋值语句 name张三 age20 a,b,c,droom#字符串分解赋值 print(a,b,c,d) #输入输出也是典型的顺序结构 nameinput(请输入您的姓名&#xff1a;) ageeval(input(请输入您的年龄&#xff1a;)) #使用eval进行转换 print(姓名&#xff1a;,name) print(年龄&#x…...

如何通过外链建设提升Shopify独立站的权重和排名

一、外链质量评估与筛选原则 相关性优先 选择与自身行业、产品或目标用户群体高度相关的网站&#xff08;如行业论坛、垂直媒体、评测博客&#xff09;交换外链&#xff0c;避免低相关性垃圾链接导致搜索引擎惩罚。 权威性指标 关注外链来源网站的域名权威&#xff08;DA…...

高并发内存池|六、page cache的设计

六、page cache的设计 1. page cache的结构 page cache 也是一个哈希桶结构&#xff0c;但它的映射结构与前两个 cache 不同。它的每一个桶是容量从 1 到 128 页大小的内存块&#xff0c;桶中的每个内存块由 SpanList 管理。page cache 的内存由其向系统申请所得&#xff0c;…...

C++线程池实现

C线程池实现 知识点补充为什么要实现线程池线程池的实现过程 知识点补充 在C11中引入了对线程库的支持&#xff0c;接下来我们介绍一下跟线程相关的一些知识点&#xff1a; 线程对象的构造方式 在C11中主要提供的三种线程的构造方式&#xff1a;无参构造、带参构造和调用移动构…...

#Redis缓存篇#(七)分布式缓存

目录 一 单节点Redis 1 单节点的问题 二 分布式缓存 1 Redis持久化 &#xff08;1 RDB持久化 &#xff08;2 AOF持久化 2 Redis主从集群 &#xff08;1 搭建主从架构 &#xff08;2 主从数据同步原理 3 Redis哨兵 &#xff08;1 哨兵的作用和原理 &#xff08;2 搭…...

【VSCode】安装与 ssh 免密登录

【VSCode】安装与 ssh 免密登录 下载SSH 登录设置免密登录关闭远程连接删除ssh连接&#xff08;慎用&#xff01;&#xff01;&#xff01;删除了建立的连接就没有了&#xff01;&#xff01;&#xff09; 下载 https://code.visualstudio.com/docs/?dvwin64user 选择安装路径…...

【Python解决八皇后问题】回溯算法与优化策略全解析

目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选型对比🛠️ 二、实战演示⚙️ 环境配置要求💻 核心代码实现基础回溯实现位运算优化…...

判断一个元素是否在可视区域

判断元素是否在可视区域的方法 方法一:offsetTop 和 scrollTop 通过计算元素的 offsetTop 和容器的 scrollTop 来判断元素是否位于视口内。这种方法适用于简单的垂直滚动场景。 优点: 实现简单,性能较好。缺点: 不支持复杂的布局结构(如嵌套滚动),无法处理水平方向上的可…...

作物遗传与种质创新利用全国重点实验室-随笔10

作物遗传与种质创新利用全国重点实验室依托于南京农业大学&#xff0c;2022年11月完成国家重点实验室重组工作&#xff0c;由原名称“作物遗传与种质创新国家重点实验室”正式更名为“作物遗传与种质创新利用全国重点实验室”。 实验室面向国家粮食安全和农业高质量发展的重大战…...

分布式电源的配电网无功优化

分布式电源(Distributed Generation, DG)的大规模接入配电网,改变了传统单向潮流模式,导致电压波动、功率因数降低、网损增加等问题,无功优化成为保障配电网安全、经济、高效运行的关键技术。 1. 核心目标 电压稳定性:抑制DG并网点(PCC)及敏感节点的电压越限(如超过5%…...

游戏引擎学习第301天:使用精灵边界进行排序

回顾并为今天的内容做准备 昨天&#xff0c;我们解决了一些关于排序的问题&#xff0c;这对我们清理长期存在的Z轴排序问题很有帮助。这个问题我们一直想在开始常规游戏代码之前解决。虽然不确定是否完全解决了问题&#xff0c;但我们提出了一个看起来合理的排序标准。 有两点…...

网络框架二次封装:基于Kotlin的高扩展性网络请求框架完整实现

完整目录结构 1. 架构设计1.1 分层架构1.2 核心组件1.3 接口关系图2. 基础配置实现2.1 NetworkConfig完整代码2.2 CacheConfig完整代码3. 核心网络客户端3.1 SmartHttpClient完整实现3.2 单例管理3.3 服务创建与执行4. DSL请求构建器4.1 NetworkRequest完整实现4.2 生命周期绑…...

高噪声下扩展边缘检测算子对检测边缘的影响

目录 一、常见的边缘检测算子 二、扩展边缘检测算子对检测边缘的影响 三、结论 一、常见的边缘检测算子 Sobel 算子: Prewitt算子;...

Linux 内核音视频架构(V4L2 )介绍

一.概述 Linux 内核中的 V4L2&#xff08;Video for Linux Two&#xff09;框架 是用于管理音视频设备&#xff08;如摄像头、电视调谐器、视频采集卡等&#xff09;的核心子系统。 它提供了一套统一的接口&#xff0c;使得用户空间应用程序能够方便地访问和控制硬件设备&…...

专业 YouTube SEO 方案:打造高排名视频的关键步骤

YouTube 是全球订阅量最高的社交媒体平台之一。YouTube 为发布创意视频内容和针对特定受众开展营销活动提供了无限可能&#xff0c;是任何品牌内容营销策略的重要组成部分。 但是&#xff0c;为了发展您的 YouTube 频道并消除噪音&#xff0c;优化您的视频内容以便可以在搜索结…...

基于STM32的智能台灯_自动亮度_久坐提醒仿真设计(Proteus仿真+程序设计+设计报告+讲解视频)

这里写目录标题 1.主要功能2.仿真设计3.程序设计4.设计报告5.下载链接 基于STM32的智能台灯_自动亮度_久坐提醒仿真设计 (Proteus仿真程序设计设计报告讲解视频&#xff09; 仿真图Proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&#xff1…...

labview硬件部分——压力测量

0kg的电压需要我们手动输入&#xff01;在不放东西的时候的电压&#xff0c;先运行一次程序&#xff0c;将其记录后写到程序中的0kg输入按键即可。 整体的程序&#xff1a;...

Mysql索引实战1

对于上面这两种 name>‘a’ 和 name>‘zzz’ 的执行结果&#xff0c;mysql最终是否选择走索引或者一张表涉及多个索引&#xff0c;mysql最终如何选择索引&#xff0c;我们可以用trace工具来一查究竟&#xff0c;开启trace工具会影响mysql性能&#xff0c;所以只能临时分析…...

在实际网络部署中,静态路由的优先级通常高于RIP

是的&#xff0c;在实际网络部署中&#xff0c;静态路由的优先级通常高于RIP&#xff0c;尤其是在中小型网络或对可控性要求高的场景中。以下是关键原因和典型应用场景分析&#xff1a; 1. 为何静态路由比RIP更受青睐&#xff1f; (1) 简单性与可靠性 静态路由&#xff1a; 手…...

Linux系统编程-DAY02

一、标准io 1.写文件 fgets函数中判断有多少行&#xff0c;且判断最后一个是不是终止符 if( buf[strlen(buf) - 1] \n ) 2. wc命令行&#xff1a;字符统计 wc -l 文件名 行数 文件名 3. write 用于操作二进制的文件&#xff08;文办文件和图片文件也可以…...

【C++ 真题】P5736 【深基7.例2】质数筛

P5736 【深基7.例2】质数筛 题目描述 输入 n n n 个不大于 10 5 10^5 105 的正整数。要求全部储存在数组中&#xff0c;去除掉不是质数的数字&#xff0c;依次输出剩余的质数。 输入格式 第一行输入一个正整数 n n n&#xff0c;表示整数个数。 第二行输入 n n n 个正…...

自制操作系统day6(GDTR、段描述符、PIC、实模式和保护模式、16位到32位切换、中断处理程序、idt的设定、EFLAG寄存器)(ai辅助整理)

day6 分割源文件&#xff08;harib03a&#xff09; 优点 按照处理内容进行分类&#xff0c;如果分得好的话&#xff0c;将来进行修改时&#xff0c;容易找到地方。如果Makefile写得好&#xff0c;只需要编译修改过的文件&#xff0c;就可以提高make的速度。单个源文件都不长。…...

大模型评测与可解释性

随着大模型在各个领域展现出惊人的能力,我们对其性能的评估和对其决策过程的理解变得尤为重要。一个模型即使在基准测试中表现出色,也可能在实际应用中遇到意想不到的问题。同时,由于大模型的复杂性,它们常常被视为“黑箱”,这给其在关键领域的应用带来了挑战。 本章将深…...