- 博客(90)
- 收藏
- 关注
原创 【代码随想录】刷题笔记——二叉树篇
二叉树算法总结 本文总结了二叉树相关的核心算法,包括遍历、操作和特性验证等。 遍历算法 递归遍历:前序、中序、后序的递归实现简洁直观 迭代遍历:使用栈模拟递归过程,避免递归开销 统一迭代法:通过标记节点实现三种遍历的统一写法 层序遍历:使用队列实现广度优先搜索,可递归或迭代 二叉树操作 翻转二叉树:递归交换左右子树 合并二叉树:同时遍历两棵树合并节点 构造二叉树:根据遍历序列重构二叉树 BST操作:搜索、插入、删除、修剪等
2025-07-28 12:06:24
387
原创 【代码随想录】刷题笔记——栈和队列篇
本文总结了栈、队列和堆的基本操作及其经典应用。栈遵循LIFO原则,支持push、pop、peek等操作;队列遵循FIFO原则,提供offer、poll等方法。文章详解了如何用双栈实现队列、用队列实现栈的转换技巧,并提供了有效的括号匹配、相邻重复项删除、逆波兰表达式求值等典型问题的解决方案。在堆的应用方面,介绍了大小根堆的实现方式及滑动窗口最大值、前K高频元素等问题的处理思路,重点阐述了单调队列和优先队列的使用技巧。所有代码示例均采用Java实现,并附有详细注释说明。
2025-07-16 16:50:28
912
原创 【代码随想录】刷题笔记——字符串篇
本文总结了字符串反转和匹配的常见算法实现。主要包括:1)344题双指针反转字符串;2)541题分段反转字符串(每2k字符反转前k个);3)151题反转字符串中的单词顺序;4)28题字符串匹配(朴素算法);5)459题判断重复子字符串的巧妙解法。关键技巧包括双指针、分段处理、字符串拼接等,并介绍了StringBuilder、trim()等常用API。这些算法体现了字符串处理的基本思路,如指针操作、模式匹配等,是解决更复杂字符串问题的基础。
2025-07-14 16:28:25
493
原创 【代码随想录】刷题笔记——哈希表篇
本文总结了多个使用哈希表解决的算法问题,包括: 有效的字母异位词(通过字符计数或排序比较) 数组交集(使用HashSet去重) 快乐数(检测循环出现的sum值) 两数之和(利用HashMap存储补数) 四数相加(分组统计两数之和) 赎金信(字符频率统计) 三数/四数之和(排序+双指针去重) 关键点包括:哈希表用于快速查找元素,排序结合双指针处理多数和问题,以及Java集合API的使用技巧(如merge、getOrDefault等方法)。文章提供了多种解法并比较了不同实现方式的优缺点。
2025-07-12 16:21:18
1285
原创 【SSM面试篇】Spring、SpringMVC、SpringBoot、Mybatis高频八股汇总
总结Spring、SpringMVC、SpringBoot、Mybatis面试高频八股。
2025-07-11 09:29:26
977
原创 【代码随想录】刷题笔记——链表篇
本文总结了链表相关算法题解,包括移除元素、反转链表、两两交换节点、删除倒数第N个节点、相交链表和环形链表检测等常见问题。
2025-07-09 20:01:36
494
原创 【代码随想录】刷题笔记——数组篇
【算法题解摘要】本文总结5个常见数组算法:1.二分查找(704)通过中点计算优化防止溢出;2.移除元素(27)使用双指针原地修改数组;3.有序数组平方(977)提供暴力排序和双指针两种解法;4.最小子数组(209)采用滑动窗口求满足条件的最小长度;5.螺旋矩阵II(59)通过四边界模拟顺时针填充过程。所有解法均包含Java实现代码和关键思路说明,涉及双指针、滑动窗口等典型技巧,其中二分查找重点强调了防溢出的中点计算方法。
2025-07-06 16:34:51
468
原创 【Redis面试篇】Redis高频八股汇总
Redis核心原理与实践摘要 Redis作为高性能缓存系统的核心优势在于内存操作和高效数据结构,其单线程模型避免了多线程竞争,通过I/O多路复用实现高并发处理。数据持久化采用AOF日志、RDB快照和混合模式三种方式,混合持久化结合了RDB快速恢复和AOF低数据丢失的优点。内存管理方面采用惰性删除+定期删除策略,并支持多种淘汰策略应对内存不足。 Redis分布式方案包括主从复制、哨兵机制和Cluster集群,Cluster采用16384个哈希槽实现数据分片。性能优化手段包括管道技术批量处理命令、大Key拆分清
2025-06-30 15:52:33
975
原创 【Redis原理】Redis生产问题——缓存穿透、缓存击穿、缓存雪崩和缓存与数据库的数据一致性
针对缓存常见问题,本文提出以下解决方案: 缓存穿透:采用非法请求限制、缓存空值或布隆过滤器判断数据存在性,避免无效数据库查询。 缓存击穿:使用互斥锁或热点数据永不过期策略,防止热点数据失效时数据库过载。 缓存雪崩:通过均匀设置过期时间、互斥锁、后台更新及Redis集群保障,避免大规模缓存失效。 数据一致性:推荐旁路缓存模式(先更新数据库后删缓存),配合重试机制确保缓存与数据库同步。 这些方案有效解决了高并发场景下的缓存问题,保障系统稳定运行。
2025-06-29 16:16:10
1172
原创 【Redis原理】Redis性能优化
Redis性能优化涉及多个方面:1)通过慢查询日志分析耗时命令;2)缩短键值对长度提升读写效率;3)启用LazyFree机制异步删除大对象;4)合理设置键值过期时间;5)使用Pipeline批量操作减少网络开销;6)避免大量数据同时过期;7)限制内存容量并配置淘汰策略;8)优先使用物理机部署。这些措施包括命令优化、内存管理、网络处理和硬件选择等层面,可显著提升Redis运行效率与稳定性。
2025-06-29 15:19:50
823
原创 【Redis原理】Redis事务与线程模型
Redis事务通过MULTI/EXEC将多个命令打包执行,但不满足原子性和持久性,且网络开销大,实际开发中建议使用Lua脚本替代。Redis采用单线程处理核心命令(6.0前完全单线程,6.0后多线程仅用于网络I/O),其高性能源于:内存操作、避免线程竞争、I/O多路复用技术。后台线程(BIO)异步处理文件关闭、AOF刷盘和内存释放等耗时任务,防止主线程阻塞。单线程设计简化了并发控制,而6.0引入多线程网络I/O以应对现代硬件条件下的网络性能瓶颈。
2025-06-29 09:46:31
685
原创 【Redis原理】Redis分布式缓存——主从复制、哨兵机制与Redis Cluster
Redis主从复制通过读写分离实现数据备份与高可用,主服务器负责写操作并同步至从服务器。哨兵机制监控主节点状态,自动选举新主节点并通知客户端,确保故障转移。Redis Cluster采用哈希槽分片存储数据,支持分布式扩展,节点间通过Gossip协议通信,故障时自动重新分配槽位。两者结合解决了单点故障、数据一致性、水平扩展等问题,构建高可用分布式Redis服务。
2025-06-28 15:41:45
941
原创 【Redis原理】Redis过期删除策略与内存淘汰策略
Redis过期删除策略与内存淘汰机制详解 Redis提供了灵活的过期键删除策略,包括4种设置方式(秒/毫秒级精确)和3种组合命令。其核心采用惰性删除+定期删除的混合策略:惰性删除在访问时检查过期键,定期删除则随机采样20个键,根据过期比例动态调整检查频率。内存管理方面,Redis提供8种淘汰策略,分为不淘汰数据和淘汰数据两类。淘汰策略又细分为针对过期键和全键两种范围,包含LRU、LFU等算法。其中LFU算法通过24位字段记录访问频率和时间戳,解决了LRU的缓存污染问题。
2025-06-27 15:57:22
1134
原创 【Redis原理】Redis持久化——RDB与AOF
Redis提供了两种持久化方式:RDB和AOF。RDB通过save/bgsave命令生成全量快照,bgsave利用写时复制技术避免阻塞主线程。AOF记录写操作命令,支持三种写回策略(Always/Everysec/No)平衡性能与可靠性。AOF重写机制通过后台子进程压缩文件体积。Redis 4.0引入混合持久化,结合RDB快速恢复和AOF低数据丢失的优点,生成同时包含RDB全量数据和AOF增量命令的文件。
2025-06-27 10:52:46
896
原创 【Redis原理】Redis基本数据类型及其原理
Redis支持多种数据类型,各有特点及应用场景:String(字符串)可存储文本、数字或二进制数据,适用于缓存、计数和简易分布式锁;List(列表)按插入顺序存储元素,适合最新动态展示和简单消息队列;Hash(哈希表)存储键值对,用于对象数据存储;Set(集合)存储唯一元素,支持集合运算,适用UV统计和好友推荐;Zset(有序集合)按分值排序,适合排行榜和优先级队列;BitMap(位图)通过二进制位节省空间,适用于签到统计和用户在线状态。
2025-06-26 10:51:02
1152
原创 【Redis原理】Redis数据结构底层原理
Redis采用多种高效数据结构实现底层存储,主要包括:SDS(动态字符串)优化C语言字符串,支持O(1)长度获取和自动扩容;IntSet(整数集合)实现有序唯一整数存储,支持动态类型升级;ZipList(压缩列表)作为紧凑型双向链表,但存在连锁更新问题;Dict(哈希表)采用渐进式rehash平衡性能;SkipList(跳表)通过多层结构实现有序数据的快速查找;QuickList结合双向链表和压缩列表优点。RedisObject统一封装所有数据类型。
2025-06-26 09:39:12
990
原创 【JUC】并发编程重点知识——ThreadLocal
本文详细剖析了ThreadLocal的实现原理和内存管理机制。ThreadLocal通过为每个线程维护独立的ThreadLocalMap实现线程隔离。当发生哈希冲突时使用线性探测法处理,并采用弱引用机制防止内存泄漏。文章深入解析了set/get方法的实现逻辑,包括探测式清理(expungeStaleEntry)和启发式清理(cleanSomeSlots)两种过期数据清理策略,以及扩容机制。
2025-06-18 10:51:01
1318
原创 【JUC】并发编程重点知识——常见并发容器总结
Java并发容器提供了高效的线程安全解决方案,包括ConcurrentHashMap(分段锁/Node+CAS)、CopyOnWriteArrayList(读多写少场景)、ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)。ConcurrentSkipListMap利用跳表实现快速查找和有序遍历。这些容器通过细粒度锁、写时复制、CAS等机制优化并发性能,适用于不同场景,如高并发读写、数据共享通道和有序访问需求。
2025-06-17 12:15:01
940
原创 【JUC】并发编程重点知识——AQS与常见同步工具类
摘要: AQS(AbstractQueuedSynchronizer)是Java并发包的核心框架,用于构建锁和同步器。它通过state变量表示资源状态,使用CLH队列管理等待线程,支持独占和共享两种模式。AQS提供模板方法模式,子类只需实现tryAcquire等钩子方法即可自定义同步器。基于AQS实现的常见同步工具包括: Semaphore - 控制并发线程数量 CountDownLatch - 多线程协作计数器 CyclicBarrier - 可循环使用的线程屏障
2025-06-16 10:50:52
830
原创 【JUC】并发编程重点知识——线程池
Java线程池详解,包括线程池简介、Executors、ThreadPoolExecutor、线程池工作原理和常见的线程池等等。
2025-06-15 15:13:23
835
原创 【JUC】并发编程重点知识——JMM(Java 内存模型)
Java内存模型(JMM)规范详解摘要:JMM是Java程序的抽象内存规范,定义了主内存和工作内存的交互机制,确保多线程环境下内存访问的一致性。主内存存储共享变量,工作内存保存线程私有副本,线程间通信必须通过主内存完成。JMM规定了8种原子操作实现内存交互,并强调三大特性:可见性(volatile解决缓存一致性问题)、原子性(指令不可分割)、有序性(防止指令重排序)。同时分析了CPU流水线技术和指令重排原理,解释了这些特性在多线程环境中的重要性。JMM通过这套规范保证了Java程序在不同平台下的内存访问一致
2025-06-14 14:42:18
864
原创 【JUC】并发编程重点知识——乐观锁与悲观锁
悲观锁与乐观锁是两种并发控制方法。悲观锁假设冲突必然发生,操作前加锁独占资源(如synchronized、ReentrantLock),适合写多读少、长事务场景。乐观锁假设冲突较少,通过CAS或版本号在提交时检测冲突(如Atomic类),适合读多写少、短操作场景。两者在加锁时机、线程状态、性能开销上存在差异:悲观锁强一致但阻塞,乐观锁非阻塞需自旋。选择依据主要取决于读写比例、冲突概率和性能需求。
2025-06-14 10:46:30
895
原创 【JUC】并发编程重点知识——CAS与Atomic原子类总结
CAS(Compare-And-Swap)是一种无锁编程的CPU原子指令,通过比较内存值与预期值实现线程安全操作。其底层采用lock cmpxchg指令保证原子性,具有无阻塞、高性能特点,但存在ABA问题和循环开销问题。Java中通过Atomic系列类(如AtomicInteger)实现CAS操作,包含原子引用、数组、更新器等扩展功能。相比synchronized悲观锁,CAS基于乐观锁思想,但需配合volatile保证可见性。为解决ABA问题,可使用AtomicStampedReference版本号机制。
2025-06-14 10:36:46
952
原创 【JUC】并发编程重点知识——Volatile
本文探讨了Java中volatile关键字的同步机制及其实现原理。volatile通过三大特性(可见性、有序性、非原子性)实现轻量级同步,相比synchronized性能更高但写操作较慢。其底层通过lock前缀指令和内存屏障保证缓存一致性,防止指令重排。文章详细分析了指令重排的限制条件和典型示例,阐释了双端检锁机制(DCL)的线程安全问题及volatile的解决方案。内存屏障(写屏障、读屏障)的作用被重点说明,包括确保原子性、阻止重排序和强制数据刷新。
2025-06-13 15:50:53
1008
原创 【JUC】并发编程重点知识——ReentrantLock
ReentrantLock与synchronized对比分析:1)实现层面:前者为JDK实现,后者为JVM实现;2)特性对比:ReentrantLock支持可中断、公平锁、超时机制和多条件变量,而synchronized自动解锁但不支持上述特性。核心原理:通过AQS实现锁机制,非公平锁采用直接CAS竞争,公平锁先检查队列;条件变量通过ConditionObject管理等待队列。使用要点:必须配对解锁,可重入机制通过state计数实现,提供lockInterruptibly()实现可打断获取锁。
2025-06-13 10:29:11
1157
原创 【JUC】并发编程重点知识——Synchronized及其优化原理
摘要:本文深入解析Java中synchronized的实现原理与优化策略。首先介绍synchronized的基本使用,包括同步代码块和同步方法两种形式,以及对应的锁对象选择。其次详细阐述Monitor监视器机制,说明重量级锁的工作流程。重点分析了锁升级过程,包括偏向锁、轻量级锁和重量级锁的转换条件及实现原理。最后探讨了自旋锁、锁消除和锁粗化三种优化技术,以提高并发性能。全文系统地呈现了synchronized从使用到底层实现的完整知识体系,为深入理解Java同步机制提供了重要参考。
2025-06-12 10:50:12
865
原创 【JUC面试篇】Java并发编程高频八股——线程与多线程
本文总结了Java线程的核心概念和常见问题,主要内容包括:进程与线程的区别、线程创建4种方式(继承Thread、实现Runnable/Callable、线程池)、线程的6种状态(NEW、RUNNABLE等)、线程间通信方法(共享变量、wait/notify、Lock/Condition、阻塞队列等)。重点分析了线程同步机制(synchronized和volatile)、死锁条件及避免方法,并比较了sleep与wait、notify与notifyAll等关键操作的区别,为Java多线程编程提供了实用指导。
2025-06-11 11:10:38
926
原创 【JVM】Java虚拟机(三)——类加载与类加载器
Java类加载机制是JVM将.class文件加载到内存并转换为可用类型的过程,包括加载、验证、准备、解析和初始化五个阶段。类加载采用双亲委派模型,分为启动类加载器、扩展类加载器和应用类加载器。自定义类加载器可实现热部署、模块隔离等功能。类卸载需满足实例回收、Class对象无引用和ClassLoader回收三个条件。常见问题包括ClassNotFoundException和类加载器内存泄漏等,需注意类路径检查和生命周期管理。该机制保障了Java程序的安全性和灵活性。
2025-06-08 09:38:45
1389
原创 【JVM】Java虚拟机(一)——内存结构
Java虚拟机(JVM)内存结构分为线程私有区域(程序计数器、虚拟机栈、本地方法栈)和共享区域(堆、方法区)。程序计数器记录执行指令,虚拟机栈存储方法调用栈帧,本地方法栈处理Native方法。堆是最大内存区域,用于对象存储和GC回收。方法区存储类信息、常量等,JDK8后改为元空间。StringTable是哈希表结构,管理字符串引用,JDK7后移至堆内存。直接内存位于堆外,通过NIO操作,提升I/O性能但需手动管理。各区域协同工作,共同支撑Java程序运行。
2025-06-06 16:19:20
1483
原创 【计算机网络】第3章:传输层—TCP 拥塞控制
摘要: TCP拥塞控制通过动态调整发送窗口(cwnd)平衡网络效率与公平性。核心机制包括:慢启动(指数增长探测带宽)、拥塞避免(线性增长防过载)、快速重传(3次重复ACK立即重传)和快速恢复(减半窗口维持吞吐)。经典算法如Tahoe/Reno采用“加性增、乘性减”原则,现代优化算法如CUBIC(三次函数增长)和BBR(主动测量带宽/RTT)进一步适应高带宽网络。目标是通过保守启动、快速响应丢包,实现高吞吐、低延迟和网络稳定性。
2025-06-04 09:33:08
1330
原创 【计算机网络】第3章:传输层—拥塞控制原理
网络拥塞是指数据流量超出设备处理能力,导致性能下降的现象,表现为丢包、时延增加等。主要原因包括缓冲区溢出、多流竞争带宽等。拥塞控制目标包括公平分配带宽、最大化吞吐量等。主要方法分为端到端控制(如TCP的慢启动、拥塞避免机制)和网络辅助控制(如ECN显式通知)。端到端控制部署简单但响应慢,网络辅助控制更精准但需设备支持。两种方法各有优缺点,需根据网络环境选择合适的控制策略。
2025-06-02 09:24:26
1259
原创 【计算机网络】第3章:传输层—面向连接的传输:TCP
《TCP协议详解》摘要(150字): TCP是面向连接的可靠传输层协议,提供有序、全双工的字节流服务。其核心机制包括:三次握手/四次挥手的连接管理、序列号确认与滑动窗口的可靠传输、动态窗口的流量控制,以及慢启动/拥塞避免的拥塞控制。TCP报文首部20-60字节,含端口号、序列号、控制标识等关键字段。虽保证数据可靠性,但存在连接开销大、首部较长、队头阻塞等缺点,适用于HTTP、FTP等需可靠传输的场景。相较于UDP,TCP更注重数据完整性而非实时性。
2025-06-01 11:26:58
1982
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人