- 博客(175)
- 问答 (1)
- 收藏
- 关注
原创 C++知识
std::map 大量插入慢,是因为 “红黑树的节点级操作 + 每次 log n 计算 + 频繁内存分配” 三者叠加;std::map 在“大量插入”场景下出现性能瓶颈,并不是因为它“不会用 CPU”,而是由它的底层数据结构(红黑树)和接口语义共同决定的。C++ 标准库从 C++11 开始明确规定:多个线程并发地对同一个 std::map 对象进行读写操作,是未定义行为(UB)——除非你自己加锁(如 std::mutex)。其实STL中的容器都是线程不安全的,如果想要线程安全的话,就得自己加锁。
2025-09-04 20:57:10
900
3
原创 【算法刷题】手撕
(最常见:LeetCode 240 变种:240. 搜索二维矩阵 II)1.判断有序二维数组中是否存在target。每行升序,但行与行之间可交叉 / 可重复。
2025-08-16 00:33:54
204
原创 计算机网络知识
20 kB/s 这个上限并不是“路由器里跑 TCP 协议”决定的,而是由人为策略(管制/整形)强加的一条速率阈值。如果只是简单地“超过 20 kB/s 就立即丢包/标记”,那就是 policing,效果同样是 20 kB/s 上限。任何时刻 bucket 里没有足够 token 时,多余的分组就被缓存或丢弃,于是宏观速率被钳在 20 kB/s。TCP 本身不会主动限速,它只是根据丢包/延迟信号调整拥塞窗口;20 kB/s 是人为给它的“天花板”。填充速率 = 20 kB/s。
2025-08-14 21:50:01
246
原创 操作系统知识
Linux:根据/etc/systemd/system/default.target启动服务(如sshd、crond)启动第一个用户空间进程:Linux执行/sbin/init(PID 1),Windows启动wininit.exe。内核加载:将操作系统内核(如Linux的vmlinuz或Windows的ntoskrnl.exe)加载到内存。Linux:启动X11/Wayland服务,加载桌面环境(如GNOME)登录验证:通过PAM(Linux)或LSA(Windows)验证用户凭据。
2025-08-13 17:16:45
430
原创 内存池项目问题
我的page cache是按照直接定址法设计的哈希桶结构,从1page 到 128 page 一共有128个桶,每个桶上面挂有和桶号相对应的挂有相同内存大小的span双向链表,比如,1号桶下挂的是span双向链表,每个链表节点指向的内存是1page,当第二层缓存central cache 向第三层缓存page cache申请内存时,其会优先找申请内存对应的桶号,如果该桶号下无内存,就依次向更大的桶号去找。若 x==0 返回 0。你的担心是合理的:如果直接跨线程操作 thread cache,是不安全的。
2025-08-13 17:08:30
653
原创 leetcode-hot100-1
本文总结了回溯算法的典型应用,包括电话号码字母组合、括号生成、组合总和和N皇后问题。通过递归和回溯的思想,系统地解决了这些经典问题:在字母组合中遍历数字对应的字符,在括号生成中控制左右括号数量,在组合总和中通过位置或个数枚举寻找解,在N皇后问题中检查行列和对角线冲突。所有解法都遵循"递归+回溯"的框架,通过深度优先搜索探索解空间,同时使用临时变量记录状态,并在回溯时恢复现场。代码实现简洁高效,展现了回溯算法在组合类和排列类问题中的强大解决能力。
2025-06-13 12:19:30
510
原创 二叉树基础OJ
本文分享了三个二叉树相关问题的解法:1)判断两棵树是否相同的递归解法;2)计算二叉树最大深度的两种方法(自底向上和自顶向下);3)判断一棵树是否为另一棵树的子树的两种解法(暴力匹配和高度优化匹配)。所有解法均采用递归实现,代码简洁高效,并附有时间复杂度分析。对于子树问题,暴力解法的时间复杂度为O(n*min(n,m)),高度优化方法则进一步提升了效率。
2025-06-13 12:16:34
420
原创 C语言基础OJ
摘要 本文介绍LeetCode"检测大写字母"问题的解决方案。题目要求判断单词是否满足全部大写、全部小写或首字母大写三种大写字母使用规则。提供两种编程语言实现:C语言版本通过遍历统计大写字母数量,判断是否符合三种情况之一;C++版本则使用ranges::count_if算法简化大写字母计数。两种实现的核心逻辑相同,通过统计大写字母数量并验证其是否符合特定条件来解决问题。该算法的时间复杂度为O(n),空间复杂度为O(1)。
2025-06-13 12:15:51
289
原创 【标准项目】高并发内存池
本文介绍了一个高并发内存池项目,其原型是Google开源项目tcmalloc(Thread-Caching Malloc)。该项目简化了tcmalloc核心框架,实现了一个高效的多线程内存管理工具,用于替代传统的内存分配函数(malloc/free)。文章首先介绍了内存池的基本概念、池化技术及其解决的问题(效率和内存碎片),并对比了malloc的实现机制。随后详细讲解了定长内存池的设计与实现,通过测试对比展示了其在特定场景下的性能优势。最后介绍了高并发内存池的整体框架设计,强调其针对多线程环境的优化特性。该
2025-06-05 14:35:17
1179
原创 【C++项目】负载均衡在线OJ系统-2
本文介绍了OJ在线判题系统的服务器模块设计,采用MVC架构实现题目管理和判题功能。 MVC架构设计: Model(oj_model):负责题库数据交互,支持文件和MySQL两种存储方式 View(oj_view):处理网页渲染,提供首页、题目列表和单题页面 Controller(oj_control):核心业务逻辑,通过路由分发请求 路由功能实现: 使用cpp-httplib搭建服务器 提供3个核心接口: /all_questions 获取题目列表 /question/(\d+) 获取单个题目 /judge
2025-06-05 12:57:08
1142
原创 【C++项目】负载均衡在线OJ系统-1
本文介绍了一个基于C++的负载均衡在线OJ系统设计与实现。项目采用前后端分离架构,前端通过HTTP请求与后端交互,后端采用负载均衡策略动态选择编译服务主机。技术栈包括C++ STL、cpp-httplib、jsoncpp、Boost等库,实现了代码编译、运行、结果返回等功能。系统结构分为oj_server(前端交互)、compiler_server(编译服务)和common(公共模块)三部分。文章详细阐述了编译功能的设计思路,包括临时文件管理、错误处理和日志系统等关键模块的实现方法。
2025-06-03 20:08:14
1471
原创 【递归、搜索与回溯】专题二、二叉树中的深搜
本文摘要了五道二叉树相关算法题的解题思路和代码实现: 计算布尔二叉树值 - 递归判断叶子节点或按运算符处理左右子树 求根到叶节点数字之和 - DFS遍历累积路径数字并求和 二叉树剪枝 - 后序递归移除全0子树 验证二叉搜索树 - 中序遍历检查严格递增性 二叉搜索树第K小元素 - 中序遍历计数获取目标节点 各题均采用递归解法,处理节点时分别运用了前序、后序和中序遍历策略,代码简洁高效。二叉搜索树相关问题利用了其有序特性,通过中序遍历解决验证和查找问题。
2025-06-01 01:45:23
607
原创 【递归、搜索与回溯算法】专题一 递归
本文介绍了递归、搜索与回溯算法在编程问题中的应用。主要内容包括:1)汉诺塔问题的递归解法,通过移动盘子的三步策略实现;2)合并两个有序链表的递归方法,比较节点值并递归处理剩余部分;3)反转链表的递归实现,通过改变指针指向完成反转;4)两两交换链表节点的递归和迭代两种解法;5)快速幂算法求幂的递归实现,通过分治法将时间复杂度优化至O(logn)。这些案例展示了递归思想在解决分治、链表和数学问题中的灵活运用。
2025-05-27 14:49:12
525
原创 【算法专题十七】BFS解决拓扑排序
摘要 本文介绍了拓扑排序及其在LeetCode题目中的应用。主要内容包括:1) 拓扑排序的基本概念;2) 课程表问题及其解法(判断课程安排是否合理);3) 课程表Ⅱ问题(输出合理的课程学习顺序);4) 火星词典问题(根据单词顺序推导字母顺序)。每个问题都给出了详细思路和C++代码实现,通过构建有向图并使用拓扑排序算法来检测环并确定顺序。其中课程表类问题使用入度统计和BFS方法,火星词典问题则通过比较相邻单词建立字母间的相对顺序关系。
2025-05-26 13:40:03
480
原创 【算法专题十六】多源BFS
本文主要介绍了三个与图论相关的算法问题及其解决方案。首先,多源最短路问题通过广度优先搜索(BFS)解决,适用于计算矩阵中每个点到最近零点的距离。其次,01矩阵问题同样使用BFS,通过从零点出发逐层扩展,计算每个点的最短距离。最后,飞地的数量问题通过BFS标记边界可达的点,统计无法到达边界的陆地数量。每个问题都提供了详细的思路和代码实现,展示了BFS在图论问题中的广泛应用。
2025-05-23 16:12:37
464
原创 【算法专题十五】BFS解决最短路问题
本文介绍了三个基于广度优先搜索(BFS)的算法问题:迷宫中离入口最近的出口、最小基因变化和单词接龙。对于迷宫问题,通过BFS从入口开始搜索,找到最近的出口。最小基因变化问题则通过BFS在基因库中寻找从起始基因到目标基因的最少变化次数。单词接龙问题同样使用BFS,在单词列表中寻找从起始单词到目标单词的最短转换路径。每个问题都提供了详细的思路和代码实现,展示了BFS在解决最短路径问题中的高效性。
2025-05-21 16:49:19
598
原创 【算法专题十三】优先级队列
本文介绍了LeetCode中的四个与堆相关的算法题目及其解决方案。首先,1046.最后一块石头重量通过大根堆模拟石头碰撞过程,最终返回剩余石头的重量。其次,703.数据流中的第K大元素使用小根堆维护数据流中的前K大元素,确保每次查询时能快速返回第K大值。接着,692.前K个高频单词通过哈希表统计单词频率,并结合自定义比较器的小根堆,返回频率最高的前K个单词。最后,数据流的中位数通过大根堆和小根堆的平衡维护,确保能够快速获取数据流的中位数。每个问题都提供了详细的思路和代码实现,展示了堆在解决复杂问题中的高效性
2025-05-18 15:18:12
508
原创 【算法专题十二】队列+宽搜
本文介绍了四道LeetCode题目及其解法,主要涉及二叉树的层序遍历及其变种。第一题是N叉树的层序遍历,通过队列实现逐层遍历并记录每层节点值。第二题是二叉树的锯齿形层序遍历,在层序遍历的基础上,通过标志位控制每层节点的输出顺序。第三题是求二叉树的最大宽度,通过给节点编号并计算每层最左和最右节点的编号差来得到宽度。第四题是在每层中找最大值,通过层序遍历逐层比较节点值并记录最大值。每道题目均提供了详细的思路和C++代码实现,帮助理解二叉树的遍历及其应用。
2025-05-16 15:16:36
462
原创 【项目设计】MySQL 连接池的设计
连接池是一个数据库连接的管理工具,旨在优化数据库连接的开启、关闭和复用,从而提高数据库访问性能和系统的并发处理能力。连接池在应用程序启动时预先创建一定数量的数据库连接,并将它们放入一个池中。当应用程序需要连接数据库时,从连接池中获取一个空闲的连接,使用完毕后再将连接归还给连接池,以便其他请求可以复用这个连接。这样一来,就避免了频繁地开启和关闭数据库连接的开销。
2025-05-02 13:08:53
932
原创 【MySQL】使用C语言连接
要使用库,必须先进行初始化。mysql_init 函数会给我们返回一个 MYSQL 句柄,我们后续的操作都需要通过这个 MYSQL 句柄来完成。本篇博客主要讲解了 mysql 连接库的下载和安装、mysql 接口介绍以及实现了简易版的 mysql 客户端等等。以上就是本篇博客的全部内容,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。
2025-04-30 09:50:55
1383
原创 【MySQL】用户管理
本篇博客主要讲解了如何查看用户信息、创建用户、删除用户、修改用户密码、给用户授权、回收权限等等。以上就是本篇博客的全部内容,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。
2025-04-21 10:46:07
1364
原创 【MySQL】视图特性
本篇博客主要讲解了什么是视图、视图的基本使用以及视图规则和限制等等。以上就是本篇博客的全部内容,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。
2025-04-18 20:32:30
313
原创 【MySQL】事务管理
事务就是一组 DML 语句组成,这些语句在逻辑上存在相关性,这一组 DML 语句要么全部成功,要么全部失败,是一个整体。MySQL 提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。事务就是要做的或所做的事情,主要用于处理操作量大,复杂度高的数据。
2025-04-18 20:22:58
1232
原创 【MySQL】索引特性
一张张不仅仅只有一个索引结构。当我们建立表结构的时候,如果有主见,那么 MySQL 会为我们构建主键索引。主键索引分为聚簇索引和非聚簇索引。MyISAM 存储引擎构建主键索引或者普通索引就是构建 B+ 树,叶子节点保存数据的记录的地址即可。InnoDB 存储引擎构建的主键索引是聚簇索引,而普通索引就是根据普通列构建 B+ 树,然后叶子节点上保存的是该普通数据对应的主键值。后续查找的时候,可以通过回表查询的方式进行查找。需要回表查询并不意味着效率就会变低。
2025-04-16 23:57:33
1101
原创 【MySQL】内外连接
本篇博客主要讲解了表的连接,表的连接是一种将多个表中的数据联合在一起的操作,通过连接条件来关联这些表。如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。
2025-04-13 16:43:16
547
原创 【MySQL】复合查询
本篇博客主要讲解了多表查询、自连接和子查询等等。以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。
2025-04-12 13:14:40
996
原创 【MySQL】内置函数
数字能够直接使用二进制来表示,不需要再进行编码,所以数字的 charset 为 binary,而字符串可能需要进行编码,其 charset 与配置文件中的 charset 和建表时指定的 charset 有关。substring 的第一个参数是要截取的字符串,第二个参数是截取的起始位置,第三个参数是截取多少个字符。当出现乱码问题时,可能是因为存储数据的编码和取出数据的编码是不一样的。数据库的字符串下标是从 1 开始的,原因是使用数据库的人可能不是程序员,只是普通用户。以首字母大写的方式显示所有员工的姓名。
2025-04-12 01:31:23
751
原创 【数据结构与算法】跳表
skiplist 本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为 key 或者 key / value 的查找模型。那么相比而言它的优势是什么的呢?这么等我们学习完它的细节实现,我们再来对比。skiplist是由 William Pugh 发明的,最早出现于他在 1990 年发表的论文《Skip Lists: A Probabilistic Alternative to Balanced Trees》。skiplist,顾名思义,首先它是一个 list。
2025-03-20 22:43:48
1064
原创 【Linux】Reactor模式
Reactor 模式是一种事件驱动的设计模式,是将就绪的事件交给特定的事件处理器,用于实现高效的事件驱动程序。它主要用于网络编程中,用于处理大量的并发连接。本篇博客主要讲解了什么是 Reactor 模式、Reactor 模式的组件、Reactor 模式的工作流程以及基于 Reactor 模式的 TCP 服务器等等。以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!💖💝❣️。
2025-03-20 22:08:29
1018
空空如也
微机原理,,,,,,
2021-05-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人