背景
本篇收錄於《進階不徹底指南》專欄javascript
按照以往的系列文章的慣例, 第一篇通常是一個背景介紹和大綱提煉。本系列照舊(寫做能力在這 沒辦法。)java
首先 表達下個人寫做目的:git
- 分享給個人組員和朋友,把答應人的事情完成,無愧無悔 足矣!
- 想把進階路線系統化。固然寫做過程當中沒法避免存在碎片化內容 可是後續若是寫的內容足夠多 我也會進行凝練彙總(後話,後話 到那一步再說)。願景: 可以幫助後來者少走幾步彎路 足矣!
- 但願在面臨一些職業決策的話題上可以給到你必定的建議,寫做中不免嘮叨,瞎扯 願隻言片語的碎話可以引發絲絲共鳴, 足矣!
- 提高本身的分享能力,寫做能力,共情能力(與時間爲伴,與讀者爲伴) 足矣!
- 主要仍是把以前備忘錄零碎寫的 摘抄的 總結的 所有梳理一次。
根基不穩(內亂不平), 何築萬地高樓(何以開疆拓土).
專欄介紹
原本呢,這篇專欄是隻寫數據結構與算法的,可是今天清晨 忽然有個神祕的聲音告訴我 你寫數據結構與算法是不可行的,(我呢屬於聽話型) 答道: 好的,我抓緊去改一下。(細想下也不無道理 畢竟建立那麼多專欄萬一發錯了多尷尬。 )通過良久思想鬥爭, 就叫它 《進階不徹底指南》吧github
內容模塊
語言差別再大,落在底層無非也就是系統磁盤讀寫、內存分配、cpu分配、垃圾回收,硬件指令...這套東西,實現千差萬別,思想大同小異。算法
清楚操做系統/運行原理,你就知道原來語言某些目的上是不謀而合的。(例如javascript的容器v8=>瀏覽器)segmentfault
搞清楚數據結構,你就知道爲何全部語言都會有數組、鏈表、哈希,何時該怎麼用。設計模式
搞清楚算法,你會發現你寫代碼時 若有神主.思考問題的角度都會不同。數組
搞清楚設計模式,你去看絕大部分框架原理的時候效率都會成倍增加。瀏覽器
本系列都會真針對數據結構/算法/設計模式進行介紹。
數據結構
首先基礎的數結構包含哪些這邊簡單列舉介紹一下,後面會逐步展開進行討論。數據結構
- 數據結構(Data Structures)
-
- 數組(array): 數組是能夠再內存中連續存儲多個元素的結構,在內存中的分配也是連續的,數組中的元素經過數組下標進行訪問。
-
- 鏈表(linked list): 鏈表是物理存儲單元上非連續的、非順序的存儲結構,數據元素的邏輯順序是經過鏈表的指針地址實現,每一個元素包含兩個結點,一個是存儲元素的數據域 (內存空間),另外一個是指向下一個結點地址的指針域。根據指針的指向,鏈表能造成不一樣的結構,例如單鏈表,雙向鏈表,循環鏈表等。
-
- 棧(stack):棧是一種特殊的線性表,僅能在線性表的一端操做,棧頂容許操做,棧底不容許操做。 棧的特色是:先進後出,或者說是後進先出,從棧頂放入元素的操做叫入棧,取出元素叫出棧。也就是具備兩種主要操做:push, 添加元素到棧的頂端(末尾);pop, 移除棧最頂端(末尾)的元素。
-
- 隊列 隊列與棧同樣,也是一種線性表,不一樣的是,隊列能夠在一端添加元素,在另外一端取出元素,也就是:先進先出。從一端放入元素的操做稱爲入隊,取出元素爲出隊。
-
- 堆 堆是一種比較特殊的數據結構,能夠被看作一棵樹的數組對象。
-
- 樹 樹是一種數據結構,它是由n(n>=1)個有限節點組成一個具備層次關係的集合。
-
- 散列表(hash table) 散列表,也叫哈希表,是根據關鍵碼和值 (key和value) 直接進行訪問的數據結構,經過key和value來映射到集合中的一個位置,快速找到集合中的對應元素。
-
- 圖(graph) 圖是由結點的有窮集合V和邊的集合E組成。實現方式有矩陣,鄰接表等等
以上只是內容概覽,後續都會逐步展開介紹數據結構。 data
~~ Structures~~
算法(algorithms)
- 搜索查詢類(Searches)
-
- BFS 廣度遍歷
-
- DFS 深度遍歷
-
- ...
- 排序類(Sorting)
-
- BubbleSort 冒泡排序
-
- Quicksort 快速排序
-
- ...
- 其餘類...
以上只是內容概覽,後續都會逐步展開 會利用上面的一些數據結構 algorithms~~~
設計模式(design_patterns)
設計模式來源於衆專家智慧的結晶(不用是損失), 設計模式兼顧了系統的可重用性和可擴展性。設計模式提供了一套通用的設計詞彙和一種通用的形式更有效提升內部溝通。
面向對象設計模式
函數式設計模式
JS中的設計模式
以上內容會在後續展開,全部提到的內容都會在本專欄體現。目的就是要進階.就是神來了也擋不住我。我說的!design~~~~
注意模塊 (請看一下導讀內容/達成必定共識)
- 本系列內容coding部分採起JavaScript。;
- 本篇全部coding部分會在優化後上傳github; 文中示意代碼僅供邏輯參考。
- 注意因coding部分採起高級語言進行編寫.存在編譯時間等客觀因素.在複雜度上帶有不許確性,領會思路爲主要目的。
- 注意因coding部分採用javascript進行編寫,基礎數據結構實現上並不具備"真實"性(例如js中數組的實現存在快數組和慢數組(hashtable)多重形式)。
- 相關代碼,測試代碼可參考後續的git倉庫說明。
- 系列文章內容會對於github現有倉庫進行參考,後續每篇都會貼出參考連接。
最後
請不要質疑我專欄更新的速度,由於要彼此相信(我相信你不相信。哈哈哈)。
總之我保證各專欄每週1篇以上的產出 。每一篇的背後我須要作一些工做: coding & coding test & 文章內容的完善。 請求來一個贊。
還有一些但願:
但願在寫的過程當中能爲我帶來不同的思考方式。 共情能力。
但願在寫的過程能爲你們帶來一些什麼。 共進原則。
但願明天是晴天!