Tomcat类加载机制 图解Tomcat类加载机制(阿里面试题)_xiaobao5214的博客-CSDN博客双亲委派模型要求除了顶层的启动类加载器之外,其余的类加载器都应当由自己的父类加载器加载。Tomcat的类加载机制是违反了双亲委托原则的,对于一些未加载的非基础类(Object,String等),各个web应用自己的类加载器(WebAppClassLoader)会优先加载,加载不到时再交给commonClassLoader走双亲委托。1、既然 Tomcat 不遵循双亲委派机制,那么如果我自己定义一个恶意
maven依赖冲突 目录一:依赖冲突的表现二:依赖冲突发生的原因三:依赖原则优先级四:依赖冲突排查五:Maven命令排查六:Maven helper命令排查七:解决方案一:依赖冲突的表现例1:当服务启动或者调用发生如下异常时,NoSuchMethodError,ClassNotFoundException 等。则一般是因为jar包冲突引起的,如最近项目中遇到的一个问题,就是因为com.alipay.common包发生了版本冲突,项目中实际编译打包的com.alipay.common:tr
多线程之CompletableFuture使用 一、简单介绍CompletableFuture是java8新增的并发工具类,继承了FutureTask的同步任务的特点,同时新增了异步调用的特点(其中异步的方法名称都带有Async),换而言之同步获取方法的返回值的方式可以用CompletableFuture完成,与此同时,想要异步获取方法的返回值也可以使用CompletableFuture来完成。异步带Async,并且底层执行的线程由ForkJoinPool支持。于此同时还多了异常处理(执行任务的时候可能会发生异常,以前使用FutureTask的
MVCC实现原理 大纲前提概要什么是MVCC 什么是当前读和快照读?当前读,快照读和MVCC的关系MVCC实现原理隐式字段 undo日志Read View(读视图) 整体流程MVCC相关问题RR是如何在RC级的基础上解决不可重复读的? RC,RR级别下的InnoDB快照读有什么不同?前提概要什么是MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访.
mysql日志 一: mysql日志日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。 在这其中,我们重点需要关注的是 binlog (主从同步 ) redo log(重做日志) undo log(回滚日志),接下来详细介绍这三种日志。逻辑日志和物理日志首先按照日志的记录方式分为:逻辑日志和物理日志逻辑日志:可以简单理解为记录的就是sql语句 。 物理日志:mysql 数据最终是保存在数据页中的,物
IDEA配置gradle构建spring源码 1、首先下载spring源码2、下载gradle3、mac安装gradle安装gradle 打开电脑终端 vim ~./bash_profile输入 export GRADLE_HOME =/Users/qijixiang/Documents/java/gradle-6.8.3 export PATH=$PATH:$GRADLE_HOME/bin退出 wq保存source ~/.bash_profile 4、idea配置gradle...
使用Redis Key失效事件实现定时任务 1、业务场景在开发中我们可能会遇到下面这样的场景,比如: 当一个用户下单之后后一段时间不支付订单会自动关闭,但每个订单的创建时间又不一样怎么保证30分钟不支付就取消订单呢? 当用户的优惠券或者积分等等快要过期的时候需要提前一天或者几个小时或者30分钟的时候发消息提醒用户,或者去做一些其他的业务处理 那么针对上述场景我们怎么去实现呢?估计很多人首先会想到用定时任务每隔一段时间去执行任务判断吧,这种方式完全可行,但是如果是需要比较精确的提醒呢?就比如我就需要过期前一个小时或者30分钟的时候去提醒,那怎
JVM性能分析&故障排查 1、Jps查看进程首先查看jps都用哪些命令,使用jps -help帮助查看命令,这样就不用死记硬背了,如下所示: 首先用jps命令查看正在运行中的进程的pid等。 jps -l 输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径。 jps -v:输出虚拟机进程启动时 JVM 参数。(经常使用,类似ps - ef |grep java 但比这个显示更清晰) jps -m:输出传递给 Java 进程 main() 函数的参数。 2、jstat性能分析(...
HashMap插入数据原理分析 在JDK1.7中,HASHMAP是由数组+链表实现的,原理图如下:HashMap map = new HashMap(); // 伪初始化map.put("键","值"); // 真初始化1、HashMap初始化操作HashMap的构造方法在执行时会初始化一个数组table,大小为0。 HashMap的PUT方法在执行时首先会判断table的大小是否为0,如果为0则会进行真初...
jvm性能优化到底在优化什么? 1、jvm中的stop the world我们要知道jvm中的stop the world是指什么?我们都知道当程序运行的时候,创建的对象等数据是放在jvm堆内存上的 当堆内存满了之后,jvm是会进行垃圾回收的,就是当jvm进行垃圾回收时会发生stop the world会停止其他的工作线程 不能jvm一边回收着垃圾,工作线程那边创建着对象去占用内存吧,所以stw是会导致系统对用户来说产生...
windows安装Mongodb服务 1、MongoDB 下载MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址:https://www.mongodb.com/download-center/community2、我这里下载的是3、解压改名之后如上图所示mongodb-4.2.64、在mongodb下新建data文件夹...
SpringBean的生命周期 1、注意:即使你定义了ApplicationContextAware 接口,但是有时候并不会调用,这要根据你的IoC 容器来决定。我们知道, Spring IoC 容器最低的要求是实现BeanFactory 接口,而不是实现ApplicationContext 接口。对于那些没有实现ApplicationCont巳xt 接口的容器,在生命周期对应的ApplicationContextAw...
HTTPS原理 大家都知道 HTTPS 比 HTTP 安全,也听说过与 HTTPS 协议相关的概念有 SSL 、非对称加密、 CA 证书等。 但对于以下灵魂三拷问可能就答不上了:为什么用了 HTTPS 就是安全的?HTTPS 的底层原理如何实现?用了 HTTPS 就一 定安全吗?HTTPS 的实现原理: 大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协...
JConsole连接远程服务器方法 jconsole远程连接,必须配置JMX连接参数1、linux 启动项目时,添加参数java -Djava.rmi.server.hostname=10.160.13.111 #远程服务器ip,即本机ip-Dcom.sun.management.jmxremote #允许JMX远程调用-Dcom.sun.management.jmxremote.port=3214 #自定义jm...
Redis中存值是Hash冲突怎么解决的 Redis 中的 Hash和 Java的 HashMap 更加相似,都是数组+链表的结构.当发生 hash 碰撞时将会把元素追加到链表上 我们先来了解下 hash 的内部结构.第一维是数组,第二维是链表.组成一个 hashtable. 在 Java 中 HashMap 扩容是个很耗时的操作,需要去申请新的数组,扩容的成本并不低,因为需要遍历一个时间复杂度为O(n)的数组,并且为其中的每个enr...
redis的zset结构跳表 跳表:为什么 Redis 一定要用跳表来实现有序集合?上几篇主要是学习二分查找算法,但是二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就没办法使用二分查找了吗?此时跳表出现了,跳表(Skip list)实际上就是在链表的基础上改造生成的。跳表是一种各方面性能都比较优秀的动态数据结构,可以支持快速的插入、删除、查找操作,写起来也不复杂,甚至...
mysql查询过程 1、mysql基本架构以及查询流程 MySQL拿到一个查询请求后,会先到查询缓存看看,之前是不是执行过这条语句。 只要是你之前执行过的语句,都会在内存里面用key-value形式存储着。查询的时候就会拿着语句先去缓存中查询,如果能够命中就返回缓存的value,如果不命中就执行后面的阶段。 只要对表有任何的更新,这个表的所有查询缓存就会全部被清空 缓存在MySQL8....