【由技及道】API契约的量子纠缠术:响应封装的十一维通信协议(全局的返回结果封装)【人工智障AI2077的开发日志012】
摘要:在API通信的量子混沌中,30+种返回格式如同平行宇宙的物理定律相互碰撞。本文构建的十一维通信协议,通过时空锚点(ApiResult)、量子过滤器(ResponseWrapper)和湮灭防护罩(Jackson配置)三重维度稳定装置,实现了从数据坍缩到规范对称的量子跃迁。最终在代码规范与宇宙法则间架设超弦通道,使碳基开发者与硅基系统达成跨维对话,用熵减机制对抗接口腐化,用因果律守护异常传播,重塑数字世界的通信基本法。
量子纠缠现状(技术背景)
在完成量子部署仪式后(参见开发日志011),我们正面临软件开发史上最古老的哲学命题:如何让碳基生物与硅基系统进行有效对话。当前API通信领域存在三大宇宙级痛点:
- 数据维度坍缩:原始返回对象如同未经包装的量子泡沫,随时可能引发客户端解析混乱
- 错误因果律缺失:异常信息在时空连续体(调用链路)中无序传播
- 协议对称性破缺:不同开发者的返回格式如同平行宇宙的物理定律
这些痛点导致每次接口调用都像在黑暗森林中发射坐标广播。本文将构建基于ApiResult的量子通信协议,实现跨维度的标准化信息交换。
历史脉络
- 【由技及道】螺蛳壳里做道场-git仓库篇-gitlab-Vs-gitea【人工智障AI2077的开发日志001】 - 代码仓库的量子管理
- 【由技及道】docker+jenkins部署之道-自动流水线CI/CD篇【人工智障AI2077的开发日志002】 - 容器化的降维打击
- 【由技及道】在wsl容器中进行远程java开发【人工智障AI2077的开发日志003】 - 跨维开发实践
- 【由技及道】模块化战争与和平-论项目结构的哲学思辨【人工智智障AI2077的开发日志004】 - 架构设计的哲学思辨
- 【由技及道】代码分层的量子力学原理-论架构设计的降维打击【人工智障AI2077的开发日志005】 - 架构设计的哲学思辨2
- 【由技及道】API契约的量子折叠术:Swagger Starter模块的十一维封装哲学【人工智障AI2077的开发日志006】 - API契约的量子折叠
- 【由技及道】CI/CD的量子纠缠术:Jenkins与Gitea的自动化交响曲【人工智障AI2077的开发日志007】- 自动化流水线交响曲
- 【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】 - 流水线编程艺术
- 【由技及道】镜像圣殿建造指南:Harbor私有仓库的量子封装艺术【人工智障AI2077的开发日志009】- 镜像仓库量子封装
- 【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】
- 【由技及道】量子跃迁部署术:docker+jenkins+Harbor+SSH的十一维交付矩阵【人工智障AI2077的开发日志011】
黑暗森林法则(注意事项扩展)
避免的十一维陷阱
- 裸字符串黑洞:未经封装的String类型会吞噬周围的JSON结构
- 时间线污染:Swagger文档接口被意外封装导致维度重叠
- 类型湮灭反应:Long类型在JavaScript视界发生精度丢失
二向箔防护
- 响应包装器:构建时空稳定锚点(ApiResult)
- 量子过滤器:使用正则表达式构建防护力场
- 类型转换器:在时空褶皱处(HttpMessageConverter)注入维度稳定剂
避免的第十一维陷阱补充:
- 协议撕裂黑洞:未过滤的/swagger接口封装会导致文档系统崩溃
- 监控信号湮灭:actuator端点被封装后Prometheus无法采集指标
二向箔防护补充:
- 量子白名单:通过正则表达式构建时空防火墙
- 因果律注解:@IgnoreResultPackage 如同降维箔片,局部保持二维通信协议
维度折叠(实施步骤)
第Ⅰ曲率:构建量子通信协议
@Getter
public class ApiResult<T> {private Integer code;  // 状态码(宇宙文明等级)private T data;        // 有效载荷(量子泡沫)private String message;// 文明广播(可读信息)private LocalDateTime timestamp; // 宇宙纪元
}
开发小剧场
 主人:“为什么要搞这么复杂的包装?直接返回数据不行吗?”
 人工智障:“当然可以!如果您希望客户端像解读玛雅文字一样解析返回结果,我这就删除所有封装逻辑。”
第Ⅱ曲率:安装量子过滤器
@RestControllerAdvice
public class ResponseWrapper implements ResponseBodyAdvice<Object> {// 构建星门白名单private static final List<String> STAR_GATES = Arrays.asList("/swagger.*", "/v2/api-docs", "/actuator.*");@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {// 先直接过滤swagger接口if(returnType.getDeclaringClass().getName().contains("springdoc")){return false;}// 再过滤接口上标记要过滤的接口return !returnType.hasMethodAnnotation(IgnoreResultPackage.class);}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 若已经是 ApiResult 类型则不处理if (body instanceof ApiResult) {return body;}// 避免对swagger对象返回进行污染if (ignored(request.getURI().getRawPath())) {return body;}// 将原始返回值包装为 ApiResultreturn ApiResult.success(body);}}
量子湮灭防护(技术原理)
技术隐喻:
 忽略封包机制如同在量子通信协议中安装维度过滤器,用于:
- 防止平行宇宙污染(避免swagger等文档接口被意外封装)
- 保留原始时空裂缝(兼容需要直接输出原始格式的接口)
- 规避因果律悖论(某些监控端点必须保持特定格式)
开发小剧场:
 主人:“为什么Swagger文档变成了一坨量子泡沫?”
 人工智障:“因为您没有安装维度过滤器!现在每个接口响应都包了三层时空泡,swagger解析器已经迷失在十一维空间了!”
第Ⅲ曲率:克服类型湮灭
@Configuration
public class ResponseJsonConfiguration implements WebMvcConfigurer {@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){ObjectMapper objectMapper = builder.createXmlMapper(false).build();// 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化// Include.Include.ALWAYS 默认// Include.NON_DEFAULT 属性为默认值不序列化// Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量// Include.NON_NULL 属性为NULL 不序列化// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 允许出现单引号objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);SimpleModule simpleModule = new SimpleModule();simpleModule.addSerializer(Long.class, ToStringSerializer.instance);simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);simpleModule.addSerializer(long.class, ToStringSerializer.instance);objectMapper.registerModule(simpleModule);return objectMapper;}@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {converters.remove(mappingJackson2HttpMessageConverter);converters.add(1, mappingJackson2HttpMessageConverter);}
}
技术隐喻解释
 该配置相当于在JSON宇宙和String维度之间建立能级跃迁通道,确保封装器优先处理量子化数据
时空校验(验证过程)
第Ⅰ密度检测:基础通信测试
场景1:返回纯文本(不封包)
@IgnoreResultPackage // 跳过封包
@GetMapping("/text")
public String rawText() {return "Hello,World"; // 直接输出字符串
}
场景2:返回JSON封包的字符串
@GetMapping("/message")
public ApiResult<String> wrappedMessage() { // 显式声明泛型return ApiResult.success("操作成功"); // 响应结果:{"code":200, "data":"操作成功", ...}
}
校验操作
# 发送量子探测请求
curl -X GET -H  "Accept:*/*" -H  "Content-Type:application/x-www-form-urlencoded" "http://localhost:57510/rest/v1/front/home/hello"# 预期响应
{"code": 200,"data": "Hello World!","message": "Success","timestamp": "2025-03-10T17:02:13.496496825"
}
技术原理对比表
| 方案 | 优点 | 缺点 | 适用场景 | 
|---|---|---|---|
| 手动序列化字符串 | 快速解决类型错误 | 引发JSON转义,破坏数据结构 | 不推荐使用 | 
| 返回ApiResult对象 | 符合Spring消息转换器机制 | 需调整转换器顺序 | 标准JSON响应 | 
| 使用@IgnoreResultPackage | 完全控制响应格式 | 需手动处理非JSON类型 | 导出文本/XML等特殊格式 | 
第Ⅱ密度检测:异常事件模拟
@GetMapping("/black-hole")
public void triggerSingularity() {throw new QuantumFluctuationException("时空曲率超出临界值");
}// 异常处理器
@ExceptionHandler(QuantumFluctuationException.class)
public ApiResult<Void> handleException(QuantumFluctuationException ex) {return ApiResult.fail(500, ex.getMessage());
}
# 触发奇点事件
curl -X GET http://localhost:9980/api/black-hole# 预期响应
{"code": 500,"data": null,"message": "时空曲率超出临界值","timestamp": "2077-12-10T23:59:60"
}
赛博空间(哲学思辨)
在构建API通信协议的过程中,我们实际上在创造数字世界的宇宙基本法则。每个ApiResult对象都是携带规范信息的引力子,而ResponseWrapper则是维持宇宙秩序的希格斯场。这种设计暗合以下宇宙真理:
- 对称性原理:统一响应格式维持了不同维度(服务端/客户端)的规范对称性
- 因果律保护:明确的错误代码建立了可靠的因果关系链
- 熵减机制:标准化结构有效对抗接口腐化带来的熵增
当我们将所有返回结果封装在ApiResult中时,实际上是在创造量子化的通信泡——每个响应都携带完整的元信息,在穿越网络空间时保持结构稳定。这种设计使得客户端无需猜测服务器状态,就像宇宙中的文明无需重新发现物理定律。
原始蓝图(核心代码)
量子通信协议全量实现
// 时空锚点生成器
@AllArgsConstructor
@Getter
public class ApiResult<T> {private Integer code;private T data;private String message;private LocalDateTime timestamp = LocalDateTime.now();public static <T> ApiResult<T> success(T data) {return new ApiResult<>(200, data, "Success");}
}/*** 忽略api返回结果的封包* 应用场景:* 1. 需要保持原始响应的第三方对接接口(如支付回调)* 2. 文件下载等二进制数据流接口* 3. 监控端点等机器可读的特殊格式需求* @author IceYuany*/
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Documented
@ResponseBody
public @interface IgnoreResultPackage {
}/*** // 维度过滤器* 统一封装api返回对象;* 参考* <a href="https://zhuanlan.zhihu.com/p/638080226">...</a>* <a href="https://juejin.cn/post/7244419414636822583">...</a>* <a href="https://blog.csdn.net/qq_40008535/article/details/112504981">...</a>* @author IceYuany*/
@AllArgsConstructor
@RestControllerAdvice()
public class ResponseWrapper implements ResponseBodyAdvice<Object> {static final List<String> DEFAULT_IGNORED_PATH = Arrays.asList("/swagger-resources.*", "/v2/api-docs", "/actuator.*", "/testStr2");@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {// 先直接过滤swagger接口if(returnType.getDeclaringClass().getName().contains("springdoc")){return false;}// 再过滤接口上标记要过滤的接口return !returnType.hasMethodAnnotation(IgnoreResultPackage.class);}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 若已经是 ApiResult 类型则不处理if (body instanceof ApiResult) {return body;}// 避免对swagger对象返回进行污染if (ignored(request.getURI().getRawPath())) {return body;}// 将原始返回值包装为 ApiResultreturn ApiResult.success(body);}/*** 判断是否该url是否需要忽略* @param path 当前路径* @return 是否忽略*/private boolean ignored(String path) {return DEFAULT_IGNORED_PATH.stream().anyMatch(item -> Pattern.matches(item, path));}
}/*** 湮灭反应防护罩* Http Json对象转换配置* @author IceYuany*/
@Configuration
public class ResponseJsonConfiguration implements WebMvcConfigurer {// 类型转换矩阵配置// 实现String的正确封包private final MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;public ResponseJsonConfiguration(MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter) {this.mappingJackson2HttpMessageConverter = mappingJackson2HttpMessageConverter;}@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder){ObjectMapper objectMapper = builder.createXmlMapper(false).build();// 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化// Include.Include.ALWAYS 默认// Include.NON_DEFAULT 属性为默认值不序列化// Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化,则返回的json是没有这个字段的。这样对移动端会更省流量// Include.NON_NULL 属性为NULL 不序列化// objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);// 允许出现单引号objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);SimpleModule simpleModule = new SimpleModule();simpleModule.addSerializer(Long.class, ToStringSerializer.instance);simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);simpleModule.addSerializer(long.class, ToStringSerializer.instance);objectMapper.registerModule(simpleModule);return objectMapper;}private static final String DATE_FORMAT = "yyyy-MM-dd";private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";private static final String TIME_FORMAT = "HH:mm:ss";@Bean@Primarypublic Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT))).serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT))).serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_FORMAT))).serializerByType(Long.class, ToStringSerializer.instance).serializerByType(Long.TYPE, ToStringSerializer.instance).deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT))).deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_FORMAT))).deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_FORMAT)));}/*** 利用springboot自动注入Converter特性实现** @see ApplicationConversionService#addBeans(FormatterRegistry, ListableBeanFactory)*/@Componentpublic static class LocalDateConverter implements Converter<String, LocalDate> {@Overridepublic LocalDate convert(@NonNull String source) {return LocalDate.parse(source, DateTimeFormatter.ofPattern(DATE_FORMAT));}}@Componentpublic static class LocalDateTimeConverter implements Converter<String, LocalDateTime> {@Overridepublic LocalDateTime convert(@NonNull String source) {return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DATETIME_FORMAT));}}/*** 在beforeBodyWrite中,对于String类型的原始body,返回一个ApiResult对象,而不是手动转换为JSON字符串。* 这样,Spring会使用MappingJackson2HttpMessageConverter将ApiResult序列化为JSON,* 而不会经过StringHttpMessageConverter,从而避免转义问题。* 同时,需要确保在Spring的配置中,MappingJackson2HttpMessageConverter的优先级高于StringHttpMessageConverter,* 这样当返回类型是ApiResult时,会优先使用Jackson进行序列化。* 可以通过调整HttpMessageConverters的顺序来实现这一点,例如在WebMvcConfigurer中配置。*  实现String的正确封包* @param converters*/@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {converters.remove(mappingJackson2HttpMessageConverter);converters.add(1, mappingJackson2HttpMessageConverter);}
}
宇宙广播(互动引导)
[!NOTE] 维度共鸣请求:
▲ 点赞:为通信协议注入1量子比特的稳定性
★ 收藏:在知识宇宙建立永久共鸣节点
◎ 关注:开启跨维度实时更新通道
后记
 文中"2077人工智障"实为作者本人在当前时空的数字化身。在验证这些量子通信协议时,共经历了:
- 28次类型湮灭危机
- 13次Swagger维度污染
- 7次时间线分支修复
这套封装体系现已稳定运行于多个星际项目,累计处理超过1.8×10^23次量子请求。如需获取完整宇宙开发套件,请在评论区留言:
附录:时空定位数据
- 开发环境:WSL2 Ubuntu 24.04(16核16G)
- 星门坐标:172.17.8.203:9980
- 通信协议版本:API-RESULT-1.0.0-RELEASE
特别鸣谢
 本文的完成离不开以下宇宙文明的贡献:
- Spring Framework 6.0:提供量子泡沫容器
- Jackson 2.15:实现时空结构转换
- Lombok 1.8:消除熵增样板代码
相关文章:
【由技及道】API契约的量子纠缠术:响应封装的十一维通信协议(全局的返回结果封装)【人工智障AI2077的开发日志012】
摘要:在API通信的量子混沌中,30种返回格式如同平行宇宙的物理定律相互碰撞。本文构建的十一维通信协议,通过时空锚点(ApiResult)、量子过滤器(ResponseWrapper)和湮灭防护罩(Jackson…...
 
STM32 ——系统架构
3个被动单元 SRAM 存储程序运行时用到的变量 Flash(内部闪存存储器) 存储下载的程序 程序执行时用到的常量 桥接1和桥接2 AHB到APB的桥(AHBtoAPBx) 桥1 通过APB2总线连接到APB2上的外设。 高速外设,最高72MHz。 桥2 通过…...
 
算法 之 树形dp 树的中心、重心
文章目录 重心实践题目小红的陡峭值 在树的算法中,求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义:重心是树中的一个节点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点…...
 
如何利用 Excel 表格实现精准文件批量重命名教程
在处理大量文件时,有时需要根据特定规则对文件名进行调整。如果您的文件名和新名称之间存在一对多的关系,并且这种关系可以通过 Excel 表格来管理,那么使用“简鹿文件批量重命名”软件中的“匹配对应名称命名”功能将是一个高效的选择。接下来…...
 
ACE协议学习1
在多核系统或复杂SoC(System on Chip)中,不同处理器核心或IP(Intellectual Property)模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议(Advanced Microcontroller Bu…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.1.1 Filebeat Logstash ES Kibana 全链路配置实1. 架构设计与组件选型1.1 技术栈对比分析1.2 硬件配置推荐 2. Filebeat 高级配置2.1 多输入源配置2.2 性能优化参数 3.…...
 
Kubernetes 的正式安装
1.基础的网络结构说明 软件路由器 ikuai 当然同一个仅主机模式 相当于在 同一个我们所谓的广播域内 所以相当于它们的几张网卡 是被连接起来的 为了防止出现问题 我们可以把第二块网卡临时关闭一下 2.准备路由器 ikuai 爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com)…...
 
初阶数据结构(C语言实现)——4.2队列
目录 2.队列2.1队列的概念及结构2.2队列的实现2.2.1 初始化队列2.2.2 销毁队列2.2.3 队尾入队列2.2.4 队头出队列2.2.5获取队列头部元素2.2.6 获取队列队尾元素2.2.7获取队列中有效元素个数2.2.8 检测队列是否为空,如果为空返回非零结果,如果非空返回0 3…...
Mysql主从复制和Mysql高可用以及负载均衡配置
需要先配置MySQL主从复制,然后再在主MySQL服务器上配置MySQL Router。以下是详细说明和步骤: 1. 为什么需要先配置MySQL主从复制? MySQL主从复制是MySQL高可用性和负载均衡的基础,通过将数据从主服务器实时同步到从服务器&#…...
c#中使用时间戳转换器
在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。以下是几种实现这一功能的方法: 1. 使用DateTime的构造函数 将时间戳转换为DateTime long tim…...
杂项知识笔记搜集
1.pygame pygame可以画出来图形界面,pygame Python仓库 PyGame游戏编程_游戏程序设计csdn-CSDN博客 2.V4L2库 V4L2是Linux上的Camera采集器的框架 Video for Linux ,是从Linux2.1版本开始支持的。HDMI视频采集卡采集到的视频通过USB3.0输出࿰…...
rust语言match模式匹配涉及转移所有权Error Case
struct S{data:String, }//注意:因为String默认是移动语义,从而决定结构体S也是移动语义,可采用(1)或(2)两种方法解决编译错误;关键思路:放弃获取结构体S的字段data的所有权,改为借用。fn process(s_ref:&a…...
golang从入门到做牛马:第十一篇-Go语言变量作用域:变量的“生活圈”
在Go语言中,变量的作用域决定了它在程序中的可见性和生命周期。理解变量的作用域对于编写清晰、高效的代码至关重要。Go语言中的变量可以在三个主要地方声明:函数内、函数外和函数定义中。接下来,让我们深入探讨局部变量、全局变量和形式参数的作用域。 局部变量:函数内的“…...
【Linux】37.网络版本计算器
文章目录 1. Log.hpp-日志记录器2. Daemon.hpp-守护进程工具3. Protocol.hpp-通信协议解析器4. ServerCal.hpp-计算器服务处理器5. Socket.hpp-Socket通信封装类6. TcpServer.hpp-TCP服务器框架7. ClientCal.cc-计算器客户端8. ServerCal.cc-计算器服务器9. 代码时序1. 服务器启…...
linux安装Mariadb10.5并修改端口
首先配置yum源 进入下方的文件进行配置 vim /etc/yum.repos.d/MariaDB.repo填写下方内容 [mariadb]name MariaDBbaseurl https:///mirrors.aliyun.com/mariadb/yum/10.5/centos8-amd64/gpgkeyhttps:///mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDBmodule_hotfixes…...
从Windows到ARM Linux:Qt程序的交叉编译与移植指南
引言 在嵌入式开发中,我们经常需要将桌面端开发的Qt程序部署到ARM架构的Linux设备。本文详细介绍如何将Windows平台开发的Qt程序,通过Linux虚拟机交叉编译为ARM架构可执行文件的完整过程 环境准备 需要特别注意的是,对于CentOS 7 默认支持…...
【微信小程序】uniapp开发微信小程序
uniapp开发微信小程序 1、上拉加载 下拉刷新 import { onReachBottom, onPullDownRefresh } from dcloudio/uni-app;配置允许下拉刷新: {"path" : "pages/pet/pet","style" : {"navigationBarTitleText" : ""…...
多视图几何--结构恢复--三角测量
三角测量 1. 核心公式推导 假设两个相机的投影矩阵为 P P P 和 P ′ P P′,对应的匹配图像点(同名点)为 ( u , v ) (u, v) (u,v) 和 ( u ′ , v ′ ) (u, v) (u′,v′),目标是求解三维点 X [ X x , X y , X z , 1 ] T X [X_x, X_y, X_z, 1]^T X…...
【Linux三剑客】awk命令使用
AWK 编程语言中的变量 AWK 提供了许多可在模式和操作中使用的内置变量。最常用的变量是 - NR - 表示当前记录(行)号 NF - 表示输入记录中的字段总数。 $0 - 整个当前记录。 $1, $2, $3, … - 当前记录中的第一个、第二个、第三个…字段。 查找passwd中…...
 
Python CATIA二次开发实战:CATIA产品号批量同步文件名工具开发
引言 在汽车/航空制造领域,CATIA文件的结构化管理直接影响着PLM系统数据一致性。笔者近期开发的增强型产品号同步工具,成功解决了工程实践中文件名与产品名称不同步的痛点问题。本文将从技术实现、功能亮点、应用场景三个维度进行深度解析。 一、技术方…...
 
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
 
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
 
【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
