﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-天涯【钝】刀客</title><link>http://www.blogjava.net/elegantyu/</link><description>设计模式/uml/随想/杂谈...</description><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 02:13:33 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 02:13:33 GMT</pubDate><ttl>60</ttl><item><title>怎样成为优秀的软件模型设计者【转载】</title><link>http://www.blogjava.net/elegantyu/articles/189266.html</link><dc:creator>天涯【钝】刀客</dc:creator><author>天涯【钝】刀客</author><pubDate>Fri, 28 Mar 2008 06:51:00 GMT</pubDate><guid>http://www.blogjava.net/elegantyu/articles/189266.html</guid><wfw:comment>http://www.blogjava.net/elegantyu/comments/189266.html</wfw:comment><comments>http://www.blogjava.net/elegantyu/articles/189266.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/elegantyu/comments/commentRss/189266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/elegantyu/services/trackbacks/189266.html</trackback:ping><description><![CDATA[作者：Scott Ambler著，乐林峰 译 本文选自：www.umlchina.com <br />
<br />
本文原始地址为：http://www.matrix.org.cn/resource/article/2003-09-30/525.html<br />
<br />
我们期待自己成为一个优秀的软件模型设计者，但是，要怎样做，又从哪里开始呢？ <br />
<br />
将下列原则应用到你的软件工程中，你会获得立杆见影的成果。 <br />
<br />
1. 人远比技术重要 <br />
<br />
你开发软件是为了供别人使用，没有人使用的软件只是没有意义的数据的集合而已。许多在软件方面很有成就的行家在他们事业的初期却表现平平，因为他们那时侯将主要精力都集中在技术上。显然，构件（components），EJB（Enterprise Java Beans）和代理（agent）是很有趣的东西。但是对于用户来说，如果你设计的软件很难使用或者不能满足他们的需求，后台用再好的技术也于事无补。多花点时间到软件需求和设计一个使用户能很容易理解的界面上。 <br />
<br />
2. 理解你要实现的东西 <br />
<br />
好的软件设计人员把大多数时间花费在建立系统模型上，偶尔写一些源代码，但那只不过是为了验证设计过程中所遇到的问题。这将使他们的设计方案更加可行。 <br />
<br />
3. 谦虚是必须的品格 <br />
<br />
你不可能知道一切，你甚至要很努力才能获得足够用的知识。软件开发是一项复杂而艰巨的工作，因为软件开发所用到的工具和技术是在不断更新的。而且，一个人也不可能了解软件开发的所有过程。在日常生活中你每天接触到的新鲜事物可能不会太多。但是对于从事软件开发的人来说，每天可以学习很多新东西（如果愿意的话）。 <br />
<br />
4. 需求就是需求 <br />
<br />
如果你没有任何需求，你就不要动手开发任何软件。成功的软件取决于时间（在用户要求的时间内完成）、预算和是否满足用户的需求。如果你不能确切知道用户需要的是什么，或者软件的需求定义，那么你的工程注定会失败。 <br />
<br />
5. 需求其实很少改变，改变的是你对需求的理解 <br />
<br />
Object ToolSmiths公司（www.objecttoolsmiths.com）的Doug Smith常喜欢说：&#8220;分析是一门科学，设计是一门艺术&#8221;。他的意思是说在众多的&#8220;正确&#8221;分析模型中只存在一个最&#8220;正确&#8221;分析模型可以完全满足解决某个具体问题的需要（我理解的意思是需求分析需要一丝不苟、精确的完成,而设计的时候反而可以发挥创造力和想象力 - 译者注）。 <br />
<br />
如果需求经常改动，很可能是你没有作好需求分析，并不是需求真的改变了。 <br />
<br />
你可以抱怨用户不能告诉你他们想得到什么，但是不要忘记，收集需求信息是你工作。 <br />
<br />
你可以说是新来的开发人员把事情搞得一团糟，但是，你应该确定在工程的第一天就告诉他们应该做什么和怎样去做。 <br />
<br />
如果你觉得公司不让你与用户充分接触，那只能说明公司的管理层并不是真正支持你的项目。 <br />
<br />
你可以抱怨公司有关软件工程的管理制度不合理，但你必须了解大多同行公司是怎么做的。 <br />
<br />
你可以借口说你们的竞争对手的成功是因为他们有了一个新的理念，但是为什么你没先想到呢？ <br />
<br />
需求真正改变的情况很少，但是没有做好需求分析工作的理由却很多。 <br />
<br />
6. 经常阅读 <br />
<br />
在这个每日都在发生变化的产业中，你不可能在已取得的成就上陶醉太久。 <br />
<br />
每个月至少读2、3本专业杂志或者1本专业书籍。保持不落伍需要付出很多的时间和金钱，但会使你成为一个很有实力的竞争者。 <br />
<br />
7. 降低软件模块间的耦合度 <br />
<br />
高耦合度的系统是很难维护的。一处的修改引起另一处甚至更多处的变动。 <br />
<br />
你可以通过以下方法降低程序的耦合度：隐藏实现细节，强制构件接口定义，不使用公用数据结构，不让应用程序直接操作数据库（我的经验法则是：当应用程序员在写SQL代码的时候，你的程序的耦合度就已经很高了）。 <br />
<br />
耦合度低的软件可以很容易被重用、维护和扩充。 <br />
<br />
8. 提高软件的内聚性 <br />
<br />
如果一个软件的模块只实现一个功能，那么该模块具有高内聚性。高内聚性的软件更容易维护和改进。 <br />
<br />
判断一个模块是否有高的内聚性，看一看你是否能够用一个简单的句子描述它的功能就行了。如果你用了一段话或者你需要使用类似&#8220;和&#8221;、&#8220;或&#8221;等连词，则说明你需要将该模块细化。 <br />
<br />
只有高内聚性的模块才可能被重用。 <br />
<br />
9. 考虑软件的移植性 <br />
<br />
移植是软件开发中一项具体而又实际的工作，不要相信某些软件工具的广告宣传（比如java 的宣传口号write once run many ? 译者注）。 <br />
<br />
即使仅仅对软件进行常规升级，也要把这看得和向另一个操作系统或数据库移植一样重要。 <br />
<br />
记得从16位Windows移植到32位windows的&#8220;乐趣&#8221;吗 ？当你使用了某个操作系统的特性，如它的进程间通信(IPC)策略，或用某数据库专有语言写了存储过程。你的软件和那个特定的产品结合度就已经很高了。 <br />
<br />
好的软件设计者把那些特有的实现细节打包隐藏起来，所以，当那些特性该变的时候，你的仅仅需要更新那个包就可以了。 <br />
<br />
10. 接受变化 <br />
<br />
这是一句老话了：唯一不变的只有变化。 <br />
<br />
你应该将所有系统将可能发生的变化以及潜在需求记录下来,以便将来能够实现（参见&#8220;Architecting for Change&#8221;，Thinking Objectively, May 1999） <br />
<br />
通过在建模期间考虑这些假设的情况，你就有可能开发出足够强壮且容易维护的软件。设计强壮的软件是你最基本的目标。 <br />
<br />
11. 不要低估对软件规模的需求 <br />
<br />
Internet 带给我们的最大的教训是你必须在软件开发的最初阶段就考虑软件规模的可扩充性。 <br />
<br />
今天只有100人的部门使用的应用程序，明天可能会被有好几万人的组织使用，下月，通过因特网可能会有几百万人使用它。 <br />
<br />
在软件设计的初期，根据在用例模型中定义的必须支持的基本事务处理，确定软件的基本功能。然后，在建造系统的时候再逐步加入比较常用的功能。 <br />
<br />
在设计的开始考虑软件的规模需求，避免在用户群突然增大的情况下，重写软件。 <br />
<br />
12. 性能仅仅是很多设计因素之一 <br />
<br />
关注软件设计中的一个重要因素--性能，这好象也是用户最关心的事情。一个性能不佳的软件将不可避免被重写。 <br />
<br />
但是你的设计还必须具有可靠性，可用性，便携性和可扩展性。你应该在工程开始就应该定义并区分好这些因素，以便在工作中恰当使用。性能可以是，也可以不是优先级最高的因素，我的观点是，给每个设计因素应有的考虑。 <br />
<br />
13. 管理接口 <br />
<br />
&#8220;UML User Guide&#8221;（Grady Booch，Ivar Jacobson和Jim Rumbaugh ,Addison Wesley, 1999）中指出，你应该在开发阶段的早期就定义软件模块之间的接口。 <br />
<br />
这有助于你的开发人员全面理解软件的设计结构并取得一致意见，让各模块开发小组相对独立的工作。一旦模块的接口确定之后，模块怎样实现就不是很重要了。 <br />
<br />
从根本上说，如果你不能够定义你的模块&#8220;从外部看上去会是什么样子&#8221;，你肯定也不清楚模块内要实现什么。 <br />
<br />
14. 走近路需要更长的时间 <br />
<br />
在软件开发中没有捷径可以走。 <br />
<br />
缩短你的在需求分析上花的时间，结果只能是开发出来的软件不能满足用户的需求，必须被重写。 <br />
<br />
在软件建模上每节省一周，在将来的编码阶段可能会多花几周时间，因为你在全面思考之前就动手写程序。 <br />
<br />
你为了节省一天的测试时间而漏掉了一个bug，在将来的维护阶段，可能需要花几周甚至几个月的时间去修复。与其如此，还不如重新安排一下项目计划。 <br />
<br />
避免走捷径，只做一次但要做对（do it once by doing it right）。 <br />
<br />
15. 别信赖任何人 <br />
<br />
产品和服务销售公司不是你的朋友，你的大部分员工和高层管理人员也不是。 <br />
<br />
大部分产品供应商希望把你牢牢绑在他们的产品上，可能是操作系统，数据库或者某个开发工具。 <br />
<br />
大部分的顾问和承包商只关心你的钱并不是你的工程（停止向他们付款，看一看他们会在周围呆多长时间）。 <br />
<br />
大部分程序员认为他们自己比其他人更优秀，他们可能抛弃你设计的模型而用自己认为更好的。 <br />
<br />
只有良好的沟通才能解决这些问题。 <br />
<br />
要明确的是，不要只依靠一家产品或服务提供商，即使你的公司（或组织）已经在建模、文档和过程等方面向那个公司投入了很多钱。 <br />
<br />
16. 证明你的设计在实践中可行 <br />
<br />
在设计的时候应当先建立一个技术原型， 或者称为&#8220;端到端&#8221;原型。以证明你的设计是能够工作的。 <br />
<br />
你应该在开发工作的早期做这些事情，因为，如果软件的设计方案是不可行的，在编码实现阶段无论采取什么措施都于事无补。技术原型将证明你的设计的可行性，从而，你的设计将更容易获得支持。 <br />
<br />
17. 应用已知的模式 <br />
<br />
目前，我们有大量现成的分析和设计模式以及问题的解决方案可以使用。 <br />
<br />
一般来说，好的模型设计和开发人员，都会避免重新设计已经成熟的并被广泛应用的东西。 <br />
http://www.ambysoft.com/processPatternsPage.html 收藏了许多开发模式的信息。 <br />
<br />
18. 研究每个模型的长处和弱点 <br />
<br />
目前有很多种类的模型可以使用,如下图所示。用例捕获的是系统行为需求，数据模型则描述支持一个系统运行所需要的数据构成。你可能会试图在用例中加入实际数据描述，但是，这对开发者不是非常有用。同样，数据模型对描述软件需求来说是无用的。每个模型在你建模过程中有其相应的位置，但是，你需要明白在什么地方，什么时候使用它们。 <br />
<br />
19. 在现有任务中应用多个模型 <br />
<br />
当你收集需求的时候，考虑使用用例模型，用户界面模型和领域级的类模型。 <br />
<br />
当你设计软件的时候，应该考虑制作类模型，顺序图、状态图、协作图和最终的软件实际物理模型。 <br />
<br />
程序设计人员应该慢慢意识到，仅仅使用一个模型而实现的软件要么不能够很好地满足用户的需求，要么很难扩展。 <br />
<br />
20. 教育你的听众 <br />
<br />
你花了很大力气建立一个很成熟的系统模型，而你的听众却不能理解它们，甚至更糟－连为什么要先建立模型都不知道。那么你的工作是毫无意义的。 <br />
<br />
教给你开发人员基本的建模知识；否则，他们会只看看你画的漂亮图表，然后继续编写不规范的程序。 <br />
<br />
另外， 你还需要告诉你的用户一些需求建模的基础知识。给他们解释你的用例(uses case)和用户界面模型，以使他们能够明白你要表达地东西。当每个人都能使用一个通用的设计语言的时候（比如UML-译者注），你的团队才能实现真正的合作。 <br />
<br />
21. 带工具的傻瓜还是傻瓜 <br />
<br />
你给我CAD/CAM工具，请我设计一座桥。但是，如果那座桥建成的话，我肯定不想当第一个从桥上过的人，因为我对建筑一窍不通。 <br />
<br />
使用一个很优秀的CASE工具并不能使你成为一个建模专家，只能使你成为一个优秀CASE工具的使用者。成为一个优秀的建模专家需要多年的积累，不会是一周针对某个价值几千美元工具的培训。一个优秀的CASE工具是很重要，但你必须学习使用它，并能够使用它设计它支持的模型。 <br />
<br />
22. 理解完整的过程 <br />
<br />
好的设计人员应该理解整个软件过程，尽管他们可能不是精通全部实现细节。 <br />
<br />
软件开发是一个很复杂的过程，还记得《object-oriented software process》第36页的内容吗？除了编程、建模、测试等你擅长工作外，还有很多工作要做。 <br />
<br />
好的设计者需要考虑全局。必须从长远考虑如何使软件满足用户需要，如何提供维护和技术支持等。 <br />
<br />
23. 常做测试，早做测试 <br />
<br />
如果测试对你的软件来说是无所谓的，那么你的软件多半也没什么必要被开发出来。 <br />
<br />
建立一个技术原型供技术评审使用，以检验你的软件模型。 <br />
<br />
在软件生命周期中，越晚发现的错误越难修改，修改成本越昂贵。尽可能早的做测试是很值得的。 <br />
<br />
24. 把你的工作归档 <br />
<br />
不值得归档的工作往往也不值得做。归档你的设想，以及根据设想做出的决定；归档软件模型中很重要但不很明显的部分。 给每个模型一些概要描述以使别人很快明白模型所表达的内容。 <br />
<br />
25. 技术会变，基本原理不会 <br />
<br />
如果有人说&#8220;使用某种开发语言、某个工具或某某技术，我们就不需要再做需求分析，建模，编码或测试&#8221;。不要相信，这只说明他还缺乏经验。抛开技术和人的因素，实际上软件开发的基本原理自20世纪70年代以来就没有改变过。你必须还定义需求，建模，编码，测试，配置，面对风险，发布产品，管理工作人员等等。 <br />
<br />
软件建模技术是需要多年的实际工作才能完全掌握的。好在你可以从我的建议开始，完善你们自己的软件开发经验。 <br />
<br />
以鸡汤开始，加入自己的蔬菜。然后，开始享受你自己的丰盛晚餐吧。 <br />
<img src ="http://www.blogjava.net/elegantyu/aggbug/189266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/elegantyu/" target="_blank">天涯【钝】刀客</a> 2008-03-28 14:51 <a href="http://www.blogjava.net/elegantyu/articles/189266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构师书单【转载】</title><link>http://www.blogjava.net/elegantyu/articles/186955.html</link><dc:creator>天涯【钝】刀客</dc:creator><author>天涯【钝】刀客</author><pubDate>Tue, 18 Mar 2008 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/elegantyu/articles/186955.html</guid><wfw:comment>http://www.blogjava.net/elegantyu/comments/186955.html</wfw:comment><comments>http://www.blogjava.net/elegantyu/articles/186955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/elegantyu/comments/commentRss/186955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/elegantyu/services/trackbacks/186955.html</trackback:ping><description><![CDATA[<br />
本为原出处为：<br />
<a href="http://blog.csdn.net/fengzhihong/archive/2007/03/08/1524513.aspx">http://blog.csdn.net/fengzhihong/archive/2007/03/08/1524513.aspx</a><br />
<a href="http://blog.chinaunix.net/u/24141/showart_246568.html">http://blog.chinaunix.net/u/24141/showart_246568.html</a><br />
<br />
【列出来只是为了自己方便查看，如原作者有意见，请给本人留言，立即删除】<br />
<br />
&nbsp;<font size="4"><span style="font-family: arial">一、Software Architecture篇</span></font>
<p>&nbsp;&nbsp; <font size="4"><strong style="font-family: arial">1.《Software Architect Bootcamp--软件架构师教程》</strong></font><br />
<img alt="" src="http://ec2.images-amazon.com/images/P/0131412272.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/0131412272.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" />&nbsp;<img alt="" src="http://www.dearbook.com/book/images/750539204501.jpg" temp_src="http://www.dearbook.com/book/images/750539204501.jpg" />&nbsp; 可惜第2版国内还没有翻译，新部分只好看电子版了。<br />
<br />
<strong>&nbsp; <font size="4"><span style="font-family: arial">2. 《The Art of Software Architecture: Design Methods and Techniques--软件体系结构的艺术》</span></font><br />
</strong><img alt="" src="http://ec2.images-amazon.com/images/P/0471228869.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/0471228869.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com/Book/BookImage/22/TS_711113438101top.jpg" temp_src="http://www.dearbook.com/Book/BookImage/22/TS_711113438101top.jpg" /><br />
<br />
&nbsp;<br />
&nbsp;<font size="4"><span style="font-family: arial"> </span><strong style="font-family: arial">3. 《Large-Scale Software Architecture-A Practical Guide using UML--大型软件体系结构：使用UML实践指南》</strong></font></p>
<img alt="" src="http://ec1.images-amazon.com/images/P/0470848499.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0470848499.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /> <img alt="" src="http://www.dearbook.com/Book/BookImage/21/TS_750539497101top.jpg" temp_src="http://www.dearbook.com/Book/BookImage/21/TS_750539497101top.jpg" /> <br />
<br />
<font size="4"><strong style="font-family: arial">&nbsp;4.《Documenting Software Architectures: Views and Beyond--软件构架编档》</strong><span style="font-family: arial"> </span></font><br />
<img alt="" src="http://ec1.images-amazon.com/images/P/0201703726.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0201703726.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /> <img alt="" src="http://www.dearbook.com/book/images/TS0012776top.jpg" temp_src="http://www.dearbook.com/book/images/TS0012776top.jpg" />&nbsp; 第13届JOLT大奖作品。<br />
<br />
<font size="4"><strong style="font-family: arial">5. 《A Practical Guide to Enterprise Architecture--企业架构实用指南》</strong></font><br />
<img alt="" src="http://ec1.images-amazon.com/images/P/0131412752.01._AA240_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0131412752.01._AA240_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com/book/BookImage/37/lastTS0044479__.jpg" temp_src="http://www.dearbook.com/book/BookImage/37/lastTS0044479__.jpg" />&nbsp; 书商Scott W. Ambler作品，他那套agile书的大杂烩。<br />
<br />
<font size="4"><strong style="font-family: arial">6. 《Domain-Specific Application Frameworks: Frameworks Experience by Industry--特定领域应用框架：行业的框架体验》</strong></font><br />
<strong><img alt="" src="http://ec1.images-amazon.com/images/P/0471332801.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0471332801.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/Book/BookImage/23/TS_tdn01top.jpg" temp_src="http://www.dearbook.com.cn/Book/BookImage/23/TS_tdn01top.jpg" /></strong>&nbsp; 出手稍慢就买不到了。<br />
<br />
<br />
<br />
<h2>&nbsp;&nbsp;<font size="4"><span style="font-family: arial"> 二、Patterns篇</span></font></h2>
<p><strong><font size="4"><span style="font-family: arial">1. 《Head First Design Patterns》</span></font><br />
</strong><img alt="" src="http://ec2.images-amazon.com/images/P/0596007124.01._AA240_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/0596007124.01._AA240_SCLZZZZZZZ_.jpg" />&nbsp;最容易的GOF23经典设计模式阐释。<br />
<br />
<font size="4"><strong style="font-family: arial">2. 《Patterns of Enterprise Application Architecture--企业应用架构模式》</strong></font><br />
<img alt="" src="http://ec1.images-amazon.com/images/P/0321127420.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0321127420.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com/Book/BookImage/22/TS_711114305101top.jpg" temp_src="http://www.dearbook.com/Book/BookImage/22/TS_711114305101top.jpg" />&nbsp; Martin Fowler经典。<br />
<br />
<strong><font size="4">3. 《Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions--企业集成模式：设计、构建及部署消息传递解决方案》</font><br />
</strong><img alt="" src="http://ec1.images-amazon.com/images/P/0321200683.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0321200683.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com/book/BookImage/lastTS00106277__.jpg" temp_src="http://www.dearbook.com/book/BookImage/lastTS00106277__.jpg" />&nbsp; 企业应用通信集成，SOA/ESB方面的架构师必读。<br />
<br />
<strong><font size="4">4. 《Effective Enterprise Java--中文版》<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;《Expert One-on-One J2EE Design and Development--J2EE设计开发编程指南》</font> <br />
</strong><br />
<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://ec2.images-amazon.com/images/P/0321130006.01._AA240_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/0321130006.01._AA240_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/Book/BookImage/30/TS_711117114001top.jpg" temp_src="http://www.dearbook.com.cn/Book/BookImage/30/TS_711117114001top.jpg" /></strong>&nbsp;&nbsp; Neward, <font size="4">Ted作品，所有Java架构师必读。</font><br />
<img alt="" src="http://ec1.images-amazon.com/images/P/0764543857.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0764543857.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/book/images/TS0012739top.jpg" temp_src="http://www.dearbook.com.cn/book/images/TS0012739top.jpg" />&nbsp; Rod Johnson作品，依然使用J2EE的倒霉架构师必读。<br />
<br />
<br />
<br />
<strong><font size="4">5.《Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects, Volume 2--面向模式的软件体系结构卷2:用于并发和网络化对象的模式》<br />
<br />
&nbsp;&nbsp; 《<a border="0"><span class="b24-booktitle"><strong>Pattern-Oriented Software Architecture: Patterns for Resource Management, Volume 3</strong></span></a></font> <strong><font size="4">--面向模式的软件体系结构卷3：资源管理模式》</font><br />
</strong><br />
</strong><img alt="" src="http://ec1.images-amazon.com/images/P/0471606952.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0471606952.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/book/images/TS0012515top.jpg" temp_src="http://www.dearbook.com.cn/book/images/TS0012515top.jpg" />&nbsp; POSA2，网络编程尤其是用ACE的架构师必读。<br />
<br />
<strong><br />
</strong><img alt="" src="http://ec2.images-amazon.com/images/P/0470845252.01._AA240_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/0470845252.01._AA240_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/book/BookImage/35/lastTS0044414__.jpg" temp_src="http://www.dearbook.com.cn/book/BookImage/35/lastTS0044414__.jpg" />&nbsp; POSA3，网络与后台编程的架构师必读。<br />
<br />
</p>
<h2>三、RUP/UML 篇</h2>
<p><font size="4">1. 最适合架构师的过程依然是RUP，而RUP最好的书是那份《RUP－软件开发团队的最佳实践.pdf》加上 RUP2003.6.15自带的完整文档。<br />
<br />
<br />
2. UML是架构师的通用语言，随便看一份电子书也能入门了，语法方面不需要专门买书。<br />
&nbsp;&nbsp;&nbsp; 但教人如何画好UML的《The Elements of UML Style--UML风格》就很必要，可惜国内没有翻译第2版。</font> <br />
<img alt="" src="http://ec1.images-amazon.com/images/P/0521616786.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0521616786.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/Book/BookImage/21/TS_uml01top.jpg" temp_src="http://www.dearbook.com.cn/Book/BookImage/21/TS_uml01top.jpg" /><br />
<br />
<br />
</p>
<h2><font size="4">四、闲书篇</font></h2>
<p><strong><font size="4">1.《Code Complete 2--代码大全2》</font><br />
</strong><img alt="" src="http://ec2.images-amazon.com/images/P/0735619670.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/0735619670.01._BO2,204,203,200_PIsitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/book/BookImage/lastTS0090969__.jpg" temp_src="http://www.dearbook.com.cn/book/BookImage/lastTS0090969__.jpg" />&nbsp; 一本你教育小弟时的代言人。<br />
<br />
<font size="4"><strong>2.《The Pragmatic Programmer--程序员修炼之道：从小工到专家》</strong></font><br />
<img alt="" src="http://ec2.images-amazon.com/images/P/020161622X.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec2.images-amazon.com/images/P/020161622X.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/book/BookImage/47/lastTS0090353__.jpg" temp_src="http://www.dearbook.com.cn/book/BookImage/47/lastTS0090353__.jpg" />&nbsp;一本你启发小弟的代言人。<br />
<br />
<br />
<strong>3.《The Art of Unix Programming --UNIX编程艺术》</strong><br />
<img alt="" src="http://ec1.images-amazon.com/images/P/0131429019.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" temp_src="http://ec1.images-amazon.com/images/P/0131429019.01._BO2,204,203,200_PIlitb-dp-500-arrow,TopRight,45,-64_OU01_AA240_SH20_SCLZZZZZZZ_.jpg" /><img alt="" src="http://www.dearbook.com.cn/book/BookImage/lastTS0091589__.jpg" temp_src="http://www.dearbook.com.cn/book/BookImage/lastTS0091589__.jpg" /></p>
<h2 style="color: rgb(255,1,2); font-family: arial"><font size="4">Java程序员的推荐阅读书籍:</font></h2>
<br />
<p>1、《Java编程思想》 <br />
<img alt="" src="http://www.douban.com/lpic/s1959358.jpg" border="0" /> <br />
<font size="4">在有了一定的Java编程经验之后，你需要&#8220;知其所以然&#8221;了。这个时候《Java编程思想》是一本让你知其所以然的好书，它对于基本的面向对象知识有比较清楚的交待，对Java基本语法，基本类库有比较清楚的讲解，可以帮你打一个良好的Java编程基础。这本书的缺点是实在太厚，也比较罗嗦，不适合现代人快节奏学习，因此看这本书要懂得取舍，不是每章每节都值得一看的，挑重点的深入看就可以了。</font></p>
<p>2、<font size="4">《Agile Java》中文版 </font><br />
<img alt="" src="http://www.douban.com/lpic/s2008093.jpg" border="0" /> <br />
<font size="4">这本书一大特点是以单元测试和TDD来贯穿全书的，在教你Java各种重要的基础知识的过程中，潜移默化的影响你的编程思维走向敏捷，走向TDD。另外这本书成书很新，以JDK5.0的语法为基础讲解，要学习JDK5.0的新语法也不错。还有这本书对于内容取舍也非常得当，Java语言毕竟类库庞大，可以讲的内容太多，这本书选择的内容以及内容的多寡都很得当，可以让你以最少的时间掌握Java最重要的知识，顺便培养出来优秀的编程思路，真是一本不可多得的好书。</font></p>
<p><font size="4">虽然作者自己把这本书定位在入门级别，但我不确定这本书用来入门是不是稍微深了点，我自己也准备有空的时候翻翻这本书，学习学习。</font></p>
<p><font size="4"><span style="font-size: 18pt">二、Java编程进阶类</span></font></p>
<p><font size="4">打下一个良好的Java基础，还需要更多的实践经验积累，我想没有什么捷径。有两本书值得你在编程生涯的这个阶段阅读，培养良好的编程习惯，提高你的代码质量。</font></p>
<p><font size="4">1、《重构 改善既有代码的设计》 <br />
<img alt="" src="http://www.douban.com/lpic/s1826359.jpg" border="0" /> <br />
这本书名气很大，不用多介绍，可以在闲暇的时候多翻翻，多和自己的实践相互印证。这本书对你产生影响是潜移默化的。</font></p>
<p>2、《测试驱动开发 by Example》 <br />
<img alt="" src="http://www.douban.com/lpic/s1441607.jpg" border="0" /> <br />
<font size="4">本书最大特点是很薄，看起来没有什么负担。你可以找一个周末的下午，一边看，一边照做，一个下午就把书看完，这本书的所有例子跑完了。这本书的作用是通过实战让你培养TDD的思路。</font></p>
<p><font size="4"><span style="font-size: 18pt">三、Java架构师之路</span></font></p>
<p><font size="4">到这个阶段，你应该已经非常娴熟的运用Java编程，而且有了一个良好的编程思路和习惯了，但是你可能还缺乏对应用软件整体架构的把握，现在就是你迈向架构师的第一步。</font></p>
<p><font size="4">1、《Expert One-on-One J2EE Design and Development》 <br />
<img alt="" src="http://www.douban.com/lpic/s1501574.jpg" border="0" /> <br />
这本书是Rod Johnson的成名著作，非常经典，从这本书中的代码诞生了springframework。但是好像这本书没有中译本。</font></p>
<p><font size="4">2、《Expert One-on-One J2EE Development without EJB》 <br />
<img alt="" src="http://www.douban.com/lpic/s1496227.jpg" border="0" /> <br />
这本书由gigix组织翻译，多位业界专家参与，虽然署名译者是JavaEye，其实JavaEye出力不多，实在是忝居译者之名。</font></p>
<p><font size="4">以上两本书都是Rod Johnson的经典名著，Java架构师的必读书籍。在我所推荐的这些书籍当中，是我看过的最仔细，最认真的书，我当时读这本书几乎是废寝忘食的一气读完的，有小时候挑灯夜读金庸武侠小说的劲头，书中所讲内容和自己的经验知识一一印证，又被无比精辟的总结出来，读完这本书以后，我有种被打通经脉，功力爆增的感觉。</font></p>
<p><font size="4">但是后来我看过一些其他人的评价，似乎阅读体验并没有我那么high，也许是因为每个人的知识积累和经验不同导致的。我那个时候刚好是经验知识积累已经足够丰富，但是还没有系统的整理成型，让这本书一梳理，立刻形成完整的知识体系了。</font></p>
<p><font size="4">3、《企业应用架构模式》 <br />
<img alt="" src="http://www.douban.com/lpic/s1607804.jpg" border="0" /> <br />
Martin的又一本名著，但这本书我只是泛泛的看了一遍，并没有仔细看。这本书似乎更适合做框架的人去看，例如如果你打算自己写一个ORM的话，这本书是一定要看的。但是做应用的人，不看貌似也无所谓，但是如果有空，我还是推荐认真看看，会让你知道框架为什么要这样设计，这样你的层次可以晋升到框架设计者的角度去思考问题。Martin的书我向来都是推崇，但是从来都没有像Rod Johnson的书那样非常认真去看。</font></p>
<p><font size="4">4、《敏捷软件开发 原则、模式与实践》 <br />
<img alt="" src="http://www.douban.com/lpic/s1671095.jpg" border="0" /> <br />
Uncle Bob的名著，敏捷的经典名著，这本书比较特别，与其说是讲软件开发过程的书，不如说讲软件架构的书，本书用了很大篇幅讲各种面向对象软件开发的各种模式，个人以为看了这本书，就不必看GoF的《设计模式》了。</font></p>
<p><font size="4"><span style="font-size: 18pt">四、软件开发过程</span></font></p>
<p><font size="4">了解软件开发过程不单纯是提高程序员个人的良好编程习惯，也是增强团队协作的基础。</font></p>
<p><font size="4">1、《UML精粹》 <br />
<img alt="" src="http://www.douban.com/lpic/s1648691.jpg" border="0" /> <br />
UML其实和软件开发过程没有什么必然联系，却是软件团队协作沟通，撰写软件文档需要的工具。但是UML真正实用的图不多，看看这本书已经足够了，完全没有必要去啃《UML用户指南》之类的东西。要提醒大家的是，这本书的中译本翻译的非常之烂，建议有条件的看英文原版。</font></p>
<p><font size="4">2、《解析极限编程 拥抱变化》XP <br />
<img alt="" src="http://www.douban.com/lpic/s2008432.jpg" border="0" /> <br />
这是Kent Beck名著的第二版，中英文对照。没什么好说的，必读书籍。</font></p>
<p><font size="4">3、《统一软件开发过程》UP <br />
<img alt="" src="http://www.douban.com/lpic/s1843342.jpg" border="0" /> <br />
其实UP和敏捷并不一定冲突，UP也非常强调迭代，测试，但是UP强调的文档和过程驱动却是敏捷所不取的。不管怎么说，UP值得你去读，毕竟在中国真正接受敏捷的企业很少，你还是需要用UP来武装一下自己的，哪怕是披着UP的XP。</font></p>
<p><font size="4">4、《敏捷建模》AM <br />
<img alt="" src="http://www.douban.com/lpic/s1264986.jpg" border="0" /> <br />
Scott Ambler的名著，这本书非常的progmatic，告诉你怎么既敏捷又UP，把敏捷和UP统一起来了，又提出了很多progmatic的建议和做法。你可以把《解析极限编程拥抱变化》、《统一软件开发过程》和《敏捷建模》这三本书放在一起读，看XP和UP的不同点，再看AM是怎么统一XP和UP的，把这三种理论融为一炉，形成自己的理论体系，那么你也可以去写书了。</font></p>
<p><font size="4"><span style="font-size: 18pt">五、软件项目管理</span></font></p>
<p><font size="4">如果你突然被领导提拔为项目经理，而你完全没有项目管理经验，你肯定会心里没底；如果你觉得自己管理项目不善，很想改善你的项目管理能力，那么去考PMP肯定是远水不解近渴的。</font></p>
<p><font size="4">1、《快速软件开发》 <br />
<img alt="" src="http://www.douban.com/lpic/s1696681.jpg" border="0" /> <br />
这也是一本名著。可以这样说，有本书在手，你就有了一个项目管理的高级参谋给你出谋划策，再也不必担心自己不能胜任的问题了。这本书不是讲管理的理论的，在实际的项目管理中，讲这些理论是不解决问题的，这本书有点类似于&#8220;软件项目点子大全&#8221;之类的东西，列举了种种软件项目当中面临的各种问题，以及应该如何解决问题的点子，你只需要稍加变通，找方抓药就行了。</font></p>
<font size="4"><br />
</font><br />
<img src ="http://www.blogjava.net/elegantyu/aggbug/186955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/elegantyu/" target="_blank">天涯【钝】刀客</a> 2008-03-18 11:10 <a href="http://www.blogjava.net/elegantyu/articles/186955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试题之二（非原创）</title><link>http://www.blogjava.net/elegantyu/articles/186929.html</link><dc:creator>天涯【钝】刀客</dc:creator><author>天涯【钝】刀客</author><pubDate>Tue, 18 Mar 2008 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/elegantyu/articles/186929.html</guid><wfw:comment>http://www.blogjava.net/elegantyu/comments/186929.html</wfw:comment><comments>http://www.blogjava.net/elegantyu/articles/186929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/elegantyu/comments/commentRss/186929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/elegantyu/services/trackbacks/186929.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、作用域public,private,protected,以及不写时的区别答：区别如下：作用域&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当前类&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同一package&nbsp;&nbsp;子孙类&nbsp;&nbsp;&...&nbsp;&nbsp;<a href='http://www.blogjava.net/elegantyu/articles/186929.html'>阅读全文</a><img src ="http://www.blogjava.net/elegantyu/aggbug/186929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/elegantyu/" target="_blank">天涯【钝】刀客</a> 2008-03-18 10:20 <a href="http://www.blogjava.net/elegantyu/articles/186929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试题及答案【非原创】</title><link>http://www.blogjava.net/elegantyu/articles/186922.html</link><dc:creator>天涯【钝】刀客</dc:creator><author>天涯【钝】刀客</author><pubDate>Tue, 18 Mar 2008 02:07:00 GMT</pubDate><guid>http://www.blogjava.net/elegantyu/articles/186922.html</guid><wfw:comment>http://www.blogjava.net/elegantyu/comments/186922.html</wfw:comment><comments>http://www.blogjava.net/elegantyu/articles/186922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/elegantyu/comments/commentRss/186922.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/elegantyu/services/trackbacks/186922.html</trackback:ping><description><![CDATA[<span class="postbody">第一，谈谈final, finally, finalize的区别。 　　 <br />
final—修饰符（关键字）如果一个类被声明为final，意味着它不能再派生出新的子类，不能作为父类被继承。因此一个类不能既被声明为 abstract的，又被声明为final的。将变量或方法声明为final，可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。被声明为final的方法也同样只能使用，不能重载。 <br />
　　finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常，那么相匹配的 catch 子句就会执行，然后控制就会进入 finally 块（如果有的话）。 <br />
　　finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的，因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 <br />
　　第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? <br />
　　匿名的内部类是没有名字的内部类。不能extends(继承) 其它类，但一个内部类可以作为一个接口，由另一个内部类实现。 <br />
　　第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。 <br />
　　Nested Class （一般是C++的说法），Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.asp?id=704&amp;page=1 　　 注： 静态内部类（Inner Class）意味着1创建一个static内部类的对象，不需要一个外部类对象，2不能从一个static内部类的一个对象访问一个外部类对象 <br />
　　第四，&amp;和&amp;&amp;的区别。 <br />
　　&amp;是位运算符。&amp;&amp;是布尔逻辑运算符。 <br />
　　第五，HashMap和Hashtable的区别。 <br />
　　都属于Map接口的类，实现了将惟一键映射到特定的值上。 　　 HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 　　 Hashtable 类似于 HashMap，但是不允许 null 键和 null 值。它也比 HashMap 慢，因为它是同步的。 <br />
　　第六，Collection 和 Collections的区别。 <br />
　　Collections是个java.util下的类，它包含有各种有关集合操作的静态方法。 　　 Collection是个java.util下的接口，它是各种集合结构的父接口。 <br />
　　第七，什么时候用assert。 <br />
　　断言是一个包含布尔表达式的语句，在执行这个语句时假定该表达式为 true。如果表达式计算为 false，那么系统会报告一个 Assertionerror。它用于调试目的： <br />
　　assert(a &gt; 0); // throws an Assertionerror if a &lt;= 0 <br />
　　 断言可以有两种形式： 　　 assert Expression1 ; 　　 assert Expression1 : Expression2 ; 　　 Expression1 应该总是产生一个布尔值。 　　 Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。 　　 断言在默认情况下是禁用的。要在编译时启用断言，需要使用 source 1.4 标记： 　　 javac -source 1.4 Test.java 　　 要在运行时启用断言，可使用 -enableassertions 或者 -ea 标记。 　　 要在运行时选择禁用断言，可使用 -da 或者 -disableassertions 标记。 　　 要系统类中启用断言，可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。 <br />
　　可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过，断言不应该用于验证传递给公有方法的参数，因为不管是否启用了断言，公有方法都必须检查其参数。不过，既可以在公有方法中，也可以在非公有方法中利用断言测试后置条件。另外，断言不应该以任何方式改变程序的状态。 <br />
<br />
　　第八，GC是什么? 为什么要有GC? (基础)。 <br />
　　GC是垃圾收集器。Java 程序员不用担心内存管理，因为垃圾收集器会自动进行管理。要请求垃圾收集，可以调用下面的方法之一： <br />
　　System.gc() 　　 Runtime.getRuntime().gc() <br />
　　第九，String s = new String("xyz");创建了几个String Object? <br />
　　两个对象，一个是&#8220;xyx&#8221;,一个是指向&#8220;xyx&#8221;的引用对象s。 <br />
　　第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少?　　　　 Math.round(11.5)返回（long）12，Math.round(-11.5)返回（long）-11; <br />
　　第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?　　short s1 = 1; s1 = s1 + 1;有错，s1是short型，s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 <br />
　　第十二，sleep() 和 wait() 有什么区别? 搞线程的最爱 <br />
　　sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不一定立即恢复执行。这是因为在那个时刻，其它线程可能正在运行而且没有被调度为放弃执行，除非(a)&#8220;醒来&#8221;的线程具有更高的优先级。　　 (b)正在运行的线程因为其它原因而阻塞。 　　 wait()是线程交互时，如果线程对一个同步对象x 发出一个wait()调用，该线程会暂停执行，被调对象进入等待状态，直到被唤醒或等待时间到。 <br />
　　第十三，Java有没有goto? <br />
　　Goto—java中的保留字，现在没有在java中使用。 <br />
　　第十四，数组有没有length()这个方法? String有没有length()这个方法？ <br />
　　数组没有length()这个方法，有length的属性。 　　 String有有length()这个方法。 <br />
　　第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? <br />
　　方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现，重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被&#8220;屏蔽&#8221;了。如果在一个类中定义了多个同名的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 <br />
　　第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? <br />
　　Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 　　 equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。 <br />
　　第十七，给我一个你最常见到的runtime exception。 <br />
　　ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, 　　 ImagingOpException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException <br />
<br />
　　第十八，error和exception有什么区别? <br />
　　error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 　　 exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。 　　 第十九，List, Set, Map是否继承自Collection接口? <br />
　　List，Set是 <br />
　　Map不是 <br />
　　第二十，abstract class和interface有什么区别? <br />
　　声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 <br />
　　接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。 <br />
　　第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? <br />
　　都不能 <br />
　　第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? <br />
　　接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。 <br />
　　第二十三，启动一个线程是用run()还是start()? <br />
　　启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 <br />
　　第二十四，构造器Constructor是否可被override? <br />
　　构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。 <br />
　　第二十五，是否可以继承String类? <br />
　　String类是final类故不可以继承。 <br />
<br />
　　第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? <br />
　　不能，一个对象的一个synchronized方法只能由一个线程访问。 　　 第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? <br />
　　会执行，在return前执行。 　　 第二十八，编程题: 用最有效率的方法算出2乘以8等於几? <br />
　　有C背景的程序员特别喜欢问这种问题。 <br />
　　第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? <br />
　　不对，有相同的hash code。 <br />
　　第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? <br />
　　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。 <br />
　　第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? <br />
　　switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 <br />
　　第三十二，编程题: 写一个Singleton出来。 <br />
　　Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 </span>
<img src ="http://www.blogjava.net/elegantyu/aggbug/186922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/elegantyu/" target="_blank">天涯【钝】刀客</a> 2008-03-18 10:07 <a href="http://www.blogjava.net/elegantyu/articles/186922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;uml和模式应用&gt;读书笔记:up是如何计划一次迭代的</title><link>http://www.blogjava.net/elegantyu/articles/186881.html</link><dc:creator>天涯【钝】刀客</dc:creator><author>天涯【钝】刀客</author><pubDate>Mon, 17 Mar 2008 15:04:00 GMT</pubDate><guid>http://www.blogjava.net/elegantyu/articles/186881.html</guid><wfw:comment>http://www.blogjava.net/elegantyu/comments/186881.html</wfw:comment><comments>http://www.blogjava.net/elegantyu/articles/186881.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/elegantyu/comments/commentRss/186881.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/elegantyu/services/trackbacks/186881.html</trackback:ping><description><![CDATA[<br />
具体的来说,推荐的一种方式有下面的几个步骤.<br />
<br />
1.&nbsp;确定迭代的时间长度,这个时间长度确定下来以后呢就不能更改了.常见的周期一般是2~6周.一般4周最为合&nbsp; 适,3周开发,一周测试.不要为了赶上进度而延长迭代周期,当发现在规定的时间内无法完成当除计划的任务的时候,因该减少部分的工作量而不是延长本次迭代时间.<br />
<br />
2.召开迭代会议,这个会议召开的时间通常是在上一次迭代结束下一次迭代尚未开始之前召开.<br />
<br />
3.列出本次迭代的潜在目标,也就是任务了.并标记优先级.<br />
<br />
4.开发团队的每个人员都要给出自己的资源时间表,比如大概什么时候请多长时间的假之类的.好让项目经理归汇总总共有多少资源可用.<br />
<br />
5.讨论步骤3里面确定下来的任务,并给出工作量的评估.直到得出所有本次计划所有任务的工作量.<br />
<br />
6.比较总的工作量是否和步骤4里面得到的总的资源相一致,如果一致则本次计划结束,否则就要剔除步骤3里面取定的部分认为.<br />
<br />
注意点:开发人员应该积极参与计划和评估过程,而不是项目经理一个人说了算. 
 <img src ="http://www.blogjava.net/elegantyu/aggbug/186881.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/elegantyu/" target="_blank">天涯【钝】刀客</a> 2008-03-17 23:04 <a href="http://www.blogjava.net/elegantyu/articles/186881.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开博偶感</title><link>http://www.blogjava.net/elegantyu/archive/2008/03/15/186497.html</link><dc:creator>天涯【钝】刀客</dc:creator><author>天涯【钝】刀客</author><pubDate>Sat, 15 Mar 2008 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/elegantyu/archive/2008/03/15/186497.html</guid><wfw:comment>http://www.blogjava.net/elegantyu/comments/186497.html</wfw:comment><comments>http://www.blogjava.net/elegantyu/archive/2008/03/15/186497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/elegantyu/comments/commentRss/186497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/elegantyu/services/trackbacks/186497.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 申请这个blog，不是为了show什么东西，主要是为了保留住自己认为有价值的文章、记忆。<br />
这些文章可能不是自己的原创，但是绝对是得到了本人的认同才会保留、转载过来的。<br />
&nbsp;&nbsp;&nbsp; 其实，这段时间，也曾经对自己走的路产生迷惘过，对自己能在java这条路上坚持多久也有过迷惘<br />
，庆幸的是终于坚持了下来。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 工作这么多年，对自己的认知基本是2年一个循环。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 刚毕业的时候，认为自己很牛，2年后发现自己很烂，又2年，感觉自己很牛，而今，嘿嘿，又认为自己很烂.....！<br />
&nbsp;&nbsp;&nbsp;&nbsp; 看了一批牛人写的文章，在05年的时候，写的文章，而到了08年，我还忙没接触过文章里面所提及的那些概念，当时看得我真是汗颜啊！只好从现在起，多看点书，对不起别人，总得对得起自己吧，哈哈！<br />
&nbsp;&nbsp;&nbsp; 开博，随想，聊以安慰！
<img src ="http://www.blogjava.net/elegantyu/aggbug/186497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/elegantyu/" target="_blank">天涯【钝】刀客</a> 2008-03-15 15:59 <a href="http://www.blogjava.net/elegantyu/archive/2008/03/15/186497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>