自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 RabbitMQ02-RebbitMQ简介及交换器

RabbitMQ是通过Erlang语言基于AMQP协议编写的消息中间件,它在分布式系统中可以解应用耦合、流量削峰、异步消息等问题。它有两个特性队列排队和异步应用解耦:多个个应用程序之间可通过RabbitMQ作为媒介,两个应用不再粘连,实现解耦;异步消息:多个应用可通过RabbitMQ进行消息传递;流量削峰:在高并发情况下,可以通过RabbitMQ的队列特性实现流量削峰;应用场景:应用到队列特性的应用场景: 排序算法、秒杀活动。

2024-05-22 00:06:31 350

原创 RabbitMQ01-liunx下安装及用户权限分配

RebbitMQ是使用ELang语言编写,所以在Liunx下安装RebbitMQ时要先安装ErLong依赖。安装步骤。

2024-05-21 22:33:55 522

原创 分布式锁3-Redis分布式锁实战(手动实现)

基于jedis实现分布式锁,源码地址。

2024-05-19 22:26:57 157

原创 分布式锁2-Zookeeper分布式锁实战

使用curator操作Zookeeper进行实战;:Apache Curator包含一套高级API框架和工具类,它 是Apache ZooKeeper 的Java 客户端库。

2024-05-19 21:34:53 139

原创 分布式锁1-分布式锁实现的三种方式

假设有这样一个场景,双十一抢iphone15ProMax手机场景,可以抢多台。在单个应用情况下可以使用synchronized或者lock锁解决并发问题,因为只有这一个应用可以调用这个接口。那么在微服务应用下呢?多个请求同时访问这个接口,步骤1是可以同时执行的,在同一时间可能拿到的数量是相同的;假设A服务和B服务各有一个请求访问这个接口,那么A应用要抢5个,B应用要抢1个,这样就导致A应用要更新数据库的时候数量是95,B应用要更新的数量是99,不管谁先拿到数据库的锁,都会后拿到数据库锁的。

2024-05-17 00:08:55 281

原创 MySQL事务

事务1在第一次查询时候生成了ReadView,没有查到数据,事务2插入一条数据并提交事务后事务1执行了update语句,所以会有版本链生成,且最新的版本的事务ID为事务1的trx_id,所以第二次读取的时候creator_trx_id = 事务1的trx_id所以可以看到数据了。如果某个版本的数据对当前事务不可见的话,那就顺着版本链找到下一个版本的数据,继续按照上边的步骤判断可见性,依此类推,直到版本链中的最后一个版本。//此刻事务1还没有提交,但是事务2提交了。//此刻就可以看到数据了。

2024-05-12 18:38:03 430

原创 MySQL优化-04慢查询和执行计划

MySQL记录所有执行超过long_query_time参数设定实际阈值的SQL语句日志。

2024-05-12 18:36:59 927 1

原创 MySQL优化-03索引

左边列是精确查找,则右边列可进行范围查找中间有范围查找会导致后面列全部失效,无法充分利用联合索引。

2024-05-12 18:36:08 387

原创 MySQL调优-02数据类型优化

更小更简单,避免NULL。

2024-05-08 23:00:37 227

原创 MySQL调优-01反范式化表设计

这种情况下可以多创建一列slot,每次插入随机选择slot来执行update操作,统计的时候只需要sum操作,这样就提高了并发率。反范式化设计提高高并发情况下优化效率,比如网站点击次数、下载次数等;

2024-05-08 22:58:23 275

原创 JAVA常用集合

特点:有序、可重复、有索引底层原理:a. 数据结构为数组,内存连续,根据索引查询快;删除和添加效率低,需要移动元素位置。b.创建一个ArrayList集合时,会先创建一个长度为0的数组,用一个指针size指向第0个位置,当第一次add元素时,会将数组扩容成一个长度为10的数组,size指针指向第1个位置。(size的指向是数组长度,也是下次存入数据的位置)c. 扩容,当数组元素存满时,进行数组扩容,扩容为原来长度的1.5倍,将老数组中的数据迁移到新数组中,然后向新数组添加元素。

2024-04-25 23:07:44 604

原创 JDK8新特性

JDK8新特性

2024-04-21 17:23:12 885

原创 MySQL用户创建和权限分配

GRANT ON 数据库名.表名 TO ‘用户名’@‘localhost’ [IDENTIFIED BY ‘密码’] [WITH GRANT OPTION];create user ‘用户名’ @ ‘host’ identified by '密码’;REVOKE ON 数据库名.表名 FROM ‘用户名’@‘localhost’IDENTIFIED BY ‘密码’ 也是可选的,如果带上,密码是当前用户的密码。drop user ‘用户名’ @ ‘host’;

2024-03-06 20:42:19 480

原创 SpringBoot整合Redis

首先看一下RedisTemplate类的源码中的afterPropertiesSet()方法,这个方法是在启动springboot项目配置redis之前进行的一些操作;从代码中可以看到,redis在配置序列话的方式的时候,默认使用的是JDK的序列化,如果我们需要自定义序列化就可以在配置文件中进行配置@Nullable@Nullable@Nullable@Nullable= null?

2023-10-31 22:29:17 174

原创 多线程之线程基础

进程(process)和线程(thread):例如:在我们使用视频app看视频的时候,打开一个app就是运行一个进程,而我们同时可以看到图像、音频、弹幕等等,其中的图像、音频、弹幕分别是一个线程在同时执行任务。进程是程序执行的一个过程,动态的,是系统资源分配的最小单位;一个进程包含至少一个或包含多个线程,线程是cup调度和执行的最小单位;

2023-03-24 17:55:27 235

原创 多线程之线程池

线程池的本质是池化技术,所谓池化技术,是程序在运行时会占用资源,为了优化资源的使用使用池化技术。比如JDBC连接池,由于和数据库建立连接和关闭时比较消耗资源,所以事先准备好资源。线程池的优点:降低资源消耗,提高响应速度,而且方便管理,最重要的是线程服用,可以控制并发数量。

2022-09-22 22:36:27 184

原创 SpringBoot底层注解

SpringBoot底层注解

2022-07-03 16:11:39 159

原创 SpringCloud组件的选用

注册中心Eureka:已经停止维护替代者:ZookeeperConsulNacos:推荐使用服务调用Ribbon:已经进入维护阶段LoadBalancer:替代RibbonFeign:已经不推荐使用OpenFeign:替代Fegin服务降级Hystrix:国内使用较多Resilience4j:国外使用较多sentienl:SpringCloud Alibaba的熔断与限流,推荐使用网关Zuul:以过时Zuul2:不推荐使用GateWay:推荐使用服务配置

2021-12-13 21:35:00 1741

原创 SpringCloud和Stringboot版本应该如何选择?

SpringBoot版本官网推荐强烈使用Springboot1.5版本以上的版本SpringCloud和Springboot的版本兼容官网:https://spring.io/projects/spring-cloud版本兼容如下:但是SpringCloud版本G之前的版本已经不推荐使用!更详细的兼容问题Spring官网更详细的版本兼容信息:https://start.spring.io/actuator/info“spring-cloud”: {“Hoxton.SR12”:

2021-12-13 21:12:04 255

原创 System类

System类package system;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintStream;import java.util.Arrays;import java.util.Map;import java.util.Properties;public class System01 { public st

2021-10-27 10:56:09 86

原创 SpringSecurity认证的底层代码实现

引言:在使用springSecurity后,我们知道有一个默认的接口"/login"可以实现认证功能(即通过用户名和密码登录),在登录时通常会看到"Bad credentials",那么是什么地方抛出的呢?它底层是如何实现的呢? 陷入沉思…(手动点烟!)SpringSecurity认证源码分析我们知道SpringSecurity的本质是一个过滤器链,即一个一个的过滤器,至于在springBoot启动的时候是如何加载的还没去研究.我们只需要知道其中的一个过滤器是UsernamePasswordAut.

2021-10-25 17:06:37 199 2

原创 SpringDataJPA_04

多表之间的关系表关系一对一:特殊的一对多一对多:主表对多个从表.在从表上新建一系列的外键,它的取值来自主表的主键多对多:利用中间表来关联,中间表至少有两个字段组成,这两个字段作为外键指向两张主表的主键,又组成联合主键.实体类关系:包含关系:可以通过实体类中的包含关系描述表关系继承关系开发时的步骤:明确表关系确定表关系(描述 外键|中间表)编写实体类,在实体类中描述表关系(包含关系)配置映射关系一对多配置第一步:编写一的一方实体类和多的一方实体类

2021-10-18 16:54:37 97

原创 SpringDataJPA_03

JpaSpecification动态查询JpaSpecificationExecutor方法列表:查询单个对象Optional findOne(@Nullable Specification spec);查询列表List findAll(@Nullable Specification spec);查询全部,分页pageable:分页参数Page:返回值,是由springdatajpa提供Page findAll(@Nullable Specification spec, Page

2021-10-18 13:47:52 70

原创 SpringDataJPA_02

SpringDataJPA简介SpringDataJPA是Spring的基于ORM框架,它在JPA的基础上封装了一套JPA应用框架,可以使开发者用极简的代码即可实现数据库的访问和操作,它提供了包括CRUD在内的常用操作.SpringDataJPA使开发者脱离了DAO层的操作,基本上所有的CRUD都可以用它来实现,一般使用SpringDataJPA+ORM框架(如:Hibernate)来实现操作,这样在切换ORM框架时及其方便,实现解耦.JPA 和 Hibernate 和 SpringDataJPA

2021-10-15 14:02:19 76

原创 SpringDataJPA_01

ORM思想我们在用JDBC操作数据库时,操作非常繁琐:1.注册驱动2.获取连接3.拼接SQL,提供占位符4.创建执行SQL对象5.执行SQL我们利用ORM的思想封装成工具类,可以通过Obj.save(),Obj.get()等方法来对数据库进行操作.这样实体类和数据库建立映射关系,通过实体类找到表,通过实体类中的属性找到表中的字段.核心: 操作实体类就相当于操作数据库表;思想: 建立实体类和数据库表映射,建立实体类中属性和表中字段的映射关系.HibernateHibernate

2021-10-14 15:35:27 64

原创 SpringSecurity-02

设置登入的用户名和密码第一种方式:配置文件设置只需要在spring的appliaction配置文件中设置两个属性spring.security.user.name=adminspring.security.user.password=123第二种方式:配置类创建一个配置类:package com.shao.securitydemo01.conif;import org.springframework.beans.factory.annotation.Autowired;import o

2021-08-26 09:52:12 96

原创 SpringSecurity-01

SpringSecurity初体验第一步:创建SpringBoot项目第二步:导入依赖<?xml version="1.0" encoding="UTF-8"?><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/

2021-08-22 20:04:36 90

原创 代理模式(JDK动态代理)

什么是代理模式?所谓的代理者是指一个类别可以作为其它东西的接口。为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。它的组成有:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。代理模式有什么作用?1.功能增

2021-07-11 18:57:01 184

原创 String类

String类中常用的方法.length():获取字符串长度.substring(a,b):截取字符串.equals()和equalsIgnoreCase():比较两个字符串是否相等,前者区分大小写.startsWith()和endWith():判断字符串是否以xxx开始和结束.indexOf():查找字符串最先出现的地方的下标.lastindexOf():查找字符或者字符串最后一次出现地方的下标.getchars():截取a字符串,并由b字符串接收.例子:a.getchars(a的开始下标

2021-07-01 16:05:52 73

原创 Nacos-配置中心

Nacos简介Nacos是阿里的一个开源的框架,它是针对微服务架构中的服务发现,配置管理,服务治理的一套解决方案.它集服务动态发现、服务配置、服务元数据及流量管理于一体的管理中心,能帮助我们更好的发现、配置和管理微服务。它支持几乎所有主流类型的“服务”的发现、配置和管理,如:Kubernetes ServicegRPC & Dubbo RPC ServiceSpring Cloud RESTful ServiceNacos的特性:服务发现与服务健康检查动态配置管理动态DNS

2021-06-23 23:28:27 385

原创 回顾Java反射

Class类常用的方法static ClassforName(String name):返回指定类名name的Class对象.Object newinstance():调用缺省构造函数,返回Class对象的一个实例.getName():返回此Class对象所表示的实体(类,接口,数组类或Void)的名称.Class getSuperClass():返回当前Class对象的父类的Class对象.Class[] getInterfaces():获取当前Class对象的接口.ClassLoader g

2021-06-18 20:53:36 59

原创 Java注解及自定义注解

什么是注解?注解的英文单词是Annotation.Annotation是JDK1.5之后开始引入的技术;Annotation的作用:不属于程序本身,可以对程序做出解释,可以有注释的作用.另外它可以被其他程序(比如编译器)读取.Annotation的格式:@注释名,可以对其添加一些参数值,如@SuppresWaring(value=“unchecked”)Annotation可以被用在pockage,class,method,field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编

2021-06-05 00:07:42 76

原创 实体类定义规则

PO(Entity):持久层对象PO对应数据库中的Entity,可以简单的认为一个PO对应数据库中的一条记录.VO:表现层对象VO主要对应页面显示的数据对象.可以和数据库表对应,也可以不对应,根据业务需求而定,页面需要什么数据VO就可以封装什么数据.DTO:数据传输对象比如一个表中有一百个字段,那么它对应的PO就有一百个属性.但是View只要十个字段,这些字段可以来自同一个表,也可以来自不同的表.我们没必要把所有表中的字段返回给View,那么我们就可以把View所需要的字段封装到DTO对象中,这样

2021-06-04 22:56:34 327 1

原创 什么是云计算?什么是IaaS PaaS SaaS?

什么是云计算?计算机刚诞生的时候,没有网络每个电脑都是一个独立的个体,俗称单机.它包括CPU,内存,显卡,硬盘等硬件.用户在电脑上安装操作系统和软件.后来有了网络,单机之间可以相互通信,进行信息交互.再后来有了单机性能越来越强,于是有了服务器.人们把服务器集中放在机房里,用户通过网络去访问机房中的计算机资源.再再后来小型网络就变成了大型网络,小机房变成大机房–即互联网数据中心(IDC)当越来越多的计算机资源和应用服务(Application例如看电影)被集中起来,就变成了云计算,无数的大机房就变

2021-06-03 22:49:17 266 1

原创 微服务02-再谈微服务

什么是微服务架构?提出者:Martin Fowler微服务架构是一种架构模式,架构风格,它提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的进程里而不是线程中.服务之间相互协调,相互配置,各个服务组装起来为用户提供最终价值.服务之间采用轻量级的通讯机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中.另外,应尽量避免统一的,集中式的管理机制,对于具体的一个服务而言,应根据业务上下文选择合适的语言和工具对其进行构建(Maven),可以有一个非轻量级的集中式管理来协

2021-05-21 18:23:18 100

原创 Redis03-持久化策略和主从复制

Redis的持久化策略RDB:redis的默认策略,在指定时间内生成数据快照,默认保存到dump.rdb文件中,当redis重启的时候会自动加载dump.rdb文件到内存中。用户可以使用SAVE(同步)BSACE(异步)手动保存数据,可以设置服务器的save选项让服务器每间隔一段时间执行一次Bsave命令.优点:rdb是一个紧凑文件,直接使用rdb文件就可以还原数据,数据保存由一个子进程保存,不影响父进程的其他操作,恢复数据效率高于AOP.缺点:每次保存点之间导致redis不可意料的关

2021-05-19 15:15:57 81 2

原创 Redis02-常用命令和五种存储类型

全局指令keys * 查询所有的键,会遍历所有的键值,时间复杂度O(n)dbsize 查询键总数,直接获取redis内置的键总数变量,时间复杂度O(1)exists key 判断Key是否存在,存在返回1,不存在返回0del key [key…] 返回结果为成功删除键的个数指定Key的过期时间,当超过过期时间,会自动删除,expire key seconds key在seconds秒后过期expireat key timestamp 键在秒级时间戳timestamp后过期pexpire

2021-05-19 11:03:12 56

原创 Redis01-了解Reidis和Reids安装

一.什么是NoSQL数据库目前主流的持久层数据库都是关系型数据库,每次操作数据库都是i/o操作,i/o操作是主要影响程序执行性能的原因,连接关系型数据库都是消耗性能的过程。关系型数据库的数据结构都是树状机构,当深度比较深时查询数据比较慢。所谓NoSQL是Not Only SQL不仅仅使用关系型数据库.目前的项目大多是使用关系型数据库和非关系型数据库结合的形式进行数据存储的.二.Redis简介Redis是以C语言进行编写的。Redis平时操作数据都在内存中,读写效率极其高,所以常用作缓存工具。R

2021-05-19 09:54:48 97

原创 微服务01-认识微服务

微服务的本质是什么?是由all in one到模块化的转变,在微服务之前我们很多的项目都是把所有的服务功能都放到一个模块中.随着用户量的增大,服务器的压力也越来越大,负载均衡也解决不了.这个时候微服务框架就能解决这个问题.在一个项目中,往往有的模块的功能使用频率极大,而有的模块功能使用频率较小,这个时候我们就可以把这些功能模块拆分出来作为一个独立模块发布到一个独立的服务器上,使用频率大的模块就多分配几个服务器,使用频率小的模块就少分配几个服务器.这样就能很好的缓解服务器的压力.微服务的开发模式面临着什

2021-05-16 19:25:11 107 2

原创 SpringMVC执行流程剖析

SpringMVC执行流程流程中的几个关键点: DispatcherServlet中重写的doService() doService()中调用的doDispatch() doDispatch()中调用的getHandler()获取HandlerExecutionChain处理器请求链 doDispatch()中调用的getHandlerAdapter()获取处理器适配器 doDispatch()中调用的handle()接口的实现类中的handle()方法执行我们的Controller. doD

2021-05-11 16:16:09 65

空空如也

空空如也

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

TA关注的人

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