面試經歷---YY歡聚時代(2015年11月21日上午初試、25日下午複試)

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的區別和應用

1ReentrantLock 擁有Synchronized相同的併發性和內存語義,此外還多了鎖投票,定時鎖等候和中斷鎖等候
    
線程AB都要獲取對象O的鎖定,假設A獲取了對象O鎖,B將等待A釋放對O的鎖定,
    
如果使用 synchronized ,如果A不釋放,B將一直等下去,不能被中斷
    
如果使用ReentrantLock,如果A不釋放,可以使B在等待了足夠長的時間以後,中斷等待,而幹別的事情
 
    ReentrantLock
獲取鎖定與三種方式:
    a)  lock(),
如果獲取了鎖立即返回,如果別的線程持有鎖,當前線程則一直處於休眠狀態,直到獲取鎖
    b) tryLock(),
如果獲取了鎖立即返回true,如果別的線程正持有鎖,立即返回false
    c)tryLock(long timeout,TimeUnit unit)
   如果獲取了鎖定立即返回true,如果別的線程正持有鎖,會等待參數給定的時間,在等待的過程中,如果獲取了鎖定,就返回true,如果等待超時,返回false
    d) lockInterruptibly:
如果獲取了鎖定立即返回,如果沒有獲取鎖定,當前線程處於休眠狀態,直到或者鎖定,或者當前線程被別的線程中斷
 
2
synchronized是在JVM層面上實現的,不但可以通過一些監控工具監控synchronized的鎖定,而且在代碼執行時出現異常,JVM會自動釋放鎖定,但是使用Lock則不行,lock是通過代碼實現的,要保證鎖定一定會被釋放,就必須將unLock()放到finally{}
 
3
、在資源競爭不是很激烈的情況下,Synchronized的性能要優於ReetrantLock,但是在資源競爭很激烈的情況下,Synchronized的性能會下降幾十倍,但是ReetrantLock的性能能維持常態;

4.樂觀鎖和悲觀鎖的區別?

5.數據庫中事務的級別

1.    讀未提交

2.    讀已提交

3.    可重複讀

4.    讀序列化

6. 數據庫行級鎖的應用,修改一條記錄時是否會加上行級鎖

行級鎖的優點有:
 在很多線程請求不同記錄時減少衝突鎖。
 事務回滾時減少改變數據。
 使長時間對單獨的一行記錄加鎖成爲可能。

行級鎖的缺點有:
 比頁級鎖和表級鎖消耗更多的內存。
 鎖是計算機協調多個進程或線程併發訪問某一資源的機制,不同的數據庫的鎖機制大同小異。由於數據庫資源是一種供許多用戶共享的資源,所以如何保證數據併發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖衝突也是影響數據庫併發訪問性能的一個重要因素。瞭解鎖機制不僅可以使我們更有效的開發利用數據庫資源,也使我們能夠更好地維護數據庫,從而提高數據庫的性能。

上述三種鎖的特性可大致歸納如下:
1) 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。
2) 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。
3) 頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般。

     三種鎖各有各的特點,若僅從鎖的角度來說,表級鎖更適合於以查詢爲主,只有少量按索引條件更新數據的應用,如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.   入職後進入哪個團隊?從事什麼項目的開發?


四、個人面試總結

感覺很多技術問題答不上來,最終被鄙視了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章