JAVA基礎面試題

一、List、Set、ArrayList和LinkedList的區別?java

  • List和Set是兩個個接口,都繼承於Collection接口,ArrayList和LinkedList是兩個實現類
  • List集合是有序的,裏面的數據能夠重複。Set集合是無序的,裏面的數據不能重複。
  • ArrayList是實現了基於動態數組的數據結構,LinkedList基於鏈表的數據結構。
  • ArrayList 採用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,優勢是添加修改較快,缺點就是插入刪除時效率較低
  • LinkedList 採用的將對象存放在獨立的空間中,並且在每一個空間中還保存下一個連接的索引 可是缺點就是查找很是麻煩 要叢第一個索引開始

二、String/StringBuffer/StringBuider的區別?ajax

  • String是一個不可變的類,是使用final修飾的。
  • StringBuffer對方法加了同步鎖或者對調用的方法加 了同步鎖,因此是線程安全的。StringBuffer只能用new來初始化StringBuffer變量,不能直接用StringBuffer s=」abc」;
  • StringBuilder並無對方法進行加同步鎖,因此是非線程安全的。

三、final/finally/finallize的區別?算法

  • final是一個修飾類、方法、變量的關鍵字。
  • finally是一個在try...catch 語句中最後使用的處理異常的語句塊。不管走不走異常,finally中的代碼都會被執行
  • finallize()是一個java垃圾回收機制的一種方法。

四、HashMap和Hashtable的區別。數據庫

  • HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區別在於HashMap容許空(null)鍵值(key),因爲非線程安全,效率上可能高於Hashtable。
  • HashMap容許將null做爲一個entry的key或者value,而Hashtable不容許。
  • Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
  • 最大的不一樣是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不須要本身爲它的方法實現同步,而HashMap 就必須爲之提供外同步。
  • Hashtable和HashMap採用的hash/rehash算法都大概同樣,因此性能不會有很大的差別。 

五、Form表單的提交方式有幾種,分別爲何,有啥區別?數組

  • get和post兩種
  • get提交的數據比較小,請求最長數據長度爲255個字符的限制,post提交的數據比較大。
  • HTTP協議基本的兩個請求方式爲GET與POST,GET請求方式爲直接在請求的網址上發送請求的相關信息。

六、動態包含<jsp :include page=「a.jsp」/>與靜態包含<%@include  file=「fileurl」%>的區別瀏覽器

  • 動態包含:先執行後包含。        
  • 靜態包含 :先包含後執行。
  • 動態包含用的元素是page,並且有兩種形式。靜態包含用的是file,只有一種形式。
  • 生成的文件不一樣,靜態的包含是將兩個jsp文件二合一,生成一個以包含頁面命名的servlet和class文件,動態包含的兩個jsp文件各自生成本身的servlet和class文件
  • 傳參方式一:<jsp:include page=「a.jsp?param=123」/>時被包含的jsp頁面是能夠訪問該參數的。
  • 傳參方式二:
    <jsp:include page=「a.jsp」>
    
                         <jsp:param name=「」 value=「」>
    
                        <jsp:param name=「」 value=「」>
    
    </ jsp:include >

七、JQuery中ajax的原理?安全

  • 從前臺數據傳到後臺,再把後臺數據傳到前臺,實現異步刷新。

八、MVC分層架構?服務器

  • 模型(model)session

  • 視圖(view)數據結構

  • 控制器(controller)

 九、什麼是數據庫鏈接池?

  • 在啓動服務器的時候就建立了不少個鏈接,在使用的時候直接就能夠用,當鏈接數達到最大數的時候,會等待。

十、JSP中的九個內置對象?

  • request:(HttpServletRequest):getAttribute("key"),setAttribute("key",value);getParameter("name")
  • session:(HttpSession):setAttribute("key",value),getAttribute("key"),removeAttribute("key");
  • pageContext:(PageContext):getRequest(),getResponse(),getSession(),getServletContext();
  • response:(HttpServletResponse):addCookies(),setContentType(),sendRedirect("url");
  • application:(ServletContext):setAttribute("key",value),getAttribute("key"),removeAttribute("key")
  • out:(JspWriter):print(),write(),writeln(),close(),flush();
  • page:(Obiect):
  • config:(ServletContext):頁面配置對象
  • exception:(Throwable):異常處理對象(僅當jsp頁面isErrorPage="true"時存在);
  • 請求轉發跳轉:request.getRequestDispatcher(url).forword(request,response);
  • 重定向跳轉:response.sendRedirect(url);

十一、JSP中四種對象做用域?

  • page:當前頁面,也就是隻要跳到別的頁面就失效了
  • request:一次會話,簡單的理解就是一次請求範圍內有效
  • session:瀏覽器進程,只要當前頁面沒有被關閉(沒有被程序強制清除),無論怎麼跳轉都是有效的
  • application:服務器,只要服務器沒有重啓(沒有被程序強制清除),數據就有效

十二、EasyUI的基本組件?

  • 基礎組件(panel,window,dialog)

1三、客戶端跳轉和服務器端跳轉的區別?

  • 客戶端跳轉會顯示目標的URL,服務器跳轉不會顯示目標的URL。

1四、GC是什麼?(garbage collector)

  • GC是JAVA中的垃圾收集機制,把再也不使用的內存空間回收。

1五、重載和重寫的區別?

  • 簡單的說就是:重載是在一個類中進行,重寫是在父類和子類中進行
  • 重載是在一個類中能夠定義有相同的名字,但參數不一樣(個數不一樣,類型不一樣)的方法。
  • 在子類中能夠根據須要對從基類中繼承來的方法進行了重寫,重寫的方法必須和被重寫的方法具備相同方法名稱、參數及返回類型。
  • 重寫方法不能使用比被重寫方法更嚴格的訪問權限。

1六、抽象類和接口的區別?

  • 抽象類(abstarct)只是單繼承(一個類只能用extends繼承一個父類),接口(interface)實現了多繼承(一個類能夠用implements實現多個接口)
  • 抽象類能夠有本身的數據成員,也能夠有非abstarct的成員方法,而接口是一種特殊的抽象類,它只包含常量和方法的定義,而不能有變量和方法的實現,即全部的成員方法都是無方法體的。
  • 抽象類中能夠有非抽象方法,接口中則不能有實現方法,接口中的方法默認都是 public類型的。
  • 抽象類是經過類來繼承,接口是經過類來實現接口

1七、java面向對象的三大特徵--封裝、繼承、多態。

  • 封裝:
    • 封裝的定義:首先是抽象,把事物抽象成一個類,其次纔是封裝,將事物擁有的屬性和動做隱藏起來,只保留特定的方法與外界聯
    • 爲何須要封裝:封裝符合面向對象的單一性原則,一個類把本身該作的事情封裝起來,而不是暴露給其餘類去處理,當內部的邏輯發生變化時,外部調用不用所以而修改。
  • 繼承:
    • Java的類能夠分爲三類:
      • 類:使用class定義,沒有抽象方法
      • 抽象類:使用abstract class定義,能夠有也能夠沒有抽象方法
      • 接口:使用inerface定義,只能有抽象方法
      • 在這三個類型之間存在以下關係:
      • 類能夠extends:類、抽象類(必須實現全部抽象方法),但只能extends一個,能夠implements多個接口(必須實現全部接口方法)
      • 抽象類能夠extends:類,抽象類(可所有、部分、或者徹底不實現父類抽象方法),能夠implements多個接口(可所有、部分、或者徹底不實現接口方法)
      • 接口只能extends一個接口
    • 繼承之後子類能夠獲得什麼:
      • 子類擁有父類非private的屬性和方法
      • 子類能夠添加本身的方法和屬性,即對父類進行擴展
      • 子類能夠從新定義父類的方法,即多態裏面的覆蓋,後面會詳述
    • 關於構造函數:
      • 構造函數不能被繼承,子類能夠經過super()顯示調用父類的構造函數
      • 建立子類時,編譯器會自動調用父類的 無參構造函數
      • 若是父類沒有定義無參構造函數
    • 爲何須要繼承:
      • 代碼重用是一點,最重要的仍是所謂想上轉型,即父類的引用變量能夠指向子類對象,這是Java面向對象最重要特性多態的基礎

  • 多態
    • 在瞭解多態以前,首先須要知道方法的惟一性標識即什麼是相同/不一樣的方法:
      • 一個方法能夠由:修飾符如public、static+返回值+方法名+參數+throw的異常 5部分構成
      • 其中只有方法名和參數是惟一性標識,意即只要方法名和參數相同那他們就是相同的方法
      • 所謂參數相同,是指參數的個數,類型,順序一致,其中任何一項不一樣都是不一樣的方法
    • 何謂重載:
      • 重載是指一個類裏面(包括父類的方法)存在方法名相同,可是參數不同的方法,參數不同能夠是不一樣的參數個數、類型或順序
      • 若是僅僅是修飾符、返回值、throw的異常 不一樣,那這是2個相同的方法,編譯都通不過,更不要說重載了
    • 覆蓋/重寫的規則:
      • 子類不能覆蓋父類private的方法,private對子類不可見,若是子類定義了一個和父類private方法相同的方法,實爲新增方法
      • 重寫方法的修飾符必定要大於被重寫方法的修飾符(public > protected > default > private)
      • 重寫拋出的異常需與父類相同或是父類異常的子類,或者重寫方法乾脆不寫throws
      • 重寫方法的返回值必須與被重寫方法一致,不然編譯報錯
      • 靜態方法不能被重寫爲非靜態方法,不然編譯出錯
    • 理解了上述知識點,是時候定義多態了:
      • 多態能夠說是「一個接口,多種實現」或者說是父類的引用變量能夠指向子類的實例,被引用對象的類型決定調用誰的方法,但這個方法必須在父類中定義
      • 多態能夠分爲兩種類型:編譯時多態(方法的重載)和運行時多態(繼承時方法的重寫),編譯時多態很好理解,後述內容針對運行時多態
      • 運行時多態依賴於繼承、重寫和向上轉型
    • 向上轉型的缺憾:

      • 只能調用父類中定義的屬性和方法,對於子類中的方法和屬性它就可望不可即了,必須強轉成子類類型
    • 總結歸納:
      • 當超類對象引用變量引用子類對象時,被引用對象的類型而不是引用變量的類型決定了調用誰的成員方法,可是這個被調用的方法必須是在超類中定義過的,也就是說被子類覆蓋的方法,可是它仍然要根據繼承鏈中方法調用的優先級來確認方法,該優先級爲:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)
相關文章
相關標籤/搜索