Z-Image-GGUF模型Java后端集成指南:SpringBoot微服务实战

news2026/4/1 7:10:53
Z-Image-GGUF模型Java后端集成指南SpringBoot微服务实战最近在做一个内容创作平台的后台重构产品经理提了个需求想给用户加个“AI一键生成文章配图”的功能。团队评估了几个方案最终决定用Z-Image-GGUF这个模型因为它对硬件要求相对友好生成质量也不错。但问题来了我们整个后台是Java技术栈怎么把这个Python生态的AI模型平滑地集成到SpringBoot微服务里还得保证高并发下的稳定和性能这确实花了我们不少功夫。如果你也在琢磨怎么把AI绘画能力塞进你的Java应用里特别是面对那些动不动就几十秒的生成任务怎么不让用户等得抓狂那咱们今天聊的这个实战方案应该能给你一些直接的参考。我会把我们在SpringBoot项目里趟过的坑、试出来的有效做法还有那些能让服务更稳当的细节都跟你捋一遍。1. 项目准备与环境搭建在开始写代码之前得先把场子搭好。咱们这个方案的核心思路是“桥接”让SpringBoot服务通过HTTP去调用一个独立部署的Z-Image-GGUF模型服务。所以你得先有个能跑起来的模型服务。1.1 模型服务部署Z-Image-GGUF模型通常会有配套的推理服务器比如用llama.cpp项目编译的server或者一些社区封装好的WebUI。这里假设你已经有一个运行在http://localhost:8081的模型API服务它提供了一个生成图片的端点比如POST /api/generate请求体是描述文本响应是一张图片。为了后续开发测试方便我强烈建议你在本地或者测试环境先用Python起一个简单的模拟服务。不用真的跑大模型只要它能接收请求、等一会儿、然后返回个模拟的图片数据就行。下面这个Flask小脚本就能顶一阵子from flask import Flask, request, send_file import io import time from PIL import Image import random app Flask(__name__) app.route(/api/generate, methods[POST]) def generate_image(): # 模拟处理耗时 time.sleep(2 random.random() * 3) # 等待2-5秒 # 创建一个简单的模拟图片 img Image.new(RGB, (512, 512), color(random.randint(0,255), random.randint(0,255), random.randint(0,255))) img_byte_arr io.BytesIO() img.save(img_byte_arr, formatPNG) img_byte_arr.seek(0) return send_file(img_byte_arr, mimetypeimage/png) if __name__ __main__: app.run(port8081)跑起来之后用curl或者Postman测试一下能通咱们Java这边的工作就可以开始了。1.2 SpringBoot项目初始化打开你的IDE创建一个新的SpringBoot项目。用Spring Initializr或者你习惯的方式都行。依赖方面除了基础的Web功能我们这次还需要几个帮手Spring Boot Starter Web提供RestTemplate和WebClient用来调用外部HTTP服务。Spring Boot Starter Data Redis用来做请求结果的缓存这是提升体验的关键。Spring Boot Starter Validation对API入参做校验。Springdoc OpenAPI Starter生成漂亮的API文档前后端协作省心很多。Spring Boot Starter Test写单元测试和集成测试保证代码质量。你的pom.xml依赖部分大概长这样dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 响应式编程非必须但WebClient好用 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-validation/artifactId /dependency dependency groupIdorg.springdoc/groupId artifactIdspringdoc-openapi-starter-webmvc-ui/artifactId version2.3.0/version !-- 请使用最新稳定版 -- /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency /dependencies2. 核心集成调用模型API环境齐了我们来搞定最核心的一步让SpringBoot服务能跟远处的模型服务对话。这里我给你两个主流选择RestTemplate和WebClient你可以根据项目风格来挑。2.1 使用RestTemplate进行同步调用RestTemplate是Spring的老牌选手用法直白适合传统的同步编程模型。首先我们得把它配置成一个Bean并设置一些超时时间防止网络抽风时线程被一直挂起。import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; Configuration public class RestTemplateConfig { Bean public RestTemplate restTemplate() { SimpleClientHttpRequestFactory factory new SimpleClientHttpRequestFactory(); // 设置连接超时时间单位毫秒 factory.setConnectTimeout(5000); // 设置读取超时时间图片生成可能较久这里设长一些 factory.setReadTimeout(60000); return new RestTemplate(factory); } }接下来创建一个服务类来封装调用逻辑。这里我们设计一个ImageGenerationRequest对象来承载请求参数比如提示词、图片尺寸等。import lombok.Data; import javax.validation.constraints.NotBlank; Data public class ImageGenerationRequest { NotBlank(message 提示词不能为空) private String prompt; private Integer width 512; private Integer height 512; // 其他模型参数如负向提示词、步数等 // private String negativePrompt; // private Integer steps; }然后是实现调用服务的ModelApiServiceimport org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ByteArrayResource; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.util.HashMap; import java.util.Map; Service public class ModelApiService { private final RestTemplate restTemplate; Value(${ai.model.api.base-url:http://localhost:8081}) private String modelApiBaseUrl; public ModelApiService(RestTemplate restTemplate) { this.restTemplate restTemplate; } /** * 同步调用模型API生成图片 * param request 生成请求 * return 图片的字节数组 */ public byte[] generateImageSync(ImageGenerationRequest request) { String url modelApiBaseUrl /api/generate; // 构建请求头 HttpHeaders headers new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 构建请求体根据你的模型API实际要求调整 MapString, Object body new HashMap(); body.put(prompt, request.getPrompt()); body.put(width, request.getWidth()); body.put(height, request.getHeight()); HttpEntityMapString, Object entity new HttpEntity(body, headers); // 发送请求并接收二进制图片数据 ResponseEntitybyte[] response restTemplate.exchange( url, HttpMethod.POST, entity, byte[].class ); if (response.getStatusCode() HttpStatus.OK response.getBody() ! null) { return response.getBody(); } else { throw new RuntimeException(模型API调用失败状态码: response.getStatusCode()); } } }这种方式简单直接但有个明显问题调用是阻塞的。如果模型生成一张图要10秒那么处理这个请求的线程就会被卡住10秒并发一高服务器线程池很快就会被耗光。所以对于生成任务我们更推荐异步处理。2.2 使用WebClient进行异步调用WebClient是Spring 5引入的响应式非阻塞HTTP客户端特别适合处理这种IO密集型的长时间任务。它不会阻塞线程资源利用率高得多。先配置一个WebClient的Beanimport org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.reactive.function.client.WebClient; Configuration public class WebClientConfig { Bean public WebClient modelApiWebClient() { return WebClient.builder() .baseUrl(http://localhost:8081) // 同样可以从配置读取 .build(); } }然后我们改造一下服务类增加一个异步调用的方法。这里返回一个Monobyte[]代表一个异步的、未来会产生的图片数据。import reactor.core.publisher.Mono; import org.springframework.web.reactive.function.client.WebClient; Service public class AsyncModelApiService { private final WebClient webClient; public AsyncModelApiService(WebClient modelApiWebClient) { this.webClient modelApiWebClient; } /** * 异步调用模型API生成图片 * param request 生成请求 * return 异步的图片字节数据 */ public Monobyte[] generateImageAsync(ImageGenerationRequest request) { return webClient.post() .uri(/api/generate) .contentType(MediaType.APPLICATION_JSON) .bodyValue(request) // 可以直接传对象WebClient会序列化 .retrieve() .bodyToMono(byte[].class) .timeout(Duration.ofSeconds(90)) // 设置超时 .onErrorResume(e - { // 这里可以处理错误比如记录日志返回一个错误图片或默认值 return Mono.error(new RuntimeException(异步调用模型API失败, e)); }); } }用WebClient你的主线程在发出请求后立刻就释放了可以去处理别的请求。等模型服务处理完响应回来时再由响应式框架的线程池来处理后续逻辑。这对于微服务架构来说在资源利用和系统吞吐量上是巨大的优势。3. 设计异步任务与缓存机制直接让用户在前端等几十秒是不现实的。更合理的流程是用户提交请求后端立刻返回一个“任务ID”然后异步去处理。用户可以用这个ID轮询结果或者我们通过WebSocket等推送结果。这里我们实现一个基于“任务ID查询”的轮询方案并用Redis来缓存任务结果。3.1 生成任务管理与Redis集成首先在application.yml里配置Redis连接。spring: data: redis: host: localhost port: 6379 # password: yourpassword # 如果有密码 database: 0 timeout: 2000ms然后我们创建一个任务服务。它的职责是创建任务、将任务丢进线程池执行、把执行结果图片数据或错误信息存到Redis并提供根据任务ID查询结果的方法。import org.springframework.data.redis.core.RedisTemplate; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.UUID; import java.util.concurrent.TimeUnit; Service public class ImageGenerationTaskService { private final AsyncModelApiService modelApiService; private final RedisTemplateString, Object redisTemplate; // 假设你配置了一个专门用于执行长任务的线程池 // private final TaskExecutor taskExecutor; // 使用Redis Key的前缀 private static final String TASK_RESULT_KEY_PREFIX task:result:; // 任务结果在Redis中保存的时间例如1小时 private static final long TASK_RESULT_TTL 3600; public ImageGenerationTaskService(AsyncModelApiService modelApiService, RedisTemplateString, Object redisTemplate) { this.modelApiService modelApiService; this.redisTemplate redisTemplate; } /** * 提交一个图片生成任务 * param request 生成请求 * return 任务ID */ public String submitTask(ImageGenerationRequest request) { String taskId UUID.randomUUID().toString(); // 先将任务状态初始化为“处理中”也可以存到Redis redisTemplate.opsForValue().set(TASK_RESULT_KEY_PREFIX taskId, PROCESSING, 10, TimeUnit.MINUTES); // 使用Async异步执行任务或者使用自定义的TaskExecutor executeGenerationTask(taskId, request); return taskId; } Async // 需要启用EnableAsync public void executeGenerationTask(String taskId, ImageGenerationRequest request) { try { // 异步调用模型API byte[] imageData modelApiService.generateImageAsync(request).block(); // 这里block等待结果因为已在异步线程中 // 将成功结果存入Redis TaskResult successResult new TaskResult(SUCCESS, imageData, null); redisTemplate.opsForValue().set( TASK_RESULT_KEY_PREFIX taskId, successResult, TASK_RESULT_TTL, TimeUnit.SECONDS ); } catch (Exception e) { // 将失败结果存入Redis TaskResult errorResult new TaskResult(FAILED, null, e.getMessage()); redisTemplate.opsForValue().set( TASK_RESULT_KEY_PREFIX taskId, errorResult, TASK_RESULT_TTL, TimeUnit.SECONDS ); } } /** * 根据任务ID查询结果 * param taskId 任务ID * return 任务结果如果不存在或仍在处理中则返回null或特定状态 */ public TaskResult getTaskResult(String taskId) { Object result redisTemplate.opsForValue().get(TASK_RESULT_KEY_PREFIX taskId); if (result instanceof String PROCESSING.equals(result)) { return new TaskResult(PROCESSING, null, null); } return (TaskResult) result; } // 任务结果内部类 Data public static class TaskResult { private String status; // PROCESSING, SUCCESS, FAILED private byte[] imageData; private String errorMessage; // 省略构造方法和getter/setter } }3.2 对外暴露API有了任务服务我们就可以设计对外的REST API了。一个提交任务的端点一个查询任务结果的端点。import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; RestController RequestMapping(/api/v1/image) public class ImageGenerationController { private final ImageGenerationTaskService taskService; public ImageGenerationController(ImageGenerationTaskService taskService) { this.taskService taskService; } PostMapping(/generate) public ResponseEntityGenerateResponse generateImage(Valid RequestBody ImageGenerationRequest request) { String taskId taskService.submitTask(request); GenerateResponse response new GenerateResponse(); response.setTaskId(taskId); response.setMessage(任务已提交请使用taskId查询结果); return ResponseEntity.accepted().body(response); // 202 Accepted 表示请求已接受处理 } GetMapping(/result/{taskId}) public ResponseEntity? getGenerateResult(PathVariable String taskId) { ImageGenerationTaskService.TaskResult result taskService.getTaskResult(taskId); if (result null) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body(任务ID不存在或已过期); } switch (result.getStatus()) { case PROCESSING: return ResponseEntity.status(HttpStatus.ACCEPTED).body(new ResultResponse(PROCESSING, 任务正在处理中, null)); case SUCCESS: // 返回图片数据 return ResponseEntity.ok() .contentType(MediaType.IMAGE_PNG) // 根据实际格式调整 .body(result.getImageData()); case FAILED: return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body(new ResultResponse(FAILED, 任务处理失败, result.getErrorMessage())); default: return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(未知的任务状态); } } // 内部使用的响应DTO Data public static class GenerateResponse { private String taskId; private String message; } Data public static class ResultResponse { private String status; private String message; private String detail; // 省略构造方法 } }这样前端调用/api/v1/image/generate后会立刻拿到一个taskId。然后它可以每隔几秒调用/api/v1/image/result/{taskId}来查询进度直到返回成功拿到图片或失败。4. 提升工程化水平文档与测试代码写完了怎么让别人知道怎么用怎么保证以后改了代码不会出问题接下来就是提升工程化水平的环节。4.1 集成Swagger生成API文档我们之前引入了springdoc-openapi现在只需要简单配置就能自动生成文档。在application.yml里加一点配置springdoc: api-docs: path: /api-docs swagger-ui: path: /swagger-ui.html operations-sorter: method然后在Controller和DTO上添加一些注解让文档更清晰RestController RequestMapping(/api/v1/image) Tag(name AI图片生成, description 基于Z-Image-GGUF模型的图片生成接口) // Swagger标签 public class ImageGenerationController { Operation(summary 提交图片生成任务) // 接口描述 ApiResponses(value { ApiResponse(responseCode 202, description 任务已接受), ApiResponse(responseCode 400, description 请求参数错误) }) PostMapping(/generate) public ResponseEntityGenerateResponse generateImage(Valid RequestBody ImageGenerationRequest request) { // ... 实现 } Operation(summary 查询任务生成结果) GetMapping(/result/{taskId}) public ResponseEntity? getGenerateResult( Parameter(description 任务ID, required true) PathVariable String taskId) { // 参数描述 // ... 实现 } }启动应用访问http://localhost:8080/swagger-ui.html假设你的应用端口是8080就能看到一个交互式的API文档页面可以直接在上面测试接口非常方便。4.2 编写单元测试与集成测试测试是保证服务可靠性的安全带。我们至少要为关键的服务类写点测试。对于ModelApiService我们可以用Mockito来模拟RestTemplate的行为避免真的去调用外部服务。import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.when; ExtendWith(MockitoExtension.class) class ModelApiServiceTest { Mock private RestTemplate restTemplate; InjectMocks private ModelApiService modelApiService; Test void generateImageSync_Success() { // 准备模拟数据 ImageGenerationRequest request new ImageGenerationRequest(); request.setPrompt(a cat); byte[] mockImageData new byte[]{1, 2, 3}; ResponseEntitybyte[] mockResponse new ResponseEntity(mockImageData, HttpStatus.OK); // 定义Mock行为 when(restTemplate.exchange( anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(byte[].class) )).thenReturn(mockResponse); // 执行测试 byte[] result modelApiService.generateImageSync(request); // 验证结果 assertNotNull(result); assertArrayEquals(mockImageData, result); } Test void generateImageSync_Failure() { ImageGenerationRequest request new ImageGenerationRequest(); request.setPrompt(a cat); ResponseEntitybyte[] mockResponse new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR); when(restTemplate.exchange( anyString(), eq(HttpMethod.POST), any(HttpEntity.class), eq(byte[].class) )).thenReturn(mockResponse); // 验证是否抛出了预期的异常 assertThrows(RuntimeException.class, () - modelApiService.generateImageSync(request)); } }对于Controller可以用WebMvcTest进行切片测试只加载Web层相关的Bean。import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import com.fasterxml.jackson.databind.ObjectMapper; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; WebMvcTest(ImageGenerationController.class) class ImageGenerationControllerTest { Autowired private MockMvc mockMvc; Autowired private ObjectMapper objectMapper; MockBean private ImageGenerationTaskService taskService; Test void generateImage_ValidRequest_ReturnsAccepted() throws Exception { ImageGenerationRequest request new ImageGenerationRequest(); request.setPrompt(a beautiful landscape); String taskId test-task-123; when(taskService.submitTask(any(ImageGenerationRequest.class))).thenReturn(taskId); mockMvc.perform(post(/api/v1/image/generate) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(request))) .andExpect(status().isAccepted()) // 期望202状态码 .andExpect(jsonPath($.taskId).value(taskId)); } }把这些测试跑通以后重构代码时心里就踏实多了。5. 总结走完这一套流程一个具备基本生产可用性的AI绘画服务后端就搭起来了。回顾一下关键点通过HTTP客户端RestTemplate或WebClient与模型服务解耦是Java集成Python模型最务实的方式引入异步任务和Redis缓存把可能长达数十秒的同步等待转化为异步处理是保证服务响应性和吞吐量的核心而Swagger文档和单元测试则是让项目可持续、可协作的工程化保障。在实际项目中你可能还需要考虑更多比如给任务队列加上更健壮的管理比如用RabbitMQ或Kafka、对生成请求做限流和降级、监控模型服务的健康状态、以及图片结果的持久化存储如OSS等。但这个基于SpringBoot的骨架已经为你处理了最棘手的集成和异步化问题你可以在这个基础上根据业务的实际压力和复杂度一步步添砖加瓦。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2467525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…