q397064399
2016-09-25 18:47:33 +08:00
重要的是思想以及特性,还有运用场景,一个算法的完整实现,没有 github 面试官 你特么让我怎么写?
例如
红黑树 多线程,插入 删除 等操作,都要加锁,这是其数据结构的特性所致,不加锁就会产生竞争
但是涉及到数据的有序性,你又不能不使用红黑树,我目前没有看到一个数据结构能实现
快速插入 删除等操作 还能保持有序性,红黑树在这种场景是首选
HashMap 多线程的话,只要正在读写的那根链表加锁就可以了,其它的链表是完全可以释放给其它线程使用的,
如果有多线程性能需求的话, HashMap 是首选,另外还要学会针对不同的数据选择 Hash 算法保持桶的板最好平衡
针对超长且部分有序顺序表, 快速排序并不比归并排序快,
其它还有一些例子我就不举了,
新算法的研究从来都不是工程师的事情
工程师的能力在于了解算法的特性以及大致实现,并在合适的场景选择合适的算法,而不是把每个算法给背下来,你背了那么多算法,让你手写一个 HashMap QuickSort 就一定比 Java util 中的快?