為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法送火?

01 | 為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法拳话?

你是不是覺得數(shù)據(jù)結(jié)構(gòu)和算法,跟操作系統(tǒng)种吸、計(jì)算機(jī)網(wǎng)絡(luò)一樣弃衍,是脫離實(shí)際工作的知識(shí)?可能除了面試坚俗,這輩子也用不著镜盯?

盡管計(jì)算機(jī)相關(guān)專業(yè)的同學(xué)在大學(xué)都學(xué)過這門課程,甚至很多培訓(xùn)機(jī)構(gòu)也會(huì)培訓(xùn)這方面的知識(shí)猖败,但是據(jù)我了解速缆,很多程序員對(duì)數(shù)據(jù)結(jié)構(gòu)和算法依舊一竅不通。還有一些人也只聽說過數(shù)組恩闻、鏈表艺糜、快排這些最最基本的數(shù)據(jù)結(jié)構(gòu)和算法,稍微復(fù)雜一點(diǎn)的就完全沒概念。

當(dāng)然破停,也有很多人說翅楼,自己實(shí)際工作中根本用不到數(shù)據(jù)結(jié)構(gòu)和算法。所以真慢,就算不懂這塊知識(shí)毅臊,只要Java

API、開發(fā)框架用得熟練黑界,照樣可以把代碼寫得“飛”起來管嬉。事實(shí)真的是這樣嗎?

今天我們就來詳細(xì)聊一聊园爷,為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法宠蚂。

想要通關(guān)大廠面試,千萬別讓數(shù)據(jù)結(jié)構(gòu)和算法拖了后腿

很多大公司童社,比如BAT、Google著隆、Facebook扰楼,面試的時(shí)候都喜歡考算法、讓人現(xiàn)場(chǎng)寫代碼美浦。有些人雖然技術(shù)不錯(cuò)弦赖,但每次去面試都會(huì)“跪”在算法上,很是可惜浦辨。那你有沒有想過蹬竖,為什么這些大公司都喜歡考算法呢?

校招的時(shí)候流酬,參加面試的學(xué)生通常沒有實(shí)際項(xiàng)目經(jīng)驗(yàn)币厕,公司只能考察他們的基礎(chǔ)知識(shí)是否牢固。社招就更不用說了芽腾,越是厲害的公司旦装,越是注重考察數(shù)據(jù)結(jié)構(gòu)與算法這類基礎(chǔ)知識(shí)。相比短期能力摊滔,他們更看中你的長期潛力阴绢。

你可能要說了,我不懂?dāng)?shù)據(jù)結(jié)構(gòu)與算法艰躺,照樣找到了好工作啊呻袭。那我是不是就不用學(xué)數(shù)據(jù)結(jié)構(gòu)和算法呢?當(dāng)然不是腺兴,你別忘了左电,

我們學(xué)任何知識(shí)都是為了“用”的,是為了解決實(shí)際工作問題的 ,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法自然也不例外券腔。

業(yè)務(wù)開發(fā)工程師伏穆,你真的愿意做一輩子CRUD boy嗎?

如果你是一名業(yè)務(wù)開發(fā)工程師纷纫,你可能要說枕扫,我整天就是做數(shù)據(jù)庫CRUD(增刪改查),哪里用得到數(shù)據(jù)結(jié)構(gòu)和算法叭杩烟瞧?

是的,對(duì)于大部分業(yè)務(wù)開發(fā)來說染簇,我們平時(shí)可能更多的是利用已經(jīng)封裝好的現(xiàn)成的接口参滴、類庫來堆砌、翻譯業(yè)務(wù)邏輯锻弓,很少需要自己實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和算法砾赔。但是,

不需要自己實(shí)現(xiàn)青灼,并不代表什么都不需要了解 暴心。

如果不知道這些類庫背后的原理,不懂得時(shí)間杂拨、空間復(fù)雜度分析专普,你如何能用好、用對(duì)它們弹沽?存儲(chǔ)某個(gè)業(yè)務(wù)數(shù)據(jù)的時(shí)候檀夹,你如何知道應(yīng)該用ArrayList,還是Linked

List呢策橘?調(diào)用了某個(gè)函數(shù)之后炸渡,你又該如何評(píng)估代碼的性能和資源的消耗呢?

作為業(yè)務(wù)開發(fā)役纹,我們會(huì)用到各種框架偶摔、中間件和底層系統(tǒng),比如Spring促脉、RPC框架辰斋、消息中間件、Redis等等瘸味。

在這些基礎(chǔ)框架中宫仗,一般都揉和了很多基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)和算法的設(shè)計(jì)思想。

比如旁仿,我們常用的Key-Value數(shù)據(jù)庫Redis中藕夫,里面的有序集合是用什么數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的呢孽糖?為什么要用跳表來實(shí)現(xiàn)呢?為什么不用二叉樹呢毅贮?

如果你能弄明白這些底層原理办悟,你就能更好地使用它們。即便出現(xiàn)問題滩褥,也很容易就能定位病蛉。因此,

掌握數(shù)據(jù)結(jié)構(gòu)和算法瑰煎,不管對(duì)于閱讀框架源碼铺然,還是理解其背后的設(shè)計(jì)思想,都是非常有用的酒甸。

在平時(shí)的工作中魄健,數(shù)據(jù)結(jié)構(gòu)和算法的應(yīng)用到處可見。我來舉一個(gè)你非常熟悉的例子:如何實(shí)時(shí)地統(tǒng)計(jì)業(yè)務(wù)接口的99%響應(yīng)時(shí)間插勤?

你可能最先想到沽瘦,每次查詢時(shí),從小到大排序所有的響應(yīng)時(shí)間饮六,如果總共有1200個(gè)數(shù)據(jù)其垄,那第1188個(gè)數(shù)據(jù)就是99%的響應(yīng)時(shí)間。很顯然卤橄,每次用這個(gè)方法查詢的話都要排序,效率是非常低的臂外。但是窟扑,如果你知道“堆”這個(gè)數(shù)據(jù)結(jié)構(gòu),用兩個(gè)堆可以非常高效地解決這個(gè)問題漏健。

基礎(chǔ)架構(gòu)研發(fā)工程師嚎货,寫出達(dá)到開源水平的框架才是你的目標(biāo)!

現(xiàn)在互聯(lián)網(wǎng)上的技術(shù)文章蔫浆、架構(gòu)分享殖属、開源項(xiàng)目滿天飛,照貓畫虎做一套基礎(chǔ)框架并不難瓦盛。我就拿RPC框架舉例洗显。

不同的公司、不同的人做出的RPC框架原环,架構(gòu)設(shè)計(jì)思路都差不多挠唆,最后實(shí)現(xiàn)的功能也都差不多。但是有的人做出來的框架嘱吗,Bug很多玄组、性能一般、擴(kuò)展性也不好,只能在自己公司僅有的幾個(gè)項(xiàng)目里面用一下俄讹。而有的人做的框架可以開源到GitHub上給很多人用哆致,甚至被Apache收錄。為什么會(huì)有這么大的差距呢患膛?

我覺得摊阀,高手之間的競(jìng)爭其實(shí)就在細(xì)節(jié)。這些細(xì)節(jié)包括:你用的算法是不是夠優(yōu)化剩瓶,數(shù)據(jù)存取的效率是不是夠高驹溃,內(nèi)存是不是夠節(jié)省等等。這些累積起來延曙,決定了一個(gè)框架是不是優(yōu)秀豌鹤。所以,如果你還不懂?dāng)?shù)據(jù)結(jié)構(gòu)和算法枝缔,沒聽說過大O復(fù)雜度分析布疙,不知道怎么分析代碼的時(shí)間復(fù)雜度和空間復(fù)雜度,那肯定說不過去了愿卸,趕緊來補(bǔ)一補(bǔ)吧灵临!

對(duì)編程還有追求?不想被行業(yè)淘汰趴荸?那就不要只會(huì)寫湊合能用的代碼儒溉!

何為編程能力強(qiáng)?是代碼的可讀性好发钝、健壯顿涣?還是擴(kuò)展性好?我覺得沒法列酝豪,也列不全涛碑。但是,在我看來孵淘,性能好壞起碼是其中一個(gè)非常重要的評(píng)判標(biāo)準(zhǔn)

蒲障。但是,如果你連代碼的時(shí)間復(fù)雜度瘫证、空間復(fù)雜度都不知道怎么分析揉阎,怎么寫出高性能的代碼呢?

你可能會(huì)說痛悯,我在小公司工作余黎,用戶量很少,需要處理的數(shù)據(jù)量也很少载萌,開發(fā)中不需要考慮那么多性能的問題惧财,完成功能就可以巡扇,用什么數(shù)據(jù)結(jié)構(gòu)和算法,差別根本不大垮衷。但是你真的想“十年如一日”地做一樣的工作嗎厅翔?

經(jīng)常有人說,程序員35歲之后很容易陷入瓶頸搀突,被行業(yè)淘汰刀闷,我覺得原因其實(shí)就在此。有的人寫代碼的時(shí)候仰迁,從來都不考慮非功能性的需求甸昏,只是完成功能,湊合能用就好徐许;做事情的時(shí)候施蜜,也從來沒有長遠(yuǎn)規(guī)劃,只把眼前事情做好就滿足了雌隅。

我曾經(jīng)面試過很多大齡候選人翻默,簡歷能寫十幾頁,經(jīng)歷的項(xiàng)目有幾十個(gè)恰起,但是細(xì)看下來修械,每個(gè)項(xiàng)目都是重復(fù)地堆砌業(yè)務(wù)邏輯而已,完全沒有難度遞進(jìn)检盼,看不出有能力提升肯污。久而久之,十年的積累可能跟一年的積累沒有任何區(qū)別吨枉。這樣的人仇箱,怎么不會(huì)被行業(yè)淘汰呢?

如果你在一家成熟的公司东羹,或者BAT這樣的大公司,面對(duì)的是千萬級(jí)甚至億級(jí)的用戶忠烛,開發(fā)的是TB属提、PB級(jí)別數(shù)據(jù)的處理系統(tǒng)。性能幾乎是開發(fā)過程中時(shí)刻都要考慮的問題美尸。一個(gè)簡單的ArrayList冤议、Linked

List的選擇問題,就可能會(huì)產(chǎn)生成千上萬倍的性能差別师坎。這個(gè)時(shí)候恕酸,數(shù)據(jù)結(jié)構(gòu)和算法的意義就完全凸顯出來了。

其實(shí)胯陋,我覺得蕊温,數(shù)據(jù)結(jié)構(gòu)和算法這個(gè)東西袱箱,如果你不去學(xué),可能真的這輩子都用不到义矛,也感受不到它的好发笔。但是一旦掌握,你就會(huì)常常被它的強(qiáng)大威力所折服凉翻。之前你可能需要費(fèi)很大勁兒來優(yōu)化的代碼了讨,需要花很多心思來設(shè)計(jì)的架構(gòu),用了數(shù)據(jù)結(jié)構(gòu)和算法之后制轰,很容易就可以解決了前计。

內(nèi)容小結(jié)

我們學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法,并不是為了死記硬背幾個(gè)知識(shí)點(diǎn)垃杖。我們的目的是建立時(shí)間復(fù)雜度男杈、空間復(fù)雜度意識(shí),寫出高質(zhì)量的代碼缩滨,能夠設(shè)計(jì)基礎(chǔ)架構(gòu)势就,提升編程技能,訓(xùn)練邏輯思維脉漏,積攢人生經(jīng)驗(yàn)苞冯,以此獲得工作回報(bào),實(shí)現(xiàn)你的價(jià)值侧巨,完善你的人生舅锄。

所以,不管你是業(yè)務(wù)開發(fā)工程師司忱,還是基礎(chǔ)架構(gòu)工程師皇忿;不管你是初入職場(chǎng)的初級(jí)工程師,還是工作多年的資深架構(gòu)師坦仍,又或者是想轉(zhuǎn)人工智能鳍烁、區(qū)塊鏈這些熱門領(lǐng)域的程序員,數(shù)據(jù)結(jié)構(gòu)與算法作為計(jì)算機(jī)的基礎(chǔ)知識(shí)繁扎、核心知識(shí)幔荒,都是必須要掌握的。

掌握了數(shù)據(jù)結(jié)構(gòu)與算法梳玫,你看待問題的深度爹梁,解決問題的角度就會(huì)完全不一樣

。因?yàn)檫@樣的你提澎,就像是站在巨人的肩膀上姚垃,拿著生存利器行走世界。數(shù)據(jù)結(jié)構(gòu)與算法盼忌,會(huì)為你的編程之路积糯,甚至人生之路打開一扇通往新世界的大門掂墓。

你為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法呢?在過去的軟件開發(fā)中絮宁,數(shù)據(jù)結(jié)構(gòu)和算法在哪些地方幫到了你梆暮?

歡迎留言和我分享,我會(huì)第一時(shí)間給你反饋绍昂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啦粹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窘游,更是在濱河造成了極大的恐慌唠椭,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評(píng)論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍饰,死亡現(xiàn)場(chǎng)離奇詭異贪嫂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)艾蓝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門力崇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赢织,你說我怎么就攤上這事亮靴。” “怎么了于置?”我有些...
    開封第一講書人閱讀 169,787評(píng)論 0 365
  • 文/不壞的土叔 我叫張陵茧吊,是天一觀的道長。 經(jīng)常有香客問我八毯,道長搓侄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評(píng)論 1 300
  • 正文 為了忘掉前任话速,我火速辦了婚禮讶踪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泊交。我一直安慰自己俊柔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評(píng)論 6 398
  • 文/花漫 我一把揭開白布活合。 她就那樣靜靜地躺著,像睡著了一般物赶。 火紅的嫁衣襯著肌膚如雪白指。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,821評(píng)論 1 314
  • 那天酵紫,我揣著相機(jī)與錄音告嘲,去河邊找鬼错维。 笑死,一個(gè)胖子當(dāng)著我的面吹牛橄唬,可吹牛的內(nèi)容都是我干的赋焕。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼仰楚,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼隆判!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起僧界,我...
    開封第一講書人閱讀 40,196評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤侨嘀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捂襟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咬腕,經(jīng)...
    沈念sama閱讀 46,716評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評(píng)論 3 343
  • 正文 我和宋清朗相戀三年葬荷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涨共。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宠漩,死狀恐怖举反,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哄孤,我是刑警寧澤照筑,帶...
    沈念sama閱讀 36,583評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瘦陈,受9級(jí)特大地震影響凝危,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晨逝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評(píng)論 3 336
  • 文/蒙蒙 一蛾默、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捉貌,春花似錦支鸡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至醒陆,卻和暖如春瀑构,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刨摩。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評(píng)論 1 274
  • 我被黑心中介騙來泰國打工寺晌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留世吨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,378評(píng)論 3 379
  • 正文 我出身青樓呻征,卻偏偏與公主長得像耘婚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陆赋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容