个人向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之并发编程 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...
面向对象编程的设计模式之详解创建型模式
设计模式介绍
设计模式是一套被广泛接受和验证的软件设计解决方案,它描述了在特定情境下的解决问题的方法。设计模式提供了一套通用的设计原则和模式,用于解决软件设计和开发过程中的常见问题,例如对象创建、行为管理和结构组织等。
一般来说,设计模式解决的最经典的问题就是结构清晰,提高复用性
提高代码的可重用性:设计模式提供了经过验证的解决方案,可以在不同的项目和场景中重复使用。
提高代码的可维护性:设计模式使得代码结构更加清晰,易于理解和维护。
提高代码的可扩展性:设计模式使得系统更容易进行功能扩展和修改,同时降低了对现有代码的影响。
提高开发效率:设计模式提供了一种标准化的设计方法,可以加快开发过程,并减少出错的可能性。
提高代码的质量:设计模式经过多次验证和实践,可以帮助开发者编写更加优雅和高效的代码。
一些面向对象设计原则
单一职责原则
一个类应该只有一个引起它变化的原因。
每个类/模块/函数只负责一项功能。
这样很好的降低了耦合度,提高可读性和可维护性。
反例:一个...
使用Arthas来监控线上服务并定位问题
什么是Arthas
通常,本地开发环境无法访问生产环境,如果在生产环境中遇到问题,无法调试也无法暂停服务。那么,Arthas
作为生产环境中的观察者永远不会暂停正在运行的线程。
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用
load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,来帮助排查线上问题。
在你的生产环境上安装Arthas
Arthas 支持在 Linux/Unix/Mac
等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 回车
执行即可:
1curl -L https://arthas.aliyun.com/install.sh | sh
上述命令会下载启动脚本文件 as.sh
到当前目录,你可以放在任何地方或将其加入到 $PATH 中。
直接在 shell 下面执行./as.sh,就会进入交互界面。
也可以执行./as.sh...
理解Java虚拟机JVM part5—深入理解类加载器
类加载器
首先回顾一下类加载过程。加载 -> 验证 -> 准备 -> 解析 ->
初始化
加载是类加载过程的第一步,主要完成下面 3 件事情:
通过全类名获取定义此类的二进制字节流
将字节流所代表的静态存储结构转换为方法区的运行时数据结构
在内存中生成一个代表该类的 Class
对象,作为方法区这些数据的访问入口
类加载器介绍
类加载器从 JDK 1.0 就出现了,最初只是为了满足 Java
Applet(已经被淘汰,反正是一种嵌入在网页中的特殊程序,用于生成动态内容,跟
JSP 差不多) 的需要。
后来,慢慢成为 Java 程序中的一个重要组成部分,赋予了 Java
类可以被动态加载到 JVM 中并执行的能力。
类加载器是一个负责加载类的对象。ClassLoader
是一个抽象类。给定类的二进制名称,类加载器应尝试定位或生成构成类定义的数据。典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。
每个 Java 类都有一个引用指向加载它的
ClassLoader。不过,数组类不是通过...












