- 博客(27)
- 收藏
- 关注
原创 复杂Select的执行流程
SQL中复杂SELECT语句的执行流程遵循特定逻辑顺序:1) 先执行FROM和JOIN确定数据源;2) 用WHERE过滤行数据;3) 通过GROUP BY分组和HAVING过滤组;4) 处理ORDER BY排序;5) 最后执行SELECT和LIMIT。关键点包括:JOIN操作产生笛卡尔积后按条件过滤,WHERE在分组前执行而HAVING在分组后生效,聚合函数需配合GROUP BY使用。优化建议涉及合理使用索引、提前过滤数据、避免相关子查询等。实际执行可能被数据库优化器调整,可通过EXPLAIN分析执行计划。
2025-06-06 22:39:02
694
原创 MySQL--SELECT 执行机制
MySQL 的 SELECT 查询执行过程分为多个阶段,从解析 SQL 到返回结果,涉及查询优化、执行计划生成、数据检索等环节。
2025-06-06 22:14:33
635
原创 Redis缓存问题与解决方案
缓存问题解决方案摘要:针对缓存穿透,推荐使用布隆过滤器拦截无效请求并缓存空值;缓存击穿可通过分布式锁防止并发重建;缓存雪崩建议分散过期时间并采用多级缓存。分布式环境需考虑数据分片(如Redis Cluster)和高可用方案(如哨兵模式)。监控重点包括命中率、延迟和内存使用,推荐使用Prometheus+Grafana等工具。不同业务场景需平衡CAP特性,金融系统侧重一致性,互联网场景优先可用性。
2025-06-06 09:12:35
1059
原创 SpringBoot+MybatisX快速搭建表基础功能
摘要:本文介绍如何使用Spring Boot和MyBatisX快速实现CRUD功能。主要内容包括:1) 开发环境准备;2) SpringBoot项目初始化及必要依赖配置;3) 数据库表设计与创建;4) MyBatisX插件使用指南,包括自动生成代码;5) 控制器层RESTful接口实现;6) 接口测试验证方法。文章还提及了后续优化方向,如整合MyBatis-Plus简化代码、实现分页查询和事务管理等扩展功能,为开发者提供了完整的快速开发解决方案。
2025-06-05 23:27:19
428
原创 深度解析Java中String类的优化场景
在Java开发中,String类的使用频率极高,但你是否真正了解其底层优化机制?从字符串常量池的巧妙设计到JVM的编译期优化,String类隐藏了许多提升性能的关键细节。本文将深入剖析String的内存模型、intern()方法的应用场景,以及JDK对字符串拼接的优化策略。通过实际案例分析,揭示如何避免常见的内存浪费问题,同时结合JVM字节码分析,展示String在性能敏感场景下的最佳实践。无论你是初学者还是资深开发者,这些知识都能帮助你写出更高效、更优雅的Java代码。
2025-06-05 16:17:06
470
原创 Java常用类API--字符串类
Java字符串类以不可变性为核心特性,确保线程安全、哈希稳定及缓存优化。字符串常量池机制通过复用字面量提升性能。StringBuilder和StringBuffer提供可变字符串操作,前者适用于单线程,后者通过同步方法保证多线程安全。常用方法包括字符串截取、拼接、正则匹配等。开发中应根据线程需求选择:单线程优先用StringBuilder,多线程共享数据时选用StringBuffer。不可变字符串设计简化了程序逻辑,而可变字符串类优化了频繁修改场景的性能。
2025-06-05 16:04:23
915
原创 深入理解RPC机制
RPC(远程过程调用)是一种计算机通信协议,让程序能像调用本地方法一样调用远程服务,隐藏网络细节。它解决了分布式系统中服务间通信的复杂性,适用于微服务架构、跨语言集成等场景。实现自定义RPC框架需设计协议层(序列化)、网络传输层(Socket/Netty)、动态代理等核心组件,并可优化性能(高效序列化、连接复用)、稳定性(服务发现、容错)和可观测性(追踪、监控)。通过优化协议设计和支持多协议转换,可进一步提升RPC框架的效率和灵活性。
2025-06-04 19:54:27
685
原创 MySQL的常用函数
本文全面介绍MySQL常用函数,涵盖数值处理、字符串操作、日期时间、聚合、条件判断、系统信息和高级功能。主要内容包括: 数据类型处理:转换函数,处理函数,以及最大值最小值函数 字符串操作:拼接、截取、修剪、替换、长度计算和大小写转换;数值处理:四舍五入、截断、绝对值、取整、取模和随机数;日期时间:当前时间获取、格式化、日期差值计算和日期加减;高级功能:JSON处理函数和窗口函数。文章提供具体语法和示例,适合快速查询各类MySQL函数用法。
2025-06-04 19:36:38
862
原创 Java开发中的简洁行为--Stream流式编程
Java Stream API 是现代Java开发中简化集合操作的重要工具。它通过流水线式操作替代传统循环,提供filter、map、sorted等中间操作和collect、forEach等终端操作,大幅提升代码简洁性。高效使用Stream需掌握方法引用、并行流优化等技巧,同时注意避免状态共享、流重用等问题。典型应用场景包括数据过滤转换(如.map())、聚合统计(如.reduce())和分组分区(如.collect()),相比传统方式可减少50%以上代码量。开发者应权衡并行流收益,合理使用短路操作,并选择
2025-06-01 14:50:24
1092
原创 JVM--深入理解GC机制(对象晋升)
GC是垃圾收集(Garbage Collection)的缩写,是一种自动内存管理机制,用于自动检测和清除程序中不再需要的内存资源,以防止内存泄漏和提高程序性能。自动管理内存,释放不再使用的对象,防止内存泄漏。减少开发人员对内存管理的负担,提高开发效率。提高程序执行效率,避免频繁的内存分配和释放操作。
2025-05-31 16:16:08
769
原创 MySQL优化--索引
本文介绍了MySQL索引的基本概念、分类和优化方法。索引是一种提高查询效率的数据结构,但会占用空间并降低写操作性能。索引按存储结构分为B+树、Hash、全文和空间索引;按作用分为主键、单值、唯一和复合索引。优化方案包括根据业务场景选择索引类型、遵循最左前缀原则,并避免索引失效情况(如使用函数、模糊查询等)。文章还介绍了EXPLAIN命令的使用方法和ANALYZE TABLE维护操作,帮助优化查询性能。
2025-05-31 14:31:28
957
原创 Shell脚本语言--进阶语法之函数
在Shell编程中,函数是实现模块化编程、提高代码复用性和可维护性的重要工具。函数的定义和调用遵循特定语法,可以接收参数并返回数值。参数传递可通过$1、$@、$*等变量实现,方便在函数内部获取并处理参数。函数内部的变量默认是全局作用域,但可以用local关键字声明为局部。通过合理使用函数,可以使代码更清晰、更易维护。要注意,在函数内部输出的值需要合理处理,例如通过捕获输出并赋值给变量。这样可以确保函数的执行结果得到正确处理和利用。
2025-05-30 10:35:32
92
原创 Shell脚本语言--进阶语法之流程控制
本文主要介绍Shell脚本中的流程控制语法,包括判断、选择和循环结构。判断逻辑使用test命令或方括号[]实现,支持数值比较、类型和权限判断。选择结构包含if-else和case语句,通过示例展示年龄分段和数字匹配的应用。循环结构涵盖for、while和until三种形式,并说明break和continue控制语句的用法。文中通过累加求和等实例,演示了不同循环结构的实现方式及let运算指令的应用,为Shell脚本编程提供了实用的流程控制方法。
2025-05-30 10:34:42
159
原创 Shell脚本语言--基础语法
Shell脚本语言作为一种功能强大的工具,在日常运维、系统管理和开发工作中具有广泛应用。通过编写一系列命令的脚本程序,可以实现任务的自动化操作,例如定时任务调度、批量处理和环境配置。在Shell脚本的基础语法中,变量的定义与使用是关键,同时输入输出操作也十分常见。良好的注释和规范的代码风格有助于提高代码可读性和可维护性。掌握Shell脚本技术可以提高工作效率和生产力。
2025-05-30 10:34:11
266
原创 Shell脚本--定期归档
本文介绍了如何使用Shell脚本实现自动化文件归档并设置定时任务的方法。主要内容包括:1)编写归档脚本,包含参数校验、目录处理和tar压缩功能;2)配置cron定时执行任务,详细讲解cron表达式语法;3)进阶配置技巧,如环境变量设置和日志管理;4)常用命令汇总和常见问题排查指南。通过这套方案,可以轻松实现重要文件的定期自动备份,提高系统管理效率。文中提供了完整的脚本代码和实用配置示例,方便读者直接应用。
2025-05-30 09:11:11
647
原创 Java开发中的简洁行为--Optional判空
本文介绍了Java 8引入的Optional类在解决空指针问题上的应用。Optional作为一个容器类,能强制开发者显式处理可能为null的值。文章对比了传统嵌套判空方式和Optional的链式调用方式,展示了后者更简洁优雅的特点。同时指出了Optional的使用场景(如方法返回值、链式调用)和应避免的场景(如方法参数、类字段),并提醒在性能关键路径中需谨慎使用。通过示例代码演示了如何用Optional优化多层判空逻辑,使代码更简洁清晰。
2025-05-29 17:39:46
396
原创 JVM优化策略
本文系统介绍了JVM优化策略,涵盖内存分配、GC调优和代码优化三个层面。内存优化包括合理设置堆大小、新生代比例和Survivor区;GC调优涉及关键参数配置、算法选择和预防措施;代码优化则聚焦资源释放、对象复用和锁机制使用。针对不同场景推荐了Serial、Parallel、CMS、G1、ZGC等垃圾回收器,并分析了各自的优缺点。文章强调参数需结合实际业务调整,建议通过监控和日志分析进行针对性优化。
2025-05-29 10:34:39
1302
原创 线上JVM排查与优化
本文介绍了线上JVM常见问题及排查方法。主要工具包括JDK内置的jps、jstat、jmap、jstack和jcmd,以及可视化工具VisualVM、MAT和Arthas。重点分析了CPU使用率高、OOM、GC问题和线程阻塞等问题的解决步骤:如使用jstack分析高CPU线程,jmap生成堆转储排查OOM,jstat监控GC情况优化内存参数,以及通过线程栈分析死锁。文章还提供了GC日志分析建议和启动参数配置,帮助开发者快速定位线上JVM问题。
2025-05-29 10:03:53
931
原创 MySQL优化--深分页
数据库查询中的高 offset 值会强制引擎扫描并跳过大量数据行,即使最终只返回少量结果。深分页指的是在分页查询数据时,访问靠后的页码(如第1000页),通常涉及大量数据的偏移量计算(如。跳过前N条记录,数据库仍需扫描并临时存储这些被跳过的数据,导致资源浪费。实际执行时,数据库会先读取10010条记录,再丢弃前10000条,效率极低。,数据库必须遍历所有满足条件的记录,计算行号后才能跳过偏移量。跳过 offset 行:从结果集的起始位置开始,逐行跳过。常见场景:大数据量分页查询(如第1000页以后的数据)
2025-05-29 08:40:01
375
原创 常用的Linux命令
文件目录类:ls、cd、mkdir、cp、rm;权限与组:chmod、chown、useradd;网络配置:ifconfig、ping、netstat;服务管理:systemctl;VIM编辑器:基础模式与常用操作(i、:wq)。涵盖系统操作核心场景。
2025-05-29 07:02:20
724
原创 缓存一致性解决方案
而在更新缓存(缓存已存在,但需更新)时,这又是一个新的问题:到底是查到并更新还是直接删除在写缓存呢?这个问题是最令人头疼的,网上很多人吵的喋喋不休。设计思想:引入消息队列,最大的是利用异步,以及提供的生产消费模型、死信队、重试等机制,保障我们的更新缓存或DB操作的性能与安全,保证了最终一致性。设计思想:透写缓存体现了强一致性,但过多依赖缓存层的实现(需要保证同步同时容忍一定程度的性能损耗),需要技术过硬的程序员。设计思想:引入分布式锁,保证了在分布式场景下操作时,对操作加锁,体现数据强一致性。
2025-05-28 14:16:58
281
原创 高效缓存模式:提升性能与一致性的实战指南
很多时候我们对一些热点数据的处理,一想到就是作缓存的时候,是否思考过一个问题。那就是如何保证我们加了缓存后,与之带来的一致性问题与DB负载,甚至是编码的投入比、系统的复杂度等等。我们需要保证首先对缓存的交互,所以适用的场景是读多写少):用户信息、商品详情、广告推荐等。接下来会讲缓存模式的运用,有兴趣的小伙伴可以支持一下,你们的支持就是我的动力!四、Write-Back/Write-Behind写后缓存。三、Write-Through透写缓存。商品数据、用户会话等。
2025-05-28 13:21:13
365
原创 深度剖析Java的设计模式--单例模式
成功表示当前类不存在实例。二次判空表示,当前线程是否存在实例,若无实例则创建。:学过JVM的应该都知道类的加载机制,静态内部类只有在使用时才会被加载,回到设计模式中,我们在获取时才调用内部类,保证了。:通过无锁方式,结合了静态内部类的延迟加载特性和JVM类加载机制的线程安全性,零性能损耗实现Java单例模式的最佳实践。关键字,保证了除去实现基本单例功能外,对实例的维护以及可读性,得到了保证。做到了极致,且线程安全,第一次创建实例才加锁,效率高。我们都知道,类在加载时是线程安全的,JVM保证了类。
2025-05-28 12:46:04
371
原创 SpringBoot应用部署到Linux可能存在的问题:三
承接上文,我们已经完成了后端服务搭建到Linux上,我们需要前端来访问。由于本人对前端知识一知半解,在网络上查到配套项目的Nginx实例(已经搭建完毕前端的实例),目录结构如下接下来,我们需要配置Nginx做反向代理,即可竣工!思路:我们学习Nginx并且使用,其实最重要的是懂如何配置,所以Nginx又叫配置机器(bushi)首先,我们需要确定的是,Nginx作为反向代理服务器,将前端请求转发到后端服务。如何生效的,答案是配置。
2025-05-28 11:57:44
503
原创 SpringBoot应用部署到Linux可能存在的问题:二
2.打包错误并报错ServerEndpointExporter:考虑是否存在嵌入式容器如Tomcat等,如果不存在,需要手动添加组件。接着,服务已经搭建完毕,通过上传jar包到Linux,随后通过java -jar 编译jar包,即可启动服务。1.服务Java编译语言版本较高,与Linux的JDK版本不兼容,同时无法更改环境变量从而引起的问题。升级Linux的JDK版本,并直接切换至安装目录,使用/bin打包(无需解决环境变量问题)。注意:API前缀问题,是否ping通,防火墙,网络连接模式等。
2025-05-28 11:23:03
569
原创 SpringBoot应用部署到Linux可能存在的问题:一
背景:很多小伙伴们在Windows上自学Java语言,很多服务为了方便部署都部署在了Windows上,本人也如此。昨天心血来潮想部署在Linux上玩一玩(bushi),正好可以练一下Linux操作命令,还可以学一下Nginx配置等一些知识点,从而提高我们的核心竞争力。防火墙设置:确保Windows防火墙允许MySQL的端口(默认为3306)通过,以便从远程主机访问。创建远程连接的数据库用户:使用以下命令在MySQL中创建一个允许远程连接的用户,并授予访问权限。,通常位于MySQL安装目录下的。
2025-05-28 10:50:55
352
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人