互聯網大裁員:Java程序員失工作,焉知不能進ali?

互聯網大裁員:Java程序員失工作,焉知不能進ali?

一面:主要問的基礎知識

(考察對技術底層原理的掌握)

1. java線程同步都有哪幾種方式,Synchronized和ReentrantLock的區別

2. ReentrantLock底層是怎麼實現的,怎麼實現的超時獲取鎖。

3. cas的原理,變量要用哪個關鍵字修飾,volatile實現的原理,進而引申到了java虛擬機的內存模型。

4. 介紹一下java虛擬機內存模型,然後繼續討論volatile。

5. 線程池種類,哪四種 workqueue分別是什麼

6. 反射講一講,主要是概念,都在哪需要反射機制,反射的性能,如何優化

7. 什麼時候觸發minor GC 什麼時候觸發full GC

8. 聊點數據庫,一般選什麼樣的字段做主鍵,有什麼選取原則嗎,用種子自增來做主鍵,為什麼每次種子要加1,加2加3可以嗎。

9. sql優化有哪些思路

10. 索引使用注意事項

11. InnoDB數據模型,B+樹具體說說都保存了什麼,葉子節點保存了什麼

12. 你有什麼想問我的。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

二面:主要是圍繞項目

(考察技術應用實戰能力)

互聯網大裁員:Java程序員失工作,焉知不能進ali?

1、介紹一下你的項目(主要是技術難點),請畫出項目架構設計圖和部署圖?

2、dubbo負載均衡算法有哪些,如果讓你實現一致性hash的dubbo負載均衡算法,你會怎麼實現?

3、zookeeper實現的分佈式鎖的原理,以及redis具體怎麼實現分佈式鎖?

4、限流是怎麼實現的,hystrix介紹一下。

5、dubbo有哪些模塊,底層通信的原理。

6、對Spring的理解,項目中都用什麼?怎麼用的?對IOC、和AOP的理解及實現原理。

7、線上問題的解決思路,程序運行一段時間,突然內存溢出,重啟後,過一段時間又內存溢出,怎麼排查問題。

三面:主要問解決問題的思路

互聯網大裁員:Java程序員失工作,焉知不能進ali?

1、如果讓你實現一個MQ,怎麼樣保證消息不丟失?

2、硬盤io速度會變慢,有什麼解決辦法嗎?

3、mysql的innodb索引數據結構為什麼是b+樹,用hash來實現可以嗎?

4、分佈式事務的實現?

5、線程同步,併發操作怎麼控制 ?

6、描述struts的工作流程。

5、如何解決redis和mysql數據一致性?

7、常見的MySQL主從同步方案有哪些?優劣勢比較過?

8、先談秒殺的設計思路?

9、再談談秒殺如何防止超賣?

10、你有什麼想問我的?

面試題目以及答案解析

一、反射講一講,主要是概念,都在哪需要反射機制,反射的性能,如何優化

答:反射機制的定義:是在運行狀態中,對於任意的一個類,都能夠知道這個類的所有屬性和方法,對任意一個對象都能夠通過反射機制調用一個類的任意方法,這種動態獲取類信息及動態調用類對象方法的功能稱為java的反射機制。

反射的作用:

1、動態地創建類的實例,將類綁定到現有的對象中,或從現有的對象中獲取類型。

2、應用程序需要在運行時從某個特定的程序集中載入一個特定的類

二、對Spring的理解,項目中都用什麼?怎麼用的?對IOC、和AOP的理解及實現原理

答:Spring是一個開源框架,處於MVC模式中的控制層,它能應對需求快速的變化,其主要原因它有一種面向切面編程(AOP)的優勢,其次它提升了系統性能,因為通過依賴倒置機制(IOC),系統中用到的對象不是在系統加載時就全部實例化,而是在調用到這個類時才會實例化該類的對象,從而提升了系統性能。這兩個優秀的性能使得Spring受到許多J2EE公司的青睞,如阿里裡中使用最多的也是Spring相關技術。

Spring的優點:

1、降低了組件之間的耦合性,實現了軟件各層之間的解耦。

2、可以使用容易提供的眾多服務,如事務管理,消息服務,日誌記錄等。

3、容器提供了AOP技術,利用它很容易實現如權限攔截、運行期監控等功能。

Spring中AOP技術是設計模式中的動態代理模式。只需實現jdk提供的動態代理接口InvocationHandler,所有被代理對象的方法都由InvocationHandler接管實際的處理任務。面向切面編程中還要理解切入點、切面、通知、織入等概念。

Spring中IOC則利用了Java強大的反射機制來實現。所謂依賴注入即組件之間的依賴關係由容器在運行期決定。其中依賴注入的方法有兩種,通過構造函數注入,通過set方法進行注入。

三、線程同步,併發操作怎麼控制

答:

Java中可在方法名前加關鍵字syschronized來處理當有多個線程同時訪問共享資源時候的問題。syschronized相當於一把鎖,當有申請者申請該

資源時,如果該資源沒有被佔用,那麼將資源交付給這個申請者使用,在此期間,其他申請者只能申請而不能使用該資源,當該資源被使用完成後將釋放該資源上的鎖,其他申請者可申請使用。

併發控制主要是為了多線程操作時帶來的資源讀寫問題。如果不加以空間可能會出現死鎖,讀髒數據、不可重複讀、丟失更新等異常。

併發操作可以通過加鎖的方式進行控制,鎖又可分為樂觀鎖和悲觀鎖。

悲觀鎖:

悲觀鎖併發模式假定系統中存在足夠多的數據修改操作,以致於任何確定的讀操作都可能會受到由個別的用戶所製造的數據修改的影響。也就是說悲觀鎖假定衝突總會發生,通過獨佔正在被讀取的數據來避免衝突。但是獨佔數據會導致其他進程無法修改該數據,進而產生阻塞,讀數據和寫數據會相互阻塞。

樂觀鎖:

樂觀鎖假定系統的數據修改只會產生非常少的衝突,也就是說任何進程都不大可能修改別的進程正在訪問的數據。樂觀併發模式下,讀數據和寫數據之間不會發生衝突,只有寫數據與寫數據之間會發生衝突。即讀數據不會產生阻塞,只有寫數據才會產生阻塞。

通篇涉及到的技術知識點比較多且範圍比較廣,建議可以先收藏。

這些面試題出自我一位好友的面試經歷的整理,由於篇幅原因,我這邊沒有把面試以及答案全部列舉出來,如果有需要原文件的可以關注我,私信“架構”獲取完整的文件。

其實,這次互聯網的“寒冬”未嘗不是一件好事,讓大多數技術人員認識到了自身的不足,不要滿足於目前的狀態,我瞭解過很多程序員,有點技術能力就自持高大,遭遇到瓶頸時也只是認為自己已經得道昇天了,哪裡還想到一山更比一山高。

直到裁員的時候,被公司遺棄的時候才發現所學甚少,再這段閒暇時間,更多的人還是選擇了跳槽,四處尋找各廠的面試題,以求能夠進廠之後深造。

所謂授人以魚不如授人以漁,這套面試題給大家帶來的也只是大致的技術學習要點,並沒有明確技術廣度提升的學習方向。

在相關面試的知識點後面,我給大家提供一套全面的架構方向的學習思維導圖,不少公司很重視高併發高可用的技術,特別是一線互聯網公司,分佈式、JVM、spring源碼分析、微服務等知識點已經是面試的必考題。

這些東西可能你們平時在工作中接觸過,但是缺少全面系統的學習,希望對正在面試的朋友或是遭遇技術瓶頸的程序員們提供一點思路。

1、開源框架解析專題: 站在巨人肩膀,收穫不一樣的視野。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

開源框架解析

2、架構築基專題: 深入內核、直擊故障、拒絕懵圈。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

架構師築基

3、微服務架構專題:你還不知道微服務,怎麼漲薪。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

微服務架構

4、高性能架構專題: 成為互聯網架構師,你要的都在這裡。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

高性能架構

5、團隊協作開發專題: 讓你團隊開發效率提高十倍。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

團隊協作開發

6、B2C商城項目實戰: 擼起袖子幹實事,項目經驗那點事。

互聯網大裁員:Java程序員失工作,焉知不能進ali?

商城實戰項目

7、設計模式

互聯網大裁員:Java程序員失工作,焉知不能進ali?

設計模式

以上資料是我結合自己和身邊朋友的面試經歷而整理的,希望對面試的朋友或者在找工作的程序員們有所幫助。大家對技術感興趣的朋友也可以來Java資源分享群:878249276,架構資料會不定期更新,群裡有阿里大牛,也有一線互聯網的資深HR


分享到:


相關文章: