- 博客(78)
- 收藏
- 关注
原创 (每日一道算法题)全排列
回溯算法以其清晰的决策树结构,成为解决全排列问题的首选方案。状态标记与回溯恢复新列表创建避免引用陷阱递归终止条件的精确控制掌握这些核心概念,不仅能解决全排列问题,还能扩展到更复杂的组合优化问题,为算法设计打下坚实基础。
2025-06-09 16:56:01
277
原创 (每日一道算法题)二叉搜索树中第K小的元素
二叉搜索树的第k中序遍历是关键,能按升序访问节点使用成员变量(非参数)维护计数器增加终止条件优化性能避免值传递陷阱 - Java中基本类型参数无法在递归中修改上层值。
2025-06-08 16:34:27
317
原创 (每日一道算法题)验证二叉搜索树
实际应用中,BST常用于实现快速查找的数据结构,如TreeMap。理解其有效性判断对构建正确算法至关重要。通过中序遍历递归实现,我们既保证了代码简洁性,又确保了逻辑的严密性,有效解决了二叉搜索树的验证问题。这种方法利用了BST的中序特性,实际上也反映了二叉搜索树的本质:。二叉搜索树的关键特性是:。
2025-06-08 12:07:34
338
原创 (每日一道算法题)二叉树剪枝
通过后序遍历+叶子节点精准判断适用场景:树型数据处理中移除无效分支(如零值配置、空目录清理)扩展思考:若修改为"保留至少含一个1的子树",代码逻辑不变(本解法已实现)工程启示:递归深度优先搜索是处理树型结构的利器,以 O(n) 时间完成复杂裁剪。
2025-06-07 16:28:39
300
原创 (每日一道算法题)求根节点到叶节点数字之和
给你一个二叉树的根节点root,树中每个节点都存放有一个0到9之间的数字。123计算从根节点到叶节点生成的。是指没有子节点的节点。理解问题:我们需要计算二叉树中从根节点到每个叶节点的路径所表示数字的总和。路径表示的数字由路径上的节点值按顺序组成。
2025-06-04 22:32:34
320
原创 HTTPS
HTTPS 工作过程中涉及到的密钥有三组.第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公 钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的 签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.
2025-06-01 23:13:52
1070
原创 HTTP协议解析
HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议HTTP 是互联网上最基础、最重要的沟通规则之一。简单来说,它定义了你的电脑(比如你用的浏览器)和存放网站内容的服务器(就是远方的另一台电脑)之间如何“说话”。每当你打开一个网页、点击一个链接、或者提交一个表单,背后都是你的浏览器按照 HTTP 的规则在向服务器发送请求。服务器收到这个请求后,会根据请求的内容,也按照 HTTP 的规则进行回应。
2025-06-01 15:54:07
1033
原创 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
292
原创 TCP原理解析
TCP(Transmission Control Protocol)是互联网通信中最核心的传输层协议,为应用程序提供可靠、有序的端到端数据传输服务。作为现代网络通信的基石,TCP通过多种机制在保证数据可靠性的同时,尽可能提升传输效率。
2025-05-22 22:58:28
1268
原创 (每日一道算法题)两两交换链表中的节点
递归解法通过分解问题,逐层处理并合并结果,代码简洁但需注意栈空间。迭代解法省去了递归开销,适合处理长链表。理解这两种方法有助于深入掌握链表操作的核心思想。
2025-05-21 17:36:57
303
原创 理解UDP协议
UDP的简单性既是优势也是局限。它适合实时性要求高、允许适度丢包的场景(如在线游戏、直播),但在需要可靠传输时需开发者自行设计保障机制。理解UDP的核心原理,能帮助我们在实际项目中做出更合理的协议选型。
2025-05-19 17:09:14
648
原创 Java网络编程
网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据, 也属于网络编程。特殊的,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。进程A:编程来获取网络资源进程B:编程来提供网络资源。
2025-05-12 10:39:41
607
原创 网络原理初识
本来想从网络的发展史开始写,之后再写网络的定义啥的,但快写完了才发现,这不课本教材吗,没劲,遂弃之,重撰,删芜就简.写点我认为,对程序员来说真正有用的东西网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
2025-05-08 23:42:14
1184
原创 Java文件I/O操作
唯一标识:通过文件名和扩展名(如data.txt)区分结构化存储:数据按特定格式(文本、二进制)组织元数据:包含创建时间、大小、权限等属性。
2025-05-07 09:53:25
596
原创 Synchronized锁升级机制与优化策略
锁升级的本质是根据线程竞争强度逐步提升锁的“安全等级”,从无锁状态逐步演变为重量级锁,从而在无竞争时减少开销,在高竞争时确保安全性。如果后续有其他线程来竞争该锁(刚才已经在锁对象中记录了当前锁属于哪个线程了, 很容易识别 当前申请锁的线程是不是之前记录的线程), 那就取消原来的偏向锁状态, 进入一般的轻量级锁状态.JVM 将 synchronized 锁分为无锁,偏向锁,轻量级锁,重量级锁状态,会根据情况,进行依次升级. 时(如循环体内的同步块),会将锁范围扩展到整个操作序列,避免频繁的锁状态切换。
2025-04-28 15:44:25
881
原创 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
232
原创 常见锁策略
在多线程编程和分布式系统中,是保证数据一致性和系统稳定性的核心机制。不同的场景需要匹配不同的锁策略,本文将系统性地解析常见的锁策略及其适用场景(只解释思想,不涉及实现)。
2025-04-27 20:43:25
513
原创 Java线程池详解
Java线程池通过提供高度可定制的并发控制能力。理解每个参数对系统性能的影响(如队列容量与最大线程数的平衡),能够帮助开发者构建出高吞吐、低延迟的线程管理体系。建议根据具体业务场景,结合监控数据动态调整参数,方能发挥线程池的最大效能。
2025-04-27 18:09:07
985
原创 定时器详解
Java定时器是任务调度的核心工具,理解其原理与差异至关重要。对于简单需求,Timer足够便捷;高并发或复杂调度场景建议采用。此外,第三方库如Quartz、Spring Task提供了更强大的分布式调度能力,可根据项目需求扩展。
2025-04-26 17:54:45
369
原创 Java常用API详解
类位于金字塔的最顶端,它是所有Java类的终极父类在Java中,并非所有Object类的方法都需要重写。是否需要重写取决于具体需求。
2025-04-25 21:49:42
858
原创 阻塞式队列
比如过年一家人一起包饺子. 一般都是有明确分工, 比如一个人负责擀饺子皮, 其他人负责包. 擀饺 子皮的人就是 "生产者", 包饺子的人就是 "消费者". 擀饺子皮的人不关心包饺子的人是谁(能包就行, 无论是手工包, 借助工具, 还是机器包), 包饺子的人 也不关心擀饺子皮的人是谁(有饺子皮就行, 无论是用擀面杖擀的, 还是拿罐头瓶擀, 还是直接从超 市买的).它通过内置的等待/唤醒机制,自动管理线程的阻塞和唤醒,极大简化了多线程协作的复杂度。2) 阻塞队列也能使生产者和消费者之间 解耦.
2025-04-23 20:12:01
877
原创 Java多线程编程初阶指南
实现方式代码行数可复用性灵活性推荐指数继承Thread5-10低差★☆☆☆☆常规Runnable6-8高中★★★☆☆匿名内部类3-5低高★★★★☆Lambda表达式1-3中极高★★★★★核心定义:当多个线程并发访问共享资源时,程序仍能保持正确行为的状态黄金准则原子性(Atomicity)保证可见性(Visibility)保证有序性(Ordering)保证使用没有共享资源的模型适用共享资源只读,不写的模型不需要写共享资源的模型。
2025-04-22 23:17:08
1427
原创 Java内部类详解
成员内部类:定义在类的成员位置,无static修饰静态内部类:定义在类的成员位置,有static修饰局部内部类:定义在方法内部匿名内部类:没有名字的局部内部类,常用于简化代码什么时候该用内部类?// 成员变量和方法特点:属于外部类对象(需依赖外部类实例存在)可直接访问外部类所有成员(包括private)不能定义静态成员(JDK16+允许静态变量)// 静态/非静态成员属于外部类本身只能直接访问外部类的静态成员可包含静态成员。
2025-04-16 20:53:10
603
原创 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
442
原创 Java抽象类与抽象方法详解
设计意图:当多个子类具有共性行为但具体实现不同时,通过抽象类强制规范子类的实现格式。典型场景// 定义抽象图形类// 抽象方法:计算面积(无法确定具体实现)// 具体子类实现@Override// 圆形面积计算@Override// 矩形面积计算强制约束包含抽象方法的类 必须声明为抽象类子类 必须实现所有抽象方法(除非子类也是抽象类)语法规则[访问修饰符] abstract 返回值类型 方法名(参数列表);示例说明。
2025-04-10 22:42:23
365
原创 Java代码块详解:分类、作用与最佳实践
特性局部代码块构造代码块静态代码块执行次数每次方法调用每次new对象类加载一次存储位置栈内存堆内存方法区是否可抛异常可处理可处理需捕获或终止加载访问权限仅限方法内部可访问实例变量仅访问静态成员理解静态代码块的 一次性初始化 机制避免构造代码块的 滥用风险认识局部代码块的 历史局限性在实际开发中,建议结合IDE的代码分析工具(如IntelliJ IDEA的。
2025-04-10 21:44:47
655
原创 Java权限修饰符深度解析
Java提供四种访问控制修饰符,按访问范围从宽到窄排序如下:访问范围:所有类均可访问使用场景:示例: 访问范围:使用场景:示例: 访问范围:仅同包类可见使用场景:示例: 访问范围:仅本类可见使用场景:示例: 2. 构造函数访问控制 最小化公开元素 优先使用最严格的访问级别(推荐顺序): → 默认 → → 数据封装原则 3.接口方法
2025-04-10 21:22:00
462
原创 (每日一道算法题)最长回文子串
中心扩展法通过利用回文串的对称性,高效地解决了最长回文子串问题。其核心思想是从每个可能的中心向两侧扩展,寻找最大回文。相比于动态规划等其他方法,中心扩展法在空间复杂度上更具优势,且代码简洁易懂。
2025-03-27 23:20:50
322
原创 (每日一道算法题) K 个一组翻转链表
本解法通过头插法实现每组的翻转,利用虚拟头节点简化连接逻辑,通过前驱指针维护各组之间的连接。思路清晰,代码简洁高效。适用于对链表操作较为熟悉的开发者,重点在于理解头插法的翻转逻辑和指针的更新策略。
2025-03-26 21:09:43
436
原创 (每日一道算法题)合并 K 个升序链表
给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。链表数组如下:1->4->5,1->3->4,2->6将它们合并到一个有序链表中得到。
2025-03-25 21:02:37
292
原创 (每日一道算法题)两数相加
该解法通过逐位相加并维护进位,高效处理了逆序链表的相加问题。使用哑节点简化了链表操作,确保代码简洁且鲁棒性强。通过合理处理边界条件(如链表长度不同、最终进位),保证了算法的正确性。
2025-03-25 11:20:22
235
原创 (每日一道算法题)翻转对
降序排序的必要性:保证右子数组元素从前往后递增,使得统计时能利用有序性快速定位。独立统计阶段:必须在合并前单独统计,避免遗漏可能的翻转对。防止整数溢出:比较时使用long类型(如。
2025-03-23 21:36:24
918
原创 (每日一道算法题)交易逆序对的总数
在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。请设计一个程序,输入一段时间内的股票交易记录record,返回其中存在的「交易逆序对」总数。8交易中的逆序对为 (9, 7), (9, 5), (9, 4), (9, 6), (7, 5), (7, 4), (7, 6), (5, 4)。
2025-03-21 20:24:55
410
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人