自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【RabbitMQ】RabbitMQ基础认识

微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要等待服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态,因此我们成这种调用方式为同步调用,也可以叫同步通讯。但在很多场景下,我们可能需要采用异步通讯的方式,为什么呢?同步通信和异步通信(如下图):● 同步通讯:就如同打视频电话,双方的交互都是实时的。因此同一时刻你只能跟一个人打视频电话。

2024-04-15 08:33:36 798

原创 【MySQL】索引

索引(index)是帮助MYSQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。例如:sql语句:select * from user where age=45。

2024-01-27 10:31:17 1039

原创 【MySQL】锁

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

2024-01-26 09:42:15 720

原创 【MySQL】体系结构

Buffer Pool:缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增别改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘口,加快处理速度。当执行增删改语句的时候,buffer pool中没有数据,那么不会去操作磁盘,他会先把命令放到change buffer中,在未来读取数据时,会将数据合并到buffer pool中,再将合并之后的数据刷新到磁盘中。表空间的单元结构,每个区的大小为1M。

2024-01-24 09:01:29 1039

原创 【MySQL】事务

事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为也给整体一起向整体提交或撤销请求,即这些操作要么成功要么失败。默认mysql的事务时自动给提交的,也就是当执行一条DML语句,MySQL会立即隐式的提交事务比如:在银行转账中,张三原本有2000元,李四原本有2000元,张三要给李四转账1000元,在张三转账完成时系统发生故障,这1000块钱到不了李四的账户上,那么张三的1000元应该返回到张三账户,这个现象就可以使用事务。

2024-01-13 14:49:13 1033

原创 【JVM】垃圾回收机制

垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。Java 语言出来之前,大家都在拼命的写 C 或者 C++ 的程序,而此时存在一个很大的矛盾,C++ 等语言创建对象要不断的去开辟空间,不用的时候又需要不断的去释放控件,既要写构造函数,又要写析构函数,很多时候都在重复的 allocated,然后不停的析构。

2023-12-22 20:31:38 1270

原创 【多线程】线程池详解

线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象;线程池是一种池化的技术实现,池化技术的核心思想就是实现资源的复用,避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程,让线程执行完任务之后不进行销毁,而是继续去处理其它线程已经提交的任务。MyWorker类:线程执行的逻辑,用于保存线程的名字//用于保存线程的名字。

2023-12-14 19:53:45 836

原创 【Java基础】字符串常量池

首先提出一个问题:在下面这个代码段中有几个对象?String s=new String("字符串")答:2个对象。分别在字符串常量池1个,堆中有一个。首先使用new关键字创建对象时,虚拟机会去字符串常量池中去找有没有“字符串”这个对象,如果有就不会再去创建对象,直接再堆中创建对象“字符串”。然后把堆中“字符串”的地址返回给s。如果字符串常量池中没有就创建一个“字符串”对象,再去堆中创建对象“字符串”,并且s会指向堆中的这个对象。这样就会有一个问题:在内存中开辟两块空间,对资源造成一定的浪费。

2023-12-01 10:18:16 969

原创 【项目实战】多租户实现数据库动态切换

多数据源切换是现代应用开发中的重要功能之一。对于数据源切换,我们可以采取两种方式:@DS切换和手动切换。@DS切换是一种自动化方式,通过在代码中配置切换规则,系统可以根据预设条件自动切换数据源。这种方式能够减少人工操作的繁琐,提高效率和准确性。它适用于在特定场景下需要频繁切换数据源的情况,例如负载均衡、读写分离等。通过@DS切换,我们可以灵活地管理和调度多个数据源,实现资源的优化利用和负载均衡,从而提升系统的性能和可扩展性。另一方面,手动切换是一种更加灵活的方式。

2023-11-20 19:26:38 295

原创 软件开发工具总结篇

作为软件开发人员,我们需要使用许多工具来帮助我们完成工作。这些工具包括编程语言、编辑器、集成开发环境(IDE)和其他辅助工具。在本文中,我们将讨论一些常见的软件开发工具,并对它们进行比较。

2023-10-24 08:55:37 122

原创 【项目实战】单数据源多数据库实现多租户

多租户(Multi-Tenancy)是一种软件架构设计模式,旨在使单个应用程序可以同时为多个租户(如不同组织、用户或客户)提供服务,每个租户都拥有独立的数据和配置,并且彼此之间相互隔离。实现多租户架构可以帮助企业降低成本、简化管理并提高效率。在设计多租户系统之前,我们需要明确业务需求和预期目标。是否希望租户之间完全隔离,还是允许一些共享资源?我们需要考虑以下几个方面:数据隔离:每个租户的数据应该彼此隔离,不同租户之间不能直接访问或共享数据。

2023-09-29 09:14:42 968

原创 【算法】贪心法

在计算机科学中,贪心算法是一种常用的算法设计策略,它通过选择每一步的局部最优解来构建问题的全局最优解。贪心算法的特点是简单直观,易于实现,且在某些情况下能够高效地得到近似最优解。然而,需要注意的是贪心算法并不适用于所有问题,因为它通常没有考虑到问题的整体结构和约束条件。在实际应用中,我们必须仔细评估问题的特点,在权衡时间复杂度和解决方案质量时作出适当的选择。总体而言,贪心算法具有以下特点:贪心选择性质:贪心算法每一步都选择当前局部最优解,相信通过这种选择可以得到全局最优解。

2023-09-27 09:15:52 460

原创 【算法】分治法

分治算法通过将问题划分为较小的子问题来解决复杂问题。它通常用于排序和查找问题,以及一些优化问题。分治算法的优点包括可以高效地解决大规模问题,简化问题的复杂性,并利用并行计算的优势。然而,分治算法的缺点在于递归过程中可能带来额外的开销,并且在某些情况下问题规模过小无法发挥优势。与暴力穷举法相比,分治算法通过分解问题降低了时间复杂度。与动态规划相比,分治算法通常不要求子问题之间存在重叠。请注意,这只是一个简单的表格分析,实际上,随着问题的不同,分治算法的使用场景、优缺点等方面可能会有所变化。

2023-09-27 09:07:42 219

原创 【算法】直接插入排序

直接插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是将待排序的序列分为已排序和未排序两部分,每次从未排序部分选择一个元素,插入到已排序部分的合适位置,直到所有元素都被插入完毕。以下是直接插入排序的几个要点总结:实现思路:将待排序序列分为已排序部分和未排序部分。初始时将第一个元素视为已排序部分,剩下的元素视为未排序部分。然后逐个从未排序部分选择元素,通过比较找到插入位置并将其插入到已排序部分,依次重复这个过程直至整个序列有序。

2023-09-27 08:56:37 718

原创 【算法】动态规划

动态规划(Dynamic Programming)是一种通过将问题划分为相互重叠的子问题来解决问题的算法思想。其核心思想是通过保存已经计算过的子问题的解,避免重复计算,从而降低时间复杂度。动态规划的适用条件包括:问题具有最优子结构:问题的最优解可以通过子问题的最优解来构造。子问题之间存在重叠:原问题的求解过程中,多次求解相同的子问题。动态规划的基本步骤如下:1、定义状态:明确问题的状态,并用状态变量表示。2、确定状态转移方程:根据问题的最优子结构,确定状态之间的转移关系。3、初始化:设置初始状态的值

2023-09-27 08:47:30 507 1

原创 【项目实战】Linux系统下jar包自启动

*当将Jar包设置为Linux系统的自启动服务时,还可以进一步丰富内容,具体包括:系统资源管理:通过自启动服务,可以在系统启动时合理分配和管理系统资源,例如CPU、内存和网络等。可以根据实际需求对程序的资源使用进行优化,并确保其他重要任务和服务能够正常运行。安全性增强:通过将程序设置为自启动服务,可以使用特定的用户身份或权限来运行程序,以提高安全性。可以限制访问权限,并确保只有授权用户能够访问和操作相关服务。这有助于防止未经授权的访问和潜在的安全漏洞。

2023-09-25 17:55:20 2145

原创 RestTemplate:简化HTTP请求的强大工具

RestTemplate是一个在Java应用程序中发送RESTful HTTP请求的强大工具。本文将介绍RestTemplate的定义、作用以及与HttpClient的对比,以帮助读者更好地理解和使用这个常用的HTTP客户端库。RestTemplate是Spring框架提供的一个用于发送HTTP请求的模板类。它通过封装底层的HTTP连接和通信细节,使开发者能够更方便地发送和处理HTTP请求,并与RESTful Web服务进行交互。

2023-09-23 21:07:29 389

原创 gateway之整合sentinel流控降级

流控降级是一种在高并发场景下保护系统可用性的策略,它通过对系统的流量进行控制和管理,以防止系统资源耗尽和崩溃。当系统面临压力过大或者异常情况时,流控降级可以暂时关闭或切换非关键功能,保障核心服务的正常运行。下面详细介绍流控降级的几个关键概念。流量控制:流量控制是指通过限制系统的请求处理能力,确保系统在承受范围内运行。通过设置QPS(每秒请求数)或并发请求数的上限,防止系统被大量请求击穿。流量控制可以避免系统负载过重,导致响应时间延长或系统崩溃。

2023-09-23 16:03:38 225

原创 gateway之跨域处理

跨域(Cross-Origin)是指在浏览器中,当一个Web应用程序试图访问与其所属页面不同的源(origin)的资源时,浏览器会对这种行为进行安全限制,并阻止一些跨域请求,以保护用户的数据安全。在浏览器遵循同源策略的限制下,同一个源的脚本只能访问相同源下的资源,不能访问其他源下的资源。同源策略通过限制跨域请求,防止恶意网站通过跨站脚本攻击(XSS)和跨站请求伪造(CSRF)等手段盗取用户的敏感信息或进行其他恶意行为。

2023-09-23 15:36:07 982

原创 深入理解Elasticsearch中的Match Phrase查询

Elasticsearch是一个功能强大的开源搜索引擎,它提供了丰富的查询功能。其中,Match Phrase查询是一种强大的查询类型,可以在文本中查找精确的短语匹配。本文将介绍Match Phrase查询的原理、用法和示例代码,并探讨其在实际应用中的一些注意事项。深入理解Elasticsearch中的Match Phrase查询对于有效地利用全文搜索引擎的功能至关重要。通过将查询短语作为一个完整的词组进行搜索,Match Phrase查询提供了一种精确匹配特定短语的方法,而不考虑单词的顺序和距离。

2023-09-22 20:16:48 744

原创 gateway之过滤器(Filter)详解

在Spring Cloud中,过滤器(Filter)是一种关键的组件,用于在微服务架构中处理和转换传入请求以及传出响应。过滤器位于服务网关或代理中,并通过拦截请求和响应流量来提供各种功能。过滤器在请求的不同生命周期阶段执行特定的操作,例如鉴权、认证、请求转发、限流、日志记录等。它们可以在服务调用链中的不同位置进行配置和应用,以实现各种需求和业务规则。Spring Cloud Gateway和Zuul是两个常用的Spring Cloud组件,提供了内置的过滤器机制。

2023-09-22 11:50:17 2293

原创 gateway之断言的使用详解

所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这甲实现,诸如认证、鉴权、监控、路由转发等等Spring Cloud Gateway(简称Gateway)支持断言Predicate功能,该断言功能是基于Spring WebFlux的HandlerMapping实现的。

2023-09-21 08:35:52 723

原创 C#中的方法

C#语言和之前学习VB 一样,在代码中也有方法的使用,那么方式是如何应用的呢?下面看下介绍。语法:[访问修饰符] static 返回值 方法名([参数列表])---------说明:[ ]中的内同可以写,也可以省略{方法体}例如:public static void show() --因为有void,所以此方法没有返回值、没有参数的方法,如果方法的前面加上static,此方法就为静态方法。计算数组中最大值、最小值和总和,下面的代码就利用了调用函数来做的需要说明的是,在新建

2023-09-18 19:07:34 1861 8

原创 UML活动图

在UML中,活动图本质上就是流程图,它描述系统的活动、判定点和分支等,因此它对开发人员来说是一种重要工具。活动图活动是某件事情正在进行的状态,既可以是现实生活中正在进行的某一项工作,也可以是软件系统中某个类对象的一个操作。活动图和流程图的区别1、流程图着重描述处理过程,他的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系,而活动图描述的是顺序关系说遵循的规则,它着重表现的是系统行为,而非系统的处理过程。2、活动图能够表示并发活动的情形,而流程图不能。3、活动图.

2023-09-18 19:03:10 824 4

原创 软件工程之总体设计

可行性研究具体方面:经济可行性、技术可行性、操作可行性、法律可行性、时间可行性软件计划书是用管理员,技术人员和用户都能理解的术语来描述的具体内容,包括1、软件的范围(软件功能规模、软件能力对硬件的要求)2、环境资源(人力资源、硬件、软件、制定进度表、软件成本)软件价格估计:参数化算法:C=f(v) c是原件价格 v所选取的应i想软件价格的独立参数代码行估算 源代码行,不包括注释行软件需求的指导性原则:1、在开始建立分析模型前,先理解问题2、开发原型,使得用户将如何发生

2023-09-18 18:58:37 2374 7

原创 讨论问题--数据类型、数组、传值/址API函数等

传址:调用地址,例如:数组的位置,在你要用一个数组的时候,传过来的就是数组的地址,而不是数组里的内容。引用类型为传址传值:传的是数值,如数值型、布尔型、日期型等sub和function的区别:sub是一个过程,而function是一个函数,(function也是一个过程)每个过程是为了完成一个特定的任务。sub没有返回值,function可以有也可以没有返回值动态数组:随着添加而添加,...

2023-09-18 18:35:31 380 10

原创 初识软件工程

什么是软件?计算机系统中与硬件相互依存的一部分,数据及相关文档的完整集合。软件特点逻辑实体,具有抽象性软件的生产与硬件不同,在他的开发过程中没有明显的制造过程运行过程中,没有机械磨损、老化问题软件开发受到开发和运行受到硬件的限制,对计算机系统有不同的依赖性软件开发未完全摆脱手工艺的开发方式软件本身是复杂的软件成本相当昂贵分类一、1、系统软件2、支撑软件3、应用软件二、工作方式分类1.实时处理软件2、分时软件3、交互式软件4、..

2023-09-18 18:32:13 459 7

原创 UML基础与应用之面向对象

对象对象可以是物理实体、概念实体、软件实体,具有状态(静态信息 属性)、行为(动态)、标识(名字)行为反映的是一个对象将如何响应其他对象。类:类是对一组具有相同属性、行为、和语义的对象的描述。一个对象是一个类的实例。类的表示说明:第一行是类的名称,第二行是类的属性,第三行是类的方法,属性和方法可以省略。如图类和对象的关系类是对象的抽象定义,它定义了属性和方法,提供了一个创建对象的模板面向对象的基本内容属性:描述的是对象静态部分操作:通过操作可以读取、修改.

2023-09-18 18:28:46 974 3

原创 UML基础与应用之对象图

对象图:表示在某一时刻一组对象以及他们之间关系的图。对象图可以被看作是类图在系统某一时刻的实例。图形上由节点以及连接这些节点的连线组成,几点可以是对象也可以是类。和类图一样,可以使用队形图对系统的静态设计或静态进程视图建模,但对象图更注重于现实或原型实例,这种视图主要支持系统的共嗯那个需求,即系统提供给其最终用户的服务,对象图描述了静态的数据结构。对象图建模过程1、确定参与交互的各对象的类,可以参照相应的累土和交互图2、其欸的那个类间的关系,如依赖、泛化、关联、实现3、针对交互在..

2023-09-18 18:25:26 1196 1

原创 UML六大关系总结

UML六大关系有:继承、关系、聚合、组合、实现、依赖。分为通过图和代码总结这些关系。1、继承class Bird:Animal{}说明:一段都是子类继承父类,在子类的后面用一个冒号表示,冒号后面跟着父类的名字。继承只能继承父类共有和保护的属性或方法,私有的变量或方法不能被子类继承。2、关联Class Penguin{private Climate climate;//关联}说明:关联关系在代码中体现在集合、数组传值等方面。传值的话,需要提前...

2023-09-18 18:24:53 913 6

原创 WPF中DataGrid控件绑定数据源

<DataGrid IsEnabled="False" ItemsSource="{Binding OpInqueryLine}" x:Name="OperatorWork" CanUserAddRows="False" HorizontalAlignment="Left" Height="312" Margin="47,106,0,0" VerticalAlignment="Top" Width="629"> <DataGrid.Columns&gt...

2023-09-18 18:23:33 2320 4

原创 E—R图总结

什么是E-R图E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。它是描述现实世界关系概念模型的有效方法。是表示概念关系模型的一种方式。用“矩形框”表示实体型,矩形框内写明实体名称;用“椭圆图框”或圆角矩形表示实体的属性,并用“实心线段”将其与相应关系的“实体型”连接起来;用”菱形框“表示实体型之间的联系成因,在菱形框内写明联系名,并用”实心线段“分别与有关实体型连接起来,同时在”实心线段“旁标上联

2023-09-18 16:40:23 2849 7

原创 Java-钉钉订阅事件

钉钉订阅事件是指钉钉开放平台提供的一种机制,允许开发者订阅企业内部发生的各类事件,例如员工加入、离职、部门变动、审批进度更新等。当这些事件在企业内部发生时,钉钉会向开发者事先指定的回调地址发送相应的通知,开发者可以根据通知进行进一步处理。通俗来将钉钉回调就是让钉钉来订阅我们的一个接口。还是看钉钉的文档介绍。添加链接描述钉钉订阅事件的优势和特点1、实时性:钉钉订阅事件可以在事件发生之后立即通知开发者,保证了信息的实时性和准确性。

2023-09-09 10:26:25 524

原创 项目实战:ES的增加数据和查询数据

Elasticsearch (ES) 是一个分布式搜索和分析引擎,它具有强大的实时数据处理能力。以下是关于ES增加和删除业务场景的总结,旨在提升您对ES的理解。ES的增加业务场景数据索引和搜索ES的主要用途之一是将数据索引到Elasticsearch集群中,并使用其强大的搜索功能来查询和检索数据。以下是一些使用ES进行数据索引和搜索的业务场景:电子商务网站:将商品信息索引并快速搜索,实现商品的全文搜索、过滤和排序。

2023-09-08 21:01:45 2856

原创 ElasticSearch的安装部署-----图文介绍

Elasticsearch 被设计用于处理大规模数据集并实时查询。它可以快速地索引和搜索各种类型的数据,包括结构化、非结构化和地理空间数据。是一个高度可扩展的分布式搜索和分析引擎,它能够处理海量数据的索引和检索,并提供实时查询和分析功能。它基于Apache Lucene库构建,使用倒排索引来高效地存储和搜索数据。在Elasticsearch中,数据被划分为多个分片(shard),每个分片可以在不同的节点上进行复制和分布。

2023-09-06 09:08:44 2039 6

原创 JUC并发编程---Lock锁

官网介绍:虽然synchronized方法和语句的范围机制使得使用监视器锁更容易编程,并且有助于避免涉及锁的许多常见编程错误,但是有时您需要以更灵活的方式处理锁。例如,用于遍历并发访问的数据结构的一些算法需要使用“手动”或“链锁定”:您获取节点A的锁定,然后获取节点B,然后释放A并获取C,然后释放B并获得D等。所述的实施方式中L0Ck接口通过允许获得并在不同的范围释放的锁,并允许获得并以任何顺序释放多个锁使得能够使用这样的技术。随着这种增加的灵活性,额外的责任。

2023-09-02 09:46:17 1927

原创 JUC集合、map线程安全

例如上图:有一个集合(方框),有多个线程同时读取其中的数据,也就是并发读。当往集合中写入数据的时候,会把之前的集合复制一份出来,并在新的集合中进行独立的写。当写完之后会进行合并,再进行读的时候就会读取新的集合。中的数据。根据该过程可以解决集合并发出现的问题。就不会出现并发修改的异常在并发编程中,Java提供了一些线程安全的集合类,如JUC集合和ConcurrentHashMap。这些集合类在多线程环境下能够保证数据的一致性和线程安全性。

2023-08-25 10:13:03 1886

原创 前端:VUE2中的父子传值

父子传值是指在程序中父组件向子组件传递数据的过程。在前端开发中,父子组件通常是指父组件包含一个或多个子组件,子组件嵌套在父组件中。父子传值可以通过props属性来实现。父组件可以通过props将数据传递给子组件,子组件可以通过props接收父组件传递的数据。这样,父组件和子组件之间就可以进行数据的传递和共享。父组件传递给子组件的数据可以是任意类型,包括基本类型(如字符串、数字、布尔值等)和复杂类型(如对象、数组等)。

2023-08-19 09:30:22 1964

原创 @Param详解

Param注解是一种用于标记方法参数的注解,它用于指定该参数的名称和类型,在使用该参数时可以通过名称来引用。在不同的编程语言和框架中,@Param注解的具体用法和功能可能会有所不同。在Java开发中,如果用到了mybatis,那么@Param是用户给方法参数指定一个名称,以便在Mapper XML文件中引用该参数。总结起来,@Param注解用于在Mapper接口方法中明确指定参数的名称,以提高方法的可读性和可维护性。

2023-08-13 17:59:13 7249 1

原创 ThreadLocal基本介绍

ThreadLocal是Java中的一个线程本地变量,它提供了一种在多线程环境下保持变量的副本,每个线程都可以独立地修改自己的副本,而不会影响其他线程的副本。在每个线程Thread内部有一个ThreadLocal.ThreadLocalMap类型的成员变量threadLocals,这个threadLocals就是用来存储实际的变量副本的,键值为当前ThreadLocal变量,value为变量副本(即T类型的变量)。

2023-08-07 10:35:39 1859

空空如也

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

TA关注的人

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