自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小厂程序员

我们是互联网英雄叙事之外的小厂程序员

  • 博客(41)
  • 收藏
  • 关注

原创 调试 Redis lua脚本

本文介绍了如何使用redis-cli调试lua脚本及基础操作。

2023-01-30 13:10:06 714

原创 利用Advanced Queries统计Logseq年度阅读清单

说明:本文部分内容使用ChatGPT生成前言在这篇文章中,我将介绍如何使用Logseq的高级查询功能来统计年度阅读清单。阅读是一种重要的学习和个人发展方式,通过对阅读材料的记录和统计,我们可以更好地提高阅读效率和掌握阅读进度。而Logseq正是一个非常适合用来统计阅读清单的工具。我将分享我的个人使用经验,并向读者展示如何使用Logseq的高级查询功能来统计年度阅读清单。通过本文,读者将学会如...

2023-01-10 18:14:14 342

原创 02 - Redis源码结构介绍

从功能角度介绍Redis源码文件作用,便于按图索骥阅读源码

2022-06-15 18:49:14 337

原创 01 - 使用VS Code调试Redis源码

为什么要阅读Redis源码?有哪些参考资料推荐?怎样在VS Code中调试源码?本文会解答以上三个问题。

2022-05-13 21:03:20 1395

原创 IDEA无法启动: The IDE cannot create the directory

解决IDEA因为读写权限无法启动的问题

2021-12-07 17:38:47 4447 1

原创 使用JMH框架进行性能基准测试

介绍我们在选择不同框架、算法时,不同场景下的性能是很重要考虑因素。JMH这个Java的微基准测试框架提供简单的方式来实现性能测试的需求。本文将以一个对比序列化器性能的例子简单介绍JMH的使用。创建项目不同于 JUnit 这种测试框架,JMH推荐创建独立的项目来做测试。使用maven创建mvn archetype:generate \-DinteractiveMode=false \-DarchetypeGroupId=org.openjdk.jmh \-DarchetypeArtifactI

2021-09-30 16:55:52 320

原创 把写作作为方法: 卡片笔记写作法

抛开消遣,娱乐不说,我们阅读,学习的目的都是希望有所得,而找到正确方法能够使我们的学习效率事半功倍。德国当代重要的社会学家尼克拉斯·卢曼用一套卡片盒笔记法写了70多本书,发表了400多篇学术文章。不同于传统图书馆式分门别类把笔记放到不同文件夹中的做法,卡片盒笔记法会形成网络状的知识结构,信息被加工成知识,洞见将从知识网络中涌现出来。《卡片笔记写作法:如何实现从阅读到写作》一书系统介绍了卡片盒笔...

2021-07-27 08:32:09 102

原创 springboot升级后mvn test找不到单元测试

Springboot版本从2.1.11.RELEASE升级到2.4.3之后发现执行 mvn test找不到单元测试执行了。之前了解过某个 2.x 版本后的spring-boot-test默认使用Junit5作为默认测试执行器,而现有代码中的测试使用的是Junit4进行编写,怀疑是此原因造成。在junit5相关文档中找到了相关描述,意思是说,想要 maven-surefire-plugin执行 Junit 的测试,在依赖中必须要声明一个TestEngine的实现:<!-- Junit5 配置实现

2021-04-08 09:06:04 2555

原创 数据去哪了?:从一次生产事故聊聊并发编程原子性问题

1. 引言最近公司小伙伴的服务遇到一个奇怪的丢数据问题:每天总是莫名其妙的丢几条数据,经过分析排查之后发现是没有处理好并发而导致的。问题复盘之后我认为这是并发编程中典型的原子性问题。对于并发编程不是很熟悉的小伙伴来说是一个很好的例子。2. 问题复盘整个业务的逻辑其实是比较简单:不断的接收消息,定时的把收集的消息发送到一个目标地址。2.1 关键代码talk is cheap, show me the code!我仿写了引起并发问题的类,只保留了核心逻辑,除了lombok与logback之外没

2021-03-24 22:34:06 83

原创 centos + nginx + docsify在服务器上搭建一个简单博客(3): 安装docsify

docsify是一个快速生成文档的利器,使用docsify搭建博客而不是hexo或者其他博客框架其实就是为了他的轻量级,让我们的关注点放在如何写文章上面。docsify是nodejs所写的,因此需要安装一下nodejs环境,可以通过前往https://nodejs.org/zh-cn/选择不同平台安装。安装完成之后执行指令,就能看到nodejs版本了。➜ ~ node -vv13.8.0接下来建一个空目录,比如我给博客起的名字是grokking-program。进入到目录后,执行docsi

2021-02-07 13:44:50 699 1

原创 mockStatic时抛出java.lang.ExceptionInInitializerError

解决方法在测试类上增加注解@SuppressStaticInitializationFor("org.mycompany.ClassWithEvilStaticInitializer")里面填上你要mock类的包名+类名参考资料https://github.com/powermock/powermock/wiki/Suppress-Unwanted-Behaviorhttps://stackoverflow.com/questions/38679426/java-lang-excepti

2020-12-25 10:31:01 1816 1

原创 向贫血模型宣战

什么是贫血模型回想一下我们定义的经典代码public class UserPo { private String id; private String name; private String age; //getter、setter}这个UserPo类没有任何行为,只是数据容器,只是为了适应Hibernate、Mybatis这些ORM框架而存在。使用这种模型带来的后果是什么呢?大量的业务逻辑,校验规则都被放到了service层。举个简单的例子,修改年龄

2020-12-20 23:40:02 157

原创 用上ConcurrentHashMap,就没有并发问题了?

主题并发问题的三个来源:原子性、可见性、有序性ConcurrentHashMap只能保证提供的原子性读写操作是线程安全的用户注册模拟并发问题我们从一个用户注册的例子来了解并发问题。在这个例子中模拟了用户注册行为,定义了相同用户名不能重复注册的规则,我们使用ConcurrentHashMap保存用户信息,通过模拟同时注册的动作体现并发问题。定义用户类class User { // 用户名,也是Map的key private String username; private int a

2020-10-30 13:20:51 2027 10

原创 2020M9W1 ARTS

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

2020-09-16 08:51:30 80

原创 2020M8W5 ARTS

1. Algorithm: leetCode.414给定一个非空数组,返回此数组中第三大的数。如果不存在,则返回数组中最大的数。要求算法时间复杂度必须是O(n)。示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: [1, 2]输出: 2解释: 第三大的数不存在, 所以返回最大的数 2 .示例 3:输入: [2, 2, 3, 1]输出: 1解释: 注意,要求返回第三大的数,是指第三大且唯一出现的数。存在两个值为2的数,它们都排第二。

2020-09-07 08:41:36 77

原创 2020M8W3 ARTS

1. Algorithm: leetCode.4851.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著作权归领扣网络所有

2020-08-31 09:10:58 151

原创 2020 M8W4 ARTS

1. Algorithm: leetCode.4951.1 题目描述在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。现在,给出提莫对艾希的攻击时间序列和提莫攻击的中毒持续时间,你需要输出艾希的中毒状态总时长。你可以认为提莫在给定的时间点进行攻击,并立即使艾希处于中毒状态。示例1:输入: [1,4], 2输出: 4原因: 第 1 秒初,提莫开始对艾希进行攻击并使其立即中毒。中毒状态会维持 2 秒钟,直到第 2 秒末结束。第 4

2020-08-31 09:08:24 120

原创 2020M8W2 ARTS

2020 M8W2 ARTS1. 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 的子字符串都包含

2020-08-17 12:08:36 153

原创 2020M8W1 ARTS

1. Algorithm给你一个字符串 S、一个字符串 T 。请你设计一种算法,可以在 O(n) 的时间复杂度内,从字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入:S = "ADOBECODEBANC", T = "ABC"输出:"BANC"提示:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/minimum-win

2020-08-10 09:31:52 176

原创 2020M7W4 ARTS

2020 M7W4 ARTS1. Algorithm1.1 3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为

2020-08-03 11:06:16 117

原创 Web安全:使用HSTS阻挡中间人攻击

背景介绍之前在自己的服务器上架设了博客并发布到了公网,考虑到安全性还特意加了HTTPS支持。稳定运行一段时间之后前两个星期忽然就无法访问了,以下是我的破案纪实。案发现场:博客无法访问之前搭建的博客突然不能访问了,浏览器提示重定向次数过多,我就有了不好的预感,去服务器上看扫了一眼nginx访问日志,果然发现了一点猫腻。41.230.21.146 - - [26/Jul/2020:04:06:50 +0800] "GET /index.php?s=/index/\x09hink\x07pp/invoke

2020-07-30 13:59:30 1306

原创 2020M7W3 ARTS

2020 M7W3 ARTS1. Algorithm1.1 面试题 16.07. 最大数值编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。示例:输入: a = 1, b = 2输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。这题看上去很奇怪,不能用比较符号怎么比较大小?但是仔细想想运算符的

2020-07-27 23:22:12 155

原创 2020M7W2 ARTS

1. Algorithm1.1 169. 多数元素给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element著作权归领扣网络所有。商业转载请联系

2020-07-20 09:25:03 107

原创 2020M7W1 ARTS

1. Algorithm1.1 LeetCode 1. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcod

2020-07-13 08:46:23 114

原创 2020M6W5 ARTS

1. Algorithm上周开始学习并发编程,因此找了多线程的问题来练习,巩固知识。1.1 1114. 按序打印我们提供了一个类:public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void three() { print("three"); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 one() 方法线程 B

2020-07-06 18:13:13 189

原创 2020M6W4 ARTS

1. Algorithm1.1 LeetCode 70.爬楼梯上周本来准备把和找零钱相关的两道爬楼梯的题目做了,但实在没找出时间来,本周做一下。看一下题干:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1.

2020-06-30 09:07:44 5158

原创 2020M6W3 ARTS

1. Algorithm:1.1 LeetCode 322. 零钱兑换上周五下班的时候在B站看到《极客时间》的直播,正好讲到这道题,不过因为网络问题,断断续续的也没有看出个所以然,只是偶然间听到一句“贪心算法”。现在回顾一下题干:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。示例 1:输入: coins = [1, 2, 5], amount = 11输出: 3

2020-06-29 12:52:33 154

原创 2020M6W2 ARTS

1. Algorithm: leetCode.234 回文链表1.1 题目描述判断一个链表是否为回文链表比如:1->2 为false1->2->2->1 为true这道题考察的知识点是链表。1.2 解题思路使用快慢指针,慢指针每次前进一格,快指针每次前进两格。通过这种方式来找到链表的中点,之后反转中点之后的链表,与中点前的链表做对比。在细节上我们要考虑链表是奇数还是偶数的情况,偶数的链表快指针会提前终止,避免出现空的情况# @lc code=start#

2020-06-29 12:50:52 273

原创 centos + nginx + docsify在服务器上搭建一个简单博客(2): 编译安装nginx

我是参考的这篇文章,照着做成功安装是没有问题的https://www.howtoforge.com/how-to-build-nginx-from-source-on-centos-7/说一下差别,我使用的是root账户编译的,可能也是这个原因造成了后期权限的混乱。准备工作更新一下yum源yum update -y安装一些必要的工具yum install -y vim curl wget tree从源码编译需要C的编译工具yum groupinstall -y 'Developmen

2020-06-27 16:25:07 558 2

原创 centos + nginx + docsify在服务器上搭建一个简单博客(1): 准备工作

上一次更新博客是3年前了。当时也花了很多心力去对比各种博客系统,去找各种主题,然后一共就写了四篇文章。可以说,上一篇博文与这一篇博文跨越了20岁与30岁。如今觉得学习这件事要是没有输出和交流,光是闭门造车是效率很低下的,想着把一件事情写下来至少自己脑海里得复盘一遍,那也是温故而知新。上面是废话,下面是正文。## 有必要在服务器上搭建么其实将博客托管到github是最省力的,以前我就是这么做的,基本上不需要做太多的设置,你就能:1. 拥有了一个域名2. 博客文...

2020-06-27 13:01:04 1078

原创 Spring Boot下编写Controller层单元测试(二)

回顾在前文Spring Boot下编写Controller层单元测试(一)中,我们用Spring MVC框架写了一个最简单的REST接口,其中没有涉及业务逻辑。在本文中我将继续深入,将业务逻辑加入到项目中,并展示如何进行测试。增加Service层代码首先定义一个接口,在我们简单项目中是否定义接口其实并不重要,但这依然是个好习惯。public interface IDemoService ...

2019-12-12 19:05:16 321 2

原创 Spring Boot下编写Controller层单元测试(一)

如何写一个最简单的Controller层单元测试

2019-12-11 23:47:13 1203

原创 IDEA项目启动编译时报无法找到类

这次同事遇到IDEA中的项目怎么也无法启动的问题,在build过程中就报“找不到类”。但是项目本身没有报错,按照网上的方法,清除了项目缓存,执行了mvn clean都无法修复,后来将module删除后重新引用重新引用了才正常。现在复盘一下当时的情形。首先想到的就是执行mvn clean。是否因为之前的编译有问题造成的class文件出错。但执行了多次mvn clean还是编译错误。之后就...

2019-12-08 09:24:43 2040

原创 Spring + MyBatis构建REST简单查询语言

本系列文章起源于我在实际项目中遇到的问题,思路来源于网上的博客,可视为对该系列博客的思想继承。如有兴趣可访问原博客。1. 什么是REST查询语言如今REST接口大行其道,我们所构建的http接口也都是REST。看过RESTful接口介绍的,会觉得这种接口十分简单,语义也比较清楚。然而在实际的工作中,会发现网上的介绍类文章说的还是太浅了,我们所遇到的需求,要比教科书上复杂的多。查询是...

2019-12-04 20:37:08 264

原创 利用ELK可视化日志

ELK是elasticsearch,logstash, kibana的简称,是基于elasticsearch的日志收集、分析工具。在实际的生产中被许多公司作为日志方案而应用。首先介绍一下基本的概念elasticsearch是一款全文搜索引擎,其底层是java生态圈中著名的搜索引擎Lucene,但elasticsearch对Lucene进行了封装,提供了Rest API,开箱即用。logs...

2019-03-15 17:24:09 24

原创 利用PyCharm远程开发

Windows是我们更加熟悉的平台,但对于开发来说却不是最好的平台。另外,对于机器学习等任务,本机的环境总是不够给力,我们往往本地写一遍,再将代码同步到服务器去跑。PyCharm有一个非常好用的功能,可将代码与远程服务器同步,并且直接在服务器上执行,也就是本地编码,远程执行。我使用的PyCharm 2018.2.1版本,网上很多教程使用的版本老一点,因此配置不太相同。File->Set...

2018-12-25 13:41:00 41

原创 如何在ubuntu上运行Windows软件

之前的文章介绍了怎么打造一个漂亮的ubuntu开发平台,但除了写代码之外我们还是免不了要写点文档,截个图,用微信和QQ交流一下什么的,这些重要的生产力工具在Ubuntu平台也有一些替代品。下面介绍了几款软件,如果我发现什么新的好用的软件,会再更新到这篇文章。文字写作系列Typora做开发的话对于Markdown应该都比较熟悉了,虽然Markdown语法比较清晰也比较好写,但是Typor...

2018-11-02 14:30:44 191

原创 打造好用的ubuntu开发平台

我认为对于贫困的开发人员来说,Linux可能是比Windows更好的操作系统(土豪出门右转是苹果店),而在众多Linux发行版中,Ubuntu是一个比较好的选择。Ubuntu桌面版本对新手友好,软件众多,社区运行良好,尤其是其对机器学习工具界的扛把子TensorFlow支持良好。虽然Ubuntu安装完成之后就能直接使用,不过看到原版丑陋的桌面以及预装的无用软件总觉得要打理一番才能开始用起来。不...

2018-10-19 10:46:07 41

原创 什么是机器学习

计算机的核心:计算器不知道大家有没有意识到:我们现在所使用的电脑、手机、平板乃至所谓的超级计算机,其核心其实还是计算器。无论是计算,统计做报表还是看视频打网络游戏,所使用的算术也不会比在中学时代所学习的加法复杂。而计算机的优势在于运算速度非常快,如果我们说计算机1秒内可以执行10位数的加法估计没有人会感到惊讶。如果把做算术看作是一场比赛,那么大概人类只能感到身边狂风阵阵,那是计算机跑的太快而扬...

2018-10-08 14:17:47 30

原创 连接你的奇妙清单与OneNote

之前听说奇妙清单被OneNote收购了,一时有些兴奋,以为同在微软旗下,两者终于能够同步起来了,没想到找了半天还是发现两款软件还是老死不相往来的关系,不禁大为失望。两款软件都很优秀,但是毕竟术业有专攻,我一直觉得在OneNote里搞个TODO-List有点怪怪的,并且OneNote里弄个TODO-List也没有提醒的功能,设置个到期时间什么的还要搞个宏,纵然功能可能还是能实现,但调教起来实在麻烦。...

2017-10-24 17:35:52 28

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除