自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常用算法知识点

当有一串无需数列待排序时,那么冒泡排序就会每次挑选出最大的数,置于这串数的末尾,然后从剩下的数中再挑选出最大的放置在末尾(这里的末尾应当指当前剩余未排列数组的末尾,即上次排好的数之前)。重复上述过程,直到最后一个数被排完。所以冒泡排序的时间复杂度为O(

2023-09-19 16:36:04 111

原创 JAVA中的集合知识点

JAVA中的集合主要又Collection和Map两个接口组成。其中Collection包括Set、List、Queue三个实现类,而Map接口包含TreeMap、HashMap、HashTable等实现类。下面是主要介绍。

2023-09-06 17:06:31 118

原创 JVM的介绍

对于java中的引用类型,分为强引用、软引用、弱引用、虚引用(引用强度逐渐减弱)这四种引用类型。

2023-08-18 20:10:55 131

原创 Spring中Bean的生命周期和作用域

如果bean的作用域的属性被声明为singleton,那么Spring IOC容器只会创建一个共享的bean实例。对于所有的bean请求,只要id与该bean定义的相匹配,那Spring每次需要时都会返回同一个bean实例。

2023-08-08 23:25:10 61

原创 MySQL的索引设计

MySQL的索引能够有效提升SQL语句的查询效率,提高数据处理速度。但是索引不是越多越好,对于一些数据量较小的表,创建索引造成的时间和空间消耗可能会大于原本的查询语句的消耗。索引字段的选择对于SQL语句的查询效率也有很大的提升,对于一些区分度较低和不常使用的字段创建字段,将不能达到优化查询效率的结果。

2023-08-07 18:33:47 100

原创 SpringBoot集成Redis的操作流程

在yml文件中配置了redis后,此时启动会报错,因为我们在项目中引入redis是做缓存的作用,此时没有引入MySql数据库,但是启动redis之后还是会加载数据库需要使用的一些类,因此会报错。我们在前端使用URL两次访问该方法,对于前端传来的URL,如果是从缓存中查询,那么我们打印一串*********,然后打印查询到的数据,如果是从数据库中查询,我们直接打印查询到的数据。我们还设置了redis运行的ip地址,端口号,数据库,超时时间,以及最大连接数,最大阻塞等待时间,最大空闲连接等参数。

2023-07-17 10:32:39 143

原创 使用Seata实现分布式事务

Seata的设计目标是对业务无侵入,因此从业务无侵入的两阶段提交方案着手,在传统两阶段提交的基础上演进。他把一个分布式事务理解成一个包含了若干分支事务的全局事务。全局事务的职责是协调其下管辖的分支事务达成一致,要么一起成功提交,要么一起失败回滚。此外,通常分支事务本身就是一个关系数据库的本地事务。Seata主要由三个重要组件组成,其中TC(Transaction Coordinator)事务协调器,用来管理全局的分布式事务的状态,用于全局性事务的提交和回滚。

2023-07-17 10:17:55 622 1

原创 SpringBoot集成RocketMQ

MQ(Message Queue)是一种跨进程的通信机制,用于传递消息。使用MQ之后可以实现异步解耦和流量消峰的功能。在微服务项目中是一个常用的组件。RocketMQ的使用需要先启动RocketMQ的服务,这样才可以在后端连接RocketMQ并使用RocketMQ传递消息。

2023-07-14 15:43:45 4187 1

原创 微服务中的Sleuth链路追踪技术

在大型系统的微服务架构中,一次请求往往需要涉及到多个服务,这些服务模块可能是不同的团队开发、可能使用不同的编程语言实现,横跨不同的数据中心,这就意味着这种架构形式也会存在一些问题。如何快速发现问题并判断故障影响范围,如何梳理服务依赖以及依赖的合理性,以及如何分析链路性能问题和实时容量规划将是一个问题。因此在微服务项目中引入了分布式链路追踪解决这种问题,讲一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。

2023-07-14 12:36:45 175 1

原创 微服务的Gateway网关简介

在微服务架构中,一个系统会被拆分为很多个微服务。客户端如果要去调用这么多的微服务,如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样会显得代码较为冗余,并且也会十分复杂,对于认证或者一些其他的统一的功能在每个服务都需要编写一次,较为麻烦。但是如果加入API网关,使得系统有统一的入口,他就可以为客户端提供统一的服务,一些诸如认证、鉴权、监控、路由转发等也可以在这里实现。

2023-07-13 14:26:20 152 1

原创 微服务中使用Sentinel实现服务容错

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。由于服务于服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的后果,这就是服务故障的”雪崩效应“。

2023-07-12 11:14:55 164 1

原创 微服务实现服务调用的负载均衡的方法

我们可以使用接下来的代码获得nacos中注册的微服务,在下面的代码中,首先是使用discoveryClient获得了nacos中的微服务,然后使用随机函数获得当前使用的微服务,然后使用微服务的主机和端口拼接微服务的URL,进而通过restTemplate使用URL访问其他的微服务。//通过restTemplate调用商品微服务对于自定义的负载均衡,我们可以看到,代码的编写较为复杂且冗余,不利于开发。

2023-07-11 16:24:24 509 1

原创 MySql的常见的语句总结

查:SELECT * from pet;增:INSERT INTO pet VALUES(‘**’,‘**’,‘**’);改:UPDATE pet SET **=‘**’ where **=‘**’;删:DELETE from pet where **=‘**’

2023-07-10 23:20:55 87 1

原创 TCP、IP、HTTP协议的简单介绍

TCP协议的流量控制是通过使用滑动窗口实现的,TCP的发送窗口由四个部分组成,已经发送并且确认的TCP段(已经发送并确认),已经发送但是还没有确认的TCP段(已经发送未确认),未发送但是接收方准备接收的TCP段(可以发送),未发送并且接收方也不准备接收的TCP段(不可发送)。此时客户端就能确定自己的发送和接收是正常的,而且可以确定服务器的发送和接收也是正常的,服务器此时没有得到客户端的反馈,因此还不知道自己的发送是不是正常的,也不知道客户端的接收是不是正常的。5XX 服务器错误状态码,服务器处理请求出错。

2023-07-10 19:12:11 235 1

原创 SpringCloud关于远程调用Feign的知识点

后端接收前端传输的消息,需要使用到@RequestMapping接收映射的URI路径,使用@RequestParam和@RequestVariable和@RequestBody接收参数,对于多个参数的URI,可以使用@RequestParam接收参数,对于单个参数可以不用加注解,直接在方法中使用同名参数接收即可。对于对象的传递,使用@RequestBody接收。对于注册发现的微服务架构而言,fegin接口下的方法对应的URL是通过value对应的微服务的ip+端口号的地址+URL映射路径访问对应功能的。

2023-07-05 14:31:45 1133

原创 java中的HashTable、HashMap、ConcurrentHashMap介绍

HashMap是一个非线程安全的容器,HashMap继承AbstractMap<K,V>抽象类,实现Map<K,V>和Serializable接口。HashMap也是通过使用拉链法解决哈希冲突。ConcurrentHashMap是一个线程安全的Map,底层存储是通过Node数组+链表/红黑树进行存储的。下图是ConcurrentHashMap的继承结构。ConcurrentHashMap通过使用cas加锁的机制实现了线程安全。

2023-06-29 22:06:36 200

原创 动态规划常见题型

动态规划其实就是一种遍历,只不过他是带有记忆的遍历,能够直接将前面遍历过的计算应用到后面的计算。这样就节约了大量的时间。为什么动态规划问题可以使用前面遍历过的计算呢,因为使用动态规划解决的问题具有最优子结构性质,即子问题的局部最优将导致整个问题的全局最优,而且动态规划问题具有无后效性原则,即每个阶段的状态一旦确定,此后过程中的演变将不受此前各状态分配的影响。使用动态规划解决的问题必须符合最优化原理并且具备无后效性原则才可以。

2023-06-20 21:04:52 108

原创 关于SpringBoot框架的理解

SpringBoot通常会有一个Application的入口类,在该类中会有一个main方法作为java应用的入口方法,在main方法中使用SpringApplication.run方法即可启动SpringBoot应用项目。@SpringBootApplication是SpringBoot的核心注解,它包含了@Configuration和@EnableAutoConfiguration以及@ComponentScan这三个注解。

2023-06-19 21:50:50 106

原创 关于Redis的介绍

Redis的数据是存在内存中的,所以他的读写速度非常快,被广泛地应用在缓存的方向,Redis存储的是KV键值对数据。Redis可以解决数据库的IO操作的压力,对于一些需要耗时很久而且结果不怎么频繁变动的SQL,我们可以将这样的数据放到Redis缓存中,这使得请求能够得到迅速的响应。在高并发情况下,如果所有的请求都直接访问数据库,数据库会出现连接异常,这个时候我们引入redis做一个缓冲操作,能够有效提高数据库的高并发的承受能力。

2023-06-16 20:34:23 90 1

原创 JAVA中常用集合数据结构在算法中的适用场景

因为只包含质因子2、3、5所以我们可以将这几个质因子和已经找到的丑数相乘得到的还是丑数,但是在乘的时候可能会得到两个值相同的丑数,比如2*3*5=30,3*2*5=30,所以为了不将这些已经遍历过的丑数加入到我们的遍历中。这是Map数据结构的主要特性。如果需要对一组数据进行复杂的操作,例如对一组数据的第n个进行修改,或者是删除第n个数据等。对于二叉树的DFS,BFS,还有图的DFS,BFS中为了不存储已经遍历过的结果,或者为了避免图的遍历中的死循环,通常也可以采用Set这个数据结构存储已经遍历过的数据。

2023-06-13 19:48:10 296 2

原创 JAVA中常用的Queue的介绍

常见的队列主要分为单向队列和双向队列,单向队列(Queue接口)的主要实现类是PriorityQueue(优先队列)。双向队列(Dequeue)的实现类主要有LinkedList和ArrayDeque。对于Queue我们通过查看源码可以看出,该接口一共定义了6种方法,其中add()和offer()方法返回的是boolean值,而remove(),poll(),element(),peek()返回的是元素。

2023-06-11 13:56:44 491

原创 关于Spring框架的理解

IoC(Inversion of Control:控制反转)是一种设计思想,指的是将原本程序中手动创建对象的控制权,交给Spring框架来管理。对于传统的开发模式,如果一个类A依赖B,若是在A中需要使用到B的方法,那就需要在A中new一个B出来,然后再调用B的方法。但是如果使用了IoC的思想,则是是类B的对象注入到容器中,等到A需要B时,直接从IoC容器获取该对象即可。这样的思想能够使得对象之间的耦合度或者说依赖程度降低。

2023-06-10 14:38:33 58

原创 关于RocketMQ的启动时遇到的一些问题及解决方法

注意我们在启动的时候需要配置broker.conf,设置启动后运行的端口和IP地址,然后使用nohup sh bin/mqbroker -c conf/broker.conf &使用该配置文件后台启动RocketMQ,到此为止namesrv和broker都顺利启动了。使用sudo权限成功修改该文件,然后运行. /etc/profile命令让该文件起作用。对于RocketMQ的启动需要配置java环境,所以我们需要在linux上下载jdk,并配置JAVA_HOME。

2023-06-09 15:06:04 2915

原创 MySQL索引的分类及性能分析及问题排查

索引是一种用于快速查询和检索数据的数据结构。使用索引可以提高数据的查询效率,但是创建索引和维护索引需要耗费时间,整个时间随着数据量的增加而增加,而且添加索引还需要占据物理空间。索引底层数据结构有B树,B+树,Hash表等。在MySQL中,都是使用B+树作为索引结构。尽量在最频繁使用的、需要排序的、用以缩小查询范围的字段上建立索引。对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引。对于一些特殊的数据类型,不宜建立索引,比如文本字段等。

2023-06-08 19:55:38 531

原创 MySql中的事务简单介绍

事务是什么?事务是指在数据库中按照一定的逻辑顺序执行的任务序列,既可以由用户手动执行,也可以有某种数据库程序自动执行。简单来说,事务就是逻辑上要嘛都执行要嘛都不执行的一组操作。

2023-06-06 19:59:44 90 1

原创 JAVA中的并发知识介绍

第一种创建方式是通过直接集成Thread类,重写run方法进行创建线程。具体的如下图所示:我们使用自己定义的线程类可以创建3个线程,观察线程共享资源时出现的并发问题(多线性并发问题的解决,我们将在下面的篇幅进行讨论)如下图所示:创建线程的第二种方式是通过实现java.lang.Runnable接口实现线程,具体的创建过程如下所示:线程池就是管理一系列线程的资源池,提供了限制和管理线程资源的方式,它可以降低资源消耗,提高响应速度,提高线程的可管理性。

2023-06-05 10:27:06 1308 2

空空如也

空空如也

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

TA关注的人

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