进程与线程 进程 vs 线程进程是系统资源分配的基本单位(运行的应用程序) 线程是任务调度和执行的基本单位(线程是进程的子集) 维度 进程(Process) 线程(Thread) 核心角色 系统资源分配的基本单位 CPU任务调度与执行的基本单位 本质 运行中的应用程序,是程序的一次动态执行 进程的子集(轻量级进程),共享进程资源 关键差异 资源独立(内存、文件描述符等),切换重 共享 2025-10-06 操作系统 #线程 #进程
回溯算法解析 回溯算法解析回溯算法是一种通过试错 + 回退寻找所有可行解的算法思想,核心是「在递归探索过程中,当发现当前路径无法得到有效解时,撤销上一步的选择,转而尝试其他可能的路径」。它特别适合解决需要穷举所有可能解的问题(如组合、排列、子集、棋盘问题等)。 一、回溯算法的核心思想想象成「走迷宫」:从起点出发,每次选择一条路往前走;如果走到死胡同(当前路径无效),就退回到上一个岔路口,换另一条路继续尝试, 2025-10-05 算法 #回溯算法
17. 电话号码的字母组合 题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。 数字到字母的映射方式与电话按键相同。注意 1 不对应任何字母。 思路实现思路采用回溯算法的方式,通过深度优先搜索遍历所有可能的字母组合。使用 StringBuffer 作为临时存储结构,在递归过程中不断添加字符并回溯,生成所有可能的组合。 关键步骤解析 初始化映射关系:创建 String 数组 c 2025-10-05 算法 #leetcode #递归 #回溯 #字符串
78.子集 题目给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2: 输入:nums = [0]输出:[[],[0]] 提示: 1 <& 2025-10-04 算法 #leetcode #递归 #数组 #回溯
114.二叉树展开为链表 题目给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 思路实现思路采用后序递归遍历的方式(先处理右子树,再处理左子树,最后处理当前节点),通过一个全局变量 prev 记录上一个处理完毕的节点,逐步调整指针 2025-10-03 算法 #leetcode #二叉树 #递归 #后序遍历
Comparable和Comparator区别 在 Java 中,Comparable和Comparator都是用于对象比较和排序的接口,但它们的设计理念、使用场景和实现方式有显著区别,具体如下: 1. 接口所在包不同 Comparable 位于 java.lang 包下(核心包,无需手动导入); Comparator 位于 java.util 包下(工具包,使用时需要导入)。 2. 比较逻辑的实现位置不同(核心区别) Comparable: 2025-10-03 Java #Java #基础
P146.LRU缓存 题目请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。 void put(int key, int value) 如果关键字 k 2025-10-03 算法 #leetcode #链表 #LRU #Map
Socket编程(Java) Java中的Socket编程主要分为TCP协议和UDP协议两种实现方式,两者者基于不同的通信模型,适用于不同的场景。以下从核心类、工作流程、特点及适用场景等方面进行总结: 一、TCP Socket编程(面向连接)TCP(Transmission Control Protocol)是一种面向连接、可靠的、基于字节流的传输协议,通信前需建立连接(三次握手),通信后需断开连接(四次挥手),保证数 2025-10-02 Java #Java #计算机网络,Socket编程
P25.k个一组反转链表 题目给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。 解析思路1.通过找到start和end的区间,通过遍历寻找k个节点,也就是end的位置。 2.end的末尾截断,然后头插法反转s 2025-10-02 算法 #leetcode #链表
P24. 两两交换链表中的节点 ## 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 24. 两两交换链表中的节点 - 力扣(LeetCode) 迭代 使用哑节点d简化头节点处理 通过prev指针维护已处理部分与待处理部分的连接 每次取两个节点first和second进行交换 交换完成后更新prev位置继续下一轮 123456789 2025-10-02 算法 #leetcode #链表