一、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三、客戶端跳轉和服務器端跳轉的區別?
1四、GC是什麼?(garbage collector)
1五、重載和重寫的區別?
- 簡單的說就是:重載是在一個類中進行,重寫是在父類和子類中進行
- 重載是在一個類中能夠定義有相同的名字,但參數不一樣(個數不一樣,類型不一樣)的方法。
- 在子類中能夠根據須要對從基類中繼承來的方法進行了重寫,重寫的方法必須和被重寫的方法具備相同方法名稱、參數及返回類型。
- 重寫方法不能使用比被重寫方法更嚴格的訪問權限。
1六、抽象類和接口的區別?
- 抽象類(abstarct)只是單繼承(一個類只能用extends繼承一個父類),接口(interface)實現了多繼承(一個類能夠用implements實現多個接口)
- 抽象類能夠有本身的數據成員,也能夠有非abstarct的成員方法,而接口是一種特殊的抽象類,它只包含常量和方法的定義,而不能有變量和方法的實現,即全部的成員方法都是無方法體的。
- 抽象類中能夠有非抽象方法,接口中則不能有實現方法,接口中的方法默認都是 public類型的。
- 抽象類是經過類來繼承,接口是經過類來實現接口
1七、java面向對象的三大特徵--封裝、繼承、多態。
- 封裝:
- 封裝的定義:首先是抽象,把事物抽象成一個類,其次纔是封裝,將事物擁有的屬性和動做隱藏起來,只保留特定的方法與外界聯
- 爲何須要封裝:封裝符合面向對象的單一性原則,一個類把本身該作的事情封裝起來,而不是暴露給其餘類去處理,當內部的邏輯發生變化時,外部調用不用所以而修改。
- 繼承:
- Java的類能夠分爲三類:
- 類:使用class定義,沒有抽象方法
- 抽象類:使用abstract class定義,能夠有也能夠沒有抽象方法
- 接口:使用inerface定義,只能有抽象方法
- 在這三個類型之間存在以下關係:
- 類能夠extends:類、抽象類(必須實現全部抽象方法),但只能extends一個,能夠implements多個接口(必須實現全部接口方法)
- 抽象類能夠extends:類,抽象類(可所有、部分、或者徹底不實現父類抽象方法),能夠implements多個接口(可所有、部分、或者徹底不實現接口方法)
- 接口只能extends一個接口
- 繼承之後子類能夠獲得什麼:
-
-
- 子類擁有父類非private的屬性和方法
- 子類能夠添加本身的方法和屬性,即對父類進行擴展
- 子類能夠從新定義父類的方法,即多態裏面的覆蓋,後面會詳述
- 關於構造函數:
- 構造函數不能被繼承,子類能夠經過super()顯示調用父類的構造函數
- 建立子類時,編譯器會自動調用父類的 無參構造函數
- 若是父類沒有定義無參構造函數
- 爲何須要繼承:
- 多態
- 在瞭解多態以前,首先須要知道方法的惟一性標識即什麼是相同/不一樣的方法:
- 一個方法能夠由:修飾符如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)