自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(732)
  • 收藏
  • 关注

原创 MySQL的JSON_函数总结

以上我们了解了MySQL的常见json函数及用法,以及json_table()的使用场景和用法,虽然易读易用性不高,但对于一个存json内容的场景很有用。

2025-10-27 20:17:50 683

原创 什么是MySQL分区?

当数据库服务器因日常使用性能开始下降时,有多种优化选项可以帮助改善性能。一种常见的MySQL数据库优化方法是。本文将介绍MySQL分区的基础知识,如何在数据库中应用分区,以及它与的关系。

2025-10-27 19:54:04 680

原创 为超过10亿条记录的订单表新增字段

原因说明1. 不读数据不扫描 .ibd 文件,不 touch 任何数据页2. 不写数据不修改任何数据行,不产生 Redo/Undo3. 只改元数据仅更新数据字典(内存 + 少量日志)4. 无 I/O 压力磁盘、CPU、内存消耗几乎为零5. 锁粒度极小仅短暂持有 MDL(元数据锁),毫秒级gh-ost 的本质:用“数据迁移”绕过 MySQL DDL 的锁与重建问题。即使系统每秒写入 1 万条订单不锁表不丢数据最终一致安全完成 10 亿级大表变更。

2025-10-27 19:49:54 999

原创 这20条SQL优化方案,让你的数据库查询速度提升10倍

SQL优化不是一蹴而就的,需要持续观察、分析和调整。索引是利器,但同时也要用对地方。

2025-10-27 19:41:07 626

原创 建了索引还是慢?索引失效原因有哪些?这10个坑你踩了几个

其实写代码跟做人差不多。建了索引,不一定能跑得快。方向不对,优化器再聪明也没用。人生可能也一样,选错路了,再怎么努力都白搭。希望咱们都能找到自己的最左前缀吧。好了,不早了,今天就这样。下次见。

2025-10-27 19:29:41 664

原创 聊聊Java里的那把锁:ReentrantLock到底有多强大?

说实话,在平时的开发中,synchronized确实能满足80%的需求。但当你需要更细粒度的控制,比如可中断的锁获取、超时机制、多个条件变量时,ReentrantLock的优势就体现出来了。不过也要注意,能力越大责任越大。ReentrantLock用起来比synchronized复杂,需要手动加锁解锁,要是忘了解锁,那问题就大了。所以我的建议是:先用synchronized,当它真的不够用时,再请出ReentrantLock这把利器。毕竟,合适的工具用在合适的场景,才是最好的编程实践。

2025-10-24 22:06:27 376

原创 见过哪些醍醐灌顶的Java代码:从“卧槽“到“原来如此“的顿悟

看完这些例子,你可能会说:"卧槽,原来代码还能这么写!但我想说,这只是冰山一角。编程就像修行,每一次顿悟都是一次成长。所以,下次写代码的时候,不妨多想想:这段代码十年后还有人愿意维护吗?如果答案是肯定的,那你就是真正的编程大师了。"代码不是写给机器看的,是写给下一个维护你的人看的——而那个人很可能就是未来的你。

2025-10-24 22:05:04 291

原创 35岁程序员失业了,除了送外卖,还能做什么?

35岁程序员失业,确实是一个非常大的挑战。但危机中或许也会藏着新的机遇。重要的是,捕蝇自暴自弃,认证找准自己的方向,然后坚定的走下去。任何行业的路都不好走,只要你能保持学习的热情,不断的提升自己,年龄就不是问题。35岁,不是终点,而是新的起点。

2025-10-24 22:02:53 373

原创 MySQL 表新增字段时报丢失连接错误

使用Navicat for MySQL执行该语句会报一个错误,如下图所示:2013 - Lost connection to MySQL server during query,翻译过来就是在查询过程中,MySQL服务器失去连接。该问题是大约一年前遇到的(2020年我写的文章),最近整理笔记看到了,趁有时间做一些整理记录。但是当时的具体环境已经无法复现了。

2025-10-24 21:04:27 903

原创 MySQL 关于视图的简单学习和使用

视图是一种简单的数据查询机制。不同于表,视图不涉及数据存储,不用担心视图会占满磁盘空间。创建视图,就是将一个查询结果保存为一个虚拟表,这个虚拟表可以执行。创建视图可能出于各种理由,比如对用户隐藏列、简化数据库设计等原因。简单来说视图其实就是保存了创建视图时的SELECT语句,通过视图查询数据其实最终查询的还是表,所以表中的数据变动,通过视图查询的结果也会相应的变化。

2025-10-24 20:46:34 532

原创 Redis客户端缓存的4种实现方式

Redis客户端缓存是提升应用性能的强大工具,通过减少网络请求和数据库访问,可以显著降低延迟并提高吞吐量。在实际应用中,这些策略往往不是相互排斥的,而是可以组合使用,针对不同类型的数据采用不同的缓存策略,以获得最佳性能和数据一致性平衡。无论选择哪种缓存策略,关键是理解自己应用的数据访问模式和一致性需求,并据此设计最合适的缓存解决方案。通过正确应用客户端缓存技术,可以在保持数据一致性的同时,显著提升系统性能和用户体验。

2025-10-23 20:30:24 561

原创 大数据量下Redis分片的5种策略

随着业务规模的增长,单一Redis实例面临着内存容量、网络带宽和计算能力的瓶颈。分片(Sharding)成为扩展Redis的关键策略,它将数据分散到多个Redis节点上,每个节点负责整个数据集的一个子集。本文将分享5种Redis分片策略。

2025-10-23 20:28:49 531

原创 一篇深度好文,带你彻底穿透JVM面试核心(附全模块答案解析)

我使用 jmap 命令,导出了一份线上堆栈,然后使用 MAT 进行分析,通过对 GC Roots 的分析,发现了一个非常大的 HashMap 对象,这个原本是其他同事做缓存用的,但是做了一个无界缓存,没有设置超时时间或者 LRU 策略,在使用上又没有重写key类对象的hashcode和equals方法,对象无法取出也直接造成了堆内存占用一直上升,后来,将这个缓存改成 guava 的 Cache,并设置了弱引用,故障就消失了。第三,由于缓存的使用,有大量的弱引用,拿一次长达 10 秒的 GC 来说。

2025-10-23 20:06:44 903

原创 如何选择合适的数据库?PostgreSQL与MySQL各项对比

首先,我们快速了解一下 PostgreSQL 和 MySQL 的定义,以便熟悉这两个关系型数据库管理系统。PostgreSQL,简称 Postgres,是一种广泛使用的关系型数据库管理系统(RDBMS),常用于存储和检索在数据库和表中组织的表格数据。Postgres 因其可扩展的框架和可靠性而备受行业信赖。Postgres 是一款开源工具,可免费下载安装和使用。它兼容所有主流操作系统,并支持许多扩展和插件。除了用作数据存储工具外,Postgres 提供了一种 SQL 方言,用于交互和管理其持久化的数据。

2025-10-22 21:45:18 451

原创 MySQL 时间类型深度解析:精度、时区陷阱与版本兼容

本文深入探讨了 MySQL 时间类型字段的使用陷阱和最佳实践,重点分析了 DATETIME 和 TIMESTAMP 这两种最常用的时间类型。文章从存储机制、时区处理、精度支持等多个维度进行了全面对比,揭示了在实际开发中容易忽视的关键问题。核心洞察:时区处理是根本区别:DATETIME 按字面值存储,时区无关;TIMESTAMP 存储为 UTC 时间,自动进行时区转换存储机制截然不同:TIMESTAMP 使用 4 字节整数存储,存在 2038 年问题;DATETIME 使用 5 字节位打包,时间范围更大。

2025-10-22 21:44:13 971

原创 SpringBoot 容器镜像更新只要200k,你敢信???

查看构建成品的镜像层发现竟然有两层一样大小,也会被推送了两遍。其中优化了entrypoint脚本,采用分层构建后启动应用不能采用传统的java $JAVA_OPTS -jar xxx.jar这方式启动应用。为解决镜像上传问题,调研了相关技术栈决定采用spring boot 2.3新增的镜像分层构建功能。以下是我们基于基础镜像构建spring boot镜像制品的Dockerfile,采用了比较传统的COPY jar包。相信这也是大家普遍采用的模式。优化后的镜像只有COPY这一层的jar包了。

2025-10-20 19:36:33 633

原创 SpringBoot 配置文件完全指南-从入门到精通

Spring Boot 配置文件是存储应用程序配置信息的文件,它们告诉应用程序如何运行,包括数据库连接、服务器端口、日志级别等关键信息。🎉恭喜你!你已经掌握了 Spring Boot 配置文件的精髓!✅配置文件基础- 掌握 application.properties 和 application.yml 的使用✅优先级管理- 理解配置文件的加载顺序和覆盖规则✅多环境配置- 实现开发、测试、生产环境的灵活切换✅高级技巧- 使用属性绑定、条件配置等高级特性✅最佳实践。

2025-10-20 19:25:01 768

原创 开发 Java 项目时的命名规范

类型命名模式示例官方Starterspring-boot-starter-模块名自定义Starter模块名-spring-boot-starter。

2025-10-20 19:17:32 546

原创 SpringBoot集成MongoDB使用

Description: 创建一个实体类,用@Document注解标注,表示这是一个MongoDB的集合(Collection)

2025-10-19 20:31:53 200

原创 Java 重试机制没写对,线上很容易出问题!这份生产级方案请收好

前端重试:浏览器/APP自动重新发请求给后端。后端重试:当一个后端服务调用另一个后端服务(或数据库、缓存、第三方API等)失败时,自动重新尝试调用的机制。层级负责的重试类型示例前端重试用户交互层面的瞬时故障网络抖动、网关超时API网关重试路由层面的故障后端服务实例短暂不可用后端服务重试业务逻辑层面的临时故障数据库连接超时、第三方API限流。

2025-10-19 20:22:09 498

原创 POST为什么发送两次请求

跨域资源共享(CORS)是浏览器的一种安全机制,用于控制不同源之间的HTTP请求。当你的前端应用(例如 https://myapp.com)尝试向不同源的服务器(例如 https://api.otherservice.com)发送请求时,浏览器会执行CORS检查。// 同源示例// 跨域示例https://myapp.com → https://api.service.com (不同域名)http://myapp.com → https://myapp.com (不同协议)

2025-10-19 20:08:56 670

原创 最新Java基础面试题!集合篇(全网最全、最细、含答案,全解析)

ConcurrentHashMap 的迭代器创建后,就会按照哈希表结构遍历每个元素,但在遍历过程中,内部元素可能会发生变化,如果变化发生在已遍历过的部分,迭代器就不会反映出来,而如果变化发生在未遍历过的部分,迭代器就会发现并反映出来,这就是弱一致性。由于HashMap的K值本身就不允许重复,并且在HashMap中如果K/V相同时,会用新的V覆盖掉旧的V,然后返回旧的V,那么在HashSet中执行这一句话始终会返回一个false,导致插入失败,这样就保证了数据的不可重复性。

2025-10-19 16:46:14 691

原创 SpringBoot和Servlet的联系

Spring Boot 和 Servlet 之间存在紧密的联系,尽管现代开发中 Spring Boot 已成为主流,但 Servlet 仍然是其底层技术的核心组成部分。

2025-10-17 21:49:16 842

原创 Spring Boot的DispatcherServlet是如何封装和扩展原生Servlet功能的?

通过封装原生Servlet的底层 HTTP 处理能力,并整合 Spring 的依赖注入、AOP、自动化配置等特性,实现了从“协议处理”到“业务逻辑”的全栈抽象。这种设计既保留了Servlet的高性能基础,又提供了现代 Web 开发的便捷性,成为 Spring Boot 高效开发的核心支柱。

2025-10-17 21:48:49 432

原创 每日分享程序员掌握的知识之:分布式ID知识合集

UUID (Universally Unique Identifier),通用唯一识别码。UUID是基于当前时间、计数器(counter)和硬件标识(通常为无线网卡的MAC地址)等数据计算生成的。UUID由以下几部分的组合:1 当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。2 时钟序列。3 全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

2025-10-17 21:43:29 1031

原创 在DDD架构中,如何设计Domain层与Entity层的关系?

在DDD(领域驱动设计)架构中,与的关系是核心业务逻辑与数据模型的结合点,二者的设计直接影响系统的可维护性和扩展性。

2025-10-15 20:25:03 248

原创 DDD领域驱动设计详解,在Spring Boot项目中如何实战

领域(Domain)业务问题空间,包含核心业务逻辑和规则。例如电商系统中的“订单管理”“支付流程”等子域。领域模型(Domain Model)业务概念的抽象表达,包含以下核心组件:实体(Entity):具有唯一标识和生命周期的对象(如订单Order),封装业务行为(如order.cancel())。值对象(Value Object):无唯一标识的不可变对象(如地址Address),通过属性定义相等性。聚合(Aggregate):由聚合根(如订单Order)管理的实体和值对象集合,确保业务一致性。

2025-10-15 20:17:16 872

原创 DDD与传统的三层架构对比,及如何选择

DDD与三层架构并非对立,而是适用于不同阶段的工具。核心选型原则评估业务复杂度、团队能力、长期维护成本。简单场景用三层架构“快速跑通”,复杂场景用DDD“精准建模”。

2025-10-15 20:14:21 289

原创 每日分享程序员掌握的知识之:线程篇

1、: 操作系统进行资源分配和调度的基本单位。每个进程有独立的内存空间。进程通讯就采用共享内存,MQ,管道。2、: 一个进程可以包含多个线程,线程就是CPU调度的基本单位。一个线程只属于某一个进程。线程之间通讯,队列,await,signal,wait,notity,Exchanger,共享变量等等都可以实现线程之间的通讯。3、● 协程是一种用户态的轻量级线程。它是由程序员自行控制调度的。可以显示式的进行切换。● 一个线程可以调度多个协程。

2025-10-15 19:17:26 891

原创 每日分享程序员掌握的知识之:框架篇

避免指令重排,获取到未初始化完成的对象。单例模式的懒汉模式确保线程安全的机制DCLDCL正常可以解决单例模式的安全问题,但是由于CPU可能会对程序的一些指令做出重新的排序,导致出现拿到一些未初始化完成的对象去操作,最常见的就是出现了诡异的NullPointException。(扩展一下)volatile修饰myTest对象后,可以禁止CPU做指令重排。

2025-10-15 17:29:58 760

原创 字节三面:微博大V发博客场景,使用推模式还是拉模式?

模式描述推模式(push)大V一发微博,系统立即将内容推送到每一个粉丝的时间线中(如写入粉丝的消息队列或Feed中)拉模式(pull)粉丝查看时间线时,实时去拉取他关注的人(如大V)最新发布的内容,再合并排序显示项目推模式拉模式优点读取快,体验好节省写入压力和存储缺点写放大,易崩溃拉取慢,需合并排序适用场景普通用户大V/热点用户大V适用?❌ 存储压力+写放大✅ 粉丝访问时再拉取性能可控?❌ 易爆写✅ 拉取延迟可控。

2025-10-14 21:09:02 250

原创 go的生态真的一言难尽

通过这个构建工具,你可以轻松管理 Go 项目的依赖、构建过程和发布任务。安装构建工具:使用安装脚本或手动下载二进制文件。配置项目:创建 build.yaml 文件,定义依赖、构建任务和发布任务。执行任务:通过命令行执行构建、测试、清理等任务。发布项目:将项目的构建产物发布到 GitHub 或其他平台。

2025-10-14 21:08:30 902

原创 MySQL的OR条件查询不走索引及解决方案

在 MySQL 中,OR 条件查询是一种利用 OR 逻辑操作符在 WHERE 子句中连接多个条件的查询方式。当查询中使用 OR 操作符时,只要其中任何一个条件满足就会返回对应的数据行。它是一种常见的逻辑运算,用于实现灵活的数据筛选。OR条件查询经常用于:多字段查询、联合范围查询、动态筛选等场景。其中,在多字段查询的场景下,需要特别留意是否会出现不走索引的情况,下面我们来详细介绍一下这种情况及解决方案。查询条件使用 OR 且部分字段没有索引时,MySQL 很可能会选择执行全表扫描,而不是使用索引。

2025-10-14 21:07:49 626

原创 每日分享程序员掌握的知识之:Spring Boot源码篇(后篇)

1.设计模式:发布订阅模式【观察者模式】2。事件涉及到的核心概念:Spring中的事件机制是基于观察者设计模式的实现。它包含三个核心组件:事件、事件监听器和事件发布器。在Spring中,事件是一个普通的Java对象,通过继承 ApplicationEvent类来实现,它可以包含任意的数据。事件监听器是一个接口,只有一个方法 onApplicationEvent(),用来处理事件。事件发布器是 ApplicationEventPublisher接口的实现类,用来发布事件。

2025-10-14 20:10:37 599

原创 每日分享程序员掌握的知识之:Spring Boot源码篇(前篇)

Spring 是一个开源的应用程序框架,它起源于 Rod Johnson 在其著名的 Spring Framework 专著中提出的一个轻量级框架的观念。下面是 Spring 的发展历史:1 2002 年,Rod Johnson 发表了他的专著 “Expert One-On-One J2EE Design and Development”,提出了 Spring 框架的思想。

2025-10-14 20:04:55 1619

原创 每日分享程序员掌握的知识之:面试突击班(2)!后篇

当我们进行young gc时,我们的gc roots除了常见的栈引用、静态变量、常量、锁对象、class对象这些常见的之外,如果老年代有对象引用了我们的新生代对象,那么老年代的对象也应该加入gc roots的范围中,但是如果每次进行young gc我们都需要扫描一次老年代的话,那我们进行垃圾回收的代价实在是太大了,因此我们引入了一种叫做记忆集的抽象数据结构来记录这种引用关系。记忆集是一种用于记录从非收集区域指向收集区域的指针集合的数据结构。

2025-10-13 19:43:21 442

原创 每日分享程序员掌握的知识之:面试突击班(2)!前篇

Stop-The-World 简称 STW该回收的对象没有被回收不该回收的对象被回收了在STW状态下,所有的线程都是停止运行的 - >垃圾回收线程除外当STW发生时,出了GC所需要的线程,其他的线程都将停止工作,中断了的线程知道GC线程结束才会继续任务STW是不可避免的,垃圾回收算法的执行一定会出现STW,而我们最好的解决办法就是减少停顿的时间GC各种算法的优化重点就是为了减少STW,这也是JVM调优的重点。标记-复制(Mark-Copying) 效率很高。

2025-10-13 17:29:16 597

原创 Go语言实战案例——进阶与部署篇:编写Makefile自动构建Go项目

通过这篇实战,我们掌握了如何:✅ 使用 Makefile 自动化构建 Go 项目 ✅ 实现清理、测试、版本注入、交叉编译 ✅ 一键部署到远程服务器make即可完成全流程自动化,让 Go 开发进入“丝滑”模式。

2025-10-10 21:32:14 376

原创 别再用 if err != nil 了,学会这几个技巧,假装自己是Go大神

有经验的开发者通常会定义自己的错误类型。这些通常是实现了 error 接口的结构体。这样做的好处是,自定义错误可以携带额外的、结构化的数据。这样一来,代码的调用方就可以通过编程的方式来检查错误,而不是靠匹配字符串。他们可以使用 errors.As 来提取特定类型的自定义错误,或者用 errors.Is 来检查错误链中是否匹配某个已知的“哨兵错误”(sentinel error)。这样 API 变得更稳定、更易用。

2025-10-10 21:22:47 969

原创 每日分享程序员掌握的知识之:非线性结构!B树/B+树

加强版多路平衡查找树 因为B Tree的这种特性非常适合用于做索引的数据结构,所以很多文件系统和数据库的索引都是基于B Tree的。因为30小于36,走左边。3 B+Tree的磁盘读写能力相对于B Tree来说更强(根节点和枝节点不保存数据区,所以一个节点可以保存更多的关键字,一次磁盘加载的关键字更多)3 B+Tree的每个叶子节点增加了一个指向相邻叶子节点的指针,它的最后一个数据会指向下一个叶子节点的第一个数据,形成了一个有序链表的结构。1 它是B Tree的变种,B Tree能解决的问题,它都能解决。

2025-10-10 19:52:13 157

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除