<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[weixin_43494537的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/weixin_43494537</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; weixin_43494537]]></copyright><item><title><![CDATA[电商系统批量发送优惠券/短信/二维码号/邮件]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/150604430</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/150604430</guid><author>weixin_43494537</author><pubDate>Fri, 22 Aug 2025 10:46:38 +0800</pubDate><description><![CDATA[【代码】电商系统批量发送优惠券/短信/二维码号/邮件。]]></description><category></category></item><item><title><![CDATA[升级3.0修改内容]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/149354126</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/149354126</guid><author>weixin_43494537</author><pubDate>Tue, 15 Jul 2025 14:47:02 +0800</pubDate><description><![CDATA[maven查询地址： https://search.maven.org/使用v-3.0.0 版本启动项目需增加jvm参数，允许使用反射。]]></description><category></category></item><item><title><![CDATA[阳哥第三季]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/149217974</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/149217974</guid><author>weixin_43494537</author><pubDate>Wed, 09 Jul 2025 15:19:07 +0800</pubDate><description><![CDATA[LockSupport类中的park等待和unpark唤醒LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport类使用了一种名为Permit（许可）的概念来做到阻塞和唤醒线程的功能，每个线程都有一个许可（permit），permit只有两个值1和零，默认是零。可以把许可看成是一种(0.1)信号量（Semaphore），但与Semaphore不同的是，许可的累加上限是1。park()和unpark(object blocker)阻塞当前线程/阻塞传入的具体线程。]]></description><category></category></item><item><title><![CDATA[README]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/137462185</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/137462185</guid><author>weixin_43494537</author><pubDate>Sun, 07 Apr 2024 14:18:28 +0800</pubDate><description><![CDATA[Elasticsearch详细笔记
一、Elasticsearch概述
1.1 开篇
结构化数据

非结构化数据

半结构化数据

1.2 技术选型
Elasticsearch 是什么
The Elastic Stack, 包括 Elasticsearch、 Kibana、 Beats 和 Logstash（也称为 ELK Stack）。能够安全可靠地获取任何来源、任何格式的数据，然后实时地对数据进行搜索、分析和可视化。
Elaticsearch，简称为 ES， ES 是一个开源的高扩展的分布式全文搜索引擎]]></description><category></category></item><item><title><![CDATA[java 八股文]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/137249377</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/137249377</guid><author>weixin_43494537</author><pubDate>Mon, 01 Apr 2024 22:41:26 +0800</pubDate><description><![CDATA[这个是不能的，比如，当线程1加锁成功后，master节点数据会异步复制到slave节点，此时当前持有Redis锁的master节点宕机，slave节点被提升为新的master节点，假如现在来了一个线程2，再次加锁，会在新的master节点上加锁成功，这个时候就会出现两个节点同时持有一把锁的问题。我们当时采用的阿里的canal组件实现数据同步：不需要更改业务代码，部署一个canal服务。：嗯，是这样的，单节点Redis的并发能力是有上限的，要进一步提高Redis的并发能力，可以搭建主从集群，实现读写分离。]]></description><category></category></item><item><title><![CDATA[JUC并发编程]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/135566750</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/135566750</guid><author>weixin_43494537</author><pubDate>Sat, 13 Jan 2024 15:09:11 +0800</pubDate><description><![CDATA[JUC]]></description><category></category></item><item><title><![CDATA[阳哥大厂第二季]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/135357898</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/135357898</guid><author>weixin_43494537</author><pubDate>Wed, 03 Jan 2024 15:54:26 +0800</pubDate><description><![CDATA[CAS：compare and set（比较并交换）代码示例代码/***//*CAS是什么？==>compareAndSet 比较并交换*/// 期望值与上次相同，修改成功// 期望值与上次不同，修改失败程序运行结果分析CAS：就拿 JMM 模型来说1、现在有两个线程：线程 A 和线程 B ，同时操作主内存中的变量 i2、线程 A 将变量 i 的副本拷贝回自己线程的工作内存，先记录变量 i 当前的值，记录为期望值。]]></description><category></category></item><item><title><![CDATA[Open Feign(二)]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/134596671</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/134596671</guid><author>weixin_43494537</author><pubDate>Fri, 24 Nov 2023 13:34:00 +0800</pubDate><description><![CDATA[设计：组件化思维// …### 如何获取组件？1) Autowired 自动装配2) 获取BeanFactory或ApplicationContext，再从里面获取[外链图片转存中...(img-VG9ccJzK-1700803995110)]### 如何传递组件？通过 Feign.Builder 传给 SynchronousMethodHandler.Factory ->SynchronousMethodHandler## 总结：设计：组件化思维。]]></description><category></category></item><item><title><![CDATA[记一次 xxl-job 实战]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/134573431</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/134573431</guid><author>weixin_43494537</author><pubDate>Thu, 23 Nov 2023 11:50:30 +0800</pubDate><description><![CDATA[配置自定义任务有许多种模式，如 Bean模式（基于方法）、Bean模式（基于类）、GLUE模式等等。这里介绍通过 Bean模式（基于方法） 是如何自定义任务的（对于其余的模式可以参考官方文档）。Bean模式（基于方法）也就是每个任务对应一个方法，通过添加 @XxLJob(value=“自定义JobHandler名称”, init = “JobHandler初始化方法”, destroy = “JobHandler销毁方法”) 注解即可完成定义。/*** 任务处理类* * @author 单程车票。]]></description><category></category></item><item><title><![CDATA[Open Feign(一)]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/134527446</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/134527446</guid><author>weixin_43494537</author><pubDate>Tue, 21 Nov 2023 11:12:15 +0800</pubDate><description><![CDATA[OpenFeign是 Spring Cloud 全家桶的组件之一， 其核心的作用是为 RestAPI提供高效简洁的 RPC 调用方式动态代理 （cglib, jdk)ImportBeanDefinitionRegistrar 接口@Import、ImportSelector、ImportBeanDefinitionRegistrar的使用和区别1）@Import(XXX.class)一般配合ImportSelector或者ImportBeanDefinitionRegistrar使用。]]></description><category></category></item><item><title><![CDATA[调用第三方接口考虑哪些点]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/134375499</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/134375499</guid><author>weixin_43494537</author><pubDate>Mon, 13 Nov 2023 13:50:49 +0800</pubDate><description><![CDATA[但是一定要有业务告警，通过人工接入的方式，进行补发处理查询类接口的重试，也要慎重考虑，如果下游接口支持的QPS有限，重试放量，容易把下游的接口打垮，所以如果决定重试，要调研下游接口的并发能力，酌情处理。4、 接口设置超时时间 (不同的业务场景设置不同的超时时间)，http工具类提供配置的超时时间参数，供其他业务场景传递，另外不传递给一个默认的超时时间，禁止不设置超时间评估超时时间，要结合业务，不能拍脑袋，比如可以根据接口监控，看一下P95、P99的响应时间，然后在这个基础上放大一点。]]></description><category></category></item><item><title><![CDATA[ElasticSearch黑马学习笔记（超详细）搜索引擎ElasticSearch7.x笔记]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/131506008</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/131506008</guid><author>weixin_43494537</author><pubDate>Sun, 02 Jul 2023 22:49:09 +0800</pubDate><description><![CDATA[match和multi_match的区别是什么？match：根据一个字段查询multi_match：根据多个字段查询，参与查询字段越多，查询性能越差query：查询条件from和size：分页条件sort：排序条件highlight：高亮条件查寻有四种；全文查询，精确查询，地理查询，符合查循，其中符合查询包含bool与functions；]]></description><category></category></item><item><title><![CDATA[k8s详细教程]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/131310955</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/131310955</guid><author>weixin_43494537</author><pubDate>Tue, 20 Jun 2023 16:58:26 +0800</pubDate><description><![CDATA[Kubernetes详细教程
1. Kubernetes介绍
1.1 应用部署方式演变
在部署应用程序的方式上，主要经历了三个时代：


传统部署：互联网早期，会直接将应用程序部署在物理机上

优点：简单，不需要其它技术的参与
缺点：不能为应用程序定义资源使用边界，很难合理地分配计算资源，而且程序之间容易产生影响



虚拟化部署：可以在一台物理机上运行多个虚拟机，每个虚拟机都是独立的一个环境

优点：程序环境不会相互产生影响，提供了一定程度的安全性
缺点：增加了操作系统，浪费了部分资源



容器化部署：]]></description><category></category></item><item><title><![CDATA[SpringSecurity从入门到精通]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/130557188</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/130557188</guid><author>weixin_43494537</author><pubDate>Sat, 13 May 2023 10:40:30 +0800</pubDate><description><![CDATA[我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json，这样可以让前端能对响应进行统一的处理。要实现这个功能我们需要知道SpringSecurity的异常处理机制。​	在SpringSecurity中，如果我们在认证或者授权的过程中出现了异常会被ExceptionTranslationFilter捕获到。在ExceptionTranslationFilter中会去判断是认证失败还是授权失败出现的异常。]]></description><category></category></item><item><title><![CDATA[设计一个高流量高并发的系统，有哪些要点？]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/130617035</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/130617035</guid><author>weixin_43494537</author><pubDate>Thu, 11 May 2023 10:59:55 +0800</pubDate><description><![CDATA[做好一个高流量高并发的系统，不论前端还是后端，过程中每一个步骤都是至关重要的。设计一个系统除了满足功能性，还要考虑兼容性、易用性、可靠性、安全性、可维护性、可移植性等软件质量。同时要对系统的吞吐量、并发数、平均响应时间等指标要完全掌握，在指标异常时可以快速做出决策避免一系列问题发生。]]></description><category></category></item><item><title><![CDATA[接口文档设计的12个注意点!]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/130395155</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/130395155</guid><author>weixin_43494537</author><pubDate>Wed, 26 Apr 2023 21:51:13 +0800</pubDate><description><![CDATA[在接口版本变化时，需要及时更新接口文档（详细描述版本的变化、兼容性问题、版本切换方式等 ），以确保用户能够获得最新的接口信息。因此，接口文档应当包含接口的安全性说明：例如接口的访问授权方式、数据传输加密方式等。一般来说，接口文档需要完善接口测试的方法和结果，以便用户可以测试接口是否符合自己的需求，让用户用得放心。定义接口文档时，对于一些需要保护的接口，也需要考虑接口的安全 ，例如权限管理、防止 SQL 注入 等。接口文档，需要提供接口的使用案例：以方便开发者理解接口的使用方法和调用流程。]]></description><category></category></item><item><title><![CDATA[SpringBoot 这样做参数校验才足够优雅]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/130358775</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/130358775</guid><author>weixin_43494537</author><pubDate>Tue, 25 Apr 2023 10:26:03 +0800</pubDate><description><![CDATA[当我们想提供可靠的 API 接口，对参数的校验，以保证最终数据入库的正确性，是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数，写了一大堆的 if else 进行校验，非常的不优雅，比起枯燥的CRUD来说，参数校验更是枯燥。这只是一个创建菜单的校验，只需要判断菜单，菜单url 以及菜单的父类id是否为空，上级菜单是否挂载正确，这样已经消耗掉了30，40行代码了，更不要说，管理后台创建商品这种参数贼多的接口。估计要写几百行校验代码了。/*** 验证参数是否正确*/]]></description><category></category></item><item><title><![CDATA[spring事务不生效的15种场景]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/130337912</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/130337912</guid><author>weixin_43494537</author><pubDate>Mon, 24 Apr 2023 11:01:59 +0800</pubDate><description><![CDATA[日常开发中，我们经常使用到spring事务。最近一位朋友去美团面试，被问了这么一道面试题: Spring 事务在哪几种情况下会不生效？今天田螺哥跟大家聊聊，spring事务不生效 的15种场景。]]></description><category></category></item><item><title><![CDATA[spring-retry]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/130264292</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/130264292</guid><author>weixin_43494537</author><pubDate>Thu, 20 Apr 2023 13:26:17 +0800</pubDate><description><![CDATA[发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的，等待过后重处理就能成功。通常来说，会用try/catch，while循环之类的语法来进行重处理，但是这样的做法缺乏统一性，并且不是很方便，要多写很多代码。然而spring-retry却可以通过注解，在不入侵原有业务逻辑代码的方式下，优雅的实现重处理功能。本篇主要简单介绍了Springboot中的Retryable的使用，主要的适用场景和注意事项，当需要重试的时候还是很有用的。]]></description><category></category></item><item><title><![CDATA[I/O 框架]]></title><link>https://blog.youkuaiyun.com/weixin_43494537/article/details/126703032</link><guid>https://blog.youkuaiyun.com/weixin_43494537/article/details/126703032</guid><author>weixin_43494537</author><pubDate>Mon, 05 Sep 2022 13:21:33 +0800</pubDate><description><![CDATA[I/O框架]]></description><category></category></item></channel></rss>