技术摘录
zhongguoren666
本人迄今已有近七年的工作经验,一直从事软件开发,曾涉彩票、教育、铁路、农业、门户网站等多个行业,个人认为最精深的要数彩票行业了。本人开发过程中最擅长的要数C 和DELPHI,当然,在SOCKET、COM 、WebServic、数据库、多线程、线程同步、线程池、数据库连接池、串口通讯、UI设计、进程间通信等等技术也有较深入的学习。本人自认充满活力、拥有激情、爱好学习、充满自信。衷心希望能提供大家一些有用帮助与建议!
展开
-
《Socket I/O模型全接触》
本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型五:Overlapped I/O 完成例程模型六:IOCP模型老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件原创 2012-03-23 11:31:32 · 1346 阅读 · 0 评论 -
Hash 算法及其应用
Hash,一般翻译做“散列”,也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。数学表述为:h = H(M) ,其中H( )--单向散列函数,M--任意长度明文,h-原创 2012-03-23 08:19:47 · 967 阅读 · 0 评论 -
几种常用排序算法总结
所谓排序,就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。当待排序记录的关键字都不相同时,排序结果是惟一的,否则排序结果不惟一。 在待排序的文件中,若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的。 要注意的是,排序算法的稳定性是针对原创 2012-03-23 09:14:47 · 959 阅读 · 0 评论 -
五种WinSock I/O模型的特点及比较
====== select 模型: select模型是WinSock中应用最广泛的模型之一,核心就是select函数,它可用于 判断套接字上是否存在数据,或者能否向一个套接字写入数据。 这个函数可以有效地防止应用程序在套接字处于阻塞模式中时,send或recv进入 阻塞状态;同时也可以防止产生大量的WSAEWOULDB原创 2012-03-23 09:54:16 · 1526 阅读 · 0 评论 -
线程同步方法
概述线程同步可以采用多种方式。可以在用户方式下实现,也可以在内核方式下实现。前者的优势在于速度快,因为不用在用户方式和内核方式之间切换,但只能用于同一个进程内的线程之间的同步;后者是使用内核对象的方式,速度虽慢,但可以用于不同进程之间的线程同步。而且后者相对前者方法丰富许多,功能也强大许多。用户方式下的线程同步互锁函数组 下列函数可以以原子的方式进行操作(即或者全做,或者原创 2012-03-23 09:56:12 · 799 阅读 · 0 评论 -
IOCP
载自:http://blog.csdn.net/markman101/article/details/6235516本文主要探讨一下windows平台上的完成端口开发及其与之相关的几个重要的技术概念,这些概念都是与基于IOCP的开发密切相关的,对开发人员来讲,又不得不给予足够重视的几个概念:1) 基于IOCP实现的服务吞吐量2)IOCP模式下的线程切换3)基于IOCP实现的消息原创 2012-03-23 11:53:00 · 24870 阅读 · 3 评论 -
进程与线程的区别(转)
线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,原创 2012-03-22 17:12:16 · 632 阅读 · 0 评论 -
哈希算法简介
哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。 哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址原创 2012-03-23 07:52:34 · 1040 阅读 · 0 评论 -
VC中实现哈希Hash算法
Hash函数我们可以自己用C来编写,但是如果在VC中就不必了,因为在VC中有实现hash算法的 函数可以调用,就是CryptAcquireContext函数,这个函数的定义在wincrypt.h头文件中。下面是我在MFC中实现的,因为想要结果输出到messagebox中,所以就在视类里定义和实现了GetHash函数来计算哈希值。 首先是在View类的头文件中包含下列文件和内容:原创 2012-03-23 08:04:25 · 1836 阅读 · 0 评论 -
魔兽哈希算法封装和测试
转载:http://blog.csdn.net/eaglewood2005/article/details/4394583 近期由于需要,研究了魔兽文件打包管理器的相关算法,重点对其文件索引表的生成和查找进行了研究:采用哈希表进行,在冲突方面的处理方面,采用线性探测再散列。在添加和查找过程中进行了三次哈希,第一个哈希值用来查找,后两个哈希值用来校验,这样可以大大减少冲突原创 2012-03-23 08:00:34 · 1125 阅读 · 1 评论 -
OOA OOP OOD OOT
百度百科:OOAObject-Oriented Analysis:面向对象分析方法是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结原创 2012-04-08 07:52:15 · 2430 阅读 · 0 评论 -
什么是线程安全和线程不安全
首先要明白线程的工作原理,jvm有一个main memory,而每个线程有自己的working memory,一个线程对一个variable进行操作时,都要在自己的working memory里面建立一个copy,操作完之后再写入main memory。多个线程同时操作同一个variable,就可能会出现不可预知的结果。根据上面的解释,很容易想出相应的scenario。而用原创 2012-03-16 14:21:58 · 829 阅读 · 0 评论 -
D语言简介
D语言D语言是由Digital Mars公司开发的编程语言,起因是为了改进C++。它与C二进制兼容(不完全),可编译为本地码,有GC也可手动管理内存,语法上借鉴多种语言,模板则在C++的基础上做了相当大的扩充。D 语言既有 C 语言的强大威力,又有 Python 和 Ruby 的开发效率。它是一种集垃圾回收、手工内存操作、契约式设计、高级模板技术、内嵌汇编、内置单元测试、Mixin 风原创 2012-02-21 10:46:15 · 1743 阅读 · 0 评论 -
项目管理方法
项目管理方法是关于如何进行项目管理的方法,是可在大部分项目中应用的方法。主要有:阶段化管理、量化管理和优化管理三个方面。概述 项目管理是一个管理学分支的学科,指在项目活动中运用专门的知识、技能、工具和方法,使项目能够在有限资源限定条件下,实现或超过设定的需求和期望。项目管理是对一些与成功地达成一系列目标相关的活动(譬如任务)的整体。这包括策划、进度计划和维护组成项目的活动的进展。原创 2012-03-12 21:50:58 · 1793 阅读 · 0 评论 -
海量数据的解决办法(绝对原创)
通常来说海量数据的最大瓶颈是在数据的查询上,下面给出一些解决方法。一、数据库 1、建表:每张表的数据量不能太大,数据库理论一般建议最大为100万条,每张表根据数据量的大小可划分成按天、按月、按年等来建立表。 2、建库: 方案一:如果历史数据也总需要查询的话,可将数据库分成历史库和现有库,历史库数据用于查询历史数据,现存库只用于查询现在的数据,这样可提高数据操作的性原创 2012-03-13 09:55:53 · 1404 阅读 · 2 评论 -
CICS基础概念
CICS基础概念什么是CICS?CICS是怎么工作的?本章我们将揭开CICS的面纱,描述CICS的基本轮廓。同时,还将对CICS的以下重要功能组成进行介绍:(1)任务管理(Task Management);(2)资源管理(Resource Management);(3)恢复管理(Recovery Management);(4)内存管理(Storage Management);原创 2012-03-13 10:54:27 · 4755 阅读 · 0 评论 -
小型机简介
小型机是指采用8-32颗处理器,性能和价格介于PC服务器和大型主机之间的一种高性能 64 位计算机。国外小型机对应英文名是minicomputer和midrange computer。midrange computer是相对于大型主机和微型机而言,该词汇被国内一些教材误译为中型机,minicomputer一词是由DEC公司于1965年创造。在中国,小型机习惯上用来指UNIX服务器。1971年贝尔实原创 2012-03-13 11:08:37 · 1944 阅读 · 0 评论 -
UML图例
UML(统一建模语言):是面向对象的可视化建模的一种语言。是数据库设计过程中,在E-R图(实体-联系图)的设计后的进一步建模。UML中有3种构造块:事物、关系和图,事物是对模型中最具有代表性的成分的抽象;关系是把事物结合在一起;图聚集了相关的的事物。UML提供9种视图:类图、对象图,用例图,序列图、协作图,状态图、活动图,构件图和部署图。在UML系统开发中有三个主要的模型:原创 2012-03-15 13:57:54 · 8473 阅读 · 4 评论 -
CMM综述
作者:赵熙朝 来源:yeskyCMM(Capability Maturity Model能力成熟度模型)的本质是软件管理工程的一个部分。它是对于软件组织在定义,实现,度量,控制和改善其软件过程的进程中各个发展阶段的描述。他通过5个不断进化的层次来评定软件生产的历史与现状。 上面提到了CMM把软件开发组织的能力成熟度分为5个的等级。除了第1级外,其他每一级由几个关键过程方面组原创 2012-03-15 16:54:03 · 2192 阅读 · 0 评论 -
线程安全
什么是线程安全? 如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。 线程安全问题都是由全局变量及原创 2012-03-16 14:17:58 · 1514 阅读 · 0 评论 -
哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。基本概念 * 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函原创 2012-03-23 08:33:57 · 1077 阅读 · 0 评论 -
IOCP简介
IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的API,它可以高效地将I/O事件通知给应用程序。与使用select()或是其它异步方法不同的是,一个套接字[socket]与一个完成端口关联了起来,然后就可继续进行正常的Winsock操作了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。然后应用程序可以对核心层进行查询以得到原创 2012-03-23 11:45:16 · 1772 阅读 · 0 评论 -
用C++编写Windows服务
用 C++ 创建简单的 Win32 服务程序作者:Nigel Thomson(MSDN 技术组)翻译:原文出处:Creating a Simple Win32 Service in C++下载 NTService 例子源代码下载 NTServCpl 例子源代码下载 NTServCtrl 例子源代码摘要 本文描述如何用 Visual C++ 创建原创 2012-05-21 08:56:00 · 4686 阅读 · 1 评论 -
NetSH使用方法
想在W2K下快速的改变IP,使用习惯性的Router、Switch命令行进行配置吗?那就使用NetSH吧,NetSH是什么? Netsh是Windows 2000/XP/2003操作系统自身提供的命令行脚本实用工具,它允许用户在本地或远程显示或修改当前正在运行的计算机的网络配置。为了存档、备份或配置其他服务器,Netsh也可以将配置脚本保存在文本文件中。 运行Netsh原创 2012-05-24 11:39:36 · 2646 阅读 · 0 评论 -
DNS优化的原理和方法
Yahoo和Google都有自己的建设高性能网站最佳实践, 我不做赘述, 需要了解的自行查阅资料:Yahoo的: Best Practices for Speeding Up Your Web SiteGoogle的: Web Performance Best Practices上面的最佳实践条例其实也就是我们常在YSlow和PageSpeed这两个Firefox的add-原创 2012-05-24 11:17:41 · 7019 阅读 · 0 评论 -
SGI STL的内存池
stl中各种容器都有一个可选的模板参数:allocator,也就是一个负责内存分配的组件。STL标准规定的allcator被定义在memory文件中。STL标准规定的allocator只是单纯地封装operator new,效率上有点过意不去。SGI实现的STL里,所有的容器都使用SGI自己定义的allocator。这个allocator实现了一个small object的内存池。Loki原创 2012-07-20 11:18:03 · 1260 阅读 · 0 评论 -
内存池(MemPool)技术详解
概述内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。经典的内存池技术经典的内存池(MemPool)技术,是一种用于分配大量大小相同的小对象的技术。通过该技术可以极大加快内存分配/释放过程。下面原创 2012-07-22 15:44:29 · 1687 阅读 · 0 评论 -
boost::pool与内存池技术
建议看这个链接的内容:http://cpp.winxgui.com/cn:mempool-example-boost-pool Pool分配是一种分配内存方法,用于快速分配同样大小的内存块, 尤其是反复分配/释放同样大小的内存块的情况。1. pool 快速分配小块内存,如果pool无法提供小块内存给用户,返回0。 Example:原创 2012-07-22 15:55:59 · 1430 阅读 · 0 评论 -
VC工程中MBCS定义的含义
VC工程中的缺省定义是MBCS,当然也可以定义为UNICODE。我们知道前者是“多字节编码”,后者是“UNICODE编码”,后者好理解,因为UNICODE就特指UTF-16,可是多字节编码有太多种了,比如UTF-8、GB2312、Big5等等,那么前者具体指的是哪一种编码呢?具体说来,如果我们声明一个CString str="abc移动";或者说我们使用GetWindowText从一个控件原创 2012-07-25 14:59:03 · 1858 阅读 · 0 评论 -
魔兽争霸游戏开始前数据包分析
转载自:http://blog.csdn.net/binbin0303/article/details/30747551.搜索局域网游戏:UDP,端口6112.0x0000 FF FF FF FF FF FF 00 11-5B 82 2D EC 08 00 45 00 ..[??.E.0x0010 00 2C A7 F4 00 00 80 11-D0 B2 C0原创 2012-09-11 09:00:12 · 3106 阅读 · 2 评论 -
魔兽争霸III数据包规范
1. 本文涉及的数据包种类a) 魔兽争霸III拥有以下类型的数据包i. 局域网UDP数据包。这类数据包都用于在游戏准备阶段广播/检测游戏信息。ii. 游戏中TCP数据包。这类数据包在游戏准备阶段和实际游戏阶段都会被用到。我会分两部分来介绍这类数据包。iii. Battle.net TCP/UDP 数据包。有时间的话,我会用一份单独的d原创 2012-09-11 10:02:17 · 4490 阅读 · 1 评论 -
堆栈、栈帧与函数调用过程分析
函数调用是程序设计中的重要环节,也是程序员应聘时常被问及的,本文就函数调用的过程进行分析。一、堆和栈首先要清楚的是程序对内存的使用分为以下几个区:l 栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。l 堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。与原创 2012-05-21 09:18:11 · 11268 阅读 · 2 评论 -
P2P技术基础: 关于TCP打洞技术
4 关于TCP打洞技术建立穿越NAT设备的p2p的 TCP 连接只比UDP复杂一点点,TCP协议的“打洞”从协议层来看是与UDP的“打洞”过程非常相似的。尽管如此,基于TCP协议的打洞至今为止还没有被很好的理解,这也造成了对其提供支持的NAT设备不是很多。在NAT设备支持的前提下,基于TCP的“打洞”技术实际上与基于UDP的“打洞”技术一样快捷、可靠。实际上,只要NAT设备原创 2012-04-23 15:21:40 · 4582 阅读 · 1 评论 -
RSA算法
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。 在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。正是基于这种理论,1978年出现原创 2012-04-23 13:48:10 · 4128 阅读 · 1 评论 -
BCD编码(8421编码)
用4位二进制数来表示1位十进制数中的0~9这10个数码,简称BCD码,即BCD代码。Binary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。定义 BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为会计原创 2012-04-11 19:00:07 · 25928 阅读 · 2 评论 -
网络地址转换(NAT,Network Address Translation)
网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。网络地址转换(NAT)简介N原创 2012-04-23 14:17:41 · 13913 阅读 · 0 评论 -
三次握手,你握了吗?(图文)
前几天刚刚从书店买了一本被学习计算机网络技术和tcp/ip参考模型人员奉为经典的著作:美国作家史蒂文斯的《tcp/ip详解--第一卷》一书。虽然自己早对这本书多少有点了解,并且也在网上找了好久pdf格式的下载到了自己的电脑上,可是总是感觉读起来有点麻烦,好书就应该多读,于是乎自己就下狠心从书店买了这本书。对于学习TCP/IP的大多数人来说,恐怕第一感觉就是太抽象,太难以理解了,我也是一个初学者对此原创 2012-04-11 18:54:25 · 1170 阅读 · 0 评论 -
三次握手协议
三次握手协议所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据 量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP 在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP 总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。原创 2012-04-11 18:53:40 · 1094 阅读 · 0 评论 -
VS2008 远程调试
概述: 基本原理是host的Visual Studio 调试器和guest的远程调试监视器 (msvsmon.exe) 之间的双向通信来实现调试 的,目前支持window身份验证和匿名调试两种,有一定区别如下:(1) Windows身份验证远程调试必须要在调试机和被调试机上使用相同用户名和密码的Windows账户,且必须在同一域上或本地,否则两者之间无法进行原创 2012-04-24 17:47:10 · 2936 阅读 · 0 评论 -
Visual Studio 远程调试设置
Visual Studio 远程调试有两种(1) Window身份验证远程调试 (2) 匿名远程调试第一种限制比较多,权限设置比较复杂,这里我只说第二种。文中的名词:开发机:指调试机,一般放有开发工程和代码客户机:指被调试机,一般放有我们发布的二进制程序 下面以VS2005 中文版为例,一步一步来:第1步:在客户机上运行msvsmon.exe VS20原创 2012-04-24 17:53:09 · 1955 阅读 · 0 评论