- 博客(37)
- 资源 (1)
- 问答 (5)
- 收藏
- 关注
原创 SQL调优:记一次慢查询导致的线上事故排查
向下继续去翻监控盘,InnoDB Buffer Pool的指标异常比较可疑,并且其他指标都没有显著异常,这证明接收的请求没有明显变化。在节点式应用兼容版本中已经拆分成8个子表的image表新增了两个字段,其中result字段默认值为1,并且目前几乎所有已有的查询条件都需要补充“result = 1”的过滤条件。当使用了where语句,SELECT COUNT(*) 时可能仍会读取全部数据,刚好Buffer Pool不存在这些数据,这就导致查询进行大量磁盘IO,导致CPU、磁盘IO升高。
2025-02-24 15:02:59
826
原创 【业务分享】基于Redis的Feed流“读写扩散”方案实现
当一个非活跃的用户突然登录刷Feed流时,我们一方面需要读他的收件箱,另一方面需要遍历他所关注的大V用户的发件箱提取帖子,并且做一下聚合展示。收件箱:存储于非关系型数据库,此处使用Redis,使用 Sorted Set 基于创建时间进行排序,score:timestamp * (10^19) + ${user_id},value存储:${feed_id}(timestamp 为秒级时间戳,与 partition_post 表 publish_date 一致)
2025-02-23 23:30:09
1013
原创 【开源项目】分布式文本多语言翻译存储平台
文本多语言翻译与存储服务,支持集群部署:文本多语言翻译存储服务客户端,采用轮询策略:文本翻译结果控制台,支持对翻译结果的修改(todo):客户端应用示例。
2025-02-20 13:03:05
1020
1
原创 JVM:常用的垃圾收集器与调优技巧
垃圾收集器(Garbage Collector, GC)是Java虚拟机(JVM)中的一个关键组件,它自动地管理和释放不再使用的对象所占用的内存空间。这样可以防止内存泄漏,并简化了开发者的编程任务。
2024-12-02 18:03:39
1168
原创 学习笔记:Spring框架源码Part.2——核心
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
2024-10-31 11:32:33
516
原创 学习笔记:ElasticSearch搜索引擎
Elastic表示可伸缩、灵活的意思。结构化数据:按特定结构和组织管理数据,一般表现为二维表结构(比如用户数据,包括用户姓名、年龄、身份证号)。可以保存到关系型数据库(MySQL、Oracle),优点是方便管理和查询,缺点是扩展难非结构化数据:无法用二维表结构表现的数据(如服务器日志、通信记录、文档、报表、视频、图片等)。维度广数据量大,数据存储查询成本大,需要专业人员和大量统计模型进行处理,一般会将这类数据存储于NoSQL数据库中(MongoDB、Redis、Hbase),一般按KV结构进行保存。
2024-10-31 11:32:03
543
原创 学习笔记:微服务技术栈(一)服务治理框架SpringCloud
单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。适合小型项目,如:学生管理系统优点:架构简单,部署成本低;缺点:耦合度高分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。适合大型互联网项目,如:淘宝、京东优点:服务耦合度低,有利于服务升级拓展;缺点:架构复杂,开发维护难度大微服务单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,避免重复业务开发面向服务:微服务对外暴露业务接口高度自治:团队独立、技术独立、数据独立、部署独立。
2024-10-31 11:26:43
1011
原创 学习笔记:Netty网络编程框架
现在的互联网环境下,分布式大行其道,而分布式系统的根基在于网络编程,Netty恰恰是Java网络编程领域的王者。使用Netty开发基本网络应用程序彻底理解阻塞、非阻塞区别,并将NIO与Netty的编码相互联系懂得多路复用在服务器开发时的优势,为什么在此基础上还要使用多线程Netty 中是如何实现异步的?异步处理的优势是什么?Netty 中是如何管理线程的?EventLoop如何运作?Netty 中饰如何管理内存的?ByteBuffer特点与分配时机。
2024-10-31 11:26:20
1032
原创 Nacos多AZ集群断网演练测试
开启4个线程发起RPC调用5min,在此期间启动E区所有Nacos节点,观察RPC调用是否正常,(测试断网后、网络恢复过程中、网络恢复后,RPC情况)Nacos集群在某些节点下线一段时间后,再次上线这些节点,Raft主节点内存会骤升至一个高度(主节点内存增加量 ≈ 下线节点启动前后内存变化量)在Nacos集群某些节点下线重启后,服务state显示为“UP”,但实际不可用,无法正常注册服务到该节点。再次注册服务实例5个,服务监听2个,运行脚本查看注册情况(测试断网后,服务注册情况)
2024-08-09 17:55:18
889
原创 分布式系统事务一致性解决方案(基于事务消息)
事务消息是 Apache RocketMQ 提供的一种高级消息类型,支持在分布式场景下保障消息生产和本地事务的最终一致性。
2024-04-28 11:47:28
1544
原创 面试题:分布式消息中间件 MQ
如果使用MQ,系统A不再是直接发送SQL到数据库,而是把数据发送到MQ,MQ短时间积压数据是可以接受的,然后由消费者每次拉取1000条进行处理,防止在请求峰值时期大量的请求直接发送到MySQL导致系统崩溃。这时,系统D不需要了,那就需要在系统A把相关的代码删掉。使用了 MQ 之后,限制消费消息的速度为1000,这样一来,高峰期产生的数据势必会被积压在 MQ 中,高峰就被“削”掉了,但是因为消息积压,在高峰期过后的一段时间内,消费消息的速度还是会维持在1000,直到消费完积压的消息,这就叫做“填谷”。
2024-04-26 23:18:19
1380
3
原创 Java中的类加载器、双亲委派、SPI机制
平时做业务开发比较少接触类加载器,但是如果想深入学习Tomcat、Spring等开源项目,或者从事底层架构的开发,了解甚至熟悉类加载的原理是必不可少的。Java的类加载器有哪些?什么是双亲委派?为什么要双亲委派?如何打破它?多多少少对这些概念了解一些,甚至因为应付面试背过这些知识点,但是再深入一些细节,却知之甚少。JVM 并不是在启动时就把所有的.class文件都加载一遍,而是程序在运行过程中用到了这个类才去加载。
2023-08-04 16:24:40
658
原创 学习笔记:分布式消息队列RabbitMQ
简单模式 HelloWorld:一个生产者、一个消费者,不需要设置交换机(使用默认的交换机)。工作队列模式 Work Queue:一个生产者、多个消费者(竞争关系),不需要设置交换机(使用默认的交换机)。发布订阅模式 Publish/Subscribe:需要设置类型为 fanout 的交换机,并且交换机和队列进行绑定,当发送消息到交换机后,交换机会将消息发送到绑定的队列。
2023-08-02 09:39:43
483
原创 源码:JDK8并发工具类ConcurrentHashMap底层源码解读
是JUC包下的一个线程安全类,并非锁住整个方法,而是通过原子操作和局部加锁的方法保证了多线程的安全访问,且尽可能地减少了性能损耗。
2023-07-03 22:36:05
439
原创 Java服务生产环境下的问题排查
在生产环境中,我们无法通过断点调试、新增log、可视化工具去立马查看当前的运行状态和拿到错误信息,此时,借助Java自带的命令行工具以及相关dump分析工具以及一些小技巧,可以大大提升我们排查问题的效率。
2023-06-22 14:38:51
716
原创 学习笔记:深入理解高性能代理服务器——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
8303
1
原创 MySQL:从页的角度分析innodb索引B+树
B+树叶子和非叶子结点的数据页都是16KB,且数据结构一致,区别在于叶子节点放的是真实的行数据,而非叶子结点放的是主键和下一个页的地址。B+树一般有两到三层,由于其高扇出,三层就能支持2kw以上的数据,且一次查询最多1~3次磁盘IO,性能也还行。存储同样量级的数据,B树比B+树层级更高,因此磁盘IO也更多,且范围查询效率低,所以B+树更适合成为mysql索引。索引结构不会影响单表最大行数,2kw也只是推荐值,超过了这个值可能会导致B+树层级更高,影响查询性能。
2023-05-04 16:38:41
202
原创 Redis:常用集群模式及其实现原理
在服务开发中,单机都会存在单点故障的问题,即服务部署在一场台服务器上,一旦服务器宕机服务就不可用,所以为了让服务高可用,分布式服务就出现了,将同一服务部署到多台机器上,即使其中几台服务器宕机,只要有一台服务器可用服务就可用。Redis也是一样,为了解决单机故障引入了主从复制,但主从模式存在一个问题:master节点故障后服务,需要人为的手动将slave节点切换成为maser节点后服务才恢复。Redis为解决这一问题又引入了哨兵模式。
2023-05-02 10:12:55
373
原创 学习笔记:JVM知识体系(下)——类文件结构、类加载、类加载器
双亲委派模型是描述类加载器之间的层次关系。它要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器。(父子关系一般不会以继承的关系实现,而是以组合关系来复用父加载器的代码)
2023-04-04 13:27:17
161
原创 学习笔记:JVM知识体系(上)——内存结构、虚拟机对象、垃圾回收、内存分配、调优
程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此时程序计数器为Undefined。Java 虚拟机栈是描述 Java 方法运行过程的内存模型。局部变量表操作数栈动态链接方法出口信息本地方法栈是为 JVM 运行 Native 方法准备的空间,由于很多 Native 方法都是用 C 语言实现的,所以它通常又叫 C 栈。它与 Java 虚拟机栈实现的功能类似,只不过本地方法栈是描述本地方法运行过程的内存模型。
2023-04-04 10:36:49
303
原创 面试题:Spring框架知识点
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。Spring Context:提供框架式的Bean访问方式,以及企业级功能(JNDI、定时任务等);Spring Core:核心类库,所有功能都依赖于该类库,提供IOC和DI服务;Spring AOP:AOP服务;
2023-04-02 23:27:35
251
原创 学习笔记: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
1161
原创 学习笔记:云原生容器化技术——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
1235
原创 MySQL知识体系——日志支持
MySQL知识体系 —— SQL优化一、SQL 优化简介1、解释:对于特定的要求,使用更优的 SQL 策略 或索引策略,以达到让结果呈现的时间更短,从而提升操作效率的过程就是 SQL 优化;2、SQL 优化包含在数据库级别优化中。我们平常所说的 SQL 优化就是指优化 SQL 语句和索引;3、SQL 优化是伴随着业务而进行优化的,并不是下面的所有操作必须都达到才是最好的优化。二、常规调优思路(众多解决方案之一)1、查看 slow-log,分析出查询慢的语句;2、按照一定优先级,一个一个的排查所
2021-08-17 23:15:45
173
原创 MySQL知识体系——存储引擎
MySQL知识体系 —— 存储引擎一、MySQL 数据库引擎简介1. ISAM(Indexed Sequential Access Method) ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM 执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够容错。如果你的硬盘崩了,那么数据文件就无法恢复了。如果你正在把 ISAM 用在关键任务应用程序里,那就必须经
2021-07-26 09:03:06
256
原创 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
415
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
406
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
870
原创 问题解决-项目启动到一半突然卡住不动
问题解决-项目启动到一半突然卡住不动今天写完一个业务准备用postman调试,出错改完bug后再次启动,发现日志打印到一半不再往下走了尝试了各种解决办法:重新导入项目、删除target目录、重启IDE,都没得到解决。最后查百度,终于找到了解决办法解决方案打开项目所在目录(右击项目目录,点击Show in Explorer)删除目录下 .idea文件最后重新导入项目,再次启动项目就不会再卡住了。...
2020-12-15 11:37:39
3199
1
原创 循环队列的原理与代码实现
循环队列的实现动态数组队列循环队列与其实现原理循环队列的代码实现动态数组队列 队列的实现有很多种方式,可以通过底层数据结构链表和数组来实现,甚至是栈也可以实现队列。其中,通过动态数组实现的队列,它的入队操作的时间复杂度为O(1),出队时间复杂度为O(n)(或出队为O(1);入队为O(n)。只是相对于出入队操作是在数组的头还是尾而言),而在出入队时,还可能会引发缩容扩容,这又是一个时间复杂度为O(n)的操作。所以说,通过动态数组这种伪动态线性数据结构实现
2020-12-10 12:16:05
459
原创 类初始化与实例初始化过程分析
类初始化与实例初始化关于类初始化与实例初始化分析一个小问题类初始化与实例初始化类初始化实例初始化问题分析另一个问题关于类初始化与实例初始化 当我们在创建一个实例对象时,这个对象的创建是按照怎样的规则被初始化的,或者说其各个属性及代码片段的初始化顺序是怎样的呢?这是面试的一个高频考点,也是作Java程序员的我们起码要掌握的知识。希望这篇文章在这方面能对你有所帮助。分析一个小问题首先我们来分析下面的程序将会运行出怎样的结
2020-12-02 23:14:37
352
2
转载 动态规划规律总结
动态规划规律总结1、动态规划解题三大步骤2、动态规划案例详解案例一:简单的一维 DP案例二:二维数组的 DP案例三:二维数组的 DP案例四:编辑距离 (较难懂,仔细看看)3、总结1、动态规划解题三大步骤动态规划,无非就是利用历史记录,来避免我们重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤。第一步:规定你这个数组元素的含义上面说了,定义数组元素的含义,我们会用一个数组,来保存历史记录 ,假设用一维数组 dp[]吧
2020-11-13 15:38:36
512
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
801
原创 Maven项目相关jar包已导入,却仍抛出ClassNotFoundException异常的解决方案
Maven相关jar包已导入,却仍然抛出ClassNotFoundException的解决方案存在的问题解决方案第一步:打开Project Structure第二步:找到 lib 目录第三步:添加jar包到lib目录存在的问题有时候我们明明已经导入了相关jar包,在Maven项目中也显示存在该依赖,但是却依然抛出ClassNotFoundException异常。尝试导入其他版本,异常也未得到解决。在pom.xml中导入jackson的坐标:MavenProject显示该依赖已存在:却仍抛出
2020-07-29 10:28:56
5215
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关注的人