自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 缓存穿透、缓存击穿、缓存雪崩

缓存穿透客户端访问缓存和数据库中都不存在的数据,让请求直达存储层,导致数据库负载压力过大,甚至宕机。这种情况可能是业务层误删缓存和数据库的数据,也有可能时恶意攻击,专门访问不存在的数据解决方法:存储空值:1.存储层未命中后,仍将空值写入缓存层,客户端再次访问数据时直接返回空值;2.布隆过滤器:将数据存入布隆过滤器,访问缓存之前以过滤器拦截,若请求的数据不存在直接返回空值。缓存击穿一份热点数据,当缓存失效,请求直达存储层,导致服务崩溃。解决方法:1.热点数据不设置缓存过期时间2.加.

2022-04-17 16:09:07 760 2

原创 sychrongized 关键字

sychrongized关键字

2022-03-31 01:12:39 595

原创 Thread类

1.start()方法用来启动一个线程,当调用start方法后,系统才会开启一个新的线程来执行用户定义的子任务,在这个过程中,会为相应的线程分配需要的资源。2.run()方法run()方法是不需要用户来调用,当通过start方法启动一个线程之后,当线程获得了CPU执行时间,便进入run方法体去执行具体的任务。注意:继承Thread类必须重写run方法,在run方法中定义具体要执行的任务。补充: start()方法来启动线程,通过调用Thread类的start()方法来起动一个线程,这

2022-03-31 00:54:16 214

原创 jvm调优之Arthas(阿里巴巴开源的Java诊断工具)安装教程及常用的基本命令演示

Arthas介绍:Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题。Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux、Mac、Windows 操作系统,命令还支持使用tab键对各种信息的自动补全,诊断起来非常利索。官网:https://alibaba.github.io/arthas/index.htmlhttps://alibaba.github.io/arthas/index.htmlGithub地址:..

2022-03-29 02:32:09 1862

原创 JVM中对象如何在堆内存分配?

JVM中对象如何在堆内存分配?1、指针碰撞(Bump The Pointer) :内存规整的情况下;2、空闲列表(Free List) :内存不规整的情况下; 选择哪种分配方式由Java堆是否规整决定,而Java堆是否规整又由所采用的垃圾收集器是否带有空间压缩整理(Compact)的能力决定;因此,当使用Serial、ParNew等带压缩整理过程的收集器时,系统采用的分配算法是指针碰撞,既简单又高效;而当使用CMS这种基于清除(Sweep)算法的收集器时,理论上就只能采用较为复杂的空闲列表来分配内存

2022-03-29 02:02:28 416

原创 JVM老年代空间分配担保机制---及什么情况会进入老年代

新生代Minor GC后剩余存活对象太多,无法放入Survivor区中,此时就必须将这些存活对象直接转移到老年代去,如果此时老年代空间也不够怎么办?1、执行任何一次Minor GC之前,JVM会先检查一下老年代可用内存空间,是否大于新生代所有对象的总大小,因为在极端情况下,可能新生代Minor GC之后,新生代所有对象都需要存活,那就会造成新生代所有对象全部要进入老年代;2、如果老年代的可用内存大于新生代所有对象总大小,此时就可以放心大胆的对新生代发起一次Minor GC,因为 Min...

2022-03-29 01:56:13 1523

原创 JVM对象动态年龄判断是怎么回事?

虚拟机并不是永远地要求对象的年龄必须达到了MaxTenuringThreshold=15才能晋升老年代;结论-->动态年龄判断: Survivor区的对象年龄从小到大进行累加,当累加到X年龄(某个年龄)时占用空间的总和大于50%(可以使用-XX:TargetSurvivorRatio=?来设置保留多少空闲空间,默认值是50),那么比×年龄大的对象都会晋升到老年代;...

2022-03-29 01:47:53 387

原创 堆中对象的布局以及如何判断对象可以回收

2022-03-29 01:44:16 253

原创 JVM运行时数据区中栈、堆,程序计数器、元空间,的特点及作用

jvm内存结构划分2.jvm运行时数据区 程序计数器的特点及作用:1.程序计数器是一块较小的内存空间,几乎可以忽略;2.是当前线程所执行的字节码的行号指示器;3.Java多线程执行时,每条线程都会有一个独立的程序计数器,各条线程之间互不影响;4.该区域是“线程私有”的内存,每个线程独立存储;5.该区域不存在OOM;6.无GC回收3.jvm运行时数据区 虚拟机栈的特点及作用:1.线程私有2.方法执行会创建栈帧,存储局部变量表等信息;3.方法执行遵

2022-03-29 01:37:19 1729

原创 图解jvm双亲委派模型,以及它存在的原因和好处

双亲委派模型的工作过程:如果·一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是会把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当上一层类加载器反馈自己无法完成这个请求(他的搜索范围没有找到这个类)时,下一层类加载器才会尝试自己去加载;jdk为什么要设计双亲委派模型,有什么好处?1.确保安全,避免核心类库被修改2.避免重复加载;3.保证类的唯一性;如果你写一个jaa.lang.S...

2022-03-27 23:29:53 762

原创 jvm中三种类加载器

1.Bootstrap Class Loader(启动类加载器)也叫根的类加载器----c++实现加载jre/lib/rt.jar, resource.jar、charst.jar 被-Xbootclasspath参数所指定的路径中存放的类库2.Extension ClassLoader(扩展类加载器)---java实现加载jre\lib\ext, 被Java.ext.dirs系统变量所指定的路径中所有的类库3.Application ClassLoader(应用程序类加载器)---Java

2022-03-27 22:56:27 1289

原创 JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。

为什么分年老代和新生代1)新生代(Young Gen):年轻代主要存放新创建的对象,内存大小相对会比较小,垃圾回收会比较频繁。年轻代分成1个Eden Space和2个Suvivor Space(from 和to)。2)老年代(Tenured Gen):年老代主要存放JVM认为生命周期比较长的对象(经过几次的Young Gen的垃圾回收后仍然存在),内存大小相对会比较大,垃圾回收也相对没有那么频繁。为什么要分为Eden和Survivor?为什么要设置两个Survivor区?1.如果没有Surviv.

2022-03-20 15:43:10 977

原创 详细分析JVM内存模型

1.JVM(1) 基本概念:JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接的交互。(2) 运行过程我们都知道 Java 源文件,通过编译器,能够生产相应的.Class 文件,也就是字节码文件,而字节码文件又通过 Java 虚拟机中的解释器,编译成特定机器上的机器码 。也就是如下:① Java 源文件—->编译器—->字节码文件② 字节码文件—->J

2022-03-20 15:32:09 681

原创 内存溢出

内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区、堆、栈、本地方法栈、程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM。下面来分别说明几个区域出现OOM的情况及特征。1. java堆溢出(heap)Java堆内存主要用来存放运行过程中所有的对象,该区域OOM异常一般会有如下错误信息:java.lang.OutofMemoryError:Java heap space可以通过dump的内存快照就能分析,到底是由于程序原因导

2022-03-20 14:47:34 76

原创 为什么重写equals方法要重写hashcode?

为什么重写equals要重写hashcode方法* 因为 java 中判定两个对象是不是一致 是通过equals方法判定的* 如果equals 认定两个对象相等,那么我们认为这两个对象就是同一个对象* 既然是同一个对象,那么再HashMap中作为key来讲,就应该定位到同一个位置* 而HashMap定位是根据hashcode来定位的,所以要求这两个对象的hashcode返回的值是一样的* 换句话 equals 相等 那么hashcode一定也相等* 因为hashcode 是计算出来的

2022-03-14 16:51:01 352

原创 从源码分析128陷阱

从源码分析128陷阱,透彻

2022-03-10 00:31:46 74

原创 spring Aop

1、aop为面向切面编程,AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性。优点:1、降低模块之间的耦合度2、使系统容易扩展3、更好的代码复用。AOP使用场景:AOP用来封装横切关注点,具体可以在下面的场景中使用:Authentication 权限Caching 缓存Context passing 内容传递Error handling 错误处理Lazy loading 懒加载Debugging  调试logging, tracin

2022-02-07 13:13:28 120

原创 mybatis plus中QueryWrapper的查询

@Test public void squery() { //创建QueryWrapper 对象 QueryWrapper<User> queryWrapper = new QueryWrapper<>(); //ge gt le lt: 大于等于 大于 小于等于 小于 queryWrapper.ge("age",29); List<User> users = userMapper.

2022-01-18 04:30:53 1051

原创 IDEA中EasyCode(代码生成插件)模板的编写和使用 --- 超详细

废话不多说,直接上图上代码,人人都能看懂的首先打开设置找到如下位置模板编写:一、实体类entity层##导入宏定义$!define##保存文件(宏定义)#save("/entity", ".java")##包路径(宏定义)#setPackageSuffix("entity")##自动导入包(全局变量)$!autoImportimport com.baomidou.mybatisplus.extension.activerecord.Model;impor..

2021-12-09 21:23:02 2434 1

原创 idea 中用Debug 调试程序(一)

1.Debug 2.基本用法&快捷键 3.变量查看 4.智能步入 5.断点条件设置Debug:  首先看下IDEA中Debug模式下的界面。  如下是在IDEA中启动Debug模式,进入断点后的界面,我这里是Windows,可能和Mac的图标等会有些不一样。就简单说下图中标注的8个地方:  ① 以Debug模式启动服务,左边的一个按钮则是以Run模式启动。在开发中,我一般会直接启动Debug模式,方便随时调试代码。  ② 断点:在左边行号栏单击左键,或者快捷键Ct...

2021-12-09 00:46:42 290

原创 Spring Boot +mybatis plus 实现权限管理模块(RBAC)----仅后端

首先创建项目,在pom文件中导入相关依赖,集成mybatis plus,刷新依赖,<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/P...

2021-12-07 14:12:16 1236

原创 Java中的自动拆装箱及128陷阱分析----超详细

128陷阱:integer a = 127 , Integer b = 127 时 , a 和 b 被自动装箱到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .所以在比较两个包装类的对象时, 尽量使用 equals 方法 ,这样可以得到你想要的结果 , 使用 == 号容易导致 128陷阱 .简单来讲就是:在小于127大于-128的时候

2021-12-06 19:50:41 359

原创 IDEA中java常用的几个注解

@Data : 注在类上,提供类的get、set、equals、hashCode、canEqual、toString方法@AllArgsConstructor : 注在类上,提供类的全参构造@NoArgsConstructor : 注在类上,提供类的无参构造@Setter : 注在属性上,提供 set 方法@Getter : 注在属性上,提供 get 方法@EqualsAndHashCode : 注在类上,提供对应的 equals 和 hashCode 方法@Log4j/@Slf4j : 注在类

2021-12-06 13:11:44 426

原创 Linux编程基础(3) 项目部署

十一、Linux项目部署11.1 安装jdk1.8先卸载open-jdkjava -versionrpm -qa | grep javarpm -e --nodeps java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.x86_64rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.x86_64开始安装:mkdir /usr/local/src/javarz 上传jdk tar包

2021-12-05 13:18:16 3569

原创 Linux编程基础(2)其他命令

十、其他命令10.1 查看当前目录:pwd命令:pwd 查看当前目录路径10.2 查看进程:ps -ef命令:ps -ef 查看所有正在运行的进程10.3 结束进程:kill命令:kill pid 或者 kill -9 pid(强制杀死进程) pid:进程号10.4 网络通信命令:ifconfig:查看网卡信息命令:ifconfig 或 ifconfig | moreping:查看与某台机器的连接情况命令:ping ipnetstat -an:查看当前系统端口

2021-12-05 03:08:38 83

原创 idea中设置类的注释模板和方法注释模板

在idea中打开设置找到文件和代码模板设置一、类模板设置在右边编写你需要的变量完成你的注释模板编辑编辑格式如下:/** * @Description: * @Author GLT * 。。。 * @Date ${DATE} ${TIME} */public class ${NAME} {}之后点OK就行了二、方法注释模板方法注释编写如下:/* * @Author:GLT * @Description //TODO $end$ ...

2021-12-04 18:00:49 382

原创 @Date和Lombok

@Data 注解的主要作用是提高代码的简洁,使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法。引入lombok要使用 @Data 注解要先引入lombok,lombok 是什么,它是一个工具类库,可以用简单的注解形式来简化代码,提高开发效率。使用在pom.xml中添加依赖 <dependency> <groupId>org.projectlombok</groupId>

2021-12-04 16:45:17 214

原创 Linux编程基础篇(1)---基本命令

先了解Linux系统的基本操作命令一、基本命令1.1 关机和重启关机shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机重启shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启 shutdown -r 5 5分钟后重启1.2 帮助命令--help命令shutdown --help: ifconfig --help:查看网卡信息man命令(命令说明书)

2021-12-04 03:58:21 215

原创 mysql中left join, right join和inner join的区别

一、sql的left join 、right join 、inner join之间的区别left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录  inner join(等值连接) 只返回两个表中联结字段相等的行举例如下:表A记录如下:aID     aNum1     a200501112     a200501123     a200501134     a20050114

2021-12-02 02:25:32 315

原创 Mysql数据库left join,right join,和inner join的区别,表与语句查询结果展示区别

一、sql的left join 、right join 、inner join之间的区别  left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录   right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录  inner join(等值连接) 只返回两个表中联结字段相等的行举例如下: --------------------------------------------表A记录如下:aID     aNum1     a200501112     a

2021-12-02 02:22:10 316

原创 Mybatis框架的一级二级缓存

缓存的概念缓存的概念在内存中临时存储数据,速度快,可以减少数据库的访问次数。经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。MyBatis的一级缓存MyBatis的一级缓存也是SqlSession的缓存。SqlSession对象中维护了一个Map集合,用于存储相互的缓存数据。查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库。证明一级缓存的存在,通过用户id查询2次,查看结果(不用toString() 看出现sql语句的次数和对.

2021-12-02 02:09:50 64

原创 Object类,所有类的父类

1.首先解释equals方法和hashcode方法分别是用来干什么的?equals()方法:在Object类源码(如下所示)中,其底层是使用了“==”来实现,也就是说通过比较两个对象的内存地址是否相同判断是否是同一个对象。public boolean equals(Object obj) {return (this == obj);}但是在实际应用中,该方法不能满足的我们的需求。因为我们认为两个对象即使不是指向的同一块内存,只要这两个对象的各个字段属性值都相同,那么就认为这两个对象是同一个对象。

2021-12-02 02:06:07 104

原创 数据库中的约束

一、约束:为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。数据库完整性约束分为以下几个大类(一)、主键约束理论上来说每一个数据表都必须有一个唯一主键作为数据的唯一标识,设置主键的列不允许为空,主键习惯 id 表示,可以在创建数据时直接指定,也可以通过修改表结构直接添加,设置为主键的列在添加数据时不能重复,既唯一性。CREATE TABLE student (id int(11) NOT N

2021-12-02 01:59:49 652

原创 内部类

内部类普通内部类类种类,外界访问不到,有封闭性,不是必须的,可替代的局部内部类方法里面写,对外界隐藏(但是没什么用)匿名内部类new的时候先声明的类静态内部类一个类的内部出现静态类,然后使用静态类(static),return new...

2021-12-02 01:53:19 80

原创 接口和抽象类的异同

接口和抽象类的异同:1.接口的方法默认是 public,所有方法都是抽象方法,在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法2.接口中的实例变量默认是 final 类型的,而抽象类中则不一定3.一个类可以实现多个接口,但最多只能继承一个抽象类4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定5.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为

2021-12-02 01:51:26 206

原创 java中的接口

1.为什么java使用接口?有时候必须从几个类当中派生出一个子类,继承他们所有的属性和方法,但是java不支持多重继承于是就有了接口2.接口的特征1.接口用interface实现2.接口中所有的成员变量都是由public static final修饰的3.接口中的所有方法默认都是public abstract修饰的4.接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是可以使用多态5.实现接口的类中,必须实现接口中的所有方法,如果不实现接口中所有的方法,那么该类是抽象类6.接

2021-12-02 01:50:21 467

原创 抽象类

抽象类的特点1.由abstract修饰的类叫做抽象类,也可以修饰抽象方法2.abstract修饰的抽象方法可以不在抽象类当中实现,但一定要在子类当中重写,并实现3.只有抽象类当中才能有抽象方法,普通类当中不能有抽象方法4.抽象类当中不一定全是抽象方法,也可以使用普通方法,普通方法可以不用重写5.抽象类不能被实例化,但是可以使用多态6.final 不能和abstract同时使用,final修饰的方法禁止重写, abstract修饰的方法要求重写 ,冲突7.private修饰的方法时子类不可见的, abstr

2021-12-02 01:48:34 171

原创 JDBC存在的问题

JDBC存在的问题我们要想研究mybatis就必须知道jdbc所存在的问题,那我那么我们首先来复习一下jdbc操作数据库的大致流程1.加载数据库驱动2.创建并获取数据库连接对象connection3.通过连接对象获取会话对象statement4.编写sql语句5.如果有参数的话需要通过PreparedStatement设置参数5.执行sql语句并获取结果6.关闭资源上述是最原始的JDBC操作数据库的方式,有以下问题:数据库连接的频繁创建、释放浪费资源进而影响系统性能sql代码写在 java

2021-12-02 01:46:42 998

原创 后端ssm+前端layui 在线教学平台(管理系统)

在线学习平台有三个角色:管理员、老师、学生 管理员:拥有这个平台的所有权限,平台只有一个管理员管理员拥有对老师和学生信息的增删改查等内容和 一个课程信息管理 老师:课程信息管理 ---- 老师请假 --- 管理员批复 老师能够对学生信息进行增删改查处理。 课件管理:拥有上传课件和搜索课件的功能。 查看讨论话题:查看讨论话题、留言 留作业:留作业---(平台上留)、查看学生完成情况(优、良、可、差) 学生:课程信息管理----学生请假----老师批复 讨论话题:发起话题、查看话题、并回答话题 课件管理:搜索和

2021-11-28 23:15:25 1027 3

原创 inner join,left join,right join 的区别(sql+结果)展示

一、sql的left join 、right join 、inner join之间的区别  left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录  right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录  inner join(等值连接) 只返回两个表中联结字段相等的行举例如下:--------------------------------------------表A记录如下:aID     aNum1     a2005...

2021-11-25 23:08:05 145

空空如也

空空如也

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

TA关注的人

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