2008年7月28日星期一

数组和指针的区别

今天看了篇文章,讲得是数组和指针的区别,将理解记录一下。
在编译时,数组表现为一个数据结构,而指针为另一种数据,只表示一个地址。
数组在编译时需要记录很多别的信息,所以sizeof(编译时函数)能得到整个数组的占用的内存大小,而sizeof的参数为指针时就只能的到4(win32中指针占4个内存)
但是当数组作为参数传递时,他除了首地址之外的所有信息
即:functionName(type[] array){cout << sizeof(array);}结果将为4!
而且array++也正确(没验证)
想法:编译时将参数中的数组换成了同种类型的指针(程序员透明),所以此后的数组其实为指针,数组的一些特性就丢失了,比如可以得到数组的长度。
问题:
1、想法是否是正确的。
2、数组的长度信息,除了sizeof之外还有什么地方会用到?

2008年7月26日星期六

我的路该怎么走呢

最近一直再问自己这个问题,我的专长在哪里,我适合计算机的哪个方向,我一直认为我的算法方面还是可以的(最近我很受打击),我的数学理论真的不能再差了,我奋起直追也很难干上了,因为别人也绝不会等我的,大家都在追赶着自己的梦想。
但是刘也批评过我,说我太急功近利,的确我才做topcoder一个多月,和人家搞了几年的肯定有差距,学了这么短时间就轻易的否定自己,是有点太急功近利,也是对别人的一种鄙视。
最后,我还是觉得要找到自己的优势,然后将其发扬光大,重要的是深入进去,仔细研究,每天留给自己一段时间,将自己掩蔽起来,真正的投入精力,好好学习。

2008年7月25日星期五

我的web2.0生活

微博客:饭否
博客:blogger + live space
订阅:google reader
标签:抓虾

有点失落

现在这个社会,感觉人应该很高兴的活着,有那么多网站无私的为你服务着,想写博客就随便找一个提供博客服务的站点,既满足了自己的愿望也帮助了别人。不仅如此,我感觉网络服务运营商们正挖空心思在满足着人们的各种需求,正因为如此有了flickr,饭否,校内等等。web2.0的时代,人们时时刻刻在交流、在共享,你的一举一动都可以分享给别人(只要你愿意)。
我感觉还是没有适应这个社会,我认识的人还是只来自同学,亲戚,老乡等古老的方式,而现在的交友方式应该是网络化的,在豆瓣上一群素不相识的人就可以一起商量明天一起去干自己喜欢的事情,从而成为朋友。
我还是喜欢比较清净的生活,有那么几个经常在一起的朋友,一起吃饭学习,偶尔(不经常)去看个电影,吃个饭,放松放松,生活就挺好,不要整天在网上看看这个,看看那个。
也许这就是我自己吧,古老的活着。

2008年7月22日星期二

Java克隆的实现

Java克隆实现可以有两种办法:

1、实现Cloneable接口

2、使用Java序列化机制

使用Cloneable接口实现的类安全性比较低,其子类都含有clone方法,但是却并不安全,可能是浅克隆。

而使用Java序列化机制就比较安全,但是效率比较低。

2008年7月21日星期一

SWT学习

Display类:
Instances of this class are responsible for managing the connection between SWT and the underlying operating system.
一、Display.readAndDispatch(),方法从操作系统的事件队列读取事件,正确的分发(分配给正确的监听器listenner),如果还有潜在的事情可做,则返回true,就可以继续调用readAndDisplay(),否则可以调用sleep()函数。
问题:
1、操作系统的事件队列是怎么组织的。
2、sleep()后awake的时机是什么时候。
3、readAndDispatch()函数是给哪个线程分发任务,是user_interface Thread吗?
4、什么样的方法只能由the user-interface thread call.
5、代码中那些代码是有UI线程运行的。
most of the public methods in Widget and its subclasses
二、the differences between Display.asyncExec() and Display.syncExec()
the caller which calls Display.asyncExec run in parallel,and is not notified when the runnable has completed. Otherwise the caller which calls Display.syncExec() is suspended until the runnable completes.
三、Eclipse中启动采用什么类型是什么意思,怎么样能用命令行实现同样的功能。

2008年7月20日星期日

Java线程的疑问

在一个框架中,如果要关掉它的主线程,比如在SWT开发的应用中,用户点了右上角的关闭后,SWT将对应用中未结束的线程做什么处理,或者这部分线程由Java虚拟机处理。将做什么处理呢?

Java生产者与消费者的思考

Java可以通过ReentrantLock类和Condition类实现生产者模型
ReentrantLock提供互斥访问临界区,而Condition类实现阻塞与唤醒机制。
Condition.await()方法,
假定调用此方法时,当前线程保持了与此 Condition 有关联的锁。这取决于确定是否为这种情况以及不是时,如何对此作出响应的实现。通常,将抛出一个异常并且该实现必须对此进行记录。

2008年7月19日星期六

lib库和dll库的区别

lib库为静态链接,生成的可执行文件包含库的内容,而dll为动态链接,生成的可执行文件不包含库的内容

变长参数的处理

头文件中的宏和定义,提供了构造带有变长参数的列表的函数的功能。
va_list、va_start、va_arg和va_end
va_list list;//定义变长参数的信息
va_start(list,count);//取出变长参数,之前必须知道参数的个数
va_arg(list,double);//取出参数,第二个参数为参数的类型
va_end(list);//结束

2008年7月17日星期四

短期学习计划

1、COCOA downloader
2、VSTS的组成,及类似的开源组件
3、algorithms codejam
4、JSP and servlets
5、数理逻辑(李未)

计算机学习

话说学习计算机也已经3年了,虽然时间还比较短,但适时的总结一下,也有利于自己的学习。
计算机应该怎样学习呢?算法+程序设计+理论研究。当然计算机远远不止这些,但就现在的水平,我要打好基础,才能向更深的方面进展,比如团队管理等。
程序员绝不是普通工人,程序设计绝对是一门艺术。在埋头编程的同时一定要停下来想一想,自己的方向是否正确,自己有没有学到新的值得去学的东西,现在这个世界信息这么多,如果什么东西都要学,恐怕到死也不是个头呀。要选择自己感兴趣的并且能在有生之年帮助自己的知识。
算法是学习计算机的基础,虽然不一定要人人赶超ACRush但也要比较熟练的掌握常用算法和数据结构。算法最好能经常练习,这样既能锻炼自己的头脑,也能熟习算法。
程序设计也是很重要的,这里强调的不是算法,而是程序模块化,易读性,易扩展和易维护等特性。好的编程人员写出来的程序才具有以上特点,这个是在平时编程习惯中养成的。
理论研究,其实我一直想在跟在计算机理论的前沿,这是很难的,但我还是想这么要求自己,绝不能脱离世界,要跟着计算机发展的大方向前进,要勇于研究理论前沿,但一定忌浮,戒表面。可以在编程实践以后,根据自己的实践经历结合计算机前沿,寻找结合点,并予以突破。

2008年7月15日星期二

动态环境下web service应用框架的报告

今天听了王燕师姐关于动态环境下web service应用框架的报告,web service在平常环境下,提供可以分为plan和execute两方面,在动态环境下execute时会发生错误情况,这时就要采取特定措施,有reexecute和replan两种解决方案。replan会造成plan时间过长,而reexe会有可能造成服务无法完成。
plan部分也有多种方法,此论文采取了AI planing措施。
会后师兄师姐们就这个解决框架和航空测试结合方面进行了讨论,认为航空测试的动态性不明显,但可以学习论文plan方面的方法。
马老师也就学习方法发表了自己的看法,工科的学习不应该在理论上进行再研究,即看了一篇杂志或者论文,而并没有进行试验或者和自己的实质工作进行结合,就在论文的基础上空泛的发表自己的见解。而应该从工作做起,然后结合现有的理论进行再创作,然后再实践,循环反复,形成正果。

2008年7月14日星期一

恐怖呀——南极万只企鹅冻死


我们的家园正在遭受什么样的洗礼呀,全球气候变暖正在一点一点的侵害我们的朋友,多么可爱的南极企鹅呀,他们正在在遭受着灭顶之灾,连续的大暴雨使刚生下来的小企鹅都被冻死了,大企鹅们正在悲鸣,这悲鸣我们应该能够听到,因为这一切的一切都因为我们人类的存在而发生,我们正在损害自己的朋友甚至还有我们自己。。。。

2008年7月13日星期日

计算机学习的总结

在我看来,计算机是信息学科,是一种跟潮流的学科,只有跟的上时代的潮流才能真正的学好计算机。
但是计算机也有一些基本知识,比如算法,数据结构,操作系统甚至数学都是计算机专业高手的必修课,这些课必须学好,理解好。而且我认为跟潮流的重要性反而在其次,只有我们的基础知识扎实才能在计算机科学领域混好。

2008年7月12日星期六

长期研究计划(更新中)

1、apache(深入)
2、MySQL(深入)
3、Hibernate
4、自动测试工具
5、OO的编译器

Java与SWT——学习

SWT是基于eclipse的用户界面新式开发方法,用户界面比较友好,特别是针对熟悉eclipse的用户。
Java是当今社会中无可非议的程序设计语言王者,其一个重大优点是资源由系统管理,而不需要程序编写者自己管理,因此编程者就轻松很多了。
SWT并不是Java的一个应用,为了提高速度,它的底层并不是完全用Java实现的,特别是一些系统资源的。这就导致了一些系统资源并不能自动释放,而需要程序员自己释放。
作为一个真正的科班出身的程序员,并不能像普通的程序员那样要求自己,应该在自己熟悉某一方面的过程中,尽量学习其底层的实现与特殊之处,要不然以为SWT是和Java一样,就会在编程时遇到一些无法解释和解决的问题。

2008年7月11日星期五

编程感想——数据传输

设想一种情况:数据提供者A,C和数据接受者B,B要求一定的格式,A和C都要将自己的数据组织成B所要求的形式。这时比较好的设计是可以将数据的组织分为两部分,一部分有A,C来做,另一部分有B来做,A,C只负责与自己相关的数据的组织,自己不知道的无关数据不与管理,而B则首先要严格检查A、C提供的数据,然后将数据组织成标准的形式。
重点:数据接受者要严格的检查接受的数据的正确性,而A、C绝对不要组织与自己无关的数据。否则,如果B的数据形式发生改变,则A、C的组织也要改变,非常麻烦,而如果B不严格检查的话,就会造成数据不正确就崩溃的现象。
例子:自动化测试工具开发中有一个ParamDetail类,他有两个数据提供者,表格和文件,ParamDetail类有一个数据lastValue,而表格和文件都提供不了,是在运行时动态记录的,这时表格和文件提供数据时就不要管此数据,而让ParamDetail自己管理。

2008年7月8日星期二

我心痛呀

也许是我过于敏感吧,我经常会受别人的言语所影响。不过也没什么可抱怨的,我处理事情上的确有很多想的不周到的地方(但我决不想看自己身边人的笑话),就比如这个选导师的事情,我一直没有自己明确的方向,一直听别人的,一直犹豫不决,因为我对计算机的大方向的把握还很不到位,我也没有自己明确的兴趣爱好,这应该是一个教训吧,对孩子的教育,一定要让孩子有认知和判断能力,现在我的这方面就很缺乏。
但我并不会对自己放弃的,虽然我把握不了大方向,但我可以学习,我身边也有一些可以为我出出主意的亲戚和朋友,在此我感谢你们在我无助的时候帮助了我,我会逐渐的适应这个社会的,相信我。