![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
IT圈最后的深情
00
展开
-
缓存穿透、缓存击穿、缓存雪崩
缓存穿透客户端访问缓存和数据库中都不存在的数据,让请求直达存储层,导致数据库负载压力过大,甚至宕机。这种情况可能是业务层误删缓存和数据库的数据,也有可能时恶意攻击,专门访问不存在的数据解决方法:存储空值:1.存储层未命中后,仍将空值写入缓存层,客户端再次访问数据时直接返回空值;2.布隆过滤器:将数据存入布隆过滤器,访问缓存之前以过滤器拦截,若请求的数据不存在直接返回空值。缓存击穿一份热点数据,当缓存失效,请求直达存储层,导致服务崩溃。解决方法:1.热点数据不设置缓存过期时间2.加.原创 2022-04-17 16:09:07 · 769 阅读 · 2 评论 -
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 · 127 阅读 · 0 评论 -
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 · 1110 阅读 · 0 评论 -
IDEA中EasyCode(代码生成插件)模板的编写和使用 --- 超详细
废话不多说,直接上图上代码,人人都能看懂的首先打开设置找到如下位置模板编写:一、实体类entity层##导入宏定义$!define##保存文件(宏定义)#save("/entity", ".java")##包路径(宏定义)#setPackageSuffix("entity")##自动导入包(全局变量)$!autoImportimport com.baomidou.mybatisplus.extension.activerecord.Model;impor..原创 2021-12-09 21:23:02 · 2552 阅读 · 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 · 330 阅读 · 0 评论 -
Java中的自动拆装箱及128陷阱分析----超详细
128陷阱:integer a = 127 , Integer b = 127 时 , a 和 b 被自动装箱到同一个对象中 , 所以 用 == 号判断时, 认为是相等的. 而当等于128 时,则是分装在两个对象中的 , 自然地址也不会相等 , 所以 == 号 判断结果为 false . 超过128 结果也是一样的 .所以在比较两个包装类的对象时, 尽量使用 equals 方法 ,这样可以得到你想要的结果 , 使用 == 号容易导致 128陷阱 .简单来讲就是:在小于127大于-128的时候原创 2021-12-06 19:50:41 · 373 阅读 · 0 评论 -
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 · 462 阅读 · 0 评论 -
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 · 85 阅读 · 0 评论 -
idea中设置类的注释模板和方法注释模板
在idea中打开设置找到文件和代码模板设置一、类模板设置在右边编写你需要的变量完成你的注释模板编辑编辑格式如下:/** * @Description: * @Author GLT * 。。。 * @Date ${DATE} ${TIME} */public class ${NAME} {}之后点OK就行了二、方法注释模板方法注释编写如下:/* * @Author:GLT * @Description //TODO $end$ ...原创 2021-12-04 18:00:49 · 386 阅读 · 0 评论 -
@Date和Lombok
@Data 注解的主要作用是提高代码的简洁,使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法。引入lombok要使用 @Data 注解要先引入lombok,lombok 是什么,它是一个工具类库,可以用简单的注解形式来简化代码,提高开发效率。使用在pom.xml中添加依赖 <dependency> <groupId>org.projectlombok</groupId>原创 2021-12-04 16:45:17 · 217 阅读 · 0 评论 -
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 · 222 阅读 · 0 评论 -
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 · 321 阅读 · 0 评论 -
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 · 336 阅读 · 0 评论 -
Mybatis框架的一级二级缓存
缓存的概念缓存的概念在内存中临时存储数据,速度快,可以减少数据库的访问次数。经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。MyBatis的一级缓存MyBatis的一级缓存也是SqlSession的缓存。SqlSession对象中维护了一个Map集合,用于存储相互的缓存数据。查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库。证明一级缓存的存在,通过用户id查询2次,查看结果(不用toString() 看出现sql语句的次数和对.原创 2021-12-02 02:09:50 · 66 阅读 · 0 评论 -
Object类,所有类的父类
1.首先解释equals方法和hashcode方法分别是用来干什么的?equals()方法:在Object类源码(如下所示)中,其底层是使用了“==”来实现,也就是说通过比较两个对象的内存地址是否相同判断是否是同一个对象。public boolean equals(Object obj) {return (this == obj);}但是在实际应用中,该方法不能满足的我们的需求。因为我们认为两个对象即使不是指向的同一块内存,只要这两个对象的各个字段属性值都相同,那么就认为这两个对象是同一个对象。原创 2021-12-02 02:06:07 · 105 阅读 · 0 评论 -
数据库中的约束
一、约束:为了确保表中的数据的完整性(准确性、正确性),为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确,从而减少冗余数据(脏数据)。数据库完整性约束分为以下几个大类(一)、主键约束理论上来说每一个数据表都必须有一个唯一主键作为数据的唯一标识,设置主键的列不允许为空,主键习惯 id 表示,可以在创建数据时直接指定,也可以通过修改表结构直接添加,设置为主键的列在添加数据时不能重复,既唯一性。CREATE TABLE student (id int(11) NOT N原创 2021-12-02 01:59:49 · 663 阅读 · 0 评论 -
内部类
内部类普通内部类类种类,外界访问不到,有封闭性,不是必须的,可替代的局部内部类方法里面写,对外界隐藏(但是没什么用)匿名内部类new的时候先声明的类静态内部类一个类的内部出现静态类,然后使用静态类(static),return new...原创 2021-12-02 01:53:19 · 83 阅读 · 0 评论 -
接口和抽象类的异同
接口和抽象类的异同:1.接口的方法默认是 public,所有方法都是抽象方法,在接口中不能有实现(Java 8 开始接口方法可以有默认实现),抽象类可以有非抽象的方法2.接口中的实例变量默认是 final 类型的,而抽象类中则不一定3.一个类可以实现多个接口,但最多只能继承一个抽象类4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定5.接口不能用 new 实例化,但可以声明,但是必须引用一个实现该接口的对象 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为原创 2021-12-02 01:51:26 · 207 阅读 · 0 评论 -
java中的接口
1.为什么java使用接口?有时候必须从几个类当中派生出一个子类,继承他们所有的属性和方法,但是java不支持多重继承于是就有了接口2.接口的特征1.接口用interface实现2.接口中所有的成员变量都是由public static final修饰的3.接口中的所有方法默认都是public abstract修饰的4.接口没有构造方法,构造方法用于创建对象(接口没办法new对象),但是可以使用多态5.实现接口的类中,必须实现接口中的所有方法,如果不实现接口中所有的方法,那么该类是抽象类6.接原创 2021-12-02 01:50:21 · 477 阅读 · 0 评论 -
抽象类
抽象类的特点1.由abstract修饰的类叫做抽象类,也可以修饰抽象方法2.abstract修饰的抽象方法可以不在抽象类当中实现,但一定要在子类当中重写,并实现3.只有抽象类当中才能有抽象方法,普通类当中不能有抽象方法4.抽象类当中不一定全是抽象方法,也可以使用普通方法,普通方法可以不用重写5.抽象类不能被实例化,但是可以使用多态6.final 不能和abstract同时使用,final修饰的方法禁止重写, abstract修饰的方法要求重写 ,冲突7.private修饰的方法时子类不可见的, abstr原创 2021-12-02 01:48:34 · 171 阅读 · 0 评论 -
JDBC存在的问题
JDBC存在的问题我们要想研究mybatis就必须知道jdbc所存在的问题,那我那么我们首先来复习一下jdbc操作数据库的大致流程1.加载数据库驱动2.创建并获取数据库连接对象connection3.通过连接对象获取会话对象statement4.编写sql语句5.如果有参数的话需要通过PreparedStatement设置参数5.执行sql语句并获取结果6.关闭资源上述是最原始的JDBC操作数据库的方式,有以下问题:数据库连接的频繁创建、释放浪费资源进而影响系统性能sql代码写在 java原创 2021-12-02 01:46:42 · 1013 阅读 · 0 评论 -
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 阅读 · 0 评论 -
equals()方法和hashcode()直接的联系
Object类,所有类的父类一、为什么重写equals()方法一定要重写hashCode()方法1.首先解释equals方法和hashcode方法分别是用来干什么的?equals()方法:在Object类源码(如下所示)中,其底层是使用了“==”来实现,也就是说通过比较两个对象的内存地址是否相同判断是否是同一个对象。public boolean equals(Object obj) {return (this == obj);}但是在实际应用中,该方法不能满足的我们的需求。因为我们认为两个对原创 2021-11-21 04:13:03 · 493 阅读 · 0 评论 -
SpringMVC中的拦截器
SpringMVC框架中的拦截器1.拦截器的概述1.SpringMVC框架中的拦截器用于对处理器进行预处理和后处理的技术。2.可以定义拦截器链,拦截器链就是将拦截器按着一定的顺序结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按着定义的顺序执行。3.拦截器和过滤器的功能比较类似,有区别1.过滤器是Servlet规范的一部分,任何框架都可以使用过滤器技术。2.拦截器是SpringMVC框架独有的。3.过滤器配置了/*,可以拦截任何资源。4.拦截器只会对控制器(controller原创 2021-11-19 03:26:05 · 470 阅读 · 0 评论 -
Git基础
git用来干什么?不知道你学习的时候有没有遇到这样的情况:比如说,我们要做某一个程序,你手中有一份办成品,但现在需要在上面进行修改。1、你怕修改之后万一出现什么错误,把原来的文件也弄坏了;2、每当我们完成一个新的需求点之后,又来了对这个需求更好的实现方式。为了能够有及时发布我们不得不对原来的代码进行保存于是你不得不复制出一个又一个副本,随着需求点越来对多,于是每次都是复制粘贴副本,产出的文件就越来越多,文件多不是问题,问题是:随着版本数量的增多,你还记得这些版本各自都是修改了什么吗?为了能够更方原创 2021-11-18 05:40:24 · 43 阅读 · 0 评论 -
Spring的AOP技术
Spring的AOP技术-配置文件方式AOP相关的术语Joinpoint(连接点) 类里面有哪些方法可以增强这些方法称为连接点Pointcut(切入点) – 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义Advice(通知/增强)-- 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)Aspect(切面)-- 是 切入点+通知 的结合,以后咱们自己来编写和配置的基本准备工作AspectJ原创 2021-11-17 03:52:57 · 444 阅读 · 0 评论 -
什么是AOP
AOP的概述什么是AOP的技术?在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构AOP最早由AOP联盟的组织提出的,制定了一套规范.Spring将AOP思想引入到框架中,必须遵守AOP联盟的规范通过预编译方式或者运行期动态代理实现程序功能的统一维护的一种技术AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型利用AOP可以对业务逻辑的.原创 2021-11-16 19:29:35 · 468 阅读 · 0 评论 -
Spring框架的Bean管理
Spring框架的Bean管理(1).什么是Bean个管理bean管理指的是如下的两个操作1.创建对象2.注入属性(2).Bean管理操作的两种方式1.基于xml配置文件的方式实现2.基于注解方式实现(3).基于xml配置文件的方式实现Bean管理和注入属性1.基于xml方式创建对象①:这个就是我们上边配置过②:创建对象的时候,默认是执行无参构造方法完成对象2.基于xml方式注入属性依赖注入的概述IOC和DI的概念IOC:Inverse of Control,控制反转,将对象的原创 2021-11-15 03:51:22 · 430 阅读 · 0 评论 -
Spring IOC容器
什么是IOCIOC – Inverse of Control,控制反转,将对象的创建权力反转给Spring框架!在java当中一个类想要使用另一个类的方法,就必须在这个类当中创建这个类的对象,那么可能会出现如下情况,比如A类当中创建着B对象,B类当中有C对象,C类当中有A对象,这个如果一个类出了问题,那么可能会导致这个框架出现问题。Spring 将创建对象的权利给了IOC,在IOC当中创建了ABC三个对象吗,那么我们我们其他的类只需要调用集合,大大的解决了程序耦合性的问题。控制反转(Inve.原创 2021-11-14 17:18:24 · 1147 阅读 · 0 评论 -
Spring框架概述
Spring框架的概述Spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是于2003 年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EEDevelopment and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaE.原创 2021-11-14 04:31:18 · 188 阅读 · 0 评论 -
mybatis比jdbc好在哪里 1.和JBDC相比消除了JDBC大量冗余的代码,不需要手动开关连接 2.MyBatis的sql语句在xml文件里面编写,改变sql语句不再需要重新编译
mybatis比jdbc好在哪里1.和JBDC相比消除了JDBC大量冗余的代码,不需要手动开关连接2.MyBatis的sql语句在xml文件里面编写,改变sql语句不再需要重新编译原创 2021-11-09 03:24:14 · 758 阅读 · 0 评论 -
mybatis入门
MyBatis的入门步骤创建maven的项目,创建Java工程即可。引入坐标引入MyBatis的3.4.5的版本的坐标引入MySQL驱动的jar包,5.1.6版本引入Junit单元测试的jar包引入log4j的jar包,1.2.12版本(需要引入log4j.properties的配置文件) org.mybatismybatis3.4.5mysqlmysql-connector-java5.1.6junitjunit4.10l原创 2021-11-09 03:23:33 · 54 阅读 · 0 评论 -
MyBatis入门步骤
MyBatis的入门步骤创建maven的项目,创建Java工程即可。引入坐标引入MyBatis的3.4.5的版本的坐标引入MySQL驱动的jar包,5.1.6版本引入Junit单元测试的jar包引入log4j的jar包,1.2.12版本(需要引入log4j.properties的配置文件) org.mybatismybatis3.4.5mysqlmysql-connector-java5.1.6junitjunit4.10log4jlog4j1原创 2021-11-09 03:21:09 · 613 阅读 · 0 评论 -
spring
IOC:控制权反转,将创建对象交给spring框架AOP:面相切面编程,降低每个对象之间的耦合度,原创 2021-11-04 04:03:41 · 75 阅读 · 0 评论 -
多线程讲解案例分析,加锁
https://note.youdao.com/s/LLjfVZVh原创 2021-10-09 03:45:53 · 97 阅读 · 0 评论 -
类加载机制
之前在介绍JVM内存模型的时候(参看:JVM内存模型),提到了在运行时数据区之前,有个Class Loader,这个就是类加载器。用以把Class文件中的描述信息加载到内存中运行和使用。以下是《深入理解Java虚拟机第二版》对类加载器机制的定义原文:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。一般我们把类从加载到内存到卸载出内存的整个过程分为七个阶段:加载,验证,准备,解析,初始化,使用和卸载。原创 2021-09-29 01:59:50 · 61 阅读 · 0 评论 -
孤儿!黑我数据库!!!
原创 2021-09-24 21:09:33 · 44 阅读 · 0 评论 -
函数式编程
函数式编程面向对象编程:面向对象的语言,一切皆对象,如果想要调用一个函数,函数必须属于一个类或对象,然后在使用类或对象进行调用。面向对象编程会多写很多可能是重复的代码行。Runnable runnable = new Runnable() {public void run() {System.out.println(“do something…”);}};函数式编程:在某些编程语言中,如js、 c++ ,我们可以直接写一个函数,然后在需要的时候进行调用,即函数式编程。Lambda 表达式在原创 2021-09-14 02:43:31 · 99 阅读 · 0 评论