博文

初学者应该看看(2007-12-06 13:34:00)

摘要:成为编程高手的八大奥秘 
   
     转摘于:《中国电脑教育报》   作者:未知 
    
    不知不觉做软件已经做了十年,有成功的喜悦,也有失败的痛苦,但总不敢称自己是高手,因为和我心目中真正的高手们比起来,还差得太远。世界上并没有成为高手的捷径,但一些基本原则是可以遵循的。 


    1、扎实的基础 

  数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握它们,很难写出高水平的程序。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。因此多读一些计算机基础理论方面的书籍是非常有必要的。 

  2、丰富的想像力 

  不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想像力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。开阔的思维对程序员来说很重要。 

  3、最简单的是最好的 

  这也许是所有科学都遵循的一条准则,复杂的质能转换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。 

  4、不钻牛角尖 

  当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。 

  5、对答案的渴求&n......

阅读全文(1218) | 评论:1

初学者应该看的(2007-12-06 13:33:00)

摘要:成为编程高手的二十二条军规【转载】

    作者:Froth  
  1.大学生活丰富多彩,会令你一生都难忘,但难忘有很多种,你可以学了很多东西而难忘,也会因为什么都没学到而难忘!

  2.计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣的。

  3.记住:万丈高楼平地起!基础很重要,尤其是专业基础课,只有打好基础才能学得更深。

  4.C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。

  5.C语言与C++语言是两回事。就像大熊猫和小熊猫一样,只是名字很像。

  6.请先学习专业课《数据结构》、《计算机组成原理》,不要刚开始就拿着一本VC在看,你连面向对象都搞不清楚,看VC没有任何用处。

  7.对编程有一定的认识后,就可以学习C++了。(是C++而不是VC,这两个也是两码事。C++是一门语言,而VC教程则是讲解如何使用MFC

类库,学习VC应建立在充分了解C++的基础之上。看VC的书,是学不了C++语言的。)

  8.学习编程的秘诀是:编程,编程,再编程;

  9.认真学习每一门专业课,那是你今后的饭碗。

  10.在学校的实验室就算你做错一万次程序都不会有人骂你,如果在公司你试试看!所以多去实验室上机,现在错得多了,毕业后就错得少

了。

  11.从现在开始,在写程序时就要养成良好的习惯。

  12.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路。

  13.你会买好多参考书,那么请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码。

  14.VC、C#、.NET这些东西都会过时,不会过时的是数据结构和优秀的算法!

  15.记住:书到用时方恨少。不要让这种事发生在你身上,在学校你有充足的时间和条件读书,多读书,如果有条件多读原版书,你要知道

,当一个翻译者翻译一本书时,他会不知不觉把他的理念写进书中,那本书就会变得像鸡肋!

  16.我还是强调认真听专业课,......

阅读全文(1487) | 评论:0

电脑(2007-12-02 13:34:00)

摘要:前言
Computer是一个自控制机器,通过不断的执行指令来工作,是没有思维的,而人是有思维的,所以能用几十个指令编制各种各种样的程序,编制的程序只不过是N个指令,是具体,而程序的编制,是有科学的,有技术、方法的,是抽象,编制程序就是把抽象的程序编制成具体的N个指令.

具体
Computer的CPU,是运算和执行合在一起控制器,CPU的运作就是等待(也就是循环)->译码->运算->执行,另外,还有指令流水线,就是把指令分成N份, 分份并行执行.CPU有译码,人也有,人的译码就是把抽象译成具体,Computer的具体就是指令,人的具体就是Code.

抽象
program的书籍,有理论,技术,人的思维,有分析,编制,program的组成是code,和指令一样,只是code更接近人的抽象,所以不是用指令编制,而是code.抽象是虚拟的,是可以用code实现的构想,抽象也是复杂的,porgram的抽象要涉及理论、技术,人的抽象涉及分析、编制.其实编程序也就是这样无聊却必须的.

分析
要编制一个程序,先要分析,分析程序要做什么工作,怎么实现,要用什么编制,程序的正确性、错误的处理、失败率的分析、扩展、易用、高效等等,用一个最简单的程序说明:
/* hello.c */

#include<stdio.h>

int main()
{
    printf("hello world!\n");
    return 0;
}

这里就是以打印一个字符串为目标,所以,第一步重要的就是正确的完成目标,第一步实现了,就该第二步了,第二步是分析错误(分析各种意外情况下的错误),那这个程序有什么错误,这个程序就是第5行,正确的做法是先const char c[13]={"hello world!"},常量的内容为要打印的内容,然后在prinf("%s\n",c);,这个错误不是编制错误,而是因为不这样做,编制出来的程序就会声明变量、打印,虽然是一样,但在编制时是......

阅读全文(1672) | 评论:0

物理地址   实地址   虚拟地址(2007-11-07 13:23:00)

摘要:逻辑地址与物理地址
答:在具有地址变换机构的计算机中,允许程序中编排的地址和信息实际存放在内存中的地址有所不同。逻辑地址是指用户程序经编译后,每个目标模块以0为基地址进行的顺序编址。逻辑地址又称相对地址。物理地址是指内存中各物理存储单元的地址从统一的基地址进行的顺序编址。物理地址又称绝对地址,它是数据在内存中的实际存储地址。
所以,物理地址是相对与逻辑地址来说的.而实址址是一种存储管理模式.相对应的是虚地址.
***********************************************************************
虚地址: 
虚拟存储器的辅存部分也能让用户象内存一样使用,用户编程时指令地址 
允许涉及辅存大小的空间范围,这种指令地址称为“虚地址” ( 即虚拟地址 ) 或 
叫“逻辑地址”,虚地址对应的存储空间称为“虚存空间”或叫“逻辑空间”。
***********************************************************************
实地址: 
实际的主存储器单元的地址则称为“实地址” ( 即主存地址 ) 或叫“物理地址”, 
实地址对应的是“主存空间”,亦称物理空间。 
虚拟存储器的用户程序以虚地址编址并存放在辅存里,程序运行时, CPU 
以虚地址访问主存,由辅助硬件找出虚地址和物理地址的对应关系,判断由这 
个虚地址指示的存储单元的内容是否已装入主存,如果在主存, CPU 就直接执 
行已在主存的程序;如果不在主存,就要进行辅存内容向主存的调度,这种调 
度同样以程序块为单位进行。计算机系统存储管理软件和相应的硬件把欲访问 
单元所在的程序块从辅存调入主存,且把程序虚地址变换成实地址,然后再由 
CPU 访问主存。
......

阅读全文(5543) | 评论:0

什么是DMA(2007-11-04 15:20:00)

摘要:当我们向计算机中加入了一块新的声卡或其它适配卡时,安装程序可能会提醒我们应该选择一个DMA通道。那DMA是什么呢? DMA(Direct Memory Access),即直接存储器存取,是一种快速传送数据的机制。数据传递可以从适配卡到内存,从内存到适配卡或从一段内存到另一段内存。DMA技术的重要性在于,利用它进行数据传送时不需要CPU的参与。每台电脑主机板上都有DMA控制器,通常计算机对其编程,并用一个适配器上的ROM(如软盘驱动控制器上的ROM)来储存程序,这些程序控制DMA传送数据。一旦控制器初始化完成,数据开始传送,DMA就可以脱离CPU,独立完成数据传送。
     在DMA传送开始的短暂时间内,基本上有两个处理器为它工作,一个执行程序代码,一个传送数据。利用DMA传送数据的另一个好处是,数据直接在源地址和目的地址之间传送,不需要中间媒介。如果通过CPU把一个字节从适配卡传送至内存,需要两步操作。首先,CPU把这个字节从适配卡读到内部寄存器中,然后再从寄存器传送到内存的适当地址。DMA控制器将这些操作简化为一步,它操作总线上的控制信号,使写字节一次完成。这样大大提高了计算机运行速度和工作效率。
     计算机发展到今天,DMA已不再用于内存到内存的数据传送,因为CPU速度非常快,做这件事,比用DMA控制还要快,但要在适配卡和内存之间传送数据,仍然是非DMA莫属。要从适配卡到内存传送数据,DMA同时触发从适配卡读数据总线(即I/O读操作)和向内存写数据的总线。激活I/O读操作就是让适配卡把一个数据单位(通常是一个字节或一个字)放到PC数据总线上,因为此时内存写总线也被激活,数据就被同时从PC总线上拷贝到内存中。
      对于每一次写操作,DMA控制器都控制地址总线,通知应将数据写到哪段内存中去。 DMA控制数据从内存传送到适配卡的方法与上面类似。对每一个要传送的单位数据,DMA控制器激活读内存和I/O写操作的总线。内存地址被放到地址总线上,像从适配卡到内存传送数据一样,以数据总线为通道,数据从源地址直接传送到目的地址。 DMA从DMA请求线(DREQ)上接收DMA请求,正像中断控制器从中断请求线(IRQ)上接......

阅读全文(3024) | 评论:1

IRQ(2007-11-04 15:16:00)

摘要:IRQ 为 Interrupt ReQuest的缩写,中文可译为中断请求。因为计算机中每个组成组件都会拥有一个独立的IRQ,除了使用PCI总线的PCI卡之外,每一组件都会单独占用一个 IRQ,且不能重复使用。

由于在计算机运行中,CPU是持续处于忙碌状态,而当硬件接口设备开始或结束收发信息,需要CPU处理信息运算时,便会透过IRQ对CPU送出中断请求讯号,让CPU储存正在进行的工作,然后暂停手边的工作,先行处理周边硬件提出的需求,这便是中断请求的作用。

在每个系统中会有两颗芯片来提供16个IRQ,其中大多的IRQ都有固定的编排,例如 IRQ 0固定为系统定时器,IRQ 1则是键盘。因为每一个IRQ只能让一种设备使用,所以IRQ数目十分有限,若计算机安装很多的配件,IRQ势必就会不敷使用,所以可能会发生两个设备共占同一个IRQ的现象,此时也就会出现IRQ冲突问题,造成该设备无法使用。

最简单的解决方法就是到操作系统的硬件设备管理器中去手动调整IRQ的分配,或是在BIOS中作调整。如果是IRQ不敷使用的情形,可以利用其它的方式来解决此一窘境,像是PCI总线可以共享一个IRQ,所以基本上可以采增加PCI插卡的方式,就不会被IRQ 所限制。其次是使用USB传输来解决,因为USB控制芯片只会占用一个IRQ,并非所有的USB产品都要独占一个IRQ,所以理论上可以连结最多到127件周边产品,而且目前拥有USB传输界面的产品也越来越普遍了。所以对于传输速度要求不高的周边设备,未来大概将逐渐朝USB接口发展。......

阅读全文(9309) | 评论:2

中断解析(2007-10-01 16:53:00)

摘要:中断解析 一、中断是什么 中断的汉语解释是半中间发生阻隔、停顿或故障而断开。那么,在计算机系统中,我们为什么需要“阻隔、停顿和断开”呢? 举个日常生活中的例子,比如说我正在厨房用煤气烧一壶水,这样就只能守在厨房里,苦苦等着水开——如果水溢出来浇灭了煤气,有可能就要发生一场灾难了。等啊等啊,外边突然传来了惊奇的叫声“怎么不关水龙头?”于是我惭愧的发现,刚才接水之后只顾着抱怨这份无聊的差事,居然忘了这事,于是慌慌张张的冲向水管,三下两下关了龙头,声音又传到耳边,“怎么干什么都是这么马虎?”。伸伸舌头,这件小事就这么过去了,我落寞的眼神又落在了水壶上。 门外忽然又传来了铿锵有力的歌声,我最喜欢的古装剧要开演了,真想夺门而出,然而,听着水壶发出“咕嘟咕嘟”的声音,我清楚:除非等到水开,否则没有我享受人生的时候。   这个场景跟中断有什么关系呢?   如果说我专心致志等待水开是一个过程的话,那么叫声、电视里传出的音乐不都让这个过程“半中间发生阻隔、停顿或故障而断开”了吗?这不就是活生生的“中断”吗? 在这个场景中,我是唯一具有处理能力的主体,不管是烧水、关水龙头还是看电视,同一个时间点上我只能干一件事情。但是,在我专心致志干一件事情时,总有许多或紧迫或不紧迫的事情突然出现在面前,都需要去关注,有些还需要我停下手头的工作马上去处理。只有在处理完之后,方能回头完成先前的任务,“把一壶水彻底烧开!” 中断机制不仅赋予了我处理意外情况的能力,如果我能充分发挥这个机制的妙用,就可以“同时”完成多个任务了。回到烧水的例子,实际上,无论我在不在厨房,煤气灶总是会把水烧开的,我要做的,只不过是及时关掉煤气灶而已,为了这么一个一秒钟就能完成的动作,却让我死死地守候在厨房里,在10分钟的时间里不停地看壶嘴是不是冒蒸气,怎么说都不划算。我决定安下心来看电视。当然,在有生之年,我都不希望让厨房成为火海,于是我上了闹钟,10分钟以后它会发出“尖叫”,提醒我炉子上的水烧开了,那时我再去关煤气也完全来得及。我用一个中断信号——闹铃——换来了10分钟的欢乐时光,心里不禁由衷地感叹:中断机制真是个好东西。 正是由于中断机制,我才能有条不紊地“同时”完成多个任务,中断机制实质上帮助我提高了并发“处理”能力。它也能给计算机系统带来同样的好处:如果在键盘按下的时候会得到一个......

阅读全文(2014) | 评论:0

位运算(2007-08-31 10:10:00)

摘要:位运算 位运算

   在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能, 这使得C语言也能像汇编语言一样用来编写系统程序。

一、位运算符C语言提供了六种位运算符:

& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移


1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。

  按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。
main(){
int a=9,b=5,c;
c=a&b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}


2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13
main(){
int a=9,b=5,c;
c=a|b;
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
}

3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12)
main(){
int a=9;
a=a^15;
......

阅读全文(2331) | 评论:0

TCP/IP(2007-08-29 13:54:00)

摘要: TCP/IP协议(Transmission Control Protocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。

TCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括上百个各种功能的协议,如:远程登录、文件传输和电子邮件等,而TCP协议和IP协议是保证数据完整传输的两个基本的重要协议。通常说TCP/IP是Internet协议族,而不单单是TCP和IP。

TCP/IP是用于计算机通信的一组协议,我们通常称它为TCP/IP协议族。它是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。

之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。以下我们对协议族中一些常用协议英文名:

TCP(Transmission Control Protocol)传输控制协议

IP(Internet Protocol)网际协议

UDP(User Datagram Protocol)用户数据报协议

ICMP(Internet Control Message Protocol)互联网控制信息协议

SMTP(Simple Mail Transfer Protocol)简单邮件传输协议

SNMP(Simple Network manage Protocol)简单网络管理协议

FTP(File Transfer Protocol)文件传输协议

ARP(Address Resolation Protocol)地址解析协议

从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。

其中:

阅读全文(2007) | 评论:0

域名(2007-08-29 13:53:00)

摘要:域名(DOMAIN NAME)
Internet地址中的一项,如假设的一个地址 domain.com
   
与互联网协议(IP)地址相对应的一串容易记忆的字符,由若干个从a到z的26个拉丁字母及1到0的10个阿拉伯数字及“一”、“.”符号构成并按一定的层次和逻辑排列。目前也有一些国家在开发其他语言的域名,如中文域名。域名不仅便于记忆,而且即使在IP地址发生变化的情况下,通过改变翻译对应关系,域名仍可保持不变。

网络是基于TCP/IP协议进行通信和连接的,每一台主机都有一个惟一的标识固定的IP地址,以区别在网络上成千上万个用户和计算机。网络在区分所有与之相连的网络和主机时,均采用了一种惟一、通用的地址格式,即每一个与网络相联结的网络和主机都被指派了一个独一无二的地址。为了保证网络上每台计算机的IP地址的惟一性,用户必须向特定机构申请注册,该机构根据用户单位的网络规模和近期发展计划,分配IP地址。网络中的地址方案分为两套:IP地址系统和域名地址系统。这两套地址系统其实是一一对应的关系。IP地址用二进制数来表示,每个IP地址长32比特,由4个小于256的数字组成,数字之间用点间隔,例如166.111.1.11表示一个IP地址。由于IP地址是数字标识,使用时难以记忆和书写,因此在IP地址的基础上又发展出一种符号化的地址方案,来代替数字型的IP地址。每一个符号化的地址都与特定的IP地址对应,这样网络上的资源访问起来就容易得多了。这个与网络上的数字型IP地址相对应的字符型地址,就被称为域名。
        可见域名就是上网单位的名称,是一个通过计算机登上网络的单位在该网中的地址。一个公司如果希望在网络上建立自己的主页,就必须取得一个域名,域名也是由若干部分组成,包括数字和字母。通过该地址,人们可以在网络上找到所需的详细资料 。域名是上网单位和个人在网络上的重要标识,起着识别作用 ,便于他人识别和检索某一企业 、组织或个人的信息资源,从而更好地实现网络上的资源共享。除了识别功能外,在虚拟环境下,域名还可以起到引导、宣传、代表等作用。         补充:

什么是......

阅读全文(1810) | 评论:0