算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。
算法与我
在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software
Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer)。经过一段时间后,这些人也许能够成为一个优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作。但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需要注意,如果你能让下面十个条目成为你的习惯,那么你才能真正算得上是优秀程序员。
1.
学无止境。就算是你有了10年以上的程序员经历,你也得要使劲地学习,因为你在计算机这个充满一创造力的领域,每天都会有很多很多的新事物出现。你需要跟上时代的步伐。你需要去了解新的程序语言,以及了解正在发展中的程序语言,以及一些编程框架。还需要去阅读一些业内的新闻,并到一些热门的社区去参与在线的讨论,这样你才能明白和了解整个软件开发的趋势。在国内,一些著名的社区例如:CSDN,ITPUB,CHINAUINX等等,在国外,建议你经常上一上digg.com去看看各种BLOG的聚合。
2.
掌握多种语言。程序语言总是有其最适合的领域。当你面对需要解决的问题时,你需要找到一个最
软件开发是一个跨度很大的技术工作,在语言方面,有C,C++,Java,Ruby等等等等,在环境方面,又分嵌入式,桌面系统,企业级,WEB,基础系统,或是科学研究。但是,不管是什么的情况,总是有一些通用的基本职业技能。
这些最基本的职业技能通常决定了一个程序员的级别,能否用好这些技能,直接关系到了程序员的职业生涯。很多程序新手也是因为缺少、达不到或是不熟悉在这些基本技能,所以,他们需要有老手带,需要努力补齐这些技能。而高级程序员应该非常熟悉这些基本技能,而且有能力胜任并带领其他经验不足的程序员。
下面这些基本职业技术可以用来做为对一个程序员的评估,很明显,下面的这些技能都可以用来做面试。虽然,还有很多非技术的因素,但对于评估一个程序员的技术能力来说,其应该是足够的了。
下面是程序员所应该具备的基本职业技能:
| 基本技能 |
技能描述 |
| 阅读代码 |
这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的 |
JDK 1.5
Java
5.0发布了,许多人都将开始使用这个JDK版本的一些新增特性。从增强的for循环到诸如泛型(generic)之类更复杂的特性,都将很快出现在您所编写的代码中。我们刚刚完成了一个基于Java
5.0的大型任务,而本文就是要介绍我们使用这些新特性的体验。本文不是一篇入门性的文章,而是对这些特性以及它们所产生的影响的深入介绍,同时还给出了一些在项目中更有效地使用这些特性的技巧。
简介
在JDK 1.5的beta阶段,我们为BEA的Java IDE开发了一个Java
5编译器。因为我们实现了许多新特性,所以人们开始以新的方式利用它们;有些用法很聪明,而有些用法明显应该被列入禁用清单。编译器本身使用了新的语言特性,所以我们也获得了使用这些特性维护代码的直接体验。本文将介绍其中的许多特性和使用它们的体验。
我们假定您已经熟悉了这些新特性,所以不再全面介绍每个特性,而是谈论一些有趣的、但很可能不太明显的内容和用法。这些技巧出自我们的实际体验,并大致按照语言特性进行了分类。
我们将从最简单的特性开始,逐步过渡到高级特性。泛型所包含的内容特别丰富,因此占了本文一半的篇幅。
增强的for循环
值传递是在一个函数中,调用另外一个函数,其中含有参数传递
命名规范
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)
Package 的命名
Package 的名字应该都是由一个小写单词组成。
对象的初始化操作将递归如下的步骤进行:
1.设置实例变量的值为缺省的初始值(0,false,null),不同的数据类型有不同的初始值。
2.调用类的构造器(但是还是没有执行构造方法体),绑定构造器函数。
3.如果构造器中有this()调用,则根据this()调用的参数调用相应的重载构造器,然后,转到步骤5;否则转到步骤4。
4.除java.lang.Object类外,调用父类中的初始化块初始化父类的属性,然后调用父类构造器,如果在构造器中有super()调用,则根据super()中的参数调用父类中相应的构造器。
5.使用初始化程序和初始化块初始化成员。
6.执行构造器方法体中其他语句。
容易出现问题的地方:虽然变量在定义的时候进行了初始化,在实际初始化过程中还是先将其设为1所示默认值,然后在过程5才会真正的进行初始化。如果在这里调用了父类构造器的话,如果父类构造器中有相同变量的默认初始化的话(Java的动态绑定机制),就极
类型转换,首先要说一说java的数据类型。java中的数据类型分为两种
:基本类型、引用类型。基本数据类型没有什么好说的byte char short int
long float double boolean,这些类型除了boolean之外,其他的与C语言中的类
型没有太大的区别。因为这篇文章的论题是类型转换,所以在此不讨论boolean
值的用法。
下面要说的是引用类型。引用在有的书里也叫做句柄,它很类似C/C++中的
指针,但要注意引用和指针并不是同一个概念。指针是一个存放地址的变量,他
使C/C++程序员能够灵活地访问内存,但这也给程序的安全性带来了很大的隐患
,由于程序员可以对指针随意的运算操作,所以一不留神就会破坏其他的存储单
位,导致程序中出现意想不到的结果。引用继承了指针节省内存的优点,又限制
了对地址的操作,所以他是安全的。引用类型包括所有类生成的实例和数组(不
管是对象数组还是基本类型数组都实现Clon
AVADOC语法
我们在开发JAVA程序中, 可以使用Javadoc来进行程序文档的整理, 当程序编写完成,
利用Java自带的JavaDoc工具就可以生成规范的API说明手册. 下面是我自己整理的一些语法:
书写格式:
public int getCount() { .......
Javadoc只能为public,protected两种权限的类成员进行处理注释文档。当然也可以使用-private参数强制进行处理,
我们可以在注释中嵌入HTML个标记来丰富最后文档的显示, 因为Javadoc最后生成的文档就是HTML.
说明:
@see : 就是文档中的 参见xx 的条目, 其实就是超链接.
一般来说, 文档有
1、java.lang包:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包,无需使用import导入。
2、java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等等
3、java.util包:包含大量工具类/接口和集合框架磊/接口,如Arrays、List、Set,处理时间的date类,处理变成数组的Vector类,以及stack和HashTable类
4、java.util.zip包:实现文件压缩功能
5、java.lang.reflect包:提供用于反射对象的工具
6、java.awt.image包:处理和操纵来自于网上的图片的java工具类库
7、java.wat.peer包:很少在程序中直接用到,使得同一个java程序在不同的软硬件平台上运行
8、java.applet包Java 语言编写的一些小应用程序,这些程序是直接嵌入到页面中,由支持Java的浏览器(IE 或
Nescape)解释执行能够产生特殊效果的程序。它可以大大提高Web页面的交互能力和动态执行能力。Applet
小应用程序的实现主要依靠java.applet 包中的Applet类。与一般的应用程序不同,