自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 接口幂等性

快速理解接口幂等

2022-10-31 12:32:48 217 1

原创 【设计模式】之23种设计模式的基本原理及例子

设计模式1 设计模式六大原则1.1 单一职责原则1.2 开放-关闭原则1.3 依赖倒转原则1.4 里氏替换原则1.5 迪米特法则2 创建型2.1 工厂模式2.1.1简单工厂模式2.1.2 工厂方法模式2.1.3 抽象工厂模式2.2 原型模式2.3 建造者模式3 结构型3.1 代理模式3.2 外观模式3.3 适配器模式4 行为型4.1 策略模式4.2 装饰者模式4.3 模板方法模式4.4 观察者模式4.5 状态模式4.6 备忘录模式1 设计模式六大原则1.1 单一职责原则原理  在软件组件设计中,

2022-04-29 10:22:07 1575

原创 【Docker】基础

  Docker 是一种应用容器技术,在里面安装我们应用的允许环境;使用Docker可以帮助我们快速部署项目,并且保持应用允许环境的高度一致;基础学习路径Docker 的优势Docker 与传统虚拟机对比Docker 安装核心概念镜像-image容器-container仓库-repository核心架构常用命令docker 引擎相关镜像相关命令容器相关命令学习路径官网Docker 的优势快速部署项目;可以保持项目允许环境高度一致;服务器资源隔离,防止其他程序运行出现问题导致整个服务器的应

2022-04-29 10:20:42 214

原创 【java进阶】死锁

死锁发生死锁的原因如何避免死锁  死锁是指一组互相竞争的线程因为互相等待导致“永久”阻塞的现象发生死锁的原因互斥条件:共享资源 x 和 y 只能被一个线程占用;占有且等待:线程 t1 以及取得共享资源 x,在等待共享资源 y 的时候,不释放共享资源 x;不可抢占:其他线程不能强行抢占线程 t1 占有的资源;循环等待:线程t1等待线程t2占有的资源,线程t2等待线程t1占有的资源;如何避免死锁打破死锁发送的其中一个原因就可以:第一个互斥条件不可以被打破,因为锁本身就是通过互斥来解决线程.

2022-04-16 13:11:53 283

原创 【排序算法】深究

十大排序算法相关术语算法分类按算法时间复杂度分类按空间复杂度分类按稳定性分类按照使用场景区分相关术语算法稳定性:如果 a=b,排序前后 a、b的相对位置不变即为稳定;算法时间复杂度:算法运行时间的函数,用大 O 符号表述;算法空间复杂度:算法需要的内存空间大小;算法分类按算法时间复杂度分类时间复杂度:O(n^2)  插入排序、选择排序、冒泡排序时间复杂度:O(n^1.3)  希尔排序时间复杂度:O(nlogn)  堆排序、归并排序、快速排序时间复杂度:O(n+k)

2022-04-14 17:22:26 145

原创 【秒杀系统】概要设计

秒杀1 查看商品详情页2 秒杀下单1 查看商品详情页接下来介绍并发量从低到高设计查看商品详情页第一种:用户 -> 浏览器 -> 后端系统 -> MySQL (弊端:无法抗住高并发)第二种用户 -> 浏览器 -> 后端系统 -> Redis -> MySQL(通过缓存可以加快用户查看商品详情的速度,但还有优化空间)第三种用户 -> 浏览器 -> 后端系统 -> JVM内存 -> Redis -> MySQL .

2022-04-14 00:22:28 638

原创 【MySQL】高级之分库分表

MySQL1 为什么要分库分表2 什么是分库分表3 分库分表的几种方式3.1 垂直方式3.1.1 垂直分库3.1.2 垂直分表3.1.3 特点3.1.4 优点3.1.5 缺点3.2 水平方式3.2.1 水平分库3.2.2 水平分表3.3 特点分库分表带来的问题读写分离原理剖析与实践分库分表实战与源码分析1 为什么要分库分表当MySQL存储的数据量变得很大时,单体的 MySQL 无法承载高并发;这时可以对数据库做一系列的优化,其中就可以用分库分表来解决这一问题;下面介绍一些优化措施;1、换数据库 NoS

2022-04-12 21:55:01 801

原创 【Redis】从入门到入土

RedisNosql概述1,什么是NoSQL,为什么要使用NoSQL3,NoSQL的特点4,NoSQL的四大分类Redis概述Redis能干嘛特性学习文档在Linux下安装Redis基础知识五大数据类型StringListsetHashZset三大特殊类型redis地理位置geoaddgeoposgeodistgeoradiusgeoradiusbymembergeohashredis基数统计pfaddpfcountpfmerge位存储setbitgetbitbitcountRedis事务监控JedisS.

2022-04-11 20:34:56 494

原创 【Redis】实时排行榜制作

利用 Redis 的 ZSet 有序集合的数据结构来帮助实现排行榜(从大到小)功能:目录实现功能获取排行榜中指定范围的数据往排行榜中新增记录更新排行榜中的记录实现功能返回排行内的前n名;实时更新排行榜;获取排行榜中指定范围的数据// 获取操作 Redis 有序集合的对象ZSetOperations<String, Object> zSet = redisTemplate.opsForZSet();// 获取指定的键(key)和指定范围的有序集合Set<ZSetOpe.

2022-04-06 12:09:38 2303

原创 【MySQL】高级之主从复制

slave 会从 master 读取binlog来进行数据同步主从复制过程master 将改变记录到二进制日志(binary log)。这些日志记录过程叫做二进制日志事件(binary log events);slave将master的日志事件拷贝到它的中继日志(relay log);slave 重做中继日志中的事件,将改变应用到自己数据库中。MySQL复制是异步的且串行化的。...

2022-04-04 19:27:25 1064

原创 【MySQL】高级部分之数据库锁

目录锁的分类锁的分类对数据库操作类型划分读锁(共享锁)针对同一份数据,多个读操作可以同时进行而不会互相影响;写锁(排它锁)当前对象操作没有完成前,它会阻断其他写锁和读锁;对数据库操作粒度划分表锁特点:MyISAM存储引擎使用;开销小;加锁块;无死锁锁粒度大;发送锁冲突概率高;并发度低;行锁...

2022-04-04 09:20:23 228

原创 【MySQL】高级SQL调优之profile的使用

profile 是MySQL用来分析当前会话中执行语句的资源消耗情况。默认情况下,参数属于关闭状态,并保存15次的运行结果。这里写目录标题使用 profile 分析语句步骤日常开发中需要注意的危险结果使用 profile 分析语句步骤查看当前MySQL版本是否支持;# 默认关闭 OFFshow variables like 'profile'该功能默认关闭,使用前需要开启set profiling=on运行待分析sql查看结果show profiles;诊断 SQ.

2022-04-01 21:57:35 958

原创 【MySQL】高级部分之慢查询日志

MySQL慢查询日志是用来记录在MySQL中响应时间超过阈值(long_query_time)的SQL;默认情况下,MySQL数据库没有开启慢查询日志,需要手动设置这个参数,如果不是调优需要,一般不开启这个参数,因为开启慢查询日志会多少带来一定的性能影响。这里写目录标题常用命令常用命令# 查询慢查询日志是否开启和日志存储的位置show variables like '%slow_query_log%'# 开启慢查询日志set global slow_query_log=1...

2022-04-01 21:22:08 831

原创 【MySQL】order by 排序优化

目录常见排序情况示例排序方式优化策略总结常见排序情况示例create index idx_ageName on tblA(age, Birth);# using index 使用到了索引select * from tblA where age > 20 order by age;# using index 使用到了索引select * from tblA where age > 20 order by age,birth;# using firesort 出现了文件内排序se.

2022-03-31 23:14:58 844

原创 【MySQL】索引详解

索引就是帮助MySQL高效获取数据的数据结构。索引一级目录二级目录三级目录一级目录二级目录三级目录

2022-03-28 22:50:06 1023

原创 【数据结构】快速理解红黑树

红黑树是一种特殊的二叉查找树,除了二叉查找树的基本特性外它还有自平衡的功能;红黑树基础-二叉查找树特点删除结点思想缺点正题-红黑树特性添加元素调整方法添加元素调整红黑树规则删除元素调整红黑树规则AVL树和红黑树的区别基础-二叉查找树特点左子树上所有节点的值均小于或等于它根节点的值;右子树上所有节点的值均大于或等于它根节点的值;左、右子树也分别为二叉查找树;中序遍历后,是一个从小到大的有序队列删除结点二叉查找树删除结点共分三种情况:情况一:待删除的结点没有子结点直接删除即可情况二:

2022-03-28 17:03:36 879

原创 【MySQL】索引相关知识点

目录索引失效的几种情况索引使用建议索引失效的几种情况最佳左前缀法则不再索引列上做任何操作(计算、函数或类型转换),会导致索引失效而转向全表扫描存储引擎不能使用索引范围条件右边的列尽量索引和查询列一致使用了 != 或 <>is null 或 is not nulllike 以通配符开头字符串不加单引号使用 or 条件索引使用建议连接查询时,左连接索引建立在右表的字段中;连接时以小表驱动大表...

2022-03-28 00:26:38 1015

原创 【分布式】注解实现分布式锁

对于有大流量通过的接口,类似秒杀;为限制用户在一次活动中只能秒杀一件商品,在多机部署秒杀服务的情况下可以使用分布式锁来将用户id与商品id进行绑定并上锁,接下来介绍如何使用注解 + aop + Redisson实现复用性极强的分布式锁实现步骤导入必要依赖定义注解切面处理相关工具类配置使用导入必要依赖<!-- 非必须 --><dependency> <groupId>org.projectlombok</groupId> <art.

2022-03-25 14:48:38 302

原创 【MySQL】高级部分引入

目录SQL性能慢的原因七大 sql join 类型MyISAM 与 InnoDB 的区别SQL性能慢的原因查询语句写的烂索引失效关联查询太多 join服务器调优及各个参数设置(缓冲、线程数等)七大 sql join 类型第一种 A ∩ B + A.*SELECT A.*, B.* FROM ALEFT JOIN B ON A.KEY = B.KEY第二种 A ∩ B + B.*SELECT A.*, B.* FROM ARIGHT JOIN

2022-03-23 14:36:15 1115

原创 【MySQL】流程控制结构

流程控制结构顺序结构分支结构IF函数case结构IF 结构循环结构WHILELOOPREPEAT顺序结构程序从上往下顺序执行分支结构程序从两条或多条路径中选择一条去执行IF函数功能:实现简单的双分支语法IF(表达式1, 表达式2, 表达式3)执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值应用:可以应用在任何地方case结构情况一:类似于java中的switch语句,一帮用于实现等值判断语法:CASE 变量|表达式|字段 WHEN 要判断的值 T.

2022-03-21 23:30:08 993

原创 【MySQL】函数基础

函数:一组预先编译好的SQL语句集合,理解成批处理语句这里写目录标题函数的优势函数与存储过程的区别创建函数语法调用语法查看函数语法删除函数语法函数的优势提高代码的重用性简化操作减少编译次数并且减少了和数据库的连接次数,提高了效率函数与存储过程的区别存储过程:可以有0个返回,也可以有多个返回,适合做批量插入,批量更新;函数:有且仅有1个返回,适合做处理数据后返回一个结果创建函数语法CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型BEGIN 函数体EN.

2022-03-20 17:24:19 612

原创 【MySQL】存储过程

存储过程:一组预先编译好的SQL语句的集合;存储过程存储过程好处创建存储过程语法调用存储过程删除存储过程查看存储过程存储过程好处提高代码的重用性简化操作提高效率(减少编译次数和与数据库连接次数)创建存储过程语法CREATE PROCEDURE 存储过程名(参数列表)BEGIN 存储过程体END注意:1、参数列表包含三部分参数模式 参数名 参数类型举例:IN stuname varchar(20)参数模式:IN:入参OUT:出参INOUT::出入参2、存储过程.

2022-03-20 09:20:02 413

原创 【MySQL】变量使用基础

变量系统变量全局变量会话变量自定义变量用户变量局部变量用户变量与局部变量区别系统变量系统变量由系统提供,不是用户定义,属于服务器层面1、查看所有系统变量语法:show global | session variables;2、查看满足条件的部分系统变量:show global | session variables like '%char%';3、查看某个系统变量的值:select @@global | @@session .系统变量名4、为某个系统变量复制# 方式一set g.

2022-03-19 17:02:10 435

原创 【MySQL】快速理解视图用法

视图:一种虚拟存在的表,如果多个SQL查询中都用到了同样的查询结果,并且该查询结果使用的SQL比较复杂就可以将该查询结果封装成一个视图;目录视图创建二级目录三级目录视图创建create view view_nameasselect ...二级目录三级目录...

2022-03-18 09:36:39 270

原创 【MySQL】数据库事务理解

数据库事务:一个或一组sql组成一个数据库执行单元,这个单元的执行要么全部成功要么全部失败;常用的存储引擎innodb、myisam以及memory中只有innodb支持事务;目录ACID属性创建事务隐式事务显示事务事务隔离级别savepointACID属性原子性:事务中的执行单元是一个不可拆分的单位,即它的操作要么都执行,要么都不成功;一致性:事务执行前后,数据最终是一致的;隔离性:一个事务的执行不会被另一个事务干扰;持久性:事务一旦提交就是对数据库永久的改变,不可逆;创建事务隐式事.

2022-03-17 09:44:29 665

原创 【MySQL】六大约束详解

约束作用:约束即限制,用于限制表中的数,为了保证表中的数据的准确性和可靠性;添加约束的时机:1、创建表;2、修改表约束分类:1、列级约束:六大约束语法上都支持,但外键约束没有效果;2、表级约束:除非空和默认值约束,其他都支持目录主键约束外键约束唯一约束检查约束非空约束默认值约束主键约束保证字段值的唯一性和非空,比如学号、员工编号;一个表中只能有一个主键外键约束限制两个表的关系,用于保证该字段值必须来自主表关联列的值;一般在从表中添加外键约束,引用主表中某列的值;从表的外键类型和主表的关.

2022-03-16 22:10:56 1271

原创 【MySQL】数据类型

目录数值型整数小数定点数浮点数字符型较短的文本较长的文本日期型数值型整数特点:1、如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加 unsigned 关键字;2、如果插入的数据超出范围,可以成功插入,但是插入成功的为领界值;3、如果不设置长度,会有默认长度;小数特点:1、M 和 DM: 整数部位 + 小数部位D: 小数部位如果插入的范围超过,则插入临界值M和D都可以省略2、定点性的精确度较高,如果要求插入数值的精确度度较高如货币运行等则考虑使用3、使用.

2022-03-15 12:18:35 758

原创 快速理解MySQL的explain用法

目录idselect_typeSIMPLEPRIMARYSUBQUERYDERIVEDUNIONUNION RESULTtabletypeconsteq_refrefrangeindexallpossible_keys 和 keykey_lenrefrowsexplain用于解析SQL语句的性能,分析出SQL中表的读取顺序、数据读取操作的操作类型、有哪些索引可以使用、哪些索引被实际使用以及获取结果需要查询多少条记录explain select …id里面的需要表示执行顺序,数值越大,执行优先级越.

2022-03-11 15:13:41 925

原创 MySQL子查询

MySQL子查询分类子查询的使用范围一个查询嵌套在另一个查询语句内部的查询分类MySQL 子查询可以按照查询结果的行列数不同分成:1 标量子查询(单行单列)2 行子查询(单行多列)3 列子查询(单列多行)4 表子查询(多行多列)子查询的使用范围1 SELECT 之后只能使用标量子查询2 FROM 之后都支持3 WHERE 和 HAVING 之后可以使用 ‘标量子查询’、‘行子查询’ 和 ‘列子查询’4 EXISTS 之后都支持...

2022-03-11 10:32:17 863

原创 mybatis执行器

mybatis执行器​ 对数据库的批量操作, 是一个非常常见的操作, Mybatis提供了批量执行器, 来支持批量操作。常规对一条sql语句的执行需要经过编译,设置参数,执行SQL等三步,批量执行时,可以利用预编译方式来优化,可大大提高效率。mybatis的执行器有三种ExecutorType.SIMPLE:这个类型不做特殊的事情,它只为每个语句创建一个PreparedStatement;ExecutorType.REUSE: REUSE 执行器会重用预处理语句;ExecutorT

2020-11-27 19:14:55 198

原创 Nacos服务配置

Nacos服务配置准备工作1、导入相应的依赖2、准备连个配置文件bootstrap和application​ Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。​ springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。​ SpringBoot的配置文件bootstrap与application的作用以及区别加载顺序上的区别bootstrap

2020-11-27 17:03:29 6251

原创 Linux下安装Nacos

1、Naocs托管到github中,下载速度比较慢,这里下载提供下载好的资源:链接:https://pan.baidu.com/s/1jQqC1aXRhIlLCA-pJtoUjg提取码:6nvx2、解压tar -zxvf nacos......3、进入nacos的bin目录4、执行启动命令sh startup.sh -m standalone5、访问测试在浏览器中输入:http://xxx:8848/nacos账号:nacos密码:nacos...

2020-11-27 16:09:29 158

原创 数据采集服务ETL

注解@Primary  在spring中使用注解,常使用@Autowired,默认是根据类型Type来自动注入的。但有些特殊情况,对于同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下@Primary就可以版主Spring来选择优先注入哪一个类。另一种做法是使用@Qualifier注解来制定一个bean的名字。数据源​  DataSource接口,作用是建立与数据库的连接,当在应用程序中访问数据库时,不必再编写连接数据库的代码,直接引用DataSource获取数据库连接对象即可

2020-11-24 20:38:01 670

原创 OutOfMemoryError

OutOfMemoryError导致内存不够的情况主要发生在方发区、堆、虚拟机栈。1.java.lang.OutOfMemoryError: Java heap space原因:堆内存不够,意味着新生代和老年代的内存不够。解决:调整java启动参数-Xms -Xmx来增加Heap的内存。//堆内存溢出时,首先判断当前最大内存是多少(参数:-Xmx 或 -XX:MaxHeapSize=),可以通过命令 jinfo -flag MaxHeapSize pid 查看运行中的JVM的配置,如果该值已经较大

2020-11-02 18:07:32 86

原创 计数排序

计数排序第一步:找出原数组中元素值最大的,记为max。第二步:创建一个新数组count,其长度是max加1,其元素默认值都为0。第三步:遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。第四步:创建结果数组result,起始索引index。第五步:遍历count数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,count中的该元素值减1,直到该元素值不大于0,依次处理count中剩下的元

2020-10-18 11:24:41 72

原创 归并排序

归并排序​ 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);自下而上的迭代;和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。2. 算法步骤将序列中待

2020-10-18 11:24:10 63

原创 堆排序

堆排序​ 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;堆排序的平均时间复杂度为 Ο(nlogn)。1. 算法步骤将待排序序列构建成一个堆 H[0……n

2020-10-18 11:23:40 44

原创 插入排序

插入排序​ 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。1. 算法步骤将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置

2020-10-18 11:23:22 320

原创 基数排序

基数排序​ 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。1. 基数排序 vs 计数排序 vs 桶排序基数排序有两种方法:这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:基数排序:根据键值的每位数字来分配桶;计数排序:每个桶只存储单一键值;桶排序:每个桶存储一定范围的数值;2. LSD 基数排序动图演示3.代码publi

2020-10-18 11:22:48 83

原创 剑指offer第五题

剑指offer第五题/** * 用两个栈来实现一个队列,完成队列的Push和Pop操作。 * 队列中的元素为int类型 * @author 池灿淼 * @date 2020/8/9 **/public class Test05 { //进 static Stack<Integer> stack1 = new Stack<Integer>(); //出 static Stack<Integer> stack2 = new Sta

2020-09-09 23:04:49 142

空空如也

空空如也

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

TA关注的人

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