- 博客(48)
- 收藏
- 关注
原创 jmap简介
jmap是jdk自带的原生命令,包含很多功能,如生成堆栈dump文件、查看堆内的对象信息、classloader类加载信息一级finalizer队列,只是jmap没有图形界面。
2024-02-22 17:18:25
473
原创 Redis渐进式rehash小疑问
在Redis中,Rehash是指在进行哈希表扩容或缩容时重新计算和重新分配哈希槽的过程。Redis使用哈希表来存储键值对,哈希表中的每个槽位对应一个哈希槽,每个槽位可以存储多个键值对。当哈希表的负载因子(load factor)超过一定阈值时,Redis会触发Rehash操作来扩容哈希表,以提供更多的槽位来存储新的键值对。在Rehash过程中,Redis会逐步将原来哈希表中的键值对迁移到新的哈希表中,直到所有键值对都迁移完成。
2023-11-14 19:49:17
646
1
原创 SpringBoot启动流程简介
然后调用真正的run方法,启动Spring application,并创建及刷新ApplicationContext。主要做两件事,首先根据默认设置和用户提供的参数创建一个新的SpringApplication实例。
2023-11-06 19:11:36
243
原创 Mybatis执行流程简析
日常工作中,我们用到mybatis的时候,都是写一个Mapper接口+xml文件/注解形式,然后就可以在业务层去调用我们在Mapper接口中定义的CRUD方法,很方便,但一直都没有去研究过执行逻辑,下面附一篇我自己研究的过程。
2023-10-31 17:06:44
227
原创 feign远程调用原理
feign是springCloud全家桶中的远程调用组件,其底层主要依赖于Java的动态代理机制,然后基于http client进行http请求,同时它还能配合其它组件实现Loadbalance(负载均衡)、Hystrix(熔断)、fallback(降级)等功能。
2023-05-02 13:38:00
3093
1
原创 线上CPU飚增排查思路
线上是我们最敬畏、也是出问题最难排查的环境,比较常见的一个问题就是线上服务器CPU使用率突然飚增,导致机器频繁预警,常见的CPU使用率飚增原因有以下这些:这个时候就需要上服务器排查一下了,整理了一下简单的排查步骤:
2023-04-23 18:48:40
388
原创 mybatis配置文件详解
mybatis框架本身其实只有一个配置文件,及mybatis-config.xml,只是这个配置文件中有一个属性mappers(映射器),可能会包含大量的SQL映射文件,所以通常会单独扩展,形成一个个单独的xxxMapper.xml映射文件。自定义别名可以直接设置,如下,在使用com.it.learn.Author的地方可以直接使用别名Author但当某个项目中特别多java类需要设置别名时,可以直接指定包名扫描,如下,每个在com.it.learn包中的Java类,都可以使用首字母小写的名称来作为别名。
2023-04-23 17:33:21
4944
原创 线程池常见面试题
一、请说出线程池的工作原理答:常见流程如下:提交任务后,先判断当前池中线程数是否小于 corePoolSize,如果小于,则创建新线程执行这个任务。 否则,判断线程池任务队列是否已满,如果没有满,则添加任务到任务队列。 否则,判断当前池中线程数是否大于 maximumPoolSize,如果大于则执行预设拒绝策略。 否则,创建一个线程执行该任务,直至线程数达到maximumPoolSize,达到后执行预设拒绝策略。 注意:其实按照上面流程回答已经差不多了,但是jdk1.6之后对流...
2022-05-16 17:13:57
1561
原创 nacos学习----day01
目录一、nacos简介二、nacos设计2.1 nacos总体架构设计2.2 nacos内核设计一、nacos简介Nacos 是 Dynamic Naming and Configuration Service 的首字母简称;⼀个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。引用官网简介:Nacos 致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮...
2022-05-06 15:14:24
326
原创 docker安装zabbix怎样修改图标和登录页文字
安装完成之后访问zabbix首页,如下图根据公司业务需求,会修改一下图标和文字这些,首先查看docker中的zabbix容器,包含3个,其中zabbix/zabbix-web-nginx-mysql包含了zabbix的页面文件,直接进入该容器,查看zabbix的源码发现,它是用php语言来编写的。1. 修改zabbix图标zabbix的图标其实是使用的一个svg图片,在它的/usr/share/zabbix/assets/img路径下面,有一个icon-spr...
2022-04-07 17:49:54
1618
原创 docker搭建mysql主从
前置条件:docker环境配置1. 首先启动主机容器,并做好文件映射,--privileged=true用于设置权限docker run -d -p 3307:3306 --privileged=true -v /home/mysql-master/log:/var/log/mysql -v /home/mysql-master/data:/var/lib/mysql -v /home/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASS
2022-03-31 11:45:10
2523
1
原创 对象的内存
在 Hotspot 虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Object Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头HotSpot 的对象头由Mark Word和类型指针组成。对象头中的运行时数据,如哈希码、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,官方称它为“Mark Word”。对象需要存储的运行时数据很多,其实
2022-03-09 14:56:24
66
原创 面试官:看你简历上写了熟悉JVM垃圾回收机制,那说说你了解的GC
目录1. 介绍一下垃圾回收机制:2. GC完整流程知道吗?介绍一下3. GC的四种算法有过了解吗?介绍一下4. 请介绍一下常用的几款垃圾回收器1. 介绍一下垃圾回收机制:当前商业虚拟机的垃圾收集器,大多数都遵循了“分代收集”(GenerationalCollection)的理论进行设计,分代收集名为理论,实质是一套符合大多 数程序运行实际情况的经验法则,它建立在两个分代假说之上: 1)弱分代假说(Weak Generational Hypo...
2022-03-09 14:51:25
515
原创 八股文之JVM
1. 运行时数据区中包含哪些区域?哪些线程共享?哪些线程独享?Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK 1.8 和之前的版本略有不同JDK1.8之前:JDK1.8:线程私有的:程序计数器虚拟机栈本地方法栈线程共享的:堆方法区直接内存 (非运行时数据区的一部分)1.1 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来选取下一条需要执行的字节码指
2022-03-09 14:34:37
184
原创 Java阻塞队列
一、基本定义阻塞队列的顶级接口是BlockingQueue,它实现了Queue这个接口,官方对它的解释是:一个队列,它还支持在检索元素时等待队列变为非空,并在存储元素时等待队列中的空间变为可用的操作,典型的应用场景有生产者-消费者、线程池和消息中间件等。BlockingQueue 为元素的操作有四种形式,用不同的方式处理不能立即满足,但可能在未来某个时间点满足的操作:抛出异常,当阻塞队列满时,再向队列中add添加元素会抛出IllegalStateException...
2022-03-07 14:57:09
378
原创 一次生产接口调用过慢问题排查
问题:前几天用户使用线上环境突然发现查看详情时,有些记录load接口调用了10s或者20s,但是有的数据又很快。解决历程:由于该接口代码较老,里面调用了很多逻辑,所以当时第一时间想的就是将生产数据导了一份到本地进行调试,结果发现本地只要2s,便让运维人员去查了一下服务器的内存情况,发现服务器内存已经严重不足,所以就直接判定为是服务器自身内存不足的原因,决定先做一下服务迁移再测试。等到服务迁移完后再试发现还是很慢,于是拿了一条调用速度很快和一条很慢的数据做对比,最终...
2022-03-04 11:57:29
851
原创 @Configuration注解加载过程
@Configuration注解加载过程一、注解加载过程分析启动类调用main方法,其中调用SpringApplicationBuilder的run方法public static void main(String[] args) { new SpringApplicationBuilder(ElawApplication.class).web(true).run(args);}run方法中使用AtomicBoolean running标志来记录是否已经在启动中,若未启动则进入同步代码
2022-01-05 00:08:50
3553
原创 如何更改springboot的tomcat版本
目录一、查看tomcat版本1. 根据springboot的版本,在Maven Repository中查看2. 使用idea开发的朋友,可以直接在dependepency中查看3. 通过命令行打印二、更改tomcat版本1. 升级SpringBoot的版本2. 排除当前SpringBoot版本自带的tomcat,手动指定想要的版本近期公司项目测评,部门通报Apache Tomcat中间件存在高危漏洞(CVE-2021-42340),利用该漏洞可导致拒...
2022-01-04 11:22:52
9198
原创 spring内置工具类
断言1、断言是一个逻辑判断,用于检查不应该发生的情况2、Assert 关键字在 JDK1.4 中引入,可通过 JVM 参数-enableassertions开启3、SpringBoot 中提供了 Assert 断言工具类,通常用于数据合法性检查// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行// 参数 message 参数用于定制异常信息。void notNull(Object object, String message)// 要求参数必须空(Null),
2021-12-31 14:57:35
1373
原创 Jvm学习day01
1. 运行时数据区中包含哪些区域?哪些线程共享?哪些线程独享? Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK 1.8 和之前的版本略有不同 JDK1.8之前:JDK1.8:线程私有的: 程序计数器 虚拟机栈 本地方法栈线程共享的: 堆 方法区 直接内存 (非运行时数据区的一部分)1.1 程序计数器 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。字节码解释器工作
2021-12-30 21:54:04
541
原创 Java整合腾讯云短信发送
1. 引入相关maven依赖<dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> <version>1.0.6</version></dependency><dependency> <groupId>com.qcloud</groupId&
2021-12-30 14:11:38
1602
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人