高階工程師面試題

wangyunpeng0319發表於2017-05-29

一、三大框架方面問題


1、Spring 事務的四種隔離性,並說說每個隔離性的區別

Read uncommitted(未授權讀取、讀未提交):

如果一個事務已經開始寫資料,則另外一個事務則不允許同時進行寫操作,但允許其他事務讀此行資料。該隔離級別可以通過“排他寫鎖”實現。

避免了更新丟失,卻可能出現髒讀。也就是說事務B讀取到了事務A未提交的資料。這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的資料,這種隔離級別會產生髒讀,不可重複讀和幻像讀

Read committed(授權讀取、讀提交):

讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行。該隔離級別避免了髒讀,但是卻可能出現不可重複讀。事務A事先讀取了資料,事務B緊接了更新了資料,並提交了事務,而事務A再次讀取該資料時,資料已經發生了改變。

保證一個事務修改的資料提交後才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的資料  

Repeatable read(可重複讀取)

讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。避免了不可重複讀取和髒讀,但是有時可能出現幻讀。這可以通過“共享讀鎖”和“排他寫鎖”實現。

幻讀是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的資料進行了修改,
                這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表
                中插入一行新資料。那麼,以後就會發生操作第一個事務的使用者發現表中還有沒有修改的資料行,
                就好象發生了幻覺一樣

Serializable(序列化)

提供嚴格的事務隔離。它要求事務序列化執行,事務只能一個接著一個地執行,但不能併發執行。如果僅僅通過“行級鎖”是無法實現事務序列化的,必須通過其他機制保證新插入的資料不會被剛執行查詢操作的事務訪問到。

序列化是最高的事務隔離級別,同時代價也花費最高,效能很低,一般很少使用,在該級別下,事務順序執行,不僅可以避免髒讀、不可重複讀,還避免了幻像讀。


2、Spring事務的傳播行為,並說說每個傳播行為的區別


1. PROPAGATION_REQUIRED: 如果存在一個事務,則支援當前事務。如果沒有事務則開啟  
2. PROPAGATION_SUPPORTS: 如果存在一個事務,支援當前事務。如果沒有事務,則非事務的執行  
3. PROPAGATION_MANDATORY: 如果已經存在一個事務,支援當前事務。如果沒有一個活動的事務,則丟擲異常。  
4. PROPAGATION_REQUIRES_NEW: 總是開啟一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。  
5. PROPAGATION_NOT_SUPPORTED: 總是非事務地執行,並掛起任何存在的事務。  
6. PROPAGATION_NEVER: 總是非事務地執行,如果存在一個活動事務,則丟擲異常  
7. PROPAGATION_NESTED:如果一個活動的事務存在,則執行在一個巢狀的事務中. 如果沒有活動事務,   則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執行 

3、Struts跟Spring mvc的優缺點,讓你選會如何選

解答:Spring MVC 與 Struts的區別

4、簡單說說Spring 事務機制

解答:Spring事務機制

5、Spring 4.0新特性

解答:Spring4新特性


二、負載均衡、叢集相關


1、Nginx+Tomcat+Redis實現負載均衡、資源分離、session共享 

解答:配置參考

2、nginx配置檔案詳解——nginx.conf

解答:Nginx配置檔案詳細說明



三、專案優化相關


1、單例模式有幾種? 如何優化?

解答:單例模式的7中用法

2、簡單說說執行緒池的原理和實現

解答:執行緒原理及實現

四、併發和安全方面


1、平臺上的圖片如何防盜鏈

解答:http下載防盜鏈原理:http協議的欄位referer記錄來實現


2、訊息佇列的原理和實現

解答:1、訊息佇列原理     2、深入淺出 訊息佇列 ActiveMQ

五、資料庫方面


1、mysql查詢欄位區不區分大小寫?
解答:不區分,值也不區分

 MySQL在Linux下資料庫名、表名、列名、別名大小寫規則是這樣的:

      1、資料庫名與表名是嚴格區分大小寫的;

      2、表的別名是嚴格區分大小寫的;

      3、列名與列的別名在所有的情況下均是忽略大小寫的;

      4、變數名也是嚴格區分大小寫的


2、簡單說說資料庫叢集和負載均衡、分散式

解答:資料庫負載均衡和叢集參考 ,參考2


3、儲存過程的結構和優點

解答:大概結構   儲存過程的優缺點




五、基礎知識

1、HashMap和Hashtable的區別

解答http://blog.csdn.net/u010983881/article/details/49762595
2、抽象類與介面的區別。
 抽象類裡面的方法有具體實現內容,而介面只定義了方法沒有實現內容。
介面定義的變數都是final的,而abstract類定義的可以不是final的
abstract類可以通過get....()方法實現類的例項,但是介面不可以

3、final關鍵字的使用和區別
http://www.importnew.com/7553.html

4、異常分類和處理機制。
http://blog.csdn.net/hguisu/article/details/6155636
5、JDK版本區別。
http://blog.itpub.net/29119536/viewspace-1629145/
6、StringBuilder內部實現機制。
https://segmentfault.com/a/1190000004261063
7、反射機制的使用。
http://www.cnblogs.com/chenliang901114/archive/2013/04/23/javalearner.html
8、匿名內部類的使用。
匿名內部類是沒有名字的類,只在某一處被使用,不會被多處呼叫,一般是某個父類或介面的特定實現
9、泛型的概念和使用。
http://www.infoq.com/cn/articles/cf-java-generics

10、弱引用和虛引用的概念和使用方式
  • 強引用: 一般的引用都是強引用,即使OutOfMemory也不會回收這部分被把持的引用記憶體。

  • 軟引用(SoftReference): 如果記憶體空間足夠,垃圾回收器就不會回收它;如果記憶體空間不足了,就會回收這些物件的記憶體。只要垃圾回收器沒有回收它,該物件就可以被使用。++軟引用可以用來實現記憶體敏感的快取記憶體。++

  • 弱引用(WeakReference):弱引用的物件擁有更短暫的生命週期。當垃圾回收期發現只有若引用的物件,不論記憶體空間足夠與否,都會回收它。

  • 虛引用():虛引用不會決定物件的生命週期,如果一個物件僅持有一個虛引用,那麼它隨時可能被回收。++虛引用主要用來跟蹤物件被垃圾回收器回收的活動。+

11、SpringMVC和Struts2的區別
  • SpringMVC的方法級別的攔截,Struts2是類級別的攔截;

  • SpringMVC是基於Servlet實現Controller,Struts2是基於Filter實現;

  • SpringMVC效能和安全性高於Struts2;

  • SpringMVC更加元件化和流程化,易於擴充套件,比如返回JSON通過設定@ResponseBody即可;

  • Struts2更加無耦合,比較純粹,但是需要更多的自行開發的程式碼以支援更多功能。

12、Spring IOC和AOP的概念以及實現方式
13、Spring事務的管理
14、GC演算法有哪些
15、垃圾回收器有哪些
16、如何調優JVM

六、分散式

zookeeper的用途
dubbo的用途以及優點
dubbo的實現原理

七、資料結構和演算法

單向連結串列的逆序排列
雙向連結串列的操作
1億個整數的倒序輸出
找出給定字串中最長迴文(迴文:abcdcba,兩端對稱)

八、網路程式設計

Get和Post的區別
Https協議的實現
長連線的管理
Socket的基本方法

九、資料庫

inner join和left join的區別

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄 
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄
inner join(等值連線) 只返回兩個表中聯結欄位相等的行

複雜SQL語句
資料庫優化方式
資料庫拆分方式
如何保證不同資料結構的資料一致性

十、安全

什麼是XSS攻擊,具體如何實現?開放問題:如何保障系統安全?

十一、設計模式

寫出一個設計模式的類圖
設計模式的意義是什麼
寫個單例模式的程式碼

十二、多執行緒

如何避免Quartz重複啟動任務
執行緒池滿了如何處理額外的請求
同一個物件的連個同步方法能否被兩個執行緒同時呼叫




相關文章