<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tensleep的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/tensleep</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; tensleep]]></copyright><item><title><![CDATA[redission分布式锁的介绍及使用]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/158622560</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/158622560</guid><author>tensleep</author><pubDate>Tue, 24 Mar 2026 17:20:20 +0800</pubDate><description><![CDATA[注解本身起到标记作用，同时还要带上锁参数：锁名称锁等待时间锁超时时间时间单位@Component@Aspect// 1.创建锁对象// 2.尝试获取锁// 3.判断是否成功if(!isLock) {// 3.1.失败，快速结束throw new BizIllegalException("请求太频繁");try {// 3.2.成功，执行业务// 4.释放锁@Overridereturn 0;]]></description><category></category></item><item><title><![CDATA[Synchronized的四种锁状态解析]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/158661073</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/158661073</guid><author>tensleep</author><pubDate>Wed, 04 Mar 2026 20:30:53 +0800</pubDate><description><![CDATA[在常规的使用过程的中我们仅停留在重量级锁的层面吗，认为其开销过大，其实从jdk1.6开始Synchronized就引入了锁升级机制，以适应不同的场景。本文将带大家了解其四种锁状态。]]></description><category></category></item><item><title><![CDATA[23种设计模式之创建者模式（单例模式，工厂模式，原型模式，建造者模式）]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139720458</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139720458</guid><author>tensleep</author><pubDate>Sun, 30 Jun 2024 00:48:19 +0800</pubDate><description><![CDATA[单例模式，工厂模式，原型模式，建造者模式]]></description><category></category></item><item><title><![CDATA[双检锁创建单例为什么会出现空指针]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139722131</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139722131</guid><author>tensleep</author><pubDate>Sun, 16 Jun 2024 16:40:44 +0800</pubDate><description><![CDATA[上面错误双重检查锁定的示例代码中，如果线程 1 获取到锁进入创建对象实例，这个时候发生了指令重排序。当线程1 执行到 t3 时刻，线程 2 刚好进入，由于此时对象已经不为 Null，所以线程 2 可以自由访问该对象。以上代码 2,3 可能发生重排序，但是并不会重排序 1 的顺序。也就是说 1 这个指令都需要先执行，因为 2,3 指令需要依托 1 指令执行结果。看似没有问题，其实不然，出现空指针的原因是因为用new创建对象时并不是一个原子操作，使用java-c可以快速查看字节码。找了个图方便大家理解。]]></description><category></category></item><item><title><![CDATA[java如何实现发送邮件]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139484559</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139484559</guid><author>tensleep</author><pubDate>Wed, 05 Jun 2024 23:39:57 +0800</pubDate><description><![CDATA[在生产中难免会有异常数据，或者获得一些优惠券，但用户又不在线，那么就可以通过发送邮件去解决。]]></description><category></category></item><item><title><![CDATA[定时任务SpringTask]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139389484</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139389484</guid><author>tensleep</author><pubDate>Mon, 03 Jun 2024 23:34:03 +0800</pubDate><description><![CDATA[分为6或7个域，由空格分隔开，每个域代表一个含义每个域的含义分别为：秒、分钟、小时、日、月、周、年(可选)]]></description><category></category></item><item><title><![CDATA[IOC与DI]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139391004</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139391004</guid><author>tensleep</author><pubDate>Sun, 02 Jun 2024 15:02:14 +0800</pubDate><description><![CDATA[ioc就是一个巨大的容器，里面保存很多对象的实例，主要设计ioc控制反转，即将对象的创建的控制权交给ioc，由ioc管理bean的创建及管理，ioc容器创建的对象叫做bean对象。那么怎么能将其加入到ioc容器中，那么就需要在类上加上@Component，为了更好的区分这个bean来自哪一层，又引入了@Controller （标注在控制层类上）@Service （标注在业务层类上）@Mapper（标注在数据访问层类上）那么我加入到了ioc容器中我如何实现将bean引入到我的类中去呢？]]></description><category></category></item><item><title><![CDATA[redis在如何在springboot中使用]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139308623</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139308623</guid><author>tensleep</author><pubDate>Wed, 29 May 2024 23:56:03 +0800</pubDate><description><![CDATA[当前配置类不是必须的，因为 Spring Boot 框架会自动装配 RedisTemplate 对象，但是默认的key序列化器为。JdkSerializationRedisSerializer，导致我们存到Redis中后的数据和原始数据有差别，故设置为。database:指定使用Redis的哪个数据库，Redis服务启动后默认有16个数据库，编号分别是从0到15。在application.yml中添加读取application-dev.yml中的相关Redis配置。在test下新建测试类。]]></description><category></category></item><item><title><![CDATA[反射的使用]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139306612</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139306612</guid><author>tensleep</author><pubDate>Wed, 29 May 2024 23:42:23 +0800</pubDate><description><![CDATA[虽然说反射在开发中很少用到，但它可以帮助你去理解了解，都知道spring是基于动态代理来实现的，而动态代理又是基于反射的，也就是说你熟练掌握的了反射，你就熟练掌握了如何开发框架，哈哈哈哈开个玩笑。]]></description><category></category></item><item><title><![CDATA[Stream流]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139279358</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139279358</guid><author>tensleep</author><pubDate>Tue, 28 May 2024 23:56:06 +0800</pubDate><description><![CDATA[虽然说这是1.8的“新特性”，但我相信仍有部分同僚还没能掌握，当然这并不是什么多牛逼的技能，但其可以帮助我们能看懂同事写的代码，避免扯皮。这篇文章将会介绍stream流的使用，相信看完会有不小的收获，废话不多说，步入正题。]]></description><category></category></item><item><title><![CDATA[优雅的判空]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139103453</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139103453</guid><author>tensleep</author><pubDate>Tue, 28 May 2024 22:03:34 +0800</pubDate><description><![CDATA[在开发时最常见的异常就是空指针异常，在网上有个段子说程序员一日三空，常规的判断就是嵌套大量的if啥啥啥不等于 null如下；为了方便描述，这边建了三个实体类。]]></description><category></category></item><item><title><![CDATA[利用字典树进行字符串替换]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139223520</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139223520</guid><author>tensleep</author><pubDate>Mon, 27 May 2024 20:40:26 +0800</pubDate><description><![CDATA[先来介绍下什么是字典树吧，与大多数树状结构无异，都是从根节点出发下面有子节点，对子节点的管理是通过一个字典来进行管理的，也就是map，说到这很多朋友就反应过来了，为了方便理解我给附上图，bi站上的动画做的通俗易懂。"****"肯定都见过吧，我们最先想到的肯定是暴力for循环，那如果敏感词足够多呢，那么其效率可想而知，最近进行学习时发现了可以利用字典树进行实现这一个步骤。具体实现呢我这已经描述的非常清楚了，有不懂的可以评论区回复，并且在写这篇文章时自己发现了个小bug，不知道有没有眼尖朋友看出来。]]></description><category></category></item><item><title><![CDATA[异步任务CompletableFuture]]></title><link>https://blog.youkuaiyun.com/tensleep/article/details/139050837</link><guid>https://blog.youkuaiyun.com/tensleep/article/details/139050837</guid><author>tensleep</author><pubDate>Sun, 19 May 2024 23:48:18 +0800</pubDate><description><![CDATA[CompletableFuture能够联想到的是Future，其次呢，其还实现了CompletionStage，这个作用呢就是对一些执行时间比较长的任务进行拆分。然后调用CompletableFuture.supplyAsync()跟allof().join()方法去完成任务的执行。在使用的时候呢需要提供一个线程池（线程工厂跟拒绝策略是默认的，为方便，为未指定，有需求可自行添加）]]></description><category></category></item></channel></rss>