- 博客(1293)
- 资源 (52)
- 收藏
- 关注
原创 老程序员解Bug的通用套路
程序员在很多人的印象里是一份严(ku)谨(bi)的职业,也是一个被搞怪吐槽乐此不疲的职业,程序员们面对复杂的代码敲打电脑时连眉头都不会皱一下,但是有一个词却是他们痛苦的根源,它就是Bug。 记得刚毕业入行时,我们老大派给我和另外一个新来同事的第一件事就是修Bug,要不是在学校敲过几年代码,还真不知道如何下手!和我一起进公司的另外一个同事完全就是以“看戏者”的身份,看我搞了...
2018-06-06 09:25:29
12712
26
原创 C++17新属性详解
C++17的入选特性有:(1).非类型模板参数的 auto 模板参数分为两种,一种是类型模板参数,也是我们用得最多的一种:template <typename T, typename U>auto add(T t, U u) { return t+u;} 里面的 T 和 U 都是类型模板参数。另一种是非类型模板参数,它可以让不同的字面量成为模板的参数:te...
2018-05-27 21:59:38
54883
5
原创 C++大牛的博客
1. C++大牛的博客 Bjarne Stroustrup的博客: Bjarne Stroustrup’s HomepageBjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样
2018-01-21 21:37:00
6194
1
原创 C++模板详解
一.C++模板的定义: 模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。模板是一种对类型进行参数化的工具;二.使用模板的目的: 能够使得程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对double,字符这些
2017-05-31 21:19:42
2661
1
原创 Qt的常用布局使用详解
Qt布局详解: 界面开发首先要对整个界面进行布局,使窗体上的所有的控件必须有一个合适的尺寸和位置。那么做出来的界面才看起来美观。那么如何对界面进行布局呢?Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QFormLayout,QStackLayout。(布局管理类)这些类简单易用,无论在代码中还是用Qt Design
2016-09-30 09:06:16
6026
1
原创 优秀程序设计的18大原则
优秀程序设计的18大原则1、避免重复原则(DRY - Don’t repeat yourself)编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就很容易形成一个抽象体。2、抽象原则(Abstraction Principle)与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。
2016-07-11 17:07:57
6469
原创 码率控制方法详解
在数字视频编码与传输的整个链路中,码率控制(Rate Control)是一个既基础又关键的环节。它直接决定了编码器输出的码流能否适配传输信道带宽,以及终端解码播放时画面质量的平稳性。然而码率控制并不是简单的“设定一个目标码率就万事大吉”,它涉及率失真理论、缓冲模型、视觉心理学乃至现代数据驱动方法。本文尝试以技术博客的形式,系统地梳理码率控制的基本原理、经典模式、核心数学模型以及在 x264/x265 等主流编码器中的工程实践。
2026-05-10 22:53:36
365
原创 Intel QSV 和 VAAPI 用于硬件加速视频编解码的区别详解
摘要:Intel QSV和VAAPI是两种硬件加速视频编解码接口,主要区别在于:QSV是Intel专有技术,支持Windows/Linux平台,提供原生API和更优性能;VAAPI是开源跨厂商标准,主要面向Linux系统,支持多品牌硬件但性能略低。在Linux系统中,Intel硬件可通过VAAPI驱动调用QSV功能。选择建议:Windows环境只能用QSV,Linux下优先QSV以获得最佳性能,若需多硬件兼容则选VAAPI。实际应用中两者可共存,QSV侧重性能优化,VAAPI强调通用性。
2026-04-30 23:43:56
204
原创 虚函数详解(三)—— 虚继承与虚函数
本文深入探讨了C++中虚继承与虚函数的复杂交互机制。虚继承通过共享基类实例解决了菱形继承问题,但也带来了对象内存布局和虚函数调用机制的复杂性。文章详细分析了虚基类表的工作原理、虚函数表在虚继承下的结构调整,以及this指针调整(thunk)技术如何确保多态正确性。通过对比MSVC和Itanium ABI的实现差异,揭示了不同编译器处理虚继承时vptr和vbptr的布局策略。最后指出虚继承虽然优雅但性能开销较大,建议在实际工程中优先考虑组合或其他设计模式。全文系统性地剖析了C++对象模型中最复杂的部分,为深入
2026-04-30 22:56:26
189
原创 虚函数详解(二)—— 虚函数与多继承
本文深入分析了C++多继承场景下的虚函数实现机制。通过内存布局、虚函数表结构和thunk技术,编译器解决了多继承带来的复杂问题:对象包含多个vptr分别指向主表和次级表;次级表通过thunk代码调整this指针,确保派生类函数能正确访问成员数据。文章详细解析了不同基类指针调用虚函数的过程,揭示了构造函数中的vptr切换逻辑,并讨论了同名虚函数覆盖、dynamic_cast实现及性能开销等问题。这些底层机制保证了多继承下多态行为的正确性,为理解更复杂的虚继承场景奠定了基础。
2026-04-30 22:56:15
220
原创 虚函数详解(一)—— 虚函数基本原理与单继承
本文深入剖析了C++虚函数在单继承体系下的实现原理与行为特点。首先介绍了虚函数如何通过动态绑定实现运行时多态,解释了虚函数表(vtable)和虚函数指针(vptr)的内存布局机制。详细分析了单继承场景下虚函数表的结构变化规律,包括子类覆盖和不覆盖基类虚函数时vtable的不同表现。特别探讨了构造函数和析构函数中虚函数调用的特殊行为,指出此时vptr的动态调整机制。文章还解析了虚函数调用的底层过程、协变返回类型、默认参数陷阱等关键细节,并评估了虚函数的性能开销。最后通过非可移植代码示例演示了如何手动探查虚函数
2026-04-30 22:56:07
196
原创 C++面试题总结(三)
本文系统梳理了C/C++编程中的核心知识点,包括:1. 引用与指针的区别(初始化、空值、语法差异);2. 常见错误场景(堆栈溢出、内存泄漏、野指针);3. 关键语法特性(虚函数限制、浮点数比较、switch参数限制);4. 内存与指针操作(数组指针运算、类型大小计算、字节序判断);5. 实用编程技巧(宏定义、递归算法、变量交换方法);6. 标准库函数实现(字符串处理、内存拷贝)。全文通过典型示例和易错点分析,帮助开发者深入理解底层原理并规避常见陷阱。
2026-04-30 22:55:38
472
原创 C++高频面试题总结(一)
本文总结了微软、Intel、Autodesk等公司的C++面试知识点,涵盖核心编程概念和技术要点。主要内容包括:1)引用与指针的区别、引用作为函数参数和返回值的用法;2)内存管理(new/delete与malloc/free);3)面向对象特性(封装、继承、多态);4)常见算法实现(strcpy、链表操作、查找第二大数);5)类型转换、const使用等语言特性。文章通过代码示例和对比分析,详细讲解了面试常见问题的解决思路和注意事项,为C++开发者提供了实用的面试准备资料。
2026-04-30 22:55:26
358
原创 C++面试总结(二)—常见面试题总结
现代 C++ 建议:在 C++11 及以后,应优先使用标准库的 `std::mutex` 和 `std::lock_guard` / `std::unique_lock`,它们提供了 RAII 机制,可以有效避免死锁。` 执行默认构造函数时,`CLS(0)` 创建了一个临时的匿名对象,`obj.m_i` 并未被初始化,其值是未定义的。它的工作原理是:将不需要移除的元素向前移动,覆盖需要移除的元素,然后返回一个指向"新逻辑末尾"的迭代器。如果构造函数是虚的,调用时派生类尚未构造完成,无法正确分派。
2026-04-26 23:14:47
345
原创 C++面试总结(一)—基本概念
本文系统梳理了C++核心知识点,涵盖内存管理、面向对象特性、关键字修饰符、指针引用、进程线程、容器使用等关键内容。重点解析了new/delete与malloc/free的本质区别,class与struct的访问权限差异,多态的实现方式,static/const/volatile关键字的特殊用法,以及引用与指针的本质区别。同时深入探讨了虚函数、初始化列表、进程通信、死锁条件等高级特性,并对比了C与C++在结构体、全局变量处理等方面的差异。最后总结了拷贝构造函数的调用时机和Windows程序的消息机制,为C++
2026-04-12 23:51:41
354
原创 ffmpeg的静态编译配置和动态编译配置的优缺点
FFmpeg编译方式分为静态和动态两种。静态编译将所有库合并到可执行文件中,具有可移植性强、避免版本冲突的优点,但体积大且升级困难;动态编译则依赖外部库,体积小、便于维护升级,但依赖管理复杂。针对同时使用Intel核显和NVIDIA独显的场景,推荐动态编译,因其更符合Linux生态,便于硬件加速库的维护和调试。静态编译适合需要部署到多系统或无依赖环境的场景。动态编译是Ubuntu开发环境下的首选方案。
2026-04-05 23:53:37
395
原创 C++的四种类型转换详解
C++提供了四种类型转换操作符:static_cast用于相关类型转换(如数值转换、类层次转换),但不检查向下转换安全性;dynamic_cast用于多态类型的安全向下转换,提供运行时检查;const_cast用于添加/去除const限定符;reinterpret_cast进行底层位模式重新解释,风险最高。static_cast最常用但需程序员保证正确性,dynamic_cast最安全但有性能开销,const_cast需谨慎使用,reinterpret_cast应尽量避免。建议优先使用更安全的转换方式,仅在
2026-03-29 23:32:29
395
原创 常见C++笔试题整理(二)
本文整理了50道C++常见笔试题,涵盖引用、智能指针、容器、内存管理、多态等核心知识点。主要内容包括:引用与指针的区别、vector扩容机制、map与unordered_map对比、智能指针的循环引用问题、右值引用与移动语义、类设计原则等。题目配有详细解析,帮助开发者查漏补缺,掌握C++面试高频考点。特别对引用特性、容器实现原理、内存分配方式、面向对象特性等关键概念进行了深入剖析,适合准备技术面试的C++开发者参考学习。
2026-03-29 22:19:52
394
原创 常见C++笔试题整理(一)
本文整理了C++笔试中常见的面试题及解析,涵盖多个重要知识点:1. const指针的不同形式及区别;2. 引用与指针的核心差异;3. 拷贝构造函数与赋值运算符的调用场景;4. 字符串逆序实现;5. 位域结构的内存计算;6. 进程间通信方式;7. 递归实现整数倒序输出;8. 虚函数的多态特性等。同时包含典型编程问题如内存泄漏检查、数组越界防范等,并提供了算法题(如硬币称重)的解决思路。这些题目涉及C++基础语法、面向对象特性、内存管理、位操作等核心概念,适合准备技术面试时查漏补缺。
2026-03-22 22:09:13
368
原创 HAL层或硬件驱动对接经验详解
本文展示通过DMA-BUF内存直通、对象池复用和移动语义等技术优化性能,在Android相机元数据处理中实现30%以上的性能提升。示例代码使用CameraMetadata模板避免数据拷贝,直接操作内存池并原地更新元数据(如人脸矩形统计信息),显著减少内存分配开销。该方法通过find/update接口实现零拷贝数据处理,适用于高吞吐低延迟场景。
2026-03-15 22:48:42
166
原创 Windows查看端口占用并关闭
1.win+R输入cmd打开命令行窗口输入netstat -a -n -o查看端口与之对应的PID(如7680端口被3556PID程序占用)。2.打开任务管理器(Ctrl+Shift+ESC),点击上方详细信息将对应的PIN程序关闭,释放端口。
2026-03-15 22:48:39
64
原创 iOS开发中常用的第三方类库整理
本文汇总了iOS开发中常用的第三方库和组件,涵盖UI控件、网络请求、数据解析、动画等多个领域。主要包括:UI组件如SimpleButton、KrVideoPlayer等;网络库Alamofire、AFNetworking;JSON解析工具SwiftyJSON、HandyJSON;数据缓存SQLite.swift;动画框架Lottie、Spring;以及图片加载Kingfisher、SDWebImage等。这些开源项目为iOS开发提供了高效解决方案,可大幅提升开发效率和应用性能。
2026-03-08 21:03:55
367
原创 深入理解C++中的构造与析构:为什么构造函数不能是虚函数,而析构函数通常需要是虚函数?
本文探讨了C++中构造函数不能是虚函数和析构函数通常需要是虚函数的原因。构造函数不能为虚函数是因为对象构造时虚函数表尚未初始化,存在"先有鸡还是先有蛋"的逻辑悖论。析构函数需要为虚函数是为了确保通过基类指针删除派生类对象时能正确调用派生类的析构函数,避免内存泄漏。文章还指出,只有作为基类使用的类才需要虚析构函数,否则会带来不必要的开销。这些原理对理解C++对象模型和正确管理资源至关重要。
2026-03-08 20:54:28
288
原创 数组TOP-K问题:求前K个最小元素的多种解法与C++实现
本文探讨了寻找无序数组中最小的K个元素的多种算法方法。排序法(O(NlogN))简单直接但效率较低;堆方法(O(NlogK))适合大数据量和小K值;快速选择(平均O(N))效率高但可能不稳定;计数排序(O(N+range))在数据范围有限时性能最佳。文章通过C++代码示例展示了各方法的实现,并建议根据数据规模和特点选择合适方案,强调理解这些算法对培养计算思维的重要性。
2026-03-03 23:27:00
520
原创 机器人操作系统演进之路
本文系统梳理了机器人操作系统(ROS)的技术演进与工业应用。从ROS1到ROS2的技术革命,重点分析了DDS通信中间件引入带来的分布式通信、实时性能和安全认证等关键突破。详细介绍了ROS-Industrial工业扩展、Open-RMF多机器人协同框架以及Gazebo到Ignition的数字孪生进化。通过智慧物流、智能制造等应用案例,展现了ROS生态如何从实验室走向工业现场。文章最后探讨了ROS与AI融合、5G边缘计算等未来趋势,以及面临的技术标准化和商业化挑战,为读者提供了机器人操作系统发展的全景视角。
2026-03-01 22:42:56
137
原创 FFmpeg 获取视频信息和导出每一帧
本文介绍了使用FFmpeg工具分析视频信息和提取帧的方法。通过ffprobe可获取视频详细信息,如格式、编码、分辨率等,并以JSON格式输出便于解析。FFmpeg则用于提取视频帧,支持三种方式:1)提取所有帧为序列图片;2)按时间间隔提取(如每秒1帧);3)提取指定时间点的单帧。还介绍了高效提取关键帧(I帧)的方法。这些功能为视频分析处理提供了便利工具,适用于视频编辑、分析和机器学习等场景。
2026-02-22 22:30:24
204
原创 QuickJS 快速开发引擎使用详解
QuickJS是一个轻量级可嵌入的JavaScript引擎,由FFmpeg创始人Fabrice Bellard开发。其核心特点包括小巧体积(仅几百KB)、ES2020兼容性、快速启动和低内存占用。技术架构包含编译器、解释器、运行时和上下文等模块,支持将JS代码编译为字节码执行。通过丰富的C API,开发者可以将QuickJS嵌入C/C++程序,实现JavaScript与原生代码的交互。在嵌入式音视频处理场景中,可用C实现核心编解码功能,通过QuickJS暴露接口给JS脚本调用,兼顾性能与灵活性。该方案适合需
2026-02-22 22:29:51
514
原创 RK3568使用FFmpeg的RKMPP后端进行硬解码
本文详细介绍了在RK3568开发板上配置开发环境、交叉编译带RKMPP支持的FFmpeg,并实现视频硬解码的全过程。主要内容包括:1) 开发环境配置,包括系统依赖和FFmpeg的RKMPP补丁编译;2) C++代码实现,展示了如何通过FFmpeg的RKMPP后端解码H.264文件并使用DRM进行显示;3) 交叉编译、部署到开发板及测试验证的方法。重点强调了零拷贝技术的应用,通过DMA-BUF文件描述符实现高效视频处理,以及如何通过CPU占用率等指标验证硬解码是否成功。该方案充分发挥了RK3568的硬件解码能
2026-02-22 22:29:25
775
原创 RK3568使用GStreamer进行4k视频硬解码
本文介绍了在RK3568开发板上配置GStreamer视频播放器的完整流程。首先详细说明了Buildroot系统中需要包含的GStreamer组件及其配置方法,包括核心库、基础插件和Rockchip专用插件。然后提供了一个基于C++的GStreamer播放器实现方案,包含管道构建、硬件解码和视频渲染等关键代码。最后介绍了交叉编译、部署测试步骤以及常见问题的排查方法。该方案充分利用了RK3568的硬件解码能力,通过mpp解码器和rkximagesink实现高效视频播放,适用于嵌入式多媒体应用开发。
2026-02-22 22:28:45
622
原创 目前视频渲染显示硬加速的主要技术
视频渲染硬件加速主要依赖GPU加速、编解码加速器和Overlay合成引擎三大技术。GPU渲染适用于复杂特效处理,编解码加速器高效处理视频压缩/解压缩,Overlay则提供最低功耗的全屏播放方案。这些技术协同工作形成完整视频处理流水线:先由解码器解压视频,再由GPU或Overlay处理后,最终通过显示控制器输出。技术选型需权衡功耗、性能与功能需求,现代系统通常自动优化组合方案。
2026-02-22 22:28:08
618
原创 unitree go2主要功能及核心架构详解
Unitree GO2是一款消费级四足机器人,具备稳健行走、跳跃、地形适应等核心运动能力,支持语音、视觉和触摸交互。其分层架构包含硬件层、底层控制层、中间件层和应用层,通过SDK提供状态订阅、运动控制和服务调用功能。开发者可使用Python或C++连接机器人,发送运动指令并获取传感器数据,还支持Gazebo和IsaacSim仿真测试。GO2适用于家庭陪伴、教育娱乐和二次开发,开放SDK和通信协议增强了其可扩展性。
2026-02-22 22:24:02
1199
原创 深入剖析四大流媒体服务器:SRS、ZLMediaKit、Janus与Mediasoup的技术差异与选型之道
本文深入解析四大开源流媒体服务器(SRS、ZLMediaKit、Janus、Mediasoup)的技术特性与适用场景。SRS作为轻量级多协议网关,擅长RTMP转WebRTC;ZLMediaKit在协议转换方面表现优异;Janus以插件化架构支持WebRTC定制开发;Mediasoup则提供超低延迟的SFU方案。文章提出四维选型法,建议根据延迟、并发、协议栈和扩展性需求进行技术决策,并指出下一代架构将向QUIC、AI编码、Serverless等方向发展。最终强调技术选型应遵循场景匹配原则,必要时可采用混合架构
2026-02-08 22:49:29
233
原创 OBS技术深度剖析:从开源直播工具到专业制作引擎的进化之路
本文深入剖析了开源直播软件OBS的技术架构与发展历程。从2012年诞生至今,OBS已成长为直播领域的事实标准,其成功源于模块化设计和开源协作模式。文章详细解析了OBS的核心技术:1) 分层架构与插件系统,2) GPU加速的渲染管线,3) 智能音频处理,4) 多平台编码优化。同时探讨了虚拟摄像头、浏览器源等高级功能的实现原理,并提供了性能优化方案和硬件配置建议。随着AI、WebRTC等新技术发展,OBS将持续引领实时内容创作工具的创新,为开发者和创作者提供更强大的技术支持。
2026-02-01 23:35:10
168
原创 H264和H265的结构及区别详解!
H.264和H.265视频编码标准的核心区别在于处理单元的结构灵活性。H.264采用固定的16x16宏块结构,而H.265引入可变的64x64编码树单元(CTU),通过四叉树递归划分实现更智能的"量体裁衣"式编码。H.265新增35种帧内预测方向、1/2像素精度运动补偿等先进技术,在保持画质前提下压缩率比H.264提高50%,特别适合4K/8K超高清视频,但计算复杂度也显著增加。这种结构革新使H.265能更高效处理现代高分辨率视频内容。
2026-01-25 23:15:04
440
原创 C++的TCP和UDP怎么判断一个请求包是否接收完了?
本文介绍了在C++中判断TCP/UDP请求包完整性的方法。TCP需采用固定长度法、分隔符法或TLV格式处理流式数据和粘包问题;UDP因数据报特性,单次接收即为完整数据。文章提供了两种协议的实现代码示例和封装类,并比较了关键区别:TCP需应用层协议判断完整性,UDP数据报要么完整接收要么丢失。最佳实践建议TCP使用长度头,UDP注意缓冲区大小,并提供了错误处理和超时设置等注意事项。
2026-01-25 23:14:07
415
原创 C++解析正常包和粘包
TCP粘包问题是由于TCP流式传输特性导致的,主要原因包括发送方的Nagle算法合并小包、发送过快导致缓冲区堆积,以及接收方处理不及时造成多个包堆积。解决方案主要有三种:定长消息、分隔符法和长度前缀法(最常用)。文章提供了一个C++实现示例,采用长度前缀法(4字节长度头+实际数据)设计协议,通过PacketParser类实现数据打包、缓冲管理和消息提取功能。代码演示了正确处理正常包、粘包和半包的情况,关键点包括网络字节序转换、缓冲区管理和内存安全处理。该方案能有效解决TCP粘包问题,保证数据的正确解析。
2026-01-25 23:12:26
652
原创 C++静态函数类使用总结
本文探讨了C++中静态函数类的设计模式与应用技巧。静态函数类通过组织相关静态成员函数,提供清晰的命名空间和功能性,同时避免实例化。文章对比了静态函数类与命名空间的适用场景,阐述了单一职责、不可实例化、线程安全等设计原则,并介绍了策略模式、模板类等高级应用。此外,还分析了性能优化技巧、测试策略以及常见陷阱的解决方案,最后结合现代C++特性展示了如何创建更安全高效的静态函数类。静态函数类适用于需要封装性、私有成员或严格控制的场景,而简单函数集合更适合使用命名空间。
2026-01-18 23:10:05
75
1
原创 流媒体传输的两种核心方式:顺序流与实时流技术解析
本文探讨了流媒体传输的两种核心技术:顺序流传输和实时流传输。顺序流传输基于HTTP协议,适合预录制内容播放,但不支持随机访问;实时流传输采用专用协议,支持直播和动态自适应,但实现复杂。文章对比了两者的技术特性、适用场景和选择建议,指出随着5G发展,流媒体技术正向更低延迟、更高品质方向发展。理解这两种传输方式的区别有助于项目技术选型,提升用户体验。
2026-01-12 23:05:04
1273
1
原创 H.265码流分析详解
本文深入解析H.265/HEVC视频编码标准的码流结构。首先介绍其分层架构,包括视频参数集(VPS)、序列参数集(SPS)、图像参数集(PPS)等关键组成部分。详细讲解NAL单元的分割方法、类型判断及解析过程,并提供代码示例。重点分析VPS、SPS和PPS等参数集的具体内容和作用,阐述H.265的高级特性如并行处理支持、依赖关系与时序管理等。最后总结H.265通过精细块划分和先进预测技术实现的高效压缩优势,指出理解其码流结构对视频编码领域的重要意义。
2026-01-12 23:05:02
1442
原创 H264码流分析详解
本文深入解析H264视频编码标准的架构设计和技术特性。首先介绍了H264的分层结构和NAL单元封装机制,详细分析了SPS、PPS等关键参数集及帧类型判断方法。重点阐述了Slice结构、语法元素和高级特性,包括B帧双向预测和去块滤波技术。通过实际码流分析展示了H264的高效压缩原理,指出其采用的分层架构、网络友好封装等技术特点,使H264在压缩效率与计算复杂度间取得平衡。尽管新一代编码标准不断涌现,H264凭借其优雅设计和出色适应性,仍是当前应用最广泛的视频编码标准。
2026-01-12 23:04:59
1063
jQuery瀑布流经典布局源码
2016-01-28
Navicat安装指导及安装资源
2024-03-23
vncserver和vncviewer
2017-06-01
Hadoop技术全套图书
2016-03-21
大数据资料集锦
2016-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅