自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jvm不同版本(jdk6、jdk7、jdk8)之间的class常量池、运行时常量池、字符串常量池与堆、方法区的种种关系

问:传说中的R大出现了,再问一下StringTable本身又存在哪里呢,有人说是方法区,又有人说是native memory?答:HotSpot VM的StringTable的本体在native memory里。

2022-09-01 03:28:20 231 2

转载 springboot+shiro+jwt+redis+cache实现无状态token登录(完美好文章!!)

转载自:https://blog.csdn.net/stilll123456/article/details/88370355原文原博主已重新整理到如下个人博客:SpringBoot整合shiro+jwt+redis - 无状态token登录(一)总览篇SpringBoot整合shiro+jwt+redis - 无状态token登录(二)授权篇SpringBoot整合shiro+jwt+redis - 无状态token登录(三)鉴权篇~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2021-04-19 11:23:12 1069

转载 SpringBoot Security 实例DEMO(好框架就用这个了!!)

原文格式清晰,转载自:https://www.cnblogs.com/cjsblog/p/9152455.html如图,是一种通用的用户权限模型。一般情况下会有5张表,分别是:用户表,角色表,权限表,用户角色关系表,角色权限对应表。一般,资源分配时是基于角色的(即,资源访问权限赋给角色,用户通过角色进而拥有权限);而访问资源的时候是基于资源权限去进行授权判断的。Spring ...

2019-08-05 21:38:11 675

原创 【原创】spring data jpa在mysql分页中的实例(一次访问同时获取数据和总数)

mysql中语句如下selectlimit 0,10;

2022-11-16 18:42:13 251

转载 GIT Proxy 一键设置代理 让你的 git clone Github 再也不像百度云一样内行

这几天 git clone Github 是真的爆炸啊,永远都是 10kb/s 左右,也不是私有仓库啊?百度云都要直呼内行了。由于我用的是 ssh 方式拉取代码的,于是乎终端 http proxy 也只能起到玄学(心理自我安慰)作用了。到底如何设置 ssh 协议的 proxy 呢?分辨需要设置的代理。

2022-11-15 17:07:17 91

转载 关于springboot测试用例SpringBootTest的一点小结

spring-boot-starter-test 2.4 之后,仅集成Junit5而且spring-boot-starter-test 2.1开始,只需要@SpringBootTest一个标签即可。

2022-11-09 12:35:59 31

转载 SSL中,公钥、私钥、证书(pem、crt、cer、key、csr)的后缀名都是些啥?

今天做这么一个事,centos服务器,tomcat8+nginx1.6,现在要在上面运行cas4.0。所以需要配ssl,然后找教程,了解到,需要把tomcat和nginx的ssl都配置好。到这里就晕了,tomcat配ssl需要一个.keystore文件,nginx则需要配一个.crt和一个.key的文件。按照教程使用keytool生成了.keystore文件,然后我需要通过.keystore导出一个.crt文件,但是找了好多教程只是导出.cer文件。

2022-10-21 12:46:06 629

转载 mysql没有for循环语句(使用while替代)

while i < 10 do #结束循环的条件: 当i大于10时跳出while循环。if i > 10 then #结束循环的条件: 当i大于10时跳出loop循环。create procedure test() #创建无参存储过程,名称为test。create procedure test() #创建无参存储过程,名称为test。#往test表添加数据。

2022-09-21 22:00:08 221

原创 mysql自己update更新自己(根据本表字段更新本表)

【代码】mysql自己更新自己(根据本表字段更新本表)

2022-09-19 21:55:01 252

转载 @Scheduled(cron=““) spring定时任务时间设置

一个cron表达式有至少(也可能7个)有空格分隔的时间元素。按顺序依次为秒(0~59)分钟(0~59)小时(0~23)天(月)(0~31,但是你需要考虑你月的天数)月(0~11)天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)年份(1970-2099)其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。注意:由于""和""这两个元素互斥的,

2022-09-16 11:11:11 423

转载 volatile内存可见性

内存可见性是指当一个线程修改了某个变量的值,其它线程总是能知道这个变量变化。也就是说,如果线程 A 修改了共享变量 V 的值,那么线程 B 在使用 V 的值时,能立即读到 V 的最新值。我们如何保证多线程下共享变量的可见性呢?也就是当一个线程修改了某个值后,对其他线程是可见的。加锁volatile因为当一个线程进入 synchronizer 代码块后,线程获取到锁,会清空本地内存,然后从主内存中拷贝共享变量的最新值到本地内存作为副本,执行代码,又将修改后的副本值刷新到主内存中,最后线程释放锁。

2022-09-13 17:21:24 38

转载 Python为什么要使用虚拟环境-Python虚拟环境的安装和配置-virtualenv

在实际项目开发中,我们通常会根据自己的需求去下载各种相应的框架库,如Scrapy、Beautiful Soup等,但是可能每个项目使用的框架库并不一样,或使用框架的版本不一样,这样需要我们根据需求不断的更新或卸载相应的库。直接怼我们的Python环境操作会让我们的开发环境和项目造成很多不必要的麻烦,管理也相当混乱。如一下场景:场景1:项目A需要某个框架1.0版本,项目B需要这个库的2.0版本。

2022-09-13 01:49:57 229

原创 创建MySQL只读权限用户

,此处表示所有数据库皆可被读取到。另外,指定只读某个数据库方式,例如。

2022-09-06 11:04:27 153

转载 java三种类加载方式

常见的三种类加载方式如下:new

2022-09-03 13:00:51 349

转载 Java new一个对象的过程中发生了什么:类加载过程、创建对象过程

需要注意的是,每个子类对象持有父类对象的引用,可在内部通过super关键字来调用父类对象,但在外部不可访问补充:通过实例引用调用实例方法的时候,先从方法区中对象的实际类型信息找,找不到的话再去父类类型信息中找。如果继承的层次比较深,要调用的方法位于比较上层的父类,则调用的效率是比较低的,因为每次调用都要经过很多次查找。这时候大多系统会采用一种称为虚方法表的方法来优化调用的效率。

2022-09-03 12:25:22 110

转载 从Java的《jvm虚拟机规范》看HotSpot虚拟机的内存结构和变迁

至此,本文对Java虚拟机规范中关于JVM内存区域的描述做了简单的解读,并以HotSpot虚拟机为例说明了具体实现和规范之间的联系。Java虚拟机规范是一份与实现无关的文档,它在描述时没有规定具体的实现细节,显得"模棱两可",但所有的Java虚拟机实现都应该遵循这个规范。其中还有关于类文件格式,字节码指令等相关内容的描述,感兴趣的读者可以自行前往阅读。关于字符串常量池的细节,放在下一篇文章来讨论。.........

2022-09-01 02:42:31 62

转载 jvm从HotSpot VM源码看字符串常量池(StringTable)和intern()方法

字符串常量池可以简单理解为就是一个hashmap的结构,记录的是字符串序列和String对象引用的映射关系为了在不同的Java进程之间共享字符串池,StringTable还有另外一个名为的MapJDK6中,会在永久代创建String对象再放入StringTable,而在JDK7中则直接将堆中的String对象放入StringTable中OpenJDK中包含HotSpot VM的源码,是完全开源的。OpenJDK源代码如果嫌Github下载太慢也可以去Gitee找国内的镜像。...

2022-09-01 02:35:22 75

转载 java的hashmap中value存放的是引用

【代码】hashmap中value存放的是引用。

2022-08-31 20:26:01 50

转载 【透彻】java关于HashMap多线程扩容导致死循环(JDK1.7)的详细过程

本篇主要通过图解的方式,解释了为什么JDK1.7中的HashMap在多线程情况下扩容可能死循环,也解释了JDK1.8如何解决这个问题。不得不说,画图是个很好的分析方式,根据代码,一步一步把结构图画出来,比对着代码瞎琢磨效果好多了。我在原文基础上把第二张图(多线程那张图)修改了一下,因为原作者画的图有些问题(原图的最后9个隔断应该是newTable的,而原作者给画成了table的)HashMap多线程扩容导致死循环(JDK1.7),为什么?- 知乎。.....................

2022-08-31 19:45:46 317

转载 Java中ArrayList中存放的是值还是引用?

这里我们试了Integer和Double两种,看一下结果:由此可见,修改int和double不会对之前的内容造成影响,但是修改User会对之前的内容造成影响。所以,ArrayList中如果是基本数据类型,那么存放的就是值,如果是对象,那么存放的就是对象的引用而不是对象的拷贝。看样子这个结论是正确的,但是需要注意的一个问题就是ArrayList可以存放基本数据类型吗?.........

2022-08-30 01:51:37 106

转载 String为什么是不可变的?为什么要有字符串常量池?String和StringBuilder和StringBuffer

我们使用平时都了解到的方式去通过new去创建对象,即使它的字面量一致,他也是创建了多个对象,这样会导致资源的浪费,同时也占用空间。对象的不可变性是指对象本身的属性或者说本身的数据不会改变,将变量重新赋值,是创建了一个新对象,然后将新对象的引用赋值给了变量,之前的对象是没有受到影响的。当我们使用String进行字符串拼接时,他的底层会创建StringBuilder对象,并调用sb.append()方法。当我们对字符串进行大量操作时,就必须产生很多新的对象,这会导致性能低下。从源码我们可以看到,它继承的。...

2022-08-29 18:03:17 73

转载 Java方法区、永久代、元空间、常量池详解

其实,“使用常量池”对应的字节码是一个 ldc 指令,在给 String 类型的引用赋值的时候会先执行这个指令,看常量池中是否存在这个字符串对象的引用,若有就直接返回这个引用,若没有,就在堆里创建这个字符串对象并在字符串常量池中记录下这个引用(jdk1.7)。这里的字面量是指字符串字面量和声明为 final 的(基本数据类型)常量值,这些字符串字面量除了类中所有双引号括起来的字符串(包括方法体内的),还包括所有用到的类名、方法的名字和这些类与方法的字符串描述、字段(成员变量)的名称和描述符;........

2022-08-27 12:11:40 378

转载 Centos7每天定时删除备份mysql文件

脚本内容:#!/bin/bashecho'清除5天前的数据库备份文件...'-exececho'清除5天前的数据库备份文件完成'

2022-08-26 16:36:06 72

原创 springboot上传文件落盘存储(MultipartFile转File)

——— 可以替换成FileUtils.forceMkdir(new File(patchPath))File dir = new File(patchPath);dir.exists()){ //如果不存在。要创建文件,必须先创建路径,路径不存在则会报错。,实例化一个File对象。,实例化File对象。

2022-08-22 14:41:50 124

转载 spring-kafka批量消费和手动提交offset

在配置文件中关闭自动提交,开启手动提交和批量消费就可以批量消费了,但是最后需要在代码中手动提交offset。

2022-08-18 10:23:59 36

转载 关于Kafka HW(high watermark)是否可以“被消费到”的讨论

事实上,它们的主要作用是帮助leader Replica对象确定其HW值之用,而由于leader Replica的HW值就是整个分区的HW值,故这些other Replicas实际上是用来确定分区HW值的。如果Kafka只判断第一个条件的话,确定分区HW值时就不会考虑这些未在ISR中的副本,但这些副本已经具备了“立刻进入ISR”的资格,因此就可能出现分区HW值越过ISR中副本LEO的情况——这肯定是不允许的,因为超过ISR副本LEO的那些消息属于未提交消息。另外上篇文章中的配图也是错误的,如下所示。...

2022-08-17 18:49:35 50

转载 CentOS7 整个服务器系统备份与恢复的方法

公司有几台测试环境的工作站,每次玩坏了。都要重做系统,我系统都快安装吐了。因为实体机无法做快照。所以只能备份了。CentOS的备份和恢复其实非常简单,我们只要把全部文件用TAR打包就行,下次需要恢复的适合再解压开覆盖就可以了。.........

2022-08-11 18:27:47 2233 1

转载 java并发 —— AQS 详细介绍

只有当state大于0的时候,阻塞的线程才能继续执行,此时先前执行任务的线程继续执行release方法,release方法使得state的变量会加1,那么自旋的线程便会判断成功。AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7)等等皆是基于AQS的。...

2022-07-23 13:56:32 153

转载 终于明白了!java只有值传递,而没有引用传递

有人就又会疑问了,形参里的是对象,那传递的应该是引用本身,这肯定是引用传递,我确实这样疑惑过,但仔细想想,其实还是值传递,因为他们指向同一个堆,所以改变堆内内容当然对原本有影响了,我们所说的没有影响是栈中的原数据,这里是对象a,副本a根本对原实参a无法造成影响,因为a是对象,所以你对对象a中数据的更改跟a没有关系,因为堆中的数据时共享的,很多人都会理解错这一点。我们发现值传递和我们上面所说一致,它是把实参复制一份通过形参传给方法,而这个方法改变的只是副本,无法对原来的数值改变。"调用过程中a的值".....

2022-07-22 16:01:18 276

转载 Java中同一个类中不同的synchronized方法是否可以并发执行 ?

更通俗简单的问法"Java中两个线程,是否可以同时访问一个对象的两个不同的synchronized方法?"答案是不可以!!!让大神们见笑了~~但是如果你也有和我一样的观念,那么就请仔细阅读下面的文字!!多个线程访问同一个类的synchronized方法时,都是串行执行的!就算有多个cpu也不例外!锁住的是方法所属对象本身.同一个锁某个时刻只能被一个执行线程所获取,因此其他线程都得等待锁的释放....

2022-07-20 15:41:08 296

转载 【数据结构】红黑树与平衡二叉树的区别以及原理详解(附图解)

最近在学习HashMap相关内容时碰到了红黑树。在hashMap中,链表超过一定长度将会转化为红黑树,趁这个机会学习并记录一下红黑树的内容。提示:以下是本篇文章正文内容红黑树是一种自平衡二叉排序树,它属于平衡树,但是却没有平衡二叉树那么“平衡”。那么我们首先来看一下平衡二叉树。二叉平衡树有以下规则:那么我们来看看下面树的图: 符合三个规则的平衡二叉树: 5号节点有三个孩子,违反规则1,不是平衡二叉树 7号节点属于5号节点的左子树范围却比5大,违反规则2,不是平衡二叉树。 5号节点的左子树高度为3,右子树

2022-07-18 11:11:37 109

原创 算法——java快排(快速排序)

手写java快排(快速排序),本人亲测哈哈!!

2022-07-14 17:13:53 327

转载 算法的时间复杂度分析之O(logn)、O(nlogn)

复杂度分析之O(logn)、O(nlogn)对数阶时间复杂度非常常见,同时也是最难分析的一种时间复杂度。我通过一个例子来说明一下。根据我们前面讲的复杂度分析方法,第三行代码是循环执行次数最多的。所以,我们只要能计算出这行代码被执行了多少次,就能知道整段代码的时间复杂度。从代码中可以看出,变量 i 的值从 1 开始取,每循环一次就乘以 2。当大于 n 时,循环结束。还记得我们高中学过的等比数列吗?实际上,变量 i 的取值就是一个等比数列。如果我把它一个一个列出来,就应该是这个样子的:所以,我们只要知道

2022-07-09 10:45:43 313

转载 ConcurrentSkipListMap——跳表原理

为了引出 ConcurrentSkipListMap,先来简单理解下什么是跳表。对于单链表,即使链表是有序的,如果想要在其中查找某个数据,也只能从头到尾遍历链表,这样效率自然就会很低,跳表就不一样了。跳表是一种可以用来快速查找的数据结构,有点类似于平衡树。它们都可以对元素进行快速的查找。但一个重要的区别是:对平衡树的插入和删除往往很可能导致平衡树进行一次全局的调整;而对跳表的插入和删除,只需要对整个数据结构的局部进行操作即可。这样带来的好处是:在高并发的情况下,需要一个全局锁,来保证整个平衡树的线程安全;而

2022-06-30 15:17:13 169

转载 Spring Boot中内置Tomcat最大连接数、线程数与等待数 实践调优

在 Spring Boot 框架中,我们使用最多的是Tomcat,这是 Spring Boot 默认的容器技术,而且是内嵌式的 Tomcat。Tomcat 是 Apache 基金下的一个轻量级的Servlet 容 器 , 支 持 Servlet 和 JSP 。Tomcat服务器本身具有Web服务器的功能,可以作为独立的Web服务器来使用。Spring Boot 能支持的最大并发量主要看其对Tomcat的设置,可以在配置文件中对其进行更改。要了解具体参数的默认值,一个简单的方法是在application.pr

2022-06-24 21:55:52 5743 1

转载 Redis 之布隆过滤器——java实例

一般我们使用Redisson自带的布隆过滤器 方式二:guava 工具不用Redis如何来实现布隆过滤器。guava 工具包相信大家都用过,这是谷歌公司提供的,里面也提供了布隆过滤器的实现。 转载自:Redis 之布隆过滤器_wang0112233的博客-CSDN博客_redis布隆过滤器...

2022-06-14 17:16:46 847

转载 Socket原理讲解(在哪、是什么、怎么用)

对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1. 什么是TCP/IP、UDP?2. Socket在哪里呢?3. Socket是什么呢?4. 你会使用它们吗?什么是TCP/IP、UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集

2022-06-12 11:52:17 336

转载 Redis迭代查询详解及其使用:Scan命令、Sscan命令、Hscan命令、Zscan命令

Redis中的Keys命令和Smembers命令类似于数据库中的全表扫描,其中,Smembers命令返回集合中的所有的成员,与数据库中的全表扫描无异。由于Redis是单线程,而Keys命令和Smembers命令会造成Redis线程的堵塞,在生成环境需要十分慎重的使用。为了避免Redis线程的堵塞,出现了查询迭代命令,也就是Scan命令,其用于迭代当前数据库中的缓存数据。Scan 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为Scan命令的游

2022-06-08 15:58:08 1607 1

转载 在springboot中redis优雅批量匹配并删除(scan迭代查询,循环删除,非阻塞)

在搭建了项目之后,由于需要通过触发动作,并删除redis中多个key。 在查询了jedis并没有类似的删除方法之后,事情就变得清晰起来。完成上述任务,分为两个步骤: 从找到要删除的key来说,有两种方法,一种是通过jedis的keys方法来获得;另外一种是通过scan方法获得。 使用keys方法,寻找包含指定参数的key,其中“*”是匹配符,要是想找前缀就在其后加*,要是找后缀就在传入参数后面加*,而要是图省事方便,前后加*即可。12345678910 使用scan方法,寻找包含

2022-06-08 15:02:53 1774 1

转载 写缓冲(change buffer)——这次彻底懂了

上篇《缓冲池(buffer pool),彻底懂了!》介绍了InnoDB缓冲池的工作原理。一、简单回顾一下:(1)MySQL数据存储包含内存与磁盘两个部分;(2)内存缓冲池(buffer pool)以页(page)为单位,缓存最热的数据页(data page)与索引页(index page);(3)InnoDB以变种LRU算法管理缓冲池,并能够解决“预读失效”与“缓冲池污染”的问题;画外音:细节详见《缓冲池(buffer pool),彻底懂了!》。毫无疑问,对于读请求.

2022-05-26 15:25:14 133

空空如也

空空如也

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

TA关注的人

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