自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 零基础入门到就业--JAVA篇

1.1 数据库简介1.2 学习环境准备1.1 前端知识介绍1.2 HBuilder下载安装教程1.3 VScode 下载安装教程1.4 学习在网页中调试前端代码1.1 spring相关基础概念1.2 Maven介绍与配置1.3 SpringMVC基础知识1.4 Spring基础知识1.5 Git分布式版本控制工具1.6 springboot基础知识1.7 spring中IOC容器及依赖注入1.8 spring中的自动装配1.9 spring中的代理模式1.10 spring中的AOP面向切面编程。

2023-11-10 00:07:54 368 2

原创 mybatis相关问题合集(日常遇到问题逐步更新)

mybatis是一个十分成熟的插件,一般不会有这么明显的BUG存在,所以报错大多情况下都是自定义相关内容的错误,如果上面内容排查完后还没有解决,那么相信我,一定是路径问题导致的,所以涉及路径相关的地方,全部使用直接复制目录路径的方式进行替换后重试;

2024-06-25 16:43:20 631

原创 7.6 java基础知识补充(六)递归

三根柱子,在一根柱子上从下往上按照大小顺序摞着圆盘。按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。求5的阶乘可以简化成求4的阶乘再乘5,依次类推,简化阶乘的最简问题:求0的阶乘,0的阶乘规定是1。再从0的阶乘倒推求出结果。以上,将三层汉诺塔,简化为移动两层汉诺塔,以此类推,可以简化成最简问题,移动一层汉诺塔。递归是指在方法中调用自身。

2023-11-09 23:57:15 211

原创 7.5 java基础知识补充(五)二分法查找

如果低位下标和高位下标交叉,则说明查找的目标值不存在。二分法查找是在一组有序数据中寻找目标值,并获得目标值所在的。

2023-11-09 23:51:48 181

原创 7.4 java基础知识补充(四)选择排序

选择排序的运算逻辑是,挑选比i位置小的值交换到i位置。

2023-11-09 23:50:11 112

原创 7.3 java基础知识补充(三)冒泡排序

根据前面的演示,到蓝线位置就应该结束了,为什么i变量还在继续递增一直到末尾呢?我们能不能在排序已经完成的情况下让排序过程退出呢?要判断排序已经完成是没有可以判断的条件的!

2023-11-09 23:48:37 53

原创 7.2 java基础知识补充(二)位运算符

只留下我们需要的8位,把其他24位都抹成0,像下面这样求个位与运算(两位都是1结果是1,有0就是0)试着用上面异或的结果再对第二个值求一次异或,这样可以还原成第一个值。乘2和除2,除了用 * / 运算符,还可以如何运算?两位都是1与得的结果是1;以此类推,可以继续完成后面两个字节的合并过程。以此类推,把每个字节都移动到最右侧再强转成。两个整数值的32位,每一位和每一位求与。两位都是0结果是0。所有位整体向右移动,右侧移出部分截断。不管符号位是0还是1,左侧都补0。注意看,左侧8位现在都是1。

2023-11-09 23:46:24 59

原创 7.1 java基础知识补充(一)二进制

个人安装的光纤宽带如果是 100 兆宽带,下载最高速度只能到十几兆,这是因为采用的表示单位不同。100兆宽带指的是100兆bit,我们一般说下载速度指的是byte,那么100兆bit换算成byte需要除8,也就是 12.5 兆 byte。但是,java中,byte类型的左侧的一位规定用来表示符号,0表示正数,1表示负数。java 中的 byte 类型整数是单字节类型,也就是说,它使用 8 位(bit) 来表示整数。java 中的负数运算,执行的是与正数相同的加减运算,这样执行。运算得到的二进制值是。

2023-11-09 23:35:44 62

原创 7.1 Kubernetes 准备

当我们部署容器时,服务器会有成千上万台,如果手动去控制无法完成,此时我们便需要自动的去帮助我们部署管理容器;在集群中,如果我们想启动一个docker容器,会向主控服务器发送指令,主控服务器收到指令后会向工作节点发送指令,告诉工作节点在其节点上部署启动容器,此时,可以告诉多个工作节点启动部署多台容器;集群方案可以配置多个,比如cs1方案我们配置一主俩从,dz2集群方案我们可以配置一主三从,启动时,可以根据我们配置的方案进行选择,来快速搭建集群;-etcd:注册中心集群,我们这里启动三个服务,组成注册集群;

2023-11-09 15:37:34 96

原创 7.2 Kubernetes 实践

命令是最简单的部署引用的方式,它自动创建必要组件,这样,我们就先不必深入了解每个组件的结构;podpod是k8s的容器,用来封装Docker或其它容器的对象,它具有自己的虚拟环境(端口, 环境变量等),一个Pod可以封装多个Docker或其它容器.,在pod容器中会启动运行docker容器;其主要作用是完成容器化技术的解耦,通过这个媒介可以随时使用docker或Containerd等多种其他容器;RC控制器:控制器是用来自动控制容器部署、销毁的工具,k8s通过控制器来完成自动部署及销毁的相关操作;

2023-11-09 15:37:12 102

原创 7.3 k8s部署Spring Cloud应用

正常情况下,我们的镜像文件需要放到仓库上,当需要启动时,我们的服务器连接仓库进行镜像下载,然后进行启动;因为我们没有配置仓库,所以这里手动复制容器到服务器;进入eureka目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)进入docker目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)进入item目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)进入user目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)修改2,3,4,5项目的yml配置,添加相应配置,使用ip注册。

2023-11-09 15:36:58 139

原创 6.6 Elasticsearch(六)京淘项目改造

此前我们在pd-web和pd-web-consumer中做了订单削峰,此次的改造,我们不涉及订单的相关业务,只需要对pd-web做改造,对商品完成搜索操作即可,首先运行pd-web模块,测试运行是否正常;但是此时,我们设置的高亮显示的内容只是变为了斜体,并没有其他特殊样式,我们通过css样式设置来进行优化:,通过定位网页源代码我们可以看到,高亮显示的内容是在一个。当实体类中的名字与索引中的字段不一致时,通过。我们可以看到,搜索框中的内容是通过包含另外一个。注解来确定实体类的索引数据具体来自哪里,通过。

2023-10-24 20:09:16 556

原创 6.5 Elasticsearch(五)Spring Data Elasticsearch - 增删改查API

可以访问spring官网查看其API的具体使用方式:https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference 是 搜索引擎开发的解决方案。它提供了模板对象,用于存储、搜索、排序文档和构建聚合的高级API。例如, 使开发者能够通过定义具有自定义方法名称的接口来表达查询。在 中存储学生数据,并对学生数据进行搜索测试。数据结构:案例测试以下数据操作:在开始运行测试之前,在 Elasticse

2023-10-18 09:18:34 938

原创 6.4 Elasticsearch(四)搜索

虽然我们查询了全部数据,但实际只显示了10条数据,获取更多数据需要添加。正常情况下,执行完成后,都是成功的,没有失败的,表明数据已全部导入。将在代码仓库中拉取下载的。

2023-10-14 21:05:20 145

原创 6.3 Elasticsearch(三)使用 Kibana 操作 ES

每个分片都是一个独立的索引,数据分散存放在多个分片中,也就是说,每个分片中存储的都是不同的数据。此时,每个服务器下都有1个主分片,2个副分片;同时,0,1,2三个分片,每个分片在三个服务器中也都有1个主分片,2个副分片;映射指的是映射数据结构,存储数据时,我们需要设置都有哪些字段,并且每个字段都是什么数据类型;当索引中存储了大量数据时,大量的磁盘io操作会降低整体搜索新能,这时需要对数据进行分片存储。的文档id,这个文档id可以自动生成,也可以手动指定,通常可以使用数据的id作为文档id。

2023-10-13 14:20:18 1054

原创 6.2 Elasticsearch(二)IK中文分词器

ES本质上也属于一种nosql(not other sql)数据库,类似于redis,也是通过将数据存储到内存中或者永久化到磁盘中从而提升查询性能,在使用ES进行搜索时,会首先通过分词器提取所有关键字信息,通过将搜索的内容所有关键字一个词一个词拆分,通过倒排索引进行村粗,需要检索时再进行模糊检索关键字,从而获取搜索信息;也可以选择将本地文件的压缩文件直接上传到。请求,并在协议体中提交。请求,并在协议体中提交。

2023-10-13 14:20:03 205

原创 6.1 Elasticsearch(一)Docker搭建ES集群

Elasticsearch是一个分布式搜索引擎服务器,搜索引擎有自己专门的搜索引擎服务器,而不是依靠数据库来做,我们搜索内容时,如果使用数据库来做,则需要模糊查询数据库中所有的数据,一条一条的去顺序比对,这种搜索效率是极低的;我们这里介绍Elasticsearch搜索引擎服务器,使用时需要将数据库中的数据同步到Elasticsearch服务器中,通过搜索引擎服务器去做搜索查询,因为其只支持搜索查询,专职于搜索服务的支持,其效率很高;后面我们要使用多个端口,为了避免繁琐的开放端口操作,我们关掉防火墙。

2023-10-12 01:06:25 2199 3

原创 5.7 Docker数据库连接案例

接下来,我们将使用dicker运行mysql数据库,并搭建一个web应用,web应用启动后连接数据库;这俩个容器创建后,要互相连接通信,我们通过创建一个虚拟网络,并连接这俩个容器后,通过subnet参数手动维护网络参数进行通信;使用参数--ip在虚拟网络中指定容器的固定网络网段;在这里我们要实现数据库数据的持久存储,容器删除后,容器内的数据将全部丢失,为了实现数据永久存储,我们通过数据卷挂载到宿主机的方式实现;

2023-10-11 14:43:27 97

原创 5.6 Docker 搭建redis集群

参数创建集群,后面将所有服务器的地址都写出来,并通过。我们需要搭建6个服务的集群,通过命令配置集群;

2023-10-11 14:43:06 79

原创 5.5 Docker搭建redis主从+哨兵

有时候可能哨兵会出现故障,当哨兵故障无法和主服务器通信时,可能会误报主服务器宕机,所以需要多个哨兵一起确定主服务器宕机,一般为投票选举,少数服务多数,例如5个哨兵配置3个,7个哨兵配置5个等;客户端访问时,会由主服务器获取数据,但是客户端不确实到底哪个是主服务器,所以客户端先去访问哨兵,通过哨兵去访问主服务器;哨兵可以监控到服务宕机,实时了解主服务器是否宕机,当主服务器宕机,会在从服务器中重新选举新的服务器用作主服务器;redis主从复制结构中,主服务器会自动的将数据向从服务器复制;

2023-10-11 14:42:47 125

原创 5.4 Docker案例

redis通过一致性hash算法进行数据的分散存取,本次的doker案例我们主要使用redis来进行多服务器部署并连接通信,在构建容器之前,我们首先需要完成下面的工作。

2023-10-11 14:42:28 64

原创 5.3 文件挂载及网络

在部署容器时,经常会部署多个容器,并且容器之间要互相访问通信,例如tomcat容器访问mysql容器,这时我们可以使用虚拟网络进行连接、访问;在 Docker 中可以创建任意多个虚拟网络,容器之间可以通过虚拟网络互联互通。创建虚拟网络时宿主机也会连接到虚拟网络。客户端要访问宿主机内部运行的容器时,可以在宿主机打开一个端口,当客户单访问这个端口时,可以将访问转发到内部的容器。将容器的端口映射到宿主机端口外,我们还可以让容器直接使用宿主机的网络和端口,的虚拟网络来连接,在创建虚拟网络时,也会创建虚拟网卡;

2023-10-08 16:28:20 54

原创 5.2 镜像

所谓容器,我们可以理解为是一个虚拟的计算机,其中运行着操作系统,操作系统中运行着我们部署的应用。可以使用容器的名称或 id,使用id是允许至少写三位,能与其他id区分即可。通过此命令来查看镜像的构建历史,其记录了此镜像是如何一步一步构建的过程;docker系统服务重启,或者操作系统重启,容器可以随系统自动启动。两项一起设置时,会把两项设置的内容连接起来作为一个完整的命令。每个启动的容器都可以指定一个名称,方便使用名称来操作容器。类似于一个批处理文件,用来设置镜像的构建流程。

2023-10-08 10:19:03 73

原创 5.1 Docker环境准备

Docker是作为开发运维一体化的容器被广泛使用的。在实际业务开发中,会有开发人员,测试人员,运维人员完成各类工作,在实际项目搭建中,会涉及许多的服务,例如数据库,redis,rockeMQ等等,所以开发人员将代码交给测试人员测试时,测试人员还需要搭建十分复杂的环境,保持环境一致的情况下去进行测试。此时就需要环境搭建手册,依靠手册指导进行环境搭建,这个过程中可能会遇到各种各样的问题,测试完成后项目上线时,运维还需要将环境再搭建一份用来正式的运行代码;

2023-10-08 10:18:33 72

原创 3.7 分布式事务(七)Seata TCC模式-Spring Cloud微服务添加 TCC 分布式事务

新建 seata-tcc 工程工程命名为 seata-tcc,存放到 seata-samples 文件夹下,与 seata-at 工程存放在一起:将我们此前准备的无事务版本压缩包解压到 seata-tcc 目录压缩文件中的 7 个项目目录解压缩到 seata-tcc 目录:导入项目在 idea 中按两下 shift 键,搜索 add maven projects,打开 maven 工具:然后选择 seata-tcc 工程目录下的 7 个项目的 pom.xml 导入:在订单项目中执行添加订单:我们要添加以下

2023-10-04 19:06:56 264

原创 4.5 RocketMQ (五) Springboot 整合 RocketMQ 收发消息样例

创建 springboot 项目,添加rocketmq-spring-boot-starter依赖。使用 demo1 profile 指定生产者组组名。使用 demo2 profile 指定生产者组组名。

2023-10-04 19:05:36 166

原创 4.7 分布式事务(八)Spring Cloud微服务系统基于Rocketmq可靠消息最终一致性实现分布式事务

安装搭建 Rocketmq 服务器,搭建单机 Rocketmq 服务器可参考笔记:4.1 RocketMQ (一) 安装搭建双主双从同步复制 Rocketmq 服务器可参考笔记:4.2 RocketMQ (二) 双主双从同步复制集群方案基于 Rocketmq 可靠消息的分布式事务方案原理可参考Rocketmq事务消息笔记:4.3 RocketMQ 发送事务消息原理分析和代码实现我们这里直接利用本地已经下载好的一些文件和此前搭建RabbitMQ准备的虚拟机来快速搭建我们项目需要的 Rocketmq 服务器;首

2023-10-04 19:04:51 217

原创 4.4 RocketMQ (四) 使用RocketMQ原生API收发消息代码样例

新建一个新的命名为并在工程下创建的新的命名为:修改下的pom文件,添加 rocketmq-client 依赖:2.同步消息同步消息发送要保证强一致性,发到master的消息向slave复制后,才会向生产者发送反馈信息。这种可靠性同步地发送方式使用的比较广泛,比如:重要的消息通知,短信通知。2.2 消费者消费者的要点:push 和 pull消费者有两种模式:push 和 pull。push 模式由服务器主动向消费者发送消息;pull 模式由消费者主动向服务器请求消息。在消费者处理能力有限时,为了减轻

2023-10-04 01:21:50 128

原创 4.6 RocketMQ 发送事务消息原理分析和代码实现

RocketMQ 的自动重发机制在绝大多数情况下,都可以保证消息被正确消费。RocketMQ 提供了可靠性消息,也叫事务消息。下面分析一下其原理。上面分析的是正常情况下的执行流程。完成事务消息发送后,消费者就可以以正常的方式来消费数据。假如消息最终消费失败了,还可以由人工处理进行托底。

2023-09-25 10:14:58 123

原创 4.2 RocketMQ (二) 双主双从同步复制集群方案

在两台服务器上分别查看java进程,确认两台服务器上是否各启动了三个java进程,分别运行。在一台服务器上启动两个 broker 实例,需要为不同实例设置单独的数据存储目录。,它们不用做任何集群的配置,都是作为独立服务运行,它们之间也不会进行数据复制。,在两台虚拟机上安装 Rocketmq。或在一台虚拟机上装好后进行克隆。为了方便起见,我们在两台服务器上都创建这四个实例所需要的的目录。目录下提供了四种集群方案的配置样例。服务启动后,要同时连接这两个。在两台服务器上启动两个。在两台服务器上都启动。

2023-09-21 17:09:22 262

原创 4.3 RocketMQ (三) 基本原理

Topic。

2023-09-21 15:55:39 149

原创 4.1 RocketMQ (一) 安装

开发环境中如果内存不足, 服务可能会无法启动, 可以通过降低两个服务的内存, 使服务可以正常启动, 也可以节省内存.为了后续操作方便可以配置环境变量,之后在任意位置都可以执行rocketmq的操作命令。打包的 jar 文件在 target 目录, 进入目录执行jar文件。修改 /etc/profile 配置文件, 配置环境变量。运行测试, 启动生产者发送消息, 启动消费者接收消息。,打包过程中会下载各种依赖,比较缓慢,请耐心等待。默认配置JVM使用的内存是4g,修改完后, 让环境变量立即生效。

2023-09-19 15:11:42 109

原创 3.5 分布式事务(五)Seata AT模式-Spring Cloud微服务添加 AT 分布式事务

在《分布式事务(三)Seata分布式事务框架-AT模式介绍》 中介绍了 Seata AT 事务原理,介绍了 AT 事务的三个角色:TC(事务协调器)、TM(事务管理器)和RM(资源管理器),其中 TM 和 RM 是嵌入在业务应用中的,而 TC 则是一个独立服务。在分布式事务框架中,每个模块都是独立运行的,各个模块之间并不清楚其他模块之间的执行情况,这就需要协调器来进行运行管理,上报和管理执行状态,来保证事务的一致性;,如果执行成功会新增订单、减少库存、扣减金额,如果执行失败则数据没有变化,被回滚了。

2023-09-19 10:55:15 76

原创 3.4 分布式事务(四)Seata AT模式-Spring Cloud微服务案例

订单案例涉及四个数据库(建议使用mysql数据库,并保证mysql版本大于8或者mariaDB版本大于10):为了后续测试方便我们编写一个工具,用来重置所有数据库表,可以方便地把数据重置到初始状态。完成后,pom.xml 文件如下:2.2 application.yml 配置项目的 application.properties 文件改名成 application.yml,然后添加 mysql 连接配置:注意: 在连接地址中没有指定库名,是因为我们要先后连接四个数据库,后面执行的 sql 脚本文件中会执

2023-09-19 10:54:48 79

原创 3.3 分布式事务(三)Seata分布式事务框架-AT模式介绍

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。2019 年 1 月,阿里巴巴中间件团队发起了开源项目 Fescar(Fast & EaSy Commit And Rollback),和社区一起共建开源分布式事务解决方案。Fescar 的愿景是让分布式事务的使用像本地事务的使用一样,简单和高效,并逐步解决开发者们遇到的分布式事务方面的所有难题。

2023-09-19 10:54:32 86

原创 3.2 分布式事务(二)分布式事务方案

普通的事务可以理解为一个单体应用多人同时操作数据库产生:而分布式事务则是多人同时操作多个嵌套服务的数据库关系:在微服务系统中,每个微服务应用都可能会有自己的数据库,它们首先需要控制自己的本地事务。一项业务操作可能会调用执行多个微服务。如何保证多个服务执行的多个数据库的操作整体成功或整体失败?这就是分布式事务要解决的问题。

2023-09-19 10:54:13 74

原创 3.1 分布式事务(一)Mysql本地事务和事务隔离级别

数据库事务由一组sql语句组成。所有sql语句执行成功则事务整体成功;任一条sql语句失败则事务整体失败,数据恢复到事务之前的状态。下面以转账为例进一步说明。- A 账户减金额- B 账户加金额两条sql语句都成功则转账成功。任意一条sql语句失败,恢复以前的状态。数据操作的最小单元是事务,而不是一条sql语句!事务之间为了避免互相干扰,执行时要进行隔离。也就是A执行时B要等待。但严格的隔离会造成性能的下降。数据库为了兼顾数据安全和性能,可以在一定程度上允许多个事务并行执行。

2023-09-19 10:53:55 53

原创 3.6 分布式事务(六)Seata TCC模式-TCC模式介绍

如果第一阶段能够顺利完成,那么说明“扣减金额”业务(分支事务)最终肯定是可以成功的。当全局事务提交时, TC会控制当前分支事务进行提交,如果提交失败,TC 会反复尝试,直到提交成功为止。如果全局事务回滚,就把冻结的金额进行解冻,恢复到以前的状态,TC 会控制当前分支事务回滚,如果回滚失败,TC 会反复尝试,直到回滚完成为止。下一节,我们还是以订单业务为例,来演示 Seata 如何实现 TCC 事务。假如用户购买 100 元商品,要扣减 100 元。

2023-09-17 23:31:42 173

原创 2.6 Spring boot 整合 RabbitMQ

启动启动类后,会加载producer和consumer俩个类,自动加载扫描创建生产者和消费者,在同一个应用中创建生产者和消费者对象,这里是为了模拟测试这样设计,在实际生产环境中,生产者和消费者不应该在同一个模块中,甚至不在同一台服务器中;设置持久化首先要将队列设置为持久队列,然后将发送的消息添加为持久消息,此前创建新的队列时,我们已经将其设置为了持久化队列,并且当前springboot整合RabbitMQ中,默认发送的消息就是持久消息,所以当前消息就是持久化队列;

2023-09-05 14:21:15 134

原创 2.5 订单流量削峰案例

假设我们向商城的订单系统下订单,在短时间内突然产生大量订单的情况下,直接向数据库存储数据可能会导致数据库崩溃;但是如果我们使用RabbitMQ消息服务进行接收的话,订单会在RabbitMQ处进行排队等待消费者进行处理,一个一个的接收进行处理然后存储到数据库中,避免因突增的大量访问数据而导致系统崩溃;这就是流量削峰,将短时间内突增的大量数据访问造成的流量峰值处理时间进行拉长,消除其流量峰值;

2023-09-05 14:21:05 103

空空如也

空空如也

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

TA关注的人

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