自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【代码随想录】刷题笔记——哈希表篇

本文总结了多个使用哈希表解决的算法问题,包括: 有效的字母异位词(通过字符计数或排序比较) 数组交集(使用HashSet去重) 快乐数(检测循环出现的sum值) 两数之和(利用HashMap存储补数) 四数相加(分组统计两数之和) 赎金信(字符频率统计) 三数/四数之和(排序+双指针去重) 关键点包括:哈希表用于快速查找元素,排序结合双指针处理多数和问题,以及Java集合API的使用技巧(如merge、getOrDefault等方法)。文章提供了多种解法并比较了不同实现方式的优缺点。

2025-07-12 16:21:18 387

原创 【SSM面试篇】Spring、SpringMVC、SpringBoot、Mybatis高频八股汇总

总结Spring、SpringMVC、SpringBoot、Mybatis面试高频八股。

2025-07-11 09:29:26 736

原创 【代码随想录】刷题笔记——链表篇

本文总结了链表相关算法题解,包括移除元素、反转链表、两两交换节点、删除倒数第N个节点、相交链表和环形链表检测等常见问题。

2025-07-09 20:01:36 465

原创 【代码随想录】刷题笔记——数组篇

【算法题解摘要】本文总结5个常见数组算法:1.二分查找(704)通过中点计算优化防止溢出;2.移除元素(27)使用双指针原地修改数组;3.有序数组平方(977)提供暴力排序和双指针两种解法;4.最小子数组(209)采用滑动窗口求满足条件的最小长度;5.螺旋矩阵II(59)通过四边界模拟顺时针填充过程。所有解法均包含Java实现代码和关键思路说明,涉及双指针、滑动窗口等典型技巧,其中二分查找重点强调了防溢出的中点计算方法。

2025-07-06 16:34:51 443

原创 【JavaSE面试篇】Java集合部分高频八股汇总

总结Java集合部分面试高频八股,包括List、Map、Set等。

2025-07-05 09:57:25 1330

原创 【JavaSE面试篇】Java基础部分高频八股汇总

总结Java基础部分高频八股

2025-07-03 16:09:04 949

原创 【Redis面试篇】Redis高频八股汇总

Redis核心原理与实践摘要 Redis作为高性能缓存系统的核心优势在于内存操作和高效数据结构,其单线程模型避免了多线程竞争,通过I/O多路复用实现高并发处理。数据持久化采用AOF日志、RDB快照和混合模式三种方式,混合持久化结合了RDB快速恢复和AOF低数据丢失的优点。内存管理方面采用惰性删除+定期删除策略,并支持多种淘汰策略应对内存不足。 Redis分布式方案包括主从复制、哨兵机制和Cluster集群,Cluster采用16384个哈希槽实现数据分片。性能优化手段包括管道技术批量处理命令、大Key拆分清

2025-06-30 15:52:33 911

原创 【Redis原理】Redis生产问题——缓存穿透、缓存击穿、缓存雪崩和缓存与数据库的数据一致性

针对缓存常见问题,本文提出以下解决方案: 缓存穿透:采用非法请求限制、缓存空值或布隆过滤器判断数据存在性,避免无效数据库查询。 缓存击穿:使用互斥锁或热点数据永不过期策略,防止热点数据失效时数据库过载。 缓存雪崩:通过均匀设置过期时间、互斥锁、后台更新及Redis集群保障,避免大规模缓存失效。 数据一致性:推荐旁路缓存模式(先更新数据库后删缓存),配合重试机制确保缓存与数据库同步。 这些方案有效解决了高并发场景下的缓存问题,保障系统稳定运行。

2025-06-29 16:16:10 1146

原创 【Redis原理】Redis性能优化

Redis性能优化涉及多个方面:1)通过慢查询日志分析耗时命令;2)缩短键值对长度提升读写效率;3)启用LazyFree机制异步删除大对象;4)合理设置键值过期时间;5)使用Pipeline批量操作减少网络开销;6)避免大量数据同时过期;7)限制内存容量并配置淘汰策略;8)优先使用物理机部署。这些措施包括命令优化、内存管理、网络处理和硬件选择等层面,可显著提升Redis运行效率与稳定性。

2025-06-29 15:19:50 787

原创 【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 660

原创 【Redis原理】Redis分布式缓存——主从复制、哨兵机制与Redis Cluster

Redis主从复制通过读写分离实现数据备份与高可用,主服务器负责写操作并同步至从服务器。哨兵机制监控主节点状态,自动选举新主节点并通知客户端,确保故障转移。Redis Cluster采用哈希槽分片存储数据,支持分布式扩展,节点间通过Gossip协议通信,故障时自动重新分配槽位。两者结合解决了单点故障、数据一致性、水平扩展等问题,构建高可用分布式Redis服务。

2025-06-28 15:41:45 904

原创 【Redis原理】Redis过期删除策略与内存淘汰策略

Redis过期删除策略与内存淘汰机制详解 Redis提供了灵活的过期键删除策略,包括4种设置方式(秒/毫秒级精确)和3种组合命令。其核心采用惰性删除+定期删除的混合策略:惰性删除在访问时检查过期键,定期删除则随机采样20个键,根据过期比例动态调整检查频率。内存管理方面,Redis提供8种淘汰策略,分为不淘汰数据和淘汰数据两类。淘汰策略又细分为针对过期键和全键两种范围,包含LRU、LFU等算法。其中LFU算法通过24位字段记录访问频率和时间戳,解决了LRU的缓存污染问题。

2025-06-27 15:57:22 1091

原创 【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 856

原创 【Redis原理】Redis基本数据类型及其原理

Redis支持多种数据类型,各有特点及应用场景:String(字符串)可存储文本、数字或二进制数据,适用于缓存、计数和简易分布式锁;List(列表)按插入顺序存储元素,适合最新动态展示和简单消息队列;Hash(哈希表)存储键值对,用于对象数据存储;Set(集合)存储唯一元素,支持集合运算,适用UV统计和好友推荐;Zset(有序集合)按分值排序,适合排行榜和优先级队列;BitMap(位图)通过二进制位节省空间,适用于签到统计和用户在线状态。

2025-06-26 10:51:02 1114

原创 【Redis原理】Redis数据结构底层原理

Redis采用多种高效数据结构实现底层存储,主要包括:SDS(动态字符串)优化C语言字符串,支持O(1)长度获取和自动扩容;IntSet(整数集合)实现有序唯一整数存储,支持动态类型升级;ZipList(压缩列表)作为紧凑型双向链表,但存在连锁更新问题;Dict(哈希表)采用渐进式rehash平衡性能;SkipList(跳表)通过多层结构实现有序数据的快速查找;QuickList结合双向链表和压缩列表优点。RedisObject统一封装所有数据类型。

2025-06-26 09:39:12 916

原创 【JUC面试篇】Java并发编程高频八股——线程池

总结Java并发编程高频八股之线程池相关的问题。

2025-06-20 14:43:10 949

原创 【JUC面试篇】Java并发编程高频八股——并发安全

总结Java并发编程高频八股之并发安全相关问题。

2025-06-20 10:47:22 696

原创 【JUC】并发编程重点知识——ThreadLocal

本文详细剖析了ThreadLocal的实现原理和内存管理机制。ThreadLocal通过为每个线程维护独立的ThreadLocalMap实现线程隔离。当发生哈希冲突时使用线性探测法处理,并采用弱引用机制防止内存泄漏。文章深入解析了set/get方法的实现逻辑,包括探测式清理(expungeStaleEntry)和启发式清理(cleanSomeSlots)两种过期数据清理策略,以及扩容机制。

2025-06-18 10:51:01 1281

原创 【JUC】并发编程重点知识——常见并发容器总结

Java并发容器提供了高效的线程安全解决方案,包括ConcurrentHashMap(分段锁/Node+CAS)、CopyOnWriteArrayList(读多写少场景)、ConcurrentLinkedQueue(非阻塞队列)和BlockingQueue(阻塞队列)。ConcurrentSkipListMap利用跳表实现快速查找和有序遍历。这些容器通过细粒度锁、写时复制、CAS等机制优化并发性能,适用于不同场景,如高并发读写、数据共享通道和有序访问需求。

2025-06-17 12:15:01 925

原创 【JUC】并发编程重点知识——AQS与常见同步工具类

摘要: AQS(AbstractQueuedSynchronizer)是Java并发包的核心框架,用于构建锁和同步器。它通过state变量表示资源状态,使用CLH队列管理等待线程,支持独占和共享两种模式。AQS提供模板方法模式,子类只需实现tryAcquire等钩子方法即可自定义同步器。基于AQS实现的常见同步工具包括: Semaphore - 控制并发线程数量 CountDownLatch - 多线程协作计数器 CyclicBarrier - 可循环使用的线程屏障

2025-06-16 10:50:52 799

原创 【JUC】并发编程重点知识——线程池

Java线程池详解,包括线程池简介、Executors、ThreadPoolExecutor、线程池工作原理和常见的线程池等等。

2025-06-15 15:13:23 702

原创 【JUC】并发编程重点知识——JMM(Java 内存模型)

Java内存模型(JMM)规范详解摘要:JMM是Java程序的抽象内存规范,定义了主内存和工作内存的交互机制,确保多线程环境下内存访问的一致性。主内存存储共享变量,工作内存保存线程私有副本,线程间通信必须通过主内存完成。JMM规定了8种原子操作实现内存交互,并强调三大特性:可见性(volatile解决缓存一致性问题)、原子性(指令不可分割)、有序性(防止指令重排序)。同时分析了CPU流水线技术和指令重排原理,解释了这些特性在多线程环境中的重要性。JMM通过这套规范保证了Java程序在不同平台下的内存访问一致

2025-06-14 14:42:18 833

原创 【JUC】并发编程重点知识——乐观锁与悲观锁

悲观锁与乐观锁是两种并发控制方法。悲观锁假设冲突必然发生,操作前加锁独占资源(如synchronized、ReentrantLock),适合写多读少、长事务场景。乐观锁假设冲突较少,通过CAS或版本号在提交时检测冲突(如Atomic类),适合读多写少、短操作场景。两者在加锁时机、线程状态、性能开销上存在差异:悲观锁强一致但阻塞,乐观锁非阻塞需自旋。选择依据主要取决于读写比例、冲突概率和性能需求。

2025-06-14 10:46:30 878

原创 【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 922

原创 【JUC】并发编程重点知识——Volatile

本文探讨了Java中volatile关键字的同步机制及其实现原理。volatile通过三大特性(可见性、有序性、非原子性)实现轻量级同步,相比synchronized性能更高但写操作较慢。其底层通过lock前缀指令和内存屏障保证缓存一致性,防止指令重排。文章详细分析了指令重排的限制条件和典型示例,阐释了双端检锁机制(DCL)的线程安全问题及volatile的解决方案。内存屏障(写屏障、读屏障)的作用被重点说明,包括确保原子性、阻止重排序和强制数据刷新。

2025-06-13 15:50:53 978

原创 【JUC】并发编程重点知识——ReentrantLock

ReentrantLock与synchronized对比分析:1)实现层面:前者为JDK实现,后者为JVM实现;2)特性对比:ReentrantLock支持可中断、公平锁、超时机制和多条件变量,而synchronized自动解锁但不支持上述特性。核心原理:通过AQS实现锁机制,非公平锁采用直接CAS竞争,公平锁先检查队列;条件变量通过ConditionObject管理等待队列。使用要点:必须配对解锁,可重入机制通过state计数实现,提供lockInterruptibly()实现可打断获取锁。

2025-06-13 10:29:11 1137

原创 【JUC】并发编程重点知识——Synchronized及其优化原理

摘要:本文深入解析Java中synchronized的实现原理与优化策略。首先介绍synchronized的基本使用,包括同步代码块和同步方法两种形式,以及对应的锁对象选择。其次详细阐述Monitor监视器机制,说明重量级锁的工作流程。重点分析了锁升级过程,包括偏向锁、轻量级锁和重量级锁的转换条件及实现原理。最后探讨了自旋锁、锁消除和锁粗化三种优化技术,以提高并发性能。全文系统地呈现了synchronized从使用到底层实现的完整知识体系,为深入理解Java同步机制提供了重要参考。

2025-06-12 10:50:12 830

原创 【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 903

原创 【JVM面试篇】高频八股汇总——垃圾回收

总结Java虚拟机之垃圾回收机制,面试相关高频八股文。

2025-06-10 09:38:25 1127

原创 【JVM面试篇】高频八股汇总——类加载和类加载器

总结Java虚拟机之类加载和类加载器,面试相关高频八股文

2025-06-09 10:18:44 1042

原创 【JVM面试篇】高频八股汇总——Java内存区域

总结Java虚拟机之内存模型,面试相关高频八股文。

2025-06-08 16:29:02 965

原创 【JVM】Java虚拟机(三)——类加载与类加载器

Java类加载机制是JVM将.class文件加载到内存并转换为可用类型的过程,包括加载、验证、准备、解析和初始化五个阶段。类加载采用双亲委派模型,分为启动类加载器、扩展类加载器和应用类加载器。自定义类加载器可实现热部署、模块隔离等功能。类卸载需满足实例回收、Class对象无引用和ClassLoader回收三个条件。常见问题包括ClassNotFoundException和类加载器内存泄漏等,需注意类路径检查和生命周期管理。该机制保障了Java程序的安全性和灵活性。

2025-06-08 09:38:45 1317

原创 【JVM】Java虚拟机(二)——垃圾回收

JVM垃圾回收详解:判断对象是否死亡,垃圾回收算法,垃圾回收器,垃圾回收调优等等。

2025-06-07 16:30:08 1395

原创 【JVM】Java虚拟机(一)——内存结构

Java虚拟机(JVM)内存结构分为线程私有区域(程序计数器、虚拟机栈、本地方法栈)和共享区域(堆、方法区)。程序计数器记录执行指令,虚拟机栈存储方法调用栈帧,本地方法栈处理Native方法。堆是最大内存区域,用于对象存储和GC回收。方法区存储类信息、常量等,JDK8后改为元空间。StringTable是哈希表结构,管理字符串引用,JDK7后移至堆内存。直接内存位于堆外,通过NIO操作,提升I/O性能但需手动管理。各区域协同工作,共同支撑Java程序运行。

2025-06-06 16:19:20 1388

原创 【计算机网络】第3章:传输层—TCP 拥塞控制

摘要: TCP拥塞控制通过动态调整发送窗口(cwnd)平衡网络效率与公平性。核心机制包括:慢启动(指数增长探测带宽)、拥塞避免(线性增长防过载)、快速重传(3次重复ACK立即重传)和快速恢复(减半窗口维持吞吐)。经典算法如Tahoe/Reno采用“加性增、乘性减”原则,现代优化算法如CUBIC(三次函数增长)和BBR(主动测量带宽/RTT)进一步适应高带宽网络。目标是通过保守启动、快速响应丢包,实现高吞吐、低延迟和网络稳定性。

2025-06-04 09:33:08 1289

原创 【计算机网络】第3章:传输层—拥塞控制原理

网络拥塞是指数据流量超出设备处理能力,导致性能下降的现象,表现为丢包、时延增加等。主要原因包括缓冲区溢出、多流竞争带宽等。拥塞控制目标包括公平分配带宽、最大化吞吐量等。主要方法分为端到端控制(如TCP的慢启动、拥塞避免机制)和网络辅助控制(如ECN显式通知)。端到端控制部署简单但响应慢,网络辅助控制更精准但需设备支持。两种方法各有优缺点,需根据网络环境选择合适的控制策略。

2025-06-02 09:24:26 1205

原创 【计算机网络】第3章:传输层—面向连接的传输:TCP

《TCP协议详解》摘要(150字): TCP是面向连接的可靠传输层协议,提供有序、全双工的字节流服务。其核心机制包括:三次握手/四次挥手的连接管理、序列号确认与滑动窗口的可靠传输、动态窗口的流量控制,以及慢启动/拥塞避免的拥塞控制。TCP报文首部20-60字节,含端口号、序列号、控制标识等关键字段。虽保证数据可靠性,但存在连接开销大、首部较长、队头阻塞等缺点,适用于HTTP、FTP等需可靠传输的场景。相较于UDP,TCP更注重数据完整性而非实时性。

2025-06-01 11:26:58 1953

原创 【计算机网络】第3章:传输层—可靠数据传输的原理

可靠数据传输通过序号机制、确认重传、校验和、流量控制等核心技术,在不可靠网络环境中实现数据完整有序传输。其演进过程从理想信道(Rdt1.0)逐步解决比特差错(Rdt2.0)、确认受损(Rdt2.1)、取消NAK(Rdt2.2)到处理丢包(Rdt3.0),最终发展为滑动窗口协议(GBN/SR),通过流水线传输提升效率。关键机制包括:序号标识数据段、ACK/NAK反馈、超时/快速重传、动态窗口调节及校验查错,这些技术共同构成了TCP等可靠协议的基础。

2025-06-01 09:48:54 1475

原创 【计算机网络】第3章:传输层—概述、多路复用与解复用、UDP

摘要: 传输层的多路复用与解复用机制通过端口号将多个应用数据流汇聚到共享网络信道(如IP),提高资源利用率。发送端通过源/目的端口标识应用进程,接收端依据这些标识正确分发数据。UDP作为无连接协议,仅提供基本的多路复用和错误检测,具有低延迟、低开销特性,适用于实时应用(音视频、DNS查询等),但缺乏可靠性保障。TCP则面向连接,通过四元组精确管理数据流,确保可靠传输。多路复用机制是互联网高效承载海量应用的基础,HTTP/2等协议进一步优化了应用层复用。UDP的优势在于其极简设计,适用于需快速传输或自定义可靠

2025-05-31 10:00:35 1039

原创 【计算机网络】第2章:应用层—DNS

本文介绍了DNS核心知识, 包括:基本概念、查询过程、关键记录类型、安全与攻击等,并整理高频考点。

2025-05-29 20:26:52 1363

空空如也

空空如也

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

TA关注的人

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