自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 利用Django搭建python web项目(简单登录)

目前市面上web项目大多数是由java语言开发(结合spring框架),但这并不意味着只有java语言能够开发web项目,python语言、go语言同样可以做到。本文将利用Django框架(由python语言开发的web框架)来搭建一个简单的web项目,并实现简单登录功能。

2024-01-22 23:30:11 1992 1

原创 SpringCloud源码探析(十二)-基于SpringBoot开发自定义中间件

中间件是一种介于操作系统和应用软件之间,为应用软件提供服务功能的软件,按功能划分有消息中间件(Kafka、RocketMQ)、通信中间件(RPC通信中间件,dubbo等),应用服务器等。中间件屏蔽了底层操作系统的复杂性,让开放工程师可以把更多的专注力放在业务系统上,能够有效提高开发人员效率。本文主要分析利用springboot开发自定义日志中间件,通过此中间件能够打印请求入参及返回结果,帮助大家更好地理解利用springboot如何开发中间件。

2023-12-19 14:29:42 1459

原创 SpringCloud源码探析(十一)-分布式数据库Seata

在分布式系统下,一个业务跨越多个服务或数据源,每一个服务都是一个分支事务,要保证所有分支事务最终状态一致,这样的事务就是分布式事务。分布式事务的参与者、支持事务的服务器、资源服务器及事务管理器分别位于不同的分布式系统的节点之上,且属于不同的应用,分布式事务需要保证这些操作要么全部成功,要么全部失败,本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

2023-11-30 17:03:15 134

原创 SpringBoot整合Dubbo和Nacos

dubbo是一个高性能、轻量级的开源分布式服务框架,早期由阿里巴巴进行开源。它提供了服务注册、发现、调用和负载均衡等分布式服务治理功能,为分布式开发提供了极大便利。dubbo核心概念包括:Provider(消费提供者)、Consumer(服务消费者)、Registry(注册中心)、Monitor(监控中心)等,注册中心是dubbo服务治理的核心组件,dubbo依赖注册中心的协调实现服务(地址)发现,自动化的服务发现是微服务实现动态扩缩容、负载均衡、流量治理的基础。

2023-11-14 10:08:26 1176 1

原创 JAVA多线程基础篇--守护线程(Daemon Thread)

JAVA中的线程主要分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。JAVA语言中无论是线程还是线程池,默认都是用户线程,因此用户线程也被称为普通线程。守护线程也被称之为后台线程、服务线程或精灵线程,守护线程是为用户线程服务的,当线程中的用户线程都执行结束后,守护线程也会跟随结束。守护线程具有自动结束生命周期的特性,而非守护线程则不具备该特性。本文将编写一些案例,同时根据源码来对用户线程和守护线程进行分析,帮助大家更好地理解。

2023-10-23 23:14:45 1619

原创 springBoot整合讯飞星火认知大模型

讯飞星火大模型是科大讯飞最近开放的拥有跨领域的知识和语言理解能力的大模型,能够完成问答对话和文学创作等。由于讯飞星火大模型最近可以免费试用,开发者都可以免费申请一个QPS不超过2的账号,用来实现对平台能力的验证。本文将利用Springboot框架对星火大模型进行整合,使其能够提供简单的问答能力。

2023-10-20 12:40:19 4483 21

原创 SpringCloud源码探析(十)-Web消息推送

消息推送的方式主要分为两种:web消息推送和移动端消息推送。它将所要发送的信息,发送至用户当前访问的网页或者移动设备。本文主要分析在web端进行消息推送的几种方式,实现用户在web端接收推送消息。

2023-10-09 18:04:28 999

原创 SpringCloud源码探析(九)- Sentinel概念及使用

在微服务的依赖调用中,若被调用方出现故障,出于自我保护的目的,调用方会主动停止调用,并根据业务需要进行对应处理,这种方式叫做熔断,是微服务的一种保护方式。为了保证服务的高可用性,springcloud中有专门的流量管控组件,负责熔断、限流和降级。springcloud中较为知名的熔断器有Hystrix和Sentinel,本文将分析Sentinel的优势及其使用。

2023-08-10 23:36:10 1010

原创 SpringCloud源码探析(八)-ElasticSearch实战

上文分析了,让大家熟悉了es的基础使用。本文将基于上文更深入分析elasticsearch的一些高级操作,来帮助更加深入了解和使用elasticsearch。

2023-07-20 22:20:47 341 2

原创 SpringCloud源码探析(七)-整合Elasticsearch

ElasticSearch是一个基于Lucene的搜索服务器,提供了一个分布式多用户能力的全文搜索引擎。它是基于JAVA语言开发,并且是基于RESTful web接口进行查询和结果返回,是一款非常流行的企业级搜索引擎。Elasticsearch的核心功能包括存储数据和快速搜索、分析数据。本文将从elastic的基本属性和其使用方式进行分析,帮助大家快速理解。

2023-06-29 12:23:01 755

原创 SpringCloud源码探析(六)-消息队列RabbitMQ

RabbitMQ是一个开源的消息代理和队列服务器,它是基于Erlang语言开发,并且是基于AMQP协议的。由于Erlang语言最初使用与交换机领域架构,因此使得RabbitMQ在Broker之间的数据交互具有良好的性能。AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一种消息队列应用层协议,专门面向消息的中间件而设计,类似于JAVA的JMS协议,基于此规范能够开发出各种各样的消息中间件。

2023-05-15 17:09:07 1992 1

原创 SpringCloud源码探析(五)-网关Gateway的使用

在微服务架构中,网关提供了统一的对外访问入口(自身跨一个或多个服务),它保证了内部服务对外暴露的合理性与安全性、降低了服务之间访问的复杂性,是微服务架构中至关重要的一部分。在SpringCloud中网关主要包含两种:Zuul和Gateway,Zuul是基于Servlet实现的,属于阻塞式编程,而SpringCloud Gateway是基于Spring 5中提供的WebFlux,属于响应式编程的实现,具有更好的性能。本文将详细分析SpringCloud Gateway的使用以及其实现原理。

2023-04-23 13:58:11 803

原创 SpringCloud源码探析(四)-OpenFeign使用及其原理

在SpringCloud中,服务之间的调用方式可以通过ResTemplate进行调用,也可以通过Feign调用。ResTemplate的缺陷在于需要指定请求url,存在硬编码问题,导致代码难以复用和修改。而Feign调用就相对比较优雅,只需要配置服务名称即可。本文将介绍OpenFeign的使用及其原理。

2023-03-27 21:13:10 1292

原创 SpringCloud源码探析(三)-Nacos集群搭建与配置管理

上一篇文章分析了nacos单机版的部署以及SpringBoot整合nacos,nacos不仅仅可以作为注册中心,也可以作为配置中心。本文将在上文的基础上,进行nacos集群的搭建,同时展示nacos作为配置中心的使用。

2023-03-02 15:00:08 916

原创 centos7离线安装mariadb

最近新接到一个项目,由于服务器不能通外网环境,许多环境需要离线安装。离线安装又分为rpm方式安装、二进制文件安装。rpm方式安装有时候需要一些系统包,有时候可能会有问题。二进制文件安装(安装包内包含所有依赖),解压即可使用。本文将介绍centos7环境下二进制文件安装mariadb。

2023-02-27 22:52:41 1557

原创 SpringCloud源码探析(二)-Nacos注册中心

Nacos是Spring Cloud Alibaba中的核心组件之一,它提供了服务发现、服务配置和服务管理等功能,可以作为注册中心和配置中心使用。注册中心是微服务架构体系中的核心组件之一,Nacos比Eureka有着更强大的功能,它们都能提供服务注册和服务拉取、支持服务提供者以心跳的方式来健康监测。Nacos支持服务列表变更的消息推送模式,服务更新更及时;Nacos服务端会主动监测客户端状态(临时实例采用心跳模式、非临时实例采取主动监测方式)。本文将详细说明nacos的使用以及部分注意事项。

2023-02-27 17:09:21 405

原创 SpringCloud源码探析(一)-Ribbon负载均衡原理

在SpringCloud中,负载均衡是基于组件Netflix Ribbon来实现的。Ribbon客户端组件提供了一系列完善的配置(超时、重试等),它会基于用户配置的策略(或默策略),按照策略去访问Load Balancer (简称LB)后所注册的服务,保证请求按照策略分发到不同的机器上,实现负载均衡。本文将详细分析SpringCloud中Ribbon的实现原理,以及实现负载均衡策略的原理。

2023-02-06 23:47:48 571

原创 小侃设计模式(廿二)-访问者模式

访问者模式(Visitor Pattern)指的是在类的内部结构不变的情况下,不同的访问者访问这个对象都会呈现出不同的处理方式。它的主要作用时将数据结构与数据操作分离,将不同的算法与其所作用的对象进行分离。本文将详述访问者模式的原理及其使用方式。

2023-01-19 15:36:02 1411

原创 小侃设计模式(廿一)-状态模式

状态模式(State Pattern)是行为型设计模式的一种,它主要用来解决对象存在多种状态转换时,需要对外输出不同的行为。状态模式与策略模式有一定相似,区别在于策略模式行为彼此独立,可以进行相互替换;状态模式将对象状态封装在不同对象中,不同状态显示不同行为,不同状态之间可能有触发条件和先后关系。状态模式相较于策略模式而言,客户端不需要关心当前对象的状态,而策略模式需要在客户端根据状态选择调用策略类。本文将详述状态模式的原理及使用。

2023-01-15 22:08:31 500

原创 小侃设计模式(二十)-迭代器模式

迭代器模式(Iterator Pattern)提供了一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式用于访问集合中的元素而不需要知道集合底层的数据形式。在JAVA语言中,迭代器模式已经成为其中不可缺少的一部分,主要的接口就是Iterator,所有关于集合元素(Collection集合类型、Set类型等)的访问都可通过该接口来实现。本文将详细解释迭代器的原理以及使用方式。

2023-01-03 23:14:37 425

原创 小侃设计模式(十九)-解释器模式

解释器模式(Interpreter Pattern)是一种使用想对较少的模式,主要使用在编译解释等场景,例如:编译器、规则引擎解释、正则表达式解析等,这些语言又被称为领域特定语言(Domain Specific Language,DSL)。在《大话设计模式》中,对解释器的定义为:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

2022-12-30 15:28:21 647 2

原创 小侃设计模式(十八)-发布订阅模式

发布订阅模式又叫观察者模式(Observer Pattern),它是指对象之间一对多的依赖关系,每当那个特定对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新,它是行为型模式的一种。观察者模式内部有一个“主题”对象和若干个“观察者”对象,“主题对象”和“观察者”对象是一对多的依赖关系,当“主题”的状态发生变化时,所有“观察者”都得到通知。本文将详述观察者模式的原理及使用方式。

2022-12-16 17:31:53 1701

原创 小侃设计模式(十七)-中介者模式

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性,这种模式提供了一个中介类,来封装一组对象之间的交互,它将对象之间的交互委派给中介对象交互,避免了对象之间的直接交互。中介者又叫调停模式,是迪米特法则的典型代表。本文将详述中介者模式的原理及使用,帮助大家更好地理解。

2022-12-13 22:10:45 318

原创 小侃设计模式(十六)-备忘录模式

备忘录模式(Memento Pattern)是一种行为型模式,它的主要思想是在不破坏封装性的前提下,捕获一个对象的内部状态,并将该状态保存在该对象之外,这样以后就可将该对象恢复到原先保存的状态。它是相对简单的一种设计模式,能够允许用户取消不确定或者错误的操作,能够恢复到之前的状态。本文将详述备忘录模式的原理及使用方式。

2022-12-07 14:20:20 703

原创 小侃设计模式(十五)-命令模式

命令模式(Command Pattern)是将一个请求封装为一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。它是行为型模式的一种,能够有效降低系统间的耦合性。本文将详述命令模式的设计原理及使用。命令模式是对命令的一个封装,它将发出命令的责任和执行命令的责任进行分开,委派给不同的对象。

2022-12-05 23:23:25 321

原创 小侃设计模式(十四)-职责链模式

责任链模式(Chain of Responsibility Pattern)是为请求创建了一个接收者对象的链,让请求沿着这条链进行传播,直到有对象处理它为止,它属于典型的行为型模式。这种方式降低了发送者和处理者之间的耦合关系,使多个对象都有机会处理请求。责任链模式的使用场景很多,例如Struts2中的拦截器,SpringMVC中的HandlerExecutionChain等。本文将分析责任链的原理及使用,帮助大家更好地理解。

2022-11-23 21:43:31 508

原创 小侃设计模式(十三)-策略模式

策略模式(Strategy Pattern)是一种比较简单的模式,它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。策略模式具有较强的实用性,当一个对象拥有很多行为,且这些行为大部分很类似,需要大量的if…else来进行区分,使用策略模式能够有效降低耦合,降低代码复杂度。本文将分析策略模式的原理及使用方式。

2022-11-22 23:40:57 290

原创 小侃设计模式(十一)-享元模式

享元模式(Flyweight Pattern)也叫蝇量模式,它是运用共享技术有效地支持大量细粒度的对象,解决重复对象浪费内存的问题。它常用于系统底层的开发,解决系统的性能问题。比如数据库连接池,这里面都是已经创建好的连接对象,需要时直接拿来使用,避免重复创建。享元模式最经典的使用场景就是池技术了,String常量池、数据库连接池等、缓冲池等都是享元模式的使用。本文将介绍享元模式的原理及使用方式。

2022-11-14 21:12:46 743 1

原创 小侃设计模式(十)-外观模式

外观模式(Facade Pattern)为子系统中的接口提供了一个统一接口,用来访问子系统中的一组接口,这个模式定义了一个高层接口,该接口使得客户端调用系统更加地方便。**外观模式主要通过定义一个接口,屏蔽内部子系统的细节,使得调用端只和这个接口发生调用,而无须关系系统的内部细节**。外观模式是结构型模式的一种,本文将分析外观模式的原理及使用方式。

2022-11-13 16:15:05 334

原创 小侃设计模式(九)-组合模式

组合模式(Composite Pattern)又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层析关系,使用户对单个对象和组合对象具有一致的访问性,是结构型设计模式的一种。本文将分析组合模式的原理及使用方式。

2022-11-13 14:26:42 666

原创 小侃设计模式(八)-装饰者模式

装饰者模式是一种结构性设计模式,它能够动态地将新功能附加到对象上,却又不改变对象,在对象功能扩展方面,比继承更富有弹性,且符合开闭原则。这种模式创建了一个类,用来包装原有的类,在保证原来类的功能前提下,增加了额外的功能。本文将分析装饰者模式的概念及使用。

2022-11-12 14:13:39 902

原创 小侃设计模式(七)-桥接模式

桥接模式(Bridge Pattern)是用于将抽象化与实现化进行分离,使两个层次可以独立改变。它是一种结构性设计模式,通过使用封装、聚合及继承等行为让不同得类承担不同得职责。它的主要特点是将抽象(Abstration)与行为实现(Implementation)分离开来,从而保持各部分得独立性以及应该它们的功能扩展。桥接模式的使用难度相对高一点,需要对场景有较高的抽象和理解。

2022-11-10 15:59:48 248

原创 小侃设计模式(六)-适配器模式

适配器(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作,别名又叫包装器。它是结构型模式的一种,主要分为类适配器模式、对象适配器模式、接口适配器模式。本文将讲述适配器模式的基本原理及使用方式。

2022-11-09 15:04:29 364

原创 小侃设计模式(五)-建造者模式与模板方法模式

模板方法模式(Template Method Pattern),又叫模板模式(TemplatePattern),在一个抽象类公开定义了执行它的方法的模板,它的子类可以按需要重写方法实现,调用以抽象类中定义的方式进行。简而言之,模板方法模式定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重新定义该算法的某些特定步骤。

2022-11-07 17:30:44 639

原创 小侃设计模式(四)-原型模式

原型模式(Prototype Pattern)适用于创建重复的对象,同时又能保证性能,它提供了一种创建对象的最佳方式。JAVA中原型模式通you过实现一个原型接口,该接口用于创建对象的克隆,当创建对象的代价比较大时,采用这种模式能够有效提升系统性能。它是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节,本文主要讲述JAVA中采用浅拷贝和深拷贝方式来实现原型模式。

2022-11-03 16:51:49 288

原创 小侃设计模式(三)-工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂,该超级工厂又称为其它工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。抽象工厂模式的本质是抽象顶层接口(负责相关工厂的创建),工厂负责生产产品所需要的所有成分,当需要制定成分,调用指定工厂类生产,最后进行组合,形成完整的产品。抽象工厂的使用场景在于:系统的产品有多个的产品族, 而系统只消费其中某一族的产品。

2022-10-30 15:20:14 327

原创 小侃设计模式(二)-单例模式

设计模式在粒度和抽象层次上各不相同,因此从不同的角度,分类形式也不同,目前存在两种较为经典的划分方式,即根据模式作用的范围、模式的目的来划分。根据模式主要是用于类还是用于对象,可将其划分为类模式和对象模式。类模式用于处理类与子类之间的关系,这些关系通过继承建立,体现了静态性。对象模式用于处理对象之间的关系,在运行时刻可以发生变化,体现了动态性。在某种程度上来说,继承机制几乎被所有模式使用,大多数模式都属于对象模式,小部分属于类模式。根据模式目的可将模式分为创建型模式、结构型模式和行为型模式。

2022-10-28 17:04:36 438

原创 小侃设计模式(一)-设计模式七大原则

设计模式(Design Pattern)是软件设计领域的一棵长青树,它是一套被反复使用、多人知晓、经过分类编目的、优秀代码设计经验的总结。使用设计模式是为了设计出易理解、可复用、可靠的代码,增强程序的可复用性。设计模式由Erich Gamma等人从建筑领域引入软件设计领域,成为了软件开发的指导思想,目前已成为高级软件工程师不可或缺的知识。本文将分系列讲述设计模式的原理以及使用场景,来帮助大家更好地理解和使用设计。第一系列主要讲述设计模式的七大设计原则(也有说六大设计原则,本文将合成复用原则算入)。

2022-10-28 11:05:30 617

原创 Linux从入门到放弃-CentOS 7安装Docker

Docker是基于Golang语言开发的一个开源应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器并发布到任何Linux服务器上。容器是沙箱机制,相互之间不会互相影响,并且容器开销相对更低。容器与虚拟机的区别在于虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,容器技术是与宿主机共享资源及操作系统可实现动态分配的资源,容器包含应用和其想要的依赖,但是与其它容器共享内核。本文主要详述在CentOS 7系统中,安装docker并使用。

2022-10-24 21:00:37 782

原创 JAVA实现多邮件服务器发送邮件

在日常开发中,可能会遇到这样的开发需求:一些告警消息或者通知消息会使用邮件发送(针对一些消息重要但是对消息实时性要求不是特别高的场景),然而一些企业可能会有多个邮件服务器,每个邮件服务器每天只能发送指定数量的邮件,如何合理高效利用这些邮件服务器是开发者需要重点考虑的。由于SpringBoot项目对JavaMail进行了封装,方便开箱即用,然而此方案的缺陷在于只能配置一个邮件服务器地址,无法满足本文的需求。本文将基于上述需求,设计实现一种多邮件服务器发送邮件的功能,方便大家参考学习。

2022-10-10 15:21:52 3261

空空如也

空空如也

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

TA关注的人

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