﻿<?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>C++博客-天空之城</title><link>http://www.cppblog.com/linhong34/</link><description>  new,think,program,happy to live</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 06:04:50 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 06:04:50 GMT</pubDate><ttl>60</ttl><item><title>启动IIS出现0x8ffe2740错误的解决办法</title><link>http://www.cppblog.com/linhong34/archive/2007/07/10/27821.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Tue, 10 Jul 2007 10:02:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2007/07/10/27821.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/27821.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2007/07/10/27821.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/27821.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/27821.html</trackback:ping><description><![CDATA[<p align=center><font face=宋体><font color=#ff9900><strong>启动IIS出现0x8ffe2740错误的解决办法</strong></font></font></p>
<p><font face=宋体><br>&nbsp;&nbsp;&nbsp;&nbsp;系统提示了错误号&#8220;0x8ffe2740&#8221;，百度一下，答案是：IIS要使用的80端口被程序占用，只需要更改IIS所使用的端口即可解决问题。改了端口后问题果然解决。</font></p>
<p>&nbsp;</p>
<p><font face=宋体>&nbsp;&nbsp;&nbsp; 但是，在调试程序或在浏览器中浏览本地程序时，总是要在地址后面增加端口号，很不方便。再就是以前已经做了N个Web应用程序，再逐个改项目文件，太麻烦。还是希望用80作IIS端口。</font></p>
<p>&nbsp;</p>
<p><font face=宋体>&nbsp;&nbsp;&nbsp; 于是用netstat -an -p tcp -o命令查看本地所开放的端口，以及进程号PID（命令详细意思可以查看帮助）。得到本地确实是有一个0.0.0.0:80的连接PID是848（不知道这是什么进程），知道进程号后于是用tskill 848杀掉此进程，再次重启IIS，并且以80作为其端口，启动成功，问题解决。<br></font></p>
<p><font face=宋体>（注：摘自<font face=宋体><a href="http://hi.baidu.com/key8086/blog/item/759232092380b9ad2fddd452.html"><u><font color=#666600>http://hi.baidu.com/key8086/blog/item/759232092380b9ad2fddd452.html</font></u></a>&nbsp;）</font></font></p>
<p>&nbsp;</p>
<p><font face=宋体>netstat 命令参数说明：</font></p>
<p><font face=宋体>-n 是查端口号相关的进程</font></p>
<p><font face=宋体>-o 是查出相关进程的ID</font></p>
<p><font face=宋体>netstat -an -o 可以查出端口及进程ID</font></p>
<p>&nbsp;</p>
<p>查到对应ID 后，可以在 "任务管理器" 中，在查看菜单中，选择 "选择列" 选中 PID 列项， 可以查出哪个程序，对应这个ID 占着哪个端口。</p>
<p><font face=宋体>&nbsp;</font></p>
<img src ="http://www.cppblog.com/linhong34/aggbug/27821.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2007-07-10 18:02 <a href="http://www.cppblog.com/linhong34/archive/2007/07/10/27821.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去除WINDOWS 盗版提示</title><link>http://www.cppblog.com/linhong34/archive/2007/06/07/25704.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Thu, 07 Jun 2007 01:04:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2007/06/07/25704.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/25704.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2007/06/07/25704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/25704.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/25704.html</trackback:ping><description><![CDATA[1.运行regedit进入注册表，HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\WgaLogon,删除它,重新启动.wgatray.exe就不会自动启动了.<br>2.把系统盘:\windows\system32中的wgatray.exe删除.<br>3.彻搜索文件wgatray,统统删除...
<img src ="http://www.cppblog.com/linhong34/aggbug/25704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2007-06-07 09:04 <a href="http://www.cppblog.com/linhong34/archive/2007/06/07/25704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle日志分析工具LogMiner使用(实战)</title><link>http://www.cppblog.com/linhong34/archive/2007/06/06/25651.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Wed, 06 Jun 2007 06:07:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2007/06/06/25651.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/25651.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2007/06/06/25651.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/25651.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/25651.html</trackback:ping><description><![CDATA[<p>要安装LogMiner工具，必须首先要运行下面这样两个脚本，这两个脚本必须均以SYS用户身份运行。其中第一个脚本用来创建DBMS_LOGMNR包，该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包，该包用来创建数据字典文件。</p>
<p>1..$ORACLE_HOME/rdbms/admin/dbmslm.sql 2. $ORACLE_HOME/rdbms/admin/dbmslmd.sql.</p>
<p>SQL&gt; @d:\oracle\product\10.2.0\db_2\RDBMS\ADMIN\dbmslm.sql</p>
<p>程序包已创建。</p>
<p>授权成功。</p>
<p>SQL&gt; @d:\oracle\product\10.2.0\db_2\RDBMS\ADMIN\dbmslmd.sql</p>
<p>程序包已创建。</p>
<p>&nbsp;</p>
<p>使用LogMiner工具</p>
<p>&nbsp;</p>
<p>1、创建数据字典文件（data-dictionary）</p>
<p>数据字典文件是一个文本文件，使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化，影响到库的数据字典也发生变化，这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时，也必须要重新生成一遍被分析数据库的数据字典文件。</p>
<p>在ORACLE8I的时候，首先在init.ora初始化参数文件中，指定数据字典文件的位置，也就是添加一个参数UTL_FILE_DIR，该参数值为服务器中放置数据字典文件的目录。如： </p>
<p>UTL_FILE_DIR = (e:\Oracle\logs)&nbsp; </p>
<p>ORACLE9I后，推荐使用SPFILE启动，可以动态调整参数；</p>
<p>SQL&gt; show parameter spfile</p>
<p>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>------------------------------------ ----------- ------------------------------ </p>
<p>spfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; D:\ORACLE\PRODUCT\10.2.0\DB_2\ </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DATABASE\SPFILESGTEST2.ORA&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>SQL&gt; alter system set utl_file_dir='d:\oracle\logs' scope=spfile;</p>
<p>系统已更改。</p>
<p>SQL&gt; startup force</p>
<p>ORACLE 例程已经启动。</p>
<p>&nbsp;</p>
<p>Total System Global Area&nbsp; 289406976 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>Fixed Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1248600 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>Variable Size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 96469672 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>Database Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 188743680 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>Redo Buffers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2945024 bytes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>数据库装载完毕。</p>
<p>数据库已经打开。</p>
<p>SQL&gt; show parameter utl_file_dir</p>
<p>&nbsp;</p>
<p>NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>------------------------------------ ----------- ------------------------------ </p>
<p>utl_file_dir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d:\oracle\logs&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>然后创建数据字典文件</p>
<p>SQL&gt; @d:\dbms_logmnr_d.build.txt</p>
<p>&nbsp;</p>
<p>PL/SQL 过程已成功完成。</p>
<p>&nbsp;</p>
<p>脚本dbms_logmnr_d.build.txt</p>
<p>BEGIN</p>
<p>dbms_logmnr_d.build(</p>
<p>dictionary_filename =&gt; 'logminer_dict.dat',</p>
<p>dictionary_location =&gt; 'd:\oracle\logs');</p>
<p>END;</p>
<p>/</p>
<p><br>2、创建要分析的日志文件列表</p>
<p>&nbsp;&nbsp;&nbsp; Oracle的重作日志分为两种，在线（online）和离线（offline）归档日志文件，我这里主要分析归档日志，在线日志原理一样。</p>
<p>&nbsp;&nbsp;&nbsp; A.创建列表<br>SQL&gt;execute dbms_logmnr.add_logfile(options =&gt;dbms_logmnr.new,logfilename =&gt;'D:\oracle\product\10.2.0\oradata\oracle9i\REDO01.LOG');</p>
<p><br>B.添加另外的日志文件到列表<br>SQL&gt;execute dbms_logmnr.add_logfile(options =&gt;dbms_logmnr.addfile,logfilename=&gt;'D:\oracle\product\10.2.0\oradata\oracle9i\REDO02.LOG');</p>
<p>SQL&gt; execute dbms_logmnr.add_logfile(options =&gt;dbms_logmnr.addfile,logfilename=&gt;'D:\oracle\product\10.2.0\oradata\oracle9i\REDO03.LOG');<br>删除<br>SQL&gt; execute dbms_logmnr.add_logfile(options =&gt;dbms_logmnr.removefile,logfilenam</p>
<p>e =&gt;'D:\oracle\product\10.2.0\oradata\oracle9i\REDO03.LOG');</p>
<p>&nbsp;8.启动LogMiner进行分析</p>
<p>BEGIN</p>
<p>dbms_logmnr.start_logmnr(</p>
<p>dictfilename =&gt; 'd:\oracle\logs\logminer_dict.dat');</p>
<p>END;</p>
<p>/</p>
<p>&nbsp;<br>4、观察分析结果（v$logmnr_contents）</p>
<p>到现在为止，我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。 </p>
<p>SELECT sql_redo FROM v$logmnr_contents;&nbsp; </p>
<br><br><br>网上这种东西很多,但好多都会报错,着是经过我实际操作过的. 
<img src ="http://www.cppblog.com/linhong34/aggbug/25651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2007-06-06 14:07 <a href="http://www.cppblog.com/linhong34/archive/2007/06/06/25651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>选择考研无需犹豫的八种人</title><link>http://www.cppblog.com/linhong34/archive/2007/06/06/25648.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Wed, 06 Jun 2007 05:52:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2007/06/06/25648.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/25648.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2007/06/06/25648.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/25648.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/25648.html</trackback:ping><description><![CDATA[考研很大程度上既是对以往生活的一次认真的审判，也是对前途愿景的一次美好的憧憬；既然是审判就包含许多否决和重建，既然是憧憬就包含许多希望和诱惑。考研是对生命的一次认真的思考和全新的探索，它深藏着一种对人生、对社会、对宇宙的价值判断和理性认知，当这种或许处于无意识状态的精神被惊醒乃至被强化为明白的自我意识后，隐藏在你心灵深处的智慧之眼将变得炯炯有神，一种可以支配人生的惊人力量将无限爆发以致包围你的生活，你的灵魂将展示一个向上的方向和飞跃的姿态。<br>&nbsp;&nbsp;&nbsp; 相对来说，以下八种人士在沐浴考研之滚滚大潮时更加无需犹豫逡巡，考研之存在甚而壮大确实有其不可否认的原因，而这八种人完全可以轻易地给自己找到一个或几个考研的理由：<br>&nbsp;&nbsp;&nbsp; 其一曰：感觉工作乏味者。不少人干着不痛不痒的事情，工作起来有如机器一般乏味无聊，每天就是那三五件重复了千百遍的旧事，月复一月，年复一年，岁月已近乎停止，时间已近乎凝固，生命只是坐等无聊，这样的人选择考研还需犹豫？<br>&nbsp;&nbsp;&nbsp; 其二曰：觉察前途渺茫者。一个很可能要在乡村中小学站一辈子讲台的人，一个很可能要在小县城的鸡肋部门的某个科室做一辈子职员的人，一个在外面漂泊滚打多年仍然一事无成的人，选择考研难道不是一个改变命运的契机？<br>&nbsp;&nbsp;&nbsp; 其三曰：有志学术事业者。现在很少听到本科生搞学问的人了，相反，博士生、博士后才是做学问、搞研究的人才的观点逐渐成为社会共识；因此，想耕耘大学讲坛、想苦思于书斋、想活跃于实验室的人除了考研别无选择。<br>&nbsp;&nbsp;&nbsp;&nbsp; 其四曰：就读基础专业者。诸如读历史、哲学、物理等基础专业的本科生往往在求职途中更为艰难，虽然要因人因情而言，但一般说来这样的学生不考研不继续深造想学以致用、想轻松找到工作难度不小。<br>&nbsp;&nbsp;&nbsp;&nbsp; 其五曰：拥有名校情结者。仰慕名校从坏的角度看是虚荣心，从好的角度看是进取心，这种虚荣心通常都是善良和积极的，通过树立高远目标来激发自己的潜力难道不是好事吗？金字塔下层学校的学生可以通过考研满足自己的名校情结。<br>&nbsp;&nbsp;&nbsp;&nbsp; 其六曰：性情内向孤僻者。这样说不是鼓励大家离群索居、沉默自守，恰恰相反，适当的交往和活跃是完善人格、适应社会所需要的品质；之所以说内向性格的人更适合考研是因为他们往往更能耐得冷板凳、更能静心学习和研究。<br>&nbsp;&nbsp;&nbsp;&nbsp; 其七曰：希望有高学历者。这样的人选择考研的原因其实很白了，细细品味一下，容易发现这类人考研考博通常与上面提到的带有理想主义色彩的虚荣心不同，往往带有较为强烈的功利色彩，多是为职称、职务、待遇所迫。<br>&nbsp;&nbsp;&nbsp;&nbsp; 其八曰：改变学历成色者。在我们的社会里，有不少的一批人由于早先各种原因选择了中专教育，后来他们通过自己的努力参加成人教育考试、函授考试、电大教育获得了本科文凭，这样的人参加考研可以大大提升自己先前学历的成色。<br>&nbsp;&nbsp;&nbsp;&nbsp; 每个考研的人都需要一个理由，关键是这个理由最后能否上升为一种信念，这一信念能否改变你的学习和生活态度，这一态度能否最终改变你的行动！
<img src ="http://www.cppblog.com/linhong34/aggbug/25648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2007-06-06 13:52 <a href="http://www.cppblog.com/linhong34/archive/2007/06/06/25648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>谈谈我对攻读计算机研究生的看法【转载】</title><link>http://www.cppblog.com/linhong34/archive/2006/09/29/13143.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Fri, 29 Sep 2006 05:51:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/09/29/13143.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/13143.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/09/29/13143.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/13143.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/13143.html</trackback:ping><description><![CDATA[
		<p>谈谈我对攻读计算机研究生的看法<br />　　就我自己的理解，谈谈我对读研和软件学院的看法，不妥之处一笑了之即可。<br />　　<br />　　如果你有实际开发工作经验，感觉自己的水平和实力进入了一个高原期，迫切需要从</p>
		<p>理论上提高，那么计算机学院是唯一选择。因为计算机学院才能让你在理论上更上一层楼</p>
		<p>。软件学院从教学计划上就没有把你往这方面带。当然能不能更上一层楼最终还是完全取</p>
		<p>决于你自己。需要特别说明的是，工作经验并不一定等于开发经验，我见过很多工作2-3年</p>
		<p>的人，但是没有一点开发经验。<br />　　<br />　　你说：“他们都有很强的开发能力,只是不太喜欢读书,也只是希望混个学历对今后在</p>
		<p>岗位上晋升有好处”，我可以向你保证，你所说的人绝对不是开发能力很强的人。因为，</p>
		<p>1）高手不可能不喜欢读书；2）高手不可能想去混一个学历；3）高手不可能认为晋升是因</p>
		<p>为学历的原因。<br />　　<br />　　还需要说明的是，考计算机的人未必个个都是高手，严格来说，大部分都不会编程序</p>
		<p>。也就是说，庸庸碌碌之辈仍然占绝大多数。研究生毕业的师兄只拿2500元左右的比比皆</p>
		<p>是，所以不要寄希望于拿一张研究生文凭出去赚高薪。但是，对于有实际开发工作经验的</p>
		<p>人，要想自己在3年之中有一个真正的提高的话，计算机学院提供了广阔的平台。就我所知</p>
		<p>，每一个月拿2万以上的也有（上海育碧，图形特效算法设计）。所以，同为研究生毕业，</p>
		<p>能力的差距是极大的。所以，不要去问“研究生毕业能拿多少？”，要问“像我这种水平</p>
		<p>的人，研究生毕业能拿多少钱？”这样人家才能够准确地回答你。<br />　　<br />　　所谓“有实际开发工作经验”是指你目前已经具备下列能力：1）你已经认为C++和汇</p>
		<p>编语言都是很简单的语言，并能够自如地运用；2）你能够在30分钟之内想到正确的五子棋</p>
		<p>AI算法设计思路和方向；3）你完全理解STL为什么这么重要；4）你能够独立地解决所有的</p>
		<p>编译与链接问题，哪怕你从来没有遇到的问题，你也不需要询问任何人；5）英文网站是你</p>
		<p>的首要信息来源；6）能够读懂英语写成的国际标准，比如NTFS磁盘格式标准。7）你经常</p>
		<p>站在集合论的角度思考算法问题；8）能够理解一个简单的驱动程序，能够理解一个简单3</p>
		<p>D交互程序；9）你能够认识到线性代数和概率论在实际编程工作中的极端重要性；10）你</p>
		<p>完全理解COM的设计思想，尤其能够理解COM为什么要设计成这样；11）当我说到虚函数的</p>
		<p>重要作用时，你不会急着去找书来翻；12）你能够说出C++为什么比其他语言优秀的理由，</p>
		<p>记住这种理由应该来自于你的开发体会，而不是因为其他人都这么说。此外还有很多判断</p>
		<p>标准，但如果你同时具备5条以上，可以认为你已经具备相应的开发经验了。在这种状态下</p>
		<p>读研，你将取得读研效益的最大值。<br />　　<br />　　读研最重要的是要明白你自己要干什么，不能等导师来告诉你你应该干什么。研究生</p>
		<p>的优势在于理论功底深厚，思维具有穿透力，当然编程能力首先要过关，不要读完研究生</p>
		<p>还不知道MFC程序的WinMain函数在哪里。所以，研究生期间，你一定要做有理论深度的算</p>
		<p>法设计，比如大规模数据的搜索算法，性能是首要考虑因素，不要奢望SQL函数能够帮你解</p>
		<p>决问题，所有的问题你都必须自己解决，你必须解决内外存交换的性能瓶颈。再比如极品</p>
		<p>飞车的3D场景生成，图形变换，碰撞检测，物性模拟，纹理映射，灯光模型等等，这些都</p>
		<p>是可以保证你能拿到2万以上月薪的技术。如果你认为这些东西太难，不可能做得出来的话</p>
		<p>，那么你就不适合读研。真的，要是你认为读研之后还是要去搞一般的程序设计，如信息</p>
		<p>管理系统之类的软件，那么你读研的价值就完全不会得到体现，因为这些工作根本就不需</p>
		<p>要读研。<br />　　<br />　　软件学院宣称培养软件开发人才，恕我直言，我从来没有看见那个高手是培训成功的</p>
		<p>。成为软件开发高手的路只有一条：自学！软件开发中需要大量的编程实践和独立思考，</p>
		<p>只有在此过程中，你才能够逐步成长起来。软件学院宣称培养软件项目经理，这更是搞笑</p>
		<p>，在某种意义上这是欺骗行为。学院里面能够培养出软件开发经理更是十足的谎言，软件</p>
		<p>项目经理必须，或者说更强调从战争中学会战争。没有实践经验的项目经理就是绣花枕头</p>
		<p>一个。<br />　　<br />　　　<br />　　总之一句话，如果你只想成为软件开发高手（比如认为会编驱动程序或杀毒软件就是</p>
		<p>高手的那种），建议工作，不要考研；完全没有工作经验的，也不建议考研，你进来了只</p>
		<p>有瞎混一通。如果你有上述工作经验且想成为高级软件工程师（能够独立理解并设计出快</p>
		<p>速傅立叶变换算法的那种软件工程师）的话，那么强烈建议考研。考研让你有3年放松思考</p>
		<p>的机会，也有3年让你思想和技术积累沉淀的机会。非常难得的机会。不考研的话，这种机</p>
		<p>会就是一种奢侈，可望而不可即的那么一种奢侈。<br />　　<br />　　　　<br />　　1）关于读书的机会成本问题。读研的机会成本的确是很高。任何人都可以简单地计算</p>
		<p>出来。所以，我也不赞成所有的人都去读研。读研只适合那些痛感数学在编程中的极端重</p>
		<p>要性的人。如果对理论工具和理论思维的极端重要性没有切肤的认识，那么读研的价值几</p>
		<p>乎为0；读研的好处在于：A，把你自己放在一个学术和工程的交叉点上；B，让你具备了进</p>
		<p>入微软等世界顶级软件研发机构的可能性；记住只是可能性。但是不读研这种可能性为0；</p>
		<p>C，如前所述，如果没有读研的机会，你也就没有静下心来好好钻研几年理论的机会；一边</p>
		<p>工作拿高薪，一边深入地学习各种理论，诸位认为这可能吗？我反正认为不可能，我觉得</p>
		<p>学习钻研理论最需要的就是一个长期安静独处的环境，一边工作一边读书是不可能有这样</p>
		<p>的环境的，你会觉得每天都在疲于奔命。而读研正好可以提供这样一个环境。我同时还反</p>
		<p>对整天跟着导师的屁股后面跑，这样会浪费很多时间。读计算机的研究生，主要依靠自己</p>
		<p>去查阅最新文献，自己去研读文献，和导师的口头交流一个月一次就足够了，前提还需要</p>
		<p>导师的水平足够牛。如果导师的水平不牛，这也没关系，不理他就是了，自己做好自己的</p>
		<p>事情即可。<br />　　<br />　　2）关于研究生教学质量问题。坦白地说，全国都是“洪桐县中无好人”，尤其在计算</p>
		<p>科学领域，大牛极少。那为什么还要去读研？大哉问！把读研的收获寄托在名校或名师的</p>
		<p>名我认为气上，是注定要失败的。读研全靠自学，研究生之间的差距全部体现在自学能力</p>
		<p>上面。又有人问，既然是自学，为什么非要读研？回答是：因为读研就是为你买一份保险</p>
		<p>，就是买一份你自学三年之后不会失业的保险。这份保险主要是一种心理上的后盾，让你</p>
		<p>在自学过程中经得起诱惑，能够从容镇定地去追寻计算机理论发展的坚实足迹，从欧拉，</p>
		<p>费马，高斯，康托，图灵等巨匠那里寻找方法论的珠宝。倘若没有这份保证，你在家里面</p>
		<p>自学3个月，保证你会被失业的压力压得喘不过气来，何谈安心学习？<br />　　<br />　　3）关于实战经验与理论学习的优劣问题。这没有定论，如前所述，管理信息系统，设</p>
		<p>备驱动开发，工具软件开发，软件病毒剖析等等这些工作不太需要创造性，需要的是耐心</p>
		<p>和经验，需要的是对既有规范的准确理解，这类开发工作最适合在实战中提高，理论学习</p>
		<p>没什么作用。但是在人工智能，模式识别，图像压缩，虚拟现实，巨量数据检索，自然语</p>
		<p>言理解，计算机图形学等等领域，理论学习就占据着绝对的统治地位！这些领域的突破对</p>
		<p>人类的生活的影响是极其巨大而深刻的。某些领域处于一个极其快速发展的态势之中，比</p>
		<p>如计算机图形学，相信诸君能够从众多3D游戏的灿烂辉煌中体认到我的这种说法。在这些</p>
		<p>领域，如果没有扎实的理论功底，一切都是那么遥远，不管你花了多少时间在编程上面。</p>
		<p>
				<br />　　<br />　　4）关于高级研发人员的知识结构问题。首先声明，我不是一个纯粹理论激进分子，即</p>
		<p>认为除了理论之外，一切都不重要。我认为，纯熟的编程技能是最基本但也是最必不可少</p>
		<p>的技能。没有这个基础，一切计算机理论就是空谈（研究图灵可计算性理论的研究者除外</p>
		<p>）。有了这个基础之后，下列理论学习方向必须重点突破：<br />　　<br />　　1，科学哲学。这是核心中的核心！可惜国内不开这门课。不但不开课，而且还作为批</p>
		<p>判对象来引用，实在是遗憾至极！这是一门教你如何“钓鱼”的学科，在一切科学研究中</p>
		<p>居于最核心的地位。它是古今科研方法和思维方法的集大成者，很难想象一个成熟的研究</p>
		<p>者没有一套自己的方法论体系。科学哲学最需要的是领会与总结，它的思想与启示会伴随</p>
		<p>我们的一生。<br />　　<br />　　2，康托集合论，矩阵方法，离散结构，图论方法，群论方法之间的紧密关系。最重要</p>
		<p>的认识这些理论对实践的重要启示和方法引导。我始终认为，如果你学了一门理论之后，</p>
		<p>却不知道这门理论有什么作用，那么你的理论就白学了，你什么东西都没有捞着。所以，</p>
		<p>学习任何理论之前，先问自己：它有什么用？在哪里用？如何用？带着这些问题去学习理</p>
		<p>论，你才会真正地学到东西。用这三个问题去问你的理论课老师，他的回答就是判断其实</p>
		<p>际水平的最佳标准。<br />　　<br />　　3，思维要有极强的穿透力，学会看透文献作者没有写出来的动机。绝大部分大师都有</p>
		<p>隐瞒自己最具有方法论启示意义的思考环节的习惯。牛顿和华罗庚先生都有这个坏习惯。</p>
		<p>这让大家认为他们是天才，因为很多问题他想到了，我们想不到。但是为什么他们能想到</p>
		<p>，我们想不到？他们是怎样想到的？没有人告诉我们牛顿发现万有引力定律时的思考过程</p>
		<p>，当然，牛顿可以慷慨地把他的思考结果告诉我们，但是，他那可以点石成金的“金手指</p>
		<p>”却没有教给我们。我们的任务就是要培养透过文章看穿作者背后意图和动机的能力，在</p>
		<p>这方面，台湾的侯捷和美国的Donbox是绝佳典范。这两只老狐狸（呵呵，是爱称）凭着其</p>
		<p>猎犬一般的嗅觉，抽丝剥茧，一个把COM背后的幕后设计动机揭开并暴露到了光天化日之下</p>
		<p>，另一个把MFC的宏观架构做了一次完美的外科手术。其非凡的思维穿透力令人惊叹。<br />　　<br />　　4，英语。英语本身不重要，但是用英语写成的文献就极其重要了。所以，专门把英语</p>
		<p>作为一个重头戏列出来。大家不要相信英语无用论的鬼话。对于搞计算机的而言，英语就</p>
		<p>是你的母语！<br />　　<br />　　5，其它的具体理论还有很多，但是都不如这三个方面重要，因为我觉得这三个方面是</p>
		<p>最具有根本性，全局性的能力培养环节。需要指出的是，很多高深理论对你的工作是无意</p>
		<p>义的，当心时间陷进去。一定要把效率最高的时间段用在最具有决定性意义的理论学习上</p>
		<p>。<br />　　<br />　　5）关于读研之后的出路是否光明的问题。我们应该承认，读研之后，你的工作机会不</p>
		<p>是变多了，而是变少了。而且越是高手，他的工作机会和工作范围就越少。这是因为，越</p>
		<p>是搞前沿研发的公司，其数量越少，在这个圈子的人也就越少。你找工作的范围就越小，</p>
		<p>试问：如果微软的OS设计专家出来找工作，能够让他选择的公司能有几家？但是，这种公</p>
		<p>司数量的减少是以工资待遇的急剧上升为补偿的，同时，你在工作中所受到的充分尊重也</p>
		<p>是在一般公司中体会不到的。所以不要担心学了高科技用不上，呵呵，你只会越来越感觉</p>
		<p>自己学的不够用。相信接到过猎头公司电话的人会体会得到。真正的高手从来就不会担心</p>
		<p>工作的问题，也从来不会到人才市场上去找工作。既然选择了理论深入，那么就应该把眼</p>
		<p>光放得更远</p>
		<p>
				<br /> </p>
<img src ="http://www.cppblog.com/linhong34/aggbug/13143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-09-29 13:51 <a href="http://www.cppblog.com/linhong34/archive/2006/09/29/13143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何学习Java</title><link>http://www.cppblog.com/linhong34/archive/2006/06/11/8412.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Sun, 11 Jun 2006 05:58:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/06/11/8412.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/8412.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/06/11/8412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/8412.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/8412.html</trackback:ping><description><![CDATA[
		<p>
				<br />如何学习Java<br /><br />Tag:学习Java <br /> <br />一、前言</p>
		<p>    在开始之前有必要再讨论一下J2ME，J2SE，J2EE这些概念。J2ME，The Micro Edition of the Java 2 Platform。主要用于嵌入式Java，如手机，PDA等等。J2SE，Java 2 Platform，Standard Edition，我们通常所说的JDK(Java Development Kit)包含在此，是J2EE的基础。J2EE，Java 2 Platform，Enterprise Edition，就是所谓的企业级Java。这些只是从API级别上的划分，实际上Sun给J2EE的定义是：开发基于组件的多层的企业级应用的规范。也就是为各种不同的技术定义一个Java的规范，使这些不同的技术结合起来，在Java平台上构建强壮的企业级应用。从这一点来看，J2EE这个概念应该是涵盖J2ME，J2SE的。比如一个典型的J2EE应用，网上商店，它支持web方式下订单，也支持手机下订单。显然必须用到J2SE，J2ME。所以也就不存在所谓的从J2SE转向J2EE的问题了，只是后者包含的范围更广而已。</p>
		<p> </p>
		<p>来看看Sun给出的J2EE 相关技术主要分为几大块。</p>
		<p>1. Web Service技术</p>
		<p>-  Java API for XML Processing (JAXP) </p>
		<p>-  Java API for XML Registries (JAXR) </p>
		<p>-  Java API for XML-based RPC (JAX-RPC) </p>
		<p>-    SOAP with Attachments API for Java (SAAJ)</p>
		<p> </p>
		<p>2. 组件模型技术（Component Model Technologies）</p>
		<p>-  Java Servlet </p>
		<p>-  JavaServer Pages </p>
		<p>-  JavaServer Faces </p>
		<p>-  Enterprise JavaBeans </p>
		<p>-  Java Message Service </p>
		<p>-    J2EE Connector Architecture</p>
		<p> </p>
		<p>3. 管理技术(Management Technologies)</p>
		<p>-  J2EE Deployment Specification </p>
		<p>-  J2EE Management Specification </p>
		<p>-  J2EE Client Provisioning </p>
		<p>-    Java Authorization Contract for Containers</p>
		<p> </p>
		<p>4. 其他相关技术(Other J2EE Technologies)</p>
		<p>-  JDBC </p>
		<p>-  Java Data Objects (JDO) </p>
		<p>-  CORBA (Java IDL and Java RMI-IIOP) </p>
		<p>-  JavaMail </p>
		<p>-  Transactions</p>
		<p>    如此之多的技术难免使初学者无所适从，望而却步。即使是一位经验丰富的J2EE开发者，又有几个人敢说J2EE相关的技术我都熟练掌握了。不过作为一名普通J2EE应用程序的开发者来说，我们只需要重点学习其中的一部分技术就可以了，对于其他部分只要做到心中有数，哪天需要用到了知道跑哪里去找到资料就行了。以我个人的观点，下面这些技术是一般J2EE应用开发人员所必须熟练掌握的。Java Server Page，Java Servlet，Enterprise JavaBean，JDBC，Transactions。还有JAXP等XML相关技术，Java Message Service，Java Mail，JDO等等是最好应该掌握的。其他Management Technologies，Connector Architecture等等主要是给容器提供商中间件提供商参考的，应用开发者不需要怎么关心，等用到了再去学习也不迟。</p>
		<p> </p>
		<p>二、语言学习篇</p>
		<p>   首先是J2SE基础。学习一门新技术，无外乎阅读和实践了。而一本好的参考书对于初学者来说显得格外重要。现在市面上的 Java书籍可以说是铺天盖地，质量也是良莠不齐，令初学者无所适从。所以还是先推荐几本书籍吧。目前对于Java基础知识，大家一般都比较推荐两本书&lt;&gt;和&lt;&lt; Core Java? 2， Volume I: Fundamentals &gt;&gt;。第一本书不必多说了，Bruce Eckel的大作，Jolt获奖书籍。内容比较全面，基本涵盖了java语言的方方面面。这本书提供了相当丰富的例子，非常有利于对学习内容的了解。另外书中第一部分对于OO基本书籍的介绍，我觉得对于刚接触ＯＯ的人来说帮助会很大。而且此书是Open Source的，可以从作者网上下载<a href="http://www.mindview.net/Books/TIJ/">http://www.mindview.net/Books/TIJ/</a>而对于习惯于读中文版的学习者来说，侯捷翻译的中文版是不错的选择。要说这本说的缺点可能就是对于初学者来说厚了一点，这也是一些人并不推荐此书作为初学者学习用书的原因吧。后面一本&lt;&lt; Core Java? 2， Volume I: Fundamentals &gt;&gt;。目前已经是第七版了，单从它出版的次数来看也可以看出此书受欢迎的程度，这本书特点也是讲述比较全面系统，基本上一路啃下来的话Java语言基础应该算过关了。缺点也是太厚了，有点像参考手册，前面部分花了不少篇幅讲Swing和Applet，可能对初学者不是很有用。还有一些像&lt;&lt; Java in a nutshell&gt;&gt;也是比较不错的基础书籍。</p>
		<p>   学习了基本的语言基础，别忘了最重要也是最有用的资料还是JDK文档。从你学习java的第一天开始JDK文档应该是常备手头了。如果你碰到问题首先想到的是到论坛上去提问而不是查阅Jdk文档，那先别继续往下学习了，学会查JDK文档先。不夸张的说在我们的初学者论坛中60%的问题是光查一下JDK文档就能解决问题的。最新JDK Documentation下载地址<a href="http://java.sun.com/j2se/1.4.2/download.html">http://java.sun.com/j2se/1.4.2/download.html</a>(目前最新版是J2SE5 <a href="http://java.sun.com/j2se/1.5.0/download.jsp">http://java.sun.com/j2se/1.5.0/download.jsp</a>)不能光说不练，同一下载页面把JDK给下载回来。安装完后有一点我想提一下，安装路径下有一个src.zip(有些jdk版本是src.jar)，好东西啊---JDK源代码，老是有人在论坛上问哪里有JDK源代码下载，你说东西就放在你家里还到处找。有了这个有些问题就需要在论坛上跟人家争来争去了，翻开源代码瞧一下什么疑问都没有了。几个最重要的命令行工具是</p>
		<p>javac:           编译源文件到class文件</p>
		<p>java:             运行class</p>
		<p>jar:               打包工具。</p>
		<p>javadoc:        生成java doc的工具。</p>
		<p>    对于初学java的人来说，我不推荐使用IDE而直接用文本编辑器，然后用命令行编译运行。这样有利于理解CLASSPATH，PATH这些最基本概念。CLASSPATH是初学者比较容易感觉迷惑的地方。现在的IDE太聪明了，给个名字就给你自动生成java source code，自动编译。可能你运行完了你的第一个Hello World程序，还不知道java和javac是用来做什么的。至于实际的项目开发，一款合适的IDE还是十分重要的，我们稍后再对java开发工具做一些介绍。 </p>
		<p> </p>
		<p>三、J2EE基础和Java语言进阶</p>
		<p>    学习完语言基础，就可以比较自然地转入J2EE实际技术的学习了。J2EE实在是比较庞杂，而EJB，Servlet，这些核心技术是作为每一个J2EE开发人员所需要掌握的。关于servlet，我比较推荐&lt;&gt;和&lt;&gt;，第一本是Sun推荐的Servlet教材。第二本是当年Amazon最畅销Java书籍，五星级书籍。这本书机械工业出版社有中文版叫&lt;&lt;与JSP权威指南&gt;&gt;，感觉翻译得还可以，第二版好像还没有看到有中文版。两本书都全面系统地介绍了JSP和Sevlet知识，从web服务器配置，JSP，Servlet基本编程，标记库(Tag Lib)，过滤器，事件框架都有很好地描述。提供地例子也比较实用。对于EJB学习，比较著名有两本书，&lt;&lt; Enterprise JavaBeans， 3nd Edition&gt;&gt;和&lt;&lt; Mastering Enterprise Java Beans Third Edition&gt;&gt;，两位作者Richard Monson，Ed Roman都是属于业界重量级人物。而Richard Monson本身就是EJB规范专家组成员。对我来说，两本书难分优劣，第二本书有个好处就是可以免费下载<a href="http://www.theserverside.com/books/wiley/masteringEJB/index.tss">http://www.theserverside.com/books/wiley/masteringEJB/index.tss</a>。</p>
		<p>    还是那句话，不能光说不练，不过J2EE的练习做起来有一点麻烦，应用服务器是不可少的，最好还得准备个轻量级的数据库。下面简单介绍一下这些工具。</p>
		<p>web服务器(Servlet Container)方面有：</p>
		<p>Tomcat:          <a href="http://jakarta.apache.org/tomcat/">http://jakarta.apache.org/tomcat/</a></p>
		<p>Jetty:              <a href="http://jetty.mortbay.org/jetty/">http://jetty.mortbay.org/jetty/</a></p>
		<p>应用服务器常用的有：</p>
		<p>Jboss:            <a href="http://www.jboss.org/products/index">http://www.jboss.org/products/index</a></p>
		<p>Weblogic:       <a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;FP=/content/products/server">http://www.bea.com/framework.jsp?CNT=index.htm&amp;FP=/content/products/server</a></p>
		<p>WebSphere:    <a href="http://www-128.ibm.com/developerworks/downloads/ws/was/?S_TACT=105AGX28&amp;S_CMP=DLMAIN">http://www-128.ibm.com/developerworks/downloads/ws/was/?S_TACT=105AGX28&amp;S_CMP=DLMAIN</a>。</p>
		<p>   Tomcat，Jetty，Jboss都是Open Source。Weblogic和WebSphere是J2EE服务器中的老大级人物，价格也不菲。不过对于开发者有免费的试用版下载。</p>
		<p>   如果单单只是学习Servlet，推荐使用Tomcat，它是Sun官方指定的Servlet，JSP规范的参考实现。对初学者最重要的是它使用比较简单，自带文档比较齐全，使用者众多，有什么问题容易在论坛上面得到帮助。如果学习EJB的话，推荐使用Jboss，不仅仅是因为它是Open Source的，主要是配置比较简单，使用方便。比如说对于连接数据库，对于常用的MySQL，Oracle，MS SQL等等都提供了Sample Config文件，直接拿过来做些小改动扔到Deploy目录下就可以用DataSource了，部署J2EE应用也简单，把整个.ear或者.war扔到deploy下就可以了。唯一不方便的地方是从Jboss3.0开始，它的文档开始收费了。但是对于一些基本的配置，在网上还是非常容易找到的，毕竟它太流行了。至于Weblogic，也比较容易使用，不过比起Jboss来个头大了很多，通过强大的管理界面使得一些常用的配置工作变得十分简单。和Jboss比起来它的文档就太多了，简直是有点罗里八嗦，比如要部署一个.ear文件，一般我们也就是直接扔到domain下的applications目录下就会自动deploy了，但是要看它的文档可是长篇大论，容易吓着初学者，以为这又是什么高深的学问。至于WebSphere，个人不推荐初学者使用，相比前俩个Server比较难使，而且狂吃内存。不过在企业级市场这个家伙表现不俗，毕竟是出生于IBM这样的豪门。</p>
		<p>   数据库方面，目前常见的主要有PostgreSQL，MySQL，Oracle，MS SQL，DB2等等。前面两个是开源数据库，后面几个基本上垄断着大部分的数据库市场。对于初学者用来做做EJB，JDBC的练习，我推荐MySQL，理由还是很简单，开源软件不要钱，个头小使用方面，用户众多文档齐全。下载地址<a href="http://www.mysql.com/products/mysql/">http://www.mysql.com/products/mysql/</a>。PostgreSQL也可以考虑，不过国内使用者远不如MySQL多，所以要在论坛上问起问题来就少方便一些了，下载地址<a href="http://www.pervasive-postgres.com/downloads/">http://www.pervasive-postgres.com/downloads/</a>。至于后面那些比较重量级的数据库，为了做做练习而言就不用考虑了， 咱也花不起这个钱啊。</p>
		<p>   学习完J2EE的这些具体技术，这个时候进行基本的J2EE开发应该是不成问题了。此时应该考虑提高自己的代码质量了。这里我强烈推荐Martin Fowler的&lt;&gt;，这本书不是一本非常实际的书，作者完全是手把手地教你如何提高代码质量，从具体地代码中告诉你什么是代码的Bad Smell，如何去掉这些Bad Smell。不少书评是这么说的，这本书对于初级，中级的读者帮助是立杆见影的。至少就我接触到的几个学习编程不久的程序员，编码质量在短期内都有很大提高。当然重构(Refactoring)这一概念并不只针对Java语言的，它对所有OO语言都是适用的。重构的概念是如此深入人心，以至于今天几乎所有流行的IDE工具都有对重构的支持。这里我还想再推荐一本&lt;&gt;。从C++过来的程序员都知道&lt;&gt;在C++领域的地位，至今还流传着这样的趣话，C++程序员分为两种，一种是读过&lt;&gt;的，另一种是没有读过C++的。虽然这本&lt;&gt;在Java领域的影响也许没有那么大，但对于Java程序员绝对有相当的指导价值。作者是Sun公司的Joshua Bloch，java Collection framework的设计者。作者站在JDK设计者的角度向你介绍他的Best Practice，应该这样做而不应该那样做，对于JDK中某些API设计的缺陷他也毫不袒护的指出。Java语言之父James Gosling为此书写的前言是这么说的“I sure wish I had had this book ten years ago。 Some might think that I don't need any Java books， but I need this one”。这本书会让你觉得原来你对Java还是有很多东西不了解的。举个例子来说，对象的equals方法，我们认为它很简单，也许你每天都在为你新写的Class重载这个方法，但是你在重载的时候注意过“自反”，“对称”，“传递”这些必须要考虑的因素，你是否同时还小心谨慎的重载了hashcode这个方法？如果没有，建议你要读一下这本书。读完这本书，你会觉得离Java的距离更近了。上面两本书都出过中文版，后面一本&lt;&gt;还有两个版本的中文版，第一次翻译的比较差一点，后来机械工业出版社又委托潘爱民先生重新翻译了一遍。同一本书在同一个出版社连续被翻译了两次也说明国内出版界对这本书还是比较重视的。</p>
		<p>   这个阶段，在看书的同时，可以结合着学习一些优秀的开源项目的源代码。这些开源项目的代码风格，注释都是值得借鉴的。实在太懒也别忘了手头上还有个Jdk的源代码。其实也不用刻意去找源代码，在实际的J2EE项目开发中，基本上都会用到一些优秀的开源项目。Framework可能会用到Spring，Struts，Log机制基本上都会JarkartaCommons Log或者Log4j，单元测试会大多会用Junit，结合项目阅读一下其中的一些源代码，既可以提高自己又对项目会有所帮助，说不定因此而得到PM的赏识呢。一举两得，何乐而不为呢。呵呵，有点扯远了。过了初学者阶段，该学会如何找到适合自己的Java书籍了。历经数十载，今天的Java技术已经变的如此之庞杂，我相信即使穷净一个人毕生之精力也不可能把Java所有的相关技术都学通，何况新技术还在层出不穷地推出，3年之前谁会知道Struts会成为Web框架事实上的工业标准。2年之前谁会知道Hibernate会在今天独领风骚。既然已经不能指望一次性把java技术的方方面面都学个通，在实际中也只能是需要什么技术再学习什么技术了。而能否选择一本好的参考书籍带来的就是事半功倍和事倍工半的效果。所以我觉得花点时间放在选择书籍上面还是很值得的，否则你在后面只会花更多的时间。下面我谈谈自己选择书籍的一些经验，不一定正确。首先看作者，像上面提到的那些书的作者，都是业界鼎鼎大名的，选择他们的书一般错不了。大家看的书多了，自己胸中自然也会有一个list，哪些作者是信得过的。二看出版社，计算机书籍方面，Oreilly，Addison-Wesley都是公认比较好的出版社。对于目前比较流行的Java技术，Oreilly的&lt;&gt;系列是不错的选择。另外我还会去看看Amazon网站(<a href="http://www.amazon.com/">http://www.amazon.com/</a>)的书评，一般小于3星级的书我都不会考虑。还有一个好去处<a href="http://www.theserverside.com/">http://www.theserverside.com/</a>的书评，这里的书评比较有趣，往往都有很激烈的争论，里面经常会看到一些名人在发言。我要向所有Java学习者推荐，如果我的收藏夹里面只能存放两个网站，我会选择java.sun和theserverside。在这里你可以了解最新的Java动态，可以学习第一手的Java资料，可以看到Java高手们(里面不乏业界大腕)激烈辩论。</p>
		<p>   到此阶段，Java Developer的基本功底应该算是打好了吧，往后就是不断学习喽。结束这一段之前，最后再介绍一本书Oreilly的&lt;&gt;，因为我觉得多线程编程属于Java基本功，每一个想学好Java的人都应该好好掌握。</p>
		<p> </p>
		<p>四、提高篇</p>
		<p>   在这个阶段应该从软件架构，Framework层次上来学习了。作为面向对象的圣经&lt;&gt;， 这本书是不得不推荐的。不用再多说了，这本在面向对象领域地位完全是属于教父级别的。不管你学习的是什么OO语言，不管你现在是用.Net还是J2EE开发，这本书都是你进阶之路上的必读之书。而&lt;&gt;则专门针对于J2EE来讨论设计模式，书中Sun Java Center的资深设计师描述了J2EE关键技术的模式。最佳实践，设计策略和经过验证的解决方案。对于每一个希望成为J2EE 架构师或者设计师，这本书值得一读。学习设计模式的时候，建议是结合实际的源代码来看，比如看看Junit源代码，你可以看到很多设计模式优雅的实现，作者之一Erich Gamma本身就是&lt;&gt;的作者。至于J2EE的设计模式，Sun还开辟了专门的空间<a href="http://java.sun.com/blueprints/patterns/">http://java.sun.com/blueprints/patterns/</a>，里面有对常用模式的讨论又提供了详细的源代码样例。正如Grady Booch所说，模式对于普遍问题提供了通用的解决方案，利用模式就等于拥有一个强大的专家队伍。如果你还没有学习，现在就开始吧。此外对于面向对象方法论，极限编程的思想也应该有所了解<a href="http://www.extremeprogramming.org/">http://www.extremeprogramming.org/</a>。对于J2EE项目的具体实施，Rod Johnson的&lt;&gt;也很有价值，该书以作者丰富的实战经验向我们展示如何用尽可能简单的解决方案构建J2EE 应用，书中作者第一次提出这样的观点，很多时候，J2EE应用完全没有必要用到EJB，对于言必称EJB的广大J2EE开发者来说，怎么说也有点惊世咳俗的味道。当然，作为Servlet和JDO两个专家组的成员，这可不是作者信口胡驺的。今天风靡Java世界的Spring框架最初便是源于此书，而IOC，AOP等概念更是被时下的java开发者挂在嘴边。最后，作为对Java的深入学习，Java技术的各个Specification也有必要一读。暂时就写到这里吧。</p>
		<p>五、结语</p>
		<p>   相信大家看了这篇文章后会有较大的提高，如果你想了解更多的关于Java方面的知识，你可以浏览“Java学习笔记”（<a href="http://sylan215.bokee.com/">http://sylan215.bokee.com/</a>）网站，对于学习Java，这是一个相当不错的选择。</p>
		<p> </p>
		<p> </p>
<img src ="http://www.cppblog.com/linhong34/aggbug/8412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-06-11 13:58 <a href="http://www.cppblog.com/linhong34/archive/2006/06/11/8412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>索引组织表</title><link>http://www.cppblog.com/linhong34/archive/2006/06/08/8278.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Wed, 07 Jun 2006 16:42:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/06/08/8278.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/8278.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/06/08/8278.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/8278.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/8278.html</trackback:ping><description><![CDATA[索引组织表的数据按主键排序手段被存储在B-树索引中，除了存储主键列值外还存储非键列的值。普通索引只存储索引列，而索引组织表则存储表的所有列的值。<br />索引组织表一般适应于静态表，且查询多以主键列。当表的大部分列当作主键列时，且表相对静态，比较适合创建索引组织表！（8i以上）<br />索引组织表的创建：<br />CREATE TABLE docindex(<br />token char(20),<br />doc_id NUMBER,<br />token_frequency NUMBER,<br />token_offsets VARCHAR2(512),<br />CONSTRAINT pk_docindex PRIMARY KEY (token, doc_id))<br />ORGANIZATION INDEX TABLESPACE ind_tbs;<br />必须给索引结构表指定主键。 <img src ="http://www.cppblog.com/linhong34/aggbug/8278.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-06-08 00:42 <a href="http://www.cppblog.com/linhong34/archive/2006/06/08/8278.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 的位图索引</title><link>http://www.cppblog.com/linhong34/archive/2006/06/07/8230.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Tue, 06 Jun 2006 16:34:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/06/07/8230.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/8230.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/06/07/8230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/8230.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/8230.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="98%" align="center" border="0">
				<tbody>
						<tr>
								<td bgcolor="#e8e8e8" height="30">
										<div align="center">
												<font color="#ff0000" size="4">
														<strong>Oracle 的位图索引</strong>
												</font>
										</div>
								</td>
						</tr>
						<tr>
								<td>
										<!--内容开始-->
										<h3>
												<p>
														<font color="#008080" size="3">         </font>
														<span class="Code">
																<p>
																		<font color="#008080" size="3"> Oracle的索引主要包含两类：BTree和位图索引。默认情况下大多使用Btree索引，该索引就是通常所见 唯一索引、聚簇索引等等，Btree用在OLTP，加快查询速度。位图索引是Oracle的比较引人注目的地方，其主要用在OLAP（联机数据分析）方面，也就是数据仓库方面用到，目的是在加快查询速度是，节省存储空间。通常情况下，索引都要耗费比较大的存储空间，位图采用了压缩技术实现磁盘空间缩减。Btree用在高基数（即列的数据相异度大），位图用在低基数列。位图索引的基本原理是在索引中使用位图而不是列值。通常在事实表和维表的键之间有很低的集的势（cardinality），使用位图索引，存储更为有效，与B*Tree索引比较起来，只需要更少的存储空间，这样每次读取可以读到更多的记录，而且与B*Tree索引相比,位图索引将比较,连接和聚集都变成了位算术运算,大大减少了运行时间，从而得到性能上的极大的提升。</font>
																</p>
																<p>
																		<font color="#008080" size="3">在Oracle中如何合理的使用位图索引？以下的几个事项应该考虑。 <br />  <br />           *  如果要使用位图索引，初始化参数STAR_TRANSFORMATION_ENABLED应该设置为 <br />              TRUE. <br />           *   优化模式应该是CBO。对于数据仓库的环境中，总是应该考虑使用CBO（COST-BASED   <br />             OPTIMIZER）。 <br />           *   位图索引应该建立在每一个事实表的外键列上。(这只是一个一般的规则.) <br />  <br />      此外，对于数据表中的cardinality如何客观的确定也是一个问题，一万条数据中只包含3个值的集和算是低的了，那么一亿条记录中包含3万条记录算不算低的呢？对于这样的情况，建议几行一下数据的模拟测试，一般来说，在数据仓库环境中，位图索引的性能要好于B*Tree索引。还要注意位图索引不是为OLTP数据库设计的，不应该在OLTP数据库中大量的使用它，尤其是对那些有更新操作的表 。 </font>
																</p>
														</span>
												</p>
												<p>
												</p>
										</h3>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/linhong34/aggbug/8230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-06-07 00:34 <a href="http://www.cppblog.com/linhong34/archive/2006/06/07/8230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打印菱形（经典）</title><link>http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Sun, 04 Jun 2006 10:00:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/8152.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/8152.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/8152.html</trackback:ping><description><![CDATA[
		<p>#include &lt;stdio.h&gt;<br />void main()<br />{<br />    int i,m=1;<br />    for(i=0;i&lt;19;i++) <br />    {<br />//  %*s\n *表示控制宽度，s字符串 <br />//  m&lt;=10?10+m :30-m 表示输出的位置，<br />//  (m&lt;=10?20-2*m:2*m-20)控制输出的个数<br />printf("%*s\n",m&lt;=10?10+m :30-m ,"*******************"+(m&lt;=10?20-2*m:2*m-20)<br />      );<br />        m++;        <br />    }</p>
		<p>} <br /></p>
<img src ="http://www.cppblog.com/linhong34/aggbug/8152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-06-04 18:00 <a href="http://www.cppblog.com/linhong34/archive/2006/06/04/8152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网络安全中防火墙和IDS的作用</title><link>http://www.cppblog.com/linhong34/archive/2006/06/03/8130.html</link><dc:creator>太极虎~宏</dc:creator><author>太极虎~宏</author><pubDate>Sat, 03 Jun 2006 13:13:00 GMT</pubDate><guid>http://www.cppblog.com/linhong34/archive/2006/06/03/8130.html</guid><wfw:comment>http://www.cppblog.com/linhong34/comments/8130.html</wfw:comment><comments>http://www.cppblog.com/linhong34/archive/2006/06/03/8130.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/linhong34/comments/commentRss/8130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/linhong34/services/trackbacks/8130.html</trackback:ping><description><![CDATA[
		<div class="title" align="center">网络安全中防火墙和IDS的作用</div>
		<br />业界的同行曾经说过“安全，是一种意识，而不是某种的技术就能实现真正的安全。”随着工作的时间渐长，对这句话的体会就越深。再防守严密的网络，利用人为的疏忽，管理员的懒惰和社会工程学也可能被轻易攻破。 
<p>　　因此，在这里我介绍的防火墙和IDS技术，只是我们在网络安全环节中进行的一个防御步骤。在网络内进行防火墙与IDS的设置，并不能保证我们的网络就绝对安全了，但是设置得当的防火墙和IDS，至少会使我们的网络更为坚固一些，并且能提供更多的攻击信息供我们分析。 </p><p>　　接下来，让我们正确地认识一下防火墙和IDS的作用吧。　 </p><p>　　<strong><font color="#ff0000">防火墙 </font></strong></p><p>　　<strong>一、防火墙能够做到些什么？</strong></p><p>　　<u>1.包过滤</u></p><p>　　具备包过滤的就是防火墙？对，没错！根据对防火墙的定义，凡是能有效阻止网络非法连接的方式，都算防火墙。早期的防火墙一般就是利用设置的条件，监测通过的包的特征来决定放行或者阻止的，包过滤是很重要的一种特性。虽然防火墙技术发展到现在有了很多新的理念提出，但是包过滤依然是非常重要的一环，如同四层交换机首要的仍是要具备包的快速转发这样一个交换机的基本功能一样。通过包过滤，防火墙可以实现阻挡攻击，禁止外部/内部访问某些站点，限制每个ip的流量和连接数。 </p><p>　　<u>2.包的透明转发 </u></p><p>　　事实上，由于防火墙一般架设在提供某些服务的服务器前。如果用示意图来表示就是 Server—FireWall—Guest 。用户对服务器的访问的请求与服务器反馈给用户的信息，都需要经过防火墙的转发,因此，很多防火墙具备网关的能力。 </p><p>　　<u>3.阻挡外部攻击 </u></p><p>　　如果用户发送的信息是防火墙设置所不允许的，防火墙会立即将其阻断，避免其进入防火墙之后的服务器中。 </p><p>　　<u>4.记录攻击 </u></p><p>　　如果有必要，其实防火墙是完全可以将攻击行为都记录下来的，但是由于出于效率上的考虑，目前一般记录攻击的事情都交给IDS来完成了，我们在后面会提到。 </p><p>　　以上是所有防火墙都具备的基本特性，虽然很简单，但防火墙技术就是在此基础上逐步发展起来的。 </p><p>　　<strong>二、防火墙有哪些缺点和不足？ </strong></p><p>　　<u>1.防火墙可以阻断攻击，但不能消灭攻击源</u></p><p>　　“各扫自家门前雪，不管他人瓦上霜”，就是目前网络安全的现状。互联网上病毒、木马、恶意试探等等造成的攻击行为络绎不绝。设置得当的防火墙能够阻挡他们，但是无法清除攻击源。即使防火墙进行了良好的设置，使得攻击无法穿透防火墙，但各种攻击仍然会源源不断地向防火墙发出尝试。例如接主干网10M网络带宽的某站点，其日常流量中平均有512K左右是攻击行为。那么，即使成功设置了防火墙后，这512K的攻击流量依然不会有丝毫减少。 </p><p>　　<u>2.防火墙不能抵抗最新的未设置策略的攻击漏洞</u>　 </p><p>　　就如杀毒软件与病毒一样，总是先出现病毒，杀毒软件经过分析出特征码后加入到病毒库内才能查杀。防火墙的各种策略，也是在该攻击方式经过专家分析后给出其特征进而设置的。如果世界上新发现某个主机漏洞的cracker的把第一个攻击对象选中了您的网络，那么防火墙也没有办法帮到您的。 </p><p>　　<u>3.防火墙的并发连接数限制容易导致拥塞或者溢出</u></p><p>　　由于要判断、处理流经防火墙的每一个包，因此防火墙在某些流量大、并发请求多的情况下，很容易导致拥塞，成为整个网络的瓶颈影响性能。而当防火墙溢出的时候，整个防线就如同虚设，原本被禁止的连接也能从容通过了。　 </p><p>　　<u>4.防火墙对服务器合法开放的端口的攻击大多无法阻止</u></p><p>　　某些情况下，攻击者利用服务器提供的服务进行缺陷攻击。例如利用开放了3389端口取得没打过sp补丁的win2k的超级权限、利用asp程序进行脚本攻击等。由于其行为在防火墙一级看来是“合理”和“合法”的，因此就被简单地放行了。 </p><p>　　<u>5.防火墙对待内部主动发起连接的攻击一般无法阻止</u></p><p>　　“外紧内松”是一般局域网络的特点。或许一道严密防守的防火墙内部的网络是一片混乱也有可能。通过社会工程学发送带木马的邮件、带木马的URL等方式，然后由中木马的机器主动对攻击者连接，将铁壁一样的防火墙瞬间破坏掉。另外，防火墙内部各主机间的攻击行为，防火墙也只有如旁观者一样冷视而爱莫能助。 </p><p>　　<u>6．防火墙本身也会出现问题和受到攻击</u></p><p>　　防火墙也是一个os，也有着其硬件系统和软件，因此依然有着漏洞和bug。所以其本身也可能受到攻击和出现软/硬件方面的故障。 </p><p>　　<u>7．防火墙不处理病毒</u>　 </p><p>　　不管是funlove病毒也好，还是CIH也好。在内部网络用户下载外网的带毒文件的时候，防火墙是不为所动的（这里的防火墙不是指单机/企业级的杀毒软件中的实时监控功能，虽然它们不少都叫“病毒防火墙”）。 </p><p>　　看到这里，或许您原本心目中的防火墙已经被我拉下了神台。是的，防火墙是网络安全的重要一环，但不代表设置了防火墙就能一定保证网络的安全。“真正的安全是一种意识，而非技术!”请牢记这句话。 </p><p>　　不管怎么样，防火墙仍然有其积极的一面。在构建任何一个网络的防御工事时，除了物理上的隔离和目前新近提出的网闸概念外，首要的选择绝对是防火墙。那么，怎么选择需要的防火墙呢？ </p><p>　　<strong>防火墙的分类</strong></p><p>　　首先大概说一下防火墙的分类。就防火墙（本文的防火墙都指商业用途的网络版防火墙，非个人使用的那种）的组成结构而言，可分为以下三种： </p><p>　　<u>第一种：软件防火墙</u></p><p>　　软件防火墙运行于特定的计算机上，它需要客户预先安装好的计算机操作系统的支持，一般来说这台计算机就是整个网络的网关。软件防火墙就象其它的软件产品一样需要先在计算机上安装并做好配置才可以使用。防火墙厂商中做网络版软件防火墙最出名的莫过于Checkpoint。使用这类防火墙，需要网管对所工作的操作系统平台比较熟悉。 </p><p>　　<u>第二种：硬件防火墙</u></p><p>　　这里说的硬件防火墙是指所谓的硬件防火墙。之所以加上"所谓"二字是针对芯片级防火墙说的了。它们最大的差别在于是否基于专用的硬件平台。目前市场上大多数防火墙都是这种所谓的硬件防火墙，他们都基于PC架构，就是说，它们和普通的家庭用的PC没有太大区别。在这些PC架构计算机上运行一些经过裁剪和简化的操作系统，最常用的有老版本的Unix、Linux和FreeBSD系统。 值得注意的是，由于此类防火墙采用的依然是别人的内核，因此依然会受到os本身的安全性影响。国内的许多防火墙产品就属于此类，因为采用的是经过裁减内核和定制组件的平台，因此国内防火墙的某些销售人员常常吹嘘其产品是“专用的os”等等，其实是一个概念误导，下面我们提到的第三种防火墙才是真正的os专用。　 </p><p>　　<u>第三种：芯片级防火墙</u></p><p>　　它们基于专门的硬件平台，没有操作系统。专有的ASIC芯片促使它们比其他种类的防火墙速度更快，处理能力更强，性能更高。做这类防火墙最出名的厂商莫过于NetScreen.其他的品牌还有FortiNet,算是后起之秀了。这类防火墙由于是专用OS,因此防火墙本身的漏洞比较少，不过价格相对比较高昂，所以一般只有在“确实需要”的情况下才考虑。</p><p>　　在这里，特别纠正几个不正确的观念： </p><p>　　<u>1.在性能上，芯片级防火墙&gt;硬件防火墙&gt;软件防火墙</u></p><p>　　在价格上看来，的确倒是如此的关系。但是性能上却未必。防火墙的“好”，是看其支持的并发数、最大流量等等性能，而不是用软件硬件来区分的。事实上除了芯片级防火墙外，软件防火墙与硬件防火墙在硬件上基本是完全一样的。目前国内的防火墙厂商由于大多采用硬件防火墙而不是软件防火墙，原因1是考虑到用户网络管理员的素质等原因，还有就是基于我国大多数民众对“看得见的硬件值钱，看不到的软件不值钱”这样一种错误观点的迎合。不少硬件防火墙厂商大肆诋毁软件防火墙性能，不外是为了让自己那加上了外壳的普通pc＋一个被修改后的内核＋一套防火墙软件能够卖出一个好价钱来而已。而为什么不作芯片级防火墙呢？坦白说，国内没有公司有技术实力。而且在中国市场上来看，某些国内的所谓硬件防火墙的硬件质量连diy的兼容机都比不上。看看国内XX的硬件防火墙那拙劣的硬盘和网卡，使用过的人都能猜到是哪家，我就不点名了。真正看防火墙，应该看其稳定性和性能，而不是用软、硬来区分的。至少，如果笔者自己选购，我会选择购买CheckPoint而非某些所谓的硬件防火墙的。 </p><p>　　<u>2.在效果上，芯片防火墙比其他两种防火墙好</u></p><p>　　这同样也是一种有失公允的观点。事实上芯片防火墙由于硬件的独立，的确在OS本身出漏洞的机会上比较少，但是由于其固化，导致在面对新兴的一些攻击方式时，无法及时应对；而另外两种防火墙，则可以简单地通过升级os的内核来获取系统新特性，通过灵活地策略设置来满足不断变化的要求，不过其OS出现漏洞的概率相对高一些。 </p><p>　　<u>3.唯技术指标论</u></p><p>　　请以“防火墙买来是使用的”为第一前提进行购买。防火墙本身的质量如何是一回事，是否习惯使用又是另一回事。如果对一款产品的界面不熟悉，策略设置方式不理解，那么即使用世界最顶级的防火墙也没有多大作用。就如小说中武林中人无不向往的“倚天剑”、“屠龙刀”被我拿到，肯定也敌不过乔峰赤手的少林长拳是一般道理。防火墙技术发展至今，市场已经很成熟了，各类产品的存在，自然有其生存于市场的理由。如何把产品用好，远比盲目地比较各类产品好。 </p><p>　　<strong><font color="#ff0000">IDS </font></strong></p><p>　　什么是IDS呢？早期的IDS仅仅是一个监听系统，在这里，你可以把监听理解成窃听的意思。基于目前局网的工作方式，IDS可以将用户对位于与IDS同一交换机/HuB的服务器的访问、操作全部记录下来以供分析使用，跟我们常用的widnows操作系统的事件查看器类似。再后来，由于IDS的记录太多了，所以新一代的IDS提供了将记录的数据进行分析，仅仅列出有危险的一部分记录，这一点上跟目前windows所用的策略审核上很象；目前新一代的IDS，更是增加了分析应用层数据的功能，使得其能力大大增加；而更新一代的IDS，就颇有“路见不平，拔刀相助”的味道了，配合上防火墙进行联动，将IDS分析出有敌意的地址阻止其访问。 </p><p>　　就如理论与实际的区别一样，IDS虽然具有上面所说的众多特性，但在实际的使用中，目前大多数的入侵检测的接入方式都是采用pass-by方式来侦听网络上的数据流，所以这就限制了IDS本身的阻断功能，IDS只有靠发阻断数据包来阻断当前行为，并且IDS的阻断范围也很小，只能阻断建立在TCP基础之上的一些行为，如Telnet、FTP、HTTP等，而对于一些建立在UDP基础之上就无能为力了。因为防火墙的策略都是事先设置好的，无法动态设置策略，缺少针对攻击的必要的灵活性，不能更好的保护网络的安全，所以IDS与防火墙联动的目的就是更有效地阻断所发生的攻击事件，从而使网络隐患降至较低限度。 </p><p>　　接下来，我简单介绍一下IDS与防火墙联动工作原理 </p><p>　　入侵检测系统在捕捉到某一攻击事件后，按策略进行检查，如果策略中对该攻击事件设置了防火墙阻断，那么入侵检测系统就会发给防火墙一个相应的动态阻断策略，防火墙根据该动态策略中的设置进行相应的阻断，阻断的时间、阻断时间间隔、源端口、目的端口、源IP和目的IP等信息，完全依照入侵检测系统发出的动态策略来执行。一般来说，很多情况下，不少用户的防火墙与IDS并不是同一家的产品，因此在联动的协议上面大都遵从 opsec 或者 topsec协议进行通信，不过也有某些厂家自己开发相应的通信规范的。目前总得来说，联动有一定效果，但是稳定性不理想，特别是攻击者利用伪造的包信息，让IDS错误判断，进而错误指挥防火墙将合法的地址无辜屏蔽掉。 </p><p>　　因为诸多不足，在目前而言，IDS主要起的还是监听记录的作用。用个比喻来形容：网络就好比一片黑暗，到处充满着危险，冥冥中只有一个出口；IDS就象一支手电筒，虽然手电筒不一定能照到正确的出口，但至少有总比没有要好一些。称职的网管，可以从IDS中得到一些关于网络使用者的来源和访问方式，进而依据自己的经验进行主观判断（注意，的确是主观判断。例如用户连续ping了服务器半个小时，到底是意图攻击，还是无意中的行为？这都依据网络管理员的主观判断和网络对安全性的要求来确定对应方式。）对IDS的选择，跟上面谈到的防火墙的选择类似，根据自己的实际要求和使用习惯，选择一个自己够用的，会使用的就足够了。 </p><p>　　最后，要说的依然是那句“世界上没有一种技术能真正保证绝对地安全。”安全问题，是从设备到人，从服务器上的每个服务程序到防火墙、IDS等安全产品的综合问题；任何一个环节工作，只是迈向安全的步骤。</p><img src ="http://www.cppblog.com/linhong34/aggbug/8130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/linhong34/" target="_blank">太极虎~宏</a> 2006-06-03 21:13 <a href="http://www.cppblog.com/linhong34/archive/2006/06/03/8130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>