我來告訴你虽画,一個草根程序員如何進入BAT

本文作者:?伯樂在線?-?左瀟龍?。

未經作者許可荣病,禁止轉載码撰!歡迎加入伯樂在線?專欄作者。

左瀟龍主頁

本文將從心態(tài)个盆、學習和素養(yǎng)三個方面手把手的告訴你脖岛,LZ作為一個非科班畢業(yè),出身于三流大學的草根,是如何憑借自己的努力歌粥,進入到國內一流互聯(lián)網公司的熏瞄。

心態(tài)

看到這個標題,有的同學可能會說绍在,“LZ,你不是要告訴我們如何進入BAT嗎雹有?怎么一上來就寫心態(tài)偿渡?”

沒錯,LZ第一個要說的霸奕,就是心態(tài)溜宽!

原因很簡單,文章下面即將提到的學習內容质帅,如果你沒有一個好的心態(tài)适揉,是不可能進行下去的。所以煤惩,先過了心態(tài)這一關嫉嘀,再來談別的吧,否則你肯定會死在半路上的盟庞。

說起來吃沪,很多群里的新人都愛問LZ,“你是怎么學習的什猖?為什么我學不進去呢票彪?為什么我一看書就困呢?”

以上這種現(xiàn)象不狮,基本上就是兩個原因降铸,第一個原因是心態(tài)浮躁,總覺得看書好像沒啥用啊摇零,看了好像還是覺得沒學到什么推掸,過不了多久就忘了。第二個原因則是目標感不強,不知道自己要達到什么程度才算可以谅畅,所以也就干脆“一瓶子不滿登渣,半瓶子晃蕩”了。

針對第一個原因毡泻,說到底就是個心態(tài)問題胜茧。總想著看書能夠立竿見影仇味,從菜鳥一下子蛻變?yōu)榇笊裆胪纾绻憷鲜潜е@樣的心態(tài)去看書,你特么不瞌睡才是邪門了丹墨。

而第二個原因廊遍,LZ覺得有時候人要適當?shù)募ぐl(fā)內心的欲望,無欲無求這種高逼格的事贩挣,等你七老八十了再說喉前,現(xiàn)在趁著年輕,心中有點欲望其實并不是什么壞處揽惹,只要你沒被欲望懵逼了雙眼就行被饿。

說起欲望這事兒四康,LZ覺得有必要給大家看一下LZ當初的欲望搪搏,相信從這封郵件里,你就能感受出LZ當時的欲望闪金。這種欲望疯溺,會激勵著你前進,但是你要切記哎垦,在前進的途中囱嫩,調整好自己的心態(tài),戒驕戒躁漏设。

學習

說完心態(tài)墨闲,咱們來談談學習這事兒,還是老規(guī)矩郑口,由于LZ是Java后端出身鸳碧,所以接下來的內容,會與Java后端息息相關犬性,非Java后端的同學可以適當參考瞻离,但切勿照搬。

本篇既然咱們是要談如何進入BAT乒裆,那么咱們就從面試的角度來談學習這件事套利,LZ會談談一流互聯(lián)網公司對于Java后端程序員的要求,相應的,也會談談如何達到這樣的要求肉迫。

為了簡單起見验辞,LZ將這些要求分為三個層次,分別為基本要求喊衫、可選要求以及加分要求受神,接下來,咱們就一個一個的來談一談格侯。

一鼻听、基本要求

基本要求就是指,你必須要學會的知識联四,而且這里面大部分內容撑碴,在面試里出現(xiàn)的概率都是極高的。因此朝墩,這部分內容你沒有選擇醉拓,只能選擇啃下它,你可以花一年收苏,也可以花十年亿卤,或者帶到棺材里學習也可以。

1)語言的基礎部分:

基本要求的第一個鹿霸,當然是語言的基礎部分排吴。基礎部分其實就是語法以及一些關鍵字的作用懦鼠,像一些if/else钻哩、for循環(huán)這類基礎的語法,以及一些new肛冶、class街氢、public這類的基礎關鍵字,大部分情況下面試問的是比較少的睦袖,因為這部分內容珊肃,只要你寫過幾年Java,基本上都沒有什么問題馅笙。

那么基礎部分的重點伦乔,其實主要就是static、final延蟹、transient评矩、volatile這一類的關鍵字,以及內部類阱飘、泛型這一類的高階語法斥杜。

說到static虱颗,首先要記住的最重要的一點就是,類屬性中被static所引用的變量蔗喂,會被作為GC的root根節(jié)點忘渔。作為根節(jié)點就意味著,這一類變量是基本上不會被回收的缰儿。因此畦粮,static很容易引入內存泄漏的風險。

如果一個面試官讓你解釋static關鍵字乖阵,你告訴他static可以修飾屬性宣赔、方法和內部類,以及修飾之后又有什么效果的話瞪浸,那么面試官基本上不會記住你這個回答儒将,整個印象就是平庸。

但是如果你說完以后对蒲,補充一下說道钩蚊,你曾經遇到過一個內存泄漏的問題,就是因為static修飾的一個Map類型的變量導致的蹈矮,最后排查了堆棧信息找到了問題的所在砰逻,并且解決了這個問題。那么泛鸟,面試官這個時候內心中對你的印象蝠咆,就會不自然的提升幾分。

而且谈况,對于static勺美,更深入的理解是,static會將所引用的屬性碑韵、方法以及內部類,與類直接產生引用關系缎脾,而非與類的實例祝闻。這就是為什么,你可以使用類名.屬性遗菠、類名.方法以及類名.內部類名联喘,來直接引用一個被static所修飾的屬性、方法或者內部類辙纬。

如果你沒有用static修飾豁遭,那么你就必須使用實例才能引用這些方法、屬性或者是內部類贺拣,最典型的就是內部類蓖谢。相信很多同學都好奇過捂蕴,為什么一個沒有被static修飾的內部類,必須要這么聲明闪幽。

OutterClass.InnerClass?innerClass?=?new?OutterClass().new?InnerClass();

因為你沒有使用static修飾InnerClass啥辨,所以你必須new出來一個OutterClass的實例,才能在此基礎上new出內部類的實例盯腌,因為內部類只能通過外部類的實例才能引用溉知。如果你使用了static修飾,那么你就可以這樣使用內部類腕够。

OutterClass.StaticInnerClass staticInnerClass = new OutterClass.StaticInnerClass();

這兩種方式最大的區(qū)別就是级乍,第一種方式,如果你想要獲得InnerClass的實例帚湘,你必須有一個OutterClass的實例卡者,所有其實這種方式你創(chuàng)建了兩個實例,所以有兩個new關鍵字客们。而第二種方式就好理解一些崇决,靜態(tài)內部類不依賴于外部類的實例存在,因此只需要直接創(chuàng)建內部類的實例就可以了底挫,所以只有一個new關鍵字恒傻。

static說的有點多了,不過LZ其實不光說了static關鍵字建邓,也一起連同內部類的語法也大致都說了下盈厘。那么接下來,基礎部分還有一個比較考驗人的東西官边,就是volatile關鍵字沸手。

這個關鍵字的重點就三個字,就是可見性注簿。但是面試的時候契吉,你說出可見性三個字,基本上滿分100的話诡渴,最多只能得到20分捐晶。剩下的那80分,就要靠你用硬功夫去獲得了妄辩。

所謂的硬功夫惑灵,其實就是要整明白,在并發(fā)當中眼耀,可見性到底是什么意思英支。那么,為了弄明白可見性什么意思哮伟,就需要你了解什么叫主存和工作內存干花。

只有把這些概念都搞明白了妄帘,你才會知道volatile的真正作用到底是什么。不過有一點要提醒你的是把敢,volatile并不保證同步寄摆,這一點一定要記住。不光是應付面試官修赞,在真正使用volatile的時候婶恼,也要注意這一點,否則很容易出現(xiàn)問題柏副。

好了勾邦,基礎部分就說這么多吧,LZ挑了一些有代表性的說了下割择,歸根結底眷篇,這一部分就是要你非常清晰的了解Java當中的關鍵字和語法,這里所謂的了解荔泳,是清晰的了解其實現(xiàn)原理蕉饼,而非簡單的會用而已。

2)Java運行時環(huán)境

Java運行時環(huán)境就是JRE的中文翻譯玛歌,本質上其實就是指JVM昧港。

首先對于JVM必須要知道的是,JVM與Hotspot的關系支子。JVM更多的是指JVM規(guī)范创肥,而Hotspot是JVM的一種實現(xiàn),也是我們最常用的JVM實現(xiàn)值朋。你可以把JVM規(guī)范當做接口叹侄,Hotspot當做實現(xiàn)類,這樣去理解會比較簡單一些昨登。

此外趾代,JVM最重要的三個部分必須要非常清楚,內存劃分篙骡、class加載機制以及GC策略稽坤。搞清楚這三部分不僅僅是為了面試,也是為了讓你對于Java有更深刻的理解糯俗,這對于你的Java生涯非常有幫助

而且睦擂,關于內存劃分得湘,還有一點要注意,咱們常說的劃分方式顿仇,其實是指的Hotspot的劃分方式淘正,而非JVM規(guī)范所規(guī)定的摆马。

Hotspot的內存劃分簡單說分為三個部分,Young Generation(年輕代)鸿吆、Old Generation(年老代)以及Perm Generation(永久代)囤采。其中的Young Generation(年輕代),又分為Eden惩淳、From和To蕉毯,其中From和To又統(tǒng)稱為Survivor Spaces(幸存區(qū))。

正常情況下思犁,一個對象從創(chuàng)建到銷毀代虾,應該是從Eden,然后到Survivor Spaces(幸存區(qū))激蹲,再到Old Generation(年老代)棉磨,最后在某次GC下消失。

當然学辱,一個對象也可能直接在Eden里死掉乘瓤,也可能一直在Old Generation(年老代)存活,這些都是有可能的策泣。

關于內存劃分衙傀,可以自己沒事用內存分析工具看看,比如jmap着降、jvisualvm等等差油,觀察一下各個區(qū)域的內存變化,結合實際去了解一下任洞。

關于classloader機制的學習蓄喇,可以結合tomcat去學習,了解清楚tomcat的classloader機制交掏,看tomcat是如何保證各個APP之間的類隔離的妆偏。如果可能的話,看一下tomcat中classloader的源碼盅弛,或者看一下LZ的一個開源項目niubi-job钱骂,當中也包含了與tomcat類加載機制相似的部分。

至于GC挪鹏,需要清楚GC Roots都有哪些见秽,以及如何判斷一個對象可以被回收。此外讨盒,GC的算法和策略也要有大概的了解解取。

3)并發(fā)知識與concurrent包

要想進入一線互聯(lián)網公司,這部分內容必須要會返顺,否則的話禀苦,你始終都只能停留在比較low的段位蔓肯。

關于并發(fā)知識,最重要的兩個概念一定要搞清楚振乏,那就是可見性和原子性蔗包。其中可見性與前面提到的volatile關鍵字是息息相關的,可見性只是并發(fā)領域里的一個概念慧邮,而volatile則是Java語言中调限,實實在在保證變量可見性的關鍵字。

前面說了赋咽,要弄清楚可見性旧噪,就需要搞清楚主存和工作內存。關于主存和工作內存脓匿,其實又屬于JVM的知識范疇淘钟。所以從這里就可以看出來,知識都是有關聯(lián)性的陪毡。

原子性其實相對于可見性來說米母,反倒更好理解一些,相信那個萬年不變的銀行匯款的關于事務的例子毡琉,就足以大部分人理解原子性這個概念了铁瞒,它其實就是一個或多個操作,被視作一個整體的意思桅滋。

有了并發(fā)的基礎知識以后慧耍,你就需要研究一下concurrent包了。這里面的東西其實是一個寶藏丐谋,一旦你需要寫并發(fā)相關的功能芍碧,你會發(fā)現(xiàn)這里面的東西非常實用。

其中ConcurrentHashMap是面試最容易被問到的一個類号俐,幾乎所有的面試都會問你泌豆,ConcurrentHashMap和普通的同步HashMap有什么區(qū)別。

這個問題其實需要你知道兩個知識就可以了吏饿,一個是HashMap的數(shù)據結構踪危,一個是鎖分段的技術,具體的LZ這里就不解釋了猪落,大家自己下去找相關資料看吧贞远。

此外,concurrent包里有一個非常重要的類兴革,叫做AbstractQueuedSynchronizer擎勘,幾乎所有的concurrent包內的并發(fā)工具類掩完,都是基于這個抽象類擴展出來的。因此诈胜,把AbstractQueuedSynchronizer這個類研究透徹缓熟,非常有助于你理解concurrent包版述。

最后一點吮龄,面試的時候還經常會被問到的一個問題,就是ReentrantLock和synchronized關鍵字有什么區(qū)別。

記得LZ之前組織過的YY面試活動里,LZ問過很多次這個問題,但幾乎所有人都答不出來喇嘱。這只能說明一個問題构蹬,那就是大部分人在用synchronized和ReentrantLock的時候绷雏,并不會考慮這兩者到底用哪個好一些。

其實它們的區(qū)別很簡單兴猩,簡單的說期吓,就是synchronized由于是底層JVM實現(xiàn)的互斥,因此效率會高一些倾芝。而ReentrantLock的功能則比synchronized更多讨勤,比如定時獲取某個鎖,多個等待條件等晨另。

并發(fā)這一部分是一個程序員進階的重要部分潭千,希望所有Java程序員都可以重視這一部分。

4)設計模式和反射

設計模式和反射這部分內容借尿,LZ個人覺得是一個高階程序員必須精通的部分刨晴。

用好了這部分知識屉来,可以讓你在實際開發(fā)中少寫N多代碼,而且還可以使得程序的結構更加良好狈癞。

關于設計模式LZ這里就不多做介紹了茄靠,關于反射,其實就是reflect包里的內容亿驾,這個包里的類其實并不難嘹黔,主要是得多用,多看莫瞬。比如Java領域里最常用的spring框架,里面其實大量充斥著設計模式和反射的真實使用場景郭蕉,沒事多研究一下疼邀,絕對讓你受益匪淺。

5)文件IO召锈、NIO旁振、網絡IO以及網絡協(xié)議

文件IO、NIO以及網絡IO這一部分也是工作當中要經常用到的部分涨岁,因此也必須要掌握拐袜。

其中NIO更多的是了解其原理,此外梢薪,tomcat中有多種協(xié)議的實現(xiàn)蹬铺,其中包括了BIO、NIO和APR秉撇,這三者一定非常清楚它們的區(qū)別甜攀,這個可以在connector的protocol屬性配置。

至于網絡IO部分琐馆,其實就是net包里的內容规阀。這里面的內容是非常常用的東西,比如你調用HTTP-API瘦麸,那么就需要使用這里面的類谁撼。在這個restful-API泛濫的時代,你少不了要使用HTTP協(xié)議調用API滋饲。

此外厉碟,在了解這部分的時候,網絡協(xié)議也要適當?shù)牧私庖幌铝硕模畹湫偷腡CP和HTTP協(xié)議是一定要了解的墨榄。

在LZ參加的面試中,基本上TCP協(xié)議是一定會問的勿她,雖然這可能和LZ的簡歷寫了TCP協(xié)議有關袄秩,但比如TCP協(xié)議的重試機制,三次握手的過程,TCP與UDP的區(qū)別這一類的知識之剧,還是要了解一下的郭卫。

至于HTTP協(xié)議,相對來說就簡單很多了背稼,應用層的協(xié)議主要是知道其協(xié)議格式即可贰军,比如都支持哪些header、每個header都是什么含義等等蟹肘。

6)小結

好了词疼,到此為止,基本要求就差不多介紹完了帘腹。沒錯贰盗,其實基本要求這部分,差不多就是要求你有扎實的Java基礎阳欲。這也是所有一線互聯(lián)網公司舵盈,基本都會寫在招聘要求地前幾條的要求。

因此球化,要想進入BAT秽晚,那么這一部分的內容一定要了解,而且這部分的內容對你實際開發(fā)也是非常有幫助的筒愚,并不僅僅是為了應付面試赴蝇。

二、可選要求

看到可選要求四個字锨能,或許不少人會認為這部分不太重要扯再。但是LZ可以很負責的告訴你,這部分往往才是決定公司要不要你的重要指標址遇。

因為基本要求達標以后熄阻,公司主要挑選人才的標準其實就是可選要求這一部分,LZ曾經提過差異性這個詞倔约,其實這一部分就是差異性的體現(xiàn)秃殉。

接下來筛谚,LZ就帶大家看看祠丝,到底都有哪些可選的要求。此外窗怒,LZ要提前說明的是绢要,這些可選要求吏恭,沒有必須會和必須不會的內容,盡可能多的了解重罪,總是不會錯的樱哼。

1)Spring哀九、Mybatis框架

框架這部分其實不用多說了,spring和mybatis框架的原理和源碼搅幅,如果你可以非常精通的話阅束,那么這一定能成為你巨大的優(yōu)勢。

如果你是專門做WEB開發(fā)的Java后端猿茄唐,那么spring和mybatis框架基本上你是肯定要用的息裸。精通Spring和mybatis框架不僅為了面試,對于你日常開發(fā)也有巨大的幫助沪编,你可以做很多架構上的優(yōu)化呼盆,為你的戰(zhàn)友省去很多重復性的工作。

關于Spring框架漾抬,最核心的當然是IOC宿亡,其次便是AOP、MVC這兩部分了纳令。好好研究這三部分的源碼,會讓你從大部分程序員當中克胳,脫穎而出平绩。至于mybatis框架,主要還是關注它如何實現(xiàn)動態(tài)SQL漠另。

而且捏雌,待你研究透徹以后,你完全可以自己嘗試去造輪子笆搓,說不定能得到意想不到的收獲性湿。

2)Linux服務器

這一部分其實原本是運維應該精通的部分,但是作為一個Java后端猿满败,如果你可以精通linux服務器肤频,那么對你排查線上問題,是有很大的幫助的算墨。

大部分程序員都只知道一些常用的Linux命令宵荒,對于Linux系統(tǒng)本身的文件系統(tǒng)、網絡以及IO等等净嘀,是完全不了解的报咳,這其實也包括LZ自己。但是挖藏,LZ見過身邊有一些程序員暑刃,對于Linux玩的非常熟練,這不光光體現(xiàn)在多會幾個命令膜眠,而是對整個Linux系統(tǒng)的了解岩臣。

可以預見的是溜嗜,這些人在排查問題的時候,往往會更容易找到問題的根本婿脸。因為程序問題往往并不是最難解決的粱胜,異常這東西見多了就都知道怎么回事了,大不了看看源碼也總能找到原因狐树。最難解決的是環(huán)境問題焙压,而環(huán)境問題無非就是操作系統(tǒng)層面的問題。

而顯然大部分情況下抑钟,Java運行的操作系統(tǒng)都是Linux涯曲。

3)數(shù)據庫優(yōu)化

說完Linux,緊接著LZ要說的就是數(shù)據庫了在塔,這原本應該是DBA應該精通的部分幻件,但作為一個Java后端猿,數(shù)據庫基本上也是最經常打交道的了蛔溃。

而且大家都知道绰沥,一個應用的性能瓶頸,往往都出現(xiàn)在數(shù)據庫這一端贺待,因此徽曲,一個Java后端猿如果可以精通數(shù)據庫的話,那么對于你工作的實際幫助麸塞,也是非常大的秃臣。

相信不少人都碰到過SQL過慢的情況,這個時候哪工,如何通過加索引奥此、SQL分析和優(yōu)化的手段,將SQL的執(zhí)行時間優(yōu)化到一個可接受的范圍內雁比,其實還是比較考驗人的稚虎。

反正,這玩意兒LZ是半斤八兩的水平章贞,基本的優(yōu)化是沒有問題的祥绞,但稍微復雜一些的就不行了。

所以鸭限,這一部分足夠成為你的優(yōu)勢蜕径,體現(xiàn)出你的差異性。

4)消息服務

除了Linux和數(shù)據庫以外败京,消息服務也是當今互聯(lián)網公司里兜喻,必不可少的一個組件。

常見的消息組件比如rabbitMQ赡麦、activeMq朴皆,包括一些其它的開源消息組件帕识,比如rocketMq。這里面任何一個遂铡,如果你可以精通其原理的話肮疗,也會成為你有力的競爭條件。

其實消息服務的重點扒接,無非就是如何保證最終一致性伪货、消息的順序,包括消息事務等等這一類的問題钾怔。

雖然LZ本人對此不是很了解碱呼,但LZ很確定,這一部分如果你可以有自己獨到的見解的話宗侦,一定會大大增加你的成功率愚臀。

5)緩存服務

說了消息服務以后,相信緩存服務大家也一定不陌生了矾利。

常見的緩存比如memcached姑裂、redis這兩個,如果你能搞清楚其中一個的話男旗,也會給你加分許多炭分。畢竟現(xiàn)在的互聯(lián)網應用,緩存也是必不可少的了剑肯,因此如果你能完全hold住緩存這一部分,那么你的差異性也就有了观堂。

在緩存服務當中让网,有幾個問題也是比較常見的,比如緩存滿了怎么辦师痕,緩存的實時性如何處理溃睹,內存結構如何規(guī)劃,分布式的情況下如何處理增刪節(jié)點時緩存的命中問題等等胰坟。

6)負載均衡器

負載均衡器因篇,這是最后一個可選要求了。

常見的負載均衡器就兩種笔横,一種是軟負載均衡竞滓,比如nginx、Apache吹缔、lvs這一類的商佑。另外一種則是硬件負載均衡,常見的主要就是F5厢塘。

這兩種方式各有優(yōu)劣茶没,其中硬件負載均衡如要用于簡單應用肌幽、大訪問量的場景,而軟件復雜均衡則主要用于復雜應用抓半,較小訪問量的場景喂急。當然了,兩者還有一個不得不考慮的區(qū)別是笛求,硬件復雜均衡一般都是非常貴的廊移,而軟負載均衡則基本上沒有任何成本。

在負載均衡器方面涣易,也有一些問題是比較常見的画机。比如如何保持會話,如何做流量控制新症,負載均衡策略都有哪幾種步氏,如何檢查后端服務器的健康狀態(tài)等等。

7)小結

好了徒爹,到這里荚醒,可選要求就說的差不多了。

細心的猿友會發(fā)現(xiàn)隆嗅,這6個要求其實對應的就是Java后端開發(fā)中界阁,最常接觸到的一些東西。比如spring胖喳、mybatis框架和數(shù)據庫泡躯,這基本上是個Java程序員都接觸過吧。

其余四個包括Linux服務器丽焊、消息服務较剃、緩存服務以及負載均衡器,也是一樣的技健,大家在實際工作當中写穴,應該或多或少都接觸過這幾個東西。

但是真正能對其中一個非常了解精通的人雌贱,相信并不會太多啊送。也正因為如此,如果你做到了欣孤,才可以體現(xiàn)出你的差異性馋没,這或許會是你拿下offer的重要籌碼之一。

但是导街,LZ這里必須要再強調一下的是披泪,這幾樣東西大多數(shù)人或多或少都會有一些了解,包括上面LZ提到的問題搬瑰,不少人也都知道答案款票。

然而控硼,光知道答案是遠遠不夠的,這并不足以成為你的優(yōu)勢艾少,你需要對這些問題有著深刻的了解卡乾,以及有著自己獨特的見解,才足以讓它成為你的優(yōu)勢缚够。

三幔妨、加分要求

最后一個便是加分要求了,加分要求雖然不如基本要求和可選要求重要谍椅,但它也與可選要求類似误堡,往往拿下offer的最終原因,正是這些看似不是必要要求的部分雏吭。

接下來锁施,LZ就帶大家一起來看一下,都有哪些可以加分的部分杖们,需要強調的是悉抵,這些加分要求中,在某些特殊情況下摘完,可能會成為基本要求姥饰。

1)數(shù)據結構與算法

這一部分內容不用多說了,大家都懂的孝治。精通數(shù)據結構與算法列粪,絕對會成為你的一大亮點。

因為大部分程序員的這一部分基礎都不太好谈飒,包括LZ本人篱竭,面試的時候如果問到算法一類的問題,LZ基本上就兩個字:不會步绸。

以前LZ還看過Java集合框架的一些源碼,對于一些常用的數(shù)據結構還有一定的了解吃媒。但是現(xiàn)在瓤介,LZ已經基本上忘光了,就連最基本的冒泡排序赘那,可能LZ都不一定能寫的對刑桑。

因此可以預見的是,數(shù)據結構與算法絕對是非常加分的一項募舟。而且祠斧,在你面試一些與算法相關的職位時,這個加分要求還可能會成為基本要求拱礁。

2)計算機操作系統(tǒng)

計算機操作系統(tǒng)原理琢锋,是非常底層的內容辕漂。

這部分內容比較難,里面講的都是一些最基本的底層原理吴超,例如內存钉嘹、指令、系統(tǒng)IO等等鲸阻。

如果你可以將操作系統(tǒng)研究透徹的話跋涣,那么在面試的時候,你完全可以以此作為突破點鸟悴,展示你的亮點陈辱。

3)計算機網絡

其實網絡這一部分,對于程序員來說還是比較重要的细诸。

LZ最近正在做的事情沛贪,就經常會碰到一些網絡上的問題,雖然很多時候揍堰,這些問題其實可以找專門的網絡人員去解決鹏浅,但如果你自己對此不夠了解的話,對于你的工作還是會造成很大的障礙屏歹。

而且隐砸,要想精通TCP/IP協(xié)議,如果對計算機網絡不了解的話蝙眶,還是很難真正理解的季希。

因此,計算機網絡部分如果你可以精通的話幽纷,這也絕對會成為你的一個加分項式塌。

4)熟練使用一種腳本語言

腳本語言在很多時候是很方便的,而且也非常實用友浸。

LZ最近就被迫正在使用Python做很多事情峰尝,其實用了以后你會發(fā)現(xiàn),雖然Java也可以實現(xiàn)同樣的目的收恢,但確實選擇合適的語言武学,會幫你節(jié)省大量的精力。

因此伦意,如果你可以熟練使用一種腳本語言火窒,比如Python、shell等等驮肉,這也必定會成為你的加分項熏矿。

5)你的github和博客

這點相信大部分人也都知道,如果你擁有自己的github和博客,并且里面有不少有價值的內容的話票编,那么一定會為你加不少分褪储。而且,說起github和博客這件事栏妖,LZ還有一個關于自己真實的故事乱豆,在文章的最后給大家分享,這里就暫時不提了吊趾。

此外宛裕,就不說面試這回事,平時在github寫寫代碼论泛,在博客里寫寫文章揩尸,總結總結自己的技術和職場,也是非常有好處的屁奏。相信不少猿友都已經體會到了這其中的益處岩榆,LZ也就不再多說了。

畢竟說多了也無益坟瓢,最主要的還是自己要真真實實的去做勇边,如果你希望可以在這方面加分,那就從當前做起折联,并且堅持下去粒褒。

6)小結

到這里,加分的要求就說的差不多了诚镰。

其實能夠加分的內容還有很多奕坟,LZ只不過列出了比較常見的幾種而已,比如你有其它一線互聯(lián)網公司的背景清笨,這也是可以加分的月杉。只不過這種加分項比較難達到,而且抠艾,這里更多說的是草根程序員苛萎,因此LZ這里就沒多說。

總的來說检号,加分要求和可選要求一樣首懈,都是你致勝的關鍵部分,因此如果可能谨敛,還是要在加分要求上下一些功夫的。

學習小結

關于學習這部分滤否,到這里就說的差不多了脸狸。

其實大部分一線互聯(lián)網公司,對于招人的技術要求就兩個,扎實的Java基礎和一個一技之長炊甲。

扎實的Java基礎泥彤,其實就是本文中基本要求的部分,而一技之長卿啡,其實就是可選要求和加分要求中任意挑選一個就可以了吟吝。

當然了,不可否認的是颈娜,可選要求和加分要求中剑逃,你會的越多,成功率就越高官辽,這點是毋庸置疑的蛹磺。但是如果你一點優(yōu)勢都沒有的話,就算你Java基礎再扎實同仆,其實也很難進去萤捆,因為你這樣的人太多了,無法在眾多面試者中脫穎而出俗批。

雖然不排除你運氣特別好俗或,當時公司正好急缺人,而且沒有其他更好的面試者岁忘,導致你很幸運的拿到了offer辛慰,但畢竟這種概率實在是太小了一些。

說來說去臭觉,知識是擺在那里的昆雀,不會跑也不會動,就看你學或不學蝠筑,以及什么時候學狞膘。

有的人畢業(yè)后一兩年就達到了,有的人用了三五年才達到什乙,而有的人挽封,則是一輩子都沒有達到。要做什么樣的程序員臣镣,就全看你自己了辅愿。

素養(yǎng)

說完了心態(tài)和學習,咱們來談談一個程序員應該有的素養(yǎng)忆某。這部分雖然看似對面試沒什么幫助点待,但其實LZ有時候覺得,這比技術更重要弃舒,因為它們可能會影響到你程序員生涯的發(fā)展癞埠。

一状原、代碼風格

說到程序員的素養(yǎng),第一個就是代碼風格苗踪。

雖然代碼風格并沒有絕對正確的風格颠区,但是在滿足基本的Java代碼風格的前提下,你應該逐漸形成自己的代碼習慣通铲,而且必須是一個好習慣毕莱。

說個最簡單的例子,不管你多么厲害颅夺,如果你的變量命名是用拼音來命名的話朋截,那么別人對你的印象一定是,這是個非常low的程序員碗啄。

其實程序員有時候和藝術家很像质和,一個專注于繪畫的藝術家,一般都會有自己的風格稚字。說得夸張一點饲宿,可能他的畫只要拿出去,就有人能認出來胆描,這其實就是一種風格瘫想。

作為一個程序員,你也應該有你自己的代碼風格昌讲,雖然在工作中国夜,為了大家更好的通過代碼溝通,你或多或少的需要做一些妥協(xié)短绸,和大家保持一致的風格车吹。

但是你自己的開源項目,它應該是你的藝術品醋闭,你在雕琢它的同時窄驹,其實也是在形成你獨特的代碼風格。

而且证逻,有的時候乐埠,你的開源項目,可能可以直接或間接的幫助你囚企,獲得一份不錯的offer丈咐。

二、寫作能力

看到這個或許有的人會很意外龙宏,但是LZ個人覺得棵逊,寫作能力是一個程序員應該有的素養(yǎng)。

代碼風格只是你寫代碼的素養(yǎng)银酗,你還需要有寫文字的能力和素養(yǎng)辆影。一個程序員是否專業(yè)掩浙,文檔和注釋也是一個很重要的衡量標準。

因為不管你的技術多么厲害秸歧,別人看到的,除了你的代碼以外衅澈,就是你的文檔和注釋键菱。這部分能否寫好,在很多時候今布,直接決定了別人對你的印象经备。

因此,寫作能力其實也是一個程序員應該有的素養(yǎng)部默,至少LZ一直是這么認為的侵蒙。因為不管這個人的技術多么厲害,如果他的文檔和注釋寫的一團糟傅蹂,絲毫體現(xiàn)不出專業(yè)二字纷闺,那么他的形象一定會在LZ心中大打折扣。

結尾

本文從心態(tài)份蝴、學習和素養(yǎng)三個方面簡單談了談如何進入BAT犁功,但其實這也是一個程序員學習和提高自己的過程。

在提到github和博客時婚夫,LZ說了要在文章的最后浸卦,給大家講一個關于LZ自己的真實故事,其實這個故事就是LZ來杭州的真實經歷案糙。

LZ之所以能進入現(xiàn)在的公司限嫌,其實很大一部分就是因為LZ有一個經常更新的博客,和一個造了幾個輪子的github时捌。說起來怒医,LZ真的是運氣非常好,或者說是平時的努力匣椰,給LZ帶來了好運氣裆熙。

兩年多以前,LZ特別想進入中間件團隊禽笑,但是發(fā)簡歷老是沒有回音入录,于是LZ就給中間件團隊的leader,寫了一封求職郵件佳镜,表明自己非常想進入中間件團隊僚稿,做服務于技術人員的工作,希望能夠得到面試機會蟀伸。

可惜的是蚀同,當時這個中間件的前輩并沒有回復LZ的郵件缅刽,原本LZ以為是自己的簡歷沒有打動對方。不過LZ后來才知道蠢络,其實是因為當時這個前輩已經離開了中間件衰猛。

不過,兩年以后刹孔,也就是2016年過完年以后,LZ的博客里無意間收到了一封短信髓霞,正是中間件團隊的成員發(fā)給LZ的邀請卦睹。

可以看到,這封短信正是今年過完年LZ收到的方库。剛開始的時候结序,LZ還沒注意到有這么一封短信。直到過完年上了十來天班以后纵潦,差不多快三月份了徐鹤,LZ才注意到短信箱里的這個短信。

LZ清晰記得酪穿,當時看到的時候是周四凳干,LZ看到的時候很意外。

雖然當時LZ并沒有跳槽的打算被济,那段時間也從未投過一封簡歷救赐,不過出于不聊白不聊的原則,LZ還是當天就把簡歷發(fā)給了這位前輩只磷。

出乎意料的是经磅,周四和周五僅僅兩天,LZ接連不斷的經過了四輪電話面試钮追,就從前輩這里得知预厌,LZ非常順利的通過了面試,就等著拿offer就可以了元媚。

當時聽到這個消息的時候轧叽,說實話,LZ真的覺得和做夢差不多刊棕。

原本一兩天前炭晒,LZ還處于剛過完年假的不適應期,同時還在糾結手里的需求怎么實現(xiàn)甥角。突然之間就要奔赴杭州网严,進入自己期待已久的公司,期待已久的部門嗤无,展開另外一番職業(yè)生涯了震束。

LZ當時真心覺得怜庸,這世間的事情,實在是太特么神奇了垢村。當時LZ腦子里不自覺地冒出來的一句話就是割疾,功夫不負有心人啊嘉栓!

LZ日積月累的寫了這么多文章杈曲,終于沒有白寫,給LZ換來了一個機會。

以前LZ覺得胁后,像什么“功夫不負有心人”這一類的話摘昌,都是給別人灌雞湯打雞血的話而已。但真正自己遇到的時候语婴,才會真切的體會到,有的時候道理就是這么簡單,區(qū)別就在于你做還是沒做首有。

就像這篇文章里LZ寫的一樣,今天你看到了枢劝,你做了井联,那或許未來的某一天,你會感謝今天努力的你您旁。但如果你看到了烙常,沒有做,或許你依舊還是那個鹤盒,整天抱怨工作沒勁蚕脏,加班太累的人,然后在碌碌無為和怨天尤人中度過侦锯。

LZ也不想給大家灌什么雞湯驼鞭,打什么雞血,但是LZ想告訴大家尺碰,程序員這個職業(yè)很公平挣棕,相信不少人當初踏上這條路的時候,也是覺得程序員這個職業(yè)充滿著奮斗的氣息亲桥,可以依靠自己的努力改變自己的命運洛心,而不像某些職業(yè)一樣需要拼爹。

在程序員這條路上两曼,努力皂甘,你就有很大希望成就自己的目標和夢想。不努力悼凑,那你就基本上原地踏步下去偿枕,直到被后浪拍死在沙灘上璧瞬。

如何抉擇,其實完全看你自己渐夸,只要你不后悔你的決定嗤锉。所以,少點抱怨墓塌,多點行動瘟忱。

如果你能接受平庸下去,那就平庸下去苫幢,幸福的過完你的一生访诱,也沒什么不好。否則韩肝,你就堅持努力下去触菜,直到達到你一個又一個目標。

最怕的情況就是哀峻,心中充滿了欲望涡相,不甘于平庸,卻又不愿意努力的人剩蟀,這樣的人催蝗,如果做了程序員,真的是一種悲哀育特。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末丙号,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缰冤,更是在濱河造成了極大的恐慌槽袄,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锋谐,死亡現(xiàn)場離奇詭異遍尺,居然都是意外死亡,警方通過查閱死者的電腦和手機涮拗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門乾戏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人三热,你說我怎么就攤上這事鼓择。” “怎么了就漾?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵呐能,是天一觀的道長。 經常有香客問我,道長摆出,這世上最難降的妖魔是什么朗徊? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮偎漫,結果婚禮上爷恳,老公的妹妹穿的比我還像新娘。我一直安慰自己象踊,他們只是感情好温亲,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杯矩,像睡著了一般栈虚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上史隆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天节芥,我揣著相機與錄音,去河邊找鬼逆害。 笑死,一個胖子當著我的面吹牛蚣驼,可吹牛的內容都是我干的魄幕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼颖杏,長吁一口氣:“原來是場噩夢啊……” “哼纯陨!你這毒婦竟也來了?” 一聲冷哼從身側響起留储,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤翼抠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后获讳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阴颖,經...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年丐膝,在試婚紗的時候發(fā)現(xiàn)自己被綠了量愧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡帅矗,死狀恐怖偎肃,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情浑此,我是刑警寧澤累颂,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站凛俱,受9級特大地震影響紊馏,放射性物質發(fā)生泄漏料饥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一瘦棋、第九天 我趴在偏房一處隱蔽的房頂上張望稀火。 院中可真熱鬧,春花似錦赌朋、人聲如沸凰狞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赡若。三九已至,卻和暖如春团甲,著一層夾襖步出監(jiān)牢的瞬間逾冬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工躺苦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留身腻,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓匹厘,卻偏偏與公主長得像嘀趟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愈诚,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內容