11月6
在最初寻找编程工作的时候,我并没有意识到在一家非软件公司的IT部门工作和在一家软件公司的研发或者产品开发部门工作有什么不同。
对于我来说,都是工作而已。我会看看公司的口碑,使用的技术或者额外津贴,试着权衡一下会不会有很多机会。事实上,这两种工作截然不同,人们很可能会在其中的某一个快乐并更成功。
IT部门的编程工作
在IT部门的屋檐下工作,你的职责便是公司的内部网络、其他部门使用的应用程序还有公司网站和应用程序。这听起来可能平淡无奇,但在某些层面上来说,这些工作都是极具挑战。你可能会遇到比在一家小型软件公司更大的挑战。其实,取决于公司态度的不同(自己开发还是外部购买),你可能会有机会来做更多不同的项目。
别人会把你们看成是一个“消费”部门——也就是说你们不为公司赚钱,只是“消费”。这样,工作的重点总是会转移到如何节约开支。用来衡量成功与否的标准就是你节约了多少钱(相比体力劳动或购买现成的解决方案等)。偶尔,你可能有机会帮助公司赚钱,比如建立一个电子商务网站。
当评定工资和额外津贴的时候,负责预算的人可能没有编程背景,他会尽可能把预算压低。同时,他们很可能会把人看成可替换的资源。
对于我来说,都是工作而已。我会看看公司的口碑,使用的技术或者额外津贴,试着权衡一下会不会有很多机会。事实上,这两种工作截然不同,人们很可能会在其中的某一个快乐并更成功。
IT部门的编程工作
在IT部门的屋檐下工作,你的职责便是公司的内部网络、其他部门使用的应用程序还有公司网站和应用程序。这听起来可能平淡无奇,但在某些层面上来说,这些工作都是极具挑战。你可能会遇到比在一家小型软件公司更大的挑战。其实,取决于公司态度的不同(自己开发还是外部购买),你可能会有机会来做更多不同的项目。
别人会把你们看成是一个“消费”部门——也就是说你们不为公司赚钱,只是“消费”。这样,工作的重点总是会转移到如何节约开支。用来衡量成功与否的标准就是你节约了多少钱(相比体力劳动或购买现成的解决方案等)。偶尔,你可能有机会帮助公司赚钱,比如建立一个电子商务网站。
当评定工资和额外津贴的时候,负责预算的人可能没有编程背景,他会尽可能把预算压低。同时,他们很可能会把人看成可替换的资源。
11月3
钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之前处理它们。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志钩子可以监视和记录输入事件。钩子分为线程专用钩子和全局钩子,线程专用钩子只监视指定的线程,要监视系统中的所有线程,必须用到全局钩子。对于全局钩子,钩子函数必须包含在独立的动态链接库(DLL)中,这样才能被各种相关联的应用程序调用。在WINDOWS中,日志钩子是个很特别的钩子,它只有全局钩子一种,是键盘鼠标等输入设备的消息在系统消息队列被取出时发生的,而且系统中只能存在一个这样的日志钩子,更重要是,它不必用在动态链接库中,这样可以省却了为安装一个全局钩子而建立一个动态链接库的麻烦。利用日志钩子,我们可以监视各种输入事件,下面的示例可以用来记录键盘的输入,当有按键发生时,自动记录按键动作的日期和时间以及当前激活的窗口名称。本示例在中文WIN98,Borland C++ Builder4中编译通过。
---- 1.新建一个工程,在窗体Form1中放置两个按钮Button1和Button2, CAPTION分别为“安装日志钩子”和“卸载日志钩子”。
---- 2. 定义如下全局变量:
HHOOK g_hLogHook=NULL; //钩子变量
HWND g_hLastFocus=NULL;
//记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000; //键盘掩码常量
char g_PrvChar; //保存上一次按键值
---- 1.新建一个工程,在窗体Form1中放置两个按钮Button1和Button2, CAPTION分别为“安装日志钩子”和“卸载日志钩子”。
---- 2. 定义如下全局变量:
HHOOK g_hLogHook=NULL; //钩子变量
HWND g_hLastFocus=NULL;
//记录上一次得到焦点的窗口句柄
const int KeyPressMask=0x80000000; //键盘掩码常量
char g_PrvChar; //保存上一次按键值
11月2
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
内存泄漏是指你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。一个盘子用尽各种方法只能装4个果子,你装了5个,结果掉倒地上不能吃了。这就是溢出!比方说栈,栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出.
以发生的方式来分类,内存泄漏可以分为4类:
1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。






