Java常見面試題

 

基礎

  1. 什麼是Java虛擬機?爲何Java被稱做是「平臺無關的編程語言」?

答:Java虛擬機是一個能夠執行字節碼的虛擬進程;Java設計的應用程序能夠運行在任意的平臺,而不須要程序員爲每個平臺單獨重寫或是從新編譯。java

  1. JAVA面向對象的特徵有哪些,分別談下對其的理解?

答:繼承、封裝、抽象、多態。mysql

繼承:繼承是原有的類派生出子類,子類自動分享父類數據和方法的機制,這是類之間的一種關係,提升了代碼的複用性和可擴展性。程序員

封裝:封裝是過程和數據包圍起來,達到「高內聚、低耦合」的目的,防止程序相互依賴而帶來的變更影響。web

抽象:抽象就是找出一些事物的類似和共性,而後將這些事物歸爲一個類,這個類只考慮這些事物的類似和共性之處,只注意與當前目標有關的方面。算法

多態:多態是指程序中定義的引用變量所指向的具體類型和經過該引用變量發出的方法調用在編程時並不肯定,而是在程序運行中才能肯定。多態是指容許不一樣類的對象對同一消息做出響應。編譯時多態(重載),運行時多態(重寫)spring

  1. 軟件開發流程?

答:需求分析、概要設計、詳細設計、編碼過程、軟件交付、用戶驗收、後期維護。sql

  1. 什麼是反射,其做用是什麼?

答:Java是審查元數據並收集關於它的類型信息的能力;反射的主要做用是用於擴展系統和動態調用程序集。數據庫

  1. JDK和JRE的區別是什麼?

答:JRE是Java運行時環境,包含了java虛擬機、java基礎類庫,是使用java語言編寫的程序運行所需的軟件環境;JDK是Java開發工具包,是程序員使用java語言編寫java程序所需的開發工具包,JDK包含了JRE,同時還包含了編譯源碼的編譯器javac等。編程

  1. 是否能夠在static環境中訪問非static變量,是否能夠在static方法中內部發出非static方法的調用?

答:不能夠,須要先建立非static變量所在的類,而後再來訪問非static變量;設計模式

不能夠,由於非static方法調用須要與對象關聯在一塊兒,須要建立一個對象,才能夠經過對象調用非static方法。

  1. JAVA的基礎數據類型有哪些,對應的包裝數據類型,什麼是自動拆裝箱?

答:byte、short、int、long、float、double、boolean、char。

Byte、Short、Integer、Long、Float、Double、Boolean、Character。

自動裝箱是Java編譯器在基本數據類型和對應的包裝類型之間作的一個轉化。

  1. 什麼是方法的重載與重寫?

答:重載是在一個類中方法名相同,參數列表不一樣的方法;重寫,子類重寫父類的方法,子類方法的訪問修飾符不能小於父類,拋出的異常不能多於父類,同時方法名和參數和父類相同。

  1. 在JAVA中,什麼是構造函數,什麼是構造函數重載,什麼是複雜構造函數?

答:構造函數就是與類名具備同樣名稱的成員函數;構造函數重載也就是一種的特殊的方法重載,只須要看其參數的特色,由於它沒有返回參數;複雜構造函數常出如今派生類中,是簡單構造函數與構造函數初始化列表的混合形式。(有參構造函數)

  1. JAVA中是否支持多繼承?

答:不支持。Java只支持單繼承。

  1. JAVA中方法修飾符有哪些,各自的特色是什麼?

答:public:全部的類均可以訪問;

private:只有在同一個類中才能夠訪問;

protected:同一個類中、同一個包中、子類均可以訪問;

包類型的,即默認類型,同一個類中、同一個包中能夠訪問到。

  1. 抽象類與接口的區別?

答:類能夠實現無限個接口,僅能從一個抽象類繼承,從抽象類派生出的類仍可實現接口;抽象類中能夠存在非抽象的方法,接口中的方法只是一個聲明必須用public來修飾,沒有具體的實現;抽象類中的成員變量能夠被不一樣的修飾符來修飾,接口中的默認都是靜態常量;抽象類是對象的抽象,接口是一種行爲規範。

  1. 抽象的方法是否能夠同時是static的,是否能夠同時是native,是否能夠同時是synchronized?

答:static聲明的方法代表這個方法在不生成類的實例就能夠直接被類調用,而抽象的方法是不能被調用的,因此抽象的方法不能夠同時是static的;

Native暗示這些方法是有實現體的,可是抽象方法卻又顯示的指明這些方法無實現體的,因此抽象的方法不能夠同時是native;

Synchronized是用於線程同步時的,(要麼做用在方法上,要麼做用在代碼塊上,而抽象方法沒有方法主體),用synchronized的前提是該方法能夠被直接調用,因此抽象方法不能夠同時是synchronized。

  1. String是否能夠繼承,如何獲取其大小?

答:String不能夠繼承,由於它是final修飾的,調用它的length()方法獲取大小。

  1. String str = new String(「abc」),該語句產生了一個對象,分別是哪些?

答:產生了兩個對象,一個是New關鍵字建立的new String();另外一個是」abc」對象,abc在一個字符串池中。

  1. ==與.equals()有什麼不一樣,&&與&有什麼不一樣?

答:」==」比較的是值(變量棧中存放的對象的堆內存地址),equals()用於比較兩個對象的值是否相同(不是比地址);&&是邏輯運算符,同時也有短路功能,&是按位運算符。

  1. Float型float f = 1.2; 這種寫法是否精確?

答:不精確,小數點在java中默認是double,double賦值給float須要轉型。

  1. 什麼是值傳遞,引用傳遞?

答:值傳遞是將要傳遞的值做爲一副本傳遞;引用傳遞,傳遞的是引用對象的內存地址。(Java中只有值傳遞)

  1. 什麼是進程,什麼是線程?

答:進程和線程都是由操做系統所體現的程序運行的基本單元,可是線程劃分尺度小於進程,使得多線程程序的併發性高。線程有一個程序運行的入口。順序執行序列和程序的出口,可是線程不夠獨立,必須依存在應用程序中;進程是具備必定獨立功能的程序關於某個數據集合上的一次運動活動,進程是系統進行資源分配和調度的一個獨立單位。

  1. 實現多線程的方式?

答:(1)繼承Thread類實現多線程;(2)實現Runnable接口方式實現多線程;(3)使用ExecutorService、Callable、Future實現有返回結果的多線程。

  1. 線程的幾種狀態?

答:新建狀態(New)、就緒狀態(Runnable)、運行狀態(Running)、阻塞狀態(Blocked)、死亡狀態(Dead)。

  1. 如何啓動一個線程?

答:調用start()方法。

  1. 什麼是死鎖(怎樣避免死鎖)?

答:死鎖是指兩個或兩個以上的進程在執行過程當中,因爲競爭資源或者因爲彼此通訊而形成的一種阻塞現象。

  1. 談談對線程同步與異步的理解?

答:線程同步是多個線程同時訪問同一資源,等待資源訪問結束,浪費時間,效率低;線程異步是指訪問資源時在空閒等待時同時訪問其餘資源,實現多線程機制。

  1. 如何作到線程同步?

答:同步代碼塊、同步方法。

  1. 有主線程A中有不少子線程,如何確保子線程執行完畢後,主線程才能夠繼續執行?

答:(1)讓主線程等待,或者休眠;(2)使用Thread的join()等待全部的子線程執行完畢,主線程再執行;(3)使用ExecutorService線程池,等待全部任務執行完畢再執行主線程。(callable,future;對子線程進行監聽)

  1. Sleep()與Wait()區別?

答:sleep()方法致使了程序暫停執行指定的時間,讓出cpu該其餘線程,可是它的監控狀態依然保持,當指定時間到了又會自動恢復運行狀態(不會釋放資源);wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用notify()方法後本線程才進入對象鎖定池準備獲取對象鎖進入鎖定狀態(會釋放資源)。

  1. 如何確保N個線程能夠訪問N個資源的同時又不會出現死鎖?

答:讓全部的線程都是以一樣的順序加鎖和釋放鎖。

  1. 線程同步時,synchronized與Lock有什麼不一樣?

答:lock有比synchronized更精確的線程語義和更好的性能,synchronized會自動釋放鎖,而Lock必定要求程序員手工釋放,而且必須在finally從句中釋放。

  1. 如何使用Socket技術實現一個服務器與客戶端?

答:使用serverSocket,對服務器端口進行監聽

  1. JAVA集合框架中的基本接口有哪些?

答:

Collection:是一個較高的抽象,List, Set 和 Map都是Collection的子接口;

List的特徵: 容許重複元素,存儲順序與插入元素順序一致;

Set 特徵: 不容許重複元素(和數學中的集合同樣),不保證元素存儲順序;

Map: 存儲元素是一系列鍵=>值,鍵不能夠重複。

  1. Collection與Conllections的區別是什麼?

答:conllection是接口,是集合框架的頂級接口。下面有子接口以及實現類。conllections是工具類,是集合框架的工具類,對集合進行操做。裏面有不少靜態方法。

  1. 如何獲取數組的大小?

答:lenth屬性。

  1. 集合中使用泛型做用是幹什麼?

答:指定集合保存數據的類型,更加統一。

  1. Java中的HashMap的工做原理?

答:HashMap有一個叫作Entry的內部類,它用來存儲key-value對。經過對鍵值,hashcode的比較進行存儲

  1. Array與Arraylist有什麼區別,什麼時間應該用Array而不該該用Arraylist?

答:Array建立時就要指定容量,可是能夠多維,只可存一種類型的數據;Arraylist建立時不用指定容量,能夠存儲多種類型的數據。

  1. ArrayList和Vector有何異同點?

答:ArrayList,沒有同步,線程不安全,效率高;Vector是同步的,線程是安全的,效率不高。

  1. Enumeration接口和Iterator接口的區別有哪些?

答:Enumeration速度是Iterator的2倍,同時佔用更少的內存。可是,Iterator遠遠比Enumeration安全,由於其餘線程不可以修改正在被iterator遍歷的集合裏面的對象。

  1. Iterater和ListIterator之間有什麼區別?

答:(1)Iterator是ListIterator的父接口;

(2)Iterator是單列集合(Collection)公共取出容器中元素的方式;

(3)Iterator中具有的功能只有hashNext(),next(),remove()。

  1. HashMap與HashTable的區別?

答:(1) 繼承不一樣;

(2) Hashtable 中的方法是同步的,而HashMap中的方法在缺省狀況下是非同步的;

(3) Hashtable中,key和value都不容許出現null值;

HashMap:key和value都容許出現null值,一個空值

  1. Set集合中如何作到不重複?

答:添加元素前會先判斷存在不,不存在才能添加成功。

  1. Arraylist與LinkedList區別?

答:Arraylist是動態數組結構,查詢效率高;LinkedList是鏈表結構,增刪改效率高。

  1. HashSet和TreeSet有什麼區別?

答:ØHashSet ,不能保證元素的排列順序,順序有可能發生變化 Ø 不是同步的 Ø 集合元素能夠是null,但只能放入一個null;TreeSet能夠確保集合元素處於排序狀態,不容許放null。

  1. 集合循環中,continue與break的區別是什麼?

答:break是結束整個循環體,continue是結束本次循環,進入下一次循環。

  1. 談談你對Java垃圾回收機制的理解,Java中垃圾回收有什麼目的,何時進行垃圾回收,回收哪些數據?

答:垃圾回收是防止內存泄漏,能夠有效使用空閒內存;目的:釋放內存垃圾回收由jvm決定。回收沒有用的數據。

  1. System.gc()和Runtime.gc()做用是什麼,會當即執行麼?

答:通知jvm進行垃圾回收,可是不能保證當即進行。

  1. 談談你對final,finally,finalize()的理解?

答:final是用來修飾類、方法、變量的,修飾類時,類不能被繼承,修飾方法時,方法不能被重寫,修飾變量,值不能被修改;finally是在處理異常時,做用是關閉一些連接,它總會被執行,在return以前執行;finalize()是在清理垃圾以前執行的方法。

  1. Java中的異常類型有哪些,區別是什麼,舉例說明(至少3種以上)?

答:檢查異常:I/O異常,編譯以前就異常

運行時異常:nullpointerexception,程序遇到空指或未通過初始化的對象;

ArrayIndexOutOfBoundsException,數組下標越界異常;

FileNotFoundException,文件未找到異常;

SQLException,數據庫操做異常。

  1. Exception與Error有什麼區別?

答:Exception通常是程序錯誤,能夠被處理的;Error是系統錯誤或者資源錯誤,是不可控制的。

  1. Try-catch-finally塊處理順序?

答:先進try裏面,若是有異常,就會進入catch,若是沒有異常就不會進入catch,固然,finally是不管如何都要執行的,

  1. 談談你對ThreadLocal的理解?

答:threadLocal是指的當前線程範圍, 維護對象可見(變量副本,同一個線程的子線程之間不會有影響)。

  1. 什麼是JDBC,鏈接步驟是什麼?

答:JDBC就是數據庫鏈接,鏈接步驟是 加載驅動、創建鏈接、執行操做、關閉數據庫鏈接。

  1. String,StringBuffer,StringBuilder三者的區別?

答: String 字符串常量,長度不可變;StringBuffer 字符串變量(線程安全),長度可變;StringBuilder 字符串變量(非線程安全),長度可變。

  1. 什麼是單例模式,它的特色是什麼,請手寫一個單例模式?

答:單例模式就是在Java應用程序中,一個類Class只有一個實例存在。

public class Singleton {

private Singleton(){

}

private static Singleton instance = new Singleton();

public static Singleton getInstance() {

return instance;

}

}

  1. 常見的設計模式有哪些,談談你對工廠模式的理解?

答:工廠模式、原型模式、單例模式、適配器模式、橋接模式、裝飾者模式、代理模式等;工廠模式提供了一個接口,用於建立相關或者依賴對象的家族,而不須要指定具體實現類。

  1. Switch語句中case可否做用到String上,也就是如:case(「abc」)?

答:jdk1.7以後能夠,以前不能,switch語句的判斷條件能夠接受int,byte,char,short,不能接受其餘類型。

  1. 當關鍵字final分別修飾一個類,一個方法,一個變量時,各自起到什麼做用?

答:修飾類,類不能被繼承;修飾方法,方法不能被重寫;修飾變量,變量不能被修改。

  1. 什麼是JAVA的遞歸,什麼場景下使用?

答:遞歸作爲一種算法在程序設計語言中普遍應用.是指函數/過程/子程序在運行過程當中直接或間接調用自身而產生的重入現象;Java列出目錄下所有文件的時候可使用遞歸。(反覆調用本身的技術)

  1. 匿名內部類是否能夠繼承其餘類,是否能夠實現其餘接口?

答:匿名的內部類不能繼承其它類,但一個內部類能夠做爲一個接口,由另外一個內部類實現。

  1. 什麼時間使用assert(斷言)?

答:證實程序的正確性的時候可使用assert(斷言)。(單元測試)

  1. Math.round(11.5)等於多少,Math.round(-11.5)等於多少?

答:Math.round(11.5)等於12,Math.round(-11.5)等於-11。

  1. Short s = 1; s = s +1 ;有什麼錯,若是改爲s += 1;呢?

答:1不是Short,是int,須要強制轉換的;沒有錯,複合賦值表達式自動地將所執行計算的結果轉型爲其左側變量的類型。

  1. JAVA中是否有goto這個關鍵字?

答:goto是java語言中的保留字,目前尚未在java中使用。

  1. 接口是否能夠繼承接口,抽象類是否能夠實現接口,抽象類是否能夠繼承實現類?

答:接口能夠繼承接口;抽象類能夠實現接口;抽象類能夠繼承實體類,前提是實體類必須有明確的構造函數

  1. 構造器是否能夠被繼承,當構造器在重構時,須要注意的是什麼?

答:不能說能被繼承,由於只可以調用;注意寫無參構造函數參數就能夠了。

  1. 兩個對象值相同(x.equals(y)==true),說它們的hash code值是不同的,可對?

答:是同樣的,若是根據 equals(Object) 方法,兩個對象是相等的,那麼對這兩個對象中的每一個對象調用 hashCode 方法都必須生成相同的整數結果。

  1. Heap和stack有什麼區別?

答:heap(堆):是由malloc之類函數分配的空間所在地。地址是由低向高增加的。 stack(棧):是自動分配變量,以及函數調用的時候所使用的一些空間。地址是由高向低減小的,數據先存進後取出。

  1. JAVA中有幾種類型的流,JDK爲每種流提供了一些抽象類來繼承,分別是哪些?

答:字節流和字符流;InputStream、OutputStream、InputStreamReader、OutputStreamWriter。

  1. 什麼是java序列化,如何實現序列化?

答:序列化就是一種用來處理對象流的機制,所謂對象流也就是將對象的內容進行流化;(1) 實現了序列化接口Serializable,(2) 實現接口Externalizable,Externlizable。(對對象的數據進行存儲的時候用到序列化)

數據庫

  1. 談談你說知道的幾種關係型數據庫,並說說他們各自的特色?

答:mysql,體積小、速度快、功能性極強,小型項目;

Sqlserver,開放性、可伸縮性、並行性、性能穩定性,中大型項目;

Oracle,支持大數據庫、多用戶的高性能的事務處理,大型項目。

  1. PreparedStatement與Statement區別是什麼?

答:不管多少次地使用同一個SQL命令,PreparedStatement(效率高)都只對它解析和編譯一次。當使用Statement(效率低)對象時,每次執行一個SQL命令時,都會對它進行解析和編譯,使用PreparedStatement對象比使用Statement對象的速度更快。(性能)

  1. CallableStatement在什麼時間使用,用來準備CallableStatement的方法是?

答:CallableStatement 用來執行存儲過程; 準備CallableStatement 的方法是CallableStament.prepareCall();

  1. 常見的關係型數據庫有哪些,分頁關鍵字是什麼?

答:mysql,分頁關鍵字是limit;sqlserver,分頁關鍵字是top;oracle,分頁關鍵字是rownum。

  1. 分別使用mysql、sqlserver、oracle完成一個分頁語句,舉例?

答:mysql:select * from user limit 0,10;

Sqlserver:select top 30 * from user ;

Oracle:select * from ( select t.*,rownum from table1 t where condition ) where rownum>(pangeNow-1)*5 and rownum<=(pageNow)*5。

  1. 數據庫鏈接池是什麼,其做用是什麼?

答:數據庫鏈接是一種有限的昂貴的資源,數據庫鏈接影響到程序的性能指標;提升了性能的同時還保存了寶貴的資源,加強了系統的安全性和可管理性。

  1. Delete from table 和 Truncate from table 的區別?

答:(1)Truncate是總體刪除, delet是逐條刪除;(2) truncate不寫服務器log,不能回滾,delete寫服務器log,能夠回滾。

  1. 什麼是事務,事務有哪些屬性,並簡要說明下屬性的含義?

答:事務是訪問並可能更新數據庫中各類數據項的一個程序執行單元;事務應該具備4個屬性:原子性、一致性、隔離性、持續性。

原子性:一個事務是一個不可分割的工做單位;

一致性:事務必須是使數據庫從一個一致性狀態變到另外一個一致性狀態;

隔離性:一個事務的執行不能被其餘事務干擾;

持續性:指一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。

  1. 在一個千萬級的數據庫查詢中,如何提升查詢效率?分別說說你的數據庫設計,SQL語句,以及JAVA層次的解決方案。

答:數據庫表:

(1)避免全表掃描,考慮在where和order by涉及的列上創建索引;

(2)儘可能使用數字型字段,只含數值的字段儘可能設計不要設計爲字符;

(3)避免頻繁的建立與刪除臨時表。

(表分區:將數據分段,根據用戶需求在相應的段中進行查找;查詢時儘可能不要使用「 * 」;)

SQL語句:

(1)儘可能避免where中使用!=或<>操做符;

(2)儘可能避免where中使用or鏈接條件;

(3)慎用In和not in。

Java方面:

(1) 儘量少的建立對象;

(2)能夠適量利用緩存,減小數據庫請求。

  1. 談談你對索引的理解,哪些操做會致使索引失效,換句話說:你認爲在表中創建索引後就能夠提升數據庫的效率麼,爲何?

答:索引是對數據庫表中一個或多個列的值進行排序的結構。索引失效:隱式轉換致使索引失效、對索引列進行運算致使索引失效。索引是對數據庫表中一列或多列的值進行排序的一種結構,所以數據庫能夠根據其排序狀況提升查詢速度。

  1. 數據庫表設計中varchar與nvarchar的區別是什麼?

答:varchar是可變長度,非unicode的字符數據,長度介於1—8000;

    nvarchar是可變長度,是unicode的字符數據,長度介於1—4000。

  1. 數據庫中,關於臨時表的使用,須要注意什麼?

答:(1)臨時表實際上是放在數據庫tempdb裏的一個用戶表;

(2) 對於 本地臨時表 (#開頭的) 其餘會話沒法訪問數據與表結構;

(3) 通常會話關閉後,臨時表都會被刪除。

  1. Char類型的字段,是否能夠存儲一箇中文字符,爲何?

答:能夠。

  1. 數據庫中,什麼是重作,什麼是回滾?

答:回滾是未提交的事務,即該事務未被執行commit命令。

  1. 你是如何理解存儲過程與函數的,二者之間分別適合的場合是什麼?

答:(1)通常來講,存儲過程實現的功能要複雜一點,而函數的實現的功能針對性比較強,有輸入輸出時使用;(2)對於存儲過程來講能夠返回參數,而函數只能返回值或者表對象。

  1. 什麼是數據庫的觸發器,觸發器通常在什麼場合使用?

答:觸發器是數據庫中由一個時間觸發的特殊的存儲過程,他不是由程序調用也不是手工啓動的,數據的變動時。

  1. 什麼是數據庫的三範式,分別描述下?

答:(1)數據庫表的每一列都是不能夠分割的原子數據項(列不可再分);(2)在第一範式的基礎上,屬性徹底依賴於主鍵(行不可重複);(3)在知足第二範式的基礎上,任何非主屬性不得傳遞依賴於主屬性(不能有無關字段存在)。

  1. 數據庫查詢是union 和unionAll區別?

答:UNION 用於合併兩個或多個 SELECT 語句的結果集,並消去表中任何重複行,並排序;當 ALL 隨 UNION 一塊兒使用時(即 UNION ALL),不消除重複行。

  1. Lefe join ,inner join ,right join 三者之間分別查詢的是什麼數據?

答:left join(左聯接) 返回包括左表中的全部記錄和右表中聯結

字段相等的記錄;right join(右聯接) 返回包括右表中的全部記錄和左表中聯結字段相等的記錄,查不到返回爲null;

inner join(等值鏈接) 只返回兩個表中聯結字段相等的行。

WEB

  1. 什麼是servlet,其生命週期是?

答:servlet能夠被認爲是服務器端的applet。(CGI通用類,實現服務器和客戶端的交互)

生命週期:加載和實例化、初始化、請求處理、服務終止。

  1. 什麼是JSP,它與servlet有什麼關係?

答:jsp:java服務頁面,JSP編譯之後就是Servlet,兩者本質上是同樣的。JSP偏重於頁面顯示,servlet偏重於業務邏輯處理。

  1. 你使用過哪些WEB容器,如何修改Tomcat容器服務端口?

答:tomcat;在Tomcat的conf文件夾裏有個server.xml文件,裏面修改端口。

  1. 表單提交的方式,區別是?

答:Get、Post

(1)從安全性上,get<post。由於get方式提交的數據會顯示在瀏覽器的地址欄;

(2)從提交內容的大小上,get<post。get方式提交的數據受瀏覽器的限制;

(3)從請求響應的速度上,get>post。get方式提交的數據要求服務器當即響應,而post請求可能會造成一個請求隊列,不必定當即響應。

  1. JSP的隱含對象分別有哪些,各自的做用是什麼?

答:

(1) out用於發送輸出流到客戶端;

(2)  request被關聯到每個HTTP請求; 

(3) response把取得的數據返回到客戶端;

(4)  pageContext 提供訪問JSP頁面的命名空間 ;

(5) session存儲客戶端請求的信息,所以它是有狀態交互式的;

(6) application config包含了當前JSP/Servlet所在的WEB應用的配置信息;

(7) page 來源於當前被訪問JSP頁面的實例化。它實際使用的是JSP轉換成的Servlet;

(8) exception 用於捕獲JSP拋出的異常。它只有在JSP頁面屬性isErrorPage=true時纔可用。

  1. JSP中動態包含與靜態包含區別是什麼?

答:動態包含:老是會檢查頁面的變化,只會產生一個class文件,先編譯再包含,可傳遞參數;

靜態包含:不會檢查所含文件的變化,會產生多個class文件,先包含再編譯。

  1. 談談請求轉發與重定向的區別?

答:轉發:是服務器行爲,一次請求,URL不會改變,同時,在重定向的過程當中,傳輸的信息會被丟失;

重定向:是客戶端行爲,兩次請求,URL會改變,傳輸的信息不會丟失。

  1. 在JSP頁面中,頁面之間傳遞參數的方法有哪些?

答:(1) 直接在URL請求後添加;

(2) jsp:param;

(3) 設置session和request。

  1. 請說說Cookie與Session的區別,並簡述下Session工做原理?

答: cookie採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案;Session是在cookie的基礎上實現的,須要cookie獲得sessionId來獲得相應的session。Session工做原理:用戶登陸以後,將兌現存到session中,後臺經過sessionId來判斷

  1. Ajax技術原理是什麼,咱們爲何要使用?

答:Ajax(局部刷新技術)的工做原理至關於在用戶和服務器之間加了—箇中間層(AJAX引擎),使用戶操做與服務器響應異步化;這樣減小服務器的壓力,同時體驗也更加好。

  1. 什麼狀況下調用doGet()和doPost(),項目中,常常遇到doGet()中中文提交成了亂碼,爲何?

答:根據客戶端發送請求的方式調用對應的方法;沒有設置統一的編碼格式。(容器形成的)

 

框架

  1. 談談你對JaveEE的理解,而且說明框架的多層結構,簡要說明下各層之間的做用?

答:企業級開發應用,框架的多層結構通常指的是:表現層,主要用於處理程序的數據和進行方向;

業務層,處理接收到的數據和一些邏輯問題;持久層,用於和數據庫的交互。

  1. 如何使用springmvc,mybatis,spring框架技術開發web應用?

答:首先三個框架的jar包是必需的,而後是三個框架的xml配置文件,最後是在web.xml中配置配置Spring MVC 核心控制器 DispatcherServlet和一些過濾器等。Springmvc表現層框架,mybatis持久層框架,spring整合,解耦

  1. 談談你對mvc的理解,或者說:什麼是mvc?

答:mvc是一種設計典範,用於將邏輯、數據、界面分離。

M是模型,表示應用程序核心(好比數據庫記錄列表);

V是視圖,顯示數據(數據庫記錄);

C是控制器,處理輸入(寫入數據庫記錄)。

  1. 談談你對spring框架的理解?

答:Spring是一個組合式框架,解耦,其核心是IoC(依賴於容器),

AOP面向切面編程,進行事務管理。

  1. 什麼是IOC,AOP,其各自做用是什麼,大家項目中在什麼地方用到過?

答:IoC就是控制反轉,在Java開發中,將設計好的類交給系統去控制,而不是在本身的類內部控制;AOP就是面向切面編程,能夠經過預編譯方式和運行期動態代理實如今不修改源代碼的狀況下給程序動態統一添加功能的一種技術。主要是在記錄日誌的時候可使用。

  1. Hibernate工做原理,簡述下該框架的優缺點?

答:hibernate是ORM框架,它對jdbc進行了封裝,在分層結構中處於持久化層。(經過configiration對象讀取配置文件,)

優勢:透明持久化、事務、移植性會很好;

缺點:不能進行批量操做,不靈活,性能比hibernate低。

  1. 簡述下你對mybatis框架的理解?

答:mybatis根據XML配置文件或者是JAVA代碼的註解,經過SqlSession實例直接運行映射的sql語句,完成對數據的增刪改查和事務提交等,半自動化的持久層框架,靈活處理類與類之間的關係,性能好,全部的sql寫在配置文件中,不須要將注意點放在java代碼上。

  1. Hibernate與mybatis兩種持久層框架,他們各自特色是什麼?

答:mybatis:小巧、方便、高效、簡單、直接、半自動;

hibernate:強大、方便、高效、複雜、繞彎子、全自動。

  1. 在Hibernate中,如何實現對象的懶加載(延遲加載)?

答:在實體的映射配置文件中將class的lazy屬性設置爲true,來開啓實體的延遲加載特性。

  1. Hibernate框架中JAVA對象有幾種狀態,分別是哪些,各自的特色是?

答:瞬時狀態:當對象才被建立時,未被session管理;

持久狀態:被session管理,與數據庫操做同步;

遊離狀態:操做後,脫離session管理。

  1. Hibernate框架中處理實現類與類之間的關係?

答:能夠經過配置文件來映射,固然也能夠經過註解。(一對1、一對多、多對多)

  1. Hibernate框架中,如何實現性能調優?

答:(1)數據庫的設計;

(2)映射文件的優化;

(3)合理使用緩存。

  1. Inverse=「true」,這條語句在hibernate配置中有什麼做用?casecode—級聯

答:控制反轉。

  1. Session.get()與session.load(),兩個方法有什麼不一樣,各自的執行順序是什麼?

答:get()方法先查一級緩存,再查二級緩存,數據庫,直接返回實體類,若是查不到數據則返回null;load先到緩存(session緩存/二級緩存)中去查,若是沒有則返回一個代理對象(不立刻到DB中去找),等後面使用這個代理對象操做的時候,纔到DB中查詢。

  1. 談談你對Hibernate二級緩存的理解?

答:Hibernate自己並未提供二級緩存的產品化實現(只提供了一個基HashTable的簡單緩存以供調試)。SessionFactory,一級緩存關閉後二級緩存就生效

不能放的,常常被修改的,常常被訪問的,

  1. 什麼是樂觀鎖,什麼是悲觀鎖,各自特色是?

答:悲觀鎖,認爲別人訪問正在改變的數據的機率是很高的,因此從數據開始更改時就將數據鎖住,直到更改完成才釋放,效率低。

樂觀鎖,認爲別人訪問正在改變的數據的機率是很低的,因此直到修改完成準備提交所作的的修改到數據庫的時候纔會將數據鎖住。完成更改後釋放。

  1. 說說struts2的工做流程,談談你對struts2核心控制器的理解?

答:工做流程:

客戶端請求;

經一系列過濾器到達FilterDispatcher核心控制器;

ActionMapper來決定這個請求是否須要調用某個Action;

若是須要,FilterDispatcher把請求的處理交給ActionProxy;

ActionProxy經過Configuration Manager詢問框架的配置文件,找到須要調用的Action類;

ActionProxy建立一個ActionInvocation的實例;

action執行完畢後,返回一個result字符串,此時再按相反的順序經過Intercepter攔截器。

  1. Springmvc 框架是如何實現mvc的,核心類分別是?

答:模型:javabean,視圖:  控制器:DispatcherServlet+controller+  經過配置文件,核心類是DispatcherServlet

  1. Springmvc框架的工做流程是?

答:客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,若是存在指定映射路徑,web容器將請求轉交給DispatcherServle;

DipatcherServlet接收到這個請求以後將根據請求的信息以及HandlerMapping的配置找處處理請求的處理器(Handler);

DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的調用;

Handler對數據處理完成之後將返回一個ModelAndView()對象給DispatcherServlet;

DispatcherSevlet經過ViewResolver將邏輯視圖轉化爲真正的視圖View;

Dispatcher經過model解析出ModelAndView()中的參數進行解析最終展示出完整的view並返回給客戶端。

  1. Mybatis框架的工做原理是,咱們爲何要使用?

答:Mybatis經過與本身Mapper對應的xml配置文件,來進行對數據庫的操做。

  1. 談談Struts2 和 springmvc框架之間各自的優缺點?

答:Struts2:Struts2基於MVC架構,框架結構清晰,開發流程一目瞭然,開發人員能夠很好的掌控開發的過程;強大的攔截器;易於測試;易於擴展的插件機制;模塊化;全局結果與聲明式異常。

Springmvc:沒有封裝那麼多,運行起來很快,控制器是單例的。

  1. 大家項目中,是如何處理事務,事務通常能夠分爲幾種?

答:把事務交給spring處理,propagation 和 read-only。

  1. 談談spring事務的隔離級別和傳播行爲?

答:PROPAGATION_SUPPORTS--支持當前事務,若是當前沒有事務,就以非事務方式執行;

PROPAGATION_MANDATORY--支持當前事務,若是當前沒有事務,就拋出異常;PROPAGATION_REQUIRES_NEW--新建事務,若是當前存在事務,把當前事務掛起;

PROPAGATION_NOT_SUPPORTED--以非事務方式執行操做,若是當前存在事務,就把當前事務掛起;

PROPAGATION_NEVER--以非事務方式執行,若是當前存在事務,則拋出異常。

擴展

  1. 請談談你項目中用戶,角色,權限三種對象模型之間的關係,並創建對應的表結構?

答:用戶表中有角色表的外鍵,一對多,角色表和權限表爲多對多,創建中間表。

  1. 若是你項目有不少版本,怎麼樣保證你的用戶正常實現版本的新舊交替?

答:採用版本控制,沒個版本有一個版本號,經過版本號找到對應的代碼,每一個版本之間沒有任何關係

  1. 一個3升水杯,一個5升水杯,如何倒出4升水,7升水?

答:(4升)用三升的杯子先盛滿水,倒入五升的杯中,而後繼續盛滿三升的水杯,繼續倒入五升的杯中,此時,三升的杯中會剩下一升的水,此時,將五升的水倒掉,將一升裝入,再裝滿三升水杯,倒入五升水杯中便可;

(7升)上訴步驟中再將3升杯裝滿,一共就是7升了。

相關文章
相關標籤/搜索