Java常見面試題

1、Get和Post的區別
1.get是從服務器上獲取數據,post是向服務器傳送數據,
2.get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,通常被默認爲不受限制。
3.get安全性很是低,post安全性較高。可是執行效率卻比Post方法好。
4.在進行文件上傳時只能使用post而不能是get。
2、多態四種體現形式:
1.    接口和接口的實現。
2.    類和類的繼承。
3.    重載。
4.    重寫。
3、StringBuffer StringBuilder String 區別
String        字符串常量   不可變  使用字符串拼接時是不一樣的2個空間
StringBuffer  字符串變量   可變   線程安全  字符串拼接直接在字符串後追加
StringBuilder 字符串變量   可變   非線程安全  字符串拼接直接在字符串後追加
1.StringBuilder執行效率高於StringBuffer高於String.
2.String是一個常量,是不可變的,因此對於每一次+=賦值都會建立一個新的對象,StringBuffer和StringBuilder都是可變的,當進行字符串拼接時採用append方    法,在原來的基礎上進行追加,因此性能比String要高,又由於StringBuffer  是線程安全的而StringBuilder是線程非安全的,因此StringBuilder的效率高於StringBuffer.
3.對於大數據量的字符串的拼接,採用StringBuffer,StringBuilder.
4、Hashtable與HashMap的區別
     HashMap不是線程安全的,HashTable是線程安全。
     HashMap容許空(null的鍵和值(key,HashTable則不容許。
     HashMap性能優於Hashtable。
Map
1.Map是一個以鍵值對存儲的接口。Map下兩個具體的實現,分別是HashMap和HashTable.
2.HashMap是線程非安全的,HashTable是線程安全的,因此HashMap的效率高於HashTable.
3.HashMap容許鍵或值爲空,而HashTable不容許鍵或值爲空.
5、九大隱式對象    
輸入/輸出對象:  request   response   out
做用域通訊對象: session  application  pageContext
Servlet 對象:   page   config
錯誤對象:      exception
6、Forword(請求轉發)與Redirect(重定向)    
一、從數據共享上
      Forword是一個請求的延續,能夠共享request的數據
      Redirect開啓一個新的請求,不能夠共享request的數據
二、從地址欄
      Forword轉發地址欄不發生變化
      Redirect轉發地址欄發生變化
7、XML和Json的特色    
   Xml特色:
  一、且僅一個根節點;
  二、是獨立與軟件和硬件的信息傳輸工具(傳輸量較大
  三、所的標籤都須要自定義     
  四、僅僅是純文本文件
 Json(JavaScript Object Notation特色:
json分爲兩種格式: json對象(就是在{}中存儲鍵值對,鍵和值之間用冒號:分隔,鍵值對之間用逗號,分隔),json數組(就是[]中存儲多個json對象,json對象之間用逗號分隔)(二者間能夠進行相互嵌套
  數據傳輸的載體之一
區別:
  xml的傳輸數據量比json的要大,流行的是基於json的數據傳輸。
共同點:
    Xml和json都是傳輸數據的載體,而且具跨平臺跨語言的特性。
8、request.getSession()、reqeust.getSession(false)和request.getSession(true)    
    getSession()/getSession(true):當session存在時返回該session,不然新建一個     session並返回該對象
    getSession(false):當session存在時返回該session,不然返回null
9、Page和PageContext的區別    
    Page是servlet對象;使用this關鍵字,它的做用範圍是在同一頁面。
PageContext是做用域通訊對象;一般使用setAttribute()和getAttribute()來設置和獲取存放對象的值。
10、Ajax總結    
    AJAX 全稱: 異步JavaScript及 XML(Asynchronous JavaScript And XML
Ajax的核心是JavaScript對象XmlHttpRequest(XHR)。
Ajax的優勢:
    提升用戶體驗度(UE)
    提升應用程序的性能
    進行局部刷新
 AJAX不是一種新的編程語言,而是一種用於建立更好更快以及交互性更強的 Web 應用程序的技術。
2.  經過 AJAX,咱們的 JavaScript 可以使用JavaScript的XMLHttpRequest對象來直接與服務器進行通訊。經過這個對象,咱們的 JavaScript 可在不重載頁面的狀況與Web服務器交換數據,便可局部刷新。
3.  AJAX 在瀏覽器與 Web 服務器之間使用異步數據傳輸(HTTP 請求,這樣就可以使網頁從服務器請求少許的信息,而不是整個頁面,減輕服務器的負擔,提高站點的性能。
 AJAX 可以使因特網應用程序更小、更快,更友好,用戶體驗(UE好。
5.  Ajax是基於標準化並被普遍支持的技術,而且不須要插件和下載小程序
11、List,Set,Collection,Collections    
List和Set都是接口,他們都繼承於接口Collection,List是一個有序的可重複的集合,而Set是無序的不可重複的集合。Collection是集合的頂層接口,Collections是一個封裝了衆多關於集合操做的靜態方法的工具類,由於構造方法是私的,因此不能實例化。
2.List接口實現類ArrayList,LinkedList,Vector。ArrayList和Vector是基於數組實現的,因此查詢的時候速度快,而在進行增長和刪除的時候速度較慢LinkedList是基於鏈式存儲結構,因此在進行查詢的時候速度較慢但在進行增長和刪除的時候速度較快。又由於Vector是線程安全的,因此他和ArrayList相比而言,查詢效率要低。
12、時間類型轉換    java

public class DateFormat {
    public static void fun() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
        String newDate;
        try {
            newDate = sdf.format(new SimpleDateFormat("yyyyMMdd")
                    .parse("20121115"));
            System.out.println(newDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
    public static void main(String args[]) {
        fun();
    }
}

十3、階乘    (遞歸思想)數據庫

public class Multiply {
    public static int multiply(int num) {
        if (num < 0) {
            System.out.println("請輸入大於0的數!");
            return -1;
        } else if (num == 0 || num == 1) {
            return 1;
        } else {
            return multiply(num - 1) * num;
        }
    }
    public static void main(String[] args) {
        System.out.println(multiply(10));
    }
}

十4、osi七層模型    
    第一層:物理層
    第二層:數據鏈路層
    第層:網絡層
    第四層:傳輸層    
    第五層:會話層
    第六層:表示層
    第七層:應用層
十5、線程和進程的區別    
1.線程(Thread)與進程(Process
進程定義的是應用程序與應用程序之間的邊界,一般來講一個進程就表明一個與之對應的應用程序。不一樣的進程之間不能共享代碼和數據空間,而同一進程的不一樣線程能夠共享代碼和數據空間。
一個進程能夠包括若干個線程,同時建立多個線程來完成某項任務,即是多線程。
實現線程的兩種方式:繼承Thread類,實現Runable接口
十6、jvm的內存結構
java虛擬機的內存結構分爲堆(heap)和棧(stack),堆裏面存放是對象實例也就是new出來的對象。棧裏面存放的是基本數據類型以及引用數據類型的地址。
對於所謂的常量是存儲在方法區的常量池裏面。
十7、內存泄和內存溢出    
內存泄露 (memory le)ak),是指應用程序在申請內存後,沒法釋放已經申請的內存空間.一次內存泄露危害能夠忽略,但若是任其發展最終會致使內存溢出(out of memory).
如讀取文件後流要進行及時的關閉以及對數據庫鏈接的釋放。
內存溢出(out of memory是指應用程序在申請內存時,沒足夠的內存空間供其使用。
如咱們在項目中對於大批量數據的導入,採用分段批量提交的方式。
十8、單例    
單例就是該類只能返回一個實例。
單例所具有的特色:
1.私化的構造函數
2.私的靜態的全局變量
3.公的靜態的方法
單例分爲懶漢式、餓漢式和雙層鎖式
餓漢式:編程

public class Singleton1 {
      private Singleton1() {};
      private static Singleton1 single = new Singleton1();
      public static Singleton1 getInstance() {
          return single;
     }
 }

 懶漢式:json

public class Singleton2 {
      private Singleton2() {}
      private static Singleton2 single=null;
      public tatic Singleton2 getInstance() {
           if (single == null) {  
              single = new Singleton2();
          }  
         return single;
     }
 }

線程安全:小程序

public class Singleton3 {
      private Singleton3() {}
      private static Singleton3 single ;
      public static Singleton3 getInstance() {
        if(null == single){
            synchronized(Singleton3.class){
                if(null == single){
                    single = new Singleton3();
                }
            }
        }
        return single;
      }
}
相關文章
相關標籤/搜索