深入解析Kubernetes中的探针(Probe):Liveness、Readiness与Startup探针实战指南

news2026/4/3 10:13:04
引言为什么Kubernetes需要探针在Kubernetes集群中我们常常会遇到这样的场景应用进程还在运行但内部已陷入死锁无法处理请求。容器启动了但依赖的数据库尚未连接成功此时不应接收流量。某些Java应用启动缓慢需要数分钟才能就绪但kubelet默认认为容器“已启动”。如果Kubernetes仅依赖容器进程是否存活来判断应用状态上述问题将导致服务不可用、流量错误转发或频繁重启严重影响系统稳定性。探针Probe正是Kubernetes为解决这类“健康状态误判”问题而设计的核心机制。它通过主动探测应用的实际运行状态实现更精准的生命周期管理。本文将从原理到实践深入剖析Kubernetes的三大探针——Liveness、Readiness和Startup探针结合真实场景、配置示例与最佳实践助你构建真正高可用的云原生应用。一、探针的本质Kubelet的“体检医生”1.1 什么是探针探针是由节点上的kubelet对容器周期性执行的诊断。kubelet通过调用容器中实现的Handler来执行检查。本质上探针是Kubernetes与应用程序之间的“健康状态沟通协议”。1.2 四大探测机制Kubernetes支持以下四种探测机制可根据应用类型灵活选择1exec——命令探测在容器内执行指定命令如果命令退出时返回码为0则认为诊断成功。适用于需要通过执行脚本或检查特定文件来判断健康状态的场景。yamllivenessProbe: exec: command: - cat - /tmp/healthy2httpGet——HTTP请求探测向容器的IP地址及指定端口和路径发送HTTP GET请求如果响应状态码在200-399之间则诊断成功。这是Web服务最常用的探测方式。yamllivenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome3tcpSocket——TCP端口探测对容器的指定端口进行TCP连接检查如果端口打开则诊断成功。适用于非HTTP协议的TCP服务如数据库、消息队列等。yamllivenessProbe: tcpSocket: port: 80804gRPC探测对容器暴露的gRPC服务执行健康检查如果服务的状态是SERVING则诊断成功。该功能在Kubernetes v1.24进入Betav1.27稳定对基于gRPC的现代微服务架构特别有用。yamllivenessProbe: grpc: port: 90001.3 通用配置参数所有类型的探针都共享一组核心配置参数正确理解这些参数是配置探针的基础参数作用说明默认值生产推荐值注意事项initialDelaySeconds容器启动后延迟多久开始第一次探测秒0按服务启动时间定Java:30-60sNginx:5s太短会导致“启动中误判失败”太长会延长故障发现时间periodSeconds探测的时间间隔秒1010-15s太短浪费CPU资源太长延迟故障响应timeoutSeconds单次探测的超时时间秒11-3s必须小于periodSeconds否则探测会排队累积successThreshold探测失败后需要连续成功多少次才视为恢复11对于liveness和startup探针必须为1failureThreshold探测成功后连续失败多少次才确认故障33太高延迟故障处理太低易因网络抖动误判此外Pod级别的terminationGracePeriodSeconds默认30秒定义了容器被终止时的优雅关闭时间应给应用预留足够的时间完成连接关闭和数据保存。二、Liveness Probe存活探针应用的“心跳监护仪”2.1 核心定位存活探针决定何时重启容器。例如当应用在运行但无法取得进展时存活探针可以捕获这类死锁。一句话定义Liveness探针用于判断容器是否处于正常运行状态若失败kubelet将根据Pod的重启策略restartPolicy来决定是否重启该容器。2.2 设计哲学存活探针关注的是不可恢复的应用故障。它解决的是“进程还在但服务已死”的僵尸问题——应用进程依然存在但已无法正常响应请求例如死锁、死循环、内存泄漏导致无响应等。⚠️不适合使用存活探针的场景数据库不可用等外部依赖短暂异常应使用就绪探针处理应用启动过程中的正常延迟应使用启动探针处理任何可以通过重试或等待自行恢复的临时故障2.3 工作机制存活探针不会等待就绪探针成功。如果你希望在执行存活探针前等待一段时间可以通过定义initialDelaySeconds或使用启动探针来实现。当存活探针失败达到failureThreshold次时kubelet会杀死容器然后根据Pod的重启策略决定后续操作。在容器被终止前Kubernetes会先发送TERM信号让应用优雅退出。2.4 完整配置示例示例一HTTP探针适用于Web服务yamlapiVersion: v1 kind: Pod metadata: name: liveness-http spec: containers: - name: app image: myapp:v1.2 livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 30 # 等待30秒后再探测 periodSeconds: 10 # 每10秒探测一次 timeoutSeconds: 5 # 超时5秒 failureThreshold: 3 # 连续3次失败才重启 successThreshold: 1 # 1次成功即认为恢复⚠️关键设计原则/healthz端点应返回200 OK且不依赖外部服务数据库、缓存等因为外部故障不应导致容器被重启。示例二TCP探针适用于数据库、消息队列等yamllivenessProbe: tcpSocket: port: 3306 initialDelaySeconds: 20 periodSeconds: 10 timeoutSeconds: 2 failureThreshold: 3示例三Exec探针适用于需要执行命令检查的场景yamllivenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 12.5 实践案例Spring Boot Liveness配置Spring Boot通过Actuator模块原生支持Kubernetes探针。以下是Liveness探针的Spring Boot实现javaComponent public class LivenessHealthIndicator implements HealthIndicator { Override public Health health() { if (threadPoolAlive() mainLoopAlive()) { return Health.up().build(); } return Health.down().build(); } }对应的Kubernetes配置yamllivenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 2 failureThreshold: 32.6 存活探针的常见模式官方推荐的最佳实践是为存活探针使用与就绪探针相同的低成本HTTP端点但设置更高的failureThreshold。这样可以确保Pod在被强制终止之前有一段时间会被观察到处于NotReady状态。三、Readiness Probe就绪探针流量的“闸门控制器”3.1 核心定位就绪探针决定容器何时准备好接受流量。这种探针在等待应用执行耗时的初始任务时非常有用例如建立网络连接、加载文件和预热缓存。一句话定义Readiness探针判断Pod是否“就绪”接收流量。失败时从Service Endpoints中移除成功时重新加入负载均衡但不会重启容器。3.2 设计哲学就绪探针关注的是应用是否能够正确处理请求。它解决的是“容器已启动但应用未就绪”的问题——应用可能还在初始化、依赖尚未建立、或者处于临时过载状态。与存活探针的根本区别在于存活探针失败 → 重启容器处理不可恢复故障就绪探针失败 → 切走流量等待应用恢复3.3 工作机制就绪探针在容器的整个生命周期中持续运行。如果就绪探针返回失败状态Kubernetes会将该Pod从所有匹配的Service端点中移除。就绪探针在滚动更新和优雅下线场景中发挥着关键作用——新版本的容器只有在通过就绪探针验证后才会开始接收流量从而确保服务的平滑过渡。3.4 典型使用场景场景说明应用启动初始化Spring Boot加载Bean、连接池初始化等依赖服务不可用数据库、Redis、MQ等依赖暂时不可达服务过载/限流主动拒绝流量触发熔断降级优雅下线配合preStop钩子先切走流量再关闭服务3.5 完整配置示例yamlapiVersion: v1 kind: Pod metadata: name: readiness-http spec: containers: - name: app image: myapp:v1.2 readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 10 # 给予10秒启动缓冲 periodSeconds: 5 # 每5秒检查一次比存活探针更频繁 timeoutSeconds: 2 failureThreshold: 3 # 连续3次失败才切走流量 successThreshold: 13.6 实践案例Spring Boot Readiness配置javaComponent public class ReadinessHealthIndicator implements HealthIndicator { Override public Health health() { if (dbAvailable() cacheAvailable()) { return Health.up().build(); } return Health.down() .withDetail(reason, dependency unavailable) .build(); } }对应的Kubernetes配置yamlreadinessProbe: httpGet: path: /actuator/health/readiness port: 8080 initialDelaySeconds: 10 periodSeconds: 5 timeoutSeconds: 2 failureThreshold: 33.7 关键注意事项就绪探针的检查逻辑应包含对应用正常运行所必需的核心依赖的判断但不应包含所有外部服务。过度复杂的就绪探针可能导致Pod频繁被切出负载均衡池造成不必要的流量抖动。四、Startup Probe启动探针慢启动应用的“护身符”4.1 核心定位启动探针检查容器内的应用是否已启动。启动探针可以用于对慢启动容器进行存活性检测避免它们在启动运行之前就被kubelet杀掉。一句话定义Startup探针用于检测容器内的应用是否已经成功启动并完成初始化任务在它成功之前会禁用存活探针和就绪探针确保这些探针不会干扰应用程序启动。4.2 为什么需要启动探针在Kubernetes 1.16之前处理慢启动应用通常只能靠增大initialDelaySeconds但这会带来一个问题对于正常情况下启动很快、但偶尔需要更长时间的场景固定延迟无法适配。启动探针的引入完美解决了这个问题启动探针仅在容器启动时执行不像存活探针和就绪探针那样周期性运行启动探针失败时容器会被重启但在此期间存活探针不会干扰一旦启动探针成功存活探针和就绪探针才开始正常工作4.3 工作机制当配置了启动探针时kubelet会先执行启动探针此时存活探针和就绪探针均被禁用。只有当启动探针成功返回后存活探针和就绪探针才会开始执行。启动探针可以配置较短的periodSeconds和较大的failureThreshold以允许足够长的总启动时间。例如设置periodSeconds: 5和failureThreshold: 30总启动时间可达150秒。4.4 典型使用场景1Java/Spring Boot应用Java应用的启动过程通常涉及类加载、Bean初始化、连接池建立等耗时操作初次启动可能需要30-120秒。使用启动探针可以有效避免启动期间的误杀。2AI/机器学习服务模型加载可能需要数分钟启动探针给予足够的时间完成初始化。3大数据组件复杂的初始化序列需要较长时间启动探针可以延缓其他探针生效避免在应用未完全启动时被误判为不健康。4.5 完整配置示例示例一为Java应用配置启动探针yamlapiVersion: v1 kind: Pod metadata: name: slow-start-app spec: containers: - name: java-app image: my-java-app:latest startupProbe: httpGet: path: /healthz port: 8080 failureThreshold: 30 # 允许30次失败 periodSeconds: 5 # 每5秒探测一次 timeoutSeconds: 2 initialDelaySeconds: 0 # 启动后立即开始 livenessProbe: httpGet: path: /healthz port: 8080 initialDelaySeconds: 0 # 等待startupProbe成功 periodSeconds: 10 failureThreshold: 3在上述配置中启动探针允许总启动时间达到30 × 5 150秒。应用在启动期间即使没有响应也不会被存活探针杀死。一旦启动探针成功存活探针和就绪探针才接管后续的健康检查。示例二基于文件的启动探针yamlstartupProbe: exec: command: - cat - /var/run/app-ready initialDelaySeconds: 5 periodSeconds: 5 failureThreshold: 60 # 允许最多5分钟的启动时间4.6 启动探针 vs initialDelaySeconds维度initialDelaySecondsstartupProbe适应性固定延迟无法适应不同启动时间动态适应启动完成即切换对异常启动的处理无法感知启动过程是否失败启动失败会重启容器配置复杂度简单稍复杂推荐场景启动时间固定的轻量应用启动时间波动大或启动时间长的应用五、三大探针的协作机制与完整实战5.1 协作流程三大探针协作形成应用全生命周期的健康管控体系流程详解阶段一启动阶段容器创建后如果配置了启动探针仅启动探针运行。存活探针和就绪探针被禁用不会干扰应用启动。阶段二就绪等待阶段启动探针成功后存活探针和就绪探针开始运行。在就绪探针成功之前Pod不会被加入Service的后端列表不会接收任何流量。阶段三正常运行阶段就绪探针持续监控应用是否能够处理请求。如果失败Pod被切出流量恢复后自动重新加入。阶段四故障恢复阶段如果存活探针检测到不可恢复的故障容器被重启重新进入阶段一。5.2 完整实战案例微服务应用的健康检查配置以下是一个包含三大探针完整配置的Spring Boot微服务示例yamlapiVersion: apps/v1 kind: Deployment metadata: name: spring-boot-app spec: replicas: 3 selector: matchLabels: app: spring-boot-app template: metadata: labels: app: spring-boot-app spec: containers: - name: app image: myregistry/spring-boot-app:1.0.0 ports: - containerPort: 8080 env: - name: SPRING_PROFILES_ACTIVE value: prod # 启动探针处理慢启动 startupProbe: httpGet: path: /actuator/health/startup port: 8080 failureThreshold: 30 periodSeconds: 10 timeoutSeconds: 5 # 就绪探针控制流量准入 readinessProbe: httpGet: path: /actuator/health/readiness port: 8080 initialDelaySeconds: 0 periodSeconds: 5 timeoutSeconds: 2 failureThreshold: 3 # 存活探针检测不可恢复故障 livenessProbe: httpGet: path: /actuator/health/liveness port: 8080 initialDelaySeconds: 0 periodSeconds: 15 timeoutSeconds: 2 failureThreshold: 3 # 优雅终止时间 terminationGracePeriodSeconds: 305.3 参数调优指南根据应用类型推荐的生产级配置应用类型startupProbe配置readinessProbe配置livenessProbe配置轻量级Web服务Go/Node.js可选10-20s总时间periodSeconds:5, failure:3periodSeconds:10, failure:3Java/Spring Bootfailure:30, period:5periodSeconds:5, failure:3periodSeconds:15, failure:3大数据/ML服务failure:60, period:10periodSeconds:10, failure:3periodSeconds:20, failure:3数据库/中间件可选periodSeconds:10, failure:2periodSeconds:10, failure:35.4 Spring Boot Actuator与Kubernetes探针的集成Spring Boot 2.3通过Actuator模块提供了对Kubernetes探针的原生支持自动暴露以下端点探针类型Spring Boot端点说明Liveness/actuator/health/liveness检查应用内部状态如线程池、主循环等Readiness/actuator/health/readiness检查应用是否就绪接收流量包含依赖检查Startup/actuator/health/startup检查应用是否完成初始化通过在application.yml中配置即可启用yamlmanagement: endpoints: web: exposure: include: health endpoint: health: probes: enabled: true liveness-state: enabled: true readiness-state: enabled: true health: livenessstate: enabled: true readinessstate: enabled: true六、探针配置的最佳实践与常见错误6.1 最佳实践清单✅ 核心原则区分职责Readiness管流量Liveness管生死Startup管启动保护。三者职责分明不可混淆。存活探针不应依赖外部服务存活探针的检查逻辑应尽可能简单不应依赖数据库、缓存等外部系统。如果探针因外部依赖故障而失败会导致健康的容器被不断重启引发级联故障。使用启动探针替代过大的initialDelaySeconds对于启动时间波动大的应用使用启动探针可以实现自适应延迟避免固定延迟配置导致的误判。为所有生产容器配置探针如果未配置存活探针kubelet会默认其总是返回Success如果未配置就绪探针kubelet会假定容器启动后立即就绪。这两种情况都可能导致严重的服务不可用问题。✅ 配置层面合理设置failureThreshold过小的阈值易因网络抖动导致误判过大的阈值会延迟故障响应。3是默认值也是多数场景下的推荐值。timeoutSeconds必须小于periodSeconds否则探测任务会排队累积影响准确性。使用相同的HTTP端点但不同的failureThreshold存活探针和就绪探针可以使用相同的健康检查端点但存活探针设置更高的failureThreshold确保Pod在被终止前先被切出流量一段时间。配置terminationGracePeriodSeconds给应用足够的优雅关闭时间30-60秒确保在容器被终止前能够完成连接关闭和事务提交。✅ 监控与运维结合可观测性数据仅靠探针日志可能只记录“容器重启”这一结果。结合Prometheus指标、日志和调用链可以追溯探针失败的根本原因。定期审查探针配置随着应用演进启动时间和资源需求会发生变化定期审查探针参数可以避免配置过时导致的问题。6.2 常见错误与陷阱❌ 错误一Liveness和Readiness混用/误用这是最常见的错误。例如将数据库依赖检查放在Liveness探针中 → 数据库抖动导致容器被反复重启将Liveness探针失败阈值设置过低 → 临时性故障触发不必要的重启❌ 错误二存活探针实现错误导致级联故障错误的存活探针实现可能导致容器在高负载下被反复重启应用可伸缩性降低导致客户端请求失败部分Pod失败后剩余Pod工作负载增加引发雪崩效应❌ 错误三忽视启动探针导致慢启动应用被误杀对于启动时间较长的Java应用如果仅配置了存活探针而没有启动探针应用可能在启动过程中因存活探针失败而被反复重启陷入CrashLoopBackOff状态。❌ 错误四initialDelaySeconds设置不当设置过小应用尚未启动就被探测触发不必要的重启设置过大故障发现延迟影响可用性❌ 错误五探针检查逻辑过于重量级在探针中包含数据库查询、远程调用等耗时操作会导致探测本身成为性能瓶颈。探针应保持轻量级仅做必要的健康检查。七、故障诊断与排错指南7.1 常用诊断命令当探针出现问题时以下命令可以帮助快速定位bash# 1. 查看Pod详细事件 kubectl describe pod pod-name # 2. 查看容器日志 kubectl logs pod-name -c container-name # 3. 查看前一个容器实例的日志容器重启后 kubectl logs pod-name --previous # 4. 查看集群事件 kubectl get events --sort-by.lastTimestamp # 5. 查看Pod状态变化 kubectl get pod pod-name -w # 6. 检查Service端点 kubectl get endpoints service-name7.2 常见问题排查思路问题一Pod频繁重启CrashLoopBackOff可能原因及排查步骤检查存活探针配置查看是否因为存活探针失败导致重启bashkubectl describe pod pod-name | grep -A5 Liveness重点关注Unhealthy事件和探测失败次数。检查启动探针配置对于慢启动应用确认是否配置了启动探针。查看容器退出码kubectl get pod pod-name -o yaml | grep -i exitCode分析资源限制检查是否因内存不足OOMKilled导致重启。问题二Pod状态Running但无法接收流量可能原因就绪探针失败检查就绪探针的配置和返回值bashkubectl get pod pod-name -o jsonpath{.status.conditions[?(.typeReady)].status}就绪探针依赖的外部服务不可用查看应用的日志中是否有依赖连接失败的记录。就绪探针路径或端口配置错误手动进入容器测试健康检查端点是否可达。问题三启动探针一直失败可能原因及解决方案failureThreshold × periodSeconds 实际启动时间增大failureThreshold或periodSeconds以延长总允许启动时间。健康检查端点未在启动期间可用确保应用在启动的早期阶段就暴露一个基础的启动健康检查端点即使主要业务逻辑尚未完全就绪。资源不足导致启动缓慢检查Pod的CPU/内存限制是否过低。7.3 调试技巧技巧一临时修改探针配置进行调试使用kubectl edit deployment deployment-name临时禁用探针或调大阈值确认问题是由探针还是应用本身引起。技巧二手动模拟探测请求bash# HTTP探针模拟 kubectl exec -it pod-name -- wget -qO- http://localhost:8080/healthz # TCP探针模拟 kubectl exec -it pod-name -- nc -zv localhost 8080 # Exec探针模拟 kubectl exec -it pod-name -- cat /tmp/healthy技巧三使用临时Pod进行配置测试创建一个临时的测试Pod在安全环境中验证探针配置的正确性后再应用到生产环境。技巧四启用更详细的kubelet日志在节点上调整kubelet的日志级别可以获得更详细的探针执行信息需要节点访问权限。八、结语Kubernetes的三大探针——Liveness、Readiness和Startup共同构成了应用健康检查的完整体系。三者各司其职、协同配合实现了从容器启动到稳定运行的全程守护。Liveness探针是应用的“心跳监护仪”负责在应用陷入不可恢复的故障时重启容器保障服务的自愈能力。Readiness探针是流量的“闸门控制器”负责控制流量的准入和切出确保只有就绪的实例才接收请求。Startup探针是慢启动应用的“护身符”负责为启动缓慢的应用提供保护期防止启动过程中的误杀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2478495.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…