題目來自http://www.codeceo.com/article/201-java-interview-qa.html,答案本身網上找的,若有疏漏,歡迎斧正。一塊兒學習,共同進步。css
1. String類爲何是final的。html
2. HashMap的源碼,實現原理,底層結構。java
3. 說說你知道的幾個Java集合類:list、set、queue、map實現類咯。程序員
4. 描述一下ArrayList和LinkedList各自實現和區別。web
5. Java中的隊列都有哪些,有什麼區別。算法
6. 反射中,Class.forName和classloader的區別。spring
7. Java七、Java8的新特性(baidu問的,好BT)。sql
8. Java數組和鏈表兩種結構的操做效率,在哪些狀況下(從開頭開始,從結尾開始,從中間開始),哪些操做(插入,查找,刪除)的效率高。數據庫
9. Java內存泄露的問題調查定位:jmap,jstack的使用等等。apache
10. string、stringbuilder、stringbuffer區別。
11. hashtable和hashmap的區別。
13.異常的結構,運行時異常和非運行時異常,各舉個例子。
14.String a= 「abc」 String b = 「abc」 String c = new String(「abc」) String d = 「ab」 + 「c」 .他們之間用 == 比較的結果。
15. String 類的經常使用方法。
16. Java 的引用類型有哪幾種。
17. 抽象類和接口的區別?
接口(interface)能夠說成是抽象類的一種特例,接口中的全部方法都必須是抽象的。接口中的方法定義默認爲public abstract類型,接口中的成員變量類型默認爲public static final。另外,接口和抽象類在方法上有區別:
(1) 抽象類能夠有構造方法,接口中不能有構造方法。
(2) 抽象類中能夠包含非抽象的普通方法,接口中的全部方法必須都是抽象的,不能有非抽象的普通方法。Java 8裏的接口能夠有default方法。
(3) 抽象類中能夠有普通成員變量,接口中沒有普通成員變量。
(4) 抽象類中的抽象方法的訪問類型能夠是public,protected和默認類型。
(5) 抽象類中能夠包含靜態方法,接口中不能包含靜態方法。
(6) 抽象類和接口中均可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型能夠任意,但接口中定義的變量只能是public static final類型,而且默認即爲public static final類型。
(7) 一個類能夠實現多個接口,但只能繼承一個抽象類。兩者在應用方面也有必定的區別:接口更多的是在系統架構設計方法發揮做用,主要用於定義模塊之間的通訊契約。而抽象類在代碼實現方面發揮做用,能夠實現代碼的重用,例如,模板方法設計模式是抽象類的一個典型應用,假設某個項目的全部Servlet類都要用相同的方式進行權限判斷、記錄訪問日誌和處理異常,那麼就能夠定義一個抽象的基類,讓全部的Servlet都繼承這個抽象基類,在抽象基類的service方法中完成權限判斷、記錄訪問日誌和處理異常的代碼,在各個子類中只是完成各自的業務邏輯代碼。
18. java的基礎類型和字節大小。
Java基本類型共有八種,基本類型能夠分爲三類,字符類型char,布爾類型boolean以及數值類型byte、short、int、long、float、double。數值類型又能夠分爲整數類型byte、short、int、long和浮點數類型float、double。JAVA中的數值類型不存在無符號的,它們的取值範圍是固定的,不會隨着機器硬件環境或者操做系統的改變而改變。實際上,JAVA中還存在另一種基本類型void,它也有對應的包裝類 java.lang.Void,不過咱們沒法直接對它們進行操做。8 中類型表示範圍以下:
byte:8位,最大存儲數據量是255,存放的數據範圍是-128~127之間。
short:16位,最大數據存儲量是65536,數據範圍是-32768~32767之間。
int:32位,最大數據存儲容量是2的32次方減1,數據範圍是負的2的31次方到正的2的31次方減1。
long:64位,最大數據存儲容量是2的64次方減1,數據範圍爲負的2的63次方到正的2的63次方減1。
float:32位,數據範圍在3.4e-45~1.4e38,直接賦值時必須在數字後加上f或F。
double:64位,數據範圍在4.9e-324~1.8e308,賦值時能夠加d或D也能夠不加。
boolean:只有true和false兩個取值。
char:16位,存儲Unicode碼,用單引號賦值。
Java決定了每種簡單類型的大小。這些大小並不隨着機器結構的變化而變化。這種大小的不可更改正是Java程序具備很強移植能力的緣由之一。下表列出了Java中定義的簡單類型、佔用二進制位數及對應的封裝器類。
19. Hashtable,HashMap,ConcurrentHashMap底層實現原理與線程安全問題?
可參考的文章:Hashmap實現原理淺析:http://www.cnblogs.com/lzrabbit/p/3721067.html
ConcurrentHashMap原理分析:http://www.cnblogs.com/ITtangtang/p/3948786.html
20.若是不讓你用Java Jdk提供的工具,你本身實現一個Map,你怎麼作。說了很久,說了HashMap源代碼,若是我作,就會借鑑HashMap的原理,說了一通HashMap實現。
21.Hash衝突怎麼辦?哪些解決散列衝突的方法?
22.HashMap衝突很厲害,最差性能,你會怎麼解決? 從O(n)提高到log(n),用二叉排序樹的思路說了一通。
23.rehash。
24.hashCode() 與 equals() 生成算法、方法怎麼重寫。
1.講講IO裏面的常見類,字節流、字符流、接口、實現類、方法阻塞。
2.講講NIO。
3.String 編碼UTF-8 和GBK的區別?
4.何時使用字節流、何時使用字符流?
5.遞歸讀取文件夾下的文件,代碼怎麼實現。
1.session和cookie的區別和聯繫,session的生命週期,多個服務部署時session管理。
2.servlet的一些相關問題。
3.webservice相關問題。
4.jdbc鏈接,forName方式的步驟,怎麼聲明使用一個事務。舉例並具體代碼。
參考文章:http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html
5.無框架下配置web.xml的主要配置內容。
web.xml配置詳解1: http://www.javashuo.com/article/p-apwqyjsj-bn.html
web.xml配置詳解2: http://www.cnblogs.com/chinafine/archive/2010/09/02/1815980.html
6.jsp和servlet的區別。
(1) jsp經編譯後就變成了Servlet.(JSP的本質就是Servlet,JVM只能識別java的類,不能識別JSP的代碼, Web容器將JSP的代碼編譯成JVM可以識別的java類)
(2) jsp更擅長表現於頁面顯示, servlet更擅長於邏輯控制.
(3) Servlet中沒有內置對象,Jsp中的內置對象都是必須經過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象獲得.
Jsp是Servlet的一種簡化,使用Jsp只須要完成程序員須要輸出到客戶端的內容,Jsp中的Java腳本如何鑲嵌到一個類中,由Jsp容器完成。而Servlet則是個完整的Java類,這個類的Service方法用於生成對客戶端的響應。
1.Java的內存模型以及GC算法。
參考答案:http://blog.csdn.net/kingofworld/article/details/17718587
2.jvm性能調優都作了什麼。
JVM性能調優: http://www.cnblogs.com/chen77716/archive/2010/06/26/2130807.html
深刻理解JVM性能調優: http://www.open-open.com/lib/view/open1334729637702.html
3.介紹JVM中7個區域,而後把每一個區域可能形成內存的溢出的狀況說明。
深刻理解JVM以內存區域與內存溢出: http://www.codeceo.com/article/jvm-memory-overflow.html
4.介紹GC 和GC Root不正常引用。
沒有找到很好的答案,只找到了關於GC Root的介紹:http://blog.csdn.net/fenglibing/article/details/8928927
5.本身從classload加載方式,加載機制說開去,從程序運行時數據區,講到內存分配,講到String常量池,講到JVM垃圾回收機制,算法,hotspot。反正就是各類擴展。
6.jvm 如何分配直接內存, new 對象如何不分配在堆而是棧上,常量池解析.
(2) JAVA NEW關鍵字分配的對象只能在堆上。
7.數組多大放在 JVM 老年代。(不僅是設置 PretenureSizeThreshold ,問一般多大,沒作過一問便知)
大對象直接進入老年代: http://book.51cto.com/art/201107/278927.htm
Java整型數組的最大長度到底有多長: http://blog.csdn.net/mayumin/article/details/5904974
8.老年代中數組的訪問方式
JVM的內存分配及運行機制: http://www.cnblogs.com/200911/p/3922704.html
沒有被GC回收,在不在老年代都經過數組引用訪問.
9.GC算法,永久代對象如何GC,GC有環怎麼處理。
1) Java的GC機制及算法: http://blog.chinaunix.net/uid-7374279-id-4489100.html
Java GC基本算法: http://www.blogjava.net/showsun/archive/2011/07/21/354745.html
2) Java內存區域和GC機制: http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html
永久代的回收有兩種:常量池中的常量,無用的類信息,常量的回收很簡單,沒有引用了就能夠被回收。對於無用的類進行回收,必須保證3點:
(1) 類的全部實例都已經被回收;
(2) 加載類的ClassLoader已經被回收;
(3) 類對象的Class對象沒有被引用(即沒有經過反射引用該類的地方).3) 基於引用對象遍歷的垃圾回收器能夠處理循環引用,只要是涉及到的對象不能從GC Roots強引用可到達,垃圾回收器都會進行清理來釋放內存。
10.誰會被GC,何時 GC。
(1) 超出了做用域或引用計數爲空的對象;從gc root開始搜索找不到的對象,並且通過一次標記、清理,仍然沒有復活的對象。
(2) 程序員不能具體控制時間,系統在不可預測的時間調用System.gc()函數的時候;固然能夠經過調優,用NewRatio控制newObject和oldObject的比例,用MaxTenuringThreshold 控制進入oldObject的次數,使得oldObject 存儲空間延遲達到full gc,從而使得計時器引起gc時間延遲OOM的時間延遲,以延長對象生存期。
11.若是想不被GC怎麼辦。
只要存在某對象的強引用,就不會被GC回收.
12.若是想在GC中生存1次怎麼辦。
想在對象生命週期中至少被GC一次後存活,最簡單的方法是重寫Object的finalize()。
1.Hibernate和ibatis的區別.
參考答案:http://www.cnblogs.com/mingyongcheng/p/3588100.html
2.講講mybatis的鏈接池。
《深刻理解mybatis原理》Mybatis數據源與鏈接池: http://blog.csdn.net/luanlouis/article/details/37671851
3.Spring框架中須要引用哪些jar包,以及這些jar包的用途.
Spring—jar包詳解: http://www.cnblogs.com/yanjunwu/archive/2013/04/06/3001927.html
4.SpringMVC的原理.
(1) SpringMVC 的工做原理: http://www.cnblogs.com/zbf1214/p/5265117.html
(2) Spring框架和MVC原理: http://www.cnblogs.com/jingmoxukong/p/4506493.html
5.SpringMVC註解的意思.
SpringMVC經常使用的註解和含義: http://blog.csdn.net/dandandeshangni/article/details/47974461
6.Spring中beanFactory和ApplicationContext的聯繫和區別.
BeanFactory 和 ApplicationContext 的區別: http://www.cnblogs.com/lihuiyy/archive/2012/05/22/2512712.html
Spring中ApplicationContext和beanfactory區別: http://blog.csdn.net/hi_kevin/article/details/7325554
7.Spring注入的幾種方式(循環注入).
Spring四種依賴注入方式: http://blessht.iteye.com/blog/1162131
(1)Set注入;
(2)構造器注入;
(3)靜態工廠的方法注入;
(4)實例工廠的方法注入.
8.Spring如何實現事物管理的.
Spring事務管理: http://www.cnblogs.com/newsouls/p/3988216.html
9.SpringIOC.
談談對Spring IOC的理解: http://www.cnblogs.com/xdp-gacl/p/4249939.html
10.Spring AOP的原理.
(1) 代理類的生成與載入;
(2) 攔截鏈的理解與闡述.
Spring的AOP原理: https://my.oschina.net/elain/blog/382494
11.Hibernate中的1級和2級緩存的使用方式以及區別原理(Lazy-Load的理解).
Hibernate緩存:一級緩存和二級緩存: http://www.cnblogs.com/200911/archive/2012/10/09/2716873.html
1)延遲加載 : 當程序執行getter方法獲取時,才發送sql語句加載數據.
延遲加載給程序帶來好處,可是要避免session過早關閉問題.
(1)load()和get()兩個方法區別:
load()採用延遲加載機制,返回的是一個proxy代理對象
get()沒有采用延遲加載,返回的是一個對象實例
(2)Hibernate.initialize(user): 能夠強制user對象實例化
(3)hbm映射描述文件中,<class>,<property>,<set>等元素, 均可以使用lazy屬性,默認lazy="true",啓用延遲加載.
2)緩存機制
Hibernate每次查詢先去緩存中查找,沒有才去數據庫查詢.
(1)一級緩存:
Session級別的緩存,緩存load,get出來的單個對象.默認開啓.
使用同一個Session對象屢次查詢同一個User對象,只會發送一次SQL取數據庫獲取.
(2)二級緩存
SessionFactory級別的緩存.默認狀況是關閉.
①首先在hibernate.cfg.xml中指定EhCache緩存策略.
②在src下添加ehcache.xml配置文件.
③在User.hbm.xml中添加<cache/>定義.
<cache usage="read-only"/>,若是涉及更新,使用read-write.
12.Hibernate的原理體系架構,五大核心接口,Hibernate對象的三種狀態轉換,事務管理。
參考答案: http://blog.csdn.net/martinmateng/article/details/50879436
Hibernate的工做原理和體系結構: http://hong0104.iteye.com/blog/760813
Hibernate事務管理: http://xmllong.iteye.com/blog/1436769
1.Http是無狀態通訊,http的請求方式有哪些,能夠本身定義新的請求方式麼。
2.Socket通訊,以及長鏈接,分包,鏈接異常斷開的處理。
Socket通訊原理簡介: http://www.jianshu.com/p/90348ef3f41e
Socket通訊原理探討: http://www.cnblogs.com/fuchongjundream/p/3914696.html
3.Socket通訊模型的使用,AIO和NIO。
也談BIO | NIO | AIO: https://my.oschina.net/bluesky0leon/blog/132361
4.Socket框架netty的使用,以及NIO的實現原理,爲何是異步非阻塞。
Netty原理和使用: http://www.jdon.com/concurrent/netty.html
5.同步和異步,阻塞和非阻塞。
同步與異步的概念: http://blog.chinaunix.net/uid-21411227-id-1826898.html
Socket阻塞與非阻塞,同步與異步、I/O模型: http://blog.csdn.net/hguisu/article/details/7453390
6.OSI七層模型,包括TCP,IP的一些基本知識.
TCP IP基礎知識的複習: http://www.cnblogs.com/rollenholt/archive/2012/04/25/2469592.html
7.Http中,get post的區別.
GET和POST有什麼區別: http://www.cnblogs.com/nankezhishi/archive/2012/06/09/getandpost.html
8.說說http,tcp,udp之間關係和區別。
TCP、UDP和HTTP詳解: http://blog.sina.com.cn/s/blog_bf9843bf0101j5w8.html
HTTP TCP UDP Socket關係的幾個經典圖: http://www.cnblogs.com/ghj1976/p/4295346.html
9.說說瀏覽器訪問www.taobao.com,經歷了怎樣的過程。
首先是查找瀏覽器緩存,瀏覽器會保存一段時間你以前訪問過的一些網址的DNS信息,不一樣瀏覽器保存的時常不等。
若是沒有找到對應的記錄,這個時候瀏覽器會嘗試調用系統緩存來繼續查找這個網址的對應DNS信息。
若是仍是沒找到對應的IP,那麼接着會發送一個請求到路由器上,而後路由器在本身的路由器緩存上查找記錄,路由器通常也存有DNS信息。
若是仍是沒有,這個請求就會被髮送到ISP(注:Internet Service Provider,互聯網服務提供商,就是那些拉網線到你家裏的運營商,中國電信中國移動什麼的),ISP也會有相應的ISP DNS服務器,一聽中國電信就知道這個DNS服務器的規模確定不會小,因此基本上都能在這裏找獲得。題外話:會跑到這裏進行查詢是由於你沒有改動過"網絡中心"的"ipv4"的DNS地址,萬惡的電信聯通能夠改動了這個DNS服務器,換句話說他們可讓你的瀏覽器跳轉到他們設定的頁面上,這也就是人盡皆知的DNS和HTTP劫持,ISP們還美名曰「免費推送服務」。強烈鄙視這種霸王行爲。咱們也能夠自行修改DNS服務器來防止DNS被ISP污染。
若是仍是沒有的話, 你的ISP的DNS服務器會將請求發向根域名服務器進行搜索。根域名服務器就是面向全球的頂級DNS服務器,共有13臺邏輯上的服務器,從A到M命名,真正的實體服務器則有幾百臺,分佈於全球各大洲。因此這些服務器有真正完整的DNS數據庫。若是到了這裏仍是找不到域名的對應信息,那隻能說明一個問題:這個域名原本就不存在,它沒有在網上正式註冊過。或者賣域名的把它回收掉了(一般是由於欠費)。
這也就是爲何打開一個新頁面會有點慢,由於本地沒什麼緩存,要這樣遞歸地查詢下去。
多說一句,例如"mp3.baidu.com",域名先是解析出這是個.com的域名,而後跑到管理.com域名的服務器上進行進一步查詢,而後是.baidu,最後是mp3,
因此域名結構爲:三級域名.二級域名.一級域名。
瀏覽器終於獲得了IP之後,瀏覽器接着給這個IP的服務器發送了一個http請求,方式爲get,例如訪問nbut.cn
這個get請求包含了主機(host)、用戶代理(User-Agent),用戶代理就是本身的瀏覽器,它是你的"代理人",Connection(鏈接屬性)中的keep-alive表示瀏覽器告訴對方服務器在傳輸完如今請求的內容後不要斷開鏈接,不斷開的話下次繼續鏈接速度就很快了。其餘的顧名思義就好了。還有一個重點是Cookies,Cookies保存了用戶的登錄信息,在每次向服務器發送請求的時候會重複發送給服務器。Corome上的F12與Firefox上的firebug(快捷鍵shift+F5)都可查看這些信息。
發送完請求接下來就是等待迴應了,以下圖:
固然了,服務器收到瀏覽器的請求之後(實際上是WEB服務器接收到了這個請求,WEB服務器有iis、apache等),它會解析這個請求(讀請求頭),而後生成一個響應頭和具體響應內容。接着服務器會傳回來一個響應頭和一個響應,響應頭告訴了瀏覽器一些必要的信息,例如重要的Status Code,2開頭如200表示一切正常,3開頭表示重定向,4開頭,如404,呵呵。響應就是具體的頁面編碼,就是那個<html>......</html>,瀏覽器先讀了關於這個響應的說明書(響應頭),而後開始解析這個響應並在頁面上顯示出來。在下一次CF的時候(不是穿越火線,是http://codeforces.com/),因爲常常難以承受幾千人的同時訪問,因此CF頁面常常會出現崩潰頁面,到時候能夠點開火狐的firebug或是Chrome的F12看看狀態,不過這時候通常都急着看題和提交代碼,彷佛根本就沒心情理會這個狀態吧。
若是是個靜態頁面,那麼基本上到這一步就沒了,可是現在的網站幾乎沒有靜態的了吧,基本全是動態的。因此這時候事情還沒完,根據咱們的經驗,瀏覽器打開一個網址的時候會慢慢加載這個頁面,一部分一部分的顯示,直到徹底顯示,最後標籤欄上的圈圈就不轉了。
這是由於,主頁(index)頁面框架傳送過來之後,瀏覽器還要繼續向服務器發送請求,請求的內容是主頁裏面包含的一些資源,如圖片,視頻,css樣式等等。這些"非靜態"的東西要一點點地請求過來,因此標籤欄轉啊轉,內容刷啊刷,最後所有請求並加載好了就終於好了。
須要說明的是,對於靜態的頁面內容,瀏覽器一般會進行緩存,而對於動態的內容,瀏覽器一般不會進行緩存。緩存的內容一般也不會保存好久,由於難保網站不會被改動。
10.HTTP協議、 HTTPS協議,SSL協議及完整交互過程.
HTTPS協議, SSL協議及完整交互過程: http://blog.csdn.net/dfsaggsd/article/details/50910999
HTTP協議詳解: http://www.cnblogs.com/EricaMIN1987_IT/p/3837436.html
11.Tcp的擁塞,快回傳,ip的報文丟棄.
TCP的擁塞控制: http://blog.csdn.net/sicofield/article/details/9708383
IP報文頭詳解以及定義: http://www.cnblogs.com/xsiedu/articles/1741584.html
12.Https處理的一個過程,對稱加密和非對稱加密.
對稱加密與非對稱加密: http://www.cnblogs.com/jfzhu/p/4020928.html
SSH加密原理、RSA非對稱加密算法學習與理解: https://my.oschina.net/realfighter/blog/388486
13.Head各個特色和區別.