﻿<?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/GavinMiao/category/51330.html</link><description>我在仰望，java之上</description><language>zh-cn</language><lastBuildDate>Fri, 13 Apr 2012 21:31:44 GMT</lastBuildDate><pubDate>Fri, 13 Apr 2012 21:31:44 GMT</pubDate><ttl>60</ttl><item><title>面试题（互联网网上商城行业）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/12/374017.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Thu, 12 Apr 2012 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/12/374017.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/374017.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/12/374017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/374017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/374017.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2012/04/12/374017.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/374017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-12 22:39 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/12/374017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不用临时变量交换两个数</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/12/373932.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Thu, 12 Apr 2012 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/12/373932.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373932.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/12/373932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373932.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373932.html</trackback:ping><description><![CDATA[方法1：<br /><div><div><span style="white-space:pre">		</span>a=a^b;</div><div><span style="white-space:pre">		</span>b=a^b;</div><div><span style="white-space:pre">		</span>a=a^b;</div></div><div>方法2：<br /><div><div><span style="white-space:pre">		</span>a=a+b;</div><div><span style="white-space:pre">		</span>b=a-b;</div><div><span style="white-space:pre">		</span>a=a-b;</div></div><div></div></div><img src ="http://www.blogjava.net/GavinMiao/aggbug/373932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-12 11:27 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/12/373932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>易宝支付面试题（根据网上总结）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/11/373780.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Wed, 11 Apr 2012 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/11/373780.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373780.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/11/373780.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373780.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373780.html</trackback:ping><description><![CDATA[1.public class TestKnowleage5 {<div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>String strValue = "ABCDEFG";</div><div><span style="white-space:pre">		</span>strValue.substring(3);</div><div><span style="white-space:pre">		</span>System.out.println("result1"+strValue);</div><div><span style="white-space:pre">		</span>strValue.concat("123");</div><div><span style="white-space:pre">		</span>System.out.println("result2"+strValue);</div><div><span style="white-space:pre">		</span>String value = new String("ABCDEFG");</div><div><span style="white-space:pre">		</span>System.out.println(strValue==value);</div><div><span style="white-space:pre">	</span>}</div><div>}<br /><br />运行结果：<br /><div><div>result1ABCDEFG</div><div>result2ABCDEFG</div><div>false<br />2.public class Test{<br />&nbsp; &nbsp; public static void main(String[] args){<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<span style="white-space:pre">	</span>int x = 100;<div><div><span style="white-space:pre">		</span>int y = 200;</div><div><span style="white-space:pre">		</span>if(x == y)</div><div><span style="white-space:pre">			</span>System.out.println("not equal");</div><div><span style="white-space:pre">		</span>else</div><div><span style="white-space:pre">			</span>System.out.println("equal");</div></div>&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />运行结果：<br />equal<br /><br />3.public class TestKnowleage5 {<div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space: pre; ">		</span>try{</div><div><span style="white-space:pre">			</span>new TestKnowleage5().methodA(5);</div><div><span style="white-space:pre">		</span>}catch(IOException e){</div><div><span style="white-space:pre">			</span>System.out.println("caught IOException");</div><div><span style="white-space:pre">		</span>}catch(Exception e){</div><div><span style="white-space:pre">			</span>System.out.println("caught Exception");</div><div><span style="white-space:pre">		</span>}finally{</div><div><span style="white-space:pre">			</span>System.out.println("no Exception");</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><span style="white-space:pre">	</span>public void methodA(int i) throws IOException{</div><div><span style="white-space:pre">		</span>if(i%2 != 0){</div><div><span style="white-space:pre">			</span>throw new IOException("methodA IOException");</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div>}</div></div><br />运行结果：<br /><div><div>caught IOException</div><div>no Exception</div></div><br />4.public class TestKnowleage5 {<div><div></div><div><span style="white-space:pre">	</span>static boolean isTrue(){</div><div><span style="white-space:pre">		</span>System.out.println("isTrue");</div><div><span style="white-space:pre">		</span>return true;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>static boolean isFalse(){</div><div><span style="white-space:pre">		</span>System.out.println("isFalse");</div><div><span style="white-space:pre">		</span>return false;</div><div><span style="white-space:pre">	</span>}<span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>if(isTrue() || isFalse()){</div><div><span style="white-space:pre">			</span>System.out.println("|| operate return true");</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>if(isFalse() &amp; isTrue()){</div><div><span style="white-space:pre">			</span>System.out.println("&amp; operate return true");</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div></div><div>}</div></div><br />运行结果：<br /><div><div>isTrue</div><div>|| operate return true</div><div>isFalse</div><div>isTrue</div></div><br />5.public class TestKnowleage5{<div><div><span style="white-space:pre">	</span>public static void main(String args[]){</div><div><span style="white-space:pre">		</span>MyThread t = new MyThread();</div><div><span style="white-space:pre">		</span>t.run();</div><div><span style="white-space:pre">		</span>t.start();</div><div><span style="white-space:pre">		</span>System.out.println("A");</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div></div><div>class MyThread extends Thread{</div><div><span style="white-space:pre">	</span>public void run(){</div><div><div><div><span style="white-space:pre">		</span>try{</div><div><span style="white-space:pre">			</span>Thread.currentThread().sleep(3000);</div><div><span style="white-space:pre">		</span>}catch(InterruptedException e){</div><div><span style="white-space:pre">			</span></div><div><span style="white-space:pre">		</span>}</div></div></div><div><span style="white-space:pre">		</span>System.out.println("B");</div><div><span style="white-space:pre">	</span>}</div><div>}</div></div>运行结果：<br />BBA或<br />BAB<br />6.class A{<div><div><span style="white-space:pre">	</span>void fun1(){</div><div><span style="white-space:pre">		</span>System.out.println(fun2());</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>int fun2(){</div><div><span style="white-space:pre">		</span>return 123;</div><div><span style="white-space:pre">	</span>}</div><div>}</div><div>public class TestKnowleage5 &nbsp;extends A{</div><div><span style="white-space:pre">	</span>int fun2(){</div><div><span style="white-space:pre">		</span>return 456;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>A a;</div><div><span style="white-space:pre">		</span>TestKnowleage5 b = new TestKnowleage5();</div><div><span style="white-space:pre">		</span>b.fun1();</div><div><span style="white-space:pre">		</span>a = b;</div><div><span style="white-space:pre">		</span>a.fun1();</div><div><span style="white-space:pre">	</span>}</div><div>}</div></div><br />运行结果：<br /><div><div>456</div><div>456</div></div>7.class A{</div><div><div><span style="white-space:pre">	</span>int val;</div><div></div><div><span style="white-space:pre">	</span>public int getVal() {</div><div><span style="white-space:pre">		</span>return val;</div><div><span style="white-space:pre">	</span>}</div><div></div><div><span style="white-space:pre">	</span>public void setVal(int val) {</div><div><span style="white-space:pre">		</span>this.val = val;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div>}</div><div>public class TestKnowleage5{</div><div></div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>A data = new A();</div><div><span style="white-space:pre">		</span>ArrayList list = new ArrayList();</div><div><span style="white-space:pre">		</span>for(int i=100;i&lt;103;i++){</div><div><span style="white-space:pre">			</span>data.setVal(i);</div><div><span style="white-space:pre">			</span>list.add(data);</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>int j = 0;</div><div><span style="white-space:pre">		</span>while(j&lt;list.size()){</div><div><span style="white-space:pre">			</span>A tmp = (A)list.get(j);</div><div><span style="white-space:pre">			</span>System.out.println("list("+j+")="+tmp.getVal());</div><div><span style="white-space:pre">			</span>j++;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">	</span>}</div><div>}<br /><br />运行结果：<br /><div><div>list(0)=102</div><div>list(1)=102</div><div>list(2)=102</div></div><br />8.hibernate导入大量数据时，为了避免内存中产生大量对象，在编码时注意什么，如何去除？<br /><br />9.视图与表的区别<br />10.触发器有哪几种类型<br />11.<div style="display: inline !important; ">事务操作有那几个步骤<br /></div>12.写出对应正则表达式：<br />1）1-6位字母或数字；<br />[a-zA-Z0-9]{1,6}<br />2）手机号（只能是139或159开头，11位数字）<br />1[35][9][0-9]{8}<br />13.字符串反转：new StringBuilder(str).reverse().toString();<br />14.写程序：1+2&#178;+3&#178;+...+n&#178;<br />int func(int n){<br />&nbsp; &nbsp; return n==1?1:func(n-1)+n*n<br />}<br /><br />15.写一个延迟加载的单例模式：<br />public class SingleTon{<br />&nbsp; &nbsp; private static &nbsp;SingleTon &nbsp;instance = null;<br />&nbsp;&nbsp;&nbsp;&nbsp;private SingleTon(){}<br />&nbsp; &nbsp; public static SingleTon getInstance(){<br />&nbsp; &nbsp; &nbsp; &nbsp; if(instance == null){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; synchronized(""){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;if(instance == null){return new SingleTon();}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp; &nbsp; &nbsp; &nbsp; return instance;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />16.<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">JSP的9种内置对象：</span><br />request：<div style="display: inline-block; "></div><span class="Apple-style-span" style="color: #6d6d6d; font-family: arial; font-size: 12px; line-height: 26px; background-color: #ffffff; ">HttpServletRequest类的实例，<div style="display: inline-block; "></div></span><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">客户端的请求信息被封装在request对象中</span><br />response：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">HttpServletResponse类的实例，<div style="display: inline-block; "></div></span><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">response对象包含了响应客户请求的有关信息，但在JSP中很少直接用到它。</span><br />out：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">out对象是JspWriter类的实例,是向客户端输出内容常用的对象</span><br />session：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">session对象指的是客户端与服务器的一次会话，从客户端连到服务器的一个WebApplication开始，直到客户端与服务器断开连接为止。它是HttpSession类的实例</span><br />page：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">page对象就是指向当前JSP页面本身，有点象类中的this指针，它是java.lang.Object类的实例</span><br />application：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">ServletContext类的实例,<div style="display: inline-block; "></div></span><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">application对象实现了用户间数据的共享，可存放全局变量。它开始于服务器的启动，直到服务器的关闭</span><br />exception：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">exception对象是一个例外对象，当一个页面在运行过程中发生了例外，就产生这个对象。如果一个JSP页面要应用此对象，就必须把isErrorPage设为true，否则无法编译。他实际上是java.lang.Throwable的对象</span><br />pageContext：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">pageContext对象提供了对JSP页面内所有的对象及名字空间的访问，也就是说他可以访问到本页所在的SESSION，也可以取本页面所在的application的某一属性值，他相当于页面中所有功能的集大成者，它的本类名也叫pageContext</span><br />config：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; background-color: #ffffff; ">config对象是在一个Servlet初始化时，JSP引擎向它传递信息用的，此信息包括Servlet初始化时所要用到的参数（通过属性名和属性值构成）以及服务器的有关信息（通过传递一个ServletContext对象）</span><br />17.session和cookie的区别？<br />18.JDBC的操作步骤？<br /></div></div></div></div></div><img src ="http://www.blogjava.net/GavinMiao/aggbug/373780.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-11 11:32 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/11/373780.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题（移动通信方面）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/10/373745.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Tue, 10 Apr 2012 14:39:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/10/373745.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373745.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/10/373745.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373745.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373745.html</trackback:ping><description><![CDATA[1.方法重载与多态，简述；<br />2.什么是设计模式？使用过哪些？<br />3.列出熟悉的java开源项目及简述；<br />4.一组radio，用alert弹出当前所选的是第几个radio？用原生javascript；<br />5.function showme(){<div><div><span style="white-space:pre">	</span>Book.prototype.abc = function(){</div><div><span style="white-space:pre">		</span>alert('456');</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>var abook = new Book(1,2);</div><div><span style="white-space:pre">	</span>Book.abc = function(){</div><div><span style="white-space:pre">		</span>alert('123');</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>abook.abc();</div><div><span style="white-space:pre">	</span>Book.abc();</div><div><span style="white-space:pre">	</span>abc();//此方法调用浏览器会报错，未定义</div><div>}</div><div></div><div>function Book(a,b){</div><div><span style="white-space:pre">	</span>this.a = a;</div><div><span style="white-space:pre">	</span>this.b = b;</div><div><span style="white-space:pre">	</span>Book.abc = function(){</div><div><span style="white-space:pre">		</span>alert('def');</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>this.abc = function(){</div><div><span style="white-space:pre">		</span>alert('xyz');</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>abc = function(){</div><div><span style="white-space:pre">		</span>alert('@@@@@@');</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>var abc = function(){</div><div><span style="white-space:pre">		</span>alert('$$$$$$');</div><div><span style="white-space:pre">	</span>}</div><div>}<br /><br />点击按钮调用showme(),页面显示结果为：<br />第一个弹出框：xyz<br />第二个弹出框：123<br /><br />6.线程的四种状态？<br />7.ext有哪些组件？ext如何与后台交互？<br />8.HashMap放入、查找、删除，将所有value放入一个数组，得到map中所有内容；List添加、查找、删除；<br />9.List&lt;Student&gt; student(name,age) 比较oldList&lt;Student&gt;和newList&lt;student&gt;,按名字比较，获得新增的、修改的、删除学生列表；<br />10.使用过哪些xml技术？怎么实现的？<br />11.java异常：throws、throw、try、catch、finally,举例，如何处理异常<br />12.字符串反转：<br /><div><div>public class TestKnowleage5 {</div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>System.out.println(reverse("abc"));</div><div><span style="white-space:pre">		</span>System.out.println(reverse2("abc"));</div><div><span style="white-space:pre">		</span>System.out.println(reverse3("abc"));</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static String reverse(String str){</div><div><span style="white-space:pre">		</span>return new StringBuffer(str).reverse().toString();</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static String reverse2(String str){</div><div><span style="white-space:pre">		</span>char[] chs = str.toCharArray();</div><div><span style="white-space:pre">		</span>char[] re = new char[chs.length];</div><div><span style="white-space:pre">		</span>for(int i = 0 ; i&lt;chs.length;i++){</div><div><span style="white-space:pre">			</span>re[i] = chs[chs.length - i - 1];&nbsp;</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return new String(re);</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static String reverse3(String str){</div><div><span style="white-space:pre">		</span>char[] chs = str.toCharArray();</div><div><span style="white-space:pre">		</span>String re = "";&nbsp;</div><div><span style="white-space:pre">		</span>for(int i = 0;i&lt;chs.length;i++){</div><div><span style="white-space:pre">			</span>re += chs[chs.length - 1 -i];</div><div><span style="white-space:pre">		</span>}</div><div><span style="white-space:pre">		</span>return re;</div><div><span style="white-space:pre">	</span>}</div><div>}</div></div></div></div><img src ="http://www.blogjava.net/GavinMiao/aggbug/373745.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-10 22:39 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/10/373745.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题（ERP行业）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/10/373741.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Tue, 10 Apr 2012 13:59:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/10/373741.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373741.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/10/373741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373741.html</trackback:ping><description><![CDATA[<div><strong><div style="display: inline !important; "><div style="display: inline !important; "><div style="display: inline !important; "><div style="display: inline !important; ">//此句，编译无法通过，Cannot make a static reference to the non-static field b</div></div></div></div></strong><strong>1.arrayList、linkedList、vector的区别<br />2.</strong><strong>写几种J2EE规范并简要描述<br />3.什么是设计模式?用过哪些设计模式？<br />4.OO的四大特性是哪些？并简要描述<br />5.方法重载、多态概念及简要描述；<br />6.sql常用的优化方法有哪些？<br />7.sleep()与wait()的区别？<br />8.<br /><div><div>public class TestException {</div><div><span style="white-space:pre">	</span>public static void main(String[] args) {</div><div><span style="white-space:pre">		</span>int i = 1;</div><div><span style="white-space:pre">		</span>switch(i){</div><div><span style="white-space:pre">		</span>case 0:</div><div><span style="white-space:pre">			</span>System.out.println(0);</div><div><span style="white-space:pre">			</span>break;</div><div><span style="white-space:pre">		</span>case 1:</div><div><span style="white-space:pre">			</span>System.out.println(1);</div><div><span style="white-space:pre">		</span>default:</div><div><span style="white-space:pre">			</span>System.out.println(4);</div><div><span style="white-space:pre">		</span>case 2:</div><div><span style="white-space:pre">			</span>System.out.println(2);</div><div><span style="white-space:pre">		</span>case 3:</div><div><span style="white-space:pre">			</span>System.out.println(3);</div><div></div><div><span style="white-space:pre">		</span>}</div><div></div><div><span style="white-space:pre">	</span>}</div><div>}</div></div>运行结果：<br /><div><div>1</div><div>4</div><div>2</div><div>3<br />9.HashTable和HashMap的区别<br />10.怎样理解mvc模式？<br />11.抽象类、接口的区别？<br />12.智力题：<br />有1-7号，7块地，S、U、V、W、X 5个遗产继承者，<br />S若继承2号，不能继承3号；<br />3号和4号不能同时继承；<br />S若继承一块或多块地，则U不能继承<br />1块地不能被2人合分；<br /><br />问：若S继承2号地，剩余3个人中，不能同时哪2块地？<br />A:1和6 B:1和7 c:3和7 d：1和5 e：1和3<br />13.<br /><div><div>public class TestKnowleage5 {</div><div><span style="white-space:pre">	</span>static int a;</div><div><span style="white-space:pre">	</span>int b,c=0;</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>a++;</div><div><span style="white-space:pre">		</span>b++;//此句，编译无法通过，Cannot make a static reference to the non-static field b</div></div></div></div></strong><strong><div><div><div><div><span style="white-space:pre">		</span>c++; //此句，编译无法通过，cannot make a static reference to the non-static field c</div></div></div></div></strong><strong><div><div><div><div><span style="white-space:pre">	</span>}</div><div>}</div></div><br /><br /></div></div>参考文章：<br /><div><a href="http://jinyanliang.iteye.com/blog/688756">http://jinyanliang.iteye.com/blog/688756</a></div></strong></div><img src ="http://www.blogjava.net/GavinMiao/aggbug/373741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-10 21:59 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/10/373741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用友面试题（参考网上总结而出）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/09/373615.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Mon, 09 Apr 2012 03:32:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/09/373615.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373615.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/09/373615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373615.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373615.html</trackback:ping><description><![CDATA[1，有三个jsp页面：a.jsp b.jsp c.jsp,流程是a.jsp--&gt; b.jsp--&gt; c.jsp,其中a.jsp提交的数据要在c.jsp中访问，用最简单的办法怎么做？不用session。<br />在b.jsp中放N个hidden隐藏域保存a.jsp中的数据，一起提交到c.jsp,在c.jsp中取出。2.sql server支持集群么？<br />支持，不过属于热备份类型，不能做负载均衡。不过符合你的条件<br />首先系统做集群，数据库文件放到磁盘阵列里，双机或多机共同访问磁盘阵列，就可以了，可以集群后做负载均衡；<br />3.HashTable与HashMap的区别：<br />1）HashMap非线程安全，HashTable线程安全；<br />2）HashMap可放一条key为空的记录，任意记录的value可为空，hashTable不可以；<br />3）hashMap去掉了contains方法，增加了containsKey和containsValue方法；<br />4.如何理解mvc模式：<br />mvc是sun提出的model2开发模式，将控制、视图、模型进行了分离；提高了可维护性、扩展性、可移植性、组件的可复用性；<br />5.SingleTon：<br />6.对象序列化的含义：<br />java序列化技术可以使你将一个对象的状态写入一个byte流里，并且可以从其它地方把该byte流里的数据读出来，重新构造一个相同的对象。<br />这种机制允许你将对象通过网络传播，并且随时可以把对象持久化到数据库、文件等系统里，java的序列化技术是RMI、EJB等技术的基础；<br />实现方法：implements Serializable标记为可序列化，然后用ObjectOutputStream和ObjectInputStream读写；<br />7.数据库中的锁包含哪些？<br />排它锁和共享锁<br />8.jsp和servlet的区别：<br />1）简单来说：jsp就是含有java代码的html,servlet就是含有html的java代码；<br />2）jsp最终被解释成servlet，编译再执行，jsp不过是servlet的另一种编写形式；<br />3）jsp擅长表示，servlet擅长数据处理，在mvc中jsp处于视图层，servlet处于控制层；<br />9.oracle在数据库中的交集怎么表示：<br />1）用intersect操作符 2)用in 语句<br />9.JNDI、JMS、JTA、RMI：<br /><br />JNDI：java naming and directory interface java命名目录接口<br />JMS：java messing service java消息服务<br />JTA：java transaction api java事务api<br />RMI：<div style="display: inline-block; "></div><span class="Apple-style-span" style="font-family: arial; line-height: 18px; font-size: small; background-color: #ffffff; ">Remote Method Invocation 远程方法调用<br /><br /></span>10.事务：<br /><br />1）ACID属性：<br />A：atomic 原子性<br />C：consistent 一致性<br />I：isolation 隔离性<br />D:duration 持久性<br />2）概念：事务就是一系列操作，它们完成一项任务。只要这些操作里有一项没成功，事务就操作失败，发生回滚事件。即撤销前面的操作，这样可以保证数据的一致性。而且可以把操作放在缓存里，等所有操作都成功就提交数据库，这样保证费时的操作都是有效操作。<br />3）隔离级别 4）传播行为<br />参考文档：<a href="http://wenku.baidu.com/view/56a532eb856a561252d36f81.html">http://wenku.baidu.com/view/56a532eb856a561252d36f81.html</a><br /><img src ="http://www.blogjava.net/GavinMiao/aggbug/373615.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-09 11:32 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/09/373615.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题（某呼叫中心）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/07/373506.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Fri, 06 Apr 2012 16:14:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/07/373506.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373506.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/07/373506.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373506.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373506.html</trackback:ping><description><![CDATA[1.String b = new String("1"+"2"); --&gt;4个<br />2.Customer(id,name,phone,country);每个客户均有地区(country)属性，每个地区可有1或多个客户，查询拥有超过10名客户的地区的列表；<br />3.public interface TreeNode{<br />&nbsp; &nbsp; String getName();<br />&nbsp; &nbsp; List getChildren();<br />}<br />&nbsp;写一个print()方法,打印各级节点名称.<br /><br />4.String与StringBuffer的区别？<br />String<br />5.ajax名词解释，它的核心价值及原理；<br />6.事务的概念及名词解释；<br />7.数据库表之间有几种关系，并举例；<br />8.Filter的原理,常见用例；<br />9.视图与表的区别？触发器类型有哪些类型？<br />10.建表及各种约束；<br />11.hibernate导入大量数据时，为了避免内存中产生大量对象，在编码时注意什么，如何去除？<img src ="http://www.blogjava.net/GavinMiao/aggbug/373506.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-07 00:14 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/07/373506.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>String面试题</title><link>http://www.blogjava.net/GavinMiao/archive/2012/04/06/373497.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Fri, 06 Apr 2012 10:26:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/04/06/373497.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373497.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/04/06/373497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373497.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373497.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2012/04/06/373497.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/373497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-04-06 18:26 <a href="http://www.blogjava.net/GavinMiao/archive/2012/04/06/373497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题（通信行业公司）</title><link>http://www.blogjava.net/GavinMiao/archive/2012/03/30/373055.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Fri, 30 Mar 2012 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2012/03/30/373055.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/373055.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2012/03/30/373055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/373055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/373055.html</trackback:ping><description><![CDATA[一、unix：<br />1.ps -ef|grep tomcat<br />2.mkdir dir<br />3.打tar包：tar -cvf XXX.tar XXX<br />4.解压tar包：tar -xvf XXX.tar<br />二、java<br /><span style="background-color: #ffffff; ">1.HashMap和HashTable的区别：</span><br /><span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #ffffff; ">HashMap不是线程安全的，<div style="display: inline-block; "></div></span><span class="Apple-style-span" style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; background-color: #ffffff; ">HashTable是线程安全的</span><span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #fefef2; "><br /></span><span class="Apple-style-span" style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; background-color: #ffffff; ">HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。<br /></span><span class="Apple-style-span" style="font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25px; background-color: #ffffff; ">HashTable使用Enumeration，HashMap使用Iterator。<br /></span><span class="Apple-style-span" style="font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; font-size: 13px; line-height: 19px; background-color: #fefef2; ">HashMap把Hashtable的contains方法去掉了，改成containsvalue和containsKey。<br /></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; ">Hashtable是基于陈旧的Dictionary类，完成了Map接口；HashMap是Java 1.2引进的Map接口的一个实现（HashMap继承于AbstractMap,AbstractMap完成了Map接口）。<br /></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; ">HashTable中hash数组默认大小是11，增加的方式是 old*2+1。HashMap中hash数组的默认大小是16，而且一定是2的指数。<br /></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 24px; background-color: #ffffff; ">哈希值的使用不同，HashTable直接使用对象的hashCode。<br /></span>2.什么是java的序列化？如何实现java的序列化：<br /><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p class="MsoNormal" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 18pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">序列化就是一种用来<span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">处理对象流</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">的机制，所谓对象流也就是<span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">将对象的内容进行流化</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">。可以<span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">对流化后的对象进行读写操作，也可将流化后的对象传输于网络之间</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">。序列化是为了<span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">解决在对对象流进行读写操作时所引发的问题。</span></span><span lang="EN-US" style="font-size: 9pt; color: red; font-size: 9pt;"></span></p><p class="MsoNormal" style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 18pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">序列化的实现：将需要被序列化的类实现</span><span lang="EN-US" style="font-size: 9pt; color: red; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">Serializable</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">接口</span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">，然后使用一个输出流</span><span lang="EN-US" style="font-size: 9pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">(</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">如：</span><span style="font-family: 'Times New Roman'; "><span lang="EN-US" style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">FileOutputStream</span><span lang="EN-US" style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">)</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">来构造一个</span><span style="font-family: 'Times New Roman'; "><span lang="EN-US" style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">ObjectOutputStream</span><span lang="EN-US" style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">(</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">对象流</span><span lang="EN-US" style="font-size: 9pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">)</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">对象，接着，使用</span><span lang="EN-US" style="font-size: 9pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">ObjectOutputStream</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">对象的</span><span lang="EN-US" style="font-size: 9pt; color: red; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">writeObject(Object obj)</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">方法就可以将参数为</span><span lang="EN-US" style="font-size: 9pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">obj</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">的对象写出</span><span lang="EN-US" style="font-size: 9pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">(</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">即保存其状态</span><span lang="EN-US" style="font-size: 9pt; "><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">)</span></span><span style="font-family: Arial; font-size: 10pt; background-color: #ffffff; ">，要恢复的话则用输入流。<br /></span></p></span>3.什么是java的单例模式？写一个单例模式；<br /><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; font-size: small; ">单例模式：确保某一个类只有一个实例，而且自行实例化并向整个系统提供这个实例。这个类称为单例类。<br /></span><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p><font size="2">　　代码清单1：饿汉式单例类<br /><br />public class EagerSingleton&nbsp;<br />{&nbsp;<br />&nbsp;&nbsp;&nbsp; private static final EagerSingleton m_instance =&nbsp;new EagerSingleton();&nbsp;</font></p><p><font size="2">&nbsp;&nbsp; /**&nbsp;<br />&nbsp;&nbsp; * 私有的默认构造方法&nbsp;<br />&nbsp;&nbsp;&nbsp;*/</font><font size="2">&nbsp;<br />&nbsp;&nbsp; private EagerSingleton() { }&nbsp;</font></p><p><font size="2">&nbsp;&nbsp; /**&nbsp;<br />&nbsp;&nbsp; * 静态方法获得单例&nbsp;<br />&nbsp;&nbsp; */&nbsp;<br />&nbsp;&nbsp; public static EagerSingleton getInstance()&nbsp;<br />&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_instance;&nbsp;<br />&nbsp;&nbsp; }<br />}<br /><br /></font></p></span><span class="Apple-style-span" style="background-color: #ffffff; "><p style="color: #333333; font-family: Arial; line-height: 26px; "><font size="2"><span class="f14">代码清单2：懒汉式单例类<br /><br />package com.javapatterns.singleton.demos;<br />public class LazySingleton<br />{<br />&nbsp;&nbsp;&nbsp; private static LazySingleton m_instance = null;</span></font></p><font size="2"><span class="f14"><p style="color: #333333; font-family: Arial; line-height: 26px; "><br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp; * 私有的默认构造方法，保证外界无法直接实例化<br />&nbsp;&nbsp;&nbsp; */<br />&nbsp;&nbsp;&nbsp; private LazySingleton() { }</p><p><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp; /**</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp; * 静态方法，返还此类的惟一实例</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp; */</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp; public synchronized static LazySingleton getInstance()</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp; {</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_instance == null)</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_instance = new LazySingleton();</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return m_instance;</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">&nbsp;&nbsp;&nbsp; }</span></font><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">}</span></font><br /><br /><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px;">4.静态块与构造器在继承中的执行顺序：</span></font><br /></p><div><div><span style="line-height: 26px;">public class TestExeuteOrder {</span></div><div><span style="line-height: 26px;"><br /></span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public static void main(String[] args) {</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>Parent p = new ChildTest();</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>p = new ChildTest();</span></div><div><span style="line-height: 26px;"><br /></span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 26px;"><br /></span></div><div><span style="line-height: 26px;">}</span></div><div><span style="line-height: 26px;">class ChildTest extends Parent{</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>static{</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>System.out.println("in child static");</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public ChildTest(){</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>System.out.println("in child construtor");</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 26px;">}</span></div><div><span style="line-height: 26px;"><br /></span></div><div><span style="line-height: 26px;">class Parent{</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>static{</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>System.out.println("in parent static");</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public Parent(){</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>System.out.println("in parent construtor");</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span class="Apple-style-span" style="line-height: 26px;">}</span><br /><span class="Apple-style-span" style="line-height: 26px;">运行结果：</span><br /><div><div style="line-height: 26px; ">in parent static</div><div style="line-height: 26px; ">in child static</div><div style="line-height: 26px; ">in parent construtor</div><div style="line-height: 26px; ">in child construtor</div><div style="line-height: 26px; ">in parent construtor</div><div><span class="Apple-style-span" style="line-height: 26px;">in child construtor</span><br /><span class="Apple-style-span" style="line-height: 26px;">5.成员内部类：</span><br /><div><div style="line-height: 26px; ">public class TestExeuteOrder{</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>class Inner{</div><div style="line-height: 26px; "><span style="white-space:pre">		</span>void test(){</div><div style="line-height: 26px; "><span style="white-space:pre">			</span>if(TestExeuteOrder.this.flag){</div><div style="line-height: 26px; "><span style="white-space:pre">				</span>System.out.println("what a funny");</div><div style="line-height: 26px; "><span style="white-space:pre">			</span>}</div><div style="line-height: 26px; "><span style="white-space:pre">		</span>}</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>}</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>private boolean flag = true;</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>public TestExeuteOrder(){</div><div style="line-height: 26px; "><span style="white-space:pre">		</span>new Inner().test();</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>}</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>public static void main(String[] args){</div><div style="line-height: 26px; "><span style="white-space:pre">		</span>new TestExeuteOrder();</div><div style="line-height: 26px; "><span style="white-space:pre">	</span>}</div><div><span class="Apple-style-span" style="line-height: 26px;">}</span><br /><span class="Apple-style-span" style="line-height: 26px;">运行结果：</span><br /><div><span class="Apple-style-span" style="line-height: 26px;">what a funny</span><br /><span class="Apple-style-span" style="line-height: 26px;">6.参数传递：</span><br /><div><div><span style="line-height: 26px;">public class TestExeuteOrder{</span></div><div><span style="line-height: 26px;"><br /></span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public static void main(String[] args){</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>String a = "ello";</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>TestExeuteOrder t = new TestExeuteOrder();</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>t.change(a);</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>System.out.println(a);</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public void change(String str){</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>str += "H";</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span class="Apple-style-span" style="line-height: 26px;">}</span><br /><span class="Apple-style-span" style="line-height: 26px;">结果：</span><br /><div><span class="Apple-style-span" style="line-height: 26px;">ello</span><br /><span class="Apple-style-span" style="line-height: 26px;">7.参数传递2：</span><br /><div><div><span style="line-height: 26px;">public class TestExeuteOrder{</span></div><div><span style="line-height: 26px;"><br /></span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public static void main(String[] args){</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>StringBuffer x = new StringBuffer("A");</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>StringBuffer y = new StringBuffer("B");</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>change(x,y);</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>System.out.println(x+" "+y);</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>public static void change(StringBuffer a,StringBuffer b){</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>a.append(b);</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">		</span>b = a;</span></div><div><span style="line-height: 26px;"><span style="white-space:pre">	</span>}</span></div><div><span class="Apple-style-span" style="line-height: 26px;">}</span><br /><span class="Apple-style-span" style="line-height: 26px;">结果为：</span><br /><span class="Apple-style-span" style="line-height: 26px;">AB B</span><br /><span class="Apple-style-span" style="line-height: 26px;">8.</span><br /><br /><div style="line-height: 26px;"><div>public class TestExeuteOrder{</div><div></div><div><span style="white-space:pre">	</span>public static void main(String[] args){</div><div><span style="white-space:pre">		</span>String a = "good";</div><div><span style="white-space:pre">		</span>char[] b = new char[]{'a','b','c'};</div><div><span style="white-space:pre">		</span>method(a,b);</div><div><span style="white-space:pre">		</span>System.out.println("a="+a+"------&gt;b="+new String(b));</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>public static void method(String a,char[] b){</div><div><span style="white-space:pre">		</span>a = "Test ok";</div><div><span style="white-space:pre">		</span>b[0] = 'g';</div><div><span style="white-space:pre">	</span>}</div><div></div><div>}<br />结果：<br /><div>a=good------&gt;b=gbc</div></div></div></div></div></div></div></div></div></div></div></div></div></div></div><font class="Apple-style-span" color="#333333" face="Arial"><span class="Apple-style-span" style="line-height: 26px; ">三、SQL：</span></font><p>&nbsp;</p></span></font></span><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p><font size="2">1.存储过程与函数的区别：<br />1）前者，程序头部声明用的是procedure；后者，程序头部声明用的是function；<br />2）前者，不需要描述返回类型，后者需要；<br />3）前者可以作为一个独立的pl/sql语句来执行；后者不能独立运行，必须作为表达式的一部分条用；<br />4）sql语句中不可调用procedure，但可以调用function；<br />2.查询student表中name重复的记录：<br /></font></p></span><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; font-size: small; ">select * from student where name in(select name from student group by sname having count(*) &gt;1);</span><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; background-color: #ffffff; "><p><font class="Apple-style-span" size="2">3.table表中有两列A,B,如果A&gt;B选择A，如果A&lt;B,选择B：<br /></font></p><div><font class="Apple-style-span" size="2">select( case when s1.A&gt;s1.B then s1.A &nbsp;when s1.A&lt;s1.B then s1.B end) re from student s1;<br /></font></div><p>&nbsp;</p></span><img src ="http://www.blogjava.net/GavinMiao/aggbug/373055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2012-03-30 16:00 <a href="http://www.blogjava.net/GavinMiao/archive/2012/03/30/373055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql面试题</title><link>http://www.blogjava.net/GavinMiao/archive/2011/10/20/361642.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Thu, 20 Oct 2011 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/10/20/361642.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/361642.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/10/20/361642.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/361642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/361642.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2011/10/20/361642.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/361642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-10-20 11:34 <a href="http://www.blogjava.net/GavinMiao/archive/2011/10/20/361642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2面试题汇总</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/29/357480.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Mon, 29 Aug 2011 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/29/357480.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/357480.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/29/357480.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/357480.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/357480.html</trackback:ping><description><![CDATA[参考文章：<a href="http://hi.baidu.com/zrmox/blog/item/35719d386cf07afe3b87cec5.html">http://hi.baidu.com/zrmox/blog/item/35719d386cf07afe3b87cec5.html</a><br /><br />一.工作原理<br /><div><span style="font-family: Verdana, sans-serif, 宋体; line-height: 20px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; -webkit-text-size-adjust: none; ">一个请求在Struts2框架中的处理大概分为以下几个步骤&nbsp;<br 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; " />1 客户端初始化一个指向Servlet容器（例如Tomcat）的请求&nbsp;<br 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; " />2 这个请求经过一系列的过滤器（Filter）（这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器，这个过滤器对于Struts2和其他框架的集成很有帮助，例如：SiteMesh Plugin）&nbsp;<br 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; " />3 接着FilterDispatcher被调用，FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action&nbsp;<br 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; " />4 如果ActionMapper决定需要调用某个Action，FilterDispatcher把请求的处理交给ActionProxy&nbsp;<br 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; " />5 ActionProxy通过Configuration Manager询问框架的配置文件，找到需要调用的Action类&nbsp;<br 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; " />6 ActionProxy创建一个ActionInvocation的实例。&nbsp;<br 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; " />7 ActionInvocation实例使用命名模式来调用，在调用Action的过程前后，涉及到相关拦截器（Intercepter）的调用。&nbsp;<br 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; " />8 一旦Action执行完毕，ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是（但不总是，也可 能是另外的一个Action链）一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper&nbsp;<br /><br /><div><span style="color: #232323; line-height: normal; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-size-adjust: auto; font-family: Arial; font-size: 10pt; ">基本简要流程如下：1、客户端浏览器发出HTTP请求。2、根据web.xml配置，该请求被FilterDispatcher接收。3、根据struts.xml配置，找到需要调用的Action类和方法， 并通过IoC方式，将值注入给Aciton。4、Action调用业务逻辑组件处理业务逻辑，这一步包含表单验证。5、Action执行完毕，根据struts.xml中的配置找到对应的返回结果result，并跳转到相应页面。6、返回HTTP响应到客户端浏览器。&nbsp;</span></div><br />二、struts2标签分类：<br />1.表单UI标签<br />2.非表单UI标签<br />3.控制标签<br />4.数据标签<br />三、为什么使用struts2？<br />1.开源<br />2.mvc框架<br />3.纯pojo的Action<br />4.更好的标签特性<br />5.易测试<br />6.易扩展<br /><br /><br />待续.........<br /><br /><br /></span></div><img src ="http://www.blogjava.net/GavinMiao/aggbug/357480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-29 11:27 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/29/357480.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring面试题</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/29/357463.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Sun, 28 Aug 2011 16:38:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/29/357463.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/357463.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/29/357463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/357463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/357463.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2011/08/29/357463.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/357463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-29 00:38 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/29/357463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1面试题汇总</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357438.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Sun, 28 Aug 2011 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357438.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/357438.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/357438.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/357438.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2011/08/28/357438.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/357438.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-28 14:09 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/28/357438.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate面试题汇总</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357436.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Sun, 28 Aug 2011 05:37:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357436.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/357436.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/357436.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/357436.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2011/08/28/357436.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/357436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-28 13:37 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/28/357436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts，Spring，Hibernate面试题总结</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357434.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Sun, 28 Aug 2011 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357434.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/357434.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/28/357434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/357434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/357434.html</trackback:ping><description><![CDATA[<div><span style="color: #333333; font-family: Arial; line-height: 26px; "><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; ">（转载）<a href="http://blog.csdn.net/David8631/article/details/2676615">http://blog.csdn.net/David8631/article/details/2676615</a>&nbsp;作者：David8631<br />Hibernate<span style="font-family: 宋体; ">工作原理及为什么要用？</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span style="font-family: 宋体; ">原理：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>1.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">读取并解析配置文件</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>2.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">读取并解析映射信息，创建</span>SessionFactory</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>3.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">打开</span>Sesssion</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>4.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">创建事务</span>Transation</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>5.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">持久化操作</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>6.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">提交事务</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>7.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">关闭</span>Session</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>8.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">关闭</span>SesstionFactory</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">&nbsp;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-family: 宋体; ">为什么要用：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">&nbsp;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">1.<span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 宋体; ">对</span>JDBC<span style="font-family: 宋体; ">访问数据库的代码做了封装，大大简化了数据访问层繁琐的重复性代码。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">2.<span>&nbsp;&nbsp;&nbsp;&nbsp;Hibernate</span><span style="font-family: 宋体; ">是一个基于</span>JDBC<span style="font-family: 宋体; ">的主流持久化框架，是一个优秀的</span>ORM<span style="font-family: 宋体; ">实现。他很大程度的简化</span>DAO<span style="font-family: 宋体; ">层的编码工作</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">3.<span>&nbsp;&nbsp;&nbsp;&nbsp;hibernate</span><span style="font-family: 宋体; ">使用</span>Java<span style="font-family: 宋体; ">反射机制，而不是字节码增强程序来实现透明性。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">4.<span>&nbsp;&nbsp;&nbsp;&nbsp;hibernate</span><span style="font-family: 宋体; ">的性能非常好，因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库，从</span><span style="font-family: 宋体; ">一对一到多对多的各种复杂关系。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">&nbsp;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>2．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;Hibernate<span style="font-family: 宋体; ">是如何延迟加载</span>?</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>1.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Hibernate2<span style="font-family: 宋体; ">延迟加载实现：</span>a)<span style="font-family: 宋体; ">实体对象</span><span>&nbsp;&nbsp;b)</span><span style="font-family: 宋体; ">集合（</span>Collection<span style="font-family: 宋体; ">）</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>2.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>Hibernate3&nbsp;<span style="font-family: 宋体; ">提供了属性的延迟加载功能</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-family: 宋体; ">当</span>Hibernate<span style="font-family: 宋体; ">在查询数据的时候，数据并没有存在与内存中，当程序真正对数据的操作时，对象才存在与内存中，就实现了延迟加载，他节省了服务器的内存开销，从而提高了服务器的性能。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>3．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;Hibernate<span style="font-family: 宋体; ">中怎样实现类之间的关系</span>?(<span style="font-family: 宋体; ">如：一对多、多对多的关系</span>)</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span style="font-family: 宋体; ">类与类之间的关系主要体现在表与表之间的关系进行操作，它们都市对对象进行操作，我们程序中把所有的表与类都映射在一起，它们通过配置文件中的</span>many-to-one<span style="font-family: 宋体; ">、</span>one-to-many<span style="font-family: 宋体; ">、</span>many-to-many<span style="font-family: 宋体; ">、</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>4．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;<span style="font-family: 宋体; ">说下</span>Hibernate<span style="font-family: 宋体; ">的缓存机制</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>1.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">内部缓存存在</span>Hibernate<span style="font-family: 宋体; ">中又叫一级缓存，属于应用事物级缓存</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>2.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">二级缓存：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>a)<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">应用及缓存</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>b)<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">分布式缓存</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-family: 宋体; ">条件：数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 宋体; ">关键数据</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">c)<span>&nbsp;&nbsp;</span><span style="font-family: 宋体; ">第三方缓存的实现</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>5．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;Hibernate<span style="font-family: 宋体; ">的查询方式</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; ">Sql<span style="font-family: 宋体; ">、</span>Criteria,object comptosition</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; ">Hql<span style="font-family: 宋体; ">：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 60pt; text-indent: -18pt; "><span>1、<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">属性查询</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 60pt; text-indent: -18pt; "><span>2、<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">参数查询、命名参数查询</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 60pt; text-indent: -18pt; "><span>3、<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">关联查询</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 60pt; text-indent: -18pt; "><span>4、<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">分页查询</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 60pt; text-indent: -18pt; "><span>5、<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">统计函数</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">&nbsp;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>6．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;<span style="font-family: 宋体; ">如何优化</span>Hibernate<span style="font-family: 宋体; ">？</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>1.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">使用双向一对多关联，不使用单向一对多</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>2.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">灵活使用单向一对多关联</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>3.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">不用一对一，用多对一取代</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>4.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">配置对象缓存，不使用集合缓存</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>5.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">一对多集合使用</span>Bag,<span style="font-family: 宋体; ">多对多集合使用</span>Set</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>6.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">继承类使用显式多态</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span>7.<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span style="font-family: 宋体; ">表字段要少，表关联不要怕多，有二级缓存撑腰</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; ">&nbsp;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>7．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;Struts<span style="font-family: 宋体; ">工作机制？为什么要使用</span>Struts<span style="font-family: 宋体; ">？</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span style="font-family: 宋体; ">工作机制：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">Struts<span style="font-family: 宋体; ">的工作流程</span>:</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;</span><span style="font-family: 宋体; ">在</span>web<span style="font-family: 宋体; ">应用启动时就会加载初始化</span>ActionServlet,ActionServlet<span style="font-family: 宋体; ">从</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;struts-config.xml</span><span style="font-family: 宋体; ">文件中读取配置信息</span>,<span style="font-family: 宋体; ">把它们存放到各种配置对象</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;</span><span style="font-family: 宋体; ">当</span>ActionServlet<span style="font-family: 宋体; ">接收到一个客户请求时</span>,<span style="font-family: 宋体; ">将执行如下流程</span>.</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(1)</span><span style="font-family: 宋体; ">检索和用户请求匹配的</span>ActionMapping<span style="font-family: 宋体; ">实例</span>,<span style="font-family: 宋体; ">如果不存在</span>,<span style="font-family: 宋体; ">就返回请求路径无效信息</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(2)</span><span style="font-family: 宋体; ">如果</span>ActionForm<span style="font-family: 宋体; ">实例不存在</span>,<span style="font-family: 宋体; ">就创建一个</span>ActionForm<span style="font-family: 宋体; ">对象</span>,<span style="font-family: 宋体; ">把客户提交的表单数据保存到</span>ActionForm<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 宋体; ">对象中</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(3)</span><span style="font-family: 宋体; ">根据配置信息决定是否需要表单验证</span>.<span style="font-family: 宋体; ">如果需要验证</span>,<span style="font-family: 宋体; ">就调用</span>ActionForm<span style="font-family: 宋体; ">的</span>validate()<span style="font-family: 宋体; ">方法</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(4)</span><span style="font-family: 宋体; ">如果</span>ActionForm<span style="font-family: 宋体; ">的</span>validate()<span style="font-family: 宋体; ">方法返回</span>null<span style="font-family: 宋体; ">或返回一个不包含</span>ActionMessage<span style="font-family: 宋体; ">的</span>ActuibErrors<span style="font-family: 宋体; ">对象</span>,<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-family: 宋体; ">就表示表单验证成功</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(5)ActionServlet</span><span style="font-family: 宋体; ">根据</span>ActionMapping<span style="font-family: 宋体; ">所包含的映射信息决定将请求转发给哪个</span>Action,<span style="font-family: 宋体; ">如果相应的</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Action</span><span style="font-family: 宋体; ">实例不存在</span>,<span style="font-family: 宋体; ">就先创建这个实例</span>,<span style="font-family: 宋体; ">然后调用</span>Action<span style="font-family: 宋体; ">的</span>execute()<span style="font-family: 宋体; ">方法</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(6)Action</span><span style="font-family: 宋体; ">的</span>execute()<span style="font-family: 宋体; ">方法返回一个</span>ActionForward<span style="font-family: 宋体; ">对象</span>,ActionServlet<span style="font-family: 宋体; ">在把客户请求转发给</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionForward</span><span style="font-family: 宋体; ">对象指向的</span>JSP<span style="font-family: 宋体; ">组件</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span>&nbsp;&nbsp;&nbsp;&nbsp;-(7)ActionForward</span><span style="font-family: 宋体; ">对象指向</span>JSP<span style="font-family: 宋体; ">组件生成动态网页</span>,<span style="font-family: 宋体; ">返回给客户</span>;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span style="font-family: 宋体; ">为什么要用：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">JSP<span style="font-family: 宋体; ">、</span>Servlet<span style="font-family: 宋体; ">、</span>JavaBean<span style="font-family: 宋体; ">技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱，所以在此之上，我们需要一个规则、一个把这些技术组织起来的规则，这就是框架，</span>Struts<span style="font-family: 宋体; ">便应运而生。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-family: 宋体; ">基于</span>Struts<span style="font-family: 宋体; ">开发的应用由</span>3<span style="font-family: 宋体; ">类组件构成：控制器组件、模型组件、视图组件</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>8．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;Struts<span style="font-family: 宋体; ">的</span>validate<span style="font-family: 宋体; ">框架是如何验证的？</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-family: 宋体; ">在</span>struts<span style="font-family: 宋体; ">配置文件中配置具体的错误提示，再在</span>FormBean<span style="font-family: 宋体; ">中的</span>validate()<span style="font-family: 宋体; ">方法具体调用。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>9．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;</span></span>&nbsp;<span style="font-family: 宋体; ">说下</span>Struts<span style="font-family: 宋体; ">的设计模式</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; ">MVC<span style="font-family: 宋体; ">模式</span>:<span>&nbsp;&nbsp;web</span><span style="font-family: 宋体; ">应用程序启动时就会加载并初始化</span>ActionServler<span style="font-family: 宋体; ">。用户提交表单时，一个配置好的</span>ActionForm<span style="font-family: 宋体; ">对象被创建，并被填入表单相应的数据，</span>ActionServler<span style="font-family: 宋体; ">根据</span>Struts-config.xml<span style="font-family: 宋体; ">文件配置好的设置决定是否需要表单验证，如果需要就调用</span>ActionForm<span style="font-family: 宋体; ">的</span>Validate<span style="font-family: 宋体; ">（）验证后选择将请求发送到哪个</span>Action<span style="font-family: 宋体; ">，如果</span>Action<span style="font-family: 宋体; ">不存在，</span>ActionServlet<span style="font-family: 宋体; ">会先创建这个对象，然后调用</span>Action<span style="font-family: 宋体; ">的</span>execute<span style="font-family: 宋体; ">（）方法。</span>Execute<span style="font-family: 宋体; ">（）从</span>ActionForm<span style="font-family: 宋体; ">对象中获取数据，完成业务逻辑，返回一个</span>ActionForward<span style="font-family: 宋体; ">对象，</span>ActionServlet<span style="font-family: 宋体; ">再把客户请求转发给</span>ActionForward<span style="font-family: 宋体; ">对象指定的</span>jsp<span style="font-family: 宋体; ">组件，</span>ActionForward<span style="font-family: 宋体; ">对象指定的</span>jsp<span style="font-family: 宋体; ">生成动态的网页，返回给客户。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; "><span style="font-family: 宋体; ">单例模式</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; ">Factory(<span style="font-family: 宋体; ">工厂模式</span>)<span style="font-family: 宋体; ">：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-family: 宋体; ">定义一个基类</span>===<span style="font-family: 宋体; ">》实现基类方法（子类通过不同的方法）</span>===<span style="font-family: 宋体; ">》定义一个工厂类（生成子类实例）</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; ">===<span style="font-family: 宋体; ">》开发人员调用基类方法</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; text-indent: 21pt; ">Proxy(<span style="font-family: 宋体; ">代理模式</span>)</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; "><span>10．<span style="font: normal normal normal 7pt/normal 'Times New Roman'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span>spring<span style="font-family: 宋体; ">工作机制及为什么要用</span>?</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 18pt; text-indent: -18pt; ">&nbsp;</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">1.spring mvc<span style="font-family: 宋体; ">请所有的请求都提交给</span>DispatcherServlet,<span style="font-family: 宋体; ">它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">2.DispatcherServlet<span style="font-family: 宋体; ">查询一个或多个</span>HandlerMapping,<span style="font-family: 宋体; ">找到处理请求的</span>Controller.</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">3.DispatcherServlet<span style="font-family: 宋体; ">请请求提交到目标</span>Controller</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">4.Controller<span style="font-family: 宋体; ">进行业务逻辑处理后，会返回一个</span>ModelAndView</p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">5.Dispathcher<span style="font-family: 宋体; ">查询一个或多个</span>ViewResolver<span style="font-family: 宋体; ">视图解析器</span>,<span style="font-family: 宋体; ">找到</span>ModelAndView<span style="font-family: 宋体; ">对象指定的视图对象</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">6.<span style="font-family: 宋体; ">视图对象负责渲染返回给客户端。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-family: 宋体; ">为什么用：</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; ">{<span style="font-size: 9pt; ">AOP&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">让开发人员可以创建非行为性的关注点，称为横切关注点，并将它们插入到应用程序代码中。使用</span><span style="font-size: 9pt; ">&nbsp;AOP&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">后，公共服务</span><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">（比</span><span style="font-size: 9pt; "></span><span style="font-size: 9pt; font-family: 宋体; ">如日志、持久性、事务等）就可以分解成方面并应用到域对象上，同时不会增加域对象的对象模型的复杂性。</span></p><p style="margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 0cm; "><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IOC&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">允许创建一个可以构造对象的应用环境，然后向这些对象传递它们的协作对象。正如单词</span>&nbsp;<span style="font-size: 9pt; font-family: 宋体; ">倒置</span>&nbsp;<span style="font-size: 9pt; font-family: 宋体; ">所表明的，</span><span style="font-size: 9pt; ">IOC&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">就像反</span><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">过来的</span><span style="font-size: 9pt; ">&nbsp;JNDI</span><span style="font-size: 9pt; font-family: 宋体; ">。没有使用一堆抽象工厂、服务定位器、单元素（</span><span style="font-size: 9pt; ">singleton</span><span style="font-size: 9pt; font-family: 宋体; ">）和直接构造（</span><span style="font-size: 9pt; ">straight construction</span><span style="font-size: 9pt; font-family: 宋体; ">），每一个对象都是用</span><span style="font-size: 9pt; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">其协作对象构造的。因此是由容器管理协作对象（</span><span style="font-size: 9pt; ">collaborator</span><span style="font-size: 9pt; font-family: 宋体; ">）。</span></p><p style="font-size: 10pt; margin-top: 0cm; margin-right: 0cm; margin-bottom: 0pt; margin-left: 21pt; text-indent: 21pt; "><span style="font-size: 9pt; ">Spring</span><span style="font-size: 9pt; font-family: 宋体; ">即使一个</span><span style="font-size: 9pt; ">AOP</span><span style="font-size: 9pt; font-family: 宋体; ">框架，也是一</span><span style="font-size: 9pt; ">IOC</span><span style="font-size: 9pt; font-family: 宋体; ">容器。</span><span style="font-size: 9pt; ">&nbsp;Spring&nbsp;</span><span style="font-size: 9pt; font-family: 宋体; ">最好的地方是它有助于您替换对象。有了</span><span style="font-size: 9pt; ">&nbsp;Spring</span><span style="font-size: 9pt; font-family: 宋体; ">，只要用</span><span style="font-size: 9pt; ">&nbsp;JavaBean</span><span style="font-size: 9pt; font-family: 宋体; ">属性和配置文件加入依赖性（协作对象）。然后可以很容易地在需要时替换具有类似接口的协作对象。</span><span style="font-size: 9pt; ">}</span></p></span></div><img src ="http://www.blogjava.net/GavinMiao/aggbug/357434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-28 12:41 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/28/357434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>受打击后的疯狂---------js操作html元素</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/25/357251.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Thu, 25 Aug 2011 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/25/357251.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/357251.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/25/357251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/357251.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/357251.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2011/08/25/357251.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/357251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-25 13:25 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/25/357251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面试题总结1：</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/18/356799.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Thu, 18 Aug 2011 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/18/356799.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/356799.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/18/356799.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/356799.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/356799.html</trackback:ping><description><![CDATA[1.<br /><span class="Apple-style-span" style="color: #333333; font-family: Arial; line-height: 26px; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">问：&nbsp;</span>&nbsp;<span style="font-size: 10.5pt; font-family: 宋体; ">抽象类是否可继承实体类</span>&nbsp;<span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">(concrete&nbsp;class)<br /><div><span style="font-family: Arial; "><span style="font-size: 10.5pt; font-family: 'Times New Roman'; ">答：</span>&nbsp;<span style="font-size: 10.5pt; font-family: 宋体; "></span></span><span class="Apple-style-span" style="font-family: 宋体; line-height: 21px; color: #000000; ">可以继承，但是和实体类的继承一样，也要求父类可继承，并且拥有子类可访问到的构造器。<br />2.<br />问：join、inner join、full join、left join、right join的区别：<br /><div><span style="font-family: arial, 宋体, sans-serif; line-height: 24px; "><pre id="best-answer-content"  mb10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; line-height: 22px; "><div><span style="color: #333333; font-family: 'Times New Roman'; line-height: 26px; white-space: normal; ">答：</span></div>SELECT * FROM A inner join B ON A.F1 = B.F1, 内连接，显示的查询结果，就是查询条件A 的必须等于B的数据； <br />SELECT * FROM  A left join B ON A.F1 = B.F1 ,左连接，显示的查询结果，就是左边表的全部，和右边表的符合查询条件的数据。<br />SELECT * FROM  A right join B ON A.F1 = B.F1 ,右连接，显示的查询结果，是右边表的全部，和左边表的符合查询条件的数据。<br />join = inner join；<br />left join = left outter join； <br /><div><span style="font-family: arial, 宋体, sans-serif; line-height: 24px; white-space: normal; "><pre id="best-answer-content"  mb10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; line-height: 22px; ">right  join =  right  outter join； <br /><div><span style="font-family: arial, 宋体, sans-serif; line-height: 24px; white-space: normal; "><pre id="best-answer-content"  mb10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; line-height: 22px; ">full  join =  full outter join； </pre></span></div></pre></span></div><div><span style="font-family: arial, 宋体, sans-serif; line-height: 24px; white-space: normal; "><pre id="best-answer-content"  mb10"="" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; line-height: 22px; ">SELECT * FROM  A full join B ON A.F1 = B.F1，全连接， 显示的查询结果，<div style="display: inline-block; "><div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; white-space: normal; "><pre class="reply-text mb10" id="content-52296886" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; ">左右表未连接的内容全部显示；</pre></span></div></div></pre></span></div>eg：（来自：<a href="http://zhidao.baidu.com/question/113160374.html?fr=qrl&amp;cid=74&amp;index=4&amp;fr2=query">http://zhidao.baidu.com/question/113160374.html?fr=qrl&amp;cid=74&amp;index=4&amp;fr2=query</a>）<br /><div style="display: inline-block; "><div><span class="Apple-style-span" style="font-family: arial, 宋体, sans-serif; line-height: 24px; white-space: normal; "><pre id="best-answer-content" class="reply-text mb10" style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Arial; white-space: pre-wrap; word-wrap: break-word; zoom: 1; line-height: 22px; ">[TEST@ORA1] SQL&gt;select * from a;

编号 姓名
---- ----------
1000 张三
2000 李四
3000 王五

[TEST@ORA1] SQL&gt;select * from b;

编号 商品
---- ----------
1000 电视机
2000 录像机
4000 自行车

[TEST@ORA1] SQL&gt;set null 空值--这里为了显示方面我把NULL定义成了[空值]

[TEST@ORA1] SQL&gt;select a.*,b.* from a inner join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机

[TEST@ORA1] SQL&gt;select a.*,b.* from a left join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机
3000 王五       空值 空值

[TEST@ORA1] SQL&gt;select a.*,b.* from a right join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机
空值 空值       4000 自行车

[TEST@ORA1] SQL&gt;select a.*,b.* from a full join b on a.编号=b.编号;

编号 姓名       编号 商品
---- ---------- ---- ----------
1000 张三       1000 电视机
2000 李四       2000 录像机
3000 王五       空值 空值
空值 空值       4000 自行车</pre></span></div></div></pre></span></div></span></div></span></span><img src ="http://www.blogjava.net/GavinMiao/aggbug/356799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-18 17:16 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/18/356799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdbc连接数据库</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/18/356754.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Wed, 17 Aug 2011 17:23:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/18/356754.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/356754.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/18/356754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/356754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/356754.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/GavinMiao/archive/2011/08/18/356754.html'>阅读全文</a><img src ="http://www.blogjava.net/GavinMiao/aggbug/356754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-18 01:23 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/18/356754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts1和struts2的区别</title><link>http://www.blogjava.net/GavinMiao/archive/2011/08/10/356269.html</link><dc:creator>GavinMiao</dc:creator><author>GavinMiao</author><pubDate>Wed, 10 Aug 2011 11:22:00 GMT</pubDate><guid>http://www.blogjava.net/GavinMiao/archive/2011/08/10/356269.html</guid><wfw:comment>http://www.blogjava.net/GavinMiao/comments/356269.html</wfw:comment><comments>http://www.blogjava.net/GavinMiao/archive/2011/08/10/356269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/GavinMiao/comments/commentRss/356269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/GavinMiao/services/trackbacks/356269.html</trackback:ping><description><![CDATA[转载：<a href="http://www.blogjava.net/tokyo2006/archive/2009/05/09/269734.html">http://www.blogjava.net/tokyo2006/archive/2009/05/09/269734.html<br /><br /></a><div><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; "><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">Action 类:&nbsp;<br />&#8226; Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。（<span style="color: #ff0000; ">侵入式编程，不赞同</span>）&nbsp;<br />&#8226; Struts 2 Action类可以实现一个Action接口，也可实现其他接口，使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的，任何有execute标识的POJO对象都可以用作Struts2的Action对象。</p><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">线程模式:&nbsp;<br />&#8226; Struts1 Action是单例模式并且必须是线程安全的，因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事，并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 （<span style="color: #ff0000; ">安全性不如STRUTS2</span>)<br />&#8226; Struts2 Action对象为每一个请求产生一个实例，因此没有线程安全问题。（实际上，servlet容器给每个请求产生许多可丢弃的对象，并且不会导致性能和垃圾回收问题）<br />Servlet 依赖:&nbsp;<br />&#8226; Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 (依赖性太强，耦合度太高）<br />&#8226; Struts 2 Action不依赖于容器，允许Action脱离容器单独被测试。如果需要，Struts2 Action仍然可以访问初始的request和response。但是，其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。<br />可测性:&nbsp;<br />&#8226; 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API（这使得测试要依赖于容器）。一个第三方扩展－－Struts TestCase－－提供了一套Struts1的模拟对象（来进行测试）。 （<span style="color: #ff0000; ">对于TDD方式编程带来不便</span>）<br />&#8226; Struts 2 Action可以通过初始化、设置属性、调用方法来测试，&#8220;依赖注入&#8221;支持也使测试更容易。<br />捕获输入: （<span style="color: #ff0000; ">使编程人员更加专注于自己的业务逻辑</span>）<br />&#8226; Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm，开发者经常创建多余的类捕获输入。动态Bean（DynaBeans）可以作为创建传统ActionForm的选择，但是，开发者可能是在重新描述(创建)已经存在的JavaBean（仍然会导致有冗余的javabean）。&nbsp;<br />&#8226; Struts 2直接使用Action属性作为输入属性，消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型，包括业务对象，能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。</p><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">表达式语言： （<span style="color: #ff0000; ">使得前端的VIEW变的更加的灵活多变</span>）<br />&#8226; Struts1 整合了JSTL，因此使用JSTL EL。这种EL有基本对象图遍历，但是对集合和索引属性的支持很弱。&nbsp;<br />&#8226; Struts2可以使用JSTL，但是也支持一个更强大和灵活的表达式语言－－"Object Graph Notation Language" (OGNL).</p><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">绑定值到页面（view）: （<span style="color: #ff0000; ">方便的读取变量的值</span>）<br />&#8226; Struts 1使用标准JSP机制把对象绑定到页面中来访问。&nbsp;<br />&#8226; Struts 2 使用 "ValueStack"技术，使taglib能够访问值而不需要把你的页面（view）和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面（view）。&nbsp;<br />　&nbsp;<br />类型转换： （<span style="color: #ff0000; ">再次体现OGNL的强大</span>）<br />&#8226; Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器，对每一个实例来说是不可配置的。&nbsp;<br />&#8226; Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。</p><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">校验： （<span style="color: #ff0000; ">又是节省编程工作量的好方法</span>）<br />&#8226; Struts 1支持在ActionForm的validate方法中手动校验，或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容，但不能校验子对象。&nbsp;<br />&#8226; Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验，来支持chain校验子属性</p><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">Action执行的控制： （<span style="color: #ff0000; ">Actions的彼此关联在STRUTS2下变的弱了很多了</span>）<br />&#8226; Struts1支持每一个模块有单独的Request Processors（生命周期），但是模块中的所有Action必须共享相同的生命周期。&nbsp;<br />&#8226; Struts2支持通过拦截器堆栈（Interceptor Stacks）为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。<br /></p><p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; line-height: 19px; font-size: 13px; ">国内很多公司虽然用的是完整的框架，但是在节约成本和提高效率的前提下，还是应该考虑下技术更新的，恩，恩~~~~<br />我觉得最吸引程序员升级的原因是使用Struts 2时，开发一个Action，你根据就不会感觉得到这是一个Action，实质上就是一个有execute方法的POJO类，你在里面看不到任何request, response之类的东西，这给编写单元测试 什么的都带来了很大的方便。由于request和response是由于容器负责实例化的，所以在Struts 1 中要对Action类直接进行测试是比较困难的。 Struts 2中可以很方便地使用像自动完成、TAB页面等，需要AJAX实现的功能，有丰富的标签库。不需要像Struts 1那样还需要写服务器端验证的html:error标签。除了对传统JSP的支持之外，对于FreeMaker和Velocity等模板语言有很好的支持。 Struts 2有着丰富的文档、教程和示例［showcase（WebWork的经典示例演示）］，涵盖了近乎所 有的功能）。&nbsp;<br />Struts2的文档达55M之大可见其文档之全</p></span></div><a href="http://www.blogjava.net/tokyo2006/archive/2009/05/09/269734.html"></a><img src ="http://www.blogjava.net/GavinMiao/aggbug/356269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/GavinMiao/" target="_blank">GavinMiao</a> 2011-08-10 19:22 <a href="http://www.blogjava.net/GavinMiao/archive/2011/08/10/356269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>