自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Segen_Jaa的专栏

从最简单的积累开始

  • 博客(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 2549 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 267

原创 C++中实现不可复制的类

使用场景在C++中实现不可复制的类,源码剖析的是boost中的noncopyable类。C++11实现要实现对象的不可复制,需要在拷贝构造和赋值操作上做文章。C++11中比较优雅,直接用= delete做函数删除即可。default关键字指使用编译器默认生成的函数,不再自己实现构造和析构。具体代码如下。 class noncopyable { public: noncopyable() = default; ~noncopyable()

2020-08-13 22:01:17 319

原创 精简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 507

原创 模式步步演化组合使用示例

本篇模拟随着需求的变化,模型步步演化,做个杀鸡使用牛刀的组合示例。 参考:设计模式之复合模式。 系统:Windows 7 64位 IDE:VS 20121、策略 需求:池塘边有一群红头鸭(RedheadDuck)和绿头鸭(MallarDuck),也有观察人员放置的鸭鸣器(DuckCall),还有附近儿童在玩的橡皮鸭(RubberDuck)。我们需要可视化鸭子叫声。 鸭子叫声:呱呱(quac

2016-07-05 18:12:00 1552

原创 STL Sort的五种使用示例

Sort是一种高效的排序算法,常使用的五种示例如下。 示例代码采用编译器vs2012,任何一款支持c++11标准的编译器都可以运行。包含头文件#include <iostream>#include <vector>#include <algorithm>#include <functional>1、重载操作符 重载对应操作符<、>、<=、>=来实现排序 代码namespace SORT_

2016-04-14 21:28:05 2938

原创 检测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 1179

原创 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 1495 1

原创 单例模式的多线程安全支持(C++)

单例模式的多线程支持,可以分两种类型。1、懒汉模式C++11要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++11以前,仍需要加锁。Lock/UnLock可以采用boost中的技术技术。class CSingleton{private: CSingleton(){}public: static CSingleton* getInstance(

2016-01-14 18:03:08 2296

原创 智能指针仿真-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 720

原创 智能指针仿真-002-值型智能指针

1. 概述 本篇对值型的智能指针进行仿真,这类指针所有权是不能共享的。 仿真指针主要有。 1) 旧式stl智能指针:auto_ptr。 2) Boost智能指针:scoped_ptr。 3) C++ 11 tr1的智能指针:unique_ptr。由于不能进行所有权共享,故这类指针对复制和赋值运算都做了限制处理。在使用过程中涉及到所有权的时候要小心谨慎,防止踩雷。2. au

2015-09-20 15:09:37 599

原创 智能指针仿真-001-基础篇

1. 前言 本次技术研究关注C++中智能指针的原理,对各种类型指针进行仿真实现,将底层核心源码一段段曝光出来,从头到外理一遍。 对应文章有三篇,从简入深。 1) 《智能指针仿真-001-基础篇》,介绍所需基础知识。 2) 《智能指针仿真-002-值型智能指针》,仿真值型智能指针。 3) 《智能指针仿真-003-共享智能指针》,仿真共享智能指针。平时看侯俊杰的书(翻译及原著)比较多,对

2015-09-20 14:52:30 704

原创 hadoop2.7.0实践- WordCount

说明:本文档为wordcount的mapreduce job编写及运行文档。 操作系统:Ubuntu14 x64位 Hadoop:Hadoop 2.7.0

2015-08-20 22:24:14 9917

原创 hadoop2.7.0实践-环境搭建

本文档为hadoop搭建实践文档,相关理论可到hadoop官网查看学习。 操作系统:Ubuntu14 x64位 Hadoop:Hadoop 2.7.0

2015-08-20 22:04:38 6356

原创 虚函数相关问题探索

虚函数相关问题探索本篇文章中对虚函数做五个方面的探索。 1) 虚函数单一继承对象模型。 2) 虚表指针与虚表的创建释放时机。 3) 析构函数设置为虚函数。 4) 构造函数调用虚函数。 5) 析构函数调用虚函数。1. 虚函数单一继承对象模型 参见网址:http://www.cnblogs.com/taoxu0903/archive/2008/02/04/1064234.ht

2015-06-30 17:19:54 811

原创 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 9086 1

原创 C++技术问题总结-第15篇 内存泄露有哪些方法定位,崩溃有哪些方法定位

Visual C++内存泄露检测,可采用VLD工具。       VLD:Visual Leak Detector。VLD是一款用于Visual C++的免费的内存泄露检测工具。他的特点有:可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;可以得到泄露内存的完整数据;可以设置内存泄露报告的级别;并且是开源免费的。       官方网址:http://vld.codep

2014-12-15 14:19:13 2682

原创 C++技术问题总结-第14篇 常用设计模式及其应用场景

设计模式是对设计原则的具体化。用江湖话说就是武林秘籍,总结出来的一些固定套路,编程界的《葵花宝典》。个人意见,编程过程中设计原则进行遵循,对设计模式进行借鉴。完全按照套路来,有时反而简单问题复杂化。       常用的模式及其场景如下。1) 单例模式。       单例模式是一种常用的软件设计模式。       在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保

2014-12-12 17:23:10 4154

原创 C++技术问题总结-第13篇 调用约定有哪些,有什么不同

调用约定(Calling convention),决定以下内容:a. 函数参数的压栈顺序。b. 由调用者还是被调用者把参数弹出栈。c. 以及产生函数修饰名的方法。 常用的调用约定为__stdcall、__cdecl、__fastcall。1) __stdcall。StandardCall的缩写,约定内容:a. 参数从右向左压入堆栈。b. 函数被调用者修改堆栈。

2014-12-12 11:22:22 980

原创 算法学习-第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 1278 1

原创 C++技术问题总结-第12篇 设计模式原则

设计模式六大原则,参见http://www.uml.org.cn/sjms/201211023.asp。 1. 单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建

2014-10-10 15:09:34 1128

原创 C++技术问题总结-第11篇 网络通信中主机序网络序

网络通信经常涉及到字节序转化,接下来理解主机序和网络序有什么异同。①主机字节顺序HBO(Host Byte Order)采用小头序(little-endian),从低到高的顺序存储。低位字节排放在内存的低地址端,高位地址排放在高位地址端。②网络字节顺序NBO(Network Byte Order)采用大头序(big-endian),从高到低的顺序存储。高位字

2014-10-10 14:26:56 1301

原创 C++技术问题总结-第10篇 MFC中SendMessage与PostMessage异同

应用程序消息有三个来源:硬件消息(鼠标键盘等外设)、PostMessage消息、SendMessage消息,都可以发送消息事件来驱动程序执行。消息流图如下。硬件消息响应流程如下。①消息进入系统消息队列。②消息分发到应用程序消息队列。③应用程序循环获取消息。④消息处理函数执行。PostMessage直接进入上述步骤②,将消息放入消息队列中,然后立刻返回。Sen

2014-09-09 16:04:10 1872

原创 C++技术问题总结-第9篇 智能指针

智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,能够在适当的时间自动删除指向的对象外,能够确保正确的销毁动态分配的对象。标准库的智能指针为auto_ptr。boost库的智能指针族在功能上做了扩展。1.auto_ptr    auto_ptr注意事项如下。①auto_ptr不能共享所有权。②auto_ptr不能指向数组。③auto_ptr不能作为

2014-09-05 14:40:42 1182

原创 C++技术问题总结-第8篇 STL内存池是怎么实现的

STL内存池机制,使用双层级配置器。第一级采用malloc、free,第二级视情况采用不同策略。这种机制从heap中要空间,可以解决内存碎片问题。1.内存申请流程图    简要流程图如下。2.第二级配置器说明    第二级配置器目的解决小型区块造成的内存碎片问题。    使用自由链表(free-list)技巧。主动将任何小额区块的内存需求量上调至8的倍数。如需求30,则

2014-09-04 10:15:16 2761

原创 C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合

map是关联式的,vector、list、deque是序列式的。    map:底层机制RB-tree(红黑树),元素自动排序,键值对。    vector:操作方式与array相似,动态空间增长。是连续性空间,支持随机访问。    优点:Ø 内存动态增长,不需要指定内存大小。Ø 支持随机访问,即支持[]和vector.at()。    缺点:Ø 在内部进行插入

2014-08-27 17:23:42 1981

原创 C++技术问题总结-第6篇 STL迭代器相关

1、STL为什么要用迭代器    iterator模式定义:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。    STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。迭代器便起这个作用。  2、迭代器是怎么实现的    迭代器实现示例。

2014-08-25 17:36:49 981

原创 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 2062

原创 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 1045

原创 C++技术问题总结-第3篇 线程同步

线程同步的方法线程同步有多种方法。用户模式下的线程同步:关键段(critcal section)。内核模式下的线程同步:事件、计时器、信号量、互斥量。1.关键段用户模式下的同步,主要API如下。InitializeCriticalSection、DeleteCriticalSection、EnterCriticalSection、LeaveCriticalSection

2014-08-07 14:42:42 1175

原创 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 1724

原创 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 1271

原创 基于Canvas的Char.js库使用

Chart.js是基于Html5 Canvas的图表库。官网:http://www.chartjs.org/参考文档:http://www.chartjs.org/docs/支持六种图表,对应源码相对目录如下。bardoughnutlinepiepolar-arearadar

2014-07-28 20:33:24 3407 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 885

原创 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 1116

原创 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 16750 4

原创 编程之美之买书问题

这个问题来自《编程之美》这本书,应该在微软面试中出现过。是一个典型的动态规划问题。问题描述《哈利波特》系列一共有五卷,每一卷售价均8欧元。同时买不同的卷(各一本)有折扣,具体如下表所示。购买方案折扣2卷5%3卷10%4卷20%5卷25%在一份订单中,根据购买的卷数及本数,可以有多种不

2014-05-20 19:46:05 3892

原创 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 3694 3

原创 Eclipse+CXF框架开发Web服务实战

CXF开发Web服务,服务端与客户端实例。

2013-10-22 15:08:02 27556 10

原创 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 2926

COM编程VS实践

开发工具:VS2005。 COM实践,着重于与VC与C#组件的互相调用。 实现分两方面: 1、VC与C#分别调VC COM组件。 2、VC与C#分别调C# COM组件。

2013-08-09

SQLite使用示例

sqlite使用的简单示例。 vs2005+win32程序+c语言。 具体配置步骤可见我的博客:http://blog.csdn.net/segen_jaa/article/details/7938959。

2012-10-15

C++局域网通信IM

MFC程序,适用于局域网,分为服务端/客户端。 采用TCP协议。 服务端支持同时和多个客户端通信。 主要用于学习,一个初步Demo。 使用Windows socket。 异步通信关键API:WSAAsyncSelect。

2012-10-12

MongoDB权威指南-中文版

中文版指南,值得学习。 NoSQL数据库典范。

2012-05-18

Windows网络编程技术-PDF版

详细讲解Windows socket编程方法。 提供大量示例代码,TCP/UDP通信示例,Ping程序模拟等。 该文档字迹清晰,方便阅读。

2012-05-16

C++字体安装与卸载

程序为C++实现字体安装于卸载。 界面为MFC对话框。 相关API使用,参考MSDN。

2012-02-27

Access数据库对比工具

个人写的Access数据库对比, 可实现表结构和数据的对比。 采用ADO操作表。 需要的同学可以在这个基础上进行改写。

2011-11-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除