java筆/面試題整理

名詞解釋:

POJO(Plain Old Java Objects)簡單的Java對象,實際就是普通JavaBeans,是爲了避免和EJB混淆

所創造的簡稱。

JMS:(Java Messaging Service)是Java平臺上有關面向消息中間件的技術規範,它便於消息系統中

的Java應用程序進行消息交換,並且通過提供標準的產生、發送、接收消息的接口簡化企業應用的開發,

翻譯爲Java消息服務。

XML:(Extensible Markup Language)即可擴展標記語言,它與HTML一樣,都是SGML(Standard Generalized Markup Language,標準通用標記語言)。

SOA:面向服務的體系結構(Service-Oriented Architecture,SOA)是一個組件模型,它將應用程序不同功能單元(稱爲服務)通過這些服務之間定義良好的接口和契約聯繫起來。

SCM:供應鏈管理(Supply chain management,SCM)是一種集成的管理思想和方法,它執行供應鏈中從供應商到最終用戶的物流的計劃和控制等職能

DOM: DOM= Document Object Model,文檔對象模型,DOM可以以一種獨立於平臺和語言的方式訪問和修改一個文檔的內容和結構。這是表示和處理一個HTML或XML文檔的常用方法,DOM的設計是以對象管理組織(OMG)的規約爲基礎的,因此可以用於任何編程語言。

網絡蜘蛛:網絡蜘蛛即Web Spider,是一個很形象的名字。把互聯網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。網絡蜘蛛是通過網頁的鏈接地址來尋找網頁 ,從 網站某一個頁面(通常是首頁)開始,讀取網頁的內容,找到在網頁中的其它鏈接地址,然後通過這些鏈接地址尋找下一個網頁,這樣一直循環下去,直到把這個網 站所有的網頁都抓取完爲止。如果把整個互聯網當成一個網站,那麼網絡蜘蛛就可以用這個原理把互聯網上所有的網頁都抓取下來。

 

String是最基本的數據類型嗎?
      基本數據類型包括byte、int、char、long、float、double、boolean和short。
      java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。爲了提高效率節省空間,我們應該用StringBuffer類

int 和 Integer 有什麼區別
      Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java爲int提供的封裝類

     原始類型        封裝類
      boolean     Boolean
      char           Character
      byte           Byte
      short          Short
      int              Integer
      long            Long
      float            Float
      double        Double

引用類型和原始類型的行爲完全不同,並且它們具有不同的語義。引用類型和原始類型具有不同的特徵和用法,它們包括:大小和速度問題,這種類型以哪種類型的數據結構存儲,當引用類型和原始類型用作某個類的實例數據時所指定的缺省值。對象引用實例變量的缺省值爲 
null,而原始類型實例變量的缺省值與它們的類型有關。

String 和StringBuffer的區別
      JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據。

運行時異常與一般異常有何異同?
      異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。

 

說出Servlet的生命週期,並說出Servlet和CGI的區別。
      Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。
      與cgi的區別在於servlet處於服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷燬,而CGI對每個請求都產生新的進程,服務完成後就銷燬,所以效率上低於servlet。

 

CGI:Common Gate Interface,通用網關接口

 

 

說出ArrayList,Vector, LinkedList的存儲性能和特性
      ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

 

Spring的核心思想

Spring核心思想就是IOC和AOP,
IOC是控制反轉的意思,以前我們通常要在一個類的方法得到另外一個類需要 new 一個
pulic OneFoo
{
void method ()
{
AnotherFoo anthorFoo=new AnotherFoo ();/
//下面是邏輯代碼
}
}
在Spring裏面可以通過配置文件(可以查閱goolgle)直接注入到這個類的對象中比如
pulibc OneFoo
{
public AnotherFoo aFoo;
public void setAnotherFoo(AnotherFoo aFoo){}
public void method()
{
aFoo.doSomething();
}
}
這樣就不用在程序裏面顯示的new這個需要的類的對象了這是ioc

aop就是面向方面編程,你可以在一個方法前,方法後,或者類實例化後,實例化前處理一些你自己的代碼,一般用在事務處理(Spring著名的申明性事務),和動態的進行log記錄,
傳統的log記錄一般是你一個類一個類的去打印log,而用了aop你只要寫一個類,配置下文件然後就可以動態的在某個類方法執行的時候打印出log. 

 

hashmap和hashtable 的區別 

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap允許空(null)鍵值(key),由於非線程安全,效率上可能高於Hashtable。
HashMap允許將null作爲一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因爲contains方法容易讓人引起誤解。 
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己爲它的方法實現同步,而HashMap 就必須爲之提供外同步。 
Hashtable和HashMap採用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

兩句話總結:
HashMap => 不同步、空鍵值、效率高;
Hashtable => 同步、非空鍵值、效率略低

habinate的運行機制,有什麼優點

機制:
1、讀取並解析配置文檔
2、讀取並解析映射文件,創建SessionFactory
3、打開Session
4、創建事務Trasction
5、持久化操作
6、提交事務
7、關閉Session
8、關閉SessionFactory

優點:
1、對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問繁瑣的代碼
2、Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現,他很大程度的簡化DAO曾的編碼

  工作
3、Hibernate使用Java發射機制,而不是字節碼,增強程序來實現透明性
4、Hibernate的性能非常好,因爲他是一個輕量級框架,框架的靈活性很突出。它支持各種關係數據庫從

  一對一到多對多的各種複雜工作

 

heap和stack有什麼區別

1.heap是堆,stack是棧。

2.stack的空間由操作系統自動分配和釋放,heap的空間是手動申請和釋放的,heap常用new關鍵字來分配。

3.stack空間有限,heap的空間是很大的自由區。

在Java中,

若只是聲明一個對象,則先在棧內存中爲其分配地址空間,

若再new一下,實例化它,則在堆內存中爲其分配地址。

4.舉例:

數據類型 變量名;這樣定義的東西在棧區。

如:Object a =null; 只在棧內存中分配空間

new 數據類型();或者malloc(長度);    這樣定義的東西就在堆區

如:Object b =new Object(); 則在堆內存中分配空間

頁面對象間傳值的方法:

request、session、application、cookie

 

Synchronized和java.util.concurrent.locks.Lock的區別

主要相同點:Lock能完成Synchronized所實現的所有功能。

主要不同點:Lock有比Synchronized更精確的縣城予以和更好的性能。Synchronized會自動釋放鎖,但是Lock一定要求程序員手工釋放,並且必須在finally從句中釋放。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章