个人向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...
详解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 实现的无锁原子操作,避免...
详解JavaSE之并发编程 part3—Java内存模型JMM基础
死锁
二编:这算是对前面没说到的内容的简单补充
锁的可重入性
前面说过,Java的线程锁是可重入,自动释放,非公平的锁,后面两个都比较好理解,但是什么是可重入的锁?
123456789101112131415public class Counter { private int count = 0; public synchronized void add(int n) { if (n < 0) { dec(-n); } else { count += n; } } public synchronized void dec(int n) { count += n; }}
观察synchronized修饰的add()方法,一旦线程执行到add()方法内部,说明它已经获取了当前实例的this锁。如果传入的n <...
详解JavaSE之并发线程 part2—保证Java线程安全
线程同步
线程安全 vs 线程同步
线程安全
线程安全的核心会来到线程同步,我认为线程同步是为了保证线程安全
当多个线程共享同一份数据,并且至少有一个线程会对数据进行写操作时,如果不采取任何保护措施,就极易产生线程安全问题。
线程安全是一个类、方法或代码块在被多个线程同时访问时,其行为仍然正确、数据保持一致,无需调用方额外同步,就称为线程安全。
线程安全的目标是保证程序在并发环境下的正确性。它不会出现竞态条件,结果可预测、可重复,一万个人同时去取钱,银行要保证剩下的钱是正确的
如何判断一段代码是否线程安全?问自己三个问题:
是否有共享可变状态?(无共享 → 天然安全)
是否所有访问路径都受保护?(同步、原子操作等)
复合操作是否原子?(如...
详解JavaSE之多线程并发线程 part1—理解Java并发编程基本内容
基础概念
进程,线程
进程
何为进程
进程是程序的一次执行过程,是程序执行的一次执行实例,是系统运行程序的基本单位,是操作系统进行资源分配和调度的基本单位,因此进程是动态的。
进程 = 程序 + 数据 + 执行状态
系统运行一个程序的本质即是一个进程从创建,运行到消亡的过程。
讲一下相对底层的内容,一个程序在磁盘上只是一串二进制指令和数据。CPU
只能执行内存中的指令。因此,运行程序的第一步是将其加载到主存RAM,而 CPU
内部有一个关键寄存器,程序计数器(PC, Program
Counter),它指向下一条要执行的指令地址,差不多就是 PC → 取指令 → 解码 →
执行 → 更新PC → 循环,此时,整个机器只能运行一个程序,CPU 的 PC
寄存器始终指向该程序的指令
问题来了,如果我想同时运行两个程序怎么办?所以才引入的进程。
进程是实现多道程序设计的核心设计,多个进程可同时存在于内存中才能使得
CPU 同时运行多个程序,操作系统通过 PCB
控制每个进程能使用的资源,所以它才能动态,并发,独立,异步
在 Java...
详解Java之集合框架 part1—集合框架概述及其List接口下的常用容器
集合概述
Java 集合框架概述
Java 集合,也叫作容器,主要是由两大接口派生而来:
一个是 Collection接口,主要用于存放单一元素;
对于Collection
接口,下面又有三个主要的子接口:List、Set 、
Queue。
另一个是 Map 接口,主要用于存放键值对。
Java 集合框架概览
如下是更详细的,带上了抽象类的
image-20260204114015885
集合框架的体系如下
接口(Interfaces):定义集合的行为(如
Collection, List, Set,
Queue, Map)。
实现类(Implementations):提供具体的数据结构(如
ArrayList, HashSet, LinkedList,
HashMap)。
算法(Algorithms):如排序、查找等(通过
Collections 工具类提供)。
迭代器(Iterator):用于遍历集合元素。
那么,在这里简单说一下 List, Set, Queue,...
Dubbo_part2—详解Dubbo的RPC远程服务调用
前言
上次我们说了,Dubbo
主要用于构建分布式服务架构。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java
RPC框架,这篇文章就细说如何使用 Dubbo 进行 RPC 远程调用
别忘了,Dubbo
是提供了地址发现、负载均衡、流量管控等治理能力,上次我们说了Dubbo的架构如下
服务提供者:实现业务逻辑的模块,将业务接口暴露为RPC服务,供其他服务调用
服务消费者:调用远程服务的模块
注册中心
负载均衡器
监控中心
img
架构上我们抽象成了两层,代表了一个微服务框架必须具有的基本功能:
服务治理层:服务治理控制面不是特指如注册中心类的单个具体组件,而是对
Dubbo
治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管控策略、Dubbo
Admin 控制台等。
服务调用层:实际上,这是一整个数据面,数据面代表集群部署的所有 Dubbo
进程,进程之间通过 RPC 协议实现数据交换,Dubbo
定义了微服务应用开发与调用规范并负责完成数据传输的编解码工作。
所以说今天回到...
Redis part6—Redis3种常用的缓存读写策略及其缓存问题详解
介绍Redis的缓存读写策略
前一阵子,我写了个熟练使用 Redis,但是我一想,缓存常用的 3
种读写策略,我却不怎么知道
所以说,今天来系统的介绍一下这些内容,Redis有三种读写策略分别是:
旁路缓存策略
读写穿透策略
异步缓存写入策略
三种缓存读写策略各有优势,需要我们根据实际的业务场景选择最合适的
Cache Aside Pattern
旁路缓存模式
Redis 的 旁路缓存模式(Cache-Aside
Pattern),也被称为 懒加载缓存(Lazy Loading)或
旁观者缓存模式,是目前最常用、最经典的缓存使用策略之一,比较适合读请求比较多的场景
旁路缓存模式中服务端需要同时维护DB和Cache,并且是以DB的结果为准。
也就是
缓存是“旁路”的,不是主数据源;数据库才是权威数据源。
那么,整个读写操作的流程大概如下
读:
应用程序在读取数据时,先查 Redis 缓存。
如果缓存命中(cache...
Dubbo part1—重新认识Dubbo并且使用Dubbo框架搭建微服务
重新认识Dubbo
Dubbo 最初被定位为一个高性能的 RPC
框架,但这是过去,随着 Dubbo 3 的演进(尤其是与 Spring Cloud
Alibaba 的整合),这个定义已远远不足以描述它的全貌。
因为,它已经具备了完整的
微服务治理能力,包括服务注册发现、配置中心、熔断限流、可观测性等,是一个面向云原生、支持多语言、具备完整微服务治理能力的一站式微服务解决方案。
什么意思,Dubbo 不是只有那几个注解来作为 RPC
框架的能力了,而是可以作为 Spring Cloud Alibaba
中的单独一个框架,自己实现服务注册发现、配置中心、熔断限流、可观测性等这些微服务框架需要的功能。
所以说,Dubbo 3
不再只是调用远程方法,而是构建和运维整个微服务体系的基础设施。
img
服务治理、服务通信。这是dubbo框架所提供的核心功能。实际上也是微服务框架所要提供的核心功能。
Dubbo 与 Spring Cloud 对比
而且Dubbo开发相较于 Spring Cloud 具有一些优势
Dubbo 开箱即用,相对于...
面向对象编程的设计模式之行为型模式
行为型设计模式
行为型模式关注对象之间的职责分配和通信方式。
责任链模式(Chain...
面向对象编程的设计模式之详解结构型模式
结构型设计模式
结构型设计模式关注处理类或对象的组合,形成更大的结构。
适配器模式(Adapter):将一个类的接口转换成客户期望的另一个接口,使原本不兼容的类能一起工作。
桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。
组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次关系,统一处理单个对象和组合对象。
装饰器模式(Decorator):动态地给对象添加额外职责,比继承更灵活。
外观模式(Facade):为子系统提供一个统一的高层接口,简化客户端使用。
享元模式(Flyweight):通过共享技术有效支持大量细粒度对象的复用。
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。
适配器模式
对象适配器模式
适配器模式(Adapter...












