自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

熙熙小学姐

最怕你碌碌无为,却安慰自己平凡可贵。

  • 博客(217)
  • 收藏
  • 关注

转载 Mysql索引长度的计算

MySQL Innodb 对于索引长度的限制为 767 字节,并且UTF8mb4字符集是4字节字符集,则 767字节 / 4字节每字符 = 191字符(默认索引最大长度),所以在varchar(255)或char(255) 类型字段上创建索引会失败,提示最大索引长度为767字节。

2024-02-29 21:02:35 153

转载 Redis分布式锁

当有线程释放了锁之后,其它加锁失败的线程就会来继续加锁,加锁之前会先判断一下set集合的头部的线程跟当前要加锁的线程是不是同一个,如果是的话,那就加锁成功,如果不是的话,那么就加锁失败,这样就实现了加锁的顺序性。指定和不指定超时时间的主要区别是,加锁成功之后的逻辑不一样,不指定超时时间时,会开启watchdog后台线程,不断的续约加锁时间,而指定超时时间,就不会去开启watchdog定时任务,这样就不会续约,加锁key到了过期时间就会自动删除,也就达到了释放锁的目的。这里选择的是三个节点, 可以选择多个。

2024-01-26 19:43:45 80

转载 RocketMq实现分布式事务原理

如果B最终执行失败,几乎可以断定就是代码有问题所以才引起的异常,因为消费端RocketMQ有重试机制,如果不是代码问题一般重试几次就能成功。想象下如果出现第二种情况而引起的回查,如果不先查看当前事务的执行情况,而是直接执行事务,那么就相当于成功执行了两个本地事务。因为A服务只负责当我消息执行成功了,保证消息能够送达到B,至于B服务接到消息后最终执行结果A并不管。:如果A服务本地事务都失败了,那B服务永远不会执行任何操作,因为消息压根就不会传到B服务。3.就是A账户减100(成功),B账户加100 (失败)

2024-01-25 17:12:06 69

转载 SpringBoot默认包扫描机制与默认配置文件

默认情况下,扫描启动类同级及其子级包下的所有文件。我们可以通过以下的测试来验证一下。1. 当BannerController放在启动类的,程序运行成功。

2023-11-02 19:09:18 373

原创 JAVA使用JWT生成token

JWT(JSON Web Token)简而言之,JWT是一个加密的字符串,JWT传输的信息经过了数字签名,因此传输的信息可以被验证和信任。一般被用来在身份提供者和服务提供者间传递被认证用户的身份信息,以便于从资源服务器获取资源,也可以增加一些额外的业务逻辑所需的声明信息。

2023-10-23 16:28:27 1114 2

转载 java项目中的classpath路径

在java项目中,你一定碰到过classpath,通常情况下,我们是用它来指定配置/资源文件的路径。在刚开始学习的时候,自己也糊里糊涂,但是现在,是时候弄清楚它到底是指什么了。,classpath就是class的path,也就是类文件(*.class的路径)。一谈到文件的路径,我们就很有必要了解一个java项目(通常也是web项目)它在真正运行时候,这个项目内部的目录、文件的结构;这样,我们才好分析、理解classpath。

2023-10-19 15:26:15 283

原创 MybatisPlus使用

添加mybatis-plus的依赖,mybatis-plus-boot-starter。

2023-08-20 20:49:19 227

原创 Spring事务失效

Spring事务生效的前提是所连接的数据库要支持事务,如果底层的数据库都不支持事务,则Spring的事务肯定会失效。例如,如果使用的数据库为MySql,并且选用了MyISAM存储引擎,则Spring的事务就会失效。如果在项目中没有配置Spring的事务管理器,即使使用了Spring的事务管理功能,Spring的事务也不会生效。比如@Transactional()的propagation属性设置为PROPAGATION.NEVER。如果事务所在的方法没有被public修饰,此时Spring的事务会失效。

2023-07-07 17:17:37 191

原创 Java字符串常见拼接方式

通过字符串连接,可以将两个或多个字符串、字符、整数和浮点数等类型的数据连成一个更大的字符串。

2023-02-13 00:00:27 3367

原创 JSON、JSONObject和JSONArray简介

JSON:就是一种轻量级的数据交换格式,被广泛应用于WEB应用程序开发。JSON的简洁和清晰的层次结构,易于阅读和编写;同时也易于机器解析和生成,有效的提升网络传输效率;支持多种语言,很多流行的语言都对JSON格式有着很友好的支持。JSON对象:就是多个属性被{}括起来的。JSON数组:就是包含了多个JSON对象的一个集合,数组是以数组括号[]括起来的。JSON数组并不一定是要相同的JSON对象的集合,也可以是不同的对象。JSON、JSON对象、JSON数组的区别JSON是一种数据结构,类型xml。

2023-02-12 23:30:19 6730

原创 2022年终总结

时间真的是过得很快,转眼一年就过去了。把这里当做一个树洞倾诉一下最近一年的经历吧!

2023-01-12 20:35:14 545 1

原创 Java8新特性

流操作既可以是连续的也可以是中断的。连续性操作map通过指定的Function将流中的每个元素转变为另外的对象。我们首先快速的浏览Optionals是如何工作的,因为它在下一章节是十分重要的概念。你可以在lambda中访问外部的final变量,访问实例字段和静态变量的方法也是如此。表达式都对应一个指定的类型,这个指定的类型是由接口确定的。需要注意的是sorted只创建了流的排序结果,它并没有改变集合中元素的排序位置。如果你没有显示的指定Comparator,那么流中元素的排序规则为默认的。

2022-11-02 21:35:05 109

原创 ElasticSearch基础知识以及与SpringBoot的集成

ElasticSearch的基础知识的学习以及与SpringBoot的集成。

2022-10-10 20:51:33 791

原创 xxl-job调度的一致性及路由选择策略

所谓的调度一致性,是指保证一次任务调度只有一个机器来执行,而不会因为其是分布式部署而出现多台机器同时执行某一个job。在xxl-job中实现分布式锁用的数据库的分布式锁,其中一个表只存储表的名称,通过 for update 来查询锁。关闭隐式提交。获得显示排他锁,然后开启事务。事务完毕后,提交。释放悲观锁开启下一次轮回。代码在:JobScheduleHelper。

2022-08-24 17:02:57 1270

原创 B+tree数据结构区分主键索引、非聚集索引、覆盖索引

(covering index ,或称为索引覆盖)即从非主键索引中就能查到的记录,而不需要查询主键索引中的记录,使用覆盖索引的一个好处是辅助索引不包含整行记录信息,所以大小远远小于聚集索引,同时避免回表的产生减少了树的搜索次数,显著提升性能。我们这里建立一张学生表,其中包含字段id设置主键索引、name设置普通索引、age(无处理),并向数据库中插入4条数据:("小赵", 10)("小王", 11)("小李", 12)("小陈", 13)。在name,age联合索引树上找到名称为小李的节点。

2022-08-24 16:55:29 468 1

原创 ArrayList和LinkedList区别

ArrayList:顺序表,动态数组,随机访问。无参构造函数:使用无参构造函数初始化ArrayList后,它当时的数组容量为 0。如果使用了无参构造函数来初始化ArrayList, 只有当我们真正对数据进行添加操作add时,才会给数组分配一个默认的初始容量。1.ensureCapacityInternal()点进这个方法2. calculateCapacity()点进这个方法3.此时这才会分配默认的初始容量。

2022-08-24 16:40:16 626

转载 Postman中测试 @PathVariable、@RequestParam、@RequestBody

1、@PathVariable2、@RequestParam3、@RequestBody

2021-09-16 11:38:55 996

原创 Springboot2 整合 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式。生产者消费者模式:就像我们用微信和好友(群聊除外)聊天一样,微信就是这个队列,我们可以和很多个好友聊天,但是每条消息只能发给一个好友。发布者订阅者模式:发布/订阅模型如图所示,和订阅公众号是一样的。多个消费者可以消费消息。发布者需要建立一个topic 然后消费者去订阅。接下来用springboot2 + spring data redis 来实现来简单实现订阅者模式:spring data redis实

2021-09-15 10:45:23 809 2

原创 SpringBoot 配置全局异常处理器捕获异常

最近看到项目中有满屏的try catch,每个接口都做了 try/catch 处理,而且一旦需要调整,所有的接口都需要修改一遍,非常不利于代码的维护,然后就想着配置一下全局异常处理器。全局异常处理1.配置一下异常类public class UserNotExitException extends Exception{ private static final long serialVersionUID = 1L; private String errorCode; .

2021-09-12 01:24:11 305 1

原创 TemporalAdjusters

Java8引入了新的日期、时间库--即java.time包,TemporalAdjuster类是其中之一。时间调节器,将一个时间调节成另外一个时间@FunctionalInterfacepublic interface TemporalAdjuster { Temporal adjustInto(Temporal temporal);}有两种类等效的使用TemporalAdjuster的方式//第一种temporal = thisAdjuster.adjustInto(te

2020-09-30 09:45:43 1666

转载 Java 并发高频面试题:聊聊你对 AQS 的理解?

一、写在前面这篇文章,我们来聊聊面试时一个比较有杀伤力的问题:聊聊你对AQS的理解?之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题。当时那位同学内心估计受到了一万点伤害。。。因为首先,很多人可能连AQS是什么都不知道。或者仅仅是听说过AQS这个名词,但是可能连全称怎么拼写都不知道。更有甚者,可能会说:AQS?是不是一种思想?我们平时开发怎么来用AQS?总结起来,很多同学都对AQS有一种云里雾里的感觉,如果用搜索引擎查一下AQS是什么,估计看几篇文章就直接放弃了,因为密

2020-06-29 18:54:48 418 4

原创 Mybatis延迟加载

定义延迟加载或者也叫惰性加载,懒加载。使用延迟加载可以提高程序的运行效率。Java程序与数据库交互的频次越低,程序运行效率越高,所以我们应该尽量减少Java程序与数据库的交互次数,MyBatis延迟加载就很好的做到了这一点。通过一个具体的业务场景来理解延迟加载:班级(Classes)和学生(Student),当我们查询Student对象时,因为有级联关系,所以会将对应的Classes对象一并查询出来,这样就需要发送两条SQL语句,分别查询classes表和student表中的数据。延迟...

2020-06-29 17:53:14 184

原创 Java 异常

ArithmeticException 异常 :试图除以0NullPointerException 异常:当对象为null的时候调用了其属性或者方法ClassCastException 异常 :类型转换异常

2020-02-13 18:24:17 123

原创 Java基础-变量/接口

局部变量必须初始化 local variable 属于方法成员变量自动被初始化 属于对象静态变量 属于类Break 跳出整个循环,无论是几层循环;continue 终止本次循环;面向过程侧重过程,适合简单的,不需要协作的事务。面向对象需要协作完成。对象 是数据管理体现。 变量-数组(同类型)-对象(不同类型)。——发展历程抽象产生类,程序运行产生对象。类包含属性和方...

2020-02-13 18:14:34 172

原创 策略模式+模板方法的使用

之前了解策略模式,都是看的一些理论知识然后敲了一些小demo。比如,定义:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户处理掉if…else…类型:行为型适用场景系统有很多类,而他们的区别仅仅在于他们的行为不同 一个系统需要动态地在几种算法中选择一种 优点 开闭原则 避免使用多重条件转移语句 提高算法的保密性和安全性 缺点 客户端必须知...

2020-01-16 21:33:55 1616

原创 Mybatis中批量处理

批量查询<select id="listStudent" resultType="Student"> SELECT <include refid="Base_Column_List"/> FROM student WHERE id IN <foreach collection="list" open"(" close=")" separator="," i...

2020-01-16 17:46:58 182 1

原创 Mybatis 动态sql

if动态SQL通常要做的事情是根据条件包含where子句的一部风。比如:<select id="find" resultType="Blog"> SELECT * FROM BLOG WHERE state = 'SALE' <if test = "title !=null"> and title like #{title} </if><...

2020-01-03 16:05:45 112

原创 MyBatis一对一association用法

形如下面的类student和role。假设一个学生只能对应一种角色,是班长或者是文艺委员或者是什么。是一对一的关系。package com.example.demo;public class Role { private Long roleId; private String roleName; private Student student; pu...

2019-12-07 00:56:54 330

原创 MyBatis一对多collection用法

形如下面的一个类package com.example.demo;import java.util.List;public class ClassDemo { private Long classId; private String className; private List<Student> studentList; publ...

2019-12-07 00:55:28 388

原创 map集合解决双重for循环的性能问题

现在有个需求,需要将student表和class表的所有数据返回回去,关联条件时class_id。如果用sql很容易实现,直接连表查询就可以了,但是现在项目是微服务,不能连表查询了,所以得在代码里面修改。定义三个类,student类,class类,还有返回所有数据的studentAndClass类。import java.util.ArrayList;import java.util....

2019-12-02 01:50:47 1525

原创 Navicat Premium12下载安装及汉化

安装:搜索https://xclient.info/网址下载Navicat Premium12安装即可。汉化:安装TNT版主程序 下载https://www.pipipan.com/fs/13114864-217250713中文包 安装完成之后 复制汉化文件夹放到/Applications/Navicat Premium.app/Contents/Resources 汉...

2019-11-16 16:57:47 3029 1

原创 Java8中 Date和LocalDateTime的相互转换

数据库存的是timestap,java后端实体存的是date类型的,用的是java8的localdatetime,需要把localdatetime转换成date类型。1.使用atZone()方法将LocalDateTime转换为ZonedDateTime2.将ZonedDateTime转换为Instant,并从中获取Date代码示例:import java.time.I...

2019-11-04 12:18:46 4381 1

原创 数据库导出markdown database-doc-generator

database-doc-generator数据库文档生成器,可以生成.doc .html md文档,支持Mysql、postgresql,可以使用下载zip包或者下载源码的方式。本文介绍的是通过下载源码的方式进行的。从码云上找到的下载资料https://gitee.com/enilu/database-doc-generator按照文档一步一步执行即可。找到了一个springb...

2019-10-26 14:49:01 688

原创 亿级请求下多级缓存

什么是多级缓存所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。整体流程如上图所示:1)首先接入Nginx将请求负载均衡到应用Nginx,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均衡,而一致性哈希可以提升应用Nginx的缓存命中率,相对于轮询,一致性哈希会存在单机热点问题,一种解决办法是热点直接推送到接...

2019-10-12 17:15:37 130

原创 CDN

1.什么是CDN?空间换时间的策略。CDN的全称是Content Delivery Network,内容分发网络。CDN是构建在网络之上的内容分发网络。 CDN使用户就近获取所需内容,降低网络阻塞,提高用户访问响应速度和命中率。 CDN依靠部署在各地的边缘服务器,包括中心平台的负载均衡、内容分发、调度等功能模块。2.有CDN的时候用户流量web流程和无CDN的时候有什么区别?...

2019-10-12 16:48:47 183

原创 各种排序算法的时间与空间复杂度

各种排序算法的时间复杂度和空间复杂度排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 冒泡排序 O(n2) O(n) O(n2) O(1) 选择排序 O(n2) O(n2) O(n2) O(1) 插入排序 O(n2) O(n) O(n2) O(1) 希尔排序 O(n l...

2019-10-10 20:34:41 134

原创 Mysql的常用配置参数

基本配置:datadir:指定mysql的数据目录位置,用于存放mysql数据库文件、日志文件等。  配置示例:datadir=D:/wamp/mysqldata/Datadefault-character-set:mysql服务器默认字符集设置。  配置示例:default-character-set=utf8skip-grant-tables:当忘记mysql用户密码的时候...

2019-10-10 00:31:08 366

原创 Java Web基础

Http协议HTTP是实现客户端和服务器端通信的重要协议。一个完整的请求消息是由请求行、请求头和实体内容三部分组成。HTTP请求行包含三个部分,分别是请求方式、资源路径和使用的HTTP版本。GET /index.html HTTP/1.1GET是请求方式,index.html是请求资源路径,HTTP/1.1是通信使用的协议版本。GET方式参数放在请求行中的资源路径后面...

2019-10-09 20:53:57 315

转载 Java NIO核心组件学习

背景知识同步、异步、阻塞、非阻塞首先,这几个概念非常容易搞混淆,但NIO中又有涉及,所以总结一下[1]。同步:API调用返回时调用者就知道操作的结果如何了(实际读取/写入了多少字节)。 异步:相对于同步,API调用返回时调用者不知道操作的结果,后面才会回调通知结果。 阻塞:当无数据可读,或者不能写入所有数据时,挂起当前线程等待。 非阻塞:读取时,可以读多少数据就读多少然后返回,写...

2019-10-09 20:36:23 148

原创 Java找出数组中第二大的值

题目:给出一个数组{7,3,19,40,4,7,1};找出第二大的值思路:定义两个变量:一个变量用来存储数组的最大值,初始为数组首元素。另一个变量用来存储数组元素的第二大数,初始值为最小负整数,然后遍历数组元素。实现: public static int findSecMax(int[] arr) { int max = arr[0]; //...

2019-10-09 20:14:43 5422 2

空空如也

空空如也

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

TA关注的人

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