最近幾周與阿里的面試官聊了聊,趁著我還有記憶先寫下來塘揣。本人近5年工作的JAVA程序員包雀,技術(shù)不精。大伙不必太過吐槽亲铡。哈哈才写。我曾兩次時間投過簡歷。
》2013年
第一次是在2013年的時候奖蔓,當(dāng)時工作3年赞草,第一輪面試還是比較容易的。就是講項目的技術(shù)點是過了吆鹤。二輪的話問一些基礎(chǔ)然后可能就忘記了厨疙。失敗告終。
》2016年
第一輪的時候問的比較細(xì)疑务,
像java Object有哪些方法沾凄,
回答:toString equals hashCode wait clone notify notifyall .
然后接著問hashCode相同,equals相同?
回答:不同知允,一般來說這樣約定equals相等那hashCode相等撒蟀,hashCode只是對象的一個映射而已。
主要在集合中來區(qū)分不同的對象温鸽。然后他接著問保屯,那相同hashCode相等的對象在hashmap中是什么區(qū)分的,
我是這樣回答的。hashmap 是由數(shù)組和鏈表組成的配椭,關(guān)于hashmap的查找是根據(jù)將key做hash然后得到鏈表虫溜,對于hash相等的對象是通過鏈表保存的。查找的時候就需要迭代了股缸。
接著又說如果相等hash對象太多衡楞,那么怎么解決迭代的影響。后面接著還問了些數(shù)組與列表的區(qū)別敦姻,多線程相關(guān)的知識瘾境。
第二輪是面試官結(jié)合項目來問,會對你的項目來做一些提問還是比較好回答的
第三輪 我可就慘了镰惦,一上來就問說說你對spring IOC的理解,SpringBeanFactory 是怎么實現(xiàn)的迷守。你對dubbo的理解,自帶有哪些序列化旺入。默認(rèn)的是哪個兑凿。
dubbo怎么知道服務(wù)器狀態(tài)有什么內(nèi)部機制。說一下https的流程茵瘾。說一下jvm優(yōu)化的礼华,項目中是怎么配置的。
我是這樣回答的拗秘,spring通過dispathServlet或是filter加載bean圣絮,一種是基本注解的加載 一種是基本beanxml的加載。通過map來保存實例化和管理生命周期雕旨,ioc來說的話扮匠,map就相當(dāng)于窗口的概念,spring 為什么能做代理凡涩,攔截器的原因棒搜。
可以理解 為一種注冊機制,這種思想還是比較常見的活箕。
然后回答了對dubbo的理解 帮非,dubbo也就是rmi的框架,實現(xiàn)方式也是將zookeeper +netty+hessian+http+webservice等東西集成在一起讹蘑。
rpc的原理也就是動態(tài)代理的一個過程,那dubbo也就是將序列化和付輸方式的封裝然后加再加上zookeeper的協(xié)調(diào)功能筑舅。常見的序列化有xml,json,二進(jìn)制座慰。其中他問為zookeeper能夠發(fā)生服務(wù)是否宕機或是出問題了。
我是這樣理解的翠拣,zookeeper是在服務(wù)器注冊時發(fā)現(xiàn)的版仔,至于為什么能知道哪臺服務(wù)器宕機,那肯定是做監(jiān)聽通過心跳這種機制了來發(fā)現(xiàn)服務(wù)了。但其它我覺得在zookeeper中是應(yīng)該要知曉哪臺服務(wù)器當(dāng)前性能比較好,cpu比較低蛮粮,內(nèi)存使用率不高益缎。
他也問了這個問題了,其實我在看zookeeper的時候想過個問題然想。對于每一個服務(wù)來說莺奔,應(yīng)當(dāng)對外提供監(jiān)控的功能API,就想springBoot一樣有專門的模塊暴露服務(wù)器的資源使用情況变泄,zookeeper是否能監(jiān)聽這些數(shù)據(jù)令哟,而不是根據(jù)隨機或其它方式。
最后提到兩個問題一個說https的流程妨蛹,
我的表達(dá)可能太簡單屏富,Https只是一種協(xié)議,將服務(wù)器客戶端數(shù)據(jù)傳輸通過加密簽名方式來傳遞蛙卤。雙方都需要安裝 證書狠半,客戶端提交的數(shù)據(jù)通過加密后到服務(wù)器,服務(wù)器通過證書私鑰解密颤难,并驗簽神年,然后保證數(shù)據(jù)安全。
然后他說乐严,你知道https最大的重點在哪里嘛瘤袖?我想除了安全還能是什么...想了想。他說了一句‘防劫持’昂验,簽名不就為了防止數(shù)據(jù)被修改而做的嘛捂敌,當(dāng)然‘防劫持‘’說的比較準(zhǔn),我沒有說到點子上既琴≌纪瘢回答了這幾個問題,明顯感覺到不行了甫恩。
最后說了下jvm優(yōu)化逆济,一般你們會調(diào)整哪幾個參數(shù),我說一般會設(shè)置xmx 與xx:persize 兩個參數(shù)磺箕。然后他問一般你們設(shè)置成多少奖慌。
我說,4G xms 1G persize .然后參數(shù)設(shè)置有哪些根據(jù)松靡。我說看項目情況吧简僧,如果項目文件比較多,查詢數(shù)據(jù)量比較大雕欺,功能復(fù)雜點的岛马,會調(diào)高一點棉姐。
具體的值也是看情況,一般的可以看在tomcat下運行時的占用內(nèi)存來看啦逆。接著說 32bit 與64bit 內(nèi)存設(shè)置有什么區(qū)別伞矩。我說32bit 只能設(shè)置到1g多,64應(yīng)該說無限吧夏志。然后他具了個例子乃坤,他有一臺64G的機器,設(shè)置成32的G的堆內(nèi)存行不行盲镶。
我說不考慮業(yè)務(wù)發(fā)展的話 設(shè)這么多應(yīng)該不合適吧侥袜。當(dāng)然 我沒有具體想過個問題,也不知道設(shè)置成一半有什么后果溉贿。一般項目沒有實際去調(diào)整過枫吧。‘‘壓縮’’指針我也不知道啥玩意宇色。最后我忍不住了九杂。
我說我屬于項目型的,沒有特別入深入研究的框架宣蠕。但是看源碼或是解決問題能力還是有的例隆。整個面試就結(jié)束了
總結(jié):來說還是被虐了,當(dāng)然還是我技不如人抢蚀。其實想自己開發(fā)近5年了還是這種水平還是太搓了點镀层。像dubbo,zookeeper也是簡單的了解 沒有在項目中實際用過皿曲。也只是談過自己理解唱逢,像jvm調(diào)優(yōu)這就更沒深入。一般也就是那幾個參數(shù)了屋休。dubbo坞古,zookeeper,jvm調(diào)優(yōu)深入理解實戰(zhàn)劫樟。建立你的Java知識體系痪枫。
我的技術(shù)表達(dá)能力不太專業(yè),我喜歡將自己的經(jīng)驗加自己去理解一些技術(shù)點叠艳。研究的方向不是那么深奶陈,總體來說我是一個實戰(zhàn)派。我能快速的學(xué)習(xí)附较,但知道體系可能不太全面尿瞭。當(dāng)然我也會繼續(xù)的努力。全面系統(tǒng)學(xué)習(xí)加群654675708
阿里Java高級大牛直播講解知識點翅睛,分享知識声搁,五大階段都是各位老師多年工作經(jīng)驗的梳理和總結(jié),帶著大家全面捕发、科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知疏旨!
另外我也說下在優(yōu)酷的面試吧
1 優(yōu)酷比較注重基礎(chǔ)、表達(dá)能力扎酷。面試中可能會要求里用圖形表現(xiàn)你的項目結(jié)構(gòu)
2 通過項目來提問
3 最終領(lǐng)導(dǎo)面會問下離職原因等檐涝,還有技術(shù)問題,設(shè)計問題法挨,高并發(fā)谁榜,隔離級別,spring事務(wù)控制
當(dāng)然我卡死在最終領(lǐng)導(dǎo)面試了凡纳,價值觀的一些東西沒說好窃植,后面就掛了。技術(shù)我感覺沒多大問題可能記得的就是如果不用數(shù)據(jù)怎么去統(tǒng)計大文本中的訂單信息荐糜,交集或是并集巷怜,我說可以用Java的隨機讀,然后將數(shù)據(jù)保存到map中比較暴氏。還有如果現(xiàn)在有30家銀行需要對接延塑,你怎么去設(shè)計
4 保持你的自信心。
提問:
如果需要對api每秒請求次數(shù)做限制你該怎么實現(xiàn)答渔。
我的回答是:
最好通過前置系統(tǒng)來統(tǒng)計,lua腳本之類的
還有就是通過spring aop來攔截統(tǒng)計关带。加鎖。(面試官說有沒有不鎖沼撕,更高性能方案)
其實我想說宋雏,要你解耦合非得寫在業(yè)務(wù)代碼中,應(yīng)該放在網(wǎng)關(guān)那一層多好端朵。他說的更高方案沒有給我答案好芭,誰知道?