自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一篇带你搞懂 Redis持久化机制的RDB 和 AOF

到这里,RDB 和 AOF 两种持久化机制就都过了一遍。对比项RDBAOF存储内容某一刻的内存数据快照(二进制)一条条写操作命令(文本)数据丢失宕机可能丢失上一次快照之后的全部数据默认最多丢失 1 秒数据文件大小体积小原始文件偏大,依靠重写压缩恢复速度快,直接加载二进制慢,需要逐条回放命令恢复优先级低高(两者同时开启优先加载 AOF)RDB 适合做定期的数据备份,文件小、恢复快;AOF 更注重数据安全,丢数据少,但文件大、恢复慢。

2026-10-30 17:01:57 226 1

原创 【总结】Redis五大数据类型应用场景及基本命令

本文系统介绍Redis五大数据类型:String(缓存、计数、共享Session)、Hash(对象存储)、List(消息队列、时间线)、Set(标签、去重)和Zset(排行榜)。每类均涵盖常用命令与典型应用场景,强调其在高并发、低延迟场景下的优势。总结指出,Redis适合作为高速缓存与实时数据处理工具,复杂查询仍应结合MySQL等关系型数据库使用。

2026-10-30 17:01:38 836 1

原创 【优选算法 — 双指针】经典例题题解+算法总结

本文总结了双指针算法在三道经典题中的应用:1)移动零——使用快慢指针将非零元素前移,零元素后移;2)复写零——采用反向回填同向双指针,从右向左复写0,避免覆盖;3)盛水最多容器——运用对撞指针,根据短板原则移动指针,高效求解最大面积。算法时间复杂度均为O(n),显著优于暴力法。文章还归纳了双指针的三类模式:快慢指针、反向回填同向双指针、对撞指针,并附推荐练习题,助力算法学习。

2026-10-24 17:45:57 356 2

原创 【优选算法:双指针】——复写零题解

本文以力扣1089题“复写零”为例,讲解双指针算法的核心思想:通过两次遍历实现原地修改。先用双指针正向模拟复写过程,定位最后一个被复写的元素位置;再从右向左反向填充,避免数据覆盖。关键在于理解“写指针速度不稳”导致的覆盖问题,进而采用反向填充策略,并处理边界情况(如dest==n)。该方法将时间复杂度优化至O(n),空间复杂度为O(1),是双指针经典应用之一。

2026-10-22 13:20:26 142 1

原创 Redis 单线程 + 多编码,到底怎么配合的?

本文探讨Redis数据类型与单线程模型的深层关联:单线程确保线程安全与高效,而丰富数据类型(String、Hash、List、Set、Zset)通过底层编码优化(如int、embstr、ziplist、skiplist等),规避阻塞操作,减少网络IO,提升内存利用率与执行效率。各类型设计均服务于单线程性能瓶颈的突破,实现高并发下的低延迟响应。

2026-10-16 22:43:43 226 1

原创 Redis过期策略

Redis过期策略采用“惰性删除+定期删除”结合方式:惰性删除在访问过期Key时才清理,节省CPU;定期删除每100ms随机扫描部分过期键,避免内存堆积。二者协同仍可能残留过期数据,故当内存满时触发内存淘汰机制,如LRU、LFU、Random等策略,确保缓存可用性。该机制保障了性能与空间的平衡,是Redis高效缓存的核心设计之一。

2026-10-14 15:30:03 178

原创 Redis 入门看这篇就够!客户端分类与 8 个核心命令实操

本文介绍了Redis客户端的三种形式(命令行、图形化、自研),重点讲解了8个常用命令:set、get、keys、exists、del、expire、ttl和type,涵盖其语法、功能及实操示例。强调keys命令在大数据量下可能引发阻塞,应谨慎使用;同时说明exists与del命令的批量操作可降低网络开销。最后指出type命令用于查看值的数据类型,为后续学习数据结构打下基础。

2026-10-13 09:55:47 264 2

原创 Redis 为什么这么快?详解 Redis 核心特性、应用场景与短板

Redis是基于内存的高性能缓存中间件,因其数据存储在内存中而具备极快的读写速度,显著优于磁盘数据库如MySQL。其核心特性包括:内存存储、持久化保障数据安全、支持多种数据类型(String、List、Set等)、可编程性(通过Lua脚本扩展)、单线程高效执行、高可用集群架构及丰富应用场景。广泛用于缓存、会话共享、实时计数与简易消息队列。但存在内存成本高、持久化风险、单线程瓶颈及事务功能弱等缺点,适用于对性能要求高的场景,需合理应对缓存穿透、击穿、雪崩等问题。

2026-10-09 16:39:57 138 1

原创 一文读懂 JVM 类加载全过程

本文详细解析了JVM类加载机制的全过程,包括加载、连接(验证、准备、解析)和初始化三个阶段。其中加载阶段将.class文件转换为运行时数据,连接阶段确保类文件的安全性和正确性,初始化阶段执行类构造器方法。文章重点介绍了双亲委派模型,该模型通过层级委托机制确保类加载的安全性和避免重复加载,保证了Java核心API的完整性。双亲委派流程依次从自定义类加载器向上委托至启动类加载器,若父类无法加载再由子类处理。这一机制既提升了安全性,又优化了类加载效率。

2026-08-23 20:00:10 327 1

原创 为什么有 IP 地址才能上网?聊聊 IP 协议

本文介绍了IP协议的基本概念和工作原理。主要内容包括:1. IP报文格式及各字段含义,如版本号、首部长度、TTL等;2. IP地址划分管理,包括传统5类IP划分、CIDR方案、子网掩码等;3. 特殊IP地址(网络号、广播地址、本地环回);4. 私有IP与公网IP的区别;5. 解决IP地址不足的方案,如动态分配、NAT技术和IPv6。文章旨在帮助读者理解IP协议如何实现跨网段数据传输,以及互联网通信的基础机制。

2026-08-19 22:10:21 267

原创 【面试高频】 HashMap, HashTable,ConcurrentHashMap 之间的区别

文章摘要: 本文对比了Java中三种哈希表结构(HashMap、HashTable、ConcurrentHashMap)的核心差异。HashMap非线程安全但性能高,适用于单线程;HashTable通过全局锁保证线程安全但性能差,已过时;ConcurrentHashMap采用分段锁(JDK1.7)或桶级锁+CAS(JDK1.8)实现高并发,性能最优。关键区别包括线程安全机制、null值支持及锁粒度,强调多线程场景应优先使用ConcurrentHashMap。文中还解答了常见面试问题,如读操作无锁原理和版本优

2026-08-10 16:21:56 326

原创 吃透 TCP:可靠传输完整原理【下】

TCP协议通过滑动窗口实现高效传输,支持批量发送和累计确认;流量控制动态调整发送速率避免接收缓冲区溢出;拥塞控制采用慢启动机制防止网络过载。优化手段包括延迟应答(增大窗口)、捎带应答(合并ACK)。其面向字节流的特性可能导致粘包问题,需应用层通过定长包头或分隔符解决。TCP综合连接管理、可靠传输(确认/重传/校验)与效率优化机制,实现高可靠的端到端通信。(149字)

2026-07-31 16:21:14 265

原创 吃透 TCP:可靠传输完整原理【上】

TCP协议是一种面向连接的可靠传输协议,通过确认应答、超时重传、连接管理等机制保证数据传输的可靠性。TCP报文包含端口号、序列号、控制标志位等字段,支持全双工通信。其中三次握手建立连接确保双方收发能力,四次挥手安全断开连接。TCP还采用动态超时重传策略,通过指数退避算法调整重传时间。后续机制如滑动窗口、流量控制和拥塞控制进一步优化传输效率。这些设计使TCP能够适应复杂网络环境,确保数据有序、可靠地传输。

2026-07-24 21:32:14 405

原创 UDP传输协议

UDP(用户数据报协议)是传输层面向数据报的不可靠传输协议,具有无连接、不可靠但高效的特点。与TCP不同,UDP无需建立连接,直接发送数据报,不保证送达或顺序,但校验和机制确保数据完整性。UDP支持全双工通信,收发互不影响,适用于电话、直播等场景。其协议格式包含源/目的端口、长度和校验和字段,其中校验和可检测传输错误但不纠错。UDP适合实时应用,如视频流和在线游戏,但对可靠性要求高的场景不适用。

2026-07-18 21:52:35 267 1

原创 【面试高频】HTTPS加密传输过程

HTTPS是在HTTP基础上引入加密机制的安全传输协议,通过加密保护用户数据安全。其核心工作过程涉及对称加密和非对称加密的结合:服务器首先生成公私钥对,客户端通过公钥加密对称密钥传输给服务器,后续通信使用对称加密提高效率。为防止中间人攻击,HTTPS引入CA证书机制,证书包含服务器信息和数字签名(由CA机构私钥加密的哈希值)。客户端通过验证证书合法性(包括有效期、签发机构、数字签名匹配性)来确认公钥未被篡改,有效抵御中间人攻击。这一机制解决了密钥传输安全、身份认证等核心问题,其中数字签名设计既保证了验证效率

2026-07-17 16:03:08 219

原创 【抓包必看】拆解 HTTP 请求与响应结构+ Fiddler抓包实践

本文系统讲解了HTTP协议相关知识,包括HTTP基础概念、URL完整结构、HTTP报文格式及常用请求方法。重点分析了请求报文和响应报文的四部分结构(首行、请求头、空行、消息体),并通过Fiddler抓包工具进行实例演示。特别针对GET和POST方法的区别进行了详细说明,澄清了常见误区:安全性与HTTPS加密有关而与请求方法无关,URL长度限制已过时,GET也能间接传输二进制数据。文章采用技术讲解结合实例的方式,帮助读者深入理解HTTP协议的核心要点。

2026-07-01 20:46:36 226

原创 【面试高频】一篇搞懂:线程池

Java线程池面试精华摘要 线程池通过池化复用解决直接new Thread()的资源消耗、管理混乱问题,核心优势为降低开销、提升响应、统一管控。执行流程分四步:核心线程优先→队列排队→非核心线程扩容→拒绝策略兜底。 七大参数:核心/最大线程数、空闲存活时间、任务队列(推荐有界)、线程工厂(需自定义命名)、拒绝策略。四大拒绝策略:抛异常(AbortPolicy)、主线程执行(CallerRunsPolicy)、静默丢弃(DiscardPolicy)、弃旧保新(DiscardOldestPolicy)。 调优建

2026-06-27 18:54:40 288

原创 【面试总结】一篇带你搞懂synchronized

【Java并发编程之synchronized全解析】本文深入浅出讲解Java中的synchronized关键字核心特性及使用场景:1️⃣ 特性详解:原子性(保证代码块完整执行)、可见性(强制内存同步)、有序性(禁止指令重排),以及排他性、可重入和异常自动解锁三大附加特性;2️⃣ 三种使用方式:实例方法锁(this)、静态方法锁(类对象)、代码块锁(自定义对象);3️⃣ 底层锁升级机制:无锁→偏向锁→轻量级锁→重量级锁的不可逆升级过程。通过代码对比和原理图解,帮助开发者掌握这个JVM内置悲观锁的核心用法与实现

2026-06-24 16:35:20 185

原创 【总结】线程安全问题的原因和解决方案

摘要: 线程安全问题的本质是多线程并发操作共享资源导致的,具体原因包括线程调度的随机性、共享数据访问、原子性问题、内存可见性问题及指令重排序。为解决这些问题,JDK提供了四种方案:1. 加锁同步(如synchronized和ReentrantLock)实现互斥访问;2. volatile关键字确保内存可见性和禁止指令重排,但无法保证原子性;3. CAS无锁机制(如AtomicInteger)通过自旋实现高效更新;4. 线程安全集合类(如ConcurrentHashMap、CopyOnWriteArrayLi

2026-06-19 01:32:00 337

原创 【面试高频】常见锁策略

本文系统介绍了多线程编程中的锁策略。主要内容包括:1)悲观锁与乐观锁的对比,前者独占阻塞但安全,后者无阻塞但需重试;2)重量级锁与轻量级锁的区别,前者涉及内核态切换,后者采用用户态自旋;3)挂起等待锁与自旋锁的特性差异;4)公平锁与非公平锁的获取规则;5)可重入锁与不可重入锁的线程处理方式;6)读写锁的共享与排他特性。文章还分析了synchronized锁的特性及锁升级过程,并提供了常见面试问题的解答思路。

2026-05-20 15:19:37 359

原创 【总结】Java的线程状态

Java线程状态分为6种:NEW(新建)、RUNNABLE(可运行)、WAITING(等待)、TIMED_WAITING(定时等待)、BLOCKED(阻塞)和TERMINATED(终止)。这些状态反映了线程生命周期中的不同阶段,对CPU资源分配、线程协调和监控具有重要意义。通过代码示例可以观察到状态转换过程:NEW→RUNNABLE→TERMINATED是基本流程,而使用同步锁和等待机制时会出现BLOCKED、WAITING和TIMED_WAITING状态。理解这些状态及其转换关系有助于避免死锁、优化多线程

2026-05-18 22:26:07 219

原创 Thread类的基本用法干货总结

本文总结了Java线程的基本操作方法:1. 线程创建有4种方式(继承Thread类、实现Runnable接口、匿名内部类、Lambda表达式);2. 线程启动需调用start()方法;3. 线程休眠使用sleep()方法,会抛出异常且不释放锁;4. 线程等待使用wait()方法,需配合同步锁和循环判断;5. 线程中断通过interrupt()设置标记,阻塞状态会抛出异常;6. 介绍了获取线程实例和常用方法(获取/设置名称、优先级等)。文章涵盖了线程创建、控制及常用操作的核心知识点。

2026-05-11 23:40:52 250

原创 【java】阻塞队列以及它的实现

本文介绍了阻塞队列的概念及其在多线程环境中的应用。阻塞队列是一种线程安全的队列,遵循先进先出原则,具有当队列满时阻塞入队、队列空时阻塞出队的特性。文章重点阐述了生产者消费者模型如何通过阻塞队列实现解耦,并举例说明其在秒杀场景中削峰填谷的作用。此外,详细解析了Java标准库中的BlockingDeque接口使用,并提供了一个自定义阻塞队列的实现方案,包括循环队列结构、wait/notifyAll机制的正确使用、while循环防止虚假唤醒,以及synchronized关键字确保线程安全等关键技术点。实现中特别强

2026-05-06 15:55:30 382

原创 java单例模式:饿汉/懒汉/DCL

单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供全局访问点。文章介绍了单例模式的两种主要实现方式:饿汉模式和懒汉模式。饿汉模式在类加载时就创建实例,线程安全但可能浪费资源;懒汉模式在首次调用时创建实例,更节省资源但需要考虑线程安全问题。针对懒汉模式的线程安全问题,文章详细讲解了通过synchronized加锁、双重检查锁定和使用volatile关键字来保证线程安全的完整解决方案。单例模式适用于需要全局唯一实例的场景,如回收站、数据库连接池等,合理选择实现方式可以兼顾程序性能和资源利用效率。

2026-04-29 17:18:38 389

原创 Java 多线程:线程基础+创建方式一篇吃透

本文介绍了线程的基本概念及其在Java中的实现方式。线程是执行流,多个线程并发执行可提高CPU利用率,避免阻塞等待。相比进程,线程创建销毁开销更小,且共享内存空间。Java线程是对操作系统线程API的封装,提供了多种创建方式:继承Thread类、实现Runnable接口、匿名内部类及lambda表达式(最简洁常用)。通过代码示例展示了四种创建方法,帮助初学者理解线程的基本使用。多线程编程能有效提升程序效率,是并发编程的重要技术。

2026-04-25 12:12:16 249

原创 MySql索引(面试高频)

索引的本质是用于加快数据库查询效率,提升数据库性能的一种数据结构,索引通过按一定规则排序的数据表种的记录,使得对表的查询可以通过索引快速搜索到对应数据表中的数据。

2026-03-13 13:41:29 367

原创 学完JavaSE大总结

本文总结了JavaSE课程的核心知识点。第一部分介绍了Java基础语法,包括基本数据类型转换风险、包装类特性及自动装箱拆箱机制,详细解析了位运算符和三元运算符的使用。第二部分重点讲解了面向对象三大特性(封装、继承、多态)的实现方式,以及this、super、final等关键字的用法。第三部分分析了String类的不可变性和StringBuffer/StringBuilder的区别,并系统梳理了异常处理机制,包括try-catch、throws、throw等处理方式及自定义异常的实现。全文通过代码示例展示了各

2026-03-02 09:13:55 636

原创 异常类知识总结

Java异常处理机制摘要 Java异常是程序运行中出现的问题,分为Error(严重错误)和Exception(可处理异常)。异常主要分为: 编译时异常(CheckedException):编译期间检测 运行时异常(RuntimeException):执行时出现 异常处理方式: try-catch-finally结构捕获处理异常 throw主动抛出异常对象 throws声明方法可能抛出的异常 自定义异常可通过继承Exception或RuntimeException实现,需提供带String参数的构造方法。fi

2026-01-07 16:44:40 783

原创 String类的常用方法

Java中的String类是一个专门处理字符串的类,提供了多种构造方法(常量赋值、new对象、字符数组构造)和操作方法。字符串比较需注意"=="比较引用地址,而equals()比较内容。常用方法包括查找(charAt、indexOf)、转换(数字/大小写/数组转换)、替换、拆分、截取等。String具有不可变性,修改需使用StringBuilder或StringBuffer类。StringBuilder提供append、insert、delete等灵活操作。这些特性使Java字符串处理更

2025-11-26 14:36:54 690

原创 抽象类和接口相关知识总结

本文系统介绍了Java中抽象类和接口的核心概念与区别。抽象类通过abstract关键字定义,用于共性提炼与复用,强调"is-a"关系,包含普通方法和抽象方法,但不能实例化。接口通过interface定义,用于行为规范与解耦,强调"has-a"关系,所有方法默认为public abstract。关键区别在于:抽象类可包含具体实现,而接口仅定义规范;类可继承一个抽象类但可实现多个接口。文章还通过Comparable/Comparator接口和Cloneable接口的实际案

2025-11-23 18:31:38 592

原创 继承和多态(一遍看懂!!!)

Java继承机制允许类之间建立"父子"关系,通过extends关键字实现。继承的核心价值在于代码复用,子类自动获得父类的公开属性和方法。使用时需注意:1)子类优先访问自身成员变量;2)同名方法根据参数列表区分重载;3)使用super关键字访问父类成员;4)子类构造需先调用父类构造。多态通过方法重写实现,需满足继承、重写和父类引用调用三个条件,涉及向上转型和向下转型过程。final关键字可限制继承。继承虽提高代码复用性,但会降低运行效率,需权衡使用。

2025-11-07 14:28:41 821

原创 类和对象相关知识总结

本文摘要:类和对象是面向对象编程的核心概念。类定义了对象的数据类型(成员变量)和行为(成员方法),对象是类的具体实例。Java采用面向对象思想,通过调用现成类中的方法实现功能,而不需关心具体实现过程。创建类使用class关键字,对象通过new实例化。对象初始化有两种方式:直接引用赋值和构造方法。构造方法需与类同名,可重载,且使用this关键字解决形参与成员变量同名的问题。this还可用于引用成员方法和构造方法,实现更灵活的编程。

2025-11-01 10:22:35 1026

原创 Java基本数据类型

本文介绍了Java语言中的8种基本数据类型,包括4种整型(byte、short、int、long)、2种浮点型(float、double)、字符型(char)和布尔型(boolean)。详细说明了各类型的存储空间、取值范围、使用场景和初始化示例,并列表展示了类成员变量的默认值。特别强调了数据类型转换的规则:小类型可自动转大类型,大转小需强制转换但可能造成数据溢出。最后提及了字符型与整型间的转换方法,包括直接转换、强制转换以及通过Integer和String类的方法实现互转。

2025-10-24 18:17:20 1023

原创 JDK、JRE和JVM 你分清了吗?

本文用生动的比喻讲解了Java开发中JDK、JRE和JVM三者的区别与联系。JVM是"翻译官",负责将Java字节码转换为机器码;JRE是运行环境,包含JVM和核心类库;JDK是开发工具包,包含JRE和开发工具。三者关系类似套娃:JVM是"发动机",JRE是"汽车+发动机",JDK是"汽车工厂"。开发需要安装JDK,仅运行程序只需JRE。通过汽车生产类比,帮助初学者清晰理解这些核心概念的区别。

2025-10-24 15:25:03 452

原创 算法(特性、要求、和性能分析)

递归算法会在调用栈中存储每层的参数和状态,递归深度越深,空间复杂度越高(如阶乘递归的空间复杂度为。随问题规模n的增大,算法的执行时间的增长率和f(n)的增长率相同,称作算法的(渐近)时间复杂度。:该语句(原操作)在一个算法中的执行次数。(一个算法的时间耗费就是该算法中语句频度之和)若待解决的问题数据量极大,计算机的存储空间较小,则相应算法主要考虑如何节省空间。若算法需存储大量中间计算结果(如动态规划中的缓存表),会增加空间开销。对于反复使用的程序,应尽可能选用快速的算法。2、算法的空间性能分析。

2025-05-31 18:00:33 447

原创 数据结构的内容(c语言版)

该节比较简短,主要讲述数据的逻辑结构、数据的存储结构和数据的运算集合

2025-03-15 14:13:23 994

原创 数据结构的基础概念

是一门研究非数值计算的程序设计中的计算机以及它们之间和操作等等的学科,本节将介绍数据结构中的数据,数据元素,数据项,数据对。

2025-03-08 16:04:21 1148

原创 临时变量你会用了吗?

本文主要讲述在编写代码时有一些情况通过合理地使用临时变量,可以使代码的逻辑更清晰的同时也可以提高程序运行的效率,主要在交换变量值、复杂公式的计算、循环临时变量的使用、函数参数传递的优化和避免重复读取数据这几个方面讲述如何运用临时变量。在内循环中要将i的值不断取余来寻找2,这时候不能直接将i进行取余,因为这样外循环的 i 值也发生了改变,循环从第一个就停滞住了,那么这时候使用循环临时变量 j 就可以避免该问题。在函数调用时,如果参数计算复杂,可先使用临时变量存储结果,再传递给函数。c.循环内部的变量计算。

2025-01-14 13:44:43 755

原创 c语言(数据类型,标识符,常量,变量)

首先,在我的认知里面,计算机语言是用来写程序的,而各种各样的程序,当然是为了来解决生活中的各种问题,那我们就要有能力来描述生活中的问题。例如,在购物商城上上架一款商品,单价为15.8元,在计算机语言中我们应该使用float去定义它,表示它是一个浮点数,也就是小数。首先,整型分为 int, short, long, long long 等,一般来讲,用int会比较多,int占4个字节。其次,浮点型分为 float(单精度,一般为6~7位),double(双精度,一般为15~16位)。

2024-10-25 14:03:18 908

原创 初识c语言

6. } 第一行,是编译预处理指令,“ # ”是预处理指令的标记(预处理是指在编译代码前对源代码进行一系列操作,从而使得在编译代码时能够保证一定的灵活性,可读性,可维护性和可维护性。

2024-10-21 17:17:04 391 1

空空如也

空空如也

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

TA关注的人

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