
基础编程
文章平均质量分 67
segen_jaa
这个作者很懒,什么都没留下…
展开
-
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 · 348 阅读 · 0 评论 -
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 · 1086 阅读 · 0 评论 -
C++技术问题总结-第6篇 STL迭代器相关
1、STL为什么要用迭代器 iterator模式定义:提供一种方法,使之能够依序巡访某个聚合物(容器)所含的各个元素,而又无需暴露该聚合物的内部表述方式。 STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。迭代器便起这个作用。 2、迭代器是怎么实现的 迭代器实现示例。原创 2014-08-25 17:36:49 · 1015 阅读 · 0 评论 -
C++技术问题总结-第10篇 MFC中SendMessage与PostMessage异同
应用程序消息有三个来源:硬件消息(鼠标键盘等外设)、PostMessage消息、SendMessage消息,都可以发送消息事件来驱动程序执行。消息流图如下。硬件消息响应流程如下。①消息进入系统消息队列。②消息分发到应用程序消息队列。③应用程序循环获取消息。④消息处理函数执行。PostMessage直接进入上述步骤②,将消息放入消息队列中,然后立刻返回。Sen原创 2014-09-09 16:04:10 · 1913 阅读 · 0 评论 -
C++技术问题总结-第9篇 智能指针
智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,能够在适当的时间自动删除指向的对象外,能够确保正确的销毁动态分配的对象。标准库的智能指针为auto_ptr。boost库的智能指针族在功能上做了扩展。1.auto_ptr auto_ptr注意事项如下。①auto_ptr不能共享所有权。②auto_ptr不能指向数组。③auto_ptr不能作为原创 2014-09-05 14:40:42 · 1220 阅读 · 0 评论 -
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 · 1790 阅读 · 0 评论 -
C++技术问题总结-第3篇 线程同步
线程同步的方法线程同步有多种方法。用户模式下的线程同步:关键段(critcal section)。内核模式下的线程同步:事件、计时器、信号量、互斥量。1.关键段用户模式下的同步,主要API如下。InitializeCriticalSection、DeleteCriticalSection、EnterCriticalSection、LeaveCriticalSection原创 2014-08-07 14:42:42 · 1221 阅读 · 0 评论 -
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 · 1340 阅读 · 0 评论 -
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 · 17003 阅读 · 4 评论 -
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 · 3774 阅读 · 3 评论 -
Eclipse+CXF框架开发Web服务实战
CXF开发Web服务,服务端与客户端实例。原创 2013-10-22 15:08:02 · 27684 阅读 · 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 · 3107 阅读 · 0 评论 -
COM编程VS实践
目录1. COM实践简介... 22. COM实践VC. 22.1. VC创建COM组件... 22.2. 使用VC调用... 52.3. 使用C#调用... 83. COM实践C#. 93.1. C#创建COM组件... 93.2. 使用VC调用... 123.3.原创 2013-08-09 09:25:11 · 4468 阅读 · 1 评论 -
R语言初体验
R是用于统计分析和图形化的计算机语言及分析工具,为了保证性能, 其核心计算模块是用C、C++和Fortran编写的。同时为了便于使用,它提供了一种脚本语言,即R语言。R语言和贝尔实验室开发的S语言类似。R支持 一系列分析技术,包括统计检验、预测建模、数据可视化等等。在CRAN(http://cran.r-project.org) 上可以找到众多开源的扩展包。1、到官网(http://www.r原创 2013-05-28 22:40:20 · 1783 阅读 · 0 评论 -
c++自定义计时器使用
背景:在非窗口类中需要使用定时器,来实现心跳检测功能。参考:http://blog.youkuaiyun.com/bookish_2010_prj/article/details/6631938http://blog.sina.com.cn/s/blog_4dbcd2730100xc69.html核心API:SetTimer。vs2005创建对话框示例工程。效果图如下。原创 2012-06-15 16:20:27 · 3829 阅读 · 0 评论 -
Ubuntu下GO语言实践
Go是一个开源项目,采用BSD授权协议。Go语言是Google发布的开源编程语言。根据最近几年IT界的发展趋势,我领悟到跟着Google有肉吃,知耻而后勇,研究一下Google天才们20%项目研发的新锐语言。接下来,与GO来个亲密接触,输出开天辟地的“Hello World!”。参考网站:http://code.google.com/p/golang-china/wiki/Inst原创 2013-03-21 12:38:04 · 2958 阅读 · 0 评论 -
PHP上传文件实现
实现代码见下。upload.html 上载文件表单 文件: upload.php 上传结果 <?php $uploaddir = "./files/";//设置文件保存目录 注意包含/ $typ转载 2013-03-17 15:39:31 · 942 阅读 · 0 评论 -
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 · 2103 阅读 · 0 评论 -
C++技术问题总结-第7篇 map、vector、list、deque各自的使用场合
map是关联式的,vector、list、deque是序列式的。 map:底层机制RB-tree(红黑树),元素自动排序,键值对。 vector:操作方式与array相似,动态空间增长。是连续性空间,支持随机访问。 优点:Ø 内存动态增长,不需要指定内存大小。Ø 支持随机访问,即支持[]和vector.at()。 缺点:Ø 在内部进行插入原创 2014-08-27 17:23:42 · 2022 阅读 · 0 评论 -
模式步步演化组合使用示例
本篇模拟随着需求的变化,模型步步演化,做个杀鸡使用牛刀的组合示例。 参考:设计模式之复合模式。 系统:Windows 7 64位 IDE:VS 20121、策略 需求:池塘边有一群红头鸭(RedheadDuck)和绿头鸭(MallarDuck),也有观察人员放置的鸭鸣器(DuckCall),还有附近儿童在玩的橡皮鸭(RubberDuck)。我们需要可视化鸭子叫声。 鸭子叫声:呱呱(quac原创 2016-07-05 18:12:00 · 1610 阅读 · 0 评论 -
STL Sort的五种使用示例
Sort是一种高效的排序算法,常使用的五种示例如下。 示例代码采用编译器vs2012,任何一款支持c++11标准的编译器都可以运行。包含头文件#include <iostream>#include <vector>#include <algorithm>#include <functional>1、重载操作符 重载对应操作符<、>、<=、>=来实现排序 代码namespace SORT_原创 2016-04-14 21:28:05 · 3026 阅读 · 0 评论 -
检测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 · 1218 阅读 · 0 评论 -
单例模式的多线程安全支持(C++)
单例模式的多线程支持,可以分两种类型。1、懒汉模式C++11要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++11以前,仍需要加锁。Lock/UnLock可以采用boost中的技术技术。class CSingleton{private: CSingleton(){}public: static CSingleton* getInstance(原创 2016-01-14 18:03:08 · 2371 阅读 · 0 评论 -
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 · 1568 阅读 · 1 评论 -
智能指针仿真-002-值型智能指针
1. 概述 本篇对值型的智能指针进行仿真,这类指针所有权是不能共享的。 仿真指针主要有。 1) 旧式stl智能指针:auto_ptr。 2) Boost智能指针:scoped_ptr。 3) C++ 11 tr1的智能指针:unique_ptr。由于不能进行所有权共享,故这类指针对复制和赋值运算都做了限制处理。在使用过程中涉及到所有权的时候要小心谨慎,防止踩雷。2. au原创 2015-09-20 15:09:37 · 662 阅读 · 0 评论 -
智能指针仿真-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 · 758 阅读 · 0 评论 -
智能指针仿真-001-基础篇
1. 前言 本次技术研究关注C++中智能指针的原理,对各种类型指针进行仿真实现,将底层核心源码一段段曝光出来,从头到外理一遍。 对应文章有三篇,从简入深。 1) 《智能指针仿真-001-基础篇》,介绍所需基础知识。 2) 《智能指针仿真-002-值型智能指针》,仿真值型智能指针。 3) 《智能指针仿真-003-共享智能指针》,仿真共享智能指针。平时看侯俊杰的书(翻译及原著)比较多,对原创 2015-09-20 14:52:30 · 745 阅读 · 0 评论 -
C++技术问题总结-第14篇 常用设计模式及其应用场景
设计模式是对设计原则的具体化。用江湖话说就是武林秘籍,总结出来的一些固定套路,编程界的《葵花宝典》。个人意见,编程过程中设计原则进行遵循,对设计模式进行借鉴。完全按照套路来,有时反而简单问题复杂化。 常用的模式及其场景如下。1) 单例模式。 单例模式是一种常用的软件设计模式。 在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保原创 2014-12-12 17:23:10 · 4269 阅读 · 0 评论 -
C++技术问题总结-第13篇 调用约定有哪些,有什么不同
调用约定(Calling convention),决定以下内容:a. 函数参数的压栈顺序。b. 由调用者还是被调用者把参数弹出栈。c. 以及产生函数修饰名的方法。 常用的调用约定为__stdcall、__cdecl、__fastcall。1) __stdcall。StandardCall的缩写,约定内容:a. 参数从右向左压入堆栈。b. 函数被调用者修改堆栈。原创 2014-12-12 11:22:22 · 1021 阅读 · 0 评论 -
RabbitMQ使用实践
RabbitMQ使用实践参考网站:http://blog.chinaunix.net/topic/surpershi/http://blog.youkuaiyun.com/lwkcn/article/details/25086467http://snoopyxdy.blog.163.com/blog/static/60117440201352615631930/1、简介 MQ原创 2015-01-28 15:33:56 · 9195 阅读 · 1 评论 -
算法学习-第0篇 从Fibonacci开始
学习资源《Algorithms》,作者S.Dasgupta,C.H.Papadimitriou,and U.V.Vazirani。电子版可到资源库中下载http://download.youkuaiyun.com/detail/segen_jaa/7900765。1、问题描述Fibonacci数列想必大家都比较熟悉,后一位数字是前两位的和。0,1,1,2,3,5,8,13,21,34对原创 2014-10-13 15:09:44 · 1347 阅读 · 1 评论 -
C++技术问题总结-第11篇 网络通信中主机序网络序
网络通信经常涉及到字节序转化,接下来理解主机序和网络序有什么异同。①主机字节顺序HBO(Host Byte Order)采用小头序(little-endian),从低到高的顺序存储。低位字节排放在内存的低地址端,高位地址排放在高位地址端。②网络字节顺序NBO(Network Byte Order)采用大头序(big-endian),从高到低的顺序存储。高位字原创 2014-10-10 14:26:56 · 1330 阅读 · 0 评论 -
C++技术问题总结-第12篇 设计模式原则
设计模式六大原则,参见http://www.uml.org.cn/sjms/201211023.asp。 1. 单一职责原则定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。解决方案:遵循单一职责原则。分别建原创 2014-10-10 15:09:34 · 1156 阅读 · 0 评论 -
C++技术问题总结-第8篇 STL内存池是怎么实现的
STL内存池机制,使用双层级配置器。第一级采用malloc、free,第二级视情况采用不同策略。这种机制从heap中要空间,可以解决内存碎片问题。1.内存申请流程图 简要流程图如下。2.第二级配置器说明 第二级配置器目的解决小型区块造成的内存碎片问题。 使用自由链表(free-list)技巧。主动将任何小额区块的内存需求量上调至8的倍数。如需求30,则原创 2014-09-04 10:15:16 · 2796 阅读 · 0 评论 -
C++面试试题0002
C++面试试题0002C++面试题专栏:http://www.mianwww.com/html/category/it-interview/cpp 1. C++中为什么用模板类?(1)可用来创建动态增长和减小的数据结构。(2)它是类型无关的,因此具有很高的可复用性。(3)它在编译时而不是运行时检查数据类型,保证了类型安全。(4)它是平台无关的,可移植性原创 2013-02-28 07:58:36 · 1348 阅读 · 0 评论 -
关于2的补码
文章来源:http://www.ruanyifeng.com/blog/2009/08/twos_complement.html关于2的补码作者: 阮一峰日期: 2009年8月 5日问一个基本的问题。负数在计算机中如何表示?举例来说,+8在计算机中表示为二进制的1000,那么-8怎么表示呢?很容易想到,可以将一个二进制位(bit)专门规定为符号位,它等于0时就表示正转载 2013-03-11 09:28:31 · 850 阅读 · 0 评论 -
MFC上下浮动与渐入渐出消息提示框实现
类似QQ与360软件,消息提示有两种。上下浮动、渐入渐出。1、上下浮动提示框实现机制,定时器响应上下浮动消息。主要API:MoveWindow。源码如下UpDownTipDlg.h、UpDownTipDlg.cpp。UpDownTipDlg.h/**@brief 上下浮动提示框*@date 2012-8-9*/#pragma once//原创 2012-08-09 18:05:07 · 4293 阅读 · 0 评论 -
C++死锁解决心得
一、 概述C++多线程开发中,容易出现死锁导致程序挂起的现象。关于死锁的信息,见百度百科http://baike.baidu.com/view/121723.htm。解决步骤分为三步:1、检测死锁线程。2、打印线程信息。3、修改死锁程序。二、 程序示例VS2005创建支持MFC的win32控制台程序。代码见示例代码DeadLockTest.cpp。/原创 2012-08-08 15:40:43 · 14882 阅读 · 0 评论 -
ADO编程——获取表的所有字段(C++)
我们有时候需要通过程序获取表的所有字段,那么用ADO提供的接口获取还是很方便的。vs2005创建控制台程序,语言为C++。核心代码如下:struct TableField{ TableField() : strFieldName(_T("")) , nFieldType(0) , nFieldLength(0)原创 2012-07-06 14:42:04 · 5541 阅读 · 0 评论 -
C++ dynamic_cast小心得
dynamic_cast运算符可以在执行期决定真正的类型。这里将一下进行类层次下行转化时一点小心得。vs2005创建控制台程序。源码如下:DynamicCastTest.cpp#include "stdafx.h"struct StBaseInfo{ int nID;};struct StExtendInfo : public StBaseInf原创 2012-07-06 09:18:54 · 2837 阅读 · 0 评论