- 博客(28)
- 收藏
- 关注
原创 深入理解-Java-线程池:原理、动态调整与监控实践
当你在系统高并发场景下陷入崩溃边缘的时候,线程池也许就是你最靠谱的救命稻草。在面试中,Java线程池往往是被反复拷打的高频知识点。本文将系统性地带你梳理线程池的核心原理、关键参数、拒绝策略、动态调整以及如何实现一个简单的监控机制,帮你从“线程焦虑症”中走出来。
2025-07-16 23:08:32
848
原创 从0设计一个短链接服务:如何实现尽可能短、可变长的短网址系统?
文章介绍了如何从零设计一个可变长度的短链接服务系统。核心方案采用"唯一ID + Base62编码"技术,通过将数字ID转换为0-9a-zA-Z的62进制字符串,生成尽可能短的链接。系统初期使用6位字符(支持56亿种组合),后期可自动扩展位数。文章详细讲解了ID生成、编码算法、数据库存储设计,并提供了性能优化方案如缓存加速、分库分表等。该设计满足短链接服务的核心需求:短小易传播、可反向还原、高并发支持和稳定性保障,同时具备灵活扩展能力。
2025-07-12 21:33:32
968
原创 深入理解-ConcurrentHashMap:JDK-1-7-与-1-8-的演进与实现原理
本文对比了JDK 1.7与1.8中ConcurrentHashMap的实现差异。1.7采用分段锁机制(Segment Locking),每个Segment使用ReentrantLock,支持16线程并发写。1.8重构为Node数组+链表/红黑树结构,使用CAS+synchronized实现更细粒度锁控制,性能更高。重点分析了1.8的put操作流程和size统计优化,采用类似LongAdder的分段计数方式提升并发性能。总结显示1.8在数据结构、锁机制和扩展性方面均有显著改进。
2025-07-12 21:24:23
2717
原创 TCP-与-UDP-协议详解:原理、区别与应用场景全解析
摘要: TCP与UDP是两种核心的传输层协议,主要区别在于连接方式和可靠性。TCP采用三次握手建立可靠连接,确保数据有序、不丢失,适用于网页浏览和文件传输等场景;UDP则无连接、轻量高效,但可能丢包,适用于视频直播和实时通信。TCP像打电话需确认连接,UDP像写信直接发送。选择协议时需权衡可靠性(TCP)与实时性(UDP),合理选用可优化系统性能。理解两者差异对网络开发至关重要。
2025-07-10 20:59:38
1714
3
原创 一文彻底搞懂-AQS-的实现原理与设计思想
摘要: AQS(AbstractQueuedSynchronizer)是Java并发工具的核心框架,通过volatile int state和CAS操作实现资源状态管理,双向链表队列处理线程阻塞与唤醒。其设计采用模板方法模式,子类只需重写tryAcquire定义加锁逻辑。支持独占(如ReentrantLock)和共享模式(如Semaphore),提供公平/非公平策略,并通过Condition实现灵活等待通知机制。相比系统Mutex,AQS在用户态实现更高性能与扩展性,成为构建锁、信号量等并发工具的基础。
2025-07-07 17:53:50
2519
原创 深入理解-synchronized:锁升级全解析
摘要:文章深入解析了Java中的synchronized机制及其锁升级过程。首先介绍了计算机体系结构中的缓存一致性问题导致的多线程并发问题,包括可见性、有序性和原子性。synchronized作为内置锁机制能有效解决这些问题。随后详细讲解了锁升级机制(无锁→偏向锁→轻量级锁→重量级锁),分析了每种锁的适用场景和优化目的。最后解释了重量级锁中的Monitor结构及其作用。文章帮助读者理解synchronized的底层实现原理,为高并发编程提供理论基础。
2025-07-03 17:19:35
1437
原创 从面试懵逼到通透掌握:分布式锁原理全解(附Redisson与Redlock机制剖析)
体系化八股!真正理解分布式锁!带你一步步深入分布式锁的设计
2025-07-02 16:27:17
11724
原创 几分钟教会你数据库事务:从转账例子讲透原理到实现
本文系统介绍了数据库事务的核心概念与实现原理。首先阐述了事务的四大特性(ACID):原子性(通过Undo Log实现)、一致性、隔离性(MVCC机制)和持久性(依赖Redo Log)。接着分析了并发事务可能产生的脏读、不可重复读和幻读问题,并详细解读了四个隔离级别(读未提交、读已提交、可重复读和串行化)的特性和适用场景。重点剖析了MVCC的实现机制,包括版本链、Read View及其可见性判断规则,并对比了读已提交(每次查询生成新Read View)和可重复读(复用同一Read View)的实现差异。最后指
2025-07-01 17:10:47
1484
4
原创 穿针引线!JMM 内存模型及线程安全知识串联
JMM(Java内存模型)是规范Java多线程共享变量访问的抽象模型,定义了线程如何读写共享变量以及实现可见性、原子性和有序性。JMM通过8种同步操作(如lock/unlock、read/write等)协调主内存与工作内存间的数据交互。由于CPU多级缓存可能导致线程间变量不一致,JMM通过happens-before规则(如程序顺序、volatile变量规则等)确保操作顺序和可见性。线程安全分为不可变、绝对线程安全等5类层次。JMM最终解决了多线程环境下的可见性(volatile)、有序性(指令重排)和原子
2025-07-01 14:28:32
1890
原创 深入理解JVM垃圾回收机制,带你一步步思考理解,告别死记硬背!
JVM垃圾回收机制主要管理堆内存,分为新生代和老年代。常见的搜索算法包括引用计数法和可达性分析,回收算法有标记清除、复制和标记整理。JVM提供了多种垃圾回收器,从早期的Serial到现在的G1和ZGC,不断优化以减少STW时间。G1采用区域划分和三色标记法,支持并发回收和碎片整理。此外,引用类型分为强、软、弱、虚四种,TLAB为线程提供私有缓存区域以提升内存分配效率。了解这些机制有助于优化Java应用性能和内存管理。
2025-06-29 22:53:32
6882
原创 Java反射机制讲解,利用疑问一步步刨析
本文介绍了Java反射机制的基本概念和应用场景。反射允许程序在运行时动态获取类信息、创建对象、调用方法和修改属性。作者通过疑问式讲解,阐明了反射的核心类(Class、Field、Method等)及其使用方法,并用代码示例展示了反射的基本操作流程。文章还深入探讨了.class文件与Class对象的关系、类加载机制和双亲委派模型的作用,解释了它们如何确保Java类的安全加载和类型一致性。最后强调了不同类加载器加载的类互不兼容的特性。全文以通俗易懂的方式呈现了Java反射的核心原理和实现机制。
2025-06-27 23:53:56
506
原创 Springboot中常用的注解(分层整理)
本文总结了SpringBoot中常用的注解及其用途,分为通用、Controller层和Service层三部分。通用注解包括依赖注入(@Autowired)、组件管理(@Component)、配置注入(@Value)和Bean定义(@Configuration, @Bean)等;Controller层涵盖请求映射(@RequestMapping)、REST支持(@RestController)和参数处理(@PathVariable, @RequestBody);Service层涉及业务标识(@Service)
2025-06-27 15:41:30
625
原创 Pytorch9 RNN循环神经网络
本文介绍了从零开始实现循环神经网络(RNN)的关键步骤。首先使用独热编码将词元索引转换为特征向量,并通过调整维度便于后续处理。然后初始化模型参数,包括隐藏层和输出层的权重及偏置。重点阐述了RNN模型的核心实现:定义初始隐状态函数和循环计算步骤,通过tanh激活函数更新隐状态。文章还展示了预测函数的实现,包括预热期处理和字符生成过程,以及梯度裁剪技术用于稳定训练。代码示例验证了模型输出的正确形状,并演示了未经训练网络的预测效果。这些内容为理解RNN的基本原理和实现细节提供了实践指导。
2025-06-25 16:06:43
718
原创 Pytorch8实现CNN卷积神经网络
摘要 本文介绍了CNN卷积神经网络的基本原理及其在图像识别任务中的优势。相比全连接网络,CNN通过局部连接、权值共享和下采样等机制有效减少了参数数量并保留了重要的空间信息。文章详细阐述了CNN的三大核心结构:卷积层用于特征提取,池化层用于降采样和增加平移不变性,全连接层完成最终分类。以LeNet为例展示了CNN的具体实现,包括模型构建和训练过程,并验证了其在Fashion-MNIST数据集上的良好性能。实验结果表明,CNN能够高效处理图像数据,为深度学习在计算机视觉领域的应用奠定了基础。
2025-06-24 15:34:48
879
原创 tmux常见命令快速搜寻,深度学习研究必备建议收藏
摘要:tmux是功能强大的终端复用工具,支持创建/管理多个会话窗口。常用命令包括:新建会话(tmux new -s)、切换窗口(Ctrl+b+数字)、划分窗格(Ctrl+b+%/")、调整窗格大小(方向键)等。可通过.tmux.conf自定义配置,默认前缀键为Ctrl+b。特别适合深度学习等需要多任务并行的场景,建议收藏这些基础操作命令。(150字)
2025-06-24 15:21:59
462
原创 由浅入深带你快速理解Mysql内部机制!- 带面试题补充
摘要:本文深入解析MySQL核心机制,分为基础、索引、事务和锁四部分。基础部分介绍SQL执行流程;索引部分分析B+树优势及最左匹配原则;事务部分详解ACID特性、隔离级别和MVCC实现原理;锁部分分类讨论表级锁与行级锁的应用场景。文章还涵盖了常见面试问题,如脏读、幻读等并发问题及解决方案,帮助读者全面理解MySQL内部工作原理。
2025-06-23 12:27:35
6209
原创 Pytorch6-多层感知机
摘要: 多层感知机(MLP)通过引入隐藏层和非线性激活函数(如ReLU、sigmoid等)解决了线性模型的局限性,能够学习复杂的数据模式。隐藏层对输入进行非线性变换和特征提取,增强模型的表达能力。然而,模型可能面临欠拟合(训练误差和泛化误差均高)或过拟合(训练误差低但泛化误差高)问题。权重衰减(L2正则化)是常用的正则化技术,通过在损失函数中添加权重平方和的惩罚项(λ控制强度),抑制过拟合,平衡模型复杂度与泛化能力。实际应用中,需调整模型复杂度、数据集大小和正则化参数以优化性能。PyTorch实现展示了ML
2025-06-23 09:30:00
1051
原创 Pytorch7深度学习计算
本文介绍了深度学习中的块和层概念,通过PyTorch实现自定义神经网络组件。主要内容包括:1)块的基本功能与编程实现,包括前向传播和参数存储;2)从零构建多层感知机(MLP)类,展示如何继承nn.Module并实现关键方法;3)仿制Sequential类的实现原理,通过有序字典管理网络层;4)讨论在自定义块中执行任意代码和控制流的灵活性。文章通过代码示例演示了如何组合简单层构建复杂模型,为理解神经网络架构提供了基础框架。
2025-06-22 20:11:31
982
原创 Java常用STL,力扣洛谷刷题必备!介绍简洁,适用于面试考研复试...
本文摘要:Java常用数据结构与转换方法总结 String操作:包含创建、判空、长度获取、大小写转换、截取、查找等常用方法。ArrayList操作:包括创建、增删改查元素、清空等基本操作。HashMap操作:涵盖键值对的添加、替换、删除、查询等方法。数据类型转换:详细介绍String与int、Integer、char之间的相互转换方式,以及装箱拆箱操作。文章提供了简洁明了的代码示例,方便快速掌握Java基础数据结构的使用。
2025-06-22 10:15:00
276
原创 八千字带你搞通JVM核心!!结合大厂面试题理解
本文总结了JVM的核心知识点,包括: JVM组成结构(类加载子系统、运行时数据区、执行引擎等) 类加载机制(加载、链接、初始化流程)及双亲委派模型 运行时数据区详解(程序计数器、虚拟机栈、本地方法栈、堆区) 内存区域的分代设计(年轻代Eden/Survivor、老年代) 类加载器分类(引导类、扩展类、应用类、自定义类) 常见内存异常(StackOverflowError、OutOfMemoryError) 重点解析了堆区内存结构、栈帧组成、SPI机制打破双亲委派等核心概念,帮助理解Java程序的运行机制。
2025-06-22 09:34:20
8477
原创 JUC详解(万字带你彻底搞懂JUC)框架建立+面试题理解
《JUC详解:线程创建、控制与状态解析》摘要 本文系统介绍了Java并发编程(JUC)核心知识:1)三种线程创建方式:实现Runnable接口、继承Thread类、实现Callable接口;2)四种线程控制方法:sleep休眠、join等待、setDaemon守护线程、yield让步;3)Callable与Future机制获取线程执行结果,详细解析了Future接口的五种方法和FutureTask实现类;4)Java线程的六种状态转换:NEW(未启动)、RUNNABLE(可运行)、BLOCKED(阻塞)、W
2025-06-21 16:41:54
6176
3
原创 Pytorch5线性神经网络
本文介绍了线性回归的基本概念及其实现方法。线性回归是一种预测连续值输出的简单模型,通过输入特征的线性组合加偏置项来预测目标值。文章阐述了线性模型的基本元素(权重和偏置)、损失函数(平方误差)以及解析解的计算方法(最小二乘法)。同时讲解了梯度下降算法在训练线性回归模型中的应用,包括小批量随机梯度下降的实现步骤。最后指出线性回归虽简单但揭示了机器学习的基本原理,为理解更复杂模型奠定了基础。文章还提到矢量化加速的重要性,以提高模型训练效率。
2025-06-21 16:09:47
747
原创 Pytorch4文档查阅
本文介绍了PyTorch API文档的查阅方法。主要内容包括:1)使用dir()函数查看模块所有函数和类,可过滤掉特殊命名对象;2)通过help()函数或Jupyter的?/??指令查询特定函数/类的详细说明和使用示例;3)以torch.ones()为例展示如何获取参数说明、返回值及示例用法。这些方法能帮助开发者快速了解PyTorch API的功能和使用方式。
2025-06-21 15:54:23
326
原创 一文带你彻底理解HashMap!!(原理+面试考点+Map引深)
HashMap核心原理摘要 HashMap采用数组+链表+红黑树结构,JDK1.8引入红黑树优化链表性能。扩容条件为size>loadFactor×capacity,负载因子默认0.75。数组容量保持2的n次方,通过位运算(hash & (length-1))高效计算索引。哈希计算采用二次哈希(hashCode ^ hashCode>>>16)增强分散性。扩容时容量翻倍,通过拆分链表优化迁移效率。当链表长度超过8时转为红黑树,长度低于6时退化回链表,以平衡查询和插入性能。
2025-06-21 15:44:58
1106
原创 Pytorch3自动微分
本文介绍了PyTorch中的自动微分功能,这是深度学习优化的核心。主要内容包括:1)通过计算图实现自动微分和反向传播;2)标量和非标量变量的梯度计算方法;3)分离计算的操作和注意事项;4)Python控制流下的梯度计算示例。文章通过具体代码演示了如何存储梯度、计算导数以及处理复杂计算图的微分,强调自动微分在简化复杂模型求导过程中的重要性。最后展示了条件语句和循环条件下的梯度计算能力,体现了PyTorch自动微分的灵活性。
2025-06-21 15:36:39
297
原创 Pytorch2微积分实现
本文介绍了在PyTorch中实现微积分基础功能的方法。首先通过函数f(x)=3x²-4x演示了数值求导的实现,展示了当x=1时导数趋近于2的过程。其次详细讲解了使用Matplotlib绘制函数图像及切线的技巧,包括图形配置函数(use_svg_display、set_figsize、set_axes)和绘图函数plot的定义。最后简要提及了多元函数梯度的概念,即由所有变量的偏导数组成的向量。这些内容为深度学习中的自动微分和梯度计算提供了数学基础。
2025-06-21 15:34:03
434
原创 Pytorch1线性代数实现
本文介绍了PyTorch中线性代数的基础操作,主要包括: 矩阵创建与操作:展示如何创建矩阵并执行转置等基本操作 张量概念:从标量、向量扩展到高维张量,介绍其创建和使用方法 张量运算:涵盖按元素运算、Hadamard积等操作及其性质 降维操作:讲解求和、均值计算及指定轴降维的方法 点积和矩阵-向量积:解释这些核心运算的实现及其应用场景 文章通过代码示例直观展示了PyTorch如何实现这些线性代数运算,为后续深度学习应用奠定基础。
2025-06-21 15:28:27
994
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人