个人向galgame原声带或相关音乐整理及其资源
也是一直以来打算整理一下自己爱听的galgame ost
或者其他galgame相关的音乐,按照专辑的方式进行整理,同时我有的也会扒下来上传
就借助这个机会,好好的搞一下吧
顺序随缘
持续更新
【FLAC+MP3】AIR ORIGINAL
SOUNDTRACK
神尾观铃镇楼
AIR ORIGINAL SOUNDTRACK
通过网盘分享的文件:AIR ORIGINAL SOUNDTRACK.zip
13XeUCWQxV19snaDqzz48uA?pwd=1174 提取码: 1174 解压 10086
【WAV】ゲーム「水葬銀貨のイストリア」Sound
Track/ウグイスカグラ
【WAV】ゲーム「水葬銀貨のイストリア」Sound
Track/ウグイスカグラ
【WAV】ゲーム「水葬銀貨のイストリア」Sound Track/ウグイスカグラ.zip
百度网盘
提取码: 1174
【FLAC】さよならアーリーサマー/やなぎなぎ、麻枝准
img
百度网盘
提取码: 1174...
几种分布式ID的设计方案详解与真实业务选型
想了一下,有必要单独拎出来作为一篇文章
分布式ID
分布式 ID 介绍
我们都知道 ID 是什么内容,也知道需要使用 ID 做什么。
无非就是对系统中的各种数据使用一个唯一编号 ID
来进行唯一标识,这样就能在系统中对数据进行操作。而且 ID
具有独立性,就是说你产生了一条数据需要被持久化,就应该给它一个ID,比如用户
ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID
对应且仅对应一个订单。
我们现实生活中也有各种 ID,比如身份证 ID 对应且仅对应一个人、地址 ID
对应且仅对应一个地址。
简单来说,ID 就是数据的唯一标识。
那么,单机情况下,我们使用的 ID...
Spring Cloud part29—分布式ID的几种设计方案与实践落地
分布式ID
分布式 ID 介绍
我们都知道 ID 是什么内容,也知道需要使用 ID 做什么。
无非就是对系统中的各种数据使用一个唯一编号 ID
来进行唯一标识,这样就能在系统中对数据进行操作。而且 ID
具有独立性,就是说你产生了一条数据需要被持久化,就应该给它一个ID,比如用户
ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID
对应且仅对应一个订单。
我们现实生活中也有各种 ID,比如身份证 ID 对应且仅对应一个人、地址 ID
对应且仅对应一个地址。
简单来说,ID 就是数据的唯一标识。
那么,单机情况下,我们使用的 ID...
面向对象编程的设计模式之架构设计模式
前言:这些是什么样的设计模式
之前,我们学习的是GoF(Gang of Four)提出的 23
种经典设计模式(5 创建型 + 7 结构型 + 11 行为型)
接下来,我提到的这些设计模式,他们属于更高层次的
架构模式(Architectural Patterns) 或
企业级设计模式(Enterprise Design Patterns),而不是
GoF
的微观设计模式。它们关注的是整个系统的组织结构、职责划分和控制流,而非单个类或对象之间的交互。
从经典设计模式迈向现代软件架构的关键节点就在这里。掌握这些高层次模式,将帮助你设计出可维护、可扩展、高内聚、低耦合的企业级系统。
他们有很多经典的实现,我只讲解最常使用的和看到的
架构设计模式
关注整个系统的高层结构,决定组件如何组织、通信和部署。
它的选择影响全局、难以后期修改、而且通常决定技术选型。
常见的架构模式如下
MVC 模式
MVVM 模式
三层架构(表现层-业务层-数据层)模式
管道-过滤器模式
微服务架构
事件驱动架构
CQRS(Command Query...
LeetCode第490场周赛AK
记录一下
几乎是压线 AK,就剩下六分钟
image-20260222115357193
最终排名
image-20260222120055900
Q1
image-20260222115741279
给你一个整数数组 nums,其中 nums[i] 表示在第 i
场比赛中获得的分数。
恰好 有两位玩家。初始时,第一位玩家为 主动玩家,第二位玩家为
被动玩家。
按顺序 将下述规则应用于每场比赛 i:
如果 nums[i] 是奇数,主动玩家和被动玩家互换角色。
在每第 6 场比赛(即比赛索引为 5, 11, 17, …
的比赛中),主动玩家和被动玩家互换角色。
主动玩家参与第 i 场比赛,并获得 nums[i] 分。
返回 分数差,即第一位玩家的 总分 减去第二位玩家的 总分 。
示例 1:
输入: nums = [1,2,3]
输出: 0
解释:
第 0 场比赛:分数为奇数,第二位玩家成为主动玩家,获得 nums[0] = 1
分。 第 1 场比赛:没有交换角色。第二位玩家获得...
Redis part8—Redis性能优化
Redis常见阻塞原因
命令阻塞
首先,Redis
是单线程的内存数据库,所有命令都在主线程中串行执行。而且
Redis 中的大部分命令都是 O(1) 时间复杂度,也有少部分 O(n)
时间复杂度的命令。
这意味着,O (1) 命令不会显著阻塞主线程,O (n)
会明显占用主线程,导致后续所有请求排队等待,这就表现成客户端阻塞,超时,响应慢等问题
那么这种情况就是使用不当的命令导致的阻塞,就好像是在 MySQL 那边
select *联查了所有字段导致了全表扫描一样导致的性能问题,但是你
MySQL 能加索引将 O (n) 降为 O (log
n),所以说,当你API或数据结构使用不合理,肯定也会导致这种情况
首先这种全量遍历类是O(n)肯定会影响性能
keys:获取所有的 key 操作
HGETALL:会返回一个 Hash 中所有的键值对。
SMEMBERS:返回 Set 中的所有元素。
对于集合计算类,也是O (n),不当的使用也可能会导致问题
SINTER/SUNION/SDIFF:计算多个
Set...
详解JavaSE之并发编程 part8—详解线程池背后的原理
ThreadPoolExecutor 类
前面我们提到了,线程池实现类 ThreadPoolExecutor 是
Executor
框架最核心的类,对于Executor接口和ExecutorService接口我们都已经分析过了,在这里只贴一下接口内容方便回顾,详细请看上篇
image-20260212115724180
12345678910111213141516171819202122232425262728293031323334public interface ExecutorService extends Executor, AutoCloseable { void shutdown(); boolean isShutdown(); boolean isTerminated(); boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; ...
详解JavaSE之并发编程 part7—详解线程池的使用
线程池介绍
如何理解线程池
池化技术想必大家已经屡见不鲜了,线程池、数据库连接池、HTTP
连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。
但是池化技术离不开多线程,多线程根本的池化技术就是 Java...
详解JavaSE之并发编程 part6—JUC锁机制的底层原理AQS
了解 AQS
什么是 AQS
我倒是觉得我应该把这个放在前面
AQS 的全称为 AbstractQueuedSynchronizer
,翻译过来的意思就是抽象队列同步器。这个类在
java.util.concurrent.locks 包下面。
image-20260211105950840
AQS
就是一个抽象类,主要用来构建锁和同步器。为他们提供一个底层的、通用的同步机制,它帮你处理了复杂的线程排队、阻塞、唤醒等底层细节,你只需要按需实现一些关键的方法,就能定制出自己的同步工具。
image-20260211110027359
AQS 是 JUC
锁的“大脑”,它管理着线程的排队、阻塞和唤醒。它的核心思想我先放到这里
如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。
如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制
AQS 是用 CLH 队列锁
实现的,即将暂时获取不到锁的线程加入到队列中。
AQS...
详解JavaSE之并发编程 part5—JUC锁机制
JUC锁机制
image-20260210113908812
我们都知道,synchronized是 Java
关于锁的一个关键字,那么,它自动进行锁的释放的,所以只存在两种释放锁的情况:
获取了对应方法锁的对象执行完了该方法
线程执行异常或被中断,JVM会让线程自动释放锁
不仅如此,synchronized 的局限性还在于
无法中断等待锁的线程,不可响应中断。
无法设置超时,只能无限等待。
无法尝试获取锁而不阻塞,非阻塞尝试。
读写无法分离
它不够灵活,而且容易出现阻塞,因为方法或者代码块一旦执行,就独占该锁,直到结束才返回锁,此时就出现了JUC中的各种锁,它们灵活且强大
locks包概述
对于 Lock 接口本身,就有一些需要做铺垫的内容讲解,这里我们先看看 JUC
的锁机制主要包中都有什么内容,先了解一下
前面说过,Lock
锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作,所以说,它这个接口是代表着什么呢,首先看看
JUC lock...
详解JavaSE之并发编程 part4—Java并发工具包JUC概述及其原子操作类
JUC 并发工具包介绍
JUC 并发工具包介绍
JUC 是 java.util.concurrent 包的简称,从 Java 5
开始引入,专门用于解决并发编程中的线程同步、线程池、锁机制、并发集合等问题,是
Java 处理高并发场景的核心工具包。
它弥补了传统 synchronized 关键字、Thread
类的局限性,提供了更高效、更灵活的并发编程方案。
JUC 的设计:
分离锁与同步机制:将锁(Lock)、条件(Condition)、原子操作(Atomic)、并发容器等组件解耦,按需使用;
CAS 无锁优化:基于 CPU 原语的
CAS(Compare-And-Swap)实现无锁并发,减少线程阻塞开销;
线程池化:通过线程池管理线程生命周期,避免频繁创建 /
销毁线程的性能损耗;
并发容器:针对多线程场景优化的集合类,替代线程不安全的
HashMap、ArrayList 等。
JUC 并发工具包都包括什么
img
原子操作类
基于 CAS 实现的无锁原子操作,避免...













