﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-tomjamescn</title><link>http://www.blogjava.net/tomjamescn/</link><description>学习JavaSE和JavaEE相关知识...</description><language>zh-cn</language><lastBuildDate>Tue, 12 May 2026 22:26:04 GMT</lastBuildDate><pubDate>Tue, 12 May 2026 22:26:04 GMT</pubDate><ttl>60</ttl><item><title>记住！大端小端</title><link>http://www.blogjava.net/tomjamescn/archive/2010/10/10/334220.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Sun, 10 Oct 2010 13:21:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2010/10/10/334220.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/334220.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2010/10/10/334220.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/334220.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/334220.html</trackback:ping><description><![CDATA[关于大端和小端，自己已经记了很多次了，可每次都忘，今天创新工场笔试，第一道题就是关于大端小端的知识，可惜，自己又忘了，怎么回事，说到底，是自己同时记大端和小端，导致容易混淆，现在只记小端了：小端，是数的高位存在内存地址的高位，小高高！<br />
<br />
下面是从网上摘抄的一些东东，帮助理解和记忆，来自http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_14837.html：<br />
<p><font size="2">端模式（Endian）的这个词出自Jonathan
Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类，从圆头开始将鸡蛋敲开的人被归为Big
Endian，从尖头开始将鸡蛋敲开的人被归为Littile
Endian。小人国的内战就源于吃鸡蛋时是究竟从大头（Big-Endian）敲开还是从小头（Little-Endian）敲开。在计算机业Big
Endian和Little
Endian也几乎引起一场战争。在计算机业界，Endian表示数据在存储器中的存放顺序。下文举例说明在计算机中大小端模式的区别。</font></p>
<p><font size="2">如果将一个32位的整数0x12345678存放到一个整型变量（int）中，这个整型变量采用大端或者小端模式在内存中的存储由下表所示。为简单起见，<font color="#ff0000">本书使用OP0表示一个32位数据的最高字节MSB（Most Significant Byte），使用OP3表示一个32位数据最低字节LSB（Least Significant Byte）。</font></font></p>
<table border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">地址偏移</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">大端模式</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">小端模式</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x00</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">78（OP3）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x01</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">56（OP2）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x02</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">56（OP2）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x03</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">78（OP3）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
        </tr>
    </tbody>
</table>
<p><font size="2">如果将一个16位的整数0x1234存放到一个短整型变量（short）中。这个短整型变量在内存中的存储在大小端模式由下表所示。</font></p>
<table border="1" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">地址偏移</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">大端模式</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">小端模式</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x00</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
        </tr>
        <tr>
            <td valign="top" width="189">
            <p><font size="2">0x01</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">34（OP1）</font></p>
            </td>
            <td valign="top" width="189">
            <p><font size="2">12（OP0）</font></p>
            </td>
        </tr>
    </tbody>
</table>
<p><font size="2">由上表所知，采用大小模式对数据进行存放的主要区别在于在存放的字节顺序，大端方式将高位存放在低地址，小端方式将
高位存放在高地址。采用大端方式进行数据存放符合人类的正常思维，而采用小端方式进行数据存放利于计算机处理。到目前为止，采用大端或者小端进行数据存
放，其孰优孰劣也没有定论。</font></p>
<p><font size="2">有的处理器系统采用了小端方式进行数据存放，如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放，如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器，一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。</font></p>
<p><font size="2">因此在一个处理器系统中，有可能存在大端和小端模式同时存在的现象。这一现象为系统的软硬件设计带来了不小的麻烦，这要求系统设计工程师，必须深入理解大端和小端模式的差别。大端与小端模式的差别体现在一个处理器的寄存器，指令集，系统总线等各个层次中。</font></p>
<br />
<br />
<img src ="http://www.blogjava.net/tomjamescn/aggbug/334220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2010-10-10 21:21 <a href="http://www.blogjava.net/tomjamescn/archive/2010/10/10/334220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]同余即相关性质</title><link>http://www.blogjava.net/tomjamescn/archive/2010/09/26/332976.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Sun, 26 Sep 2010 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2010/09/26/332976.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/332976.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2010/09/26/332976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/332976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/332976.html</trackback:ping><description><![CDATA[<strong>转自：<a href="http://jaskell.blogbus.com/logs/3249971.html">http://jaskell.blogbus.com/logs/3249971.html</a></strong><br />
<br />
<p>一、同余</p>
<p>&nbsp;&nbsp;&nbsp; 我们来了解一下什么是&#8220;同余&#8221;。简单来说就是，如果两个数都除以某个数能够有相同的余数，那么我们就说这两个数&#8220;同余&#8221;。不过这次我们用严谨的数学概念来表述：</p>
<p>&nbsp;&nbsp;&nbsp; 两个整数 <em>a</em>，<em>b</em>，若它们除以整数 <em>m </em>所得的余数相等，则称 <em>a</em>，<em>b </em>对于模 <em>m </em>同余</p>
<p>&nbsp;&nbsp;&nbsp; 记作 <img alt="a " src="http://upload.wikimedia.org/math/1/b/a/1ba061149bafd53d3078ef68f58b09b4.png" /></p>
<p>&nbsp;&nbsp;&nbsp; 读作 <em>a </em>同余于 <em>b </em>模 <em>m </em>，或读作 <em>a </em>与 <em>b </em>关于模 <em>m </em>同余。</p>
<p>&nbsp;&nbsp;&nbsp; 比如 <img alt="26 " src="http://upload.wikimedia.org/math/3/3/5/33537e65a57a57b85d8569f19dee65f3.png" /></p>
<p>&nbsp;&nbsp;&nbsp; 我们再来了解一下相关的性质：</p>
<ol>
    <li>如果 <img alt="a " src="http://upload.wikimedia.org/math/1/b/a/1ba061149bafd53d3078ef68f58b09b4.png" />，那么 <em>m</em> | (<em>a</em> &#8722; <em>b</em>) ，这里 <em>m</em> | (<em>a</em> &#8722; <em>b</em>) 表示 (<em>a</em> &#8722; <em>b</em>) 能被 <em>m </em>整除 </li>
    <li>如果 <img alt="a " src="http://upload.wikimedia.org/math/1/b/a/1ba061149bafd53d3078ef68f58b09b4.png" />，<img alt="b " src="http://upload.wikimedia.org/math/7/2/c/72c4fa0bd69956b7e68d3d8cc2ec9d5c.png" />, 那么<img alt="a " src="http://upload.wikimedia.org/math/1/7/a/17aef405c3ab708d3dd517ee80619941.png" /> </li>
    <li>如果 <img alt="a " src="http://upload.wikimedia.org/math/1/b/a/1ba061149bafd53d3078ef68f58b09b4.png" />，<img alt="c " src="http://upload.wikimedia.org/math/7/7/b/77b3768cf453ddc62ff2c3e668b93fad.png" />, 那么<img alt="a+c " src="http://upload.wikimedia.org/math/5/8/7/5870db21ef07cf004708ae0a08c86699.png" />，<img alt="a-c " src="http://upload.wikimedia.org/math/9/e/f/9ef96c57e3ad5d862af3178c718177d6.png" />，<img alt="ac " src="http://upload.wikimedia.org/math/3/9/0/390116f8d52af94ccdb17c5ad2e199c0.png" />，<img alt="a/c " src="http://upload.wikimedia.org/math/f/9/e/f9e3c5a2ad4272a6b596a641cb3bdb21.png" /> </li>
    <li>如果 <img alt="a " src="http://upload.wikimedia.org/math/1/b/a/1ba061149bafd53d3078ef68f58b09b4.png" />， 那么 <img alt="a^n " src="http://upload.wikimedia.org/math/c/b/0/cb0ee3fec2dd17c4d97086b9d9b51d02.png" />&nbsp;</li>
</ol>
<p>&nbsp;&nbsp;&nbsp; 有了这些性质，判断两个数是否同余就可以用更简单的方法了。根据性质一，原来我们需要判断 (a mod m) == (b mod m)
是否为真，现在就可以直接判断 (a - b) mod m == 0
是否为真了。这样就把其中一次求余运算变为减法运算了。一般来说减法要比除法更容易在计算机上实现，运算速度也更快。</p>
<p><br />
</p>
<p>二、求余 (a * b * c * d) mod m = ?</p>
<p>&nbsp;&nbsp;&nbsp; 由于计算机表示一个整数通常用 32bit 。而大量连乘运算则可能会导致整数溢出，这时我们就要利用求余一些性质来进行处理了。把以上式子转换为：</p>
<p>&nbsp;&nbsp;&nbsp; 已知： (a * b) mod m == ((a mod m) * b) mod m</p>
<p>&nbsp;&nbsp;&nbsp; 所以： (a * b * c * d) mod m = ((((((a mod m) * b) mod m) * c) mod m) * d) mod m</p>
<p>&nbsp;&nbsp;&nbsp; 这样就把连乘运算分解了，每次可以先进行求余运算然后再进行乘法运算。</p>
<br />
<br />
<img src ="http://www.blogjava.net/tomjamescn/aggbug/332976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2010-09-26 17:25 <a href="http://www.blogjava.net/tomjamescn/archive/2010/09/26/332976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]linux使用笔记0:ibus输入法框架和apt命令总结</title><link>http://www.blogjava.net/tomjamescn/archive/2010/01/11/330963.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Mon, 11 Jan 2010 13:16:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2010/01/11/330963.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330963.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2010/01/11/330963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330963.html</trackback:ping><description><![CDATA[<p>使用的是Ubuntu 9.10发行版，找了好半天中文输入法，发现目前最好/最新的是ibus（前身是鼎鼎大名的scim-python，对于我这个linux小白来说，并不是鼎鼎大名的...），严格来说它不是一个输入法，而是一个输入法框架，9.10自带的ibus里有N多国家的输入法（基于ibus框架）。ubuntu9.10里面ibus自带的中文PinYin输入法好像一开始不能用...（拿不准...），必须去Preferences里面的IBus Preferences里面的Input Method中自己添加&ldquo;汉语-PinYin&rdquo;输入法，如果开始没有，需要安装ibus-pinyin，见下面的第4步。</p>
<p>在网上找了点资料，在ibus已经加入到Ubuntu的源了，如果需要，使用下面的命令进行安装：</p>
<ol>
	<li>sudo apt-get update&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; 更新软件包列表</li>
	<li>sudo apt-get install ibus&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; 安装ibus框架</li>
	<li>sudo apt-get install ibus ibus-table&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装某些输入法引擎基础，如果仅仅想使用拼音输入法，可以跳过此步，拼音输入法不需要依赖ibus-table。某些输入法，如五笔，依赖ibus-table。</li>
	<li>sudo apt-get install ibus ibus-pinyin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装拼音输入法引擎，发现很好用啊，哈哈</li>
</ol>
<p>由于安装和卸载软件是使用的必须前提，所以这里对apt命令进行一些总结。在总结之前，还得对ubuntu的软件源的地址进行说明，为了达到好的下载源的速度，最好选一个最快的软件源，目前来说http://ubuntu.srt.cn是最快的，ubuntu自己提供了检测的功能，可以自动检测（choose a download server -&gt; select best server）。</p>
<p>关于apt-get命令的详细而简单的说明，是《<a href="https://help.ubuntu.com/community/AptGet/Howto?action=show&amp;redirect=AptGetHowto">AptGetHowTo</a>》。注意，使用apt-get命令必须要用root权限。这里，摘抄了最常用的命令....如下</p>
<h3 id="Installation commands">Installation commands</h3>
<ul>
	<li><pre>apt-get install &lt;package_name&gt; </pre>This command installs a new package.</li>
	<li><pre>apt-get build-dep &lt;package_name&gt; </pre>
		<p class="line862">This command searches the repositories and installs the build dependencies for &lt;package_name&gt;. If the package is not in the repositories it will return an error.</p>
	</li>
	<li><pre>aptitude install &lt;package_name&gt;</pre>
		<p class="line862">Aptitude is a [<a class="http" href="http://en.wikipedia.org/wiki/Ncurses">http://en.wikipedia.org/wiki/Ncurses</a> Ncurses] viewer of packages installed or available. Aptitude can be used from the command line in a similar way to apt-get. See <tt>man&nbsp;aptitude</tt> for more information.</p>
	</li>
	<li>APT and aptitude will accept multiple package names as a space delimited list. For example:<pre>apt-get install &lt;package1_name&gt; &lt;package2_name&gt; &lt;package3_nam


</pre></li>
</ul>
<h3 id="Search commands">Search commands</h3>
<ul>
	<li><pre>apt-cache search &lt;search_term&gt;</pre>
		<p class="line862">This command will find packages that include &lt;search_term&gt;.</p>
	</li>
	<li><pre>dpkg -l *&lt;search_term&gt;*</pre>
		<p class="line862">This will find packages whose names contain &lt;search_term&gt;. Similar to <tt>apt-cache&nbsp;search</tt>, but also shows whether a package is installed on your system by marking it with <strong>ii</strong> (installed) and <strong>un</strong> (not installed).</p>
	</li>
	<li><pre>apt-cache show &lt;package_name&gt;</pre>
		<p class="line862">This command shows the description of package &lt;package_name&gt; and other relevant information including version, size, dependencies and conflicts.</p>
	</li>
</ul>
<h3>&nbsp;</h3>
<h3>Typical usage example</h3>
<p class="line874">I want to feel the wind in my hair, I want the adrenaline of speed. So lets install a racing game. But what racing games are available?</p>
<pre>apt-cache search racing game</pre>
<p class="line874">It gives me a lot of answers. I see a game named &quot;torcs&quot;. Lets get some more information on this game.</p>
<pre>apt-cache show torcs</pre>
<p class="line874">Hmmm... it seems interesting. But is this game not already installed on my computer? And what is the available version? Is it from Universe or main?</p>
<pre>apt-cache policy torcs</pre>
<p class="line874">Ok, so now, let&#39;s install it!</p>
<pre>apt-get install torcs</pre>
<p class="line874">What is the command I must type in the console to launch this game? In this example, it&#39;s straightforward (&quot;torcs&quot;), but that&#39;s not always the case. One way of finding the name of the binary is to look at what files the package has installed in &quot;/usr/bin&quot;. For games, the binary will be in &quot;/usr/games&quot;. For administrative programs, it&#39;s in &quot;/usr/sbin&quot;.</p>
<pre>dpkg -L torcs | grep /usr/games/</pre>
<p class="line874">The first part of the command display all files installed by the package &quot;torcs&quot; (try it). With the second part, we ask to only display lines containing &quot;/usr/games/&quot;.</p>
<p class="line874">Hmmm, that game is cool. Maybe there are some extra tracks?</p>
<pre>apt-cache search torcs</pre>
<p class="line874">But I&#39;m running out of space. I will delete the apt cache!</p>
<pre>apt-get clean</pre>
<p class="line874">Oh no, my mother asked me to remove all games from this computer. But I want to keep the configuration files so I can simply re-install it later.</p>
<pre>apt-get remove torcs</pre>
<p class="line874">If I want to also remove config files :</p>
<pre>apt-get purge torcs</pre><br>文章来源:<a href='http://localhost/wp2/?p=180'>http://localhost/wp2/?p=180</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2010-01-11 21:16 <a href="http://www.blogjava.net/tomjamescn/archive/2010/01/11/330963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入][转]How to set proxy for android browser</title><link>http://www.blogjava.net/tomjamescn/archive/2010/01/07/330962.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Thu, 07 Jan 2010 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2010/01/07/330962.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330962.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2010/01/07/330962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330962.html</trackback:ping><description><![CDATA[<p>由于宿舍网络情况比较复杂，想为tattoo搭建一个proxy，没想到在android中没有找到设置proxy的地方。上网查了一篇文章，可以解决这个问题。</p>
<p>转自 <a href="http://alexmogurenko.com/blog/programming/android-how-to-set-proxy-for-android-browser/">http://alexmogurenko.com/blog/programming/android-how-to-set-proxy-for-android-browser/</a></p>
<p>下面是原文</p>
<p>There are many reasons to make browser serf pages through proxy server:</p>
<ul>
	<li>someone wanna catch http requests/responses</li>
	<li>someone wanna hide his IP</li>
	<li>so on</li>
</ul>
<p>What to do if you want set proxy for android browser? there some ways:</p>
<ul>
	<li>add record to database: /data/data/com.android.providers.settings/databases/settings.db</li>
</ul>
<ol>
	<li>pull database to pc add record (using for example sdk tool sqlite3) and replace existing db</li>
	<li>make changes in database directly on device</li>
</ol>
<p>but as for me there exist simplier way, do it by your Java application using Settings provider:</p>
<pre lang="java">Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, &quot;proxy_ip:proxy_port&quot;);
</pre>
<p>where proxy_ip/proxy_port = IP/port of proxy that you going to use.</p>
<p>there left one problem, it will not work if we will not add one string to manifest file, here it is:</p>
<p><strong>&lt;uses-permission android:name=&rdquo;android.permission.WRITE_SETTINGS&rdquo; /&gt;</strong></p>
<p>Thats all, now it works, here is code:</p>
<pre lang="java">package com.BrowserSettings;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.provider.Settings;

public class BrowserSettingsUI extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final Button button = (Button) findViewById(R.id.Button01);
button.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
try
{
Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, &quot;127.0.0.1:100&quot;);//enable proxy
}catch (Exception ex){
}
}
});

final Button button2 = (Button) findViewById(R.id.Button02);
button2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {

try
{
Settings.System.putString(getContentResolver(), Settings.System.HTTP_PROXY, &quot;&quot;);//disable proxy
}catch (Exception ex){
}
}
});

}
}

</pre>
<p>manifest file:</p>
<p>&lt;?xml version=&rdquo;1.0&Prime; encoding=&rdquo;utf-8&Prime;?&gt;<br />
	&lt;manifest xmlns:android=&rdquo;http://schemas.android.com/apk/res/android&rdquo;<br />
	package=&rdquo;com.BrowserSettings&rdquo;<br />
	android:versionCode=&rdquo;1&Prime;<br />
	android:versionName=&rdquo;1.0.0&Prime;&gt;<br />
	&lt;application android:icon=&rdquo;@drawable/icon&rdquo; android:label=&rdquo;@string/app_name&rdquo;&gt;<br />
	&lt;activity android:name=&rdquo;.BrowserSettingsUI&rdquo;<br />
	android:label=&rdquo;@string/app_name&rdquo;&gt;<br />
	&lt;intent-filter&gt;<br />
	&lt;action android:name=&rdquo;android.intent.action.MAIN&rdquo; /&gt;<br />
	&lt;category android:name=&rdquo;android.intent.category.LAUNCHER&rdquo; /&gt;<br />
	&lt;/intent-filter&gt;<br />
	&lt;/activity&gt;<br />
	&lt;/application&gt;<br />
	&lt;uses-permission android:name=&rdquo;android.permission.WRITE_SETTINGS&rdquo; /&gt;<br />
	&lt;/manifest&gt;</p>
<br>文章来源:<a href='http://localhost/wp2/?p=172'>http://localhost/wp2/?p=172</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2010-01-07 14:36 <a href="http://www.blogjava.net/tomjamescn/archive/2010/01/07/330962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]数学归纳法——算法证明基础</title><link>http://www.blogjava.net/tomjamescn/archive/2009/12/09/330961.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Wed, 09 Dec 2009 14:07:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2009/12/09/330961.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330961.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2009/12/09/330961.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330961.html</trackback:ping><description><![CDATA[<p>最近在学习《算法导论》时，发现很多证明都用到了数学归纳法，这里查了点资料，把数学归纳法复习一下：</p>
<p>数学归纳法用来在数学上证明与<b>自然数</b>N有关的命题的一种特殊方法，它主要用来研究与<b>正整数</b>有关的数学问题，在高中数学中常用来证明等式成立和数列通项公式成立。</p>
<p>用的最多的是第一数学归纳法和第二数学归纳法，下面详细说明。</p>
<p><strong>第一数学归纳法<br />
	</strong></p>
<ol>
	<li>证明当n<strong>（n为自然数）</strong>取第一个值时命题成立</li>
	<li>假设当n=k（<b>k为自然数</b>）时命题成立，证明当n=k+1时命题也成立</li>
</ol>
<p>由1，2步，可证明命题成立。</p>
<p>&nbsp;</p>
<p><strong>第二数学归纳法<br />
	</strong></p>
<p>对第一数学归纳法进行了扩充</p>
<ol>
	<li>证明当n=0时命题成立</li>
	<li>假设当n&lt;=k（<b>k为自然数</b>）时命题成立，证明当n=k+1时命题也成立</li>
</ol>
<p>有1，2步，可证明命题成立。</p>
<p>在算法时间复杂度的证明上，由于n取值是一个自然数，所以多用数学归纳法原理进行证明。其实，证明循环正确性的循环不变式就是直接利用的第一数学归纳法。</p>
<p>&nbsp;</p>
<p>参考：</p>
<p>&nbsp;</p>
<p>百度百科，数学归纳法</p>
<br>文章来源:<a href='http://localhost/wp2/?p=165'>http://localhost/wp2/?p=165</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2009-12-09 22:07 <a href="http://www.blogjava.net/tomjamescn/archive/2009/12/09/330961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]单链表逆转的递归和非递归实现</title><link>http://www.blogjava.net/tomjamescn/archive/2009/11/23/330960.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Mon, 23 Nov 2009 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2009/11/23/330960.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330960.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2009/11/23/330960.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330960.html</trackback:ping><description><![CDATA[<p>如题，经典问题，记录于此...</p>
<p><strong>递归实现<br />
	</strong></p>
<p>思路：如果只有一个节点，则什么都不做。否则，将当前链表（a1,a2...a3）的子链表（a2,...an）进行逆转，返回逆转后的第一个节点的指针，再将a1节点加到a2节点后面。</p>
<p>代码：(这里没有使用头节点)</p>
<pre lang="c">node * reverse(node * p){
    if(p-&gt;next == null){
        return p;
    }
    node * q = p-&gt;next;
    node * head = reverse(q);
    p-&gt;next = null;
    q-&gt;next = p;
    return head;
}
</pre>
<p><strong>非递归实现<br />
	</strong></p>
<p>思路：一个指针进行链表的遍历，一个指针指向逆转后的链表的第一个节点，在遍历的过程中，将当前节点加入逆转后的链表第一个元素即可。返回逆转后的链表的第一个节点的指针。</p>
<p>代码：（这里没有使用头节点）</p>
<pre lang="c">node * reverse(node * p){
    node * p_reverse;
    if(p != null){    
        p_reverse = p;
        node * q = p-&gt;next;
        p-&gt;next = null;    
    }
    while(q != null){
        p = q-&gt;next;
        q-&gt;next = p_reverse;
        p_reverse = q;
        q = p;
    }
}
</pre>
<p>对C语言用的太少，上面的代码实现可能有点恶心，不过可以实现功能....</p>
<br>文章来源:<a href='http://localhost/wp2/?p=150'>http://localhost/wp2/?p=150</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2009-11-23 15:35 <a href="http://www.blogjava.net/tomjamescn/archive/2009/11/23/330960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]log4j详解</title><link>http://www.blogjava.net/tomjamescn/archive/2009/11/17/330959.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Tue, 17 Nov 2009 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2009/11/17/330959.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330959.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2009/11/17/330959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330959.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Normal  0        7.8 磅  0  2    false  false  false    EN-US  ZH-CN  X-NONE                                                        ...&nbsp;&nbsp;<a href='http://www.blogjava.net/tomjamescn/archive/2009/11/17/330959.html'>阅读全文</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2009-11-17 15:28 <a href="http://www.blogjava.net/tomjamescn/archive/2009/11/17/330959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]eclipse插件安装</title><link>http://www.blogjava.net/tomjamescn/archive/2009/11/17/330958.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Tue, 17 Nov 2009 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2009/11/17/330958.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330958.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2009/11/17/330958.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330958.html</trackback:ping><description><![CDATA[<p>对eclipse是用的多，学的少，用了都半年了，连插件都不知道怎么装，搜索了一篇文章《<a href="http://blog.csdn.net/zhouxianli/archive/2008/07/16/2657074.aspx">Eclipse 3.4插件安装方式</a>》作为参考吧...</p>
<p>以前安装Eclipse插件无非两种方式, 直接copy插件到features/plugins目录或者在links目录下创建链接文件. 刚刚发布的Eclipse 3.4又推出另一种新的安装途径, 更加灵活。Eclipse 3.4下有个dropins目录, 只要把插件放到该目录下就可以加载, 有几种格式可以选择。</p>
<p>1. 最简单的，直接将jar包放到dropins目录:</p>
<p>&nbsp;&nbsp;&nbsp; eclipse/<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dropins/<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;com.essiembre.eclipse.i18n.resourcebundle_0.7.7</p>
<p><br />
	2. 传统格式，统一放到一个eclipse目录下:<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eclipse/&nbsp;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dropins/&nbsp;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eclipse/&nbsp;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;features/&nbsp;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;plugins/</p>
<p><br />
	3. 按照插件名称区分:<br />
	&nbsp;&nbsp;&nbsp; eclipse/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropins/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resourcebundleeditor/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugins/&nbsp;&nbsp;&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;&nbsp;&nbsp;m2eclipse/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; features/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; plugins/<br />
	<br />
	4. 类似links方式添加链接:</p>
<p>&nbsp;&nbsp;&nbsp; eclipse/ <br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dropins/&nbsp;<br />
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xfire.link</p>
<p>&nbsp;</p>
<p>如果只安装一个Eclipse的话建议采用第三种，否则采用第四种。</p>
<p>如果发现安装了没有效果，可以删除eclipse主目录下的\configuration\org.eclipse.update后，再执行eclipse -clean试试。</p>
<br>文章来源:<a href='http://localhost/wp2/?p=127'>http://localhost/wp2/?p=127</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2009-11-17 14:57 <a href="http://www.blogjava.net/tomjamescn/archive/2009/11/17/330958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Oracle数据类型</title><link>http://www.blogjava.net/tomjamescn/archive/2009/11/16/330957.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Mon, 16 Nov 2009 08:05:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2009/11/16/330957.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330957.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2009/11/16/330957.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330957.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330957.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp; Oracle支持的数据类型可以分为三个基本种类：字符数据类型、数字数据类型以及表示其它数据的数据类型。</p>
<p style="margin: 0in; font-weight: bold; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 字符数据类型</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; CHAR数据类型存储固定长度的字符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度，它的默认长度则设置为1.如果对某个CHAR类型变量赋值，其长度小于规定的长度，那么Oracle自动用空格填充。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; VARCHAR2存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度，但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为4000个字节。所以如果存储中文的时候，就不能存储到4000个字符了，因为一个汉字会占有多个字节。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 因为VARCHAR2数据类型只存储为该列所赋的字符（不加空格），所以VARCHAR2需要的存储空间比CHAR数据类型要小。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 10pt;">&nbsp;&nbsp;&nbsp; Oracle推荐使用VARCHAR2</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据，但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时，需要指定所使用的字符集，以便对数据库中数据进行编码。还可以指定一个辅助的字符集［即本地语言集（National Language Set，简称NLS）］。NCHAR和NVARCHAR2类型的列使用辅助字符集。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 在Oracle9i中，可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; LONG数据类型可以存放2GB的字符数据，它是从早期版本中继承来的。现在如果想存储大容量的数据，Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 数字数据类型</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; NUMBER数据类型可以有两个限定符，如：</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; column NUMBER （ precision， scale）</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; precision表示数字中的有效位。如果没有指定precision的话，Oracle将使用38作为精度。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; scale表示数字小数点右边的位数，scale默认设置为0。如果把scale设成负数，Oracle将把该数字取舍到小数点左边的指定位数。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 日期数据类型</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; Oracle标准日期格式为：DD-MON-YY&nbsp; HH：MI：SS</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 通过修改实例的参数NLS_DATE_FORMAT，可以改变实例中插入日期的格式。在一个会话期间，可以通过ALTER SESSION SQL命令来修改日期，或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-weight: bold; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 其它的数据类型</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时，Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象，如位图。 RAW数据类型可占用2KB的空间，而LONG RAW数据类型则可以占用2GB大小。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; ROWID ROWID是一种特殊的列类型，称之为伪列（pseudocolumn）。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址，ROWID伪列用ROWID数据类型定义。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; ROWID与磁盘驱动的特定位置有关，因此，ROWID是获得行的最快方法。但是，行的ROWID会随着卸载和重载数据库而发生变化，因此建议不要在事务 中使用ROWID伪列的值。例如，一旦当前应用已经使用完记录，就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 列或变量可以定义成ROWID数据类型，但是Oracle不能保证该列或变量的值是一个有效的ROWID.</p>
<p style="margin: 0in; font-weight: bold; font-size: 10pt;">&nbsp;&nbsp;&nbsp; LOB</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; LOB（大型对象）数据类型，可以保存4GB的信息。LOB有以下3种类型：</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 。CLOB，只能存储字符数据</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 。NCLOB，保存本地语言字符集数据</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 。BLOB，以二进制信息保存数据</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 可以指定将一个LOB数据保存在Oracle数据库内，还是指向一个包含次数据的外部文件。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 为了便于将LONG数据类型转换成LOB，Oracle9i包含许多同时支持LOB和LONG的函数，还包括一个ALTER TABLE语句的的新选择，它允许将LONG数据类型自动转换成LOB.</p>
<p style="margin: 0in; font-size: 10pt;"><strong>&nbsp;&nbsp;&nbsp; BFILE</strong></p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; BFILE数据类型用做指向存储在Oracle数据库以外的文件的指针。</p>
<p style="margin: 0in; font-size: 10pt;"><strong>&nbsp;&nbsp;&nbsp; XMLType</strong></p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 作为对XML支持的一部分，Oracle9i包含了一个新的数据类型XMLType.定义为XMLType的列将存储一个在字符LOB列中的XML文档。有许多内置的功能可以使你从文当中抽取单个节点，还可以在XMLType文档中对任何节点创建索引。</p>
<p style="margin: 0in; font-size: 10pt;"><strong>&nbsp;&nbsp;&nbsp; 用户自定义数据</strong></p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 从Oracle8以后，用户可以定义自己的复杂数据类型，它们由Oracle基本数据类型组合而成。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; AnyType、AnyData和AnyDataSet</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; Oracle包括3个新的数据类型，用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义，以便让Oracle9i知道如何处理这些类型的特定实现。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 额外的：</p>
<p style="margin: 0in; font-size: 10pt;"><strong>&nbsp;&nbsp;&nbsp; 类型转换</strong></p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; Oracle会自动将某些数据类型转换成其他的数据类型，转换取决于包括该值的SQL语句。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 数据转换还可以通过Oracle的类型转换函数显示地进行。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><strong>&nbsp;&nbsp;&nbsp; 连接与比较</strong></p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 在大多数平台上Oracle SQL中的连接操作符用两条竖线（||）表示。连接是将两个字符值连接。Oracle的自动类型转换功能使得两个数字值也可以进行连接。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;</p>
<p style="margin: 0in; font-size: 10pt;"><strong>&nbsp;&nbsp;&nbsp; NULL</strong></p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; NULL值是关系数据库的重要特征之一。实际上，NULL不代表任何值，它表示没有值。如果要创建表的一个列，而这个列必须有值，那么应将它指定为NOT NULL，这表示该列不能包含NULL值。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值，那么会出现3种状态：TURE、FALSE以及两者都不是。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; 因为NULL值不等于0或其他任何值，所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。</p>
<p style="margin: 0in; font-size: 10pt;">&nbsp;&nbsp;&nbsp; NULL值特别适合以下情况：当一个列还未赋值时。如果选择不使用NULL值，那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性，同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户，并且导致累计操作的错误结果。</p>
<p style="margin: 0in; font-size: 10pt;">参考：</p>
<p style="margin: 0in; font-size: 10pt;">《Oracle数据类型》，http://www.cnblogs.com/cxd4321/archive/2008/04/14/1153201.html</p>
<br>文章来源:<a href='http://localhost/wp2/?p=122'>http://localhost/wp2/?p=122</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330957.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2009-11-16 16:05 <a href="http://www.blogjava.net/tomjamescn/archive/2009/11/16/330957.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]Java基础深入学习4——由InterruptedException异常引发的知识点</title><link>http://www.blogjava.net/tomjamescn/archive/2009/11/15/330972.html</link><dc:creator>tomjamescn</dc:creator><author>tomjamescn</author><pubDate>Sun, 15 Nov 2009 12:56:00 GMT</pubDate><guid>http://www.blogjava.net/tomjamescn/archive/2009/11/15/330972.html</guid><wfw:comment>http://www.blogjava.net/tomjamescn/comments/330972.html</wfw:comment><comments>http://www.blogjava.net/tomjamescn/archive/2009/11/15/330972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tomjamescn/comments/commentRss/330972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tomjamescn/services/trackbacks/330972.html</trackback:ping><description><![CDATA[如果一个方法后面有“throws InterruptedException”（即会抛出InterruptedException异常的方法），表示这个方法内（或是这个方法中所调用的方法内），可能会抛出InterruptedException异常。在多线程程序设计中，这通常告诉我们两点：
<ol>
	<li>这是“需要时间”的方法</li>
	<li>这是“可以取消”的方法</li>
</ol>
即，如果一个方法后面有“thorws InterruptedException”表示这个方法可能会花点时间，但是可以取消。

Java中会抛出InterruptException异常的有下面三个方法：
<ol>
	<li>java.lang.Object类（及其子类）实例的wait方法</li>
	<li>java.lang.Object类（及其子类）实例的sleep方法</li>
	<li>java.lang.Thread类（及其子类）实例的join方法</li>
</ol>
根据上面的两点，首先，这三个方法都是需要花点时间的方法，这个很好理解。其次，他么都可以被取消，具体怎么取消，下面分别说明。

<strong>取消wait</strong>

可以调用interrupt方法（这个方法是java.lang.Thread类（及其子类）实例的方法，某个线程都可以在任何时候调用其他线程的interrupt方法）来取消wait方法的等待。即不用再等待notify/notifyAll方法的“通知”了。当对某个wait的线程调用interrupt方法的时候，这个线程会从wait set中出来，先重新获得锁定，再抛出InterruptedException。注意，在获得锁定前，是不会抛出InterruptedException异常的。

为了加深理解，这里对比一下notify/notifyAll方法和interrupt方法。首先，notify/notifyAll方法是java.lang.Object类（及其子类）实例的方法，而interrupt方法是java.lang.Thread类（及其子类）实例的方法。其次，notify/notifyAll方法调用时需要获得锁定，而interrupt方法不用，如前所述，interrupt方法可以在任何时候被调用。最后，被notify/notifyAll方法唤醒的线程是（重新获得锁定后）继续执行wait方法之后的方法，而被interrupt方法唤醒的线程则满足前面所的第二条“可以被取消”，即让被唤醒的线程（重新获得锁定后）在wait方法上抛出InterruptedException。

<strong>取消sleep</strong>

当sleep中的线程被调用interrupt方法时，会马上（不用想取消wait一样，还要获得锁定）放弃sleep状态，并抛出InterruptedException异常。

<strong>取消join</strong>

当线程以join方法等待其他线程结束时，可以被调用interrupt方法来马上取消等待其他线程结束。

下面是关于java内部是怎么实现取消上面三个方法的等待的。在线程内部，有一个标志位表示线程的中断状态。有两个方法可以设置这个状态，interrupt方法和interrupted方法，interrupted方法属于java.lang.Thread类（及其子类）的静态方法，用来返回<strong>当前线程</strong>的中断状态，并清除这个状态。调用interrupt方法将设置此标志位（表示让被调用线程处于中断状态），调用interrupted方法返回值是当前线程是否被中断，并取消此标志位（表示让当前线程处于非中断状态）。在实现细节上，会抛出InterruptedException异常的sleep，wait和join方法在内部不断的检测这个中断状态，如果发现被设置了，则抛出InterruptedException异常。java.lang.Thread类（及其子类）实例还有一个isInterrupted方法来检测这个标志位，如果被设置了返回true，否则返回false。还需要进一步补充的是：interrupt方法和interrupted方法的区别。可以对任意的一个线程调用interrupt方法，但是只能对当前的线程（即正在运行的线程）调用interrupted方法（此方法是静态方法），所以，在程序中无法清除其他线程的中断状态了。

参考：

《Java多线程设计模式》，中国铁道出版社，2005，结城浩<br>文章来源:<a href='http://localhost/wp2/?p=99'>http://localhost/wp2/?p=99</a><img src ="http://www.blogjava.net/tomjamescn/aggbug/330972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tomjamescn/" target="_blank">tomjamescn</a> 2009-11-15 20:56 <a href="http://www.blogjava.net/tomjamescn/archive/2009/11/15/330972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>