<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>木木.blog</title>
  <link>http://nesnil.blogbus.com</link>
  <description><![CDATA[mumu~]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Thu, 01 Jan 1970 07:00:00 +0700</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/profile/1/4/4/1144441/avatar_1144441_96.jpg</url>
									<title>木木.blog</title>
									<link>http://nesnil.blogbus.com</link>
								</image>  <item>
   <title>JavaScript：prototype属性使用说明</title>
   <description><![CDATA[prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的方法，而且特殊的地方便在于：它是一个给类的对象添加方法的方法！这一点可能听起来会有点乱，别急，下面我便通过实例对这一特殊的方法作已下讲解：<br /><br />　
　首先，我们要先了解一下类的概念，JavaScript
本身是一种面向对象的语言，它所涉及的元素根据其属性的不同都依附于某一个特定的类。我们所常见的类包括：数组变量(Array)、逻辑变量
(Boolean)、日期变量(Date)、结构变量(Functi...<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/18119949.html">如何快速的呈现我们的网页</a> 2008-04-02</div><div><a href="/logs/18119655.html">十一条实用javaScript技巧(屏蔽类)</a> 2008-04-02</div><div><a href="/logs/2103009.html">常用正则表达式</a> 2006-03-21</div><div><a href="/logs/2049395.html">半小时精通正则表达式!</a> 2006-03-13</div><div><a href="/logs/2041702.html">java面试题</a> 2006-03-11</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fnesnil.blogbus.com%2Flogs%2F18120204.html&title=JavaScript%EF%BC%9Aprototype%E5%B1%9E%E6%80%A7%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://nesnil.blogbus.com/logs/18120204.html</link>
   <author>nesnil</author>
   <pubDate>Wed, 02 Apr 2008 16:23:14 +0800</pubDate>
  </item>
  <item>
   <title>如何快速的呈现我们的网页</title>
   <description><![CDATA[如何快速的呈现我们的网页 作者：flashsoft，（内容被我略修删过）。<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/18120204.html">JavaScript：prototype属性使用说明</a> 2008-04-02</div><div><a href="/logs/18119655.html">十一条实用javaScript技巧(屏蔽类)</a> 2008-04-02</div><div><a href="/logs/2103009.html">常用正则表达式</a> 2006-03-21</div><div><a href="/logs/2049395.html">半小时精通正则表达式!</a> 2006-03-13</div><div><a href="/logs/2041702.html">java面试题</a> 2006-03-11</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fnesnil.blogbus.com%2Flogs%2F18119949.html&title=%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E7%9A%84%E5%91%88%E7%8E%B0%E6%88%91%E4%BB%AC%E7%9A%84%E7%BD%91%E9%A1%B5">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://nesnil.blogbus.com/logs/18119949.html</link>
   <author>nesnil</author>
   <pubDate>Wed, 02 Apr 2008 16:16:54 +0800</pubDate>
  </item>
  <item>
   <title>十一条实用javaScript技巧(屏蔽类)</title>
   <description><![CDATA[一、屏蔽键盘所有键<br /><br />&lt;script language=&quot;javascript&quot;&gt;<br />&lt;!--<br />function document.onkeydown(){<br />event.keyCode = 0;<br />event.returnvalue = false;<br />}<br />--&gt;<br />&lt;/script&gt;<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/18120204.html">JavaScript：prototype属性使用说明</a> 2008-04-02</div><div><a href="/logs/18119949.html">如何快速的呈现我们的网页</a> 2008-04-02</div><div><a href="/logs/2103009.html">常用正则表达式</a> 2006-03-21</div><div><a href="/logs/2049395.html">半小时精通正则表达式!</a> 2006-03-13</div><div><a href="/logs/2041702.html">java面试题</a> 2006-03-11</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fnesnil.blogbus.com%2Flogs%2F18119655.html&title=%E5%8D%81%E4%B8%80%E6%9D%A1%E5%AE%9E%E7%94%A8javaScript%E6%8A%80%E5%B7%A7%28%E5%B1%8F%E8%94%BD%E7%B1%BB%29">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://nesnil.blogbus.com/logs/18119655.html</link>
   <author>nesnil</author>
   <pubDate>Wed, 02 Apr 2008 16:03:13 +0800</pubDate>
  </item>
  <item>
   <title>常用正则表达式</title>
   <description><![CDATA[<p><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^\d+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非负整数（正整数 + 0） </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[0-9]*[1-9][0-9]*$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正整数 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^((-\d+)|(0+))$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非正整数（负整数 + 0） </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^-[0-9]*[1-9][0-9]*$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">负整数 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^-?\d+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">整数 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^\d+(\.\d+)?$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非负浮点数（正浮点数 + 0） </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正浮点数 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^((-\d+(\.\d+)?)|(0+(\.0+)?))$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非正浮点数（负浮点数 + 0） </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">负浮点数 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^(-?\d+)(\.\d+)?$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">浮点数 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[A-Za-z]+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由26个英文字母组成的字符串 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[A-Z]+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由26个英文字母的大写组成的字符串 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[a-z]+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由26个英文字母的小写组成的字符串 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[A-Za-z0-9]+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由数字和26个英文字母组成的字符串 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^\w+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">由数字、26个英文字母或者下划线组成的字符串 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">email地址 </span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">url</span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" target="_blank"></a><a href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" target="_blank"></a></span><span style="COLOR: #000000">/^</span><span style="COLOR: #000000">(d</span><span id="Codehighlighter1_768_770_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_768_770_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">d</span><span id="Codehighlighter1_774_776_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_774_776_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">((</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">([</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">]</span><span id="Codehighlighter1_788_790_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_788_790_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]))</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(([</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]([</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">]</span><span id="Codehighlighter1_817_819_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_817_819_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]))$</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">  年-月-日</span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" target="_blank"></a><a href="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" target="_blank"></a></span><span style="COLOR: #000000">/^</span><span style="COLOR: #000000">((</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">([</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">]</span><span id="Codehighlighter1_858_860_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_858_860_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]))</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(([</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">]([</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">]</span><span id="Codehighlighter1_888_890_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_888_890_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]))</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(d</span><span id="Codehighlighter1_908_910_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_908_910_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">d</span><span id="Codehighlighter1_914_916_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><a href="http://www.cnblogs.com/Images/dot.gif" target="_blank"></a></span><span id="Codehighlighter1_914_916_Open_Text"><span style="COLOR: #000000">{</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">)$</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 月/日/年</span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Emil</span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">     </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">电话号码</span><span style="COLOR: #008000"><br /><a href="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" target="_blank"></a></span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$</span><span style="COLOR: #000000">&quot;</span><span style="COLOR: #000000">   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">IP地址</span><br /></p><p /><p>匹配中文字符的正则表达式： [\u4e00-\u9fa5]<br />匹配双字节字符(包括汉字在内)：[^\x00-\xff]<br />匹配空行的正则表达式：\n[\s| ]*\r<br />匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;/<br />匹配首尾空格的正则表达式：(^\s*)|(\s*$)<br />匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*<br />匹配网址URL的正则表达式：^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$<br />匹配帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$<br />匹配国内电话号码：(\d{3}-|\d{4}-)?(\d{8}|\d{7})?<br />匹配腾讯QQ号：^[1-9]*[1-9][0-9]*$<br /></p><p><u>下表是元字符及其在正则表达式上下文中的行为的一个完整列表： <br /></u><br /><strong>\</strong> 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。<br /><br /><strong>^</strong> 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性，^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。 <br /><br /><strong>$</strong> 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性，$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。 <br /><br /><strong>*</strong> 匹配前面的子表达式零次或多次。 <br /><br /><strong>+</strong> 匹配前面的子表达式一次或多次。+ 等价于 {1,}。 <br /><br /><strong>?</strong> 匹配前面的子表达式零次或一次。? 等价于 {0,1}。 <br /><br /><strong>{n}</strong> n 是一个非负整数，匹配确定的n 次。<br /><br /><strong>{n,}</strong> n 是一个非负整数，至少匹配n 次。 <br /><br /><strong>{n,m}</strong> m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。在逗号和两个数之间不能有空格。<br /><br /><strong>?</strong> 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。 <br /><br /><strong>.</strong> 匹配除 &quot;\n&quot; 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符，请使用象 ’[.\n]’ 的模式。 <br /><strong>(pattern)</strong> 匹配pattern 并获取这一匹配。 <br /><br /><strong>(?:pattern)</strong> 匹配pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。 <br /><br /><strong>(?=pattern)</strong> 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。 <br /><br /><strong>(?!pattern)</strong> 负向预查，与<strong>(?=pattern)</strong>作用相反 <br /><br /><strong>x|y</strong> 匹配 x 或 y。 <br /><br /><strong>[xyz]</strong> 字符集合。 <br /><br /><strong>[^xyz]</strong> 负值字符集合。 <br /><br /><strong>[a-z]</strong> 字符范围，匹配指定范围内的任意字符。 <br /><br /><strong>[^a-z]</strong> 负值字符范围，匹配任何不在指定范围内的任意字符。 <br /><br /><strong>\b</strong> 匹配一个单词边界，也就是指单词和空格间的位置。<br /><br /><strong>\B</strong> 匹配非单词边界。 <br /><br /><strong>\cx</strong> 匹配由x指明的控制字符。 <br /><br /><strong>\d</strong> 匹配一个数字字符。等价于 [0-9]。 <br /><br /><strong>\D</strong> 匹配一个非数字字符。等价于 [^0-9]。 <br /><br /><strong>\f</strong> 匹配一个换页符。等价于 \x0c 和 \cL。 <br /><br /><strong>\n</strong> 匹配一个换行符。等价于 \x0a 和 \cJ。 <br /><br /><strong>\r</strong> 匹配一个回车符。等价于 \x0d 和 \cM。 <br /><br /><strong>\s</strong> 匹配任何空白字符，包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。 <br /><br /><strong>\S</strong> 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 <br /><br /><strong>\t</strong> 匹配一个制表符。等价于 \x09 和 \cI。 <br /><br /><strong>\v</strong> 匹配一个垂直制表符。等价于 \x0b 和 \cK。 <br /><br /><strong>\w</strong> 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。 <br /><br /><strong>\W</strong> 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。 <br /><br /><strong>\xn</strong> 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。<br /><br /><strong>\num</strong> 匹配 num，其中num是一个正整数。对所获取的匹配的引用。 <br /><br /><strong>\n</strong> 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为后向引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。 <br /><br /><strong>\nm</strong> 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有is preceded by at least nm 个获取得子表达式，则 nm 为后向引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的后向引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。 <br /><br /><strong>\nml</strong> 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。 <br /><br /><strong>\un</strong> 匹配 n，其中 n 是一个用四个十六进制数字表示的Unicode字符。 <br /></p><p>匹配中文字符的正则表达式： [u4e00-u9fa5]</p><p>匹配双字节字符(包括汉字在内)：[^x00-xff]</p><p>应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）</p><p>String.prototype.len=function(){return this.replace([^x00-xff]/g,&quot;aa&quot;).length;}</p><p>匹配空行的正则表达式：n[s| ]*r</p><p>匹配HTML标记的正则表达式：/&lt;(.*)&gt;.*&lt;/1&gt;|&lt;(.*) /&gt;/ </p><p>匹配首尾空格的正则表达式：(^s*)|(s*$)</p><p>应用：javascript中没有像vbscript那样的trim函数，我们就可以利用这个表达式来实现，如下：</p><p>String.prototype.trim = function()<br />{<br />return this.replace(/(^s*)|(s*$)/g, &quot;&quot;);<br />}</p><p>利用正则表达式分解和转换IP地址：</p><p>下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序：</p><p>function IP2V(ip)<br />{<br />re=/(d+).(d+).(d+).(d+)/g //匹配IP地址的正则表达式<br />if(re.test(ip))<br />{<br />return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1<br />}<br />else<br />{<br />throw new Error(&quot;Not a valid IP address!&quot;)<br />}<br />}</p><p>不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：</p><p>var ip=&quot;10.100.20.168&quot;<br />ip=ip.split(&quot;.&quot;)<br />alert(&quot;IP值是：&quot;+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))</p><p>匹配Email地址的正则表达式：w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*</p><p>匹配网址URL的正则表达式：http://([w-]+.)+[w-]+(/[w- ./?%&amp;=]*)?</p><p>利用正则表达式去除字串中重复的字符的算法程序：</p><p>var s=&quot;abacabefgeeii&quot;<br />var s1=s.replace(/(.).*1/g,&quot;$1&quot;)<br />var re=new RegExp(&quot;[&quot;+s1+&quot;]&quot;,&quot;g&quot;)<br />var s2=s.replace(re,&quot;&quot;) <br />alert(s1+s2) //结果为：abcefgi</p><p>我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方法对于字符顺序有要求的字符串可能不适用。</p><p>得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1</p><p>s=&quot;http://www.9499.net/page1.htm&quot;<br />s=s.replace(/(.*/){0,}([^.]+).*/ig,&quot;$2&quot;)<br />alert(s)</p><p>利用正则表达式限制网页表单里的文本框输入内容：</p><p>用正则表达式限制只能输入中文：onkeyup=&quot;value=value.replace(/[^u4E00-u9FA5]/g,'')&quot; onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^u4E00-u9FA5]/g,''))&quot;</p><p>用正则表达式限制只能输入全角字符： onkeyup=&quot;value=value.replace(/[^uFF00-uFFFF]/g,'')&quot; onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^uFF00-uFFFF]/g,''))&quot;</p><p>用正则表达式限制只能输入数字：onkeyup=&quot;value=value.replace(/[^d]/g,'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))&quot;</p><p>用正则表达式限制只能输入数字和英文：onkeyup=&quot;value=value.replace(/[W]/g,'') &quot;onbeforepaste=&quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^d]/g,''))&quot;</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/18120204.html">JavaScript：prototype属性使用说明</a> 2008-04-02</div><div><a href="/logs/18119949.html">如何快速的呈现我们的网页</a> 2008-04-02</div><div><a href="/logs/18119655.html">十一条实用javaScript技巧(屏蔽类)</a> 2008-04-02</div><div><a href="/logs/2049395.html">半小时精通正则表达式!</a> 2006-03-13</div><div><a href="/logs/2041702.html">java面试题</a> 2006-03-11</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fnesnil.blogbus.com%2Flogs%2F2103009.html&title=%E5%B8%B8%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://nesnil.blogbus.com/logs/2103009.html</link>
   <author>nesnil</author>
   <pubDate>Tue, 21 Mar 2006 10:18:34 +0800</pubDate>
  </item>
  <item>
   <title>半小时精通正则表达式!</title>
   <description><![CDATA[<DIV id=logcontent>我学正则表达式!&nbsp;<BR>&nbsp;&nbsp;&nbsp;想必很多人都对正则表达式都头疼.今天,我以我的认识,加上网上一些文章,希望用常人都可以理解的表达方式.来和大家分享学习经验.<BR><BR>&nbsp;&nbsp;开篇,还是得说说&nbsp;^&nbsp;&nbsp;和&nbsp;&nbsp;$&nbsp;&nbsp;他们是分别用来匹配字符串的开始和结束，以下分别举例说明&nbsp;<BR><BR><BR>"^The":&nbsp;开头一定要有"The"字符串;&nbsp;<BR>"of&nbsp;despair$":&nbsp;&nbsp;结尾一定要有"of&nbsp;despair"&nbsp;的字符串;&nbsp;<BR><BR><BR>那么,<BR>"^abc$":&nbsp;就是要求以abc开头和以abc结尾的字符串，实际上是只有abc匹配&nbsp;<BR>"notice":&nbsp;匹配包含notice的字符串&nbsp;<BR><BR><BR>你可以看见如果你没有用我们提到的两个字符（最后一个例子），就是说&nbsp;模式（正则表达式）&nbsp;可以出现在被检验字符串的任何地方，你没有把他锁定到两边&nbsp;<BR><BR>接着,说说&nbsp;'*',&nbsp;'+',和&nbsp;'?',&nbsp;<BR>他们用来表示一个字符可以出现的次数或者顺序.&nbsp;他们分别表示：<BR>"zero&nbsp;or&nbsp;more"相当于{0,},&nbsp;<BR>"one&nbsp;or&nbsp;more"相当于{1,},&nbsp;<BR>"zero&nbsp;or&nbsp;one."相当于{0,1},&nbsp;&nbsp;这里是一些例子:&nbsp;<BR><BR><BR>"ab*":&nbsp;&nbsp;和ab{0,}同义,匹配以a开头,后面可以接0个或者N个b组成的字符串("a",&nbsp;"ab",&nbsp;"abbb",&nbsp;等);&nbsp;<BR>"ab+":&nbsp;和ab{1,}同义,同上条一样，但最少要有一个b存在&nbsp;("ab",&nbsp;"abbb",&nbsp;等.);&nbsp;<BR>"ab?":和ab{0,1}同义,可以没有或者只有一个b;&nbsp;<BR>"a?b+$":&nbsp;匹配以一个或者0个a再加上一个以上的b结尾的字符串.&nbsp;<BR><BR>要点,&nbsp;'*',&nbsp;'+',和&nbsp;'?'只管它前面那个字符.<BR><BR><BR>你也可以在大括号里面限制字符出现的个数，比如&nbsp;<BR><BR><BR>"ab{2}":&nbsp;要求a后面一定要跟两个b（一个也不能少）("abb");&nbsp;<BR>"ab{2,}":&nbsp;要求a后面一定要有两个或者两个以上b(如"abb",&nbsp;"abbbb",&nbsp;等.);&nbsp;<BR>"ab{2,5}":&nbsp;要求a后面可以有2－5个b("abbb",&nbsp;"abbbb",&nbsp;or&nbsp;"abbbbb").&nbsp;<BR><BR>&nbsp;<BR><BR>现在我们把一定几个字符放到小括号里，比如：<BR><BR>"a(bc)*":&nbsp;匹配&nbsp;a&nbsp;后面跟0个或者一个"bc";&nbsp;<BR>"a(bc){1,5}":&nbsp;一个到5个&nbsp;"bc."&nbsp;<BR><BR><BR>还有一个字符&nbsp;'│',&nbsp;相当于OR&nbsp;操作:&nbsp;<BR><BR><BR>"hi│hello":&nbsp;匹配含有"hi"&nbsp;或者&nbsp;"hello"&nbsp;的&nbsp;字符串;&nbsp;<BR>"(b│cd)ef":&nbsp;匹配含有&nbsp;"bef"&nbsp;或者&nbsp;"cdef"的字符串;&nbsp;<BR>"(a│b)*c":&nbsp;匹配含有这样多个（包括0个）a或b，后面跟一个c&nbsp;<BR>的字符串;&nbsp;<BR><BR><BR>一个点('.')可以代表所有的单一字符,不包括"\n"<BR><BR>如果,要匹配包括"\n"在内的所有单个字符,怎么办?<BR><BR>对了,用'[\n.]'这种模式.<BR><BR><BR>"a.[0-9]":&nbsp;一个a加一个字符再加一个0到9的数字&nbsp;<BR>"^.{3}$":&nbsp;三个任意字符结尾&nbsp;.&nbsp;<BR><BR>&nbsp;<BR><BR><BR>中括号括住的内容只匹配一个单一的字符&nbsp;<BR><BR><BR>"[ab]":&nbsp;匹配单个的&nbsp;a&nbsp;或者&nbsp;b&nbsp;(&nbsp;和&nbsp;"a│b"&nbsp;一样);&nbsp;<BR>"[a-d]":&nbsp;匹配'a'&nbsp;到'd'的单个字符&nbsp;(和"a│b│c│d"&nbsp;还有&nbsp;"[abcd]"效果一样);&nbsp;一般我们都用[a-zA-Z]来指定字符为一个大小写英文<BR>"^[a-zA-Z]":&nbsp;匹配以大小写字母开头的字符串&nbsp;<BR>"[0-9]%":&nbsp;匹配含有&nbsp;形如&nbsp;x％&nbsp;的字符串&nbsp;<BR>",[a-zA-Z0-9]$":&nbsp;匹配以逗号再加一个数字或字母结尾的字符串&nbsp;<BR><BR><BR>你也可以把你不想要得字符列在中括号里，你只需要在总括号里面使用'^'&nbsp;作为开头&nbsp;"%[^a-zA-Z]%"&nbsp;匹配含有两个百分号里面有一个非字母的字符串.&nbsp;<BR><BR>要点:^用在中括号开头的时候,就表示排除括号里的字符&nbsp;<BR><BR>为了PHP能够解释，你必须在这些字符面前后加'',并且将一些字符转义.&nbsp;<BR><BR>不要忘记在中括号里面的字符是这条规路的例外—在中括号里面,&nbsp;所有的特殊字符，包括(''),&nbsp;都将失去他们的特殊性质&nbsp;"[*\+?{}.]"匹配含有这些字符的字符串.<BR><BR>&nbsp;还有,正如regx的手册告诉我们:&nbsp;"如果列表里含有&nbsp;']',&nbsp;最好把它作为列表里的第一个字符(可能跟在'^'后面).&nbsp;如果含有'-',&nbsp;最好把它放在最前面或者最后面,&nbsp;or&nbsp;或者一个范围的第二个结束点[a-d-0-9]中间的‘-’将有效.&nbsp;<BR><BR>看了上面的例子,你对{n,m}应该理解了吧.要注意的是,n和m都不能为负整数,而且n总是小于m.&nbsp;这样,才能&nbsp;最少匹配n次且最多匹配m次.&nbsp;如"p{1,5}"将匹配&nbsp;"pvpppppp"中的前五个p<BR><BR>下面说说以\开头的<BR><BR>\b&nbsp;书上说他是用来匹配一个单词边界,就是...比如've\b',可以匹配love里的ve而不匹配very里有ve<BR><BR>\B&nbsp;正好和上面的\b相反.例子我就不举了<BR><BR>.....突然想起来....可以到<A href="http://www.phpv.net/article.php/251" target=_blank>http://www.phpv.net/article.php/251</A>&nbsp;看看其它用\&nbsp;开头的语法<BR><BR>&nbsp;<BR><BR>好,我们来做个应用:<BR><BR>如何构建一个模式来匹配&nbsp;货币数量&nbsp;的输入&nbsp;<BR><BR>构建一个匹配模式去检查输入的信息是否为一个表示money的数字。我们认为一个表示money的数量有四种方式：&nbsp;"10000.00"&nbsp;和&nbsp;"10,000.00",或者没有小数部分,&nbsp;"10000"&nbsp;and&nbsp;"10,000".&nbsp;现在让我们开始构建这个匹配模式:&nbsp;<BR><BR>^[1-9][0-9]*$&nbsp;<BR><BR>这是所变量必须以非0的数字开头.但这也意味着&nbsp;单一的&nbsp;"0"&nbsp;也不能通过测试.&nbsp;以下是解决的方法:&nbsp;<BR><BR>^(0│[1-9][0-9]*)$&nbsp;<BR><BR>"只有0和不以0开头的数字与之匹配"，我们也可以允许一个负号在数字之前:&nbsp;<BR><BR>^(0│-?[1-9][0-9]*)$&nbsp;<BR><BR>这就是:&nbsp;"0&nbsp;或者&nbsp;一个以0开头&nbsp;且可能&nbsp;有一个负号在前面的数字."&nbsp;好了,现在让我们别那么严谨，允许以0开头.现在让我们放弃&nbsp;负号&nbsp;,&nbsp;因为我们在表示钱币的时候并不需要用到.&nbsp;我们现在指定&nbsp;模式&nbsp;用来匹配小数部分:&nbsp;<BR><BR>^[0-9]+(\.[0-9]+)?$&nbsp;<BR><BR>这暗示匹配的字符串必须最少以一个阿拉伯数字开头.&nbsp;但是注意，在上面模式中&nbsp;"10."&nbsp;是不匹配的,&nbsp;只有&nbsp;"10"&nbsp;和&nbsp;"10.2"&nbsp;才可以.&nbsp;（你知道为什么吗）&nbsp;<BR><BR>^[0-9]+(\.[0-9]{2})?$&nbsp;<BR><BR>我们上面指定小数点后面必须有两位小数.如果你认为这样太苛刻,你可以改成:&nbsp;<BR><BR>^[0-9]+(\.[0-9]{1,2})?$&nbsp;<BR><BR>这将允许小数点后面有一到两个字符.&nbsp;现在我们加上用来增加可读性的逗号（每隔三位）,&nbsp;我们可以这样表示:&nbsp;<BR><BR>^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$&nbsp;<BR><BR>不要忘记&nbsp;'+'&nbsp;可以被&nbsp;'*'&nbsp;替代&nbsp;如果你想允许空白字符串被输入话&nbsp;(为什么?).&nbsp;也不要忘记反斜杆&nbsp;’\’&nbsp;在php字符串中可能会出现错误&nbsp;(很普遍的错误).&nbsp;<BR><BR>现在，我们已经可以确认字符串了,&nbsp;我们现在把所有逗号都去掉&nbsp;str_replace(",",&nbsp;"",&nbsp;$money)&nbsp;然后在把类型看成&nbsp;double然后我们就可以通过他做数学计算了.&nbsp;<BR><BR><BR>再来一个:<BR><BR>构造检查email的正则表达式&nbsp;<BR><BR>&nbsp;在一个完整的email地址中有三个部分:&nbsp;<BR>1.&nbsp;用户名&nbsp;(在&nbsp;'@'&nbsp;左边的一切),&nbsp;<BR>2.'@',<BR>3.&nbsp;服务器名(就是剩下那部分).&nbsp;<BR><BR>用户名可以含有大小写字母阿拉伯数字,句号&nbsp;('.'),&nbsp;减号('-'),&nbsp;and&nbsp;下划线&nbsp;('_').&nbsp;服务器名字也是符合这个规则,当然下划线除外.&nbsp;<BR><BR>现在,&nbsp;用户名的开始和结束都不能是句点.&nbsp;服务器也是这样.&nbsp;还有你不能有两个连续的句点他们之间至少存在一个字符，好现在我们来看一下怎么为用户名写一个匹配模式:&nbsp;<BR><BR>^[_a-zA-Z0-9-]+$&nbsp;<BR><BR>现在还不能允许句号的存在.&nbsp;我们把它加上:&nbsp;<BR><BR>^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$&nbsp;<BR><BR>上面的意思就是说:&nbsp;"以至少一个规范字符（除了.）开头,后面跟着0个或者多个以点开始的字符串."&nbsp;<BR><BR>简单化一点,&nbsp;我们可以用&nbsp;eregi()取代&nbsp;ereg().eregi()对大小写不敏感,&nbsp;我们就不需要指定两个范围&nbsp;"a-z"&nbsp;和&nbsp;"A-Z"&nbsp;–&nbsp;只需要指定一个就可以了:&nbsp;<BR><BR>^[_a-z0-9-]+(\.[_a-z0-9-]+)*$&nbsp;<BR><BR>后面的服务器名字也是一样,但要去掉下划线:&nbsp;<BR><BR>^[a-z0-9-]+(\.[a-z0-9-]+)*$&nbsp;<BR><BR>好.&nbsp;现在只需要用”@”把两部分连接:&nbsp;<BR><BR>^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$&nbsp;<BR><BR><BR>这就是完整的email认证匹配模式了,只需要调用&nbsp;<BR><BR>eregi(‘^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$&nbsp;’,$eamil)&nbsp;<BR><BR>就可以得到是否为email了&nbsp;<BR>正则表达式的其他用法&nbsp;<BR><BR>提取字符串&nbsp;<BR><BR>ereg()&nbsp;and&nbsp;eregi()&nbsp;有一个特性是允许用户通过正则表达式去提取字符串的一部分(具体用法你可以阅读手册).&nbsp;比如说,我们想从&nbsp;path/URL&nbsp;提取文件名&nbsp;–&nbsp;下面的代码就是你需要:&nbsp;<BR><BR>ereg("([^\\/]*)$",&nbsp;$pathOrUrl,&nbsp;$regs);&nbsp;<BR>echo&nbsp;$regs[1];&nbsp;<BR><BR>高级的代换&nbsp;<BR><BR>ereg_replace()&nbsp;和&nbsp;eregi_replace()也是非常有用的:&nbsp;假如我们想把所有的间隔负号都替换成逗号:&nbsp;<BR><BR><BR>ereg_replace("[&nbsp;\n\r\t]+",&nbsp;",",&nbsp;trim($str));<BR><BR>最后,我把另一串检查EMAIL的正则表达式让看文章的你来分析一下.<BR><BR>"^[-!#$%&amp;\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.'@'.'[-!#$%&amp;\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&amp;\'*+\\./0-9=?A-Z^_`a-z{|}~]+$"<BR><BR>如果能方便的读懂,那这篇文章的目的就达到了.<BR><BR>另:如果你发现以上文中有任何错误,请指正.如果要转载,请确定有链接到本页<BR></DIV><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/18120204.html">JavaScript：prototype属性使用说明</a> 2008-04-02</div><div><a href="/logs/18119949.html">如何快速的呈现我们的网页</a> 2008-04-02</div><div><a href="/logs/18119655.html">十一条实用javaScript技巧(屏蔽类)</a> 2008-04-02</div><div><a href="/logs/2103009.html">常用正则表达式</a> 2006-03-21</div><div><a href="/logs/2041702.html">java面试题</a> 2006-03-11</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fnesnil.blogbus.com%2Flogs%2F2049395.html&title=%E5%8D%8A%E5%B0%8F%E6%97%B6%E7%B2%BE%E9%80%9A%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%21">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://nesnil.blogbus.com/logs/2049395.html</link>
   <author>nesnil</author>
   <pubDate>Mon, 13 Mar 2006 11:59:58 +0800</pubDate>
  </item>
  <item>
   <title>java面试题</title>
   <description><![CDATA[<p>1.C++或Java中的异常处理机制的简单原理和应用。 </p><p>当J***A程序违反了J***A的语义规则时，J***A虚拟机就会将发生的错误表示为一个异 <br />常。违反语义规则包括2种情况。一种是J***A类库内置的语义检查。例如数组下标越 <br />界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerExce <br />ption。另一种情况就是J***A允许程序员扩展这种语义检查，程序员可以创建自己的 <br />异常，并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Tho <br />wable的子类。 </p><p>2. Java的接口和C++的虚类的相同和不同处。 </p><p>由于Java不支持多继承，而有可能某个类或对象要使用分别在几个类或对象里面的 <br />方法或属性，现有的单继承机制就不能满足要求。与继承相比，接口有更高的灵活 <br />性，因为接口中没有任何实现代码。当一个类实现了接口以后，该类要实现接口里 <br />面所有的方法和属性，并且接口里面的属性在默认状态下面都是public static,所 <br />有方法默认情况下是public.一个类可以实现多个接口。 </p><p>3. 垃圾回收的优点和原理。并考虑2种回收机制。 </p><p>Java语言中一个显著的特点就是引入了垃圾回收机制，使c++程序员最头疼的内存管 <br />理的问题迎刃而解，它使得Java程序员在编写程序的时候不再需要考虑内存管理。 <br />由于有个垃圾回收机制，Java中的对象不再有“作用域”的概念，只有对象的引用 <br />才有“作用域”。垃圾回收可以有效的防止内存泄露，有效的使用可以使用的内存 <br />。垃圾回收器通常是作为一个单独的低级别的线程运行，不可预知的情况下对内存 <br />堆中已经死亡的或者长时间没有使用的对象进行清楚和回收，程序员不能实时的调 <br />用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收 <br />和标记垃圾回收，增量垃圾回收。 </p><p>4. 请说出你所知道的线程同步的方法。 </p><p>wait():使一个线程处于等待状态，并且释放所持有的对象的lock。 </p><p>sleep():使一个正在运行的线程处于睡眠状态，是一个静态方法，调用此方法要捕 <br />捉InterruptedException异常。 </p><p>notify():唤醒一个处于等待状态的线程，注意的是在调用此方法的时候，并不能确 <br />切的唤醒某一个等待状态的线程，而是由JVM确定唤醒哪个线程，而且不是按优先级 <br />。 </p><p>Allnotity():唤醒所有处入等待状态的线程，注意并不是给所有唤醒线程一个对象 <br />的锁，而是让它们竞争。 </p><p>5. 请讲一讲析构函数和虚函数的用法和作用。 </p><p>6. Error与Exception有什么区别？ </p><p>Error表示系统级的错误和程序不必处理的异常， </p><p>Exception表示需要捕捉或者需要程序进行处理的异常。 </p><p>7. 在java中一个类被声明为final类型，表示了什么意思？ </p><p>表示该类不能被继承，是顶级类。 </p><p>8. 描述一下你最常用的编程风格。 </p><p>9. heap和stack有什么区别。 </p><p>栈是一种线形集合，其添加和删除元素的操作应在同一段完成。栈按照后进先出的 <br />方式进行处理。 </p><p>堆是栈的一个组成元素 </p><p>10. 如果系统要使用超大整数（超过long长度范围），请你设计一个数据结构来存 <br />储这种超大型数字以及设计一种算法来实现超大整数加法运算）。 </p><p>public class BigInt() </p><p>{ </p><p>int[] ArrOne = new ArrOne[1000]; </p><p>String intString=&quot;&quot;; </p><p>public int[] Arr(String s) </p><p>{ </p><p>intString = s; </p><p>for(int i=0;i&lt;ArrOne.leght;i++) </p><p>{ </p><p>11. 如果要设计一个图形系统，请你设计基本的图形元件(Point,Line,Rectangle, <br />Triangle)的简单实现 </p><p>12，谈谈final, finally, finalize的区别。 </p><p>　　final—修饰符（关键字）如果一个类被声明为final，意味着它不能再派生出 <br />新的子类，不能作为父类被继承。因此一个类不能既被声明为 abstract的，又被声 <br />明为final的。将变量或方法声明为final，可以保证它们在使用中不被改变。被声 <br />明为final的变量必须在声明时给定初值，而在以后的引用中只能读取，不可修改。 <br />被声明为final的方法也同样只能使用，不能重载。 </p><p>　　finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个 <br />异常，那么相匹配的 catch 子句就会执行，然后控制就会进入 finally 块（如果 <br />有的话）。 </p><p>　　finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象 <br />从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对 <br />象没有被引用时对这个对象调用的。它是在 Object 类中定义的，因此所有的类都 <br />继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。fi <br />nalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 </p><p>13，Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类，是否 <br />可以implements(实现)interface(接口)? </p><p>　　匿名的内部类是没有名字的内部类。不能extends(继承) 其它类，但一个内部 <br />类可以作为一个接口，由另一个内部类实现。 </p><p /><p>14，Static Nested Class 和 Inner Class的不同，说得越多越好(面试题有的很笼 <br />统)。 </p><p>　　Nested Class （一般是C++的说法），Inner Class (一般是J***A的说法)。Ja <br />va内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: <br />//www.frontfree.net/articles/services/view.asp?id=704&amp;page=1 </p><p>　　注： 静态内部类（Inner Class）意味着1创建一个static内部类的对象，不需 <br />要一个外部类对象，2不能从一个static内部类的一个对象访问一个外部类对象 </p><p>第四，&amp;和&amp;&amp;的区别。 </p><p>　　&amp;是位运算符。&amp;&amp;是布尔逻辑运算符。 </p><p>15，HashMap和Hashtable的区别。 </p><p /><p>　　都属于Map接口的类，实现了将惟一键映射到特定的值上。 </p><p /><p>　　HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。 </p><p>　　Hashtable 类似于 HashMap，但是不允许 null 键和 null 值。它也比 HashM <br />ap 慢，因为它是同步的。 </p><p>16，Collection 和 Collections的区别。 </p><p>　　Collections是个java.util下的类，它包含有各种有关集合操作的静态方法。 </p><p><br />　　Collection是个java.util下的接口，它是各种集合结构的父接口。 </p><p>17，什么时候用assert。 </p><p>　　断言是一个包含布尔表达式的语句，在执行这个语句时假定该表达式为 true。 <br />如果表达式计算为 false，那么系统会报告一个 Assertionerror。它用于调试目的 <br />： </p><p>assert(a &gt; 0); // throws an Assertionerror if a &lt;= 0 </p><p>断言可以有两种形式： </p><p>assert Expression1 ; </p><p>assert Expression1 : Expression2 ; </p><p>　　Expression1 应该总是产生一个布尔值。 </p><p>　　Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试 <br />信息的 String 消息。 </p><p>　　断言在默认情况下是禁用的。要在编译时启用断言，需要使用 source 1.4 标 <br />记： </p><p>　　javac -source 1.4 Test.java </p><p>　　要在运行时启用断言，可使用 -enableassertions 或者 -ea 标记。 </p><p>　　要在运行时选择禁用断言，可使用 -da 或者 -disableassertions 标记。 </p><p>　　要系统类中启用断言，可使用 -esa 或者 -dsa 标记。还可以在包的基础上启 <br />用或者禁用断言。 </p><p>　　可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传 <br />递给私有方法的参数。不过，断言不应该用于验证传递给公有方法的参数，因为不 <br />管是否启用了断言，公有方法都必须检查其参数。不过，既可以在公有方法中，也 <br />可以在非公有方法中利用断言测试后置条件。另外，断言不应该以任何方式改变程 <br />序的状态。 </p><p>18，GC是什么? 为什么要有GC? (基础)。 </p><p>　　GC是垃圾收集器。Java 程序员不用担心内存管理，因为垃圾收集器会自动进行 <br />管理。要请求垃圾收集，可以调用下面的方法之一： </p><p>System.gc() </p><p>Runtime.getRuntime().gc() </p><p>19，String s = new String(&quot;xyz&quot;);创建了几个String Object? </p><p>　　两个对象，一个是“xyx”,一个是指向“xyx”的引用对象s。 </p><p>20，Math.round(11.5)等於多少? Math.round(-11.5)等於多少? </p><p>　　Math.round(11.5)返回（long）12，Math.round(-11.5)返回（long）-11; </p><p>21，short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? </p><p><br />　　short s1 = 1; s1 = s1 + 1;有错，s1是short型，s1+1是int型,不能显式转化 <br />为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。 </p><p>22，sleep() 和 wait() 有什么区别? 搞线程的最爱 </p><p>　　sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后，线程不 <br />一定立即恢复执行。这是因为在那个时刻，其它线程可能正在运行而且没有被调度 <br />为放弃执行，除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其 <br />它原因而阻塞。 </p><p>　　wait()是线程交互时，如果线程对一个同步对象x 发出一个wait()调用，该线 <br />程会暂停执行，被调对象进入等待状态，直到被唤醒或等待时间到。 </p><p>23，Java有没有goto? </p><p>　　Goto—java中的保留字，现在没有在java中使用。 </p><p /><p>24，数组有没有length()这个方法? String有没有length()这个方法？ </p><p>　　数组没有length()这个方法，有length的属性。 </p><p>　　String有有length()这个方法。 </p><p>25，Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? </p><p><br />　　方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Ove <br />rriding是父类与子类之间多态性的一种表现，重载Overloading是一个类中多态性 <br />的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方 <br />法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它 <br />而言，父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法， <br />它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。 <br />Overloaded的方法是可以改变返回值的类型。 </p><p>26，Set里的元素是不能重复的，那么用什么方法来区分重复与否呢? 是用==还是e <br />quals()? 它们有何区别? </p><p>　　Set里的元素是不能重复的，那么用iterator()方法来区分重复与否。equals( <br />)是判读两个Set是否相等。 </p><p>　　equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖，为的 <br />是当两个分离的对象的内容和类型相配的话，返回真值。 </p><p>27，给我一个你最常见到的runtime exception。 </p><p>ArithmeticException, ArrayStoreException, BufferOverflowException, Buffe <br />rUnderflowException, CannotRedoException, CannotUndoException, ClassCast <br />Exception, CMMException, ConcurrentModificationException, DOMException, <br />EmptyStackException, IllegalArgumentException, IllegalMonitorStateExcept <br />ion, IllegalPathStateException, IllegalStateException, </p><p>ImagingOpException, IndexOutOfBoundsException, MissingResourceException, <br />NegativeArraySizeException, NoSuchElementException, NullPointerExceptio <br />n, ProfileDataException, ProviderException, RasterFORMatException, Secur <br />ityException, SystemException, UndeclaredThrowableException, Unmodifiabl <br />eSetException, UnsupportedOperationException </p><p>28，error和exception有什么区别? </p><p>　　error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢 <br />出。不可能指望程序能处理这样的情况。 </p><p>　　exception 表示一种设计或实现问题。也就是说，它表示如果程序运行正常， <br />从不会发生的情况。 </p><p>29，List, Set, Map是否继承自Collection接口? </p><p>List，Set是 </p><p>Map不是 </p><p>30，abstract class和interface有什么区别? </p><p>　　声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于 <br />要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类 <br />的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象 <br />类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abst <br />ract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取 <br />而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 </p><p>　　接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承 <br />性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序 <br />体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现 <br />类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予） <br />所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的 <br />方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将 <br />生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决 <br />定某对象的类是否实现了接口。 </p><p /><p /><p>31，abstract的method是否可同时是static,是否可同时是native，是否可同时是s <br />ynchronized? </p><p>　　都不能 </p><p>32，接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继 <br />承实体类(concrete class)? </p><p>　　接口可以继承接口。抽象类可以实现(implements)接口，抽象类是否可继承实 <br />体类，但前提是实体类必须有明确的构造函数。 </p><p>33，启动一个线程是用run()还是start()? </p><p>　　启动一个线程是调用start()方法，使线程所代表的虚拟处理机处于可运行状态 <br />，这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法 <br />可以产生必须退出的标志来停止一个线程。 </p><p>34，构造器Constructor是否可被override? </p><p>　　构造器Constructor不能被继承，因此不能重写Overriding，但可以被重载Ove <br />rloading。 </p><p>35，是否可以继承String类? </p><p>　　String类是final类故不可以继承。 </p><p>36，当一个线程进入一个对象的一个synchronized方法后，其它线程是否可进入此 <br />对象的其它方法? </p><p>　　不能，一个对象的一个synchronized方法只能由一个线程访问。 </p><p>37，try {}里有一个return语句，那么紧跟在这个try后的finally {}里的code会不 <br />会被执行，什么时候被执行，在return前还是后? </p><p>　　会执行，在return前执行。 </p><p>38，编程题: 用最有效率的方法算出2乘以8等於几? </p><p>　　有C背景的程序员特别喜欢问这种问题。 </p><p>　　2 &lt;&lt; 3 </p><p>39，两个对象值相同(x.equals(y) == true)，但却可有不同的hash code，这句话 <br />对不对? </p><p>　　不对，有相同的hash code。 </p><p>40，当一个对象被当作参数传递到一个方法后，此方法可改变这个对象的属性，并 <br />可返回变化后的结果，那么这里到底是值传递还是引用传递? </p><p>　　是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传 <br />递到方法中时，参数的值就是对该对象的引用。对象的内容可以在被调用的方法中 <br />改变，但对象的引用是永远不会改变的。 </p><p>41，swtich是否能作用在byte上，是否能作用在long上，是否能作用在String上? </p><p>　　switch（expr1）中，expr1是一个整数表达式。因此传递给 switch 和 case <br />语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于s <br />wtich。 </p><p>42，编程题: 写一个Singleton出来。 </p><p>　　Singleton模式主要作用是保证在Java应用程序中，一个类Class只有一个实例 <br />存在。 </p><p>　　一般Singleton模式通常有几种种形式： </p><p>　　第一种形式：定义一个类，它的构造函数为private的，它有一个static的pri <br />vate的该类变量，在类初始化时实例话，通过一个public的getInstance方法获取对 <br />它的引用,继而调用其中的方法。 </p><p>public class Singleton { </p><p>　　private Singleton(){} </p><p>　　//在自己内部定义自己一个实例，是不是很奇怪？ </p><p>　　//注意这是private 只供内部调用 </p><p>　　private static Singleton instance = new Singleton(); </p><p>　　//这里提供了一个供外部访问本class的静态方法，可以直接访问　　 </p><p>　　public static Singleton getInstance() { </p><p>　　　　return instance; 　　 </p><p>　　 } </p><p>} </p><p /><p>　　第二种形式： </p><p>public class Singleton { </p><p>　　private static Singleton instance = null; </p><p>　　public static synchronized Singleton getInstance() { </p><p>　　//这个方法比上面有所改进，不用每次都进行生成对象，只是第一次　　　 　 </p><p><br />　　//使用时生成实例，提高了效率！ </p><p>　　if (instance==null) </p><p>　　　　instance＝new Singleton(); </p><p>return instance; 　　} </p><p>} </p><p>其他形式： </p><p>　　定义一个类，它的构造函数为private的，所有方法为static的。 </p><p>　　一般认为第一种形式要更加安全些 </p><p>　　Hashtable和HashMap </p><p>　　Hashtable继承自Dictionary类，而HashMap是Java1.2引进的Map interface的 <br />一个实现 </p><p>　　HashMap允许将null作为一个entry的key或者value，而Hashtable不允许 </p><p>　　还有就是，HashMap把Hashtable的contains方法去掉了，改成containsvalue和 <br />containsKey。因为contains方法容易让人引起误解。 </p><p>　　最大的不同是，Hashtable的方法是Synchronize的，而HashMap不是，在 </p><p>多个线程访问Hashtable时，不需要自己为它的方法实现同步，而HashMap </p><p>就必须为之提供外同步。 </p><p>Hashtable和HashMap采用的hash/rehash算法都大概一样，所以性能不会有很大的差 <br />异。 </p><p>43.描述一下JVM加载class文件的原理机制? </p><p>44.试举例说明一个典型的垃圾回收算法？ </p><p>45.请用java写二叉树算法，实现添加数据形成二叉树功能，并以先序的方式打印出 <br />来. </p><p>46.请写一个java程序实现线程连接池功能？ </p><p>47.给定一个C语言函数，要求实现在java类中进行调用。 </p><p>48、编一段代码，实现在控制台输入一组数字后，排序后在控制台输出； </p><p>49、列出某文件夹下的所有文件； </p><p>50、调用系统命令实现删除文件的操作； </p><p>51、实现从文件中一次读出一个字符的操作； </p><p>52、列出一些控制流程的方法； </p><p>53、多线程有哪些状态？ </p><p>54、编写了一个服务器端的程序实现在客户端输入字符然后在控制台上显示，直到 <br />输入&quot;END&quot;为止，让你写出客户端的程序； </p><p>55、作用域public,private,protected,以及不写时的区别 </p><p>答：区别如下： </p><p>作用域 当前类 同一package 子孙类 其他package </p><p>public √ √ √ √ </p><p>protected √ √ √ × </p><p>friendly √ √ × × </p><p>private √ × × × </p><p>不写时默认为friendly </p><p>56、ArrayList和Vector的区别,HashMap和Hashtable的区别 </p><p>答：就ArrayList与Vector主要从二方面来说. </p><p>一.同步性:Vector是线程安全的，也就是说是同步的，而ArrayList是线程序不安全 <br />的，不是同步的 </p><p>二.数据增长:当需要增长时,Vector默认增长为原来一培，而ArrayList却是原来的 <br />一半 </p><p>就HashMap与HashTable主要从三方面来说。 </p><p>一.历史原因:Hashtable是基于陈旧的Dictionary类的，HashMap是Java 1.2引进的 <br />Map接口的一个实现 </p><p>二.同步性:Hashtable是线程安全的，也就是说是同步的，而HashMap是线程序不安 <br />全的，不是同步的 </p><p>三.值：只有HashMap可以让你将空值作为一个表的条目的key或value </p><p>57、char型变量中能不能存贮一个中文汉字?为什么? </p><p>答：是能够定义成为一个中文的，因为java中以unicode编码，一个char占16个字节 <br />，所以放一个中文是没问题的 </p><p>58、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? </p><p>答：多线程有两种实现方法，分别是继承Thread类与实现Runnable接口 </p><p>同步的实现方面有两种，分别是synchronized,wait与notify </p><p>59、垃圾回收机制,如何优化程序? </p><p>希望大家补上，谢谢 </p><p>60、float型float f=3.4是否正确? </p><p>答:不正确。精度不准确,应该用强制类型转换，如下所示：float f=(float)3.4 </p><p>61、介绍J***A中的Collection FrameWork(包括如何写自己的数据结构)? </p><p>答：Collection FrameWork如下： </p><p>Collection </p><p>├List </p><p>│├LinkedList </p><p>│├ArrayList </p><p>│└Vector </p><p>│　└Stack </p><p>└Set </p><p>Map </p><p>├Hashtable </p><p>├HashMap </p><p>└WeakHashMap </p><p>Collection是最基本的集合接口，一个Collection代表一组Object，即Collection <br />的元素（Elements） </p><p>Map提供key到value的映射 </p><p>62、Java中异常处理机制，事件机制？ </p><p>11、J***A中的多形与继承？ </p><p>希望大家补上，谢谢 </p><p>63、抽象类与接口？ </p><p>答：抽象类与接口都用于抽象，但是抽象类(J***A中)可以有自己的部分实现，而接 <br />口则完全是一个标识(同时有多重继承的功能)。 </p><p>编程题： </p><p>1．现在输入n个数字，以逗号，分开； </p><p>然后可选择升或者降序排序； </p><p>按提交键就在另一页面显示 </p><p>按什么 排序，结果为， ， </p><p>提供reset </p><p>答案（1） public static String[] splitStringByComma(String source){ </p><p>if(source==null||source.trim().equals(&quot;&quot;)) </p><p>return null; </p><p>StringTokenizer commaToker = new StringTokenizer(source,&quot;,&quot;) <br />; </p><p>String[] result = new String[commaToker.countTokens()]; </p><p>int i=0; </p><p>while(commaToker.hasMoreTokens()){ </p><p>result[i] = commaToker.nextToken(); </p><p>i++; </p><p>} </p><p>return result; </p><p>} </p><p>循环遍历String数组 </p><p>Integer.parseInt(String s)变成int类型 </p><p>组成int数组 </p><p>Arrays.sort(int[] a), </p><p>a数组升序 </p><p>降序可以从尾部开始输出 </p><p /><p>2．金额转换，阿拉伯数字的金额转换成中国传统的形式如： </p><p>（￥1011）－&gt;（一千零一拾一元整）输出。 </p><p>3、继承时候类的执行顺序问题,一般都是选择题,问你将会打印出什么? </p><p>答:父类： </p><p>package test; </p><p>public class FatherClass </p><p>{ </p><p>public FatherClass() </p><p>{ </p><p>System.out.println(&quot;FatherClass Create&quot;); </p><p>} </p><p>} </p><p>子类: </p><p>package test; </p><p>import test.FatherClass; </p><p>public class ChildClass extends FatherClass </p><p>{ </p><p>public ChildClass() </p><p>{ </p><p>System.out.println(&quot;ChildClass Create&quot;); </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>FatherClass fc = new FatherClass(); </p><p>ChildClass cc = new ChildClass(); </p><p>} </p><p>} </p><p>输出结果： </p><p>C:&gt;java test.ChildClass </p><p>FatherClass Create </p><p>FatherClass Create </p><p>ChildClass Create </p><p /><p>4、内部类的实现方式? </p><p>答：示例代码如下： </p><p>package test; </p><p>public class OuterClass </p><p>{ </p><p>private class InterClass </p><p>{ </p><p>public InterClass() </p><p>{ </p><p>System.out.println(&quot;InterClass Create&quot;); </p><p>} </p><p>} </p><p>public OuterClass() </p><p>{ </p><p>InterClass ic = new InterClass(); </p><p>System.out.println(&quot;OuterClass Create&quot;); </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>OuterClass oc = new OuterClass(); </p><p>} </p><p>} </p><p>输出结果: </p><p>C:&gt;java test/OuterClass </p><p>InterClass Create </p><p>OuterClass Create </p><p>再一个例题： </p><p>public class OuterClass { </p><p>private double d1 = 1.0; </p><p>//insert code here </p><p>} </p><p>You need to insert an inner class declaration at line 3. Which two inner <br />class declarations are </p><p /><p>valid?(Choose two.) </p><p>A. class InnerOne{ </p><p>public static double methoda() {return d1;} </p><p>} </p><p>B. public class InnerOne{ </p><p>static double methoda() {return d1;} </p><p>} </p><p>C. private class InnerOne{ </p><p>double methoda() {return d1;} </p><p>} </p><p>D. static class InnerOne{ </p><p>protected double methoda() {return d1;} </p><p>} </p><p>E. abstract class InnerOne{ </p><p>public abstract double methoda(); </p><p>} </p><p>说明如下： </p><p>一.静态内部类可以有静态成员，而非静态内部类则不能有静态成员。 故 A、B 错 </p><p><br />二.静态内部类的非静态成员可以访问外部类的静态变量，而不可访问外部类的非静 <br />态变量；return d1 出错。 </p><p /><p>故 D 错 </p><p>三.非静态内部类的非静态成员可以访问外部类的非静态变量。 故 C 正确 </p><p>四.答案为C、E </p><p /><p /><p>5、Java 的通信编程，编程题(或问答)，用J***A SOCKET编程，读服务器几个字符， <br />再写入本地显示？ </p><p>答:Server端程序: </p><p>package test; </p><p>import java.net.*; </p><p>import java.io.*; </p><p>public class Server </p><p>{ </p><p>private ServerSocket ss; </p><p>private Socket socket; </p><p>private BufferedReader in; </p><p>private PrintWriter out; </p><p>public Server() </p><p>{ </p><p>try </p><p>{ </p><p>ss=new ServerSocket(10000); </p><p>while(true) </p><p>{ </p><p>socket = ss.accept(); </p><p>String RemoteIP = socket.getInetAddress().getHostAddress(); </p><p>String RemotePort = &quot;:&quot;+socket.getLocalPort(); </p><p>System.out.println(&quot;A client come in!IP:&quot;+RemoteIP+RemotePort); </p><p>in = new BufferedReader(new </p><p /><p>InputStreamReader(socket.getInputStream())); </p><p>String line = in.readLine(); </p><p>System.out.println(&quot;Cleint send is :&quot; + line); </p><p>out = new PrintWriter(socket.getOutputStream(),true); </p><p>out.println(&quot;Your Message Received!&quot;); </p><p>out.close(); </p><p>in.close(); </p><p>socket.close(); </p><p>} </p><p>}catch (IOException e) </p><p>{ </p><p>out.println(&quot;wrong&quot;); </p><p>} </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>new Server(); </p><p>} </p><p>}; </p><p>Client端程序: </p><p>package test; </p><p>import java.io.*; </p><p>import java.net.*; </p><p /><p>public class Client </p><p>{ </p><p>Socket socket; </p><p>BufferedReader in; </p><p>PrintWriter out; </p><p>public Client() </p><p>{ </p><p>try </p><p>{ </p><p>System.out.println(&quot;Try to Connect to 127.0.0.1:10000&quot;); </p><p>socket = new Socket(&quot;127.0.0.1&quot;,10000); </p><p>System.out.println(&quot;The Server Connected!&quot;); </p><p>System.out.println(&quot;Please enter some Character:&quot;); </p><p>BufferedReader line = new BufferedReader(new </p><p /><p>InputStreamReader(System.in)); </p><p>out = new PrintWriter(socket.getOutputStream(),true); </p><p>out.println(line.readLine()); </p><p>in = new BufferedReader(new InputStreamReader(socket.getInputStream())); </p><p><br />System.out.println(in.readLine()); </p><p>out.close(); </p><p>in.close(); </p><p>socket.close(); </p><p>}catch(IOException e) </p><p>{ </p><p>out.println(&quot;Wrong&quot;); </p><p>} </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>new Client(); </p><p>} </p><p>}; </p><p>6、用J***A实现一种排序，J***A类实现序列化的方法(二种)？ 如在COLLECTION框架 <br />中，实现比较要实现什么样的接口？ </p><p>答:用插入法进行排序代码如下 </p><p>package test; </p><p>import java.util.*; </p><p>class InsertSort </p><p>{ </p><p>ArrayList al; </p><p>public InsertSort(int num,int mod) </p><p>{ </p><p>al = new ArrayList(num); </p><p>Random rand = new Random(); </p><p>System.out.println(&quot;The ArrayList Sort Before:&quot;); </p><p>for (int i=0;i&lt;num ;i++ ) </p><p>{ </p><p>al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1)); </p><p>System.out.println(&quot;al[&quot;+i+&quot;]=&quot;+al.get(i)); </p><p>} </p><p>} </p><p>public void SortIt() </p><p>{ </p><p>Integer tempInt; </p><p>int MaxSize=1; </p><p>for(int i=1;i&lt;al.size();i++) </p><p>{ </p><p>tempInt = (Integer)al.remove(i); </p><p>if(tempInt.intValue()&gt;=((Integer)al.get(MaxSize-1)).intValue()) </p><p>{ </p><p>al.add(MaxSize,tempInt); </p><p>MaxSize++; </p><p>System.out.println(al.toString()); </p><p>} else { </p><p>for (int j=0;j&lt;MaxSize ;j++ ) </p><p>{ </p><p>if </p><p /><p>(((Integer)al.get(j)).intValue()&gt;=tempInt.intValue()) </p><p>{ </p><p>al.add(j,tempInt); </p><p>MaxSize++; </p><p>System.out.println(al.toString()); </p><p>break; </p><p>} </p><p>} </p><p>} </p><p>} </p><p>System.out.println(&quot;The ArrayList Sort After:&quot;); </p><p>for(int i=0;i&lt;al.size();i++) </p><p>{ </p><p>System.out.println(&quot;al[&quot;+i+&quot;]=&quot;+al.get(i)); </p><p>} </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>InsertSort is = new InsertSort(10,100); </p><p>is.SortIt(); </p><p>} </p><p>} </p><p>J***A类实现序例化的方法是实现java.io.Serializable接口 </p><p>Collection框架中实现比较要实现Comparable 接口和 Comparator 接口 </p><p>7、编程：编写一个截取字符串的函数，输入为一个字符串和字节数，输出为按字节 <br />截取的字符串。 但是要保证汉字不被截半个，如“我ABC”4，应该截为“我AB”， <br />输入“我ABC汉DEF”，6，应该输出为“我ABC”而不是“我ABC+汉的半个”。 </p><p>答：代码如下： </p><p>package test; </p><p /><p>class SplitString </p><p>{ </p><p>String SplitStr; </p><p>int SplitByte; </p><p>public SplitString(String str,int bytes) </p><p>{ </p><p>SplitStr=str; </p><p>SplitByte=bytes; </p><p>System.out.println(&quot;The String is:′&quot;+SplitStr+&quot;′;SplitBytes=&quot;+SplitByt <br />e); </p><p>} </p><p>public void SplitIt() </p><p>{ </p><p>int loopCount; </p><p>loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte) <br />:(SplitStr.length()/Split </p><p>Byte+1); </p><p>System.out.println(&quot;Will Split into &quot;+loopCount); </p><p>for (int i=1;i&lt;=loopCount ;i++ ) </p><p>{ </p><p>if (i==loopCount){ </p><p>System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()) <br />); </p><p>} else { </p><p>System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte))); </p><p>} </p><p>} </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>SplitString ss = new SplitString(&quot;test中dd文dsaf中男大3443n中国43中国人 </p><p /><p><br />0ewldfls=103&quot;,4); </p><p>ss.SplitIt(); </p><p>} </p><p>} </p><p>8、J***A多线程编程。 用J***A写一个多线程程序，如写四个线程，二个加1，二个对 <br />一个变量减一，输出。 </p><p>希望大家补上，谢谢 </p><p>9、STRING与STRINGBUFFER的区别。 </p><p>答：STRING的长度是不可变的，STRINGBUFFER的长度是可变的。如果你对字符串中 <br />的内容经常进行操作，特别是内容要修改时，那么使用StringBuffer，如果最后需 <br />要String，那么使用StringBuffer的toString()方法 </p><p>Jsp方面 </p><p>1、jsp有哪些内置对象?作用分别是什么? </p><p>答:JSP共有以下9种基本内置组件（可与ASP的6种内部组件相对应）： </p><p>　request 用户端请求，此请求会包含来自GET/POST请求的参数 </p><p>response 网页传回用户端的回应 </p><p>pageContext 网页的属性是在这里管理 </p><p>session 与请求有关的会话期 </p><p>application servlet 正在执行的内容 </p><p>out 用来传送回应的输出 </p><p>config servlet的构架部件 </p><p>page JSP网页本身 </p><p>exception 针对错误网页，未捕捉的例外 </p><p>2、jsp有哪些动作?作用分别是什么? </p><p>答:JSP共有以下6种基本动作 </p><p>jsp:include：在页面被请求的时候引入一个文件。 </p><p>jsp:useBean：寻找或者实例化一个JavaBean。 </p><p>jsp:setProperty：设置JavaBean的属性。 </p><p>jsp:getProperty：输出某个JavaBean的属性。 </p><p>jsp:forward：把请求转到一个新的页面。 </p><p>jsp:plugin：根据浏览器类型为Java插件生成OBJECT或EMBED标记 </p><p>3、JSP中动态INCLUDE与静态INCLUDE的区别？ </p><p>答：动态INCLUDE用jsp:include动作实现 </p><p>&lt;jsp:include page=&quot;included.jsp&quot; flush=&quot;true&quot; /&gt;它总是会检查所含文件中的 <br />变化，适合用于包含动态页面，并且可以带参数 </p><p>静态INCLUDE用include伪码实现,定不会检查所含文件的变化，适用于包含静态页面 </p><p><br />&lt;%@ include file=&quot;included.htm&quot; %&gt; </p><p>4、两种跳转方式分别是什么?有什么区别? </p><p>答：有两种，分别为： </p><p>&lt;jsp:include page=&quot;included.jsp&quot; flush=&quot;true&quot;&gt; </p><p>&lt;jsp:forward page= &quot;nextpage.jsp&quot;/&gt; </p><p>前者页面不会转向include所指的页面，只是显示该页的结果，主页面还是原来的页 <br />面。执行完后还会回来，相当于函数调用。并且可以带参数.后者完全转向新页面， <br />不会再回来。相当于go to 语句。 </p><p>Servlet方面 </p><p>1、说一说Servlet的生命周期? </p><p>答:servlet有良好的生存期的定义，包括加载和实例化、初始化、处理请求以及服 <br />务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法 <br />表达。 </p><p>2、Servlet版本间(忘了问的是哪两个版本了)的不同? </p><p>希望大家补上，谢谢 </p><p>3、J***A SERVLET API中forward() 与redirect()的区别？ </p><p>答:前者仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地 <br />址；后者则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这 <br />样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前 <br />者可以满足需要时，尽量使用forward()方法，并且，这样也有助于隐藏实际的链接 <br />。在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用sendRe <br />direct()方法。 </p><p>4、Servlet的基本架构 </p><p>public class ServletName extends HttpServlet { </p><p>public void doPost(HttpServletRequest request, HttpServletResponse respo <br />nse) throws </p><p>ServletException, IOException { </p><p>} </p><p>public void doGet(HttpServletRequest request, HttpServletResponse respon <br />se) throws </p><p>ServletException, IOException { </p><p>} </p><p>} </p><p /><p>Jdbc、Jdo方面 </p><p>1、可能会让你写一段Jdbc连Oracle的程序,并实现数据查询. </p><p>答:程序如下： </p><p>package hello.ant; </p><p>import java.sql.*; </p><p>public class jdbc </p><p>{ </p><p>String dbUrl=&quot;jdbc:oracle:thin:@127.0.0.1:1521:orcl&quot;; </p><p>String theUser=&quot;admin&quot;; </p><p>String thePw=&quot;manager&quot;; </p><p>Connection c=null; </p><p>Statement conn; </p><p>ResultSet rs=null; </p><p>public jdbc() </p><p>{ </p><p>try{ </p><p>Class.forName(&quot;oracle.jdbc.driver.OracleDriver&quot;).newInstance(); </p><p>c = DriverManager.getConnection(dbUrl,theUser,thePw); </p><p>conn=c.createStatement(); </p><p>}catch(Exception e){ </p><p>e.printStackTrace(); </p><p>} </p><p>} </p><p>public boolean executeUpdate(String sql) </p><p>{ </p><p>try </p><p>{ </p><p>conn.executeUpdate(sql); </p><p>return true; </p><p>} </p><p>catch (SQLException e) </p><p>{ </p><p>e.printStackTrace(); </p><p>return false; </p><p>} </p><p>} </p><p>public ResultSet executeQuery(String sql) </p><p>{ </p><p>rs=null; </p><p>try </p><p>{ </p><p>rs=conn.executeQuery(sql); </p><p>} </p><p>catch (SQLException e) </p><p>{ </p><p>e.printStackTrace(); </p><p>} </p><p>return rs; </p><p>} </p><p>public void close() </p><p>{ </p><p>try </p><p>{ </p><p>conn.close(); </p><p>c.close(); </p><p>} </p><p>catch (Exception e) </p><p>{ </p><p>e.printStackTrace(); </p><p>} </p><p>} </p><p>public static void main(String[] args) </p><p>{ </p><p>ResultSet rs; </p><p>jdbc conn = new jdbc(); </p><p>rs=conn.executeQuery(&quot;select * from test&quot;); </p><p>try{ </p><p>while (rs.next()) </p><p>{ </p><p>System.out.println(rs.getString(&quot;id&quot;)); </p><p>System.out.println(rs.getString(&quot;name&quot;)); </p><p>} </p><p>}catch(Exception e) </p><p>{ </p><p>e.printStackTrace(); </p><p>} </p><p>} </p><p>} </p><p>2、Class.forName的作用?为什么要用? </p><p>答：调用该访问返回一个以字符串指定类名的类的对象。 </p><p>3、Jdo是什么? </p><p>答:JDO是Java对象持久化的新的规范，为java data object的简称,也是一个用于存 <br />取某种数据仓库中的对象的标准化API。JDO提供了透明的对象存储，因此对开发人 <br />员来说，存储数据对象完全不需要额外的代码（如JDBC API的使用）。这些繁琐的 <br />例行工作已经转移到JDO产品提供商身上，使开发人员解脱出来，从而集中时间和精 <br />力在业务逻辑上。另外，JDO很灵活，因为它可以在任何数据底层上运行。JDBC只是 <br />面向关系数据库（RDBMS)JDO更通用，提供到任何数据底层的存储功能，比如关系数 <br />据库、文件、XML以及对象数据库（ODBMS）等等，使得应用可移植性更强。 </p><p>4、在ORACLE大数据量下的分页解决方法。一般用截取ID方法，还有是三层嵌套方法 <br />。 </p><p>答:一种分页方法 </p><p>&lt;% </p><p>int i=1; </p><p>int numPages=14; </p><p>String pages = request.getParameter(&quot;page&quot;) ; </p><p>int currentPage = 1; </p><p>currentPage=(pages==null)?(1):{Integer.parseInt(pages)} </p><p>sql = &quot;select count(*) from tables&quot;; </p><p>ResultSet rs = DBLink.executeQuery(sql) ; </p><p>while(rs.next()) i = rs.getInt(1) ; </p><p>int intPageCount=1; </p><p>intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1); </p><p>int nextPage ; </p><p>int upPage; </p><p>nextPage = currentPage+1; </p><p>if (nextPage&gt;=intPageCount) nextPage=intPageCount; </p><p>upPage = currentPage-1; </p><p>if (upPage&lt;=1) upPage=1; </p><p>rs.close(); </p><p>sql=&quot;select * from tables&quot;; </p><p>rs=DBLink.executeQuery(sql); </p><p>i=0; </p><p>while((i&lt;numPages*(currentPage-1))&amp;&amp;rs.next()){i++;} </p><p>%&gt; </p><p>//输出内容 </p><p>//输出翻页连接 </p><p>合计:&lt;%=currentPage%&gt;/&lt;%=intPageCount%&gt;&lt;a href=&quot;/List.jsp?page=1&quot;&gt;第一页&lt; <br />/a&gt;&lt;a </p><p /><p>href=&quot;List.jsp?page=&lt;%=upPage%&gt;&quot;&gt;上一页&lt;/a&gt; </p><p>&lt;% </p><p>for(int j=1;j&lt;=intPageCount;j++){ </p><p>if(currentPage!=j){ </p><p>%&gt; </p><p>&lt;a href=&quot;list.jsp?page=&lt;%=j%&gt;&quot;&gt;[&lt;%=j%&gt;]&lt;/a&gt; </p><p>&lt;% </p><p>}else{ </p><p>out.println(j); </p><p>} </p><p>} </p><p>%&gt; </p><p>&lt;a href=&quot;List.jsp?page=&lt;%=nextPage%&gt;&quot;&gt;下一页&lt;/a&gt;&lt;a href=&quot;List.jsp?page=&lt; <br />%=intPageCount%&gt;&quot;&gt;最后页 </p><p /><p>&lt;/a&gt; </p><p>Xml方面 </p><p>1、xml有哪些解析技术?区别是什么? </p><p>答:有DOM,SAX,STAX等 </p><p>DOM:处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的， <br />这种结构占用的内存较多，而且DOM必须在解析文件之前把整个文档装入内存,适合 <br />对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML <br />文件，不需要一次全部装载整个文件。当遇到像文件开头，文档结束，或者标签开 <br />头与标签结束时，它会触发一个事件，用户通过在其回调事件中写入处理代码来处 <br />理XML文件，适合对XML的顺序访问 </p><p>STAX:Streaming API for XML (StAX) </p><p>2、你在项目中用到了xml技术的哪些方面?如何实现的? </p><p>答:用到了数据存贮，信息配置两方面。在做数据交换平台时，将不能数据源的数据 <br />组装成XML文件，然后将XML文件压缩打包加密后通过网络传送给接收者，接收解密 <br />与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时，利用XML可以 <br />很方便的进行，软件的各种配置参数都存贮在XML文件中。 </p><p>3、用jdom解析xml文件时如何解决中文问题?如何解析? </p><p>答:看如下代码,用编码方式加以解决 </p><p>package test; </p><p>import java.io.*; </p><p>public class DOMTest </p><p>{ </p><p>private String inFile = &quot;c:\people.xml&quot;; </p><p>private String outFile = &quot;c:\people.xml&quot;; </p><p>public static void main(String args[]) </p><p>{ </p><p>new DOMTest(); </p><p>} </p><p>public DOMTest() </p><p>{ </p><p>try </p><p>{ </p><p>javax.xml.parsers.DocumentBuilder builder = </p><p>javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilde <br />r(); </p><p>org.w3c.dom.Document doc = builder.newDocument(); </p><p>org.w3c.dom.Element root = doc.createElement(&quot;老师&quot;); </p><p>org.w3c.dom.Element wang = doc.createElement(&quot;王&quot;); </p><p>org.w3c.dom.Element liu = doc.createElement(&quot;刘&quot;); </p><p>wang.appendChild(doc.createTextNode(&quot;我是王老师&quot;)); </p><p>root.appendChild(wang); </p><p>doc.appendChild(root); </p><p>javax.xml.transform.Transformer transformer = </p><p>javax.xml.transform.TransformerFactory.newInstance().newTransformer(); </p><p>transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, &quot; <br />gb2312&quot;); </p><p>transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, &quot;ye <br />s&quot;); </p><p /><p /><p>transformer.transform(new javax.xml.transform.dom.DOMSource(doc), </p><p>new </p><p /><p>javax.xml.transform.stream.StreamResult(outFile)); </p><p>} </p><p>catch (Exception e) </p><p>{ </p><p>System.out.println (e.getMessage()); </p><p>} </p><p>} </p><p>} </p><p>4、编程用J***A解析XML的方式. </p><p>答:用SAX方式解析XML，XML文件如下： </p><p>&lt;?xml version=&quot;1.0&quot; encoding=&quot;gb2312&quot;?&gt; </p><p>&lt;person&gt; </p><p>&lt;name&gt;王小明&lt;/name&gt; </p><p>&lt;college&gt;信息学院&lt;/college&gt; </p><p>&lt;telephone&gt;6258113&lt;/telephone&gt; </p><p>&lt;notes&gt;男,1955年生,博士，95年调入海南大学&lt;/notes&gt; </p><p>&lt;/person&gt; </p><p>事件回调类SAXHandler.java </p><p>import java.io.*; </p><p>import java.util.Hashtable; </p><p>import org.xml.sax.*; </p><p>public class SAXHandler extends HandlerBase </p><p>{ </p><p>private Hashtable table = new Hashtable(); </p><p>private String currentElement = null; </p><p>private String currentValue = null; </p><p>public void setTable(Hashtable table) </p><p>{ </p><p>this.table = table; </p><p>} </p><p>public Hashtable getTable() </p><p>{ </p><p>return table; </p><p>} </p><p>public void startElement(String tag, AttributeList attrs) </p><p>throws SAXException </p><p>{ </p><p>currentElement = tag; </p><p>} </p><p>public void characters(char[] ch, int start, int length) </p><p>throws SAXException </p><p>{ </p><p>currentValue = new String(ch, start, length); </p><p>} </p><p>public void endElement(String name) throws SAXException </p><p>{ </p><p>if (currentElement.equals(name)) </p><p>table.put(currentElement, currentValue); </p><p>} </p><p>} </p><p>JSP内容显示源码,SaxXml.jsp: </p><p>&lt;HTML&gt; </p><p>&lt;HEAD&gt; </p><p>&lt;TITLE&gt;剖析XML文件people.xml&lt;/TITLE&gt; </p><p>&lt;/HEAD&gt; </p><p>&lt;BODY&gt; </p><p>&lt;%@ page errorPage=&quot;ErrPage.jsp&quot; </p><p>contentType=&quot;text/html;charset=GB2312&quot; %&gt; </p><p>&lt;%@ page import=&quot;java.io.*&quot; %&gt; </p><p>&lt;%@ page import=&quot;java.util.Hashtable&quot; %&gt; </p><p>&lt;%@ page import=&quot;org.w3c.dom.*&quot; %&gt; </p><p>&lt;%@ page import=&quot;org.xml.sax.*&quot; %&gt; </p><p>&lt;%@ page import=&quot;javax.xml.parsers.SAXParserFactory&quot; %&gt; </p><p>&lt;%@ page import=&quot;javax.xml.parsers.SAXParser&quot; %&gt; </p><p>&lt;%@ page import=&quot;SAXHandler&quot; %&gt; </p><p>&lt;% </p><p>File file = new File(&quot;c:\people.xml&quot;); </p><p>FileReader reader = new FileReader(file); </p><p>Parser parser; </p><p>SAXParserFactory spf = SAXParserFactory.newInstance(); </p><p>SAXParser sp = spf.newSAXParser(); </p><p>SAXHandler handler = new SAXHandler(); </p><p>sp.parse(new InputSource(reader), handler); </p><p>Hashtable hashTable = handler.getTable(); </p><p>out.println(&quot;&lt;TABLE BORDER=2&gt;&lt;CAPTION&gt;教师信息表&lt;/CAPTION&gt;&quot;); </p><p>out.println(&quot;&lt;TR&gt;&lt;TD&gt;姓名&lt;/TD&gt;&quot; + &quot;&lt;TD&gt;&quot; + </p><p>(String)hashTable.get(new String(&quot;name&quot;)) + &quot;&lt;/TD&gt;&lt;/TR&gt;&quot;); </p><p>out.println(&quot;&lt;TR&gt;&lt;TD&gt;学院&lt;/TD&gt;&quot; + &quot;&lt;TD&gt;&quot; + </p><p>(String)hashTable.get(new String(&quot;college&quot;))+&quot;&lt;/TD&gt;&lt;/TR&gt;&quot;); </p><p>out.println(&quot;&lt;TR&gt;&lt;TD&gt;电话&lt;/TD&gt;&quot; + &quot;&lt;TD&gt;&quot; + </p><p>(String)hashTable.get(new String(&quot;telephone&quot;)) + &quot;&lt;/TD&gt;&lt;/TR&gt;&quot;); </p><p>out.println(&quot;&lt;TR&gt;&lt;TD&gt;备注&lt;/TD&gt;&quot; + &quot;&lt;TD&gt;&quot; + </p><p>(String)hashTable.get(new String(&quot;notes&quot;)) + &quot;&lt;/TD&gt;&lt;/TR&gt;&quot;); </p><p>out.println(&quot;&lt;/TABLE&gt;&quot;); </p><p>%&gt; </p><p>&lt;/BODY&gt; </p><p>&lt;/HTML&gt; </p><p>EJB方面 </p><p>1、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? </p><p>答：规范内容包括Bean提供者，应用程序装配者，EJB容器，EJB配置工具，EJB服务 <br />提供者，系统管理员。这里面，EJB容器是EJB之所以能够运行的核心。EJB容器管理 <br />着EJB的创建，撤消，激活，去活，与数据库的连接等等重要的核心工作。JSP,Ser <br />vlet,EJB,JNDI,JDBC,JMS..... </p><p>2、EJB与J***A BEAN的区别？ </p><p>答:Java Bean 是可复用的组件，对Java Bean并没有严格的规范，理论上讲，任何 <br />一个Java类都可以是一个Bean。但通常情况下，由于Java Bean是被容器所创建（如 <br />Tomcat)的，所以Java Bean应具有一个无参的构造器，另外，通常Java Bean还要实 <br />现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型 <br />中的本地进程内COM组件，它是不能被跨进程访问的。Enterprise Java Bean 相当 <br />于DCOM，即分布式组件。它是基于Java的远程方法调用（RMI）技术的，所以EJB可 <br />以被远程访问（跨进程、跨计算机）。但EJB必须被布署在诸如Webspere、WebLogi <br />c这样的容器中，EJB客户从不直接访问真正的EJB组件，而是通过其容器访问。EJB <br />容器是EJB组件的代理，EJB组件由容器所创建和管理。客户通过容器来访问真正的 <br />EJB组件。 </p><p>3、EJB的基本架构 </p><p>答:一个EJB包括三个部分: </p><p>Remote Interface 接口的代码 </p><p>package Beans; </p><p>import javax.ejb.EJBObject; </p><p>import java.rmi.RemoteException; </p><p>public interface Add extends EJBObject </p><p>{ </p><p>//some method declare </p><p>} </p><p>Home Interface 接口的代码 </p><p>package Beans; </p><p>import java.rmi.RemoteException; </p><p>import jaax.ejb.CreateException; </p><p>import javax.ejb.EJBHome; </p><p>public interface AddHome extends EJBHome </p><p>{ </p><p>//some method declare </p><p>} </p><p>EJB类的代码 </p><p>package Beans; </p><p>import java.rmi.RemoteException; </p><p>import javax.ejb.SessionBean; </p><p>import javx.ejb.SessionContext; </p><p>public class AddBean Implements SessionBean </p><p>{ </p><p>//some method declare </p><p>} </p><p /><p>J2EE,MVC方面 </p><p>1、MVC的各个部分都有那些技术来实现?如何实现? </p><p>答:MVC是Model－View－Controller的简写。&quot;Model&quot; 代表的是应用的业务逻辑（通 <br />过JavaBean，EJB组件实现）， &quot;View&quot; 是应用的表示面（由JSP页面产生），&quot;Con <br />troller&quot; 是提供应用的处理过程控制（一般是一个Servlet），通过这种设计模型 <br />把应用逻辑，处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和 <br />重用。 </p><p>2、应用服务器与WEB SERVER的区别？ </p><p>希望大家补上，谢谢 </p><p>3、J2EE是什么？ </p><p>答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(co <br />mponent-base)的企业级应用模型(enterpriese application model).在这样的一个 <br />应用系统中，可按照功能划分为不同的组件，这些组件又可在不同计算机上，并且 <br />处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件, <br />Business层和组件,企业信息系统(EIS)层。 </p><p>4、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI, <br />WSDL解释。 </p><p>答：Web Service描述语言WSDL </p><p>SOAP即简单对象访问协议(Simple Object Access Protocol)，它是用于交换XML编 <br />码信息的轻量级协议。 </p><p>UDDI 的目的是为电子商务建立标准；UDDI是一套基于Web的、分布式的、为Web Se <br />rvice提供的、信息注册中心的实现标准规范，同时也包含一组使企业能将自身提供 <br />的Web Service注册，以使别的企业能够发现的访问协议的实现标准。 </p><p>5、BS与CS的联系与区别。 </p><p>C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机，并采用大型数据库系统，如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。 <br />B/S是Brower/Server的缩写，客户机上只要安装一个浏览器（Browser），如Netscape Navigator或Internet Explorer，服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下，用户界面完全通过WWW浏览器实现，一部分事务逻辑在前端实现，但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。 <br />C/S 与 B/S 区别： <br />1．硬件环境不同: <br />C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. <br />B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 <br />2．对安全要求不同 <br />C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息. <br />B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。 <br />3．对程序架构不同 <br />C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑. <br />B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. <br />4．软件重用不同 <br />C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好. <br />B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 <br />5．系统维护不同 <br />C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统 <br />B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. <br />6．处理问题不同 <br />C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统 <br />B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小. <br />7．用户接口不同 <br />C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高 <br />B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. <br />8．信息流不同 <br />C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低 <br />B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。</p><p>6、STRUTS的应用(如STRUTS架构) </p><p>答：Struts是采用Java Servlet/JavaServer Pages技术，开发Web应用程序的开放 <br />源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模 <br />式的应用构架。 Struts有如下的主要功能： </p><p>一.包含一个controller servlet，能将用户的请求发送到相应的Action对象。 </p><p>二.JSP自由tag库，并且在controller servlet中提供关联支持，帮助开发员创建交 <br />互式表单应用。 </p><p>三.提供了一系列实用对象：XML处理、通过Java reflection APIs自动处理JavaBe <br />ans属性、国际化的提示和消息。 </p><p>设计模式方面 </p><p>1、开发中都用到了那些设计模式?用在什么场合? </p><p>答：每个模式都描述了一个在我们的环境中不断出现的问题，然后描述了该问题的 <br />解决方案的核心。通过这种方式，你可以无数次地使用那些已有的解决方案，无需 <br />在重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的 <br />相关应用。简单工厂模式等。 </p><p>2、UML方面 </p><p>答：标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图 <br />(顺序图,合作图),实现图, </p><p>JavaScript方面 </p><p>1、如何校验数字型? </p><p>var re=/^d{1,8}$|.d{1,2}$/; </p><p>var str=document.form1.all(i).value; </p><p>var r=str.match(re); </p><p>if (r==null) </p><p>{ </p><p>sign=-4; </p><p>break; </p><p>} </p><p>else{ </p><p>document.form1.all(i).value=parseFloat(str); </p><p>} </p><p>CORBA方面 </p><p>1、CORBA是什么?用途是什么? </p><p>答：CORBA 标准是公共对象请求代理结构(Common Object Request Broker Archit <br />ecture)，由对象管理组织 (Object Management Group，缩写为 OMG)标准化。它的 <br />组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操 <br />作的协议。 其目的为： </p><p>用不同的程序设计语言书写 </p><p>在不同的进程中运行 </p><p>为不同的操作系统开发 </p><p>LINUX方面 </p><p>1、LINUX下线程，GDI类的解释。 </p><p>答：LINUX实现的就是基于核心轻量级进程的&quot;一对一&quot;线程模型，一个线程实体对应 <br />一个核心轻量级进程，而线程之间的管理在核外函数库中实现。 </p><p>GDI类为图像设备编程接口类库。 </p><p>J***A华为面试题 </p><p>J***A方面 </p><p>1 面向对象的特征有哪些方面 </p><p>2 String是最基本的数据类型吗? </p><p>3 int 和 Integer 有什么区别 </p><p>4 String 和StringBuffer的区别 </p><p>5运行时异常与一般异常有何异同？ </p><p>异常表示程序运行过程中可能出现的非正常状态，运行时异常表示虚拟机的通常操 <br />作中可能遇到的异常，是一种常见运行错误。java编译器要求方法必须声明抛出可 <br />能发生的非运行时异常，但是并不要求必须声明抛出未被捕获的运行时异常。 </p><p>6 说出一些常用的类，包,接口，请各举5个 </p><p>7 说出ArrayList,Vector, LinkedList的存储性能和特性 </p><p>ArrayList和Vector都是使用数组方式存储数据，此数组元素数大于实际存储的数据 <br />以便增加和插入元素，它们都允许直接按序号索引元素，但是插入元素要涉及数组 <br />元素移动等内存操作，所以索引数据快而插入数据慢，Vector由于使用了synchron <br />ized方法（线程安全），通常性能上较ArrayList差，而LinkedList使用双向链表实 <br />现存储，按序号索引数据需要进行前向或后向遍历，但是插入数据时只需要记录本 <br />项的前后项即可，所以插入速度较快。 </p><p>8设计4个线程，其中两个线程每次对j增加1，另外两个线程对j每次减少1。写出程 <br />序。 </p><p>以下程序使用内部类实现线程，对j增减的时候没有考虑顺序问题。 </p><p>public class ThreadTest1{ </p><p>private int j; </p><p>public static void main(String args[]){ </p><p>ThreadTest1 tt=new ThreadTest1(); </p><p>Inc inc=tt.new Inc(); </p><p>Dec dec=tt.new Dec(); </p><p>for(int i=0;i&lt;2;i++){ </p><p>Thread t=new Thread(inc); </p><p>t.start(); </p><p>t=new Thread(dec); </p><p>t.start(); </p><p>} </p><p>} </p><p>private synchronized void inc(){ </p><p>j++; </p><p>System.out.println(Thread.currentThread().getName()+&quot;- <br />inc:&quot;+j); </p><p>} </p><p>private synchronized void dec(){ </p><p>j--; </p><p>System.out.println(Thread.currentThread().getName()+&quot;- <br />dec:&quot;+j); </p><p>} </p><p /><p>class Inc implements Runnable{ </p><p>public void run(){ </p><p>for(int i=0;i&lt;100;i++){ </p><p>inc(); </p><p>} </p><p>} </p><p>} </p><p>class Dec implements Runnable{ </p><p>public void run(){ </p><p>for(int i=0;i&lt;100;i++){ </p><p>dec(); </p><p>} </p><p>} </p><p>} </p><p>} </p><p>9． JSP的内置对象及方法。 </p><p>request request表示HttpServletRequest对象。它包含了有关浏览器请求的信息， <br />并且提供了几个用于获取cookie, header, 和session数据的有用的方法。 </p><p>response response表示HttpServletResponse对象，并提供了几个用于设置送回 浏 <br />览器的响应的方法（如cookies,头信息等） </p><p>out out 对象是javax.jsp.JspWriter的一个实例，并提供了几个方法使你能用于向 <br />浏览器回送输出结果。 </p><p>pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用 <br />于方便存取各种范围的名字空间、servlet相关的对象的API，并且包装了通用的se <br />rvlet相关功能的方法。 </p><p>session session表示一个请求的javax.servlet.http.HttpSession对象。Session <br />可以存贮用户的状态信息 </p><p>application applicaton 表示一个javax.servle.ServletContext对象。这有助于 <br />查找有关servlet引擎和servlet环境的信息 </p><p>config config表示一个javax.servlet.ServletConfig对象。该对象用于存取serv <br />let实例的初始化参数。 </p><p>page page表示从该页面产生的一个servlet实例 </p><p>10.用socket通讯写出客户端和服务器端的通讯，要求客户发送数据后能够回显相同 <br />的数据。 </p><p>参见课程中socket通讯例子。 </p><p>11说出Servlet的生命周期，并说出Servlet和CGI的区别。 </p><p>Servlet被服务器实例化后，容器运行其init方法，请求到达时运行其service方法 <br />，service方法自动派遣运行与请求对应的doXXX方法（doGet，doPost）等，当服务 <br />器决定将实例销毁的时候调用其destroy方法。 </p><p>与cgi的区别在于servlet处于服务器进程中，它通过多线程方式运行其service方法 <br />，一个实例可以服务于多个请求，并且其实例一般不会销毁，而CGI对每个请求都产 <br />生新的进程，服务完成后就销毁，所以效率上低于servlet。 </p><p>12.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别，Stateful <br />Bean和StatelessBean的区别。 </p><p /><p>13．EJB包括（SessionBean,EntityBean）说出他们的生命周期，及如何管理事务的 <br />？ </p><p /><p>14．说出数据连接池的工作机制是什么? </p><p /><p>15同步和异步有和异同，在什么情况下分别使用他们？举例说明。 </p><p /><p>16应用服务器有那些？ </p><p /><p>17你所知道的集合类都有哪些？主要方法？ </p><p /><p>18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T，请用 <br />JDBC检索出表T的所有数据。 </p><p /><p>19．说出在JSP页面里是怎么分页的? </p><p>页面需要保存以下参数： </p><p>总行数：根据sql语句得到总行数 </p><p>每页显示行数：设定值 </p><p>当前页数：请求参数 </p><p>页面根据当前页数和每页行数计算出当前页第一行行数，定位结果集到此行，对结 <br />果集取出每页显示行数的行即可。 </p><p /><p /><p>数据库方面： </p><p /><p>1. 存储过程和函数的区别 </p><p>存储过程是用户定义的一系列sql语句的集合，涉及特定表或其它对象的任务，用户 <br />可以调用存储过程，而函数通常是数据库已定义的方法，它接收参数并返回某种类 <br />型的值并且不涉及特定用户表。 </p><p>2. 事务是什么？ </p><p>事务是作为一个逻辑单元执行的一系列操作，一个逻辑工作单元必须有四个属性， <br />称为 ACID（原子性、一致性、隔离性和持久性）属性，只有这样才能成为一个事务 <br />： </p><p>原子性 </p><p>事务必须是原子工作单元；对于其数据修改，要么全都执行，要么全都不执行。 </p><p>一致性 </p><p>事务在完成时，必须使所有的数据都保持一致状态。在相关数据库中，所有规则都 <br />必须应用于事务的修改，以保持所有数据的完整性。事务结束时，所有的内部数据 <br />结构（如 B 树索引或双向链表）都必须是正确的。 </p><p>隔离性 </p><p>由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时 <br />数据所处的状态，要么是另一并发事务修改它之前的状态，要么是另一事务修改它 <br />之后的状态，事务不会查看中间状态的数据。这称为可串行性，因为它能够重新装 <br />载起始数据，并且重播一系列事务，以使数据结束时的状态与原始事务执行的状态 <br />相同。 </p><p>持久性 </p><p>事务完成之后，它对于系统的影响是永久性的。该修改即使出现系统故障也将一直 <br />保持。 </p><p /><p>3. 游标的作用？如何知道游标已经到了最后？ </p><p>游标用于定位结果集的行，通过判断全局变量@@FETCH_STATUS可以判断是否到了最 <br />后，通常此变量不等于0表示出错或到了最后。 </p><p>4. 触发器分为事前触发和事后触发，这两种触发有和区别。语句级触发 <br />和行级触发有何区别。 </p><p>事前触发器运行于触发事件发生之前，而事后触发器运<!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/18120204.html">JavaScript：prototype属性使用说明</a> 2008-04-02</div><div><a href="/logs/18119949.html">如何快速的呈现我们的网页</a> 2008-04-02</div><div><a href="/logs/18119655.html">十一条实用javaScript技巧(屏蔽类)</a> 2008-04-02</div><div><a href="/logs/2103009.html">常用正则表达式</a> 2006-03-21</div><div><a href="/logs/2049395.html">半小时精通正则表达式!</a> 2006-03-13</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fnesnil.blogbus.com%2Flogs%2F2041702.html&title=java%E9%9D%A2%E8%AF%95%E9%A2%98">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://nesnil.blogbus.com/logs/2041702.html</link>
   <author>nesnil</author>
   <pubDate>Sat, 11 Mar 2006 22:49:07 +0800</pubDate>
  </item>
 </channel>
</rss>
