摘要: 写在前面的很多人在csdn上分享了自己的面试经验,其中笔试值得一提。公司笔试的题目有些比较基础但是又是比较核心的概念。就比如,什么是线程,什么是多线程,什么是进程,什么是多进程,线程和进程有什么区别!!这题目一上眼,脑子中一晃就一个印象:看过很多次了,但是就是说不明白他是什么东西了。线程是程序中的一个单一控制流;一个程序可能完成很大的任务,多线程即一个程序中有多个线程,每个线程完成不同的工作,这样就提高了程序运行的速度。进程是运行中的程序,它是与线程的区别是进程有独立的代码,数据和存储空间,但是线程可以共享数据空间,但每个线程有独立的执行堆栈和程序计数器。概念是很清楚的,非得理解并记住不可,不阅读全文
posted @ 2012-02-23 22:23 捣乱小子 阅读(932) 评论(3) 编辑
摘要: 不忽视汇编 较于我们日常接触的高级语言,诸如c语言,c++,java等等,汇编语言是更接近机器的语言,它的常用操作简单到把一个数值(立即数,寄存器数或者存储器数据)加载到寄存器,正是这样,所以让汇编完成一个程序任务,过程会比较晦涩;高级语言隐藏了很多的机器细节(比如过程(函数)栈帧的初始化,以及过程结束时栈帧的恢复),代码清晰易懂。 真佩服六七十年代那些大牛们,都是怎么过来的...膜拜膜拜。写一个100以内整数的和,即使有充分的汇编文档,这也足够折腾我一阵子,太恶心了。但是了解汇编的行为方式和其中的一些重要细节,有助于理解计算机软件和硬件的工作方式。我就一个简单的算法来认识一下汇编。过程汇..阅读全文
posted @ 2012-02-08 17:44 捣乱小子 阅读(1213) 评论(10) 编辑
摘要: 起因 无意间看到了大牛们写的自定义编辑框控件,于是找了个时间自己写了一个,加深了对MFC消息机制和一些功能的了解。分析 先来看一张QQ2011的登录窗口,发现当鼠标悬停在编辑框上的时候,会有悬停边框高亮,这样给用户一种很绚丽的视觉享受,但我相信大家每天都上q,从而都忽略了这些美丽,细心分析一下,QQ的每一个器官甚至一根毛都是经过精心设计的。当编辑框失去输入焦点,而编辑框内文本为空的时候,会有灰色提示文本,提示用户输入。 还可以有好多的自定编辑框功能,美化我们的编辑框。具体实现和细节 在之前《MFC自动隐藏》这篇文章中的技术细节有与DLEdit相似的地方,那就是鼠标悬停的判断。当鼠标悬停...阅读全文
posted @ 2012-02-04 13:00 捣乱小子 阅读(801) 评论(4) 编辑
摘要: 题目不醒目,特解 win32编程中,有两个消息比较特别,WM_MOUSEHOVER和WM_MOUSELEAVE。系统不会想应用程序发送这两个消息,MSDN中规定要用到TrackMouseEvent方法来向程序投递这两个消息。去留分析 去WM_MOUSELEAVE,留WM_MOUSEHOVER。打个比方,调用TrackMouseEvent就向在消息队列中设置了一个哨兵,当发现WM_MOUSEHOVER或者WM_MOUSELEAVE的时候,就将其放入消息队列,而此时如果这个消息是WM_MOUSELEAVE这个哨兵会消失,而如果这个消息是WM_MOUSEHOVER,这个哨兵会暂留,但是他只能检测..阅读全文
posted @ 2012-02-04 11:48 捣乱小子 阅读(43) 评论(7) 编辑
摘要: WIN32编程回忆在MFC中,听得最多的莫过于“消息”这词,透彻理解MFC的消息机制对学习MFC大有裨益。依稀记得,在纯C的win32编程中,写的最多就是WinMain和win消息处理函数, 我当时有个模板,每每建立一个win32的工程,我就把他复制进去,大概的如下:#include<windows.h>#defineCLSNAME""#defineWNDNAME""LRESULTCALLBACKWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam);intWINAPIWinMain(H阅读全文
posted @ 2012-01-28 15:12 捣乱小子 阅读(1255) 评论(1) 编辑
摘要: 编程独白 给你40分钟的时间,你可以思考十分钟,然后用三十分钟的时间来写代码,最后浪费在无谓的调试上;你也可以思考半个小时,彻底弄清问题的本质与程序的脉络,然后用十分钟的时间来编写代码,体会代码如行云流水而出的感觉。在编程过程当中,相信大家都深有体会,在调试上浪费时间,问题出现在下笔之前没有一个系统结构。关于哈夫曼 哈夫曼在通信领域有很多的用途,将需要传输的数据转换01串,相比直接传输,极大提高了传输的速率,同时还在数据压缩的重要方法。而本篇主要介绍的是哈夫曼压缩算法。 哈夫曼树创建哈夫曼树创建用了两种的方法,一种是基于顺序表,另一种是基于最小堆。关于这两种方法可以参考: 基于顺序表哈夫曼树(阅读全文
posted @ 2011-12-26 19:41 捣乱小子 阅读(1976) 评论(15) 编辑
摘要: 非常感谢Imageshop的指正,代码有修改,主要是:计算8位位图像素位使用了更高效的整点运算;去除多余的变量检测。求网友们支招:在32位位图中有Alpha值,在转换成8位灰阶位图的时候可以直接省略吗? 在《我的第一个MFC小项目(3)之 位图转换》中,有关于将24位的彩色位图转换为8位的灰阶位图,发散一下就很容易可以得到32位位图彩图转换为8位的灰阶位图,看图:32位位图多出一个Alpha字节,用来描述图片的透明度,根据这一特性,可以将Alpha特意忽略,然后将紧跟其后的RGB按照《我的第一个MFC小项...阅读全文
posted @ 2011-12-20 20:22 捣乱小子 阅读(898) 评论(2) 编辑
摘要: 背景:在学习C++编程的时候,都使用过标准库(STL)当中的swap,但更多的是swap(int,int)或 者等等一些基本的类型,发散一下是否也可以用来置换自定义的一个类型,比如说某一class(定义一个class相当于定义一个type了),先不从效率上来考虑,看看可行性如何。ps:欢迎讨论。正文:在STL中的swap大概是这样的实现:template<typename T>void swap(T& a,T& b){T temp(a);a = b;b = temp;} 在里面很清楚先先调用T类型的拷贝构造函数构造一个临时变量temp,然后利用这个中间变量将a和b进阅读全文
posted @ 2011-12-18 19:48 捣乱小子 阅读(630) 评论(3) 编辑
摘要: 日后的纠正最近才发现自己的代码有问题,也是在后来做另一个有关哈夫曼实验的时候才发现,在代码当中有很多时候是用new来建立一个新的节点,就包括从最小堆中取出权重最小的节点(这个没有错误),根据两个权重最小节点得出新的节点和往最小堆中插入这个新的节点。问题出在后两个,因为在中间那一步就对left和right设置了parent(看了我的代码的就该很清楚了),其实如果这样下去是很繁琐的,因为new来new去,赋值来赋值去,非常容易搞混。我测试了一下,会把一部分孩子(left或者right)的parent指针搞错,所以今天2011-12-17我更新了Huffman哈夫曼代码。另外值得一提的是,网络上我看阅读全文
posted @ 2011-12-15 09:36 捣乱小子 阅读(941) 评论(0) 编辑
摘要: C++析构前言析构函数在什么时候会自动被调用,在什么时候需要手动来调用,真不好意思说偶学过C++…今日特此拨乱反正。C++析构误解正文对象在构造的时候系统会分配内存资源,对一些数据成员进行初始化或者赋值;一个良好的class需要有资源回收的机制,而这一操作便落在了析构函数的头上,析构函数来负责类内的资源的free。来看一段代码:class myclass{public:myclass(){cout << "构造函数" << endl;}~myclass(){cout << "析构函数" << endl;}}阅读全文
posted @ 2011-12-09 11:56 捣乱小子 阅读(61) 评论(0) 编辑