Leecode 0055. Jump Game
55. Jump GameYou are given an integer array nums. You are initially positioned at the array's first index, and each element in the array represents your maximum jump length at that position. Return true if you can reach the last index, or false otherwise. Example 1: 123Input: nums = [2,3,1,1,4]Output: trueExplanation: Jump 1 step from index 0 to 1, then 3 steps to the last index. Example 2: 123Input: nums = [3,2,1,0,4]Output: falseExplanation: You will always arrive at index 3 no matter...
Leecode 0053. Maximum Subarray
53. Maximum SubarrayGiven an integer array nums, find the subarray with the largest sum, and return its sum. Example 1: 123Input: nums = [-2,1,-3,4,-1,2,1,-5,4]Output: 6Explanation: The subarray [4,-1,2,1] has the largest sum 6. Example 2: 123Input: nums = [1]Output: 1Explanation: The subarray [1] has the largest sum 1. Example 3: 123Input: nums = [5,4,-1,7,8]Output: 23Explanation: The subarray [5,4,-1,7,8] has the largest sum 23. 题目大意给定一个整数数组...
Leecode 0455. Assign Cookies
455. Assign CookiesAssume you are an awesome parent and want to give your children some cookies. But, you should give each child at most one cookie. Each child i has a greed factor g[i], which is the minimum size of a cookie that the child will be content with; and each cookie j has a size s[j]. If s[j] >= g[i], we can assign the cookie j to the child i, and the child i will be content. Your goal is to maximize the number of your content children and output the maximum number. Example...
读写锁技术:原理、实现
一、读写锁同步模型与核心概念1.1 核心锁类型定义读写锁(Read-Write Lock)是一种细粒度并发控制机制,通过拆分锁权限解决 “读多写少” 场景下的资源竞争问题,包含两类锁: 读锁(共享锁,Shared Lock):允许多个线程同时持有,适用于只读操作 写锁(排他锁,Exclusive Lock):仅允许单个线程持有,适用于修改操作 1.2 同步控制核心条件读写锁通过严格的权限控制实现并发安全,核心同步规则如下: 锁组合 允许并发? 核心原因 读锁 + 读锁 是 只读操作不修改数据,无竞争 读锁 + 写锁 否 读写操作存在数据一致性冲突 写锁 + 写锁 否 多写操作会导致数据覆盖 1.3 内部状态机设计读写锁通过状态计数器维护锁的持有状态,主流实现采用 “高位存读计数 + 低位存写标记” 的紧凑设计(以 32 位状态为例): 1[31位:读锁持有数量] | [1位:写锁标记(0=无写锁,1=有写锁)] 状态转换逻辑示例: 无锁状态(0x00000000)→ 加读锁 → 0x00000001(读计数 =...
Git 冲突规避
导言Git 冲突的本质是并行开发中代码变更的重叠与未及时同步,而非单纯的技术问题。 一、先搞懂:Git 冲突的 3 大核心根源在解决问题前,必须明确冲突的来源,才能针对性预防: 同步滞后:长期在本地分支开发,不与主分支同步,导致累积大量差异(最常见,占冲突总量的 60%+) 范围重叠:多开发者同时修改同一文件的同一代码块(如两个开发者改同一个接口的参数) 管控缺失:无分支规范(如直接在主分支开发)、无提交标准(大提交包含多个功能)、无依赖锁定(package.json 频繁冲突) 二、核心策略 :搭建「零冲突友好型」分支体系分支管理是冲突规避的基石,90% 的高频冲突源于混乱的分支结构。推荐两种经过验证的分支模型,团队需二选一并严格执行。 2.1 选择适配的分支模型根据团队规模和项目类型选择,避免混合使用导致混乱: 分支模型 适用场景 核心分支结构 冲突风险 Git Flow 中大型项目、有固定发版周期 main (生产)+develop (开发)+feature/bugfix/hotfix 低 GitHub Flow 小型项目、敏捷迭代(如...
单元测试在软件工程中的核心价值
一、引言:单元测试的定位与行业标准根据IEEE 829 测试文档标准,单元测试是软件测试体系中最底层、最基础的测试层级,聚焦于 “最小可测试单元”(如函数、类、模块)的功能验证。作为软件开发流程的关键环节,单元测试并非 “可选优化项”,而是经过行业实践验证的 “质量保障基础设施”。截至 2025 年,全球 Top 100 科技企业中,97% 已将单元测试纳入强制开发规范,其核心价值体现在技术合理性、风险控制、协作效率等多维度的综合收益。 二、单元测试的五大核心技术价值(附数据支撑)1. 缺陷前置预防:降低修复成本的关键机制缺陷的发现阶段直接决定修复成本。根据IBM 软件工程研究院的研究数据: 需求阶段发现的缺陷,修复成本为 “1x”; 编码阶段(未做单元测试)发现的缺陷,修复成本升至 “5x”; 系统测试阶段发现的缺陷,修复成本达 “10x”; 生产环境发现的缺陷,修复成本高达 “100x-1000x”。 单元测试可在编码阶段直接拦截 60%-70% 的逻辑缺陷,使缺陷修复成本降低 80% 以上。 2. 保障代码可维护性:支撑系统演进的...
PKGCONF依赖管理内容整理
一、安装与配置:Ubuntu 环境搭建pkgconf 是 pkg-config 的现代替代品,兼容其核心功能且解析速度更快、依赖处理更高效。在 Ubuntu 系统中,需通过官方包管理器完成安装与基础配置,确保工具可正常识别依赖包的 .pc 文件(记录编译链接参数的核心文件)。 1. Ubuntu 下的 pkgconf 安装Ubuntu 官方仓库已预装 pkgconf(通常随开发工具链默认安装),若未安装或需更新,执行以下命令: 基础安装:打开终端,执行sudo apt update && sudo apt install pkgconf,该命令会: 同步 Ubuntu 软件源索引,确保获取最新版本; 安装 pkgconf 主程序及依赖(如 libpkgconf3 库); 自动配置默认 .pc 文件搜索路径(无需手动设置基础路径)。 版本验证:安装后执行pkgconf --version,Ubuntu 20.04 输出约 0.29.2,Ubuntu 22.04 输出约 1.8.1(高版本支持更多特性,如更灵活的依赖过滤);若提示 “command not...
Redis gdb 调试整理
一、调试前环境准备(必须配置)调试 Redis 的核心前提是保留调试符号与开启核心日志,否则无法定位源码问题。 1. Redis 编译配置(带调试符号)默认make会开启优化(-O2)并剥离调试符号,需重新编译保留调试信息: 12345678# 1. 清理原有编译结果make distclean# 2. 编译时保留调试符号(-g)+ 关闭优化(-O0,避免代码指令重排)make CFLAGS="-g -O0"# 3. 验证调试符号是否存在(输出包含 "with debug_info" 即正常)file src/redis-server | grep debug 2. Redis 核心日志配置(辅助调试)修改redis.conf,开启详细日志以定位问题上下文: 123456789101112# 日志级别:调试阶段设为 verbose(输出核心操作)loglevel verbose# 日志文件:指定路径便于后续分析logfile "/var/log/redis/redis-debug.log"#...
Leecode 0090. Subsets II
90. Subsets IIGiven an integer array nums that may contain duplicates, return all possible subsets (the power set). The solution set must not contain duplicate subsets. Return the solution in any order. Example 1: 12Input: nums = [1,2,2]Output: [[],[1],[1,2],[1,2,2],[2],[2,2]] Example 2: 12Input: nums = [0]Output: [[],[0]] 题目大意给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(即幂集)。幂集需包含所有可能的子集(包括空集和数组本身),且不能有重复子集,结果顺序可任意。 例如: 输入 nums = [1,2,2],输出 [[],[1],[1,2],[1,2,2],[2],[2,2]](共 6 个子集,无重复); 输入 nums...
Leecode 0046. Permutations
46. PermutationsGiven an array nums of distinct integers, return all the possible permutations. You can return the answer in any order. Example 1: 12Input: nums = [1,2,3]Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] Example 2: 12Input: nums = [0,1]Output: [[0,1],[1,0]] Example 3: 12Input: nums = [1]Output: [[1]] 题目大意给定一个无重复元素的整数数组 nums,返回该数组所有可能的全排列。全排列是指包含数组所有元素的有序序列,且每个元素仅出现一次,结果顺序可任意。 例如: 输入 nums = [1,2,3],输出 [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]](共 3! = 6...
Leecode 0491. Non-decreasing Subsequences
491. Non-decreasing SubsequencesGiven an integer array nums, return all the different possible non-decreasing subsequences of the given array with at least two elements. You may return the answer in any order. Example 1: 12Input: nums = [4,6,7,7]Output: [[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]] Example 2: 12Input: nums = [4,4,3,2,1]Output: [[4,4]] 题目大意给定一个整数数组 nums,返回所有不同的、长度至少为 2 的非递减子序列。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。 例如: 输入 nums = [4,6,7,7],输出包含...
基于 Redis-cli 的核心命令与服务
第一章 Redis 安装验证与原生连接安装 Redis 后,首要任务是通过redis-cli(Redis 自带命令行客户端)验证服务可用性,并掌握基础连接参数与配置查看方式。 1.1 安装后基础验证(redis-cli 核心命令)无论通过yum/apt/ 源码编译安装,Redis 均默认自带redis-cli工具,直接在终端执行以下命令验证服务: 123456789101112131415161718192021222324# 1. 本地连接(默认端口6379,无密码时)redis-cli# 成功连接后会显示Redis服务地址与端口,提示符如下:127.0.0.1:6379> # 2. 验证服务存活(核心命令:PING)127.0.0.1:6379> PING# 返回结果:PONG(表示服务正常运行)# 3. 查看Redis版本(核心命令:INFO server)127.0.0.1:6379> INFO server# 关键输出(截取版本信息):redis_version:6.2.6 #...
自定义对象支持 C++ 范围循环(Range-based for)的实现
导言范围循环(C++11 引入)是现代 C++ 中遍历容器的便捷方式,其核心依赖迭代器协议与begin/end 接口。 一、范围循环的底层实现原理C++ 标准规定,对于表达式for (range_declaration : range_expression),编译器会自动将其展开为以下逻辑(伪代码): 123456789// 1. 获取范围的起始与结束迭代器auto __begin = begin(range_expression);auto __end = end(range_expression);// 2. 遍历逻辑:依赖迭代器的 !=、++、* 操作for (; __begin != __end; ++__begin) { range_declaration = *__begin; // 解引用获取元素 loop_statement; // 循环体} 关键依赖接口要支持范围循环,自定义对象需满足: 存在可被调用的 begin() 和 end()...
Final/Override/Default/Delete 关键字整理
导言整理CppGuide社区内容,Final/Override/Default/Delete 均为C++ 关键字,ANSI C(如 C89、C99、C11)标准不支持这些特性。以下解析基于 C++(面向对象扩展,常与 C 语言结合使用),关联 C 语言的内存管理、代码安全思想,所有代码需用 C++ 编译器(如 g++、clang++)编译,ANSI C 编译器(如 gcc)均不支持。 一、Final 关键字:限制继承与重写1. 语义定义与作用域 作用 1:修饰类时,禁止该类被继承(作用域为整个类) 作用 2:修饰虚函数时,禁止子类重写该虚函数(作用域为单个虚函数) C 语言类比:C 中通过结构体封装 + 函数指针模拟多态时,需手动规范 “继承”(如不允许其他结构体包含父结构体模拟继承),但 Final 是 C++ 编译期强制约束,比 C 的代码规范更可靠。 2. 代码实例 1:Final 修饰类(禁止继承)123456789101112131415161718192021222324252627#include...
C++ 中 struct 与 class 的核心差异与应用场景
导言在 C++ 编程中,struct与class是定义复合数据类型的核心语法元素,二者既共享大部分 OOP(面向对象编程)特性,又因设计初衷不同存在关键差异。 一、语法定义与核心共性struct源于 C 语言的结构化数据设计,class则是 C++ 为支持 OOP 引入的特性。在 C++ 标准(ISO/IEC 14882)中,二者功能上高度重合,仅在默认行为上存在差异。 1.1 核心共性 成员定义能力:均可包含数据成员(如int x)和成员函数(如void print()),支持静态成员(static)和友元(friend)。 OOP 特性支持:均支持构造函数、析构函数、拷贝 / 移动语义、继承、多态(虚函数)。 内存布局规则:数据成员的对齐(alignment)、填充(padding)逻辑完全一致,由编译器根据平台(如 32 位 / 64 位)和类型大小决定。 模板与容器适配:均可作为 STL 容器(如std::vector)的元素类型(需满足容器要求,如可拷贝性)。 1.2...
Linux CMake 自动生成模板:一键清理、零警告编译、多库链接
导言在 Linux 下用 CMake 管理 C++ 项目时,你是否常遇到这些问题:手动写 CMakeLists.txt 繁琐、旧配置文件干扰编译、未使用参数警告刷屏、链接库不知从何下手?本文将带你打造一个「全能型 CMake 自动生成模板」,一键解决上述所有痛点,让项目构建效率翻倍。 一、模板核心功能清单先看这个模板能帮我们做什么,避免重复造轮子: 自动清理旧文件:运行时自动删除 CMake 缓存、旧 Makefile 等冗余文件,杜绝配置冲突 智能扫描源码:递归识别当前目录及子目录下所有.cpp/.cc/.h/.hpp文件,无需手动列文件 零警告编译:默认抑制unused parameter(未使用参数)警告,同时保留关键编译检查 规范输出目录:可执行文件、库文件分别输出到build/bin和build/lib,源码目录不污染源 灵活链接库:预留动态库(.so)和静态库(.a)链接区域,示例清晰 安全项目命名:避免中文 /...
文件词频代码解析
一、项目总览:结构与核心目标1.1 项目定位该程序是一款轻量级文本分析工具,支持加载文本文件、单词搜索及布尔逻辑运算,核心目标是快速定位单词在文本中的出现位置,并通过逻辑组合满足复杂搜索需求(如 “查找同时包含hello和world的行”)。在实际应用场景中,无论是处理学术论文、代码库检索,还是进行日志文件分析,该工具都能通过高效的搜索逻辑,快速定位关键信息,极大提升文本处理效率。 1.2 文件结构123456789word_frequency_analysis/├── 22.txt/text.txt # 测试文本文件├── CMakeLists.txt # CMake构建配置(依赖C++11及以上)├── main.cpp # 程序入口(命令循环与交互)├── my_operation.h # 运算类声明(Operation基类)├── operation.cpp # 运算工厂实现(Processing类)├── programbegin.cpp #...
文件词频统计系统设计
一、文本查询程序代码整理1.1 textsearchprogram.h123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475#ifndef TEXT_SEARCH_PROGRAM_H#define TEXT_SEARCH_PROGRAM_H#include "my_operation.h"void cleanWord(string & word);//包括单词出现次数和出现行号class WordDate {private: int count = 0; set <int> linenums; friend class ProgramDate;public: WordDate () {}; WordDate (int _count, set...
Leecode 0078. Subsets
78. SubsetsGiven an integer array nums of unique elements, return all possible subsets (the power set). The solution set must not contain duplicate subsets. Return the solution in any order. Example 1: 12Input: nums = [1,2,3]Output: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] Example 2: 12Input: nums = [0]Output: [[],[0]] 题目大意给定一个无重复元素的整数数组 nums,返回该数组所有可能的子集(即幂集)。幂集需包含所有可能的子集(包括空集和数组本身),且不能有重复子集,结果顺序可任意。 例如: 输入 nums = [1,2,3],输出 [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]](共 2³=8...
Leecode 0093. Restore IP Addresses
93. Restore IP AddressesA valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros. For example, "0.1.2.201" and "192.168.1.1" are valid IP addresses, but "0.011.255.245", "192.168.1.312" and "192.168@1.1" are invalid IP addresses. Given a string s containing only digits, return all possible valid IP addresses that can be formed by inserting dots...