﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-leign</title><link>http://www.cppblog.com/leign/</link><description>Contact:
Email: leign.du@gmail.com
MSN:  dujiali1987@msn.cn</description><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 10:04:12 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 10:04:12 GMT</pubDate><ttl>60</ttl><item><title>JAVA线程中函数比较</title><link>http://www.cppblog.com/leign/archive/2009/11/09/100448.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Mon, 09 Nov 2009 03:46:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/11/09/100448.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/100448.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/11/09/100448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/100448.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/100448.html</trackback:ping><description><![CDATA[<span style="COLOR: green">1、run()和start()</span> <br>这两个方法应该都比较熟悉，把需要并行处理的代码放在run()方法中;start()产生运行线程所必须的资源,调度线程执行,并且调用线程的run ()方法。 <br><br><span style="COLOR: green">2、sleep()、wait()、yield()、join()、stop()</span> <br>sleep()使当前线程(即调用该方法的线程)暂停执行一段时间，让其他线程有机会继续执行，但它并不释放对象锁。 <br>join()方法使调用该方法的线程在此之前执行完毕，也就是等待调用该方法的线程执行完毕后再往下继续执行。 <br>yield()与sleep()类似，只是不能由用户指定暂停多长时间，并且yield()方法只能让同优先级的线程有执行的机会。 <br>wait()方法使当前线程暂停执行并释放对象锁标志，让其他线程可以进入Synchronized数据块，当前线程被放入对象等待池中。 <br>stop()方法,线程进入死亡态,终止所有未结束的方法,不安全。 <br><br><span style="COLOR: green">3、notify()与notifyall()</span> <br>notify()从对象的等待池中移走一个任意的线程并放到锁标志等待池中，只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程，则notify()不起作用。 <br>notifyAll()则从对象等待池中移走所有等待那个对象的线程并放到锁标志等待池中。 <br><br><span style="COLOR: green">关键字Synchronized</span> <br>每个对象都有一个锁标志，当一个线程访问该对象时，被Synchronized修饰的数据将被&#8220;上锁&#8221;，阻止其他线程访问。当前线程访问完这部分数据后释放锁标志，其他线程就可以访问了。 <br><br><span style="COLOR: green">幽灵线程</span> <br>任何一个Java线程都能成为幽灵线程。它是作为运行于同一个进程内的对象和线程的服务提供者。幽灵线程是应用中典型的独立线程。它为同一应用中的其他对象和线程提供服务。幽灵线程的run()方法一般都是无限循环,等待服务请求。 
<img src ="http://www.cppblog.com/leign/aggbug/100448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-11-09 11:46 <a href="http://www.cppblog.com/leign/archive/2009/11/09/100448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>内连接与外连接的区别</title><link>http://www.cppblog.com/leign/archive/2009/11/05/100226.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Thu, 05 Nov 2009 08:37:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/11/05/100226.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/100226.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/11/05/100226.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/100226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/100226.html</trackback:ping><description><![CDATA[两个表的连接，是通过将一个表中的一列或者多列同另一个表中的列链接而建立起来的。用来连接两张表的表达式组成了连接条件。当连接成功后，第二张表中的数据就同第一张表连接起来了，并形成了复合结果集--包括两张表中数据行的计划。简单地说，就是两张表有了子集，虽然只是暂时的&nbsp;&nbsp;&nbsp;<br><br>有两者基本类型的的连接，inner和outer连接。两种类型的主要区别在于，即使是在连接条件不满足的情况下，外部连接也会在结果集内返回行，而内部连接不会在结果集类返回行&nbsp;&nbsp;&nbsp;<br>当外部连接不满足连接条件时，通常返回一个表中的列，但是第二个表中没有返回值--为null<br><br>（一）内连接 <br>　　内连接查询操作列出与连接条件匹配的数据行，它使用比较运算符比较被连接列的 <br>列值。内连接分三种： <br>　　1、等值连接：在连接条件中使用等于号(=)运算符比较被连接列的列值，其查询结 <br>果中列出被连接表中的所有列，包括其中的重复列。 <br>　　<br>　　2、不等连接： 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的 <br>列的列值。这些运算符包括&gt;、&gt;=、&lt;=、&lt;、!&gt;、!&lt;和&lt;&gt;。 <br><br>　　3、自然连接：在连接条件中使用等于(=)运算符比较被连接列的列值，但它使用选 <br>择列表指出查询结果集合中所包括的列，并删除连接表中的重复列。<br><br>(二) 外连接　　 <br>　　外连接，返回到查询结果集合中的不仅包含符合连接条件的行，而且还包括左表(左<br>外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。<br>　　left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录；<br>　　right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录；<br>例如1：SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b <br>　　 ON a.username=b.username <br>例如2：SELECT a.*,b.* <br>　　 FROM city as a FULL OUTER JOIN user as b <br>　　 ON a.username=b.username <br>(三) 交叉连接 　　 <br>　　交叉连接不带WHERE 子句，它返回被连接的两个表所有数据行的笛卡尔积，返回到 <br>结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查 <br>询条件的数据行数。例，titles表中有6类图书，而publishers表中有8家出版社，则下 <br>列交叉连接检索到的记录数将等于6*8=48行。 　　 <br>　　例如：SELECT type,pub_name <br>　　 FROM titles CROSS JOIN publishers <br>　　 ORDER BY type<br>
<img src ="http://www.cppblog.com/leign/aggbug/100226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-11-05 16:37 <a href="http://www.cppblog.com/leign/archive/2009/11/05/100226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA获得指定URL网页内容</title><link>http://www.cppblog.com/leign/archive/2009/11/04/100157.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Wed, 04 Nov 2009 13:02:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/11/04/100157.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/100157.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/11/04/100157.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/100157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/100157.html</trackback:ping><description><![CDATA[<div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><span style="COLOR: #008080">&nbsp;1</span><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.io.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.net.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/None.gif"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img id=Codehighlighter1_65_774_Open_Image onclick="this.style.display='none'; Codehighlighter1_65_774_Open_Text.style.display='none'; Codehighlighter1_65_774_Closed_Image.style.display='inline'; Codehighlighter1_65_774_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_65_774_Closed_Image onclick="this.style.display='none'; Codehighlighter1_65_774_Closed_Text.style.display='none'; Codehighlighter1_65_774_Open_Image.style.display='inline'; Codehighlighter1_65_774_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;GetUrlContent&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_65_774_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_65_774_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_69_100_Open_Image onclick="this.style.display='none'; Codehighlighter1_69_100_Open_Text.style.display='none'; Codehighlighter1_69_100_Closed_Image.style.display='inline'; Codehighlighter1_69_100_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_69_100_Closed_Image onclick="this.style.display='none'; Codehighlighter1_69_100_Closed_Text.style.display='none'; Codehighlighter1_69_100_Open_Image.style.display='inline'; Codehighlighter1_69_100_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_69_100_Closed_Text>/**&nbsp;*/</span><span id=Codehighlighter1_69_100_Open_Text><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;描述：<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;args<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_142_771_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_771_Open_Text.style.display='none'; Codehighlighter1_142_771_Closed_Image.style.display='inline'; Codehighlighter1_142_771_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_142_771_Closed_Image onclick="this.style.display='none'; Codehighlighter1_142_771_Closed_Text.style.display='none'; Codehighlighter1_142_771_Open_Image.style.display='inline'; Codehighlighter1_142_771_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_142_771_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_142_771_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;in&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OutputStream&nbsp;out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;urlStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.baidu.com</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileStr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">d:\\index.html</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img id=Codehighlighter1_329_620_Open_Image onclick="this.style.display='none'; Codehighlighter1_329_620_Open_Text.style.display='none'; Codehighlighter1_329_620_Closed_Image.style.display='inline'; Codehighlighter1_329_620_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_329_620_Closed_Image onclick="this.style.display='none'; Codehighlighter1_329_620_Closed_Text.style.display='none'; Codehighlighter1_329_620_Open_Image.style.display='inline'; Codehighlighter1_329_620_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000">&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_329_620_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_329_620_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL&nbsp;url&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;URL(urlStr);<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;url.openStream();<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;FileOutputStream(fileStr);<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&nbsp;=&nbsp;System.out;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[]&nbsp;buffer&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">byte</span><span style="COLOR: #000000">[</span><span style="COLOR: #000000">4096</span><span style="COLOR: #000000">];<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;read;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">((read&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;in.read(buffer))&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_550_616_Open_Image onclick="this.style.display='none'; Codehighlighter1_550_616_Open_Text.style.display='none'; Codehighlighter1_550_616_Closed_Image.style.display='inline'; Codehighlighter1_550_616_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_550_616_Closed_Image onclick="this.style.display='none'; Codehighlighter1_550_616_Closed_Text.style.display='none'; Codehighlighter1_550_616_Open_Image.style.display='inline'; Codehighlighter1_550_616_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_550_616_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_550_616_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.write(buffer,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,read);<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("\n");</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img id=Codehighlighter1_642_675_Open_Image onclick="this.style.display='none'; Codehighlighter1_642_675_Open_Text.style.display='none'; Codehighlighter1_642_675_Closed_Image.style.display='inline'; Codehighlighter1_642_675_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_642_675_Closed_Image onclick="this.style.display='none'; Codehighlighter1_642_675_Closed_Text.style.display='none'; Codehighlighter1_642_675_Open_Image.style.display='inline'; Codehighlighter1_642_675_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(Exception&nbsp;e)&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_642_675_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_642_675_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;TODO:&nbsp;handle&nbsp;exception</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #008000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">finally</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img id=Codehighlighter1_689_768_Open_Image onclick="this.style.display='none'; Codehighlighter1_689_768_Open_Text.style.display='none'; Codehighlighter1_689_768_Closed_Image.style.display='inline'; Codehighlighter1_689_768_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_689_768_Closed_Image onclick="this.style.display='none'; Codehighlighter1_689_768_Closed_Text.style.display='none'; Codehighlighter1_689_768_Open_Image.style.display='inline'; Codehighlighter1_689_768_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_689_768_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_689_768_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img id=Codehighlighter1_701_743_Open_Image onclick="this.style.display='none'; Codehighlighter1_701_743_Open_Text.style.display='none'; Codehighlighter1_701_743_Closed_Image.style.display='inline'; Codehighlighter1_701_743_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_701_743_Closed_Image onclick="this.style.display='none'; Codehighlighter1_701_743_Closed_Text.style.display='none'; Codehighlighter1_701_743_Open_Image.style.display='inline'; Codehighlighter1_701_743_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_701_743_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_701_743_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.close();<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.close();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img id=Codehighlighter1_763_764_Open_Image onclick="this.style.display='none'; Codehighlighter1_763_764_Open_Text.style.display='none'; Codehighlighter1_763_764_Closed_Image.style.display='inline'; Codehighlighter1_763_764_Closed_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_763_764_Closed_Image onclick="this.style.display='none'; Codehighlighter1_763_764_Closed_Text.style.display='none'; Codehighlighter1_763_764_Open_Image.style.display='inline'; Codehighlighter1_763_764_Open_Text.style.display='inline';" align=top src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(Exception&nbsp;e1)</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_763_764_Closed_Text><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_763_764_Open_Text><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img align=top src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span></div>
<img src ="http://www.cppblog.com/leign/aggbug/100157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-11-04 21:02 <a href="http://www.cppblog.com/leign/archive/2009/11/04/100157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源协议比较(BSD, Apache, GPL, LGPL, MIT) --转自别人的整理</title><link>http://www.cppblog.com/leign/archive/2009/10/22/99227.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Thu, 22 Oct 2009 13:10:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/22/99227.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/99227.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/22/99227.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/99227.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/99227.html</trackback:ping><description><![CDATA[<span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">现今存在的开源协议很多，而经过</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>Open Source Initiative</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">组织通过批准的开源协议目前有</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>58</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">种（</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>http://www.opensource.org/licenses/alphabetical</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">）。我们在常见的开源协议如</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>BSD, GPL, LGPL, MIT</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">等都是</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>OSI</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">批准的协议。如果要开源自己的代码，最好也是选择这些被批准的开源协议。<br><br>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>1、BSD</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">开源协议（</span><span lang=EN-US><font face=Calibri>original BSD license</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">、</span><span lang=EN-US><font face=Calibri>FreeBSD license</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">、</span><span lang=EN-US><font face=Calibri>Original BSD license</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">）</span></strong><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">开源协议是一个给于使用者很大自由的协议。基本上使用者可以&#8221;为所欲为&#8221;</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">可以自由的使用，修改源代码，也可以将修改后的代码作为开源或者专有软件再发布。<br></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">但&#8221;为所欲为&#8221;的前提当你发布使用了</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的代码，或则以</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议代码为基础做二次开发自己的产品时，需要满足三个条件：<br></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">&nbsp; A如果再发布的产品中包含源代码，则在源代码中必须带有原来代码中的</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议。<br></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">&nbsp; B如果再发布的只是二进制类库</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">软件，则需要在类库</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">软件的文档和版权声明中包含原来代码中的</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议。</span><font face=Calibri> <br></font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">&nbsp; C不可以用开源代码的作者</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">机构名字和原来产品的名字做市场推广。</span><font face=Calibri> <br></font><span lang=EN-US><font face=Calibri><br>BSD </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">代码鼓励代码共享，但需要尊重代码作者的著作权。</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">由于允许使用者修改和重新发布代码，也允许使用或在</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">代码上开发商业软件发布和销售，因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议，因为可以完全控制这些第三方的代码，在必要的时候可以修改或者二次开发。</span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>Apache License 2.0</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">（</span><span lang=EN-US><font face=Calibri>Apache License, Version 2.0</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">、</span><span lang=EN-US><font face=Calibri>Apache License, Version 1.1</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">、</span><span lang=EN-US><font face=Calibri>Apache License,</font></span></strong><span lang=EN-US><font face=Calibri> <strong style="mso-bidi-font-weight: normal">Version 1.0</strong></font></span><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">）<br></span></strong><span lang=EN-US><font face=Calibri>Apache License</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">是著名的非盈利开源组织</span><span lang=EN-US><font face=Calibri>Apache</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">采用的协议。该协议和</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">类似，同样鼓励代码共享和尊重原作者的著作权，同样允许代码修改，再发布（作为开源或商业软件）。需要满足的条件也和</span><span lang=EN-US><font face=Calibri>BSD</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">类似：<br></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">需要给代码的用户一份</span><span lang=EN-US><font face=Calibri>Apache License ，</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">如果你修改了代码，需要再被修改的文件中说明。</span><font face=Calibri> </font><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">在延伸的代码中（修改和有源代码衍生的代码中）需要带有原来代码中的协议，商标，专利声明和其他原来作者规定需要包含的说明。</span><font face=Calibri> </font></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">如果再发布的产品中包含一个</span><span lang=EN-US><font face=Calibri>Notice</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">文件，则在</span><span lang=EN-US><font face=Calibri>Notice</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">文件中需要带有</span><span lang=EN-US><font face=Calibri>Apache License</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">。你可以在</span><span lang=EN-US><font face=Calibri>Notice</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">中增加自己的许可，但不可以表现为对</span><span lang=EN-US><font face=Calibri>Apache License</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">构成更改。<br></span><span lang=EN-US><font face=Calibri>Apache License</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">销售。</span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>GPL</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">（</span><span lang=EN-US><font face=Calibri>GNU General Public License</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">）<br></span></strong><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">我们很熟悉的</span><span lang=EN-US><font face=Calibri>Linux</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">就是采用了</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">。</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议和</span><span lang=EN-US><font face=Calibri>BSD, Apache License</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">等鼓励代码重用的许可很不一样。</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">的出发点是代码的开源</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">免费使用和引用</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">修改</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">衍生代码的开源</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">免费使用，但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种</span><span lang=EN-US><font face=Calibri>Linux</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">，包括商业公司的</span><span lang=EN-US><font face=Calibri>Linux</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">和</span><span lang=EN-US><font face=Calibri>Linux</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">上各种各样的由个人，组织，以及商业软件公司开发的免费软件了。</span><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的主要内容是只要在一个软件中使用</span><span lang=EN-US><font face=Calibri> (</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">&#8221;使用&#8221;指类库引用，修改后的代码或者衍生代码</span><span lang=EN-US><font face=Calibri>) GPL </font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的产品，则该软件产品必须也采用</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议，既必须也是开源和免费。这就是所谓的&#8221;传染性&#8221;。</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的产品作为一个单独的产品使用没有任何问题，还可以享受免费的优势。</span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">由于</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">严格要求使用了</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">类库的软件产品必须使用</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议，对于使用</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的开源代码，商业软件或者对代码有保密要求的部门就不适合集成</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">采用作为类库和二次开发的基础。</span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">其它细节如再发布的时候需要伴随</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议等和</span><span lang=EN-US><font face=Calibri>BSD/Apache</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">等类似。</span><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>LGPL</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">（</span><span lang=EN-US><font face=Calibri>GNU Lesser General Public License</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">）</span></strong></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">是</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">的一个为主要为类库使用设计的开源协议。和</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">要求任何使用</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">修改</span><span lang=EN-US><font face=Calibri>/</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">衍生之</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">类库的的软件必须采用</span><span lang=EN-US><font face=Calibri>GPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议不同。</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">允许商业软件通过类库引用</span><span lang=EN-US><font face=Calibri>(link)</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">方式使用</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">类库而不需要开源商业软件的代码。这使得采用</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的开源代码可以被商业软件作为类库引用并发布和销售。</span><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">但是如果修改</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的代码或者衍生，则所有修改的代码，涉及修改部分的额外代码和衍生的代码都必须采用</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议。因此</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议的开源代码很适合作为第三方类库被商业软件引用，但不适合希望以</span><span lang=EN-US><font face=Calibri>LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">协议代码为基础，通过修改和衍生的方式做二次开发的商业软件采用。</span><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><span lang=EN-US><font face=Calibri>GPL/LGPL</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">都保障原作者的知识产权，避免有人利用开源代码复制并开发类似的产品</span><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<p style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><font face=Calibri>MIT</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">（</span><span lang=EN-US><font face=Calibri>MIT</font></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-fareast-font-family: 宋体">）</span></strong><span lang=EN-US><o:p><font face=Calibri>&nbsp;</font></o:p></span></p>
<span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>MIT</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">是和</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>BSD</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">一样宽范的许可协议</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>, </span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">作者只想保留版权</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>, </span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">而无任何其他了限制</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>.</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">也就是说</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>, </span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">你必须在你的发行版里包含原许可协议的声明</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>, </span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 宋体; FONT-SIZE: 11pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">无论你是以二进制发布的还是以源代码发布的</span><span style="LINE-HEIGHT: 115%; FONT-FAMILY: 'Calibri','sans-serif'; FONT-SIZE: 11pt; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体" lang=EN-US>.</span></span>
<img src ="http://www.cppblog.com/leign/aggbug/99227.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-22 21:10 <a href="http://www.cppblog.com/leign/archive/2009/10/22/99227.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有关线程安全</title><link>http://www.cppblog.com/leign/archive/2009/10/22/99226.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Thu, 22 Oct 2009 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/22/99226.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/99226.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/22/99226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/99226.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/99226.html</trackback:ping><description><![CDATA[<p>1、可重入的概念<br>若一个程序或子程序可以安全的被并行执行，则称其为可重入（reentrant或re-entrant）的；即，当该子程序正在运行时，可以再次进入并执行它。若一个函数是可重入的，则该函数：</p>
<p>不能含有静态（全局）非常量数据。 <br>不能返回静态（全局）非常量数据的地址。 <br>只能处理由调用者提供的数据。 <br>不能依赖于单实例模式资源的锁。 <br>不能调用不可重入的函数。 </p>
<p><span style="COLOR: red">与线程安全的关系<br></span>可重入与线程安全两个概念都关系到函数处理资源的方式。但是，他们有一定的区别。可重入概念会影响函数的外部接口，而线程安全只关心函数的实现。</p>
<p>大多数情况下，要将不可重入函数改为可重入的，需要修改函数接口，使得所有的数据都通过函数的调用者提供。 <br>要将非线程安全的函数改为线程安全的，则只需要修改函数的实现部分。一般通过加入同步机制以保护共享的资源，使之不会被几个进程同时访问。 <br>因此，相对线程安全来说，可重入性是更基本的特性，它可以保证线程安全：即，所有的可重入函数都是线程安全的，但并非所有的线程安全函数都是可重入的。</p>
<p>2、<br>调用一个函数（假设该函数是正确的）操作某对象常常会使该对象暂时陷入不可用的状态（通常称为不稳定状态），等到操作完全结束，该对象才会重新回到完全可用的状态。如果其他线程企图访问一个处于不可用状态的对象，该对象将不能正确响应从而产生无法预料的结果，如何避免这种情况发生是线程安全性的核心问题。</p>
<p><br><span style="COLOR: red">一般准则<br></span>　　如果一个函数在其文档中没有特别注明具备线程安全性，则应该认为它不具备。许多库大量使用了内部的静态数据，除非它是为多线程应用所设计，否则要牢记其内部数据可能没有利用互斥量进行适当的保护。类似，如果类的成员函数在其文档中没有特别注明对于多线程应用是安全的话，则认为它不安全。两个线程去操作相同的对象会引起问题，这是显而易见的，然而，即使两个线程去操作不同的物体依然会引起问题。出于多种原因，许多类使用了内部静态数据或者在多个看上去明显不同的对象间共享实现细则， <br>　　以下给出几个一般准则： <br>　　操作系统提供的API具备线程安全性 <br>　　POSIX线程标准要求C标准库中的大多数函数具备线程安全性，少数例外会在C标准中注明。 <br>　　对于Windows提供的C标准库，如果所使用的版本没有问题，而且进行了正确的初始化，他们都是安全的。 <br>　　C++标准库的线程安全性不是很明确，它在很大程度上依赖于使用的编译器。标准模板库线程安全性的SGI准则作为实际中的标准取得很大进展，但并不是统一的标准。 <br></p>
<img src ="http://www.cppblog.com/leign/aggbug/99226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-22 21:03 <a href="http://www.cppblog.com/leign/archive/2009/10/22/99226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式-Design Pattern 学习手搞draft</title><link>http://www.cppblog.com/leign/archive/2009/10/22/99224.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Thu, 22 Oct 2009 13:00:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/22/99224.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/99224.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/22/99224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/99224.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/99224.html</trackback:ping><description><![CDATA[<p>暑期实习的时候做了一次presentation on design pattern，以下是做的draft(由于公司算半个外企，用的英文;)<br><br>Design patterns are recurring solutions to software design problems you find again and again in real-world application development.<br>Patterns are about design and interaction of objects, as well as providing a communication platform concerning elegant, <br>reusable solutions to commonly encountered programming challenges. </p>
<p>They are categorized in three groups: Creational, Structural, and Behavioral.</p>
<p>Abstract Factory<br>definition<br>Provide an interface for creating families of related or dependent objects without specifying their concrete classes.</p>
<p>Factory Method <br>definition<br>Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. </p>
<p><br>Builder <br>definition<br>Separate the construction of a complex object from its representation so that the same construction process can create different representations. </p>
<p><br>Prototype<br>definition<br>Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype. </p>
<p><br>Singleton<br>definition<br>Ensure a class has only one instance and provide a global point of access to it. <br>&nbsp;</p>
<p>Adapter<br>definition<br>Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces. <br>&nbsp;<br>Bridge<br>definition<br>Decouple an abstraction from its implementation so that the two can vary independently. </p>
<p>Composite<br>definition<br>Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly. <br>&nbsp;<br>Decorator<br>definition<br>Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality. <br>&nbsp;<br>Facade<br>definition<br>Provide a unified interface to a set of interfaces in a subsystem. Fa鏰de defines a higher-level interface that makes the subsystem easier to use. </p>
<p>Flyweight<br>definition<br>Use sharing to support large numbers of fine-grained objects efficiently. <br>&nbsp;<br>Proxy<br>definition<br>Provide a surrogate or placeholder for another object to control access to it.&nbsp; </p>
<p>Chain of Responsibility<br>definition<br>Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it. <br>&nbsp;<br>Command<br>definition<br>Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations. <br>&nbsp;<br>Interpreter<br>definition<br>Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.&nbsp; </p>
<p>Iterator<br>definition<br>Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.&nbsp; </p>
<p>Mediator<br>definition<br>Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. <br>&nbsp;<br>Memento<br>definition<br>Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later. <br>&nbsp;<br>Observer<br>definition<br>Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. <br>&nbsp;<br>State<br>definition<br>Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. <br>&nbsp;<br>Strategy<br>definition<br>Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.&nbsp; </p>
<p>Template<br>definition<br>Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure. </p>
<p>&nbsp;<br>Visitor<br>definition<br>Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates. <br></p>
<img src ="http://www.cppblog.com/leign/aggbug/99224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-22 21:00 <a href="http://www.cppblog.com/leign/archive/2009/10/22/99224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HashTable v.s. HashMap ——JAVA面试一百题...</title><link>http://www.cppblog.com/leign/archive/2009/10/20/99049.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Tue, 20 Oct 2009 09:57:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/20/99049.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/99049.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/20/99049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/99049.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/99049.html</trackback:ping><description><![CDATA[<p>old v.s. young<br><br>1、实现不一样<br>祖宗不同：HashTable继承于的Dictionary类的，HashMap继承自AbstractMap类<br><br>Size: 默认值前者11，后者16； 增加方式：前者oldsize*2+1,后者以2的指数增加<br><br>迭代子： 前者Enemeration，后者Iterator<br><br>key/value： 前者必须非空，后者可空<br><br><br>2、使用方式不一样（实现--决定--&gt;使用）<br><br><br>3、使用场合不一样<br><br>前者是同步的，多用于多线程； 后者则不是，多用于单线程，若想用于多线程则需加上同步synchronized关键字</p>
<img src ="http://www.cppblog.com/leign/aggbug/99049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-20 17:57 <a href="http://www.cppblog.com/leign/archive/2009/10/20/99049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hash Table --Review</title><link>http://www.cppblog.com/leign/archive/2009/10/20/99043.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Tue, 20 Oct 2009 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/20/99043.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/99043.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/20/99043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/99043.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/99043.html</trackback:ping><description><![CDATA[<p>1、定义三要素：<br>关键值Key-Value，哈希/散列函数Hash-Function(Reflection)，映射后的地址/散列表<br><br>2、重要子概念<br>冲突 happens when 关键值key1!=key2 and F(key1)==F(key2)<br>装真因子 a = 已装入hash-table元素个数/hash-table长度<br><br>3、查找性能相关因素：<br><br>&nbsp;&nbsp;A、&nbsp;散列函数(越均匀越好)；&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;常用构造方法：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.直接定址，如线性取址<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.数字分析法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.随机数法，效率看RP。。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.取模法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.平方取中法<br><br>&nbsp;&nbsp;&nbsp;B、处理冲突的方法；&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.开放未用的地址（线性/2次/随机数法）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.再散列法（增加时间开销）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.链地址法（像链表样。）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.建立公共溢出区<br><br>&nbsp;&nbsp;&nbsp;C、散列表的装填因子。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;过大更容易造成冲突，过小使用效率也下来了<br><br></p>
<img src ="http://www.cppblog.com/leign/aggbug/99043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-20 17:12 <a href="http://www.cppblog.com/leign/archive/2009/10/20/99043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中字符与ASCII码间的转换</title><link>http://www.cppblog.com/leign/archive/2009/10/20/99014.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Tue, 20 Oct 2009 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/20/99014.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/99014.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/20/99014.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/99014.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/99014.html</trackback:ping><description><![CDATA[<p>1、从字符串及字符位置获得ASCII码<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">intValue</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">string.charCodeAt(intPosition);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>intValue</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">.charCodeAt(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);</span></div>
<br>2、将ASCII码转换成字符<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">String.fromCharCode(intValue);</span></div>
<img src ="http://www.cppblog.com/leign/aggbug/99014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-20 11:33 <a href="http://www.cppblog.com/leign/archive/2009/10/20/99014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql汉字乱码问题（转）</title><link>http://www.cppblog.com/leign/archive/2009/10/15/98690.html</link><dc:creator>leign</dc:creator><author>leign</author><pubDate>Thu, 15 Oct 2009 07:57:00 GMT</pubDate><guid>http://www.cppblog.com/leign/archive/2009/10/15/98690.html</guid><wfw:comment>http://www.cppblog.com/leign/comments/98690.html</wfw:comment><comments>http://www.cppblog.com/leign/archive/2009/10/15/98690.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/leign/comments/commentRss/98690.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/leign/services/trackbacks/98690.html</trackback:ping><description><![CDATA[<p>1.在安装Mysql时其实可能选择使用GBK来处理汉字，由于以前没使用，所以就按默认的英语处理。不过，也可以C:\Program Files\MySQL\MySQL Server 4.1安装路径下的my文件[mysql] 下default-character-set=gbk改成gbk 然后重起一下．</p>
<p>2.用命建数据库和表时在最后都加上default charset=gbk;</p>
<p>如：create database xx default charset=gbk;</p>
<p>CREATE TABLE tt (<br>&nbsp;...<br>) default charset=gbk;</p>
<p>3.在连接语句中加入：</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">mysqlUrl&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jdbc:mysql://localhost:3306/ebook?useUnicode=true&amp;characterEncoding=gb2312</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span></div>
<p>&nbsp;</p>
<p>4.应注意在jsp页面中中入：&lt;%@ page language="java" contentType="text/html; charset=GB2312" pageEncoding="GB2312"%&gt;</p>
<p>5.在jsp中获得字段时，在往后如数据库表中插入记录时应注意将sql处理。如下：</p>
<p>String sql = "xx";</p>
<p>System.out.println(sql);&nbsp; //显示没有处理sql</p>
<p>sql = new String(sql.getBytes("ISO8859-1"), "GB2312");&nbsp; //用于将汉字处理，不然的话你会发现数据库表中存的不是汉字</p>
<p>System.out.println(sql);</p>
<p>int i = stmt.executeUpdate(sql); // 执行sql语句：</p>
<p>6.网上有人说JDBC驱动也有可能出现汉字乱码，最好使用较高版本的Mysql驱动</p>
<img src ="http://www.cppblog.com/leign/aggbug/98690.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/leign/" target="_blank">leign</a> 2009-10-15 15:57 <a href="http://www.cppblog.com/leign/archive/2009/10/15/98690.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>