??xml version="1.0" encoding="utf-8" standalone="yes"?> q些用Javascript+XMLHTTPRequest的做法给我们提供了一个很qK的空_可以有很多的惌。比如,在Q何静态的面里面Q只要加入这D代码也可以拥有这个功能了?BR>
注:那些U线Q只是在Word里面随手ȝ?BR>注二Q没有经q测试,FireFox下面什么样子不晓得Q放在其他页面怎么样也不晓得。?/P><script language=Javascript src="http://home.wangjianshuo.com/scripts/php/markit.php">
</script>
把鼠标放在上面还可以知道是从哪个IP在什么时间批注的。值得注意的是Q这只是一个最单的SAJAX应用Q如果把它应用于地图Q以及应用于多个|站之间的联合,会有更让人惊讶的l果出来。估计,以后客齐集的后台的管理系l将会是最早用这些简单但是有效的思想的地斏V?
下列原则应用到你的软g工程中,你会获得立杆见媄的成果?nbsp;
1. 比技术重?nbsp;
你开发Y件是Z供别Z用,没有Z用的软g只是没有意义的数据的集合而已。许多在软g斚w很有成就的行家在他们事业的初期却表现q_^Q因Z们那时侯主要精力都集中在技术上。显Ӟ构gQcomponentsQ,EJBQEnterprise Java BeansQ和代理QagentQ是很有的东西。但是对于用h_如果你设计的软g很难使用或者不能满他们的需求,后台用再好的技术也于事无补。多q旉到Y仉求和设计一个用户能很Ҏ理解的界面上?nbsp;
2. 理解你要实现的东?nbsp;
好的软g设计人员把大多数旉p在徏立系l模型上Q偶写一些源代码Q但那只不过是ؓ了验证设计过E中所遇到的问题。这他们的设计方案更加可行?nbsp;
3. 谦虚是必ȝ品格
你不可能知道一切,你甚臌很努力才能获得够用的知识。Y件开发是一复杂而艰巨的工作Q因Y件开发所用到的工具和技术是在不断更新的。而且Q一个h也不可能了解软g开发的所有过E。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事Y件开发的人来_每天可以学习很多C西(如果愿意的话Q?nbsp;
4. 需求就是需?nbsp;
如果你没有Q何需求,你就不要动手开发Q何Y件。成功的软g取决于时_在用戯求的旉内完成)、预和是否满用户的需求。如果你不能切知道用户需要的是什么,或者Y件的需求定义,那么你的工程注定会失败?nbsp;
5. 需求其实很改变,改变的是你对需求的理解
Object ToolSmiths公司Qwww.objecttoolsmiths.comQ的Doug Smith常喜Ƣ说Q“分析是一门科学,设计是一门艺术”。他的意思是说在众多的“正”分析模型中只存在一个最“正”分析模型可以完全满x个具体问题的需要(我理解的意思是需求分析需要一丝不苟、精的完成,而设计的时候反而可以发挥创造力和想象力 - 译者注Q?nbsp;
如果需求经常改动,很可能是你没有作好需求分析,q不是需求真的改变了?nbsp;
你可以抱怨用户不能告诉你他们惛_C么,但是不要忘记Q收集需求信息是你工作?nbsp;
你可以说是新来的开发h员把事情搞得一团糟Q但是,你应该确定在工程的第一天就告诉他们应该做什么和怎样d?nbsp;
如果你觉得公怸让你与用户充分接触,那只能说明公司的理层ƈ不是真正支持你的目?nbsp;
你可以抱怨公司有兌Y件工E的理制度不合理,但你必须了解大多同行公司是怎么做的?nbsp;
你可以借口说你们的竞争Ҏ的成功是因ؓ他们有了一个新的理念,但是Z么你没先惛_呢?
需求真正改变的情况很少Q但是没有做好需求分析工作的理由却很多?nbsp;
6. l常阅读
在这个每日都在发生变化的产业中,你不可能在已取得的成׃陉太久?nbsp;
每个月至读2?本专业杂志或?本专业书c。保持不落伍需要付出很多的旉和金钱,但会使你成ؓ一个很有实力的竞争者?nbsp;
7. 降低软g模块间的耦合?nbsp;
高耦合度的pȝ是很隄护的。一处的修改引v另一处甚x多处的变动?nbsp;
你可以通过以下Ҏ降低E序的耦合度:隐藏实现l节Q强制构件接口定义,不用公用数据结构,不让应用E序直接操作数据库(我的l验法则是:当应用程序员在写SQL代码的时候,你的E序的耦合度就已经很高了)?nbsp;
耦合度低的Y件可以很Ҏ被重用、维护和扩充?nbsp;
8. 提高软g的内聚?nbsp;
如果一个Y件的模块只实C个功能,那么该模块具有高内聚性。高内聚性的软g更容易维护和改进?nbsp;
判断一个模块是否有高的内聚性,看一看你是否能够用一个简单的句子描述它的功能p了。如果你用了一D话或者你需要用类似“和”、“或”等q词Q则说明你需要将该模块细化?nbsp;
只有高内聚性的模块才可能被重用?nbsp;
9. 考虑软g的移植?nbsp;
UL是Y件开发中一具体而又实际的工作,不要怿某些软g工具的广告宣传(比如java 的宣传口号write once run many ? 译者注Q?nbsp;
即仅仅对Y件进行常规升U,也要把这看得和向另一个操作系l或数据库移植一样重要?nbsp;
记得?6位WindowsUL?2位windows的“乐”吗 Q当你用了某个操作pȝ的特性,如它的进E间通信(IPC){略Q或用某数据库专有语a写了存储q程。你的Y件和那个特定的品结合度已l很高了?nbsp;
好的软g设计者把那些Ҏ的实现细节打包隐藏v来,所以,当那些特性该变的时候,你的仅仅需要更新那个包可以了?nbsp;
10. 接受变化
q是一句老话了:唯一不变的只有变化?nbsp;
你应该将所有系l将可能发生的变化以及潜在需求记录下?以便来能够实现Q参见“Architecting for Change”,Thinking Objectively, May 1999Q?nbsp;
通过在徏模期间考虑q些假设的情况,你就有可能开发出_强壮且容易维护的软g。设计强壮的软g是你最基本的目标?nbsp;
11. 不要低估对Y件规模的需?nbsp;
Internet 带给我们的最大的教训是你必须在Y件开发的最初阶D就考虑软g规模的可扩充性?nbsp;
今天只有100人的部门使用的应用程序,明天可能会被有好几万人的l织使用Q下月,通过因特|可能会有几百万Z用它?nbsp;
在Y件设计的初期Q根据在用例模型中定义的必须支持的基本事务处理,定软g的基本功能。然后,在徏造系l的时候再逐步加入比较常用的功能?nbsp;
在设计的开始考虑软g的规模需求,避免在用LH然增大的情况下Q重写Y件?nbsp;
12. 性能仅仅是很多设计因素之一
x软g设计中的一个重要因?-性能Q这好象也是用户最兛_的事情。一个性能不佳的Y件将不可避免被重写?nbsp;
但是你的设计q必d有可靠性,可用性,便携性和可扩展性。你应该在工E开始就应该定义q区分好q些因素Q以便在工作中恰当用。性能可以是,也可以不是优先最高的因素Q我的观ҎQ给每个设计因素应有的考虑?nbsp;
13. 理接口
“UML User Guide”(Grady BoochQIvar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999Q中指出Q你应该在开发阶D늚早期定义Y件模块之间的接口?nbsp;
q有助于你的开发h员全面理解Y件的设计l构q取得一致意见,让各模块开发小l相对独立的工作。一旦模块的接口定之后Q模块怎样实现׃是很重要了?nbsp;
从根本上_如果你不能够定义你的模块“从外部看上M是什么样子”,你肯定也不清楚模块内要实C么?nbsp;
14. 走近路需要更长的旉
在Y件开发中没有捷径可以走?nbsp;
~短你的在需求分析上q旉Q结果只能是开发出来的软g不能满用户的需求,必须被重写?nbsp;
在Y件徏模上每节省一周,在将来的~码阶段可能会多花几周时_因ؓ你在全面思考之前就动手写程序?nbsp;
你ؓ了节省一天的试旉而漏掉了一个bugQ在来的维护阶D,可能需要花几周甚至几个月的旉M复。与其如此,q不如重新安排一下项目计划?nbsp;
避免走捷径,只做一ơ但要做对(do it once by doing it rightQ?nbsp;
15. 别信赖Q何h
产品和服务销售公怸是你的朋友,你的大部分员工和高层理人员也不是?nbsp;
大部分品供应商希望把你牢牢l在他们的品上Q可能是操作pȝQ数据库或者某个开发工兗?nbsp;
大部分的N和承包商只关心你的钱q不是你的工E(停止向他们付ƾ,看一看他们会在周围呆多长旉Q?nbsp;
大部分程序员认ؓ他们自己比其他h更优UQ他们可能抛弃你设计的模型而用自己认ؓ更好的?nbsp;
只有良好的沟通才能解册些问题?nbsp;
要明的是,不要只依靠一家品或服务提供商,即你的公司Q或l织Q已l在建模、文档和q程{方面向那个公司投入了很多钱?nbsp;
16. 证明你的设计在实践中可行
在设计的时候应当先建立一个技术原型, 或者称为“端到端”原型。以证明你的设计是能够工作的?nbsp;
你应该在开发工作的早期做这些事情,因ؓQ如果Y件的设计Ҏ是不可行的,在编码实现阶D|论采取什么措施都于事无补。技术原型将证明你的设计的可行性,从而,你的设计更Ҏ获得支持?nbsp;
17. 应用已知的模?nbsp;
目前Q我们有大量现成的分析和设计模式以及问题的解x案可以用?nbsp;
一般来_好的模型设计和开发h员,都会避免重新设计已经成熟的ƈ被广泛应用的东西?nbsp;
http://www.ambysoft.com/processPatternsPage.html 收藏了许多开发模式的信息?nbsp;
18. 研究每个模型的长处和q
目前有很多种cȝ模型可以使用,如下图所C。用例捕L是系l行为需求,数据模型则描q支持一个系l运行所需要的数据构成。你可能会试囑֜用例中加入实际数据描qͼ但是Q这对开发者不是非常有用。同P数据模型ҎqY仉求来说是无用的。每个模型在你徏模过E中有其相应的位|,但是Q你需要明白在什么地方,什么时候用它们?nbsp;
19. 在现有Q务中应用多个模型
当你攉需求的时候,考虑使用用例模型Q用L面模型和领域U的cL型?nbsp;
当你设计软g的时候,应该考虑制作cL型,序图、状态图、协作图和最l的软g实际物理模型?nbsp;
E序设计人员应该慢慢意识刎ͼ仅仅使用一个模型而实现的软g要么不能够很好地满用户的需求,要么很难扩展?nbsp;
20. 教育你的听众
你花了很大力气徏立一个很成熟的系l模型,而你的听众却不能理解它们Q甚xp-qؓ什么要先徏立模型都不知道。那么你的工作是毫无意义的?nbsp;
教给你开发h员基本的建模知识Q否则,他们会只看看你画的漂亮图表,然后l箋~写不规范的E序?nbsp;
另外Q?nbsp;你还需要告诉你的用户一些需求徏模的基础知识。给他们解释你的用例(uses case)和用L面模型,以他们能够明白你要表达Cѝ当每个人都能用一个通用的设计语a的时候(比如UML-译者注Q,你的团队才能实现真正的合作?nbsp;
21. 带工Lȝq是ȝ
你给我CAD/CAM工具Q请我设计一座桥。但是,如果那桥徏成的话,我肯定不惛_W一个从桥上q的人,因ؓ我对建筑一H不通?nbsp;
使用一个很优秀的CASE工具q不能你成Z个徏模专Ӟ只能使你成ؓ一个优UCASE工具的用者。成Z个优U的徏模专安要多q的U篏Q不会是一周针Ҏ个h值几千美元工L培训。一个优U的CASE工具是很重要Q但你必d习用它Qƈ能够使用它设计它支持的模型?nbsp;
22. 理解完整的过E?nbsp;
好的设计人员应该理解整个软gq程Q尽他们可能不是精通全部实现细节?nbsp;
软g开发是一个很复杂的过E,q记得《object-oriented software process》第36늚内容吗?除了~程、徏模、测试等你擅长工作外Q还有很多工作要做?nbsp;
好的设计者需要考虑全局。必M长远考虑如何使Y件满用户需要,如何提供l护和技术支持等?nbsp;
23. 常做试Q早做测?nbsp;
如果试对你的Y件来说是无所谓的Q那么你的Y件多半也没什么必要被开发出来?nbsp;
建立一个技术原型供技术评审用,以检验你的Y件模型?nbsp;
在Y件生命周期中Q越晚发现的错误难修改Q修Ҏ本越昂贵。尽可能早的做测试是很值得的?nbsp;
24. 把你的工作归?nbsp;
不值得归档的工作往往也不值得做。归档你的设惻I以及Ҏ设想做出的决定;归档软g模型中很重要但不很明昄部分?nbsp;l每个模型一些概要描qC使别人很快明白模型所表达的内宏V?nbsp;
25. 技术会变,基本原理不会
如果有h说“用某U开发语a、某个工h某某技术,我们׃需要再做需求分析,建模Q编码或试”。不要相信,q只说明他还~Zl验。抛开技术和人的因素Q实际上软g开发的基本原理?0世纪70q代以来没有改变过。你必须q定义需求,建模Q编码,试Q配|,面对风险Q发布品,理工作人员{等?nbsp;
软g建模技术是需要多q的实际工作才能完全掌握的。好在你可以从我的徏议开始,完善你们自己的Y件开发经验?nbsp;
以鸡汤开始,加入自己的蔬菜。然后,开始n受你自己的丰盛晚吧
]]>
在我的机子上Q这两个中文包只适合eclipse3.1.1版本Q?.1版本都不适合Q但|上有h说可以用Q就不得而知了。eclipse3.1.1版本已经Z一D|日了Q但一直都没有使用q,今天是试用了一下,Lombozq可以用Q但de.strutsbox_20050804׃能用了?BR> 不过Q装上lombozQNLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip׃怎么起作用了?BR>
myeclipseME-4.0GA_E3.1ManualInstall版在q个版本下面也不能用?BR>
eclipse3.1.1在功能上?.1版没什么区别,但对插g兼容׃敢恭l了?BR>
]]>
但是Mono目的媄响确是更加深q的Q因些开发工hZCLIQ通用语言架构Q和微Y提交l欧z计机刉协会(ECMAQ的CQ实现标准的。如果Mono能够完成Zq些标准创徏一套Linux开发工具集的目标的话,开发者将能够~写同时在Windows和Linux上运行的.NetE序Q这些程序甚臌可能在其它非Windows的操作系l上q行Q比方Unix?
除了实际的开发过E,Mono目的工具必d开放源代码C֛的内部完成而不能违反微软的知识产权专利Q-q实际上意味着开发者们必须Z标准重新构造这些工兯不能查看微软的M源代码?
Mono目包括三个核心的部分:一个CQ语a的编译器Q一个CLI和一个类库?CLI是包含了cd载器的虚拟机Q实时的~译器,和一个运行时环境的垃圾收集器。CLIq个lg允许用CQ编写的应用E序能够在象Linuxq样的非Windows操作pȝ上运行。这与Java世界中Java虚拟够让一个应用程序在不同的操作系l上q行是类似的?
Mono目的类库能够让应用E序完成核心的诸如XML处理Q文件输入输出,和连接网l之cȝd。它会和微软的CLI兼容Q与微Y?Net framework中发布的东西紧密的配套)Q还有一点就是将由开放源代码团体~写的额外的cd也将和CLI兼容?
Ximian公司的de Icaza希望在年底到N目的一个里E碑Q这时编译器能够编译类库了。图形用L面组ӞQ创建GUIE序所需的类库-Q将在明q中完成?
“我们在q个斚w工作的原因是希望升我们的开发^台来创徏我们的Evolution桌面应用E序Q”de Icazo说。Evolution是Ximian公司的电子邮件客L及个人和工作l信息管理程序。“当我们看见.Net framework的时候,我们觉得q些是我们用来开发我们下一代品要使用的工P”他说?
Ximianq不Mono和它自己看作是给Linux开发者一U途径在可用的开发工h面赶上Windows。其实,Linux开发者将更喜Ƣ用他们目前使用的工h~写的编译应用程序。Ximian 另一个开放源代码目QSharpDevelop看作是用来提供与微YVisual Studio .NetcM的集成开发环境的一U途径?
通过以开放源代码的方式开发MonoQ这个项目包含了许多对开发过E拥有广泛兴的Z。虽然Ximian可能希望找一些改q的开发工h加速它的应用程序的开发过E,但其它的开发者可能是希望扑ֈ能够让他们在Windows上编写程序然后在Linuxpȝ上运行它们的开发工兗?
其中的一个大问题是如何避免微软的知识产权保护。“我们避免知识权保护的Ҏ是坚持非研究性的主题q用现有的技术实现其功能Q”de Icaza说。例如,Mono JIT~译器没有用Q何先q的JIT~译器技术。相反Mono的版本是Z老的JIT技术的?
De Icazaq声UMono必须“着眼大处”还不仅仅是dECMA规定了些什么。也是_Ximian计划参与标准的制定过Eƈ创徏cd来提?Net framework的薄׃处,比方说电子邮件管理?
据Giga Information Group的副分析师Stacey QuandtUͼ微Y不太可能支持Mono因ؓ其授权是与GNU 通用公众证书为CQ的授权和GNU 弱公众证书ؓcd和运行库的授权联pd一L?
但即使微软不支持MonoQMono的存在也证实了微软对?Net能够UL到其它^台的声明是正的?
Quandt说面向更q泛的开发团体是Mono面的另一个挑战。例如IBM和Sun都在Java上花费了巨额的投资,自然也就很难容忍竞争行ؓ?/SPAN>
]]>
db cd装了数据库操作,包括建立和关闭连接,以及执行SQL查询操作?BR>empcM用dbcdƈ针对EMP 表完成了Ҏ工号查询员工资料的功能,q提供了员工姓名的getterҎ?BR>
package db;
import java.net.*;
import java.sql.*;
import java.io.*;
public class db {
Connection conn;
Statement stmt;
ResultSet rs;
//数据库连?BR> public void getConnection(){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Hotel;User=sa;Password=sa");
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
//关闭q接
public void closeConnection(){
try{
if (conn != null){
conn.close();
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
//Ҏ据库q行操作
public ResultSet executeQuery(String sql){
rs = null;
try{
getConnection();
if (conn != null){
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
}
}
catch (Exception e){
System.out.println(e.getMessage());
}
return rs;
}
}
package db;
import java.sql.*;
public class emp extends db {
private String empno;
private String ename;
public emp(String em){
empno = em;
}
//执行Sql语句 对属性ename赋?BR> public void query(){
try{
String sSql = "select * from emp where empno =" + empno;
ResultSet rs = executeQuery(sSql);
if (rs.next()){
ename = rs.getString("ename");
}
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
//得到ename
public String getEname(){
return ename;
}
}
package db;
import java.io.*;
import java.sql.*;
public class TestBean {
public static void main(String args[]){
String empno;
emp em;
try{
System.out.println("误入工?");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
empno = br.readLine();
em = new em(empno);
em.query();
System.out.println("工号? + empno + "的员工姓名是:" + em.getEname());
em.closeConnection();
}
catch (Exception e){
System.out.println(e.getMessage());
}
}
}
W二QAnonymous Inner Class Q匿名内部类Q?是否可以extendsQ承)其它c,是否可以implementsQ实玎ͼinterfaceQ接口)Q?
W三QStatic Nested Class ?Inner Class的不同,说得多好Q面试题有的很笼l)?
W四Q?amp;?amp;&的区别?
W五QHashMap和Hashtable的区别?
W六QCollection ?Collections的区别?
W七Q什么时候用assert.
W八QGC是什么? Z么要有GCQ?
W九QString s = new StringQ?xyz"Q;创徏了几个String ObjectQ?
W十QMath.roundQ?1.5Q等於多? Math.roundQ?11.5Q等於多?
W十一Qshort s1 = 1Q?s1 = s1 + 1Q有什么错Q?short s1 = 1Q?s1 += 1Q有什么错Q?
W十二,sleepQ) ?waitQ) 有什么区别?
W十三,Java有没有gotoQ?
W十四,数组有没有lengthQ)q个ҎQ?String有没有lengthQ)q个ҎQ?
W十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的cdQ?
W十六,Set里的元素是不能重复的Q那么用什么方法来区分重复与否呢? 是用==q是equalsQ)Q?它们有何区别Q?
W十七,l我一个你最常见到的runtime exception.
W十八,error和exception有什么区别?
W十九,ListQ?SetQ?Map是否l承自Collection接口Q?
W二十,abstract class和interface有什么区别?
W二十一Qabstract的method是否可同时是staticQ是否可同时是nativeQ是否可同时是synchronizedQ?
W二十二Q接口是否可l承接口Q?抽象cL否可实现QimplementsQ接口? 抽象cL否可l承实体c(concrete classQ?
W二十三Q启动一个线E是用runQ)q是startQ)Q?
W二十四Q构造器Constructor是否可被overrideQ?
W二十五Q是否可以承Stringc?
W二十六Q当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方法?
W二十七Qtry {}里有一个return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后Q?
W二十八Q编E题Q?用最有效率的Ҏ出2乘以8{於几?
W二十九Q两个对象值相同(x.equalsQyQ?== trueQ,但却可有不同的hash codeQ这句话对不对?
W三十,当一个对象被当作参数传递到一个方法后Q此Ҏ可改变这个对象的属性,q可q回变化后的l果Q那么这里到底是g递还是引用传递?
W三十一Qswtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
W三十二Q编E题Q?写一个Singleton出来?
以下是答?
W一Q谈谈finalQ?finallyQ?finalize的区别?
finalQ修饰符Q关键字Q如果一个类被声明ؓfinalQ意味着它不能再z出新的子c,不能作ؓ父类被ѝ因此一个类不能既被声明?abstract的,又被声明为final的。将变量或方法声明ؓfinalQ可以保证它们在使用中不被改变。被声明为final的变量必d声明时给定初|而在以后的引用中只能dQ不可修攏V被声明为final的方法也同样只能使用Q不能重?BR>finallyQ再异常处理时提?finally 块来执行M清除操作。如果抛Z个异常,那么相匹配的 catch 子句׃执行Q然后控制就会进?finally 块(如果有的话)?
finalizeQ方法名。Java 技术允怋?finalizeQ) Ҏ在垃圾收集器对象从内存中清除出M前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对q个对象调用的。它是在 Object cM定义的,因此所有的c都l承了它。子c覆?finalizeQ) Ҏ以整理系l资源或者执行其他清理工作。finalizeQ) Ҏ是在垃圾攉器删除对象之前对q个对象调用的?
W二QAnonymous Inner Class Q匿名内部类Q?是否可以extendsQ承)其它c,是否可以implementsQ实玎ͼinterfaceQ接口)Q?
匿名的内部类是没有名字的内部cR不能extendsQ承) 其它c,但一个内部类可以作ؓ一个接口,由另一个内部类实现?
W三QStatic Nested Class ?Inner Class的不同,说得多好Q面试题有的很笼l)?
Nested Class Q一般是C++的说法)QInner Class Q一般是JAVA的说法)。Java内部cMC++嵌套cL大的不同在于是否有指向外部的引用上。具体可见httpQ?//www.frontfree.net/articles/services/view.aspQid=704&page=1
注: 静态内部类QInner ClassQ意味着1创徏一个static内部cȝ对象Q不需要一个外部类对象Q?不能从一个static内部cȝ一个对象访问一个外部类对象
W四Q?amp;?amp;&的区别?
&是位q算W?amp;&是布逻辑q算W?
W五QHashMap和Hashtable的区别?
都属于Map接口的类Q实C惟一键映到特定的g?
HashMap cL有分cL者排序。它允许一?null 键和多个 null 倹{?
Hashtable cM?HashMapQ但是不允许 null 键和 null 倹{它也比 HashMap 慢,因ؓ它是同步的?
W六QCollection ?Collections的区别?
Collections是个java.util下的c,它包含有各种有关集合操作的静态方法?
Collection是个java.util下的接口Q它是各U集合结构的父接口?
W七Q什么时候用assert?nbsp;
断言是一个包含布表辑ּ的语句,在执行这个语句时假定该表辑ּ?true。如果表辑ּ计算?falseQ那么系l会报告一?AssertionError。它用于调试目的Q?nbsp;
assert(a > 0); // throws an AssertionError if a <= 0
断言可以有两UŞ式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该L产生一个布倹{?nbsp;
Expression2 可以是得Z个值的L表达式。这个值用于生成显C更多调试信息的 String 消息?nbsp;
断言在默认情况下是禁用的。要在编译时启用断言Q需要?source 1.4 标记Q?nbsp;
javac -source 1.4 Test.java
要在q行时启用断aQ可使用 -enableassertions 或?-ea 标记?nbsp;
要在q行旉择用断言Q可使用 -da 或?-disableassertions 标记?nbsp;
要系l类中启用断aQ可使用 -esa 或?-dsa 标记。还可以在包的基上启用或者禁用断a?nbsp;
可以在预计正常情况下不会到达的Q何位|上攄断言。断a可以用于验证传递给U有Ҏ的参数。不q,断言不应该用于验证传递给公有Ҏ的参敎ͼ因ؓ不管是否启用了断aQ公有方法都必须查其参数。不q,既可以在公有Ҏ中,也可以在非公有方法中利用断言试后置条g。另外,断言不应该以M方式改变E序的状态?nbsp;
W八QGC是什? Z么要有GC? (基础)?nbsp;
GC是垃圾收集器。Java E序员不用担心内存管理,因ؓ垃圾攉器会自动q行理。要h垃圾攉Q可以调用下面的Ҏ之一Q?nbsp;
System.gc()
Runtime.getRuntime().gc()
W九QString s = new String("xyz");创徏了几个String Object?
两个对象Q一个是“xyx?一个是指向“xyx”的引用对象s?nbsp;
W十QMath.round(11.5){於多少? Math.round(-11.5){於多少?
Math.round(11.5)q回QlongQ?2QMath.round(-11.5)q回QlongQ?11;
W十一Qshort s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错Qs1是short型,s1+1是int?不能昑ּ转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确?nbsp;
W十二,sleep() ?wait() 有什么区? 搞线E的最?nbsp;
sleep()Ҏ是ɾU程停止一D|间的Ҏ。在sleep 旉间隔期满后,U程不一定立x复执行。这是因为在那个时刻Q其它线E可能正在运行而且没有被调度ؓ攑ּ执行Q除?a)“醒来”的U程h更高的优先Q?b)正在q行的线E因为其它原因而阻塞?nbsp;
wait()是线E交互时Q如果线E对一个同步对象x 发出一个wait()调用Q该U程会暂停执行,被调对象q入{待状态,直到被唤醒或{待旉到?nbsp;
W十三,Java有没有goto?
Goto?java中的保留字,现在没有在java中用?nbsp;
W十四,数组有没有length()q个Ҏ? String有没有length()q个ҎQ?nbsp;
数组没有length()q个ҎQ有length的属性?nbsp;
String有有length()q个Ҏ?nbsp;
W十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的cd?
Ҏ的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父cM子类之间多态性的一U表玎ͼ重蝲Overloading是一个类中多态性的一U表现。如果在子类中定义某Ҏ与其父类有相同的名称和参敎ͼ我们说该Ҏ被重?(Overriding)。子cȝ对象使用q个ҎӞ调用子cM的定义,对它而言Q父cM的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参C数或有不同的参数cdQ则UCؓҎ的重?Overloading)。Overloaded的方法是可以改变q回值的cd?nbsp;
W十六,Set里的元素是不能重复的Q那么用什么方法来区分重复与否? 是用==q是equals()? 它们有何区别?
Set里的元素是不能重复的Q那么用iterator()Ҏ来区分重复与否。equals()是判M个Set是否相等?nbsp;
equals()?=Ҏ军_引用值是否指向同一对象equals()在类中被覆盖Qؓ的是当两个分ȝ对象的内容和cd盔R的话Q返回真倹{?nbsp;
W十七,l我一个你最常见到的runtime exception?nbsp;
ArithmeticException,
ArrayStoreException,
BufferOverflowException,
BufferUnderflowException,
CannotRedoException,
CannotUndoException,
ClassCastException,
CMMException,
ConcurrentModificationException,
DOMException,
EmptyStackException,
IllegalArgumentException,
IllegalMonitorStateException,
IllegalPathStateException,
IllegalStateException,
ImagingOpException,
IndexOutOfBoundsException,
MissingResourceException,
NegativeArraySizeException,
NoSuchElementException,
NullPointerException,
ProfileDataException,
ProviderException,
RasterFormatException,
SecurityException,
SystemException,
UndeclaredThrowableException,
UnmodifiableSetException,
UnsupportedOperationException
W十八,error和exception有什么区?
error 表示恢复不是不可能但很困隄情况下的一U严重问题。比如说内存溢出。不可能指望E序能处理这L情况?
exception 表示一U设计或实现问题。也是_它表C如果程序运行正常,从不会发生的情况?nbsp;
W十九,List, Set, Map是否l承自Collection接口?
ListQSet?nbsp;
Map不是
W二十,abstract class和interface有什么区?
声明Ҏ的存在而不d现它的类被叫做抽象类Qabstract classQ,它用于要创徏一个体现某些基本行为的c,qؓ该类声明ҎQ但不能在该cM实现该类的情c不能创建abstract cȝ实例。然而可以创Z个变量,其类型是一个抽象类Qƈ让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract cȝ子类为它们父cM的所有抽象方法提供实玎ͼ否则它们也是抽象cMؓ。取而代之,在子cM实现该方法。知道其行ؓ的其它类可以在类中实现这些方法?nbsp;
接口QinterfaceQ是抽象cȝ变体。在接口中,所有方法都是抽象的。多l承性可通过实现q样的接口而获得。接口中的所有方法都是抽象的Q没有一个有E序体。接口只可以定义static final成员变量。接口的实现与子cȝ|除了该实现类不能从接口定义中l承行ؓ。当cd现特D接口时Q它定义Q即程序体l予Q所有这U接口的Ҏ。然后,它可以在实现了该接口的类的Q何对象上调用接口的方法。由于有抽象c,它允怋用接口名作ؓ引用变量的类型。通常的动态联~将生效。引用可以{换到接口cd或从接口cd转换Qinstanceof q算W可以用来决定某对象的类是否实现了接口?nbsp;
W二十一Qabstract的method是否可同时是static,是否可同时是nativeQ是否可同时是synchronized?
都不?nbsp;
W二十二Q接口是否可l承接口? 抽象cL否可实现(implements)接口? 抽象cL否可l承实体c?concrete class)?
接口可以l承接口。抽象类可以实现(implements)接口Q抽象类是否可承实体类Q但前提是实体类必须有明的构造函数?nbsp;
W二十三Q启动一个线E是用run()q是start()?
启动一个线E是调用start()ҎQɾU程所代表的虚拟处理机处于可运行状态,q意味着它可以由JVM调度q执行。这q不意味着U程׃立即q行。run()Ҏ可以产生必须退出的标志来停止一个线E?nbsp;
W二十四Q构造器Constructor是否可被override?
构造器Constructor不能被承,因此不能重写OverridingQ但可以被重载Overloading?nbsp;
W二十五Q是否可以承Stringc?
StringcLfinalcL不可以ѝ?nbsp;
W二十六Q当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方?
不能Q一个对象的一个synchronizedҎ只能׃个线E访问?nbsp;
W二十七Qtry {}里有一个return语句Q那么紧跟在q个try后的finally {}里的code会不会被执行Q什么时候被执行Q在return前还是后?
会执行,在return前执行?nbsp;
W二十八Q编E题: 用最有效率的Ҏ出2乘以8{於?
有C背景的程序员特别喜欢问这U问题?nbsp;
2 << 3
W二十九Q两个对象值相?x.equals(y) == true)Q但却可有不同的hash codeQ这句话对不?
不对Q有相同的hash code?nbsp;
W三十,当一个对象被当作参数传递到一个方法后Q此Ҏ可改变这个对象的属性,q可q回变化后的l果Q那么这里到底是g递还是引用传?
是g递。Java ~程语言只由g递参数。当一个对象实例作Z个参数被传递到Ҏ中时Q参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变Q但对象的引用是永远不会改变的?nbsp;
W三十一Qswtich是否能作用在byte上,是否能作用在long上,是否能作用在String?
switchQexpr1Q中Qexpr1是一个整数表辑ּ。因此传递给 switch ?case 语句的参数应该是 int?short?char 或?byte。long,string 都不能作用于swtich?nbsp;
W三十二Q编E题: 写一个Singleton出来?
Singleton模式主要作用是保证在Java应用E序中,一个类Class只有一个实例存在?nbsp;
一般Singleton模式通常有几U种形式:
W一UŞ? 定义一个类Q它的构造函Cؓprivate的,它有一个static的private的该cd量,在类初始化时实例话,通过一个public的getInstanceҎ获取对它的引?l而调用其中的Ҏ?nbsp;
public class Singleton {
private Singleton(){}
//在自己内部定义自׃个实例,是不是很奇怪?
//注意q是private 只供内部调用
private static Singleton instance = new Singleton();
//q里提供了一个供外部讉K本class的静态方法,可以直接讉K
public static Singleton getInstance() {
return instance;
}
}
W二UŞ?
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//q个Ҏ比上面有所改进Q不用每ơ都q行生成对象Q只是第一ơ
//使用时生成实例,提高了效率!
if (instance==null)
instanceQnew Singleton();
return instance; }
}
其他形式:
定义一个类Q它的构造函Cؓprivate的,所有方法ؓstatic的?nbsp;
一般认为第一UŞ式要更加安全?nbsp;
W三十三 Hashtable和HashMap
Hashtablel承自Dictionaryc,而HashMap是Java1.2引进的Map interface的一个实?nbsp;
HashMap允许null作ؓ一个entry的key或者valueQ而Hashtable不允?nbsp;
q有是QHashMap把Hashtable的containsҎL了,Ҏcontainsvalue和containsKey。因为containsҎҎ让h引v误解?nbsp;
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是Q在多个U程讉KHashtableӞ不需要自׃ؓ它的Ҏ实现同步Q而HashMap必Mؓ之提供外同步?nbsp;
Hashtable和HashMap采用的hash/rehash法都大概一P所以性能不会有很大的差异?nbsp;
版权声明 本篇文章Ҏ是否有帮助? 投票Q??nbsp; ?nbsp; 投票l果Q?nbsp; 24 0
作者其它文章:
Java多线E程序设?
前R之覆Q后车之?--开源项目经验谈
Resin服务器的使用
用Java的加密机制来保护你的数据
使用XML装数据库操作语句的实现
作者全部文?nbsp; 查看作者的Blog
评论人:onefox 参与? 40162 专家? 965 发表旉: 2005-03-21 21:21
很有自信的能回答的,大概?30%题目?/P>
其他很多涉及的问题^旉用自q一套过滤掉了?/P>
没有仔细研究q?nbsp;
评论人:javasleepless 参与? 312 专家? 10 发表旉: 2005-03-25 19:27
8错,可以借此Z弄清那些h的概?nbsp;
评论人:andersonmao 参与? 94 专家? 0 发表旉: 2005-05-12 10:51
关于26,没有说详l?BR>=============================================
W二十六Q当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方?
不能Q一个对象的一个synchronizedҎ只能׃个线E访问?nbsp;
=============================================关于26,没有说详l?BR>=============================================
W二十六Q当一个线E进入一个对象的一个synchronizedҎ后,其它U程是否可进入此对象的其它方?
不能Q一个对象的一个synchronizedҎ只能׃个线E访问?nbsp;
=============================================
一个对象的所有synchronizedҎ在同一个时间只能由一个线E访问。这个对象的其它不是synchronizedҎ不受q个限制。就是说
当一个线E正在执行这个对象的一个synchronized时。这个对象的所有synchronizedҎ都不能被其它U程讉KQ但是这个对象的不是
synchronized的方法可以被其它U程讉K?BR> 例子:
SynObject.java
====
public class SynObject{
public synchronized void SynMethod(int index){
System.out.println("Thread Index="+index+" In SynMethod - Begin");
try{
Thread.sleep(100);
}catch(Exception e){
}
System.out.println("Thread Index="+index+" In SynMethod - End");
}
public void NoneSynMethod(int index){
System.out.println("Thread Index="+index+" In NoneSynMethod");
}
}
====
ThreadTest.java
====
public class ThreadTest extends Thread{
int threadNo;
static SynObject obj=new SynObject();
public void run(){
System.out.println("Thread No="+threadNo+" Begin run");
for(int i=0;i<3;i++){
obj.SynMethod(threadNo);
obj.NoneSynMethod(threadNo);
}
}
public ThreadTest(int No){
threadNo=No;
}
public static void main(String[] a){
Thread th1=new ThreadTest(1);
Thread th2=new ThreadTest(2);
th1.start();
th2.start();
}
}
====
q行 java ThreadTest
可能的结果ؓ(因ؓU程相关Q结果可能不一?:
Thread No=1 Begin run
Thread Index=1 In SynMethod - Begin
Thread No=2 Begin run
Thread Index=1 In SynMethod - End
Thread Index=2 In SynMethod - Begin
Thread Index=1 In NoneSynMethod //在Thread 2 执行SynMethod() q程?Thread 1 执行?NoneSynMethod()
Thread Index=2 In SynMethod - End
Thread Index=2 In NoneSynMethod
Thread Index=1 In SynMethod - Begin
Thread Index=1 In SynMethod - End
Thread Index=2 In SynMethod - Begin
Thread Index=1 In NoneSynMethod
Thread Index=2 In SynMethod - End
Thread Index=1 In SynMethod - Begin
Thread Index=2 In NoneSynMethod
Thread Index=1 In SynMethod - End
Thread Index=1 In NoneSynMethod
Thread Index=2 In SynMethod - Begin
Thread Index=2 In SynMethod - End
Thread Index=2 In NoneSynMethod
1. 使类可能短精悍,而且只解决一个特定的问题。下面是对类设计的一些徏议:
一个复杂的开兌句:考虑采用"多Ş"机制Q?
数量众多的方法涉及到cd差别极大的操作:考虑用几个类来分别实玎ͼ
许多成员变量在特征上有很大的差别Q考虑使用几个c.
2. 在多U程环境中,隐私是特别重要的一个因?-只有private字段才能在非同步使用的情况下受到保护?/P>
3. M时候只要发现类与类之间l合得非常紧密,需要考虑是否采用内部c,从而改善编码及l护工作Q参见第14?4.1.2节?用内部类改进代码"Q?
Servlet是Java技术对CGI~程的回{。ServletE序在服务器端运行,动态地生成Web面。与传统的CGI和许多其他类似CGI的技术相比,Java Servleth更高的效率,更容易用,功能更强大,h更好的可UL性,更节省投资?/P>
高效
在传l的CGI中,每个h都要启动一个新的进E,如果CGIE序本n的执行时间较短,启动q程所需要的开销很可能反而超q实际执行时间。而在Servlet中,每个h׃个轻量的JavaU程处理(而不是重量的操作系l进E??/P>
在传lCGI中,如果有N个ƈ发的对同一CGIE序的请求,则该CGIE序的代码在内存中重复装载了N?而对于ServletQ处理请求的是N个线E,只需要一份ServletcM码。在性能优化斚wQServlet也比CGI有着更多的选择Q比如缓冲以前的计算l果Q保持数据库q接的活动,{等?/P>
其实CGI是Common Gateway Interface(公共|关接口)
方便
Servlet提供了大量的实用工具例程Q例如自动地解析和解码HTML表单数据、读取和讄HTTP头、处理Cookie、跟t会话状态等?/P>
功能强大
在Servlet中,许多使用传统CGIE序很难完成的Q务都可以L地完成。例如,Servlet能够直接和Web服务器交互,而普通的CGIE序不能。Servletq能够在各个E序之间׃n数据Q得数据库q接池之cȝ功能很容易实现?/P>
可移植性好
Servlet用Java~写QServlet APIh完善的标准。因此,为I-Planet Enterprise Server写的Servlet无需M实质上的改动卛_UL到Apache、Microsoft IIS或者WebStar。几乎所有的L服务器都直接或通过插g支持Servlet?/P>
节省投资
不仅有许多廉L臛_费的Web服务器可供个人或规模网站用,而且对于现有的服务器Q如果它不支持Servlet的话Q要加上q部分功能也往往是免费的(或只需要极的投资)?/P>
JSP及其特点
JavaServer Pages(JSP)是一U实现普通静态HTML和动态HTML混合~码的技?/P>
许多由CGIE序生成的页面大部分仍旧是静态HTMLQ动态内容只在页面中有限的几个部分出现。但是包括Servlet在内的大多数CGI技术及其变U,L通过E序生成整个面。JSP使得我们可以分别创徏q两个部分。例如,下面是一个简单的JSP面:
Q?DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"Q?BR>QHTMLQ?BR>QHEADQ<TITLEQ欢q访问网上商店</TITLEQ</HEADQ?BR>QBODYQ?BR>QH1Q欢q</H1Q?BR>QSMALLQ欢q?
Q?-- 首次讉K的用户名字ؓ"New User" --Q?BR>Q? out.println(Utils.getUserNameFromCookie(request)); %Q?BR>要设|帐号信息,L?BR>QA HREF="Account-Settings.html"Q这里</AQ</SMALLQ?BR>QPQ?BR>面的其余内宏V?
Q?BODYQ</HTMLQ?/P>
下面是JSP和其他类似或相关技术的一个简单比?
JSP和Active Server Pages(ASP)相比
Microsoft的ASP是一U和JSPcM的技术。JSP和ASP相比h两方面的优点。首先,动态部分用Java~写Q而不是VB Script或其他Microsoft语言Q不仅功能更强大而且更易于用。第二,JSP应用可以UL到其他操作系l和非Microsoft的Web服务器上?/P>
JSP和纯Servlet相比
JSPq没有增加Q何本质上不能用Servlet实现的功能。但是,在JSP中编写静态HTML更加方便Q不必再?println语句来输出每一行HTML代码。更重要的是Q借助内容和外观的分离Q页面制作中不同性质的Q务可以方便地分开:比如Q由面设计专家q行HTML设计Q同时留ZServletE序员插入动态内容的I间?/P>
JSP和服务器端包?Server-Side IncludeQSSI)相比
SSI是一U受到广泛支持的在静态HTML中引入外部代码的技术。JSP在这斚w的支持更为完善,因ؓ它可以用Servlet而不是独立的E序来生成动态内宏V另外,SSI实际上只用于单的包含Q而不是面向那些能够处理表单数据、访问数据库的“真正的”程序?/P>
JSP和JavaScript相比
JavaScript能够在客L动态地生成HTML。虽然JavaScript很有用,但它只能处理以客L环境为基的动态信息。除了Cookie之外QHTTP状态和表单提交数据对JavaScript来说都是不可用的。另外,׃是在客户端运行,JavaScript不能讉K服务器端资源Q比如数据库、目录信息等{?/P>
1 javascript Q设|一个变量,只允许提交一ơ。
<script language="javascript">
var checkSubmitFlg = false;
function checkSubmit() {
if (checkSubmitFlg == true) {
return false;
}
checkSubmitFlg = true;
return true;
}
document.ondblclick = function docondblclick() {
window.event.returnValue = false;
}
document.onclick = function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false;
}
}
</script>
<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">
2 q是javascriptQ将提交按钮或者image|ؓdisable
<html:form action="myAction.do" method="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
</html:form>
3 利用struts的同步o牌机制
利用同步令牌QTokenQ机制来解决Web应用中重复提交的问题QStruts也给Z一个参考实现?
基本原理Q
服务器端在处理到辄h之前Q会请求中包含的o牌g保存在当前用户会话中的o牌D行比较,看是否匹配。在处理完该h后,且在{复发送给客户端之前,会产生一个新的o牌,该o牌除传给客户端以外,也会用户会话中保存的旧的o牌进行替换。这样如果用户回退到刚才的提交面q再ơ提交的话,客户端传q来的o牌就和服务器端的令牌不一_从而有效地防止了重复提交的发生。
if (isTokenValid(request, true)) {
// your code here
return mapping.findForward("success");
} else {
saveToken(request);
return mapping.findForward("submitagain");
}
StrutsҎ用户会话ID和当前系l时间来生成一个唯一Q对于每个会话)令牌的,具体实现可以参考TokenProcessorcM的generateToken()Ҏ。
1. //验证事务控制令牌,<html:form >会自动根据session中标识生成一个隐含input代表令牌Q防止两ơ提?
2. 在action中:
//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
// value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request)) errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
resetToken(request); //删除session中的令牌
3. action有这L一个方法生成o牌
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}