自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法【3】【链表 & 二叉树】

写递归代码过程中发现,需要调用其他递归函数返回的结果时,就需要考虑后序遍历的思维来优化算法。

2025-08-05 14:10:44 98

原创 算法【2】【数组】【双指针】【滑窗】【哈希表】【队列/栈】【位运算】

力扣hot100的题,见下方代码。

2025-08-04 01:43:51 661

原创 设计模式【1】【单例模式】

保证一个类只有一个实例(整个应用程序中,该类仅存在一个对象);提供一个全局访问点(通常是静态方法),供其他类获取该唯一实例。在面向对象编程(如C++的类)中,“方法”就是类内部定义的函数,是类的一部分,用于实现类的功能。例如类中的方法,功能是“获取购物车的唯一实例”,就像“购物车管理器”提供的“获取购物车”这个功能。

2025-08-05 21:06:46 654

原创 项目设计模式草稿纸

单例模式 (Singleton Pattern)必须掌握的设计模式(按优先级)单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。模板设计- 支持任意类型线程安全- 使用延迟初始化- 第一次调用才创建自动内存管理- 使用atexit防止拷贝- 继承这是一个生产级别的单例实现,体现了对C++的深入理解!为什么需要线程安全的工作原理模板设计的优势内存管理的考虑这个实现展示了你的系统编程功底和设计模式理解!非常好的学习笔记!

2025-08-05 21:06:40 933

原创 算法【5】【DFS/回溯 & BFS & 图论】

2025-08-05 16:05:38 104

原创 算法【4】【动归&贪心】

给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。提示:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。网格类型的动态规划问题,考虑递归加+memo记忆化搜索;解法一:递归 + 记忆化搜索解法二:dp数组解法3:进一步优化空间复杂度优化空间复杂度,核心思路是用一维 DP 数组替代二维 DP 数组。

2025-08-05 16:01:02 106

原创 设计模式【1】

保证一个类只有一个实例(整个应用程序中,该类仅存在一个对象);提供一个全局访问点(通常是静态方法),供其他类获取该唯一实例。在面向对象编程(比如C++的类)中,“方法”其实就是类内部定义的函数,它是类的一部分,用来实现类的功能。比如人类(类)可以有“吃饭”“睡觉”这些行为,在代码中就表现为类的方法;这里的就是(购物车管理器)这个类的一个方法,功能是“获取购物车的唯一实例”。外部不能新建对象(私有构造函数);内部只创建一个对象(静态局部变量只初始化一次);全局只能通过一个入口获取该对象。

2025-07-31 18:44:42 631

原创 云存储【2】【网络层】

好的!网络通信层是整个项目的核心,我来为你制定一个循序渐进的学习路线,让你能够深入理解这一层的所有代码。1.2 学习顺序建议从底层开始:Buffer → Poller → EventLoop → Channel再到连接层:TcpConnection → TcpServer最后到应用层:HttpContext → HttpServer → RouteTrie第二阶段:底层核心组件学习2.1 Buffer(缓冲区)学习学习目标: 理解数据缓冲、粘包拆包处理核心文件:学习要点:实践建议:2.2

2025-07-31 14:55:47 540

原创 xv6【1】

多返回值传递、指针使用。

2025-07-31 01:32:58 384

原创 C++基础【1】

左值是具有持久存储地址、可取地址且能出现在赋值左侧的表达式;右值是临时存在、无持久地址、仅能出现在赋值右侧的表达式(含纯右值和将亡值)。左值可以被取地址,可以出现在表达式的左侧或者右侧,比如变量。右值不能被取地址,出现在表达式的右侧,一般是字面常量定义:左值:指具有确定、持久存储地址的表达式,可通过取地址,能作为赋值语句左侧。常见示例:变量名(如int a;中的a)、解引用指针(*p)、数组元素(arr[i])、返回左值引用的函数结果等。右值。

2025-07-29 18:37:14 686

原创 redis【1】

两者并非替代关系,而是。

2025-07-29 18:37:00 492

原创 算法【1】

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。

2025-07-29 17:51:49 1659

原创 问题大全【1】

技术选型深度拷问:为什么不用Node.js?Node.js的异步IO不是更适合这种IO密集型应用吗?为什么不选择Rust?Rust的内存安全不是更好吗?C++的内存管理这么复杂,你是如何避免内存泄漏的?为什么不使用现成的云存储服务(如阿里云OSS)?5.你的架构是单体还是微服务?为什么这样选择?6.如何保证系统的高可用性?单点故障怎么解决?7.系统的容错机制是什么?8.如何实现服务的水平扩展?9.你的系统能处理多大的文件?有上限吗?10.内存使用情况如何?有内存泄漏吗?11.

2025-07-28 21:16:40 575

原创 操作系统【1】

解题思路操作系统是管理计算机硬件与软件资源的核心系统软件,是用户与硬件之间的接口,核心功能是资源管理和提供交互能力。一句话总结操作系统(Operating System, OS)是计算机系统中负责管理硬件资源(如CPU、内存、外设)和软件资源(如进程、文件),并为用户及应用程序提供便捷交互接口的核心系统软件,是硬件与用户之间的中间层。定义与本质定义:操作系统是运行在计算机上的基础系统软件,位于硬件之上、应用程序之下,是控制和管理整个计算机系统资源的“核心枢纽”。本质:通过抽象硬件复杂性、协调资源分配

2025-07-28 17:09:30 902

原创 【无标题】

本质是决策树遍历:明确路径(已选)、选择列表(可选)、结束条件(叶子节点)三要素。框架固定:for循环遍历选择列表,递归前做选择,递归后撤销选择,核心是状态的正确维护。细节处理选择列表需高效过滤(如used数组、start索引等);路径存储时需拷贝(避免引用修改);结束条件需准确判断(如路径长度达标、索引越界等)。掌握回溯框架后,无论是N皇后、子集、组合还是其他穷举类问题,都能按“定义三要素→套框架→处理细节”的步骤快速解决。

2025-07-24 22:35:52 657

原创 草稿未完成!Linux网络系统【文件传输】【I/O 多路复用】

场景推荐技术核心优势局限性小文件传输零拷贝(sendfile+SG-DMA)高缓存命中率,低拷贝/切换开销无法对数据加工(如压缩、加密)大文件传输异步IO+直接IO避免PageCache占用,非阻塞处理无内核缓存/预读优化,实现较复杂通用Web服务器Nginx动态阈值配置小文件用零拷贝,大文件自动切换异步IO需要根据业务调整阈值(如1MB)

2025-07-24 15:36:56 558

原创 草稿!!【哈希】【lru】

处理负数:C++因哈希值为size_t(无符号)天然避免;Python通过位运算清除符号位。映射范围:均通过取模运算(或等价位运算,当数组长度为2的幂时)将哈希值限制在[0, 数组长度-1]范围内。差异源于语言对哈希值类型的定义(C++无符号 vs Python有符号),但最终目的都是确保索引合法且操作高效。度量哈希表装满程度,负载因子越大,哈希表存储的键值对越多,哈希冲突概率越高,操作性能越差。负载因子 =

2025-07-23 18:14:35 1049

原创 草稿 复盘题【待完成】

当时直接猜答案直接return 我记得第三题过了10% 得到了30分,第二题也得到了一些分。我记得最后是第一题100% 第二题100% 第三题10%所以最后是100 + 200 + 30 = 330 分。

2025-07-23 16:15:40 745

原创 草稿没写完【C++八股总结】【基础】【内存管理】

C++ 中变量的区分需结合 作用域(可见范围)、生命周期(存在时长)、内存分布、初始化规则 分析,核心类型包括 局部变量、全局变量、静态局部变量、静态全局变量(后两者合称「静态变量」,由 static 修饰改变特性)。全局变量的“跨文件访问”是有条件的:必须在其他文件用 声明,否则默认只在当前文件可见? 不! 全局变量默认是外部链接(跨文件可共享),静态全局才是内部链接(仅当前文件)。原速记的“全局变量支持跨文件访问”是对的,但需明确是“默认外部链接”。初始化的本质差异:局部变量默认是“未初始化”(垃

2025-07-23 14:33:12 468

原创 草稿! Linux网络系统总结!

以文件传输,分析io工作方式 以及如何优化传输文件的性能。

2025-07-22 21:39:41 704

原创 vector

/ 使用自定义allocatorstruct MyAllocator { /* 实现分配器接口 */ };

2025-07-21 22:07:10 632

原创 数组题目总结 前缀和草稿

前缀和数组用于快速 频繁地计算一个索引区间内的元素之和!(还有么?深入说说!例题303要是没学过 前缀和那也简单 就累加呗!这个解法每次调用 sumRange 函数时,都要进行一次 for 循环遍历,时间复杂度为ONO(N),而 sumRange 的调用频率可能非常高,所以这个算法的效率很低。正确的解法是使用前缀和技巧进行优化,使得 sumRange 函数的时间复杂度为O1(上面代码换成cpp!一维的很容易理解!类比一维求区间和。

2025-07-21 00:47:08 665

原创 草稿!队列和栈大总结!

实现方式适用场景优势链表实现需要频繁增删,元素数量不稳定无需扩容,空间灵活数组实现随机访问需求,元素数量较稳定缓存友好,访问效率高环形数组实现需高效头尾操作,空间敏感头部操作O(1),自动扩缩容双端队列是一种灵活高效的数据结构,核心价值在于队头和队尾的O(1)操作。通过链表实现可获得灵活的空间分配,通过环形数组实现可获得更好的缓存性能。其应用场景广泛,尤其在滑动窗口、缓存设计和模拟栈/队列混合操作中不可或缺。

2025-07-18 15:04:56 657

原创 队列和栈的实现的草稿

不是“销毁内存”,而是“清除旧值,重置为默认状态”,确保被删除的位置在逻辑上是“空”的,避免旧数据残留造成误解。这就像你从抽屉里拿走一张纸后,把抽屉里的空位擦干净,告诉别人这里现在没东西了,而不是留着旧纸在里面误导人~思考题数组增删头部元素的效率真的只能是ONO(N) 么?我们都说,在数组增删头部元素的时间复杂度是ONO(N),因为需要搬移元素。但是,如果我们使用环形数组,其实是可以实现在O1O(1) 的时间复杂度内增删头部元素的。

2025-07-18 14:41:28 1051

原创 【分治思想解题框架】【分解、求解、合并】

问题:给定kkk个升序链表,将其合并为一个升序链表,返回合并后的头节点。示例:输入,输出。给定整数数组nums和整数kkk,返回数组中第kkk个最大的元素(无需排序整个数组)。分治思想是递归算法的重要分支,但狭义的分治算法必须满足“通过分解降低时间复杂度”。分治的本质是“优化重复计算”:通过二分分解使递归树平衡,减少子问题的重复计算次数(如合并K个链表将重复遍历从kkk次降至log⁡k\log klogk次)。无效分治的标志。

2025-07-17 21:45:12 1043

原创 【贪心算法框架】【最优子结构 vs 贪心选择性质】【从暴力穷举到贪心极致优化】

贪心选择性质:若问题的全局最优解可通过一系列局部最优解的累积直接得到,即每一步选择当前状态下的局部最优解,最终结果就是全局最优解,则该问题具备贪心选择性质。贪心算法的核心是**“精准识别贪心选择性质,用局部最优推导全局最优”**。暴力穷举搭框架:先写出递归树或暴力解法,明确问题的解空间;观察规律找性质:分析递归树,判断是否存在局部最优可累积为全局最优的贪心选择性质;设计策略定规则:基于贪心选择性质,定义局部最优指标和选择规则;严谨验证防偏差:通过反例或归纳法验证策略正确性;代码实现求高效。

2025-07-17 17:42:39 997

原创 贪心算法思想草稿

这里面有个细节,比方说你现在站在 nums[i] = 3 的位置,你可以跳到 i+1, i+2, i+3 三个位置,此时你真的需要分别跳过去,然后递归求解子问题 dp(i+1), dp(i+2), dp(i+3),最后通过子问题的答案来决定 dp(i) 的结果吗?复杂度是二叉树的节点数量,是指数级别,非常高。具体来说,i+1 能走到的最远距离是 i+1+nums[i+1],i+2 能走到的最远距离是 i+2+nums[i+2],i+3 能走到的最远距离是 i+3+nums[i+3],你看看谁最大,就选谁。

2025-07-17 17:39:28 1087

原创 草稿!未完成【动归解题套路框架】【带备忘录的递归】【最优子结构】【自下而上DP table】

/ 左子节点// 右子节点力扣第322题「零钱兑换」给你k种面值的硬币(面值为,每种数量无限)和总金额amount,求凑出该金额最少需要的硬币数;若无法凑出,返回-1。示例输入,输出3(最优解:5+5+1)。动态规划的核心是聪明地穷举:通过定义状态、选择和状态转移方程明确穷举逻辑,再用备忘录或DP数组消除重叠子问题,利用最优子结构推导结果。

2025-07-16 23:47:35 950

原创 【从树的视角理解递归】【递归 = 遍历 || 分解】

输入二叉树节点root,返回以root为根的二叉树的最大深度。维度分解问题思维模式遍历思维模式核心逻辑子问题解 → 原问题解遍历递归树 → 收集结果递归函数特征有返回值,定义明确(如“返回以root为根的树的深度”)无返回值,依赖外部变量(如全局结果集、路径记录)状态维护无额外状态,依赖函数返回值传递子问题结果需外部变量记录路径、深度、使用标记等临时状态适用场景问题可拆解为独立子问题(如二叉树深度、节点数、斐波那契数列)需穷举所有可能路径或状态的问题(如全排列、组合、路径搜索)

2025-07-16 16:25:46 907

原创 草稿【递归/回溯 ≈ 树结构递归】【递归 = 分解 || 遍历】

说明这个函数参数的含义是什么,返回什么结果。这样你才能利用这个定义来计算子问题,反推原问题的解。斐波那契数列的递归函数 fib 就有一个清晰的定义,且算法就在利用这个定义:// 定义:输入一个非负整数 n,返回斐波那契数列中的第 n 个数return n;// 利用定义,计算前两个斐波那契数(子问题)

2025-07-16 16:17:51 783

原创 草稿!! 【二叉树系列算法核心纲要】【前中后序本质】【后序利用子树结果】【遍历 or 分解】

参考labuladong

2025-07-16 14:56:44 652

原创 二叉树思想草稿

先构造分界点,然后去左右子数组递归构造分界点,这就是二叉树的前序遍历!先对左右子数组进行排序,然后合并,这就是二叉树后续遍历框架!并且也是传说中的分治算法。

2025-07-16 14:51:57 952

原创 【操作系统】【文件系统】【小林code】

它帮你管好文件的存储、查找、搬运,还能兼容不同设备,让你用起来像整理房间一样自然。虽然细节复杂,但核心就是“让文件存得稳、找得快、用得顺”!从存储(磁盘的超级块、inode区、数据块区)到索引(内存缓存的 dentry),再到访问(inode 指引数据块读取),文件系统通过分层设计,平衡了持久化、效率、灵活性磁盘存储保证数据不丢;内存缓存(dentry、inode 缓存)加速访问;inode + dentry 解耦“文件标识”和“文件名”,支持硬链接等特性。

2025-07-15 00:15:39 916

原创 草稿!【双指针】【原地修改数组】【滑动窗口- 无重复 有重复 排列检查 组合检查等等!!】【二分】

数组中没有真正的指针,我们通常把索引当作数组中的指针取用,这样就可以在数组中也施展双指针技巧。

2025-07-14 22:20:30 853

原创 【单链表+双指针】【理论+题解】

链表的设计是对数组的互补数组适合“频繁访问、少量增删”的场景(如存储静态数据、通过索引快速查询);链表适合“频繁增删、内存碎片化”的场景(如实现队列、链表式哈希表冲突解决、动态数据结构)。正是这种互补性,使得链表成为数据结构体系中不可或缺的一环——它解决了数组在内存连续性和动态操作上的固有缺陷,让开发者能根据场景选择更高效的工具。Node* next;Node* prev;

2025-07-08 17:59:35 723

原创 【数据结构汇总】【背诵刷题用】【API记不住怎办】

时间复杂度:衡量执行效率,关注基本操作的执行次数随n的增长趋势,核心是最高阶项。空间复杂度:衡量内存消耗,关注额外内存(栈+堆)随n的增长趋势,递归需考虑栈帧深度。分析原则:优先关注最坏情况,忽略常数项和低阶项,聚焦“趋势”而非具体数值。掌握复杂度分析是算法设计的基础,能帮助我们在多种解法中选择更高效的方案(如用O(n log n)的排序替代O(n²)的排序)。维度静态数组动态数组(vector/list)容量特性固定(创建时指定)动态调整(自动扩缩容)核心优势底层基础,内存占用可预测。

2025-07-08 10:43:57 741

原创 操作系统【3】【进程管理】【小林code】

进程:是操作系统调度的最小单位,是程序在内存中运行的动态实例。代码:存储在硬盘的静态文本,编译后是二进制可执行文件(菜谱)运行可执行文件后,会被装载到内存CPU会执行每一条指令(做菜的人)这个运行中的程序被称为进程进程是程序在内存中运行的动态实例状态联动:创建(就绪)→ 运行→ 阻塞(等事件)→ 唤醒(回就绪)→ 终止(销毁),构成完整状态流转。资源主线:创建分配资源,终止回收资源;阻塞保留资源(不占CPU),唤醒继续使用。调度依赖:通过PCB的状态和队列归属。

2025-07-08 01:07:24 1024

原创 【未完成】操作系统【2】【内存管理】【malloc分配内存】【参考小林code】

虚拟内存通过“磁盘扩展+智能管理”,解决了物理内存不足、安全、效率等核心问题;而OOM是内存耗尽的极端状态,系统优先通过“页面置换”缓解,最终通过“查杀进程”止损。实际运维中,需通过监控(如topvmstat)、优化程序(修复内存泄漏)、扩容内存/swap等方式预防OOM。

2025-07-07 21:39:52 733

原创 操作系统【2】【内存管理】【虚拟内存】【参考小林code】

外部内存碎片问题和内存交换效率极低问题,为了解决这两个问题,我们用到内存分页机制。虚拟内存是操作系统应对“多进程共存、物理内存有限、安全访问”难题的核心方案,其设计围绕“硬件妥协+效率优化”一、诞生背景:解决三大痛点地址冲突:进程互相篡改数据(如进程A覆盖进程B的代码);内存不足:物理内存撑不起大量进程/大程序;安全风险:程序非法访问系统核心内存(如篡改内核)。二、实现进化:从分段到分页的迭代1. 分段:逻辑清晰,但低效思路:按“代码、数据、栈”等逻辑功能。

2025-07-06 23:48:41 1117

原创 操作系统【1】【硬件结构】【操作系统结构】

图灵机可以视作“一台带规则的自动草稿机”图灵机基本组成:纸带(内存):连续格子组成,每个格子写入字符,纸带好比内存,格子上的字符好比内存中的程序与数据;读写头:一支笔,能读格子、改符号、左右移动。状态表:一本规则手册,控制器:负责对照规则表,自动执行上面操作。工作过程:循环 “看→改→移→换状态”从 初始状态 开始,重复以下步骤:① 读:读写头看当前格子的符号(比如 1);② 查规则:根据当前状态和符号,查状态表,得到三个指令(改什么符号、往哪移、变啥状态);③改 + 移:按指令改符号、移动读写头;

2025-07-05 17:26:49 904

空空如也

空空如也

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

TA关注的人

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