- 博客(208)
- 收藏
- 关注
原创 agent-browser skill使用方法
摘要:无头浏览器是一种无界面但功能完整的浏览器,专为程序自动化设计。安装agent-browser后,可实现网页截图、动态内容抓取等功能。其核心应用场景包括:1)前端开发-实时查看渲染效果并调试;2)自动化测试-替代手动操作验证功能;3)动态页面数据抓取-突破API限制;4)部署验证-自动检查生产环境;5)竞品分析-自动采集对比数据;6)表单自动化-批量处理重复操作。特别适用于测试用例的自动化验证,显著提升开发效率。
2026-03-31 18:55:54
3803
原创 go第一个工程安装过程与问题汇总
Go(官方插件) → golang.go3.完成上述步骤后,还需要安装go的工具链,安装方法如下所示:Ctrl + Shift + P → Go: Install/Update Tools → 全选安装为什么需要安装工具链呢?请参考第二章节的内容。4.至于创建go工程,我不太擅长,因为vscode的创建工程需要写配置文件(json格式),内部包含很多关键字,我是用claude code帮我生成的。
2026-03-26 17:00:29
451
原创 QEventLoop事件循环详解
本文详细介绍了Qt框架中的事件循环机制及其应用。主要内容包括:1. QEventLoop作为Qt异步机制的核心引擎,负责事件分发处理;2. 线程与事件循环的关系,包括主线程默认启动事件循环、子线程需手动创建;3. 事件投递机制,特别是跨线程信号槽通信的实现原理;4. 对象线程亲和性及其对事件处理的影响;5. 不同场景下事件循环的使用规则,如子线程接收信号或使用定时器时必须创建事件循环;6. 跨线程信号从发出到执行的完整路径分析。文章通过代码示例详细说明了事件循环在Qt多线程编程中的关键作用和使用方法。
2026-03-13 16:34:05
404
原创 协程的基本介绍
摘要:协程是一种用户态轻量级并发机制,通过挂起(suspend)和恢复(resume)实现协作式多任务。相比线程,协程切换无需内核介入,仅需保存少量寄存器,开销低至10-100ns(比线程快100倍)。协程特别适合IO密集型任务,一个线程可运行多个协程,极大提升并发性能。核心概念包括:1)主动让出控制权;2)基于事件循环;3)async/await语法实现异步编程。Python通过async def定义协程函数,await挂起协程,async with/for支持异步上下文管理和迭代。协程解决了线程在IO并
2026-03-13 15:10:30
434
原创 用户态和内核态的区别
本文详细解析了用户态与内核态的本质区别及其切换机制。内核态是CPU的最高权限状态(Ring 0),能访问所有资源;用户态(Ring 3)则受限。系统调用通过syscall指令触发硬件级切换:CPU自动保存现场、修改权限级别并跳转至内核处理程序。内核完成操作后,通过sysretq指令恢复用户态执行。整个过程涉及寄存器保存、权限切换、内存隔离等关键步骤,确保了系统安全性和稳定性。
2026-03-13 14:03:36
440
原创 linux下快速的查看一个进程下子进程及线程
在Linux系统中查看多进程和多线程信息,可以使用以下命令组合:1)ps -eLf显示所有进程和线程;2)pstree -p <pid>以树状结构展示指定进程的子进程关系;3)top -p pid后按H键查看线程详细信息。这套命令组合能全面监控进程树结构和线程运行状态,适用于排查多进程多线程应用的性能问题。
2025-11-21 17:52:33
193
原创 linux环境问题
摘要:在Ubuntu系统中,通过sudo执行程序时出现无法找到动态库libssl.so.3的问题。虽然使用普通用户通过export LD_LIBRARY_PATH添加路径后,ldd命令能正确识别依赖项,但sudo执行仍报错。经分析发现,sudo不会继承普通用户的环境变量。使用sudo ldd验证发现确实无法找到库文件。最终通过sudo su切换到root用户解决,说明sudo执行程序时需注意环境变量传递问题。
2025-08-20 18:23:49
307
原创 容器emplace_back与push_back的区别
C++11中emplace_back相比push_back效率更高,它直接在容器末尾构造对象,省去了临时对象的创建和拷贝/移动过程。对于复杂类型对象,emplace_back可直接传入构造参数,而push_back需要先构造临时对象再拷贝。代码示例显示,push_back可能触发拷贝或移动构造,而emplace_back只调用一次构造函数。建议优先使用emplace_back以获得更好性能和更简洁语法。
2025-06-30 10:05:16
407
原创 std::packaged_task特性详解
摘要: C++11引入的std::packaged_task是一个包装器,用于封装可调用对象(函数、lambda等)并与std::promise/std::future机制结合实现异步任务执行和结果获取。其核心功能包括:通过get_future()获取关联的future对象,operator()执行封装的任务,valid()检查任务状态,以及reset()重置任务状态。典型实现使用shared_ptr管理任务生命周期,通过promise存储执行结果或异常。应用场景包括线程池任务封装、异步处理、延迟执行和异常
2025-06-27 17:10:46
790
原创 if/switch语句初始化功能
这个特性是在c++17版本引入的,在这之前是不允许在if语句或者switch语句中使用赋值语句,不仅仅是if语句和switch语句,包括lambda表达式在c++17版本也支持类在捕获表达式中支持赋值操作。通过上面的基本语法可以看到在c++17之前value的获取必须在if之前完成,如果将像c++17版本的写法,编译器会报错。
2025-04-18 17:35:26
287
原创 RAII资源管理理解
RAII (Resource Acquisition Is Initialization) 是一种 C++ 编程范式,这不是一个语法特性,而是一种处理方式。怎么理解RAII呢?前面说了这不是一种库特性,更像是一种约定,一种管理资源的方式,c++标准库某些库特性提供了RAII资源给管理的特性,用户自己设计的类型也可以按照RAII的思想进行设计。
2025-04-18 17:16:17
705
原创 图算法之Floyd算法详解
Floyd算法,中文名称弗洛伊德算法,这是一个图算法,用于求解图中每对顶点之间的最短路径问题。这是一个经典的动态规划算法,。
2025-04-16 16:56:43
1301
原创 非类型模板参数详解
非类型模板参数(Non-type template parameters),顾名思义在模板中这个参数不是表示一个类型,而是表示一个值,它必须是编译时常量。如上所示,T作为模板参数表示一个类型,而N作为一个模板参数,表示的并不是一个类型,而是一个数值。从上面的例子可以看到非类型模板参数N作为一个数值,供模板参数使用。非类型模板参数在c++98就已经引入了,只是我们平时的使用中可能对模板参数是一个类型这种形似见的比较多,所以对非类型模板参数有所忽略。
2025-04-14 17:28:35
594
原创 模板参数自动推导
c++17版本引入了模板参数类型自动推导功能,在此之前的c++版本使用模版必须显式的指定模板的参数,到了c++17版本可以根据输入的参数自动推导模板参数的类型。注意,模板参数自动推导功能不能自动推导默认构造函数,因为默认构造函数的定义不会显式的输入任何参数,编译器无法推导。
2025-04-14 09:56:38
355
原创 特征金字塔网络(FPN)详解
特征金字塔网络是是一种多尺度特征表示方法,用于解决目标检测、图像分割等任务中对不同尺寸的目标的检测问题。特征金字塔网络会有多个尺度的特征图输出,每个大尺度的特征图都包含小尺度特征图的信息,进而将小尺度特征图中的信息融合到大尺度的特征图中,这样在大尺度中也会包含只有小尺度特征图的语义信息。特征金字塔网络会有多个输出,每个输出的尺度各不相同,但是通道数相同自顶向下是只从小尺度特征图向大尺度特征图方向传递信息自底向上路径,它的意思是从大尺度特征图向小尺度方向的变化通过横向连接特征融合实现了细节和语义的融合。
2025-04-03 18:02:58
2089
原创 空间信息、通道数、大/小尺度、语义理解详解
空间信息指特征图中像素的位置关系和局部结构信息,包括物体的形状、纹理、边缘等空间特征。空间信息可以理解图像中物体的形状、纹理、边缘、相对位置等空间特征。- 尺寸↓ → 通道数↑- 空间精确度↓ → 语义信息↑尺度越小,一般情况下通道数会越多,尤其是在计算机视觉处理中空间信息细节越少,则会换来语义信息的不断增加如果需要对物体进行精确的定位?保留更多的空间信息如果需要语义理解?增加通道数和深度如果需要多尺度检测?使用特征金字塔。
2025-04-03 11:10:03
1303
原创 std::transform详解
std::transform是c++98引入的特性,这一个转换操作,它将输入范围内的每个元素通过指定的操作转换为新的值。在c++17版本对该特性引入了新的变化,即支持指定执行策略(并行执行、串行执行等),但是总体功能为发生变化。
2025-03-26 15:52:34
758
原创 std::reduce详解
reuduce的含义是规约,即将一系列元素通过某种操作组合成单个结果的过程。c++17引入了std::reduce函数。std::reduce与std::accumulate类似,不同的是std::reduce采用的并行方式进行运算,所谓并行就是在多个线程同时进行运算得到的结果的过程;std::accumulate是串行方式进行得到一个累积和。所以从这个角度来看,当数据量比较小时优先采用std::accumulate完成求和运算。当数据量比较大时,推荐采用std::reduce来完成计算。
2025-03-26 15:18:46
1417
原创 std::clamp详解
/ 使用大于比较器(降序)std::cout << "使用greater比较器: " << value << std::endl;//输出为5// 自定义比较函数std::cout << "使用自定义比较器: " << abs_value << std::endl;//输出为10那如果使用了自定义比较器,就像上面的例子,那么clamp的比较逻辑是什么呢?请看下面的介绍。return v;结合上面的介绍,可以得到上面的例子输出分别为5和10.
2025-03-25 16:00:40
970
原创 std::sample详解
从一个大的数据集中采样部分数据集作为训练数据集,这一般用于神经网络训练的场景随机测试用例,即从一个测试用例集中随机的抽取一个或者多个测试用例。
2025-03-25 14:52:33
743
原创 std::filesystem详解
c++17引入了std::filesystem库,这是一个强大的文件系统操作工具,可以获取文件和目录的各种信息(文件名称、后缀、类型、大小,遍历目录等)。
2025-03-17 15:08:35
1124
原创 std::invoke详解
std::invoke表示函数调用:只要调用std::invoke,且执行了这个语句,那么就相当于调用了传入的函数对象std::invoke的含义传入一个函数对象及这个函数对象的参数,然后通过std::invoke完成这个函数的调用std::invoke可以实现对函数对象的调用,达到与直接调用函数相同的效果如果要实现类似回调系统、事件系统类似的功能,需要集合模板来实现。
2025-03-14 15:32:10
1109
原创 std::string_view详解
c++17版本引入了std::string_view特性,这是一个轻量级的字符串视图,提供了一个字符窜的只读视图,而不需要进行内存和复制。
2025-03-13 18:19:59
831
2
原创 std::optional详解
c++17版本引入了std::optional特性,这一个类模板,基本的使用方法如下:这个新特性的含义是利用std::optional<T>创建的某个类型的对象,这个对象存储某个类型的值,这个值可能存在,也可能不存在。
2025-03-09 20:39:05
420
原创 快速生成viso流程图图片形式
我们要善于利用大模型提高我们的效率这个方案的缺点是生成的是图片,应该还有其他可以直接导入PlantUml语言的软件,我这里没有寻找,如果大家找到了,请放到我的留言区,不胜感激。
2025-03-05 16:59:41
4995
原创 智能指针之std::shared_ptr<T>详解
std::shared_ptr对象是需要额外占用内存空间的,对象大小一般为2个指针变量的长度shared_ptr对象包含的是两个指针变量当shard_ptr对象数据库块指针的引用变量变为0时,自动触发ptr指向的数据块的内存释放。
2025-03-04 15:24:37
1549
原创 左值引用与指针的区别
很多朋友遇到过这个问题:左值引用与指针有哪些区别?脑子里闪过很多答案,但大部分都是各自的定义,真要说他们两个有什么区别,有的时候还这是说不上来。本文针对这个问题进行归纳总结,希望对大家有所帮助。
2025-03-03 16:11:39
473
原创 c++之移动构造函数或者移动赋值运算符的作用
前面的文章中有的涉及到了移动构造函数或者移动赋值运算符,对于它们的形式有了一定的了解,但是对他们的核心作用以及为什么要引入这两个东东,很多朋友还是一知半解。本文就是来解决这个问题的。要理解这个问题绕不开右值引用,c++11之前的 版本中只有拷贝构造函数,而拷贝构造函数是一般会,即会创建两个完全一样的对象,包括指针指向的区域都会进行重新申请内存和拷贝。这种情况下如果对象是一个大数组或占用资源多的对象,就会产生很大的内存拷贝开销。那么如何解决这个问题呢?c+11版本引入了右值引用、移动语义来解决这个问题。
2025-03-03 15:52:40
637
原创 c++之仿函数详解
有一些场景使用内置的仿函数无法满足要求,因为内置的仿函数一般只支持基本的数据类型,如int double等,对于一些用户自定义的类型,内置的仿函数无法实现需求。又或者用户对仿函数有更复杂的逻辑需求,内置的仿函数同样无法满足需求,所以需要用户自定义仿函数。// 使用greater仿函数进行降序排序// 使用自定义仿函数// 按奇偶性排序//自定义类型class Aprivate:int value1;int value2;
2025-03-01 12:13:32
545
原创 c++字符编码/乱码问题
之前我存在错误的认知:认为Unicode=UTF-16,实际上这是错误的理解,Unicode是一种字符集,它并不是编码方式,Unicode可以以不同的方式编码,还有一些错误的理解,比如我经常用使用qt框架进行开发,qt框架中的QString采用的就是UTF-16编码,在有些文章中没有描述清楚,仅仅是说QString采用的是Unicode字符串进行编码的,造成了我认为Unicode=UTF-16的印象。肯定是按照UTF-8格式进行存储,所有的字符都进行存储,包括双引号、分号、等号,换行符等。
2025-02-27 17:43:57
1375
原创 理解CPU与GPU频繁数据传输
在学习深度学习神经网络过程中,有时候会遇到一些描述“尽量避免CPU与GPU频繁数据传输”。那这句话应该如何理解呢?我们知道CPU可以访问内存,而GPU也有自己的显存。要完成功能一般都是CPU从硬盘或者其他数据源读取数据到内存中,然后将内存中的传输到GPU的显存中,GPU从显存中获取数据并进行计算,并最终将计算的结果返回给CPU的内存中。
2025-02-26 17:40:33
1537
原创 c++之原始字符串字面量(raw string-literals)
在c++11版本引入了一个特性(raw string literals)字符串字面量,这个特性的引入解决了在c++字符串中如果包含类似换行符、指标、单个反斜杠、转义字符等可以以人们更能理解的方式去使用,而传统的携带这些字符串的字符串需要将这些字符显式的写到字符串中。官方的解释可能更清楚:来自转义序列的字符(制表符、换行符、单个反斜杠等)可以以原始形式输入,同时保持格式化。这在编写包含大量引号或特殊格式的文本时特别有用。这可以使你的字符串字面量更容易阅读和维护。
2025-02-26 17:19:07
819
SSymlinkerbash脚本和sysroot-relativelinks.py脚本下载
2023-07-27
基于qt c++的通信解耦问题
2023-02-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅