摘要:很多前端同學(xué)在看到數(shù)據(jù)結(jié)構(gòu)和算法后會有一定的抵觸心理,或者嘗試去練習(xí),但是被難倒,從而放棄。本文選擇的數(shù)據(jù)結(jié)構(gòu)和算法的類別均是出現(xiàn)頻率最高,以及應(yīng)用最廣的類別。面試這是非?,F(xiàn)實的一點,也是很多前端學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的原因。
一、導(dǎo)讀
據(jù)我了解,前端程序員有相當(dāng)一部分對“數(shù)據(jù)結(jié)構(gòu)”和“算法”的基礎(chǔ)概念都不是很清晰,這直接導(dǎo)致很多人在看到有關(guān)這部分的內(nèi)容就會望而卻步。
實際上,當(dāng)你了解了“數(shù)據(jù)結(jié)構(gòu)”和“算法”存在的真正意義,以及一些實際的應(yīng)用場景,對它有了一個整體的認知之后,你可能會對它產(chǎn)生強烈的興趣。當(dāng)然,它帶將帶給你的收益也是相當(dāng)可觀的。
很多前端同學(xué)在看到“數(shù)據(jù)結(jié)構(gòu)”和“算法”后會有一定的抵觸心理,或者嘗試去練習(xí),但是被難倒,從而放棄。
這很大一部分原因是因為你還不夠了解學(xué)習(xí)他們的意義,或者沒有掌握合理的練習(xí)方法。
實際上,當(dāng)你有了一定的目的性,并且有了合理的練習(xí)方法,再來學(xué)習(xí)這部分內(nèi)容會變得得心應(yīng)手。
?
在本文中,我就來分享一下我學(xué)習(xí)“數(shù)據(jù)結(jié)構(gòu)”和“算法”的一些經(jīng)驗和方法。
后面我也會針對所有常見的數(shù)據(jù)結(jié)構(gòu)和算法分類,進行全方位的梳理。
1.1 類別說明數(shù)據(jù)結(jié)構(gòu)和算法的種類非常之多,拿樹舉例,樹的種類包括:二叉樹、B樹、B+樹、Trie樹、紅黑樹等等,本文只選擇了二叉樹。
對前端來講,沒有必要對某些比較偏的類型和解法多做了解,一是浪費寶貴的時間,二是應(yīng)用的不多。
本文選擇的數(shù)據(jù)結(jié)構(gòu)和算法的類別均是出現(xiàn)頻率最高,以及應(yīng)用最廣的類別。
1.2 題目說明另外,做題時找對典型題目非常重要,可以讓你更快速更高效的掌握知識,本文后面也會給出每種類型的典型題目供大家參考。
題目來源:
awesome-coding-js:我的前端算法開源項目,包括我做過的題目以及詳細解析
leetcode
劍指offer
另外,我會在后面長期更新一個前端算法的專欄,對每類數(shù)據(jù)結(jié)構(gòu)和算法進行詳細的講解,敬請期待。
二、為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法在學(xué)習(xí)某塊內(nèi)容之前,我們一定要首先明確為什么要學(xué),而不是盲目的跟風(fēng)。
這將更有利于你從學(xué)習(xí)的過程中獲得收益,而且會為你的學(xué)習(xí)帶來動力。
首先明確一點,學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法不一定就是記住二叉樹、堆、棧、隊列等的解題方法也不是死記硬背一些題目,如果你僅僅停留在這樣的表面思想,那么你學(xué)習(xí)起來會非常痛苦。
2.1 解決問題的思想計算機只是一個很冰冷的機器,你給他下發(fā)什么樣的指令,它就能作出什么樣的反應(yīng)。
而開發(fā)工程師要做的是如何把實際的問題轉(zhuǎn)化成計算機的指令,如何轉(zhuǎn)化,來看看《數(shù)據(jù)結(jié)構(gòu)》的經(jīng)典說法:
設(shè)計出數(shù)據(jù)結(jié)構(gòu), 在施加以算法就行了。
所以,很重要的一點,數(shù)據(jù)結(jié)構(gòu)和算法對建立解決問題的思想非常重要。
如果說 Java 是自動檔轎車,C 就是手動檔吉普。數(shù)據(jù)結(jié)構(gòu)呢?是變速箱的工作原理。你完全可以不知道變速箱怎樣工作,就把自動檔的車子從 A 開到 B,而且未必就比懂得的人慢。寫程序這件事,和開車一樣,經(jīng)驗可以起到很大作用,但如果你不知道底層是怎么工作的,就永遠只能開車,既不會修車,也不能造車。如果你對這兩件事都不感興趣也就罷了,數(shù)據(jù)結(jié)構(gòu)懂得用就好。但若你此生在編程領(lǐng)域還有點更高的追求,數(shù)據(jù)結(jié)構(gòu)是繞不開的課題。2.2 面試
這是非?,F(xiàn)實的一點,也是很多前端學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法的原因。
一般對待算法的態(tài)度會分為以下幾類:
Google、Microsoft等知名外企在面試工程師時,算法是起決定性因素的,前端工程師也是一樣,基本是每一輪都會考察,即使你有非常強的背景,也有可能因為一兩道算法答的不好而與這樣的企業(yè)失之交臂。
第二類,算法占重要因素的,國內(nèi)的某些大廠在面試時,也會把數(shù)據(jù)結(jié)構(gòu)和算法作為重要的參考因素,基本是面試必考,如果你達不到一定的要求,會直接掛掉。
第三類,起加分作用,很多公司不會把數(shù)據(jù)結(jié)構(gòu)和算法作為硬性要求,但是也會象征性的出一些題目,當(dāng)你把一道算法題答的很漂亮,這絕對是加分項。
可見,學(xué)好數(shù)據(jù)結(jié)構(gòu)和算法對你跳槽更好的公司或者拿到更高的薪水,是非常重要的。
三、如何準備了解了數(shù)據(jù)結(jié)構(gòu)和算法的重要性,那么究竟該用什么樣的方法去準備呢?
3.1 全方位了解在學(xué)習(xí)和練習(xí)之前,你一定要對數(shù)據(jù)結(jié)構(gòu)和算法做一個全方位的了解,對數(shù)據(jù)結(jié)構(gòu)和算法的定義、分類做一個全面的理解,如果這部分做的不好,你在做題時將完全不知道你在做什么,從而陷入盲目尋找答案的過程,這個過程非常痛苦,而且往往收益甚微。
本文后面的章節(jié),我會對常見的數(shù)據(jù)結(jié)構(gòu)和算法做一個全方位的梳理。
3.2 分類練習(xí)當(dāng)你對數(shù)據(jù)結(jié)構(gòu)和算法有了一個整體的認知之后,就可以開始練習(xí)了。
注意,一定是分類練習(xí)!分類練習(xí)!分類練習(xí)!重要的事情說三遍。
我曾見過非常多的同學(xué)帶著一腔熱血就開始刷題了,從leetcode第一題開始,剛開始往往非常有動力,可能還會發(fā)個朋友圈或者沸點什么的
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/109994.html
showImg(https://segmentfault.com/img/bVbw3tK?w=1240&h=827); 前端工程師這個崗位,真的是反人性的 我們來思考一個問題: 一個6年左右經(jīng)驗的前端工程師: 前面兩年在用jQuery 期間一直在用React-native(一步一步踩坑過來的那種) 最近兩年還在寫微信小程序 下面一個2年經(jīng)驗的前端工程師: 并不會跨平臺技術(shù),他的兩年工作都是Reac...
摘要:前言秋招宣告結(jié)束,面試了接近家公司,有幸拿到,感謝這段時間一起找工作面試的朋友和陪伴我的人。一定要提前準備好,不然面試官叫你說遇到的難點,或者直接問問題時可能會懵逼。 前言 秋招宣告結(jié)束,面試了接近20家公司,有幸拿到offer,感謝這段時間一起找工作面試的朋友和陪伴我的人。這是一段難忘的經(jīng)歷,相信不亞于當(dāng)年的高考吧,也許現(xiàn)在想起來高考不算什么,也許只有經(jīng)歷過秋招的人才懂得找工作的艱辛...
摘要:前言秋招宣告結(jié)束,面試了接近家公司,有幸拿到,感謝這段時間一起找工作面試的朋友和陪伴我的人。一定要提前準備好,不然面試官叫你說遇到的難點,或者直接問問題時可能會懵逼。 前言 秋招宣告結(jié)束,面試了接近20家公司,有幸拿到offer,感謝這段時間一起找工作面試的朋友和陪伴我的人。這是一段難忘的經(jīng)歷,相信不亞于當(dāng)年的高考吧,也許現(xiàn)在想起來高考不算什么,也許只有經(jīng)歷過秋招的人才懂得找工作的艱辛...
摘要:中四種修飾符的限制范圍。數(shù)據(jù)結(jié)構(gòu)和算法樹快速排序,堆排序,插入排序其實八大排序算法都應(yīng)該了解一致性算法,一致性算法的應(yīng)用的內(nèi)存結(jié)構(gòu)。的部署方式,主從,集群。八大排序算法一定要手敲一遍快排,堆排尤其重要。 前言 15年畢業(yè)到現(xiàn)在也近三年了,最近面試了阿里集團(菜鳥網(wǎng)絡(luò),螞蟻金服),網(wǎng)易,滴滴,點我達,最終收到點我達,網(wǎng)易offer,螞蟻金服二面掛掉,菜鳥網(wǎng)絡(luò)一個月了還在流程中...最終有...
摘要:數(shù)據(jù)結(jié)構(gòu)和算法樹快速排序,堆排序,插入排序其實八大排序算法都應(yīng)該了解一致性算法,一致性算法的應(yīng)用的內(nèi)存結(jié)構(gòu)。如何存儲一個的。八大排序算法一定要手敲一遍快排,堆排尤其重要。面試是一個雙向選擇的過程,不要抱著畏懼的心態(tài)去面試,不利于自己的發(fā)揮。 前言 16年畢業(yè)到現(xiàn)在也近兩年了,最近面試了阿里集團(菜鳥網(wǎng)絡(luò),螞蟻金服),網(wǎng)易,滴滴,點我達,最終收到點我達,網(wǎng)易offer,螞蟻金服二面掛掉,...
閱讀 3528·2021-09-08 09:36
閱讀 2698·2019-08-30 15:54
閱讀 2417·2019-08-30 15:54
閱讀 1823·2019-08-30 15:44
閱讀 2449·2019-08-26 14:04
閱讀 2493·2019-08-26 14:01
閱讀 2938·2019-08-26 13:58
閱讀 1417·2019-08-26 13:47