微服务中的相关概念
Eureka
Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software)技术栈中的一部分,通常与 Spring Cloud 集成使用。
Eureka 的主要作用
-
服务注册
- 每个微服务启动时,会将自己的信息(如服务名、实例地址、端口等)注册到 Eureka 服务器(也称为 Eureka Server)。
- Eureka 服务器会维护一个服务实例列表,记录所有注册到它的微服务信息。
-
服务发现
- 当一个微服务需要调用另一个微服务时,可以通过 Eureka 服务器查询所需服务的实例列表。
- Eureka 客户端(也称为 Eureka Client)会定期从 Eureka 服务器获取更新的服务实例列表,并将请求路由到适当的服务实例。
-
健康检查
- Eureka 客户端会定期向 Eureka 服务器发送心跳请求,表明服务实例的健康状态。
- 如果 Eureka 服务器在一定时间内没有收到某个服务实例的心跳,将认为该实例不可用,并从服务实例列表中移除。
-
高可用性
- Eureka 服务器可以集群部署,实现高可用性和容错能力。多个 Eureka 服务器实例之间会相互同步服务注册信息,确保服务的高可用性。
- 在客户端缓存服务实例列表,即使 Eureka 服务器全部宕机,客户端仍可以使用缓存的服务实例列表进行服务发现。
Eureka 的功能特性
-
自我保护模式
- 当 Eureka 服务器检测到短时间内大量服务实例不可用时,会启动自我保护模式。在这种模式下,Eureka 服务器将不会移除未收到心跳的服务实例,避免因网络分区等问题导致的大规模服务剔除。
- 自我保护模式可以提高系统的稳定性和容错能力,防止因瞬时网络故障引发的连锁反应。
-
易于集成
- 与 Spring Cloud 集成紧密,提供了简单的配置和使用方式,极大简化了服务注册和发现的实现。
-
灵活的客户端配置
- Eureka 客户端可以通过配置文件或代码灵活地设置注册、心跳、缓存等参数,满足不同应用场景的需求。
-
丰富的 API
- 提供了丰富的 REST API,支持对服务实例的注册、查询、更新、删除等操作,方便开发者进行管理和监控。
Eureka 在微服务中的应用场景
-
服务注册与发现
- 在微服务架构中,服务实例的数量和地址是动态变化的,使用 Eureka 可以实现动态的服务注册和发现,简化服务间的调用。
-
负载均衡
- Eureka 客户端可以从服务实例列表中选择合适的服务实例进行调用,实现客户端负载均衡,提升系统的性能和可靠性。
-
高可用性和容错
- 通过集群部署 Eureka 服务器,实现服务注册中心的高可用性和容错能力,保证系统在部分节点故障时仍能正常运行。
-
自动化运维
- 使用 Eureka 的自我保护模式和健康检查机制,可以实现服务实例的自动注册和注销,简化运维工作,提升系统的稳定性和可靠性。
示例架构
Eureka Server
- 通常部署在多个节点上,以实现高可用性。
- 负责维护所有注册的服务实例信息,并将这些信息提供给 Eureka 客户端。
Eureka Client
- 每个微服务在启动时会注册到 Eureka Server,并定期发送心跳以表明自己是健康的。
- 当微服务需要调用其他服务时,通过 Eureka Client 获取最新的服务实例列表进行调用。
总结
Eureka 作为微服务架构中的服务注册和发现中心,提供了动态服务注册、服务发现、健康检查和高可用性等功能,简化了服务间的调用和管理。通过与 Spring Cloud 的集成,Eureka 提供了简单而强大的服务注册和发现机制,极大地提高了分布式系统的弹性和可靠性。Eureka 的自我保护模式和灵活的客户端配置,使其能够适应各种复杂的网络环境和应用场景,是构建稳定可靠的微服务架构的重要工具。
Nacos
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款支持云原生架构的服务发现、配置管理和动态 DNS 的解决方案。它在微服务架构中发挥着重要作用,主要包括以下几个方面:
Nacos 的主要作用
-
服务发现与服务注册
- 服务注册:微服务启动时,将自己的信息(如服务名、实例地址、端口等)注册到 Nacos 服务中心。
- 服务发现:微服务可以通过 Nacos 查询到其他服务的地址和端口,从而实现服务间的调用。
- 动态更新:当服务实例的状态发生变化(如上线、下线、崩溃等),Nacos 能够及时更新服务列表,并通知相关的微服务。
-
配置管理
- 集中管理:Nacos 提供统一的配置管理平台,支持对分布式系统中各个微服务的配置进行集中管理。
- 动态更新:配置文件的变更可以实时生效,Nacos 会将最新的配置推送给所有订阅该配置的微服务实例,减少了因配置变更导致的服务重启和停机时间。
- 多环境、多版本管理:支持对不同环境(如开发、测试、生产)和不同版本的配置进行管理。
-
动态 DNS
- DNS 服务:Nacos 提供类似 DNS 的功能,微服务可以通过域名访问其他服务,无需关心实际的 IP 地址。
- 负载均衡:Nacos 可以将流量均匀分配到多个服务实例上,提升系统的可用性和扩展性。
Nacos 的功能特性
-
易于集成
- Nacos 与 Spring Cloud 和 Dubbo 等微服务框架无缝集成,提供了友好的 API 和 SDK,使得开发者可以方便地使用 Nacos 的功能。
-
高可用性和可靠性
- Nacos 支持集群部署,保证了服务的高可用性和可靠性。
- 它使用 Raft 协议来实现一致性和故障恢复,确保数据的一致性和可靠性。
-
灵活性
- 支持多种数据存储(如 MySQL、嵌入式存储等),开发者可以根据实际需求选择合适的存储方式。
- 支持多种注册中心协议(如 HTTP、gRPC),兼容性强。
-
可视化界面
- Nacos 提供了友好的管理控制台,用户可以通过 Web 界面方便地管理服务和配置,监控服务状态和配置变更。
Nacos 在微服务中的应用场景
-
服务治理
- 通过 Nacos 实现服务的注册与发现,简化了服务之间的调用,提升了服务治理的效率。
- 提供了服务健康检查和负载均衡功能,确保服务的稳定性和高可用性。
-
配置管理
- 集中管理微服务的配置,支持配置的动态更新和多环境管理,降低了配置管理的复杂性。
- 提供了细粒度的权限控制,确保配置的安全性。
-
流量管理
- 支持灰度发布和流量控制,通过动态 DNS 和负载均衡机制,实现服务流量的精细化管理。
-
监控和报警
- 集成了监控和报警功能,用户可以实时监控服务的运行状态和性能指标,及时发现和处理问题。
总结
Nacos 在微服务架构中充当了服务发现、配置管理和动态 DNS 的重要角色,极大地简化了服务治理和配置管理的工作。它通过提供统一的服务注册与发现、集中化的配置管理和灵活的流量控制,帮助开发者构建高可用、高性能、易扩展的分布式系统。在云原生和微服务架构越来越普及的今天,Nacos 是一个非常实用的工具。
Zuul
Zuul 是 Netflix 开发的一个基于 JVM 路由和服务网关的项目,主要用于微服务架构中的动态路由、监控、弹性、安全等功能。它可以作为微服务的 API 网关,处理所有外部请求,并将请求转发到相应的后端服务。
Zuul 的主要作用
-
动态路由
- 根据请求路径、请求参数等动态地将请求转发到不同的后端服务。
- 支持基于各种条件的路由规则配置。
-
负载均衡
- 通过集成 Ribbon 等客户端负载均衡器,实现对后端服务的负载均衡。
-
安全管理
- 可以在 API 网关层实现身份认证、授权等安全机制,确保请求的合法性。
-
流量控制
- 支持对请求流量的限流、熔断等操作,保护后端服务免受流量激增的冲击。
-
监控和统计
- 可以记录请求的各项指标,如延迟、成功率、失败率等,提供丰富的监控数据和日志。
-
过滤器机制
- Zuul 提供了丰富的过滤器机制,开发者可以编写自定义过滤器来实现各种功能,如请求日志记录、请求参数校验等。
Zuul 的应用场景
-
API 网关
- 作为微服务的入口,处理所有外部请求,统一路由和转发到后端服务。
- 实现统一的身份认证和授权,保证请求的安全性。
-
流量管理
- 对请求流量进行限流和熔断,保护后端服务免受流量冲击。
-
日志和监控
- 记录请求日志,提供丰富的监控数据,帮助运维人员了解系统的运行状况。
-
过滤器
- 通过自定义过滤器,实现请求的校验、修改、转发等操作,满足各种业务需求。
总结
- Zuul:作为 API 网关,主要负责请求路由、负载均衡、安全管理、流量控制和监控等功能,是微服务架构中外部请求的统一入口。
Sentinel
Sentinel 是阿里巴巴开源的一个用于分布式系统的流量防护组件,主要用于实现流量控制、熔断降级、系统负载保护等功能,确保分布式系统的稳定性和高可用性。
Sentinel 的主要作用
-
流量控制
- 根据设定的限流规则,对进入系统的流量进行控制,防止系统过载。
- 支持多种限流策略,如并发线程数限流、QPS(每秒查询数)限流等。
-
熔断降级
- 当某个服务的调用失败率或响应时间超过设定阈值时,触发熔断机制,暂时拒绝对该服务的调用。
- 在熔断期间,可以返回预设的降级处理结果,确保系统的可用性。
-
系统负载保护
- 根据系统的负载情况(如 CPU 使用率、内存使用率等),动态调整流量控制策略,保护系统稳定运行。
-
热点参数限流
- 对热点参数进行限流控制,防止某些高频请求导致系统性能下降。
-
实时监控
- 提供丰富的监控数据,支持实时监控和统计各项指标,如流量、响应时间、成功率、失败率等。
-
规则动态调整
- 支持动态调整限流、熔断等规则,能够根据实际情况灵活调整策略,适应系统的动态变化。
Sentinel 的应用场景
-
流量控制
- 在微服务架构中,对服务的调用进行限流,防止服务过载。
- 在流量激增时,确保核心服务的稳定性。
-
熔断降级
- 当某个服务出现故障或性能下降时,通过熔断机制及时隔离问题,防止故障蔓延。
- 提供降级处理,确保系统的基本可用性。
-
系统保护
- 根据系统负载情况,动态调整流量控制策略,保护系统的稳定运行。
-
监控和报警
- 实时监控各项指标,及时发现和处理系统中的异常情况,保障系统的正常运行。
总结
- Sentinel:作为流量防护组件,主要负责流量控制、熔断降级、系统负载保护、热点参数限流和实时监控,确保分布式系统的稳定性和高可用性。
Hystrix
服务雪崩
- 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出",如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”
- 对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和。比失败更糟糕的是,这些应用程亭还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障。这些都表示需要对故障和延迟进行隔离和管理,以便单个依赖关系的失败,不能取消整个应用程序或系统。
Hystrix 是由 Netflix 开发的一款用于处理分布式系统中延迟和容错的库,主要应用于微服务架构中。它通过隔离服务之间的调用、监控、熔断和故障恢复机制,提高了系统的弹性和容错能力。Hystrix 已经被广泛用于保护分布式系统中的服务免受依赖故障的影响,确保系统在面对部分服务故障时仍能提供关键功能。
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。
"断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FaBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
Hystrix 的主要作用
-
熔断器模式(Circuit Breaker Pattern)
- 熔断器:当服务的调用失败率达到一定阈值时,熔断器会打开,暂时中断对该服务的调用,以避免连锁故障。熔断器会在一段时间后尝试恢复对服务的调用,检查服务是否恢复正常。
- 保护机制:避免对已知不可用的服务进行无效的重试调用,从而保护系统资源。
-
隔离技术(Isolation Techniques)
- 线程池隔离:每个依赖服务都有一个独立的线程池,当线程池满时,新的请求会被立即拒绝,而不是排队等待,从而避免了服务调用之间的相互影响。
- 信号量隔离:使用信号量限制并发调用的数量,适用于对延迟敏感且调用频繁的服务。
-
回退机制(Fallback)
- 当服务调用失败、超时或熔断器打开时,Hystrix 可以执行一个预定义的回退方法,提供一个降级的服务响应,以确保系统的可用性。
-
实时监控
- Hystrix 提供了丰富的监控指标和实时的监控数据,帮助开发者了解服务的运行状态和健康状况,及时发现和处理问题。
-
请求合并(Request Collapsing)
- 合并多个请求以减少请求次数,提升性能。例如,将对同一服务的多个请求合并成一个批量请求,减少网络开销。
-
请求缓存(Request Caching)
- 对相同的请求进行缓存,避免重复调用,提升效率。
Hystrix 的功能特性
-
熔断器配置
- 支持自定义熔断器的各项参数,包括失败阈值、熔断器打开后的休眠时间、失败率计算窗口等。
-
隔离策略
- 可以选择线程池或信号量两种隔离策略,灵活适应不同的服务调用场景。
-
超时设置
- 可以为每个服务调用设置超时时间,确保慢调用不会拖累系统的整体性能。
-
统计和监控
- Hystrix 提供了丰富的统计信息,包括成功、失败、超时、拒绝等调用的次数和比例,帮助开发者及时了解服务健康状况。
- 提供了 Hystrix Dashboard,通过可视化界面展示各项指标,方便监控和管理。
Hystrix 在微服务中的应用场景
-
服务保护
- 在微服务架构中,各个服务之间相互依赖,某个服务的故障可能会引发连锁反应。Hystrix 通过熔断器和隔离技术,有效防止服务之间的故障传播,保护系统的整体稳定性。
-
提升系统弹性
- 通过回退机制和请求合并,Hystrix 能在服务不可用或性能下降时,提供降级服务或合并请求,提升系统的弹性和用户体验。
-
流量控制
- 通过线程池和信号量隔离,Hystrix 能有效控制对依赖服务的调用流量,避免因过载导致的系统崩溃。
-
实时监控和报警
- Hystrix 提供的实时监控和报警功能,帮助运维人员及时发现和处理系统中的异常情况,保障系统的正常运行。
总结
Hystrix 在微服务架构中扮演了重要的角色,通过熔断器、隔离、回退等机制,增强了系统的容错能力和弹性,保护了服务间的调用链路。尽管 Hystrix 项目已进入维护模式,不再积极开发新功能,但其设计理念和模式仍然在很多现代微服务框架中得到了应用和延续,例如 Spring Cloud 的 Resilience4j。Hystrix 的应用和经验为分布式系统的稳定性设计提供了宝贵的借鉴。
在微服务架构中,Hystrix 是一个用于处理延迟和容错的库,旨在提高系统的弹性和稳定性。Hystrix 提供了熔断和降级机制,这两者在保护系统免受依赖服务故障影响方面发挥了关键作用。
熔断机制(Circuit Breaker Pattern)
熔断机制的灵感来自电气工程中的电路断路器,当电流过大时,断路器会切断电路以保护设备。在软件系统中,熔断器保护系统免受持续的错误请求影响。
熔断器状态
-
关闭状态(Closed)
- 默认状态,所有请求都正常发送给目标服务。
- 如果请求失败次数超过设定阈值,熔断器进入半开状态。
-
打开状态(Open)
- 熔断器阻止所有对目标服务的请求,并直接返回失败响应或执行回退逻辑。
- 熔断器在打开状态下等待一段时间,然后进入半开状态。
-
半开状态(Half-Open)
- 部分请求被允许通过,测试目标服务是否恢复正常。
- 如果通过的请求成功,熔断器关闭;否则,重新进入打开状态。
触发熔断的条件
- 请求失败率:如果在一个时间窗口内,请求失败率超过设定的阈值(例如 50%),熔断器打开。
- 请求数量:熔断器只在达到一定数量的请求后才进行计算,以避免在请求量很少时误触发熔断。
- 响应时间:如果请求响应时间超过设定的阈值,也可以触发熔断。
熔断器打开后的行为
- 立即返回:直接返回一个错误响应,通知客户端服务不可用。
- 执行回退:执行一个预定义的回退方法,提供一个降级服务响应。
降级机制(Fallback)
降级机制是指在服务调用失败、超时或熔断器打开时,执行一个备用的回退方法,以提供替代的服务响应。这确保了系统在部分功能不可用时仍能提供基本的服务。
降级场景
- 服务调用失败:目标服务宕机或不可用时,执行回退逻辑。
- 服务超时:请求超时未响应时,执行回退逻辑。
- 熔断器打开:当熔断器进入打开状态时,直接执行回退逻辑。
- 自定义错误条件:开发者可以定义其他错误条件触发降级,例如特定的异常类型。
具体应用场景
- 网络故障:由于网络问题导致服务调用失败,熔断器打开,执行回退逻辑。
- 服务过载:目标服务因负载过高无法响应请求,触发熔断,执行降级服务。
- 服务升级或维护:目标服务临时下线进行维护,调用失败,触发熔断和降级。
- 瞬时高流量:突发流量导致部分请求失败,熔断器打开,提供降级响应以保护系统。
实际代码示例
以下是使用 Hystrix 的一个简单示例,展示了熔断和降级机制:
import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;public class MyServiceCommand extends HystrixCommand<String> {private final String name;public MyServiceCommand(String name) {super(HystrixCommandGroupKey.Factory.asKey("MyServiceGroup"));this.name = name;}@Overrideprotected String run() {// 模拟调用远程服务if (Math.random() > 0.5) {throw new RuntimeException("Service failure!");}return "Hello, " + name;}@Overrideprotected String getFallback() {// 降级逻辑return "Fallback, " + name;}public static void main(String[] args) {MyServiceCommand command = new MyServiceCommand("World");String result = command.execute();System.out.println(result);}
}
在这个示例中,run
方法模拟了一个远程服务调用,如果调用失败,getFallback
方法将返回降级响应。Hystrix 通过这种方式实现了熔断和降级机制,确保系统的稳定性和高可用性。
相关文章:
微服务中的相关概念
Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software)…...
常见的设计模式
设计模式是一套被反复使用的、代码设计经验的总结。它们被用来解决软件开发中的某些常见问题,提高代码的可维护性、可扩展性和重用性。设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。以下是一些常见的设计模式及其简要说明: …...
Camtasia2024中文版最新电脑录屏剪辑神器!
大家好,今天我要安利一个我最近超级喜欢的工具——Camtasia2024中文版!这款软件真的太棒了,它让我的视频编辑工作变得更加轻松和高效。如果你也对视频制作感兴趣,那么一定要尝试一下这款神器哦! Camtasia2024win-正式…...
【性能优化】表分区实践最佳案例
背景 随着数字化建设的持续深入,企业的业务规模迎来了高速发展,其数据规模也呈现爆炸式增长,如果继续使用传统解决方案,将所有数据存储在一个表中,对数据的查询和维护效率将是一个巨大的挑战,在这个背景下…...
力扣SQL50 项目员工 I ROUND AVG
Problem: 1075. 项目员工 I 👨🏫 参考题解 Code select project_id,ROUND(AVG(e.experience_years),2) as average_years FROMproject as p LEFT JOINemployee as e ONp.employee_id e.employee_id GROUP BYp.project_id;...
nuscenes 数据集学习笔记
目录 数据信息类型: 数据信息类型: Map & Camera(png), Lidar(激光雷达) & Radar(雷达)(pcd), Json 文件结构(以v1.0-mini为例): maps: 存放Map的png文件samples: 存放Camera, Lidar, Radar关键非结构化数据信息, 带标注sweeps: 存放Camera, Lidar, Radar 次要非结构…...
在Windows上用MinGW编译OpenCV项目运行全流程
一、准备软件 OpenCV源码CMake工具MinGW工具链(需要选用 posix 线程版本:原因见此) 二、操作步骤 官网提供了VC16构建版本的二进制包,但是没有给出GCC编译的版本。所以如果使用MinGW进行构建,那就只能从源码开始构建…...
用Vite基于Vue3+ts+DataV+ECharts开发数据可视化大屏,即能快速开发又能保证屏幕适配
数据可视化大屏 基于 Vue3、Typescript、DataV、ECharts5 框架的大数据可视化(大屏展示)开发。此项目vue3实现界面,采用新版动态屏幕适配方案,全局渲染组件封装,支持数据动态刷新渲染、内部DataV、ECharts图表都支持自…...
大二学生眼中的Netty?基于Netty实现内网穿透!
爷的开场白 掘金的朋友们大家好!我是新来的Java练习生 CodeCodeBond! 这段时间呢,博主在学习Netty,想做一个自己感兴趣好玩的东西,那就是内网穿透!!(已经实现主要代理功能但有待优化…...
JavaStringBuffer与StringBuilder
StringBuffer、StringBuilder 文章目录 StringBuffer、StringBuilderStringBuffer和StringBuilder的理解可变性分析对于String对于StringBuilder 常用方法执行效率对比 StringBuffer和StringBuilder的理解 String 不可变的字符序列 StringBuffer 可变的字符序列 JDK1.0声明&…...
云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长
竹叶青茶以其别具一格的风味与深厚的历史底蕴,一直被誉为茶中瑰宝。历经千年的传承与创新,竹叶青不仅坚守着茶叶品质的极致追求,更在数字化的浪潮中,率先打破传统,以科技力量赋能品牌,成为茶行业的领军者。…...
深度揭秘:深度学习框架下的神经网络架构进化
深度学习框架下的神经网络架构经历了从基础到复杂的显著进化,这一进程不仅推动了人工智能领域的突破性进展,还极大地影响了诸多行业应用。本文旨在深入浅出地揭示这一进化历程,探讨关键架构的创新点及其对现实世界的影响。 引言:…...
MySQL的DML语句
文章目录 ☃️概述☃️DML☃️添加数据☃️更新和删除数据☃️DML的重要性 ☃️概述 MySQL 通用语法分类 ● DDL: 数据定义语言,用来 定义数据库对象(数据库、表、字段) ● DML: 数据操作语言,用来对数据库表中的数据进行增删改 …...
Wireshark的基本用法以及注意事项
Wireshark 是一个流行的网络协议分析工具,可以捕获和分析网络数据包。以下是一些常见的 Wireshark 的用法: 安装和启动:首先需要下载和安装 Wireshark。安装完成后,可以通过启动 Wireshark 应用程序来打开它。 选择网络接口&…...
集团门户网站的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,论坛管理,集团文化管理,基础数据管理,公告通知管理 前台账户功能包括:系统首页,个人中心,论坛࿰…...
Tomcat基础详解
第一篇:Tomcat基础篇 lecture:邓澎波 一、构建Tomcat源码环境 工欲善其事必先利其器,为了学好Tomcat源码,我们需要先在本地构建一个Tomcat的运行环境。 1.源码环境下载 源码有两种下载方式: 1.1 官网下载 https://…...
【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)
目录 资源链接 一、网站选择 二、数据爬取要求 三、数据清洗要求 四、实现代码 1.数据采集 2.数据清洗 资源链接 下面有笔者所放的源码下载链接,读者可自行下载: 链接:https://pan.baidu.com/s/1YmTdlnbSJLvLrrx92zz6Qg 提取码&…...
Microsoft Visual C++ Redistributable 【安装包】【高速下载】
方法1、可以从官方下载,如下图 Visual C Redistributable for Visual Studio 2015 但是此链接只有一个版本 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本,…...
MFC绘制哆啦A梦
文章目录 OnPaint绘制代码完整Visual Studio工程下载其他卡通人物绘制 OnPaint绘制代码 CPaintDC dc(this); // 用于绘画的设备上下文CRect rc;GetWindowRect(rc);int cxClient rc.Width();int cyClient rc.Height();// 辅助线HPEN hPen CreatePen(PS_DOT, 1, RGB(192, 192,…...
网络编程(TCP协议,UDP协议)
目录 网络编程三要素 IP IPv4 InetAddress类 端口号 协议 UDP协议 UDP协议发送数据 UDP协议接收数据 UDP的三种通信方式(代码实现) TCP协议 TCP通信程序 三次握手和四次挥手 练习 1、客户端:多次发送数据服务器:接收多次接收数据,并打印 2、客户端…...
读取Jar包下文件资源的问题及解决方案
问题 项目A代码调用到Resouces下的文件a.sh,打包成Jar包后,项目B调用对应方法时,出现报错,找不到a.sh文件路径,原来的代码可能是: URL resource getClass().getClassLoader().getResource("a.sh&qu…...
C++ 反转一个二进制串
描述 一个32位有符号整数,用二进制编码来表示。现需要将该二进制编码按位反转,计算出反转后的值。 示例1 输入: 1 返回值: -2147483648 说明: 00000000 00000000 00000000 00000001 翻转后为 10000000 000000…...
黑神话悟空-吉吉国王版本【抢先版】
在中国的游戏市场中,一款名为“黑神话悟空”的游戏引起了广泛的关注。这款游戏以中国传统的神话故事“西游记”为背景,创造了一个令人震撼的虚拟世界。今天,我们要来介绍的是这款游戏的一种特殊版本,那就是吉吉国王版本。 在吉吉国…...
【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)
【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结) 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理(完结)1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…...
java拼图小游戏项目
创建一个Java拼图小游戏是一个有趣且富有教育意义的项目,可以锻炼你的编程技能。以下是开发一个基本拼图游戏可能需要考虑的几个步骤: 项目规划: 确定游戏的基本规则和玩法。设计游戏的界面和用户交互。 环境搭建: 确保你的开发环…...
[C++][数据结构][跳表]详细讲解
目录 0.什么是跳表?1.SkipList的优化思路2.SkipList的效率如何保证?3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表? SkipList本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树…...
tinyxml
github下载相关的软件包,其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp,tinyxml12.h,rss网页xml文件,还有就是官方给的test文件tinyxmltest.cpp。 example1就是提供一个打开文件的方式 int example_1() {XMLDocument …...
Docker(三)-Docker常用命令
1.run run命令执行流程:2.帮助启动类命令 2.1 启动docker systemctl start docker2.2 停止docker systemctl stop docker2.3 重启docker systemctl restart docker2.4查看docker状态 systemctl status docker2.5开机启动 systemctl enable docker2.6查看docker概要信息 …...
[MRCTF2020]PixelShooter
一个apk文件 jeb打开发现是apk文件 apk游戏逆向必须知道的知识: 一般关键数据在 Assets/bin/data/managed/assembly-csharp.dll这个文件里面 我不知道jeb为什么这里我没有 apk是个压缩包 直接解压 这个文件解压也可以发现flag {Unity_1S_Fun_233}...
vue实现的商品列表网页
一、商品列表效果如下 二、代码; vue实现的商品列表网页 , 图片在vue项目的Public文件夹里的 imgs中 <template><div class"common-layout"><!-- el-container:外层容器。 当子元素中包含 <el-header> 或 <el-foo…...
【泛微系统】e-cology非标配功能概览
关于泛微非标功能的功能编号、功能名称及支持版本 编号名称支持版本001考勤功能4.500.0124-9.00+KB900190206002短信通用接口5.000.0327+KB50001003 及以上版本004计划任务接口5.0+KB50001003及以上版本005集成登录接口6.0及以上版本006流程中自定义浏览框5.0+KB50001003及以上…...
Python基础教程(二十八):pip模块
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝Ὁ…...
通信系统概述
1.定义 通信系统(也称为通信网络)是利用各种通信线路将地理上分散的、具有独立功能的计算机系统和通信设备按不同的形式连接起来,依靠网络软件及通信协议实现资源共享和信息传递的系统。 2.概述 随着通信技术和网络技术的不断发展ÿ…...
http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解
文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞(Head-of-Line Blocking)1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间:1991年 特点: 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容࿰…...
Hadoop 面试题(四)
1. 简述Hadoop节点的动态上线下线的大概操作 ? 在Hadoop集群中,节点的动态上下线指的是在不停止整个集群服务的情况下,添加或移除节点。这种能力对于维护和扩展集群非常重要。以下是Hadoop节点动态上线下线的大概操作步骤: 动态…...
绽放光彩的小程序 UI 风格
绽放光彩的小程序 UI 风格...
电脑文件夹怎么加密?文件夹加密的5种方法
在数字化时代,信息安全显得尤为重要。对于个人电脑用户来说,文件夹加密是一种有效保护隐私和数据安全的方法。本文将介绍五种文件夹加密的方法,帮助您更好地保护自己的重要文件。 如何设置文件夹密码方法一:利用Windows系统自带的…...
异步复位同步释放
目录 描述 输入描述: 输出描述: 参考代码 描述 题目描述: 请使用异步复位同步释放来将输入数据a存储到寄存器中,并画图说明异步复位同步释放的机制原理 信号示意图: clk为时钟 rst_n为低电平复位 d信号输入…...
JupyterLab使用指南(七):JupyterLab使用 LaTeX 生成数学公式
在 JupyterLab 中,可以使用 LaTeX 语法生成复杂的数学公式。JupyterLab 内置对 LaTeX 的支持,使得我们可以方便地在 notebook 中编写和展示数学公式。以下是详细的步骤和示例。 1. 使用 LaTeX 生成数学公式 LaTeX 是一种专门用于排版数学公式的语言。J…...
docker 环境部署
1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号,这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包,下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …...
Spring中的ContextPath总结
Spring中的ContextPath总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. ContextPath的概念 在Spring中,ContextPath是指Web应用程序的上下文…...
C++设计模式——Composite组合模式
一,组合模式简介 真实世界中,像企业组织、文档、图形软件界面等案例,它们在结构上都是分层次的。将系统分层次的方式使得统一管理和添加不同子模块变得容易,在软件开发中,组合模式的设计思想和它们类似。 组合模式是…...
Android提供的LruCache类简介(1)
* If your cached values hold resources that need to be explicitly released, * override {link #entryRemoved}. * 如果你cache的某个值需要明确释放,重写entryRemoved() * If a cache miss should be computed on demand for the corresponding keys, * ov…...
【分布式系列】分布式锁timeout了怎么办?
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
System.getProperty()方法总结
System.getProperty()方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!System.getProperty()方法是Java中用于获取系统属性的方法之一。它允许我们访问J…...
大型语言模型在AMD GPU上的推理优化
Large language model inference optimizations on AMD GPUs — ROCm Blogs 大型语言模型(LLMs)已经改变了自然语言处理和理解,促进了在多个领域中的众多人工智能应用。LLMs在包括AI助手、聊天机器人、编程、游戏、学习、搜索和推荐系统在内的…...
Apple - Core Foundation Design Concepts
本文翻译整理自:Core Foundation Design Concepts(更新日期:2013-12-16 https://developer.apple.com/library/archive/documentation/CoreFoundation/Conceptual/CFDesignConcepts/CFDesignConcepts.html#//apple_ref/doc/uid/10000122i 文章…...
lua中的lfs库介绍
lua中的lfs库介绍 说明常用函数解析lfs.attributeslfs.chdirlfs.currentdirlfs.dirlfs.mkdirlfs.rmdirlfs.locklfs.touchlfs.linklfs.setmodelfs.symlinkattributes 说明 lfs是lua中的一个文件系统库,提供了更多高级的文件和目录操作功能,使得lua可以更方…...
PyCharm 快捷键积累
1、快速格式化:Ctrl Alt L Ctrl Alt L 快捷键在 PyCharm 中是用于格式化代码的,它不仅仅适用于 HTML 代码,而是适用于多种编程和标记语言。...
C++进阶之AVL树
个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 C进阶 算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.前言 二.插入 三.旋转 3.1右旋 …...