From 3e882c54c69e06663b20f6908ddfb7a1dd290fc7 Mon Sep 17 00:00:00 2001 From: LiuMangMang <362165265@qq.com> Date: Fri, 23 May 2025 10:46:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E4=B8=8E=E6=96=B0=E5=A2=9E=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新Maven标题为"Maven常用配置" - 调整侧边栏图标与结构 - 修改试题、Linux、Docker等模块的图标 - 设置Docker模块默认折叠 - 新增Jellyfin音乐目录规范文档 - 新增20250523试题文档 - 新增Google浏览器强制背景黑色设置方法 --- src/.vuepress/sidebar.ts | 12 ++- src/application/Jellyfin.md | 92 ++++++++++++++++ src/programming/java/AI试题/20250522.md | 2 +- src/programming/java/AI试题/20250523.md | 135 ++++++++++++++++++++++++ src/programming/java/工具箱/Maven.md | 2 +- src/programming/java/工具箱/浏览器.md | 15 +++ 6 files changed, 251 insertions(+), 7 deletions(-) create mode 100644 src/application/Jellyfin.md create mode 100644 src/programming/java/AI试题/20250523.md create mode 100644 src/programming/java/工具箱/浏览器.md diff --git a/src/.vuepress/sidebar.ts b/src/.vuepress/sidebar.ts index a15a82b..cba5399 100644 --- a/src/.vuepress/sidebar.ts +++ b/src/.vuepress/sidebar.ts @@ -25,7 +25,7 @@ export default sidebar({ }, { text: "试题", - icon: "mdi:language-java", + icon: "ic:baseline-question-answer", collapsible: true, prefix: "AI试题/", children: "structure", @@ -36,12 +36,12 @@ export default sidebar({ text: "Linux", collapsible: true, expanded: true, - icon: "mdi:language-java", + icon: "devicon:linux", prefix: "linux/", children: [ { text: "凝思", - icon: "simple-icons:framework", + icon: "simple-icons:linux", collapsible: true, prefix: "凝思/", children: "structure", @@ -50,9 +50,11 @@ export default sidebar({ }, { text: "Docker", + // 可折叠 collapsible: true, - expanded: true, - icon: "mdi:language-java", + //是否展开 + expanded: false, + icon: "devicon:docker", prefix: "docker/", children: "structure", } diff --git a/src/application/Jellyfin.md b/src/application/Jellyfin.md new file mode 100644 index 0000000..c0ebcc7 --- /dev/null +++ b/src/application/Jellyfin.md @@ -0,0 +1,92 @@ +--- +title: music +date: 2025-05-23 +category: + - 应用 +tag: + - jellyfin +--- + + +# Jellyfin音乐目录结构规范总结 + +Jellyfin作为一款优秀的媒体服务器,对音乐文件的组织有着特定的规范和建议,以确保最佳的识别和播放体验。本文将详细总结Jellyfin音乐目录的结构规范,包括专辑组织、多碟片处理、歌词文件管理、图片资源使用以及文件格式兼容性等方面。 + +## 专辑组织基本原则 + +Jellyfin的音乐库管理遵循"一个文件夹一个专辑"的基本原则。每个专辑必须被包含在单独的文件夹中,这是Jellyfin识别专辑的基础。值得注意的是,Jellyfin并不严格要求您如何组织这些专辑文件夹,只要确保每个专辑都有其独立的文件夹即可。例如,您可以按艺术家创建上层文件夹,然后在其中放置该艺术家的各个专辑文件夹;也可以直接在音乐根目录下放置各个专辑文件夹。 + +文件命名方面,Jellyfin主要依赖音频文件中嵌入的元数据进行识别,而非文件名本身。这意味着即使文件名不规范,只要音频文件中包含正确的元数据信息(如曲目标题、艺术家、专辑名等),Jellyfin仍能正确识别。只有在找不到其他元数据的情况下,Jellyfin才会使用文件名作为曲目标题。 + +尽管如此,文件命名时仍应避免使用特殊字符,因为它们可能导致问题。已知会引起问题的字符包括:`<`、`>`、`:`、`"`、`/`、`\`、`|`、`?`、`*`。这些字符在文件系统中有特殊含义,可能导致文件访问或识别错误。 + +## 多碟片专辑处理 + +对于包含多张碟片的专辑,Jellyfin主要通过音频文件元数据中的"碟片编号"和"总碟片数"字段进行识别。处理多碟片专辑时,有两种组织方式: + +第一种方式是将所有碟片的曲目放在同一个专辑文件夹中,通过元数据区分不同碟片的曲目。这种方式简单直接,完全依赖元数据进行组织。 + +第二种方式是在专辑文件夹内为每张碟片创建单独的子文件夹(如"Disc 1"、"Disc 2"等),然后将相应碟片的曲目放入对应子文件夹。这种方式在视觉上更加清晰,但需要注意的是,嵌入的元数据优先级仍高于文件夹结构,因此确保元数据正确尤为重要。 + +无论采用哪种组织方式,确保音频文件中包含正确的碟片信息元数据是关键,这样Jellyfin才能准确识别和组织多碟片专辑的内容。 + +## 歌词文件管理 + +Jellyfin支持为音乐文件添加歌词,实现边听歌边看歌词的功能。歌词文件必须与对应的音频文件位于同一文件夹中,且文件名(不含扩展名)必须完全匹配。例如,音频文件"01 Death Eternal.mp3"对应的歌词文件应为"01 Death Eternal.lrc"、"01 Death Eternal.elrc"或"01 Death Eternal.txt"。 + +Jellyfin支持两种类型的歌词文件:同步歌词和非同步歌词。同步歌词是交互式的,允许用户点击任意行跳转到歌曲中对应的时间点。同步歌词文件通常包含时间戳信息,格式如下: + +``` +[ar: 艺术家名称] +[ti: 歌曲标题] +[al: 专辑名称] +[by: 作者] +[length: 2:57] +[00:10.89]第一行歌词 +[00:14.58]第二行歌词 +... +``` + +创建同步歌词可以手动完成,但这可能耗时且不够精确,建议使用如MiniLyrics等歌词同步软件辅助完成。 + +非同步歌词则更容易实现,但用户跟唱时可能不够方便。非同步歌词文件格式简单,仅包含按顺序排列的歌词文本,没有时间戳信息: + +``` +第一行歌词 +第二行歌词 +... +``` + +## 图片资源管理 + +Jellyfin音乐库中的图片资源主要有三种类型:封面图(Primary)、背景图(Backdrop)和标志图(Logo)。这些图片可以来自不同来源,但外部图片文件优先级最高。 + +外部图片文件应放置在媒体文件旁边,即与音频文件位于同一文件夹中。如果没有提供封面图,Jellyfin会回退使用第一个带有嵌入专辑图片的音轨。如果没有可用的背景图或标志图,Jellyfin会回退使用专辑艺术家的相应图片。 + +不同类型的图片文件可以使用以下命名: +- 封面图(Primary):folder、poster、cover、default +- 背景图(Backdrop):backdrop、fanart、background、art、extrafanart +- 标志图(Logo):logo + +对于背景图,可以提供多张图片实现循环切换效果。只需在文件名后直接或在连字符后添加数字即可,如"backdrop1.jpg"、"backdrop-2.jpg"等。 + +## 文件格式兼容性 + +Jellyfin支持大多数常见的音乐格式,但有一些例外情况需要注意: + +1. 仅包含音频的MP4文件:".mp4"文件不会被识别为音乐,应将其重命名为".m4a"。 +2. 仅包含音频的MKV/WebM文件:".mkv"和".webm"文件不会被识别为音乐,应将其重命名为".mka"。 +3. WebA文件:".weba"文件不受支持,应将其重命名为".mka"。 +4. 带有嵌入WebP图片或ID3标签的".flac"文件可能在基于Chromium的浏览器(Chrome、Edge、Opera、Brave等)或Firefox中无法播放。如遇此问题,请在客户端设置中启用"始终重新封装FLAC音频文件"选项。 +5. 使用ID3v1标签的文件大多数字段长度限制为30字节,超出部分将被截断。建议升级到ID3v2.4。 + +对于有问题的文件,可以使用ffmpeg将其重新封装为".mka"容器,命令如下: +``` +ffmpeg -i <输入文件> -c:a copy <输出文件>.mka +``` + +需要注意的是,重新封装过程可能会导致元数据混乱,嵌入的图片可能无法保留,因此可能需要手动或使用其他程序恢复元数据。 + +## 总结 + +Jellyfin的音乐目录结构规范主要围绕"一个文件夹一个专辑"的核心原则展开,同时提供了灵活的组织方式。正确的元数据是Jellyfin识别音乐内容的关键,而外部资源如歌词和图片则需要遵循特定的命名和放置规则。了解并遵循这些规范,可以帮助用户构建一个组织良好、功能完善的Jellyfin音乐库,获得最佳的音乐欣赏体验。 diff --git a/src/programming/java/AI试题/20250522.md b/src/programming/java/AI试题/20250522.md index 15b4dbd..e04a9e2 100644 --- a/src/programming/java/AI试题/20250522.md +++ b/src/programming/java/AI试题/20250522.md @@ -1,6 +1,6 @@ --- date: 2025-05-22 -title: 20250522 +title: "20250522" category: - Java tag: diff --git a/src/programming/java/AI试题/20250523.md b/src/programming/java/AI试题/20250523.md new file mode 100644 index 0000000..db9a499 --- /dev/null +++ b/src/programming/java/AI试题/20250523.md @@ -0,0 +1,135 @@ +--- +title: "20250523" +date: 2025-05-23 +category: + - JAVA +tag: + - 试题 +--- + +2025-05-23 AI试题 + + +### 选择题 +1. 以下关于 Java 类的构造方法,说法正确的是( ) + A. 构造方法必须有返回值类型 + B. 一个类只能有一个构造方法 + C. 构造方法的名称必须与类名相同 + D. 构造方法不能使用访问修饰符 + +2. 下列关于 Java 中 String 类的描述,错误的是( ) + A. String 类是不可变类,一旦创建,其值不能被修改 + B. 可以使用“+”运算符来连接两个 String 对象 + C. String 类的对象存储在栈内存中 + D. String 类提供了很多方法,如 equals() 用于比较两个字符串的内容是否相等 + +### 填空题 +1. Java 中用于实现线程同步的关键字除了 synchronized 外,还有__________。 +2. 在 Java 集合框架中,__________是一个有序的、可重复的集合接口。 + +### 简答题 +1. 简述 Java 中反射机制的概念和用途。 +2. 请说明 Java 中抽象类和接口的区别。 + +### 编程题 +1. 编写一个 Java 程序,实现对一个整数数组进行排序,并输出排序后的数组。要求使用冒泡排序算法。 + +### 场景题 +1. 在一个 Java Web 项目中,用户登录后,需要将用户信息存储在会话(Session)中。当用户访问其他页面时,需要验证用户是否已经登录。请描述实现该功能的步骤。 + +### 论述题 +1. 论述 Java 中性能优化的主要方面和常用方法,并结合实际案例进行说明。 + +### 综合题 +1. 设计一个 Java 程序,模拟一个图书馆管理系统。该系统包含图书管理、读者管理和借阅管理三个模块。图书管理模块负责图书的添加、删除和查询;读者管理模块负责读者的注册、注销和信息查询;借阅管理模块负责图书的借阅和归还操作。请说明各个模块之间的关系以及如何实现它们之间的交互。 + +### 选择题答案 +1. **答案**:C + **解析**:A选项,构造方法没有返回值类型,连 void 都不能写,所以 A 错误;B选项,一个类可以有多个构造方法,这就是构造方法的重载,所以 B 错误;C选项,构造方法的名称必须与类名相同,这是构造方法的基本定义,所以 C 正确;D选项,构造方法可以使用访问修饰符,如 public、private 等,所以 D 错误。 +2. **答案**:C + **解析**:A选项,String 类是不可变类,一旦创建,其值不能被修改,如果对 String 对象进行修改操作,实际上是创建了一个新的 String 对象,所以 A 正确;B选项,“+”运算符可以用于连接两个 String 对象,这是 Java 中常用的字符串连接方式,所以 B 正确;C选项,String 类的对象存储在堆内存中,而不是栈内存,所以 C 错误;D选项,String 类提供了很多方法,equals() 方法用于比较两个字符串的内容是否相等,而不是比较引用是否相等,所以 D 正确。 + +### 填空题答案 +1. **答案**:Lock + **解析**:在 Java 中,除了使用 synchronized 关键字实现线程同步外,还可以使用 Lock 接口及其实现类(如 ReentrantLock)来实现线程同步。Lock 提供了更灵活的锁机制,例如可以实现公平锁、可中断锁等。 +2. **答案**:List + **解析**:在 Java 集合框架中,List 是一个有序的、可重复的集合接口。常见的实现类有 ArrayList、LinkedList 等。List 中的元素按照插入的顺序排列,并且可以包含重复的元素。 + +### 简答题答案 +1. **答案**:Java 中的反射机制是指在运行时动态地获取类的信息、创建对象、调用方法和访问属性等。其用途主要有:一是在框架开发中,如 Spring 框架通过反射机制实现依赖注入;二是在开发工具中,如 IDE 可以通过反射机制获取类的信息,提供代码提示等功能;三是在插件开发中,可以通过反射机制动态加载和调用插件类的方法。 + **解析**:反射机制的核心是 Java 的 Class 类,通过 Class 类可以获取类的各种信息,如构造方法、方法、属性等。然后可以使用这些信息来创建对象、调用方法和访问属性。反射机制打破了传统的编译时绑定,使得程序在运行时可以更加灵活地处理类和对象。 +2. **答案**:Java 中抽象类和接口的区别主要有: + - 定义方式:抽象类使用 abstract 关键字修饰类,接口使用 interface 关键字定义。 + - 成员变量:抽象类可以有普通成员变量,也可以有常量;接口中的成员变量默认都是 public static final 类型的常量。 + - 方法:抽象类可以有抽象方法和非抽象方法;接口中的方法默认都是 public abstract 类型的抽象方法(Java 8 及以后支持默认方法和静态方法)。 + - 继承和实现:一个类只能继承一个抽象类,但可以实现多个接口。 + - 设计目的:抽象类是对一类事物的抽象,包含了一些通用的属性和方法;接口是对行为的抽象,定义了一组行为规范。 + **解析**:抽象类和接口在 Java 中都用于实现多态和代码复用,但它们的设计目的和使用场景有所不同。抽象类更侧重于对类的抽象,而接口更侧重于对行为的抽象。在实际开发中,需要根据具体的需求来选择使用抽象类还是接口。 + +### 编程题答案 +1. **示例代码**: +```java +public class BubbleSort { + public static void bubbleSort(int[] arr) { + int n = arr.length; + for (int i = 0; i < n - 1; i++) { + for (int j = 0; j < n - i - 1; j++) { + if (arr[j] > arr[j + 1]) { + // 交换 arr[j] 和 arr[j+1] + int temp = arr[j]; + arr[j] = arr[j + 1]; + arr[j + 1] = temp; + } + } + } + } + + public static void main(String[] args) { + int[] arr = {64, 34, 25, 12, 22, 11, 90}; + bubbleSort(arr); + System.out.println("排序后的数组:"); + for (int num : arr) { + System.out.print(num + " "); + } + } +} +``` +**解析**:冒泡排序算法的基本思想是比较相邻的元素,如果顺序错误就把它们交换过来。外层循环控制排序的轮数,内层循环控制每一轮比较的次数。在每一轮中,将较大的元素逐步“冒泡”到数组的末尾。最后,数组就会按照从小到大的顺序排列。 + +### 场景题答案 +1. **答案**:实现该功能的步骤如下: + - 用户登录验证:当用户提交登录信息时,在服务器端验证用户的用户名和密码是否正确。如果验证通过,将用户信息(如用户 ID、用户名等)存储在会话(Session)中。 + - 会话管理:在用户访问其他页面时,首先获取当前会话对象。检查会话中是否包含用户信息,如果包含,则说明用户已经登录;如果不包含,则说明用户未登录,将用户重定向到登录页面。 + - 会话过期处理:为了保证系统的安全性,需要设置会话的过期时间。当会话过期后,用户需要重新登录。 + + **解析**:在 Java Web 项目中,可以使用 HttpSession 对象来管理会话。通过 request.getSession() 方法可以获取当前会话对象。在登录验证通过后,使用 session.setAttribute() 方法将用户信息存储在会话中。在其他页面中,使用 session.getAttribute() 方法获取用户信息进行验证。同时,可以使用 session.setMaxInactiveInterval() 方法设置会话的过期时间。 + +### 论述题答案 +1. **答案**:Java 中性能优化的主要方面和常用方法如下: + - **代码层面**: + - 避免创建过多的对象,尽量复用对象。例如,使用 StringBuilder 代替 String 进行字符串拼接,因为 String 是不可变类,每次拼接都会创建新的对象。 + - 减少方法调用的开销,避免在循环中频繁调用方法。 + - 合理使用数据结构,根据不同的需求选择合适的数据结构。例如,对于频繁查找操作,使用 HashMap 比使用 ArrayList 更高效。 + - **内存管理层面**: + - 及时释放不再使用的对象,避免内存泄漏。例如,在使用完文件流、数据库连接等资源后,要及时关闭。 + - 调整 JVM 的堆内存大小,根据应用程序的实际需求合理分配堆内存。 + - **多线程层面**: + - 合理使用线程池,避免频繁创建和销毁线程。例如,使用 Executors 类创建线程池。 + - 优化线程同步机制,减少锁的竞争。例如,使用读写锁代替普通的互斥锁。 + + 实际案例:一个电商系统在高并发场景下,用户下单时响应时间过长。通过性能优化,发现是由于在下单过程中频繁创建对象和数据库连接导致的。于是,使用对象池来复用对象,使用数据库连接池来管理数据库连接,同时调整了 JVM 的堆内存大小。经过优化后,系统的响应时间明显缩短,性能得到了显著提升。 + **解析**:Java 性能优化需要从多个方面入手,包括代码的编写、内存的管理和多线程的使用等。通过合理的优化措施,可以提高系统的性能和响应速度,减少资源的消耗。实际案例可以帮助我们更好地理解性能优化的重要性和具体方法。 + +### 综合题答案 +1. **答案**: + - **模块关系**: + - 读者管理模块为借阅管理模块提供读者信息,只有已注册的读者才能进行借阅和归还操作。 + - 图书管理模块为借阅管理模块提供图书信息,借阅管理模块根据图书信息判断图书是否可借。 + - 借阅管理模块会更新图书管理模块中的图书库存信息和读者管理模块中的读者借阅记录。 + - **实现方式**: + - **数据模型**:设计数据库表来存储图书信息、读者信息和借阅记录。例如,图书表包含图书 ID、书名、作者、库存等字段;读者表包含读者 ID、姓名、联系方式等字段;借阅记录表包含借阅 ID、图书 ID、读者 ID、借阅时间、归还时间等字段。 + - **分层架构**:采用 MVC 分层架构,将业务逻辑、数据访问和视图展示分离。每个模块都有对应的 Service 层和 Dao 层,Service 层负责处理业务逻辑,Dao 层负责与数据库进行交互。 + - **服务接口**:各个模块之间通过服务接口进行交互。例如,借阅管理模块可以调用图书管理模块的服务接口来获取图书信息,调用读者管理模块的服务接口来验证读者信息。 + - **异常处理**:在各个模块中添加异常处理机制,确保系统的稳定性。例如,当图书库存不足时,抛出相应的异常并进行处理。 + + **解析**:通过合理的模块设计和交互方式,可以实现一个功能完整、结构清晰的图书馆管理系统。数据模型的设计是系统的基础,分层架构可以提高代码的可维护性和可测试性,服务接口的使用可以实现模块之间的解耦,异常处理可以保证系统的稳定性。 \ No newline at end of file diff --git a/src/programming/java/工具箱/Maven.md b/src/programming/java/工具箱/Maven.md index bb6de41..73aeb25 100644 --- a/src/programming/java/工具箱/Maven.md +++ b/src/programming/java/工具箱/Maven.md @@ -6,7 +6,7 @@ category: - JAVA tag: - maven -title: maven常用配置 +title: Maven常用配置 --- diff --git a/src/programming/java/工具箱/浏览器.md b/src/programming/java/工具箱/浏览器.md new file mode 100644 index 0000000..38b1335 --- /dev/null +++ b/src/programming/java/工具箱/浏览器.md @@ -0,0 +1,15 @@ +--- +icon: bi:arrows-expand +date: 2025-05-23 +category: + - google +tag: + - 强制背景黑色 +title: Google +--- + +```text +地址栏输入:chrome://flags/#enable-force-dark +然后选择enable +然后刷新,OK,成功 +``` \ No newline at end of file