- 博客(70)
- 收藏
- 关注
原创 IP协议解析
例如数值5对应20字节(5×4),最大允许15代表60字节(15×4)。承载的上层协议内容(如TCP报文或UDP数据报),长度=总长度 - 头部长度,最大可达65535-20=65495字节。明确标识使用的IP协议版本,填4表示IPv4,填6则为IPv6。标明整个IP数据报的总字节数(含头部和数据),最大值65535字节。发送方为每个原始数据报分配唯一ID,分片后的所有碎片保持相同标识,便于接收端重组。指明上层协议:6对应TCP,17对应UDP,1为ICMP,其他值可查协议号列表。
2025-05-26 16:21:32
277
原创 TCP原理解析
TCP(Transmission Control Protocol)是互联网通信中最核心的传输层协议,为应用程序提供可靠、有序的端到端数据传输服务。作为现代网络通信的基石,TCP通过多种机制在保证数据可靠性的同时,尽可能提升传输效率。
2025-05-22 22:58:28
1241
原创 (每日一道算法题)两两交换链表中的节点
递归解法通过分解问题,逐层处理并合并结果,代码简洁但需注意栈空间。迭代解法省去了递归开销,适合处理长链表。理解这两种方法有助于深入掌握链表操作的核心思想。
2025-05-21 17:36:57
295
原创 理解UDP协议
UDP的简单性既是优势也是局限。它适合实时性要求高、允许适度丢包的场景(如在线游戏、直播),但在需要可靠传输时需开发者自行设计保障机制。理解UDP的核心原理,能帮助我们在实际项目中做出更合理的协议选型。
2025-05-19 17:09:14
640
原创 Java网络编程
网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据, 也属于网络编程。特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。进程A:编程来获取网络资源进程B:编程来提供网络资源。
2025-05-12 10:39:41
600
原创 网络原理初识
本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
2025-05-08 23:42:14
1174
原创 Java文件I/O操作
唯一标识:通过文件名和扩展名(如data.txt)区分结构化存储:数据按特定格式(文本、二进制)组织元数据:包含创建时间、大小、权限等属性。
2025-05-07 09:53:25
581
原创 Synchronized锁升级机制与优化策略
锁升级的本质是根据线程竞争强度逐步提升锁的“安全等级”,从无锁状态逐步演变为重量级锁,从而在无竞争时减少开销,在高竞争时确保安全性。如果后续有其他线程来竞争该锁(刚才已经在锁对象中记录了当前锁属于哪个线程了, 很容易识别 当前申请锁的线程是不是之前记录的线程), 那就取消原来的偏向锁状态, 进入一般的轻量级锁状态.JVM 将 synchronized 锁分为无锁,偏向锁,轻量级锁,重量级锁状态,会根据情况,进行依次升级. 时(如循环体内的同步块),会将锁范围扩展到整个操作序列,避免频繁的锁状态切换。
2025-04-28 15:44:25
866
原创 CAS解析
CAS: 全称Compare and swap,字面意思:”比较并交换“,一个 CAS 涉及到以下操作:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较 A 与 V 是否相等(比较)如果比较相等,将 B 写入 V(交换)返回操作是否成功。CAS是一种原子操作,用于在多线程环境下实现变量的无锁更新,整个过程通过一条CPU指令(如cmpxchg)保证原子性。这段代码并非原子操作,真实场景中,CAS 通过 硬件级原子指令(如 x86 的cmpxchg)实现原子性。
2025-04-28 11:19:40
227
原创 常见锁策略
在多线程编程和分布式系统中,是保证数据一致性和系统稳定性的核心机制。不同的场景需要匹配不同的锁策略,本文将系统性地解析常见的锁策略及其适用场景(只解释思想,不涉及实现)。
2025-04-27 20:43:25
506
原创 Java线程池详解
Java线程池通过提供高度可定制的并发控制能力。理解每个参数对系统性能的影响(如队列容量与最大线程数的平衡),能够帮助开发者构建出高吞吐、低延迟的线程管理体系。建议根据具体业务场景,结合监控数据动态调整参数,方能发挥线程池的最大效能。
2025-04-27 18:09:07
833
原创 定时器详解
Java定时器是任务调度的核心工具,理解其原理与差异至关重要。对于简单需求,Timer足够便捷;高并发或复杂调度场景建议采用。此外,第三方库如Quartz、Spring Task提供了更强大的分布式调度能力,可根据项目需求扩展。
2025-04-26 17:54:45
346
原创 Java常用API详解
类位于金字塔的最顶端,它是所有Java类的终极父类在Java中,并非所有Object类的方法都需要重写。是否需要重写取决于具体需求。
2025-04-25 21:49:42
852
原创 阻塞式队列
比如过年一家人一起包饺子. 一般都是有明确分工, 比如一个人负责擀饺子皮, 其他人负责包. 擀饺 子皮的人就是 "生产者", 包饺子的人就是 "消费者". 擀饺子皮的人不关心包饺子的人是谁(能包就行, 无论是手工包, 借助工具, 还是机器包), 包饺子的人 也不关心擀饺子皮的人是谁(有饺子皮就行, 无论是用擀面杖擀的, 还是拿罐头瓶擀, 还是直接从超 市买的).它通过内置的等待/唤醒机制,自动管理线程的阻塞和唤醒,极大简化了多线程协作的复杂度。2) 阻塞队列也能使生产者和消费者之间 解耦.
2025-04-23 20:12:01
866
原创 Java多线程编程初阶指南
实现方式代码行数可复用性灵活性推荐指数继承Thread5-10低差★☆☆☆☆常规Runnable6-8高中★★★☆☆匿名内部类3-5低高★★★★☆Lambda表达式1-3中极高★★★★★核心定义:当多个线程并发访问共享资源时,程序仍能保持正确行为的状态黄金准则原子性(Atomicity)保证可见性(Visibility)保证有序性(Ordering)保证使用没有共享资源的模型适用共享资源只读,不写的模型不需要写共享资源的模型。
2025-04-22 23:17:08
1382
原创 Java内部类详解
成员内部类:定义在类的成员位置,无static修饰静态内部类:定义在类的成员位置,有static修饰局部内部类:定义在方法内部匿名内部类:没有名字的局部内部类,常用于简化代码什么时候该用内部类?// 成员变量和方法特点:属于外部类对象(需依赖外部类实例存在)可直接访问外部类所有成员(包括private)不能定义静态成员(JDK16+允许静态变量)// 静态/非静态成员属于外部类本身只能直接访问外部类的静态成员可包含静态成员。
2025-04-16 20:53:10
599
原创 Java接口深度解析
基础语法:// 接口声明// 常量(默认 public static final)String CONSTANT = "接口常量";// 抽象方法(默认 public abstract,可省略修饰符)// 默认方法(Java 8+,有方法体)System.out.println("默认方法实现");// 静态方法(Java 8+,通过接口名直接调用)System.out.println("静态方法实现");// 实现接口的类// 必须实现抽象方法@Override。
2025-04-11 21:03:59
435
原创 Java抽象类与抽象方法详解
设计意图:当多个子类具有共性行为但具体实现不同时,通过抽象类强制规范子类的实现格式。典型场景// 定义抽象图形类// 抽象方法:计算面积(无法确定具体实现)// 具体子类实现@Override// 圆形面积计算@Override// 矩形面积计算强制约束包含抽象方法的类 必须声明为抽象类子类 必须实现所有抽象方法(除非子类也是抽象类)语法规则[访问修饰符] abstract 返回值类型 方法名(参数列表);示例说明。
2025-04-10 22:42:23
355
原创 Java代码块详解:分类、作用与最佳实践
特性局部代码块构造代码块静态代码块执行次数每次方法调用每次new对象类加载一次存储位置栈内存堆内存方法区是否可抛异常可处理可处理需捕获或终止加载访问权限仅限方法内部可访问实例变量仅访问静态成员理解静态代码块的 一次性初始化 机制避免构造代码块的 滥用风险认识局部代码块的 历史局限性在实际开发中,建议结合IDE的代码分析工具(如IntelliJ IDEA的。
2025-04-10 21:44:47
639
原创 Java权限修饰符深度解析
Java提供四种访问控制修饰符,按访问范围从宽到窄排序如下:访问范围:所有类均可访问使用场景:示例: 访问范围:使用场景:示例: 访问范围:仅同包类可见使用场景:示例: 访问范围:仅本类可见使用场景:示例: 2. 构造函数访问控制 最小化公开元素 优先使用最严格的访问级别(推荐顺序): → 默认 → → 数据封装原则 3.接口方法
2025-04-10 21:22:00
451
原创 (每日一道算法题)最长回文子串
中心扩展法通过利用回文串的对称性,高效地解决了最长回文子串问题。其核心思想是从每个可能的中心向两侧扩展,寻找最大回文。相比于动态规划等其他方法,中心扩展法在空间复杂度上更具优势,且代码简洁易懂。
2025-03-27 23:20:50
317
原创 (每日一道算法题) K 个一组翻转链表
本解法通过头插法实现每组的翻转,利用虚拟头节点简化连接逻辑,通过前驱指针维护各组之间的连接。思路清晰,代码简洁高效。适用于对链表操作较为熟悉的开发者,重点在于理解头插法的翻转逻辑和指针的更新策略。
2025-03-26 21:09:43
433
原创 (每日一道算法题)合并 K 个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。链表数组如下:1->4->5,1->3->4,2->6将它们合并到一个有序链表中得到。
2025-03-25 21:02:37
287
原创 (每日一道算法题)两数相加
该解法通过逐位相加并维护进位,高效处理了逆序链表的相加问题。使用哑节点简化了链表操作,确保代码简洁且鲁棒性强。通过合理处理边界条件(如链表长度不同、最终进位),保证了算法的正确性。
2025-03-25 11:20:22
231
原创 (每日一道算法题)翻转对
降序排序的必要性:保证右子数组元素从前往后递增,使得统计时能利用有序性快速定位。独立统计阶段:必须在合并前单独统计,避免遗漏可能的翻转对。防止整数溢出:比较时使用long类型(如。
2025-03-23 21:36:24
914
原创 (每日一道算法题)交易逆序对的总数
在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录record,返回其中存在的「交易逆序对」总数。8交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。
2025-03-21 20:24:55
405
原创 (每日一道算法题)排序数组
稳定时间复杂度:无论输入数据如何分布,始终保证 O(n log n)天然稳定性:保持相等元素的原始顺序(本题虽不要求,但属于重要特性)分治结构:适合处理大规模数据,且易于并行优化与快速排序相比,避免了最坏情况 O(n²) 的风险;与堆排序相比,具有更好的缓存局部性。
2025-03-21 10:56:55
341
原创 Java多态:三大特性解析与实战应用
定义:多态指“对象的多种形态”。它允许不同类的对象对同一消息作出不同响应,如同一操作作用于不同的对象时产生不同的行为。通俗比喻狗调用叫()方法会输出“汪汪”猫调用叫()方法会输出“喵喵”同一个行为(叫),不同对象(狗/猫)表现不同,这就是多态。类型编译时多态:方法重载(Overload)运行时多态:方法重写(Override)
2025-03-18 17:17:45
340
原创 Java继承中的成员变量,成员方法,构造方法访问特点详解
父类静态块 → 子类静态块 → 父类实例块 → 父类构造方法 → 子类实例块 → 子类构造方法。,该操作由编译器在子类构造方法首行隐式插入。,且必须是子类构造方法的第一条语句。,但可通过方法重载实现不同参数构造。当需要调用父类有参构造时,必须。示例:父类无无参构造时的处理。Parent.变量名。
2025-03-17 17:02:36
350
原创 (每日一道算法题)数组中的第 k 个最大的元素
给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。
2025-03-16 11:26:07
366
原创 (每日一道算法题)数青蛙
给你一个字符串,它表示不同青蛙发出的蛙鸣声(字符串"croak")的组合。由于同一时间可以有多只青蛙呱呱作响,所以中会混合多个“croak”。请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。要想发出蛙鸣 "croak",青蛙必须输出这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串不是由若干有效的 "croak" 字符混合而成,请返回-1。1一只青蛙 “呱呱” 两次2最少需要两只青蛙,“呱呱” 声用黑体标注第一只青蛙 "croak"第二只青蛙 "croak-1。
2025-03-13 21:49:26
923
原创 Java继承机制深度解析:子类如何继承父类及内存原理解析
Java的继承机制通过内存预分配和权限分层控制,实现了代码复用与安全性的平衡。避免因权限问题导致的诡异Bug(如误认为子类不包含父类私有变量)优化代码结构(例如合理选择protected或final修饰符)深入掌握多态的实现原理(虚方法表与动态绑定)下次面对继承问题时,不妨从内存布局的视角重新审视,或许会有豁然开朗的体验!
2025-03-12 22:55:40
1101
2
原创 深入理解Java中的static关键字及其内存原理
/ 静态变量(类变量)// 实例变量共享性:所有实例共享同一存储空间(Config.ENV生命周期:类加载时初始化,程序结束时销毁存储位置:JDK8+存放在元空间(MetaSpace),旧版本在方法区调用方式:推荐类名.方法名()(如访问限制:静态方法中无法使用this,不能直接访问实例成员深入理解static关键字需要把握其"类级别共享"的本质特征,同时要警惕滥用可能带来的内存问题和并发风险。
2025-03-10 23:11:40
473
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人