- 博客(140)
- 资源 (8)
- 收藏
- 关注
原创 开源工具rcedit修改dll详细信息实践
背景说明通过c++编译生成的dll信息,可以在rc的version中修改对应的版本和产品信息。但如果dll没有这些版本信息,或者希望能够批量对dll做修改时,就需要通过工具来处理了。工具说明rcedit是electron中的开源库,可以对dll详细信息做修改,国内外网地址如下。https://github.com/electron/rcedithttps://gitee.com/freeasm/rcedit.git如果需要编译好rcedit.exe,我编译好了一份,http://u.163.
2020-09-05 17:19:58
2733
1
原创 C++中一个P0级的磁盘清空问题复盘
事件背景一个小伙伴开开心心写了一段文件夹删除代码,不过在自测的时候出现了事故。整个C盘文件被一扫而空,不得不重装系统,珍藏资料也难以找回。问题排查先上源码。警告:此源码切勿运行#include <string>std::wstring dirBackSlashAlign(const std::wstring& strDir){ std::wstring strTemp = strDir; if (!strTemp.empty() &&
2020-08-14 23:57:51
298
原创 C++中实现不可复制的类
使用场景在C++中实现不可复制的类,源码剖析的是boost中的noncopyable类。C++11实现要实现对象的不可复制,需要在拷贝构造和赋值操作上做文章。C++11中比较优雅,直接用= delete做函数删除即可。default关键字指使用编译器默认生成的函数,不再自己实现构造和析构。具体代码如下。 class noncopyable { public: noncopyable() = default; ~noncopyable()
2020-08-13 22:01:17
336
原创 精简websocket交互示例
示例说明 本例为websocket的精简交互示例,服务端代码采用python,客户端代码采用html5,演示websocket的精简交互过程。服务代码 采用python3来实现,采用websockets库,库安装命令pip install websockets 参考文章:https://blog.csdn.net/qq_24822271/article/details/9022...
2019-11-05 09:31:47
555
原创 模式步步演化组合使用示例
本篇模拟随着需求的变化,模型步步演化,做个杀鸡使用牛刀的组合示例。 参考:设计模式之复合模式。 系统:Windows 7 64位 IDE:VS 20121、策略 需求:池塘边有一群红头鸭(RedheadDuck)和绿头鸭(MallarDuck),也有观察人员放置的鸭鸣器(DuckCall),还有附近儿童在玩的橡皮鸭(RubberDuck)。我们需要可视化鸭子叫声。 鸭子叫声:呱呱(quac
2016-07-05 18:12:00
1568
原创 STL Sort的五种使用示例
Sort是一种高效的排序算法,常使用的五种示例如下。 示例代码采用编译器vs2012,任何一款支持c++11标准的编译器都可以运行。包含头文件#include <iostream>#include <vector>#include <algorithm>#include <functional>1、重载操作符 重载对应操作符<、>、<=、>=来实现排序 代码namespace SORT_
2016-04-14 21:28:05
2968
原创 检测vector空间自动分配策略
看过《STL源码剖析》可以知道vector空间的自动分配策略是空间加倍。 由于stl的版本比较多,针对常用的两个做下检测,vs2012与gcc 5.3.0 size():获取当前使用大小 capacity():获取当前容器大小分配100万次检测一下。 代码#include <vector>#include <iostream>void VectorTest(){ std::vec
2016-04-14 21:23:14
1186
原创 boost多线程_pRawDllMain already defined编译错误解决
MFC扩展DLL使用boost多线程会报_pRawDllMain already defined编译错误使用示例:#include boost::thread test; 解决方法:dllmain.cpp中的注释afxdllx.h头文件包含//#include
2016-01-20 09:10:07
1523
1
原创 单例模式的多线程安全支持(C++)
单例模式的多线程支持,可以分两种类型。1、懒汉模式C++11要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++11以前,仍需要加锁。Lock/UnLock可以采用boost中的技术技术。class CSingleton{private: CSingleton(){}public: static CSingleton* getInstance(
2016-01-14 18:03:08
2324
原创 智能指针仿真-003-共享智能指针
1. 概述 本篇对共享所有权的智能指针进行仿真。 仿真指针主要有:boost/c++ 11 tr1中的shared_ptr、weak_ptr。 boost与c++ 11 tr1的关系这里稍微做一下类比,shared_ptr在boost中时可以认为是储君(准标准),进入到了tr1之后就正名了就算正式登基了是完全标准的了。2. this指针的探讨 this指针是编译器默认生成到成员函
2015-09-20 15:42:45
728
原创 智能指针仿真-002-值型智能指针
1. 概述 本篇对值型的智能指针进行仿真,这类指针所有权是不能共享的。 仿真指针主要有。 1) 旧式stl智能指针:auto_ptr。 2) Boost智能指针:scoped_ptr。 3) C++ 11 tr1的智能指针:unique_ptr。由于不能进行所有权共享,故这类指针对复制和赋值运算都做了限制处理。在使用过程中涉及到所有权的时候要小心谨慎,防止踩雷。2. au
2015-09-20 15:09:37
616
原创 智能指针仿真-001-基础篇
1. 前言 本次技术研究关注C++中智能指针的原理,对各种类型指针进行仿真实现,将底层核心源码一段段曝光出来,从头到外理一遍。 对应文章有三篇,从简入深。 1) 《智能指针仿真-001-基础篇》,介绍所需基础知识。 2) 《智能指针仿真-002-值型智能指针》,仿真值型智能指针。 3) 《智能指针仿真-003-共享智能指针》,仿真共享智能指针。平时看侯俊杰的书(翻译及原著)比较多,对
2015-09-20 14:52:30
713
原创 hadoop2.7.0实践- WordCount
说明:本文档为wordcount的mapreduce job编写及运行文档。 操作系统:Ubuntu14 x64位 Hadoop:Hadoop 2.7.0
2015-08-20 22:24:14
9942
原创 hadoop2.7.0实践-环境搭建
本文档为hadoop搭建实践文档,相关理论可到hadoop官网查看学习。 操作系统:Ubuntu14 x64位 Hadoop:Hadoop 2.7.0
2015-08-20 22:04:38
6379
原创 虚函数相关问题探索
虚函数相关问题探索本篇文章中对虚函数做五个方面的探索。 1) 虚函数单一继承对象模型。 2) 虚表指针与虚表的创建释放时机。 3) 析构函数设置为虚函数。 4) 构造函数调用虚函数。 5) 析构函数调用虚函数。1. 虚函数单一继承对象模型 参见网址:http://www.cnblogs.com/taoxu0903/archive/2008/02/04/1064234.ht
2015-06-30 17:19:54
827
原创 RabbitMQ使用实践
RabbitMQ使用实践参考网站:http://blog.chinaunix.net/topic/surpershi/http://blog.csdn.net/lwkcn/article/details/25086467http://snoopyxdy.blog.163.com/blog/static/60117440201352615631930/1、简介 MQ
2015-01-28 15:33:56
9119
1
原创 C++技术问题总结-第15篇 内存泄露有哪些方法定位,崩溃有哪些方法定位
Visual C++内存泄露检测,可采用VLD工具。 VLD:Visual Leak Detector。VLD是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别;并且是开源免费的。 官方网址:http://vld.codep
2014-12-15 14:19:13
2699
原创 C++技术问题总结-第14篇 常用设计模式及其应用场景
设计模式是对设计原则的具体化。用江湖话说就是武林秘籍,总结出来的一些固定套路,编程界的《葵花宝典》。个人意见,编程过程中设计原则进行遵循,对设计模式进行借鉴。完全按照套路来,有时反而简单问题复杂化。 常用的模式及其场景如下。1) 单例模式。 单例模式是一种常用的软件设计模式。 在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保
2014-12-12 17:23:10
4194
原创 C++技术问题总结-第13篇 调用约定有哪些,有什么不同
调用约定(Calling convention),决定以下内容:a. 函数参数的压栈顺序。b. 由调用者还是被调用者把参数弹出栈。c. 以及产生函数修饰名的方法。 常用的调用约定为__stdcall、__cdecl、__fastcall。1) __stdcall。StandardCall的缩写,约定内容:a. 参数从右向左压入堆栈。b. 函数被调用者修改堆栈。
2014-12-12 11:22:22
994
原创 算法学习-第0篇 从Fibonacci开始
学习资源《Algorithms》,作者S.Dasgupta,C.H.Papadimitriou,and U.V.Vazirani。电子版可到资源库中下载http://download.csdn.net/detail/segen_jaa/7900765。1、问题描述Fibonacci数列想必大家都比较熟悉,后一位数字是前两位的和。0,1,1,2,3,5,8,13,21,34对
2014-10-13 15:09:44
1295
1
原创 C++技术问题总结-第12篇 设计模式原则
设计模式六大原则,参见http://www.uml.org.cn/sjms/201211023.asp。 1. 单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建
2014-10-10 15:09:34
1132
原创 C++技术问题总结-第11篇 网络通信中主机序网络序
网络通信经常涉及到字节序转化,接下来理解主机序和网络序有什么异同。①主机字节顺序HBO(Host Byte Order)采用小头序(little-endian),从低到高的顺序存储。低位字节排放在内存的低地址端,高位地址排放在高位地址端。②网络字节顺序NBO(Network Byte Order)采用大头序(big-endian),从高到低的顺序存储。高位字
2014-10-10 14:26:56
1311
原创 C++技术问题总结-第10篇 MFC中SendMessage与PostMessage异同
应用程序消息有三个来源:硬件消息(鼠标键盘等外设)、PostMessage消息、SendMessage消息,都可以发送消息事件来驱动程序执行。消息流图如下。硬件消息响应流程如下。①消息进入系统消息队列。②消息分发到应用程序消息队列。③应用程序循环获取消息。④消息处理函数执行。PostMessage直接进入上述步骤②,将消息放入消息队列中,然后立刻返回。Sen
2014-09-09 16:04:10
1880
原创 C++技术问题总结-第9篇 智能指针
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,能够在适当的时间自动删除指向的对象外,能够确保正确的销毁动态分配的对象。标准库的智能指针为auto_ptr。boost库的智能指针族在功能上做了扩展。1.auto_ptr auto_ptr注意事项如下。①auto_ptr不能共享所有权。②auto_ptr不能指向数组。③auto_ptr不能作为
2014-09-05 14:40:42
1192
原创 C++技术问题总结-第8篇 STL内存池是怎么实现的
STL内存池机制,使用双层级配置器。第一级采用malloc、free,第二级视情况采用不同策略。这种机制从heap中要空间,可以解决内存碎片问题。1.内存申请流程图 简要流程图如下。2.第二级配置器说明 第二级配置器目的解决小型区块造成的内存碎片问题。 使用自由链表(free-list)技巧。主动将任何小额区块的内存需求量上调至8的倍数。如需求30,则
2014-09-04 10:15:16
2772
原创 C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合
map是关联式的,vector、list、deque是序列式的。 map:底层机制RB-tree(红黑树),元素自动排序,键值对。 vector:操作方式与array相似,动态空间增长。是连续性空间,支持随机访问。 优点:Ø 内存动态增长,不需要指定内存大小。Ø 支持随机访问,即支持[]和vector.at()。 缺点:Ø 在内部进行插入
2014-08-27 17:23:42
1992
原创 C++技术问题总结-第6篇 STL迭代器相关
1、STL为什么要用迭代器 iterator模式定义:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。 STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。迭代器便起这个作用。 2、迭代器是怎么实现的 迭代器实现示例。
2014-08-25 17:36:49
989
原创 C++技术问题总结-第5篇 TCP三次握手
TCP三次握手TCP提供可靠的连接服务,采用三次握手确认建立一个连接。TCP标志位有6种。SYN:synchronous建立联机。ACK:acknowledgment确认。PSH:push传送。FIN:finish结束。RST:reset重置。URG:urgent紧急。三次握手主要依靠的是SYN和ACK标志位。握手详细流程图如下。简化步骤
2014-08-14 16:25:06
2077
原创 C++技术问题总结-第4篇 TCP与UDP
TCP、UDP各自client、server端描述TCP、UDP位于传输层,基于IP协议。1.TCPTCP:Transmission Control Protocal 传输控制协议。服务器与客户端执行流程如下。API说明。创建套接字:SOCKET localSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
2014-08-14 16:23:19
1055
原创 C++技术问题总结-第3篇 线程同步
线程同步的方法线程同步有多种方法。用户模式下的线程同步:关键段(critcal section)。内核模式下的线程同步:事件、计时器、信号量、互斥量。1.关键段用户模式下的同步,主要API如下。InitializeCriticalSection、DeleteCriticalSection、EnterCriticalSection、LeaveCriticalSection
2014-08-07 14:42:42
1194
原创 Windows 64位程序编译及检测
Windows 64位程序编译及检测1、64位程序编译采用vs2010可以比较方便的编译出64位的程序。调整编译配置为x64即可。配置完成,编译出来的程序即为64位。2、64位程序检测检测一个程序是否为64位,可以采用dumpbin工具,这是vs自带的小工具。步骤如下。对应命令依次是:进入vc目录:cd D:\Program File
2014-08-07 14:21:38
1746
原创 C++技术问题总结-第2篇 进程通信
进程通信的方法进程通信基本方法有如下几种。1、消息传递机制。2、共享内存。3、管道和邮槽。4、剪贴板。5、Socket通信。1.消息传递机制使用WM_COPYDATA实现进程间的传递数据。函数原型LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)参数hWnd:其窗
2014-08-06 14:31:28
1288
原创 基于Canvas的Char.js库使用
Chart.js是基于Html5 Canvas的图表库。官网:http://www.chartjs.org/参考文档:http://www.chartjs.org/docs/支持六种图表,对应源码相对目录如下。bardoughnutlinepiepolar-arearadar
2014-07-28 20:33:24
3424
1
原创 C++技术问题总结-第1篇 内存布局
进程中内存的布局参见:http://patmusing.blog.163.com/blog/static/135834960201001512358686/常量区只读不可写。静态区可读写。示例//所有代码,在Code segment//在Global data segment,const只是个语法标识,不放Constant segmentconst double
2014-07-28 15:41:43
898
原创 C++技术问题总结-第0篇 类型转换
从今天开始,对C++常用技术做个总结。参考书籍:《C++Primer》、《C++对象模型》、《设计模式》、《Windows核心编程》、《STL解密》。1. static_cast等四个cast的具体意义C++类型转换:隐式转换和显式转换。显式转换:static_cast、dynamic_cast、reinterpret_cast、const_cast。1.1
2014-07-24 10:03:10
1128
原创 C++调用Java的Jar包
一个简单需求:用C++调用Jar包。实现基本思路:调用CreateProcess API来启动cmd.exe运行jar包。调用类CJarAppCall。JarAppCall.h#pragma onceclass CJarAppCall{public: CJarAppCall(void); ~CJarAppCall(void); /*
2014-06-05 16:05:08
16842
4
原创 编程之美之买书问题
这个问题来自《编程之美》这本书,应该在微软面试中出现过。是一个典型的动态规划问题。问题描述《哈利波特》系列一共有五卷,每一卷售价均8欧元。同时买不同的卷(各一本)有折扣,具体如下表所示。购买方案折扣2卷5%3卷10%4卷20%5卷25%在一份订单中,根据购买的卷数及本数,可以有多种不
2014-05-20 19:46:05
3920
原创 Clouda聊天室实践
1、 Clouda说明Clouda是简单,可依赖的实时Javascript框架。对一个想开发移动webapp的开发者来说,可以使用clouda开发框架,实现一个功能和体验与native app齐平的轻应用。官网:http://cloudajs.org/。百科:http://baike.baidu.com/link?url=iC4ygMr35qdfNgZb12pZORU621YPYP
2013-11-14 16:01:18
3725
3
原创 VC操作MPP文件
1. 背景简介因需要对Office系列进行程序操作,特需要使用COM编程。Microsoft Project生成进度计划,office家族软件,文件后缀为.mpp。具体信息见维基百科http://zh.wikipedia.org/wiki/Microsoft_Project。读取MPP文件,网络上示例基本为C#,因为我所使用的是VC,C#代码只能做参考了。因为COM
2013-08-12 15:12:02
3017
COM编程VS实践
2013-08-09
SQLite使用示例
2012-10-15
C++局域网通信IM
2012-10-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人