- 博客(115)
- 收藏
- 关注
原创 项目定时任务
1、在项目中,有时候我们需要定时的进行刷新、定时进行消息的方法;这个时候我们就可以通过一个定时任务去进行触发;可以通过设置时间进行触发。注解@Scheduled(cron="0/5****?@Configuration//1.主要用于标记配置类,兼备Component的效果。@EnableScheduling//2.开启定时任务。...
2022-07-14 22:34:35
403
原创 网络通信协议
HTTP、TCP、UDP三者的关系如下:TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议。在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。形象比喻:IP(公路),TCP/UDP(货车),HTTP(货物),SSL(包装箱)一、HTTP与HTTPSHTTP和HTTPS的基本概念HTTP:是互联网上应用最为广泛的一种网络协议
2022-04-24 09:51:23
822
转载 RocketMq之简介
Producer消息生产者,负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到Broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。Consumer负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。NameS...
2022-04-20 11:15:59
720
原创 MQ相关流程及各项内容
一、生产者:1、引入相关依赖:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.
2022-04-19 18:54:30
853
转载 SpringCloud之架构体系相关内容
附:SpringCloud之系列汇总跳转地址概述毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feig
2022-04-12 11:13:09
180
转载 SpringCloud之Eureka(注册中心)
在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心获取服务列表,同时汇报自己的运行情况,这样当有的服务需要调用其他服务时,就可以从自己获取到的服务列表中获取实例地址进行调用,Eureka实现了这套服务注册与发现机制。Eureka是一个注册中心,将各自注册至Eureka上,后续就可将项目中需要提供给其他人调用,或者需要调用其他模块的,实现这种功能; ...
2022-04-11 16:49:37
252
原创 分布式与集群的差别
分布式: 通俗意义上来讲,分布式是将一个整体按照分布到不同地方,只要一个节点出现问题,则会导致系统出现问题分布式就是将多台服务器集中在一起,每台服务器都实现总体中的不同业务。每台服务器都缺一不可,如果某台服务器发生宕机了,则部分功能缺失,将导致整体无法运行。分布式存在的作用主要是将应用程序的多个功能分配到多个服务器上去处理,细化了应用程序的功能模块,能够减缓服务器的压力,大幅度的提高效率。集群: 各个集群上内容都是一致,如果一个集群出现问题无法使用,则其他...
2022-04-11 15:59:28
4512
转载 BASE理论
Base理论其实也就是保证了分区容错性、基本可用性与最终一致性,其实相比较CAP来说,C(强一致性)进行了一个取舍,确保了最终的一致性在CAP中,我们谈到,因为P(分区容错性)总是存在的,放弃不了。另外,可用性、一致性也是我们一般系统必须要满足的,如何在可用性和一致性进行权衡,所以就出现了各种一致性的理论与算法。BASE理论是:BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。BASE是对CAP中一
2022-04-07 18:13:12
1655
转载 CAP理论
无论你是一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的。本文就来介绍一下到底什么是CAP理论,如何证明CAP理论,以及CAP的权衡问题。CAP理论:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。Consistency 一致性一致性指“all nodes see the same data at the same tim
2022-04-07 18:12:06
226
转载 缓存与数据库的双写一致性
(这边的一致性一般表示的是最终的一致性,因为很难做到强一致性)一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大 弱一致性:这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态 最终一致性:最终一致性是弱一致性的一个特例,系
2022-04-06 13:59:52
337
转载 MySql之日志
整个流程Buffer PoolBuffer Pool (缓冲池)是InnoDB存储引擎中非常重要的内存结构,顾名思义,缓冲池其实就是类似 Redis 一样的作用,起到一个缓存的作用,因为我们都知道MySQL的数据最终是存储在磁盘中的,如果没有这个 Buffer Pool 那么我们每次的数据库请求都会磁盘中查找,这样必然会存在 IO 操作,这肯定是无法接受的。但是有了 Buffer Pool 就是我们第一次在查询的时候会将查询的结果存到 Buffer Pool 中,这样后面再有请求的...
2022-04-06 11:03:27
950
转载 MySql之MVCC
MVCC (Multiversion Concurrency Control)中文全称叫多版本并发控制,是现代数据库(包括MySQL、Oracle、PostgreSQL等)引擎实现中常用的处理读写冲突的手段,目的在于提高数据库高并发场景下的吞吐性能。如此一来,不同的事务在并发过程中,SELECT操作可以不加锁而是通过MVCC机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。下面举一个多版本读...
2022-04-06 10:06:37
166
转载 MySQL三范式
三范式其实就是一种建议的规范,跟resful规范一样,只是建议可以这样遵守;为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。第一范式(1NF): 保证了每列的原子性;也就是数据库的每一列的字段都是不可分割的原子性例如:第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足了第一范式。第一范式需要根据系统的实际需求来定,比如有一张用户信息表:一般来说"住址"设计成一个字段...
2022-04-02 17:11:56
2291
转载 MySQL事务之ACID理论
原子性、一致性、隔离性、持久性1、原子性: 事务的原子性是指事务必须是一个院子的操作序列单元,就是各项操作在一次执行中,要么全部成功,要么全部失败;只要任何一项操作失败,都会导致整个事务失败,其他已经执行的操作,都将被撤销回滚;只有所有的操作都成功,整个事务才成功代码中我们经常使用@Transactional注解来标记事务的原子性2、一致性: 事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行前后,数据库都必须处于一致性状态。换句话说,事务的执行...
2022-03-31 17:39:05
143
转载 数据库之事务隔离级别
并发事务处理带来的问题脏读: 事务A读取到事务B未提交的数据,并且后续事务B的数据回滚,导致事务A读取到的数据是一个没有的数据,这成为脏读幻读: 事务A读取数据时,读取到的是一条数据;这时事务B对数据进行了増删等操作,导致事务A再读取时,读到的是两条的数据,数据条数不一致,这就是幻读脏读与幻读来说,脏读主要是对数据进行修改,幻读主要是对数据进行增删不可重复读: 事务A读取到了事务B已经提交的修改数据。通俗的讲,一个事务范围内,多次...
2022-03-31 14:59:55
265
原创 MySQL之存储引擎
存储引擎就是存储数据,建立索引,更新査询数据等等技术的实现方式。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。一般来说,MySQL常用的存储引擎有三种、MyISAM、InnoDB、Memery;这三种来说存储类型都各不同,我们最常用也是默认使用的是InnoDBMyISAM它支持 B-tree/FullText/R-tree 索引类型,缺点:不支持事务(同时成功时,才可记录)(索引与数据分开存储,两个文件无法做到一致性),不支持行级锁,也不支...
2022-03-30 17:29:11
688
原创 MySql之整体架构
MySQL整体架构与所有服务端软件一样,MySQL采用的也是C/S架构,即客户端(Client)与服务端(Server)架构,我们在使用MySQL的时候,都是以客户端的身份,发送请求连接到运行服务端的MySQL守护进程,而MySQL服务器端则根据我们的请求进行处理并把处理后的结果返回给我们,这个过程可以简单地抽像成下面的示意图:客户端:在安装后MySQL之后,在其安装目录的bin目录下,有一个mysql命令,这就是一般我们所说的MySQL客户端,不过这是MySQL官方提供的命令行客户端。
2022-03-30 16:42:48
990
转载 MySQL的索引
1、什么叫索引索引是一种数据结构,帮助MySQL高效获取数据的数据结构;MySql官方对索引的定义为:索引是帮助MySql高效获取数据的数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。个人对于MySql索引的理解:在数据之外,数据库系统还维护着满足特定查找算法的数据结构,包括B+树或者Hash表。由于存储引擎表示的是数据在磁盘上面的不同的组织形式,所以索引底层采用哪种数据结构是跟
2022-03-29 10:36:18
269
原创 数据库表中加索引
MySQL中我们为了可以加快查询效率,可以将经常用到的查询属性等加上索引,在添加到索引中的属性,在保存时,就会直接生成对应数据的B+树(BTREE)(一般是这种索引方式),方便后续进行查询时,可以快速的索引到查询的内容;这样可以大大加快效率(一般来说,可能会从原先几秒的处理时间,缩短至零点几秒时间)数据索引用法:这边的名,一般来说命名为index_XXX栏位:需要进行索引的具体属性,可以是单个也可以是多个组合的情况索引类型:1、normal:表示普通索引2、unique:表示
2022-03-28 18:05:50
2034
转载 MySQL索引原理
1、索引的本质索引的本质是一种排好序的数据结构,很像我们字典中的目录,通过一些方法2、索引的分类在数据库中,索引是分很多种类的(千万不要狭隘的认为索引只有 B+ 树,那是因为我们平时使用的基本都是 MySQL)。而不同的种类很显然是为了应付不同的场合,那索引到底有那些种类呢?下面就让我们来大致的了解下。2.1:Hash索引Hash 索引是比较常见的一种索引,他的单条记录查询的效率很高,时间复杂度为1。但是,Hash索引并不是最常用的数据库索引类型,尤其是我们常用的Mysql In.
2022-03-28 15:40:59
156
转载 Redis之分布式锁
# 基于 Redis 实现分布式锁的三种方案用 Redis 实现分布式锁的正确姿势(实现一) 用 Redisson 实现分布式可重入锁(RedissonLock)(实现二) 用 Redisson 实现分布式锁(红锁 RedissonRedLock)(实现三)# 分布式锁需满足四个条件首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件:互斥性。在任意时刻,只有一个客户端能持有锁。(也就是他的一个唯一性) 不会发生死锁。即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也
2022-03-23 10:57:35
499
原创 redis中数据存取
1、首先我们需要先引入redis的star后续的话,才能够使用redis的存取的相关方法pom.xml引入对应star,并且还要引入对应的序列化:用的是alibaba的fastjson;<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version
2022-03-22 18:37:35
5531
1
转载 Java序列化
一、什么是序列化?为什么要序列化?Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。我们都知道,在进行浏览器访问的时候,我们看到的文本、图片、音频、视频等都是通过二进制序列进行传输的,那么如果我们需要将Java对象进行传输的时候,是不是也应该先将对象进行序列化?答案是肯定的,我们需要先将Java对象进行序列化,然后通过网络,IO进行传输,当到达目的地之后,再进行反序列化获取到我们想要的对象,最后完成通信。二、实现序列化搭建项目①User文
2022-03-22 14:16:36
524
原创 redis之主从、哨兵、集群
redis之主从、哨兵、集群 Redis高可用性,因为redis的存储方式是存储于内存中,所以redis在进行数据查询操作时,效率非常的快;因为是存储于内存,为了使数据不丢失,通过RDB或是AOF的方式进行持久化存储; 但是这边还有一个问题如果说这个主机突然间炸掉,数据全部丢失,那这个时候,可能存储于数据库、redis中的数据就都完全都丢;为了说解决这个问题,所以我们可能衍生出以下的一些解决方式;一、主从:redis多机器部署时,这些机器节点会被分成两类,一类...
2022-03-21 15:09:14
1040
原创 redis中配置序列化与反序列话bean配置
因为redis在存储数据时,是将value的值进行序列化后存储,后续需要取出数据时,再反序列化为对应的对象内容输出;因为springBoot配置的自动装配机制,虽然有配置了redis的star,但是因为反序列化的方式有很多种,所以这边单独将redis的序列化方式单独进行了配置; 我们将RedisTemplateConfig单独进行配置:package com.cmj.config;import org.slf4j.Logger;import org.slf4j.Logger...
2022-03-21 14:05:00
1953
原创 Redis之雪崩、击穿、穿透
1、什么是雪崩·在同一个时间中,redis中的key全部都过期,这个时候这些请求全部都打到了数据库中去,导致数据库无法承受这么多的请求,崩溃了;这就是雪崩我们可以用一个简单的例子来进行说明:如果所有首页的Key失效时间都是12小时,中午12点刷新的,我零点有个秒杀活动大量用户涌入,假设当时每秒 6000 个请求,本来缓存在可以扛住每秒 5000 个请求,但是缓存当时所有的Key都失效了。此时 1 秒 6000 个请求全部落数据库,数据库必然扛不住,它会报一下警,真实情况可能DBA都没反应过来就直
2022-03-21 11:35:25
1106
转载 redis数据类型及使用场景
redis是单线程,(不适合存储比较大的数据)Redis存储方式以key和value的形式进行存储,也就是他不依赖于SQL存储的数据结构;因为redis的存储结构,所以一般他的key是以String的格式;redis 有5种基础的数据结构,分别为:String(字符串)、list(列表)、hash(字典)、set(集合)和zset(有序集合),redis的所有的数据结构都是以唯一的key字符串作为名称的,然后通过这个唯一的key值来获取相应的val...
2022-03-21 10:34:08
7039
原创 SpringBoot自动装配原理
1、SpringBoot整合maven项目中,我们在pom.xml文件中引入对应star,比如redis的star等等2、通过main方法下的一个@SpringBootApplication注解(这个注解是个组合注解)扫描meta-inf/spring.factory文件里面的配置的全类名的各种autoconf类;这个核心就是spi机制,通过spi进行扫描package com.cmj;import org.mybatis.spring.annotation.MapperScan;im.
2022-03-17 14:27:07
666
原创 resultMap与resultType的差别
项目中进行dao层数据持久化写入时,在对应的Mapper.xml中我们会对对应返回值结果类型进行定义ResultMap:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的对象中必须有相同字段的属性名相对应,例如下面的TeacherDept对象<select id="selectTeacherDept" resultType="teacherDept"> SELECT t.id, t.`name` tname, t.pass
2022-02-24 17:12:22
711
原创 登录拦截器
一般来说,我们在进行一些操作的时候,顺序为:我们需要先登入,登入后才可以进行一些操作;当我们隔一段时间未操作后,存储在session的信息过期后,则需要重新进行登入才可以进行对应的判断;所以当我们每次进行操作的时候,都要进行判断用户是否是有登入;如果在每块接口前面都写这块的判断就比较复杂繁琐,并且后续进行修改的时候,也会比较复杂;所以一般来说,我们会通过拦截器的方式,对我们需要加上判断的接口进行拦截;登入拦截器配置:1、首先,我们需要写一个拦截器。这个拦截器的类需要实现HandlerInterc
2022-02-17 11:47:54
4791
2
原创 session和cookies的区别
1、cookie数据存放在客户端上,session数据放在服务器上。2、cookie数据因为是存放在客户端上的,所以不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session。3、session是有时效性的,一般是跟着tomcat,一般为30分钟;但是并不是每隔30分钟进行刷新一次,一般是有进行一次动作时,就自动将时间后移30分钟Cookie一般是没有过期时间,一般是客户端,浏览器上我们会进行的清除cookie的操作例如我们的登入页面,第一..
2022-02-15 17:40:58
793
原创 单例模式编写
单例">什么是单例单例是保证一个内存/进程里只有一个类的实例,并提供一个访问它的全局访问点。内存/进程中只有一个实例 线程安全 性能优化 防止序列化产生新对象写一个单例模式1、饿汉模式public class Singleton { //饿汉模式 private static Singleton singleton=new Singleton(); //私有构造方法 private Singleton() {} // public static Singleton
2022-02-14 17:36:43
3388
转载 SpringMvc工作流程
基础介绍SpringMVC主要是通过前端控制器controller中的注解来完成请求处理的。前段请求从web.xml中servlet的配置开始,根据servlet拦截的url-parttern,来进行请求转发控制。处理请求的流程1、首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;2、页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spri
2022-02-11 17:37:33
91
转载 MAVEN工程web.xml文件生成
eclipse 使用 maven创建web项目,生成web.xml右键 new-> Maven Project如下图 勾选 Create a simple..nextGroup Id :一般填写 项目根路径包名 com.xxxArtigact Id : 一般填写项目名Version: 版本号 默认即可Packing: 打包方式,可选 jar , war ,pom jar:打包成jar 一般有内置web容器可以打包jar 比如使用springboot等,war就是运行在外部饿w..
2022-02-10 14:39:22
1229
转载 线程中断Thread的interrupt()方法
什么时候需要关闭一个线程?下面简单的举例情况:比如我们会启动多个线程做同一件事,比如抢12306的火车票,我们可能开启多个线程从多个渠道买火车票,只要有一个渠道买到了,我们会通知取消其他渠道。这个时候需要关闭其他线程 很多线程的运行模式是死循环,比如在生产者/消费者模式中,消费者主体就是一个死循环,它不停的从队列中接受任务,执行任务,在停止程序时,我们需要一种”优雅”的方法以关闭该线程 在一些场景中,比如从第三方服务器查询一个结果,我们希望在限定的时间内得到结果,如果得不到,我们会希望取消该任务
2022-01-29 16:53:05
14700
1
转载 JVM之双亲委派机制
什么是双亲委派机制当某个类加载器需要加载某个.class文件时,它首先把这个任务委托给他的上级类加载器,递归这个操作,如果上级的类加载器没有加载,自己才会去加载这个类。类加载器的类别BootstrapClassLoader(启动类加载器)c++编写,加载java核心库 java.*,构造ExtClassLoader和AppClassLoader。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作ExtClassLoader (
2022-01-29 16:07:24
184
转载 深浅克隆学习
在开始学习深克隆和浅克隆之前,我们先来看下面代码,有什么问题?class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { // 等号赋值( 基本类型) int number = 6; int number2 = number; // 修改 number2 的值 number2 = 9;
2022-01-28 22:52:59
141
转载 Java工具类——包装类
我们都知道,JDK 其实给我们提供了很多很多 Java 开发者已经写好的现成的类,他们其实都可以理解成工具类,比如我们常见的集合类,日期相关的类,数学相关的类等等,有了这些工具类,你会发现它能很大程度的帮你节省时间,能很方便的实现你的需求。当然,没有这些包,你也能实现你的需求,但是你需要时间,今天我们主要是来学习一下包装类。一、包装类介绍1、为什么需要包装类?我们知道 Java 语言是一个面向对象的编程语言,但是 Java 中的基本数据类型却不是面向对象的,但是我们在实际使用中经常需要将基本..
2022-01-27 17:52:59
443
原创 JVM之垃圾回收器
堆中逻辑分代是「给内存做一些概念上的区分」,物理分代是真正的物理内存。「具体划分」新生代(young)和老年代(old/tenured)。「新生代」:刚new出来的那些对象:默认比例1「老年代」:垃圾回收了很多次都没有把它回收掉的老对象:默认比例3新生代又分为: 「eden」默认比例是8。新new出来的对象放在eden区。 「survivor」(s1) 默认比例是1。垃圾回收一次之后跑到这个区域,该区域存放的对象不同,采取的垃圾回收算法也不同。 「surviv.
2022-01-24 16:45:42
429
原创 JAVA线程池
线程池是什么?简单来说,线程池是指提前创建若干个线程,当有任务需要处理时,线程池里的线程就会处理任务,处理完成后的线程并不会被销毁,而是继续等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以,当某个业务需要频繁进行线程的创建和销毁时,就可以考虑使用线程池来提高系统的性能啦;避免创建大量的线程增加开销,提高响应速度。。这样我们就不需要去new线程,直接通过线程池进行;使用线程池有哪些好处?首先在开发的过程中,为什么需要线程池呢?给我们带来了那些好处提高系统的响应速度 如果每次多...
2022-01-24 11:03:33
334
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人