聚焦爬虫(Focused Crawler)
三个主要的组成部分:
主题爬行器
检索器
管理平台
主题爬行器
主题爬行器是实现基于主题的信息采集功能的核心组成部分,一般由爬行队列、网络连接器、主题模型、内容相关度分析以及链接相关度分析等功能模块组成
爬行队列是由一系列主题相关度较高的URL组成。爬行队列在主题搜索引擎进行主题搜索之初是由种子站点组成,这些种子站点可以由该行业领域的专家给出,也可以借助一些权威网站 自动生成。在搜索过程开始之后,系统发现新的URL,并根据主题相关度对其排序后补充到爬行队列中。网络连接器则根据爬行队列中的URL,与网络建立连接后以下载其所指页面内...
作业对象(Job Objects)
Windows提供了一个作业(job)内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么。可以将作业对象想象成一个进程容器。也可以创建只包含一个进程的作业,用来对进程施加平时不能施加的限制。
Thread Pools
A thread pool is a collection of worker threads that efficiently execute asynchronous callbacks on behalf of the application. The thread pool is primarily used to reduce the number of application threads and provide management of the worker threads. Applications can queue work items...
Io Completion Port
IO完成端口
背后理论:并发运行的线程的数量必须有一个上限。
缺点:需要为每个客户请求创建一个新的线程。
设计初衷:与线程池配合使用,仅在一个进程中使用。唯一一个创建内核对象时不需要指定安全描述符。
线程池中的所有线程应该执行同一个函数。
hCompletionPort
描述IO完成端口的数据结构
设备列表
IO完成队列(先入先出)
等待线程队列(后入先出)
已释放线程列表
已暂停线程列表
Posted on 18 May 2014
Tool
Flash Redirect Read Me
Flash Hook Function
FlashLoadMovie
HRESULT WINAPI FlashLoadMovie(/[in]/CONST VOID pThisObject,
/[in]/int iLayer, /[in]*/CONST BSTR bstrUrl)
未见调用
FlashPutVars
HRESULT WINAPI FlashPutVars(
/[in]/ CONST VOID pThisObject, /[in]*/ CONST BSTR bstrVars)
bstrVars ...
Posted on 11 May 2014
Tool
MFC CView Paint
CtrlColor 这个选择颜色的调色板
将要绘制时调用。
这货是个调色板,父窗口绘制控件之前会相应改消息,获取指定控件的背景颜色。
WM_CTLCOLOR
afx_msg HBRUSH OnCtlColor(CDC pDC, CWnd pWnd, UINT nCtlColor);
pDC
Contains a pointer to the display context for the child window. May be temporary.
pWnd
Contains a pointer to the control asking fo...
MFC CFont
CFont::CreateFont
CFont::CreateFontIndirect
CFont::CreatePointFont
CFont::CreatePointFontIndirect
BOOL CreateFont(int nHeight, int nWidth, int nEscapement,
int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline,
BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision,...
Posted on 27 Apr 2014
Tool
写一个线程类
创建线程
beginthread、beginthreadex
_CRTIMP uintptr_t __cdecl _beginthread (_In_ void (__cdecl * _StartAddress) (void *),
_In_ unsigned _StackSize, _In_opt_ void * _ArgList);
_CRTIMP void __cdecl _endthread(void);
_CRTIMP uintptr_t __cdecl _beginthreadex(_In_opt_ void * _Security, ...
Mshtml
MSHTML 是微软的窗口操作系统(Windows)搭载的网页浏览器—Internet Explorer的排版引擎的名称,(又称为Trident)。
MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,通过其提供的标准接口,可以访问指定网页的所有元素。
MSHTML提供了丰富的HTML文档接口,有IHTMLDocument、IHTMLDocument2、…、IHTMLDocument7等7种。其中,IHTMLDocument只有一个Script属性,是管理页面脚本用的;IHTMLDocument2接口跟C#的HtmlDocument类(...
IHTMLDocument2 接口
获取HTML文档信息,查看或修改HTML文档中的HTML元素以及文本。
http://www.cnblogs.com/linyawen/archive/2011/09/01/2161743.html
http://mgd0629.blog.163.com/blog/static/64948503200782433531902/
msdn.microsoft.com/en-us/library/aa752574(v=vs.85).aspx
Mysql
MySQL
淘宝MySQL
MySQL Workbench
MySQL Workbench 是专为数据库架构师、开发人员和 DBA 打造的一个统一的可视化工具。MySQL Workbench 提供了数据建模工具、SQL 开发工具和全面的管理工具(包括服务器配置、用户管理、备份等)。MySQL Workbench 可在 Windows、Linux 和 Mac OS 上使用。
MySQL Community Edition
MySQL Community Edition is the freely downloadable version of the world's ...
Posted on 04 Apr 2014
Test
使用gtest/gmock做单元测试
1.下载编译gmock源码
由于gmock本身包含gtest源码,因此我们只编译gmock引入gmock头文件即可。
从Google C++ Mocking Framework上下载googlemock-read-only源码,使用VC2010编译gmock.sln生成成Debug版本的gmock.lib、gmock_main.lib。
2.在项目中使用gmock
原项目名称为ProjName,测试项目为ProjNameUnitTest,目录结构如下:
├─ProjComm
│ ├─include
│ │ └─gmock
│ │ ...
Posted on 03 Apr 2014
Coder
Code Style
1.所有的函数都应该有声明以及定义,不应该让函数调用的顺序依赖函数定义的先后。
include "stdafx.h"
include <strsafe.h>
include <Windows.h>
include "Header.h"
include "ProOthersA.h"
include "ProOthersB.h"
Posted on 03 Apr 2014
Tool
CComVariant
Run At A Low Integrity Level
Designing Applications to Run at a Low Integrity Level
An easy way to run an application process at a low integrity level is to set the integrity level of the executable program file to low integrity. When that image file is launched, the application process is star...
HRESULT类型返回值
HRESULT的定义
HRESULT定义在winnt.h中,把HRESULT当成LONG算了(32位,8个字节)。
#ifndef _HRESULT_DEFINED
#define _HRESULT_DEFINED
#ifdef __midl
typedef LONG HRESULT;
#else
typedef __success(return >= 0) long HRESULT;
#endif // __midl
#endif // !_HRESULT_DEFINED
HRESULT的含义是Here’s the Result。H代表Here...
grep 与 grepWin
grep
grep
The grep command searches one or more input files for lines containing a match to a specified pattern. By default, grep prints the matching lines.
grepWin
regular expression search for Windows
grepWin
grepWin is a simple search and replace tool which can use regula...
Posted on 02 Apr 2014
C++
析构函数抛出异常
C++中禁止异常信息传递到析构函数外
析构函数中不得直接或间接抛出异常;原因:析构函数中抛出异常可能导致堆栈展开(stack unwind)时异常嵌套,程序无法正常捕捉异常,直接终止;
如果析构时调用会跑出异常的函数,则需要捕获异常,但什么都不做,防止异常被传递到析构函数外。
Session::~Session()
{
try {
logDestruction(this);
}
catch (...) { }
}
构造函数抛出异常
C++ 里面当构造函数抛出异常时,其会调用构造函数里面已经创建对象的析构函数,但是对以自己的析构函数没有调用,就可能...
Excel批注转换成单元格
Sub Annotations()
Dim C As Comment
For i = 1 To Worksheet.Count
For Each C In Worksheets(i).Comments
C.Parent.Value = C.Parent.Value & "Annotations:" & C.Text
Next
Next
End SUb
在XML数据中包含HTML数据
<TestData>
<FlashFormatConvert>
<!--正常值测试-->
<TestCase object='<OBJECT style="VISIBILITY: hidden" ><PARAM NAME="_cy" VALUE="11112"><embed src="test" width="560" height="420"></embed></OBJECT>' embed='<embed...
Posted on 01 Apr 2014
Tool
VS远程调试
场景:
现有两台主机一台用于开发DevComputer(192.168.1.0),另一台用于测试RunComputer(192.168.1.1),现在使用DevComputer调试一个运行在RunComputer上并且被一个Run.exe加载的Run.dll。
1.在DevComputer上找到Remote Debugger,目录在:
C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger
并找到合适于RunComputer的版本,VS提供ia64,x64,x86。将其复...
Matlab Wiki
Matlab Wiki(http://zh.wikipedia.org/wiki/MATLAB)
Matlab Cn("http://www.mathworks.cn/products/matlab/")
Matlab Wiki
Matlab Cn
MATLAB(矩阵实验室)是MATrix LABoratory的缩写,是一款由美国The MathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及...
Posted on 01 Apr 2014
Tool
阅尽世间繁华最后只得一人尔的Checklist检查
一件比较忧伤的事情是,写了300行代码之后,需要参照Check List中的150个Check Point进行Check,第150个Check Point内容是,Check另一份Check List,之后是另外300个Check Point。
Posted on 01 Apr 2014
Tool
cURL
cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。
libcurl支持的平台有Solaris、NetBSD、FreeBSD、OpenBSD、Darwin、HP-UX、IRIX、AIX、Tru64、Linux、UnixWare...
Posted on 01 Apr 2014
Tool
邪恶的C++指针
对于习惯PASCAL、PYTHON、JAVA等语言的程序员来说,C语言的指针很邪恶。就算是C高手,在指针上,也肯定吃了不少苦头。C++加强了类型安全,是不是指针方面的问题就会少一些呢?
现实是很残酷的,C++中指针可能造成的问题,比C只多不少。C指针会出的问题,C++中一个不落。C++还有一些C中没有的指针相关问题,有一些甚至是C++的“特产”,所有其它语言中都没有的。
C++中,有构造函数的类必须使用new进行分配,否则不安全(malloc分配的必须手动调用placement new构造);
Malloc只分配内存,不负责调用构造函数。如果不调用构造函...
Posted on 30 Mar 2014
Tool
Pipe
使用C++实现UNICODE文本读写
写入Unicode文本
范例:
void write_unicode()
{
// 写入 Unicode 内容
TCHAR* recordfilename=_T("自然_井民全_练习项目1.mp3");
// 开启文件: (注意: 要用 wb 不能用 wt)
// 请放心! 写入后还是可以用 Notepad 看到内容(This is a Unicode document file)
FILE *fp=_tfopen(_T("RecordInfo_API.txt"),_T("wb"));
if(f...
客户端等待服务端事件
应用场景:客户端,服务端启动顺序未定,客户端需要等到服务端的一个事件才能继续执行。
定义事件名
//! 等待事件名
#define INW_WAIT_EVENT _T("Inw_Wait_Event")
客户端代码
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow...
Posted on 22 Mar 2014
Tool
代码审查
前戏
又尼玛做代码审查了,每次的代码审查,特别是群审的时候,总让我有种脱光衣服,被各种彪形大汉围观揉捏的感觉,不仅围观指导,还要上下其手,研究新的体位。
遥想当年刚毕业,我那也是清纯阳光啊有木有?看到诸多前辈热心审查那也是湿了一片啊有木有?被灌下满满的心灵鸡汤,让我对前途充满无限信心啊有木有?
现如今,进进出出几百回,一朵娇羞早已怒放,不等压倒我已躺好,直叫人感概际遇无常。
审吧!
... ...
尼玛能不能别审查别人的代码,然后让我来改?能不能谁的孩子谁领回去?我不是来自马勒的戈壁老王。
代码审核就是N多处女座人围攻一个其他正常星座的人,同时也是学院风与企业风...
共享节(Data Segment)
使用dumpbin命令查看二进制文件
To run DUMPBIN, use the following syntax:
DUMPBIN [options] files...
Specify one or more binary files, along with any options required to control the information. DUMPBIN displays the information to standard output. You can either redirect it to a file or...
Google开源C++单元测试框架Google Test(GTest)
官方网站:
GoogleTest
官方使用文档:
GoogleTestPrimer
GoogleTestAdvancedGuide
玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
uafxcwd.lib;Libcmtd.lib;gmockd.lib;wininet.lib;%(AdditionalDependencies)
Google Mock
官方网站:
Google C++ Mocking Framework
Regsvr32
Regsvr32命令用于注册动态链接库文件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。
用法:
regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname
/u -解除服务器注册
/s -无声;不显示消息框
/i -调用DllInstall,给其传递一个可选[cmdline];跟/u参数一起使用时卸载DLL。
/n -不用调用DLLRegisterServer。这个参数必须跟/i一起使用。
/? -查看帮助信息
dllname -Activex控件文件名。
Notes
+ 建...
交叉签名过程
1.将inanwong2014.pfx导入到个人,证书密码为inanwong.io;
2.将"WoSign代码签名中级根证书"以及"交叉签名根证书"导入到中级证书颁发机构;
3.使用命令行签名:
SignTool.exe sign /v /ac MS_XS.cer /s my /t http://timestamp.comodoca.com/authenticode InanWong.sys
其中MS_XS.cer为微软签发的内核签名交叉根证书,时间戳地址为赛门铁克收购后的新地址
4.WinXPSP3下需要安装补丁rootsupd.exe才可进行签名校验
S...
工作空间
Windbg的工作空间以REG_BINARY的形式存储在:
HKEY_CURRENT_USER\Software\Microsoft\Windbg\Workspaces
将themes(eg.C:\Program Files\Windows Kits\8.0\Debuggers\x86\themes)下的工作空间主题REG文件(standard.reg)导入到注册表可以改变默认的工作空间,themes下的主题使用placehold*.c文件作为布局占位,无需关闭。
工作空间可以以.WEW的格式保存,使用Windbg打开.WEW(standard.wew)文件可以暂时使用其...
Dbg Tools
symchk.exe:验证符号文件或者从符号服务器下载符号文件
symstore.exe:创建和维护符号库
Using SymChk(symchk.exe)
SymChk用于验证符号文件或者从符号服务器下载符号文件。
使用Symchk.exe验证以及下载符号:
symchk [/r] FileNames /s SymbolPath
Examples:
验证指定ExeFile的符号文件是否存在,从本地符号路径,服务器符号路径查找:
symchk C:\Application.exe /s C:\MyLocalSymbols;SRV*http://ms...
Win Dbg
Windows Driver Kit
http://msdn.microsoft.com/en-us/windows/hardware/hh852365.aspx
The Symbol Path can be set by:
using the _NT_SYMBOL_PATH environment variable.
using the -y argument when starting the debugger.
using .sympath and .sympath+
.reload to refresh symbol locatio...
计算机名称
Dns HostName
(1)最长63个字符;
(2)不允许的字符包括`~!@#$^&*()=+[]{}|:;'",<>/?;
(3)不允许的字符也包括%,但是在Windows的提示中没有;
(4)不允许全部都是数字,同时不允许前15位全部都是数字,这是为了保证NetBIOS Name不会全部都是数字;
(5)汉字以及_等为非标准字符。标准字符包括字母(A-Z,a-z)、数字(0-9)和连字符(-)。如使用非标准字符名称,除非所属网络使用Microsoft DNS服务器,否则其他用户就会在网络上找不到您的计算机因此不支持非标准名称。;
...
驱动编译错误C2220解决方案
编译驱动时出现:
error C2220: warning treated as error - no ‘object’file generated
原因是警告级别过高,需要修改警告级别。方法如下:
方法一:在inc文件中修改警告级别
1.找到WinDDK目录下的i386mk.inc以及amd64mk.inc,例如:C:\WinDDK\7600.16385.0\bin
2.在其中查找:
MSC_WARNING_LEVEL=$(MSC_WARNING_LEVEL) $(COMPILER_WX_SWITCH)
3.找到后,在其下添加以下一行...
创建新的进程并等待返回结果
创建新的普通进程并等待返回结果
说明:创建新的进程,等待进程返回执行结果
DWORD RunCommandProcessor(const PTCHAR pszCmd)
{
ASSERT(NULL != pszCmd);
STARTUPINFO si = {sizeof(STARTUPINFO)};
si.dwFlags = STARTF_USESHOWWINDOW;
PROCESS_INFORMATION pi = {0};
CString strCurDir;
(void)GetModuleFileNa...
服务在被频繁杀死的情况下重新启动服务
当年在写一个服务监控程序的时候,遇到一个问题,被监控程序在被快速频繁杀死的情况下,有一定的概率无法被拉起。当时这个问题在项目中存在已经很久了,横跨多个版本,原来是通过增加超时时间以及重新尝试次数来解决,未能从根本上解决该问题。当时事情也很多,只能靠每天下班以后的时间来查问题,过了一星期终于解决了。
解决这个问题的过程中和同事发生了很多次激烈的碰撞,写下这个算作是以此为戒吧。
收获如下:
1.对于有权限设定的函数,需要设置所需要的最小权限,而不是使用所有权限。
2.对于一个监控程序,作且仅作一件事情:感知到被监控程序的运行状态,仅在被监控程序...
卸载虚拟网卡后无法打开IP配置对话框
现象
卸载虚拟网卡后在“本地连接 属性”对话框中,无法打开“Internet 协议版本 4 (TCP/IPv4) 属性”对话框,弹出提示"为配置TCP/IP,必须安装并启用网络适配器卡"。
解决方案
在“设备管理器”-“网络适配器”中卸载物理网卡驱动,重新安装网卡驱动,再次打开“Internet 协议版本 4 (TCP/IPv4) 属性”对话框,这时能够正常打开该对话框。
但是IP地址为空,重新输入地址,保存,关闭“本地连接 属性”对话框。再次打开,地址依然为空,出现新的问题:无法保存IP地址。继续解决。
在HKEY_LOCAL_MACHI...
IE11下代理自动配置脚本
1.自动配置脚本地址由原来的同时支持网络文件路径以及本地文件路径更改为仅支持网络文件路径
例如原来配置“使用自动配置脚本”-“地址”时可以使用"file://C:\Proxy.pac"现在只能使用"http://127.0.0.1:10086/Proxy.pac"。
如果不把Proxy.pac文件放到服务器上,就只能本地创建一个Http服务器来供IE加载Proxy.pac文件了。
2.PAC文件中的alert函数不再弹出
对于一个包含如下内容的PAC文件
function FindProxyForURL(url, host)
{
alert(...
实现一个获取操作系统版本号的API
szOS = 0x002ff8c8 "Microsoft Windows 7 Ultimate Edition Service Pack 1 (build 7601), 32-bit"
谈Win8.1中API:GetVersionEx获取操作系统版本号
控制台输出环境变量
/*
* @brief 控制台输出环境变量.
* Parse the block with the following format:
* [0] /f=ipconfig.out
* [1] =C:=C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
* [2] =D:=D:\Temp\WinVer\OSVersion
* [3] ALLUSERSPROFILE=C:\ProgramData
* ... ...
* @return void
/
void DumpEnvironment...
当前应用程序目录
GetCurrentDirectory返回当前进程的当前目录,并不一定返回应用程序所在的目录。如果在应用程序中调用了打开文件对话框,并且选择了一个文件,那么,这个文件所在的目录就成了当前进程的当前目录了。
也可以使用C运行库函数chdir而不是Windows的SetCurrentDirectory函数来更改当前目录。chdir函数在内部调用SetCurrentDirectory,但_chdir还会调用SetEnvironmentVariable来添加或修改环境变量,从而使不同驱动器的当前目录得以保留。
获取当前进程对应的可执行文件文件所在目录
/**
* @b...
Posted on 06 Jan 2014
C++
Static Link Library
PE Explorer
http://www.heaventools.com/
#
NSIS Questions
NSIS简介
NSIS Wiki (http://nsis.sourceforge.net/)
NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for internet distribution.
注册表操作
R...
Posted on 31 Dec 2013
Diary
2013 年度总结
家庭
父母,没有关心他们,不知道他们怎么样,不过每个月都能见到,有时会被他们吓一跳。没有照顾好他们,反而一直被照顾。想起他们年纪越来越大,还在工作,心理就很酸楚。他们装修了一个新房子,很高兴。妹妹,在北京拼搏,没有问她过得好不好,不过也没什么可问的,坚强的女汉子,一路很不容易,一路很坚强,希望她幸福。两个弟弟终于都上了大学,希望他们能够在大学里快乐的生活,如此岁月静好的时光,人生中真是不多见。羡慕并祝福他们。不爱和家里人交流,不知道为什么。希望奶奶姑姑姑父他们身体都健康,明年去看你们。
身体
今年很惨,去了二三十次医院,涉及牙痛,眼睛痛,感冒,皮肤过敏,甚至被...
Posted on 01 Dec 2013
Tool
Vim
资源:
Vim Home (http://www.vim.org/)
http://vim-taglist.sourceforge.net/
http://ctags.sourceforge.net/
:TlistToggle
Posted on 01 Dec 2013
Tool
Emacs(Editor MACroS 编辑器宏)
资源:
Precompiled Emacs for Windows (https://code.google.com/p/emacs-for-windows/)
Home (http://www.gnu.org/software/emacs/)
Download (http://mirror.bjtu.edu.cn/gnu/emacs/)
Sams Teach Yourself Emacs in 24 Hours
Posted on 29 Nov 2013
设计模式
访问者模式(Visitor)
Posted on 29 Nov 2013
设计模式
模板方法(Template Method)
Posted on 29 Nov 2013
设计模式
状态模式(State)
Posted on 29 Nov 2013
设计模式
观察者模式(Observer)
Posted on 29 Nov 2013
设计模式
备忘录模式(Memento)
Posted on 29 Nov 2013
设计模式
中介者模式(Mediator)
Posted on 29 Nov 2013
设计模式
迭代器模式(Iterator)
Posted on 29 Nov 2013
设计模式
解释器模式(Interpreter)
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器, 该解释器通过解释这些句子来解决该问题。
Posted on 29 Nov 2013
UML
使用Graphviz画UML
使用Graphviz画类图
1.类
(1)使用htmlstring而不使用escString的原因是,类名需要粗体(斜体)表示,没有找到escString的bold属性;同时escString的换行支持的不是很好,如果把类名,属性,操作都写在同一行会影响阅读。
(2)如果使用box shape以及{}来表示类,会在每一个|单元都要写一个TABLE,增加代码量。
(3)最终确定使用plaintext+table的原因是,他满足了我的一个个人原则:同样目的下,优先选择古老技能而不是新技术。这样就不用增加知道"escString下{}需要转义","node与t...
Posted on 29 Nov 2013
UML
Graphviz
Posted on 29 Nov 2013
设计模式
命令模式(Command)
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
命令模式通过将请求本身变成一个对象来使工具箱对象可向未指定的应用对象提出请求。
命令模式用于行为请求者与行为实现者紧耦合的情况下,实现请求排队或记录请求日志,以及支持可撤销的操作等行为。
命令模式的优点
较容易的设计一个命令队列
较容易的将命令记入日志
允许接收请求的一方决定是否要否决请求
较容易的实现对请求的撤销和重做
对于加进新的具体命令类不影响其他的类,因此较容易的新的具体命令类
命令模式把请求的一个操作对象与知道怎么执行...
Posted on 24 Nov 2013
UML
UML精粹:标准对象语言简明指南
UML-结构图-类图
类图(class diagram)
特性(feature):类的名字(name),类的性质(property)以及操作(operator)
静态关系:关联以及泛化
Posted on 15 Nov 2013
设计模式
代理模式(Proxy Desing Patterns)
代理模式的英文叫做Proxy或Surrogate,也称作委托模式。目的为其他对象提供一种代理以控制对这个对象的创建以及访问。
代理模式的分类-学院派分类
远程代理(Remote Proxy)
为一个对象在不同的地址空间提供局部代表,这种代理也称为“大使”(Ambassador)。
虚代理(Virtual Proxy)
根据需要创建开销很大的对象。
保护代理(Protection Proxy)
控制对原始对象的访问,用于对象应该有不同的访问权限的时候。
智能指引(Smart Reference)
取代了简单的指针...
Posted on 12 Nov 2013
设计模式
行为型设计模式(Behavioral Desing Patterns)
行为型模式对类或对象怎样交互和怎样分配职责进行描述。
I:行为型类模式:使用类的继承描述算法和可控制流;
I:行为型对象模式:使用对象的组合描述一组对象怎样协作完成单个对象所无法完成的任务;
行为型
Posted on 10 Nov 2013
设计模式
结构型设计模式(Structural Desing Patterns)
结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以上的类组合成一个类,结果这个类包含了所有父类的性质。这一模式尤其有助于多个独立开发的类库协同工作。另外一个例子是类形式的Adapter模式。一般来说,适配器使得一个接口(adaptee的接口)与其他接口兼容,从而给出了多个不同接口的统一抽象。为此,类适配器对一个adaptee类进行私有继承。这样,适配器就可以用adaptee的接口表示它的接口。
结构型对象模式不是对接口和实现进行组合...
Posted on 09 Nov 2013
Tools
Visual Assist X
官网:http://www.wholetomato.com/
Snippet:http://www.wholetomato.com/products/features/vasnippets.asp
自己创建唯一的一个实例
单例模式:类创建自己的唯一实例
使用惰性(lazy)初始化,GetInstance()返回值直到第一次被访问时才创建和保存
使用非惰性初始化,编译时生成对象。如果编译时无法确定参数或者不满足生成对象的条件时不使用该方法
单例模式
Posted on 09 Nov 2013
设计模式
单例模式(Singleton)
自己创建唯一的一个实例
单例模式:类创建自己的唯一实例
使用惰性(lazy)初始化,GetInstance()返回值直到第一次被访问时才创建和保存
使用非惰性初始化,编译时生成对象。如果编译时无法确定参数或者不满足生成对象的条件时不使用该方法
单例模式
Posted on 08 Nov 2013
缺陷预防
Doxygen
http://www.stack.nl/~dimitri/doxygen/index.html
http://visualstudiogallery.msdn.microsoft.com/11a30c1c-593b-4399-a702-f23a56dd8548
Doxygen Browser Addin for VS
http://doxygenbrowseraddin.codeplex.com/
Posted on 30 Oct 2013
设计模式
设计模式(Desing Patterns)
设计模式分类
根据目的准则分类:创建型,结构型,行为型
创建型模式:与对象的创建有关;
结构型模式:处理类或对象的组合;
行为型模式:对类或对象怎样交互和怎样分配职责进行描述。
根据范围准则分类:类模式,对象模式,这两种模式是为了延迟创建,类模式通过继承的方式描述算法和控制流,把对象的创建延迟到子类,对象模式通过描述一组对象的协助把对象的创建延迟到另一个对象中。
类模式:处理类和子类之间的关系,这些关系通过继承,建立是静态的,在编译时刻便确定下来了。几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而...
Posted on 30 Oct 2013
设计模式
创建型设计模式(Creational Desing Patterns)
类是如何创建对象的?
类创建实例的过程,对象的实例化过程,一般不考虑析构
一个类创建唯一实例,
一个类可创建多种实例,但仅返回其中的一个
单例模式(Singleton)
自己创建唯一的一个实例
创建型对象模式-单例模式
Posted on 27 Oct 2013
C++
类
写一个类需要注意的地方
空类自动生成的默认函数包括,默认构造函数;拷贝构造函数;默认赋值函数;析构函数;取址运算符;取址运算符(const)。
重写默认构造函数:尽量在初始化列表里初始化所有数据成员,注意按照声明顺序写初始化列表;单参数的构造函数,可以作为转换构造函数使用,加了explicit修饰的单参构造函数不作为转换构造函数使用,必须显式调用。
重写析构函数:作为基类,析构函数必须声明为虚函数(virtual)。
禁用拷贝构造函数以及赋值函数:使用宏私有化或者继承Uncopybale类(估计没人会这么做)
// 禁止拷贝构造
#ifndef DISALLOW_COPY_AN...
Posted on 19 Oct 2013
C++
内存
C++中的new和delete
程序生涯中总有这样的时刻,解决了复杂的问题,然后觉得自己技术的逼格提高了。这时,突然有个人问,什么是表达式,什么是操作符,new是表达式还是操作符。。。我擦!这种感觉,宛若一盆冷水瞬间摧残了我傲娇的内心。。。
操作数
表达式操纵的值。
操作符
决定表达式执行什么功能的符号。C++ 语言定义了一组操作符以及将它们用于内置类型时的含义,还定义了每个操作符的优先级和结合性以及它们所需要的操作数个数。C++ 语言允许重载操作符,以使它们能用于类类型的对象。
表达式
C++程序中的最低级的计算。表达式通常将一个操作符用于一个或多个操作数。每个表达式产生一个结...
区块元素(Block Elements)
标题(Title)
导航(Navigation)
段落和换行(Paragraphs and Line Breaks)
区块引用(Blockquotes)
列表(Lists)
代码区块(Code Blocks)
水平线(Horizontal Rules)
区段元素(Span Elements)
链接(Links)
锚点(Anchor)
强调(Emphasis)
代码(Code)
图片(Images)
其他(Miscellaneous)
反斜杠(Backslash Escapes)
自动链接(Automatic Links)
特...
I am a regular Use the printf() function.。 of Jekyll Google group and of late I am seeing lot of queries from users on how to create Tag cloud or list of categories in Jekyll without any coding. Many members in past have done it by creating plugins and code in Ruby, such as this one. Ofcourse cre...
一对中文
一对中文
一对中文
一对中文
一对中文
一对中文
一对中文
Currently Github is an emerging and exciting platform for development. For those who don't know what Github is, here is the definition straight from wikipedia
GitHub is a web-based hosting service for software development projects that use the Git revision con...