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

【server】3、注册中心与配置中心

1、服务注册与发现

1.1、consul

1.1.1 是什么

官网: Consul by HashiCorp

spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul

gitHub 官网 :GitHub - hashicorp/consul: Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

1.1.2 能干什么

1.1.3 怎么用

1.1.3.1 官网下载地址

安装网页:Install Consul | Consul | HashiCorp Developer

windows版本:

下载链接:Install | Consul | HashiCorp Developer

windows版本只有一个exe文件,进入对应的文件夹,通过cmd命令,在cmd命令面板中心开发模式运行:consul agent -dev

访问:http://localhost:8500

1.1.4、discovery

1.1.4.1 服务提供者
1.1.4.1.1 引入maven依赖

参考链接:Quick Start :: Spring Cloud Consul

<!--SpringCloud consul discovery -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
1.1.4.1.2 yml 配置

参考链接: Service Discovery with Consul :: Spring Cloud Consul

####Spring Cloud Consul for Service Discovery
spring:cloud:consul:discovery:instance-id: custom-service-idserviceName: myprefix-${spring.application.name}

1.1.4.1.3 修改启动类

@EnableDiscoveryClient
public class Main8001
{public static void main(String[] args){SpringApplication.run(Main8001.class,args);}
}

consul 发现结果:

1.1.4.2 服务消费者
1.1.4.2.1 引入maven 依赖
<!--SpringCloud consul discovery -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
1.1.4.2.2 yml 配置
spring:application:name: cloud-consumer-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}
1.1.4.2.3 修改启动类
@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul为注册中心时注册服务
public class Main80
{public static void main(String[] args){SpringApplication.run(Main80.class,args);}
}
1.1.4.2.4 修改服务提供者链接
@RestController
public class OrderController
{//硬编码//public static final String PaymentSrv_URL = "http://localhost:8001";//服务注册中心上的微服务名称public static final String PaymentSrv_URL = "http://cloud-payment-service";
}
1.1.4.2.5 修改RestTemplateConfig
@Configuration
public class RestTemplateConfig
{//添加负载均衡 LoadBalanced    @Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
}

结果:

1.2、nacos

1.2.1 是什么

官网:Nacos官网| Nacos 配置中心 | Nacos 下载| Nacos 官方社区 | Nacos 官网

gitHub 官网:GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.

1.2.2 能干什么

Nacos 提供了四大功能:

  • 服务发现和服务健康检查
  • 动态配置管理
  • 动态域名解析服务
  • 服务和元数据管理

1.2.3 怎么用

1.2.3.1 官网下载地址

官网安装地址:Nacos 快速开始 | Nacos 官网

windows 启动: 进行对应的bin目录 ,在cmd 下执行 startup.cmd -m standalone

访问:http://localhost:8848/nacos

1.2.4 discovery

1.2.4.1 服务提供者
1.2.4.1.1 改POM
<!--添加 nacos-discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.2.4.1.2 改YML
spring:cloud:nacos:discovery:server-addr: localhost:8848service:  ${spring.application.name}
1.2.4.1.3 改启动类
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan({"com.hc.cloud.mapper"})
public class Payment {public static void main(String[] args) {SpringApplication.run(Payment.class, args);}
}
1.2.4.1.4 改业务类
@RestController
public class PayAlibabaController
{@Value("${server.port}")private String serverPort;@GetMapping(value = "/pay/nacos/{id}")public String getPayInfo(@PathVariable("id") Integer id){return "nacos registry, serverPort: "+ serverPort+"\t id"+id;}
}
1.2.4.2 服务消费者
1.2.4.2.1 改POM
<!--nacos-discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--loadbalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
1.2.4.2.2 改YML
service-url:nacos-user-service: http://payment
1.2.4.2.3 修改启动类
@SpringBootApplication
@EnableDiscoveryClient
public class Main80 {public static void main(String[] args) {SpringApplication.run(Main80.class, args);}
}
1.2.4.2.4 修改RestTemplate
@Configuration
public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
1.2.4.2.5 修改业务类
@RestController
public class PaymentController {@Resourceprivate RestTemplate restTemplate;@Value("${service-url.nacos-user-service}")private String paymentUrl;@GetMapping("/consumer/consul/payment/get/all")public ResultData<List<PayVo>> getAllPayments() {return restTemplate.getForObject(paymentUrl + "/pay/get/all",  ResultData.class);}
}

1.3、zookeeper

1.3.1 是什么

1.3.2 能干什么

    • 统一命名服务
    • 统一配置管理
    • 统一集群管理
    • 服务器节点动态上下线
    • 软负载均衡

1.3.3 怎么用

下载页面地址:Apache ZooKeeper

zookeeper Getting Started Guide : ZooKeeper: Because Coordinating Distributed Systems is a Zoo

1.3.3.1 单机版配置
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
#解决 8080绑定异常
#org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands
#Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080
admin.serverPort=8888
1.3.3.2 集群版配置
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
admin.serverPort=8888

1.3.4 zookeeper 使用

1.3.4.1 服务器启动
#启动服务器
bin/zkServer.sh start
#客户端连接
bin/zkCli.sh -server 127.0.0.1:2181
1.3.4.2 改pom
<!-- spring-cloud-zookeeper -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zookeeper-discovery</artifactId><exclusions><exclusion><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId></exclusion></exclusions>
</dependency>
<!--选择对应zookeeper 服务的版本,这里选择的zookeeper版本为3.9.1-->
<!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
<dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.9.1</version>
</dependency>
1.3.4.3 改yaml
#对应的服务上,在common上配置不生效
spring:application:name: consumercloud:zookeeper:connect-string: 192.168.10.131:2181discovery:enabled: trueroot: /servicesregister: trueservice-url:zk-user-service: http://payment
1.3.4.4 改启动类
//添加 EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class Main80 {public static void main(String[] args) {SpringApplication.run(Main80.class, args);}
}
1.3.4.5 改config
@Configuration
public class RestTemplateConfig {//添加LoadBalanced@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
1.3.4.6 改业务类
@RestController
public class PaymentController {@Resourceprivate RestTemplate restTemplate;@Value("${service-url.zk-user-service}")private String paymentUrl;@GetMapping("/consumer/consul/payment/get/all")public ResultData<List<PayVo>> getAllPayments() {return restTemplate.getForObject(paymentUrl + "/pay/get/all",  ResultData.class);}
}

启动服务即可看到注册结果

请求正常

1.4、euraka

过时

1.5 注册中心比较

Nacos

Eureka

Consul

CoreDNS

ZooKeeper

一致性协议

CP+AP

AP

CP

-

CP

健康检查

TCP/HTTP/MYSQL/Client Beat

Client Beat

TCP/HTTP/gRPC/Cmd

-

Keep Alive

负载均衡策略

权重/metadata/Selector

Ribbon

Fabio

RoundRobin

-

雪崩保护

自动注销实例

支持

支持

支持

不支持

支持

访问协议

HTTP/DNS

HTTP

HTTP/DNS

DNS

TCP

监听支持

支持

支持

支持

不支持

支持

多数据中心

支持

支持

支持

不支持

不支持

跨注册中心同步

支持

不支持

支持

不支持

不支持

Spring Cloud集成

支持

支持

支持

不支持

支持

Dubbo集成

支持

不支持

支持

不支持

支持

Kubernetes集成

支持

不支持

支持

支持

不支持

2、配置中心

2.1 作用

统一集中管理,微服务的配置文件

2.2 各配置中心

2.2.1 consul

2.2.1.1 配置pom
<!--SpringCloud consul config-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2.2.1.2 配置yml

#在resource 下添加bootstrap.yml
# 配置bootstrap.yml
spring:###配置项目名    application:      name: cloud-payment-service    ####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ",",we update '-'format: YAML
#application.yml
server:port: 8001# ==========applicationName + druid-mysql8 driver===================
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: 123456profiles:active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置# ========================mybatis===================
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.atguigu.cloud.entitiesconfiguration:map-underscore-to-camel-case: true
2.2.1.3 consul yaml 配置格式
# consul 配置文件格式
# config/cloud-payment-service/data
#       /cloud-payment-service-dev/data
#       /cloud-payment-service-prod/data
#文件夹时,以/结尾

2.2.2 spring cloud conf

2.2.3 nacos

2.2.3.1 配置POM
<!--bootstrap-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--nacos-config-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.2.3.2 配置yml
#bootstrap.yml
# nacos配置
spring:application:name: nacos-config-clientcloud:nacos:discovery:server-addr: localhost:8848 #Nacos服务注册中心地址#指定IP地址ip: 127.0.0.1config:server-addr: localhost:8848 #Nacos作为配置中心地址file-extension: yaml #指定yaml格式的配置#application.yml
server:port: 3377spring:profiles:active: dev # 表示开发环境#active: prod # 表示生产环境#active: test # 表示测试环境
2.2.3.3 nacos yaml配置格式
# nacos端配置文件DataId的命名规则是:
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# 本案例的DataID是:nacos-config-client-dev.yaml

2.2.4 apollo

相关文章:

【server】3、注册中心与配置中心

1、服务注册与发现 1.1、consul 1.1.1 是什么 官网&#xff1a; Consul by HashiCorp spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul gitHub 官网 &#xff1a;GitHub - hashicorp/consul: Consul is a distributed, highly available, and data cent…...

【大数据】—量化交易实战案例(海龟交易策略)

声明&#xff1a;股市有风险&#xff0c;投资需谨慎&#xff01;本人没有系统学过金融知识&#xff0c;对股票有敬畏之心没有踏入其大门&#xff0c;今天用另外一种方法模拟炒股&#xff0c;后面的模拟的实战全部用同样的数据&#xff0c;最后比较哪种方法赚的钱多。 海龟交易…...

014-GeoGebra基础篇-快速解决滑动条的角度无法输入问题

有客户反馈&#xff0c;他的Geogebra一直有个bug&#xff0c;那就是输入角度最大值时总不按照他设定的展示&#xff0c;快被气炸了~ 目录 一、问题复现&#xff08;1&#xff09;插入一个滑动条&#xff08;2&#xff09;选择Angle&#xff08;3&#xff09;输入90&#xff0c;…...

Diffusion模型的微调和引导

留意后续更新&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 Diffusion模型的微调和引导 微调&#xff08;fine-tuning&#xff09;&#xff1a; 从一个已经训练过的模型开始训练&#xff0c;我们就可以从一个学会如何“去噪”的模型开始训练&#xff0c;相对于随机初始…...

零基础学MySQL:从入门到实践的完整指南

引言&#xff1a; MySQL&#xff0c;作为全球最受欢迎的开源关系型数据库管理系统之一&#xff0c;以其高性能、易用性和灵活性&#xff0c;在Web开发、数据分析等领域占据着举足轻重的地位。如果你是一位编程新手&#xff0c;想要踏入数据库管理的大门&#xff0c;本文将从零…...

澳蓝荣耀时刻,6款产品入选2024年第一批《福州市名优产品目录》

近日&#xff0c;福州市工业和信息化局公布2024年第一批《福州市名优产品目录》&#xff0c;澳蓝自主研发生产的直接蒸发冷却空调、直接蒸发冷却组合式空调机组、间接蒸发冷水机组、高效间接蒸发冷却空调机、热泵式热回收型溶液调湿新风机组、防火湿帘6款产品成功入选。 以上新…...

Frrouting快速入门——OSPF组网(一)

FRR简介 FRR是FRRouting的简称&#xff0c;是一个开源的路由交换软件套件。其作者源自老牌项目quaga的成员&#xff0c;也可以算是quaga的新版本。 使用时一般查看此文档&#xff1a;https://docs.frrouting.org/projects/dev-guide/en/latest/index.html FRR支持的协议众多…...

记录通过Cloudflare部署属于自己的docker镜像源

引言 由于最近国内无法正常拉取docker镜像&#xff0c;然而找了几个能用的docker镜像源发现拉取回来的docker镜像不是最新的版本&#xff0c;部署到Cloudflare里Workers 和 Pages&#xff0c;拉取docker 镜像成功&#xff0c;故记录部署过程。 部署服务 登录Cloudflare后&…...

波动方程 - 在三维图中动态显示二维波动方程的解就像水面波澜起伏

波动方程 - 在三维图中动态显示二维波动方程的解就像水面波澜起伏 flyfish 波动方程的求解结果通常不是一个单一的数值&#xff0c;而是一个函数或一组函数&#xff0c;这些函数描述了波随时间和空间的传播情况。具体来说&#xff0c;波动方程的解可以是关于时间和空间变量的…...

yum命令提示 错误:rpmdb: BDB0113 Thread/process 4153/139708200269632

一、报错信息 [rootDawn yum.repos.d]# yum clean all 错误&#xff1a;rpmdb: BDB0113 Thread/process 4153/139708200269632 failed: BDB1507 Thread died in Berkeley DB library 错误&#xff1a;db5 错误(-30973) 来自 dbenv->failchk&#xff1a;BDB0087 DB_RUNRECOVE…...

欢乐钓鱼大师游戏攻略:在什么地方掉称号鱼?云手机游戏辅助!

《欢乐钓鱼大师》是一款融合了休闲娱乐和策略挑战的钓鱼游戏。游戏中的各种鱼类不仅各具特色&#xff0c;而且钓鱼过程充满了挑战和乐趣。下面将为大家详细介绍如何在游戏中钓鱼&#xff0c;以及一些有效的钓鱼技巧&#xff0c;帮助你成为一个出色的钓鱼大师。 实用工具推荐 为…...

什么是构造函数?Java 中构造函数的重载如何实现?

构造函数&#xff0c;就像是建筑房屋时的奠基仪式&#xff0c;是Java类中一个特殊的方法&#xff0c;主要用于初始化新创建的对象。 每当创建一个类的新实例时&#xff0c;构造函数就会自动调用&#xff0c;负责为这个新对象分配内存&#xff0c;并对其进行必要的设置&#xf…...

Linux内核 -- ARMv7 与 ARMv8 中的 asmlinkage 作用及使用

ARMv7 与 ARMv8 中的 asmlinkage 作用及使用 asmlinkage 是一个宏&#xff0c;通常在内核代码中使用&#xff0c;用于定义调用约定&#xff0c;特别是指定函数的参数是通过栈传递而不是通过寄存器。它主要用于内核与汇编之间的接口函数&#xff0c;使得参数传递更加一致和明确…...

GPT提示词模板

BRTR 原则 # 背景&#xff08;Background&#xff09; - 描述任务的背景信息&#xff0c;包括任务的起因、目的、相关的历史信息或当前状况。 - 提供足够的背景信息以便让ChatGPT理解任务的上下文。 # 角色&#xff08;Role&#xff09; - 定义ChatGPT在任务中所扮演的角色&…...

WRF学习——使用CMIP6数据驱动WRF/基于ncl与vdo的CMIP6数据处理

动力降尺度 国际耦合模式比较计划&#xff08;CMIP&#xff09;为研究不同情景下的气候变化提供了大量的模拟数据&#xff0c;而在实际研究中&#xff0c;全球气候模式输出的数据空间分辨率往往较低&#xff08;>100Km&#xff0c;缺乏区域气候特征&#xff0c;为了更好地研…...

机器人控制系列教程之Delta机器人动力学分析

动力学简介 机器人动力学分析是已知各运动构件的尺寸参数和惯性参数的情况下,求解末端运动状态与主驱动力矩之间的函数关系。 意义:对并联机器人动力学分析的意义体现在: 为伺服电机的选型提供理论依据;获得动力学参数为目标函数的最优问题做性能评价指标;为高精度控制提…...

VIM介绍

VIM&#xff08;Vi IMproved&#xff09;是一种高度可配置的文本编辑器&#xff0c;用于有效地创建和更改任何类型的文本。它是从 vi 编辑器发展而来的&#xff0c;后者最初是 UNIX 系统上的一个文本编辑器。VIM 以其键盘驱动的界面和强大的文本处理能力而闻名&#xff0c;是许…...

课设:选课管理系统(Java+MySQL)

在本博客中&#xff0c;我将介绍用Java、MySQL、JDBC和Swing GUI开发一个简单的选课管理系统。 技术栈 Java&#xff1a;用于编写应用程序逻辑MySQL&#xff1a;用于存储和管理数据JDBC&#xff1a;用于连接Java应用程序和MySQL数据库Swing GUI&#xff1a;用于构建桌面应用程…...

动态规划 剪绳子问题

给一段长度为n的绳子&#xff0c;请把绳子剪成m段&#xff0c;每段绳子的长度为k[0],k[1],k[2],k[3]....k[m].请问k[0]k[1]k[2].....*k[m]的最大乘积为多少 #include <vector> // 包含vector头文件 #include <algorithm> // 包含algorithm头文件&#xff0c;用于m…...

上位机图像处理和嵌入式模块部署(mcu项目1:实现协议)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 这种mcu的嵌入式模块理论上都是私有协议&#xff0c;因为上位机和下位机都是自己开发的&#xff0c;所以只需要自己保证上、下位机可以通讯上&…...

BetterJoy终极指南:3分钟让你的Switch手柄变身PC游戏神器

BetterJoy终极指南&#xff1a;3分钟让你的Switch手柄变身PC游戏神器 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.c…...

告别多头对接!DMXAPI 为企业打造国产大模型 “统一入口”

一、企业 AI 落地的普遍痛点&#xff1a;被接口和平台消耗的成本在企业数字化转型的浪潮中&#xff0c;AI 大模型已经成为标配&#xff0c;但很多企业在落地时&#xff0c;都会陷入一个共同的困境&#xff1a;为了满足不同业务场景的需求&#xff0c;需要同时对接 DeepSeek、阿…...

3个实用场景教你轻松解锁网易云音乐NCM加密文件:ncmdumpGUI完整指南

3个实用场景教你轻松解锁网易云音乐NCM加密文件&#xff1a;ncmdumpGUI完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的…...

网安学习第24天 PHP安全——PHP反序列化

一、序列化与反序列化 1、序列化serialize() 序列化是什么&#xff1f;序列化就是把程序中的对象、数组、结构体等复杂数据&#xff0c;转换成可以存储或传输的格式。 简单说&#xff1a; 把“内存里的对象”变成“字符串/字节流”。 例如 PHP 中有一个对象&#xff1a; $u…...

告别RaiDrive广告!用开源rclone+Alist,免费把阿里云盘/百度网盘变成电脑本地硬盘

开源方案实战&#xff1a;用rcloneAlist打造无广告的云盘本地化体验 每次打开RaiDrive时弹出的广告窗口是否让您感到困扰&#xff1f;商业软件的收费模式是否让您犹豫不决&#xff1f;今天&#xff0c;我们将彻底解决这些问题。通过开源工具Alist和rclone的组合&#xff0c;您不…...

从Stable Diffusion到DiT:为什么说Transformer是扩散模型的下一站?

从Stable Diffusion到DiT&#xff1a;Transformer如何重塑扩散模型的未来 在图像生成领域&#xff0c;扩散模型正经历着从U-Net架构向Transformer架构的范式转移。这一转变不仅仅是技术组件的简单替换&#xff0c;而是代表着生成式AI在可扩展性、训练效率和模型容量方面的重大突…...

AVR+ESP8266双核架构打造独立WiFi天气显示器:从硬件设计到软件实现

1. 项目概述&#xff1a;一个独立WiFi天气显示器的诞生几年前&#xff0c;我琢磨着在书桌上放一个能实时显示天气信息的小玩意儿&#xff0c;市面上成品要么功能单一&#xff0c;要么价格不菲&#xff0c;要么数据源依赖复杂的服务器。于是&#xff0c;我决定自己动手&#xff…...

DeepSeek注释质量跃迁路径(附12个真实项目对比数据+可复用Prompt模板)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek注释质量跃迁路径&#xff08;附12个真实项目对比数据可复用Prompt模板&#xff09; 高质量代码注释不再是“锦上添花”&#xff0c;而是模型理解意图、团队高效协同与长期可维护性的核心基础设施。…...

VisualCppRedist AIO:Windows系统依赖问题终极解决方案,一键修复所有VC++运行库

VisualCppRedist AIO&#xff1a;Windows系统依赖问题终极解决方案&#xff0c;一键修复所有VC运行库 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经…...

程序员的物理级打字肌肉记忆训练指南:从一指禅到无意识盲打的科学路径

程序员的物理级打字肌肉记忆训练指南&#xff1a;从一指禅到无意识盲打的科学路径 在日常写代码或重构时&#xff0c;你是否遇到过这种场景&#xff1a; 脑子里已经构思好了完美的重构逻辑&#xff0c;但在输入 >、{} 或 _ 时&#xff0c;手指本能地一顿&#xff0c;视线不…...