java面筆試總結

java面筆試總結
2011年04月10日
  2010、10、12 湖南華諾集團面試題集
  1、Double、Class是final類,不能被繼承;Math、Thread可以被繼承
  2、 當前類 同一package 子孫類 其它package
  Public √ √ √ √
  protected √ √ √ ×
  default √ √ × ×
  private √ × × ×
  3、Collection的4個主要接口:List、Set、BeanContext、SortedSet
  4、Error和Exception的區別
  error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
  exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。
  5、多線程和同步的幾種實現方式
  多線程:主要有兩種 一種是繼承Thread類,一種是實現Runnable接口
  同步有兩種方法。一種同步方法,一種同步代碼!分別是synchronized,wait與notify
  6、打印昨天的當前時間 long today = System.currentTimeMillis(); long yestory = today - 1000*60*60*24 ; Date time = new Date( yestory ) ; System.out.println(time.getDate()+"號"+time.getHours()+"時"+time.getMinutes()+"分"+time.getSeconds()+"秒") 7、Jsp重定向的方法
  服務器端的重定向可以有兩種方式,一是使用HttpServletResponse的
  sendRedirect()方法,一是使用RequestDispatcher的forward()方法。
  8、Jsp頁面間數據如何傳遞
  a.設置session變量,session.setAttribute("a","b");b.地址方式傳值:show.jsp?id=變量值
  9、Jsp的內置對象:request、response、session、application、out、
  java.lang.Object、config、exception、pageContext 10、forward、redirect的區別 forward僅是容器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;
  redirect則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。
  所以,forward更加高效,在forward可以滿足需要時,儘量使用forward()方法,並且,這樣也有助於隱藏實際的鏈接。
  在有些情況下,比如,需要跳轉到一個其它服務器上的資源,則必須使用sendRedirect()方法。
  從地址欄顯示來說 forward是服務器請求資源,服務器直接訪問目標地址的
  URL,把那個URL的響應內容讀取過來,然後把這些內容 再發給瀏覽器.瀏覽器根本不知道服務器發送的內容從哪裏來的,所以它的地址欄還是原來的地址. redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是新的URL.所以redirect等於客戶端向服務器端發出兩次request,同時也接受兩次response。 11、多態的概念
  多態是面向對象的重要特性,簡單點說:"一個接口,多種實現",就是同一種事物表現出的多種形態 多態性:多態性是指允許不同類的對象對同一消息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行爲共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。 12、Application的生命週期
  application對象是一個特別重要的JSP對象,它存在於服務器的內存空間中,服務器一旦啓動,就會自動產生一個application對象,除非服務器被關閉,否則這個application對象將一直保持下去。在application對象的生命週期中,在當前服務器上運行的每一個JSP程序都可以任意存取和這個application對象綁定的參數(或者Java對象)的值。application對象的這些特性爲我們在多個JSP程序中、多個用戶共享某些全局信息(如當前的在線人數等)提供了方便。由此我們可以不借助數據庫就實現聊天室的功能。
  13、list、set的區別 list是列表(接口),是可以允許出現重複值的,
  set是集合,不允許出現重複值
  ArrayList和HashMap是異步的,
  Vector和HashTable是同步的,
  所以Vector和HashTable是線程安全的,
  而ArrayList和HashMap並不是線程安全的。
  因爲同步需要花費機器時間,所以Vector和HashTable的執行效率要低於ArrayList和HashMap。
  Collection
  ├List
  │├LinkedList
  │├ArrayList
  │└Vector
  │ └Stack
  └Set
  Map
  ├Hashtable
  ├HashMap
  └WeakHashMap
  14、如何區別set中的元素
  在比較時先調用hashCode方法,如果不相同,證明不相等。
  如果相同,再調用equals方法,如果equals方法相同,證明相等,不相同,證明不相等。
  ==:主要用在基本數據類型及引用
  Equals:主要是對象或對象引用的比較。
  15、抽象類與接口的區別
  1,抽象類裏可以有構造方法,而接口內不能有構造方法。
  2,抽象類中可以有普通成員變量,而接口中不能有普通成員變量。
  3,抽象類中可以包含非抽象的普通方法,而接口中所有的方法必須是抽象的,不能有非抽象的普通方法。
  4,抽象類中的抽象方法的訪問類型可以是public ,protected和默認類型,但接口中的抽象方法只能是public類型的,並且默認即爲public abstract類型。
  5,抽象類中可以包含靜態方法,接口內不能包含靜態方法。
  6,抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static類型,並且默認爲public static類型。
  7,一個類可以實現多個接口,但只能繼承一個抽象類。
  再補充點兩者在應用上的區別:
  接口更多的是在系統框架設計方法發揮作用,主要定義模塊之間的通信,而抽象類在代碼實現方面發揮作用,可以實現代碼的重用
  16、爲什麼要用Class.forName方法
  從JVM的角度看,我們使用關鍵字new創建一個類的時候,這個類可以沒有被加載。但是使用newInstance()方法的時候,就必須保證:1、這個類已經加載;2、這個類已經連接了。而完成上面兩個步驟的正是Class的靜態方法forName()所完成的,這個靜態方法調用了啓動類加載器,即加載java API的那個加載器。
  現在可以看出,newInstance()實際上是把new這個方式分解爲兩步,即首先調用Class加載方法加載某個類,然後實例化。 這樣分步的好處是顯而易見的。我們可以在調用class的靜態加載方法forName時獲得更好的靈活性,提供給了一種降耦的手段。
  最後用最簡單的描述來區分new關鍵字和newInstance()方法的區別: newInstance: 弱類型。低效率。只能調用無參構造。 new: 強類型。相對高效。能調用任何public構造。
  17、java連接池的使用
  18、數據庫的實例與用戶的概念
  一個Oracle實例(Oracle Instance)有一系列的後臺進程(Backguound Processes)和內存結構(Memory Structures)組成
  19、RMI的基類有哪些
  20、如何訪問不同的數據庫
  2010、10、18 湖南龍通科技有限公司
  1、Hibernate對象的幾種狀態,以及Session的不同操作對對象的影響
  臨時態:通過new實例化的對象,在Session中不存在
  持久化狀態:sava、savaOrUpdate、update可將臨時狀態轉爲持久化狀態 數據庫存在緩存中對應的數據
  遊離狀態:delete、clear、close 數據庫中不存在 Session中存在 2、static{ System.out.println("java靜態塊,啓動時就會加載"); } { System.out.println("初始化塊"); } 3、Dictionary實現的不是Collection接口,而是繼承了Object
  4、ZipInputStream類的對象可作爲InputStreamReader類構造方法的參數,但不能作爲FileInputStream類構造方法的參數
  5、HQL與SQL的區別 sql 面向數據庫表查詢
  hql 面向對象查詢
  hql : from 後面跟的 類名+類對象 where 後用 對象的屬性做條件
  sql: from 後面跟的是表名 where 後 用表中字段做條件
  6、Spring中Bean的作用域:singleton、prototype、request、session、global session
  、自定義bean裝配作用域(在spring 2.0中作用域是可以任意擴展的,你可以自定義作用域,甚至你也可以重新定義已有的作用域(但是你不能覆蓋singleton和prototype),spring的作用域由接口org.springframework.beans.factory.config.Scope來定義,自定義自己的作用域只要實現該接口即可)
  7、用SSH設計一個用戶登錄的案例,畫出類圖和時序圖
  8、Flex 9、抽象工廠
  2010、10、16 上海羣碩
  1、屋裏三盞燈,屋外三個開關,一個開關僅控制一盞燈,屋外看不到屋裏,只進一次屋,就知道哪個開關控制那盞燈 3個先開一盞開久點然後馬上關了開另一盞然後進去一個燈是亮的摸另外兩個都是滅的一個熱的一個燈涼的。
  4個先開兩盞過30秒關一個再過30秒關另一個然後開第3個然後進去一個亮的另外3個一個燙手一個熱的一個冷的
  2010、10、20 恆生電子
  1、java標識符 在Java語言中,標識符是以字母、下劃線(…)或美元符($)開頭,由字母、數字、下劃線(一)或美元符($)組成的字符串。標識符區分大小寫,長度.
  在Java語言中,標識符是以字母、下劃線(…)或美元符($)開頭,由字母、數字、下劃線(一)或美元符($)組成的字符串。標識符區分大小寫,長度沒有限制。除以上所列幾項之外,標識符中不能含有其他符號,當然也不允許插入空格。在程序中,標識符可用作變量名、方法名、接口名、類名等。 2、數據庫表間連接方式
  Table A
  aid adate
  1 a1
  2 a2
  3 a3
  TableB
  bid bdate
  1 b1
  2 b2
  4 b4
  兩個表a,b相連接,要取出id相同的字段
  select * from a inner join b on a.aid = b.bid這是僅取出匹配的數據.
  此時的取出的是:
  1 a1 b1
  2 a2 b2
  那麼left join 指: (就是left outer join,默認的就是outer)
  select * from a left join b on a.aid = b.bid
  首先取出a表中所有數據,然後再加上與a,b匹配的的數據
  此時的取出的是:
  1 a1 b1
  2 a2 b2
  3 a3 空字符
  同樣的也有right join (就是right outer join,默認的就是outer)
  指的是首先取出b表中所有數據,然後再加上與a,b匹配的的數據
  此時的取出的是:
  1 a1 b1
  交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
  外連接分爲左外連接(LEFT OUTER JOIN或LEFT JOIN)、右外連接(RIGHT OUTER JOIN或RIGHT JOIN)和全外連接(FULL OUTER JOIN或FULL JOIN)三種。與內連接不同的是,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數據行。
  交叉連接(CROSS JOIN)沒有WHERE 子句,它返回連接表中所有數據行的笛卡爾積,其結果集合中的數據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
  3、class A{
  A(String string){
  System.out.println("HS");
  }
  }
  class B extends A{
  B(){
  System.out.println("Hello");
  }
  }
  class SubTest{
  public static void main(String[]args){
  B b = new B();
  }
  }
  這道題考察輸出,實際編譯出錯,有這個選項!父類沒有默認的構造函數,子類會編譯通不過
  4、若某線性表中最常用的操作是在最後一個元素之後插入一個元素和刪除第一個元素,則採用()存儲方式最節省運算時間。
  (A) 單鏈表 (B) 僅有頭指針的單循環鏈表
  (C) 雙鏈表 (D)僅有尾指針的單循環鏈表
  5、索引、增加列(長度、非空、類型)
  數據查詢 select
  數據定義 create drop alter
  數據操縱 insert update delete
  數據控制 grant revoke
  2010、10、25 拓維
  1、class MyTest extends Test{
  int count;
  public MyTest(int cnt,int num){
  super(num);
  count = cnt;
  }
  //插入代碼塊
  }
  public class Test{
  int number;
  public Test(int i){
  number = i;
  }
  } 答案:C
  A、MyTest(){}
  B、MyTest(int cnt){count = cnt;}
  C、MyTest(int cnt){this(cnt,cnt);}
  D、MyTest(int cnt){super(cnt);this(cnt,0);}
  2、UNIX是著名的分時系統
  3、子類可以繼承父類的非私有方法和狀態
  4、Java語言中,複雜併發管理的機制是:多線程
  5、接口是由常量和抽象方法組成的特殊類
  6、URL URL由兩個主要的部分構成:協議(Protoco1)和目的地(Destination)。 "協議"部分告訴我們自己面對的是何種類型的Internet資源。 web中最常見的協議是http,它表示從Web中取回的是HTML文檔。其他協議還有gopher,ftp和telnet等。 目的地可以是某個文件名、目錄名或者某臺計算機的名稱。例如。這樣的一個URL能讓瀏覽器知道HTML文檔的正確位置以及文件名是什麼。假如URL是ftp://ftp.netscape.com/,瀏覽器就知道自己該登錄進入一個FTP站點,這個站點位於名爲
  2、int a =10,b=20,c=11,d=17; intK = a>b?a:c>d?d:ba+c?d:b;(這後面整個都是一個表達式) 3、以下定義的類,可以包外繼承的有:
  a. public final Class One
  b. class Two
  c. protected Class Three
  d. Public Class Four
  4、int i= 5/0; 編譯沒錯,運行有錯
  5、public abstract class A{
  public abstract void operation_1();
  public void operation_2();
  }
  能符合以下類圖的選項有:A B C E a.publicclass A_1 extends A{ publicvoid operation_1(){} } b.publicabstractclass A_2 extends A{ publicvoid operation_1(){} } c.publicabstractclass A_3 extends A{ } d.publicclass A_4 extends A{ } e.publicclass A_5 extends A{ publicvoid operation_1(){} publicvoid operation_2(){} } f.publicclassA_6{ private A a ; } 6、 String[] arr1 ={"a","b","1","c","b"}; List lst1 = new ArrayList(); lst1.add("d"); Collections.addAll(lst1,arr1); System.out.println(lst1); Set set1 = new HashSet(); set1.add("d"); Collections.addAll(set1, arr1); System.out.println(set1); 運行結果: [d, a, b, 1, c, b] [d, a, c, b, 1] 7、Short a = new Short(45); 編譯有錯 8、int[] arr = {1,3,3,2,8}; String str = ""; inti=0; publicvoid doIt(){ for(;iarr[i+1]){ str=arr[i]+arr[i+1]+str; break; } elseif(arr[i]truncate>delete
  3、視圖中的select可以存在order by、group by
  4、創建只讀視圖:with read only
  5、to_date('05-20-2009 11:56:56','MM-DD-YYYY HH24:MI:SS')
  6、修改列類型,修改列值
  update sala set salary=+90000
  altertable sala modify job_cat number(
  7、oracle中having關鍵字:通過group by進行分組後,然後篩選出滿足having子句條件的組
  8、多線程
  在一個程序中,這些獨立運行的程序片段叫作線程,利用它進行編程的概念叫作"多線程處理"。多線程處理的一個常見例子就是用戶界面。利用線程,用戶可按下一個按鈕,程序會立即作出反應,而不是等待整個程序執行完了才進行響應。
  在計算機編程中,一個基本的概念就是同時對多個任務加以控制。許多程序設計問題都要求程序能夠停下手頭的工作,改爲處理其他一些問題,再返回主進程。可以通過多種途徑達到這個目的。
  爲什麼使用多線程:
  線程是爲了能同步完成完成多項任務,而不是爲了提高運行效率,是爲了提高資源使用率來提高系統的效率,線程是在同一時間需要完成多項任務的時候實現的。 線程的好處:.
  使用線程可以把佔據長時間的程序中的任務放到後臺去處理 .用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度
  .程序的運行速度可能加快 .在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下可以釋放一些珍貴的資源如內存佔用等等。
  線程的缺點:爭用條件、死鎖、活動鎖、資源耗盡
  9、協議
  網絡的七層模型:應用層、表示層、會話層、傳輸層、網絡層、數據鏈路層、物理層
  ppp(公私合作關係,public-private partnership):數據鏈路層
  ICMP(Internet控制信息協議):網絡層
  Http:應用層
  2010、11、5 廣州金鵬
  1、數據流圖是需求分析階段的成果
  2、設計一個包含用戶、角色、權限和用戶組數據庫表結構,並畫出它們之間的關係圖
  1 一個用戶只屬於一個用戶組
  2 一個角色包含多個權限,
  3 一個用戶自身(非繼承)可以有多個角色,也可以有多個權限
  4 一個用戶組可以有多個角色,也可以有多個權限
  5 一個權限也可以屬於多個角色。
  6 一個用戶的角色和權限來自兩部分,一部分繼承於所有父用戶組的角色和權限,另一部分來自特別爲其分配的角色和權限
  7 一個用戶組可以排除(exclude)一個角色, 而一旦在其子用戶組或者在某個用戶身上加入(include)這個角色, 那這個用戶或者用戶組將重拾這個角色
  8 一個用戶或用戶組可以拒絕(disallow)一個權限, 一旦拒絕以後, 不管在什麼地方再允許(allow)這個權限都於事無補
  9 管理員可以做任何事情, 不受任何約束
  3、unix,輸入/輸出設備看作普通文件
  4、依賴
  關聯
  泛化
  聚集
  共享聚集:部分可以參加多個整體,菱形爲空
  組合聚集:整體不存在,那麼部分也不存在,菱形爲黑色實體
  5、測試
  黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序接口進行測試,它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數據而產生正確的輸出信息。黑盒測試着眼於程序外部結構,不考慮內部邏輯結構,主要針對軟件界面和軟件功能進行測試。
  白盒測試也稱結構測試或邏輯驅動測試,它是按照程序內部的結構測試程序,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程序中的每條通路是否都能按預定要求正確工作。這一方法是把測試對象看作一個打開的盒子,測試人員依據程序內部邏輯結構相關信息,設計或選擇測試用例,對程序所有邏輯路徑進行測試,通過在不同點檢查程序的狀態,確定實際的狀態是否與預期的狀態一致。
  邏輯覆蓋:
  1、語句覆蓋:設計若干個測試用例,運行被測程序,使得每一條可執行語句至少執行一次
  2、判定覆蓋:設計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少執行經歷一次
  3、條件覆蓋:設計若干個測試用例,運行被測程序,使得程序中每個判斷的每個條件的可能取值至少執行一次
  4、判定-條件覆蓋:設計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執行一次,同時每個判斷本身的所有可能判斷結果至少執行一次
  5、條件組合覆蓋:設計足夠的測試用例,運行被測程序,使得每個判斷的所有可能的條件取值組合至少執行一次
  6、路徑覆蓋:設計足夠多的測試用例,覆蓋程序中所有可能的路徑
  6、線程幾種狀態的轉換
  2010、11、6 湖南科創
  1、靜態變量與實例變量的區別 類的成員變量有兩種:一種是被static關鍵字修飾的變量,叫類變量或靜態變量,一種是沒有被static修飾的,叫做實例變量
  靜態變量和實例變量的區別在於:
  類靜態變量在內存中只有一個,java虛擬機在加載類的過程中爲靜態變量分配內存,靜態變量位於方法區,被類的所有實例共享,靜態變量可以通過類名直接訪問。靜態變量的生命週期取決於類的生命週期,當類被加載的時候,靜態變量被創建並分配內存空間,當類被卸載時,靜態變量被摧毀,並釋放所佔有的內存。
  類的每一個實例都有相應的實例變量,每創建一個類的實例,java虛擬機爲實例變量分配一次內存,實例變量位於堆區中,實例變量的生命週期取決於實例的生命週期,當創建實例時,爲實例變量背創建,並分配內存,當實例被銷燬時,實例 變量被銷燬,並釋放所佔有的內存空間。
  假如成員變量時引用變量,該成員變量結束生命週期時,並不意味着它所引用對象也結束生命週期。變量的生命週期和對象的生命週期是不同的概念。 2、java的23中設計模式
  Factory(工廠模式)、Builder(建造模式)、Factory Method(工廠方法模式)、Prototype(原始模型模式)、Singleton(單例模式)、Fa??ade(門面模式)、Adapter(適配器模式)、Bridge(橋樑模式)、Composite(合成模式)、Decorator(裝飾模式)、Flyweight(享元模式)、Proxy(代理模式)、Command(命令模式)、Interpreter(解釋器模式)、Visitor(訪問者模式)、Iterator(迭代子模式)、Mediator(調停者模式)、Memento(備忘錄模式)、Observer(觀察者模式)、State(狀態模式)、Strategy(策略模式)、Template Method(模板方法模式)、Chain of Responsibility(責任鏈模式)
  3、軟件生存週期模型
  瀑布模型:也稱線性順序模型或軟件生存週期模型。瀑布模型遵循軟件生存週期的劃分,明確規定各個階段的任務,各個階段的工作自上而下順序展開,如同瀑布流水,逐級下落。特徵:階段間的順序性和依賴性;推遲實現的觀點;質量保證的觀點。缺點:缺乏靈活性,無法解決軟件需求不明確或不準確的問題
  快速原型模型:快速原型是快速建立起來的可以在計算機上運行的程序,他能完成的功能往往是最終產品能完成功能的一個子集。快速原型的關鍵是在於能儘可能"快速"地構造原型,一旦確定了用戶的真正需求,所構造的原型將被丟棄,快速原型模式不符合主流的發展。
  增量模型:是瀑布模型的順序特性與快速原型法的迭代特徵相結合的產物。使用增量模型是,第一個增量構件往往實現軟件的基本需求,提供最核心的功能。缺點:各個構件的併入會產生一定的衝突;容易出現邊做邊改的方式,從而使軟件過程控制失去整體性
  螺旋模型:是將瀑布模型和原型模型結合起來,並且加入兩種模型均忽略了的風險分析,彌補了兩者的不足。分爲四個部分:制定計劃、風險分析、實施工程、客戶評估。缺點:客戶不能接受這中分析方法;進行項目風險分析,會降低項目利潤。
  4、編碼的轉換
  String str = new String(strInput.getBytes("ISO8859_1"),"GBK");
  5、js中的正則表達式
  匹配輸入的內容不爲空格:txtName.replace(/(^\s*)|(\s*$)/,"")==""
  驗證郵箱的格式:var p2 = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
  if(!p2.exec(email)) {alert('郵箱格式不對!'); return false;}
  6、JDBC訪問數據庫的一個基本流程
  ①加載驅動 Class.forName("oracle.jdbc.driver.OrcaleDriver")
  ②使用DriverManager類,創建連接對象
  Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@主機IP:端口號:服務器名",用戶,口令)
  ③創建query語句,通過連接對象獲取PrepareStatement,執行query語句
  ④處理結果
  ⑤釋放資源(關閉連接)
  7、Struts是如何實現MVC,它的工作流程是怎樣的
  Model是由Action(應該屬於c)和ActionForm等構成。Action對象封裝了具體的處理邏輯,調用業務邏輯模塊,可以用JavaBean和EJB等組件技術來處理數據庫的訪問,並且把響應提交到合適的View組件中。
  View部分是通過JSP技術實現的。Struts還提供了自定義的標記庫,通過使用這些自定義標記創建的JSP表單,可以實現和Model部分中的ActionForm的映射,完成對用戶數據的封裝
  Controller功能由ActionServlet和ActionMapping對象構成,核心是ActionServlet,它用來接受客戶端的請求。ActionServlet包括一組基於配置的ActionMapping對象,每個ActionMapping對象實現了一個請求到一個具體的Model部分中Action處理器對象之間的映射。
  對於採用Struts框架的Web應用,在Web應用時就會啓動加載並初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把他們存放到各種配置對象中,例如ActionServlet接收到一個客戶請求時,將執行如下流程.
  1).檢索和用戶請求匹配的ActionMapping實例,如果不存在,就返回用戶請求路徑無效的信息.
  2).如果ActionForm實例不存在,就創建一個ActionFrom對象,把客戶提交的表單數據保存到ActionForm對象中.
  3).根據配置信息決定是否需要表單驗證,如果需要就調用ActionForm的validate()方法.
  4).如果ActionForm的對象返回null或返回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功.
  5).ActionServlet根據ActionMapping實例包含的映射信息決定將轉發給哪個Action.如果相應的Action實例不存在,就先創建這個實例,然後調用Action的execute()方法.
  6).Action的execute()方法返回一個ActionForwd對象,ActionServlet再把客戶請求轉發給ActionForward對象指向的JSP組件.
  7).ActionFoward對象指向的JSP組件生成動態網頁,返回給客戶.
  對於以上流程的(4),如果ActionForm的validate()方法返回一個包含一個或多哥ActionMessage的ActionErrors對象,就表示表單驗證失敗,此時ActionServlet將直接把請求轉發給包含客戶提交表單的JSP組件.在這種情況下,不會在創建Action對象並調用Action的execute()方法.
  8、SSH2的優點
  ①開發效率:j2ee採用分層架構,這可以提高開發效率
  ②需求的變更:在項目的實施過程中,需求的變更是在所難免的,j2ee採用優秀的解耦合框架,在優秀的分層架構裏,控制層依賴於業務邏輯層,但絕不與任何具體的業務邏輯組件耦合,只與接口耦合
  9、==與equals的區別
  ==比較的是==兩邊引用數據類型的對象在內存中的地址是不是相同,如何相同表示是同一對象,否則不是同一對象;而equals比較是對象的類型和值是否都相同,如何都相同則返回true
  10、java本身性能的優化
  For()循環外層循環要少,內層循環可以多
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章