【Java函数式编程-58】Java函数式编程深度解析
函数式编程(Functional Programming)作为一种编程范式,近年来在Java生态中获得了越来越多的关注和应用。自Java 8引入Lambda表达式和Stream API以来,函数式编程风格在Java开发中逐渐普及。本文将深入探讨Java中函数式编程的核心概念、实践技巧以及在实际项目中的应用场景。
1. 函数式编程基础
1.1 什么是函数式编程
函数式编程是一种将计算视为数学函数求值,并避免改变状态和使用可变数据的编程范式。其核心思想是:
- 函数是一等公民
- 避免副作用
- 强调不可变性
- 声明式而非命令式编程
1.2 Java中的函数式支持演进
- Java 8:Lambda表达式、Stream API、函数式接口
- Java 9:Stream API增强
- Java 10:局部变量类型推断(var)对Lambda的支持
- Java 11:Lambda参数的var支持
- 后续版本持续增强函数式能力
2. 核心概念与特性
2.1 函数式接口(Functional Interface)
@FunctionalInterface
public interface Predicate<T> {boolean test(T t);// 可以有默认方法default Predicate<T> and(Predicate<? super T> other) {Objects.requireNonNull(other);return (t) -> test(t) && other.test(t);}
}
Java内置的四大核心函数式接口:
Function<T,R>
:接受T类型参数,返回R类型结果Consumer<T>
:接受T类型参数,无返回值Supplier<T>
:无参数,返回T类型结果Predicate<T>
:接受T类型参数,返回boolean
2.2 Lambda表达式
Lambda表达式是函数式编程的语法基础:
// 传统匿名类
Comparator<String> oldWay = new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {return s1.length() - s2.length();}
};// Lambda表达式
Comparator<String> newWay = (s1, s2) -> s1.length() - s2.length();
Lambda表达式语法:
(parameters) -> expression
或 (parameters) -> { statements; }
2.3 方法引用
方法引用是Lambda的简写形式,四种类型:
- 静态方法引用:
ClassName::staticMethod
- 实例方法引用:
instance::method
- 任意对象的实例方法:
ClassName::method
- 构造方法引用:
ClassName::new
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(System.out::println); // 方法引用
3. Stream API深度解析
3.1 Stream特性
- 不是数据结构,不存储数据
- 不修改源数据
- 惰性求值(中间操作)与及早求值(终止操作)
- 可并行化处理
3.2 常用操作
中间操作:
.filter(Predicate<T>)
.map(Function<T,R>)
.flatMap(Function<T,Stream<R>>)
.distinct()
.sorted()
.peek(Consumer<T>)
.limit(long)
.skip(long)
终止操作:
.forEach(Consumer<T>)
.toArray()
.reduce(...)
.collect(Collector<T,A,R>)
.min()
.max()
.count()
.anyMatch(Predicate<T>)
.allMatch(Predicate<T>)
.noneMatch(Predicate<T>)
.findFirst()
.findAny()
3.3 收集器(Collectors)
// 转换为集合
List<String> list = stream.collect(Collectors.toList());
Set<String> set = stream.collect(Collectors.toSet());// 连接字符串
String joined = stream.collect(Collectors.joining(", "));// 分组
Map<Department, List<Employee>> byDept = employees.stream().collect(Collectors.groupingBy(Employee::getDepartment));// 分区
Map<Boolean, List<Employee>> partitioned = employees.stream().collect(Collectors.partitioningBy(e -> e.getSalary() > 50000));
3.4 并行流
// 创建并行流
Stream<String> parallelStream = list.parallelStream();// 顺序流转为并行流
stream.parallel()// 注意事项:
// 1. 确保操作是无状态的
// 2. 避免共享可变状态
// 3. 考虑性能开销(小数据量可能更慢)
4. 高级主题
4.1 函数组合
Function<Integer, Integer> multiplyBy2 = x -> x * 2;
Function<Integer, Integer> add3 = x -> x + 3;Function<Integer, Integer> composed = multiplyBy2.andThen(add3);
// 相当于 add3(multiplyBy2(x))
composed.apply(5); // 返回13Function<Integer, Integer> composed2 = multiplyBy2.compose(add3);
// 相当于 multiplyBy2(add3(x))
composed2.apply(5); // 返回16
4.2 柯里化(Currying)
将多参数函数转换为一系列单参数函数:
// 普通函数
BiFunction<Integer, Integer, Integer> adder = (x, y) -> x + y;// 柯里化版本
Function<Integer, Function<Integer, Integer>> curriedAdder = x -> y -> x + y;// 使用
Function<Integer, Integer> add5 = curriedAdder.apply(5);
add5.apply(3); // 返回8
4.3 异常处理
Lambda中的异常处理需要特别注意:
// 方式1:使用try-catch包裹
Function<String, Integer> safeParse = s -> {try {return Integer.parseInt(s);} catch (NumberFormatException e) {return 0;}
};// 方式2:创建工具方法
public static <T, R> Function<T, R> wrap(CheckedFunction<T, R> function) {return t -> {try {return function.apply(t);} catch (Exception e) {throw new RuntimeException(e);}};
}@FunctionalInterface
public interface CheckedFunction<T, R> {R apply(T t) throws Exception;
}// 使用
Function<String, Integer> safeParse2 = wrap(Integer::parseInt);
5. 实践建议与性能考量
5.1 何时使用函数式编程
适合场景:
- 数据转换和处理
- 集合操作
- 并行处理
- 回调机制
- 组合复杂操作
不适合场景:
- 简单的for循环(可能性能更差)
- 需要复杂控制流的操作
- 需要频繁修改状态的操作
5.2 性能注意事项
- 流创建开销:对于小数据集,传统循环可能更快
- 装箱/拆箱成本:原始类型考虑使用
IntStream
等特化流 - 并行流开销:线程管理成本可能抵消并行收益
- 短路操作优先:
anyMatch
比filter().count() > 0
更高效
5.3 可读性平衡
// 可读性差的链式调用
result = list.stream().filter(x -> x > 10).map(x -> x * 2).sorted((a,b) -> b.compareTo(a)).collect(Collectors.toList());// 改进版本
result = list.stream().filter(x -> x > 10).map(x -> x * 2).sorted(Comparator.reverseOrder()).collect(Collectors.toList());
6. 实际应用案例
6.1 数据处理管道
// 计算不同年龄段的平均工资
Map<String, Double> avgSalaryByAgeGroup = employees.stream().collect(Collectors.groupingBy(e -> {int age = e.getAge();if (age < 25) return "Under 25";else if (age < 35) return "25-34";else if (age < 45) return "35-44";else return "45+";},Collectors.averagingDouble(Employee::getSalary)));
6.2 响应式编程结合
// 使用Spring WebFlux的响应式编程
@GetMapping("/users")
public Flux<User> getUsers(@RequestParam(required = false) String name) {return userRepository.findAll().filter(user -> name == null || user.getName().contains(name)).map(UserDto::fromEntity).timeout(Duration.ofSeconds(1)).onErrorResume(e -> Flux.just(new UserDto("fallback", "user")));
}
6.3 领域驱动设计中的应用
// 领域服务中的函数式风格
public Order processOrder(Order order, List<Validator<Order>> validators, List<Transformer<Order>> transformers) {return Optional.of(order).filter(o -> validators.stream().allMatch(v -> v.validate(o))).map(o -> transformers.stream().reduce(o, (ord, t) -> t.transform(ord), (o1, o2) -> o2)).orElseThrow(() -> new InvalidOrderException("Order validation failed"));
}
7. 未来展望
随着Java语言的持续演进,函数式编程支持可能会进一步增强:
- 更完善的值类型支持
- 模式匹配的进一步集成
- 更强大的类型推断
- 与记录类(Record)和密封类(Sealed Class)的更好配合
8. 结语
Java中的函数式编程为开发者提供了更丰富的编程范式和更强大的表达能力。合理运用函数式特性可以写出更简洁、更易维护且更少bug的代码。然而,也要注意不要过度使用函数式风格,而应在命令式与函数式之间找到平衡点,根据具体场景选择最合适的编程方式。
掌握Java函数式编程不仅能提升你的编码能力,还能帮助你更好地理解现代Java框架(如Spring Reactor、Vert.x等)的设计思想,为应对日益复杂的软件开发需求打下坚实基础。
相关文章:
【Java函数式编程-58】Java函数式编程深度解析
函数式编程(Functional Programming)作为一种编程范式,近年来在Java生态中获得了越来越多的关注和应用。自Java 8引入Lambda表达式和Stream API以来,函数式编程风格在Java开发中逐渐普及。本文将深入探讨Java中函数式编程的核心概念、实践技巧以及在实际…...
解决vscode cmake提示检测到 #include 错误
一、问题 cmake已经包含了动态库文件,依然提示“检测到 #include 错误。请更新 includePath。” 二、解决方案 Ctrl Shift P进入CPP编辑配置,然后在JSON中加入下面一行: "configurationProvider": "ms-vscode.cmake-tools&…...
Microsoft .NET Framework 4.8 离线安装包 下载
简介Microsoft .NET Framework 4.8 是对 Microsoft .NET Framework 4、4.5、4.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7、4.7.1 和 4.7.2 的高度兼容的就地更新。 脱机程序包可用于因无法连接 Internet 而导致 Web 安装程序无法使用的情况。 此包比 Web 安装程序大,并且…...
部署若依项目到服务器遇到的问题
以下是本次部署遇到的问题及解决方法 1、问题:docker一直出现“> ERROR [internal] load metadata for docker.io/library/xxx“的问题 ERROR: failed to solve: openjdk:8-jdk-alpine: failed to resolve source metadata for docker.io/libran y/ope…...
Elasticsearch--自带“搜索引擎“的数据库
一、核心原理 1. 倒排索引(Inverted Index) 基本概念 将文档中的每个词条(term)映射到包含它的文档列表上,正如图书馆目录将关键词映射到书籍编号。工作流程 分词(Analysis):文本切…...
malloc的实现原理
malloc 是 C 语言中动态内存分配的核心函数,其实现原理涉及操作系统内存管理、数据结构和算法设计。以下是其核心实现原理的简化分析: 1. 内存池管理 基本思想:malloc 通过管理一个 内存池(堆)动态分配内存。操作系统…...
垃圾收集GC的基本理解
垃圾收集的基本理解 GC 的基本算法 标记清除 从根开始将可能被引用的对象用递归的方式进行标记(标记阶段),然后再从根开始将全部对象按顺序扫描一遍,将没有被标记的对象进行回收(清除阶段)。 大多数情况…...
JVM——Java的基本类型的实现
Java 基本类型在 JVM 中的实现 Java 作为一种广泛使用的编程语言,其在虚拟机(JVM)上的实现细节对于开发者来说至关重要。本文将详细讲解 Java 基本类型在 JVM 中的实现,去深入理解 Java 编程语言的底层工作机制。 Java 基本类型…...
临床回归分析及AI推理
在医疗保健决策越来越受数据驱动的时代,回归分析已成为临床医生和研究人员最强大的工具之一。无论是预测结果、调整混杂因素、建模生存时间还是理解诊断性能,回归模型都为将原始数据转化为临床洞察提供了统计学基础。 AI推理 然而,随着技术…...
Ubuntu 22.04 的 ROS 2 和 Carla 设置指南(其一)
重点介绍适用于 Ubuntu 22.04 的全面 ROS 2 和 Carla 设置指南。我们将首先安装 Terminator 终端,然后安装 ROS 2 依赖项,然后继续安装 ROS 2 Humble。接下来,我们将介绍如何在 Ubuntu 22.04 上安装 Carla,最后通过设置 Carla ROS…...
声明:个人从未主动把文章设置为仅vip可读
之前一直在公司忙就没看csdn这边,前几天朋友看到我的博客是仅vip可读我才发现这个 给我气笑了。。。不反馈默认同意。。。。 现在都已经改回来 写文章的初衷就是记录一下自己的学习过程,本来就是一些偏基础类的东西,还需要去买vip才能看就太…...
【大模型系列篇】Qwen3开源全新一代大语言模型来了,深入思考,更快行动
Qwen3开源模型全览 Qwen3是全球最强开源模型(MoEDense) Qwen3 采用混合专家(MoE)架构,总参数量 235B,激活仅需 22B。 Qwen3 预训练数据量达 36T,并在后训练阶段多轮强化学习,将非思…...
DeepSeek-Prover-V2-671B 简介、下载、体验、微调、数据集:专为数学定理自动证明设计的超大垂直领域语言模型(在线体验地址)
DeepSeek-Prover-V2-671B 最新发布:专为数学定理自动证明设计的超大语言模型 体验地址:Hugging Face 在线体验 推荐入口:Novita 平台直达链接(含邀请码) 一、模型简介 DeepSeek-Prover-V2-671B 是 DeepSeek 团队于 2…...
Gupta-Sproull 抗据此画线算法
本文源自于:从https://www.inf.ed.ac.uk/teaching/courses/cg/lectures/cg4_2012.pdf Gupta-Sproull是在Brensenham的画线算法基础上得到。 为了防止之前的链接失效,特地搬运一下...
idea写spark程序
使用IntelliJ IDEA编写Spark程序的完整指南 一、环境准备 安装必要软件 IntelliJ IDEA (推荐Ultimate版,Community版也可) JDK 8或11 Scala插件(在IDEA中安装) Spark最新版本(本地开发可以用embedded模式) 创建项目 打开IDEA → New Project 选择"Maven…...
视觉问答论文解析:《Skywork R1V2: Multimodal Hybrid Reinforcement Learning for Reasoning》
《Skywork R1V2: Multimodal Hybrid Reinforcement Learning for Reasoning》论文解析 一、研究背景与动机 近年来,“慢思考”多模态模型(如 OpenAI-o1、GeminiThinking、Kimi-1.5 和 Skywork-R1V)在数学和科学领域的复杂推理任务中取得了显…...
修改linux账号名
修改linux账号名 结论是步骤1.临时创建一个辅助账户执行操作2.注销当前账户,登录 tempadmin 用户。3.使用它修改 旧用户名olduser:4.(可选)删除临时用户: 结论是 不可以直接修改,要么需要创建一个临时用户来打辅助. …...
计算机图形学:(二)MVP变换示例
前言 当在阅读计算机图形学系列的书籍时,会发现大部分图书每章内容都如出一辙。从个人实际体会来讲,虽然能理解书中大部分的知识,但到了实际使用时却有点抓耳挠腮。因此,在写了计算机图形学:(一)…...
PostgreSQL中的SSL(2)
PGSQL数据库的默认隔离级别是读提交,并且同时支持可重复读和序列化模式。但是在9.1之前的版本中,序列化模式是采用快照隔离来实现,并非是真正的序列化模式。 这样的话就会存在一个问题,那就是写偏序(Write Skew&#…...
Linux 部署以paddle Serving 的方式部署 PaddleOCR CPU版本
强烈建议您在Docker内构建Paddle Serving,更多镜像请查看Docker镜像列表。 提示-1:Paddle Serving项目仅支持Python3.6/3.7/3.8/3.9,接下来所有的与Python/Pip相关的操作都需要选择正确的Python版本。 提示-2:以下示例中GPU环境均…...
苏德战争前期苏联损失惨重(马井堂)
苏德战争前期(1941年6月22日德国发动“巴巴罗萨行动”至1941年底至1942年初)是苏联在二战中损失最惨重的阶段之一。以下是主要方面的损失概述: 一、军事损失 人员伤亡与俘虏 至1941年底,苏军伤亡约300万人ÿ…...
SI5338-EVB Usage Guide(LVPECL、LVDS、HCSL、CMOS、SSTL、HSTL)
目录 1. 简介 1.1 EVB 介绍 1.2 Si5338 Block Diagram 2. EVB 详解 2.1 实物图 2.2 基本配置 2.2.1 Universal Pin 2.2.2 IIC I/F 2.2.3 Input Clocks 2.2.4 Output Frequencies 2.2.5 Output Driver 2.2.6 Freq and Phase Offset 2.2.7 Spread Spectrum 2.2.8 快…...
LeetCode LCP40 心算挑战题解
看似一道简单的题目,实则不然,没有看评论的话,实在想不出来怎么写。 现在则由我来转述思想供大家参考理解,还是先给出示例,供大家更好的理解这个题目。 输入:cards [1,2,8,9], cnt 3输出:18解…...
Smart Link+Monitor Link组网
1.技术背景及原理 一般情况下,Smart Link只能感知与其接口直连的链路故障。将Monitor Link配置在Smart Link的上游设备上,可使Smart Link迅速感知上游链路故障,进行链路切换。Smart Link与Monitor Link配合使用,扩大了Smart Link…...
【计算机网络】TCP(传输控制协议)套接字,多线程远程执行命令编程
📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🅒 C 语言 | 🌐 计算机网络 上篇文章:UDP套接字编程(英汉字典以及多线程聊天室编写)…...
PostgreSQL 中 VACUUM FULL 对索引的影响
PostgreSQL 中 VACUUM FULL 对索引的影响 是的,VACUUM FULL 会重建表上的所有索引。这是它与普通 VACUUM 命令的一个重要区别。 一、VACUUM FULL 的工作原理 表重建过程: 创建表的全新副本只将有效数据写入新存储删除原始表文件将新文件重命名为原表名…...
DeepSeek本地部署及WebUI可视化完全指南
以下是为您整理的DeepSeek本地部署及WebUI可视化完全指南,整合了官方文档及社区实践的最佳方案: 一、环境准备 1. 硬件需求 CPU:推荐支持AVX2指令集的Intel i7或AMD Ryzen 7及以上处理器 。 GPU(可选但推荐)…...
大模型时代的新燃料:大规模拟真多风格语音合成数据集
以大模型技术为核心驱动力的人工智能变革浪潮中,语音交互领域正迎来广阔的成长空间,应用场景持续拓宽与延伸。 其中,数据作为驱动语音大模型进化的关键要素,重要性愈发凸显。丰富多样的高质量数据能够让语音大模型充分学习到语音…...
单体项目到微服务的架构演变与K8s发展是否会代替微服务
单体项目到微服务的架构演变与K8s发展是否会代替微服务 在互联网大厂Java求职者的面试中,经常会被问到关于单体项目到微服务的架构演变以及Kubernetes(k8s)的发展是否会代替微服务的相关问题。本文通过一个故事场景来展示这些问题的实际解决…...
AI驱动的决策智能系统(AIDP)和自然语言交互式分析
在当今快速变化的商业环境中,以下几个企业级系统领域最有可能成为新的热点,其驱动力来自数字化转型加速、AI技术爆发、全球化协同需求以及ESG(环境、社会、治理)合规压力的叠加 1. AI驱动的决策智能系统(AIDP…...
kubernetes》》k8s》》Service 、Ingress 区别
K8S>>Service 资料 K8S >>Ingress 资料 Ingress VS Service 物理层数据链路层网络层传输层会话层表示层应用层 Ingress是一种用于暴露HTTP和HTTPS路由的资源,它提供了七层(应用层)的负载均衡功能。Ingress可以根据主机名、…...
全面接入!Qwen3现已上线千帆
百度智能云千帆正式上线通义千问团队开源的最新一代Qwen3系列模型,包括旗舰级MoE模型Qwen3-235B-A22B、轻量级MoE模型Qwen3-30B-A3B。千帆大模型平台开源模型进一步扩充,以多维开放的模型服务、全栈模型开发、应用开发工具链、多模态数据治理及安全的能力…...
Python-日志检测异常行为的详细技术方案
以下是根据行为日志检测异常行为的详细技术方案,涵盖数据收集、特征工程、模型选择、部署与优化的全流程: 1. 数据收集与预处理 1.1 数据来源 行为日志通常包括以下类型: 用户行为日志:点击、登录、交易、页面停留时间等。系统…...
DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题
DeepSeek-Prover-V2-671B最新体验地址:Prover版仅适合解决专业数学证明问题 DeepSeek 团队于 2025 年 4 月 30 日正式在Hugging Face开源了其重量级新作 —— DeepSeek-Prover-V2-671B,这是一款专为解决数学定理证明和形式化推理任务而设计的超大规模语…...
Java写数据结构:队列
1.概念: 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列…...
LeetCode 2905 找出满足差值条件的下标II 题解
示例 nums [8, 3, 12, 5, 1, 10, 7, 13] indexDifference 3 valueDifference 6答案 [maxIdx, j] [0, 4]我的思路是直接枚举写,但这题是中等题,一定不会让你好过的,所以也是喜提了超时,先说一下我的做题思路吧。 其实很简单就…...
【思考】欧洲大停电分析
当地时间4月28日中午,西班牙和葡萄牙发生了大规模停电事故,两国多个地区的电力供应中断,波及超过5000万伊比利亚半岛民众,交通、通信、医疗等关键领域受到影响,马德里网球公开赛因停电被迫暂停,周边法国、意…...
[论文精读]Agent综述—— A survey on large language model based autonomous agents
A survey on large language model based autonomous agents ⏲️年份: 2024 👀期刊: Frontiers of Computer Science 🌱影响因子:3.4 📚数字对象唯一标识符DOl: 10.1007/s11704-024-40231-1 🤵作者: Wang Lei,Ma Chen,Feng X…...
金融风控的“天眼”:遥感技术的创新应用
在金融市场的复杂博弈中,风险管控一直是金融机构的核心竞争力。然而,传统的风控手段在应对现代金融市场的快速变化时,往往显得捉襟见肘。 如今,遥感技术的创新应用为金融风控带来了全新的视角和手段。星图云开放平台的遥感金融立体…...
SpringMVC知识点总结(速查速记)
文章目录 前言1、MVC是什么2、SpringMVC是什么3、SpringMVC请求流程 && 环境搭建3.1 SpringMVC请求流程3.2 搭建环境3.2.1开发环境3.2.2 环境配置步骤 4. url地址映射 && 参数绑定4.1 url地址映射之RequestMapping①、映射单个url②、映射多个url③、映射url到…...
配置 Odoo 的 PostgreSQL 数据库以允许远程访问的步骤
1. 修改 PostgreSQL 配置文件 a. 修改 postgresql.conf 找到 PostgreSQL 的主配置文件 postgresql.conf,通常位于 /etc/postgresql/<版本号>/main/ 目录下。修改 listen_addresses 项的值为 *,表示允许来自任何 IP 地址的连接: sudo…...
涨薪技术|0到1学会性能测试第42课-apache监控与调优
前面的推文我们学习了操作系统性能监控与调优知识,如CPU、内存、磁盘、网络监控等,今天开始分享中间件apache监控与调优知识,后续文章都会系统分享干货,带大家从0到1学会性能测试! Apache是世界上使用最多的web服务器软件一种,它可以运行在几乎所有广泛使用的计算机平台上…...
【学习笔记】Shell编程--Bash变量
变量类型说明环境变量 与Shell的执行环境相关的一些变量。如PATH,HOME等,用户可重新定义。 一、环境变量的创建:export, export ABCD2 二、环境变量的查看 使用echo命令查看单个环境变量。如: echo $PATH 使用printenv…...
SpringBoot+Redis全局唯一ID生成器
📦 优雅版 Redis ID 生成器工具类 支持: 项目启动时自动初始化起始值获取自增 ID 方法yml 配置化起始值可灵活扩展多业务线 ID 📌 application.yml 配置 id-generator:member-start-value: 1000000000📌 配置类:IdG…...
micro-app前端微服务原理解析
一、核心设计思想 基于 WebComponents 的组件化渲染 micro-app 借鉴 WebComponents 的 CustomElement 和 ShadowDom 特性,将子应用封装为类似 WebComponent 的自定义标签(如 <micro-app>)。通过 ShadowDom 的天然隔离机制,实…...
大连理工大学选修课——机器学习笔记(7):集成学习及随机森林
集成学习及随机森林 集成学习概述 泛化能力的局限 每种学习模型的能力都有其上限 限制于特定结构受限于训练样本的质量和规模 如何再提高泛化能力? 研究新结构扩大训练规模 提升模型的泛化能力 创造性思路 组合多个学习模型 集成学习 集成学习不是特定的…...
[特殊字符] Spring Cloud 微服务配置统一管理:基于 Nacos 的最佳实践详解
在微服务架构中,配置文件众多、管理复杂是常见问题。本文将手把手演示如何将配置集中托管到 Nacos,并在 Spring Cloud Alibaba 项目中实现统一配置管理 自动刷新机制。 一、为什么要使用 Nacos 统一配置? 传统方式下,每个服务都…...
【mysql】执行过程,背诵版
sql执行再mysql的执行过程 1. 建立连接 sql通过tcp/ip发送到服务器服务器检查用户名,密码,权限创建线程处理连接 如果是sql8.0之前,select会先从缓存中查找,命中则返回,由于表结构变更会导致缓存失效,已废…...
[Survey] Image Segmentation in Foundation Model Era: A Survey
BaseInfo TitleImage Segmentation in Foundation Model Era: A SurveyAdresshttps://arxiv.org/pdf/2408.12957Journal/Time-Author北理工、上交、浙大 CCAI 、瑞士苏黎世联邦理工学院、德国慕尼黑工业大学Codehttps://github.com/stanley-313/ImageSegFM-Survey 1. Introdu…...
关于杰理ac791切换版本, git clone下来仍然是最新版本问题
在git clone 之后,在本地切换分支 常规流程:git clone →git branch →git branch -a → git checkout 分支名...