<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[小厂程序员]]></title><description><![CDATA[我们是互联网英雄叙事之外的小厂程序员]]></description><link>https://blog.youkuaiyun.com/beijiuyizui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; beijiuyizui]]></copyright><item><title><![CDATA[调试 Redis lua脚本]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/128800334</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/128800334</guid><author>beijiuyizui</author><pubDate>Mon, 30 Jan 2023 13:10:06 +0800</pubDate><description><![CDATA[本文介绍了如何使用redis-cli调试lua脚本及基础操作。]]></description><category></category></item><item><title><![CDATA[利用Advanced Queries统计Logseq年度阅读清单]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/130434237</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/130434237</guid><author>beijiuyizui</author><pubDate>Tue, 10 Jan 2023 18:14:14 +0800</pubDate><description><![CDATA[说明：本文部分内容使用ChatGPT生成
前言
在这篇文章中，我将介绍如何使用Logseq的高级查询功能来统计年度阅读清单。阅读是一种重要的学习和个人发展方式，通过对阅读材料的记录和统计，我们可以更好地提高阅读效率和掌握阅读进度。而Logseq正是一个非常适合用来统计阅读清单的工具。我将分享我的个人使用经验，并向读者展示如何使用Logseq的高级查询功能来统计年度阅读清单。
通过本文，读者将学会如...]]></description><category></category></item><item><title><![CDATA[02 - Redis源码结构介绍]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/125302710</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/125302710</guid><author>beijiuyizui</author><pubDate>Wed, 15 Jun 2022 18:49:14 +0800</pubDate><description><![CDATA[从功能角度介绍Redis源码文件作用，便于按图索骥阅读源码]]></description><category></category></item><item><title><![CDATA[01 - 使用VS Code调试Redis源码]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/124759869</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/124759869</guid><author>beijiuyizui</author><pubDate>Fri, 13 May 2022 21:03:20 +0800</pubDate><description><![CDATA[为什么要阅读Redis源码？
有哪些参考资料推荐？
怎样在VS Code中调试源码？
本文会解答以上三个问题。]]></description><category></category></item><item><title><![CDATA[IDEA无法启动: The IDE cannot create the directory]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/121773963</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/121773963</guid><author>beijiuyizui</author><pubDate>Tue, 07 Dec 2021 17:38:47 +0800</pubDate><description><![CDATA[解决IDEA因为读写权限无法启动的问题]]></description><category></category></item><item><title><![CDATA[使用JMH框架进行性能基准测试]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/120569429</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/120569429</guid><author>beijiuyizui</author><pubDate>Thu, 30 Sep 2021 16:55:52 +0800</pubDate><description><![CDATA[介绍
我们在选择不同框架、算法时，不同场景下的性能是很重要考虑因素。JMH这个Java的微基准测试框架提供简单的方式来实现性能测试的需求。本文将以一个对比序列化器性能的例子简单介绍JMH的使用。
创建项目
不同于 JUnit 这种测试框架，JMH推荐创建独立的项目来做测试。
使用maven创建
mvn archetype:generate \
-DinteractiveMode=false \
-DarchetypeGroupId=org.openjdk.jmh \
-DarchetypeArtifactI]]></description><category></category></item><item><title><![CDATA[把写作作为方法: 卡片笔记写作法]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/130434238</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/130434238</guid><author>beijiuyizui</author><pubDate>Tue, 27 Jul 2021 08:32:09 +0800</pubDate><description><![CDATA[抛开消遣，娱乐不说，我们阅读，学习的目的都是希望有所得，而找到正确方法能够使我们的学习效率事半功倍。
德国当代重要的社会学家尼克拉斯·卢曼用一套卡片盒笔记法写了70多本书，发表了400多篇学术文章。不同于传统图书馆式分门别类把笔记放到不同文件夹中的做法，卡片盒笔记法会形成网络状的知识结构，信息被加工成知识，洞见将从知识网络中涌现出来。
《卡片笔记写作法：如何实现从阅读到写作》一书系统介绍了卡片盒笔...]]></description><category></category></item><item><title><![CDATA[springboot升级后mvn test找不到单元测试]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/115503280</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/115503280</guid><author>beijiuyizui</author><pubDate>Thu, 08 Apr 2021 09:06:04 +0800</pubDate><description><![CDATA[Springboot版本从2.1.11.RELEASE升级到2.4.3之后发现执行 mvn test找不到单元测试执行了。
之前了解过某个 2.x 版本后的spring-boot-test默认使用Junit5作为默认测试执行器，而现有代码中的测试使用的是Junit4进行编写，怀疑是此原因造成。
在junit5相关文档中找到了相关描述，意思是说，想要 maven-surefire-plugin执行 Junit 的测试，在依赖中必须要声明一个TestEngine的实现：
&lt;!-- Junit5 配置实现 ]]></description><category></category></item><item><title><![CDATA[数据去哪了？：从一次生产事故聊聊并发编程原子性问题]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/115189700</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/115189700</guid><author>beijiuyizui</author><pubDate>Wed, 24 Mar 2021 22:34:06 +0800</pubDate><description><![CDATA[1. 引言
最近公司小伙伴的服务遇到一个奇怪的丢数据问题：每天总是莫名其妙的丢几条数据，经过分析排查之后发现是没有处理好并发而导致的。
问题复盘之后我认为这是并发编程中典型的原子性问题。对于并发编程不是很熟悉的小伙伴来说是一个很好的例子。
2. 问题复盘
整个业务的逻辑其实是比较简单：不断的接收消息，定时的把收集的消息发送到一个目标地址。
2.1 关键代码

talk is cheap, show me the code!

我仿写了引起并发问题的类，只保留了核心逻辑，除了lombok与logback之外没]]></description><category></category></item><item><title><![CDATA[centos + nginx + docsify在服务器上搭建一个简单博客（3）: 安装docsify]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/113739748</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/113739748</guid><author>beijiuyizui</author><pubDate>Sun, 07 Feb 2021 13:44:50 +0800</pubDate><description><![CDATA[docsify是一个快速生成文档的利器，使用docsify搭建博客而不是hexo或者其他博客框架其实就是为了他的轻量级，让我们的关注点放在如何写文章上面。
docsify是nodejs所写的，因此需要安装一下nodejs环境，可以通过前往https://nodejs.org/zh-cn/选择不同平台安装。
安装完成之后执行指令，就能看到nodejs版本了。
➜  ~ node -v
v13.8.0

接下来建一个空目录，比如我给博客起的名字是grokking-program。
进入到目录后，执行
docsi]]></description><category></category></item><item><title><![CDATA[mockStatic时抛出java.lang.ExceptionInInitializerError]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/111662679</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/111662679</guid><author>beijiuyizui</author><pubDate>Fri, 25 Dec 2020 10:31:01 +0800</pubDate><description><![CDATA[解决方法
在测试类上增加注解
@SuppressStaticInitializationFor("org.mycompany.ClassWithEvilStaticInitializer")
里面填上你要mock类的包名+类名
参考资料


https://github.com/powermock/powermock/wiki/Suppress-Unwanted-Behavior


https://stackoverflow.com/questions/38679426/java-lang-excepti]]></description><category></category></item><item><title><![CDATA[向贫血模型宣战]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/111465100</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/111465100</guid><author>beijiuyizui</author><pubDate>Sun, 20 Dec 2020 23:40:02 +0800</pubDate><description><![CDATA[什么是贫血模型
回想一下我们定义的经典代码
public class UserPo {
    private String id;
    private String name;    
    private String age;
    //getter、setter
}

这个UserPo类没有任何行为，只是数据容器，只是为了适应Hibernate、Mybatis这些ORM框架而存在。
使用这种模型带来的后果是什么呢？大量的业务逻辑，校验规则都被放到了service层。
举个简单的例子，修改年龄]]></description><category></category></item><item><title><![CDATA[用上ConcurrentHashMap，就没有并发问题了？]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/109383328</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/109383328</guid><author>beijiuyizui</author><pubDate>Fri, 30 Oct 2020 13:20:51 +0800</pubDate><description><![CDATA[主题

并发问题的三个来源：原子性、可见性、有序性
ConcurrentHashMap只能保证提供的原子性读写操作是线程安全的

用户注册模拟并发问题
我们从一个用户注册的例子来了解并发问题。
在这个例子中模拟了用户注册行为，定义了相同用户名不能重复注册的规则，我们使用ConcurrentHashMap保存用户信息，通过模拟同时注册的动作体现并发问题。
定义用户类
class User {
	// 用户名，也是Map的key
	private String username; 
	private int a]]></description><category></category></item><item><title><![CDATA[2020M9W1 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/108614343</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/108614343</guid><author>beijiuyizui</author><pubDate>Wed, 16 Sep 2020 08:51:30 +0800</pubDate><description><![CDATA[1. Algorithm: LeetCode. 628
题干

给定一个整型数组，在数组中找出由三个数组成的最大乘积，并输出这个乘积。
示例 1:
输入: [1,2,3]
输出: 6

示例 2:
输入: [1,2,3,4]
输出: 24

注意:
给定的整型数组长度范围是[3,104]，数组中所有的元素范围是[-1000, 1000]。
输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/ma]]></description><category></category></item><item><title><![CDATA[2020M8W5 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/108440456</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/108440456</guid><author>beijiuyizui</author><pubDate>Mon, 07 Sep 2020 08:41:36 +0800</pubDate><description><![CDATA[1. Algorithm: leetCode.414

给定一个非空数组，返回此数组中第三大的数。如果不存在，则返回数组中最大的数。要求算法时间复杂度必须是O(n)。
示例 1:
输入: [3, 2, 1]

输出: 1

解释: 第三大的数是 1.
示例 2:
输入: [1, 2]

输出: 2

解释: 第三大的数不存在, 所以返回最大的数 2 .
示例 3:
输入: [2, 2, 3, 1]
输出: 1
解释: 注意，要求返回第三大的数，是指第三大且唯一出现的数。
存在两个值为2的数，它们都排第二。
]]></description><category></category></item><item><title><![CDATA[2020M8W3 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/108314922</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/108314922</guid><author>beijiuyizui</author><pubDate>Mon, 31 Aug 2020 09:10:58 +0800</pubDate><description><![CDATA[1. Algorithm: leetCode.485
1.1 题目描述

给定一个二进制数组， 计算其中最大连续1的个数。
示例 1:
输入: [1,1,0,1,1,1]
输出: 3

解释: 开头的两位和最后的三位都是连续1，所以最大连续1的个数是 3.
注意：
输入的数组只包含 0 和1。
输入数组的长度是正整数，且不超过 10,000。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/max-consecutive-ones
著作权归领扣网络所有]]></description><category></category></item><item><title><![CDATA[2020 M8W4 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/108314874</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/108314874</guid><author>beijiuyizui</author><pubDate>Mon, 31 Aug 2020 09:08:24 +0800</pubDate><description><![CDATA[1. Algorithm: leetCode.495
1.1 题目描述

在《英雄联盟》的世界中，有一个叫 “提莫” 的英雄，他的攻击可以让敌方英雄艾希（编者注：寒冰射手）进入中毒状态。现在，给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间，你需要输出艾希的中毒状态总时长。
你可以认为提莫在给定的时间点进行攻击，并立即使艾希处于中毒状态。
示例1:
输入: [1,4], 2
输出: 4

原因: 第 1 秒初，提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟，直到第 2 秒末结束。
第 4]]></description><category></category></item><item><title><![CDATA[2020M8W2 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/108053204</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/108053204</guid><author>beijiuyizui</author><pubDate>Mon, 17 Aug 2020 12:08:36 +0800</pubDate><description><![CDATA[2020 M8W2 ARTS
1. Algorithm：LeetCode1456. 定长子串中元音的最大数目

给你字符串 s 和整数 k 。
请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。
英文中的 元音字母 为（a, e, i, o, u）。
示例 1：
输入：s = "abciiidef", k = 3
输出：3

解释：子字符串 “iii” 包含 3 个元音字母。
示例 2：
输入：s = "aeiou", k = 2
输出：2

解释：任意长度为 2 的子字符串都包含 ]]></description><category></category></item><item><title><![CDATA[2020M8W1 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/107905101</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/107905101</guid><author>beijiuyizui</author><pubDate>Mon, 10 Aug 2020 09:31:52 +0800</pubDate><description><![CDATA[1. Algorithm

给你一个字符串 S、一个字符串 T 。请你设计一种算法，可以在 O(n) 的时间复杂度内，从字符串 S 里面找出：包含 T 所有字符的最小子串。
示例：
输入：S = "ADOBECODEBANC", T = "ABC"
输出："BANC"

提示：
如果 S 中不存这样的子串，则返回空字符串 “”。
如果 S 中存在这样的子串，我们保证它是唯一的答案。
来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/minimum-win]]></description><category></category></item><item><title><![CDATA[2020M7W4 ARTS]]></title><link>https://blog.youkuaiyun.com/beijiuyizui/article/details/107759412</link><guid>https://blog.youkuaiyun.com/beijiuyizui/article/details/107759412</guid><author>beijiuyizui</author><pubDate>Mon, 03 Aug 2020 11:06:16 +0800</pubDate><description><![CDATA[2020 M7W4 ARTS
1. Algorithm
1.1 3. 无重复字符的最长子串

给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3 

解释: 因为无重复字符的最长子串是 “abc”，所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1

解释: 因为无重复字符的最长子串是 “b”，所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3

解释: 因为无重复字符的最长子串是 “wke”，所以其长度为]]></description><category></category></item></channel></rss>