自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Redis分布式锁

是一种在分布式系统下用来生成全局唯一ID的工具,一般要满足下列特性。

2023-10-18 18:29:14 258

原创 Redis代替session 实现登录流程

当注册完成后,用户去登录会去校验用户提交的手机号和验证码,是否一致,如果一致,则根据手机号查询用户信息,不存在则新建,最后将用户数据保存到redis,并且生成token作为redis的key,当我们校验用户是否登录时,会去携带着token进行访问,从redis中取出token对应的value,判断是否存在这个数据,如果没有则拦截,如果存在则将其保存到threadLocal中,并且放行。,然后让前端带来这个token就能完成我们的整体逻辑了。在设计这个key的时候,我们之前讲过需要满足两点。

2023-10-01 12:23:02 401

原创 缓存更新策略

缓存更新是redis为了节约内存而设计出来的一个东西,主要是因为内存数据宝贵,当我们向redis插入太多数据,此时就可能会导致缓存中的数据过多,所以redis会对部分数据进行更新,或者把他叫为淘汰更合适。

2023-09-10 12:18:38 583

原创 RedisJava基础代码实现

整体可读性有了很大提升,并且能将Java对象自动的序列化为JSON字符串,并且查询时能自动把JSON反序列化为Java对象。不过,其中记录了序列化时对应的class名称,目的是为了查询时实现自动反序列化。这会带来额外的内存开销。

2023-09-08 15:30:51 348

原创 RabbitMQ高级特性

firehose的机制是将生产者投递给rabbitmq的消息,rabbitmq投递给消费者的消息按照指定的格式发送到默认的exchange上。其中exchangename和queuename为实际exchange和queue的名称,分别对应生产者投递到exchange的消息,和消费者从queue上获取的消息。是指,当消息一旦被Consumer接收到,则自动确认收到,并将相应 message 从 RabbitMQ 的消息缓存中移除。在RabbitMQ中也提供了事务机制,但是性能较差,此处不做讲解。

2023-09-06 17:22:48 591

原创 RabbitMQ基础

MQ全称消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进 行通信。AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议 的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中 间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。类比HTTP。

2023-09-05 18:05:20 1086

原创 Dubbo

Dubbo实现多种语言,为所有主流语言提供对等的微服务开发体验作为一款微服务框架,最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示,Dubbo 的服务消费者(Consumer)通过一系列的工作将请求发送给服务提供者(Provider)。在数据面,作为一款微服务框架最重要的是向用户提供跨进程的 RPC 远程调用能力,在控制面,作为微服务的抽象控制面,Dubbo由一系列可选的微服务治理组件构成,负责Dubbo集群的服务发现,流量管控,可视化监测等。

2023-09-03 18:10:49 248

原创 zookeeper

是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简单来说zookeeper=文件系统+监听通知机制。

2023-08-30 10:51:47 726

原创 安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。Docker CE 分为stabletest和nightly三个更新频道。官方网站上有各种环境下的,这里主要介绍 Docker CE 在 CentOS上的安装。

2023-04-20 09:51:22 472

原创 Gateway服务网关

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:参数中是否有authorization,authorization参数值是否为admin如果同时满足则放行,否则拦截@Component@Override// 1.获取请求参数// 2.获取参数中的 authorization 参数// 3.判断参数值是否等于 admin// 4.是,放行// 5.否,拦截// 5.1.设置状态码// 5.2.拦截请求@Override。

2023-04-17 09:26:34 733

原创 Feign远程调用

Feign可以支持很多的自定义配置,如下表所示:一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可。

2023-03-29 19:43:27 1204

原创 Nacos集群搭建

官方给出的Nacos集群图:其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。

2023-03-29 18:40:58 1070 1

原创 Nacos配置管理

{spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id,来读取配置。当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。其实微服务启动时,会去nacos读取多个配置文件,而[spring.application.name].yaml不包含环境,因此可以被多个环境共享。

2023-03-17 20:59:31 1321

原创 Activity的启动和结束

看一个示例,Activity3 设置为singleInstance,Activity1 和 Activity2 默认(standard),下图程序流程中,黄色的代表 Background 的Task,蓝色的代表 Foreground 的Task。对于不允许重复返回的情况,可以设置启动标志FLAG_ACTIVITY_CLEAR_TOP,即使活动栈里面存在待跳转的活动实例,也会重新创建该活动的实例,并清除原实例上方的所有实例,保证栈中最多只有该活动的唯一实例,从而避免了无谓的重复返回。

2023-03-09 11:15:10 18993

原创 Nacos注册中心

国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。认识和安装Nacos是阿里巴巴的产品,现在是中的一个组件。相比功能更加丰富,在国内受欢迎程度较高。服务注册到nacosNacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。主要差异在于:依赖不同服务地址不同。

2023-02-11 15:27:14 426 1

原创 Nacos安装指南

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。windows版本使用nacos-server-1.4.1.zip包即可。Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。上传到某个目录,例如:/usr/local/如果无法关闭占用8848端口的进程。开发阶段采用单机安装即可。1.Windows安装。然后重命名为java。

2023-02-11 05:22:14 194

原创 Eureka 和 Ribbon

SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系。:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责。:将业务的所有功能集中在一个项目中开发,打成一个包部署。隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题。自治:团队独立、技术独立、数据独立,独立部署和交付。面向服务:服务提供统一标准的接口,与语言和技术无关。有利于服务升级和拓展。服务调用关系错综复杂。

2023-02-11 05:04:41 201

原创 行为型模式:模板模式

基本方法:是实现算法各个步骤的方法,是模板方法的组成部分。基本方法又可以分为三种:抽象方法(Abstract Method) :一个抽象方法由抽象类声明、由其具体子类实现。具体方法(Concrete Method) :一个具体方法由一个抽象类或具体类声明并实现,其子类可以进行覆盖也可以直接继承。钩子方法(Hook Method) :在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。一般钩子方法是用于判断的逻辑方法,这类方法名一般为isXxx,返回值类型为boolean类型。

2022-11-22 08:55:45 130

原创 结构模式:享元模式

享元模式(Flyweight Pattern)运用来有效地支持大量细粒度对象的复用,减少创建对象的数量,以减少内存占用和提高性能。提供了减少对象数量从而改善应用所需的对象结构的方式。

2022-11-14 16:31:56 153

原创 结构型模式:组合模式

一个文件系统这样的结构我们称之为树形结构。在树形结构中可以通过调用某个方法来遍历整个树,当我们找到某个叶子节点后,就可以对叶子节点进行相关的操作。可以将这颗树理解成一个大的容器,容器里面包含很多的成员对象,这些成员对象即可是容器对象也可以是叶子对象。但是由于容器对象和叶子对象在功能上面的区别,使得我们在使用的过程中必须要区分容器对象和叶子对象,但是这样就会给客户带来不必要的麻烦,作为客户而已,

2022-11-14 15:20:49 119

原创 结构型模式:外观模式

外观模式(Facade Pattern)又名门面模式,隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。降低访问复杂系统的内部子系统时的复杂度,简化客户端之间的接口为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

2022-11-08 09:54:24 219

原创 结构型模式:桥接模式

* 抽象化(Abstraction)角色 :定义抽象类,并包含一个对实现化对象的引用。* 扩展抽象化(Refined Abstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。* 实现化(Implementor)角色 :定义实现化角色的接口,供扩展抽象化角色调用。* 具体实现化(Concrete Implementor)角色 :给出实现化角色接口的具体实现。

2022-11-08 09:08:46 154

原创 结构型模式:装饰者模式

允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。多层装饰比较复杂。例:快餐店。

2022-11-08 08:49:15 77

原创 结构型模式:适配器模式

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作,。适配器模式分为和,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。。

2022-11-06 10:53:31 121

原创 结构型模式:代理模式

结构型模式:关注类和对象的组合,描述如何将类或对象按某种布局组成更大的结构 。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。代理模式 代理模式(Proxy Pattern)一个类代表另一个类的功能,由于某些原因需要给某对象提供一个代理以控制对该对象的访问。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理

2022-11-05 21:54:09 105

原创 创建者模式:建造者模式

使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。分离了部件的构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象;相同的构建器,不同的装配顺序也可以做出不同的对象。

2022-11-04 23:19:26 289

原创 创建者模式 :原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。何时使用当一个系统应该独立于它的产品创建,构成和表示时。

2022-11-04 22:51:42 96

原创 创建者模式 :工厂模式

一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。您需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽车是怎么做出来的,以及这个汽车里面的具体实现,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对象解耦的目的;

2022-11-04 22:28:30 88

原创 创建者模式 :单例设计模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

2022-11-04 18:36:12 151

原创 软件设计原则

上面类图可以看到已经组装了一台电脑,但是似乎组装的电脑的cpu只能是Intel的,内存条只能是金士顿的,硬盘只能是希捷的,这对用户肯定是不友好的,用户有了机箱肯定是想按照自己的喜好,选择自己喜欢的配件。选择cpu有很多选择,如Intel,AMD等,硬盘可以选择希捷,西数等,内存条可以选择金士顿,海盗船等。迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。,两者都应该依赖其抽象;

2022-11-02 20:47:11 71

原创 设计模式概述

用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。

2022-11-02 11:22:54 66

原创 HTTP 请求

对 application/x-www-form-urlencoded 和 multipart/form-data 格式的数据,Spring 接收方式是统一的,只需要用 java bean 的属性名对应请求参数名即可。跟上面的125 不一样,因为在多部分的数据中每段数据有个/n的回车,所以要把每一段的 回车计算进去,+9 所以是 116+9。有会话是指,客户端和服务端都有相应的技术,可以暂存数据,让数据在请求间共享。文件上传的时候见到的,boundary 分隔符的定义,因为是多部分组成的。

2022-10-09 12:47:16 624

原创 java 三大器

java的拦截器主要是用在插件上,扩展件上比如 Hibernate Spring Struts2等,有点类似面向切片的技术,在用之前先要在配置文件即xml,文件里声明一段的那个东西。,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。所谓过滤器顾名思义是用来过滤的,Java的过滤器能够为我们提供系统级别的过滤,也就是说,过滤器(Filter)

2022-09-14 23:28:02 145

原创 深入理解SpringApplication.run(PeaApplication.class,args)(2)

System中getProperty()有2个重载方法,但却只有一个setProperty()方法,其中getProperty()有单参和双参两方法,单参就是简单的获取属性,有就有,没有就没有,双参则聪明一点,在没有的时候会返回一个调用者指定的默认值,所以经过这样操作后,不管有没有那个属性,最终都能保证有.给属性设值System.setProperty(),它的值来源于System.getProperty(),奇怪了,为什么把属性从一个地方取出来,然后又设置到同一个地方,这不是多此一举吗?

2022-09-11 11:27:41 576

原创 深入理解SpringApplication.run(PeaApplication.class,args)(1)

运行流程:前言本篇将对SpringApplication.run()方法进行源码溯源,深入理解该方法在进入该方法后,把第一个class参数转化为数组类型,调用同名方法这里有2个核心1个是SpringApplication的创建,另1个是其run方法的调用其中SpringApplication的创建时,进入SpringApplication的构造函数其中初始化与监听器 getSpringFactoriesInstances。

2022-09-09 16:02:12 2069

原创 MyBatisPlus配置与实现

MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率由于MP并未被收录到idea的系统内置配置,无法直接选择加入,需要手动在pom.xml中配置添加pom.xml补全依赖从MP的依赖关系可以看出,通过依赖传递已经将MyBatis与MyBatis整合Spring的jar包导入,我们不需要额外在添加MyBatis的相关jar包。...

2022-08-27 15:44:55 1486

原创 SpingBoot

简化Spring应用的初始搭建以及开发过程。SpringBoot 程序优点恰巧就是针对 Spring 的缺点自动配置。这个是用来解决 Spring 程序配置繁琐的问题起步依赖。这个是用来解决 Spring 程序依赖设置繁琐的问题辅助功能(内置服务器,...)。我们在启动 SpringBoot 程序时既没有使用本地的 tomcat 也没有使用 tomcat 插件,而是使用 SpringBoot 内置的服务器。...

2022-08-27 10:30:53 99

原创 私服的配置与实现

目录私服私服仓库分类 本地仓库访问私服配置步骤1:私服上配置仓库步骤2:配置本地Maven对私服的访问权限步骤3:配置私服的访问路径私服资源上传与下载步骤1:配置工程上传私服的具体位置步骤2:发布资源到私服 私服资源操作流程分析: 说明:第5,6步骤是创建itheima-snapshot仓库第7,8步骤是创建itheima-release仓库文件路径 C:\Program Files (x86)\Java\apache-maven-3.8.4\conf\settings.xml步骤3:配

2022-08-24 09:09:15 512

原创 Maven高级

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata

2022-08-23 13:49:18 904

原创 拦截器配置与实现

拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行作用:在指定的方法调用前后执行预先设定的代码,阻止原始方法的执行,

2022-08-20 15:49:09 1085

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除