2年6个月11天,外包到阿里的修仙之路
前言
估計(jì)有同學(xué)會(huì)有疑問,為什么要精確到天?是為了裝逼嗎?
答:僅僅是為了證明咱的嚴(yán)謹(jǐn)(其實(shí)就是為了裝逼)
肯定有同學(xué)心里會(huì)吐槽:真的是外包嗎?估計(jì)又是個(gè)標(biāo)題黨,吹牛逼,*&¥%¥
答:真的是外包哈,但是不是阿里的外包。是某傳統(tǒng)外包公司,主要做項(xiàng)目外包。還有就是如果從我離職的那天算起,應(yīng)該是2月3個(gè)月24天。2年6個(gè)月11天是從我這條咸魚突然萌生了想翻身的想法那天算起,拒絕做標(biāo)題黨(づ ̄3 ̄)づ
當(dāng)一條咸魚多好,怎么突然想不通,想要翻身了?
答:
外包也有厲害的,你是不是菜的沒那么明顯?
答:我當(dāng)時(shí)連成員變量是啥都不知道,要比菜沒怕過的。
面經(jīng)都發(fā)了那么久(19年8月),現(xiàn)在才寫這篇文章,最近半年也沒有技術(shù)文章(水文)產(chǎn)出,是不是墮落了,又過上咸魚的日子了?
答:其實(shí)19年就想著要寫這篇文章,希望能幫助到那些跟曾經(jīng)的我一樣的同學(xué)(咸魚)們,當(dāng)時(shí)想著是找個(gè)有空的周末!有空的周末!有空的周末!寫一下,結(jié)果到今年5月還沒寫,剛才業(yè)務(wù)還打電話找我對(duì)需求(周六),已經(jīng)被榨干。。。
文章介紹的修仙教程適合所有人嗎?會(huì)不會(huì)走火入魔?
答:本教程僅適合單身狗修煉,有家室者請(qǐng)勿偷偷修煉,否則一切后果(輕則吵鬧不休、雞犬不寧,重則妻離子散...),本人概不負(fù)責(zé)
我公交車都快到站了,你還不開始?
答:好嘞,容小弟為大爺您細(xì)細(xì)道來
正文
修仙第一步:煉體(菜鳥期)
首先,我到網(wǎng)上搜了一堆 Java 基礎(chǔ)面試題,啥也不說,先背了個(gè)幾天幾夜,這個(gè)方法看似粗暴,實(shí)在暗藏玄機(jī)。
當(dāng)時(shí)的我菜的很真實(shí),很多基礎(chǔ)概念都不懂,背面試題能讓我快速掌握 Java 核心基礎(chǔ)知識(shí)。
放到現(xiàn)在來看,對(duì)于 Java 初學(xué)者,我還是建議可以采用此方法,因?yàn)槊嬖囶}基本都是比較重要的內(nèi)容,也能起到一定的篩選作用,避免初學(xué)者漫無目的的學(xué)習(xí)(瞎搞)。
有些人可能會(huì)以背題為恥,垃圾才背題,我才不背,我要裸面,展示自己的實(shí)力。
結(jié)果大概率是二面掛、一面掛、簡(jiǎn)歷篩選掛,然后默默的背題,然后。。。
我個(gè)人覺得背題其實(shí)挺正常的,大部分人的日常工作基本就是CRUD,很多面試的知識(shí)點(diǎn)日常基本都用不到。我一個(gè)QPS不到10的系統(tǒng),你問我高并發(fā)、熔斷、降級(jí)、秒殺系統(tǒng)的設(shè)計(jì)?
在阿里,大多數(shù)人要出去面試時(shí),我相信即使不是背題,肯定也要溫習(xí)準(zhǔn)備一段時(shí)間?。阿里內(nèi)網(wǎng)還有個(gè)老哥寫了篇文章“那些年,為了進(jìn)阿里背過的面試題”,截至目前得到487個(gè)點(diǎn)贊,1755個(gè)收藏。。
背完基礎(chǔ)面試題后,估計(jì)有些同學(xué)已經(jīng)膨脹了,覺得自己很能打了,就出去面試了,然后出去大概率被面試官一頓瘋狂操作,最后收到那句已經(jīng)聽過無數(shù)遍的話:今天的面試就到這,如果有結(jié)果我們會(huì)再通知您。
小結(jié):該階段主要做兩件事:1)幫助自己快速掌握 Java 的核心基礎(chǔ)概念;2)所有第二階段要系統(tǒng)學(xué)習(xí)的東西在這邊都要了解個(gè)大概,至少要知道核心概念。
一般花1個(gè)月左右的時(shí)間學(xué)習(xí),能學(xué)習(xí)的時(shí)間有公交車上、地鐵上、午休、晚上下班后、周末、帶薪拉????時(shí),能利用的時(shí)間都要利用起來。可能有同學(xué)說周末要陪女朋友,女朋友?不存在的。
修仙第二步:練氣(學(xué)徒期)
熟悉了 Java 的核心基礎(chǔ)概念后,第二階段我們要開始系統(tǒng)的學(xué)習(xí)一些 Java 核心知識(shí)點(diǎn):集合、IO、反射、并發(fā)、鎖、多線程、數(shù)據(jù)庫原理、JVM基礎(chǔ)、常用中間件(Dubbo、Kafka、Redis、Zookeeper)核心原理和框架(Spring、Mybatis、SpringBoot、SpringCloud)核心原理等。
學(xué)習(xí)方式我建議以看源碼和看書為主,看博文和看視頻為輔。可能有的同學(xué)聽說要看源碼就懵了。
看源碼是吃一手飯,其他幾種方式是吃別人嚼過的飯,別人的東西我們無法保證其質(zhì)量,因此還是優(yōu)先吃一手飯。另外,看源碼是對(duì)自己學(xué)習(xí)能力的一種鍛煉,剛開始痛苦,但是摸清套路后,其實(shí)也沒那么難,并且會(huì)讓自己受用終身。
剛開始看源碼的話我這邊墻裂推薦 ArrayList,ArrayList 比較常用并且很簡(jiǎn)單,非常適合初學(xué)者。
JDK1.8 中 ArrayList 的源碼有1400多行(注釋估計(jì)占了一半),但是我們不需要全部看,我們只需要看其中重要的內(nèi)容:基礎(chǔ)屬性、構(gòu)造方法、get 方法、set 方法、add 方法、remove 方法、擴(kuò)容方法等。
看完 ArrayList 之后再繼續(xù)看它的老婆類 LinkedList,面試中這2個(gè)類一般會(huì)被拿來一起問。看完這兩個(gè)類的源碼后,再結(jié)合源碼看看面試中會(huì)問的題目,這個(gè)知識(shí)點(diǎn)基本就掌握的差不多了。
看完 ArrayList 后,估計(jì)有同學(xué)又膨脹了,源碼也不過如此,渣渣。
這時(shí)候建議可以開始看復(fù)雜一點(diǎn)的,優(yōu)先推薦 HashMap,HashMap 是現(xiàn)在面試中被問的最多的基礎(chǔ)知識(shí)點(diǎn)應(yīng)該沒有之一,HashMap 的源碼比 ArrayList 復(fù)雜的不是一點(diǎn)半點(diǎn),再加上 JDK 那寫的賊不規(guī)范的源碼,看著就腦殼疼。
當(dāng)然,一手飯固然香,但是難度會(huì)比較大,所以我們也要適當(dāng)吃一些二手飯(軟飯,阿姨,我不想努力了)。
如果要吃二手飯,我們也要有選擇,不然你吃到的可能不是飯,而是泔水。在這些中,書一般比較有保障,特別是那些豆瓣評(píng)價(jià)不錯(cuò)的書都是經(jīng)過很多人檢驗(yàn)的。還有就是一些堅(jiān)持原創(chuàng)的優(yōu)質(zhì)公眾號(hào)/博客,例如公眾號(hào)程序員囧輝(老臉一紅)。
看書的話,我當(dāng)時(shí)最先看的是那本在大學(xué)時(shí)候買的,被我墊在枕頭下面,陪伴了我無數(shù)個(gè)夜晚的《Java 編程思想》,但是說句實(shí)話,我個(gè)人感覺這本書不是很適合初學(xué)者讀,給我?guī)淼膸椭矝]那么大,所以如果時(shí)間不是很多的話,我這邊不推薦先看這本書,但是用來墊枕頭還是香的,賊厚。
我看過的書中,在這個(gè)階段,我個(gè)人推薦的是:《Java 并發(fā)編程的藝術(shù)》、《Java 并發(fā)編程實(shí)戰(zhàn)》、《深入理解 Java 虛擬機(jī)》(最近出了第三版)、《Redis設(shè)計(jì)與實(shí)現(xiàn)》。當(dāng)時(shí)的我還是個(gè)小菜雞,但是讀這幾本書,并不會(huì)覺得有讀不下去的感覺,因此我覺得適合在這個(gè)階段去讀。
小結(jié):本階段的學(xué)習(xí)是持續(xù)不斷的,在這個(gè)階段我們主要把一些重要的知識(shí)點(diǎn)進(jìn)行了系統(tǒng)的學(xué)習(xí),夯實(shí)自己的基礎(chǔ),提升自己的知識(shí)廣度。
源碼學(xué)習(xí)集中在 JDK 源碼(JDK 1.8),其他的主要是學(xué)習(xí)其核心原理。如果不知道某個(gè)知識(shí)點(diǎn)的核心原理,則可以對(duì)照著面試題去學(xué),面試題問的一般就是核心的東西。
如果你當(dāng)前在外包公司或者是一些傳統(tǒng)公司,修煉完本階段之后,可以嘗試先跳一波。從外包直接跳阿里也不是沒有,但是少。因此,我們要先找一個(gè)平臺(tái)來當(dāng)作跳板,最好是獨(dú)角獸,就是喊出來大家至少能知道有這么個(gè)公司的。
修仙第三步:筑基(入門期)
本階段主要在第二階段的基礎(chǔ)上,進(jìn)一步提升自己的知識(shí)深度和項(xiàng)目實(shí)踐。說的直白點(diǎn)就是提升自己的亮點(diǎn),讓自己在面試時(shí)有裝逼的資本。
本階段我們會(huì)挑選一到兩個(gè)常用的中間件或框架,來深入學(xué)習(xí)其源碼,例如:Spring、Mybatis、SpringBoot、SpringCloud、RPC(Dubbo、gRpc、公司自研)、MQ(Kafka、RocketMQ、公司自研)、Redis、Zookeeper、JVM、數(shù)據(jù)庫中間件(TDDL、MyCat)等。
JDK 源碼直接肉眼看的話問題不大,但是如果你直接肉眼看中間件和框架源碼的話,你會(huì)知道什么叫做殘忍。比較合理的的學(xué)習(xí)方法是反復(fù)debug源碼+做筆記,我一般是把源碼下載到本地,然后直接在源碼上做筆記。
除了源碼,本階段另一個(gè)重要的內(nèi)容是要提升自己的項(xiàng)目亮點(diǎn)。估計(jì)大部分同學(xué)在面試時(shí)都被問到過這個(gè)問題:你在項(xiàng)目中有什么亮點(diǎn)嗎?此時(shí)自己內(nèi)心的OS是:我TM一個(gè)QPS不到10的項(xiàng)目,有個(gè)雞兒亮點(diǎn)。
如果你的項(xiàng)目本身就有高并發(fā)、大數(shù)據(jù)量的情況,那么找亮點(diǎn)應(yīng)該不難。否則,我們可以從以下幾個(gè)方向去找:1)比較復(fù)雜的場(chǎng)景方案設(shè)計(jì);2)系統(tǒng)穩(wěn)定性保障方面的設(shè)計(jì):限流、熔斷、降級(jí)等(6位數(shù)的密碼保護(hù)2位數(shù)的存款);3)線上問題的排查和解決:死鎖、宕機(jī)、Full GC 頻繁等。
除了列舉的這幾個(gè),還有很多其他的,只要我們?cè)谂龅巾?xiàng)目難題時(shí),能迎男而上,找到自己的項(xiàng)目亮點(diǎn)是順其自然的事。
小結(jié):本階段主要是集中于提升自己的知識(shí)深度和項(xiàng)目中的亮點(diǎn)。讓自己在面試的時(shí)候,能有裝逼的資本。但是切記,裝逼要把握好尺度,切勿過火,畢竟我們是來討飯恰的,不是來裝逼的。
總結(jié)
修仙之路很苦,無數(shù)個(gè)寂寞的夜晚,無數(shù)的誘惑(馬路對(duì)面的洗腳城是我不敢奢求的夢(mèng))。如果能堅(jiān)持下來,我相信大多數(shù)人都能輕松的討一口飯恰,混個(gè)人模狗樣也是很有可能的。
但是要堅(jiān)持下來真的不容易,囧輝現(xiàn)在回憶起那無數(shù)個(gè)寂寞的夜晚,眼角不禁濕潤(rùn)了。
有同學(xué)可能會(huì)有疑惑,修仙不是有十層,怎么只介紹了三層?
答:小弟才疏學(xué)淺,自認(rèn)為目前在第四層修煉中。
怎么判斷自己有沒有走火入魔?
答:如果你覺得自己在這過程中學(xué)到了不少東西,但是發(fā)現(xiàn)不懂的東西更多了,說明你大概率是走在正確的修仙路上,祝大家早日修成正果。
有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
總結(jié)
以上是生活随笔為你收集整理的2年6个月11天,外包到阿里的修仙之路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 84 阶乘的0 数论
- 下一篇: NYOJ 721 纸牌游戏 简