自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 后端相关知识学习记录(目录)

一:JVM

2021-03-02 10:55:49 885 1

原创 java中 Comparator接口的compare方法

我看到网上好多博客都说compare方法返回1就会交换顺序,而且我也记得我之前写的demo也是这样的,但是我今天又试验了一下,发现我返回1,但是他实际上并没有交换顺序。public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); Collections.sort(lis

2021-11-09 08:55:01 535 2

原创 水平/垂直分库分表的区别

水平分库:多个相同的数据库放在不同的服务器上。垂直分库:将一个数据库中的表,按照逻辑功能进行划分,放到不同的数据库中。实现专库专用。水平分表:表的字段不变,但是根据某种规则分成多个表,比如id为奇数的为一个表 偶数的为一个表。垂直分表:将表中的字段进行分割,把经常查询的字段放在一起,不经常查询的字段放在一起,放在不同的表中。...

2021-09-23 13:00:39 1422 1

原创 《Java EE互联网轻量级框架整合开发—SSM框架》阅读梳理 二:Mybatis(3-5章)

mybatis介绍mybaits框架不屏蔽sql,sql可以由开发人员进行编写。并且支持动态sql功能。允许根据不同条件来组装sql语句。mybatis还支持面向接口编程,只需要接口+xml或者注解就可以通过动态代理的方式创建映射器,来执行相应的操作。mybatis核心组件SqlSessionFactoryBuilder:通过创造者模式来创建SqlSessionFactory对象,他的生命周期应该仅限定在方法内,在创建SqlSessionFactory之后就应该消失了。SqlSessionFacto

2021-06-09 01:01:04 215 2

原创 《Java EE互联网轻量级框架整合开发—SSM框架》阅读梳理 合集

一:入门和技术基础

2021-06-08 13:08:43 151

原创 《Java EE互联网轻量级框架整合开发—SSM框架》阅读梳理 一:入门和技术基础

Springspring框架在java中应用十分广泛,他的成功源自于他的两项理念AOP和IOCIOC在Spring中有一个容器用来管理java中的资源即java bean对象。通过配置文件或者注解的方式来对bean对象进行描述,从而完成对bean对象的创建以及注入属性。java中的对象难免会有一些依赖关系,如果这些依赖关系交给开发人员自己来管理将会造成严重的耦合问题。如果交给Spring IOC容器来管理,rpring就可以通过对象的描述来创建对象,而不是人为的主动创建。我们也就不需要通过new来创建

2021-06-08 00:54:28 348 4

原创 从在浏览器中输入URL到接收到相应这个过程中发生了什么

1.DHCP协议:使自己获取一个ip。2.DNS协议:将域名转换成ip3.建立TCP连接3.1 IP协议:建立TCP连接需要在网络层发送数据。在广域网转发需要用到ip3.2 NAT协议:在网关处把内网ip和端口号与广域网ip做个映射3.3 ARP协议:路由器与服务器通信时,需要用到MAC地址。4.HTTP协议:web通信用到HTTP协议4.1 先发送HTTP请求4.2 服务器处理请求4.3 服务器返回HTTP相应4.4 浏览器解析HTTP相应的内容...

2021-05-14 18:50:53 78

原创 Mysql索引失效的几种情况及失效原理

使用复合索引时(聚合索引)因为Innodb引擎索引的底层使用B+Tree来实现,只有叶子节点才存储数据,而非叶子节点只存储索引,当使用复合索引时,会根据创建索引时字段的先后顺序来规定排序时的优先级。也就是说只有前面的字段相等时,后面的字段才有序。复合索引失效1.不满足最佳左前缀匹配法则且不是索引覆盖的情况。所谓索引覆盖就是指要查询的字段就是复合索引的一部分。Innodb中存在聚集索引,聚集索引的选取规则为:如果有一个主键,则这个主键就是聚集索引。如果有两个主键则,创建主键时排在前面的字段当作聚集索引

2021-04-10 20:38:10 1155

原创 Java用Jedis连接Redis 出现NOAUTH Authentication required

这是因为你的Redis设置了密码。只需要把Redis的密码加上即可Jedis jedis = new Jedis("ip", 6379);jedis.auth("密码");

2021-03-27 21:55:42 1289

原创 双锁检测实现单例模式

public class Test9 { static volatile Test9 test9; private Test9(){} static Test9 getTest9(){ //第一次检测 if(test9 == null){ //加锁 synchronized (Test9.class){ //第二次检测 if(test9 ==

2021-03-22 20:54:12 305

原创 Java 两个Integer对象的==判断时由于自动装箱而出现的奇怪问题

Integer是int的包装类,既然是类,Integer类型的变量进行==比较的时候就是判断两个对象引用的地址是否相同了。因此下列代码的返回值为falsepublic static void main(String[] args) { Integer i1 = new Integer(1); Integer i2 = new Integer(1); System.out.println(i1 == i2);//false }这个比较好理解,因为

2021-03-21 17:39:50 208 3

原创 《深入理解Java虚拟机》阅读笔记 第八章 虚拟机字节码执行引擎

点击查看《深入理解Java虚拟机》阅读梳理合集

2021-03-21 15:32:47 134 2

原创 Java中Math.round() Math.floor() Math.ceil()方法的区别

Math.rount()方法,即对传入的float或者double数据进行四舍五入操作,具体的执行过程是,先将传入的参数+0.5,然后向下取整。Math.floor()方法,向下取整。即返回小于等于参数的最大整数Math.ceil()方法,向上取整。即返回大于等于参数的最小整数。public static void main(String[] args) { System.out.println("Math.round()方法 四舍五入"); System.out.p

2021-03-21 13:47:28 144

原创 《深入理解Java虚拟机》阅读笔记 第七章 虚拟机类加载机制

点击查看《深入理解Java虚拟机》阅读梳理合集类加载的时机其中解析可能在初始化之后再进行。这是为了支持java语言的运行时绑定特性(也叫动态绑定或晚期绑定)。有且只有下列六种情况下,必须立刻对对象进行初始化(当然,加载 验证 准备已经完成了)一:遇到new getstatic putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。能够生成这四条指令的典型java代码有1.使用new关键字实例化对象的时候2.读取或设置一个类型的静态变量

2021-03-20 17:31:15 107 2

原创 《深入理解Java虚拟机》阅读笔记 第六章 类文件结构

常量池常量池中主要存放两大类常量:字面量和符号引用。字面量比较接近于java语言层面的常量概念,如文本字符串、被声明为final的常量值等。而符号引用则属于编译原理方面的概念,主要包括下面几类常量1.被模块到处或者开放的包2.类和接口的全限定名3.字段的名称和描述符4.方法的名称和描述符5.方法句柄和棒法类型6.动态调用点和动态常量java代码在编译的时候没有连接过程,而是在虚拟机加载class文件的时候进行动态连接,也就是说class文件中不会保存各个方法,字段在内存中的布局信息。他们的

2021-03-19 13:22:55 76

原创 《深入理解Java虚拟机》阅读笔记 第三章 垃圾收集器与与内存分配策略

点击查看《深入理解Java虚拟机》阅读梳理合集概述垃圾收集(GC)不是Java所独创的也不是java最先提出来的。但却是由java发扬光大的。GC可以让程序员不用过多的关注于垃圾回收,而将更多的精力用在研发上。在大多数情况下,我们都不必关心GC,但如果GC成为了系统达到更高并发量的瓶颈时,我们就要对GC这个自动化的技术做一定的监控和调节。在JVM中,程序计数器 虚拟机栈 本地方法站,随着类结构的确定,其大小也就基本确定。因此当线程销毁时,这几个部分的内存也就自然而然的被回收。但是方法区和堆则有很多不

2021-03-18 21:21:45 134

原创 Java 反射与注解

注解简介1.注解和注释有点像,都是对程序的解释2.注解可以被编译器读取3.注解可以在类上,变量上,函数上 包上 参数上 甚至是其他注解 等4.注解具有检查和约束等功能内置注解常见的内置注解@Override指示方法声明旨在覆盖超类型中的方法声明。 如果使用此注释类型注释方法,则编译器需要生成错误消息,除非至少满足下列条件之一:该方法会覆盖或实现在超类型中声明的方法。该方法的签名覆盖等效于Object中声明的任何公共方法的签名 。例子@Overridepublic String t

2021-03-15 20:24:05 98 1

原创 Java IO流 笔记合集

Java IO流 上Java IO流 下点击查看其他资料合集

2021-03-14 20:27:23 127

原创 Java IO流 下 (黑马java基础 学习笔记)

字节流一切数据文件(文本 视频 图片)都是以二进制数字的形式存储的,都是一个个的字节,在传输时也是如此。因此字节流可以传输一切数据。在操作流时,无论是什么流对象,实际上底层传输的都是二进制数据。OutputStreamOutputStream是所有字节输出流的父类,他有5个成员方法。他是一个抽象类,因此使用时应该创建他的子类FileOutputStream向文件中写入数据class FileOutputStream extends OutputStream构造方法常用的写入方法关闭

2021-03-14 20:25:29 145

原创 Java IO流 上 (B站孙探老师教程学习笔记 )

在Java中文件/文件夹就是对象,认为文件夹是一个特殊的文件File类构造器 public File(String pathname);//输入文件路径 public File(String parent, String child);//父目录和子文件 public File(File parent, String child);//文件夹对象,和子文件常用方法–创建功能//创建文件,需要目录存在,若不存在将会报错。如果创建成功则返回true,如果创建失败则返回false(文件已经存在)

2021-03-14 14:23:19 191 3

原创 《深入浅出Mysql》阅读梳理 合集

一二三四五点击查看其他资料合集

2021-03-09 18:18:33 133

原创 《深入浅出Mysql》阅读梳理 五

优化SQL第一步通过show status 命令了解更重SQL语句的执行频率第二步定位执行效率较低的SQL语句方法1:通过慢查询日志定位那些执行效率较低的SQL语句。将slow-query-log参数设置为1之后,MySQL会将所有执行时间超过阈值的SQL,写入slow_quert_log_file参数所指定的文件中...

2021-03-09 18:15:08 148 1

原创 《深入浅出Mysql》阅读梳理 四

事务控制开启事务:start transaction回滚到事务开始的地方:RollBack添加保存点:SavePoint point1 (同名保存点,后创建的会覆盖先创建的。删除保存点: release SavePoint point1 )回滚到保存点:RollBack To point1提交事务:Commitcommit and chain:提交事务后,马上开启一个新事务commit release 或者commit work :提交事务后断开与客户端的连接。MySQL分区分区有利于管理

2021-03-06 22:04:09 251 1

原创 《深入浅出Mysql》阅读梳理 三

索引索引用于快速找出在某个列中有某个个特定值的行。如果不适用索引,mysql必须从第一条数据开始然后读完整个表直到找出相关行。表越大,花费的时间也就越长。但是索引也不是越多越好,要尽量用条件列作为索引。这样可以最大限度地提高sql的执行效率。并且要尽量使用唯一列作为索引。例如,如果用性别作为索引的话,结果只有男/女,对查询的帮助不大,反而会增大磁盘空间的消耗。当用字符串作为索引时,一定要指定一个长度,否则如果字符串过长的话,将会浪费大量的磁盘空间。InnoDB和 MyISAM默认船舰的都是BTREE索

2021-03-06 15:35:22 105 1

原创 《深入浅出Mysql》阅读梳理 二

存储引擎介绍MyISAMM有LSAM是mysql5.5之前的默认存储引擎。他既不支持事务,也不支持外键。每个MyISAM在磁盘上存储成三个文件 .frm .MYD .MYI (存储表定义,存储数据,存储索引)数据文件和索引文件可以放在不用的目录。MyISAM的表支持3种不同的存储格式。分别为,静态标:静态表是默认的存储格式,其中的字段都是定长的。这样管理起来会更方便,因此存储速度也会更快,更容易缓存。但可能浪费更多的空间。同时当表遇到损坏时恢复起来也更容易。动态表:其中的字段是变长的。更节约存储

2021-03-05 19:49:57 100 1

原创 《深入浅出Mysql》阅读梳理 一

Mysql的数据类型数值类型其中DEC(M,D)中的M的意思为最多显示M位数字(整数位和小数位),D的意思为小数位。int(5)代表int的宽度为5.(默认为11)。只有与zerofill搭配使用时才有意义(左补0)当加了zerofill时,将把当前数据类型调整为无符号类型。当超出宽度时,按照正常情况显示(和c语言的%3d类似)。bit(x)x代表字节数(1-8)当x=1时,bit可以表示0和1。插入数据时输入十进制数即可,因为会被自动转换成2进制。要查看bit类型数据时需要调用函数bin(字段

2021-03-04 19:08:20 111 2

原创 《计算机网络自顶向下方法》阅读梳理 合集

第一章 计算机网络和因特网点击查看其他资料合集

2021-03-02 11:43:54 196

原创 《深入理解Java虚拟机》阅读梳理 合集

第二章Java内存区域与内存溢出异常

2021-03-02 11:40:04 132

原创 Java集合类整理合集

Java集合类HashMap源码分析(JDK1.7)Java集合类HashTable与HashMap的区别——源码分析Java集合类HashMap源码分析(JDK1.8)查看更多资源合集

2021-03-02 11:33:04 142

原创 《Tomcat与Java Web开发技术详解》阅读梳理 合集

第一章 Web运作原理探析第三章 第一个Java Web应用第四章Servlet技术(上)第五章 Servlet技术(下)第八章 访问数据库第九章 HTTP会话的使用与管理第二十章 过滤器点击查看其他资料合集

2021-03-02 11:17:00 862

原创 《MyBatis 技术内幕》阅读梳理合集

第一章 MyBatis快速入门第二章 基础支持层

2021-03-02 10:58:21 191

原创 尚硅谷2020最新版宋红康JVM教程学习笔记合集

一 类加载子系统二 运行时数据区三 堆四 方法区五 执行引擎六 垃圾回收算法七 引用八 垃圾回收器

2021-03-01 11:44:00 2174

原创 偏向锁、轻量级锁、重量级锁的介绍

三种锁的特点偏向锁偏向锁适用于只有一个线程访问同步块的情况。偏向锁只有出现竞争条件时才会释放锁。并且撤销锁的时候需要等到全局安全点(这个时间点没有正在执行的字节码)。通过对对象头的修改从而把锁的状态改成无锁状态或者标记成不适合使用偏向锁。然后唤醒想要竞争锁的线程。轻量级锁轻量级锁会在同步代码块结束后释放锁。如果出现多线程竞争锁的情况,会通过自旋的方式来循环请求获取锁。如果获取锁失败,则会膨胀成重量级锁。因为自旋会消耗CPU这样会浪费一定的资源。但是响应速度大大提高。重量级锁出现线程竞争时不采用自

2020-12-29 21:35:46 279 1

原创 Java并发编程之关键字volatile的使用

volatile关键字的作用1.可以保证不同线程间volatile变量的一致性。但是不能保证原子操作。2.可以禁止指令重排。一致性cpu会将经常使用的值加入到缓存中从而加快读取速度。每次修改变量的值时,首先会在缓存中完成修改,此时内存中的值还没有改变。(至于什么时候写回内存则不确定(会在合适的时候)这样就会出现并发问题)。用volatile修饰的变量会在值改变后,立即修改内存中的值。从而保证不同线程间volatile值的一致性。例子用volatile修饰public class Test1 {

2020-12-28 23:11:57 83

原创 Java多线程基础

创建多线程的方法方式一继承Thread类重写run方法public class Test5 { public static void main(String[] args) { MyThread t1 = new MyThread(); //修改线程名字 t1.setName("线程名字"); t1.start(); }}class MyThread extends Thread{ @Override

2020-12-27 19:03:34 155

原创 《MyBatis 技术内幕》阅读梳理 第二章 基础支持层

解析器模块在Mybatis中涉及多个XML配置文件,常见的XML解析方式有三种DOM(Document Object Model) SAX、StAX。Mybatis使用的是DOM。DOM是基于树形结构的解析方式,他会将整个XML文件读入内存,并构建一个DOM树,基于这棵树形结构对各个节点进行操作。节点分为元素节点、属性节点、文本节点。XPath是与DOM解析方式配合使用的语言。XPath之于DOM就相当于SQL相当于数据库。通过XPath可以查询XML文档。反射模块Mybatis中进行参数处理,以及

2020-12-21 19:33:30 100 1

原创 《MyBatis 技术内幕》阅读梳理 第一章 MyBatis快速入门

Mybatis 整体架构分为三层,分别是基础支持层、核心处理层、接口层基础支持层(第二章)基础支持层包含整个MyBatis的基础模块。反射模块该模块对java原生的反射进行了良好的封装,提供了更加简洁的API,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。类型转换模块MyBatis为简化配置文件所提供的别名机制,是该模块的功能之一。另一个功能是实现JDBC与Java类型之间的转换,该功能会在为SQL语句绑定参数和映射查询结果级时用到。日志模块提供详细的日志输出

2020-12-16 22:16:37 184

原创 尚硅谷2020最新版宋红康JVM教程学习笔记 八 垃圾回收器

垃圾回收器分类如果按照线程数分,可以分为串行垃圾回收器和并行垃圾回收器串行回收器同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束适用场景:单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场景,串行回收器的性能表现可以超过并行回收器和并发回收器。所以串行回收默认被应用在客户端的Client模式下的JVM中。(在并发能力比较强的CPU上,并行回收器产生的停顿时间要短于串行回收器)并行垃圾回收器和串行回收器享范,并行收集可以运用多个CPU同时执行垃

2020-12-14 20:05:50 445

原创 尚硅谷2020最新版宋红康JVM教程学习笔记 七

System.gc()1.默认情况下,通过System.gc()或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。2.System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(提醒JVM的垃圾回收器执行GC但是不一定会执行)3.JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无需手动触发,否则就太过于麻烦了。在一些特殊情况下,如

2020-12-12 21:27:04 607

原创 尚硅谷2020最新版宋红康JVM教程学习笔记 六 垃圾回收算法

什么是垃圾运行程序中没有任何指针指向的对象就是垃圾。如果不进行垃圾回收,内存迟早都会被消耗完。除了释放没用的对象,垃圾回收也可以清楚内存里的内存碎片。碎片整理将所占用的堆内存移到堆的一端,以便JVM将整理出的内存分配给新的对象。随着应用程序所应付的业务越来越庞大,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以需要不断地对GC进行优化。自动内存管理无需开发人员手动参与内存的分配与回收,这样降低内存泄露和内存溢出的风险。自动内存管理机制,将程序员从繁重的内存管理中释

2020-12-12 15:46:32 365

空空如也

空空如也

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

TA关注的人

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