自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不断的谦逊,不断的努力

世界上最酷的词汇不是优雅、品味,而是设计;世界上最好的优点是坚韧

  • 博客(78)
  • 资源 (3)
  • 收藏
  • 关注

原创 COM是一个更好的C++

昨天看了《COM本质论》的第一章”COM是一个更好的C++”,觉得很有必要做一些笔记,于是整理成这篇文章,我相信你值得拥有。这篇文章主要讲的内容是:一个实现了快速查找功能的类FastString,在一个小小的需求之后,慢慢的演变成一个COM组件的过程。类FastString实现了一个快速查找字符串的功能,快到时间复杂度是O(1),我们先不管作者是怎么实现的,估计是通过空间换时间。由于这个类查找字符串很快,于是作者就把这个类当做一个产品,以源码的方式卖给需要的厂商,厂商用后感觉很好,但有的厂商想要获得

2014-06-12 15:29:58 855

原创 15道简单算法题

最近在公司里基本处于打酱油的状态,工作正在交接中。没事又做起了算法题目。好久没怎么写算法题了,感觉手气还不错,经常能一次就写对(编译通过,得到想要的结果,没怎么测试),可能是因为这些题目之前看过或是写过,或许就是自己进步了一点。这15道大部分来自《剑指Offer》,作者的博客之前看过几次,感觉写得很好,但看这本书时却没有那个感觉了,可能是因为看过博客的原因吧,没有了之前的那种惊喜。自己就试着实现里面的一些算法题目,基本上是简单的思考一下,如果没什么思路,就看看作者是怎么想的,大概看一下他的思路或是代码,就开

2014-06-12 15:28:17 12424

原创 C#转C++的一点分享

从C#转C++有段时间了,一直想分享点什么,但又不太好意思分享,毕竟自己做C++的时间不太长,最近感觉自己已能胜任现有工作,想分享的想法又强了点,前几天看到这样一篇博客《那些年·我们读过的专业书籍》,里面列了很多大家认为很好的书,加上自己在自学C++的工程中也看了不少书,感觉并不是所有的书都值得花时间去看的,毕竟很多人一年下来也看不了2,3本书,不同的技术能力的人,适合看的书都不太一样,在这么多大

2013-12-26 11:56:46 1098

原创 虚方法的调用是怎么实现的(单继承VS多继承)

我们知道通过一个指向之类的父类指针可以调用子类的虚方法,因为子类的方法会覆盖父类同样的方法,通过这个指针可以找到对象实例的地址,通过实例的地址可以找到指向对应方法表的指针,而通过这个方法的名字就可以确定这个方法在方法表中的位置,直接调用就行,在多继承的时候,一个类可能有多个方法表,也就有多个指向这些方法表的指针,一个类有多个父类,怎么通过其中一个父类的指针调用之类的虚方法?

2013-07-25 12:05:07 1056

原创 程序员的自我修养--读书笔记

1:注意不要反回指向栈内存的指针或引用,因为在函数返回时改内存已经被销毁了2:C/C++没有办法知道指针所指的内存容量大小 当数组作为参数传递时,数组将退化成相同类型的指针 不要指望要指针参数去申请动态内存,因为函数会为产生一个临时变量指向参数的内存,当函数内分配内存时,将内存的地址赋给了临时参数,而没有给实参赋值,所有实参没有发生任何变化,应该修改的是指针所指的内容,而不是修改指针的指向,所

2013-05-20 16:39:34 1132

原创 C++多态、继承的简单分析

一直以为自己对多态和继承已经比较了解,当遇到虚继承的时候,发现有点犯晕,想不通了,于是在微博上向几个大神请教,很快得到了他们的回复,高兴之情无以言表。之后自己查了一些资料,结合大神的回复,在这里做一下简单的记录。我的问题如下:为什么虚继承类的sizeof要大些啊,是因为虚继承中,子类有指向父类的指针和指向父类的虚函数表的指针吗,比非虚继承多了这两个指针? @左耳朵耗子@简悦云风

2013-05-15 10:54:27 1071 2

原创 XML文件解析器TXml

前几天看了开源的XML文件解析器TinyXml,它是怎么实现解析的没怎么看懂,于是决定自己实现一个,反正最近不忙。先命名为TXml。现在完成了解析和查询功能,全部代码加起来不到1000行,将会继续完善它。源码必共享先简单说一下我的思路:1:读取XML文件信息,并存入一个字符数组中;2:遍历数组,将数组解析成一棵树;3:以路径的方式查询和按属性查询;这个解析器最麻烦的地方就在怎么

2013-04-11 16:01:19 2980 1

原创 多线程编程--5种方法实现线程同步

1:用Interlocked系列函数实现线程同步;2:用CRITICAL_SECTION及其系列函数实现线程同步;3:用RTL_SRWLOCK及其系列函数实现线程同步;4:用事件内核对象实现线程同步;5:用信号量内核对象实现线程同步;1:用Interlocked系列函数实现线程同步实例如下://旋转锁#include using namespace std;

2013-03-31 15:23:24 1467

原创 一键构造你的博客目录

最近看了一下吴军的数学之美。书很好,废话我就不多少了。看了第9章图论和网络爬虫,一直都觉得网络爬虫很牛B,搜索引擎不就是用爬虫爬网页的吗,于是想写一个简单的爬虫来爬网页试试,最先想到的就是给自己的博客建一个目录,够小够简单了吧,于是就有了这篇文章,简单的分享一下,先申明我的实现很简单没有技术含量,在看下文之前可以先看看我的博客目录。             源码必共享简单介绍一下网

2013-02-20 15:50:00 683

原创 QT+C++实现连连看

需求简单分析。玩过连连看的都知道,连连看其实就是测试能不能用少于等于3条相连的线,连接两个点(图片)。线的条数为0~3条。先只实现了逻辑,并做了智能测试,程序自己可以演示玩连连看的过程,界面还没有做,准备用QT(不熟),源码下载0条线表示两个点相邻,在坐标轴上看就是X轴相同,Y轴值相差1,或是Y轴相同X轴值相差1。1条线表示两个点同X或是同Y轴,且两点之间没有其他点。2条线表示两个

2013-02-04 15:17:10 3675

原创 在开发中你可能没有考虑到的两个性能优化

1:多余的存储引用导致性能降低;2:利用局部性提高程序性能;先来说说引用是怎么降低程序性能,个人认为降低程序性能主要有两个原因,一是数据结构选择不合理,二是多层嵌套循环导致部分代码被多余重复执行。在第二种情况下我们一般都是优化循环最里层的代码,能提出来的尽量往外层提,实在不行的就优化它的运行速度。1:多余的存储引用导致性能降低。先来看一个关于引用导致性能降低的问题。下面两个方法哪个更快

2013-01-13 17:16:13 858

原创 Windows多线程编程基础

系统中的所有线程都要访问系统资源,一个线程霸占某个资源,其他需要该资源的线程就不能完成自己的任务;另外如一个线程在读取某块内存中的数据,而另一个线程又正在修改这块内存的值,这同样不是我们想要的,所以线程之间必须要有一套自己的规则,不然就凌乱了。线程之间需要通信,如A线程霸占某个B线程需要的资源X,在A占用期间,B线程只能等待,或处于挂起状态,当A线程用完资源X后,系统会告诉线程B,资源X可以用了,

2012-12-30 22:11:12 753

原创 Windows线程基础

线程由两部分组成:线程内核对象和线程栈。关于内核对象请看windows内核对象简介。线程内核对象,操作系统用线程内核对象来管理线程,操作系统还用它来存放统计信息。线程栈,用于维护线程执行时所需的所有函数参数和局部变量,就是C#程序员常说的线程栈和托管堆中的线程栈。我们知道进程是有惰性的,它的所有工作都是由线程完成的,而进程只是为线程提供场地,线程函数执行我们让它执行的任务,最终线程函数

2012-12-16 22:48:19 756

原创 Windows内核对象简介

内核对象只是操作系统内核分配的一个内存块,并且只能由操作系统内核访问。该内存块是一种数据结构,它的成员负责维护该对象的各种信息。Windows提供一组函数创建和操作内核对象。调用一个创建内核对象的函数,函数会返回一个句柄,该句柄标识了这个内核对象,这个句柄可由当前进程中的所有线程调用。也可以通过跨进程边界共享内核对象,让其他的进程调用。使用计数。内核对象有个使用计数数据成员,标识内核对象被

2012-12-08 18:04:49 804

原创 数据对齐

许多计算机系统对数据类型的合法地址做了一些限制,要求某种数据类型对象的地址必须是某个值K(2,4,8)的倍数,这种堆积限制简化形成了处理器和存储器系统之间接口的硬件设计,总之就是为了方便高效的读取数据,于是就有了数据对齐。struct S1{ char k; double i; char c; };Sizeof(S1)的值为24,而不是1

2012-10-03 22:38:29 1091

原创 软件随想-项目上线后

从开发到上线差不多用了3个月,其实第一个月就把大部分功能实现了,之后两个月都是需求的再次确认和修改BUG,期间穿插的做别的一些事情。总的来说比较顺利,一马平川没有任何卡住的地方,也没有出现“大脑CPU使用率突然飙升的情况”,但瑕疵太多,在此做一下简单的记录。简单介绍一下我们的作战方式。页面由专门的人切,只制作出部分页面,类似的自己搞定,之后的样式问题自己搞定,一个产品经理,两个程序员,所有的需

2012-09-29 12:09:41 1023

原创 一个翻牌算法

本周四同事分享了一个思维训练的PPT,里面有一个关于翻牌的题目,题目大致是:有一叠牌,把最上面的一张放到最下面,第二张(当前最上面那张)为A,把它放到一边,再把最上面的那张放到最下面,第四张(当前最上面那张)为2,依次列推,翻开的牌位A~N,N为牌的张数。看完这个题目,我当时说可以用一个算法实现。第二天6点多醒来就一直在想这个问题,开始的时候想用递归实现,最后发现有点复杂,自己实现不了,然后想

2012-09-16 13:21:04 1415

原创 Effective C++面向对象与继承

1:子类不要覆写父类的非虚函数。2:子类不要覆写从父类继承过来的默认参数3:子类与父类之间的赋值问题1:子类不要覆写父类的非虚函数。为了解释方便,先看一个简单的例子。 class A{ public: A(int d):data(d){ } void print() { cout<<"A print..."<<data<<endl;

2012-07-28 11:18:23 759 1

原创 Effective C++ 类与函数的设计和申明

在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。18:努力让接口完美且最小化19:区分member functions,non-member functions和friend functions三

2012-07-22 11:34:49 710

原创 Effective C++构造函数析构函数Assignment运算符

在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。 11:如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符12:在cons

2012-07-16 13:17:10 886

原创 毕业两年工作三年小结

不知不觉毕业两年工作三年了,回忆记录一下。大学。话还得从大学开始说起,高考两次顺利考上了武汉的一个著名专科学校,以极度郁闷的心情开始了我的大学生涯。大一上半年基本上是浑浑噩噩的过来的,印象最深刻的是和几个死党打牌,没有任何精神寄托,下半年开始学习C语言,听说是个很牛B的编程语言,就很想学习,差不多用了1个月的时间把高数课本看完了,以后上高数课我就拿出一本从同学那里借来的C语言看啊看,期末考试高

2012-06-17 20:15:18 11427 62

原创 C#基础知识

1:JIT(即时编译)。一个方法在第一次调用时JIT会把改方法的IL代码转换成CPU指令,再次调用该方法时就只需执行对应的指令。方法第一次被调用的过程大致是:1获得方法的IL代码;2:分配内存;3:将IL代码转换成CPU指令存在2分配的内存中;4:将方法表中对应该方法的指针指向2分配的内存;5:跳转到2分配的内存执行其中的指令,即该方法的CPU指令。 2:as的性能高于is。Is的作用是判

2012-05-18 12:41:45 794 1

原创 软件随想--写牛B的代码

1:写不易出错的代码第一次听说“写明显没有什么错误的代码”时,我觉得这个说法很新鲜,让我记忆深刻。其他的很多观点听得我耳朵生茧,基本都是左耳进右耳出。明显没有什么错了的代码肯定是思路清晰、很容易理解的。而要做到这点很难,牛人才能写出牛叉的代码,要做到这一点要有足够的阅历和实战,只能当做目标啦,哪天也和云风一样:今天完成了XX功能,代码明显没有什么错误。现在还不知道明显没有什么错误的代码是怎么样

2012-05-16 14:44:56 1628 2

原创 C#成员初始化有点坑爹

C#成员的初始化顺序你真的非常清楚吗,我发现有点坑爹,坑到爹突然有点搞不清楚什么状况。下面咱们开始分析,先看3个简单类。 public abstract class Base { public Base() { SetValue(); } public abstract void Se

2012-04-19 13:28:39 672

原创 C#内存管理与垃圾回收

垃圾回收还得从根说起,就像生儿育女一样。根:根是一个位置,存放一个指针,该指针指向托管堆中的一个对象,或是一个空指针不指向任何对象,即为null。根存在线程栈或托管堆中,大部分的跟都在线程栈上,因为定义的变量就存在线程栈上,类型对象指针存在托管堆中,因为实例化一个对象要额外分配两个字段“类型对象指针”和“同步块索引”。 类型对象指针的作用。实例化一个对象并没有为其方法分配内存,类型的静

2012-04-12 13:02:30 1280

原创 《重来》值得你多看几遍

作者崇尚简约、见解独到、看法新颖、内容有点另类,却总让我产生共鸣,从中受到不少启发,看起来真是过瘾。原来书还可以这样写。有些可能不知不觉加上了我自己的观点,同一句话不同的人有不同的理解,可能会出现断章取义的情况,往你喜欢的方面想就好,这是唯一一本我在几天之内看了两遍的书,我想很多人也会喜欢,于是昨晚我把自己喜欢的内容整理了一下,形成这篇博客。希望对大家有帮助。1. 哪来的从错误中学习--别人的

2012-04-12 09:08:08 2587 6

原创 裂变问题分析

问题:一个瓶子放一个细菌,细菌一分钟裂变一次,1变2,60分钟后瓶子就满了,问给这个瓶子里放两个细菌裂变后要多久瓶子会满?首先我们用猜的,不是30就是59,不可能是其他的答案,如果让我从30和59中选一个答案,那我肯定选59,不可能30吧,会这么弱智吗,没错答案就是59。现在我们用数学公式来证明。根据题目我们知道瓶子装满时细菌的数量为2^60,假设N分钟后瓶子满,那么我们得到2*2^N=2

2012-03-31 14:36:14 896

原创 这些天写的技术微博

为什么类型和实例对象都要类型对象指针方法和类型所需的内存是在一起分配的,方法被类型和实例对象共享,在实例化一个对象的时候不会为方法分配内存,而调用方法时只能通过类型对象指针定位到方法表中相应的方法,进行调用 ==与Equals的区别:值类型他们的效果是一样的,因为值类型分配在线程栈上,存的就是值,直接比较的就是值引用类型:==判断是否指向同一个地址;Equals比较的是变量所指的内存中的数

2012-03-28 02:34:00 727

原创 基于二叉查找树的集合

我们都知道Dictionary查找元素非常快,其实现原理是:将你TKey的值散列到数组的指定位置,将TValue的值存入对应的位置, 由于取和存用的是同一个算法,所以就很容易定位到TValue的位置,花费的时间基本上就是实现散列算法的时间,跟其中元素的个数没有关系, 故取值的时间复杂度为O(1)。     集合无非都是基于最基础语法的数组[],先欲分配,然后向其中添加元素,容量不够就创

2012-03-15 10:29:53 704

原创 撒列实现关键字过虑二(附源码)

由于第一个版本想复杂了,思路不是很清新,导致有些问题没有攻克,过年那些天也想了很多,还是没有解决,一直想放弃那个解决方案,可就是舍不得放弃,我做了那么多,我想了那么久,我不想重头再来,但到最后还是没有找到既高效又没有明显BUG的解决方案,最终选择放弃第一版中的解决方案,今天本想用基于撒列的搜索树的方式实现的,可写了一部分代码后发现还是有些问题,当然并不代表用基于撒列的搜索树实现有问题,只是对于我来

2012-01-31 16:28:34 695

原创 撒列实现关键字过滤,速度可快了

一直对搜索、过滤很好奇,觉得他们很有技术含量,只有非常NB的人才能做。很想知道他们的原理,实现这样的功能,设计是不是必须得非常NB非常奇特,代码是不是要写得非常好,性能非常高。总之这一切都不是我这样级别的人能做的。直到我看了《编程珠玑(第二版)》中的这么一段文字:“假定我们可以在执行搜索之前对文本内容进行预处理,那么我们可以建立一个撒列表(或者搜索树),为文档中的每个不同的单词建立索引,并为每

2012-01-20 23:01:58 1021 1

原创 并发小工具

其实就是多线程构造多个请求,请求同一个地址,在网站测试的时候还是能用上的,有的时候方法在同一时间只能被一个线程访问,用这个工具就可以测试的方法是不是真的是在同一时间只能被一个线程访问,在处理订单的时候用处就大了,如银行订单,支付宝订单,骏卡订单等,我们都知道一个订单只能被处理一次,也就是说在同一时间只能有一个线程处理这个订单,等这个线程处理完之后,才能让其他线程访问,等这个线程处理完之后,其他线程

2012-01-18 12:12:54 2385 2

原创 C#运行时的相互关系

C#运行时的相互关系本博客主要讲述运行时类型、对象、线程栈和托管堆之间的相互关系,静态方法、实例方法和虚方法的区别,以及内存的分配和回收。线程栈:在一个进程中可能包含多个线程,一个线程在创建的时候,会分配到一个大小1MB大小的栈,栈用于存储方法的实参、形参以及方法内部的局部变量,栈是从高位内存地址向地位地址构建的,由于栈有先进后出的特点,所以先定义的变量后被回收。下面来看一个简单的例子

2011-12-27 09:10:24 1054

原创 递归再一次让哥震惊了

递归再一次让哥震惊了先说那两个让哥震惊的递归问题:1:用递归实现单链表的倒序输出2:从二插查找树中删除节点,并保证还是二插查找树 同学们可以开始思考这两个问题了,当然你可能N年前就遇到过这两个问题,那么不妨看看,看你是否真的理解了递归。实现这两个问题的代码当然很简单,就在下面。 百度百科中递归的名片:递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行

2011-12-22 11:38:28 13315 36

原创 垃圾回收--代

垃圾回收--代代是CLR垃圾回收器采用的一种机制,他唯一的目的就是提升应用程序的性能,采用代的垃圾回收器做到了一下几点:1:对象越新,生存周期越短,跟栈的原理很像,先进后出,先定义的局部变量,在栈中停留的时间相对长一点。2:对象越老,生存周期越长,后面解释。3:回收堆的一部分,速度快于回收整个堆,那是肯定的,就是为了实现只回收一部分内存中的数据,才产生了代的概念,大多数时间只回收第

2011-12-20 12:53:57 1276

原创 C#方法

C#方法1:实例构造器和类2:实例构造器和结构3:类型构造器4:操作符重载方法5:转换操作符方法6:扩展方法7:部分方法 1:实例构造器和类构造器是允许将类型的实例初始化为良好状态的一种特殊方法,创建一个引用类型的实例时,先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步索引),最后调用构造函数来设置对象的初始状态。构造函数不能被继承,

2011-12-11 12:00:34 1096 1

原创 委托

委托委托:委托是一种安全地封装方法的引用类型,他是面向对象的、类型安全的和保险的,它可以代理一个或是多个方法,或是代码块执行,由于是引用类型,它保存的不是实际值,而是保存对存储在托管堆中的对象的引用,即对函数的引用。 构造委托对象的方法:命名方法:使用命名方法构造的委托可以封装静态方法或实例方法(当然定义定义委托的时候不能用static修饰,静态方法不能调用实例化方法),命名方法代

2011-11-27 11:52:42 673

原创 C#自定义分页控件3.0

C#自定义分页控件3.0  热烈欢迎下载使用,剖析,批评,提修改建议。我要下载  最近做的一个项目,又用上了自己写的自定义分页控件,发现不够完善,使用起来不是很方便,于是进行了升级,这已经是第二次升级了,升级估计还会继续,为什么是估计呢?    1:不知道有没有朋友用,也没有人提出要我改进   2:我想做C++啊 ,如果有机会的话,就开始写C++代码了,C#代码将会写得比较少

2011-11-15 15:03:36 883 1

原创 第一次负责项目总结

第一次负责项目的总结         最讨厌的就是写总结,就是想写一下自己的观点和感受。以下观点没有先后顺序,只是按照自己的大脑想到的先后顺序写下来的。大家可能觉得这些观点书上都有,别人也说过,当然你也会发现扯蛋的观点到处都是,现在哥就扯给你看。第一次负责项目总结开始。

2011-10-05 14:52:03 964 1

原创 数组求和算法系列

数组求和算法系列一直想写一个数组求和算法系列博客,但由于自己算法能力有限,完成不了,只能完成其中简单的部分,难的部分希望有园友愿意和我一起完成。在写这篇博客的过程中借用了别人的思路,有的的确是要一定的算法和数据结构基础,特别是对递归的理解,到现在为止我觉得我还没有真正的理解递

2011-08-24 17:28:58 3359

C++网络编程-客户端服务器程序

这是一个基于windows的,用C++编写的客户端服务器程序,实现了简单的聊天功能,对于像学习C++网络编程的朋友,应该很有帮助

2013-05-20

档案封皮和目录的打印

打印档案的封皮和目录,打印前可以预览,在报表中预览,报表的常用方法包含在内

2010-11-25

工厂管理系统,可以对工厂进行全方位的管理,扩展性很好

管理员工信息,对员工数量进行多种类型的统计,可以用Excel导出员工信息

2010-06-22

空空如也

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

TA关注的人

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