Spring Cloud详细入门使用

文章目录

  • Spring Cloud
    • 服务注册与发现
      • Eureka
        • Server 启动
        • 服务注册
        • 服务发现
      • Nacos
        • Server启动 (nacos2.2.0)
        • 服务注册
        • 服务发现
        • 服务集群
        • 命名空间
        • 配置中心
        • 集群搭建
    • 负载均衡
    • RPC远程过程调用
      • Feign使用
    • 网关
      • 路由断言工厂
      • 网关过滤工厂
      • 跨域处理
        • 全局跨域配置
        • 单个微服务跨域配置
    • 限流 熔断 降级

Spring Cloud

与springboot版本对应关系

在这里插入图片描述

Springcloud-alibaba版本对应

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

在这里插入图片描述

使用Springboot 2.6.13 springcloud 2021.0.1 spring-cloud-alibaba 2021.0.5.0


<properties><spring-boot.version>2.6.13</spring-boot.version><spring-cloud.version>2021.0.1</spring-cloud.version><spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version></properties>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

服务注册与发现

Eureka

Server 启动
  1. 引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.在启动类上添加注解 @EnableEurekaServer

3.配置文件 application.properties

spring.application.name=eureka-app
server.port=20020
eureka.client.service-url.defaultZone=http://127.0.0.1:20020/eureka

4.启动后访问 http://127.0.0.1:20020

在这里插入图片描述

服务注册

新建服务1

1.引入依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.添加配置

spring.application.name=link1
server.port=9000
eureka.client.service-url.defaultZone=http://127.0.0.1:20020/eureka

3.创建controller

@RequestMapping("service1")
@RestController
public class Link1Controller {@GetMapping("link1")public String link1(){return "微服务链路1执行完毕";}
}

重复以上,在创建一个服务2

spring.application.name=link2
server.port=9001
eureka.client.service-url.defaultZone=http://127.0.0.1:20020/eureka@RequestMapping("service2")
@RestController
public class Link2Controller {@GetMapping("link2")public String link2(){return "微服务链路2执行完毕";}
}

测试可以访问以上两个服务的接口,查看eureka 发现注册成功

在这里插入图片描述

服务发现

跨服务调用使用应用层的http协议发送请求, 使用RestTemplate进行

注入RestTemplate

@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){return new RestTemplate();
}

编写新的controller

@RequestMapping("service1")
@RestController
public class Link1Controller {@Autowiredprivate RestTemplate restTemplate;@GetMapping("link1")public String link1(){String url = "http://link2/service2/link2";String res = restTemplate.getForObject(url, String.class);return "微服务链路1执行完毕"+res;}}

注意: 必须在restTemplate上添加@LoadBalanced注解,否则无法将服务名解析为ip:port并使用ribbon进行负载均衡

抛出UnknownHostExecption异常

报错信息如下:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://link2/service/link2": link2; nested exception is java.net.UnknownHostException: link2] with root causejava.net.UnknownHostException: link2at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_392]at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) ~[na:1.8.0_392]at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_392]at java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_392]at java.net.Socket.connect(Socket.java:556) ~[na:1.8.0_392]

Nacos

在这里插入图片描述

Server启动 (nacos2.2.0)

修改配置 application.properties

spring.datasource.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

创建数据库nacos, 执行该目录下的sql文件创建表结构

在这里插入图片描述

单机启动命令

startup.cmd -m standalone

在这里插入图片描述

服务注册
  1. 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 添加配置
spring.application.name=link1
server.port=9002
spring.cloud.nacos.server-addr=127.0.0.1:8848

3.编写controller并启动, 访问 http://localhostL8848/nacos

在这里插入图片描述

服务发现

https://blog.csdn.net/weixin_43887184/article/details/124036205

必须添加loadbalancer依赖,否则无法远程调用

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
服务集群
spring.cloud.nacos.discovery.cluster-name=xian
命名空间

不同环境相互隔离

spring.cloud.nacos.discovery.namespace=ba332e10-ef24-4e05-b1c2-3f903df60fde
配置中心

引入依赖

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

在nacos中编写配置信息:

在这里插入图片描述

  • Data ID: 应用名-profile.后缀 (yaml 或者 properties)

添加bootstrap依赖, spring cloud2.4后,不在优先读取bootstrap文件

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

编写bootstrap.properties文件, 包括应用名 profile 文件后缀, 配置文件所在命名空间

spring.application.name=link1
spring.profiles.active=dev
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.namespace=ba332e10-ef24-4e05-b1c2-3f903df60fde
prop2From=bootstrap_yaml

编写controller, 使用@Value注入所写配置信息并测试

@Slf4j
@RequestMapping("service1")
@RestController
public class Link1Controller {@Autowiredprivate RestTemplate restTemplate;@Value("${propFrom}")private String p1;@Value("${prop2From}")private String p2;@Value("${prop3From}")private String p3;@GetMapping("link1")public String link1(){String url = "http://link2/service2/link2";String res = restTemplate.getForObject(url, String.class);return "微服务链路1执行完毕"+res;}@GetMapping("getProp")public String getP(){log.info(p1);log.info(p2);log.info(p3);return p1+p2+p3;}
}

查看日志,或者接口返回信息即可看到成功读取

2024-01-16 16:52:08.010  INFO 14176 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : nacos8848
2024-01-16 16:52:08.011  INFO 14176 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : bootstrap_yaml
2024-01-16 16:52:08.011  INFO 14176 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : app_yaml

nacos8848为nacos中的配置propFrom,成功注入到p1

prop2From为bootstrap中的自定义配置

prop3From为application.properties中定义

配置动态更新方式:

  • 使用@RefreshScope注解,作用于注入远程配置的类上
  • 不使用@Value注解, 使用@ConfigurationProperties注解代替,无须@RefreshScope即可动态更新 未成功

多环境配置共享

微服务启动会从nacos读取以下配置:

  • [spring.application.name]-[spring.profiles.active].yaml
  • [spring.application.name].yaml (共享配置可以放在这里)

在这里插入图片描述

多个不同微服务配置共享

配置信息:

在这里插入图片描述

spring.cloud.nacos.config.extension-configs[0].data-id=extend_common.properties
spring.cloud.nacos.config.shared-configs[0].data-id=shared_common.properties
@Slf4j
@RequestMapping("service")
@RestController
@RefreshScope
//@ConfigurationProperties
public class Link1Controller {@Autowiredprivate RestTemplate restTemplate;@Value("${propFrom}")private String p1;@Value("${prop2From}")private String p2;@Value("${prop3From}")private String p3;@Value("${prop4From}")private String p4;@Value("${prop5From}")private String p5;@Value("${prop6From}")private String p6;@GetMapping("link1")public String link1(){String url = "http://link2/service/link2";String res = restTemplate.getForObject(url, String.class);return "微服务链路1执行完毕"+res;}@GetMapping("getProp")public String getP(){log.info(p1);//log.info(propFrom);log.info(p2);log.info(p3);log.info(p4);log.info(p5);log.info(p6);return p1+p2+p3+p4+p5+p6;//return propFrom+p2+p3;}}

访问getProp接口, 日志如下:

2024-01-17 10:41:20.565  INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : nacos_props
2024-01-17 10:41:20.565  INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : bootstrap_yaml
2024-01-17 10:41:20.565  INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : app_yaml
2024-01-17 10:41:20.565  INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : link1_props
2024-01-17 10:41:20.566  INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : extend_common
2024-01-17 10:41:20.566  INFO 6636 --- [nio-9002-exec-1] org.zbq.controller.Link1Controller       : shared_common

其中p1来自nacos中的 link1-dev.properties, p2来自本地bootstrap.properties, p3来自本地application.properties

p4来自nacos中link1.properties p5来自nacos中extend_common.properties,p6来自nacos中shared_common.properties

在这里插入图片描述

集群搭建

在conf目录下添加cluster.conf文件,内容为:

127.0.0.1:8846
127.0.0.1:8847
127.0.0.1:8848

将修改好的nacos目录复制2份,修改复制nacos中application.properties端口为8846和8847

在这里插入图片描述

依次启动即可 启动命令

startup.cmd

启动中可能会报错:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grpcClusterServer': Invocation of init method failed; nested exception is java.io.IOException: Failed to bind

这是由于:

在这里插入图片描述

即1个8848端口的nacos还会占用9848,9849,7848端口, 因此重新配置cluster.conf文件以及设置nacos端口

127.0.0.1:8844
127.0.0.1:8846
127.0.0.1:8848

在这里插入图片描述

负载均衡

在这里插入图片描述

eureka包下已经默认有loadbalancer依赖

从 Spring Cloud 2020.0.0-M1 开始, 移除ribbon

在这里插入图片描述

目前只有两个默认的策略 轮询和随机

在这里插入图片描述

RPC远程过程调用

Feign使用

  1. 引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.启动类添加 @EnableFeignClients注解

3.编写接口 (复用Spring MVC的注解)

@FeignClient("link2")
public interface Link2Client {@GetMapping("/service/link2")String getLink2();
}

4.在controller中注入并使用

@RequestMapping("service1")
@RestController
@RefreshScope
public class Link1Controller {@Autowiredprivate Link2Client link2Client;@GetMapping("link1")public String link1(){String res = link2Client.getLink2();return "微服务链路1执行完毕 "+res;}
}

在当前版本下,feign默认开启使用Apache HttpClient作为底层,使用默认配置即可

网关

Spring Cloud Gateway

网关作用

  • 鉴权
  • 路由
  • 限流

使用:

1.引入依赖 (只要是调用其他服务必须引loadbalancer, 否则无法发现服务)

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

2.编写配置文件

spring:application:name: gatewaycloud:nacos:server-addr: http://127.0.0.1:8848discovery:namespace: ba332e10-ef24-4e05-b1c2-3f903df60fdecluster-name: xiangateway:routes:- id: link1uri: lb://link1predicates:- Path=/service1/**- id: link2uri: lb://link2predicates:- Path=/service2/**server:port: 10001
  1. 访问: http://127.0.0.1:10001/service1/link1 和 http://127.0.0.1:10001/service2/link2 访问成功

路由断言工厂

(更详细的使用 https://www.hxstrive.com/subject/gateway/2605.htm)

  1. After

接受一个UTC格式的日期时间格式参数,表示在该时间点之后允许路由

spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2022-03-13T00:54:30.877+08:00[Asia/Shanghai] 
  1. Before

参数同上, 表示某个时间点之前允许路由

spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2024-05-20T00:54:30.877+08:00[Asia/Shanghai]
  1. Between

跟两个参数, datetime1 datetime2 表示在这个时间段内允许路由

spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2024-05-20T00:00:00.000+08:00[Asia/Shanghai],2024-05-21T00:00:00.000+08:00[Asia/Shanghai]
  1. Cookie

接两个参数, key 和 value, value可以为正则表达式, 即只有携带该cookie key且value匹配才可以路由

spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=chocolate, ch.p
  1. Header
spring:cloud:gateway:routes:- id: header_routeuri: http://example.orgpredicates:- Header=X-Request-Id, \d+

6.Host (请求头中)

spring:cloud:gateway:routes:- id: host_routeuri: https://example.orgpredicates:- Host=**.somehost.org,**.anotherhost.org

7.Method

spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET,POST

上述示例表示只有 GET和POST请求允许路由

8.Path

根据请求路径匹配

spring:gateway:routes:- id: link1uri: lb://link1predicates:- Path=/service1/**- id: link2uri: lb://link2predicates:- Path=/service2/**

9.Query

请求参数中含有名为green的参数即可

spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=green

请求参数中有名为red, 值与gree.匹配的参数时才可访问

spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=red, gree.

10.RemoteAddr

位于该网段下的ip才可访问

spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24

11.Weight

spring:cloud:gateway:routes:- id: weight_highuri: https://weighthigh.orgpredicates:- Weight=group1, 8- id: weight_lowuri: https://weightlow.orgpredicates:- Weight=group1, 2

80%请求访问weighthigh.org, 20%请求访问weightlow.org

网关过滤工厂

  1. AddRequestHeader
  2. RemoveRequestHeader
  3. AddResponseHeader
  4. RemoveResponseHeader
  5. RequestRateLimiter

… 更多请参考https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/gatewayfilter-factories.html

默认过滤器,对所有的路由生效

spring:cloud:gateway:default-filters:- AddResponseHeader=X-Response-Default-Red, Default-Blue- PrefixPath=/httpbin

全局过滤器

自定义编码实现

@Component
@Order(-1)
public class CustomGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {return null;}
}

过滤器 order值越小,优先级越高

order值相同时, 顺序为: defaultFilter -> 路由过滤器 -> GlobalFilter

跨域处理

全局跨域配置
spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowedOrigins: "https://docs.spring.io"allowedMethods:- GET
  • /** 表示作用于所有请求
  • allowedOrigins: 允许哪些网站的跨域请求
  • allowedMethods: 允许跨域的请求方式
单个微服务跨域配置
spring:cloud:gateway:routes:- id: cors_routeuri: https://example.orgpredicates:- Path=/service/**metadata:corsallowedOrigins: '*'allowedMethods:- GET- POSTallowedHeaders: '*'maxAge: 30

限流 熔断 降级

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 919 (Div. 2) A~E

A. Satisfying Constraints(模拟) 题意&#xff1a; 给出 n n n个限制条件&#xff0c;问有多少个数字 k k k同时满足这些限制条件。 限制条件分为以下三种&#xff1a; k k k必须大于等于给出的一些数字 x x x k k k必须小于等于给出的一些数字 x x x k k k不能与给出的…

定时器开发基础

1定时器的基本概述 通过滴漏和漏沙瓶这两个例子简单讲述定时器的基本工作原理。 STM32的常见的定时器资源&#xff1a; 系统嘀嗒定时器SysTick、看门狗定时器WatchDog、实时时钟RTC、基本定时器、通用定时器、高级定时器。 系统嘀嗒定时器SysTick &#xff1a;这是一个集成在C…

JavaScript 自定义分页组件

仿boostrap 前端分页组件的实现 一 写一个前端自定义分页组件&#xff0c;需要考虑以下问题 需要一个<ul id"pagination"></ul>标签 total; // 总数据的数量 pageSize; // 一页显示数量 pageIndex; // 当前页 二 实现细节 编写html文件 index.html…

蓝桥杯(C++ 整数删除 优先队列 )

优先队列&#xff1a; 优先队列具有队列的所有特性&#xff0c;包括队列的基本操作&#xff0c;只是在这基础上添加了内部的一个排序&#xff0c;它本质是一个堆实现的。 1.头文件&定义 #include <queue> #include <functional> //greater<>// 定义 p…

2023 年顶级前端工具

谁不喜欢一个好的前端工具&#xff1f;在本综述中&#xff0c;您将找到去年流行的有用的前端工具&#xff0c;它们将帮助您加快开发工作流程。让我们深入了解一下&#xff01; 在过去的 12 个月里&#xff0c;我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

经典数据库练习题及答案

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

JavaScript DOM可以做什么?

1、通过id获取标签元素 DOM是文档对象模型&#xff0c;它提供了一些属性和方法来方便我们操作document对象&#xff0c;比如getElementById()方法可以通过某个标签元素的id来获取这个标签元素 // 用法 window.document.getElementById(id); // 例子 <!DOCTYPE html> &l…

深度学习模型之yolov8实例分割模型TesorRT部署-python版本

1 模型转换 从github上下载官方yolov8版本&#xff0c;当前使用的版本是2023年9月份更新的版本&#xff0c;作者一直在更新。官网地址 2 加载模型 模型的训练和测试在官方文档上&#xff0c;有详细的说明&#xff0c;yolov8中文文档这里不做过多说明&#xff0c;v8现在训练是…

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?-UFS篇

如果说SSD是赛道上的超级跑车&#xff0c;那UFS更像是专为智能汽车定制的高性能轻量化赛车。UFS采用串行接口技术&#xff0c;像是闪电侠一样&#xff0c;将数据传输的速度推向新高&#xff0c;大幅缩短了系统启动时间和应用程序加载时间&#xff0c;这对追求即时反应的ADAS系统…

从零开始的 dbt 入门教程 (dbt core 命令进阶篇)

引 根据第一篇文章的约定&#xff0c;我想通过接下来的几篇文章带大家进一步了解 dbt 的用法&#xff0c;原计划这篇文章我会介绍 dbt 命令的进阶用法&#xff0c;进一步认识 dbt 的配置以及如何创建增量表等等零零散散十几个方面的知识点&#xff0c;结果在我写完命令部分发现…

深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)

文章目录 1多维数组压缩维度扩充维度 2numpy类型转换深度学习常见的float32类型。 3数组扁平化4np.where()的用法5np.argmax()6图像拼接7生成同shape的图片&#xff0c;指定数据类型 1多维数组 a.shape(3,2);既数组h3&#xff0c;w2 a.shape(2,3,2);这里第一个2表示axis0维度上…

奇异值分解(SVD)【详细推导证明】

机器学习笔记 机器学习系列笔记&#xff0c;主要参考李航的《机器学习方法》&#xff0c;见参考资料。 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例…

Dubbo-admin监控中心

监控中心 Dubbo-admin监控中心执行操作启动provider和consumer项目进行测试总体流程 Dubbo-admin监控中心 dubbo-admin下载路径 git clone https://github.com/apache/dubbo-admin.git图1-1 dubbo-admin项目文件展示 执行操作 # 启动zookeeper# 前端 cd dubbo-admin-ui npm i…

Linux 设备树详解

目录 1、概述 2、节点&#xff08; node&#xff09;和属性&#xff08; property&#xff09; 2.1、DTS 描述键值对的语法&#xff1a; 2.2 节点语法规范说明 2.3节点名及节点路径 2.4 节点别名&#xff08;节点引用&#xff09; 2.5 合并节点内容 2.6 替换节点内容 2…

java:流程控制

一、流程控制语句分类 顺序结构分支结构&#xff08;if&#xff0c;switch&#xff09;循环结构&#xff08;for&#xff0c;while&#xff0c;do...while&#xff09; 二、顺序结构 定义&#xff1a;顺序结构是程序中最基本的流程控制&#xff0c;没有特定的语法结构&#…

Sqoop故障排除指南:处理错误和问题

故障排除是每位数据工程师和分析师在使用Sqoop进行数据传输时都可能遇到的关键任务。Sqoop是一个功能强大的工具&#xff0c;但在实际使用中可能会出现各种错误和问题。本文将提供一个详尽的Sqoop故障排除指南&#xff0c;涵盖常见错误、问题和解决方法&#xff0c;并提供丰富的…

HarmonyOS4.0系列——07、自定义组件的生命周期、路由以及路由传参

自定义组件的生命周期 允许在生命周期函数中使用 Promise 和异步回调函数&#xff0c;比如网络资源获取&#xff0c;定时器设置等&#xff1b; 页面生命周期 即被Entry 装饰的组件生命周期&#xff0c;提供以下生命周期接口&#xff1a; onPageShow 页面加载时触发&#xff…

2023年上半年网络工程师真题(3/3)

41.某主机无法上网&#xff0c;查看本地连接后&#xff0c;发现只有发送包没有接收包&#xff0c;故障原因可能是&#xff08;C&#xff09;。 A.网线没有插好 B.DNS配置错误 C.IP地址配置错误 D.TCP/IP协议故障 如果网线没有插好&#xff0c;就没有发送包没有接收包;DNS配…

UI设计中的插画运用优势(上)

1. 插画是设计的原创性和艺术性的基础 无论是印刷品、品牌设计还是UI界面&#xff0c;更加风格化的插画能够将不同的风格和创意加入其中&#xff0c;在激烈的竞争中更容易因此脱颖而出。留下用户才有转化。 2. 插画是视觉触发器&#xff0c;瞬间传达大量信息 我们常说「一图胜千…