背景
本篇收录于《进阶不完全指南》专栏
按照以往的系列文章的惯例, 第一篇一般是一个背景介绍和大纲提炼。本系列照旧(写作能力在这 没办法。)
首先 表达下我的写作目的:
- 分享给我的组员和朋友,把答应人的事情完成,无愧无悔 足矣!
- 想把进阶路线系统化。当然写作过程中无法避免存在碎片化内容 但是后续如果写的内容足够多 我也会进行凝练汇总(后话,后话 到那一步再说)。愿景: 能够帮助后来者少走几步弯路 足矣!
- 希望在面临一些职业决策的话题上能够给到你一定的建议,写作中难免唠叨,瞎扯 愿只言片语的碎话能够引起丝丝共鸣, 足矣!
- 提升自己的分享能力,写作能力,共情能力(与时间为伴,与读者为伴) 足矣!
- 主要还是把之前备忘录零碎写的 摘抄的 总结的 全部梳理一次。
根基不稳(内乱不平), 何筑万地高楼(何以开疆拓土).
专栏介绍
本来呢,这篇专栏是只写数据结构与算法的,但是今天清晨 突然有个神秘的声音告诉我 你写数据结构与算法是不可行的,(我呢属于听话型) 答道: 好的,我抓紧去改一下。(细想下也不无道理 毕竟创建那么多专栏万一发错了多尴尬。 )经过良久思想斗争, 就叫它 《进阶不完全指南》吧
内容模块
语言差异再大,落在底层无非也就是系统磁盘读写、内存分配、cpu分配、垃圾回收,硬件指令...这套东西,实现千差万别,思想大同小异。
清楚操作系统/运行原理,你就知道原来语言某些目的上是不谋而合的。(例如javascript的容器v8=>浏览器)
搞清楚数据结构,你就知道为什么所有语言都会有数组、链表、哈希,什么时候该怎么用。
搞清楚算法,你会发现你写代码时 如有神主.思考问题的角度都会不一样。
搞清楚设计模式,你去看绝大部分框架原理的时候效率都会成倍增长。
本系列都会真针对数据结构/算法/设计模式进行介绍。
数据结构
首先基础的数结构包含哪些这边简单列举介绍一下,后面会逐步展开进行讨论。
- 数据结构(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)
设计模式来源于众专家智慧的结晶(不用是损失), 设计模式兼顾了系统的可重用性和可扩展性。设计模式提供了一套通用的设计词汇和一种通用的形式更有效提高内部沟通。
面向对象设计模式
- 创建型模式
- 结构型模式
- 行为型模式
- ...
函数式设计模式
- 改进版OOP观察者模式
- ...
JS中的设计模式
- 单例模式
- 策略模式
- ...
以上内容会在后续展开,所有提到的内容都会在本专栏体现。目的就是要进阶.就是神来了也挡不住我。我说的!design~~~~
注意模块 (请看一下导读内容/达成一定共识)
- 本系列内容coding部分采取JavaScript。;
- 本篇所有coding部分会在优化后上传github; 文中示意代码仅供逻辑参考。
- 注意因coding部分采取高级语言进行编写.存在编译时间等客观因素.在复杂度上带有不准确性,领会思路为主要目的。
- 注意因coding部分采用javascript进行编写,基础数据结构实现上并不具有"真实"性(例如js中数组的实现存在快数组和慢数组(hashtable)多重形式)。
- 相关代码,测试代码可参考后续的git仓库说明。
- 系列文章内容会对于github现有仓库进行参考,后续每篇都会贴出参考链接。
最后
请不要质疑我专栏更新的速度,因为要彼此相信(我相信你不相信。哈哈哈)。
总之我保证各专栏每周1篇以上的产出 。每一篇的背后我需要做一些工作: coding & coding test & 文章内容的完善。 请求来一个赞。
还有一些希望:
希望在写的过程中能为我带来不一样的思考方式。 共情能力。
希望在写的过程能为大家带来一些什么。 共进原则。
希望明天是晴天!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。