- 博客(76)
- 收藏
- 关注
原创 老鸟分享实现C++ 多线程同步之条件变量(condition_variable)实战
本文深入探讨了C++中条件变量(condition_variable)在多线程同步中的应用。条件变量作为线程同步机制,允许线程在条件不满足时等待而非忙等待,有效节省CPU资源。文章通过两个典型场景展示其用法:1)生产者-消费者模型中通过not_full/not_empty条件实现缓冲区同步;2)多线程任务调度中按顺序执行任务。特别强调了使用时的注意事项:防范虚假唤醒、正确使用互斥锁以及性能优化。最后指出多线程编程的复杂性,鼓励开发者持续学习实践。全文以技术解析结合代码实例,帮助读者掌握这一关键同步技术。
2026-06-21 15:24:22
170
原创 老鸟实战解析【C++ STL 篇 (十三)】无序关联容器 unordered_set /unordered_map
本文深入解析了C++ STL中的无序关联容器unordered_set和unordered_map。它们基于哈希表实现,提供平均O(1)时间复杂度的插入、查找和删除操作。unordered_set存储唯一元素,适用于快速查找和去重;unordered_map存储键值对,适合快速查找对应值。文章详细介绍了它们的基本概念、头文件、常用操作(插入、查找、删除)以及应用场景(如去重、词频统计),并分析了性能特点(时间/空间复杂度)和注意事项(哈希函数、冲突处理)。与有序关联容器相比,它们牺牲元素有序性换取更高效率,
2026-06-19 12:53:12
236
原创 深入分析C++ map & set 实用全解:从基础用法到算法题优化,一篇搞定
全文在学习 C++ 的过程中,map 和 set 这两个容器真的是又重要又让人有点头大🤯!今天我就来给大家好好唠唠,从基础用法到算法题优化,一篇帮你搞定它们!首先说说基础用法。map 是一种关联容器,它存储的是键值对,就像一个超级智能的字典,可以通过键快速找到对应的值。再来说说在算法题中的优化🤔。很多时候,使用 map 和 set 可以大大提高算法的效率。比如在查找元素的时候,map 和 set 的查找时间复杂度都是 O (log n),比普通的数组查找快多了!举个例子,在一些需要统计元素出
2026-06-16 22:57:24
191
原创 深入分享如何实现【C++ 模版】泛型编程:代码复用的终极利器
本文深入介绍了C++模板作为泛型编程核心机制的重要作用。主要内容包括:1. 泛型编程概念及C++模板定义,展示了函数模板的基本语法和使用方法;2. 函数模板的使用技巧,包括定义调用、重载和特化;3. 类模板的定义、实例化、成员函数定义和特化;4. 模板的优势(代码复用、类型安全、性能优化)和典型应用场景(数据结构、算法库等)。文章通过丰富代码示例,系统讲解了如何利用模板实现代码复用,提高开发效率和程序性能,是C++开发者掌握泛型编程的实用指南。
2026-06-16 22:34:17
216
原创 C++ 二叉搜索树 (BST) 超全详解实战实现:核心原理、完整实现、性能分析与使用场景
本文全面介绍了C++中的二叉搜索树(BST)数据结构。首先解释了BST的核心特性:左子树节点值小于父节点,右子树节点值大于父节点,这种结构使得查找、插入和删除操作的平均时间复杂度达到O(logn)。文章详细展示了BST的C++实现,包括节点结构定义、递归插入算法、查找操作以及三种情况的删除操作(无子节点、单子节点和双子节点)。同时分析了BST的性能特点,指出其可能退化为链表的最坏情况,并列举了BST在数据查找、排序和范围查询等场景的应用价值。最后强调在实际应用中需注意平衡性问题,可通过平衡二叉树等改进结构来
2026-06-16 22:23:10
225
原创 分享如何实现Qt 高级开发 015:C++ 原生实现信号槽机制
本文介绍了如何在C++中不依赖Qt框架原生实现信号槽机制。通过使用std::function和模板类,作者构建了Signal类来处理信号连接、发射和断开操作,并支持普通函数和成员函数作为槽。文章还讨论了线程安全和性能优化方案,包括使用互斥锁保护共享资源。这种实现方式保持了信号槽松耦合的特性,同时避免了Qt依赖,为C++开发者提供了一种轻量级的事件驱动编程方案。
2026-06-16 20:19:21
255
原创 Bootstrap和OpenLayers结合开发的示例
OpenLayers 地图在 Bootstrap 中易出现变形、白屏、遮挡和卡顿问题,需通过重置 padding/margin、监听 modal 显示事件、调整 z-index、添加 will-change 和手动调用 updateSize() 等方式解决。OpenLayers 地图容器被 Bootstrap 的 col- 类撑开后变形Bootstrap 的栅格系统默认给 .col- 元素加了 padding 和 box-sizing: border-box,但 OpenLayers 的 map 容器依赖精
2026-05-18 22:57:32
248
原创 在 Go 中声明包级全局 Map 的正确方法
在 Go 语言中,包级(全局)变量必须使用完整的变量声明语法,不能使用短变量声明 := —— 因为 := 仅限函数内部使用,其本质是“声明并初始化”,而包作用域只允许声明(var)、常量(const)或类型(type)定义。合法:包级全局 map,使用 var + makevar globalMap = make(map[string]string)func main() { globalMap["a"] = "A" fmt.Println(globalMap) // map[a:A]}?
2026-05-17 19:35:57
224
原创 使用 curl 调用 Go 标准库 RPC 服务(JSON-RPC 协议详解)
go 的 `net/rpc` 默认基于自定义二进制协议,不支持直接通过 http curl 调用;但启用 `rpc/jsonrpc` 后可暴露 json-rpc 1.0 接口,此时可通过 curl 发送标准 json-rpc 请求与 go rpc 服务交互。正确路径是切换至 net/rpc/jsonrpc 子包——它在保持 net/rpc 服务逻辑不变的前提下,将传输层封装为 JSON-RPC 1.0 格式,并通过标准 HTTP(通常是 POST)承载。
2026-05-16 00:22:10
247
原创 如何管理应用锁_DBMS_LOCK申请自定义锁控制并发逻辑
分配锁:先调 DBMS_LOCK.ALLOCATE_UNIQUE(lockname => 'my_lock', lockhandle => l_handle),拿到 l_handle 后再传给 REQUEST申请锁:用 DBMS_LOCK.REQUEST(lockhandle => l_handle, timeout => 3, release_on_commit => FALSE);另外,自治事务(AUTONOMOUS_TRANSACTION)里调用 DBMS_LOCK 会导致锁作用域错乱,绝对避免。
2026-05-16 00:21:02
161
原创 CSS 悬停箭头跳动问题的根源与稳定解决方案
按钮悬停时通过 :after 伪元素显示 font awesome 箭头,但鼠标移出瞬间箭头会短暂下移再消失——这是因 :hover 中意外触发 display: flex 导致布局重排所致,只需统一基础态与悬停态的 display 行为并强化垂直对齐即可彻底消除抖动。当 hover 时突然变为 flex,浏览器需重新计算盒模型尺寸与对齐逻辑,而 :after 伪元素在 position: relative 下仍受行内布局影响,造成垂直方向上的瞬时位移(即“下跳”)。
2026-05-15 22:52:52
207
原创 c++ circle元编程如何使用
常见错误是把元函数当普通函数写,比如漏掉 meta 关键字,或在非 meta 上下文里调用 meta 函数。),只能操作类型、常量表达式和 AST 节点参数必须用 meta 类型标注:meta int、meta type、meta expr,不能只写 int返回值也需显式声明为 meta 类型,比如 meta type foo(meta type t)示例:一个最简元函数,把类型加个 const 修饰:meta type add_const(meta type t) { return const t;
2026-05-15 22:49:19
201
原创 如何管理多个监听器_listener.ora中非默认端口配置实战
listener.ora 里配多个监听器,端口冲突了怎么办监听器起不来,lsnrctl status 报 tns-12541: no listener 或 tns-12560: tns:protocol adapter error,大概率是端口被占或配置语法错。如果用了别名(如 LISTENER_1522),确保 TNSNAMES.ORA 里有对应条目,且 LOCAL_LISTENER 值是那个别名字符串,不是地址本身REMOTE_LISTENER 不影响单机注册,别乱设;
2026-05-15 22:48:07
250
原创 c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
执行完 p 变成 "a.log",但磁盘上仍是 a.txt正确做法:必须配合 fs::rename 才能真正改后缀注意 replace_extension 会先移除原有扩展名(包括点),再拼接新扩展名;传入空字符串或 "" 会删掉扩展名,传入 "log" 和 ".log" 效果一样批量重命名文件后缀的最小可靠写法核心就三步:遍历、构造新路径、调用 rename。
2026-05-13 20:05:50
192
原创 如何为用户分配Event调度器权限_EVENT权限的界面勾选方法.txt
语法:arr.flat([depth]),depth 默认为 1,即只展开一层;[1, [2, 3], [4, [5]]].flat() → [1, 2, 3, 4, [5]](只展一层)[1, [2, 3], [4, [5]]].flat(2) → [1, 2, 3, 4, 5](展两层)[1, [2, [3, [4]]]].flat(Infinity) → [1, 2, 3, 4]注意:flat() 会跳过空槽(empty slots),比如 [1, , 3].flat() 得到 [1, 3];
2026-05-13 20:04:37
210
原创 Go 中使用 go-json-rest 时调用 Write 方法的正确方式
rest.ResponseWriter 是 go-json-rest 对标准 net/http.ResponseWriter 的封装接口,其设计目标是增强 REST 语义支持(如内置 WriteJson、EncodeJson、WriteHeader 等方法),但刻意未直接暴露底层 http.ResponseWriter 的 Write([]byte) 和 WriteString(string) 等原始写入方法。若需底层字节流控制(例如写入自定义二进制内容、流式响应或兼容遗留逻辑),则必须显式进行类型断言。
2026-05-13 20:03:23
223
原创 Redis如何监控系统QPS的变化趋势
GridFS不支持全局容量配额,需在应用层实现配额校验:上传前聚合查询fs.files中指定用户的length总和,判断是否超限,且须防范并发写入导致的超限问题。GridFS 本身不提供全局容量配额机制MongoDB 的 GridFS 是一个文件分片存储规范,不是带配额管理的云盘服务。它既没有 maxTotalSize 配置项,也不支持在 fs.files 或 fs.chunks 上自动拒绝写入——只要数据库有空间、用户有写权限,上传就会成功。必须在应用层实现容量校验逻辑你得自己查、自己算、自己拦。
2026-05-13 20:02:09
176
原创 Golang bcrypt如何加密密码_Golang密码加密教程【收藏】
cost建议12左右平衡安全与性能;每次调用 bcrypt.GenerateFromPassword 输出都不同,哪怕明文相同——因为内部自动生成随机盐哈希结果字符串(如 $2a$10$...)本身已编码了版本、成本因子、盐和密文,无需额外存盐字段若误用 crypto/aes “加密密码”,等于把锁芯和钥匙一起焊死在门上,运维或审计时根本没法安全轮换密钥bcrypt.GenerateFromPassword 的 cost 参数怎么选cost 决定计算强度:值越大,哈希越慢,爆破越难,但登录延迟也越高。
2026-05-13 20:00:54
173
原创 SQL统计分组内的所有数据唯一值_使用DISTINCT汇总
这时 COUNT(DISTINCT ...) 就不够用了。实操建议:PostgreSQL 用 STRING_AGG(DISTINCT col, ', '),DISTINCT 关键字必须紧贴字段名,不能写成 STRING_AGG(col, ', ') DISTINCTMySQL 用 GROUP_CONCAT(DISTINCT col SEPARATOR ', '),注意默认长度限制是 1024,超长会被截断,需提前设 SET SESSION group_concat_max_len = 1000000;
2026-05-11 21:32:50
163
原创 如何查看Oracle版本信息_v$version视图与opatch lsinventory
v$version显示数据库启动时加载的内核版本,需DBA权限或SELECT_CATALOG_ROLE;得看安装目录下的 inventory/ContentsXML/comps.xml 或 $ORACLE_HOME/inventory/patches/用 opatch lsinventory 查已安装的补丁清单,需先设置好环境变量opatch 是 Oracle 提供的补丁管理工具,lsinventory 子命令列出当前 $ORACLE_HOME 下所有已打补丁(包括 RU、RUR、one-off)。
2026-05-11 21:31:37
234
原创 c++如何通过文件映射mmap在多进程间实现高性能数据共享【进阶】
btn: ['是', '否', '取消'] 是合法配置,Layui 会自动映射:第一个按钮走 yes 回调(或第一个匿名函数),第二个走 btn2,第三个走 btn3如果只写两个回调函数,第三个按钮点击后既不触发逻辑,也不关闭弹窗——这是最常被忽略的坑推荐统一用命名回调写法,语义清晰且不易漏写:yes、btn2、btn3,避免依赖函数顺序三个按钮的回调函数怎么写才安全每个回调都必须接收 index 参数,并手动调用 layer.close(index),否则弹窗残留、内存泄漏、后续弹窗错位都可能出现。
2026-05-11 21:30:25
254
原创 安装宝塔面板提示端口被占用_查找并终止占用进程
重点看 COMMAND 列和工作目录:看到 nginx 或 httpd:说明已有 Web 服务运行,得停掉或改宝塔端口看到 python3 或 node:很可能是你之前跑的开发服务没关,ps aux | grep python 再确认看到 bt 或 panel:说明上次安装失败没清理干净,ps aux | grep panel 找全 PID杀进程要小心——别误杀系统关键服务直接 kill -9 很快,但可能留下锁文件或未释放 socket,下次启动还报错。
2026-05-11 21:29:12
255
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅