- 博客(91)
- 收藏
- 关注
原创 paoxiaomo的XCPC算法竞赛训练经验
楼主作为一个普通二本的ICPC选手,在0基础的情况下凭借自学,获得过南昌邀请赛金牌,杭州区域赛银牌,一路上经历过不少的跌宕起伏,如今将曾经摸索出来的学习路线分享给大家。
2025-06-02 19:33:13
224
原创 【Java】 volatile 和 synchronized 的比较及使用场景
volatile是 Java 中的一个轻量级同步机制,它用来确保变量的可见性。当一个线程修改了volatile变量的值,其他线程能够立即看到修改后的值。它通过内存屏障来禁止编译器和 CPU 对volatile变量的重排序,确保每次读取都是从主内存中获取最新的值。是 Java 中的同步机制,它可以保证原子性和可见性。使用可以确保在同一时刻只有一个线程可以执行某个方法或代码块,其他线程必须等待锁的释放。确保了对共享资源的访问是安全的。volatile和是 Java 中两种常用的并发控制机制。volatile。
2025-05-14 20:58:13
528
5
原创 【Java基础】HashTable 和 ConcurrentHashMap 的区别与使用
在 Java 编程中,HashTable和都是用于存储键值对的数据结构。它们在某些情况下功能类似,但在设计和性能方面存在显著的差异。本文将详细介绍它们的区别以及如何选择使用它们。
2025-05-14 20:08:42
849
1
原创 使用CAS操作实现乐观锁的完整指南
无锁:避免线程阻塞和上下文切换高性能:适合高并发场景可扩展:可用于构建各种并发数据结构在实际应用中,需要根据具体场景:• 处理ABA问题• 优化自旋策略• 结合版本控制• 必要时退化为悲观锁通过合理使用CAS乐观锁,可以显著提高Java应用的并发性能和吞吐量。
2025-05-13 16:17:32
538
1
原创 【并发编程基石】CAS无锁算法详解:原理、实现与应用场景
是现代并发编程的核心算法之一,它通过处理器指令级的原子操作实现线程安全,无需传统锁机制。if (V == E) { // 比较当前值是否等于预期值V = N // 如果相等则更新。
2025-05-13 15:55:01
546
1
原创 数据库分库分表实战指南:从原理到落地
通过合理的分库分表策略,可以使传统关系型数据库支撑起海量数据场景。关键在于根据业务特征选择合适的分片策略,并建立完善的监控运维体系。• 数据量>1TB:考虑NewSQL数据库(TiDB/CockroachDB)• 超高并发场景:结合内存数据库(Redis/Aerospike)• 数据量<1TB:使用中间件方案。
2025-05-11 18:42:40
1207
2
原创 一文了解B+树的删除原理
宽松的根节点约束自顶向下的删除策略高度自适应的结构调整这种精妙的设计使得B+树在维持高效查询性能(OlogmNOlogmN)的同时,能够优雅地处理极端情况下的结构变化。理解这一机制对数据库存储引擎开发和文件系统优化具有重要意义。
2025-05-11 17:18:56
968
1
原创 数据库索引详解:原理 · 类型 · 使用 · 优化
索引本质上是一棵数据结构(如 B+ 树、哈希表等),它维护了表中一列或多列列值与对应数据行存储位置的映射关系。类似于书籍的目录,通过目录可以快速定位到目标章节页码;索引则让数据库引擎能更快地定位到目标行,避免全表扫描。索引是提升数据库查询性能的核心策略,但同时也带来额外的写入开销和维护成本。唯有深刻理解索引原理、合理选择索引类型,并通过监控与重构不断优化,才能在性能和资源利用之间取得最佳平衡。
2025-05-10 16:28:58
1284
1
原创 数据库中的 Segment、Extent、Page、Row 详解
层级说明示例大小(InnoDB)Segment表或索引的所有空间总和N/AExtent一组连续的页1MB(64个16KB页)Page数据读写的最小单位16KBRow表中的一条记录变长(数十~数千字节)
2025-05-10 16:00:34
639
原创 【操作系统】线程崩溃机制详解
在分布式系统与多线程编程的世界里,一个看似简单的问题却暗藏玄机:当某条线程突然崩溃,其所属进程会随之消亡吗?这个问题背后隐藏着操作系统与编程语言的精妙设计,本文将从底层原理到工程实践层层剖析。
2025-05-07 13:13:51
269
2
原创 【操作系统】一文了解各种锁(超详细)
在多线程编程和操作系统中,锁(Lock)是保证线程安全、避免竞态条件的关键机制。不同的锁适用于不同的场景,本文将从底层原理到实际应用,详细介绍常见的锁类型及其优缺点。
2025-05-07 12:18:52
943
原创 【操作系统】深入理解内存管理:从虚拟内存到OOM Killer
在现代计算机系统中,内存管理是操作系统最核心的功能之一。本文将围绕内存管理的几个关键概念展开讨论,包括虚拟内存机制、内存分配原理、OOM Killer的工作机制以及不同系统架构下的内存限制。
2025-05-04 19:07:47
599
5
原创 【操作系统】一文带你深入理解内存分配
brk():适合小内存,速度快但有碎片mmap():适合大内存,灵活但开销大理解这些底层机制,才能写出更高效的代码!
2025-05-04 17:50:07
270
2
原创 Elasticsearch--自带“搜索引擎“的数据库
高度可扩展:自动分片与副本机制,轻松实现从单节点到千节点扩容。丰富查询能力:支持全文检索、精确匹配、布尔组合、多字段、多语言分词、多种聚合。实时性:近实时(NRT)架构,文档写入后秒级可查询。生态完善:Kibana、Beats、Logstash、Elastic APM 等生态工具,覆盖数据采集、监控、可视化全链路。混合场景支持:除了日志与搜索,还可做实时指标分析、向量搜索、SIEM 安全事件管理等。
2025-04-30 21:02:33
1401
2
原创 Kaggle比赛入门攻略(以 Titanic 为例)
阶段内容注册参赛加入比赛并同意规则数据理解train/test 数据结构清晰创建 Notebook无需本地环境,在线运行探索数据找到性别、舱位等关键特征构建模型使用 sklearn 快速上手提交预测自动保存为 CSV 并提交评分持续提升学习课程,改进特征,调参优化如果你成功提交了 Titanic 的预测结果,恭喜你正式迈出了数据科学之路的第一步!
2025-04-30 19:30:42
1210
原创 【操作系统】面试必备!一文了解缓存
在多核处理器系统中,每个核心都有自己的缓存(Cache),用于加速数据访问。• 减少伪共享(False Sharing):通过缓存行对齐(Padding)减少不必要的失效。• 目录协议(Directory-Based):仅通知持有副本的核心,而非广播所有核心。• Modified(M):缓存行已被修改,与主存不一致(脏数据)。• Exclusive(E):缓存行独占,与主存一致(干净数据)。• Shared(S):缓存行被多个核心共享,与主存一致。• 动作:直接修改,无需广播(因为没有其他副本)。
2025-04-29 17:45:08
691
1
原创 【软件工程】面向对象编程(OOP)概念详解
抽象类:包含抽象方法(没有实现的方法)的类,不能被实例化,子类必须实现其抽象方法。接口:纯抽象的“契约”,Java8+ 支持默认方法(default)和静态方法。// 抽象类示例// 抽象方法System.out.println("我是一个图形");// 子类实现@Override// 接口示例// 抽象方法// 实现接口@OverrideSystem.out.println("绘制矩形");Single Responsibility(单一职责)O。
2025-04-28 17:13:35
603
原创 【软件工程】需求分析详解
需求分析(Requirements Analysis)是软件生命周期中的第二阶段,其目标是明确和细化用户需求,为后续设计与开发提供依据。在此阶段,团队需要识别和了解所有利益相关者的需求,包括功能性需求和非功能性需求,以保证系统满足用户期望 ([软件工程第三章——需求分析。完善的需求分析能够显著降低后期返工和系统缺陷率,提高项目成功率。
2025-04-28 16:43:45
1500
原创 【软件工程】 白盒测试简介
在软件测试过程中,白盒测试(White-box Testing)是一种重要方法,它通过检查程序内部结构来验证软件功能。本文以一道典型的伪代码程序为例,结合白盒测试的基本操作,设计语句覆盖测试用例,并总结白盒测试的基本流程。逻辑路径分析:了解程序流程,找出所有可能路径。覆盖标准选择:根据测试需求选择覆盖标准,如语句覆盖、判定覆盖、条件覆盖等。测试用例设计:根据覆盖要求设计输入数据。测试执行与验证:运行程序,验证实际输出是否符合预期。其中,语句覆盖(Statement Coverage)
2025-04-27 16:43:55
549
2
原创 【算法笔记】贪心算法
贪心算法是一种在每一步选择中都采取当前看起来最优(最“贪心”)的策略,从而希望得到全局最优解的算法设计思想。核心思想:每一步都做出局部最优选择,不回退。适用场景:问题具有最优子结构且满足贪心选择性质—— 即局部最优可以导出全局最优。对第iii个国家当前税率tit_iti(最开始ti100t_i=100\%ti100%)再加一次pip_i\%pi,其新的税率为tipit_i + p_itipi。在乘积中,相当于将当前乘积乘以tipi。
2025-04-27 12:55:18
2725
原创 【软件工程】TCP三次握手中的SYN与ACK:核心机制详解
位置:TCP报文头的Flags字段取值:二进制值(0或1)功能标识连接初始化请求(第一次握手)表示序列号同步(第二次握手)TCP三次握手中的SYN和seq各司其职,共同确保连接的可靠性:• SYN是控制标志位,仅标识连接初始化请求(SYN=1)或确认(ACK=1),不携带具体数值。• seq是32位序列号字段,明确数据字节的起始位置,贯穿整个TCP连接生命周期。初始序列号(ISN)随机生成,防止预测攻击。确认号ack始终为对端seq+1,指向期望接收的下一个字节。第三次握手后,
2025-04-25 15:51:53
633
1
原创 【java后端】用VSCode的print插件打印代码
作为程序员,我们经常需要将代码或技术文档打印出来用于评审、备案或分享,包括申请软著也需要代码的PDF。虽然VS Code本身没有内置打印功能,但通过Print插件可以完美解决这个问题。Print插件是VS Code上一款专门用于打印代码和Markdown文档的扩展工具。首先在VS Code的扩展市场中搜索"Print"并安装。对于包含UML等图表的Markdown,建议搭建本地Kroki服务。• 编辑文档时会自动刷新预览(默认3秒延迟)• 支持图表渲染(需配合Kroki服务)• 支持代码片段选择性打印。
2025-04-24 14:28:32
371
1
原创 【项目推荐】How to cook--程序员专属的开源烹饪指南
作为一名程序员,你是否曾面对菜谱中的“适量盐”“少许油”感到困惑?“茭白炒肉”避免中途出现未声明的“神秘调料”,“红烧鱼”明确循环煎制次数——精准到克的配方,让你告别翻车。例:鸡蛋羹的“参数”包括水量比、蒸煮时间误差范围,甚至微波炉与蒸箱的兼容方案!涵盖“高级专业术语”“辅料技巧”,助你从“初级厨艺工程师”晋升为“架构师”。比如:“学习焯水”=掌握预处理函数,“食品安全”=异常处理规范。从“厨房准备”到“油温判断技巧”,如同配置开发环境般细致。• 菜谱按难度星级索引(1-5星),支持“渐进式学习”
2025-04-24 13:51:42
312
原创 【leetcode】3524 求出数组的X值1
你可以对数组执行一次操作:移除不重叠的前缀和后缀(可以为空),留下一个连续非空子数组。result[x] 表示得到 x 作为余数的方案数。给你一个正整数数组 nums 和一个正整数 k。(该子数组的乘积) % k = x。,留下的是一个非空的连续子数组。也就是说:我们其实是。
2025-04-23 23:07:51
382
原创 【Java后端】MyBatis 与 MyBatis-Plus 如何防止 SQL 注入?从原理到实战
SQL 注入(SQL Injection)是指攻击者通过输入恶意 SQL 语句,干扰原本正常的数据库查询,从而达到绕过登录、获取数据、甚至删除数据库的目的。如果我们将用户输入直接拼接到 SQL 中,攻击者就可能利用OR '1'='1'这样的语句,绕过身份验证。
2025-04-23 22:47:51
1018
原创 【软件工程】软件测试基础知识
• 等价类划分:将输入数据分为有效和无效类别(如测试年龄输入框,有效类:18-60岁,无效类:负数或100岁以上)。• 路径覆盖:测试代码中所有可能的执行路径(例如:一个函数有3条分支,需测试全部3种情况)。• 边界值分析:测试输入范围的边界(如允许输入1-100,则测试0、1、100、101)。• 集成测试:验证多个模块组合后的协作是否正常(如测试登录模块与数据库的交互)。• 单元测试:针对单个函数或模块的测试(如测试一个计算加法的函数)。• 系统测试:对整个系统进行全面测试,包括功能、性能、安全性等。
2025-04-21 16:26:21
392
原创 【软件工程】 适配器模式
适配器模式(Adapter Pattern)应运而生,它如同一个“接口转换器”,让原本无法协同工作的类能够一起合作,比如我们系统原来的日志功能需要改善,但是我们又不可能改变以前的一些代码,此时有效使用适配器模式就是一个好选择。适配器模式是一种结构型设计模式,其核心目的是将一个类的接口转换成客户端期望的另一种接口。它通过包装(Wrap)现有类的接口,解决因接口不兼容而无法复用代码的问题。• 类适配器:通过多重继承(或实现接口+继承)实现(需编程语言支持,如C++)。• 复杂度:过多适配器会增加代码维护难度。
2025-04-21 12:55:54
336
原创 【算法笔记】如何优雅的进行字符串操作
在编程竞赛(特别是CCCC天梯赛)中,字符串操作类题目往往看似简单却暗藏陷阱。本文将以Python、Java、C++ 三剑客为例,总结高频字符串操作的优雅实现方案,助你快速攻克字符串类难题。将字符串中第一个出现的子串A替换为子串B,若A不存在则保持原字符串。的结束索引是独占的(即包含a不包含b),与Python切片行为一致。最近的CCCC天梯赛又出了非常恶心的字符串题~一、子串替换:精准狙击第一个目标。二、删除操作:定点清除与精确爆破。四、字符串翻转:镜像世界的魔法。场景二:删除指定索引字符。
2025-04-20 13:39:31
320
原创 【算法笔记】整除与最大公约数(GCD)专题整理
每一步用上一步的余数表示当前余数。:均匀分配问题(如分糖、分饼干)。:密码学(如RSA中计算模逆元)。:所有性质与算法均基于整数运算,且。:通过余数递归缩小问题规模。
2025-04-18 18:06:55
946
原创 【软件工程】用飞书画各种图(流程图,架构图···)
笔者在做服务外包大赛的时候被文档内容的编写反复折磨,网上的工程图绘画工具要么是展示效果不佳,要么要收大几百的VIP费,最后发现飞书竟然可以直接绘画并插入示意图。
2025-04-18 17:38:47
1204
2
原创 【大厂笔试题】携程 2025.4.15
游游现在有一个公司,这个公司里有n个任务,每一个任务都有一个能力值和收益值,现在有m个工人,每一个工人都有一个能力值,对于每一个任务来说,只有这个人的能力值不低于该任务需要的能力值,才可以完成这个任务。输入描述第一行输入六个整数xA,yA,xB,yB,xC,yC(-100≤xA,yA,xB,yB,xC,yC≤100)代表△ABC的三个顶点。第二行输入六个整数xD,yD,xE,yE,xF,yF(一100≤xD,yD,xE,yE,xF,yF≤100)代表△DEF的三个顶点。时,您的答案都将被接受。
2025-04-18 14:57:49
420
原创 2025蓝桥杯省赛C++B组解题思路
经典DP,首先找到一个最大的区间,使得区间的最左边和最右边都有”#“。定义DP数组:dp[1][i]:表示第i列第1行有”#“,dp[2][i]表示第i列第2行有”#“,dp[3][i]表示第i列第1,2行都有”#",直接根据这些状态转移即可。给定,a,b,c,k,定义一次变换是同时进行a->(b+c)/2,b->(a+c)/2,c->(a+b)/2,问执行K次后a,b,c的值。4,有个2*n的网格,里面已经有一些网格是"#“,其它的是”.“,最少要把多少个”.“替换成”.“才能让所有”#“联通。
2025-04-12 13:00:23
1664
10
原创 Git合并中的祖先-后代关系:快进合并与非快进合并详解
Git 的合并策略体现了版本控制系统在处理复杂开发场景时的灵活性。理解祖先-后代关系不仅有助于把握合并的底层原理,还能帮助开发者根据实际需求选择最适合的合并方式。无论是快进合并带来的简洁历史,还是非快进合并留下的合并痕迹,都在各自的应用场景中发挥着重要作用。希望本文能够帮助你更好地理解并应用这些策略,使你的代码管理更高效、更具条理。
2025-04-05 16:20:05
722
原创 原型设计工具即时设计的简单使用攻略
是一款国产在线协同设计工具,支持从原型设计到开发交付的全流程,尤其擅长。其核心优势体现在:•:浏览器直接访问无需安装,中文界面友好•:内置3000+原型模板与组件库•:支持多人实时编辑与版本管理•:支持动态效果、智能动画等高级交互。
2025-04-05 15:52:04
717
原创 软件设计中的耦合与内聚
耦合和内聚是软件设计中相辅相成的两个重要概念。高内聚的模块通过明确定义的接口与外界交互,自然形成松散耦合的系统结构。这种设计不仅使代码更易于理解和维护,还能提高系统的灵活性和可扩展性。记住:好的软件设计不是追求完美的耦合和内聚,而是在特定上下文和约束条件下找到最合适的平衡点。随着经验的积累,你会逐渐培养出对这种平衡的直觉判断能力。
2025-04-02 16:34:38
605
1
原创 【算法笔记】大厂笔试/蓝桥杯/ICPC必学 根号分治(附板子)
根号分治是一种将问题按规模划分为不同子问题分别处理的算法策略。其核心思想是通过设定合理的阈值(通常为n\sqrt nn),将元素分为高频和低频两类,分别采用不同的处理方法,从而达到平衡时间复杂度的目的。根号分治算法通过将问题元素按规模分类,分别采用不同的处理策略,有效平衡了时间复杂度。在处理大规模图论问题时,该策略常能显著提升效率,避免暴力枚举带来的高开销。
2025-03-31 11:11:30
1024
原创 Spring AOP面向切面编程实现日志功能
里的方法的前置操作以及后置操作,无论是否有异常都会进行,无法控制中间方法的进行与否。如果只需要在目标方法执行前或后做一些操作,使用 @**Before **或 @我们创建以下类,就能用切面对user相关的功能进行权限控制。如果需要完全控制目标方法的执行,使用 @权限检查、性能监控、事务管理**等功能。可以进行** 参数校验、日志记录。注释的方法可以看作是。
2025-03-25 11:49:59
368
原创 用frp实现内网穿透
简单来说,就是让外部网络能够访问位于内网中的设备或服务。通常,内网设备由于缺乏公网IP,无法直接被外部访问。通过内网穿透技术,我们可以在内网和公网之间建立一条“隧道”,将内网服务暴露到外网,实现远程访问。FRP是一款高效、易用的内网穿透工具,支持多种协议,能够轻松将内网服务映射到公网,满足远程办公、设备控制、API调试等多种需求。首先下载适合自己操作系统的包,如果是linux系统可以使用docker。
2025-03-25 10:17:35
362
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人