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

Eureka 深度解析:从原理到部署的全场景实践

一、Eureka 核心原理与架构设计

1. 核心定位与组件模型

Eureka 是 Netflix 开源的服务发现(Service Discovery)组件,作为 Spring Cloud 微服务体系的核心基础设施,其核心目标是解决分布式系统中服务实例动态管理跨服务通信解耦问题。架构包含两大核心组件:

组件角色定义关键职责
Eureka Server服务注册中心(单节点或集群)接收服务实例注册、维护内存注册表、提供服务发现接口、执行健康检查与实例剔除
Eureka Client微服务实例(包含服务提供者 Provider 和服务消费者 Consumer向 Server 注册自身实例、定期发送心跳续约、从 Server 拉取并缓存服务注册表

2. 工作流程:从注册到发现的完整链路

Eureka 的核心流程可分为 服务注册 → 心跳续约 → 服务剔除 → 服务发现 四个阶段,底层通过 REST API 实现高效交互(参考 Eureka REST 操作文档)。

① 服务注册(Registration)
  • 触发条件:Eureka Client(如商品服务 product-service)启动时。
  • 底层动作
    1. Client 读取自身元数据(IP、端口、应用名、状态页地址等),封装为 InstanceInfo 对象;
    2. 向 Eureka Server 发送 POST /eureka/apps/{appName} 请求(REST API);
    3. Server 将 InstanceInfo 存储在内存的 ConcurrentHashMap(注册表)中,键为应用名(如 product-service),值为实例列表。
② 心跳续约(Renew)
  • 触发频率:默认每 30 秒(可通过 eureka.instance.lease-renewal-interval-in-seconds 配置)。
  • 底层逻辑
    1. Client 向 Server 发送 PUT /eureka/apps/{appName}/{instanceId} 请求;
    2. Server 更新该实例的最后心跳时间(lastRenewalTimestamp),标记实例为 “UP” 状态;
    3. 若 Server 在 90 秒(默认,eureka.instance.lease-expiration-duration-in-seconds)内未收到心跳,判定实例失效。
③ 服务剔除(Eviction)
  • 触发场景:实例连续 3 次心跳超时(90 秒)或主动注销(如服务正常关闭)。
  • 底层动作
    1. Server 从注册表中移除失效实例;
    2. 向集群内其他 Eureka Server 广播实例剔除事件(高可用场景);
    3. 客户端缓存的注册表(默认每 30 秒刷新一次)同步移除该实例。
④ 服务发现(Discovery)
  • 触发场景:服务消费者(如订单服务 order-service)需要调用服务提供者。
  • 底层逻辑
    1. Consumer 启动时拉取完整注册表(GET /eureka/apps),并缓存到本地;
    2. 后续每 30 秒(默认,eureka.client.registry-fetch-interval-seconds)增量更新注册表;
    3. 调用时从本地缓存中选择可用实例(支持轮询、随机等负载均衡策略)。

3. 底层关键设计:高可用与容错机制

① 自我保护机制(Self-Preservation)
  • 触发条件:当 Server 检测到 15 分钟内心跳失败率超过 85%(通常由网络分区或大规模实例宕机导致)。
  • 行为逻辑(参考 Eureka 自我保护文档):
    • 停止剔除任何实例(即使超时);
    • 管理页面显示警告:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT
    • 网络恢复后自动退出保护模式(需心跳恢复正常)。
② 集群复制(Peer Replication)
  • 架构模式:Eureka Server 集群采用 对等复制(无主从),每个节点既是服务端也是客户端。
  • 同步逻辑
    1. 当一个 Server 收到注册 / 剔除请求时,会向集群内其他 Server 广播该事件(POST /eureka/peers);
    2. 最终所有 Server 的注册表保持一致(最终一致性);
    3. 通信超时或节点故障时,自动重试(默认重试 3 次)。
③ 内存存储与持久化
  • 存储结构:注册表存储在 ConcurrentHashMap<String, Application> 中(键为应用名,值为 Application 对象,包含实例列表);
  • 持久化:默认仅内存存储(保证高性能),可通过 eureka.server.persistence.enabled=true 开启磁盘持久化(生产环境不推荐,因内存读写更快)。

二、Eureka 的核心作用与典型场景

1. 核心作用

  • 服务动态管理:自动感知实例上下线,解决传统静态配置(如 hosts 文件)无法应对弹性扩缩容的问题;
  • 跨服务通信解耦:消费者无需知道提供者的具体 IP / 端口,通过应用名即可调用;
  • 故障隔离:通过心跳机制快速剔除不可用实例,避免调用失败;
  • 高可用支撑:集群模式下,单节点故障不影响整体服务发现能力。

2. 典型使用场景

  • 电商微服务架构:商品服务、订单服务、支付服务等动态扩缩容时,Eureka 自动维护实例列表;
  • 社交平台实时服务:消息推送服务、用户状态服务需要快速感知实例健康状态;
  • 云原生弹性部署:与 K8s 配合,实现容器化服务的自动注册与发现(需通过 spring-cloud-kubernetes 适配);
  • 混合云场景:本地数据中心与公有云服务实例通过 Eureka 统一管理(需配置跨网络通信)。

三、Eureka 服务状态页地址自定义实践

1. 问题背景与默认行为

Eureka 管理页面中,点击服务名称会跳转至 状态页地址(Status Page URL),默认指向服务的 /actuator/info 端点(返回空 JSON {})。实际业务中,可能需要自定义此地址(如指向业务健康检查接口 /custom-status)。

2. 自定义实现方案(基于 Spring Cloud)

方案一:直接配置 eureka.instance.statusPageUrl(简单场景)

通过 application.yml 直接覆盖默认地址,适用于固定路径的场景:

yaml

eureka:  instance:  statusPageUrl: http://${eureka.instance.hostname}:${server.port}/custom-status  # 自定义地址  

验证:启动服务后,Eureka 管理页面跳转至 /custom-status,返回业务定义的状态信息(如 {"status": "UP"})。

方案二:通过 BeanPostProcessor 动态修改(复杂场景)

通过 Spring 的 BeanPostProcessor 拦截 ApplicationInfoManager,动态计算状态页地址(如根据环境变量调整):

java

import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;  
import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.beans.BeansException;  
import org.springframework.beans.factory.config.BeanPostProcessor;  
import com.netflix.appinfo.ApplicationInfoManager;  
import com.netflix.appinfo.InstanceInfo;  @Configuration  
public class EurekaStatusUrlConfig {  @Bean  public BeanPostProcessor eurekaInstancePostProcessor(EurekaInstanceConfigBean eurekaConfig) {  return new BeanPostProcessor() {  @Override  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {  if (bean instanceof ApplicationInfoManager) {  ApplicationInfoManager applicationInfoManager = (ApplicationInfoManager) bean;  InstanceInfo instanceInfo = applicationInfoManager.getInfo();  // 动态计算地址(示例:添加环境标识)  String host = eurekaConfig.getHostname();  int port = eurekaConfig.getNonSecurePort();  String customStatusUrl = String.format("http://%s:%d/custom-status?env=%s", host, port, "prod");  // 构建新的 InstanceInfo  InstanceInfo newInstanceInfo = new InstanceInfo.Builder(instanceInfo)  .setStatusPageUrl(customStatusUrl)  .build();  applicationInfoManager.setInstanceInfo(newInstanceInfo);  }  return bean;  }  };  }  
}  

关键说明

  • EurekaInstanceConfigBean 用于获取服务的主机名和端口;
  • InstanceInfo.Builder 覆盖默认的 statusPageUrl
  • 需确保修改在 ApplicationInfoManager 初始化后执行(通过 postProcessAfterInitialization)。
方案三:使用 ManagementMetadataProvider(Spring Cloud 2022+)

Spring Cloud 2022.x 及以上版本提供 ManagementMetadataProvider 接口,可更灵活地管理状态页地址:

java

import org.springframework.cloud.netflix.eureka.metadata.ManagementMetadata;  
import org.springframework.cloud.netflix.eureka.metadata.ManagementMetadataProvider;  
import org.springframework.stereotype.Component;  @Component  
public class CustomManagementMetadataProvider implements ManagementMetadataProvider {  @Override  public ManagementMetadata get(ManagementMetadata metadata) {  // 保留健康检查地址(/actuator/health),仅修改状态页地址  return new ManagementMetadata(  metadata.getHealthCheckUrl(),  // 保留默认健康检查地址  "http://${eureka.instance.hostname}:${server.port}/custom-status"  // 自定义状态页地址  );  }  
}  

四、Eureka 高可用部署实践

1. 集群配置核心原则

Eureka Server 集群需满足 对等复制(无主从)和 相互注册 两个核心原则,确保任一节点故障时,其他节点仍能提供服务发现能力。

2. 具体配置步骤(以 3 节点集群为例)

① 节点 1(eureka-1)配置

yaml

server:  port: 8761  eureka:  instance:  hostname: eureka-1  # 节点主机名(需在 hosts 文件中映射)  client:  register-with-eureka: true  # 向其他节点注册自己  fetch-registry: true         # 从其他节点拉取注册表  service-url:  defaultZone: http://eureka-2:8762/eureka/,http://eureka-3:8763/eureka/  # 其他节点地址  server:  enable-self-preservation: true  # 启用自我保护(默认 true)  eviction-interval-timer-in-ms: 60000  # 实例剔除间隔(60 秒,默认 60 秒)  
② 节点 2(eureka-2)配置

yaml

server:  port: 8762  eureka:  instance:  hostname: eureka-2  client:  service-url:  defaultZone: http://eureka-1:8761/eureka/,http://eureka-3:8763/eureka/  
③ 节点 3(eureka-3)配置

yaml

server:  port: 8763  eureka:  instance:  hostname: eureka-3  client:  service-url:  defaultZone: http://eureka-1:8761/eureka/,http://eureka-2:8762/eureka/  

3. 验证与注意事项

  • 集群状态检查:访问任一节点的管理页面(如 http://eureka-1:8761),在 Instances currently registered with Eureka 中应看到其他节点的注册信息;
  • 故障模拟测试:关闭 eureka-1 节点,检查 eureka-2 和 eureka-3 是否仍能提供服务发现;
  • 网络配置:确保节点间网络互通(通过 telnet eureka-2 8762 验证端口可达)。

五、Tomcat 与 Spring Boot 部署的路径差异解析

1. 问题现象

  • Tomcat 独立部署:将 Eureka Server 打包为 WAR 包部署到 Tomcat 时,管理页面地址为 http://localhost:8080/eureka/eureka(多了一个 /eureka 路径);
  • Spring Boot 内嵌部署:通过 @EnableEurekaServer 启动 Spring Boot 应用时,管理页面地址为 http://localhost:8080/eureka(仅有一个 /eureka 路径)。

2. 路径差异的底层原因

① Tomcat 独立部署:上下文路径(Context Path)与 Eureka Servlet 路径叠加
  • Tomcat 上下文路径:WAR 包部署到 Tomcat 时,WAR 包名称或 server.xml 中配置的 Context 路径会作为访问前缀。例如:

    • 若 WAR 包名为 eureka.war,Tomcat 自动解压为 webapps/eureka 目录,上下文路径为 /eureka
    • 若在 server.xml 中配置 <Context path="/my-eureka" .../>,则上下文路径为 /my-eureka
  • Eureka 自身 Servlet 路径:Eureka Server 的核心接口由 EurekaServlet 处理,其映射路径默认配置为 /eureka/*(通过 eureka.server.servlet-path 参数控制,默认 /eureka)。

  • 路径叠加逻辑
    最终访问路径 = Tomcat 上下文路径 + Eureka Servlet 路径
    例如:上下文路径为 /eureka,Eureka Servlet 路径为 /eureka → 完整路径为 /eureka/eureka

② Spring Boot 内嵌部署:无额外上下文路径
  • Spring Boot 默认配置:内嵌 Tomcat 的默认上下文路径为 /(空路径),可通过 server.servlet.context-path 配置(默认不设置);

  • Eureka Servlet 路径:同样为 /eurekaeureka.server.servlet-path 默认值)。

  • 路径计算逻辑
    最终访问路径 = Spring Boot 上下文路径(空) + Eureka Servlet 路径 → /eureka

3. 路径调整方法

  • Tomcat 部署:若需简化路径,可将 WAR 包部署到 Tomcat 的根上下文(path=""),此时路径为 /eureka(上下文路径空 + Servlet 路径 /eureka);
  • Spring Boot 部署:通过 server.servlet.context-path=/my-eureka 配置上下文路径,路径变为 /my-eureka/eureka(上下文路径 /my-eureka + Servlet 路径 /eureka)。

六、总结与最佳实践

1. 核心要点回顾

  • 原理层面:Eureka 通过 REST API 实现服务注册、心跳、剔除和发现,集群采用对等复制保证高可用;
  • 状态地址:可通过配置、BeanPostProcessor 或 ManagementMetadataProvider 自定义,满足业务验证需求;
  • 高可用部署:集群需相互注册,启用自我保护机制,确保节点故障时服务可用;
  • 路径差异:Tomcat 部署的路径由上下文路径和 Eureka Servlet 路径叠加,Spring Boot 内嵌部署无额外上下文。

2. 生产环境建议

  • 状态地址:优先使用 eureka.instance.statusPageUrl 配置,复杂场景结合 BeanPostProcessor
  • 高可用:至少部署 3 个 Eureka Server 节点,分布在不同可用区;
  • 路径管理:明确配置 eureka.server.servlet-path(如 /api/eureka),与业务路径隔离;
  • 监控与日志:集成 Prometheus + Grafana 监控 Eureka 集群状态,记录心跳失败率、注册表大小等指标。

七、权威参考资料

  • Eureka 官方文档:Netflix Eureka Wiki
  • Spring Cloud Eureka 配置指南:Spring Cloud Netflix Documentation
  • Tomcat 上下文配置:Apache Tomcat Context Documentation

相关文章:

Eureka 深度解析:从原理到部署的全场景实践

一、Eureka 核心原理与架构设计 1. 核心定位与组件模型 Eureka 是 Netflix 开源的服务发现&#xff08;Service Discovery&#xff09;组件&#xff0c;作为 Spring Cloud 微服务体系的核心基础设施&#xff0c;其核心目标是解决分布式系统中服务实例动态管理与跨服务通信解耦…...

有哪些和PPT自动生成有关的MCP项目?

随着AI技术的快速发展, Model Context Protocol(MCP) 作为一种连接大型语言模型(LLMs)与外部工具的开放协议,正在重塑自动化办公领域。在PPT自动生成场景中,MCP通过标准化接口实现了AI模型与设计工具、数据源的无缝整合。以下从技术框架、项目案例、应用场景三个维度展开…...

经典数仓架构深度解析与演进:从离线处理到新型架构对比

经典数仓架构深度解析与演进&#xff1a;从离线处理到新型架构对比 在数据驱动决策的时代&#xff0c;经典数仓作为企业数据管理与分析的核心基础设施&#xff0c;承载着从数据存储到价值挖掘的重要使命。本文将深入剖析经典数仓的架构、数据处理流程、主流架构模式及其对比&a…...

[Python开发] 如何用 VSCode 编写和管理 Python 项目(从 PyCharm 转向)

在 Python 开发领域,PyCharm 一直是广受欢迎的 IDE,但其远程开发功能(如远程 SSH 调试)仅在付费版中提供。为了适应服务器部署需求,很多开发者开始将目光转向更加轻量、灵活且免费扩展能力强的 VSCode。本篇文章将详细介绍,从 PyCharm 转向 VSCode 后,如何高效搭建和管理…...

系统架构-架构评估

质量属性 性能 指系统的响应能力 指标&#xff1a;响应时间、吞吐量等。 设计策略&#xff1a;优先级队列、增加计算资源、减少计算开销、引入并发机制、采用资源调度 可靠性 在意外或错误使用的情况下维持软件系统的功能特性 指标&#xff1a;MTTF、MTBF、MTTR 设计策…...

使用 MQTT - C 访问 IoTDA 平台:一个完整的嵌入式示例

引言 在物联网&#xff08;IoT&#xff09;开发领域&#xff0c;设备与平台之间的通信至关重要。MQTT 作为一种轻量级的消息传输协议&#xff0c;因其高效、可靠的特性&#xff0c;在物联网场景中得到了广泛应用。华为的 IoTDA&#xff08;IoT Device Access&#xff09;平台为…...

Leetcode594.最长和谐子序列

目录 题目算法标签: 滑动窗口, 哈希表思路滑动窗口代码哈希表代码 题目 594. 最长和谐子序列 算法标签: 滑动窗口, 哈希表 思路 先将数组进行排序, 检查两个相邻的但是不相等的数字的差值是否是 1 1 1, 如果是 1 1 1更新答案 滑动窗口代码 #include <algorithm> #i…...

如何在idea中编写spark程序

在 IntelliJ IDEA 中编写 Spark 程序的详细指南 在大数据处理领域&#xff0c;Apache Spark 凭借其强大的分布式计算能力&#xff0c;成为了众多开发者的首选工具。而 IntelliJ IDEA 作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;为编写 Spark 程序…...

人工智能数学基础(一):人工智能与数学

在人工智能领域&#xff0c;数学是不可或缺的基石。无论是算法的设计、模型的训练还是结果的评估&#xff0c;都离不开数学的支持。接下来&#xff0c;我将带大家深入了解人工智能数学基础&#xff0c;包括微积分、线性代数、概率论、数理统计和最优化理论&#xff0c;并通过 P…...

Android Studio 安装 Continue插件

1、Android 插件Studio中安装Continue 2、从本地盘符安装 3、安装后发现Continue为空 Android studio中 Help -> Find Action->Choose Boot Java 设置 4、配置DeepSeek 参考https://juejin.cn/post/7464122534546407461...

【C++】类和对象(4)

目录 1. 类型转换 非explicit的单参数构造函数 示例 explicit的单参数构造函数 示例 不同版本的行为 示例 &#xff08;单参数&#xff09; 示例&#xff08;多参数且其余参数有默认值 &#xff09; 示例&#xff08;多参数且无默认值&#xff09; 2. static成员变量…...

微信jdk 前端vue获取流程1、

参考链接&#xff1a; 企业微信的JSSDK,调用及使用方法_企业微信jssdk-CSDN博客 1、引用 <script src"//res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> <script src"https://res.wx.qq.com/open/js/jweixin-1.2.0.js" referrerpolic…...

Linux进程7-signal信号处理方式验证、可重入函数举例、信号集函数验证、信号集阻塞验证

目录 1. signal函数 1.1进程接收到信号后的处理方式 1.2 signal 函数 1.2.1 signal 函数默认处理 1.2.2 signal 函数忽略处理 1.2.3 signal 函数自定义处理 1.2.4 signal 函数返回值 2.可重入函数 2.1如何判断函数是否可重入 2.2自定义信号处理函数举例 2.2.1 sle…...

使用Python在excel里创建柱状图

一、前言 通过使用Python的openpyxl库&#xff0c;在excel里创建柱状图。openpyxl库提供了创建Excel图表的功能&#xff0c;包括柱状图(Bar Chart)。 二、程序展示 1、导入相关模块&#xff0c;新建excel 新建excel后&#xff0c;在excel的第一列创建一些数据。 import op…...

计算机视觉进化论:YOLOv12、YOLOv11与Darknet系YOLOv7的微调实战对比

摘要 YOLO系列作为实时目标检测领域的重要里程碑&#xff0c;持续引领速度与精度的平衡发展。本文围绕YOLOv7&#xff08;基于Darknet框架&#xff09;、YOLOv11及YOLOv12&#xff0c;系统、深入地对比了三款模型的架构创新、微调策略、核心技术及应用场景。我们详细解析了三者…...

湖北理元理律师事务所:债务管理领域的平台化创新探索

随着中国居民负债率攀升至62%&#xff08;央行2023年数据&#xff09;&#xff0c;债务管理从个体需求演变为社会性课题。湖北理元理律师事务所通过“法律科技金融”的融合模式&#xff0c;构建了国内首个全链条债务管理平台&#xff0c;其服务逻辑与行业价值值得深度剖析。 平…...

沐曦玩转 LMDeploy、XTuner 和 InternLM3

学习链接&#xff1a; https://aicarrier.feishu.cn/wiki/O84LwkiBriUU0NkDwurcSufhnVb 一 LMDeploy推理及验证 1.1 下载LMDeploy # 安装addict软件包 pip install addict mmengine mmengine-lite fire accelerate0.32.1 nvidia-ml-py# 解决LMDeploy对tranformers版本要求的…...

【Java面试笔记:进阶】26.如何监控和诊断JVM堆内和堆外内存使用?

监控和诊断JVM内存使用是优化性能和解决内存问题的关键。 1.JVM内存监控与诊断方法 1.图形化工具 JConsole:提供图形化界面,可直接连接到Java进程,查看内存使用情况。VisualVM:功能强大的图形化工具,但注意从Oracle JDK 9开始不再包含在JDK安装包中。Java Mission Contr…...

阿里云服务器云盘扩容

在阿里云服务器上在线扩容了云盘后&#xff0c;如果服务器内部查看容量没有变化&#xff0c;可能是由于分区和文件系统未正确扩展。以下是详细的解决步骤&#xff1a; 1. 确认扩容是否成功 在阿里云控制台检查磁盘容量是否已显示扩容后的新大小。如果控制台显示已扩容&#x…...

【ESP32】st7735s + LVGL移植

LVGL的移植 使用版本1、创建工程2、开始移植2.1、文件准备2.2、修改代码2.3、SDK配置编辑器 3、测试 使用版本 LVGL版本&#xff1a;8.3 链接点这里ESPIDF版本&#xff1a;4.4.8lvgl_esp32_drivers&#xff1a; 链接点这里ESP32型号&#xff1a;ESP32S3 1、创建工程 默认都会…...

Jackson 使用方法详解

Jackson 是 Java 生态中最流行的 JSON 处理库&#xff0c;也是 Spring Boot 的默认 JSON 解析器。它提供了高性能的 JSON 序列化&#xff08;对象 → JSON&#xff09;和反序列化&#xff08;JSON → 对象&#xff09;功能。以下是 Jackson 的全面使用指南。 1. 基础依赖 Mave…...

TensorFlow深度学习框架:从入门到精通的完整指南

&#x1f31f; TensorFlow核心优势 TensorFlow作为Google开发的顶级深度学习框架&#xff0c;具有三大独特优势&#xff1a; 工业级部署能力&#xff1a;支持从移动端到服务器的全平台部署完善的工具链&#xff1a;包含TensorBoard、TF Lite、TF.js等完整生态强大的社区支持&…...

Java 入门宝典--注释、关键字、数据类型、变量常量、类型转换

作者&#xff1a;IvanCodes 发布时间&#xff1a;2025年4月28日&#x1f423; 专栏&#xff1a;Java教程 哈喽&#xff0c;各位 CSDN 的小伙伴们&#xff01;&#x1f44b; 这部分内容虽然基础&#xff0c;但 极其重要&#xff0c;是后续学习所有高级特性的基石。准备好了吗&…...

【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的旅游论坛系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …...

Android开发,实现一个简约又好看的登录页

文章目录 1. 编写布局文件2.设计要点说明3. 效果图4. 关于作者其它项目视频教程介绍 1. 编写布局文件 编写activity.login.xml 布局文件 <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android…...

一种改进的YOLOv11网络,用于无人机视角下的小目标检测

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 随着无人机&#xff08;UAV&#xff09;和计算机视觉技术的快速发展&#xff0c;从无人机视角进行目标检测已成为一个重要的研究领域。然而&#xff0c;无人机图像中目标像素占比极小、物体尺度变…...

linux离线安装zsh

下载zsh 下载仓库后解压 下载地址&#xff1a;https://github.com/zsh-users/zsh 离线安装 安装方法见INSTALL文件 ./configure --prefix[/usr/local] make make install...

Golang|使用函数作为参数和使用接口的联系

函数作为数据类型的一种&#xff0c;可以成为其他函数的参数。在 Go&#xff08;Golang&#xff09; 中&#xff0c;函数作为参数 和 接口&#xff08;interface&#xff09;&#xff0c;本质上都和抽象、灵活调用有关 —— 都是让代码更灵活、更可扩展的手段。不过它们各有侧重…...

Python爬虫实战:获取软科网最新特定专业大学排名数据并做分析,为高考填报志愿做参考

一、引言 在高考升学的重要阶段,志愿填报成为考生和家长关注的核心问题。准确、全面且具有权威性的大学专业排名数据,是考生做出科学志愿决策的关键依据。软科网作为专业的大学排名信息发布平台,其发布的计算机科学与技术专业排名数据,因具有较高的公信力和参考价值,备受…...

【ACL系列论文写作指北12-Deadline管理与科研项目规划】-用节奏赢得高质量科研

科研不是一场冲刺&#xff0c;而是有序推进的系统工程。 引言&#xff1a;掌控时间&#xff0c;才能掌控科研主动权 再好的想法和技术&#xff0c;如果没有良好的时间管理&#xff0c;最终只会沦为“赶DDL”的牺牲品。科研项目规划&#xff0c;是确保质量、效率与心态平衡的关…...

elasticsearch底层模块解析与实践系列

#作者&#xff1a;猎人 文章目录 底层模块深入解析之threadpool1、线程池2、线程池类型3、cpu core数量设置 底层模块深入解析之plugin底层模块深入解析之es node节点角色1、node类型2、master eligible node3、data node4、ingest node5、cooridnating only node6、node data…...

Git-基本操作

前言 安装 git --version sudo apt-get remove git -y #卸载 sudo apt-get install git -y基本操作 创建本地仓库 mkdir gitcodegit init 这个就可以创建本地仓库了 然后当前目录下就有一个.git的文件夹 配置本地仓库 就是配置用户的名称&#xff0c;和用户的email地址 在…...

iVX 图形化编程如何改写后端开发新范式

在数字化转型加速推进的当下&#xff0c;企业对后端系统的需求呈现爆发式增长。Gartner 最新报告指出&#xff0c;2025 年全球企业平均需完成 300 定制化应用开发&#xff0c;而传统编码模式下&#xff0c;单个项目平均交付周期长达 6 - 8 个月。与此同时&#xff0c;Redis、K…...

【数据可视化-42】杂货库存数据集可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

使用 Electron 打包 Windows 可执行程序

使用 Electron 打包 Windows 可执行程序 在使用 Electron 构建桌面应用程序时&#xff0c;通常需要将项目打包为可执行文件&#xff08;例如 .exe 文件&#xff09;&#xff0c;以便用户可以方便地安装和运行。本文将介绍如何使用 electron-builder 将 Electron 项目打包成 Wi…...

爬虫学习笔记(三)--Http协议

思维导图 上面思维导图提取的原文是2026王道计网P286~290 URL最前面&#xff08;URL传输过程中遵循HTTP协议&#xff09; 协议 计算机传输的数据实际上就是二进制0和1&#xff0c;协议就是规定这一串二进制数字的前几位代表什么、中间几位代表什么、后几位代表什么 HTTP&a…...

ai环境cuda cudnn conda torch整体迁移 wsl docker

运行没问题的环境&#xff0c;wsl先关停wsl --shutdown 然后导出复制到迁移机器上wsl --export U24 E:\wsl\u24.tar 使用wsl版挂成虚拟机wsl --import U24 E:\wsl\ubuntu E:\wsl\u24.tar 使用docker版挂成镜像docker import E:\wsl\u24.tar my-ubuntu:custom 启动docker容器&am…...

数据库小技巧-使用开窗函数矫正数据库指定列部分列值重复的数据

需求描述 目前有某表的某列部分值重复&#xff0c;需要批量矫正该列数据&#xff0c;确保该列分组内不会出现重复值。 解决思路 -- 创建个临时表 create table t_tmp_20250428( c_bh varchar(32), -- 主键 c_bh_aj varchar(32), -- 主表外键&#xff0c;分组条件&#xff0c…...

【优选算法 | 二分查找】二分查找算法解析:如何通过二段性优化搜索效率

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口 在本篇文章中&#xff0c;我们将深入解析二分查找算法的核心原理。从基本概念到实际应用&#xff0c;带你了解如何利用二分查找高效定位元素&#xff0c;提升搜索效率。无论你是刚接触算法的新手…...

AI与IT协同的典型案例

简介 本篇代码示例展示了IT从业者如何与AI协同工作&#xff0c;发挥各自优势。这些案例均来自2025年的最新企业实践&#xff0c;涵盖了不同IT岗位的应用场景。 一、GitHub Copilot生成代码框架 开发工程师AI协作示例&#xff1a;利用GitHub Copilot生成代码框架&#xff0c;…...

5.软考高项(信息系统项目管理师)-成本管理

成本管理非常重要&#xff0c;选择、计算考得非常多&#xff0c;必须要好好学。 过程、输入、工具及输出 过程名&#xff08;附作用&#xff09; 通俗解释 输入 工具和技术 输出 规划成本管理 为如何管理项目成本提供指南和方向 编制成本管理计划&#xff0c;这个计划主…...

前端:纯HTML、CSS和JS菜单样式

实现了一个多级折叠菜单系统,使用纯HTML、CSS和JavaScript(无任何框架) 一、二级菜单展开 1、实现效果 初始状态-展示全部一级菜单 选中共状态,一级标题选中共为蓝色背景色,二级标题选中共为蓝色文字,展开右侧图标为-,后缩状态右侧图标为+ 2、实现 ​​HTML结构​​ …...

案例篇:如何用tcpdump和Wireshark识别潜在威胁

无论是日常浏览网页、观看视频&#xff0c;还是企业开展线上业务、进行数据传输&#xff0c;都离不开网络的支持。然而&#xff0c;网络问题也时有发生&#xff0c;比如网络卡顿&#xff0c;相信大家都遇到过&#xff0c;那种等待页面加载的焦急心情&#xff0c;真的让人抓狂。…...

微信小程序开发中关于首屏加载、本地数据持久化的思考

本文将围绕小程序开发中首屏性能优化与本地存储持久化两大重要主题展开&#xff0c;结合实际项目经验&#xff0c;系统分析常见问题、优化方法与最佳实践&#xff0c;构建流畅且高效的小程序体验。 文章目录 前言一、什么是首屏加载&#xff1f;为什么重要&#xff1f;二、小程…...

媒资管理之视频管理

一&#xff1a;业务概述&#xff1a; 媒资管理这个模块是我负责开发的&#xff0c;主要的管理对象是视频&#xff0c;图片&#xff0c;文档等 包括文件的上传&#xff0c;视频的处理&#xff0c;文件的删除 &#xff08;在媒资管理界面&#xff0c;有个上传视频的按钮&#…...

windows程序转鲲鹏服务器踩坑记【持续更新中】

1.鲲鹏处理器和Intel处理器的区别 处理器/对比项IntelKunpeng厂家因特尔(美国)华为(中国)指令集X86架构ARM-V8架构与指令集- x86 CISC复杂指令集 - 单核性能强&#xff08;如至强8380主频3.8GHz&#xff09; - 三级缓存优化&#xff0c;支持DDR4-3200和Optane内存- ARMv8-A RI…...

【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界

习题集: 【单选题】在构建Agent系统时,使用Assistant API创建Agent时,若想让Agent具备查询员工信息和发送请假申请的功能,以下对instructions参数设置最合理的是( ) A. “你可以做任何事情” B. “你能查询员工信息和发送请假申请” C. “你是公司助手,功能有:1.查询员…...

程序进程多任务线程

1.程序 程序(program)是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。 2.进程 进程(process)是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。进程是操作系统资源分配和处理器调度的基本单位,拥有独立的代码、内部数…...

Finish技术生态计划: FinishRpc

finishRpc 简介 ​ 纯个人兴趣设计的项目: 因为失业在家摆烂 所以没事就想写点代码 本身也比较喜欢自己写一些好玩的demo 这个项目的设计完全是取悦自己又菜又有一个创造框架的梦想 可以用于提升框架设计思路以及实践一些常用技术的练习 可以用于校园中的练习 , 如果能对你有所…...

《商业世界的开源法则:协议选择与商业模式创新》

引言 在当今数字化时代&#xff0c;开源软件已成为技术生态系统中不可或缺的一部分。从Linux操作系统到Apache Web服务器&#xff0c;从MySQL数据库到React前端框架&#xff0c;开源项目支撑着全球大部分互联网基础设施和企业IT系统。然而&#xff0c;关于开源协议与商业使用之…...