- 博客(131)
- 资源 (2)
- 收藏
- 关注
原创 设计模式——设计模式理念
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码高内聚、低耦合以及可重用(复用)性、可扩展(维护)性、可读性、可靠性以及安全性的解决方案。设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性以及类的关联关系和组合关系的充分理解。设计模式常用的七大原则(OOP七大原则)有:对类来说的,即一个类应该只负责一项职责;或对方法来说的,保证一个方法尽量做好一件事。如类 A 负责两个不同职责:职责1,职责2。当职
2025-03-30 18:53:17
877
原创 ZooKeeper 中的 ZAB 一致性协议与 Zookeeper 设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色)
ZooKeeper 中的 ZAB 一致性协议与 Zookeeper 设计目的、使用场景、相关概念(数据模型、myid、事务 ID、版本、监听器、ACL、角色)
2025-01-20 20:18:29
532
原创 分布式一致性CAP与BASE理论、分布式一致性协议和算法——2PC、3PC 和 Paxos算法
参考:分布式一致性理论——CAP与BASE分布式一致性理论——CAP与BASECAP 理论一致性(C:Consistency)可用性(A:Availability)分区容错性(P:Partition tolerance)AP 组合:放弃了数据一致性,保证可用性CP 组合:放弃了可用性,保证数据一致性BASE 理论基本可用(Basically Available)弱状态(Soft state)最终一致性(Eventually consistent)CAP 与 BASE 之间
2025-01-11 23:34:27
374
原创 线上问题——慢sql问题排查及优化思路
在 MySQL 中,可以通过修改配置文件(my.cnf或my.ini),设置slow_query_log = 1来开启慢查询日志,同时可以通过long_query_time参数设置慢查询的阈值(单位为秒,默认是 10 秒,可根据实际情况调整)。慢查询日志会记录执行时间超过阈值的 SQL 语句,以及这些语句的执行时间、扫描的行数、锁定的行数等信息。通过执行计划,可以了解到查询是如何访问表的(如全表扫描还是使用索引)、连接操作的类型、涉及的行数估计等信息,从而判断查询是否可以优化。
2024-12-22 20:00:00
997
原创 算法——排序算法(冒泡、选择、归并、堆排序)
排序算法——冒泡排序(Bubble Sort)排序算法——选择排序(Selection Sort)排序算法——插入排序(Insertion Sort)排序算法——堆排序(Heap Sort)排序算法——归并排序(Merge Sort)
2024-12-22 18:13:53
261
原创 线上问题——频繁 Full GC 问题的排查思路
启用 GC 日志分析 GC 日志内容选择合适的垃圾回收器调整垃圾回收器参数实时监控内存使用情况分析监控数据
2024-12-21 20:32:27
1469
原创 MySQL——MySQL 日志
参数文件(my.cnf / my.ini):MySQL的配置文件,包含服务器参数设置,如内存分配、连接数、字符集等;该文件通常在MySQL启动时读取;socket文件(.sock):用于进程间通信,允许客户端和MySQL服务器通过Unix套接字连接;TCP/IP 连接是通过网络协议进行的,适用于远程连接到MySQL服务器。这种方式用于客户端和MySQL服务器在不同的物理主机上时的连接。支持跨网络连接,可用于互联网或本地网络。
2024-12-01 18:10:44
1041
原创 MySQL —— explain 查看执行计划与 MySQL 优化
可能存在的问题:在 sort_buffer 中,因为是把所有字段都取出,所以有可能取出的数据的总大小超出了 sort_buffer 的容量,导致每次只能去 sort_buffer 容量大小的数据,进行排序(创建 tmp 文件,多路合并),排完再取 sort_buffer 容量大小,再排……索引嵌套循环连接是基于索引进行连接的算法,索引是基于内层表的,通过外层表匹配条件直接与内层表索引进行匹配,避免和内层表的每条记录进行比较, 从而利用索引的查询减少了对内层表的匹配次数,优势极大的提升了 join的性能。
2024-11-17 08:30:00
2171
原创 MySQL —— MySQL逻辑架构与查询过程
MySQL 提供了可插拔式的存储引擎,即 “插上什么存储引擎,就有什么功能”,存储引擎真正的负责了 MySQL 中数据的存储和提取,服务器通过 API 与存储引擎进行通信,不同的存储引擎具有功能不同。语法解析基于词法解析的结果,检查 SQL 语句的结构是否符合 MySQL 的语法规则,判断输入的这个 SQL 语句是否满足 MySQL 语法。接下来并不是直接执行,而是会在优化器这一层进行优化,优化器是个非常复杂的部件,它会按照它认为的最好的方式去优化这条 SQL 语句,并生成一条条的执行计划。
2024-11-14 21:22:51
1106
1
原创 MySQL —— MySQL基础概念与常用功能介绍
外连接查询将查询多个表中相关联的记录以及不匹配的记录。但有时候需要包含没有关联的行中数据,即返回查询结果集合中的不仅包含符合连接条件的行,还包括左表(左外连接或左连接)、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。复合条件连接查询是在连接查询的过程中,通过添加过滤条件,限制查询的结果,使查询的结果更加准确。
2024-11-13 22:51:21
1387
原创 MySQL —— Innodb 索引数据结构
B树就是一个节点可以拥有多于2个子节点的多叉查找树。叶子节点和非叶子节点都储存关键字和真实数据项,每个节点不仅用于索引,还包含实际的数据。因为非叶子节点要保存数据项,所以一个节点(块)能保存的索引少,相对于B+树访问磁盘IO时就多;B树是有序数组+平衡多叉树;B+树是基于B树来改进的。非叶子节点只存储关键字,用于索引搜索路径,而不存储实际的数据项,所有真实数据只存储在叶子节点中。
2024-11-08 08:30:00
1396
1
原创 线上问题——【面试题】Java 线上问题的一般排查思路
1、问题确认和信息收集2、快速响应3、日志分析4、监控数据分析5、网络分析6、数据库分析7、代码级别分析8、性能分析与监控工具使用9、复现问题10、根因分析11、解决方案12、验证和监控13、复盘和总结
2024-11-05 22:32:54
625
原创 JVM性能分析——jps/jstat/jinfo/jmap/jhat/jstack 命令、JConsole/JVisualVM/JProfiler 可视化工具与 Arthas 命令交互工具
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。开发人员可以在线解决生产问题,无需 JVM 重启,无需代码更改。Arthas 作为观察者永远不会暂停正在运行的线程。实时监控:可以动态查看 JVM 的运行状态,包括线程、内存、CPU等,其实就是包装了 jdk 的命令行工具,从而提供了丰富的命令集;
2024-11-02 13:08:06
930
原创 JVM性能分析——Java 内存模型(JMM)
Java 内存模型就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了 Java 程序在各种平台下对内存的访问都能保证效果一致的机制及规范。JMM 并不像 JVM 内存结构一样是真实存在的,而是一个抽象的概念,描述了一组规则或规范,专注于多线程环境中的内存访问规则,通过定义可见性、原子性、有序性等特性,确保多线程安全访问。
2024-10-22 08:30:00
1016
原创 Java 异步编程——异步编排(CompletableFuture)
CompletableFuture 是 JDK8 提出的一个支持非阻塞的多功能的 Future,提供了一种强大的异步编程模型,实现了 Future 接口;在使用 Future 的过程中,大家会发现 Future 有两种方式返回结果的方式CompletableFuture 接口提供了非常多的方法用于编排异步任务,基本每个方法都有两套实现,Async 版本的函数与非 Async 版本的函数。
2024-10-21 08:00:00
1953
原创 Java 异步编程——异步处理并发任务的执行结果(CompletionService)
CompletionService 是 Java 并发包中的一个接口,用于简化异步任务的处理。它结合了 Executor 和 BlockingQueue 的特点,允许你在执行多个异步任务时,以更方便的方式获取它们的结果。异步任务优化 CompletionService,它是 JUC(java.util.concurrent)包中的一个接口类,默认实现类只有一个ExecutorCompletionService。
2024-10-20 09:00:00
843
原创 Java 异步编程——多线程都执行完再继续执行主流程(使用 CountDownLatch 类或调用 ExecutorService 的 invokeAll() 方法)
在使用 ThreadPoolExecutor 执行多个任务时,有时需要等待所有任务完成后再执行下一步操作。可以使用 ExecutorService 的 invokeAll() 方法或者结合 CountDownLatch 来实现这一功能。两种方式都能有效地保证在所有线程完成任务后再执行后续操作,选择哪种方式取决于具体的使用场景和任务类型。
2024-10-19 10:09:50
2692
原创 Java 异步编程——常用线程池 ThreadPoolExecutor
默认情况下,只有当线程池中的线程数大于 corePoolSize 时,keepAliveTime 才会起作用,直到线程池中的线程数不大于 corePoolSize,即当线程池中的线程数大于 corePoolSize 时,如果一个线程空闲的时间达到 keepAliveTime,则会终止,直到线程池中的线程数不超过 corePoolSize。【注:每一个线程在获取锁的时候可能都会排队等待,如果在等待时间上,先获取锁的线程的请求一定先被满足,那么这个锁就是公平的。容量为0,不存储任何元素,即没有数据缓存的空间。
2024-10-18 22:54:15
1161
原创 Linux 命令—— ping、telnet、curl、wget(网络连接相关命令)
它通过向目标主机发送 ICMP(Internet Control Message Protocol)回显请求,并等待回复,以确定目标主机是否可达以及网络延迟的情况。curl 是一个用于与服务器进行数据传输的命令行工具,支持多种协议,包括 HTTP、HTTPS、FTP、SFTP 等。粘贴:Ctrl + Shift + V (在大多数终端中) 或使用 Shift + Insert。复制:Ctrl + Shift + C (在大多数终端中) 或使用 Ctrl + Insert。wget [选项] [URL]
2024-10-17 22:04:04
1947
原创 Linux 命令 —— grep、tail、head、cat、more、less(查看日志常用命令)
less 按需加载文件内容,只在需要时读取部分数据(这意味着当打开一个大文件时,它不会一次性读取整个文件),加载速度更快,尤其适合大文件。more 命令和 cat 的功能一样都是查看文件里的内容,但有所不同的是more可以按页来查看文件的内容,还支持直接跳转行等功能。-E:将样式为延伸的正则表达式来使用,是用于启用扩展正则表达式(ERE)的 grep 命令选项,这使得用户能够使用更复杂的模式匹配功能。-f 循环读取:实时跟踪文件的新增内容,持续输出文件的新内容,直到用户手动停止。用于监控日志文件的变化。
2024-10-15 22:34:25
3241
原创 IDEA 输入英文字体变了的问题
出现以上问题是因为在输入时切换了中文输入法,并且在提示文字时按了 Shift + 空格 键,导致出现以上字体变化情况。
2024-10-09 20:17:55
889
1
原创 JVM性能分析 —— CMS 老年代并发 GC 触发条件与压缩式 GC (升级为 Full GC)触发条件
触发条件二:用户请求式触发导致的 GCCause,就是 javalangsystemgc(即 System.gc())或者 jvmtiforce_gc(即 JVMTI 方式的强制 GC),意味着只要是 System.gc(前提没有配置 ExplicitGCInvokesConcurrent 参数)调用或者 JVMTI 方式的强制 GC 都会进行一次压缩式的 Full GC。如果设置为 true,当应用程序调用 System.gc() 时,CMS 收集器会触发一次并发 GC 收集,而不是 Full GC。
2024-08-27 20:38:15
1112
原创 Linux 命令 —— ps命令(快照查看进程信息)
常见的状态有 R: 正在运行,S: 可中断睡眠,D: 不可中断睡眠、Z: 僵尸进程,T: 已停止)、UID、PID、PPID、C、PRI、NI(进程的 nice 值。ps(processes snapshot)命令用于显示当前进程的状态信息,ps 命令查看的是当前进程的快照,即执行ps命令时那一时刻的进程状态快照,如果想要动态实时的显示进程信息,可以使用top命令。ps -F 输出 11 个字段:UID、PID、PPID、C、SZ、RSS、PSR、STIME、TTY、TIME、CMD。
2024-08-10 13:27:25
3690
原创 JVM性能分析 —— G1 日志分析
文章目录日志级别-XX:+PrintGC(简洁版)-XX:+PrintGCDetails(详细版)-XX:G1LogLevel=finest(非常详细版)YGC 日志并发标记日志Mixed GC 日志Full GC 日志日志级别JVM 日志级别中的 fine、finer 和 finest 这三个级别fine:JVM 配置参数为 -XX:G1LogLevel=fine 或使用 -XX:+PrintGC。用于输出一些常规性的信息,不会产生太多的日志输出。finer:JVM 配置参数为 -XX:
2024-08-09 19:03:45
1729
原创 JVM性能分析—— 一文带你读懂 G1 垃圾收集器收集流程
G1 设计目的在JVM 性能分析—— 一文带你读懂 CMS 垃圾收集器收集流程介绍了 CMS 垃圾收集器的工作流程,CMS 收集器的关注点是低延迟,尽可能缩短垃圾收集时用户线程的停顿时间,但在 JDK 9 之后,CMS 不推荐使用。取而代之是 Garbage First,即 G1 垃圾回收器,它除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指定在一个长度为 M 毫秒的时间片段内,消耗在垃圾收集上的时间不得超过 N 毫秒。
2024-07-28 21:46:50
2102
1
原创 JVM性能分析—— 一文带你读懂 CMS 垃圾收集器收集流程
在详细讲解 CMS 与 G1 垃圾收集器之前,先介绍其中的一些知识点,方便后续理解。
2024-07-27 15:57:59
2048
1
原创 elastic-job 定时任务 —— 失效转移、任务错过机制与幂等机制
若 overwrite=true,重启或者启动新的任务服务,相关配置会传到 zookeeper 注册中心中并覆盖掉之前的配置,会以最后一次启动上传的配置为准,所以以后任务执行时,都会从 zookeeper 中得到最新的配置执行。虽然失效转移能够重新执行分配给宕机的任务,但并不能完全保证业务的幂等性,还是建议在作业中实现幂等性,以确保数据的正确处理。第一次触发任务执行5分钟,第一次触发的任务还没有执行完就触发了第二次任务,此时第二次不会叠加执行,会先记录,等第一次任务执行完后接着再执行第二次触发的任务。
2024-07-17 23:08:21
1996
原创 Linux 命令 —— top命令(动态查看进程信息)
top 命令是 Linux/Unix 系统中常用的进程监控工具,可以实时显示系统中各个进程的资源占用情况,是一个快照信息,包括CPU、内存等。进入 linux 系统,直接输入 top,回车,就会显示如下所示的信息。1、第一行:时间上的统计top - 15:10:50:表示当前系统的时间是15:10:50;up 10 min:表示系统当前已经运行了10分钟。user:表示当前登录系统的用户数为1。
2024-07-14 17:34:19
14654
1
原创 线上问题——【面试题】Mybatis-plus 整合 ShardingSphere-JDBC,调用批量方法执行更新操作扫所有分表问题
记录下 ShardingSphere 整合 mybatis-plus 进行批量更新时扫所有分表问题的原因及解决方案。ShardingSphere 整合 mybatis-plus 与整合 mybatis 流程是一样的,一个是导入 mybatis 包,一个是导入 mybatis-plus 包,在介绍了 ShardingSphere 分布分表及整合 mybatis 的使用示例,这里就不在赘述整合使用过程了。
2024-07-13 17:25:03
2045
原创 elastic-job 定时任务 —— elasticjob 介绍与使用教程
Elastic-Job 是当当网开源的一个分布式调度解决方案,基于 Quartz 二次开发的,由两个相互独立的子项目 ElasticJob-Lite 和 Elastic-Job-Cloud 组成。ElasticJob-Lite 是一个轻量级无中心化的解决方案,它提供了分布式任务调度的核心功能,以 Jar 包的形式提供分布式任务的协调服务;
2024-07-07 11:33:09
4048
5
原创 mysql 命令 —— 查看表信息(show table status)
这些列提供了有关表的各种信息,包括表的结构、存储引擎、行数、数据大小、索引大小等。可以根据这些信息来评估表的磁盘使用情况和性能。如:Data_length 显示表中数据内容大小,单位为字节。如下将返回指定表的表名、数据大小、索引大小和总大小。
2024-07-02 22:39:17
2360
原创 JVM性能分析——jdk 自带命令分析工具(jps/jstat/jinfo/jmap/jhat/jstack)
在生产环境中,可以执行 jstat 命令,快速收集应用程序的运行数据,可以快速了解应用程序的运行状况,有助于在线上问题发生时进行快速诊断和分析。jhat 命令与 jmap 命令搭配使用,用于分析 jmap 生成的 heap dump 文件,通过 jhat 提供的 Web 界面,可以对内存快照进行交互式的分析和浏览。可以生成内存快照中的对象统计报告、分析内存快照中对象之间的引用关系、支持 Java 对象查询语言(OQL)等,可以帮助开发者快速定位内存泄漏等问题。也可以使用其他工具,如 jprofiler。
2024-06-16 12:03:26
2935
原创 JVM性能分析——JVM内存结构(运行时数据区)
每个 JVM 只对应一个 Runtime 实例,即运行时环境。类的加载 –> 验证 –> 准备 –> 解析 –> 初始化,这几个阶段完成后,就可以被 Java 虚拟机所使用。Java 虚拟机会使用到它的执行引擎 (Execution Engine) 来执行类中的字节码指令。执行引擎会利用 JVM 运行时数据区 (Runtime Data Area) 中的各种区域来支持字节码的执行,如程序计数器、虚拟机栈、本地方法栈、堆、方法区等。下面着重介绍运行时数据区,即JVM内存结构。
2024-06-12 09:25:24
1309
1
原创 贷款业务——LPR、APR、IRR
LPR、APR 和 IRR 是三个不同的金融术语,LPR 是一种市场利率指标,IRR 是衡量投资回报率的指标,APR 是表示贷款或信用卡的实际年化利率。
2024-06-11 21:53:07
8375
2
原创 Java 异步编程——Java内置线程池(Executor 线程池)
默认情况下,只有当线程池中的线程数大于 corePoolSize 时,keepAliveTime 才会起作用,直到线程池中的线程数不大于 corePoolSize,即当线程池中的线程数大于 corePoolSize 时,如果一个线程空闲的时间达到 keepAliveTime,则会终止,直到线程池中的线程数不超过 corePoolSize。线程管理部分是消费者,它们被统一维护在线程池内,根据任务请求进行线程的分配,当线程执行完任务后则会继续获取新的任务去执行,最终当线程获取不到任务的时候,线程就会被回收。
2024-05-31 16:24:17
1520
原创 操作系统——用户态与内核态、同步与异步、阻塞与阻塞
计算机系统中,通常 CPU 执行两种不同性质的程序代码:一种是操作系统内核程序(管理程序);另一种是用户自编程序(即系统外层的应用程序,或简称 “应用程序”)。CPU 运行这两种不同性质的程序,就是操作系统中最基本的两种运行模式:用户态和内核态。先来说一些废话程序执行目的就是操作计算机中的各种硬件资源,每个程序最终都会编程二进制语言来操作硬件,从而实现某种具体功能。这样一说,好像可以不用操作系统,每个程序自己就是操作系统了。行吗?肯定不行啊。应用程序大多是高级语言编写的,你会将高级语言编译成二进制语言吗?
2024-05-28 22:45:19
1393
原创 Java 异步编程——Java两级调度模型与内置线程调度器(Executor 框架)
任务提交阶段可以根据应用程序的需要灵活地控制任务的产生和提交,任务执行阶段则由 Executor 框架负责管理和调度线程的执行,从而实现更高的并发性能和更好地利用系统资源。Executor 框架是 Java 5 引入的一套用于异步任务执行的API,提供了一种简化线程管理和任务执行的方式,将任务的提交和执行分离开来。任务执行阶段:在任务执行阶段,Executor 根据线程池的配置和调度策略,从它管理的线程池中分配一个空闲线程来执行任务。任务执行完成后,线程会被返回到线程池中,等待被再次分配执行新的任务。
2024-05-26 16:51:58
1321
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人