YY歡聚時代一年多前去面試過一次,當時鄙視了,在現在的公司呆了1年半了,感覺做得很不爽,而且薪資又不滿意,所以想找個新工作,就想去YY面試。
下面將兩次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面向流意味着每次從流中讀一個或多個字節,直至讀取所有字節,它們沒有被緩存在任何地方。此外,它不能前後移動流中的數據。如果需要前後移動從流中讀取的數據,需要先將它緩存到一個緩衝區。 Java NIO的緩衝導向方法略有不同。數據讀取到一個它稍後處理的緩衝區,需要時可在緩衝區中前後移動。這就增加了處理過程中的靈活性。但是,還需要檢查是否該緩衝區中包含所有您需要處理的數據。而且,需確保當更多的數據讀入緩衝區時,不要覆蓋緩衝區裏尚未處理的數據。 (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. 入職後進入哪個團隊?從事什麼項目的開發?
四、個人面試總結
感覺很多技術問題答不上來,最終被鄙視了