solidSpoon
方向是比速度更重要的追求
这里是我的个人博客,记录技术、生活和思考。欢迎交流讨论。
夏令时
2025-03
举例
2018年3月11日02:00之后直接跳到03:00
- 如果应用试图表示一个发生在2:30 AM的事件,该本地时间在当天根本无效。
2018年11月4日凌晨时钟从02:00倒退回01:00
- 1点到2点这一小时发生了两次
- 一次为夏令时的EDT时区,一次为冬令时的EST时区
切换规则
在3月的第二个星期天,美国东部时间凌晨2:00,时钟提前至美国东部时间凌晨3:00,留下一小...
AI 是如何学会聊天的
2025-02
本文详细介绍了 AI 聊天模型的学习过程,从获取语料库、文本分词、预训练模型,到如何将基础模型转变为能够对话的 Chat 模型。同时讨论了上下文理解、模型幻觉等关键概念,以及如何通过搜索功能来增强模型的实时性和准确性。
获取语料库
在训练一个AI模型之前,首先需要准备大量的“语料”——即各种文本数据。这些文本数据来源于互联网上的网页、书籍、文章、社交媒体等。可以将这些数据看作是为AI模型提供...
如何在 EasyExcel 的 Handler 中安全设置单元格样式
2025-01
简要说明
本指南演示了如何在 EasyExcel 的自定义 Handler 中安全地修改单元格样式,避免因为滥用或直接修改导致的样式冲突,或者超出 Excel 对样式数量的限制。
1. 简介
在使用 [EasyExcel](https://github.com/alibaba/easyexcel) 生成 Excel 文件时,常常需要在自定义 Handler 中调整单元格样式,比如字体颜色、...
如何在 IntelliJ IDEA 中使用增强的 HotSwap 功能
2024-11
概述
在 Java 开发中,HotSwap 是一项允许开发者在不重启应用程序的情况下更新运行中代码的技术。虽然 IntelliJ IDEA 自带了 HotSwap 功能,但其使用存在诸多限制,难以满足复杂的开发需求。另一方面,JRebel 作为一个强大的热部署工具,虽然功能强大,但其高昂的价格可能不适合所有开发者或团队。
本文将指导您如何在 IntelliJ IDEA 中设置和使用增强的 Ho...
插入操作中的死锁现象
2024-08
[InnoDB 中不同 SQL 语句设置的锁](https://dev.mysql.com/doc/refman/8.4/en/innodb-locks-set.html)
在带有唯一索引的表中执行 INSERT 操作时,数据库会在间隙上设置插入意图间隙锁(insert intention gap lock),并对插入的行设置独占锁。然而,这并不会阻止其他事务在相同间隙内插入不同的行。
比如下...
Windows 交换 ESC 和 CapsLock
2023-11
交换
将下面代码保存成 .reg 文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01...
Docker 网络相关命令
2023-06
- docker network create 创建网络
- docker network connect 将容器连接到网络
- docker network ls 列出所有网络
- docker network rm 删除网络
- docker network disconnect 将容器从网络断开
- docker network inspect 查看网络信息
列出所有网络
b...
查看 Linux 服务器日志的技巧
2023-05
倒叙查看最近的异常
Bash
tac logs/example.log | grep -B 100 -A 100 -i exception | more...
正则表达式
2022-12
[正则测试](https://regex101.com/)
[正则图](https://regexper.com/)
元字符
| 分类 | 符号 | 含义 |
|-------|------|------------|
| 特殊单字符 | . | 任意字符(换行除外) |
| 特殊单字符 | \d | 任意数字 |
| 特殊单字符 | \D | 任意非...
使用 Git worktree 将同一个项目分裂成多个本地目录
2022-12
想要在同一个项目中同时使用多个分支,但是又不想频繁切换分支,可以使用 Git worktree 将同一个项目分裂成多个本地目录。
创建一个新的工作树
bash
git worktree add ../new-dir some-existing-branch
git worktree add [path] [branch]
删除一个工作树
bash
git worktree remo...
MySql 死锁时的一种解决办法
2022-12
查看数据库的线程情况
sql
show processlist;
| Id | User | Host | db | Command | Time | State | Info |
|----------|--------------|--------------------|-------------|-------...
Redis 批量删除 Key
2022-10
普通删除
bash
DEL key1 key2 key3
管道
可用keys "str" 列出要删除的key,接linux管道删除
实例:
根据通配符查看待删除的key
bash
redis-cli KEYS "_MALL_GOODS_KEY”
接linux管道删除之
bash
redis-cli KEYS "_MALL_GOODS_KEY"|xargs redis-cli ...
Spring Boot 打印事务日志
2022-08
找到事务管理器
Spring 的事务管理器一般继承自
java
org.springframework.transaction.PlatformTransactionManager
通过自动注入找到事务管理器
Java
@Resource
private PlatformTransactionManager ptm;
打印日志或者 debug 即可找道对应的事务管理器
Java
l...
解决 Windows 中文件正在使用的问题
2022-06
当我们试图修改或删除某个文件时,可能收到一个“文件正在使用”的提示。
通过资源监视器找到使用者
<procedure title="打开资源监视器" type="choices" id="open-resource-manager"
<step使用快捷键 <shortcutWin+R</shortcut 打开"运行"对话框,输入 resmon.exe,按回车键运行。</step
...
Spring 事务传播特性
2022-06
背景
问题
在项目中写出了如下模式的代码
java
@Override
@Transactional
public void parent() {
// 期望:parent() 不回滚
balabalaService.child();
}
@Override
public void child() {
try {
...
锁库大师
2022-05
背景
希望在顾客下单时对库存明细表中的商品进行库存锁定,库存明细表简化后如下所示:
可见一条产品编码有可能存在多条库存明细,客户的订单大致会锁定几十行的库存,要求如下:
- 尽可能快,并发也高,支持多节点
- 为了数据的一致性,最好不用 redis 扣减的方案
- 锁库同时在锁库流水表中插入锁库记录
优化方案
分析
通过分析系统现有的方案,发现锁库操作时间主要浪费在更新库存明细的锁...
MongoDB 初探
2022-04
MongoDB 初探
对于已经熟悉 MySQL 的同学来说,初次接触 MongoDB 可能会不习惯它的语法,本篇文章将通过一个简单的示例带你入门 MongoDB。
准备
对于 MongoDB 新手,可以借助 DataGrip 来学习MongoDB 语法。在 MongoDB 中实现准备好两个表 "old" 和 "new",并随意插入一些数据
js
db.createCollection("...
ClashForWindows TAP 模式无法正常连接网络
2022-02
ClashForWindows 正常情况下只能代理通过 Http 或 Socks 代理工作。这两种协议工作在网络模型中的较高层级,可能无法代理系统全部的流量,比如对 SSH 或 WSL 等不起作用,使用时需要对这些应用单独配置。其实下面这几个选项可以让 ClashForWindows 有能力在 TCP/IP 层级工作,从而代理系统全部流量,具体的教程参见[官方文档](https://docs.cf...
Java 函数式编程详解
2021-09
概要
首先一个简单的示例展示一下什么是函数式编程
假设我们有一个「Person」列表
java
List<Person people = List.of(
new Person("John", MALE),
new Person("Maria", FEMALE),
new Person("Aisha", FEMALE),
new...
位运算符总结
2021-04
位运算符
<< signed
<<< unsigned
signed
unsigned
| bitwise or
& bitwise and
bitwise not
^ bitwise xor
XOR
Non-rounding addition
x ^ x = 0
x ^ 1s = x // 注: 1s = 0
x ^ (x) = 1s
c = a ^ b 👉 a...
手把手教你读一个 Java 文件的字节码
2021-03
想要读懂 Java 的字节码其实没那么难。当然,如果你有汇编语言的经验就会更好上手。本文手把手教你阅读一个简单 Java 文件的字节码。
如何得到字节码?
以下面这段示例代码为例,他存放在一个包中:
java
package demo.a
public class B{
...
}
通过下面这几个方法就可以查看代码的字节码:
方法 1 、命令行
相关命令如下
java
...
配置 WSL2 使用 Windows 代理上网
2021-02
在 Windows 上设置好代理,连上了谷歌开开心心,但是 WSL 2 不能共享 Windows 的代理策略,如果在 WSL 上再装一个代理软件那可太麻烦了,所以得想想办法。
其实办法还挺简单的,可能有的同学不知道,在一个局域网下如果有一台机器配置好了代理,那么这个代理是可以共享给这个局域网下的其他设备的,比较类似软路由哈!
具体方法如下:
Windows 端
这里以 Clash 为例,打...
查看 Docker IP 的几种方法
2021-02
使用 Docker 时常常需要知道某一容器的 IP,这是个挺烦人的事儿,本文介绍几种查看 Docker IP 的方法
在容器内部查看
bash
cat /etc/hosts
会显示自己以及 –link 软连接的容器 IP
使用 docker inspect 命令
inspect 会列出容器详细信息
下面的命令任选其一
bash
docker inspect --format '{{ ....
有趣的三次握手与四次挥手
2021-02
最近研究了以下 TCP\IP 协议中的三次握手与四次挥手,下面我将我的收获分享给大家。
IP 协议是一种在两点间建立传输的基础协议,可以说几乎所有的其他协议都建立在 IP 所提供的基础服务上进行传输。但 IP 协议是一种不可靠的传输协议,它既不保证一方发送的数据包到达另一方的顺序,也不保证发送的数据包能够送达到另一方,也就是说通过 IP 协议传输可能会发生丢包和延时。在一些需要保证数据完整性的场...
文章排版指南
2021-02
我们日常看文章的时候,其实已经在慢慢积累我们的审美意识,我们能分辨,哪篇推文看着舒服,哪篇文章看着辣眼睛。为了减少这种「辣眼睛」的情况出现,今天我就来谈谈关于文章排版的事情。
▎博客排版
写博客的同学都知道,现在博客都是由 Markdown 排版。如果你还不知到 Markdown
的话就去学习一下吧,它可以很方便地帮助我们排版出漂亮的文章。但我们在写博文的时候,仍有一些细节是需要注意的。
...
搭建简单好用的笔记系统
2021-02
你是不是也一直觉得 OneNote、印象笔记、有道云笔记等等工具用起来都有一点不太舒服。我只想用一个简单方便,到哪都能用的笔记系统,但是市面上常见的笔记软件越来越臃肿,小众良心的软件又担心它会不会死掉,这里我给你提供一个思路。
如果你想要一个全平台通用的、适合记笔记的文件格式,那么 Markdown 应该是一个不错的选择。Markdown 的语法简单、排版漂亮,配合像 Typora 这种优雅的编...
怎么直观地给网页「P_图」
2021-02
你肯定知道在浏览器中按下 F12 打开开发者工具,在其中修改源代码就可以更改网页上的任意内容。那么有没有办法可以不看源码,通过「所见即所得」的方式直接在页面上修改呢
下面这两个属性可以帮助我们实现这一想法:
1. 使用 contentEditable 属性
1. 使用 designMode 属性
这两个属性用来帮助开发人员创建网页端的富文本编辑器,因此如果我们将整个网页都应用这两个属性,...
如何用正则表达式匹配 3 的倍数
2021-02
问题背景
最近在知乎上看到这样一个问题『如何用正则表达式匹配 3 的倍数』,原帖给出的答案非常有意思,遂研究了一番
看一个数能否被 3 整除,最直接的办法就是将这个数用 3 除一下,如果余数是 0,那么这个数就可以被3 整除。然而正则并不具有计算的功能,正则算法的实现基于有穷状态自动机(finite automaton)
以下是一个简单的示例
这正则表达式 哈+嗝 的自动机,该正则表...
删除或修改 Windows 中被占用的文件
2021-02
有时候我们想要在 Windows 中修改或删除一个文件,会收到一个「文件正在使用」的消息,而我们又不知道是哪个程序在使用,这时候该怎么办呢?
当某一运行中的进程持有一个资源的句柄时,我们就不能修改该资源。解决办法是结束所有对资源有句柄的进程。我们可以在「资源监视器」中找到持有该句柄的所有进程,资源监视器的打开方式如下
- 方法 1:
\<Win + R\,运行 resmon.exe
- 方...
初识 JShell
2021-02
初识 JShell
升级到 Java 11 后,有了 JShell 这个工具(其实 Java 9 就有了),它让 Java 可以像脚本语言一样直接在命令行交互,听起来好神奇,快来体验一下!!
启动与退出
保险起见,得先弄明白启动与退出
直接在命令行输入 jshell 就启动了
bash
➜ cedar jshell
| Welcome to JShell -- Version 11...
VsCode 多光标特性
2021-02
使用 VsCode 或者其他编辑器的时候,经常会碰到如下场景:
.foo {
padding: 5;
margin: 5;
font-size: 5;
}
如何将上面的三个 5 改成 5px ?答案是创建多个光标,以下给出了创建多光标的几种方法:
创建多个光标
1. 使用鼠标
1. 先将将光标置于第一个『5』之后
2. 按住键盘上的 『alt 』,然后鼠标点在第二个...
PhotoShop 图层的混合模式是怎么回事
2021-02
前言
在修图软件中,调整混合模式就可以将两张照片用不同的风格混合在一起
上图就是将下面这两个图片用不同的混合模式叠加的效果,那么你有没有想过这是什么原理呢?本文就以几个经典的混合模式为例简单研究一下。
图像显示原理
其实各种图层混合模式的灵感就是来源于胶片相机时代。那个时代的摄影师没有先进的计算机来修图,只能拍好胶片后(当然也有其他的感光材料做底片),在暗房通过各种骚操作来给...
Google 搜索技巧 2
2021-02
﹚运算符语法
为了让查询结果更加准确,我们可以在其中加入高级运算符。其基本形式为 operator:search_term ,当你使用高级运算符时,请记住下面的原则:
- 运算符、冒号和搜索项之间没有空格
- search_term 部分可能是一个单词或者是一个带引号的短语
- 可以在高级查找中使用布尔运算符(如:OR,+)和其他特殊字符,但注意不要与 : 的功能发生冲突。
- 以 All 开...
Google 搜索技巧 1
2021-02
几个网址
可以通过搜索关键字来访问这些页面
1. Google 主页面,大多数搜索的入口
- <a href="https://www.google.com" target="blank"https://www.google.com</a
1. Google 网上论坛
- <a href="https://groups.google.com" target="blank"http...
Git 是纯函数式数据结构
2021-02
最近一直在学习 Git,但是一直不知道它的原理是什么,直到看到国外的一个大牛的博客。这篇博文给了我很大的启发,所以翻译过来和大家分享。
[原文链接](https://blog.jayway.com/2013/03/03/git-is-a-purely-functional-data-structure/)
虽然近几年像 Git 这种分布式版本管理系统很火,但它看起来还是比像 SVN 这样的集...
Docker 诊断神器 BusyBox
2021-02
BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 cat、echo、grep、mount、telnet 、ping、ifconfig 等)的精简工具箱,它只需要几 MB 的大小,很方便进行各种快速验证,被誉为“Linux 系统的瑞士军刀”。
BusyBox 容器镜像可以帮助我们快速测试容器网络
直接运行并进入命令行:
bash
docker run --name <...