﻿<?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-Rex-随笔分类-支持技术</title><link>http://www.blogjava.net/RomulusW/category/16423.html</link><description>——生命不止，战斗不息。</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 14:55:59 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 14:55:59 GMT</pubDate><ttl>60</ttl><item><title>     ms sql 小知识</title><link>http://www.blogjava.net/RomulusW/archive/2008/05/23/202329.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Fri, 23 May 2008 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2008/05/23/202329.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/202329.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2008/05/23/202329.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/202329.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/202329.html</trackback:ping><description><![CDATA[<p>exec sp_addlinkedserver&nbsp; 'link_sql2','','SQLOLEDB','127.0.0.1;<br />
exec sp_addlinkedsrvlogin 'link_sql2','false',null,'sa','sa';</p>
<p>select *from&nbsp; Table1<br />
insert into [link_sql2].OSS.dbo.Table1&nbsp;select *from&nbsp; Table1</p>
<img src ="http://www.blogjava.net/RomulusW/aggbug/202329.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2008-05-23 10:35 <a href="http://www.blogjava.net/RomulusW/archive/2008/05/23/202329.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java遍历HashMap</title><link>http://www.blogjava.net/RomulusW/archive/2007/08/21/138363.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Tue, 21 Aug 2007 06:05:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2007/08/21/138363.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/138363.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2007/08/21/138363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/138363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/138363.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_61_194_Open_Image onclick="this.style.display='none'; Codehighlighter1_61_194_Open_Text.style.display='none'; Codehighlighter1_61_194_Closed_Image.style.display='inline'; Codehighlighter1_61_194_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_61_194_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_61_194_Closed_Text.style.display='none'; Codehighlighter1_61_194_Open_Image.style.display='inline'; Codehighlighter1_61_194_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(Iterator&nbsp;iter&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;map.entrySet().iterator();iter.hasNext())</span><span id=Codehighlighter1_61_194_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_61_194_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>Map.Entry&nbsp;element&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(Map.Entry)&nbsp;iter.next();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>Object&nbsp;strKey&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;element.getKey();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">键值</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">Object&nbsp;strValue&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;element.getValue();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">value值</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">HashMap</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">K,V</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;map<img src="http://www.blogjava.net/Images/dot.gif"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(V&nbsp;v:map)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>v<img src="http://www.blogjava.net/Images/dot.gif">.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.blogjava.net/RomulusW/aggbug/138363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2007-08-21 14:05 <a href="http://www.blogjava.net/RomulusW/archive/2007/08/21/138363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>好久没写</title><link>http://www.blogjava.net/RomulusW/archive/2006/12/12/87305.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Tue, 12 Dec 2006 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/12/12/87305.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/87305.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/12/12/87305.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/87305.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/87305.html</trackback:ping><description><![CDATA[
		<p> </p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #0000ff">select</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #808080">*</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">from</span>
				<span style="COLOR: #000000"> sysproperties g,syscolumns a </span>
				<span style="COLOR: #0000ff">where</span>
				<span style="COLOR: #000000"> a.id</span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000">g.id </span>
				<span style="COLOR: #808080">AND</span>
				<span style="COLOR: #000000"> a.colid </span>
				<span style="COLOR: #808080">=</span>
				<span style="COLOR: #000000"> g.smallid</span>
		</div>记住这句话，在MSSQL中查询字段描述的查询语句。<img src ="http://www.blogjava.net/RomulusW/aggbug/87305.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-12-12 17:11 <a href="http://www.blogjava.net/RomulusW/archive/2006/12/12/87305.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于内存泄露</title><link>http://www.blogjava.net/RomulusW/archive/2006/11/22/82759.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Wed, 22 Nov 2006 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/11/22/82759.html</guid><description><![CDATA[一、C++<br />         一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的，大小任意的（内存块的大小可以在程序运行期决定），使用完后必须显示释放的内存。应用程序一般使用malloc，realloc，new等函数从堆中分配到一块内存，使用完后，程序必须负责相应的调用free或delete释放该内存块，否则，这块内存就不能被再次使用，我们就说这块内存泄漏了。看如下一段Ccode:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">void GetMemory2(char </span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">p, int num) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (char </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(num); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />} <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />void Test(void) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />{ <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    char </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">str </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    GetMemory(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str, </span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    strcpy(str, </span><span style="COLOR: #800000">"</span><span style="COLOR: #800000">hello</span><span style="COLOR: #800000">"</span><span style="COLOR: #000000">); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    printf(str); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />} <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>执行Test后，能够输出hello ;但是确实是内存泄露了，该free一下，另外我想C++中free is better than delete!<br />         以下这段小程序演示了堆内存发生泄漏的情形：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; HEIGHT: 152px; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> MyFunction(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> nSize)<br /><img id="Codehighlighter1_27_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_27_228_Open_Text.style.display='none'; Codehighlighter1_27_228_Closed_Image.style.display='inline'; Codehighlighter1_27_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_27_228_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_27_228_Closed_Text.style.display='none'; Codehighlighter1_27_228_Open_Image.style.display='inline'; Codehighlighter1_27_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_27_228_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_27_228_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">  p</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[nSize];<br /><img id="Codehighlighter1_102_168_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_168_Open_Text.style.display='none'; Codehighlighter1_102_168_Closed_Image.style.display='inline'; Codehighlighter1_102_168_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_102_168_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_102_168_Closed_Text.style.display='none'; Codehighlighter1_102_168_Open_Image.style.display='inline'; Codehighlighter1_102_168_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( </span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">GetStringFrom( p, nSize ) )</span><span id="Codehighlighter1_102_168_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_102_168_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              MessageBox(“Error”);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       …</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">using the string pointed by p;</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">       delete p;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3">         广义的说，内存泄漏不仅仅包含堆内存的泄漏，还包含系统资源的泄漏(resource leak)，比如核心态HANDLE，GDI Object，SOCKET， Interface等，从根本上说这些由操作系统分配的对象也消耗内存，如果这些对象发生泄漏最终也会导致内存的泄漏。而且，某些对象消耗的是核心态内存，这些对象严重泄漏时会导致整个操作系统不稳定。所以相比之下，系统资源的泄漏比堆内存的泄漏更为严重。</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3">GDI Object的泄漏是一种常见的资源泄漏：</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"> </p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> CMyView::OnPaint( CDC</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pDC )<br /><img id="Codehighlighter1_34_277_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_277_Open_Text.style.display='none'; Codehighlighter1_34_277_Closed_Image.style.display='inline'; Codehighlighter1_34_277_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_34_277_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_34_277_Closed_Text.style.display='none'; Codehighlighter1_34_277_Open_Image.style.display='inline'; Codehighlighter1_34_277_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_34_277_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_34_277_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       CBitmap bmp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       CBitmap</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pOldBmp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       bmp.LoadBitmap(IDB_MYBMP);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       pOldBmp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SelectObject( </span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">bmp );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       …<br /><img id="Codehighlighter1_192_223_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_223_Open_Text.style.display='none'; Codehighlighter1_192_223_Closed_Image.style.display='inline'; Codehighlighter1_192_223_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_192_223_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_192_223_Closed_Text.style.display='none'; Codehighlighter1_192_223_Open_Image.style.display='inline'; Codehighlighter1_192_223_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( Something() )</span><span id="Codehighlighter1_192_223_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_192_223_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       pDC</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SelectObject( pOldBmp );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3">当函数Something()返回非零的时候，程序在退出前没有把pOldBmp选回pDC中，这会导致pOldBmp指向的HBITMAP对象发生泄漏。这个程序如果长时间的运行，可能会导致整个系统花屏。这种问题在Win9x下比较容易暴露出来，因为Win9x的GDI堆比Win2k或NT的要小很多。</font><br />         有一个很简单的办法来检查一个程序是否有内存泄漏.就是是用Windows的任务管理器(Task Manager).  运行程序,然后在任务管理器里面查看 “内存使用”和”虚拟内存大小”两项,当程序请求了它所需要的内存之后,如果虚拟内存还是持续的增长的话,就说明了这个程序有内存泄漏问题. 当然如果内存泄漏的数目非常的小,用这种方法可能要过很长时间才能看的出来.<br />         已经有许多技术被研究出来以应对这个问题，比如Smart Pointer，Garbage Collection等。Smart Pointer技术比较成熟，STL中已经包含支持Smart Pointer的class，但是它的使用似乎并不广泛，而且它也不能解决所有的问题；Garbage Collection技术在Java中已经比较成熟，但是在c/c++领域的发展并不顺畅，虽然很早就有人思考在C++中也加入GC的支持。现实世界就是这样的，作为一个c/c++程序员，内存泄漏是你心中永远的痛。<br /></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><font size="3">以发生的方式来分类，内存泄漏可以分为4类：</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="3">      1.</font><font size="3">常发性内存泄漏。发生内存泄漏的代码会被多次执行到，每次被执行的时候都会导致一块内存泄漏。比如例二，如果Something()函数一直返回True，那么pOldBmp指向的HBITMAP对象总是发生泄漏。</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="3">      2.</font><font size="3">偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。比如例二，如果Something()函数只有在特定环境下才返回True，那么pOldBmp指向的HBITMAP对象并不总是发生泄漏。常发性和偶发性是相对的。对于特定的环境，偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="3">      3.</font><font size="3">一次性内存泄漏。发生内存泄漏的代码只会被执行一次，或者由于算法上的缺陷，导致总会有一块仅且一块内存发生泄漏。比如，在类的构造函数中分配内存，在析构函数中却没有释放该内存，但是因为这个类是一个Singleton，所以内存泄漏只会发生一次。另一个例子：</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p><font size="3"> </font></o:p></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> g_lpszFileName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> NULL;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> SetFileName( </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> lpcszFileName )<br /><img id="Codehighlighter1_75_187_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_187_Open_Text.style.display='none'; Codehighlighter1_75_187_Closed_Image.style.display='inline'; Codehighlighter1_75_187_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_75_187_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_75_187_Closed_Text.style.display='none'; Codehighlighter1_75_187_Open_Image.style.display='inline'; Codehighlighter1_75_187_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_75_187_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_75_187_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_101_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_139_Open_Text.style.display='none'; Codehighlighter1_101_139_Closed_Image.style.display='inline'; Codehighlighter1_101_139_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_101_139_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_139_Closed_Text.style.display='none'; Codehighlighter1_101_139_Open_Image.style.display='inline'; Codehighlighter1_101_139_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( g_lpszFileName )</span><span id="Codehighlighter1_101_139_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_101_139_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        free( g_lpszFileName );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    g_lpszFileName </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> strdup( lpcszFileName );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><font size="3">如果程序在结束的时候没有释放g_lpszFileName指向的字符串，那么，即使多次调用SetFileName()，总会有一块内存，而且仅有一块内存发生泄漏。</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><font size="3">      4.</font><font size="3">隐式内存泄漏。程序在运行过程中不停的分配内存，但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏，因为最终程序释放了所有申请的内存。但是对于一个服务器程序，需要运行几天，几周甚至几个月，不及时释放内存也可能导致最终耗尽系统的所有内存。所以，我们称这类内存泄漏为隐式内存泄漏。举一个例子：</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"><o:p><font size="3"> </font></o:p></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Connection<br /><img id="Codehighlighter1_17_129_Open_Image" onclick="this.style.display='none'; Codehighlighter1_17_129_Open_Text.style.display='none'; Codehighlighter1_17_129_Closed_Image.style.display='inline'; Codehighlighter1_17_129_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_17_129_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_17_129_Closed_Text.style.display='none'; Codehighlighter1_17_129_Open_Image.style.display='inline'; Codehighlighter1_17_129_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_17_129_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_17_129_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       Connection( SOCKET s);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Connection();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       …<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       SOCKET _socket;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       …<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ConnectionManager<br /><img id="Codehighlighter1_156_744_Open_Image" onclick="this.style.display='none'; Codehighlighter1_156_744_Open_Text.style.display='none'; Codehighlighter1_156_744_Closed_Image.style.display='inline'; Codehighlighter1_156_744_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_156_744_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_156_744_Closed_Text.style.display='none'; Codehighlighter1_156_744_Open_Image.style.display='inline'; Codehighlighter1_156_744_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_156_744_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_156_744_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br /><img id="Codehighlighter1_192_202_Open_Image" onclick="this.style.display='none'; Codehighlighter1_192_202_Open_Text.style.display='none'; Codehighlighter1_192_202_Closed_Image.style.display='inline'; Codehighlighter1_192_202_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_192_202_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_192_202_Closed_Text.style.display='none'; Codehighlighter1_192_202_Open_Image.style.display='inline'; Codehighlighter1_192_202_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       ConnectionManager()</span><span id="Codehighlighter1_192_202_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_192_202_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_231_435_Open_Image" onclick="this.style.display='none'; Codehighlighter1_231_435_Open_Text.style.display='none'; Codehighlighter1_231_435_Closed_Image.style.display='inline'; Codehighlighter1_231_435_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_231_435_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_231_435_Closed_Text.style.display='none'; Codehighlighter1_231_435_Open_Image.style.display='inline'; Codehighlighter1_231_435_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ConnectionManager()</span><span id="Codehighlighter1_231_435_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_231_435_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />          list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Connection</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::iterator it;<br /><img id="Codehighlighter1_342_393_Open_Image" onclick="this.style.display='none'; Codehighlighter1_342_393_Open_Text.style.display='none'; Codehighlighter1_342_393_Closed_Image.style.display='inline'; Codehighlighter1_342_393_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_342_393_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_342_393_Closed_Text.style.display='none'; Codehighlighter1_342_393_Open_Image.style.display='inline'; Codehighlighter1_342_393_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />          </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">( it </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> _connlist.begin(); it </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> _connlist.end(); </span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it )</span><span id="Codehighlighter1_342_393_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_342_393_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                     delete （</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">it）;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />              }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              _connlist.clear();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_478_564_Open_Image" onclick="this.style.display='none'; Codehighlighter1_478_564_Open_Text.style.display='none'; Codehighlighter1_478_564_Closed_Image.style.display='inline'; Codehighlighter1_478_564_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_478_564_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_478_564_Closed_Text.style.display='none'; Codehighlighter1_478_564_Open_Image.style.display='inline'; Codehighlighter1_478_564_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> OnClientConnected( SOCKET s )</span><span id="Codehighlighter1_478_564_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_478_564_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         Connection</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> p </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Connection(s);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />         _connlist.push_back(p);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_619_697_Open_Image" onclick="this.style.display='none'; Codehighlighter1_619_697_Open_Text.style.display='none'; Codehighlighter1_619_697_Closed_Image.style.display='inline'; Codehighlighter1_619_697_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_619_697_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_619_697_Closed_Text.style.display='none'; Codehighlighter1_619_697_Open_Image.style.display='inline'; Codehighlighter1_619_697_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />       </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> OnClientDisconnected( Connection</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> pconn )</span><span id="Codehighlighter1_619_697_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_619_697_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              _connlist.remove( pconn );<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />              delete pconn;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />       }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />       list</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">Connection</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000"> _connlist;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt"> <font size="3">假设在Client从Server端断开后，Server并没有呼叫OnClientDisconnected()函数，那么代表那次连接的Connection对象就不会被及时的删除（在Server程序退出的时候，所有Connection对象会在ConnectionManager的析构函数里被删除）。当不断的有连接建立、断开时隐式内存泄漏就发生了。<br /></font><br />二、JAVA中的内存泄露<br />         JAVA有GC自动回收内存，内存泄露是指系统中存在无法回收的内存，有时候会造成内存不足或系统崩溃。在C/C++中分配了内存不释放的情况就是内存泄露。虽然Java存在内存泄露，但是基本上不用很关心它，特别是那些对代码本身就不讲究的就更不要去关心这个了。 Java中的内存泄露当然是指：存在无用但是垃圾回收器无法回收的对象。而且即使有内存泄露问题存在，也不一定会表现出来。看下面的例子：<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_19_490_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_490_Open_Text.style.display='none'; Codehighlighter1_19_490_Closed_Image.style.display='inline'; Codehighlighter1_19_490_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_19_490_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_19_490_Closed_Text.style.display='none'; Codehighlighter1_19_490_Open_Image.style.display='inline'; Codehighlighter1_19_490_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Stack </span><span id="Codehighlighter1_19_490_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_19_490_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Object[] elements</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> size </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; <br /><img id="Codehighlighter1_115_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_115_163_Open_Text.style.display='none'; Codehighlighter1_115_163_Closed_Image.style.display='inline'; Codehighlighter1_115_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_115_163_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_115_163_Closed_Text.style.display='none'; Codehighlighter1_115_163_Open_Image.style.display='inline'; Codehighlighter1_115_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> push(Object e)</span><span id="Codehighlighter1_115_163_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_115_163_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　ensureCapacity();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　elements[size</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">] </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> e; <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_185_271_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_271_Open_Text.style.display='none'; Codehighlighter1_185_271_Closed_Image.style.display='inline'; Codehighlighter1_185_271_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_185_271_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_185_271_Closed_Text.style.display='none'; Codehighlighter1_185_271_Open_Image.style.display='inline'; Codehighlighter1_185_271_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Object pop()</span><span id="Codehighlighter1_185_271_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_185_271_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">( size </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">) <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　　</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> EmptyStackException(); <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　　</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> elements[</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">size];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　}</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_304_488_Open_Image" onclick="this.style.display='none'; Codehighlighter1_304_488_Open_Text.style.display='none'; Codehighlighter1_304_488_Closed_Image.style.display='inline'; Codehighlighter1_304_488_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_304_488_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_304_488_Closed_Text.style.display='none'; Codehighlighter1_304_488_Open_Image.style.display='inline'; Codehighlighter1_304_488_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> ensureCapacity()</span><span id="Codehighlighter1_304_488_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_304_488_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_336_484_Open_Image" onclick="this.style.display='none'; Codehighlighter1_336_484_Open_Text.style.display='none'; Codehighlighter1_336_484_Closed_Image.style.display='inline'; Codehighlighter1_336_484_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_336_484_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_336_484_Closed_Text.style.display='none'; Codehighlighter1_336_484_Open_Image.style.display='inline'; Codehighlighter1_336_484_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />　  </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(elements.length </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> size)</span><span id="Codehighlighter1_336_484_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_336_484_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　  Object[] oldElements </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> elements;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　  elements </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Object[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> elements.length</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　　  System.arraycopy(oldElements,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, elements, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">, size);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />　  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>假如堆栈加了10个元素，然后全部弹出来，虽然堆栈是空的，没有我们要的东西，但是这是个对象是无法回收的，这个才符合了内存泄露的两个条件：无用，无法回收。再看这个例子：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">public </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Bad{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　public static Stack s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">Stack();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　static{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　　s.push(new Object());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　　s.pop(); </span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">这里有一个对象发生内存泄露<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　　s.push(new Object()); </span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">上面的对象可以被回收了，等于是自愈了<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />} </span></div>因为是static，就一直存在到程序退出，但是我们也可以看到它有自愈功能，就是说如果你的Stack最多有100个对象，那么最多也就只有100个对象无法被回收其实这个应该很容易理解，Stack内部持有100个引用，最坏的情况就是他们都是无用的，因为我们一旦放新的进取，以前的引用自然消失！for example:<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">public </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> NotTooBad{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　public void doSomething(){<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　Stack s</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">new Stack();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　s.push(new Object());<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">other code<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　　s.pop();</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">这里同样导致对象无法回收,内存泄露.<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　}</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">退出方法,s自动无效,s可以被回收,Stack内部的引用自然没了,所以<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">这里也可以自愈,而且可以说这个方法不存在内存泄露问题,不过是晚一点<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">交给GC而已,因为它是封闭的,对外不开放,可以说上面的代码99.</span><span style="COLOR: #000000">9999</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">的<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">情况是不会造成任何影响的,当然你写这样的代码不会有什么坏的影响,但是<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">绝对可以说是垃圾代码!没有矛盾吧,我在里面加一个空的for循环也不会有<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #000000">//</span><span style="COLOR: #000000">什么太大的影响吧,你会这么做吗?<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />}</span></div>上面两个例子都不过是小打小闹,但是C/C++中的内存泄露就不是Bad了,而是Worst了。他们如果一处没有回收就永远无法回收,频繁的调用这个方法内存不就用光了!因为Java还有自愈功能(我自己起的名字,还没申请专利),所以Java的内存泄露问题几乎可以忽略了,但是知道的人就不要犯了。 <br />　　不知者无罪!Java存在内存泄露,但是也不要夸大其辞。如果你对Java都不是很熟,你根本就不用关心这个,我说过你无意中写出内存泄露的例子就像你中一千万一样概率小,开玩笑了,其实应该是小的多的多! <br />         在某些时候,因为代码上写的有问题,会导致某些内存想回收都收不回来,比如下面的代码<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">Temp1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> new BYTE[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Temp2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> new BYTE[</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">];<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />Temp2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> Temp1;</span></div>这样,Temp2的内存地址就丢掉了,而且永远都找不回了,这个时候Temp2的内存空间想回收都没有办法.<br /><p></p><img src ="http://www.blogjava.net/RomulusW/aggbug/82759.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-11-22 14:13 <a href="http://www.blogjava.net/RomulusW/archive/2006/11/22/82759.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IFRAME透明度的解决</title><link>http://www.blogjava.net/RomulusW/archive/2006/11/14/81083.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Tue, 14 Nov 2006 03:26:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/11/14/81083.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/81083.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/11/14/81083.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/81083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/81083.html</trackback:ping><description><![CDATA[&lt;iframe name="add2" allowtransparency="ture" frameBorder="0" MARGINWIDTH="100%" style="filter:alpha(opacity=0)"; height:expression(1); aho:expression(autoResize()); width:100%;" id="mainFrame" src="" &gt;&lt;/iframe&gt;<br />中style="filter.alpha(opacity=0)"设置透明度。<br /><br /><br />function mychange()<br />{<br />  if (document.add1form.typeid.value!=null &amp;&amp; document.add1form.typeid.value!="0") {<br />    document.all["mainFrame"].style.filter = "";<br />     document.all["mainFrame"].src="&lt;%=request.getContextPath()%&gt;/single_letterAction.do?actionCode=select&amp;typeid=" <br />           + document.add1form.typeid.value +"&amp;Mlever=&lt;%=Mlever%&gt;&amp;Mname=&lt;%=Mname%&gt;";<br />   }<br />}<br /><br />另外在此记下一句话：<br />&lt;div style="border:1 outset #ffffff; overflow:auto;width:100%;height:250" id="word" contenteditable&gt;&lt;/div&gt;<img src ="http://www.blogjava.net/RomulusW/aggbug/81083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-11-14 11:26 <a href="http://www.blogjava.net/RomulusW/archive/2006/11/14/81083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>窗口控制JS代码集锦</title><link>http://www.blogjava.net/RomulusW/archive/2006/11/14/81078.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Tue, 14 Nov 2006 03:19:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/11/14/81078.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/81078.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/11/14/81078.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/81078.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/81078.html</trackback:ping><description><![CDATA[
		<p>//本窗口(弹出窗口)关闭，刷新父窗口<br />&lt;script&gt;window.opener.parent.location.reload();window.close()&lt;/script&gt;</p>
		<p>//后退一页<br />&lt;a href="javascript:history.go(-1);"&gt;返回前页&lt;/a&gt;</p>
		<p>//新弹出窗口<br />&lt;script language=JavaScript&gt;<br />function newin(url,name,size)<br />{ <br /> var windowname=window.open(url,name,"left=0,top=0,status=no,scrollbars=no,resizable=no,"+size); <br />}<br />&lt;/script&gt;<br />&lt;a href=Javascript:newin('x.htm','Review','width=500,height=400')&gt;查看简介&lt;/a&gt;</p>
		<p>//页面自动返回<br />&lt;meta http-equiv="refresh" content="1;url=bigclass.asp"&gt;<br />&lt;p align=center&gt;&lt;font color=red&gt;恭喜您!您选择的大类已经被删除!&lt;br&gt;1秒钟后返回上页!&lt;/font&gt;</p>
		<p>//关闭窗口<br />&lt;a href="javascript:window.close();"&gt;点击这里关闭本窗口&lt;/a&gt;</p>
		<p>//载入时弹出窗口<br />&lt;script language="JavaScript"&gt;<br />window.open('http://www.leshanju.6to23.com/','','toolbar,menubar,scrollbars,resizable,status,location,directories,copyhistory</p>
		<p>,height=400,width=750');<br />&lt;/script&gt;</p>
		<p>
				<br />//弹出窗口自动关闭<br />&lt;script language="JavaScript"&gt;<br />　　function close() {<br />　　setTimeout("self.close()",10000) //毫秒<br />　　}<br />&lt;/script&gt;</p>
		<p>&lt;body onload="close()"&gt; </p>
		<p>//只弹出一次的窗口<br />&lt;script&gt;</p>
		<p>　　function openwin(){<br />　　window.open("page.html","","width=200,height=200")<br />　　}</p>
		<p>　　function get_cookie(Name) {<br />　　var search = Name + "=" var returnvalue = "";<br />　　if (document.cookie.length &gt; 0) {<br />　　offset = document.cookie.indexOf(search)<br />　　if (offset != -1) {<br />　　offset += search.length<br />　　end = document.cookie.indexOf(";", offset);<br />　　if (end == -1)<br />　　end = document.cookie.length;<br />　　returnvalue=unescape(document.cookie.substring(offset, end))</p>
		<p>　　}<br />　　}<br />　　return returnvalue;<br />　　}</p>
		<p>　　function loadpopup(){<br />　　if (get_cookie("popped")=="){<br />　　openwin()<br />　　document.cookie="popped=yes"<br />　　}<br />　　}<br />&lt;/script&gt;</p>
		<p>&lt;body onload="loadpopup()"&gt;</p>
		<p>//控制新开窗口属性<br />&lt;input type="button" Value="打开新窗口" <br />ONCLICK="window.open('test.htm', 'Sample', <br />'toolbar=yes,location=yes,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=yes,width=300,height=20</p>
		<p>0,left=100,top=100')"&gt;</p>
		<p>//web窗体对话框<br />&lt;script language=javascript&gt;<br />function logonApprove()<br />{<br /> var </p>
		<p>result=window.showModalDialog("ubbfaces.asp",window,"scroll:no;resizable:no;help:no;status:no;dialogWidth:400px;dialogHeight:</p>
		<p>250px");<br />}<br /></p>
<img src ="http://www.blogjava.net/RomulusW/aggbug/81078.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-11-14 11:19 <a href="http://www.blogjava.net/RomulusW/archive/2006/11/14/81078.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebLogic如何设置session超时时间</title><link>http://www.blogjava.net/RomulusW/archive/2006/11/06/79381.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Mon, 06 Nov 2006 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/11/06/79381.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/79381.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/11/06/79381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/79381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/79381.html</trackback:ping><description><![CDATA[
		<p>1 web.xml </p>
		<p>设置WEB应用程序描述符web.xml里的&lt;session-timeout&gt;元素。这个值以分钟为...<br />单位，并覆盖weblogic.xml中的TimeoutSecs属性...<br />  &lt;session-config&gt;...<br />    &lt;session-timeout&gt;54&lt;/session-timeout&gt;...<br />  &lt;/session-config&gt;...<br />此例表示Session将在54分钟后过期...<br />当&lt;session-timeout&gt;设置为－2，表示将使用在weblogic.xml中设置的...<br />TimeoutSecs这个属性值。...<br />当&lt;session-timeout&gt;设置为－1，表示Session将永不过期，而忽略在...<br />weblogic.xml中设置的TimeoutSecs属性值。...<br />该属性值可以通过console控制台来设置...<br />...<br />2 weblogic.xml</p>
		<p>设置WebLogic特有部署描述符weblogic.xml的&lt;session-descriptor&gt;元素的...<br />TimeoutSecs属性。这个值以秒为单位...<br />&lt;session-descriptor&gt;...<br />   &lt;session-param&gt;...<br />      &lt;param-name&gt;TimeoutSecs&lt;/param-name&gt;...<br />      &lt;param-value&gt;3600&lt;/param-value&gt;...<br />   &lt;/session-param&gt;...<br />&lt;/session-descriptor&gt;...<br />默认值是3600秒<br /><br />IT技术资料库：<a href="http://www.ht960.com/lanmulist/lanmu4list1.htm">http://www.ht960.com/lanmulist/lanmu4list1.htm</a></p>
<img src ="http://www.blogjava.net/RomulusW/aggbug/79381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-11-06 13:29 <a href="http://www.blogjava.net/RomulusW/archive/2006/11/06/79381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于猫的故事</title><link>http://www.blogjava.net/RomulusW/archive/2006/11/06/79376.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Mon, 06 Nov 2006 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/11/06/79376.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/79376.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/11/06/79376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/79376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/79376.html</trackback:ping><description><![CDATA[
		<div class="content_head">
				<img alt="未知" src="http://www.mikecat.net/images/weather/0.gif" align="absMiddle" border="0" />
				<b>
						<font color="#0066cc">Tomcat简介 </font>
				</b>   [ 日期：2006-07-19 ]   [ 来自：csdn ]</div>
		<div class="content_main">
				<span id="fontzoom">
						<p id="fp">一、Tomcat背景<br />　　自从JSP发布之后，推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后，开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器，当然同时也支持Servlet, 这样Tomcat就诞生了。Tomcat是jakarta项目中的一个重要的子项目，其被JavaWorld杂志的编辑选为2001年度最具创新的java产品，同时它又是sun公司官方推荐的servlet和jsp容器，因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。其次，Tomcat是完全免费的软件，任何人都可以从互联网上自由地下载。Tomcat与Apache的组合相当完美。<br /><br /> <br /><br />二、Tomcat目录<br /><br />tomcat<br />|---bin Tomcat：存放启动和关闭tomcat脚本；<br /><br />|---conf Tomcat：存放不同的配置文件（server.xml和web.xml）；<br />|---doc：存放Tomcat文档；<br />|---lib/japser/common：存放Tomcat运行需要的库文件（JARS）；<br />|---logs：存放Tomcat执行时的LOG文件；<br />|---src：存放Tomcat的源代码；<br />|---webapps：Tomcat的主要Web发布目录（包括应用程序示例）；<br />|---work：存放jsp编译后产生的class文件；<br /><br />三、Tomcat类加载<br /><br />    Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)<br />System($CLASSPATH/*.class和指定的jar)<br />Common($CATALINA_HOME/common 下的classes,lib,endores三个子目录)<br />Catalina ($CATALINA_HOME/server/下的classes和lib目录仅对Tomcat可见)<br />&amp;Shared($CATALINA_HOME/shared/下的classes和lib目录以及$CATALINA_HOME/lib目录)仅对Web应用程序可见,对Tomcat不可见WebApp($WEBAPP/Web-INF/*仅对该WEB应用可见classes/*.class lib/*.jar)<br /><br />加载类和资源的顺序为：<br />1、/Web-INF/classes<br /><br />2、/Web-INF/lib/*.jar<br /><br />3、Bootstrap<br /><br />4、System<br /><br />5、$CATALINA_HOME/common/classes<br />6、$CATALINA_HOME/common/endores/*.jar<br /><br />7、$CATALINA_HOME/common/lib/*.jar<br /><br />8、$CATALINA_HOME/shared/classes<br />9、$CATALINA_HOME/shared/lib/*.jar<br /><br /> <br /><br />四、server.xml配置简介：<br /><br />下面讲述这个文件中的基本配置信息，更具体的配置信息请参考tomcat的文档：<br />    server:<br />          1、port 指定一个端口，这个端口负责监听关闭tomcat的请求<br />          2、shutdown 指定向端口发送的命令字符串<br />    service:<br />          1、name 指定service的名字<br />    Connector (表示客户端和service之间的连接)：<br />          1、port 指定服务器端要创建的端口号，并在这个断口监听来自客户端的请求<br />          2、minProcessors 服务器启动时创建的处理请求的线程数<br />          3、maxProcessors 最大可以创建的处理请求的线程数<br />          4、enableLookups 如果为true，则可以通过调用request.getRemoteHost()进行DNS查<br /><br />询来得到远程客户端的实际主机名，若为false则不进行DNS查询，而是返回其ip<br /><br />地址<br />          5、redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的<br /><br />端口号<br />          6、acceptCount 指定当所有可以使用的处理请求的线程数都被使用时，可以放到处理<br /><br />队列中的请求数，超过这个数的请求将不予处理<br />          7、connectionTimeout 指定超时的时间数(以毫秒为单位)<br />    Engine (表示指定service中的请求处理机，接收和处理来自Connector的请求)：<br />          1、defaultHost 指定缺省的处理请求的主机名，它至少与其中的一个host元素的name<br /><br />属性值是一样的<br />    Context (表示一个web应用程序)：<br />          1、docBase 应用程序的路径或者是WAR文件存放的路径<br />          2、path 表示此web应用程序的url的前缀，这样请求的url为<br /><br /><a href="http://localhost:8080/path/" target="_blank">http://localhost:8080/path/</a>****<br />          3、reloadable 这个属性非常重要，如果为true，则tomcat会自动检测应用程序的<br /><br />/WEB-INF/lib 和/WEB-INF/classes目录的变化，自动装载新的应用程序，我们可<br /><br />以在不重起tomcat的情况下改变应用程序<br />    host (表示一个虚拟主机)：<br />          1、name 指定主机名<br />          2、appBase 应用程序基本目录，即存放应用程序的目录<br />          3、unpackWARs 如果为true，则tomcat会自动将WAR文件解压，否则不解压，直接<br /><br />从WAR文件中运行应用程序<br />    Logger (表示日志，调试和错误信息)：<br />          1、className 指定logger使用的类名，此类必须实现org.apache.catalina.Logger 接口<br />          2、prefix 指定log文件的前缀<br />          3、suffix 指定log文件的后缀<br />          4、timestamp 如果为true，则log文件名中要加入时间，如下<br /><br />例:localhost_log.2001-10-04.txt<br />   Realm (表示存放用户名，密码及role的数据库)：<br />          1、className 指定Realm使用的类名，此类必须实现org.apache.catalina.Realm接口<br />   Valve (功能与Logger差不多，其prefix和suffix属性解释和Logger 中的一样)：<br />          1、className 指定Valve使用的类名，如用org.apache.catalina.valves.AccessLogValve<br /><br />类可以记录应用程序的访问信息<br />    directory（指定log文件存放的位置）：<br />    1、pattern 有两个值，common方式记录远程主机名或ip地址，用户名，日期，第一行<br /><br />请求的字符串，HTTP响应代码，发送的字节数。combined方式比common方式记<br /><br />录的值更多<br /><br /> <br /><br />五、web.xml配置简介：<br /><br />1、默认(欢迎)文件的设置<br /><br /> 在tomcat4\conf\web.xml中，&lt;welcome-file-list&gt;与IIS中的默认文件意思相同。<br /><br /> &lt;welcome-file-list&gt;<br /><br /> &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;<br /><br /> &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;<br /><br /> &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;<br /><br /> &lt;/welcome-file-list&gt;<br /><br /> <br /><br />2、报错文件的设置<br /><br />&lt;error-page&gt;<br /><br />&lt;error-code&gt;404&lt;/error-code&gt;<br /><br />&lt;location&gt;/notFileFound.jsp&lt;/location&gt;<br /><br />&lt;/error-page&gt;<br /><br />&lt;error-page&gt;<br /><br />&lt;exception-type&gt;java.lang.NullPointerException&lt;/exception-type&gt;<br /><br />&lt;location&gt;/null.jsp&lt;/location&gt;<br /><br />&lt;/error-page&gt;<br /><br />如果某文件资源没有找到，服务器要报404错误，按上述配置则会调用\webapps\ROOT\notFileFound.jsp。<br /><br />如果执行的某个JSP文件产生NullPointException ，则会调用\webapps\ROOT\null.jsp<br /><br /> <br /><br />3、会话超时的设置<br /><br />设置session 的过期时间，单位是分钟；当设置为-1的时候是不过期的设置；但是要注意服务器的效率。<br /><br />&lt;session-config&gt;<br /><br />&lt;session-timeout&gt;30&lt;/session-timeout&gt;<br /><br />&lt;/session-config&gt;<br /><br /> <br /><br />4、过滤器的设置<br /><br />&lt;filter&gt;<br /><br />&lt;filter-name&gt;FilterSource&lt;/filter-name&gt;<br /><br />&lt;filter-class&gt;project4. FilterSource &lt;/filter-class&gt;<br /><br />&lt;/filter&gt;<br /><br />&lt;filter-mapping&gt;<br /><br />&lt;filter-name&gt;FilterSource&lt;/filter-name&gt;<br /><br />&lt;url-pattern&gt;/WwwServlet&lt;/url-pattern&gt;<br /><br />(&lt;url-pattern&gt;/haha/*&lt;/url-pattern&gt;)<br /><br />&lt;/filter-mapping&gt;<br /><br /> <br /><br />过滤：<br /><br />1) 身份验证的过滤Authentication Filters<br /><br />2) 日志和审核的过滤Logging and Auditing Filters<br /><br />3) 图片转化的过滤Image conversion Filters<br /><br />4) 数据压缩的过滤Data compression Filters<br /><br />5) 加密过滤Encryption Filters<br /><br />6) Tokenizing Filters<br /><br />7) 资源访问事件触发的过滤Filters that trigger resource access events XSL/T 过滤XSL/T filters<br /><br />9) 内容类型的过滤Mime-type chain Filter 注意监听器的顺序，如：先安全过滤，然后资源，<br /><br />然后内容类型等，这个顺序可以自己定。<br /><br /> <br /><br />六、管理<br />    1、用户配置<br />      在进行具体Tomcat管理之前，先给tomcat添加一个用户，使这个用户有权限来进行管理。<br />      打开conf目录下的tomcat-users.xml文件，在相应的位置添加下面一行：<br />    &lt;user name="user" password="user" roles="standard,manager"/&gt;<br />    然后重起tomcat，在浏览器中输入<a href="http://localhost:8080/manager/" target="_blank">http://localhost:8080/manager/</a>，会弹出对话框，输入上面的用户<br /><br />名和密码即可。<br /><br />    2、应用程序列表<br />      在浏览器中输入<a href="http://localhost:8080/manager/list" target="_blank">http://localhost:8080/manager/list</a>，浏览器将会显示如下的信息：<br />    OK - Listed applications for virtual host localhost<br />    /ex:running:1<br />    /examples:running:1<br />    /webdav:running:0<br />    /tomcat-docs:running:0<br />    /manager:running:0<br />    /:running:0<br />     上面显示的信息分别为：应用程序的路径、当前状态、连接这个程序的session数<br /><br />   3、重新装载应用程序<br />      在浏览器中输入 <a href="http://localhost:8080/manager/reload?path=/examples" target="_blank">http://localhost:8080/manager/reload?path=/examples</a>，浏览器显示如下：<br />    OK - Reloaded application at context path /examples    <br /><br />这表示example应用程序装载成功，如果我们将server.xml的Context元素的reloadable属性设为true，则没必要利用这种方式重新装载应用程序，因为tomcat会自动装载。<br /><br /> <br /><br />4、显示session信息<br />    在浏览器中输入<a href="http://localhost:8080/manager/sessions?path=/examples" target="_blank">http://localhost:8080/manager/sessions?path=/examples</a>，浏览器显示如下：<br />    OK - Session information for application at context path /examples Default maximum session inactive<br /><br />interval 30 minutes<br /><br />5、启动和关闭应用程序<br />   在浏览器中输入<a href="http://localhost:8080/manager/start?path=/examples" target="_blank">http://localhost:8080/manager/start?path=/examples</a>和<br /><br /><a href="http://localhost:8080/manager/stop?path=/examples" target="_blank">http://localhost:8080/manager/stop?path=/examples</a>分别启动和关闭examples应用程序。 </p>
						<p>
						</p>
						<br />
						<br />Tags：<a href="http://www.mikecat.net/BloglistTag.asp?tags=tomcat">tomcat</a></span>
		</div>
<img src ="http://www.blogjava.net/RomulusW/aggbug/79376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-11-06 13:10 <a href="http://www.blogjava.net/RomulusW/archive/2006/11/06/79376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用端口</title><link>http://www.blogjava.net/RomulusW/archive/2006/10/20/76384.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Fri, 20 Oct 2006 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/10/20/76384.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/76384.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/10/20/76384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/76384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/76384.html</trackback:ping><description><![CDATA[
		<table class="tf" width="98%" align="center" border="0">
				<tbody>
						<tr>
								<td class="bw" width="100%">
										<font class="htd" id="font_word" style="FONT-SIZE: 14px; FONT-FAMILY: 宋体, Verdana, Arial, Helvetica, sans-serif">
												<br />1　tcpmux　TCP Port Service Multiplexer 传输控制协议端口服务多路开关选择器 <br />2　compressnet　Management Utility　　　　 compressnet 管理实用程序 <br />3　compressnet　Compression Process　　　　压缩进程 <br />5　rje　Remote Job Entry　　　　　　　　　 远程作业登录 <br />7　echo　Echo　　　　　　　　　　　　　　　回显 <br />9　discard　Discard　　　　　　　　　　　　丢弃 <br />11　systat　Active Users　　　　　　　　　 在线用户 <br />13　daytime　Daytime　　　　　　　　　　　 时间 <br />17　qotd　Quote of the Day　　　　　　　　 每日引用 <br />18　msp　Message Send Protocol　　　　　　 消息发送协议 <br />19　chargen　Character Generator　　　　　 字符发生器 <br />20　ftp-data　File Transfer [Default Data]　文件传输协议(默认数据口)　 <br />21　ftp　File Transfer [Control]　　　　　　文件传输协议(控制) <br />22　ssh　SSH Remote Login Protocol　　　　 SSH远程登录协议 <br />23　telnet　Telnet　　　　　　　　　　　　 终端仿真协议 <br />24　?　any private mail system　　　　　　 预留给个人用邮件系统 <br />25　smtp　Simple Mail Transfer　　　　　　 简单邮件发送协议 <br />27　nsw-fe　NSW User System FE　　　　　　 NSW 用户系统现场工程师 <br />29　msg-icp　MSG ICP　　　　　　　　　　　 MSG　ICP <br />31　msg-auth　MSG Authentication　　　　　 MSG验证 <br />33　dsp　Display Support Protocol　　　　　显示支持协议 <br />35　?　any private printer server　　　　　预留给个人打印机服务 <br />37　time　Time　　　　　　　　　　　　　　 时间 <br />38　rap　Route Access Protocol　　　　　　 路由访问协议 <br />39　rlp　Resource Location Protocol　　　　资源定位协议 <br />41　graphics　Graphics　　　　　　　　　　 图形 <br />42　nameserver　WINS Host Name Server　　　WINS 主机名服务 <br />43　nicname　Who Is　　　　　　　　　　　　"绰号" who is服务 <br />44　mpm-flags　MPM FLAGS Protocol　　　　　MPM(消息处理模块)标志协议 <br />45　mpm　Message Processing Module [recv]　消息处理模块　 <br />46　mpm-snd　MPM [default send]　　　　　　消息处理模块(默认发送口) <br />47　ni-ftp　NI FTP　　　　　　　　　　　　 NI FTP <br />48　auditd　Digital Audit Daemon　　　　　 数码音频后台服务　 <br />49　tacacs　Login Host Protocol (TACACS)　 TACACS登录主机协议 <br />50　re-mail-ck　Remote Mail Checking Protocol　远程邮件检查协议 <br />51　la-maint　IMP Logical Address Maintenance　IMP(接口信息处理机)逻辑地址维护 <br />52　xns-time　XNS Time Protocol　　　　　　施乐网络服务系统时间协议　　 <br />53　domain　Domain Name Server　　　　　　 域名服务器 <br />54　xns-ch　XNS Clearinghouse　　　　　　　施乐网络服务系统票据交换 <br />55　isi-gl　ISI Graphics Language　　　　　ISI图形语言 <br />56　xns-auth　XNS Authentication　　　　　 施乐网络服务系统验证 <br />57　?　any private terminal access　　　　 预留个人用终端访问 <br />58　xns-mail　XNS Mail　　　　　　　　　　 施乐网络服务系统邮件 <br />59　?　any private file service　　　　　　预留个人文件服务 <br />60　?　Unassigned　　　　　　　　　　　　　未定义 <br />61　ni-mail　NI MAIL　　　　　　　　　　　 NI邮件? <br />62　acas　ACA Services　　　　　　　　　　 异步通讯适配器服务 <br />63　whois+ whois+　　　　　　　　　　　　　 WHOIS+ <br />64　covia　Communications Integrator (CI)　通讯接口　 <br />65　tacacs-ds　TACACS-Database Service　　 TACACS数据库服务 <br />66　sql*net　Oracle SQL*NET　　　　　　　　Oracle SQL*NET <br />67　bootps　Bootstrap Protocol Server　　　引导程序协议服务端 <br />68　bootpc　Bootstrap Protocol Client　　　引导程序协议客户端 <br />69　tftp　Trivial File Transfer　　　　　　小型文件传输协议 <br />70　gopher　Gopher　　　　　　　　　　　　 信息检索协议 <br />71　netrjs-1　Remote Job Service　　　　　 远程作业服务 <br />72　netrjs-2　Remote Job Service　　　　　 远程作业服务 <br />73　netrjs-3　Remote Job Service　　　　　 远程作业服务 <br />74　netrjs-4　Remote Job Service　　　　　 远程作业服务 <br />75　?　any private dial out service　　　　预留给个人拨出服务 <br />76　deos　Distributed External Object Store 分布式外部对象存储　 <br />77　?　any private RJE service　　　　　　预留给个人远程作业输入服务 <br />78　vettcp　vettcp　　　　　　　　　　　　 修正TCP? <br />79　finger　Finger　　　　　　　　　　　　 FINGER(查询远程主机在线用户等信息) <br />80　http　World Wide Web HTTP　　　　　　　全球信息网超文本传输协议 <br />81　hosts2-ns　HOSTS2 Name Server　　　　　HOST2名称服务 <br />82　xfer　XFER Utility　　　　　　　　　　 传输实用程序 <br />83　mit-ml-dev　MIT ML Device　　　　　　　模块化智能终端ML设备 <br />84　ctf　Common Trace Facility　　　　　　 公用追踪设备 <br />85　mit-ml-dev　MIT ML Device　　　　　　　模块化智能终端ML设备 <br />86　mfcobol　Micro Focus Cobol　　　　　　 Micro Focus Cobol编程语言 <br />87　?　any private terminal link　　　　　 预留给个人终端连接 <br />88　kerberos　Kerberos　　　　　　　　　　 Kerberros安全认证系统 <br />89　su-mit-tg　SU/MIT Telnet Gateway　　　 SU/MIT终端仿真网关 <br />90　dnsix　DNSIX Securit Attribute Token Map　DNSIX 安全属性标记图　 <br />91　mit-dov　MIT Dover Spooler　　　　　　 MIT Dover假脱机 <br />92　npp　Network Printing Protocol　　　　 网络打印协议 <br />93　dcp　Device Control Protocol　　　　　 设备控制协议 <br />94　objcall　Tivoli Object Dispatcher　　　Tivoli对象调度 <br />95　supdup　SUPDUP　　　　　　　　　　　　 <br />96　dixie　DIXIE Protocol Specification　　DIXIE协议规范 <br />97　swift-rvf　Swift Remote Virtural File Protocol　快速远程虚拟文件协议　 <br />98　tacnews　TAC News　　　　　　　　　　　TAC(东京大学自动计算机?)新闻协议 <br />99　metagram　Metagram Relay　　　　　　　 <br />101/tcp hostname NIC Host Name Server <br />102/tcp iso-tsap ISO-TSAP Class 0 <br />103/tcp gppitnp Genesis Point-to-Point Trans Net <br />104/tcp acr-nema ACR-NEMA Digital Imag. &amp; Comm. 300 <br />105/tcp cso CCSO name server protocol <br />105/tcp csnet-ns Mailbox Name Nameserver <br />106/tcp 3com-tsmux 3COM-TSMUX <br />107/tcp rtelnet Remote Telnet Service <br />108/tcp snagas SNA Gateway Access Server <br />109/tcp pop2 Post Office Protocol - Version 2 <br />110/tcp pop3 Post Office Protocol - Version 3 <br />111/tcp sunrpc SUN Remote Procedure Call <br />112/tcp mcidas McIDAS Data Transmission Protocol <br />113/tcp ident <br />114/tcp audionews Audio News Multicast <br />115/tcp sftp Simple File Transfer Protocol <br />116/tcp ansanotify ANSA REX Notify <br />117/tcp uucp-path UUCP Path Service <br />118/tcp sqlserv SQL Services <br />119/tcp nntp Network News Transfer Protocol <br />120/tcp cfdptkt CFDPTKT <br />121/tcp erpc Encore Expedited Remote Pro.Call <br />122/tcp smakynet SMAKYNET <br />123/tcp ntp Network Time Protocol <br />124/tcp ansatrader ANSA REX Trader <br />125/tcp locus-map Locus PC-Interface Net Map Ser <br />126/tcp unitary Unisys Unitary Login <br />127/tcp locus-con Locus PC-Interface Conn Server <br />128/tcp gss-xlicen GSS X License Verification <br />129/tcp pwdgen Password Generator Protocol <br />130/tcp cisco-fna cisco FNATIVE <br />131/tcp cisco-tna cisco TNATIVE <br />132/tcp cisco-sys cisco SYSMAINT <br />133/tcp statsrv Statistics Service <br />134/tcp ingres-net INGRES-NET Service <br />135/tcp epmap DCE endpoint resolution <br />136/tcp profile PROFILE Naming System <br />137/tcp netbios-ns NETBIOS Name Service <br />138/tcp netbios-dgm NETBIOS Datagram Service <br />139/tcp netbios-ssn NETBIOS Session Service <br />140/tcp emfis-data EMFIS Data Service <br />141/tcp emfis-cntl EMFIS Control Service <br />142/tcp bl-idm Britton-Lee IDM <br />143/tcp imap Internet Message Access Protocol <br />144/tcp uma Universal Management Architecture <br />145/tcp uaac UAAC Protocol <br />146/tcp iso-tp0 ISO-IP0 <br />147/tcp iso-ip ISO-IP <br />148/tcp jargon Jargon <br />149/tcp aed-512 AED 512 Emulation Service <br />150/tcp sql-net SQL-NET <br />151/tcp hems HEMS <br />152/tcp bftp Background File Transfer Program <br />153/tcp sgmp SGMP <br />154/tcp netsc-prod NETSC <br />155/tcp netsc-dev NETSC <br />156/tcp sqlsrv SQL Service <br />157/tcp knet-cmp KNET/VM Command/Message Protocol <br />158/tcp pcmail-srv PCMail Server <br />159/tcp nss-routing NSS-Routing <br />160/tcp sgmp-traps SGMP-TRAPS <br />161/tcp snmp SNMP <br />162/tcp snmptrap SNMPTRAP <br />163/tcp cmip-man CMIP/TCP Manager <br />164/tcp cmip-agent CMIP/TCP Agent <br />165/tcp xns-courier Xerox <br />166/tcp s-net Sirius Systems <br />167/tcp namp NAMP <br />168/tcp rsvd RSVD <br />169/tcp send SEND <br />170/tcp print-srv Network PostScript <br />171/tcp multiplex Network Innovations Multiplex <br />172/tcp cl/1 Network Innovations CL/1 <br />173/tcp xyplex-mux Xyplex <br />174/tcp mailq MAILQ <br />175/tcp vmnet VMNET <br />176/tcp genrad-mux GENRAD-MUX <br />177/tcp xdmcp X Display Manager Control Protocol <br />178/tcp nextstep NextStep Window Server <br />179/tcp bgp Border Gateway Protocol <br />180/tcp ris Intergraph <br />181/tcp unify Unify <br />182/tcp audit Unisys Audit SITP <br />183/tcp ocbinder OCBinder <br />184/tcp ocserver OCServer <br />185/tcp remote-kis Remote-KIS <br />186/tcp kis KIS Protocol <br />187/tcp aci Application Communication Interface <br />188/tcp mumps Plus Five's MUMPS <br />189/tcp qft Queued File Transport <br />190/tcp gacp Gateway Access Control Protocol <br />191/tcp prospero Prospero Directory Service <br />192/tcp osu-nms OSU Network Monitoring System <br />193/tcp srmp Spider Remote Monitoring Protocol <br />194/tcp irc Internet Relay Chat Protocol <br />195/tcp dn6-nlm-aud DNSIX Network Level Module Audit <br />196/tcp dn6-smm-red DNSIX Session Mgt Module Audit Redir <br />197/tcp dls Directory Location Service <br />198/tcp dls-mon Directory Location Service Monitor <br />199/tcp smux SMUX <br />200/tcp src IBM System Resource Controller <br />201/tcp at-rtmp AppleTalk Routing Maintenance <br />202/tcp at-nbp AppleTalk Name Binding <br />203/tcp at-3 AppleTalk Unused <br />204/tcp at-echo AppleTalk Echo <br />205/tcp at-5 AppleTalk Unused <br />206/tcp at-zis AppleTalk Zone Information <br />207/tcp at-7 AppleTalk Unused <br />208/tcp at-8 AppleTalk Unused <br />209/tcp qmtp The Quick Mail Transfer Protocol <br />210/tcp z39.50 ANSI Z39.50 <br />211/tcp 914c/g Texas Instruments 914C/G Terminal <br />212/tcp anet ATEXSSTR <br />214/tcp vmpwscs VM PWSCS <br />215/tcp softpc Insignia Solutions <br />216/tcp CAIlic Computer Associates Int'l License Server <br />217/tcp dbase dBASE Unix <br />218/tcp mpp Netix Message Posting Protocol <br />219/tcp uarps Unisys ARPs <br />220/tcp imap3 Interactive Mail Access Protocol v3 <br />221/tcp fln-spx Berkeley rlogind with SPX auth <br />222/tcp rsh-spx Berkeley rshd with SPX auth <br />223/tcp cdc Certificate Distribution Center <br />242/tcp direct Direct <br />243/tcp sur-meas Survey Measurement <br />244/tcp dayna Dayna <br />245/tcp link LINK <br />246/tcp dsp3270 Display Systems Protocol <br />247/tcp subntbcst_tftp SUBNTBCST_TFTP <br />248/tcp bhfhs bhfhs <br />256/tcp rap RAP <br />257/tcp set Secure Electronic Transaction <br />258/tcp yak-chat Yak Winsock Personal Chat <br />259/tcp esro-gen Efficient Short Remote Operations <br />260/tcp openport Openport <br />263/tcp hdap HDAP <br />264/tcp bgmp BGMP <br />280/tcp http-mgmt http-mgmt <br />309/tcp entrusttime EntrustTime <br />310/tcp bhmds bhmds <br />312/tcp vslmp VSLMP <br />315/tcp dpsi DPSI <br />316/tcp decauth decAuth <br />317/tcp zannet Zannet <br />321/tcp pip PIP <br />344/tcp pdap Prospero Data Access Protocol <br />345/tcp pawserv Perf Analysis Workbench <br />346/tcp zserv Zebra server <br />347/tcp fatserv Fatmen Server <br />348/tcp csi-sgwp Cabletron Management Protocol <br />349/tcp mftp mftp <br />351/tcp matip-type-b MATIP Type B <br />351/tcp bhoetty bhoetty (added 5/21/97) <br />353/tcp ndsauth NDSAUTH <br />354/tcp bh611 bh611 <br />357/tcp bhevent bhevent <br />362/tcp srssend SRS Send <br />365/tcp dtk DTK <br />366/tcp odmr ODMR <br />368/tcp qbikgdp QbikGDP <br />371/tcp clearcase Clearcase <br />372/tcp ulistproc ListProcessor <br />373/tcp legent-1 Legent Corporation <br />374/tcp legent-2 
<p></p></font>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/RomulusW/aggbug/76384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-10-20 14:58 <a href="http://www.blogjava.net/RomulusW/archive/2006/10/20/76384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle数据库的部分指令</title><link>http://www.blogjava.net/RomulusW/archive/2006/10/20/76380.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Fri, 20 Oct 2006 06:37:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/10/20/76380.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/76380.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/10/20/76380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/76380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/76380.html</trackback:ping><description><![CDATA[
		<p>导入命令：<br />  将D:\daochu.dmp 中的数据导入 TEST数据库中<br />    imp <a href="mailto:system/triman@CTL">system/triman@CTL</a> file=file=d:\daochu.dmp ignore=y<br />  将d:\daochu.dmp中的表table1 导入<br />    imp <a href="mailto:system/triman@CTL">system/triman@CTL</a>  file=d:\daochu.dmp  tables=(table1) <br />导出命令：<br />  将数据库CTL完全导出,用户名system 密码triman 导出到D:\daochu.dmp中<br />    exp <a href="mailto:system/triman@CTL">system/triman@CTL</a> file=d:\daochu.dmp full=y<br />  将数据库中system用户与sys用户的表导出<br />    exp <a href="mailto:system/triman@CTL">system/triman@CTL</a> file=d:\daochu.dmp owner=(system,sys)<br />  将数据库中的表GIS_IDD_INFO、GIS_IDD_AID导出<br />    exp <a href="mailto:system/triman@CTL">system/triman@CTL</a> file=d:\data\gisidd.dmp tables=(GIS_IDD_INFO,GIS_IDD_AID)<br />  将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />    exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"        <br />    tnsping TEST<br />    <br />1）“完全”增量导出（Complete） </p>
		<p>    即备份整个数据库，比如： </p>
		<p>        ＄exp system/manager inctype=complete file=990702.dmp </p>
		<p>     （2）“增量型”增量导出 </p>
		<p>        备份上一次备份后改变的数据。比如： </p>
		<p>        ＄exp system/manager inctype=incremental file=990702.dmp </p>
		<p>     （3）“累计型”增量导出（Cumulative） </p>
		<p>        累计型导出方式只是导出自上次“完全” 导出之后数据库中变化了的信息。比如： </p>
		<p>        ＄exp system/manager inctype=cumulative file=990702.dmp <br /><br />数据导出：<br /> 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中<br />   exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp full=y<br /> 2 将数据库中system用户与sys用户的表导出<br />   exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp owner=(system,sys)<br /> 3 将数据库中的表inner_notify、notify_staff_relat导出<br />    exp <a href="mailto:aichannel/aichannel@TESTDB2">aichannel/aichannel@TESTDB2</a> file= d:\data\newsmgnt.dmp tables=(inner_notify,notify_staff_relat) <br /> 4 将数据库中的表table1中的字段filed1以"00"打头的数据导出<br />   exp <a href="mailto:system/manager@TEST">system/manager@TEST</a> file=d:\daochu.dmp tables=(table1) query=\" where filed1 like '00%'\"<br />数据的导入<br /> 1 将D:\daochu.dmp 中的数据导入 TEST数据库中。<br />   imp <a href="mailto:system/manager@TEST">system/manager@TEST</a>  file=d:\daochu.dmp<br />   imp <a href="mailto:aichannel/aichannel@HUST">aichannel/aichannel@HUST</a> full=y  file=file= d:\data\newsmgnt.dmp ignore=y <br />   上面可能有点问题，因为有的表已经存在，然后它就报错，对该表就不进行导入。<br />   在后面加上 ignore=y 就可以了。<br /> 2 将d:\daochu.dmp中的表table1 导入<br /> imp <a href="mailto:system/manager@TEST">system/manager@TEST</a>  file=d:\daochu.dmp  tables=(table1) <br /> <br /> 基本上上面的导入导出够用了。不少情况要先是将表彻底删除，然后导入。<br /> <br /> 注意：<br /> 操作者要有足够的权限，权限不够它会提示。<br /> 数据库时可以连上的。可以用tnsping TEST 来获得数据库TEST能否连上。</p>
		<p>参数说明 <br />1. ignore参数 <br />Oracle在恢复数据的过程中，当恢复某个表时，该表已经存在，就要根据ignore参数的设置来决定如何操作。 <br />若ignore=y，Oracle不执行CREATE TABLE语句，直接将数据插入到表中，如果插入的记录违背了约束条件，比如主键约束，则出错的记录不会插入，但合法的记录会添加到表中。 <br />若ignore=n，Oracle不执行CREATE TABLE语句，同时也不会将数据插入到表中，而是忽略该表的错误，继续恢复下一个表。 <br />2. indexes参数 <br />在恢复数据的过程中，若indexes=n，则表上的索引不会被恢复，但是主键对应的唯一索引将无条件恢复，这是为了保证数据的完整性。</p>
		<p>字符集转换 <br />对于单字节字符集（例如US7ASCII），恢复时，数据库自动转换为该会话的字符集（NLS_LANG参数）；对于多字节字符集（例如ZHS16CGB231280），恢复时，应尽量使字符集相同（避免转换），如果要转换，目标数据库的字符集应是输出数 <br />据库字符集的超集。<br /><br />附录一：<br /> 给用户增加导入数据权限的操作<br /> 第一,启动sql*puls<br /> 第二，以system/manager登陆<br /> 第三，create user 用户名 IDENTIFIED BY 密码 （如果已经创建过用户，这步可以省略）<br /> 第四，GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,<br />   DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,<br />      DBA,CONNECT,RESOURCE,CREATE SESSION  TO 用户名字 <br /> 第五, 运行-cmd-进入dmp文件所在的目录, <br />      imp userid=system/manager full=y file=*.dmp<br />      或者 imp userid=system/manager full=y file=filename.dmp</p>
		<p> 执行示例:<br /> F:\Work\Oracle_Data\backup&gt;imp userid=test/test full=y file=inner_notify.dmp</p>
		<p>屏幕显示<br />Import: Release 8.1.7.0.0 - Production on 星期四 2月 16 16:50:05 2006<br />(c) Copyright 2000 Oracle Corporation.  All rights reserved.</p>
		<p>连接到: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production<br />With the Partitioning option<br />JServer Release 8.1.7.0.0 - Production</p>
		<p>经由常规路径导出由EXPORT:V08.01.07创建的文件<br />已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入<br />导出服务器使用UTF8 NCHAR 字符集 (可能的ncharset转换)<br />. 正在将AICHANNEL的对象导入到 AICHANNEL<br />. . 正在导入表                  "INNER_NOTIFY"          4行被导入<br />准备启用约束条件...<br />成功终止导入，但出现警告。</p>
		<p> </p>
		<p>附录二：<br /> Oracle 不允许直接改变表的拥有者, 利用Export/Import可以达到这一目的.<br />  先建立import9.par,<br />  然后，使用时命令如下：imp parfile=/filepath/import9.par<br />  例 import9.par 内容如下：<br />        FROMUSER=TGPMS        <br />        TOUSER=TGPMS2     （注：把表的拥有者由FROMUSER改为TOUSER，FROMUSER和TOUSER的用户可以不同）           <br />        ROWS=Y<br />        INDEXES=Y<br />        GRANTS=Y<br />        CONSTRAINTS=Y<br />        BUFFER=409600<br />        file==/backup/ctgpc_20030623.dmp<br />        log==/backup/import_20030623.log<br /></p>
<img src ="http://www.blogjava.net/RomulusW/aggbug/76380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-10-20 14:37 <a href="http://www.blogjava.net/RomulusW/archive/2006/10/20/76380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对算法的描述</title><link>http://www.blogjava.net/RomulusW/archive/2006/10/19/76140.html</link><dc:creator>W.R</dc:creator><author>W.R</author><pubDate>Thu, 19 Oct 2006 05:02:00 GMT</pubDate><guid>http://www.blogjava.net/RomulusW/archive/2006/10/19/76140.html</guid><wfw:comment>http://www.blogjava.net/RomulusW/comments/76140.html</wfw:comment><comments>http://www.blogjava.net/RomulusW/archive/2006/10/19/76140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/RomulusW/comments/commentRss/76140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/RomulusW/services/trackbacks/76140.html</trackback:ping><description><![CDATA[
		<p>算法的描述有很多种，常用的有：</p>
		<p>自然语言(描述不够严格，限于简单的问题)</p>
		<p>流程图：(同一问题的流程图不唯一)</p>
		<p>N-S图(结构清晰，但难于修改)</p>
		<p>PAD图(结构清晰，唯一性好)</p>
		<p>伪代码(灵活，但要)<br /></p>
<img src ="http://www.blogjava.net/RomulusW/aggbug/76140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/RomulusW/" target="_blank">W.R</a> 2006-10-19 13:02 <a href="http://www.blogjava.net/RomulusW/archive/2006/10/19/76140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>