自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李晨璐的博客

The idea of blink

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

原创 leetcode题:33. 搜索旋转排序数组

题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数

2021-11-04 16:57:32 4245

原创 XXL-Job路由策略---一致性hash算法

目录前提好处缺点实现逻辑代码总结可扩展:容错性如何解决数据倾斜解决了什么问题前提路由策略有很多,轮询,随机,一致性hash,今天我们要分析的是是一致性hash,那么它有什么好处呢?好处可扩展很好的容错性缺点数据倾斜问题: 可用虚拟节点解决实现逻辑将地址列表中每一个地址进行hash计算,存到TreeMap中,TreeMap会根据key进行排序,(key为hash,value为地址)将jobId进行hash计算,得到hash值,然后在TreeMap中找到hash值最相近的hash值

2021-08-31 16:14:35 2659 1

原创 XXL-Job如何做到精准执行

前提在做定时任务时,我们会精确到某一秒去执行我们的任务,那么XXL-Job是如何帮助我们精准执行呢?利用单独的一个线程(ringThread),该线程的作用是从缓存中读取出当前时间该执行的定时任务,然后去执行,该缓存中存的是执行时间超前5秒内的定时任务,该缓存的数据结构是Map<Integer, List> ringData = new ConcurrentHashMap<>();(QuartzJob是我自定义的类,可以根据业务而定),这样的结构可以处理某一秒中多个任务的执行,相

2021-08-16 16:04:49 1429 2

原创 JVM CMS和G1执行过程

看了很多的博客,感觉他们写的都过于专业,今日就想能不能用通俗易懂的语言将其描述清楚,将这两个收集器解决掉!!!首先我们先了解一下CMS和G1是做什么的?都是垃圾回收器相同的地方:都是并发执行(垃圾收集线程与用户线程同步执行)不同的地方:关注点:CMS尽可能缩短垃圾收集时用户线程的停顿时间。G1实现可预期及可配置的用户线程停顿时间算法:CMS标记-清除算法,G1复制算法,标记-整理算法处理对象消失:CMS用的增量更新,G1用的原视快照那么这两个垃圾回收器是怎么工作呢?.

2020-11-05 21:52:51 1214 4

原创 Spring Boot启动源码分析

启动过程三个要点:启动类(SpringbootdemoApplication)上面的注解创建SpringApplication对象run方法注解:@Target(ElementType.TYPE) // 注解的适用范围,其中TYPE用于描述类、接口(包括包注解类型)或enum声明@Retention(RetentionPolicy.RUNTIME) // 注解的生命周期,保留到class文件中(三个生命周期)@Documented

2020-10-14 21:09:03 153 2

原创 spring bean生命周期详解,源码分析

目录如何获取beanClassPathXmlApplicationContext方法refresh源码分析finishBeanFactoryInitialization(beanFactory):spring bean的完整生命周期进阶版spring bean的完整生命周期如何获取bean首先,我们在代码中是怎样获取bean的,方式有以下几种,但不局限于这两种: @Test public void run1(){ //加载配置文件 ApplicationCont

2020-07-14 13:28:43 3351 4

原创 Springboot @ResponseStatus message为null

代码中我们要返回自定义的异常message,但是接口返回的message为null

2022-07-04 13:10:04 740 1

原创 web自动化---selenium下拉框中元素点击不准确

需求在web自动化测试场景中,我们要选择到下拉框中得某个元素下拉框类型标准下拉框(select)非标准下拉框(ul)出现得问题我们用selenium在点击非标准下拉框(下拉是里面的元素是动态刷新的)中的目标元素的时候,会偶先点击不正确得情况,分三种情况点击正确未点击到目标元素,出现点击偏移,点击到了其他元素目标点击异常,会抛出 XXX is not clickable at point (518, 660). Other element would receive the click

2022-01-20 10:24:04 1851

原创 修改request请求体中的数据

需求新项目和旧项目要做一个兼容,前端请求都按照新项目的参数格式(post请求)去访问我们的功能,但是旧项目的访问也需要按照新项目的参数格式去访问我们的项目,参数格式不一致,就需要我们对参数的格式做一些处理存在的问题普通的参数可以从request的getParameterMap中获取,而@RequestBody的参数需要从request的InputStream中获取,但是InputStream只能读取一次,如果过滤器读取了参数,后面拦截器和controler层就读取不到参数了为什么只能读取一次?in

2021-12-22 17:23:00 2913

原创 从反射到动态代理到aop到spring为什么需要三级缓存

反射java程序在运行状态中,对于任意一个类,都能够在运行时知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。动态代理aop(拦截器+动态代理)三级缓存为什么只能用三级缓存,不能使用二级缓存如何进入到aop,过滤器,动态代理,bean生命周期,三级缓存,...

2021-12-03 10:25:48 1379

原创 二分查找算法

作用可使查询得时间复杂度为O(log2n)可将有序数组一分为二进行查询,增快查询速度核心目标值( Target) —— 你要查找的值两个下标指针(left,right)中间下标值(mid)目标值和mid做等值运算,相等返回,不相等继续运算,不和其他下标值做等值返回运算left+(right-left)/2可以防止数据溢出,如用left+right/2,那么 left+right> Interger.MAX_VALUE 时,此时会导致数据溢出while循环(left<

2021-11-03 22:00:42 124

原创 leetcode题:55.跳跃游戏

题目给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下

2021-10-28 19:15:26 131

原创 leetcode题:45. 跳跃游戏 II

题目给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。解法—贪心我们每次在可跳范围内选择可以使得跳的更远的位置。这句话总结了算法的精髓,一一

2021-10-28 15:01:33 1464

原创 sql题---连续出现的数字

题目表:studentColumn NameTypeidintnumvarcharid 是这个表的主键。编写一个 SQL 查询,查找所有至少连续出现三次的数字。返回的结果表中的数据可以按 任意顺序 排列。查询结果格式如下面的例子所示:student 表:IdNum11213142516272Result 表:ConsecutiveNums11 是唯一连续出现

2021-10-21 11:15:15 1418

原创 XXL-job如何从数据库拿取数据

前提:首先我们要了解JobScheduleHelper和JobTriggerPoolHelper这两个类JobScheduleHelper:从数据库按照一定的规则去拿定时任务的数据JobTriggerPoolHelper:执行具体任务JobScheduleHelper这个类是从数据库按照一定规则去拿定时任务的数据,如下图下面我们看代码,里面有四个方法,我们只关注三个start(),refreshNextValidTime(),pushTimeRing()start(...

2021-08-16 15:42:25 1819 2

原创 登录模块---登录出错多次,锁定用户30分钟

需求登录模块我们需要限制非法用户试密码的次数,此次需求为限制5次,锁定用户30分钟解决方案利用redis,登录一下,可以使用用户的账号作为key,存到redis中,每次登录value+1,每次登录都查redis,看某一用户的value是否大于等于5,如果是,那么就直接返回对应的异常信息和code码代码后端public String loginCommit(String email, String pwd, String reqid, Model model, HttpServletRespons

2021-08-13 15:12:06 1578 4

原创 定时任务---工厂模式+策略模式消除多if,增强代码扩展性

1

2021-08-10 14:22:10 213 2

原创 Mybatis-Plus和mybatis共存,createtime和updatetime自动填充功能失效

SqlSessionFactory使用 MyBatis 首先是使用配置或者代码去生产 SqlSessionFactory,而 MyBatis 提供了构造器 SqlSessionFactoryBuilder。在 MyBatis 中,既可以通过读取配置的 XML 文件的形式生成 SqlSessionFactory,也可以通过Java代码的形式去生成 SqlSessionFactory。每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的,而 SqlSessio..

2021-04-30 15:26:42 1762 3

原创 mybatis-plus---条件构造器是如何解决sql注入的

项目中在使用mybaits-plus时,会产生mybaits-plus时如何解决sql注入的疑问,下面就让我们一探究竟!以下代码是往条件构造器赋值 Map<String, Object> conditionMap = new HashMap<>(); if (StringUtils.isNotBlank(ruleName)) { conditionMap.put("rule_name", ruleName); .

2021-04-30 14:36:15 2039 1

原创 mybatis和mybatis-plus同时存在项目中,出现 Invalid bound statement (not found) 异常

官方的解决方案出现Invalid bound statement (not found)异常不要怀疑,正视自己,这个异常肯定是你插入的姿势不对…… 检查是不是引入 jar 冲突 检查 Mapper.java 的扫描路径 方法一:在Configuration类上使用注解MapperScan @Configuration@MapperScan("com.yourpackage.*.mapper")public class YourConfigClass{ ....

2021-04-27 13:39:36 1252 3

原创 js---file样式直接上传,只有一个控件

需求解决方案利用lable标签和input进行绑定,更改lable的样式,触发input事件 <form id="myform" action="/device/excel/import.htm", method="post" , enctype="multipart/form-data" style="float: right;" > <%--通过label标签与input标签绑定--%> <label for='my_fi.

2021-04-26 13:18:25 121 3

原创 EasyExcel---易错点总结

easyexcel和poi冲突使用easyexcel大数据量导出时,需要依赖org.apache.poi的3.17版的jar包,而poi3.17与3.8/3.9版本之间方法变动比较大,会导致easyexcel不能正常使用。所以需要确保poi为3.17版本的web下载不了excelweb下载,不能用ajax调用下载,后端响应的是二进制数据,JQUERY的AJAX只能接收JSON等数据。如何解决: <button type="button" class="btn btn-submit" st

2021-04-26 11:41:49 326 3

原创 EasyExcel---监听器

概念监听器帮助我们获取到excel中每一行的数据数据异常时定位到具体的行和列批量导入,控制内存中数据量,达到一定量就导入到数据库思路在开发中我们需要将excel中的数据和数据库中的数据进行比对,如果一样,不进行操作,不一样更新数据库...

2021-04-25 18:31:58 3068 2

原创 EasyExcel---转换器

重点转换器将java的数据类型(含自定义的类)转为excel数据类型将excel的数据类型转为java数据类型监听器帮助我们获取到excel中每一行的数据确定数据异常时定位到行和列批量导入,控制内存中数据量,达到一定量就导入到数据库...

2021-04-22 18:11:37 5575 1

原创 分布式事务解决方案

什么是分布式事务指事务的操作位于不同的节点上,需要保证事务的 AICD 特性。例如:你下单,要走订单服务和库存服务,如何确保事务的正确执行如何解决理论依据AICD:事务具有4个特征,原子性,一致性,隔离性,持久性原子性:要么都执行,要么都不执行一致性:事务不能不一部分执行成功,一部分执行不成功,导致数据不一致隔离性:一个事务要操作的数据,不要被另一个事务同时操作持久性:一但事务提交,那将永久修改数据库的数据CAP:c:一致性:所有节点存入数据,返回响应a:高可用:某个节点存入数据,

2020-11-13 17:02:25 191 7

原创 一图看懂zookeeper

下图包含:zookeeper集群,监听机制,消息广播步骤(写请求处理流程),节点相关知识一个节点信息整体架构信息

2020-10-29 19:03:18 254 5

原创 RabbitMQ图解-镜像集群、队列、消息

下图是个人理解,如有不足之处,还望指正 !!!

2020-10-26 20:27:02 311 4

原创 MySql事务与锁详解

事务与锁事务的隔离级别悲观锁和乐观锁共享锁和排他锁事务隔离级别和锁的关系死锁产生的原因和解决办法如何查看死锁事务的隔离级别读未提交:出现脏读读已提交:解决脏读,出现不可重复读(有人开始操作数据,其它事务仍能够改动、插入或删除数据)可重复读,解决不可重复度,出现幻读,所有人可以读取,只要有一人开始操作,便上锁,其他人不能修改,但是可以新增或删除(幻读)序列化读:解决幻读a.脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种数据还没有提交到数据库中,这时,另外一个事务也访问这个数据,然

2020-10-24 21:16:47 260 4

原创 ThreadLocal内存泄漏分析与解决方案

要向了解ThreadLocal内存泄漏,我们先要了解以下4中引用的概念强引用、软引用、弱引用和虚引用。强引用:如果一个对象具有强引用,垃圾回收器绝不会回收它,当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。String str = "abc";List<String> list = new Arraylist<String>();软引用**如果内存空间足够,垃圾回收器

2020-10-14 21:17:53 1162 2

原创 多线程中 synchronized 锁升级的原理

锁的升级的目的:锁升级是为了减低了锁带来的性能消耗。在 Java 6 之后优化 synchronized 的实现方式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。原理:偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁。一个对象刚开始实例化的时候,没有任何线程来访问它的时候。它是可偏向的,意味着,它现在认为只可能有一个线程来访问它,所以当第一个线程来访问它的时候,它会偏向这个线程,此时,对象持有偏向锁。偏向第一个线程,这个线程在修改对象头成为偏向锁的时候使用CAS

2020-10-14 21:15:16 511 2

原创 单例模式原理分析

单例模式public class Singleton { private static Singleton instance; public static Singleton getInstance(){ if (instance == null) { synchronized(Singleton.class) { if (instance == null) instance = new Singleton(); }

2020-10-14 21:11:48 316 1

原创 Mybatis功能框架原理

Mybatis的功能架构分为三层:接口层:对外提供的接口API,可以通过这些API来操作数据库,如增删改查等操作 数据处理层:负责SQL查找,解析,执行,执行结果映射处理等 基础支撑层:连接管理,事务管理,配置加载等公用的东西经典图:个人想法,如有问题,请指正:...

2020-10-05 21:41:22 263 3

原创 一文看尽Redis

目录前沿:数据库处理数据历史单机MysqlMemcached(缓存)+MySQL+垂直拆分MySQL主从读写分离分库分表+水平拆分+mysql集群NoSQL的出现NoSQL简介作用特征四大分类应用场景Redis简介特征应用场景数据类型事务为什么要有事务简介特性锁为什么有锁乐观锁悲观锁持久化为什么要有持久化什么是持久化两种形式RDBAOF过期数据为什么要有过期数据删除策略定时删除惰性删除定时删除逐出算法为什么要由逐出算法逐出算法集群为什么要有集群概念三种模式主从模式哨兵模式Cluster缓存问题缓存预热缓存雪

2020-07-03 19:43:33 243 1

原创 Redis持久化

什么是持久化:利用永久性存储介质将数据进行保存,在特定的事件将保存的数据进行恢复的工作机制称为持久化为什么有持久化?现实中如果遇到意外断电的情况,放置数据的意外丢失,确保数据的安全性两种形式RDB:将当前数据状态进行保存,快照形式,存储数据结果,存储格式简单,关注点在数据AOF:将数据的操作过程进行保存,日志形式,存储操作过程,存储格式复杂,关注带你在数据的操作过程RDB启动方式:手动(save)和自动(bgsave)SAVE启动方式概念谁操作的:用户什么时间:及时

2020-07-03 19:34:08 170 3

原创 Redis集群三种方式

为什么要有集群单个Redis存在不稳定性,当Redis服务宕机或硬盘故障,系统崩溃之后,就没有可用的服务了,还会造成数据的丢失单个Redis的读写能力也是有限的还由于互联网的三高架构,高并发,高性能,高可用概念通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定,高效的状态三种模式主从模式哨兵模式Cluster模式主从模式为什么要用主从复制单机redis的风险与问题问题一:机器故障硬盘故障,系统崩溃本质:数据丢失,可能对业务造成灾难性打击问题二:容

2020-07-03 19:31:08 8613 3

原创 Redis逐出算法

为什么要由逐出算法情景分析,如果有新数据进入redis,但是数据都没有过期,而且内存也不足,那么这时就需要逐出算法,来腾出一些空间Redis使用内存存储数据,在执行每一个命令前,会调用freeMemoryIfNeeded()检测内存是否充足注意:逐出数据的过程不是100%能够清理出足够的可使用的内存空间,如果不成功则反复执行,当对所有数据尝试完毕后,如果不能达到内存清理的要求,将出现错误信息配置#最大可使用内存,占用物理内存的比例,默认值为0,表示不限制,生产环境根据需求设定,通常设置在50

2020-07-03 19:29:09 435 1

原创 Redis过期数据和删除策略

为什么要有过期数据因为内存有限,有些数据不需要一直在内存中,可以设定一些规则,将一些数据设置过期,在内存中删除,当然也不是随便删除,也要考虑到CPU的繁忙与空闲,以免出现Redis各种命令执行很多,但是正好出现大量过期数据,已造成服务器宕机删除策略目标是在内存占用与CPU占用之间寻找一种平衡,顾此失彼都会造成redis性能下降,甚至引发服务器宕机或内存泄漏(CPU忙的时候,不要去打扰,闲的时候去打扰)定时删除创建一个定时器,当key设置有过期实践,且过期时间到达时,由定时器任务立即执行

2020-07-03 19:27:34 1135 5

原创 Redis锁,悲观锁和乐观锁

乐观锁开启事务前,设置对数据的监听(watch),EXEC时,如果发生数据发生过修改,作用于改数据的事务会自动取消(DISCARD),事务EXEC后,无论成败,监听会被移除悲观锁每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。场景:如果项目中使用了缓存且对缓存设置了超时时间。当并发量比较大的时候,如果没有锁机制,如果有大量请求访问过期的数据,那么大量并发请求会穿透缓存直接查询数据库,造成雪崩效应。用加锁或者队列的方式保证来保证不会有大量的线程对数据库一次性进行读写,

2020-07-03 19:24:54 2603 1

原创 Redis事务

目录什么是事务特性基本操作注意事项什么是事务redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个队列,当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰特性一次性顺序性排他性基本操作#开启事务,此指令执行后,后续的所有指令均加入事务中mutli命令1命令2...#执行事务,事务的结束位置,同时也是执行事务,与multi成对出现exec#取消事务,终止当前事务定义,发生再multi之前,exec之前discard注意事项编译型错误,

2020-07-03 19:23:33 94

原创 Redis数据类型

Redis五大数据类型Redis一共支持五种数据类型:String(字符串)、hash(哈希)、list(列表)、set(集合)和zset(sorted set有序集合)String(字符串):Redis最基本的数据类型,一个键对应一个值,一个键值最大存储512MBHash(哈希):hash是一个键值对的集合,是一个String类型的field和value的映射表,适合用于存储对象List(列表):是redis的简单的字符串列表,按插入顺序排序Set(集合):是String字符串类型的无序集合,也

2020-07-03 19:22:46 887

空空如也

空空如也

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

TA关注的人

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