分布式微服务系统架构第142集:全栈开发
加群联系作者vx:xiaoda0423
仓库地址:https://webvueblog.github.io/JavaPlusDoc/
https://1024bat.cn/
https://github.com/webVueBlog/fastapi_plus
https://webvueblog.github.io/JavaPlusDoc/
/*** 本地启动解决跨域问题* 打包发布请注释该类,可能会造成一定的影响,解决本地启动跨域问题*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws ServletException, IOException {HttpServletResponse response = (HttpServletResponse) servletResponse;HttpServletRequest request = (HttpServletRequest) servletRequest;//设置响应内容类型response.setContentType("application/json; charset=utf-8");//设置响应字符编码response.setCharacterEncoding("UTF-8");//设置Access-Control-Max-Age,表示在3600秒内不需要再次发送预检请求response.setHeader("Access-Control-Max-Age", "3600");//设置允许的HTTP请求方法response.setHeader("Access-Control-Allow-Methods", "POST, GET,PUT, OPTIONS, DELETE");//设置允许的跨域请求来源response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));//设置是否允许发送Cookieresponse.setHeader("Access-Control-Allow-Credentials", "true");//设置允许的请求头response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, token");//继续执行过滤器链filterChain.doFilter(request, response);
}
用户提交表单会携带验证码相关参数,产品应用在相关接口处将该参数传给 集成jar包相关接口做二次校验,以确保该次验证是正确有效的。引入相关组件,调用初始化函数,通过配置的一些参数信息。将行为验证码渲染出来。
<dependency><groupId>com.anji-plus</groupId><artifactId>spring-boot-starter-captcha</artifactId><version>1.3.0</version>
</dependency>
缓存实现
public interface CaptchaCacheService {void set(String key, String value, long expiresInSeconds);boolean exists(String key);void delete(String key);String get(String key);/*** 缓存类型-local/redis/memcache/..* 通过java SPI机制,接入方可自定义实现类* @return*/String type();
}
二次校验接口
请求方式
请求参数
响应参数
异常代号
登录为例,用户在提交表单到产品应用后台,会携带一个验证码相关的参数。产品应用会在登录接口login中将该参数传给集成jar包中相关接口做二次校验。
接口地址:https://****/captcha/verify
HTTP POST, 接口仅支持POST请求, 且仅接受 application/json 编码的参数
参数 | 类型 | 必填 | 备注 |
---|---|---|---|
captchaVerification | String | Y | 验证数据,aes加密,数据在前端success函数回调参数中获取 |
参数 | 类型 | 必填 | 备注 |
---|---|---|---|
repCode | String | Y | 异常代号 |
success | Boolean | Y | 成功或者失败 |
error | Boolean | Y | 接口报错 |
repMsg | String | Y | 错误信息 |
error | 说明 |
---|---|
0000 | 无异常,代表成功 |
9999 | 服务器内部异常 |
0011 | 参数不能为空 |
6110 | 验证码已失效,请重新获取 |
6111 | 验证失败 |
6112 | 获取验证码失败,请联系管理员 |
引入前端vue组件, npm install axios crypto-js -S
CryptoJS是一个JavaScript的加解密的工具包
<template><Verify@success="'success'" //验证成功的回调函数:mode="'fixed'" //调用的模式:captchaType="'blockPuzzle'" //调用的类型 点选或者滑动 :imgSize="{ width: '330px', height: '155px' }"//图片的大小对象></Verify
</template><script>
//引入组件
import Verify from "./../../components/verifition/Verify";
export default {name: 'app',components: {Verify}methods:{success(params){// params 返回的二次验证参数}}
}
</script>
事件
参数 | 说明 |
---|---|
success | 验证码匹配成功后的回调函数 |
error | 验证码匹配失败后的回调函数 |
ready | 验证码初始化成功的回调函数 |
验证码参数
参数 | 说明 |
---|---|
captchaType | 1)滑动拼图 blockPuzzle 2)文字点选 clickWord |
mode | 验证码的显示方式,弹出式pop,固定fixed,默认是:mode : ‘pop’ |
vSpace | 验证码图片和移动条容器的间隔,默认单位是px。如:间隔为5px,设置vSpace:5 |
explain | 滑动条内的提示,不设置默认是:'向右滑动完成验证' |
imgSize | 其中包含了width、height两个参数,分别代表图片的宽度和高度,支持百分比方式设置 如:{width:'100%',height:'200px'} |
blockSize | 其中包含了width、height两个参数,分别代表拼图块的宽度和高度,如:{width:'40px',height:'40px'} |
barSize | 其中包含了width、height两个参数,分别代表滑动条的宽度和高度,支持百分比方式设置,如:{width:'100%',height:'40px'} |
{"captchaType": "" //验证码类型
}
在CentOS 4.x开始用 fontconfig 来安装字体库,所以输入以下命令即可:
sudo yum -y install fontconfig
这段代码是一个 Spring Bean 的定义,涉及到一个名为 AjCaptchaCacheService
的服务的初始化过程。具体是根据 AjCaptchaProperties
配置来创建一个 CaptchaCacheService
实例。这里面包含了对不同缓存类型的支持(比如 Redis 本地缓存等),并且在特定条件下做了额外的配置(例如设置 Redis 模板)。以下是对代码的逐行解析:
1. @Bean(name = "AjCaptchaCacheService")
作用:这个注解表示该方法是一个 Spring Bean,
AjCaptchaCacheService
是这个 Bean 的名字。Spring 会将这个方法的返回值注册为一个 Bean,并且在上下文中可以通过这个名字来获取该 Bean。
2. @Primary
作用:这个注解标记了该 Bean 为优先使用的 Bean。如果 Spring 容器中有多个相同类型的 Bean 时,
@Primary
表示该 Bean 会作为默认的选择进行注入,避免需要手动指定@Qualifier
。
3. public CaptchaCacheService captchaCacheService(AjCaptchaProperties config)
方法签名:这个方法定义了一个名为
captchaCacheService
的 Bean,返回类型是CaptchaCacheService
,并且接收一个AjCaptchaProperties
类型的参数config
,它是从 Spring 容器中注入的配置对象。AjCaptchaProperties
可能包含了与验证码相关的配置,比如缓存类型、过期时间等。
4. CaptchaCacheService ret = CaptchaServiceFactory.getCache(config.getCacheType().name());
功能:这一行代码通过
CaptchaServiceFactory
工厂类的getCache
方法,根据config.getCacheType().name()
获取对应的缓存服务类型,并返回一个CaptchaCacheService
实例。config.getCacheType().name()
的值(例如 "REDIS" 或 "LOCAL")可能指定了缓存的类型。如果
config.getCacheType()
为 Redis 缓存类型,则getCache()
会返回一个CaptchaCacheServiceRedisImpl
类型的实例。如果是本地缓存或其他缓存类型,则返回不同的实现类。
5. if(ret instanceof CaptchaCacheServiceRedisImpl){
功能:如果返回的
CaptchaCacheService
是CaptchaCacheServiceRedisImpl
类型的实例(即是 Redis 缓存实现),则进入这个if
分支进行进一步配置。
6. ((CaptchaCacheServiceRedisImpl) ret).setStringRedisTemplate(redisTemplate);
功能:这行代码是将
StringRedisTemplate
设置到CaptchaCacheServiceRedisImpl
实例中。StringRedisTemplate
是 Redis 操作的一个 Spring 模板类,它提供了对 Redis 字符串数据的封装,简化了 Redis 操作。redisTemplate
可能是一个已经注入到当前类中的 Redis 模板实例,这里通过setStringRedisTemplate
方法将其设置到CaptchaCacheServiceRedisImpl
实例中,使得该实例能够使用StringRedisTemplate
进行 Redis 操作。
7. return ret;
功能:返回创建好的
CaptchaCacheService
实例(ret
)。这个实例会被 Spring 容器管理,并且可以在需要使用CaptchaCacheService
的地方注入和使用。
代码总结
该方法根据 AjCaptchaProperties
配置动态选择一个缓存类型,并根据缓存类型初始化 CaptchaCacheService
实例。若缓存类型为 Redis,则进一步注入 StringRedisTemplate
以支持 Redis 操作。最终返回的 CaptchaCacheService
实例会作为 Bean 被 Spring 容器管理和注入使用。
适用场景
这种方式适用于需要根据配置来灵活选择缓存类型的场景。例如,当缓存方式可以在 Redis 和本地缓存之间切换时,采用这种方法可以避免在不同环境中修改大量的代码,便于配置化管理。
@Bean(name = "AjCaptchaCacheService")
是 Spring 中用来定义 Bean 的一种方式,name
属性的作用和为什么这么写可以从以下几个方面来理解:
1. name
属性的作用
在 Spring 中,@Bean
注解用来定义一个 Bean,name
属性则指定该 Bean 的名称。默认情况下,如果没有指定 name
,Spring 会根据方法名(即 captchaCacheService
)作为 Bean 的名称。
示例:
@Bean(name = "AjCaptchaCacheService")
public CaptchaCacheService captchaCacheService(AjCaptchaProperties config) {//...
}
这里,@Bean(name = "AjCaptchaCacheService")
表示将该 Bean 注册到 Spring 容器时,使用 AjCaptchaCacheService
作为其名称。也就是说,在 Spring 容器中,这个 CaptchaCacheService
的实例将被引用为 AjCaptchaCacheService
。
默认名称与自定义名称的区别:
如果没有指定
name
,Spring 会将 Bean 的名称默认设置为方法名称(即captchaCacheService
)。如果指定了
name
,则这个 Bean 会以指定的名称(即AjCaptchaCacheService
)注册到容器中。
2. 为什么这么写
在这个上下文中,给 Bean 指定一个明确的名称有几个目的:
避免命名冲突:假设 Spring 容器中有多个
CaptchaCacheService
类型的 Bean,如果不指定名称,Spring 会使用方法名称(captchaCacheService
)作为默认的名称。如果容器中已经存在一个名为captchaCacheService
的 Bean,那么 Spring 就会发生冲突,导致注入失败。通过指定一个自定义名称(例如AjCaptchaCacheService
),可以确保唯一性。方便引用:指定名称后,可以在其他地方通过名称来引用该 Bean。例如,如果你需要通过
@Autowired
注入该 Bean,可以明确指定使用AjCaptchaCacheService
,避免因为默认名称造成的混淆。明确的命名意图:
AjCaptchaCacheService
作为 Bean 名称清楚表达了该 Bean 与AjCaptchaProperties
和验证码相关,具备较好的可读性与语义性。
3. 相关注解和配置
@Primary
也在代码中出现,说明这个 Bean 是默认注入的优先选择。当有多个同类型的 Bean 时,Spring 会优先注入被标记为 @Primary
的 Bean。name
和 @Primary
结合使用,有助于明确在多个同类型 Bean 存在时,注入哪个 Bean。
总结
name
属性用来指定 Spring 容器中注册的 Bean 名称,避免命名冲突,增强可读性和可维护性。如果不指定,Spring 默认使用方法名作为 Bean 名称。
在这个代码中,
AjCaptchaCacheService
明确指定了该 Bean 的名称,避免了潜在的冲突,并且使代码的意图更加明确。
在 Java 项目中,META-INF
文件夹是一个非常特殊的目录,通常存在于项目的 resources
文件夹中,并且在项目打包成 .jar
或 .war
等格式时,会被保留在其中。META-INF
目录的主要作用是存放关于 JAR 文件或者类路径下的元数据信息。它的内容通常与 Java 类加载、服务发现、JAR 描述、加密算法等方面有关。
META-INF
目录的常见用途和内容
META-INF/MANIFEST.MF
Manifest-Version
表示 manifest 文件的版本;Class-Path
用来指定该 JAR 依赖的外部类库;Main-Class
表示执行该 JAR 文件时的主类。
作用:这是最常见的文件,它包含了关于 JAR 文件的元数据。
MANIFEST.MF
文件包含了 JAR 文件的版本、类路径、主类、作者信息等。示例:
Manifest-Version: 1.0 Class-Path: lib/some-library.jar Main-Class: com.example.Main
其中:
服务提供者配置文件(
META-INF/services/
)作用:Java 提供了一种服务加载机制,这让不同的组件可以通过接口约定和插件机制来进行解耦。通过在
META-INF/services/
目录下定义一个以接口全限定类名命名的文件,并列出服务实现类的全限定名,Java 程序可以在运行时动态加载实现类。示例:
假设有一个接口com.example.PaymentProcessor
,在META-INF/services/com.example.PaymentProcessor
文件中可以列出实现该接口的具体类名:com.example.impl.PayPalProcessor com.example.impl.StripeProcessor
这种机制使得 Java 可以根据接口找到不同的实现类,常见的应用场景包括 SPI(Service Provider Interface)和一些依赖注入框架。
**
META-INF/spring.factories
**(在 Spring 框架中)作用:Spring 框架使用这个文件来进行自动化配置。
spring.factories
文件允许将配置文件、Bean 定义、自动装配逻辑与应用的主要代码解耦,自动加载相关配置和组件。示例:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration
**
META-INF/beans.xml
**(在 Java EE 中)作用:
beans.xml
是一个配置文件,它定义了一个 Java EE 应用中包含的 CDI(Context and Dependency Injection)Bean。它的作用是启用 CDI 容器,控制和管理类的生命周期。示例:
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_0.xsd"> </beans>
**
META-INF/persistence.xml
**(在 JPA 中)作用:在 Java 持久化 API(JPA)中,
persistence.xml
文件包含了数据源、实体管理器工厂和 JPA 的其他配置。这个文件一般放在META-INF/
目录下。示例:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"><persistence-unit name="myJpaUnit"><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><jta-data-source>java:/MyDataSource</jta-data-source><class>com.example.MyEntity</class></persistence-unit> </persistence>
META-INF/manifest.mf
作用:在 OSGi(开放服务网关 initiative)中,
META-INF/
目录也用于存放MANIFEST.MF
文件,这个文件描述了包的相关信息,如 Bundle-SymbolicName,Bundle-Version 等。
加密算法相关的文件
作用:在一些使用加密功能的 Java 应用中,
META-INF
目录还可能包含一些与加密相关的文件,例如签名证书、私钥、公钥、加密算法配置等。例如,JCE(Java Cryptography Extension)使用
META-INF
中的策略文件来指定可用的加密算法。
总结
META-INF
目录是 Java 项目中的重要文件夹,通常用于存放与 Java 应用的元数据、配置、服务发现、加密算法等相关的文件。它对于支持 JAR 文件的服务发现、插件机制、自动化配置等非常重要,特别是在使用 Spring 或 JPA 等框架时经常会遇到。在打包成 JAR 文件时,META-INF
会被保留下来,从而使得应用能够根据这些配置文件进行运行时的动态行为调整。
相关文章:
分布式微服务系统架构第142集:全栈开发
加群联系作者vx:xiaoda0423 仓库地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ https://github.com/webVueBlog/fastapi_plus https://webvueblog.github.io/JavaPlusDoc/ /*** 本地启动解决跨域问题* 打包发布请注释该类&#…...

PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。
目录 1.问题描述 2.函数接口定义: 3.裁判测试程序样例: 4.输入和输出样例 输入样例: 输出样例: 5.实现代码 1.问题描述 Main类:在main方法中,调用constructWorkerList方法构建一个Worker对象链表…...
文档整合自动化
主要功能是按照JSON文件(Sort.json)中指定的顺序合并多个Word文档(.docx),并清除文档中的所有超链接。最终输出合并后的文档名为"sorted_按章节顺序.docx"。 主要分为几个部分: 初始化配置 定…...

微软markitdown PDF/WORD/HTML文档转Markdown格式软件整合包下载
本次和大家分享另一个微软发布的非常热门的文件文档转Markdown格式文档的软件markitdown,软件可以将PDF,word,ppt,Excel等十几种格式文档转换为markdown格式文档,我基于当前最新0.1.2版本制作了免安装一键启动整合包。…...
科普:Linux `su` 切换用户后出现 `$` 提示符,如何排查和解决?
科普:Linux su 切换用户后出现 $ 提示符,如何排查和解决? 在 Linux 系统管理中,su(Switch User)命令用于切换用户身份。正常情况下,从 root 切换到普通用户时,提示符会从 # 变成 $&…...

BayesFlow:基于神经网络的摊销贝叶斯推断框架
贝叶斯推断为不确定性条件下的推理、复杂系统建模以及基于观测数据的预测提供了严谨且功能强大的理论框架。尽管贝叶斯建模在理论上具有优雅性,但在实际应用中经常面临显著的计算挑战:后验分布通常缺乏解析解,模型验证和比较需要进行重复的推…...
NodeJS全栈开发面试题讲解——P9性能优化(Node.js 高级)
✅ 9.1 Node.js 的性能瓶颈一般出在哪?如何排查? Node.js 单线程 异步模型,瓶颈常出现在: 阻塞操作(如:同步 I/O、CPU 密集型计算) 数据库慢查询 / 索引失效 外部接口慢响应 大量并发请求导…...
NVMe IP现状扫盲
SSD优势 与机械硬盘(Hard Disk Driver, HDD)相比,基于Flash的SSD具有更快的数据随机访问速度、更快的传输速率和更低的功耗优势,已经被广泛应用于各种计算领域和存储系统。SSD最初遵循为HDD设计的现有主机接口协议,例…...
5G-A时代与p2p
5G-A时代正在走来,那么对P2P的影响有多大。 5G-A作为5G向6G过渡的关键技术,将数据下载速率从千兆提升至万兆,上行速率从百兆提升至千兆,时延降至毫秒级。这种网络性能的跨越式提升,为P2P提供了更强大的底层支撑&#x…...

基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试
目录 1.课题概述 2.系统测试效果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于FPGA的DES加解密系统verilog实现,包含testbench和开发板硬件测试。输入待加密数据,密钥,输出加密数据,然后通过解密模块输出解密后的原…...
基于生产-消费模式,使用Channel进行文件传输(Tcp方式)
Client端: #region 多文件传输 public class FileMetadata {public string FileName { get; set; }public long FileSize { get; set; } }class Program {const int PORT 8888;const int BUFFER_SIZE 60 * 1024 * 1024;//15s-50 25s-64 33s-32 27s-50 31s-40 25…...
tortoisegit 使用rebase修改历史提交
在 TortoiseGit 中使用 rebase 修改历史提交(如修改提交信息、合并提交或删除提交)的步骤如下: --- ### **一、修改最近一次提交** 1. **操作**: - 右键项目 → **TortoiseGit** → **提交(C)** - 勾选 **"Amend…...

Python----目标检测(《用于精确目标检测和语义分割的丰富特征层次结构》和R-CNN)
一、《用于精确目标检测和语义分割的丰富特征层次结构》 1.1、基本信息 原文标题:Rich feature hierarchies for accurate object detection and semantic segmentation 中文译名:用于精确目标检测与语义分割的丰富特征层次结构 版本:第5版技…...
Ansible 进阶 - Roles 与 Inventory 的高效组织
Ansible 进阶 - Roles 与 Inventory 的高效组织 如果说 Playbook 是一份完整的“菜谱”,那么 Role (角色) 就可以被看作是制作这道菜(或一桌菜)所需的标准化“备料包”或“半成品组件”。例如,我们可以有一个“Nginx Web 服务器安装配置 Role”、“MySQL 数据库基础设置 Ro…...

极简以太彩光网络解决方案4.0正式发布,“彩光”重构园区网络极简之道
5月28日下午,锐捷网络在京举办以“光,本该如此‘简单’”为主题的发布会,正式发布极简以太彩光网络解决方案4.0。作为“彩光”方案的全新进化版本,极简以太彩光4.0从用户需求出发,聚焦场景洞察,开启了一场从底层基因出发的极简革命,通过架构、部署、运维等多维度的创新升级,以强…...

国芯思辰| 霍尔电流传感器AH811为蓄电池负载检测系统安全护航
在电动车、储能电站、不间断电源(UPS)等设备中,蓄电池作为关键的储能单元,其运行状态直接关系到设备的稳定性和使用寿命。而准确监测蓄电池的负载情况,是保障其安全、高效运行的关键。霍尔电流传感器 AH811凭借独特的技…...

TortoiseSVN账号切换
SVN登录配置及账号切换 本文主要为了解答svn客户端如何进行账号登录及切换不同权限账号的方式。 一、环境准备与客户端安装 安装TortoiseSVN客户端 下载地址:TortoiseSVN官网 安装步骤: 双击安装包,按向导完成安装后&#x…...

2025年05月28日Github流行趋势
项目名称:agenticSeek 项目地址url:https://github.com/Fosowl/agenticSeek项目语言:Python历史star数:10352今日star数:2444项目维护者:Fosowl, steveh8758, klimentij, ganeshnikhil, apps/copilot-pull-…...
精益数据分析(91/126):商业模式与阶段匹配的指标体系构建
精益数据分析(91/126):商业模式与阶段匹配的指标体系构建 在创业的不同阶段,企业面临的核心问题与目标差异显著,这就要求我们依据商业模式和所处阶段,动态调整关键指标体系。今天,我们将深入解…...

篇章五 数据结构——链表(一)
目录 1.ArrayList的缺陷 2. 链表 2.1 链表的概念及结构 2.2 链表结构 1. 单向或者双向 2.带头或者不带头 3.循环或者非循环 2.3 链表的实现 1.完整代码 2.图解 3.显示方法 4.链表大小 5. 链表是否存在 key 值 6.头插法 7.尾插法 8.中间插入 9.删除key值节点 10.…...
一文清晰理解目标检测指标计算
一、核心概念 1.交并比IoU 预测边界框与真实边界框区域的重叠比,取值范围为[0,1] 设预测边界框为,真实边界框为 公式: IoU计算为两个边界框交集面积与并集面积之比,图示如下 IoU值越高,表示预测边界框与真实边界框的对…...
【MySQL】索引下推减少回表次数
一、简述索引下推 “索引下推”是数据库领域的一个术语,主要出现在MySQL(尤其是InnoDB存储引擎)中,英文名叫 Index Condition Pushdown,简称 ICP。就是过滤的动作由下层的存储引擎层通过使用索引来完成,而…...

Artificial Analysis2025年Q1人工智能发展六大趋势总结
2025年第一季度人工智能发展六大趋势总结 ——基于《Artificial Analysis 2025年Q1人工智能报告》 趋势一:AI持续进步,竞争格局白热化 前沿模型竞争加剧:OpenAI凭借“o4-mini(高智能版)”保持领先,但谷歌&…...
DeepSeek模型高级应用:提示工程与Few-shot学习实战指南
引言 在DeepSeek模型的实际应用中,提示工程(Prompt Engineering)和Few-shot学习正成为提升模型性能的关键技术。相比全参数微调,这些技术能以更低成本实现领域适配。本文将深入解析DeepSeek模型的高级提示技巧、动态Few-shot实现方案,以及混合微调策略,帮助开发者在资源受…...
Android高级开发第三篇 - JNI异常处理与线程安全编程
Android高级开发第三篇 - JNI异常处理与线程安全编程 Android高级开发第三篇 - JNI异常处理与线程安全编程引言为什么要关注异常处理和线程安全?第一部分:JNI异常处理基础什么是JNI异常?检查和处理Java异常从C代码抛出Java异常异常处理的最佳…...
企业级应用狂潮:从Spotify到LinkedIn的Llama实战手册
当Spotify用Llama生成的个性化推荐文案让用户播放时长激增30%, 当LinkedIn靠开源框架将社交推荐延迟降低40%—— 企业级AI战场正经历从“技术炫技”到“利润引擎”的残酷蜕变。 核心数据:企业采用率爆发式增长(2025 Gartner调研) 指标2023年2025年增幅开源模型采用率42%87%…...

高效管理 Python 项目的 UV 工具指南
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…...
QT中子线程触发主线程弹窗并阻塞等待用户响应
目录 QT中子线程触发主线程弹窗并阻塞等待用户响应一、使用QMetaObject::invokeMethod实现子线程安全触发主线程弹窗并阻塞等待:🔧 Qt多线程弹窗:安全阻塞等待方案(QMetaObject::invokeMethod详解)🧠 一、核…...

初识vue3(vue简介,环境配置,setup语法糖)
一,前言 今天学习vue3 二,vue简介及如何创建vue工程 Vue 3 简介 Vue.js(读音 /vjuː/,类似 “view”)是一款流行的渐进式 JavaScript 框架,用于构建用户界面。Vue 3 是其第三代主要版本,于 …...
HarmonyOS NEXT~鸿蒙开发工具CodeGenie:AI驱动的开发效率革命
HarmonyOS NEXT~鸿蒙开发工具CodeGenie:AI驱动的开发效率革命 一、CodeGenie概述 DevEco CodeGenie是华为鸿蒙开发生态中的一款AI辅助编程工具,集成于DevEco Studio IDE中,为开发者提供全方位的智能编程支持。这款工具通过AI技术…...