- 博客(28)
- 资源 (1)
- 问答 (5)
- 收藏
- 关注
原创 Java服务生产环境下的问题排查
在生产环境中,我们无法通过断点调试、新增log、可视化工具去立马查看当前的运行状态和拿到错误信息,此时,借助Java自带的命令行工具以及相关dump分析工具以及一些小技巧,可以大大提升我们排查问题的效率。
2023-10-07 09:49:33 488
原创 Java中的类加载器、双亲委派、SPI机制
平时做业务开发比较少接触类加载器,但是如果想深入学习Tomcat、Spring等开源项目,或者从事底层架构的开发,了解甚至熟悉类加载的原理是必不可少的。Java的类加载器有哪些?什么是双亲委派?为什么要双亲委派?如何打破它?多多少少对这些概念了解一些,甚至因为应付面试背过这些知识点,但是再深入一些细节,却知之甚少。JVM 并不是在启动时就把所有的.class文件都加载一遍,而是程序在运行过程中用到了这个类才去加载。
2023-08-04 16:24:40 309
原创 学习笔记:分布式消息队列RabbitMQ
简单模式 HelloWorld:一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。工作队列模式 Work Queue:一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)。发布订阅模式 Publish/Subscribe:需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。
2023-08-02 09:39:43 295
原创 源码:JDK8并发工具类ConcurrentHashMap底层源码解读
是JUC包下的一个线程安全类,并非锁住整个方法,而是通过原子操作和局部加锁的方法保证了多线程的安全访问,且尽可能地减少了性能损耗。ConcurrentHashMap 内部使用了锁和各种数据结构来保证访问 Map 是线程安全的。ConcurrentHashMap 和 HashMap 底层的数组、链表结构几乎相同,底层对数据结构的操作思路是相同的。ConcurrentHashMap 除了数组 + 链表 + 红黑树的基本结构外,新增了转移节点结构(ForwardingNode)。
2023-07-03 22:36:05 194
原创 Java服务生产环境下的问题排查
在生产环境中,我们无法通过断点调试、新增log、可视化工具去立马查看当前的运行状态和拿到错误信息,此时,借助Java自带的命令行工具以及相关dump分析工具以及一些小技巧,可以大大提升我们排查问题的效率。
2023-06-22 14:38:51 255
原创 学习笔记:深入理解高性能代理服务器——Nginx
Nginx学习笔记一、Nginx 简介1. 什么是Nginx2. 反向代理3. 负载均衡4. 动静分离二、Nginx基本使用1. Nginx常用的操作命令2. Nginx的配置文件提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、Nginx 简介1. 什么是Nginx2. 反向代理3. 负载均衡4. 动静分离二、Nginx基本使用1. Nginx常用的操作命令2. Nginx的配置文件一、Nginx 简介1. 什么是Nginx Nginx(“engine x”)是一个
2023-05-05 22:46:24 4533 1
原创 MySQL:从页的角度分析innodb索引B+树
B+树叶子和非叶子结点的数据页都是16KB,且数据结构一致,区别在于叶子节点放的是真实的行数据,而非叶子结点放的是主键和下一个页的地址。B+树一般有两到三层,由于其高扇出,三层就能支持2kw以上的数据,且一次查询最多1~3次磁盘IO,性能也还行。存储同样量级的数据,B树比B+树层级更高,因此磁盘IO也更多,且范围查询效率低,所以B+树更适合成为mysql索引。索引结构不会影响单表最大行数,2kw也只是推荐值,超过了这个值可能会导致B+树层级更高,影响查询性能。
2023-05-04 16:38:41 128
原创 Redis:常用集群模式及其实现原理
在服务开发中,单机都会存在单点故障的问题,即服务部署在一场台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。Redis也是一样,为了解决单机故障引入了主从复制,但主从模式存在一个问题:master节点故障后服务,需要人为的手动将slave节点切换成为maser节点后服务才恢复。Redis为解决这一问题又引入了哨兵模式。
2023-05-02 10:12:55 213
原创 学习笔记:JVM知识体系(下)——类文件结构、类加载、类加载器
双亲委派模型是描述类加载器之间的层次关系。它要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。(父子关系一般不会以继承的关系实现,而是以组合关系来复用父加载器的代码)
2023-04-04 13:27:17 112
原创 学习笔记:JVM知识体系(上)——内存结构、虚拟机对象、垃圾回收、内存分配、调优
程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此时程序计数器为Undefined。Java 虚拟机栈是描述 Java 方法运行过程的内存模型。局部变量表操作数栈动态链接方法出口信息本地方法栈是为 JVM 运行 Native 方法准备的空间,由于很多 Native 方法都是用 C 语言实现的,所以它通常又叫 C 栈。它与 Java 虚拟机栈实现的功能类似,只不过本地方法栈是描述本地方法运行过程的内存模型。
2023-04-04 10:36:49 181
原创 面试笔记:Spring框架使用及其源码实现知识点
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;Spring AOP:AOP服务;
2023-04-02 23:27:35 175
原创 学习笔记:Spring框架源码Part.1——基础
学习视频链接:https://www.bilibili.com/video/BV1zd4y1L7YDSpring源码学习笔记—基础前言第一章 bean的元数据一、回顾bean的注入方式二、BeanDefiniiton详解1、认识BeanDefinition2、AbstractBeanDefinition3、GenericBeanDefinition三、BeanDefinition注册器四、加载BeanDefinition1、读取xml配置文件2、加载带注解的bean3、读取配置类4、类路径扫描5、包扫
2023-03-23 11:30:10 237
原创 学习笔记:云原生容器化技术——Docker
Docker学习笔记前言一、Docker概述1.1 Docker为什么会出现?1.2 Docker的历史1.3 Docker为什么这么火爆?1.4 虚拟机技术与容器化技术的区别二、Docker安装2.1 Docker的基本组成2.2 Docker安装2.3 阿里云镜像加速2.4 docker run的执行流程2.5 Docker工作原理三、Docker命令3.1 镜像命令3.2 容器命令3.3 操作命令四、Docker镜像五、容器数据卷六、DockerFile七、Docker网络原理八、IDEA整合Dock
2022-03-01 23:54:58 877
原创 MySQL知识体系——日志支持
MySQL知识体系 —— SQL优化一、SQL 优化简介1、解释:对于特定的要求,使用更优的 SQL 策略 或索引策略,以达到让结果呈现的时间更短,从而提升操作效率的过程就是 SQL 优化;2、SQL 优化包含在数据库级别优化中。我们平常所说的 SQL 优化就是指优化 SQL 语句和索引;3、SQL 优化是伴随着业务而进行优化的,并不是下面的所有操作必须都达到才是最好的优化。二、常规调优思路(众多解决方案之一)1、查看 slow-log,分析出查询慢的语句;2、按照一定优先级,一个一个的排查所
2021-08-17 23:15:45 119
原创 MySQL知识体系——存储引擎
MySQL知识体系 —— 存储引擎一、MySQL 数据库引擎简介1. ISAM(Indexed Sequential Access Method) ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM 执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够容错。如果你的硬盘崩了,那么数据文件就无法恢复了。如果你正在把 ISAM 用在关键任务应用程序里,那就必须经
2021-07-26 09:03:06 144
原创 工作中遇到过的复杂Mybatis标签的编写
工作中遇到过的复杂Mybatis标签的编写1. Map集合的遍历业务场景:书籍入库时,修改书籍表中的库存与最后入库时间字段。使用 < foreach > 标签遍历Map集合时,index属性为key,item属性为value。注意:mybatis默认不支持一标签下执行多条sql,需要在yml配置datasource.url=jdbc:mysql://localhost:3306/book_man_test?useUnicode=true&characterEncoding=utf
2021-07-14 17:29:57 108
原创 SpringBoot 学习笔记
SpringBoot学习笔记1. 关于SpringBoot2. 关于微服务笔记内容:什么是SpringBoot如何编写配置及yaml文件SpringBoot自动装配原理(重要)SpringBoot集成web开发SpringBoot集成Mybatis分布式开发 Dubbo + Zookeeper接口文档 SwaggerSpringBoot多线程任务调度登录安全验证 SpringSecurity / Shiro1. 关于SpringBoot1.1 什么是Spring ? Spr
2021-04-29 16:37:11 205 1
原创 工作日志:部署SpringBoot项目到Linux服务器
部署SpringBoot项目到Linux服务器1. 打包项目为Jar包2. 杀死项目进程并删除线上Jar包[root@izm5e44tzv3lsot4qrgg3sz ~]# ps -ef | grep jar # 1.查看进程名中含有"jar"进程root 6580 7328 0 Apr01 pts/0 00:13:42 java -jar shizhe.jarroot 18200 18174 0 13:06 pts/1 00:00:00 grep --c
2021-04-09 14:30:30 286 1
原创 学习笔记:NoSQL缓存中间件——Redis
Redis学习笔记Redis学习笔记NoSQL 概述为什么要用NoSQL什么是NoSQL阿里巴巴架构演进NoSQL的四大分类Redis入门概述Windows安装Linux安装Redis性能测试基础知识五大数据类型Redis-KeyStringList 列表Set 集合Hash 哈希Zset 有序集合三种特殊数据类型geospatial 地理位置hyperloglogbitmap事务Jedis测试常用的API事务SpringBoot整合Redis.conf详解Redis持久化RDB(Redis DataBas
2021-04-09 13:23:29 695
原创 问题解决-项目启动到一半突然卡住不动
问题解决-项目启动到一半突然卡住不动今天写完一个业务准备用postman调试,出错改完bug后再次启动,发现日志打印到一半不再往下走了尝试了各种解决办法:重新导入项目、删除target目录、重启IDE,都没得到解决。最后查百度,终于找到了解决办法解决方案打开项目所在目录(右击项目目录,点击Show in Explorer)删除目录下 .idea文件最后重新导入项目,再次启动项目就不会再卡住了。...
2020-12-15 11:37:39 2750 1
原创 循环队列的原理与代码实现
循环队列的实现动态数组队列循环队列与其实现原理循环队列的代码实现动态数组队列 队列的实现有很多种方式,可以通过底层数据结构链表和数组来实现,甚至是栈也可以实现队列。其中,通过动态数组实现的队列,它的入队操作的时间复杂度为O(1),出队时间复杂度为O(n)(或出队为O(1);入队为O(n)。只是相对于出入队操作是在数组的头还是尾而言),而在出入队时,还可能会引发缩容扩容,这又是一个时间复杂度为O(n)的操作。所以说,通过动态数组这种伪动态线性数据结构实现
2020-12-10 12:16:05 381
原创 类初始化与实例初始化过程分析
类初始化与实例初始化关于类初始化与实例初始化分析一个小问题类初始化与实例初始化类初始化实例初始化问题分析另一个问题关于类初始化与实例初始化 当我们在创建一个实例对象时,这个对象的创建是按照怎样的规则被初始化的,或者说其各个属性及代码片段的初始化顺序是怎样的呢?这是面试的一个高频考点,也是作Java程序员的我们起码要掌握的知识。希望这篇文章在这方面能对你有所帮助。分析一个小问题首先我们来分析下面的程序将会运行出怎样的结
2020-12-02 23:14:37 306 2
转载 动态规划规律总结
动态规划规律总结1、动态规划解题三大步骤2、动态规划案例详解案例一:简单的一维 DP案例二:二维数组的 DP案例三:二维数组的 DP案例四:编辑距离 (较难懂,仔细看看)3、总结1、动态规划解题三大步骤动态规划,无非就是利用历史记录,来避免我们重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤。第一步:规定你这个数组元素的含义上面说了,定义数组元素的含义,我们会用一个数组,来保存历史记录 ,假设用一维数组 dp[]吧
2020-11-13 15:38:36 302 1
原创 【Java】在控制台打印 9 × 9 乘法表(带有边框效果)
9 × 9 乘法表(带有边框效果)代码打印结果在控制台打印出具有表的边框效果的 9 × 9 乘法表代码/** * 9 × 9 乘法表 */public class NineNineMultiTable { public static void main(String[] args) { System.out.println("——————————————"); for (int i = 0; i <= 9; i++) {
2020-08-18 12:37:43 676
原创 Maven项目相关jar包已导入,却仍抛出ClassNotFoundException异常的解决方案
Maven相关jar包已导入,却仍然抛出ClassNotFoundException的解决方案存在的问题解决方案第一步:打开Project Structure第二步:找到 lib 目录第三步:添加jar包到lib目录存在的问题有时候我们明明已经导入了相关jar包,在Maven项目中也显示存在该依赖,但是却依然抛出ClassNotFoundException异常。尝试导入其他版本,异常也未得到解决。在pom.xml中导入jackson的坐标:MavenProject显示该依赖已存在:却仍抛出
2020-07-29 10:28:56 3162 1
2020年Java各知识点综合面试题.zip
2020-12-10
毕业应届生入职公司选择
2021-08-24
Java后端开发转做Java游戏开发,对技术提升有帮助吗
2021-08-08
Java游戏开发和后端开发有什么区别
2021-08-08
查看RabbitMQ运行状态,出现如下信息,请问这是正确启动的吗。
2021-04-07
优化SQL语句,加快其执行速度
2020-10-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人