- 博客(22)
- 资源 (6)
- 收藏
- 关注
原创 设计模式:“组件协作“ 之 Templat Method
组件协作模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。典型模式1)Templat Method2)Stategy3)Observer / Event模板方法模式动机在软件构建过程中,对于某一项任务,他常常有稳定的整体操作结构,单子各个子步骤有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时出现。如何在确定稳定操作结构前提下,来灵活应对
2022-04-12 21:58:23
202
原创 设计模式:面向对象的设计原则
问题引入:为什么要使用面向对象的设计?面向对象设计最大的优势在于抵御变化,变化是复用的天敌!重新认识面向对象隔离变化从宏观层面来看,面向对象的构建的构建方式更能是适应软件的变化,能将变化所带来的影响减为最小。各司其职从微观层面来讲,面向对象的方式更强调各个类的“职责”,由于需求变化导致的新增类型不应该影响原来类型的实现——是所谓各负其责。对象是什么从语言层面来讲:对象封装了代码和数据。从规格层面来讲:对象是一系列可被使用的公共接口。从概念层面来讲:对象是拥有某种责任的抽象设计原则
2022-04-05 21:48:54
393
原创 没有dns如何通过域名访问设置
linux环境下:vim /etc/hostswindows环境下:打开目录C:\Windows\System32\drivers\etc,编辑该目录下的hosts文件:
2021-11-08 11:15:32
954
原创 一、音视频相关的基本概念
一、视频的相关概念什么是视频 连续的图像变化**每秒超过 24 帧(frame,fps)** 画面以上时,根据**视觉暂留**原理,人眼无法 辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫做**视频**。视频帧 **帧**,是视频的一个基本概念,表示**一张画面**,如上面的翻页动画书中的一页,就是一帧。 一个视频就是由许许多多帧组成的。帧率 即**单位时间内帧的数量**,单位为:**帧/秒 或 fps**(frames per second)。如动画书中,一秒内包含多少张
2021-10-20 16:20:35
1329
原创 windows程序dump生成代码
int GenerateMiniDump(PEXCEPTION_POINTERS pExceptionPointers){ // Define function pointer typedef BOOL(WINAPI * MiniDumpWriteDumpT)( HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, PMINIDUMP_EXCEPTION_INFORMATION, PMINIDUMP_USER_STREAM_INFORMATION, P
2021-07-28 16:42:38
165
转载 ffmpeg命令参数说明
一、主要参数 ◼ -i 设定输入流◼ -f 设定输出格式(format)◼ -ss 开始时间◼ -t 时间长度 二、音频参数: ◼ -aframes 设置要输出的音频帧数◼ -b:a 音频码率◼ -ar 设定采样率◼ -ac 设定声音的Channel数◼ -acodec 设定声音编解码器,如果用copy表示原始编解码数据必须被拷贝。◼ -an 不处理音频◼ -af 音频过滤器 ...
2021-07-07 14:16:26
4742
1
原创 nginx基础结构分析之一 - 内存池 ngx_palloc.c
一、内存池一般我们使用malloc/alloc/free等函数来分配和释放内存。但是直接使用这些函数会有一些弊端:虽然系统自带的ptmalloc内存分配管理器,也有自己的内存优化管理方案(申请内存块以及将内存交还给系统都有自己的优化方案,具体可以研究一下ptmalloc的源码),但是直接使用malloc/alloc/free,仍然会导致内存分配的性能比较低。频繁使用这些函数分配和释放内存,会导致内存碎片,不容易让系统直接回收内存。典型的例子就是大并发频繁分配和回收内存,会导致进程的内存产生碎片,并且
2021-04-22 10:51:41
205
原创 c++11/14新特性解读之五 (auto,decltype 类型推导)
首先介绍下typeid,c++的运行时类型识别(RTTI)机制是为每个类型产生type_info类型的数据,typeid就会返回变量相应的type_info数据。type_info的name成员函数可以返回类型的名字,hash_code成员函数返回该类型唯一的哈希值,以供程序员对变量的类型随时进行比较。class A {};class B {};struct C {};int main(){ int i; A a1; A a2; B b; C c; cout << typ
2020-06-30 18:34:56
349
原创 c++11/14新特性解读之四(lambda与仿函数,lambda与STL)
lambda首先定义一下lambda函数的语法定义:[capture] mutable ->return-type(statement)其中,[capture]:捕捉列表,[]是lambda引出符。编译器根据引出符判断接下来的代码是否是lambda函数。捕捉列表能够捕捉上下文的变量以供lambda函数使用。具体的方法见下文中会描述。(parameters):参数列表。与普通函数参数列表一致。如果不需要传递参数,则可以连同()一起省略。mutable:修饰符。默认情况下,lambda函数总是
2020-06-28 14:36:30
706
原创 c++11/14新特性解读之三(=default,=delete)
对于c++的一个空的类,例如class Foo{}实际上编译的时候编译器会给这个类加上默认的如下的几个函数:1、默认构造函数2、默认析构函数3、默认拷贝函数4、默认移动拷贝函数5、默认赋值函数6、默认移动赋值函数即:class Foo{ Foo(); // 默认构造函数 ~Foo(); // 默认析构函数 Foo(const Foo& foo); // 默认拷贝函数 Foo(Foo&& foo); // 默认移动拷贝函数 Foo& oper
2020-06-23 14:58:40
527
原创 c++11/14新特性解读之二 explicit关键字
对于多个参数的明确的构造函数-在构造函数前加explicit关键字首先举例说明explicit关键字的用法:未加explict:struct Complex{ int real, ima; Complex(int re,int im=0):real(re),ima(im) { cout << "re=" << real << " ima=" << ima << endl; } Complex operator + (con
2020-06-22 20:34:48
527
原创 c++11/14新特性解读之一(Variadic Template)
例一:void print(){}template<typename T,typename...Types>print(const T& firstArg,const Types&... agrs) // ...agrs是一包{ cout << firstArg << endl; // 打印第一个参数 print(args...);}void main(){ print(7.5, "hello", bitset<16>
2020-06-18 15:26:40
225
VS2022+QT5实现的xml配置可视化工具源代码
2022-11-21
c++生成二维码qrencode完整工程
2022-01-26
适用于各种windows C++项目的日志库工程loglib.zip
2021-03-17
teamtalk源码及安装手册
2018-09-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人