

## 前言


算法主要包括：

- 1、排序

排序一定要准备。

- 2、堆栈、队列、链表

队列和链表可以不准备，但是堆栈一定要准备。

一个小技巧：JS的数组本身就具备堆栈和队列的特性。比如：top、push、shift、unshift这四个api，本身就帮我们实现了堆栈和队列。

堆栈：先进后出。

- 3、递归

递归是一定不能偷懒的。算法比较难的时候，一般要用到递归。

- 4、波兰式和逆波兰式


**总结：**

比如阿里，如果基础题答的很好，但是算法不会，那可能通不过。

还有金融类的，必考算法。比如阿里云，里面的业务就是算法的，所以肯定考算法。


## 排序


上面的排序这么多，我们要记住下面这三个：

- 快速排序：<https://segmentfault.com/a/1190000009426421>

- 选择排序：<https://segmentfault.com/a/1190000009366805>

- 希尔排序：<https://segmentfault.com/a/1190000009461832>

如果你还要学一个，那就是**冒泡排序**。

题目中，会给你一个算法题， 排序只是其中一个步骤。而且，并不会指定你要求用哪种排序。




## 堆栈、队列、链表

参考链接：

- <https://juejin.im/entry/58759e79128fe1006b48cdfd>

上面这个链接是转载的。原创博主的系列文章是：

- [数组、队列、链表](http://huang303513.github.io/2016/12/08/Javascript%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95(%E4%B8%80).html)



- [排序](http://huang303513.github.io/2016/12/19/Javascript%E7%9A%84%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95(%E5%9B%9B).html)





## 递归

参考链接：

- [JavaScript中的递归](https://segmentfault.com/a/1190000009857470)

递归理解起来不难，但是用的时候很难，因为你没抓住他的本质。递归的终止条件是什么？参数是怎么传递的？一定要搞清楚。

很多人说：“我知道这道题是考递归，但是我就是不知道该怎么写”。这个面试官很无奈。



## 波兰式和逆波兰式

> 如果复习时间很紧张，这部分也不用准备了。也不是所有的公司都会问。

推荐链接：

- 理论：<http://www.cnblogs.com/chenying99/p/3675876.html>

- 源码：<https://github.com/Tairraos/rpn.js/blob/master/rpn.js>


## 总结

如果实在答不来，就说，这个算法我不是很会，只知道一些基本概念。

如果第一面就碰到算法题，这个公司不用去了。说明这个公司是招算法的，不是招前端的。







