自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Liquibase:数据库变更版本控制工具 CI/CD

Liquibase是一个开源的数据库版本控制工具,它通过日志文件的形式记录数据库的变更,然后执行这些变更,将数据库更新或回滚到一致的状态。Liquibase支持多种数据库类型,包括MySQL、PostgreSQL、Oracle、SQL Server等。除了使用Liquibase的XML标签,还可以直接执行自定义SQL:</</</</Liquibase为数据库版本控制提供了强大且灵活的解决方案。通过将数据库变更作为代码进行管理,开发团队可以更可靠地跟踪、应用和回滚数据库变更,大大降低了跨环境部署的风险。

2025-03-25 08:15:00 862

原创 Redis Stack 基础知识-构建现代实时数据平台

Redis Stack 是 Redis 官方推出的一站式解决方案,它整合了 Redis 最先进的模块和功能,为开发者提供了构建实时应用的理想平台。Redis Stack 作为现代实时数据平台,不仅继承了 Redis 的高性能特性,还扩展了其数据处理能力,使其成为构建 AI 应用、实时分析系统和高性能应用的理想选择。结合 Spring AI,Redis Stack 可以轻松实现向量数据库功能,为 RAG 系统和其他 AI 应用提供强大的基础设施支持。

2025-03-25 08:00:00 839

原创 Java类加载器(ClassLoader)知识点总结

类加载器负责将Class文件(字节码)加载到内存中,转为JVM能够识别的Class对象。Java程序运行时,并不是一次性将所有类加载到内存,而是按需加载。Arthas是阿里巴巴开源的Java诊断工具,它可以帮助开发人员分析生产环境中的各种问题,包括类加载问题。类加载器是Java虚拟机的重要组成部分,它将Java程序的字节码动态加载到内存中。理解类加载器的工作原理和双亲委派模型对于解决类加载相关问题、防止类加载安全漏洞具有重要意义。通过Arthas等工具,我们可以更便捷地分析和解决类加载问题。/ω\

2025-03-05 09:15:00 861

原创 Java 集合框架 基础 - 幽默版

ArrayList是查找小能手LinkedList是增删高手HashSet是去重专家TreeMap是排序达人选对英雄,才能在对应场景下发挥最大战斗力!记住:工具千千万,场景不一般。用对工具事半功,用错工具事倍般。/ω\),支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人<。

2025-03-05 09:00:00 811

原创 JVM初学者指南:Java虚拟机基础知识 笔记

JVM(Java Virtual Machine,Java虚拟机)是运行Java字节码的虚拟机。JVM是Java"一次编写,到处运行"这一特性的关键所在。无论什么平台,只要安装了对应的JVM,就能运行Java程序。跨平台性:Java代码被编译成字节码后,可以在任何安装了JVM的设备上运行自动内存管理:通过垃圾回收机制自动释放不再使用的内存安全性:提供沙箱安全机制,限制Java程序访问本地系统资源JVM是Java生态系统的核心组件,理解JVM的工作原理对于编写高效、稳定的Java应用程序至关重要。

2025-03-03 09:30:00 504

原创 Git 最佳实践 入门:从零到团队协作的必备指南

现在尝试完成以下挑战:🔹 创建一个功能分支开发TODO列表功能git checkout -b feature/yourname/todo-list # 创建必要的文件 touch todo-list.js todo-list.css🔹 使用git add -p提交至少3个原子化修改# 编辑文件后...# 选择性地提交变更git commit -m "feat(todo): 创建基础Todo项组件"# 继续开发后...git commit -m "feat(todo): 实现添加新任务功能"

2025-03-03 09:00:00 824

原创 FastExcel 新一代的潮流 (EasyExcel)

如果您的项目需要处理大规模的Excel数据,FastExcel无疑是一个值得考虑的选择。FastExcel通过事件监听器实现Excel文件的逐行读取,这对于处理大文件尤为重要,因为它可以避免内存溢出的问题。FastExcel作为一个高效且易于使用的Excel处理工具,不仅继承了EasyExcel的所有优点,还在此基础上进行了性能和功能的增强。在使用FastExcel进行Excel文件的读写操作之前,需要定义一个实体类,该类中的每个属性对应Excel中的一列。首先,创建测试数据,然后通过。

2025-01-20 14:15:00 934

原创 解析JSON 几大工具

不管是和前端交互、调用第三方接口,还是处理配置文件,几乎都绕不开JSON。这篇文章总结了6种主流的JSON解析方法,希望对你会有所帮助。在Java开发中,解析JSON是一个非常常见的需求。曾有安全漏洞争议,社区支持稍逊Jackson。中小型项目,简单的JSON转换场景。企业级项目,复杂序列化和反序列化场景。丰富的注解支持,便于控制序列化行为。性能高,社区活跃,企业级项目首选。轻量级,简单易用,适合中小型项目。功能强大,性能优异,支持复杂结构。高性能需求,大数据量的动态解析。

2025-01-20 14:00:00 1790

原创 Java 集合框架 基础 总结 - lenyan

在 Java 编程中,集合框架是一个非常重要的部分,它提供了一组用于存储、操作和处理数据的类和接口。集合框架可以大大简化我们处理数据集合的工作,提高编程效率和代码质量。本文将对 Java 集合框架的基础内容进行总结,包括常见的集合类型、接口及其特点、常用方法等。Java 集合框架位于java.utilCollectionMap和Iterator。Collection是一个用来存储一组对象的接口,它有几个重要的子接口,如ListSet和Queue。Map则是用于存储键值对的数据结构。Iterator。

2024-12-23 10:00:00 1158

原创 一文秒懂 String、StringBuffer和StringBuilder的区别

例如,在一个多线程的服务器应用程序中,需要对用户输入的字符串进行拼接、格式化等操作,并且多个线程可能会同时访问和修改这个字符串,这时就应该使用StringBuffer。比如,在一个简单的本地工具程序中,需要对一个字符串进行大量的拼接、替换等操作,并且这个程序是单线程运行的,那么使用StringBuilder可以提高性能。StringBuilder在单线程环境下性能最好,因为它没有同步机制的开销,在进行字符串修改操作(如拼接、插入、删除等)时,能够快速地在原对象上进行操作,避免了创建大量新对象的开销。

2024-12-23 09:00:00 919

原创 FastDFS:高效的分布式文件系统解析与实践

FastDFS 是专门为互联网应用量身定制的分布式文件存储系统,非常适合存储用户图片、视频、文档等各类文件。它充分考虑了冗余备份、负载均衡、线性扩容等机制,着重关注高可用、高性能等关键指标,使用它能够轻松搭建一套高性能的文件服务器集群,对外提供文件上传、下载等服务,并且基于 Docker 还可以快速进行搭建,方便快捷地应用到项目中。

2024-11-24 10:00:00 877

原创 深入解析 EasyExcel 组件原理与应用

这种方式内存占用小、效率高,但 POI 官方提供的 API 过于繁琐,使用起来步骤繁多,比如读取一个 Excel 文件,要先将 xlsx 格式的 Excel 文件解析成 OPCPackage 对象,再创建 XSSFReader 对象来解析获取对应 xlsx 下的 xml 内容,想要处理还得进一步创建内容处理器等等,着实有些麻烦。在解析和写入等流程中,定义了一些模板化的方法,不同的实现类可以按照这些模板去扩展和定制具体的业务逻辑,保证了整体流程的规范性和可扩展性。

2024-11-24 09:00:00 1656

原创 《Go 语言基础入门:开启编程新旅程》- lenyan 青训营笔记

Go 语言,又被称为 Golang,是由 Google 公司开发的一种开源编程语言。它汲取了多种编程语言的优秀特性,旨在打造一门具有高效性能、简洁语法以及强大并发处理能力的语言。Go 语言在网络编程、云计算、分布式系统等诸多领域都有着广泛的应用,像 Docker、Kubernetes 等热门项目就是基于 Go 语言开发的。这里我们定义了一个名为add的函数,它接受两个整数类型的参数a和b,然后返回它们的和。

2024-11-23 09:30:00 995

原创 Git 最佳实践 入门✨

觉得有用的话可以点点赞 (*/ω\*),支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人< 。

2024-11-23 09:00:00 760

原创 Redis Pipeline 管道 ✨

Redis Pipeline 管道Redis Pipeline 管道。

2024-11-18 09:30:00 642

原创 Java 中的 Optional:优雅处理空值的利器

合理运用它的各种方法,不仅能够有效减少空指针异常的发生,还能让我们的代码逻辑更加清晰易读,提升整个项目的代码质量。包下的一个容器类,简单理解,它就像是一个特殊的 “盒子”,这个盒子里要么装着我们想要的某个对象(非空的情况),要么就是空的(没有装任何对象)。的诞生,就是为了解决这个痛点,它提供了一种标准化、优雅的方式来处理那些可能为空的值,让我们可以在代码中更清晰地表达对空值的预期和处理逻辑。,我们可以将原本分散在各个角落、用于判断对象是否为空的代码,统一用它提供的一套规范方法来处理,使代码的意图更加明确。

2024-11-18 09:00:00 1602

原创 ✨Java并发编程:Synchronized与ReentrantLock的比较

特性使用方便是否锁的细粒度控制有限高可中断否是公平锁选项否是性能现代JVM下接近甚至优于ReentrantLock取决于具体用例。

2024-10-02 10:00:00 414

原创 深入解析 ConcurrentHashMap:从 JDK 1.7 到 JDK 1.8

JDK 1.7:使用分段锁(Segment)和,每个 Segment 是一个独立的小哈希表,适合中等并发场景。JDK 1.8:采用 CAS 操作和锁定链表或红黑树的首节点,提供了更细粒度的锁,适合高并发场景。通过这些改进,JDK 1.8 版本的在性能和并发控制方面有了显著的提升。觉得有用的话可以,支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人<。

2024-10-02 09:30:00 1743

原创 MySQL 是如何实现事务的 (锁,Redo Log,Undo Log,MVC)?

用于实现事务的原子性和隔离性。MySQL 通过锁机制、Redo Log、Undo Log 和 MVCC 来实现事务的四大特性,保障数据的一致性和完整性。是 MySQL 实现高效并发控制的技术之一,它通过保存数据的多个版本,允许事务在不加锁的情况下读取不同事务中修改的数据,从而提高并发度。它记录了事务对数据的修改操作,并且在系统崩溃时通过重做日志恢复未提交的事务操作,保证数据的持久性。MVCC 依赖于 Undo Log 生成旧数据版本,通过版本链的方式提供事务之间的数据隔离,从而实现高效的并发读写操作。

2024-09-28 10:00:00 966

原创 MySQL 索引选择详解

索引基数表示在某个索引列中,不同值的数量。可以使用。

2024-09-28 09:30:00 1204 2

原创 InfluxDB 时序数据库基础介绍与使用

InfluxDB 是一个功能强大且灵活的时序数据库,特别适合处理大规模的时序数据。介绍了 InfluxDB 的基本概念、安装配置、基本操作以及其高级功能。无论是在系统监控、物联网还是金融数据分析中,InfluxDB 都能够发挥其优势,帮助用户高效管理和分析时序数据。/ω\),支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人

2024-08-16 12:00:00 676

原创 Spring Boot AOP 切面注解

AOP,即面向切面编程,是一种编程范式,旨在处理程序中那些分散在各处的“横切关注点”。横切关注点通常是那些贯穿多个模块的功能,比如日志记录、性能监控、事务管理、安全检查等。AOP 的核心思想是通过“切面”将这些关注点与业务逻辑分离,使得代码更为简洁且易于维护。在 Spring 中,AOP 是通过动态代理实现的。Spring 使用 AOP 来在运行时动态织入一些逻辑,如方法执行前后插入代码、捕获异常等,而无需改变原始的业务代码。自定义注解是 Java 提供的一种灵活机制,用于创建可自定义的元数据。

2024-08-12 12:00:00 1483

原创 分库分表 [ 技术 ] 指南 ✨

分库分表是通过将数据分散到多个数据库和表中,以减轻单库单表的压力,提高系统性能和可用性。分库分表可以分为垂直分库分表和水平分库分表两种方式。垂直分库分表垂直分库是将不同的业务模块分配到不同的数据库中。比如用户信息放在一个数据库中,订单信息放在另一个数据库中。垂直分表是将一个表中的不同列拆分到不同的表中。水平分库分表水平分库是将同一个表的数据按某种规则分配到多个数据库中。水平分表是将同一个表的数据按某种规则分配到多个表中。分库分表是解决高并发、大数据量场景下数据库性能问题的重要手段。

2024-07-21 09:00:00 1092

原创 Java [ 进阶 ] JVM双亲委派机制✨

双亲委派机制是一种类加载模式,它规定类加载器在加载某个类时,会首先委托父类加载器去尝试加载该类。如果父类加载器无法找到这个类,才会由当前类加载器自己来加载。这种机制保证了 Java 类的统一性和安全性,避免了重复加载和类冲突。双亲委派机制是一种类加载模式,它规定类加载器在加载某个类时,会首先委托父类加载器去尝试加载该类。如果父类加载器无法找到这个类,才会由当前类加载器自己来加载。这种机制保证了 Java 类的统一性和安全性,避免了重复加载和类冲突。解析:这道题目主要考察对双亲委派机制基本概念的理解。

2024-07-14 10:00:00 763

原创 Java [ 进阶 ] JVM类的生命周期 ヾ(≧▽≦*)o

类的生命周期指的是类从加载到内存中,直到从内存中卸载的过程。加载(Loading)验证(Verification)准备(Preparation)解析(Resolution)初始化(Initialization)使用(Using)卸载(Unloading)

2024-07-14 09:00:00 845

原创 Java [ 进阶 ] 深入理解 JVM

Java 虚拟机(JVM)是 Java 程序运行的核心,了解 JVM 的内部结构和垃圾回收机制对优化 Java 应用性能至关重要。本文将深入探讨 JVM 的结构和垃圾回收机制,并附上一些代码示例以帮助理解。JVM 是 Java 程序运行的核心,深入理解 JVM 的结构和垃圾回收机制有助于优化 Java 应用的性能。不同的垃圾收集器和算法各有优缺点,选择合适的垃圾收集器需要根据具体应用的需求进行权衡。JVM 的垃圾回收机制负责自动管理内存,回收不再使用的对象。

2024-07-08 10:00:00 810

原创 Java [ 基础 ] Java 8以上新特性 ✨

Lambda表达式是一种简洁的表示单方法接口(函数式接口)实现的方法。可以使用它来简化匿名内部类的代码。语法格式为(参数列表) -> {方法体}。函数式接口是只包含一个抽象方法的接口,可以用Lambda表达式来实现。使用注解可以标记函数式接口。Stream API 是一种处理集合数据的高效工具。常用操作包括filtermapsortedforEach等。Java 8 引入了新的日期时间API,包括LocalDateLocalTime等类,用于更方便地处理日期和时间。

2024-07-08 09:00:00 1199

原创 Java [ 基础 ] 输入输出 (I/O) 基础 ✨

对象序列化是指将对象的状态转换为字节流的过程。要实现对象序列化,类必须实现接口,并使用将对象写入文件。

2024-07-06 10:00:00 1124

原创 Java [ 基础 ] Java面向对象编程 (OOP) ✨

掌握面向对象编程 (OOP) 的核心概念是成为优秀Java程序员的关键。这些概念不仅有助于编写结构良好、易于维护和扩展的代码,还能提高程序的可读性和可重用性。通过定义抽象类和接口来提供一个框架,而具体的实现由子类完成。抽象类可以包含抽象方法和具体方法,接口只能包含抽象方法(Java 8 之后可以包含默认方法和静态方法)。是将对象的属性和方法私有化,并通过公共的方法(getter和setter)来访问和修改这些属性。允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码重用和扩展。

2024-07-06 09:00:00 338

原创 Java [ 基础 ] 基础语法 ✨

解释布尔操作符并提供示例代码。布尔操作符用于执行逻辑运算,包括&&(逻辑与)、||(逻辑或)和!(逻辑非)。// false,因为a和b不同时为true// true,因为a或b中至少有一个为truea;// false,因为a为true,取反为falseb;// true,因为b为false,取反为true。

2024-07-05 10:00:00 950

原创 Java [ 基础 ] Set 集合详解 ✨

HashSetTreeSet和是Set接口的三种常用实现。选择哪种实现类取决于具体的需求:如果需要高效的查找操作,选择HashSet;如果需要有序的集合,选择TreeSet;如果需要按插入顺序访问元素,选择。理解它们的特点和使用场景能够帮助我们更好地处理集合操作。

2024-07-05 09:00:00 890

原创 HashMap详解 Java [ 基础 ] ✅

HashMap是Java中一个强大且高效的集合类,用于快速查找和存储键值对。理解其工作原理和常用操作对于提高编程效率和解决复杂问题非常有帮助。

2024-07-04 10:00:00 15349 4

原创 Java [ 基础 ] 数组、ArrayList和LinkedList✨

数组(Array)ArrayList和LinkedList都是用于存储数据的容器,但它们在存储机制、性能、使用场景等方面有着显著的区别。了解这些区别能帮助我们在不同场景下选择最适合的数据结构。数组是最基本的数据结构之一,用于存储固定大小的同类型元素的集合。每个元素都可以通过其索引进行访问。特点:固定大小:数组一旦创建,大小不能改变。索引访问:数组的每个元素通过索引访问,时间复杂度为O(1)。内存连续:数组在内存中是连续分配的,这使得数组访问速度非常快,但增加和删除操作会比较复杂。

2024-07-04 09:00:00 1151

原创 Java [ 基础 ] 异常处理 ✨

异常是指在程序运行过程中出现的非正常情况,通常是由于代码错误、资源不可用或其他意外情况引起的。当异常发生时,Java会生成一个异常对象,该对象包含了异常的详细信息。异常处理是Java编程中不可或缺的一部分。通过合理地捕获和处理异常,程序可以在遇到意外情况时仍能稳定运行,从而提高整体的可靠性和用户体验。觉得有用的话可以,支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人<。

2024-07-02 10:00:00 345

原创 Java [ 基础 ] 方法引用 ✨

方法引用是一种可以直接引用或调用现有方法的简洁语法。它的语法格式是。方法引用的主要目的是为了减少Lambda表达式的冗余代码,使代码更加清晰和简洁。通过方法引用,我们可以避免一些重复代码,使代码更加模块化和易于维护。方法引用是Java 8引入的一个强大特性,使得代码更加简洁和易读。通过四种类型的方法引用,我们可以引用静态方法、实例方法、对象的方法以及构造器。在实际开发中,合理使用方法引用可以提高代码的可维护性和重用性。

2024-07-01 19:00:00 1482

原创 Java [ 基础 ] Stream流 ✨

Stream是Java 8引入的一部分,它是一种用于处理数据序列的抽象。Stream允许我们以声明性的方式处理数据,而不是通过编写大量的迭代代码。简而言之,Stream提供了一种简洁而功能强大的数据处理方式。通过深入探索Java中的Stream流,我们了解了它是一种强大且灵活的数据处理工具。Stream流提供了声明性的方式来操作集合数据,具有不可变性和惰性执行的特点。通过丰富的中间操作和终端操作,我们可以轻松实现复杂的数据处理任务,使代码更加简洁、可读和高效。

2024-07-01 14:01:49 856

原创 Java [数据结构] Deque与Queue

Queue适用于需要先进先出的情况,常见实现类如LinkedList和。Deque提供了更多的灵活性,可以作为队列(FIFO)和栈(LIFO)使用,常见实现类如LinkedList和ArrayDeque。觉得有用的话可以,支持一下。如果愿意的话关注一下。会对你有更多的帮助。每天都会不定时更新哦 >人

2024-06-30 17:00:00 1550

原创 蓝桥杯第17135题 不完整的算式 C++ Java Python

首先,需要确定算式中哪一部分被擦掉了。通过遍历输入的字符串,我们可以很容易地识别出。一旦确定了缺失的部分,就可以根据算式的其他部分进行计算或推断。中哪个位置被替换成了。

2024-05-31 09:00:00 1019

原创 蓝桥杯第17114题 残缺的数字 C++ Java Python (看看数字why残缺)

【代码】蓝桥杯第17114题 残缺的数字 C++ Java Python (看看数字why残缺)

2024-05-31 09:00:00 564

原创 蓝桥杯第17115题 定时任务 C++ Java Python

该写法的关键在于这个函数的第二个参数, 表示该表达式的取值上限,它有两个功能:一个是在表达式为 * 时能返回正确的数量,另一个就是限制取值上限,在函数内,我们判断了这一点,不会选取超过 的数字。有了这样一个函数后,主体计算部分就非常简单了:首先将时、分、秒各自的次数相乘,得到每天的触发次数;而每天的时分秒数量都是一致的,也就是说每天触发的次数是固定的。再计算一年总共会触发的天数,二者相乘即为答案。除此之外,本题还需要解决一个字符串解析的问题,要从单个域的表达式中提取出它所表达的数字,对此需要进行封装。

2024-05-30 09:00:00 2043

lenyan算法笔记,日常更新自己的笔记而已

《lenyan算法笔记》——探索算法的乐趣 1 欢迎来到《lenyan算法笔记》!这是我日常记录和分享算法学习心得的地方,无论你是初学者还是已经有一定经验的程序员,都能在这里找到有趣的内容。 2 记录学习心得:我用通俗易懂的语言记录了自己学习算法的过程和体会,希望能够帮助到更多有相同兴趣的朋友。 3 分享实用代码:每篇笔记都附带了一些实用的代码示例,这些示例不仅是我学习的成果,也可以作为你学习的参考。 4 持续学习进步:算法学习是一条持续的道路,我会不断地更新笔记内容,记录自己的学习进步,与你一起成长。 5 分享交流:如果你对我的笔记有任何疑问或建议,都欢迎在评论区与我交流,让我们一起探讨算法的乐趣! 6 如果你也对算法感兴趣,不妨点击链接,一起来探索《lenyan算法笔记》吧:《lenyan算法笔记》 https://www.yuque.com/lenyan-svokd/hi7hp2/pwzb6r36ycq2m0e3?singleDoc# 《lenyan算法笔记》

2024-03-29

空空如也

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

TA关注的人

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