Compare commits
9 Commits
b5e5ca21ae
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| b2e8b47ec3 | |||
| eddce45adb | |||
| 9dd80fb073 | |||
| 473a5b4935 | |||
| 0ac9f50da2 | |||
| 961676c357 | |||
| 3ef34ff778 | |||
| f0b0c4dafc | |||
| c2c4f08fc6 |
224
README.md
@@ -1,112 +1,112 @@
|
|||||||
# 我的个人博客
|
# 我的个人博客
|
||||||
|
|
||||||
本项目基于 [VitePress](https://vitepress.dev/) 构建,并使用了 [@sugarat/theme](https://theme.sugarat.top/) 主题。
|
本项目基于 [VitePress](https://vitepress.dev/) 构建,并使用了 [@sugarat/theme](https://theme.sugarat.top/) 主题。
|
||||||
|
|
||||||
## 安装与启动
|
## 安装与启动
|
||||||
|
|
||||||
**1. 环境准备**
|
**1. 环境准备**
|
||||||
|
|
||||||
请确保你的环境中已经安装了 [Node.js](https://nodejs.org/en/) (版本 >= 18) 和 [pnpm](https://pnpm.io/installation)。
|
请确保你的环境中已经安装了 [Node.js](https://nodejs.org/en/) (版本 >= 18) 和 [pnpm](https://pnpm.io/installation)。
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# 安装 pnpm
|
# 安装 pnpm
|
||||||
npm i -g pnpm
|
npm i -g pnpm
|
||||||
```
|
```
|
||||||
|
|
||||||
**2. 安装依赖**
|
**2. 安装依赖**
|
||||||
|
|
||||||
你可以使用 `pnpm` 或者 `bun` 来安装项目依赖。
|
你可以使用 `pnpm` 或者 `bun` 来安装项目依赖。
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# 使用 pnpm
|
# 使用 pnpm
|
||||||
pnpm install
|
pnpm install
|
||||||
|
|
||||||
# 或者使用 bun
|
# 或者使用 bun
|
||||||
bun install
|
bun install
|
||||||
```
|
```
|
||||||
|
|
||||||
**3. 本地开发**
|
**3. 本地开发**
|
||||||
|
|
||||||
执行以下命令启动本地开发服务器:
|
执行以下命令启动本地开发服务器:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm dev
|
pnpm dev
|
||||||
```
|
```
|
||||||
|
|
||||||
**4. 项目构建**
|
**4. 项目构建**
|
||||||
|
|
||||||
构建用于生产环境的静态文件:
|
构建用于生产环境的静态文件:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm build
|
pnpm build
|
||||||
```
|
```
|
||||||
|
|
||||||
**5. 本地预览**
|
**5. 本地预览**
|
||||||
|
|
||||||
在本地预览构建后的产物:
|
在本地预览构建后的产物:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm serve
|
pnpm serve
|
||||||
```
|
```
|
||||||
|
|
||||||
## 主题与更新
|
## 主题与更新
|
||||||
|
|
||||||
### 更新主题
|
### 更新主题
|
||||||
|
|
||||||
本项目使用 `@sugarat/theme` 主题,要升级到最新版本,请执行:
|
本项目使用 `@sugarat/theme` 主题,要升级到最新版本,请执行:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm add @sugarat/theme@latest
|
pnpm add @sugarat/theme@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
### 更新 VitePress
|
### 更新 VitePress
|
||||||
|
|
||||||
通常,主题包会依赖最新的 VitePress 版本。如果你需要手动更新 VitePress,可以执行:
|
通常,主题包会依赖最新的 VitePress 版本。如果你需要手动更新 VitePress,可以执行:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pnpm add vitepress@latest
|
pnpm add vitepress@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## Github Pages 部署
|
## Github Pages 部署
|
||||||
|
|
||||||
① 开启 Github Pages 的 Git Actions 部署支持。
|
① 开启 Github Pages 的 Git Actions 部署支持。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
② 复制 `.github/workflows/deploy.yml` 文件到你的项目相同目录下(如果已有则忽略)。
|
② 复制 `.github/workflows/deploy.yml` 文件到你的项目相同目录下(如果已有则忽略)。
|
||||||
|
|
||||||
③ 修改 `docs/.vitepress/config.mts` 里的构建配置 `base`。
|
③ 修改 `docs/.vitepress/config.mts` 里的构建配置 `base`。
|
||||||
|
|
||||||
**如果你的仓库名是 `username.github.io`,则不需要修改 `base`,保持默认值 `/` 即可。**
|
**如果你的仓库名是 `username.github.io`,则不需要修改 `base`,保持默认值 `/` 即可。**
|
||||||
|
|
||||||
否则,需要将 `base` 修改为 `"/仓库名/"`。
|
否则,需要将 `base` 修改为 `"/仓库名/"`。
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
// docs/.vitepress/config.mts
|
// docs/.vitepress/config.mts
|
||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
// ... 其他配置
|
// ... 其他配置
|
||||||
base: '/你的仓库名/',
|
base: '/你的仓库名/',
|
||||||
})
|
})
|
||||||
```
|
```
|
||||||
|
|
||||||
④ 推送代码到 `main` 分支即可触发自动部署。
|
④ 推送代码到 `main` 分支即可触发自动部署。
|
||||||
|
|
||||||
如果需要进一步修改部署和构建配置,请直接编辑 `.github/workflows/deploy.yml` 文件。
|
如果需要进一步修改部署和构建配置,请直接编辑 `.github/workflows/deploy.yml` 文件。
|
||||||
|
|
||||||
## 阿里云 ESA 部署
|
## 阿里云 ESA 部署
|
||||||
|
|
||||||
为了在阿里云 ESA(函数与 Pages)中完成一键部署,项目根目录新增了 `esa.json` 配置文件,内容包含安装命令、构建命令、输出目录及 Node.js 版本要求。ESA 会自动读取这些信息完成依赖安装和静态产物构建,无需额外脚本:
|
为了在阿里云 ESA(函数与 Pages)中完成一键部署,项目根目录新增了 `esa.json` 配置文件,内容包含安装命令、构建命令、输出目录及 Node.js 版本要求。ESA 会自动读取这些信息完成依赖安装和静态产物构建,无需额外脚本:
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"installCommand": "npm install",
|
"installCommand": "npm install",
|
||||||
"buildCommand": "npm run build",
|
"buildCommand": "npm run build",
|
||||||
"outputDirectory": "docs/.vitepress/dist",
|
"outputDirectory": "docs/.vitepress/dist",
|
||||||
"nodeVersion": "18.20.4"
|
"nodeVersion": "18.20.4"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
如果后续需要调整构建流程,只需按需修改对应字段即可。
|
如果后续需要调整构建流程,只需按需修改对应字段即可。
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ const blogTheme = getThemeConfig({
|
|||||||
{
|
{
|
||||||
nickname: 'NoahのBlog',
|
nickname: 'NoahのBlog',
|
||||||
des: '我们生来就是为了成为自己,\n而不是成为某种正确的人',
|
des: '我们生来就是为了成为自己,\n而不是成为某种正确的人',
|
||||||
avatar: 'https://cdn.tulan.cyou/noah/2025/07/26/b_5255bd8e31082e2a4332c4eb4172686e.jpg',
|
avatar: 'Noah.jpg',
|
||||||
url: 'https://blog.noah0932.top/',
|
url: 'https://blog.noah0932.top/',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -64,6 +64,20 @@ const blogTheme = getThemeConfig({
|
|||||||
'linuxdo.png',
|
'linuxdo.png',
|
||||||
url: 'https://linux.do/',
|
url: 'https://linux.do/',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
nickname: '小丁的个人站',
|
||||||
|
des: '月色被你揉碎在眼底 | 世界探索家',
|
||||||
|
avatar:
|
||||||
|
'https://www.xiaoding77.com/avatar.jpg',
|
||||||
|
url: 'https://www.xiaoding77.com/',
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
nickname: "Stevezxc",
|
||||||
|
url: "https://stevezxc.github.io/",
|
||||||
|
avatar: "https://stevezxc.github.io/images/favicon.svg",
|
||||||
|
des: "Ceaseless Seeker"
|
||||||
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
// 公告
|
// 公告
|
||||||
|
|||||||
@@ -1,82 +1,82 @@
|
|||||||
import { defineConfig } from 'vitepress'
|
import { defineConfig } from 'vitepress'
|
||||||
|
|
||||||
// 导入主题的配置
|
// 导入主题的配置
|
||||||
import { blogTheme } from './blog-theme'
|
import { blogTheme } from './blog-theme'
|
||||||
|
|
||||||
// 如果使用 GitHub/Gitee Pages 等公共平台部署
|
// 如果使用 GitHub/Gitee Pages 等公共平台部署
|
||||||
// 通常需要修改 base 路径,通常为“/仓库名/”
|
// 通常需要修改 base 路径,通常为“/仓库名/”
|
||||||
// 如果项目名已经为 name.github.io 域名,则不需要修改!
|
// 如果项目名已经为 name.github.io 域名,则不需要修改!
|
||||||
// const base = process.env.GITHUB_ACTIONS === 'true'
|
// const base = process.env.GITHUB_ACTIONS === 'true'
|
||||||
// ? '/vitepress-blog-sugar-template/'
|
// ? '/vitepress-blog-sugar-template/'
|
||||||
// : '/'
|
// : '/'
|
||||||
|
|
||||||
// Vitepress 默认配置
|
// Vitepress 默认配置
|
||||||
// 详见文档:https://vitepress.dev/reference/site-config
|
// 详见文档:https://vitepress.dev/reference/site-config
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
// 继承博客主题(@sugarat/theme)
|
// 继承博客主题(@sugarat/theme)
|
||||||
extends: blogTheme,
|
extends: blogTheme,
|
||||||
// base,
|
// base,
|
||||||
lang: 'zh-cn',
|
lang: 'zh-cn',
|
||||||
title: 'SIMON BLOG',
|
title: 'SIMON BLOG',
|
||||||
description: '同是天涯沦落人,相逢何必曾相识',
|
description: '同是天涯沦落人,相逢何必曾相识',
|
||||||
lastUpdated: true,
|
lastUpdated: true,
|
||||||
markdown: {
|
markdown: {
|
||||||
math: true
|
math: true
|
||||||
},
|
},
|
||||||
// 详见:https://vitepress.dev/zh/reference/site-config#head
|
// 详见:https://vitepress.dev/zh/reference/site-config#head
|
||||||
head: [
|
head: [
|
||||||
// 配置网站的图标(显示在浏览器的 tab 上)
|
// 配置网站的图标(显示在浏览器的 tab 上)
|
||||||
// ['link', { rel: 'icon', href: `${base}favicon.ico` }], // 修改了 base 这里也需要同步修改
|
// ['link', { rel: 'icon', href: `${base}favicon.ico` }], // 修改了 base 这里也需要同步修改
|
||||||
['link', { rel: 'icon', href: '/favicon.ico' }]
|
['link', { rel: 'icon', href: '/favicon.ico' }]
|
||||||
],
|
],
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
// 展示 2,3 级标题在目录中
|
// 展示 2,3 级标题在目录中
|
||||||
outline: {
|
outline: {
|
||||||
level: [2, 3],
|
level: [2, 3],
|
||||||
label: '目录'
|
label: '目录'
|
||||||
},
|
},
|
||||||
// 默认文案修改
|
// 默认文案修改
|
||||||
returnToTopLabel: '回到顶部',
|
returnToTopLabel: '回到顶部',
|
||||||
sidebarMenuLabel: '相关文章',
|
sidebarMenuLabel: '相关文章',
|
||||||
lastUpdatedText: '上次更新于',
|
lastUpdatedText: '上次更新于',
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 设置logo
|
// 设置logo
|
||||||
logo: '/logo.jpg',
|
logo: '/logo.jpg',
|
||||||
// editLink: {
|
// editLink: {
|
||||||
// pattern:
|
// pattern:
|
||||||
// 'https://github.com/ATQQ/sugar-blog/tree/master/packages/blogpress/:path',
|
// 'https://github.com/ATQQ/sugar-blog/tree/master/packages/blogpress/:path',
|
||||||
// text: '去 GitHub 上编辑内容'
|
// text: '去 GitHub 上编辑内容'
|
||||||
// },
|
// },
|
||||||
nav: [
|
nav: [
|
||||||
{ text: '首页', link: '/' },
|
{ text: '首页', link: '/' },
|
||||||
// { text: '导航页', link: 'http://home.zhuzihan.com/' },
|
// { text: '导航页', link: 'http://home.zhuzihan.com/' },
|
||||||
{ text: '个人导航', link: 'https://home.zhuzihan.com/' },
|
{ text: '个人导航', link: 'https://home.zhuzihan.com/' },
|
||||||
{ text: '主题仓库', link: 'https://github.com/ATQQ/sugar-blog/tree/master/packages/theme' },
|
{ text: '主题仓库', link: 'https://github.com/ATQQ/sugar-blog/tree/master/packages/theme' },
|
||||||
{ text: '关于作者', link: 'https://github.com/handsomezhuzhu' },
|
{ text: '关于作者', link: 'https://github.com/handsomezhuzhu' },
|
||||||
{ text: '探针', link: 'https://state.zhuzihan.com/' },
|
{ text: '探针', link: 'https://state.zhuzihan.com/' },
|
||||||
{ text: 'AI API测活', link: 'https://api-test.zhuzihan.com/' },
|
{ text: 'AI API测活', link: 'https://api-test.zhuzihan.com/' },
|
||||||
{ text: '文件快递柜', link: 'https://file.zhuzihan.com/' },
|
{ text: '文件快递柜', link: 'https://file.zhuzihan.com/' },
|
||||||
{ text: 'OpenWebUI', link: 'https://ai.zhuzihan.com/' },
|
// { text: 'OpenWebUI', link: 'https://ai.zhuzihan.com/' },
|
||||||
{ text: '临时2fa', link: 'https://2fa.zhuzihan.com/' }
|
{ text: '临时2fa', link: 'https://2fa.zhuzihan.com/' }
|
||||||
|
|
||||||
],
|
],
|
||||||
socialLinks: [
|
socialLinks: [
|
||||||
{
|
{
|
||||||
icon: 'github',
|
icon: 'github',
|
||||||
link: 'https://github.com/handsomezhuzhu'
|
link: 'https://github.com/handsomezhuzhu'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
vite: {
|
vite: {
|
||||||
css: {
|
css: {
|
||||||
preprocessorOptions: {
|
preprocessorOptions: {
|
||||||
scss: {
|
scss: {
|
||||||
api: 'modern-compiler'
|
api: 'modern-compiler'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -1,152 +1,152 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed, onMounted, onUnmounted, watch } from 'vue'
|
import { ref, computed, onMounted, onUnmounted, watch } from 'vue'
|
||||||
import { useData, useRoute } from 'vitepress'
|
import { useData, useRoute } from 'vitepress'
|
||||||
|
|
||||||
const { isDark, frontmatter } = useData()
|
const { isDark, frontmatter } = useData()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
// 图片配置
|
// 图片配置
|
||||||
const darkImages = [
|
const darkImages = [
|
||||||
// '/bg.webp',
|
// '/bg.webp',
|
||||||
'/bg2.webp',
|
'/bg2.webp',
|
||||||
'/bg3.jpeg'
|
'/bg3.jpeg'
|
||||||
]
|
]
|
||||||
|
|
||||||
const lightImages = [
|
const lightImages = [
|
||||||
'/bgw.webp',
|
'/bgw.webp',
|
||||||
'/bgw2.jpeg'
|
'/bgw2.jpeg'
|
||||||
]
|
]
|
||||||
|
|
||||||
const currentImages = computed(() => isDark.value ? darkImages : lightImages)
|
const currentImages = computed(() => isDark.value ? darkImages : lightImages)
|
||||||
const currentIndex = ref(0)
|
const currentIndex = ref(0)
|
||||||
const nextIndex = ref(1)
|
const nextIndex = ref(1)
|
||||||
|
|
||||||
// 控制显示的图片
|
// 控制显示的图片
|
||||||
const activeImage = computed(() => currentImages.value[currentIndex.value])
|
const activeImage = computed(() => currentImages.value[currentIndex.value])
|
||||||
// const nextImage = computed(() => currentImages.value[nextIndex.value])
|
// const nextImage = computed(() => currentImages.value[nextIndex.value])
|
||||||
|
|
||||||
// 简单的淡入淡出逻辑:
|
// 简单的淡入淡出逻辑:
|
||||||
// 我们使用 <transition> 包裹一个 div 作为背景
|
// 我们使用 <transition> 包裹一个 div 作为背景
|
||||||
// 也可以使用两个 div 叠加,一个 fadeOut 一个 fadeIn
|
// 也可以使用两个 div 叠加,一个 fadeOut 一个 fadeIn
|
||||||
// 这里使用 Vue Transition Group 或 Key 切换
|
// 这里使用 Vue Transition Group 或 Key 切换
|
||||||
|
|
||||||
// --- 配置区域 ---
|
// --- 配置区域 ---
|
||||||
const INTERVAL_TIME = 15000 // 轮换间隔:5000ms = 5秒
|
const INTERVAL_TIME = 15000 // 轮换间隔:5000ms = 5秒
|
||||||
// ----------------
|
// ----------------
|
||||||
|
|
||||||
let timer: any = null
|
let timer: any = null
|
||||||
|
|
||||||
const startRotation = () => {
|
const startRotation = () => {
|
||||||
stopRotation()
|
stopRotation()
|
||||||
timer = setInterval(() => {
|
timer = setInterval(() => {
|
||||||
currentIndex.value = (currentIndex.value + 1) % currentImages.value.length
|
currentIndex.value = (currentIndex.value + 1) % currentImages.value.length
|
||||||
}, INTERVAL_TIME)
|
}, INTERVAL_TIME)
|
||||||
}
|
}
|
||||||
|
|
||||||
const stopRotation = () => {
|
const stopRotation = () => {
|
||||||
if (timer) clearInterval(timer)
|
if (timer) clearInterval(timer)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听模式变化,重置索引,防止索引越界
|
// 监听模式变化,重置索引,防止索引越界
|
||||||
watch(isDark, () => {
|
watch(isDark, () => {
|
||||||
// 切换模式时,重置 index,确保展示对应模式的第一张图
|
// 切换模式时,重置 index,确保展示对应模式的第一张图
|
||||||
currentIndex.value = 0
|
currentIndex.value = 0
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
const preloadImages = (images: string[]) => {
|
const preloadImages = (images: string[]) => {
|
||||||
images.forEach(src => {
|
images.forEach(src => {
|
||||||
const img = new Image()
|
const img = new Image()
|
||||||
img.src = src
|
img.src = src
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 预加载所有图片
|
// 预加载所有图片
|
||||||
preloadImages([...darkImages, ...lightImages])
|
preloadImages([...darkImages, ...lightImages])
|
||||||
startRotation()
|
startRotation()
|
||||||
})
|
})
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
stopRotation()
|
stopRotation()
|
||||||
})
|
})
|
||||||
|
|
||||||
// 只在首页显示
|
// 只在首页显示
|
||||||
const show = computed(() => frontmatter.value.layout === 'home')
|
const show = computed(() => frontmatter.value.layout === 'home')
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<ClientOnly>
|
<ClientOnly>
|
||||||
<div v-show="show" class="bg-slider-container">
|
<div v-show="show" class="bg-slider-container">
|
||||||
<transition name="bg-fade">
|
<transition name="bg-fade">
|
||||||
<div
|
<div
|
||||||
:key="activeImage"
|
:key="activeImage"
|
||||||
class="bg-slide-item"
|
class="bg-slide-item"
|
||||||
:style="{ backgroundImage: `url(${activeImage})` }"
|
:style="{ backgroundImage: `url(${activeImage})` }"
|
||||||
></div>
|
></div>
|
||||||
</transition>
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
</ClientOnly>
|
</ClientOnly>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.bg-slider-container {
|
.bg-slider-container {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
z-index: -10; /* 放在最底层 */
|
z-index: -10; /* 放在最底层 */
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-slide-item {
|
.bg-slide-item {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
/* 保持与原主题一致的暗度调整,如果需要的话。
|
/* 保持与原主题一致的暗度调整,如果需要的话。
|
||||||
原主题是在 .VPHome 上盖了一层渐变,所以这里只需要纯图片。
|
原主题是在 .VPHome 上盖了一层渐变,所以这里只需要纯图片。
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Vue Transition 动画 */
|
/* Vue Transition 动画 */
|
||||||
.bg-fade-enter-active {
|
.bg-fade-enter-active {
|
||||||
transition: opacity 1.5s ease;
|
transition: opacity 1.5s ease;
|
||||||
z-index: 2; /* 新图片在最上面 */
|
z-index: 2; /* 新图片在最上面 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-fade-leave-active {
|
.bg-fade-leave-active {
|
||||||
/* 旧图片保持显示,直到被新图片覆盖 */
|
/* 旧图片保持显示,直到被新图片覆盖 */
|
||||||
transition: opacity 1.5s ease;
|
transition: opacity 1.5s ease;
|
||||||
z-index: 1; /* 旧图片在中间 */
|
z-index: 1; /* 旧图片在中间 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-fade-enter-from {
|
.bg-fade-enter-from {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-fade-enter-to {
|
.bg-fade-enter-to {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-fade-leave-from {
|
.bg-fade-leave-from {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-fade-leave-to {
|
.bg-fade-leave-to {
|
||||||
/* 旧图片保持不透明(或者可以设为 0 但在 enter 之后)
|
/* 旧图片保持不透明(或者可以设为 0 但在 enter 之后)
|
||||||
这里设为 0,因为如果 enter 是 opacity 1,它覆盖在上面。
|
这里设为 0,因为如果 enter 是 opacity 1,它覆盖在上面。
|
||||||
如果设为 1,可能会在 transition 结束后突然消失,如果新图片有透明度的话。
|
如果设为 1,可能会在 transition 结束后突然消失,如果新图片有透明度的话。
|
||||||
但我们的图片是背景图,理论上是不透明的。
|
但我们的图片是背景图,理论上是不透明的。
|
||||||
为了保险,我们让旧图片淡出,但新图片覆盖在上面。
|
为了保险,我们让旧图片淡出,但新图片覆盖在上面。
|
||||||
如果新图片淡入 (0->1) 同时旧图片淡出 (1->0),中间时刻 (0.5+0.5) 可能会透。
|
如果新图片淡入 (0->1) 同时旧图片淡出 (1->0),中间时刻 (0.5+0.5) 可能会透。
|
||||||
所以策略是:旧图片 保持 1 (或极慢淡出),新图片 淡入。
|
所以策略是:旧图片 保持 1 (或极慢淡出),新图片 淡入。
|
||||||
*/
|
*/
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,156 +1,156 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="music-player-wrapper" v-if="show">
|
<div class="music-player-wrapper" v-if="show">
|
||||||
<div class="music-control">
|
<div class="music-control">
|
||||||
<button class="toggle-btn" @click="togglePlayer" :title="isOpen ? '收起播放器' : '展开播放器'">
|
<button class="toggle-btn" @click="togglePlayer" :title="isOpen ? '收起播放器' : '展开播放器'">
|
||||||
<span v-if="isOpen">🎵</span>
|
<span v-if="isOpen">🎵</span>
|
||||||
<span v-else>🎵</span>
|
<span v-else>🎵</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<transition name="slide">
|
<transition name="slide">
|
||||||
<div class="music-player-container" v-show="isOpen">
|
<div class="music-player-container" v-show="isOpen">
|
||||||
<vue3-aplayer
|
<vue3-aplayer
|
||||||
:audio="audioList"
|
:audio="audioList"
|
||||||
:fixed="false"
|
:fixed="false"
|
||||||
:autoplay="false"
|
:autoplay="false"
|
||||||
:loop="'all'"
|
:loop="'all'"
|
||||||
:order="'random'"
|
:order="'random'"
|
||||||
:preload="'auto'"
|
:preload="'auto'"
|
||||||
:volume="0.7"
|
:volume="0.7"
|
||||||
:mutex="true"
|
:mutex="true"
|
||||||
:lrcType="0"
|
:lrcType="0"
|
||||||
:listFolded="false"
|
:listFolded="false"
|
||||||
:listMaxHeight="'250px'"
|
:listMaxHeight="'250px'"
|
||||||
theme="#b7daff"
|
theme="#b7daff"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, onMounted } from 'vue'
|
import { ref, onMounted } from 'vue'
|
||||||
import Vue3Aplayer from 'vue3-aplayer'
|
import Vue3Aplayer from 'vue3-aplayer'
|
||||||
|
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const isOpen = ref(false)
|
const isOpen = ref(false)
|
||||||
|
|
||||||
// 音乐列表配置 - 您可以根据需要修改这里的音乐
|
// 音乐列表配置 - 您可以根据需要修改这里的音乐
|
||||||
const audioList = ref([
|
const audioList = ref([
|
||||||
{
|
{
|
||||||
name: '夜的钢琴曲',
|
name: '夜的钢琴曲',
|
||||||
artist: '石进',
|
artist: '石进',
|
||||||
url: 'https://music.163.com/song/media/outer/url?id=27867140.mp3',
|
url: 'https://music.163.com/song/media/outer/url?id=27867140.mp3',
|
||||||
cover: 'https://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg',
|
cover: 'https://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg',
|
||||||
lrc: ''
|
lrc: ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'River Flows In You',
|
name: 'River Flows In You',
|
||||||
artist: 'Yiruma',
|
artist: 'Yiruma',
|
||||||
url: 'https://music.163.com/song/media/outer/url?id=2133562.mp3',
|
url: 'https://music.163.com/song/media/outer/url?id=2133562.mp3',
|
||||||
cover: 'https://p2.music.126.net/w3av4SHuMAgbBF2KKByaVw==/19217832579785884.jpg',
|
cover: 'https://p2.music.126.net/w3av4SHuMAgbBF2KKByaVw==/19217832579785884.jpg',
|
||||||
lrc: ''
|
lrc: ''
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Kiss The Rain',
|
name: 'Kiss The Rain',
|
||||||
artist: 'Yiruma',
|
artist: 'Yiruma',
|
||||||
url: 'https://music.163.com/song/media/outer/url?id=2618520.mp3',
|
url: 'https://music.163.com/song/media/outer/url?id=2618520.mp3',
|
||||||
cover: 'https://p1.music.126.net/VjN74c1hoYgPCEZ9DngeQw==/109951163240682406.jpg',
|
cover: 'https://p1.music.126.net/VjN74c1hoYgPCEZ9DngeQw==/109951163240682406.jpg',
|
||||||
lrc: ''
|
lrc: ''
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
const togglePlayer = () => {
|
const togglePlayer = () => {
|
||||||
isOpen.value = !isOpen.value
|
isOpen.value = !isOpen.value
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
// 页面加载完成后显示播放器
|
// 页面加载完成后显示播放器
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
show.value = true
|
show.value = true
|
||||||
}, 500)
|
}, 500)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.music-player-wrapper {
|
.music-player-wrapper {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 20px;
|
bottom: 20px;
|
||||||
right: 20px;
|
right: 20px;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.music-control {
|
.music-control {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-btn {
|
.toggle-btn {
|
||||||
width: 50px;
|
width: 50px;
|
||||||
height: 50px;
|
height: 50px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||||
border: none;
|
border: none;
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
|
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-btn:hover {
|
.toggle-btn:hover {
|
||||||
transform: scale(1.1);
|
transform: scale(1.1);
|
||||||
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6);
|
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
.music-player-container {
|
.music-player-container {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 60px;
|
bottom: 60px;
|
||||||
right: 0;
|
right: 0;
|
||||||
width: 350px;
|
width: 350px;
|
||||||
max-width: 90vw;
|
max-width: 90vw;
|
||||||
background: rgba(255, 255, 255, 0.95);
|
background: rgba(255, 255, 255, 0.95);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
border: 1px solid rgba(255, 255, 255, 0.3);
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 深色模式适配 */
|
/* 深色模式适配 */
|
||||||
.dark .music-player-container {
|
.dark .music-player-container {
|
||||||
background: rgba(30, 30, 30, 0.95);
|
background: rgba(30, 30, 30, 0.95);
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 过渡动画 */
|
/* 过渡动画 */
|
||||||
.slide-enter-active,
|
.slide-enter-active,
|
||||||
.slide-leave-active {
|
.slide-leave-active {
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slide-enter-from,
|
.slide-enter-from,
|
||||||
.slide-leave-to {
|
.slide-leave-to {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transform: translateY(20px);
|
transform: translateY(20px);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 移动端适配 */
|
/* 移动端适配 */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.music-player-wrapper {
|
.music-player-wrapper {
|
||||||
bottom: 10px;
|
bottom: 10px;
|
||||||
right: 10px;
|
right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.music-player-container {
|
.music-player-container {
|
||||||
width: 300px;
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-btn {
|
.toggle-btn {
|
||||||
width: 45px;
|
width: 45px;
|
||||||
height: 45px;
|
height: 45px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -62,4 +62,48 @@
|
|||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
font-size: 2.2rem !important;
|
font-size: 2.2rem !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 美化文章底部的 TIP 提示块和标题图标 */
|
||||||
|
.vp-doc .custom-block.tip {
|
||||||
|
border: 1px solid rgba(25, 118, 210, 0.16);
|
||||||
|
background:
|
||||||
|
linear-gradient(135deg, rgba(25, 118, 210, 0.08), rgba(255, 255, 255, 0.92));
|
||||||
|
border-radius: 16px;
|
||||||
|
box-shadow: 0 10px 24px rgba(25, 118, 210, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .vp-doc .custom-block.tip {
|
||||||
|
background:
|
||||||
|
linear-gradient(135deg, rgba(77, 171, 247, 0.12), rgba(17, 24, 39, 0.9));
|
||||||
|
border-color: rgba(77, 171, 247, 0.22);
|
||||||
|
box-shadow: 0 12px 28px rgba(0, 0, 0, 0.22);
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block.tip .custom-block-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
color: #1565c0;
|
||||||
|
font-weight: 700;
|
||||||
|
letter-spacing: 0.02em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark .vp-doc .custom-block.tip .custom-block-title {
|
||||||
|
color: #74c0fc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vp-doc .custom-block.tip .custom-block-title::before {
|
||||||
|
content: "i";
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 22px;
|
||||||
|
height: 22px;
|
||||||
|
border-radius: 999px;
|
||||||
|
background: linear-gradient(135deg, #1e88e5, #42a5f5);
|
||||||
|
color: #fff;
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 700;
|
||||||
|
box-shadow: 0 6px 14px rgba(30, 136, 229, 0.28);
|
||||||
|
}
|
||||||
|
|||||||
BIN
docs/public/12/1.png
Normal file
|
After Width: | Height: | Size: 352 KiB |
BIN
docs/public/12/2.jpg
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
docs/public/12/3.gif
Normal file
|
After Width: | Height: | Size: 660 KiB |
BIN
docs/public/12/4.jpg
Normal file
|
After Width: | Height: | Size: 521 KiB |
BIN
docs/public/12/5.jpg
Normal file
|
After Width: | Height: | Size: 516 KiB |
BIN
docs/public/12/6.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
docs/public/12/7.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
docs/public/12/8.jpg
Normal file
|
After Width: | Height: | Size: 114 KiB |
BIN
docs/public/12/9.jpg
Normal file
|
After Width: | Height: | Size: 92 KiB |
BIN
docs/public/Noah.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
@@ -14,6 +14,7 @@ cover: url # 封面图片路径,相对于public目录
|
|||||||
sticky: 0 # 精选文章设置:值越大在首页展示越靠前,0表示不精选
|
sticky: 0 # 精选文章设置:值越大在首页展示越靠前,0表示不精选
|
||||||
hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用)
|
hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用)
|
||||||
recommend: true
|
recommend: true
|
||||||
|
publish: false
|
||||||
---
|
---
|
||||||
|
|
||||||
# 今天二战钓鱼,还是空军
|
# 今天二战钓鱼,还是空军
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ cover: url # 封面图片路径,相对于public目录
|
|||||||
sticky: 0 # 精选文章设置:值越大在首页展示越靠前,0表示不精选
|
sticky: 0 # 精选文章设置:值越大在首页展示越靠前,0表示不精选
|
||||||
hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用)
|
hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用)
|
||||||
recommend: true
|
recommend: true
|
||||||
|
publish: false
|
||||||
---
|
---
|
||||||
|
|
||||||
# 今天第一次钓鱼,空军
|
# 今天第一次钓鱼,空军
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ hiddenCover: false
|
|||||||
sticky: 0
|
sticky: 0
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
publish: true
|
publish: false
|
||||||
---
|
---
|
||||||
|
|
||||||
# 他可能真的很忙吧
|
# 他可能真的很忙吧
|
||||||
|
|||||||
@@ -1,85 +1,85 @@
|
|||||||
---
|
---
|
||||||
title: 从酒馆到小手机:AI角色扮演的次世代进化 # 文章标题,支持副标题格式(用 - 分隔)
|
title: 从酒馆到小手机:AI角色扮演的次世代进化 # 文章标题,支持副标题格式(用 - 分隔)
|
||||||
top: 0 # 置顶级别:1-3,数字越大越靠前,0表示不置顶
|
top: 0 # 置顶级别:1-3,数字越大越靠前,0表示不置顶
|
||||||
date: 2025-12-12 18:00:00 # 发布日期和时间,格式:YYYY-MM-DD HH:MM:SS
|
date: 2025-12-12 18:00:00 # 发布日期和时间,格式:YYYY-MM-DD HH:MM:SS
|
||||||
descriptionHTML: '
|
descriptionHTML: '
|
||||||
<span style="color:var(--description-font-color);">剧情聊天2.0时代</span>
|
<span style="color:var(--description-font-color);">剧情聊天2.0时代</span>
|
||||||
'
|
'
|
||||||
tags: # 文章标签列表,用于分类和搜索
|
tags: # 文章标签列表,用于分类和搜索
|
||||||
- AI
|
- AI
|
||||||
- 酒馆
|
- 酒馆
|
||||||
- 小手机
|
- 小手机
|
||||||
sidebar: true # 是否显示侧边栏:true显示,false隐藏
|
sidebar: true # 是否显示侧边栏:true显示,false隐藏
|
||||||
readingTime: true # 是否显示阅读时间:true显示,false隐藏
|
readingTime: true # 是否显示阅读时间:true显示,false隐藏
|
||||||
hiddenCover: true # 是否隐藏封面图:true隐藏,false显示
|
hiddenCover: true # 是否隐藏封面图:true隐藏,false显示
|
||||||
cover: url # 封面图片路径,相对于public目录
|
cover: url # 封面图片路径,相对于public目录
|
||||||
sticky: 85 # 精选文章设置:值越大在首页展示越靠前,0表示不精选
|
sticky: 85 # 精选文章设置:值越大在首页展示越靠前,0表示不精选
|
||||||
hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用)
|
hidden: false # 是否隐藏文章:true隐藏(模板用),false显示(正式文章用)
|
||||||
recommend: true
|
recommend: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# 从酒馆到小手机:AI角色扮演的次世代进化
|
# 从酒馆到小手机:AI角色扮演的次世代进化
|
||||||
|
|
||||||
####
|
####
|
||||||
##### 写在前面:
|
##### 写在前面:
|
||||||
####
|
####
|
||||||
|
|
||||||
<span style="font-size:0.9em; color:#1976d2;">
|
<span style="font-size:0.9em; color:#1976d2;">
|
||||||
  这是《从角色扮演到剧情聊天,翻开AI的另一面》的续篇。几个月过去,AI角色扮演的世界又发生了翻天覆地的变化。如果说酒馆是1.0时代,那么现在我们已经进入了2.0的"小手机"时代。
|
  这是《从角色扮演到剧情聊天,翻开AI的另一面》的续篇。几个月过去,AI角色扮演的世界又发生了翻天覆地的变化。如果说酒馆是1.0时代,那么现在我们已经进入了2.0的"小手机"时代。
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
### [上一篇:《从角色扮演到剧情聊天,翻开AI的另一面》](ai-role-play.md)
|
### [上一篇:《从角色扮演到剧情聊天,翻开AI的另一面》](ai-role-play.md)
|
||||||
|
|
||||||
#### 没想到还能续上
|
#### 没想到还能续上
|
||||||
|
|
||||||
## 壹 · 进化
|
## 壹 · 进化
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  最近出现了一个神秘的名字——<span style="color: #43a047;">"小手机"</span>。起初我以为是某种新的AI硬件设备,后来才知道,这相当于酒馆的一个升级版,他将AI角色扮演推向全新的维度。
|
  最近出现了一个神秘的名字——<span style="color: #43a047;">"小手机"</span>。起初我以为是某种新的AI硬件设备,后来才知道,这相当于酒馆的一个升级版,他将AI角色扮演推向全新的维度。
|
||||||
|
|
||||||
  技术栈还是网页,只是高度模仿手机。
|
  技术栈还是网页,只是高度模仿手机。
|
||||||
|
|
||||||
#### 放几张图,你没看错,这是小手机的效果
|
#### 放几张图,你没看错,这是小手机的效果
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
  当然现在还不能做到很理想的状态,但是我看现在<span style="color: #43a047;">"小手机"</span>的微信界面也和平常的微信没什么区别了。AI流式传输的时候对方显示<span style="color: #1976d2;">"对方正在输入..."</span>。后面输出就是消息气泡,而且可以做到和正常人聊天一样的效果,发比如一些表情,收发红包之类的。
|
  当然现在还不能做到很理想的状态,但是我看现在<span style="color: #43a047;">"小手机"</span>的微信界面也和平常的微信没什么区别了。AI流式传输的时候对方显示<span style="color: #1976d2;">"对方正在输入..."</span>。后面输出就是消息气泡,而且可以做到和正常人聊天一样的效果,发比如一些表情,收发红包之类的。
|
||||||
|
|
||||||
  与酒馆长文不同,<span style="color: #43a047;">"小手机"</span>完美复刻了现代社交软件的所有细节:消息的时间戳、已读未读状态、撤回消息的提示、甚至是"对方正在输入"的动画。
|
  与酒馆长文不同,<span style="color: #43a047;">"小手机"</span>完美复刻了现代社交软件的所有细节:消息的时间戳、已读未读状态、撤回消息的提示、甚至是"对方正在输入"的动画。
|
||||||
|
|
||||||
  当然最佳效果是AI还可以通过<span style="color: #43a047;">工具调用</span>来回复表情包,做一些人类特有的操作。其实我认为完全可以做到了,这么大半年以来,大模型的工具调用能力只能说是越来越强了。甚至是接入语音,模仿微信的语音和通话功能。
|
  当然最佳效果是AI还可以通过<span style="color: #43a047;">工具调用</span>来回复表情包,做一些人类特有的操作。其实我认为完全可以做到了,这么大半年以来,大模型的工具调用能力只能说是越来越强了。甚至是接入语音,模仿微信的语音和通话功能。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 贰 · 通话 & 语音
|
## 贰 · 通话 & 语音
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  一个玩酒馆的朋友给我提起过这个功能,就是<span style="color: #43a047;">声音复刻和TTS嵌入</span>。比如复刻一个用户期望的声音,然后嵌入在酒馆内朗读特定的对话内容。如果换到小手机里面,就是一段语音消息,甚至是通话功能。
|
  一个玩酒馆的朋友给我提起过这个功能,就是<span style="color: #43a047;">声音复刻和TTS嵌入</span>。比如复刻一个用户期望的声音,然后嵌入在酒馆内朗读特定的对话内容。如果换到小手机里面,就是一段语音消息,甚至是通话功能。
|
||||||
|
|
||||||
  不过目前国内做复刻的也不多,试了一下豆包还不错。但是很好奇,比如谷歌、微软、OpenAI都没有在做复刻相关的开发。是需求度还不够吗?不过也有一些小厂家在做,目前来看需求不大。但从<span style="color: #1976d2;">单身经济</span>的眼光出发,定制化AI语音的未来还是一片光明。
|
  不过目前国内做复刻的也不多,试了一下豆包还不错。但是很好奇,比如谷歌、微软、OpenAI都没有在做复刻相关的开发。是需求度还不够吗?不过也有一些小厂家在做,目前来看需求不大。但从<span style="color: #1976d2;">单身经济</span>的眼光出发,定制化AI语音的未来还是一片光明。
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 叁 · 模型
|
## 叁 · 模型
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  其实聊了两次AI角色扮演的文章,我一直在说AI衍生的工具,没有好好讲最底层的东西——<span style="color: #d32f2f;">模型</span>。为了让这么多衍生的工具繁荣,模型能力绝对得强。我认为当前评估模型的标准不应该再是"xxx跑分"高于xxx模型xx倍,当然不是讽刺国内的模型厂商,只是再强的模型文本生成,他还是只能读取和生成文本。
|
  其实聊了两次AI角色扮演的文章,我一直在说AI衍生的工具,没有好好讲最底层的东西——<span style="color: #d32f2f;">模型</span>。为了让这么多衍生的工具繁荣,模型能力绝对得强。我认为当前评估模型的标准不应该再是"xxx跑分"高于xxx模型xx倍,当然不是讽刺国内的模型厂商,只是再强的模型文本生成,他还是只能读取和生成文本。
|
||||||
|
|
||||||
  我认为一个模型的基础标准就得是<span style="color: #1976d2;">多模态</span>,包括视频,图片,文件,语音的多种输入,和多种输出,然后是<span style="color: #1976d2;">工具调用</span>,因为<span style="color: #1976d2;">MCP</span>空前发达,我接一堆MCP进去,你模型不用不也白搭。
|
  我认为一个模型的基础标准就得是<span style="color: #1976d2;">多模态</span>,包括视频,图片,文件,语音的多种输入,和多种输出,然后是<span style="color: #1976d2;">工具调用</span>,因为<span style="color: #1976d2;">MCP</span>空前发达,我接一堆MCP进去,你模型不用不也白搭。
|
||||||
|
|
||||||
|
|
||||||
  期待国产模型能慢慢支持多模态和很好的工具调用吧,这样我也不会为了Gemini 3 Pro东奔西走。
|
  期待国产模型能慢慢支持多模态和很好的工具调用吧,这样我也不会为了Gemini 3 Pro东奔西走。
|
||||||
|
|
||||||
.png)
|
.png)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
148
docs/sop/maindocs/china-marriage-generational-mismatch.md
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
---
|
||||||
|
title: 男的不贪财,女的不好色
|
||||||
|
top: 0
|
||||||
|
date: 2026-04-04 21:30:00
|
||||||
|
descriptionHTML: '
|
||||||
|
<span style="color:var(--description-font-color);">当性别失衡、教育分化与高婚育成本叠加,婚姻开始出现明显的代际错位</span>
|
||||||
|
'
|
||||||
|
tags:
|
||||||
|
- 社会观察
|
||||||
|
- 随笔
|
||||||
|
sidebar: true
|
||||||
|
readingTime: true
|
||||||
|
hiddenCover: true
|
||||||
|
sticky: 0
|
||||||
|
hidden: false
|
||||||
|
recommend: true
|
||||||
|
publish: false
|
||||||
|
---
|
||||||
|
|
||||||
|
# 男的不贪财,女的不好色
|
||||||
|
|
||||||
|
####
|
||||||
|
##### 写在前面:
|
||||||
|
####
|
||||||
|
|
||||||
|
<span style="font-size:0.9em; color:#1976d2;">
|
||||||
|
  说出来你可能不信,
|
||||||
|
</span>
|
||||||
|
|
||||||
|
  如果把今天中国婚姻市场理解成一个单纯的“年轻人不想结婚”故事,可能会漏掉更关键的结构性背景。真正的问题是,婚姻市场已经不只是“结不结”的问题,而是正在出现明显的**代际错配**: 出生端长期偏高的性别比,把男多女少的压力一路传导到了适婚年龄;与此同时,女性受教育程度提升、经济独立增强、晚婚观念普及,又改变了原有的配对逻辑。于是,00后、90后、80后看到的婚恋世界,并不是同一个市场。
|
||||||
|
|
||||||
|
  一端是00后女性开始进入登记和婚配阶段,同龄男性却从出生时就明显“超编”;另一端是90后女性的择偶标准越来越接近同质匹配,传统的“男高女低”教育婚配在松动;再往上看,80后和部分90后男性已经承受了更直接的婚姻挤压,尤其在农村、低学历和弱资源地区,这种压力更集中、更难靠个人努力化解。
|
||||||
|
|
||||||
|
  所以,这篇文章不想讨论“谁挑剔”“谁剩下”这类情绪化话题,而是想回答三个更现实的问题:**第一,婚姻市场为什么会出现跨代配对?第二,80/90后男性的单身压力到底从哪里来?第三,这种代际错配会带来哪些长期后果?**
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 壹
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  国家统计局早已给出过一个非常直白的判断:根据七普口径,**20-40岁的适婚年龄男性比女性多了1752万人,性别比为108.9**[1]。这不是抽象的“男女比例失衡”,而是婚恋市场里最硬的底层约束。只要这个人数差存在,同龄匹配就不可能让所有人都找到位置,必然会有人向上跨代、向下延后,或者最终被挤出婚姻市场。
|
||||||
|
|
||||||
|
  更需要注意的是,这个压力不是突然出现的。国家统计局关于人口发展的专题报告提到,“十五”时期中国**出生人口性别比为118.3**,明显高于正常区间[2]。而在《2020年中国儿童人口状况》报告中,儿童人口性别比从1982年的106.2一路升至2015年的118.2,到2020年虽已回落到**113.8**,但失衡并没有消失[3]。换句话说,00后进入婚恋市场时,面对的并不是一个已经修复好的环境,而是过去多年性别失衡的滞后结果。
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
xychart-beta
|
||||||
|
title "从出生端到婚配端:性别失衡的传导"
|
||||||
|
x-axis ["十五时期出生","2020年儿童人口","20-40岁适婚年龄"]
|
||||||
|
y-axis "每100名女性对应男性" 100 --> 120
|
||||||
|
bar [118.3, 113.8, 108.9]
|
||||||
|
```
|
||||||
|
|
||||||
|
  这张图里放在一起的并不是完全同口径数据,但它足够说明一个事实:**失衡并没有在出生之后自动消失,而是在年龄推进中以另一种形式留了下来。** 从“多生了多少男孩”,变成“婚配年龄多了多少男性”,再变成婚姻市场上的真实挤压。
|
||||||
|
|
||||||
|
  也正因为如此,今天很多人看到的现象,比如00后女生更容易和年长几岁甚至十来岁的男性配对,并不只是个人偏好变化,更是人口结构把市场硬生生挤出来的结果。每一个年龄层的配对选择,都被前一阶段的人口结构悄悄设了边界。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 贰
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  说“00后女生上嫁80/90后”,如果只当成某种网络标签,会显得很夸张;但如果放进人口结构里,这件事其实并不难理解。00后女性开始进入婚姻登记时,同龄男性人数本来就更充裕,而年纪更大的90后、部分80后男性则处在“婚姻库存”尚未完全消化的阶段。于是,年轻女性向上匹配,和年龄更大的男性形成婚配,并不是偶发,而是结构挤压下的自然结果。
|
||||||
|
|
||||||
|
  这里有一个容易被忽视的细节:公开官方统计并没有持续发布“按出生年代、按性别拆开的全国结婚登记明细”,所以网络上流传的“00后男生登记很少、女生明显更多”之类说法,更多只能被看作阶段性观察,而不是稳定的全国硬口径。**但即使不依赖这些网传数字,仅凭适婚年龄男性多出1752万人这一条,也足以解释为什么00后女性更容易发生跨龄匹配。**
|
||||||
|
|
||||||
|
  和00后相比,90后婚配模式的变化并不主要体现在“年龄差突然变大”,而更体现在**匹配逻辑本身变了**。卿石松基于CFPS 2010-2020年数据整理出的12523对夫妻样本显示,在最年轻的出生队列中,传统“梯度婚”持续下降,而**女性向下婚比例升至25.8%,已高于梯度婚的21.7%**[4]。这意味着,至少在教育维度上,年轻一代女性已经不再完全遵循“必须找学历更高的男性”这套旧规则。
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
xychart-beta
|
||||||
|
title "最年轻队列的教育匹配变化"
|
||||||
|
x-axis ["传统梯度婚","女性向下婚"]
|
||||||
|
y-axis "占比(%)" 0 --> 30
|
||||||
|
bar [21.7, 25.8]
|
||||||
|
```
|
||||||
|
|
||||||
|
  这件事非常重要。它说明90后婚姻并没有简单走向“人人都嫁更年长、更强势的男性”,相反,很多90后女性更接受教育相近、生活方式相近,甚至学历略低于自己的伴侣。**年龄差未必更大,但教育和价值观的同质匹配变得更重要了。**
|
||||||
|
|
||||||
|
  从这个角度看,今天的婚姻市场其实已经分成了两层:一层是更接近传统逻辑、资源导向更强、城乡差异更明显的跨龄婚配;另一层是更强调教育、城市生活方式和情感兼容性的同代婚配。00后和90后之所以呈现不同婚恋景观,不是因为一代人突然“变了”,而是她们进入市场时,所面对的供需结构和社会规则本来就不同。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 叁
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  很多关于“剩男”的讨论,喜欢把问题缩成个人能力问题,比如收入不够、性格不好、不够会说话。但从人口学角度看,80/90后男性的单身压力首先是**结构性挤压**。总量上,适婚年龄男性多于女性;匹配上,部分年轻女性向上跨龄,进一步吸收了中高年龄段男性需求;而在教育和城市资源维度上,女性又越来越偏向同质匹配。三股力量叠加后,被挤压得最明显的,往往就是资源偏弱的一批男性。
|
||||||
|
|
||||||
|
  这种分化在城乡之间尤其明显。城市里,高学历女性虽然也会晚婚,但她们通常并不缺少选择,只是更晚进入婚姻;真正更容易在婚姻市场长期滞留的,常常是农村、县域、低学历、经济条件一般的男性。国家统计局关于儿童人口和出生性别比的报告也提醒过,部分地区的性别失衡更重,由此带来的就是更典型的“婚姻挤压”[3]。
|
||||||
|
|
||||||
|
  再加上现实成本的上升,这种挤压会被继续放大。房价、彩礼、婚礼、育儿、教育支出,都在提高结婚门槛。女性初婚年龄推迟,意味着男性如果要竞争同一批婚配资源,往往需要更晚完成经济准备;而当准备周期变长,年纪也随之上移,又会进一步推动跨龄婚配和择偶焦虑。于是很多80/90后男性不是“不想结”,而是越往后拖,越发现自己进入了一个更难的赛道。
|
||||||
|
|
||||||
|
  所以,对这一代男性来说,单身并不一定是个人失败。更准确地说,它是人口结构、地域差异、教育分层与高婚育成本叠加后的结果。**有些人输的不是临门一脚,而是一开始就站在了更拥挤的位置上。**
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 肆
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  婚姻挤压最直接的后果,是婚姻稳定性和家庭关系都更容易承压。2025年2季度民政统计数据显示,截至上半年全国**结婚登记353.9万对、离婚登记133.1万对**;到2025年4季度累计,**结婚登记676.3万对、离婚登记274.3万对**[5][6]。与2024年全国**结婚610.6万对、离婚351.3万对**相比,2025年结婚有回升,但整体仍处低位区间,婚姻并没有回到过去那种高强度扩张状态[7]。
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
xychart-beta
|
||||||
|
title "2024-2025年全国婚姻登记变化"
|
||||||
|
x-axis ["2024","2025"]
|
||||||
|
y-axis "万对" 0 --> 700
|
||||||
|
bar "结婚登记" [610.6, 676.3]
|
||||||
|
line "离婚登记" [351.3, 274.3]
|
||||||
|
```
|
||||||
|
|
||||||
|
  这意味着什么?意味着婚姻对很多人来说,已经不再是默认选项,而是一场更谨慎、更昂贵、也更容易后悔的决策。对于被婚姻市场持续挤压的群体而言,彩礼竞争、代际赡养、家庭关系紧张、长期单身后的健康与养老问题,都会在未来更集中地显现出来。
|
||||||
|
|
||||||
|
  另一个经常被忽视的问题,是**高龄父亲的生育健康风险**。如果00后女性和更年长的80/90后男性配对占比上升,那么“父龄上移”就是一个不得不面对的后果。既有遗传学研究显示,父亲年龄越大,子代新发突变数量通常越多。Nature 的经典研究指出,父龄上升与后代新发突变数增加密切相关[8];后续基于多孩家庭的研究也观察到,父龄每增加1岁,后代新发突变数大致会增加**1-2个**[9]。这并不等于“高龄父亲一定带来疾病”,但它意味着风险背景确实在上升。
|
||||||
|
|
||||||
|
  在生殖医学层面,越来越多研究也发现男性年龄和精子DNA碎片率、表观遗传改变之间存在关联。关于先进父龄与精子DNA碎片的系统综述指出,男性衰老可能与精子DNA完整性下降相关[10];2024年的研究则进一步提示,先进父龄在胎盘与既往精子研究中都能观察到与神经发育相关位点的DNA甲基化改变[11]。再结合精神病学和自闭症研究中的长期观察,合理而克制的说法应该是:**父龄上移并非不可生育,但确实值得更早做生育规划、精液质量评估和遗传咨询。**
|
||||||
|
|
||||||
|
  也就是说,代际错配不会只停留在“谁和谁结婚”这个层面,它会一路延伸到家庭稳定、养育压力、健康风险和社会保障负担。婚姻看起来像私事,但当它背后站着1752万人的结构性缺口时,它就已经不是纯粹的私事了。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 伍
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  如果承认今天的婚姻问题有很大一部分是结构性的,那么解决思路也不能停留在责怪个体。对年轻人来说,最现实的建议不是“赶紧结婚”,而是尽量把婚恋和生育决策前移到**理性规划**层面: 能在身体状态、经济条件、职业节奏更平衡时完成婚育,当然更好;如果确实要延后,也应该把生育健康评估纳入计划,而不是只把年龄当成一个抽象数字。
|
||||||
|
|
||||||
|
  对父母一代而言,也许更需要放下那种“只要结了就行”的焦虑。结构性错配意味着,不是每个年龄段的人都还能按照上一代的节奏完成婚育。催婚有时并不能解决问题,只会把个体推入更仓促、质量更低的关系里。真正有帮助的,是在住房、育儿支持、双方家庭边界、地区流动上提供更具体的支持。
|
||||||
|
|
||||||
|
  对政策层面来说,问题同样不能只理解成“鼓励结婚生孩子”这么简单。出生人口性别比的长期纠偏、对女性教育与就业的平等保护、对高彩礼和过度婚嫁成本的治理、对农村和弱资源地区婚姻挤压的持续关注,以及更普惠的生育和托育支持,都是同一张答卷上的题目。只抓其中一项,效果都有限。
|
||||||
|
|
||||||
|
  婚姻从来不只是两个人的浪漫选择,它也是人口结构、性别观念、教育机会和社会成本的综合镜像。今天我们看到的00后跨龄婚、90后同龄匹配和80/90后男性单身潮,归根到底都不是某一代人的道德问题,而是一个时代在人口与社会转型中的真实回声。
|
||||||
|
|
||||||
|
  与其互相嘲讽,不如承认现实:**这不是谁“输给了爱情”,而是婚姻市场本身变了。**
|
||||||
|
|
||||||
|
> [!TIP] 参考文献
|
||||||
|
> [1] 国家统计局. 国家统计局新闻发言人就2021年4月份国民经济运行情况答记者问[EB/OL]. 2021-05-17. https://www.stats.gov.cn/sj/sjjd/202302/t20230202_1896489.html.
|
||||||
|
> [2] 国家统计局. “十五”时期我国人口保持低速增长[EB/OL]. https://www.stats.gov.cn/zt_18555/ztfx/15cj/202303/t20230301_1920492.html.
|
||||||
|
> [3] 国家统计局. 2020年中国儿童人口状况[EB/OL]. https://www.stats.gov.cn/zs/tjwh/tjkw/tjzl/202304/P020230419425666818737.pdf.
|
||||||
|
> [4] 卿石松. 女性教育提升与生育行为变迁: 基于夫妻匹配视角的研究[J]. 社会学研究, 2024(2): 179-202.
|
||||||
|
> [5] 中华人民共和国民政部. 2025年2季度民政统计数据[EB/OL]. https://www.mca.gov.cn/mzsj/xzqh/2025/202502tjsj.htm.
|
||||||
|
> [6] 中华人民共和国民政部. 2025年4季度民政统计数据[EB/OL]. https://www.mca.gov.cn/mzsj/xzqh/2025/202504tjsj.htm.
|
||||||
|
> [7] 中华人民共和国民政部. 2024年民政事业发展统计公报[EB/OL]. 2025-07-30. https://www.mca.gov.cn/n1288/n1294/n1554/c1662004999980006190/content.html.
|
||||||
|
> [8] Kong A, Frigge M L, Masson G, et al. Rate of de novo mutations and the importance of father's age to disease risk[J]. Nature, 2012, 488: 471-475. https://www.nature.com/articles/nature11396.
|
||||||
|
> [9] Jonsson H, Sulem P, Kehr B, et al. Parental influence on human germline de novo mutations in 1,548 trios[J]. Nature, 2017, 549: 519-522. https://www.nature.com/articles/nature24018.
|
||||||
|
> [10] Johnson S L, Dunleavy J, Gemmell N J, et al. Advanced Paternal Age and Sperm DNA Fragmentation: A Systematic Review[J]. World Journal of Men's Health, 2021, 39(1): 104-115. https://pubmed.ncbi.nlm.nih.gov/33987998/.
|
||||||
|
> [11] Dube-Linteau A, et al. Advanced Paternal Age Impacts Common Loci in the Sperm and Placenta DNA Methylomes[J/OL]. Clinical Epigenetics, 2024. https://pubmed.ncbi.nlm.nih.gov/41159265/
|
||||||
@@ -1,72 +1,72 @@
|
|||||||
---
|
---
|
||||||
title: 阿里云 ESA Pages 边缘开发大赛
|
title: 阿里云 ESA Pages 边缘开发大赛
|
||||||
top: 0
|
top: 0
|
||||||
date: 2025-12-19 13:25:00
|
date: 2025-12-19 13:25:00
|
||||||
descriptionHTML: '<span style="color:var(--description-font-color);">部署网站到 Pages,分 10 万奖金!</span>'
|
descriptionHTML: '<span style="color:var(--description-font-color);">部署网站到 Pages,分 10 万奖金!</span>'
|
||||||
tags:
|
tags:
|
||||||
- 阿里云
|
- 阿里云
|
||||||
- ESA
|
- ESA
|
||||||
sidebar: true
|
sidebar: true
|
||||||
readingTime: true
|
readingTime: true
|
||||||
hiddenCover: true
|
hiddenCover: true
|
||||||
cover: url
|
cover: url
|
||||||
sticky: 0
|
sticky: 0
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# 阿里云 ESA Pages 边缘开发大赛
|
# 阿里云 ESA Pages 边缘开发大赛
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
::: details 什么是 ESA Pages
|
::: details 什么是 ESA Pages
|
||||||
|
|
||||||
<span style="font-size:0.9em;">阿里云 ESA Pages 是一个边缘即服务(Edge as a Service)平台,提供一站式的前端部署解决方案。它允许开发者将静态网站或前端应用快速部署到阿里云的边缘节点上,享受低延迟、高可用的访问体验。</span>
|
<span style="font-size:0.9em;">阿里云 ESA Pages 是一个边缘即服务(Edge as a Service)平台,提供一站式的前端部署解决方案。它允许开发者将静态网站或前端应用快速部署到阿里云的边缘节点上,享受低延迟、高可用的访问体验。</span>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
阿里云正在举办 **ESA Pages 边缘开发大赛**,邀请广大开发者将网站部署到 Pages,共同瓜分 **10 万奖金**!无论你是前端大神还是技术爱好者,都有机会赢取丰厚大奖,单人最高可拿 **70000 元** 奖励!
|
阿里云正在举办 **ESA Pages 边缘开发大赛**,邀请广大开发者将网站部署到 Pages,共同瓜分 **10 万奖金**!无论你是前端大神还是技术爱好者,都有机会赢取丰厚大奖,单人最高可拿 **70000 元** 奖励!
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 赛事安排
|
## 赛事安排
|
||||||
|
|
||||||
- **报名与作品提交**:即日起 - 2026年01月20日
|
- **报名与作品提交**:即日起 - 2026年01月20日
|
||||||
- **截止报名与作品提交**:2026年01月20日
|
- **截止报名与作品提交**:2026年01月20日
|
||||||
- **人气作品统计截止**:2026年02月05日
|
- **人气作品统计截止**:2026年02月05日
|
||||||
- **获奖名单公布**:2026年02月10日
|
- **获奖名单公布**:2026年02月10日
|
||||||
|
|
||||||
## 奖项设置
|
## 奖项设置
|
||||||
|
|
||||||
本次大赛奖金丰厚,单人最高可拿 **70000 元** 奖励!
|
本次大赛奖金丰厚,单人最高可拿 **70000 元** 奖励!
|
||||||
|
|
||||||
### 一、积极参与奖
|
### 一、积极参与奖
|
||||||
**100份 | ¥50 天猫超市卡**
|
**100份 | ¥50 天猫超市卡**
|
||||||
限前100名提交有效作品的参赛者,先到先得!
|
限前100名提交有效作品的参赛者,先到先得!
|
||||||
|
|
||||||
### 二、打榜激励奖
|
### 二、打榜激励奖
|
||||||
**无限打榜:每人可投多份作品,每份作品最高拿奖3次!**
|
**无限打榜:每人可投多份作品,每份作品最高拿奖3次!**
|
||||||
|
|
||||||
设立 **创意卓越奖**、**应用价值奖**、**技术探索奖** 三大赛道:
|
设立 **创意卓越奖**、**应用价值奖**、**技术探索奖** 三大赛道:
|
||||||
- **金奖**:每个奖项各 **1人** | 每人:**¥3,000**
|
- **金奖**:每个奖项各 **1人** | 每人:**¥3,000**
|
||||||
- **银奖**:每个奖项各 **2人** | 每人:**¥2,000**
|
- **银奖**:每个奖项各 **2人** | 每人:**¥2,000**
|
||||||
- **铜奖**:每个奖项各 **3人** | 每人:**¥1,000**
|
- **铜奖**:每个奖项各 **3人** | 每人:**¥1,000**
|
||||||
- **入围奖**:每个奖项各 **260人** | 每人:**¥50 天猫超市卡**
|
- **入围奖**:每个奖项各 **260人** | 每人:**¥50 天猫超市卡**
|
||||||
|
|
||||||
### 三、人气作品奖
|
### 三、人气作品奖
|
||||||
- **前10名**:雷蛇键盘(约¥899)
|
- **前10名**:雷蛇键盘(约¥899)
|
||||||
- **前10名**:罗技鼠标(约¥599)
|
- **前10名**:罗技鼠标(约¥599)
|
||||||
- **前10名**:东芝硬盘(约¥519)
|
- **前10名**:东芝硬盘(约¥519)
|
||||||
|
|
||||||
### 四、邀请有奖
|
### 四、邀请有奖
|
||||||
进入赛事活动页生成个人专属链接,邀请好友参赛,冲榜赢天猫超市卡!
|
进入赛事活动页生成个人专属链接,邀请好友参赛,冲榜赢天猫超市卡!
|
||||||
|
|
||||||
## 参赛报名引导
|
## 参赛报名引导
|
||||||
|
|
||||||
1. 在阿里云官网天池大赛页面搜索「**ESA Pages**」或者「**边缘开发**」。
|
1. 在阿里云官网天池大赛页面搜索「**ESA Pages**」或者「**边缘开发**」。
|
||||||
2. 点击「**立即报名**」即可参与。
|
2. 点击「**立即报名**」即可参与。
|
||||||
3. 赛事交流沟通钉钉群:118400030886
|
3. 赛事交流沟通钉钉群:118400030886
|
||||||
|
|
||||||
快来参与吧,用你的代码赢取丰厚大奖!
|
快来参与吧,用你的代码赢取丰厚大奖!
|
||||||
|
|
||||||

|

|
||||||
@@ -1,37 +1,37 @@
|
|||||||
---
|
---
|
||||||
title: 阿里ESA比其他CDN好在哪
|
title: 阿里ESA比其他CDN好在哪
|
||||||
top: 0
|
top: 0
|
||||||
date: 2025-12-10 13:25:00
|
date: 2025-12-10 13:25:00
|
||||||
descriptionHTML: '<span style="color:var(--description-font-color);">来聊聊CDN</span>'
|
descriptionHTML: '<span style="color:var(--description-font-color);">来聊聊CDN</span>'
|
||||||
tags:
|
tags:
|
||||||
- 互联网
|
- 互联网
|
||||||
- 广告
|
- 广告
|
||||||
sidebar: true
|
sidebar: true
|
||||||
readingTime: true
|
readingTime: true
|
||||||
hiddenCover: true
|
hiddenCover: true
|
||||||
cover: url
|
cover: url
|
||||||
sticky: 0
|
sticky: 0
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
publish: false
|
publish: false
|
||||||
---
|
---
|
||||||
|
|
||||||
# 阿里ESA比其他CDN好在哪
|
# 阿里ESA比其他CDN好在哪
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
::: details 什么是CDN
|
::: details 什么是CDN
|
||||||
|
|
||||||
<span style="font-size:0.9em;">CDN(内容分发网络)就像是快递在各地的分拨中心。它把网站的内容缓存到离用户最近的服务器上,这样用户访问时就不用千里迢迢去源站取数据,而是直接从家门口的节点获取,速度更快,也更稳定。</span>
|
<span style="font-size:0.9em;">CDN(内容分发网络)就像是快递在各地的分拨中心。它把网站的内容缓存到离用户最近的服务器上,这样用户访问时就不用千里迢迢去源站取数据,而是直接从家门口的节点获取,速度更快,也更稳定。</span>
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
作为经常玩域名、网页、博客、web项目的人,真心觉得[阿里云 ESA](http://s.tb.cn/e6.0Fu67m) 在国内体验上吊打 Cloudflare。CF 虽强但国内访问常年“减速”,而 [ESA](http://s.tb.cn/e6.0Fu67m) 依托阿里国内节点,延迟低、丢包少,稳得一批。对于面向国内用户的业务,ESA 这种不用折腾优选 IP、开箱即用的丝滑感,才是真的省心。
|
作为经常玩域名、网页、博客、web项目的人,真心觉得[阿里云 ESA](http://s.tb.cn/e6.0Fu67m) 在国内体验上吊打 Cloudflare。CF 虽强但国内访问常年“减速”,而 [ESA](http://s.tb.cn/e6.0Fu67m) 依托阿里国内节点,延迟低、丢包少,稳得一批。对于面向国内用户的业务,ESA 这种不用折腾优选 IP、开箱即用的丝滑感,才是真的省心。
|
||||||
|
|
||||||
链接:http://s.tb.cn/e6.0Fu67m
|
链接:http://s.tb.cn/e6.0Fu67m
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
ESA效果:
|
ESA效果:
|
||||||
|
|
||||||

|

|
||||||
@@ -1,110 +1,110 @@
|
|||||||
---
|
---
|
||||||
title: 解读B站UP主《芳华》的解读
|
title: 解读B站UP主《芳华》的解读
|
||||||
top: 0
|
top: 0
|
||||||
date: 2025-12-06 13:25:00
|
date: 2025-12-06 13:25:00
|
||||||
descriptionHTML: '
|
descriptionHTML: '
|
||||||
<span style="color:var(--description-font-color);">“网左大本营”的成因与发展</span>
|
<span style="color:var(--description-font-color);">“网左大本营”的成因与发展</span>
|
||||||
'
|
'
|
||||||
tags:
|
tags:
|
||||||
- 随笔
|
- 随笔
|
||||||
- 芳华
|
- 芳华
|
||||||
- 互联网
|
- 互联网
|
||||||
sidebar: true
|
sidebar: true
|
||||||
readingTime: true
|
readingTime: true
|
||||||
hiddenCover: true
|
hiddenCover: true
|
||||||
cover: url
|
cover: url
|
||||||
sticky: 10
|
sticky: 10
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# 解读B站UP主《芳华》的解读
|
# 解读B站UP主《芳华》的解读
|
||||||
|
|
||||||
####
|
####
|
||||||
####
|
####
|
||||||
|
|
||||||
<span style="font-size:0.9em; color:#1976d2;">
|
<span style="font-size:0.9em; color:#1976d2;">
|
||||||
写在前面:《芳华》火了,峰哥:这是好事啊
|
写在前面:《芳华》火了,峰哥:这是好事啊
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
####
|
####
|
||||||
####
|
####
|
||||||
|
|
||||||
<audio controls style="width: 100%; max-width: 480px;">
|
<audio controls style="width: 100%; max-width: 480px;">
|
||||||
<source src="/8/弱水三千 (0.8xDJ苏熠鸣版)-苏熠鸣.mp3" type="audio/mpeg" />
|
<source src="/8/弱水三千 (0.8xDJ苏熠鸣版)-苏熠鸣.mp3" type="audio/mpeg" />
|
||||||
您的浏览器不支持音频播放。
|
您的浏览器不支持音频播放。
|
||||||
</audio>
|
</audio>
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
||||||
<span style="font-size:1.5em; color:#1976d2;">
|
<span style="font-size:1.5em; color:#1976d2;">
|
||||||
你看,又唱
|
你看,又唱
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 壹
|
## 壹
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  "聊会电影吧"这位UP的视频前两个星期刷到过。一方面是看到进度条太长我就没怎么看完,另一方面是《芳华》这个电影太久远了,我第一次看那会还中学吧,在我印象里面就是几个近代的故事串联而来,对于小小的我来说没看懂什么。
|
  "聊会电影吧"这位UP的视频前两个星期刷到过。一方面是看到进度条太长我就没怎么看完,另一方面是《芳华》这个电影太久远了,我第一次看那会还中学吧,在我印象里面就是几个近代的故事串联而来,对于小小的我来说没看懂什么。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
  现在又被翻出来解读了,其实对于UP而言只是解读了一部很棒的国产电影,但是问题就出在这部电影,因为这部电影是以文化大革命为背景的。但问题的问题也出在文化大革命,那个时代具体是怎么样的,我没有资格评说,因为没有经历过,甚至在过往的教育中也不能给我一个正确的答案。
|
  现在又被翻出来解读了,其实对于UP而言只是解读了一部很棒的国产电影,但是问题就出在这部电影,因为这部电影是以文化大革命为背景的。但问题的问题也出在文化大革命,那个时代具体是怎么样的,我没有资格评说,因为没有经历过,甚至在过往的教育中也不能给我一个正确的答案。
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 贰
|
## 贰
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
  但是纸是包不住火的,如今互联网如此发达,想了解一些课堂上学不到的东西也非常方便。至少大家的反应确实发生了很大的变化,举几个例子:
|
  但是纸是包不住火的,如今互联网如此发达,想了解一些课堂上学不到的东西也非常方便。至少大家的反应确实发生了很大的变化,举几个例子:
|
||||||
|
|
||||||
  一、外网公认B站是“网左大本营”,因为B站都是高知群体,Z时代青年,在目前社会竞争巨大的情况下“个人奋斗”和“人人平等”的叙事破产了,所以大家不再崇拜“教科书”,转而投向“毛教员”,开始美化那条未完成的道路。高喊“人民万岁”,崇拜“毛教员”的思想……
|
  一、外网公认B站是“网左大本营”,因为B站都是高知群体,Z时代青年,在目前社会竞争巨大的情况下“个人奋斗”和“人人平等”的叙事破产了,所以大家不再崇拜“教科书”,转而投向“毛教员”,开始美化那条未完成的道路。高喊“人民万岁”,崇拜“毛教员”的思想……
|
||||||
|
|
||||||
   正如这个解说视频的弹幕,有很多人真的期望“进行到底”。但是没有人能真正看到文革的真面目。所以本质上是中国年轻一代在面临巨大的社会竞争压力时,向左翼经典理论寻求解释和精神慰藉的结果。
|
   正如这个解说视频的弹幕,有很多人真的期望“进行到底”。但是没有人能真正看到文革的真面目。所以本质上是中国年轻一代在面临巨大的社会竞争压力时,向左翼经典理论寻求解释和精神慰藉的结果。
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
  二、抖音的评论区存在审查机制,但是半夜的人工审查并不及时,所以一些奇奇怪怪的表情包就会出现。大家的坐立难安是有目共睹深有体会的。
|
  二、抖音的评论区存在审查机制,但是半夜的人工审查并不及时,所以一些奇奇怪怪的表情包就会出现。大家的坐立难安是有目共睹深有体会的。
|
||||||
|
|
||||||
  三、考公考编报考人数变化曲线图
|
  三、考公考编报考人数变化曲线图
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 叁
|
## 叁
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<span style="font-size:1.2em; color:#d32f2f;">
|
<span style="font-size:1.2em; color:#d32f2f;">
|
||||||
  以上都是我写公众号写到一半的文章,但是视频突然的下架,我也不敢发这个文章了,所以就在博客聊聊
|
  以上都是我写公众号写到一半的文章,但是视频突然的下架,我也不敢发这个文章了,所以就在博客聊聊
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 肆
|
## 肆
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  首先就是为什么火,我觉得就是用B站作为“网左大本营”来解释最为恰当。因为用户群体都是初出社会的大学生,奋斗多年的学历、竞赛、各种“xx杯”比赛……失效了。主要的失效表现在于书本说的“人人平等”不存在了。越来越多的年轻人也认识到了阶级固化、阶级矛盾还是存在。更多的“为什么……”“凭什么……”被问了出来。
|
  首先就是为什么火,我觉得就是用B站作为“网左大本营”来解释最为恰当。因为用户群体都是初出社会的大学生,奋斗多年的学历、竞赛、各种“xx杯”比赛……失效了。主要的失效表现在于书本说的“人人平等”不存在了。越来越多的年轻人也认识到了阶级固化、阶级矛盾还是存在。更多的“为什么……”“凭什么……”被问了出来。
|
||||||
|
|
||||||
  他们在[户晨风](./hu-chen-feng.html)那看到了阶级差异:“凭什么大专不是大学?”“凭什么别人家的厕所比我家客厅还大?”“为什么有人敢歧视我们无产阶级!”…………………………
|
  他们在[户晨风](./hu-chen-feng.html)那看到了阶级差异:“凭什么大专不是大学?”“凭什么别人家的厕所比我家客厅还大?”“为什么有人敢歧视我们无产阶级!”…………………………
|
||||||
|
|
||||||
  社会压力比山大,大家都憋着一肚子气,发泄不出来,说白了就是现在年轻人不是渴望文革,只是想改变当今现状而已。现行游戏体质下,副本太难打,任务太难做,装备太难合成,所以大家希望直接来个新服当开服玩家,或者是赛季更新一下也好。
|
  社会压力比山大,大家都憋着一肚子气,发泄不出来,说白了就是现在年轻人不是渴望文革,只是想改变当今现状而已。现行游戏体质下,副本太难打,任务太难做,装备太难合成,所以大家希望直接来个新服当开服玩家,或者是赛季更新一下也好。
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 伍
|
## 伍
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  还是说的太多了,其实我没有经历过那段时期,我真的没资格评说,上面只是一些个人观点罢了。
|
  还是说的太多了,其实我没有经历过那段时期,我真的没资格评说,上面只是一些个人观点罢了。
|
||||||
|
|
||||||
  文革是整整十年,所以期间是非常复杂的,变化也是非常多的。是一个及其复杂的时代,只看教科书去全盘否定是不对的,只看初衷去美化未走完的路也是不对的。
|
  文革是整整十年,所以期间是非常复杂的,变化也是非常多的。是一个及其复杂的时代,只看教科书去全盘否定是不对的,只看初衷去美化未走完的路也是不对的。
|
||||||
|
|
||||||
  综上,还是就当吃个瓜了,因为你出生的国家也只是一个发展中国家。
|
  综上,还是就当吃个瓜了,因为你出生的国家也只是一个发展中国家。
|
||||||
@@ -1,110 +1,110 @@
|
|||||||
---
|
---
|
||||||
title: 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境
|
title: 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境
|
||||||
top: 2
|
top: 0
|
||||||
date: 2026-01-28 10:00:00
|
date: 2026-01-28 10:00:00
|
||||||
descriptionHTML: '
|
descriptionHTML: '
|
||||||
<span style="color:var(--description-font-color);">不是很想说牢A,来讲点别的吧</span>
|
<span style="color:var(--description-font-color);">不是很想说牢A,来讲点别的吧</span>
|
||||||
'
|
'
|
||||||
tags:
|
tags:
|
||||||
- 随笔
|
- 随笔
|
||||||
- 社会观察
|
- 社会观察
|
||||||
sidebar: true
|
sidebar: true
|
||||||
readingTime: true
|
readingTime: true
|
||||||
hiddenCover: false
|
hiddenCover: false
|
||||||
sticky: 100
|
sticky: 100
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境
|
# 当"斩杀线"遇见"路边灶":信息茧房时代的底层叙事与认知困境
|
||||||
|
|
||||||
####
|
####
|
||||||
##### 写在前面:
|
##### 写在前面:
|
||||||
####
|
####
|
||||||
|
|
||||||
<span style="font-size:0.9em; color:#1976d2;">
|
<span style="font-size:0.9em; color:#1976d2;">
|
||||||
  最近刷到两个极其割裂的内容,一边是B站牢A的"斩杀线"理论满天飞,说的美国生不如死、家破人亡,甚至连《纽约时报》都撰文讨论;另一边是抖音百色千姿一家在路边生火做饭的视频。两个视频差不多前后脚出现,但“斩杀线”只有美国有吗。这种对比本身,可能比视频内容本身更值得琢磨。
|
  最近刷到两个极其割裂的内容,一边是B站牢A的"斩杀线"理论满天飞,说的美国生不如死、家破人亡,甚至连《纽约时报》都撰文讨论;另一边是抖音百色千姿一家在路边生火做饭的视频。两个视频差不多前后脚出现,但“斩杀线”只有美国有吗。这种对比本身,可能比视频内容本身更值得琢磨。
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 壹
|
## 壹
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  先说牢A这边。他在西雅图当法医助理,搞出一套"斩杀线"理论:生场大病半年内就能从中产变流浪汉,37%美国人拿不出400美元应急。他把尸体叫"高达",蛆叫"迪斯科米",黑话体系规避了审核,视频在B站动辄百万播放,甚至引发NYT发文讨论"中国为什么炒作美国斩杀线"。
|
  先说牢A这边。他在西雅图当法医助理,搞出一套"斩杀线"理论:生场大病半年内就能从中产变流浪汉,37%美国人拿不出400美元应急。他把尸体叫"高达",蛆叫"迪斯科米",黑话体系规避了审核,视频在B站动辄百万播放,甚至引发NYT发文讨论"中国为什么炒作美国斩杀线"。
|
||||||
|
|
||||||
  这确实打破了"美国梦"滤镜,但我后来意识到,他的视角天然带"死亡偏差"——就像急诊科医生觉得全世界都在心梗,他只看到游戏玩脱了的玩家,看不到还在正常还房贷的会计。
|
  这确实打破了"美国梦"滤镜,但我后来意识到,他的视角天然带"死亡偏差"——就像急诊科医生觉得全世界都在心梗,他只看到游戏玩脱了的玩家,看不到还在正常还房贷的会计。
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 贰
|
## 贰
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
  然后才是百色千姿,父亲炒股加杠杆爆仓,带俩孩子睡马路边,在路边支灶做饭,姐姐弟弟辍学。这个视频没有百万播放,没有上热搜,甚至你主动去搜都未必能搜到——它存在于一个诡异的夹缝里:足够真实到让人心里一沉,又足够敏感到被算法轻轻按住。
|
  然后才是百色千姿,父亲炒股加杠杆爆仓,带俩孩子睡马路边,在路边支灶做饭,姐姐弟弟辍学。这个视频没有百万播放,没有上热搜,甚至你主动去搜都未必能搜到——它存在于一个诡异的夹缝里:足够真实到让人心里一沉,又足够敏感到被算法轻轻按住。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 叁
|
## 叁
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
这就很有意思了。同样是底层叙事,命运的差异说明了什么?
|
这就很有意思了。同样是底层叙事,命运的差异说明了什么?
|
||||||
|
|
||||||
牢A的内容可以大肆传播,甚至成为"爱国流量"的素材(看,美国多惨),而百色千姿必须被限流,因为它展示了"不该被看见的中国"——不是欣欣向荣的脱贫故事,不是励志的寒门贵子,而是金融投机失败后的代际贫困,是城市治理的盲区,是"全面建成小康社会"叙事下的那个刺眼补丁。
|
牢A的内容可以大肆传播,甚至成为"爱国流量"的素材(看,美国多惨),而百色千姿必须被限流,因为它展示了"不该被看见的中国"——不是欣欣向荣的脱贫故事,不是励志的寒门贵子,而是金融投机失败后的代际贫困,是城市治理的盲区,是"全面建成小康社会"叙事下的那个刺眼补丁。
|
||||||
|
|
||||||
平台对两种不同的"底层"采取了不同的态度:美国的底层可以被消费、被猎奇、被用来完成"对岸很惨"的集体确认;中国的底层必须被藏好,因为"影响市容",因为怕引起"不必要的联想"。
|
平台对两种不同的"底层"采取了不同的态度:美国的底层可以被消费、被猎奇、被用来完成"对岸很惨"的集体确认;中国的底层必须被藏好,因为"影响市容",因为怕引起"不必要的联想"。
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
|
|
||||||
## 肆
|
## 肆
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
但这种选择性的可见性恰恰制造了更深层的信息茧房。
|
但这种选择性的可见性恰恰制造了更深层的信息茧房。
|
||||||
|
|
||||||
当我们只能通过牢A的"高达"和"迪斯科米"来想象美国底层,同时百色千姿的"路边灶"只能在小范围暗流涌动时,我们得到一个扭曲的地图:美国的贫困是可见的、可分析的、甚至被文学化的;中国的贫困是偶然的、个人的、"已经被解决"的,如果还存在,那一定是个案,是"父亲太贪"的个体悲剧,不是系统性缝隙。
|
当我们只能通过牢A的"高达"和"迪斯科米"来想象美国底层,同时百色千姿的"路边灶"只能在小范围暗流涌动时,我们得到一个扭曲的地图:美国的贫困是可见的、可分析的、甚至被文学化的;中国的贫困是偶然的、个人的、"已经被解决"的,如果还存在,那一定是个案,是"父亲太贪"的个体悲剧,不是系统性缝隙。
|
||||||
|
|
||||||
实际上两个案例揭示的是同一件事:在全球搞金融化的今天,普通人的抗风险能力都脆得跟纸一样。美国那边是医疗-债务-信用评分的制度化斩杀;中国这边是股市加杠杆+住房安全网漏洞的市场化跌落。
|
实际上两个案例揭示的是同一件事:在全球搞金融化的今天,普通人的抗风险能力都脆得跟纸一样。美国那边是医疗-债务-信用评分的制度化斩杀;中国这边是股市加杠杆+住房安全网漏洞的市场化跌落。
|
||||||
|
|
||||||
但因为我们只能看见"高达"而看不见"路边灶",很多人会产生一种幻觉:至少我们不会像美国那样"横尸街头"。可百色千姿证明,只是横尸的形式不同——有的在下水道变成史莱姆,有的在路边灶台前慢慢营养不良。
|
但因为我们只能看见"高达"而看不见"路边灶",很多人会产生一种幻觉:至少我们不会像美国那样"横尸街头"。可百色千姿证明,只是横尸的形式不同——有的在下水道变成史莱姆,有的在路边灶台前慢慢营养不良。
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 伍
|
## 伍
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
最讽刺的是,牢A因为讲这些紧急回国,声称上了NYT后"嗅到危险";而百色千姿那边,如果继续在夹缝中发视频,可能面临的是更直接的消失——不是被媒体围攻,而是被算法静音,被限流,最后变成"此内容不存在"。
|
最讽刺的是,牢A因为讲这些紧急回国,声称上了NYT后"嗅到危险";而百色千姿那边,如果继续在夹缝中发视频,可能面临的是更直接的消失——不是被媒体围攻,而是被算法静音,被限流,最后变成"此内容不存在"。
|
||||||
|
|
||||||
如果说牢A的爆红让我们看到"被算法选中的底层",那么百色千姿的沉寂让我们看到"被平台抹去的底层"。
|
如果说牢A的爆红让我们看到"被算法选中的底层",那么百色千姿的沉寂让我们看到"被平台抹去的底层"。
|
||||||
|
|
||||||
后者可能比前者更真实,但也更脆弱——它提醒我们,在信息茧房里,有些窗口不是被墙封住的,而是被算法悄悄关上的。当我们抱怨"为什么只能看到美国很惨"的时候,也许该想想:那些试图展示"这边也不容易"的声音,是不是早就发不出声音了?
|
后者可能比前者更真实,但也更脆弱——它提醒我们,在信息茧房里,有些窗口不是被墙封住的,而是被算法悄悄关上的。当我们抱怨"为什么只能看到美国很惨"的时候,也许该想想:那些试图展示"这边也不容易"的声音,是不是早就发不出声音了?
|
||||||
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
## 陆
|
## 陆
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
所以我后来刷到这类内容有个习惯:越是被限流的,越值得多看两眼。
|
所以我后来刷到这类内容有个习惯:越是被限流的,越值得多看两眼。
|
||||||
|
|
||||||
因为能在夹缝里存在的,往往是算法没来得及平滑处理掉的粗糙真实。那些能百万播放的"社会观察",不管讲的是美国还是中国,都已经被流量逻辑筛选过、包装过、适配过某种情绪需求;而那些转不出去、时不时消失的视频,反而保留了生活本身那种不体面的毛边。
|
因为能在夹缝里存在的,往往是算法没来得及平滑处理掉的粗糙真实。那些能百万播放的"社会观察",不管讲的是美国还是中国,都已经被流量逻辑筛选过、包装过、适配过某种情绪需求;而那些转不出去、时不时消失的视频,反而保留了生活本身那种不体面的毛边。
|
||||||
|
|
||||||
当然,这也可能是另一种偏见——"被压制的才是真相"——但在这个 everyone is gaming the algorithm 的时代,至少百色千姿这类视频提醒我们:还有东西在算法的手掌心里漏网,还有"路边灶"在城市的阴影里冒烟。
|
当然,这也可能是另一种偏见——"被压制的才是真相"——但在这个 everyone is gaming the algorithm 的时代,至少百色千姿这类视频提醒我们:还有东西在算法的手掌心里漏网,还有"路边灶"在城市的阴影里冒烟。
|
||||||
|
|
||||||
至于我们能做什么?大概就是在看到"高达"的时候,记得也找找"路边灶";在看到美国底层的时候,承认中国底层也存在,不是为了比烂,而是为了承认:金融化这张网,漏掉的人比你我想象的多得多。
|
至于我们能做什么?大概就是在看到"高达"的时候,记得也找找"路边灶";在看到美国底层的时候,承认中国底层也存在,不是为了比烂,而是为了承认:金融化这张网,漏掉的人比你我想象的多得多。
|
||||||
|
|
||||||
而平台的区别只是:有的漏掉的人被做成了标本展示,有的漏掉的人必须消失在阴影里。😶
|
而平台的区别只是:有的漏掉的人被做成了标本展示,有的漏掉的人必须消失在阴影里。😶
|
||||||
|
|||||||
127
docs/sop/maindocs/openclaw.md
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
---
|
||||||
|
title: 热度降不下来了,还是讲一下OpenClaw吧
|
||||||
|
top: 1
|
||||||
|
date: 2026-03-10 12:00:00
|
||||||
|
descriptionHTML: '
|
||||||
|
<span style="color:var(--description-font-color);">我经常是等热度下来了我才会开题写文章,但是我看一时半会热度下不来了</span>
|
||||||
|
'
|
||||||
|
tags:
|
||||||
|
- OpenClaw
|
||||||
|
- 技术
|
||||||
|
sidebar: true
|
||||||
|
readingTime: true
|
||||||
|
hiddenCover: false
|
||||||
|
sticky: 0
|
||||||
|
hidden: false
|
||||||
|
recommend: false
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 热度降不下来了,还是讲一下OpenClaw吧
|
||||||
|
|
||||||
|
####
|
||||||
|
##### 写在前面:
|
||||||
|
####
|
||||||
|
|
||||||
|
<span style="font-size:0.9em; color:#1976d2;">
|
||||||
|
  在他从ClawBot改名到MoltBot的时候我就关注到了,不过那会关注点还在OpenCode,因为Claude Code和Codex我厌恶了,听说OpenCode很友好,就一直在研究OpenCode。后面MoltBot的时候我就部署在服务器了,再后来他又改名OpenClaw,让我服务器里面装了两个小龙虾,而且还不好卸载……
|
||||||
|
</span>
|
||||||
|
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 前言
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
  为什么刚刚要提一嘴OpenCode呢,其实这样的工具我们臭写代码的已经接触很多了,从Copilot到Cursor,从Claude Code到OpenCode,其实他都是自动化AI Agent,过去这些工具都能全自动写代码,测试,运行命令……如果让他做一些别的和代码无关的任务他也可以用系统命令来解决的。
|
||||||
|
|
||||||
|
  所以OpenClaw也不是什么很高级的东西,他也是在后台启动了一个Agent,然后Agent能工具调用、能执行命令、能读写运行文件……只是他是唯一能接入聊天软件的,我感觉就是这一点比Claude Code啥的高级一点,手机上就可以操作AI,<span style="color: #43a047;">过去我们这些臭写代码的需要坐在电脑面前焦灼的Vibe Coding。</span>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 壹
|
||||||
|
|
||||||
|
</div>
|
||||||
|
  但是OpenClaw真的不配这么多Star,他为什么这么爆火,我不知道,很神奇,很玄幻。<span style="color: #e72e00;">他在GitHub软件Star排行第一,超过Linux内核快照版,超过Python,超过各种前端框架。</span>我没想明白,真的非常非常玄幻。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
<div align="center" style="font-size:1em; color:gray;">前面都是教程或者资源汇总一类的仓库,OpenClaw是Star最高的软件类仓库</div>
|
||||||
|
|
||||||
|
  而且他不是小圈子火,之前OpenCode是小圈子火,但是OpenClaw能让很多昨天还在用豆包录音的人,今天就吵着要部署OpenClaw。<span style="color: #43a047;">具体为什么会用豆包录音请看下图。</span>
|
||||||
|
|
||||||
|

|
||||||
|
<div align="center" style="font-size:1em; color:gray;">笑死我了</div>
|
||||||
|
|
||||||
|
|
||||||
|
  反正就是很火,莫名其妙的火,现象级的火,超规模级的火,一塌糊涂的火,应该可以和我家鸽鸽🐣比一下了。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 贰
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div align="center" style="font-size:1.3em;color:#1976d2;">这时候就有人要问了,OpenClaw到底解决了什么</div>
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
#####   我个人认为是当今AI Agent发展到一定阶段的产物。主要是Vibe Coding的成熟和模型能力的提升,辅以MCP、Skills、上下文工程、多模态、RAG为一体的产物。
|
||||||
|
|
||||||
|
  过去Agent是产业型垄断,比如千问可以做一个能点外卖的Agent,世界上找不出第二个,即使有人是天才,没有外卖平台的接口也搞不定<span style="color: #1976d2;">(有点绝对,但是效果绝对不如阿里自己做)</span>。现在的Agent想要打破这个垄断,他们认为Agent人人都可以持有,做自己的AI助理,做自己的“贾维斯”。<span style="color: #43a047;">Agent终于是有机会走入寻常百姓家了。</span>
|
||||||
|
|
||||||
|

|
||||||
|
<div align="center" style="font-size:1em; color:gray;">反正我已经All in 10086.0了</div>
|
||||||
|
|
||||||
|
  这个问题其实去年同时期“本地部署DeepSeek”时代就出现了,有人研究如何做自己的知识库,有人研究Coze工作流……直到今天都还有人兜售工作流搭建教学。
|
||||||
|
|
||||||
|
  我个人认为目前Agent还是没有解决本质问题的,<span style="color: #1976d2;">LLM再怎么玩都只能输出一些字符编码,在大模型看来,就是一些前后关联强的东西。</span>唯独他的记忆功能确实实在,让他有了一些“人味”。我就用他的记忆功能帮我记忆我的作业和课程表,给我安排Todo List。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
<div align="center" style="font-size:1em; color:gray;">我的OpenClaw接入QQBot</div>
|
||||||
|
|
||||||
|
####
|
||||||
|
|
||||||
|
<div align="center" style="font-size:1.3em;color:#1976d2;">他真的提效了吗</div>
|
||||||
|
|
||||||
|
  只能说略有提效。至少确实能一直提醒我一些任务,就像上面展示的一样,帮我安排各类任务,因为他的记忆文件里面有我的课程表信息、作业信息&DDL,做完的内容也会从临时记忆删除。
|
||||||
|
|
||||||
|
  如果有类似教程的需求我后面可以补一下教程,<span style="color: #43a047;">大概就是让他把你的长期安排存入长期记忆,短期安排存入临时记忆,临时记忆随时调整。</span>不过我认识的很多人都卡在了权限和推送这一步,这也正是下面我要讲的,在实操中的一些问题。
|
||||||
|
|
||||||
|
<div align="center" style="font-size:1.3em;color:#1976d2;">他确实不好用</div>
|
||||||
|
|
||||||
|
  OpenClaw的部署和实操一直是个大问题,也不知道从哪一次Commit起,这个权限就管理的很死,似乎是架构做了变化,Tools调用需要有权限。
|
||||||
|
|
||||||
|
  过去Claude Code这些CLI工具都是直接问你,或者全部允许,很多工具调用都是默认提供权限,但是OpenClaw的逻辑十分独特。几乎所有Tools都需要手动开启权限,所有命令执行都默认需要批准……这让权限配置很头疼,OpenClaw Onboard启动后配置完,大家以为能直接对话了,但实际是<span style="color: #43a047;">“我不能调用工具”“我没有这个权限”</span>……
|
||||||
|

|
||||||
|
|
||||||
|
  主要还是因为这个项目有无数Vibe Coding的人来提交PR,目前已经超过5k的PR。这个项目非常庞大,非常臃肿,教程的文档可以匹敌各大云服务商的文档了<span style="color: #1976d2;">(都非常屎山……)</span>。连我这种部署了无数项目的人,都觉得他非常的难以调教,功能随时在变,没有标准的功能方案,就是开源社区Vibe Coding的排泄池,连什么文科生都能合并代码了,让AI写AI工具的代码吗,真是闭环了,卧槽。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
  原文:https://www.geekpark.net/news/360337 自己品吧,<span style="color: #e72e00;">只能说AI NB</span>
|
||||||
|
|
||||||
|
  其次是维护,维护需要各种配置和运行命令,这对于不太懂电脑的小白,简直是噩梦……现在想玩AI还是太难了,让OpenClaw搞结果发现他默认没权限🤣,AI的大盘还是在我们这些臭写代码的计算机人手里,想玩AI还是需要很多计算机基础的。
|
||||||
|
|
||||||
|
  还有就是安全,让一堆不懂命令和安全的人拿到了密钥,<span style="color: #1976d2;">黑客第一次吃这么好</span>。为什么国家会出面说安全问题,就是因为出现很多牛鬼蛇神都来部署OpenClaw了,搞不好什么央国企也部署,结果自己的安全信息被泄露,那就非常危险了。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 叁
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  上门部署,腾讯大楼下免费部署,超级个体,一人公司……闹剧会过去的,但是Agent的脚步是不会停的。很庆幸今天能看到这么多对AI怀揣着梦想,有着与时俱进的思维。千变万化的今天,确实需要这样的精神。
|
||||||
|
|
||||||
|
  但是OpenClaw的闹剧终究会成为历史的一部分,就像什么Coze空间工作流一样,慢慢的就很难再有产出了。Agent的难度还是远超预期的,仅仅依靠字符串输出的LLM我看真的难以应对大家日益增长的对AI时代的期盼。
|
||||||
113
docs/sop/maindocs/openwebui-stop-service.md
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
title: OpenWebUI停服了,以后只保留API服务
|
||||||
|
top: 3
|
||||||
|
date: 2026-03-19 20:45:19
|
||||||
|
descriptionHTML: '
|
||||||
|
<span style="color:var(--description-font-color);">在线 AI 问答不再是主流,维护成本越来越高,后续只提供 API 服务。</span>
|
||||||
|
'
|
||||||
|
tags:
|
||||||
|
- AI
|
||||||
|
- OpenWebUI
|
||||||
|
- API
|
||||||
|
- 公告
|
||||||
|
sidebar: true
|
||||||
|
readingTime: true
|
||||||
|
hiddenCover: true
|
||||||
|
sticky: 30
|
||||||
|
hidden: false
|
||||||
|
recommend: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# OpenWebUI停服了,以后只保留API服务
|
||||||
|
|
||||||
|
####
|
||||||
|
##### 写在前面:
|
||||||
|
####
|
||||||
|
|
||||||
|
<span style="font-size:0.9em; color:#1976d2;">
|
||||||
|
  如果你后面还有模型调用、脚本接入、工具开发或者中转接口的需求,可以直接加我微信:<span style="color:#43a047; font-weight:bold;">ZZHDSGSSS</span>。后续主要提供 API 服务。
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 壹
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  这个 OpenWebUI 页面,还是决定停掉了。
|
||||||
|
|
||||||
|
  很多人第一反应是“是不是做不下去了”,但其实这件事没有那么戏剧化。更准确地说,是<span style="color:#e72e00;">在线 AI 问答站这种形态,本身已经不再是主流了。</span>
|
||||||
|
|
||||||
|
  前两年大家刚接触大模型的时候,会天然地觉得一个网页聊天框就是 AI 产品的最终形态。打开网站,选个模型,输入一句话,然后等它回答,这种体验确实很直观,也很适合让新人快速上手。
|
||||||
|
|
||||||
|
  但是现在环境已经变了。真正还在高频使用 AI 的人,很多都已经从“网页问一句答一句”,慢慢转向了更直接的工作流:<span style="color:#43a047;">API 调用、脚本自动化、知识库接入、工作流编排、IDE 插件、Bot、RAG、Agent。</span>
|
||||||
|
|
||||||
|
  换句话说,大家要的已经不是一个“能聊天的网站”,而是一个能嵌进自己业务、自己工具链、自己生活流里的能力接口。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 贰
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  OpenWebUI 这类前端并不是不能用,而是维护成本越来越高。
|
||||||
|
|
||||||
|
  很多没自己维护过服务的人,会下意识以为这就是搭个页面、配个反代、接个模型 API 的事。真做起来完全不是这么简单。一个在线 AI 问答站点,后面牵扯的是完整的一套运行负担,工具调用,在线搜索……
|
||||||
|
|
||||||
|
  这些东西叠在一起,最后就会发现:<span style="color:#1976d2;">维护一个“看起来只是聊天页面”的服务,实际消耗的时间和精力,远比想象中高得多。</span>
|
||||||
|
|
||||||
|
  更关键的是,它并没有带来同等比例的价值。因为大量用户真正需要的,不是每天打开网页和 AI 闲聊,而是把模型能力接到自己的程序、业务和工作流里。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 叁
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  所以这次停服,不是单纯因为某一个 bug,也不是一时兴起,而是方向调整。
|
||||||
|
|
||||||
|
|
||||||
|
  如果把重心切到 API 服务,事情就会简单得多,也更符合现在的使用趋势:
|
||||||
|
|
||||||
|
1. 大家可以直接接入自己的项目,不需要被网页交互限制。
|
||||||
|
2. 做自动化的人可以接脚本、接 Agent、接工作流,扩展性更强。
|
||||||
|
3. 维护侧也更清晰,核心目标从“维护一个重页面产品”变成“维护一个稳定的能力出口”。
|
||||||
|
|
||||||
|
  说白了,<span style="color:#e72e00;">以后更重要的不是“给你一个聊天框”,而是“给你一个稳定可调用的模型入口”。</span>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 肆
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  后续就不再继续提供这个 OpenWebUI 在线问答页面了,重心转到 API 服务。
|
||||||
|
|
||||||
|
  如果你只是想找个网页聊天,也许市面上还有很多替代品;但如果你是要真正拿模型做事,比如:
|
||||||
|
|
||||||
|
- 对接自己的网站或 App
|
||||||
|
- 做知识库问答
|
||||||
|
- 接入脚本和自动化流程
|
||||||
|
- 给 Agent、插件、工作流提供模型能力
|
||||||
|
- 做多模型切换和统一调用
|
||||||
|
|
||||||
|
  那 API 才是更长期、更稳妥的方案。
|
||||||
|
|
||||||
|
  目前可用地址是:[api.zhuzihan.com](https://api.zhuzihan.com),以及 [pro.zhuzihan.com](https://pro.zhuzihan.com)。
|
||||||
|
|
||||||
|
  有需要的可以直接加我微信:<span style="color:#43a047; font-weight:bold;">ZZHDSGSSS</span>。
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
## 伍
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
  我一直觉得,AI 行业接下来会越来越“去页面化”。
|
||||||
|
|
||||||
|
  很多看起来热闹的在线问答站,最后都会发现自己处在一个很尴尬的位置:往上比不过大厂官方产品的稳定和生态,往下又不如 API 灵活。用户真正留下来的理由越来越少,维护难度却只会越来越高。
|
||||||
|
|
||||||
|
  所以停掉 OpenWebUI,不代表不做 AI 了,反而恰恰说明要把资源收回来,放到更有价值的地方。
|
||||||
|
|
||||||
|
  页面会停,但服务不会停。以后如果你还需要稳定的模型能力,还是那句话:<span style="color:#1976d2;">直接走 API,比守着一个聊天网页更实际。</span>
|
||||||
|
|
||||||
@@ -1,398 +1,398 @@
|
|||||||
---
|
---
|
||||||
title: 数据结构与算法实验(C++)
|
title: 数据结构与算法实验(C++)
|
||||||
date: 2026-01-15
|
date: 2026-01-15
|
||||||
descriptionHTML: '<span style="color:var(--description-font-color);">整理了数据结构考试中常用的C++模板与算法讲解</span>'
|
descriptionHTML: '<span style="color:var(--description-font-color);">整理了数据结构考试中常用的C++模板与算法讲解</span>'
|
||||||
tags:
|
tags:
|
||||||
- 笔记
|
- 笔记
|
||||||
- C++
|
- C++
|
||||||
- 算法
|
- 算法
|
||||||
sidebar: true
|
sidebar: true
|
||||||
readingTime: true
|
readingTime: true
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
---
|
---
|
||||||
|
|
||||||
# 数据结构与算法实验(C++)
|
# 数据结构与算法实验(C++)
|
||||||
|
|
||||||
这份笔记整理了数据结构考试中常用的C++模板与算法讲解
|
这份笔记整理了数据结构考试中常用的C++模板与算法讲解
|
||||||
|
|
||||||
## 1. 基础环境 (Template)
|
## 1. 基础环境 (Template)
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <functional> // for greater
|
#include <functional> // for greater
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
typedef long long ll;
|
typedef long long ll;
|
||||||
const int INF = 0x3f3f3f3f;
|
const int INF = 0x3f3f3f3f;
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
// 核心:关闭同步,加速cin/cout
|
// 核心:关闭同步,加速cin/cout
|
||||||
ios::sync_with_stdio(false);
|
ios::sync_with_stdio(false);
|
||||||
cin.tie(0); cout.tie(0);
|
cin.tie(0); cout.tie(0);
|
||||||
|
|
||||||
// 在这里写你的代码
|
// 在这里写你的代码
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. 基础数据结构与 STL
|
## 2. 基础数据结构与 STL
|
||||||
|
|
||||||
### 2.1 指针与引用 (Pointers & References)
|
### 2.1 指针与引用 (Pointers & References)
|
||||||
**这是很多同学容易混淆的地方,尤其是在函数传参时。**
|
**这是很多同学容易混淆的地方,尤其是在函数传参时。**
|
||||||
|
|
||||||
#### 1. 如何定义
|
#### 1. 如何定义
|
||||||
```cpp
|
```cpp
|
||||||
int a = 10;
|
int a = 10;
|
||||||
int* p = &a; // p 是指针,存储 a 的地址
|
int* p = &a; // p 是指针,存储 a 的地址
|
||||||
int& r = a; // r 是引用,r 就是 a 的别名 (即 r 和 a 是同一个东西)
|
int& r = a; // r 是引用,r 就是 a 的别名 (即 r 和 a 是同一个东西)
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2. 函数传参:值传递 vs 引用传递 vs 指针传递
|
#### 2. 函数传参:值传递 vs 引用传递 vs 指针传递
|
||||||
**场景**:你需要在一个函数里修改外面的变量,或者传递大数组不希望发生拷贝。
|
**场景**:你需要在一个函数里修改外面的变量,或者传递大数组不希望发生拷贝。
|
||||||
|
|
||||||
**A. 引用传递 (`Type& name`) —— 最推荐**
|
**A. 引用传递 (`Type& name`) —— 最推荐**
|
||||||
如果函数参数里写了 `&`,你在函数里**直接把它当成普通变量用**就行。
|
如果函数参数里写了 `&`,你在函数里**直接把它当成普通变量用**就行。
|
||||||
```cpp
|
```cpp
|
||||||
// 这里的 x 就是外面传进来的那个变量的“分身”
|
// 这里的 x 就是外面传进来的那个变量的“分身”
|
||||||
void modify(int& x) {
|
void modify(int& x) {
|
||||||
x = 100; // 不需要加 *,直接修改
|
x = 100; // 不需要加 *,直接修改
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
int num = 0;
|
int num = 0;
|
||||||
modify(num); // num 变成 100
|
modify(num); // num 变成 100
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**B. 指针传递 (`Type* name`)**
|
**B. 指针传递 (`Type* name`)**
|
||||||
需要传地址,函数里要用 `*` 解引用。
|
需要传地址,函数里要用 `*` 解引用。
|
||||||
```cpp
|
```cpp
|
||||||
void modifyPtr(int* p) {
|
void modifyPtr(int* p) {
|
||||||
if (p == NULL) return;
|
if (p == NULL) return;
|
||||||
*p = 100; // *p 代表指针指向的那个变量
|
*p = 100; // *p 代表指针指向的那个变量
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
int num = 0;
|
int num = 0;
|
||||||
modifyPtr(&num); // 注意:要取地址符 &
|
modifyPtr(&num); // 注意:要取地址符 &
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**总结**:
|
**总结**:
|
||||||
* 看到 `void func(int &x)` -> 内部直接用 `x`,改变会影响外面。
|
* 看到 `void func(int &x)` -> 内部直接用 `x`,改变会影响外面。
|
||||||
* 看到 `void func(int *x)` -> 内部用 `*x` 访问值,调用时传地址 `&a`。
|
* 看到 `void func(int *x)` -> 内部用 `*x` 访问值,调用时传地址 `&a`。
|
||||||
* 链表/树结构通常用指针 (`ListNode*`),因为可能为空 (`NULL`)。
|
* 链表/树结构通常用指针 (`ListNode*`),因为可能为空 (`NULL`)。
|
||||||
|
|
||||||
### 2.2 常用 STL 容器
|
### 2.2 常用 STL 容器
|
||||||
**Stack (栈)**: 先进后出 (LIFO),用于括号匹配、DFS。
|
**Stack (栈)**: 先进后出 (LIFO),用于括号匹配、DFS。
|
||||||
```cpp
|
```cpp
|
||||||
stack<int> s;
|
stack<int> s;
|
||||||
s.push(1); s.pop(); s.top(); s.empty();
|
s.push(1); s.pop(); s.top(); s.empty();
|
||||||
```
|
```
|
||||||
|
|
||||||
**Queue (队列)**: 先进先出 (FIFO),用于BFS、层序遍历。
|
**Queue (队列)**: 先进先出 (FIFO),用于BFS、层序遍历。
|
||||||
```cpp
|
```cpp
|
||||||
queue<int> q;
|
queue<int> q;
|
||||||
q.push(1); q.pop(); q.front(); q.empty();
|
q.push(1); q.pop(); q.front(); q.empty();
|
||||||
```
|
```
|
||||||
|
|
||||||
**Vector (动态数组)**:
|
**Vector (动态数组)**:
|
||||||
```cpp
|
```cpp
|
||||||
vector<int> v;
|
vector<int> v;
|
||||||
v.push_back(1);
|
v.push_back(1);
|
||||||
sort(v.begin(), v.end());
|
sort(v.begin(), v.end());
|
||||||
v.erase(unique(v.begin(), v.end()), v.end()); // 排序后去重
|
v.erase(unique(v.begin(), v.end()), v.end()); // 排序后去重
|
||||||
```
|
```
|
||||||
|
|
||||||
**Priority Queue (优先队列)**: 默认大根堆。
|
**Priority Queue (优先队列)**: 默认大根堆。
|
||||||
```cpp
|
```cpp
|
||||||
priority_queue<int> pq; // 大根堆
|
priority_queue<int> pq; // 大根堆
|
||||||
priority_queue<int, vector<int>, greater<int>> min_pq; // 小根堆
|
priority_queue<int, vector<int>, greater<int>> min_pq; // 小根堆
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2.2 单链表 (Linked List)
|
### 2.2 单链表 (Linked List)
|
||||||
**技巧**: 使用虚拟头结点 (dummy head) 处理删除操作。
|
**技巧**: 使用虚拟头结点 (dummy head) 处理删除操作。
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
struct ListNode {
|
struct ListNode {
|
||||||
int val;
|
int val;
|
||||||
ListNode *next;
|
ListNode *next;
|
||||||
ListNode(int x) : val(x), next(NULL) {}
|
ListNode(int x) : val(x), next(NULL) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 1. 尾插法创建
|
// 1. 尾插法创建
|
||||||
ListNode* createList(const vector<int>& nums) {
|
ListNode* createList(const vector<int>& nums) {
|
||||||
ListNode* dummy = new ListNode(0);
|
ListNode* dummy = new ListNode(0);
|
||||||
ListNode* tail = dummy;
|
ListNode* tail = dummy;
|
||||||
for (int x : nums) {
|
for (int x : nums) {
|
||||||
tail->next = new ListNode(x);
|
tail->next = new ListNode(x);
|
||||||
tail = tail->next;
|
tail = tail->next;
|
||||||
}
|
}
|
||||||
return dummy->next;
|
return dummy->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 反转链表
|
// 2. 反转链表
|
||||||
ListNode* reverseList(ListNode* head) {
|
ListNode* reverseList(ListNode* head) {
|
||||||
ListNode *prev = NULL, *curr = head;
|
ListNode *prev = NULL, *curr = head;
|
||||||
while (curr) {
|
while (curr) {
|
||||||
ListNode* nextTemp = curr->next;
|
ListNode* nextTemp = curr->next;
|
||||||
curr->next = prev;
|
curr->next = prev;
|
||||||
prev = curr;
|
prev = curr;
|
||||||
curr = nextTemp;
|
curr = nextTemp;
|
||||||
}
|
}
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 删除指定值的节点
|
// 3. 删除指定值的节点
|
||||||
ListNode* removeElements(ListNode* head, int val) {
|
ListNode* removeElements(ListNode* head, int val) {
|
||||||
ListNode* dummy = new ListNode(0);
|
ListNode* dummy = new ListNode(0);
|
||||||
dummy->next = head;
|
dummy->next = head;
|
||||||
ListNode* cur = dummy;
|
ListNode* cur = dummy;
|
||||||
while (cur->next) {
|
while (cur->next) {
|
||||||
if (cur->next->val == val) {
|
if (cur->next->val == val) {
|
||||||
ListNode* temp = cur->next;
|
ListNode* temp = cur->next;
|
||||||
cur->next = cur->next->next;
|
cur->next = cur->next->next;
|
||||||
delete temp;
|
delete temp;
|
||||||
} else {
|
} else {
|
||||||
cur = cur->next;
|
cur = cur->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dummy->next;
|
return dummy->next;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3. 基础算法
|
## 3. 基础算法
|
||||||
|
|
||||||
### 3.1 二分查找 (Binary Search)
|
### 3.1 二分查找 (Binary Search)
|
||||||
**适用**: 有序数组中查找。
|
**适用**: 有序数组中查找。
|
||||||
```cpp
|
```cpp
|
||||||
// 查找第一个 >= target 的位置
|
// 查找第一个 >= target 的位置
|
||||||
int lower_bound_custom(const vector<int>& arr, int target) {
|
int lower_bound_custom(const vector<int>& arr, int target) {
|
||||||
int l = 0, r = arr.size() - 1, ans = -1;
|
int l = 0, r = arr.size() - 1, ans = -1;
|
||||||
while (l <= r) {
|
while (l <= r) {
|
||||||
int mid = l + (r - l) / 2;
|
int mid = l + (r - l) / 2;
|
||||||
if (arr[mid] >= target) {
|
if (arr[mid] >= target) {
|
||||||
ans = mid;
|
ans = mid;
|
||||||
r = mid - 1;
|
r = mid - 1;
|
||||||
} else {
|
} else {
|
||||||
l = mid + 1;
|
l = mid + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ans;
|
return ans;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3.2 快速幂 (Quick Power)
|
### 3.2 快速幂 (Quick Power)
|
||||||
**功能**: 计算 $a^b \pmod m$。
|
**功能**: 计算 $a^b \pmod m$。
|
||||||
```cpp
|
```cpp
|
||||||
ll qpow(ll a, ll b, ll m) {
|
ll qpow(ll a, ll b, ll m) {
|
||||||
ll res = 1;
|
ll res = 1;
|
||||||
a %= m;
|
a %= m;
|
||||||
while (b) {
|
while (b) {
|
||||||
if (b & 1) res = (res * a) % m;
|
if (b & 1) res = (res * a) % m;
|
||||||
a = (a * a) % m;
|
a = (a * a) % m;
|
||||||
b >>= 1;
|
b >>= 1;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 4. 字符串算法
|
## 4. 字符串算法
|
||||||
|
|
||||||
### KMP 算法
|
### KMP 算法
|
||||||
**功能**: 字符串匹配,求 pattern 在 text 中的位置。
|
**功能**: 字符串匹配,求 pattern 在 text 中的位置。
|
||||||
```cpp
|
```cpp
|
||||||
// 求 next 数组
|
// 求 next 数组
|
||||||
vector<int> getNext(string p) {
|
vector<int> getNext(string p) {
|
||||||
int m = p.size(), j = 0;
|
int m = p.size(), j = 0;
|
||||||
vector<int> nxt(m);
|
vector<int> nxt(m);
|
||||||
nxt[0] = 0;
|
nxt[0] = 0;
|
||||||
for (int i = 1; i < m; i++) {
|
for (int i = 1; i < m; i++) {
|
||||||
while (j > 0 && p[i] != p[j]) j = nxt[j - 1];
|
while (j > 0 && p[i] != p[j]) j = nxt[j - 1];
|
||||||
if (p[i] == p[j]) j++;
|
if (p[i] == p[j]) j++;
|
||||||
nxt[i] = j;
|
nxt[i] = j;
|
||||||
}
|
}
|
||||||
return nxt;
|
return nxt;
|
||||||
}
|
}
|
||||||
|
|
||||||
// KMP 匹配
|
// KMP 匹配
|
||||||
int kmp(string text, string pattern) {
|
int kmp(string text, string pattern) {
|
||||||
if (pattern.empty()) return 0;
|
if (pattern.empty()) return 0;
|
||||||
vector<int> nxt = getNext(pattern);
|
vector<int> nxt = getNext(pattern);
|
||||||
int j = 0;
|
int j = 0;
|
||||||
for (int i = 0; i < text.size(); i++) {
|
for (int i = 0; i < text.size(); i++) {
|
||||||
while (j > 0 && text[i] != pattern[j]) j = nxt[j - 1];
|
while (j > 0 && text[i] != pattern[j]) j = nxt[j - 1];
|
||||||
if (text[i] == pattern[j]) j++;
|
if (text[i] == pattern[j]) j++;
|
||||||
if (j == pattern.size()) return i - pattern.size() + 1;
|
if (j == pattern.size()) return i - pattern.size() + 1;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 5. 树 (Tree)
|
## 5. 树 (Tree)
|
||||||
|
|
||||||
### 5.1 二叉树遍历
|
### 5.1 二叉树遍历
|
||||||
```cpp
|
```cpp
|
||||||
struct TreeNode {
|
struct TreeNode {
|
||||||
int val;
|
int val;
|
||||||
TreeNode *left, *right;
|
TreeNode *left, *right;
|
||||||
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
|
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
// 递归遍历 (Pre/In/Post)
|
// 递归遍历 (Pre/In/Post)
|
||||||
void dfs(TreeNode* root) {
|
void dfs(TreeNode* root) {
|
||||||
if (!root) return;
|
if (!root) return;
|
||||||
// cout << root->val; // 先序
|
// cout << root->val; // 先序
|
||||||
dfs(root->left);
|
dfs(root->left);
|
||||||
// cout << root->val; // 中序
|
// cout << root->val; // 中序
|
||||||
dfs(root->right);
|
dfs(root->right);
|
||||||
// cout << root->val; // 后序
|
// cout << root->val; // 后序
|
||||||
}
|
}
|
||||||
|
|
||||||
// 层序遍历 (BFS)
|
// 层序遍历 (BFS)
|
||||||
void levelOrder(TreeNode* root) {
|
void levelOrder(TreeNode* root) {
|
||||||
if (!root) return;
|
if (!root) return;
|
||||||
queue<TreeNode*> q;
|
queue<TreeNode*> q;
|
||||||
q.push(root);
|
q.push(root);
|
||||||
while (!q.empty()) {
|
while (!q.empty()) {
|
||||||
TreeNode* node = q.front(); q.pop();
|
TreeNode* node = q.front(); q.pop();
|
||||||
cout << node->val << " ";
|
cout << node->val << " ";
|
||||||
if (node->left) q.push(node->left);
|
if (node->left) q.push(node->left);
|
||||||
if (node->right) q.push(node->right);
|
if (node->right) q.push(node->right);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5.2 并查集 (Union-Find)
|
### 5.2 并查集 (Union-Find)
|
||||||
**功能**: 集合合并与查询。
|
**功能**: 集合合并与查询。
|
||||||
```cpp
|
```cpp
|
||||||
int fa[10005];
|
int fa[10005];
|
||||||
void init(int n) { for(int i=1; i<=n; i++) fa[i]=i; }
|
void init(int n) { for(int i=1; i<=n; i++) fa[i]=i; }
|
||||||
int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } // 路径压缩
|
int find(int x) { return x == fa[x] ? x : fa[x] = find(fa[x]); } // 路径压缩
|
||||||
void unite(int x, int y) { fa[find(x)] = find(y); }
|
void unite(int x, int y) { fa[find(x)] = find(y); }
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5.3 树状数组 (Fenwick Tree)
|
### 5.3 树状数组 (Fenwick Tree)
|
||||||
**功能**: 单点修改,区间查询前缀和。
|
**功能**: 单点修改,区间查询前缀和。
|
||||||
```cpp
|
```cpp
|
||||||
int bit[10005], n;
|
int bit[10005], n;
|
||||||
int lowbit(int x) { return x & -x; }
|
int lowbit(int x) { return x & -x; }
|
||||||
void add(int x, int k) { for(; x<=n; x+=lowbit(x)) bit[x]+=k; }
|
void add(int x, int k) { for(; x<=n; x+=lowbit(x)) bit[x]+=k; }
|
||||||
int query(int x) { int s=0; for(; x>0; x-=lowbit(x)) s+=bit[x]; return s; }
|
int query(int x) { int s=0; for(; x>0; x-=lowbit(x)) s+=bit[x]; return s; }
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. 图论 (Graph)
|
## 6. 图论 (Graph)
|
||||||
|
|
||||||
### 6.1 存图与遍历 (Adjacency List, DFS, BFS)
|
### 6.1 存图与遍历 (Adjacency List, DFS, BFS)
|
||||||
```cpp
|
```cpp
|
||||||
struct edge { int to, w; };
|
struct edge { int to, w; };
|
||||||
vector<vector<edge>> adj; // adj[u] 存 u 的出边
|
vector<vector<edge>> adj; // adj[u] 存 u 的出边
|
||||||
vector<bool> vis;
|
vector<bool> vis;
|
||||||
|
|
||||||
// DFS
|
// DFS
|
||||||
void dfs(int u) {
|
void dfs(int u) {
|
||||||
vis[u] = true;
|
vis[u] = true;
|
||||||
for (auto e : adj[u]) {
|
for (auto e : adj[u]) {
|
||||||
if (!vis[e.to]) dfs(e.to);
|
if (!vis[e.to]) dfs(e.to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// BFS (求无权图最短路)
|
// BFS (求无权图最短路)
|
||||||
void bfs(int s) {
|
void bfs(int s) {
|
||||||
queue<int> q; q.push(s); vis[s] = true;
|
queue<int> q; q.push(s); vis[s] = true;
|
||||||
while (!q.empty()) {
|
while (!q.empty()) {
|
||||||
int u = q.front(); q.pop();
|
int u = q.front(); q.pop();
|
||||||
for (auto e : adj[u]) {
|
for (auto e : adj[u]) {
|
||||||
if (!vis[e.to]) {
|
if (!vis[e.to]) {
|
||||||
vis[e.to] = true;
|
vis[e.to] = true;
|
||||||
q.push(e.to);
|
q.push(e.to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6.2 最短路 Dijkstra (堆优化)
|
### 6.2 最短路 Dijkstra (堆优化)
|
||||||
**注意**: 仅适用于非负权边。
|
**注意**: 仅适用于非负权边。
|
||||||
```cpp
|
```cpp
|
||||||
vector<int> dis;
|
vector<int> dis;
|
||||||
void dijkstra(int s, int n) {
|
void dijkstra(int s, int n) {
|
||||||
dis.assign(n + 1, INF);
|
dis.assign(n + 1, INF);
|
||||||
dis[s] = 0;
|
dis[s] = 0;
|
||||||
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
|
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
|
||||||
pq.push({0, s});
|
pq.push({0, s});
|
||||||
|
|
||||||
while (!pq.empty()) {
|
while (!pq.empty()) {
|
||||||
int d = pq.top().first;
|
int d = pq.top().first;
|
||||||
int u = pq.top().second;
|
int u = pq.top().second;
|
||||||
pq.pop();
|
pq.pop();
|
||||||
|
|
||||||
if (d > dis[u]) continue;
|
if (d > dis[u]) continue;
|
||||||
|
|
||||||
for (auto e : adj[u]) {
|
for (auto e : adj[u]) {
|
||||||
if (dis[u] + e.w < dis[e.to]) {
|
if (dis[u] + e.w < dis[e.to]) {
|
||||||
dis[e.to] = dis[u] + e.w;
|
dis[e.to] = dis[u] + e.w;
|
||||||
pq.push({dis[e.to], e.to});
|
pq.push({dis[e.to], e.to});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6.3 最小生成树 (Kruskal)
|
### 6.3 最小生成树 (Kruskal)
|
||||||
**原理**: 贪心,按边权从小到大选边,并查集判环。
|
**原理**: 贪心,按边权从小到大选边,并查集判环。
|
||||||
```cpp
|
```cpp
|
||||||
struct Edge {
|
struct Edge {
|
||||||
int u, v, w;
|
int u, v, w;
|
||||||
bool operator<(const Edge& o) const { return w < o.w; }
|
bool operator<(const Edge& o) const { return w < o.w; }
|
||||||
} edges[20005];
|
} edges[20005];
|
||||||
|
|
||||||
int kruskal(int n, int m) {
|
int kruskal(int n, int m) {
|
||||||
sort(edges, edges + m);
|
sort(edges, edges + m);
|
||||||
init(n); // 并查集初始化
|
init(n); // 并查集初始化
|
||||||
int res = 0, cnt = 0;
|
int res = 0, cnt = 0;
|
||||||
for (int i = 0; i < m; i++) {
|
for (int i = 0; i < m; i++) {
|
||||||
if (find(edges[i].u) != find(edges[i].v)) {
|
if (find(edges[i].u) != find(edges[i].v)) {
|
||||||
unite(edges[i].u, edges[i].v);
|
unite(edges[i].u, edges[i].v);
|
||||||
res += edges[i].w;
|
res += edges[i].w;
|
||||||
cnt++;
|
cnt++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cnt == n - 1 ? res : -1;
|
return cnt == n - 1 ? res : -1;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 6.4 拓扑排序 (Topological Sort)
|
### 6.4 拓扑排序 (Topological Sort)
|
||||||
**功能**: 有向无环图 (DAG) 的排序。
|
**功能**: 有向无环图 (DAG) 的排序。
|
||||||
```cpp
|
```cpp
|
||||||
int in_degree[10005]; // 需预处理入度
|
int in_degree[10005]; // 需预处理入度
|
||||||
vector<int> toposort(int n) {
|
vector<int> toposort(int n) {
|
||||||
queue<int> q;
|
queue<int> q;
|
||||||
for(int i=1; i<=n; i++) if(in_degree[i]==0) q.push(i);
|
for(int i=1; i<=n; i++) if(in_degree[i]==0) q.push(i);
|
||||||
vector<int> res;
|
vector<int> res;
|
||||||
while(!q.empty()){
|
while(!q.empty()){
|
||||||
int u = q.front(); q.pop();
|
int u = q.front(); q.pop();
|
||||||
res.push_back(u);
|
res.push_back(u);
|
||||||
for(auto e : adj[u]){
|
for(auto e : adj[u]){
|
||||||
if(--in_degree[e.to] == 0) q.push(e.to);
|
if(--in_degree[e.to] == 0) q.push(e.to);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,408 +1,408 @@
|
|||||||
---
|
---
|
||||||
title: 马克思主义基本原理复习笔记
|
title: 马克思主义基本原理复习笔记
|
||||||
date: 2026-01-11 12:00:00
|
date: 2026-01-11 12:00:00
|
||||||
descriptionHTML: '<span style="color:var(--description-font-color);">马克思主义基本原理复习笔记,涵盖唯物论、辩证法、认识论、唯物史观、政治经济学及科学社会主义核心知识点。</span>'
|
descriptionHTML: '<span style="color:var(--description-font-color);">马克思主义基本原理复习笔记,涵盖唯物论、辩证法、认识论、唯物史观、政治经济学及科学社会主义核心知识点。</span>'
|
||||||
tags:
|
tags:
|
||||||
- 马原
|
- 马原
|
||||||
- 政治
|
- 政治
|
||||||
- 笔记
|
- 笔记
|
||||||
sidebar: true
|
sidebar: true
|
||||||
readingTime: true
|
readingTime: true
|
||||||
hidden: false
|
hidden: false
|
||||||
recommend: true
|
recommend: true
|
||||||
publish: false
|
publish: false
|
||||||
---
|
---
|
||||||
|
|
||||||
> **整理说明**:
|
> **整理说明**:
|
||||||
> 本笔记基于参考文件重点整理,并对**第1-4章**核心知识点进行了详细扩充与深度解析,补充了定义、原理逻辑及常见考点细节。
|
> 本笔记基于参考文件重点整理,并对**第1-4章**核心知识点进行了详细扩充与深度解析,补充了定义、原理逻辑及常见考点细节。
|
||||||
> **适用范围**:期末复习、考研政治基础巩固。
|
> **适用范围**:期末复习、考研政治基础巩固。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 目录
|
## 目录
|
||||||
1. [导论:什么是马克思主义](#导论什么是马克思主义)
|
1. [导论:什么是马克思主义](#导论什么是马克思主义)
|
||||||
2. [第1章 世界的物质性及发展规律(唯物论+辩证法)](#第1章-世界的物质性及发展规律)
|
2. [第1章 世界的物质性及发展规律(唯物论+辩证法)](#第1章-世界的物质性及发展规律)
|
||||||
3. [第2章 实践与认识及其发展规律(认识论)](#第2章-实践与认识及其发展规律)
|
3. [第2章 实践与认识及其发展规律(认识论)](#第2章-实践与认识及其发展规律)
|
||||||
4. [第3章 人类社会及其发展规律(唯物史观)](#第3章-人类社会及其发展规律)
|
4. [第3章 人类社会及其发展规律(唯物史观)](#第3章-人类社会及其发展规律)
|
||||||
5. [第4章 资本主义的本质及规律(政治经济学)](#第4章-资本主义的本质及规律)
|
5. [第4章 资本主义的本质及规律(政治经济学)](#第4章-资本主义的本质及规律)
|
||||||
6. [第6章 社会主义的发展及其规律](#第6章-社会主义的发展及其规律)
|
6. [第6章 社会主义的发展及其规律](#第6章-社会主义的发展及其规律)
|
||||||
7. [附录:高频概念速记清单](#附录高频概念速记清单)
|
7. [附录:高频概念速记清单](#附录高频概念速记清单)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="导论什么是马克思主义"></a>导论:什么是马克思主义
|
## <a id="导论什么是马克思主义"></a>导论:什么是马克思主义
|
||||||
|
|
||||||
**1. 马克思主义的创立与发展**
|
**1. 马克思主义的创立与发展**
|
||||||
* **创立者**:由马克思、恩格斯创立,并由后继者(列宁、毛泽东、邓小平等)不断发展。
|
* **创立者**:由马克思、恩格斯创立,并由后继者(列宁、毛泽东、邓小平等)不断发展。
|
||||||
* **两个伟大理论发现**:**唯物史观**(历史唯物主义)和**剩余价值学说**。这是马克思一生的两个伟大发现。
|
* **两个伟大理论发现**:**唯物史观**(历史唯物主义)和**剩余价值学说**。这是马克思一生的两个伟大发现。
|
||||||
* **理论来源**:
|
* **理论来源**:
|
||||||
1. 德国古典哲学
|
1. 德国古典哲学
|
||||||
2. 英国古典政治经济学
|
2. 英国古典政治经济学
|
||||||
3. 英法空想社会主义
|
3. 英法空想社会主义
|
||||||
* **研究对象**:关于自然、社会和人类思维发展**一般规律**的学说。
|
* **研究对象**:关于自然、社会和人类思维发展**一般规律**的学说。
|
||||||
* **三大组成部分**:
|
* **三大组成部分**:
|
||||||
1. **马克思主义哲学**(世界观与方法论基础)
|
1. **马克思主义哲学**(世界观与方法论基础)
|
||||||
2. **马克思主义政治经济学**(揭示资本主义主要矛盾)
|
2. **马克思主义政治经济学**(揭示资本主义主要矛盾)
|
||||||
3. **科学社会主义**(核心与归宿)
|
3. **科学社会主义**(核心与归宿)
|
||||||
|
|
||||||
**2. 马克思主义的鲜明特征**
|
**2. 马克思主义的鲜明特征**
|
||||||
* **科学性**:以事实为依据,以规律为对象,以实践为检验标准。它不仅仅是意识形态,更是客观真理体系。
|
* **科学性**:以事实为依据,以规律为对象,以实践为检验标准。它不仅仅是意识形态,更是客观真理体系。
|
||||||
* **人民性**(本质属性):马克思主义是“为绝大多数人谋利益”的理论。人民至上是其根本政治立场。
|
* **人民性**(本质属性):马克思主义是“为绝大多数人谋利益”的理论。人民至上是其根本政治立场。
|
||||||
* **实践性**:从实践中来,到实践中去。**实践性是马克思主义区别于其他理论的显著特征**。
|
* **实践性**:从实践中来,到实践中去。**实践性是马克思主义区别于其他理论的显著特征**。
|
||||||
* **发展性**:具有与时俱进的理论品质。
|
* **发展性**:具有与时俱进的理论品质。
|
||||||
|
|
||||||
**3. 当代价值**
|
**3. 当代价值**
|
||||||
* **观察世界的认识工具**:给予我们观察当代世界的宏大视野,透视时代风云的锐利目光,展望未来世界的长远眼光和战略定力。
|
* **观察世界的认识工具**:给予我们观察当代世界的宏大视野,透视时代风云的锐利目光,展望未来世界的长远眼光和战略定力。
|
||||||
* **行动指南**:坚持马克思主义基本原理同中国具体实际相结合、同中华优秀传统文化相结合(“两个结合”)。它是指引当代中国发展的精神旗帜和行动指南。
|
* **行动指南**:坚持马克思主义基本原理同中国具体实际相结合、同中华优秀传统文化相结合(“两个结合”)。它是指引当代中国发展的精神旗帜和行动指南。
|
||||||
* **科学真理**:引领人类社会进步。世界仍处于马克思主义所指明的从资本主义走向社会主义的大时代。
|
* **科学真理**:引领人类社会进步。世界仍处于马克思主义所指明的从资本主义走向社会主义的大时代。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="第1章-世界的物质性及发展规律"></a>第1章 世界的物质性及发展规律(唯物论+辩证法)
|
## <a id="第1章-世界的物质性及发展规律"></a>第1章 世界的物质性及发展规律(唯物论+辩证法)
|
||||||
|
|
||||||
### 一、 物质及其存在方式(唯物论核心)
|
### 一、 物质及其存在方式(唯物论核心)
|
||||||
|
|
||||||
**1. 哲学的基本问题**
|
**1. 哲学的基本问题**
|
||||||
* **内容**:思维和存在的关系问题。
|
* **内容**:思维和存在的关系问题。
|
||||||
* **两个方面**:
|
* **两个方面**:
|
||||||
1. **本原问题**:思维和存在、物质和意识谁为本原(划分唯物主义和唯心主义)。
|
1. **本原问题**:思维和存在、物质和意识谁为本原(划分唯物主义和唯心主义)。
|
||||||
2. **同一性问题**:思维和存在、物质和意识是否具有同一性(划分可知论和不可知论)。
|
2. **同一性问题**:思维和存在、物质和意识是否具有同一性(划分可知论和不可知论)。
|
||||||
|
|
||||||
**2. 物质的定义**
|
**2. 物质的定义**
|
||||||
* **列宁的物质定义**:“物质是标志客观实在的哲学范畴,这种客观实在是人通过感觉感知的,它不依赖于我们的感觉而存在,为我们的感觉所复写、摄影、反映。”
|
* **列宁的物质定义**:“物质是标志客观实在的哲学范畴,这种客观实在是人通过感觉感知的,它不依赖于我们的感觉而存在,为我们的感觉所复写、摄影、反映。”
|
||||||
* **核心**:物质的唯一特性是**客观实在性**。
|
* **核心**:物质的唯一特性是**客观实在性**。
|
||||||
|
|
||||||
**3. 物质与运动**
|
**3. 物质与运动**
|
||||||
* **运动是物质的根本属性**:物质是运动的承担者,运动是物质的存在方式。
|
* **运动是物质的根本属性**:物质是运动的承担者,运动是物质的存在方式。
|
||||||
* **不可分割**:
|
* **不可分割**:
|
||||||
* 脱离物质的运动是唯心主义(如“绝对精神”的运动)。
|
* 脱离物质的运动是唯心主义(如“绝对精神”的运动)。
|
||||||
* 脱离运动的物质是形而上学(机械唯物主义)。
|
* 脱离运动的物质是形而上学(机械唯物主义)。
|
||||||
|
|
||||||
**4. 运动与静止**
|
**4. 运动与静止**
|
||||||
* **绝对运动**:运动是无条件的、永恒的。
|
* **绝对运动**:运动是无条件的、永恒的。
|
||||||
* **相对静止**:运动的特殊状态(空间位置相对不变或事物性质相对稳定)。
|
* **相对静止**:运动的特殊状态(空间位置相对不变或事物性质相对稳定)。
|
||||||
* **关系**:动中有静,静中有动。**承认相对静止是衡量事物、区分事物的必要前提**。
|
* **关系**:动中有静,静中有动。**承认相对静止是衡量事物、区分事物的必要前提**。
|
||||||
|
|
||||||
**5. 时空观**
|
**5. 时空观**
|
||||||
* **时间**:一维性(不可逆)、持续性。
|
* **时间**:一维性(不可逆)、持续性。
|
||||||
* **空间**:三维性、广延性。
|
* **空间**:三维性、广延性。
|
||||||
* **客观性与相对性**:时空是客观的,但其具体度量随物质运动状态变化(如相对论指出高速运动下尺缩钟慢),体现了**物质、运动、时空的内在统一**。
|
* **客观性与相对性**:时空是客观的,但其具体度量随物质运动状态变化(如相对论指出高速运动下尺缩钟慢),体现了**物质、运动、时空的内在统一**。
|
||||||
* **方法论**:一切以时间、地点、条件为转移。
|
* **方法论**:一切以时间、地点、条件为转移。
|
||||||
|
|
||||||
### 二、 意识及其能动作用
|
### 二、 意识及其能动作用
|
||||||
|
|
||||||
**1. 意识的起源与本质**
|
**1. 意识的起源与本质**
|
||||||
* **起源**:自然界长期发展的产物,更是**社会历史**的产物(劳动起了决定性作用)。
|
* **起源**:自然界长期发展的产物,更是**社会历史**的产物(劳动起了决定性作用)。
|
||||||
* **本质**:
|
* **本质**:
|
||||||
* 人脑是意识的器官(生理基础)。
|
* 人脑是意识的器官(生理基础)。
|
||||||
* 意识是**客观世界的主观映象**(内容是客观的,形式是主观的)。
|
* 意识是**客观世界的主观映象**(内容是客观的,形式是主观的)。
|
||||||
|
|
||||||
**2. 意识的能动作用(反作用)**
|
**2. 意识的能动作用(反作用)**
|
||||||
* **表现**:
|
* **表现**:
|
||||||
1. **目的性与计划性**:人在行动前在大脑中已有蓝图。
|
1. **目的性与计划性**:人在行动前在大脑中已有蓝图。
|
||||||
2. **创造性**:不仅反映事物的现象,还能揭示本质(由此及彼、由表及里)。
|
2. **创造性**:不仅反映事物的现象,还能揭示本质(由此及彼、由表及里)。
|
||||||
3. **指导实践**:通过实践把观念的东西变成现实的东西(最突出的表现)。
|
3. **指导实践**:通过实践把观念的东西变成现实的东西(最突出的表现)。
|
||||||
4. **调控作用**:控制人的生理活动和行为。
|
4. **调控作用**:控制人的生理活动和行为。
|
||||||
* **原则**:主观能动性的发挥必须以**尊重客观规律**为前提。
|
* **原则**:主观能动性的发挥必须以**尊重客观规律**为前提。
|
||||||
|
|
||||||
**3. 人工智能 vs 人类意识**
|
**3. 人工智能 vs 人类意识**
|
||||||
* **结论**:人工智能不会具有人类意识,不会超越和取代人类智能。
|
* **结论**:人工智能不会具有人类意识,不会超越和取代人类智能。
|
||||||
* **区别**:
|
* **区别**:
|
||||||
1. **知情意统一**:人类意识是知情意的统一体,AI只是对人类理性智能的模拟。
|
1. **知情意统一**:人类意识是知情意的统一体,AI只是对人类理性智能的模拟。
|
||||||
2. **社会性**:社会性是人的意识所固有的本质属性,AI不具备社会属性。
|
2. **社会性**:社会性是人的意识所固有的本质属性,AI不具备社会属性。
|
||||||
3. **语言与理解**:人类自然语言是思维的物质外壳,AI难以具备理解自然语言真实意义的能力。
|
3. **语言与理解**:人类自然语言是思维的物质外壳,AI难以具备理解自然语言真实意义的能力。
|
||||||
|
|
||||||
### 三、 主观能动性与客观规律性的辩证统一
|
### 三、 主观能动性与客观规律性的辩证统一
|
||||||
|
|
||||||
* **关系**:
|
* **关系**:
|
||||||
* **尊重客观规律是前提**:不违背规律才能成功。人们创造历史不是随心所欲,而是遵循历史的规律。
|
* **尊重客观规律是前提**:不违背规律才能成功。人们创造历史不是随心所欲,而是遵循历史的规律。
|
||||||
* **发挥主观能动性是条件**:规律必须通过人的自觉活动才能被认识和利用。
|
* **发挥主观能动性是条件**:规律必须通过人的自觉活动才能被认识和利用。
|
||||||
* **正确发挥的条件**:
|
* **正确发挥的条件**:
|
||||||
1. **从实际出发**(根本立足点)。
|
1. **从实际出发**(根本立足点)。
|
||||||
2. **实践**(基本途径,将“想”转化为“做”)。
|
2. **实践**(基本途径,将“想”转化为“做”)。
|
||||||
3. **依赖物质条件**(巧妇难为无米之炊)。
|
3. **依赖物质条件**(巧妇难为无米之炊)。
|
||||||
|
|
||||||
### 四、 世界的物质统一性
|
### 四、 世界的物质统一性
|
||||||
|
|
||||||
* **原理**:世界的本原是物质,世界统一于物质。
|
* **原理**:世界的本原是物质,世界统一于物质。
|
||||||
* **表现**:自然界是客观的;人类社会本质上是物质的(生产方式是物质的);意识统一于物质。
|
* **表现**:自然界是客观的;人类社会本质上是物质的(生产方式是物质的);意识统一于物质。
|
||||||
* **意义**:是马克思主义哲学的基石,是**一切从实际出发、实事求是**的思想路线的哲学基础。
|
* **意义**:是马克思主义哲学的基石,是**一切从实际出发、实事求是**的思想路线的哲学基础。
|
||||||
|
|
||||||
### 五、 唯物辩证法的三大规律
|
### 五、 唯物辩证法的三大规律
|
||||||
|
|
||||||
**1. 对立统一规律(矛盾规律)—— 核心与实质**
|
**1. 对立统一规律(矛盾规律)—— 核心与实质**
|
||||||
* **地位**:唯物辩证法的**根本规律**,揭示了事物发展的**源泉和动力**。
|
* **地位**:唯物辩证法的**根本规律**,揭示了事物发展的**源泉和动力**。
|
||||||
* **矛盾的同一性与斗争性**:
|
* **矛盾的同一性与斗争性**:
|
||||||
* **同一性**:相互依存、相互贯通(在一定条件下相互转化)。
|
* **同一性**:相互依存、相互贯通(在一定条件下相互转化)。
|
||||||
* **同一性的作用**:
|
* **同一性的作用**:
|
||||||
1. 是事物存在和发展的前提。
|
1. 是事物存在和发展的前提。
|
||||||
2. 使矛盾双方相互吸取有利于自身的因素,在相互作用中各自得到发展。
|
2. 使矛盾双方相互吸取有利于自身的因素,在相互作用中各自得到发展。
|
||||||
3. 规定事物转化的可能和发展的趋势。
|
3. 规定事物转化的可能和发展的趋势。
|
||||||
* **斗争性**:相互排斥、相互分离。
|
* **斗争性**:相互排斥、相互分离。
|
||||||
* **关系**:**斗争性寓于同一性之中**。没有同一性就没有斗争性,没有斗争性也就没有同一性。
|
* **关系**:**斗争性寓于同一性之中**。没有同一性就没有斗争性,没有斗争性也就没有同一性。
|
||||||
* **矛盾的普遍性与特殊性**:
|
* **矛盾的普遍性与特殊性**:
|
||||||
* **普遍性**:事事有矛盾,时时有矛盾(承认矛盾)。
|
* **普遍性**:事事有矛盾,时时有矛盾(承认矛盾)。
|
||||||
* **特殊性**:具体问题具体分析(马克思主义活的灵魂)。
|
* **特殊性**:具体问题具体分析(马克思主义活的灵魂)。
|
||||||
* **表现**:不同事物的矛盾不同;同一矛盾在不同阶段不同;矛盾双方地位不同(主要矛盾/次要矛盾,矛盾的主要方面/次要方面)。
|
* **表现**:不同事物的矛盾不同;同一矛盾在不同阶段不同;矛盾双方地位不同(主要矛盾/次要矛盾,矛盾的主要方面/次要方面)。
|
||||||
* **方法论**:坚持“两点论”和“重点论”的统一。
|
* **方法论**:坚持“两点论”和“重点论”的统一。
|
||||||
|
|
||||||
**2. 量变质变规律**
|
**2. 量变质变规律**
|
||||||
* **揭示**:事物发展的**形式和状态**。
|
* **揭示**:事物发展的**形式和状态**。
|
||||||
* **内容**:
|
* **内容**:
|
||||||
* **量变**:数量增减或场所变更(渐进性、连续性)。
|
* **量变**:数量增减或场所变更(渐进性、连续性)。
|
||||||
* **质变**:根本性质的变化(飞跃性、断裂性)。
|
* **质变**:根本性质的变化(飞跃性、断裂性)。
|
||||||
* **关系**:量变是质变的必要准备;质变是量变的必然结果;量变质变相互渗透(总的量变中有阶段性部分质变)。
|
* **关系**:量变是质变的必要准备;质变是量变的必然结果;量变质变相互渗透(总的量变中有阶段性部分质变)。
|
||||||
* **方法论**:注重量的积累(适度原则),抓住机遇促成质变(底线思维)。
|
* **方法论**:注重量的积累(适度原则),抓住机遇促成质变(底线思维)。
|
||||||
|
|
||||||
**3. 否定之否定规律**
|
**3. 否定之否定规律**
|
||||||
* **揭示**:事物发展的**方向和道路**(螺旋式上升,波浪式前进)。
|
* **揭示**:事物发展的**方向和道路**(螺旋式上升,波浪式前进)。
|
||||||
* **辩证否定观**:
|
* **辩证否定观**:
|
||||||
* **自我否定**:事物内部矛盾运动的结果。
|
* **自我否定**:事物内部矛盾运动的结果。
|
||||||
* **实质是“扬弃”**:既克服又保留(批判继承)。
|
* **实质是“扬弃”**:既克服又保留(批判继承)。
|
||||||
* *错误观点*:肯定一切(复古论)或否定一切(虚无主义)。
|
* *错误观点*:肯定一切(复古论)或否定一切(虚无主义)。
|
||||||
|
|
||||||
### 六、 联系与发展的基本环节(补充)
|
### 六、 联系与发展的基本环节(补充)
|
||||||
|
|
||||||
**1. 辨别新旧事物**
|
**1. 辨别新旧事物**
|
||||||
* **标准**:是否符合历史前进方向、具有远大前途。
|
* **标准**:是否符合历史前进方向、具有远大前途。
|
||||||
* **误区**:不是看出现时间的先后,也不看形式的新旧。
|
* **误区**:不是看出现时间的先后,也不看形式的新旧。
|
||||||
|
|
||||||
**2. 辩证思维方法**
|
**2. 辩证思维方法**
|
||||||
* 归纳和演绎、分析和综合、抽象和具体、逻辑和历史相统一。
|
* 归纳和演绎、分析和综合、抽象和具体、逻辑和历史相统一。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="第2章-实践与认识及其发展规律"></a>第2章 实践与认识及其发展规律(认识论)
|
## <a id="第2章-实践与认识及其发展规律"></a>第2章 实践与认识及其发展规律(认识论)
|
||||||
|
|
||||||
### 一、 实践的本质与基本特征
|
### 一、 实践的本质与基本特征
|
||||||
|
|
||||||
* **定义**:实践是人类能动地改造世界的**社会性的物质活动**。
|
* **定义**:实践是人类能动地改造世界的**社会性的物质活动**。
|
||||||
* **基本特征**:
|
* **基本特征**:
|
||||||
1. **客观现实性**:构成要素(主体、客体、中介)和结果都是客观的。**这区别于纯粹的精神活动**。
|
1. **客观现实性**:构成要素(主体、客体、中介)和结果都是客观的。**这区别于纯粹的精神活动**。
|
||||||
2. **自觉能动性**:受意识指导,有目的。**这区别于动物的本能活动**。
|
2. **自觉能动性**:受意识指导,有目的。**这区别于动物的本能活动**。
|
||||||
3. **社会历史性**:在一定社会关系中进行,受历史条件限制。
|
3. **社会历史性**:在一定社会关系中进行,受历史条件限制。
|
||||||
* **基本形式**:物质生产实践(最基本)、社会政治实践、科学文化实践。
|
* **基本形式**:物质生产实践(最基本)、社会政治实践、科学文化实践。
|
||||||
|
|
||||||
### 二、 实践对认识的决定作用(实践是认识的基础)
|
### 二、 实践对认识的决定作用(实践是认识的基础)
|
||||||
|
|
||||||
1. **实践是认识的来源**:一切真知来源于实践(直接经验)。通过实践才能把握对象的本质和规律。
|
1. **实践是认识的来源**:一切真知来源于实践(直接经验)。通过实践才能把握对象的本质和规律。
|
||||||
2. **实践是认识发展的动力**:
|
2. **实践是认识发展的动力**:
|
||||||
* 实践不断提出新问题。
|
* 实践不断提出新问题。
|
||||||
* 实践提供新的认识工具(如望远镜、显微镜)。
|
* 实践提供新的认识工具(如望远镜、显微镜)。
|
||||||
* 实践锻炼人的思维能力。
|
* 实践锻炼人的思维能力。
|
||||||
3. **实践是检验真理的唯一标准**:主观不能检验主观,客观不能检验客观,只有连接主客体的**实践**才能检验。
|
3. **实践是检验真理的唯一标准**:主观不能检验主观,客观不能检验客观,只有连接主客体的**实践**才能检验。
|
||||||
4. **实践是认识的目的**:认识世界的目的是为了改造世界。
|
4. **实践是认识的目的**:认识世界的目的是为了改造世界。
|
||||||
|
|
||||||
### 三、 认识的本质与过程
|
### 三、 认识的本质与过程
|
||||||
|
|
||||||
**1. 辩证唯物主义认识论的两个特点**
|
**1. 辩证唯物主义认识论的两个特点**
|
||||||
* 把**实践**的观点引入认识论。
|
* 把**实践**的观点引入认识论。
|
||||||
* 把**辩证法**应用于反映论,考察认识的发展过程。
|
* 把**辩证法**应用于反映论,考察认识的发展过程。
|
||||||
|
|
||||||
**2. 认识的本质**
|
**2. 认识的本质**
|
||||||
* **主体在实践基础上对客体的能动反映**。
|
* **主体在实践基础上对客体的能动反映**。
|
||||||
* **反映性**:以客观事物为原型。
|
* **反映性**:以客观事物为原型。
|
||||||
* **创造性**:在思维中能动地创造(不仅反映现象,更把握本质)。
|
* **创造性**:在思维中能动地创造(不仅反映现象,更把握本质)。
|
||||||
|
|
||||||
**3. 认识的过程(两次飞跃)**
|
**3. 认识的过程(两次飞跃)**
|
||||||
* **第一次飞跃:感性认识 -> 理性认识**
|
* **第一次飞跃:感性认识 -> 理性认识**
|
||||||
* **感性认识的三种形式**:感觉、知觉、表象。
|
* **感性认识的三种形式**:感觉、知觉、表象。
|
||||||
* **条件**:
|
* **条件**:
|
||||||
1. 投身实践,获取丰富、合乎实际的感性材料。
|
1. 投身实践,获取丰富、合乎实际的感性材料。
|
||||||
2. 经过思考(去粗取精、去伪存真、由此及彼、由表及里),形成概念和理论。
|
2. 经过思考(去粗取精、去伪存真、由此及彼、由表及里),形成概念和理论。
|
||||||
* **第二次飞跃:理性认识 -> 实践**(更为重要)
|
* **第二次飞跃:理性认识 -> 实践**(更为重要)
|
||||||
* 原因:认识需回到实践中检验和发展;认识需指导实践改造世界。
|
* 原因:认识需回到实践中检验和发展;认识需指导实践改造世界。
|
||||||
|
|
||||||
### 四、 真理与谬误
|
### 四、 真理与谬误
|
||||||
|
|
||||||
* **真理的属性**:
|
* **真理的属性**:
|
||||||
* **客观性**:内容是客观的(不以人的意志为转移)。
|
* **客观性**:内容是客观的(不以人的意志为转移)。
|
||||||
* **绝对性**:承认客观真理,且人类认识能力无限。
|
* **绝对性**:承认客观真理,且人类认识能力无限。
|
||||||
* **相对性**:在一定条件下,认识的广度和深度是有限的。
|
* **相对性**:在一定条件下,认识的广度和深度是有限的。
|
||||||
* **关系**:绝对性与相对性辩证统一,绝对之中有相对,相对之中有绝对。
|
* **关系**:绝对性与相对性辩证统一,绝对之中有相对,相对之中有绝对。
|
||||||
* **实践标准的确定性与不确定性**
|
* **实践标准的确定性与不确定性**
|
||||||
* **确定性(绝对性)**:实践是检验真理的唯一标准,不可替代。
|
* **确定性(绝对性)**:实践是检验真理的唯一标准,不可替代。
|
||||||
* **不确定性(相对性)**:任何实践都受历史条件限制,具有局限性。
|
* **不确定性(相对性)**:任何实践都受历史条件限制,具有局限性。
|
||||||
* **真理与谬误的关系**:
|
* **真理与谬误的关系**:
|
||||||
* 对立统一。在一定范围内界限绝对,超出范围则可能转化。
|
* 对立统一。在一定范围内界限绝对,超出范围则可能转化。
|
||||||
* 真理往往是在同谬误的斗争中发展的。
|
* 真理往往是在同谬误的斗争中发展的。
|
||||||
|
|
||||||
### 五、 价值与价值观
|
### 五、 价值与价值观
|
||||||
|
|
||||||
* **价值**:客体对主体的有用性。
|
* **价值**:客体对主体的有用性。
|
||||||
* **特性**:
|
* **特性**:
|
||||||
* **主体性**:取决于主体的需要(不同人对同一事物价值判断不同)。
|
* **主体性**:取决于主体的需要(不同人对同一事物价值判断不同)。
|
||||||
* **客观性**:依赖于客体的固有属性。
|
* **客观性**:依赖于客体的固有属性。
|
||||||
* **真理与价值的统一**:
|
* **真理与价值的统一**:
|
||||||
* 成功的实践必须既符合**真理尺度**(按规律办事),又符合**价值尺度**(满足人的需要)。
|
* 成功的实践必须既符合**真理尺度**(按规律办事),又符合**价值尺度**(满足人的需要)。
|
||||||
* **社会主义核心价值观**
|
* **社会主义核心价值观**
|
||||||
* **国家层面**:富强、民主、文明、和谐。
|
* **国家层面**:富强、民主、文明、和谐。
|
||||||
* **社会层面**:自由、平等、公正、法治。
|
* **社会层面**:自由、平等、公正、法治。
|
||||||
* **个人层面**:爱国、敬业、诚信、友善。
|
* **个人层面**:爱国、敬业、诚信、友善。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="第3章-人类社会及其发展规律"></a>第3章 人类社会及其发展规律(唯物史观)
|
## <a id="第3章-人类社会及其发展规律"></a>第3章 人类社会及其发展规律(唯物史观)
|
||||||
|
|
||||||
### 一、 社会存在与社会意识
|
### 一、 社会存在与社会意识
|
||||||
|
|
||||||
* **社会存在**(物质方面):
|
* **社会存在**(物质方面):
|
||||||
* 地理环境、人口因素(必要条件,但不起决定作用)。
|
* 地理环境、人口因素(必要条件,但不起决定作用)。
|
||||||
* **物质生产方式**(生产力+生产关系):**决定力量**。
|
* **物质生产方式**(生产力+生产关系):**决定力量**。
|
||||||
* **社会意识**(精神方面):
|
* **社会意识**(精神方面):
|
||||||
* **意识形态**(含阶级性):政治法律思想、道德、艺术、宗教、哲学等。
|
* **意识形态**(含阶级性):政治法律思想、道德、艺术、宗教、哲学等。
|
||||||
* **非意识形态**:自然科学、语言学、逻辑学(无阶级性)。
|
* **非意识形态**:自然科学、语言学、逻辑学(无阶级性)。
|
||||||
* **辩证关系**:
|
* **辩证关系**:
|
||||||
* 社会存在决定社会意识(来源、随之变化)。
|
* 社会存在决定社会意识(来源、随之变化)。
|
||||||
* 社会意识具有**相对独立性**:
|
* 社会意识具有**相对独立性**:
|
||||||
* 发展具有不完全同步性(可能超前或滞后)。
|
* 发展具有不完全同步性(可能超前或滞后)。
|
||||||
* 内部各形式间相互影响。
|
* 内部各形式间相互影响。
|
||||||
* 具有历史继承性。
|
* 具有历史继承性。
|
||||||
* **最突出的表现**:对社会存在具有**能动反作用**(先进的意识促进发展,落后的阻碍)。
|
* **最突出的表现**:对社会存在具有**能动反作用**(先进的意识促进发展,落后的阻碍)。
|
||||||
|
|
||||||
### 二、 社会基本矛盾(根本动力)
|
### 二、 社会基本矛盾(根本动力)
|
||||||
|
|
||||||
1. **生产力 vs 生产关系**:
|
1. **生产力 vs 生产关系**:
|
||||||
* **生产力要素**:劳动资料、劳动对象、劳动者(+科学技术)。
|
* **生产力要素**:劳动资料、劳动对象、劳动者(+科学技术)。
|
||||||
* **生产关系要素**:生产资料所有制(决定性)、生产中人与人的关系、产品分配关系。
|
* **生产关系要素**:生产资料所有制(决定性)、生产中人与人的关系、产品分配关系。
|
||||||
* **作用**:物质生产方式是社会发展的决定力量。
|
* **作用**:物质生产方式是社会发展的决定力量。
|
||||||
2. **经济基础 vs 上层建筑**:
|
2. **经济基础 vs 上层建筑**:
|
||||||
* **经济基础**:占统治地位的生产关系的总和。
|
* **经济基础**:占统治地位的生产关系的总和。
|
||||||
* **上层建筑**:观念上层建筑(意识形态)+ 政治上层建筑(制度、组织、设施)。
|
* **上层建筑**:观念上层建筑(意识形态)+ 政治上层建筑(制度、组织、设施)。
|
||||||
* **关系**:经济基础决定上层建筑;上层建筑反作用于经济基础(为经济基础服务)。
|
* **关系**:经济基础决定上层建筑;上层建筑反作用于经济基础(为经济基础服务)。
|
||||||
* 当上层建筑适合经济基础时,推动社会发展;反之阻碍。
|
* 当上层建筑适合经济基础时,推动社会发展;反之阻碍。
|
||||||
|
|
||||||
### 三、 社会发展的动力系统
|
### 三、 社会发展的动力系统
|
||||||
|
|
||||||
* **根本动力**:社会基本矛盾。
|
* **根本动力**:社会基本矛盾。
|
||||||
* 生产力和生产关系的矛盾决定着社会中其他矛盾的存在和发展。
|
* 生产力和生产关系的矛盾决定着社会中其他矛盾的存在和发展。
|
||||||
* **直接动力**(在阶级社会中):**阶级斗争**。
|
* **直接动力**(在阶级社会中):**阶级斗争**。
|
||||||
* **重要动力**:改革(社会主义社会的自我完善)、科学技术(革命力量)。
|
* **重要动力**:改革(社会主义社会的自我完善)、科学技术(革命力量)。
|
||||||
* **交往(Interaction)的作用**:
|
* **交往(Interaction)的作用**:
|
||||||
* 促进生产力发展。
|
* 促进生产力发展。
|
||||||
* 促进社会关系进步。
|
* 促进社会关系进步。
|
||||||
* 促进文化发展与传播。
|
* 促进文化发展与传播。
|
||||||
* 促进人的全面发展。
|
* 促进人的全面发展。
|
||||||
* **文化的作用**:提供思想保证、精神动力、智力支持、凝聚力量。
|
* **文化的作用**:提供思想保证、精神动力、智力支持、凝聚力量。
|
||||||
|
|
||||||
### 四、 人民群众在历史中的作用
|
### 四、 人民群众在历史中的作用
|
||||||
|
|
||||||
* **唯物史观 vs 唯心史观**:
|
* **唯物史观 vs 唯心史观**:
|
||||||
* 唯物史观:**人民群众是历史的创造者**。
|
* 唯物史观:**人民群众是历史的创造者**。
|
||||||
* 唯心史观:英雄史观(帝王将相决定历史)。
|
* 唯心史观:英雄史观(帝王将相决定历史)。
|
||||||
* **人民群众的作用**:
|
* **人民群众的作用**:
|
||||||
1. 社会物质财富的创造者。
|
1. 社会物质财富的创造者。
|
||||||
2. 社会精神财富的创造者。
|
2. 社会精神财富的创造者。
|
||||||
3. 社会变革的决定力量。
|
3. 社会变革的决定力量。
|
||||||
* **群众、阶级、政党、领袖的关系**:
|
* **群众、阶级、政党、领袖的关系**:
|
||||||
* 构成一个有机整体。
|
* 构成一个有机整体。
|
||||||
* 群众是划分为阶级的。
|
* 群众是划分为阶级的。
|
||||||
* 阶级通常由政党领导。
|
* 阶级通常由政党领导。
|
||||||
* 政党由领袖主持。
|
* 政党由领袖主持。
|
||||||
* **个人/杰出人物的作用**:可以加速或延缓历史进程,但不能改变历史发展的总趋势。
|
* **个人/杰出人物的作用**:可以加速或延缓历史进程,但不能改变历史发展的总趋势。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="第4章-资本主义的本质及规律"></a>第4章 资本主义的本质及规律(政治经济学)
|
## <a id="第4章-资本主义的本质及规律"></a>第4章 资本主义的本质及规律(政治经济学)
|
||||||
|
|
||||||
### 一、 商品经济与价值规律
|
### 一、 商品经济与价值规律
|
||||||
|
|
||||||
**1. 商品经济出现的两个条件**
|
**1. 商品经济出现的两个条件**
|
||||||
* **存在社会分工**。
|
* **存在社会分工**。
|
||||||
* **生产资料和劳动产品属于不同的所有者**(决定性条件)。
|
* **生产资料和劳动产品属于不同的所有者**(决定性条件)。
|
||||||
|
|
||||||
**2. 商品二因素**
|
**2. 商品二因素**
|
||||||
* **使用价值**:商品的自然属性,满足人的某种需要。反映人与自然的关系。
|
* **使用价值**:商品的自然属性,满足人的某种需要。反映人与自然的关系。
|
||||||
* **价值**:商品的社会属性,凝结在商品中的无差别的一般人类劳动。
|
* **价值**:商品的社会属性,凝结在商品中的无差别的一般人类劳动。
|
||||||
* **关系**:对立统一。商品交换者必须让渡使用价值才能获得价值;二者不可兼得。
|
* **关系**:对立统一。商品交换者必须让渡使用价值才能获得价值;二者不可兼得。
|
||||||
|
|
||||||
**3. 劳动二重性(理解政治经济学的枢纽)**
|
**3. 劳动二重性(理解政治经济学的枢纽)**
|
||||||
* **具体劳动**:生产不同使用价值(如木匠做桌子)。反映人与自然的关系(自然属性)。
|
* **具体劳动**:生产不同使用价值(如木匠做桌子)。反映人与自然的关系(自然属性)。
|
||||||
* **抽象劳动**:形成价值实体(耗费的体力和脑力)。反映商品生产者的社会关系(社会属性)。
|
* **抽象劳动**:形成价值实体(耗费的体力和脑力)。反映商品生产者的社会关系(社会属性)。
|
||||||
* **结论**:**同一劳动过程的两个方面**,不是两次劳动。
|
* **结论**:**同一劳动过程的两个方面**,不是两次劳动。
|
||||||
|
|
||||||
**4. 价值规律**
|
**4. 价值规律**
|
||||||
* **内容**:商品的价值量由**社会必要劳动时间**决定;商品按照价值量进行**等价交换**。
|
* **内容**:商品的价值量由**社会必要劳动时间**决定;商品按照价值量进行**等价交换**。
|
||||||
* **表现形式**:价格围绕价值上下波动。
|
* **表现形式**:价格围绕价值上下波动。
|
||||||
* **作用**:调节资源配置;刺激生产力发展;导致优胜劣汰和贫富分化。
|
* **作用**:调节资源配置;刺激生产力发展;导致优胜劣汰和贫富分化。
|
||||||
|
|
||||||
### 二、 资本主义经济制度的本质
|
### 二、 资本主义经济制度的本质
|
||||||
|
|
||||||
**1. 资本原始积累**
|
**1. 资本原始积累**
|
||||||
* **定义**:用暴力手段使生产者和生产资料分离,资本迅速集中在少数人手中。
|
* **定义**:用暴力手段使生产者和生产资料分离,资本迅速集中在少数人手中。
|
||||||
* **途径**:
|
* **途径**:
|
||||||
1. 用暴力手段掠夺农民的土地。
|
1. 用暴力手段掠夺农民的土地。
|
||||||
2. 用暴力手段掠夺货币财富。
|
2. 用暴力手段掠夺货币财富。
|
||||||
|
|
||||||
**2. 劳动力成为商品**
|
**2. 劳动力成为商品**
|
||||||
* **条件**:
|
* **条件**:
|
||||||
1. 劳动者在法律上是自由人。
|
1. 劳动者在法律上是自由人。
|
||||||
2. 劳动者没有任何生产资料,不得不出卖劳动力。
|
2. 劳动者没有任何生产资料,不得不出卖劳动力。
|
||||||
* **特点**:劳动力商品的使用价值是**价值的源泉**。它在消费过程中能创造出比自身价值更大的价值(即剩余价值)。
|
* **特点**:劳动力商品的使用价值是**价值的源泉**。它在消费过程中能创造出比自身价值更大的价值(即剩余价值)。
|
||||||
|
|
||||||
**3. 剩余价值生产**
|
**3. 剩余价值生产**
|
||||||
* **资本的本质**:不是物,而是体现在物上的**生产关系**(剥削关系)。
|
* **资本的本质**:不是物,而是体现在物上的**生产关系**(剥削关系)。
|
||||||
* **资本主义生产过程**:劳动过程 + **价值增殖过程**(核心)。
|
* **资本主义生产过程**:劳动过程 + **价值增殖过程**(核心)。
|
||||||
* **剩余价值(m)**:雇佣工人创造的、被资本家无偿占有的、超过劳动力价值的那部分价值。唯一源泉是**雇佣劳动者的剩余劳动**。
|
* **剩余价值(m)**:雇佣工人创造的、被资本家无偿占有的、超过劳动力价值的那部分价值。唯一源泉是**雇佣劳动者的剩余劳动**。
|
||||||
* **马克思劳动价值论的意义**:扬弃了古典政治经济学,为剩余价值论奠基;揭示了商品经济一般规律。
|
* **马克思劳动价值论的意义**:扬弃了古典政治经济学,为剩余价值论奠基;揭示了商品经济一般规律。
|
||||||
|
|
||||||
**4. 资本积累与社会再生产**
|
**4. 资本积累与社会再生产**
|
||||||
* **资本积累**:把剩余价值转化为资本(剩余价值资本化)。
|
* **资本积累**:把剩余价值转化为资本(剩余价值资本化)。
|
||||||
* **社会再生产的核心问题**:**社会总产品的实现问题**。
|
* **社会再生产的核心问题**:**社会总产品的实现问题**。
|
||||||
* 即社会总产品的**价值补偿**和**实物替换**。
|
* 即社会总产品的**价值补偿**和**实物替换**。
|
||||||
|
|
||||||
### 三、 资本主义的矛盾与危机及政治制度
|
### 三、 资本主义的矛盾与危机及政治制度
|
||||||
|
|
||||||
* **基本矛盾**:**生产社会化**与**生产资料资本主义私人占有**之间的矛盾。
|
* **基本矛盾**:**生产社会化**与**生产资料资本主义私人占有**之间的矛盾。
|
||||||
* **经济危机**:
|
* **经济危机**:
|
||||||
* **本质**:**生产相对过剩**(相对于劳动人民有支付能力的需示而言,不是绝对过剩)。
|
* **本质**:**生产相对过剩**(相对于劳动人民有支付能力的需示而言,不是绝对过剩)。
|
||||||
* **根源**:资本主义基本矛盾。
|
* **根源**:资本主义基本矛盾。
|
||||||
* **资本主义政治制度的局限性**:
|
* **资本主义政治制度的局限性**:
|
||||||
1. **金钱操纵**:实际是资产阶级精英统治下的民主。
|
1. **金钱操纵**:实际是资产阶级精英统治下的民主。
|
||||||
2. **法律名义上的平等**:掩盖着事实上的不平等。
|
2. **法律名义上的平等**:掩盖着事实上的不平等。
|
||||||
3. **政党维护统治**:资产阶级政党是维护资产阶级统治的工具。
|
3. **政党维护统治**:资产阶级政党是维护资产阶级统治的工具。
|
||||||
4. **政党恶斗**:相互掣肘,决策效率低下,激化社会矛盾。
|
4. **政党恶斗**:相互掣肘,决策效率低下,激化社会矛盾。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="第6章-社会主义的发展及其规律"></a>第6章 社会主义的发展及其规律
|
## <a id="第6章-社会主义的发展及其规律"></a>第6章 社会主义的发展及其规律
|
||||||
|
|
||||||
### 一、 社会主义五百年的历史进程
|
### 一、 社会主义五百年的历史进程
|
||||||
* **从空想到科学**:
|
* **从空想到科学**:
|
||||||
* 马克思、恩格斯创立科学社会主义。
|
* 马克思、恩格斯创立科学社会主义。
|
||||||
* 理论基石:唯物史观 + 剩余价值学说。
|
* 理论基石:唯物史观 + 剩余价值学说。
|
||||||
* **从理想到现实**:十月革命(列宁)建立了世界上第一个社会主义国家。
|
* **从理想到现实**:十月革命(列宁)建立了世界上第一个社会主义国家。
|
||||||
* **从一国到多国**:二战后社会主义阵营形成。
|
* **从一国到多国**:二战后社会主义阵营形成。
|
||||||
* **中国特色社会主义**:科学社会主义在中国的成功实践。
|
* **中国特色社会主义**:科学社会主义在中国的成功实践。
|
||||||
|
|
||||||
### 二、 科学社会主义基本原则
|
### 二、 科学社会主义基本原则
|
||||||
1. **历史必然性**:资本主义必然灭亡,社会主义必然胜利。
|
1. **历史必然性**:资本主义必然灭亡,社会主义必然胜利。
|
||||||
2. **领导核心**:无产阶级及其政党(共产党)。
|
2. **领导核心**:无产阶级及其政党(共产党)。
|
||||||
3. **经济基础**:生产资料公有制。
|
3. **经济基础**:生产资料公有制。
|
||||||
4. **价值追求**:消灭剥削,实现共同富裕。
|
4. **价值追求**:消灭剥削,实现共同富裕。
|
||||||
5. **最终目标**:实现共产主义(人的自由而全面的发展)。
|
5. **最终目标**:实现共产主义(人的自由而全面的发展)。
|
||||||
|
|
||||||
### 三、 社会主义发展的规律性
|
### 三、 社会主义发展的规律性
|
||||||
* **长期性**:从资本主义向共产主义过渡是一个漫长的历史过程。
|
* **长期性**:从资本主义向共产主义过渡是一个漫长的历史过程。
|
||||||
* **多样性**:各国国情不同,发展道路必然多样(不能一种模式)。
|
* **多样性**:各国国情不同,发展道路必然多样(不能一种模式)。
|
||||||
* **前进性与曲折性**:事物发展不是直线的,会有波折,但总趋势是前进的。
|
* **前进性与曲折性**:事物发展不是直线的,会有波折,但总趋势是前进的。
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## <a id="附录高频概念速记清单"></a>附录:高频概念速记清单
|
## <a id="附录高频概念速记清单"></a>附录:高频概念速记清单
|
||||||
|
|
||||||
| 概念 | 速记要点 |
|
| 概念 | 速记要点 |
|
||||||
| :--- | :--- |
|
| :--- | :--- |
|
||||||
| **马克思主义三大部分** | 哲学(世界观)、政治经济学(解剖)、科学社会主义(核心) |
|
| **马克思主义三大部分** | 哲学(世界观)、政治经济学(解剖)、科学社会主义(核心) |
|
||||||
| **物质根本属性** | 运动(运动绝对,静止相对) |
|
| **物质根本属性** | 运动(运动绝对,静止相对) |
|
||||||
| **意识本质** | 人脑机能 + 客观存在的主观映象 |
|
| **意识本质** | 人脑机能 + 客观存在的主观映象 |
|
||||||
| **两大基本特征** | 普遍联系 + 永恒发展 |
|
| **两大基本特征** | 普遍联系 + 永恒发展 |
|
||||||
| **三大规律** | 对立统一(核心)、量变质变(状态)、否定之否定(方向) |
|
| **三大规律** | 对立统一(核心)、量变质变(状态)、否定之否定(方向) |
|
||||||
| **实践三大特征** | 客观现实性、自觉能动性、社会历史性 |
|
| **实践三大特征** | 客观现实性、自觉能动性、社会历史性 |
|
||||||
| **真理特性** | 客观性、绝对性、相对性 |
|
| **真理特性** | 客观性、绝对性、相对性 |
|
||||||
| **社会历史观基本问题** | 社会存在 vs 社会意识 |
|
| **社会历史观基本问题** | 社会存在 vs 社会意识 |
|
||||||
| **社会发展根本动力** | 社会基本矛盾(生产力vs生产关系、经基vs上建) |
|
| **社会发展根本动力** | 社会基本矛盾(生产力vs生产关系、经基vs上建) |
|
||||||
| **商品二因素** | 使用价值(自然属性) + 价值(社会属性) |
|
| **商品二因素** | 使用价值(自然属性) + 价值(社会属性) |
|
||||||
| **劳动二重性** | 具体劳动(造物) + 抽象劳动(造价) |
|
| **劳动二重性** | 具体劳动(造物) + 抽象劳动(造价) |
|
||||||
| **剩余价值来源** | 雇佣工人的剩余劳动 |
|
| **剩余价值来源** | 雇佣工人的剩余劳动 |
|
||||||
| **资本主义基本矛盾** | 生产社会化 vs 私人占有 |
|
| **资本主义基本矛盾** | 生产社会化 vs 私人占有 |
|
||||||
|
|||||||
793
package-lock.json
generated
@@ -11,10 +11,11 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@element-plus/icons-vue": "^2.3.1",
|
"@element-plus/icons-vue": "^2.3.1",
|
||||||
"@sugarat/theme": "^0.5.14",
|
"@sugarat/theme": "^0.5.17",
|
||||||
"aplayer": "^1.10.1",
|
"aplayer": "^1.10.1",
|
||||||
"element-plus": "^2.7.2",
|
"element-plus": "^2.7.2",
|
||||||
"gsap": "^3.13.0",
|
"gsap": "^3.13.0",
|
||||||
|
"pnpm": "^10.33.0",
|
||||||
"vue": "3.5.12",
|
"vue": "3.5.12",
|
||||||
"vue3-aplayer": "^1.7.3"
|
"vue3-aplayer": "^1.7.3"
|
||||||
},
|
},
|
||||||
|
|||||||