进程同步与互斥 要彻底理解进程的同步与互斥,我们需要从 “为什么需要” 到 “是什么”,再到 “如何实现” 和 “经典问题” 逐步拆解。核心逻辑是:进程并发执行会引发资源竞争和执行顺序混乱,同步与互斥就是解决这两个问题的机制。 一、先搞懂:为什么需要同步与互斥?—— 并发的 “副作用”现代操作系统支持进程并发执行(比如同时开浏览器、微信、音乐),但并发会带来两个核心问题,这也是同步与互斥的起源: 1. 问题 2025-10-06 操作系统 #进程 #同步 #互斥
进程与线程 进程 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 #链表