- 博客(62)
- 收藏
- 关注
原创 JVM面试集合
比如我们自己写的一个类,最先会找应用程序类加载器加载,应用程序类加载器会先委托扩展类加载器加载,扩展类加载器再委托引导类加载器,顶层引导类加载器在自己的类加载路径里找了半天没找到你自己写的类,则向下退回加载类的请求,扩展类加载器收到回复就自己加载,在自己的类加载路径里找了半天也没找到,又向下退回类的加载请求给应用程序类加载器,应用程序类加载器于是在自己的类加载路径里找你自己写的类,结果找到了就自己加载了。也可以反过来,标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。
2025-11-21 11:28:33
46
原创 多线程面试集合
ThreadLocal是作为当前线程中属性ThreadLocalMap集合中的某一个Entry的key值,Entry(threadlocl,value),虽然不同的线程之间threadlocal这个key值是一样,但是不同的线程所拥有的ThreadLocalMap是独一无二的,也就是不同的线程间同一个ThreadLocal(key)对应存储的值(value)不一样,从而到达了线程间变量隔离的目的,但是在同一个线程中这个value变量地址是一样的。
2025-11-19 15:16:10
490
原创 多线程面试集合
概念介绍进程 (Process)定义:操作系统资源分配的基本单位,包含独立的内存空间、文件句柄、网络连接等。特点:进程间相互隔离,默认无法直接访问彼此内存,需要进程间通信(IPC)。调度:由操作系统调度,开销大,上下文切换涉及完整资源保存与恢复。线程 (Thread)定义:进程内的执行单元,是操作系统调度的最小单位。特点:同一进程内线程共享进程资源(如堆内存、文件句柄),但有自己的栈和寄存器。调度:由操作系统内核线程调度器(抢占式)调度。开销。
2025-11-06 15:18:03
613
原创 微服务架构优劣
本文介绍了微服务架构及其与单体架构的对比。微服务架构将应用拆分为独立部署、互相通信的小服务,每个服务专注特定业务功能,可独立开发部署并使用不同技术栈。相比单体架构,微服务在灵活性、扩展性和团队协作方面更优,适合大型复杂项目,但也增加了分布式系统的复杂度。以电商系统为例,单体架构简单但耦合度高;微服务架构则拆分为用户、商品、订单等多个服务,虽然提升了灵活性和可扩展性,但需要解决分布式事务、服务治理等复杂问题。
2025-11-04 11:56:58
409
转载 Spring事务传播
本文介绍了Spring事务传播行为的7种类型及其应用场景。事务传播行为指当一个事务方法调用另一个事务方法时,被调用方法的事务处理方式。主要包括:REQUIRED(默认,合并事务)、SUPPORTS(依赖当前事务)、REQUIRES_NEW(新建事务并挂起当前事务)、MANDATORY(强制要求存在事务)、NOT_SUPPORTED(非事务执行)、NEVER(非事务执行且拒绝加入事务)、NESTED(嵌套事务)。文章通过"吃苹果"的生活化比喻形象解释了每种传播行为的特点,并提供了示例代码说
2025-10-31 17:07:36
24
转载 Prometheus原理详解
本文介绍了Prometheus监控系统的核心特性和架构。Prometheus是一个开源的时间序列数据库监控工具,具有多维度数据模型、灵活查询语言PromQL、基于HTTP的pull采集模式等特点。其核心组件包括Prometheus Server、Client Library、Push Gateway、Exporters和Alertmanager。文章详细剖析了Prometheus的数据存储机制、Metric类型(计数器、仪表盘等)、任务与实例概念,并介绍了TSDB时间序列数据库的特性。还涵盖了PromQL查
2025-10-30 14:43:40
98
原创 定时任务Quartz原理详解
Quartz是一个功能强大的任务调度框架,其核心组件包括Job(任务逻辑)、JobDetail(任务详情)、Trigger(执行时间规则)和Scheduler(调度器)。通过JobDataMap传递任务数据,支持SimpleTrigger和CronTrigger两种触发器类型。Quartz工作流程包括初始化Scheduler、注册JobDetail和Trigger、启动调度器以及任务执行与状态管理,支持集群部署和故障转移,适用于复杂的企业级定时任务场景。相比Spring Scheduler等轻量级方案,Qu
2025-10-18 23:09:51
790
原创 MyBatis 工作原理
组件作用工厂类,负责创建SqlSession,全局唯一,基于配置文件初始化。SqlSession会话对象,封装数据库连接,提供 CRUD 方法,是与数据库交互的入口。Executor执行器,SqlSession内部依赖,负责实际执行 SQL(与 JDBC 交互)。Mapper接口定义数据操作方法,通过代理对象关联映射文件中的 SQL 语句。Mapper映射文件存储 SQL 语句、参数映射、结果映射(ResultMap),实现 SQL 与代码分离。全局配置对象,存储所有配置信息(数据源、映射关系等)。
2025-10-18 18:57:33
880
原创 HashMap、HashTable、ConcurrentHashMap详解
HashMap 是 Java 集合框架中最常用的非线程安全哈希表,实现了Map接口,基于 “数组 + 链表 / 红黑树” 的混合结构(JDK 1.8 优化),核心目标是高效查询、插入、删除(理想时间复杂度 O (1))。// 核心继承关系HashTable 是 Java 早期提供的线程安全哈希表,实现了Map接口,底层结构与 JDK 1.7 的 HashMap 类似(数组 + 链表,无红黑树优化),但因性能低下,目前已被替代,仅在遗留系统中可能见到。// 核心继承关系。
2025-10-05 18:44:09
698
原创 前向传播与反向传播(附视频链接)
本文系统介绍了神经网络中的前向传播与反向传播机制。前向传播通过输入层到输出层的逐层计算(线性变换+激活函数)生成预测值和损失函数;反向传播则利用链式法则计算各参数梯度,为梯度下降提供优化方向。两者构成完整的训练循环:前向计算损失→反向传播梯度→参数更新→迭代优化。文章详细展示了计算流程和数学推导,并强调这种机制适用于各类网络结构(CNN、Transformer等),区别仅在于具体计算细节的调整。最终实现通过不断迭代使损失函数收敛到最小值的目标。
2025-10-02 20:44:39
996
原创 梯度下降法(附视频链接)
梯度下降法是一种迭代优化算法,通过沿目标函数梯度反方向更新参数来寻找最小值。核心公式为θ_t+1=θ_t-α·∇J(θ_t),其中α是学习率。梯度下降有三种主要变体:批量梯度下降(BGD)使用全部数据,计算稳定但开销大;随机梯度下降(SGD)每次取单个样本,速度快但波动大;小批量梯度下降(MBGD)折中处理,最常用。优化方法包括动量法(加速收敛)、AdaGrad(自适应学习率)和Adam(结合动量与自适应学习率),其中Adam在深度学习中表现优异。算法选择需权衡计算效率与收敛稳定性。
2025-09-30 15:31:08
724
原创 大模型微调(LoRA、QLoRA详解)
大模型微调技术概览 大模型微调(Fine-tuning)是在预训练语言模型基础上,使用特定领域数据进行二次训练的技术。它能提升模型在特定任务上的表现、获取新知识、减少幻觉输出、提高一致性,并降低计算成本。微调方法包括监督微调(SFT)和参数高效微调(PEFT),后者如LoRA技术通过低秩矩阵调整实现高效适配。LoRA在冻结原始模型参数的同时,仅训练小型外挂矩阵,既保持模型性能又显著降低计算负担。这种技术使企业能以较低成本将通用大模型定制为专业领域解决方案,同时保障数据隐私和安全。
2025-09-30 10:39:17
1253
原创 Spring面试集合
本文介绍了Spring Bean的生命周期和Spring Boot自动配置原理。Bean的生命周期包括四个阶段:实例化(通过反射/工厂)、属性赋值(自动装配与循环依赖处理)、初始化(Aware回调、三种初始化方法)和销毁(三种销毁方法)。Spring Boot自动配置通过@EnableAutoConfiguration触发,扫描META-INF/spring.factories文件,结合@Conditional系列注解实现条件化配置。自动配置机制能根据项目依赖自动配置应用,如检测到H2依赖时自动配置内存数据
2025-09-14 14:22:58
1088
原创 MySQL面试集合
当并发系统中不同线程出现循环资源依赖,涉及的线程都在等待别的线程释放资源时,就会导致这几个线程都进入无限等待的状态,称为死锁。
2025-08-31 23:53:46
1181
原创 fork详解(附经典计算题)
fork函数创建子进程作为父进程的副本,父子进程拥有独立地址空间但共享文件描述符。fork调用一次返回两次:父进程返回子进程PID,子进程返回0。典型应用包括网络服务器并发处理和shell命令执行(配合exec)。示例代码通过5个fork调用可产生19个子进程,其中中间3个fork通过逻辑运算符组合影响了进程创建数量。fork机制是Linux实现多任务的基础之一。
2025-08-30 16:08:10
365
原创 jdk21新特性
本文介绍了Java编程中的5个新特性:1)序列化集合(LikedHashMap)提供固定顺序和首尾元素操作;2)JDK21新增分代ZGC垃圾回收器;3)记录模式简化record类型解构;4)Switch模式匹配增强类型判断;5)虚拟线程作为轻量级线程实现。这些特性通过代码示例展示了使用方法,包括集合操作、GC配置、模式匹配语法等,帮助开发者利用Java新特性提高开发效率。
2025-08-25 09:58:20
236
原创 jdk8新特性
Java 8 新特性摘要:1) 接口支持默认方法和静态方法,解决接口扩展性问题;2) Lambda 表达式简化匿名类写法,但要求外部变量为final或有效final,避免内存可见性和生命周期问题;3) 函数式接口(@FunctionalInterface)是仅含一个抽象方法的接口;4) Stream API 提供流式数据处理能力,关注操作而非存储。这些特性显著提升了Java的现代编程能力。
2025-08-25 09:57:50
589
原创 synchronized底层原理及锁升级机制
本文深入解析了Java锁机制的原理与实现。在底层原理部分,介绍了monitorenter/monitorexit指令的计数器机制,支持锁的可重入性。重量级锁通过操作系统线程阻塞/唤醒实现,采用自适应自旋优化;轻量级锁利用CAS操作在栈帧中分配锁记录;偏向锁针对单线程场景优化,通过记录线程ID减少同步开销。文章还分析了锁升级机制(无锁→偏向锁→轻量级锁→重量级锁)和逃逸分析技术(栈上分配、标量替换、同步消除),帮助开发者理解不同锁策略的适用场景和性能特点。
2025-08-25 09:50:43
837
原创 Spring循环依赖面试集合(一级缓存就能解决死循环,为啥要三级缓存)
资源定位(找配置)→ 解析(转BeanDefinition)→ 注册(存元数据)→ 实例化(造对象)→ 属性注入(设依赖)→ 初始化(增强处理)→ 存入缓存(供使用)→ 销毁(容器关闭)
2025-08-24 12:32:06
979
原创 MCP与Function Calling(附视频链接)
本文介绍了MCP(模型上下文协议)与FunctionCalling两种AI技术的区别与互补关系。FunctionCalling是模型主动调用预定义函数的能力,用于执行简单任务;MCP则是结构化交互协议,支持动态资源发现和持久连接。二者在架构模式、连接方式、状态管理等方面存在差异:FunctionCalling采用点对点调用,而MCP采用网络化协议架构。实际应用中可结合使用,MCP负责上下文管理("知道什么"),FunctionCalling负责具体操作("做什么")。
2025-08-23 15:10:31
427
原创 Agent原理、构建模式(附视频链接)
《智能体构建模式解析与实现》摘要:本文介绍两种主流智能体构建模式:1) ReAct模式通过"思考-行动"循环实现自主决策,包含大模型、工具函数和主程序三部分,核心是解析模型输出的Thought/Action标签并执行对应工具;2) Plan-And-Execute模式采用分层规划架构,包含规划模型、重规划模型和嵌套的子智能体。文章详细展示了ReActAgent的Python实现,包括工具调用、参数解析、系统提示渲染等关键功能,并提供了文件读写、终端命令等基础工具示例。两种模式均致力于解决
2025-08-23 15:05:45
631
原创 大语言模型原理(Transformer架构)
大语言模型(LLM)是基于深度学习和神经网络的自然语言处理技术,目前主要通过Transformer架构和大规模数据训练来理解和生成语言。GPT不同架构的训练参数GPT-1(2018):1.17亿参数GPT-2(2018):15亿参数GPT-3(2020):1750亿参数GPT-4(2023):参数规模进一步增加。
2025-08-21 20:57:28
1363
1
原创 SHA-256 详解
SHA-256是一种安全哈希算法,可将任意长度输入转换为256位固定输出。它通过消息填充、分组处理和64轮迭代运算实现单向性和抗碰撞性,确保数据微小变化会导致摘要显著变化。该算法在数字签名、数据校验和密码存储等领域广泛应用,目前仍被认为是安全的哈希标准。其核心原理包括消息扩展、逻辑函数运算和哈希值更新,典型应用包括比特币交易验证和文件完整性检查。
2025-08-18 21:36:21
3508
转载 AES详解
AES加密算法是当前最流行的对称加密标准,采用分组加密方式处理128位数据块,支持128/192/256位三种密钥长度。其核心流程包含字节替代、行移位、列混淆和轮密钥加四个操作环节,通过多轮迭代实现高安全性。算法需配合填充机制(如PKCS5Padding)处理不完整数据块,且加密与解密过程互为逆操作。作为DES的替代方案,AES因其高效性和安全性已成为全球广泛采用的加密标准,适用于各类数据保护场景。
2025-08-18 21:31:39
86
原创 RSA详解
RSA是一种重要的非对称加密算法,由Rivest、Shamir和Adleman于1977年提出。其核心原理基于大数分解难题和数论中的欧拉定理,通过公钥(n,e)和私钥(n,d)实现加密解密。算法流程包括密钥生成(选取大素数p、q计算n、φ(n))、加密(c≡m^e mod n)和解密(m≡c^d mod n)。RSA的安全性依赖于大数分解的困难性,应用广泛于通信加密和数字签名领域。随着计算能力提升,需采用更长密钥(如2048位)来保障安全性。
2025-08-18 21:01:23
1256
原创 Redis的事件驱动和IO多路复用,底层原理加示例
所以,fd_set 结构体的定义,其实就是一个 long int 类型的数组,该数组中一共有 32 个元素(1024/32=32),每个元素是 32 位(long int 类型的大小),而每一位可以用来表示一个文件描述符的状态。- 第三步,循环调用 poll 函数,(如 epoll)同时监听多个 Socket 的 IO 事件,当事件就绪时(如客户端发来了命令),会触发预先注册的 “事件处理器” 执行对应操作。(链表),而对于已经就绪的文件描述符来说,它们会被返回给用户程序进行处理(引用返回)。
2025-08-16 12:22:41
855
原创 RocketMQ面试集合
RocketMQ面试题摘要:本文梳理了RocketMQ核心知识点,包括MQ选型建议(中小公司用RabbitMQ,大公司用RocketMQ,大数据用Kafka)、核心组件(Producer/Consumer/Broker/NameServer)、消息顺序性保障(生产者串行、队列分区、消费者单线程处理)、消息幂等性解决方案(Redis去重)以及消息可靠性保障(三阶段防护:生产者确认机制、Broker持久化+主从同步、消费者手动提交)。同时提供了消息积压处理方案,涵盖从生产到消费全链路的优化策略。
2025-08-16 12:19:50
757
原创 分布式事务详解(附Seata实践)
1、事务A执行update操作,此时事务还没提交,会将数据进行备份到对应的undo buffer,然后由undo buffer持久化到磁盘中的undo log文件中,此时undo log保存了未提交之前的操作日志,接着将操作的数据,也就是Teacher表的数据持久保存到InnoDB的数据文件IBD。Buffer Pool的使用大大提高了读写数据的效率,但是也带了新的问题:如果MySQL宕机,而此时Buffer Pool中修改的数据还没有刷新到磁盘,就会导致数据的丢失,事务的持久性无法保证。
2025-08-09 11:29:01
1122
原创 JVM调优实战
本文系统介绍了JVM内存参数配置与优化实践。第一部分详解堆内存核心参数设置,包括基础堆内存、代际比例和大对象分配策略。第二部分对比不同垃圾回收器(并行、CMS、G1)的配置要点与适用场景。第三部分提供诊断工具配置方案,涵盖GC日志分析和内存溢出处理。最后给出生产环境最佳实践模板和常见问题解决方案,包括8G内存Web服务配置示例、不同场景的优化策略对比以及频繁Full GC等典型问题的排查方法。全文通过具体参数示例和场景分析,为构建稳定高效的JVM运行环境提供实用指导。
2025-07-27 19:36:18
436
原创 Spring Boot自动配置原理深度解析
本文深入解析了Spring Boot自动配置的核心原理与实现机制。主要内容包括: 自动配置概念: 根据项目依赖自动配置Spring应用 核心组件:@SpringBootApplication、@EnableAutoConfiguration、spring.factories等 实现原理: 通过条件注解(@Conditional系列)控制配置加载 典型工作流程:扫描配置→条件过滤→应用有效配置 典型场景分析: 数据源自动配置机制与自定义方法 Web MVC组件的自动配置实现 高级特性: 自定义Starter开
2025-07-27 19:19:52
1007
原创 符号引用与直接引用:概念对比与实例解析
本文系统比较了Java虚拟机中符号引用与直接引用的核心差异。符号引用是编译时生成的文本逻辑描述(如全限定名),具有平台无关性和延迟绑定特点;直接引用则是运行时转换的具体内存指针(如方法地址)。文章详细解析了类加载过程中符号引用到直接引用的转换机制,通过字符串常量和接口方法调用等实例说明其应用场景,并阐述了这两种引用在支持Java动态性、跨平台特性和运行效率方面的重要价值,是理解JVM类加载与执行机制的关键概念。
2025-07-27 19:15:37
789
原创 JVM类加载机制全流程详解
Java虚拟机的类加载机制是Java语言动态性的核心基础,它规定了类如何被加载到内存并初始化的全过程。Java程序从源代码到执行经历了完整的编译和加载过程,这个过程体现了Java"一次编写,到处运行"的核心思想。:查找并读取类的二进制数据,在方法区创建类的数据结构,并在堆中生成对应的Class对象作为访问入口。类加载过程分为三个主要阶段:加载、链接和初始化,其中链接又包含验证、准备和解析三个子阶段。类加载请求先委派给父加载器处理,只有当父加载器无法完成时才自己加载。类可以被卸载的条件是。
2025-07-27 19:11:00
922
原创 ShardingSphere源码解析:跨库查询案例分析
在分布式系统中,数据分片是解决数据规模增长的重要手段。ShardingSphere 作为分布式数据库中间件,提供了强大的分片查询能力。本文将深入 ShardingSphere 源码,通过一个完整的查询示例,详细解析其如何从不同库中查询数据,特别关注广播表这一关键特性。
2025-06-11 00:19:03
1483
原创 MySQL事务隔离级别详解
MySQL默认的REPEATABLE READ级别通过MVCC和锁机制在保证数据一致性的同时提供了较好的并发性能,适合大多数应用场景。*注:MySQL的REPEATABLE READ通过MVCC和间隙锁解决了大部分幻读问题。• 临键锁(Next-key Lock):记录锁+间隙锁的组合。• 一致性视图:事务开始时创建快照,确定可见的数据版本。• 解决了所有并发问题(脏读、不可重复读、幻读)• 事务可以读取其他事务未提交的数据(脏读)• 事务只能读取其他事务已提交的数据。
2025-05-01 19:10:06
620
原创 synchronized与Lock深度对比
都是Java中实现线程同步的有效机制,各有优缺点。是Java并发包(java.util.concurrent.locks)提供的接口,属于API层面的锁机制。是Java内置的关键字,属于JVM层面的锁机制。它通过对象监视器(Monitor)实现同步,具有自动获取和释放锁的特性。• 锁消除:JVM检测到不可能存在共享数据竞争时消除锁。• 锁粗化:将连续的同步块合并为一个更大的同步块。6.2 单例模式(synchronized实现)• 锁升级机制:偏向锁→轻量级锁→重量级锁。当需要更灵活的锁控制时,
2025-05-01 18:24:33
543
原创 linux安装 Python 3.8 并同步 pip
通过这些步骤,你应该能够成功手动编译安装 Python 3.8,并同步。从 Python 官方网站下载 Python 3.8 的源码包。以下是手动编译安装 Python 3.8 并使用。解压源码包,并编译安装 Python 3.8。检查 Python 3.8 是否安装成功。首先,确保系统已更新并安装必要的依赖项。指向 Python 3.8 的。先删除其他版本对pip3的冲突。是否安装成功,并查看版本。,可以创建一个符号链接。
2025-04-14 11:43:59
803
原创 雪花算法生成的主键存在哪些问题,为什么不能使用自增ID或者UUID做MySQL的主键
特性自增IDUUID雪花算法唯一性单机唯一全局唯一全局唯一有序性严格有序完全无序时间有序存储空间4-8字节16字节8字节分布式支持不支持支持支持生成方式数据库生成应用生成应用生成性能影响自增锁瓶颈索引分裂时钟依赖适用场景单机MySQL简单分布式系统高并发分布式系统推荐选择• 单机系统:自增ID• 简单分布式系统:MySQL 8.0的有序UUID• 高并发分布式系统:雪花算法或其改进版(如Leaf)
2025-04-01 11:04:22
894
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅