從事Java開發(fā)工作十二年總結(jié)
跳槽,對IT人來說絕對不是個(gè)陌生的詞匯,幾乎所有人都身體力行過。首先我要強(qiáng)調(diào)一點(diǎn),跳槽并沒有壞處,但是頻繁的跳槽就不好了。在工作的前4年,必須跳槽,而且鼓勵(lì)跳槽(建議經(jīng)歷2—3家公司);每個(gè)公司對技術(shù)的側(cè)重點(diǎn)都不同,對開發(fā)流程控制都不一樣,所需要的技術(shù)性人才自然不一樣;比如外包公司,要的是一個(gè)代碼狂人(我很喜歡招做過外包的人,感覺很多在外包公司待過的人做事的效率很高);小事業(yè)的公司,要的是一個(gè)全能型的程序員(能設(shè)計(jì)分析,能寫代碼,能部署);大的公司,要的是一個(gè)技術(shù)扎實(shí),有潛力的人(英語好,理解能力好,Java基礎(chǔ)扎實(shí));這樣如果你在一家公司呆久了,很可能就模式化,如果一旦離開這家公司,找工作有時(shí)候很容易碰壁;多經(jīng)歷兩家公司,對程序員很有益!而且我自己也有感覺,每次找工作都在強(qiáng)制自己學(xué)東西。
面試寶典
最近有很多朋友去目前主流的大型互聯(lián)網(wǎng)公司面試(阿里巴巴、京東、美團(tuán)、滴滴),面試回來之后會(huì)發(fā)給我一些面試題。有些朋友輕松過關(guān),拿到offer,但是有一些是來詢問我答案的。
一、阿里巴巴面試
第一個(gè):阿里面試都問什么? :(55分鐘)
1、開發(fā)中Java用了比較多的數(shù)據(jù)結(jié)構(gòu)有哪些?
2談?wù)勀銓ashMap的理解,底層原理的基本實(shí)現(xiàn),HashMap怎么解決碰撞問題的?
這些數(shù)據(jù)結(jié)構(gòu)中是線程安全的嗎?假如你回答HashMap是線程安全的,接著問你有沒有線程安全的map,接下來問了conurren包。
3、對JVM熟不熟悉?簡單說說類加載過程,里面執(zhí)行的哪些操作?問了GC和內(nèi)存管理,平時(shí)在tomect里面有沒有進(jìn)行過相關(guān)的配置
4、然后問了http協(xié)議,get和post的基本區(qū)別,接著tcp/ip協(xié)議,三次握手,窗口滑動(dòng)機(jī)制。
5、開發(fā)中用了那些數(shù)據(jù)庫?回答mysql,儲(chǔ)存引擎有哪些?然后問了我悲觀鎖和樂觀鎖問題使用場景、分布式集群實(shí)現(xiàn)的原理。
6、然后問了我springmvc和mybatis的工作原理,有沒有看過底層源碼?
二、京東金融面試
1、Dubbo超時(shí)重試;Dubbo超時(shí)時(shí)間設(shè)置
2、如何保障請求執(zhí)行順序
3、分布式事物與分布式鎖(扣款不要出現(xiàn)負(fù)數(shù))
4、分布式session設(shè)置
5、執(zhí)行某操作,前50次成功,第51次失敗a全部回滾b前50次提交第51次拋異常,ab場景分別如何設(shè)置Spring(傳播性)
6、Zookeeper有哪些用
7、JVM內(nèi)存模型
8、數(shù)據(jù)庫垂直和水平拆分
9、MyBatis如何分頁;如何設(shè)置緩存;MySQL分
10、熟悉IO么?與NIO的區(qū)別,阻塞與非阻塞的區(qū)別
11、分布式session一致性
12、分布式接口的冪等性設(shè)計(jì)「不能重復(fù)扣款」
三、美團(tuán)面試
1、最近做的比較熟悉的項(xiàng)目是哪個(gè)?畫一下項(xiàng)目技術(shù)架構(gòu)圖
2、JVM老年代和新生代的比例?
3、YGC和FGC發(fā)生的具體場景
4、jstack,jmap,jutil分別的意義?如何線上排查JVM的相關(guān)問題?
5、線程池的構(gòu)造類的方法的5個(gè)參數(shù)的具體意義?
6、單機(jī)上一個(gè)線程池正在處理服務(wù)如果忽然斷電該怎么辦?(正在處理和阻塞隊(duì)列里的請求怎么處理)?
7、使用無界阻塞隊(duì)列會(huì)出現(xiàn)什么問題?
8、接口如何處理重復(fù)請求?
9、具體處理方案是什么?
10、如何保證共享變量修改時(shí)的原子性?
11、設(shè)計(jì)一個(gè)對外服務(wù)的接口實(shí)現(xiàn)類,在1,2,3這三個(gè)主機(jī)(對應(yīng)不同IP)上實(shí)現(xiàn)負(fù)載均衡和順序輪詢機(jī)制(考慮并發(fā))
四、滴滴面試
1、自我介紹,技術(shù)特點(diǎn)
2、興趣是什么,優(yōu)勢是什么
3、jvm,jre以及jdk三者之間的關(guān)系?
4、Dubbo的底層原理,Zookeeper是什么
5、cincurrentMap的機(jī)制;TreeMap;Volatil關(guān)鍵字
6、快速排序;廣度優(yōu)先搜索(隊(duì)列實(shí)現(xiàn))
7、緩存的雪崩以及穿透的理解?
8、HashMap的key可以重復(fù)嗎?
9、synchronized和lock的區(qū)別?
10.開發(fā)一個(gè)大型網(wǎng)站你會(huì)考慮哪些問題?
我特意整理了一下,有很多問題不是靠幾句話能講清楚,所以干脆找朋友錄制了一些視頻,用來回答這些面試題。很多問題其實(shí)答案很簡單,但是背后的思考和邏輯不簡單,要做到知其然還要知其所以然。如果想學(xué)習(xí)Java工程化、高性能及分布式、高性能、深入淺出。性能調(diào)優(yōu)、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java進(jìn)階群,671017482,群里有阿里大牛直播講解技術(shù),以及Java大型互聯(lián)網(wǎng)技術(shù)的視頻免費(fèi)分享給大家。
其實(shí)本來真的沒打算寫這篇文章,主要是自己得記憶力不是很好,不像一些記憶力強(qiáng)的人,面試完以后,幾乎能把自己和面試官的對話都給記下來。自己當(dāng)初面試完以后,除了記住一些聊過的知識(shí)點(diǎn)以外,具體的內(nèi)容基本上忘得一干二凈,所以寫這篇文章其實(shí)是很有難度的。
但是,最近問我的人實(shí)在是太多了,為了避免重復(fù)回答,給自己省點(diǎn)力氣,干脆就在這里統(tǒng)一回復(fù)了。 說實(shí)話,我只能隱約想起并發(fā)、JVM、分布式、TCP/IP協(xié)議這些個(gè)關(guān)鍵字,具體的問題真的是幾乎都沒記住。而且就算我記住了,也告訴你了,你也背會(huì)了,但我覺得,在面試中,你被問到一模一樣問題的可能性依然很小。 甚至,就算你運(yùn)氣好被問到了,你也照著背下來了,也不一定就能對你的面試起到正面的作用,因?yàn)槊嬖嚬偃f一多問一句,你可能就露餡了,那還不如干脆點(diǎn)說不會(huì)更好。