文章目录

(一)架构的演变
(二)RPC和HTTP
(三)HTTP客户端
(四)初识springcloud
(五)搭建服务提供方
(六)搭建服务调用方
(七)小结
(八)初识eureka注册中心
(九)搭建eureka注册中心
(十)改造:微服务注册到eureka注册中心
(十一)改造:消费方解决地址硬编码问题
(十二)高可用的eureka
(十三)eureka详解(提供方)
(十四)eureka详解(消费方)
(十五)eureka详解(失效剔除和自我保护)
(十六)springcloud相关的面试题

(一)架构的演变

传统一台服务器的缺点

  • 单点故障
  • 处理并发的能力差
  • 代码耦合度高
  • 不方便扩展

拆分前的优点:维护方便


拆分方式:

  • 水平拆分:web层、service层、mapper层
  • 垂直拆分:功能拆分(最早期的分布式)

拆分后的优点

  • 方便水平扩展
  • 方便单独优化
  • 解耦合
  • 提高并发

拆分后的缺点

  • 增加维护成本
  • 重复开发(每一台服务器都有重复的模块,如注册登录、用户管理等等)

暴力拆分会存在代码冗余的问题,我们可以把每个功能模块单独提取出来,即分布式,如下:
在这里插入图片描述
解决的问题:代码冗余、重复开发
带来的问题:调用关系错综复杂、维护困难


SOA提供了注册中心,可以完美解决以上问题,如下:
在这里插入图片描述


上面的SOA一个框框可以部署多个业务,但是微服务强调的是,如下:

微服务的特点:

  • 单一职责:微服务中每一个服务都对应唯一的业务能力,做到单一职责
  • :微服务的服务拆分粒度很小,例如一个用户管理就可以作为一个服务。每个服务虽小,但“五脏俱全”。
  • 面向服务:面向服务是说每个服务都要对外暴露Rest风格服务接口API。并不关心服务的技术实现,做到与平台和语言无关,也不限定用什么技术实现,只要提供Rest的接口即可。
  • 自治:自治是说服务间互相独立,互不干扰
    • 团队独立:每个服务都是一个独立的开发团队,人数不能过多。
    • 技术独立:因为是面向服务,提供Rest接口,使用什么技术没有别人干涉
    • 前后端分离:采用前后端分离开发,提供统一Rest接口,后端不用再为PC、移动段开发不同接口
    • 数据库分离:每个服务都使用自己的数据源
    • 部署独立:服务间虽然有调用,但要做到服务重启不影响其它服务。有利于持续集成和持续交付。每个服务都是独立的组件,可复用,可替换,降低耦合,易维护

在这里插入图片描述

(二)RPC和HTTP

无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢?

常见的远程调用方式有以下2种:

  • RPC:Remote Produce Call远程过程调用,类似的还有RMI。自定义数据格式,基于原生TCP通信,速度快,效率高。早期的webservice,现在热门的dubbo,都是RPC的典型代表

  • HTTP:http其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。
    现在热门的Rest风格,就可以通过http协议来实现。

如果你们公司全部采用Java技术栈,那么使用Dubbo作为微服务架构是一个不错的选择。

相反,如果公司的技术栈多样化,而且你更青睐Spring家族,那么SpringCloud搭建微服务是不二之选。在我们的项目中,我们会选择SpringCloud套件,因此我们会使用Http方式来实现服务间调用。

(三)HTTP客户端

既然微服务选择了Http,那么我们就需要考虑自己来实现对请求和响应的处理。
不过开源世界已经有很多的http客户端工具,能够帮助我们做这些事情,例如:

  • HttpClient
  • OKHttp
  • URLConnection

这些不同的客户端,API各不相同

Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持

导入资料包中的工程,如下:
在这里插入图片描述
在这里插入图片描述

(四)初识springcloud

微服务是一种架构方式,最终肯定需要技术架构去实施。

微服务的实现方式很多,但是最火的莫过于Spring Cloud了。为什么?

  • 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大。
  • 技术强:Spring作为Java领域的前辈,可以说是功力深厚。有强力的技术团队支撑,一般人还真比不了
  • 群众基础好:可以说大多数程序员的成长都伴随着Spring框架,试问:现在有几家公司开发不用Spring?SpringCloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方,熟悉的味道。
  • 使用方便:相信大家都体会到了SpringBoot给我们开发带来的便利,而SpringCloud完全支持SpringBoot的开发,用很少的配置就能完成微服务框架的搭建

Spring最擅长的就是集成,把世界上最好的框架拿过来,集成到自己的项目中。

SpringCloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。其主要涉及的组件包括:

  • Eureka:服务治理组件,包含服务注册中心,服务注册与发现机制的实现。(服务治理,服务注册/发现)
  • Zuul:网关组件,提供智能路由,访问过滤功能
  • Ribbon:客户端负载均衡的服务调用组件(客户端负载)
  • Feign:服务调用,给予Ribbon和Hystrix的声明式服务调用组件 (声明式服务调用)
  • Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力。(熔断、断路器,容错)

在这里插入图片描述

因为Spring Cloud不同其他独立项目,它拥有很多子项目的大项目。
所以它的版本是 版本名 + 版本号
Angel.SR6

  • 版本名:是伦敦的地铁名
  • 版本号:SR(Service Releases)是固定的,大概意思是稳定版本。后面会有一个递增的数字。

所以 Edgware.SR3就是Edgware的第3个Release版本。

(五)搭建服务提供方

在学习springcloud之前,先自己搭建一个类似于springcloud的项目群
以后创建springboot的项目,可以直接使用Spring Initializr,如下:
(建议把https改成htttp下载会快很多,有时候默认的https会下载很慢甚至下载失败)
在这里插入图片描述
在这里插入图片描述
教程用的是2.0.6版本,但是现在最低只能选到2.1.15,我们选它,创建后再修改,如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
把版本号改成2.0.6.RELEASE,如下:
在这里插入图片描述
导入通用mapper,如下:

        <!-- 通用mapper --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.2</version></dependency>

修改mysql版本号,如下:
在这里插入图片描述
我们这次把application.properties改成application.yml,写法如下:

server:port: 8089
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/ssm?useSSL=true&serverTimezone=UTCusername:  rootpassword:  123
mybatis:type-aliases-package: com.zzq.service.pojo

User实体类拷贝过来,如下:
在这里插入图片描述
创建一个mapper并且在引导类加上注解,如下:
在这里插入图片描述
写一个service,如下:
在这里插入图片描述
最后写一个controller,如下:
在这里插入图片描述
测试结果如下:
在这里插入图片描述

(六)搭建服务调用方

在这里插入图片描述
在这里插入图片描述
首先修改配置文件,如下:
在这里插入图片描述
然后在引导类中注册RestTemplate,如下:
在这里插入图片描述
编写一个controller,如下:
在这里插入图片描述
首先启动provider,再启动consumer,如下:
在这里插入图片描述
效果如下:
在这里插入图片描述

(七)小结

简单回顾一下,刚才我们写了什么:

  • itcast-service-provider:一个提供根据id查询用户的微服务。
  • itcast-service-consumer:一个服务调用者,通过RestTemplate远程调用itcast-service-provider。

存在什么问题?

  • 在consumer中,我们把url地址硬编码到了代码中,不方便后期维护
  • consumer需要记忆provider的地址,如果出现变更,可能得不到通知,地址将失效
  • consumer不清楚provider的状态,服务宕机也不知道
  • provider只有1台服务,不具备高可用性
  • 即便provider形成集群,consumer还需自己实现负载均衡

其实上面说的问题,概括一下就是分布式服务必然要面临的问题:

  • 服务管理
    • 如何自动注册和发现
    • 如何实现状态监管
    • 如何实现动态路由
  • 服务如何实现负载均衡
  • 服务如何解决容灾问题
  • 服务如何实现统一配置

以上的问题,我们都将在SpringCloud中得到答案。

(八)初识eureka注册中心

在刚才的案例中,itcast-service-provider对外提供服务,需要对外暴露自己的地址。
而consumer(调用者)需要记录服务提供者的地址,将来地址出现变更,还需要及时更新。
这在服务较少的时候并不觉得有什么,但是在现在日益复杂的互联网环境,一个项目肯定会拆分出十几,甚至数十个微服务。
此时如果还人为管理地址,不仅开发困难,将来测试、发布上线都会非常麻烦,这与DevOps的思想是背道而驰的。这就好比是 网约车出现以前,人们出门叫车只能叫出租车。
一些私家车想做出租却没有资格,被称为黑车。而很多人想要约车,但是无奈出租车太少,不方便。
私家车很多却不敢拦,而且满大街的车,谁知道哪个才是愿意载人的。一个想要,一个愿意给,就是缺少引子,缺乏管理啊。
此时滴滴这样的网约车平台出现了,所有想载客的私家车全部到滴滴注册,记录你的车型(服务类型),身份信息(联系方式)。
这样提供服务的私家车,在滴滴那里都能找到,一目了然。
此时要叫车的人,只需要打开APP,输入你的目的地,选择车型(服务类型),滴滴自动安排一个符合需求的车到你面前,为你服务,完美!Eureka就好比是滴滴,负责管理、记录服务提供者的信息。
服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过`“心跳”`机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。
这就实现了服务的自动注册、发现、状态监控。

在这里插入图片描述

  • Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
  • 提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
  • 消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态

(九)搭建eureka注册中心

在这里插入图片描述
注意:注册中心引入Eureka Server依赖,提供方消费方应该引入Eureka Discovery Client依赖
在这里插入图片描述
如果下载springcloud依赖失败,可以增加一个镜像,如下:

	 <mirror><mirror>  <id>UK</id>  <mirrorOf>central</mirrorOf>    <name>UK Central</name>  <url>http://uk.maven.org/maven2</url>  </mirror> <id>alimaven</id><mirrorOf>central</mirrorOf>  <name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url>      </mirror>

修改springboot版本号、springcloud版本号,以及加上springboot2.0.6版本需要配置的UTF-8,如下:
在这里插入图片描述
参照源码配置,如下:
在这里插入图片描述

server:port: 10086
spring:application:name: zzq-eurqka #将来作为微服务的名称,注入到eureka容器(eureka工程本身也是微服务)
eureka:client:service-url:defaultZone: http://localhost:${server.port}/eureka

最后在引导类加上注解,如下:
在这里插入图片描述
最后启动一下eureka服务端,效果如下:
在这里插入图片描述
官方有一个奇怪的规定,注册的时候要加/eureka,但是用浏览器访问的时候就不需要加
在这里插入图片描述
可以看到eureka本身也被注入了进去,作为微服务的一员

(十)改造:微服务注册到eureka注册中心

首先给provider配置maven坐标(到中央仓库复制,不用加版本号,下面会介绍版本管理)
在这里插入图片描述
eureka一样,做统一的版本管理,版本为:Finchley.SR2
跟springcloud相关的依赖都会自适应地调整版本,如下:
在这里插入图片描述
然后修改配置文件,如下:
在这里插入图片描述
最后在引导类启用客户端,如下:
在这里插入图片描述
效果如下:
在这里插入图片描述
用同样的方法,把consumer也注册上去,效果如下:
在这里插入图片描述

(十一)改造:消费方解决地址硬编码问题

在这里插入图片描述
代码如下:
在这里插入图片描述
效果如下:
在这里插入图片描述

(十二)高可用的eureka

现在这种情况,eureka注册中心一旦发生单点故障,所有服务都将不可用
我们可以部署多个注册中心(开发一个,部署多个),挂掉一个,可以转换到另一个

右击eureka实例,选择Copy Configuration,如下:
在这里插入图片描述
效果如下:
在这里插入图片描述
我们希望这两个注册中心相互连接,如下图所示:
在这里插入图片描述
首先修改第一个eureka的配置,并启动,如下:
(会报错,因为端口为10087的eureka还没启动,但是不影响,微服务会隔一段时间检测、自启动)
在这里插入图片描述
然后修改第二个eureka的配置,并启动,如下:
(修改的是同一份配置文件,因为第一个eureka已经部署上去了,所以不会受到影响)
在这里插入图片描述
最终效果如下:
在这里插入图片描述
说明

  1. 此时两个eureka组成一个集群,信息会互相同步的,我们可以访问其中任意一个
  2. 如果有三个,或者更多微服务组成集群,只要围成一圈就可以了
  3. 虽然这个时候providerconsumer都是连接到端口为10086eureka,但是它们都会跟eureka集群(或者说eureka-server)会保持心跳(或者说续约),如果发现端口为10086的eureka挂掉了,会马上转接到10087

(十三)eureka详解

服务提供者要向EurekaServer注册服务,并且完成服务续约等工作。

服务提供者在启动时,会检测配置属性中的:eureka.client.register-with-eureka=true参数是否为true,事实上默认就是true,所以我们可以不用去配置,如下:
在这里插入图片描述
当检测到该值确实为true时,则会向EurekaServer发起一个Rest请求,并携带自己的元数据信息,Eureka Server会把这些信息保存到一个双层Map结构中
如:Map<serviceId,Map<服务实例的id,实力对象(instance)>>

  • 第一层Map的Key就是服务id,一般是配置中的spring.application.name属性
  • 第二层Map的key是服务的实例id,一般host+ serviceId + port,例如:locahost:service-provider:8081

在注册服务完成以后,服务提供者会维持一个心跳(定时向EurekaServer发起Rest请求),告诉EurekaServer:“我还活着”。这个我们称为服务的续约(renew)

有两个重要参数可以修改服务续约的行为:

eureka:instance:lease-expiration-duration-in-seconds: 90lease-renewal-interval-in-seconds: 30
  • lease-renewal-interval-in-seconds:服务续约(renew)的间隔,默认为30秒
  • lease-expiration-duration-in-seconds:服务失效时间,默认值90秒

也就是说,默认情况下每个30秒服务会向注册中心发送一次心跳,证明自己还活着。如果超过90秒没有发送心跳,EurekaServer就会认为该服务宕机,会从服务列表中移除,这两个值在生产环境不要修改,默认即可。

但是在开发时,这个值有点太长了,经常我们关掉一个服务,会发现Eureka依然认为服务在活着。所以我们在开发阶段可以适当调小,如下:
在这里插入图片描述

(十四)eureka详解(消费方)

当服务消费者启动时,会检测eureka.client.fetch-registry=true参数的值(当然默认值也是true),如果为true,则会拉取Eureka Server服务的列表只读备份,然后缓存在本地。并且每隔30秒会重新获取并更新数据。我们可以通过下面的参数来修改:

eureka:client:registry-fetch-interval-seconds: 5

生产环境中,我们不需要修改这个值。

但是为了开发环境下,能够快速得到服务的最新状态,我们可以将其设置小一点,如下:
在这里插入图片描述

(十五)eureka详解(失效剔除和自我保护)

服务下线

当服务进行正常关闭操作时,它会触发一个服务下线的REST请求给Eureka Server,告诉服务注册中心:“我要下线了”。服务中心接受到请求之后,将该服务置为下线状态。

失效剔除

有些时候,我们的服务提供方并不一定会正常下线,可能因为内存溢出、网络故障等原因导致服务无法正常工作。Eureka Server需要将这样的服务剔除出服务列表。因此它会开启一个定时任务,每隔60秒对所有失效的服务(超过90秒未响应)进行剔除。

可以通过修改eureka配置文件eureka.server.eviction-interval-timer-in-ms参数对其进行修改,单位是毫秒,生产环境不要修改。
这个会对我们开发带来极大的不便,你对服务重启,隔了60秒Eureka才反应过来。开发阶段可以适当调整,比如:10秒

自我保护

我们关停一个服务,就会在Eureka面板看到一条警告:
在这里插入图片描述
这是触发了Eureka的自我保护机制。当一个服务未按时进行心跳续约时,Eureka会统计最近15分钟心跳失败的服务实例的比例是否超过了85%。在生产环境下,因为网络延迟等原因,心跳失败实例的比例很有可能超标,但是此时就把服务剔除列表并不妥当,因为服务可能没有宕机。Eureka就会把当前实例的注册信息保护起来,不予剔除。生产环境下这很有效,保证了大多数服务依然可用。

但是这给我们的开发带来了麻烦, 因此开发阶段我们都会在eureka的配置文件中关闭自我保护模式:

eureka:server:enable-self-preservation: false # 关闭自我保护模式(缺省为打开)eviction-interval-timer-in-ms: 1000 # 扫描失效服务的间隔时间(缺省为60*1000ms)

(十六)springcloud相关的面试题

  • 架构的演变
    传统架构–>水平拆分–>垂直拆分(最早的分布式)–>soa(dubbo)–>微服务(springCloud)
  • 远程调用技术:rpc http
    rpc协议:自定义数据格式,限定技术,传输速度快,效率高 tcp,dubbo
    http协议:统一的数据格式,不限定技术 rest接口 tcp协议 springCloud
  • 什么是springCloud
    微服务架构的解决方案,是很多组件的集合
    eureka:注册中心,服务的注册与发现
    zull:网关协议,路由请求,过滤器(ribbon hystrix)
    ribbon:负载均衡组件
    hystrix:熔断组件
    feign:远程调用组件(ribbon hystrix)

注意:feign集成了ribbon和hystrix,所以我们通常不会直接用ribbon或hystrix,而是直接用feign

总结:springcloud的组件使用都是分成以下三步

  1. 引入组件的启动器
  2. 覆盖默认配置
  3. 在引导类上添加注解,启用相关组件
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 【软考】计算机技术与软件资格考试

    1、证书用途由人社部和工信部举办,每年5月和11月考试 作为职称证书,编制内的工作,副高及以下的职称只要获得相应证书就可以申请评审。 作为从业证书,适用于绝大多数大多数企业招聘。 作为国家认可,可申请北上广深居住证,与韩日印等国家互认。2、占坑快乐。。。 反正报肯定…...

    2024/5/5 22:25:11
  2. NVIDIA显卡的的CUDA核心是什么?

    例:我在N卡控制面板里看到的CUDA核心显示是16是什么概念?CUDA核心,理论bai上流处理器缩写是SP。但NVIDIA自己称呼他们的duSP是CUDA Core。CUDA Core只是N卡流处理zhi器而已dao,只是一个流处理器名词。CUDA是一个统一计算架构,属于软件+硬件架构统称。他不是一个软件也不是一…...

    2024/5/5 23:52:02
  3. Cobaltstrike学习(三)界面功能

    菜单栏/视图一、菜单栏介绍1.新建连接 2.断开当前连接 3.监听器 4.转换视图模式为图标模式(像网络拓扑一样) 5.转换视图模式为详细会话列表模式 6.转换视图模式为目标列表 7.凭据信息 8.下载文件 9.记录键盘 10.屏幕截图(已上线的机器的) 11.生成无状态Beacon后门 12.java签…...

    2024/5/5 12:27:01
  4. 区块链交易系统开发

    互金工场王经理(电(158c38271350)河南区块链交易所开发首选近年来,“区块链”变得非常流行。在货币圈里,各种货币都需要在交易所交易。许多人问我,交易所仍然是数字资产货币的主要交易所。那么一个区块链交易所开发要花多少钱? 如果想要做一个交易所,首先了解价格是如何…...

    2024/5/5 5:01:51
  5. 数学与应用数学专业能考CFA证吗?

    现今,CFA含金量越来越高,很多人都想去报考CFA,很多男生问融跃,数学与应用数学专业能考CFA证,融跃其实想说,CFA证书考试有涉及到数学内容,数学与应用专业考CFA有一定的帮助。一、数学与应用数学专业概括 数学与应用数学专业,主要培养掌握数学科学的基本理论、基础知识与…...

    2024/5/5 18:16:43
  6. 大型web系统架构详解

    动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。大型动态应用系统平台主要是针对于大流量、高并…...

    2024/5/5 3:33:12
  7. 【C++STL】map

    一.简介map是STL的一个关联容器,它提供一对一的hashhashhash第一个可以称为关键字(keykeykey),每个关键字只能在map中出现一次;第二个可能称为该关键字的值(valuevaluevalue);mapmapmap有一大特点即有序性。其内部是一颗红黑树,将插入,查找,删除的复杂度控制在log2nlog_…...

    2024/5/5 16:21:39
  8. 钉钉小程序和vue对比

    一、数据绑定 vue:<img :src="imgSrc"/>钉钉:<img src="{{imgSrc}}"/>二、列表渲染 vue:<ul id="example-1"><li v-for="(item,index) in items" :key="index">{{ item.message }}</li></…...

    2024/5/5 9:51:11
  9. Java的图形界面依然是跨平台的

    Awt:抽象窗口工具箱,它由三部分组成: ①组件:界面元素; ②容器:装载组件的容器(例如窗体); ③布局管理器:负责决定容器中组件的摆放位置。 图形界面的应用分四步: ① 选择一个容器: ⑴window:带标题的容器(如Frame); ⑵Panel:面板 通过add()想容器中添加组件。 …...

    2024/5/5 8:44:50
  10. Vue进阶——组件化开发

    Vue进阶——组件化开发一、什么是组件化二、组件1. 写法2. 通信3. 父子组件的访问方式三、Slot 插槽(组件扩展性)四、模板化概念 一、什么是组件化 类似微服务的软件架构,在前端开发中,一个页面的实现往往十分复杂,我们可以将一个页面划分为多个块,每个块负责相应的功能,…...

    2024/5/5 9:34:47
  11. SpringBoot配合logback达到日志切割管理通用配置

    SpringBoot项目中需要用到logback做日志切割,以下是项目中 logback-spring.xml 文件内容 日常项目中引用了 lombok 都可正常使用,因为 lombok 中已经引用了相关的日志组件。 <?xml version="1.0" encoding="UTF-8"?> <!-- scan:当此属性设置…...

    2024/5/5 16:07:21
  12. 独家报道!MySQL所有的安装部署方式详解,绝对提升你的视野

    一.前言​ linux安装软件的方式多种多样,MySQL也不例外,本文将介绍MySQL所有的安装方式。二.关于MySQL的安装​ MySQL一般可以采用四种安装方式,每种方式各有优点,使用场景各有不同:yum安装MySQL,优点:简单,方便,适用场景:可以访问网络的环境离线源码编译安装MySQL,…...

    2024/5/5 18:18:14
  13. ArchLinux安装VMWare WorkStation

    ArchLinux安装VMWare WorkStation 1.问题描述: Could not open /dev/vmmon: ???. Please make sure that the kernel module `vmmon’ is loaded.查看内核 $ uname -r安装 linux-headers $ sudo pacman -S linux-headers-x 按tab键查看加载内核模块 $ sudo modprobe -a vmw_…...

    2024/5/5 8:21:50
  14. win10系统使用自带的win7图片查看器

    把下面代码复制到txt,重新更改后缀bat,然后鼠标右键,以管理员身份运行即可@echo off&cd\&color 0a&clsecho 恢复Win7照片查看器reg add "HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations" /v ".jpg" /t REG_S…...

    2024/5/5 20:53:02
  15. JAVA在语言级支持多线程

    进程:任务 任务并发执行是一个宏观概念,微观上是串行的。 进程的调度是有OS负责的(有的系统为独占式,有的系统为共享式,根据重要性,进程有优先级)。 由OS将时间分为若干个时间片。 JAVA在语言级支持多线程。 分配时间的仍然是OS。 package TomTexts;public class TomTex…...

    2024/5/6 0:15:35
  16. 微信小程序现金红包返回“IP地址非你在商户平台设置的可用IP地址”错误终极解决方法

    百度搜了一下,没有根本解决方法(前提是在商户平台已经设置了允许的IP),就是提示IP地址非你在...的错误提示,PS:鄙视一下腾讯,既然你都知道我IP是什么,为什么你返回信息不直接告诉我真实IP地址。也有相类似的解决方法:可实际这个IP也不是我的真实IP,因为做了虚拟路由或…...

    2024/5/5 19:00:36
  17. 虚拟内存管理

    定义 虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。 我的理解 进程实例在用户态并不直接操作物理…...

    2024/4/8 7:05:44
  18. 结构化元素cv2.getStructuringElement()

    目标:了解结构化元素 cv2.getStructuringElement()原理:结构化元素:cv2.getStructuringElement()在前面的图像处理 for Python之形态学转换中,我们使用Numpy(kernel = np.ones((5,5),np.uint8)),构建了结构化元素,它是正方形的。但是有时我们构建一个椭圆形/圆形的核,…...

    2024/4/8 7:04:56
  19. C程序设计第五版1.5练习

    编写一个C程序,运行时输出以下图形。**************** #include <stdio.h> int main() {for (int i = 0; i < 4; i++){for (int j = 0; j < i*2; j++)printf(" ");printf("*****\n");}return 0; }...

    2024/4/23 10:38:39
  20. IDEA中如何使用debug调试项目

    在现在的开发中,我们经常采用Debug来追踪代码的运行流程,通常在程序运行过程中出现异常,启用Debug模式可以分析定位异常发生的位置,以及在运行过程中参数的变化。通常我们也可以启用Debug模式来跟踪代码的运行流程去学习三方框架的源码。所以学习下如何在Intellij IDEA中使…...

    2024/4/17 13:34:09

最新文章

  1. C语言--带环链表问题

    继续学习 一、判断链表是否带环 141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;用快慢指针&#xff0c;快指针走两步&#xff0c;慢指针走一步&#xff0c;当慢指针走一半快指针进到环里 当慢指针进环&#xff0c;快指针已经在环中转了一会儿了 | |…...

    2024/5/6 1:30:52
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. C++ typeid运算符介绍

    在 C 中&#xff0c;typeid() 是一个运算符&#xff0c;用于获取表达式的类型信息。typeid() 运算符在 C 中是一个强大的工具&#xff0c;可以用于获取对象的类型信息、类型比较、多态类型判断、异常处理以及类型转换安全检查等场景中。 1. 类型比较&#xff1a; 可以使用 ty…...

    2024/5/5 1:29:40
  4. Redis Stack十部曲之三:理解Redis Stack中的数据类型

    文章目录 前言String字符串作为计数器限制 List限制列表阻塞列表自动创建和删除聚合类型键限制 Set限制 Hash限制 Sorted Set范围操作字典操作更新分数 JSON路径限制 BitMapBitfieldProbabilisticHyperLogLogBloom filterCuckoo filtert-digestTop-KCount-min sketchConfigurat…...

    2024/5/4 13:36:16
  5. ChatGPT 初学者指南

    原文&#xff1a;ChatGPT for Beginners 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 介绍 如果您一直关注新闻和趋势&#xff0c;您可能已经在某个地方读到或听到过&#xff0c;Sam Altman 的生成式人工智能平台 ChatGPT 已经将人工智能推向了一个新的高度 - 许多…...

    2024/5/5 16:47:03
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/5/5 18:19:03
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/5/5 12:22:20
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/5/5 19:59:54
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/5/4 23:54:44
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/5/5 15:25:47
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/5/4 23:54:49
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/5/4 23:54:44
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/5/6 1:08:53
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/5/5 18:50:00
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/5/6 0:27:44
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/5/5 2:25:33
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/5/4 21:24:42
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/5/5 13:14:22
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/5/4 13:16:06
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/5/5 17:03:52
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/5/5 21:10:50
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/5/5 3:37:58
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/5/4 23:54:30
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/5/5 17:03:21
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/5/5 15:25:31
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57