.net,Java,更有LAMP
——LAMP应用与学习指南


时常有不少大学生朋友来咨询我们,.net和Java该学那个?如何学?
解答完他们的问题后,我一般都会补充:LAMP也是你们非常值得关注和学习的三大主流技术平台之一,
不要只把眼睛放在.net和Java上,这样你们会失去很多东西。

从技术发展趋势来看,Web开发,B/S应用架构是绝对的未来趋势。
对于B/S架构开发很明显一个是客户端浏览器,一个是服务器端的程序。
客户端技术相对而言,会越来越简化,而且,就HTML和相关的东西,学起来,也比较简单。
而服务器端技术,将会是未来的重点。
在这方面,LINUX,Apache,MySQL和PHP构成的LAMP组合,可以说,是IT技术界的当红明星。
我们重点说说。

在B/S架构下,Web端要求足够简化,大部分功能集中在服务器端。
服务器端包括服务器、WEB服务、数据库以及服务器程序。
这个领域,LAMP现在已经做的相当完美。
LIUNX服务器的稳定与大量应用,是全世界的趋势。
Apache服务也是顶尖高手。
MySQL现在也是日益成熟。
在加上用PHP开发的服务器应用,可以说,LAMP是一个绝对黄金的组合。


当然,客户端也不是说就忽视不管了。
实际上,客户端要学习的技术,好像更多,当然,这些技术的学习比较简单,而且,对Java或者.net来说,都需要学习这些技术。
可以说,这就是公共的技术了。
 
HTML是前台浏览器解释的标记语言,这是必需要会的,你能在你的浏览器上看到的内容都是它给你显示出来的。
所以这个你必须会, 虽然这个在成手工程师的眼里已不算是什么技术了,但是在刚学习B/S开发的学员还是要掌握并会灵活运用。
这是一门非常简单的东西,学起来立竿见影。
 
CSS也是前台浏览器解释的,它是用来显示你的页面风格和样式的,这个也是你必须要会的,因为页面的字体、背景、文本、位置、布局、边缘、列表等等样式都是用它来控制的。
 
前台脚本语言,有这么几种,:Javascript, VBscript, applet等等,这么多我都学吗?不用,只要会一个学可以了,都是完成同样功能的:让你的页面在前台就能和用户产生交互的效果,但是选那个用呢?这要根据情况,我建议你用Javascript,现在大多数的人都是用这个,VBscript的用户大部都是以前是做VB开发的, 另外并不是所有的浏览器都能解释它,applet也是一样,不仅解释它的浏览器少,有的还要安装插件,而且它还要在客户端安装JAVA虚拟机很不方面,大部分都在企业内部网中使用。Javascript也是一种前台比较简单的解释性脚本语言。
 
Dom是什么?JAVAscript将浏览器本身、网页文档、以及网页文档中的HTML元素等都用相应的内置对象来表示,这些对象及对象之间的层次关系称为DOM(Document Object Model, 文档对象模型)。
 
DHTML又是什么?css、脚本编程语言和DOM的结合使用,能够使HTML文档与用户具有交互性和动态变换性,这三种技术的单一称谓叫DHTML(Dynamic HTML, 动态HTML)
 
AJAX是什么?学有什么用?其实这个不是什么新技术,就是新瓶装老酒,AJAX(Asynchronous Javascrīpt and XML)其实是多种技术的综合, 包括Javascrīpt、XHTML和CSS、DOM、XML和XSTL、XMLHttpRequest等。完成异步传输。

以上前台技术都是你客户端浏览器解释的。写出来的代码在你本机直接解释执行和从服务传过来执行是一样的效果。


如何学习
看起来需要学学习的技术好像很多,实际上。
学习的过程是有诀窍的。
你可以先在Windows下搭建一个PHP的开发平台,然后学习PHP的开发。
在这个学习过程中,你再逐步深入学习这些技术。也就是以点带面了。
当你在学习PHP技术的时候,会逐步把涉及到Apache,HTML,MySQL等技术,在这个过程中,你就逐步精通了相关技术。
而到一定的时候,有事没事安装LIUNX来玩玩,最后四者一组合。
你回头就会发现,LAMP技术,你已经掌握到了一个比较深的领域。
一般来说,逐步地,一圈一圈的深入,这是一个正常的学习模式。

如果你是以建设网站为学习目标,有一个捷径就是懂一点PHP之后,立刻学习一套叫Drupal内容管理系统。
可以帮助你快速建立网站,然后逐步深入掌握LAMP技术。

posted @ 2008-08-12 15:56 jtclass 阅读(20) | 评论 (0)编辑

JAVA的世界

 


    在Internet时代,崛起了两种编程语言:Java和C#,后者,不但出现的历史比较短,而且和Java与Objiect Pascal都非常相似,所以,篇 

  我们重点介绍Java,相信你通过摸索,也能阅读和尝试编写C#程序。
本章的目的,使你在原有的程序设计经验基础上,快速掌握Java语言的特点,达到可以读懂Java程序,并可以编写简单Java程序。

32.1 好一杯热咖啡——Java简介
Java是一种简单的面象对象的分布式的解释的健壮的安全的结构中立的可移植的性能很优异的多线程的动态的语言。

图32-1 Java的金字招牌出现在各种Java书上

Java的特点
 简单:Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。Java语言的简单性主要体现在以下三个方面:
 Java的风格类似于C++,因而C++程序员是非常熟悉的。从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很

快就掌握Java编程技术。
 Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。
 Java提供了丰富的类库。
 面向对象:面向对象可以说是Java最重要的特性。Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计

技术。Java支持静态和动态风格的代码继承及重用。
 分布式:Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL打开并访问网络上的对象,其访问方式

与访问本地文件系统几乎完全相同。为分布环境尤其是Internet提供动态内容无疑是一项非常宏伟的任务,但Java的语法特性却使很容易地实

现这项目标。
 健壮:Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存减少了内存出错

的可能性。Java还实现了真数组,避免了覆盖数据的可能。这供功能特征大大缩短了开发Java应用程序的周期。Java提供:Null指针检测数组

边界检测异常出口字节代码校验
 结构中立:为了建立Java作为网络的一个整体,Java将它的程序编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能

执行这种中间代码。现在,Java运行系统有Solaris2。4(SPARC),Win32系统(Windows95和WindowsNT)等。


Java源程序被编译成一种高层次的与机器无关的byte-code格式语言,这种语言被设计在虚拟机上运行,由机器相关的运行调试器实现执行


 安全:Java的安全性可从两个方面得到保证。一方面,在Java语言里,象指针和释放内存等C++功能被删除,避免了非法内存操作。另

一方面,当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来,使它更安全。Java语言在你的机器上执行前,要经过很多次

的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。
 Byte-code校验:如果byte-code通过代码校验,没有返回错误,可知道:代码没有堆栈上溢出和下溢出所有操作代码参数类型都是正确

的没有发生非法数据转换,如将整数转换成指针。访问对象操作是合法的
 类装载
ClassLoader通过将本机类与网络资源类的名称分开,来保持安全性。因为调入类时总要经过检查,这样避免了特洛伊木马现象的出现。从

网络上下载的类被调进一个与源相关的私有的名字域。当一个私有类访问另一个类时,build-in(本机类)首先被检查,然后检查相关的类。这

样就避免了破坏本机类情况的出现。
 可移植的
运行平台无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良

好基础。但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。例如在Windows5。1中整数(Integer)

为16bits,在Windows95中整数为52bits,在DECAlpha中整数为64bits,在Intel486中为52bits。通过定义独立于平台的基本数据类型及其运算

,Java数据得以在任何硬件平台上保持一致。Java语言的基本数据类型及其表示方式如下:byte8-bit二进制补码short16-bit二进制补码

int52-bit二进制补码long64-bit二进制补码float52-bitIEEE754浮点数double52-bitIEEE754浮点数char16-bitUnicode字符。
在任何Java解释器中,数据类型都是依据以上标准具体实现的。因为几乎目前使用的所有CPU都能支持以上数据类型、8~64位整数格式的

补码运算和单/双精度浮点运算。Java编译器本身就是用Java语言编写的。Java运算系统的编制依据POSIX方便移植的限制,用ANSIC语言写成。

Java语言规范中也没有任何”同具体实现相关”的内容。
 解释的
Java解释器(运行系统)能直接运行目标代码指令。链接程序通常比编译程序所需资源少,所以程序员可以在创建源程序上花上更多的时间


 高性能
如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令。翻译目标代码的速度与C/C++的性能没什么区别。
 多线程
Java提供的多线程功能使得在一个程序里可同时执行多个小任务。线程--有时也称小进程--是一个大进程里分出来的小的独立的进程

。因为Java实现的多线程技术,所以比C和C++更键壮。多线程带来的更大的好处是更好的交互性能和实时控制性能。当然实时控制性能还取决

于系统本身(UNIX,Windows,Macintosh等),在开发难易程度和性能上都比单线程要好。任何用过当前浏览器的人,都感觉为调一副图片而等

待是一件很烦恼的事情。在Java里,你可用一个单线程来调一副图片,而你可以访问HTML里的其它信息而不必等它。
 动态
Java的动态特性是其面向对象设计方法的供展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法

实现的。
在C++程序设计过程中,每当在类中增加一个实例变量或一种成员函数后,引用该类的所有子类都必须重新编译,否则将导致程序崩溃。

Java从如下几方面采取措供来解决这个问题。Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码

中保存下传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。这样,一个在存储器生成的对象不在编译过程

中决定,而是延迟到运行时由解释器确定的。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。解释执行字节码时,这种符号

信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。
在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的

所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。Java还简化了使用一个升级的或全新的协议的方法。如果你的系统

运行Java程序时遇到了不知怎样处理的程序,没关系,Java能自动下载你所需要的功能程序。
与C和C++语言的异同
Java提供了一个功能强大语言的所有功能,但几乎没有一点含混特征。C++安全性不好,但C和C++还是被大家所接受,所以Java设计成C++

形式,让大家很容易学习。Java去掉了C++语言的许多功能,让Java的语言功能很精炼,并增加了一供很有用的功能,Java去掉了以下几个C和

C++功能和特征:指针运算结构typedefs#define需要释放内存全局变量的定义这些功能都是很容易引起错误的地方。

3 Java学习参考


posted @ 2008-08-03 14:03 jtclass 阅读(18) | 评论 (0)编辑

类就是封装

大师:用集成电路搞设计,你比较熟悉吧?

小蔡:那当然了。我们接触硬件还是比较多的。一块集成电路,就是一个功能模块,我们根据需要选择各个模块,通过连线把它们连接起来,就够构成了整个系统。

大师:其实软件设计,何尝也不是集成电路的设计思想呢。

我们设计整个系统的时候,也是分解策略,把整个系统,分解成若干的功能模块,然后分别实现,最后联合起来调试。

小蔡:还真是这个道理。

大师:那你说,那个语法特点,最像集成电路呢?

小蔡开始谨慎起来:

“对C语言来说,当然是函数这种语法了。一个函数,就是一个功能模块,就像集成电路一样,可以被重复调用,就像系统中使用相同的集成电路一样。”

“聪明!”大师微笑,

“看来你的C语言基础确实不错。

的确是这样的,函数算一个功能模块的集合。并不是每个函数,都那么的内聚,大多数函数,在操作的时候,常常要依赖系统中其他变量的结果,或者说,要改变系统中某个变量的值。

小蔡有些疑惑:你举一个案例。

大师说:你看前面的案例:

       int deprint(char *s){ if(noisy) printf(……) }。这段代码,就根据noisy这个变量的值来决定运行状态。”

小蔡突然有些明白了:对,你看,on()off()两个函数的执行,还改变了noisy的值。

大师接口到:对阿,实际上,deprint()on()off() 这样的函数,关系非常紧密,都和noisy这个变量息息相关。他们的耦合相关性如此之强,但是C语言,居然没有提供一种机制,把他们聚合在一起,成为一个模块。

小蔡有些感慨:对啊,我们在编写有些模块的时候,常常把一些全局变量和函数放在同一个文件中,以形成单独模块。而实际上,C++提供的classs这种封装方式,把相关的函数和变量,聚合在一起,成为一个独立的模块。更加方便了。

“哈哈,孺子可教。你现在明白class的第一个特性,封装的意义了吧?”大师笑道。

“嗯,基本明白了,我以后,在程序中,就会用到这种特性,把相关的函数和变量,封装在同一个类中。这样还不容易出错。”小蔡感叹道。

“对,所以,封装是面向对象的第一个重要特点。”大师总结道,

“这使得我们使用别人的功能模块的时候,也要简单很多,告诉我们有哪些类,每个类实现了那些功能即可。”

另外一个视角看类

“你的理解能力很强。实际上,我们使用class这种机制,还有另外一层意思。更加接近描述真实的物理世界。”

大师徐徐到:“在C中,我们如何描述客观世界呢?比如,一辆汽车。”

小蔡:当然是用struct,我们分别记录汽车的长,高,宽等特性,有几个轮子,发动机型号……等等。

大师点头:“对,其实客观事物,总有这样那样的属性,我们可以抽象成intfloatchar等类型来描述,然后集合起来,成为一种新的类型即可。”

“但是,这只是一种数据的描述,万事万物皆对象,对象除了这些数据属性之外,还有很多行为,这些行为,我们把他们抽象成各种函数,在C++中,我们叫他们方法。”

“任何对象,都是由属性和方法构成,但是,C语言基本上把他们隔离开了,C++只不过把它们自然的聚合在一起。”

class,就是一种更接近客观事物的抽象,你说是不是?”

小蔡点头:对,其实,这是和前面的观点相一致的。比如我们编写的链表程序,头、尾,是他们的属性,查找,插入……等是他们的方法。我们把它们封装在一起,更接近我们大脑中链表的抽象情况。

“呵呵,你学得很快。”大师比较高兴,“我们来看看具体的语法吧。

类类型用关键字class定义。简单地说,用这个关键字定义的类型都称作类。比如,我们要描述计算机屏幕上的一个点,具体的语法形式如下,大师在纸上写了一个类:

class Point

{           

private:

   int Px, Py;

public:

   Point() {Px = Py = 0; }

   Point(int x, int y) {Px = x, Py = y; }

   int &x(int );

   int &y(int );

   int drawMe ( );

   int clearMe( );

};

你看,class关键字,后面加入类型名,然后用{ };把它们封装起来的这些内容,都是class的属性或者方法。

你第一次学习C++,最重要就是要明白这点。

其次,public:范围所定义的这些成员,不管属性还是方法,当然,一般是方法,是可以访问的,private:范围内定义的,是内部使用,不可访问。也就是说,

Point apoint

apoint.Px=10

后面这句,是不容许的。publicprivate的区别,是你要记住的第二点。

“嗯,其实我看过一点C++语法图书,private相当于模块内的局部变量,只有class内可以使用,外面是不可见的。”小蔡说道。

“对,从封装的角度,也是可以这么理解的。”

大师转向计算机,

“好了,具体类如何使用,我们到计算机上,给你一个完整的案例吧。”

说完,大师在屏幕上写了如下的代码:

#include <iostream.h>

class Point

{

public:

    Point( ) { _x=0; _y=0; }

    Point( int x, int y);

private:

    int _x,_y;

public:

   int x() { return _x; }

   int y() { return _y; }

   void Show() ;

};

Point::Point(int x,int y)   

{

    _x=x;

    _y=y;

}

void Point::Show()    //在类的外部实现类中定义的成员函数

{

    cout << x() << "," << y() << ""n";

}

int main()

{

   Point pt1, pt2(25,64);

   pt1.Show();

   pt2.Show();

   cout<<""n";

   Point *ptrPoint=new Point;

   ptrPoint->Show();

   return 0;

}

然后执行的结果出来:

 

“小蔡,上面的代码中,在成员函数Show()调用了其它成员函数x()和y(),并不需要使用成员选择符,从某种程度上说,也是因为他们在同一个模块内,使用了this指针。这些调用的隐含意义是this->x()和this->y()。”

“然而在主函数main()中调用成员函数Show()必须使用对象名pt1pt2和成员选择符(.);另外,ptrPoint指向的对象的成员函数的调用使用的是成员选择符(->)。”

“这是我今天希望你记住的第三点。”

“好的,”小蔡点头在纸上记录。

“好了”,大师开始结束今天的讲课,“this指针的详细用法,你先回去看看书;另外,为啥运行结果图中:为什么pt1.Show()ptrPoint->Show()运行结果一样?还有,为什么有的成员函数的定义和实现在一起?这三个内容,我下次讲课之前,先要考你哦,你回去准备一下吧。”

 

posted @ 2008-07-18 09:00 jtclass 阅读(5) | 评论 (0)编辑
 

C语言高手学C++01

人物介绍:

C++大师:拥有十年的C++开发经验,最近几年转入公司项目管理和员工培训工作,以C++语言,系统设计和规划,项目管理,员工培训见长。在公司除了带团队之外,常常负责给员工培训,偶尔上小课解答初级程序员的疑惑。

小蔡:现在时的嵌入式系统工程师,汇编语言/C语言的每天使用者。已经开发了3年程序,想提高一下自己的水平。

梆子:

小蔡是一个C语言高手,最近参与到其中一个项目,这个项目要求用C++语言。C++语言,对小蔡来说,既陌生又熟悉。熟悉的是基本语法,陌生的是,C++中的面向对象语法部分。这让小蔡很痛苦,对他来说,C语言已经比汇编语言高级很多,一直认为C语言,就是非常完美的语言了。

这一天,小蔡听说,公司有个项目经理,以前和他一样,也是一个C语言高手,但是现在非常推崇C++

于是,他决定去请教这位C++大师,看看自己该如何学习C++

剧情拉开。

用C++,简单得多的程序

进得门来,一阵客套之后,程序员本性露了出来,小蔡直接开始发问。

小蔡:你说,就我目前的情况,应该再学点啥呢?

大师:哎,嗯,呵呵……那就学 C++ 吧。

小蔡:你老劝我学C++,我们开发过程中真的用不到。毕竟,并不是所有的项目,都需要用到C++的啊。

大师:打人的时候,我们都看到招式,起作用的,其实是内功。

小蔡:C++不就是一种新的招式么?

大师:非也,非也。就你目前情况,用得最熟练的武器,当然就是最好的武器。可是,一方面,我觉得嵌入式系统开发,还有很多领域将来会以C++为主,比如我们公司,目前很多项目,都开始采用C++实现。另外一方面,面向对象的开发思想,如果你具备,用C语言,一样可以开发出好的程序来的。

小蔡:听着累,你说实际点的。

大师放下自己手里的书。眼睛里露出得意的笑容。

大师:这还真找对人了。你的代码中,至少有10项采用了C++才具备的特性。比如,新的for语句用法,const定义参数……

小蔡:呵呵,上次入职培训。你已经给我们详细讲过了,这些好用的特性,只要我的编译器具备,我才不在乎是C,还是C++的特性呢。

大师:哦,看来,我不使出点杀手锏,你是不知道C++的厉害了。

小蔡:就是,光知道吹牛。

大师:去,拿纸来。

小蔡取来纸笔,大师开始讲课。

大师:你知道的,我也是先玩了很多年C语言,才开始接触面向对象和C++的。要说,C++C语言优秀的地方,第一个,就是程序生长起来,成为大程序后,C++的开发效果更好。

这方面,我的体会很多的,因为我常常在用C++的时候思考,如果用C,咋办?

所以,呵呵,我是最有资格来给你讲为啥C程序员,必须学习 C++的。

小蔡笑:别吹了。快举例子。

大师:嗯,我的经验,都是大例子。1,想起来了。

大师:上次,你们的调试代码中不是都要用到这个例子吗?你们要输出一些信息到屏幕上,以验证你们的程序是否正确运行,用C++这样做。

大师在纸上写下这样一个程序:

class Trace

{

public:

       int deprint(char *s)

}

大师:看,我们定义一个类,用来在你调试代码的时候,输出提示。你们用C语言如何做的?

小蔡:我们用宏。

大师:嗯,聪明的做法,这恐怕是C++时代,宏唯一的用处了。

但是,你看,当我们需要控制是否输出的时候,C++这样做:

class Trace

{

public:

       Trace(){ noisy = FALSE; }

       int deprint(char *s){ if(noisy) printf(……); }

       int on();

       int off();

    private:

       bool noisy;

}

代码是不是生长了。

对比一下,我们采用onoff来控制,比采用宏的,是不是逻辑上要直观得多。

小蔡:我有些理解了。逻辑上,用宏也很直观,但,如果这些代码,用C语言来实现,有些混乱,没有这样清晰。小蔡在纸上写下了,用C语言实现的办法。

大师:对了,精彩的还在后面。假如,程序还生长,我们要让这些信息,打印到其他地方,比如,说,输出到一个文件中,你如何办?

小蔡:……真的,很麻烦呢。

大师:嗬嗬,这就是C++精华所在。你看:

class Trace

{

public:

      Trace(FILE *newf){ noisy = FALSE; f= newf }

       int deprint(char *s){ if(noisy) printf(……); }

       int on();

       int off();

    private:

       bool noisy;

       FILE *f;       //note here

}

你看,用C语言,束手无策的时候,用C++,只用增加一个对象描述数据,改改输出对象即可,非常简单。

小蔡:这个案例,太精彩了。

大师狡猾的笑了:这样精彩的案例,我们这里的项目案例中,比比皆是,你是身在宝山阿。容我慢慢给你讲来。

posted @ 2008-07-11 17:28 jtclass 阅读(9) | 评论 (0)编辑


有了前面的学习和上机练习,加上一定的项目开发实践,你可以是一名合格的C#程序员。不过,如果你去应聘,各家公司的题目,有时候还有些刁钻。不一定是你不会,只不过你没有见过某些题型,一时半会可能不适应,在规定的时间内,不能完成答题。为了帮助读者渡过面试这关,我们收集了一些面试题目,帮你长见识,复习巩固知识。并在做面试题目的时候,有比较好的发挥。


1、在C#中,string str = null 与 string str = "    "有何区别?
答:string str = null 是不给他分配内存空间,而string str = "" 给它分配长度为空字符串的内存空间.

2、请简述在.net中类(class)与结构(struct)的异同。
答:Class可以被实例化,属于引用类型,是分配在内存的堆上的,Struct属于值类型,是分配在内存的栈上的。

3、C#中有没有运算符重载?能否使用指针?
答:C#中也有运算符重载,如对运算符“+”进行重载;C#中也可以使用指针,但要声明为unsafe。

4.Internal修饰符有什么含义?
答:很多C++程序员可能不太熟悉internal访问修饰符,因为C++中没有这个关键字。internal数据访问修饰符,表示对所修饰的成员在当前程序集内可以进行没有任何限制的访问;但在当前程序集外部则不能进行访问,其可访问性级别低于public ,高于protected。


5.对象能否调用静态方法
答:不能。对于类内部定义的静态变量及静态方法,该类的对象均不能调用。


6.CLR与IL分别是什么含义?
答:CLR:公共语言运行时,类似于Java中的JVM,Java虚拟机;在.net环境下,各种编程语言使用一种共同的基础资源环境,可以说,CLR就是操作系统和.net应用程序之间的支撑系统。.net应用程序的所有调用,都直接通过CLR,而不知道操作系统的存在,加强了程序代码的执行安全性。同时,操作系统也针对CLR而优化,提升了操作系统的健壮性和安全性。 还可以这样看:CLR就是具体的编程语言如C#与操作系统之间的翻译转换,同时它为具体的编程语言提供了许多资源:
?   面向对象的编程模型(继承、多态、异常处理和垃圾收集等)
?   安全模型
?   类型系统
?   所有.NET基类
?   许多.NET Framework类
?  开发、调试和评测(profiling)工具
?   执行和代码管理
?   IL到本地代码(IL-to-native)转换器和优化器
IL,中间语言,也称MSIL,微软中间语言,或CIL,通用中间语言;所有.NET源代码(不管用哪种语言编写)在进行编译时都被编译成IL。可以说是真正运行在CLR这个虚拟机上的语言,在应用程序运行时被即时(Just-In-Time,JIT)编译器处理成为机器码,被解释及执行。


7、分析以下代码,完成填空。
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上代码执行完后,i=               j=        
答:i=13,j=10。这道题,考察你是否知道汉字是由两个字节构成。


8、根据delegate的知识,完成以下用户控件中代码片段的填写。
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
private void toolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs  e)
{
if(e.Button.Equals(BtnNew))
{
   //请在这里补齐代码用来调用OnDBOperate委托签名的OnNew事件。
}
}
}
答: if( OnNew != null ) OnNew( this, e );

 

 

posted @ 2008-07-04 13:50 jtclass 阅读(29) | 评论 (0)编辑


掌握基本语法之后,快速掌握一种语言的
第二技巧是和你熟悉的一种开发语言对比一下。

记得当年学习程序设计语言的时候。
我们班也和现在的网络上一样,有喜欢PASCAL的,有喜欢C语言的。两边争得不亦乐乎。
其实Turbo C和Turbo Pascal在Borland的调教之下,功能是差不多的。

其实我是先用Turbo Pascal,再转入Borland C++的。中途只是考试用了一下Turbo C。
要说两种语言,我也是先亲近PASCAL,后来爱上C语言的。

开始我喜欢PASCAL的严谨,每一个语法都有严格的语法图示。
Turbo PASCAL电一般的编译速度。
嗯,后来更喜欢C语言一些,源于他们对函数处理的一个区别。

C语言是不能再函数中定义一个函数的。虽然也可以嵌套。
但PASCAL可以,可以在定义部分,定义一个仅仅这个函数使用的函数。
我仔细对比了之后,认为C语言这种做法,使得C语言更简洁,更精巧。
因为:
(1)在函数体外定义一个函数,需要的时候,调用即可,显得更简单简洁,好理解。
(2)PASCAL的这个机制,给PASCAL的学习带来困扰,理解这样的嵌套函数,也很费力。

实际上,我更喜欢Turbo PASCAL提供的unit这个功能。

一个单元就是一个模块。在任何一个单元中,分为接口和实现两个部分。
我们要用这个模块,只需要理解接口中的调用函数用法就可以了。
和C语言/C++的头文件,实现文件机制非常的像。
但是,单元文件编译后,我们对接口不可见,不像C语言,读读头文件,基本能掌握十之八九。
但是unit单元提供的这种接口/实现相分离的机制,一直给我留下了深刻的印象。

所以,PASCAL更适合作为教学语言,给刚刚接触结构化编程的学生建立严格的训练。
而C/C++,适合作为其后作为开发技能的训练。

至于我们当年还争论begin  end和{ }的区别,
现在想想,多无聊啊,IDE都帮你实现了,不用你输入字符,都一样。

 

posted @ 2008-07-04 13:40 jtclass 阅读(35) | 评论 (0)编辑

程序设计如何入门,如何学效率更高。
这是初学者经常问的问题。
每个人都希望投入时间最短,获益最大。这很正常。
好吧,我们来总结一下,程序设计的一些经验。
我们的经验就一句话:

“好读书不求甚解,上机实践是检验真理的唯一标准。”

所以,我们推荐的学习方法是,首先建立起对计算机的感情。
对计算机的应用比较感兴趣,兴趣是最好的老师,
你经常折腾计算机了,慢慢也有了探索计算机奥秘的兴趣,这对坚持学习,非常重要。

接下来,你要做的,就是不断上机提高你的水平了。

第一阶段,学习语法。
课本上的语法,理解之后,即可上机试验,加深理解,熟练使用。
这个阶段,看书和上机的时间分配大概是1:1的比例。

第二阶段,熟练提高
看书:上机比至少1:2,甚至1:3或者1:4更高。
主要用于自己设计,编写一些小的工具软件。
这个阶段,逐渐加大的代码,会让你逐步体会到很多代码建构的技巧,
而且,不少技巧,是必须自己去做,才能深刻体会的。

其次,多请教同学老师,也是非常好的一个技巧。
一般来说,学校里都有一些计算机组织,你可以参加。
而且,一般每个系都会有一些牛人,你可以读向他们学习。
网上也有很多比较能干的人,
而且,他们往往也会比较热心的帮人们解答问题。

一般来说,在校大学生,坚持做到能快速编写一些小工具,
水平就足够了,在你工作的时候,这是一个比较高的起点。

 

posted @ 2008-06-20 08:41 jtclass 阅读(7) | 评论 (0)编辑
      大学学习方法介绍之:使用两套教材
 
 
 使用两套教材



因材施教对我来说的意思就是,根据自己的情况,选用不同的教材。
因为我有同时使用两本教材的习惯。

一般来说,老师在选购教材的时候,要考虑到绝大多数同学的情况。
而作为一个学习的个体,你要考虑到你自己的情况,选购一本教材作为补充。

最经典的案例是《线性代数》,我们老师讲的那本,非常浅,我自己选购了一本。
内容就刚好衔接上,深度广度厚度都够,我学得不亦乐乎,后来期末的时候,不用复习都考了高分。
快毕业的时候,同学都来借这本书。因为他们考研要用。

当然大多数教材,内容会互相重复。
比如学PASCAL,老师推荐了一本,比较薄,只有基本知识。
我又购买了一本,里面有Object Pascal的内容,这是面向对象的开发知识,一般的PASCAL图书不讲。
开始我以自己购买者本为准学习,发现好艰涩啊。
转头用老师推荐的图书,发现老师购牛,确实这本书在入门知识部分讲解比较独到。
两本书合起来用,刚刚好,这对后来我学习C++毫不费力,起了重要作用。
这个案例之后,我也开始找比较浅的书来读。

印象最深刻是电子学的基础课程,我开始居然没有看懂,哈哈,够笨的。
后来找了一本中专教材,轻松就看懂了。然后继续学习自己的专业教材,刚好互补。
所以,不要瞧不起图书馆里的一些老的,浅的图书,关键时刻,挺有作用。

工作后发现也有这样的情况。
比如,有一个项目我要用PowerPC这个芯片。
也是买了两本图书来互补,看不懂这本,就立刻拿起另外一本。
这个时候,网络已经非常方便了。
我也同时在网上down了很多PowerPC的相关材料来学习。
逐步的,就建立起了比较合理的知识结构,工作效率提高了很多。


“阶梯教室”注意到这个现象,提供了不少的电子图书,
你现在不但能同时拥有两本教材,你还将拥有多本教材,对你的学习和工作提供帮助。
posted @ 2008-06-13 09:41 jtclass 阅读(27) | 评论 (0)编辑

这几年,大学生就业越来越难,但实际上,很多公司又一直招聘不到合适的值得培养的人才。我所了解的嵌入式系统开发工程师就是典型的例子,一般来说,在北京,这样的工作岗位大约是月薪3000-5000元,对刚毕业的大学生来说,还是不错的选择。可惜,我们国家好像没有这样的专业设置,不过,这关系不大,只要你有兴趣,稍微的职业准备,足够让计算机,电子,机电,仪器甚至数学物理专业的学生跨入这个行业。在未来越来越多的数码产品世界,嵌入式工程师,在技术领域,还算是一个比较有前途的职业。


1. C语言玩得足够熟练
不是指你要考多高的分数,而是确实编写过几个代码长度超过2000行的程序,而且,这个程序由几个文件组成,完成某项工作。
2. 看得懂复杂一点的电路图
好像大学从来不考试学生是否看得懂电路图,但这是基本技能,比高分还重要。
3. 微机原理与接口技术 学得够好
对某种芯片特别熟悉,理解汇编,不要求编写大的汇编程序,小的函数就可以了。关键还在于建立微处理工作原理模型,将来就能轻松理解和学习需要用到的任何芯片。
4. 理解操作系统
重点掌握进程调度,最好能自己写C程序模拟。其他,内存管理等要理解,到不必在大学阶段掌握多深入,重要的是学习能力,用的时候快速学习就可以了。
5. 会用一些数据结构和算法
这是关系到你能在这个领域走多远的问题,看你自己修练了。
6. 某个开发工具的IDE用的足够熟练
熟练到你能发现到它的一两个Bug为止,而且,还要是英文的系统。呵呵,当年,我大学生时候,发现了Borland C++ V3.1 10个左右Bug。打字够快,英文够好。
7. 明白嵌入式系统的基本结构
简单的说就是:ROM+CPU+RAM+显示模块+其他I/O模块。
8. 理解API的意思
9. 理解仿真器的意思,知道程序是如何烧得,如何运行的
10. 足够好的身体


 

posted @ 2008-06-05 14:21 jtclass 阅读(20) | 评论 (0)编辑

 

小学的时候,我有三样课外读物。
一个是《寒假生活〉或者《暑假生活》,学校发的;
一个是老爸给我订阅的《少年先锋报〉;
还有一些图书。

这些读物里面,一般有这样一些简单题目:
22*28=616;
27*23=621;
33*37=1221;
……
请问:73*77=?
这是一种找规律的题目,答案小学生都能立刻回答:5621。
规律是十位数相同,个位数为相加为10的两个数的乘积的快速算法。

我的小学课外读物中,有无数多这样的题目,有很多特别优秀的算术解法,给了我学习的乐趣。
好了,到了初中。有一门数学课程叫《代数》。
有一个周末,我闲来无聊,重新来看小学的数学题目。
我发现 (10x+a)*(10x+b)=100*x*x + 10x(a+b) + ab =100x(x+1)+ab 如果a+b=10的话。
所以,22*28=100*2*(2+1)+2*8 = 616 ;可以直接口算。
原来这么多的算术规律,因为代数的抽象,变得无比的简单,简洁,某种程度上,使数学更加神奇和美丽。
然后我用同样的代数方法,发现,小学的算术题目,不管多难,因为一个x的带入,都变得相当简单。
太奇妙了,这是为什么呢?

那个时候就有点朦胧的意识:算术再厉害的人,也比不过抽象的代数,聪明比不过智慧。
我还可以用代数方法返回去,找到很多算术的奇妙规律。
恰巧有一天,学校请了一个高人来给我们讲速算法,老师在上面说题目,还没有讲规律。
我就给旁边的同学说答案。把我同学吓了一跳,以为我神童呢。让我自得了一把。
这不过是抽象的代数思考问题的层次更高的一个简单案例罢了。

后来又学习《平面几何〉。
书上说,我们中国人早就发现了沟三股四铉五的规律。可惜,这远没有抽象的a方+b方=C方这么有力量。
当时我还想,如果我研究中国数学史,一定要看看,是什么原因导致了我们的数学没有抽象出一套体系来,
最后导致我们没有建立现代的科学体系。
但西方科学的抽象力量,使得数学+力学可以造出高楼来,我们只留下了工匠的经验,而且容易失传,
故宫里面最高的楼房,也比不过现代科技下普通人造的楼盘。

当你一旦掌握抽象思维这个利器之后,
你会发现,其实各个学科之间,有很多相通之处。

依然是一个学习过程中的案例。
我大学的时候,上一门电气控制的课程。主要就是讲可编程逻辑控制器。
突然发现可编程控制逻辑的抽象,和计算机中的堆栈原理是一样的,这个发现,让我感觉可编程逻辑器在我面前就变成透明的了。
我甚至尝试写了一篇小论文:《用计算机编程技术来模拟可编程逻辑器》。
后来我基本没有去上过电气控制这么课程,考试之前,拿过书本来看了一下,很容易就通过了考试,
而且好像还不是我一般常得的61分,好像还比较高。

一度狂爱看经济学方面的图书。
仔细想一想,经济学依然是依靠抽象方法,把人抽象成一个“经济人”,然后来分析他们的理性行为。
工作中也是一样,你看一个销售部门的考核方法一变,每个销售员的行为,很轻松就可以理解。

这方面的案例实在太多。
具体的,今天时间不够,不写了。
需要的同学,可以将来购买这本C++图书。最后几章,里面有一些更加生动,和开发结合的案例。

这些案例的目的,
就是教会你一个基本的思考方法。伴你成长路上越走越远。

 

posted @ 2008-05-28 17:05 jtclass 阅读(23) | 评论 (0)编辑