Webcourse/18-前端面试/08-算法问题.md

105 lines
2.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 前言
算法主要包括:
- 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>
## 总结
如果实在答不来,就说,这个算法我不是很会,只知道一些基本概念。
如果第一面就碰到算法题,这个公司不用去了。说明这个公司是招算法的,不是招前端的。