<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[藿香正气的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/alex_hh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; alex_hh]]></copyright><item><title><![CDATA[Redis缓存问题及解决方案]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/145855404</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/145855404</guid><author>alex_hh</author><pubDate>Wed, 26 Feb 2025 11:16:47 +0800</pubDate><description><![CDATA[这种方法适用于数据命中不高、数据相对固定、实时性低(通常是数据集较大)的应用场景，代码维护较为复杂，但是缓存空间占用少。由于数据库中也不存在该数据，因此无法将结果写入缓存，后续相同的请求会持续穿透到数据库，造成数据库压力骤增甚至崩溃。，导致所有请求直接穿透到数据库，引发数据库压力骤增甚至崩溃的现象。大量缓存Key设置了相同的过期时间（如默认1小时），导致这些Key同时失效。为value值设置逻辑过期时间，当数据过期时，触发异步更新，期间返回旧数据。：若空值对应的数据后续被添加到数据库，需主动清理缓存。]]></description><category></category></item><item><title><![CDATA[Redis持久化机制与数据恢复]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/145853895</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/145853895</guid><author>alex_hh</author><pubDate>Tue, 25 Feb 2025 15:54:10 +0800</pubDate><description><![CDATA[bgsave主流的触发Redis持久化方式。]]></description><category></category></item><item><title><![CDATA[Redis核心数据结构与底层实现]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/145843785</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/145843785</guid><author>alex_hh</author><pubDate>Tue, 25 Feb 2025 15:10:03 +0800</pubDate><description><![CDATA[（16 字节）和 SDS 头（3 字节）+ 字符串内容（44 字节）+ 结束符（1 字节）。：embstr 利用 jemalloc 的 64 字节内存块，连续存放。和字符串数据（SDS，Simple Dynamic String）设置key的过期时间： set key value EX 60 NX。每分钟获取验证码的频率，同一ip每秒钟访问不得超过n次等。可以实现快速计数，查看缓存，同时异步落地到其他数据源。incr key : 对值做自增操作。]]></description><category></category></item><item><title><![CDATA[高频的反射操作，可以使用「Lambda 生成函数映射」代替]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/129142814</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/129142814</guid><author>alex_hh</author><pubDate>Tue, 21 Feb 2023 15:16:52 +0800</pubDate><description><![CDATA[用「 Lambda 生成函数映射」代替「高频的反射操作」]]></description><category></category></item><item><title><![CDATA[创建线程的4种方法]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/129090373</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/129090373</guid><author>alex_hh</author><pubDate>Mon, 20 Feb 2023 18:22:46 +0800</pubDate><description><![CDATA[创建线程的方式]]></description><category></category></item><item><title><![CDATA[共享锁CountDownLatch练习]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/129029022</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/129029022</guid><author>alex_hh</author><pubDate>Tue, 14 Feb 2023 16:36:50 +0800</pubDate><description><![CDATA[共享锁CountDownLatch]]></description><category></category></item><item><title><![CDATA[SimpleDateFormat是线程不安全的]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/128938757</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/128938757</guid><author>alex_hh</author><pubDate>Wed, 08 Feb 2023 17:06:31 +0800</pubDate><description><![CDATA[SimpleDateFormat是线程不安全的]]></description><category></category></item><item><title><![CDATA[需要在synchronized同步块的内部使用wait()和notify()方法]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/128921599</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/128921599</guid><author>alex_hh</author><pubDate>Tue, 07 Feb 2023 16:49:04 +0800</pubDate><description><![CDATA[wait()和notify()类型方法必须放在synchronized()同步块中使用]]></description><category></category></item><item><title><![CDATA[java8的Comparator排序]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/128833797</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/128833797</guid><author>alex_hh</author><pubDate>Wed, 01 Feb 2023 14:55:25 +0800</pubDate><description><![CDATA[Comparator.comparing]]></description><category></category></item><item><title><![CDATA[ListenableFuture练习]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/127447661</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/127447661</guid><author>alex_hh</author><pubDate>Fri, 21 Oct 2022 15:41:41 +0800</pubDate><description><![CDATA[ListenableFuture是对原有Future的增强，用于监听Future任务的执行情况。]]></description><category></category></item><item><title><![CDATA[java8:使用stream().distinct()对list去重]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/126994667</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/126994667</guid><author>alex_hh</author><pubDate>Thu, 22 Sep 2022 16:50:22 +0800</pubDate><description><![CDATA[distinct()是基于hashCode（）和equals（）工作的。]]></description><category></category></item><item><title><![CDATA[[xxl-job]执行器路由策略]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/123715002</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/123715002</guid><author>alex_hh</author><pubDate>Mon, 28 Mar 2022 14:54:49 +0800</pubDate><description><![CDATA[13、路由策略：执行器集群部署时提供丰富的路由策略，包括：第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等；

xxl-job官网

]]></description><category></category></item><item><title><![CDATA[数据库时区查询]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/121753794</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/121753794</guid><author>alex_hh</author><pubDate>Mon, 06 Dec 2021 19:17:29 +0800</pubDate><description><![CDATA[mysql
show variables like'%time_zone';

sql server
SELECT CURRENT_TIMEZONE();


]]></description><category></category></item><item><title><![CDATA[python笔记：列表list]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/121639037</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/121639037</guid><author>alex_hh</author><pubDate>Tue, 30 Nov 2021 18:38:42 +0800</pubDate><description><![CDATA[列表的长度可变，内容也可以修改。使用中括号[]或者list类型函数来定义列表：
a_list = [1, 2, 3, 4]
b_list = list(range(10))



]]></description><category></category></item><item><title><![CDATA[Java：什么时候使用Parallel Stream？]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/121605803</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/121605803</guid><author>alex_hh</author><pubDate>Mon, 29 Nov 2021 16:34:29 +0800</pubDate><description><![CDATA[原文：When to Use a Parallel Stream in Java
Streams in Java
顺序流 Sequential Stream
默认，Java中的任何流操作都是顺序执行的，除非特别指定为并行。
顺序流是单线程执行的：
List&lt;Integer&gt; listOfNumbers = Arrays.asList(1,2,3,4);
listOfNumbers.stream().forEach(number -&gt;
	System.out.println(number +]]></description><category></category></item><item><title><![CDATA[openpyxl介绍 ：一个用于读写Excel 2010 xlsx/xlsm 文件的python 库]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/120952458</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/120952458</guid><author>alex_hh</author><pubDate>Mon, 25 Oct 2021 15:36:20 +0800</pubDate><description><![CDATA[作者：Eric Gazoni, Charlie Clark
源代码：https://foss.heptapod.net/openpyxl/openpyxl
版本信息：https://openpyxl.readthedocs.io/en/stable/changes.html
安装
 pip install openpyxl

文件中如果包含图片（jpeg, png, bmp,…），需要安装“pillow”库
pip install pillow

https://pypi.org/project/Pillo]]></description><category></category></item><item><title><![CDATA[Java 11：Lambda参数的局部变量语法（Local Variable Syntax for Lambda Parameters）]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/119456616</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/119456616</guid><author>alex_hh</author><pubDate>Fri, 06 Aug 2021 16:06:10 +0800</pubDate><description><![CDATA[原文：Java 11 Local Variable Syntax for Lambda Parameters
1. 介绍
Lambda参数的局部变量语法是Java 11引入的唯一个语言特性。本文我们将一起探索这个新特性。
2. Lambda参数的局部变量语法
Java 10引入的一个关键特性之一为局部变量类型推断：Java 10 LocalVariable Type-Inference，允许用var作为局部变量的类型。编译器根据分配给变量的值推断类型。
然后，我们并不能在lambda表达式上应用这个特性。比]]></description><category></category></item><item><title><![CDATA[Java8 Stream API基础教程]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/119352084</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/119352084</guid><author>alex_hh</author><pubDate>Thu, 05 Aug 2021 18:46:55 +0800</pubDate><description><![CDATA[原文：The Java 8 Stream API Tutorial
1.概述
本教程，我们将介绍Java 8 Stream从创建到并行执行的实践。
读者要求：Java 8基础知识（lambda表达式，Optional，方法引用）和Stream API基础知识。可以参考之前的文章：New Features in Java 8、Introduction to Java 8 Streams
2.Stream创建
从不同资源创建一个stream实例有很多方式，一旦创建这个实例，它的资源不会更改，因此从一个单一资源可]]></description><category></category></item><item><title><![CDATA[java11新特性]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/119330593</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/119330593</guid><author>alex_hh</author><pubDate>Tue, 03 Aug 2021 09:57:46 +0800</pubDate><description><![CDATA[原文：New Features in Java 11
1.概述
Oracle在2018年9月发布了java 11，仅在其前身版本10后6个月。
java 11是继java 8 之后第一个长期支持的版本。Oracle在2019年一月份已经停止了对java 8 的支持。因此，大部分人会升级到java 11。
在本教程中，我们将看看选择java 11的原因。然后我们将会探索几个新特性，已移除的特性以及java11中引入的性能增强。
2.Oracle vs. Open JDK
Java10是最后一个免费的Oracl]]></description><category></category></item><item><title><![CDATA[java：Collections.EMPTY_LIST]]></title><link>https://blog.youkuaiyun.com/alex_hh/article/details/116022006</link><guid>https://blog.youkuaiyun.com/alex_hh/article/details/116022006</guid><author>alex_hh</author><pubDate>Thu, 22 Apr 2021 17:19:54 +0800</pubDate><description><![CDATA[List&lt;Integer&gt; list = Collections.EMPTY_LIST;

用Collections.EMPTY_LIST声明的list不能进行add操作否则会报错： java.lang.UnsupportedOperationException
Collections.EMPTY_LIST 的实现
public static final List EMPTY_LIST = new EmptyList&lt;&gt;();

EmptyList是Collections的一个静态内]]></description><category></category></item></channel></rss>