From 46430483bac498e923f85ac4768040d32e72eff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 10 Oct 2021 23:16:51 +0800 Subject: [PATCH 01/47] Add files via upload --- ...23\345\215\260\350\247\204\350\214\203.md" | 269 ++++++++++++++++++ 1 file changed, 269 insertions(+) create mode 100644 "\345\267\245\344\275\234\346\200\273\347\273\223/\346\227\245\345\277\227\346\211\223\345\215\260\350\247\204\350\214\203.md" diff --git "a/\345\267\245\344\275\234\346\200\273\347\273\223/\346\227\245\345\277\227\346\211\223\345\215\260\350\247\204\350\214\203.md" "b/\345\267\245\344\275\234\346\200\273\347\273\223/\346\227\245\345\277\227\346\211\223\345\215\260\350\247\204\350\214\203.md" new file mode 100644 index 0000000..4577332 --- /dev/null +++ "b/\345\267\245\344\275\234\346\200\273\347\273\223/\346\227\245\345\277\227\346\211\223\345\215\260\350\247\204\350\214\203.md" @@ -0,0 +1,269 @@ +## 前言 + +大家好,我是**捡田螺的小男孩**。日志是快速定位问题的好帮手,是**撕逼和甩锅**的利器!打印好日志非常重要。今天我们来聊聊**日志打印**的15个好建议~ + +- 公众号:**捡田螺的小男孩** + + +## 1. 选择恰当的日志级别 + +常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~ + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c4502943568747e79ac4091b4d2868ea~tplv-k3u1fbpfcp-zoom-1.image) + +- error:错误日志,指比较严重的错误,对正常业务有影响,需要**运维配置监控的**; +- warn:警告日志,一般的错误,对业务影响不大,但是需要**开发关注**; +- info:信息日志,记录排查问题的关键信息,如调用时间、出参入参等等; +- debug:用于开发DEBUG的,关键逻辑里面的运行时数据; +- trace:最详细的信息,一般这些信息只记录到日志文件中。 + + +## 2. 日志要打印出方法的入参、出参 + +我们并不需要打印很多很多日志,只需要打印可以**快速定位问题的有效日志**。有效的日志,是甩锅的利器! + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c59f66bfc09d42ffa8528c16145952b8~tplv-k3u1fbpfcp-zoom-1.image) + +哪些算得的上**有效关键**的日志呢?比如说,方法进来的时候,打印**入参**。再然后呢,在方法返回的时候,就是**打印出参,返回值**。入参的话,一般就是**userId或者bizSeq这些关键**信息。正例如下: + +``` +public String testLogMethod(Document doc, Mode mode){ + log.debug(“method enter param:{}”,userId); + String id = "666"; + log.debug(“method exit param:{}”,id); + return id; +} +``` + + +## 3. 选择合适的日志格式 + +理想的日志格式,应当包括这些最基本的信息:如当**前时间戳**(一般毫秒精确度)、**日志级别**,**线程名字**等等。在logback日志里可以这么配置: + +``` + + + %d{HH:mm:ss.SSS} %-5level [%thread][%logger{0}] %m%n + + +``` + +如果我们的日志格式,连当前时间都沒有记录,那**连请求的时间点都不知道了**? + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6ecfebbe1a0b411e8186d46edaddbd38~tplv-k3u1fbpfcp-zoom-1.image) + + +## 4. 遇到if...else...等条件时,每个分支首行都尽量打印日志 + +当你碰到**if...else...或者switch**这样的条件时,可以在分支的首行就打印日志,这样排查问题时,就可以通过日志,确定进入了哪个分支,代码逻辑更清晰,也更方便排查问题了。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/60bc12dfb6324c089b86a9dc05acc2f3~tplv-k3u1fbpfcp-zoom-1.image) + + +正例: +``` +if(user.isVip()){ + log.info("该用户是会员,Id:{},开始处理会员逻辑",user,getUserId()); + //会员逻辑 +}else{ + log.info("该用户是非会员,Id:{},开始处理非会员逻辑",user,getUserId()) + //非会员逻辑 +} +``` + +## 5.日志级别比较低时,进行日志开关判断 + +对于trace/debug这些比较低的日志级别,必须进行日志级别的开关判断。 + +正例: +``` +User user = new User(666L, "公众号", "捡田螺的小男孩"); +if (log.isDebugEnabled()) { + log.debug("userId is: {}", user.getId()); +} +``` + +因为当前有如下的日志代码: +``` +logger.debug("Processing trade with id: " + id + " and symbol: " + symbol); +``` + +如果**配置的日志级别是warn**的话,上述日志不会打印,但是会执行字符串拼接操作,如果```symbol```是对象, +还会执行```toString()```方法,浪费了系统资源,执行了上述操作,最终日志却没有打印,因此建议**加日志开关判断。** + +## 6. 不能直接使用日志系统(Log4j、Logback)中的 API,而是使用日志框架SLF4J中的API。 + +SLF4J 是门面模式的日志框架,有利于维护和各个类的日志处理方式统一,并且可以在保证不修改代码的情况下,很方便的实现底层日志框架的更换。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9846b8d9ddd2485483e41b7134954f91~tplv-k3u1fbpfcp-zoom-1.image) + +正例: +``` +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +private static final Logger logger = LoggerFactory.getLogger(TianLuoBoy.class); +``` + +## 7. 建议使用参数占位{},而不是用+拼接。 + +反例: +``` +logger.info("Processing trade with id: " + id + " and symbol: " + symbol); +``` + +上面的例子中,使用```+```操作符进行字符串的拼接,有一定的**性能损耗**。 + +正例如下: +``` +logger.info("Processing trade with id: {} and symbol : {} ", id, symbol); +``` +我们使用了大括号```{}```来作为日志中的占位符,比于使用```+```操作符,更加优雅简洁。并且,**相对于反例**,使用占位符仅是替换动作,可以有效提升性能。 + +## 8. 建议使用异步的方式来输出日志。 + +- 日志最终会输出到文件或者其它输出流中的,IO性能会有要求的。如果异步,就可以显著提升IO性能。 +- 除非有特殊要求,要不然建议使用异步的方式来输出日志。以logback为例吧,要配置异步很简单,使用AsyncAppender就行 +``` + + + +``` + +## 9. 不要使用e.printStackTrace() + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e2aeaca5e0f44c08ad25fb92e75222dc~tplv-k3u1fbpfcp-zoom-1.image) + + +反例: +``` +try{ + // 业务代码处理 +}catch(Exception e){ + e.printStackTrace(); +} +``` +正例: +``` +try{ + // 业务代码处理 +}catch(Exception e){ + log.error("你的程序有异常啦",e); +} +``` + +**理由:** + +- e.printStackTrace()打印出的堆栈日志跟业务代码日志是交错混合在一起的,通常排查异常日志不太方便。 +- e.printStackTrace()语句产生的字符串记录的是堆栈信息,如果信息太长太多,字符串常量池所在的内存块没有空间了,即内存满了,那么,用户的请求就卡住啦~ + +## 10. 异常日志不要只打一半,要输出全部错误信息 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/420f0da65bac44b5b340a96facfd5c11~tplv-k3u1fbpfcp-zoom-1.image) + +反例1: + +``` +try { + //业务代码处理 +} catch (Exception e) { + // 错误 + LOG.error('你的程序有异常啦'); +} + +``` +- 异常e都没有打印出来,所以压根不知道出了什么类型的异常。 + +反例2: +``` +try { + //业务代码处理 +} catch (Exception e) { + // 错误 + LOG.error('你的程序有异常啦', e.getMessage()); +} +``` + +- ```e.getMessage()```不会记录详细的堆栈异常信息,只会记录错误基本描述信息,不利于排查问题。 + +正例: + +``` +try { + //业务代码处理 +} catch (Exception e) { + // 错误 + LOG.error('你的程序有异常啦', e); +} +``` + +## 11. 禁止在线上环境开启 debug + +禁止在线上环境开启debug,这一点非常重要。 + + +因为一般系统的debug日志会很多,并且各种框架中也大量使用 debug的日志,线上开启debug不久可能会打满磁盘,影响业务系统的正常运行。 + +## 12.不要记录了异常,又抛出异常 + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/671289ecaa4b4eb39dca1139b657f8cd~tplv-k3u1fbpfcp-zoom-1.image) + + +反例如下: +``` +log.error("IO exception", e); +throw new MyException(e); +``` + +- 这样实现的话,通常会把栈信息打印两次。这是因为捕获了MyException异常的地方,还会再打印一次。 +- 这样的日志记录,或者包装后再抛出去,不要同时使用!否则你的日志看起来会让人很迷惑。 + + +## 13.避免重复打印日志 + +避免重复打印日志,酱紫会浪费磁盘空间。如果你已经有一行日志清楚表达了意思,**避免再冗余打印**,反例如下: + +``` +if(user.isVip()){ + log.info("该用户是会员,Id:{}",user,getUserId()); + //冗余,可以跟前面的日志合并一起 + log.info("开始处理会员逻辑,id:{}",user,getUserId()); + //会员逻辑 +}else{ + //非会员逻辑 +} +``` + +如果你是使用log4j日志框架,务必在```log4j.xml```中设置 additivity=false,因为可以避免重复打印日志 + +正例: +``` + +``` + +## 14.日志文件分离 + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/12a2cbe6cf7f4ba981ba7103f9d81858~tplv-k3u1fbpfcp-zoom-1.image) + + +- 我们可以把不同类型的日志分离出去,比如access.log,或者error级别error.log,都可以单独打印到一个文件里面。 +- 当然,也可以根据不同的业务模块,打印到不同的日志文件里,这样我们排查问题和做数据统计的时候,都会比较方便啦。 + + +## 15. 核心功能模块,建议打印较完整的日志 + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c6f26259cda042edb98400145d208d12~tplv-k3u1fbpfcp-zoom-1.image) + + +- 我们日常开发中,如果核心或者逻辑复杂的代码,建议添加详细的注释,以及较详细的日志。 +- 日志要多详细呢?脑洞一下,如果你的核心程序哪一步出错了,通过日志可以定位到,那就可以啦。 + + + + + + From 93194b68365941438a9d904fa1b3e9c258f7e28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 10 Oct 2021 23:17:47 +0800 Subject: [PATCH 02/47] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6018cc3..214c8ab 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## 涓汉鍏紬鍙 -![image](https://user-gold-cdn.xitu.io/2019/7/28/16c381c89b127bbb?w=344&h=344&f=jpeg&s=8943) +寰俊鎼滐細鎹$敯铻虹殑灏忕敺瀛 - 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紝涓璧峰涔犺璁哄搱~~ From 6cd2682a3f262f88a9db736c5402df01c6aefc20 Mon Sep 17 00:00:00 2001 From: whx123 <327658337@qq.com> Date: Mon, 6 Jun 2022 08:23:10 +0800 Subject: [PATCH 03/47] mhouduansiwei --- ...36\344\270\252\351\224\246\345\233\212.md" | 540 ++++++++++++++++ ...03\347\224\250\346\250\241\346\235\277.md" | 599 ++++++++++++++++++ 2 files changed, 1139 insertions(+) create mode 100644 "\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\344\270\200\357\274\232\350\256\276\350\256\241\346\216\245\345\217\243\347\232\20436\344\270\252\351\224\246\345\233\212.md" create mode 100644 "\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207\344\272\214\357\274\232\346\211\213\346\212\212\346\211\213\346\225\231\344\275\240\345\256\236\347\216\260\344\270\200\344\270\252\345\271\266\350\241\214\350\260\203\347\224\250\346\250\241\346\235\277.md" diff --git "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\344\270\200\357\274\232\350\256\276\350\256\241\346\216\245\345\217\243\347\232\20436\344\270\252\351\224\246\345\233\212.md" "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\344\270\200\357\274\232\350\256\276\350\256\241\346\216\245\345\217\243\347\232\20436\344\270\252\351\224\246\345\233\212.md" new file mode 100644 index 0000000..f999d6b --- /dev/null +++ "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\344\270\200\357\274\232\350\256\276\350\256\241\346\216\245\345\217\243\347\232\20436\344\270\252\351\224\246\345\233\212.md" @@ -0,0 +1,540 @@ +## 前言 + +大家好,我是捡田螺的小男孩。作为后端开发,不管是什么语言,```Java```、```Go```还是```C++```,其背后的后端思想都是类似的。后面打算出一个后端思想的技术专栏,主要包括后端的一些设计、或者后端规范相关的,希望对大家日常工作有帮助哈。 + +我们做后端开发工程师,主要工作就是:**如何把一个接口设计好**。所以,今天就给大家介绍,设计好接口的36个锦囊。本文就是后端思想专栏的第一篇哈。 + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1bfc8123cee34de2ad82b736121165d2~tplv-k3u1fbpfcp-zoom-1.image) + +- 公众号:捡田螺的小男孩 + + +## 1. 接口参数校验 + +入参出参校验是每个程序员必备的基本素养。你设计的接口,必须先校验参数。比如入参是否允许为空,入参长度是否符合你的预期长度。这个要养成习惯哈,日常开发中,很多低级bug都是不校验参数导致的。 + +> 比如你的数据库表字段设置为```varchar(16)```,对方传了一个32位的字符串过来,如果你不校验参数,**插入数据库直接异常了**。 + +出参也是,比如你定义的接口报文,参数是不为空的,但是你的接口返回参数,没有做校验,因为程序某些原因,直返回别人一个```null```值。。。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bfd3392f3ce6408daa1940cc185f0d5f~tplv-k3u1fbpfcp-zoom-1.image) + +## 2. 修改老接口时,注意接口的兼容性 + +很多bug都是因为修改了对外旧接口,但是却**不做兼容**导致的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误哦~ + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/701ac23b5dd04149b277c4001721fb87~tplv-k3u1fbpfcp-zoom-1.image) + +所以,如果你的需求是在原来接口上修改,尤其这个接口是对外提供服务的话,一定要考虑接口兼容。举个例子吧,比如dubbo接口,原本是只接收A,B参数,现在你加了一个参数C,就可以考虑这样处理: + +``` +//老接口 +void oldService(A,B){ + //兼容新接口,传个null代替C + newService(A,B,null); +} + +//新接口,暂时不能删掉老接口,需要做兼容。 +void newService(A,B,C){ + ... +} +``` + +## 3. 设计接口时,充分考虑接口的可扩展性 + +要根据实际业务场景设计接口,充分考虑接口的可扩展性。 + +比如你接到一个需求:是用户添加或者修改员工时,需要刷脸。那你是反手提供一个员工管理的提交刷脸信息接口?还是先思考:提交刷脸是不是通用流程呢?比如转账或者一键贴现需要接入刷脸的话,你是否需要重新实现一个接口呢?还是当前按业务类型划分模块,复用这个接口就好,保留接口的可扩展性。 + +如果按模块划分的话,未来如果其他场景比如一键贴现接入刷脸的话,不用再搞一套新的接口,只需要新增枚举,然后复用刷脸通过流程接口,实现一键贴现刷脸的差异化即可。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/cd3ee52ecaa34de384bb529cbb358889~tplv-k3u1fbpfcp-zoom-1.image) + + +## 4.接口考虑是否需要防重处理 + +如果前端重复请求,你的逻辑如何处理?是不是考虑接口去重处理。 + +当然,如果是查询类的请求,其实不用防重。如果是更新修改类的话,尤其金融转账类的,就要过滤重复请求了。简单点,你可以使用Redis防重复请求,同样的请求方,一定时间间隔内的相同请求,考虑是否过滤。当然,转账类接口,并发不高的话,**推荐使用数据库防重表**,以**唯一流水号作为主键或者唯一索引**。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/059928f565ba4d27a17c54f451b0235d~tplv-k3u1fbpfcp-zoom-1.image) + + +## 5. 重点接口,考虑线程池隔离。 + +一些登陆、转账交易、下单等重要接口,考虑线程池隔离哈。如果你所有业务都共用一个线程池,有些业务出bug导致线程池阻塞打满的话,那就杯具了,**所有业务都影响了**。因此进行线程池隔离,重要业务分配多一点的核心线程,就更好保护重要业务。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1d30804afc044026b4eb7bad23689c42~tplv-k3u1fbpfcp-zoom-1.image) + + +## 6. 调用第三方接口要考虑异常和超时处理 + +如果你调用第三方接口,或者分布式远程服务的的话,需要考虑: + +- 异常处理 + +> 比如,你调别人的接口,如果异常了,怎么处理,是重试还是当做失败还是告警处理。 + +- 接口超时 + +> 没法预估对方接口一般多久返回,一般设置个超时断开时间,以保护你的接口。**之前见过一个生产问题**,就是http调用不设置超时时间,最后响应方进程假死,请求一直占着线程不释放,拖垮线程池。 + +- 重试次数 +> 你的接口调失败,需不需要重试?重试几次?需要站在业务上角度思考这个问题 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/25ec61c10c324ada9252745fa4017ad6~tplv-k3u1fbpfcp-zoom-1.image) + + +## 7. 接口实现考虑熔断和降级 + +当前互联网系统一般都是分布式部署的。而分布式系统中经常会出现某个基础服务不可用,最终导致整个系统不可用的情况, 这种现象被称为**服务雪崩效应**。 + +比如分布式调用链路```A->B->C....```,下图所示: + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/65240791c94c44b6aab143178eeb790c~tplv-k3u1fbpfcp-zoom-1.image) + +> 如果服务C出现问题,比如是**因为慢SQL导致调用缓慢**,那将导致B也会延迟,从而A也会延迟。堵住的A请求会消耗占用系统的线程、IO等资源。 当请求A的服务越来越多,占用计算机的资源也越来越多,最终会导致系统瓶颈出现,造成其他的请求同样不可用,最后导致业务系统崩溃。 + +为了应对服务雪崩, 常见的做法是**熔断和降级**。最简单是加开关控制,当下游系统出问题时,开关降级,不再调用下游系统。还可以选用开源组件```Hystrix```。 + +## 8. 日志打印好,接口的关键代码,要有日志保驾护航。 + +关键业务代码无论身处何地,都应该有足够的日志保驾护航。 +比如:你实现转账业务,转个几百万,然后转失败了,接着客户投诉,然后你还没有打印到日志,想想那种水深火热的困境下,你却毫无办法。。。 + +那么,你的转账业务都需要那些日志信息呢?至少,方法调用前,入参需要打印需要吧,接口调用后,需要捕获一下异常吧,同时打印异常相关日志吧,如下: +``` +public void transfer(TransferDTO transferDTO){ + log.info("invoke tranfer begin"); + //打印入参 + log.info("invoke tranfer,paramters:{}",transferDTO); + try { + res= transferService.transfer(transferDTO); + }catch(Exception e){ + log.error("transfer fail,account:{}", + transferDTO.getAccount()) + log.error("transfer fail,exception:{}",e); + } + log.info("invoke tranfer end"); + } +``` + +之前写过一篇打印日志的15个建议,大家可以看看哈:[工作总结!日志打印的15个建议](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494838&idx=1&sn=cdb15fd346bddf3f8c1c99f0efbd67d8&chksm=cf22339ff855ba891616c79d4f4855e228e34a9fb45088d7acbe421ad511b8d090a90f5b019f&token=162724582&lang=zh_CN&scene=21#wechat_redirect) + +## 9. 接口的功能定义要具备单一性 + +单一性是指接口做的事情比较单一、专一。比如一个登陆接口,它做的事情就只是校验账户名密码,然后返回登陆成功以及```userId```即可。**但是如果你为了减少接口交互,把一些注册、一些配置查询等全放到登陆接口,就不太妥。** + +其实这也是微服务一些思想,接口的功能单一、明确。比如订单服务、积分、商品信息相关的接口都是划分开的。将来拆分微服务的话,是不是就比较简便啦。 + + +## 10.接口有些场景,使用异步更合理 + +举个简单的例子,比如你实现一个用户注册的接口。用户注册成功时,发个邮件或者短信去通知用户。这个邮件或者发短信,就更适合异步处理。因为总不能一个通知类的失败,导致注册失败吧。 + +至于做异步的方式,简单的就是**用线程池**。还可以使用消息队列,就是用户注册成功后,生产者产生一个注册成功的消息,消费者拉到注册成功的消息,就发送通知。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/585b098a67b349d495e6e8579ea85e4c~tplv-k3u1fbpfcp-zoom-1.image) + + +不是所有的接口都适合设计为同步接口。比如你要做一个转账的功能,如果你是单笔的转账,你是可以把接口设计同步。用户发起转账时,客户端在静静等待转账结果就好。如果你是批量转账,一个批次一千笔,甚至一万笔的,你则可以把接口设计为异步。就是用户发起批量转账时,持久化成功就先返回受理成功。然后用户隔十分钟或者十五分钟等再来查转账结果就好。又或者,批量转账成功后,再回调上游系统。 + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1ae74868492344c4bcbab9b480904c47~tplv-k3u1fbpfcp-zoom-1.image) + + +## 11. 优化接口耗时,远程串行考虑改并行调用 + +假设我们设计一个APP首页的接口,它需要查用户信息、需要查banner信息、需要查弹窗信息等等。那你是一个一个接口串行调,还是并行调用呢? + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d118e2b09e1f4fc6a1003fd44a43e4c7~tplv-k3u1fbpfcp-zoom-1.image) + +如果是串行一个一个查,比如查用户信息200ms,查banner信息100ms、查弹窗信息50ms,那一共就耗时```350ms```了,如果还查其他信息,那耗时就更大了。这种场景是可以改为并行调用的。也就是说查用户信息、查banner信息、查弹窗信息,可以同时发起。 + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/83561366219b48a2a85a6bb0419f82a3~tplv-k3u1fbpfcp-zoom-1.image) + +在Java中有个异步编程利器:```CompletableFuture```,就可以很好实现这个功能。有兴趣的小伙伴可以看我之前这个文章哈:[CompletableFuture详解](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490456&idx=1&sn=95836324db57673a4d7aea4fb233c0d2&chksm=cf21c4b1f8564da72dc7b39279362bcf965b1374540f3b339413d138599f7de59a5f977e3b0e&token=1260947715&lang=zh_CN#rd) + +## 12. 接口合并或者说考虑批量处理思想 + +数据库操作或或者是远程调用时,能批量操作就不要for循环调用。 +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/855cd5cf57d047be909dbc41ddacc021~tplv-k3u1fbpfcp-zoom-1.image) + +一个简单例子,我们平时一个列表明细数据插入数据库时,不要在for循环一条一条插入,建议一个批次几百条,进行批量插入。同理远程调用也类似想法,比如你查询营销标签是否命中,可以一个标签一个标签去查,也可以批量标签去查,那批量进行,效率就更高嘛。 + +``` +//反例 +for(int i=0;i 比如一些平时变动很小或者说几乎不会变的商品信息,可以放到缓存,请求过来时,先查询缓存,如果没有再查数据库,并且把数据库的数据更新到缓存。但是,使用缓存增加了需要考虑这些点:缓存和数据库一致性如何保证、集群、缓存击穿、缓存雪奔、缓存穿透等问题。 + +- 保证数据库和缓存一致性:**缓存延时双删、删除缓存重试机制、读取biglog异步删除缓存** +- 缓存击穿:设置数据永不过期 +- 缓存雪奔:Redis集群高可用、均匀设置过期时间 +- 缓存穿透:接口层校验、查询为空设置个默认空值标记、布隆过滤器。 + +一般用```Redis```分布式缓存,当然有些时候也可以考虑使用本地缓存,如```Guava Cache、Caffeine```等。使用本地缓存有些缺点,就是无法进行大数据存储,并且应用进程的重启,缓存会失效。 + +## 14. 接口考虑热点数据隔离性 + +瞬时间的高并发,可能会打垮你的系统。可以做一些热点数据的隔离。比如**业务隔离、系统隔离、用户隔离、数据隔离**等。 + +- 业务隔离性,比如12306的分时段售票,将热点数据分散处理,降低系统负载压力。 +- 系统隔离:比如把系统分成了用户、商品、社区三个板块。这三个块分别使用不同的域名、服务器和数据库,做到从接入层到应用层再到数据层三层完全隔离。 +- 用户隔离:重点用户请求到配置更好的机器。 +- 数据隔离:使用单独的缓存集群或者数据库服务热点数据。 + +## 15. 可变参数配置化,比如红包皮肤切换等 + +假如产品经理提了个红包需求,圣诞节的时候,红包皮肤为圣诞节相关的,春节的时候,为春节红包皮肤等。 + +如果在代码写死控制,可有类似以下代码: +``` +if(duringChristmas){ + img = redPacketChristmasSkin; +}else if(duringSpringFestival){ + img = redSpringFestivalSkin; +} +``` +如果到了元宵节的时候,运营小姐姐突然又有想法,红包皮肤换成灯笼相关的,这时候,是不是要去修改代码了,重新发布了? + +从一开始接口设计时,可以实现**一张红包皮肤的配置表**,将红包皮肤做成配置化呢?更换红包皮肤,只需修改一下表数据就好了。 + +当然,还有一些场景适合一些配置化的参数:一个分页多少数量控制、某个抢红包多久时间过期这些,都可以搞到参数配置化表里面。**这也是扩展性思想的一种体现。** + +## 16.接口考虑幂等性 + +接口是需要考虑幂等性的,尤其抢红包、转账这些重要接口。最直观的业务场景,就是**用户连着点击两次**,你的接口有没有**hold住**。或者消息队列出现重复消费的情况,你的业务逻辑怎么控制? + +回忆下,**什么是幂等?** + +> 计算机科学中,幂等表示一次和多次请求某一个资源应该具有同样的副作用,或者说,多次请求所产生的影响与一次请求执行的影响效果相同。 + +大家别搞混哈,**防重和幂等设计其实是有区别的**。防重主要为了避免产生重复数据,把重复请求拦截下来即可。而幂等设计除了拦截已经处理的请求,还要求每次相同的请求都返回一样的效果。不过呢,很多时候,它们的处理流程、方案是类似的哈。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f8c3d0d5a653455198ba3259ef221387~tplv-k3u1fbpfcp-zoom-1.image) + + +接口幂等实现方案主要有8种: + +- select+insert+主键/唯一索引冲突 +- 直接insert + 主键/唯一索引冲突 +- 状态机幂等 +- 抽取防重表 +- token令牌 +- 悲观锁 +- 乐观锁 +- 分布式锁 + +大家可以看我这篇文章哈:[聊聊幂等设计](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497427&idx=1&sn=2ed160c9917ad989eee1ac60d6122855&chksm=cf2229faf855a0ecf5eb34c7335acdf6420426490ee99fc2b602d54ff4ffcecfdab24eeab0a3&token=1260947715&lang=zh_CN#rd) + +## 17. 读写分离,优先考虑读从库,注意主从延迟问题 + +我们的数据库都是集群部署的,有主库也有从库,当前一般都是读写分离的。比如你写入数据,肯定是写入主库,但是对于读取实时性要求不高的数据,则优先考虑读从库,因为可以分担主库的压力。 + +如果读取从库的话,需要考虑主从延迟的问题。 + +## 18.接口注意返回的数据量,如果数据量大需要分页 + +一个接口返回报文,不应该包含过多的数据量。过多的数据量不仅处理复杂,并且数据量传输的压力也非常大。因此数量实在是比较大,可以分页返回,如果是功能不相关的报文,那应该考虑接口拆分。 + +## 19. 好的接口实现,离不开SQL优化 + +我们做后端的,写好一个接口,离不开SQL优化。 + +SQL优化从这几个维度思考: + +- explain 分析SQL查询计划(重点关注type、extra、filtered字段) +- show profile分析,了解SQL执行的线程的状态以及消耗的时间 +- 索引优化 (覆盖索引、最左前缀原则、隐式转换、order by以及group by的优化、join优化) +- 大分页问题优化(延迟关联、记录上一页最大ID) +- 数据量太大(**分库分表**、同步到es,用es查询) + +## 20.代码锁的粒度控制好 + +什么是加锁粒度呢? + +> 其实就是就是你要锁住的范围是多大。比如你在家上卫生间,你只要锁住卫生间就可以了吧,不需要将整个家都锁起来不让家人进门吧,卫生间就是你的加锁粒度。 + +我们写代码时,如果不涉及到共享资源,就没有必要锁住的。这就好像你上卫生间,不用把整个家都锁住,锁住卫生间门就可以了。 + +比如,在业务代码中,有一个ArrayList因为涉及到多线程操作,所以需要加锁操作,假设刚好又有一段比较耗时的操作(代码中的```slowNotShare```方法)不涉及线程安全问题,你会如何加锁呢? + +反例: +``` +//不涉及共享资源的慢方法 +private void slowNotShare() { + try { + TimeUnit.MILLISECONDS.sleep(100); + } catch (InterruptedException e) { + } +} + +//错误的加锁方法 +public int wrong() { + long beginTime = System.currentTimeMillis(); + IntStream.rangeClosed(1, 10000).parallel().forEach(i -> { + //加锁粒度太粗了,slowNotShare其实不涉及共享资源 + synchronized (this) { + slowNotShare(); + data.add(i); + } + }); + log.info("cosume time:{}", System.currentTimeMillis() - beginTime); + return data.size(); +} +``` + +正例: +``` +public int right() { + long beginTime = System.currentTimeMillis(); + IntStream.rangeClosed(1, 10000).parallel().forEach(i -> { + slowNotShare();//可以不加锁 + //只对List这部分加锁 + synchronized (data) { + data.add(i); + } + }); + log.info("cosume time:{}", System.currentTimeMillis() - beginTime); + return data.size(); +} +``` + +## 21.接口状态和错误需要统一明确 + +提供必要的接口调用状态信息。比如你的一个转账接口调用是成功、失败、处理中还是受理成功等,需要明确告诉客户端。如果接口失败,那么具体失败的原因是什么。这些必要的信息都必须要告诉给客户端,因此需要定义明确的错误码和对应的描述。同时,尽量对报错信息封装一下,不要把后端的异常信息完全抛出到客户端。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/20a1080126274c04aa31802178c01bb0~tplv-k3u1fbpfcp-zoom-1.image) + + +## 22.接口要考虑异常处理 + +实现一个好的接口,离不开优雅的异常处理。对于异常处理,提十个小建议吧: + +- 尽量不要使用```e.printStackTrace()```,而是使用```log```打印。因为```e.printStackTrace()```语句可能会导致内存占满。 +- ```catch```住异常时,建议打印出具体的```exception```,利于更好定位问题 +- 不要用一个```Exception```捕捉所有可能的异常 +- 记得使用```finally```关闭流资源或者直接使用```try-with-resource``` +- 捕获异常与抛出异常必须是完全匹配,或者捕获异常是抛异常的父类 +- 捕获到的异常,不能忽略它,至少打点日志吧 +- 注意异常对你的代码层次结构的侵染 +- 自定义封装异常,不要丢弃原始异常的信息```Throwable cause``` +- 运行时异常```RuntimeException``` ,不应该通过```catch```的方式来处理,而是先预检查,比如:```NullPointerException```处理 +- 注意异常匹配的顺序,优先捕获具体的异常 + +小伙伴们有兴趣可以看下我之前写的这篇文章哈:[Java 异常处理的十个建议](https://mp.weixin.qq.com/s/3mqY77c8iXWvJFzkVQi9Og) + +## 23. 优化程序逻辑 + +优化程序逻辑这块还是挺重要的,也就是说,你实现的业务代码,**如果是比较复杂的话,建议把注释写清楚**。还有,代码逻辑尽量清晰,代码尽量高效。 + +> 比如,你要使用用户信息的属性,你根据session已经获取到```userId```了,然后就把用户信息从数据库查询出来,使用完后,后面可能又要用到用户信息的属性,有些小伙伴没想太多,反手就把```userId```再传进去,再查一次数据库。。。我在项目中,见过这种代码。。。直接把用户对象传下来不好嘛。。 + +反例伪代码: + +``` +public Response test(Session session){ + UserInfo user = UserDao.queryByUserId(session.getUserId()); + + if(user==null){ + reutrn new Response(); + } + + return do(session.getUserId()); +} + +public Response do(String UserId){ + //多查了一次数据库 + UserInfo user = UserDao.queryByUserId(session.getUserId()); + ...... + return new Response(); +} + +``` + +正例: + +``` +public Response test(Session session){ + UserInfo user = UserDao.queryByUserId(session.getUserId()); + + if(user==null){ + reutrn new Response(); + } + + return do(session.getUserId()); +} + +//直接传UserInfo对象过来即可,不用再多查一次数据库 +public Response do(UserInfo user){ + ...... + return new Response(); +} +``` + +当然,这只是一些很小的一个例子,还有很多类似的例子,需要大家开发过程中,多点思考的哈。 + + +## 24. 接口实现过程汇中,注意大文件、大事务、大对象 + +- 读取大文件时,不要```Files.readAllBytes```直接读取到内存,这样会OOM的,建议使用```BufferedReader```一行一行来。 +- 大事务可能导致死锁、回滚时间长、主从延迟等问题,开发中尽量避免大事务。 +- 注意一些大对象的使用,因为大对象是直接进入老年代的,会触发fullGC + +## 25. 你的接口,需要考虑限流 + +如果你的系统每秒扛住的请求是1000,如果一秒钟来了十万请求呢?换个角度就是说,高并发的时候,流量洪峰来了,超过系统的承载能力,怎么办呢? + +如果不采取措施,所有的请求打过来,系统CPU、内存、Load负载飚的很高,最后请求处理不过来,所有的请求无法正常响应。 + +针对这种场景,我们可以采用限流方案。就是为了保护系统,多余的请求,直接丢弃。 + +限流定义: +> 在计算机网络中,限流就是控制网络接口发送或接收请求的速率,它可防止DoS攻击和限制Web爬虫。限流,也称流量控制。是指系统在面临高并发,或者大流量请求的情况下,限制新的请求对系统的访问,从而保证系统的稳定性。 + +可以使用Guava的```RateLimiter```单机版限流,也可以使用```Redis```分布式限流,还可以使用阿里开源组件```sentinel```限流 + +大家可以看下我之前这篇文章哈:[4种经典限流算法讲解](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490393&idx=1&sn=98189caa486406f8fa94d84ba0667604&chksm=cf21c470f8564d665ce04ccb9dc7502633246da87a0541b07ba4ac99423b28ce544cdd6c036b&token=162724582&lang=zh_CN&scene=21#wechat_redirect) + + +## 26.代码实现时,注意运行时异常(比如空指针、下标越界等) + +日常开发中,我们需要采取措施**规避数组边界溢出,被零整除,空指针**等运行时错误。类似代码比较常见: +``` +String name = list.get(1).getName(); //list可能越界,因为不一定有2个元素哈 +``` + +应该采取措施,预防一下数组边界溢出。正例如下: +``` +if(CollectionsUtil.isNotEmpty(list)&& list.size()>1){ + String name = list.get(1).getName(); +} +``` +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/10199365140845ea8f7b29a07fbaf3cc~tplv-k3u1fbpfcp-zoom-1.image) + + +## 27.保证接口安全性 + +如果你的API接口是对外提供的,需要保证接口的安全性。保证接口的安全性有**token机制和接口签名**。 + +**token机制身份验证**方案还比较简单的,就是 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9b468f89cdaf4040b84e432182903fd9~tplv-k3u1fbpfcp-zoom-1.image) + +1. 客户端发起请求,申请获取token。 +2. 服务端生成全局唯一的token,保存到redis中(一般会设置一个过期时间),然后返回给客户端。 +3. 客户端带着token,发起请求。 +4. 服务端去redis确认token是否存在,一般用 redis.del(token)的方式,如果存在会删除成功,即处理业务逻辑,如果删除失败不处理业务逻辑,直接返回结果。 + +**接口签名**的方式,就是把接口请求相关信息(请求报文,包括请求时间戳、版本号、appid等),客户端私钥加签,然后服务端用公钥验签,验证通过才认为是合法的、没有被篡改过的请求。 + +有关于加签验签的,大家可以看下我这篇文章哈:[程序员必备基础:加签验签](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488022&idx=1&sn=70484a48173d36006c8db1dfb74ab64d&chksm=cf21cd3ff8564429a1205f6c1d78757faae543111c8461d16c71aaee092fe3e0fed870cc5e0e&token=162724582&lang=zh_CN&scene=21#wechat_redirect) + +处了**加签验签和token机制,接口报文一般是要加密的**。当然,用https协议是会对报文加密的。如果是我们服务层的话,如何加解密呢? +> 可以参考HTTPS的原理,就是服务端把公钥给客户端,然后客户端生成对称密钥,接着客户端用服务端的公钥加密对称密钥,再发到服务端,服务端用自己的私钥解密,得到客户端的对称密钥。这时候就可以愉快传输报文啦,客户端用**对称密钥加密请求报文**,**服务端用对应的对称密钥解密报文**。 + +有时候,接口的安全性,还包括**手机号、身份证等信息的脱敏**。就是说,**用户的隐私数据,不能随便暴露**。 + +## 28.分布式事务,如何保证 + +> 分布式事务:就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单来说,分布式事务指的就是分布式系统中的事务,它的存在就是为了保证不同数据库节点的数据一致性。 + +分布式事务的几种解决方案: +- 2PC(二阶段提交)方案、3PC +- TCC(Try、Confirm、Cancel) +- 本地消息表 +- 最大努力通知 +- seata + +大家可以看下这篇文章哈:[看一遍就理解:分布式事务详解](https://mp.weixin.qq.com/s/3r9MfIz2RAtdFhYzwwZxjA) + +## 29. 事务失效的一些经典场景 + +我们的接口开发过程中,经常需要使用到事务。所以需要避开事务失效的一些经典场景。 + +- 方法的访问权限必须是public,其他private等权限,事务失效 +- 方法被定义成了final的,这样会导致事务失效。 +- 在同一个类中的方法直接内部调用,会导致事务失效。 +- 一个方法如果没交给spring管理,就不会生成spring事务。 +- 多线程调用,两个方法不在同一个线程中,获取到的数据库连接不一样的。 +- 表的存储引擎不支持事务 +- 如果自己try...catch误吞了异常,事务失效。 +- 错误的传播特性 + +推荐大家看下这篇文章:[聊聊spring事务失效的12种场景,太坑了](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494570&idx=2&sn=17357bcd328b2d1d83f4a72c47daac1b&chksm=cf223483f855bd95351a778d5f48ddd37917ce2790ebbbcd1d6ee4f27f7f4b147f0d41101dcc&token=2044040586&lang=zh_CN&scene=21#wechat_redirect) + + +## 30. 掌握常用的设计模式 + +把代码写好,还是需要熟练常用的设计模式,比如策略模式、工厂模式、模板方法模式、观察者模式等等。设计模式,是代码设计经验的总结。使用设计模式可以可重用代码、让代码更容易被他人理解、保证代码可靠性。 + +我之前写过一篇总结工作中常用设计模式的文章,写得挺不错的,大家可以看下:[实战!工作中常用到哪些设计模式](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495616&idx=1&sn=e74c733d26351eab22646e44ea74d233&chksm=cf2230e9f855b9ffe1ddb9fe15f72a273d5de02ed91cc97f3066d4162af027299718e2bf748e&token=1260947715&lang=zh_CN#rd) + +## 31. 写代码时,考虑线性安全问题 + +在**高并发**情况下,```HashMap```可能会出现死循环。因为它是非线性安全的,可以考虑使用```ConcurrentHashMap```。所以这个也尽量养成习惯,不要上来反手就是一个```new HashMap()```; + +> - Hashmap、Arraylist、LinkedList、TreeMap等都是线性不安全的; +> - Vector、Hashtable、ConcurrentHashMap等都是线性安全的 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1ba0cab945874264a8d8e87b7d7c4a1b~tplv-k3u1fbpfcp-zoom-1.image) + + +## 32.接口定义清晰易懂,命名规范。 + +我们写代码,不仅仅是为了实现当前的功能,也要有利于后面的维护。说到维护,代码不仅仅是写给自己看的,也是给别人看的。所以接口定义要清晰易懂,命名规范。 + +## 33. 接口的版本控制 + +接口要做好版本控制。就是说,请求基础报文,应该包含```version```接口版本号字段,方便未来做接口兼容。其实这个点也算接口扩展性的一个体现点吧。 + +比如客户端APP某个功能优化了,新老版本会共存,这时候我们的```version```版本号就派上用场了,对```version```做升级,做好版本控制。 + +## 34. 注意代码规范问题 + +注意一些常见的代码坏味道: +- 大量重复代码(抽公用方法,设计模式) +- 方法参数过多(可封装成一个DTO对象) +- 方法过长(抽小函数) +- 判断条件太多(优化if...else) +- 不处理没用的代码 +- 不注重代码格式 +- 避免过度设计 + +代码的坏味道,这里我都写到啦:[25种代码坏味道总结+优化示例](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490148&idx=1&sn=00a181bf74313f751b3ea15ebc303545&chksm=cf21c54df8564c5bc5b4600fce46619f175f7ae557956f449629c470a08e20580feef4ea8d53&token=162724582&lang=zh_CN&scene=21#wechat_redirect) + +## 35.保证接口正确性,其实就是保证更少的bug + +保证接口的正确性,换个角度讲,就是保证更少的bug,甚至是没有bug。所以接口开发完后,一般需要开发**自测一下**。然后的话,接口的正确还体现在,多线程并发的时候,**保证数据的正确性**,等等。比如你做一笔转账交易,扣减余额的时候,可以通过CAS乐观锁的方式保证余额扣减正确吧。 + +如果你是实现秒杀接口,得防止超卖问题吧。你可以使用Redis分布式锁防止超卖问题。使用Redis分布式锁,有几个注意要点,大家可以看下我之前这篇文章哈:[七种方案!探讨Redis分布式锁的正确使用姿势](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488142&idx=1&sn=79a304efae7a814b6f71bbbc53810c0c&chksm=cf21cda7f85644b11ff80323defb90193bc1780b45c1c6081f00da85d665fd9eb32cc934b5cf&token=162724582&lang=zh_CN&scene=21#wechat_redirect) + +## 36.学会沟通,跟前端沟通,跟产品沟通 + +我把这一点放到最后,学会沟通是非常非常重要的。比如你开发定义接口时,**一定不能上来就自己埋头把接口定义完了**,**需要跟客户端先对齐接口**。遇到一些难点时,跟技术leader对齐方案。实现需求的过程中,有什么问题,及时跟产品沟通。 + +总之就是,开发接口过程中,一定要沟通好~ + + +## 最后(求关注,别白嫖我) + +如果这篇文章对您有所帮助,或者有所启发的话,欢迎关注我的公众号:捡田螺的小男孩 + + diff --git "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207\344\272\214\357\274\232\346\211\213\346\212\212\346\211\213\346\225\231\344\275\240\345\256\236\347\216\260\344\270\200\344\270\252\345\271\266\350\241\214\350\260\203\347\224\250\346\250\241\346\235\277.md" "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207\344\272\214\357\274\232\346\211\213\346\212\212\346\211\213\346\225\231\344\275\240\345\256\236\347\216\260\344\270\200\344\270\252\345\271\266\350\241\214\350\260\203\347\224\250\346\250\241\346\235\277.md" new file mode 100644 index 0000000..762cb1b --- /dev/null +++ "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207\344\272\214\357\274\232\346\211\213\346\212\212\346\211\213\346\225\231\344\275\240\345\256\236\347\216\260\344\270\200\344\270\252\345\271\266\350\241\214\350\260\203\347\224\250\346\250\241\346\235\277.md" @@ -0,0 +1,599 @@ +## 前言 + +大家好,我是捡田螺的小男孩。 + +本文是后端思维专栏的第二篇哈。上一篇[36个设计接口的锦囊](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499388&idx=1&sn=49a22120a3238e13ad7c3d3b73d9e453&chksm=cf222155f855a8434026b2c460d963c406186578c2527ca8f2bb829bbe849d87a2392a525a9b&token=1380536362&lang=zh_CN#rd),得到非常多小伙伴的认可。 +36个设计接口的锦囊中也提到一个点:就是**使用并行调用优化接口**。所以接下来就快马加鞭,写第二篇:手把手教你写一个并行调用模板。 + +- 一个串行调用的例子(App首页信息查询) +- CompletionService实现并行调用 +- 抽取通用的并行调用方法 +- 代码思考以及设计模式应用 +- 思考总结 +- 公众号:**捡田螺的小男孩** + + +## 1. 一个串行调用的例子 + +如果让你设计一个APP首页查询的接口,它需要查用户信息、需要查```banner```信息、需要查标签信息等等。一般情况,小伙伴会实现如下: + +``` +public AppHeadInfoResponse queryAppHeadInfo(AppInfoReq req) { + //查用户信息 + UserInfoParam userInfoParam = buildUserParam(req); + UserInfoDTO userInfoDTO = userService.queryUserInfo(userInfoParam); + //查banner信息 + BannerParam bannerParam = buildBannerParam(req); + BannerDTO bannerDTO = bannerService.queryBannerInfo(bannerParam); + //查标签信息 + LabelParam labelParam = buildLabelParam(req); + LabelDTO labelDTO = labelService.queryLabelInfo(labelParam); + //组装结果 + return buildResponse(userInfoDTO,bannerDTO,labelDTO); +} +``` + +这段代码会有什么问题嘛? 其实这是一段挺正常的代码,但是这个方法实现中,查询用户、banner、标签信息,**是串行的**,如果查询用户信息```200ms```,查询banner信息```100ms```,查询标签信息```200ms```的话,耗时就是```500ms```啦。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/35fa8e071a7048d5ae7d8e3e7f339532~tplv-k3u1fbpfcp-zoom-1.image) + +其实为了优化性能,我们可以修改为**并行调用**的方式,耗时可以降为```200ms```,如下图所示: + + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e8559cfd7bb2449dbab91c0b38a3d78e~tplv-k3u1fbpfcp-zoom-1.image) + + +## 2. CompletionService实现并行调用 + +对于上面的例子,**如何实现并行调用呢?** + +有小伙伴说,可以使用```Future+Callable```实现多个任务的并行调用。但是线程池执行批量任务时,返回值用```Future的get()```获取是阻塞的,如果前一个任务执行比较耗时的话,```get()```方法会阻塞,形成排队等待的情况。 + +而```CompletionService```是对定义```ExecutorService```进行了包装,可以一边生成任务,一边获取任务的返回值。让这两件事分开执行,任务之间不会互相阻塞,可以获取最先完成的任务结果。 + + +> ```CompletionService```的实现原理比较简单,底层通过FutureTask+阻塞队列,实现了任务先完成的话,可优先获取到。也就是说任务执行结果按照完成的先后顺序来排序,先完成可以优化获取到。内部有一个先进先出的阻塞队列,用于保存已经执行完成的Future,你调用```CompletionService```的poll或take方法即可获取到一个已经执行完成的Future,进而通过调用Future接口实现类的```get```方法获取最终的结果。 + +![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/10e375f58f5d490193888b0c5375e0f0~tplv-k3u1fbpfcp-zoom-1.image) + + +接下来,我们来看下,如何用```CompletionService```,实现并行查询APP首页信息哈。思考步骤如下: + +1. 我们先把查询用户信息的任务,放到线程池,如下: +``` +ExecutorService executor = Executors.newFixedThreadPool(10); +//查询用户信息 +CompletionService userDTOCompletionService = new ExecutorCompletionService(executor); +Callable userInfoDTOCallableTask = () -> { + UserInfoParam userInfoParam = buildUserParam(req); + return userService.queryUserInfo(userInfoParam); + }; +userDTOCompletionService.submit(userInfoDTOCallableTask); +``` + +2. 但是如果想把查询```banner```信息的任务,也放到这个线程池的话,发现不好放了,因为返回类型不一样,一个是```UserInfoDTO```,另外一个是```BannerDTO```。那这时候,我们是不是把泛型声明为Object即可,因为所有对象都是继承于Object的?如下: + +``` +ExecutorService executor = Executors.newFixedThreadPool(10); +//查询用户信息 +CompletionService baseDTOCompletionService = new ExecutorCompletionService(executor); +Callable userInfoDTOCallableTask = () -> { + UserInfoParam userInfoParam = buildUserParam(req); + return userService.queryUserInfo(userInfoParam); +}; +//banner信息任务 +Callable bannerDTOCallableTask = () -> { + BannerParam bannerParam = buildBannerParam(req); + return bannerService.queryBannerInfo(bannerParam); +}; + +//提交用户信息任务 +baseDTOCompletionService.submit(userInfoDTOCallableTask); +//提交banner信息任务 +baseDTOCompletionService.submit(bannerDTOCallableTask); +``` +3. 这里会有个问题,就是获取**返回值的时候**,我们不知道哪个```Object```是用户信息的DTO,哪个是```BannerDTO```?**怎么办呢?**这时候,我们可以在参数里面做个扩展嘛,即参数声明为一个基础对象BaseRspDTO,再搞个泛型放Object数据的,然后基础对象BaseRspDTO有个区分是UserDTO还是BannerDTO的**唯一标记属性key**。代码如下: + +``` +public class BaseRspDTO { + + //区分是DTO返回的唯一标记,比如是UserInfoDTO还是BannerDTO + private String key; + //返回的data + private T data; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} + +//并行查询App首页信息 +public AppHeadInfoResponse parallelQueryAppHeadPageInfo(AppInfoReq req) { + + long beginTime = System.currentTimeMillis(); + System.out.println("开始并行查询app首页信息,开始时间:" + beginTime); + + ExecutorService executor = Executors.newFixedThreadPool(10); + CompletionService> baseDTOCompletionService = new ExecutorCompletionService>(executor); + + //查询用户信息任务 + Callable> userInfoDTOCallableTask = () -> { + UserInfoParam userInfoParam = buildUserParam(req); + UserInfoDTO userInfoDTO = userService.queryUserInfo(userInfoParam); + BaseRspDTO userBaseRspDTO = new BaseRspDTO(); + userBaseRspDTO.setKey("userInfoDTO"); + userBaseRspDTO.setData(userInfoDTO); + return userBaseRspDTO; + }; + + //banner信息查询任务 + Callable> bannerDTOCallableTask = () -> { + BannerParam bannerParam = buildBannerParam(req); + BannerDTO bannerDTO = bannerService.queryBannerInfo(bannerParam); + BaseRspDTO bannerBaseRspDTO = new BaseRspDTO(); + bannerBaseRspDTO.setKey("bannerDTO"); + bannerBaseRspDTO.setData(bannerDTO); + return bannerBaseRspDTO; + }; + + //label信息查询任务 + Callable> labelDTODTOCallableTask = () -> { + LabelParam labelParam = buildLabelParam(req); + LabelDTO labelDTO = labelService.queryLabelInfo(labelParam); + BaseRspDTO labelBaseRspDTO = new BaseRspDTO(); + labelBaseRspDTO.setKey("labelDTO"); + labelBaseRspDTO.setData(labelDTO); + return labelBaseRspDTO; + }; + + //提交用户信息任务 + baseDTOCompletionService.submit(userInfoDTOCallableTask); + //提交banner信息任务 + baseDTOCompletionService.submit(bannerDTOCallableTask); + //提交label信息任务 + baseDTOCompletionService.submit(labelDTODTOCallableTask); + + UserInfoDTO userInfoDTO = null; + BannerDTO bannerDTO = null; + LabelDTO labelDTO = null; + + try { + //因为提交了3个任务,所以获取结果次数是3 + for (int i = 0; i < 3; i++) { + Future> baseRspDTOFuture = baseDTOCompletionService.poll(1, TimeUnit.SECONDS); + BaseRspDTO baseRspDTO = baseRspDTOFuture.get(); + if ("userInfoDTO".equals(baseRspDTO.getKey())) { + userInfoDTO = (UserInfoDTO) baseRspDTO.getData(); + } else if ("bannerDTO".equals(baseRspDTO.getKey())) { + bannerDTO = (BannerDTO) baseRspDTO.getData(); + } else if ("labelDTO".equals(baseRspDTO.getKey())) { + labelDTO = (LabelDTO) baseRspDTO.getData(); + } + } + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + System.out.println("结束并行查询app首页信息,总耗时:" + (System.currentTimeMillis() - beginTime)); + return buildResponse(userInfoDTO, bannerDTO, labelDTO); +} +``` + +到这里为止,一个基于```CompletionService```实现并行调用的例子已经实现啦。是不是很开心,哈哈。 + +## 3. 抽取通用的并行调用方法 + +我们回过来观察下第2小节,查询app首页信息的demo:```CompletionService```实现了并行调用。大家有没有什么其他想法呢?比如,假设别的业务场景,也想通过并行调用优化,那是不是也得搞一套类似第2小节的代码。所以,**我们是不是可以抽取一个通用的并行方法,让别的场景也可以用,对吧?这就是后端思维啦**! + +基于第2小节的代码,我们如何抽取通用并行调用方法呢。 + +首先,这个通用的并行调用方法,**不能跟业务相关的属性挂钩**,对吧,所以方法的入参应该有哪些呢? + +> 方法的入参,可以有```Callable```对吧。因为并行,肯定是多个Callable任务的。所以,入参应该是一个```Callable```的数组。再然后,基于上面的APP首页查询的例子,```Callable```里面得带```BaseRspDTO```泛型,对吧?因此入参就是```List>> list```。 + +那并行调用的出参呢? 你有多个```Callable```的任务,是不是得有多个对应的返回,因此,你的出参可以是```List>```。我们抽取的通用并行调用模板,就可以写成酱紫: + +``` + public List> executeTask(List>> taskList) { + + List> resultList = new ArrayList<>(); + //校验参数 + if (taskList == null || taskList.size() == 0) { + return resultList; + } + + ExecutorService executor = Executors.newFixedThreadPool(10); + CompletionService> baseDTOCompletionService = new ExecutorCompletionService>(executor); + //提交任务 + for (Callable> task : taskList) { + baseDTOCompletionService.submit(task); + } + + try { + //遍历获取结果 + for (int i = 0; i < taskList.size(); i++) { + Future> baseRspDTOFuture = baseDTOCompletionService.poll(2, TimeUnit.SECONDS); + resultList.add(baseRspDTOFuture.get()); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + return resultList; + } +``` +既然我们是抽取通用的并行调用方法,那以上的方法是否还有**哪些地方需要改进**的呢? + +- 第一个可以优化的地方,就是```executor线程池```,比如有些业务场景想用```A线程池```,有些业务想用```B线程池```,那么,这个方法,就不通用啦,对吧。我们可以把线程池以参数的实行提供出来,给调用方自己控制。 +- 第二个可以优化的地方,就是```CompletionService```的```poll```方法获取时,超时时间是写死的。因为不同业务场景,超时时间可能不一样。所以,超时时间也是可以以参数形式放出来,给调用方自己控制。 + +我们再次优化一下这个通用的并行调用模板,代码如下: +``` +public List> executeTask(List>> taskList, long timeOut, ExecutorService executor) { + + List> resultList = new ArrayList<>(); + //校验参数 + if (taskList == null || taskList.size() == 0) { + return resultList; + } + if (executor == null) { + return resultList; + } + if (timeOut <= 0) { + return resultList; + } + + //提交任务 + CompletionService> baseDTOCompletionService = new ExecutorCompletionService>(executor); + for (Callable> task : taskList) { + baseDTOCompletionService.submit(task); + } + + try { + //遍历获取结果 + for (int i = 0; i < taskList.size(); i++) { + Future> baseRspDTOFuture = baseDTOCompletionService.poll(timeOut, TimeUnit.SECONDS); + resultList.add(baseRspDTOFuture.get()); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + + return resultList; +} +``` + +以后别的场景也需要用到并行调用的话,直接调用你的这个方法即可,是不是有点小小的成就感啦,哈哈。 + +## 4. 代码思考以及设计模式应用 + +我们把抽取的那个公用的并行调用方法,应用到```App首页信息查询```的例子,代码如下: + +``` +public AppHeadInfoResponse parallelQueryAppHeadPageInfo1(AppInfoReq req) { + + long beginTime = System.currentTimeMillis(); + System.out.println("开始并行查询app首页信息,开始时间:" + beginTime); + //用户信息查询任务 + Callable> userInfoDTOCallableTask = () -> { + UserInfoParam userInfoParam = buildUserParam(req); + UserInfoDTO userInfoDTO = userService.queryUserInfo(userInfoParam); + BaseRspDTO userBaseRspDTO = new BaseRspDTO(); + userBaseRspDTO.setKey("userInfoDTO"); + userBaseRspDTO.setData(userInfoDTO); + return userBaseRspDTO; + }; + + //banner信息查询任务 + Callable> bannerDTOCallableTask = () -> { + BannerParam bannerParam = buildBannerParam(req); + BannerDTO bannerDTO = bannerService.queryBannerInfo(bannerParam); + BaseRspDTO bannerBaseRspDTO = new BaseRspDTO(); + bannerBaseRspDTO.setKey("bannerDTO"); + bannerBaseRspDTO.setData(bannerDTO); + return bannerBaseRspDTO; + }; + + //label信息查询任务 + Callable> labelDTODTOCallableTask = () -> { + LabelParam labelParam = buildLabelParam(req); + LabelDTO labelDTO = labelService.queryLabelInfo(labelParam); + BaseRspDTO labelBaseRspDTO = new BaseRspDTO(); + labelBaseRspDTO.setKey("labelDTO"); + labelBaseRspDTO.setData(labelDTO); + return labelBaseRspDTO; + }; + + List>> taskList = new ArrayList<>(); + taskList.add(userInfoDTOCallableTask); + taskList.add(bannerDTOCallableTask); + taskList.add(labelDTODTOCallableTask); + ExecutorService executor = Executors.newFixedThreadPool(10); + List> resultList = parallelInvokeCommonService.executeTask(taskList, 3, executor); + if (resultList == null || resultList.size() == 0) { + return new AppHeadInfoResponse(); + } + + UserInfoDTO userInfoDTO = null; + BannerDTO bannerDTO = null; + LabelDTO labelDTO = null; + + //遍历结果 + for (int i = 0; i < resultList.size(); i++) { + BaseRspDTO baseRspDTO = resultList.get(i); + if ("userInfoDTO".equals(baseRspDTO.getKey())) { + userInfoDTO = (UserInfoDTO) baseRspDTO.getData(); + } else if ("bannerDTO".equals(baseRspDTO.getKey())) { + bannerDTO = (BannerDTO) baseRspDTO.getData(); + } else if ("labelDTO".equals(baseRspDTO.getKey())) { + labelDTO = (LabelDTO) baseRspDTO.getData(); + } + } + + System.out.println("结束并行查询app首页信息,总耗时:" + (System.currentTimeMillis() - beginTime)); + return buildResponse(userInfoDTO, bannerDTO, labelDTO); + } + +``` + +基于以上代码,小伙伴们,是否还有其他方面的优化想法呢? 比如这几个```Callable```查询任务,我们是不是也可以抽取一下?让代码更加简洁。 + +> 二话不说,现在我们直接建一个```BaseTaskCommand```类,实现```Callable```接口,把查询用户信息、查询banner信息、label标签信息的查询任务放进去。 + +代码如下: + +``` +public class BaseTaskCommand implements Callable> { + + private String key; + private AppInfoReq req; + private IUserService userService; + private IBannerService bannerService; + private ILabelService labelService; + + public BaseTaskCommand(String key, AppInfoReq req, IUserService userService, IBannerService bannerService, ILabelService labelService) { + this.key = key; + this.req = req; + this.userService = userService; + this.bannerService = bannerService; + this.labelService = labelService; + } + + @Override + public BaseRspDTO call() throws Exception { + + if ("userInfoDTO".equals(key)) { + UserInfoParam userInfoParam = buildUserParam(req); + UserInfoDTO userInfoDTO = userService.queryUserInfo(userInfoParam); + BaseRspDTO userBaseRspDTO = new BaseRspDTO(); + userBaseRspDTO.setKey("userInfoDTO"); + userBaseRspDTO.setData(userInfoDTO); + return userBaseRspDTO; + } else if ("bannerDTO".equals(key)) { + BannerParam bannerParam = buildBannerParam(req); + BannerDTO bannerDTO = bannerService.queryBannerInfo(bannerParam); + BaseRspDTO bannerBaseRspDTO = new BaseRspDTO(); + bannerBaseRspDTO.setKey("bannerDTO"); + bannerBaseRspDTO.setData(bannerDTO); + return bannerBaseRspDTO; + } else if ("labelDTO".equals(key)) { + LabelParam labelParam = buildLabelParam(req); + LabelDTO labelDTO = labelService.queryLabelInfo(labelParam); + BaseRspDTO labelBaseRspDTO = new BaseRspDTO(); + labelBaseRspDTO.setKey("labelDTO"); + labelBaseRspDTO.setData(labelDTO); + return labelBaseRspDTO; + } + + return null; + } + + + private UserInfoParam buildUserParam(AppInfoReq req) { + return new UserInfoParam(); + } + + private BannerParam buildBannerParam(AppInfoReq req) { + return new BannerParam(); + } + + private LabelParam buildLabelParam(AppInfoReq req) { + return new LabelParam(); + } +} +``` +以上这块代码,构造函数还是有**比较多的参数**,并且```call()```方法中,有多个```if...else...```,如果新增一个分支(**比如查询浮层信息**),那又得在```call```方法里修改了,并且**BaseTaskCommand的构造器也要修改了**。 + +> 大家是否有印象,多程序中出现多个if...else...时,我们就可以考虑使用**策略模式+工厂模式**优化。 + +我们声明多个策略实现类,如下: + +``` + +public interface IBaseTask { + + //返回每个策略类的key,如 + String getTaskType(); + + BaseRspDTO execute(AppInfoReq req); + +} + +//用户信息策略类 +@Service +public class UserInfoStrategyTask implements IBaseTask { + + @Autowired + private IUserService userService; + + @Override + public String getTaskType() { + return "userInfoDTO"; + } + + @Override + public BaseRspDTO execute(AppInfoReq req) { + UserInfoParam userInfoParam = userService.buildUserParam(req); + UserInfoDTO userInfoDTO = userService.queryUserInfo(userInfoParam); + BaseRspDTO userBaseRspDTO = new BaseRspDTO(); + userBaseRspDTO.setKey(getTaskType()); + userBaseRspDTO.setData(userBaseRspDTO); + return userBaseRspDTO; + } +} + +/** + * banner信息策略实现类 + **/ +@Service +public class BannerStrategyTask implements IBaseTask { + + @Autowired + private IBannerService bannerService; + + @Override + public String getTaskType() { + return "bannerDTO"; + } + + @Override + public BaseRspDTO execute(AppInfoReq req) { + BannerParam bannerParam = bannerService.buildBannerParam(req); + BannerDTO bannerDTO = bannerService.queryBannerInfo(bannerParam); + BaseRspDTO bannerBaseRspDTO = new BaseRspDTO(); + bannerBaseRspDTO.setKey(getTaskType()); + bannerBaseRspDTO.setData(bannerDTO); + return bannerBaseRspDTO; + } +} + +... +``` +然后这几个策略实现类,怎么交给```spring```管理呢? 我们可以实现```ApplicationContextAware```接口,把策略的实现类注入到一个map,然后根据请求方不同的策略请求类型(即DTO的类型),去实现不同的策略类调用。其实这类似于工厂模式的思想。代码如下: + +``` +/** + * 策略工厂类 + **/ +@Component +public class TaskStrategyFactory implements ApplicationContextAware { + + private Map map = new ConcurrentHashMap<>(); + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + Map tempMap = applicationContext.getBeansOfType(IBaseTask.class); + tempMap.values().forEach(iBaseTask -> { + map.put(iBaseTask.getTaskType(), iBaseTask); + }); + } + + public BaseRspDTO executeTask(String key, AppInfoReq req) { + IBaseTask baseTask = map.get(key); + if (baseTask != null) { + System.out.println("工厂策略实现类执行"); + return baseTask.execute(req); + } + return null; + } +} +``` + +有了策略工厂类```TaskStrategyFactory```,我们再回来优化下```BaseTaskCommand```类的代码。它的构造器已经不需要多个```IUserService userService, IBannerService bannerService, ILabelService labelService```啦,只需要策略工厂类```TaskStrategyFactory```即可。同时策略也不需要多个```if...else...```判断了,用策略工厂类```TaskStrategyFactory```代替即可。优化后的代码如下: + +``` +public class BaseTaskCommand implements Callable> { + + private String key; + private AppInfoReq req; + private TaskStrategyFactory taskStrategyFactory; + + public BaseTaskCommand(String key, AppInfoReq req, TaskStrategyFactory taskStrategyFactory) { + this.key = key; + this.req = req; + this.taskStrategyFactory = taskStrategyFactory; + } + + @Override + public BaseRspDTO call() throws Exception { + return taskStrategyFactory.executeTask(key, req); + } +} +``` + +因此整个```app首页信息并行```查询,就可以优化成这样啦,如下: + +``` +public AppHeadInfoResponse parallelQueryAppHeadPageInfo2(AppInfoReq req) { + long beginTime = System.currentTimeMillis(); + System.out.println("开始并行查询app首页信息(最终版本),开始时间:" + beginTime); + List>> taskList = new ArrayList<>(); + //用户信息查询任务 + taskList.add(new BaseTaskCommand("userInfoDTO", req, taskStrategyFactory)); + //banner查询任务 + taskList.add(new BaseTaskCommand("bannerDTO", req, taskStrategyFactory)); + //标签查询任务 + taskList.add(new BaseTaskCommand("labelDTO", req, taskStrategyFactory)); + + ExecutorService executor = Executors.newFixedThreadPool(10); + List> resultList = parallelInvokeCommonService.executeTask(taskList, 3, executor); + + if (resultList == null || resultList.size() == 0) { + return new AppHeadInfoResponse(); + } + + UserInfoDTO userInfoDTO = null; + BannerDTO bannerDTO = null; + LabelDTO labelDTO = null; + + for (BaseRspDTO baseRspDTO : resultList) { + if ("userInfoDTO".equals(baseRspDTO.getKey())) { + userInfoDTO = (UserInfoDTO) baseRspDTO.getData(); + } else if ("bannerDTO".equals(baseRspDTO.getKey())) { + bannerDTO = (BannerDTO) baseRspDTO.getData(); + } else if ("labelDTO".equals(baseRspDTO.getKey())) { + labelDTO = (LabelDTO) baseRspDTO.getData(); + } + } + + System.out.println("结束并行查询app首页信息(最终版本),总耗时:" + (System.currentTimeMillis() - beginTime)); + return buildResponse(userInfoDTO, bannerDTO, labelDTO); + } +``` + + +## 5. 思考总结 + +以上代码整体优化下来,已经很简洁啦。那还有没有别的优化思路呢。 +> 其实还是有的,比如,把唯一标记的```key```定义为枚举,而不是写死的字符串```"userInfoDTO"、"bannerDTO","labelDTO"```。还有,除了```CompletionService```,有些小伙伴喜欢用```CompletableFuture```实行并行调用。 + +本文大家学到了哪些知识呢? +1. 如何优化接口性能?某些场景下,可以使用并行调用代替串行。 +2. 如何实现并行调用呢? 可以使用```CompletionService```。 +3. 学到的后端思维是? 日常开发中,要学会抽取通用的方法、或者工具。 +4. 策略模式和工厂模式的应用 + +本文的话,设计模式这块还不是很详细,然后下一篇,给大家讲讲,我是如何在现有代码基础上,抽取设计模式的哈。然后,如果大家需要本文的完整代码的话,可以关注我的公众号:**捡田螺的小男孩**,里面有我的联系方式哈。 + + + + + From e8ce3c8cd9f26c0383fdab490c3f7557ae38aeb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 17 Jul 2022 20:56:21 +0800 Subject: [PATCH 04/47] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 214c8ab..8787f10 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,4 @@ ## 涓鍒嗕篃鏄埍锛岃阿璋㈠ぇ瀹剁殑鏀寔鍝垀 ![](https://user-gold-cdn.xitu.io/2020/7/15/1735311bf66cecd8?w=430&h=580&f=jpeg&s=35456) +![image](https://user-images.githubusercontent.com/20244922/179399354-8a9fd2a8-42ba-4303-9ce5-04891e899e6d.png) From 17f5ef1c1964e24a4029654f3e4e0af261dd2a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 17 Jul 2022 20:56:43 +0800 Subject: [PATCH 05/47] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 8787f10..1c37b37 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,4 @@ - 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紝涓璧峰涔犺璁哄搱~~ -## 涓鍒嗕篃鏄埍锛岃阿璋㈠ぇ瀹剁殑鏀寔鍝垀 -![](https://user-gold-cdn.xitu.io/2020/7/15/1735311bf66cecd8?w=430&h=580&f=jpeg&s=35456) - ![image](https://user-images.githubusercontent.com/20244922/179399354-8a9fd2a8-42ba-4303-9ce5-04891e899e6d.png) From cce5493aedfd9f6942ddefdd7a7eeecf3e8dc4dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 17 Jul 2022 20:57:25 +0800 Subject: [PATCH 06/47] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c37b37..6290566 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ 寰俊鎼滐細鎹$敯铻虹殑灏忕敺瀛 -- 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紝涓璧峰涔犺璁哄搱~~ +- 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紙鎵弿涓涓嬩簩缁寸爜锛岃繕鏈夊緢澶氬緢澶氬共璐ф枃绔狅級锛屼竴璧峰涔犺璁哄搱~~ ![image](https://user-images.githubusercontent.com/20244922/179399354-8a9fd2a8-42ba-4303-9ce5-04891e899e6d.png) From 3f3cc5fb02dfa5c91d72868f73970d7e02f75ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 17 Jul 2022 20:57:38 +0800 Subject: [PATCH 07/47] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6290566..508f437 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ 寰俊鎼滐細鎹$敯铻虹殑灏忕敺瀛 -- 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紙鎵弿涓涓嬩簩缁寸爜锛岃繕鏈夊緢澶氬緢澶氬共璐ф枃绔狅級锛屼竴璧峰涔犺璁哄搱~~ +- 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紙鎵弿涓嬮潰浜岀淮鐮侊紝杩樻湁寰堝寰堝骞茶揣鏂囩珷锛夛紝涓璧峰涔犺璁哄搱~~ ![image](https://user-images.githubusercontent.com/20244922/179399354-8a9fd2a8-42ba-4303-9ce5-04891e899e6d.png) From 59a6aed48a8c6f9e86f13e5551befc21628f22f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 07:24:54 +0800 Subject: [PATCH 08/47] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 508f437..7327214 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,12 @@ 鏁寸悊涓浠借秴绾ц缁嗙殑Java闈㈣瘯棰+鍚庣鍩虹+鏃ュ父宸ヤ綔鎬荤粨锛屽仛鏈鏆栧績鐨勭敺瀛╁瓙锛屽悗闈細鎱㈡參鎶婄瓟妗堝畬鍠勶紝甯屾湜澶у鎵惧埌鐞嗘兂offer +猸 鐐瑰彸涓婅缁欎竴涓 Star锛岄紦鍔辨妧鏈汉杈撳嚭鏇村骞茶揣锛岀埍浜 锛 + +浣滆呮崱鐢拌灪鐨勫皬鐢峰锛屾氮杩硅繃鍑犲澶у巶锛屾帢閲戜紭绉鍒涗綔鑰咃紝CSDN鍗氫富銆 + +- 鍘熷垱绮惧搧100绡(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497536&idx=1&sn=3ac9934f607d79e51457fd01f4c8a4ef&chksm=cf222869f855a17fc30c744e5b7ccdeca407f3b7ddcca46bae1c93b1436ffc6fe417ccb8aef4&token=1990771297&lang=zh_CN#rd) + + ## 涓汉鍏紬鍙 寰俊鎼滐細鎹$敯铻虹殑灏忕敺瀛 From 3c57038967fffc6b22563b6017a71c94ab89ff48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 07:46:54 +0800 Subject: [PATCH 09/47] Add files via upload MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 鍚庣鎬濈淮绡 --- .../README.md" | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 "\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" diff --git "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" new file mode 100644 index 0000000..c23117d --- /dev/null +++ "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" @@ -0,0 +1,9 @@ +## 后端思维篇(持续更新中) + +公众号:捡田螺的小男孩 + +- [后端思想篇:设计好接口的36个锦囊!](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499388&idx=1&sn=49a22120a3238e13ad7c3d3b73d9e453&chksm=cf222155f855a8434026b2c460d963c406186578c2527ca8f2bb829bbe849d87a2392a525a9b&scene=178&cur_album_id=2396778860463161350#rd) +- [后端思维篇:手把手教你写一个并行调用模板](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499504&idx=1&sn=bb62226e6cffeb1859efb0100c796050&chksm=cf2221d9f855a8cf23f75cb51c1a407578fb0f279e96ddae74b5b8c84f2f5dc71762425b17cb&scene=178&cur_album_id=2396778860463161350#rd) +- [后端思维篇:如何应用设计模式优化代码](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499524&idx=1&sn=cb4cc48a3e8d9a54b0ebc4c7ad517f14&chksm=cf22202df855a93b37327856ee88b0bf5f6ed7da67964438fc2cf747666260d5026dd62d4a17&scene=178&cur_album_id=2396778860463161350#rd) +- [后端思维篇:统一参数校验、异常处理、结果返回](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499708&idx=1&sn=808979c495acd9344732d147c0ad40d3&chksm=cf222095f855a983f31d5f6abf401fa3b5967f8839c6775d35cefc5cc6244fb4135563ff1090&scene=178&cur_album_id=2396778860463161350#rd) +- [后端思维篇:如何抽一个观察者模板](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500159&idx=1&sn=a5328372e580b22c939a5b3084aef164&chksm=cf221e56f85597401e8c99b8dd1bc1af97fcf69207ceaa04c5c26e028ac47d1658b79ae32291&scene=178&cur_album_id=2396778860463161350#rd) From be59b4dc80220143cd5e2d17b31713149ddd9679 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 08:56:53 +0800 Subject: [PATCH 10/47] =?UTF-8?q?Java=E5=9F=BA=E7=A1=80=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" diff --git "a/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" "b/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" new file mode 100644 index 0000000..0a1609f --- /dev/null +++ "b/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" @@ -0,0 +1,21 @@ +## Java鍩虹绡囷紙鎸佺画鏇存柊涓級 +鈥 +鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 +鈥 +- [涓鏂囪鎳傜嚎绋嬫睜鐨勫伐浣滃師鐞嗭紙鏁呬簨鐧借瘽鏂囷級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488078&idx=1&sn=0a7cef472002f6582fd2354fba83706a&chksm=cf21cd67f85644716263c3a80cead9b7bb36d9677f6f8b06d0602077ece70fcafa9d20c1cffb&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Synchronized瑙f瀽鈥斺斿鏋滀綘鎰挎剰涓灞備竴灞傚墺寮鎴戠殑蹇僝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487942&idx=1&sn=bbc68d1b9da23bf6474378e310b1ef1b&chksm=cf21ceeff85647f9ad7a08226849fcba3f9481387d13b17a5787fb94027647de81c349f9e390&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [寮傛缂栫▼鍒╁櫒锛欳ompletableFuture璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490456&idx=1&sn=95836324db57673a4d7aea4fb233c0d2&chksm=cf21c4b1f8564da72dc7b39279362bcf965b1374540f3b339413d138599f7de59a5f977e3b0e&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java鏃ュ父寮鍙戠殑21涓潙锛屼綘韪╄繃鍑犱釜锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488115&idx=1&sn=bdd4a4ca36bc7ea902106d058e8537fb&chksm=cf21cd5af856444cb36af600705615454b0aaa2b289b97ddb52d594556ac07a1915b73ecce19&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓浠絁ava绋嬪簭鍛樼殑鐝嶈棌涔﹀崟锛岃鎮ㄦ敞鎰忔煡鏀禲(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488066&idx=1&sn=44b5a90be1b69d7938dbcf516d85f041&chksm=cf21cd6bf856447d869278386250f59a926881375df848e54f86a21682bdab50f9e09ca56fbd&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭锛欽DK 5-15閮芥湁鍝簺缁忓吀鏂扮壒鎬(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488058&idx=1&sn=aab4d0dc9020cb62710086474ca90baf&chksm=cf21cd13f8564405040593daa45c62aec218e13f5ff42d679c59f768dd4fcc53ddcf34e0a454&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囧熀纭锛欸it 鍛戒护鍏ㄦ柟浣嶅涔燷(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488013&idx=1&sn=7011a51a347e3da2cf8f8540b4d9a5d6&chksm=cf21cd24f8564432d74bc13551ebdeae71a71ea31e339c7a8f1f42f181078b5192475d598626&token=162724582&ang=zh_CN&scene=21#wechat_redirect) +- [缁欎綘鐨凧ava绋嬪簭鎷嶄釜鐗囧瓙鍚э細jstack鍛戒护瑙f瀽](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487990&idx=1&sn=b5b3c565392f39e5ac517696603b2ed9&chksm=cf21cedff85647c960407dce77fe04d08e51f8c7332310ccacd925be5567c187aa761dd1d1c8&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭缁撴瀯鍥綸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487985&idx=1&sn=ead28c6c8d81b98e59603b848d250b30&chksm=cf21ced8f85647ce336f19016c7ff1936b21c81066815c8f28b830098716111548edb9767b21&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囷細搴忓垪鍖栧叏鏂逛綅瑙f瀽](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487980&idx=1&sn=2a9ce519f87a1ffe1511022e6724208e&chksm=cf21cec5f85647d357c79860171fc1799ef3c44a2bdd0716e8437e31708a17d9000b4224bd36&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [浼樺寲if-else浠g爜鐨勫叓绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487970&idx=1&sn=c296bb03419adf93955c6d0f27e56b29&chksm=cf21cecbf85647dd0ef5160559bc0d524a4be004a28bc5d2770a43409e3b090123c0930cf047&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭锛氭硾鍨嬭В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487964&idx=1&sn=24d7228cc10afc98c52dbf35da61a7b9&chksm=cf21cef5f85647e3d2b3f1e126cdc46d9e889d2e30c09716e0aea016beee3ca6d4c321cf60ae&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭锛氬唴閮ㄧ被瑙f瀽](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487963&idx=1&sn=a0b49cd49a3dd51b6736c9ffa0a5997a&chksm=cf21cef2f85647e49a4bdb43f27583f03fb9ec4719767512dc084edd05675599c3bec44251fb&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鑰佹槸閬囧埌涔辩爜闂锛氬畠鏄浣曚骇鐢熺殑锛屽張濡備綍瑙e喅鍛紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487962&idx=1&sn=7424e843c80b228283fc08d4d24cc4bb&chksm=cf21cef3f85647e5a9c92d280624ad2564e885561a8b64cbf6722459f7c13da7421765321aa9&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [璋堣皥Java鍙嶅皠锛氫粠鍏ラ棬鍒板疄璺碉紝鍐嶅埌鍘熺悊](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487959&idx=1&sn=778114d611f18b0f307a3f3ab6cd9117&chksm=cf21cefef85647e84b77c0e46620e91cf5ff079785b58a7dc66e5ed7419e21e0da9180699617&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囩殑涓浜涙祦绋嬪浘](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487946&idx=1&sn=57a86e1d2fe1a9ecf00594a0bb6baf5f&chksm=cf21cee3f85647f5cf2ba728cc0838923140130a18ad117e248cf9843460614fc855d556968a&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囷細鏌ョ湅鏃ュ織甯哥敤鐨刲inux鍛戒护](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487954&idx=1&sn=6c04ff4edfcfea52a82795bcb9ed8efd&chksm=cf21cefbf85647ed8df72a23307315be5d1b3d4974c128f111bfdaa84da37cf7b49ff65c1112&token=162724582&lang=zh_CN&scene=21#wechat_redirect) \ No newline at end of file From ea08f142d10bf19d867d95e10e45fbcc5e188d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 09:13:07 +0800 Subject: [PATCH 11/47] =?UTF-8?q?=E4=B9=A6=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 "Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" diff --git "a/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" "b/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" new file mode 100644 index 0000000..d01ff96 --- /dev/null +++ "b/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" @@ -0,0 +1,5 @@ +## Java鍩虹绡囷紙鎸佺画鏇存柊涓級 +鈥 +鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 +鈥 +- [涓浠絁ava绋嬪簭鍛樼殑鐝嶈棌涔﹀崟锛岃鎮ㄦ敞鎰忔煡鏀禲(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488066&idx=1&sn=44b5a90be1b69d7938dbcf516d85f041&chksm=cf21cd6bf856447d869278386250f59a926881375df848e54f86a21682bdab50f9e09ca56fbd&token=162724582&lang=zh_CN&scene=21#wechat_redirect) From 307e6e9f4e45cc79468ee1b93b7effda87411a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 09:13:40 +0800 Subject: [PATCH 12/47] Update README.MD --- .../README.MD" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" "b/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" index d01ff96..5ee6e33 100644 --- "a/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" +++ "b/Java\347\250\213\345\272\217\345\221\230\351\234\200\350\246\201\347\234\213\345\223\252\344\272\233\344\271\246/README.MD" @@ -1,4 +1,4 @@ -## Java鍩虹绡囷紙鎸佺画鏇存柊涓級 +## Java绋嬪簭鍛樹功鍗曪紙鎸佺画鏇存柊涓級 鈥 鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 鈥 From 4e853267e0bec5586cf9fb66d8615bc2bfd854b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 09:38:47 +0800 Subject: [PATCH 13/47] =?UTF-8?q?=E9=9D=A2=E8=AF=95=E9=A2=98=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 "Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" diff --git "a/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" new file mode 100644 index 0000000..78fbb48 --- /dev/null +++ "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" @@ -0,0 +1,31 @@ +## 1. 闈㈣瘯鐪熼 + +鍏虫敞鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 +鈥 +- [oppo鍚庣16杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498750&idx=1&sn=19fe8b4fff28fe81db14e733053bbc74&chksm=cf2224d7f855adc1d0984980a4e3de31fe33329164a472ca8d8255a8a80b69b2e23850811323&token=2001057130&lang=zh_CN#rd) +- [灏忓巶鍚庣鍗佽繛闂紙闄勭瓟妗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498316&idx=1&sn=7749b78293b7b2af51eda99844e08a56&chksm=cf222565f855ac7324232e2af459f8b6e6eb5fd5b272c2b29bda08cc579421b6704a0de94b2e&token=2001057130&lang=zh_CN#rd) +- [鑵捐浜戝悗绔15杩為棶锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498171&idx=1&sn=f5a7ec25a569822be0f73fbcd413e8ba&chksm=cf222692f855af84fba419166fcd4235c0e78af3a2e1ec4c723a4efb1bd1ad6f8a5b9404c599&token=2001057130&lang=zh_CN#rd) +- [绀炬嫑鍚庣21杩為棶锛堜笁骞村伐浣滅粡楠屼竴闈級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498084&idx=1&sn=96c8148cfeeeb16668ed9e03fa9131cc&chksm=cf22264df855af5b6e81b93738cca28989226a53ec702fcfaa0cc5004dded4208c5ee5ea844a&token=2001057130&lang=zh_CN#rd) +- [涓浠界儹涔庝箮鐨勫瓧鑺傞潰璇曠湡棰榏(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497742&idx=1&sn=18765e7356f446a7f2521f45b467d5d3&chksm=cf222727f855ae31dd2029e3219814211336c41d9228d271a583d3691ddadca586529aca9302&token=2001057130&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳櫨鐨湇鍔$15杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497256&idx=1&sn=3b799c2d514aa25e85a6faa60d639a0b&chksm=cf222901f855a017b73356b99b830b8800a7a9172fab891c5759d8dd69a270872ea9480c0b7c&token=2001057130&lang=zh_CN#rd) +- [瀹囧畽鏉′竴闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495342&idx=1&sn=54e1c0c16a6467001524c34818025331&chksm=cf223187f855b89140db5ca429e6efc19d0111abf7f36b78a0ecd73b00fded1ff1e7ba32a6f1&token=2001057130&lang=zh_CN#rd) +- [铓傝殎閲戞湇涓闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493270&idx=1&sn=1c78a81d6e1bd0f0fd947fe8c3a33e32&chksm=cf2239bff855b0a9627855f20a17799e0506eb7548a409bfa0ee0450328d7519ec70f7b962cc&token=2001057130&lang=zh_CN#rd) +鈥 +## 2. 蹇呰冪粡鍏搁潰璇曢 +鈥 +- [Redis涓讳粠銆佸摠鍏点 Cluster闆嗙兢涓閿呯锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498254&idx=1&sn=6489360c3b226df9811e66cb40ec7656&chksm=cf222527f855ac3112628bcec7730064fee3fdbe869fbd0a7410c22766a0c036a7e5c1a69fa0&token=2001057130&lang=zh_CN#rd) +- [鎴戜滑涓轰粈涔堣鍒嗗簱鍒嗚〃锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498625&idx=1&sn=0d7bd9d1b46eeff4c715a6761355e9b0&chksm=cf2224a8f855adbea8931c8e011711f6c70cffeef8ddf8b87729c710eacef11b46eef80fda36&token=2001057130&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳亰鑱奙ySQL鐨勪富浠嶿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497982&idx=1&sn=bb589329cceb5462fc41f66ec63dbf56&chksm=cf2227d7f855aec16dd4d3b3425c0401850eeaf2c9cdc82e82722d38a00c24ee9ccfa3353774&token=2001057130&lang=zh_CN#rd) +- [娑堟伅闃熷垪缁忓吀鍗佽繛闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497847&idx=1&sn=29a32672b712e7dfadfa36c9902b2ec7&chksm=cf22275ef855ae484fb3f51a5726e9a4bc45222e8fbbd33631d177dc4b5619c36889ea178463&token=2001057130&lang=zh_CN#rd) +- [鍏骞傜瓑璁捐](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497427&idx=1&sn=2ed160c9917ad989eee1ac60d6122855&chksm=cf2229faf855a0ecf5eb34c7335acdf6420426490ee99fc2b602d54ff4ffcecfdab24eeab0a3&token=2001057130&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛氶浂鎷疯礉璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247496788&idx=1&sn=f65ddd10d16d8376efa0037762153932&chksm=cf222b7df855a26bad76249e7b77e28da3097b226f9165d79f5031516d9c345827fca901559c&token=2001057130&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛欼O妯″瀷璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247496448&idx=1&sn=cd502f850290a25949dd4a11ac55a039&chksm=cf222c29f855a53f094bde2868900fa252b07385e73564e9ee9f0510cb4e74387d9d23ab67e6&token=2001057130&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛歁VCC鍘熺悊璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495277&idx=1&sn=a1812febb4246f824ce54d778f672025&chksm=cf223144f855b8528ad6cce707dc3a1b4d387817bd751dfab4f79dda90c6640f9763d25f3f33&token=2001057130&lang=zh_CN#rd) +- [2W瀛楋紒璇﹁В20閬揜edis缁忓吀闈㈣瘯棰橈紒锛堢弽钘忕増锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494124&idx=1&sn=c185f7d999d5f006608d05707a8a7eea&chksm=cf2236c5f855bfd329c6e2ee27f23f8131ebcd312960190a10f1a819d67f07a21a08ad17f263&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓冪鏂规锛佹帰璁≧edis鍒嗗竷寮忛攣鐨勬纭娇鐢ㄥЭ鍔縘(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488142&idx=1&sn=79a304efae7a814b6f71bbbc53810c0c&chksm=cf21cda7f85644b11ff80323defb90193bc1780b45c1c6081f00da85d665fd9eb32cc934b5cf&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [闈㈣瘯蹇呭锛乀CP鍗忚缁忓吀鍗佷簲杩為棶锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490868&idx=1&sn=96889bfe6a97f9200fa2d682cf2f5d89&chksm=cf21c21df8564b0b0757df584560a69340b1775fe1c70b867439565969ec3aed19c442ff4eeb&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [2W瀛楋紒姊崇悊50閬撶粡鍏歌绠楁満缃戠粶闈㈣瘯棰橈紙鏀惰棌鐗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247492832&idx=1&sn=601fa1c340a313bc0f74bb75cdb6a95a&chksm=cf223bc9f855b2dfb8d0e74f3360e2edfe25c3a728fe17e9e80b6022340994fd9d9e1ca83ca8&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [ZooKeeper鐨勫崄浜岃繛闂紝浣犻《寰椾簡鍢涳紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488047&idx=1&sn=4913c7e1c3b8835f7512d8dc6b845727&chksm=cf21cd06f8564410cce6121230256facb1ab3b5a9ed35579896f428d84bdea7b86836109d575&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [50閬揓ava闆嗗悎缁忓吀闈㈣瘯棰橈紙鏀惰棌鐗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488007&idx=1&sn=c5c16c8ec916c791e776216f3177c7e2&chksm=cf21cd2ef85644382a985e9fed1956d6ee60c86ce69e65f31f775318435fdb86bf368e26edf2&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [100閬揗ySQL鏁版嵁搴撶粡鍏搁潰璇曢瑙f瀽锛堟敹钘忕増锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488000&idx=1&sn=1c38db7fd110bbcc1ffb2d72a56aaf25&chksm=cf21cd29f856443f25a3fe98ae8e888faceef9bee45df045969b2cffb105363dcc2a4480bb74&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [Spring 闈㈣瘯63闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497672&idx=1&sn=6ff0350e23d014b29a47bdec79af9ef5&chksm=cf2228e1f855a1f70fa78d9bd85c53dfbe154c1325aa1e203e4c918132c430d51bb68e961eda&token=2001057130&lang=zh_CN#rd) \ No newline at end of file From 03d9f811710a455cc2d7143459b4ab7ab3690d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 10:33:17 +0800 Subject: [PATCH 14/47] =?UTF-8?q?leetcode=E7=AE=97=E6=B3=95=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "letecode\350\247\243\351\242\230\347\256\227\346\263\225\344\273\213\347\273\215/README.MD" diff --git "a/letecode\350\247\243\351\242\230\347\256\227\346\263\225\344\273\213\347\273\215/README.MD" "b/letecode\350\247\243\351\242\230\347\256\227\346\263\225\344\273\213\347\273\215/README.MD" new file mode 100644 index 0000000..921f58b --- /dev/null +++ "b/letecode\350\247\243\351\242\230\347\256\227\346\263\225\344\273\213\347\273\215/README.MD" @@ -0,0 +1,13 @@ +## leetcode锛堟寔缁洿鏂颁腑锛 + +鍏虫敞鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 + +- [鐪嬩竴閬嶅氨鐞嗚В锛氬姩鎬佽鍒掕瑙(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247489016&idx=1&sn=bba3fb1a7a864b6ccefeb9f633751811&chksm=cf21cad1f85643c716c8c9396d3a6711f7722f8f81c8f40f5a91c525c98f73f5c476b7d49dd4&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囩殑鍩烘湰绠楁硶锛氶掑綊璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488073&idx=1&sn=ec81b4a1f8b11ea59264b55e571fed91&chksm=cf21cd60f8564476952c5abb8ffa93fc38fde354a61ca5596e1875d35760383f3a92b2879e30&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鐪嬩竴閬嶅氨鐞嗚В锛屽浘瑙e崟閾捐〃鍙嶈浆](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487967&idx=1&sn=e75373dcb0507081c242ba018b42ca82&chksm=cf21cef6f85647e0cbf0b2072eb1264a44abcaa9f4a0621ef8954a1b1d6719560f7f4cbbce60&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [闈㈣瘯蹇呭锛氬洖婧畻娉曡瑙(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497665&idx=1&sn=39011296fa99eda839ab2bbe83a42cdf&chksm=cf2228e8f855a1fe8f059130dc0b3d9ad34431a27bbe7e16f508b7e9340c24e2e4dfd8b414c2&token=1990771297&lang=zh_CN#rd) +- [leetcode蹇呭绠楁硶锛氳亰鑱婃粦鍔ㄧ獥鍙(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247496003&idx=1&sn=8c40eb3e611514f3bafb8d6873c03fda&chksm=cf222e6af855a77ce2fc36d4e4fc02945286300206f43975e30bc23b65c9ca67b6a1ac9806d1&token=1990771297&lang=zh_CN#rd) +- [浜斿垎閽熸悶瀹氳椽蹇冪畻娉曪紝浠庢涓嶆儳澶у巶闈㈣瘯](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490681&idx=1&sn=0388da1492fe0fdfa3ed6b1a43511328&chksm=cf21c350f8564a466d89578f73886eb462c6dd485f42e7953f126be5f9af49b3fb0be3457d52&token=1990771297&lang=zh_CN#rd) +- [鍙屾寚閽+褰掑苟鎺掑簭锛佸浘瑙f帓搴忛摼琛紒](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247496038&idx=1&sn=96a1a665e43ee9e3337e3d941db49f1e&chksm=cf222e4ff855a75919f0be68e78472199c44d0e9d94de6d5bf621a892ba211738d6f4dbd53ac&token=1990771297&lang=zh_CN#rd) +- [鍙屾寚閽堟妧宸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488116&idx=1&sn=aeec0553e2317bef76d158d2b0e0b5a5&chksm=cf21cd5df856444b8963efc2745bce6801df4bc547b679ae8366fa8c3cd293f1f7c60c18e4f6&token=1990771297&lang=zh_CN#rd) +- [瀛楃涓插尮閰嶇畻娉曡瑙(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494506&idx=1&sn=1f13b0cc1f03af464e1063be8ef1cb57&chksm=cf223443f855bd5597898126d12c6039f64da47b8a95714018203ee5e453950c802ebecfabe1&token=1990771297&lang=zh_CN#rd) From 2a7556216eafa7e97eff49ac14b80e1c8bf52943 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 10:35:11 +0800 Subject: [PATCH 15/47] =?UTF-8?q?Delete=20=E5=88=B7leetcode=E5=BF=85?= =?UTF-8?q?=E5=A4=87=E7=AE=97=E6=B3=95=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\345\210\222\350\257\246\350\247\243.md" | 440 ------------------ ...45\210\222\350\257\246\350\247\243.md.bak" | 0 ...22\345\275\222\350\257\246\350\247\243.md" | 380 --------------- 3 files changed, 820 deletions(-) delete mode 100644 "\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md" delete mode 100644 "\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md.bak" delete mode 100644 "\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\351\200\222\345\275\222\350\257\246\350\247\243.md" diff --git "a/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md" "b/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md" deleted file mode 100644 index e8cc9b4..0000000 --- "a/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md" +++ /dev/null @@ -1,440 +0,0 @@ - -### 前言 - -我们刷leetcode的时候,经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。今天跟大家一起来学习动态规划的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~ - -- 什么是动态规划? -- 动态规划的核心思想 -- 一个例子走进动态规划 -- 动态规划的解题套路 -- leetcode案例分析 - - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/01fdad6c74864d7da07193203c2dcbf4~tplv-k3u1fbpfcp-zoom-1.image) - - -公众号:**捡田螺的小男孩** - -### 什么是动态规划? - - -动态规划(英语:Dynamic programming,简称 DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。 - -> dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems. - -以上定义来自维基百科,看定义感觉还是有点抽象。简单来说,动态规划其实就是,给定一个问题,我们把它拆成一个个子问题,直到子问题可以直接解决。然后呢,把子问题答案保存起来,以减少重复计算。再根据子问题答案反推,得出原问题解的一种方法。 -> 一般这些子问题很相似,可以通过函数关系式递推出来。然后呢,动态规划就致力于解决每个子问题一次,减少重复计算,比如斐波那契数列就可以看做入门级的经典动态规划问题。 - - -### 动态规划核心思想 - -动态规划最核心的思想,就在于**拆分子问题,记住过往,减少重复计算**。 - -![动态规划在于记住过往](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d26f967ff6e447d291b0b196c4edaa07~tplv-k3u1fbpfcp-watermark.image) - -我们来看下,网上比较流行的一个例子: -> - A : "1+1+1+1+1+1+1+1 =?" -> - A : "上面等式的值是多少" -> - B : 计算 "8" -> - A : 在上面等式的左边写上 "1+" 呢? -> - A : "此时等式的值为多少" -> - B : 很快得出答案 "9" -> - A : "你怎么这么快就知道答案了" -> - A : "只要在8的基础上加1就行了" -> - A : "所以你不用重新计算,因为你记住了第一个等式的值为8!动态规划算法也可以说是 '记住求过的解来节省时间'" - -### 一个例子带你走进动态规划 -- 青蛙跳阶问题 - -#### 暴力递归 - -> leetcode原题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 10 级的台阶总共有多少种跳法。 - -有些小伙伴第一次见这个题的时候,可能会有点蒙圈,不知道怎么解决。其实可以试想: -> - 要想跳到第10级台阶,要么是先跳到第9级,然后再跳1级台阶上去;要么是先跳到第8级,然后一次迈2级台阶上去。 -> - 同理,要想跳到第9级台阶,要么是先跳到第8级,然后再跳1级台阶上去;要么是先跳到第7级,然后一次迈2级台阶上去。 -> - 要想跳到第8级台阶,要么是先跳到第7级,然后再跳1级台阶上去;要么是先跳到第6级,然后一次迈2级台阶上去。 - -假设跳到第n级台阶的跳数我们定义为f(n),很显然就可以得出以下公式: - -``` -f(10) = f(9)+f(8) -f (9) = f(8) + f(7) -f (8) = f(7) + f(6) -... -f(3) = f(2) + f(1) - -即通用公式为: f(n) = f(n-1) + f(n-2) -``` - -那f(2) 或者 f(1) 等于多少呢? -- 当只有2级台阶时,有两种跳法,第一种是直接跳两级,第二种是先跳一级,然后再跳一级。即f(2) = 2; -- 当只有1级台阶时,只有一种跳法,即f(1)= 1; - - -因此可以用递归去解决这个问题: -``` -class Solution { - public int numWays(int n) { - if(n == 1){ - return 1; - } - if(n == 2){ - return 2; - } - return numWays(n-1) + numWays(n-2); - } -} -``` - -去leetcode提交一下,发现有问题,超出时间限制了 - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3e0608ec89a246568e01c7ba4b8f50d8~tplv-k3u1fbpfcp-zoom-1.image) - - -为什么超时了呢?递归耗时在哪里呢?先画出**递归树**看看: - - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2dd95840552e4a7db9536884b7a9b558~tplv-k3u1fbpfcp-zoom-1.image) - -- 要计算原问题 f(10),就需要先计算出子问题 f(9) 和 f(8) -- 然后要计算 f(9),又要先算出子问题 f(8) 和 f(7),以此类推。 -- 一直到 f(2) 和 f(1),递归树才终止。 - -我们先来看看这个递归的时间复杂度吧: - - -``` -递归时间复杂度 = 解决一个子问题时间*子问题个数 -``` - -- 一个子问题时间 = f(n-1)+f(n-2),也就是一个加法的操作,所以复杂度是 O(1); -- 问题个数 = 递归树节点的总数,递归树的总节点 = 2^n-1,所以是复杂度O(2^n)。 - -因此,青蛙跳阶,递归解法的时间复杂度 = O(1) * O(2^n) = O(2^n),就是指数级别的,爆炸增长的,如果n比较大的话,超时很正常的了。 - -回过头来,你仔细观察这颗递归树,你会发现存在大量重复计算,比如f(8)被计算了两次,f(7)被重复计算了3次...所以这个递归算法低效的原因,就是**存在大量的重复计算**! - -既然存在大量重复计算,那么我们可以先把计算好的答案存下来,即造一个备忘录,等到下次需要的话,先去备忘录查一下,如果有,就直接取就好了,备忘录没有才开始计算,那就可以省去重新重复计算的耗时啦!这就是带备忘录的解法。 - - - -#### 带备忘录的递归解法(自顶向下) - -一般使用一个数组或者一个哈希map充当这个**备忘录**。 -- 第一步,f(10)= f(9) + f(8),f(9) 和f(8)都需要计算出来,然后再加到备忘录中,如下: - - - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/94484290462e45c799609b0a581b14b0~tplv-k3u1fbpfcp-zoom-1.image) - -- 第二步, f(9) = f(8)+ f(7),f(8)= f(7)+ f(6), 因为 f(8) 已经在备忘录中啦,所以可以省掉,f(7),f(6)都需要计算出来,加到备忘录中~ - - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/12900b17d77f4adfbdb71920f729d61a~tplv-k3u1fbpfcp-zoom-1.image) - - -第三步, f(8) = f(7)+ f(6),发现f(8),f(7),f(6)全部都在备忘录上了,所以都可以剪掉。 - - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9a8c7ba6b5ae413799c6a33490bb1f8f~tplv-k3u1fbpfcp-zoom-1.image) - -所以呢,用了备忘录递归算法,递归树变成光秃秃的树干咯,如下: - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/18a78d6b99a84ff8a1df834f3c085014~tplv-k3u1fbpfcp-zoom-1.image) - -带**备忘录**的递归算法,子问题个数=树节点数=n,解决一个子问题还是O(1),所以带**备忘录**的递归算法的时间复杂度是O(n)。接下来呢,我们用带**备忘录**的递归算法去撸代码,解决这个青蛙跳阶问题的超时问题咯~,代码如下: - - - -``` -public class Solution { - //使用哈希map,充当备忘录的作用 - Map tempMap = new HashMap(); - public int numWays(int n) { - // n = 0 也算1种 - if (n == 0) { - return 1; - } - if (n <= 2) { - return n; - } - //先判断有没计算过,即看看备忘录有没有 - if (tempMap.containsKey(n)) { - //备忘录有,即计算过,直接返回 - return tempMap.get(n); - } else { - // 备忘录没有,即没有计算过,执行递归计算,并且把结果保存到备忘录map中,对1000000007取余(这个是leetcode题目规定的) - tempMap.put(n, (numWays(n - 1) + numWays(n - 2)) % 1000000007); - return tempMap.get(n); - } - } -} -``` -去leetcode提交一下,如图,稳了: - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e5f0fb1998c542dc8cb3826de800f443~tplv-k3u1fbpfcp-zoom-1.image) - -其实,还可以用动态规划解决这道题。 - -#### 自底向上的动态规划 - -动态规划跟带备忘录的递归解法基本思想是一致的,都是减少重复计算,时间复杂度也都是差不多。但是呢: -- 带备忘录的递归,是从f(10)往f(1)方向延伸求解的,所以也称为**自顶向下**的解法。 -- 动态规划从较小问题的解,由交叠性质,逐步决策出较大问题的解,它是从f(1)往f(10)方向,往上推求解,所以称为**自底向上**的解法。 - - -动态规划有几个典型特征,**最优子结构、状态转移方程、边界、重叠子问题**。在青蛙跳阶问题中: -- f(n-1)和f(n-2) 称为 f(n) 的最优子结构 -- f(n)= f(n-1)+f(n-2)就称为状态转移方程 -- f(1) = 1, f(2) = 2 就是边界啦 -- 比如f(10)= f(9)+f(8),f(9) = f(8) + f(7) ,f(8)就是重叠子问题。 - -我们来看下自底向上的解法,从f(1)往f(10)方向,想想是不是直接一个for循环就可以解决啦,如下: - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8e21b14d47e64afa958506d49972827b~tplv-k3u1fbpfcp-zoom-1.image) - -带备忘录的递归解法,空间复杂度是O(n),但是呢,仔细观察上图,可以发现,f(n)只依赖前面两个数,所以只需要两个变量a和b来存储,就可以满足需求了,因此空间复杂度是O(1)就可以啦 - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8b202b2364eb4aae9122cfa8474c045e~tplv-k3u1fbpfcp-zoom-1.image) - -动态规划实现代码如下: - -``` -public class Solution { - public int numWays(int n) { - if (n<= 1) { - return 1; - } - if (n == 2) { - return 2; - } - int a = 1; - int b = 2; - int temp = 0; - for (int i = 3; i <= n; i++) { - temp = (a + b)% 1000000007; - a = b; - b = temp; - } - return temp; - } - } -``` - -### 动态规划的解题套路 - -#### 什么样的问题可以考虑使用动态规划解决呢? - -> 如果一个问题,可以把所有可能的答案穷举出来,并且穷举出来后,发现存在重叠子问题,就可以考虑使用动态规划。 - -比如一些求最值的场景,如**最长递增子序列、最小编辑距离、背包问题、凑零钱问题**等等,都是动态规划的经典应用场景。 - - -### 动态规划的解题思路 - - -动态规划的核心思想就是**拆分子问题,记住过往,减少重复计算。** 并且动态规划一般都是自底向上的,因此到这里,基于**青蛙跳阶**问题,我总结了一下我做动态规划的思路: - -- 穷举分析 -- 确定边界 -- 找出规律,确定最优子结构 -- 写出状态转移方程 - - -#### 1. 穷举分析 - - -- 当台阶数是1的时候,有一种跳法,f(1) =1 -- 当只有2级台阶时,有两种跳法,第一种是直接跳两级,第二种是先跳一级,然后再跳一级。即f(2) = 2; -- 当台阶是3级时,想跳到第3级台阶,要么是先跳到第2级,然后再跳1级台阶上去,要么是先跳到第 1级,然后一次迈 2 级台阶上去。所以f(3) = f(2) + f(1) =3 -- 当台阶是4级时,想跳到第3级台阶,要么是先跳到第3级,然后再跳1级台阶上去,要么是先跳到第 2级,然后一次迈 2 级台阶上去。所以f(4) = f(3) + f(2) =5 -- 当台阶是5级时...... - -![自底向上的动态规划](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/29cd6d0d31514336baf9905f8084a624~tplv-k3u1fbpfcp-zoom-1.image) - - - -#### 2. 确定边界 - -通过穷举分析,我们发现,当台阶数是1的时候或者2的时候,可以明确知道青蛙跳法。f(1) =1,f(2) = 2,当台阶n>=3时,已经呈现出规律f(3) = f(2) + f(1) =3,因此f(1) =1,f(2) = 2就是青蛙跳阶的边界。 - - -#### 3. 找规律,确定最优子结构 - -n>=3时,已经呈现出规律 f(n) = f(n-1) + f(n-2) ,因此,f(n-1)和f(n-2) 称为 f(n) 的最优子结构。什么是最优子结构?有这么一个解释: - -> 一道动态规划问题,其实就是一个递推问题。假设当前决策结果是f(n),则最优子结构就是要让 f(n-k) 最优,最优子结构性质就是能让转移到n的状态是最优的,并且与后面的决策没有关系,即让后面的决策安心地使用前面的局部最优解的一种性质 - - -#### 4, 写出状态转移方程 - -通过前面3步,穷举分析,确定边界,最优子结构,我们就可以得出状态转移方程啦: - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4fb4cd7257ff4fcbac9d87be96f353bd~tplv-k3u1fbpfcp-zoom-1.image) - -#### 5. 代码实现 - -我们实现代码的时候,一般注意从底往上遍历哈,然后关注下边界情况,空间复杂度,也就差不多啦。动态规划有个框架的,大家实现的时候,可以考虑适当参考一下: - - -``` -dp[0][0][...] = 边界值 -for(状态1 :所有状态1的值){ - for(状态2 :所有状态2的值){ - for(...){ - //状态转移方程 - dp[状态1][状态2][...] = 求最值 - } - } -} -``` - - -### leetcode案例分析 - -我们一起来分析一道经典leetcode题目吧 - -> 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 - -示例 1: - -``` -输入:nums = [10,9,2,5,3,7,101,18] -输出:4 -解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 -``` - -示例 2: - - -``` -输入:nums = [0,1,0,3,2,3] -输出:4 -``` - -我们按照以上动态规划的解题思路, - -- 穷举分析 -- 确定边界 -- 找规律,确定最优子结构 -- 状态转移方程 - - -#### 1.穷举分析 - - -因为动态规划,核心思想包括**拆分子问题,记住过往,减少重复计算。** 所以我们在思考原问题:**数组num[i]的最长递增子序列长度时**,可以思考下**相关子问题**,比如原问题是否跟**子问题**num[i-1]的最长递增子序列长度有关呢? - -##### 自顶向上的穷举 - -这里观察规律,显然是有关系的,我们还是遵循动态规划**自底向上**的原则,基于示例1的数据,从数组只有一个元素开始分析。 - -- 当nums只有一个元素10时,最长递增子序列是[10],长度是1. -- 当nums需要加入一个元素9时,最长递增子序列是[10]或者[9],长度是1。 -- 当nums再加入一个元素2时,最长递增子序列是[10]或者[9]或者[2],长度是1。 -- 当nums再加入一个元素5时,最长递增子序列是[2,5],长度是2。 -- 当nums再加入一个元素3时,最长递增子序列是[2,5]或者[2,3],长度是2。 -- 当nums再加入一个元素7时,,最长递增子序列是[2,5,7]或者[2,3,7],长度是3。 -- 当nums再加入一个元素101时,最长递增子序列是[2,5,7,101]或者[2,3,7,101],长度是4。 -- 当nums再加入一个元素18时,最长递增子序列是[2,5,7,101]或者[2,3,7,101]或者[2,5,7,18]或者[2,3,7,18],长度是4。 -- 当nums再加入一个元素7时,最长递增子序列是[2,5,7,101]或者[2,3,7,101]或者[2,5,7,18]或者[2,3,7,18],长度是4. - -##### 分析找规律,拆分子问题 -通过上面分析,我们可以**发现一个规律**: - -如果新加入一个元素nums[i], 最长递增子序列要么**是以nums[i]结尾的递增子序列**,要么就是**nums[i-1]的最长递增子序列**。看到这个,是不是很开心,nums[i]的最长递增子序列已经跟**子问题** nums[i-1]的最长递增子序列有关联了。 - -``` -原问题数组nums[i]的最长递增子序列 = 子问题数组nums[i-1]的最长递增子序列/nums[i]结尾的最长递增子序列 -``` - -是不是感觉成功了一半呢?但是**如何把nums[i]结尾的递增子序列也转化为对应的子问题**呢?要是nums[i]结尾的递增子序列也跟nums[i-1]的最长递增子序列有关就好了。又或者nums[i]结尾的最长递增子序列,跟前面子问题num[j](0= - nums[3]=5,以```5```结尾的最长子序列就是```[2,5]```,因为从数组下标```0到3```遍历,只找到了子序列```[2]```比```5```小,所以就是```[2]+[5]```啦,即```dp[4]=2``` -> - nums[4]=3,以```3```结尾的最长子序列就是```[2,3]```,因为从数组下标```0到4```遍历,只找到了子序列```[2]```比```3```小,所以就是```[2]+[3]```啦,即```dp[4]=2``` -> - nums[5]=7,以```7```结尾的最长子序列就是```[2,5,7]```和```[2,3,7]```,因为从数组下标```0到5```遍历,找到```2,5和3```都比7小,所以就有```[2,7],[5,7],[3,7],[2,5,7]和[2,3,7]```这些子序列,最长子序列就是```[2,5,7]和[2,3,7]```,它俩不就是以```5```结尾和```3```结尾的最长递增子序列+[7]来的嘛!所以,**```dp[5]=3 =dp[3]+1=dp[4]+1```**。 - - -很显然有这个规律:一个以nums[i]结尾的数组nums -- 如果存在j属于区间[0,i-1],并且num[i]>num[j]的话,则有,dp(i) =max(dp(j))+1, - -#### 最简单的边界情况 - -当nums数组只有一个元素时,最长递增子序列的长度dp(1)=1,当nums数组有两个元素时,dp(2) =2或者1, -因此边界就是dp(1)=1。 - -#### 确定最优子结构 - -从穷举分析,我们可以得出,以下的最优结构: - -``` -dp(i) =max(dp(j))+1,存在j属于区间[0,i-1],并且num[i]>num[j]。 -``` -**max(dp(j))** 就是最优子结构。 - -#### 状态转移方程 - -通过前面分析,我们就可以得出状态转移方程啦: - -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/457ce281c1ec4e91b8c868aa593e41b6~tplv-k3u1fbpfcp-zoom-1.image) - -所以数组num[i]的最长递增子序列就是: -``` -最长递增子序列 =max(dp[i]) -``` - - - - -#### 代码实现 - -``` -class Solution { - public int lengthOfLIS(int[] nums) { - if (nums.length == 0) { - return 0; - } - int[] dp = new int[nums.length]; - //初始化就是边界情况 - dp[0] = 1; - int maxans = 1; - //自底向上遍历 - for (int i = 1; i < nums.length; i++) { - dp[i] = 1; - //从下标0到i遍历 - for (int j = 0; j < i; j++) { - //找到前面比nums[i]小的数nums[j],即有dp[i]= dp[j]+1 - if (nums[j] < nums[i]) { - //因为会有多个小于nums[i]的数,也就是会存在多种组合了嘛,我们就取最大放到dp[i] - dp[i] = Math.max(dp[i], dp[j] + 1); - } - } - //求出dp[i]后,dp最大那个就是nums的最长递增子序列啦 - maxans = Math.max(maxans, dp[i]); - } - return maxans; - } -} -``` - - - - - - - - - - - - - diff --git "a/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md.bak" "b/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\347\234\213\344\270\200\351\201\215\345\260\261\347\220\206\350\247\243\357\274\232\345\212\250\346\200\201\350\247\204\345\210\222\350\257\246\350\247\243.md.bak" deleted file mode 100644 index e69de29..0000000 diff --git "a/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\351\200\222\345\275\222\350\257\246\350\247\243.md" "b/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\351\200\222\345\275\222\350\257\246\350\247\243.md" deleted file mode 100644 index fb5ecdb..0000000 --- "a/\345\210\267leetcode\345\277\205\345\244\207\347\256\227\346\263\225/\351\200\222\345\275\222\350\257\246\350\247\243.md" +++ /dev/null @@ -1,380 +0,0 @@ -### 鍓嶈█ -閫掑綊鏄竴绉嶉潪甯搁噸瑕佺殑绠楁硶鎬濇兂锛屾棤璁轰綘鏄墠绔紑鍙戯紝杩樻槸鍚庣寮鍙戯紝閮介渶瑕佹帉鎻″畠銆傚湪鏃ュ父宸ヤ綔涓紝缁熻鏂囦欢澶瑰ぇ灏忥紝瑙f瀽xml鏂囦欢绛夌瓑锛岄兘闇瑕佺敤鍒伴掑綊绠楁硶銆傚畠澶熀纭澶噸瑕佷簡锛岃繖涔熸槸涓轰粈涔堥潰璇曠殑鏃跺欙紝闈㈣瘯瀹樼粡甯歌鎴戜滑鎵嬪啓閫掑綊绠楁硶銆傛湰鏂囧憿锛屽皢璺熷ぇ瀹朵竴璧峰涔犻掑綊绠楁硶~ - -- 浠涔堟槸閫掑綊锛 -- 閫掑綊鐨勭壒鐐 -- 閫掑綊涓庢爤鐨勫叧绯 -- 閫掑綊搴旂敤鍦烘櫙 -- 閫掑綊瑙i鎬濊矾 -- leetcode妗堜緥鍒嗘瀽 -- 閫掑綊鍙兘瀛樺湪鐨勯棶棰樹互鍙婅В鍐虫柟妗 - - -**鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛** - -### 浠涔堟槸閫掑綊锛 - -閫掑綊锛屽湪璁$畻鏈虹瀛︿腑鏄寚涓绉嶉氳繃閲嶅灏嗛棶棰樺垎瑙d负鍚岀被鐨勫瓙闂鑰岃В鍐抽棶棰樼殑鏂规硶銆傜畝鍗曟潵璇达紝閫掑綊琛ㄧ幇涓哄嚱鏁拌皟鐢ㄥ嚱鏁版湰韬傚湪鐭ヤ箮鐪嬪埌涓涓瘮鍠婚掑綊鐨勪緥瀛愶紝涓汉瑙夊緱闈炲父褰㈣薄锛屽ぇ瀹剁湅涓涓嬶細 - -> 閫掑綊鏈鎭板綋鐨勬瘮鍠伙紝灏辨槸鏌ヨ瘝鍏搞傛垜浠娇鐢ㄧ殑璇嶅吀锛屾湰韬氨鏄掑綊锛屼负浜嗚В閲婁竴涓瘝锛岄渶瑕佷娇鐢ㄦ洿澶氱殑璇嶃傚綋浣犳煡涓涓瘝锛屽彂鐜拌繖涓瘝鐨勮В閲婁腑鏌愪釜璇嶄粛鐒朵笉鎳傦紝浜庢槸浣犲紑濮嬫煡杩欑浜屼釜璇嶏紝鍙儨锛岀浜屼釜璇嶉噷浠嶇劧鏈変笉鎳傜殑璇嶏紝浜庢槸鏌ョ涓変釜璇嶏紝杩欐牱鏌ヤ笅鍘伙紝鐩村埌鏈変竴涓瘝鐨勮В閲婃槸浣犲畬鍏ㄨ兘鐪嬫噦鐨勶紝閭d箞閫掑綊璧板埌浜嗗敖澶达紝鐒跺悗浣犲紑濮嬪悗閫锛岄愪釜鏄庣櫧涔嬪墠鏌ヨ繃鐨勬瘡涓涓瘝锛屾渶缁堬紝浣犳槑鐧戒簡鏈寮濮嬮偅涓瘝鐨勬剰鎬濄 - -鏉ヨ瘯璇曟按锛岀湅涓涓掑綊鐨勪唬鐮佷緥瀛愬惂锛屽涓嬶細 -``` -public int sum(int n) { - if (n <= 1) { - return 1; - } - return sum(n - 1) + n; -} -``` - -### 閫掑綊鐨勭壒鐐 - -瀹為檯涓婏紝閫掑綊鏈変袱涓樉钁楃殑鐗瑰緛,缁堟鏉′欢鍜岃嚜韬皟鐢: -- 鑷韩璋冪敤锛氬師闂鍙互鍒嗚В涓哄瓙闂锛屽瓙闂鍜屽師闂鐨勬眰瑙f柟娉曟槸涓鑷寸殑锛屽嵆閮芥槸璋冪敤鑷韩鐨勫悓涓涓嚱鏁般 -- 缁堟鏉′欢锛氶掑綊蹇呴』鏈変竴涓粓姝㈢殑鏉′欢锛屽嵆涓嶈兘鏃犻檺寰幆鍦拌皟鐢ㄦ湰韬 - -缁撳悎浠ヤ笂demo浠g爜渚嬪瓙锛岀湅涓嬮掑綊鐨勭壒鐐癸細 - -![](https://imgkr2.cn-bj.ufileos.com/94f250ad-41ea-4760-ae79-060f91605aeb.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=gQGMVnPTDwM%252F5AX2OrH%252F0ugG9MA%253D&Expires=1602691176) - - -### 閫掑綊涓庢爤鐨勫叧绯 -鍏跺疄锛岄掑綊鐨勮繃绋嬶紝鍙互鐞嗚В涓哄嚭鍏ユ爤鐨勮繃绋嬬殑锛岃繖涓瘮鍠诲憿锛屽彧鏄负浜嗘柟渚胯鑰呮湅鍙嬫洿濂界悊瑙i掑綊鍝堛備互涓婁唬鐮佷緥瀛愯绠梥um锛坣=3锛夌殑鍑哄叆鏍堝浘濡備笅锛 -![](https://imgkr2.cn-bj.ufileos.com/d4f09883-727b-44b6-90e0-dfad9d768b8c.jpg?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=V%252BDCQxqTa24HsCxQcooMJ%252FzuOHc%253D&Expires=1602692111) - - -涓轰簡鏇村鏄撶悊瑙d竴浜涳紝鎴戜滑鏉ョ湅涓涓 鍑芥暟sum锛坣=5锛夌殑閫掑綊鎵ц杩囩▼锛屽涓嬶細 -![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/f587c37fea484be192fec7710634ec47~tplv-k3u1fbpfcp-zoom-1.image) - -- 璁$畻sum锛5锛夋椂锛屽厛sum锛5锛夊叆鏍堬紝鐒跺悗鍘熼棶棰榮um锛5锛夋媶鍒嗕负瀛愰棶棰榮um锛4锛夛紝鍐嶅叆鏍堬紝鐩村埌缁堟鏉′欢sum锛坣=1锛=1锛屽氨寮濮嬪嚭鏍堛 -- sum锛1锛夊嚭鏍堝悗锛宻um锛2锛夊紑濮嬪嚭鏍堬紝鎺ョ潃sum锛3锛夈 -- 鏈鍚庡憿,sum锛1锛夊氨鏄悗杩涘厛鍑猴紝sum锛5锛夋槸鍏堣繘鍚庡嚭锛屽洜姝ら掑綊杩囩▼鍙互鐞嗚В涓烘爤鍑哄叆杩囩▼鍟 - - -### 閫掑綊鐨勭粡鍏稿簲鐢ㄥ満鏅 -鍝簺闂鎴戜滑鍙互鑰冭檻浣跨敤閫掑綊鏉ヨВ鍐冲憿锛熷嵆閫掑綊鐨勫簲鐢ㄥ満鏅竴鑸湁鍝簺鍛紵 -- 闃朵箻闂 -- 浜屽弶鏍戞繁搴 -- 姹夎濉旈棶棰 -- 鏂愭尝閭e鏁板垪 -- 蹇熸帓搴忋佸綊骞舵帓搴忥紙鍒嗘不绠楁硶涔熶娇鐢ㄩ掑綊瀹炵幇锛 -- 閬嶅巻鏂囦欢锛岃В鏋恱ml鏂囦欢 - -### 閫掑綊瑙i鎬濊矾 -瑙e喅閫掑綊闂涓鑸氨涓夋鏇诧紝鍒嗗埆鏄細 -- 绗竴姝ワ紝瀹氫箟鍑芥暟鍔熻兘 -- 绗簩姝ワ紝瀵绘壘閫掑綊缁堟鏉′欢 -- 绗簩姝ワ紝閫掓帹鍑芥暟鐨勭瓑浠峰叧绯诲紡 - -杩欎釜閫掑綊瑙i涓夋澘鏂х悊瑙h捣鏉ユ湁鐐规娊璞★紝鎴戜滑鎷块樁涔橀掑綊渚嬪瓙鏉ュ柕鍠靛惂~ - -#### 1.瀹氫箟鍑芥暟鍔熻兘 -瀹氫箟鍑芥暟鍔熻兘锛屽氨鏄锛屼綘杩欎釜鍑芥暟鏄共鍢涚殑锛屽仛浠涔堜簨鎯咃紝鎹㈠彞璇濊锛屼綘瑕佺煡閬撻掑綊鍘熼棶棰樻槸浠涔堝憖锛熸瘮濡備綘闇瑕佽В鍐抽樁涔橀棶棰橈紝瀹氫箟鐨勫嚱鏁板姛鑳藉氨鏄痭鐨勯樁涔橈紝濡備笅锛 -``` -//n鐨勯樁涔橈紙n涓哄ぇ浜0鐨勮嚜鐒舵暟锛 -int factorial (int n){ - -} -``` - -#### 2.瀵绘壘閫掑綊缁堟鏉′欢 -閫掑綊鐨勪竴涓吀鍨嬬壒寰佸氨鏄繀椤绘湁涓涓粓姝㈢殑鏉′欢锛屽嵆涓嶈兘鏃犻檺寰幆鍦拌皟鐢ㄦ湰韬傛墍浠ワ紝鐢ㄩ掑綊鎬濊矾鍘昏В鍐抽棶棰樼殑鏃跺欙紝灏遍渶瑕佸鎵鹃掑綊缁堟鏉′欢鏄粈涔堛傛瘮濡傞樁涔橀棶棰橈紝褰搉=1鐨勬椂鍊欙紝涓嶇敤鍐嶅線涓嬮掑綊浜嗭紝鍙互璺冲嚭寰幆鍟︼紝n=1灏卞彲浠ヤ綔涓洪掑綊鐨勭粓姝㈡潯浠讹紝濡備笅锛 -``` -//n鐨勯樁涔橈紙n涓哄ぇ浜0鐨勮嚜鐒舵暟锛 -int factorial (int n){ - if(n==1){ - return 1; - } -} -``` - -#### 3.閫掓帹鍑芥暟鐨勭瓑浠峰叧绯诲紡 -閫掑綊鐨**鏈箟**锛屽氨鏄師闂鍙互鎷嗕负鍚岀被涓旀洿瀹规槗瑙e喅鐨勫瓙闂锛屽嵆**鍘熼棶棰樺拰瀛愰棶棰橀兘鍙互鐢ㄥ悓涓涓嚱鏁板叧绯昏〃绀恒傞掓帹鍑芥暟鐨勭瓑浠峰叧绯诲紡锛岃繖涓楠ゅ氨绛変环浜庡鎵惧師闂涓庡瓙闂鐨勫叧绯伙紝濡備綍鐢ㄤ竴涓叕寮忔妸杩欎釜鍑芥暟琛ㄨ揪娓呮**銆傞樁涔樼殑鍏紡灏卞彲浠ヨ〃绀轰负 f(n) = n * f(n-1), 鍥犳锛岄樁涔樼殑閫掑綊绋嬪簭浠g爜灏卞彲浠ュ啓鎴愯繖鏍凤紝濡備笅锛 -``` -int factorial (int n){ - if(n==1){ - return 1; - } - return n * factorial(n-1); -} -``` -**娉ㄦ剰鍟**锛屼笉鏄墍鏈夐掓帹鍑芥暟鐨勭瓑浠峰叧绯婚兘鍍忛樁涔樿繖涔堢畝鍗曪紝涓涓嬪瓙灏辫兘鎺ㄥ鍑烘潵銆傞渶瑕佹垜浠鎺ヨЕ锛屽绉疮锛屽鎬濊冿紝澶氱粌涔犻掑綊棰樼洰婊磣 - -### leetcode妗堜緥鍒嗘瀽 - -鏉ュ垎鏋愪竴閬搇eetcode閫掑綊鐨勭粡鍏搁鐩惂~ -> 鍘熼閾炬帴鍦ㄨ繖閲屽搱锛歨ttps://leetcode-cn.com/problems/invert-binary-tree/ - -**棰樼洰锛** 缈昏浆涓妫典簩鍙夋爲銆 - -杈撳叆锛 -``` - 4 - / \ - 2 7 - / \ / \ -1 3 6 9 -``` -杈撳嚭锛 -``` - 4 - / \ - 7 2 - / \ / \ -9 6 3 1 -``` - -鎴戜滑鎸夌収浠ヤ笂閫掑綊瑙i鐨勪笁鏉挎枾鏉ワ細 - -**1. 瀹氫箟鍑芥暟鍔熻兘** - -鍑芥暟鍔熻兘锛堝嵆杩欎釜閫掑綊鍘熼棶棰樻槸锛夛紝缁欏嚭涓棰楁爲锛岀劧鍚庣炕杞畠锛屾墍浠ワ紝鍑芥暟鍙互瀹氫箟涓猴細 -``` -//缈昏浆涓棰椾簩鍙夋爲 -public TreeNode invertTree(TreeNode root) { -} - -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -``` - -**2.瀵绘壘閫掑綊缁堟鏉′欢** - -杩欐5鏍戜粈涔堟椂鍊欎笉鐢ㄧ炕杞憿锛熷綋鐒舵槸褰撳墠鑺傜偣涓簄ull鎴栬呭綋鍓嶈妭鐐逛负鍙跺瓙鑺傜偣鐨勬椂鍊欏暒銆傚洜姝わ紝鍔犱笂缁堟鏉′欢灏辨槸锛 -``` -//缈昏浆涓棰椾簩鍙夋爲 -public TreeNode invertTree(TreeNode root) { - if(root==null || (root.left ==null && root.right ==null)){ - return root; - } -} -``` - -**3. 閫掓帹鍑芥暟鐨勭瓑浠峰叧绯诲紡** - -鍘熼棶棰樹箣浣犺缈昏浆涓棰楁爲锛屾槸涓嶆槸鍙互鎷嗗垎涓哄瓙闂锛屽垎鍒炕杞畠鐨勫乏瀛愭爲鍜屽彸瀛愭爲锛熷瓙闂涔嬬炕杞畠鐨勫乏瀛愭爲锛屾槸涓嶆槸鍙堝彲浠ユ媶鍒嗕负锛岀炕杞畠宸﹀瓙鏍戠殑宸﹀瓙鏍戜互鍙婂畠宸﹀瓙鏍戠殑鍙冲瓙鏍戯紵鐒跺悗涓鐩寸炕杞埌鍙跺瓙鑺傜偣涓烘銆傚棷锛岀湅鍥剧悊瑙d竴涓嬪挴~ -![](https://imgkr2.cn-bj.ufileos.com/938b0fcf-7ab2-4c8f-833f-382be7f8b46d.jpg?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=9BiTdqNsNnz%252FqynFWb52CMQkMnU%253D&Expires=1602692880) - - -棣栧厛锛屼綘瑕佺炕杞牴鑺傜偣涓4鐨勬爲锛屽氨闇瑕**缈昏浆瀹冪殑宸﹀瓙鏍戯紙鏍硅妭鐐逛负2锛夊拰鍙冲瓙鏍(鏍硅妭鐐逛负7锛**銆傝繖灏辨槸閫掑綊鐨**閫**鐨勮繃绋嬪暒 -![](https://imgkr2.cn-bj.ufileos.com/381538fe-fe34-4cae-9d1e-b5894ea542b2.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=HK51fa4jYvucnu6r3829BqFWcys%253D&Expires=1602693025) - - -鐒跺悗鍛紝鏍硅妭鐐逛负2鐨勬爲锛屼笉鏄彾瀛愯妭鐐癸紝浣犻渶瑕佺户缁**缈昏浆瀹冪殑宸﹀瓙鏍戯紙鏍硅妭鐐逛负1锛夊拰鍙冲瓙鏍戯紙鏍硅妭鐐逛负3锛**銆傚洜涓鸿妭鐐1鍜3閮芥槸**鍙跺瓙鑺傜偣**浜嗭紝鎵浠ュ氨杩斿洖鍟︺傝繖涔熸槸閫掑綊鐨**閫**鐨勮繃绋媬 - -![](https://imgkr2.cn-bj.ufileos.com/c9195723-d803-4b76-9cb3-bec8192a696f.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=n5Ct31iSBnMmK2HJ7kB0I6ZhEYs%253D&Expires=1602693145) - -鍚岀悊锛屾牴鑺傜偣涓7鐨勬爲锛屼篃涓嶆槸鍙跺瓙鑺傜偣锛屼綘闇瑕佺炕杞**瀹冪殑宸﹀瓙鏍戯紙鏍硅妭鐐逛负6锛夊拰鍙冲瓙鏍戯紙鏍硅妭鐐逛负9锛**銆傚洜涓鸿妭鐐6鍜9閮芥槸鍙跺瓙鑺傜偣浜嗭紝鎵浠ヤ篃杩斿洖鍟︺ - -![](https://imgkr2.cn-bj.ufileos.com/63333c60-747b-45d3-a8eb-dacf0cf36231.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=8NTb2Fj1PBlwVIxwe1InO5YqoWg%253D&Expires=1602693197) - - - -宸﹀瓙鏍戯紙鏍硅妭鐐逛负2锛夊拰鍙冲瓙鏍(鏍硅妭鐐逛负7锛夐兘琚炕杞畬鍚庯紝杩欏嚑涓楠ゅ氨**褰掓潵**锛屽嵆閫掑綊鐨勫綊杩囩▼锛岀炕杞爲鐨勪换鍔″氨瀹屾垚浜唦 - -![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/afada1b801734cdc899e896b0816b63f~tplv-k3u1fbpfcp-watermark.webp) - -鏄剧劧锛**閫掓帹鍏崇郴寮**灏辨槸锛 -``` -invertTree锛坮oot锛= invertTree锛坮oot.left锛 + invertTree锛坮oot.right锛; -``` - -浜庢槸锛屽緢瀹规槗鍙互寰楀嚭浠ヤ笅浠g爜锛 -``` -//缈昏浆涓棰椾簩鍙夋爲 -public TreeNode invertTree(TreeNode root) { - if(root==null || (root.left ==null && root.right ==null){ - return root; - } - //缈昏浆宸﹀瓙鏍 - TreeNode left = invertTree(root.left); - //缈昏浆鍙冲瓙鏍 - TreeNode right= invertTree(root.right); -} -``` -杩欓噷浠g爜鏈変釜鍦版柟闇瑕佹敞鎰忥紝灏辨槸缈昏浆瀹屼竴妫垫爲鐨勫乏鍙冲瓙鏍戝悗锛岄渶瑕佷氦鎹㈠畠宸﹀彸瀛愭爲鐨勫紩鐢ㄤ綅缃 -``` - root.left = right; - root.right = left; -``` - -鍥犳锛宭eetcode杩欎釜閫掑綊缁忓吀棰樼洰鐨**缁堟瀬瑙e喅浠g爜**濡備笅锛 -``` -class Solution { - public TreeNode invertTree(TreeNode root) { - if(root==null || (root.left ==null && root.right ==null)){ - return root; - } - //缈昏浆宸﹀瓙鏍 - TreeNode left = invertTree(root.left); - //缈昏浆鍙冲瓙鏍 - TreeNode right= invertTree(root.right); - //宸﹀彸瀛愭爲浜ゆ崲浣嶇疆~ - root.left = right; - root.right = left; - return root; - } -} -``` -鎷跨粓鏋佽В鍐充唬鐮佸幓leetcode鎻愪氦涓涓嬶紝閫氳繃鍟 - - -![](https://imgkr2.cn-bj.ufileos.com/3c9bc7ba-1677-4b8b-a389-e7177fd2b747.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=oNJFxSVWmku%252FMg%252BKlGHop%252BQ%252BxIw%253D&Expires=1602693611) - - -### 閫掑綊瀛樺湪鐨勯棶棰 -- 閫掑綊璋冪敤灞傜骇澶锛屽鑷存爤婧㈠嚭闂 -- 閫掑綊閲嶅璁$畻锛屽鑷存晥鐜囦綆涓 - -#### 鏍堟孩鍑洪棶棰 -- 姣忎竴娆″嚱鏁拌皟鐢ㄥ湪鍐呭瓨鏍堜腑鍒嗛厤绌洪棿锛岃屾瘡涓繘绋嬬殑鏍堝閲忔槸鏈夐檺鐨勩 -- 褰撻掑綊璋冪敤鐨勫眰绾уお澶氭椂锛屽氨浼氳秴鍑烘爤鐨勫閲忥紝浠庤屽鑷磋皟鐢ㄦ爤婧㈠嚭銆 -- 鍏跺疄锛屾垜浠湪鍓嶉潰灏忚妭涔熻璁轰簡锛岄掑綊杩囩▼绫讳技浜庡嚭鏍堝叆鏍堬紝濡傛灉閫掑綊娆℃暟杩囧锛屾爤鐨勬繁搴﹀氨闇瑕佽秺娣憋紝鏈鍚庢爤瀹归噺鐪熺殑涓嶅鍜 - -**浠g爜渚嬪瓙濡備笅锛** -``` -/** - * 閫掑綊鏍堟孩鍑烘祴璇 - */ -public class RecursionTest { - - public static void main(String[] args) { - sum(50000); - } - private static int sum(int n) { - if (n <= 1) { - return 1; - } - return sum(n - 1) + n; - } -} -``` -**杩愯缁撴灉:** -``` -Exception in thread "main" java.lang.StackOverflowError - at recursion.RecursionTest.sum(RecursionTest.java:13) -``` - -鎬庝箞瑙e喅杩欎釜鏍堟孩鍑洪棶棰橈紵棣栧厛闇瑕**浼樺寲涓涓嬩綘鐨勯掑綊**锛岀湡鐨勯渶瑕侀掑綊璋冪敤杩欎箞澶氭鍢涳紵濡傛灉鐪熺殑闇瑕侊紝鍏堢◢寰**璋冨ぇJVM鐨勬爤绌洪棿鍐呭瓨**锛屽鏋滆繕鏄笉琛岋紝閭e氨闇瑕佸純鐢ㄩ掑綊锛**浼樺寲涓哄叾浠栨柟妗**鍜瘇 - -#### 閲嶅璁$畻锛屽鑷寸▼搴忔晥鐜囦綆涓 -鎴戜滑鍐嶆潵鐪嬩竴閬撶粡鍏哥殑闈掕洐璺抽樁闂锛氫竴鍙潚铔欎竴娆″彲浠ヨ烦涓1绾у彴闃讹紝涔熷彲浠ヨ烦涓2绾у彴闃躲傛眰璇ラ潚铔欒烦涓婁竴涓 n 绾х殑鍙伴樁鎬诲叡鏈夊灏戠璺虫硶銆 - -缁濆ぇ澶氭暟璇昏呮湅鍙嬶紝寰堝鏄撳氨鎯冲埌浠ヤ笅閫掑綊浠g爜鍘昏В鍐筹細 -``` -class Solution { - public int numWays(int n) { - if (n == 0){ - return 1; - } - if(n <= 2){ - return n; - } - return numWays(n-1) + numWays(n-2); - } -} -``` - -浣嗘槸鍛紝鍘籰eetcode鎻愪氦涓涓嬶紝灏辨湁闂鍟︼紝瓒呭嚭鏃堕棿闄愬埗浜 - - -![](https://imgkr2.cn-bj.ufileos.com/47049001-7fae-4c98-8f4c-2e55aca367f3.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=xELiHeOso7vAsXwthfHEIDarVGs%253D&Expires=1602693967) - - -涓轰粈涔堣秴鏃朵簡鍛紵閫掑綊鑰楁椂鍦ㄥ摢閲屽憿锛熷厛鐢诲嚭**閫掑綊鏍**鐪嬬湅锛 - -![](https://imgkr2.cn-bj.ufileos.com/9539296a-f5b1-433e-94ba-2e23eddfc409.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=Rzlo2ChPE7UEkCSJhbMNTBbtfaA%253D&Expires=1602694031) - - -- 瑕佽绠楀師闂 f(10)锛屽氨闇瑕佸厛璁$畻鍑哄瓙闂 f(9) 鍜 f(8) -- 鐒跺悗瑕佽绠 f(9)锛屽張瑕佸厛绠楀嚭瀛愰棶棰 f(8) 鍜 f(7)锛屼互姝ょ被鎺ㄣ -- 涓鐩村埌 f(2) 鍜 f(1锛夛紝閫掑綊鏍戞墠缁堟銆 - -**閫掑綊鏃堕棿澶嶆潅搴 = 瑙e喅涓涓棶棰樻椂闂*闂涓暟** -- 涓涓棶棰樻椂闂 = f锛坣-1锛+f锛坣-2锛夛紝涔熷氨鏄竴涓姞娉曠殑鎿嶄綔锛屾墍浠ュ鏉傚害鏄 **O(1)**锛 -- 闂涓暟 = 閫掑綊鏍戣妭鐐圭殑鎬绘暟锛岄掑綊鏍戠殑鎬荤粨鐐 = 2^n-1锛屾墍浠ユ槸澶嶆潅搴**O(2^n)**銆 - -鍥犳锛岄潚铔欒烦闃讹紝閫掑綊瑙f硶鐨勬椂闂村鏉傚害 = O(1) * O(2^n) = O(2^n)锛屽氨鏄寚鏁扮骇鍒殑锛**濡傛灉n姣旇緝澶х殑璇濓紝瓒呮椂寰堟甯哥殑浜**銆 - -浣犱粩缁嗚瀵熻繖棰楅掑綊鏍戯紝浣犱細鍙戠幇瀛樺湪**澶ч噺閲嶅璁$畻**锛屾瘮濡俧锛8锛夎璁$畻浜嗕袱娆★紝f锛7锛夎閲嶅璁$畻浜3娆...鎵浠ヨ繖涓掑綊绠楁硶浣庢晥鐨勫師鍥狅紝灏辨槸瀛樺湪澶ч噺鐨勯噸澶嶈绠楋紒 - -**閭d箞锛屾庝箞瑙e喅杩欎釜闂鍛紵** - -鏃㈢劧瀛樺湪澶ч噺閲嶅璁$畻锛岄偅涔堟垜浠彲浠ュ厛鎶婅绠楀ソ鐨勭瓟妗堝瓨涓嬫潵锛屽嵆閫犱竴涓蹇樺綍锛岀瓑鍒颁笅娆¢渶瑕佺殑璇濓紝鍏堝幓**澶囧繕褰**鏌ヤ竴涓嬶紝濡傛灉鏈夛紝灏辩洿鎺ュ彇灏卞ソ浜嗭紝澶囧繕褰曟病鏈夋墠鍐嶅幓璁$畻锛岄偅灏卞彲浠ョ渷鍘婚噸鏂伴噸澶嶈绠楃殑鑰楁椂鍟︼紒杩欏氨鏄**甯﹀蹇樺綍鐨勮В娉** - -鎴戜滑鏉ョ湅涓涓**甯﹀蹇樺綍鐨勯掑綊瑙f硶**鍚 - -涓鑸娇鐢ㄤ竴涓暟缁勬垨鑰呬竴涓搱甯宮ap鍏呭綋杩欎釜**澶囧繕褰**銆 - -鍋囪f(10)姹傝В鍔犱笂**澶囧繕褰**锛屾垜浠啀鏉ョ敾涓涓嬮掑綊鏍戯細 - -**绗竴姝**锛宖锛10锛= f(9) + f(8)锛宖(9) 鍜宖锛8锛夐兘闇瑕佽绠楀嚭鏉ワ紝鐒跺悗鍐嶅姞鍒板蹇樺綍涓紝濡備笅锛 - -![](https://imgkr2.cn-bj.ufileos.com/22fe0dc0-136e-4e8d-9b54-7f1ff2a9d066.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=gJl54y4g86XMhK2K1ZbaqmVl94Y%253D&Expires=1602694255) - - -**绗簩姝ワ紝** f(9) = f锛8锛+ f锛7锛夛紝f锛8锛= f锛7锛+ f(6), 鍥犱负 f(8) 宸茬粡鍦ㄥ蹇樺綍涓暒锛屾墍浠ュ彲浠ョ渷鎺夛紝f(7),f锛6锛夐兘闇瑕佽绠楀嚭鏉ワ紝鍔犲埌澶囧繕褰曚腑~ - -![](https://imgkr2.cn-bj.ufileos.com/f9b26b22-c745-4bad-b14d-d8b2b51075f4.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=RkOd5Zj5Wwqonn63eXfoWqStvx4%253D&Expires=1602694275) - - -**绗笁姝ワ紝** f(8) = f锛7锛+ f(6),鍙戠幇f(8)锛宖(7),f锛6锛夊叏閮ㄩ兘鍦ㄥ蹇樺綍涓婁簡锛屾墍浠ラ兘鍙互鍓帀銆 -![](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/ec535ab8a0d3401eae5cb041dabac221~tplv-k3u1fbpfcp-watermark.image) - -鎵浠ュ憿锛岀敤浜嗗蹇樺綍閫掑綊绠楁硶锛岄掑綊鏍戝彉鎴愬厜绉冪鐨勫挴锛屽涓嬶細 -![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5b78faafe49b4ee0ab939194459cf386~tplv-k3u1fbpfcp-watermark.image) - -甯︺屽蹇樺綍銆嶇殑閫掑綊绠楁硶锛屽瓙闂涓暟灏变负n浜嗭紝瑙e喅涓涓瓙闂杩樻槸O(1),鎵浠**甯︺屽蹇樺綍銆嶇殑閫掑綊绠楁硶鐨勬椂闂村鏉傚害鏄疧(n)**銆傛帴涓嬫潵鍛紝鎴戜滑鐢ㄥ甫銆屽蹇樺綍銆嶇殑閫掑綊绠楁硶鍘绘捀浠g爜锛岃В鍐宠繖涓潚铔欒烦闃堕棶棰樺挴~锛屼唬鐮佸涓嬶細 - -``` -public class Solution { - //鍝堝笇map鍏呭綋澶囧繕褰曠殑浣滅敤 - Map tempMap = new HashMap(); - public int numWays(int n) { - // n = 0 涔熺畻1绉 - if (n == 0) { - return 1; - } - if (n <= 2) { - return n; - } - //鍏堝垽鏂湁娌¤绠楄繃锛屽嵆鐪嬬湅澶囧繕褰曟湁娌℃湁 - if (tempMap.containsKey(n)) { - //澶囧繕褰曟湁锛屽嵆璁$畻杩囷紝鐩存帴杩斿洖 - return tempMap.get(n); - } else { - // 澶囧繕褰曟病鏈夛紝鍗虫病鏈夎绠楄繃锛屾墽琛岄掑綊璁$畻,骞朵笖鎶婄粨鏋滀繚瀛樺埌澶囧繕褰昺ap涓紝瀵1000000007鍙栦綑锛堣繖涓槸leetcode棰樼洰瑙勫畾鐨勶級 - tempMap.put(n, (numWays(n - 1) + numWays(n - 2)) % 1000000007); - return tempMap.get(n); - } - } -} -``` - -鍘籰eetcode鎻愪氦涓涓嬶紝濡傚浘锛岀ǔ浜嗭細 - -![](https://imgkr2.cn-bj.ufileos.com/8208e494-07e6-467b-96a2-8acf77121737.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=zNVyzVvQaWVQaQmABckQvIVh1XE%253D&Expires=1602694530) - -鍟ュ彨銆岃嚜椤跺悜涓嬨嶏紵娉ㄦ剰鎴戜滑鍒氭墠鐢荤殑閫掑綊鏍戯紙鎴栬呰鍥撅級锛屾槸浠庝笂鍚戜笅寤朵几锛岄兘鏄粠涓涓妯¤緝澶х殑鍘熼棶棰樻瘮濡傝 f(20)锛屽悜涓嬮愭笎鍒嗚В瑙勬ā锛岀洿鍒 f(1) 鍜 f(2) 瑙﹀簳锛岀劧鍚庨愬眰杩斿洖绛旀锛岃繖灏卞彨銆岃嚜椤跺悜涓嬨嶃 - - -鍟ュ彨銆岃嚜搴曞悜涓娿嶏紵鍙嶈繃鏉ワ紝鎴戜滑鐩存帴浠庢渶搴曚笅锛屾渶绠鍗曪紝闂瑙勬ā鏈灏忕殑 f(1) 鍜 f(2) 寮濮嬪線涓婃帹锛岀洿鍒版帹鍒版垜浠兂瑕佺殑绛旀 f(20)锛岃繖灏辨槸鍔ㄦ佽鍒掔殑鎬濊矾锛岃繖涔熸槸涓轰粈涔堝姩鎬佽鍒掍竴鑸兘鑴辩浜嗛掑綊锛岃屾槸鐢卞惊鐜凯浠e畬鎴愯绠椼 - -鍔ㄦ佽鍒掗棶棰橈紝涓嬫湡鍒嗚В - -### 鍙傝冧笌鎰熻阿 -- [涓鏂囧浼氶掑綊瑙i](https://mp.weixin.qq.com/s/Hew44D8rdXb3pf8mZGk67w) -- [鍔ㄦ佽鍒掕瑙(https://mp.weixin.qq.com/s/1V3aHVonWBEXlNUvK3S28w) - -### 涓汉鍏紬鍙 -![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e6b23c704fc94ca09207b779f953cce6~tplv-k3u1fbpfcp-zoom-1.image) -- 鏇村骞茶揣锛屽叧娉ㄥ叕浼楀彿 - From fd830096617fed64645c9bb2d0152fe899d78eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 10:40:38 +0800 Subject: [PATCH 16/47] =?UTF-8?q?=E5=A4=A7=E5=8E=82=E9=9D=A2=E8=AF=95?= =?UTF-8?q?=E7=9C=9F=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 "\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" diff --git "a/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" "b/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" new file mode 100644 index 0000000..2fa4767 --- /dev/null +++ "b/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" @@ -0,0 +1,13 @@ +## 1. 闈㈣瘯鐪熼 + +鍏虫敞鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 +鈥 +- [oppo鍚庣16杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498750&idx=1&sn=19fe8b4fff28fe81db14e733053bbc74&chksm=cf2224d7f855adc1d0984980a4e3de31fe33329164a472ca8d8255a8a80b69b2e23850811323&token=2001057130&lang=zh_CN#rd) +- [灏忓巶鍚庣鍗佽繛闂紙闄勭瓟妗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498316&idx=1&sn=7749b78293b7b2af51eda99844e08a56&chksm=cf222565f855ac7324232e2af459f8b6e6eb5fd5b272c2b29bda08cc579421b6704a0de94b2e&token=2001057130&lang=zh_CN#rd) +- [鑵捐浜戝悗绔15杩為棶锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498171&idx=1&sn=f5a7ec25a569822be0f73fbcd413e8ba&chksm=cf222692f855af84fba419166fcd4235c0e78af3a2e1ec4c723a4efb1bd1ad6f8a5b9404c599&token=2001057130&lang=zh_CN#rd) +- [绀炬嫑鍚庣21杩為棶锛堜笁骞村伐浣滅粡楠屼竴闈級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498084&idx=1&sn=96c8148cfeeeb16668ed9e03fa9131cc&chksm=cf22264df855af5b6e81b93738cca28989226a53ec702fcfaa0cc5004dded4208c5ee5ea844a&token=2001057130&lang=zh_CN#rd) +- [涓浠界儹涔庝箮鐨勫瓧鑺傞潰璇曠湡棰榏(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497742&idx=1&sn=18765e7356f446a7f2521f45b467d5d3&chksm=cf222727f855ae31dd2029e3219814211336c41d9228d271a583d3691ddadca586529aca9302&token=2001057130&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳櫨鐨湇鍔$15杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497256&idx=1&sn=3b799c2d514aa25e85a6faa60d639a0b&chksm=cf222901f855a017b73356b99b830b8800a7a9172fab891c5759d8dd69a270872ea9480c0b7c&token=2001057130&lang=zh_CN#rd) +- [瀹囧畽鏉′竴闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495342&idx=1&sn=54e1c0c16a6467001524c34818025331&chksm=cf223187f855b89140db5ca429e6efc19d0111abf7f36b78a0ecd73b00fded1ff1e7ba32a6f1&token=2001057130&lang=zh_CN#rd) +- [铓傝殎閲戞湇涓闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493270&idx=1&sn=1c78a81d6e1bd0f0fd947fe8c3a33e32&chksm=cf2239bff855b0a9627855f20a17799e0506eb7548a409bfa0ee0450328d7519ec70f7b962cc&token=2001057130&lang=zh_CN#rd) +- [鐢拌灪绮惧搧闈㈣瘯PDF鍙戝竷锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499943&idx=1&sn=fe869c0a97a306e42830336fe74e17a6&chksm=cf221f8ef8559698781709bfbccbb85087286e48434905fb18bec3a3ec0af7329c2a1632c230&token=1990771297&lang=zh_CN#rd锛 \ No newline at end of file From 9bdca98a3d18d03575ae7bb379667410efcea7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 10:52:06 +0800 Subject: [PATCH 17/47] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\345\210\206\345\270\203\345\274\217/README.MD" | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 "\345\210\206\345\270\203\345\274\217/README.MD" diff --git "a/\345\210\206\345\270\203\345\274\217/README.MD" "b/\345\210\206\345\270\203\345\274\217/README.MD" new file mode 100644 index 0000000..1b5f507 --- /dev/null +++ "b/\345\210\206\345\270\203\345\274\217/README.MD" @@ -0,0 +1,12 @@ +## 鍒嗗竷寮 + +鍏虫敞鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 + +- [闈㈣瘯蹇呭锛氳亰鑱婂垎甯冨紡閿佺殑澶氱瀹炵幇锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498595&idx=1&sn=4e5308930e151a609baa2df820e48a89&chksm=cf22244af855ad5c71822cb33e828ce652c6f34202096a9344922b86dcbc08076d7922acde5f&token=1990771297&lang=zh_CN#rd) +- [鎴戜滑涓轰粈涔堣鍒嗗簱鍒嗚〃锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498625&idx=1&sn=0d7bd9d1b46eeff4c715a6761355e9b0&chksm=cf2224a8f855adbea8931c8e011711f6c70cffeef8ddf8b87729c710eacef11b46eef80fda36&token=1990771297&lang=zh_CN#rd) +- [鑱婅亰楂樺彲鐢ㄧ殑 11 涓叧閿妧宸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498784&idx=1&sn=aad1c00d6eafb0c1f08959612c69959a&chksm=cf222309f855aa1f71ef9cf470bfa72ac73365c401ec7c7d0c3b241a9116c3112f83760793e8&token=1990771297&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛氬垎甯冨紡浜嬪姟璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498358&idx=1&sn=aa6c7ceb61b73267d68d1b4fb7ccc2ed&chksm=cf22255ff855ac495861d57df276517e89779006267fa8413fe925cc15b0c3e0b0f1b1a5675e&token=1990771297&lang=zh_CN#rd) +- [鍑犵涓绘祦鐨勫垎甯冨紡瀹氭椂浠诲姟锛屼綘鐭ラ亾鍝簺锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498121&idx=1&sn=e3d7e4f5297c7b2390b412a9bafc3385&chksm=cf2226a0f855afb669cde8d7f400fb334bd4c75a8c672d1208667387d03d2dfd24884e60b825&token=1990771297&lang=zh_CN#rd) +- [redis鍒嗗竷寮忛攣鐨8澶у潙锛岃寰楁嬁灏忔湰鏈涓嬫潵鍟(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495390&idx=1&sn=87cc1567c709cfa67b43dd8d273bb426&chksm=cf2231f7f855b8e17919f7763469d87c47d9b4c4ad25aba7e6ff60fa33b048bc47a4afd287fc&token=1990771297&lang=zh_CN#rd) +- [妗嗘灦绡囷細鍒嗗竷寮忎竴鑷存цВ鍐虫柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490468&idx=2&sn=91b8e5dd2ce3db218708b5c736fce700&chksm=cf21c48df8564d9b30164e1dbf9b5ebcc1847a9450d08ee146c98eb53107af475149ad12a748&token=1990771297&lang=zh_CN#rd) +- [杩欎笁骞磋鍒嗗竷寮忓潙鎯ㄤ簡锛屾洕鍏夊崄澶у潙](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488553&idx=2&sn=fa13e9698e59f5a5485d3d3d4b8ef2b1&chksm=cf21cb00f8564216277806780c64e13c48fe32009f588349b3365afa8de97bd8ef192507bd50&token=1990771297&lang=zh_CN#rd) \ No newline at end of file From 8b1da559828aabcdc18a343cd63b1a69eadffe03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 10:58:41 +0800 Subject: [PATCH 18/47] =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E4=BA=BA=E7=94=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 "\347\250\213\345\272\217\344\272\272\347\224\237&\351\235\242\350\257\225\345\273\272\350\256\256/README.MD" diff --git "a/\347\250\213\345\272\217\344\272\272\347\224\237&\351\235\242\350\257\225\345\273\272\350\256\256/README.MD" "b/\347\250\213\345\272\217\344\272\272\347\224\237&\351\235\242\350\257\225\345\273\272\350\256\256/README.MD" new file mode 100644 index 0000000..ae9424d --- /dev/null +++ "b/\347\250\213\345\272\217\344\272\272\347\224\237&\351\235\242\350\257\225\345\273\272\350\256\256/README.MD" @@ -0,0 +1,6 @@ +## 绋嬪簭浜虹敓 + +- [璺熷ぇ瀹惰亰鑱婂ぉ锛屾垜鍛ㄦ湯閮藉湪骞插暐](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493222&idx=1&sn=29eb95b01b54bed2abbcf5a72285b38a&chksm=cf22394ff855b059b29ffb562e22d8ecc048caa743eb5c6257ad474676940ba8d36840f075ed&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [璺熷ぇ瀹惰亰鑱婂浣曞涔燷(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495313&idx=1&sn=7f521db08e84b07177d847c60071d709&chksm=cf2231b8f855b8ae765f2dd584994836c0b74ce0ef761653233c3af04f38b4a1aa1833f7a55a&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鍐欎簡涓ゅ勾鏂囩珷锛岀粓浜庣牬涓囷紒](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247489788&idx=1&sn=66efbc1b718915bfd8996b521d317a55&chksm=cf21c7d5f8564ec3928957d3c23959f5cb99d9f9bd2c1bab0dcf1750a6a017c3869189a3651a&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [澶忓ぉ鐨勯锛屾垜姘歌繙璁板緱~](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487989&idx=2&sn=9eb923d4c8c22bee1a408e4f86983f65&chksm=cf21cedcf85647cac6fe4bfa6d732856fd0335f4fcadad4d1e0dd10702e95905e06c9e38e8e8&token=162724582&lang=zh_CN&scene=21#wechat_redirect) \ No newline at end of file From a293441db11c089e849ef9d375138339957bd9b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 23 Jul 2022 11:06:27 +0800 Subject: [PATCH 19/47] Add files via upload --- .../README.MD" | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 "\347\250\213\345\272\217\345\221\230\345\277\205\345\244\207\345\267\245\345\205\267\347\257\207/README.MD" diff --git "a/\347\250\213\345\272\217\345\221\230\345\277\205\345\244\207\345\267\245\345\205\267\347\257\207/README.MD" "b/\347\250\213\345\272\217\345\221\230\345\277\205\345\244\207\345\267\245\345\205\267\347\257\207/README.MD" new file mode 100644 index 0000000..73e3dce --- /dev/null +++ "b/\347\250\213\345\272\217\345\221\230\345\277\205\345\244\207\345\267\245\345\205\267\347\257\207/README.MD" @@ -0,0 +1,8 @@ + +## 绋嬪簭鍛樺伐鍏风瘒 + +- [鐢ㄤ唬鐮佺敾鏃跺簭鍥撅紒YYDS](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500478&idx=1&sn=ec674e3eadba9bb87849292f46f84989&chksm=cf221d97f8559481fae8f0e1871ae19499568b3e49980e92018c4a5acdcf743a37da79c2436d&token=1990771297&lang=zh_CN#rd) +- [绋嬪簭鍛樺繀澶囧熀纭锛欸it 鍛戒护鍏ㄦ柟浣嶅涔燷(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488013&idx=1&sn=7011a51a347e3da2cf8f8540b4d9a5d6&chksm=cf21cd24f8564432d74bc13551ebdeae71a71ea31e339c7a8f1f42f181078b5192475d598626&token=1569911403&lang=zh_CN&scene=21#wechat_redirect) +- [MyBatis 鎻掍欢鍘熺悊涓庡疄鎴榏(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498815&idx=1&sn=737e8f92ff526dac408af7a409f3a3d4&chksm=cf222316f855aa007fe16f7bca0636c552f238deb766bb54c34db7b633c13451fc91a4fe8a3e&token=1990771297&lang=zh_CN#rd) +- [鏇村揩鐨凪aven鏉ヤ簡锛岄熷害鎻愬崌浜8鍊嶏紒](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497470&idx=1&sn=7a3a5bb48f7d3b1a627460b698e7e9a0&chksm=cf2229d7f855a0c1e892c23f7690e6ab1a745040142672b982a3934c8307901d0be03dff3cff&token=1990771297&lang=zh_CN#rd) +- [鍥犱负鐭ラ亾浜30+娆惧湪绾垮伐鍏凤紝鎴戠殑宸ヤ綔鏁堢巼鎻愬崌500%!](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488041&idx=1&sn=26d55c23ecd439860c4d9865bec61976&chksm=cf21cd00f8564416fe991974d24a51798d925b2e79d62935accf02aa6895c7b02adf48e9e207&token=1990771297&lang=zh_CN#rd) \ No newline at end of file From ef7f333d2355d429e89ed180de4d25da56f748a5 Mon Sep 17 00:00:00 2001 From: whx123 <327658337@qq.com> Date: Sat, 23 Jul 2022 12:13:44 +0800 Subject: [PATCH 20/47] update --- README.md | 38 +++++++++++++++---- .../README.MD" | 8 ++++ .../READEME.MD" | 17 +++++++++ .../README.MD" | 8 ++++ .../README.MD" | 7 ++++ .../README.MD" | 7 ++++ 6 files changed, 78 insertions(+), 7 deletions(-) create mode 100644 "\344\270\255\351\227\264\344\273\266/README.MD" create mode 100644 "\345\267\245\344\275\234\346\200\273\347\273\223/READEME.MD" create mode 100644 "\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" create mode 100644 "\347\274\223\345\255\230Redis\346\200\273\347\273\223/README.MD" create mode 100644 "\351\253\230\345\271\266\345\217\221/README.MD" diff --git a/README.md b/README.md index 7327214..68aacb1 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,40 @@ -鏁寸悊涓浠借秴绾ц缁嗙殑Java闈㈣瘯棰+鍚庣鍩虹+鏃ュ父宸ヤ綔鎬荤粨锛屽仛鏈鏆栧績鐨勭敺瀛╁瓙锛屽悗闈細鎱㈡參鎶婄瓟妗堝畬鍠勶紝甯屾湜澶у鎵惧埌鐞嗘兂offer +## 鍓嶈█ -猸 鐐瑰彸涓婅缁欎竴涓 Star锛岄紦鍔辨妧鏈汉杈撳嚭鏇村骞茶揣锛岀埍浜 锛 +鏁寸悊涓浠借秴绾ц缁嗙殑Java闈㈣瘯棰+鍚庣鍩虹+鏃ュ父宸ヤ綔鎬荤粨锛屽仛鏈鏆栧績鐨勭敺瀛╁瓙锛屽悗闈細鎱㈡參瀹屽杽锛屽笇鏈涘ぇ瀹舵壘鍒扮悊鎯硂ffer -浣滆呮崱鐢拌灪鐨勫皬鐢峰锛屾氮杩硅繃鍑犲澶у巶锛屾帢閲戜紭绉鍒涗綔鑰咃紝CSDN鍗氫富銆 +猸 鐐瑰彸涓婅缁欎竴涓 Star锛岄紦鍔辨妧鏈汉杈撳嚭鏇村骞茶揣锛屾劅璋㈡劅璋紝鐖变簡锛 锛 -- 鍘熷垱绮惧搧100绡(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497536&idx=1&sn=3ac9934f607d79e51457fd01f4c8a4ef&chksm=cf222869f855a17fc30c744e5b7ccdeca407f3b7ddcca46bae1c93b1436ffc6fe417ccb8aef4&token=1990771297&lang=zh_CN#rd) +浣滆呮崱鐢拌灪鐨勫皬鐢峰锛屾氮杩硅繃鍑犲澶у巶锛**鎺橀噾浼樼鍒涗綔鑰**锛孋SDN鍗氫富锛岀煡涔庡崥涓汇備互涓嬪唴瀹瑰叏閮ㄥ嚭鑷叕浼楀彿锛**鎹$敯铻虹殑灏忕敺瀛**锛屾杩庡叧娉ㄣ + +- [鐢拌灪鍘熷垱绮惧搧100绡嘳(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497536&idx=1&sn=3ac9934f607d79e51457fd01f4c8a4ef&chksm=cf222869f855a17fc30c744e5b7ccdeca407f3b7ddcca46bae1c93b1436ffc6fe417ccb8aef4&token=1990771297&lang=zh_CN#rd) + +## 宸ヤ綔鎬荤粨 + +- [宸ヤ綔鎬荤粨锛佹棩蹇楁墦鍗扮殑15涓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494838&idx=1&sn=cdb15fd346bddf3f8c1c99f0efbd67d8&chksm=cf22339ff855ba891616c79d4f4855e228e34a9fb45088d7acbe421ad511b8d090a90f5b019f&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [25绉嶄唬鐮佸潖鍛抽亾鎬荤粨+浼樺寲绀轰緥](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490148&idx=1&sn=00a181bf74313f751b3ea15ebc303545&chksm=cf21c54df8564c5bc5b4600fce46619f175f7ae557956f449629c470a08e20580feef4ea8d53&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鑱婅亰鏃ュ父寮鍙戜腑锛屽浣曞噺灏慴ug鍛紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490662&idx=1&sn=d38a090611af7f64ee3c6a31331d5228&chksm=cf21c34ff8564a59e505e6edf3065a0fc506c6d2c96f492c8d8873cd46dedbe0704e43cb9c2e&token=1990771297&lang=zh_CN#rd) +- [宸ヤ綔鍥涘勾锛屽垎浜50涓浣犱唬鐮佹洿濂界殑灏忓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488708&idx=1&sn=6e2e0a740f5d42a59641487a0bf1e3bf&chksm=cf21cbedf85642fbb485fa1c7bf9af21923d8503f2542b6f8283ce79ddc683f7d9e45da83100&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鍐欎唬鐮佹湁杩16涓ソ涔犳儻锛屽彲浠ュ噺灏80%闈炰笟鍔$殑bug](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488097&idx=1&sn=eaca1f92ca3ccd9de00dbc4ef3e4029a&chksm=cf21cd48f856445e4cc24c1f8bcf18d1479bad0a37a87a2fb70717d8a4e65dcf7b4d5f83d24f&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java鏃ュ父寮鍙戠殑21涓潙锛屼綘韪╄繃鍑犱釜锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488115&idx=1&sn=bdd4a4ca36bc7ea902106d058e8537fb&chksm=cf21cd5af856444cb36af600705615454b0aaa2b289b97ddb52d594556ac07a1915b73ecce19&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [CAS涔愯閿佽В鍐冲苟鍙戦棶棰樼殑涓娆″疄璺礭(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487937&idx=1&sn=206a37bf6d6a7aa1d05674c479ed7a72&chksm=cf21cee8f85647fe7a082049a41c0f640f54976d2cdf4302b24c5517ca42b854eb84b13ece10&token=1990771297&lang=zh_CN#rd) +- [鍐欎唬鐮佹湁杩欎簺鎯虫硶锛屽悓浜嬫墠涓嶄細璁や负浣犳槸澶嶅埗绮樿创绋嬪簭鍛榏(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487961&idx=1&sn=e646231067968d9f58e6665914293f9a&chksm=cf21cef0f85647e6f3ff2feece004ac3bd979e37fe45103c88d0f299dfe632a5cf6dd547c1d9&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囷細Java鏃ユ湡澶勭悊鐨勫崄涓潙](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487973&idx=1&sn=0f713413098fb579e5f200b829f71e89&chksm=cf21ceccf85647da450765d79bf5943da551c3be950447063b9f8c77c21bf2a39b99387a949b&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鍐呭瓨娉勬紡闂鐨勫垎鏋愬拰瑙e喅鏂规](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487986&idx=1&sn=d681a585ac489703788e3baa48eb9aa3&chksm=cf21cedbf85647cd23bbab9dfec63e6877f83c34efb19bd16075d5d90fea91d3f4a20fc77921&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囧熀纭锛氬姞绛鹃獙绛綸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488022&idx=1&sn=70484a48173d36006c8db1dfb74ab64d&chksm=cf21cd3ff8564429a1205f6c1d78757faae543111c8461d16c71aaee092fe3e0fed870cc5e0e&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [璁颁竴娆℃帴鍙fц兘浼樺寲瀹炶返鎬荤粨锛氫紭鍖栨帴鍙fц兘鐨勫叓涓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488004&idx=1&sn=00840efd9c0bd0a7f172b59eb2ca130f&chksm=cf21cd2df856443bf21d8e09cfe5c8452ecaf82e3c2210fca3b28829ded04defddcf63c0a59b&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囧熀纭锛氬浣曞畨鍏ㄤ紶杈撳瓨鍌ㄧ敤鎴峰瘑鐮侊紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488117&idx=1&sn=5d3d0eda0ed45f3f576e211de31ca3a9&chksm=cf21cd5cf856444af1407a94a2abf445265ca7c5f5855cfa1c223cb209e99040c7889621f231&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓娆′唬鐮佷紭鍖栧疄璺碉紝鐢ㄤ簡妯℃澘鏂规硶+绛栫暐+宸ュ巶鏂规硶妯″紡](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488061&idx=1&sn=1d9ab7954b03521ab81ecf033c0e5e50&chksm=cf21cd14f8564402b213f0ef908bbdb0e12fed4b281c5803b8e539cacb1551654194becfb7d6&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [淇濊瘉鎺ュ彛鏁版嵁瀹夊叏鐨10绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500285&idx=1&sn=7d0723f25d46e858859cfd79acb6fb9d&chksm=cf221ed4f85597c2093f81baa5fdedc65817bf2d23a7951236836b0f54c2335695cbed61cd13&token=1990771297&lang=zh_CN#rd) + +## 绂忓埄 500+椤靛師鍒涢潰璇曢 + +- [鐢拌灪鍘熷垱500+椤甸潰璇曢](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499943&idx=1&sn=fe869c0a97a306e42830336fe74e17a6&chksm=cf221f8ef8559698781709bfbccbb85087286e48434905fb18bec3a3ec0af7329c2a1632c230&token=1990771297&lang=zh_CN#rd) ## 涓汉鍏紬鍙 -寰俊鎼滐細鎹$敯铻虹殑灏忕敺瀛 +寰俊鎼滃叕浼楀彿锛**鎹$敯铻虹殑灏忕敺瀛** -- 濡傛灉浣犳槸涓埍瀛︿範鐨勫ソ瀛╁瓙锛屽彲浠ュ叧娉ㄦ垜鍏紬鍙凤紙鎵弿涓嬮潰浜岀淮鐮侊紝杩樻湁寰堝寰堝骞茶揣鏂囩珷锛夛紝涓璧峰涔犺璁哄搱~~ +- 灏忎紮浼村彲浠ュ叧娉ㄦ垜鐨勫叕浼楀彿锛堟壂鎻忎笅闈簩缁寸爜锛岃繕鏈**寰堝寰堝骞茶揣鏂囩珷**锛夛紝涓璧峰涔犺璁哄搱~~ -![image](https://user-images.githubusercontent.com/20244922/179399354-8a9fd2a8-42ba-4303-9ce5-04891e899e6d.png) +![鎵竴鎵玗(https://user-images.githubusercontent.com/20244922/179399354-8a9fd2a8-42ba-4303-9ce5-04891e899e6d.png) diff --git "a/\344\270\255\351\227\264\344\273\266/README.MD" "b/\344\270\255\351\227\264\344\273\266/README.MD" new file mode 100644 index 0000000..74d80b2 --- /dev/null +++ "b/\344\270\255\351\227\264\344\273\266/README.MD" @@ -0,0 +1,8 @@ +## 涓棿浠 + +- [涓鏂囧揩閫熷叆闂ㄥ垎搴撳垎琛ㄤ腑闂翠欢 Sharding-JDBC 锛堝繀淇锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499781&idx=1&sn=74bbb25c9347408f1edf7f8c9c82d7cf&chksm=cf221f2cf855963a6549069deeabe93bb6d6e889bcd086668bf6f0e23327fa1ddb31adc6d10c&token=1990771297&lang=zh_CN#rd) +- [鍏ㄦ柟浣嶅姣擹ookeeper銆丒ureka銆丯acos銆丆onsul鍜孍tcd](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498268&idx=1&sn=7b24b8625fb4ff88d50c9bd55335f478&chksm=cf222535f855ac230dfca629127f93efec606641d7338c29a8d41e7d2016a7f0b6ec28a432a0&token=1990771297&lang=zh_CN#rd) +- [娑堟伅闃熷垪缁忓吀鍗佽繛闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497847&idx=1&sn=29a32672b712e7dfadfa36c9902b2ec7&chksm=cf22275ef855ae484fb3f51a5726e9a4bc45222e8fbbd33631d177dc4b5619c36889ea178463&token=1990771297&lang=zh_CN#rd) +- [Kafka鎬ц兘绡囷細涓轰綍Kafka杩欎箞"蹇"锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488717&idx=1&sn=006c65f9a9a5796961c42f3cafc37cb4&chksm=cf21cbe4f85642f2e8ff948f8de8a69508783cee6dafd22512d6a06cd03f7065001bd1d8d87b&token=1990771297&lang=zh_CN#rd) +- [鍚庣绋嬪簭鍛樺繀澶囷細RocketMQ鐩稿叧娴佺▼鍥/鍘熺悊鍥綸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487949&idx=1&sn=888e0917884b2918a94053e5cd560e00&chksm=cf21cee4f85647f24877791d574f5ef3f979fc9c4c84ca3fd1ea1aa08ab30c1041ad3aaa5650&token=1990771297&lang=zh_CN#rd) +- [ZooKeeper鐨勫崄浜岃繛闂紝浣犻《寰椾簡鍢涳紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488047&idx=1&sn=4913c7e1c3b8835f7512d8dc6b845727&chksm=cf21cd06f8564410cce6121230256facb1ab3b5a9ed35579896f428d84bdea7b86836109d575&token=162724582&lang=zh_CN&scene=21#wechat_redirect) \ No newline at end of file diff --git "a/\345\267\245\344\275\234\346\200\273\347\273\223/READEME.MD" "b/\345\267\245\344\275\234\346\200\273\347\273\223/READEME.MD" new file mode 100644 index 0000000..6c258b9 --- /dev/null +++ "b/\345\267\245\344\275\234\346\200\273\347\273\223/READEME.MD" @@ -0,0 +1,17 @@ +## 宸ヤ綔鎬荤粨 + +- [宸ヤ綔鎬荤粨锛佹棩蹇楁墦鍗扮殑15涓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494838&idx=1&sn=cdb15fd346bddf3f8c1c99f0efbd67d8&chksm=cf22339ff855ba891616c79d4f4855e228e34a9fb45088d7acbe421ad511b8d090a90f5b019f&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [25绉嶄唬鐮佸潖鍛抽亾鎬荤粨+浼樺寲绀轰緥](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490148&idx=1&sn=00a181bf74313f751b3ea15ebc303545&chksm=cf21c54df8564c5bc5b4600fce46619f175f7ae557956f449629c470a08e20580feef4ea8d53&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鑱婅亰鏃ュ父寮鍙戜腑锛屽浣曞噺灏慴ug鍛紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490662&idx=1&sn=d38a090611af7f64ee3c6a31331d5228&chksm=cf21c34ff8564a59e505e6edf3065a0fc506c6d2c96f492c8d8873cd46dedbe0704e43cb9c2e&token=1990771297&lang=zh_CN#rd) +- [宸ヤ綔鍥涘勾锛屽垎浜50涓浣犱唬鐮佹洿濂界殑灏忓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488708&idx=1&sn=6e2e0a740f5d42a59641487a0bf1e3bf&chksm=cf21cbedf85642fbb485fa1c7bf9af21923d8503f2542b6f8283ce79ddc683f7d9e45da83100&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鍐欎唬鐮佹湁杩16涓ソ涔犳儻锛屽彲浠ュ噺灏80%闈炰笟鍔$殑bug](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488097&idx=1&sn=eaca1f92ca3ccd9de00dbc4ef3e4029a&chksm=cf21cd48f856445e4cc24c1f8bcf18d1479bad0a37a87a2fb70717d8a4e65dcf7b4d5f83d24f&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java鏃ュ父寮鍙戠殑21涓潙锛屼綘韪╄繃鍑犱釜锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488115&idx=1&sn=bdd4a4ca36bc7ea902106d058e8537fb&chksm=cf21cd5af856444cb36af600705615454b0aaa2b289b97ddb52d594556ac07a1915b73ecce19&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [CAS涔愯閿佽В鍐冲苟鍙戦棶棰樼殑涓娆″疄璺礭(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487937&idx=1&sn=206a37bf6d6a7aa1d05674c479ed7a72&chksm=cf21cee8f85647fe7a082049a41c0f640f54976d2cdf4302b24c5517ca42b854eb84b13ece10&token=1990771297&lang=zh_CN#rd) +- [鍐欎唬鐮佹湁杩欎簺鎯虫硶锛屽悓浜嬫墠涓嶄細璁や负浣犳槸澶嶅埗绮樿创绋嬪簭鍛榏(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487961&idx=1&sn=e646231067968d9f58e6665914293f9a&chksm=cf21cef0f85647e6f3ff2feece004ac3bd979e37fe45103c88d0f299dfe632a5cf6dd547c1d9&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囷細Java鏃ユ湡澶勭悊鐨勫崄涓潙](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487973&idx=1&sn=0f713413098fb579e5f200b829f71e89&chksm=cf21ceccf85647da450765d79bf5943da551c3be950447063b9f8c77c21bf2a39b99387a949b&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鍐呭瓨娉勬紡闂鐨勫垎鏋愬拰瑙e喅鏂规](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487986&idx=1&sn=d681a585ac489703788e3baa48eb9aa3&chksm=cf21cedbf85647cd23bbab9dfec63e6877f83c34efb19bd16075d5d90fea91d3f4a20fc77921&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囧熀纭锛氬姞绛鹃獙绛綸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488022&idx=1&sn=70484a48173d36006c8db1dfb74ab64d&chksm=cf21cd3ff8564429a1205f6c1d78757faae543111c8461d16c71aaee092fe3e0fed870cc5e0e&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [璁颁竴娆℃帴鍙fц兘浼樺寲瀹炶返鎬荤粨锛氫紭鍖栨帴鍙fц兘鐨勫叓涓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488004&idx=1&sn=00840efd9c0bd0a7f172b59eb2ca130f&chksm=cf21cd2df856443bf21d8e09cfe5c8452ecaf82e3c2210fca3b28829ded04defddcf63c0a59b&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囧熀纭锛氬浣曞畨鍏ㄤ紶杈撳瓨鍌ㄧ敤鎴峰瘑鐮侊紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488117&idx=1&sn=5d3d0eda0ed45f3f576e211de31ca3a9&chksm=cf21cd5cf856444af1407a94a2abf445265ca7c5f5855cfa1c223cb209e99040c7889621f231&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓娆′唬鐮佷紭鍖栧疄璺碉紝鐢ㄤ簡妯℃澘鏂规硶+绛栫暐+宸ュ巶鏂规硶妯″紡](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488061&idx=1&sn=1d9ab7954b03521ab81ecf033c0e5e50&chksm=cf21cd14f8564402b213f0ef908bbdb0e12fed4b281c5803b8e539cacb1551654194becfb7d6&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [淇濊瘉鎺ュ彛鏁版嵁瀹夊叏鐨10绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500285&idx=1&sn=7d0723f25d46e858859cfd79acb6fb9d&chksm=cf221ed4f85597c2093f81baa5fdedc65817bf2d23a7951236836b0f54c2335695cbed61cd13&token=1990771297&lang=zh_CN#rd) \ No newline at end of file diff --git "a/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" "b/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" new file mode 100644 index 0000000..15772be --- /dev/null +++ "b/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" @@ -0,0 +1,8 @@ +## 鐢熶骇闂鍒嗘瀽 + +- [鍐呭瓨娉勬紡闂鐨勫垎鏋愬拰瑙e喅鏂规](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487986&idx=1&sn=d681a585ac489703788e3baa48eb9aa3&chksm=cf21cedbf85647cd23bbab9dfec63e6877f83c34efb19bd16075d5d90fea91d3f4a20fc77921&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鐢熶骇闂鍒嗘瀽锛乨elete in瀛愭煡璇笉璧扮储寮曪紵锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495170&idx=1&sn=ce914de3abdb0d887e286b680b25111f&chksm=cf22312bf855b83d31a00da110626747df8e69fca1bc310642c56e39d663b006a8105f9fb1e1&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [鎵嬫妸鎵嬫暀浣犲垎鏋怣ysql姝婚攣闂](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487979&idx=1&sn=588c83d77a8851f3b3c18cd68ed9c454&chksm=cf21cec2f85647d4a77cc239ae9a4cfd31bb8832be3d98540a08ea8b4a1f46b38cf736210a02&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [绾跨▼姹犺繍鐢ㄤ笉褰撶殑涓娆$嚎涓婁簨鏁匽(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487992&idx=1&sn=733335f2f69d743712915abc99f83b1d&chksm=cf21ced1f85647c7ab8c5d8bc4e8206b04acb5fd4feb94b8d088a782ed458b82aab69dba82aa&token=1990771297&lang=zh_CN#rd) +- [鐩樼偣MySQL鎱㈡煡璇㈢殑12涓師鍥燷(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499624&idx=1&sn=561b9cb7fe831ca7cb2d9fd65691e85e&chksm=cf222041f855a957ac50c0a53baaec6d26be32427259b2974450620f33a8c834419fe535e83d&token=1990771297&lang=zh_CN#rd) +- [绾跨▼姹犲浣曠洃鎺э紝鎵嶈兘甯姪寮鍙戣呭揩閫熷畾浣嶇嚎涓婇敊璇紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497444&idx=1&sn=1b2cc8b4685413149e46c814e468c6e6&chksm=cf2229cdf855a0db5f2da881d27c69f11c69480552985baa2a08cbe4d5a48bad7fb31a78dd5a&token=1990771297&lang=zh_CN#rd) \ No newline at end of file diff --git "a/\347\274\223\345\255\230Redis\346\200\273\347\273\223/README.MD" "b/\347\274\223\345\255\230Redis\346\200\273\347\273\223/README.MD" new file mode 100644 index 0000000..996dc81 --- /dev/null +++ "b/\347\274\223\345\255\230Redis\346\200\273\347\273\223/README.MD" @@ -0,0 +1,7 @@ +## 缂撳瓨 + +- [澶у巶缁忓吀闈㈣瘯棰橈細Redis涓轰粈涔堣繖涔堝揩锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490736&idx=1&sn=95377e729b27f0afefbaa5f20239fc9d&chksm=cf21c399f8564a8ff5239fbaa86d616a48086b47b3bb03c8ccc1d3cc066e41c75e16638c3fc8&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [缇庡洟浜岄潰锛歊edis涓嶮ySQL鍙屽啓涓鑷存у浣曚繚璇侊紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490243&idx=1&sn=ff11c3aab9ada3b16d7f2b57c846d567&chksm=cf21c5eaf8564cfc59e3d0d56fd02b0f5513015005f498381be4d12db462442a49aabe4159ef&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [浣跨敤Redis锛屼綘蹇呴』鐭ラ亾鐨21涓敞鎰忚鐐筣(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488325&idx=1&sn=6d9bbe5bf2f2f2904755de5c786fb21b&chksm=cf21cc6cf856457a9d23b3e25ec48107a582e709f05964dfdb5ba77e9a239d8307334c485fdf&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓冪鏂规锛佹帰璁≧edis鍒嗗竷寮忛攣鐨勬纭娇鐢ㄥЭ鍔縘(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488142&idx=1&sn=79a304efae7a814b6f71bbbc53810c0c&chksm=cf21cda7f85644b11ff80323defb90193bc1780b45c1c6081f00da85d665fd9eb32cc934b5cf&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [2W瀛楋紒璇﹁В20閬揜edis缁忓吀闈㈣瘯棰橈紒锛堢弽钘忕増锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494124&idx=1&sn=c185f7d999d5f006608d05707a8a7eea&chksm=cf2236c5f855bfd329c6e2ee27f23f8131ebcd312960190a10f1a819d67f07a21a08ad17f263&token=162724582&lang=zh_CN&scene=21#wechat_redirect) \ No newline at end of file diff --git "a/\351\253\230\345\271\266\345\217\221/README.MD" "b/\351\253\230\345\271\266\345\217\221/README.MD" new file mode 100644 index 0000000..0ce39a5 --- /dev/null +++ "b/\351\253\230\345\271\266\345\217\221/README.MD" @@ -0,0 +1,7 @@ +## 楂樺苟鍙 +- [缇庡洟浜岄潰锛歊edis涓嶮ySQL鍙屽啓涓鑷存у浣曚繚璇侊紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490243&idx=1&sn=ff11c3aab9ada3b16d7f2b57c846d567&chksm=cf21c5eaf8564cfc59e3d0d56fd02b0f5513015005f498381be4d12db462442a49aabe4159ef&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [Redis涓讳粠銆佸摠鍏点 Cluster闆嗙兢涓閿呯锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498254&idx=1&sn=6489360c3b226df9811e66cb40ec7656&chksm=cf222527f855ac3112628bcec7730064fee3fdbe869fbd0a7410c22766a0c036a7e5c1a69fa0&token=1990771297&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳亰鑱奙ySQL鐨勪富浠嶿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497982&idx=1&sn=bb589329cceb5462fc41f66ec63dbf56&chksm=cf2227d7f855aec16dd4d3b3425c0401850eeaf2c9cdc82e82722d38a00c24ee9ccfa3353774&token=1990771297&lang=zh_CN#rd) +- [鑱婅亰骞傜瓑璁捐](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497427&idx=1&sn=2ed160c9917ad989eee1ac60d6122855&chksm=cf2229faf855a0ecf5eb34c7335acdf6420426490ee99fc2b602d54ff4ffcecfdab24eeab0a3&token=1990771297&lang=zh_CN#rd) +- [鑱婅亰鎺ュ彛鎬ц兘浼樺寲鐨11涓皬鎶宸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497361&idx=1&sn=a0a2b0f92804921ba3d31b6236f275c2&chksm=cf2229b8f855a0aec650f4e0c3f105aa08e52fabbc54807dd37fefc4873749698b2b1445b59f&token=1990771297&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氱鏉鍦烘櫙涔濅釜缁嗚妭](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493227&idx=1&sn=10e5064d7d224c69dce400e90cd44de6&chksm=cf223942f855b0541ada22a312e0d4ffbc99df463678247a0dede3ef16eb81e3344a4a54ceaf&token=1990771297&lang=zh_CN#rd) \ No newline at end of file From 6622f7fc024bda2bdc0f14fca6bb0e8cabba3561 Mon Sep 17 00:00:00 2001 From: whx123 <327658337@qq.com> Date: Sat, 23 Jul 2022 12:21:47 +0800 Subject: [PATCH 21/47] update --- .../README.MD" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" "b/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" index 2fa4767..32264de 100644 --- "a/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" +++ "b/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" @@ -10,4 +10,4 @@ - [闈㈣瘯蹇呭锛氳櫨鐨湇鍔$15杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497256&idx=1&sn=3b799c2d514aa25e85a6faa60d639a0b&chksm=cf222901f855a017b73356b99b830b8800a7a9172fab891c5759d8dd69a270872ea9480c0b7c&token=2001057130&lang=zh_CN#rd) - [瀹囧畽鏉′竴闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495342&idx=1&sn=54e1c0c16a6467001524c34818025331&chksm=cf223187f855b89140db5ca429e6efc19d0111abf7f36b78a0ecd73b00fded1ff1e7ba32a6f1&token=2001057130&lang=zh_CN#rd) - [铓傝殎閲戞湇涓闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493270&idx=1&sn=1c78a81d6e1bd0f0fd947fe8c3a33e32&chksm=cf2239bff855b0a9627855f20a17799e0506eb7548a409bfa0ee0450328d7519ec70f7b962cc&token=2001057130&lang=zh_CN#rd) -- [鐢拌灪绮惧搧闈㈣瘯PDF鍙戝竷锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499943&idx=1&sn=fe869c0a97a306e42830336fe74e17a6&chksm=cf221f8ef8559698781709bfbccbb85087286e48434905fb18bec3a3ec0af7329c2a1632c230&token=1990771297&lang=zh_CN#rd锛 \ No newline at end of file +- [鐢拌灪绮惧搧闈㈣瘯PDF鍙戝竷](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499943&idx=1&sn=fe869c0a97a306e42830336fe74e17a6&chksm=cf221f8ef8559698781709bfbccbb85087286e48434905fb18bec3a3ec0af7329c2a1632c230&token=1990771297&lang=zh_CN#rd锛 \ No newline at end of file From 990ab54b5f96691580ee9f6efd832f830d9fb10d Mon Sep 17 00:00:00 2001 From: whx123 <327658337@qq.com> Date: Sat, 23 Jul 2022 12:23:57 +0800 Subject: [PATCH 22/47] update --- .../README.MD" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" "b/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" index 32264de..04f4506 100644 --- "a/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" +++ "b/\345\244\247\345\216\202\351\235\242\350\257\225\347\234\237\351\242\230/README.MD" @@ -10,4 +10,4 @@ - [闈㈣瘯蹇呭锛氳櫨鐨湇鍔$15杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497256&idx=1&sn=3b799c2d514aa25e85a6faa60d639a0b&chksm=cf222901f855a017b73356b99b830b8800a7a9172fab891c5759d8dd69a270872ea9480c0b7c&token=2001057130&lang=zh_CN#rd) - [瀹囧畽鏉′竴闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495342&idx=1&sn=54e1c0c16a6467001524c34818025331&chksm=cf223187f855b89140db5ca429e6efc19d0111abf7f36b78a0ecd73b00fded1ff1e7ba32a6f1&token=2001057130&lang=zh_CN#rd) - [铓傝殎閲戞湇涓闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493270&idx=1&sn=1c78a81d6e1bd0f0fd947fe8c3a33e32&chksm=cf2239bff855b0a9627855f20a17799e0506eb7548a409bfa0ee0450328d7519ec70f7b962cc&token=2001057130&lang=zh_CN#rd) -- [鐢拌灪绮惧搧闈㈣瘯PDF鍙戝竷](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499943&idx=1&sn=fe869c0a97a306e42830336fe74e17a6&chksm=cf221f8ef8559698781709bfbccbb85087286e48434905fb18bec3a3ec0af7329c2a1632c230&token=1990771297&lang=zh_CN#rd锛 \ No newline at end of file +- [鐢拌灪绮惧搧闈㈣瘯PDF鍙戝竷](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499943&idx=1&sn=fe869c0a97a306e42830336fe74e17a6&chksm=cf221f8ef8559698781709bfbccbb85087286e48434905fb18bec3a3ec0af7329c2a1632c230&token=1990771297&lang=zh_CN#rd) \ No newline at end of file From 25b5939239822ba0dd3f0a306e0aaa10d190884e Mon Sep 17 00:00:00 2001 From: whx123 <327658337@qq.com> Date: Mon, 1 Aug 2022 09:14:34 +0800 Subject: [PATCH 23/47] ThreadLocal --- .../README.MD" | 3 ++- .../README.MD.bak" | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 "Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD.bak" diff --git "a/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" "b/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" index 0a1609f..a038f88 100644 --- "a/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" +++ "b/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD" @@ -18,4 +18,5 @@ - [鑰佹槸閬囧埌涔辩爜闂锛氬畠鏄浣曚骇鐢熺殑锛屽張濡備綍瑙e喅鍛紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487962&idx=1&sn=7424e843c80b228283fc08d4d24cc4bb&chksm=cf21cef3f85647e5a9c92d280624ad2564e885561a8b64cbf6722459f7c13da7421765321aa9&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [璋堣皥Java鍙嶅皠锛氫粠鍏ラ棬鍒板疄璺碉紝鍐嶅埌鍘熺悊](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487959&idx=1&sn=778114d611f18b0f307a3f3ab6cd9117&chksm=cf21cefef85647e84b77c0e46620e91cf5ff079785b58a7dc66e5ed7419e21e0da9180699617&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [Java绋嬪簭鍛樺繀澶囩殑涓浜涙祦绋嬪浘](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487946&idx=1&sn=57a86e1d2fe1a9ecf00594a0bb6baf5f&chksm=cf21cee3f85647f5cf2ba728cc0838923140130a18ad117e248cf9843460614fc855d556968a&token=162724582&lang=zh_CN&scene=21#wechat_redirect) -- [Java绋嬪簭鍛樺繀澶囷細鏌ョ湅鏃ュ織甯哥敤鐨刲inux鍛戒护](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487954&idx=1&sn=6c04ff4edfcfea52a82795bcb9ed8efd&chksm=cf21cefbf85647ed8df72a23307315be5d1b3d4974c128f111bfdaa84da37cf7b49ff65c1112&token=162724582&lang=zh_CN&scene=21#wechat_redirect) \ No newline at end of file +- [Java绋嬪簭鍛樺繀澶囷細鏌ョ湅鏃ュ織甯哥敤鐨刲inux鍛戒护](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487954&idx=1&sn=6c04ff4edfcfea52a82795bcb9ed8efd&chksm=cf21cefbf85647ed8df72a23307315be5d1b3d4974c128f111bfdaa84da37cf7b49ff65c1112&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [ThreadLocal鐨勫叓涓叧閿煡璇嗙偣](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500784&idx=1&sn=6519d0e092be4ed9d6f4da8d90deef2c&chksm=cf221cd9f85595cf9123043241e92a19ca9c212aa8527cfb2aeb9a2472c6bdab9045cf40f22f&token=349136600&lang=zh_CN#rd) \ No newline at end of file diff --git "a/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD.bak" "b/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD.bak" new file mode 100644 index 0000000..4ba4024 --- /dev/null +++ "b/Java\345\237\272\347\241\200\345\255\246\344\271\240/README.MD.bak" @@ -0,0 +1,21 @@ +## Java鍩虹绡囷紙鎸佺画鏇存柊涓級 +鈥 +鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 +鈥 +- [涓鏂囪鎳傜嚎绋嬫睜鐨勫伐浣滃師鐞嗭紙鏁呬簨鐧借瘽鏂囷級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488078&idx=1&sn=0a7cef472002f6582fd2354fba83706a&chksm=cf21cd67f85644716263c3a80cead9b7bb36d9677f6f8b06d0602077ece70fcafa9d20c1cffb&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Synchronized瑙f瀽鈥斺斿鏋滀綘鎰挎剰涓灞備竴灞傚墺寮鎴戠殑蹇僝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487942&idx=1&sn=bbc68d1b9da23bf6474378e310b1ef1b&chksm=cf21ceeff85647f9ad7a08226849fcba3f9481387d13b17a5787fb94027647de81c349f9e390&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [寮傛缂栫▼鍒╁櫒锛欳ompletableFuture璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490456&idx=1&sn=95836324db57673a4d7aea4fb233c0d2&chksm=cf21c4b1f8564da72dc7b39279362bcf965b1374540f3b339413d138599f7de59a5f977e3b0e&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java鏃ュ父寮鍙戠殑21涓潙锛屼綘韪╄繃鍑犱釜锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488115&idx=1&sn=bdd4a4ca36bc7ea902106d058e8537fb&chksm=cf21cd5af856444cb36af600705615454b0aaa2b289b97ddb52d594556ac07a1915b73ecce19&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓浠絁ava绋嬪簭鍛樼殑鐝嶈棌涔﹀崟锛岃鎮ㄦ敞鎰忔煡鏀禲(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488066&idx=1&sn=44b5a90be1b69d7938dbcf516d85f041&chksm=cf21cd6bf856447d869278386250f59a926881375df848e54f86a21682bdab50f9e09ca56fbd&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭锛欽DK 5-15閮芥湁鍝簺缁忓吀鏂扮壒鎬(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488058&idx=1&sn=aab4d0dc9020cb62710086474ca90baf&chksm=cf21cd13f8564405040593daa45c62aec218e13f5ff42d679c59f768dd4fcc53ddcf34e0a454&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [绋嬪簭鍛樺繀澶囧熀纭锛欸it 鍛戒护鍏ㄦ柟浣嶅涔燷(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488013&idx=1&sn=7011a51a347e3da2cf8f8540b4d9a5d6&chksm=cf21cd24f8564432d74bc13551ebdeae71a71ea31e339c7a8f1f42f181078b5192475d598626&token=162724582&ang=zh_CN&scene=21#wechat_redirect) +- [缁欎綘鐨凧ava绋嬪簭鎷嶄釜鐗囧瓙鍚э細jstack鍛戒护瑙f瀽](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487990&idx=1&sn=b5b3c565392f39e5ac517696603b2ed9&chksm=cf21cedff85647c960407dce77fe04d08e51f8c7332310ccacd925be5567c187aa761dd1d1c8&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭缁撴瀯鍥綸(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487985&idx=1&sn=ead28c6c8d81b98e59603b848d250b30&chksm=cf21ced8f85647ce336f19016c7ff1936b21c81066815c8f28b830098716111548edb9767b21&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囷細搴忓垪鍖栧叏鏂逛綅瑙f瀽](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487980&idx=1&sn=2a9ce519f87a1ffe1511022e6724208e&chksm=cf21cec5f85647d357c79860171fc1799ef3c44a2bdd0716e8437e31708a17d9000b4224bd36&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [浼樺寲if-else浠g爜鐨勫叓绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487970&idx=1&sn=c296bb03419adf93955c6d0f27e56b29&chksm=cf21cecbf85647dd0ef5160559bc0d524a4be004a28bc5d2770a43409e3b090123c0930cf047&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭锛氭硾鍨嬭В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487964&idx=1&sn=24d7228cc10afc98c52dbf35da61a7b9&chksm=cf21cef5f85647e3d2b3f1e126cdc46d9e889d2e30c09716e0aea016beee3ca6d4c321cf60ae&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囧熀纭锛氬唴閮ㄧ被瑙f瀽](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487963&idx=1&sn=a0b49cd49a3dd51b6736c9ffa0a5997a&chksm=cf21cef2f85647e49a4bdb43f27583f03fb9ec4719767512dc084edd05675599c3bec44251fb&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [鑰佹槸閬囧埌涔辩爜闂锛氬畠鏄浣曚骇鐢熺殑锛屽張濡備綍瑙e喅鍛紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487962&idx=1&sn=7424e843c80b228283fc08d4d24cc4bb&chksm=cf21cef3f85647e5a9c92d280624ad2564e885561a8b64cbf6722459f7c13da7421765321aa9&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [璋堣皥Java鍙嶅皠锛氫粠鍏ラ棬鍒板疄璺碉紝鍐嶅埌鍘熺悊](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487959&idx=1&sn=778114d611f18b0f307a3f3ab6cd9117&chksm=cf21cefef85647e84b77c0e46620e91cf5ff079785b58a7dc66e5ed7419e21e0da9180699617&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囩殑涓浜涙祦绋嬪浘](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487946&idx=1&sn=57a86e1d2fe1a9ecf00594a0bb6baf5f&chksm=cf21cee3f85647f5cf2ba728cc0838923140130a18ad117e248cf9843460614fc855d556968a&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [Java绋嬪簭鍛樺繀澶囷細鏌ョ湅鏃ュ織甯哥敤鐨刲inux鍛戒护](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487954&idx=1&sn=6c04ff4edfcfea52a82795bcb9ed8efd&chksm=cf21cefbf85647ed8df72a23307315be5d1b3d4974c128f111bfdaa84da37cf7b49ff65c1112&token=162724582&lang=zh_CN&scene=21#wechat_redirect) \ No newline at end of file From c4ee666f89f31d45051ecd95b96a907fc4d4d840 Mon Sep 17 00:00:00 2001 From: whx123 <327658337@qq.com> Date: Mon, 22 Aug 2022 08:07:36 +0800 Subject: [PATCH 24/47] =?UTF-8?q?=E5=A4=9A=E7=BA=BF=E7=A8=8B=E9=9D=A2?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.MD" | 3 +- .../README.MD.bak" | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 "Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD.bak" diff --git "a/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" index 78fbb48..7397d39 100644 --- "a/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" +++ "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD" @@ -28,4 +28,5 @@ - [ZooKeeper鐨勫崄浜岃繛闂紝浣犻《寰椾簡鍢涳紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488047&idx=1&sn=4913c7e1c3b8835f7512d8dc6b845727&chksm=cf21cd06f8564410cce6121230256facb1ab3b5a9ed35579896f428d84bdea7b86836109d575&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [50閬揓ava闆嗗悎缁忓吀闈㈣瘯棰橈紙鏀惰棌鐗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488007&idx=1&sn=c5c16c8ec916c791e776216f3177c7e2&chksm=cf21cd2ef85644382a985e9fed1956d6ee60c86ce69e65f31f775318435fdb86bf368e26edf2&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [100閬揗ySQL鏁版嵁搴撶粡鍏搁潰璇曢瑙f瀽锛堟敹钘忕増锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488000&idx=1&sn=1c38db7fd110bbcc1ffb2d72a56aaf25&chksm=cf21cd29f856443f25a3fe98ae8e888faceef9bee45df045969b2cffb105363dcc2a4480bb74&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) -- [Spring 闈㈣瘯63闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497672&idx=1&sn=6ff0350e23d014b29a47bdec79af9ef5&chksm=cf2228e1f855a1f70fa78d9bd85c53dfbe154c1325aa1e203e4c918132c430d51bb68e961eda&token=2001057130&lang=zh_CN#rd) \ No newline at end of file +- [Spring 闈㈣瘯63闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497672&idx=1&sn=6ff0350e23d014b29a47bdec79af9ef5&chksm=cf2228e1f855a1f70fa78d9bd85c53dfbe154c1325aa1e203e4c918132c430d51bb68e961eda&token=2001057130&lang=zh_CN#rd) +- [澶氱嚎绋50杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247501446&idx=1&sn=3d83f3c1035c963c1fda3f77ab750e71&chksm=cf2219aff85590b9ba054dc33956a5cafe1beaa77b231dc4dc0cf891be3e16ef367f6b2ac4ed&token=245109219&lang=zh_CN#rd) \ No newline at end of file diff --git "a/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD.bak" "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD.bak" new file mode 100644 index 0000000..cfb8d9d --- /dev/null +++ "b/Java\351\235\242\350\257\225\351\242\230\351\233\206\347\273\223\345\217\267/README.MD.bak" @@ -0,0 +1,31 @@ +## 1. 闈㈣瘯鐪熼 + +鍏虫敞鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 +鈥 +- [oppo鍚庣16杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498750&idx=1&sn=19fe8b4fff28fe81db14e733053bbc74&chksm=cf2224d7f855adc1d0984980a4e3de31fe33329164a472ca8d8255a8a80b69b2e23850811323&token=2001057130&lang=zh_CN#rd) +- [灏忓巶鍚庣鍗佽繛闂紙闄勭瓟妗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498316&idx=1&sn=7749b78293b7b2af51eda99844e08a56&chksm=cf222565f855ac7324232e2af459f8b6e6eb5fd5b272c2b29bda08cc579421b6704a0de94b2e&token=2001057130&lang=zh_CN#rd) +- [鑵捐浜戝悗绔15杩為棶锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498171&idx=1&sn=f5a7ec25a569822be0f73fbcd413e8ba&chksm=cf222692f855af84fba419166fcd4235c0e78af3a2e1ec4c723a4efb1bd1ad6f8a5b9404c599&token=2001057130&lang=zh_CN#rd) +- [绀炬嫑鍚庣21杩為棶锛堜笁骞村伐浣滅粡楠屼竴闈級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498084&idx=1&sn=96c8148cfeeeb16668ed9e03fa9131cc&chksm=cf22264df855af5b6e81b93738cca28989226a53ec702fcfaa0cc5004dded4208c5ee5ea844a&token=2001057130&lang=zh_CN#rd) +- [涓浠界儹涔庝箮鐨勫瓧鑺傞潰璇曠湡棰榏(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497742&idx=1&sn=18765e7356f446a7f2521f45b467d5d3&chksm=cf222727f855ae31dd2029e3219814211336c41d9228d271a583d3691ddadca586529aca9302&token=2001057130&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳櫨鐨湇鍔$15杩為棶](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497256&idx=1&sn=3b799c2d514aa25e85a6faa60d639a0b&chksm=cf222901f855a017b73356b99b830b8800a7a9172fab891c5759d8dd69a270872ea9480c0b7c&token=2001057130&lang=zh_CN#rd) +- [瀹囧畽鏉′竴闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495342&idx=1&sn=54e1c0c16a6467001524c34818025331&chksm=cf223187f855b89140db5ca429e6efc19d0111abf7f36b78a0ecd73b00fded1ff1e7ba32a6f1&token=2001057130&lang=zh_CN#rd) +- [铓傝殎閲戞湇涓闈細鍗侀亾缁忓吀闈㈣瘯棰樿В鏋怾(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247493270&idx=1&sn=1c78a81d6e1bd0f0fd947fe8c3a33e32&chksm=cf2239bff855b0a9627855f20a17799e0506eb7548a409bfa0ee0450328d7519ec70f7b962cc&token=2001057130&lang=zh_CN#rd) +鈥 +## 2. 蹇呰冪粡鍏搁潰璇曢 +鈥 +- [Redis涓讳粠銆佸摠鍏点 Cluster闆嗙兢涓閿呯锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498254&idx=1&sn=6489360c3b226df9811e66cb40ec7656&chksm=cf222527f855ac3112628bcec7730064fee3fdbe869fbd0a7410c22766a0c036a7e5c1a69fa0&token=2001057130&lang=zh_CN#rd) +- [鎴戜滑涓轰粈涔堣鍒嗗簱鍒嗚〃锛焆(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247498625&idx=1&sn=0d7bd9d1b46eeff4c715a6761355e9b0&chksm=cf2224a8f855adbea8931c8e011711f6c70cffeef8ddf8b87729c710eacef11b46eef80fda36&token=2001057130&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳亰鑱奙ySQL鐨勪富浠嶿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497982&idx=1&sn=bb589329cceb5462fc41f66ec63dbf56&chksm=cf2227d7f855aec16dd4d3b3425c0401850eeaf2c9cdc82e82722d38a00c24ee9ccfa3353774&token=2001057130&lang=zh_CN#rd) +- [娑堟伅闃熷垪缁忓吀鍗佽繛闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497847&idx=1&sn=29a32672b712e7dfadfa36c9902b2ec7&chksm=cf22275ef855ae484fb3f51a5726e9a4bc45222e8fbbd33631d177dc4b5619c36889ea178463&token=2001057130&lang=zh_CN#rd) +- [鍏骞傜瓑璁捐](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497427&idx=1&sn=2ed160c9917ad989eee1ac60d6122855&chksm=cf2229faf855a0ecf5eb34c7335acdf6420426490ee99fc2b602d54ff4ffcecfdab24eeab0a3&token=2001057130&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛氶浂鎷疯礉璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247496788&idx=1&sn=f65ddd10d16d8376efa0037762153932&chksm=cf222b7df855a26bad76249e7b77e28da3097b226f9165d79f5031516d9c345827fca901559c&token=2001057130&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛欼O妯″瀷璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247496448&idx=1&sn=cd502f850290a25949dd4a11ac55a039&chksm=cf222c29f855a53f094bde2868900fa252b07385e73564e9ee9f0510cb4e74387d9d23ab67e6&token=2001057130&lang=zh_CN#rd) +- [鐪嬩竴閬嶅氨鐞嗚В锛歁VCC鍘熺悊璇﹁В](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247495277&idx=1&sn=a1812febb4246f824ce54d778f672025&chksm=cf223144f855b8528ad6cce707dc3a1b4d387817bd751dfab4f79dda90c6640f9763d25f3f33&token=2001057130&lang=zh_CN#rd) +- [2W瀛楋紒璇﹁В20閬揜edis缁忓吀闈㈣瘯棰橈紒锛堢弽钘忕増锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494124&idx=1&sn=c185f7d999d5f006608d05707a8a7eea&chksm=cf2236c5f855bfd329c6e2ee27f23f8131ebcd312960190a10f1a819d67f07a21a08ad17f263&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [涓冪鏂规锛佹帰璁≧edis鍒嗗竷寮忛攣鐨勬纭娇鐢ㄥЭ鍔縘(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488142&idx=1&sn=79a304efae7a814b6f71bbbc53810c0c&chksm=cf21cda7f85644b11ff80323defb90193bc1780b45c1c6081f00da85d665fd9eb32cc934b5cf&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [闈㈣瘯蹇呭锛乀CP鍗忚缁忓吀鍗佷簲杩為棶锛乚(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490868&idx=1&sn=96889bfe6a97f9200fa2d682cf2f5d89&chksm=cf21c21df8564b0b0757df584560a69340b1775fe1c70b867439565969ec3aed19c442ff4eeb&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [2W瀛楋紒姊崇悊50閬撶粡鍏歌绠楁満缃戠粶闈㈣瘯棰橈紙鏀惰棌鐗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247492832&idx=1&sn=601fa1c340a313bc0f74bb75cdb6a95a&chksm=cf223bc9f855b2dfb8d0e74f3360e2edfe25c3a728fe17e9e80b6022340994fd9d9e1ca83ca8&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [ZooKeeper鐨勫崄浜岃繛闂紝浣犻《寰椾簡鍢涳紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488047&idx=1&sn=4913c7e1c3b8835f7512d8dc6b845727&chksm=cf21cd06f8564410cce6121230256facb1ab3b5a9ed35579896f428d84bdea7b86836109d575&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [50閬揓ava闆嗗悎缁忓吀闈㈣瘯棰橈紙鏀惰棌鐗堬級](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488007&idx=1&sn=c5c16c8ec916c791e776216f3177c7e2&chksm=cf21cd2ef85644382a985e9fed1956d6ee60c86ce69e65f31f775318435fdb86bf368e26edf2&token=162724582&lang=zh_CN&scene=21#wechat_redirect) +- [100閬揗ySQL鏁版嵁搴撶粡鍏搁潰璇曢瑙f瀽锛堟敹钘忕増锛塢(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488000&idx=1&sn=1c38db7fd110bbcc1ffb2d72a56aaf25&chksm=cf21cd29f856443f25a3fe98ae8e888faceef9bee45df045969b2cffb105363dcc2a4480bb74&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) +- [Spring 闈㈣瘯63闂甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497672&idx=1&sn=6ff0350e23d014b29a47bdec79af9ef5&chksm=cf2228e1f855a1f70fa78d9bd85c53dfbe154c1325aa1e203e4c918132c430d51bb68e961eda&token=2001057130&lang=zh_CN#rd) \ No newline at end of file From 5f8568677c29c4e9eed376abc99d1aebbc0c5e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Tue, 28 May 2024 00:09:01 +0800 Subject: [PATCH 25/47] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 鍘婚噸妯℃澘 --- .../README.md" | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" index c23117d..afd9e7d 100644 --- "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" +++ "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" @@ -1,9 +1,10 @@ -## 后端思维篇(持续更新中) - -公众号:捡田螺的小男孩 - -- [后端思想篇:设计好接口的36个锦囊!](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499388&idx=1&sn=49a22120a3238e13ad7c3d3b73d9e453&chksm=cf222155f855a8434026b2c460d963c406186578c2527ca8f2bb829bbe849d87a2392a525a9b&scene=178&cur_album_id=2396778860463161350#rd) -- [后端思维篇:手把手教你写一个并行调用模板](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499504&idx=1&sn=bb62226e6cffeb1859efb0100c796050&chksm=cf2221d9f855a8cf23f75cb51c1a407578fb0f279e96ddae74b5b8c84f2f5dc71762425b17cb&scene=178&cur_album_id=2396778860463161350#rd) -- [后端思维篇:如何应用设计模式优化代码](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499524&idx=1&sn=cb4cc48a3e8d9a54b0ebc4c7ad517f14&chksm=cf22202df855a93b37327856ee88b0bf5f6ed7da67964438fc2cf747666260d5026dd62d4a17&scene=178&cur_album_id=2396778860463161350#rd) -- [后端思维篇:统一参数校验、异常处理、结果返回](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499708&idx=1&sn=808979c495acd9344732d147c0ad40d3&chksm=cf222095f855a983f31d5f6abf401fa3b5967f8839c6775d35cefc5cc6244fb4135563ff1090&scene=178&cur_album_id=2396778860463161350#rd) -- [后端思维篇:如何抽一个观察者模板](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500159&idx=1&sn=a5328372e580b22c939a5b3084aef164&chksm=cf221e56f85597401e8c99b8dd1bc1af97fcf69207ceaa04c5c26e028ac47d1658b79ae32291&scene=178&cur_album_id=2396778860463161350#rd) +## 鍚庣鎬濈淮绡囷紙鎸佺画鏇存柊涓級 + +鍏紬鍙凤細鎹$敯铻虹殑灏忕敺瀛 + +- [鍚庣鎬濇兂绡囷細璁捐濂芥帴鍙g殑36涓敠鍥婏紒](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499388&idx=1&sn=49a22120a3238e13ad7c3d3b73d9e453&chksm=cf222155f855a8434026b2c460d963c406186578c2527ca8f2bb829bbe849d87a2392a525a9b&scene=178&cur_album_id=2396778860463161350#rd) +- [鍚庣鎬濈淮绡囷細鎵嬫妸鎵嬫暀浣犲啓涓涓苟琛岃皟鐢ㄦā鏉縘(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499504&idx=1&sn=bb62226e6cffeb1859efb0100c796050&chksm=cf2221d9f855a8cf23f75cb51c1a407578fb0f279e96ddae74b5b8c84f2f5dc71762425b17cb&scene=178&cur_album_id=2396778860463161350#rd) +- [鍚庣鎬濈淮绡囷細濡備綍搴旂敤璁捐妯″紡浼樺寲浠g爜](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499524&idx=1&sn=cb4cc48a3e8d9a54b0ebc4c7ad517f14&chksm=cf22202df855a93b37327856ee88b0bf5f6ed7da67964438fc2cf747666260d5026dd62d4a17&scene=178&cur_album_id=2396778860463161350#rd) +- [鍚庣鎬濈淮绡:缁熶竴鍙傛暟鏍¢獙銆佸紓甯稿鐞嗐佺粨鏋滆繑鍥瀅(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499708&idx=1&sn=808979c495acd9344732d147c0ad40d3&chksm=cf222095f855a983f31d5f6abf401fa3b5967f8839c6775d35cefc5cc6244fb4135563ff1090&scene=178&cur_album_id=2396778860463161350#rd) +- [鍚庣鎬濈淮绡:濡備綍鎶戒竴涓瀵熻呮ā鏉縘(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500159&idx=1&sn=a5328372e580b22c939a5b3084aef164&chksm=cf221e56f85597401e8c99b8dd1bc1af97fcf69207ceaa04c5c26e028ac47d1658b79ae32291&scene=178&cur_album_id=2396778860463161350#rd) +- - [鍚庣鎬濈淮绡:鍚庣鎬濈淮涓撴爮锛氶氳繃灞傚眰浠g爜鍘婚噸锛屾垜鍙堟悶浜嗕竴涓氱敤妯℃澘](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506942&idx=1&sn=ae14ed5cc179f73ea0b2f37c73ad8da4&chksm=c1e02672f697af645943ea8ee53b7cef6257ebbc21d2b77058994e98bdb1e107ad313e29e8c3&token=134957671&lang=zh_CN#rd) From 69157df1112e21f5c4ad39512d5caacd3fb40f36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Tue, 28 May 2024 00:09:20 +0800 Subject: [PATCH 26/47] Update README.md --- .../README.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" index afd9e7d..7f6092a 100644 --- "a/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" +++ "b/\345\220\216\347\253\257\346\200\235\347\273\264\347\257\207/README.md" @@ -7,4 +7,4 @@ - [鍚庣鎬濈淮绡囷細濡備綍搴旂敤璁捐妯″紡浼樺寲浠g爜](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499524&idx=1&sn=cb4cc48a3e8d9a54b0ebc4c7ad517f14&chksm=cf22202df855a93b37327856ee88b0bf5f6ed7da67964438fc2cf747666260d5026dd62d4a17&scene=178&cur_album_id=2396778860463161350#rd) - [鍚庣鎬濈淮绡:缁熶竴鍙傛暟鏍¢獙銆佸紓甯稿鐞嗐佺粨鏋滆繑鍥瀅(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499708&idx=1&sn=808979c495acd9344732d147c0ad40d3&chksm=cf222095f855a983f31d5f6abf401fa3b5967f8839c6775d35cefc5cc6244fb4135563ff1090&scene=178&cur_album_id=2396778860463161350#rd) - [鍚庣鎬濈淮绡:濡備綍鎶戒竴涓瀵熻呮ā鏉縘(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500159&idx=1&sn=a5328372e580b22c939a5b3084aef164&chksm=cf221e56f85597401e8c99b8dd1bc1af97fcf69207ceaa04c5c26e028ac47d1658b79ae32291&scene=178&cur_album_id=2396778860463161350#rd) -- - [鍚庣鎬濈淮绡:鍚庣鎬濈淮涓撴爮锛氶氳繃灞傚眰浠g爜鍘婚噸锛屾垜鍙堟悶浜嗕竴涓氱敤妯℃澘](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506942&idx=1&sn=ae14ed5cc179f73ea0b2f37c73ad8da4&chksm=c1e02672f697af645943ea8ee53b7cef6257ebbc21d2b77058994e98bdb1e107ad313e29e8c3&token=134957671&lang=zh_CN#rd) +- [鍚庣鎬濈淮绡:鍚庣鎬濈淮涓撴爮锛氶氳繃灞傚眰浠g爜鍘婚噸锛屾垜鍙堟悶浜嗕竴涓氱敤妯℃澘](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506942&idx=1&sn=ae14ed5cc179f73ea0b2f37c73ad8da4&chksm=c1e02672f697af645943ea8ee53b7cef6257ebbc21d2b77058994e98bdb1e107ad313e29e8c3&token=134957671&lang=zh_CN#rd) From cc34588ff185f81499ed16886ba12ab2f45a4200 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:10:08 +0800 Subject: [PATCH 27/47] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=96=B9=E6=A1=88?= =?UTF-8?q?=E6=80=9D=E8=80=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" diff --git "a/\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" "b/\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" new file mode 100644 index 0000000..8b13789 --- /dev/null +++ "b/\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" @@ -0,0 +1 @@ + From b7dc04bece928bfc858d1d27b729192f804dbb47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:15:46 +0800 Subject: [PATCH 28/47] =?UTF-8?q?Delete=20=E8=AE=BE=E8=AE=A1=E6=96=B9?= =?UTF-8?q?=E6=A1=88=E6=80=9D=E8=80=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" | 1 - 1 file changed, 1 deletion(-) delete mode 100644 "\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" diff --git "a/\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" "b/\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" deleted file mode 100644 index 8b13789..0000000 --- "a/\350\256\276\350\256\241\346\226\271\346\241\210\346\200\235\350\200\203" +++ /dev/null @@ -1 +0,0 @@ - From 80ca854a4f4d0abd607a20707ba37cba1568129c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:16:54 +0800 Subject: [PATCH 29/47] =?UTF-8?q?Create=20=E5=B8=B8=E8=A7=81=E6=96=B9?= =?UTF-8?q?=E6=A1=88=E8=AE=BE=E8=AE=A1.txt=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" "b/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" new file mode 100644 index 0000000..8b13789 --- /dev/null +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" @@ -0,0 +1 @@ + From 2c5c0061a37d5c49c5f9a8e87be81c2923f4b90a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:19:40 +0800 Subject: [PATCH 30/47] =?UTF-8?q?Update=20=E5=B8=B8=E8=A7=81=E6=96=B9?= =?UTF-8?q?=E6=A1=88=E8=AE=BE=E8=AE=A1.txt=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" "b/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" index 8b13789..4d183d2 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" @@ -1 +1,4 @@ + + +- [瀹炵幇涓涓埛鏁颁换鍔★紝闇瑕佹濊冨摢浜涚淮搴︼紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508890&idx=1&sn=919b8a794eb4902d958ae13d1f424737&chksm=c1e05e16f697d700ee9f79e087279de6312222b8e45887d976a572b01599f1177b358ade265b&token=337310304&lang=zh_CN#rd) From 7f2a4de82c2cd78b3d6150ff7c8c59f6c5b108c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:21:54 +0800 Subject: [PATCH 31/47] =?UTF-8?q?Delete=20=E6=96=B9=E6=A1=88=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 "\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" "b/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" deleted file mode 100644 index 4d183d2..0000000 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/\345\270\270\350\247\201\346\226\271\346\241\210\350\256\276\350\256\241.txt\343\200\202" +++ /dev/null @@ -1,4 +0,0 @@ - - - -- [瀹炵幇涓涓埛鏁颁换鍔★紝闇瑕佹濊冨摢浜涚淮搴︼紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508890&idx=1&sn=919b8a794eb4902d958ae13d1f424737&chksm=c1e05e16f697d700ee9f79e087279de6312222b8e45887d976a572b01599f1177b358ade265b&token=337310304&lang=zh_CN#rd) From f1c359865a5e9480b397af07f38f62d8fa17de0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:22:13 +0800 Subject: [PATCH 32/47] Create README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" new file mode 100644 index 0000000..8b13789 --- /dev/null +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -0,0 +1 @@ + From 5a53f80abc864e3527562970649d82c7c902f509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:23:23 +0800 Subject: [PATCH 33/47] Update README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" index 8b13789..e38139f 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -1 +1 @@ - +- [瀹炵幇涓涓埛鏁颁换鍔★紝闇瑕佹濊冨摢浜涚淮搴︼紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508890&idx=1&sn=919b8a794eb4902d958ae13d1f424737&chksm=c1e05e16f697d700ee9f79e087279de6312222b8e45887d976a572b01599f1177b358ade265b&token=337310304&lang=zh_CN#rd) From 9670d5b8da9c69aa753a034245e1c065240e4791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:25:51 +0800 Subject: [PATCH 34/47] Update README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 1 + 1 file changed, 1 insertion(+) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" index e38139f..10dc3ab 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -1 +1,2 @@ - [瀹炵幇涓涓埛鏁颁换鍔★紝闇瑕佹濊冨摢浜涚淮搴︼紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508890&idx=1&sn=919b8a794eb4902d958ae13d1f424737&chksm=c1e05e16f697d700ee9f79e087279de6312222b8e45887d976a572b01599f1177b358ade265b&token=337310304&lang=zh_CN#rd) +- [鎵嬫妸鎵嬫暀浣犲啓璁捐鏂规](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247507937&idx=1&sn=33fd37f28675ce756e5d048b99254fcb&chksm=c1e0226df697ab7b4907fb2815c8dd2d195ea04c03a2f8fd0697c9a15a81fc639e5c5f7dab1b&token=337310304&lang=zh_CN#rd) From 04837de5a8a5e35fd32b0679bbb9e4d2d3e07d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:32:30 +0800 Subject: [PATCH 35/47] Update README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" index 10dc3ab..27d53c0 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -1,2 +1,4 @@ - [瀹炵幇涓涓埛鏁颁换鍔★紝闇瑕佹濊冨摢浜涚淮搴︼紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508890&idx=1&sn=919b8a794eb4902d958ae13d1f424737&chksm=c1e05e16f697d700ee9f79e087279de6312222b8e45887d976a572b01599f1177b358ade265b&token=337310304&lang=zh_CN#rd) - [鎵嬫妸鎵嬫暀浣犲啓璁捐鏂规](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247507937&idx=1&sn=33fd37f28675ce756e5d048b99254fcb&chksm=c1e0226df697ab7b4907fb2815c8dd2d195ea04c03a2f8fd0697c9a15a81fc639e5c5f7dab1b&token=337310304&lang=zh_CN#rd) +- [绠鏄撶増锛屽熀浜嶫WT 瀹炵幇鐧诲綍璁よ瘉](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508057&idx=1&sn=06b6fee69c63afbe7ebd2f81a3627341&chksm=c1e05dd5f697d4c32e38bcb58c2ecba8115ea7f94a17bc197bcb7b042a18ef07fef0f0e03878&token=337310304&lang=zh_CN#rd) + From 8b3d7e11446fb5ed0dd82dbca8205e460b231fb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:33:23 +0800 Subject: [PATCH 36/47] Update README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 1 + 1 file changed, 1 insertion(+) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" index 27d53c0..8965fd6 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -1,4 +1,5 @@ - [瀹炵幇涓涓埛鏁颁换鍔★紝闇瑕佹濊冨摢浜涚淮搴︼紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508890&idx=1&sn=919b8a794eb4902d958ae13d1f424737&chksm=c1e05e16f697d700ee9f79e087279de6312222b8e45887d976a572b01599f1177b358ade265b&token=337310304&lang=zh_CN#rd) - [鎵嬫妸鎵嬫暀浣犲啓璁捐鏂规](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247507937&idx=1&sn=33fd37f28675ce756e5d048b99254fcb&chksm=c1e0226df697ab7b4907fb2815c8dd2d195ea04c03a2f8fd0697c9a15a81fc639e5c5f7dab1b&token=337310304&lang=zh_CN#rd) - [绠鏄撶増锛屽熀浜嶫WT 瀹炵幇鐧诲綍璁よ瘉](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508057&idx=1&sn=06b6fee69c63afbe7ebd2f81a3627341&chksm=c1e05dd5f697d4c32e38bcb58c2ecba8115ea7f94a17bc197bcb7b042a18ef07fef0f0e03878&token=337310304&lang=zh_CN#rd) +- [楂樺苟鍙戠郴缁熻璁$殑15涓缓璁甝(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508062&idx=1&sn=71e9647479ea71e8660d6ba48616c122&chksm=c1e05dd2f697d4c45ffd09e07fd40770e3d11591fa2b53161cd38da908cd55e41a38d5192605&token=337310304&lang=zh_CN#rd) From 76d9cdf4ce60e66d89a210cd9c2a12dd56dd5792 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Wed, 29 May 2024 08:35:36 +0800 Subject: [PATCH 37/47] Update README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" index 8965fd6..70a1b3a 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -2,4 +2,6 @@ - [鎵嬫妸鎵嬫暀浣犲啓璁捐鏂规](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247507937&idx=1&sn=33fd37f28675ce756e5d048b99254fcb&chksm=c1e0226df697ab7b4907fb2815c8dd2d195ea04c03a2f8fd0697c9a15a81fc639e5c5f7dab1b&token=337310304&lang=zh_CN#rd) - [绠鏄撶増锛屽熀浜嶫WT 瀹炵幇鐧诲綍璁よ瘉](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508057&idx=1&sn=06b6fee69c63afbe7ebd2f81a3627341&chksm=c1e05dd5f697d4c32e38bcb58c2ecba8115ea7f94a17bc197bcb7b042a18ef07fef0f0e03878&token=337310304&lang=zh_CN#rd) - [楂樺苟鍙戠郴缁熻璁$殑15涓缓璁甝(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508062&idx=1&sn=71e9647479ea71e8660d6ba48616c122&chksm=c1e05dd2f697d4c45ffd09e07fd40770e3d11591fa2b53161cd38da908cd55e41a38d5192605&token=337310304&lang=zh_CN#rd) +- [闈㈣瘯蹇呭锛氳亰鑱婂垎甯冨紡閿佺殑澶氱瀹炵幇锛乚(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506434&idx=1&sn=c6ae1ec19558626897295bbe41304b62&chksm=c1e0278ef697ae989b14f4746d1049be976d1d5744e4f9c7ec6e17d006f206edcc1c47a3e862&token=337310304&lang=zh_CN#rd) + From 8987b8a933e624d12601b03ef7ea4ed0dd033d67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:21:54 +0800 Subject: [PATCH 38/47] Update README.MD --- "\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" index 70a1b3a..e986b15 100644 --- "a/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" +++ "b/\346\226\271\346\241\210\350\256\276\350\256\241/README.MD" @@ -3,5 +3,7 @@ - [绠鏄撶増锛屽熀浜嶫WT 瀹炵幇鐧诲綍璁よ瘉](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508057&idx=1&sn=06b6fee69c63afbe7ebd2f81a3627341&chksm=c1e05dd5f697d4c32e38bcb58c2ecba8115ea7f94a17bc197bcb7b042a18ef07fef0f0e03878&token=337310304&lang=zh_CN#rd) - [楂樺苟鍙戠郴缁熻璁$殑15涓缓璁甝(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508062&idx=1&sn=71e9647479ea71e8660d6ba48616c122&chksm=c1e05dd2f697d4c45ffd09e07fd40770e3d11591fa2b53161cd38da908cd55e41a38d5192605&token=337310304&lang=zh_CN#rd) - [闈㈣瘯蹇呭锛氳亰鑱婂垎甯冨紡閿佺殑澶氱瀹炵幇锛乚(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506434&idx=1&sn=c6ae1ec19558626897295bbe41304b62&chksm=c1e0278ef697ae989b14f4746d1049be976d1d5744e4f9c7ec6e17d006f206edcc1c47a3e862&token=337310304&lang=zh_CN#rd) +- [骞跺彂鐜涓嬶紝鍏堟搷浣滄暟鎹簱杩樻槸鍏堟搷浣滅紦瀛橈紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508208&idx=1&sn=ac92523e33b478ad83560471338742f4&chksm=c1e05d7cf697d46aba95dc6661a8acbea0c894e44a793d054648b552a73b404aa3344d8a4826&token=337310304&lang=zh_CN#rd) + From 5ef506199d2e514207aad873870e5832f1798730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:25:21 +0800 Subject: [PATCH 39/47] Update README.MD --- .../README.MD" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" "b/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" index 15772be..9d21f55 100644 --- "a/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" +++ "b/\347\224\237\344\272\247\351\227\256\351\242\230\345\210\206\346\236\220/README.MD" @@ -5,4 +5,5 @@ - [鎵嬫妸鎵嬫暀浣犲垎鏋怣ysql姝婚攣闂](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487979&idx=1&sn=588c83d77a8851f3b3c18cd68ed9c454&chksm=cf21cec2f85647d4a77cc239ae9a4cfd31bb8832be3d98540a08ea8b4a1f46b38cf736210a02&token=1495321435&lang=zh_CN&scene=21#wechat_redirect) - [绾跨▼姹犺繍鐢ㄤ笉褰撶殑涓娆$嚎涓婁簨鏁匽(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247487992&idx=1&sn=733335f2f69d743712915abc99f83b1d&chksm=cf21ced1f85647c7ab8c5d8bc4e8206b04acb5fd4feb94b8d088a782ed458b82aab69dba82aa&token=1990771297&lang=zh_CN#rd) - [鐩樼偣MySQL鎱㈡煡璇㈢殑12涓師鍥燷(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247499624&idx=1&sn=561b9cb7fe831ca7cb2d9fd65691e85e&chksm=cf222041f855a957ac50c0a53baaec6d26be32427259b2974450620f33a8c834419fe535e83d&token=1990771297&lang=zh_CN#rd) -- [绾跨▼姹犲浣曠洃鎺э紝鎵嶈兘甯姪寮鍙戣呭揩閫熷畾浣嶇嚎涓婇敊璇紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497444&idx=1&sn=1b2cc8b4685413149e46c814e468c6e6&chksm=cf2229cdf855a0db5f2da881d27c69f11c69480552985baa2a08cbe4d5a48bad7fb31a78dd5a&token=1990771297&lang=zh_CN#rd) \ No newline at end of file +- [绾跨▼姹犲浣曠洃鎺э紝鎵嶈兘甯姪寮鍙戣呭揩閫熷畾浣嶇嚎涓婇敊璇紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247497444&idx=1&sn=1b2cc8b4685413149e46c814e468c6e6&chksm=cf2229cdf855a0db5f2da881d27c69f11c69480552985baa2a08cbe4d5a48bad7fb31a78dd5a&token=1990771297&lang=zh_CN#rd) +- [鏁版嵁搴撴閿佹帓鏌ユ濊矾鍒嗕韩](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247507770&idx=1&sn=b84b20aca057b34d511a501ff91941b5&chksm=c1e022b6f697aba05248128cb82f93aed341b1cc80e6d568c7150a4ffa6775692c7c9fa423a3&token=337310304&lang=zh_CN#rd) From 69abd3c8599a75e1feabbf349355c813ae4f9d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:27:39 +0800 Subject: [PATCH 40/47] Create README.md --- .../README.md" | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 "Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" diff --git "a/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" "b/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" new file mode 100644 index 0000000..d3eee8f --- /dev/null +++ "b/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" @@ -0,0 +1,2 @@ +- [闈㈣瘯蹇呭锛氳亰鑱婂垎甯冨紡閿佺殑澶氱瀹炵幇锛乚(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506434&idx=1&sn=c6ae1ec19558626897295bbe41304b62&chksm=c1e0278ef697ae989b14f4746d1049be976d1d5744e4f9c7ec6e17d006f206edcc1c47a3e862&token=337310304&lang=zh_CN#rd) +- [骞跺彂鐜涓嬶紝鍏堟搷浣滄暟鎹簱杩樻槸鍏堟搷浣滅紦瀛橈紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508208&idx=1&sn=ac92523e33b478ad83560471338742f4&chksm=c1e05d7cf697d46aba95dc6661a8acbea0c894e44a793d054648b552a73b404aa3344d8a4826&token=337310304&lang=zh_CN#rd) From ee23c93ece67df1feff7094c8c9a93c123fae1ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:28:13 +0800 Subject: [PATCH 41/47] Update README.md --- .../README.md" | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git "a/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" "b/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" index d3eee8f..0ae9a4e 100644 --- "a/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" +++ "b/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" @@ -1,2 +1 @@ -- [闈㈣瘯蹇呭锛氳亰鑱婂垎甯冨紡閿佺殑澶氱瀹炵幇锛乚(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506434&idx=1&sn=c6ae1ec19558626897295bbe41304b62&chksm=c1e0278ef697ae989b14f4746d1049be976d1d5744e4f9c7ec6e17d006f206edcc1c47a3e862&token=337310304&lang=zh_CN#rd) -- [骞跺彂鐜涓嬶紝鍏堟搷浣滄暟鎹簱杩樻槸鍏堟搷浣滅紦瀛橈紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247508208&idx=1&sn=ac92523e33b478ad83560471338742f4&chksm=c1e05d7cf697d46aba95dc6661a8acbea0c894e44a793d054648b552a73b404aa3344d8a4826&token=337310304&lang=zh_CN#rd) +- [鑱婅亰select for update鍒板簳鍔犱簡浠涔堥攣](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506728&idx=1&sn=5526ee3984e971d4c3b251c2ad76d658&chksm=c1e026a4f697afb28224d5ce0ecca7432879b357cd6433834c66d94c72a1935ba13e2e3e274e&token=337310304&lang=zh_CN#rd) From 20cc761fb304d23de53a5931a8cb341eed35a337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:29:45 +0800 Subject: [PATCH 42/47] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 68aacb1..54d00a0 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ - [绋嬪簭鍛樺繀澶囧熀纭锛氬浣曞畨鍏ㄤ紶杈撳瓨鍌ㄧ敤鎴峰瘑鐮侊紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488117&idx=1&sn=5d3d0eda0ed45f3f576e211de31ca3a9&chksm=cf21cd5cf856444af1407a94a2abf445265ca7c5f5855cfa1c223cb209e99040c7889621f231&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [涓娆′唬鐮佷紭鍖栧疄璺碉紝鐢ㄤ簡妯℃澘鏂规硶+绛栫暐+宸ュ巶鏂规硶妯″紡](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488061&idx=1&sn=1d9ab7954b03521ab81ecf033c0e5e50&chksm=cf21cd14f8564402b213f0ef908bbdb0e12fed4b281c5803b8e539cacb1551654194becfb7d6&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [淇濊瘉鎺ュ彛鏁版嵁瀹夊叏鐨10绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500285&idx=1&sn=7d0723f25d46e858859cfd79acb6fb9d&chksm=cf221ed4f85597c2093f81baa5fdedc65817bf2d23a7951236836b0f54c2335695cbed61cd13&token=1990771297&lang=zh_CN#rd) +- [瀹炴垬鎬荤粨锛18绉嶆帴鍙d紭鍖栨柟妗堢殑鎬荤粨](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506674&idx=1&sn=8b2914d9aafa334029495b029b69d0b6&chksm=c1e0277ef697ae68e8c2bffe4bd7d9849be3165ef1a20286538f6a7569a6ba0879d517d55b87&token=337310304&lang=zh_CN#rd) ## 绂忓埄 500+椤靛師鍒涢潰璇曢 From 4a6a3f14c718ae0a49b5b1806ec05c745461aa31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:30:42 +0800 Subject: [PATCH 43/47] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 54d00a0..33db52b 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ - [涓娆′唬鐮佷紭鍖栧疄璺碉紝鐢ㄤ簡妯℃澘鏂规硶+绛栫暐+宸ュ巶鏂规硶妯″紡](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247488061&idx=1&sn=1d9ab7954b03521ab81ecf033c0e5e50&chksm=cf21cd14f8564402b213f0ef908bbdb0e12fed4b281c5803b8e539cacb1551654194becfb7d6&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [淇濊瘉鎺ュ彛鏁版嵁瀹夊叏鐨10绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500285&idx=1&sn=7d0723f25d46e858859cfd79acb6fb9d&chksm=cf221ed4f85597c2093f81baa5fdedc65817bf2d23a7951236836b0f54c2335695cbed61cd13&token=1990771297&lang=zh_CN#rd) - [瀹炴垬鎬荤粨锛18绉嶆帴鍙d紭鍖栨柟妗堢殑鎬荤粨](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506674&idx=1&sn=8b2914d9aafa334029495b029b69d0b6&chksm=c1e0277ef697ae68e8c2bffe4bd7d9849be3165ef1a20286538f6a7569a6ba0879d517d55b87&token=337310304&lang=zh_CN#rd) +- [鑱婅亰宸ヤ綔涓父鐢ㄧ殑Lambda琛ㄨ揪寮廬(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506654&idx=1&sn=4835e9f486e643765d4ad3b3fc93e079&chksm=c1e02752f697ae442f62fc122d7604f4b01979f6d1665df414bb499fd8ba211335ebc503c368&token=337310304&lang=zh_CN#rd) ## 绂忓埄 500+椤靛師鍒涢潰璇曢 From 041003dfa55172cb7adadf7731dd130f7419792c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:31:49 +0800 Subject: [PATCH 44/47] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 33db52b..42d5e5d 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ - [淇濊瘉鎺ュ彛鏁版嵁瀹夊叏鐨10绉嶆柟妗圿(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247500285&idx=1&sn=7d0723f25d46e858859cfd79acb6fb9d&chksm=cf221ed4f85597c2093f81baa5fdedc65817bf2d23a7951236836b0f54c2335695cbed61cd13&token=1990771297&lang=zh_CN#rd) - [瀹炴垬鎬荤粨锛18绉嶆帴鍙d紭鍖栨柟妗堢殑鎬荤粨](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506674&idx=1&sn=8b2914d9aafa334029495b029b69d0b6&chksm=c1e0277ef697ae68e8c2bffe4bd7d9849be3165ef1a20286538f6a7569a6ba0879d517d55b87&token=337310304&lang=zh_CN#rd) - [鑱婅亰宸ヤ綔涓父鐢ㄧ殑Lambda琛ㄨ揪寮廬(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506654&idx=1&sn=4835e9f486e643765d4ad3b3fc93e079&chksm=c1e02752f697ae442f62fc122d7604f4b01979f6d1665df414bb499fd8ba211335ebc503c368&token=337310304&lang=zh_CN#rd) +- [21涓狹ySQL琛ㄨ璁$殑缁忛獙鍑嗗垯](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506621&idx=1&sn=afca898cb461827054d706a92f9b9250&chksm=c1e02731f697ae27a83e5637ee2184d1e26e5090caeaa58121d3cf5afab7d4d5832cac6d171a&token=337310304&lang=zh_CN#rd) ## 绂忓埄 500+椤靛師鍒涢潰璇曢 From a0a2cfb1858dce4bd4869829efd29a6c58fa9cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Thu, 30 May 2024 08:34:19 +0800 Subject: [PATCH 45/47] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 42d5e5d..abf80d6 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ - [瀹炴垬鎬荤粨锛18绉嶆帴鍙d紭鍖栨柟妗堢殑鎬荤粨](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506674&idx=1&sn=8b2914d9aafa334029495b029b69d0b6&chksm=c1e0277ef697ae68e8c2bffe4bd7d9849be3165ef1a20286538f6a7569a6ba0879d517d55b87&token=337310304&lang=zh_CN#rd) - [鑱婅亰宸ヤ綔涓父鐢ㄧ殑Lambda琛ㄨ揪寮廬(https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506654&idx=1&sn=4835e9f486e643765d4ad3b3fc93e079&chksm=c1e02752f697ae442f62fc122d7604f4b01979f6d1665df414bb499fd8ba211335ebc503c368&token=337310304&lang=zh_CN#rd) - [21涓狹ySQL琛ㄨ璁$殑缁忛獙鍑嗗垯](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506621&idx=1&sn=afca898cb461827054d706a92f9b9250&chksm=c1e02731f697ae27a83e5637ee2184d1e26e5090caeaa58121d3cf5afab7d4d5832cac6d171a&token=337310304&lang=zh_CN#rd) +- [绋嬪簭鍛樺繀澶囧熀纭锛氬浣曞畨鍏ㄤ紶杈撳瓨鍌ㄧ敤鎴峰瘑鐮侊紵](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506023&idx=1&sn=b96dde436c1c9fe4bda745ca5ca1b170&source=41#wechat_redirect) ## 绂忓埄 500+椤靛師鍒涢潰璇曢 From bff37f7eb2f9c5ba90eddcf14f524d2f2a280a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sat, 1 Jun 2024 17:23:09 +0800 Subject: [PATCH 46/47] =?UTF-8?q?=E6=AD=BB=E9=94=81=E6=80=9D=E8=B7=AF?= =?UTF-8?q?=E5=88=86=E4=BA=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" "b/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" index 0ae9a4e..f335927 100644 --- "a/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" +++ "b/Mysql\345\237\272\347\241\200\345\255\246\344\271\240/README.md" @@ -1 +1,2 @@ - [鑱婅亰select for update鍒板簳鍔犱簡浠涔堥攣](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247506728&idx=1&sn=5526ee3984e971d4c3b251c2ad76d658&chksm=c1e026a4f697afb28224d5ce0ecca7432879b357cd6433834c66d94c72a1935ba13e2e3e274e&token=337310304&lang=zh_CN#rd) +- [鏁版嵁搴撴閿佹帓鏌ユ濊矾鍒嗕韩](https://mp.weixin.qq.com/s?__biz=MzkyMzU5Mzk1NQ==&mid=2247507770&idx=1&sn=b84b20aca057b34d511a501ff91941b5&chksm=c1e022b6f697aba05248128cb82f93aed341b1cc80e6d568c7150a4ffa6775692c7c9fa423a3&token=1822874069&lang=zh_CN#rd) From c46280c44013c05ee50a6c04cfcbdabaef943c39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=8D=A1=E7=94=B0=E8=9E=BA=E7=9A=84=E5=B0=8F=E7=94=B7?= =?UTF-8?q?=E5=AD=A9?= <327658337@qq.com> Date: Sun, 15 Dec 2024 10:59:31 +0800 Subject: [PATCH 47/47] =?UTF-8?q?=E6=96=B0=E6=96=87=E7=AB=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index abf80d6..7018310 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ ## 宸ヤ綔鎬荤粨 +- [鐩樼偣鏁版嵁搴撲富浠庡欢杩熺殑9涓師鍥犱互鍙婅В鍐虫柟妗圿(https://mp.weixin.qq.com/s/aT7YjsTrM_dhDbddr8TSjg?token=528541177&lang=zh_CN) +- [瀹炴垬椤圭洰锛屾槸濡備綍淇濊瘉缂撳瓨璺熸暟鎹簱鏁版嵁涓鑷存х殑锛焆(https://mp.weixin.qq.com/s/UVHMeFDO4NYTnSwHZc9f1A?token=528541177&lang=zh_CN) - [宸ヤ綔鎬荤粨锛佹棩蹇楁墦鍗扮殑15涓缓璁甝(https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247494838&idx=1&sn=cdb15fd346bddf3f8c1c99f0efbd67d8&chksm=cf22339ff855ba891616c79d4f4855e228e34a9fb45088d7acbe421ad511b8d090a90f5b019f&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [25绉嶄唬鐮佸潖鍛抽亾鎬荤粨+浼樺寲绀轰緥](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490148&idx=1&sn=00a181bf74313f751b3ea15ebc303545&chksm=cf21c54df8564c5bc5b4600fce46619f175f7ae557956f449629c470a08e20580feef4ea8d53&token=162724582&lang=zh_CN&scene=21#wechat_redirect) - [鑱婅亰鏃ュ父寮鍙戜腑锛屽浣曞噺灏慴ug鍛紵](https://mp.weixin.qq.com/s?__biz=Mzg3NzU5NTIwNg==&mid=2247490662&idx=1&sn=d38a090611af7f64ee3c6a31331d5228&chksm=cf21c34ff8564a59e505e6edf3065a0fc506c6d2c96f492c8d8873cd46dedbe0704e43cb9c2e&token=1990771297&lang=zh_CN#rd)