- 博客(48)
- 收藏
- 关注
原创 PostgreSql索引相关知识总结
采样统计的时候,InnoDB 默认会选择 N 个数据页,统计这些页面上的不同值,得到一个平均值,然后乘以这个索引的页面数,就得到了这个索引的基数。上图所示 我们查到了根块的枝块指向 . 该节点中每行的孩子节点中的 data 为16进制码 , 表示索引中数据的最小值 (比如我们这里的索引是靠 userpool_id 键排序的) , 转换成10进制就可以看出来 , 他是从小到大的排序。图中可以看出 , 叶子结点有指针 , 说明是 b+tree , 但是叶子结点储存的是什么呢 , 是数据还是物理地址?......
2022-08-09 23:52:10
1264
翻译 JAVA几种IO方法的性能体现/对比,信息来自SCI期刊文章
TIPS:此篇文章信息来源于:CONCURRENCY AND COMPUTATION: PRACTICE AND EXPERIENCE期刊杂志作者:Dan Bonachea, Phillip Dickens and Rajeev ThakurSci-Hub | High-performance file I/O in Java: Existing approaches and bulk I/O extensions. Concurrency and Computation: Practice a
2022-03-20 19:34:13
655
原创 为什么反射会很慢(和正常的实例化对象相比)
当你去正常的实例化一个对象的时候,和你反射出一个对象的时候,你会发现,后者比前者要慢很多很多.这是为什么呢?有外国网友在反射的性能上做了一个简单的测试,C#版本反射的性能测试原代码链接:Tests performance of Reflection · GitHub用反射做的基本事情做了一些性能测试这些测试案例是:- 创建一个对象- 调用一个有两个参数的方法- 设置一个对象的4个属性他实现了有反射和无反射的每个测试案例,这样我就可以比较结果。在测试中,使用了Obje..
2022-02-17 22:36:59
1945
原创 如果一个父类定义了一个无参数的构造函数,是否有必要调用super()?
Is it necessary to call super() if a Parent class defines a no-argument constructor?在任何条件下,构造函数的第一行都必须是对父类构造函数的调用。也就是说,每次你创建一个子类的实例之前,都会在内存中创建一个父类的新实例。默认构造函数 - 是一个无参数的构造函数,如果类没有提供任何构造函数,编译器会自动生成。默认构造函数和你可以自己添加到类中的无参数构造函数之间没有任何区别。如果一个父类有一个无参数的构造函数(不管它是
2022-02-15 22:28:40
632
原创 MySQL Connectors组件8.0.12及之前版本的Connector/J子组件存在安全漏洞及其相关性分析
MySQL Connectors组件8.0.12及之前版本的Connector/J子组件存在安全漏洞及其相关性分析
2022-02-13 23:08:17
6016
原创 为什么我们重写equals方法时也要重写hashcode?
Why do I need to override the equals and hashCode methods in Java?这个问题国内讨论出的答案各式各样,于是我去Stackoverflow中查看了一下这个问题的解国外对于override the equals and hashCode的解释更多的是contract(合同,契约的意思),也就是说,重写equals必须重写hashcode已经达成了一种契约(或者说是定理?)本篇文章来自于对该评论的解析Why do I
2022-02-13 17:26:47
670
原创 JVM调优之使用JProfiler工具分析java堆内存溢出OOM原因
JProfiler分析结果展示配置首先我们在IDEA安装JProfiler插件之后下载JProfiler的软件(有破解版,自行上网搜即可)然后在IDEA的设置里面找到Tools的JProfiler,设置文件目录对应到exe文件,与你刚安装的软件的目录一致配置好之后,开始调试我们先输入一下代码,设置一个ArrayList,无限制往里面添加大对象public class Hellow { Byte[] arr = new Byte[1 * 1024
2022-02-07 18:05:19
1928
原创 Java小白手撕LRU算法,竟讲的这么通透.
什么是LRULRU全称是Least Recently Used,即最近最久未使用的意思LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰图示映射关系增删改代码问题解释我们基本实现原理是通过Hashmap+双链表(Entry)实现的.为什么用hashmap+双链表,而不是单独的双链表? 原因:用hashmap找双链表比较快,..
2022-01-28 16:43:17
1481
原创 final的几个注意点讲解(作者亲测)
首先我们测试final对非静态变量和方法的影响有final的情况下:public class FinalTest { final int a = 1; final String s = "sss"; final void haha() { System.out.println("haha"); System.out.println(a); } public static void main(String[] args) {
2022-01-20 19:45:20
563
原创 基于JDK1.8源码讲解Integer128陷阱
什么是128陷阱?以下代码i==i1输出true,说明i和i1的对象地址相同f==f1输出false,说明f和f1对象地址不相同public class Test { public static void main(String[] args) { Integer i=127; Integer i1 = 127; System.out.println(i == i1);//输出true Integer f = 128;
2022-01-20 18:05:19
248
原创 如何从零用Java构建一个简单HashMap
类里面有一个静态类<泛型>,静态类<泛型>的变量为hash值,key和value,还有下一个节点的地址.还有一个初始容量池为16的Entry[]数组,里面主要装Entry.还有构造函数,赋值hash,key,value用的.还有set()和get()方法,setHashCode(),toString()方法.这几个方法的作用:setHashCode(K key)方法里:通过key计算散列值set(K key, V value)方法里:我们需要使用s..
2022-01-17 01:15:52
1357
原创 Redis的基本介绍和八大类型和事务讲解
RedisRedis是单线程的Redis是很快的,官网表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了.Redis是C语言写的,官方提供的数据为100000+的QPS,完全不比同样是使用key-value的Memecache差Redis为什么单线程还这么快? 无趣1:高性能的服务器不一定是多线程的 误区2:多线程(CPU上下文会切换!),一定比单线程效率高! 先去CPU>
2022-01-14 16:38:10
407
原创 String,StringBuffer,StringBuilder的区别以及源码分析
String,StringBuffer,StringBuilder大体区别String是final修饰的,不可变的,每次操作都会产生新的String对象StringBuffer和StringBuilder都是在原对象上操作StringBuffer是线程安全的,StringBuilder线程不安全的StringBuffer方法都是synchronized修饰的性能:StringBuilder>StringBuffer>String应用场景:经常需要改变字符串内容
2022-01-04 16:48:34
432
原创 基于JDK1.8源码讲解ArrayList扩容机制
现在有两组ArrayList,分别是list1和list2 List list1 = new ArrayList(); list1.add(1); list1.add(14); List list2 = new ArrayList(list1);先说list1的情况,我们点进ArrayList查看ArrayList构造器(无参),如下会构造一个默认容量为10的ArrayList[],即Object[],此时的size为0(如..
2022-01-01 15:23:23
561
原创 基于SpringBoot的SSO单点的登录配置
可以先参考:XXL-SSO官方使用手册实在不会的再参考本篇文章源码地址:第二个集中项目: 老王的项目首先我们在所需要的两个(及以上)的项目pom.xml文件中引入依赖 <!--SSO核心--> <!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-sso-core --> <dependency> <groupId
2021-12-26 17:22:05
1418
原创 用前端实现圣诞树以及前端开发部分知识的讲解
圣诞树源码粗讲:用前端实现圣诞树以及前端开发部分知识的讲解效果展示:圣诞树源码<!DOCTYPE HEML PUBLIC><html><head> <meta charset="utf-8"> <style> html, body { width: 100%; height: 100%; marg.
2021-12-16 22:30:08
1262
转载 Git命令操作之rebase
rebase假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。$ git checkout -b mywork origin现在我们在这个分支做一些修改,然后生成两个提交(commit).$ vi file.txt$ git commit$ vi otherfile.txt$ git commit...但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"
2021-12-15 18:05:59
2133
原创 权限AOP(AuthorityAop)实现RBAC方法各角色权限访问
源码地址:四组项目: 青城博雅四组视频讲解:基于SpringBoot的权限字符串和AOP注解拦截验证权限字符串以及布隆过滤器的使用问题_哔哩哔哩_bilibili首先写注解package com.fourthgroup.schoolmanagementsystem.annonation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.a
2021-12-15 16:55:57
1405
原创 关于debug调试在Controller中形参PageWeb<T>(即分页封装泛型)的pageNum,pageSize赋值问题
问题:控制台显示我们查出来值了,但是最终返回的是数据是null问题原因:PageWeb的pageNum和pageSize的值受前端值传递影响,pageNum,totalSize受mybatisPlus的page方法影响,从而造成数据显示不出来Controller类中代码@Slf4j@RestController@RequestMapping("notice")public class NoticeController { @Resource private.
2021-12-15 16:09:14
1588
原创 Java面试题:final修饰的成员变量、类变量和对象,有几种初始化方式
final修饰的对象初始化时分两种情况:第一种:修饰成员变量时有3种初始化方式:1,在定义变量时直接赋值 2,声明完变量后在构造方法中为其赋值 3,声明完变量后在构造代码块中为其赋值第二种:修饰类对象(静态对象)1,在定义类变量时直接赋值 2,在静态代码块中赋值下面我们建立一个例子看看详细情况:public class TestFinal {// 一、使用Final修饰符修饰的类的特点:该类不能有子类;//// 二、使用Final修饰符修饰的对象的特点:
2021-12-11 20:32:20
1018
原创 多线程的悲观锁和乐观锁问题
进程:进行资源分配的最小单位线程之间谁也不会等谁.谁先抢到cpu谁就先进行计算时间片轮转算法:cpu分配给每一个线程他所能执行的时间.写入内存需要占总线64bit多线程代码package wangyi0820;//z主方法public class MultiDemo { public static void main(String[] args) { ThreadNew tn1 = new ThreadNew(1); Threa...
2021-12-11 16:41:46
395
原创 JVM结构和JVM的架构模型以及JAVA生命周期介绍
JVM结构多线程共享:堆heap和方法区每线程独有一份:java栈,本地方法栈,程序计数器JVM的架构模型java编译器输入的指令流基本上是一种基于栈的指令集架构栈架构特点: 在内存层面,不需要硬件支持,可移植性更好,更好的实现跨平台 避开了寄存器的分配难题,使用零地址方式分配(每次取栈的最上层,就不需要地址) 指令集小,指令多,执行不如寄存器 另一种是指令集架构则是基于寄存器的指令集架构寄存器架构特点:(传统PC以及Android的dalv..
2021-12-10 21:37:48
128
原创 跳表:Skiplist原理介绍和优缺点
skiplist介绍 不要求上下相邻两层链表之间的节点个数有严格的对应关系,而是为每个节点随机出一个层数(level)。比如,一个节点随机出的层数是3,那么就把它链入到第1层到第3层这三层链表中。为了表达清楚,下图展示了如何通过一步步的插入操作从而形成一个skiplist的过程: 如果我们查找23 skiplist的算法性能分析skiplist每次插入都是独立的,根据以下算法(因为random()的随机生成)执行插入操作时计算随机数的过程,是一个很关键的过程,它对s
2021-12-10 21:29:43
4326
原创 Java队列方法判断是否为完全二叉树
二叉树的种类:完美二叉树 Perfect Binary Tree Every node except the leaf nodes have two children and every level (last level too) is completely filled. 除了叶子结点之外的每一个结点都有两个孩子,每一层(当然包含最后一层)都被完全填充。 完全二叉树 Complete Binary Tree Every level except the last leve
2021-12-10 21:27:58
557
原创 关于二叉树的前中后序遍历的一种简单遍历方法
视频链接:关于二叉树的前中后序遍历的一种简单遍历方法_哔哩哔哩_bilibili我们从根节点开始遍历,往左,直到null,然后返回,继续向右,直到null,然后返回,每次都记录值,如下图左边值.那么,前序则为每个数第一次出现的顺序;中序为每个数第二次出现的顺序,后序为每个数第三次出现的顺序....
2021-12-07 15:45:35
329
原创 两链表相交节点问题:两个链表都无环,返回第一个相交节点,如果不相交,返回null(力扣160题)
问题解决思路:计算出两个链表的长度差n,然后让长链表走n步,然后两个链表共同走,当两个链表相同的时候,返回链表public ListNode noloop(ListNode head1, ListNode head2) { if (head1 == null || head2 == null) { return null; } int n = 0;//长度差 ListNode cur1 = head1...
2021-12-07 15:07:01
273
原创 锁表:MyISAM非聚集索引和InnoDB聚集索引的各种锁表问题
参考文献Mysql数据库中的各种锁_张花生的博客-优快云博客_数据库锁面试官:MySQL死锁有哪些场景?如何避免?概述相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。一.导致锁表的原因 锁表发生在insert,update,delete中 锁表的原理是数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite或者回滚或者退出数据库用户 锁表的原因: 第一.A程序执行了对t
2021-12-04 16:42:39
1011
原创 利用JAVA构造一棵哈夫曼树
哈夫曼树原理:步骤: 统计每个字符出现的次数,放入集合中 每次选出次数最低的两个字符,从集合中取出来合并成一个,重新放入 重复步骤直到合并为一个,就是哈夫曼树 设置哈夫曼树的左右边对应0,1 遍历到叶子结点,路径就是哈夫曼编码 代码:import java.util.HashMap;import java.util.PriorityQueue;import java.util.Queue;import java.util.
2021-12-02 19:11:20
774
原创 两种索引:MyISAM(非聚集索引)和InnoDB(聚集索引)的介绍
索引:索引是帮助Mysql高效获取数据的排好序的数据结构 索引的数据结构 二叉树(早期Mysql用这个) 红黑树(早期Mysql用这个) Hash表 B-Tree B+Tree(B-Tree的变种)(现在在用) =========================================B+Tree B+Tree(在内存查找,和磁盘做一次IO交互) 非叶子节点不存储data,只..
2021-12-01 16:55:24
1790
转载 Redis为什么用跳表而不用平衡树?
本文是《Redis内部数据结构详解》系列的第六篇。在本文中,我们围绕一个Redis的内部数据结构——skiplist展开讨论。(注:后台发送Redis可以获得全部Redis系列文章)Redis里面使用skiplist是为了实现sorted set这种对外的数据结构。sorted set提供的操作非常丰富,可以满足非常多的应用场景。这也意味着,sorted set相对来说实现比较复杂。同时,skiplist这种数据结构对于很多人来说都比较陌生,因为大部分学校里的算法课都没有对这种数据结构进行过详细的介绍。
2021-12-01 16:15:32
469
转载 简单名、全限定名、描述符、签名、符号引用、直接引用的不同
1.简单名称(Simple Name)没有类型和参数修饰的方法或字段名称例如inc方法和字段name2.全限定名(Fully Qualified Name)一个类的全限定名是将类全名的.全部替换为/例如com/itheima/dao/IUserDao.xml3.描述符(Descriptor)A descriptor is a string representing the type of a field or method.4.签名(Signatures)Java代码层面的方法特征签
2021-11-18 17:06:45
1626
原创 java类的生命周期
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建初始类,(initial class)来完成的,这个类是由虚拟机的具体实现指定的类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识类的加载过程:Loading,Linking,InitializationLoading加载: 通过一个类的全限定名获取定义此类的二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 ..
2021-11-09 10:18:43
141
原创 MyBatis-Plus配置以及使用案例
数据库配置/* Navicat Premium Data Transfer Source Server : 本地 Source Server Type : MySQL Source Server Version : 50649 Source Host : localhost:3306 Source Schema : qcby1030 Target Server Type : MySQL Target Server Ve
2021-11-08 14:30:22
1449
原创 SpringBoot配置以及SSM连接
1.选择Spring Initializr2.勾选Spring Web;Spring Boot选择2.4.123,添加依赖<!--version改成2.1.3.RELEASE--><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-pare...
2021-11-03 17:09:04
163
原创 sql语句单表查询以及多表查询
sql语句 SELECT * FROM student; SELECT NAME FROM student; SELECT name,sex,age FROM student; #条件查询 #WHERE后面跟的是条件查询的条件 #and 和 多条条件语句的合并 #or 或 SELECT * FROM student WHERE sex='男'; SELECT * FROM student WHERE sex='男' and age=20; SELECT * FROM student WHERE sex
2021-11-03 17:03:22
1086
原创 java-堆,栈,类和对象,方法
栈(Stack):也被称为虚拟机栈,用来存放在方法执行时的变量。其中包括了变量的句柄(变量名)和变量的值。引用类型的值放的是地址值。并且栈中的变量会在方法结束后消亡.堆(Heap):通过new创建出来的对象都放在堆空间中,还包括像数组集合等这些都存在堆中,堆空间的每一个地址都是唯一的,栈中句柄引用堆的地址值,所以如果一个地址被多个句柄引用,其中一方改变会影响其他正在使用的句柄。堆中的内存通过GC来回收.常量池:常量是不可变的变量,直接赋值的String变量的值就存储在常量池中,Strin
2021-07-30 23:12:29
446
转载 如何安装apache和卸载apache(转载)
一、检查服务器上是否已经安装了apacherpm -qa httpd 如上图是没有安装的,查询的时候没有显示其它的信息。二、yum命令进行安装 yum install httpd -y再次运行rpm -qa httpd就有信息显示了,证明已经安装完成了四、将apache注册为linux服务centos7使用如下命令systemctl start httpd 启动systemctl restart httpd 重新启动systemctl sto
2021-07-16 11:30:58
2335
原创 动态NodeList和静态NodeList的区别/getElemensByTagName和querySelectorAll的区别
在一些情况下,NodeList是动态的,即文档中一些节点发生了变化,这个NodeList也会发生变化,例如document.getElementsByTagName()等函数获取的NodeList在某些情况下,NodeList是静态的,即文档中一些节点发生了变化,这个NodeList不会发生变化,例如document.querySelectorAll()等函数获取的NodeList在网页中插入js代码动态NodeList时var divs = document.getElementsB
2021-07-15 20:50:56
274
原创 JS:for循环下onclick点击事件的i值捕捉问题
HTML部分代码<divclass="tab_box"><ulclass="tab_tit"><liclass="current">tab1</li><li>tab2</li><li>tab3</li><li>tab4</li>...
2021-07-14 18:38:31
959
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅