SpringcloudAlibaba详解---超详细

简介

Spring Cloud Alibaba是阿里巴巴结合自身的微服务实践开源的微服务全家桶,我个人觉得其组件比Spring Cloud 中的组件更加好用和强大。并且对的Spring Cloud组件做了很好的兼容。比如在Spirng Cloud Alibaba中依然可以使用Feign作为服务调用方式,使用Eureak做服务注册发现等等。

主要功能

1.服务注册和发现(nacos):可以注册服务,并且客户可以使用Spring托管的bean(自动集成功能区)发现实例。注册中心。

2.分布式配置(nacos):支持分布式系统中的外部配置,配置更改时自动刷新。 配置中心

3.流控制和服务降级(Sentinel ):支持WebServlet,WebFlux-->(比Springmvc更高级)OpenFeign,RestTemplate,Dubbo访问限制和降级流的功能。它可以在运行时通过控制台实时修改限制和降级流的规则,并且还支持监视限制和降级度量标准。 - 服务熔断限流hystrix

4.Rpc服务:扩展Spring Cloud客户端RestTemplate(ribbon)和OpenFeign以支持调用Dubbo RPC服务。

5.分布式事务(seata):支持高性能且易于使用的分布式事务解决方案。

6.事件驱动:支持构建与共享消息系统连接的高度可扩展的事件驱动微服务。

7.阿里云对象存储:大规模,安全,低成本,高度可靠的云存储服务。支持随时随地在任何应用程序中存储和访问任何类型的数据。

8.阿里云SchedulerX:准确,高度可靠,高可用性的计划作业调度服务,响应时间在几秒钟内。

9.阿里云短信:阿里云短信服务覆盖全球,提供便捷,高效,智能的通信功能,帮助企业快速联系客户。

与奈飞对比

注册中心nacos

什么是nacos

Nacos致力于帮助您发现,配置和管理微服务。它提供了一组简单有用的功能,使您能够实现动态服务发现,服务配置,服务元数据和流量管理。Nacos使构建,交付和管理微服务平台变得更容易,更快捷。它是通过微服务或云原生方法支持以服务为中心的现代应用程序体系结构的基础架构。说的通俗一些,就是承担了奈飞框架中的Eureka的功能,相当于注册中心,但比Eureka更加智能与便捷。

如何安装nacos

官方提供了Nacos的服务端供我们下载使用,我们启动Nacos后将我们的微服务注册进入Nacos即可。

下载地址:[https://github.com/alibaba/nacos/releases]

启动nacos

nacos的启动也十分方便,在下载好的jar包目录下执行

- windows执行bin目录下的startup命令 :startup.cmd -m standalone 

- linux 执行 :sh startup.sh -m standalone

启动成功页面如下所示

 nacos的默认端口为8848,在启动成功后,用户即可访问nacos,访问地址为:(本地单机模式)http://127.0.0.1:8848/nacos/index.html

 登录的账号和密码均为:nacos

登录成功页面如图所示(笔者这里已经注册好了几个服务,故会有信息,第一次登录且未将服务注册到nacos的话,这里是没有信息的)

服务架构简单搭建

举例服务项目结构

微服务调用流程

Order-Service-20010提供订单的查询服务,Order-Client-30010调用Order-Service-20010提供的服务查询自身的订单信息,Order-Common作为公共服务,提供了相关实体类以及对应的无参有参构造方法

项目搭建

父工程的pom.xml

<!--公共的一些配置--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><!--SpringBoot--><parent><groupId> org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version></parent><!--SpringCloud--><dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.1.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--导入lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency></dependencies>

服务注册到nacos

Order-Service-20010配置

添加依赖
 <dependency><groupId>com.alibaba.cloud </groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
编写启动类 
@SpringBootApplication
@EnableDiscoveryClient
public class OrderServerStart {public static void main(String[] args) {SpringApplication.run(OrderServerStart.class);}
}
 编写配置文件yml
server:port: 20010
spring:application:name: Order-servercloud:nacos:discovery:server-addr: 127.0.0.1:8848

Order-Client-30010配置

添加依赖
<dependency><groupId>com.alibaba.cloud </groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
编写启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class OrderClientStart
{public static void main( String[] args ){SpringApplication.run(OrderClientStart.class);}
}
编写配置文件yml
server:port: 30010
spring:application:name: Order-clientcloud:nacos:discovery:server-addr: 127.0.0.1:8848

启动成功后,nacos当中便会看见注册成功的服务 

Nacos配置中心

客户端接入配置中心

概述

在《SpringCloud极简入门》中我们通过Spring Cloud Config作为统一配置文件管理中心,其实我们总结一下发现Spring Cloud Config使用起来总归比较麻烦。Nacos作为Spring Cloud Alibaba的一个重要组件,它不仅可以用作服务注册与发现,也可以用来替代Spring Cloud Config作为统一配置文件管理,而且他的使用更为简单和人性化。

如何实现

点击页面左上角的"+"按钮即可添加新的配置,不过需要注意的是,编写的后缀改为yaml,在项目中要将application.yml,修改为bootstrap.yml,并在内部进行相关的配置

导入依赖

<dependencies><!--        配置中心客户端--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- 服务注册与发现--><dependency><groupId>com.alibaba.cloud </groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.example</groupId><artifactId>springcloudalibaba-user-common</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

配置Controller

@RefreshScope  //刷新配置
@RestController
public class UserController {@Value("${temp.notify}")private String notify;@GetMapping("/user/{id}")public User getById(@PathVariable Long id){User user = new User(id,"root"+notify ,null);return user;}
}

修改yml配置

以修改order-client的yml为例

server:port: 30010
spring:application:name: Order-clientprofiles:active: devcloud:nacos:discovery:server-addr: 127.0.0.1:8848config:server-addr: 127.0.0.1:8848file-extension: yamlprefix: application-usergroup: DEFAULT_GROUP

测试

 root后多了一个1234,为什么呢?

因为笔者在nacos当中的配置文件中,定义了notify的值为1234,这样就表示配置中心配置成功

Sentinel限流控制

Sentinel和Hystrix

限流和熔断

限流 , 限制流量,这里的流量我们可以理解成请求数量,其实就是限制服务器的请求并发数量,为什么要这么做?如果不做限流,那么在大量并发请求下我们的服务器会慢慢的变慢然后顶不住压力而挂掉(类似堵车)。并不是说并发越大越好,有的时候我们的项目规模和业务决定了我们不需要那么大的并发性,当大量的并发请求访问到服务器时我们需要把部分请求拒绝在外,这个是流量限制 - 限流。

熔断机制在在[《Spring Cloud 极简入门》)中有详细的解释,熔断机制是对服务调用链路的保护机制,如果链路上的某个服务不可访问,调用超时,发生异常等,服务会进行发熔断,触发降级返回托底数据。简单理解就是当服务器不可访问,可以返回一些预先准备好的兜底数据给用户,比如友好的提示信息,不至于直接向客户抛出异常。

Hystrix的熔断和资源隔离

其实在[《Spring Cloud 极简入门》]中我们已经学习过Hystrix的熔断和资源隔离机制,它的资源隔离可以通过线程池隔离和信号量隔离两种方式来实现对流量的控制。Hystrix相比Sentinel来说它的线程池隔离(限流)会造成线程上下切换对资源的消耗比较大;Hystrix使用的信号量进行资源的隔离效果不错,但是无法对慢调用进行自动降级。

Sentinel定义

Sentinel诞生于阿里巴巴,其主要目标是流量控制和服务熔断,2018年,Sentinel演变为一个开源项目现如今成为了Spring Cloud Alibaba的一个子项目。Sentinel是通过限制并发线程的数量来减少不稳定资源的影响,而不是使用线程池,省去了线程切换的性能开销。

当资源的响应时间变长时,线程将开始被占用。当线程数累积到一定数量时,新的传入请求将被拒绝。反之亦然,当资源恢复并变得稳定时,占用的线程也将被释放,新请求将被接受。

除了限制并发性外,Sentinel可以根据响应时间降级不稳定资源也是保证可靠性的有效方法。当资源的响应时间太大时,将在指定的时间窗口中拒绝所有对该资源的访问。-- 熔断机制

此外,Sentinel支持的熔断降级维度更多,可对多种指标进行流控、熔断,且提供了实时监控和控制面板,功能更为强大。

Sentinel客户端接入

导入依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

添加yml配置

spring:cloud:sentinel:transport:dashboard: localhost:1111

资源限流实现 

在Controller中添加一个Sentinelresource注解

 @SentinelResource(value = "getUser",blockHandler = "LimitResource")

value表示要进行限流的方法,blockHandler表示限流之后系统调用的方法

 完整代码:

@RefreshScope
@RestController
@RequestMapping("/user")
public class UserController {@Value("${temp.notify}")private String notify;@Autowiredprivate OrderOpenFeignClient feignClient;//限制的资源@SentinelResource(value = "getUser",blockHandler = "LimitResource")
//    给资源取名user,后续通过名字来进行限流@GetMapping("/{id}")public User getUser(@PathVariable("id") Long id){//发起远程调用List<Order> orders =feignClient.getList(id);int i=new Random().nextInt(2);System.out.println(1/i);User user = new User(id,"root"+notify ,orders);return user;}public User LimitResource(@PathVariable("id") Long id,BlockException e){e.printStackTrace();return new User(-1L,"限流了",null);}}

 如何设置限流

在sentinel的当前页面,点击对应资源的流控按钮,进行流控策略的配置。

 

这里单机阈值设置为1,表示1s内的访问量超过一次,则会触发限流效果。 系统便会执行自己设定的LimitResource方法,笔者这里便不附上运行截图了,配置十分简单,配置完成也不需要重启服务,直接进行接口访问压测即可。

Sentinel流控效果

快速失败

快速失败:(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)是默认的流控方式,当流量达到阀值直接返回异常,QPS达到任何规则阈值后,后续请求就会立即拒绝,并抛出FlowException 异常。简单理解:并发太高,直接请求拒绝

warmup预热

Warm Up预热:(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,根据codeFactor(默认3)的值,从(阀值/codeFactor)为初始阀值,经过预热时长,才到达设置的QPS的阀值,即预热/冷启动方式。简单理解:慢慢的增大处理并发的能力

排队等待

排队等待(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER),忽然增加的请求并发量达到了限流阈值后续请求会被拒绝,有时候我们可能更希望后续的请求可以加入队列进行排队,慢慢执行,而不是直接拒绝请求,这种方式后严格控制请求通过的时间间隔,也即是让请求以均匀的速度通过,对应的是漏桶算法,这种方式主要用于处理间隔性突发的流量,例如消息队列。 简单理解:突发流量处理不过来,让请求排队。

Sentinel熔断

概述

什么是熔断

Sentinel除了流控还提供了服务熔断和降级机制,服务之间的调用关系错综复杂,微服务的调用链上的某些服务资源不稳定(宕机,异常,超时)可能会导致可能请求的失败和请求的堆积,调用链产生连锁反应可能会导致整个微服务架构瘫痪。服务熔断降级机制是保障高可用的重要措施之一。

Sentinel熔断

Sentinel的服务熔断机制会对调用链上的某个不稳定(宕机,异常,超时)的资源,做出请求限制,快速失败,避免影响到其它的服务而导致级联错误。资源熔断后,在后续的一定时间(时间窗口)之内,对该服务的请求都自动熔断,抛出 DegradeException异常。Sentinel拥有比Hystrix更强大和丰富的功能,能满足我们的各种应用场景,并且经历过淘宝双十一的考验,是微服务架构中熔断机制的不二选择。

熔断规则

平均响应RT

平均响应时间 (DEGRADE_GRADE_RT):当资源的平均响应时间超过阈值(DegradeRule 中的 count,以 ms 为单位)之后,资源进入准降级状态。如果接下来 1s 内持续进入 5 个请求(即 QPS >= 5),它们的 RT 都持续超过这个阈值,那么在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地熔断(抛出 DegradeException)。注意 Sentinel 默认统计的 RT 上限是 4900 ms,超出此阈值的都会算作 4900 ms,若需要变更此上限可以通过启动配置项 -Dcsp.sentinel.statistic.max.rt=xxx 来配置。

异常比例 

异常比例(DEGRADE_GRADE_EXCEPTION_RATIO):每秒请求量 > 5 ,当资源的每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,对这个方法的调用都会自动地返回。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

异常数 

异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

慢调用比例

熔断策略慢调用比例是以慢调用数量的比例作为阈值,首先需要设置最大 RT(即最大的响应时间,用于鉴定是否是慢调用),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数大于设置的最小请求数,并且慢调用的比例大于比例阈值,则接下来的请求会自动熔断,熔断时间为设置的熔断时长。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若在HALF-OPEN状态下有一个请求响应时间小于 最大RT 则结束熔断,否则继续熔断。

熔断实战示例

导入依赖

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

配置yml

feign:sentinel:enabled: true #熔断

配置OpenFeign

接口

@FeignClient(value = "Order-server")
public interface OrderOpenFeignClient {@GetMapping("/order/{id}")public List<Order> getList(@PathVariable("id") Long id);
}

 熔断返回fallback

@Component
public class UserFallBack implements FallbackFactory<OrderOpenFeignClient> {@Overridepublic OrderOpenFeignClient create(Throwable throwable) {return id ->Arrays.asList(new Order(-2L,"服务暂时不可用","请您稍后再试"));}
}

修改Controller

在SentinelResource中添加相关属性值

Controller完整代码

@RefreshScope
@RestController
@RequestMapping("/user")
public class UserController {@Value("${temp.notify}")private String notify;@Autowiredprivate OrderOpenFeignClient feignClient;//限制的资源@SentinelResource(value = "getUser",blockHandler = "LimitResource",blockHandlerClass = UserFallback.class,fallback = "Error")
//    给资源取名user,后续通过名字来进行限流@GetMapping("/{id}")public User getUser(@PathVariable("id") Long id){//发起远程调用List<Order> orders =feignClient.getList(id);int i=new Random().nextInt(2);System.out.println(1/i);User user = new User(id,"root"+notify ,orders);return user;}//方案1
//    public User LimitResource(@PathVariable("id") Long id,BlockException e){
//        e.printStackTrace();
//        return new User(-1L,"限流了",null);
//    }public User Error(@PathVariable("id") Long id){return new User(-1L,"熔断数据集",null);}
}

因为在这里,写了一个Error方法,并且在SentinelResource中添加了fallback="Error"所以fallback返回的将是Error的内容。 

测试结果:

写在最后:

SpringCloudAlibaba是一款优秀的微服务架构,在市面上有着广泛的应用。这篇文章介绍了SpringCloudAlibaba的一些基本使用,适合初学者,希望能够给大家带来帮助。笔者小,中,大厂均有面试经验,目前正在从事全栈开发工作,坚持每日分享java全栈开发知识与相关的面试真题,希望能够给大家带来帮助,同大家共同进步 

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

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

相关文章

Mac如何在某个目录下快速打开iTerm2

最近喜欢上用Mac了&#xff0c;为了让自己用的更顺手和快速&#xff0c;设置了一堆快捷键&#xff0c;这里主要记录一下如何在某个文件夹下快速打开某一个软件。 然后你要快速再某一个文件夹路径下打开iTerm2这个软件&#xff0c;就鼠标选中文件夹&#xff0c;然后直接按快捷键…

一文带你搞懂C++运算符重载

7. C运算符重载 C运算符重载 什么是运算符重载 运算符重载赋予运算能够操作自定义类型。 运算符重载前提条件&#xff1a; 必定存在一个自定义类型 运算符重载实质: 就是函数调用 友元重载 类重载 在同一自定义类型中&#xff0c;一个运算符只能被重载一次 C重载只能重载…

2024年国际高校数学建模竞赛问题B:空间迁移计划和战略 成品文章分享

2024年国际高校数学建模竞赛问题B&#xff1a;空间迁移计划和战略&#xff08;2024 International Mathematics Molding Contest for Higher Education (IMMCHE)Problem B: Space Migration Program and Strategy&#xff09; 星际迁移计划中的资源分配与风险管理策略研究 摘…

【计算机网络】数据链路层实验

一&#xff1a;实验目的 1&#xff1a;学习WireShark软件的抓包操作&#xff0c;分析捕获的以太网的MAC帧结构。 2&#xff1a;学习网络中交换机互相连接、交换机连接计算机的拓扑结构&#xff0c;理解虚拟局域网&#xff08;WLAN&#xff09;的通信机制。 3&#xff1a;学习…

什么材质的挖耳勺好用?硬核上佳产品分享!

耳道健康随着生活品质的提高&#xff0c;逐渐被大家重视。因为它会直接影响我们的听力和卫生健康&#xff0c;如果长时间不清理&#xff0c;很容易堵塞在耳膜里导致耳鸣头晕等状况。挖耳勺的材质非常多&#xff0c;有铁质、不锈钢、软硅胶等等&#xff0c;那么什么材质的挖耳勺…

2024年国际高校数学建模竞赛问题B:空间迁移计划和战略完整思路 模型 代码 结果分享(仅供学习)

2024年国际高校数学建模竞赛问题B&#xff1a;空间迁移计划和战略&#xff08;2024 International Mathematics Molding Contest for Higher Education (IMMCHE)Problem B: Space Migration Program and Strategy&#xff09; 我们的未来有两种可能性:第一&#xff0c;我们将留…

国科大作业考试资料《人工智能原理与算法》2024新编-第十三次作业整理

1、假设我们从决策树生成了一个训练集&#xff0c;然后将决策树学习应用于该训练集。当训练集的大小趋于无穷时&#xff0c;学习算法将最终返回正确的决策树吗&#xff1f;为什么是或不是&#xff1f; 本次有两个参考&#xff1a; 参考一&#xff1a; 当训练集的大小趋于无穷…

飞牛爬虫FlyBullSpider 一款简单方便强大的爬虫,限时免费 特别适合小白!用它爬下Boss的2024年7月底Java岗位,分析一下程序员就业市场行情

一、下载安装FlyBullSpider 暂时支持Window,现在只在Win11上做过测试 1 百度 点击百度网盘 下载 链接&#xff1a;https://pan.baidu.com/s/1gSLKYuezaZgd8iqrXhk8Kg 提取码&#xff1a;Fly6 2 csdn https://download.csdn.net/download/fencer911/89584687 二、体验初…

C++(入门1)

C参考文档 Reference - C Reference C 参考手册 - cppreference.com cppreference.com 第一个C程序 #include<stdio.h> int main() {printf("Hello C\n");return 0; }由上述代码可知C是兼容C语言 第一个C标准程序 #include<iostream> using names…

Python教程(一):环境搭建及PyCharm安装

目录 引言1. Python简介1.1 编译型语言 VS 解释型语言 2. Python的独特之处3. Python应用全览4. Python版本及区别5. 环境搭建5.1 安装Python&#xff1a; 6. 开发工具&#xff08;IDE&#xff09;6.1 PyCharm安装教程6.2 永久使用教程 7. 编写第一个Hello World结语 引言 在当…

NO.1 Hadoop概述

目录 1.1 Hadoop是什么​编辑 1.2 Hadoop优势​编辑​编辑 1.3 Hadoop组成​编辑 1.3.1 HDFS架构概述 ​编辑 1.3.2 YARN架构概述 ​编辑 1.3.3 MapReduce架构概述​编辑 1.3.4 HDFS、YARN、MapReduce三者关系 1.4 大数据技术生态体系 1.5 推荐系统框架图 1.1 Hadoop…

Prometheus各类监控及监控指标和告警规则

目录 linux docker监控 linux 系统进程监控 linux 系统os监控 windows 系统os监控 配置文件&告警规则 Prometheus配置文件 node_alert.rules docker_container.rules mysql_alert.rules vmware.rules Alertmanager告警规则 consoul注册服务 Dashboard JSON…

ARM32开发——PWM蜂鸣器案例

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 需求原来的驱动移植操作替换初始化 更新Play函数完整代码 需求 通过控制PB9来播放音乐&#xff0c;PB9对应的定时器通道&#xff1…

Web3 职场新手指南:从技能到素养,求职者如何脱颖而出?

随着 2024 年步入下半年&#xff0c;Web3 行业正在经历一系列技术革新。通过改进的跨链交互机制和兼容性&#xff0c;逐步消除市场碎片化的问题。技术的进步为开发者和用户都打开了新的前景。然而&#xff0c;复杂的技术和快速变化的市场环境也让许多新人望而却步。求职者如何找…

【数据结构】双向带头循环链表(c语言)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 1.双向带头循环链表的概念和结构定义 2.双向带头循环链表的实现 2.1 方法声明 2.2 方法实现 2.2.1 创建新节点 2.2.2 初始化 2.2.3 …

【基于yolo转onnx 量化测试】

1、 训练模型转onnx 和量化 from ultralytics import YOLOmodel_path "yolov10/runs/train8/weights/best.pt" model YOLO(model_path) # 载入官方模型 # 导出模型 model.export(formatonnx,halfTrue)2、量化&#xff0c;减少了三分之一的存储空间从100M到30M …

当镜像地址出错的时候下载selenium的处理办法

当镜像地址出错的时候下载selenium的处理办法 一、原因 显示出错&#xff1a; C:\Users\xiaodaidai>pip install selenium3.4.0 Looking in indexes: Simple Index WARNING: Retrying (Retry(total4, connectNone, readNone, redirectNone, statusNone)) after connection …

学语言,看这里,如何快速掌握JavaScript?

本篇文章是基于会点c语言和会点python基础的&#xff0c;去更容易上手javascript 学习笔记分享✨&#x1f308;&#x1f44f;&#x1f44f;&#x1f451;&#x1f451; javascript目录 1.安装node.js&#xff1a;2.配置环境变量——创建NODE_HOME :3.变量与常量4.原生数据类型5…

C++ —— STL简介

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 2.STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本…

Java之父官宣退休

今年不用说大家都知道环境真的很差很差&#xff0c;裁员降薪已经是家常便饭&#xff0c;在这种严峻环境下&#xff0c;我们只能提升自己内功来抗风险&#xff0c;下面分享一本java之父推荐的优秀书籍。 刚过完自己 69 岁生日的两个月后&#xff0c;Java 之父 James Gosling&…