- 博客(220)
- 收藏
- 关注
原创 maven包scope为provided导致SpringBoot项目启动报错java.lang.ClassNotFoundException: javax.servlet.ServletContext
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContext
2024-08-11 14:55:31 325
原创 配置多数据源后,MyBatis-Plus的Page类的total值为0问题或分页配置失效问题解决
MyBatis-Plus的Page类的total值为0问题或分页配置失效问题解决
2023-05-12 11:15:43 945 1
原创 多数据源使用mybatis-plus报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
【代码】多数据源使用mybatis-plus报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
2023-05-04 11:52:34 465 1
原创 java.lang.IllegalArgumentException: Request header is too large
url的参数太长了,超过了tomcat的默认值
2022-04-22 17:02:49 1131
原创 JVM的垃圾回收ParNew和CMS的介绍
- 第一个阶段:Initial Mark(初始标记阶段),CMS会找到"根"上的对象进行标记,不会标记非"根"的对象,此阶段会有STW,标记线程和业务线程不会并发执行 - 第二个阶段:Concurrent Mark(并发标记阶段),业务线程一边工作产生垃圾,回收线程一边标记垃圾,由于标记垃圾是GC最耗时的过程,所以CMS让回收线程个业务线程并发执行,业务线程虽然会慢一点但还是一直在执行的 - 第三个阶段:Remark(重新标记阶段),在第二阶段可能业务线程会产生新的垃圾,此阶段会把这些垃圾重新标记一下
2022-04-22 14:36:24 775
原创 JVM的垃圾回收Serial、Serial Old、Parallel Scavenge、Parallel Old的介绍和STW(Stop The World)
> Serial工作在年轻代,使用标记-复制的回收算法,它是单线程的垃圾回收器> Serial Old工作在老年代,使用标记-整理的回收算法,它也是单线程的垃圾回收器> Parallel Scavenge简称PS,使用标记-复制的回收算法,它是多线程的垃圾回收器 > Parallel Old简称PO,使用标记-整理的回收算法,它也是多线程的垃圾回收器
2022-04-21 14:10:17 1774 1
原创 三色标记算法实现原理
三色标记算法是什么三色标记就是把对象在逻辑上分成三种颜色:黑色,它自己是不是垃圾已经被标记完了,而且成员变量或牵扯到它引用的一些对象也已经标记完了;灰色,本身标记完了,但是还没有标记到它引用的那些对象,引用的那些对象还是白色没有标记到的;白色,还没被标记到的对象。假如有一个对象A,它所引用的对象B和C都已经标记完了,那它自己也标记完了黑色;B和C各自还有一个引用指向白色对象没标记到,那这个B和C自己遍历到孩子还没有遍历到就是灰色,D和E就是白色那个没有遍历到的节点三色标记算法的漏标问题原来灰
2022-04-20 14:03:46 412
原创 java对象的内存布局以及使用ClassLayout查看布局
<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.16</version></dependency>对象的内存布局分为两种,普通对象和数组对象普通对象普通对象有四部分组成对象头(MarkWord)、ClassPointer指针、实例数据、Padding对齐对象
2022-04-15 12:05:20 2597 2
原创 CPU的缓存行(Cache Line)是什么
存储器的层次结构存储器的层次如下:其中,L1、L2在CPU内部,L3在主板上,越往上CPU到达的时间越短,CPU内部的数据是独立的,CPU外部的数据是所有CPU共享的。CPU的数据不一致问题产生原因假如主存里有x、y两个数据,它们会先被加载到L3缓存里,让在加载到L1、L2缓存,但是L1、L2是在CPU内部的,那就有可能CPU1把x加载到缓存修改成1,CPU2把x加载到缓存修改成2,产生CPU之间的数据不一致问题,也就是CPU1修改数据CPU2不知道。解决方案方案一:总线锁。由于L2是通过使
2022-04-12 13:43:24 2734
原创 Java类加载的过程
类的生命周期一个类从从被加载到JVM内存开始,到卸载出内存为止,它的整个生命周期会经历七个阶段,其中验证、准备、解析统称为连接。加载、验证、准备、初始化、卸载这五个阶段的顺序是固定的,解析阶段在某些情况下会在初始化阶段之后进行。在《java虚拟机规范》中严格规定了有且只有六种情况必须立即对类进行加载、验证、准备、初始化(下文所说的初始化阶段是这四个阶段的简称):遇到new、getstatic、putstatic或invokestatic 这四条字节码指令时,如果类型没有进行过初始化,则需要
2022-04-08 14:10:07 477
原创 java中的类加载器(Class Loader)和双亲委派
类加载器(Class Loader)什么是类加载器java中可以通过一个类的的全限定名来获取描述该类的二进制字节流,这个动作是由代码来实现的,这些代码就是类加载器(Class Loader)类加载器的层级:Bootstrap Class Loader - 启动类加载器此加载器负责加载JAVA_HOME/lib目录下的类库文件或者是被JVM参数-Xbootclasspath所指定路径下的类库文件,并且这些文件需要JVM可以识别,否则即使放到JAVA_HOME/lib目录下也不会被加载测试代码p
2022-04-07 13:51:54 435
原创 java中CAS的实现原理
什么是CASCAS全称compare and swap 或 compare and set 或 compare and exchange,也就是比较并交换。比较并交换是什么意思呢?java中有一些类是以Atomic开头的,例:AtomicInteger;这些类就是通过CAS的方式来保证线程安全的。new AtomicInteger().incrementAndGet()public final int incrementAndGet() { return U.getAndAddInt(t
2022-03-31 14:54:55 663
原创 java 中volatile的作用及其实现原理和JVM的内存屏障
堆虽然是所有线程共享的,但是每个线程还有只属于自己的空间,当一个线程去堆中取值时会复制一份到自己的空间,对这个这个值进行修改会先在自己的空间里修改然后再写到堆中,但是其他线程是不知道你修改了,这就是线程之间的不可见。加了volatile之后就能够保证一个线程修改另一个线程马上就能看到。
2022-03-28 13:26:37 939
原创 java 中的synchronized及其锁升级的理解
当对num进行++操作,多个线程同时访问时,第一个线程将num读出来,假设读到的是0,然后把它+1,但在这个还没有写回去的时候,第二个线程来了读到它还是0,也对其+1,之后写回去,发现两个线程都是读到的0,写回去的是1,本来应该加两次变成2,结果却是1,这就出现了少加的现象
2022-03-26 15:03:08 560
原创 java线程的状态
1:当newThread()后这个线程就处于New(新建状态),调用start()这个线程就会被放到CPU的等待队列里等待CPU的运行,此时则为Ready(就绪状态)2:当CPU开始执行这个线程,这个线程变成Running(运行状态)3:当这个线程执行完了,这个线程变成Teminated(结束状态)4:在Running(运行状态)时,调用Thread.yield()方法,会让出CPU转变成Ready(就绪状态)5-1:在Running(运行状态)时,调用Thread.sleep(time)、ob..
2022-03-26 13:14:39 529
原创 java 创建线程的方式?停止线程的方式?
======创建线程的方式======继承Thead类,重写run()方法实现Runnable类,重写run()方法使用lombda实现Callable类,重写call()方法使用线程池======停止线程的方式======使用stop()方法使用suspend()和resume()方法配合volatile使用interrupt()方法什么都不做,让线程自然结束
2022-03-23 15:19:20 2776
原创 Mysql 的索引使用的数据结构为什么采用B+Tree,而不采用Hash表、红黑树等其他数据结构
为什么不使用Hash表使用Hash表存在的问题:Hash表必须要有hash算法,这个算法还要足够优秀来保证你的数据能够很好的散列,如果存在大量的hash冲突或者hash碰撞,会导致一部分查询效率非常低即使算法足够优秀,如果进行范围查询,需要逐一对比每一个元素值,效率很低,并且在生产环境中大部分的查询是范围查询,如果还需要排序那就更低了hash比较浪费内存空间,而内存是非常宝贵的资源为什么不使用AVL、BST、红黑树使用这些二叉树存在的问题:每一个分支有且尽有两个子节点,当需要向其中插
2022-03-21 13:51:05 955
原创 Java Thread类中interrupt()、interrupted()、isInterrupted()方法
interrupt()、interrupted()、isInterrupted()
2022-03-18 14:19:38 559
原创 Redis 与 Mysql 的数据一致性问题
###先更新数据库,再更新缓存;###先更新缓存,再更新数据库;###先删除缓存,再更新数据库;###先删除缓存,再更新数据库,在删除缓存;###更新数据库,再删除缓存;###MQ异步处理;###canal订阅Mysql的binlog(最优)
2022-03-15 13:57:09 2460 1
原创 Java 包装类(Integer等)的详细介绍
什么是包装类八种基本数据类型与包装类的对应关系基本数据类型与其对应包装类的区别给包装类赋值的方式装箱与拆箱包装类的缓存问题
2022-03-08 14:26:22 551
原创 Java 中类的构造方法、代码块、静态代码块执行顺序问题
父类的静态代码块==>子类的静态代码块==>父类普通代码块==>父类构造方法==>子类普通代码块==>子类构造
2022-03-07 13:33:59 348
原创 java 使用 POI 操作Excel实现导入导出功能
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.14</version></dependency>
2022-03-04 09:45:49 601
原创 JWT 的实现原理和基本代码实现
JWT是什么JWT是一种基于JSON的令牌安全验证(在某些特定的场合可以替代Session或者Cookie),一次生成随处校验JWT的组成JWT分为三部分:头部信息(header),消息体playload,签名( signature)
2022-03-02 10:31:45 584
原创 SpringBoot 项目文件定义下载功能时 HttpServletResponse.setHeader 设置文件名,下载后文件中的汉字变成下划线(_)的问题解决
解决前的代码String fileName = stringBuilder.toString();System.out.println("文件名:" + fileName);try { response.reset(); response.setContentType("application/x-zip-compressed;charset=UTF-8"); // 修改前 response.setHeader("Content-Disposition", "attac
2022-02-25 16:07:09 1609
原创 SpringBoot 集成 SpringSecurity 验证码验证登录
<!-- 验证码生成的库 --><dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptcha</artifactId> <version>2.3.2</version></dependency>
2022-02-23 14:48:13 790
原创 SpringBoot 集成 SpringSecurity 配置访问权限
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>
2022-02-23 13:36:03 663
原创 SpringBoot 集成 SpringSecurity 的基本使用
主要依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>
2022-02-22 14:12:50 300
原创 vue-router 路由传参
安装npm install vue-routermain.js修改import Vue from 'vue'import App from './App.vue'import VueRouter from "vue-router"// 变量名只能用routerimport router from "./router/index"Vue.config.productionTip = false;Vue.use(VueRouter);new Vue({ render: h =&
2022-02-15 13:53:14 335
原创 vue-router 多级路由的配置
安装npm install vue-routermain.js修改import Vue from 'vue'import App from './App.vue'import VueRouter from "vue-router"// 变量名只能用routerimport router from "./router/index"Vue.config.productionTip = false;Vue.use(VueRouter);new Vue({ render: h =&
2022-02-15 13:48:32 1099
原创 SpringBoot 整合 Dubbo
主要依赖<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>3.0.5</version></dependency>
2022-02-14 14:24:10 181
原创 dubbo 的基本使用
主要依赖<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-dependencies-zookeeper</artifactId> <version>3.0.5</version> <type>pom</type></dependency>
2022-02-14 14:19:11 716
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人