Skip to content

Commit 0e144b0

Browse files
committed
更新
1 parent cb975e5 commit 0e144b0

File tree

4 files changed

+16
-42
lines changed

4 files changed

+16
-42
lines changed

MD/Java基础-多线程.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff 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
#### 可中断锁

MD/秒杀架构.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
### 服务模块
2424
1. RabbitMQ的消费逻辑、业务逻辑,使用事务控制下订单,减库存操作,且下订单操作要放到减库存操作之前,可以避免减库存update的行锁持有时间
25-
2. 避免同一用户同时下多个订单,在订单表中加上用户ID与商品ID的唯一索引;避免卖超问题,在更新数量的sql上需要加上>0条件
25+
2. 避免同一用户同时下多个订单,在订单表中加上用户ID与商品ID的唯一索引;避免卖超问题,在更新数量的sql上需要加上>0条件,从而使用乐观锁机制更新数据
2626

2727
### 防刷模块
2828
1. 针对恶意用户写脚本去刷,在Redis中保存用户IP与商品ID进行限制
@@ -33,11 +33,16 @@
3333
以上的解决方案能通过利用Redis与RabbitMQ集群来承载非常高的并发量,但是有如下缺点:
3434

3535
1. 运维成本与稳定性。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

MD/问题排查.md

Lines changed: 0 additions & 37 deletions
This file was deleted.

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff 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)

0 commit comments

Comments
 (0)