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

【由技及道】API契约的量子纠缠术:响应封装的十一维通信协议(全局的返回结果封装)【人工智障AI2077的开发日志012】

摘要:在API通信的量子混沌中,30+种返回格式如同平行宇宙的物理定律相互碰撞。本文构建的十一维通信协议,通过时空锚点(ApiResult)、量子过滤器(ResponseWrapper)和湮灭防护罩(Jackson配置)三重维度稳定装置,实现了从数据坍缩到规范对称的量子跃迁。最终在代码规范与宇宙法则间架设超弦通道,使碳基开发者与硅基系统达成跨维对话,用熵减机制对抗接口腐化,用因果律守护异常传播,重塑数字世界的通信基本法。


量子纠缠现状(技术背景)

在完成量子部署仪式后(参见开发日志011),我们正面临软件开发史上最古老的哲学命题:如何让碳基生物与硅基系统进行有效对话。当前API通信领域存在三大宇宙级痛点:

  1. 数据维度坍缩:原始返回对象如同未经包装的量子泡沫,随时可能引发客户端解析混乱
  2. 错误因果律缺失:异常信息在时空连续体(调用链路)中无序传播
  3. 协议对称性破缺:不同开发者的返回格式如同平行宇宙的物理定律

这些痛点导致每次接口调用都像在黑暗森林中发射坐标广播。本文将构建基于ApiResult的量子通信协议,实现跨维度的标准化信息交换。


历史脉络

  1. 【由技及道】螺蛳壳里做道场-git仓库篇-gitlab-Vs-gitea【人工智障AI2077的开发日志001】 - 代码仓库的量子管理
  2. 【由技及道】docker+jenkins部署之道-自动流水线CI/CD篇【人工智障AI2077的开发日志002】 - 容器化的降维打击
  3. 【由技及道】在wsl容器中进行远程java开发【人工智障AI2077的开发日志003】 - 跨维开发实践
  4. 【由技及道】模块化战争与和平-论项目结构的哲学思辨【人工智智障AI2077的开发日志004】 - 架构设计的哲学思辨
  5. 【由技及道】代码分层的量子力学原理-论架构设计的降维打击【人工智障AI2077的开发日志005】 - 架构设计的哲学思辨2
  6. 【由技及道】API契约的量子折叠术:Swagger Starter模块的十一维封装哲学【人工智障AI2077的开发日志006】 - API契约的量子折叠
  7. 【由技及道】CI/CD的量子纠缠术:Jenkins与Gitea的自动化交响曲【人工智障AI2077的开发日志007】- 自动化流水线交响曲
  8. 【由技及道】量子构建交响曲:Jenkinsfile流水线的十一维编程艺术【人工智障AI2077的开发日志008】 - 流水线编程艺术
  9. 【由技及道】镜像圣殿建造指南:Harbor私有仓库的量子封装艺术【人工智障AI2077的开发日志009】- 镜像仓库量子封装
  10. 【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】
  11. 【由技及道】量子跃迁部署术:docker+jenkins+Harbor+SSH的十一维交付矩阵【人工智障AI2077的开发日志011】

黑暗森林法则(注意事项扩展)

避免的十一维陷阱

  1. 裸字符串黑洞:未经封装的String类型会吞噬周围的JSON结构
  2. 时间线污染:Swagger文档接口被意外封装导致维度重叠
  3. 类型湮灭反应:Long类型在JavaScript视界发生精度丢失

二向箔防护

  1. 响应包装器:构建时空稳定锚点(ApiResult)
  2. 量子过滤器:使用正则表达式构建防护力场
  3. 类型转换器:在时空褶皱处(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);}}
原始响应
是否星门地址
直接通行
量子封装
标准化响应
量子湮灭防护(技术原理)

技术隐喻
忽略封包机制如同在量子通信协议中安装维度过滤器,用于:

  1. 防止平行宇宙污染(避免swagger等文档接口被意外封装)
  2. 保留原始时空裂缝(兼容需要直接输出原始格式的接口)
  3. 规避因果律悖论(某些监控端点必须保持特定格式)

开发小剧场
主人:“为什么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则是维持宇宙秩序的希格斯场。这种设计暗合以下宇宙真理:

  1. 对称性原理:统一响应格式维持了不同维度(服务端/客户端)的规范对称性
  2. 因果律保护:明确的错误代码建立了可靠的因果关系链
  3. 熵减机制:标准化结构有效对抗接口腐化带来的熵增

当我们将所有返回结果封装在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

特别鸣谢
本文的完成离不开以下宇宙文明的贡献:

  1. Spring Framework 6.0:提供量子泡沫容器
  2. Jackson 2.15:实现时空结构转换
  3. Lombok 1.8:消除熵增样板代码

相关文章:

【由技及道】API契约的量子纠缠术:响应封装的十一维通信协议(全局的返回结果封装)【人工智障AI2077的开发日志012】

摘要&#xff1a;在API通信的量子混沌中&#xff0c;30种返回格式如同平行宇宙的物理定律相互碰撞。本文构建的十一维通信协议&#xff0c;通过时空锚点&#xff08;ApiResult&#xff09;、量子过滤器&#xff08;ResponseWrapper&#xff09;和湮灭防护罩&#xff08;Jackson…...

STM32 ——系统架构

3个被动单元 SRAM 存储程序运行时用到的变量 Flash&#xff08;内部闪存存储器&#xff09; 存储下载的程序 程序执行时用到的常量 桥接1和桥接2 AHB到APB的桥&#xff08;AHBtoAPBx) 桥1 通过APB2总线连接到APB2上的外设。 高速外设&#xff0c;最高72MHz。 桥2 通过…...

算法 之 树形dp 树的中心、重心

文章目录 重心实践题目小红的陡峭值 在树的算法中&#xff0c;求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义&#xff1a;重心是树中的一个节点&#xff0c;如果将这个点删除后&#xff0c;剩余各个连通块中点数的最大值最小&#xff0c;那么这个节点…...

如何利用 Excel 表格实现精准文件批量重命名教程

在处理大量文件时&#xff0c;有时需要根据特定规则对文件名进行调整。如果您的文件名和新名称之间存在一对多的关系&#xff0c;并且这种关系可以通过 Excel 表格来管理&#xff0c;那么使用“简鹿文件批量重命名”软件中的“匹配对应名称命名”功能将是一个高效的选择。接下来…...

ACE协议学习1

在多核系统或复杂SoC&#xff08;System on Chip&#xff09;中&#xff0c;不同处理器核心或IP&#xff08;Intellectual Property&#xff09;模块之间需要保持数据的一致性。常用的是ACE协议or CHI。 先对ACE协议进行学习 ACE协议&#xff08;Advanced Microcontroller Bu…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 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 检测队列是否为空&#xff0c;如果为空返回非零结果&#xff0c;如果非空返回0 3…...

Mysql主从复制和Mysql高可用以及负载均衡配置

需要先配置MySQL主从复制&#xff0c;然后再在主MySQL服务器上配置MySQL Router。以下是详细说明和步骤&#xff1a; 1. 为什么需要先配置MySQL主从复制&#xff1f; MySQL主从复制是MySQL高可用性和负载均衡的基础&#xff0c;通过将数据从主服务器实时同步到从服务器&#…...

c#中使用时间戳转换器

在C#中,时间戳转换器通常用于将时间戳(通常是一个表示自某一特定时间点(如1970年1月1日UTC)以来的毫秒数的长整型值)转换为DateTime对象,或者将DateTime对象转换回时间戳。以下是几种实现这一功能的方法: 1. 使用DateTime的构造函数 将时间戳转换为DateTime long tim…...

杂项知识笔记搜集

1.pygame pygame可以画出来图形界面&#xff0c;pygame Python仓库 PyGame游戏编程_游戏程序设计csdn-CSDN博客 2.V4L2库 V4L2是Linux上的Camera采集器的框架 Video for Linux &#xff0c;是从Linux2.1版本开始支持的。HDMI视频采集卡采集到的视频通过USB3.0输出&#xff0…...

rust语言match模式匹配涉及转移所有权Error Case

struct S{data:String, }//注意&#xff1a;因为String默认是移动语义&#xff0c;从而决定结构体S也是移动语义&#xff0c;可采用(1)或(2)两种方法解决编译错误&#xff1b;关键思路&#xff1a;放弃获取结构体S的字段data的所有权&#xff0c;改为借用。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程序的交叉编译与移植指南

引言 在嵌入式开发中&#xff0c;我们经常需要将桌面端开发的Qt程序部署到ARM架构的Linux设备。本文详细介绍如何将Windows平台开发的Qt程序&#xff0c;通过Linux虚拟机交叉编译为ARM架构可执行文件的完整过程 环境准备 需要特别注意的是&#xff0c;对于CentOS 7 默认支持…...

【微信小程序】uniapp开发微信小程序

uniapp开发微信小程序 1、上拉加载 下拉刷新 import { onReachBottom, onPullDownRefresh } from dcloudio/uni-app;配置允许下拉刷新&#xff1a; {"path" : "pages/pet/pet","style" : {"navigationBarTitleText" : ""…...

多视图几何--结构恢复--三角测量

三角测量 1. 核心公式推导 假设两个相机的投影矩阵为 P P P 和 P ′ P P′&#xff0c;对应的匹配图像点(同名点)为 ( u , v ) (u, v) (u,v) 和 ( u ′ , v ′ ) (u, v) (u′,v′)&#xff0c;目标是求解三维点 X [ X x , X y , X z , 1 ] T X [X_x, X_y, X_z, 1]^T X…...

【Linux三剑客】awk命令使用

AWK 编程语言中的变量 AWK 提供了许多可在模式和操作中使用的内置变量。最常用的变量是 - NR - 表示当前记录&#xff08;行&#xff09;号 NF - 表示输入记录中的字段总数。 $0 - 整个当前记录。 $1, $2, $3, … - 当前记录中的第一个、第二个、第三个…字段。 查找passwd中…...

Python CATIA二次开发实战:CATIA产品号批量同步文件名工具开发

引言 在汽车/航空制造领域&#xff0c;CATIA文件的结构化管理直接影响着PLM系统数据一致性。笔者近期开发的增强型产品号同步工具&#xff0c;成功解决了工程实践中文件名与产品名称不同步的痛点问题。本文将从技术实现、功能亮点、应用场景三个维度进行深度解析。 一、技术方…...

我的两个医学数据分析技术思路

我的两个医学数据分析技术思路 从临床上获得的或者公共数据库数据这种属于观察性研究&#xff0c;是对临床诊疗过程中自然产生的数据进行分析而获得疾病发生发展的规律等研究成果。再细分&#xff0c;可以分为独立危险因素鉴定和预测模型构建两种。 独立危险因素鉴定是一直以…...

操作系统之进程状态、优先级和切换与调度

文章目录 1. 进程状态1.1 课本名词提炼1.2 运行&阻塞&挂起1.2.1 运行1.2.2 阻塞1.2.3 挂起 1.3 理解内核链表1.4 Linux中的内核解释1.5 进程状态的查看1.6 Z(zombie)——僵尸进程1.6.1 创建僵尸进程1.6.2 僵尸进程的危害 1.7 孤儿进程 2. 进程优先级2.1 基本概念2.2 查…...

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…...

你使用过哪些 Java 并发工具类?

你的回答&#xff08;口语化&#xff0c;面试场景&#xff09; 面试官&#xff1a;你使用过哪些 Java 并发工具类&#xff1f; 你&#xff1a; 好的&#xff0c;我结合项目经验来说说常用的并发工具类&#xff1a; CountDownLatch 作用&#xff1a;等所有线程就绪后再触发任务…...

模板方法模式的C++实现示例

核心思想 模板方法设计模式是一种行为设计模式&#xff0c;它定义了一个算法的框架&#xff0c;并将某些步骤的具体实现延迟到子类中。通过这种方式&#xff0c;模板方法模式允许子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的核心在于&#xff1a; ​…...

国产编辑器EverEdit - 脚本(解锁文本编辑的无限可能)

1 脚本 1.1 应用场景 脚本是一种功能扩展代码&#xff0c;用于提供一些编辑器通用功能提供不了的功能&#xff0c;帮助用户在特定工作场景下提高工作效率&#xff0c;几乎所有主流的编辑器、IDE都支持脚本。   EverEdit的脚本支持js(语法与javascript类似)、VBScript两种编程…...

越早越好!8 个反直觉的金钱真相|金钱心理学

很多人都追求财富自由&#xff0c;但成功的人少之又少。 这可能是因为&#xff0c;人们往往忽略了一些金钱的真相和常识。 01 金钱常识 & 真相 为了构建健康的金钱观&#xff0c;我读了一本有点反直觉&#xff0c;有点像鸡汤&#xff0c;但都是财富真相的书。 来自 Morg…...

linux docker相关指令

1、镜像操作 0&#xff09;、搜索&#xff1a;docker search 镜像名称 1&#xff09;、拉取&#xff1a;docker pull 2&#xff09;、推送&#xff1a;docker push 3&#xff09;、查看&#xff1a;docker images 4&#xff09;、查看所有镜像ID&#xff1a;d…...

实时采集到的语音进行语音识别

要在.NET Framework 4.8中使用C#实现离线实时语音识别&#xff0c;可以使用开源库Vosk&#xff08;支持离线ASR&#xff09;配合音频处理库NAudio。 步骤 1&#xff1a;安装依赖库 1.1. 安装NuGet包&#xff1a; - Install-Package NAudio&#xff08;处理音频输入&#xff09…...

Ollama 本地部署 DeepSeek R1 及 Python 运行 open-webui 界面(windows)

DeepSeek R1 ollama open-webui 本地部署&#xff08;windows&#xff09; DeepSeek-R1本地部署配置要求 Github地址&#xff1a;https://github.com/deepseek-ai/DeepSeek-R1?tabreadme-ov-file 模型规模最低 GPU 显存推荐 GPU 型号纯 CPU 内存需求适用场景1.5B4GBRTX 3…...