博客專欄

EEPW首頁 > 博客 > B程序員:講述三年計(jì)算機(jī)學(xué)習(xí)辛酸史

B程序員:講述三年計(jì)算機(jī)學(xué)習(xí)辛酸史

發(fā)布人:編碼之外 時(shí)間:2021-08-29 來源:工程師 發(fā)布文章
01

近年來,有些讀者會(huì)問我一些形形色色的問題,讓我很難去回答,甚至給不出建設(shè)性的意見。

舉個(gè)例子:

1.我學(xué)習(xí)什么能進(jìn)入優(yōu)秀的互聯(lián)網(wǎng)公司工作?2.我想做研發(fā)我應(yīng)該學(xué)習(xí)什么?

眾所周知,這問題就像你問學(xué)霸說:你為何如此厲害一樣讓人難以回答。我作為一個(gè)雙非軟工本科學(xué)生,經(jīng)過大學(xué)自己摸索和不斷試錯(cuò),畢業(yè)開始在百度從事研發(fā)工作。其實(shí),我當(dāng)時(shí)也有很多的疑惑,在這里給大家講講我的踩坑歷程。

記憶中,我當(dāng)年逛知乎、求助高人、甚至我的導(dǎo)師,都無法給出一個(gè)可操作的建議。除此之外,在我那種二本學(xué)校,知名企業(yè)都不會(huì)去咱學(xué)校校招,我和學(xué)長們對(duì)春秋招的概念微乎其微,進(jìn)大廠是件很困難的事情,概率與踩狗屎不相上下。

作為探路者,求助知乎和論壇,給出的結(jié)論幾乎都是好好學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)/算法、現(xiàn)在大數(shù)據(jù)很火你應(yīng)該學(xué)學(xué)Hadoop/Spark、你要是會(huì)微服務(wù)、docker、k8s一定會(huì)很加分。

讓我想起了我當(dāng)年問學(xué)霸題目如何解?學(xué)霸說:這個(gè)題目是來源于第X章第X例題,你這樣解,答案就出來了,很容易的。至于為什么他能想到,鬼也不知道。

當(dāng)時(shí),我真的是花里胡哨的啥都學(xué),啥都去倒騰,不知道是不是梁靜茹給我的勇氣。前端、后端技術(shù)棧、Hadoop/Spark、docker/k8s這些幾乎都實(shí)操過,只是很多只是入門并沒有深入研究,效果自然也十分有限。

這些概念,對(duì)于小白或者在校生來說,這仿佛在對(duì)說你不用學(xué)了,除非你天生技術(shù)欲望特別強(qiáng)烈。這對(duì)于大多數(shù)普通人來說,明顯是勸退的節(jié)奏,可操性十分有限,幾乎沒有參考價(jià)值,不知道從何下手。

其實(shí),道理是沒有錯(cuò)的,多研究底層和熱門技術(shù)棧是有益的。但是,脫離實(shí)際情況談技術(shù)就是扯犢子,就像讓中國男足拿世界杯冠軍顯然不符合實(shí)際,更應(yīng)該是根據(jù)實(shí)際情況,做產(chǎn)出最大的事情,否則會(huì)信心全無。

接下來,我系統(tǒng)性拆分問題,在不同階段應(yīng)該「學(xué)什么」、「如何學(xué)」、「學(xué)到什么程度」,重點(diǎn)講我當(dāng)時(shí)遇到的問題,還有我是如何去思考的,最終如何解決的,思路比結(jié)論重要。

02

根據(jù)問題歸類來看,主要在我自己的角度談?wù)勂胀ū究迫绾螌?shí)現(xiàn)進(jìn)入Top級(jí)互聯(lián)網(wǎng)工作?

首先,說說在大廠工作都是些什么樣的人,他們當(dāng)年都是背著什么光環(huán)混進(jìn)去的?

經(jīng)過我的調(diào)研和分析,重點(diǎn)說一下在校招中面試官看中和考察的東西。

1.學(xué)歷/專業(yè)、扎實(shí)專業(yè)基本功2.有成果的科研經(jīng)歷3.省/國家級(jí)軟件設(shè)計(jì)大賽4.豐富互聯(lián)網(wǎng)公司實(shí)習(xí)經(jīng)歷5.小有名氣的開源項(xiàng)目經(jīng)歷

大概思路就是,要么你證明你令人信服的天賦如邏輯系統(tǒng)思維、聰明,讓人覺得你可以被快速培養(yǎng);要么你有豐富的工程實(shí)戰(zhàn)經(jīng)驗(yàn),證明你具備優(yōu)秀工程師的潛質(zhì)。

當(dāng)然,你可能會(huì)說這么多要求,恐怕神仙也做不到啊,簡直太苛刻了。在這里,并不是上述要點(diǎn)全部滿足,只是滿足其中兩項(xiàng)證明你的實(shí)力即可,畢竟面試時(shí)間十分有限,要有點(diǎn)讓人信服的東西,否則誰愿意花時(shí)間跟你逼逼沒用的。

舉個(gè)例子:

1、假設(shè)你是上海交大、華中科大大學(xué)畢業(yè)的學(xué)生,你可能只需要重點(diǎn)復(fù)習(xí)數(shù)據(jù)結(jié)構(gòu)/算法等專業(yè)知識(shí),輔之把學(xué)校的科研經(jīng)歷說一下??赡苓M(jìn)入什么阿里華為百度問題都不是很大,專業(yè)知識(shí)對(duì)于你們來說自然不在話下,畢竟考理論是你們的特長。

2、假如你是雙非大學(xué)畢業(yè)的學(xué)生,那么你必須用國家級(jí)大賽、開源項(xiàng)目、互聯(lián)網(wǎng)公司經(jīng)歷證明自己。總之,多做項(xiàng)目,專注于技術(shù)本身,讓自己更早具備職業(yè)軟件工程師的實(shí)戰(zhàn)技能。

簡而言之,你沒有光環(huán),那就比別人多努力點(diǎn),提前做好職業(yè)規(guī)劃,把時(shí)間投入技術(shù)本身不要投機(jī)取巧。

03

鑒于上述分析,知道需求是什么?對(duì)于我們來說,主要把精力投入在技術(shù)本身。

接下來,我們將面臨一系列問題。

1.我應(yīng)該做什么方向?(方向)2.我應(yīng)該學(xué)習(xí)什么內(nèi)容?(規(guī)劃)3.我如何學(xué)這些內(nèi)容?(方法/策略)4.我應(yīng)該學(xué)到什么程度?(量化)5.如何把理論用到實(shí)際項(xiàng)目/產(chǎn)品中?(產(chǎn)出)

不同方向,意味著不同領(lǐng)域不同,學(xué)習(xí)的知識(shí)和實(shí)戰(zhàn)項(xiàng)目有共性也有差異。在這里,我主要講一下通用的思路。重點(diǎn)拿我擅長方向舉例,其他方向可按照同樣思路舉一反三。

根據(jù)我的經(jīng)驗(yàn),可將內(nèi)容分為原理、應(yīng)用、擅長方向三個(gè)緯度。原理和應(yīng)用緯度必須學(xué)習(xí),方向緯度根據(jù)自己擅長方向深入學(xué)習(xí)。

原理:計(jì)算機(jī)網(wǎng)絡(luò)、操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)/算法,這些東西都是專業(yè)課好好學(xué)即可,數(shù)據(jù)結(jié)構(gòu)/算法可以偶爾刷題。校招的時(shí)候再重點(diǎn)復(fù)習(xí),初級(jí)階段不必花太多時(shí)間深究。

應(yīng)用:它是最基礎(chǔ)的內(nèi)容,不管你從事什么領(lǐng)域都將離不開它們。這也是小白入門重點(diǎn)花費(fèi)時(shí)間的地方,你將在這里不斷與程序斗爭如調(diào)試、驗(yàn)證、異常、解決。

方向:不同方向本質(zhì)上就是在基礎(chǔ)應(yīng)用上擴(kuò)充,發(fā)揮它們擅長領(lǐng)域和特性去解決特定問題。在這里,簡單列一下涉及的技術(shù)棧。

1.后端開發(fā):消息隊(duì)列、緩存、rpc、微服務(wù)。2.大數(shù)據(jù)開發(fā):Hadoop、Spark、Storm、Flink3.自動(dòng)化運(yùn)維:elk、ansible、zabbix、docker、k8s

04

基于上述分析,主要講了整體思路,大家可能會(huì)覺得有點(diǎn)不太好理解。接下來,拿我當(dāng)時(shí)遭遇的處境進(jìn)行舉例闡述,這樣讓不同水平或時(shí)期的同學(xué)有不一樣的體會(huì)。

假如有時(shí)光機(jī)讓時(shí)間往后倒退3年,時(shí)間來到我剛上大二的時(shí)候,作為一枚小萌新開始學(xué)習(xí)JAVA走上后端開發(fā)之路。

對(duì)于我來說,操作系統(tǒng)原理、計(jì)算機(jī)網(wǎng)絡(luò)先戰(zhàn)略性放棄,畢竟剛接觸編程,看高大上的原理,每次上課都想睡覺。當(dāng)然,數(shù)據(jù)結(jié)構(gòu)/算法我還能好好聽聽,畢竟我數(shù)學(xué)功底還行讓我不排斥。

為什么不先學(xué)習(xí)基礎(chǔ)性原理?
舉例:假設(shè)你學(xué)騎自行車,你是直接上去就蹬?還是先把輪子拆下來研究清楚原理再去學(xué)習(xí)怎么蹬?

重點(diǎn):根據(jù)我的經(jīng)歷,在新手階段不管是接觸新的語言,還是新的方向。最快的方式就是先把自行車蹬起來,等你蹬熟練了再去研究輪子是怎么造出來的。

根據(jù)上述策略,刨除我踩的一些坑,我把學(xué)習(xí)征途劃分四個(gè)階段,實(shí)現(xiàn)學(xué)習(xí)效率的最優(yōu)解。

第一階段:新手入門

在我入門的時(shí)候,我遇到的最大困難是代碼不會(huì)寫,DEBUG不會(huì)做,程序報(bào)錯(cuò)不會(huì)看毫無頭緒,甚至大家常說的百度一下的關(guān)鍵字我也不知道搜。

這時(shí)候,最大的目標(biāo)就是根據(jù)百度/查文檔/看視頻,把程序調(diào)試出預(yù)期結(jié)果,甚至你抄代碼都行,很多時(shí)候抄代碼你都不一定能DEBUG出預(yù)期結(jié)果。這就是現(xiàn)實(shí),主要就是要把對(duì)編程的排斥消磨殆盡。

這個(gè)階段,不需要太關(guān)注底層實(shí)現(xiàn)原理,最重要的工作就是把應(yīng)用層面的技術(shù),不斷練習(xí)直到熟練掌握上面提到的應(yīng)用「 編程語言、Linux、數(shù)據(jù)庫、HTTP網(wǎng)絡(luò)協(xié)議 」。

?時(shí)間:3-6月?目標(biāo):會(huì)調(diào)試、會(huì)查文檔、會(huì)用搜索引擎?內(nèi)容:JAVA基礎(chǔ)語法、MYSQL數(shù)據(jù)庫、Linux操作系統(tǒng)、HTTP通信協(xié)議?方法:只關(guān)注如何使用技術(shù),難以理解的背下來,不關(guān)注底層原理。?成果:實(shí)現(xiàn)常見的管理系統(tǒng)模塊,能部署在服務(wù)器上,供他人訪問。

對(duì)于現(xiàn)已從事計(jì)算機(jī)行業(yè)的同學(xué),其實(shí)這部分內(nèi)容非常簡單,可能按照正常水平少則幾天,多則不超過一周就能開發(fā)出簡單模塊。簡單說,它頂多是普通本科畢設(shè)設(shè)計(jì)水準(zhǔn),主要是讓新手在感官上體驗(yàn)軟件產(chǎn)品。本質(zhì)上,在計(jì)算機(jī)世界里,抽象來看就是數(shù)據(jù)的計(jì)算、傳輸、存儲(chǔ)。隨著你的經(jīng)驗(yàn)增多,你會(huì)發(fā)現(xiàn)很多技術(shù)的誕生或優(yōu)化性能都是在解決計(jì)算、存儲(chǔ)、傳輸?shù)膯栴}。 在這里,主要讓大家在系統(tǒng)的角度感受最簡單、最初級(jí)的技術(shù)模型。

1.Linux操作系統(tǒng):承載應(yīng)用程序、數(shù)據(jù)庫的運(yùn)行,提供CPU供應(yīng)用程序計(jì)算。2.應(yīng)用程序(Java/Python/Php):JAVA主要采用Servlet、JDBC承載網(wǎng)絡(luò)的傳輸、數(shù)據(jù)庫連接管理。3.數(shù)據(jù)庫(MYSQL):主要理解關(guān)系類數(shù)據(jù)庫的存儲(chǔ),對(duì)數(shù)據(jù)進(jìn)行操作。4.HTTP/TCP:熟悉重點(diǎn)網(wǎng)絡(luò)協(xié)議,它分為包頭/包體進(jìn)行傳輸,包體格式可能分為form、json、pb、二進(jìn)制。

第二階段:項(xiàng)目練習(xí)

通過第一個(gè)階段學(xué)習(xí),你對(duì)編程從一無所知到有所斬獲,對(duì)計(jì)算機(jī)世界充滿了好奇,甚至有所開心。這時(shí)候,你最應(yīng)該做的就是去滿足你裝逼的夢(mèng)想。

假設(shè)你是爬蟲方向,你應(yīng)該去爬表情包、爬知乎數(shù)據(jù)、自動(dòng)搶****,去滿足你無數(shù)個(gè)裝逼夢(mèng)想。

假設(shè)你是算法方向,你可以去研究推薦算法、圖像識(shí)別模型,去做個(gè)商品推薦、人臉識(shí)秀一秀。

假設(shè)你是后端方向,你可以去研究下網(wǎng)絡(luò)編程/網(wǎng)站開發(fā)開發(fā)個(gè)仿微信聊天應(yīng)用,體驗(yàn)下lowB版微信。

畫外音:多做項(xiàng)目,坑是一步一步踩出來的。

作為大學(xué)生,實(shí)驗(yàn)室、軟件設(shè)計(jì)比賽、開源社區(qū)都是你發(fā)揮想象力的天堂,這些倒騰的經(jīng)歷將是你畢業(yè)時(shí)最寶貴的經(jīng)歷。


第三階段:強(qiáng)化理論

經(jīng)過前兩個(gè)階段實(shí)踐,時(shí)間來到大三,這時(shí)候基本的軟件開發(fā)已入門差不多達(dá)到普通培訓(xùn)班畢業(yè)水平。同時(shí),專業(yè)課如數(shù)據(jù)結(jié)構(gòu)/操作系統(tǒng)/計(jì)算機(jī)網(wǎng)絡(luò)也上的差不多了,對(duì)概念多多少少有初步了解。

這時(shí)候,你會(huì)發(fā)現(xiàn)很多原理你不懂,將很難更上一層樓。

?你不知道使用ArrayList還是LinkedList??你不知道為什么要使用線程池??你不知道為什么分層設(shè)計(jì)使用分布式場景?

你將處于寫代碼一時(shí)爽,一直寫一直爽,遇到性能問題直接土崩瓦解。所以,你不得不去學(xué)習(xí)理論知識(shí)讓你走得更遠(yuǎn)。

問題:為什么在這個(gè)階段強(qiáng)化理論知識(shí)?
在新手階段去強(qiáng)化理論知識(shí),會(huì)讓你興趣驟減且產(chǎn)生學(xué)了有何用的錯(cuò)覺。同時(shí),這是最好的時(shí)機(jī),學(xué)校專業(yè)課學(xué)完你有基礎(chǔ)概念,你有實(shí)際軟件應(yīng)用場景,這些東西讓你深挖理論的時(shí)候會(huì)快速給你構(gòu)建起基礎(chǔ)圖譜,讓你興趣激增不斷體驗(yàn)學(xué)會(huì)的東西,將戳痛你最痛的神經(jīng),瞬間把你以前遇到的問題有新的認(rèn)知,這就是答案。簡單說,面向問題,解決問題,讓你實(shí)實(shí)在在感受到成長,這就是成就感的力量。

問題:如何高效的學(xué)習(xí)理論?

其實(shí),編程語言和計(jì)算機(jī)基礎(chǔ)都是相通的,只要你學(xué)透一門編程語言剩下的就大同小異。當(dāng)然,計(jì)算機(jī)基礎(chǔ)畢竟是枯燥無味的,學(xué)習(xí)畢竟是有方法的。

舉個(gè)例子:

站在編程語言的角度,你用心去總結(jié),你會(huì)發(fā)現(xiàn)不管什么編程語言,變來變?nèi)ザ际菗Q了個(gè)花樣在談以下內(nèi)容。

?程序結(jié)構(gòu)(數(shù)據(jù)類型、控制語句、面對(duì)對(duì)象、異常處理)?集合(list、set、map)?文件操作、網(wǎng)絡(luò)通信(io、bio、nio)?線程、線程池

不管在面試還是技術(shù)探討,重點(diǎn)考察的都是集合、網(wǎng)絡(luò)通信、線程/線程池。源自于它跟計(jì)算機(jī)基礎(chǔ)有緊密結(jié)合,你要優(yōu)化它們你必須具備扎實(shí)基本功。

基于我的研究經(jīng)驗(yàn),我建議大家在學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)的時(shí)候,不要因?yàn)槔碚摱碚?。你?yīng)該去通過編程語言源碼去學(xué)習(xí)計(jì)算機(jī)基礎(chǔ),只學(xué)你當(dāng)前認(rèn)為最重要的。

舉個(gè)例子:

當(dāng)我去學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)/算法的時(shí)候,我會(huì)一邊學(xué)習(xí)源碼一邊思考數(shù)據(jù)結(jié)構(gòu),這樣就讓我有實(shí)際應(yīng)用場景不會(huì)因?yàn)槔碚摱碚?。我學(xué)習(xí)list、set源碼的時(shí)候,我就學(xué)會(huì)鏈表、棧。我學(xué)習(xí)map的時(shí)候,我就學(xué)會(huì)了紅黑樹、散列表。

當(dāng)我去學(xué)習(xí)計(jì)算機(jī)網(wǎng)絡(luò)的時(shí)候,我會(huì)一邊學(xué)習(xí)socket的用法,學(xué)習(xí)Linux網(wǎng)絡(luò)通信模型epoll,這樣就重點(diǎn)把網(wǎng)絡(luò)協(xié)議學(xué)會(huì)了。同時(shí),很多應(yīng)用場景極少的理論知識(shí),我就粗略記憶或者跳過,這樣就節(jié)約了很多時(shí)間。

當(dāng)我去學(xué)習(xí)線程/線程池的時(shí)候,我會(huì)學(xué)習(xí)鎖機(jī)制、生產(chǎn)者/消費(fèi)者模型這些操作系統(tǒng)原理的重要知識(shí),跟編程語言中關(guān)聯(lián)不大的我就粗略記憶。


第四階段:深究專長

經(jīng)過前面三個(gè)階段的學(xué)習(xí),你已經(jīng)具備扎實(shí)基本功和項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)。接下來,你需要做的就是更加的專業(yè)化,研究一些有生產(chǎn)意義的東西。如果你一直寫學(xué)生管理系統(tǒng),這些沒有價(jià)值沒有意義的東西,那么毫無意義。

這時(shí)候,你應(yīng)該去互聯(lián)網(wǎng)公司驗(yàn)證你學(xué)習(xí)的技能。除此之外,你可以去學(xué)習(xí)額外的成熟先進(jìn)技術(shù)棧。這樣,你就有實(shí)際業(yè)務(wù)經(jīng)驗(yàn),就有技術(shù)的寬度,同時(shí)又有深度,這就是你核心優(yōu)勢,畢竟算法/數(shù)據(jù)結(jié)構(gòu)這些東西在競爭的時(shí)候大家都會(huì)。

畫外音:去實(shí)習(xí),最好去大廠實(shí)習(xí),接受互聯(lián)網(wǎng)軟件開發(fā)的挑戰(zhàn)。要是不能,那么去研究實(shí)際企業(yè)技術(shù)棧的應(yīng)用與底層實(shí)現(xiàn)。

舉個(gè)例子:

假設(shè)你是后端開發(fā),你就可以去學(xué)習(xí)微服務(wù)的技術(shù)棧,springboot、dubbo、docker、hadoop都可以去學(xué)習(xí)。除此之外,設(shè)計(jì)模式,redis原理都可以去學(xué)習(xí)研究,只有這樣當(dāng)你去面試的時(shí)候,你有很多話題和故事講給別人聽,你的專長研究既可以讓你說業(yè)務(wù)場景,你又可以講底層原理,對(duì)答如流

經(jīng)過上面的訓(xùn)練,已經(jīng)具備了解決問題、快速學(xué)習(xí)、編寫代碼能力,也就是具備軟件工程師的職業(yè)素養(yǎng)和扎實(shí)基本功。

這時(shí)候,進(jìn)入互聯(lián)網(wǎng)公司開啟職業(yè)道路,你將會(huì)很快有產(chǎn)出,不會(huì)陷入徘徊自閉的狀態(tài)。更何況,你的職業(yè)素養(yǎng)已經(jīng)能夠讓你遇到問題,能快速的學(xué)習(xí)克服困難。但是,要是讓你去參加面試可不一定能獨(dú)善其身,畢竟工作擰螺絲,面試造火箭可不能疏忽大意。

接下來,重點(diǎn)講一下如何應(yīng)對(duì)面試?

面試也就是把自己賣出去,讓別人覺得你值。簡歷是至關(guān)重要的環(huán)節(jié),所有的知識(shí)和技能全都是圍繞它展開,否則毫無意義。因?yàn)樵诿嬖囍?,面試官關(guān)心你有什么,也就是面試完全圍繞著你會(huì)的東西展開提問,所以你就把你的優(yōu)勢發(fā)揮到極致就行。


環(huán)節(jié)一:準(zhǔn)備簡歷
簡歷一定要認(rèn)真對(duì)待,一定要簡介精煉,盡可能把內(nèi)容壓縮到一頁,畢竟簡歷篩選就30秒不到。這時(shí)候,簡歷排版、簡歷字體、簡歷模板都有講究,細(xì)節(jié)決定成敗。

在寫簡歷的時(shí)候,主要分為個(gè)人資料、實(shí)習(xí)經(jīng)歷、項(xiàng)目經(jīng)歷、專業(yè)技能。其實(shí),沒什么技巧,參考STAR原則,重點(diǎn)體現(xiàn)你在項(xiàng)目中的價(jià)值和思考。

1.要體現(xiàn)做了什么事情?2.遇到什么困難?3.怎么解決的?4.產(chǎn)出是什么?

假設(shè)有讀者需要簡歷模板,可關(guān)注提供給大家。


環(huán)節(jié)二:梳理知識(shí)體系和刷面經(jīng)
以前,學(xué)習(xí)知識(shí)是零散的,學(xué)習(xí)策略更多是面向解決問題,以至于知識(shí)不系統(tǒng),表達(dá)邏輯層次有限。面試官邏輯思維強(qiáng),所以你必須做好充足準(zhǔn)備才能脫穎而出。

最好的策略就是梳理知識(shí)體系和準(zhǔn)備面經(jīng),我們都知道要是你面試官問的問題是你剛好熟悉的問題,你豈不是輕松闖關(guān)成功?所以,準(zhǔn)備考綱、梳理知識(shí)體系、瘋狂刷題這就是最好的策略。

按照互聯(lián)網(wǎng)面試流程大多數(shù)分為三輪面。

一輪面試:主要是考察計(jì)算機(jī)基礎(chǔ)知識(shí)和擅長語言基礎(chǔ)知識(shí),重點(diǎn)考察數(shù)據(jù)結(jié)構(gòu)/算法、網(wǎng)絡(luò)編程、擅長語言基礎(chǔ)。但是,絕對(duì)不是死記硬背的東西,一定是深度和廣度緊密結(jié)合,環(huán)環(huán)相扣直到把你肚子里的東西全部挖出來。

舉個(gè)例子:

1.獲取鏈表倒數(shù)第N個(gè)節(jié)點(diǎn)的值,只遍歷一次。2.有一個(gè)1G大小的一個(gè)文件,里面每一行是一個(gè)詞,詞的大小不超過16字節(jié),內(nèi)存限制大小是1M,返回頻數(shù)最高的100個(gè)詞。3.談?wù)凥ashMap,說下它們的數(shù)據(jù)結(jié)構(gòu)?4.Key在HashCode取余以后,它可能全部堆積在某幾個(gè)Key對(duì)應(yīng)的鏈表上,這樣就會(huì)造成該數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)或者查詢低效,那怎么解決呢?5.為什么會(huì)鏈表要變成紅黑樹,什么時(shí)候從鏈表變成紅黑樹,什么時(shí)候從紅黑樹變回鏈表?6.假設(shè)多個(gè)線程并發(fā)訪問,那可能造成容器更新或者操作出現(xiàn)問題?7.除了使用synchronized加同步鎖,還有沒有其他辦法解決呢?8.為什么采用CAS,能說一下ConcurrentHashMap的具體實(shí)現(xiàn)嗎?

你會(huì)發(fā)現(xiàn)每個(gè)問題都是環(huán)環(huán)相扣,從簡單到難,目的就是挖掘出你的極限。大多數(shù)情況都是,從數(shù)據(jù)結(jié)構(gòu)/算法入手,擴(kuò)展到編程語言特性,再擴(kuò)展到并發(fā)/網(wǎng)絡(luò)編程不斷進(jìn)行深挖。當(dāng)直接問實(shí)際用法應(yīng)試者答不出來的時(shí)候,就會(huì)再次引入到計(jì)算機(jī)基礎(chǔ)知識(shí),這樣不斷反復(fù)調(diào)度試探應(yīng)試者的是深度和廣度。

二輪面試:這輪考察實(shí)習(xí)/項(xiàng)目經(jīng)歷,重點(diǎn)考察你的面試儲(chǔ)備。眾所周知,大部分應(yīng)屆生項(xiàng)目經(jīng)驗(yàn)十分有限,大多數(shù)是圖書館管理系統(tǒng)、電商系統(tǒng)這樣。重點(diǎn)說一下應(yīng)對(duì)策略,可以去網(wǎng)上找你做的項(xiàng)目可能遇到的領(lǐng)域難題,去找解決辦法,最終擴(kuò)展補(bǔ)充到你的項(xiàng)目中。

三輪面試:這輪面試更多是小組經(jīng)理考察應(yīng)試者的邏輯思維、抗壓、時(shí)間管理等基礎(chǔ)能力,看是否能融入團(tuán)隊(duì),畢竟適合團(tuán)隊(duì)的才是最好的。

這里主要講了思路和應(yīng)對(duì)策略,至于篇幅有限,面試題只能讀者自己梳理,假設(shè)有需要后續(xù)再聊。大體的思路:

1.梳理知識(shí)體系看面試可能考哪些東西?2.去網(wǎng)上搜尋和整理面試題?3.把數(shù)據(jù)結(jié)構(gòu)/算法、并發(fā)/網(wǎng)絡(luò)編程、項(xiàng)目實(shí)戰(zhàn)串聯(lián)起來,還要學(xué)會(huì)理論知識(shí)和實(shí)戰(zhàn)中來回串聯(lián)。

總之,作為普通學(xué)校的同學(xué),你只有花更加多的時(shí)間在項(xiàng)目實(shí)戰(zhàn)中,實(shí)習(xí)/打比賽/逛開源社區(qū),這些時(shí)間讓你更快接近成為職業(yè)軟件工程師。當(dāng)機(jī)會(huì)來臨的時(shí)候,你抓住機(jī)會(huì)就踏入大廠的大門了,幸運(yùn)永遠(yuǎn)不會(huì)無緣無故眷顧你。


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: 程序員

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉