1. 程式人生 > >JavaWeb開發面試題

JavaWeb開發面試題

一、Java基礎

1. String類為什麼是final的。

避免繼承改寫,提高效能,常量池

2. HashMap的原始碼,實現原理,底層結構。

連結串列+陣列

3. 說說你知道的幾個Java集合類:list、set、queue、map實現類咯。。。

list的實現包含了ArrayListLinkedList 對應的安全類分別為 Vector和?

set通過hashMap實現

queue佇列,linkedBlockQueue

4. 描述一下ArrayList和LinkedList各自實現和區別

陣列和連結串列的方式

5. Java中的佇列都有哪些,有什麼區別。

?阻塞佇列和非阻塞佇列

6. 反射中,Class.forName和classloader的區別

?Class.forName首先通過類載入classLoader載入

7. Java7、Java8的新特性(baidu問的,好BT)

java8函數語言程式設計

8. Java陣列和連結串列兩種結構的操作效率,在哪些情況下(從開頭開始,從結尾開始,從中間開始),哪些操作(插入,查詢,刪除)的效率高

連結串列在插入刪除都比陣列高,如果是結尾則大致相同

陣列在查詢比較高

9. Java記憶體洩露的問題調查定位:jmap,jstack的使用等等

jdk下的相關工具

10. string、stringbuilder、stringbuffer區別

string在方法區有常量池,builder和buffer採用堆物件的形式。後者執行緒安全,效率低。

11. hashtable和hashmap的區別

table執行緒安全效率低

13 .異常的結構,執行時異常和非執行時異常,各舉個例子

異常一般分為執行時和非執行時,執行時的比如空指標異常,越界異常,類轉換異常

非執行時的比如檔案找不到異常,IO異常

14. String a= “abc” String b = “abc” Stringc = new String(“abc”) String d = “ab” + “c” .他們之間用 == 比較的結果

a 、b、c true

c false

15. String 類的常用方法

charAt

getBytes

reverse

16. Java 的引用型別有哪幾種

四種

強 弱 虛 ?

17. 抽象類和介面的區別

主要是多繼承和單繼承的區別

抽象類可以包含普通方法

18. java的基礎型別和位元組大小。

byte short int long float double boolean  char

8   16   32  64  32  64   ?     16

19. Hashtable,HashMap,ConcurrentHashMap 底層實現原理與執行緒安全問題(建議熟悉 jdk 原始碼,才能從容應答)

table即加同步鎖的HashMap, ConcurrentHashMap加分段鎖

20. 如果不讓你用Java Jdk提供的工具,你自己實現一個Map,你怎麼做。說了好久,說了HashMap原始碼,如果我做,就會借鑑HashMap的原理,說了一通HashMap實現

? 怎麼實現HashMap ,定義陣列然後擴容,+連結串列?

21. Hash衝突怎麼辦?哪些解決雜湊衝突的方法?

擴容因子?

22. HashMap衝突很厲害,最差效能,你會怎麼解決?從O(n)提升到log(n)咯,用二叉排序樹的思路說了一通

??

23. rehash

??

24. hashCode() 與equals() 生成演算法、方法怎麼重寫

IDE直接重寫

二、Java IO

1. 講講IO裡面的常見類,位元組流、字元流、介面、實現類、方法阻塞。

位元組流 FileInputStream

字元流 FileReader和FileWriter

介面 InputStream  OutputStream

??

2. 講講NIO。

選擇器 緩衝和通道

3. String 編碼UTF-8 和GBK的區別?

UTF-8的編碼 中文字元 3個位元組英文1個字元

GBK是 2個位元組中文字元?

4. 什麼時候使用位元組流、什麼時候使用字元流?

大檔案用字元流,檔案小可以用位元組流或者序列化的時候?

5. 遞迴讀取資料夾下的檔案,程式碼怎麼實現

File.isDireatory 和File.isFile過載本方法

三、Java Web

1. session和cookie的區別和聯絡,session的生命週期,多個服務部署時session管理。

cookie在客戶端,session在服務端,session在request請求時建立,如果沒有在getSession的時候建立,會話結束,伺服器到期,sessionid就變化,多伺服器部署可以將session存在redis中,或者持續化到本地,??

2. servlet的一些相關問題

servlet 容器tomcat   servlet上下文初始化 ,監聽器 ,過濾器 ,servlet

3. webservice相關問題

應用伺服器 tomcat jetty

4. jdbc連線,forname方式的步驟,怎麼宣告使用一個事務。舉例並具體程式碼

載入驅動

建立連線後設置自動提交為flase,然後相應的操作。

5. 無框架下配置web.xml的主要配置內容

servlet及servlet的對映路徑,歡迎頁面,錯誤頁面等

過濾器,監聽器

6. jsp和servlet的區別

jsp管檢視端

servlet控制層

四、JVM

1. Java的記憶體模型以及GC演算法

分為方法區、堆,本地方法區、棧、程式計數器,方法區和堆是共享區,其它是私有區

也可以用執行緒私有變數

GC演算法主要是標記清理,整理清理, 現在的演算法主要次用G1 併發清理演算法

2. jvm效能調優都做了什麼

設定堆區、方法區、棧區等合適大小避免記憶體溢位

3. 介紹JVM中7個區域,然後把每個區域可能造成記憶體的溢位的情況說明

方法區,如果使用很多的string常量會導致溢位

堆區,如果使用很多的新建物件會溢位

棧區,如果int被遞迴計算很多次,可能使得棧深度過深,導致棧溢位

直接記憶體,可能在寫IO的時候導致

4. 介紹GC 和GC Root不正常引用。

如果檢查到GC root沒有相應的引用就放到一個回收佇列中進行回收,在回收之前有最後一次寄回,就是 finiziled

5. 自己從classload 載入方式,載入機制說開去,從程式執行時資料區,講到記憶體分配,講到String常量池,講到JVM垃圾回收機制,演算法,hotspot。反正就是各種擴充套件

???

6. jvm 如何分配直接記憶體,new 物件如何不分配在堆而是棧上,常量池解析

??分配在棧上? 方法區也是堆吧

7. 陣列多大放在 JVM 老年代(不只是設定 PretenureSizeThreshold ,問通常多大,沒做過一問便知)

??

8. 老年代中陣列的訪問方式

??

9. GC 演算法,永久代物件如何 GC, GC 有環怎麼處理

??當新生代即其它代GC不夠時,永久代進行GC,採用整理清除法

10. 誰會被 GC ,什麼時候 GC

沒有root了

11. 如果想不被 GC 怎麼辦

強引用存活

12. 如果想在 GC 中生存 1 次怎麼辦

finalized

五、開源框架

1. hibernate和ibatis的區別

??

ibatis 更新                                                     

2. 講講mybatis的連線池。

??

3. spring框架中需要引用哪些jar包,以及這些jar包的用途

context core bean 等基礎jar包,mvc需要mvc aopjdbc等

4. springMVC的原理

分層開發,將物件模型、檢視層、控制層分開,使用ModelAndView來封裝模型資料和檢視資料,在控制層進行處理和傳遞,採用責任鏈的模式進行攔截。???

5. springMVC註解的意思

@Controller 控制層

@Service 服務層

@Compement 持久層

@RequestMapping 訪問URL

@Bean 注入

6. spring中beanFactory和ApplicationContext的聯絡和區別

??

7. spring注入的幾種方式(迴圈注入)

set注入

和構造注入

8. spring如何實現事物管理的

aop來實現事務管理 ??

9. springIOC

控制反轉,依賴注入,在需要的時候進行注入關聯

10. spring AOP的原理

動態代理模式,利用JDK或者cglib的方法

11. hibernate中的1級和2級快取的使用方式以及區別原理(Lazy-Load的理解)

??

12. Hibernate的原理體系架構,五大核心介面,Hibernate物件的三種狀態轉換,事務管理。

??

六、多執行緒

1. Java建立執行緒之後,直接呼叫start()方法和run()的區別

run是普通方法,start是執行緒方法

2. 常用的執行緒池模式以及不同執行緒池的使用場景

都用自定義的方式?

3. newFixedThreadPool此種執行緒池如果執行緒數達到最大值後會怎麼辦,底層原理。

通過一個阻塞佇列來?

4. 多執行緒之間通訊的同步問題,synchronized鎖的是物件,衍伸出和synchronized相關很多的具體問題,例如同一個類不同方法都有synchronized鎖,一個物件是否可以同時訪問。或者一個類的static構造方法加上synchronized之後的鎖的影響。

不可以,需要先拿到物件鎖??

5. 瞭解可重入鎖的含義,以及ReentrantLock和synchronized的區別

可重入鎖是為了避免阻塞自己,?

6. 同步的資料結構,例如concurrentHashMap的原始碼理解以及內部實現原理,為什麼他是同步的且效率高

分段鎖,不會鎖定所有的,這樣它的效率高

7. atomicinteger和Volatile等執行緒安全操作的關鍵字的理解和使用

原子類,不會產生多執行緒衝突,volatile的原理也是如此

8. 執行緒間通訊,wait和notify

wait釋放鎖,等待喚醒

notify喚醒其它執行緒

9. 定時執行緒的使用

時間到後嘗試獲取cpu資源執行執行緒。?

10. 場景:在一個主執行緒中,要求有大量(很多很多)子執行緒執行完之後,主執行緒才執行完成。多種方式,考慮效率。

join

countDown方式

Cys。。物件同步方式

11. 程序和執行緒的區別

程序相當於一個程式執行,至少包含一個執行緒,執行緒是程式碼塊執行的最小單元,一個程序可以有多個執行緒

12. 什麼叫執行緒安全?舉例說明

同一時間變數只能被一個執行緒改變,而不能被多個,互斥。

13. 執行緒的幾種狀態

建立 就緒 執行 結束

14. 併發、同步的介面或方法

sync.. 同步方法

15. HashMap 是否執行緒安全,為何不安全。 ConcurrentHashMap,執行緒安全,為何安全。底層實現是怎麼樣的。

可能產生資源競爭,加分段鎖

16. J.U.C下的常見類的使用。ThreadPool的深入考察; BlockingQueue的使用。(take,poll的區別,put,offer的區別);原子類的實現。

?? 執行緒池

獲得執行緒 執行緒斷開 放回執行緒池 提供執行緒

17. 簡單介紹下多執行緒的情況,從建立一個執行緒.開始。然後怎麼控制同步過程,多執行緒常用的方法和結構

先獲得同步鎖,在執行邏輯,邏輯結束釋放鎖定(可喚醒其它執行緒),

new一個執行緒池,傳入需要進行處理的資料,用coutDown來阻塞執行,或者是Future來阻塞執行,最後完成。

18. volatile的理解

強制jvm按順序讀取相應的變數的值

19. 實現多執行緒有幾種方式,多執行緒同步怎麼做,說說幾個執行緒裡常用的方法

主要用執行緒池來執行,countDown或者是Future

七、網路通訊

1. http是無狀態通訊,http的請求方式有哪些,可以自己定義新的請求方式麼。

put delete get post 等 不可以?

2. socket通訊,以及長連線,分包,連線異常斷開的處理。

tcp握手三次,??

3. socket通訊模型的使用,AIO和NIO。

通訊模型NIO吧。??

4. socket框架netty的使用,以及NIO的實現原理,為什麼是非同步非阻塞。

??

5. 同步和非同步,阻塞和非阻塞。

?? 同步即傳送請求即時獲得結果,非同步即另起事務處理,阻塞表示等待結果,非阻塞表示不需要等待結果

6. OSI七層模型,包括TCP,IP的一些基本知識

網路層

物理層

邏輯層

鏈路層等

TCP IP??

7. http中,get post的區別

post能傳的字元更多,並且是表單提交,更加安全

8. 說說http,tcp,udp之間關係和區別。

??

9. 說說瀏覽器訪問www.taobao.com,經歷了怎樣的過程。

域名解析à 相應的伺服器,然後訪問資源 負載平衡 à靜態資源  à 動態資源 à ??

10. HTTP協議、  HTTPS協議,SSL協議及完整互動過程;

??

11. tcp的擁塞,快回傳,ip的報文丟棄

??

12. https處理的一個過程,對稱加密和非對稱加密

??

13. head各個特點和區別

??

14. 說說瀏覽器訪問www.taobao.com,經歷了怎樣的過程。

八、資料庫MySql

1. MySql的儲存引擎的不同

表鎖和行鎖,innoble的一般推薦

2. 單個索引、聯合索引、主鍵索引

一個值作為索引

多個值順序索引

以主鍵作為索引

3. Mysql怎麼分表,以及分表後如果想按條件分頁查詢怎麼辦(如果不是按分表字段來查詢的話,幾乎效率低下,無解)

??使用hash演算法進行分表,分表後按條件分頁查詢,??

4. 分表之後想讓一個id多個表是自增的,效率實現

?? 不會

5. MySql的主從實時備份同步的配置,以及原理(從庫讀主庫的binlog),讀寫分離

不會???

6. 寫SQL語句。。。

??

7. 索引的資料結構,B+樹

??

8. 事務的四個特性,以及各自的特點(原子、隔離)等等,專案怎麼解決這些問題

??

原子、隔離?

9. 資料庫的鎖:行鎖,表鎖;樂觀鎖,悲觀鎖

行鎖,就是鎖該行几上下幾行

表鎖,就是鎖住整個表

樂觀鎖,嘗試更改,失敗重試三次

悲觀鎖,就是forUpdate鎖定,其它不能更改

10. 資料庫事務的幾種粒度;

四種吧

???

11. 關係型和非關係型資料庫區別

結構化的資料

非關係的可以儲存非結構化資料??

九、設計模式

1. 單例模式:飽漢、餓漢。以及餓漢中的延遲載入,雙重檢查

列舉,

2. 工廠模式、裝飾者模式、觀察者模式。

上下文處理,呼叫

3. 工廠方法模式的優點(低耦合、高內聚,開放封閉原則)

???

十、演算法

1. 使用隨機演算法產生一個數,要求把1-1000W之間這些數全部生成。(考察高效率,解決產生衝突的問題)

??

2. 兩個有序陣列的合併排序

??

3. 一個數組的倒序

??

4. 計算一個正整數的正平方根

??M

5. 說白了就是常見的那些查詢、排序演算法以及各自的時間複雜度

??

6. 二叉樹的遍歷演算法

??

7. DFS,BFS演算法

??

9. 比較重要的資料結構,如連結串列,佇列,棧的基本理解及大致實現。

??

10. 排序演算法與時空複雜度(快排為什麼不穩定,為什麼你的專案還在用)

??

11. 逆波蘭計算器

??

12. Hoffman 編碼

??

13. 查詢樹與紅黑樹

??

十一、併發與效能調優

1. 有個每秒鐘5k個請求,查詢手機號所屬地的筆試題(記得不完整,沒列出),如何設計演算法?請求再多,比如5w,如何設計整個系統?

2. 高併發情況下,我們系統是如何支撐大量的請求的

3. 叢集如何同步會話狀態

4. 負載均衡的原理

5 .如果有一個特別大的訪問量,到資料庫上,怎麼做優化(DB設計,DBIO,SQL優化,Java優化)

6. 如果出現大面積併發,在不增加伺服器的基礎上,如何解決伺服器響應不及時問題“。

7. 假如你的專案出現效能瓶頸了,你覺得可能會是哪些方面,怎麼解決問題。

8. 如何查詢 造成 效能瓶頸出現的位置,是哪個位置照成效能瓶頸。

9. 你的專案中使用過快取機制嗎?有沒用使用者非本地快取

十二、其他

1.常用的linux下的命令

ls 列印目錄

cat 開啟檔案