﻿<?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-cyantide-随笔分类-其它</title><link>http://www.blogjava.net/cyantide/category/36409.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 13 Aug 2010 16:33:22 GMT</lastBuildDate><pubDate>Fri, 13 Aug 2010 16:33:22 GMT</pubDate><ttl>60</ttl><item><title>linux php 编译安装 configure参数</title><link>http://www.blogjava.net/cyantide/archive/2010/03/11/315189.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Thu, 11 Mar 2010 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2010/03/11/315189.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/315189.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2010/03/11/315189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/315189.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/315189.html</trackback:ping><description><![CDATA[configure:<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">.</span><span style="color: #000000;">/</span><span style="color: #000000;">configure&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">prefix</span><span style="color: #000000;">=/</span><span style="color: #000000;">opt</span><span style="color: #000000;">/</span><span style="color: #000000;">php&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">apxs2</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">sbin</span><span style="color: #000000;">/</span><span style="color: #000000;">apxs&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">mysql</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">include</span><span style="color: #000000;">/</span><span style="color: #000000;">mysql&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">gd</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">jpeg</span><span style="color: #000000;">-</span><span style="color: #000000;">dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">png</span><span style="color: #000000;">-</span><span style="color: #000000;">dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">zlib</span><span style="color: #000000;">-</span><span style="color: #000000;">dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">with</span><span style="color: #000000;">-</span><span style="color: #000000;">freetype</span><span style="color: #000000;">-</span><span style="color: #000000;">dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">usr</span><span style="color: #000000;">/</span><span style="color: #000000;">lib</span></div>
<img src ="http://www.blogjava.net/cyantide/aggbug/315189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2010-03-11 16:45 <a href="http://www.blogjava.net/cyantide/archive/2010/03/11/315189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件 开发 万般变化</title><link>http://www.blogjava.net/cyantide/archive/2010/02/20/313457.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Sat, 20 Feb 2010 06:46:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2010/02/20/313457.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/313457.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2010/02/20/313457.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/313457.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/313457.html</trackback:ping><description><![CDATA[<p><img alt="" src="http://www.blogjava.net/images/blogjava_net/cyantide/123.jpg" border="0" /></p>
<img src ="http://www.blogjava.net/cyantide/aggbug/313457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2010-02-20 14:46 <a href="http://www.blogjava.net/cyantide/archive/2010/02/20/313457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache2 php5 配置</title><link>http://www.blogjava.net/cyantide/archive/2009/12/10/305463.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Thu, 10 Dec 2009 10:08:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2009/12/10/305463.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/305463.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2009/12/10/305463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/305463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/305463.html</trackback:ping><description><![CDATA[httpd.conf 文件：<br />
末尾加<br />
LoadModule php5_module "d:/php/php5apache2_2.dll"<br />
AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php .htm<br />
# ScriptAlias /php/ "d:/php/"<br />
# AddType application/x-httpd-php .php<br />
# Action application/x-httpd-php "/php/php-cgi.exe"<br />
<br />
&nbsp;DirectoryIndex index.html 后添加 index.php<br />
<br />
php inf<br />
<meta content="Word.Document" name="ProgId" />
<meta content="Microsoft Word 12" name="Generator" />
<meta content="Microsoft Word 12" name="Originator" />
<link href="file:///D:%5CDOCUME%7E1%5CCHENHA%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" rel="File-List" />
<link href="file:///D:%5CDOCUME%7E1%5CCHENHA%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" rel="themeData" />
<link href="file:///D:%5CDOCUME%7E1%5CCHENHA%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" rel="colorSchemeMapping" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math" />
<m:brkBin m:val="before" />
<m:brkBinSub m:val="--" />
<m:smallFrac m:val="off" />
<m:dispDef/>
<m:lMargin m:val="0" />
<m:rMargin m:val="0" />
<m:defJc m:val="centerGroup" />
<m:wrapIndent m:val="1440" />
<m:intLim m:val="subSup" />
<m:naryLim m:val="undOvr" />
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267">
<w:LsdException locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal" />
<w:LsdException locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 2" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 3" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 4" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 5" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 6" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 7" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 8" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 9" />
<w:LsdException locked="false" priority="39" name="toc 1" />
<w:LsdException locked="false" priority="39" name="toc 2" />
<w:LsdException locked="false" priority="39" name="toc 3" />
<w:LsdException locked="false" priority="39" name="toc 4" />
<w:LsdException locked="false" priority="39" name="toc 5" />
<w:LsdException locked="false" priority="39" name="toc 6" />
<w:LsdException locked="false" priority="39" name="toc 7" />
<w:LsdException locked="false" priority="39" name="toc 8" />
<w:LsdException locked="false" priority="39" name="toc 9" />
<w:LsdException locked="false" priority="35" qformat="true" name="caption" />
<w:LsdException locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title" />
<w:LsdException locked="false" priority="1" name="Default Paragraph Font" />
<w:LsdException locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle" />
<w:LsdException locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong" />
<w:LsdException locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis" />
<w:LsdException locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid" />
<w:LsdException locked="false" unhidewhenused="false" name="Placeholder Text" />
<w:LsdException locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1" />
<w:LsdException locked="false" unhidewhenused="false" name="Revision" />
<w:LsdException locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph" />
<w:LsdException locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote" />
<w:LsdException locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6" />
<w:LsdException locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis" />
<w:LsdException locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis" />
<w:LsdException locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference" />
<w:LsdException locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference" />
<w:LsdException locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title" />
<w:LsdException locked="false" priority="37" name="Bibliography" />
<w:LsdException locked="false" priority="39" qformat="true" name="TOC Heading" />
</w:LatentStyles>
</xml><![endif]-->
<style>
<!-- /* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"Cambria Math";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:1;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:0 0 0 0 0 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-unhide:no;
mso-style-qformat:yes;
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman","serif";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
.MsoChpDefault
{mso-style-type:export-only;
mso-default-props:yes;
font-size:10.0pt;
mso-ansi-font-size:10.0pt;
mso-bidi-font-size:10.0pt;
mso-ascii-font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-hansi-font-family:"Times New Roman";
mso-font-kerning:0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:宋体;
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
</style>
<![endif]--><span lang="EN-US" style="font-size: 12pt; font-family: 宋体">1</span><span style="font-size: 12pt; font-family: 宋体">、将<span lang="EN-US">php.ini-recommended</span>文件重命名为<span lang="EN-US">php.ini</span>并将其剪到系统所在目录下<span lang="EN-US">(</span><span lang="EN-US">XP</span>的<span lang="EN-US">Windows</span>目录下<span lang="EN-US">),<br />
2</span>、将<span lang="EN-US">extension_dir </span>改为<span lang="EN-US">php/ext</span>所在目录，如<span lang="EN-US"> "d:\php\ext"</span>；<span lang="EN-US"><br />
3</span>、将<span lang="EN-US">doc_root </span>改为第一步中的同样目录，如<span lang="EN-US"> "E:\Program Files\Apache Software Foundation\Apache2.2\htdocs"</span>；<span lang="EN-US"><br />
4</span>、找到<span lang="EN-US"> ;session.save_path = "/tmp" ,</span>将<span lang="EN-US">';'</span>去掉<span lang="EN-US">,</span>设置你保存<span lang="EN-US">session</span>的目录，如<span lang="EN-US">session.save_path = "D:/php/session_temp"</span>；<span lang="EN-US"><br />
5</span>、然后把下面几句前面的分号去掉<span lang="EN-US">,</span>以更好支持<span lang="EN-US">Mysql and PHPmyadmin <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_mbstring.dll<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_gd2.dll<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extension=php_mysql.dll<br />
6、将相应的dll拷贝至window目录下<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></span><br />
<br />
<img src ="http://www.blogjava.net/cyantide/aggbug/305463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2009-12-10 18:08 <a href="http://www.blogjava.net/cyantide/archive/2009/12/10/305463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java面试题</title><link>http://www.blogjava.net/cyantide/archive/2009/01/13/251063.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Tue, 13 Jan 2009 01:41:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2009/01/13/251063.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/251063.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2009/01/13/251063.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/251063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/251063.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cce8cf">第一，谈谈final, finally, finalize的区别。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　final 用于声明属性，方法和类，分别表示属性不可变，方法不可覆盖，类不可继承。finally是异常处理语句结构的一部分，表示总是执行。finalize是 Object类的一个方法，在垃圾收集器执行的时候会调用被回收对象的此方法，可以覆盖此方法提供垃圾收集时的其他资源回收，例如关闭文件等。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否可以implements(实现)interface(接口)? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　可以继承其他类或完成其他接口，在swing编程中常用此方式。　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第三，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼统)。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　Static Nested Class是被声明为静态（static）的内部类，它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第四，&amp;和&amp;&amp;的区别。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　&amp;是位运算符，表示按位与运算，&amp;&amp;是逻辑运算符，表示逻辑与（and）.　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第五，HashMap和Hashtable的区别。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　HashMap是Hashtable的轻量级实现（非线程安全的实现），他们都完成了Map接口，主要区别在于HashMap允许空（null）键值（key）,由于非线程安全，效率上可能高于Hashtable.　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第六，Collection 和 Collections的区别。 </font></p>
<p><font style="background-color: #cce8cf">　　 </font></p>
<p><font style="background-color: #cce8cf">　Collection是集合类的上级接口，继承与他的接口主要有Set 和List.Collections是针对集合类的一个帮助类，他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第七，什么时候用assert。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　1.4新增关键字（语法），用于测试boolean表达式状态，可用于调试程序。使用方法 assert ，表示如果表达式为真（true）,则下面的语句执行，否则抛出AssertionError。另外的使用方式assert &lt; boolean表达式&gt;:，表示如果表达式为真，后面的表达式忽略，否则后面表达式的值用于AssertionError的构建参数。注意编译时要增加-source 1.4 参数，否则报错。]运行时要增加 &#8211;ea参数，否则assert行被忽略　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第八，GC是什么? 为什么要有GC? </font></p>
<p><font style="background-color: #cce8cf">　　 </font></p>
<p><font style="background-color: #cce8cf">　GC是垃圾收集的意思（Gabage Collection）,内存处理是编程人员容易出现问题的地方，忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃，Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的，Java语言没有提供释放已分配内存的显示操作方法。 　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第九，String s = new String("xyz");创建了几个String Object? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　两个　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　Math.round(11.5)==12Math.round(-11.5)==-11round方法返回与参数最接近的长整数，参数加1/2后求其floor.　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十一，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　short s1 = 1; s1 = s1 + 1; （s1+1运算结果是int型，需要强制转换类型）short s1 = 1; s1 += 1;（可以正确编译）　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十二，sleep() 和 wait() 有什么区别? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　sleep是线程类（Thread）的方法，导致此线程暂停执行指定时间，给执行机会给其他线程，但是监控状态依然保持，到时后会自动恢复。调用 sleep不会释放对象锁。wait是Object类的方法，对此对象调用wait方法导致本线程放弃对象锁，进入等待此对象的等待锁定池，只有针对此对象发出notify方法（或notifyAll）后本线程才进入对象锁定池准备获得对象锁进入运行状态。　　 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十三，Java有没有goto? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　没有　　很十三的问题，如果哪个面试的问到这个问题，我劝你还是别进这家公司。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十四，数组有没有length()这个方法? String有没有length()这个方法？ </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　数组没有length()这个方法，有length的属性。 </font></p>
<p><font style="background-color: #cce8cf">　String有有length()这个方法。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十五，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现， 重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被&#8220;屏蔽&#8221;了。如果在一个类中定义了多个同名的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 </font></p>
<p><font style="background-color: #cce8cf">第十六，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。 </font></p>
<p><font style="background-color: #cce8cf">equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的是当两个分离的对象的内容和类型相配的话，返回真值。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十七，给我一个你最常见到的runtime exception。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">参考如下： </font></p>
<p><font style="background-color: #cce8cf">ArithmeticException, </font></p>
<p><font style="background-color: #cce8cf">ArrayStoreException, </font></p>
<p><font style="background-color: #cce8cf">BufferOverflowException, </font></p>
<p><font style="background-color: #cce8cf">BufferUnderflowException, </font></p>
<p><font style="background-color: #cce8cf">CannotRedoException, </font></p>
<p><font style="background-color: #cce8cf">CannotUndoException, </font></p>
<p><font style="background-color: #cce8cf">ClassCastException, </font></p>
<p><font style="background-color: #cce8cf">CMMException, </font></p>
<p><font style="background-color: #cce8cf">ConcurrentModificationException, </font></p>
<p><font style="background-color: #cce8cf">DOMException, </font></p>
<p><font style="background-color: #cce8cf">EmptyStackException, </font></p>
<p><font style="background-color: #cce8cf">IllegalArgumentException, </font></p>
<p><font style="background-color: #cce8cf">IllegalMonitorStateException, </font></p>
<p><font style="background-color: #cce8cf">IllegalPathStateException, </font></p>
<p><font style="background-color: #cce8cf">IllegalStateException, </font></p>
<p><font style="background-color: #cce8cf">ImagingOpException, </font></p>
<p><font style="background-color: #cce8cf">IndexOutOfBoundsException, </font></p>
<p><font style="background-color: #cce8cf">MissingResourceException, </font></p>
<p><font style="background-color: #cce8cf">NegativeArraySizeException, </font></p>
<p><font style="background-color: #cce8cf">NoSuchElementException, </font></p>
<p><font style="background-color: #cce8cf">NullPointerException, </font></p>
<p><font style="background-color: #cce8cf">ProfileDataException, </font></p>
<p><font style="background-color: #cce8cf">ProviderException, </font></p>
<p><font style="background-color: #cce8cf">RasterFormatException, </font></p>
<p><font style="background-color: #cce8cf">SecurityException, </font></p>
<p><font style="background-color: #cce8cf">SystemException, </font></p>
<p><font style="background-color: #cce8cf">UndeclaredThrowableException, </font></p>
<p><font style="background-color: #cce8cf">UnmodifiableSetException, </font></p>
<p><font style="background-color: #cce8cf">UnsupportedOperationException </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十八，error和exception有什么区别? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 </font></p>
<p><font style="background-color: #cce8cf">　exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常，从不会发生的情况。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第十九，List, Set, Map是否继承自Collection接口? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">List，Set是 </font></p>
<p><font style="background-color: #cce8cf">Map不是 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十，abstract class和interface有什么区别? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个 有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十一，abstract的method是否可同时是static,是否可同时是native，是否可同时是synchronized? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">都不能 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十二，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十三，启动一个线程是用run()还是start()? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十四，构造器Constructor是否可被override? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Overloading。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十五，是否可以继承String类? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　String类是final类故不可以继承。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十六，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此对象的其它方法? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　不能，一个对象的一个synchronized方法只能由一个线程访问。 </font></p>
<p><font style="background-color: #cce8cf">第二十七，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不会被执行，什么时候被执行，在return前还是后? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">会执行，在return前执行。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十八，编程题: 用最有效率的方法算出2乘以8等於几? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">有C背景的程序员特别喜欢问这种问题。 </font></p>
<p><font style="background-color: #cce8cf">2 &lt; &lt; 3 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二十九，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话对不对? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">不对，有相同的hash code。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第三十，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并可返回变化后的结果，那么这里到底是值传递还是引用传递? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变，但对象的引用是永远不会改变的。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第三十一，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第三十二，编程题: 写一个Singleton出来。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">&nbsp;&nbsp;&nbsp; Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例存在。 </font></p>
<p><font style="background-color: #cce8cf">一般Singleton模式通常有几种种形式: </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">　第一种形式: 定义一个类，它的构造函数为private的，它有一个static的private的该类变量，在类初始化时实例话，通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">public class Singleton { </font></p>
<p><font style="background-color: #cce8cf">　　private Singleton(){} </font></p>
<p><font style="background-color: #cce8cf">　　//在自己内部定义自己一个实例，是不是很奇怪？ </font></p>
<p><font style="background-color: #cce8cf">　　//注意这是private 只供内部调用 </font></p>
<p><font style="background-color: #cce8cf">　　private static Singleton instance = new Singleton(); </font></p>
<p><font style="background-color: #cce8cf">　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　 </font></p>
<p><font style="background-color: #cce8cf">　　public static Singleton getInstance() { </font></p>
<p><font style="background-color: #cce8cf">　　　　return instance; 　　 </font></p>
<p><font style="background-color: #cce8cf">　　 } </font></p>
<p><font style="background-color: #cce8cf">}&nbsp; </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">第二种形式: </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">public class Singleton { </font></p>
<p><font style="background-color: #cce8cf">　　private static Singleton instance = null; </font></p>
<p><font style="background-color: #cce8cf">　　public static synchronized Singleton getInstance() { </font></p>
<p><font style="background-color: #cce8cf">　　//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次　　　 　 </font></p>
<p><font style="background-color: #cce8cf">　　//使用时生成实例，提高了效率！ </font></p>
<p><font style="background-color: #cce8cf">　　if (instance==null) </font></p>
<p><font style="background-color: #cce8cf">　　　　instance＝new Singleton(); </font></p>
<p><font style="background-color: #cce8cf">return instance; 　　} </font></p>
<p><font style="background-color: #cce8cf">}&nbsp; </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf">其他形式: </font></p>
<p><font style="background-color: #cce8cf">定义一个类，它的构造函数为private的，所有方法为static的。 </font></p>
<p><font style="background-color: #cce8cf">一般认为第一种形式要更加安全些 </font></p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<p><font style="background-color: #cce8cf"></font>&nbsp;</p>
<font style="background-color: #cce8cf">
<p><br />
其中也存在一些问题，下面补充一下．希望大家继续补充 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>　 </p>
<p>1.最好介绍一下final修饰变量的情形（分开说明基本类型变量和引用类型变量）。 </p>
<p>2.不知道如何描述比较好，匿名内部类本身是一个实现了特定接口或继承了其他类的类。 </p>
<p>3.非静态类不能有static的方法。参考一下java collections framework的代码，还能说出很多东西来。 </p>
<p>4.&amp;既是位运算符，也是逻辑操作符。 </p>
<p>&amp;和&amp;&amp;都是逻辑运算符，它们的区别是，&amp;&amp;进行短路计算。 </p>
<p>6.可以补充一下，参考文档。 </p>
<p>11.说一下具体的原因可能更好。 </p>
<p>13.java有goto这个keyword，不过还没有使用。 </p>
<p>15.overload和多态没有任何关系。多态是面向对象的基本特征，是和继承、overriding相关的。原来以为把overload当作多态的一种是从C++来的，后来翻了基本c++的经典的书,也强调多态只是和继承,虚函数,overriding相关,所以不知道这个错误思想从哪来的了. </p>
<p>16.public interface Set &lt;E&gt;extends Collection &lt;E&gt;一个不包含重复元素的 collection。更确切地讲，set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2，并且最多包含一个 null 元素。正如其名称所暗示的，此接口模仿了数学上的 set 抽象。 </p>
<p>看文档就是了. </p>
<p>22."抽象类是否可继承实体类，但前提是实体类必须有明确的构造函数。"什么意思?谁规定的? </p>
<p>27.这个比较复杂,例如 </p>
<p>&nbsp;</p>
<p>public class Main { </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public static void main(String[] args) { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(test()); </p>
<p>&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; public static boolean test() { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean b = false; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try { </p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return b = 4 &gt; 3; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } finally { </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(b); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //return false; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp; }&nbsp; </p>
<p>} </p>
<p>这个例子中可以看出,return后面的表达式已经计算了,感觉return语句这里被挂起了,如果finally中没有return,这个return就返回. </p>
<p>如果finally也有return,那么就是finally中的return返回了. </p>
<p>29.碰上不守规矩的程序员谁也没办法. </p>
<p>&nbsp;</p>
<p>31.还有枚举呢 </p>
<p>32.注释有问题.</font></p>
<img src ="http://www.blogjava.net/cyantide/aggbug/251063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2009-01-13 09:41 <a href="http://www.blogjava.net/cyantide/archive/2009/01/13/251063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>远程镜像与备份SVN服务器(转载)</title><link>http://www.blogjava.net/cyantide/archive/2008/12/14/246198.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Sun, 14 Dec 2008 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/12/14/246198.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/246198.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/12/14/246198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/246198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/246198.html</trackback:ping><description><![CDATA[<h2>远程镜像与备份SVN服务器</h2>
<div class="t_msgfont" id="postmessage_17661">
<p align="left"><font face="宋体 "><font style="font-size: 18pt">如需转载，请注明出处：</font></font><a href="http://bbs.iusesvn.com/thread-3068-1-1.html" target="_blank"><font face="宋体 "><font style="font-size: 18pt">http://bbs.iusesvn.com/thread-3068-1-1.html</font></font></a><br />
<font face="宋体 "><font style="font-size: 10pt">此文讲述</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">如何镜像<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%9C%8D%E5%8A%A1%E5%99%A8">服务器</span>，注意是单向镜像。众所周知，</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">有自已的镜像<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%91%BD%E4%BB%A4">命令</span></font></font><font style="font-size: 10pt">svnsync(svn1.4</font><font face="宋体 "><font style="font-size: 10pt">以及以上版本特性</font></font><font style="font-size: 10pt">),</font><font face="宋体 "><font style="font-size: 10pt">但是部署与维护确是繁琐至极，令人望而却步。我们来看一个简单的</font></font><font style="font-size: 10pt">svnsync</font><font face="宋体 "><font style="font-size: 10pt">例子：</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">主</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%9C%8D%E5%8A%A1">服务</span>器：</font></font><font style="font-size: 10pt"> <a href="http://mastersvn/project1" target="_blank">http://mastersvn/project1</a></font><font style="font-size: 10pt"><br />
<font color="black">svnsync</font></font><font face="宋体 "><font style="font-size: 10pt">镜像</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器上的部署：</font></font><font style="font-size: 10pt"><a href="http://backupsvn/project1" target="_blank">http://backupsvn/project1</a></font></p>
<p align="left"><font face="宋体 "><font style="font-size: 10pt">第一步：建立<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E4%BB%93%E5%BA%93">仓库</span></font></font><font style="font-size: 10pt"><br />
<font color="black">cd /<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=home">home</span>/svn</font><br />
<font color="black">svn<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=admin">admin</span> create &#8211;fs-type fsfs /home/svn/project1</font><br />
<font color="black">ch<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=mod">mod</span> 777 &#8211;R project1</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">第二步：镜像初始化</font></font><font style="font-size: 10pt"><br />
<font color="black">svnsync init <a href="http://backupsvn/project1" target="_blank">http://backupsvn/project1</a></font></font><font style="font-size: 10pt"><font color="black"> <a href="http://mastersvn/project1" target="_blank">http://mastersvn/project1</a></font><br />
</font><font face="宋体 "><font style="font-size: 10pt">第三步：更改配置<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%96%87%E4%BB%B6">文件</span></font></font><font style="font-size: 10pt"><br />
<font color="black">cd /home/svn/project1/hooks</font><br />
<font color="black">cp pre-revprop-change.tmpl pre-revprop-change</font></font></p>
<p align="left"><font style="font-size: 10pt">vi pre-revprop-change<br />
</font><font face="宋体 "><font style="font-size: 10pt">注销所有语句，在语句前加入</font></font><font style="font-size: 10pt">#</font><font face="宋体 "><font style="font-size: 10pt">即可，退出保存</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">第四步：同步</font></font><font style="font-size: 10pt"><br />
<font color="black">svnsync sync http://backupsvn/project1 --username username --password password</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">已提交版本</font></font><font style="font-size: 10pt"> 9</font><font face="宋体 "><font style="font-size: 10pt">。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">复制版本</font></font><font style="font-size: 10pt"> 9 </font><font face="宋体 "><font style="font-size: 10pt">的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%B1%9E%E6%80%A7">属性</span>。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">已提交版本</font></font><font style="font-size: 10pt"> 10</font><font face="宋体 "><font style="font-size: 10pt">。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">复制版本</font></font><font style="font-size: 10pt"> 10 </font><font face="宋体 "><font style="font-size: 10pt">的属性</font></font><font style="font-size: 10pt"><br />
<font color="black">&#8230;&#8230;&#8230;&#8230;&#8230;</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">但是在实际运用中，经常会发生</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">库被</font></font><font style="font-size: 10pt">lock</font><font face="宋体 "><font style="font-size: 10pt">的情况</font></font><font style="font-size: 10pt"><br />
<font color="black">svnsync: Couldn't get lock on destination repos after 10 attempts</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">这不得不让我们感觉头痛地手动使用改命令解锁</font></font><font style="font-size: 10pt"><br />
<font color="black">svn propdel svn:sync-lock --revprop -r0 http://backupsvn/project1</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">写到这里，大家不由对</font></font><font style="font-size: 10pt">svnsync</font><font face="宋体 "><font style="font-size: 10pt">有了个初步的认识了吧，就一个字，烦！！！而且同步速度很慢！！！</font></font><font style="font-size: 10pt"><br />
<font color="black">----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">接下来是此文的重点部分：</font></font><font style="font-size: 10pt"><br />
<font color="black">SVN</font></font><font face="宋体 "><font style="font-size: 10pt">新的镜像备份方案：</font></font><font style="font-size: 10pt">ssh + rsync + crontab(</font><font face="宋体 "><font style="font-size: 10pt">任务计划</font></font><font style="font-size: 10pt">))</font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">什么是</font></font></strong><strong><font style="font-size: 10pt">SSH?</font></strong><font style="font-size: 10pt"><br />
<font color="black">SSH </font></font><font face="宋体 "><font style="font-size: 10pt">是更灵活、更安全的</font></font><font style="font-size: 10pt"> telnet </font><font face="宋体 "><font style="font-size: 10pt">和</font></font><font style="font-size: 10pt"> rlogin </font><font face="宋体 "><font style="font-size: 10pt">替代品。它在<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%BC%80%E5%8F%91">开发</span><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E9%A1%B9%E7%9B%AE">项目</span>中得到广泛使用，以提供<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%AE%BF%E9%97%AE">访问</span>控制和安全的数据传输。</font></font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">什么是</font></font></strong><strong><font style="font-size: 10pt">rysnc?</font></strong><font style="font-size: 10pt"><br />
<font color="black">rsync</font></font><font face="宋体 "><font style="font-size: 10pt">是类</font></font><font style="font-size: 10pt">unix</font><font face="宋体 "><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%B3%BB%E7%BB%9F">系统</span>下的数据镜像备份<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%B7%A5%E5%85%B7">工具</span>，从<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%BD%AF%E4%BB%B6">软件</span>的命名上就可以看出来了</font></font><font style="font-size: 10pt">——remote sync</font><font face="宋体 "><font style="font-size: 10pt">。它的特性如下：</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">可以镜像保存整个<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%9B%AE%E5%BD%95">目录</span>树和文件系统。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">可以很容易做到保持原来文件的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%9D%83%E9%99%90">权限</span>、时间、软硬链接等等。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">无须特殊权限即可安装。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">优化的流程，文件传输效率高。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">可以使用</font></font><font style="font-size: 10pt">rcp</font><font face="宋体 "><font style="font-size: 10pt">、</font></font><font style="font-size: 10pt">ssh</font><font face="宋体 "><font style="font-size: 10pt">等方式来传输文件，当然也可以通过直接的</font></font><font style="font-size: 10pt">socket</font><font face="宋体 "><font style="font-size: 10pt">连接。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">支持匿名传输，以方便进行网站镜象。</font></font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">什么是</font></font></strong><strong><font style="font-size: 10pt">crontab?</font></strong><font style="font-size: 10pt"><br />
<font color="black">Crontab</font></font><font face="宋体 "><font style="font-size: 10pt">是</font></font><font style="font-size: 10pt">Linux</font><font face="宋体 "><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F">操作系统</span>下的一个命令，可以用来根据时间、日期、月份、星期的组合来调度对重复任务的执行的守护进程。</font></font><font style="font-size: 10pt">(</font><font face="宋体 "><font style="font-size: 10pt">类似</font></font><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=windows">windows</span></font><font face="宋体 "><font style="font-size: 10pt">下的任务计划</font></font><font style="font-size: 10pt">)</font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">方案拓扑图：（请看附件）</font></font></strong><br />
<strong><font face="宋体 "><font style="font-size: 10pt">主</font></font></strong><strong><font style="font-size: 10pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 10pt">服务器<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%8E%AF%E5%A2%83">环境</span>：</font></font></strong><font style="font-size: 10pt"><br />
<font color="black">SVN</font></font><font face="宋体 "><font style="font-size: 10pt">仓库根目录：</font></font><font style="font-size: 10pt"> /home/svn (project1,project2,project3</font><font face="宋体 "><font style="font-size: 10pt">三个仓库</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">SVN</font></font><font face="宋体 "><font style="font-size: 10pt">服务器</font></font><font style="font-size: 10pt">IP</font><font face="宋体 "><font style="font-size: 10pt">：</font></font><font style="font-size: 10pt"> 192.168.100.80</font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">镜像</font></font></strong><strong><font style="font-size: 10pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 10pt">服务器环境：</font></font></strong><font style="font-size: 10pt"><br />
<font color="black">SVN</font></font><font face="宋体 "><font style="font-size: 10pt">仓库根目录：</font></font><font style="font-size: 10pt">/home/svn </font><font face="宋体 "><font style="font-size: 10pt">（无仓库，无需建立，镜像时会直接复制过来并保持文件属性）</font></font><font style="font-size: 10pt"><br />
<font color="black">SVN</font></font><font face="宋体 "><font style="font-size: 10pt">服务器</font></font><font style="font-size: 10pt">IP</font><font face="宋体 "><font style="font-size: 10pt">：</font></font><font style="font-size: 10pt"> 192.168.100.81</font><font style="font-size: 10pt"><br />
<br />
<strong><font color="blue">#</font></strong></font><strong><font face="宋体 "><font style="font-size: 10pt">主</font></font></strong><strong><font style="font-size: 10pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 10pt">服务器安装部分：</font></font></strong><br />
<font face="宋体 "><font style="font-size: 10pt">（</font></font><font style="font-size: 10pt">1</font><font face="宋体 "><font style="font-size: 10pt">）</font></font><br />
<font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">安装部分（略）</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">（</font></font><font style="font-size: 10pt">2</font><font face="宋体 "><font style="font-size: 10pt">）</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">安装</font></font><font style="font-size: 10pt">rsync</font><font face="宋体 "><font style="font-size: 10pt">部分</font></font><font style="font-size: 10pt"><br />
<font color="black">rpm -qa | grep rsync (</font></font><font face="宋体 "><font style="font-size: 10pt">所有系统是否有安装过</font></font><font style="font-size: 10pt">rsync)</font><font style="font-size: 10pt"><br />
<font color="black">rpm -e rsyncxxx (</font></font><font face="宋体 "><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%88%A0%E9%99%A4">删除</span>以前安装过的</font></font><font style="font-size: 10pt">rsync)</font><font style="font-size: 10pt"><br />
<font color="black">wget </font></font><a href="http://samba.anu.edu.au/ftp/rsync/rsync-3.0.4.tar.gz" target="_blank"><font style="font-size: 10pt">http://samba.anu.edu.au/ftp/rsync/rsync-3.0.4.tar.gz</font></a><font style="font-size: 10pt"> (</font><font face="宋体 "><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E4%B8%8B%E8%BD%BD">下载</span></font></font><font style="font-size: 10pt">rsync</font><font face="宋体 "><font style="font-size: 10pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%BA%90%E7%A0%81">源码</span>安装包</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">tar zxvf rsync-3.0.4.tar.gz (</font></font><font face="宋体 "><font style="font-size: 10pt">解压</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">cd rsync-3.0.4</font><br />
<font color="black">./install.sh (</font></font><font face="宋体 "><font style="font-size: 10pt">安装</font></font><font style="font-size: 10pt">)</font><br />
<font face="宋体 "><font style="font-size: 10pt">接下来我们就可以输入</font></font><font style="font-size: 10pt">rsync --version</font><font face="宋体 "><font style="font-size: 10pt">命令来测试下是否安装成功了。</font></font><font style="font-size: 10pt"><br />
<font color="black">rsync<br />
version 3.0.3<br />
protocol version 30</font><br />
<font color="black">Copyright (C) 1996-2008 by Andrew Tridgell, Wayne Davison, and others.</font><br />
<font color="black">Web site: </font></font><a href="http://rsync.samba.org/" target="_blank"><font style="font-size: 10pt">http://rsync.samba.org/</font></a><font style="font-size: 10pt"><br />
<font color="black">Capabilities:<br />
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,<br />
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,<br />
append, ACLs, xattrs, iconv, no symtimes</font><br />
<font color="black">rsync comes with ABSOLUTELY NO WARRANTY.<br />
This is free software, and you</font><br />
<font color="black">are welcome to redistribute it under certain conditions.<br />
See the GNU</font><br />
<font color="black">General Public Licence for details.</font><br />
<font color="black">(3) </font></font><font face="宋体 "><font style="font-size: 10pt">开启</font></font><font style="font-size: 10pt">rsync</font><font face="宋体 "><font style="font-size: 10pt">服务器端</font></font><font style="font-size: 10pt"><br />
/<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=usr">usr</span>/local/bin/rsync --daemon (</font><font face="宋体 "><font style="font-size: 10pt">开启</font></font><font style="font-size: 10pt">rsync</font><font face="宋体 "><font style="font-size: 10pt">服务</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
vi /etc/rc.d/rc.local<br />
</font><font face="宋体 "><font style="font-size: 10pt">在末尾加入</font></font><font style="font-size: 10pt">/usr/local/bin/rsync --daemon (</font><font face="宋体 "><font style="font-size: 10pt">目的是让服务器每次重启后都能<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%87%AA%E5%8A%A8">自动</span>运行此进程</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<br />
<strong><font color="blue">#</font></strong></font><strong><font face="宋体 "><font style="font-size: 10pt">镜像</font></font></strong><strong><font style="font-size: 10pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 10pt">服务器安装部分：</font></font></strong><br />
<font face="宋体 "><font style="font-size: 10pt">（</font></font><font style="font-size: 10pt">1</font><font face="宋体 "><font style="font-size: 10pt">）</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">安装部分（略）</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">（</font></font><font style="font-size: 10pt">2</font><font face="宋体 "><font style="font-size: 10pt">）</font></font><font face="宋体 "><font style="font-size: 10pt">安装</font></font><font style="font-size: 10pt">rsync</font><font face="宋体 "><font style="font-size: 10pt">部分</font></font><font style="font-size: 10pt"><br />
<font color="black">rpm -qa | grep rsync (</font></font><font face="宋体 "><font style="font-size: 10pt">所有系统是否有安装过</font></font><font style="font-size: 10pt">rsync)</font><font style="font-size: 10pt"><br />
<font color="black">rpm -e rsyncxxx (</font></font><font face="宋体 "><font style="font-size: 10pt">删除以前安装过的</font></font><font style="font-size: 10pt">rsync)</font><font style="font-size: 10pt"><br />
<font color="black">wget </font></font><a href="http://samba.anu.edu.au/ftp/rsync/rsync-3.0.4.tar.gz" target="_blank"><font style="font-size: 10pt">http://samba.anu.edu.au/ftp/rsync/rsync-3.0.4.tar.gz</font></a><font style="font-size: 10pt"> (</font><font face="宋体 "><font style="font-size: 10pt">下载</font></font><font style="font-size: 10pt">rsync</font><font face="宋体 "><font style="font-size: 10pt">源码安装包</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">tar zxvf rsync-3.0.4.tar.gz (</font></font><font face="宋体 "><font style="font-size: 10pt">解压</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">cd rsync-3.0.4</font><br />
<font color="black">./install.sh (</font></font><font face="宋体 "><font style="font-size: 10pt">安装</font></font><font style="font-size: 10pt">)</font><br />
<font face="宋体 "><font style="font-size: 10pt">接下来我们就可以输入</font></font><font style="font-size: 10pt">rsync --version</font><font face="宋体 "><font style="font-size: 10pt">命令来测试下是否安装成功了。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">接下来我们的配置就完成了，让我们用命里那个测试下。</font></font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">同步命令：</font></font></strong><font style="font-size: 10pt"><br />
<font color="black">rsync -vzrtopgu --progress --delete </font></font><a href="mailto:root@192.168.100.80"><font style="font-size: 10pt">root@192.168.100.80</font></a><font style="font-size: 10pt">:/home/svn /home/</font><br />
<font face="宋体 "><font style="font-size: 10pt">输入<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%94%A8%E6%88%B7">用户</span>名</font></font><font style="font-size: 10pt">root</font><br />
<font face="宋体 "><font style="font-size: 10pt">输入</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">的<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E5%AF%86%E7%A0%81">密码</span>。</font></font><font style="font-size: 10pt"><br />
<font color="black"><br />
65309 100%<br />
224.57kB/s<br />
0:00:00 (xfer#507, to-<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=check">check</span>=2187/23106)</font><br />
<font color="black">svn/project1/db/revs/202</font><br />
<font color="black"><br />
29655 100%<br />
99.86kB/s<br />
0:00:00 (xfer#508, to-check=2186/23106)</font><br />
<font color="black">svn/project1/db/revs/203</font><br />
<font color="black"><br />
7242 100%<br />
23.19kB/s<br />
0:00:00 (xfer#509, to-check=2185/23106)</font><br />
<font color="black">sent 15928 bytes<br />
received 521860019 bytes<br />
4404016.43 bytes/sec</font><br />
<font color="black">total size is 12240235825<br />
speedup is 23.45</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">传输完成，这次镜像过程就结束了。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">让我们看看所使用的参数：</font></font><font style="font-size: 10pt"><br />
<font color="black">v </font></font><font face="宋体 "><font style="font-size: 10pt">复杂的输出信息</font></font><font style="font-size: 10pt"><br />
<font color="black">z </font></font><font face="宋体 "><font style="font-size: 10pt">压缩模式</font></font><font style="font-size: 10pt">, </font><font face="宋体 "><font style="font-size: 10pt">当资料在传送到目的端进行档案压缩</font></font><font style="font-size: 10pt">.</font><font style="font-size: 10pt"><br />
<font color="black">r </font></font><font face="宋体 "><font style="font-size: 10pt">复制所有下面的资料</font></font><font style="font-size: 10pt">(</font><font face="宋体 "><font style="font-size: 10pt">透过</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">t </font></font><font face="宋体 "><font style="font-size: 10pt">保留时间点</font></font><font style="font-size: 10pt"><br />
<font color="black">o </font></font><font face="宋体 "><font style="font-size: 10pt">保留档案所有者</font></font><font style="font-size: 10pt">(root only)</font><font style="font-size: 10pt"><br />
<font color="black">p</font></font><font face="宋体 "><font style="font-size: 10pt">保留档案权限</font></font><font style="font-size: 10pt"><br />
<font color="black">g </font></font><font face="宋体 "><font style="font-size: 10pt">保留档案群组</font></font><font style="font-size: 10pt"><br />
<font color="black">u</font></font><font face="宋体 "><font style="font-size: 10pt">更新修改过的文件</font></font><font style="font-size: 10pt"><br />
<font color="black">--progress </font></font><font face="宋体 "><font style="font-size: 10pt">显示传送的进度</font></font><font style="font-size: 10pt"><br />
<font color="black">--delete </font></font><font face="宋体 "><font style="font-size: 10pt">删除传送断已经不存在</font></font><font style="font-size: 10pt">,</font><font face="宋体 "><font style="font-size: 10pt">而目的端存在的档案</font></font><font style="font-size: 10pt"><br />
<br />
<font color="black">root@192.168.100.80:/home/svn /home/</font><br />
</font><font face="宋体 "><font style="font-size: 10pt">用</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">用户访问</font></font><font style="font-size: 10pt">192.168.100.80</font><font face="宋体 "><font style="font-size: 10pt">的</font></font><font style="font-size: 10pt">/home/svn</font><font face="宋体 "><font style="font-size: 10pt">目录，然后同步到本机的</font></font><font style="font-size: 10pt">/home/</font><font face="宋体 "><font style="font-size: 10pt">目录下，注意<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%A0%BC%E5%BC%8F">格式</span>，那么镜像</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器就会把主</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器上的</font></font><font style="font-size: 10pt">/home</font><font face="宋体 "><font style="font-size: 10pt">目录的</font></font><font style="font-size: 10pt">svn</font><font face="宋体 "><font style="font-size: 10pt">文件夹整个复制到镜像</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器上的</font></font><font style="font-size: 10pt">/home</font><font face="宋体 "><font style="font-size: 10pt">下，并保存原属性不变。</font></font><font style="font-size: 10pt"><br />
<br />
<font color="black">###</font></font><font face="宋体 "><font style="font-size: 10pt">注意</font></font><font style="font-size: 10pt">:</font><font face="宋体 "><font style="font-size: 10pt">为什么使用</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">的用户呢，因为可以确保保证同步过来的文件可以保证档案的具体属性，这是我们比较关心的问题，但是</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">的用户拥有的权限太大了，每次都需要输入</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">的密码，一方面这是非常危险的，一方面比较繁琐。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">那么我们首先想到的不需要输入<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E7%94%A8%E6%88%B7%E5%90%8D">用户名</span>和密码就可以镜像和传输文件，那么必须让两台</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器互相信任</font></font><font style="font-size: 10pt">,</font><font face="宋体 "><font style="font-size: 10pt">那么我们需要采用</font></font><font style="font-size: 10pt">ssh</font><font face="宋体 "><font style="font-size: 10pt">私钥和公钥加密技术。</font></font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">主</font></font></strong><strong><font style="font-size: 10pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 10pt">服务器：</font></font></strong><font style="font-size: 10pt"><br />
<font color="black">ssh-keygen &#8211;d</font><br />
<font color="black">Enter file in which to save the key (/home/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/root/.ssh/id_dsa.Your public key has been saved in /home/root/.ssh/id_dsa.pub.The key fingerprint is:32:21:e1:3b:7d:6e:de:4b:39:da:af:38:fe:90:40:61 </font></font><a href="mailto:root@svnserver.com"><font style="font-size: 10pt">root@<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=svnserve">svnserve</span>r.com</font></a><font style="font-size: 10pt"><br />
<br />
<font color="black">cd .ssh</font><br />
<font color="black">id_dsa ------------ </font></font><font face="宋体 "><font style="font-size: 10pt">私钥文件</font></font></p>
<p align="left"><font style="font-size: 10pt">id_dsa.pub ------------ </font><font face="宋体 "><font style="font-size: 10pt">公钥文件</font></font><br />
<font style="font-size: 10pt"><br />
<font color="black">cp id_dsa.pub authorized_keys2 (</font></font><font face="宋体 "><font style="font-size: 10pt">复制一个可以被</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">识别和读取的公钥文件</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">chmod 600 authorized_keys2 (</font></font><font face="宋体 "><font style="font-size: 10pt">因安全因为给予</font></font><font style="font-size: 10pt">600</font><font face="宋体 "><font style="font-size: 10pt">权限</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">cp id_dsa.pub svn<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=server">server</span>.pub (</font></font><font face="宋体 "><font style="font-size: 10pt">再做一份公钥的副本</font></font><font style="font-size: 10pt">)</font><br />
<font face="宋体 "><font style="font-size: 10pt">想办法把这个公钥的副本移动到镜像</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器上面。</font></font><font style="font-size: 10pt"><br />
<font color="black">cat mirrorsvnserver.pub &gt;&gt; authorized_keys2 (</font></font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">把复制过来的镜像</font></font></font></font><font style="font-size: 10pt">SVN</font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">服务器上的公钥导入到主</font></font></font></font><font style="font-size: 10pt">SVN</font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">服务器的公钥文件里</font></font></font></font><font style="font-size: 10pt">)</font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">镜像</font></font></strong><strong><font style="font-size: 10pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 10pt">服务器：</font></font></strong><font style="font-size: 10pt"><br />
<font color="black">ssh-keygen &#8211;d</font><br />
<font color="black">Enter file in which to save the key (/home/root/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/root/.ssh/id_dsa.Your public key has been saved in /home/root/.ssh/id_dsa.pub.The key fingerprint is:32:21:e1:3b:7d:6e:de:4b:39:da:af:38:fe:90:40:61 </font></font><a href="mailto:root@mirrorsvnserver.com"><font style="font-size: 10pt">root@mirrorsvnserver.com</font></a><font style="font-size: 10pt"><br />
<br />
<font color="black">cd .ssh</font><br />
<font color="black">id_dsa ------------ </font></font><font face="宋体 "><font style="font-size: 10pt">私钥文件</font></font></p>
<p align="left"><font style="font-size: 10pt">id_dsa.pub ------------ </font><font face="宋体 "><font style="font-size: 10pt">公钥文件</font></font><br />
<font style="font-size: 10pt"><br />
<font color="black">cp id_dsa.pub authorized_keys2 (</font></font><font face="宋体 "><font style="font-size: 10pt">复制一个可以被</font></font><font style="font-size: 10pt">root</font><font face="宋体 "><font style="font-size: 10pt">识别和读取的公钥文件</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">chmod 600 authorized_keys2 (</font></font><font face="宋体 "><font style="font-size: 10pt">因安全因为给予</font></font><font style="font-size: 10pt">600</font><font face="宋体 "><font style="font-size: 10pt">权限</font></font><font style="font-size: 10pt">)</font><font style="font-size: 10pt"><br />
<font color="black">cp id_dsa.pub mirrorsvnserver.pub (</font></font><font face="宋体 "><font style="font-size: 10pt">再做一份公钥的副本</font></font><font style="font-size: 10pt">)</font><br />
<font face="宋体 "><font style="font-size: 10pt">想办法把这个公钥的副本移动到主</font></font><font style="font-size: 10pt">SVN</font><font face="宋体 "><font style="font-size: 10pt">服务器上面。</font></font><font style="font-size: 10pt"><br />
<font color="black">cat svnserver.pub &gt;&gt; authorized_keys2 (</font></font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">把复制过来的主</font></font></font></font><font style="font-size: 10pt">SVN</font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">服务器上的公钥导入到镜像</font></font></font></font><font style="font-size: 10pt">SVN</font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">服务器的公钥文件里</font></font></font></font><font style="font-size: 10pt">)</font><br />
<font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">让我们里验证公钥文件中的内容：</font></font></font></font><font style="font-size: 10pt"><br />
<font color="black">cat /root/.ssh/authorized_keys2</font><br />
<font color="black">ssh-dss AAAAB3NzaC1kc3MAAACBAL9iAG+VZkXunZ5KzTivat1deDAQFKdrGY5P2rxRI+QeKClNgfukUNwQmU+a5FqfNsLKlWhGbIfFI1k00Zkc7nwMdG2dtcnWw7oUqPCGizMcoPLXXQhfOPaFoOkB5UPWNkgJobBPZBjJ7nhKZxzzMiujhOVYLvGNDEWI8x3NAAAAFQCqqtJaMgVyMgDexUKbHIBXsSghYIB5U82gTyGb2c4z4AsmQ5M0ds3YHHVLPHRUEn7DspzlNZ7fYWhKzQYWlhPJftuYTrYIEzuXx8Hl8kg7hCEl4hArAgMMcEtmuQ+3x5SkEht3077qUPdC/YzSk7cFNwQlt6nOeYELCIwhs1CXWQXi9E/XSlqepd+gSlAAhVzWc0MgAAAIAy4qWyaB6DT+XWtq23jrFrYeejJyFBVkNVUbEd3GNTHvwKTYuBa7nlh562g5r0riIrHW+a7WGd6U32RVLnqqIwddcHml4kXnondo0qjW4XijYI7jkHN9oAK5mNWnSCYAnot1nra3QXlh9472/l7kTmznumjsDDjAIa7OFY9w== </font></font><a href="mailto:root@svnserver.com"><font style="font-size: 10pt">root@svnserver.com</font></a><font style="font-size: 10pt"><br />
<font color="black">ssh-dss AAAAB3NzaC1kc3MAAACBAPI3YFCQNBof9xA/Fi1S0U4jmliAg/TaWHnx9suaYb5Xc31jW3+axbNURIBnK7cA53q+qBME1DdddSBOq+I0oUpfjAXkOUl/ACRbSRqA1VOaKdI2AOH9tw4jSK0xSqYjj+ReuUnuVMSTOJTQzt1n6YsLj/kjAAAAFQCHE5NqPCIlr5xVFYOZmGysI+CtKQAAAIAb/gjP0f3Ifx0H2A3XzH9fG4YENLd+gz0l07Mq356+IBuPSYxi4JldxZ7j1OkH9j+7+t8AOSyqNqiOzKXpimo0NLjVsEkpn9RXFmzfHHwRholmauDKIbGLvJlTL0ZkjqH3w0plGmVC6YyxOpM4w7XklIvtq3rDZQE4O247yxgAAAIEA2rd2htKfO9I7F+rBxVgszeGrwCfP5gf8sdz32LDd+E4JxzI/b79Tn1ylILb0vGZhRCbFhoLnDIUMR3Lrr5FqGlTf8O2gsvproA5pLqUpgrkhR/7siycplOddftt553yBJNCBkq+E906AwQ72PNs2uLrbKHyVyD1akrD2/hfA= </font></font><a href="mailto:root@svnmirrorserver.com"><font style="font-size: 10pt">root@svnmirrorserver.com</font></a><br />
<font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">这样我们的两台</font></font></font></font><font style="font-size: 10pt">SVN</font><font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">服务器就得到信任了。</font></font></font></font><br />
<font color="black"><font face="宋体 "><font style="font-size: 10.5pt"><font size="3">让我们再次执行同步命令：</font></font></font></font><font style="font-size: 10pt"><br />
<font color="black">rsync -vzrtopgu --progress --delete </font></font><a href="mailto:root@192.168.100.80"><font style="font-size: 10pt">root@192.168.100.80</font></a><font style="font-size: 10pt">:/home/svn /home/</font><br />
<font face="宋体 "><font style="font-size: 10pt">发现了什么？</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">已经不需要输入用户名和密码了。</font></font><br />
<strong><font face="宋体 "><font style="font-size: 10pt">最后我们需要设定人物计划了。</font></font></strong><font style="font-size: 10pt"><br />
<font color="black">crontab &#8211;e</font><br />
<font color="black">*/10 * * * * /usr/local/bin/rsync -vzrtopgu --progress --delete </font></font><a href="mailto:root@192.168.100.80"><font style="font-size: 10pt">root@192.168.100.80</font></a><font style="font-size: 10pt">:/home/svn /home/ &amp;</font><br />
<font face="宋体 "><font style="font-size: 10pt">退出保存。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">这个例子是每</font></font><font style="font-size: 10pt">10</font><font face="宋体 "><font style="font-size: 10pt">分钟同步一次</font></font><font style="font-size: 10pt">,</font><font face="宋体 "><font style="font-size: 10pt">当然我们也可以<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E8%AE%BE%E7%BD%AE">设置</span>我们想要的时间。</font></font><br />
<font face="宋体 "><font style="font-size: 10pt">另外一个例子：每小时同步一次</font></font><font style="font-size: 10pt"><br />
<font color="black">* */1 * * * /usr/local/bin/rsync -vzrtopgu --progress --delete </font></font><a href="mailto:root@192.168.100.80"><font style="font-size: 10pt">[email=root@192.168.100.80:/home/svn]root@192.168.100.80</font></a><font style="font-size: 10pt">:/home/svn /home/ &amp;</font><br />
<strong><font face="宋体 "><font style="font-size: 16pt">备注：</font></font></strong><strong><font style="font-size: 16pt"><br />
(1) </font></strong><strong><font face="宋体 "><font style="font-size: 16pt">所有同步都为增量备份，笔者不建议大家都采用增量备份对</font></font></strong><strong><font style="font-size: 16pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">进行备份，这有可能导致</font></font></strong><strong><font style="font-size: 16pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">库日后不可用，但笔者这里将尽有不下</font></font></strong><strong><font style="font-size: 16pt">50</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">个</font></font></strong><strong><font style="font-size: 16pt">SVN</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">库，同步几月都没发生任何问题，都能正常被使用。但是为了谨慎起见，希望大家再做一个定期全备份，建议每周一次。如有用户因此丢失，笔者将不负任何责任。</font></font></strong><strong><font style="font-size: 16pt"><br />
(2) </font></strong><strong><font face="宋体 "><font style="font-size: 16pt">此方法适应</font></font></strong><strong><font style="font-size: 16pt">Windows</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">上使用，</font></font></strong><strong><font style="font-size: 16pt">rsync</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">程序名称为</font></font></strong><strong><font style="font-size: 16pt">cwRsync</font></strong><font style="font-size: 16pt"></font></p>
<br />
<p align="left"><strong><font style="font-size: 16pt">(3) rsync</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">有二种配置方式：一种是</font></font></strong><strong><font style="font-size: 16pt">ssh,scp,stock</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">等协议直接传输，无需修改配置文件（笔者用法），第二种是修改</font></font></strong><strong><font style="font-size: 16pt">rsync</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">配置文件，映射路径和指定密码（支持匿名）</font></font></strong><font style="font-size: 16pt"></font></p>
<br />
<p align="left"><strong><font style="font-size: 16pt">(4) ssh + rsync + crontab</font></strong><strong><font face="宋体 "><font style="font-size: 16pt">只是复制文件而已，无需依赖</font></font></strong><strong><font style="font-size: 16pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=apache">apache</span></font></strong><strong><font face="宋体 "><font style="font-size: 16pt">和</font></font></strong><strong><font style="font-size: 16pt"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=subversion">subversion</span></font></strong><strong><font face="宋体 "><font style="font-size: 16pt">程序</font></font></strong><font style="font-size: 16pt"></font></p>
<br />
<font face="Calibri "><font size="3"></font></font><br />
<font face="Calibri "><font size="3"></font></font><br />
<font face="Calibri "><font size="3">附件：</font></font><br />
rsync 所以试用参数列表:<br />
-h , --help 显示rsync<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%B1%82%E5%8A%A9">求助</span>资讯<br />
--version 顯示rsync版本<br />
-v , --verbose 复杂的输出信息<br />
-q , --quiet 安静模式，几乎没有讯息产生，<br />
常用在以cron执行rsync<br />
-I, --ignore-times 通常rsync为了加快速度会忽略同样档案大小且同样,同样存取时间点的档案<br />
可以通过此参数开关此快速检查.<br />
--size-only rsync<br />
只检查档案大小是否改变,不管时间存取点是否改变<br />
通常用在mirror, 且对方时间不太正确时<br />
-c, --checksum 在传送之前透过128bit的md4检查码来检查所有要传送的档案(会托满速度);<br />
-a, --archive archive mode 权限保存模式,相当于 -rlptgoD 参数.<br />
很快速的保存几乎所有的权限设定,除了硬式连接(透过-H设定).<br />
-r, --recursive 复制所有下面的资料(透过)<br />
-R, --relative 使用相对路径<br />
如: rsync foo/bar/foo.c remote:/tmp/ 在远端产生/tmp/foo.c档案<br />
rsync -R foo/bar/foo.c remote:/tmp/ 在远端产生/tmp/foo/bar/foo.c 档案<br />
-R, --relative 不使用相对路径<br />
-b, --backup 目的地端先前已经存在的档案在传输或删除前会被备份<br />
--backup-dir=DIR 设定备份的资料夹<br />
--suffix=SUFFIX 指定备份的档案名称字尾形式(预设为~)<br />
-K, --keep-dirlinks 接收方将连接到资料夹的档案视为资料夹处理<br />
-l, --links 复制所有的连接<br />
-H, --hard-links 保留硬式连结<br />
-p, --perms 保留档案权限<br />
-o, --owner 保留档案所有者(root only)<br />
-g, --group 保留档案群组<br />
-u &#8211;<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=update">update</span> 更新修改过的文件<br />
-D, --devices 保留device资讯(root only)<br />
-t, --times 保留时间点<br />
-n, --dry-run 不实际执行传送, 只显示将会有的传输动作<br />
-S, --sparse 尝试去处理稀疏的档案, 让这些档案在目的端占去较少的磁碟空间<br />
-W, --whole-file 复制所有的档案, 不额外作检查<br />
--no-whole-file 关闭 --whole-file 参数<br />
-x, --one-file-system 不要跨越档案系统分界(只在一个档案系统处理)<br />
-B, --block-size=SIZE 强制透过rsync程式去比对修复block-sizeforce<br />
-e --rsh=COMMAND 定义所试用的remote shell<br />
--rsync-path=PATH 定义rsync在远端<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%E6%9C%BA%E5%99%A8">机器</span>存放资料的路径<br />
--existing 只对比更新目的端已经存在的档案<br />
--ignore-existing 忽略目的断已经存在的档案(也就是不更新)<br />
--delete 删除传送断已经不存在,而目的端存在的档案<br />
--delete-excluded 除了把传送端已经不存在, 而目的端存在的档案删除之外, 也删除 --exclude 参数所包含的档案<br />
--delete-after rsync预设会在档案传送前进行相关删除动作确保接收端有足够的档案空间,<br />
单可以透过 --delete-after 让删除动作在档案传送后在进行删除<br />
--ignore-<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=error">error</span>s 忽略任何错误即使是I/O error 也进行 --delete 删除动作<br />
--max-delete=NUM 定义rsync不要删除超过NUM个档案<br />
--partial rsync若遇到传输过程中断时, 会把那些已经传输的档案删除.<br />
在某种状况下保留那些部分传送的档案是令人高兴的;<br />
你可以透过 --partial 参数达到这个目的.<br />
--partial-dir=DIR 在 --partial 参数启动时, 你还是可以定义rsync把那些部分传送的档案<br />
写入定义的资料夹, 而非直接写入目的端,需要注意的是,<br />
此资料夹不应该被其他试用者可以写入.(如:/tmp)<br />
--force 当目的端资料夹被传送端非资料夹名称覆盖时, 强制rsync删除资料夹, 即使该资料夹不是空的.<br />
--numeric-ids 不将传送端档案的uid及gid值, 与目的端的使用者/群组进行配对,<br />
若传送端并没有uid及gid的对应名称(如:原帐号群组被删除的遗留档案),<br />
或目的端没有相对应的帐号/群组, 保留数字型式的uid/gid<br />
--timeout=TIMEOUT 设定I/O 超时的时间(秒). 超过这个秒数而没有资料传送, rsync将会结束. 预设为0,也就是没有定义超时时间<br />
-T, --temp-dir=DIR 定义rsync在接收端产生暂时性的复制档案时使用资料夹暂存，<br />
预设时直接在接收端资料夹直接产生暂存档案<br />
--compare-dest=DIR 定义rsync在目的端建立资料夹来比对传送过来的档案.<br />
--link-dest=DIR 与 --compare-dest 相同,但同时会针对无法改变的档案建立硬式连结.<br />
-z, --compress 压缩模式, 当资料在传送到目的端进行档案压缩.<br />
-P -P参数和 --partial --progress 相同.只是为了把参数简单化.<br />
-C, --<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=cvs">cvs</span>-exclude 排除那些通常不希望传送的档案, 定义的方式与CVS传送相同:<br />
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state<br />
.nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej<br />
.del-* *.a *.olb *.o *.obj *.so *.<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=exe">exe</span> *.Z *.elc *.ln core .svn/<br />
符合以上条件的都会被忽略不传送.<br />
--exclude=PATTER 符合PATTERN(规则表示式)样式的档案不仅行传送<br />
--exclude-from=FILE 和 --exclude 参数相同, 不过是把不进行传送的档案事先写入某一档案.<br />
执行时, 透过此参数让rsync读取.<br />
(; #开头的行列或者空白会被rsync忽略)<br />
--include=PATTERN 定义rsync不要排除符合pattern样式的档案<br />
--include-from=FILE 和--include参数相同,只不过把要包含的档案写到某一档案.<br />
--files-from=FILE 把要传送的档案名称都精确的写入某一档案, 让rsync读取.<br />
如: rsync -a --files-from=/tmp/foo /usr remote:/backup<br />
-0 --from0 定义档案所要读取的档案时null字元结尾.<br />
--version 现四版本信息.<br />
--daemon 定义rsync以daemon型态执行<br />
--no-detach 当以daemon形态执行时,不要进行分裂且变成背景程序.<br />
--address=ADDRESS 定义所要连接(bind)的ip位置或者是host名称(daemon限定)<br />
--<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=conf">conf</span>ig=FILE 定义所要读取的设定档rsyncd.conf位置(daemon限定)<br />
预设值为 /usr/local/etc/rsyncd.conf<br />
--port=PORT 定义rsyncd(daemon)要旨行的port(预设为tcp 873)<br />
--blocking-io 使用blocking I/O连结远端的shell, 如rsh, remsh<br />
--no-blocking-io 使用non-blocking连结远端的shell, 如ssh(预设值)<br />
--stats 显示档案传送时的资讯状态<br />
--progress 显示传送的进度.(给档案传送时,怕无聊的人用的..)<br />
--log-format=FORMAT 定义log的格式(在rsyncd.conf设定)<br />
--password-file=FILE 从档案读取与远端rsync伺服务连结的密码<br />
--bwlimit=KBPS 定义传输频宽的大小(KBytes/秒)<br />
--write-batch=FILE 把记录资料写入一个档案(给其他相同环境且相同需求的机器试用)<br />
--read-batch=FILE 透过读取记录档案来进行传输.(档案由 --write-batch 参数产生)<br />
--checksum-seed=NUM 定义档案 checksum-seed 的大小(byte)<br />
-4 --ipv4 使用IPv4协定<br />
-6 --ipv6 使用IPv6协定<br />
</div>
<a href="http://bbs.iusesvn.com/thread-3068-1-1.html#zoom"><img onclick="zoom(this, 'attachments/day_080914/20080914_308264615507c8a7690f8r4QQ3WOg7xv.jpg')" alt="svnmirror.jpg" src="http://bbs.iusesvn.com/attachments/day_080914/20080914_308264615507c8a7690f8r4QQ3WOg7xv.jpg.thumb.jpg" /></a>
<img src ="http://www.blogjava.net/cyantide/aggbug/246198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-12-14 09:31 <a href="http://www.blogjava.net/cyantide/archive/2008/12/14/246198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>log4j 配置(转帖)</title><link>http://www.blogjava.net/cyantide/archive/2008/08/15/222184.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Fri, 15 Aug 2008 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/08/15/222184.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/222184.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/08/15/222184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/222184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/222184.html</trackback:ping><description><![CDATA[<p><font face="Arial"><strong>背景</strong><br />
对于有经验的开发者来说，日志记录的重要性显而易见。例如程序中的异常处理和安 全性都依赖于Logging的功能来帮助履行它们的指责。应用程序中的日志记录主要基于三个目的：监视代码中变量的变化情况，周期性的记录到文件中供其他 应用进行统计分析工作；跟踪代码运行时轨迹，作为日后审计的依据；担当集成开发环境中的调试器的作用，向文件或控制台打印代码的调试信息。经验表明日志记 录是开发周期中的重要组成部分。</font></p>
<p><font face="Arial">最简单的做法就是在代码中嵌入许多的打印语句，但是这样打印语句会充斥代码的主体，显然不是一个好方法。因此，使用成熟的框架例如Log4j，则会更具灵活性。 </font></p>
<p><font face="Arial"><strong>Log4j简介<br />
</strong>Log4j 框架是用 Java 语言编写的标准日志记录框架。作为 Jakarta 项目的一部分，它在 Apache 软件许可证（Apache Software License）下分发，以速度和灵活性为中心概念：Log4j 环境是完全可配置的，通过使用Log4j，我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、 UNIX Syslog守护进程等；我们也可以控制每一条日志的输出格式；通过定义每一条日志信息的级别，我们能够更加细致地控制日志的生成过程。 </font></p>
<p><font face="Arial">Log4j由三个重要的部件构成：记录器（Loggers）、输出源（Appenders）和布局（Layouts）。</font></p>
<p><font face="Arial">记录器按照布局中指定的格式把日志信息写入一个或多个输出源。输出源可以是控制台、文本文件、XML文件或Socket，甚至还可以把信息写入到Windows事件日志或通过电子邮件发送。我们可以通过配置文件来部署这些组件。</font></p>
<p><font face="Arial">其实您也可以完全不使用配置文件，而是在代码中配置Log4j环境。但是，使用配置文件将使您的应用程序更加灵活。本文从描述 log4j 体系结构的主要组件着手。然后是描述基本用法和配置的简单示例。</font></p>
<p><font face="Arial"><strong>定义配置文件</strong><br />
Log4j支持两种配置文件格式，一种是XML格式的文件，一种是Java特性文件（键=值）。下面我们介绍使用Java特性文件做为配置文件的方法： </font></p>
<p><font face="Arial">一、 配置记录器。</font></p>
<p><font face="Arial">Log4j允许程序员定义多个记录器，每个记录器有自己的名字。但有一个记录器叫根记录器，它永远存在，且不能通过名字检索或引用，在配置文件中，可以如下定义根记录器：</font></p>
<pre class="CodeSamp"><font face="Arial">　　log4j.rootLogger = [ level ] , appenderName, appenderName, &#8230; </font></pre>
<p><font face="Arial">Level是记录器的级别，它是日志记录的优先级，分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别：ERROR、WARN、INFO、DEBUG：</font></p>
<pre class="CodeSamp"><font face="Arial">　　DEBUG  &lt;  INFO  &lt;  WARN  &lt;  ERROR  &lt;  FATAL</font></pre>
<p><font face="Arial">右边的级别比左边的高。如果一条log信息的级别，大于等于记录器的级别值，那么记录器就会记录它。例如level被设置为INFO级别，那么应用程序中所有的DEBUG的日志信息将不被打印出来。通过在这里定义的级别，您可以控制到应用程序中相应级别的日志信息的开关。</font></p>
<p><font face="Arial">appenderName是输出源的名字，它指定日志信息输出到哪个地方。您可以为一个记录器指定多个输出源。</font></p>
<p><font face="Arial">在一些配置文件中，你可能会看到下面的语句：</font></p>
<pre class="CodeSamp"><font face="Arial">　　log4j.rootCategory = [ level ] , appenderName, appenderName, &#8230; </font></pre>
<p><font face="Arial">在早期的Log4j版本中，org.apache.Category实现了记录器的功能，为了提高向后兼容 性，Logger扩展了Category，因此rootCategory和rootLogger是可以互换的，但最后Category将从类库中删除，因 此请使用Logger类。</font></p>
<p><font face="Arial">除了根记录器之外，log4j允许程序员定义多个记录器，每个记录器有自己的名字：</font></p>
<pre class="CodeSamp"><font face="Arial">　　log4j.logger.loggerName = [ level ] , appenderName, appenderName, &#8230; </font></pre>
<p><font face="Arial">在Log4J中Logger是具有层次关系的，Log4j支持配置的记录器之间的&#8220;父子关系&#8221;，记录器之间 通过名字来表明隶属关系（或家族关系），它们有一个共同的根，位于最上层，其它Logger遵循类似包的层次：记录器a.b,与记录器a.b.c之间是父 子关系，而记录器a与a.b.c之间是祖先与后代的关系。例如：</font></p>
<pre class="CodeSamp"><font face="Arial">    static Logger root = Logger.getRootLogger();<br />
static Logger log1 = Logger.getLogger("cc");<br />
static Logger log2 = Logger.getLogger("cc.ejb");<br />
static Logger log3 = Logger.getLogger("cc.ejb.my.TestApp");</font></pre>
<div></div>
<div><font face="Arial">上面代码中，log1是log2的父亲，是log3的祖先，而root是所有log1、log2、 log3的祖先，它们都从root中继承。所以，一般情况下，仅需要配置好rootLogger，其它子记录器都会从中继承rootLogger的配置。 如果修改了rootLogger的配置，其它所有的子记录器也会继承这种变化。这样就大大地方便了配置。</font></div>
<div></div>
<div><font face="Arial">如果一个应用中包含了上千个类都需要日志，那么我们是否需要配置上千个Logger呢？我们通过一个简 单的办法来解决这个问题： 用每一个java类文件名（包含该类的包名）定义一个记录器，这是一种有用并且直观的记录器实例名的定义方式。例如在配置文件 中定义了一个com.foo的记录器：</font></div>
<div>
<pre class="CodeSamp"><font face="Arial">　　log4j.logger.com.foo=WARN</font></pre>
</div>
<div><font face="Arial">在com.foo中的一个java类bar，我们通过其本类的名字获得一个记录器&#8220;com.foo.Bar&#8221;：</font></div>
<div><br />
<pre class="CodeSamp">
<p><font face="Arial">     package com.foo;<br />
class Bar{<br />
static Logger log=Logger.getLogger(bar.Class.getName());<br />
.....<br />
}</font></p>
</pre>
</div>
<p><font face="Arial">由于记录器com.foo.Bar 没有指定的级别，它从com.foo（在配置文件中其级别设置成WARN） 继承级别。并且这样我们就能方便的从大量log信息中判断出它们各自的来源。当然了，这不是硬性规定的，实际上Log4j没有对设置记录器的实例名做什么 限制，程序员可以根据自己的喜好随意定义。</font></p>
<p><font face="Arial">二、日志信息输出源Appender<br />
log4j 还允许日志记录请求打印到多个输出目的地，按 log4j 的叫法是输出源。一个记录器可以有多个输出源。一条log信息如果可被这个记录器处理，则该记录器会把这条信息送往每个它所拥有的输出源，以及层次结构中 更高级的输出源。例如，根记录器以控制台作为输出源，则所有可被纪录的日志都将至少打印到控制台。</font></p>
<p><font face="Arial">配置日志信息输出源，其语法为：</font></p>
<pre class="CodeSamp">
<p><font face="Arial">　　log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />
</font></p>
<p><br />
<font face="Arial">　　log4j.appender.appenderName.option1 = value1 <br />
　　&#8230; <br />
　　log4j.appender.appenderName.option = valueN </font></p>
</pre>
<p><font face="Arial">Log4j提供的appender有以下几种： </font></p>
<ul>
    <li><font face="Arial">org.apache.log4j.ConsoleAppender（控制台） </font>
    <li><font face="Arial">org.apache.log4j.FileAppender（文件） </font>
    <li><font face="Arial">org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件） </font>
    <li><font face="Arial">org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件） </font>
    <li><font face="Arial">org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方） </font>
    <li><font face="Arial">org.apache.log4j.SocketAppender (Socket) </font>
    <li><font face="Arial">org.apache.log4j.NtEventLogAppender&nbsp;&nbsp;&nbsp; (NT的Event Log) </font>
    <li><font face="Arial">org.apache.log4j.JMSAppender&nbsp;&nbsp; (电子邮件）</font> </li>
</ul>
<p><font face="Arial">请注意，可以通过覆盖缺省行为，这样就不再附加累积的输出源：</font></p>
<pre class="CodeSamp"><font face="Arial">　　log4j.additivity.loggerName=false</font></pre>
<p><font face="Arial">注意，不要把一个输出源附加到多个记录器上，否则会得到&#8220;Attempted to append to closed appender named xxx&#8221;的信息。</font></p>
<p><br />
<font face="Arial">三、配置日志信息的格式（布局），其语法为：</font></p>
<pre class="CodeSamp"><font face="Arial">　　log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class <br />
　　log4j.appender.appenderName.layout.option1 = value1 <br />
　　&#8230; <br />
　　log4j.appender.appenderName.layout.option = valueN </font></pre>
<p><font face="Arial">其中，Log4j提供的layout有以下几种： </font></p>
<ul>
    <li><font face="Arial">org.apache.log4j.HTMLLayout（以HTML表格形式布局） </font>
    <li><font face="Arial">org.apache.log4j.PatternLayout（可以灵活地指定布局模式） </font>
    <li><font face="Arial">org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串） </font>
    <li><font face="Arial">org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）</font> </li>
</ul>
<p><font face="Arial">如果采用了PatternLayout, 则Log4J采用类似C语言中的printf函数的打印格式格式化日志信息，打印参数如下：</font></p>
<ul>
    <li><font face="Arial">%m 输出代码中指定的消息 </font>
    <li><font face="Arial">%p 输出优先级，即DEBUG，INFO，WARN，ERROR，FATAL </font>
    <li><font face="Arial">%r 输出自应用启动到输出该log信息耗费的毫秒数 </font>
    <li><font face="Arial">%c 输出所属的类目，通常就是所在类的全名 </font>
    <li><font face="Arial">%t 输出产生该日志事件的线程名 </font>
    <li><font face="Arial">%n 输出一个回车换行符，Windows平台为&#8220;\r\n&#8221;，Unix平台为&#8220;\n&#8221; </font>
    <li><font face="Arial">%d 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921 </font>
    <li><font face="Arial">%l 输出日志事件的发生位置，包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main(TestLog4.java:10) </font></li>
</ul>
<p><font face="Arial">四、例子<br />
下面是一个完整的Log4j配置文件，这个配置文件指定了两个输出源stdout和R。前 者把日志信息输出到控制台，后者是一个轮转日志文件。最大的文件是100KB，当一个日志文件达到最大尺寸时，Log4J会自动把example.log 重命名为example.log.1，然后重建一个新的example.log文件，依次轮转。</font></p>
<pre class="CodeSamp">
<p><font face="Arial">log4j.rootLogger=debug, stdout, R</font></p>
<p><font face="Arial">log4j.appender.stdout=org.apache.log4j.FileAppender<br />
log4j.appender.stdout.File=System.out<br />
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout</font></p>
<p><font face="Arial"># Pattern to output the caller's file name and line number.<br />
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n</font></p>
<p><font face="Arial">log4j.appender.R=org.apache.log4j.RollingFileAppender<br />
log4j.appender.R.File=example.log</font></p>
<p><font face="Arial">log4j.appender.R.MaxFileSize=100KB<br />
# Keep one backup file<br />
log4j.appender.R.MaxBackupIndex=1</font></p>
<p><font face="Arial">log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n</font></p>
<p><font face="Arial">log4j.logger.cc.ejb.my=error,out<br />
<br />
log4j.appender.out=org.apache.log4j.ConsoleAppender<br />
log4j.appender.out.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.out.layout.ConversionPattern=%p %t %c - %m%n</font></p>
<p><font face="Arial">log4j.logger.cc.ejb.my.son=debug<br />
log4j.additivity.cc.ejb.my.son=false<br />
</font></p>
</pre>
<p><font face="Arial"><strong>在代码中使用Log4j</strong> </font></p>
<p><font face="Arial">一、得到记录器<br />
使用Log4j，第一步就是获取日志记录器，这个记录器将负责控制日志信息。其语法为： </font></p>
<pre class="CodeSamp"><font face="Arial">　　public static Logger getLogger( String name) </font></pre>
<p><font face="Arial">通过指定的名字获得记录器，如果必要的话，则为这个名字创建一个新的记录器。Name一般取本类的名字，比如： <br />
</font></p>
<pre class="CodeSamp"><font face="Arial">　　static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )</font></pre>
<p><font face="Arial">二、读取配置文件 <br />
当获得了日志记录器之后，第二步将配置Log4j环境，其语法为：<br />
</font></p>
<pre class="CodeSamp">
<p><font face="Arial">　　//自动快速地使用缺省Log4j环境。<br />
<br />
BasicConfigurator.configure ();<br />
//读取使用Java的特性文件编写的配置文件</font><font face="Arial"><br />
</font><font face="Arial">　　PropertyConfigurator.configure ( String configFilename);<br />
</font><font face="Arial">//读取XML形式的配置文件<br />
　　DOMConfigurator.configure ( String filename );</font></p>
</pre>
<p><font face="Arial">三、插入记录信息（格式化日志信息）<br />
当上两个必要步骤执行完毕，您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方，其语法如下：<br />
</font></p>
<pre class="CodeSamp"><font face="Arial">　　Logger.debug ( Object message ) ;<br />
　　Logger.info ( Object message ) ;<br />
　　Logger.warn ( Object message ) ;<br />
　　Logger.error ( Object message ) ;</font></pre>
<p><font face="Arial">四、例子</font></p>
<p><font face="Arial">我们通过下面这个简单的例子，来演示在程序如何使用Log4j，您可以修改配置文件以得到不同日志信息。</font></p>
<pre class="CodeSamp">
<p><font face="Arial">package cc.ejb.my;<br />
import org.apache.log4j.Logger;<br />
import org.apache.log4j.PropertyConfigurator;<br />
import my.son.Foo;<br />
public class TestApp {</font></p>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;  static Logger logger=Logger.getLogger(TestApp.class.getName());</font></p>
<p><font face="Arial">&nbsp;&nbsp;&nbsp;  public static void main(String[] args) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  PropertyConfigurator.configure("log4j.properties");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.info("Applcaiton Starts");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.warn("Bar Starts");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Bar bar=new Bar();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.error("Bar Errors");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  bar.doIt();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.warn("Bar  Exits");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.info("Foo Starts");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Foo foo=new Foo();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.error("Foo Errors");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  foo.doit();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.warn("Foo exits ");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.info("Applcaition Exits");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br />
&nbsp;&nbsp;&nbsp;  }</font></p>
<p><font face="Arial">}</font></p>
<p><font face="Arial">class Bar <br />
{<br />
&nbsp;&nbsp;&nbsp;  static Logger logger = Logger.getLogger(Bar.class.getName());<br />
&nbsp;&nbsp;&nbsp;  public void doIt() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  logger.debug("Did it again!");<br />
&nbsp;&nbsp;&nbsp;  }<br />
}</font></p>
<p><font face="Arial">package cc.ejb.my.son;</font></p>
<p><font face="Arial">import org.apache.log4j.Logger;</font></p>
<p><font face="Arial">public class Foo {<br />
&nbsp;&nbsp;&nbsp;  private Logger log=Logger.getLogger(Foo.class.getName());<br />
&nbsp;&nbsp;&nbsp;  public Foo() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  log.info("Foo Initialzie");<br />
&nbsp;&nbsp;&nbsp;  }<br />
&nbsp;&nbsp;&nbsp;  public void doit()<br />
&nbsp;&nbsp;&nbsp;  {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  log.debug("Do it in Foo");<br />
&nbsp;&nbsp;&nbsp;  }</font></p>
<p><font face="Arial">}</font></p>
</pre>
 <img src ="http://www.blogjava.net/cyantide/aggbug/222184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-08-15 11:00 <a href="http://www.blogjava.net/cyantide/archive/2008/08/15/222184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jgraph  开发( 转帖)</title><link>http://www.blogjava.net/cyantide/archive/2008/06/27/211003.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Fri, 27 Jun 2008 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/06/27/211003.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/211003.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/06/27/211003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/211003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/211003.html</trackback:ping><description><![CDATA[Jgraph http://www.jgraph.com/ 是一个开源的，兼容Swing的基于MVC体系结构图形组件，具有以下特点： <br />
1） 完全Swing兼容； <br />
2） 简单、高效的设计； <br />
3） 时间效率高； <br />
4） 100 %纯Java； <br />
jGraph简介 <br />
<br />
jGraph具有相当高的交互性和自动化，是一套为图定做的组件。其主要用途是在一些需要表示图结构的应用中，比如流程图、UML、交通线路、网络等等。 <br />
jGraph在本文撰写时版本为5.8.0.0，可以在链接出找到jGraph的主页。 <br />
jGraph主要包括以下一些产品： <br />
<br />
JGraph - The Java Open Source Graph Drawing Component ( 有Open Source ) <br />
JGraph Layout Pro - The Java Graph Layout Solution <br />
JGraphpad Pro Diagram Editor Framework <br />
MxGraph Thin Client - JGraph in a browser! <br />
<br />
咱们只是学习嘛，当然只用jGraph咯。jGraph Layout Pro是一个对图进行布局的软件，但是目前要收费的，jGraph对图的操作包括：图显示、图交互、图布局、图分析等。 <br />
<br />
JGraph 的基本SWING 组件如下: <br />
<br />
org.jgraph Basic JGraph 类 <br />
org.jgraph.event Graph 事件模型 <br />
org.jgraph.graph Graph 结构及结点 <br />
org.jgraph.plaf Graph UI 委托组件 <br />
org.jgraph.util 常用的工具类 <br />
<br />
补充一下，与jGraph类似的可用于绘图的还有eclipse的GEF。 <br />
<br />
jGraph模型 <br />
<br />
一张图——JGraph 类 的主要结构： <br />
JGraph extends JComponent { <br />
org.jgraph.graph.GraphModel model; (DefaultGraphModel) <br />
org.jgraph.plaf.GraphUI ui; (BasicGraphUI) <br />
org.jgraph.graph.GraphLayoutCache cache; <br />
} <br />
<br />
JGraph 除了SWING的MVC结构，即引用了MODEL和UI外，他还保持着一个奇怪的应用GraphLayoutCache。 GraphLayoutCache 可以被看作是MODEL的一个扩展，它的作用是保证图中各结点的状态以及一些外观等。因为图的复杂性，使用一个GraphLayoutCache 可以用来处理这些复杂问题。 <br />
配置JGraph可以使用一系列的set方法，有许多很有用的功能可以开关。 <br />
<br />
<br />
图的逻辑结构——GraphModel 类： <br />
满足MVC的要求，GraphModel保存着所有的图中的对象，它的默认实现DefaultGraphModel能够满足一般的需求。 <br />
GraphModel包含三个基本操作：insert() , edit() , remove() 。这些操作会起到与GraphLayoutCache相同的效果，但与GraphLayoutCache略微不同的是它的参数比较多，乍看下去比较麻烦。 其实GraphModel所要求的只是结点的逻辑结构，对于结点的细节它并不关心。所以可以在初始化图时使用GraphModel，不要常常用它的方法来 对细节做修改，这既不方便，也没必要。 <br />
另外，就是GraphModel提供了许多get方法，可以很方便检索相应的结点。 <br />
<br />
Cells <br />
<br />
JGraph 的单位（Cells） 有三种：Vertex、 Edge、 Port。 <br />
Vertex 可以携带对象，由于JGraph是只负责表示的，并不真正负责数据的操作。那么在图形和数据间就需要一个使者，这就是Vertex ，Vertex 可以是文字、图形等对象。 <br />
Port 是一般比较陌生的单位，在图的算法中并不设计Port，但在图形表示中它十分有用。如同它的名字，他是Vertex上的一个端口，可以通过端口连接其他Vertex，而在JGraph中Port还可以用于改变Edge的形状等等。 <br />
Edge 与图算法中的边也有一点不同，Edge 是只能连接Port而不是Vertex的。这样，因为多了Port单元，使得Edge更加灵活、更加丰富了。 <br />
<br />
默认单元——DefaultCell： <br />
它是DefaultEdge和DefaultPort的父类，又是DefaultMutableTreeNode的子类，其地位可以相当于Vertex。 一个DefaultCell可以携带一个UserObject。每个DefaultCell还有一个AttributeMap，负责它的属性（颜色、大小 等等）。用一套set方法可以修改AttributeMap。 <br />
<br />
边和端口单元——Edge、Port： <br />
除了继承DefaultCell，Edge、Port还有一些独有的方法。 <br />
Edge有getSource() 和 getTarget() 方法，用以获得边的两端的对象（一般为Port）。还一个路由类，定义了一些路由方法。 <br />
Port 主要任务是承载Edge，所以有一些关于获得Edge的方法。另外，Port还定义了获得锚（比如一个Vertex中包含一个Port）的方法。 <br />
<br />
Cell的处理： <br />
每个Cell包括Cell Object、Cell Renderer、Cell Editor、Cell Handle。其中Renderer负责Cell的表示，包括形状等等。Editor 做Cell的修改用，当双击Cell后则调用Editor来编辑Cell。以上都是类似与JTable 和 JTree的。 <br />
Handle 是SWING的组件中没有的，它的任务是处理Cell的大小与移动。可以重写paint()方法来指定经过鼠标拖动所导致的Cell大小和位置变化。 <br />
<br />
对于这些单元的属性的控制，可以仔细看看GraphConstants这个类的set方法，基本上所有的属性都是用这个类的set修改的。 <br />
二、JGraph设计 <br />
1） MVC <br />
Swing是Java（Sun）提供的UI标准实现之一，Swing基于AWT（Abstract Windowing Toolkit）。JGraph完全兼容Swing，它的实现仍然基于MVC体系结构。 <br />
JGraph MVC <br />
View： <br />
JGraph不包含实际的数据，它提供了数据的视；JGraph对象画图的机制是： <br />
将图元定义为一个一个的 cell，每个cell可以是一个顶点（vertex）、边（edge）或者节点（port）中的一种。顶点可以有邻接的顶点，他们通过边相联系，边联接 的两个端点称为目标和源，每个目标或者源是一个节点。节点是顶点的孩子。每个cell都可以有自己的孩子。 <br />
每个cell的外观由相应的属性定义，属性序列是指一系列的键－值对，他们以Map形式组织，例如： <br />
Map cellAttrib = new Hashtable(); <br />
// Set bounds <br />
Rectangle2D helloBounds = new Rectangle2D.Double(20, 20, 40, 20); <br />
GraphConstants.setBounds(cellAttrib, helloBounds); <br />
// Set black border <br />
GraphConstants.setBorderColor(cellAttrib, Color.black); <br />
一个cell有类似这样一个cellAttrib的Map，来定义其外观。 <br />
外观可以指定诸如一条边的箭头样式等属性。 <br />
Model： <br />
数据对象可以看成是JGraph中两个独立结构 的链接点：grahp结构和group结构。Graph结构基于图论中的顶点、边定义。Group结构是cell的composition结构。 Graph结构中getSource（）和getTarget（）方法，获得源和目标节点。而在group中通过getChild（）， getParent（）来获得cell的组成结构。 <br />
2） 低层基于图论逻辑 <br />
即：一个图G包含一个非空的元 素集V(G)和一个E（G），其中，E（G）是V（G）中两个无序元素组成的二元组。V（G）称为图G顶点的集合，如果任意集合V（G）中的顶点x/y， （x，y）在E（G）中，边（x，y）可能以连接顶点x和y的边（弧）所代表，X与y就被称为邻接的，否则x与y不邻接。 <br />
三、JGraph的应用 <br />
以下是一个基于JGraph的Helloworld的分析： <br />
<br />
<li><span><span class="keyword">import</span><span>省略 &nbsp;&nbsp;</span></span></li>
<li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;HelloWorld&nbsp;{ &nbsp;&nbsp;</span></span></li>
<li><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Construct&nbsp;Model&nbsp;and&nbsp;Graph </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>GraphModel&nbsp;model&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultGraphModel(); &nbsp;&nbsp;</span></span></li>
<li><span>JGraph&nbsp;graph&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JGraph(model); &nbsp;&nbsp;</span></span></li>
<li><span>graph.setSelectNewCells(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Create&nbsp;Nested&nbsp;Map&nbsp;(from&nbsp;Cells&nbsp;to&nbsp;Attributes) </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;此Map中记录所有属性，其中的键－值对是cell-cellAttribute </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;每个cellAttribute又是一个Map，其键－值对是具体一个cell的属性-值 </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>Map&nbsp;attributes&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Hashtable(); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;以下建立两个顶点(cell)Hello和World，并分别设置他们的属性Map </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Create&nbsp;Hello&nbsp;Vertex </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>DefaultGraphCell&nbsp;hello&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultGraphCell(</span><span class="string">"Hello"</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Create&nbsp;Hello&nbsp;Vertex&nbsp;Attributes </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>Map&nbsp;helloAttrib&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Hashtable(); &nbsp;&nbsp;</span></span></li>
<li><span>attributes.put(hello,&nbsp;helloAttrib); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Set&nbsp;bounds </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>Rectangle2D&nbsp;helloBounds&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Rectangle2D.Double(</span><span class="number">20</span><span>,&nbsp;</span><span class="number">20</span><span>,&nbsp;</span><span class="number">40</span><span>,&nbsp;</span><span class="number">20</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span>GraphConstants.setBounds(helloAttrib,&nbsp;helloBounds); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Set&nbsp;black&nbsp;border </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>GraphConstants.setBorderColor(helloAttrib,&nbsp;Color.black); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Add&nbsp;a&nbsp;Port </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;每个顶点为了与其他顶点相邻接，必须添加节点（cell） </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>DefaultPort&nbsp;hp&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultPort(); &nbsp;&nbsp;</span></span></li>
<li><span>hello.add(hp); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Create&nbsp;World&nbsp;Vertex </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>DefaultGraphCell&nbsp;world&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultGraphCell(</span><span class="string">"World"</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Create&nbsp;World&nbsp;Vertex&nbsp;Attributes </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>Map&nbsp;worldAttrib&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Hashtable(); &nbsp;&nbsp;</span></span></li>
<li><span>attributes.put(world,&nbsp;worldAttrib); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Set&nbsp;bounds </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>Rectangle2D&nbsp;worldBounds&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Rectangle2D.Double(</span><span class="number">140</span><span>,&nbsp;</span><span class="number">140</span><span>,&nbsp;</span><span class="number">40</span><span>,&nbsp;</span><span class="number">20</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span>GraphConstants.setBounds(worldAttrib&nbsp;,&nbsp;worldBounds); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Set&nbsp;fill&nbsp;color </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>GraphConstants.setBackground(worldAttrib,&nbsp;Color.orange); &nbsp;&nbsp;</span></li>
<li><span>GraphConstants.setOpaque(worldAttrib,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Set&nbsp;raised&nbsp;border </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>GraphConstants.setBorder(worldAttrib,&nbsp; &nbsp;&nbsp;</span></li>
<li><span>BorderFactory.createRaisedBevelBorder()); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Add&nbsp;a&nbsp;Port </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>DefaultPort&nbsp;wp&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultPort(); &nbsp;&nbsp;</span></span></li>
<li><span>world.add(wp); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;建立联接两个顶点的边 </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Create&nbsp;Edge </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>DefaultEdge&nbsp;edge&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DefaultEdge(); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Create&nbsp;Edge&nbsp;Attributes </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>Map&nbsp;edgeAttrib&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Hashtable(); &nbsp;&nbsp;</span></span></li>
<li><span>attributes.put(edge,&nbsp;edgeAttrib); &nbsp;&nbsp;</span></li>
<li><span class="comment">//&nbsp;Set&nbsp;Arrow </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="keyword">int</span><span>&nbsp;arrow&nbsp;=&nbsp;GraphConstants.ARROW_CLASSIC; &nbsp;&nbsp;</span></span></li>
<li><span>GraphConstants.setLineEnd(edgeAttrib&nbsp;,&nbsp;arrow); &nbsp;&nbsp;</span></li>
<li><span>GraphConstants.setEndFill(edgeAttrib,&nbsp;</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Connect&nbsp;Edge </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;边的两个端点就是两个顶点的child节点（port） </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>ConnectionSet&nbsp;cs&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;ConnectionSet(edge,&nbsp;hp,&nbsp;wp); &nbsp;&nbsp;</span></span></li>
<li><span>Object[]&nbsp;cells&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Object[]{edge,&nbsp;hello,&nbsp;world}; &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Insert&nbsp;into&nbsp;Model </span><span>&nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;model构件完成 </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>model.insert(cells,&nbsp;attributes,&nbsp;cs,&nbsp;</span><span class="keyword">null</span><span>,&nbsp;</span><span class="keyword">null</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//&nbsp;Show&nbsp;in&nbsp;Frame </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>JFrame&nbsp;frame&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JFrame(); &nbsp;&nbsp;</span></span></li>
<li><span>frame.getContentPane().add(</span><span class="keyword">new</span><span>&nbsp;JScrollPane(graph)); &nbsp;&nbsp;</span></span></li>
<li><span class="comment">//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); </span><span>&nbsp;&nbsp;</span></span></li>
<li><span>frame.pack(); &nbsp;&nbsp;</span></li>
<li><span>frame.setVisible(</span><span class="keyword">true</span><span>); &nbsp;&nbsp;</span></span></li>
<li><span>} &nbsp;&nbsp;</span></li>
<li>}&nbsp;&nbsp;</li>
<br />
 <img src ="http://www.blogjava.net/cyantide/aggbug/211003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-06-27 09:22 <a href="http://www.blogjava.net/cyantide/archive/2008/06/27/211003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java面试题</title><link>http://www.blogjava.net/cyantide/archive/2008/05/24/202584.html</link><dc:creator>cyantide</dc:creator><author>cyantide</author><pubDate>Sat, 24 May 2008 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/cyantide/archive/2008/05/24/202584.html</guid><wfw:comment>http://www.blogjava.net/cyantide/comments/202584.html</wfw:comment><comments>http://www.blogjava.net/cyantide/archive/2008/05/24/202584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cyantide/comments/commentRss/202584.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cyantide/services/trackbacks/202584.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 找工作中遇到的Java面试题&nbsp;&nbsp;<a href='http://www.blogjava.net/cyantide/archive/2008/05/24/202584.html'>阅读全文</a><img src ="http://www.blogjava.net/cyantide/aggbug/202584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cyantide/" target="_blank">cyantide</a> 2008-05-24 13:46 <a href="http://www.blogjava.net/cyantide/archive/2008/05/24/202584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>