﻿<?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/ywsky/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 07:54:57 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 07:54:57 GMT</pubDate><ttl>60</ttl><item><title>TOMCAT：禁止TOMCAT目录访问</title><link>http://www.blogjava.net/ywsky/archive/2006/12/13/87524.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Wed, 13 Dec 2006 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/12/13/87524.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/87524.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/12/13/87524.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/87524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/87524.html</trackback:ping><description><![CDATA[
		<p align="left">在运行程序中，有时在IE上直接打入一个目录名，会将出现当前目录的所有文件，这样一来就大不安全了。为了禁止<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">TOMCAT</b><b style="COLOR: black; BACKGROUND-COLOR: #a0ffff">目录访问</b>。我们可以在<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">TOMCAT</b>的服务中进行设置。</p>
		<p align="left">1：打开\<b style="COLOR: black; BACKGROUND-COLOR: #ffff66">Tomcat</b> 5.0\conf\web.xml;</p>
		<p align="left">2:在文件中：</p>
		<p align="left"> &lt;servlet&gt;<br />        &lt;servlet-name&gt;default&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;<br />          org.apache.catalina.servlets.DefaultServlet<br />        &lt;/servlet-class&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;debug&lt;/param-name&gt;<br />            &lt;param-value&gt;0&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        <strong>&lt;init-param&gt;<br />            &lt;param-name&gt;listings&lt;/param-name&gt;<br />            &lt;param-value&gt;false&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br /></strong>        &lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />    &lt;/servlet&gt;</p>
		<p align="left">
				<strong>将上面的listings的属性设为false就行了。</strong>
		</p>
<img src ="http://www.blogjava.net/ywsky/aggbug/87524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-12-13 16:44 <a href="http://www.blogjava.net/ywsky/archive/2006/12/13/87524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>  有效编写软件的75条建议  【转】</title><link>http://www.blogjava.net/ywsky/archive/2006/12/10/86669.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Sun, 10 Dec 2006 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/12/10/86669.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/86669.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/12/10/86669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/86669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/86669.html</trackback:ping><description><![CDATA[
		<p>1. 你们的项目组使用源代码管理工具了么？<br />　　　　应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。</p>
		<p>　　 2. 你们的项目组使用缺陷管理系统了么？<br />　　　　应该用。ClearQuest太复杂，我的推荐是BugZilla。 </p>
		<p>　　3. 你们的测试组还在用Word写测试用例么？<br />　　　　不要用Word写测试用例（Test Case）。应该用一个专门的系统，可以是Test Manager，也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。</p>
		<p>　　4. 你们的项目组有没有建立一个门户网站？<br />　　　　要有一个门户网站，用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现，15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。 </p>
		<p>　　5. 你们的项目组用了你能买到最好的工具么？<br />　　　　应该用尽量好的工具来工作。比如，应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费，所以说是“你能买到最好的”。 </p>
		<p>　　6. 你们的程序员工作在安静的环境里么？<br />　　　　需要安静环境。这点极端重要，而且要保证每个人的空间大于一定面积。 </p>
		<p>　　7. 你们的员工每个人都有一部电话么？<br />　　　 需要每人一部电话。而且电话最好是带留言功能的。当然，上这么一套带留言电话系统开销不小。不过至少每人一部电话要有，千万别搞得经常有人站起来喊：“某某某电话”。《人件》里面就强烈谴责这种做法。 </p>
		<p>　　8. 你们每个人都知道出了问题应该找谁么？<br />　　　　应该知道。任何一个Feature至少都应该有一个Owner，当然，Owner可以继续Dispatch给其他人。</p>
		<p>　　9. 你遇到过有人说“我以为…”么？<br />　　　　要消灭“我以为”。Never assume anything。 </p>
		<p>　　10. 你们的项目组中所有的人都坐在一起么？<br />　　　　需要。我反对Virtual Team，也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起，好处多得不得了。 </p>
		<p>　　11. 你们的进度表是否反映最新开发进展情况？ <br />　　　　应该反映。但是，应该用Baseline的方法来管理进度表：维护一份稳定的Schedule，再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。</p>
		<p>　　12. 你们的工作量是先由每个人自己估算的么？<br />　　　　应该让每个人自己估算。要从下而上估算工作量，而不是从上往下分派。除非有其他原因，比如政治任务工期固定等。 </p>
		<p>　　13. 你们的开发人员从项目一开始就加班么？<br />　　　　不要这样。不要一开始就搞疲劳战。从项目一开始就加班，只能说明项目进度不合理。当然，一些对日软件外包必须天天加班，那属于剥削的范畴。 </p>
		<p>　　14. 你们的项目计划中Buffer Time是加在每个小任务后面的么？<br />　　　　不要。Buffer Time加在每个小任务后面，很容易轻易的就被消耗掉。Buffer Time要整段的加在一个Milestone或者checkpoint前面。 </p>
		<p>　　15. 值得再多花一些时间，从95%做到100%好值得，非常值得。<br />　　　　尤其当项目后期人困马乏的时候，要坚持。这会给产品带来质的区别。 </p>
		<p>　　16. 登记新缺陷时，是否写清了重现步骤？<br />　　　　要。这属于Dev和Test之间的沟通手段。面对面沟通需要，详细填写Repro Steps也需要。 </p>
		<p>　　17. 写新代码前会把已知缺陷解决么？<br />　　　　要。每个人的缺陷不能超过10个或15个，否则必须先解决老的bug才能继续写新代码。 </p>
		<p>　　18. 你们对缺陷的轻重缓急有事先的约定么？<br />　　　　必须有定义。Severity要分1、2、3，约定好：蓝屏和Data Lost算Sev 1，Function Error算Sev 2，界面上的算Sev 3。但这种约定可以根据产品质量现状适当进行调整。</p>
		<p>　　19. 你们对意见不一的缺陷有三国会议么？<br />　　　　 必须要有。要有一个明确的决策过程。这类似于CCB (Change Control Board)的概念。 </p>
		<p>　　20. 所有的缺陷都是由登记的人最后关闭的么？ <br />　　　　Bug应该由Opener关闭。Dev不能私自关闭Bug。 </p>
		<p>　　21. 你们的程序员厌恶修改老的代码么？<br />　　　　厌恶是正常的。解决方法是组织Code Review，单独留出时间来。XP也是一个方法。</p>
		<p>　　22. 你们项目组有Team Morale Activity么？<br />　　　　每个月都要搞一次，吃饭、唱歌、Outing、打球、开卡丁车等等，一定要有。不要剩这些钱。 </p>
		<p>　　23. 你们项目组有自己的Logo么？<br />　　　　要有自己的Logo。至少应该有自己的Codename。 </p>
		<p>　　24. 你们的员工有印有公司Logo的T-Shirt么？<br />　　　　要有。能增强归属感。当然，T-Shirt要做的好看一些，最好用80支的棉来做。别没穿几次就破破烂烂的。</p>
		<p>　　25. 总经理至少每月参加次项目组会议要的。<br />　　　　要让team member觉得高层关注这个项目。</p>
		<p>　　26. 你们是给每个Dev开一个分支么？<br />　　　　反对。Branch的管理以及Merge的工作量太大，而且容易出错。 </p>
		<p>　　27. 有人长期不Check-In代码么？<br />　　　　不可以。对大部分项目来说，最多两三天就应该Check-In。 </p>
		<p>　　28. 在Check-In代码时都填写注释了么？<br />　　　　要写的，至少一两句话，比如“解决了Bug No.225”。如果往高处拔，这也算做“配置审计”的一部分。</p>
		<p>　　29. 有没有设定每天Check-In的最后期限？<br />　　　　要的，要明确Check-In Deadline。否则会Build Break。 </p>
		<p>　　30. 你们能把所有源码一下子编译成安装文件吗？ <br />　　　　要的。这是每日编译（Daily Build）的基础。而且必须要能够做成自动的。 </p>
		<p>　　31. 你们的项目组做每日编译么？<br />　　当然要做。有三样东西是软件项目/产品开发必备的：1. bug management; 2. source control; 3. daily build。 </p>
		<p>　　32. 你们公司有没有积累一个项目风险列表？<br />　　　　要。Risk Inventory。否则，下个项目开始的时候，又只能拍脑袋分析Risk了。</p>
		<p>　　33. 设计越简单越好越简单越好。<br />　　　　设计时候多一句话，将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scope management。 </p>
		<p>　　34. 尽量利用现有的产品、技术、代码千万别什么东西都自己Coding。BizTalk和Sharepoint就是最好的例子，有这两个作为基础，可以把起点提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML，而不是自己去Parse一个文本文件；尽量用RegExp，而不是自己从头操作字符串，等等等等。这就是“软件复用”的体现。</p>
		<p>　　35. 你们会隔一段时间就停下来夯实代码么？<br />　　　　要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw，“夯”这个字念“hang”，第一声。 </p>
		<p>　　36. 你们的项目组每个人都写Daily Report么？<br />　　　　要写。五分钟就够了，写10句<br /> 37. 你们的项目经理会发出Weekly Report么？<br />　　　　　要。也是为了沟通。内容包括目前进度，可能的风险，质量状况，各种工作的进展等。</p>
		<p>　　 38. 你们项目组是否至少每周全体开会一次？<br />　　　　　要。一定要开会。程序员讨厌开会，但每个礼拜开会时间加起来至少应该有4小时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code。 </p>
		<p>　　39. 你们项目组的会议、讨论都有记录么？<br />　　　　会前发meeting request和agenda，会中有人负责主持和记录，会后有人负责发meeting minutes，这都是effective meeting的要点。而且，每个会议都要形成agreements和action items。</p>
		<p>　　 40. 其他部门知道你们项目组在干什么么？<br />　　　　要发一些Newsflash给整个大组织。Show your team’s value。否则，当你坐在电梯里面，其他部门的人问：“你们在干嘛”，你回答“ABC项目”的时候，别人全然不知，那种感觉不太好。</p>
		<p>
				<br />41. 通过Email进行所有正式沟通 <br />　　　　Email的好处是免得抵赖。但也要避免矫枉过正，最好的方法是先用电话和当面说，然后Email来确认。 </p>
		<p>　　42. 为项目组建立多个Mailing Group <br />　　　　如果在AD+Exchange里面，就建Distribution List。比如，我会建ABC Project Core Team，ABC Project Dev Team，ABC Project All Testers，ABC Project Extended Team等等。这样发起Email来方便，而且能让该收到email的人都收到、不该收到不被骚扰。 </p>
		<p>　　43. 每个人都知道哪里可以找到全部的文档么？<br />　　　　应该每个人都知道。这叫做知识管理（Knowledge Management）。最方便的就是把文档放在一个集中的File Share，更好的方法是用Sharepoint。 </p>
		<p>　　44. 你做决定、做变化时，告诉大家原因了么？<br />　　　　要告诉大家原因。Empower team member的手段之一是提供足够的information，这是MSF一开篇的几个原则之一。的确如此，tell me why是人之常情，tell me why了才能有understanding。中国人做事喜欢搞限制，限制信息，似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力，不在于是不是能access information/data，而在于是不是掌握资源。 </p>
		<p>　　45. Stay agile and expect change 要这样。<br />　　　　需求一定会变的，已经写好的代码一定会被要求修改的。做好心理准备，对change不要抗拒，而是expect change。 </p>
		<p>　　46. 你们有没有专职的软件测试人员？<br />　　　　要有专职测试。如果人手不够，可以peer test，交换了测试。千万别自己测试自己的。 </p>
		<p>　　47. 你们的测试有一份总的计划来规定做什么和怎么做么？<br />　　　　 这就是Test Plan。要不要做性能测试？要不要做Usability测试？什么时候开始测试性能？测试通过的标准是什么？用什么手段，自动的还是手动的？这些问题需要用Test Plan来回答。</p>
		<p>　　 48. 你是先写Test Case然后再测试的么？<br />　　　　应该如此。应该先设计再编程、先test case再测试。当然，事情是灵活的。我有时候在做第一遍测试的同时补上test case。至于先test case再开发，我不喜欢，因为不习惯，太麻烦，至于别人推荐，那试试看也无妨。 </p>
		<p>　　49. 你是否会为各种输入组合创建测试用例？<br />　　　　不要，不要搞边界条件组合。当心组合爆炸。有很多test case工具能够自动生成各种边界条件的组合——但要想清楚，你是否有时间去运行那么多test case。 </p>
		<p>　　50. 你们的程序员能看到测试用例么？<br />　　　　要。让Dev看到Test Case吧。我们都是为了同一个目的走到一起来的：提高质量。</p>
		<p>　　 51. 你们是否随便抓一些人来做易用性测试？ <br />　　　　要这么做。自己看自己写的程序界面，怎么看都是顺眼的。这叫做审美疲劳——臭的看久了也就不臭了，不方便的永久了也就习惯了。 <br />　　52. 你对自动测试的期望正确么？<br />　　　　别期望太高。依我看，除了性能测试以外，还是暂时先忘掉“自动测试”吧，忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说，只能“矫枉必须过正”了。</p>
		<p>　　53. 你们的性能测试是等所有功能都开发完才做的么？<br />　　　　不能这样。性能测试不能被归到所谓的“系统测试”阶段。早测早改正，早死早升天。</p>
		<p>　　54. 你注意到测试中的杀虫剂效应了么？<br />　　　　虫子有抗药性，Bug也有。发现的新Bug越来越少是正常的。这时候，最好大家交换一下测试的area，或者用用看其他工具和手法，就又会发现一些新bug了。</p>
		<p>　　 55. 你们项目组中有人能说出产品的当前整体质量情况么？<br />　　　　要有。当老板问起这个产品目前质量如何，Test Lead/Manager应该负责回答。 </p>
		<p>　　56. 你们有单元测试么？<br />　　　　单元测试要有的。不过没有单元测试也不是不可以，我做过没有单元测试的项目，也做成功了——可能是侥幸，可能是大家都是熟手的关系。还是那句话，软件工程是非常实践、非常工程、非常灵活的一套方法，某些方法在某些情况下会比另一些方法好，反之亦然。 </p>
		<p>　　57. 你们的程序员是写完代码就扔过墙的么？<br />　　　　大忌。写好一块程序以后，即便不做单元测试，也应该自己先跑一跑。虽然有了专门的测试人员，做开发的人也不可以一点测试都不做。微软还有Test Release Document的说法，程序太烂的话，测试有权踢回去。</p>
		<p>　　 58. 你们的程序中所有的函数都有输入检查么？<br />　　　　不要。虽然说做输入检查是write secure code的要点，但不要做太多的输入检查，有些内部函数之间的参数传递就不必检查输入了，省点功夫。同样的道理，未必要给所有的函数都写注释。写一部分主要的就够了。</p>
		<p>　　 59. 产品有统一的错误处理机制和报错界面么？<br />　　　　要有。最好能有统一的error message，然后每个error message都带一个error number。这样，用户可以自己根据error number到user manual里面去看看错误的具体描述和可能原因，就像SQL Server的错误那样。同样，ASP.NET也要有统一的Exception处理。可以参考有关的Application Block。</p>
		<p>　　60. 你们有统一的代码书写规范么？<br />　　　　要有。Code Convention很多，搞一份来发给大家就可以了。当然，要是有FxCop这种工具来检查代码就更好了。 </p>
		<p>　　61. 你们的每个人都了解项目的商业意义么？<br />　　　　要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者，或者时不时的告诉team member，这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱，这样就有动力了。平凡的事情也是可以有个崇高的目标的。</p>
		<p>　　 62. 产品各部分的界面和操作习惯一致么？<br />　　　　要这样。要让用户觉得整个程序好像是一个人写出来的那样。</p>
		<p>　　 63. 有可以作为宣传亮点的Cool Feature么？<br />　　　　要。这是增强团队凝聚力、信心的。而且，“一俊遮百丑”，有亮点就可以掩盖一些问题。这样，对于客户来说，会感觉产品从质量角度来说还是acceptable的。或者说，cool feature或者说亮点可以作为质量问题的一个事后弥补措施。 </p>
		<p>　　 64. 尽可能缩短产品的启动时间要这样。<br />　　　　　软件启动时间（Start-Up time）是客户对性能好坏的第一印象。</p>
		<p>　　 65. 不要过于注重内在品质而忽视了第一眼的外在印象程序员容易犯这个错误：太看重性能、稳定性、存储效率，但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾，协调这些是PM的工作。</p>
		<p>　　 66. 你们根据详细产品功能说明书做开发么？<br />　　　　要这样。要有设计才能开发，这是必须的。设计文档，应该说清楚这个产品会怎么运行，应该采取一些讲故事的方法。设计的时候千万别钻细节，别钻到数据库、代码等具体实现里面去，那些是后面的事情，一步步来不能着急。</p>
		<p>　 　67. 开始开发和测试之前每个人都仔细审阅功能设计么？<br />　　　　要做。Function Spec review是用来统一思想的。而且，review过以后形成了一致意见，将来再也没有人可以说“你看，当初我就是反对这么设计的，现在吃苦头了吧”</p>
		<p>　　68. 所有人都始终想着The Whole Image么？<br />　　　　要这样。项目里面每个人虽然都只是在制造一片叶子，但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领，反对过分的把软件制造看成流水线、车间。参见第61条。</p>
		<p>　　 69. Dev工作的划分是单纯纵向或横向的么？<br />　　　　不能单纯的根据功能模块分，或者单纯根据表现层、中间层、数据库层分。我推荐这么做：首先根据功能模块分，然后每个“层”都有一个Owner来Review所有人的设计和代码，保证consistency。 </p>
		<p>　　70. 你们的程序员写程序设计说明文档么？<br />　　　　要。不过我听说微软的程序员1999年以前也不写。所以说，写不写也不是绝对的，偷懒有时候也是可以的。参见第56条。</p>
		<p>　　71. 你在招人面试时让他写一段程序么？<br />　　　　要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等，既不偏向过于考算法，也不偏向过于考特定的API。</p>
		<p>　　72. 你们有没有技术交流讲座？<br />　　　　要的。每一两个礼拜搞一次内部的Tech Talk或者Chalk Talk吧。让组员之间分享技术心得，这笔花钱送到外面去培训划算。</p>
		<p>　　73. 你们的程序员都能专注于一件事情么？<br />　　　　要让程序员专注一件事。例如说，一个部门有两个项目和10个人，一种方法是让10个人同时参加两个项目，每个项目上每个人都花50%时间；另一种方法是5个人去项目A，5个人去项目B，每个人都100%在某一个项目上。我一定选后面一种。这个道理很多人都懂，但很多领导实践起来就把属下当成可以任意拆分的资源了。 </p>
		<p>　　74. 你们的程序员会夸大完成某项工作所需要的时间么？<br />　　　　会的，这是常见的，尤其会在项目后期夸大做某个change所需要的时间，以次来抵制change。解决的方法是坐下来慢慢磨，磨掉程序员的逆反心理，一起分析，并把估算时间的颗粒度变小。 </p>
		<p>　　75. 尽量不要用Virtual Heads 最好不要用Virtual Heads。<br />　　　　Virtual heads意味着resource is not secure，shared resource会降低resource的工作效率，容易增加出错的机会，会让一心二用的人没有太多时间去review spec、review design。一个dedicated的人，要强过两个只能投入50%时间和精力的人。我是吃过亏的：7个part time的tester，发现的Bug和干的活，加起来还不如两个full-time的。参见第73条。73条是针对程序员的，75条是针对Resource Manager的。</p>
		<p> <br />　转:http://www.uml.org.cn/UMLForum/200604142.htm<br /></p>
<img src ="http://www.blogjava.net/ywsky/aggbug/86669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-12-10 13:20 <a href="http://www.blogjava.net/ywsky/archive/2006/12/10/86669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>javascript进阶之变量篇 </title><link>http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Sun, 10 Dec 2006 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/86668.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/86668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/86668.html</trackback:ping><description><![CDATA[
		<p>1、关于变量的声名 <br />大家都知道javascript是可以隐式声名变量的。但要注意，隐式声名变量总是被创建为全局变量。看以下代码，情愿javascript语言强制声明变量。建议大家一定要var声明变量。 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />function test(){   <br />    var a=222;   <br /> document.writeln(a);   <br />}   <br />test();   <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;  </p>
		<p> </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />function test(){   <br />    a=222;   <br /> document.writeln(a);   <br />}   <br />test();   <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;   </p>
		<p>2、关于变量的作用域 <br />猜猜以下代码输出什么。 </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x='000';   <br />document.writeln(x);   <br />a();   <br />function a(){   <br />    var x='aaa';   <br /> function b(){   <br />     document.writeln(x);   <br />        var x='bbb';   <br />  document.writeln(x);   <br /> }   <br /> b();   <br />    document.writeln(x);   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />如果你的答案是 000 undefined bbb aaa。恭喜，ok.当代码用到x变量时，先从函数块（权威指南中用调用对象来解释）中找，如果找不到，从上一级函数块找，直到找到，如果知道顶层代码（指var x='000';的位置）还没找到定义，代码会报未定义错误。</p>
		<p>改一下代码，得到 000 undefined 111 111 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x='000';   <br />document.writeln(x);   <br />a();   <br />function a(){   <br /> function b(){   <br />     document.writeln(x);   <br />  document.writeln(x);   <br /> }   <br /> document.writeln(x);   <br /> var x='111';   <br /> b();    <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />3、新的问题 <br />变量个作用域清楚了，注意上面的代码。为什么我的function a()定义以前就可以调用a函数了，而我的var x='111';前“不可以用”x啊？？？ <br />让我把我的理解一一道来 <br />首先：以下代码让我相信javascript有个预编译过程，不是完全按照顺序解释执行的。 </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />a();   <br />function a(){   <br />    alert();   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />个人理解这个预编译过程不会象java/c#那样把代码编译成虚拟机认识的语言，更不会象vb，vc那样编译成更底层的语言。猜想只是把这个函数预装载到这段函数执行的全局环境中，在这个执行环境中，该函数被标识定义过，可以直接使用了。（看到网上很多人写的AOP的javascript实现,其实这个预编译过程才是翻译元数据最佳时候，可惜就javascript语言来讲，是有些落伍了）</p>
		<p>这个文章主要讲变量的一些问题。变量说了，为什么函数可以，我变量就不可以呢。 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />var a=0;   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />为什么我要输出undefined呢？为什么我a就不可以预编译一把呢？ <br />大家看看以下两段代码会输出什么呢啊？？？ </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />a=0;   <br />&lt;/SCRIPT&gt;  </p>
		<p> </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;   </p>
		<p>
				<br />可能你运行试了，可能你本来就知道，a未定义。哈哈哈，好了。 <br />现在我确信var a=0;被javascript解释器“预编译过”，至少是记录下来了。甚至把它的值设置为 undefined。“undefined”这个词名字取的很是让人误解，怎么能叫未定义呢，分明是javascript中所有变量的初始化值。关于null与undefined的比较我实在不愿提了。 <br />注意上面两段代码还反映一个现象。隐式声明的变量是在解释的时候才把自己定义为全局变量的。</p>
		<p>关于函数与变量javascript预编译的不同处理，大家可以与java class的加载过程比较下。java也是对基本类型设出值，对象为null的。（不往远扯了） <br />4、区别未定义变量和未附值变量 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var a;   <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;  </p>
		<p> </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />document.writeln(a);   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />未定义变量和未附值变量 权威指南中文版 定义的。通过第三条分析，我觉得变量就应该以 定义和未定义变量区别。未附值变量和undefined有点冲突，javascript不是强类型语言，没发附默认值，才来了个undefined。 <br />5、基本类型和引用类型 <br />熟悉java的朋友可能这部分很清楚。没啥 <br />说头。 <br />6、javascript的垃圾回收 <br />关于这部分内容一直没见着个权威说法。在javascript权威指南中有两小节提到这个问题。 <br />对于字符串、对象、数据这些没有固定大小，必须为它们动态的分配内存，但什么时候回收这些内存呢？javascript使用和java一样的garbage collection的方法。 </p>
		<p>代码<br />var s="hello";   <br />var u=s.toUpperCase();   <br />s=u;  </p>
		<p>
				<br />运行这段代码后，"hello"没有变量会再用到他，这是"hello"的存储空间的被垃圾回收了。对于javascript的垃圾回收，你唯一要关心的是，它一定会进行，不要对内存担心。 <br />注意，javascript不提供任何的强制垃圾回收或释放内存的运算附或语句。 <br />javascript的delete运算附和C++中的不同。 </p>
		<p>代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var o=new Object();   <br />o.name="zkj";   <br />o.age=25;   <br />o.bir=new Date();   <br />for(var key in o){   <br />document.writeln(key+':'+o[key]+'&lt;/br&gt;');   <br />}   <br />document.writeln('delete o.bir&lt;/br&gt;');   <br />delete o.bir;   <br />for(var key in o){   <br />document.writeln(key+':'+o[key]+'&lt;/br&gt;');   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />7、作为属性的变量 <br />猜猜以下代码会输出什么。 </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x=100;   <br />document.writeln(x);   <br />add(x);   <br />document.writeln('&lt;/br&gt;------------------------&lt;/br&gt;');   <br />var x=200;   <br />document.writeln(x);   <br />add(x);   <br />function add(x){   <br />    document.writeln(x);    <br />    var x=300;   <br />    document.writeln(x);    <br />    var x=400;   <br />    document.writeln(x);   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />估计很多人能得出正确答案 <br />100 100 300 400 <br />------------------------ <br />200 200 300 400 <br />但这里我想引入 全局对象和调用对象的 概念（javascript权威指南是这么翻译滴） </p>
		<p>
				<br />代码<br />&lt;SCRIPT LANGUAGE="JavaScript"&gt;  <br />var x=100;   //我们在全局对象中加了个属性x. 对比   <br /> //var o=new Object();o.x=100;   <br />document.writeln(this.x);//用this访问全局对象   <br />add(this.x);//把全局对象的属性值传递对函数中   <br />document.writeln('&lt;/br&gt;------------------------&lt;/br&gt;');   <br />this.x=200;//把全局变量中的x属性修改掉   <br />document.writeln(window.x);   <br />add(window.x);   <br />function add(x){   <br />    //假设有个局部对象，调用对象，函数调用过程中的对象   <br />//  temp   temp.x=${传入的值}   <br />    document.writeln(x); //哦这打印的可是参数中的值，也就是temp.x=this.x   <br />//的值,   <br />    var x=300;//把调用对象变量的签名给覆盖了.   <br />    document.writeln(x); //打印修改过的值。 temp.x   <br /> var x=400;//temp.x=400  <br />    document.writeln(x);   <br />}   <br />&lt;/SCRIPT&gt;  </p>
		<p>
				<br />在函数的调用过程中，假设有个调用对象存在，把函数的参数，和函数内的临时变量当成这个调用对象的属性。当然这个调用对象的生命周期很短。 <br />注意，当我们访问全局变量的属性入x的时候，不必要用this.x 或window.x访问，当在有&lt;frame&gt;&lt;iframe&gt;的页面时会出现混淆。 <br />关于函数的详细讨论我后续会详细讨论。</p>
		<p> </p>
		<p>　　　　　　　　　　文章来自：<a href="http://www.javaeye.com/article/19506">http://www.javaeye.com/article/19506</a><br /></p>
<img src ="http://www.blogjava.net/ywsky/aggbug/86668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-12-10 13:16 <a href="http://www.blogjava.net/ywsky/archive/2006/12/10/86668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一位高级程序员给学弟学妹的建议[转贴]</title><link>http://www.blogjava.net/ywsky/archive/2006/11/29/84445.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Wed, 29 Nov 2006 15:30:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/29/84445.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/84445.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/29/84445.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/84445.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/84445.html</trackback:ping><description><![CDATA[
		<pre> 我始终认为，对一个初学者来说，IT界的技术风潮是不可以追赶的，而且也没有能力<br />去追赶。我时常看见自己的DDMM们把课本扔了，去卖些价格不菲的诸如C#, VB.Net 这样的<br />大部头，这让我感到非常痛心。而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里<br />面可以不用指针等等则让我觉得好笑。C#就象当年的ASP一样，“忽如一夜春风来，千树万<br />树梨花开”，结果许多学校的信息学院成了“Web 学院”。96,97级的不少大学生都去做W<br />eb 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的<br />时间多花一点在基础的课程上应该是可以走得更远的。 <br /><br />几个误区 　 <br />初学者对C#风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际<br />的例子来说明这些现象，你可以按部就班的看看自己是不是属于其中的一种或者几种： <br /><br /><br />认为计算机技术等于编程技术: <br />有些人即使没有这个想法，在潜意识中也有这样的冲动。让我奇怪的是，许多信息学院的<br />学生也有这样的念头。认为计算机专业就是编程专业，与编程无关的，或者不太相关的课<br />程他统统都不管，极端的学生只要书上没带“编程”两个字他就不看。 <br />其实编程只是计算机技术应用过程中一种复杂性最低的劳动，这就是为什么IT业最底层的<br />人是程序员（CODER）。计算机技术包括了多媒体，计算机网络，人工智能，模式识别，管<br />理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程<br />中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象<br />是，不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇<br />把编程这种劳动神秘化了。其实每一个程序员心里都明白，自己这些东西，学的时候并不<br />比其它专业难，所以自然也不会高档到哪里去。 <br /><br />咬文嚼字的孔已己作风: <br />       我见过一本女生的《计算机网络原理》教材，这个女生像小学生一样在书上划满了<br />横杠杠，笔记做得满满的，打印出来一定比教材还厚。我不明白的是，像计算机网络原理<br />这样的课程有必要做笔记？我们的应试教育的确害了不少学生，在上《原理》这一类课程<br />的时候许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所<br />谓《原理》，即是需要掌握它为什么这样做，学习why，而不是how（怎样做）。极端认真<br />的学生背下以太网的网线最大长度，数据帧的长度，每个字段的意义，IP报头的格式等等<br />，但是忘了路由的原则，忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背<br />得滚瓜烂熟却等于什么也没学。 <br />       在学习编程的时候这些学生也是这样，他们确切的记得C++语法的各个细节。看完<br />了C++教程后看《Thinking in C++》（确实是好书），《Inside C++》，《C++ referenc<br />e》，this C++, that C++……，然后是网上各种各样的关于C++语法的奇闻逸事，然后发<br />现自己又忘了C++的一些语法，最后回头继续恶补…。有个师弟就跟我说：“C++ 太难了，<br />学了这里忘了那里，学了继承忘了模板。”我的回答道：“你不去学就容易了”。我并没<br />有教坏他，只是告诉他，死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无<br />意义。你根本不需要对的C++语法太关心，动手编程就是了，有不记得的地方一查MSDN就立<br />马搞定。我有个结论就是，实际的开发过程中对程序语法的了解是最微不足道的知识。这<br />是为什么我在为同学用Basic（我以前从没有学过它）写一个小程序的时候，只花了半个小<br />时看了看语法，然后再用半个小时完成了程序，而一个小时后我又完全忘记了Basic 的所<br />有关键字。 <br /><br />不顾基础，盲目追赶时髦技术： <br />      终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来，变成钱。这<br />种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的，而且IT技术进步是<br />如此的快，不跟进就是失业。但是对于初学者来说（尤其是时间充裕的大中专在校生），<br />这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够<br />的时间沉下心来学习基础性的东西，学习why 而不是how。时髦的技术往往容易掌握，而且<br />越来越容易掌握，这是商业利益的驱使，为了最大化的降低软件开发的成本。但在IT领域<br />内的现实就是这样，越容易掌握的东西，学习的人越多，而且淘汰得越快。每一次新的技<br />术出来，都有许多初学者跟进，这些初学者由于缺乏必要的基础而使得自己在跟进的过程<br />中花费大量的时间，而等他学会了，这种技术也快淘汰了。基础的课程，比方数据结构，<br />操作系统原理等等虽然不能让你立马就实现一个linux（这是许多人嘲笑理论课程无用的原<br />因），但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技<br />术（比方Win32 SDK 程序的设计，DDK的编程）来说甚至是不可或缺的。 <br />       一个活生生的例子是我和我的一个同学，在大一时我还找不到开机按纽，他已经会<br />写些简单的汇编程序了。我把大二的所有时间花在了汇编，计算机体系结构，数据结构，<br />操作系统原理等等这些课程的学习上，而他则开始学习HTML和VB，并追赶ASP的潮流。大三<br />的时候我开始学习Windows 操作系统原理，学习SDK编程，时间是漫长的，这时我才能够用<br />VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如<br />何创建对话框而懊恼不已，但临到毕业才发现自己的选择是何等的正确。和我谈判的公司<br />开出的薪水是他的两倍还多。下面有一个不很恰当的比方：假设学习VB编程需要4个月，学<br />习基础课程和VC的程序设计需要1年。那么如果你先学VB，再来学习后者，时间不会减少，<br />还是1年，而反过来，如果先学习后者，再来学VB，也许你只需要1个星期就能学得非常熟<br />练。 <br /><br />几个重要的基础课程 　 <br />     如果你是学生，或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建<br />议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目，这些书应该<br />都还可以在书店买到。说实在的，我在读其他人的文章时最大的心愿就是希望作者列出一<br />个书单。 <br /><br />     大学英语－不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不<br />可想象的。中文的翻译往往在猴年马月才会出来，而现在的许多出版社干脆就直接把E文印<br />刷上去。学习的方法是强迫自己看原版的教材，开始会看不懂，用多了自然熟练。吃得苦<br />下得狠心绝对是任何行业都需要的品质。 <br /><br />    计算机体系结构和汇编语言－关于体系结构的书遍地都是，而且也大同小异，倒是汇<br />编有一本非常好的书《80x86汇编语言程序设计教程》（清华大学出版社，黑色封面，杨季<br />文著）。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一<br />些东西的时候会觉得是在看天书。<br />    计算机操作系统原理－我们的开发总是在特定的操作系统上进行，如果不是，只有一<br />种可能：你在自己实现一个操作系统。无论如何，操作系统原理是必读的。这就象我们为<br />一个芯片制作外围设备时，芯片基本的工作时序是必需了解的。这一类书也很多，我没有<br />发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windo<br />ws 2000》(微软出版社，我看的是E文版的，中文的书名想必是Windows 2000 技术内幕之<br />类吧)。关于学习它的必要性，ZDNET上的另一篇文章已经有过论述。 <br />     数据结构和算法－这门课程能够决定一个人程序设计水平的高低，是一门核心课程。<br />我首选的是清华版的（朱战立，刘天时）。很多人喜欢买C++版的，但我觉得没有必要。C<br />++的语法让算法实现过程变得复杂多了，而且许多老师喜欢用模块这一东西让算法变得更<br />复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。 <br />     软件工程－这门课程是越到后来就越发现它的重要，虽然刚开始看时就象看马哲一样<br />不知所云。我的建议是看《实用软件工程》（黄色，清华）。不要花太多的时间去记条条<br />框框，看不懂就跳过去。在每次自己完成了一个软件设计任务（不管是练习还是工作）以<br />后再来回顾回顾，每次都会有收获。 <br />Windows 程序设计－《北京大学出版社，Petzold著》我建议任何企图设计Windows 程序的<br />人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本<br />书的后面读。在这本书中，没有C++，没有GUI，没有控件。有的就是如何用原始的C语言来<br />完成Windows 程序设计。在学完了它以后，你才会发现VC其实是很容易学的。千万不要在<br />没有看完这本书以前提前学习VC，你最好碰都不要碰。我知道的许多名校甚至都已经用它<br />作为教材进行授课。可见其重要。 <br />     上面的几门课程我认为是必学的重要课程（如果你想做Windows 程序员）。 <br />     对于其它的课程有这样简单的选择方法：如果你是计算机系的，请学好你所有的专业<br />基础课。如果不是，请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了<br />，请翻到书的最后，看看它的参考文献，找到它们并学习它们，再回头看这本书。如果一<br />本书的书名中带有“原理”两个字，你一定不要去记忆它其中的细节，你应该以一天至少<br />50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。 <br />你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。 <br /><br />日三省乎己　　　　 <br />每天读的书太多，容易让人迷失方向。一定要在每天晚上想想自己学了些什么，还有些什<br />么相关的东西需要掌握，自己对什么最感兴趣，在一本书上花的时间太长还是不够等等。<br />同时也应该多想想未来最有可能出现的应用，这样能够让你不是追赶技术潮流而是引领技<br />术潮流。同时，努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这<br />样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。 <br /><br />把最多的时间花在学习上 <br />     这是对初学者最后的忠告。把每个星期玩CS或者CS的时间压缩到最少，不玩它们是最<br />好的。同时，如果你的ASP技术已经能够来钱，甚至有公司请你兼职的话，这就证明你的天<br />分能够保证你在努力的学习之后取得更好的收益，你应该去做更复杂的东西。眼光放长远<br />一些，这无论是对谁都是适用的。 <br /><br />相信你已经能够决定是否学习C＃或者什么时候去学它了。</pre>
<img src ="http://www.blogjava.net/ywsky/aggbug/84445.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-29 23:30 <a href="http://www.blogjava.net/ywsky/archive/2006/11/29/84445.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql中的select top</title><link>http://www.blogjava.net/ywsky/archive/2006/11/29/84444.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Wed, 29 Nov 2006 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/29/84444.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/84444.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/29/84444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/84444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/84444.html</trackback:ping><description><![CDATA[在很多时候我们需要取出前几条记录，像一些论坛上的十大之类的。如果把所有的记录的都取出来，然后再挑出前几条的话肯定是很傻的做法。<br /><br />
以前听说过select top，用它可以取出前几条记录。但是在mysql5.0中好像不支持，不过想想mysql肯定会有另外的支持方式的，在网上搜了会。找到了limit的方法，在mysql5.0中测试一下，no problem。<br /><br />
代码样例：<br /><div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: rgb(230, 230, 230) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;"><div><img src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" _fcksavedurl="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: rgb(0, 0, 255);">select</span><span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(128, 128, 128);">*</span><span style="color: rgb(0, 0, 0);">  </span><span style="color: rgb(0, 0, 255);">from</span><span style="color: rgb(0, 0, 0);"> test </span><span style="color: rgb(0, 0, 255);">order</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">by</span><span style="color: rgb(0, 0, 0);"> id </span><span style="color: rgb(0, 0, 255);">desc</span><span style="color: rgb(0, 0, 0);"> limit </span><span style="color: rgb(128, 0, 0); font-weight: bold;">5</span><span style="color: rgb(0, 0, 0);">;</span></div></div><br />
test：表明<br />
id    ：字段名<br />
5    ： 获得记录条数    <img src ="http://www.blogjava.net/ywsky/aggbug/84444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-29 23:27 <a href="http://www.blogjava.net/ywsky/archive/2006/11/29/84444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql 学习笔记（三）</title><link>http://www.blogjava.net/ywsky/archive/2006/11/29/84441.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Wed, 29 Nov 2006 15:13:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/29/84441.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/84441.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/29/84441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/84441.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/84441.html</trackback:ping><description><![CDATA[
		<div class="postText">
				<p>字符集支持 </p>
				<p>MySQL4.1以后的版本对字符集的支持具有以下新增功能：</p>
				<div class="itemizedlist">
						<ul type="disc">
								<li>
										<p>支持服务器同时使用多种字符集。</p>
								</li>
								<li>
										<p>允许在服务器，数据库，数据表，数据列等多级别上设置不同的字符集。</p>
										<div class="itemizedlist">
												<ul type="circle">
														<li>
																<p>服务器的默认字符集在编译时选定，但可在启动服务器时用--default-character-set选项来更改。</p>
														</li>
														<li>
																<p>用ALTER DATABASE db_name DEFAULT CHARACTER SET charset来设置数据库字符集。 如果只有default参数，则使用服务器的字符集。</p>
														</li>
														<li>
																<p>用CREATE TABLE table_name(...) CHARACTER SET = charset设置数据表字符集。如果charset为default，则使用数据表所在数据库的字符集作为数据表的字符集。</p>
														</li>
														<li>
																<p>在数据列中，可用CHARACTER SET charset属性来设置数据列的字符集。charset不能是default，如果没有该属性，则默认使用数据表的字符集。允许设置字符集的数据列有char，varchar(不带binary属性)及TEXT类型。</p>
														</li>
														<li>
																<p>用_charset
str转换字符串常数的字符集。如：_utf8 'mysql'，_latinl
'oracle'。该方法只适用于括在引号内的字符串，其它十六进制常数 、字符串表达式等可用CONVERT()函数进行转换，如：SELECT
CONVERT( str USING charset)。</p>
														</li>
												</ul>
										</div>
								</li>
								<li>
										<p>通过MySQL提供的函数可进行字符集转换和查询。</p>
								</li>
								<li>
										<p>新增的COLLATE操作符使我们可按某一种字符集的排序顺序来处理另一种字符集的数据。如：SELECT a from t ORDER BY a COLLATE utf-8；</p>
								</li>
								<li>
										<p>用SHOW CHARACTER SET命令可显示服务器支持的字符集列表。</p>
								</li>
								<li>
										<p>当服务器转换到另一种字符集时，会自动对索引进行重新排序。</p>
								</li>
								<li>
										<p>通过UTF-8和UCS2字符集提供了Unicode支持。</p>
								</li>
						</ul>
				</div>
				<p>MySQL现在还不支持：1,在同一个字符串里混用不同字符集的字符；2,在同一个数据列里混用不同的字符集。</p>
				<p> </p>
				<p>各级字符集的查询方法</p>
				<div class="itemizedlist">
						<ul type="disc">
								<li>
										<p>服务器级</p>
										<pre class="screen">SHOW CHARACTER SET；可查出可供使用的所有字符集。<br />SHOW VARIABLES LIKE 'character_set'；可查出服务器的默认字符集。<br /></pre>
								</li>
								<li>
										<p>可查出数据库级的字符集。</p>
										<pre class="screen">SHOW CREATE DATABASE db_name；<br /></pre>
								</li>
								<li>
										<p>两条命令可查出数据表的字符集。</p>
										<pre class="screen">SHOW CREATE TABLE table_name；<br />SHOW TABLE STATUS LIKE 'table_name'<br /></pre>
								</li>
								<li>
										<p>以下几命令可查出数据列的字符集：</p>
										<pre class="screen">DESCRIBE table_name;<br />SHOW COLUMNS FROM table_name;<br />SHOW CREATE TABLE table_name;<br /></pre>
								</li>
								<li>
										<p>用CHARSET()函数可确定特定字符串，字符串表达式或数据列值相关联的字符串的字符集。如：SELECT CHARSET(str)。</p>
								</li>
						</ul>
				</div>
		</div>
<img src ="http://www.blogjava.net/ywsky/aggbug/84441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-29 23:13 <a href="http://www.blogjava.net/ywsky/archive/2006/11/29/84441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql 学习笔记（二）</title><link>http://www.blogjava.net/ywsky/archive/2006/11/29/84440.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Wed, 29 Nov 2006 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/29/84440.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/84440.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/29/84440.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/84440.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/84440.html</trackback:ping><description><![CDATA[
		<h3 class="title">数值类的数据列类型</h3>
		<p>数值型的列类型包括整型和浮点型两大类。</p>
		<img _fckanchor="true" _fckrealelement="3" _fckfakelement="true" src="http://writeblog.csdn.net/fckeditor/editor/images/spacer.gif" class="FCK__Anchor" />
		<table summary="数值类数据列类型" border="1">
				<colgroup>
						<col />
						<col />
						<col />
				</colgroup>
				<thead>
						<tr>
								<th>数据列类型</th>
								<th>存储空间</th>
								<th>描述</th>
						</tr>
				</thead>
				<tbody>
						<tr>
								<td>TINYINT</td>
								<td>1字节</td>
								<td>非常小的正整数，带符号：-128~127，不带符号：0~255</td>
						</tr>
						<tr>
								<td>SMALLINT</td>
								<td>2字节</td>
								<td>小整数，带符号：-32768~32767，不带符号：0~65535</td>
						</tr>
						<tr>
								<td>MEDIUMINT</td>
								<td>3字节</td>
								<td>中等大小的整数，带符号：-8388608~8388607，不带符号：0~16777215</td>
						</tr>
						<tr>
								<td>INT</td>
								<td>4字节</td>
								<td>标准整数，带符号：-2147483648~2147483647，不带符号：0~4294967295</td>
						</tr>
						<tr>
								<td>BIGINT</td>
								<td>8字节</td>
								<td>大整数，带符号：-9223372036854775808~9233372036854775807，不带符号：0~18446744073709551615</td>
						</tr>
						<tr>
								<td>FLOAT</td>
								<td>4字节</td>
								<td>单精度浮点数，最小非零值：+-1.175494351E-38，最大非零值：+-3.402823466E+38</td>
						</tr>
						<tr>
								<td>DOUBLE</td>
								<td>8字节</td>
								<td>双精度浮点数，最小非零值：+-2.2250738585072014E-308，最大非零值：+-1.7976931348623157E+308</td>
						</tr>
						<tr>
								<td>DECIMAL</td>
								<td>M+2字节</td>
								<td>以字符串形式表示的浮点数，它的取值范围可变，由M和D的值决定。</td>
						</tr>
				</tbody>
		</table>
		<br />
		<h4 class="title">1. 整型数据列类型</h4>
		<p>MySQL有五种整型数据列类型，即TINYINT，SMALLINT，MEDIUMINT，INT和BIGINT。它们之间的区别是取值范围不同，存储空间也各不相同。在整型数据列后加上UNSIGNED属性可以禁止负数，取值从0开始。</p>
		<p>声
明整型数据列时，我们可以为它指定个显示宽度M(1~255)，如INT(5)，指定显示宽度为5个字符,如果没有给它指定显示宽度，MySQL会为它指
定一个默认值。显示宽度只用于显示，并不能限制取值范围和占用空间，如：INT(3)会占用4个字节的存储空间，并且允许的最大值也不会是999,而是
INT整型所允许的最大值。</p>
		<div class="sect3" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h4 class="title">
												<img _fckanchor="true" _fckrealelement="2" _fckfakelement="true" src="http://writeblog.csdn.net/fckeditor/editor/images/spacer.gif" class="FCK__Anchor" />2. 浮点型数据列类型</h4>
								</div>
						</div>
				</div>
				<p>MySQL有三种浮点型数据列类型，分别是：FLOAT，DOUBLE和DECIMAL。浮点类数据类型有一个最大可表示值和一个最小非零可表示值，最小非零可表示值决定了该类型的精确度。</p>
				<p>MySQL 4.0.2版之后，FLOAT和DOUBLE都可以指定UNSIGNED属性。当指定该属性时，取值范围不平移到正数区间，而只是简单地把浮点类型的负数部份去掉。</p>
				<p>浮
点类型也有M(1~255)和D(1~30，且不能大于M-2)。分别表示显示宽度和小数位数。M和D在FLOAT和DOUBLE中是可选的，默认，当
MySQL版本大于3.23.6时，FLOAT和DOUBLE类型将被保存为硬件所支持的最大精度。DECIMAL的M和D值在MySQL3.23.6后
可选，默认D值为0,M值为10。 </p>
		</div>
		<div class="sect3" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h4 class="title">
												<img _fckanchor="true" _fckrealelement="1" _fckfakelement="true" src="http://writeblog.csdn.net/fckeditor/editor/images/spacer.gif" class="FCK__Anchor" />3. 如何选择数值类数据列类型？</h4>
								</div>
						</div>
				</div>
				<p>为
了节省存储空间和提高数据库处理效率，我们应根据应用数据的取值范围来选择一个最适合的数据列类型。如果把一个超出数据列取值范围的数存入该列，则
MySQL就会截短该值，如：我们把99999存入SMALLINT(3)数据列里，因为SMALLINT(3)的取值范围是-32768~32767，
所以就会被截短成32767存储。显示宽度3不会影响数值的存储。只影响显示。</p>
				<p>对于浮点数据列，存入的数值会被该列定义的小数位进行四舍五入。如把一个1.234存入FLOAT(6.1)数据列中，结果是1.2。</p>
				<p>DECIMAL
与FLOAT和DOUBLE的区别是：DECIMAL类型的值是以字符串的形式被储存起来的，它的小数位数是固定的。它的优点是，不会象FLOAT和
DOUBLE类型数据列那样进行四舍五入而产生误差，所以很适合用于财务计算；而它的缺点是：由于它的存储格式不同，CPU不能对它进行直接运算，从而影
响运算效率。DECIMAL(M，D)总共要占用M+2个字节。</p>
		</div>
		<div class="sect3" lang="en">
				<div class="titlepage">
						<div>
								<div>
										<h4 class="title">
												<img _fckanchor="true" _fckrealelement="0" _fckfakelement="true" src="http://writeblog.csdn.net/fckeditor/editor/images/spacer.gif" class="FCK__Anchor" />4. 数值类数据列的属性</h4>
								</div>
						</div>
				</div>
				<div class="itemizedlist">
						<ul type="disc">
								<li>
										<p>ZEROFILL属性适用于所有数值类数据列类型，作用是，如果数值的宽度小于定义的显示宽度，则在数值前填充0。</p>
								</li>
								<li>
										<p>UNSIGNED属性不允许数据列出现负数。</p>
								</li>
								<li>
										<p>AUTO_INCREMENT属性可生成独一无二的数字序列。只对整数类的数据列有效。</p>
								</li>
								<li>
										<p>NULL和NOT NULL属性设置数据列是否可为空。</p>
								</li>
								<li>
										<p>DEFAULT属性可为数据列指定默认值。</p>
								</li>
						</ul>
				</div>
		</div>
<img src ="http://www.blogjava.net/ywsky/aggbug/84440.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-29 23:12 <a href="http://www.blogjava.net/ywsky/archive/2006/11/29/84440.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql 学习笔记（一）</title><link>http://www.blogjava.net/ywsky/archive/2006/11/29/84438.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Wed, 29 Nov 2006 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/29/84438.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/84438.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/29/84438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/84438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/84438.html</trackback:ping><description><![CDATA[在将一些数据写入到数据库中时，我们常常需要做一些字符的转化，以防止sql注入等情况。<br /><br />下面列出mysql的转义序列：<br /><br /><table summary="转义序列" border="1"><thead><tr><th>转义序列</th><th>含义</th></tr></thead><tbody><tr><td>\0</td><td>NUL(ASCII的0值)</td></tr><tr><td>\'</td><td>单引号</td></tr><tr><td>\"</td><td>双引号</td></tr><tr><td>\b</td><td>后退符</td></tr><tr><td>\n</td><td>换行符</td></tr><tr><td>\r</td><td>回车符</td></tr><tr><td>\t</td><td>制表符</td></tr><tr><td>\\</td><td>反斜杠</td></tr><tr><td>\Z</td><td>Ctrl+Z</td></tr></tbody></table> <img src ="http://www.blogjava.net/ywsky/aggbug/84438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-29 23:10 <a href="http://www.blogjava.net/ywsky/archive/2006/11/29/84438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AdParter让您的网页内容也可以赚钱</title><link>http://www.blogjava.net/ywsky/archive/2006/11/25/83521.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Sat, 25 Nov 2006 13:36:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/25/83521.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/83521.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/25/83521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/83521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/83521.html</trackback:ping><description><![CDATA[
		<b>文链广告名词解释</b>：文章链接式广告，即将文章内容中出现的关键词自动生成广告链接，当鼠标放在关键词链接上即出现广告窗体。
<p><b>AdParter分成机制</b>：AdParter按竞价广告单次有效点击价格与站长分成，幅度为：<span class="style6">50%-90%</span>、站长单次最低收入0.05元<span style="text-decoration: underline;">.</span></p><p><a href="http://www.adparter.com/siteadmin/siteadminpanel.jsp?page=/siteadmin/webmasterregist.jsp?g=da1de550e1953709" _fcksavedurl="http://www.adparter.com/siteadmin/siteadminpanel.jsp?page=/siteadmin/webmasterregist.jsp?g=da1de550e1953709"><img src="http://www.adparter.com/logo.jpg" _fcksavedurl="http://www.adparter.com/logo.jpg" alt="" /></a></p><img src ="http://www.blogjava.net/ywsky/aggbug/83521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-25 21:36 <a href="http://www.blogjava.net/ywsky/archive/2006/11/25/83521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 比Google还先进？体验微软版“虚拟地球”</title><link>http://www.blogjava.net/ywsky/archive/2006/11/19/82021.html</link><dc:creator>心远</dc:creator><author>心远</author><pubDate>Sun, 19 Nov 2006 04:44:00 GMT</pubDate><guid>http://www.blogjava.net/ywsky/archive/2006/11/19/82021.html</guid><wfw:comment>http://www.blogjava.net/ywsky/comments/82021.html</wfw:comment><comments>http://www.blogjava.net/ywsky/archive/2006/11/19/82021.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ywsky/comments/commentRss/82021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywsky/services/trackbacks/82021.html</trackback:ping><description><![CDATA[
		<p style="text-indent: 2em;">一谈起“虚拟地球”，恐怕大多数朋友最先想到的就是“Google
Earth”了。无疑，作为虚拟地图服务的始祖，Google
Earth无论在界面设计，还是使用感受方面都给我们留下了很深的印象。而就在昨天，另一家软件巨头公司 ——
微软，也开始对外宣布旗下的一款“虚拟地球”产品问世，这就是 —— 微软的Virtual Earth。 </p>
		<p style="text-indent: 2em;">相比Google Earth，微软的这款“虚拟地球”可不是什么单独运行的软件，而是架构于Live Search上面的一个服务网页。而这样设计的好处也是显而易见的，那就是我们在任意一台电脑上都可以方便地使用Virtual Earth了。 </p>
		<p style="text-indent: 2em;">
				<strong>一、 外观简介 </strong>
		</p>
		<p style="text-indent: 2em;">1. 外观界面速览 </p>
		<p style="text-indent: 2em;"> </p>
		<p style="text-indent: 2em;">当我们在浏览器中输入“ <a href="http://maps.live.com/" target="_blank">http://maps.live.com/ </a>”这个网址后回车，便可以看到“Virtual Earth”的主页面了，如图1所示。 </p>
		<p style="text-indent: 2em;">和
其他Windows Live产品一样，“Virtual
Earth”的背景也是由一块非常漂亮的极光蓝组成。同时，它的界面设计也是相当简洁，所有功能都被划分到页面上方的搜索框和左侧的控制手柄中。而且，由
于这里的功能和咱们以前用过的Google Earth完全一样，所以，相信大家上手应该是没有什么问题。 </p>
		<p style="text-indent: 2em;"> </p>
		<center>
				<img src="http://cimg2.163.com/catchpic/8/87/87B9B171E84006BDC54DAB58F4B1184D.jpg" alt="" border="0" />
		</center>
		<center>图1 </center>
		<p style="text-indent: 2em;"> </p>
		<p style="text-indent: 2em;">
				<strong>2. 多样的地图浏览模式 </strong>
		</p>
		<p style="text-indent: 2em;">而与Google Earth不同的是，Virtual Earth并没有完全采用卫星地图作为演示载体，而是将常规地图、卫星地图同时放置在了控制手柄上，用户可以根据自己的需要自行选用，而且切换起来十分迅速，如图2所示。 </p>
		<p style="text-indent: 2em;"> </p>
		<center>
				<img src="http://cimg2.163.com/catchpic/0/04/0423FA8A4BF1D6225849C4D3E831232A.jpg" alt="" border="0" />
		</center>
		<center>图2 </center>
		<center>
				<center>
						<strong>3. 航拍、卫星巧结合 </strong>大
家知道，Google
Earth的最大一个特点就是能够提供大量清晰度极高的卫星图片，甚至我们都能在这些图片上轻易地看到公路上的汽车。而相比之下，Virtual
Earth提供的图片精度显然与Google不在一个档次。当我们试着将美国的第一大城市 ——
纽约放大到最大精度时，发现仍然有很多地方无法显示出高精度地图，甚至在一些地方还能清楚地看到彩色图片与黑白图片之间明显的接缝，如图3所示。看来，
Virtual Earth要完全赶上Google，还需要在卫星地图的数量方面下大功夫才行。 </center>
				<p> </p>
				<p style="text-indent: 2em;"> </p>
				<p style="text-indent: 2em;"> </p>
				<center>
						<img src="http://cimg2.163.com/catchpic/5/5C/5C15B60E937B8B0D587382AA5FF845B6.jpg" alt="" border="0" />
				</center>
				<center>图3 </center>
				<p style="text-indent: 2em;">不过，微软毕竟还是微软，这点小问题可是难不倒它的。在处理自己的卫星地图不丰富这个缺点时，它很巧妙地将航拍图片与卫星地图结合了起来。当地图被放大到一定精度时，控制手柄中的“航拍模式”便被自动激活了。 </p>
				<p style="text-indent: 2em;">其实，这个模式使用起来也很简单，只要我们点击一下“航拍模式”按钮，Virtual Earth便会马上将以当前位置为中心的最近九张航拍地图整理出来，以九宫格的形式显示在按钮右侧，而我们只需在选好的图片上点击，便能迅速打开这张地图了，如图4所示。 </p>
				<p style="text-indent: 2em;"> </p>
				<center>
						<img src="http://cimg2.163.com/catchpic/7/71/71C7F28EE357EBA6223B2136EB86D03C.jpg" alt="" border="0" />
				</center>
				<center>图4<br /><p style="text-indent: 2em;"><strong>二、 出色的浏览控制 </strong></p><p style="text-indent: 2em;">使用过Google Earth的朋友一定知道，Google Earth的浏览控制功能十分丰富，我们除了可以使用固定在地图上方的控制手柄之外，还可以直接利用鼠标快速完成一些简单任务。而在Virtual Earth中，鼠标同样具有着重要作用。 </p><p style="text-indent: 2em;"><strong>1. 地图的放大与缩小 </strong>在地图的浏览过程中，最常用到的功能就是放大与缩小了。而在Virtual Earth中，我们除了可以方便地使用鼠标滚轮快速缩放之外，还可以通过双击的方式手动放大鼠标所在区域。而如果再配合上控制手柄中的缩放滑杆，整个地图的缩放操作将变得十分方便。 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;"><strong>2. 地图的移动 </strong></p><p style="text-indent: 2em;">相比放大与缩小，地图的移动就显得更为简单了。和同类软件不同的是，Virtual Earth并没有将地图移动工具放置到控制手柄上（事实上，也很少有人会使用手柄来完成这个操作），而是直接将它集成在了鼠标上。 </p><p style="text-indent: 2em;">我们只需用鼠标在地图上拖拽，相应的画面便会随之发生变化。甚至，整个拖动过程也和Google Earth一样，颇具动画效果，使用起来感觉十分逼真。</p><p style="text-indent: 2em;"><strong>三、 3D视图模式 </strong></p><p style="text-indent: 2em;"><strong>1. 3D视图的启动 </strong></p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">而
要说Virtual
Earth最有特点的一项，恐怕就是它的3D视图了。和航拍模式不同，3D视图下的每个建筑物，都是电脑根据实际尺寸自动合成的。我们不仅可以任意改变观
看的角度，甚至还可以清楚地知道建筑物之间的比例，而这点也正是卫星地图和航拍地图难以企及的，倒有点像咱们小时候玩过的积木，如图5所示。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/C/C5/C5AD7D8D72A84F4E4D91245A693F03C8.jpg" alt="" border="0" /></center><center>图5 </center><p style="text-indent: 2em;">要
切换到3D模式非常简单，我们只要在控制手柄处点击一下“3D”按钮，再按照屏幕的提示，
下载并安装好一个3D插件就可以了。而当插件安装完毕之后，Virtual
Earth会首先弹出一个选项页面，让我们选择一下3D模型的渲染级别，如图6所示。其实这个选项的含义非常简单，从左到右分别是“最低精度”、“中等精
度”和“最高精度”，而它们之间的区别除了效果不同之外，对电脑的要求也是节节攀升的。 </p><p style="text-indent: 2em;">【小提示】 Virtual Earth的3D插件目前仅能安装在英文版操作系统中，这点请大家注意。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/B/BE/BEF4436CC9B93509457A72194F331DF2.jpg" alt="" border="0" /></center><center>图6 </center><p style="text-indent: 2em;"><strong>2. 更改3D视角 </strong>由于3D视图中的建筑物都是由计算机实时渲染出来的，因此我们就有了更多的视角变化。相信大家已经注意到，在3D视图模式下，画面中除了原有的控制手柄之外，还多出了一个方向手柄。其实，这正是Virtual Earth在3D视图下所特有的视角控制器，如图7所示。 </p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/2/2E/2E4FD8AD50759EEEC5640DAC9E0D8F00.jpg" alt="" border="0" /></center><center>图7 </center><center><p style="text-indent: 2em;">而除了上面这种任意视角之外，Virtual Earth还为我们预设了三档默认视角，被顺序地放置在控制手柄上，使用起来非常方便，如图8所示。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/6/68/681A21911BB8AD8742BE0998A3D23EE8.jpg" alt="" border="0" /></center><center>图8 </center><p style="text-indent: 2em;"><strong>3. 画质对比 </strong></p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">不过说了半天，这些由计算机渲染出来的地图究竟效果如何呢？耳听为虚、眼见为实，笔者这里找到了一组同一地点拍摄的航拍图片和渲染图片，效果如何，还是请您自己来看吧，如图9所示。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/E/E5/E504698BF8403EA0C618A6C6FBDB05E0.jpg" alt="" border="0" /></center><center>图9</center><center><p style="text-indent: 2em;"><strong>四、 更多有趣小功能 </strong></p><p style="text-indent: 2em;"><strong>1. 交通查询 </strong></p><p style="text-indent: 2em;">当
然，除了上面所说的这些功能之外，Virtual Earth的附属功能也一点不比Google
Earth差。除了最基本的地址搜索服务，Virtual Earth还有一个非常实用的小功能 ——
交通查询。就像我们好多司机朋友爱听路况广播一样，在Virtual Earth上也提供了一些事故通报和路况信息等等内容。 </p><p style="text-indent: 2em;">其中，事故通报的颜色非常醒目，在图中一眼就能看到，而我们只要将鼠标悬停于通报图标之上，便能看到它的具体内容了，如图10所示。只不过，有些遗憾的是，该项功能目前还仅能在美国的一些城市中使用，而且数量也不是很多。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/7/78/782B13262B4F186B55B6AA9830FCF05E.jpg" alt="" border="0" /></center><center>图10 </center><p style="text-indent: 2em;"><strong>2. 路线查询 </strong></p><p style="text-indent: 2em;"> </p><p style="text-indent: 2em;">除
了交通查询之外，Virtual Earth还有另外一项非常实用的功能 —— 路线查询。点击“Driving
directions”按钮之后，Virtual
Earth便会在页面左侧打开一个对话框，我们只需将起始地点和目的地点输入其中，再选择好是希望查询最短行驶时间还是最短路程之后，点击“Get
directions”按钮即可开始查询。 </p><p style="text-indent: 2em;">而如果您给出的地址信息不够详细，Virtual Earth还会弹出几个更详细的地址供您选择。最后，查询出来的路线会用一条醒目的颜色标识出来，一目了然，如图11所示。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/2/27/27BA82E9DD93209BA959E4D6881E3DD7.jpg" alt="" border="0" /></center><center>图11 </center><strong>3. 所在地查询 </strong><p style="text-indent: 2em;">想
不想让电脑自动将您当前的所在地标识出来？呵呵，这可不是什么天方夜潭，在点击了主界面上 的“Locate me”按钮之后，Virtual
Earth便能直接将您当前所处的位置显示在了图中。其实，不是Virtual
Earth具有什么特异功能，可以得知我们当前所处的位置，而是它能够通过解析我们上网的IP地址来完成所在地定位。 </p><p style="text-indent: 2em;">所以，如果您现在正在使用代理服务器，或者打开了什么网络加速软件的话，那么这项功能可就真的失效了，如图12所示。 </p><p style="text-indent: 2em;"> </p><center><img src="http://cimg2.163.com/catchpic/E/ED/ED472510ABF3D6B6205E093DD86074D7.jpg" alt="" border="0" /></center><center>图12 </center><strong>4. 其他功能 </strong><p style="text-indent: 2em;">而除此之外，Virtual Earth还允许我们发布或打印出当前地图，具体操作也与其他软件完全一样，只不过限于篇幅有限，笔者在这里就不再赘述了，大家可以自己去尝试一下。 </p><p style="text-indent: 2em;"><strong>写在最后 </strong></p><p style="text-indent: 2em;">怎么样？看到这里，相信您已经对微软的这款Virtual Earth有了个大体印象了。就笔者这段时间的试用情况来说，Virtual Earth相比Google Earth，明显在功能方面占了上风。但图片数量过少，精度太低的问题却一直困扰着它。 </p><p style="text-indent: 2em;">而
且，由于目前好多服务都仅限于北美地区，甚至就连那个3D视图插件也只能安装在英文版操作 系统中，所有的这些问题无疑都严重阻碍了Virtual
Earth的快速发展。而恐怕只有解决了这些问题之后，Virtual Earth才能真正与Google Earth一决高下。</p></center></center></center>
		</center>
<img src ="http://www.blogjava.net/ywsky/aggbug/82021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywsky/" target="_blank">心远</a> 2006-11-19 12:44 <a href="http://www.blogjava.net/ywsky/archive/2006/11/19/82021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>