去YY歡聚時代的一次面試經歷
一、2015年11月21日上午初試的面試題如下:
1. 做一下自我介紹
畫出正在做的B2B平臺的架構圖,包括各子系統(ec,buyer,seller,message,order)、SOA(dubbo)、快取Redis、訊息rabbitmq、單點登陸CAS、負載均衡nginx,MySQL資料庫讀寫分離,郵件伺服器postfix
2. 單點登陸的原理
3. 如何防止cookie被盜用
4. Cookie和Session的區別
5. Session共享及其好處
6. Mysql主從資料同步的方式
7. spring 控制器的載入過程
8. Spring 例項是單例還是多例?會不會有執行緒問題
9. 如何進行跨機房資料同步?如何保證資料訪問的一致性
10. 資料庫索引有什麼好處?
11. Mysql如何檢視執行計劃?
12. Mysql執行計劃的的順序
13. 如何檢視Mysql中SQL執行的快慢?
14. SQL執行過程net和wait for table的區別?
15. IO與NIO的區別?NIO中select的原理?NIO緩衝區的預設大小?
16. 使用什麼資料庫連線池?連線池的工作 原理?常用連線池C3PO,proxool與JNDI的區別?
17. 快取redis如何應對系統崩潰後的快照問題?
18. Redis的預設鍵大小是多少?
19. 執行緒中sleep與wait的區別?
20. Restful與dubbo的對比?
二、2015年11月25日下午複試的題目
1.IO和NIO的區別和原理?
(1) IO是面向流的,NIO是面向緩衝區的 Java IO面向流意味著每次從流中讀一個或多個位元組,直至讀取所有位元組,它們沒有被快取在任何地方。此外,它不能前後移動流中的資料。如果需要前後移動從流中讀取的資料,需要先將它快取到一個緩衝區。 (2) 阻塞與非阻塞IO Java IO的各種流是阻塞的。這意味著,當一個執行緒呼叫read() 或 write()時,該執行緒被阻塞,直到有一些資料被讀取,或資料完全寫入。該執行緒在此期間不能再幹任何事情了。 Java NIO的非阻塞模式,使一個執行緒從某通道傳送請求讀取資料,但是它僅能得到目前可用的資料,如果目前沒有資料可用時,就什麼都不會獲取。而不是保持執行緒阻塞,所以直至資料變的可以讀取之前,該執行緒可以繼續做其他的事情。 非阻塞寫也是如此。一個執行緒請求寫入一些資料到某通道,但不需要等待它完全寫入,這個執行緒同時可以去做別的事情。 執行緒通常將非阻塞IO的空閒時間用於在其它通道上執行IO操作,所以一個單獨的執行緒現在可以管理多個輸入和輸出通道(channel)。 (3) 使用單執行緒Selector來管理多個通道,減少系統開銷 |
2. NIO中select的實現機制
(1) 建立Selector (2) 向Selector註冊通道 (3) SelectionKey (4) 通過Selector選擇通道 (5) wakeup (6) close() |
3.多執行緒中syschronize、volitile、lock的區別和應用
1、ReentrantLock擁有Synchronized相同的併發性和記憶體語義,此外還多了鎖投票,定時鎖等候和中斷鎖等候 |
4.樂觀鎖和悲觀鎖的區別?
5.資料庫中事務的級別
1. 讀未提交 2. 讀已提交 3. 可重複讀 4. 讀序列化 |
6. 資料庫行級鎖的應用,修改一條記錄時是否會加上行級鎖
行級鎖的優點有: 行級鎖的缺點有: 上述三種鎖的特性可大致歸納如下: 三種鎖各有各的特點,若僅從鎖的角度來說,表級鎖更適合於以查詢為主,只有少量按索引條件更新資料的應用,如WEB應用;行級鎖更適合於有大量按索引條件併發更新少量不同資料,同時又有併發查詢的應用,如一些線上事務處理(OLTP)系統。 /* ==================== MySQL InnoDB 鎖表與鎖行 ======================== */ 由於InnoDB預設是Row-Level Lock,所以只有「明確」的指定主鍵,MySQL才會執行Row lock (只鎖住被選取的資料例) ,否則MySQL將會執行Table Lock (將整個資料表單給鎖住)。 |
7.Spring事務的實現方式和實現原理
8.Spring AOP的實現
9.HTTP長連線和短連線的區別
TCP/IP TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。 在網路層有IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。 在傳輸層中有TCP協議與UDP協議。 在應用層有:TCP包括FTP、HTTP、TELNET、SMTP等協議 UDP包括DNS、TFTP等協議 短連線 連線->傳輸資料->關閉連線 HTTP是無狀態的,瀏覽器和伺服器每進行一次HTTP操作,就建立一次連線,但任務結束就中斷連線。 也可以這樣說:短連線是指SOCKET連線後傳送後接收完資料後馬上斷開連線。
長連線 連線->傳輸資料->保持連線 -> 傳輸資料-> 。。。 ->關閉連線。 長連線指建立SOCKET連線後不管是否使用都保持連線,但安全性較差。
http的長連線 HTTP也可以建立長連線的,使用Connection:keep-alive,HTTP 1.1預設進行持久連線。HTTP1.1和HTTP1.0相比較而言,最大的區別就是增加了持久連線支援(貌似最新的 http1.0 可以顯示的指定 keep-alive),但還是無狀態的,或者說是不可以信任的。
什麼時候用長連線,短連線? 長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況,。每個TCP連線都需要三步握手,這需要時間,如果每個操作都是先連線,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,次處理時直接傳送資料包就OK了,不用建立TCP連線。例如:資料庫的連線用長連線, 如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。
而像WEB網站的http服務一般都用短連結,因為長連線對於服務端來說會耗費一定的資源,而像WEB網站這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源,如果用長連線,而且同時有成千上萬的使用者,如果每個使用者都佔用一個連線的話,那可想而知吧。所以併發量大,但每個使用者無需頻繁操作情況下需用短連好。
總之,長連線和短連線的選擇要視情況而定。 |
10.Spring事務的種類和各自的區別
11.Redis的叢集方式,主點掛掉後如何將備點切換成主點
12.Mysql的叢集方式,主備的資料同步方式,主庫掛掉後如何切換從庫為主庫,有沒做過兩主兩備的叢集?
13.如何分析一條慢查詢的SQL,MYSQL執行計劃的類別(all Table,using index,using where)
14.執行緒掛掉後,如何在虛擬機器上分析。
15.CAP一致性、可用性、分割槽容忍性,系統中是犧牲了哪一種。
16.Freemarker的快取機制
17. Zookeeper的實現原理
三、HR面試
1. 個人的未來規劃,偏技術還是偏管理?
2. 現在薪酬的組成,基本工資+補貼
3. 想離職的原因?
4. 期望的薪酬情況
個人問題
5. 社保和公積金的基數
基數按工資基數交,公積金的比率是公司交10%,個人交10%~12%
另外公司有四百多補貼
6. 入職後進入哪個團隊?從事什麼專案的開發?