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

Java面试题--SpringCloud篇

一、Spring Cloud

1. 什么是微服务架构?

微服务架构就是将单体的应用程序分成多

应用程序,这多个应用程序就成为微服

务,每个微服务运行在自己的进程中,并

使用轻量级的机制通信

这些服务围绕业务能力来分,并通过自动

化部署机制来独立部署,这些服务可以使

用不同的编程语言,不同数据库,以保证

最低限度的集中式管理

2. 为什么需要学习 SpringCloud?

springcloud 就基于 SpringBoot 的优雅简

把市场上优秀的服务框架组合起来,通

过 SpringBoot 风格进行再封装屏蔽掉了

复杂的配置和实现原理

springcloud 开箱即用,只需要一个 jar 的

依赖就可以了!
springcloud 大多数子模块都是直击痛点,

像 zuul 解决的跨域,fegin 解决的负载均

衡,hystrix 的熔断机制等

3. SpringCloud 是什么?

SpringCloud 是一系列框架的有序集合

它利用 SpringBoot 的开发便利性巧妙地

简化了分布式系统基础设施的开发,如

服务发现注册、配置中心、智能路由、

消息总线、负载均衡、断路器、数据监

控等,都可以用 SpringBoot 的开发风格

做到一键启动和部署

SpringCloud 并没有重复制造轮子,它只

是将各家公司开发的比较成熟、经得起实

际考验的服务框架组合起来,通过 Spring

Boot 风格进行再封装屏蔽掉了复杂的配置

和实现原理,最终给开发者留出了一套

单易懂、易部署和易维护的分布式系统开

发工具包

4. SpringCloud 的优缺点?

优点:

① 耦合度比较低,不会影响其他模块的开

    发
② 减轻团队的成本,可以并行开发,不用

    关注其他人怎么开发,先关注自己的开

    发
③ 配置比较简单,基本用注解就能实现,

    不用使用过多的配置文件
④ 微服务跨平台的,可以用任何一种语言

     开发
⑤ 每个微服务可以有自己的独立的数据库

    也有用公共的数据库
⑥ 直接写后端的代码,不用关注前端怎么

    开发,直接写自己的后端代码即可,然

    后暴露接口,通过组件进行服务通信

缺点:

① 部署比较麻烦,给运维工程师带来一定

    的麻烦
② 针对数据的管理比麻烦,因为微服务可

    以每个微服务使用一个数据库
③ 系统集成测试比较麻烦
④ 性能的监控比较麻烦 (最好开发一个大

    屏监控系统)

5. SpringBoot 和 SpringCloud 的区别?

SpringBoot 专注于快速方便的开发单个个

体微服务
SpringCloud 是关注全局的微服务协调整

理治理框架,它将 SpringBoot 开发的一个

个单体微服务整合并管理起来,为各个微

服务之间提供,配置管理、服务发现、断

路器、路由、微代理、事件总线、全局锁、

决策竞选、分布式会话等等集成服务
SpringBoot 可以离开 SpringCloud 独立使

用开发项目,但是 SpringCloud 离不开

SpringBoot,属于依赖的关系 SpringBoot

专注于快速、方便的开发单个微服务个体,

SpringCloud 关注全局的服务治理框架

6. SpringCloud 由什么组成?

SpringCloud Eureka:服务注册与发现
SpringCloud Zuul:服务网关
SpringCloud Ribbon:客户端负载均衡
SpringCloud Feign:声明性的 Web 服务

                                客户端
SpringCloud Hystrix:断路器
SpringCloud Config:分布式统一配置管理
等20几个框架,开源一直在更新

7. 使用 SpringBoot 开发分布式微服务时,我们面临什么问题?

与分布式系统相关的复杂性-这种开销包括

网络问题,延迟开销,带宽问题,安全问


服务发现-服务发现工具管理群集中的流程

和服务如何查找和互相交谈。它涉及一个

服务目录,在该目录中注册服务,然后能

够查找并连接到该目录中的服务
冗余-分布式系统中的冗余问题
负载平衡 --负载平衡改善跨多个计算资源

的工作负荷,诸如计算机,计算机集群,

网络链路,中央处理单元,或磁盘驱动器

的分布
性能-问题 由于各种运营开销导致的性能

                 问题

8. SpringCloud 和 dubbo 区别?

服务调用方式:dubbo 是 RPC

                        springcloud 是 Rest Api
注册中心:dubbo 是 zookeeper

                springcloud是 eureka/zookeeper
服务网关:dubbo 本身没有实现,只能通过

                其他第三方技术整合;

                springcloud 有 Zuul 路由网关,

                作为路由服务器,进行消费者的

                请求分发,springcloud支持断路

                器,与git完美集成配置文件
                支持版本控制,事物总线实现配

                置文件的更新与服务自动装配等

                等一系列的微服务架构要素

二、Eureka

9. 服务注册和发现是什么意思?SpringCloud 如何实现?

当我们开始一个项目时,我们通常在属性

文件中进行所有的配置,随着越来越多的

服务开发和部署,添加和修改这些属性变

得更加复杂,有些服务可能会下降,而某

些位置可能会发生变化,手动更改属性可

能会产生问题

Eureka 服务注册和发现可以在这种情况

下提供帮助,由于所有服务都在 Eureka

服务器上注册并通过调用 Eureka 服务器

完成查找,因此无需处理服务地点的任何

更改和处理

10. 什么是 Eureka?

Eureka 作为 SpringCloud 的服务注册功

能服务器,他是服务注册中心,系统中

的其他服务使用
Eureka 的客户端将其连接到 Eureka

Service 中,并且保持心跳,这样工作人

员可以通过 Eureka Service 来监控各个

微服务是否运行正常

11. Eureka 怎么实现高可用?

集群,注册多台 Eureka,然后把 Spring

Cloud 服务互相注册,客户端从 Eureka

获取信息时,按照 Eureka 的顺序来访问

12. 什么是 Eureka 的自我保护模式?

默认情况下,如果 Eureka Service 在一

定时间内没有接收到某个微服务的心跳,

Eureka Service 会进入自我保护模式,

在该模式下 Eureka Service 会保护服务

注册表中的信息,不在删除注册表中的

数据,当网络故障恢复后,Eureka Servic

节点会自动退出自我保护模式

13. DiscoveryClient 的作用?

可以从注册中心中根据服务别名获取注

册的服务器信息

14. Eureka 和 ZooKeeper 都可以提供服务注册与发现的功能,请说说两个的区别?

ZooKeeper 中的节点服务挂了就要选举

在选举期间注册服务瘫痪,虽然服务最

终会恢复,但是选举期间不可用的, 选

举就是改微服务做了集群,必须有一台

主其他的都是从
Eureka 各个节点是平等关系,服务器挂

了没关系,只要有一台 Eureka 就可以

保证服务可用,数据都是最新的,如果

查询到的数据并不是最新的,就是因为

Eureka 的自我保护模式导致的

Eureka 本质上是一个工程

ZooKeeper 只是一个进程
Eureka 可以很好的应对因网络故障导

致部分节点失去联系的情况,而不会像

ZooKeeper 一样使得整个注册系统瘫痪

ZooKeeper 保证的是 CP,

Eureka 保证的是 AP
CAP: C:一致性>Consistency;

取舍:(强一致性、单调一致性、会话一

           致性、最终一致性、弱一致性)

A:可用性>Availability;

P:分区容错性>Partition tolerance;

三、Zuul

15. 什么是网关?

网关相当于一个网络服务架构的入口,所

有网络请求必须通过网关转发到具体的服

16. 网关的作用是什么?

统一管理微服务请求,权限控制、负载均

衡、路由转发、监控、安全控制黑名单和

白名单等

17. 什么是 SpringCloud Zuul (服务网关)?

Zuul 是对 SpringCloud 提供的成熟对的路

由方案,他会根据请求的路径不同,网关

会定位到指定的微服务,并代理请求到不

同的微服务接口,他对外隐蔽了微服务的

真正接口地址

三个重要概念:

动态路由表:Zuul 支持 Eureka 路由,

动配置路由,这俩种都支持自动更新
路由定位:根据请求路径,Zuul 有自己的

一套定位服务规则以及路由表达式匹配
反向代理:客户端请求到路由网关,网关

受理之后,在对目标发送请求,拿到响应

之后在给客户端

它可以和 Eureka,Ribbon,Hystrix 等组件

配合使用,Zuul 的应用场景:

对外暴露,权限校验,服务聚合,日志审计等

18. 网关与过滤器有什么区别?

网关是对所有服务的请求进行分析过滤,

过滤器是对单个服务而言

19. 常用网关框架有那些?

Nginx、Zuul、Gateway

20. Zuul 与 Nginx 有什么区别?

Zuul 是 java 语言实现的,主要为 java 服务

提供网关服务,尤其在微服务架构中可以

加灵活的对网关进行操作

Nginx 是使用 C 语言实现,性能高于 Zuul,

但是实现自定义操作需要熟悉 lua 语言,对
程序员要求较高,可以使用 Nginx 做 Zuul

集群

21. 既然 Nginx 可以实现网关?为什么还需要使用 Zuul 框架?

Zuul 是 SpringCloud 集成的网关,使用

Java 语言编写,可以对 SpringCloud 架

构提供更灵活的服务

22. 如何设计一套 API 接口?

考虑到 API 接口的分类可以将 API 接口分

为开放 API 接口和内网 API 接口,内网

API 接口用于局域网,为内部服务器提供

服务开放 API 接口用于对外部合作单位

提供接口调用,需要遵循 Oauth2.0 权限

认证协议,同时还需要考虑安全性、幂等

性等问题

23. ZuulFilter 常用有那些方法?

Run():过滤器的具体业务逻辑
shouldFilter():判断过滤器是否有效
filterOrder():过滤器执行顺序
filterType():过滤器拦截位置

24. 如何实现动态 Zuul 网关路由转发?

通过 path 配置拦截请求,通过 ServiceId

到配置中心获取转发的服务列表,Zuul 内

部使用 Ribbon 实现本地负载均衡和转发

25. Zuul 网关如何搭建集群?

使用 Nginx 的 upstream 设置 Zuul 服务集

群,通过 location 拦截请求并转发到

upstream,默认使用轮询机制对 Zuul 集群

发送请求

四、Ribbon

26. 负载平衡的意义什么?

集群就是把一个的事情交给多个人去做

假如要做 1000 个产品,给一个人做要 10

天,我叫 10 个人做就是一天,这就是集

群,负载均衡的话就是用来控制集群,他

把做的最多的人让他慢慢做休息会,把做

的最少的人让他加量让他做多点

在计算中,负载平衡可以改善跨计算机,

计算机集群,网络链接,中央处理单元或

磁盘驱动器等多种计算资源的工作负载分

负载平衡旨在优化资源使用,最大化吞吐

量,最小化响应时间并避免任何单一资源

的过载,使用多个组件进行负载平衡而不

是单个组件可能会通过冗余来提高可靠性

和可用性

负载平衡通常涉及专用软件或硬件,例如

多层交换机或域名系统服务器进程

27. Ribbon 是什么?

Ribbon 是 Netflix 发布的开源项目,主要

功能是提供客户端的软件负载均衡算法
Ribbon 客户端组件提供一系列完善的配置

项,如连接超时,重试等

简单的说,就是在配置文件中列出后面所

有的机器,Ribbon 会自动的帮助你基于某

种规则 (如简单轮询,随即连接等) 去连接

这些机器,我们也很容易使用 Ribbon 实

现自定义的负载均衡算法 (有点类似 Nginx)

28. Nginx 与 Ribbon 的区别

Nginx 是反向代理同时可以实现负载均衡

nginx 拦截客户端请求采用负载均衡策略根

据 upstream 配置进行转发,相当于请求通

过 nginx 服务器进行转发

Ribbon 是客户端负载均衡,从注册中心读
取目标服务器信息,然后客户端采用轮询策

略对服务直接访问,全程在客户端操作

29. Ribbon底层实现原理

Ribbon 使用 discoveryClient 从注册中心读

取目标服务信息,对同一接口请求进行计数,

使用 % 取余算法获取目标服务集群索引,

返回获取到的目标服务信息
@LoadBalanced 注解的作用开启客户端负

载均衡

五、Hystrix

30. 什么是断路器?

当一个服务调用另一个服务由于网络原因或

自身原因出现问题,调用者就会等待被调用

者的响应
当更多的服务请求到这些资源导致更多的请

求等待,发生连锁效应 (雪崩效应)

   断路器有三种状态

打开状态:一段时间内达到一定的次数无法

               调用并且多次监测没有恢复的迹象,

               断路器完全打开,那么下次请求就

               不会请求到该服务
半开状态:短时间内有恢复迹象,断路器会

               将部分请求发给该服务,正常调用

               时断路器关闭
关闭状态:当服务一直处于正常状态,能正

                常调用

31. 什么是 Hystrix?

在分布式系统,我们一定会依赖各种服务,

那么这些个服务一定会出现失败的情况,就

会导致雪崩,Hystrix 就是这样的一个工具,

防雪崩利器,它具有服务降级,服务熔断,

服务隔离,监控等一些防止雪崩的技术

Hystrix 有四种防雪崩方式:

服务降级:接口调用失败就调用本地的方法

                  返回一个空
服务熔断:接口调用失败就会进入调用接口

                  提前定义好的一个熔断的方法,

                  返回错误信息
服务隔离:隔离服务之间相互影响
服务监控:在服务发生调用时,会将每秒请

                  求数、成功请求数等运行指标

                  录下来

32. 谈谈服务雪崩效应?

雪崩效应是在大型互联网项目中,当某个服

务发生宕机时,调用这个服务的其他服务也

会发生宕机,大型项目的微服务之间的调用

是互通的,这样就会将服务的不可用逐步扩

大到各个其他服务中,从而使整个项目的服

务宕机崩溃.

发生雪崩效应的原因有以下几点

① 单个服务的代码存在 bug.

请求访问量激增导致服务发生崩溃

    (如大型商城的枪红包,秒杀功能).

③ 服务器的硬件故障也会导致部分服务不

     可用.

33. 在微服务中,如何保护服务?

一般使用使用 Hystrix 框架,实现服务隔离

来避免出现服务的雪崩效应,从而达到保护

服务的效果

当微服务中,高并发的数据库访问量导致服

务线程阻塞,使单个服务宕机,服务的不可

用会蔓延到其他服务,引起整体服务灾难性

后果,使用服务降级能有效为不同的服务分

配资源,一旦服务不可用则返回友好提示,

不占用其他服务资源,从而避免单个服务崩

溃引发整体服务的不可用.

34. 服务雪崩效应产生的原因?

因为 Tomcat 默认情况下只有一个线程池来

维护客户端发送的所有的请求,这时候某一

接口在某一时刻被大量访问就会占据 tomcat

线程池中的所有线程,其他请求处于等待状

态,无法连接到服务接口

35. 谈谈服务降级、熔断、服务隔离?

服务降级:当客户端请求服务器端的时候,

                防止客户端一直等待,不会处理

                业务逻辑代码,直接返回一个友

                好的提示给客户端
服务熔断:在服务降级的基础上更直接的一

               种保护方式,当在一个统计时间范

               围内的请求失败数量达到设定值

               (requestVolumeThreshold) 或当前

               的请求错误率达到设定的错误率阈

               值 (errorThresholdPercentage) 时

               开启断路,之后的请求直接走

               fallback 方法,在设定时间
               (sleepWindowInMilliseconds) 后尝

               试恢复
服务隔离:Hystrix 为隔离的服务开启一个

               立的线程池,这样在高并发的情况

               下不会影响其他服务,服务隔离有

               线程池和信号量两种实现方式,一

               般使用线程池方式

36. 服务降级底层是如何实现的?

Hystrix 实现服务降级的功能是通过重写

HystrixCommand 中的 getFallback() 方法,

当 Hystrix 的 run 方法或 construct 执行发生

错误时转而执行 getFallback() 方法

六、Feign

37. 什么是 Feign?

Feign 是一个声明 web 服务客户端,这使得

编写 web 服务客户端更容易
他将我们需要调用的服务方法定义成抽象方

保存在本地就可以了,不需要自己构建

Http 请求了,直接调用接口就行了,不过要

注意,调用方法要和本地抽象方法的签名完

全一致

38. SpringCloud 有几种调用接口方式?

Feign
RestTemplate

39. Ribbon 和 Feign 调用服务的区别?

调用方式同:Ribbon 需要我们自己构建

Http 请求,模拟 Http 请求然后通过 Rest

Template 发给其他服务,步骤相当繁琐
而 Feign 则是在 Ribbon 的基础上进行了

一次改进,采用接口的形式,将我们需要

调用的服务方法定义成抽象方法保存在本

地就可以了,不需要自己构建 Http 请求

了,直接调用接口就行了,不过要注意,

调用方法要和本地抽象方法的签名完全一

七、Bus

40. 什么是 SpringCloud Bus?

SpringCloud Bus 就像一个分布式执行器

用于扩展的 SpringBoot 应用程序的配置

文件,但也可以用作应用程序之间的通信

通道
SpringCloud Bus 不能单独完成通信,需

配合 MQ 支持
SpringCloud Bus 一般是配合 Spring

Cloud Config 做配置中心的
SpringCloud Config 实时刷新也必须采

用 SpringCloud Bus 消息总线

八、Config

41. 什么是 SpringCloud Config?

SpringCloud Config 为分布式系统中的外

部配置提供服务器和客户端支持,可以方

便的对微服务各个环境下的配置进行集中

式管理

SpringCloud Config 分为 Config Server 和

Config Client 两部分

Config Server 负责读取配置文件,并且

暴露 Http API 接口,Config Client 通过

调用 Config Server 的接口来读取配置文

42. 分布式配置中心有那些框架?

Apollo、zookeeper、springcloud config

43. 分布式配置中心的作用?

动态变更项目配置信息而不必重新部署

项目

44. SpringCloud Config 可以实现实时刷新吗?

springcloud config 实时刷新采用 Spring

Cloud Bus 消息总线

九、Gateway

45. 什么是 SpringCloud Gateway?

SpringCloud Gateway 是 SpringCloud 官

方推出的第二代网关框架,取代 Zuul 网关

网关常见的功能有路由转发、权限校验、

限流控制等作用
使用了一个 RouteLocatorBuilder 的 bean

去创建路由,除了创建路由 RouteLocator

Builder 可以让你添加各种 predicates 和

filters,predicates 断言的意思,顾名思义

就是根据具体的请求的规则,由具体的

route 去处理filters 是各种过滤器,用来

对请求做各种判断和修改

46. SpringCloud 主要项目?

SpringCloud 的子项目,大致可分成两类:

一类是对现有成熟框架 "SpringBoot 化" 的

封装和抽象,也是数量最多的项目;

第二类是开发了一部分分布式系统的基础

设施的实现,如 SpringCloud Stream 扮

演的就是 kafka,ActiveMQ 这样的角色

(1) Spring Cloud Config

Config 能够管理所有微服务的配置文件
集中配置管理工具,分布式系统中统一的

外部配置管理,默认使用 Git 来存储配置,

可以支持客户端配置的刷新及加密、解密

操作

(2) Spring Cloud Netflix (重点,这些组件用的最多)

Netflix OSS 开源组件集成,包括 Eureka、

Hystrix、Ribbon、Feign、Zuul 等核心组件

Eureka:服务治理组件,包括服务端的注

              册中心和客户端的服务发现机制;
Ribbon:负载均衡的服务调用组件,具有

               多种负载均衡调用策略;
Hystrix:服务容错组件,实现了断路器模

               式,为依赖服务的出错和延迟提

               供了容错能力;
Feign:基于 Ribbon 和 Hystrix 的声明式

             服务调用组件;
Zuul:API 网关组件,对请求提供路由及

          过滤功能

(3) Spring Cloud Bus

用于传播集群状态变化的消息总线,使用

轻量级消息代理链接分布式系统中的节点,

可以用来动态刷新集群中的服务配置信息;
简单来说就是修改了配置文件,发送一次

请求,所有客户端便会重新读取配置文件,
需要利用中间插件 MQ

(4) Spring Cloud Consul

Consul 是 HashiCorp 公司推出的开源工具,

用于实现分布式系统的服务发现与配置

与其它分布式服务注册与发现的方案,

Consul 的方案更 “一站式” ,内置了服务注

册与发现框架、分布一致性协议实现、健康

检查、Key/Value 存储、多数据中心方案,

不再需要依赖其它工具 (比如 ZooKeeper 等)

使用起来也较为简单

Consul 使用 Go 语言编写,因此具有天然可

移植性 (支持 Linux、windows 和 MacOS X);

安装包仅包含一个可执行文件,方便部署,

与 Docker 等轻量级容器可无缝配合

(5) Spring Cloud Security

安全工具包,他可以对 Zuul 代理中的负载

均衡从前端到后端服务中获取 SSO 令牌资

源服务器之间的中继令牌,使 Feign 客户

端表现得像 OAuth2RestTemplate (获取令

牌等) 的拦截器在 Zuul 代理中配置下游身

份验证
Spring Cloud Security 提供了一组原语,

用于构建安全的应用程序和服务,而且操

作简便,可以在外部 (或集中) 进行大量配

置的声明性模型有助于实现大型协作的远

程组件系统,通常具有中央身份管理服务

它也非常易于在 Cloud Foundry 等服务平

台中使用,在 Spring Boot 和 Spring
Security OAuth2 的基础上,可以快速创

建实现常见模式的系统,如单点登录,

令牌中继和令牌交换

(6) Spring Cloud Sleuth

在微服务中,通常根据业务模块分服务,

项目中前端发起一个请求,后端可能跨几

个服务调用才能完成这个请求

如果系统越来越庞大,服务之间的调用与

被调用关系就会变得很复杂,假如一个请

求中需要跨几个服务调用,其中一个服务

由于网络延迟等原因挂掉了,那么这时候

我们需要分析具体哪一个服务出问题了就

会显得很困难

Spring Cloud Sleuth 服务链路跟踪功能就

可以帮助我们快速的发现错误根源以及监

控分析每条请求链路上的性能等等

(7) Spring Cloud Stream

轻量级事件驱动微服务框架,可以使用简

单的声明式模型来发送及接收消息,主要

实现为 Apache、Kafka 及 RabbitMQ

(8) Spring Cloud Task

Spring Cloud Task 的目标是为 SpringBoot

应用程序提供创建短运行期微服务的功能

在 SpringCloud Task中,我们可以灵活地

动态运行任何任务,按需分配资源并在任

务完成后检索结果
Tasks 是 Spring Cloud Data Flow 中的一

个基础项目,允许用户将几乎任何 Spring

Boot 应用程序作为一个短期任务执行

(9) Spring Cloud Zookeeper

SpringCloud 支持三种注册方式 Eureka,

Consul (go语言编写),zookeeper
Spring Cloud Zookeeper 是基于 Apache

Zookeeper 的服务治理组件

(10) Spring Cloud Gateway

Spring cloud gateway 是 spring 官方基于

Spring 5.0、Spring Boot 2.0 和 Project

Reactor 等技术开发的网关,Spring Cloud

Gateway 旨在为微服务架构提供简单、有

效和统一的API路由管理方式,
Spring Cloud Gateway 作为 Spring Cloud

生态系统中的网关,目标是替代 Netflix

Zuul,其不仅提供统一的路由方式,并且

还基于 Filer 链的方式提供了网关基本的功

能,例如:安全、监控/埋点、限流等

(11) Spring Cloud OpenFeign

Feign 是一个声明性的 Web 服务客户端,

它使编写 Web 服务客户端变得更容易,

要使用 Feign,我们可以将调用的服务方

法定义成抽象方法保存在本地添加一点点

注解就可以了,不需要自己构建 Http 请

求了,直接调用接口就行了,不过要注意,

调用方法要和本地抽象方法的签名完全一

Spring Cloud 是一个由许多子项目组成的

综合项目,各子项目有不同的发布节奏

为了管理 Spring Cloud 与各子项目的版本

依赖关系,发布了一个清单,其中包括了

某个 Spring Cloud 版本对应的子项目版本

为了避免 Spring Cloud 版本号与子项目版

本号混淆,Spring Cloud 版本采用了名称

而非版本号的命名,这些版本的名字采用

了伦敦地铁站的名字,根据字母表的顺序

来对应版本时间顺序,例如 Angel 是第一

个版本,Brixton 是第二个版本,当Spring

Cloud 的发布内容积累到临界点或者一个

重大 BUG 被解决后,会发布一个 "service

releases" 版本,简称 SRX 版本,比如
Greenwich.SR2 就是 Spring Cloud 发布

的 Greenwich 版本的第2个 SRX 版本

目前 Spring Cloud 的最新版本是 Hoxton

相关文章:

Java面试题--SpringCloud篇

一、Spring Cloud 1. 什么是微服务架构? 微服务架构就是将单体的应用程序分成多 个应用程序,这多个应用程序就成为微服 务,每个微服务运行在自己的进程中,并 使用轻量级的机制通信 这些服务围绕业务能力来分,并通过自…...

【linux】常用的互斥手段及实例简述

文章目录 10. 原子变量(atomic_t)20. 自旋锁(spinlock_t)21. 读写锁(rwlock_t)22. 顺序锁(seqlock_t) 10. 原子变量(atomic_t) 头文件 #include <linux/types.h> // -> <linuc/atomic.h> // -> <asm-generic/atomic64.h>结构体 /* 32bit */ typedef …...

STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作

今日学习一下红外遥控的解码使用&#xff0c;红外遥控在日常生活必不可少&#xff0c;它的解码与使用也是学习单片机的一个小过程&#xff0c;我们将通过实践来实现它。 文章提供源码、测试工程下载、测试效果图。 目录 红外遥控原理&#xff1a; 红外遥控特点&#xff1a; …...

linux 环境收集core文件步骤

Linux环境下进程发生异常而挂掉&#xff0c;通常很难查找原因&#xff0c;但是一般Linux内核给我们提供的核心文件&#xff0c;记录了进程在崩溃时候的信息&#xff0c;在C语言类的大型项目中&#xff0c;有助于深入定位。其配置流程如下&#xff1a; 1 查看生成core文件开关是…...

Git企业开发控制理论和实操-从入门到深入(一)|为什么需要Git|Git的安装

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/cate…...

上篇——税收大数据应用研究

财税是国家治理的基础和重要支柱&#xff0c;税收是国家治理体系的重要组成部分。我们如何利用税收数据深入挖掘包含的数据价值&#xff0c;在进行数据分析&#xff0c;提升税收治理效能&#xff0c;推进税收现代化。 1. 定义与特点 对于“大数据”&#xff08;Big data&#…...

疲劳驾驶检测和识别4:C++实现疲劳驾驶检测和识别(含源码,可实时检测)

疲劳驾驶检测和识别4&#xff1a;C实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 目录 疲劳驾驶检测和识别4&#xff1a;C实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 1.疲劳驾驶检测和识别方法 2.人脸检测方法 3.疲劳驾驶识别模型(Python) &#xf…...

Android WakefulBroadcastReceiver的使用

WakefulBroadcastReceiver 是一种特殊类型的广播接收器&#xff0c;为应用创建和管理 PARTIAL_WAKE_LOCK 。 简单来说&#xff0c; WakefulBroadcastReceiver 是持有系统唤醒锁的 BroadcastReceiver &#xff0c;用于执行需要保持CPU运转的场景。 注册 注册 Receiver &#…...

python知识:什么是字符编码?

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 我们的MySQL使用latin1的默认字符集&#xff0c; 也就是说&#xff0c;对汉字字段直接使用GBK内码的编码进行存储&#xff0c; 当需要对一些有汉字的字段进行拼音排序时&#xff08;特别涉及到类似于名字这样的字段时…...

Vue2中使用Pinia

Vue2中使用Pinia 1.初始化配置 # main.jsimport Vue from vue import App from ./App.vue import pinia from ./stores/index import { PiniaVuePlugin } from piniaVue.use(PiniaVuePlugin)new Vue({render: h > h(App),pinia, }).$mount(#app)2.模块化开发 新建stores文…...

Docker关于下载,镜像配置,容器启动,停止,查看等基础操作

系列文章目录 文章目录 系列文章目录前言一、安装Docker并配置镜像加速器二、下载系统镜像&#xff08;Ubuntu、 centos&#xff09;三、基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09;四、容器的启动、 停止及重启…...

穿越网络迷雾的神奇通道 - WebSocket详解

WebSocket&#xff0c;作为一项前端技术&#xff0c;已经成为现代Web应用不可或缺的一部分。本文将深入解析WebSocket&#xff0c;介绍其工作原理和用途&#xff0c;并通过简单的代码示例&#xff0c;让你对这个神奇的网络通信协议有更深入的了解。 WebSocket是什么&#xff1…...

无脑入门pytorch系列(五)—— nn.Dropout

本系列教程适用于没有任何pytorch的同学&#xff08;简单的python语法还是要的&#xff09;&#xff0c;从代码的表层出发挖掘代码的深层含义&#xff0c;理解具体的意思和内涵。pytorch的很多函数看着非常简单&#xff0c;但是其中包含了很多内容&#xff0c;不了解其中的意思…...

Python土力学与基础工程计算.PDF-压水试验

Python 求解代码如下&#xff1a; 1. import math 2. 3. # 输入参数 4. L 2.0 # 试验段长度&#xff0c;m 5. Q 120.0 # 第三阶段计算流量&#xff0c;L/min 6. p 1.5 # 第三阶段试验段压力&#xff0c;MPa 7. r0 0.05 # 钻孔半径&#xff0c;m 8. 9. # 计算透…...

Linux入门

一、安装相关软件 1.下载vmware (很容易下载,搜一下官网 ) 在cmd敲入 ncpa.cpl &#xff0c;查看是否有vmware 2.下载centos 下面是镜像源网站&#xff0c;当然你可以选择其他的镜像源&#xff0c;像清华镜像源和阿里镜像源。 Index of /centos/7.9.2009/isos/x86_64/ | …...

适合国内用户的五款ChatGPT插件

众所周知使用ChatGPT3.5需要使用魔法且不稳定&#xff0c;订阅ChatGPT4.0每月需要支付20美元&#xff0c;并且使用次数有限制。对于那些不想每年花费240美元&#xff08;超过1500元人民币&#xff09;来使用GPT4.0的朋友们来说&#xff0c;还有别的办法吗&#xff1f; 答案是&…...

Dubbo Spring Boot Starter 开发微服务应用

环境要求 系统&#xff1a;Windows、Linux、MacOS JDK 8 及以上&#xff08;推荐使用 JDK17&#xff09; Git IntelliJ IDEA&#xff08;可选&#xff09; Docker &#xff08;可选&#xff09; 项目介绍 在本任务中&#xff0c;将分为 3 个子模块进行独立开发&#xff…...

linux中互斥锁,自旋锁,条件变量,信号量,与freeRTOS中的消息队列,信号量,互斥量,事件的区别

RTOS 对于目前主流的RTOS的任务&#xff0c;大部分都属于并发的线程。 因为MCU上的资源每个任务都是共享的&#xff0c;可以认为是单进程多线程模型。 【freertos】003-任务基础知识 在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式&#xff0c;但是如…...

安装docker服务,配置镜像加速器

文章目录 1.安装docker服务&#xff0c;配置镜像加速器2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09;3.基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09;4.容器的启动、 停止及重启操作5.怎么查看正在运行…...

CF 896 C Willem, Chtholly and Seniorious(珂朵莉树模板)

CF 896 C. Willem, Chtholly and Seniorious(珂朵莉树模板) Problem - C - Codeforces 大意&#xff1a;给出一个区间 &#xff0c; 要求进行四种操作 &#xff0c; 区间加 &#xff0c; 区间第k大 &#xff0c; 区间推平 &#xff0c; 区间求和。 珂朵莉树模板题 &#xff…...

Android Jetpack组件的全方位分析

Jetpack是一个用于简化Android应用程序开发的工具包&#xff0c;包含了一系列的组件和工具。Jetpack包含了很多组件&#xff0c;如LiveData、ViewModel、Room、Data Binding、Navigation等。 Jetpack组件是一种更高级别的抽象&#xff0c;它们可以提供更简洁、更易于使用的API。…...

Prometheus+Grafana+AlertManager监控SpringBoot项目并发送邮件告警通知

文章目录 PrometheusGrafanaAlertManager监控平台搭建新建SpringBoot项目为Prometheus提供指标新建项目&#xff0c;引入依赖新建接口&#xff0c;运行程序 推送指标到pushgateway 开始监控Grafana连接Prometheus数据源导入Grafana模板监控SpringBoot项目 邮件告警通知同系列文…...

猿辅导Motiff亮相IXDC 2023国际体验设计大会,发布新功能获行业高度关注

近日&#xff0c;“IXDC 2023国际体验设计大会”在北京国家会议中心拉开序幕&#xff0c;3000设计师、1000企业、200全球商业领袖&#xff0c;共襄为期5天的用户体验创新盛会。据了解&#xff0c;此次大会是以“设计领导力”为主题&#xff0c;分享全球设计、科技、商业的前沿趋…...

【QT】重写QAbstractLIstModel,使用ListView来显示多列数据

qt提供了几个视图来进行信息的列表显示&#xff0c;QListView可以用来显示继承QStractListModel的字符串列表中的字符串&#xff0c;默认的模型里面只包含一列的内容&#xff1a; 这里以qml为例子&#xff0c;先新建一个qml的项目&#xff0c;示例代码如下&#xff1a; 先创建一…...

【从零学习python 】64. Python正则表达式中re.compile方法的使用详解

文章目录 re.compile方法的使用进阶案例 re.compile方法的使用 在使用正则表达式时&#xff0c;我们可以直接调用re模块的match、search、findall等方法&#xff0c;并传入指定的正则表达式进行匹配。另外&#xff0c;我们还可以使用re.compile方法生成一个正则表达式对象&…...

【FAQ】视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…...

基于Spring Boot的社区诊所就医管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的社区诊所就医管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java …...

mysql从传统模式切到GTID模式后启动主从,主从异常报错1236

一 前言 MySQL 的主从复制作为一项高可用特性&#xff0c;用于将主库的数据同步到从库&#xff0c;在维护主从复制数据库集群的时候&#xff0c;作为专职的MySQL DBA&#xff0c;笔者相信大多数人都会遇到“Got fatal error 1236 from master when reading data from binary …...

Qt+C++串口调试接收发送数据曲线图

程序示例精选 QtC串口调试接收发送数据曲线图 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC串口调试接收发送数据曲线图>>编写代码&#xff0c;代码整洁&#xff0c;规则&…...

【从零学习python 】75. TCP协议:可靠的面向连接的传输层通信协议

文章目录 TCP协议TCP通信的三个步骤TCP特点TCP与UDP的区别TCP通信模型进阶案例 TCP协议 TCP协议&#xff0c;传输控制协议&#xff08;英语&#xff1a;Transmission Control Protocol&#xff0c;缩写为 TCP&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议…...

IPv4 基础概念

IPv4 基础概念 IPv4 广播地址 广播是一种通信方式&#xff0c;用于将数据包发送到同一网络中的所有设备。在广播中&#xff0c;数据包被发送到特殊的广播地址&#xff0c;例如在IPv4中&#xff0c;广播地址通常为特定子网的广播地址&#xff08;例如&#xff0c;192.168.1.0/…...

stm32片内读写项目总结(多字节读写tongxindu)

1.flash操作驱动程序 a头文件 #ifndef FLASH_H #define FLASH_H #include “stm32f4xx.h” #define BOARD_NUM_ADDR 0x0800C000 #define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址 #define FLASH_WAITETIME 50000 //FLASH等待超时时间 //FLASH 扇区的起始地址…...

ECMAScript6 简介及拓展

ECMAScript简介 JavaScript是大家所了解的语言名称&#xff0c; 但它的正式名称叫做ECMAScript。 1996年11月&#xff0c; JavaScript的创造者网景公司将JavaScript提交给国际化组织 ECMA(欧洲计算机制造联合会)&#xff0c; 希望这种语言能够成为国际标准。 随后 ECMA 发布…...

可视化构建包分析报告

一、webpack 使用 webpack-bundle-analyzer 插件即可。 安装&#xff1a;npm install webpack-bundle-analyzer -D 使用&#xff1a;new BundleAnalyzerPlugin(options?: object) Name Type Description analyzerMode One of: server, static, json, disabled Default: se…...

统一git使用方法,git状态变迁图,git commit提交规范

目录 说明 统一git使用方法 git状态变迁图 git commit 提交规范 说明 多次工作中多名员工不懂git多次技术分享&#xff0c;自行查资料学习git并使用&#xff0c;会出现使用各种偏僻的命令&#xff0c;异常问题无法解决&#xff1b;或出现带url的git合并提交。主要是学的不…...

react与vue的区别

React和Vue.js是两个流行的JavaScript库/框架&#xff0c;用于构建用户界面。以下是React和Vue之间的一些主要区别&#xff1a; 学习曲线&#xff1a;Vue.js对于新手来说比React更容易学习和上手。 构建方式&#xff1a;React强调组件的可重用性&#xff0c;而Vue.js更注重模板…...

成功解决SQL 错误 [22000]: 第3 行附近出现错误: 试图修改自增列[ID](达梦数据库)

当我们使用工具来手动修改自增列的自增ID时&#xff0c;可能会报如下异常 SQL 错误 [22000]: 第3 行附近出现错误:试图修改自增列[ID] 解决办法&#xff1a; 可以使用SQL语句来修改 ALTER TABLE "fdw"."SYSTEM_DICT_TYPE" DROP IDENTITY; UPDATE "f…...

【算法】活用双指针完成复写零操作

Problem: 1089. 复写零 文章目录 题目解析算法原理分析找到最后一个复写的位置从后往前进行复写操作 代码展示 题目解析 首先我们来分析一下本题的题目意思 可以看到题目中给到了一个数组&#xff0c;意思是让我们将数组中的零元素都复写一遍&#xff0c;然后将其余的元素向后平…...

【面试高频题】难度 3/5,字典树热门运用题

题目描述 这是 LeetCode 上的 「745. 前缀和后缀搜索」 &#xff0c;难度为 「困难」。 Tag : 「字典树」 设计一个包含一些单词的特殊词典&#xff0c;并能够通过前缀和后缀来检索单词。 实现 WordFilter 类&#xff1a; WordFilter(string[] words) 使用词典中的单词 words 初…...

vue base64图片转file流 下载到本地 或者上传

<img :src"data:image/png;base64,form.img" style"max-width:280px;max-height: 280px;margin: auto;" />// base64 转file const base64ToFile()>{let byImg atob(form.img); // 解码base64let n byImg.lengthlet a new Uint8Array(n);while…...

无涯教程-PHP - 简介

PHP 7是最期待的&#xff0c;它是PHP编程语言的主要功能版本。 PHP 7于2015年12月3日发布。本教程将以简单直观的方式教您PHP 7的新功能及其用法。 无涯教程假设您已经了解旧版本的PHP&#xff0c;现在就可以开始学习PHP 7的新功能。 使用下面的示例- <html><head&…...

web基础+HTTP协议+httpd详细配置

目目录录 一、Web基础1.1 HTML概述1.1.1 HTML的文件结构1.1.2 HTML中的部分基本标签 1.3 MIME1.4 URI 和 URL1.4 定义1.4.2 URI 和 URL 的区别 二、静态资源和动态资源2.1 静态资源2.2 动态资源 三、HTTP协议3.1 HTTP协议简介3.2 HTTP协议版本3.2 HTTP方法3.3 HTTP请求访问的完…...

【sql】MongoDB的增删改查分页条件等

【sql】MongoDB的增删改查分页条件等 //增 //新增数据2种方式 db.msg.save({"name":"springboot&#x1f600;"}); db.msg.insert({"name":"mango good"}); db.msg.save({"name":"springboot",type:"工具书&…...

我的动态归纳(便于搜索)

linux dns配置文件是“/etc/resolv.conf”&#xff0c;该配置文件用于配置DNS客户&#xff0c;它包含了主机的域名搜索顺序和DNS/服务器的地址&#xff0c;每一行包括一个关键字和一个或多个空格隔开的参数。 /etc/resolv.conf &#xff08;不配置就不能域名解析&#xff09; 可…...

langchain ChatGPT AI私有知识库

企业知识库 原理就是把文档变为向量数据库&#xff0c;然后搜索向量数据库&#xff0c;把相似的数据和问题作为prompt&#xff0c; 输入到大模型&#xff0c;再利用GPT强大的自然语言处理、推理和分析等方面的能力将答案返回给用户 什么是langchain? langchain是一个强大的…...

API接口常用数据格式Json,Json的定义和XML的区别

现在程序员还有谁不知道 JSON 吗&#xff1f;无论对于前端还是后端&#xff0c;JSON 都是一种常见的数据格式。那么 JSON 到底是什么呢&#xff1f; JSON 的定义 JSON &#xff08;JavaScript Object Notation&#xff09; &#xff0c;是一种轻量级的数据交换格式。它的使用…...

密码学学习笔记(二十一):SHA-256与HMAC、NMAC、KMAC

SHA-256 SHA-2是广泛应用的哈希函数&#xff0c;并且有不同的版本&#xff0c;这篇博客主要介绍SHA-256。 SHA-256算法满足了哈希函数的三个安全属性&#xff1a; 抗第一原像性 - 无法根据哈希函数的输出恢复其对应的输入。抗第二原像性 - 给定一个输入和它的哈希值&#xf…...

操作系统-笔记-第四章-文件管理

目录 四、第四章——文件管理 1、文件管理——基础概念 &#xff08;1&#xff09;文件结构 &#xff08;2&#xff09;操作系统提供的接口 &#xff08;3&#xff09;总结 2、文件的逻辑结构 &#xff08;1&#xff09;有结构文件&#xff08;类似SQL表文件&#xff09…...

【MiniGUI】文字颜色实现透明度变化

在MiniGUi中&#xff0c;输出文字时有时候希望文字带有透明度信息&#xff0c; 即文字能够透出下面的图像来。 很自然地想到&#xff0c;设置颜色时&#xff0c;将颜色设置为带有透明度的颜色&#xff1a; SelectFont(hdc, mg_font);SetTextColor(hdc, RGBA2Pixel(HDC_SCREEN, …...

css中元素加定位之后到一定距离元素会变小

css中元素加定位之后到一定距离元素会变小 主要原因&#xff1a;元素没有加宽高 .swiperWrapper .active{bottom: 380px;left: 215px;z-index: 10; } .swiperWrapper .next{bottom: 170px;left: 7%;z-index: 20; } .swiperWrapper .prev{bottom: 360px;left: 0%;z-index: 30;…...