自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 问答 (6)
  • 收藏
  • 关注

原创 事务隔离级别是怎么实现的?

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

2024-03-20 11:21:11 838

原创 索引常见面试题

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

2024-03-19 17:13:23 1153

原创 开发工具IDEA常用的插件推荐及idea部分实用技巧和快捷键记录

如果光标在变量声明处,则查看使用该变量的代码;如果光标在使用变量处,则查看变量的声明位置。快捷键:Win: Ctrl + B Mac: Command + B 或按住 Ctrl / Command 点击鼠标左键。

2023-12-26 16:53:38 2217 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 1372

原创 Linux命令-查看内存、GC情况及jmap 用法

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

2023-12-21 17:17:40 6598

原创 windows关闭指定端口(tomcat端口占用)

windows关闭指定端口(tomcat端口占用)

2022-12-05 10:14:26 469

原创 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 26663 2

原创 Java特性Function基础功能特性使用

在 Java 8 中,接口是一个函数接口,它位于包下。Function接口中定义了一个方法,它可以接受一个泛型 T 对象,返回一个泛型 R 对象,即参数类型和返回类型可以不同。

2024-05-08 19:07:21 382

原创 五分钟搞懂MySQL索引下推

索引下推(Index Condition Pushdown,简称ICP),是MySQL5.6版本的新特性,它能减少回表查询次数,提高查询效率。的主键id(1、4),逐一进行回表扫描,去聚簇索引找到完整的行记录,server层再对数据根据。而MySQL 5.6 以后, 存储引擎根据(name,age)联合索引,找到。假如你了解索引最左匹配原则,那么就知道这个语句在搜索索引树的时候,只能用。其实就是指将部分上层(服务层)负责的事情,交给了下层(引擎层)去处理。来说,数据和索引是在一起的,不存在回表这一说。

2024-03-22 11:31:25 1124

原创 一次线上慢SQL调优分享

一个sql查询设置了联合索引,但是在查询的时候没有走联合索引,所以导致查询速度非常慢。因为MySQL查询优化器会自己判断这个查询所需要的代价,如果代价太大则不走联合索引,导致联合索引失效。

2024-03-22 11:24:56 914

原创 mybatis 在xml文件中特殊字符的转义方法(大于、小于、大于等于、小于等于)

【代码】mybatis 在xml文件中特殊字符的转义方法(大于、小于、大于等于、小于等于)

2023-12-29 15:32:58 3315

原创 记JVM相关一些常见面试题

只有两者都相同的情况,才认为两个类是相同的。每个类加载器都有自己的命名空间(由该加载器及所有父类加载器所加载的类组成,在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类;答:主要是为了安全性,避免用户自己编写的类动态替换 Java 的一些核心类,比如 String,同时也避免了重复加载,因为 JVM 中区分不同类,不仅仅是根据类名,相同的 class 文件被不同的 ClassLoader 加载就是不同的两个类,如果相互转型的话会抛java.lang.ClassCaseException.

2023-12-27 11:17:35 1174

原创 前后端项目,nginx部署前端项目后刷新浏览器报错404的问题

【代码】前后端项目,nginx部署前端项目后刷新浏览器报错404的问题。

2023-12-15 11:32:39 557

原创 项目部署阿里云服务器详细流程

最初宝塔面板的端口号是8888,出于安全考虑,现在宝塔面板使用的端口是程序安装完成后随机生成的端口号,在步骤四图中的面板地址中可以看出,端口号为39118,注意:这个端口号是随机生成,你的宝塔面板端口号可能不是这个。在浏览器中粘贴宝塔面板的外网面板地址,并输入账号和密码,登录到宝塔面板管理后台,第一次登录需要勾选同意协议,然后进入面板。没有宝塔账号的话,就点免费注册一个宝塔账号。安全组规则设置完后,然后点【保存】即可,不需要重启云服务器,安全组规则保存后立即生效,宝塔面板端口号就已经开通了。

2023-12-13 17:19:14 4791

原创 SpringBoot上传图片文件到七牛云

pom.xml添加七牛云的sdk依赖。

2023-12-13 11:24:59 290

原创 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 4900

原创 面试二总结

什么是脏读?脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交(commit)到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。什么是不可重复读?

2023-10-22 00:15:20 339

原创 自定义注解使用SPEL表达式来动态获取方法传参

如果是对象参数,@DataAuth(spaceName = "#graphShowAttribute.space")要实现的是 动态入参,也就是在使用自定义注解的时候 ,写入的是字符串,并非一个传入参数值。如果是单个参数,@DataAuth(spaceName = "#space"),每次接口参数变化,我都想将这个参数传入自定义的注解中用以校验;这里的spaceName 并非一个固定字符串,而是一个路径参数。

2023-06-14 14:56:45 3016

原创 对AI写作看法

会,AI工具在许多方面都带来了便利和效率,很多不会的代码也能让AI协助生成。

2023-06-01 14:55:17 297

原创 Spring Security权限框架入门详解与实际使用

主要功能是提供认证和授权服务。@Component@Override@Service@Overridelog.info("登录账号:{} 用户名或密码错误.", account);throw new BussinessException("登录账号:" + account + " 用户名或密码错误");log.info("登录账号:{} 已被停用.", account);

2023-02-20 16:36:39 558 3

原创 mybatis拦截器实现权限管理

我们定义了一个拦截器,把将要执行Executor的sql语句进行拦截,通过线程上下文拿到此前封装好的数据形式MybatisDataAuthority,在由Jsqlparser解析器将一段完整的Sql解析成方便拼装的Sql表达式,最后将此sql输出由执行器执行,达到控制的效果。上面代码为根据认证用户所拥有的资源进行数据的封装传递给拦截器的过程。我们看到了可以拦截Executor接口的部分方法,比如update,query,commit,rollback等方法,还有其他接口的一些方法等。

2023-02-20 16:33:37 2092

原创 redis配置序列化

但缺点也非常致命,那就是此类的构造函数中有一个类型参数,必须提供要序列化对象的类型信息(.class对象)。本质上存储和网络传输 都需要经过 把一个对象状态保存成一种跨平台识别的字节格式,然后其他的平台才可以通过字节信息解析还原对象信息。而我们进行跨平台存储和网络传输的方式就是IO,而我们的IO支持的数据格式就是字节数组。,还有序列化后的结果非常庞大,是JSON格式的5倍左右,这样就会消耗redis服务器的大量内存。问题:使用默认的JDK序列化方式,在RDM工具中查看k-v值时会出现“乱码”,不方便查看。

2023-01-30 11:45:35 4013 2

转载 Spring Boot 使用自定义注解实现防止表单重复提交

由于网速等原因造成页面卡顿,用户重复刷新提交页面,甚至会有黑客或恶意用户使用工具重复恶意提交表单来对网站进行攻击,所以说防止表单重复提交在 Web 应用中的重要性是极高的。本文中提到的方法只是众多方法中的一种,我个人也是通过这种方式来实现的防止表单重复提交。当然了,我们可以选择的办法有很多,比如采用 JS 禁用提交按钮、利用Session防止表单重复提交等等,最终如何选择还是要根据自己的应用和开发框架来决定,选择一个适合自己的方法才是最好的💪。在底层实现上,所有定义的注解都会自动继承。

2022-11-07 15:50:19 1694

原创 @JsonDeserialize和@JsonSerialize注解的使用

调媒体第三方接口时,🤫根据媒体返回id找到对应解析,所以可以在使用JSON转换解析时使用该注解,将对应关系存入Map中进行自动转换。

2022-10-31 16:29:57 2708

原创 实体类转Json常用注解

作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,通常是用来解决循环嵌套的问题。LowerCaseStrategy: 小写策略 - 简单的把所有字母全部转为小写,不添加连接符。KebabCaseStrategy: 肉串策略 - 单词小写,使用连字符’-‘连接。类注解,指定序列化时忽略这些属性,可以用于覆盖超类中默认输出的属性。仅在属性不为空时序列化此字段,对于字符串,即null或空字符串。指定序列化时的字段名,默认使用属性名。类注解,序列化时忽略此类。

2022-10-08 15:19:10 2400

原创 SpringAOP中的JointPoint和ProceedingJoinPoint使用详解

这里详细介绍JointPoint的方法,这部分很重要是coding核心参考部分。开始之前我们思考一下,我们到底需要获取切入点的那些信息。 getSignature());是获取到这样的信息 :修饰符+ 包名+组件名(类名) +方法名这里我只需要方法名3. 获取方法上的注解方法1:xxxxxx是注解名字方法2:上面我们已经知道了方法名和类的对象,通过反射可以获取类的内部任何信息。4. 获取方法的参数这里返回的是切入点方法的参数列表测试整合眼见为实,测试一遍可以理解更深

2022-07-08 15:35:59 9192

原创 Mybatis之TypeHandler(自定义接收返回数组或对象的数据类型)

mybatis默认是没有实现jsonb类型字段对应的TypeHandler,所以一般我们需要自定义mybatis的TypeHandler的一个简单实现:1、jsonarray数组json:2、jsonObjectd对象:数据类型举例:

2022-07-05 16:53:24 3683 1

原创 Hutool TreeUtil工具使用,将数组数据转为树形结构(如将全国省份数组按parentid转为树形)

第一种方式构建Tree第二种自定义字段名实战(将省市数组转为树形):省市list:设置实体类接收:使用工具类实现:返回数据类型

2022-07-04 15:13:59 1203

原创 Java中自定义注解的使用

第一步,定义注解——相当于定义标记;第二步,配置注解——把标记打在需要用到的程序代码中;第三步,解析注解——在编译期或运行时检测到标记,并进行特殊操作。注解在Java中,与类、接口、枚举类似,因此其声明语法基本一致,只是所使用的关键字有所不同,注解使用@interface关键字来声明。在底层实现上,所有定义的注解都会自动继承java.lang.annotation.Annotation接口。注解类型的实现部分:根据我们日常定义类或接口的经验,在类中无非是要定义构造方法、属性或一般方法。但是,在自

2022-06-29 15:08:44 1419 1

原创 几种给对象属性赋值复制操作

几种给对象属性赋值复制操作效率:因为Orika的设计思路是预先通过javaassist把JavaBean之间的映射关系一次性生成目标拷贝方法代码。 这样就可以避免在Bean 映射环节一次次的读取映射规则。 从而实现效率上的提高...

2022-06-15 10:25:06 1254

原创 mybatis 实现批量插入或更新功能方案

mybatis 实现批量插入或更新功能方案

2022-06-14 17:06:15 4633

原创 MySQL的json查询之json_contains、json_contains_path

MySQL的json查询之json_contains、json_contains_path

2022-06-10 13:45:53 4614

原创 高并发下秒杀商品细节

高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。1 瞬时高并发一般在秒杀时间点(比如:12

2022-04-13 16:25:28 260 3

原创 面试总结大全(一)

MySQL数据库支持多种引擎,其中最为常用的是InnoDB和MyISAM InnoDB,支持事务管理(ACID),支持行锁和外键,是MySQL的默认引擎。 支持事务 支持行锁 支持外键 MyISAM,是基于对ISAM存储引擎的扩展,不支持事务,但在数据查询和插入操作拥有较搞的效率。 不支持事务 查询效率高 支持全文检索 不支持外键 SQL优化SQL优化的重心是查询优化.

2022-03-10 11:21:04 555

原创 一级缓存二级缓存的区别

  ①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。  ②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存底层还是个HashMap去实现。开启二级缓存代码: <!...

2022-03-09 22:21:38 6237

原创 23 种设计模式的通俗解释,秒懂自用版

01 工厂方法追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。02 建造者模式MM 最爱听的就是「我爱你」这句话了,见到不同地方的 MM,...

2022-02-24 09:54:38 290

原创 配置文件大全(更新版)

数据库乱码配置文件:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

2022-01-07 16:02:18 689

原创 动态代理两种方式以及区别

JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理。 CGLIB动态代理:利用asm开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。区别:JDK动态代理只能对实现了接口的类生成代理,而不能针对类。(若使用) CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。因为是继承,所以该类或方法最好不要声明成final 。若需强制使用CGLIB动态代理,可在bean。xml文件中配置&

2021-12-29 17:54:54 234

原创 单例设计模式几种情况

一,饿汉式是否 Lazy 初始化:否是否多线程安全:是实现难度:易描述:这种方式比较常用,但容易产生垃圾对象。优点:没有加锁,执行效率会提高。缺点:类加载时就初始化,浪费内存。它基于 classloader 机制避免了多线程的同步问题,不过,instance 在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用 getInstance 方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化 instance 显然没有达到 lazy loa

2021-12-23 10:08:51 67

原创 javaweb中访问路径一系列问题

一。访问路径为多级时注意事项:1.跳转路径往往要加绝对路径/,例如跳转到:/xxx/yyy; 如果不加,则是最后一级路径清掉,拼上相对路径(相对路径::也就是相对硬盘的全部路径。例如<body backround="E:\book\网页布局\代码\第2章\bg.jpg" >绝对路径:相比于当前文件目录下的路径。例如:<body background="bg.jpg">)2.转发:/路径代表当前上下文的路径,直接写跳转路径"/xxx/yyy"即可3.重...

2021-12-09 19:59:26 749

空空如也

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

TA关注的人

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