本节课我看了2遍, 为什么看两遍呢? 将思想层面的比较多. 而不仅仅是技术. 其实, 技术是死的. 技术点就那么多. 思想是活的, 怎么想问题, 才是关键.
现在不缺少会写代码的人,也就是执行层面的人. 缺少的是回想的人, 能解决办法的人. 只有突破了思想层面, 才有可能上升.
以前, 一门技术, 拿来就学, 学完就用, 可是, 很少思考为什么要用? 凭什么用这个不用那个? 这个技术是怎么好的, 好在哪里?
以后, 要知道根源. 我用你, 那我要给出理由, 为什么用你. 如果不用, 也要给出原因, 为什么不用. 而不是盲目跟风. 大家都在用, 我也用.
学习技术, 要向上升华, 就要有思想.
现在要思考的问题不是怎么用......而是, 为什么用?
1. 存储的选型
2. 为什么会有redis?
3. redis秒杀可以做什么?
4. 分布式辩证锁
1. 存储的选型.
第一个问题: 解释了, 存储数据为什么会用List, 为什么会用hashtable. 而不是怎么用.
假设, 有100个数据, 我要想存这100个数据, 怎么存呢? 最开始, 我们会把他存在数组里, 或者链表里.
那么这个时候, 存上了, 不是目的, 肯定要用, 比如取数据, 假如我要从数组或者链表中取数据, 最大的复杂度是多少?
没错是o(n), 也就是说, 10个数据, 我要找的那个数据, 就要循环遍历, 最大的遍历次数就是在最后一个找到, 遍历10次, 那要是有100个数据呢, o(n)就是100, 10000个数据呢?o(n) 是10000
数字越大, 那么取数据的速度, 就越慢. 性能就越低. 这样肯定不行.
于是, 我们就要想办法, 怎么才能更快速的取数据呢? 比如, 现在最大的遍历次数是o(10), 我能不能让他变成o(4)? 或者更小呢?
这就引入了分治的思想. 将这些数据分成4个片. 然后让数据的hashcode对4取模. 将数据让道对应的片里
假如,现在有4片, 那么随便一个数字2678/4取模后的结果, 隶属于哪一片, 那就放到那一片里. 存的时候这样存, 那么取的时候怎么取呢? 去的数据的hashcode值对4取模看看属于那一片,然后去那一片取出数据就ok了.
接下来, 那么如果数据量越来越大, 4片速度也很慢, 怎么办呢? 我们可以纵向扩展, 继续增加更多的片.
其实, 这就是hashtable的思想. 也就是hashtable怎么来的? 他肯定是在链表或者数组处理数据的时候遇到了问题, 才引入的hashtable.
下面来分析hashtable思想.