个人向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...
Redis part11—微服务下使用Redis进行缓存设计的实践讲解
前言
单机部署时,给一个查询接口加上 Redis
就够用了:查不到就读库,读完写回缓存,更新时删掉缓存。同样的代码拆成多个实例之后,事情开始变形,本地锁挡不住另一个进程,删掉的缓存可能被一个更早发出的读请求写回来,Redis
一旦变慢又会把压力成倍转给数据库。
这篇文章沿着”一次读请求”和”一次配置更新”两条主线,把一个可以实际运行的项目完整拆开,讲清楚缓存的每个设计决定在解决什么问题、付出了什么代价、边界在哪里。
核心结论
缓存是可重建的副本:数据的角色决定故障策略;配置查询可以降级,安全状态必须回查事实源。
读链路四道关卡:缓存命中 → 布隆三态 → 租约重建与二次检查 →
发布校验。
三类问题三种防御:空值与布隆挡穿透,同键锁挡击穿,抖动、熔断与回源上限挡雪崩。
旧快照用代际协议关闭:“读前取号、发布验号”,失效时原子地推进代际并删除缓存。
失效可靠性交给 Outbox:至少一次执行,副作用必须可重复。
实验边界
同一个 Spring Boot 应用启动两个 JVM,共享一个 Redis 实例和一份...
Redis part10—集群与分布式下的Redis
集群和分布式的区别
集群 Cluster
是多个相同节点协作处理同一任务以提高并发和可用性,分布式是将业务拆分为多个独立子系统在不同节点协作完成整体任务。
集群指将相同的系统或服务部署在多个节点上,通过负载均衡共同处理同一业务,关注节点的冗余和并发能力,以提升系统的并发能力和高可用性。集群节点功能一致,节点间通常不需要复杂通信协调,主要解决
量 的问题,如高并发访问或单点故障容错
分布式(Distributed)则是将一个大业务拆分为多个独立的子业务或子系统,分别部署在不同节点上,各节点协作完成整体任务。分布式系统强调节点间的通信与协调,每个节点可能承担不同功能,解决系统复杂性和迭代扩展问题,即“质”的问题
所以说,在redis中,需要单独的看待。
Redis 3.0后便多了一个 REDIS CLUSTER
配置,即Redis集群,他可以突破3.0之前只能一主多从的限制,实现多主多从,这种集群没有中心节点,可水平扩展,据官方文档称可以线性扩展到上万个节点,当前配置性能和高可用都优与哨兵模式,且配置非常简单
img
Redis...
Redis part9—详解Redis的各个数据类型的底层数据结构
Redis 数据库本身的数据结构
Redis 的键值对中的 key 就是字符串对象,而
value
就是指Redis的数据类型,可以是String,也可以是List、Hash、Set、
Zset 的数据类型。
Redis 底层使用了一个 全局哈希表 保存所有键值对,哈希表的最大好处就是
O(1) 的时间复杂度快速查找到键值对。
img
这个全局哈希表不是孤立存在的,而是嵌套在多层 C 结构体中:
12345678redisServer(服务器) └── redisDb *db(默认 16 个数据库) └── dict *dict(每个库一个全局哈希表) └── dictht ht[2](两个哈希表,正常用 ht[0],rehash 时用 ht[1]) └── dictEntry **table(哈希桶数组) └── dictEntry(每个节点:key + value + next) ...
大模型基础和Agent基础面试题
大模型基础
大模型
API 调用的完整链路是什么?如何衡量一次大模型 API 的性能?
大模型 API 调用的是从业务应用发起请求,经由 API
网关、推理调度、模型推理,再将生成结果返回业务应用的完整分布式调用过程
请求预处理与 Prompt 组装
通常不能直接把用户输入原样发送给模型,而是要完成一系列预处理。第一部分是业务预处理。包括用户身份认证、请求参数校验、用户权限判断、敏感信息处理,以及确定本次请求使用哪个模型。第二部分是上下文组装。
几个常见参数:
参数
作用
model
指定调用的模型
messages
传递角色消息和上下文
temperature
调整生成时的采样随机性,具体支持情况依模型而定
top_p
核采样策略,控制参与采样的候选 Token 概率质量范围
max_tokens
限制输出 Token 数量,实际字段名因 API...
Netty part2—Netty核心机制和事件编程
前言
上一篇我们解决了三个问题,Netty 是什么,为什么要有它,最小的 Netty
程序长什么样。
Echo
只验证了网络通信中的能收能发。真实项目里,麻烦往往出在收发之外,连接什么时候算真正建立,什么时候该清理会话状态,回调为什么总在同一个线程,某个
Handler
卡了一下为什么所有连接都跟着变慢,写给客户端的数据为什么悄悄失败了,异常为什么没有人处理。
我们继续沿着一条连接往下看,先看它从建立到关闭经历了哪些状态和回调,再看这些回调由谁执行,然后讨论怎么在不破坏线程模型的前提下做耗时操作,最后落到
Pipeline、Handler 共享、Channel
配置和异步结果这些日常使用最频繁的机制上。
读完应该能回答下面这些问题:
问题
对应小节
对应实验
一条连接从建立到关闭,各回调按什么顺序触发
单连接的生命周期
LifecycleServer(9002)
父 Channel 和子 Channel 是什么关系
单连接的生命周期
LifecycleServer 的 accept...
Netty part1—网络编程基础与Netty入门
网络编程基础
何为网络编程
网络编程的核心,是让运行在不同机器或同一机器的进程能够相互通信、交换数据。Netty
本质上就是一个高度封装、高性能的网络编程框架
从最朴素的定义看,网络编程就是利用网络应用编程接口开发通信应用程序,实现两个或多个设备之间的信息交互。这里的
接口,在绝大多数场景下指的就是 Socket(套接字)。
Socket
可以理解为操作系统提供给应用程序的通信端点。它像文件一样被打开、读取、写入和关闭。应用程序把数据写入
Socket,由操作系统内核负责后续的协议封装和网络发送接收方则从自己的
Socket 中读出内核递上来的数据。
网络协议栈(TCP/IP)的复杂处理由内核完成,应用层只面对 Socket
这个抽象,这正是网络编程得以相对简单地进行的根本原因。
一次网络通信涉及两个基本角色:客户端发起请求,服务端监听并响应。
为了定位通信的双方,需要 IP
地址(找到哪台机器)和端口号(找到机器上的哪个进程)。
了解 Socket 和 Socket
的基本操作
要想解释清楚 Socket,首先要知道 TCP,要想知道...
RabbitMQ、Kafka等消息队列相关面试题和面试知识点讲解
消息队列基础
为什么系统里要用消息队列?请结合「跨服务最终一致性」说说,MQ
解决了哪一类问题。引入 MQ
会带来哪些新问题?什么场景不该用 MQ?
在跨服务场景中,三大价值是这样体现的:
解耦:例如,订单服务不需要在代码里硬编码调用库存、积分、物流的接口。它只管把“订单已创建”这个事件扔进
MQ,谁关心这个事件谁就自己去订阅。以后新增一个相关的业务,订单服务一行代码都不用改。
异步:同步调用三个下游假设分别耗时
200ms、300ms、150ms,加上本地写库,用户要等近 1 秒。引入 MQ
后,订单服务写完本地库、发完消息(假设
5ms)就直接返回给用户,把服务必须的同步等待变成了最终一致性,用户体验是质变。
削峰:如果遇到大促,订单创建 TPS 瞬间飙到
5000,但库存服务数据库最多只能抗 2000 TPS。MQ 作为缓冲池,把 5000
个请求先囤起来,库存服务按自己的节奏以 2000...
Web实时消息推送的两种方案—WebSocket和SSE,从原理到落地
Web
实时消息推送的两种方案:WebSocket 与 SSE
在接触服务端消息主动推送的时候,做业务遇到需要一个”新消息提醒”、“订单状态变化”、“进度条实时更新”这种,其实第一反应是加一个定时器轮询接口。但是很明显,在你的业务压力不是很大的时候,这种方式会白白浪费很多宝贵的系统资源。。。因此,在一个事件完成之后,服务端主动推送消息是很有必要的。
从轮询到推送,实时消息到底难在哪
HTTP
的本质就不支持服务器主动说话
要理解实时推送难在哪,得先接受一个有点反直觉的事实:HTTP
从设计之初就不是为了”服务器主动找客户端”而生的。
在经典的 HTTP 请求响应模型里,通信永远是客户端发起的:
123456客户端 服务端 | | | ----------- 请求 (Request) -------------> | | ...
SpringDataJPA,Hibernate,MyBatis常见面试题汇总
Spring Data JPA 和 JPA
Spring
中的 JPA 和 Hibernate 有什么区别?Spring Data JPA 能不能脱离 Hibernate
用?
名称
负责什么
典型内容
JPA / Jakarta Persistence
定义对象关系映射和持久化行为的标准
@Entity、EntityManager、JPQL、Criteria
API
Hibernate ORM
实现规范,生成 SQL,管理实体状态
Session、脏检查、代理、批处理;另有 Hibernate 扩展
Spring Data JPA
在 JPA 上封装数据访问接口
JpaRepository、方法名派生、分页、Specification
JPA 是 Java 官方定义的 ORM
规范,只定义了接口和注解,不提供实现,Spring Data JPA 是 Spring 对 JPA
的再封装,不是 JPA 实现,底层默认用 Hibernate;
Hibernate 是...
Spring Security及网络安全相关内容面试题汇总
Spring Seucrity 相关重要知识
Spring
Security 到底是什么?过滤器链是怎么串起来的?
Spring Security 本质上就是一组 Servlet 过滤器,为
Java 应用提供认证、授权,以及一系列安全防护
它不创造新的运行容器,而是挂到 Servlet 容器的
FilterChain
上,所以它管不到过滤器链之前的东西
它的真正威力在于扩展力,几乎每个环节都留了扩展点。
对于过滤器链,首先先看三个类
DelegatingFilterProxy:它只是一个“壳”,由 Servlet
容器注册;作用是把请求委托给 FilterChainProxy 这个
Bean,这样就能让容器拿到 Spring 容器管理的 Filter
FilterChainProxy:Spring Security...
Spring Boot 相关面试题整理—相关注解
Spring Boot 框架相关注解
@Aspect注解的使用?如何定义切面和通知?结合
Spring 框架聊聊
@Aspect注解是 Spring AOP
中定义切面类的核心注解,需要配合@Component注册为
Bean。一个标准的切面类需要同时使用@Aspect和@Component两个注解
Spring AOP 基于代理机制,所以只有通过 Spring
容器调用的方法才能被拦截,这也是为什么我们要确保被拦截的类要注册为
Spring Bean 的原因。
切面定义通过在类上添加@Aspect实现,切点定义使用@Pointcut注解指定拦截规则,比如@Pointcut("execution(* com.example.service.*.*(..))")表示拦截
service 包下所有方法。
谈到 @Aspect
时,你需要明确 Spring AOP 和 AspectJ 的关系:Spring AOP 实际上借鉴了
AspectJ 的注解体系,包括 @Aspect、@Pointcut、@Before...
Redis面试题汇总和面试知识讲解
缓存基础
缓存的基本思想其实很简单,就是我们非常熟悉的
空间换时间
这一经典性能优化策略的运用。所谓空间换时间,也就是用更多的存储空间来存储一些可能重复使用或计算的数据,从而减少数据的重新获取或计算的时间。
说到空间换时间,除了缓存之外,这里再列举几个常见的:
索引:索引是一种将数据库表中的某些列或字段按照一定的排序规则组织成一个单独的数据结构,虽然需要额外占用空间,但可以大大提高检索效率,降低数据排序成本。
数据库表字段冗余:将经常联合查询的数据冗余存储在同一张表中,以减少对多张表的关联查询,进而提升查询性能,减轻数据库压力。
CDN(内容分发网络):将静态资源分发到多个边缘节点以实现就近访问,进而加快静态资源的访问速度,减轻源站服务器以及带宽的负担。
缓存的分类有哪些?他们在你开发中你都是如何使用的?
日常开发中,缓存基本分为三种:
类型
位置
典型代表
核心特点
本地缓存
应用进程内
Caffeine、Guava...
























