天天看點

ssh面試題

ssh面試題

Hibernate中的update()和saveOrUpdate()的差別.  

saveOrUpdate()做下面的事:  

如果對象已經在本session中持久化了,不做任何事  

如果另一個與本session關聯的對象擁有相同的持久化辨別(identifier),抛出一個異常  如果對象沒有持久化辨別(identifier)屬性,對其調用save()  

如果對象的持久辨別(identifier)表明其是一個新執行個體化的對象,對其調用save()  如果對象是附帶版本資訊的(通過 <version>或 <timestamp>) 并且版本屬性的值表明其是一個新執行個體化的對象,save()它。 否則update() 這個對象

Spring對多種ORM架構提供了很好的支援,簡單描述在Spring中使用Hibernate的方法,并結合事務管理。  

getHiberanteTemplate裡面提供了save,update,delete,find等方法。  

簡單說一個:如果配置了聲明式事務,當執行getHibernateTemplate的各種方法的時候,事務會 

自動被加載  

如果沒有配置事務,那麼以上操作不會真正的被同步到資料庫,除非配置了hibernate的 autocommit=true 

1.  BeanFactory的作用是什麼?   [中]   

BeanFactory是配置、建立、管理bean的容器,有時候也稱為bean上下文。Bean與bean的依賴關系,也是由BeanFactory負責維護的。   

2.  bean在spring的容器中兩種基本行為是什麼? [中]   

Singleton:單态   

Non-singleton或prototype:原型   

3.  spring配置檔案中的ref元素的作用是什麼?它的兩個基本屬性是什麼?  [中]   

用于指定屬性值為spring容器中的其它bean.兩個基本屬性是bean和local   

4.  什麼是DWR?它有哪些功能?  [中]   

DWR(Direct Web Remoting)是一個WEB遠端調用架構.   

可以在用戶端利用JavaScript直接調用服務端的Java方法并傳回值給JavaScript   

DWR根據Java類來動态生成JavaScrip代碼.   

支援Dom Trees,支援Spring,支援commons-logging   

5.  Ajax的工作原理 ? [難]   

在會話的開始,浏覽器加載Ajax引擎   

請求動作通過JavaScript調用Ajax引擎來代替.    

引擎負責繪制使用者界面以及與伺服器端通訊。   

Ajax引擎采用異步互動過程--不用等待伺服器的通訊。   

6.  XMLHttpRequest對象是什麼,它有哪些常用方法? [難]      

一個 JavaScript 對象。是Ajax 的核心。   

該對象的方法和屬性。   

    open():建立到伺服器的新請求。    

    send():向伺服器發送請求。    

    abort():退出目前請求。    

    readyState:提供目前 HTML 的就緒狀态。    

    responseText:伺服器傳回的請求響應文本。.   

7.  XMLHttpRequest有哪些屬性, 它的值分代表什麼?[ 中]   

8.  什麼是Ajax?  [易]   

AJAX(Asynchronous JavaScript and XML),它不是一門新的語言或技術,而是多種技術的綜合,包括:   

Javascript   

XHTML   

CSS   

DOM   

XML   

XSTL   

XMLHttpRequest   

9.  同步與異步的差別? [ 難]   

普通B/S模式(同步)AJAX技術(異步)   

同步:送出請求->等待伺服器處理->處理完畢傳回 這個期間用戶端浏覽器不能幹任何事,而異步則是 請求通過事件觸發->伺服器處理->處理完畢   

同步是阻塞模式,異步是非阻塞模式。     

同步(發送方發出資料後,等接收方發回) 異步(發送方發出資料後,不等接收方發回響應)   

10. Struts+Hibernate+Spring開發模式中Hibernate扮演的角色  [中]   

  答:Hibernate扮演的是資料持久層 它的作用是實作持久化對象和資料庫表   

之間的映射,形成持久化對象和資料庫表中資料的一個轉換平台   

11. 什麼是Hibernate 的抓取政策  [難]   

  抓取政策是指當應用程式需要利用關聯關系進行對象擷取的時候。   

12. 何為容器  [中]   

  容器就是符合某種規範的能夠提供一系列服務的管理器。   

13. Spring實作了那幾種模式  [中]   

答: 工廠模式 和 單例模式   

14 :Hibernate實體對象生命周期的三種狀态  [難]   

答 Transient(瞬态) ,persistent(持久态)和Detached(遊曆态)   

15: HQL查詢參數的處理方法  [中]   

答:直接将參數拼寫為HQL語句   

通過參數名稱來辨別參數   

16. Hibernate實體之間的關聯關系的三種形式  [中]   

   答  一對一關聯   

       一對多關聯   

       多對多關聯   

17.  Hibernate具用的三種檢索方式  [難]   

答:HQL檢索方式   

    QBC檢索方式   

    SQL檢索方式   

18. spring 中<Bean>的depends-on屬性是什麼  [中]   

Depends-on用于目前Bean初始化之前顯示的強制一個或多個bean被初始化   

19.  spring 中的BeanWrapper類是什麼  [難]   

BeanWrapper類是一個對JavaBean進行各種操作的工具類   

BeanWrapper本身是一個接口BeanWrapperImpl實作了BeanWrapper   

20 . <set>元素有一個cascade屬性,如果希望Hibernate級聯儲存集合中的對象,casecade屬性應該取什麼值?  [難]   

   答:save-update   

21.  Hibernate中session什麼時候是遊離态  [中]   

答:session.close();方法後    

22. Hibernate中映射檔案<hibernate-mapping> inverse屬性和cascade屬性的差別  [中]   

   答:inverse屬性隻存在于集合标記的元素中集合元素包括<set/>,<map/>,<list/>,<array/>,<bag/>   

  Inverse屬性的作用是是否将對集合對象的修改反射到資料庫中 inverse=”false”時修改反射到資料庫中 inverse=”true” 時修改不反射到資料庫中   

  Cascade屬性的作用是描述關聯對象進行操作時的級聯特性,是以隻有涉及到關系的元素才有cascade屬性   

23. : Hibernate中Session對象的load()方法和get()方法的差別(請列舉出兩點)[難]   

答:①記錄不存在時 get()方法會傳回空(null),而load()方法将會抛出一個HibernateException異常 ② load()方法查詢資料時會先找Hibernate的内部緩存和二級緩   

存中的現有資料,get()方法在内部緩存中沒有打到相對應的資料時裝直接執行SQL語句   

進行查詢   

24. : Hibernate中HQL屬于什麼語言  [易]   

  答:HQL是面向對象的查詢語言,它可以查詢以對象形式存在的資料。   

25.  Hibernate簡介以及主要功能  [中]   

  答:Hibernate是采用ORM模式實作資料持久層的一個優秀的JAVA元件,它提供了   

強大,高效的将JAVA對象進行持久化操作的服務   

26. 簡述Hibernate的優點 [難]   

 答:開源和免費的License,我可以在需要的時候研究源代碼,改寫源代碼,進行功能的定制。輕量級封裝,避免引入過多複雜的問題,調試容易,也減輕程式員的負擔。    

具有可擴充性,API開放,當本身功能不夠用的時候,可以自己編碼進行擴充。   

27. 怎樣建構SessionFactory  [難]   

  答: Hibernate的SessionFactory接口提供Session類的執行個體,Session類用于完成對資料庫的操作。   

由于SessionFactory執行個體是線程安全的(而Session執行個體不是線程安全的),是以每個操作都可以共用同一個SessionFactory來擷取Session。Hibernate配置檔案分為兩種格式,一種是xml格式的配置檔案,另一種是Java屬性檔案格式的配置檔案   

28. :從XML檔案讀取配置資訊建構SessionFactory的具體步驟如下。  [難]   

(1)建立一個Configuration對象,并通過該對象的configura()方法加載Hibernate配置檔案,代碼如下。   

Configuration config = new Configuration().configure();   

configura()方法:用于告訴Hibernate加載hibernate.cfg.xml檔案。Configuration在執行個體化時預設加載classpath中的hibernate.cfg.xml,當然也可以加載名稱不是hibernate.cfg.xml的配置檔案,例如wghhibernate.cfg.xml,可以通過以下代碼實作。   

Configuration config = new Configuration().configure("wghhibernate.cfg.xml");   

(2)完成配置檔案和映射檔案的加載後,将得到一個包括所有Hibernate運作期參數的Configuration執行個體,通過Configuration執行個體的buildSessionFactory()方法可以建構一個惟一的SessionFactory,代碼如下:   

SessionFactory sessionFactory = config.buildSessionFactory();   

建構SessionFactory要放在靜态代碼塊中,因為它隻在該類被加載時執行一次。   

29. 寫出使用構造方法進行注入的關鍵代碼  [難]   

<bean id=”constructBean” class=”com.huang.ConstructBean”>   

 <constructor-arg><ref  bean=”bean_1”/></ constructor-arg >   

<constructor-arg><ref  bean=”bean_2”/></ constructor-arg >   

<constructor-arg><ref  bean=”bean_3”/></ constructor-arg >   

</bean>   

30. 什麼是IOC?  [難]   

不建立對象,但是描述建立它們的方式。在代碼中不直接與對象和服務連接配接,但在配置檔案中描述哪一個元件需要哪一項服務。容器(在Spring 架構中是 IOC 容器) 負責将這些聯系在一起。    

就是由容器控制程式之間的關系,而非傳統實作中,由程式代碼直接操控,控制權由應用代碼中轉到了外部容器,控制權的轉移,就是所謂的反轉。   

31. 程式設計題: 寫一個Singleton出來。  [難]   

Singleton模式主要作用是保證在Java應用程式中,一個類Class隻有一個執行個體存在。   

第一種形式: 定義一個類,它的構造函數為private的,它有一個static的private的該類變量,在類初始化時執行個體話,通過一個public的getInstance方法擷取對它的引用,繼而調用其中的方法。   

public class Singleton {   

private Singleton(){}   

      private static Singleton instance = new Singleton();   

      public static Singleton getInstance() {   

        return instance;      

      }    

    }    

    第二種形式:    

public class Singleton {    

  private static Singleton instance = null;   

  public static synchronized Singleton getInstance() {   

  if (instance==null)   

    instance=new Singleton();   

        return instance;   }    

}   

    String tempStr = "";   

    try {   

      tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");   

      tempStr = tempStr.trim();   

    }   

    catch (Exception e) {   

      System.err.println(e.getMessage());   

    return tempStr;   

  }   

32. J2EE是技術還是平台還是架構?  [中]   

    J2EE本身是一個标準,一個為企業分布式應用的開發提供的标準平台。   

    J2EE也是一個架構,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術。   

33. 我們在web應用開發過程中經常遇到輸出某種編碼的字元,如iso8859-1等,如何輸出一個某種編碼的字元串?  [難]   

  Public String translate (String str) {   

34.如何使用靜态工廠方法來建立Bean的執行個體  [易]   

   <bean id=”staticFactoryBean” class=”com.huang.StaticFactoryBean”   

factory-method=”靜态方法名”/>   

相當于: StaticFactoryBean staticFactoryBean=StaticFactoryBean.靜态方法名   

使用執行個體化的工廠方法來建立Bean的執行個體   

   <!—注意此時bean的class屬性為空-->   

  <bean id=”dynamicFactory”class=”com.huang.DynamicFactory”/>   

  <bean id=”dynamiceFactoryBean” factory-bean=”dynamicFactory”   

   Factory-method=”方法名”/>   

相當于: DynamicFactory dynamicFactory=new DynamicFactory();   

      DynamiceFactoryBean dynamiceFactoryBean=dynamicFactory.方法名   

35.  從Java屬性檔案讀取配置資訊建構SessionFactory的具體步驟如下:  [難]   

   (1)建立一個Configuration對象,此時Hibernate會預設加載classpath中的配置檔案hibernate.properties,代碼如下。   

Configuration config = new Configuration();   

(2)由于在配置檔案中缺少相應的配置映射檔案的資訊,是以此處需要通過編碼方式加載,這可以通過Configuration對象的addClass()方法實作,具體代碼如下。   

config.addClass(BranchForm.class);   

addClass()方法用于加載實體類。   

(3)完成配置檔案和映射檔案的加載後,将得到一個包括所有Hibernate運作期參數的Configuration執行個體,通過Configuration執行個體的buildSessionFactory()方法可以建構一個惟一的SessionFactory,代碼如下。   

36. spring架構的7個子產品是什麼?   [ 難]   

答: (1) spring  AOP  --面象切面程式設計   

   (2)spring  DAO  --資料通路對象   

   (3)spring ORM   --對象關系影射   

(4)spring Contect  -- 上下文配置,向Spring架構提供上下文資訊   

(5)spring WEB  - -WEB上下文子產品   

(6)\spring WEB-MVC  --實作了MVC   

(7)spring CORE –核心容器提供Spring架構基本功能   

37. 什麼是AOP 請祥述  [中]   

  答: 是面向切面程式設計    

     AOP 把軟體系統分為兩個部分:核心關注點和橫切關注點。所謂的核心關注點,是業務處理的主要流程,也就是說這個解決方案要做的事。所謂橫切關注點,是與核心業務無關的部分,它把常發生在核心關注點的多處,而各處基本相似,如日志,事務,權限等 。   

38.  Hinbernate和EJB的差別  [中]   

 答:Hibernate可以用在任何JDBC使用的場合,例如Java應用程式的資料庫通路代碼,DAO接口的實作類,甚至可以是BMP裡面的通路資料庫的代碼。從這個意義上來說,Hibernate和EB不是一個範疇的東西,也不存在非此即彼的關系。   

39.  一般情況下,關系資料模型與對象模型之間有哪些比對關系 [難]   

   答:表對應類   

記錄對應表的對象   

表的字段對應類的屬性   

40.  事務隔離級别是由誰實作的?  [難]   

 答:資料庫系統‘   

41. 什麼是IOC  [難]   

答:IOC 是控制反轉,實作了對象之間的依賴關系的轉移成而使程式的菘耦合   

42. 在Spring中給屬性有幾種指派方式 請祥叙   [難]   

  答:有四種 分别是   

(1)普通屬性指派    

(2)集合屬性指派   

(3)Properties指派   

(4)Map 屬性指派     

43.  在Spring說說Bean的alias元素和name屬性有什麼差別  [難]   

 答: <bean>元素name屬性可以一次為<bean>定義多個别名   

       例:<bean id=”beanName” name=”alias_1,alias_2”/>   

       <alias>元素一次隻能定義一個别名   

         例:<alias name=”beanName” alias=”toName”/>   

      注意: alias元素name屬性是bean執行個體名   

44. Bean 的作用域用幾種,請祥叙  [難]   

    答: 用5種    

分别是:    

1. singleton  IOC容器隻會建立一個Bean的唯一的執行個體   

2. prototype  IOC容器在每次請求該Bean的時候都建立一個新的執行個體   

3. request 在一次Http請求中 IOC容器會傳回該Bean的同一個執行個體,而對于不同的使用者請求,則會傳回不同的執行個體   

4. session 在一次Http請求Session 中 IOC容器會傳回該Bean的同一個執行個體,而對于不同的使用者Session,則會傳回不同的執行個體   

5. global session在一個全局Http請求Session 中   

45. 簡述什麼是ORM   [中]   

答:ORM的全稱是Object-Relational Mapping 翻譯成中文就是“對象-關系映射”   

ORM元件的主要功能就是實作實體域對象的持久化并封裝資料庫通路的細節   

   ORM本身并不是一個元件,它是具用某種功能的元件的總稱,也可以說是一種框   

架結構   

46.:struts中的幾個關鍵對象的作用(說說幾個關鍵對象的作用)  [中]   

 struts中的幾個關鍵對象:Action Global(設定語言靠它了) ModuleConfig(擷取mapping),   

47.Action的作用  [中]   

   Action的作用是接受使用者的請求,通過調用業務方法實作業務處理的功能。   

48. 在通常情況下軟體系統由表示層,業務層,持久層和資料庫層組成,Struts屬于哪一層? [難]   

   Struts屬于表示層元件,它的作用主要展現在以下幾個方面:   

1)     輸出使用者界面和接收使用者的輸入,實作與使用者的互動。   

2) 調用業務方法,完成業務處理,還要包括處理後的顯示工作。   

48:Struts标簽庫由哪些元件組成?  [難]   

标簽庫是組合在一起的一組JSP自定義标簽。   

     标簽庫由以下元件組成:   

1) 标簽處理程式   

2) 标簽庫描述符(TLD)檔案   

3) 應用程式部署描述符(web.xml)檔案   

4) JSP頁面中标簽庫的聲明   

49. 用<bean:write>讀出一個URL和一個名稱,    [難]    

  用<html:link>的話怎麼組合起來。    

  即要達到這樣的效果      

  <a   href="<bean:write   name="data"   property="url">">      

           <bean:write   name="data"   property="tilte">      

  </a>   

<html:link   page="<bean:write   name="data"   property="url">">      

      <bean:write   name="data"   property="title"/>      

  </html:link>     會報出屬性data無值的錯誤!(page="<bean:write   name="data"   property="url">"中的data無值。)     

50:怎樣才能配置<html:button>的資源檔案? [難]   

   在資源檔案 ApplicationResourses.properties 中加入  label.login=login      

  在jsp頁面寫:      

  <html:button   name="btn_login"><bean:message   key="label.login"/></html:button>      

  這樣顯示頁面時,button上就會顯示label.login的對應内容“login”   

51. 說說struts架構,的方法的工作原理或流程   [易]   

  答: 對于采用Struts架構的web應用, 在web應用啟動時會加載并初始化ActionServlet,ActionServlet從struts-config.xml中讀取配置資訊,   

 把它們存放到各種配置對象中,例如把Action的映射資訊存放在ActionMapping對象中。   

 當ActionServlet接收到客戶請求時,執行以下流程:      

    1.檢索和使用者請求比對的ActionMapping執行個體,如果不存在,就傳回使用者請求路徑無效資訊;        

     2.如果ActionForm執行個體不存在,就建立一個ActionForm對象并在其中儲存客戶送出的表單内容;        

     3.根據配置資訊決定是否調用ActionForm的validate()方法;      

     4.如果ActionForm的validate()方法傳回null或傳回一個不包含ActionMessage的ActionErrors對象,就表示表單驗證成功;      

     5.ActionServlet根據ActionMapping執行個體包含的映射資訊将請求轉發給Action(如果Action執行個體不存在,就先建立Action執行個體),然後調用Action的excute()方法;        

   6.Action的excute()方法傳回一個ActionForward對象,ActionServlet再把客戶請求轉發給ActionForward對象指向的JSP元件;    

7.ActionForward對象指向的JSP元件生成動态網頁,傳回給客戶。    

52: strust的Action是不是線程安全的? [難]   

    答:線程安全就是你可以在多線程環境下使用它,而不需要你來對它進行特殊的處理。action都是繼承至servlet的,由于servlet就是線程不安全的(指多個線程共享一個servlet對象,是以),是以不要再action中定義類變量和執行個體變量,否則其他線程改變了這些值,可本線程還在使用   

53 :MVC,分析一下struts是如何實作MVC的 [難]   

從MVC角度來看看struts的體系結構(Model 2)與工作原理:   

  1)模型(Model)   

  在Struts的體系結構中,模型分為兩個部分:系統的内部狀态和可以改變狀态的操作(事務邏輯)。内部狀态通常由一組ActinForm Bean表示。根據設計或應用程式複雜度的不同,這些Bean可以是自包含的并具有持續的狀态,或隻在需要時才獲得資料(從某個資料庫)。大型應用程式通常在方法内部封裝事務邏輯(操作),這些方法可以被擁有狀态資訊的bean調用。比如購物車bean,它擁有使用者購買商品的資訊,可能還有checkOut()方法用來檢查使用者的信用卡,并向倉庫發定貨資訊。 小型程式中,操作可能會被内嵌在Action類,它是struts架構中控制器角色的一部分。當邏輯簡單時這個方法很适合。 建議使用者将事務邏輯(要做什麼)與Action類所扮演的角色(決定做什麼)分開。   

2)視圖(View)   

  視圖主要由JSP建立,struts包含擴充自定義标簽庫(TagLib),可以簡化建立完全國際化使用者界面的過程。目前的标簽庫包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。   

 3)控制器(Controller)   

  在struts中,基本的控制器元件是ActionServlet類中的執行個體servelt,實際使用的servlet在配置檔案中由一組映射(由ActionMapping類進行描述)進行定義。對于業務邏輯的操作則主要由Action、ActionMapping、ActionForward這幾個元件協調完成的,其中Action扮演了真正的業務邏輯的實作者,ActionMapping與ActionForward則指定了不同業務邏輯或流程的運作方向。struts-config.xml 檔案配置控制器。   

54  :簡述什麼是Struts  [中]   

 Struts隻是一個MVC架構(Framework),用于快速開發Java Web應用。Struts實作的重點在C(Controller),包括ActionServlet/RequestProcessor和我們定制的Action,也為V(View)提供了一系列定制标簽(Custom Tag)。但Struts幾乎沒有涉及M(Model),是以Struts可以采用JAVA實作的任何形式的商業邏輯。    

Spring是一個輕型容器(light-weight container),其核心是Bean工廠(Bean Factory),用以構造我們所需要的M(Model)。在此基礎之上,Spring提供了AOP(Aspect-Oriented Programming, 面向層面的程式設計)的實作,用它來提供非管理環境下申明方式的事務、安全等服務;對Bean工廠的擴充ApplicationContext更加友善我們實作J2EE的應用;DAO/ORM的實作友善我們進行資料庫的開發;Web MVC和Spring Web提供了Java Web應用的架構或與其他流行的Web架構進行內建。    

就是說可将兩者一起使用,達到将兩者自身的特點進行互補。   

55   :Struts有哪些主要功能:[難]   

1.包含一個controller servlet,能将使用者的請求發送到相應的Action對象。   

2. JSP自由tag庫,并且在controller servlet中提供關聯支援,幫助開發員建立互動式表單應用。   

3. 提供了一系列實用對象:XML處理、通過Java reflection APIs自動處理JavaBeans屬性、國際化的提示和消息。   

Struts項目的目标是為建立Java web應用提供一個開放源代碼的framework。Struts framework的核心是基于例如Java Servlets, JavaBeans, ResourceBundles, 和 XML,以及各種 Jakarta Commons包的标準技術的靈活的控制層。   

Struts提供了它自身的控制器元件,并整合了其他技術,以提供模型和視圖。對于模型,同大多數的第三方軟體包一樣,如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts能夠和标準資料連接配接技術相結合,如JDBC和EJB。對于視圖,Struts與JavaServer Pages協同工作,包含JSTL和JSF。   

56   :Stuts架構中控制器元件的類主要有哪些?  [難]   

ActionServlet ,   

RequestProcessor   

, Action,    

 ActionMapping,   

ActionForward   

41:Validator的組成與作用  [難]   

Validator架構主要包括以下幾個部分:   

1) 實作各種驗證規則的Java類   

2) 配置檔案   

3) 資源檔案   

4) JSP自定義标簽   

Validator元件可以很好地解決使用者輸入資料的驗證問題,但它并不是一個獨立運作的元件,它可以被嵌入到目前大部分的Web應用開發架構中。Validator元件的驗證方式有多種,既可以通過JavaScript腳本實作使用者輸入資料的頁面驗證,也可以實作在背景處理程式中的Java驗證   

57. ActionForm的作用?[難]   

  ActionForm屬于一種資料傳輸對象,聯系了前台頁面與背景的Action方法,實作了前台與背景之間的資料轉換和傳遞。它的作用主要展現在以下幾個方面:    

1) 在顯示頁面的時候用于完成頁面中各種控件的初始化工作。   

2) 在使用者送出請求的時候,ActionForm又代表了使用者所送出的資料,供Action以及後續的業務處理方法使用   

ActionForm還有另外一個作用就是對使用者送出資料的合法性進行驗證   

              Java  基礎就業題庫   

1.  類和對象的差別?    [易]   

類是對象的抽象,是模型概念,而對象是實實在在存在的事物,是現實中存在的實體   

2.  Java類庫中八個标準包分别是什麼?  [易]   

java.lang    提供常用的類、接口、一般異常、系統等程式設計語言的核心内容。    

java.util    包含日期、月曆、向量、堆棧等實用工具。    

java.io      包含輸入輸出流類、檔案類等與輸入輸出I/O有關的類。        

java.awt     包含視窗和螢幕元素類,事件處理接口等與圖形使用者界面有關的内容。       

java.applet  提供為編寫applet小程式所需要的類。    

java.text    提供與文本有關的類。    

java.net     包含url類等與網絡傳輸有關的東西。        

java.sql     提供與資料庫應用相關的類和接口。   

3.  接口和抽象類有什麼差別?    [中]   

接口是公開的,不能包含私有的方法或變量,而抽象類是可以有私有方法或私有變量的,    

實作接口的一定要實作接口裡定義的所有方法,而實作抽象類可以有選擇地重寫需要用到的方法,   

接口可以實作多重繼承,而一個類隻能繼承一個超類,但可以通過繼承多個接口實作多重繼承,   

接口還有辨別(裡面沒有任何方法,如Remote接口)和資料共享(裡面的變量全是常量)的作用.   

一般的應用裡,最頂級的是接口,然後是抽象類實作接口,最後才到具體類實作。   

4.  說說java中的記憶體配置設定?  [難]   

Java把記憶體分成兩種,一種叫做棧記憶體,一種叫做堆記憶體   

在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧記憶體中配置設定。當在一段代碼塊中定義一個變量時,java就在棧中為這個變量配置設定記憶體空間,當超過變量的作用域後,java會自動釋放掉為該變量配置設定的記憶體空間,該記憶體空間可以立刻被另作他用。    

堆記憶體用于存放由new建立的對象和數組。在堆中配置設定的記憶體,由java虛拟機自動垃圾回收器來管理。在堆中産生了一個數組或者對象後,還可以在棧中定義一個特殊的變量,這個變量的取值等于數組或者對象在堆記憶體中的首位址,在棧中的這個特殊的變量就變成了數組或者對象的引用變量,以後就可以在程式中使用棧記憶體中的引用變量來通路堆中的數組或者對象,引用變量相當于為數組或者對象起的一個别名,或者代号。    

引用變量是普通變量,定義時在棧中配置設定記憶體,引用變量在程式運作到作用域外釋放。而數組&對象本身在堆中配置設定,即使程式運作到使用new産生數組和對象的語句所在地代碼塊之外,數組和對象本身占用的堆記憶體也不會被釋放,數組和對象在沒有引用變量指向它的時候,才變成垃圾,不能再被使用,但是仍然占着記憶體,在随後的一個不确定的時間被垃圾回收器釋放掉。這個也是java比較占記憶體的主要原因。但是在寫程式的時候,可以人為的控制   

5.  Character類有哪些常用方法?  [難]   

charValue()    

傳回字元對象對應的值。    

digit(char, int)    

以指定基數傳回字元 ch 對應的數值。    

equals(Object)    

比較該對象和指定對象。    

forDigit(int, int)    

确定以指定基數指定的數對應的字元。    

getNumericValue(char)    

傳回此字元對應的 Unicode 的非負整型值。    

getType(char)    

傳回一個表示字元種類的值。    

hashCode()    

傳回此字元對應的哈希碼。    

isDefined(char)    

判定一個字元在 Unicode 中是否有定義。    

isDigit(char)    

判定指定字元是否為數字。    

isIdentifierIgnorable(char)    

判定指定字元在 Java 辨別符中或 Unicode 辨別符中是否應看作是一個可忽略字元。    

isISOControl(char)    

判定指定字元是否為 ISO 控制字元。    

isJavaIdentifierPart(char)    

判定指定字元是否為 Java 辨別符中除首字元外的字元。    

isJavaIdentifierStart(char)    

判定指定字元是否可作為 Java 辨別符的首字元。    

isJavaLetter(char)    

判定指定字元是否為 Java 字母,若是,它可作為 Java 語言中一個辨別符的首字元。 不推薦使用該方法。    

isJavaLetterOrDigit(char)    

判定指定字元是否為 Java 字母或數字,若是,它可作為 Java 語言中的一個辨別符除首字元外的字元。 不推薦使用該方法。    

isLetter(char)    

判定指定字元是否為字母。    

isLetterOrDigit(char)    

判定指定字元是否為字母或數字。    

isLowerCase(char)    

判定指定字元是否為小寫字元。    

isSpace(char)    

判定指定字元是否為 ISO-LATIN-1 空格。 不推薦使用該方法。    

isSpaceChar(char)    

判定指定字元是否為 Unicode 空白字元。    

isTitleCase(char)    

判定指定字元是否為标題字元。    

isUnicodeIdentifierPart(char)    

判定指定字元是否為 Unicode 辨別符中除首字元外的字元。    

isUnicodeIdentifierStart(char)    

判定指定字元是否可作為 Unicode 辨別符首字元。    

isUpperCase(char)    

判定指定字元是否為大寫字元。    

isWhitespace(char)    

據 Java 語言,判定指定字元是否為空格。    

toLowerCase(char)    

将給定字元映射為對應的小寫字元,若沒有對應的小寫字元,傳回此字元本身。    

toString()    

傳回表示此字元值的串對象。    

toTitleCase(char)    

将字元參數轉換為标題字元。    

toUpperCase(char)    

将字元參數轉換為大寫字元。    

5.Boolean類有哪些方法?   

booleanValue()    

傳回 Boolean 對象對應的布爾值。    

當且僅當參數非空,且是包含與此對象相同的布爾值的布爾對象時,傳回 true。    

getBoolean(String)    

當且僅當以參數命名的系統屬性存在,且等于 "true" 時,傳回為 true。    

傳回此布爾值對應的哈希碼。    

傳回表示目前布爾值的一個串對象。    

valueOf(String)    

傳回表示指定串的布爾值。   

6.  String s = new String("xyz");建立了幾個String Object?    [中]   

   兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象s。    

7.  String與StringBuffer有什麼差別?    [難]   

從表面看來String類隻用一個加号(+)便完成了字元串的拼接,而StringBuffer類卻要調用一個append()方法,是否實作起來更簡潔,更單純呢?其實不然,讓我們了解一下程式運作内部發生了哪些事情:    

經編譯後程式的bytecode(位元組碼)展示出了實質: 在用String類對象直接拼接時,JVM會建立一個臨時的StringBuffer類對象,并調用其append()方法完成字元串的拼接,這是因為String類是不可變的,拼接操作不得不使用StringBuffer類(并且--JVM會将"You are nice."和"I love you so much."建立為兩個新的String對象)。之後,再将這個臨時StringBuffer對象轉型為一個String,代價不菲!可見,在這一個簡單的一次拼接過程中,我們讓程式建立了四個對象:兩個待拼接的String,一個臨時StringBuffer,和最後将StringBuffer轉型成為的String--它當然不是最初的str了,這個引用的名稱沒變,但它指向了新的String對象。    

而如果直接使用StringBuffer類,程式将隻産生兩個對象:最初的StringBuffer和拼接時的String("I love you so much."),也不再需要建立臨時的StringBuffer類對象而後還得将其轉換回String對象。   

short s1 = 1; s1 = s1 + 1;有什麼錯?   

short s1 = 1; s1 = s1 + 1; (s1+1運算結果是int型,需要強制轉換類型)   

    short s1 = 1; s1 += 1;有什麼錯?    

short s1 = 1; s1 += 1;(可以正确編譯)    

8.  是否可以繼承String類?   [難]   

String類是final類故不可以繼承。   

9.  throw與throws有什麼差別?    [中]   

throws是用來聲明一個方法可能抛出的所有異常資訊   

throw則是指抛出的一個具體的異常類型。   

通常在一個方法(類)的聲明處通過throws聲明方法(類)可能抛出的異常資訊,而在方法(類)内部通過throw聲明一個具體的異常資訊。   

throws通常不用顯示的捕獲異常,可由系統自動将所有捕獲的異常資訊抛給上級方法;   

throw則需要使用者自己捕獲相關的異常,而後在對其進行相關包裝,最後在将包裝後的異常資訊抛出。   

throws語句   

throws用來标明一個成員函數可能抛出的各種"異常"。對大多數Exception子類來說,Java編譯器會強迫你聲明在一個成員函數中抛出的"異常"的類型。如果"異常"的類型是Error或RuntimeException,或它們的子類,這個規則不起作用,因為這copy;在程式 的正常部分中是不期待出現的。如果你想明确地抛出一個RuntimeException,你必須用throws語句來聲明它的類型。這就重新定義了成員函數的定義文法:type method-name(arg-list) throws exception-list { }下面是一段程式,它抛出了一個"異常", 但既沒有捕捉它,也沒有用throws來聲明。這在編譯時将不會通過。   

try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?   

會執行,在return前執行。   

10. 常見的runtime exception有哪些?。   [中]   

ArithmeticException,    

ArrayStoreException,    

BufferOverflowException,    

BufferUnderflowException,    

CannotRedoException, CannotUndoException,   

ClassCastException,   

CMMException,    

ConcurrentModificationException,   

DOMException,    

EmptyStackException, IllegalArgumentException,    

IllegalMonitorStateException,    

IllegalPathStateException,    

IllegalStateException,    

ImagingOpException, IndexOutOfBoundsException,    

MissingResourceException,    

NegativeArraySizeException,    

NoSuchElementException, NullPointerException,    

ProfileDataException,    

ProviderException,    

RasterFormatException,    

SecurityException,    

SystemException, UndeclaredThrowableException,    

UnmodifiableSetException,    

UnsupportedOperationException   

NullPointException   

11. 介紹JAVA中的Collection FrameWork(包括如何寫自己的資料結構)?    [難]   

答:Collection FrameWork如下:    

Collection    

├List    

│├LinkedList    

│├ArrayList    

│└Vector    

│ └Stack    

└Set    

Map    

├Hashtable    

├HashMap    

└WeakHashMap    

Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)    

Map提供key到value的映射    

12. ArrayList和Vector的差別,HashMap和Hashtable的差別  [難]   

答:就ArrayList與Vector主要從二方面來說.    

一.同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程式不安全的,不是同步的    

二.資料增長:當需要增長時,Vector 預設增長為原來一培,而ArrayList卻是原來的一半    

就HashMap與HashTable主要從三方面來說。   

一.曆史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實作    

二.同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程式不安全的,不是同步的    

三.值:隻有HashMap可以讓你将空值作為一個表的條目的key或value   

13. Math.round(11.5)等於多少? Math.round(-11.5)等於多少?    [難]   

Math.round(11.5)==12  

Math.round(-11.5)==-11  

round方法傳回與參數最接近的長整數.   

14. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?  [難]   

switch(expr1)中,expr1是一個整數表達式。應該是 int、 short、 char byte。   

long,string 都不能作用于swtich。   

15. GC是什麼? 為什麼要有GC?    [難]   

GC是垃圾收集的意思(Gabage Collection)   

Java提供的GC功能可以自動監測對象是否超過作用域進而達到自動回收記憶體的目的,   

Java語言沒有提供釋放已配置設定記憶體的顯示操作方法。   

16. 什麼叫方法重載   [中]   

方法重載就是一個同名方法,有多種不同的簽名    

說白了就是一個同名方法可以傳入不同個數或類型的參數    

之間可以互相調用   

17. 數組有沒有length()這個方法? String有沒有length()這個方法?  [中]   

數組沒有length()這個方法,有length的屬性。String有有length()這個方法   

18.   什麼是抽象類抽象類  [中]   

僅提供一個類型的部分實作。抽象類可以有執行個體變量,以及一個或多個構造函數。抽象類可以同時有抽象方法和具體方法。一個抽象類不會有執行個體,這些構造函數不能被用戶端調用來建立執行個體。一個抽象類的構造函數可以被其子類調用,進而使一個抽象類的所有子類都可以有一些共同的實作,而不同的子類可以在此基礎上有其自己的實作。   

19.  抽象類的用途  [中]   

1)  具體類不是用來繼承的。 Scott Meyers曾指出,隻要有可能,不要叢具體類繼承。2)  假設有2個具體類,類A和類B,類B是類A 的子類,那麼一個最簡單的修改方案是應當建立一個抽象類(或java接口)C,然後讓類A和類B成為抽象類C的子類。3)  抽象類應當擁有盡可能多的共同代碼。以提高代碼的複用率。4)  抽象類應當擁有盡可能少的資料。   

20  .java中接口有什麼用?   [難]   

java不允許多重繼承,也就是說一個子類隻能有一個父類,Son extends FatherA,FatherB 是錯誤的    

為了彌補這點不足,java允許實作多個接口,Son extends FatherA implements AnotherFatherA,AnotherFatherB是允許的    

接口中的方法沒有實體,就這一點而言就相當于abstact class,如:    

interface ainter{    

void dosth(int i);    

}    

ainter是一個接口,它僅僅聲明了一個方法dosth,而沒有具體實作它    

class aclass implements ainter    

{    

public void dosth(int i) {    

//在這裡你可以不作任何處理,但是必須實作方法體    

aclass實作了ainter這個接口,是以它必須實作ainter中的方法dosth   

21. 什麼叫方法重載  [易]   

22. 垃圾回收機制的原理?  [難]   

在JAVA中 ,JAVA VM 每隔一段時間就會檢視每一塊由NEW配置設定的記憶體空間,看指向它的有效引用是否存在,如果這個引用不存在,系統會自動将這塊空間歸入空閑記憶體區.這個過程被稱為 垃圾收集.   

23.. 什麼叫面向對象?   [中]   

面向對象是一種新興的程式設計方法,或者是一種新的程式設計規範(paradigm),其基本思想是使用對象、類、繼承、封裝、消息等基本概念來進行程式設計。從現實世界中客觀存在的事物(即對象)出發來構造軟體系統,并且在系統構造中盡可能運用人類的自然思維方式。開發一個軟體是為了解決某些問題,這些問題所涉及的業務範圍稱作該軟體的問題域。其應用領域不僅僅是軟體,還有計算機體系結構和人工智能等。   

24. 面向對象的涉及方法有哪些?   [中]   

 OOA-Object Oriented Analysis     面向對象的分析   

     

  OOD-Object Oriented Design      面向對象的設計   

OOI-Object Oriented Implementation  面向對象的實作   

25. jvm工作原理   [難]   

運作jvm 字元碼的工作是由解釋器來完成的。解釋執行過程分三步進行:   

代碼的裝入、代碼的校驗、和代碼的執行。   

裝入代碼的工作由“類裝載器class loader”完成。類裝載器負責裝入運   

行一個程式需要的所有代碼,這也包括程式代碼中的類所繼承的類和被調   

用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了   

通過符号引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他   

類。在本台計算機的所有類都在同一位址空間中,而所有從外部引進的類   

,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間   

獲得較高的運作效率,同時又保證它們與從外部引進的類不會互相影響。   

當裝入了運作程式需要的所有類後,解釋器便可确定整個可執行程式的内   

存布局。解釋器為符号引用與特定的位址空間建立對應關系及查詢表。通   

過在這一階段确定代碼的内布局,java很好地解決了由超類改變而使子類   

崩潰的問題,同時也防止了代碼的非法通路。   

随後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可以發現操作數棧   

益處、非法資料類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。   

java位元組碼的執行有兩種方式:   

1) 即時編譯方式:解釋器先将位元組編譯成機器碼,然後再執行該機器碼   

。   

2)解釋執行方式:解釋器通過每次解釋并執行一小段代碼來完成java位元組   

碼程式的所有操作。   

26. .java中輸入輸出流有哪些相關的類?  [難]   

Input和Output    

1. stream代表的是任何有能力産出資料的資料源,或是任何有能力接收資料的接收源。在Java的IO中,所有的stream(包括Input和Out stream)都包括兩種類型:    

1.1 以位元組為導向的stream    

以位元組為導向的stream,表示以位元組為機關從stream中讀取或往stream中寫入資訊。以位元組為導向的stream包括下面幾種類型:    

1) input stream:    

1) ByteArrayInputStream:把記憶體中的一個緩沖區作為InputStream使用    

2) StringBufferInputStream:把一個String對象作為InputStream    

3) FileInputStream:把一個檔案作為InputStream,實作對檔案的讀取操作    

4) PipedInputStream:實作了pipe的概念,主要線上程中使用    

5) SequenceInputStream:把多個InputStream合并為一個InputStream    

2) Out stream    

1) ByteArrayOutputStream:把資訊存入記憶體中的一個緩沖區中    

2) FileOutputStream:把資訊存入檔案中    

3) PipedOutputStream:實作了pipe的概念,主要線上程中使用    

4) SequenceOutputStream:把多個OutStream合并為一個OutStream    

1.2 以Unicode字元為導向的stream    

以Unicode字元為導向的stream,表示以Unicode字元為機關從stream中讀取或往stream中寫入資訊。以Unicode字元為導向的stream包括下面幾種類型:    

1) Input Stream    

1) CharArrayReader:與ByteArrayInputStream對應    

2) StringReader:與StringBufferInputStream對應    

3) FileReader:與FileInputStream對應    

4) PipedReader:與PipedInputStream對應    

2) Out Stream    

1) CharArrayWrite:與ByteArrayOutputStream對應    

2) StringWrite:無與之對應的以位元組為導向的stream    

3) FileWrite:與FileOutputStream對應    

4) PipedWrite:與PipedOutputStream對應    

以字元為導向的stream基本上對有與之相對應的以位元組為導向的stream。兩個對應類實作的功能相同,字是在操作時的導向不同。    

如CharArrayReader:和ByteArrayInputStream的作用都是把記憶體中的一個緩沖區作為InputStream使用,所不同的是前者每次從記憶體中讀取一個位元組的資訊,而後者每次從記憶體中讀取一個字元。    

1.3 兩種不現導向的stream之間的轉換    

InputStreamReader和OutputStreamReader:把一個以位元組為導向的stream轉換成一個以字元為導向的stream。    

2. stream添加屬性    

2.1 “為stream添加屬性”的作用    

運用上面介紹的Java中操作IO的API,我們就可完成我們想完成的任何操作了。但通過FilterInputStream和FilterOutStream的子類,我們可以為stream添加屬性。下面以一個例子來說明這種功能的作用。    

如果我們要往一個檔案中寫入資料,我們可以這樣操作:    

FileOutStream fs = new FileOutStream(“test.txt”);    

然後就可以通過産生的fs對象調用write()函數來往test.txt檔案中寫入資料了。但是,如果我們想實作“先把要寫入檔案的資料先緩存到記憶體中,再把緩存中的資料寫入檔案中”的功能時,上面的API就沒有一個能滿足我們的需求了。但是通過FilterInputStream和FilterOutStream的子類,為FileOutStream添加我們所需要的功能。    

2.2 FilterInputStream的各種類型    

2.2.1 用于封裝以位元組為導向的InputStream    

1) DataInputStream:從stream中讀取基本類型(int、char等)資料。    

2) BufferedInputStream:使用緩沖區    

3) LineNumberInputStream:會記錄input stream内的行數,然後可以調用getLineNumber()和setLineNumber(int)    

4) PushbackInputStream:很少用到,一般用于編譯器開發    

2.2.2 用于封裝以字元為導向的InputStream    

1) 沒有與DataInputStream對應的類。除非在要使用readLine()時改用BufferedReader,否則使用DataInputStream    

2) BufferedReader:與BufferedInputStream對應    

3) LineNumberReader:與LineNumberInputStream對應    

4) PushBackReader:與PushbackInputStream對應    

2.3 FilterOutStream的各種類型    

2.2.3 用于封裝以位元組為導向的OutputStream    

1) DataIOutStream:往stream中輸出基本類型(int、char等)資料。    

2) BufferedOutStream:使用緩沖區    

3) PrintStream:産生格式化輸出    

2.2.4 用于封裝以字元為導向的OutputStream    

1) BufferedWrite:與對應    

2) PrintWrite:與對應    

3. RandomAccessFile    

1) 可通過RandomAccessFile對象完成對檔案的讀寫操作    

2) 在産生一個對象時,可指明要打開的檔案的性質:r,隻讀;w,隻寫;rw可讀寫    

3) 可以直接跳到檔案中指定的位置    

4. I/O應用的一個例子    

import java.io.*;    

public class TestIO{    

public static void main(String[] args)    

throws IOException{    

//1.以行為機關從一個檔案讀取資料    

BufferedReader in =    

new BufferedReader(    

new FileReader("F:\\nepalon\\TestIO.java"));    

String s, s2 = new String();    

while((s = in.readLine()) != null)    

s2 += s + "\n";    

in.close();    

//1b. 接收鍵盤的輸入    

BufferedReader stdin =    

new InputStreamReader(System.in));    

System.out.println("Enter a line:");    

System.out.println(stdin.readLine());    

//2. 從一個String對象中讀取資料    

StringReader in2 = new StringReader(s2);    

int c;    

while((c = in2.read()) != -1)    

System.out.println((char)c);    

in2.close();    

//3. 從記憶體取出格式化輸入    

try{    

DataInputStream in3 =    

new DataInputStream(    

new ByteArrayInputStream(s2.getBytes()));    

while(true)    

System.out.println((char)in3.readByte());    

catch(EOFException e){    

System.out.println("End of stream");    

//4. 輸出到檔案    

BufferedReader in4 =    

new StringReader(s2));    

PrintWriter out1 =    

new PrintWriter(    

new BufferedWriter(    

new FileWriter("F:\\nepalon\\ TestIO.out")));    

int lineCount = 1;    

while((s = in4.readLine()) != null)    

out1.println(lineCount++ + ":" + s);    

out1.close();    

in4.close();    

atch(EOFException ex){    

//5. 資料的存儲和恢複    

DataOutputStream out2 =    

new DataOutputStream(    

new BufferedOutputStream(    

new FileOutputStream("F:\\nepalon\\ Data.txt")));    

out2.writeDouble(3.1415926);    

out2.writeChars("\nThas was pi:writeChars\n");    

out2.writeBytes("Thas was pi:writeByte\n");    

out2.close();    

DataInputStream in5 =    

new BufferedInputStream(    

new FileInputStream("F:\\nepalon\\ Data.txt")));    

BufferedReader in5br =    

new InputStreamReader(in5));    

System.out.println(in5.readDouble());    

System.out.println(in5br.readLine());    

27. 構造器Constructor是否可被(覆寫)override?  [難]   

構造器Constructor不能被繼承,是以不能重寫Overriding,但可以被重載Overloading。   

28. JAVA反射機制作用是什麼?   [難]   

可以于運作時加載、探知、使用編譯期間完全未知的    

classes。換句話說,Java程式可以加載一個運作時才得知名稱    

的class,獲悉其完整構造(但不包括methods定義),并生成其    

對象實體、或對其fields設值、或喚起其methods1。   

29. web應用程式體系結構是怎樣的?   [難]   

一般分為表示層、業務層、資料存取層   

30. .GET和POST有什麼差別?   [難]   

GET是明碼傳遞,POST是暗碼傳遞   

31. HTTP協定的特點?  [中]   

使用端口發送和接受消息 。端口是協定發送和接收資料的信道或機制 ,80是預設端口   

通過這種協定傳遞資料伺服器不會儲存連接配接資訊,是以又稱為連接配接資訊。   

32. 如何通過RandomAccessFile操作檔案  [難]    

RandomAccessFile rf =    

new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");    

for(int i=0; i<10; i++)    

rf.writeDouble(i*1.414);    

rf.close();    

rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "r");    

System.out.println("Value " + i + ":" + rf.readDouble());    

rf = new RandomAccessFile("F:\\nepalon\\ rtest.dat", "rw");    

rf.seek(5*8);    

rf.writeDouble(47.0001);    

32. 靜态方法有什麼好處?  [難]   

(1)在Java裡,可以定義一個不需要建立對象的方法,這種方法就是靜态方法。要實作這樣的效果,隻需要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)   

使用類的靜态方法時,注意:   

a)           在靜态方法裡隻能直接調用同類中其他的靜态成員(包括變量和方法),而不能直接通路類中的非靜态成員。這是因為,對于非靜态的方法和變量,需要先建立類的執行個體對象後才可使用,而靜态方法在使用前不用建立任何對象。   

b)          靜态方法不能以任何方式引用this和super關鍵字,因為靜态方法在使用前不用建立任何執行個體對象,當靜态方法調用時,this所引用的對象根本沒有産生。   

(2)靜态變量是屬于整個類的變量而不是屬于某個對象的。注意不能把任何方法體内的變量聲明為靜态,例如:   

fun()   

{   

   static int i=0;//非法。   

(3)一個類可以使用不包含在任何方法體中的靜态代碼塊,當類被載入時,靜态代碼塊被執行,且之被執行一次,靜态塊常用來執行類屬性的初始化。例如:   

static  

33. Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何差別?   [中]   

Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判斷兩個對象是否相等。   

34. JAVA中的靜态方法有什麼了解?   [難]   

在Java裡,可以定義一個不需要建立對象的方法,這種方法就是靜态方法。要實作這樣的效果,隻需要在類中定義的方法前加上static關鍵字。例如:public static int maximum(int n1,int n2)   

35. JSP中動态INCLUDE與靜态INCLUDE的差別? [難]   

動态INCLUDE用jsp:include動作實作 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,   

适合用于包含動态頁面,并且可以帶參數。   

靜态INCLUDE用include僞碼實作,定不會檢查所含檔案的變化,适用于包含靜态頁面<%@ include file="included.htm" %>   

36. Java有沒有goto?   

java中的保留字,現在沒有在java中使用。   

37. 啟動一個線程是用run()還是start()?   [難]   

啟動一個線程是調用start()方法,使線程所代表的虛拟處理機處于可運作狀态,這意味着它可以由JVM排程并執行。這并不意味着線程就會立即運作。run()方法可以産生必須退出的标志來停止一個線程。   

38. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? [易]   

39. try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?  [難]   

40. 兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?   

不對,有相同的hash code。  [易]   

\   

41. char型變量中能不能存貯一個中文漢字?為什麼?   [難]   

可以,因為java中以unicode編碼,一個char占16個位元組,是以放一個中文是沒問題的   

42. Java中的線程有四種狀态分别是是什麼? [難]   

運作、就緒、挂起、結束。   

43. java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請說出他們分别是哪些類?  [難]   

位元組流,字元流。   

位元組流繼承于InputStream \ OutputStream,   

字元流繼承于InputStreamReader \ OutputStreamWriter。   

44. 靜态變量和執行個體變量的差別? [中]   

static i = 10; //常量   

class A a;  a.i =10;//可變   

45. 什麼是java序列化,如何實作java序列化?  [難]   

序列化就是一種用來處理對象流的機制,所謂對象流也就是将對象的内容進行流化。可以對流化後的對象進行讀寫操作,也可将流化後的對象傳輸于網絡之間。序列化是為了解決在對對象流進行讀寫操作時所引發的問題。   

序列化的實作:   

将需要被序列化的類實作Serializable接口,該接口沒有需要實作的方法,implements Serializable隻是為了标注該對象是可被序列化   

46. 是否可以從一個static方法内部發出對非static方法的調用? [難]   

不可以,如果其中包含對象的method();不能保證對象初始化.   

47. 在JAVA中,如何跳出目前的多重嵌套循環? [難]   

用break; return 方法。   

48. 面向對象的特征有哪些方面    [中]   

1.抽象:   

抽象就是忽略一個主題中與目前目标無關的那些方面,以便更充分地注意與目前目标有關的方面。抽象并不打算了解全部問題,而隻是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是資料抽象。   

2.繼承:   

繼承是一種聯結類的層次模型,并且允許和鼓勵類的重用,它提供了一種明确表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和執行個體變量,并且類可以修改或增加新的方法使之更适合特殊的需要。   

3.封裝:   

封裝是把過程和資料包圍起來,對資料的通路隻能通過已定義的界面。面向對象計算始于這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口通路其他對象。   

4. 多态性:   

多态性是指允許不同類的對象對同一消息作出響應。多态性包括參數化多态性和包含多态性。多态性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程式函數同名問題。   

49. String是最基本的資料類型嗎?  [中]   

基本資料類型包括byte、int、char、long、float、double、boolean和short。   

java.lang.String類是final類型的,是以不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類   

50. int 和 Integer 有什麼差別  [中]   

Java 提供兩種不同的類型:引用類型和原始類型(或内置類型)。Int是java的原始資料類型,Integer是java為int提供的封裝類。Java為每個原始類型提供了封裝類。   

51. 運作時異常與一般異常有何異同?   [ 難]   

異常表示程式運作過程中可能出現的非正常狀态,運作時異常表示虛拟機的通常操作中可能遇到的異常,是一種常見運作錯誤。java編譯器要求方法必須聲明抛出可能發生的非運作時異常,但是并不要求必須聲明抛出未被捕獲的運作時異常。   

52. &和&&的差別。 [ 中]    

&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and)。   

53. final, finally, finalize的差別。  [中]   

final 用于聲明屬性,方法和類,分别表示屬性不可變,方法不可覆寫,類不可繼承。   

finally是異常處理語句結構的一部分,表示總是執行。   

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆寫此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。   

Jsp/servlet面試題   

1. 四種會話跟蹤技術是什麼?(jsp) (中)   

答:cookie,url重寫,session,隐藏表單域。   

2.不同用戶端可不可以共享Session?不可以 (易)   

Jps和Servlet之間可不可以用session傳值?可以   

3.簡介cookie的有關知識 (中)   

浏覽器與WEB伺服器之間是使用HTTP協定進行通信的,當某個使用者發出頁面請求時,WEB伺服器隻是簡單的進行響應,然後就關閉與該使用者的連接配接。是以當一個請求發送到WEB伺服器時,無論其是否是第一次來訪,伺服器都會把它當作第一次來對待,這樣的不好之處可想而知。為了彌補這個缺陷,Netscape 開發出了cookie這個有效的工具來儲存某個使用者的識别資訊,是以人們昵稱為“小甜餅”。cookies是一種WEB伺服器通過浏覽器在通路者的硬碟上存儲資訊的手段:Netscape Navigator使用一個名為cookies.txt本地檔案儲存從所有站點接收的Cookie資訊;而IE浏覽器把Cookie資訊儲存在類似于C: \windows\cookies的目錄下。當使用者再次通路某個站點時,服務端将要求浏覽器查找并傳回先前發送的Cookie資訊,來識别這個使用者。   

  cookies給網站和使用者帶來的好處非常多:   

1、Cookie能使站點跟蹤特定通路者的通路次數、最後通路時間和通路者進入站點的路徑   

2、Cookie能告訴線上廣告商廣告被點選的次數 ,進而可以更精确的投放廣告   

3、Cookie有效期限未到時,Cookie能使使用者在不鍵入密碼和使用者名的情況下進入曾經浏覽過的一些站點   

4、Cookie能幫助站點統計使用者個人資料以實作各種各樣的個性化服務    

JSP是使用如下的文法格式來建立cookie的:   

  Cookie cookie_name =new Cookie(""Parameter"",""Value"");   

  例如:Cookie newCookie =new Cookie(""username"",""zheng""); response.addCookie(newCookie);   

4.在浏覽器的打開時再新打開一個浏覽器還是同一個session嗎? (中)   

對IE而言不是同一個SESSION   

5.描述Cookie和Session的作用,差別和各自的應用範圍 (中)   

Cookie和Session都可以用來在多個頁面之間共享資料,差別是Cookie儲存在用戶端,可以設定比較長的儲存時間.而Session儲存在伺服器端,通常生存時間較短。如果用戶端禁用了Cookie,Cookie将無法工作,而session不受這一影響。一般來說保密性高、儲存時間短的資訊适合用session來存放,而Cookie适合存放需要長期儲存的非敏感資料。   

6.如何實作購物車添加新項,又不使購物車中原有項目被取消? (易)   

可以将購物車存放在session當中   

7.Cookie的過期時間如何設定? (易)   

使用setMaxAge(int exp)方法   

8.如果BROWSER已關閉了cookies,在JSP中我如何打開session? (中)   

如果Cookie被禁用,session将通過url重寫的方式來傳送,是以不會影響session的使用   

9.include指令和include動作的差別  (中)   

10. Jsp有哪些常用動作?作用分别是什麼?(jsp)  (中)   

答:JSP有6種常用基本動作 jsp:include:在頁面被請求的時候引入一個檔案。    

jsp:useBean:尋找或者執行個體化一個JavaBean。    

jsp:setProperty:設定JavaBean的屬性。    

jsp:getProperty:輸出某個JavaBean的屬性。    

jsp:forward:把請求轉到一個新的頁面。    

jsp:plugin:根據浏覽器類型為Java插件生成OBJECT或EMBED标記。   

11. "forward與redirect差別? (中)   

Forward是在伺服器端進行分發,分發後位址欄無變化,使用者看不到分發後的位址.而redirect是在用戶端進行的頁面重定向,位址欄上會顯示重定向後的網頁.forward的頁面隻能是在同一個web應用程式之内,而重定向可以定位到外部資源.forward後還是同一個request請求,而重定向後以前的request請求就不存在了.   

12.Jsp和Servlet中的請求轉發分别如何實作? (易)   

Jsp中使用<jsp:forward>動作,servlet中使用RequestDistpatcher對象的forward方法"   

13.什麼是web容器?(易)   

答:給處于其中的應用程式元件(JSP,SERVLET)提供一個環境,使JSP,SERVLET直接更容器中的環境變量接口互動,不必關注其它系統問題。主要有WEB伺服器來實作。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。該容器提供的接口嚴格遵守J2EE規範中的WEB APPLICATION 标準。我們把遵守以上标準的WEB伺服器就叫做J2EE中的WEB容器。   

14.應用伺服器有那些? (中)   

答:BEA WebLogic Server,IBM WebSphere Application Server,Oracle9i Application Server,JBoss,Tomcat。"   

15.請說出JSP的内置對象及方法 (中)   

答:request表示HttpServletRequest對象。它包含了有關浏覽器請求的資訊,并且提供了幾個用于擷取cookie,    

header, 和session資料的有用的方法。   

    response表示HttpServletResponse對象,并提供了幾個用于設定送回    

浏覽器的響應的方法(如cookies,頭資訊等)   

    out對象是javax.jsp.JspWriter的一個執行個體,并提供了幾個方法使你能用于向浏覽器回送輸出結果。   

    pageContext表示一個javax.servlet.jsp.PageContext對象。它是用于友善存取各種範圍的名字空間、servlet相關的對象的API,并且包裝了通用的servlet相關功能的方法。   

    session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯使用者的狀态資訊   

    applicaton 表示一個javax.servle.ServletContext對象。這有助于查找有關servlet引擎和servlet環境的資訊   

    config表示一個javax.servlet.ServletConfig對象。該對象用于存取servlet執行個體的初始化參數。   

page表示從該頁面産生的一個servlet執行個體。   

16.使用JSP如何獲得客戶浏覽器的資訊?  (易)   

request對象的getXXXX方法"

若轉載請注明出處!若有疑問,請回複交流!