- 博客(52)
- 问答 (6)
- 收藏
- 关注

原创 事务隔离级别是怎么实现的?
事务是在 MySQL 引擎层实现的,我们常见的 InnoDB 引擎是支持事务的,事务的四大特性是原子性、一致性、隔离性、持久性,我们这次主要讲的是隔离性。当多个事务并发执行的时候,会引发脏读、不可重复读、幻读这些问题,那为了避免这些问题,SQL 提出了四种隔离级别,分别是读未提交、读已提交、可重复读、串行化,从左往右隔离级别顺序递增,隔离级别越高,意味着性能越差,InnoDB 引擎的默认隔离级别是可重复读。
2024-03-20 11:21:11
883

原创 索引常见面试题
当你想查阅书中某个知识的内容,你会选择一页一页的找呢?还是在书的目录去找呢?傻瓜都知道时间是宝贵的,当然是选择在书的目录去找,找到后再翻到对应的页。书中的目录,就是充当索引的角色,方便我们快速查找书中的内容,所以索引是以空间换时间的设计思想。那换到数据库中,索引的定义就是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录。所谓的存储引擎,说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
2024-03-19 17:13:23
1216
1

原创 开发工具IDEA常用的插件推荐及idea部分实用技巧和快捷键记录
如果光标在变量声明处,则查看使用该变量的代码;如果光标在使用变量处,则查看变量的声明位置。快捷键:Win: Ctrl + B Mac: Command + B 或按住 Ctrl / Command 点击鼠标左键。
2023-12-26 16:53:38
2574
1

原创 JVM GC 算法原理概述
这里用思维导图做一个小的总结。参考堆外内存的回收机制分析java调用本地方法--jni简介咱们从头到尾说一次 Java 垃圾回收深入理解 Java 虚拟机Java Hotspot G1 GC的一些关键技术Java Hotspot G1 GC的一些关键技术 - 美团技术团队附:关于GC Roots的理解所谓“GC roots”,或者说tracing GC的“根集合”,就是一组必须活跃的引用。所有Java线程当前活跃的栈帧里指向GC堆里的对象的引用;
2023-12-26 10:45:30
1409

原创 Linux命令-查看内存、GC情况及jmap 用法
命令jmap是一个多功能的命令。它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息、查看 ClassLoader 的信息以及 finalizer 队列。选项参数。需要打印配置信息的进程ID。产生核心dump的Java可执行文件。需要打印配置信息的核心文件。server-id可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器。远程调试服务器的IP地址或主机名。option查看进程的内存映像信息,类似 Solaris pmap 命令。
2023-12-21 17:17:40
7695

原创 mybatis中#和$的区别(通俗简单易解版)
在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,#方式能够很大程度防止sql注入;$传入的参数在SqL中直接显示为传入的值,$方式无法防止Sql注入.1、传入的参数在SQL中显示不同#传入的参数在SQL中显示为字符串(当成一个字符串),会对自动传入的数据加一个双引号。例:使用以下SQLselect id,name,age from student where id =#{id}当我们传递的参数id为 "1" 时,上述 sql 的解析为:select id
2021-12-23 09:40:25
26936
2
原创 如何用redis+lua来实现高并发限流,超时数据进行等待
然后,作为下游系统,我们需要控制并发以防止无效请求。为了确保原子性,在这里,我使用Redis + LUA脚本进行控制。然后,对于服务提供商,当请求数量超过设置的限流阈值时,将直接返回错误代码/错误提示,并终止请求的处理。对于调用者,我们要做的是:当并发请求超过限制的阈值时,请延迟请求,而不是直接丢弃它。当每秒有20个以上的请求时,它将提示“对接口进行签名的客户端请求数超过了限制”。如下RedisLimiter类,服务提供方使用limit方法实现限流,服务调用方使用limitWait方法实现限流等待(如需)
2024-11-18 17:02:51
523
原创 实现多线程交替打印问题
方法:在A线程中调用了B线程的join()方法时,表示只有当B线程执行完毕时,A线程才能继续执行。无论线程1、线程2、线程3哪个先执行,最后执行的顺序都是线程1——>线程2——>线程3。再看第三个问题,N个线程循环打印1-100,其实仔细想想这个和三个线程循环打印ABC并没有什么本质区别,只需要加上判断是否到了打印数字的最大值的语句即可。其实这类问题本质上都是线程通信问题,思路基本上都是一个线程执行完毕,阻塞该线程,唤醒其他线程,按顺序执行下一个线程。,只有线程B拿到锁后,不被阻塞,执行。
2024-10-29 11:04:50
1007
1
原创 记内存泄漏排查,如何用dump文件 分析
方便分析内存、线程使用情况、死锁等情况的在线可视化分析dump工具一般也可以自己装MAT,等工具,但是这个在线可视化HeapHero分析dump非常全面,总之,非常nice。
2024-10-24 15:42:46
838
原创 Java特性Function基础功能特性使用
在 Java 8 中,接口是一个函数接口,它位于包下。Function接口中定义了一个方法,它可以接受一个泛型 T 对象,返回一个泛型 R 对象,即参数类型和返回类型可以不同。
2024-05-08 19:07:21
467
原创 五分钟搞懂MySQL索引下推
索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。的主键id(1、4),逐一进行回表扫描,去聚簇索引找到完整的行记录,server层再对数据根据。而MySQL 5.6 以后, 存储引擎根据(name,age)联合索引,找到。假如你了解索引最左匹配原则,那么就知道这个语句在搜索索引树的时候,只能用。其实就是指将部分上层(服务层)负责的事情,交给了下层(引擎层)去处理。来说,数据和索引是在一起的,不存在回表这一说。
2024-03-22 11:31:25
1181
原创 一次线上慢SQL调优分享
一个sql查询设置了联合索引,但是在查询的时候没有走联合索引,所以导致查询速度非常慢。因为MySQL查询优化器会自己判断这个查询所需要的代价,如果代价太大则不走联合索引,导致联合索引失效。
2024-03-22 11:24:56
1031
原创 mybatis 在xml文件中特殊字符的转义方法(大于、小于、大于等于、小于等于)
【代码】mybatis 在xml文件中特殊字符的转义方法(大于、小于、大于等于、小于等于)
2023-12-29 15:32:58
5139
原创 记JVM相关一些常见面试题
只有两者都相同的情况,才认为两个类是相同的。每个类加载器都有自己的命名空间(由该加载器及所有父类加载器所加载的类组成,在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类;答:主要是为了安全性,避免用户自己编写的类动态替换 Java 的一些核心类,比如 String,同时也避免了重复加载,因为 JVM 中区分不同类,不仅仅是根据类名,相同的 class 文件被不同的 ClassLoader 加载就是不同的两个类,如果相互转型的话会抛java.lang.ClassCaseException.
2023-12-27 11:17:35
1213
原创 项目部署阿里云服务器详细流程
最初宝塔面板的端口号是8888,出于安全考虑,现在宝塔面板使用的端口是程序安装完成后随机生成的端口号,在步骤四图中的面板地址中可以看出,端口号为39118,注意:这个端口号是随机生成,你的宝塔面板端口号可能不是这个。在浏览器中粘贴宝塔面板的外网面板地址,并输入账号和密码,登录到宝塔面板管理后台,第一次登录需要勾选同意协议,然后进入面板。没有宝塔账号的话,就点免费注册一个宝塔账号。安全组规则设置完后,然后点【保存】即可,不需要重启云服务器,安全组规则保存后立即生效,宝塔面板端口号就已经开通了。
2023-12-13 17:19:14
6006
2
原创 IDEA 出现问题:git提交commit时Perform code analysis卡住解决方案(git commit提交很慢)
然后尝试执行 git commit 操作,确保 Perform code analysis 选项没有被勾选上。3、在右侧的窗口中,找到 Perform code analysis 选项,并取消勾选该选项。1、打开 IntelliJ IDEA,进入 File -> Settings(或者使用快捷键 Ctrl+Alt+S)。2、在弹出的 Settings 窗口中,找到 Version Control -> Commit Dialog 选项。4、关闭所有已打开的项目窗口,关闭IDEA,重新打开IDEA。
2023-12-12 23:31:12
6270
原创 面试二总结
什么是脏读?脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交(commit)到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。什么是不可重复读?
2023-10-22 00:15:20
386
原创 自定义注解使用SPEL表达式来动态获取方法传参
如果是对象参数,@DataAuth(spaceName = "#graphShowAttribute.space")要实现的是 动态入参,也就是在使用自定义注解的时候 ,写入的是字符串,并非一个传入参数值。如果是单个参数,@DataAuth(spaceName = "#space"),每次接口参数变化,我都想将这个参数传入自定义的注解中用以校验;这里的spaceName 并非一个固定字符串,而是一个路径参数。
2023-06-14 14:56:45
3478
原创 Spring Security权限框架入门详解与实际使用
主要功能是提供认证和授权服务。@Component@Override@Service@Overridelog.info("登录账号:{} 用户名或密码错误.", account);throw new BussinessException("登录账号:" + account + " 用户名或密码错误");log.info("登录账号:{} 已被停用.", account);
2023-02-20 16:36:39
613
2
原创 mybatis拦截器实现权限管理
我们定义了一个拦截器,把将要执行Executor的sql语句进行拦截,通过线程上下文拿到此前封装好的数据形式MybatisDataAuthority,在由Jsqlparser解析器将一段完整的Sql解析成方便拼装的Sql表达式,最后将此sql输出由执行器执行,达到控制的效果。上面代码为根据认证用户所拥有的资源进行数据的封装传递给拦截器的过程。我们看到了可以拦截Executor接口的部分方法,比如update,query,commit,rollback等方法,还有其他接口的一些方法等。
2023-02-20 16:33:37
2265
原创 redis配置序列化
但缺点也非常致命,那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)。本质上存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。,还有序列化后的结果非常庞大,是JSON格式的5倍左右,这样就会消耗redis服务器的大量内存。问题:使用默认的JDK序列化方式,在RDM工具中查看k-v值时会出现“乱码”,不方便查看。
2023-01-30 11:45:35
4070
2
转载 Spring Boot 使用自定义注解实现防止表单重复提交
由于网速等原因造成页面卡顿,用户重复刷新提交页面,甚至会有黑客或恶意用户使用工具重复恶意提交表单来对网站进行攻击,所以说防止表单重复提交在 Web 应用中的重要性是极高的。本文中提到的方法只是众多方法中的一种,我个人也是通过这种方式来实现的防止表单重复提交。当然了,我们可以选择的办法有很多,比如采用 JS 禁用提交按钮、利用Session防止表单重复提交等等,最终如何选择还是要根据自己的应用和开发框架来决定,选择一个适合自己的方法才是最好的💪。在底层实现上,所有定义的注解都会自动继承。
2022-11-07 15:50:19
1786
原创 @JsonDeserialize和@JsonSerialize注解的使用
调媒体第三方接口时,🤫根据媒体返回id找到对应解析,所以可以在使用JSON转换解析时使用该注解,将对应关系存入Map中进行自动转换。
2022-10-31 16:29:57
2865
原创 实体类转Json常用注解
作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,通常是用来解决循环嵌套的问题。LowerCaseStrategy: 小写策略 - 简单的把所有字母全部转为小写,不添加连接符。KebabCaseStrategy: 肉串策略 - 单词小写,使用连字符’-‘连接。类注解,指定序列化时忽略这些属性,可以用于覆盖超类中默认输出的属性。仅在属性不为空时序列化此字段,对于字符串,即null或空字符串。指定序列化时的字段名,默认使用属性名。类注解,序列化时忽略此类。
2022-10-08 15:19:10
2588
原创 SpringAOP中的JointPoint和ProceedingJoinPoint使用详解
这里详细介绍JointPoint的方法,这部分很重要是coding核心参考部分。开始之前我们思考一下,我们到底需要获取切入点的那些信息。 getSignature());是获取到这样的信息 :修饰符+ 包名+组件名(类名) +方法名这里我只需要方法名3. 获取方法上的注解方法1:xxxxxx是注解名字方法2:上面我们已经知道了方法名和类的对象,通过反射可以获取类的内部任何信息。4. 获取方法的参数这里返回的是切入点方法的参数列表测试整合眼见为实,测试一遍可以理解更深
2022-07-08 15:35:59
9663
原创 Mybatis之TypeHandler(自定义接收返回数组或对象的数据类型)
mybatis默认是没有实现jsonb类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的TypeHandler的一个简单实现:1、jsonarray数组json:2、jsonObjectd对象:数据类型举例:
2022-07-05 16:53:24
3886
1
原创 Hutool TreeUtil工具使用,将数组数据转为树形结构(如将全国省份数组按parentid转为树形)
第一种方式构建Tree第二种自定义字段名实战(将省市数组转为树形):省市list:设置实体类接收:使用工具类实现:返回数据类型
2022-07-04 15:13:59
1280
原创 Java中自定义注解的使用
第一步,定义注解——相当于定义标记;第二步,配置注解——把标记打在需要用到的程序代码中;第三步,解析注解——在编译期或运行时检测到标记,并进行特殊操作。注解在Java中,与类、接口、枚举类似,因此其声明语法基本一致,只是所使用的关键字有所不同,注解使用@interface关键字来声明。在底层实现上,所有定义的注解都会自动继承java.lang.annotation.Annotation接口。注解类型的实现部分:根据我们日常定义类或接口的经验,在类中无非是要定义构造方法、属性或一般方法。但是,在自
2022-06-29 15:08:44
1602
1
原创 几种给对象属性赋值复制操作
几种给对象属性赋值复制操作效率:因为Orika的设计思路是预先通过javaassist把JavaBean之间的映射关系一次性生成目标拷贝方法代码。 这样就可以避免在Bean 映射环节一次次的读取映射规则。 从而实现效率上的提高...
2022-06-15 10:25:06
1337
原创 MySQL的json查询之json_contains、json_contains_path
MySQL的json查询之json_contains、json_contains_path
2022-06-10 13:45:53
4918
原创 高并发下秒杀商品细节
高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。1 瞬时高并发一般在秒杀时间点(比如:12
2022-04-13 16:25:28
296
3
原创 面试总结大全(一)
MySQL数据库支持多种引擎,其中最为常用的是InnoDB和MyISAM InnoDB,支持事务管理(ACID),支持行锁和外键,是MySQL的默认引擎。 支持事务 支持行锁 支持外键 MyISAM,是基于对ISAM存储引擎的扩展,不支持事务,但在数据查询和插入操作拥有较搞的效率。 不支持事务 查询效率高 支持全文检索 不支持外键 SQL优化SQL优化的重心是查询优化.
2022-03-10 11:21:04
588
原创 一级缓存二级缓存的区别
①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。 ②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存底层还是个HashMap去实现。开启二级缓存代码: <!...
2022-03-09 22:21:38
6407
原创 23 种设计模式的通俗解释,秒懂自用版
01 工厂方法追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。02 建造者模式MM 最爱听的就是「我爱你」这句话了,见到不同地方的 MM,...
2022-02-24 09:54:38
340
原创 配置文件大全(更新版)
数据库乱码配置文件:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
2022-01-07 16:02:18
706
空空如也
将hashmap里的数据放到list中,数据都重复了
2022-05-06
springcloud项目pom.xml文件中添加网关依赖报错
2022-02-08
将项目lib文件转成maven后,一运行项目就报空指针异常,页面都显示不出来是什么情况
2021-12-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人