最近幾周與阿里的面試官聊了聊,趁着我還有記憶先寫下來。本人近5年工做的JAVA程序員,技術不精。大夥沒必要太過吐槽。哈哈。我曾兩次時間投過簡歷。java
》2013年程序員
第一次是在2013年的時候,當時工做3年,第一輪面試仍是比較容易的。就是講項目的技術點是過了。二輪的話問一些基礎而後可能就忘記了。失敗了結。web
》2016年面試
阿里優酷面試經歷——學無止境spring
第一輪的時候問的比較細,json
像java Object有哪些方法,api
回答:toString equals hashCode wait clone notify notifyall .數組
而後接着問hashCode相同,equals相同?tomcat
回答:不一樣,通常來講這樣約定equals相等那hashCode相等,hashCode只是對象的一個映射而已。安全
主要在集合中來區分不一樣的對象。而後他接着問,那相同hashCode相等的對象在hashmap中是什麼區分的,
我是這樣回答的。hashmap 是由數組和鏈表組成的,關於hashmap的查找是根據將key作hash而後獲得鏈表,對於hash相等的對象是經過鏈表保存的。查找的時候就須要迭代了。
接着又說若是相等hash對象太多,那麼怎麼解決迭代的影響。後面接着還問了些數組與列表的區別,多線程相關的知識。
第二輪是面試官結合項目來問,會對你的項目來作一些提問仍是比較好回答的
第三輪 我可就慘了,一上來就問說說你對spring IOC的理解,SpringBeanFactory 是怎麼實現的。你對dubbo的理解,自帶有哪些序列化。默認的是哪一個。
dubbo怎麼知道服務器狀態有什麼內部機制。說一下https的流程。說一下jvm優化的,項目中是怎麼配置的。
我是這樣回答的,spring經過dispathServlet或是filter加載bean,一種是基本註解的加載 一種是基本beanxml的加載。經過map來保存實例化和管理生命週期,ioc來講的話,map就至關於窗口的概念,spring 爲何能作代理,攔截器的緣由。
能夠理解 爲一種註冊機制,這種思想仍是比較常見的。
而後回答了對dubbo的理解 ,dubbo也就是rmi的框架,實現方式也是將zookeeper +netty+hessian+http+webservice等東西集成在一塊兒。
rpc的原理也就是動態代理的一個過程,那dubbo也就是將序列化和付輸方式的封裝而後加再加上zookeeper的協調功能。常見的序列化有xml,json,二進制。其中他問爲zookeeper可以發生服務是否宕機或是出問題了。
我是這樣理解的,zookeeper是在服務器註冊時發現的,至於爲何能知道哪臺服務器宕機,那確定是作監聽經過心跳這種機制了來發現服務了。但其它我以爲在zookeeper中是應該要知曉哪臺服務器當前性能比較好,cpu比較低,內存使用率不高。
他也問了這個問題了,其實我在看zookeeper的時候想過個問題。對於每個服務來講,應當對外提供監控的功能API,就想springBoot同樣有專門的模塊暴露服務器的資源使用狀況,zookeeper是否能監聽這些數據,而不是根據隨機或其它方式。
最後提到兩個問題一個說https的流程,
個人表達可能太簡單,Https只是一種協議,將服務器客戶端數據傳輸經過加密簽名方式來傳遞。雙方都須要安裝 證書,客戶端提交的數據經過加密後到服務器,服務器經過證書私鑰解密,並驗籤,而後保證數據安全。
而後他說,你知道https最大的重點在哪裏嘛?我想除了安全還能是什麼...想了想。他說了一句‘防劫持’,簽名不就爲了防止數據被修改而作的嘛,固然‘防劫持‘’說的比較準,我沒有說到點子上。回答了這幾個問題,明顯感受到不行了。
最後說了下jvm優化,通常大家會調整哪幾個參數,我說通常會設置xmx 與xx:persize 兩個參數。而後他問通常大家設置成多少。
我說,4G xms 1G persize .而後參數設置有哪些根據。我說看項目狀況吧,若是項目文件比較多,查詢數據量比較大,功能複雜點的,會調高一點。
具體的值也是看狀況,通常的能夠看在tomcat下運行時的佔用內存來看。接着說 32bit 與64bit 內存設置有什麼區別。我說32bit 只能設置到1g多,64應該說無限吧。而後他具了個例子,他有一臺64G的機器,設置成32的G的堆內存行不行。
我說不考慮業務發展的話 設這麼多應該不合適吧。固然 我沒有具體想過個問題,也不知道設置成一半有什麼後果。通常項目沒有實際去調整過。‘‘壓縮’’指針我也不知道啥玩意。最後我忍不住了。
我說我屬於項目型的,沒有特別入深刻研究的框架。可是看源碼或是解決問題能力仍是有的。整個面試就結束了
總結:來講仍是被虐了,固然仍是我技不如人。其實想本身開發近5年了仍是這種水平仍是太搓了點。像dubbo,zookeeper也是簡單的瞭解 沒有在項目中實際用過。也只是談過本身理解,像jvm調優這就更沒深刻。通常也就是那幾個參數了。dubbo,zookeeper,jvm調優深刻理解實戰。
個人技術表達能力不太專業,我喜歡將本身的經驗加本身去理解一些技術點。研究的方向不是那麼深,整體來講我是一個實戰派。我能快速的學習,但知道體系可能不太全面。固然我也會繼續的努力。全面創建體系學習的話來羣654675708學習阿里Java高級大牛直播講解知識點,分享知識,五大階段都是各位老師多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知!
階段一:工程化技術-提高效率 纔能有更多的時間來思考
階段二:源碼分析-成爲一個內功深厚的程序員
階段三:高性能 分佈式 高可用-進入互聯網公司再也不是你的難題
階段四:性能調優-我不甘心只作一個程序員 我還有更高的成就
階段五:項目實戰-理論與時間實踐相結合 你離夢想的距離只學要你點起腳尖
另外我也說下在優酷的面試吧
1 優酷比較注重基礎、表達能力。面試中可能會要求裏用圖形表現你的項目結構
2 經過項目來提問
3 最終領導面會問下離職緣由等,還有技術問題,設計問題,高併發,隔離級別,spring事務控制
固然我卡死在最終領導面試了,價值觀的一些東西沒說好,後面就掛了。技術我感受沒多大問題可能記得的就是若是不用數據怎麼去統計大文本中的訂單信息,交集或是並集,我說能夠用Java的隨機讀,而後將數據保存到map中比較。還有若是如今有30家銀行須要對接,你怎麼去設計
4 保持你的自信心。
提問:
若是須要對api每秒請求次數作限制你該怎麼實現。
個人回答是:
最好經過前置系統來統計,lua腳本之類的
還有就是經過spring aop來攔截統計。加鎖。(面試官說有沒有不鎖,更高性能方案)
其實我想說,要你解耦合非得寫在業務代碼中,應該放在網關那一層多好。他說的更高方案沒有給我答案,誰知道?