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