Skip to content

Commit b7474e9

Browse files
committed
tcp/mysql锁专题
1 parent 67aa20b commit b7474e9

14 files changed

Lines changed: 1295 additions & 12 deletions

File tree

README.md

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@
7676
- [对于java开发和大数据开发,24年秋招的话选择哪个方向会比较合适呢?](https://topjavaer.cn/career-plan/java-or-bigdata.html)
7777
- [四年程序员生涯的反思](https://topjavaer.cn/career-plan/4-years-reflect.html)
7878
- [在国企做开发,是什么样的体验](https://topjavaer.cn/career-plan/guoqi-programmer.html)
79+
- [工作两年多,技术水平没有很大提升,该怎么办](https://topjavaer.cn/zsxq/question/2-years-tech-no-upgrade.html)
80+
- [24届校招,Java开发和大数据开发怎么选](https://topjavaer.cn/zsxq/question/java-or-bigdata.html)
81+
82+
# 副业指南
83+
84+
- [一些接单平台](https://topjavaer.cn/zsxq/article/sideline-guide.html)
7985

8086
# 面试前准备
8187

@@ -124,6 +130,7 @@
124130
## MySQL
125131

126132
- [MySQL高频面试题50道](https://topjavaer.cn/database/mysql.html)(**知乎1k+收藏,推荐** :+1:)
133+
- [MySQL锁高频面试题](https://topjavaer.cn/database/mysql-lock.html)
127134

128135
**重要知识点**
129136

@@ -204,7 +211,8 @@
204211

205212
# 计算机网络
206213

207-
[计算机网络常见面试题总结](https://topjavaer.cn/computer-basic/network.html)**知乎1k+收藏!推荐 :+1:**
214+
- [计算机网络常见面试题总结](https://topjavaer.cn/computer-basic/network.html)**知乎1k+收藏!推荐 :+1:**
215+
- [TCP常见面试题总结](https://topjavaer.cn/computer-basic/tcp.html)
208216

209217
**重要知识点**
210218

@@ -244,10 +252,14 @@
244252

245253
- [微服务面试题](https://topjavaer.cn/advance/distributed/4-micro-service.html)
246254
- [RPC面试题](https://topjavaer.cn/advance/distributed/3-rpc.html)
247-
- [全局唯一ID](https://topjavaer.cn/advance/distributed/1-global-unique-id.html)
248255
- [分布式事务总结](https://topjavaer.cn/advance/distributed/6-distributed-transaction.html)
256+
257+
**优质文章**
258+
259+
- [全局唯一ID生成方案](https://topjavaer.cn/advance/distributed/1-global-unique-id.html)
249260
- [分布式架构演进](https://mp.weixin.qq.com/s?__biz=Mzg2OTY1NzY0MQ==&mid=2247490543&idx=1&sn=ee34bee96511d5e548381e0576f8b484&chksm=ce98e6a9f9ef6fbf7db9c2b6d2fed26853a3bc13a50c3228ab57bea55afe0772008cdb1f957b&token=1594696656&lang=zh_CN#rd)
250261
- [新一代分布式任务调度框架](https://topjavaer.cn/advance/excellent-article/22-distributed-scheduled-task.html)
262+
- [分布式锁怎么实现?](https://topjavaer.cn/distributed/article/distributed-lock.html)
251263

252264
# 高并发
253265

@@ -326,18 +338,16 @@
326338
- [8种架构模式](https://topjavaer.cn/advance/excellent-article/11-8-architect-pattern.html)
327339
- [几种常见的架构模式](https://topjavaer.cn/advance/excellent-article/20-architect-pattern.html)
328340
- [线上接口很慢怎么办?](https://topjavaer.cn/practice/service-performance-optimization.html)
341+
- [Zookeeper有哪些使用场景?](https://topjavaer.cn/zookeeper/zk-usage.html)
329342

330343
# 工具
331344

332-
[Git 超详细总结!](https://topjavaer.cn/tools/git-overview.html)(推荐 :+1:)
333-
334-
[Linux 常用命令总结!](https://topjavaer.cn/tools/linux-overview.html)
335-
336-
[Docker 基础总结!](https://topjavaer.cn/tools/docker-overview.html)
337-
338-
[Maven 基础总结!](https://topjavaer.cn/tools/maven-overview.html)
339-
340-
[Nginx 高频面试题](https://topjavaer.cn/tools/nginx.html)
345+
- [Git 高频面试题总结](https://topjavaer.cn/tools/git.html)
346+
- [Git 超详细总结!](https://topjavaer.cn/tools/git-overview.html)(推荐 :+1:)
347+
- [Linux 常用命令总结!](https://topjavaer.cn/tools/linux-overview.html)
348+
- [Docker 基础总结!](https://topjavaer.cn/tools/docker-overview.html)
349+
- [Maven 基础总结!](https://topjavaer.cn/tools/maven-overview.html)
350+
- [Nginx 高频面试题](https://topjavaer.cn/tools/nginx.html)
341351

342352
# 交流
343353

docs/advance/excellent-article/28-springboot-forbid-tomcat.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ head:
2121

2222
## SpringBoot中的Tomcat容器
2323

24-
SpringBoot可以说是目前最火的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来运行起来。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。推荐:[几乎涵盖你需要的SpringBoot所有操作](https://link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2FCPtdGgzcvAv6JglKTioScQ)
24+
SpringBoot可以说是目前最火的Java Web框架了。它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来运行起来。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。推荐:[最全面的Java面试网站](https://topjavaer.cn)
2525

2626
## SpringBoot设置Undertow
2727

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
## 接口的幂等性如何设计?
2+
3+
分布式系统中的某个接口,该如何保证幂等性?
4+
5+
假如有个服务提供一个付款接口供外部调用,这个服务部署在了 5 台机器上。然后用户在前端上操作的时候,不小心发起了两次支付请求,然后这俩请求分散在了这个服务部署的不同的机器上,结果一个订单扣款扣两次。
6+
7+
这就是典型的接口幂等性问题。
8+
9+
所谓幂等性,就是说一个接口,多次发起同一个请求,你这个接口得保证结果是准确的,比如不能多扣款、不能多插入一条数据、不能将统计值多加了 1。这就是幂等性。
10+
11+
其实保证幂等性主要是三点:
12+
13+
对于每个请求必须有一个唯一的标识,举个例子:订单支付请求,肯定得包含订单 id,一个订单 id 最多支付一次。每次处理完请求之后,必须有一个记录标识这个请求处理过了。常见的方案是在数据库中记录一个状态,比如支付之前记录一条这个订单的支付流水。
14+
15+
每次接收请求需要进行判断,判断之前是否处理过。如果订单已经支付了,就已经有了一条支付流水,那么如果重复发送这个请求,则此时先插入支付流水,orderId 已经存在了,唯一键约束生效,报错插入不进去的。然后你就不用再扣款了。
16+
17+
实际运作过程中,你要结合自己的业务来,比如说利用 Redis,用 orderId 作为唯一键。只有成功插入这个支付流水,才可以执行实际的支付扣款。
18+
19+
要求是支付一个订单,必须插入一条支付流水,order_id 建一个唯一键 unique key 。你在支付一个订单之前,先插入一条支付流水,order_id 就已经进去了。你就可以写一个标识到 Redis 里面去, set order_id payed ,下一次重复请求过来了,先查 Redis 的 order_id 对应的 value,如果是 payed 就说明已经支付过了,就别重复支付了。

0 commit comments

Comments
 (0)