<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[学习参考 - 艺风在线 - Power By CSZI.com]]></title>
    <link>http://max.cszi.com</link>
    <description><![CDATA[CSBlog官方网站，CSBlog是巧思工作室使用Asp.Net2.0(C#)开发的一套免费的Blog系统，采用原始数据的Xml+Xslt模板输出标准的Xhtml页面，原创的经典架构、合理的设计、轻巧方便的更改主题，是同类产品中的佼佼者。希望我们辛苦的努力可以为您的生活和工作带来很多方便。]]></description>
    <language>zh-cn</language>
    <copyright><![CDATA[Copyright 2003-2008 ChaosStudio[巧思]]]></copyright>
    <webMaster>zhouyu@69sea.com(一线风)
        </webMaster>
    <generator>CSBlog v2.0.1</generator>
    <image>
      <title><![CDATA[学习参考 - 艺风在线 - Power By ]]></title>
      <url>/App_Themes/Love/Images/</url>
      <link>http://max.cszi.com</link>
      <description><![CDATA[CSBlog官方网站，CSBlog是巧思工作室使用Asp.Net2.0(C#)开发的一套免费的Blog系统，采用原始数据的Xml+Xslt模板输出标准的Xhtml页面，原创的经典架构、合理的设计、轻巧方便的更改主题，是同类产品中的佼佼者。希望我们辛苦的努力可以为您的生活和工作带来很多方便。]]></description>
    </image>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=746</link>
      <title><![CDATA[在客户端设定启动Silverlight项目的特定页。]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2010-7-15 16:51:09</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=746</guid>
      <comments>
              /Blog/Blog.aspx?Id=746#commentbox
            </comments>
      <description><![CDATA[<p>Silverlight和Flash还是很不一样的，想要启动某个特定的Page，可不能像Flash那个直接引用就行了的。今天在网上看了看，是能用参数传入的，服务端反射来创建实体</p>
<div class="codeText">
<div class="codeHead">修改App.xaml.cs里的对应的方法如下：</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;Application_Startup(</span><span class="keyword">object</span><span>&nbsp;sender,&nbsp;StartupEventArgs&nbsp;e) &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//this.RootVisual&nbsp;=&nbsp;new&nbsp;MainPage(); </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//使用反射来启动相应的Silverlight </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(!e.InitParams.ContainsKey(</span><span class="string">&quot;InitPage&quot;</span><span>)) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RootVisual&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;MainPage(); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assembly&nbsp;assembly&nbsp;=&nbsp;Assembly.GetExecutingAssembly(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;rootName&nbsp;=&nbsp;String.Format(</span><span class="string">&quot;SilverlightApp.{0}&quot;</span><span>,&nbsp;e.InitParams[</span><span class="string">&quot;InitPage&quot;</span><span>]); &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UIElement&nbsp;rootVisual&nbsp;=&nbsp;assembly.CreateInstance(rootName)&nbsp;</span><span class="keyword">as</span><span>&nbsp;UIElement; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RootVisual&nbsp;=&nbsp;rootVisual; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
</ol>
</div><p>修改客户页页面内容如下：</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">XML/HTML代码</div>
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">form</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;form1&quot;</span><span>&nbsp;</span><span class="attribute">runat</span><span>=</span><span class="attribute-value">&quot;server&quot;</span><span>&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">&quot;height:100%&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;silverlightControlHost&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">object</span><span>&nbsp;</span><span class="attribute">data</span><span>=</span><span class="attribute-value">&quot;data:application/x-silverlight-2,&quot;</span><span>&nbsp;</span><span class="attribute">type</span><span>=</span><span class="attribute-value">&quot;application/x-silverlight-2&quot;</span><span>&nbsp;</span><span class="attribute">width</span><span>=</span><span class="attribute-value">&quot;100%&quot;</span><span>&nbsp;</span><span class="attribute">height</span><span>=</span><span class="attribute-value">&quot;100%&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;source&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;ClientBin/SilverlightApp.xap?r=&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><font color="#ff0000"><u><span class="comments">&lt;!--启动特定页--&gt;</span><span>&nbsp;&nbsp;</span></u></font></strong></li>
    <li><font color="#ff0000"><strong><font color="#ff0000"><u><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;InitParams&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;InitPage=Page19&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span></u></font></strong><span>&nbsp;&nbsp;</span></font></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;onError&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;onSilverlightError&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;background&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;white&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;minRuntimeVersion&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;3.0.40818.0&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">param</span><span>&nbsp;</span><span class="attribute">name</span><span>=</span><span class="attribute-value">&quot;autoUpgrade&quot;</span><span>&nbsp;</span><span class="attribute">value</span><span>=</span><span class="attribute-value">&quot;true&quot;</span><span>&nbsp;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">a</span><span>&nbsp;</span><span class="attribute">href</span><span>=</span><span class="attribute-value">&quot;http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=3.0.40818.0&quot;</span><span>&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">&quot;text-decoration:none&quot;</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">img</span><span>&nbsp;</span><span class="attribute">src</span><span>=</span><span class="attribute-value">&quot;http://go.microsoft.com/fwlink/?LinkId=108181&quot;</span><span>&nbsp;</span><span class="attribute">alt</span><span>=</span><span class="attribute-value">&quot;获取&nbsp;Microsoft&nbsp;Silverlight&quot;</span><span>&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">&quot;border-style:none&quot;</span><span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">a</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">object</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">iframe</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;_sl_historyFrame&quot;</span><span>&nbsp;</span><span class="attribute">style</span><span>=</span><span class="attribute-value">&quot;visibility:hidden;height:0px;width:0px;border:0px&quot;</span><span class="tag">&gt;</span><span class="tag">&lt;/</span><span class="tag-name">iframe</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">form</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>注意那个带下划线的配置，这里有个很奇怪的问题，不知为什么，把InitPage改为别的就失去效果了。真是晕死人了。</p>
<p>调试好像也不是那么方便。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=743</link>
      <title><![CDATA[用JQuery的JSONP跨域调用ASP.Net WebService方法]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2010-5-10 12:22:27</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=743</guid>
      <comments>
              /Blog/Blog.aspx?Id=743#commentbox
            </comments>
      <description><![CDATA[<p>参考文章：<a href="http://bloggingabout.net/blogs/adelkhalil/archive/2009/08/14/cross-domain-jsonp-with-jquery-call-step-by-step-guide.aspx" target="_blank">Cross-domain JSONP with jQuery call step-by-step guide</a></p>
<p><strong>已知的几点：</strong></p>
<ol>
    <li>服务器WebService采用ASP.Net开发，激活GET方式和JSON输入输出（缺省是Post和XML输入输出），详细见后面的代码；</li>
    <li>ASP.NET开发WebService，对于请求方有1个限制，即要求请求的ContentType要设置为Application/json； 参见：<a href="http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx" target="_blank">security feature explained here by ScottGu</a>；</li>
    <li>ASP.NET开发WebService，无法识别通过URL传递过来的jsoncallback函数，因此无法返回符合js要求的callback函数调用；</li>
    <li>跨域JS调用，底层只能通过加载&lt;script/&gt;方式调用，完毕的通知，一般有2种方法，1是监控script标签对象的statechange事件，该方法对于浏览器的依赖比较强，可能会出现各种异常情况；2是在加载的js中，执行一个回调函数，将控制权交回到调用方代码，这种方式的稳定性比较好，也就是我们通常说的JSONP方法；在jquery类库中，跨域调用的2种方法都支持，由datatype指定，分别是script和jsonp；</li>
</ol><p><strong>以下的内容可以解决问题，主要思路为</strong></p>
<ol>
    <li>在WebService站点，追加一个HTTPModule，做2件事情：
    <ul>
        <li>替换请求串的ContentType，以欺骗系统的ScriptService代码；</li>
        <li>捕捉请求URL的jsoncallback参数，如果有，则将输出的json内容进行jsonp的封装；</li>
    </ul>
    </li>
    <li>有了这个HTTPModule之后，则按照通用的WebService方式进行开发即可；</li>
</ol>
<p><strong>如何做：</strong></p>
<p>1、实现一个WebService</p>
<pre style="background: #ffffff; color: #000000"><span style="color: #808030">[</span>ScriptService<span style="color: #808030">]</span>
   <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">class</span> JSONP_EndPoint <span style="color: #808030">:</span> System<span style="color: #808030">.</span>Web<span style="color: #808030">.</span>Services<span style="color: #808030">.</span>WebService
   <span style="color: #800080">{</span>
       <span style="color: #808030">[</span>WebMethod<span style="color: #808030">]</span>
       <span style="color: #808030">[</span>ScriptMethod<span style="color: #808030">(</span>UseHttpGet <span style="color: #808030">=</span> <span style="color: #800000; font-weight: bold">true</span><span style="color: #808030">,</span>ResponseFormat <span style="color: #808030">=</span> ResponseFormat<span style="color: #808030">.</span>Json<span style="color: #808030">)</span><span style="color: #808030">]</span>
       <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">string</span> Sum<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">string</span> x<span style="color: #808030">,</span><span style="color: #800000; font-weight: bold">string</span> y<span style="color: #808030">)</span>
       <span style="color: #800080">{</span>
           <span style="color: #800000; font-weight: bold">return</span> x <span style="color: #808030">+</span> y<span style="color: #800080">;</span>
       <span style="color: #800080">}</span>
   <span style="color: #800080">}</span></pre>
<p>按照以上代码，开发需要的方法，开发过程中，不需要考虑jsonp等等相关内容，该DLL的代码只需要考虑业务即可；</p>
<p>2、开发一个自定义的HTTPModule，这个是关键，只需要开发一次，可以作为通用解决方案；</p>
<pre style="background: #ffffff; color: #000000"><span style="color: #800000; font-weight: bold">using</span> System<span style="color: #800080">;</span>
<span style="color: #800000; font-weight: bold">using</span> System<span style="color: #808030">.</span>Collections<span style="color: #808030">.</span>Generic<span style="color: #800080">;</span>
<span style="color: #800000; font-weight: bold">using</span> System<span style="color: #808030">.</span>IO<span style="color: #800080">;</span>
<span style="color: #800000; font-weight: bold">using</span> System<span style="color: #808030">.</span>Linq<span style="color: #800080">;</span>
<span style="color: #800000; font-weight: bold">using</span> System<span style="color: #808030">.</span>Text<span style="color: #800080">;</span>
<span style="color: #800000; font-weight: bold">using</span> System<span style="color: #808030">.</span>Web<span style="color: #800080">;</span>

<span style="color: #800000; font-weight: bold">namespace</span> ContentTypeHttpModule
<span style="color: #800080">{</span>
    <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">class</span> ContentTypeHttpModule <span style="color: #808030">:</span> IHttpModule
    <span style="color: #800080">{</span>
        <span style="color: #800000; font-weight: bold">private</span> <span style="color: #800000; font-weight: bold">const</span> <span style="color: #800000; font-weight: bold">string</span> JSON_CONTENT_TYPE <span style="color: #808030">=</span> <span style="color: #800000">&quot;</span><span style="color: #0000e6">application/json; charset=utf-8</span><span style="color: #800000">&quot;</span><span style="color: #800080">;</span>
        #region IHttpModule Members
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">void</span> Dispose<span style="color: #808030">(</span><span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">void</span> Init<span style="color: #808030">(</span>HttpApplication app<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            app<span style="color: #808030">.</span>BeginRequest <span style="color: #808030">+</span><span style="color: #808030">=</span> OnBeginRequest<span style="color: #800080">;</span>
            app<span style="color: #808030">.</span>ReleaseRequestState <span style="color: #808030">+</span><span style="color: #808030">=</span> OnReleaseRequestState<span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        #endregion
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">void</span> OnBeginRequest<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">object</span> sender<span style="color: #808030">,</span> EventArgs e<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            HttpApplication app <span style="color: #808030">=</span> <span style="color: #808030">(</span>HttpApplication<span style="color: #808030">)</span>sender<span style="color: #800080">;</span>
            HttpRequest resquest <span style="color: #808030">=</span> app<span style="color: #808030">.</span>Request<span style="color: #800080">;</span>
            <span style="color: #800000; font-weight: bold">if</span> <span style="color: #808030">(</span><span style="color: #808030">!</span>resquest<span style="color: #808030">.</span>Url<span style="color: #808030">.</span>AbsolutePath<span style="color: #808030">.</span>Contains<span style="color: #808030">(</span><span style="color: #800000">&quot;</span><span style="color: #0000e6">JSONP-EndPoint.asmx</span><span style="color: #800000">&quot;</span><span style="color: #808030">)</span><span style="color: #808030">)</span> <span style="color: #800000; font-weight: bold">return</span><span style="color: #800080">;</span>
            <span style="color: #800000; font-weight: bold">if</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">string</span><span style="color: #808030">.</span>IsNullOrEmpty<span style="color: #808030">(</span>app<span style="color: #808030">.</span>Context<span style="color: #808030">.</span>Request<span style="color: #808030">.</span>ContentType<span style="color: #808030">)</span><span style="color: #808030">)</span>
            <span style="color: #800080">{</span>
                app<span style="color: #808030">.</span>Context<span style="color: #808030">.</span>Request<span style="color: #808030">.</span>ContentType <span style="color: #808030">=</span> JSON_CONTENT_TYPE<span style="color: #800080">;</span>
            <span style="color: #800080">}</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">void</span> OnReleaseRequestState<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">object</span> sender<span style="color: #808030">,</span> EventArgs e<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            HttpApplication app <span style="color: #808030">=</span> <span style="color: #808030">(</span>HttpApplication<span style="color: #808030">)</span>sender<span style="color: #800080">;</span>
            HttpResponse response <span style="color: #808030">=</span> app<span style="color: #808030">.</span>Response<span style="color: #800080">;</span>
            <span style="color: #800000; font-weight: bold">if</span> <span style="color: #808030">(</span>app<span style="color: #808030">.</span>Context<span style="color: #808030">.</span>Request<span style="color: #808030">.</span>ContentType <span style="color: #808030">!</span><span style="color: #808030">=</span> JSON_CONTENT_TYPE<span style="color: #808030">)</span> <span style="color: #800000; font-weight: bold">return</span><span style="color: #800080">;</span>
            response<span style="color: #808030">.</span>Filter <span style="color: #808030">=</span> <span style="color: #800000; font-weight: bold">new</span> JsonResponseFilter<span style="color: #808030">(</span>response<span style="color: #808030">.</span>Filter<span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
    <span style="color: #800080">}</span>

    <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">class</span> JsonResponseFilter <span style="color: #808030">:</span> Stream
    <span style="color: #800080">{</span>
        <span style="color: #800000; font-weight: bold">private</span> <span style="color: #800000; font-weight: bold">readonly</span> Stream _responseStream<span style="color: #800080">;</span>
        <span style="color: #800000; font-weight: bold">private</span> <span style="color: #800000; font-weight: bold">long</span> _position<span style="color: #800080">;</span>
        <span style="color: #800000; font-weight: bold">public</span> JsonResponseFilter<span style="color: #808030">(</span>Stream responseStream<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            _responseStream <span style="color: #808030">=</span> responseStream<span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">bool</span> CanRead <span style="color: #800080">{</span> get <span style="color: #800080">{</span> <span style="color: #800000; font-weight: bold">return</span> <span style="color: #800000; font-weight: bold">true</span><span style="color: #800080">;</span> <span style="color: #800080">}</span> <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">bool</span> CanSeek <span style="color: #800080">{</span> get <span style="color: #800080">{</span> <span style="color: #800000; font-weight: bold">return</span> <span style="color: #800000; font-weight: bold">true</span><span style="color: #800080">;</span> <span style="color: #800080">}</span> <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">bool</span> CanWrite <span style="color: #800080">{</span> get <span style="color: #800080">{</span> <span style="color: #800000; font-weight: bold">return</span> <span style="color: #800000; font-weight: bold">true</span><span style="color: #800080">;</span> <span style="color: #800080">}</span> <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">long</span> Length <span style="color: #800080">{</span> get <span style="color: #800080">{</span> <span style="color: #800000; font-weight: bold">return</span> <span style="color: #008c00">0</span><span style="color: #800080">;</span> <span style="color: #800080">}</span> <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">long</span> Position <span style="color: #800080">{</span> get <span style="color: #800080">{</span> <span style="color: #800000; font-weight: bold">return</span> _position<span style="color: #800080">;</span> <span style="color: #800080">}</span> set <span style="color: #800080">{</span> _position <span style="color: #808030">=</span> value<span style="color: #800080">;</span> <span style="color: #800080">}</span> <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">void</span> Write<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">byte</span><span style="color: #808030">[</span><span style="color: #808030">]</span> buffer<span style="color: #808030">,</span> <span style="color: #800000; font-weight: bold">int</span> offset<span style="color: #808030">,</span> <span style="color: #800000; font-weight: bold">int</span> count<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            <span style="color: #800000; font-weight: bold">string</span> strBuffer <span style="color: #808030">=</span> Encoding<span style="color: #808030">.</span>UTF8<span style="color: #808030">.</span>GetString<span style="color: #808030">(</span>buffer<span style="color: #808030">,</span> offset<span style="color: #808030">,</span> count<span style="color: #808030">)</span><span style="color: #800080">;</span>
            strBuffer <span style="color: #808030">=</span> AppendJsonpCallback<span style="color: #808030">(</span>strBuffer<span style="color: #808030">,</span> HttpContext<span style="color: #808030">.</span>Current<span style="color: #808030">.</span>Request<span style="color: #808030">)</span><span style="color: #800080">;</span>
            <span style="color: #800000; font-weight: bold">byte</span><span style="color: #808030">[</span><span style="color: #808030">]</span> data <span style="color: #808030">=</span> Encoding<span style="color: #808030">.</span>UTF8<span style="color: #808030">.</span>GetBytes<span style="color: #808030">(</span>strBuffer<span style="color: #808030">)</span><span style="color: #800080">;</span>
            _responseStream<span style="color: #808030">.</span>Write<span style="color: #808030">(</span>data<span style="color: #808030">,</span> <span style="color: #008c00">0</span><span style="color: #808030">,</span> data<span style="color: #808030">.</span>Length<span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">private</span> <span style="color: #800000; font-weight: bold">string</span> AppendJsonpCallback<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">string</span> strBuffer<span style="color: #808030">,</span> HttpRequest request<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            <span style="color: #800000; font-weight: bold">return</span> request<span style="color: #808030">.</span>Params<span style="color: #808030">[</span><span style="color: #800000">&quot;</span><span style="color: #0000e6">callback</span><span style="color: #800000">&quot;</span><span style="color: #808030">]</span> <span style="color: #808030">+</span><span style="color: #800000">&quot;</span><span style="color: #0000e6">(</span><span style="color: #800000">&quot;</span> <span style="color: #808030">+</span> strBuffer <span style="color: #808030">+</span> <span style="color: #800000">&quot;</span><span style="color: #0000e6">);</span><span style="color: #800000">&quot;</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">void</span> Close<span style="color: #808030">(</span><span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            _responseStream<span style="color: #808030">.</span>Close<span style="color: #808030">(</span><span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">void</span> Flush<span style="color: #808030">(</span><span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            _responseStream<span style="color: #808030">.</span>Flush<span style="color: #808030">(</span><span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">long</span> Seek<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">long</span> offset<span style="color: #808030">,</span> SeekOrigin origin<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            <span style="color: #800000; font-weight: bold">return</span> _responseStream<span style="color: #808030">.</span>Seek<span style="color: #808030">(</span>offset<span style="color: #808030">,</span> origin<span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">void</span> SetLength<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">long</span> length<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            _responseStream<span style="color: #808030">.</span>SetLength<span style="color: #808030">(</span>length<span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
        <span style="color: #800000; font-weight: bold">public</span> <span style="color: #800000; font-weight: bold">override</span> <span style="color: #800000; font-weight: bold">int</span> Read<span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">byte</span><span style="color: #808030">[</span><span style="color: #808030">]</span> buffer<span style="color: #808030">,</span> <span style="color: #800000; font-weight: bold">int</span> offset<span style="color: #808030">,</span> <span style="color: #800000; font-weight: bold">int</span> count<span style="color: #808030">)</span>
        <span style="color: #800080">{</span>
            <span style="color: #800000; font-weight: bold">return</span> _responseStream<span style="color: #808030">.</span>Read<span style="color: #808030">(</span>buffer<span style="color: #808030">,</span> offset<span style="color: #808030">,</span> count<span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
    <span style="color: #800080">}</span>
<span style="color: #800080">}</span></pre>
<p>该DLL编译后，存放到bin目录下，并且修改站点的web.config中的system.web下的httpmodules节点，以注册该HTTPModule。</p>
<pre style="background: #ffffff; color: #000000"><span style="color: #a65700">&lt;</span><span style="color: #5f5035">add</span> <span style="color: #274796">name</span><span style="color: #808030">=</span><span style="color: #0000e6">&quot;</span><span style="color: #0000e6">ContentTypeHttpModule</span><span style="color: #0000e6">&quot;</span>
                    <span style="color: #274796">type</span><span style="color: #808030">=</span><span style="color: #0000e6">&quot;</span><span style="color: #0000e6">ContentTypeHttpModule.ContentTypeHttpModule, ContentTypeHttpModule</span><span style="color: #0000e6">&quot;</span> <span style="color: #a65700">/&gt;</span></pre>
<p>3、客户端实现使用，要依赖jquery库，可选择性的使用json2.js库，代码如下</p>
<pre style="background: #ffffff; color: #000000"><span style="color: #800000; font-weight: bold">function</span> <span style="color: #800000; font-weight: bold">test</span><span style="color: #808030">(</span><span style="color: #808030">)</span> <span style="color: #800080">{</span>
    $<span style="color: #808030">.</span>ajax<span style="color: #808030">(</span><span style="color: #800080">{</span> url<span style="color: #800080">:</span> <span style="color: #0000e6">&quot;http://localhost:1690/JSONP-EndPoint.asmx/Sum&quot;</span><span style="color: #808030">,</span>
    data<span style="color: #800080">:</span> <span style="color: #800080">{</span> x<span style="color: #800080">:</span> JSON<span style="color: #808030">.</span>stringify<span style="color: #808030">(</span><span style="color: #0000e6">&quot;Now i am getting jsop string&quot;</span><span style="color: #808030">)</span><span style="color: #808030">,</span> y<span style="color: #800080">:</span> JSON<span style="color: #808030">.</span>stringify<span style="color: #808030">(</span><span style="color: #0000e6">&quot;2nd param&quot;</span><span style="color: #808030">)</span> <span style="color: #800080">}</span><span style="color: #808030">,</span>
        dataType<span style="color: #800080">:</span> <span style="color: #0000e6">&quot;jsonp&quot;</span><span style="color: #808030">,</span>
        success<span style="color: #800080">:</span> <span style="color: #800000; font-weight: bold">function</span><span style="color: #808030">(</span>json<span style="color: #808030">)</span> <span style="color: #800080">{</span>
            alert<span style="color: #808030">(</span>json<span style="color: #808030">.</span>d<span style="color: #808030">)</span><span style="color: #800080">;  //注意，.d是Asp.Net的ScriptService输出的值内容节点固定名字</span>
        <span style="color: #800080">}</span><span style="color: #808030">,</span>
        error<span style="color: #800080">:</span> <span style="color: #800000; font-weight: bold">function</span><span style="color: #808030">(</span><span style="color: #808030">)</span> <span style="color: #800080">{</span>
            alert<span style="color: #808030">(</span><span style="color: #0000e6">&quot;Hit error fn!&quot;</span><span style="color: #808030">)</span><span style="color: #800080">;</span>
        <span style="color: #800080">}</span>
    <span style="color: #800080">}</span><span style="color: #808030">)</span><span style="color: #800080">;</span>
<span style="color: #800080">}</span></pre>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=732</link>
      <title><![CDATA[一位软件工程师的7年总结:借此导航自己人生]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-12-3 17:12:13</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=732</guid>
      <comments>
              /Blog/Blog.aspx?Id=732#commentbox
            </comments>
      <description><![CDATA[<p>1、分享第一条经验：&ldquo;学历代表过去、能力代表现在、<strong><font color="#ff0000">学习力代表未来</font></strong>。&rdquo;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要：&ldquo;重要的道理明白太晚将抱憾终生！&rdquo;所以放在每一条，让刚刚毕业的朋友们早点看到哈！</p>
<p>2、一定要确定自己的<strong><font color="#ff0000">发展方向</font></strong>，并<font color="#ff0000">为此目的制定可行的计划</font>。<br />
&nbsp;&nbsp;&nbsp; 不要说什么，&ldquo;我刚毕业，还不知道将来可能做什么？&rdquo;，&ldquo;跟着感觉走，先做做看&rdquo;。因为，这样的观点会通过 你的潜意识去暗示你的行为无所事事、碌碌无为。<u><font color="#800080">一直做技术，将来成为专家级人物？向管理方向走，成为职业经理人？先熟悉行业和领域，将来自立门户？</font></u>还是先 在行业里面混混，过几年转行做点别的？这很重要，它将决定你近几年、十年内&ldquo;做什么事情才是在做正确的事情！&rdquo;。</p>
<p>&nbsp;</p><p><br />
3、软件开发团队中，技术不是万能的，但没有技术是万万不能的！<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队 中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基础。算我孤 陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&ldquo;高学历的牛人&rdquo;（非 技术型）带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&ldquo;再也受不了啦！&rdquo;四分五裂、各奔东西。那个项目的&ldquo;成功度&rdquo;大家可想而知了。</p>
<p><br />
4、<strong><font color="#ff0000">详细制定自己软件开发专业知识学习计划，并注意及时修正和调整（软件开发技术变化实在太快）。</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 请牢记：&ldquo;如果一个软件开发人员在1、2年内都没有更新过自己的知识，那么，其实他已经不再属于这个行业了。&rdquo;不要告诉自己没有时间。来自时间管理领域的著名的&ldquo;三八原则&rdquo;告诫我们：另外的那8小时如何使用 将决定你的人生成败！本人自毕业以来，平均每天实际学习时间超过2小时。</p>
<p><br />
5、书籍是人类进步的阶梯，对软件开发人员尤其如此。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 书籍是学习知识的最有效途径，<em><font color="#339966">不要过多地指望在工作中能遇到&ldquo;世外高人&rdquo;，并不厌其烦地教你。</font></em>对于花钱买书，我个人经验是：<strong><font color="#ff9900">千万别买国内那帮人出的书</font></strong>！我买的那些 家伙出的书，100%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉<strong><font color="#ff0000">。&ldquo;拥有书籍并不表示拥有知识；拥有知识并不表示拥有技 能；拥有技能并不表示拥有文化；拥有文化并不表示拥有智慧。&rdquo;只有将书本变成的自己智慧，才算是真正拥有了它。</font></strong></p>
<p><br />
6、<strong><font color="#ff0000">不要仅局限于对某项 技术的表面使用上，哪怕你只是偶尔用一、二次。<br />
</font></strong>&nbsp;&nbsp;&nbsp; &nbsp;&ldquo;对任何事物不究就里&rdquo;是任何行业的工程师所不应该具备的素质。开发Windows应用程序，看看 Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序；用VC＋＋、</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码；除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架，<strong><font color="#008080">抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的</font></strong>。 试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&ldquo;知其然且知其所以然&rdquo;！</p>
<p><br />
7、<font color="#800080">在一种语言上编程，但别为其束缚了思想。</font><br />
&nbsp;&nbsp;&nbsp;&nbsp; &ldquo;代码大全&rdquo;中说：&ldquo;深入一门语言编程，不要浮于表面&rdquo;。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由， 所以也没有哪门语言是&ldquo;包治百病&rdquo;的&ldquo;灵丹妙药&rdquo;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式？用传统的桌面开发工具（目前主要有VC++、Delphi） 进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀 的开源框架？在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式？为什么一切都必须 以个人、团队在当然开发语言上的传统或者经验来解决问题？？？&ldquo;他山之石、可以攻玉&rdquo;。</p>
<p><br />
<strong><font color="#ff0000" size="4">8、养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验 者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题（其实这个结论不应该被局限在软件开发领域、可以延伸到很多方 面）。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没 有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。</p>
<p><br />
<strong><font size="4">9、理论与实践并重，内外双修。</font></strong><br />
&nbsp;&nbsp;&nbsp; 工程师的内涵是：以工 程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人（个人观点、欢迎探讨）。掌握软件开发 语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工 作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软 件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</p>
<p><br />
<strong><font face="Verdana" size="4">10、心态有多开放，视野就有多开阔。</font></strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的 产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6 年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思 想，尽可能地与人交流与分享，或者传授给开发团队的成员。&ldquo;与人交换苹果之后，每个人还是只有一个苹果；但交换思想之后，每个人都拥有两种思想&rdquo;，道理大 家都懂，但有多少人真正能做到呢？</p>
<p><br />
<strong><font size="4">11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网络早已不再只是&ldquo;虚拟世界&rdquo;，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工 作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当别人拿着合同找你合作，你却这也不会，那也不熟时，你将后 悔莫及。</p>
<p><strong><font size="4">12、书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。</font></strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 诺贝尔经济学奖得主西蒙教授的研究结果表明：&ldquo;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&rdquo;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可见，掌握一门陌生的学问远远没有想象的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识，有空花时间看看，韬光养晦、未雨绸缪。</p>
<p><br />
13、本文的总结与反思：<br />
&nbsp;<font color="#800080" size="4">A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。<br />
&nbsp;B：提高软件知识和技术只是问题的表面，<strong><font color="#ff0000">本质是要提高自己认识问题、分析问题、解决问题的思想高度</font></strong>。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。<br />
&nbsp;C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=722</link>
      <title><![CDATA[Oracle插入性能小测]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-11-3 15:53:17</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=722</guid>
      <comments>
              /Blog/Blog.aspx?Id=722#commentbox
            </comments>
      <description><![CDATA[<p>因为测试一些东东，需要一些数据，因此就写了个增加数据的东东。这个一来能满足写入的数据，二来能顺便测试一下Oracle的性能。</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span>&nbsp;</span><span class="keyword">declare</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>maxrecords&nbsp;constant&nbsp;</span><span class="keyword">int</span><span>:=1000000; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>i&nbsp;</span><span class="keyword">int</span><span>&nbsp;:=1; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">Begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>&nbsp;i&nbsp;</span><span class="op">in</span><span>&nbsp;1..maxrecords&nbsp;loop &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">Insert</span><span>&nbsp;</span><span class="keyword">into</span><span>&nbsp;TEST_TEMP(</span><span class="keyword">NAME</span><span>)&nbsp;</span><span class="keyword">values</span><span>&nbsp;(SYS_GUID()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">end</span><span>&nbsp;loop; &nbsp;&nbsp;</span></li>
    <li class=""><span>dbms_output.put_line(</span><span class="string">'&nbsp;OK&nbsp;'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">commit</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">end</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">--100W&nbsp;325.969&nbsp;s</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
服务器环境：</p>
<p>linux as 4 + oracle 10g 内存1G，Xeon3.0G 处于Windows平台下的虚拟机。</p><p>差不多每秒种3000多条数据，第二次执行的时候是318秒多一点。</p>
<p>select count(0) from test_temp 时约0.2秒大右，加上ID&gt; 300000的条件，为0.02秒左右。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=721</link>
      <title><![CDATA[Oracle 新增记录并返回新增加的ID]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-11-2 17:21:52</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=721</guid>
      <comments>
              /Blog/Blog.aspx?Id=721#commentbox
            </comments>
      <description><![CDATA[<div>Oracle 新增记录并返回新增加的ID</div>
<div>&nbsp;</div>
<div>&nbsp;
<div class="codeText">
<div class="codeHead">PL/SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">CREATE</span><span>&nbsp;</span><span class="op">OR</span><span>&nbsp;</span><span class="func">REPLACE</span><span>&nbsp;</span><span class="keyword">PROCEDURE</span><span>&nbsp;TEST_TEMP_INSERT_SP&nbsp;( &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;V_NAME&nbsp;string, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;V_ID&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">AS</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">BEGIN</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">INSERT</span><span>&nbsp;</span><span class="keyword">INTO</span><span>&nbsp;TEST_TEMP( &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;</span><span class="keyword">NAME</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;)</span><span class="keyword">VALUES</span><span>( &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;V_NAME &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;returning&nbsp;ID&nbsp;</span><span class="keyword">into</span><span>&nbsp;V_ID&nbsp;&nbsp;; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">COMMIT</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">END</span><span>;&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>ID是用序列和触发器来生成的。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=713</link>
      <title><![CDATA[oracle中触发器中:new和:old 的使用方法]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-10-22 11:11:25</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=713</guid>
      <comments>
              /Blog/Blog.aspx?Id=713#commentbox
            </comments>
      <description><![CDATA[<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">create</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="func">replace</span><span>&nbsp;</span><span class="keyword">trigger</span><span>&nbsp;TRI_PrintTest &nbsp;&nbsp;</span></span></li>
    <li class=""><span>before&nbsp;</span><span class="keyword">delete</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="keyword">insert</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="keyword">update</span><span>&nbsp;</span><span class="keyword">on</span><span>&nbsp;TEST_EXAM　　</span><span class="comment">--触发事件 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>&nbsp;each&nbsp;row　　　　　　　　　　　　　　　　　　</span><span class="comment">--&nbsp;每修改一行都需要调用此过程 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(:new.IDNEW);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--IDNEW字段更新后的值 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(:old.IDNEW);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--IDNEW字段更新前的值 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">end</span><span>;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>原IDNEW字段是1时，</p>
<p>使用</p>
<p>update TEST_EXAM set IDNEW=5 where SN='5454';</p>
<p>&nbsp;</p>
<p>则打印结果为：</p>
<p>5<br />
1</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=712</link>
      <title><![CDATA[ORACLE函数大全]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-10-22 10:26:06</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=712</guid>
      <comments>
              /Blog/Blog.aspx?Id=712#commentbox
            </comments>
      <description><![CDATA[<p><br />
SQL中的单记录函数<br />
1.ASCII<br />
返回与指定的字符对应的十进制数;<br />
SQL&gt; select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZERO&nbsp;&nbsp;&nbsp;&nbsp; SPACE<br />
--------- --------- --------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32</p>
<p><br />
2.CHR<br />
给出整数,返回对应的字符;<br />
SQL&gt; select chr(54740) zhao,chr(65) chr65 from dual;</p>
<p>ZH C<br />
-- -<br />
赵 A</p>
<p>3.CONCAT<br />
连接两个字符串;<br />
SQL&gt; select concat('010-','88888888')||'转23'&nbsp; 高乾竞电话 from dual;</p>
<p>高乾竞电话<br />
----------------<br />
010-88888888转23</p>
<p>4.INITCAP<br />
返回字符串并将字符串的第一个字母变为大写;<br />
SQL&gt; select initcap('smith') upp from dual;</p>
<p>UPP<br />
-----<br />
Smith</p>
<p><br />
5.INSTR(C1,C2,I,J)<br />
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;<br />
C1&nbsp;&nbsp;&nbsp; 被搜索的字符串<br />
C2&nbsp;&nbsp;&nbsp; 希望搜索的字符串<br />
I&nbsp;&nbsp;&nbsp;&nbsp; 搜索的开始位置,默认为1<br />
J&nbsp;&nbsp;&nbsp;&nbsp; 出现的位置,默认为1<br />
SQL&gt; select instr('oracle traning','ra',1,2) instring from dual;</p>
<p>&nbsp;INSTRING<br />
---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9</p>
<p><br />
6.LENGTH<br />
返回字符串的长度;<br />
SQL&gt; select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;</p>
<p>NAME&nbsp;&nbsp; LENGTH(NAME) ADDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LENGTH(ADDR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAL LENGTH(TO_CHAR(SAL))<br />
------ ------------ ---------------- ------------ --------- --------------------<br />
高乾竞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 北京市海锭区&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp; 9999.99&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7</p>
<p>&nbsp;</p>
<p>&nbsp;</p><p>7.LOWER<br />
返回字符串,并将所有的字符小写<br />
SQL&gt; select lower('AaBbCcDd')AaBbCcDd from dual;</p>
<p>AABBCCDD<br />
--------<br />
aabbccdd</p>
<p><br />
8.UPPER<br />
返回字符串,并将所有的字符大写<br />
SQL&gt; select upper('AaBbCcDd') upper from dual;</p>
<p>UPPER<br />
--------<br />
AABBCCDD</p>
<p>&nbsp;</p>
<p>9.RPAD和LPAD(粘贴字符)<br />
RPAD&nbsp; 在列的右边粘贴字符<br />
LPAD&nbsp; 在列的左边粘贴字符<br />
SQL&gt; select lpad(rpad('gao',10,'*'),17,'*')from dual;</p>
<p>LPAD(RPAD('GAO',1<br />
-----------------<br />
*******gao*******<br />
不够字符则用*来填满</p>
<p><br />
10.LTRIM和RTRIM<br />
LTRIM&nbsp; 删除左边出现的字符串<br />
RTRIM&nbsp; 删除右边出现的字符串<br />
SQL&gt; select ltrim(rtrim('&nbsp;&nbsp; gao qian jing&nbsp;&nbsp; ',' '),' ') from dual;</p>
<p>LTRIM(RTRIM('<br />
-------------<br />
gao qian jing</p>
<p><br />
11.SUBSTR(string,start,count)<br />
取子字符串,从start开始,取count个<br />
SQL&gt; select substr('13088888888',3,8) from dual;</p>
<p>SUBSTR('<br />
--------<br />
08888888</p>
<p><br />
12.REPLACE('string','s1','s2')<br />
string&nbsp;&nbsp; 希望被替换的字符或变量 <br />
s1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 被替换的字符串<br />
s2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要替换的字符串<br />
SQL&gt; select replace('he love you','he','i') from dual;</p>
<p>REPLACE('H<br />
----------<br />
i love you</p>
<p><br />
13.SOUNDEX<br />
返回一个与给定的字符串读音相同的字符串<br />
SQL&gt; create table table1(xm varchar(8));<br />
SQL&gt; insert into table1 values('weather');<br />
SQL&gt; insert into table1 values('wether');<br />
SQL&gt; insert into table1 values('gao');</p>
<p>SQL&gt; select xm from table1 where soundex(xm)=soundex('weather');</p>
<p>XM<br />
--------<br />
weather<br />
wether</p>
<p><br />
14.TRIM('s' from 'string')<br />
LEADING&nbsp;&nbsp; 剪掉前面的字符<br />
TRAILING&nbsp; 剪掉后面的字符<br />
如果不指定,默认为空格符</p>
<p>15.ABS<br />
返回指定值的绝对值<br />
SQL&gt; select abs(100),abs(-100) from dual;</p>
<p>&nbsp;ABS(100) ABS(-100)<br />
--------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100</p>
<p><br />
16.ACOS<br />
给出反余弦的值<br />
SQL&gt; select acos(-1) from dual;</p>
<p>&nbsp;ACOS(-1)<br />
---------<br />
3.1415927</p>
<p><br />
17.ASIN<br />
给出反正弦的值<br />
SQL&gt; select asin(0.5) from dual;</p>
<p>ASIN(0.5)<br />
---------<br />
.52359878</p>
<p><br />
18.ATAN<br />
返回一个数字的反正切值<br />
SQL&gt; select atan(1) from dual;</p>
<p>&nbsp; ATAN(1)<br />
---------<br />
.78539816</p>
<p><br />
19.CEIL<br />
返回大于或等于给出数字的最小整数<br />
SQL&gt; select ceil(3.1415927) from dual;</p>
<p>CEIL(3.1415927)<br />
---------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4</p>
<p><br />
20.COS<br />
返回一个给定数字的余弦<br />
SQL&gt; select cos(-3.1415927) from dual;</p>
<p>COS(-3.1415927)<br />
---------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1</p>
<p><br />
21.COSH<br />
返回一个数字反余弦值<br />
SQL&gt; select cosh(20) from dual;</p>
<p>&nbsp;COSH(20)<br />
---------<br />
242582598</p>
<p><br />
22.EXP<br />
返回一个数字e的n次方根<br />
SQL&gt; select exp(2),exp(1) from dual;</p>
<p>&nbsp;&nbsp; EXP(2)&nbsp;&nbsp;&nbsp; EXP(1)<br />
--------- ---------<br />
7.3890561 2.7182818</p>
<p><br />
23.FLOOR<br />
对给定的数字取整数<br />
SQL&gt; select floor(2345.67) from dual;</p>
<p>FLOOR(2345.67)<br />
--------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2345</p>
<p><br />
24.LN<br />
返回一个数字的对数值<br />
SQL&gt; select ln(1),ln(2),ln(2.7182818) from dual;</p>
<p>&nbsp;&nbsp;&nbsp; LN(1)&nbsp;&nbsp;&nbsp;&nbsp; LN(2) LN(2.7182818)<br />
--------- --------- -------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 .69314718&nbsp;&nbsp;&nbsp;&nbsp; .99999999</p>
<p><br />
25.LOG(n1,n2)<br />
返回一个以n1为底n2的对数 <br />
SQL&gt; select log(2,1),log(2,4) from dual;</p>
<p>&nbsp;LOG(2,1)&nbsp; LOG(2,4)<br />
--------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</p>
<p><br />
26.MOD(n1,n2)<br />
返回一个n1除以n2的余数<br />
SQL&gt; select mod(10,3),mod(3,3),mod(2,3) from dual;</p>
<p>MOD(10,3)&nbsp; MOD(3,3)&nbsp; MOD(2,3)<br />
--------- --------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2</p>
<p><br />
27.POWER<br />
返回n1的n2次方根<br />
SQL&gt; select power(2,10),power(3,3) from dual;</p>
<p>POWER(2,10) POWER(3,3)<br />
----------- ----------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 27</p>
<p><br />
28.ROUND和TRUNC<br />
按照指定的精度进行舍入<br />
SQL&gt; select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;</p>
<p>ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)<br />
----------- ------------ ----------- ------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -55</p>
<p><br />
29.SIGN<br />
取数字n的符号,大于0返回1,小于0返回-1,等于0返回0<br />
SQL&gt; select sign(123),sign(-100),sign(0) from dual;</p>
<p>SIGN(123) SIGN(-100)&nbsp;&nbsp; SIGN(0)<br />
--------- ---------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0</p>
<p><br />
30.SIN<br />
返回一个数字的正弦值<br />
SQL&gt; select sin(1.57079) from dual;</p>
<p>SIN(1.57079)<br />
------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
<p><br />
31.SIGH<br />
返回双曲正弦的值<br />
SQL&gt; select sin(20),sinh(20) from dual;</p>
<p>&nbsp; SIN(20)&nbsp; SINH(20)<br />
--------- ---------<br />
.91294525 242582598</p>
<p><br />
32.SQRT<br />
返回数字n的根<br />
SQL&gt; select sqrt(64),sqrt(10) from dual;</p>
<p>&nbsp;SQRT(64)&nbsp; SQRT(10)<br />
--------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 3.1622777</p>
<p><br />
33.TAN<br />
返回数字的正切值<br />
SQL&gt; select tan(20),tan(10) from dual;</p>
<p>&nbsp; TAN(20)&nbsp;&nbsp; TAN(10)<br />
--------- ---------<br />
2.2371609 .64836083</p>
<p><br />
34.TANH<br />
返回数字n的双曲正切值<br />
SQL&gt; select tanh(20),tan(20) from dual;</p>
<p>&nbsp;TANH(20)&nbsp;&nbsp; TAN(20)<br />
--------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 2.2371609</p>
<p>&nbsp;</p>
<p>35.TRUNC<br />
按照指定的精度截取一个数<br />
SQL&gt; select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;</p>
<p>&nbsp;&nbsp; TRUNC1 TRUNC(124.16666,2)<br />
--------- ------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 124.16</p>
<p>&nbsp;</p>
<p>36.ADD_MONTHS<br />
增加或减去月份<br />
SQL&gt; select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;</p>
<p>TO_CHA<br />
------<br />
200002<br />
SQL&gt; select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;</p>
<p>TO_CHA<br />
------<br />
199910</p>
<p><br />
37.LAST_DAY<br />
返回日期的最后一天<br />
SQL&gt; select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;</p>
<p>TO_CHAR(SY TO_CHAR((S<br />
---------- ----------<br />
2004.05.09 2004.05.10<br />
SQL&gt; select last_day(sysdate) from dual;</p>
<p>LAST_DAY(S<br />
----------<br />
31-5月 -04</p>
<p><br />
38.MONTHS_BETWEEN(date2,date1)<br />
给出date2-date1的月份<br />
SQL&gt; select months_between('19-12月-1999','19-3月-1999') mon_between from dual;</p>
<p>MON_BETWEEN<br />
-----------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9<br />
SQL&gt;selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;</p>
<p>&nbsp;MON_BETW<br />
---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -60</p>
<p><br />
39.NEW_TIME(date,'this','that')<br />
给出在this时区=other时区的日期和时间<br />
SQL&gt; select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time<br />
&nbsp; 2&nbsp; (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;</p>
<p>BJ_TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LOS_ANGLES<br />
------------------- -------------------<br />
2004.05.09 11:05:32 2004.05.09 18:05:32</p>
<p><br />
40.NEXT_DAY(date,'day')<br />
给出日期date和星期x之后计算下一个星期的日期<br />
SQL&gt; select next_day('18-5月-2001','星期五') next_day from dual;</p>
<p>NEXT_DAY<br />
----------<br />
25-5月 -01</p>
<p>&nbsp;</p>
<p>41.SYSDATE<br />
用来得到系统的当前日期<br />
SQL&gt; select to_char(sysdate,'dd-mm-yyyy day') from dual;</p>
<p>TO_CHAR(SYSDATE,'<br />
-----------------<br />
09-05-2004 星期日<br />
trunc(date,fmt)按照给出的要求将日期截断,如果fmt='mi'表示保留分,截断秒<br />
SQL&gt; select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,<br />
&nbsp; 2&nbsp; to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;</p>
<p>HH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HHMM<br />
------------------- -------------------<br />
2004.05.09 11:00:00 2004.05.09 11:17:00</p>
<p>&nbsp;</p>
<p>42.CHARTOROWID<br />
将字符数据类型转换为ROWID类型<br />
SQL&gt; select rowid,rowidtochar(rowid),ename from scott.emp;</p>
<p>ROWID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ROWIDTOCHAR(ROWID) ENAME<br />
------------------ ------------------ ----------<br />
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH<br />
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN<br />
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD<br />
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES</p>
<p><br />
43.CONVERT(c,dset,sset)<br />
将源字符串 sset从一个语言字符集转换到另一个目的dset字符集<br />
SQL&gt; select convert('strutz','we8hp','f7dec') &quot;conversion&quot; from dual;</p>
<p>conver<br />
------<br />
strutz</p>
<p><br />
44.HEXTORAW<br />
将一个十六进制构成的字符串转换为二进制</p>
<p><br />
45.RAWTOHEXT<br />
将一个二进制构成的字符串转换为十六进制</p>
<p>&nbsp;</p>
<p>46.ROWIDTOCHAR<br />
将ROWID数据类型转换为字符类型</p>
<p>&nbsp;</p>
<p>47.TO_CHAR(date,'format')<br />
SQL&gt; select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;</p>
<p>TO_CHAR(SYSDATE,'YY<br />
-------------------<br />
2004/05/09 21:14:41</p>
<p>&nbsp;</p>
<p>48.TO_DATE(string,'format')<br />
将字符串转化为ORACLE中的一个日期</p>
<p><br />
49.TO_MULTI_BYTE<br />
将字符串中的单字节字符转化为多字节字符<br />
SQL&gt;&nbsp; select to_multi_byte('高') from dual;</p>
<p>TO<br />
--<br />
高</p>
<p><br />
50.TO_NUMBER<br />
将给出的字符转换为数字<br />
SQL&gt; select to_number('1999') year from dual;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; YEAR<br />
---------<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1999</p>
<p><br />
51.BFILENAME(dir,file)<br />
指定一个外部二进制文件<br />
SQL&gt;insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));</p>
<p><br />
52.CONVERT('x','desc','source')<br />
将x字段或变量的源source转换为desc<br />
SQL&gt; select sid,serial#,username,decode(command,<br />
&nbsp; 2&nbsp; 0,'none',<br />
&nbsp; 3&nbsp; 2,'insert',<br />
&nbsp; 4&nbsp; 3,<br />
&nbsp; 5&nbsp; 'select',<br />
&nbsp; 6&nbsp; 6,'update',<br />
&nbsp; 7&nbsp; 7,'delete',<br />
&nbsp; 8&nbsp; 8,'drop',<br />
&nbsp; 9&nbsp; 'other') cmd&nbsp; from v$session where type!='background';</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SID&nbsp;&nbsp; SERIAL# USERNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMD<br />
--------- --------- ------------------------------ ------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1275&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1275&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 GAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 40 GAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; none</p>
<p><br />
53.DUMP(s,fmt,start,length)<br />
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2类型的值<br />
SQL&gt; col global_name for a30<br />
SQL&gt; col dump_string for a50<br />
SQL&gt; set lin 200<br />
SQL&gt; select global_name,dump(global_name,1017,8,5) dump_string from global_name;</p>
<p>GLOBAL_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DUMP_STRING<br />
------------------------------ --------------------------------------------------<br />
ORACLE.WORLD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D</p>
<p><br />
54.EMPTY_BLOB()和EMPTY_CLOB()<br />
这两个函数都是用来对大数据类型字段进行初始化操作的函数</p>
<p><br />
55.GREATEST<br />
返回一组表达式中的最大值,即比较字符的编码大小.<br />
SQL&gt; select greatest('AA','AB','AC') from dual;</p>
<p>GR<br />
--<br />
AC<br />
SQL&gt; select greatest('啊','安','天') from dual;</p>
<p>GR<br />
--<br />
天</p>
<p><br />
56.LEAST<br />
返回一组表达式中的最小值 <br />
SQL&gt; select least('啊','安','天') from dual;</p>
<p>LE<br />
--<br />
啊</p>
<p><br />
57.UID<br />
返回标识当前用户的唯一整数<br />
SQL&gt; show user<br />
USER 为&quot;GAO&quot;<br />
SQL&gt; select username,user_id from dba_users where user_id=uid;</p>
<p>USERNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USER_ID<br />
------------------------------ ---------<br />
GAO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 25</p>
<p>&nbsp;</p>
<p>58.USER<br />
返回当前用户的名字<br />
SQL&gt; select user from&nbsp; dual;</p>
<p>USER<br />
------------------------------<br />
GAO</p>
<p><br />
59.USEREVN<br />
返回当前用户环境的信息,opt可以是:<br />
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE<br />
ISDBA&nbsp; 查看当前用户是否是DBA如果是则返回true<br />
SQL&gt; select userenv('isdba') from dual;</p>
<p>USEREN<br />
------<br />
FALSE<br />
SQL&gt; select userenv('isdba') from dual;</p>
<p>USEREN<br />
------<br />
TRUE<br />
SESSION<br />
返回会话标志<br />
SQL&gt; select userenv('sessionid') from dual;</p>
<p>USERENV('SESSIONID')<br />
--------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 152<br />
ENTRYID<br />
返回会话人口标志<br />
SQL&gt; select userenv('entryid') from dual;</p>
<p>USERENV('ENTRYID')<br />
------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br />
INSTANCE<br />
返回当前INSTANCE的标志<br />
SQL&gt; select userenv('instance') from dual;</p>
<p>USERENV('INSTANCE')<br />
-------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1<br />
LANGUAGE<br />
返回当前环境变量<br />
SQL&gt; select userenv('language') from dual;</p>
<p>USERENV('LANGUAGE')<br />
----------------------------------------------------<br />
SIMPLIFIED CHINESE_CHINA.ZHS16GBK<br />
LANG<br />
返回当前环境的语言的缩写<br />
SQL&gt; select userenv('lang') from dual;</p>
<p>USERENV('LANG')<br />
----------------------------------------------------<br />
ZHS<br />
TERMINAL<br />
返回用户的终端或机器的标志<br />
SQL&gt; select userenv('terminal') from dual;</p>
<p>USERENV('TERMINA<br />
----------------<br />
GAO<br />
VSIZE(X)<br />
返回X的大小(字节)数<br />
SQL&gt; select vsize(user),user from dual;</p>
<p>VSIZE(USER) USER<br />
----------- ------------------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 SYSTEM</p>
<p>&nbsp;</p>
<p>60.AVG(DISTINCT|ALL)<br />
all表示对所有的值求平均值,distinct只对不同的值求平均值<br />
SQLWKS&gt; create table table3(xm varchar(8),sal number(7,2));<br />
语句已处理。<br />
SQLWKS&gt;&nbsp; insert into table3 values('gao',1111.11);<br />
SQLWKS&gt;&nbsp; insert into table3 values('gao',1111.11);<br />
SQLWKS&gt;&nbsp; insert into table3 values('zhu',5555.55);<br />
SQLWKS&gt; commit;</p>
<p>SQL&gt; select avg(distinct sal) from gao.table3;</p>
<p>AVG(DISTINCTSAL)<br />
----------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3333.33</p>
<p>SQL&gt; select avg(all sal) from gao.table3;</p>
<p>AVG(ALLSAL)<br />
-----------<br />
&nbsp;&nbsp;&nbsp; 2592.59</p>
<p><br />
61.MAX(DISTINCT|ALL)<br />
求最大值,ALL表示对所有的值求最大值,DISTINCT表示对不同的值求最大值,相同的只取一次<br />
SQL&gt; select max(distinct sal) from scott.emp;</p>
<p>MAX(DISTINCTSAL)<br />
----------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5000</p>
<p><br />
62.MIN(DISTINCT|ALL)<br />
求最小值,ALL表示对所有的值求最小值,DISTINCT表示对不同的值求最小值,相同的只取一次<br />
SQL&gt; select min(all sal) from gao.table3;</p>
<p>MIN(ALLSAL)<br />
-----------<br />
&nbsp;&nbsp;&nbsp; 1111.11</p>
<p><br />
63.STDDEV(distinct|all)<br />
求标准差,ALL表示对所有的值求标准差,DISTINCT表示只对不同的值求标准差<br />
SQL&gt; select stddev(sal) from scott.emp;</p>
<p>STDDEV(SAL)<br />
-----------<br />
&nbsp; 1182.5032</p>
<p>SQL&gt; select stddev(distinct sal) from scott.emp;</p>
<p>STDDEV(DISTINCTSAL)<br />
-------------------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1229.951</p>
<p>&nbsp;</p>
<p>64.VARIANCE(DISTINCT|ALL)<br />
求协方差</p>
<p>SQL&gt; select variance(sal) from scott.emp;</p>
<p>VARIANCE(SAL)<br />
-------------<br />
&nbsp;&nbsp;&nbsp; 1398313.9</p>
<p><br />
65.GROUP BY<br />
主要用来对一组数进行统计<br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp group by deptno;</p>
<p>&nbsp;&nbsp; DEPTNO&nbsp; COUNT(*)&nbsp; SUM(SAL)<br />
--------- --------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8750<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; 10875<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9400</p>
<p>&nbsp;</p>
<p>66.HAVING<br />
对分组统计再加限制条件<br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)&gt;=5;</p>
<p>&nbsp;&nbsp; DEPTNO&nbsp; COUNT(*)&nbsp; SUM(SAL)<br />
--------- --------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; 10875<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9400<br />
SQL&gt; select deptno,count(*),sum(sal) from scott.emp having count(*)&gt;=5 group by deptno ;</p>
<p>&nbsp;&nbsp; DEPTNO&nbsp; COUNT(*)&nbsp; SUM(SAL)<br />
--------- --------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5&nbsp;&nbsp;&nbsp;&nbsp; 10875<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9400</p>
<p><br />
67.ORDER BY<br />
用于对查询到的结果进行排序输出<br />
SQL&gt; select deptno,ename,sal from scott.emp order by deptno,sal desc;</p>
<p>&nbsp;&nbsp; DEPTNO ENAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SAL<br />
--------- ---------- ---------<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 KING&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 CLARK&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2450<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10 MILLER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1300<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 SCOTT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 FORD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3000<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 JONES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2975<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 ADAMS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 20 SMITH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 800<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 BLAKE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2850<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 ALLEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1600<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 TURNER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1500<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 WARD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1250<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 MARTIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1250<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30 JAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 950</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=710</link>
      <title><![CDATA[如何编写单元测试用例（白盒测试）]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-10-9 12:00:44</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=710</guid>
      <comments>
              /Blog/Blog.aspx?Id=710#commentbox
            </comments>
      <description><![CDATA[<p>一、 单元测试的概念<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;单元通俗的说就是指一个实现简单功能的函数。单元测试就是只用一组特定的输入(<font face="Times New Roman" color="#000000" size="3">测试用例</font>)测试函数是否功能正常，并且返回了正确的输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;测试的覆盖种类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.语句覆盖：语句覆盖就是设计若干个测试用例，运行被测试程序，使得每一条可执行语句至少执行一次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.判定覆盖（也叫分支覆盖）：设计若干个测试用例，运行所测程序，使程序中每个判断的取真分支和取假分支至少执行一次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.条件覆盖：设计足够的测试用例，运行所测程序，使程序中每个判断的每个条件的每个可能取值至少执行一次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.判定&mdash;&mdash;条件覆盖：设计足够的测试用例，运行所测程序，使程序中每个判断的每个条件的每个可能取值至少执行一次，并且每个可能的判断结果也至少执行一次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.条件组合测试：设计足够的测试用例，运行所测程序，使程序中每个判断的所有条件取值组合至少执行一次。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.路径测试：设计足够的测试用例，运行所测程序，要覆盖程序中所有可能的路径。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用例的设计方案主要的有下面几种：条件测试，基本路径测试，循环测试。通过上面的方法可以实现测试用例对程序的逻辑覆盖，和路径覆盖。</p><p>二、开始测试前的准备<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在开始测试时，要先声明一下，无论你设计多少测试用例，无论你的测试方案多么完美，都<span style="color: red">不可能</span>完全100%的发现所有BUG，我们所需要做的是用最少的资源，做最多测试检查，寻找一个平衡点保证程序的正确性。<span style="color: #ff0000">穷举测试是不可能的。</span>&nbsp;&nbsp;&nbsp;所以现在进行单元测试我选用的是现在一般用的比较多的基本路径测试法。<br />
<br />
三、开始测试<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本路径测试法：设计出的测试用例要保证每一个基本独立路径至少要执行一次。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;函数说明 ：当i_flag=0；返回&nbsp;&nbsp; &nbsp;&nbsp;i_count+100<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当i_flag=1；返回&nbsp;&nbsp;&nbsp;i_count&nbsp;&nbsp;*10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;否则&nbsp; 返回&nbsp;&nbsp;&nbsp;i_count&nbsp;&nbsp;*20<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入参数：int i_count&nbsp;，&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i_flag<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输出参数： int&nbsp; i_return;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;代码：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Test(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i_count,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i_flag)<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i_temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(i_count</span><span style="color: #000000">&gt;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;i_flag)<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i_temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i_count&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;i_flag)<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i_temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i_temp&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">;<br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i_temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;i_temp&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">20</span><span style="color: #000000">;<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i_count</span><span style="color: #000000">--</span><span style="color: #000000">;<br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;i_temp;<br />
</span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<p><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.画出程序控制流程图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;图例：<br />
&nbsp;&nbsp;<img height="427" alt="" src="http://images.cnblogs.com/cnblogs_com/cmzzlh/2.jpg" width="669" border="0" /><br />
<br />
事例程序流程图：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img height="557" alt="" src="http://images.cnblogs.com/cnblogs_com/cmzzlh/5.jpg" width="472" border="0" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈中的数字代表的是语句的行号，也许有人问为什么选4,6,13,8......作为结点，第2行，第3行为什么不是结点，因为选择结点是有规律的。让我们看程序中；第2行，第3行是按顺序执行下来的。直到第4行才出现了循环操作。而2，3行没有什么判断，选择等分支操作，所以我们把2，3，4全部合并成一个结点。其他的也是照这个规则合并，然后就有了上面的流程图。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.计算圈复杂度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有了图以后我们要知道到底我们有写多少个测试用例，才能满足基本路径测试。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里有有了一个新概念&mdash;&mdash;圈复杂度<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;圈复杂度是一种为程序逻辑复杂性提供定量测试的软件度量。将该度量用于计算程序的基本独立路径数目。为确保所有语句至少执行一次的测试数量的上界。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公式圈复杂度V（G）=E-N+2，E是流图中边的数量，N是流图中结点的数量。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公式圈复杂度V（G）=P+1 ，P是流图G中判定结点的数量。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通俗的说圈负责度就是判断单元是不是复杂，是不是好测试的标准。一般来说如果圈复杂度如果大于20就表示这个单元的可测试性不好，太复杂（也许有人觉得无所谓，但是如果你们公司实行了CMMI5的话，对这个是有规定的）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;从图中我们可以看到，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V（G）=10条边-8结点+2=4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V（G）=3个判定结点+1=4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;上图的圈复杂图是4。这个结果对我们来说有什么意义呢？它表示我们只要<span style="color: red">最多</span>4个测试用例就可以达到基本路径覆盖。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.导出程序基本路径。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在我们知道了起码要写4个测试用例，但是怎么设计这4个测试用例？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;导出程序基本路径，根据程序基本路径设计测试用例子。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;程序基本路径：基本独立路径就是从程序的开始结点到结束可以选择任何的路径遍历，但是每条路径至少应该包含一条已定义路径不曾用到的边。（看起来不好理解，让我们看例子）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;让我们看上面的流程图：从结点4到24有几条路径呢？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 B（4，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 C，E，J（4，6，8，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 C，D，F，H，A，B（4，6，13，15，22，4，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4 C，D，G，I，A，B（4，6，13，19，22，4，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 还有吗？？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 C，D，C，I，A，C，E，J（4，6，13，19，22，4，6，8，24）算吗？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不算，为什么？因为上面的4条路径已经包括了所有的边。第5条路径已经不包含没有用过的边了。所有的路径都遍历过了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好了，现在我们有了4条基本独立路径根据独立路径我们可以设计测试用例。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 B（4，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入数据：i_count=0，或者是i_count&lt;0的某一个值。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;预期结果：i_temp=0.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 C，E，J（4，6，8，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入数据：&nbsp;i_count&nbsp;=1;i_flag=0&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;预期结果：i_temp=101.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 C，D，F，H，A，B（4，6，13，15，22，4，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;输入数据：&nbsp;i_count&nbsp;=1;i_flag=1&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;预期结果：i_temp=10.<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4 C，D，G，I，A，B（4，6，13，19，22，4，24）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入数据：&nbsp;i_count&nbsp;=1;i_flag=2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;预期结果：i_temp=20.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">这里的输入数据是由路径和程序推论出来的。而要注意的是预期结果是从函数说明中导出，不能根据程序结构中导出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000">为什么这么说？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;让我们看程序中的第3行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i_temp=1;假如开发人员一不小心写错了，变成了int i_temp=0;根据程序导出的<span style="color: #ff0000">预期结果</span>就会是一个<span style="color: #ff0000">错误</span>的值，但是<span style="color: #ff0000">单元测试不出来问题</span>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那单元测试就失去了意义。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有人也许会问这么简单的函数就有4个测试用例，如果还复杂一些的怎么办？上面的测试用例还可以简化吗？答案是可以。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我们来看 路径&nbsp;&nbsp;&nbsp;&nbsp;1 B（4，24）和&nbsp;&nbsp;&nbsp;4 C，D，G，I，A，B（4，6，13，19，22，<span style="color: red">4，24</span>），路径1是路径4的真子集，&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;所以1是可以不必要的。上图的圈复杂度是4。这个结果对我们来说有什么意义呢？它表示我们只要<span style="color: red">最多</span>4个测试用例就可以达到基本路径覆盖。所以说圈复杂度标示是<span style="color: red">最多</span>的测试用例个数，不是一定要4个测试用例才可以。不过有一点要申明的是测试用例越简化代表你的测试越少，这样程序的安全性就越低了。<br />
</span></span><br />
四、完成测试<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接下来根据测试用例使用工具测试NUNIT，VS2005都可以。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接下来根据测试结果编写测试报告，测试人，时间，结果，用例，是否通过，格式网上一大把，每个公司的格式也不一样就不说了。</p>
<p>&nbsp;</p>
<p>转自:http://www.cnblogs.com/cmzzlh/archive/2007/08/23/862737.html</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=707</link>
      <title><![CDATA[用jQuery实现各种CSS3效果]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-8-26 14:44:31</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=707</guid>
      <comments>
              /Blog/Blog.aspx?Id=707#commentbox
            </comments>
      <description><![CDATA[<p>&nbsp; css3可以轻松实现很多譬如图片边框、多重背景、文字阴影等效果，但是目前支持css3的浏览器少之又少，往往了实现圆角效果要去写一堆代码，下面介绍的这些强大的jQuery插件可以轻松帮你实现很多复杂的视觉效果。</p>
<p>&nbsp;&nbsp; 在这之前我们先来看一下几个CSS3实例代码是怎么实现各种效果的。</p>
<p>1.多重背景</p>
<blockquote>
<p style="padding-left: 30px; text-align: left">#backgrounds-box&nbsp;{<br />
background: url(top-backgroundg.png) top left no-repeat,<br />
url(bottom-backgroundg.png) bottombottom left no-repeat,<br />
url(middle -backgroundg.png) left repeat-y;<br />
padding: 35px;<br />
}</p>
</blockquote>
<p>2.文字阴影</p>
<blockquote>
<p>b { text-shadow:&nbsp; 5px 5px 5px #666666;&nbsp;}</p>
</blockquote><p>3.圆角</p>
<blockquote>
<p>#rounded-corners-box&nbsp;{<br />
-moz-border-radius-topleft: 8px;<br />
-moz-border-radius-topright: 8px;<br />
-moz-border-radius-bottomright: 8px;<br />
-moz-border-radius-bottomleft: 8px;<br />
-webkit-border-top-left-radius: 8px;<br />
-webkit-border-top-rightright-radius: 8px;<br />
-webkit-border-bottom-left-radius: 8px;<br />
-webkit-border-bottom-rightright-radius: 8px;<br />
}</p>
</blockquote>
<p>&nbsp;4.透明效果</p>
<blockquote>
<p>.div-name { background: #333333; opacity:0.8; width: 380px; height:70px;&nbsp;}</p>
</blockquote>
<p>&nbsp;下面来看看jQuery插件实现css3效果的插件：</p>
<p><a title="jQuery Corners 0.3" href="http://www.atblabs.com/jquery.corners.html" target="_blank"><strong>jQuery Corners 0.3</strong></a></p>
<p>轻松地实现漂亮的圆角，无需额外的标签或图片。支持 iPhone.、Chrome、Firefox、Safari 2+、 Opera 9.0+、Internet Explorer 6+。</p>
<p><a href="http://www.atblabs.com/jquery.corners.html"><img class="alignnone size-full wp-image-3222" title="jQuery Corners 0.3" height="266" alt="jQuery Corners 0.3" src="http://www.webair.it/blog/wp-content/uploads/2009/07/jQuery-Corners-0-3.jpg" width="466" /></a></p>
<p>&nbsp;<a title="jQuery Canvas Rounded Corners" href="http://ragamo.medioclick.com/jquery/corners/" target="_blank"><strong>jQuery Canvas Rounded Corners</strong></a></p>
<p>通过canvas 实现圆角的jQuery插件，支持IE7、FF。</p>
<p><a href="http://ragamo.medioclick.com/jquery/corners/"><img class="alignnone size-full wp-image-3223" title="jQuery Canvas Rounded Corners" height="266" alt="jQuery Canvas Rounded Corners" src="http://www.webair.it/blog/wp-content/uploads/2009/07/jquery-Canvas-Rounded-Corne.jpg" width="466" /></a></p>
<p><a title="How To  Border Image with CSS3 and jQuery" href="http://www.lrbabe.com/sdoms/borderImage/index.html" target="_blank"><strong>How To&nbsp; Border Image with CSS3 and jQuery</strong></a></p>
<p><a href="http://www.w3.org/Style/CSS/current-work#CSS3">CSS3 draft</a> 介绍灰墙强大的图片边框技术。</p>
<p><a href="http://www.lrbabe.com/sdoms/borderImage/index.html"><img class="alignnone size-full wp-image-3224" title="How To  Border Image with CSS3 and jQuery" height="266" alt="How To  Border Image with CSS3 and jQuery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/How-To-Border-Image-with-C.jpg" width="466" /></a></p>
<p>&nbsp;</p>
<p><a title="How to css multiple backgrounds / background layering with jQuery" href="http://www.protocoder.com/css/css-multiple-backgrounds-background-layering-with-jquery/" target="_blank"><strong>How To CSS Multiple Backgrounds / Background Layering with jQuery</strong></a></p>
<p>实现多重图片背景的这个插件可以极大地减少xhtml标签，精简你的代码，多重背景的概念类似于PS的图层，一个图层叠在另一个图层上面。</p>
<p><a href="http://www.protocoder.com/css/css-multiple-backgrounds-background-layering-with-jquery/"><img class="alignnone size-full wp-image-3225" title="How To CSS Multiple Backgrounds / Background Layering with jQuery" height="266" alt="How To CSS Multiple Backgrounds / Background Layering with jQuery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/CSS-Multiple-Backgrounds.jpg" width="466" /></a></p>
<p><a title="How To Drop Shadow with jQuery" href="http://eyebulb.com/dropshadow/" target="_blank">How To Drop Shadow with jQuery</a></p>
<p>为页面上的文字和透明图片添加柔和和阴影效果。</p>
<p><a href="http://eyebulb.com/dropshadow/"><img class="alignnone size-full wp-image-3226" title="How To Drop Shadow with jQuery" height="266" alt="drop-shadow" src="http://www.webair.it/blog/wp-content/uploads/2009/07/drop-shadow.jpg" width="466" /></a></p>
<p><a title="How To Text-shadow in Internet Explorer using jQuery" href="http://kilianvalkhof.com/2008/javascript/text-shadow-in-ie-with-jquery/" target="_blank"><strong>How To Text-shadow in Internet Explorer</strong> using jQuery</a></p>
<p>这个教程会教你如何在IE中轻松实现文字阴影效果。</p>
<p><a href="http://kilianvalkhof.com/2008/javascript/text-shadow-in-ie-with-jquery/"><img class="alignnone size-full wp-image-3227" title="How To Text-shadow in Internet Explorer using jQuery" height="266" alt="How To Text-shadow in Internet Explorer using jQuery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/Text-shadow-in-IE-with-jQue.jpg" width="466" /></a></p>
<p><a title="How To Element Gradient with jquery" href="http://davidwees.com/myblog/2007/08/gradient_jquery_plugin.html" target="_blank">How To Element Gradient with jquery</a></p>
<p>允许你自定义元素的填充渐变效果，支持指定渐变的方向。</p>
<p><a href="http://davidwees.com/myblog/2007/08/gradient_jquery_plugin.html"><img class="alignnone size-full wp-image-3228" title="How To Element Gradient with jquery" height="266" alt="How To Element Gradient with jquery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/How-To-Element-Gradient-wit.jpg" width="466" /></a></p>
<p><a title="How to Rounded Corners in jQuery" href="http://docs.jquery.com/Tutorials:Rounded_Corners" target="_blank"><strong>How to Rounded Corners in jQuery</strong></a></p>
<p>一个简易的用jQuery实现圆角的教程。</p>
<p><a href="http://docs.jquery.com/Tutorials:Rounded_Corners"><img class="alignnone size-full wp-image-3229" title="How to Rounded Corners in jQuery" height="266" alt="How to Rounded Corners in jQuery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/How-to-Rounded-Corners-in-j.jpg" width="466" /></a></p>
<p><a title="CSS3 Template Layout realized with jQuery" href="http://code.google.com/p/css-template-layout/" target="_blank"><strong>CSS3 Template Layout realized with jQuery</strong></a></p>
<p>实现CSS3布局。</p>
<p><a href="http://code.google.com/p/css-template-layout/"><img class="alignnone size-full wp-image-3230" title="CSS3 Template Layout realized with jQuery" height="266" alt="CSS3 Template Layout realized with jQuery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/CSS3-Template-Layout.jpg" width="466" /></a></p>
<p><a title="Creating a polaroid photo viewer with CSS3 and jQuery " href="http://www.marcofolio.net/webdesign/creating_a_polaroid_photo_viewer_with_css3_and_jquery.html" target="_blank"><strong>Creating a polaroid photo viewer with CSS3 and jQuery</strong></a></p>
<p>结合CSS3的 <strong><a title="Box Shadow" href="http://www.css3.info/preview/box-shadow/">Box Shadow</a></strong> 属性<strong><a title="CSS3 Rotate" href="http://css-tricks.com/css3-idea-rotation-of-page-elements/">Rotate</a></strong> 实现拖动图片过程中的阴影效果。</p>
<p><a href="http://www.marcofolio.net/webdesign/creating_a_polaroid_photo_viewer_with_css3_and_jquery.html"><img class="alignnone size-full wp-image-3231" title="Creating a polaroid photo viewer with CSS3 and jQuery" height="266" alt="Creating a polaroid photo viewer with CSS3 and jQuery" src="http://www.webair.it/blog/wp-content/uploads/2009/07/Creating-a-polaroid-photo-v.jpg" width="466" /></a></p>
<p><a title="jSlickmenu: A jQuery plugin for slick CSS3 menus" href="http://www.marcofolio.net/webdesign/jslickmenu_a_jquery_plugin_for_slick_css3_menus.html" target="_blank"><strong>jSlickmenu: A jQuery plugin for slick CSS3 menus</strong></a></p>
<p>jSlickmenu通过类似CSS3的rotation 和shadows属性现非常酷的菜单效果。</p>
<p><a href="http://www.marcofolio.net/webdesign/jslickmenu_a_jquery_plugin_for_slick_css3_menus.html"><img class="alignnone size-full wp-image-3233" title="Super slick jQuery menu with CSS3" height="266" alt="Super slick jQuery menu with CSS3" src="http://www.webair.it/blog/wp-content/uploads/2009/07/Super-slick-jQuery-menu-wit.jpg" width="466" /></a></p>
<p>原文有更为完整的介绍，有兴趣的可以猛点这里：<a href="http://www.webair.it/blog/2009/07/09/mixing-css3-and-jquery-how-to-css3-effects-via-jquery/">http://www.webair.it/blog/2009/07/09/mixing-css3-and-jquery-how-to-css3-effects-via-jquery/</a></p>
<p>转自：<a href="http://jsssc.cn/css3-effect-via-jquery/">http://jsssc.cn/css3-effect-via-jquery/</a></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=706</link>
      <title><![CDATA[Css+div关于层的定位]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-8-25 14:55:40</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=706</guid>
      <comments>
              /Blog/Blog.aspx?Id=706#commentbox
            </comments>
      <description><![CDATA[<p>原文:http://www.cnblogs.com/iamv/archive/2008/01/03/1024371.html</p>
<p><font face="Courier New">1. position:static|无定位<br />
position:static是所有元素定位的默认值, 一般不用注明，除非有需要取消继承的别的定位<br />
example: <br />
以下是引用片段：<br />
#div-1 { <br />
&nbsp;position:static; <br />
} </font></p>
<p><font face="Courier New">----------------------------------------------------------<br />
2. position:relative|相对定位<br />
使用position:relative，就需要top,bottom,left,right4个属性来配合，确定元素的位置。<br />
如果要让div-1层向下移动20px,左移40px:<br />
example: <br />
以下是引用片段： <br />
www.bitsCN.net网管博客等你来搏</font></p>
<p><font face="Courier New">
<p><br />
#div-1 { <br />
&nbsp;position:relative; <br />
&nbsp;top:20px; <br />
&nbsp;left:40px; <br />
}</p>
<p>如果用到相对定位，紧随他的层divafter是不会出现在div-1的下方，而是和div-1在同一个高度出现。</p>
<p>可见， position:relative;并不是很好用。</p>
</font></p><p>----------------------------------------------------------<br />
3. position:absolute|绝对定位<br />
使用position:absolute;,能够很准确的将元素移动到你想要的位置，<br />
让我将 div-1a 移动到页面的右上角:<br />
example: <br />
以下是引用片段：<br />
#div-1a { <br />
&nbsp;position:absolute; <br />
&nbsp;top:0; <br />
&nbsp;right:0; <br />
&nbsp;width:200px; <br />
}</p>
<p>使用绝对定位的div-1a层前面的或者后面的层会认为这个层并不存在，丝毫不影响到他们。所以position:absolute;用于将一个元素放到固定的位置很好用，但是如果需要div-1a层相对于附近的层来确定位置就不要实现了。 搜一搜so.bitsCN.com <br />
*这里有个Win IE的bug需要提到，就是如果为绝对定位的元素定义一个相对的宽度，那么在IE下它的宽度取决于父元素的宽度而不是整个页面的宽度。<br />
----------------------------------------------------------<br />
4. position:relative + position:absolute|绝对定位+相对定位</p>
<p>如果给父元素(div-1)定义为position:relative;子元素(div-1a)定义为position:absolute，那么子元素(div-1a)的位置将相对于父元素(div-1)，而不是整个页面。<br />
让div-1a定位于div-1的右上角：<br />
example: <br />
以下是引用片段：<br />
&lt;div id=&quot;div-1&quot;&gt; <br />
&nbsp; &lt;div id=&quot;div-1a&quot;&gt; <br />
&nbsp; this is div-1a element. <br />
&nbsp; &lt;/div&gt; <br />
this is div-1 element. <br />
&lt;/div&gt; <br />
#div-1 {<br />
&nbsp;position:relative; <br />
} <br />
#div-1a { <br />
&nbsp;position:absolute; <br />
&nbsp;top:0; <br />
&nbsp;right:0; <br />
&nbsp;width:200px; <br />
}</p>
<p>----------------------------------------------------------<br />
5. two column layout|两列布局<br />
让我们实践position:relative + position:absolute的理论，实现两列布局。<br />
example: <br />
以下是引用片段：<br />
&lt;div id=&quot;div-1&quot;&gt; <br />
&nbsp; &lt;div id=&quot;div-1a&quot;&gt;this is the column-one&lt;/div&gt; <br />
&nbsp; &lt;div id=&quot;div-1b&quot;&gt;this is the column-two&lt;/div&gt; <br />
&lt;/div&gt; <br />
#div-1 { <br />
&nbsp;position:relative;/*父元素相对定位*/ <br />
} <br />
#div-1a { <br />
&nbsp;position:absolute;/*子元素绝对定位*/ Play.bitsCN.com小游戏 <br />
&nbsp;top:0; <br />
&nbsp;right:0; <br />
&nbsp;width:200px; <br />
} <br />
#div-1b { <br />
&nbsp;position:absolute;/*子元素绝对定位*/ <br />
&nbsp;top:0; <br />
&nbsp;left:0; <br />
&nbsp;width:200px; <br />
}</p>
<p>注意，在这个例子中会发现夫元素的告诉不会随着子元素的告诉变化，所以如果父元素的背景和边框需要定义一个足够高的高度才能显示出来。<br />
-----------------------------------------------------------<br />
6.float|浮动对齐<br />
使用float定位一个元素有float:left;&amp;float:right;两种值。这种定位只能在水平坐标定位，不能在垂直坐标定位。而且让下面的元素浮动环绕在它的左边或者右边。<br />
example: <br />
以下是引用片段：<br />
#div-1a { <br />
&nbsp;float:left; <br />
&nbsp;width:200px; <br />
} <br />
-------------------------------------------------------------<br />
7.make two clumn with float|浮动实现两列布局<br />
如果让一个元素float:left;另一个float:right;控制好他们的宽度，就能实现两列的布局效果。<br />
example: <br />
以下是引用片段：<br />
#div-1a { <br />
&nbsp;float:left; <br />
&nbsp;width:150px; <br />
} <br />
#div-1b { <br />
&nbsp;float:left; <br />
&nbsp;width:150px; <br />
}</p>
<p>---------------------------------------------------------------<br />
8.clear float|清除浮动<br />
如果你不想让使用了float元素的下面的元素浮动环绕在它的周围，那么你就使用clear,clear有三个值，clear:left;(清除左浮动)，clear:right;(清除右浮动)，clear:both;(清除所有浮动)。 Feedom.net国内最早的网管网站</p>
<p>example: 09hr.com网管求职</p>
<p>以下是引用片段：<br />
&lt;div id=&quot;div-1a&quot;&gt;this is div-1a&lt;/div&gt; <br />
&lt;div id=&quot;div-1b&quot;&gt;this is div-1b&lt;/div&gt; <br />
&lt;div id=&quot;div-1c&quot;&gt;this is div-1c&lt;/div&gt; <br />
#div-1a { <br />
&nbsp;float:left; <br />
&nbsp;width:190px; <br />
} <br />
#div-1b { <br />
&nbsp;float:left; <br />
&nbsp;width:190px; <br />
} <br />
#div-1c { <br />
&nbsp;clear:both; <br />
}</p>
<p><br />
至此，这个css的定位部分就结束了，你可以动手体会体会加深印象。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=703</link>
      <title><![CDATA[用户体验这点事儿]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-8-14 10:11:30</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=703</guid>
      <comments>
              /Blog/Blog.aspx?Id=703#commentbox
            </comments>
      <description><![CDATA[<p>转自:http://www.cnblogs.com/Mainz/archive/2009/02/15/1391016.html</p>
<p>用户体验设计最近比较热，从以前的轻视UI到现在不管是桌面软件还是网站都开始关注用户体验设计。比如<a href="http://www.fastfwdinnovation.com/2008/06/24/social-media/google-user-experience-what-can-you-learn-from-google-on-social-media/" target="_blank"><font color="#1a5e98">Google的简约设计和快速性能</font></a>、<a href="http://www.slideshare.net/stephenpa/7-user-experience-lessons-from-the-iphone-introducing-ux" target="_blank"><font color="#1a5e98">iPhone的视觉和手机触摸交互设计</font></a>、<a href="http://www.naturalnews.com/020038.html" target="_blank"><font color="#1a5e98">Amazon的导航和搜索设计</font></a>等等都引起关注探讨和学习。</p>
<p><strong>什么是用户体验?</strong></p>
<p>&ldquo;用户体验&rdquo;这一术语指用户个体与产品进行交互时，用户获得的主观体验。我们经常会谈论某家餐厅的服务很好或电影院的环境很糟糕等，这些都是一些关于可用性的非正式讨论。当设计或评估某一交互式产品的用户体验时，我们需要以条理更加清晰的方式来了解该产品和对其进行讨论。</p>
<p>对于 UX 设计人员来说，成功意味着创建实用、可用和用户所需的产品。产品必须能够为用户提供价值，才可以称为实用产品。用开发术语来讲，就是该产品必须实现相应的功能。可用产品指易学易用的产品。用户所需产品指用户渴望获得的产品。用户对某一产品的需求程度越大，用户自愿在其上花费的时间和精力就越多。热情的用户是产品的最佳推广者。</p><p><strong>用户体验设计</strong></p>
<p><strong><a href="http://en.wikipedia.org/wiki/User_experience" target="_blank"><font color="#1a5e98">Wiki</font></a></strong>上用户体验设计的定义是&ldquo;创造一种架构或交互模型来影响用户对设备或系统的期望&rdquo;。有人说用户体验太微妙，很难用语言来形容，因为用户的需求和期望本身也是说不清楚的，用户体验是一种纯主观的在用户使用一个产品（服务）的过程中建立起来的心理感受。因此用户体验设计的目的只能是尽量减小用户行为产生的结果和用户期望之间的差距，也就是说，用户和系统交互的过程和结果越符合或超过用户的期望，用户体验设计就越成功，也就越符合&ldquo;以用户为中心&rdquo;的设计原则。</p>
<p>因此用户体验设计说到底是&ldquo;以用户为中心&rdquo;，或者叫&ldquo;以人为本&rdquo;的设计。具体如何做到&ldquo;以用户为中心&rdquo;和&ldquo;以人为本&rdquo;的设计就大有学问了，国外牛人给整了很多门科学，比如：视觉设计、交互设计、用户行为研究、可用性分析和测试等等。其中很多又涉及到美学、心理学、行为学、图形学和整体的产品化设计等。</p>
<div class="code">
<ul>
    <li><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">视觉设计（</span></strong><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: Verdana"><a href="http://en.wikipedia.org/wiki/Graphic_design" target="_blank"><font color="#1a5e98">Graphic Design</font></a></span></strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">）：界面设计、图标设计、颜色和布局设计、风格设计等</span><strong> </strong></li>
    <li><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">交互设计（</span></strong><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: Verdana"><a href="http://en.wikipedia.org/wiki/Interaction_design" target="_blank"><font color="#1a5e98">Interaction Design</font></a></span></strong><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">）：</span></strong><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: Verdana"><a href="http://en.wikipedia.org/wiki/Human-computer_interaction" target="_blank"><span style="font-family: 宋体"><font color="#1a5e98">人机交互</font></span></a></span></strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">，即在一定场景内用户获悉指令，判断含义，作出回应的过程设计</span><strong> </strong></li>
    <li><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体"><strong>用户行为研究</strong>：定义目标用户群特征、研究用户喜好、习惯和期望等等</span><strong> </strong></li>
    <li><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">可用性分析和测试（</span></strong><strong><span style="font-size: 10.5pt; line-height: 150%; font-family: Verdana"><a href="http://en.wikipedia.org/wiki/Usability_study" target="_blank"><font color="#1a5e98">Usability Testing</font></a></span></strong><span style="font-size: 10.5pt; line-height: 150%; font-family: 宋体">）：分析和发现可用性问题并提出改进</span><strong> </strong></li>
</ul>
</div>
<p>&nbsp;说易行难。还是先看看老大们是怎么做的：<strong>&nbsp; </strong></p>
<div class="code">
<ul>
    <li><span><strong>Google：</strong></span><span style="font-family: 宋体"><strong>追求简单</strong>，简单的布局，简单的操作，最快的速度。以</span><span style="font-family: Verdana">Google</span><span style="font-family: 宋体">为代表的包括新一代</span><span style="font-family: Verdana">Web2.0</span><span style="font-family: 宋体">网站追求</span><span style="font-family: Verdana">UI</span><span style="font-family: 宋体">上的简约、实用，主色调通常不超过</span><span style="font-family: Verdana">4</span><span style="font-family: 宋体">种，并贯穿网站的始终。摒弃无关信息的堆砌，简单的界面更能突出功能的强大。</span><strong><strong> </strong></strong></li>
    <li><span><strong>Apple：</strong></span><span style="line-height: 150%; font-family: 宋体"><strong>追求艺术化</strong>，艺术性即产品的美感度（包括物理造型、颜色、材质工艺等等），在可用的基础上使得视觉设计达到极致。</span><strong><strong> </strong></strong></li>
    <li><span><strong>Microsoft：</strong></span><span style="line-height: 150%; font-family: 宋体"><strong>追求标准化</strong>，微软所有的软件都有统一的界面风格和操作习惯，使得业界不符合微软的操作习惯的软件被认为是难用的。</span></li>
</ul>
</div>
<p><strong>&nbsp;</strong>我们该怎么做？下面从一些实际例子看看怎么提高用户体验，进行视觉设计和交互设计</p>
<p><strong>视觉设计：要针对目标用户进行设计</strong></p>
<p>例如，游戏和办公软件的目标用户群是不完全相同的，同样的用户面对这两者的界面需求是不一样：游戏是&ldquo;玩&rdquo;，注重是趣味性和风格化，主要目标用户是年轻人，要让他们觉得好玩觉得酷，游戏的UI在视觉创作上发挥的空间会很大，对于设计师来说也许很多东西更可以天马行空；而办公软件则是&ldquo;使用&rdquo;，是一个工作的辅助工具，关注的是效率，UI的设计偏简约。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/070903001_2.gif"><img title="070903001" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="341" alt="070903001" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/070903001_thumb.gif" width="331" border="0" /></a></p>
<p>QQ的视觉定位是以青少年为主的，所以它的视觉设计才采用了比较明亮活泼的色彩。而MSN的视觉定位是以办公室工作人员，所以它的视觉使用比较稳定和平静的色彩。</p>
<p><strong><font color="#ff0000">视觉设计：别让用户看得费劲</font></strong></p>
<p>例如，豆瓣小组，小组活跃度相当高，但这种呈现方式的传达效果，被大打折扣。如果我来修改，直接计算出活跃程度，类似几分前，甚至几秒前，<strong><font color="#ff0000">大片的&ldquo;2007-07-10 22&rdquo;容易阅读疲劳。</font></strong></p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_14.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="374" alt="image" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_thumb_6.png" width="477" border="0" /></a></p>
<p>相比之下，看看博客园的这个就舒服多了</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/cnblogs_1.png"><img title="cnblogs" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="466" alt="cnblogs" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/cnblogs_thumb_1.png" width="532" border="0" /></a></p>
<p><strong><font color="#ff0000">视觉设计：要有重点</font></strong></p>
<p>例如，一个火车票查询网站，火车查询的时刻表和换乘结果如下：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_8.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="543" alt="image" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_thumb_3.png" width="530" border="0" /></a></p>
<p>所有的颜色都一样，大小也一样，没有重点，可想而知用户看得有多<em>费劲</em>，改成下面的样子就好多了：</p>
<p>从哪儿到哪儿，几点，车次，在哪儿换乘，都很形象，让人一目了然。无需用户寻找和思考。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/widget_map_open_2.png"><img title="widget_map_open" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="513" alt="widget_map_open" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/widget_map_open_thumb.png" width="350" border="0" /></a></p>
<p>&nbsp;</p>
<p><strong><font color="#ff0000">交互设计：要减少交互</font></strong>；说到底，让用户少思考，让用户少选择，让用户少等待，让用户少操作，让用户少转动眼球寻找。因为人都很懒，懒得选择，懒得等待，人们希望马上到达他希望的&ldquo;内容&rdquo;，《<a href="http://www.amazon.com/Think-Common-Sense-Approach-Usability/dp/0789723107" target="_blank"><font color="#1a5e98">don't make me think</font></a>》。</p>
<p>例如，SAP的快速入口：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_2.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="366" alt="image" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_thumb.png" width="488" border="0" /></a></p>
<p>SAP上的快速入口，为较熟的用户提供便捷的入口，因为SAP是一个很复杂的企业管理软件，有财务管理、人事管理、生产管理等等，覆盖企业中的各行业，但通常单个用户一般只用其中的一个，比如你是会计师，那么你通常只用到财务管理模块，这时候你只是想打开软件就进入财务模块，快捷入口无疑解除你使用导航树的痛苦。</p>
<p><strong><font color="#ff0000">交互设计：减少用户操作、减少选择和思考</font></strong></p>
<p>再例如，在Windows XP中，为了在&ldquo;开始&rdquo;-&ldquo;程序&rdquo;中找到一个程序，可能需要打开若干级菜单，非常麻烦，而Windows Vista提供了快速搜索，输入C，就能列出所有以C开头顶程序，方便快捷。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/search_two_2.jpg"><img title="search_two" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="107" alt="search_two" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/search_two_thumb.jpg" width="248" border="0" /></a></p>
<p><strong><font color="#ff0000">交互设计：主动提供帮助，以用户为中心</font></strong></p>
<p>例如，常见的Auto-suggestion功能</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_10.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="213" alt="image" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_thumb_4.png" width="452" border="0" /></a></p>
<p><strong><font color="#ff0000">交互设计：把复杂性留给自己，把简单留给用户</font></strong></p>
<p>再例如，一个搬家公司的网站，需要用户从下拉框中选择移出城市和移入城市，搬家时间</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_4.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="268" alt="image" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_thumb_1.png" width="535" border="0" /></a></p>
<p>用户需要在长长的下拉框中选择哪个州，哪个城市，而且要选择两次，用户体验可想而知，改成下面的样子好多了：</p>
<p>&nbsp;</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_6.png"><img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="405" alt="image" src="http://images.cnblogs.com/cnblogs_com/Mainz/WindowsLiveWriter/97f1b7882a3b_C5F2/image_thumb_2.png" width="601" border="0" /></a></p>
<p><strong>用户体验设计的一些忠告</strong></p>
<div class="code">
<ul id="codelist">
    <li><a><font color="#1a5e98">一定不要浪费用户的时间，例如，巨慢无比的打开网页/启动程序，又如，让用户一次次的在超过50个内容的下拉框里选择。请珍惜用户的时间、减少用户鼠标移动到距离和点击次数，减少用户眼球转动满屏寻找的次数</font></a></li>
    <li><a><font color="#1a5e98">一定要明白你的产品面对的是什么样的用户群</font></a></li>
    <li><a><font color="#1a5e98">一定要去尝试接触你的这些用户，了解他们的特征和行为习惯</font></a></li>
    <li><a><font color="#1a5e98">一定要把静止的界面看成交互或对话(Treat interface as conversation)，成功的web开发者是利用网页与用户对话</font></a></li>
    <li><a><font color="#1a5e98">一定不要&lsquo;我觉得&rsquo;，不要打扰和强迫用户，不要为1%的需求骚扰99%的用户</font></a></li>
    <li><a><font color="#1a5e98">一定不要提出&lsquo;这些用户怎么会这样？&rsquo;的怀疑，一定不要高估用户的智商</font></a></li>
    <li><a><font color="#1a5e98">一定不要以为给用户提供越多的东西就越好，相反，重点多了就等于没有重点，有时候需要做减法</font></a></li>
</ul>
</div>
<p><strong>关注新技术创新为用户体验服务</strong></p>
<p>简单的背后是复杂的实现，把简单留给用户，把复杂留给自己。貌似用户体验，其实背后却是复杂的技术创新：<span style="font-size: 10.5pt; font-family: 宋体">&nbsp; </span></p>
<div class="code">
<ul>
    <li><span style="line-height: 150%; font-family: Verdana">Google search: </span><span style="line-height: 150%; font-family: 宋体">快速搜索的用户体验背后是先进的搜索技术。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
    <li><span style="line-height: 150%; font-family: Verdana">Google map: </span><span style="line-height: 150%; font-family: 宋体">方便顺畅的用户体验背后是</span><span style="line-height: 150%; font-family: Verdana">AJAX</span><span style="line-height: 150%; font-family: 宋体">技术。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
    <li><span style="line-height: 150%; font-family: Verdana">Flickr: </span><span style="line-height: 150%; font-family: 宋体">方便的管理和分享图片的用户体验背后，是创新性的引用</span><span style="line-height: 150%; font-family: Verdana">tag</span><span style="line-height: 150%; font-family: 宋体">作为内容管理和分享的方式，打破了以往以相册为单位的图片组织模式，创造了基于</span><span style="line-height: 150%; font-family: Verdana">Blog</span><span style="line-height: 150%; font-family: 宋体">的社会化分享方式，并通过开放</span><span style="line-height: 150%; font-family: Verdana">API</span><span style="line-height: 150%; font-family: 宋体">与用户实现双赢。</span><span style="line-height: 150%; font-family: Verdana">Flickr</span><span style="line-height: 150%; font-family: 宋体">中也大量使用了</span><span style="line-height: 150%; font-family: Verdana">Flash</span><span style="line-height: 150%; font-family: 宋体">和</span><span style="line-height: 150%; font-family: Verdana">AJAX</span><span style="line-height: 150%; font-family: 宋体">的技术。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
</ul>
</div>
<p>所以，千万不要以为用户体验就是简单的UI界面那么简单的，背后是先进的技术和创新。技术以人为本，在这儿用上了。</p>
<p><strong>最后，用户体验不是Everything</strong></p>
<p>最后，用户体验固然要关注，但更要关注的是一个软件产品或网站说提供的<strong>核心功能</strong>或<strong>内容</strong>。举个例子，Google的用户体验固然很好，搜索速度也很快，但中文搜索结果（内容）就不如百度。说到底，用户要一个软件产品或网站提供他们需要的核心功能和内容。再举个例子，一个非法的******小网站，里面满屏是小小的GIF在晃动，晃得人都晕了，而用户真正需要的链接却小的让人看不见，可以说界面设计和用户体验非常糟糕，但还是很赚钱，为什么？因为他有核心内容是别人没有的，这些用户只能耐心去找那个小小的链接！</p>
<p>用户体验不是Everything，这句话对小型公司尤其有效，大公司一般有专门的软件UI设计部门，他们的追求是让产品做到极致，用户体验当然是重    的环节。而<strong><font color="#0000ff">小公司的关注重点应该在产品的核心功能上</font></strong>，做到极致，这是首要的。</p>
<p><strong>进一步学习，参考资料</strong></p>
<p>如果你想进一步学习，下面列出的这些网站能够帮助你处理界面设计、用户体验(UE)、以用户为中心的设计(UCD)、可用性以及任何这方面的问题。&nbsp;</p>
<div class="code">
<ul>
    <li><span style="line-height: 150%; font-family: Verdana">Jacob Gube</span><span style="line-height: 150%; font-family: 宋体">的</span><span style="line-height: 150%; font-family: Verdana"> <a href="http://sixrevisions.com/usabilityaccessibility/20-websites-to-help-you-master-user-interface-design/" target="_blank"><span style="line-height: 150%"><font color="#1a5e98">20 WebSites to Help You Master User Interface Design</font></span></a></span><span style="line-height: 150%; font-family: 宋体">：推荐了一些有用的网站</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
    <li><span style="line-height: 150%; font-family: Verdana"><a href="http://www.boxesandarrows.com/" target="_blank"><span style="line-height: 150%"><font color="#1a5e98">Boxes and Arrows</font></span></a></span><span style="line-height: 150%; font-family: 宋体">：提供交互设计、可用性设计和信息设计方面的专业信息。有的文章会教你</span><span style="line-height: 150%; font-family: Verdana"><a href="http://boxesandarrows.com/view/getting-a-forms98"><span style="line-height: 150%; font-family: 宋体"><font color="#1a5e98">设计具有良好可用性的在心邮件应用</font></span></a></span><span style="line-height: 150%; font-family: 宋体">，还有</span><span style="line-height: 150%; font-family: Verdana"><a href="http://boxesandarrows.com/view/storyboarding_rich_internet_applications_with_visio"><font color="#1a5e98"><span style="line-height: 150%; font-family: 宋体">利用</span><span style="line-height: 150%">VISIO</span><span style="line-height: 150%; font-family: 宋体">展示富网络应用的例子</span></font></a></span><span style="line-height: 150%; font-family: 宋体">。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
    <li><span style="line-height: 150%; font-family: Verdana"><a href="http://www.usabilitypost.com/" target="_blank"><span style="line-height: 150%"><font color="#1a5e98">Usability Post</font></span></a></span><span style="line-height: 150%; font-family: 宋体">：一个关于可用性设计的博客。博客文章中提到了很多技巧。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
    <li><span style="line-height: 150%; font-family: Verdana"><a href="http://alistapart.com/topics/userscience/usability/" target="_blank"><span style="line-height: 150%"><font color="#1a5e98">A List Apart</font></span></a></span><span style="line-height: 150%; font-family: 宋体">：最好的基于标准的设计和开发的文章资源，其中的</span><em><span style="font-family: Verdana">User Science</span></em><span style="line-height: 150%; font-family: 宋体">专题涵盖用户界面设计的各个方面。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
    <li><span style="line-height: 150%; font-family: 宋体">更多资源请</span><span style="line-height: 150%; font-family: Verdana"><a href="http://www.baidu.com/" target="_blank"><span style="line-height: 150%; font-family: 宋体"><font color="#1a5e98">百度</font></span></a></span><span style="line-height: 150%; font-family: 宋体">，</span><span style="line-height: 150%; font-family: Verdana"><a href="http://www.google.com/" target="_blank"><span style="line-height: 150%"><font color="#1a5e98">Google</font></span></a></span><span style="line-height: 150%; font-family: 宋体">一下</span><span style="line-height: 150%; font-family: Verdana">&ldquo;UI&rdquo;</span><span style="line-height: 150%; font-family: 宋体">、</span><span style="line-height: 150%; font-family: Verdana">&ldquo;UE&rdquo;</span><span style="line-height: 150%; font-family: 宋体">、</span><span style="line-height: 150%; font-family: Verdana">&ldquo;UX&rdquo;</span><span style="line-height: 150%; font-family: 宋体">、</span><span style="line-height: 150%; font-family: Verdana">&ldquo;UCD&rdquo;</span><span style="line-height: 150%; font-family: 宋体">等。</span><span style="line-height: 150%; font-family: Verdana"> </span></li>
</ul>
</div>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=699</link>
      <title><![CDATA[大型网站架构之:MySpace的体系架构]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-8-12 11:52:03</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=699</guid>
      <comments>
              /Blog/Blog.aspx?Id=699#commentbox
            </comments>
      <description><![CDATA[<p><strong>【IT168技术分析】<br />
&nbsp;&nbsp;&nbsp; </strong>MySpace.com有着6500万的订阅者，是因特网上增长最快的网站之一，每天还有260，000新用户注册。它经常因为性能问题而受指责，MySpace不得不处理其他网站很少碰到的或大或小的一些问题。它们是怎么做的呢？ <br />
Site: http://myspace.com <br />
站点：http://myspace.com&nbsp;<br />
<br />
平台 <br />
&bull; ASP.NET 2.0 <br />
&bull; Windows <br />
&bull; IIS <br />
&bull; SQL Server <br />
<br />
内部运行情况？ <br />
&bull; MySpace 每天处理15亿的页面页面查看，白天处理230万并发的用户 <br />
<br />
&bull; 会员用户里程碑 <br />
- 500,000用户：简单的磕磕绊绊的体系结构 <br />
- 1百万用户：痛苦的垂直分割解决伸缩性 <br />
- 3百万用户：Scale-Out 胜过Scale-Up（按比例增加） <br />
- 9百万用户：站点迁移到ASP.NET，增加虚拟<a title="存储" style="color: #000000" href="http://storage.it168.com/" target="_blank">存储</a> <br />
- 260万用户：MySpace拥有了64位技术 <br />
&bull; 500,000 个帐号对于两个web<a title="服务器" style="color: #000000" href="http://product.it168.com/files/0402search.shtml" target="_blank">服务器</a>和一个数据库来说负担太大了 <br />
&bull; 100-200万个帐号</p><p>- 他们使用了一种数据库体系结构，围绕着垂直分割的概念，提供不同服务比如界面登录，用户资料和博客等的网站的各部分都有单独的数据库。 <br />
&nbsp;&nbsp; - 垂直分割方案有助于分开数据库读和写的工作量，并且当用户需要一个新特征时，MySpace 将会加入一个新的在线数据库来支持它。 <br />
- MySpace 从直接使用附着于它的数据库的<a title="服务器" style="color: #000000" href="http://server.it168.com/" target="_blank">服务器</a>的存储设备转换到一个存储区域<a title="网络" style="color: #000000" href="http://net.it168.com/" target="_blank">网络</a>（SAN），里面大量的磁盘存储设备由一个高速，专用网络联系到一块，同时数据库连接到SAN。到SAN的改变提高了性能，正常运行时间和可靠性。 <br />
<br />
&bull; 300万个帐号 <br />
- 垂直分割解决方案并没有持续很长时间因为它们重复了一些水平的信息像跨过所有垂直片的用户帐号。有这么多的重复它会使系统变慢，肯定要失败。 <br />
- 个人应用比如Web站点子部分上的博客将会增长到对于单独一个数据库服务器来说太大的程度 <br />
- 在逻辑上重组所有核心数据到一个数据库里 <br />
- 把它的用户基本信息分成100万帐号一个的块，然后把所有有键的数据放到SQL Server不同实例的这些帐号中 <br />
<br />
&bull; 900万-1700万帐号 <br />
&nbsp; - 迁移到ASP.NET后，使用了比先前的体系结构更少的资源。150个服务器运行新的代码就能够做原来246个服务器做的同样的工作。 <br />
&nbsp; - 再看看存储瓶颈。实施SAN解决了原来的一些性能问题，但是现在Web站点的需求开始间歇性地超过了SAN的I/O能力-它从磁盘存储读写的速度 <br />
&nbsp; -&nbsp;使用每个数据库100个帐号的分开方式达到了极限，因为这已经超过了极限；&nbsp;<br />
&nbsp; - 迁移到一个虚拟存储体系结构，那里整个SAN被当作一个大的存储池来对待，不需要特定的磁盘为特定的应用服务。现在<br />
&nbsp;&nbsp;&nbsp; MySpace在设备上从相对新的SAN厂商，3PARdata方面已经标准化了。增加了一个高速缓存层&mdash;服务器放在Web服务器和数据库服务器之间，它唯一的工作就是捕获<a title="内存" style="color: #000000" href="http://product.it168.com/list/b/0205_1.shtml" target="_blank">内存</a>中频繁访问的数据对象的副本，然后把它们用于Web应用，不需要数据库查询。 <br />
<br />
&bull; 2600万帐号 <br />
&nbsp;&nbsp; - 迁移到64位SQL server以解决它们的内存瓶颈问题。它们的标准数据库服务器配置使用64GB的RAM。 <br />
<br />
Myspace的经验能够说明什么？<br />
&bull; 你可以使用微软的技术构建大型网站。 <br />
&bull; 从一开始就应该使用缓存。 <br />
&bull; 高速缓存是一个更好的地方存储临时数据，比如Web站点上跟踪一个特定用户的会话产生的临时文件，就不再需要记录到数据库里， <br />
&bull; 嵌入OS特征来检测拒绝服务攻击会产生无法解释的错误 <br />
&bull; 把数据分布到地理位置不同的数据中心，以免发生断电事故。 <br />
&bull; 从开始就考虑使用虚拟存储/簇文件系统。它能让你大量并行IO访问，而且不需要任何重组就能够增加所需要的磁盘。 <br />
<br />
<strong>MySpace网站架构的变迁<br />
</strong>&nbsp;&nbsp; MySpace 经历了六个里程碑的过程。 <br />
&nbsp;&nbsp;&nbsp; 在每个里程碑，站点负担都会超过底层系统部分组件的最大载荷，特别是数据库和<a title="存储" style="color: #000000" href="http://storage.it168.com/" target="_blank">存储</a>系统。接着，功能出现问题，用户失声尖叫。最后，技术团队必须为此修订系统策略。 <br />
　　虽然自2005年早期，站点账户数超过7百万后，系统架构到目前为止保持了相对稳定，但MySpace仍然在为SQL Server支持的同时连接数等方面继续攻坚，Benedetto（技术总监）说，&quot;我们已经尽可能把事情做到最好&quot;。 <br />
<br />
1. 里程碑一：50万账户 <br />
　　按Benedetto 的说法，MySpace最初的系统很小，只有两台Web<a title="服务器" style="color: #000000" href="http://product.it168.com/files/0402search.shtml" target="_blank">服务器</a>和一个数据库<a title="服务器" style="color: #000000" href="http://server.it168.com/" target="_blank">服务器</a>。那时使用的是Dell双<a title="CPU" style="color: #000000" href="http://product.it168.com/list/b/0217_1.shtml" target="_blank">CPU</a>、4G<a title="内存" style="color: #000000" href="http://product.it168.com/list/b/0205_1.shtml" target="_blank">内存</a>的系统。 <br />
　　单个数据库就意味着所有数据都存储在一个地方，再由两台Web服务器分担处理用户请求的工作量。但就像MySpace后来的几次底层系统修订时的情况一样，三服务器架构很快不堪重负。此后一个时期内，MySpace基本是通过添置更多Web服务器来对付用户暴增问题的。　　但到在2004年早期，MySpace用户数增长到50万后，数据库服务器也已开始汗流浃背。 <br />
　　但和Web服务器不同，增加数据库可没那么简单。如果一个站点由多个数据库支持，设计者必须考虑的是，如何在保证数据一致性的前提下，让多个数据库分担压力。 <br />
　　在第二代架构中，MySpace运行在3个SQL Server数据库服务器上：一个为主，所有的新数据都向它提交，然后由它复制到其他两个；另两个全力向用户供给数据，用以在博客和个人资料栏显示。这种方式在一段时间内效果很好。只要增加数据库服务器，加大<a title="硬盘" style="color: #000000" href="http://product.it168.com/list/b/0218_1.shtml" target="_blank">硬盘</a>，就可以应对用户数和访问量的增加。 <br />
<br />
2. 里程碑二：1-2百万账户MySpace <br />
<br />
&nbsp;&nbsp;&nbsp; 注册数到达1百万至2百万区间后，数据库服务器开始受制于I/O容量--即它们存取数据的速度。 <br />
而当时才是2004年中，距离上次数据库系统调整不过数月。用户的提交请求被阻塞，就像千人乐迷要挤进只能容纳几百人的夜总会，站点开始遭遇&quot;主要矛盾&quot;，Benedetto说，这意味着MySpace永远都会轻度落后于用户需求。&quot;有人花5分钟都无法完成留言，因此用户总是抱怨说网站已经完蛋了。&quot;他补充道。 <br />
　　这一次的数据库架构按照垂直分割模式设计，不同的数据库服务于站点的不同功能，如登录、用户资料和博客。 <br />
于是，站点的扩展性问题看似又可以告一段落了，可以歇一阵子。 <br />
　　垂直分割策略利于多个数据库分担访问压力，当用户要求增加新功能时，MySpace将投入新的数据库予以支持它。账户到达2百万后，MySpace还从存储设备与数据库服务器直接交互的方式切换到SAN（Storage Area Network，存储区域<a title="网络" style="color: #000000" href="http://net.it168.com/" target="_blank">网络</a>）--用高带宽、专门设计的网络将大量磁盘存储设备连接在一起，而数据库连接到SAN。这项措施极大提升了系统性能、正常运行时间和可靠性，Benedetto说。 <br />
<br />
3. 里程碑三：3百万账户 <br />
　　当用户继续增加到3百万后，垂直分割策略也开始难以为继。尽管站点的各个应用被设计得高度独立，但有些信息必须共享。在这个架构里，每个数据库必须有各自的用户表副本--MySpace授权用户的电子花名册。这就意味着一个用户注册时，该条账户记录必须在9个不同数据库上分别创建。但在个别情况下，如果其中某台数据库服务器临时不可到达，对应事务就会失败，从而造成账户非完全创建，最终导致此用户的该项服务无效。 <br />
　　另外一个问题是，个别应用如博客增长太快，那么专门为它服务的数据库就有巨大压力。2004 年中，MySpace面临Web开发者称之为&quot;向上扩展&quot;对&quot;向外扩展&quot;（译者注：Scale Up和Scale Out，也称硬件扩展和<a title="软件" style="color: #000000" href="http://software.it168.com/" target="_blank">软件</a>扩展）的抉择--要么扩展到更大更强、也更昂贵的服务器上，要么部署大量相对便宜的服务器来分担数据库压力。一般来说，大型站点倾向于向外扩展，因为这将让它们得以保留通过增加服务器以提升系统能力的后路。 <br />
　　但成功地向外扩展架构必须解决复杂的分布式计算问题，大型站点如Google、Yahoo和Amazon.com，都必须自行研发大量相关技术。以Google为例，它构建了自己的分布式文件系统。 <br />
　　另外，向外扩展策略还需要大量重写原来软件，以保证系统能在分布式服务器上运行。&quot;搞不好，开发人员的所有工作都将白费&quot;，Benedetto说。 <br />
　　因此，MySpace首先将重点放在了向上扩展上，花费了大约1个半月时间研究升级到32CPU服务器以管理更大数据库的问题。Benedetto说，&quot;那时候，这个方案看似可能解决一切问题。&quot;如稳定性，更棒的是对现有软件几乎没有改动要求。 <br />
　　糟糕的是，高端服务器极其昂贵，是购置同样处理能力和内存速度的多台服务器总和的很多倍。而且，站点架构师预测，从长期来看，即便是巨型数据库，最后也会不堪重负，Benedetto说，&quot;换句话讲，只要增长趋势存在，我们最后无论如何都要走上向外扩展的道路。&quot;　 <br />
　因此，MySpace最终将目光移到分布式计算架构--它在物理上分布的众多服务器，整体必须逻辑上等同于单台机器。拿数据库来说，就不能再像过去那样将应用拆分，再以不同数据库分别支持，而必须将整个站点看作一个应用。现在，数据库模型里只有一个用户表，支持博客、个人资料和其他核心功能的数据都存储在相同数据库。 <br />
　　既然所有的核心数据逻辑上都组织到一个数据库，那么MySpace必须找到新的办法以分担负荷--显然，运行在普通硬件上的单个数据库服务器是无能为力的。这次，不再按站点功能和应用分割数据库，MySpace开始将它的用户按每百万一组分割，然后将各组的全部数据分别存入独立的SQL Server实例。目前，MySpace的每台数据库服务器实际运行两个SQL Server实例，也就是说每台服务器服务大约2百万用户。Benedetto指出，以后还可以按照这种模式以更小粒度划分架构，从而优化负荷分担。 <br />
　　当然，还是有一个特殊数据库保存了所有账户的名称和密码。用户登录后，保存了他们其他数据的数据库再接管服务。特殊数据库的用户表虽然庞大，但它只负责用户登录，功能单一，所以负荷还是比较容易控制的。 <br />
<br />
4. 里程碑四： <br />
&nbsp;&nbsp;&nbsp; 9百万到1千7百万账户2005 年早期，账户达到9百万后，MySpace开始用Microsoft的C#编写ASP.NET程序。C#是C语言的最新派生语言，吸收了C++和Java 的优点，依托于Microsoft .NET框架（Microsoft为软件组件化和分布式计算而设计的模型架构）。ASP.NET则由编写Web站点脚本的ASP技术演化而来，是 Microsoft目前主推的Web站点编程环境。 <br />
　　可以说是立竿见影， MySpace马上就发现ASP.NET程序运行更有效率，与ColdFusion相比，完成同样任务需消耗的处理器能力更小。据技术总监 Whitcomb说，新代码需要150台服务器完成的工作，如果用ColdFusion则需要246台。Benedetto还指出，性能上升的另一个原因可能是在变换软件平台，并用新语言重写代码的过程中，程序员复审并优化了一些功能流程。 <br />
　　最终，MySpace开始大规模迁移到 ASP.NET。即便剩余的少部分ColdFusion代码，也从Cold-Fusion服务器搬到了ASP.NET，因为他们得到了 BlueDragon.NET（乔治亚州阿尔法利塔New Atlanta Communications公司的产品，它能将ColdFusion代码自动重新编译到Microsoft平台）的帮助。 <br />
　　账户达到1千万时，MySpace再次遭遇存储瓶颈问题。SAN的引入解决了早期一些性能问题，但站点目前的要求已经开始周期性超越SAN的I/O容量--即它从磁盘存储系统读写数据的极限速度。 <br />
　　原因之一是每数据库1百万账户的分割策略，通常情况下的确可以将压力均分到各台服务器，但现实并非一成不变。比如第七台账户数据库上线后，仅仅7天就被塞满了，主要原因是佛罗里达一个乐队的歌迷疯狂注册。 <br />
　　某个数据库可能因为任何原因，在任何时候遭遇主要负荷，这时，SAN中绑定到该数据库的磁盘存储设备簇就可能过载。&quot;SAN让磁盘I/O能力大幅提升了，但将它们绑定到特定数据库的做法是错误的。&quot;Benedetto说。 <br />
　　最初，MySpace通过定期重新分配SAN中数据，以让其更为均衡的方法基本解决了这个问题，但这是一个人工过程，&quot;大概需要两个人全职工作。&quot;Benedetto说。长期解决方案是迁移到虚拟存储体系上，这样，整个SAN被当作一个巨型存储池，不再要求每个磁盘为特定应用服务。MySpace目前采用了一种新型SAN设备--来自加利福尼亚州弗里蒙特的3PARdata。 <br />
　　在3PAR的系统里，仍能在逻辑上按容量划分数据存储，但它不再被绑定到特定磁盘或磁盘簇，而是散布于大量磁盘。这就使均分数据访问负荷成为可能。当数据库需要写入一组数据时，任何空闲磁盘都可以马上完成这项工作，而不再像以前那样阻塞在可能已经过载的<a title="磁盘阵列" style="color: #000000" href="http://product.it168.com/list/b/0707_1.shtml" target="_blank">磁盘阵列</a>处。而且，因为多个磁盘都有数据副本，读取数据时，也不会使SAN的任何组件过载。 <br />
　　当2005年春天账户数达到1千7百万时，MySpace又启用了新的策略以减轻存储系统压力，即增加数据缓存层--位于Web服务器和数据库服务器之间，其唯一职能是在内存中建立被频繁请求数据对象的副本，如此一来，不访问数据库也可以向 Web应用供给数据。 <br />
&nbsp;&nbsp;&nbsp; 换句话说，100个用户请求同一份资料，以前需要查询数据库100次，而现在只需1次，其余都可从缓存数据中获得。当然如果页面变化，缓存的数据必须从内存擦除，然后重新从数据库获取--但在此之前，数据库的压力已经大大减轻，整个站点的性能得到提升。 <br />
　　缓存区还为那些不需要记入数据库的数据提供了驿站，比如为跟踪用户会话而创建的临时文件--Benedetto坦言他需要在这方面补课，&quot;我是数据库存储狂热分子，因此我总是想着将万事万物都存到数据库。&quot;但将像会话跟踪这类的数据也存到数据库，站点将陷入泥沼。 <br />
　　增加缓存服务器是&quot;一开始就应该做的事情，但我们成长太快，以致于没有时间坐下来好好研究这件事情。&quot;Benedetto补充道。 <br />
<br />
5. 里程碑五： <br />
&nbsp;&nbsp;&nbsp;&nbsp; 2千6百万账户2005 年中期，服务账户数达到2千6百万时，MySpace切换到了还处于beta测试的SQLServer 2005。转换何太急？主流看法是2005版支持64位处理器。但Benedetto说，&quot;这不是主要原因，尽管这也很重要；主要还是因为我们对内存的渴求。&quot;支持64位的数据库可以管理更多内存。 <br />
　　更多内存就意味着更高的性能和更大的容量。原来运行32位版本的SQL Server服务器，能同时使用的内存最多只有4G。切换到64位，就好像加粗了输水管的直径。升级到SQL Server 2005和64位Windows Server 2003后，MySpace每台服务器配备了32G内存，后于2006年再次将配置标准提升到64G。<br />
<br />
<strong>意外错误</strong> <br />
　　如果没有对系统架构的历次修改与升级，MySpace根本不可能走到今天。但是，为什么系统还经常吃撑着了？很多用户抱怨的&quot;意外错误&quot;是怎么引起的呢？ <br />
<br />
　　原因之一是MySpace对Microsoft的Web技术的应用已经进入连Microsoft自己也才刚刚开始探索的领域。比如11月，超出SQL Server最大同时连接数，MySpace系统崩溃。Benedetto说，这类可能引发系统崩溃的情况大概三天才会出现一次，但仍然过于频繁了，以致惹人恼怒。一旦数据库罢工，&quot;无论这种情况什么时候发生，未缓存的数据都不能从SQL Server获得，那么你就必然看到一个'意外错误'提示。&quot;他解释说。 <br />
<br />
　　去年夏天，MySpace的Windows 2003多次自动停止服务。后来发现是<a title="操作系统" style="color: #000000" href="http://product.it168.com/list/b/0501_1.shtml" target="_blank">操作系统</a>一个内置功能惹的祸--预防分布式拒绝服务攻击（黑客使用很多客户机向<a title="服务器" style="color: #000000" href="http://product.it168.com/files/0402search.shtml" target="_blank">服务器</a>发起大量连接请求，以致<a title="服务器" style="color: #000000" href="http://server.it168.com/" target="_blank">服务器</a>瘫痪）。MySpace和其他很多顶级大站点一样，肯定会经常遭受攻击，但它应该从<a title="网络" style="color: #000000" href="http://net.it168.com/" target="_blank">网络</a>级而不是依靠Windows本身的功能来解决问题--否则，大量 MySpace合法用户连接时也会引起服务器反击。&quot;我们花了大约一个月时间寻找Windows 2003服务器自动停止的原因。&quot;Benedetto说。最后，通过Microsoft的帮助，他们才知道该怎么通知服务器：&quot;别开枪，是友军。&quot; <br />
<br />
　　紧接着是在去年7月某个周日晚上，MySpace总部所在地洛杉矶停电，造成整个系统停运12小时。大型Web站点通常要在地理上分布配置多个数据中心以预防单点故障。本来，MySpace还有其他两个数据中心以应对突发事件，但Web服务器都依赖于部署在洛杉矶的SAN。没有洛杉矶的SAN，Web服务器除了恳求你耐心等待，不能提供任何服务。Benedetto说，主数据中心的可靠性通过下列措施保证：可接入两张不同电网，另有后备<a title="电源" style="color: #000000" href="http://product.it168.com/list/b/0222_1.shtml" target="_blank">电源</a>和一台储备有30天燃料的发电机。但在这次事故中，不仅两张电网失效，而且在切换到备份电源的过程中，操作员烧掉了主动力线路。2007年中，MySpace在另两个后备站点上也建设了SAN。这对分担负荷大有帮助--正常情况下，每个SAN都能负担三分之一的数据访问量。而在紧急情况下，任何一个站点都可以独立支撑整个服务，Benedetto说。MySpace仍然在为提高稳定性奋斗，虽然很多用户表示了足够信任且能原谅偶现的错误页面。&quot; 作为开发人员，我憎恶Bug，它太气人了。&quot;Dan Tanner这个31岁的德克萨斯<a title="软件" style="color: #000000" href="http://software.it168.com/" target="_blank">软件</a>工程师说，他通过MySpace重新联系到了高中和大学同学。&quot;不过，MySpace对我们的用处很大，因此我们可以原谅偶发的故障和错误。&quot; Tanner说，如果站点某天出现故障甚至崩溃，恢复以后他还是会继续使用。 <br />
<br />
　　这就是为什么Drew在论坛里咆哮时，大部分用户都告诉他应该保持平静，如果等几分钟，问题就会解决的原因。Drew无法平静，他写道，&quot;我已经两次给MySpace发邮件，而它说一小时前还是正常的，现在出了点问题&hellip;&hellip;完全是一堆废话。&quot;另一个用户回复说，&quot;毕竟它是免费的。&quot;Benedetto坦承100%的可靠性不是他的目标。&quot;它不是银行，而是一个免费的服务。&quot;他说。 <br />
<br />
　　换句话说，MySpace的偶发故障可能造成某人最后更新的个人资料丢失，但并不意味着网站弄丢了用户的钱财。&quot;关键是要认识到，与保证站点性能相比，丢失少许数据的故障是可接受的。&quot;Benedetto说。所以，MySpace甘冒丢失2分钟到2小时内任意点数据的危险，在SQL Server配置里延长了&quot;checkpoint&quot;操作--它将待更新数据永久记录到磁盘--的间隔时间，因为这样做可以加快数据库的运行。Benedetto 说，同样，开发人员还经常在几个小时内就完成构思、编码、测试和发布全过程。这有引入Bug的风险，但这样做可以更快实现新功能。而且，因为进行大规模真实测试不具可行性，他们的测试通常是在仅以部分活跃用户为对象，且用户对软件新功能和改进不知就里的情况下进行的。因为事实上不可能做真实的加载测试，他们做的测试通常都是针对站点。&quot;我们犯过大量错误，&quot;Benedetto说，&quot;但到头来，我认为我们做对的还是比做错的多。&quot;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=684</link>
      <title><![CDATA[在C#中解析JavaScript代码]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-7-8 9:54:53</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=684</guid>
      <comments>
              /Blog/Blog.aspx?Id=684#commentbox
            </comments>
      <description><![CDATA[<p>转自:http://www.zeali.net/entry/495</p>
<p>大部分的解释型脚本语言都提供 eval 方法来完成动态代码的解释执行， C# 却并不提供（向 Java 学习）。不过在 .NET Framework 类库里面提供的 Microsoft.JScript 命名空间倒是包含了支持使用JScript 语言编译和生成代码的类。<br />
<br />
　<strong><font color="#ff0000">JsEvaluator</font></strong> 类需要你添加对程序集 <font face="courier new,courier,monospace">Microsoft.JScript</font> 的引用；如果把&ldquo;<font face="courier new,courier,monospace">current version with JScriptCodeProvider</font>&rdquo; 部分代码替换为&ldquo;<font face="courier new,courier,monospace">deprecated version with Vsa</font>&rdquo;部分代码，你还需要添加对程序集 <font face="courier new,courier,monospace">Microsoft.Vsa</font> 的引用。</p>
<p>　　代码段末尾注释掉的部分是用 <a href="http://msdn2.microsoft.com/zh-cn/library/microsoft.jscript.vsa.vsaengine(VS.80).aspx" target="_blank">Microsoft.JScript.Vsa.VsaEngine</a>&nbsp;作为脚本引擎来完成 Evaluate&nbsp;工作；但 VsaEngine （包括其所实现的 <a href="http://msdn2.microsoft.com/zh-cn/library/microsoft.vsa.ivsaengine(VS.80).aspx" target="_blank">IVsaEngine</a> 接口）在 .NET Framework 2.0 中已经被 deprecated ，所以如果你在新版本下编译的话，会得到如下的警告信息：&ldquo;Microsoft.JScript.Vsa.VsaEngine&rdquo;已过时:&ldquo;Use of this type is not recommended because it is being deprecated in Visual Studio 2005; there will be no replacement for this feature. Please see the <a href="http://msdn2.microsoft.com/zh-cn/library/system.codedom.compiler.icodecompiler(VS.80).aspx" target="_blank">ICodeCompiler</a> documentation for additional help.&rdquo;</p><div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">using</span><span>&nbsp;System;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span class="keyword">using</span><span>&nbsp;System.CodeDom.Compiler;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">using</span><span>&nbsp;System.Reflection;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">using</span><span>&nbsp;Microsoft.JScript;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">namespace</span><span>&nbsp;zeal.util&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;JSEvaluator&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;EvalToInteger(</span><span class="keyword">string</span><span>&nbsp;statement)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">string</span><span>&nbsp;s&nbsp;=&nbsp;EvalToString(statement);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">int</span><span>.Parse(s.ToString());&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">double</span><span>&nbsp;EvalToDouble(</span><span class="keyword">string</span><span>&nbsp;statement)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">string</span><span>&nbsp;s&nbsp;=&nbsp;EvalToString(statement);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;</span><span class="keyword">double</span><span>.Parse(s);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">string</span><span>&nbsp;EvalToString(</span><span class="keyword">string</span><span>&nbsp;statement)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">object</span><span>&nbsp;o&nbsp;=&nbsp;EvalToObject(statement);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;o.ToString();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;current&nbsp;version&nbsp;with&nbsp;JScriptCodeProvider&nbsp;BEGIN&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">///*&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">object</span><span>&nbsp;EvalToObject(</span><span class="keyword">string</span><span>&nbsp;statement)&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">return</span><span>&nbsp;_evaluatorType.InvokeMember(&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;Eval&quot;</span><span>,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BindingFlags.InvokeMethod,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">null</span><span>,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_evaluator,&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">object</span><span>[]&nbsp;{&nbsp;statement&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">static</span><span>&nbsp;JSEvaluator()&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JScriptCodeProvider&nbsp;compiler&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;JScriptCodeProvider();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CompilerParameters&nbsp;parameters;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;CompilerParameters();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters.GenerateInMemory&nbsp;=&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CompilerResults&nbsp;results;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;results&nbsp;=&nbsp;compiler.CompileAssemblyFromSource(&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parameters,&nbsp;_jscriptSource);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Assembly&nbsp;assembly&nbsp;=&nbsp;results.CompiledAssembly;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_evaluatorType&nbsp;=&nbsp;assembly.GetType(</span><span class="string">&quot;JSEvaluator.JSEvaluator&quot;</span><span>);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_evaluator&nbsp;=&nbsp;Activator.CreateInstance(_evaluatorType);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">object</span><span>&nbsp;_evaluator&nbsp;=&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Type&nbsp;_evaluatorType&nbsp;=&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">readonly</span><span>&nbsp;</span><span class="keyword">string</span><span>&nbsp;_jscriptSource&nbsp;=&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@</span><span class="string">&quot;package&nbsp;JSEvaluator&nbsp;&nbsp; </span>&nbsp;</li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;JSEvaluator&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;Eval(expr&nbsp;:&nbsp;String)&nbsp;:&nbsp;Object&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;eval(expr);&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&quot;</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//*/&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;current&nbsp;version&nbsp;with&nbsp;JScriptCodeProvider&nbsp;END&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;deprecated&nbsp;version&nbsp;with&nbsp;Vsa&nbsp;BEGIN&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">/*&nbsp;&nbsp; </span>&nbsp;</li>
    <li class="alt"><span><span class="comment">&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;Microsoft.JScript.Vsa.VsaEngine&nbsp;Engine&nbsp;=&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Microsoft.JScript.Vsa.VsaEngine.CreateEngine();&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;object&nbsp;EvalToObject(string&nbsp;JScript)&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;Result&nbsp;=&nbsp;null;&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;=&nbsp;Microsoft.JScript.Eval.JScriptEvaluate(&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JScript,&nbsp;Engine);&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ex.Message;&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Result;&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp; </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp; </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;deprecated&nbsp;version&nbsp;with&nbsp;Vsa&nbsp;END&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
这样的 Evaluate 方法一个显而易见的用途就是解析 <a href="http://www.json.org/json-zh.html" target="_blank">JSON</a> 数据。 JSON 的数据格式实际上是 JavaScript 对象定义语法的子集，所以使用这个 Framework 所提供的脚本引擎来解析得到的 JSON 格式的数据就比自己写一个 Parser 来的轻松得多。比如：</p>
<div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">string</span><span>&nbsp;jsStr&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="string">&quot;(&nbsp;{'timeString':'Time&nbsp;is:&nbsp;'&nbsp;+&nbsp;new&nbsp;Date(),'dateValue':new&nbsp;Date()}&nbsp;)&quot;</span><span>;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>Microsoft.JScript.JSObject&nbsp;obj&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;(Microsoft.JScript.JSObject)&nbsp;JSEvaluator.EvalToObject(jsStr);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>MessageBox.Show(obj[</span><span class="string">&quot;timeString&quot;</span><span>].ToString());&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>MessageBox.Show(obj[</span><span class="string">&quot;dateValue&quot;</span><span>].ToString());&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>Microsoft.JScript.DateObject&nbsp;tmpV&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;(Microsoft.JScript.DateObject)obj[</span><span class="string">&quot;dateValue&quot;</span><span>];&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>DateTime&nbsp;dt&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;(DateTime)&nbsp;Microsoft.JScript.Convert.Coerce(tmpV,&nbsp;</span><span class="keyword">typeof</span><span>(DateTime));&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>MessageBox.Show(dt.ToString());&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
</ol>
</div>
<p>只需要得到一个 JSObject ，就可以通过对象的 key 名访问到每一个变量。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=683</link>
      <title><![CDATA[简单说说JAVA的String和byte[]的关系]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-7-6 14:14:24</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=683</guid>
      <comments>
              /Blog/Blog.aspx?Id=683#commentbox
            </comments>
      <description><![CDATA[<p>最尽用到了byte[] -&gt; String的转换, 一直不知到,这些内容是有什么本质的区别,网上找了一下,没有找到C#的,找到了Java的,不过也差不多了,嘿嘿~~</p>
<p>做JAVA经常会碰到中文乱码问题，还有各种编码的问题，特别是String类的内容需要重新编码的问题。要解决这些问题，必须了解清楚JAVA对于字符串是怎么处理的。</p>
<p>1，&ldquo;字符&rdquo;是由数字来表示的<br />
　　先来重新了解一下计算机是如何处理&ldquo;字符&rdquo;的，这个原理是大家必须记住的，特别是在用JAVA写程序的时候，万万不可模糊。我们知道，计算机把任何东西都用数字来表示，&ldquo;字符&rdquo;也不例外。比如我们要显示一个阿拉伯数字&ldquo;3&rdquo;，在我们的PC里，其实并不是仅仅用一个数字3来代表我们要写的&ldquo;3&rdquo;，而是以十六进制的0&times;33来代表，包括放在内存或者是写到文件里，其实都是写着0&times;33的，不信你可以编辑一个文本文件，写一个&ldquo;3&rdquo;，然后用ultraEdit看他的原始码。</p><p>2，一切&ldquo;字符&rdquo;都必定用数字+编码表表示。 <br />
　　这时候，有一个问题：为什么一定要用0&times;33来代表&ldquo;3&rdquo;呢？而不用0&times;43来代表呢？或者是直接用0&times;03来代替？其实用什么来代表都可以，只不过大家都习惯了用ASCII编码表（是美国国家信息交换表）来确定各字符应该是用什么数字代表的。同样，为了表示中国字，我国也指定了中文的编码表，其中最广泛使用的是GB2312。比如中文的&ldquo;当&rdquo;字，就是用0xB5, 0xB1这两个八位的数字来表示的。所以如果显示字符的程序不知道一列数字到底是按什么编码表编码的，他也无法去判断到底这些是什么文字。如果随便用一个不对的编码表来处理这些数字，处理出来的字符很可能完全是错的。比如在英文系统上，没有GB2312编码表，送给他一个0xB5,0xB1，他就傻傻的当作ASCII来处理（操作系统通常都有自己默认的编码表），结果显示出来就是两个奇怪的符号，因为这两个字在ASCII表里就是那两个符号。同样在繁体中文系统里，他的编码表是BIG5，显示出来也是一个奇怪的中文，不是&ldquo;当&rdquo;字。</p>
<p>3，UNICODE让全世界都说一种语言<br />
　　看完上面的文字，是否觉得，世界有那么多语言，每个都有自己的一套编码表，很麻烦呢？就算是中文，也有两套流行的编码表，一个是GB2312，一个是BIG5。要使用不同中文的编码的字符时，还要转来转去，的确很麻烦。不光这个，如果想要写一篇包含很多过国文字的文章，就麻烦了，必须要让处理这个文章的程序知道，哪个字是什么编码标准的。如果你想要在文章里找一个字，也必须指定你要找的是哪种编码的哪个字。否则，你要找一个0xB5,0xB1的中文&ldquo;当&rdquo;字，很可能把同样数字表示的日文、波兰文这些不相干的字一起给你找出来，够麻烦的吧！<br />
　　所以人们想，不如大家都用同一个编码标准吧，各种文字都在编码表里有一席之地，处理文字的程序只需要都按这个编码表来处理就可以了。不过要一个编码表里包含所有的文字，这张表就大了，本来英文字+数字一共只有128个以内。但加上中文后，忽然就多了数万个，所以存放一个字符需要的大小也大了很多。现在UNICODE规定了一个字符必须由2个8位数字来表示，想想，8&times;8x8&times;8x = 65536 ，是多大的一个数字啊！所以全世界的文字才能都包含进去。当然拉，也有人说中国字可能都不止6万个拉，还要包括别的文字，但人家外国人觉得你们中国人常用的也没那么多，所以就这么定了，我们也没办法。需要注意的是GB2312和UNICODE虽然都是用两个8位数来代表一个中文字，但具体的规格可不一样，比如0xB5,0xB1在UNICODE里面可不是&ldquo;当&rdquo;字，而是另外一国的文字来的。</p>
<p>4，C是如何简洁的处理字符的<br />
　　 我们来谈谈C的字符串。C语言诞生在JAVA之前，C语言的基本数据类型是没有字符串这个类型的，它只有char[]。也就是C把字符顺序放入一个字节数组就完了。而且C也不管放在数组里的是什么文字，也不管那些字是按什么编码标准的。而且他的char的大小也不一定是8位数字，有时候是16位也可能，这要看具体的机器和操作系统。所以写程序的人必须要知道正在处理的char[]的内容到底是按什么编码表表示的字符串，要知道如果比较两国文字是否相同，可是没任何意义的哦！</p>
<p>5，JAVA是是如何处理字符的。<br />
　　世界总会进步的，JAVA就是一个例子。JAVA终于有了String类了，它是解决字符问题的最好工具。在JAVA里，一个基本的要点是：String类对象是不需要指定编码表的！为什么它会自己知道一堆数字各代表什么字符呢？就是因为String里的字符信息是用UNICODE编码存放的。而JAVA为了表示字符（注意是单个字符），也有char这个数据类型，而且他的大小是固定2个8位16进制数字长度，也就是0~65535罗。为的就是对应UNICODE里面的一个字符。大家如果想取一个String里的按UNICODE数字，可以用getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 方法取得一个char[]，这个char[]里就是表示String字符的，按UNICODE编码表编码的数字。<br />
　　可惜现在绝大多数的系统和程序都不是按UNICODE来处理字符，而JAVA程序总是要和别的程序和系统交换数据的，所以在接收一个字符，或者是发送一个字符的时候，就必须要留意当前系统和UNICODE的关系了。比如你从网络或者文件接受到一数字：0xB5,0xB1，JAVA程序并不知道这两个字到底是中文呢？还是日文，或者英文。你如果不指明这个两个数字的编码表，JAVA就会按当前系统默认的编码表来处理。如果这两个数字是从中文WIN98发出去的，JAVA程序又是在英文LINUX上运行的，那就出现了所谓的乱码问题了。也就是JAVA按英文的编码表ASCII来处理这两个数字，当通过new String({0xB5,0xB1})得到的String的时候，这个String代表的已经不是中文的&ldquo;当&rdquo;字，而是两个英文的奇怪字符了。不过如果你知道这两个数字一定是中文的话，就可以指定用new String({0xB5,0xB1},&rdquo;GB2312&Prime;)来处理，这时候新建立的String才真的是一个&ldquo;当&rdquo;字。当然拉，如果你要把一个&ldquo;当&rdquo;字的JAVA的String显示在中文WIN98上，必须把这个字输出成两个8位数字：0xB5,0xB1，不管是写成文件还是输出到浏览器上，都必须是0xB5,0xB1。如何把&ldquo;当&rdquo;字用GB2312输出？String.getBytes(&rdquo;GB2312&Prime;)就可以拉！所以有一点要记住：和外界交换任何信息都是以byte[]来进行的！。你可以留意一下JAVA大多数的I/O类，都有以byte[]作为参数和返回值的方法。不过，也有很多写的比较糊涂的程序，没有提供byte[]交换信息的方法，害的不同文字平台的程序员很头疼。Servlet的HttpRequest.getParameter()就是这样。好在有的JSP/SERVLET容易还提供先指定编码表的方法，才能比较简单的解决这个问题。</p>
<p>6，网上关于JAVA中文问题的一些错误处理方法。<br />
　　一个是最常见的，不管什么内容，都用new String(&hellip;,&rdquo;ISO-8859-1&Prime;)来建立字符串，然后使用的时候按默认的编码格式（通常在服务器上都是英文系统）输出字符串。这样其实你使用的String并不是按UNICODE来代表真正的字符，而是强行把BYTE数组复制到String的char[]里，一旦你的运行环境改变，你就被迫要修改一大堆的代码。而且也无法在同一个字符串里处理几种不同编码的文字。<br />
　　另一个是把一种编码格式的字符串，比如是GB2312，转换成另一种格式的字符串，比如UTF-8，然后不指明是UTF-8编码，而直接用new String(&hellip;)来建立String，这样放在String里面的字符也是无法确定的，它在不同的系统上代表不同的字符。如果要求别人用&ldquo;UTF-8格式&rdquo;的String来交换信息的时候，其实已经破坏了JAVA为了兼容各种语言所做的规定。这种错误的本质思想是还按写C语言的方式，把字符串纯粹当作可以自己自由编码的存储器使用，而忽略了JAVA字符串只有一种编码格式。如果真的想自由编码，用byte[]或者char[]就完全了解决问题的了。</p>
<p><a href="http://08ss.blog.iiicd.com/?p=176">http://08ss.blog.iiicd.com/?p=176</a></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=680</link>
      <title><![CDATA[43个PSD转XHTML, CSS创建布局及导航辅导教程,解析事件背后的每一个步骤]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-6-22 14:08:15</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=680</guid>
      <comments>
              /Blog/Blog.aspx?Id=680#commentbox
            </comments>
      <description><![CDATA[<p><font face="Verdana" size="2">我没有看到过关于这种清单的文章，于是，我就自己创建了一篇。作为一名</font><a href="http://www.yeeyan.com/articles/tag/%E8%AE%BE%E8%AE%A1" target="_blank"><em><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C9%E8%BC%C6"><font face="Verdana" size="2">设计</font></span></em></a><font face="Verdana" size="2">师， <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=web">web</span>程序部分的编写一直是我最困难的部分。但现在有很多非常棒的辅导<strong><font color="#ff0000"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%BD%CC%B3%CC">教程</span></font></strong>来指导我们怎么使用一些简单的XHTML + </font><a href="http://www.yeeyan.com/articles/tag/CSS" target="_blank"><em><font face="Verdana" size="2">CSS</font></em></a><font face="Verdana" size="2">去创建惊人的布局效果，他们会解释真正发生在事件背后的的每一个步骤。学习怎么正确地使用CSS，创建布局，忘掉表格布局，享受真正的CSS布局的 强大，然后, 良好地使用《<em>43个PSD转XHTML, <a href="http://www.yeeyan.com/articles/tag/CSS" target="_blank"><em>CSS</em></a>辅导<strong><font color="#ff0000">教程</font></strong></em>》！<br />
1.</font><a href="http://css-tricks.com/video-screencasts/1-converting-a-photoshop-mockup-part-1-of-3/" target="_blank"><font face="Verdana"><font size="2">PSD 转 XHTML <strong><font color="#ff0000">教程</font></strong></font></font></a><br />
<font face="Verdana, arial, sans-serif "><font size="2">在这第一个视频博客网站中，我开始转变为使用Adobe Photoshop模式来创建真正的基于</font><a href="http://www.yeeyan.com/articles/tag/CSS" target="_blank"><em><font size="2">CSS</font></em></a><font size="2">的网站。这里聚集很多不同类型的人，我相信，随着时间的转移将会有更多的侧重点。</font></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://css-tricks.com/video-screencasts/1-converting-a-photoshop-mockup-part-1-of-3/" target="_blank"><img height="351" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/conversation-psd-to-xhtml-tutorial-css.jpg" width="570" border="0" /></a></font></p><p><font face="Verdana" size="2">2. </font><a href="http://css-tricks.com/how-to-create-a-horizontally-scrolling-site/" target="_blank"><font face="Verdana" size="2">怎么创建水平滚动的网站</font></a><br />
<font face="Verdana" size="2"><a href="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/horizontally-scrolling-site.jpg" target="_blank"><img height="238" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/horizontally-scrolling-site-thumb.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana" size="2">3. </font><a href="http://nettuts.com/site-builds/from-psd-to-html-building-a-set-of-website-designs-step-by-step/" target="_blank"><font face="Verdana" size="2">PSD 转 HTML, 一步步地构造网站设计</font></a><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://nettuts.com/site-builds/from-psd-to-html-building-a-set-of-website-designs-step-by-step/" target="_blank"><img height="314" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/creatif-nettuts-from-psd-to-xhtml.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">4. </font><a href="http://www.subcide.com/tutorials/csslayout/" target="_blank"><font size="2">Subcide: 从零开始创建CSS布局</font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://www.subcide.com/tutorials/csslayout/" target="_blank"><img height="306" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/subcide-web-layout-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">5. </font><a href="http://net.tutsplus.com/tutorials/site-builds/build-a-sleek-portfolio-site-from-scratch/" target="_blank"><font size="2">从零开始创建一个时尚的站点 - PSD+XHTML <strong><font color="#ff0000">教程</font></strong></font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://net.tutsplus.com/tutorials/site-builds/build-a-sleek-portfolio-site-from-scratch/" target="_blank"><img height="317" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/psd-vs-net-tutorial-convert.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">6. </font><a href="http://csshowto.com/layout/" target="_blank"><font size="2">4个简短的PSD 转 CSS<strong><font color="#ff0000">教程</font></strong></font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://csshowto.com/layout/" target="_blank"><img height="320" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/sanke-photograph-css-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">7. </font><a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-with-drupal-introduction/" target="_blank"><font size="2">用Drupal创建The Killer乐队网站：6个部分<strong><font color="#ff0000">教程</font></strong>系列</font></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">大量的通过Illustrator创建站点的辅导<strong><font color="#ff0000">教程</font></strong>，Drupal编写的源代码，符合标准的XHTML和</font><a href="http://www.yeeyan.com/articles/tag/CSS" target="_blank"><em><font size="2">CSS</font></em></a><font size="2">。</font></font><br />
<font size="2"><font face="Verdana, arial, sans-serif ">完整的<strong><font color="#ff0000">教程</font></strong>索引:</font><br />
</font><font face="Verdana, arial, sans-serif "><a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-in-drupal-part-1-design/" target="_blank"><font size="2">阅读第一部分 - 使用Illustrator设计<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D2%B3%C3%E6">页面</span></font></a><br />
<a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-in-drupal-part-2-slicing-in-illustrator/" target="_blank"><font size="2">阅读第二部分 - 使用Illustrator切图</font></a><br />
<a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-in-drupal-part-3-xhtml/" target="_blank"><font size="2">阅读第三部分 - XHTML</font></a><br />
<a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-in-drupal-part-4-theming-drupal/" target="_blank"><font size="2">阅读第四部分 - Drupal <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D6%F7%CC%E2">主题</span>模板</font></a><br />
<a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-in-drupal-part-5-drupal-admin/" target="_blank"><font size="2">阅读第五部分 -Drupal 管理</font></a><br />
<a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-in-drupal-part-6-additional-functionality-and-resources/" target="_blank"><font size="2">阅读第六部分 - 总结及附加资源</font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://www.gomediazine.com/tutorials/create-a-killer-band-site-with-drupal-introduction/" target="_blank"><img height="466" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/band-site-and-drupal-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">8. </font><a href="http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html" target="_blank"><font size="2">如何使用CSS创建性感的按钮</font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://www.oscaralexander.com/tutorials/how-to-make-sexy-buttons-with-css.html" target="_blank"><img height="253" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/how-to-make-sexy-button.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">9. </font><a href="http://csshowto.com/menus/horizontal-menus-that-grow-on-you/" target="_blank"><font size="2">讨人喜欢的水平菜单</font></a></font><br />
<br />
<font size="2"><font face="Verdana, arial, sans-serif ">在这快速指南，我将讨论如何建立一个工整的简单效果的菜单。我在liDock上作了配音，因为当鼠标移动到上面时，菜单的大小会随之缩放，就像OS-X上的节点(the dock on OS-X)，也是因为这是一个列表菜单。</font><br />
<font face="Verdana, arial, sans-serif "><a href="http://csshowto.com/menus/horizontal-menus-that-grow-on-you/" target="_blank"><img height="146" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/css-menu-growing-dock.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">10. <a href="http://freecss.info/free-css-tutorials/css-template-tutorial-setting-up/" target="_blank">CSS 模板<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://freecss.info/free-css-tutorials/css-template-tutorial-setting-up/" target="_blank"><img height="348" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/free-css-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">11. <a href="http://www.webdesignerwall.com/tutorials/css-gradient-text-effect/" target="_blank">CSS渐变文字特效<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.webdesignerwall.com/tutorials/css-gradient-text-effect/" target="_blank"><img height="303" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/css-gradient-text-effect.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">12. <a href="http://www.webdesignerwall.com/tutorials/how-to-css-large-background/" target="_blank">怎么创建: CSS超大背景<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.webdesignerwall.com/tutorials/how-to-css-large-background/" target="_blank"><img height="358" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/large-background-css.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">13. <a href="http://net.tutsplus.com/videos/screencasts/converting-a-design-from-psd-to-html/" target="_blank">PSD效果图转换成HTML</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://net.tutsplus.com/videos/screencasts/converting-a-design-from-psd-to-html/" target="_blank"><img height="385" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/your-logo-psd-to-xhtml.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">14. <a href="http://net.tutsplus.com/videos/screencasts/slice-and-dice-that-psd/" target="_blank">PSD切图</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://net.tutsplus.com/videos/screencasts/slice-and-dice-that-psd/" target="_blank"><img height="390" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/paper-business-psd-to-xhtml.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">15. <a href="http://css-tricks.com/examples/BlurryBackgroundEffect/" target="_blank">模糊背景效果</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://css-tricks.com/examples/BlurryBackgroundEffect/" target="_blank"><img height="345" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/blurry-background-effect.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">16. <a href="http://net.tutsplus.com/videos/screencasts/exactly-how-to-use-css-sprites/" target="_blank">使用 CSS Sprites <strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://net.tutsplus.com/videos/screencasts/exactly-how-to-use-css-sprites/" target="_blank"><img height="39" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/using-css-sprites.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">17. <a href="http://www.webdesignerwall.com/tutorials/advanced-css-menu/" target="_blank"><span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%D6%BB%E6">手绘</span>风格的 CSS 导航按钮</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.webdesignerwall.com/tutorials/advanced-css-menu/" target="_blank"><img height="248" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/hand-drawn-css-navigation.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">18. <a href="http://www.askthecssguy.com/2007/08/creating_a_table_with_dynamica.html" target="_blank">创建类似Crazy Egg价格列表效果的表格列高亮效果</a><a href="http://www.askthecssguy.com/2007/08/creating_a_table_with_dynamica.html" target="_blank"><img height="217" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/dinamically-highlighted-columns.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">19. <a href="http://www.ndesign-studio.com/resources/dreamweaver/css-menu/" target="_blank">CSS 菜单<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.ndesign-studio.com/resources/dreamweaver/css-menu/" target="_blank"><img height="326" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/n-design-cssmenu.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">20. <a href="http://bwebi.com/clean_vertical_menu.html" target="_blank">Photoshop <strong><font color="#ff0000">教程</font></strong> + 切片部分 + <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=css">css</span> 编码</a></font><br />
<font face="Verdana, arial, sans-serif ">这篇<strong><font color="#ff0000">教程</font></strong>会教导您怎么使用Adobe Photoshop来创建整洁的、漂亮的垂直效果的菜单。</font><br />
<font face="Verdana, arial, sans-serif "><a href="http://bwebi.com/css_graphic_menu_with_rollovers.html" target="_blank"><img height="214" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/css-menu-blue.jpg" width="191" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">21. <a href="http://www.tutorialcode.com/html/slice-a-template-and-code-it-using-css/" target="_blank">切片模板和使用 CSS 编码</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.tutorialcode.com/html/slice-a-template-and-code-it-using-css/" target="_blank"><img height="282" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/slice-a-template-and-code-it-using-css.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">22. <a href="http://hv-designs.co.uk/2007/10/10/coding-your-1st-psd-tutorial/" target="_blank">编码您的第一个PSD<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://hv-designs.co.uk/2007/10/10/coding-your-1st-psd-tutorial/" target="_blank"><img height="324" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/code-psd-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">23. <a href="http://leftjustified.net/site-in-an-hour/" target="_blank">通过简单的工作完成复杂的 CSS 布局</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/generico.jpg" target="_blank"><img height="299" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/generico-thumb.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">24. <a href="http://fortysevenmedia.com/blog/archives/making_your_footer_stay_put_with_css/" target="_blank">使用CSS固定您的页脚</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://fortysevenmedia.com/blog/archives/making_your_footer_stay_put_with_css/" target="_blank"><img height="268" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/sticky-footers.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">25. <a href="http://net.tutsplus.com/videos/screencasts/how-to-convert-a-psd-to-xhtml/" target="_blank">教你如何转换 PSD 为 xHTML - 视频<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://net.tutsplus.com/videos/screencasts/how-to-convert-a-psd-to-xhtml/" target="_blank"><img height="299" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/some-event-convert-psd-to-xhtml.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">26. <a href="http://www.3point7designs.com/blog/2007/12/22/advanced-css-menu-trick/" target="_blank">高级CSS导航</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.3point7designs.com/blog/2007/12/22/advanced-css-menu-trick/" target="_blank"><img height="73" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/advanced-css-navigation.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">27. <a href="http://erraticwisdom.com/2006/01/29/tutorial-coding-a-layout" target="_blank"><strong><font color="#ff0000">教程</font></strong>：编码布局</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://erraticwisdom.com/2006/01/29/tutorial-coding-a-layout" target="_blank"><img height="372" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/tutorial-coding-a-layout.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">28. <a href="http://www.alistapart.com/d/bodyswitchers/iotbs.html" target="_blank">植入式的整体风格切换 - 了解如何切换风格</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.alistapart.com/d/bodyswitchers/iotbs.html" target="_blank"><img height="394" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/invasion-to-body-switchers.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">29. <a href="http://css.maxdesign.com.au/floatutorial/index.htm" target="_blank">浮动<strong><font color="#ff0000">教程</font></strong> - 循序渐进式的</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://css.maxdesign.com.au/floatutorial/index.htm" target="_blank"><img height="83" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/float-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">30. <a href="http://www.csslicingguide.com/guide/stage_1.html" target="_blank">CSS 切片<strong><font color="#ff0000">教程</font></strong>: 选择正确的布局</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.csslicingguide.com/guide/stage_1.html" target="_blank"><img height="360" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/css-slicing-guide.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">31. <a href="http://net.tutsplus.com/tutorials/javascript-ajax/create-a-simple-intelligent-accordion-effect-using-prototype-and-scriptaculous/" target="_blank">使用Prototype和Scriptaculous创建简单、智能的手风琴效果</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://net.tutsplus.com/tutorials/javascript-ajax/create-a-simple-intelligent-accordion-effect-using-prototype-and-scriptaculous/" target="_blank"><img height="339" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/accordion-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">32. <a href="http://cssglobe.com/post/3714/css-sprites-rounded-corners" target="_blank">CSS Sprites + 圆角</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://cssglobe.com/post/3714/css-sprites-rounded-corners" target="_blank"><img height="369" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/rounded-box.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">33. <a href="http://cssglobe.com/post/1415/3-simple-steps-in-coding-a-rounded-corners-layout" target="_blank">3个简单的步骤编码实现圆角</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://cssglobe.com/post/1415/3-simple-steps-in-coding-a-rounded-corners-layout" target="_blank"><img height="384" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/css-globe-3simple-steps-code-rounded.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">34. <a href="http://www.westciv.com/style_master/academy/hands_on_tutorial/index.html" target="_blank">精通CSS样式<strong><font color="#ff0000">教程</font></strong></a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.westciv.com/style_master/academy/hands_on_tutorial/index.html" target="_blank"><img height="261" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/lorem-ipsum-inc.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">35. <a href="http://css-tricks.com/video-screencasts/12-converting-a-photoshop-mockup-part-two-episode-one/" target="_blank">转换的Photoshop图样: 第二部分，第一章</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://css-tricks.com/video-screencasts/12-converting-a-photoshop-mockup-part-two-episode-one/" target="_blank"><img height="417" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/some-website-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">36. <a href="http://www.sohtanaka.com/web-design/css-vertical-navigation-with-teaser/" target="_blank">CSS垂直导航秀</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.sohtanaka.com/web-design/css-vertical-navigation-with-teaser/" target="_blank"><img height="239" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/vertical-navigation-tutorial-teaser.jpg" width="193" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">37. <a href="http://www.sohtanaka.com/web-design/fixed-footer-backgrounds-with-css/" target="_blank">CSS固定页脚背景图</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.sohtanaka.com/web-design/fixed-footer-backgrounds-with-css/" target="_blank"><img height="268" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/footer-background-that-work-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">38. <a href="http://joshuaink2006.johnoxton.co.uk/blog/196/a-simple-guide-to-3-column-layouts" target="_blank">3栏布局简单介绍</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://joshuaink2006.johnoxton.co.uk/blog/196/a-simple-guide-to-3-column-layouts" target="_blank"><img height="337" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/3-column-layouts.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif ">39. <a href="http://www.sebastiansulinski.co.uk/web_design_tutorials/css/layout_divider.php" target="_blank">CSS实现两列布局</a></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.sebastiansulinski.co.uk/web_design_tutorials/css/layout_divider.php" target="_blank"><img height="359" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/2-column-layout.jpg" width="570" border="0" /></a></font><br />
</font><font face="Verdana, arial, sans-serif "><font size="2">40. </font><a href="http://realdesignnetwork.com/blog/archives/29" target="_blank"><font size="2">CSS布局技巧 &ndash; 实现 100% 高度</font></a><br />
<a href="http://www.realdesignnetwork.com/blog/archives/29" target="_blank"><font size="2"><img height="340" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/css-layout-tehnique-100-percent-height.jpg" width="570" border="0" /></font></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">41. </font><a href="http://www.divitodesign.com/2008/01/vertical-css-menu-with-a-behavior-file/" target="_blank"><font size="2">附带&ldquo;行为&rdquo;文件的CSS垂直菜单</font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://www.divitodesign.com/2008/01/vertical-css-menu-with-a-behavior-file/" target="_blank"><img height="146" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/vertical-css-menu.jpg" width="416" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">42. </font><a href="http://gilleard.co.uk/design/tutorials/sleek/live/" target="_blank"><font size="2">圆滑的设计规范 - HTML</font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://gilleard.co.uk/design/tutorials/sleek/live/" target="_blank"><img height="323" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/sleek-shiny-design-tutorial.jpg" width="570" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">43. </font><a href="http://www.sitepoint.com/article/breaking-out-of-the-box/1/" target="_blank"><font size="2">突破CSS盒布局</font></a></font><br />
<font face="Verdana, arial, sans-serif " size="2"><a href="http://www.sitepoint.com/article/breaking-out-of-the-box/1/" target="_blank"><img height="372" alt="" src="http://www.1stwebdesigner.com/wp-content/uploads/2009/02/breaking-out-from-box.png" width="400" border="0" /></a></font><br />
<font face="Verdana, arial, sans-serif "><font size="2">好了，现在您应该已经对创建标准兼容的XHTML + </font><a href="http://www.yeeyan.com/articles/tag/CSS" target="_blank"><em><font size="2">CSS</font></em></a><font size="2">布局有了非常深刻的基础。应用这些技术，在日后，我应该还会发布一篇关于Photoshop布局的辅导文章。</font></font><br />
<font face="Verdana, arial, sans-serif "><a href="http://www.iwanna.cn/archives/2009/05/03/" target="_blank"><font size="2">我想网</font></a><font size="2">[url=]板凳 翻译[/url]</font></font><br />
<script type="text/javascript">var tagarray = ['icon','图标','gui','界面','Eico','招聘','界面设计','原创','冠军赛','yingfengling','iconfans','小火','设计师','设计','n0dk4nE','国际','皮肤','leon-gao','教程','Kingyo','写实','影风灵','iphone','design','图标设计','web','手机','论坛','搜狗','jacal-team','flash','meloo','图标教程','juele','大赛','概念设计','css','bingxueling','游戏','播放器','新手','软件','ava','比赛','作品','Icons','输入法','练习','鼠标指针','临摹','小图标','分享','logo','主题','像素','skin','千千静听','网页','ICO','展览','艺术','will','百度HI','Google','siva','帝夏','PAN','新人报道','桌面','theme','页面','东东','idea','zcool','职位','投票','项目','IdeaPad','GUIC大赛','hyperdesk','方案','金属','精英','html','kidaubis','Chrome','love','wallpaper','可爱','访谈','精英times','GUI08','浏览器','指针','手绘','UI设计师','前端设计师','网页设计师','招聘GUI设计师','深圳科技园'];var tagencarray = ['icon','%CD%BC%B1%EA','gui','%BD%E7%C3%E6','Eico','%D5%D0%C6%B8','%BD%E7%C3%E6%C9%E8%BC%C6','%D4%AD%B4%B4','%B9%DA%BE%FC%C8%FC','yingfengling','iconfans','%D0%A1%BB%F0','%C9%E8%BC%C6%CA%A6','%C9%E8%BC%C6','n0dk4nE','%B9%FA%BC%CA','%C6%A4%B7%F4','leon-gao','%BD%CC%B3%CC','Kingyo','%D0%B4%CA%B5','%D3%B0%B7%E7%C1%E9','iphone','design','%CD%BC%B1%EA%C9%E8%BC%C6','web','%CA%D6%BB%FA','%C2%DB%CC%B3','%CB%D1%B9%B7','jacal-team','flash','meloo','%CD%BC%B1%EA%BD%CC%B3%CC','juele','%B4%F3%C8%FC','%B8%C5%C4%EE%C9%E8%BC%C6','css','bingxueling','%D3%CE%CF%B7','%B2%A5%B7%C5%C6%F7','%D0%C2%CA%D6','%C8%ED%BC%FE','ava','%B1%C8%C8%FC','%D7%F7%C6%B7','Icons','%CA%E4%C8%EB%B7%A8','%C1%B7%CF%B0','%CA%F3%B1%EA%D6%B8%D5%EB','%C1%D9%C4%A1','%D0%A1%CD%BC%B1%EA','%B7%D6%CF%ED','logo','%D6%F7%CC%E2','%CF%F1%CB%D8','skin','%C7%A7%C7%A7%BE%B2%CC%FD','%CD%F8%D2%B3','ICO','%D5%B9%C0%C0','%D2%D5%CA%F5','will','%B0%D9%B6%C8HI','Google','siva','%B5%DB%CF%C4','PAN','%D0%C2%C8%CB%B1%A8%B5%C0','%D7%C0%C3%E6','theme','%D2%B3%C3%E6','%B6%AB%B6%AB','idea','zcool','%D6%B0%CE%BB','%CD%B6%C6%B1','%CF%EE%C4%BF','IdeaPad','GUIC%B4%F3%C8%FC','hyperdesk','%B7%BD%B0%B8','%BD%F0%CA%F4','%BE%AB%D3%A2','html','kidaubis','Chrome','love','wallpaper','%BF%C9%B0%AE','%B7%C3%CC%B8','%BE%AB%D3%A2times','GUI08','%E4%AF%C0%C0%C6%F7','%D6%B8%D5%EB','%CA%D6%BB%E6','UI%C9%E8%BC%C6%CA%A6','%C7%B0%B6%CB%C9%E8%BC%C6%CA%A6','%CD%F8%D2%B3%C9%E8%BC%C6%CA%A6','%D5%D0%C6%B8GUI%C9%E8%BC%C6%CA%A6','%C9%EE%DB%DA%BF%C6%BC%BC%D4%B0'];parsetag();</script>
</p>
<p>转自:http://www.iconfans.com/viewthread.php?tid=4465&amp;highlight=%BD%CC%B3%CC</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=673</link>
      <title><![CDATA[面向对象的数据库db4o]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-5-21 17:00:55</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=673</guid>
      <comments>
              /Blog/Blog.aspx?Id=673#commentbox
            </comments>
      <description><![CDATA[<p>偶然间在cnblogs的评论里看到的,星星说做一些小Demo和小型应用比较方便.就先看看.呵~</p>
<p>官方网站 <a href="http://www.db4o.com">http://www.db4o.com</a></p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=663</link>
      <title><![CDATA[正则表达式--C#分组构造]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-4-24 13:16:57</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=663</guid>
      <comments>
              /Blog/Blog.aspx?Id=663#commentbox
            </comments>
      <description><![CDATA[<p>分组构造使您可以捕获子表达式组并提高具有非捕获预测先行和回顾后发修饰符的正则表达式的效率。下表描述了正则表达式分组构造。</p>
<div class="seeAlsoNoToggleSection">
<div class="labelheading">&nbsp;</div>
<div class="tableSection">
<table style="width: 667px; height: 591px" cellspacing="2" cellpadding="5" width="667">
    <tbody>
        <tr>
            <th>分组构造</th>
            <th>说明</th>
        </tr>
        <tr>
            <td>
            <p><strong>(</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>捕获匹配的子字符串（或非捕获组；有关更多信息，请参见正则表达式选项中的 <strong>ExplicitCapture</strong> 选项）。使用 () 的捕获根据左括号的顺序从 1 开始自动编号。捕获元素编号为零的第一个捕获是由整个正则表达式模式匹配的文本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?</strong>&lt;<em>name&gt; </em><strong>)</strong></p>
            </td>
            <td>
            <p>将匹配的子字符串捕获到一个组名称或编号名称中。用于 <em>name</em> 的字符串不能包含任何标点符号，并且不能以数字开头。可以使用单引号替代尖括号，例如 <code><font face="新宋体">(?'name')</font></code>。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?</strong>&lt;<em>name1-name2</em>&gt; <strong>)</strong></p>
            </td>
            <td>
            <p>平衡组定义。删除先前定义的 <em>name2</em> 组的定义并在 <em>name1</em> 组中存储先前定义的 <em>name2</em> 组和当前组之间的间隔。如果未定义 <em>name2</em> 组，则匹配将回溯。由于删除 <em>name2</em> 的最后一个定义会显示 <em>name2</em> 的先前定义，因此该构造允许将 <em>name2</em> 组的捕获堆栈用作计数器以跟踪嵌套构造（如括号）。在此构造中，<em>name1</em> 是可选的。可以使用单引号替代尖括号，例如 <code><font face="新宋体">(?'name1-name2')</font></code>。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?:</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>非捕获组。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?</strong> <em>imnsx-imnsx</em> <strong>:</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>应用或禁用子表达式中指定的选项。例如，<code><font face="新宋体">(?i-s: )</font></code> 将打开不区分大小写并禁用单行模式。有关更多信息，请参见正则表达式选项。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?=</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>零宽度正预测先行断言。仅当子表达式在此位置的右侧匹配时才继续匹配。例如，<code><font face="新宋体">\w+(?=\d)</font></code> 与后跟数字的单词匹配，而不与该数字匹配。此构造不会回溯。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?!</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>零宽度负预测先行断言。仅当子表达式不在此位置的右侧匹配时才继续匹配。例如，<code><font face="新宋体">\b(?!un)\w+\b</font></code> 与不以 un 开头的单词匹配。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?&lt;=</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>零宽度正回顾后发断言。仅当子表达式在此位置的左侧匹配时才继续匹配。例如，<code><font face="新宋体">(?&lt;=19)99</font></code> 与跟在 19 后面的 99 的实例匹配。此构造不会回溯。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?&lt;!</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>零宽度负回顾后发断言。仅当子表达式不在此位置的左侧匹配时才继续匹配。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>(?&gt;</strong>&nbsp;&nbsp;&nbsp;<strong>)</strong></p>
            </td>
            <td>
            <p>非回溯子表达式（也称为&ldquo;贪婪&rdquo;子表达式）。该子表达式仅完全匹配一次，然后就不会逐段参与回溯了。（也就是说，该子表达式仅与可由该子表达式单独匹配的字符串匹配。）</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
</div><p>命名捕获根据左括号的从左到右的顺序按顺序编号（与非命名捕获类似），但在对所有非命名捕获进行计数之后才开始对命名捕获进行编号。例如，模式 <code><font face="新宋体">((?&lt;One&gt;abc)/d+)?(?&lt;Two&gt;xyz)(.*) </font></code>按编号和名称产生下列捕获组。（编号为 0 的第一个捕获总是指整个模式）。</p>
<div class="labelheading">&nbsp;</div>
<div class="tableSection">
<table style="width: 422px; height: 238px" cellspacing="2" cellpadding="5" width="422">
    <tbody>
        <tr>
            <th>编号</th>
            <th>名称</th>
            <th>模式</th>
        </tr>
        <tr>
            <td>
            <p>0</p>
            </td>
            <td>
            <p>0（默认名称）</p>
            </td>
            <td>
            <p><code><font face="新宋体">((?&lt;One&gt;abc)/d+)?(?&lt;Two&gt;xyz)(.*)</font></code></p>
            </td>
        </tr>
        <tr>
            <td>
            <p>1</p>
            </td>
            <td>
            <p>1（默认名称）</p>
            </td>
            <td>
            <p><code><font face="新宋体">((?&lt;One&gt;abc)/d+)</font></code></p>
            </td>
        </tr>
        <tr>
            <td>
            <p>2</p>
            </td>
            <td>
            <p>2（默认名称）</p>
            </td>
            <td>
            <p><code><font face="新宋体">(.*)</font></code></p>
            </td>
        </tr>
        <tr>
            <td>
            <p>3</p>
            </td>
            <td>
            <p>1</p>
            </td>
            <td>
            <p><code><font face="新宋体">(?&lt;One&gt;abc)</font></code></p>
            </td>
        </tr>
        <tr>
            <td>
            <p>4</p>
            </td>
            <td>
            <p>2</p>
            </td>
            <td>
            <p><code><font face="新宋体">(?&lt;Two&gt;xyz)</font></code></p>
            </td>
        </tr>
    </tbody>
</table>
</div>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=662</link>
      <title><![CDATA[C#正则表达式类Match和Group类的理解]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-4-23 14:45:17</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=662</guid>
      <comments>
              /Blog/Blog.aspx?Id=662#commentbox
            </comments>
      <description><![CDATA[<p>正则表达式可以看做一种有特定功能的小型编程语言，在一段文本中定位子字符串。利用正则表达式可以快速地分析大量的文本以找到特定的字符模式；提取、编辑、替换或删除文本子字符串；或将提取的字符串添加到集合。正则表达式的基本语法可参见：深入浅出之正则表达式（一），深入浅出之正则表达式（二）。</p>
<p>C#命名空间System.Text.RegularExpressions提供了支持正则表达式操作的类。这些类主要包括Regex，MatchCollection，Match，GroupCollection，Group，CaputerCollection和Caputer，下图表示了这些类之间的关系。</p><p><img style="width: 658px; height: 254px" height="232" src="http://img.ddvip.com/2008_10_24/1224837079_ddvip_6951.jpg" width="602" alt="" /><br />
<br />
正则表达式很重要的一个应用就是在文本中提取字符串，这一功能的实现主要是靠Match类和Group类，因此理解匹配和组的概念很重要。要实现在一段文本中查找URL功能，这个例子比较简单，只要调用Regex.Matches()方法就可以找到URL的集合。示例代码如下：</p>
<div class="codeText">
<div class="codeHead">文本中提取URL的C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;Main(</span><span class="keyword">string</span><span>[]args) &nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　　　{　　　　　 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　stringtext=</span><span class="string">&quot;I'vefoundthisamazingURLathttp://www.sohu.com,andthenfindftp://ftp.sohu.comisbetter.&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　stringpattern=@</span><span class="string">&quot;b(S+)://(S+)b&quot;</span><span>;　//匹配URL的模式 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　MatchCollectionmc=Regex.Matches(text,pattern);</span><span class="comment">//满足pattern的匹配集合 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　Console.WriteLine(</span><span class="string">&quot;文本中包含的URL地址有：&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　</span><span class="keyword">foreach</span><span>(Matchmatchinmc) &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　　　Console.WriteLine(match.ToString()); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　Console.Read(); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　</span><span class="comment">/* </span>&nbsp;</li>
    <li class=""><span><span class="comment">　　　　*运行后输出如下： </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">　　　　*文本中包含的URL地址有： </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">　　　　*http://www.sohu.com </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">　　　　*ftp://ftp.sohu.com </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">　　　　*/</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p><br />
<br />
<br />
现在，要求变了，不仅要找出URL，还要找出每个URL的协议和域名地址，这时就要用到正则表达式的分组功能了。分组是要匹配的模式pattern用小括号括起来，分成不同的组，如可以把上面例子中的模式改为：string pattern = @&quot;b(?&lt;protocol&gt;S+)://(?&lt;address&gt;S+)b&quot;;这样就用括号分成了两个组（实际上是三个组，因为匹配本身可以看做一个大组），&quot;?&lt;protocol&gt;&quot;和&quot;?&lt;address&gt;&quot;定义了每个组的别名protocol和address，这不是必须的，只是方便我们获取需要的组。示例代码如下：</p>
<p>　　</p>
<div class="codeText">
<div class="codeHead">提取URL协议和地址的示例C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;Main(</span><span class="keyword">string</span><span>[]args) &nbsp;&nbsp;</span></span></li>
    <li class=""><span>　　{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　stringtext=</span><span class="string">&quot;I'vefoundthisamazingURLathttp://www.sohu.com,andthenfindftp://ftp.sohu.comisbetter.&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　stringpattern=@</span><span class="string">&quot;b(?&lt;protocol&gt;S+)://(?&lt;address&gt;S+)b&quot;</span><span>;//匹配URL的模式,并分组 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　MatchCollectionmc=Regex.Matches(text,pattern);</span><span class="comment">//满足pattern的匹配集合 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　Console.WriteLine(</span><span class="string">&quot;文本中包含的URL地址有：&quot;</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　</span><span class="keyword">foreach</span><span>(Matchmatchinmc) &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　GroupCollectiongc=match.Groups; &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　　　stringoutputText=</span><span class="string">&quot;URL:&quot;</span><span>+match.Value+</span><span class="string">&quot;；Protocol:&quot;</span><span>+gc[</span><span class="string">&quot;protocol&quot;</span><span>].Value+</span><span class="string">&quot;；Address:&quot;</span><span>+gc[</span><span class="string">&quot;address&quot;</span><span>].Value; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　　　Console.WriteLine(outputText); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　　　Console.Read(); &nbsp;&nbsp;</span></li>
    <li class=""><span>　　} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>　　</span><span class="comment">/** </span>&nbsp;</li>
    <li class=""><span><span class="comment">　　*运行后输出如下： </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">　　*文本中包含的URL地址有： </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">　　*URL:http://www.sohu.com；Protocol:http；Address:www.sohu.com </span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">　　*URL:ftp://ftp.sohu.com；Protocol:ftp；Address:ftp.sohu.com </span>&nbsp;</span></li>
    <li class=""><span><span class="comment">　　*/</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=658</link>
      <title><![CDATA[FireBird默认密码，及其可视化管理软件(图形管理器)]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-4-20 16:05:52</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=658</guid>
      <comments>
              /Blog/Blog.aspx?Id=658#commentbox
            </comments>
      <description><![CDATA[<h2>首先到官方网站下载<span lang="EN-US">FireBird</span>数据库安装程序，然后在确定本地电脑中没有<span lang="EN-US">IB</span>程序运行的情况下，一直<span lang="EN-US">next</span>就好了。个人觉得这款数据库安装起来还真是出奇的简单。<span lang="EN-US"><o:p></o:p></span></h2>
<div class="postbody">
<p style="text-justify: inter-ideograph; text-align: justify">安装后运行该数据库，会发现它的交互界面是类似于<span lang="EN-US">DOS</span>的界面，需要纯命令来操作。一般<span lang="EN-US">firebird</span>的默认用户名为<span lang="EN-US" style="color: red">&ldquo;SYSDBA&rdquo;</span><span style="color: red">，密码为<span lang="EN-US">&ldquo;masterkey&rdquo;</span></span>。而且在创建或者第一次连接数据库的同时，必须使用该用户名以及密码来实现访问，否则会报错。具体命令如下：<span lang="EN-US"><o:p></o:p></span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span lang="EN-US" style="color: red">SQL&gt;create database '[</span><span style="color: red">新建数据库的路径以及名称，后缀名称为<span lang="EN-US">.FDB]'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="EN-US"><o:p></o:p></span></p>
<p style="text-justify: inter-ideograph; text-align: justify"><span lang="EN-US" style="color: red">CON&gt;user 'sysdba' password 'masterkey';</span><span lang="EN-US"><o:p></o:p></span></p>
<p style="text-justify: inter-ideograph; text-align: justify">如果是访问已经存在的数据库，则将<span lang="EN-US">&ldquo;SQL&gt;&rdquo;</span>后的语句换成<span lang="EN-US">&ldquo;connect '[</span>要访问数据库的路径以及名称，后缀名称为<span lang="EN-US">.FDB]' &rdquo;</span>即可。<span lang="EN-US"><o:p></o:p></span></p>
<p style="text-justify: inter-ideograph; text-align: justify">需要说明的是，一条命令一定是以<span lang="EN-US">&ldquo;;&rdquo;</span>结束的。否则会在下一行显示<span lang="EN-US">&ldquo;CON&gt;&rdquo;,</span>即继续之前的命令。<span lang="EN-US"><o:p></o:p></span></p>
<p style="text-justify: inter-ideograph; text-align: justify">上述语句执行成功后，就是对数据库的操作了，命令基本与<span lang="EN-US">SQL</span>相同，例如创建表格为<span lang="EN-US">&ldquo;create table [</span>表名<span lang="EN-US">] ([</span>表内的字段名称及属性<span lang="EN-US">])&rdquo;</span>，删除表为<span lang="EN-US">&ldquo;drop [</span>表名<span lang="EN-US">]&rdquo;</span>，插入命令为<span lang="EN-US">&ldquo;insert&rdquo;</span>等等。<span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 12pt; font-family: 宋体">这样的操作未免过于的繁琐，而且交互性也不是很好，如果对于数据库操作语句稍不熟悉，很容易出错。所以，这时候就需要可视化管理软件<span lang="EN-US">(</span>图形管理器<span lang="EN-US">)</span>的帮助了。在网上搜索到的主要用于<span lang="EN-US">firebird</span>数据库的管理软件有两款（只是我能搜到的），一款叫作<span lang="EN-US">&ldquo;<span style="color: red">IBEasy+&rdquo;</span></span><span style="color: red">，另一款叫作<span lang="EN-US">&ldquo;IBExpert&rdquo;</span>。个人觉得<span lang="EN-US">&ldquo;IBExpert&rdquo;</span></span>比较好用，无论是从界面的交互性还是功能性，也可能我对<span lang="EN-US">IBEasy</span>的了解还不到位，总之，我觉得在短时间内，<span lang="EN-US">IBExpert</span>是比较容易上手的。</span></p>
</div>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=656</link>
      <title><![CDATA[细数国内几个比较牛的网站UED博客]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-4-17 9:41:50</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=656</guid>
      <comments>
              /Blog/Blog.aspx?Id=656#commentbox
            </comments>
      <description><![CDATA[<p>发现国内一些有创新精神的网站的UED部门很活跃，也很有共享精神。他们有的在网站建立了自己的团队博客，在里面分享他们的设计经验，很值得一看。其实，团队开博客不仅仅有利于促进团队之间的良好氛围，更有利于宣传网站的文化形象。下面，就来看看这些有意思的博客吧：</p>
<p><strong>第一名：TaoBao UED</strong><br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/2122460412931988.jpg" /><br />
这是一个很活跃的团队，博客的内容质量十分高，感觉团队里的每一个成员在UED方面各有特长。有精通js交互设计的（翻译了一本书），有精通网页版面设计的（我在里面学到了删格化的知识），还有。。。他们的工作精神也很值得学习，他们在人员不足的情况下，自发设计了一个效果非常牛的招聘网站，真有点吸引人。<br />
网址：<a href="http://ued.taobao.com/blog/">http://ued.taobao.com/blog/</a></p><p>第二名：19楼UED<br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/2122521921639788.jpg" /><br />
这个博客虽然交互方面的内容不多，但是UI、VI方面的内容却十分全面，并且设计得都非常漂亮。特别是首页里面，有几个文件库，里面包含了整套VI设计的材料，很值得参考。<br />
网址：<a href="http://ued.dukuai.com/blog/">http://ued.dukuai.com/blog/</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://ued.dukuai.com/">http://ued.dukuai.com</a><br />
<br />
第三名：金蝶友商网UED<br />
<img style="width: 520px" alt="" src="http://img.cnbeta.com/newsimg/090416/2122582457783209.jpg" /><br />
虽然创新性的内容不多，但却也比较丰富。里面的一些有关UED方面的知识浅显易懂，很值得初学者学习。<br />
网址：<a href="http://www.kdued.com/">http://www.kdued.com</a><br />
<br />
四、支付宝UED<br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/21225931023795857.jpg" /><br />
关于js及布局方面的内容较多，和taobaoUED有点类似。<br />
网址：<a href="http://ued.alipay.com/">http://ued.alipay.com</a><br />
<br />
以上三个是比较好的，此外，还有一些也值得一看：<br />
其他UED的博客：<br />
1、网易UED<br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/2123004282160524.jpg" /><br />
里面关于页面布局的内容值得一看，原创性的内容少一些。<br />
网址：<a href="http://www.ued163.com/">http://www.ued163.com/</a><br />
<br />
2、阿里巴巴UED<br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/21230651096498983.jpg" /><br />
内容还不丰富，可能是团队还不完善的原因。期待象taobaoUED团队一样有高质量的内容出现。<br />
网址：<a href="http://www.aliued.com/">http://www.aliued.com/</a><br />
<br />
3、阿里妈妈UED<br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/21230761310640151.jpg" /><br />
主要是宣传阿里妈妈的一些UED设计方面的变化，也有一些技术性的文章。<br />
网址：<a href="http://ued.alimama.com/">http://ued.alimama.com/</a><br />
<br />
4、口碑网UED<br />
<img alt="" src="http://img.cnbeta.com/newsimg/090416/21231271798451052.jpg" /><br />
UED基础知识方面及技巧方面的内容很多，质量很高，非常值得初学者学习。<br />
网址：<a href="http://ued.koubei.com/">http://ued.koubei.com</a><br />
<br />
另外再介绍几个我常去看的UED方面的博客：<br />
1、白鸦：<a href="http://uicom.net/blog/">http://uicom.net/blog/</a><br />
2、一叶千鸟：<a href="http://www.rexsong.com/">http://www.rexsong.com/</a><br />
3、臭鱼：<a href="http://chouyu.com.cn/">http://chouyu.com.cn/</a><br />
<br />
<strong>脱盲教育：什么是UED？</strong><br />
UED是英文User Experience Design 的缩写。翻译成中文就是：用户体验设计。对于传统的网站而言，很少有专门设置UED部门的，一般都是UI部门负责这些活。其实，UE和UI在一定程度上是有所不同的，UI重视的是为用户提供良好的感观，而UE重视的是对用户行为的引导。两者应该是互相包含，互相影响。重视UE的网站，是对用户更贴心的照顾。所以，在这里，我要为阿里打满分，阿里旗下的所有网站：阿里巴巴、淘宝、支付宝、阿里妈妈、口碑网等网站，都有独立的UE部门，很值得其他网站学习。</p>]]></description>
    </item>
  </channel>
</rss>