﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-巷尾的酒吧</title><link>http://www.blogjava.net/abin/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2026 05:59:48 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2026 05:59:48 GMT</pubDate><ttl>60</ttl><item><title>linux基本命令</title><link>http://www.blogjava.net/abin/archive/2014/05/22/413978.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Thu, 22 May 2014 08:21:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2014/05/22/413978.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/413978.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2014/05/22/413978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/413978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/413978.html</trackback:ping><description><![CDATA[返回上次访问目录，在命令行输入：<br />cd -<img src ="http://www.blogjava.net/abin/aggbug/413978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2014-05-22 16:21 <a href="http://www.blogjava.net/abin/archive/2014/05/22/413978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java基础知识</title><link>http://www.blogjava.net/abin/archive/2013/12/20/407812.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Fri, 20 Dec 2013 06:35:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/12/20/407812.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/407812.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/12/20/407812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/407812.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/407812.html</trackback:ping><description><![CDATA[<font class="Apple-style-span" color="#8a8679" face="'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, u5b8bu4f53" size="3"><div><div style="line-height: 28px; ">一、Java基础知识</div><div style="line-height: 28px; ">1.Java有那些基本数据类型，String是不是基本数据类型，他们有何区别。</div><div style="line-height: 28px; ">2.字符串的操作：</div><div style="line-height: 28px; ">&nbsp; 写一个方法，实现字符串的反转，如：输入abc，输出cba</div><div style="line-height: 28px; ">&nbsp; 写一个方法，实现字符串的替换，如：输入bbbwlirbbb，输出bbbhhtccc。</div><div style="line-height: 28px; ">3.数据类型之间的转换</div><div style="line-height: 28px; ">&nbsp; 如何将数值型字符转换为数字（Integer，Double）</div><div style="line-height: 28px; ">&nbsp; 如何将数字转换为字符</div><div style="line-height: 28px; ">&nbsp; 如何取小数点前两位，并四舍五入。</div><div style="line-height: 28px; ">4.日期和时间</div><div style="line-height: 28px; ">&nbsp; 如何取得年月日，小时分秒</div><div style="line-height: 28px; ">&nbsp; 如何取得从1970年到现在的毫秒数</div><div style="line-height: 28px; ">&nbsp; 如何获取某个日期是当月的最后一天</div><div style="line-height: 28px; ">&nbsp; 如何格式化日期</div><div style="line-height: 28px; ">5.数组和集合</div><div style="line-height: 28px; ">6.文件和目录（I/O）操作</div><div style="line-height: 28px; ">&nbsp; 如何列出某个目录下的所有文件</div><div style="line-height: 28px; ">&nbsp; 如何列出某个目录下的所有子目录</div><div style="line-height: 28px; ">&nbsp; 判断一个文件或目录是否存在</div><div style="line-height: 28px; ">&nbsp; 如何读写文件</div><div style="line-height: 28px; ">7.Java多态的实现（继承、重载、覆盖）</div><div style="line-height: 28px; ">8.编码转换，怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。</div><div style="line-height: 28px; ">9.Java中访问数据库的步骤，Statement和PreparedStatement之间的区别。</div><div><span class="Apple-style-span" style="line-height: 28px;">10.找出下列代码可能存在的错误，并说明原因：</span><br /><br /><br /><br /><div><div><span style="line-height: 28px;">一、问答题</span></div><div><span style="line-height: 28px;"><br /></span></div><div><span style="line-height: 28px;">1、面向对象的特征有哪些方面？</span></div><div><span style="line-height: 28px;">2、abstract class和interface有什么区别?</span></div><div><span style="line-height: 28px;">3、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?</span></div><div><span style="line-height: 28px;">4、JSP的内置对象有哪些？</span></div><div><span style="line-height: 28px;">5、MVC模式的工作原理？</span></div><div><span style="line-height: 28px;">6、HashMap和Hashtable的区别？</span></div><div><span style="line-height: 28px;">7、String 和StringBuffer的区别？</span></div><div><span style="line-height: 28px;">8、说出Servlet的生命周期，并说出Servlet和CGI的区别</span></div><div><span style="line-height: 28px;">9、简述SSH概念及原理？</span></div><div><span style="line-height: 28px;">10、概述存储过程的优点和缺点及怎么优化存储过程？</span></div><div><span style="line-height: 28px;">二、查错题</span></div><div><span style="line-height: 28px;">1、abstract class Name {</span></div><div><span style="line-height: 28px;">private String name;</span></div><div><span style="line-height: 28px;">public abstract boolean isStupidName(String name) {}</span></div><div><span style="line-height: 28px;">}</span></div><div><span style="line-height: 28px;">2、public class Something {</span></div><div><span style="line-height: 28px;">void doSomething () {</span></div><div><span style="line-height: 28px;">private String s = &#8220;&#8221;;</span></div><div><span style="line-height: 28px;">int l = s.length();</span></div><div><span style="line-height: 28px;">}}</span></div><div><span style="line-height: 28px;">3.、abstract class Something {</span></div><div><span style="line-height: 28px;">private abstract String doSomething ();</span></div><div><span style="line-height: 28px;">}</span></div><div><span style="line-height: 28px;">4、public class Something {</span></div><div><span style="line-height: 28px;">public int addOne(final int x) {</span></div><div><span style="line-height: 28px;">return ++x;</span></div><div><span style="line-height: 28px;">} }</span></div><div><span style="line-height: 28px;"><br /></span></div><div><span style="line-height: 28px;">5、public class Something {</span></div><div><span style="line-height: 28px;">public static void main(String[] args) {</span></div><div><span style="line-height: 28px;">Something s = new Something();</span></div><div><span style="line-height: 28px;">System.out.println(&#8220;s.doSomething() returns &#8221; +doSomething());</span></div><div><span style="line-height: 28px;">}</span></div><div><span style="line-height: 28px;"><br /></span></div><div><span style="line-height: 28px;">public String doSomething() {</span></div><div><span style="line-height: 28px;">return &#8220;Do something &#8230;&#8221;;</span></div><div><span style="line-height: 28px;">}</span></div><div><span style="line-height: 28px;">}</span></div><div><span style="line-height: 28px;">三、设计题</span></div><div><span style="line-height: 28px;">1、设计4个线程，其中两个线程每次对j增加1，另外两个线程对j每次减少1。写出程序</span></div><div><span style="line-height: 28px;">2、现在输入n个数字，以逗号，分开；然后可选择升或者降序排序；按提交键就在另一页面显示按什么排序，结果为，提供reset</span></div><div><span style="line-height: 28px;">四、编程题</span></div><div><span style="line-height: 28px;">1、写一个Singleton出来</span></div><div><span style="line-height: 28px;">2、字符串的操作：</span></div><div><span style="line-height: 28px;">写一个方法，实现字符串的反转，如：输入abc，输出cba</span></div><div><span style="line-height: 28px;">写一个方法，实现字符串的替换，如：输入bbbwlirbbb，输出bbbhhtccc。</span></div><div><span style="line-height: 28px;">五、逻辑思维分析题</span></div><div><span style="line-height: 28px;">1、一个小偷被警察发现。警察就追小偷，小偷就跑，跑着跑着，前面出现一条河，这河宽12米，河在小偷和警察这面有棵树，树高12米，书上叶子都光了。小偷围着个围脖长6米，请问小偷如何过河跑？</span></div><div><span style="line-height: 28px;">2、烧一根不均匀的绳子要用一个小时，如何用它来判断半个小时？烧一根不均匀的绳，从头烧到尾总共要一个小时，现在有若干条材质相同的绳子，问如何用烧绳子的方法计时一个小时十五分钟呢？</span></div><div><span style="line-height: 28px;">六、综合题</span></div><div><span style="line-height: 28px;">1、请用不超过30个字给出一个最能让我们录用你的理由</span></div><div><span style="line-height: 28px;">2、如果我们录用你，你将怎样去开展工作</span></div><div><span style="line-height: 28px;">3、当你与上级意见不一致的时，你将怎么办</span></div><div><span style="line-height: 28px;">4、你对于开发这一职位加班有什么看法</span></div></div><br /><br /><br /><br /><br /><br /><br /><br /><br /></div></div></font><img src ="http://www.blogjava.net/abin/aggbug/407812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-12-20 14:35 <a href="http://www.blogjava.net/abin/archive/2013/12/20/407812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 二叉树算法</title><link>http://www.blogjava.net/abin/archive/2013/11/25/406815.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Mon, 25 Nov 2013 13:28:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/11/25/406815.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/406815.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/11/25/406815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/406815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/406815.html</trackback:ping><description><![CDATA[二叉树算法资料收集：<br /><div><div> <img src="file:///C:\Users\STEVEN~1\AppData\Local\Temp\[5UQ[BL(6~BS2JV6W}N6[%S.png" alt="" />http://blog.sina.com.cn/s/blog_ba46b52b0101i6mj.html<br /><br /><img src="file:///C:\Users\STEVEN~1\AppData\Local\Temp\[5UQ[BL(6~BS2JV6W}N6[%S.png" alt="" />http://blog.sina.com.cn/s/blog_70600f720100ujnp.html<br /><br /><img src="file:///C:\Users\STEVEN~1\AppData\Local\Temp\[5UQ[BL(6~BS2JV6W}N6[%S.png" alt="" />http://blog.csdn.net/kiritor/article/details/8892648&nbsp;<br />&nbsp;<br /><img src="file:///C:\Users\STEVEN~1\AppData\Local\Temp\[5UQ[BL(6~BS2JV6W}N6[%S.png" alt="" />http://iask.sina.com.cn/b/9950186.html</div></div><div><div>http://blog.csdn.net/kangojian/article/details/3990212</div></div><br /><div>http://blog.csdn.net/kangojian/article/details/3990206</div><br /><div>http://wenwen.soso.com/z/q69052983.htm</div><div>http://justsee.iteye.com/blog/1097176</div><br /><br />平衡二叉树：<br /><div>http://blog.csdn.net/zxman660/article/details/7940190</div><br /><br /><br />二叉树的深度：<br /><div>http://blog.163.com/xiaopengyan_109/blog/static/14983217320108168618624/<br /><br /><br />二叉树删除：<br /><div>http://www.cnblogs.com/xunmengyoufeng/archive/2012/10/01/BityTree.html</div><div>http://marcospring.iteye.com/blog/1623571<br /><div>http://www.cnblogs.com/KeenLeung/archive/2012/11/03/2750545.html<br /><br /><br />二叉树查找节点：<br /><div>http://www.cnblogs.com/KeenLeung/archive/2012/11/03/2750545.html</div><div></div><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></div></div></div><img src ="http://www.blogjava.net/abin/aggbug/406815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-11-25 21:28 <a href="http://www.blogjava.net/abin/archive/2013/11/25/406815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三大Java 虚拟机垃圾回收机制的比较（HotSpot, JRockit, IBM JVM）</title><link>http://www.blogjava.net/abin/archive/2013/11/09/406159.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Sat, 09 Nov 2013 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/11/09/406159.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/406159.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/11/09/406159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/406159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/406159.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p>原文地址：http://apmblog.compuware.com/2011/05/11/how-garbage-collection-differs-in-the-three-big-jvms/<br /></p><p>========================================================================================</p><p>&nbsp;</p><p><span style="color: #1f497d; ">Hotspot JVM</span><span style="color: #1f497d; ">使用和</span><span style="color: #1f497d; ">&nbsp;IBM Websphere</span><span style="color: #1f497d; ">及</span><span style="color: #1f497d; ">&nbsp;OracleWeblogic</span><span style="color: #1f497d; ">不同的垃圾回收机制，但是垃圾回收的概念和算法是相通的。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><strong><u><span style="color: #1f497d; ">HotSpotJVM</span></u></strong></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">1</span><span style="color: #1f497d; ">）</span><span style="color: #1f497d; ">HotSpotJVM</span><span style="color: #1f497d; ">使用内存分区（如永久</span><span style="color: #1f497d; ">perm</span><span style="color: #1f497d; ">区和分代</span><span style="color: #1f497d; ">Generation Heap</span><span style="color: #1f497d; ">区），分代区</span><span style="color: #1f497d; ">(Generation Heap</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">)</span><span style="color: #1f497d; ">又包括新生</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">和</span><span style="color: #1f497d; ">老生</span><span style="color: #1f497d; ">Old/Tenured</span><span style="color: #1f497d; ">区，</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区中又分为</span><span style="color: #1f497d; ">Eden</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">和</span><span style="color: #1f497d; ">&nbsp;Survior</span><span style="color: #1f497d; ">区（</span><span style="color: #1f497d; ">2</span><span style="color: #1f497d; ">块）；</span></p><p><br /></p><p><span style="color: #1f497d; ">2</span><span style="color: #1f497d; ">）</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">&nbsp;GC</span><span style="color: #1f497d; ">：对象先在</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区的</span><span style="color: #1f497d; ">Eden</span><span style="color: #1f497d; ">中得到分配，任何时候</span><span style="color: #1f497d; ">Eden</span><span style="color: #1f497d; ">区满了就会触发</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">&nbsp;(Minor GC?)，</span><span style="color: #1f497d; ">会把</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">Eden</span><span style="color: #1f497d; ">中仍存活的</span><span style="color: #1f497d; ">Live</span><span style="color: #1f497d; ">对象拷贝到空的那个</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区，除此之外，另外一个</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区中的对象也会被检查和拷贝（在</span><span style="color: #1f497d; ">2</span><span style="color: #1f497d; ">个</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区之间拷贝对象的频率是可配置的），其结果就是对象仅存在于一个</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区中，而</span><span style="color: #1f497d; ">Eden</span><span style="color: #1f497d; ">区和</span><span style="color: #1f497d; ">另一块</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区是空的。这种形式的</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">叫&#8220;拷贝收集（</span><span style="color: #1f497d; ">Copy Collection</span><span style="color: #1f497d; ">）&#8221;。</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区中多次</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">后仍存活的对象会被提升</span><span style="color: #1f497d; ">/</span><span style="color: #1f497d; ">拷贝到</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">3</span><span style="color: #1f497d; ">）</span><span style="color: #1f497d; ">&nbsp;Old</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">&nbsp;GC</span><span style="color: #1f497d; ">：标记和打扫（</span><span style="color: #1f497d; ">Mark &amp; Sweep)</span><span style="color: #1f497d; ">算法是老生区</span><span style="color: #1f497d; ">(OldHeap)</span><span style="color: #1f497d; ">使用的</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">算法，与新生代</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区算法不同的地方在于它不拷贝对象。对象越多</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">消耗时间越长，因此老生区</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">代价很高并尽量避免，</span><span style="color: #1f497d; ">因此我们需要保证对象仅仅从</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区拷贝到</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区并保证</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区不被填满，因此，代区的大小是</span><span style="color: #1f497d; ">Hotspot JVM</span><span style="color: #1f497d; ">中单一的一个最重要的优化参数。如果我们不能阻止对象从</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区拷贝到</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区，我们可以使用&#8220;并发标记和打扫算法&#8221;（</span><span style="color: #1f497d; ">CMS -Concurrent Mark and Sweep)</span><span style="color: #1f497d; ">，此算法可以并行的进行收集操作。</span><span style="color: #1f497d; ">（停顿时间：串行</span><span style="color: #1f497d; ">(Serial) &lt;</span><span style="color: #1f497d; ">平行</span><span style="color: #1f497d; ">(Parallel) &lt;</span><span style="color: #1f497d; ">并发</span><span style="color: #1f497d; ">(Concurrent)</span><span style="color: #1f497d; ">）。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">还有其他问题，比如&#8220;碎片问题&#8221;会导致&#8220;慢分配&#8221;，更长的打扫时间并最终会导致</span><span style="color: #1f497d; ">OOM</span><span style="color: #1f497d; ">（当分配大对象而遇到的全是小空间时）</span><span style="color: #1f497d; ">.</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">碎片问题可通过</span><span style="color: #1f497d; ">被称为&#8220;压缩&#8221;的方法来解决。&#8220;串行和平行算法（</span><span style="color: #1f497d; ">Serialand Parallel)</span><span style="color: #1f497d; ">&#8221;会在每次</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区进行</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">时进行压缩，它不对整个</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区压缩而只对</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区中碎片程度达到一定</span><span style="color: #1f497d; ">Level</span><span style="color: #1f497d; ">的区域区进行。相比之下，&#8220;并发标记和打扫算法</span><span style="color: #1f497d; ">CMS</span><span style="color: #1f497d; ">&#8221;根本就不会进行压缩。当对象不能再被分配时，一个串行的&#8220;主要</span><span style="color: #1f497d; ">MajorGC</span><span style="color: #1f497d; ">&#8221;会被触发。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">因此，</span><span style="color: #1f497d; ">HotSpot&nbsp;</span><span style="color: #1f497d; ">的第二个调整参数是选择正确的</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">策略，</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">策略的选择会影响应用的性能，</span><span style="color: #1f497d; ">HotSpot</span><span style="color: #1f497d; ">中的大部分</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">策略调整选项参数是是关于分片和压缩的，</span><span style="color: #1f497d; ">&nbsp;HotspotJVM</span><span style="color: #1f497d; ">没有提供太多调整参数，因此，唯一的方法是优化代码减少申请对象的次数。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">4) Permanent Generation&nbsp;</span><span style="color: #1f497d; ">永久区：</span><span style="color: #1f497d; ">保存属于类的（静态的）属性和字符串常量等，永久区的</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">只会发生在&#8220;主要</span><span style="color: #1f497d; ">Major GC</span><span style="color: #1f497d; ">&#8221;时（</span><span style="color: #1f497d; ">Major GC</span><span style="color: #1f497d; ">很少发生），因此很多人认为</span><span style="color: #1f497d; ">Hotspot JVM</span><span style="color: #1f497d; ">在永久区根本不会</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">Major GC -&nbsp;</span><span style="color: #1f497d; ">&#8220;</span><span style="color: #1f497d; ">Stops the world</span><span style="color: #1f497d; ">&#8221;</span><span style="color: #1f497d; ">&nbsp;and</span><span style="color: #1f497d; ">&#8220;</span><span style="color: #1f497d; ">cost much time</span><span style="color: #1f497d; ">&#8221;</span><span style="color: #1f497d; ">, e.g. Full GC.</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><strong><u><span style="color: #1f497d; ">OracleJRockit</span></u></strong></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">1) Oracle WebLogic</span><span style="color: #1f497d; ">使用的</span><span style="color: #1f497d; ">JVM</span><span style="color: #1f497d; ">，将来会和</span><span style="color: #1f497d; ">Hotspot</span><span style="color: #1f497d; ">合并</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">2) Heap</span><span style="color: #1f497d; ">策略</span><span style="color: #1f497d; ">&nbsp;-</span><span style="color: #1f497d; ">也使用&#8220;分代</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">&#8221;，而且支持一个所谓的&#8220;连续</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">&#8221;。分代</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">分为：老生区（</span><span style="color: #1f497d; ">Old/Tenured)</span><span style="color: #1f497d; ">和苗圃</span><span style="color: #1f497d; ">/</span><span style="color: #1f497d; ">新生区（</span><span style="color: #1f497d; ">Nursery)</span><span style="color: #1f497d; ">，当对象被申请时，他们被放在一个新生区中称为</span><span style="color: #1f497d; ">Keep Area</span><span style="color: #1f497d; ">的地方，</span><span style="color: #1f497d; ">在</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">时，</span><span style="color: #1f497d; ">Keep Area</span><span style="color: #1f497d; ">不会被考虑而其它仍然存活的对象会被马上移到老生区。因此，新生区的大小是</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">很重要的参数。</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">在第二次新生代</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">时就会拷贝那些对象到</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">的&#8220;连续</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">&#8221;不区分&#8220;新&#8221;和&#8220;老&#8221;的对象，常常在特定的情况下比如以大吞吐量下的批量任务会产生很好的性能，它是</span><span style="color: #1f497d; ">JRockit Server JVM</span><span style="color: #1f497d; ">模式下的默认设置，而且往往不是正确的选择，因为典型的</span><span style="color: #1f497d; ">Web</span><span style="color: #1f497d; ">应用不是面向吞吐量而是面向响应时间，因此人们往往会选择低停顿时间模式和分代</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">策略。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">3) CMS -</span></p><p><span style="color: #1f497d; ">大部分的</span><span style="color: #1f497d; ">CMS</span><span style="color: #1f497d; ">标记</span><span style="color: #1f497d; ">阶段可分为</span><span style="color: #1f497d; ">4</span><span style="color: #1f497d; ">个部分</span></p><p><span style="color: #1f497d; ">&nbsp;&nbsp;&nbsp; 1.&nbsp;</span><span style="color: #1f497d; ">初始标记</span><span style="color: #1f497d; ">&nbsp;-</span><span style="color: #1f497d; ">标记生成</span><span style="color: #1f497d; ">Live</span><span style="color: #1f497d; ">对象的</span><span style="color: #1f497d; ">Root</span><span style="color: #1f497d; ">集合</span><span style="color: #1f497d; ">&nbsp;- Java Thread</span><span style="color: #1f497d; ">会被</span><span style="color: #1f497d; ">paused</span></p><p><span style="color: #1f497d; ">&nbsp;&nbsp; &nbsp;2&nbsp;</span><span style="color: #1f497d; ">并发标记</span><span style="color: #1f497d; ">&nbsp;-</span><span style="color: #1f497d; ">根据</span><span style="color: #1f497d; ">root</span><span style="color: #1f497d; ">集合中的对象查找并标记其引用的</span><span style="color: #1f497d; ">Live</span><span style="color: #1f497d; ">对象</span><span style="color: #1f497d; ">&nbsp;-- Java Thread</span><span style="color: #1f497d; ">正常运行</span></p><p><span style="color: #1f497d; ">&nbsp;&nbsp;&nbsp; 3&nbsp;</span><span style="color: #1f497d; ">预清理</span><span style="color: #1f497d; ">&nbsp;-</span><span style="color: #1f497d; ">找出&#8220;并发标记&#8221;发现的需要修改的地方并发现和标记其它额外的</span><span style="color: #1f497d; ">Live</span><span style="color: #1f497d; ">对象</span><span style="color: #1f497d; ">-- Java Thread</span><span style="color: #1f497d; ">正常运行</span><span style="color: #1f497d; "><br />&nbsp;&nbsp;&nbsp; 4&nbsp;</span><span style="color: #1f497d; ">最终标记</span><span style="color: #1f497d; ">-</span><span style="color: #1f497d; ">找出在预清理阶段发现的需要改变的地方并发现和标记其它额外的</span><span style="color: #1f497d; ">Live</span><span style="color: #1f497d; ">对象</span><span style="color: #1f497d; ">&nbsp;-- Java Thread</span><span style="color: #1f497d; ">会被</span><span style="color: #1f497d; ">Paused</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">CMS&nbsp;</span><span style="color: #1f497d; ">打扫阶段</span><span style="color: #1f497d; ">也和</span><span style="color: #1f497d; ">&nbsp;Application</span><span style="color: #1f497d; ">并发执行，</span><span style="color: #1f497d; ">&nbsp;&nbsp;</span><span style="color: #1f497d; ">但和</span><span style="color: #1f497d; ">Hotspot JVM</span><span style="color: #1f497d; ">的分</span><span style="color: #1f497d; ">2</span><span style="color: #1f497d; ">个阶段相比，</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">会先清扫</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">的第一半部分，</span><span style="color: #1f497d; ">在此阶段，线程会被允许在</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">的第二半部分进行对象申请。在一个短暂的同步停顿后，会打扫第二半部分然后会有一个短暂的最后的停顿期。</span></p><p><span style="color: #1f497d; ">因此，</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">的算法比</span><span style="color: #1f497d; ">HotSpot</span><span style="color: #1f497d; ">的算法停顿更多，但是标记阶段会短一些。而且它不像</span><span style="color: #1f497d; ">HotSpot JVM</span><span style="color: #1f497d; ">那样可以通过调整未用内存的百分比来触发</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">4)&nbsp;</span><span style="color: #1f497d; ">压缩</span></p><p><span style="color: #1f497d; ">JRockit&nbsp;</span><span style="color: #1f497d; ">在所有的</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">老生区</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">进行压缩，</span><span style="color: #1f497d; ">包括</span><span style="color: #1f497d; ">CMS</span><span style="color: #1f497d; ">。</span><span style="color: #1f497d; ">它通过一种按</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">中分区增量的模式进行的，这些各类参数可以调整，比如按堆百分比压缩，或</span><span style="color: #1f497d; ">最大多少对象会被压缩，而且你可以完全把压缩关掉</span><span style="color: #1f497d; ">或者在</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">时进行&#8220;完全压缩&#8221;。因此可配置性比</span><span style="color: #1f497d; ">HotSpot</span><span style="color: #1f497d; ">更强。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">5)&nbsp;</span><span style="color: #1f497d; ">线程本地分配</span><span style="color: #1f497d; ">TLA</span><span style="color: #1f497d; ">（</span><span style="color: #1f497d; ">Thread Local Allocation)</span></p><p><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">默认使用线程本地分配</span><span style="color: #1f497d; ">TLA,</span><span style="color: #1f497d; ">这允许线程不需要同步即可分配对象，这将有利于分配速度，</span><span style="color: #1f497d; ">TLA</span><span style="color: #1f497d; ">的大小而且可以配置，大的</span><span style="color: #1f497d; ">TLA</span><span style="color: #1f497d; ">可以优化使用大量线程本地分配对象的应用，</span><span style="color: #1f497d; ">另一方面，太大的</span><span style="color: #1f497d; ">TLA</span><span style="color: #1f497d; ">会导致更多的碎片，</span><span style="color: #1f497d; ">因为</span><span style="color: #1f497d; ">TLA</span><span style="color: #1f497d; ">是被线程以排斥的方式独有的，因此受限于线程数并依赖于应用的架构。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">6)&nbsp;</span><span style="color: #1f497d; ">大对象和小对象</span></p><p><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">在分配大对象和小对象时区别对待，</span><span style="color: #1f497d; ">大小的定义在</span><span style="color: #1f497d; ">JVM</span><span style="color: #1f497d; ">的版本不同而不同，常常</span><span style="color: #1f497d; ">2-128Kb</span><span style="color: #1f497d; ">之间，大对象在线程本地意外的</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区分配，而新生</span><span style="color: #1f497d; ">Yong</span><span style="color: #1f497d; ">区使用&#8220;拷贝收集</span><span style="color: #1f497d; ">-Copy Collection&nbsp;</span><span style="color: #1f497d; ">（见</span><span style="color: #1f497d; ">Hotspot Yong</span><span style="color: #1f497d; ">区</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">）&#8221;，在某些点，拷贝一个对象变得比它被</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">更消耗。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">7)&nbsp;</span><span style="color: #1f497d; ">没有永久区</span><span style="color: #1f497d; ">&nbsp;-- JRockit JVM</span><span style="color: #1f497d; ">没有永久区</span><span style="color: #1f497d; ">,&nbsp;</span><span style="color: #1f497d; ">所有类的属性和字符串常量放在通常的</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">区域，</span><span style="color: #1f497d; ">因此如果它不再被使用，会被马上回收。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><strong><u><span style="color: #1f497d; ">IBM JVM</span></u></strong></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">IBM JVM&nbsp;</span><span style="color: #1f497d; ">被</span><span style="color: #1f497d; ">IBMWebsphere</span><span style="color: #1f497d; ">使用，它和</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">有很多相同地方，它默认的使用一个&#8220;连续的</span><span style="color: #1f497d; ">Heap</span><span style="color: #1f497d; ">&#8221;，</span><span style="color: #1f497d; ">特别是在</span><span style="color: #1f497d; ">Websphere</span><span style="color: #1f497d; ">安装过程中，这往往是导致最初的低性能的原因。</span><span style="color: #1f497d; ">它和</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">一样区分大小对象，并默认使用线程本地分配</span><span style="color: #1f497d; ">TLA</span><span style="color: #1f497d; ">，</span><span style="color: #1f497d; ">它也没有&#8220;永久区&#8221;，</span><span style="color: #1f497d; ">但是</span><span style="color: #1f497d; ">IBM JVM</span><span style="color: #1f497d; ">也支持分代模型并且看起来更像</span><span style="color: #1f497d; ">HotSpot JVM</span><span style="color: #1f497d; ">，</span><span style="color: #1f497d; ">比如它的分代模型包括</span><span style="color: #1f497d; ">&#8220;新生区&#8221;</span><span style="color: #1f497d; ">和</span><span style="color: #1f497d; ">&#8220;老生区&#8221;，</span><span style="color: #1f497d; ">新生区</span><span style="color: #1f497d; ">又分为&#8220;分配区（</span><span style="color: #1f497d; ">Allocate</span><span style="color: #1f497d; ">）&#8221;</span><span style="color: #1f497d; ">和</span><span style="color: #1f497d; ">&#8220;</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区&#8221;，新对象在</span><span style="color: #1f497d; ">Allocate</span><span style="color: #1f497d; ">区分配并在</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">时拷贝到</span><span style="color: #1f497d; ">Survior</span><span style="color: #1f497d; ">区，这意味着一个对象在被移动到</span><span style="color: #1f497d; ">Old</span><span style="color: #1f497d; ">区时会被在</span><span style="color: #1f497d; ">2</span><span style="color: #1f497d; ">个区之间多次拷贝</span><span style="color: #1f497d; ">.</span><span style="color: #1f497d; ">和</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">一样，</span><span style="color: #1f497d; ">IBM JVM</span><span style="color: #1f497d; ">有多个选项可以配置&#8220;压缩&#8221;阶段，</span><span style="color: #1f497d; ">可以配置为&#8220;关闭&#8221;或&#8220;每次</span><span style="color: #1f497d; ">GC</span><span style="color: #1f497d; ">都进行压缩&#8221;，</span><span style="color: #1f497d; ">和</span><span style="color: #1f497d; ">JRockit</span><span style="color: #1f497d; ">相比，默认的触发条件是由于一系列的触发而不是导致&#8220;完全&#8221;压缩，而且这个可以被配置选项更改。</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">&nbsp;</span></p><p><span style="color: #1f497d; ">Java 7</span><span style="color: #1f497d; ">会宣称&#8220;</span><span style="color: #1f497d; ">G1</span><span style="color: #1f497d; ">&#8221;</span><span style="color: #1f497d; ">&nbsp;- Production Ready</span><span style="color: #1f497d; ">，而且</span><span style="color: #1f497d; ">G1</span><span style="color: #1f497d; ">是不同的。</span></p></span><span class="Apple-style-span" style="font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 13px; line-height: normal; background-color: #ffffff; "><h1 style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 14pt; "><a href="http://www.oschina.net/question/121073_66399" hidefocus="true" name="top"></a></h1></span><img src ="http://www.blogjava.net/abin/aggbug/406159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-11-09 11:32 <a href="http://www.blogjava.net/abin/archive/2013/11/09/406159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>事务相关知识点积累</title><link>http://www.blogjava.net/abin/archive/2013/09/08/403820.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Sun, 08 Sep 2013 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/09/08/403820.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/403820.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/09/08/403820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/403820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/403820.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; -webkit-text-decorations-in-effect: initial; background-color: #ffffff;"><h1><span style="font-size: 14pt;">数据库系统中事务的ACID原则是什么啊？？<br /></span><span style="font-size: 14px; font-weight: normal; -webkit-text-decorations-in-effect: initial; background-color: #f1fedd;"><pre id="best-content-19403728" accuse="aContent"  mb-10"="" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word;">事务的原子性、一致性、独立性及持久性<br />事务的原子性是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.<br />事务的一致性是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.<br />事务的独立性是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.<br />事务的持久性是指事务运行成功以后,就系统的更新是永久的.不会无缘无故的<a decor-none"="" href="http://zhidao.baidu.com/search?word=%BB%D8%B9%F6&amp;fr=qb_search_exp&amp;ie=gbk" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">回滚</a>.<br /><br /><h3></h3></pre></span><div>spring事务传播属性和隔离级别</div><div style="color: #000000; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 25.1875px;"><span style="font-size: large;">1 事务的传播属性（Propagation）&nbsp;<br /><br />1) REQUIRED ，这个是默认的属性&nbsp;<br />Support a current transaction, create a new one if none exists.&nbsp;<br />如果存在一个事务，则支持当前事务。如果没有事务则开启一个新的事务。&nbsp;<br />被设置成这个级别时，会为每一个被调用的方法创建一个逻辑事务域。如果前面的方法已经创建了事务，那么后面的方法支持当前的事务，如果当前没有事务会重新建立事务。&nbsp;<br />如图所示：&nbsp;<br /><br />2) MANDATORY&nbsp;<br />Support a current transaction, throw an exception if none exists.支持当前事务，如果当前没有事务，就抛出异常。&nbsp;<br /><br />3) NEVER&nbsp;<br />Execute non-transactionally, throw an exception if a transaction exists.&nbsp;<br />以非事务方式执行，如果当前存在事务，则抛出异常。&nbsp;<br /><br />4) NOT_SUPPORTED&nbsp;<br />Execute non-transactionally, suspend the current transaction if one exists.&nbsp;<br />以非事务方式执行操作，如果当前存在事务，就把当前事务挂起。&nbsp;<br /><br />5) REQUIRES_NEW&nbsp;<br />Create a new transaction, suspend the current transaction if one exists.&nbsp;<br />新建事务，如果当前存在事务，把当前事务挂起。&nbsp;<br />如图所示：&nbsp;<br /><br />6) SUPPORTS&nbsp;<br />Support a current transaction, execute non-transactionally if none exists.&nbsp;<br />支持当前事务，如果当前没有事务，就以非事务方式执行。&nbsp;<br /><br />7) NESTED&nbsp;<br />Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else.&nbsp;<br />支持当前事务，新增Savepoint点，与当前事务同步提交或回滚。&nbsp;<br />嵌套事务一个非常重要的概念就是内层事务依赖于外层事务。外层事务失败时，会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚。&nbsp;<br /><br />8) PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区别&nbsp;<br />它们非常 类似,都像一个嵌套事务，如果不存在一个活动的事务，都会开启一个新的事务。使用PROPAGATION_REQUIRES_NEW时，内层事务与外层事务就像两个独立的事务一样，一旦内层事务进行了提交后，外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA 事务管理器的支持。&nbsp;<br />使用PROPAGATION_NESTED时，外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚，它是一个真正的嵌套事务。&nbsp;<br /><br />2 事务的隔离级别（Isolation Level）&nbsp;<br /><br />1) 首先说明一下事务并发引起的三种情况&nbsp;<br /><br />i. Dirty Reads 脏读&nbsp;<br />一个事务正在对数据进行更新操作，但是更新还未提交，另一个事务这时也来操作这组数据，并且读取了前一个事务还未提交的数据，而前一个事务如果操作失败进行了回滚，后一个事务读取的就是错误数据，这样就造成了脏读。</span></div><div style="color: #000000; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 25.1875px;"><div><br /><span style="font-size: large;">ii. Non-Repeatable Reads 不可重复读&nbsp;<br />一个事务多次读取同一数据，在该事务还未结束时，另一个事务也对该数据进行了操作，而且在第一个事务两次次读取之间，第二个事务对数据进行了更新，那么第一个事务前后两次读取到的数据是不同的，这样就造成了不可重复读。</span></div><div><br /><span style="font-size: large;">iii. Phantom Reads 幻像读&nbsp;<br />第一个数据正在查询符合某一条件的数据，这时，另一个事务又插入了一条符合条件的数据，第一个事务在第二次查询符合同一条件的数据时，发现多了一条前一次查询时没有的数据，仿佛幻觉一样，这就是幻像读。</span></div><div><br /><span style="font-size: large;">iv. 非重复度和幻像读的区别&nbsp;<br />非重复读是指同一查询在同一事务中多次进行，由于其他提交事务所做的修改或删除，每次返回不同的结果集，此时发生非重复读。(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. )</span></div><div><br /><span style="font-size: large;">幻像读是指同一查询在同一事务中多次进行，由于其他提交事务所做的插入操作，每次返回不同的结果集，此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition. )</span></div><div><br /><span style="font-size: large;">表面上看，区别就在于非重复读能看见其他事务提交的修改和删除，而幻像能看见其他事务提交的插入。&nbsp;<br /><br />2) DEFAULT （默认）&nbsp;<br />这是一个PlatfromTransactionManager默认的隔离级别，使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应&nbsp;<br /><br />3) READ_UNCOMMITTED （读未提交）&nbsp;<br />这是事务最低的隔离级别，它允许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读，不可重复读和幻像读。&nbsp;<br /><br />4) READ_COMMITTED （读已提交）&nbsp;<br />保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现，但是可能会出现不可重复读和幻像读。&nbsp;<br /><br />5) REPEATABLE_READ （可重复读）&nbsp;<br />这种事务隔离级别可以防止脏读，不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外，还保证了不可重复读&nbsp;<br /><br />6) SERIALIZABLE（串行化）&nbsp;<br />这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读，不可重复读外，还避免了幻像读。&nbsp;<br /><br />7) 隔离级别解决事务并行引起的问题&nbsp;<br />Dirty reads non-repeatable reads phantom reads&nbsp;<br />Serializable 不会 不会 不会&nbsp;<br />REPEATABLE READ 不会 不会 会&nbsp;<br />READ COMMITTED 不会 会 会&nbsp;<br />Read Uncommitted 会 会 会</span></div></div><br /><br /><br /><br /><br /><span style="color: #000000"><span style="font-size: medium">事务的隔离级别 </span><br /><br />注：Spring中事务的隔离级别是由数据库实现的  </span><br /><br /><strong>ISOLATION_DEFAULT </strong><br />&nbsp;&nbsp;&nbsp;  这是一个PlatfromTransactionManager默认的隔离级别，使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应  <br />ISOLATION_READ_UNCOMMITTED  这是事务最低的隔离级别，它充许别外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读，不可重复读和幻像读  <br /><br /><strong>ISOLATION_READ_COMMITTED</strong> <br />&nbsp;&nbsp;&nbsp;  保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这种事务隔离级别可以避免脏读出现，但是可能会出现不可重复读和幻像读。  <br /><br /><strong>ISOLATION_REPEATABLE_READ</strong> <br />&nbsp;&nbsp;&nbsp;  这种事务隔离级别可以防止脏读，不可重复读。但是可能出现幻像读。它除了保证一个事务不能读取另一个事务未提交的数据外，还保证了避免下面的情况产生(不可重复读)。  <br /><br /><strong>ISOLATION_SERIALIZABLE </strong><br />&nbsp;&nbsp;&nbsp;  这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读，不可重复读外，还避免了幻像读。 <br /><br /><span style="color: red">脏读：</span> <br />&nbsp;&nbsp;&nbsp; 一个事务读取到另一个事务未提交的更新数据。 <br /><span style="color: red">不可重复读：</span> <br />&nbsp;&nbsp;&nbsp;  在同一事务中，多次读取同一数据返回的结果有所不同，即后续读取可以读取到另一事务已提交的更新数据；相反，"可重复读"是指在同一事务中多次读取数据时，能够保证所读取的数据是一样，即后续读取不能读到另一事务已提交的数据。  <br /><span style="color: red">幻读：</span> <br />&nbsp;&nbsp;&nbsp; 一个事务读取到另一事务已提交的insert数据。&nbsp;<br /></h1></span><img src ="http://www.blogjava.net/abin/aggbug/403820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-09-08 17:00 <a href="http://www.blogjava.net/abin/archive/2013/09/08/403820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Javascript 正则表达式(一)</title><link>http://www.blogjava.net/abin/archive/2013/09/03/403636.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Tue, 03 Sep 2013 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/09/03/403636.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/403636.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/09/03/403636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/403636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/403636.html</trackback:ping><description><![CDATA[&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;<br />&lt;title&gt;Javascript RegExp&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;script type="text/javascript"&gt;<br />function judge(){<br />&nbsp;try {<br />&nbsp;&nbsp;var parameter;<br />&nbsp;&nbsp;var regex='^([0-9]+)$';<br />&nbsp;&nbsp;var pp;<br />&nbsp;&nbsp;var flag=false;<br />&nbsp;&nbsp;parameter=document.getElementById("parameter").value;<br />&nbsp;&nbsp;pp=new RegExp(regex,'gi');<br />&nbsp;&nbsp;flag=pp.test(parameter);<br />&nbsp;&nbsp;document.getElementById("spanId").innerHTML=flag;<br />&nbsp;} catch (e) {<br />&nbsp;&nbsp;document.write('e.name='+e.name+',e.message='+e.message);<br />&nbsp;}<br />&nbsp;<br />}<br />&lt;/script&gt;<br />&lt;body&gt;<br />&nbsp;&lt;div id="div1"&gt;<br />&nbsp;&nbsp;INPUT:&lt;br/&gt;<br />&nbsp;&nbsp;&lt;input id="parameter" type="text" /&gt;&lt;br/&gt;<br />&nbsp;&nbsp;&lt;input id="button" type="button" onclick="javascript:judge();" value="猛击我"/&gt;&lt;br/&gt;<br />&nbsp;&lt;/div&gt;<br />&nbsp;&lt;span id="spanId"&gt;&lt;/span&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<img src ="http://www.blogjava.net/abin/aggbug/403636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-09-03 21:42 <a href="http://www.blogjava.net/abin/archive/2013/09/03/403636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jquery ready()的几种实现方法小结</title><link>http://www.blogjava.net/abin/archive/2013/08/30/403499.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Fri, 30 Aug 2013 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/08/30/403499.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/403499.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/08/30/403499.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/403499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/403499.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 18px; text-indent: 30px; background-color: #f7fcff;">下面是目前本人知道的几种jQuery的ready ()的写法.如果还有其他的写法，望告知<br /></span><strong style="padding: 0px; margin: 0px; color: #333333; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 25px; background-color: #f7fcff;">1.最常用也是最标准的&nbsp;</strong><br /><div>$(document).ready(){&nbsp;</div><div>});&nbsp;<br /><strong style="padding: 0px; margin: 0px; color: #333333; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 25px; background-color: #f7fcff;">2.是上面的简写:</strong>&nbsp;</div><div>$(function(){&nbsp;</div><div>})&nbsp;</div><strong style="padding: 0px; margin: 0px; color: #333333; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 25px; background-color: #f7fcff;">3.这个方式:<br /></strong><div>jQuery(document).ready(function(){&nbsp;</div><div>});&nbsp;</div><strong style="padding: 0px; margin: 0px; color: #333333; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 25px; background-color: #f7fcff;">4.</strong>&nbsp;<strong style="padding: 0px; margin: 0px; color: #333333; font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 25px; background-color: #f7fcff;">这个方式:</strong><br /><div>jQuery(function($){&nbsp;</div><div>alert($("#ready1").html());&nbsp;</div><div>});&nbsp;</div><br /><br /><img src ="http://www.blogjava.net/abin/aggbug/403499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-08-30 14:39 <a href="http://www.blogjava.net/abin/archive/2013/08/30/403499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jquery控制css的display(控制元素的显示与隐藏)</title><link>http://www.blogjava.net/abin/archive/2013/08/29/403464.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Thu, 29 Aug 2013 15:47:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/08/29/403464.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/403464.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/08/29/403464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/403464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/403464.html</trackback:ping><description><![CDATA[<p style="margin-top: 10px; margin-bottom: 10px; font-family: 'black Verdana', Arial, Helvetica, sans-serif; background-color: #ffffff;">使用jquery真的很方便，比如要控制div的显示与隐藏，一句话就搞定了，请看下面使用说明。</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: 'black Verdana', Arial, Helvetica, sans-serif; background-color: #ffffff;">$("#id").show()表示display:block,</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: 'black Verdana', Arial, Helvetica, sans-serif; background-color: #ffffff;">$("#id").hide()表示display:none;</p><p style="margin-top: 10px; margin-bottom: 10px; font-family: 'black Verdana', Arial, Helvetica, sans-serif; background-color: #ffffff;">$("#id").toggle()切换元素的可见状态。如果元素是可见的，切换为隐藏的；如果元素是隐藏的，切换为可见的。<br /><br /><div>$("#id").css('display','none');&nbsp;</div><div>$("#id").css('display','block');&nbsp;</div><div>或&nbsp;</div><div>$("#id")[0].style.display = 'none';</div><br /></p><img src ="http://www.blogjava.net/abin/aggbug/403464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-08-29 23:47 <a href="http://www.blogjava.net/abin/archive/2013/08/29/403464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jquery click时间的运用(一)</title><link>http://www.blogjava.net/abin/archive/2013/08/29/403463.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Thu, 29 Aug 2013 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/08/29/403463.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/403463.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/08/29/403463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/403463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/403463.html</trackback:ping><description><![CDATA[<div>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"</div><div>&nbsp; &nbsp; pageEncoding="UTF-8"%&gt;</div><div>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</div><div>&lt;html&gt;</div><div>&lt;head&gt;</div><div>&lt;meta http-equiv="Content-Type" content="text/html; charsetUTF-8"&gt;</div><div>&lt;title&gt;Jquery Test&lt;/title&gt;</div><div>&lt;style type="text/css"&gt;</div><div>.class1 {left: 0px;top: 0px;height: 180px;width: 240px;display: block;background-color: blue;color: black;}</div><div>.class2 {left: 0px;top: 300px;height: 100px;width: 240px;display: none;background-color: blue;color: black;}</div><div>.spans {left: 0px;top: 300px;height: 100px;width: 240px;display: none;background-color: blue;color: black;}</div><div>&lt;/style&gt;</div><div>&lt;/head&gt;</div><div>&lt;script type="text/javascript" src="../js/jquery/jquery-1.7.2.js"&gt;&lt;/script&gt;</div><div>&lt;script type="text/javascript"&gt;</div><div>$(function(){</div><div><span style="white-space:pre">	</span>$("#buttonId").click(function(){</div><div><span style="white-space:pre">		</span>var userName=$("input[name='userName']").val();</div><div><span style="white-space:pre">		</span>var passWord=$("input[name='passWord']").val();</div><div><span style="white-space:pre">		</span>if(userName=='abin'&amp;&amp;passWord=='lee'){</div><div><span style="white-space:pre">			</span>$("#div1").hide();</div><div><span style="white-space:pre">			</span>$("#div2").show();</div><div><span style="white-space:pre">			</span>$("#spanId").show();</div><div><span style="white-space:pre">			</span>$("#spanId").html('userName='+userName+",passWord="+passWord);</div><div><span style="white-space:pre">		</span>}else{</div><div><span style="white-space:pre">			</span>$("#div1").toggle();</div><div><span style="white-space:pre">			</span>$("#div2").toggle();</div><div><span style="white-space:pre">			</span>$("#spanId").show();</div><div><span style="white-space:pre">			</span>$("#spanId").html('userName='+userName);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span></div><div><span style="white-space:pre">	</span>});</div><div>});</div><div>&lt;/script&gt;</div><div>&lt;body&gt;</div><div><span style="white-space:pre">	</span>&lt;div id="div1" class="class1"&gt;</div><div><span style="white-space:pre">		</span>UserName:&lt;br/&gt;</div><div><span style="white-space:pre">		</span>&lt;input id="userId" name="userName" type="text"/&gt;&lt;br/&gt;</div><div><span style="white-space:pre">		</span>PassWord:&lt;br/&gt;</div><div><span style="white-space:pre">		</span>&lt;input id="passId" name="passWord" type="text"/&gt;&lt;br/&gt;</div><div><span style="white-space:pre">		</span>&lt;input id="buttonId" name="buttonName" type="button" value="猛击我"/&gt;</div><div><span style="white-space:pre">	</span>&lt;/div&gt;</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>&lt;div id="div2" class="class2"&gt;</div><div><span style="white-space:pre">		</span>&lt;span id="spanId" class="spans"&gt;&lt;/span&gt;</div><div><span style="white-space:pre">	</span>&lt;/div&gt;</div><div><span style="white-space:pre">	</span></div><div>&lt;/body&gt;</div><div>&lt;/html&gt;</div><img src ="http://www.blogjava.net/abin/aggbug/403463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-08-29 23:45 <a href="http://www.blogjava.net/abin/archive/2013/08/29/403463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Fedora16下搭建ftp基本方法</title><link>http://www.blogjava.net/abin/archive/2013/08/26/403331.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Mon, 26 Aug 2013 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/abin/archive/2013/08/26/403331.html</guid><wfw:comment>http://www.blogjava.net/abin/comments/403331.html</wfw:comment><comments>http://www.blogjava.net/abin/archive/2013/08/26/403331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/abin/comments/commentRss/403331.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/abin/services/trackbacks/403331.html</trackback:ping><description><![CDATA[<p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">【搭建环境】Linux (Fedora 16)</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">【基本实现】在自己的电脑上搭建ftp，实现同一网段匿名登录，并能上传下载文件。</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">【涉及技术】vsftpd，iptables</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">【方法】</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"><strong>1.&nbsp;</strong>先查看自己的机子上是否已安装vsftpd (very secure FTP Daemon)，这是linux上常用的ftpd技术，配置方法比较类似配置Apache。命令行输入：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#rpm -qa | grep vsftp</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">若出现内容，则表示已安装；若无，则手动抓包下载：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"># sudo yum install vsftpd</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">&nbsp;</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"><strong>2 .</strong>启动vsftpd服务。很多教程写的是/etc/init.d/vsftpd start，但是我试了下后发现不行，应该如下输入：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"># sudo service vsftpd start</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">相应的，start 可换成stop，restart等，从字面意思就知道其意思。</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">查看是否有启动vsftpd：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"># pstree | grep vsftpd<br /></p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">若有则表示启动成功。至此，可通过#ftp 主机名/localhost/127.0.0.1 来测试ftp是否正常工作。<br /></p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">&nbsp;</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"><strong>3.&nbsp;</strong>配置 相关文件。vsftpd.conf 全局配置文件放在/etc/vsftpd/下。为了防止配置错了，先拷贝一份副本，之后进入文档进行编辑。完成后重启ftp即可。</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd1.conf</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#sudo vim /etc/vsftpd/vsftpd.conf</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">为了允许匿名登录，则anonymous_enable必须等于YES，其他相应的配置属性简单列表如下：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">anonymous_enable=YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许匿名登录<br />Local_enable=YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 允许本地用户登录<br />write_enable=YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开放本地用户的写权限<br />dirmessage_enable=YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当切换到目录时，显示该目录下的.message隐含文件的内容<br />xferlog_enab1e =YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 激活上传和下载日志<br />connect_from_port_20 = YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启用FTP数据端口的连接请求<br />xferlog_std_format =YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用标准的ftpd xferlog日志格式<br />pam_service_name=vsftpd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 设置认证服务的配置文件名称，该文件存放在/etc/pam.d/<br />userlist_enable＝YES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 激活vsftpd检查userlist_file指定用户是否可以访问vsftpd服务器</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">&nbsp;</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"><strong>4.&nbsp;</strong>本机进行测试。在浏览器上输入ftp://localhost或者ftp://127.0.0.1，若搭建成功，则会有相应的文件夹，而这文件夹是默认在/var/ftp/下，当然以后你还可以进行修改。另一个方法是可以直接在命令行输入：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#ftp 127.0.0.1</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">因为匿名登录，跳过输入用户名和密码后输入：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">ftp&gt;user anonymous<br /></p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">再次跳过输入密码，此时会显示登录成功的字样。</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">&nbsp;</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;"><strong>5.&nbsp;</strong>关闭防火墙。此时去同一网段的主机访问ftp，会发现一直链接不上。暂时了解到的是现在的linux系统为了更好地控制 IP 信息包过滤和防火墙配置，使用了iptables的东西。首先得关闭SElinux，该配置文件在/etc/selinux/下：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#vim /etc/selinux/config</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">找到相应语句，将其改成：SELINUX=disabled</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">重启之后，如果发现还不行，则暂时的办法可以关闭整个防火墙（不推荐）：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#sudo service iptables stop</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">到了此步则肯定能从别的主机访问自己搭建的ftp的，只是可能还需要涉及文件夹权限问题，修改之后就能实现文件上传下载了。</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">完毕。</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">&nbsp;</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">【补充】</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">若出现<strong>vsftpd: refusing to run with writable anonymous root</strong>的错误，大概是ftp目录权限问题，修正方法：</p><p style="margin: 8px 0px 7px; padding: 0px; border: 0px; font-family: Arial, 宋体, sans-serif; vertical-align: baseline; line-height: 22px; color: #939393; background-color: #ffffff;">#&nbsp;<strong>chown root:root /var/ftp<br />#&nbsp;<strong>chmod 755 /var/ftp</strong></strong></p><img src ="http://www.blogjava.net/abin/aggbug/403331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/abin/" target="_blank">abing</a> 2013-08-26 22:31 <a href="http://www.blogjava.net/abin/archive/2013/08/26/403331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>