每日学习Java之一万个为什么?
文章目录
- Java 异步编排与同步工具类对比
- 一、Java 异步编排概述
- 1. **什么是异步编排?**
- 2. **核心工具:CompletableFuture**
- 二、CompletableFuture 的优点
- 三、同步工具类对比
- 1. **CountDownLatch**
- 2. **CyclicBarrier**
- 3. **Semaphore**
- 四、CompletableFuture 与同步工具类的对比
- 五、典型应用场景
- 1. **CompletableFuture**
- 2. **CountDownLatch**
- 3. **CyclicBarrier**
- 4. **Semaphore**
- 六、总结
- `CommandLineRunner` 接口功能详解
- 一、核心功能
- 二、接口定义
- 三、使用方法
- 1. **实现接口**
- 2. **添加注解**
- 四、典型应用场景
- 五、示例代码
- 1. **基础示例**
- 2. **带日志和参数解析**
- 六、注意事项
- 1. **执行时机**
- 2. **异常处理**
- 3. **命令行参数**
- 4. **执行顺序**
- 5. **关闭方法**
- 七、与 `ApplicationRunner` 的区别
- 八、最佳实践
- 九、总结
- BitMap
- 分布式缓存Redis
- 分布式解锁问题
- RouYi @InnerAuth
- RBAC权限模型
- RouYi H5端会员登录
Java 异步编排与同步工具类对比
一、Java 异步编排概述
1. 什么是异步编排?
异步编排(Asynchronous Composition)是指通过组合多个异步任务,实现任务间的依赖关系、并行执行或结果聚合的编程方式。核心目标是提高程序响应速度和系统吞吐量。
2. 核心工具:CompletableFuture
- Java 8 引入,是
Future
接口的增强版本。 - 支持链式调用、组合操作(如
thenApply
,thenAccept
,thenCompose
)。 - 提供异常处理、超时控制、回调机制等功能。
- 适用场景:需要处理多个异步任务的依赖关系、并行执行、结果聚合等。
二、CompletableFuture 的优点
优点 | 说明 |
---|---|
非阻塞式调用 | 通过 supplyAsync 或 runAsync 提交任务后,主线程无需等待结果即可继续执行其他操作。 |
任务组合能力 | 支持链式调用(如 thenApply 处理结果)、多任务并行(如 thenCombine 合并结果)、任务依赖(如 thenCompose )。 |
异常处理机制 | 通过 .exceptionally() 或 .handle() 捕获异常并提供兜底逻辑。 |
回调支持 | 支持 whenComplete 、handle 等回调方法,灵活处理任务完成后的逻辑。 |
资源管理优化 | 可指定自定义线程池,避免阻塞主线程,提升系统并发性能。 |
三、同步工具类对比
1. CountDownLatch
- 功能:等待一组线程完成操作后再继续执行。
- 特点:
- 计数器只减不增,不可重用。
- 适用于一次性事件(如初始化、任务分发后等待完成)。
- 示例:
CountDownLatch latch = new CountDownLatch(3); for (int i = 0; i < 3; i++) {new Thread(() -> {// 执行任务latch.countDown();}).start(); } latch.await(); // 主线程等待
2. CyclicBarrier
- 功能:让一组线程互相等待,直到所有线程都到达屏障点后再同时继续执行。
- 特点:
- 计数器可重置,支持多次使用。
- 适用于分阶段协作(如多线程计算后聚合结果)。
- 示例:
CyclicBarrier barrier = new CyclicBarrier(3, () -> {// 所有线程到达后执行的回调 }); for (int i = 0; i < 3; i++) {new Thread(() -> {// 执行任务barrier.await();}).start(); }
3. Semaphore
- 功能:控制同时访问某个资源的线程数量。
- 特点:
- 通过许可证机制限制资源访问。
- 适用于资源池管理(如连接池、限流)。
- 示例:
Semaphore semaphore = new Semaphore(2); // 最多允许2个线程访问 semaphore.acquire(); try {// 访问资源 } finally {semaphore.release(); }
四、CompletableFuture 与同步工具类的对比
对比维度 | CompletableFuture | CountDownLatch | CyclicBarrier | Semaphore |
---|---|---|---|---|
用途 | 异步任务组合、依赖处理、结果聚合 | 等待一组线程完成 | 多线程同步屏障 | 控制资源访问数量 |
是否可重用 | ✅(支持多次使用) | ❌(一次性的) | ✅(可重置) | ✅(许可证可释放) |
是否阻塞主线程 | ❌(非阻塞) | ✅(通过 await() 阻塞) | ✅(通过 await() 阻塞) | ❌(通过 acquire() 阻塞) |
异常处理 | ✅(支持 .exceptionally() ) | ❌(需手动捕获异常) | ❌(需手动捕获异常) | ❌(需手动捕获异常) |
适用场景 | 高并发异步任务编排、微服务调用聚合 | 等待多线程初始化完成 | 分阶段协作任务 | 资源池、限流、互斥访问 |
五、典型应用场景
1. CompletableFuture
- 微服务调用聚合:同时调用多个远程服务,合并结果。
- 批量数据处理:并行处理多个独立任务,最后汇总结果。
- 异步任务链式依赖:A 任务完成后触发 B 任务,B 任务完成后触发 C 任务。
2. CountDownLatch
- 主线程等待所有子线程完成:如主线程需要收集所有子线程的计算结果。
- 初始化任务:等待多个初始化任务完成后启动主流程。
3. CyclicBarrier
- 并行计算分阶段:如 MapReduce 中的多阶段计算任务。
- 多线程协同:所有线程完成当前阶段后,统一进入下一阶段。
4. Semaphore
- 连接池管理:限制数据库连接数或 HTTP 客户端连接数。
- 限流:控制单位时间内访问某个资源的线程数量。
六、总结
工具 | 最佳使用场景 |
---|---|
CompletableFuture | 复杂异步任务编排、非阻塞式高并发处理 |
CountDownLatch | 一次性等待多线程完成 |
CyclicBarrier | 多线程分阶段协作、屏障同步 |
Semaphore | 资源访问控制、限流 |
建议:
- 如果需要处理异步任务的依赖关系或聚合结果,优先选择 CompletableFuture。
- 如果需要简单等待多线程完成,使用 CountDownLatch。
- 如果需要多线程分阶段同步,使用 CyclicBarrier。
- 如果需要控制资源访问数量,使用 Semaphore。
CommandLineRunner
接口功能详解
一、核心功能
CommandLineRunner
是 Spring Boot 提供的一个接口,用于在 Spring 应用上下文完全初始化后、应用正式提供服务前 执行特定的代码逻辑。其核心功能包括:
- 执行初始化任务
在应用启动时加载数据、初始化缓存、检查配置等。 - 接收命令行参数
通过String[] args
直接访问应用启动时传递的命令行参数。 - 支持多任务协作
可以定义多个CommandLineRunner
实现类,并通过@Order
注解控制执行顺序。
二、接口定义
@FunctionalInterface
public interface CommandLineRunner {/*** 在 SpringApplication 启动后回调* @param args 来自应用程序的命令行参数* @throws Exception 如果发生错误*/void run(String... args) throws Exception;
}
三、使用方法
1. 实现接口
创建一个类并实现 CommandLineRunner
接口,重写 run
方法。
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class MyStartupRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("应用启动完成,开始执行初始化操作...");// 业务逻辑(如加载数据、初始化缓存等)if (args.length > 0) {System.out.println("接收到的命令行参数: " + String.join(", ", args));}}
}
2. 添加注解
- 使用
@Component
注解,Spring 会自动扫描并注册该 Bean。 - 如果需要控制执行顺序,使用
@Order(int value)
注解。
import org.springframework.core.annotation.Order;@Component
@Order(1) // 执行顺序为1(数字越小优先级越高)
public class FirstRunner implements CommandLineRunner { ... }@Component
@Order(2)
public class SecondRunner implements CommandLineRunner { ... }
四、典型应用场景
场景 | 说明 |
---|---|
数据初始化 | 在应用启动时加载初始数据到数据库或缓存中。例如:插入默认用户、角色或权限数据。 |
配置检查 | 验证配置文件或环境变量是否正确(如检查数据库连接、外部服务地址)。 |
缓存预热 | 在应用启动时预先加载热点数据到 Redis 或本地缓存中,避免首次请求性能下降。 |
后台任务启动 | 启动定时任务、消息监听器或异步任务。 |
命令行参数处理 | 根据启动参数执行特定逻辑(如 --init 参数触发初始化操作)。 |
五、示例代码
1. 基础示例
@Component
public class SimpleRunner implements CommandLineRunner {@Overridepublic void run(String... args) throws Exception {System.out.println("应用启动后执行初始化逻辑");if (args.length > 0 && "init".equals(args[0])) {System.out.println("检测到 init 参数,执行初始化操作");}}
}
2. 带日志和参数解析
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class DataInitializer implements CommandLineRunner {private static final Logger logger = LoggerFactory.getLogger(DataInitializer.class);@Overridepublic void run(String... args) throws Exception {logger.info("开始初始化数据...");if (args.length > 0 && "--force-init".equals(args[0])) {// 执行强制初始化逻辑logger.info("执行强制初始化操作");}logger.info("数据初始化完成");}
}
六、注意事项
1. 执行时机
CommandLineRunner
的run
方法会在 Spring 上下文初始化完成后 被调用。- 此时,所有 Bean 已经完成初始化,可以安全地调用依赖的 Bean。
2. 异常处理
- 如果
run
方法抛出异常,Spring Boot 会终止应用启动流程(除非异常被捕获)。 - 建议在方法内部使用
try-catch
捕获异常并记录日志。
3. 命令行参数
- 参数通过
String[] args
传递,需手动解析(如--key=value
格式)。 - 示例:
启动命令:java -jar app.jar --init --env=prod
参数解析:for (String arg : args) {if (arg.startsWith("--env=")) {String env = arg.substring(6);System.out.println("环境参数: " + env);} }
4. 执行顺序
- 默认情况下,多个
CommandLineRunner
的执行顺序是 无序的。 - 使用
@Order
注解或实现Ordered
接口可控制顺序。
5. 关闭方法
CommandLineRunner
本身没有关闭逻辑,但可以通过以下方式控制行为:- 在
run
方法中添加条件判断(如检查环境参数)。 - 抛出异常终止应用启动(需谨慎使用)。
- 在
七、与 ApplicationRunner
的区别
特性 | CommandLineRunner | ApplicationRunner |
---|---|---|
参数类型 | String[] args (原始字符串数组) | ApplicationArguments (封装后的参数对象) |
适用场景 | 简单参数解析 | 复杂参数处理(支持解析 --key=value 格式) |
接口复杂度 | 简单 | 稍复杂 |
八、最佳实践
-
避免长时间阻塞主线程
如果初始化逻辑耗时较长,建议将任务提交到线程池异步执行。 -
依赖检查
确保run
方法中调用的 Bean 已正确注入(如数据库连接、外部服务)。 -
日志记录
在关键步骤添加日志,便于调试和监控。 -
参数校验
对命令行参数进行校验,避免因参数错误导致初始化失败。 -
幂等性设计
如果任务可能重复执行(如多次启动应用),确保初始化逻辑具有幂等性。
九、总结
功能 | 说明 |
---|---|
核心作用 | 应用启动后执行初始化任务 |
执行时机 | Spring 上下文初始化完成后 |
参数支持 | 直接接收命令行参数 |
适用场景 | 数据初始化、配置检查、缓存预热等 |
扩展性 | 支持多个 Runner 并控制执行顺序 |
通过合理使用 CommandLineRunner
,可以显著提升 Spring Boot 应用的灵活性和健壮性。
BitMap
Redis提供了四个常用命令处理二进制数组
- SETBIT:为数组指定偏移量上的二进制位设置值,偏移量从0开始计数,二进制位的值只能为0/1.(设置下标值)
- GETBIT:获取某个下标的值
- BITCOUNT:统计二进制为1的数量
- BITOP:对多个位数组进行运算
分布式缓存Redis
分布式解锁问题
RouYi @InnerAuth
网关清除请求头信息,防止伪造内部交互。
@Aspect
@Component
public class InnerAuthAspect implements Ordered
{@Around("@annotation(innerAuth)")public Object innerAround(ProceedingJoinPoint point, InnerAuth innerAuth) throws Throwable{String source = ServletUtils.getRequest().getHeader(SecurityConstants.FROM_SOURCE);// 内部请求验证if (!StringUtils.equals(SecurityConstants.INNER, source)){throw new InnerAuthException("没有内部访问权限,不允许访问");}String userid = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USER_ID);String username = ServletUtils.getRequest().getHeader(SecurityConstants.DETAILS_USERNAME);// 用户信息验证if (innerAuth.isUser() && (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username))){throw new InnerAuthException("没有设置用户信息,不允许访问 ");}return point.proceed();}/*** 确保在权限认证aop执行前执行*/@Overridepublic int getOrder(){return Ordered.HIGHEST_PRECEDENCE + 1;}
}
RBAC权限模型
RouYi H5端会员登录
相关文章:
每日学习Java之一万个为什么?
文章目录 Java 异步编排与同步工具类对比一、Java 异步编排概述1. **什么是异步编排?**2. **核心工具:CompletableFuture** 二、CompletableFuture 的优点三、同步工具类对比1. **CountDownLatch**2. **CyclicBarrier**3. **Semaphore** 四、Completable…...
Ubuntu 第11章 网络管理
可以肯定地说,如果没有Linux,今天的互联网可能不会这么发达,Linux天生与网络有着密不可分的关系。据统计,Linux和UNIX在互联网服务器操作系统中已经占据了60%以上的市场份额。网络管理对于Ubuntu系统维护来说是一项非常重要的技能…...
深入解析进程间通信与Socket原理:从理论到TypeScript实战
文章目录 一、进程中如何通信1.1 管道1.1.1 核心特性1.1.2 缺点1.1.3 匿名管道与命名管道的对比 1.2 信号1.2.1 核心特性1.2.2 缺点1.2.3 信号分类对比 1.3 消息队列1.3.1 核心特性1.3.2 缺点 1.4 共享内存1.4.1 核心特性1.4.2 缺点 1.5 信号量1.5.1 核心特性1.5.2 缺点 二、So…...
[特殊字符] Milvus + LLM大模型:打造智能电影知识库系统
今天给大家分享一个超酷的技术组合:Milvus向量数据库 智谱AI大模型!我们将创建一个能理解电影内容的智能搜索系统,不仅能找到相关电影,还能用自然语言总结答案! 🌟 项目背景 这个项目基于Milvus官方案例…...
MapReduce架构-打包运行
(一)maven打包 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序(例如:jar…...
信创生态核心技术栈:国产芯片架构适配详解
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
BBDM学习笔记
1. configs 1.1 LBBDM: Latent BBDM [readme]...
6. HTML 锚点链接与页面导航
在开发长页面或文档类网站时,锚点链接(Anchor Links)是一个非常实用的功能。通过学习 HTML 锚点技术,将会掌握如何在同一页面内实现快速跳转,以及如何优化长页面的导航体验。以下是基于给定素材的学习总结和实践心得 一、什么是锚点链接? 锚点链接(也称为页面内链接)允…...
绘制拖拽html
<!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8" /> <meta name"viewport" content"widthdevice-width, initial-scale1" /> <title>拖拽绘制矩形框 - 可移动可调整大小</ti…...
OpenCV计算机视觉实战(3)——计算机图像处理基础
OpenCV计算机视觉实战(3)——计算机图像处理基础 0. 前言1. 像素和图像表示1.1 像素 2. 色彩空间2.1 原色2.2 色彩空间2.3 像素和色彩空间 3. 文件类型3.1 图像文件类型3.2 视频文件3.3 图像与视频 4. 计算机图像编程简史5. OpenCV 概述小结系列链接 0. …...
零基础学Java——第九章:数据库编程(三)
第九章:数据库编程 - ORM框架(下) 在上一部分中,我们学习了ORM框架的基础知识和Hibernate框架。在这一部分中,我们将继续学习其他流行的ORM框架,包括MyBatis和Spring Data JPA。 1. MyBatis框架 1.1 MyB…...
Linux/AndroidOS中进程间的通信线程间的同步 - 信号量
1 概述 本文将介绍 POSIX 信号量,它允许进程和线程同步对共享资源的访问。有两种类型的 POSIX 信号量: 命名信号量:这种信号量拥有一个名字。通过使用相同的名字调用 sem_open(),不相关的进程能够访问同一个信号量。未命名信号量…...
精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式
精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式 在创业与数据分析的征程中,每一种商业模式都蕴含着独特的价值与挑战。今天,我们依旧怀揣着共同进步的信念,深入研读《精益…...
vue +xlsx+exceljs 导出excel文档
实现功能:分标题行导出数据过多,一个sheet表里表格条数有限制,需要分sheet显示。 步骤1:安装插件包 npm install exceljs npm install xlsx 步骤2:引用包 import XLSX from xlsx; import ExcelJS from exceljs; 步骤3&am…...
Android 10.0 SharedPreferences in credential encrypted storage are not avai
1.前言 在10.0的系统rom定制化开发中,在开机的过程中,由于某些应用在开机解锁阶段就开始访问查询短信和联系人等功能,所以 会出现抛异常的情况出现,接下来分析下相关的情况,然后来解决这些问题 2.SharedPreferences in credential encrypted storage are not available …...
面试高频算法:最长回文子串
题目:5. 最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 回文:如果字符串向前和向后读都相同,则它满足回文性;子串:子字符串 是字符串中连续的非空字符序列。 示例 1: 输入&…...
RDK X5 交叉编译OSS\QT\opencv\openssl
RDK X5 交叉编译环境配置 1 资源2 使用vm安装Ubuntu22.043 安装依赖4 安装ide5 下载交叉编译工具6 编译oss库6.1 设置临时环境变量6.2 编译arm版本的openssl6.2 编译arm版本的curl6.1 下载oss源码6.1.1 创建arm-toolchain.cmake6.1.2 修改CMakeLists.txt6.1.3 编译 7 编译openc…...
Python cv2边缘检测与轮廓查找:从理论到实战
在计算机视觉领域,边缘检测与轮廓查找是图像分析的核心技术。本文将结合OpenCV库(cv2模块),从理论原理到代码实战,系统讲解如何通过Python实现这两个关键操作。 一、基础概念解析 1.1 边缘检测的本质 边缘是图像中灰…...
5月7日星期三今日早报简报微语报早读
5月7日星期三,农历四月初十,早报#微语早读。 1、1101名优秀运动员拟保送,全红婵、黄雨婷、盛李豪在列; 2、世界羽联主席巴达玛:中国组织赛事的能力无与伦比; 3、中国首位、亚洲首位!赵心童夺…...
智慧医院的可视化变革:可视化工具助力数字化转型
在科技飞速发展的当下,智慧医院已从概念逐步落地,深刻改变着传统医疗模式。它借助互联网、数字孪生及人工智能等前沿技术,在医疗服务领域掀起革新,涵盖面向医务人员的“智慧医疗”、面向患者的“智慧服务”以及面向医院的“智慧管…...
python+open3d选择点云上的某个点并获取其对应三维坐标
👑主页:吾名招财 👓简介:工科学硕,研究方向机器视觉,爱好较广泛… 💫签名:面朝大海,春暖花开! python+open3d选择点云上的某个点并获取其对应三维坐标 1,引言2,效果展示3,点云获取4,程序1,引言 有时候我们只想在点云上获取某个目标的具体坐标,通过程序根据…...
ROS第十三梯:RViz+Marker——自定义几何形状可视化
1)概述 在ROS(Robot Operating System)中,Marker是一种用于在RViz(Robot Visualization)中显示自定义几何形状和注释的工具。Marker是通过visualization_msgs/Marker消息类型发布的。可以在RViz中以各种形式(如点、线、文本、立方体等)显示数据。 2)主要消息格…...
Java高频面试之并发编程-13
hello啊,各位观众姥爷们!!!本baby今天又来报道了!哈哈哈哈哈嗝🐶 面试官:详解原子性、可见性、有序性 在并发编程中,原子性(Atomicity)、可见性(…...
WSL 的 Ubuntu 子系统中启用图形化界面
sudo chmod w /home sudo apt update sudo apt install cifs-utils 1. 选择合适的 X 服务器 在 Windows 系统上,需要安装一个 X 服务器来处理 WSL 中 Ubuntu 的图形显示。常用的 X 服务器有 VcXsrv 和 X410,这里以 VcXsrv 为例: 从VcXsrv 官…...
项目模拟实现消息队列第二天
消息应答的模式 1.自动应答: 消费者把这个消息取走了,就算是应答了(相当于没有应答) 2.手动应答: basicAck方法属于手动应答(消费者需要主动调用这个api进行应答) 小结 1.需要实现生产者,broker server,消费者这三个部分的 2.针对生产者和消费…...
MySQL OCP和Oracle OCP怎么选?
近期oracle 为庆祝 MySQL 数据库发布 30 周年,Oracle 官方推出限时福利:2025 年 4 月 20 日至 7 月 31 日期间,所有人均可免费报考 MySQL OCP(Oracle Certified Professional)认证考试(具体可查看MySQL OCP…...
SR触发器为什么能够消抖
SR触发器(Set-Reset触发器)能够用于**消抖(Debounce)**,主要是因为它的双稳态特性和对输入信号的锁定能力。机械开关(如按键、拨动开关)在闭合或断开时,由于金属触点的弹性ÿ…...
2025ISCC练武校级赛部分题解WP
Web 战胜卞相壹 <!-- 路过的酒罐王柯洁九段说: --> <!-- 会叠棋子有什么用!你得在棋盘内战胜他!我教你个定式,要一直记得!一直! --> <!-- SGF B[ae];B[ce];B[df];B[cg];B[ag];B[ai];B[ci];…...
Microsoft Azure 在印度尼西亚区域正式上线
微软正式宣布,其首个落地印度尼西亚的云区域——Indonesia Central 已全面上线并正式投入使用!这一区域精心设置了三个可用性区(Availability Zones),每个可用性区均配备独立的电源、冷却系统以及网络设施,…...
day18 python聚类分析对数据集模型性能影响
聚类后的分析:推断簇的类型 知识点回顾: 推断簇含义的2个思路:先选特征和后选特征通过可视化图形借助ai定义簇的含义科研逻辑闭环:通过精度判断特征工程价值 作业:参考示例代码对心脏病数据集采取类似操作,并且评估特征…...
vue3的新特性
vue2 data属性和方法名散落于各个位置,量大了不好找 顺序变了,script在最前面 setup vue3中不用this,setup的执行时期比beforeCreate还要早,所以不要用this setup中写代码的特点 必须要有return,才能在上面使用 什么…...
NX二次开发——BlockUI 弹出另一个BlockUI对话框
最近在研究,装配体下自动导出BOM表格中需要用到BlockUI 弹出另一个BlockUI对话框。通过对网上资料进行整理总结,具体如下: 1、明确主对话框、子对话框1和子对话框2 使用BlockUI创建.cpp和.hpp文件,dlx文件内容如下所示 主对话框…...
《Overlapping Experiment Infrastructure: More, Better, Faster》论文阅读笔记
文章目录 1 背景2 三个核心概念3 Launch层:特性发布的专用机制4 流量分发策略和条件筛选4.1 四种流量分发类型4.2 条件筛选机制 5 工具链与监控体系6 实验设计原则7 培训参考与推荐 1 背景 谷歌(Google)以数据驱动著称,几乎所有可…...
【Machine Learning Q and AI 读书笔记】- 05 利用数据减少过拟合现象
Machine Learning Q and AI 中文译名 大模型技术30讲,主要总结了大模型相关的技术要点,结合学术和工程化,对LLM从业者来说,是一份非常好的学习实践技术地图. 本文是Machine Learning Q and AI 读书笔记的第5篇,对应原…...
前端面试测试题目(一)
一、Vue的双向绑定机制(v-model底层实现原理) Vue的双向绑定核心由 响应式系统 和 指令语法糖 共同实现,具体原理如下: 响应式系统 Vue通过数据劫持和依赖收集实现数据变化到视图的同步: • 数据劫持:在Vue…...
最优化方法Python计算:无约束优化应用——线性回归分类器
一、线性回归分类器 假设样本数据为 ( x i , y i ) (\boldsymbol{x}_i, y_i) (xi,yi),其中 i 1 , 2 , … , m i 1, 2, \dots, m i1,2,…,m。标签 y i y_i yi 取值于 k k k 个整数 { 1 , 2 , … , k } \{1, 2, \dots, k\} {1,2,…,k},从而构…...
【汇正自控阀门集团】签约智橙PLM,智橙助泵阀“以国代进”
签约智橙,汇正阀门的“以国代进”举措 随着阀门市场竞争日益激烈、市场需求日益多样化,无论是出口海外、以国代进,还是进军新能源、造船、油气等投资景气的下游市场,阀门企业能否在快速迭代产品、保持技术领先的同时,…...
【macOS】iTerm2介绍
iTerm2 和 iTerm 是 macOS 上两个不同的终端模拟器,虽然名字相似,但它们是两个独立的项目,且 iTerm2 是 iTerm 的现代化继承者。以下是它们的核心区别和演进关系: 1. 历史背景 项目诞生时间状态开发者iTerm2002 年已停止维护Greg…...
2025年五一假期旅游市场新趋势:理性消费、多元场景与科技赋能
2025年五一假期,国内旅游市场再次迎来爆发式增长,官方数据显示,假期期间国内出游人次达3.14亿,游客总消费1802.69亿元。尽管数据规模亮眼,但深入分析可发现,旅游市场正经历结构性变革——消费行为趋于理性、…...
第3章 模拟法
3.1 模拟法概述 模拟法设计思想 模拟法通过将现实问题抽象成计算机可识别的符号与操作,按逻辑顺序“模拟”其过程,从而得到结果;它不依赖复杂公式或高深技巧,只需理清问题背景与实现步骤即可。 示例:鸡兔同笼问题 题…...
16.状态模式:思考与解读
原文地址:状态模式:思考与解读 更多内容请关注:深入思考与解读设计模式 引言 在开发软件系统时,特别是当对象的行为会随着状态的变化而变化时,系统往往会变得复杂。你是否遇到过这样的情况:一个对象的行为在不同的状…...
ActiveMQ 源码剖析:消息存储与通信协议实现(二)
四、KahaDB 消息存储实现细节 (一)存储原理分析 KahaDB 作为 ActiveMQ 从 5.4 版本开始的默认消息存储引擎,其基于日志文件的存储原理具有独特的设计和优势 。在 KahaDB 的存储目录(如${activemq.data}/kahadb)下&am…...
明远智睿SD2351核心板:工业AIoT时代的创新引擎
在当今工业互联网飞速发展的浪潮中,人工智能(AI)与物联网(IoT)的深度融合正以前所未有的态势重塑着传统制造业的格局。从自动化生产线的精准控制到智能仓储的高效管理,从设备运行的实时监测到产品质量的严格…...
iPhone 和 Android 在日期格式方面的区别
整篇文章由iPhone 和 Android 在日期格式方面有所不同引起,大致介绍了,两种时间标准,以及在 JavaScript 下的格式转换方法。 Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。 iPhone 和 Android 在日期格式方面有所不同。其中,iPhone(iOS)使…...
使用VSCode在Windows 11上编译运行项目
使用VSCode在Windows 11上编译运行项目 VSCode是一个功能强大的跨平台代码编辑器,可以很好地支持C/C项目开发。以下是使用VSCode在Windows 11上编译运行此项目的详细步骤。 1. 安装VSCode 访问VSCode官网下载并安装VSCode安装完成后,启动VSCode 2. 安…...
边缘计算,运维架构从传统的集中式向分布式转变
在当今数字化时代,边缘计算的崛起正在改变着运维的格局。随着物联网、5G 等技术的快速发展,越来越多的数据和应用正在向边缘设备迁移,这给运维团队带来了新的挑战和机遇。 一、边缘计算崛起带来的运维挑战 边缘计算将计算和数据存储靠近数据…...
【基础篇】prometheus热更新解读
文章目录 本篇内容讲解热更新参数源码解读本篇总结本篇内容讲解 prometheus热更新源码解读 热更新参数 –web.enable-lifecycle : 代表开启热更新配置 修改配置文件发http请求# curl -X POST -vvv localhost:9090/-/reload * About to connect() to localhost port 9090 (…...
为了结合后端而学习前端的学习日志(1)——纯CSS静态卡片案例
前端设计专栏 使用纯CSS创建简洁名片卡片的学习实践 在这篇技术博客中,我将分享我的前端学习过程,如何使用纯HTML和CSS创建一个简洁美观的名片式卡片,就像我博客首页展示的那样。这种卡片设计非常适合作为个人简介、产品展示或团队成员介绍…...
汽车服务小程序功能点开发
汽车养护服务功能 智能保养预约:根据车辆品牌、型号及行驶里程,自动推荐保养项目,支持线上预约 4S 店或合作维修厂,选择服务时间与地点。故障诊断与维修:车主上传车辆故障现象,系统智能初步诊断࿰…...
SENSE2020BSI sCMOS科学级相机主要参数及应用场景
SENSE2020BSI sCMOS科学级相机是一款面向宽光谱成像需求的高性能科学成像设备,结合了背照式(Back-Side Illuminated, BSI)CMOS技术与先进信号处理算法,适用于天文观测、生物医学成像、工业检测等领域。以下是其核心特点及技术细节…...