<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5815704953143705619</id><updated>2012-01-31T23:43:34.639-08:00</updated><category term='Python'/><category term='Miscs'/><category term='English'/><category term='Eclipse RCP'/><category term='Dynamic Languages'/><category term='Project Managment'/><category term='Windows'/><category term='Interview'/><category term='Quality'/><category term='Web Development'/><category term='Team Management'/><category term='Algorithm Series'/><category term='Building Scalable Web Sites'/><category term='Programming Life'/><category term='Defects'/><category term='Storage'/><category term='Apache'/><category term='J2SE'/><category term='DS8000'/><category term='IBM'/><category term='Network'/><category term='Continuous Integration'/><category term='Solutions logs'/><category term='C/C++'/><category term='How to'/><category term='J2SE Knowledge Series'/><category term='Problems'/><category term='Design'/><category term='Perl'/><category term='Java'/><category term='Soft Skills'/><category term='Google'/><category term='My Plan for 2010'/><category term='Algorithm'/><category term='Life'/><category term='Firefox'/><category term='Software Issues'/><category term='Good Programming Practices'/><category term='Database'/><category term='Linux'/><category term='Lesson Learned'/><category term='Software Usage'/><category term='Debugging Skills'/><category term='Eclipse'/><category term='Notes'/><category term='Code Example'/><category term='Tools'/><category term='Become a Better You'/><category term='Algorithm Questions Series'/><category term='JavaScript'/><category term='J2EE'/><category term='AIX'/><category term='Coding Skills'/><category term='Basic'/><category term='Learning code'/><title type='text'>Dumb Coder</title><subtitle type='html'>Enjoy life, Enjoy programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default?start-index=101&amp;max-results=100'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>192</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-1719775350183637611</id><published>2011-11-29T04:28:00.001-08:00</published><updated>2011-11-29T04:56:52.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>NetBeans Tips</title><content type='html'>&lt;div class="MsoNormal"&gt;
&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Use
Eclipse Shortcuts&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Tools -&amp;gt;
Options -&amp;gt; Keymap -&amp;gt; select Eclipse profile&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Create
code template&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Tools -&amp;gt;
Options -&amp;gt; Editor -&amp;gt; "Code Templates"&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Press tab
to activate define code template.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: #4f81bd; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Reset the layout of windows&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Windows
-&amp;gt; Reset windows&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: #4f81bd; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Float/Dock views&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Export/Import
Settings&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Open
Options Dialog: Tools &amp;gt; Options&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Click
Export/Import button&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In
NetBeans, we can run a project, run a file, or run a test file.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://netbeanside61.blogspot.com/2009/02/using-command-line-arguments-in.html"&gt;How
to pass in command line arguments while using "Run File" or
"Test File"&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Select
project -&amp;gt; Properties -&amp;gt; Choose Run node -&amp;gt; Type command line
arguments in the Arguments text box.&lt;/span&gt;&lt;/div&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Remote
debug&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: #4f81bd; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Settings in Netbeans:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Debug -&amp;gt;
Attach Debugger&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In the
"Attach" dialog:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Debugger:&amp;nbsp; JPDA&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Connector:
Socket Attach&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Transport:
dt_socket&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Enter host
and port&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: #4f81bd; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Settings in server:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;set
JAVA_OPTS=%JAVA_OPTS%
-Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Update
Sites&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Additional
Development Plugins&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://updates.netbeans.org/netbeans/updates/dev/uc/final/main/catalog.xml.gz"&gt;http://updates.netbeans.org/netbeans/updates/dev/uc/final/main/catalog.xml.gz&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Latest
Development Build&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz"&gt;http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Static
Development UC&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://updates.netbeans.org/netbeans/updates/dev/uc/final/main/catalog.xml"&gt;http://updates.netbeans.org/netbeans/updates/dev/uc/final/main/catalog.xml&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Dynamic
Development UC&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz"&gt;http://deadlock.netbeans.org/hudson/job/nbms-and-javadoc/lastStableBuild/artifact/nbbuild/nbms/updates.xml.gz&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;nbpluginportal&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://plugins.netbeans.org/nbpluginportal/files/nbms/pluginportal-update-center.xml"&gt;http://plugins.netbeans.org/nbpluginportal/files/nbms/pluginportal-update-center.xml&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Netbeans
logs&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Windows XP:
C:\Documents and Settings\joe\.netbeans\6.7\var\log\message.log&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Linux: /home/joe/.netbeans/6.7/var/log/messages.log&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Mac OS X: /Users/joe/.netbeans/6.7/var/log/messages.log&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-1719775350183637611?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/1719775350183637611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=1719775350183637611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/1719775350183637611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/1719775350183637611'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/11/netbeans-tips.html' title='NetBeans Tips'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-4744619260467175070</id><published>2011-11-28T04:24:00.000-08:00</published><updated>2011-11-28T04:33:53.692-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><title type='text'>JBoss Tips</title><content type='html'>&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Commands&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;shutdown.sh -S&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;run.sh -b 0.0.0.0 -c default&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;run.bat –Djboss.server.log.dir=d:/log&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Change ports&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In jboss 5, in $JBoss\server\default\conf\bindingservice.beans\META-INF\bindings-jboss-beans.xml, change the port offset of PortsDefaultBindings.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="XML" name="code"&gt;&amp;lt;bean name="PortsDefaultBindings"&amp;nbsp; class="org.jboss.services.binding.impl.ServiceBindingSet"&amp;gt;
&amp;nbsp; &amp;lt;constructor&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;!-- The port offset --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;parameter&amp;gt;1000&amp;lt;/parameter&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;!-- Set of bindings to which the "offset by X" approach can't be applied --&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;parameter&amp;gt;&amp;lt;null/&amp;gt;&amp;lt;/parameter&amp;gt;
&amp;nbsp; &amp;lt;/constructor&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;To use the port assignments defined by the Ports01Bindings bean, set the jboss.service.binding.set system property to ports-01 when starting the application server.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;run -c myconfig2 -Djboss.service.binding.set=ports-01&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Configuring logging&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;The log4j configuration file is located at server/xxx/conf/jboss-log4j.xml.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Defining a rolling log appender&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="XML" name="code"&gt;&amp;lt;appender name="FILE"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Append" value="true"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="MaxFileSize" value="10MB"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="MaxBackupIndex" value="20"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="Threshold" value="ERROR"/&amp;gt;
&amp;lt;/appender&amp;gt;&lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Defining logging for your application&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;You can log your application by adding category entries to the jboss-log4j.xml file.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="XML" name="code"&gt;&amp;lt;appender name="JBIA" ...&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;param name="File" value="${jboss.server.log.dir}/jbia.log"/&amp;gt;
&amp;lt;/appender&amp;gt;
&amp;lt;category name="org.jbia"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;priority value="DEBUG"/&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;appender-ref ref="JBIA" /&amp;gt;
&amp;lt;/category&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://www.beernut.ca/jim/archives/004978.html"&gt;&lt;span style="color: red;"&gt;Enable http access log&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Edit the server.xml file. For the default server in the default location, it is ${jboss.home}\server\default\deploy\jbossweb.sar\server.xml. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Uncomment the "Access logger" section. The log file will show up in server/default/log/localhost_access_log.{todays_date}.log&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre class="XML" name="code"&gt;&amp;lt;Valve className="org.apache.catalina.valves.AccessLogValve"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prefix="localhost_access_log." suffix=".log"
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pattern="common" directory="${jboss.server.log.dir}" 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; resolveHosts="false" /&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="color: #548dd4; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Configuring startup parameters&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Rename run.bat for example to run-old.bat.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Create another run.bat file and put this line to it:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;set JAVA_OPTS=%JAVA_OPTS% -Xms512m -Xmx1024m -XX:MaxPermSize=512m &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;run-old.bat -b 0.0.0.0 -c default&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Dump SOAP Messages&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;For the case that is not easy to model as a simple DFS request, it is useful to enable the SOAP dump.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;For client side, set "com.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true";&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;For server side, set "com.sun.xml.ws.transport.http.HttpAdapter.dump=true";&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In Jboass, put the following line in newly created run.bat:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Enable remote debug&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In newly created run.bat:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;rem set JAVA_OPTS=%JAVA_OPTS% -Xrunjdwp:transport=dt_socket,address=9999,server=y,suspend=n&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://community.jboss.org/wiki/UsingModjk12WithJBoss"&gt;&lt;span style="color: red;"&gt;Load balancer with Apache&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: #4f81bd; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Configure apache httpd.conf:&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;pre class="XML" name="code"&gt;LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
&amp;lt;Proxy balancer://mycluster&amp;gt;
Order deny,allow
Allow from all
BalancerMember http://node1.mycluster.lan:8080/ route=node1 timeout=15
BalancerMember http://node2.mycluster.lan:8080/ route=node2 timeout=15
ProxySet stickysession=JSESSIONID|jsessionid
# other values: bybusyness|byrequests|bytraffic
ProxySet lbmethod=bytraffic 
&amp;lt;/Proxy&amp;gt;
ProxyPass /jmx-console balancer://mycluster/jmx-console 
ProxyPassReverse /jmx-console&amp;nbsp; http://localhost:9080/jmx-console stickysession=JSESSIONID|jsessionid&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span style="color: #4f81bd; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Configure JBoss&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In jboss, modify {jboss.home}\server\default\deploy\jbossweb.sar\server.xml to configure the jvmRoute for sticky sessions:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;pre class="XML" name="code"&gt;&amp;lt;Engine name="jboss.web" defaultHost="localhost" jvmRoute="node1"&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Modify {jboss.home}\server\default\deployers\jbossweb.deployer\META-INF\war-deployers-jboss-beans.xml:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class="XML" name="code"&gt;&amp;lt;bean name="WebAppClusteringDefaultsDeploye" class="org.jboss.web.tomcat.service.deployers.ClusteringDefaultsDeployer"&amp;gt;
&amp;nbsp; &amp;lt;property name="useJK"&amp;gt;true&amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Resources:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://coldshen.com/blog/index.cfm/2008/9/27/Load-Balancing-your-JBoss-AS-5-cluster-with-Apache-AJP"&gt;http://coldshen.com/blog/index.cfm/2008/9/27/Load-Balancing-your-JBoss-AS-5-cluster-with-Apache-AJP&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://metro.java.net/guide/Logging.html"&gt;Metro Logging&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://www.amazon.com/JBoss-Action-Configuring-Application-Server/dp/1933988029/ref=sr_1_1?ie=UTF8&amp;amp;qid=1322481888&amp;amp;sr=8-1"&gt;JBoss in Action: Configuring the JBoss Application Server&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-4744619260467175070?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/4744619260467175070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=4744619260467175070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/4744619260467175070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/4744619260467175070'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/11/jboss-tips.html' title='JBoss Tips'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-8590480026268634587</id><published>2011-11-22T19:22:00.001-08:00</published><updated>2011-11-22T19:23:37.393-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Useful Notepad++ Tips</title><content type='html'>&amp;nbsp;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;ZH-CN&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-qformat:yes;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin-top:0in;
 mso-para-margin-right:0in;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0in;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Three years
ago, after used Notepad++ after some time, I write one article&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;about &lt;a href="http://yuanyun-kenny.blogspot.com/2008/12/small-tips-on-notepad.html"&gt;NotePad++.&lt;/a&gt;
Three years later, it's time to give it some update.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Common Settings&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Open
"Settings" -&amp;gt; "Preferences...".&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In
"Tab bar" section of General tab, select "Double click to close
document" and "Multi-line".&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;In
"Backup/Auto-Completion" tab, enable auto-completion option, and
choose "Word completion".&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Enable
spell-checker&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Install
Aspell, afterwards enable spell-checker :)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: #0070c0; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Use
"Ctrl+Tab"&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Use
"Ctrl+Tab" to switch between to you last viewed file, and quickly
jump to the file you want.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Useful Plugins:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;How to
install plugins:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Go to
"Plugins" -&amp;gt; "Plugin Manager" -&amp;gt; "Show Plugin
Manager", this will bring up the "Plugin Manager" dialog where
you can find many available plugins.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="color: #0070c0; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;File
switcher&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Usually I
opened many files in Notepad++, 20 - 30+, some files I need edit often, or some
files I just forget to close. So sometimes, it would be hard to find files I
want to edit in Notepad++. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;File
switcher is just the plugin that we need- It presents a sortable list, and we
can type text to filter and find the file we want.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Compare
Plugin - show the difference between 2 files.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;XML Tools -
XML Checker. Can auto-close tags and provides other useful features. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;To Format
XML:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Go to
"Plugins" -&amp;gt; "XML Tools" -&amp;gt; "Pretty print (XML
only -with line breaks) - Ctrl+Alt+Shift+B"&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Explorer
Plugin – a file browser&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Speech
Plugin&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;There are many
other useful plugins that may meet your needs, please explore them.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Resources:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://superuser.com/questions/153109/is-there-a-way-to-manage-tabs-efficiently-in-notepad"&gt;Is
there a way to manage tabs efficiently in Notepad++&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;a href="https://plus.google.com/101157854606139706613/posts/AePsc279Rs6"&gt;https://plus.google.com/101157854606139706613/posts/AePsc279Rs6&lt;/a&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-8590480026268634587?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/8590480026268634587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=8590480026268634587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/8590480026268634587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/8590480026268634587'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/11/useful-notepad-tips.html' title='Useful Notepad++ Tips'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-5164509518927453322</id><published>2011-11-22T05:14:00.001-08:00</published><updated>2011-11-22T05:19:14.003-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Link With Editor in Eclipse</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;ZH-CN&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-qformat:yes;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin-top:0in;
 mso-para-margin-right:0in;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0in;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:TrackMoves/&gt;
  &lt;w:TrackFormatting/&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:DoNotPromoteQF/&gt;
  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;
  &lt;w:LidThemeAsian&gt;ZH-CN&lt;/w:LidThemeAsian&gt;
  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;
  &lt;w:Compatibility&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:SplitPgBreakAndParaMark/&gt;
   &lt;w:DontVertAlignCellWithSp/&gt;
   &lt;w:DontBreakConstrainedForcedTables/&gt;
   &lt;w:DontVertAlignInTxbx/&gt;
   &lt;w:Word11KerningPairs/&gt;
   &lt;w:CachedColBalance/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
  &lt;m:mathPr&gt;
   &lt;m:mathFont m:val="Cambria Math"/&gt;
   &lt;m:brkBin m:val="before"/&gt;
   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;
   &lt;m:smallFrac m:val="off"/&gt;
   &lt;m:dispDef/&gt;
   &lt;m:lMargin m:val="0"/&gt;
   &lt;m:rMargin m:val="0"/&gt;
   &lt;m:defJc m:val="centerGroup"/&gt;
   &lt;m:wrapIndent m:val="1440"/&gt;
   &lt;m:intLim m:val="subSup"/&gt;
   &lt;m:naryLim m:val="undOvr"/&gt;
  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
  DefSemiHidden="true" DefQFormat="false" DefPriority="99"
  LatentStyleCount="267"&gt;
  &lt;w:LsdException Locked="false" Priority="0" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;
  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;
  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;
  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;
  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;
  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"
   UnhideWhenUsed="false" Name="Table Grid"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;
  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;
  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;
  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;
  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"
   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"
   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"
   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"
   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;
  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;
  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;
  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"
   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;
  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;
  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-priority:99;
 mso-style-qformat:yes;
 mso-style-parent:"";
 mso-padding-alt:0in 5.4pt 0in 5.4pt;
 mso-para-margin-top:0in;
 mso-para-margin-right:0in;
 mso-para-margin-bottom:10.0pt;
 mso-para-margin-left:0in;
 line-height:115%;
 mso-pagination:widow-orphan;
 font-size:11.0pt;
 font-family:"Calibri","sans-serif";
 mso-ascii-font-family:Calibri;
 mso-ascii-theme-font:minor-latin;
 mso-hansi-font-family:Calibri;
 mso-hansi-theme-font:minor-latin;
 mso-bidi-font-family:"Times New Roman";
 mso-bidi-theme-font:minor-bidi;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;I
remembered that in the old versions of eclipse(maybe 3.1), in the package and
project explorer, it will show the current java class that is opened in the
editor. When I change to another java class, it the explorer will automatically
scroll to display the new class.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;It seems
this feature is gone in later release.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;But the
fact is that it is hidden - by default disabled, to enable it, you just need
toggle the"Link with Editor" button in Package/Project/ or Navigator
toolbar.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://www.mainelydesign.com/theme/mainelydesign/img/uploads/eclipse-screen-shot-linking.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="311" src="http://www.mainelydesign.com/theme/mainelydesign/img/uploads/eclipse-screen-shot-linking.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Resources:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="http://www.mainelydesign.com/blog/view/best-eclipse-feature-link-with-editor"&gt;Best
Eclipse Feature: Link With Editor&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-5164509518927453322?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/5164509518927453322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=5164509518927453322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/5164509518927453322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/5164509518927453322'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/11/link-with-editor-in-eclipse.html' title='Link With Editor in Eclipse'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-1922370454316100783</id><published>2011-11-22T05:04:00.000-08:00</published><updated>2011-11-22T05:04:09.912-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Use Working Set to group projects in Eclipse</title><content type='html'>&lt;br /&gt;
&lt;div style="border-bottom: solid #4F81BD 1.0pt; border: none; mso-border-bottom-themecolor: accent1; mso-element: para-border-div; padding: 0in 0in 4.0pt 0in;"&gt;
&lt;div align="center" class="MsoTitle" style="text-align: center;"&gt;
Use Working Set to
organize and group related projects visually in Eclipse&lt;/div&gt;
&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Usually, we
develop or maintain different projects at same time, each project&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;has
multiple modules, or related projects, such as test or demo projects.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;We want to
organize related projects visually, so in eclipse, it would look like:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;projecta&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;---projecta-module1&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;---projecta-module2&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;---projecta-module3&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;---projecta-other-modules&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;projectb&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;---projectb--related-modules&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;To achieve
this in Eclipse:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Create one
working set, add related projects into it, and then (important step here), in
project(or package) explorer, click the top down button -&amp;gt; "Top level
elements" -&amp;gt; choose "Working Sets".&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;Resources:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=362968"&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=362968&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-1922370454316100783?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/1922370454316100783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=1922370454316100783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/1922370454316100783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/1922370454316100783'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/11/use-working-set-to-group-projects-in.html' title='Use Working Set to group projects in Eclipse'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-4674954826300300742</id><published>2011-10-03T03:32:00.001-07:00</published><updated>2011-11-22T05:04:32.165-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><title type='text'>Fail to start JBoss5 - Common unexpected</title><content type='html'>&lt;h3 align="center" style="text-align: center;"&gt;





&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 14pt; line-height: 115%;"&gt;Unable to start JBoss 5 -
\Common was unexpected at this time&lt;/span&gt;&lt;/h3&gt;
&lt;h3 align="center" style="margin-left: .5in; mso-list: l0 level1 lfo1; text-align: center; text-indent: -.25in;"&gt;





&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 14pt; line-height: 115%;"&gt;--Don't
use quotes in path variable&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;Today,
I download JBoss 5 in my Windows 7 - 64 bit machine, and try to use run.bat to
start the server, but it fails, and reports error:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;\Common
was unexpected at this time.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;Google
searched, but found nothing useful.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;So I
tried to take a look at the run.bat, first I comment the first row "@echo
off", so I will now where it stops with the error above. I located the
source of the errors:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;if not
"x%JBOSS_NATIVE_HOME%" == "x" (&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;&amp;nbsp; set "PATH=%JBOSS_NATIVE_HOME%;%PATH%;%JBOSS_HOME%\bin"&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;&amp;nbsp; set JAVA_OPTS=%JAVA_OPTS%
"-Djava.library.path=%JBOSS_NATIVE_HOME%;%PATH%;%JBOSS_HOME%\bin"&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;Then
I check the PATH environment:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;"C:\Program
Files (x86)\Common Files\EMC";C:\Program Files\Perforce;%JAVA_HOME%\bin;%ANT_HOME%\bin;%MVN_HOME%\bin&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;Yeah,
find out the culprit: the quotes around the path to EMC common files -
"C:\Program Files (x86)\Common Files\EMC"&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;After
removed the quotes, start a new command line, JBoss can be started with no
problem.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in;"&gt;
&lt;span style="font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 12pt;"&gt;Lesson
learned: don't put quotes in your environment variables, such as PATH, JAVA_HOME
etc, this may make scripts broken. This also applies when installation program
update these variables.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-4674954826300300742?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/4674954826300300742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=4674954826300300742' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/4674954826300300742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/4674954826300300742'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/10/fail-to-start-jboss5-common-unexpected.html' title='Fail to start JBoss5 - Common unexpected'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-3964502585698807323</id><published>2011-06-08T06:43:00.000-07:00</published><updated>2011-06-08T06:43:12.386-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interview'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Interview Questions – Databases</title><content type='html'>&lt;br /&gt;
&lt;h3 align="center" style="text-align: center;"&gt;


&lt;span lang="EN-US"&gt;Interview Questions
– Databases&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Why Normalize? &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;1. Reduce Redundancy&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;I. Redundancy would waste more space.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;One obvious drawback of data repetition is that it
consumes more space and resources than is necessary. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;II. Redundancy may cause inconsistency.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Moreover, redundancy introduces the possibility for error,
and exposes us to inconsistencies whenever the data is not maintained in the
same way. for example, these redundant data are not updated at same time.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;2. Prevent insert, delete, update anomaly.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Insert Anomaly&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The insert anomaly refers to a situation wherein one
cannot insert a new row into a relation because of an artificial dependency on
another relation.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Delete Anomaly&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;It refers to a situation wherein a deletion of data about
one particular entity causes unintended loss of data that characterizes another
entity.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Update Anomaly&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The update anomaly refers to a situation where an update
of a single data value requires multiple rows of data to be updated.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Example: Product, Customer, Invoice.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;First Normal Form: Eliminating Repeating Data&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A relation is said to be in first normal form when it
contains no multivalued attributes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;To transform unnormalized relations into first normal
form, we must move multivalued attributes and repeating groups to new relations&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Second Normal Form: Eliminating Partial Dependencies&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Arelationissaidtobein second normal formif itmeets both
the following criteria:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; The relation
is in first normal form.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; All non-key
attributes are functionally dependent on the entire primary key.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Second normal form only applies to relations where we have
concatenated primary keys. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Once we find a second normal form violation, the solution
is to move the attribute(s) that is (are) partially dependent to a new relation
where it depends on the entire key instead of part of the key.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Attribute B is functionally dependent on attribute A if at
any moment in time, there is no more than one value of attribute B associated
with a given value of attribute A.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In another word, it means A determines attribute B, or that
A is a determinant (unique identifier) of attribute B. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In the INVOICE relation,we can easily see thatCustomerNumber
is functionally dependent on Invoice Number because at any point in time, there
can be only one value of Customer Number associated with a given value of
Invoice Number.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Anti-example&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;INVOICE LINE ITEM: # Invoice Number, # Product Number,
Product Description(only dependent on product number), Quantity, Unit Price,
Extended Amount&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Third Normal Form: Eliminating Transitive Dependencies&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Arelationissaidtobein third normal formif itmeets both the
following criteria:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; The relation
is in second normal form.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; There is no
transitive dependence (that is, all the non-key attributes depend only on the
primary key).&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;To transforma second normal formrelation into third normal
form, simplymove any transitively dependent attributes to relations where they
depend only on the primary key. Be careful to leave the attribute on which they
depend in the original relation as a foreign key.Youwill need it to reconstruct
the original user viewvia a join.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;An attribute that depends on another attribute that is not
the primary key of the relation is said to be transitively dependent.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Anti-example&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;INVOICE: # Invoice Number, Customer Number, Customer
Name(dependent on primary key attribute: Customer Number), Customer Address...,
Terms, Ship Via, Order Date, Total Order Amount&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The third normal form violation—a non-key attribute
determining another non-key attribute&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Boyce-Codd Normal Form - BCNF Form&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Boyce-Codd normal form (BCNF) is a stronger version of
third normal form. It addresses anomalies that occur when a non-key attribute
is a determinant of an attribute that is part of the primary key (that is, when
an attribute that is part of the primary key is functionally dependent on a
non-key attribute).&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The Boyce-Codd normal form has two requirements:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; The relation
must be in third normal form.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; No
determinants exist that are not either the primary key or a candidate key for the
table. That is, a non-key attribute may not uniquely identify (determine) any other
attribute, including one that participates in the primary key.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The solution is to split the unwanted determinant to a
different table.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Anti-example&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;#Customer Number, #Product Line, Support Specialist Number&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Fourth Normal Form&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;An additional anomaly surfaces when two or more
multivalued attributes are included in the same relation. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Denormalization&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Normalization leads tomore relations,which translates
tomore tables and more joins.When database users suffer performance problems
that cannot be resolved by other means, then denormalization may be required.
Most database experts consider denormalization a last resort, if not an act of
desperation.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Possible denormalization steps include the following:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Recombining
relations that were split to satisfy normalization rules&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Storing
redundant data in tables&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Storing
summarized data in tables&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;What Is a
Transaction?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A transaction is a unit of work that is composed of a
discrete series of actions that must be either completely processed or not
processed at all.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Transactions have properties ACID (Atomicity, Consistency,
Isolation, Durability).&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Atomicity&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A transaction must remain whole. That is, it must
completely succeed or completely fail. When it succeeds, all changes that were
made by the transaction must be preserved by the system. Should a transaction fail,
all changes that were made by it must be completely undone.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Consistency&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A transaction should transform the database from one consistent
state to another consistent state. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Isolation&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Each transaction should carry out its work independent of
any other transaction that might occur at the same time.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体;"&gt;•&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; Durability&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Changes made by completed transactions should remain permanent&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Read Committed
Isolation Level&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Read Committed is the default isolation level in
PostgreSQL. When a transaction runs on this isolation level, a SELECT query
sees only data committed before the query began; it never sees either
uncommitted data or changes committed during query execution by concurrent
transactions.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In effect, a SELECT query sees a snapshot of the database
as of the instant that that query begins to run. Notice that two successive
SELECT commands can see different data, even though they are within a single
transaction, if other transactions commit changes during execution of the first
SELECT. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://www.mpopp.net/?s=TX+isolation+levels"&gt;&lt;span style="color: red;"&gt;Serializable
Isolation Level&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The level Serializable provides the strictest transaction
isolation. This level emulates serial transaction execution, as if transactions
had been executed one after another, serially, rather than concurrently.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In REPEATABLE READ, one transaction will not read
committed change of another transaction.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;set session transaction isolation level serializable;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Client 1:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;mysql&amp;gt; start transaction;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;mysql&amp;gt; select * from tt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;CLIENT 2:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;mysql&amp;gt; update tt set d=2 where d=4;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ERROR 1205 (HY000): Lock wait timeout exceeded; try
restarting transaction &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;This time, client 2 cannot update the row. After a few
seconds of waiting, the attempt to update a row ends with the error message
“Lock wait timeout exceeded”.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Both REPEATABLE READ and SERIALIZABLE don’t allow dirty
reads, nonrepeatable reads and phantom reads to happen. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;While REPEATABLE READ still allows another client to
modify data, while he performs a transaction. The change made by concurrent
transaction would be invisible to current transaction.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;SERIALIZABLE strictly disallows other transaction change
data current transaction operates on.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Serializable
vs. Snapshot&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;They are SERIALIZABLE and SNAPSHOT. They are both made
available in order to avoid dirty, non-repeatable or phantom reads, but they do
so using different methods. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;SERIALIZABLE&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The SERIALIZABLE level prevents phantom reads by using
range locks. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;SERIALIZABLE transactions take range locks in order to
prevent Phantom Reads.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;SNAPSHOT&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;While SERIALIZABLE uses locks, instead SNAPSHOT uses a
copy of committed data. Since no locks are taken, when subsequent changes are
made by concurrent transactions, those changes are allowed and not blocked.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;If you try to make a change to some data and that data has
already been changed by concurrent transaction, you will get update conflict
error message.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v9r5/index.jsp?topic=/com.ibm.db2.luw.admin.dbobj.doc/doc/c0020180.html"&gt;&lt;span style="color: red;"&gt;Types of Indexes&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://it.toolbox.com/blogs/programming-life/sql-performance-get-the-right-index-7996"&gt;http://it.toolbox.com/blogs/programming-life/sql-performance-get-the-right-index-7996&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://blog.csdn.net/laodao1/archive/2009/10/21/4709516.aspx"&gt;http://blog.csdn.net/laodao1/archive/2009/10/21/4709516.aspx&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://zhidao.baidu.com/question/87078855.html"&gt;http://zhidao.baidu.com/question/87078855.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Non-unique
indexes&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A non-unique index is one in which any key value may occur
multiple times. This type of index is defined with the keyword INDEX or KEY.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ALTER TABLE department ADD INDEX dept_name_idx (name);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Unique indexes&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Unique indexes are indexes that help maintain data
integrity by ensuring that no two rows of data in a table have identical key
values, the exception is that NULL values may occur multiple times.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ALTER TABLE department ADD UNIQUE dept_name_idx (name);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;A PRIMARY KEY&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; also is a unique-valued
index. It is similar to a UNIQUE index, but has additional restrictions:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A table may have multiple UNIQUE indexes, but at most one
PRIMARY KEY.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A UNIQUE index can contain NULL values, whereas a PRIMARY
KEY cannot.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;A FULLTEXT index &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;is specially designed for
text searching.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;SHOW INDEX FROM department \G&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Index
implementation&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;B-tree indexes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Branch nodes are used for navigating the tree, while leaf
nodes hold the actual values and location information.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Bitmap indexes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Although B-tree indexes are great at handling columns that
contain many different values, they can become unwieldy when built on a column
that allows only a small number of values. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;For columns that contain only a small number of values
across a large number of rows (known as low-cardinality data), Oracle Database
includes bitmap indexes, which generate a bitmap for each value stored in the
column.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;CREATE BITMAP INDEX acc_prod_idx ON account (product_cd);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://www.ovaistariq.net/521/understanding-innodb-clustered-indexes/"&gt;&lt;span style="color: red;"&gt;Clustered Indexes vs Non-clustered Indexes&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://www.devtoolshed.com/content/clustered-index-vs-non-clustered-index-sql-server"&gt;http://www.devtoolshed.com/content/clustered-index-vs-non-clustered-index-sql-server&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms177443.aspx"&gt;Clustered Index
Structures&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms177484.aspx"&gt;Nonclustered Index
Structures&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Clustered Indexes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A clustered index determines the physical storage order of
the data in a table. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A table can only have a single clustered index. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The leaf nodes of a clustered index contain the data pages
of the underlying table. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;By default, primary key creates a clustered index.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Query on clustered index is fast, as it only requires one
lookup.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Insert is slower, as the insert must be added in the exact
right place in the clustered index. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Non-clustered Index&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Non-clustered indexes have the same B-tree structure as
clustered indexes, except:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The data rows of the underlying table are not sorted and
stored in order based on their non0clustered keys.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A table can contain multiple (up to 255) non-clustered
index. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The leaf nodes of non-clustered Index do not consist of
the data pages, only contain index pages:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;If clustered index present, non-clustered index points back
to the data pages in the clustered index. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;If no clustered index, non-clustered indexes point to the
actual data in the table.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Logical order of the index does not match the physical
stored order of the rows on disk.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A unique key by default creates a non-clustered index.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A non-clustered Index has separate storage space different
from the table storage.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;This means that non-clustered indexes require a lot more
hard disk space compared to clustered indexes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Query on non-clustered indexes requires two lookups. First
a lookup for the non-clustered index itself, then a lookup for the primary key.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Advantages and
disadvantages of indexes&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0005052.htm"&gt;http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/c0005052.htm&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://www.mysqlfaqs.net/mysql-faqs/Indexes/What-are-advantages-and-disadvantages-of-indexes-in-MySQL"&gt;http://www.mysqlfaqs.net/mysql-faqs/Indexes/What-are-advantages-and-disadvantages-of-indexes-in-MySQL&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The optimizer chooses an
index scan if the index columns are referenced in the SELECT statement and if
the optimizer estimates that an index scan will be faster than a table scan. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Advantages of
Index&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Query optimization:
Indexes make search queries much faster, because normally Index files generally
are smaller and require less time to read than an entire table, particularly as
tables grow larger. In addition, the entire index may not need to be scanned.
The predicates that are applied to the index reduce the number of rows to be
read from the data pages. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Uniqueness: Indexes like
primary key index and unique index help to avoid duplicate row data.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Disadvantages
of indexes&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Every time a row is
added, removed or updated, all indexes on that table must be modified.
Therefore, the more indexes you have the more work the server needs to do to
keep all schema objects up-to-date, which tends to slow things down.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Each index requires
storage or disk space. The exact amount depends on the size of the table and
the size and number of columns in the index. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Each index potentially
adds an alternative access path for a query for the optimizer to consider,
which increases the compilation time.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The best strategy is to
add an index when a clear need arises. If you need an index for only special
purposes, such as a monthly maintenance routine, you can always add the index,
run the routine, and then drop the index until you need it again.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://www.allinterview.com/showanswers/11428.html"&gt;&lt;span style="color: red;"&gt;Types of Constraints&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Constraint is a rule which can not be violated by end
users.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;There are five types of constraints:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Not null constraints&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;:-which does not allows
NULL values.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Unique constraints&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;:-which does not allow
duplication but allows NULL values.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Primary key constraints&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;:-the key which does not allow
duplication and null values. One table can only have one primary key.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Foreign key constraints&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;:-the key used to refer
primary key defined field in another table and it allows duplication.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Check constraint&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Restrict the allowable values for a column&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Practice&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;CONSTRAINT fk_product_type_cd FOREIGN KEY
(product_type_cd)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp; REFERENCES
product_type (product_type_cd),&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;CONSTRAINT pk_product PRIMARY KEY (product_cd)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ALTER TABLE product&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ADD CONSTRAINT pk_product PRIMARY KEY (product_cd);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ALTER TABLE product&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ADD CONSTRAINT fk_product_type_cd FOREIGN KEY
(product_type_cd)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp; REFERENCES
product_type (product_type_cd);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Constraints and Indexes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Constraint creation sometimes involves the automatic
generation of an index. However, database servers behave differently regarding
the relationship between constraints and indexes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Cascading Constraints&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ALTER TABLE product&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;ADD CONSTRAINT fk_product_type_cd FOREIGN KEY
(product_type_cd)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp; REFERENCES
product_type (product_type_cd)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp; &lt;span style="color: blue;"&gt;ON UPDATE CASCADE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;&amp;nbsp; ON
DELETE CASCADE;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;View&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://en.wikipedia.org/wiki/View_%28database%29"&gt;http://en.wikipedia.org/wiki/View_%28database%29&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/28457;pt=28420/*"&gt;http://manuals.sybase.com/onlinebooks/group-as/asg1250e/sqlug/@Generic__BookTextView/28457;pt=28420/*&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://wiki.answers.com/Q/What_are_the_advantages_and_disadvantages_of_views_in_a_database"&gt;http://wiki.answers.com/Q/What_are_the_advantages_and_disadvantages_of_views_in_a_database&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A view consists of a
stored query accessible as a virtual table composed of the result set of a
query. Unlike ordinary tables (base tables), a view is a virtual table, does
not form part of the physical schema: it is a dynamic, virtual table computed
or collated from data in the database.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Advantages of
View&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Views can provide advantages over tables:&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 24.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;* Views can be used to
make complex queries easy. A user can use a simple query on a view to display
data from multiple tables without having the knowledge of how to join tables in
queries. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 24.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;* Views can simplify
Statements for User, we can define frequently used joins, projections, and
selections as views so that users do not have to specify all the conditions and
qualifications each time an operation is performed on that data.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 24.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;* Focus on the data that
interests them and on the tasks for which they are responsible. Data that is
not of interest to a user can be left out of the view.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 24.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;* Different views can be
created from the same data per the requirements, in this way we can display
different data for different users.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 24.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;* Provide additional
level of security, through a view, users can query and modify only the data
they can see. The rest of the database is neither visible nor accessible, so we
can hide sensitive data from certain groups of users. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Views take
very little space to store; the database contains only the definition of a
view, not a copy of all the data it presents.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Disadvantages
of Views&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * View affects
performance, querying from view takes more time than directly querying from the
table.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * View depends
on the table objects, when table is dropped, the view becomes inactive.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Rows available
through a view are not sorted and are not ordered either, we can not use order
by when define view.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Read-only vs.
updatable views&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;We can define views as
read-only or updatable. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Materialized_view"&gt;Materialized views&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Oracle, DB2 supports materialized views - pre-executed,
non-virtual views commonly used in data warehousing. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In materialized view, the
query result is cached as a concrete table that may be updated from the
original base tables from time to time. This enables much more efficient
access, at the cost of some data being potentially out-of-date. The accuracy of
a materialized view depends on the frequency or trigger mechanisms behind its
updates.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;It is most useful in data
warehousing scenarios, where frequent queries of the actual base tables can be
extremely expensive.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Stored
Procedure&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.dc.doc/dc/c_spbenefits.htm"&gt;http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.dc.doc/dc/c_spbenefits.htm&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://searchsqlserver.techtarget.com/news/1052737/Why-use-stored-procedures"&gt;http://searchsqlserver.techtarget.com/news/1052737/Why-use-stored-procedures&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Stored_procedure"&gt;http://en.wikipedia.org/wiki/Stored_procedure&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A stored procedure is a precompiled
subroutine on in database. Stored procedures are used to consolidate and
centralize logic that was originally implemented in applications. Large or
complex processing that might require the execution of several SQL statements
can be moved into stored procedures, and all applications call the procedures
only.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Benefits of
using stored procedures&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Reduced
network usage between clients and servers&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The stored procedure
performs processing on the database server, without transmitting unnecessary
data across the network. Only the records that are actually required by the
client application are transmitted. Using a stored procedure can result in
reduced network usage and better overall performance. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The more SQL statements that you group together in a
stored procedure, the more you reduce network usage and the time that database
locks are held. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Stored
procedures are tunable.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; By having procedures that handle the database work for
your interface, you eliminate the need to modify application source code to
improve a query's performance. Changes can be made to the stored procedures
that are transparent to the front-end interface. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Stored procedures
are usually written by database developers/administrators. Persons holding
these roles are usually more experienced in writing efficient queries and SQL
statements.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; If you have your people performing the tasks to which they are best
suited, then you will ultimately produce a better overall application. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Improved
security&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;, by including database privileges with stored procedures that use
static SQL, the database administrator (DBA) can improve security, because you
can enable controlled access to sensitive data by appropriate selection of the
privileges a program has when it executes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Centralized security,
administration, and maintenance for common routines, by managing shared logic
in one place at the server, you can simplify security, administration, and
maintenance.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Disadvantages:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;We encapsulate business
logic in stored procedure, but stored procedures are incredibly tightly coupled
to the specific database, it would be hard to switch from one database to another
database vendor.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Trigger&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Database_trigger"&gt;http://en.wikipedia.org/wiki/Database_trigger&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://www.allinterview.com/showanswers/20053.html"&gt;http://www.allinterview.com/showanswers/20053.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;A database trigger is
procedural code that is automatically executed in response to certain events on
a particular table or view in a database. Triggers are commonly used to prevent
changes, log changes, audit changes, enhance changes, enforce or execute business
rules.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Advantages of Triggers&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The Main advantage of the
trigger is automatic, whenever the table is affected by inserts update, delete,
or query that time, the triggers will implicitly call.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Disadvantages of Triggers&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Triggers run on every update made to the table therefore
it adds more load to the database and cause the system to run slower.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;It is not possible to track or debug triggers. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Viewing a trigger is difficult compared to tables, views
stored procedures. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Triggers execution is invisible; it is easy to forget
about triggers.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://www.oracleoverflow.com/questions/592/what-are-the-advantages-of-a-stored-procedure-over-a-database-trigger"&gt;&lt;span style="color: red;"&gt;Difference between stored-procedure and trigger&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;They serve two different
purposes. A procedure executes only when called. A trigger is 'triggered' by a
system event and allows to intercede on insert, update, delete.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="text-indent: 21.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;We can write a trigger
that calls a procedure. We can't really write a procedure that 'calls' a
trigger.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-3964502585698807323?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/3964502585698807323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=3964502585698807323' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/3964502585698807323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/3964502585698807323'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/interview-questions-databases.html' title='Interview Questions – Databases'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-5041357096690131912</id><published>2011-06-08T05:59:00.000-07:00</published><updated>2011-06-10T20:05:34.815-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2SE'/><category scheme='http://www.blogger.com/atom/ns#' term='Interview'/><title type='text'>Notes on Annotations</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:DrawingGridVerticalSpacing&gt;7.8 pt&lt;/w:DrawingGridVerticalSpacing&gt;
  &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;
  &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:Compatibility&gt;
   &lt;w:SpaceForUL/&gt;
   &lt;w:BalanceSingleByteDoubleByteWidth/&gt;
   &lt;w:DoNotLeaveBackslashAlone/&gt;
   &lt;w:ULTrailSpace/&gt;
   &lt;w:DoNotExpandShiftReturn/&gt;
   &lt;w:AdjustLineHeightInTable/&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
 &lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin:0cm;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:10.0pt;
 font-family:"Times New Roman";
 mso-fareast-font-family:"Times New Roman";
 mso-ansi-language:#0400;
 mso-fareast-language:#0400;
 mso-bidi-language:#0400;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;h3 align="center" style="text-align: center;"&gt;
&lt;span lang="EN-US"&gt;Notes on
Annotations&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations are tags that we insert into we source code so
that some tool can process them. The tools can operate on the source level, or they
can process class files into which the compiler has placed annotations.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations provide a formalized way to add information to
the code so that we can easily use that data at some later point.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations are partly motivated by a general trend toward
combining metadata with source-code files, instead of keeping it in external
documents.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Using annotations, we can keep this metadata in the Java
source code, and have the advantage of cleaner looking code, compile-time type
checking and the annotation API to help build processing tools for our
annotations.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;To benefit from annotations, we need to select a
processing tool. We insert annotations into our code that our processing tool understands,
and then apply the processing tool.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations can be processed at runtime, at the source code
level, or at the bytecode level.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Defining annotations
&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Defining annotations is very easy; Annotation type
declarations are similar to normal interface declarations. An at-sign (@)
precedes the interface keyword. Then we declare meta-annotations on the
annotation interface such as @Target to define where we can apply this
annotation (a method or a field, for example), @Retention to define whether the
annotations are available in the source code (SOURCE), in the class files
(CLASS), or at run time (RUNTIME).&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Then we declare elements in this annotation interface,
elements look like interface methods, except that we can declare default
values. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Methods can have default values. Method declarations must
not have any parameters or a throws clause. Return types are restricted to
primitives, String, Class, enums, annotations, and arrays of the preceding
types. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations can be read from source files, class files, or
reflectively at run time.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The annotations don't do anything by themselves, without
tools to read them; annotations are hardly more useful than comments.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;We need write annotation processors to read and process
annotations. Java SE5 provides extensions to the reflection API to read
annotations defined in java class.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotation
Syntax&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;An annotation without any elements is called a marker
annotation.&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;An annotation is defined by an annotation interface, Each element
declaration has the form: type elementName() default value;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Each annotation has the format&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@AnnotationName(elementName1=value1, elementName2=value2,
. . .)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The order of the elements does not matter. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Two special shortcuts can simplify annotations:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;If no elements are specified, then we don't need to use parentheses:
@BugReport&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The other shortcut is the single value annotation. If an
element has the special name value, and no other element is specified, then we
can omit the element name and the = symbol.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@ActionListenerFor("yellowButton") is same as
@ActionListenerFor(value="yellowButton")&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Limitations
when implement annotations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The methods of an annotation interface can have
no parameters and no throws clauses, and they cannot be generic.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The type of an annotation element is one of the
following:&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; A primitive type, String, Class (with an optional type parameter such
as Class&lt;!--? extends MyClass--&gt;), an enum type, an annotation type, 1-dimensional
arrays of the preceding types (an array of arrays is not a legal element type)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: #339966; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The compiler will report an error if you try
to use any other types. Note that you are not allowed to use any of the wrapper
classes, but because of autoboxing this isn’t really a limitation. You can also
have elements that are themselves annotations.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;//When a Target
meta-annotation is not present on an&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;//annotation type
declaration, the declared type may be used on any&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;//program element.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;//If no Retention annotation
is present on an annotation type declaration, &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;//the retention policy
defaults to RetentionPolicy.CLASS.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;@interface&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="color: #646464; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;BugReport&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; {&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;enum&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; Status {&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="color: #0000c0; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;UNCONFIRMED&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;, &lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="color: #0000c0; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;CONFIRMED&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;, &lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="color: #0000c0; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;FIXED&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;, &lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="color: #0000c0; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;NOTABUG&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;};&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;boolean&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; showStopper() &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;default&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;false&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String assignedTo() &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;default&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="color: #2a00ff; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;"[none]"&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Class&lt;!--?--&gt; testCase() &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;default&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; Void.&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;; &lt;/span&gt;&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// we can use class&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Status status() &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;default&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; Status.&lt;/span&gt;&lt;i&gt;&lt;span lang="EN-US" style="color: #0000c0; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;UNCONFIRMED&lt;/span&gt;&lt;/i&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;; &lt;/span&gt;&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// we can use
enum&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Reference ref() &lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;default&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="color: #646464; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;@&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;Reference(); &lt;/span&gt;&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// an
annotation type&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String[] reportedBy();&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// Compile error: Invalid type Object for
the annotation attribute&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// BugReport.object; only primitive type,
String,&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// Class, annotation, enumeration are
permitted or 1-dimensional arrays thereof&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;Object object();&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotation values must be compile-time
constants, so you can't call method to set annotation values.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: #3f7f5f; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;// Compile error: The value
for annotation attribute ActionListenerFor.source must be a constant expression&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: red; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;@ActionListenerFor(source =
"blueButton" + anyMethod())&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;An annotation element can never be set to null.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Not even a
default of null is permissible.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations don’t support inheritance&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;, you cannot
use the “extends” keyword with @interfaces. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;If annotations (retention class) are evaluated by the compiler,
&lt;span style="color: blue;"&gt;all element values must be compile-time constants.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;An item can have multiple annotations, provided they
belong to different types. &lt;span style="color: blue;"&gt;We cannot use the same
annotation type more than once &lt;/span&gt;when annotating a particular item. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;If this is a problem, we can design an annotation that has
a value of an array of simpler annotations.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Default value
constraints &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The compiler is quite picky about default element values.
No element can have an unspecified value. This means that elements must either
have default values or values provided by the class that uses the annotation. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;There is another restriction, which is that none of the
non-primitive type elements are allowed to take null as a value, either when
declared in the source code or when defined as a default value in the
annotation interface. You need define special value as default value.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;It is legal to apply an annotation to itself.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; For example, the
@Documented annotation is itself annotated as @Documented.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations for local variables can only be
processed at the source level.&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Class files do not describe local variables.
Therefore, all local variable annotations are discarded when a class is compiled.
Similarly, annotations for packages are not retained beyond the source level.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: #339966; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Implementation detail&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;All annotation interfaces implicitly extend the interface
java.lang.annotation.Annotation. That interface is a regular interface, not an
annotation interface.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Standard
Annotations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Meta-Annotations&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@Target&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The @Target meta-annotation restricts the items to which the
annotation applies.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@Target(ElementType.ANNOTATION_TYPE)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;public enum ElementType &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;{TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,,ANNOTATION_TYPE,PACKAGE}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;An annotation without an @Target restriction can be
applied to any program element. The compiler checks that we apply an annotation
only to a permitted item.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@Retention&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The @Retention meta-annotation specifies how long an
annotation is retained. We specify at most one of the values.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@Retention(RetentionPolicy.RUNTIME)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;SOURCE&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Annotations are not included in class files.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;CLASS&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Annotations are included in class files, but the
virtual machine need not load them.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;RUNTIME&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Annotations are included
in class files and loaded by the virtual machine. They are available through the
reflection API.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;public enum RetentionPolicy {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;* Annotations are to be discarded by the
compiler.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;SOURCE,&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;* Annotations are to be recorded in the class
file by the compiler&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;* but need not be retained by the VM at run
time. This is the default behavior.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;CLASS,&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;* Annotations are to be recorded in the class
file by the compiler and&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;* retained by the VM at run time, so they may
be read reflectively.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;RUNTIME&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;If no Retention annotation is present on an annotation
type declaration, the retention policy defaults to RetentionPolicy.CLASS.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The&lt;span style="color: blue;"&gt; @Documented &lt;/span&gt;meta-annotation
gives a hint to documentation tools such as Javadoc.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@Inherited&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The @Inherited meta-annotation applies only to annotations
for classes. When a class has an inherited annotation, then all of its subclasses
automatically have the same annotation. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations for
Compilation&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@Deprecated&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The &lt;span style="color: blue;"&gt;@SuppressWarnings &lt;/span&gt;annotation
tells the compiler to suppress warnings of a particular type:
@SuppressWarnings("unchecked")&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The &lt;span style="color: blue;"&gt;@Override &lt;/span&gt;annotation
applies only to methods. The compiler checks that a method with this annotation
really overrides a method from the superclass.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The &lt;span style="color: blue;"&gt;@Generated &lt;/span&gt;annotation is
intended for use by code generator tools. Any generated source code can be annotated
to differentiate it from programmer-provided code. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Annotations for Managing Resources&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;@PostConstruct, @PreDestroy, @Resource&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Practical usage&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Source-Level Annotation Processing &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;One use for annotation is the automatic generation of "side
files" that contain additional information about programs&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Bytecode Engineering&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;We can process class files using Bytecode Engineering
Library (BCEL).&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Generating external files &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;a href="http://code.google.com/p/jacli/"&gt;Annotation based
command line interface parser&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;How Junit process annotation.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Resources:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;a href="http://www.amazon.com/Core-Java-Vol-Advanced-Features/dp/0132354799/ref=sr_1_2?ie=UTF8&amp;amp;qid=1307537699&amp;amp;sr=8-2"&gt;Core
Java, Vol. 2: Advanced Features, 8th Edition&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;a href="http://www.amazon.com/Thinking-Java-4th-Bruce-Eckel/dp/0131872486/ref=sr_1_1?ie=UTF8&amp;amp;qid=1307537723&amp;amp;sr=8-1"&gt;Thinking
in Java&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-5041357096690131912?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/5041357096690131912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=5041357096690131912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/5041357096690131912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/5041357096690131912'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/notes-on-annotations.html' title='Notes on Annotations'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-5868685059733934030</id><published>2011-06-06T10:02:00.001-07:00</published><updated>2011-06-06T10:02:04.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Building Scalable Web Sites'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Development'/><title type='text'>Notes on Hadoop</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:DrawingGridVerticalSpacing&gt;7.8 pt&lt;/w:DrawingGridVerticalSpacing&gt;
  &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;
  &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:Compatibility&gt;
   &lt;w:SpaceForUL/&gt;
   &lt;w:BalanceSingleByteDoubleByteWidth/&gt;
   &lt;w:DoNotLeaveBackslashAlone/&gt;
   &lt;w:ULTrailSpace/&gt;
   &lt;w:DoNotExpandShiftReturn/&gt;
   &lt;w:AdjustLineHeightInTable/&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
 &lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if !mso]&gt;&lt;img src="http://img2.blogblog.com/img/video_object.png" style="background-color: #b2b2b2; " class="BLOGGER-object-element tr_noresize tr_placeholder" id="ieooui" data-original-id="ieooui" /&gt;
&lt;style&gt;
st1\:*{behavior:url(#ieooui) }
&lt;/style&gt;
&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin:0cm;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:10.0pt;
 font-family:"Times New Roman";
 mso-fareast-font-family:"Times New Roman";
 mso-ansi-language:#0400;
 mso-fareast-language:#0400;
 mso-bidi-language:#0400;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;h3 align="center" style="text-align: center;"&gt;
&lt;span lang="EN-US"&gt;Notes on Hadoop&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;What is Hadoop?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is an open source framework for writing and running
distributed applications that process large amounts of data. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is designed for data-intensive processing, and it
adopts move-code-to-data philosophy.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Its main features are distributed storage and distributed
computing.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;1. Accessible, hadoop runs on large clusters of (low-end)
commodity machines.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;2. It's robust(Fault Tolerance). It can gracefully handle
frequent hardware malfunction and failures.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;3. It's scalable(Scalability), Hadoop scales linearly to
handle larger data by adding more nodes to the cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;4. Simple—Hadoop allows users to quickly write efficient
parallel code.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;By using distributed storage and transferring code instead
of data, Hadoop avoids the costly transmission step when working with large
data sets. Moreover, the redundancy of data allows Hadoop to recover should a
single node fail.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;It's east to create programs with Hadoop MapReduce
framework.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;You don't have to worry about partitioning the data, determining
which nodes will perform which tasks, or handling communication between nodes.
Hadoop handles this for you, leaving you free to focus on what’s most important
to you—your data and what you want to do with it.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is a core part of the computing infrastructure for
many web companies, such as Yahoo, Facebook, LinkedIn, and Twitte.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Compared with
Parallel Databases&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;A few scales to low hundreds of nodes and about 5 PB &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Primary design goal is “performance” &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Requires homogeneous hardware &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Anomalous behavior is not well tolerated: &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; A slow
network can cause serious performance degradation &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Most queries
fail when one node fails &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;What is
MapReduce?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;MapReduce is a programming model and software framework
for writing applications that rapidly process vast amounts of data in parallel
on large clusters of compute nodes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;HDFS&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop Distributed File System is the primary storage
system used by Hadoop applications. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;HDFS divides data set into smaller (typically 64 MB)
blocks that are spread among many machines in the cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;HDFS creates multiple replicas of data blocks and
distributes them on compute nodes throughout a cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;This way, the data can be read in parallel and it provides
a much higher throughput, also it is much more reliable, as even when one node
fails, it can still read the data's replica from other nodes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;And using HDFS is also much cheaper, as a cluster of
commodity machines turns out to be much cheaper than one high-end server!&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Computationally intensive processing vs
data-intensive processing&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is designed for data-intensive processing, and it adopts
move-code-to-data philosophy.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The programs to run (“code”) are much smaller than the
data and are easier to move around.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Let the data remain where it is and move the executable
code to its hosting machine.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The clients send only the MapReduce programs to be
executed, and these programs are usually small (often in kilobytes).&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Data is broken up and distributed across the cluster, and
as much as possible, computation on a piece of data takes place on the same
machine where that piece of data resides.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;SCALE-OUT
INSTEAD OF SCALE-UP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is designed to be a scale-out architecture
operating on a cluster of com-&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;modity PC machines. Adding more resources means adding
more machines to the Hadoop cluster. Hadoop clusters with ten to hundreds of
machines is standard.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;KEY/VALUE PAIRS INSTEAD OF RELATIONAL TABLES&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop uses key/value pairs as its basic data unit, which
is flexible enough to work with the less-structured data types.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;FUNCTIONAL PROGRAMMING (MAPREDUCE) INSTEAD OF
DECLARATIVE QUERIES (SQL)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop use MapReduce, Under MapReduce you specify the
actual steps in processing the data.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Under SQL you have query statements; under MapReduce you
have scripts and codes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;OFFLINE BATCH PROCESSING INSTEAD OF ONLINE
TRANSACTIONS&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is designed for offline processing and analysis of
large-scale data. It doesn’t work for random reading and writing of a few
records, which is the type of load for online transaction processing.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop is best used as a write-once, read-many-times type
of data store.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;SQL database is by design targeted at structured data.
Many of Hadoop’s initial applications deal with unstructured data such as text.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Understanding
MapReduce &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Mapper, reducer, combiner, patitioner&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;MapReduce programs are executed in two main phases, called
mapping and reducing. Each phase is defined by a data processing function, and
these functions are called mapper and reducer, respectively. In the mapping
phase, MapReduce takes the input data and feeds each data element to the
mapper. In the reducing phase, the reducer processes all the outputs from the
mapper and arrives at a final result.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In simple terms, the mapper is meant to filter and
transform the input into something that the reducer can aggregate over. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The building
blocks of Hadoop &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;NameNode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop employs a master/slave architecture, The NameNode
is the master of HDFS that directs the slave DataNode daemons to perform the
low-level I/O tasks. The NameNode is the bookkeeper of HDFS; it keeps track of
how your files are broken down into file blocks, which nodes store those blocks,
and the overall health of the distributed filesystem.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;It doesn’t store any user data or perform any computations
for a MapReduce program to lower the workload on the machine.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The NameNode keeps track of the file metadata—which files
are in the system and how each file is broken down into blocks.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;NameNode is a single point of failure of your Hadoop
cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;DataNode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In HDFS file system, the file is broken into blocks and
distributed among the DataNodes.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The NameNode will tell your client which DataNode each
block resides in.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Your client communicates directly with the DataNode
daemons to process the local files corresponding to the blocks. Furthermore, a
DataNode may communicate with other DataNodes to replicate its data blocks for
redundancy.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The DataNodes provide backup store of the blocks and
constantly report to the NameNode to keep the metadata current.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Upon initialization, each of the DataNodes informs the
NameNode of the blocks it’s currently storing. After this mapping is complete,
the DataNodes continually poll the NameNode to provide information regarding
local changes as well as receive instructions to create, move, or delete blocks
from the local disk.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Secondary NameNode - SNN&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The Secondary NameNode (SNN) is an assistant daemon for
monitoring the state of the cluster HDFS.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The SNN differs from the NameNode in that this process
doesn’t receive or record any real-time changes to HDFS. Instead, it
communicates with the NameNode to take snapshots of the HDFS metadata at
intervals defined by the cluster configuration.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The NameNode is a single point of failure for a Hadoop
cluster, and the SNN snapshots help minimize the downtime and loss of data.
Nevertheless, a NameNode failure requires human intervention to reconfigure the
cluster to use the SNN as the primary NameNode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;JobTracker&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The JobTracker daemon is the liaison between your
application and Hadoop. Once you submit your code to your cluster, the
JobTracker determines the execution plan by determining which files to process,
assigns nodes to different tasks, and monitors all tasks as they’re running.
Should a task fail, the JobTracker will automatically relaunch the task,
possibly on a different node, up to a predefined limit of retries.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;There is only one JobTracker daemon per Hadoop cluster.
It’s typically run on a server as a master node of the cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;TaskTracker&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The computing daemons also follow a master/slave architecture:
the JobTracker is the master overseeing the overall execution of a MapReduce job
and the TaskTrackers manage the execution of individual tasks on each slave
node.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Each TaskTracker is responsible for executing the
individual tasks that the JobTracker assigns. Although there is a single
TaskTracker per slave node, each TaskTracker can spawn multiple JVMs to handle
many map or reduce tasks in parallel.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;One responsibility of the TaskTracker is to constantly
communicate with the&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;JobTracker. If the JobTracker fails to receive a heartbeat
from a TaskTracker within a specified amount of time, it will assume the
TaskTracker has crashed and will resubmit the corresponding tasks to other
nodes in the cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;NameNode: Maps a file to a file-id and list of DataNodes &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;DataNode: Maps a block-id to a physical location on disk &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;SecondaryNameNode: Periodic merge of Transaction log &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Distributed File System &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Single Namespace for
entire cluster &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Data Coherency &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;
Write-once-read-many access model &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Client can
only append to existing files &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Files are broken up into
blocks &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Typically 128
MB block size &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Each block
replicated on multiple DataNodes &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Intelligent Client &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Client can
find location of blocks &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Client
accesses data directly from DataNode &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="PT-BR" style="color: blue; font-family: Verdana; mso-ansi-language: PT-BR; mso-bidi-font-size: 10.5pt;"&gt;NameNode Metadata &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="PT-BR" style="font-family: Verdana; mso-ansi-language: PT-BR; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="PT-BR" style="font-family: Verdana; mso-ansi-language: PT-BR; mso-bidi-font-size: 10.5pt;"&gt; Meta-data in Memory &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; The entire
metadata is in main memory &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; No demand
paging of meta-data &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Types of Metadata &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; List of files
&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; List of
Blocks for each file &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; List of
DataNodes for each block &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; File
attributes, e.g creation time, replication factor &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; A Transaction Log &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Records file
creations, file deletions. etc &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;DataNode &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; A Block Server &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Stores data
in the local file system (e.g. ext3) &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Stores
meta-data of a block (e.g. CRC32) &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Serves data
and meta-data to Clients &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;- Periodic validation of checksums &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Block Report &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Periodically
sends a report of all existing blocks to t&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;NameNode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Facilitates Pipelining
of Data &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-bidi-font-size: 10.5pt; mso-hansi-font-family: Verdana;"&gt;–&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Forwards data
to other specified DataNodes &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Block Placement&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Current Strategy &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;-- One replica on local node &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;-- Second replica on a remote rack &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;-- Third replica on same remote rack &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;-- Additional replicas are randomly placed &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Clients read from
nearest replica &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Pluggable policy for
placing block replicas &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Data Pipelining&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; Client writes block to
the first DataNode &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; The first DataNode
forwards the data to the next DataNode in the Pipeline, and so on &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; &lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt; When all replicas are
written, the Client moves on to write the next block in file&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Topology&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;This topology features a master node running the NameNode
and JobTracker daemons and a standalone node with the SNN in case the master
node fails.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop can be run in standalone mode, Pseudo-distributed
mode, Fully distributed mode.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Local (standalone) mode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The standalone mode is the default mode for Hadoop.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Because there’s no need to communicate with other nodes,
the standalone mode doesn’t use HDFS, nor will it launch any of the Hadoop
daemons. Its primary use is for developing and debugging the application logic
of a MapReduce program without the additional complexity of interacting with
the daemons. &lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Pseudo-distributed mode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The pseudo-distributed mode is running Hadoop in a “cluster
of one” with all daemons running on a single machine.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;This mode complements the standalone mode for debugging
your code, allowing you to examine memory usage, HDFS input/output issues, and
other daemon interactions.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Setup Hadoop
cluster&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Master node communicates with other nodes via
passphraseless SSH.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The public key is stored locally on every node in the
cluster, and the master node sends the private key when attempting to access a
remote machine.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Define a common account on all nodes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Generate SSH key pair, distribute public key to other
nodes, and validate logins.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;scp ~/.ssh/id_rsa.pub hadoop-user@target:~/master_key&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;mv ~/master_key ~/.ssh/authorized_keys&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;chmod 600 ~/.ssh/authorized_keys&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Running Hadoop &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Switching between modes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Create a separate configuration folder for each of the
modes and place the appropriate version of the XML files in the corresponding
folder, then create symbolic links to switch between Hadoop modes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Web-based cluster UI&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;http://localhost:50070/&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Working with
files in HDFS &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;HDFS is a filesystem designed for large-scale distributed
data processing under frameworks such as MapReduce. You can store a big data
set of (say) 100 TB as a single file in HDFS.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;As HDFS isn’t a native Unix filesystem, standard Unix file
tools don’t work on it,&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop does provide a set of command line utilities.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;There is a project MountableHDFS that is trying to make
HDFS mountable as a Unix filesystem.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop commands&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop file commands can interact with both the HDFS
filesystem and the local&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;filesystem.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Edit the script conf/hadoop-env.sh to set JAVA_HOME&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Run in standlone mode&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop jar hadoop-examples-*.jar wordcount
/home/essniuser/dscli/log output&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop namenode -format&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;jps,start-all.sh&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop fs -ls, -lsr&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop fs -cat
hdfs://localhost:9000/user/chuck/example.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop fs -mkdir /user/chuck, -put example.txt., -get
example.txt.-cat example.txt, -cat example.txt | head, -tail example.txt, –rm
example.txt&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In general, Hadoop works more effectively with a single
large file rather than a number of smaller ones.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Configuration conf = new Configuration(); // Factory
method pattern&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;FileSystem hdfs = FileSystem.get(conf); // get HDFS fiel
system&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;FileSystem local = FileSystem.getLocal(conf); // get local
file system&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Anatomy of a
MapReduce program&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;a MapReduce program processes data by manipulating&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;(key/value) pairs in the general form &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;map: (K1,V1) -&amp;gt; list(K2,V2)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;reduce: (K2,list(V2))
-&amp;gt; list(K3,V3)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;After distributing input data to different nodes, the only
time nodes communicate with each other is at the “shuffle” step. This
restriction on communication greatly helps scalability.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop data types . The MapReduce framework won’t allow
keys or values to be any arbitrary class.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;This is because the MapReduce framework has a certain
defined way of serializing the key/value pairs to move them across the
cluster’s network, and only classes that support this kind of serialization can
function as keys or values in the framework.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;More specifically, classes that implement the Writable
interface can be values, and classes that implement the
WritableComparable&lt;t&gt; interface can be either keys or values.&lt;/t&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Predefined data types&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;BooleanWritable, ByteWritable, DoubleWritable,
FloatWritable, IntWritable, LongWritable, Text, NullWritable&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;You can create your own custom type as long as it
implements the Writable&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;(or WritableComparable&lt;t&gt;) interface.&lt;/t&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Mapper&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;To serve as the mapper, a class implements from the Mapper
interface and inherits the MapReduceBase class &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In Mapper, we need implement its map function, which
generates a (possibly empty) list of (K2, V2)
pairs for a given (K1, V1) input pair. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Predefined Mappper&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;IdentityMapper&lt;k,v&gt;, InverseMapper&lt;k,v&gt;,
RegexMapper&lt;k&gt;, TokenCountMapper&lt;k&gt;&lt;/k&gt;&lt;/k&gt;&lt;/k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Reducer&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;void reduce(K2
key,Iterator&lt;v2&gt; values,OutputCollector&lt;k3,v3&gt; output, Reporter
reporter) throws IOException&lt;/k3,v3&gt;&lt;/v2&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;When the reducer task receives the output from the various
mappers, it sorts the incoming data on the key of the (key/value) pair and
groups together all values of the same key. The reduce() function is then
called, and it generates a (possibly empty) list of (K3, V3) pairs by iterating
over the values associated with a given key. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;IdentityReducer&lt;k,v&gt;, LongSumReducer&lt;k&gt; &lt;/k&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Partitioner—
redirecting output from Mapper&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;A common misconception for first-time MapReduce
programmers is to use only a single reducer. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;With multiple reducers, we need some way to determine the
appropriate one to send a (key/value) pair outputted by a mapper. The default
behavior is to hash the key to determine the reducer. Hadoop enforces this
strategy by use of the HashPartitioner class, we can define our own
Partitioner.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;It defines method that returns an integer between 0 and
the number of reduce tasks indexing to which reducer the (key/value) pair will
be sent. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Shuffling&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Between the map and reduce stages, a MapReduce application
must take the output from the mapper tasks and distribute the results among the
reducer tasks. This process is typically called shuffling, because the output
of a mapper on a single node may be sent to reducers across multiple nodes in
the cluster.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Combiner—local
reduce&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Perform a “local reduce“ before we distribute the mapper
results, this can reduce the results/data that are distributed to reducers.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;One of the fundamental principles of MapReduce’s
processing power is the splitting of the input data into chunks. You can
process these chunks in parallel using multiple machines.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;HDFS provides efficient way to random read access.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;HDFS stores files in blocks spread over multiple machines.
Roughly speaking, each file block is a split. As different machines will likely
have different blocks, parallelization is automatic if each split/block is
processed by the machine that it’s residing at. Furthermore, as HDFS replicates
blocks in multiple nodes for reliability, MapReduce can choose any of the nodes
that have a copy of a split/block.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;InputFormat&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;TextInputFormat: Key is the byte offset of the line, and
value is the content of the line.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;KeyValueTextInputFormat,
SequenceFileInputFormat&lt;k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;NLineInputFormat: Same as TextInputFormat, but each split
is guaranteed to have exactly N lines. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;OutputFormat&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The output has no splits, as each reducer writes its
output only to its own file. The output files reside in a common directory and
are typically named part-nnnnn, where nnnnn is the partition ID of the reducer.
&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;RecordWriter&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Objects format the output and RecordReaders parse the
format of the input.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;TextOutputFormat&lt;k,v&gt;,
SequenceFileOutputFormat&lt;k,v&gt;, NullOutputFormat&lt;k,v&gt; &lt;/k,v&gt;&lt;/k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Writing basic
MapReduce programs&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In general, MapReduce programs follows basic template, we
generally take an existing MapReduce program and modify it until it does what
we want. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Adapting for Hadoop’s API changes[How]&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The 0.20 release supports the future&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;API while maintaining backward-compatibility with the old
one by marking it as deprecated.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Streaming in
Hadoop&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop supports other languages via a generic API called
Streaming. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop Streaming interacts with programs using the Unix
streaming paradigm.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Inputs come in through STDIN and outputs go to STDOUT. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Streaming with Unix commands&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Under Streaming, each mapper sees the entire stream of
data, and it’s the mapper that takes on the responsibility of breaking the
stream into (line-oriented) records.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In the standard Java model, the framework itself breaks
input data into records, and gives the map() method only one record at a time.
The Streaming model makes it easy to keep state information across records in a
split.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop jar contrib/streaming/hadoop-0.19.1-streaming.jar
-input input/cite75_99.txt -output output -mapper 'cut -f 2 -d,' -reducer
'uniq'&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop jar hadoop-0.19.1-streaming.jar -input output
-output output_a -mapper 'wc -l' -D mapred.reduce.tasks=0&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;We want the mapper to directly output the record count
without any reducer, so we set mapred.reduce.tasks to 0 and don’t specify the
-reducer option at all.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Streaming with scripts&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop jar hadoop-0.19.1-streaming.jar -input
input/cite75_99.txt -output output -mapper 'RandomSample.py 10' -file RandomSample.py
-D mapred.reduce.tasks=1&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;hadoop jar hadoop-0.18.1-streaming.jar -input
input/apat63_99.txt -output output -mapper 'AttributeMax.py 8' -reducer
'AttributeMax.py 0' -file AttributeMax.py -D mapred.reduce.tasks=1&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;As we haven’t specified any particular reducer, it will use
the default IdentityReducer.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Classes of aggregation functions: distributive, algebraic,
and holistic&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Streaming with the Aggregate package&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;You only have to provide a mapper that processes records
and sends out a specially formatted output. Each line of the mapper’s output
looks like&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;function:key\tvalue.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Improving
performance with combiners&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;It’s supposed to
whittle down the output of the mapper to lessen the load on the network and on
the reducer. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;If we specify a combiner, the MapReduce framework may
apply it to the intermediate data from mapper.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Chaining
Multiple MapReduce jobs&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Chain multiple MapReduce jobs to run sequentially, with
the output of one MapReduce job being the input to the next.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;As JobClient.runJob() blocks until the end of a job,
chaining MapReduce jobs involves calling the driver of one MapReduce job after
another. The driver at each job will have to create a new JobConf object and
set its input path to be the output path of the previous job. You can delete
the intermediate data generated at each step of the chain at the end.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Chaining MapReduce jobs with complex dependency&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;In addition to holding job configuration information, Job
also holds dependency information, specified through the addDependingJob()
method.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;JobControl objects do the managing and monitoring of the
job execution. You can add jobs to a JobControl object via the addJob() method.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;After adding all the jobs and dependencies, call
JobControl’s run() method to spawn a thread to submit and monitor jobs for
execution. JobControl has methods like allFinished() and getFailedJobs() to
track the execution of various jobs within the batch.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Joining data from different sources&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Reduce-side joining &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop has a contrib package called datajoin that works as
a generic framework for data joining in Hadoop. Its jar file is at
contrib/datajoin/hadoop-*-datajoin.jar.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Hadoop
MapReduce code example&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;public class CitationHistogram extends Configured
implements Tool {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public static
class MapClass extends MapReduceBase&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;implements
Mapper&lt;text, intwritable,="" intwritable="" text,=""&gt; {&lt;/text,&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private
final static IntWritable uno = new IntWritable(1);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private
IntWritable citationCount = new IntWritable(); &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// these two
are defined to improve preformance&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// The map()
method will be called as many times as there are records&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// (in a
split, for each JVM). Reducing the number of objects created &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// inside
the map() method can increase performance and reduce&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// garbage
collection&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public void
map(Text key, Text value,&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;OutputCollector&lt;intwritable, intwritable=""&gt; output,&lt;/intwritable,&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Reporter reporter) throws IOException {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;citationCount.set(Integer.parseInt(value.toString()));&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;output.collect(citationCount, uno);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public static
class Reduce extends MapReduceBase&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;implements
Reducer&lt;intwritable,intwritable,intwritable,intwritable&gt;&lt;/intwritable,intwritable,intwritable,intwritable&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public void
reduce(IntWritable key, Iterator&lt;intwritable&gt; values,&lt;/intwritable&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;OutputCollector&lt;intwritable, intwritable=""&gt;output,&lt;/intwritable,&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Reporter reporter) throws IOException {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;int
count = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;while
(values.hasNext()) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;count += values.next().get();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;output.collect(key, new IntWritable(count));&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public int
run(String[] args) throws Exception {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Configuration conf = getConf();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JobConf job
= new JobConf(conf, CitationHistogram.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Path in =
new Path(args[0]);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Path out =
new Path(args[1]);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;FileInputFormat.setInputPaths(job, in);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;FileOutputFormat.setOutputPath(job, out);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;job.setJobName("CitationHistogram");&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;job.setMapperClass(MapClass.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;job.setReducerClass(Reduce.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;job.setInputFormat(KeyValueTextInputFormat.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;job.setOutputFormat(TextOutputFormat.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;job.setOutputKeyClass(IntWritable.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;job.setOutputValueClass(IntWritable.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JobClient.runJob(job);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return 0;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public static
void main(String[] args) throws Exception { &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;int res =
ToolRunner.run(new Configuration(), &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;new
CitationHistogram(), &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;args);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.exit(res);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;}&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Revised version of the WordCount example&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;public class WordCount2 {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public static
void main(String[] args) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JobClient
client = new JobClient();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;JobConf conf
= new JobConf(WordCount2.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;FileInputFormat.addInputPath(conf, new
Path(args[0]));&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;FileOutputFormat.setOutputPath(conf, new Path(args[1]));&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;conf.setOutputKeyClass(Text.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;conf.setOutputValueClass(LongWritable.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;conf.setMapperClass(TokenCountMapper.class);&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;q&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;conf.setCombinerClass(LongSumReducer.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;conf.setReducerClass(LongSumReducer.class);&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;w&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;client.setConf(conf);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;JobClient.runJob(conf);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} catch
(Exception e) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;e.printStackTrace();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Resource&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;a href="http://www.amazon.com/Hadoop-Action-Chuck-Lam/dp/1935182196/ref=sr_1_4?ie=UTF8&amp;amp;qid=1307378520&amp;amp;sr=8-4"&gt;Hadoop
in Action&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-5868685059733934030?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/5868685059733934030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=5868685059733934030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/5868685059733934030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/5868685059733934030'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/notes-on-hadoop.html' title='Notes on Hadoop'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-4392513636563677988</id><published>2011-06-03T20:36:00.000-07:00</published><updated>2011-06-03T20:36:50.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Building Scalable Web Sites'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Development'/><title type='text'>Notes on Memcached</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:DrawingGridVerticalSpacing&gt;7.8 pt&lt;/w:DrawingGridVerticalSpacing&gt;
  &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;
  &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:Compatibility&gt;
   &lt;w:SpaceForUL/&gt;
   &lt;w:BalanceSingleByteDoubleByteWidth/&gt;
   &lt;w:DoNotLeaveBackslashAlone/&gt;
   &lt;w:ULTrailSpace/&gt;
   &lt;w:DoNotExpandShiftReturn/&gt;
   &lt;w:AdjustLineHeightInTable/&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
 &lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin:0cm;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:10.0pt;
 font-family:"Times New Roman";
 mso-ansi-language:#0400;
 mso-fareast-language:#0400;
 mso-bidi-language:#0400;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;div align="center" class="MsoNormal" style="text-align: center;"&gt;
&lt;span class="Heading3Char"&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Times New Roman&amp;quot;; font-size: 16.0pt;"&gt;Notes
on Memcached&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;What is Memcached?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;memcached is a
high-performance, distributed memory object caching system, generic in nature,
but intended for use in speeding up dynamic web applications by alleviating
database load. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;How Memcached works?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Memcached's
magic lies in its two-stage hash approach. It behaves as though it were a giant
hash table, looking up key/value pairs. Give it a key, and set or get some
arbitrary data.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Memcached is
organized as a farm of N servers. The storage model can be considered as a huge
HashTable partitioned among these N servers.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The servers
within the farm doesn't know each other at all, and it doesn't replicate data
between different server, so its overhead is slow, and&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;add, remove a memcached server is very easy.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When doing a
memcached lookup, first the client hashes the key against the whole list of
servers and choses a server, then the client sends this request, and the server
does an internal hash key lookup for the actual item data, and return response.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;If the response
is not null, we get the data we need, if not, we need query database and get
the data and add the data to memcached server.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Each server use
asynchronous, non-blocking I/O and a thread pool to handle large number of
incoming TCP sockets, the number of threads is independent of the number of
incoming sockets. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;maxiumum key
length - 250 bytes&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;maxiumum value
size - 1 MB&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;limits on
expire time -&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;30 days&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Slabs, Pages, Chunks and Memcached Memory
Management&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Memcached use
slab allocator to do all the memory-management for item data in memcached. It
still uses malloc/calloc/realloc for other memory management, just use slab allocator
for its key/value pair.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When you ask
memcached to store a value, it looks up the “slab” associated with that value.
A slab holds values within a particular size range. Slabs are composed of 1MB
pages, which are broken into chunks of the slab’s size.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In a simple
word, a slab has many pages which has many chunks. Each chunk is a fixed size.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When we insert
a value, memcached will look up all slabs to find the slab whose chunk size is
larger than and closest to the value size, then will insert the value to that
slab's chunk.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Memcached Protocol&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;1. &lt;span style="color: blue;"&gt;Text based protocol&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The original
memcached protocol is a very simple, small, and an effective text based
protocol&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;2. &lt;span style="color: blue;"&gt;Binary Protocol&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Binary protocol
is added in memcached 1.3 to improve performance and extensibility.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Parsing binary
string is more efficient than parsing text string, and its extensibility opens
up new possibilities, &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://blog.couchbase.com/northscale-blog/2009/11/sasl-memcached-now-available.html"&gt;&lt;span style="color: red;"&gt;Memcached SASL&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;What is SASL?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;SASL stands for
Simple Authentication and Security Layer, which provides you a means of adding
authentication support to connection-based protocols, such as the memcached
client binary protocol in this case. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;memcached
server won't allow the user to connect unless they provide correct credential.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Install
prerequisites such as sasl development libraries and as well as SASL utilities
such as saslpasswd.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;sudo apt-get -f
install libsasl2-2 sasl2-bin libsasl2-2 libsasl2-dev libsasl2-modules&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Compile and
install memcached with --enable-sasl&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;./configure
--enable-sasl&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Configuring
SASL&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;# Create a user
for memcached.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;saslpasswd2
-a memcached -c cacheuser&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Running
Memcached&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;In order to
enable SASL support in the server you must use the -S flag.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The -S flag
does a few things things:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Enable all of
the SASL commands.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Require binary
protocol only.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Require
authentication to have been successful before commands may be issued on a
connection.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;What if memcached server is added, or
removed.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The default
server hashing algorithm doesn't handle the growth and shrink of the number of
servers very well.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;It computes
hash value of the key and them module it by server number.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When the number
of server changes, the ownership equation (key mod N) will all be wrong, as a
same key now would be mapped and redistributed to different server.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;There are
several approaches to this problem:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;1.
Consistent hashing&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Consistent
hashing localize the ownership changes to just the neighbor of the added or
removed server.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Under this
schema, each server is assigned with an id under the same key space. The
ownership of a key is determined by the closest server whose key is the first
one encountered when walking in the anti-clockwise direction. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When a server
crashes, its immediate upstream neighbor server (walking along the
anti-clockwise direction) will adopt the key ownership of the dead server,
while all other servers have the same ownership of key range unchanged.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When a new
server is added, only its neighbor servers’ ownership would change.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;2.
Run logical servers within a farm of physical machines.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;When a physical
machine crashes, its logical servers will be restart in the surviving physical
machines. In other words, the number of logical servers is unchanged even when
crashes happens. &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;This logical
server approach is also good when the underlying physical machines have
different memory capacity. We can start more Memcached process in the machine
with more memory and proportionally spread the cache according to memory
capacity.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;What is memcached's cache?&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The cache
structure is an LRU (Least Recently Used), plus expiration timeouts. When you
store items into memcached, you may state how long it should be valid in the
cache. Which is forever, or some time in the future. If the server is out of
memory, expired slabs are replaced first, then the oldest unused slabs go next.
&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;API&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;get(key)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;set(key, value)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;set(key, value,
expiration) &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;add(key, value,
expiration) &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;replace(key,
value, expiration) &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;a href="http://lzone.de/articles/memcached.htm"&gt;&lt;span style="color: red;"&gt;memcached
commands&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Start server: &lt;span style="color: blue;"&gt;memcached -d -m 4096 -t 4&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;
&lt;/span&gt;-p 11211&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;-d[deamon],
-t[thread number], -m[memory size] -p[port]&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Stop
server:&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;ps
-ef|grep memcached|grep -v grep|awk '{print $2}'|xargs kill -9&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;telnet
localhost 11211&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Query the
current traffic statistics: &lt;span style="color: blue;"&gt;stats&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Query the
current memory statistics: &lt;span style="color: blue;"&gt;stats slabs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Query which
keys are used: &lt;span style="color: blue;"&gt;stats items&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Command &lt;span style="mso-tab-count: 1;"&gt; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Description
&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 4;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Example&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;get&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Reads a value &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 4;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;get
mykey&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;set &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Set
a key unconditionally &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;set mykey 0 60 5&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;add &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Add
a new key &lt;span style="mso-tab-count: 4;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;add newkey 0 60 5&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;replace &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Overwrite
existing key &lt;span style="mso-tab-count: 1;"&gt; &lt;/span&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;replace key 0 60 5&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;append &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Append
data to existing key &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;append key 0 60
15&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;prepend &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Prepend
data to existing key &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;prepend key 0 60
15&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;incr &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Increments
numerical key value by given number &lt;span style="mso-tab-count: 1;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;incr mykey 2&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;decr &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Decrements numerical key value by given
number &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;decr mykey 5&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;delete&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Deletes
an existing key &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;delete mykey&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;flush_all&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Invalidate specific items immediately &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;flush_all&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Invalidate all items in n seconds &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;flush_all 900&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;stats&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt; &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Prints general statistics &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;stats&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Prints memory statistics &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;stats
slabs&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Prints memory statistics &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;stats malloc&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue;"&gt;stats items,stats detail,stats sizes&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Resets statistics &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;stats
reset&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;version &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Prints server version. &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;version&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;verbosity &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Increases
log level &lt;span style="mso-tab-count: 1;"&gt; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;verbosity&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;quit &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Terminate telnet session &lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;quit&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="mso-char-indent-count: 24.0; text-indent: 252.0pt;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Install memcached&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal" style="margin-left: 18.0pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt; text-indent: -18.0pt;"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-family: Verdana; mso-fareast-font-family: Verdana;"&gt;&lt;span style="mso-list: Ignore;"&gt;1.&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;Install Libevent&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;libevent is an
asynchronous event notification software library.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The libevent
API provides a mechanism to execute a callback function when a specific event
occurs on a file descriptor or after a timeout has been reached. Furthermore,
libevent also supports callbacks due to signals or regular timeouts.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;wget
http://monkey.org/~provos/libevent-2.0.11-stable.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;cd
ibevent-2.0.11-stable&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;autoconf&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;./configure
--prefix=/usr/local&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;make&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;sudo make
install&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana;"&gt;2.
Install Memcached&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Download the
latest version of Memcached:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;wget
http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;cd
memcached-1.4.5&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;autoconf&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;./configure
--prefix=/usr/local&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;make&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;sudo make
install&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Using Memcached with Java&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;There are
several memcached java client implementations, such as &lt;a href="http://code.google.com/p/spymemcached/"&gt;spymemcached&lt;/a&gt;, and &lt;a href="https://github.com/gwhalin/Memcached-Java-Client/wiki/"&gt;Memcached-Java-Client&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Source code Digestion&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;// Implements
Spring InitializingBean and DisposableBean&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;public class
SpyMemcachedClient &lt;span style="color: blue;"&gt;implements InitializingBean,
DisposableBean&lt;/span&gt; {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private &lt;span style="color: blue;"&gt;MemcachedClient&lt;/span&gt;
memcachedClient;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private String memcachedNodes =
"9.186.1.1:11211,9.186.1.2:11211,9.186.1.3:11211";&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private boolean isBinaryProtocol = false;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private boolean isConsistentHashing =
true;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private long operationTimeout = 1000;
//default value in Spy is 1000ms&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@Override&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public void afterPropertiesSet() throws
Exception {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ConnectionFactoryBuilder cfb = new
ConnectionFactoryBuilder();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cfb.setFailureMode(FailureMode.Redistribute);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cfb.setDaemon(true);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cfb.setProtocol(isBinaryProtocol ?
Protocol.BINARY : Protocol.TEXT);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (isConsistentHashing) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cfb.setLocatorType(Locator.CONSISTENT);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cfb.setHashAlg(HashAlgorithm.KETAMA_HASH);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cfb.setOpTimeout(operationTimeout);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;memcachedClient = &lt;span style="color: blue;"&gt;new MemcachedClient(cfb.build(),
AddrUtil.getAddresses(memcachedNodes))&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} catch (IOException e) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;logger.error("MemcachedClient
initilization error: ", e);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;throw e;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public void destroy() throws Exception {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (memcachedClient != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;memcachedClient.shutdown();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public MemcachedClient
getMemcachedClient() {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return memcachedClient;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// capture cast exception, and return null
instead&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@SuppressWarnings("unchecked")&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public &lt;t&gt; T get(String key) {&lt;/t&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;try {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return (T)
memcachedClient.get(key);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} catch (RuntimeException e) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;logger.warn("Get from
memcached server fail,key is " + key, e);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return null;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// getBulk,gets, set, cas(check and
set),delete, incr, decr, asyncIncr, asyncDecr&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;// setMemcachedNodes, setBinaryProtocol,
setConsistentHashing, setOperationTimeout&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;@Component&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;public class
AccountManager {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private SpyMemcachedClient
spyMemcachedClient;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@Transactional(readOnly = true)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public User getInitedUser(String id) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (spyMemcachedClient != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return
getUserFromMemcached(id);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} else {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return userJdbcDao.queryObject(id);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;private User getUserFromMemcached(String
id) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String key =
MemcachedObjectType.USER.getPrefix() + id;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;User user = null;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;String jsonString =
spyMemcachedClient.get(key);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (jsonString == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;user =
userJdbcDao.queryObject(id);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;if (user != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 4;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;jsonString =
jsonBinder.toJson(user);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 4;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;spyMemcachedClient.set(key,
MemcachedObjectType.USER.getExpiredTime(), jsonString);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} else {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;user =
jsonBinder.fromJson(jsonString, User.class);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return user;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@Autowired(required = false) //Autowired&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public void
setSpyMemcachedClient(SpyMemcachedClient spyMemcachedClient) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 2;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;this.spyMemcachedClient = spyMemcachedClient;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;span style="mso-spacerun: yes;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Resources&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://xenojoshua.com/2011/04/memcached-anatomy-index/"&gt;Memcached&lt;span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;span lang="EN-US"&gt;全面剖析（&lt;/span&gt;&lt;/span&gt;Mixi&lt;span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;span lang="EN-US"&gt;）&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;&lt;span lang="EN-US"&gt;–&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;span lang="EN-US"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;span lang="EN-US"&gt;索引&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://code.google.com/p/memcached/wiki/FAQ"&gt;memcached&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;FAQ &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://architects.dzone.com/news/notes-memcached"&gt;Notes on Memcached&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://www.mikeperham.com/2009/06/22/slabs-pages-chunks-and-memcached/"&gt;Slabs,
Pages, Chunks and Memcached&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://lzone.de/articles/memcached.htm"&gt;memcached Telnet Interface&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-4392513636563677988?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/4392513636563677988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=4392513636563677988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/4392513636563677988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/4392513636563677988'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/notes-on-memcached.html' title='Notes on Memcached'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-7699618079423770409</id><published>2011-06-02T07:58:00.003-07:00</published><updated>2011-06-17T21:48:04.019-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2SE'/><category scheme='http://www.blogger.com/atom/ns#' term='Learning code'/><title type='text'>Learning JDK Code - Collection</title><content type='html'>&lt;br /&gt;
&lt;div align="center" class="MsoNormal" style="mso-layout-grid-align: none; text-align: center; text-autospace: none;"&gt;
&lt;span class="heading3char"&gt;&lt;span lang="EN-US" style="font-size: 16pt;"&gt;Learning JDK Code - Collection&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;HashMap
vs Hashtable&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="MsoHyperlink"&gt;&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://stackoverflow.com/questions/2414117/explanation-of-hashmaphashint-method"&gt;http://stackoverflow.com/questions/2414117/explanation-of-hashmaphashint-method&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&lt;a href="http://apurvagnihotri.blogspot.com/2010/06/hashmap-vs-hashtable.html"&gt;http://apurvagnihotri.blogspot.com/2010/06/hashmap-vs-hashtable.html&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The Hashtable is among the original collection classes in
Java.Hashtable extends the Dictionary class, which as the Javadocs state, is
obsolete and has been replaced by the Map interface. HashMap is part of the new
Collections Framework, added with Java 2.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The key difference between the two is that access to the
Hashtable is synchronized on the table while access to the HashMap is not
synchronized.This makes HashMap better for non-threaded applications, as
unsynchronized Objects typically perform better than synchronized ones&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;HashMap has a more complex hashing algorithm then
Hashtable. It takes the hash value from the key and then hashes it again
(double hashing). This can improve the distribution of the keys and hence the
performance of the Map.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Another difference is that iterator in the HashMap is
fail-safe while the enumerator for the Hashtable isn't. If we change the map
while iterating, it will throw exception.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Third difference is that HashMap permits null values in
it, while Hashtable doesn't. Also note that only one NULL value is allowed as a
key in HashMap. HashMap does not allow multiple keys to be NULL. Nevertheless,
it can have multiple NULL values.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;1. Initial size and resize&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;HashMap uses power-of-two length tables, default capacity
is 16.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;static final int DEFAULT_INITIAL_CAPACITY = 16;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;static final int MAXIMUM_CAPACITY = 1 &amp;lt;&amp;lt; 30;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;static final float DEFAULT_LOAD_FACTOR = 0.75f;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;public HashMap(int initialCapacity, float loadFactor) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Find a power
of 2 &amp;gt;= initialCapacity&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int capacity =
1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (capacity
&amp;lt; initialCapacity)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; capacity
&amp;lt;&amp;lt;= 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;User can specify map size, hashmap would find a pow of 2
whose value is just larger than user specified size.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;resize(2 * table.length);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Hashset would construct a new, empty hashtable with the
specified initial capacity.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Default size is 11.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;public Hashtable(int initialCapacity, float loadFactor) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (initialCapacity==0)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
initialCapacity = 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;this.loadFactor = loadFactor;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;table = new Entry[initialCapacity];&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;threshold = (int)(initialCapacity * loadFactor);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;public Hashtable() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this(11, 0.75f);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;int newCapacity = oldCapacity * 2 + 1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;HashMap hash function&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;The way the HashMap is implemented relies on the hashCode
function being sufficiently well implemented. If you have many collisions on
the lower bits, the HashMap will not perform well.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;Because the implementation of hashCode is outside of the
control of HashMap (every object can implement their own), they supply an
additional hash function that shifts the object's hashCode around a little to
ensure that the lower bits are distributed more randomly. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;HashMap uses power-of-two length tables, and hashes keys
by masking away the higher bits and taking only the lower bits of their hash
code.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;So hash() attempts to bring relevancy to the higher bits,
which otherwise would get masked away (indexFor basically discards the higher
bits of h and takes only the lower k bits where length == (1 &amp;lt;&amp;lt; k)).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;int hash = hash(key.hashCode());&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;int i = indexFor(hash, table.length);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;* Applies a supplemental hash function to a given
hashCode, which&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;* defends against
poor quality hash functions.&amp;nbsp; This is
critical&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;* because HashMap
uses power-of-two length hash tables, that&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;* otherwise
encounter collisions for hashCodes that do not differ&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;* in lower bits.
Note: Null keys always map to hash 0, thus index 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;static int hash(int h) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // This function
ensures that hashCodes that differ only by&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // constant
multiples at each bit position have a bounded&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // number of
collisions (approximately 8 at default load factor).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="PT-BR" style="color: red; font-family: Verdana;"&gt;h ^= (h &amp;gt;&amp;gt;&amp;gt; 20) ^ (h &amp;gt;&amp;gt;&amp;gt; 12);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="PT-BR" style="color: red; font-family: Verdana;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return h ^ (h &amp;gt;&amp;gt;&amp;gt; 7) ^ (h
&amp;gt;&amp;gt;&amp;gt; 4);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;static int indexFor(int h, int length) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;return h &amp;amp;
(length-1);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;Hashtable
hash function&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: Verdana;"&gt;By doing the more expensive % operation (instead of simple
bit masking), the performance of Hashtable is less sensitive to hash codes with
poor distribution in the lower bits (especially if table.length is a prime
number).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: 'Courier New'; font-size: 10pt;"&gt;int&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt; hash = key.hashCode();&lt;/span&gt;&lt;span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;div id=""&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: 'Courier New'; font-size: 10pt;"&gt;int&lt;/span&gt;&lt;/b&gt;&lt;span lang="EN-US" style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt; index = (hash &amp;amp; 0x7FFFFFFF) % tab.&lt;/span&gt;&lt;span lang="EN-US" style="color: #0000c0; font-family: 'Courier New'; font-size: 10pt;"&gt;length&lt;/span&gt;&lt;span lang="EN-US" style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div id=""&gt;
&lt;span lang="EN-US" style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="color: black; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana;"&gt;HashMap[Sun
JDK]&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: #7f0055; font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; public class HashMap extends AbstractMap implements Map, Cloneable, Serializable  
 {  
   // The next size value at which to resize (capacity * load factor).  
   int threshold;    
   public HashMap() {  
     this.loadFactor = DEFAULT_LOAD_FACTOR;  
     threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR); //  
     table = new Entry[DEFAULT_INITIAL_CAPACITY];  
     init(); // subclass would overwite this  
   }  
   public V put(K key, V value) {  
     if (key == null)  
       return putForNullKey(value); // We can put null key and null value to HashMap.  
     int hash = hash(key.hashCode());  
     int i = indexFor(hash, table.length);  
     for (Entry e = table[i]; e != null; e = e.next) {  
       Object k;  
       if (e.hash == hash &amp;amp;&amp;amp; ((k = e.key) == key || key.equals(k))) // call e.key == key  
       {  
         V oldValue = e.value;  
         e.value = value;  
         e.recordAccess(this);  
         return oldValue;  
       }  
     }  
     modCount++;  
     addEntry(hash, key, value, i);  
     return null;  
   }  
   public V get(Object key) {  
     if (key == null)  
       return getForNullKey();  
     int hash = hash(key.hashCode());  
     for (Entry e = table[indexFor(hash, table.length)];  
        e != null;  
        e = e.next) {  
       Object k;  
       if (e.hash == hash &amp;amp;&amp;amp; ((k = e.key) == key || key.equals(k)))  
         return e.value;  
     }  
     return null;  
   }  
   void addEntry(int hash, K key, V value, int bucketIndex) {  
    Entry e = table[bucketIndex];  
     table[bucketIndex] = new Entry(hash, key, value, e);  
     if (size++ &amp;gt;= threshold)  
       resize(2 * table.length);  
 }  
   public boolean containsKey(Object key) {  
     return getEntry(key) != null;  
   }  
   final Entry&amp;lt;K,V&amp;gt; getEntry(Object key) {  
     int hash = (key == null) ? 0 : hash(key.hashCode());  
     for (Entry&amp;lt;K,V&amp;gt; e = table[indexFor(hash, table.length)];  
        e != null;  
        e = e.next) {  
       Object k;  
       if (e.hash == hash &amp;amp;&amp;amp;  
         ((k = e.key) == key || (key != null &amp;amp;&amp;amp; key.equals(k))))  
         return e;  
     }  
     return null;  
 }  
    /**  
    * Applies a supplemental hash function to a given hashCode, which  
    * defends against poor quality hash functions. This is critical  
    * because HashMap uses power-of-two length hash tables, that  
    * otherwise encounter collisions for hashCodes that do not differ  
    * in lower bits. Note: Null keys always map to hash 0, thus index 0.  
    */  
   static int hash(int h) {  
     // This function ensures that hashCodes that differ only by  
     // constant multiples at each bit position have a bounded  
     // number of collisions (approximately 8 at default load factor).  
     h ^= (h &amp;gt;&amp;gt;&amp;gt; 20) ^ (h &amp;gt;&amp;gt;&amp;gt; 12);  
     return h ^ (h &amp;gt;&amp;gt;&amp;gt; 7) ^ (h &amp;gt;&amp;gt;&amp;gt; 4);  
   }  
   static int indexFor(int h, int length) {  
     return h &amp;amp; (length-1);  
 }  
   public boolean containsValue(Object value) {  
      if (value == null)  
       return containsNullValue();  
      Entry[] tab = table;  
     for (int i = 0; i &amp;lt; tab.length ; i++)  
       for (Entry e = tab[i] ; e != null ; e = e.next)  
         if (value.equals(e.value))  
           return true;  
      return false;  
 }  
   static class Entry&amp;lt;K,V&amp;gt; implements Map.Entry&amp;lt;K,V&amp;gt; {  
     final K key;  
     V value;  
     Entry&amp;lt;K,V&amp;gt; next;  
     final int hash;  
     public final boolean equals(Object o) {  
       if (!(o instanceof Map.Entry))  
         return false;  
       Map.Entry e = (Map.Entry)o;  
       Object k1 = getKey();  
       Object k2 = e.getKey();  
       if (k1 == k2 || (k1 != null &amp;amp;&amp;amp; k1.equals(k2))) {  
         Object v1 = getValue();  
         Object v2 = e.getValue();  
         if (v1 == v2 || (v1 != null &amp;amp;&amp;amp; v1.equals(v2)))  
           return true;  
       }  
       return false;  
     }  
     public final int hashCode() {  
       return (key==null  ? 0 : key.hashCode()) ^  
           (value==null ? 0 : value.hashCode());  
     }  
   }  
   private abstract class HashIterator&amp;lt;E&amp;gt; implements Iterator&amp;lt;E&amp;gt; {  
     Entry&amp;lt;K,V&amp;gt; next;     // next entry to return  
     int expectedModCount;     // For fast-fail  
     int index;          // current slot  
     Entry&amp;lt;K,V&amp;gt; current;     // current entry  
     HashIterator() {  
       expectedModCount = modCount;  
       if (size &amp;gt; 0) { // advance to first entry  
         Entry[] t = table;  
         while (index &amp;lt; t.length &amp;amp;&amp;amp; (next = t[index++]) == null)  
           ;  
       }  
     }  
     public final boolean hasNext() {  
       return next != null;  
     }  
     final Entry&amp;lt;K,V&amp;gt; nextEntry() {  
       if (modCount != expectedModCount)  
         throw new ConcurrentModificationException();  
       Entry&amp;lt;K,V&amp;gt; e = next;  
       if (e == null)  
         throw new NoSuchElementException();  
       if ((next = e.next) == null) {  
         Entry[] t = table;  
         while (index &amp;lt; t.length &amp;amp;&amp;amp; (next = t[index++]) == null)  
           ;  
       }  
        current = e;  
       return e;  
     }  
     public void remove() {  
       if (current == null)  
         throw new IllegalStateException();  
       if (modCount != expectedModCount)  
         throw new ConcurrentModificationException();  
       Object k = current.key;  
       current = null;  
       HashMap.this.removeEntryForKey(k);  
       expectedModCount = modCount;  
     }  
   void resize(int newCapacity) {  
     Entry[] oldTable = table;  
     int oldCapacity = oldTable.length;  
     if (oldCapacity == MAXIMUM_CAPACITY) {  
       threshold = Integer.MAX_VALUE;  
       return;  
     }  
     Entry[] newTable = new Entry[newCapacity];  
     transfer(newTable);  
     table = newTable;  
     threshold = (int)(newCapacity * loadFactor);  
   }  
   void transfer(Entry[] newTable) {  
     Entry[] src = table;  
     int newCapacity = newTable.length;  
     for (int j = 0; j &amp;lt; src.length; j++) {  
       Entry&amp;lt;K,V&amp;gt; e = src[j];  
       if (e != null) {  
         src[j] = null;  
         do {  
           Entry&amp;lt;K,V&amp;gt; next = e.next;  
           int i = indexFor(e.hash, newCapacity);  
           e.next = newTable[i];  
           newTable[i] = e;  
           e = next;  
         } while (e != null);  
       }  
     }  
   }  
   private final class ValueIterator extends HashIterator&amp;lt;V&amp;gt; {  
     public V next() {  
       return nextEntry().value;  
     }  
   }  
   private final class KeyIterator extends HashIterator&amp;lt;K&amp;gt; {  
     public K next() {  
       return nextEntry().getKey();  
     }  
   }  
   private final class EntryIterator extends HashIterator&amp;lt;Map.Entry&amp;lt;K,V&amp;gt;&amp;gt; {  
     public Map.Entry&amp;lt;K,V&amp;gt; next() {  
       return nextEntry();  
     }  
   }  
   // Subclass overrides these to alter behavior of views' iterator() method  
   Iterator&amp;lt;K&amp;gt; newKeyIterator()  {  
     return new KeyIterator();  
   }  
   Iterator&amp;lt;V&amp;gt; newValueIterator()  {  
     return new ValueIterator();  
   }  
   Iterator&amp;lt;Map.Entry&amp;lt;K,V&amp;gt;&amp;gt; newEntryIterator()  {  
     return new EntryIterator();  
   }  
   // Views  
   private transient Set&amp;lt;Map.Entry&amp;lt;K,V&amp;gt;&amp;gt; entrySet = null;  
 }  
   public Set&amp;lt;K&amp;gt; keySet() {  
     Set&amp;lt;K&amp;gt; ks = keySet;  
     return (ks != null ? ks : (keySet = new KeySet()));  
   }  
   private final class KeySet extends AbstractSet&amp;lt;K&amp;gt; {  
     public Iterator&amp;lt;K&amp;gt; iterator() {  
       return newKeyIterator();  
     }  
     public int size() {  
       return size;  
     }  
     public boolean contains(Object o) {  
       return containsKey(o);  
     }  
     public boolean remove(Object o) {  
       return HashMap.this.removeEntryForKey(o) != null;  
     }  
     public void clear() {  
       HashMap.this.clear();  
     }  
 }  
   public Collection&amp;lt;V&amp;gt; values() {  
     Collection&amp;lt;V&amp;gt; vs = values;  
     return (vs != null ? vs : (values = new Values()));  
   }  
   private final class Values extends AbstractCollection&amp;lt;V&amp;gt; {  
     public Iterator&amp;lt;V&amp;gt; iterator() {  
       return newValueIterator();  
     }  
     public int size() {  
       return size;  
     }  
     public boolean contains(Object o) {  
       return containsValue(o);  
     }  
     public void clear() {  
       HashMap.this.clear();  
     }  
 }  
   private void writeObject(java.io.ObjectOutputStream s)  
     throws IOException  
   {  
      Iterator&amp;lt;Map.Entry&amp;lt;K,V&amp;gt;&amp;gt; i =  
        (size &amp;gt; 0) ? entrySet0().iterator() : null;  
      // Write out the threshold, loadfactor, and any hidden stuff  
      s.defaultWriteObject();  
      // Write out number of buckets  
      s.writeInt(table.length);  
      // Write out size (number of Mappings)  
      s.writeInt(size);  
     // Write out keys and values (alternating)  
      if (i != null) {  
        while (i.hasNext()) {  
           Map.Entry&amp;lt;K,V&amp;gt; e = i.next();  
           s.writeObject(e.getKey());  
           s.writeObject(e.getValue());  
        }  
     }  
   }  
   private void readObject(java.io.ObjectInputStream s)  
      throws IOException, ClassNotFoundException  
   {  
      // Read in the threshold, loadfactor, and any hidden stuff  
      s.defaultReadObject();  
      // Read in number of buckets and allocate the bucket array;  
      int numBuckets = s.readInt();  
      table = new Entry[numBuckets];  
    init(); // Give subclass a chance to do its thing.  
      // Read in size (number of Mappings)  
      int size = s.readInt();  
      // Read the keys and values, and put the mappings in the HashMap  
      for (int i=0; i&amp;lt;size; i++) {  
        K key = (K) s.readObject();  
        V value = (V) s.readObject();  
        putForCreate(key, value);  
      }  
 }  
 }  
&lt;/code&gt;&lt;/pre&gt;
&lt;div id=""&gt;
&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12pt;"&gt;Hashtable&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;pre style="background-image: URL(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; public class Hashtable&amp;lt;K,V&amp;gt;  
   extends Dictionary&amp;lt;K,V&amp;gt;  
 implements Map&amp;lt;K,V&amp;gt;, Cloneable, java.io.Serializable {  
   private transient Entry[] table;  
   private transient int count;  
   private int threshold;  
   private float loadFactor;  
   public Hashtable(int initialCapacity, float loadFactor) {  
      this.loadFactor = loadFactor;  
      table = new Entry[initialCapacity];  
      threshold = (int)(initialCapacity * loadFactor);  
   }  
   public Hashtable(Map&amp;lt;? extends K, ? extends V&amp;gt; t) {  
      this(Math.max(2*t.size(), 11), 0.75f);  
      putAll(t);  
 }  
   public synchronized V get(Object key) {  
      Entry tab[] = table;  
      int hash = key.hashCode();  
      int index = (hash &amp;amp; 0x7FFFFFFF) % tab.length;  
      for (Entry&amp;lt;K,V&amp;gt; e = tab[index] ; e != null ; e = e.next) {  
        if ((e.hash == hash) &amp;amp;&amp;amp; e.key.equals(key)) {  
           return e.value;  
        }  
      }  
      return null;  
   }  
   public synchronized V put(K key, V value) {  
      // Make sure the value is not null  
      if (value == null) {  
        throw new NullPointerException();  
      }  
      // Makes sure the key is not already in the hashtable.  
      Entry tab[] = table;  
      int hash = key.hashCode();  
      int index = (hash &amp;amp; 0x7FFFFFFF) % tab.length;  
      for (Entry&amp;lt;K,V&amp;gt; e = tab[index] ; e != null ; e = e.next) {  
        if ((e.hash == hash) &amp;amp;&amp;amp; e.key.equals(key)) {  
           V old = e.value;  
           e.value = value;  
           return old;  
        }  
      }  
      modCount++;  
      if (count &amp;gt;= threshold) {  
        // Rehash the table if the threshold is exceeded  
        rehash();  
       tab = table;  
       index = (hash &amp;amp; 0x7FFFFFFF) % tab.length;  
      }  
      // Creates the new entry.  
      Entry&amp;lt;K,V&amp;gt; e = tab[index];  
      tab[index] = new Entry&amp;lt;K,V&amp;gt;(hash, key, value, e);  
      count++;  
      return null;  
 }  
   protected void rehash() {  
      int oldCapacity = table.length;  
      Entry[] oldMap = table;  
      int newCapacity = oldCapacity * 2 + 1;  
      Entry[] newMap = new Entry[newCapacity];  
      modCount++;  
      threshold = (int)(newCapacity * loadFactor);  
      table = newMap;  
      for (int i = oldCapacity ; i-- &amp;gt; 0 ;) {  
        for (Entry&amp;lt;K,V&amp;gt; old = oldMap[i] ; old != null ; ) {  
           Entry&amp;lt;K,V&amp;gt; e = old;  
           old = old.next;  
           int index = (e.hash &amp;amp; 0x7FFFFFFF) % newCapacity;  
           e.next = newMap[index];  
           newMap[index] = e;  
        }  
      }  
 }  
   public synchronized V remove(Object key) {  
      Entry tab[] = table;  
      int hash = key.hashCode();  
      int index = (hash &amp;amp; 0x7FFFFFFF) % tab.length;  
      for (Entry&amp;lt;K,V&amp;gt; e = tab[index], prev = null ; e != null ; prev = e, e = e.next) {  
        if ((e.hash == hash) &amp;amp;&amp;amp; e.key.equals(key)) {  
           modCount++;  
           if (prev != null) {  
             prev.next = e.next;  
           } else {  
             tab[index] = e.next;  
           }  
           count--;  
           V oldValue = e.value;  
           e.value = null;  
           return oldValue;  
        }  
      }  
      return null;  
   }  
   public synchronized void putAll(Map&amp;lt;? extends K, ? extends V&amp;gt; t) {  
     for (Map.Entry&amp;lt;? extends K, ? extends V&amp;gt; e : t.entrySet())  
       put(e.getKey(), e.getValue());  
   }  
   public synchronized void clear() {  
      Entry tab[] = table;  
      modCount++;  
      for (int index = tab.length; --index &amp;gt;= 0; )  
        tab[index] = null;  
      count = 0;  
 }  
   public synchronized boolean containsKey(Object key) {  
      Entry tab[] = table;  
      int hash = key.hashCode();  
      int index = (hash &amp;amp; 0x7FFFFFFF) % tab.length;  
      for (Entry&amp;lt;K,V&amp;gt; e = tab[index] ; e != null ; e = e.next) {  
        if ((e.hash == hash) &amp;amp;&amp;amp; e.key.equals(key)) {  
           return true;  
        }  
      }  
      return false;  
 }  
 }  
 public abstract class AbstractMap&amp;lt;K,V&amp;gt; implements Map&amp;lt;K,V&amp;gt; {  
   public int hashCode() {  
      int h = 0;  
      Iterator&amp;lt;Entry&amp;lt;K,V&amp;gt;&amp;gt; i = entrySet().iterator();  
      while (i.hasNext())  
        h += i.next().hashCode();  
      return h;  
   }  
    */  
   public boolean equals(Object o) {  
      if (o == this)  
        return true;  
      if (!(o instanceof Map))  
        return false;  
      Map&amp;lt;K,V&amp;gt; m = (Map&amp;lt;K,V&amp;gt;) o;  
      if (m.size() != size())  
        return false;  
     try {  
       Iterator&amp;lt;Entry&amp;lt;K,V&amp;gt;&amp;gt; i = entrySet().iterator();  
       while (i.hasNext()) {  
         Entry&amp;lt;K,V&amp;gt; e = i.next();  
           K key = e.getKey();  
         V value = e.getValue();  
         if (value == null) {  
           if (!(m.get(key)==null &amp;amp;&amp;amp; m.containsKey(key)))  
             return false;  
         } else {  
           if (!value.equals(m.get(key)))  
             return false;  
         }  
       }  
     } catch (ClassCastException unused) {  
       return false;  
     } catch (NullPointerException unused) {  
       return false;  
     }  
      return true;  
 }  
 }  
&lt;/code&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12.0pt; mso-bidi-font-family: &amp;quot;Courier New&amp;quot;; mso-font-kerning: 0pt;"&gt;LinkedHashMap[TODO]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;public class LinkedHashMap extends
HashMap&lt;span&gt;&amp;nbsp; &lt;/span&gt;implements Map&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;// The head of the doubly linked list.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;private transient Entry header;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;* The iteration ordering method for this linked hash map: true&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;* for access-order, false for insertion-order.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;private final boolean accessOrder;&lt;span&gt;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;void init() {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;header = new Entry(-1, null, null, null);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;header.before = header.after = header;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;}&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12.0pt; mso-bidi-font-family: &amp;quot;Courier New&amp;quot;; mso-font-kerning: 0pt;"&gt;HashSet&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;public class HashSet extends AbstractSet
implements Set, Cloneable, java.io.Serializable&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;private transient HashMap map;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;// Dummy value to associate with an Object in the backing Map&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span id="" lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;private static final Object PRESENT = new Object();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;public HashSet() {map = new HashMap();}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;public boolean add(E e) {return map.put(e, PRESENT)==null;} &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10.0pt; mso-font-kerning: 0pt;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12.0pt; mso-bidi-font-family: &amp;quot;Courier New&amp;quot;; mso-font-kerning: 0pt;"&gt;TreeMap&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" id="" style="font-family: Verdana;"&gt;public class TreeMap&lt;k,v&gt; extends AbstractMap&lt;k,v&gt;&lt;/k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; implements NavigableMap&lt;k,v&gt;, Cloneable, java.io.Serializable&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;// it does not extend HashMap &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; private final Comparator&lt;!--? super K--&gt; comparator;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;private transient Entry&lt;k,v&gt; root = null;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; private transient int modCount = 0;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; // private Entry getEntry(Object key)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Returns a Set view of the keys contained in this map. &amp;nbsp;The set's&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* iterator will return the keys in ascending order. &amp;nbsp;The map is backed by&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* this &lt;tt&gt;TreeMap&lt;/tt&gt; instance, so changes to this map are reflected in&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* the Set, and vice-versa. &amp;nbsp;The Set supports element removal, which&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* removes the corresponding mapping from the map, via the&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;tt&gt;Iterator.remove&lt;/tt&gt;, &lt;tt&gt;Set.remove&lt;/tt&gt;, &lt;tt&gt;removeAll&lt;/tt&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* &lt;tt&gt;retainAll&lt;/tt&gt;, and &lt;tt&gt;clear&lt;/tt&gt; operations. &amp;nbsp;It does not support&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* the &lt;tt&gt;add&lt;/tt&gt; or &lt;tt&gt;addAll&lt;/tt&gt; operations.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return a set view of the keys contained in this TreeMap.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; public Set keySet() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (keySet == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; keySet = new AbstractSet() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public Iterator iterator() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new KeyIterator();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public int size() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return TreeMap.this.size();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean contains(Object o) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return containsKey(o);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean remove(Object o) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int oldSize = size;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TreeMap.this.remove(o);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return size != oldSize;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void clear() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TreeMap.this.clear();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return keySet;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; public Collection values() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (values == null) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; values = new AbstractCollection() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public Iterator iterator() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return new ValueIterator();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public int size() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return TreeMap.this.size();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean contains(Object o) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (Entry e = firstEntry(); e != null; e = successor(e))&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (valEquals(e.getValue(), o))&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public boolean remove(Object o) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (Entry e = firstEntry(); e != null; e = successor(e)) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (valEquals(e.getValue(), o)) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; deleteEntry(e);&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void clear() {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; TreeMap.this.clear();&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; };&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return values;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; public boolean containsValue(Object value) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (root==null ? false :&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (value==null ? valueSearchNull(root)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: valueSearchNonNull(root, value)));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; private boolean valueSearchNull(Entry n) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (n.value == null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Check left and right subtrees for value&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (n.left &amp;nbsp;!= null &amp;amp;&amp;amp; valueSearchNull(n.left)) ||&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(n.right != null &amp;amp;&amp;amp; valueSearchNull(n.right));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; private boolean valueSearchNonNull(Entry n, Object value) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Check this node for the value&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (value.equals(n.value))&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Check left and right subtrees for value&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return (n.left &amp;nbsp;!= null &amp;amp;&amp;amp; valueSearchNonNull(n.left, value)) ||&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(n.right != null &amp;amp;&amp;amp; valueSearchNonNull(n.right, value));&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; static final class Entry&lt;k,v&gt; implements Map.Entry&lt;k,v&gt; {&lt;/k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; K key;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; V value;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; left = null;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; right = null;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; parent;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; boolean color = BLACK;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; // Returns the first Entry in the TreeMap (according to the TreeMap's&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; // key-sort function). &amp;nbsp;Returns null if the TreeMap is empty.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; final Entry&lt;k,v&gt; getFirstEntry() {&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; p = root;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (p != null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (p.left != null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p = p.left;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; public boolean containsValue(Object value) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (Entry&lt;k,v&gt; e = getFirstEntry(); e != null; e = successor(e))&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (valEquals(value, e.value))&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return true;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return false;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; } &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; //final Entry&lt;k,v&gt; getLastEntry()&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; // Returns the successor of the specified Entry, or null if no such.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; static &lt;k,v&gt; TreeMap.Entry&lt;k,v&gt; successor(Entry&lt;k,v&gt; t) {&lt;/k,v&gt;&lt;/k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (t == null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (t.right != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; p = t.right;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (p.left != null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p = p.left;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; p = t.parent;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; ch = t;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (p != null &amp;amp;&amp;amp; ch == p.right) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ch = p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p = p.parent;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; // Returns the predecessor of the specified Entry, or null if no such.&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; static &lt;k,v&gt; Entry&lt;k,v&gt; predecessor(Entry&lt;k,v&gt; t) {&lt;/k,v&gt;&lt;/k,v&gt;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (t == null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return null;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else if (t.left != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; p = t.left;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (p.right != null)&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p = p.right;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; p = t.parent;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Entry&lt;k,v&gt; ch = t;&lt;/k,v&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (p != null &amp;amp;&amp;amp; ch == p.left) {&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ch = p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; p = p.parent;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return p;&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;&amp;nbsp; &amp;nbsp; }&lt;/span&gt;&lt;/div&gt;
&lt;div align="left" class="MsoNormal" id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div id="cjabiokabamngnbigeeibddnihgllkgg-mousedown" style="text-align: left;"&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red;"&gt;[TODO]&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12.0pt;"&gt;How BlockingQueue and ConcurrentHashMap are implemented?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12.0pt;"&gt;ThreadLocal&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;public class ThreadLocal {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;public T get() {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Thread t = Thread.currentThread();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;ThreadLocalMap map = getMap(t);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;if (map != null) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;ThreadLocalMap.Entry e = map.getEntry(this);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;if (e != null)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;return (T)e.value;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;return setInitialValue();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;public void set(T value) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;Thread t = Thread.currentThread();&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;ThreadLocalMap map = getMap(t);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;if (map != null)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;map.set(this, value);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;createMap(t, value);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;void createMap(Thread t, T firstValue) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;t.threadLocals = new ThreadLocalMap(this, firstValue);&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;}&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;ThreadLocalMap getMap(Thread t) {&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;return t.threadLocals;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&lt;/span&gt;}&lt;span&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div align="left" class="MsoNormal" style="mso-layout-grid-align: none; text-align: left; text-autospace: none;"&gt;
&lt;b&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; font-size: 12.0pt; mso-bidi-font-family: &amp;quot;Courier New&amp;quot;; mso-font-kerning: 0pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-7699618079423770409?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/7699618079423770409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=7699618079423770409' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/7699618079423770409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/7699618079423770409'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/learning-jdk-code-collection.html' title='Learning JDK Code - Collection'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-7374712086299345858</id><published>2011-06-01T19:35:00.005-07:00</published><updated>2011-06-01T19:35:18.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='English'/><title type='text'>English Punctuation</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:WordDocument&gt;
  &lt;w:View&gt;Normal&lt;/w:View&gt;
  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;
  &lt;w:PunctuationKerning/&gt;
  &lt;w:DrawingGridVerticalSpacing&gt;7.8 pt&lt;/w:DrawingGridVerticalSpacing&gt;
  &lt;w:DisplayHorizontalDrawingGridEvery&gt;0&lt;/w:DisplayHorizontalDrawingGridEvery&gt;
  &lt;w:DisplayVerticalDrawingGridEvery&gt;2&lt;/w:DisplayVerticalDrawingGridEvery&gt;
  &lt;w:ValidateAgainstSchemas/&gt;
  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;
  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;
  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;
  &lt;w:Compatibility&gt;
   &lt;w:SpaceForUL/&gt;
   &lt;w:BalanceSingleByteDoubleByteWidth/&gt;
   &lt;w:DoNotLeaveBackslashAlone/&gt;
   &lt;w:ULTrailSpace/&gt;
   &lt;w:DoNotExpandShiftReturn/&gt;
   &lt;w:AdjustLineHeightInTable/&gt;
   &lt;w:BreakWrappedTables/&gt;
   &lt;w:SnapToGridInCell/&gt;
   &lt;w:WrapTextWithPunct/&gt;
   &lt;w:UseAsianBreakRules/&gt;
   &lt;w:DontGrowAutofit/&gt;
   &lt;w:UseFELayout/&gt;
  &lt;/w:Compatibility&gt;
  &lt;w:BrowserLevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;
 &lt;/w:WordDocument&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;
 &lt;w:LatentStyles DefLockedState="false" LatentStyleCount="156"&gt;
 &lt;/w:LatentStyles&gt;
&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;
&lt;style&gt;
 /* Style Definitions */
 table.MsoNormalTable
 {mso-style-name:"Table Normal";
 mso-tstyle-rowband-size:0;
 mso-tstyle-colband-size:0;
 mso-style-noshow:yes;
 mso-style-parent:"";
 mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
 mso-para-margin:0cm;
 mso-para-margin-bottom:.0001pt;
 mso-pagination:widow-orphan;
 font-size:10.0pt;
 font-family:"Times New Roman";
 mso-fareast-font-family:"Times New Roman";
 mso-ansi-language:#0400;
 mso-fareast-language:#0400;
 mso-bidi-language:#0400;}
&lt;/style&gt;
&lt;![endif]--&gt;

&lt;br /&gt;
&lt;h3 align="center" style="text-align: center;"&gt;
&lt;span lang="EN-US"&gt;English Punctuation&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;?&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;question mark&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;!&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;exclamation mark/exclamation point&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;/&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;slash, divide, oblique&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;\&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;backslash, sometimes escape&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;slash-slash, comment&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;ampersand, and, reference, ref&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;*&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;asterisk, multiply, star, pointer&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;~&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;tilde&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　波浪符&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;'&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;apostrophe&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　撇号&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&amp;amp;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;ampersand &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;和号&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;"&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;single quotation marks&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;""&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;double quotation marks&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;→&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;arrow&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;...&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;ellipsis/dots&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;{&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;open brace, open curly&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;}&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;close brace, close curly&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;open parenthesis, open paren&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;)&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;close parenthesis, close paren&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;()
parentheses/brakets&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;[&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;open bracket&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;]&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;close bracket&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;[]
square brackets&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;period, dot&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;|&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;vertical bar, vertical virgule&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;#&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;pound&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　井号&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;.&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;full stop&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;,&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;comma&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;:&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;colon&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;;&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;semicolon&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;hyphen&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;--
dash&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;‖&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;
parallel&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;～　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;swung dash &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;代字号&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;§&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;section; division &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;分节号&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;+&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt; plus&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;-&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt; minus sign,&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;±&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;plus or minus sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;×&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;multiple sign, product sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;÷&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;division sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;＝　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;equality sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;≠&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Not equality sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;≡&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;equivalent to&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;≌&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;equal to or approximately equal to&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;≈&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;approximately equal to&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;＜　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;less than sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;＞　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;more than sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;≮&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;not less than sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;≯&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;not more than sign&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;≤&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;less than or equal to&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;≥&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;more than or equal to&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;%&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt; per cent&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;‰&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;per mill&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;-∞&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;infinity&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;+∞&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;infinity&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;∝&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;varies as&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;√&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;(square) root&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;∵&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;since; because&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;∴&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;hence&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-size: 12.0pt; mso-ascii-font-family: Verdana;"&gt;∷&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;equals, as (proportion)&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;∠&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;angle&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;⌒&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;semicircle&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;⊙&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;circle&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;○&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;circumference&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;π&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;pi &lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;圆周率&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;△&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;triangle&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;⊥&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;perpendicular to&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　垂直于&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;∪&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;union of&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;∩&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;intersection of&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;∫&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;the integral of …&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;的积分&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;∑&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;(sigma) summation of&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　总和&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;°&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;degree&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;′&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;minute&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;″&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;second&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;℃&lt;/span&gt;&lt;span style="font-family: 宋体; font-size: 12.0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana;"&gt;　&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Celsius system&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Resources:&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US"&gt;&lt;a href="http://www.hao360.com/page/details.asp?id=6595"&gt;http://www.hao360.com/page/details.asp?id=6595&lt;/a&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-7374712086299345858?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/7374712086299345858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=7374712086299345858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/7374712086299345858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/7374712086299345858'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/english-punctuation.html' title='English Punctuation'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-2838585379089551077</id><published>2011-06-01T03:36:00.001-07:00</published><updated>2011-06-01T03:36:47.934-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2SE'/><category scheme='http://www.blogger.com/atom/ns#' term='Interview'/><title type='text'>Java New Features History</title><content type='html'>&lt;br /&gt;
&lt;h3 align="center" style="text-align: center;"&gt;
&lt;span lang="EN-US"&gt;Java New Features
History&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;a href="http://download.oracle.com/javase/1,5.0/docs/relnotes/features.html"&gt;JDK
5 New Features&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Generics
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Annotations(Metadata)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Autoboxing/Unboxing
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Typesafe
Enums &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Enhanced
for &lt;st1:place w:st="on"&gt;Loop&lt;/st1:place&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Varargs
&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Static
Import&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;a href="http://java.sun.com/javase/6/features.jsp"&gt;JDK 6 New Features&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;&lt;a href="http://openjdk.java.net/projects/jdk7/features/"&gt;JDK 7 New Features&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Language
Changes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Strings
in switch&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Multiple
Exception Handling&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Elvis
Operator&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Standard
example: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;String
s = mayBeNull?.toString() ?: "null"; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Auto-unboxing
example: &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Integer
ival = ...; // may be null &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;int
i = ival ?: -1; // no NPE from unboxing&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;JSR
292: Support for dynamically-typed languages &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;NIO.2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;TLS
1.2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;JDBC
4.1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Support
Unicode 6.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;New
File I/O API&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; font-size: 12.0pt;"&gt;Asynchronous
I/0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5815704953143705619-2838585379089551077?l=yuanyun-kenny.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yuanyun-kenny.blogspot.com/feeds/2838585379089551077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5815704953143705619&amp;postID=2838585379089551077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/2838585379089551077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5815704953143705619/posts/default/2838585379089551077'/><link rel='alternate' type='text/html' href='http://yuanyun-kenny.blogspot.com/2011/06/java-new-features-history.html' title='Java New Features History'/><author><name>Jeffery yuan</name><uri>https://profiles.google.com/101157854606139706613</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5815704953143705619.post-4248913086945585185</id><published>2011-06-01T03:26:00.001-07:00</published><updated>2011-06-01T03:26:43.438-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='J2SE'/><category scheme='http://www.blogger.com/atom/ns#' term='Interview'/><title type='text'>Java Reflection Miscs</title><content type='html'>&lt;br /&gt;
&lt;h3 align="center" style="text-align: center;"&gt;
&lt;span lang="EN-US"&gt;Java Reflection
Miscs&lt;/span&gt;&lt;/h3&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Proxy Design
Pattern&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;A proxy supports the interface of another object, its
target, so that the proxy can substitute for the target for all practical
purposes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The proxy implements the same interface as the target so
that it can be used in exactly the same way. The proxy delegates some or all of
the calls that it receives to its target and thus acts as either an
intermediary or a substitute. In its role as an intermediary, the proxy may add
functionality either before or after the method is forwarded to the target.
This gives the reflective programmer the capability to add behavior to objects&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Using Java’s
dynamic proxy&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;The Java reflection API contains a dynamic proxy-creation
facility:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;java.lang.reflect.Proxy.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="color: blue; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Proxy class&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Each class constructed by these factory methods is a
public final subclass of Proxy, referred to as a proxy class. We refer to an
instance of one of these dynamically constructed proxies as a proxy instance.
We call the interfaces that the proxy class implements in this way proxied
interfaces. A proxy instance is assignment-compatible with all of its proxied
interfaces. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;All proxy classes have a constructor that takes an
InvocationHandler parameter. InvocationHandler is an interface for objects that
handle methods received by proxy instances through their proxied interfaces.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span lang="EN-US" style="color: red; font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Understanding
invocation handlers&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;Proxy allows programmers to accomplish the delegation task
by providing the&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;InvocationHandler interface. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;invocation handlers are objects that handle each method
call for a proxy instance. Invocation handlers are also responsible for holding
any references to targets of the proxy instance.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;A proxy instance forwards method calls to its invocation
handler by calling invoke.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;public interface InvocationHandler {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="MsoNormal"&gt;
&lt;span lang="EN-US" style="font-family: Verdana; mso-bidi-font-size: 10.5pt;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;public Object
invoke( Object proxy, Method method, Object[] args ) throws
