大家好,我是 Yancy,之前一直從事于互聯(lián)網(wǎng)教育行業(yè),目前為某互聯(lián)網(wǎng)公司高級(jí)架構(gòu)師。此次專(zhuān)欄內(nèi)容我們來(lái)了解一下數(shù)據(jù)結(jié)構(gòu)與算法相關(guān)的知識(shí)。
眾所周知,目前的前端現(xiàn)狀是不管大廠(chǎng)還是創(chuàng)業(yè)公司,都對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法有了一定的要求,能夠了解和熟練使用算法,無(wú)疑會(huì)給我們?cè)诠P試過(guò)程中、面試過(guò)程中增添不少好印象。特別是隨著技術(shù)的發(fā)展,用戶(hù)對(duì)于產(chǎn)品的性能要求越來(lái)越高,網(wǎng)頁(yè)加載速度慢幾百毫秒就可能失去成千上萬(wàn)的用戶(hù)。所以,擁有良好的算法基礎(chǔ),可以寫(xiě)出高質(zhì)量的代碼邏輯成為了前端工程師的必備技能。
本人深耕于前端六載,見(jiàn)證了前端技術(shù)的快速發(fā)展。在自己從一名前端小白成長(zhǎng)為一名架構(gòu)師的過(guò)程中,接觸到了很多前端技術(shù),也領(lǐng)略了部分前端技術(shù)的興衰。在早期,只需要會(huì)寫(xiě)靜態(tài)頁(yè)面就可以成為一個(gè)合格的初級(jí)前端工程師,再到后來(lái)的動(dòng)態(tài)網(wǎng)頁(yè)、前端工程化、前端框架、node、可視化、3d 等技術(shù)的不斷發(fā)展,成為前端工程師的門(mén)檻在逐步提高。企業(yè)面試的標(biāo)準(zhǔn)也是一升再升。
數(shù)據(jù)結(jié)構(gòu)與算法屬于開(kāi)發(fā)人員的內(nèi)功,不管前端技術(shù)怎么變,框架怎么更新,版本怎么迭代,它終究是不變的內(nèi)容。 這些年,在帶領(lǐng)團(tuán)隊(duì)成長(zhǎng)的過(guò)程中,我們始終把算法技術(shù)算作一項(xiàng)必需的技術(shù)讓大家學(xué)習(xí)和使用,在這個(gè)過(guò)程中,我本人也是沉淀了大量的知識(shí)和最佳實(shí)踐。我希望可以有更多的前端工程師著重于對(duì)算法的修煉,讓更多人不會(huì)因?yàn)榍岸思夹g(shù)的飛速發(fā)展而掉隊(duì)。同時(shí),寫(xiě)作和分享也是我學(xué)習(xí)輸出的一種方式。
在學(xué)習(xí)這個(gè)專(zhuān)欄的過(guò)程中,作者本人并不想單純依靠知識(shí)輸出的方式來(lái)讓大家學(xué)習(xí),更希望的是可以讓大家快樂(lè)的學(xué),并將數(shù)據(jù)結(jié)構(gòu)與算法形成一整套的知識(shí)體系。當(dāng)然,讀代碼是讓大家為難的一種表達(dá)方式,所以作者在代碼之后會(huì)以圖解的方式向大家闡述代碼所要表達(dá)的意義。如果對(duì)于讀代碼困難的同學(xué)不妨轉(zhuǎn)換一下順序,先看圖解,之后跟著圖解讀代碼,相信會(huì)起到事半功倍的效果。
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法并不能快速提升你的編碼能力,這點(diǎn)可能會(huì)讓大家失望,上面也說(shuō)了,數(shù)據(jù)結(jié)構(gòu)與算法是開(kāi)發(fā)人員的內(nèi)功,舉個(gè)栗子來(lái)說(shuō),相當(dāng)于九陽(yáng)神功一般的存在,不會(huì)直接賦予你戰(zhàn)斗力,不能讓你出手擊敵,只會(huì)為你打下根基,不會(huì)因?yàn)?”武功“ 的轉(zhuǎn)變而喪失了戰(zhàn)斗資本。學(xué)習(xí)它,會(huì)讓你在各個(gè)技術(shù)之間穿梭而游刃有余,不用花費(fèi)大量時(shí)間去練習(xí)和使用新的技術(shù),不用去東拼西湊的查找第三方庫(kù)。萬(wàn)法同源,所有的技術(shù)都依賴(lài)于此,技術(shù)的轉(zhuǎn)換也不過(guò)是使用方式的轉(zhuǎn)換,根基不變。
學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法會(huì)潛移默化的影響你編碼的風(fēng)格和習(xí)慣,會(huì)在不自覺(jué)之間考慮邏輯的運(yùn)行性能,久而久之,你的編碼能力也會(huì)有飛躍式的進(jìn)展,不過(guò)這個(gè)過(guò)程是長(zhǎng)期的,不能一蹴而就。
數(shù)據(jù)結(jié)構(gòu)與算法是一個(gè)龐大的知識(shí)體系。算法的世界廣袤無(wú)邊,學(xué)習(xí)一個(gè)新的龐大知識(shí)體系,不能夠分開(kāi)來(lái)零散的學(xué)習(xí),更不能填鴨式的學(xué)習(xí),我們應(yīng)該循序漸進(jìn),從零開(kāi)始直到項(xiàng)目實(shí)踐,動(dòng)手做起來(lái)才是我們程序員應(yīng)該踐行的學(xué)習(xí)方式。在這個(gè)專(zhuān)欄中,每一篇文章內(nèi)都賦有面試題解供大家學(xué)習(xí)和實(shí)踐,希望通過(guò)這些案例,能夠帶領(lǐng)大家領(lǐng)略到算法的奇特魅力,從而讓大家愛(ài)上學(xué)習(xí)算法,輕松編程。這正是我這個(gè)專(zhuān)欄的價(jià)值。
學(xué)習(xí)的時(shí)候也希望大家可以多思考,專(zhuān)欄會(huì)從零開(kāi)始,一點(diǎn)點(diǎn)的帶大家學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的知識(shí)體系,希望大家通過(guò)我的專(zhuān)欄可以解答下面疑惑:
- 什么是數(shù)據(jù)結(jié)構(gòu)
- 什么是算法?
- 數(shù)據(jù)結(jié)構(gòu)和算法的作用?
- 如何把數(shù)據(jù)結(jié)構(gòu)與算法運(yùn)用到實(shí)際的工作當(dāng)中?
- 之后我應(yīng)該如何學(xué)習(xí)算法相關(guān)的知識(shí)?
課程的一個(gè)亮點(diǎn)
另外,如果你是一個(gè)前端團(tuán)隊(duì) leader ,或者前端面試官,那么在現(xiàn)如今的面試過(guò)程中,數(shù)據(jù)結(jié)構(gòu)和算法算是面試中必不可少的一個(gè)項(xiàng)目。所以我為大家準(zhǔn)備了一些算法題解析,與大家一起討論。如果你是面試官,這些題目你可以拿來(lái)直接在面試中使用;如果你是求職者,那這些題目也必然會(huì)讓你在面試時(shí)有備無(wú)患,自如應(yīng)對(duì)。
我希望,通過(guò)這個(gè)專(zhuān)欄,不管是初級(jí)、中級(jí)、高級(jí)、甚至是對(duì)于算法不太感興趣的架構(gòu)師和資深工程師,都能夠愛(ài)上它。
課程安排:
最后,我為大家簡(jiǎn)單介紹一下課程的具體安排:
這個(gè)專(zhuān)欄是從零開(kāi)始,哪怕你之前對(duì)于算法絲毫沒(méi)接觸過(guò)也沒(méi)有關(guān)系,只要你懂得編程語(yǔ)言。專(zhuān)欄帶你從最簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)開(kāi)始,一步步深入到算法的世界。專(zhuān)欄課程分為了 4 大部模塊,這 4 大部分為:
- 總述數(shù)據(jù)結(jié)構(gòu)與算法
- 數(shù)據(jù)結(jié)構(gòu)詳解
- 常見(jiàn)排序和查找算法
- 進(jìn)階算法
第一部分: 我們要講為什么我們要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法。以及如何評(píng)估一個(gè)算法的好壞,怎樣評(píng)估我們自己寫(xiě)的代碼好壞。一定要搞明白為什么、可以做什么。只有真正懂了為什么我們要學(xué)習(xí)它,你才能真正走進(jìn)它的世界。
第二部分: 我們需要從零開(kāi)始講解數(shù)據(jù)結(jié)構(gòu),這一部分作者會(huì)帶領(lǐng)大家一塊兒研究每個(gè)數(shù)據(jù)結(jié)構(gòu)的使用場(chǎng)景和使用方法。
剩下的兩部分,作者會(huì)帶領(lǐng)大家從最簡(jiǎn)單的排序算法開(kāi)始,一步步提升自己對(duì)于算法的認(rèn)知。逐步提高自己解決問(wèn)題的能力。相信自己能夠想辦法來(lái)解決問(wèn)題,真的做到學(xué)以致用。如果真的可以將這部分內(nèi)容融會(huì)貫通,恭喜你!你已經(jīng)掌握了本專(zhuān)欄所有的內(nèi)容。也期待你能在算法領(lǐng)域開(kāi)啟自己的新篇章。
ok,閑言少敘,讓我們開(kāi)始吧!