File tree Expand file tree Collapse file tree 4 files changed +16
-42
lines changed Expand file tree Collapse file tree 4 files changed +16
-42
lines changed Original file line number Diff line number Diff line change @@ -36,6 +36,10 @@ notifyAll:唤醒等待队列中等待该对象锁的全部线程,让其竞
3636** 我们写同步的时候,优先考虑synchronized,如果有特殊需要,再进一步优化。ReentrantLock和Atomic如果用的不好,不仅不能提高性能,还可能带来灾难。**
3737
3838### 有几种锁
39+ #### 悲观锁
40+ 假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。synchronized关键字的实现也是悲观锁。
41+ #### 乐观锁
42+ 每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。原子变量类就是使用了乐观锁的一种实现方式CAS实现的。当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
3943#### 可重入锁
4044如果锁具备可重入性,则称作为可重入锁。像synchronized和ReentrantLock都是可重入锁
4145#### 可中断锁
Original file line number Diff line number Diff line change 2222
2323### 服务模块
24241 . RabbitMQ的消费逻辑、业务逻辑,使用事务控制下订单,减库存操作,且下订单操作要放到减库存操作之前,可以避免减库存update的行锁持有时间
25- 2 . 避免同一用户同时下多个订单,在订单表中加上用户ID与商品ID的唯一索引;避免卖超问题,在更新数量的sql上需要加上>0条件
25+ 2 . 避免同一用户同时下多个订单,在订单表中加上用户ID与商品ID的唯一索引;避免卖超问题,在更新数量的sql上需要加上>0条件,从而使用乐观锁机制更新数据
2626
2727### 防刷模块
28281 . 针对恶意用户写脚本去刷,在Redis中保存用户IP与商品ID进行限制
3333以上的解决方案能通过利用Redis与RabbitMQ集群来承载非常高的并发量,但是有如下缺点:
3434
35351 . 运维成本与稳定性。Redis与RabbitMQ都可能用到集群,运维成本太高,稳定性也不能保证
36- 2 . 开发成本高。必须准备好异常处理方案,比如访问Redis或者RabbitMQ失败之后,如何保证秒杀功能正常进行下去
36+ 2 . 开发成本高。必须准备好异常处理方案,比如访问Redis或者RabbitMQ失败之后如何处理。如果真的挂了只能优先修复,所以要避免这种情况。
37+ 3 . 业务逻辑错误处理。比如有订单在下单的过程中失败,后续流程如何?执行异常处理逻辑:回滚事务,通知用户下单失败。
3738
38- 另一方面,MySQL的性能并不慢,慢的是执行事务时** Java的GC时间** 和** 网络通信时间**
39+ ### 优化
40+ 1 . 将7层负载均衡Nginx与4层负载均衡LVS一起使用进一步提高并发量
41+ 2 . 以上是应用架构上的优化,在部署的虚拟机上选择偏
42+ 3 . 提前预热,将最新的静态资源同步更新到CDN的所有节点上,在Redis中提前加载好需要售卖的产品信息
3943
4044## 另一种方案
45+ 另一方面,MySQL的性能并不慢,慢的是执行事务时** Java的GC时间** 和** 网络通信时间**
4146
4247将业务逻辑写成存储过程,事先放到数据库中,在Java客户端中调用存储过程即可立即拿到返回结果
4348
Load Diff This file was deleted.
Original file line number Diff line number Diff line change @@ -34,6 +34,7 @@ PS:除开知识点,一定要准备好以下内容:
3434* [ 限流] ( https://crossoverjie.top/2018/04/28/sbc/sbc7-Distributed-Limit )
3535* [ ID生成方式] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/ID生成方式.md )
3636* [ 四层、七层负载均衡的区别] ( https://www.jianshu.com/p/fa937b8e6712 )
37+ * [ 一致性算法] ( https://github.com/crossoverJie/JCSprout/blob/master/MD/Consistent-Hash.md )
3738### 微服务
3839* [ 微服务介绍] ( http://www.wangtianyi.top/blog/2017/04/16/microservies-1-introduction-to-microservies/ )
3940* [ 服务发现原理] ( http://www.wangtianyi.top/blog/2017/05/15/zai-wei-fu-wu-jia-gou-zhong-de-fu-wu-fa-xian-ji-zhi/ )
@@ -52,9 +53,10 @@ PS:除开知识点,一定要准备好以下内容:
5253* [ 排序打印关键字] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/在线编程-排序打印关键字.md )
5354### Linux
5455* [ Linux命令] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/Linux.md )
56+ ### 问题排查
57+ * [ Java生产环境下问题排查] ( http://www.wangtianyi.top/blog/2018/07/20/javasheng-chan-huan-jing-xia-wen-ti-pai-cha/ )
5558### 项目举例
5659* [ 秒杀架构] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/秒杀架构.md )
5760* [ 搜索引擎] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/搜索引擎.md )
58- ### 其他面试问题
61+ ### 其他
5962* [ 从按下回车开始,到浏览器呈现出网页之间的发生了什么] ( http://www.wangtianyi.top/blog/2017/10/22/cong-urlkai-shi-,ding-wei-shi-jie/ )
60- * [ 问题排查] ( https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/问题排查.md )
You can’t perform that action at this time.
0 commit comments