├── .gitattributes ├── .prettierignore ├── static └── logo.jpeg ├── docs ├── code │ └── index.md ├── public │ └── logo.jpeg ├── .vitepress │ ├── theme │ │ ├── tailwind.css │ │ ├── index.ts │ │ ├── components │ │ │ └── Hero.vue │ │ └── style.scss │ └── config.ts ├── douyin │ ├── book_talk_channel.md │ ├── code_review.md │ ├── salary_increase_course.md │ ├── compulsory_course.md │ └── textbook.md ├── api-examples.md ├── markdown-examples.md ├── index.md └── bilibili │ ├── textbook_review_base_m.md │ ├── open_master_class.md │ └── textbook_review_base.md ├── src ├── constant.ts ├── schedule │ ├── bilibili.ts │ └── douyin.ts ├── douyin │ ├── msToken.ts │ ├── ttwid.ts │ ├── fp.ts │ └── index.ts ├── bilibili │ ├── cookie.ts │ ├── webid.ts │ ├── rid.ts │ └── index.ts ├── util.ts ├── duyi.ts ├── correct.ts ├── generate │ ├── docs.ts │ └── readme.ts ├── playwright │ ├── douyin.ts │ └── bilibili.ts └── user.ts ├── postcss.config.js ├── .editorconfig ├── tailwind.config.js ├── .prettierrc.json ├── data ├── jspd.json ├── new │ ├── jks.json │ ├── txk.json │ ├── bxk.json │ ├── dmyh.json │ └── xxpd.json └── dmyh.json ├── types ├── types.ts └── douyin.d.ts ├── tsconfig.json ├── eslint.config.mjs ├── .gitignore ├── LICENSE ├── .github └── workflows │ └── work.yml └── package.json /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts: 2 | build 3 | coverage 4 | -------------------------------------------------------------------------------- /static/logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lonewolfyx/awesome-duyi/HEAD/static/logo.jpeg -------------------------------------------------------------------------------- /docs/code/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | outline: deep 3 | --- 4 | 5 | # 代码集 6 | 7 | > 努力收集渡一精密代码中,欢迎提交 PR 8 | -------------------------------------------------------------------------------- /docs/public/logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lonewolfyx/awesome-duyi/HEAD/docs/public/logo.jpeg -------------------------------------------------------------------------------- /src/constant.ts: -------------------------------------------------------------------------------- 1 | export const platformType = { 2 | douyin: '抖音', 3 | bilibili: '哔哩哔哩', 4 | } 5 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}] 2 | charset = utf-8 3 | indent_size = 4 4 | indent_style = space 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | 8 | end_of_line = lf 9 | max_line_length = 120 10 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: [ 4 | './docs/**/*.{vue,js,ts,md}', 5 | ], 6 | theme: { 7 | extend: {}, 8 | }, 9 | plugins: [], 10 | corePlugins: { 11 | preflight: false, 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "trailingComma": "none", 5 | "tabWidth": 4, 6 | "endOfLine": "auto", 7 | "printWidth": 120, 8 | "plugins": [ 9 | "prettier-plugin-multiline-arrays" 10 | ], 11 | "multilineArraysWrapThreshold": 1, 12 | "useTabs": false 13 | } 14 | -------------------------------------------------------------------------------- /src/schedule/bilibili.ts: -------------------------------------------------------------------------------- 1 | import { getBiliBili } from '@/bilibili' 2 | 3 | import { biliBiliUser } from '@/user.ts'; 4 | 5 | (async () => { 6 | for (const item of biliBiliUser) { 7 | // 计算当前这次的延迟 8 | const delay = 2000 9 | 10 | // 等待当前的总延迟时间 11 | await new Promise(resolve => setTimeout(resolve, delay)) 12 | 13 | await getBiliBili(item) 14 | } 15 | })() 16 | -------------------------------------------------------------------------------- /src/douyin/msToken.ts: -------------------------------------------------------------------------------- 1 | export function getMsToken() { 2 | const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' 3 | let result = '' 4 | const charactersLength = characters.length 5 | 6 | for (let i = 0; i < 107; i++) { 7 | const randomIndex = Math.floor(Math.random() * charactersLength) 8 | result += characters[randomIndex] 9 | } 10 | 11 | return result 12 | } 13 | -------------------------------------------------------------------------------- /src/bilibili/cookie.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | export async function getBiliBiliCookies() { 4 | const result = await axios.get('https://api.bilibili.com/x/frontend/finger/spi', { 5 | headers: { 6 | 'User-Agent': 7 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 8 | }, 9 | }) 10 | 11 | return result?.data?.data 12 | } 13 | -------------------------------------------------------------------------------- /docs/douyin/book_talk_channel.md: -------------------------------------------------------------------------------- 1 | # 渡一前端讲书频道 2 | 3 |
4 | 5 |

更新时间:2025-08-13 20:50:08

6 | 7 | 地址 [https://www.douyin.com/user/MS4wLjABAAAAwR3-LqNrLALJDVcylV58rAM_DK6B_yHN2cRwrwhq-Yi7TWjFRPz2ir-jMtpuB0F2](https://www.douyin.com/user/MS4wLjABAAAAwR3-LqNrLALJDVcylV58rAM_DK6B_yHN2cRwrwhq-Yi7TWjFRPz2ir-jMtpuB0F2) 8 | 9 |
10 | 11 | - [和大家一起读《JavaScript忍者秘籍》这本书](https://www.douyin.com/video/7537586924131765555) - 2025-08-13 02:00:00 12 | -------------------------------------------------------------------------------- /data/jspd.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "title": "和大家一起读《JavaScript忍者秘籍》这本书", 4 | "url": "https://www.douyin.com/video/7537586924131765555", 5 | "time": "2025-08-13 02:00:00", 6 | "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d845175058d8468d90d2b7851ad4cf6f?lk3s=138a59ce&x-expires=1756296000&x-signature=BJso%2BuaAbpy6%2FXKpJI2KnyoSHzE%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202508132039252CED0E611560AB390BAC" 7 | } 8 | ] 9 | -------------------------------------------------------------------------------- /src/util.ts: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs' 2 | 3 | /** 4 | * 写入文件 5 | * @param path 文件路径 6 | * @param content 文件内容 7 | * @param cover 是否覆盖,默认 false 8 | */ 9 | export function write(path: string, content: string, cover: boolean = false) { 10 | fs.writeFileSync(path, content, { 11 | encoding: 'utf8', 12 | flag: cover ? 'w' : 'a', 13 | }) 14 | } 15 | 16 | /** 17 | * 读取文件 18 | * @param path 文件路径 19 | */ 20 | export function read(path: string) { 21 | return fs.readFileSync(path, 'utf-8') 22 | } 23 | -------------------------------------------------------------------------------- /types/types.ts: -------------------------------------------------------------------------------- 1 | export interface BaseChannel { 2 | alias: string 3 | name: string 4 | vpName: string 5 | url: string 6 | } 7 | 8 | export type ChannelType = 'douyin' | 'bilibili' 9 | 10 | export interface BiliBiliChannel extends BaseChannel { 11 | mid: number 12 | } 13 | 14 | export interface DouYinChannel extends BaseChannel { 15 | uid: string 16 | } 17 | 18 | export interface UserList { 19 | id: string 20 | mid?: number 21 | type: ChannelType 22 | name: string 23 | url: string 24 | } 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@lonewolfyx/tsconfig/tsconfig.lib.json", 3 | "compilerOptions": { 4 | "baseUrl": "./", 5 | "paths": { 6 | "@/*": [ 7 | "src/*" 8 | ], 9 | "#/*": [ 10 | "types/*" 11 | ] 12 | }, 13 | "noUnusedLocals": false, 14 | "noUnusedParameters": false 15 | }, 16 | "include": [ 17 | "src/**/*", 18 | "types/**/*" 19 | ], 20 | "exclude": [ 21 | "node_modules" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/index.ts: -------------------------------------------------------------------------------- 1 | import type { Theme } from 'vitepress' 2 | import DefaultTheme from 'vitepress/theme' 3 | // https://vitepress.dev/guide/custom-theme 4 | import { h } from 'vue' 5 | import './style.scss' 6 | import './tailwind.css' 7 | 8 | export default { 9 | extends: DefaultTheme, 10 | Layout: () => { 11 | return h(DefaultTheme.Layout, null, { 12 | // https://vitepress.dev/guide/extending-default-theme#layout-slots 13 | }) 14 | }, 15 | enhanceApp({ app, router, siteData }) { 16 | // ... 17 | }, 18 | } satisfies Theme 19 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | // eslint.config.mjs 2 | import antfu from '@antfu/eslint-config' 3 | import yamlParser from 'yaml-eslint-parser' 4 | 5 | export default antfu({ 6 | stylistic: { 7 | indent: 4, 8 | quotes: 'single', 9 | }, 10 | rules: { 11 | 'no-console': 'off', 12 | 'unused-imports/no-unused-vars': 'off', 13 | 'style/no-tabs': 'off', 14 | }, 15 | }, { 16 | files: ['**/*.yml', '**/*.yaml'], 17 | languageOptions: { 18 | parser: yamlParser, 19 | }, 20 | rules: { 21 | 'yaml/indent': ['error', 2], 22 | }, 23 | }) 24 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | 30 | *.tsbuildinfo 31 | package-lock.json 32 | 33 | # Playwright 34 | /test-results/ 35 | /playwright-report/ 36 | /blob-report/ 37 | /playwright/.cache/ 38 | /test/ 39 | /docs/.vitepress/cache/ 40 | /docs/.vitepress/dist/ 41 | /storageState.json 42 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/components/Hero.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/schedule/douyin.ts: -------------------------------------------------------------------------------- 1 | import { getDouYinData } from '@/douyin' 2 | 3 | import { douYinUser } from '@/user.ts'; 4 | 5 | (async () => { 6 | for (const item of douYinUser) { 7 | // 计算当前这次的延迟 8 | const delay = 2000 9 | 10 | // 等待当前的总延迟时间 11 | await new Promise(resolve => setTimeout(resolve, delay)) 12 | 13 | await getDouYinData(item) 14 | } 15 | // await getDouYinData({ 16 | // uid: 'MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT', 17 | // alias: 'txk', 18 | // name: '渡一前端提薪课', 19 | // vpName: 'salary_increase_course', 20 | // url: 'https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT' 21 | // }) 22 | })() 23 | -------------------------------------------------------------------------------- /src/bilibili/webid.ts: -------------------------------------------------------------------------------- 1 | import axios from 'axios' 2 | 3 | export async function getWebId(id: string) { 4 | const result = await axios.get(`https://space.bilibili.com/${id}/video`, { 5 | headers: { 6 | 'User-Agent': 7 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 8 | 'Referer': 'https://space.bilibili.com/384876532/video', 9 | 'Origin': 'https://space.bilibili.com', 10 | }, 11 | }) 12 | 13 | const data = result.data 14 | const re = / 17 | 18 | ## Results 19 | 20 | ### Theme Data 21 | 22 |
{{ theme }}
23 | 24 | ### Page Data 25 | 26 |
{{ page }}
27 | 28 | ### Page Frontmatter 29 | 30 |
{{ frontmatter }}
31 | ``` 32 | 33 | 38 | 39 | ## Results 40 | 41 | ### Theme Data 42 | 43 |
{{ theme }}
44 | 45 | ### Page Data 46 | 47 |
{{ page }}
48 | 49 | ### Page Frontmatter 50 | 51 |
{{ frontmatter }}
52 | 53 | ## More 54 | 55 | Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata). 56 | -------------------------------------------------------------------------------- /src/generate/docs.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'node:path' 2 | import { cwd } from 'node:process' 3 | import dayjs from 'dayjs' 4 | import { biliBiliUser, douYinUser } from '@/user.ts' 5 | import { read, write } from '@/util.ts' 6 | 7 | function processUserChannels(users: T[], folderName: string) { 8 | users.forEach((item: T) => { 9 | const dataFilePath = resolve(cwd(), `./data/${item.alias}.json`) 10 | const content = JSON.parse(read(dataFilePath)) 11 | const docsPath = resolve(cwd(), `./docs/${folderName}/${item.vpName}.md`) 12 | const updateTime = dayjs().format('YYYY-MM-DD HH:mm:ss') 13 | 14 | // 写入标题和更新信息 15 | write(docsPath, `# ${item.name}\n\n`, true) 16 | write(docsPath, `
\n\n`) 17 | write(docsPath, `

更新时间:${updateTime}

\n\n`) 18 | write(docsPath, `地址 [${item.url}](${item.url})\n\n`) 19 | write(docsPath, `
\n\n`) 20 | 21 | // 写入内容 22 | content.forEach((row: any) => { 23 | write(docsPath, `- [${row.title}](${row.url}) - ${row.time}\n`) 24 | }) 25 | }) 26 | } 27 | 28 | processUserChannels(douYinUser, 'douyin') 29 | processUserChannels(biliBiliUser, 'bilibili') 30 | -------------------------------------------------------------------------------- /docs/markdown-examples.md: -------------------------------------------------------------------------------- 1 | # Markdown Extension Examples 2 | 3 | This page demonstrates some of the built-in markdown extensions provided by VitePress. 4 | 5 | ## Syntax Highlighting 6 | 7 | VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting: 8 | 9 | **Input** 10 | 11 | ````md 12 | ```js{4} 13 | export default { 14 | data () { 15 | return { 16 | msg: 'Highlighted!' 17 | } 18 | } 19 | } 20 | ``` 21 | ```` 22 | 23 | **Output** 24 | 25 | ```js{4} 26 | export default { 27 | data () { 28 | return { 29 | msg: 'Highlighted!' 30 | } 31 | } 32 | } 33 | ``` 34 | 35 | ## Custom Containers 36 | 37 | **Input** 38 | 39 | ```md 40 | ::: info 41 | This is an info box. 42 | ::: 43 | 44 | ::: tip 45 | This is a tip. 46 | ::: 47 | 48 | ::: warning 49 | This is a warning. 50 | ::: 51 | 52 | ::: danger 53 | This is a dangerous warning. 54 | ::: 55 | 56 | ::: details 57 | This is a details block. 58 | ::: 59 | ``` 60 | 61 | **Output** 62 | 63 | ::: info 64 | This is an info box. 65 | ::: 66 | 67 | ::: tip 68 | This is a tip. 69 | ::: 70 | 71 | ::: warning 72 | This is a warning. 73 | ::: 74 | 75 | ::: danger 76 | This is a dangerous warning. 77 | ::: 78 | 79 | ::: details 80 | This is a details block. 81 | ::: 82 | 83 | ## More 84 | 85 | Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown). 86 | -------------------------------------------------------------------------------- /.github/workflows/work.yml: -------------------------------------------------------------------------------- 1 | name: Get the latest video collection 2 | 3 | on: 4 | push: 5 | branches: [master] 6 | pull_request: 7 | branches: [master] 8 | 9 | schedule: 10 | - cron: '30 */6 * * *' 11 | 12 | workflow_dispatch: 13 | 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | 18 | strategy: 19 | matrix: 20 | node-version: [22.x] 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | 25 | - name: Use Node.js ${{ matrix.node-version }} 26 | uses: actions/setup-node@v4 27 | with: 28 | node-version: ${{ matrix.node-version }} 29 | 30 | - name: Set beijing TimeZone 31 | uses: szenius/set-timezone@v1.2 # 设置虚拟环境的时区,可更改时区 32 | with: 33 | timezoneLinux: Asia/Shanghai 34 | timezoneMacos: Asia/Singapore 35 | 36 | - name: Install dependencies 37 | run: npm install 38 | 39 | # - name: Install Playwright browsers 40 | # run: npx playwright install --with-deps 41 | 42 | - name: Run bilibili && douyin video 43 | run: npm run dev:pw:duyi 44 | 45 | - name: Generate README.md 46 | run: npm run generate:README 47 | 48 | - name: Update Docs 49 | run: npm run docs:generate 50 | 51 | - name: Format Code 52 | run: npm run format 53 | 54 | - name: Commit 55 | uses: EndBug/add-and-commit@v4 56 | with: 57 | author_name: lonewolfyx 58 | author_email: 877085893@qq.com 59 | message: Update the latest DuYi video collection 60 | add: . 61 | 62 | env: 63 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 64 | -------------------------------------------------------------------------------- /docs/.vitepress/config.ts: -------------------------------------------------------------------------------- 1 | import type { BaseChannel, ChannelType } from '../../types/types' 2 | import { defineConfig } from 'vitepress' 3 | import { biliBiliUser, douYinUser } from '../../src/user' 4 | 5 | function generatorNav(channel: BaseChannel[], type: ChannelType) { 6 | return channel.map((item: BaseChannel) => ({ 7 | text: item.name, 8 | link: `/${type}/${item.vpName}`, 9 | })) 10 | } 11 | 12 | // https://vitepress.dev/reference/site-config 13 | export default defineConfig({ 14 | title: 'Awesome DuYi', 15 | description: '渡一教学相关的精彩精选视频、代码集', 16 | themeConfig: { 17 | logo: '/logo.jpeg', 18 | // https://vitepress.dev/reference/default-theme-config 19 | nav: [ 20 | { text: '首页', link: '/' }, 21 | { 22 | text: '抖音专辑', 23 | link: '/douyin/salary_increase_course', 24 | activeMatch: '/douyin/', 25 | }, 26 | { text: '哔哩哔哩专辑', link: '/bilibili/institution' }, 27 | { 28 | text: '代码专辑', 29 | link: '/code', 30 | activeMatch: '/code/', 31 | }, 32 | // { text: '赞助', link: '/sponsor' } 33 | ], 34 | 35 | sidebar: { 36 | '/douyin/': [ 37 | { 38 | text: '抖音专辑', 39 | items: generatorNav(douYinUser, 'douyin'), 40 | }, 41 | ], 42 | '/bilibili/': [ 43 | { 44 | text: '哔哩哔哩专辑', 45 | items: generatorNav(biliBiliUser, 'bilibili'), 46 | }, 47 | ], 48 | }, 49 | 50 | socialLinks: [ 51 | { icon: 'github', link: 'https://github.com/lonewolfyx/awesome-duyi' }, 52 | ], 53 | lastUpdated: { 54 | text: '最后更新于', 55 | formatOptions: { 56 | dateStyle: 'short', 57 | timeStyle: 'medium', 58 | }, 59 | }, 60 | }, 61 | }) 62 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "duyi", 3 | "type": "module", 4 | "version": "0.0.3", 5 | "description": "", 6 | "author": "lonewolfyx ", 7 | "license": "MIT", 8 | "keywords": [ 9 | "awesome-duyi", 10 | "duyi video", 11 | "duyi" 12 | ], 13 | "scripts": { 14 | "dev:pw:duyi": "tsx src/duyi.ts", 15 | "generate:README": "tsx src/generate/readme.ts", 16 | "docs:generate": "tsx src/generate/docs.ts", 17 | "format": "eslint --fix", 18 | "douyin:duyi": "tsx src/schedule/douyin.ts", 19 | "bilibili:duyi": "tsx src/schedule/bilibili.ts", 20 | "dev": "tsx src/douyin/index.ts", 21 | "test": "tsx test/test.ts", 22 | "test:douyin": "tsx src/playwright/douyin.ts", 23 | "docs:dev": "vitepress dev docs", 24 | "docs:build": "vitepress build docs", 25 | "docs:preview": "vitepress preview docs", 26 | "correct:data": "tsx src/correct.ts", 27 | "lint": "eslint", 28 | "lint:fix": "eslint --fix", 29 | "gen:douyin:cookies": "npx playwright codegen https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT --save-storage=storageState.json" 30 | }, 31 | "dependencies": { 32 | "@lonewolfyx/utils": "^0.0.0", 33 | "axios": "^1.8.4", 34 | "dayjs": "^1.11.13", 35 | "fs-extra": "^11.3.0", 36 | "playwright": "^1.51.1" 37 | }, 38 | "devDependencies": { 39 | "@antfu/eslint-config": "^6.2.0", 40 | "@lonewolfyx/tsconfig": "^0.0.5", 41 | "@types/fs-extra": "^11.0.4", 42 | "@types/node": "^22.14.0", 43 | "autoprefixer": "^10.4.21", 44 | "eslint": "^9.39.1", 45 | "eslint-plugin-yaml": "^1.1.3", 46 | "lint-staged": "^16.1.5", 47 | "postcss": "^8.5.3", 48 | "prettier": "^3.5.3", 49 | "prettier-plugin-multiline-arrays": "^4.0.3", 50 | "sass-embedded": "^1.86.3", 51 | "simple-git-hooks": "^2.13.1", 52 | "tailwindcss": "^3.4.17", 53 | "tsx": "^4.19.3", 54 | "typescript": "^5.8.3", 55 | "vitepress": "^1.6.3", 56 | "yaml-eslint-parser": "^1.3.1" 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/generate/readme.ts: -------------------------------------------------------------------------------- 1 | import type { BiliBiliChannel, DouYinChannel } from '#/types.ts' 2 | import fs from 'node:fs' 3 | import { resolve } from 'node:path' 4 | import { cwd } from 'node:process' 5 | import { platformType } from '@/constant.ts' 6 | import { biliBiliUser, douYinUser } from '@/user.ts' 7 | import { write } from '@/util.ts' 8 | 9 | const readmePath = resolve(cwd(), `./README.md`) 10 | function writeContent(content: string) { 11 | write(readmePath, content) 12 | } 13 | 14 | function writeAccount(account: T[], platform: string) { 15 | account.forEach((item: T) => { 16 | writeContent(`- [${platform} - ${item.name}](${item.url})\n`) 17 | }) 18 | } 19 | 20 | function writeVideos(account: T[], platform: keyof typeof platformType) { 21 | account.forEach((item: T) => { 22 | writeContent(`### ${platformType[platform]} - ${item.name}\n`) 23 | writeContent(`\n`) 24 | const content = JSON.parse(fs.readFileSync(resolve(cwd(), `./data/${item.alias}.json`), 'utf-8')) 25 | content.slice(0, 20).forEach((row: any) => { 26 | writeContent(`- [${row.title}](${row.url}) - ${row.time}\n`) 27 | }) 28 | writeContent(`\n[查看更多](https://awesome-duyi.vercel.app/${platform}/${item.vpName}.html)\n`) 29 | writeContent(`\n`) 30 | }) 31 | } 32 | 33 | const content = [ 34 | '
', 35 | ' 渡一视频集合', 36 | '
', 37 | '

📰 渡一视频集合

', 38 | '

是一份专注于收集全网渡一教学视频的集合。以简洁易懂的形式呈现,快速掌握关键信息,节省查阅时间。

', 39 | '', 40 | '## 📋 简介', 41 | '', 42 | '此集合目前涵盖以下账户内容:', 43 | '', 44 | ] 45 | 46 | function main() { 47 | // 初始化内容 48 | write(readmePath, '', true) 49 | 50 | content.forEach((item: string) => { 51 | writeContent(`${item}\n`) 52 | }) 53 | 54 | writeAccount(douYinUser, platformType.douyin) 55 | writeAccount(biliBiliUser, platformType.bilibili) 56 | 57 | writeContent(`\n`) 58 | 59 | writeContent('> 若有推荐的优质账户可进行 `issues` 提交\n') 60 | writeContent(`\n`) 61 | 62 | writeVideos(douYinUser, 'douyin') 63 | writeVideos(biliBiliUser, 'bilibili') 64 | } 65 | 66 | main() 67 | -------------------------------------------------------------------------------- /docs/douyin/code_review.md: -------------------------------------------------------------------------------- 1 | # 渡一前端鸵鸟课堂 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://www.douyin.com/user/MS4wLjABAAAAcMcBLE02aSIo_-BuI9bhDxDIj4a8Fw1PASgGm7fwGa0](https://www.douyin.com/user/MS4wLjABAAAAcMcBLE02aSIo_-BuI9bhDxDIj4a8Fw1PASgGm7fwGa0) 8 | 9 |
10 | 11 | - [原型污染有多重要?React核弹级漏洞引发原因](https://www.douyin.com/video/7582862268191313215) - 2025-12-12 22:00:00 12 | - [想让一个方法获得最大的复用性?那一定离不开依赖注入](https://www.douyin.com/video/7582432299065593142) - 2025-12-11 22:00:00 13 | - [对于性能问题束手无策?性能分析工具帮你快速定位问题](https://www.douyin.com/video/7581726555043417407) - 2025-12-09 22:00:00 14 | - [Worker Pool](https://www.douyin.com/video/7580260036639837474) - 2025-12-05 22:00:00 15 | - [对于别人写的代码中,可能会出现的错误异常怎么捕获?](https://www.douyin.com/video/7579880502350400802) - 2025-12-04 22:00:00 16 | - [JSON Schema](https://www.douyin.com/video/7579154877981625636) - 2025-12-02 22:00:00 17 | - [想成为架构师?那你一定要了解AST](https://www.douyin.com/video/7577680665681120575) - 2025-11-29 22:00:00 18 | - [闭包的概念和应用还不清晰?一个视频带你形象的理解闭包和其应用](https://www.douyin.com/video/7577680264785120548) - 2025-11-28 22:00:00 19 | - [React阻止冒泡](https://www.douyin.com/video/7576938393913806123) - 2025-11-26 22:00:00 20 | - [React运行时切换方法](https://www.douyin.com/video/7575010098523753738) - 2025-11-21 22:00:00 21 | - [前端已死?前端真的会死么?](https://www.douyin.com/video/7574336031739186442) - 2025-11-19 22:00:00 22 | - [不同前端接到条款类页面需求](https://www.douyin.com/video/7573538232315514131) - 2025-11-17 22:00:00 23 | - [React Diff中placement](https://www.douyin.com/video/7572420410940165439) - 2025-11-14 22:00:00 24 | - [React的diff主流程](https://www.douyin.com/video/7572388329564523830) - 2025-11-14 09:34:19 25 | - [React中的时间切片](https://www.douyin.com/video/7571695264809946387) - 2025-11-12 22:00:00 26 | - [React中的key是什么?](https://www.douyin.com/video/7571355774224452900) - 2025-11-11 22:00:00 27 | - [可以在组件外修改组件状态么?](https://www.douyin.com/video/7569825156655320356) - 2025-11-10 22:00:00 28 | - [为什么setState是异步的?](https://www.douyin.com/video/7569824779105062207) - 2025-11-08 22:00:00 29 | - [什么时候用useEffect?](https://www.douyin.com/video/7569824430529039635) - 2025-11-07 22:00:00 30 | - [状态更新不及时,因为setstate异步?](https://www.douyin.com/video/7569433448012582187) - 2025-11-06 22:00:00 31 | - [元素居中的常见方案](https://www.douyin.com/video/7569084079786839350) - 2025-11-05 22:00:00 32 | - [为什么Hook要保证顺序一致性?](https://www.douyin.com/video/7568702340379790634) - 2025-11-04 22:00:00 33 | - [Fiber好在哪儿?](https://www.douyin.com/video/7568311594032123151) - 2025-11-03 22:00:00 34 | - [节流和防抖分不清?](https://www.douyin.com/video/7567275229861547273) - 2025-11-01 22:00:00 35 | - [面试中遇到"JSX是什么"怎么回答?](https://www.douyin.com/video/7567274817003556147) - 2025-10-31 22:00:00 36 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | # https://vitepress.dev/reference/default-theme-home-page 3 | layout: home 4 | 5 | hero: 6 | name: 渡一教学 7 | tagline: 相关的精彩精选视频、代码集 8 | image: 9 | src: /logo.jpeg 10 | alt: VitePress 11 | actions: 12 | - theme: brand 13 | text: 开始学习 -> 14 | link: /douyin/salary_increase_course.html 15 | - theme: alt 16 | text: Github 17 | link: https://github.com/lonewolfyx/awesome-duyi 18 | features: 19 | - icon: 20 | src: https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813c001_51580dd72ba14ac499f77e93e30012ba~c5_300x300.jpeg 21 | title: 渡一前端提薪课 22 | link: https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT 23 | - icon: 24 | src: https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813_9321dc52690f420ebcf65becc161bbc7~c5_300x300.jpeg 25 | title: 渡一Web前端学习频道 26 | link: https://www.douyin.com/user/MS4wLjABAAAAi2oukRVcHpgD-HbVdzsxE7tYykr91YuIKukR_X_Yy08EFWRQhRrECDF6FvbvT8Xa 27 | - icon: 28 | src: https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-avt-0015_114c252e9ba86378c04c7bd3c9539a23~c5_300x300.jpeg 29 | title: 渡一前端教科书 30 | link: https://www.douyin.com/user/MS4wLjABAAAAKuAIiftuTMsdnH-9MyU8VZla5fmjhdY2Gd7tHueV25vzFnKs3lqLSV7xoPE7FTxi 31 | - icon: 32 | src: https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813c001_ba6ead4c46884f8aad322c01dc9cee1b~c5_300x300.jpeg 33 | title: 渡一前端必修课 34 | link: https://www.douyin.com/user/MS4wLjABAAAAy68qgQPB-aGWv7MKIRB544hLgzY18xgXhywYjnN-XKk 35 | - icon: 36 | src: /logo.jpeg 37 | title: 哔哩哔哩 · 渡一机构 38 | link: https://space.bilibili.com/286614549 39 | - icon: 40 | src: /logo.jpeg 41 | title: 哔哩哔哩 · 渡一教育-前端进阶课 42 | link: https://space.bilibili.com/174874061 43 | - icon: 44 | src: /logo.jpeg 45 | title: 哔哩哔哩 · 渡一教育编程课堂 46 | link: https://space.bilibili.com/383573378 47 | - icon: 48 | src: /logo.jpeg 49 | title: 哔哩哔哩 · 渡一前端提薪空间m 50 | link: https://space.bilibili.com/3537111135291562 51 | - icon: 52 | src: /logo.jpeg 53 | title: 哔哩哔哩 · 渡一教育-Web前端开发 54 | link: https://space.bilibili.com/384876532 55 | - icon: 56 | src: /logo.jpeg 57 | title: 哔哩哔哩 · 渡一前端必修课 58 | link: https://space.bilibili.com/3494367522195464 59 | - icon: 60 | src: https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813_oYNA2CiTAEBxR8AAHtAgf7iE0aIMeIIACA6VoC~c5_300x300.jpeg 61 | title: 渡一前端讲书频道 62 | link: https://www.douyin.com/user/MS4wLjABAAAAwR3-LqNrLALJDVcylV58rAM_DK6B_yHN2cRwrwhq-Yi7TWjFRPz2ir-jMtpuB0F2 63 | - icon: 64 | src: https://p3-pc.douyinpic.com/img/aweme-avatar/tos-cn-i-0813c001_ogDPawfsAhnqoFAA7inCAECJEmIAqEeg9vCAQM~c5_300x300.jpeg 65 | title: 渡一前端代码优化CodeReview 66 | link: https://www.douyin.com/user/MS4wLjABAAAAcMcBLE02aSIo_-BuI9bhDxDIj4a8Fw1PASgGm7fwGa0 67 | --- 68 | -------------------------------------------------------------------------------- /src/bilibili/rid.ts: -------------------------------------------------------------------------------- 1 | import { md5 } from '@lonewolfyx/utils' 2 | import axios from 'axios' 3 | 4 | const mixinKeyEncTab: number[] = [ 5 | 46, 6 | 47, 7 | 18, 8 | 2, 9 | 53, 10 | 8, 11 | 23, 12 | 32, 13 | 15, 14 | 50, 15 | 10, 16 | 31, 17 | 58, 18 | 3, 19 | 45, 20 | 35, 21 | 27, 22 | 43, 23 | 5, 24 | 49, 25 | 33, 26 | 9, 27 | 42, 28 | 19, 29 | 29, 30 | 28, 31 | 14, 32 | 39, 33 | 12, 34 | 38, 35 | 41, 36 | 13, 37 | 37, 38 | 48, 39 | 7, 40 | 16, 41 | 24, 42 | 55, 43 | 40, 44 | 61, 45 | 26, 46 | 17, 47 | 0, 48 | 1, 49 | 60, 50 | 51, 51 | 30, 52 | 4, 53 | 22, 54 | 25, 55 | 54, 56 | 21, 57 | 56, 58 | 59, 59 | 6, 60 | 63, 61 | 57, 62 | 62, 63 | 11, 64 | 36, 65 | 20, 66 | 34, 67 | 44, 68 | 52, 69 | ] 70 | 71 | export async function getImgFormatConfig(): Promise<{ imgKey: string, subKey: string }> { 72 | const result = await axios.get('https://api.bilibili.com/x/web-interface/nav', { 73 | headers: { 74 | 'origin': 'https://space.bilibili.com', 75 | 'referer': 'https://space.bilibili.com/3546866377558183/video', 76 | 'User-Agent': 77 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 78 | 'Cookie': '__at_once=17312931139607680978;', 79 | }, 80 | }) 81 | 82 | const { img_url, sub_url } = result.data?.data?.wbi_img 83 | 84 | const getKeyFromURL = (url: string) => url.substring(url.lastIndexOf('/') + 1, url.length).split('.')[0] 85 | 86 | return { 87 | imgKey: getKeyFromURL(img_url) || '', 88 | subKey: getKeyFromURL(sub_url) || '', 89 | } 90 | } 91 | export function getPictureHashKey(orig: string): string { 92 | return mixinKeyEncTab 93 | .map(n => orig[n]) 94 | .join('') 95 | .slice(0, 32) 96 | } 97 | 98 | export async function getBiliBiliRequestRid(params: Record): Promise { 99 | const wbiKeys = await getImgFormatConfig() 100 | const combinedKey = wbiKeys.imgKey + wbiKeys.subKey 101 | const hashKey = getPictureHashKey(combinedKey) 102 | 103 | // 处理并排序参数 104 | const sortedKeys = Object.keys(params).sort() 105 | const specialCharRegex = /[!'()*]/g 106 | 107 | const encodedParams = sortedKeys 108 | .map((key) => { 109 | let value = params[key] 110 | 111 | // 处理字符串类型的值 112 | if (typeof value === 'string') { 113 | value = value.replace(specialCharRegex, '') 114 | } 115 | 116 | // 过滤无效值 117 | if (value === null || value === undefined) 118 | return null 119 | 120 | // 编码键值对 121 | return `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}` 122 | }) 123 | .filter((param): param is string => param !== null) // 类型守卫过滤 124 | 125 | const joinedParams = encodedParams.join('&') 126 | 127 | return md5(joinedParams + hashKey).toString() 128 | } 129 | -------------------------------------------------------------------------------- /src/bilibili/index.ts: -------------------------------------------------------------------------------- 1 | import type { BiliBiliChannel } from '#/types.ts' 2 | import fs from 'node:fs' 3 | import { resolve } from 'node:path' 4 | import { cwd } from 'node:process' 5 | import axios from 'axios' 6 | import dayjs from 'dayjs' 7 | import { getBiliBiliCookies } from '@/bilibili/cookie.ts' 8 | import { getBiliBiliRequestRid } from '@/bilibili/rid.ts' 9 | 10 | export async function getBiliBili(channel: BiliBiliChannel) { 11 | const headers = { 12 | 'User-Agent': 13 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 14 | 'accept': '*/*', 15 | 'accept-encoding': 'gzip, deflate, br, zstd', 16 | 'origin': 'https://space.bilibili.com', 17 | 'sec-fetch-site': 'same-site', 18 | 'sec-fetch-mode': 'cors', 19 | 'sec-fetch-dest': 'empty', 20 | 'referer': `https://space.bilibili.com/${channel.mid}/video`, 21 | } 22 | 23 | const cookies = await getBiliBiliCookies() 24 | // const webId = await getWebId(channel.mid.toString()) 25 | const now = Math.round(Date.now() / 1e3) 26 | 27 | const queryParams = { 28 | mid: channel.mid, 29 | ps: 30, 30 | tid: 0, 31 | pn: 1, 32 | web_location: 1550101, 33 | order_avoided: true, 34 | order: 'pubdate', 35 | keyword: '', 36 | platform: 'web', 37 | dm_img_list: '[]', 38 | dm_img_str: 'V2ViR0wgMS4wIChPcGVuR0wgRVMgMi4wIENocm9taXVtKQ', 39 | dm_cover_img_str: 40 | 'QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgR1RYIDE2NTAgKDB4MDAwMDFGOTEpIERpcmVjdDNEMTEgdnNfNV8wIHBzXzVfMCwgRDNEMTEpR29vZ2xlIEluYy4gKE5WSURJQS', 41 | dm_img_inter: '{"ds":[],"wh":[0,0,0],"of":[0,0,0]}', 42 | // w_webid: webId, 43 | wts: now.toString(), 44 | } 45 | 46 | const w_rid = await getBiliBiliRequestRid(queryParams) 47 | 48 | const res = await axios.get('https://api.bilibili.com/x/space/wbi/arc/search', { 49 | headers: { 50 | ...headers, 51 | cookie: `buvid3=${cookies.b_3};buvid4=${cookies.b_4}`, 52 | }, 53 | params: { 54 | ...queryParams, 55 | w_rid, 56 | }, 57 | }) 58 | 59 | const videoList = res?.data?.data?.list?.vlist 60 | // videoList.map((row: any) => { 61 | // console.log(row.title) 62 | // }) 63 | // const vList = JSON.parse(text)['data']['list']['vlist'] 64 | 65 | const filePath = resolve(cwd(), `./data/${channel.alias}.json`) 66 | const row = videoList[0] 67 | const oldContent = JSON.parse(fs.readFileSync(filePath, 'utf-8')) 68 | const firstContent = oldContent[0] 69 | const lastTime = row.created 70 | const contentLastTime = dayjs(firstContent.time).valueOf() / 1e3 71 | if (contentLastTime < lastTime) { 72 | console.log('有最新视频:', row.author, row.title) 73 | oldContent.unshift({ 74 | title: row.title, 75 | url: `https://www.bilibili.com/${row.bvid}`, 76 | time: dayjs.unix(row.created).format('YYYY-MM-DD HH:mm:ss'), 77 | cover: row.pic, 78 | }) 79 | fs.writeFileSync(filePath, JSON.stringify(oldContent), { 80 | encoding: 'utf8', 81 | flag: 'w', 82 | }) 83 | } 84 | else { 85 | console.log('暂无最新视频') 86 | } 87 | } 88 | // ;(async () => { 89 | // await getBiliBili({ 90 | // mid: 3494367522195464, 91 | // alias: 'qdbxk', 92 | // name: '渡一前端必修课', 93 | // url: 'https://space.bilibili.com/3494367522195464/video' 94 | // }) 95 | // })() 96 | -------------------------------------------------------------------------------- /src/playwright/douyin.ts: -------------------------------------------------------------------------------- 1 | import fs, { readFileSync, writeFileSync } from 'node:fs' 2 | import { resolve } from 'node:path' 3 | import { cwd } from 'node:process' 4 | import dayjs from 'dayjs' 5 | import { chromium } from 'playwright' 6 | 7 | export async function getDouYinNewData(fileName: string, url: string) { 8 | const browser = await chromium.launch({ 9 | headless: false, 10 | }) 11 | const cookiePath = resolve(cwd(), 'storageState.json') 12 | console.log(cookiePath) 13 | const context = await browser.newContext({ 14 | storageState: JSON.parse(readFileSync(cookiePath, 'utf-8')), 15 | }) 16 | const page = await context.newPage() 17 | 18 | const filePath = resolve(cwd(), `./data/${fileName}.json`) 19 | fs.writeFileSync(filePath, '[\n', { 20 | encoding: 'utf8', 21 | flag: 'w', 22 | }) 23 | 24 | let status = true 25 | 26 | page.on('response', async (response) => { 27 | if (response.url().includes('aweme/v1/web/aweme/post')) { 28 | const text = await response.text() 29 | if (text && JSON.parse(text)?.aweme_list.length) { 30 | const video = JSON.parse(text).aweme_list 31 | video.forEach((row: any) => { 32 | if (row.is_top) { 33 | return '' 34 | } 35 | const title = row.item_title || row.desc.split('\n')[0] 36 | const url = `https://www.douyin.com/video/${row.aweme_id}` 37 | const time = dayjs.unix(row.create_time).format('YYYY-MM-DD HH:mm:ss') 38 | const cover = row.video?.dynamic_cover?.url_list[0] || row.video?.origin_cover?.url_list[0] || '' 39 | const content = `{"title":"${title}", "url":"${url}","time":"${time}","cover":"${cover}"},\n` 40 | fs.writeFileSync(filePath, content, { 41 | encoding: 'utf8', 42 | flag: 'a', 43 | }) 44 | }) 45 | } 46 | else { 47 | console.log('无数据') 48 | status = false 49 | } 50 | 51 | // if (text && JSON.parse(text)?.aweme_list?.[0]) { 52 | // console.log(text) 53 | // const video = JSON.parse(text)['aweme_list'][0] 54 | // const lastTime = video.create_time 55 | // 56 | // const oldContent = JSON.parse(fs.readFileSync(filePath, 'utf-8')) 57 | // const firstContent = oldContent[0] 58 | // const contentLastTime = dayjs(firstContent.time).valueOf() / 1e3 59 | // 60 | // if (contentLastTime < lastTime) { 61 | // const cover = row.video?.dynamic_cover?.url_list[0] || row.video?.origin_cover?.url_list[0] || '' 62 | // oldContent.unshift({ 63 | // title: video.item_title || video.desc.split('\n')[0], 64 | // url: `https://www.douyin.com/video/${video.aweme_id}`, 65 | // time: dayjs.unix(lastTime).format('YYYY-MM-DD HH:mm:ss') 66 | // }) 67 | // fs.writeFileSync(filePath, JSON.stringify(oldContent), { 68 | // encoding: 'utf8', 69 | // flag: 'w' 70 | // }) 71 | // } 72 | // } 73 | } 74 | }) 75 | 76 | await page.goto(url) 77 | 78 | // 等待登录框出现 79 | // await page.waitForSelector('._CwbZHXv', { timeout: 20000 }) 80 | 81 | // // 关闭登录框 82 | // await page.locator('._CwbZHXv > svg').click() 83 | // 84 | 85 | while (status) { 86 | const pageText = await page.locator('.E5QmyeTo').count() 87 | console.log('是否还有页面', pageText) 88 | await page.waitForTimeout(2000) 89 | // 触发 end 键盘事件,页面滚动至底部 90 | await page.keyboard.press('End') 91 | if (pageText) { 92 | status = false 93 | } 94 | } 95 | 96 | fs.writeFileSync(filePath, ']\n', { 97 | encoding: 'utf8', 98 | flag: 'a', 99 | }) 100 | 101 | const newCookies = await context.storageState() 102 | writeFileSync(cookiePath, JSON.stringify(newCookies, null, 2)) 103 | 104 | // 等待 2 秒后关闭 105 | setTimeout(async () => { 106 | await context.close() 107 | await browser.close() 108 | }, 2000) 109 | } 110 | -------------------------------------------------------------------------------- /docs/.vitepress/theme/style.scss: -------------------------------------------------------------------------------- 1 | /** 2 | * Customize default theme styling by overriding CSS variables: 3 | * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css 4 | */ 5 | 6 | /** 7 | * Colors 8 | * 9 | * Each colors have exact same color scale system with 3 levels of solid 10 | * colors with different brightness, and 1 soft color. 11 | * 12 | * - `XXX-1`: The most solid color used mainly for colored text. It must 13 | * satisfy the contrast ratio against when used on top of `XXX-soft`. 14 | * 15 | * - `XXX-2`: The color used mainly for hover state of the button. 16 | * 17 | * - `XXX-3`: The color for solid background, such as bg color of the button. 18 | * It must satisfy the contrast ratio with pure white (#ffffff) text on 19 | * top of it. 20 | * 21 | * - `XXX-soft`: The color used for subtle background such as custom container 22 | * or badges. It must satisfy the contrast ratio when putting `XXX-1` colors 23 | * on top of it. 24 | * 25 | * The soft color must be semi transparent alpha channel. This is crucial 26 | * because it allows adding multiple "soft" colors on top of each other 27 | * to create a accent, such as when having inline code block inside 28 | * custom containers. 29 | * 30 | * - `default`: The color used purely for subtle indication without any 31 | * special meanings attached to it such as bg color for menu hover state. 32 | * 33 | * - `brand`: Used for primary brand colors, such as link text, button with 34 | * brand theme, etc. 35 | * 36 | * - `tip`: Used to indicate useful information. The default theme uses the 37 | * brand color for this by default. 38 | * 39 | * - `warning`: Used to indicate warning to the users. Used in custom 40 | * container, badges, etc. 41 | * 42 | * - `danger`: Used to show error, or dangerous message to the users. Used 43 | * in custom container, badges, etc. 44 | * -------------------------------------------------------------------------- */ 45 | 46 | :root { 47 | --vp-c-default-1: var(--vp-c-gray-1); 48 | --vp-c-default-2: var(--vp-c-gray-2); 49 | --vp-c-default-3: var(--vp-c-gray-3); 50 | --vp-c-default-soft: var(--vp-c-gray-soft); 51 | 52 | --vp-c-brand-1: var(--vp-c-indigo-1); 53 | --vp-c-brand-2: var(--vp-c-indigo-2); 54 | --vp-c-brand-3: var(--vp-c-indigo-3); 55 | --vp-c-brand-soft: var(--vp-c-indigo-soft); 56 | 57 | --vp-c-tip-1: var(--vp-c-brand-1); 58 | --vp-c-tip-2: var(--vp-c-brand-2); 59 | --vp-c-tip-3: var(--vp-c-brand-3); 60 | --vp-c-tip-soft: var(--vp-c-brand-soft); 61 | 62 | --vp-c-warning-1: var(--vp-c-yellow-1); 63 | --vp-c-warning-2: var(--vp-c-yellow-2); 64 | --vp-c-warning-3: var(--vp-c-yellow-3); 65 | --vp-c-warning-soft: var(--vp-c-yellow-soft); 66 | 67 | --vp-c-danger-1: var(--vp-c-red-1); 68 | --vp-c-danger-2: var(--vp-c-red-2); 69 | --vp-c-danger-3: var(--vp-c-red-3); 70 | --vp-c-danger-soft: var(--vp-c-red-soft); 71 | } 72 | 73 | /** 74 | * Component: Button 75 | * -------------------------------------------------------------------------- */ 76 | 77 | :root { 78 | --vp-button-brand-border: transparent; 79 | --vp-button-brand-text: var(--vp-c-white); 80 | --vp-button-brand-bg: var(--vp-c-brand-3); 81 | --vp-button-brand-hover-border: transparent; 82 | --vp-button-brand-hover-text: var(--vp-c-white); 83 | --vp-button-brand-hover-bg: var(--vp-c-brand-2); 84 | --vp-button-brand-active-border: transparent; 85 | --vp-button-brand-active-text: var(--vp-c-white); 86 | --vp-button-brand-active-bg: var(--vp-c-brand-1); 87 | } 88 | 89 | /** 90 | * Component: Home 91 | * -------------------------------------------------------------------------- */ 92 | 93 | :root { 94 | --vp-home-hero-name-color: transparent; 95 | --vp-home-hero-name-background: -webkit-linear-gradient(120deg, #43e97b 30%, #38f9d7); 96 | 97 | --vp-home-hero-image-background-image: linear-gradient(-45deg, #43e97b 50%, #38f9d7 50%); 98 | --vp-home-hero-image-filter: blur(44px); 99 | } 100 | 101 | @media (min-width: 640px) { 102 | :root { 103 | --vp-home-hero-image-filter: blur(56px); 104 | } 105 | } 106 | 107 | @media (min-width: 960px) { 108 | :root { 109 | --vp-home-hero-image-filter: blur(68px); 110 | } 111 | } 112 | 113 | /** 114 | * Component: Custom Block 115 | * -------------------------------------------------------------------------- */ 116 | 117 | :root { 118 | --vp-custom-block-tip-border: transparent; 119 | --vp-custom-block-tip-text: var(--vp-c-text-1); 120 | --vp-custom-block-tip-bg: var(--vp-c-brand-soft); 121 | --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft); 122 | } 123 | 124 | /** 125 | * Component: Algolia 126 | * -------------------------------------------------------------------------- */ 127 | 128 | .DocSearch { 129 | --docsearch-primary-color: var(--vp-c-brand-1) !important; 130 | } 131 | 132 | .VPNavBarTitle .VPImage.logo { 133 | border-radius: 50% 10%; 134 | } 135 | 136 | .VPHome .VPHero .image-container img.VPImage { 137 | border-radius: 50% 10%; 138 | } 139 | 140 | @media (min-width: 960px) { 141 | .VPHomeHero { 142 | padding: calc(var(--vp-nav-height) + var(--vp-layout-top-height, 0px) + 180px) 64px 164px !important; 143 | } 144 | } 145 | 146 | .VPFeature { 147 | .box { 148 | @apply px-6 py-4 flex-row items-center gap-1; 149 | 150 | .VPImage { 151 | @apply mb-0; 152 | border-radius: 50% 20% / 10% 40%; 153 | } 154 | 155 | .title { 156 | @apply text-xs; 157 | } 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /src/user.ts: -------------------------------------------------------------------------------- 1 | import type { BiliBiliChannel, DouYinChannel } from '#/types.ts' 2 | 3 | export const douYinUser: DouYinChannel[] = [ 4 | { 5 | uid: 'MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT', 6 | alias: 'txk', 7 | name: '渡一前端提薪课', 8 | vpName: 'salary_increase_course', 9 | url: 'https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT', 10 | }, 11 | { 12 | uid: 'MS4wLjABAAAAi2oukRVcHpgD-HbVdzsxE7tYykr91YuIKukR_X_Yy08EFWRQhRrECDF6FvbvT8Xa', 13 | alias: 'xxpd', 14 | name: '渡一Web前端学习频道', 15 | vpName: 'learning_channel', 16 | url: 'https://www.douyin.com/user/MS4wLjABAAAAi2oukRVcHpgD-HbVdzsxE7tYykr91YuIKukR_X_Yy08EFWRQhRrECDF6FvbvT8Xa', 17 | }, 18 | { 19 | uid: 'MS4wLjABAAAAKuAIiftuTMsdnH-9MyU8VZla5fmjhdY2Gd7tHueV25vzFnKs3lqLSV7xoPE7FTxi', 20 | alias: 'jks', 21 | name: '渡一前端教科书', 22 | vpName: 'textbook', 23 | url: 'https://www.douyin.com/user/MS4wLjABAAAAKuAIiftuTMsdnH-9MyU8VZla5fmjhdY2Gd7tHueV25vzFnKs3lqLSV7xoPE7FTxi', 24 | }, 25 | { 26 | uid: 'MS4wLjABAAAAy68qgQPB-aGWv7MKIRB544hLgzY18xgXhywYjnN-XKk', 27 | alias: 'bxk', 28 | name: '渡一前端必修课', 29 | vpName: 'compulsory_course', 30 | url: 'https://www.douyin.com/user/MS4wLjABAAAAy68qgQPB-aGWv7MKIRB544hLgzY18xgXhywYjnN-XKk', 31 | }, 32 | // { 33 | // uid: 'MS4wLjABAAAAwR3-LqNrLALJDVcylV58rAM_DK6B_yHN2cRwrwhq-Yi7TWjFRPz2ir-jMtpuB0F2', 34 | // alias: 'jspd', 35 | // name: '渡一前端讲书频道', 36 | // vpName: 'book_talk_channel', 37 | // url: 'https://www.douyin.com/user/MS4wLjABAAAAwR3-LqNrLALJDVcylV58rAM_DK6B_yHN2cRwrwhq-Yi7TWjFRPz2ir-jMtpuB0F2' 38 | // }, 39 | { 40 | uid: 'MS4wLjABAAAAcMcBLE02aSIo_-BuI9bhDxDIj4a8Fw1PASgGm7fwGa0', 41 | alias: 'dmyh', 42 | name: '渡一前端鸵鸟课堂', 43 | vpName: 'code_review', 44 | url: 'https://www.douyin.com/user/MS4wLjABAAAAcMcBLE02aSIo_-BuI9bhDxDIj4a8Fw1PASgGm7fwGa0', 45 | }, 46 | ] 47 | 48 | export const biliBiliUser: BiliBiliChannel[] = [ 49 | { 50 | mid: 286614549, 51 | alias: 'dyjg', 52 | name: '渡一机构', 53 | vpName: 'institution', 54 | url: 'https://space.bilibili.com/286614549/video', 55 | }, 56 | { 57 | alias: 'qdjjk', 58 | mid: 174874061, 59 | name: '渡一教育-前端进阶课', 60 | vpName: 'front_end_advanced', 61 | url: 'https://space.bilibili.com/174874061/video', 62 | }, 63 | { 64 | alias: 'jybckt', 65 | mid: 383573378, 66 | name: '渡一教育编程课堂', 67 | vpName: 'programming', 68 | url: 'https://space.bilibili.com/383573378/video', 69 | }, 70 | { 71 | alias: 'txkjm', 72 | mid: 3537111135291562, 73 | name: '渡一前端提薪空间m', 74 | vpName: 'salary_increase_course', 75 | url: 'https://space.bilibili.com/3537111135291562/video', 76 | }, 77 | { 78 | alias: 'webqdkf', 79 | mid: 384876532, 80 | name: '渡一教育-Web前端开发', 81 | vpName: 'front_dev', 82 | url: 'https://space.bilibili.com/384876532/video', 83 | }, 84 | { 85 | alias: 'qdbxk', 86 | mid: 3494367522195464, 87 | name: '渡一前端必修课', 88 | vpName: 'compulsory_course', 89 | url: 'https://space.bilibili.com/3494367522195464/video', 90 | }, 91 | { 92 | alias: 'dyqdxxkj', 93 | mid: 3546700759173216, 94 | name: '渡一前端学习空间', 95 | vpName: 'front_learning_space', 96 | url: 'https://space.bilibili.com/3546700759173216/video', 97 | }, 98 | { 99 | alias: 'dytxkj', 100 | mid: 3546701442844736, 101 | name: '渡一前端提薪空间', 102 | vpName: 'front_raises_salary_space', 103 | url: 'https://space.bilibili.com/3546701442844736/video', 104 | }, 105 | { 106 | alias: 'dyjksfxjd', 107 | mid: 3546702577404004, 108 | name: '渡一教科书复习基地', 109 | vpName: 'textbook_review_base', 110 | url: 'https://space.bilibili.com/3546702577404004/video', 111 | }, 112 | { 113 | alias: 'dyjksfxjdm', 114 | mid: 3546638597491574, 115 | name: '渡一教科书复习基地m', 116 | vpName: 'textbook_review_base_m', 117 | url: 'https://space.bilibili.com/3546638597491574/video', 118 | }, 119 | { 120 | alias: 'dyqdbxkjm', 121 | mid: 3546701459622695, 122 | name: '渡一前端必修空间m', 123 | vpName: 'front_end_required_space_m', 124 | url: 'https://space.bilibili.com/3546701459622695/video', 125 | }, 126 | { 127 | alias: 'dyqdbxkj', 128 | mid: 3494367524293389, 129 | name: '渡一前端必修空间m', 130 | vpName: 'front_end_required_space', 131 | url: 'https://space.bilibili.com/3494367524293389/video', 132 | }, 133 | { 134 | alias: 'dyqdxxkjm', 135 | mid: 3546701449136645, 136 | name: '渡一前端学习空间m', 137 | vpName: 'front_learning_space_m', 138 | url: 'https://space.bilibili.com/3546701449136645/video', 139 | }, 140 | { 141 | alias: 'dyqdgkdsk', 142 | mid: 3494367331354766, 143 | name: '渡一前端公开大师课', 144 | vpName: 'open_master_class', 145 | url: 'https://space.bilibili.com/3494367331354766/video', 146 | }, 147 | { 148 | alias: 'dqqdjkpd', 149 | mid: 3494367333452734, 150 | name: '渡一前端教科频道', 151 | vpName: 'front_end_teaching_channel', 152 | url: 'https://space.bilibili.com/3494367333452734/video', 153 | }, 154 | { 155 | alias: 'dqtxk', 156 | mid: 666759136, 157 | name: '渡一教育-提薪课', 158 | vpName: 'enhancement_course', 159 | url: 'https://space.bilibili.com/666759136/video', 160 | }, 161 | ] 162 | -------------------------------------------------------------------------------- /src/playwright/bilibili.ts: -------------------------------------------------------------------------------- 1 | import fs from 'node:fs' 2 | import { resolve } from 'node:path' 3 | import { cwd } from 'node:process' 4 | import dayjs from 'dayjs' 5 | import { chromium } from 'playwright' 6 | 7 | export async function getBiliBiliDataList(fileName: string, url: string) { 8 | const browser = await chromium.launch({ 9 | channel: 'chrome', 10 | headless: false, 11 | }) 12 | const context = await browser.newContext() 13 | const page = await context.newPage() 14 | 15 | const filePath = resolve(cwd(), `./data/${fileName}.json`) 16 | fs.writeFileSync(filePath, '[\n', { 17 | encoding: 'utf8', 18 | flag: 'w', 19 | }) 20 | 21 | // 监听请求数据 22 | page.on('response', async (response) => { 23 | if (response.url().includes('x/space/wbi/arc/search')) { 24 | const text = await response.text() 25 | if (text && JSON.parse(text)?.data) { 26 | // console.log('响应内容:', JSON.parse(text)['data']['list']['vlist']) 27 | const vList = JSON.parse(text).data.list.vlist 28 | vList.forEach((item: any) => { 29 | const item_title = item.title 30 | const time = dayjs.unix(item.created).format('YYYY-MM-DD HH:mm:ss') 31 | const content = `{"title":"${item_title}","url":"https://www.bilibili.com/${item.bvid}","time":"${time}","cover":"${item.pic}"},\n` 32 | fs.writeFileSync(filePath, content, { 33 | encoding: 'utf8', 34 | flag: 'a', 35 | }) 36 | }) 37 | } 38 | } 39 | }) 40 | 41 | await page.goto(url) 42 | 43 | await page.waitForTimeout(2000) 44 | 45 | await page.keyboard.press('End') 46 | // await page.waitForSelector('.vui_pagenation-go__count:text("下一页")', { timeout: 20000 }) 47 | await page.getByRole('button', { name: '下一页' }) 48 | 49 | // 获取分页的数量 50 | // 获取 .be-pager-total 元素的内容 51 | const totalText = (await page.textContent('.vui_pagenation-go__count')) || '' 52 | // 使用正则提取数字 53 | const match = totalText.match(/共\s*(\d+)\s*页/) 54 | 55 | const pages = Number(match?.[1]) || 0 56 | console.log(`总共页面:${pages}`) 57 | 58 | for (let i = 1; i < pages; i++) { 59 | console.log(`正在执行第 ${i} 次翻页...`) 60 | // 等待 "下一页" 按钮出现 61 | const nextPageButton = await page.getByRole('button', { name: '下一页' }) 62 | // 如果按钮不存在或者被禁用,则跳出循环 63 | if (!nextPageButton) { 64 | console.log('未找到下一页按钮,结束循环') 65 | continue 66 | } 67 | 68 | // 触发 end 键盘事件,页面滚动至底部 69 | await page.keyboard.press('End') 70 | // 停顿2秒 71 | await page.waitForTimeout(2000) 72 | // 触发 下一页 按钮事件 73 | await page.getByRole('button', { name: '下一页' }).click() 74 | // 额外等待,确保新页面加载完成 75 | await page.waitForTimeout(3000) 76 | } 77 | 78 | fs.writeFileSync(resolve(cwd(), `./data/${fileName}.json`), ']\n', { 79 | encoding: 'utf8', 80 | flag: 'a', 81 | }) 82 | 83 | // 等待 2 秒后关闭 84 | setTimeout(async () => { 85 | await context.close() 86 | await browser.close() 87 | }, 2000) 88 | } 89 | 90 | export async function getBiliBiliNewData(fileName: string, url: string) { 91 | const browser = await chromium.launch({ 92 | channel: 'chrome', 93 | headless: false, 94 | }) 95 | const context = await browser.newContext({ 96 | userAgent: 97 | 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', 98 | }) 99 | const page = await context.newPage() 100 | 101 | const filePath = resolve(cwd(), `./data/${fileName}.json`) 102 | 103 | page.on('response', async (response) => { 104 | if (response.url().includes('x/space/wbi/arc/search')) { 105 | const text = await response.text() 106 | if (text && JSON.parse(text)?.data) { 107 | console.log(JSON.parse(text)) 108 | const vList = JSON.parse(text).data.list.vlist 109 | const row = vList[0] 110 | const oldContent = JSON.parse(fs.readFileSync(filePath, 'utf-8')) 111 | const firstContent = oldContent[0] 112 | const lastTime = row.created 113 | const contentLastTime = dayjs(firstContent.time).valueOf() / 1e3 114 | if (contentLastTime < lastTime) { 115 | oldContent.unshift({ 116 | title: row.title, 117 | url: `https://www.bilibili.com/${row.bvid}`, 118 | time: dayjs.unix(row.created).format('YYYY-MM-DD HH:mm:ss'), 119 | cover: row.pic, 120 | }) 121 | fs.writeFileSync(filePath, JSON.stringify(oldContent), { 122 | encoding: 'utf8', 123 | flag: 'w', 124 | }) 125 | } 126 | } 127 | } 128 | }) 129 | 130 | await page.goto(url) 131 | 132 | // 等待 2 秒后关闭 133 | setTimeout(async () => { 134 | await context.close() 135 | await browser.close() 136 | }, 2000) 137 | } 138 | 139 | // await getBiliBiliDataList('qdjjk', 'https://space.bilibili.com/174874061/video') 140 | // await getBiliBiliDataList('jybckt', 'https://space.bilibili.com/383573378/video') 141 | // await getBiliBiliDataList('txkjm', 'https://space.bilibili.com/3537111135291562/video') 142 | // await getBiliBiliDataList('webqdkf', 'https://space.bilibili.com/384876532/video') 143 | // await getBiliBiliDataList('qdbxk', 'https://space.bilibili.com/3494367522195464/video') 144 | // await getBiliBiliNewData('qdjjk', 'https://space.bilibili.com/174874061/video') 145 | -------------------------------------------------------------------------------- /data/new/jks.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "title": "什么是工作流引擎?对前端开发会有哪些影响?", "url": "https://www.douyin.com/video/7577705163075439881", "time": "2025-11-29 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/79eb731113b348f28427e7279d3cae7a?lk3s=138a59ce&x-expires=1767445200&x-signature=7nvn%2Fpb2nmV2oOxIWGXFAsei4xY%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 3 | { "title": "学习工作流最重要的是理解核心概念,概念不明,寸步难行", "url": "https://www.douyin.com/video/7577586431002987818", "time": "2025-11-28 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/c16de6223736457eb20083c25266262c?lk3s=138a59ce&x-expires=1767445200&x-signature=yC2bf4hE89Vny3vlWb3GW0nQ578%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 4 | { "title": "如何通过向量相似度算法匹配知识?如何结合用户问题生成答案?", "url": "https://www.douyin.com/video/7572023828306464009", "time": "2025-11-14 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d2cce78e2e2c4c3a90dc33605aaf069e?lk3s=138a59ce&x-expires=1767445200&x-signature=Ny3%2FmnmGJ4epqT1%2BALsOmU3diYg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 5 | { "title": "为什么需要对知识库建立索引?索引如何建立?", "url": "https://www.douyin.com/video/7571706209791659291", "time": "2025-11-13 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/ccc7593f529644cc97950572022bd964?lk3s=138a59ce&x-expires=1767445200&x-signature=h0ix76yKeaUHr12QSUfzW5Cr9eU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 6 | { "title": "RAG为什么是重要的AI技术?什么是RAG?如何实现RAG?", "url": "https://www.douyin.com/video/7571767756194958619", "time": "2025-11-12 17:26:06", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/ea4b40d82964476190f0e9cdf80addb5?lk3s=138a59ce&x-expires=1767445200&x-signature=HUshAKE9%2BvGec4lciygi5taMrfM%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 7 | { "title": "实现样式隔离、自定义内容、自定义事件", "url": "https://www.douyin.com/video/7563946966812609838", "time": "2025-10-25 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/31db2d01c6ca459a8ad52f9feff39f40?lk3s=138a59ce&x-expires=1767445200&x-signature=5ZfG15WdVQJuyzsJG%2BOY%2BUUV5Ik%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 8 | { "title": "利用模板字符串实现精准渲染更新,你敢信?", "url": "https://www.douyin.com/video/7564289150090874164", "time": "2025-10-24 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/798a9b571c3e42a7823a3635a0579fab?lk3s=138a59ce&x-expires=1767445200&x-signature=AgKUltFhHFiqIn9jt7R8UpofMGU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 9 | { "title": "组件的终极方案Web Components,让你的组件变成HTML标签", "url": "https://www.douyin.com/video/7564288520844545332", "time": "2025-10-23 13:42:57", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/3b98896d733642e0b6bfa415160a0be0?lk3s=138a59ce&x-expires=1767445200&x-signature=xPteEIp%2FPeh8MjRV6L8Obk0flJs%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 10 | { "title": "大中厂都在用monorepo工程管理你掌握了吗?monorepo如何对子包进行打包、依赖、测试、发布", "url": "https://www.douyin.com/video/7554234265781783818", "time": "2025-09-28 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/4ba9baf0ba794fcea64e8bb18dc4bda2?lk3s=138a59ce&x-expires=1767445200&x-signature=FL%2FnPu4sbZjX%2BuC348liPvnMPfs%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 11 | { "title": "大中厂都在用monorepo工程管理你掌握了吗?monorepo如何统一工程规范", "url": "https://www.douyin.com/video/7554233625416355099", "time": "2025-09-27 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/061f22127099436eae8515018bc98c7d?lk3s=138a59ce&x-expires=1767445200&x-signature=G7q4UVX%2BJj0qBaEDyfbDEiY2nL8%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 12 | { "title": "前端终极布局方案——网格布局,如何将子项放入网格", "url": "https://www.douyin.com/video/7549045220403449098", "time": "2025-09-14 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/2b8cb04c5e0340a3b23cbd5e3a30bdd7?lk3s=138a59ce&x-expires=1767445200&x-signature=lGubsEA%2FtBjSuHT6I9mZmtg5Lqw%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 13 | { "title": "前端终极布局方案——网格布局,如何编排网格", "url": "https://www.douyin.com/video/7549044616083918131", "time": "2025-09-13 12:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/807babd3ea204b24a505795096cd6346?lk3s=138a59ce&x-expires=1767445200&x-signature=GxBp76BoIhQ2WOg7HjqkE45ixbE%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 14 | { "title": "实现Promise最复杂的then函数", "url": "https://www.douyin.com/video/7545378351192509735", "time": "2025-09-02 14:41:46", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/85f03b0642814471a384a6a88bfde00c?lk3s=138a59ce&x-expires=1767445200&x-signature=fZn0pJ198Fg945iLGtCLt9mZuns%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 15 | { "title": "Promise状态转换中你不知道的细节", "url": "https://www.douyin.com/video/7545036086813265215", "time": "2025-09-01 16:33:35", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d7932bc050bc401fa009d5f052d32609?lk3s=138a59ce&x-expires=1767445200&x-signature=P5tQXlTU2S3lhfUxdseYoHT9jIk%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 16 | { "title": "关于前端职业的未来-真正的问题", "url": "https://www.douyin.com/video/7540131529448525098", "time": "2025-08-25 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f63afe775c034a1c91741132f91f80e2?lk3s=138a59ce&x-expires=1767445200&x-signature=OCAB5DFzMiKf99fFKQB6mGWLI1A%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 17 | { "title": "关于前端职业的未来-职业的选择", "url": "https://www.douyin.com/video/7540203667589287222", "time": "2025-08-22 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/3a61badef9ba4bc4af9c15933190e8fc?lk3s=138a59ce&x-expires=1767445200&x-signature=0opvtcNdqvVi8Gk3dnnqNHBpWHs%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 18 | { "title": "关于前端职业的未来-岗位的变化", "url": "https://www.douyin.com/video/7540129452949359913", "time": "2025-08-22 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/b6bee63462b443348cd64b065d52323b?lk3s=138a59ce&x-expires=1767445200&x-signature=fBm1c9KUerx3xkV2QOcIJDw6Q6Y%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 19 | { "title": "关于前端职业的未来-市场的噪音", "url": "https://www.douyin.com/video/7540126249687993639", "time": "2025-08-21 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/1e81e6256bcc40d3a8fe410afd2aaa79?lk3s=138a59ce&x-expires=1767445200&x-signature=wrjcf70vCRzh%2FL3EipXPWS3yMKo%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" }, 20 | { "title": "火爆全网的MCP全解读,MCP项目助你就业涨薪", "url": "https://www.douyin.com/video/7540125372214480182", "time": "2025-08-20 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/b042d957f293472c8b257fa900277851?lk3s=138a59ce&x-expires=1767445200&x-signature=p5cj4ySmYu9RqzA1ngQG%2B4Cz5sM%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053159AA1A3A479D09EB18C2" } 21 | ] 22 | -------------------------------------------------------------------------------- /data/new/txk.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "title": "零宽字符", "url": "https://www.douyin.com/video/7582882193471589673", "time": "2025-12-13 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/733f2a228f1c480085a5588adc14f40f?lk3s=138a59ce&x-expires=1767445200&x-signature=%2Bbx%2BmGf%2BeyFFOQ9JC%2BMyx5OcV%2Fg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 3 | { "title": "属性到底存在不存在?", "url": "https://www.douyin.com/video/7582619526236212523", "time": "2025-12-12 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/24b2cd3e33f24f5e845c09ea0b8fc34e?lk3s=138a59ce&x-expires=1767445200&x-signature=LevirwFbXRKapNkUXEN3QtYiJbA%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 4 | { "title": "JS真的有引用传递吗", "url": "https://www.douyin.com/video/7582142463847042310", "time": "2025-12-11 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/54da84631a2a452991b30b6dc16b2027?lk3s=138a59ce&x-expires=1767445200&x-signature=9SuGlXcEg0hFF8vAaz%2BjeSkFmNg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 5 | { "title": "等号运算符的运算和转换规则", "url": "https://www.douyin.com/video/7581837672986070314", "time": "2025-12-10 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/71d884e0a5f546fc96a67c42c1417e75?lk3s=138a59ce&x-expires=1767445200&x-signature=9d16lS1rxA73kQWmj56eDlZg7z0%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 6 | { "title": "你不知道的数字字面量", "url": "https://www.douyin.com/video/7581411010066631951", "time": "2025-12-09 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/40a6c6dde2414fbd94096112d698a7ad?lk3s=138a59ce&x-expires=1767445200&x-signature=seKQtpT9U00GPXAv2zMFbk7kOu0%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 7 | { "title": "层叠规则", "url": "https://www.douyin.com/video/7580718034927635731", "time": "2025-12-08 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f0580c038cfc49739583d8602822c3e6?lk3s=138a59ce&x-expires=1767445200&x-signature=DUP8Q%2FAJXP2ZEL2EO8HdVa4T3%2Bg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 8 | { "title": "页面可见度API", "url": "https://www.douyin.com/video/7580300100317089064", "time": "2025-12-06 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9a48e6b8cc3c4fd3a99733c92765a797?lk3s=138a59ce&x-expires=1767445200&x-signature=nIUAIbUB7e8TbJzBnnKr2kLPv7k%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 9 | { "title": "Sass实现星空效果", "url": "https://www.douyin.com/video/7579927062677409024", "time": "2025-12-05 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/c12f3cf118004dd98c020a06644b88d5?lk3s=138a59ce&x-expires=1767445200&x-signature=Lkf5nsfDGBwmzcLg7jA26zkjBL4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 10 | { "title": "SASS中的模块化开发", "url": "https://www.douyin.com/video/7579611165567831315", "time": "2025-12-04 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d4deff1c40dc4a9382bcac9b1bd6cdf6?lk3s=138a59ce&x-expires=1767445200&x-signature=Ur2aHXOUObvg8awnRFmJtkC2voc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 11 | { "title": "浏览器的自动播放策略", "url": "https://www.douyin.com/video/7579184017380068634", "time": "2025-12-03 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9155efe08c58402bb3e17a8126e0a203?lk3s=138a59ce&x-expires=1767445200&x-signature=YFGPnzEqmkNLZI2EoAbvTuEFLFI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 12 | { "title": "惰性函数", "url": "https://www.douyin.com/video/7578879656074448154", "time": "2025-12-02 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/10ef8bf8261d4e08999689a731869fee?lk3s=138a59ce&x-expires=1767445200&x-signature=JnmEFKJKyVUnHXWXdRWiTLr8AIc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 13 | { "title": "vue组件命名规范", "url": "https://www.douyin.com/video/7577691115470458162", "time": "2025-12-01 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/1d4fec03dbf2404d8cf93daae3f5ee79?lk3s=138a59ce&x-expires=1767445200&x-signature=yoCddZo0%2BbKeX%2B%2FW3rWDanXZaIQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 14 | { "title": "01背包问题", "url": "https://www.douyin.com/video/7577690689069255945", "time": "2025-11-29 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/6419742ae99c4bc3a9599655563d583f?lk3s=138a59ce&x-expires=1767445200&x-signature=t3Y6sM1DSRGlip2agmzV10LXpQQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 15 | { "title": "Web Animation API", "url": "https://www.douyin.com/video/7577369232271314227", "time": "2025-11-28 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/73e8fc34d58c4dd2a35856a94dfab6c0?lk3s=138a59ce&x-expires=1767445200&x-signature=PoTJpWjI0OHXGii2%2FklpxdoPOD0%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 16 | { "title": "clip-path", "url": "https://www.douyin.com/video/7576951341843549483", "time": "2025-11-27 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/77fa5200856441aea6d2ec6ae6dbc720?lk3s=138a59ce&x-expires=1767445200&x-signature=Xb1u7IpYsAu0R2eOzRJwq626hCY%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 17 | { "title": "封装动画函数", "url": "https://www.douyin.com/video/7576633710267600166", "time": "2025-11-26 23:50:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/c1995e9c30ae4e23b883f8cf55beb2f9?lk3s=138a59ce&x-expires=1767445200&x-signature=aJ8NHHoevoF84zg6d1aQ4zDUYoo%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 18 | { "title": "ES6函数的常见面试题", "url": "https://www.douyin.com/video/7576216171100310827", "time": "2025-11-25 23:50:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/ab564499ec4d4d56b70fc2b600da224c?lk3s=138a59ce&x-expires=1767445200&x-signature=VdJ2MCgkuviT7cSqfBGk97X3AVM%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 19 | { "title": "inspect插件", "url": "https://www.douyin.com/video/7575478391776824619", "time": "2025-11-24 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/a17410f6b903460eafb167c786c5477f?lk3s=138a59ce&x-expires=1767445200&x-signature=wkMklOW51VrxrWV3UA2BU3C1lGc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 20 | { "title": "判断稀疏数组", "url": "https://www.douyin.com/video/7575103476317932819", "time": "2025-11-22 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/15a520e865e740ebb4f70914ab195dfa?lk3s=138a59ce&x-expires=1767445200&x-signature=GxwHQH%2BThLN05tRE2J3pqVL6Uqc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" }, 21 | { "title": "实例成员和静态成员", "url": "https://www.douyin.com/video/7574728956625095990", "time": "2025-11-21 23:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/e3e3c40b33f14664b028126455454d03?lk3s=138a59ce&x-expires=1767445200&x-signature=5we9k86Gi2ynL5jpw8Un6c%2F2JAQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105230E77FC515AB5F0E209FE" } 22 | ] 23 | -------------------------------------------------------------------------------- /data/new/bxk.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "title": "多次触发的动画结束事件", "url": "https://www.douyin.com/video/7582881566225976630", "time": "2025-12-13 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/ccc46ed2733d402bb8f8a840206a701a?lk3s=138a59ce&x-expires=1767445200&x-signature=1P8yOUrkW6xH8W%2FADwnVY1GyBVQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 3 | { "title": "ESModule的工作原理", "url": "https://www.douyin.com/video/7582618753142197510", "time": "2025-12-12 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f6da088c3dcd43aeacd9c1475d349947?lk3s=138a59ce&x-expires=1767445200&x-signature=Uuo5INNhJHSztvGQ0adhDsFE8%2FE%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 4 | { "title": "浏览器原生弹窗", "url": "https://www.douyin.com/video/7582141836622384438", "time": "2025-12-11 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/576c222c15184b4d8e39bfab7e8cd76e?lk3s=138a59ce&x-expires=1767445200&x-signature=K9b8mWNgUfE1oEyh4RsM1Cwvqd4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 5 | { "title": "利用延迟实现复杂动画", "url": "https://www.douyin.com/video/7581837566610115894", "time": "2025-12-10 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/66435f360f4d48bf863a87a55e171959?lk3s=138a59ce&x-expires=1767445200&x-signature=24AvQr6m9xcseS8S2wmOg4tiLNo%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 6 | { "title": "Sass实现文字替换", "url": "https://www.douyin.com/video/7581410394434997544", "time": "2025-12-09 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/a6046b21db46434d8bd6c0b4e2067cec?lk3s=138a59ce&x-expires=1767445200&x-signature=cG0ic6%2F4r4Ch1bnrgnBWNvIFr4k%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 7 | { "title": "俄罗斯方块实现思路", "url": "https://www.douyin.com/video/7580718176103681322", "time": "2025-12-08 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/fe45670897ba412ea587ce5cf35c97e6?lk3s=138a59ce&x-expires=1767445200&x-signature=D9zw20YGU36V%2Bu%2Bn6geloVYCCHw%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 8 | { "title": "使用SASS实现主题切换", "url": "https://www.douyin.com/video/7580300809468939560", "time": "2025-12-06 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/2013d07afb6a4bd2a1b48b823b345cce?lk3s=138a59ce&x-expires=1767445200&x-signature=dX93FZ7mFuJRFy8ep%2FIRbdKj8QE%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 9 | { "title": "无限视差滚动", "url": "https://www.douyin.com/video/7580297557851622708", "time": "2025-12-05 17:06:08", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d47049784ef54533bee57b0d4aa0bef3?lk3s=138a59ce&x-expires=1767445200&x-signature=UyCakj9czeokAlykyXo9LKCnZLk%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 10 | { "title": "漂亮的文字阴影", "url": "https://www.douyin.com/video/7579611081631468843", "time": "2025-12-04 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/45634ebed0084248bf0ed5870c2c7e70?lk3s=138a59ce&x-expires=1767445200&x-signature=I16pDYNuemhtYKt8sodmQ6hVMfQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 11 | { "title": "无法预测的大数运算", "url": "https://www.douyin.com/video/7579183143404457266", "time": "2025-12-03 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7cea0584285647388dd82da0e3cd6e2e?lk3s=138a59ce&x-expires=1767445200&x-signature=oxnFCD9V%2F1NWkrB4z5wId0qYKYY%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 12 | { "title": "无法取消的默认行为", "url": "https://www.douyin.com/video/7579198392413310251", "time": "2025-12-02 18:00:52", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/b4e20aec7c93441ba75a80745aae296f?lk3s=138a59ce&x-expires=1767445200&x-signature=gKtO6a3Ogjey05SwUTM%2F0%2BN1Z2k%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 13 | { "title": "鼠标和键盘事件的常见问题", "url": "https://www.douyin.com/video/7577690044861844745", "time": "2025-12-01 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/3488731f77304ec383e96af6083572c7?lk3s=138a59ce&x-expires=1767445200&x-signature=nYz93o%2BirvT5tQhpLIsDC5VRuOU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 14 | { "title": "如何防截屏防录制", "url": "https://www.douyin.com/video/7577689354382871818", "time": "2025-11-29 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/2411d5174d6341e084cd61cc1a2ddf86?lk3s=138a59ce&x-expires=1767445200&x-signature=gOQWy9GuUQJLBpSQ66WcxbVyAn4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 15 | { "title": "Ajax中的各种常见概念", "url": "https://www.douyin.com/video/7577369688749935918", "time": "2025-11-28 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/af05167bf03d481699e87b3946e86f9f?lk3s=138a59ce&x-expires=1767445200&x-signature=MLIvng2LIXrh46n8AYqpNoowmHg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 16 | { "title": "copy的监听和解禁", "url": "https://www.douyin.com/video/7576950585681923382", "time": "2025-11-27 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/2b83f22f08664de8b91794ed669fd126?lk3s=138a59ce&x-expires=1767445200&x-signature=Qt5%2Bm4EutNDnTLi1XBkpFNhlzJI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 17 | { "title": "黏性定位", "url": "https://www.douyin.com/video/7576633656769301811", "time": "2025-11-26 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/16b30363cc9f47c192276acfa390e769?lk3s=138a59ce&x-expires=1767445200&x-signature=k4%2F62r7EE2D7V6VJp%2FhGFxQN9yc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 18 | { "title": "initial、unset、revert", "url": "https://www.douyin.com/video/7576215142829018404", "time": "2025-11-25 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9e17e16d9d544bcfae8e53b7efe00e72?lk3s=138a59ce&x-expires=1767445200&x-signature=AEJ9XU7KVPRHeojsUFxIvzXoYLk%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 19 | { "title": "用canvas玩转图片", "url": "https://www.douyin.com/video/7575475355868351807", "time": "2025-11-24 15:30:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7c8b336d8849491b85cc06e70b02a905?lk3s=138a59ce&x-expires=1767445200&x-signature=TpjTXu0HfogMz4EfFPsVR%2Fn9DF0%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 20 | { "title": "Cookie中的SameSite", "url": "https://www.douyin.com/video/7575475971797667078", "time": "2025-11-22 17:15:54", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/678b6e0a084a49fdb925ba5ab32a9992?lk3s=138a59ce&x-expires=1767445200&x-signature=TUo8GlycOXL5%2FEPUvb25hk38xow%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" }, 21 | { "title": "实现防篡改的水印", "url": "https://www.douyin.com/video/7574728224660360454", "time": "2025-11-21 15:30:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/cd7fcbe65c3041c994bc7e37f27218d8?lk3s=138a59ce&x-expires=1767445200&x-signature=QaZmBAKrcYBDk0eGu6Xa71Rg9hc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053474A3900EA25BB4E5C083" } 22 | ] 23 | -------------------------------------------------------------------------------- /data/new/dmyh.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "title": "原型污染有多重要?React核弹级漏洞引发原因", "url": "https://www.douyin.com/video/7582862268191313215", "time": "2025-12-12 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/3ece47c46cad4c1f9a6ae100102f41e2?lk3s=138a59ce&x-expires=1767445200&x-signature=BcFPth5sfeId6SC%2BUnpSbBlopHM%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 3 | { "title": "想让一个方法获得最大的复用性?那一定离不开依赖注入", "url": "https://www.douyin.com/video/7582432299065593142", "time": "2025-12-11 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/dac5f29b6c8f41f19957ff1df50a49da?lk3s=138a59ce&x-expires=1767445200&x-signature=N2%2F5ICZz58JvGnoPAIeKBZIVKJA%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 4 | { "title": "对于性能问题束手无策?性能分析工具帮你快速定位问题", "url": "https://www.douyin.com/video/7581726555043417407", "time": "2025-12-09 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/5efba0e1e62143358d3ba45ed0a031a8?lk3s=138a59ce&x-expires=1767445200&x-signature=A5KZx0sxEJN%2BHpG0inFiNPTkpqg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 5 | { "title": "Worker Pool", "url": "https://www.douyin.com/video/7580260036639837474", "time": "2025-12-05 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/e87d8f4bd7c54e9393fd7a1ba925da35?lk3s=138a59ce&x-expires=1767445200&x-signature=41qX8bw1AxQdKgz54fHsVLFtFHs%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 6 | { "title": "对于别人写的代码中,可能会出现的错误异常怎么捕获?", "url": "https://www.douyin.com/video/7579880502350400802", "time": "2025-12-04 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7ee439365a804997a8b86853958ed1bf?lk3s=138a59ce&x-expires=1767445200&x-signature=iml5spm8%2FMEgkOBa%2FbUOdQr6bdQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 7 | { "title": "JSON Schema", "url": "https://www.douyin.com/video/7579154877981625636", "time": "2025-12-02 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/763c460c1364471782ae8d60fd841754?lk3s=138a59ce&x-expires=1767445200&x-signature=O9VF1I3xhq%2Br%2F3Cn23tgtFEGcuI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 8 | { "title": "想成为架构师?那你一定要了解AST", "url": "https://www.douyin.com/video/7577680665681120575", "time": "2025-11-29 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/abdc0b97cf58436aaf0c9131aa40d2b0?lk3s=138a59ce&x-expires=1767445200&x-signature=twg%2FqwNugo1cSLjSKV98gWY9F4U%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 9 | { "title": "闭包的概念和应用还不清晰?一个视频带你形象的理解闭包和其应用", "url": "https://www.douyin.com/video/7577680264785120548", "time": "2025-11-28 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/47d571fa66a24c87a7a8091412612990?lk3s=138a59ce&x-expires=1767445200&x-signature=1G4Knfl49WKdXWh2vfHNxB0thzk%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 10 | { "title": "React阻止冒泡", "url": "https://www.douyin.com/video/7576938393913806123", "time": "2025-11-26 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/6ff3327592284cd4939ec081bd02b98b?lk3s=138a59ce&x-expires=1767445200&x-signature=aRYaxC%2F%2FpEDL6kMFtW86Cfav40M%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 11 | { "title": "React运行时切换方法", "url": "https://www.douyin.com/video/7575010098523753738", "time": "2025-11-21 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f5b86b659966410e974e3c8761b12156?lk3s=138a59ce&x-expires=1767445200&x-signature=VEpywkBBPultJ9ZEzwMpgNYGKUI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 12 | { "title": "前端已死?前端真的会死么?", "url": "https://www.douyin.com/video/7574336031739186442", "time": "2025-11-19 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9e01dc1e09c1444cb85a9204ba4e2108?lk3s=138a59ce&x-expires=1767445200&x-signature=CEG1d%2BBwZTQvXnFml7hGbhSRxdM%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 13 | { "title": "不同前端接到条款类页面需求", "url": "https://www.douyin.com/video/7573538232315514131", "time": "2025-11-17 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d737e3044be543c39dff69697001e2fc?lk3s=138a59ce&x-expires=1767445200&x-signature=jUsZxqW1k%2B3OJSOBi2QPbfYhMb8%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 14 | { "title": "React Diff中placement", "url": "https://www.douyin.com/video/7572420410940165439", "time": "2025-11-14 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f9eb37e03dff4d16b649596abf9d9a70?lk3s=138a59ce&x-expires=1767445200&x-signature=eHNLJ3C05wNCHM4eVKIFqJInQJc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 15 | { "title": "React的diff主流程", "url": "https://www.douyin.com/video/7572388329564523830", "time": "2025-11-14 09:34:19", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/63729a65a8054e2b803525e008c887a9?lk3s=138a59ce&x-expires=1767445200&x-signature=ngE5IQUTTUP57ZLPANy%2F4IDSHPc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 16 | { "title": "React中的时间切片", "url": "https://www.douyin.com/video/7571695264809946387", "time": "2025-11-12 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7d39e971e6ba455185b6fc9cede302cc?lk3s=138a59ce&x-expires=1767445200&x-signature=%2FMlqh%2BR%2BL9uZaPWDvWKKeYO%2BKmk%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 17 | { "title": "React中的key是什么?", "url": "https://www.douyin.com/video/7571355774224452900", "time": "2025-11-11 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/39b3934f3e0e41cea620a6de3cfbbc5a?lk3s=138a59ce&x-expires=1767445200&x-signature=JNPd1MzlirjBVN9tiRqoDkVrhXQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 18 | { "title": "可以在组件外修改组件状态么?", "url": "https://www.douyin.com/video/7569825156655320356", "time": "2025-11-10 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/30b1bd43fd224c789fa283947493208f?lk3s=138a59ce&x-expires=1767445200&x-signature=06jQoEWEzZct4E5qFzvPs1nqizY%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 19 | { "title": "为什么setState是异步的?", "url": "https://www.douyin.com/video/7569824779105062207", "time": "2025-11-08 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/aa287cdffd934eb181942781950e3e0d?lk3s=138a59ce&x-expires=1767445200&x-signature=vyDGRFEy87LR6aMZQ%2BTlYCHH0Q4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 20 | { "title": "什么时候用useEffect?", "url": "https://www.douyin.com/video/7569824430529039635", "time": "2025-11-07 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/6d3f0bdbc8764c9d9fda792ab9478926?lk3s=138a59ce&x-expires=1767445200&x-signature=9P4pBT6nK4ZM2FGpSy6FVsj4TjQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" }, 21 | { "title": "状态更新不及时,因为setstate异步?", "url": "https://www.douyin.com/video/7569433448012582187", "time": "2025-11-06 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/514f326301ac4292939c3d3f2bb5bf30?lk3s=138a59ce&x-expires=1767445200&x-signature=%2FOl1Mzk47Lu92iWxrJIGuWkwQN8%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025122021053815869CAD51FBE0199970" } 22 | ] 23 | -------------------------------------------------------------------------------- /src/douyin/index.ts: -------------------------------------------------------------------------------- 1 | import type { DouYinQuery } from '#/douyin' 2 | import type { DouYinChannel } from '#/types.ts' 3 | import fs from 'node:fs' 4 | import { resolve } from 'node:path' 5 | import { cwd } from 'node:process' 6 | import axios from 'axios' 7 | import dayjs from 'dayjs' 8 | import { getMsToken } from '@/douyin/msToken.ts' 9 | import { write } from '@/util.ts' 10 | 11 | function handleEffectiveVideo(channel: DouYinChannel, video: any) { 12 | const filePath = resolve(cwd(), `./data/new/${channel.alias}.json`) 13 | write(filePath, '[\n', true) 14 | video.forEach((item: any) => { 15 | const content = `${JSON.stringify({ 16 | title: item.item_title || item.desc.split('\n')[0], 17 | url: `https://www.douyin.com/video/${item.aweme_id}`, 18 | time: dayjs.unix(item.create_time).format('YYYY-MM-DD HH:mm:ss'), 19 | cover: item.video?.dynamic_cover?.url_list[0] || item.video?.origin_cover?.url_list[0] || '', 20 | })},\n` 21 | write(filePath, content) 22 | }) 23 | write(filePath, ']\n') 24 | } 25 | 26 | export async function getDouYinData(channel: DouYinChannel) { 27 | const query = { 28 | device_platform: 'webapp', 29 | aid: '6383', 30 | channel: 'channel_pc_web', 31 | pc_client_type: 1, 32 | version_code: '290100', 33 | version_name: '29.1.0', 34 | cookie_enabled: 'true', 35 | screen_width: 1920, 36 | screen_height: 1080, 37 | browser_language: 'zh-CN', 38 | browser_platform: 'Win32', 39 | browser_name: 'Chrome', 40 | browser_version: '130.0.0.0', 41 | browser_online: 'true', 42 | engine_name: 'Blink', 43 | engine_version: '130.0.0.0', 44 | os_name: 'Windows', 45 | os_version: '10', 46 | cpu_core_num: 12, 47 | device_memory: 8, 48 | platform: 'PC', 49 | downlink: '10', 50 | effective_type: '4g', 51 | from_user_page: '1', 52 | locate_query: 'false', 53 | need_time_list: '1', 54 | pc_libra_divert: 'Windows', 55 | publish_video_strategy_type: '2', 56 | round_trip_time: '0', 57 | show_live_replay_strategy: '1', 58 | time_list_query: '0', 59 | whale_cut_token: '', 60 | update_version_code: '170400', 61 | msToken: getMsToken(), 62 | max_cursor: 0, 63 | count: 20, 64 | sec_user_id: channel.uid, 65 | } 66 | 67 | const encodeQuery = Object.keys(query) 68 | .map(key => `${key}=${query[key as keyof DouYinQuery]}`) 69 | .join('&') 70 | 71 | const useragent 72 | = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36' 73 | 74 | const headers = { 75 | 'User-Agent': useragent, 76 | 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 77 | 'Referer': 'https://www.douyin.com/', 78 | 'Cookie': '__ac_nonce=067d687ac00d70af16eab; __ac_signature=_02B4Z6wo00f018O6kmgAAIDAR1H8JrcivBPDi5bAAJdBcf; ttwid=1%7C46sVJ6G5zO0ZRKBqbFef2B13U3CqP9gLwQEH8IV2y6A%7C1742112685%7Cae649397cca7dde21884d5f8e3e3d53eb2361aa64af04cd6889fa71d7f23344b; UIFID_TEMP=986fab8dfc2c74111fac2b883dbdee67777473ded35e2c4bebbf68cc8b91739da61f6b365ad9795b0aa3a8bddce6cc3e39c5d4fd4bad667aaefd3d3ec08baac66fe3b215343f12d8aae84e0a24048f44; douyin.com; device_web_cpu_core=16; device_web_memory_size=-1; architecture=amd64; hevc_supported=true; IsDouyinActive=true; home_can_add_dy_2_desktop=%220%22; dy_swidth=1835; dy_sheight=1147; stream_recommend_feed_params=%22%7B%5C%22cookie_enabled%5C%22%3Atrue%2C%5C%22screen_width%5C%22%3A1835%2C%5C%22screen_height%5C%22%3A1147%2C%5C%22browser_online%5C%22%3Atrue%2C%5C%22cpu_core_num%5C%22%3A16%2C%5C%22device_memory%5C%22%3A0%2C%5C%22downlink%5C%22%3A%5C%22%5C%22%2C%5C%22effective_type%5C%22%3A%5C%22%5C%22%2C%5C%22round_trip_time%5C%22%3A0%7D%22; strategyABtestKey=%221742112685.842%22; volume_info=%7B%22isUserMute%22%3Afalse%2C%22isMute%22%3Afalse%2C%22volume%22%3A0.5%7D; stream_player_status_params=%22%7B%5C%22is_auto_play%5C%22%3A0%2C%5C%22is_full_screen%5C%22%3A0%2C%5C%22is_full_webscreen%5C%22%3A0%2C%5C%22is_mute%5C%22%3A0%2C%5C%22is_speed%5C%22%3A1%2C%5C%22is_visible%5C%22%3A1%7D%22; xgplayer_user_id=835787001711; fpk1=U2FsdGVkX19Ke0llbjXpGOOr1Jeel/2GnaSJz41VO3mAFs271jC0hG7gdWlk+2pYLM4GF8TVGtwClCJIXsTKUw==; fpk2=2333b8d335abc6e14aef1caed0ae26fc; s_v_web_id=verify_m8bcww86_XfwSCnmj_5i3F_4Joq_8edO_9gRH9JENh07f; csrf_session_id=6f34e666e71445c9d39d8d06a347a13f; FORCE_LOGIN=%7B%22videoConsumedRemainSeconds%22%3A180%7D; biz_trace_id=c34e5eaf; passport_csrf_token=ab84b3e39ad78e719b236035a27379c0; passport_csrf_token_default=ab84b3e39ad78e719b236035a27379c0; __security_mc_1_s_sdk_crypt_sdk=ac2d56c3-44cd-a161; __security_mc_1_s_sdk_cert_key=ccf2bd2d-4718-b8de; __security_mc_1_s_sdk_sign_data_key_web_protect=9995d368-4e45-b17f; bd_ticket_guard_client_data=eyJiZC10aWNrZXQtZ3VhcmQtdmVyc2lvbiI6MiwiYmQtdGlja2V0LWd1YXJkLWl0ZXJhdGlvbi12ZXJzaW9uIjoxLCJiZC10aWNrZXQtZ3VhcmQtcmVlLXB1YmxpYy1rZXkiOiJCUHR2ZDlUeGU4UlhPaWdIczFqaStJWityQlF4UWZMKytiL2drbXlYUmNrelNua1lQUjJTRVZHVlo4MWFCU0EvSW4xSnBmbzN3TFlvSnhIZTZTV29DTmc9IiwiYmQtdGlja2V0LWd1YXJkLXdlYi12ZXJzaW9uIjoyfQ%3D%3D; bd_ticket_guard_client_web_domain=2; xg_device_score=8.208487995540095; sdk_source_info=7e276470716a68645a606960273f276364697660272927676c715a6d6069756077273f276364697660272927666d776a68605a607d71606b766c6a6b5a7666776c7571273f275e58272927666a6b766a69605a696c6061273f27636469766027292762696a6764695a7364776c6467696076273f275e5827292771273f27303035353c3337343437313234272927676c715a75776a716a666a69273f2763646976602778; bit_env=LVdHnIescW9BCGpo5gGuqIlwNfgj757SBdMhdZXBSWjPWbxp9Nv_B2vUt_LtEvr-ioRv0E9b8N8HWiOHe20JqcUhO4YmpIM6gB83hjgqZfmAhYEbzJR7z2bRViJaPg4xeoyGhwdjwK_Bzogp6uoUs4ov-P4JYzMh78i7jaY5Pzd6h3CaVO-eUKnTiFfUlJo_jmhSfHXGdwkurXwR4lO_UnU4Loqa0YlmDiyi0fPxURFIN5t4Ny6Ua8LLSYcUrBXHlXoQ5G4bQN4XqwuWwT9YauexXbkotU1Jv8pMJUiAhlFIMjbvfTutTSnOXJLoH_JsR_doifURl0wf8CIa_OcYw-A2VglrpbaFU6HDVTKbSRKovzIMY9bUwl_4EAiLBf87g2BU0Uz1MHd_lGNdH3ImEWpLtdRvUsW_KD7q87rPsEGVTceyQ5U3ZlETqoEOwOiggNGu5lL_1O8lt8_7eydeGA%3D%3D; gulu_source_res=eyJwX2luIjoiM2Y3NGJhZDgxMzc3OThkNmVkN2U5ZjM3NDMzNGJkYjMwNzRhYjI0ZWJhMDZkMzdmYWNiNjgzNTY2ZjY0OGUyNCJ9; passport_auth_mix_state=c534f2qcgpohqv4juisp74wq28e90snz', 79 | } 80 | 81 | const url = `https://www.douyin.com/aweme/v1/web/aweme/post/?${encodeQuery}` 82 | 83 | const bogus = await axios({ 84 | method: 'get', 85 | url: 'http://douyin.false.plus/api/douyin/web/generate_a_bogus', 86 | params: { 87 | url, 88 | user_agent: useragent, 89 | }, 90 | }) 91 | 92 | const requestUrl = bogus.data?.data?.url 93 | 94 | const result = await axios({ 95 | method: 'get', 96 | url: requestUrl, 97 | headers, 98 | }) 99 | 100 | const videos = result.data?.aweme_list 101 | 102 | if (videos) { 103 | // 最前有效图片视频集 104 | handleEffectiveVideo(channel, videos) 105 | // 处理最新的第一节点视频 106 | const row = videos[0] 107 | const filePath = resolve(cwd(), `./data/${channel.alias}.json`) 108 | const oldContent = JSON.parse(fs.readFileSync(filePath, 'utf-8')) 109 | const firstContent = oldContent[0] 110 | const contentLastTime = dayjs(firstContent.time).valueOf() / 1e3 111 | 112 | const lastTime = row.create_time 113 | if (contentLastTime < lastTime) { 114 | const title = row.item_title || row.desc.split('\n')[0] 115 | console.log('有最新视频:', row.author?.nickname, title) 116 | oldContent.unshift({ 117 | title, 118 | url: `https://www.douyin.com/video/${row.aweme_id}`, 119 | time: dayjs.unix(row.create_time).format('YYYY-MM-DD HH:mm:ss'), 120 | cover: row.video?.dynamic_cover?.url_list[0] || row.video?.origin_cover?.url_list[0] || '', 121 | }) 122 | fs.writeFileSync(filePath, JSON.stringify(oldContent), { 123 | encoding: 'utf8', 124 | flag: 'w', 125 | }) 126 | } 127 | else { 128 | console.log('暂无最新视频') 129 | } 130 | } 131 | } 132 | 133 | // 134 | // (async () => await getDouYinData({ 135 | // uid: 'MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT', 136 | // alias: 'txk', 137 | // name: '渡一前端提薪课', 138 | // url: 'https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT' 139 | // }))() 140 | -------------------------------------------------------------------------------- /data/new/xxpd.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "title": "常用工具推荐", "url": "https://www.douyin.com/video/7564017181793455403", "time": "2025-10-23 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/a08abb80d3974df9b947d241c5c148d8?lk3s=138a59ce&x-expires=1767445200&x-signature=nJ7mmuu1TmFzEpNNqfSgMvNpS2I%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 3 | { "title": "袁老师加更小课堂:关于长期信心", "url": "https://www.douyin.com/video/7429521189040622882", "time": "2024-10-25 09:40:44", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/fecd5fa0e6514242b6cabbef3cfc44a8?lk3s=138a59ce&x-expires=1767445200&x-signature=DMX0IpE6PIvJymuz2thjrYIgMXU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 4 | { "title": "最风骚的HelloWorld", "url": "https://www.douyin.com/video/7204714283991698746", "time": "2023-02-28 11:50:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-p-0015/oU1fMnFI028JCcfbDAC8tIPOSf2ieAm8DQxEB3?lk3s=138a59ce&x-expires=1767445200&x-signature=vuMOfKYKTvpFLlH1bhmb1vkKYRU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 5 | { "title": "你不知道的阴影", "url": "https://www.douyin.com/video/7582881106052091178", "time": "2025-12-13 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d858fe2252094eb98e54135ad82e3f2d?lk3s=138a59ce&x-expires=1767445200&x-signature=Fy8aPR%2FsKzkcnEyA6zIx%2BRej%2B0c%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 6 | { "title": "判断数组的准确方法", "url": "https://www.douyin.com/video/7582617031564954899", "time": "2025-12-12 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/5f8fccbdf4cd4b428889df0113d1a308?lk3s=138a59ce&x-expires=1767445200&x-signature=EnKBMHpaZlu%2Fie7Rgnx4973GLqQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 7 | { "title": "奇妙的头像特效", "url": "https://www.douyin.com/video/7582141281254542628", "time": "2025-12-11 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/361c9db6605f420586a166977fae81ed?lk3s=138a59ce&x-expires=1767445200&x-signature=Pi4hP5tdONWSHRTrk1IDYOigYlg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 8 | { "title": "全局注册和局部注册的区别", "url": "https://www.douyin.com/video/7581837389400722731", "time": "2025-12-10 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/31451481dcb14491b1092c0889b89da1?lk3s=138a59ce&x-expires=1767445200&x-signature=GHfxu%2F43jbC6Nazn7hUbrSyU1XA%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 9 | { "title": "字典顺序和编码顺序", "url": "https://www.douyin.com/video/7581409935133609256", "time": "2025-12-09 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f47c339e363d488a86912ef6bdd416b5?lk3s=138a59ce&x-expires=1767445200&x-signature=MUQy4g%2FtHSvQe24F4KG%2F0uv4vHs%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 10 | { "title": "绝对路径和相对路径", "url": "https://www.douyin.com/video/7580718489254513956", "time": "2025-12-08 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/cba9c66bba294f51b2e240dc1cf0d2e1?lk3s=138a59ce&x-expires=1767445200&x-signature=PtyZ09mbyS8v9uafKlgsJ6LXG2E%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 11 | { "title": "使用depcheck进行依赖检查", "url": "https://www.douyin.com/video/7580301271991717155", "time": "2025-12-06 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/1070823d8c244adc898db6715ef83c77?lk3s=138a59ce&x-expires=1767445200&x-signature=b50cmKUjcJQP1RLhYzhOkJonaoo%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 12 | { "title": "制作简易地图", "url": "https://www.douyin.com/video/7579925764481535266", "time": "2025-12-05 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/dd38107c7f194fc8abbe97b7445c54f1?lk3s=138a59ce&x-expires=1767445200&x-signature=kYvolwV93Zt%2ByjOg4KxSmNNkziU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 13 | { "title": "好用的vscode插件", "url": "https://www.douyin.com/video/7579608476612054315", "time": "2025-12-04 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/6a8f2887f64d4a7da64c7d8bb9b69841?lk3s=138a59ce&x-expires=1767445200&x-signature=LIk%2BaeqEvxUOAnjzfo4IBlcgyHo%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 14 | { "title": "拖拽排序", "url": "https://www.douyin.com/video/7579182405135731994", "time": "2025-12-03 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/2428bc067aaa49f691008bd19798b358?lk3s=138a59ce&x-expires=1767445200&x-signature=UYHov8OHPUO1JAxlrxf6vE6hPIU%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 15 | { "title": "触发迅雷下载", "url": "https://www.douyin.com/video/7578879162610421018", "time": "2025-12-02 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/bc8a19b23c2646098c31da82f6888ab9?lk3s=138a59ce&x-expires=1767445200&x-signature=Uf%2B9B%2BegrTpib1wfqYZhGPdxmYI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 16 | { "title": "非严格相等", "url": "https://www.douyin.com/video/7577688117910539529", "time": "2025-12-01 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/369cea4838794d50acc25ddd0cb02a16?lk3s=138a59ce&x-expires=1767445200&x-signature=bq%2FPwCkgrY3fBKmB6r3MWbIs%2BBg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 17 | { "title": "Console调试面板", "url": "https://www.douyin.com/video/7577687767522495782", "time": "2025-11-29 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d4374dcb697146aea442e2eddb93bd4f?lk3s=138a59ce&x-expires=1767445200&x-signature=i8gpaNZ7D4V9nv9cBQP8jNS8d%2Bs%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 18 | { "title": "B站智能弹幕效果实现原理", "url": "https://www.douyin.com/video/7577368617130495242", "time": "2025-11-28 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7b7735baafc546ed8b05ce65d691fcbb?lk3s=138a59ce&x-expires=1767445200&x-signature=49Ytca7W0K9Y4PIKo%2BPznXYPWwg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 19 | { "title": "重复渐变的边框", "url": "https://www.douyin.com/video/7576950218957049130", "time": "2025-11-27 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/a1fcf81d669a4792acf688943ca7a313?lk3s=138a59ce&x-expires=1767445200&x-signature=IX%2FzY%2FiwIfi5Fl5aX6DmpZeNez4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 20 | { "title": "使用chrome调试工具解决问题", "url": "https://www.douyin.com/video/7576633593326275850", "time": "2025-11-26 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/0b95911593094895a4a3b0505811329d?lk3s=138a59ce&x-expires=1767445200&x-signature=gRJuWT2geaP4Ek%2B%2FJn2EUZtsgQE%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 21 | { "title": "验证回文串", "url": "https://www.douyin.com/video/7576214707170872612", "time": "2025-11-25 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/51576150e524448fb264e9078cc1a25f?lk3s=138a59ce&x-expires=1767445200&x-signature=F4%2FBRQzZFwiF4rFh49Az6Lr6oNo%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 22 | { "title": "微软算法题-按键映射", "url": "https://www.douyin.com/video/7575478311711788351", "time": "2025-11-24 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/4ff3a0bc4cd947a8b576fd4163855bd7?lk3s=138a59ce&x-expires=1767445200&x-signature=cfF%2B2SpRen2JjN1E1F%2BQx9UEncY%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 23 | { "title": "CSS实现奥林匹克五环", "url": "https://www.douyin.com/video/7575102355331370259", "time": "2025-11-22 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/b49d55cdf20c468abfce86823de66dd8?lk3s=138a59ce&x-expires=1767445200&x-signature=HOik730BtU%2Fl16wsCo%2FcsSpIS3g%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" }, 24 | { "title": "Promise的终极面试题", "url": "https://www.douyin.com/video/7574727583342841131", "time": "2025-11-21 12:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/27cffdc24b484f07925d32499878b77d?lk3s=138a59ce&x-expires=1767445200&x-signature=Wgp02%2FNZMBzO9pqanEnErxp0t5o%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512202105277C3BB5CAD93D5C181461" } 25 | ] 26 | -------------------------------------------------------------------------------- /data/dmyh.json: -------------------------------------------------------------------------------- 1 | [{ "title": "原型污染有多重要?React核弹级漏洞引发原因", "url": "https://www.douyin.com/video/7582862268191313215", "time": "2025-12-12 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/3ece47c46cad4c1f9a6ae100102f41e2?lk3s=138a59ce&x-expires=1767290400&x-signature=22l5vHfqpQN258A0NsYNDPbZUho%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251219025604FAEC96DBD98B3F32A6C7" }, { "title": "想让一个方法获得最大的复用性?那一定离不开依赖注入", "url": "https://www.douyin.com/video/7582432299065593142", "time": "2025-12-11 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/dac5f29b6c8f41f19957ff1df50a49da?lk3s=138a59ce&x-expires=1767204000&x-signature=ZMsYGjSCnBweetWNvfjd%2FfD7sT4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512180256216A62D7B73F0224977E29" }, { "title": "对于性能问题束手无策?性能分析工具帮你快速定位问题", "url": "https://www.douyin.com/video/7581726555043417407", "time": "2025-12-09 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/5efba0e1e62143358d3ba45ed0a031a8?lk3s=138a59ce&x-expires=1767031200&x-signature=rM9xG8xcd1xzVKTerNtpjDjgfC0%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251216025627D8DC1EDB1AFC613EEBCA" }, { "title": "Worker Pool", "url": "https://www.douyin.com/video/7580260036639837474", "time": "2025-12-05 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/e87d8f4bd7c54e9393fd7a1ba925da35?lk3s=138a59ce&x-expires=1766685600&x-signature=O8ijWr%2BERKZ31Ih8J8sFEhXb36k%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251212025558394BFBE643AF3E3F61E6" }, { "title": "对于别人写的代码中,可能会出现的错误异常怎么捕获?", "url": "https://www.douyin.com/video/7579880502350400802", "time": "2025-12-04 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7ee439365a804997a8b86853958ed1bf?lk3s=138a59ce&x-expires=1766599200&x-signature=mWnLGWOkTkjyGi1DnkoB%2BzOyNj0%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=2025121102542699D1D9832F13F9FF3980" }, { "title": "JSON Schema", "url": "https://www.douyin.com/video/7579154877981625636", "time": "2025-12-02 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/763c460c1364471782ae8d60fd841754?lk3s=138a59ce&x-expires=1766426400&x-signature=8edtXzR8LMs3xswBAhcM%2FjTVbNQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251209025302F0F9E1CC930E3A36CBDB" }, { "title": "想成为架构师?那你一定要了解AST", "url": "https://www.douyin.com/video/7577680665681120575", "time": "2025-11-29 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/abdc0b97cf58436aaf0c9131aa40d2b0?lk3s=138a59ce&x-expires=1765843200&x-signature=XVsYW4vcDsFEmX3uJAKWz4Yqd98%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "闭包的概念和应用还不清晰?一个视频带你形象的理解闭包和其应用", "url": "https://www.douyin.com/video/7577680264785120548", "time": "2025-11-28 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/47d571fa66a24c87a7a8091412612990?lk3s=138a59ce&x-expires=1765843200&x-signature=VHtZ2we8pv3NPGppznTovi0jvYw%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "React阻止冒泡", "url": "https://www.douyin.com/video/7576938393913806123", "time": "2025-11-26 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/6ff3327592284cd4939ec081bd02b98b?lk3s=138a59ce&x-expires=1765843200&x-signature=aXER3LlFH8dA6dRPmIweJ%2BLatgM%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "React运行时切换方法", "url": "https://www.douyin.com/video/7575010098523753738", "time": "2025-11-21 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f5b86b659966410e974e3c8761b12156?lk3s=138a59ce&x-expires=1765843200&x-signature=cL19Z5dTbdiPeRGt0emOco2OVF8%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "前端已死?前端真的会死么?", "url": "https://www.douyin.com/video/7574336031739186442", "time": "2025-11-19 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/9e01dc1e09c1444cb85a9204ba4e2108?lk3s=138a59ce&x-expires=1765843200&x-signature=gvfZCbBk15mZwi5fIL0Xny1susI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "不同前端接到条款类页面需求", "url": "https://www.douyin.com/video/7573538232315514131", "time": "2025-11-17 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/d737e3044be543c39dff69697001e2fc?lk3s=138a59ce&x-expires=1765843200&x-signature=103m5%2BwDJD6h0NsNgW7FsL1SHKA%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "React Diff中placement", "url": "https://www.douyin.com/video/7572420410940165439", "time": "2025-11-14 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/f9eb37e03dff4d16b649596abf9d9a70?lk3s=138a59ce&x-expires=1765843200&x-signature=gc0Sza7W7QNChoPWKbhUDAbKSxc%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "React的diff主流程", "url": "https://www.douyin.com/video/7572388329564523830", "time": "2025-11-14 09:34:19", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/63729a65a8054e2b803525e008c887a9?lk3s=138a59ce&x-expires=1765843200&x-signature=Or0S%2BKU5%2FqNvYyEbQOTk0J%2BRdzI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "React中的时间切片", "url": "https://www.douyin.com/video/7571695264809946387", "time": "2025-11-12 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/7d39e971e6ba455185b6fc9cede302cc?lk3s=138a59ce&x-expires=1765843200&x-signature=csYvWM2rsnCzcCPHw%2FgvxbAg0Dg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "React中的key是什么?", "url": "https://www.douyin.com/video/7571355774224452900", "time": "2025-11-11 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/39b3934f3e0e41cea620a6de3cfbbc5a?lk3s=138a59ce&x-expires=1765843200&x-signature=PHFMuMXcm%2FA9f9xRjFyvKA%2FuQBQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "可以在组件外修改组件状态么?", "url": "https://www.douyin.com/video/7569825156655320356", "time": "2025-11-10 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/30b1bd43fd224c789fa283947493208f?lk3s=138a59ce&x-expires=1765843200&x-signature=2voHOSk20BZw9nxcVYYr%2FTIQ1Rw%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "为什么setState是异步的?", "url": "https://www.douyin.com/video/7569824779105062207", "time": "2025-11-08 22:00:00", "cover": "https://p9-pc-sign.douyinpic.com/obj/tos-cn-i-dy/aa287cdffd934eb181942781950e3e0d?lk3s=138a59ce&x-expires=1765843200&x-signature=TKcxuCkizpdw179KbUprtGtlvvw%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "什么时候用useEffect?", "url": "https://www.douyin.com/video/7569824430529039635", "time": "2025-11-07 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/6d3f0bdbc8764c9d9fda792ab9478926?lk3s=138a59ce&x-expires=1765843200&x-signature=cLOQeQxiwELWPHmVpgQ9ffBrrE4%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "状态更新不及时,因为setstate异步?", "url": "https://www.douyin.com/video/7569433448012582187", "time": "2025-11-06 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/514f326301ac4292939c3d3f2bb5bf30?lk3s=138a59ce&x-expires=1765843200&x-signature=q%2B2sMhoKxQuXHoXUEgbSYaHwcNA%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "元素居中的常见方案", "url": "https://www.douyin.com/video/7569084079786839350", "time": "2025-11-05 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/05c1430a1d7b4403b549eb53283a1921?lk3s=138a59ce&x-expires=1765843200&x-signature=4wx5uxHbuYweuAlysrcvvMrzquY%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "为什么Hook要保证顺序一致性?", "url": "https://www.douyin.com/video/7568702340379790634", "time": "2025-11-04 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/a55a914934554ad78c34928eabfa4c09?lk3s=138a59ce&x-expires=1765843200&x-signature=hYy6KR%2F3Uia7sOjUIUz3n39oQmI%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "Fiber好在哪儿?", "url": "https://www.douyin.com/video/7568311594032123151", "time": "2025-11-03 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/c9395d34793b49538ae1865eac180793?lk3s=138a59ce&x-expires=1765843200&x-signature=5lJ36fEYRGrP1PPu6Mu6%2BghJpdQ%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "节流和防抖分不清?", "url": "https://www.douyin.com/video/7567275229861547273", "time": "2025-11-01 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/27023b1b2edb4570998b855f3e26f2ef?lk3s=138a59ce&x-expires=1765843200&x-signature=ozRz5ntzTN2XooPzmCyieNrnxQA%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=20251202085101E4438602EC9459A16335" }, { "title": "面试中遇到\"JSX是什么\"怎么回答?", "url": "https://www.douyin.com/video/7567274817003556147", "time": "2025-10-31 22:00:00", "cover": "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-dy/22caa4c23d034e8bb615bd98d545aa9c?lk3s=138a59ce&x-expires=1765843200&x-signature=Vo9juICItOb70HQzRuEZjSNOVAg%3D&from=327834062_large&s=PackSourceEnum_PUBLISH&se=false&sc=dynamic_cover&biz_tag=pcweb_cover&l=202512020851024D86350FA549008E29E7" }] 2 | -------------------------------------------------------------------------------- /docs/bilibili/textbook_review_base_m.md: -------------------------------------------------------------------------------- 1 | # 渡一教科书复习基地m 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://space.bilibili.com/3546638597491574/video](https://space.bilibili.com/3546638597491574/video) 8 | 9 |
10 | 11 | - [水波进度样式【渡一教育】](https://www.bilibili.com/BV1f824YcEsZ) - 2024-10-15 12:00:00 12 | - [3D Hover Effect【渡一教育】](https://www.bilibili.com/BV1z824YcEc9) - 2024-10-14 12:00:00 13 | - [mac docker效果【渡一教育】](https://www.bilibili.com/BV1tqsZecEZL) - 2024-10-12 12:00:00 14 | - [多行文本擦除效果【渡一教育】](https://www.bilibili.com/BV1tqsZecEoy) - 2024-10-11 12:00:00 15 | - [元素倒影【渡一教育】](https://www.bilibili.com/BV1TqsZecEys) - 2024-10-10 12:00:00 16 | - [故障波纹动效【渡一教育】](https://www.bilibili.com/BV1tqsZecEGQ) - 2024-10-09 12:00:00 17 | - [色彩的差值混合【渡一教育】](https://www.bilibili.com/BV1bqsZecEFY) - 2024-10-08 12:00:00 18 | - [六边形布局【渡一教育】](https://www.bilibili.com/BV1tqsZecEVC) - 2024-10-07 12:00:00 19 | - [文字视差背景【渡一教育】](https://www.bilibili.com/BV1zZtZe4EoX) - 2024-10-05 12:00:00 20 | - [锯齿菱形边缘【渡一教育】](https://www.bilibili.com/BV1zftZedE3J) - 2024-10-04 12:00:00 21 | - [交融动画效果【渡一教育】](https://www.bilibili.com/BV1JftZeoEuY) - 2024-10-03 12:00:00 22 | - [图片边框【渡一教育】](https://www.bilibili.com/BV1fftZedEvj) - 2024-10-02 12:00:00 23 | - [视差滚动【渡一教育】](https://www.bilibili.com/BV1zftZedEKB) - 2024-10-01 12:00:00 24 | - [改变鼠标样式和指向【渡一教育】](https://www.bilibili.com/BV1zftZedEMw) - 2024-09-30 12:00:00 25 | - [鼠标移动的高亮边框效果【渡一教育】](https://www.bilibili.com/BV1LStPePE6b) - 2024-09-28 12:00:00 26 | - [交错排列的文字【渡一教育】](https://www.bilibili.com/BV1dStPeAEju) - 2024-09-27 12:00:00 27 | - [丝滑的标题动画【渡一教育】](https://www.bilibili.com/BV1dStPeAEKr) - 2024-09-26 12:00:00 28 | - [3D渐变的轮播图【渡一教育】](https://www.bilibili.com/BV1LStPePE1X) - 2024-09-25 12:00:00 29 | - [漂亮的文字阴影【渡一教育】](https://www.bilibili.com/BV1LStPePEqp) - 2024-09-24 12:00:00 30 | - [实现一棵随机树【渡一教育】](https://www.bilibili.com/BV1dStPeAE7m) - 2024-09-23 12:00:00 31 | - [模特换装效果【渡一教育】](https://www.bilibili.com/BV1APHDefEhd) - 2024-09-21 12:00:00 32 | - [SVG的描边动画【渡一教育】](https://www.bilibili.com/BV1WPHDefE5M) - 2024-09-20 12:00:00 33 | - [前端需要终生学习吗?【渡一教育】](https://www.bilibili.com/BV1APHDefEAq) - 2024-09-19 12:00:00 34 | - [不可变类型【渡一教育】](https://www.bilibili.com/BV1APHDefEMj) - 2024-09-18 12:00:00 35 | - [前置的不定量参数【渡一教育】](https://www.bilibili.com/BV1PPHDefEAW) - 2024-09-17 12:00:00 36 | - [联合类型转交叉类型【渡一教育】](https://www.bilibili.com/BV1fGHDeWEXc) - 2024-09-16 12:00:00 37 | - [TS中的协变与逆变【渡一教育】](https://www.bilibili.com/BV19EH5ekECB) - 2024-09-14 12:00:00 38 | - [联合类型和交叉类型【渡一教育】](https://www.bilibili.com/BV19EH5ekEi1) - 2024-09-13 12:00:00 39 | - [对防抖函数进行类型标注【渡一教育】](https://www.bilibili.com/BV1XEH5ekEd5) - 2024-09-12 12:00:00 40 | - [TS中的递归类型推断【渡一教育】](https://www.bilibili.com/BV19EH5ekEus) - 2024-09-11 12:00:00 41 | - [使用infer封装通用类型工具【渡一教育】](https://www.bilibili.com/BV19EH5ekE6s) - 2024-09-10 12:00:00 42 | - [从字段到函数的推导【渡一教育】](https://www.bilibili.com/BV15EH5eCENA) - 2024-09-09 12:00:00 43 | - [实现GetOptionals【渡一教育】](https://www.bilibili.com/BV1S4H5eTEJ7) - 2024-09-07 12:00:00 44 | - [实现Optional【渡一教育】](https://www.bilibili.com/BV1HdWGe4EHf) - 2024-09-06 12:00:00 45 | - [TS到底难在哪【渡一教育】](https://www.bilibili.com/BV1HdWGe4EYc) - 2024-09-05 12:00:00 46 | - [知识的深度和广度【渡一教育】](https://www.bilibili.com/BV18zWGeME2p) - 2024-09-04 12:00:00 47 | - [SASS中的扩展和占位符【渡一教育】](https://www.bilibili.com/BV1hzWGeME5r) - 2024-09-03 12:00:00 48 | - [SASS中的模块化开发【渡一教育】](https://www.bilibili.com/BV1DzWGeME84) - 2024-09-02 12:00:00 49 | - [SASS中的颜色函数【渡一教育】](https://www.bilibili.com/BV1CKeMe6Ehy) - 2024-08-31 12:00:00 50 | - [SASS中的数学函数【渡一教育】](https://www.bilibili.com/BV1PKeMerE19) - 2024-08-30 12:00:00 51 | - [使用SASS实现主题切换【渡一教育】](https://www.bilibili.com/BV1CKeMe6Eh1) - 2024-08-29 12:00:00 52 | - [用Sass简化媒介查询【渡一教育】](https://www.bilibili.com/BV1yKeMe6EEV) - 2024-08-28 12:00:00 53 | - [Sass实现文字替换【渡一教育】](https://www.bilibili.com/BV1NAeMeCEiE) - 2024-08-27 12:00:00 54 | - [Sass实现星空效果【渡一教育】](https://www.bilibili.com/BV14AeMeCEF3) - 2024-08-26 12:00:00 55 | - [什么是CSS预编译器【渡一教育】](https://www.bilibili.com/BV1AueMezEJj) - 2024-08-24 12:00:00 56 | - [Web API总结【渡一教育】](https://www.bilibili.com/BV1qHYserES9) - 2024-08-23 12:00:00 57 | - [Clipboard API【渡一教育】](https://www.bilibili.com/BV1F5YpeBEAZ) - 2024-08-22 12:00:00 58 | - [自动播放策略【渡一教育】](https://www.bilibili.com/BV1F5YpezExW) - 2024-08-21 12:00:00 59 | - [声音的分析和处理【渡一教育】](https://www.bilibili.com/BV1rgYpe3Eeq) - 2024-08-20 12:00:00 60 | - [拖拽API【渡一教育】](https://www.bilibili.com/BV1n3Ype6EKm) - 2024-08-19 12:00:00 61 | - [网络状态监控【渡一教育】](https://www.bilibili.com/BV1n3Ype6EMK) - 2024-08-17 12:00:00 62 | - [Web Animation API【渡一教育】](https://www.bilibili.com/BV1yivheGEZG) - 2024-08-16 12:00:00 63 | - [Page Visibility【渡一教育】](https://www.bilibili.com/BV1yivheGEMf) - 2024-08-15 12:00:00 64 | - [Intersection Observer【渡一教育】](https://www.bilibili.com/BV1n1vheTEAv) - 2024-08-14 12:00:00 65 | - [什么是Web API【渡一教育】](https://www.bilibili.com/BV161vheKEP5) - 2024-08-13 12:00:00 66 | - [现代CSS样式总结【渡一教育】](https://www.bilibili.com/BV1f2vhevECc) - 2024-08-12 12:00:00 67 | - [flex+margin【渡一教育】](https://www.bilibili.com/BV1ckvheuEDx) - 2024-08-10 12:00:00 68 | - [你不知道的CSS选择器【渡一教育】](https://www.bilibili.com/BV1K1421t7Vb) - 2024-08-09 12:00:00 69 | - [Houdini【渡一教育】](https://www.bilibili.com/BV11W42197tt) - 2024-08-08 12:00:00 70 | - [时间函数【渡一教育】](https://www.bilibili.com/BV1hz421B7Jm) - 2024-08-07 12:00:00 71 | - [常用滤镜效果【渡一教育】](https://www.bilibili.com/BV1A1421t7dG) - 2024-08-06 12:00:00 72 | - [黏性定位【渡一教育】](https://www.bilibili.com/BV1z1421t74X) - 2024-08-05 12:00:00 73 | - [行盒的截断样式【渡一教育】](https://www.bilibili.com/BV1sx4y1479B) - 2024-08-03 12:00:00 74 | - [CSS变量的妙用【渡一教育】](https://www.bilibili.com/BV1rH4y1c7Vp) - 2024-08-02 12:00:00 75 | - [clip-path【渡一教育】](https://www.bilibili.com/BV13U411S7Rz) - 2024-08-01 12:00:00 76 | - [知识可以很简单【渡一教育】](https://www.bilibili.com/BV1Rx4y1x776) - 2024-07-31 12:00:00 77 | - [分时函数的封装【渡一教育】](https://www.bilibili.com/BV1Qb421E7P7) - 2024-07-30 12:00:00 78 | - [惰性函数【渡一教育】](https://www.bilibili.com/BV1Si421Y7Mi) - 2024-07-27 12:00:00 79 | - [参数归一化【渡一教育】](https://www.bilibili.com/BV1yE421A7TZ) - 2024-07-26 12:00:00 80 | - [高阶函数应用-并发队列【渡一教育】](https://www.bilibili.com/BV14b421n7KC) - 2024-07-25 12:00:00 81 | - [高阶函数应用-函数防抖【渡一教育】](https://www.bilibili.com/BV1di421a7qN) - 2024-07-24 12:00:00 82 | - [高阶函数的应用-封装动画函数【渡一教育】](https://www.bilibili.com/BV1Xx4y1t7Fc) - 2024-07-23 12:00:00 83 | - [什么是高阶函数【渡一教育】](https://www.bilibili.com/BV1t1421b7pm) - 2024-07-22 12:00:00 84 | - [面向对象总结【渡一教育】](https://www.bilibili.com/BV1s1421k74S) - 2024-07-20 12:00:00 85 | - [如何对class降级【渡一教育】](https://www.bilibili.com/BV1Tb421n7JH) - 2024-07-19 12:00:00 86 | - [访问器成员【渡一教育】](https://www.bilibili.com/BV1cM4m1m7s2) - 2024-07-18 12:00:00 87 | - [实例成员和静态成员【渡一教育】](https://www.bilibili.com/BV1tE4m1R7sg) - 2024-07-17 12:00:00 88 | - [数据分组引发的思考【渡一教育】](https://www.bilibili.com/BV1oW421R7zk) - 2024-07-16 16:48:20 89 | - [如何用面向对象开发程序【渡一教育】](https://www.bilibili.com/BV1h4421U776) - 2024-07-16 12:00:00 90 | - [属性和方法【渡一教育】](https://www.bilibili.com/BV1gE4m1R76y) - 2024-07-15 12:00:00 91 | - [类和对象【渡一教育】](https://www.bilibili.com/BV1Kf421q79N) - 2024-07-13 12:00:00 92 | - [面向对象、面向函数、面向过程【渡一教育】](https://www.bilibili.com/BV1Hy411B7od) - 2024-07-12 12:00:00 93 | - [从canvas到编程本质【渡一教育】](https://www.bilibili.com/BV1Ti421v7W7) - 2024-07-11 12:00:00 94 | - [在canvas中绘制和拖动【渡一教育】](https://www.bilibili.com/BV1bS421d7fw) - 2024-07-10 12:00:00 95 | - [用canvas玩转图片【渡一教育】](https://www.bilibili.com/BV1Sm42137MJ) - 2024-07-09 12:00:00 96 | - [文字也能很酷炫【渡一教育】](https://www.bilibili.com/BV156421Z7dt) - 2024-07-08 12:00:00 97 | - [canvas动画【渡一教育】](https://www.bilibili.com/BV11f421B73R) - 2024-07-06 12:00:00 98 | - [解决canvas清晰度的问题【渡一教育】](https://www.bilibili.com/BV1yb421H79c) - 2024-07-05 12:00:00 99 | - [使用canvas完成基本绘图【渡一教育】](https://www.bilibili.com/BV1w4421D7CH) - 2024-07-04 12:00:00 100 | - [canvas的意义【渡一教育】](https://www.bilibili.com/BV1Xb421J7qR) - 2024-07-03 12:00:00 101 | - [文件上传总结【渡一教育】](https://www.bilibili.com/BV1rx4y147LP) - 2024-07-02 12:00:00 102 | - [大文件分片上传【渡一教育】](https://www.bilibili.com/BV1Xm421V7x8) - 2024-07-01 12:00:00 103 | - [裁剪上传原理【渡一教育】](https://www.bilibili.com/BV1dw4m1Y7LQ) - 2024-06-29 12:00:00 104 | - [实现阿里云的文件上传【渡一教育】](https://www.bilibili.com/BV1Y6421Z7Kb) - 2024-06-28 12:00:00 105 | - [二进制格式的文件上传【渡一教育】](https://www.bilibili.com/BV1Km421574x) - 2024-06-27 12:00:00 106 | - [base64格式的文件上传【渡一教育】](https://www.bilibili.com/BV1Ly411q7y8) - 2024-06-26 12:00:00 107 | - [文件上传方式之拖拽上传【渡一教育】](https://www.bilibili.com/BV11f421Q78s) - 2024-06-25 12:00:00 108 | - [学会如何使用Ajax上传文件数据,详细的顺序都在这!【渡一教育】](https://www.bilibili.com/BV1Jf421Q7hZ) - 2024-06-24 12:00:00 109 | - [上传文件的界面交互这么丰富,你还总是没有思路?【渡一教育】](https://www.bilibili.com/BV1hZ421g7Xs) - 2024-06-22 12:00:00 110 | - [如何调试文件上传接口,做好第一步很重要!【渡一教育】](https://www.bilibili.com/BV1ob421J7ip) - 2024-06-21 12:00:00 111 | - [你都是怎么做文件上传的?你的探索方式正确吗?【渡一教育】](https://www.bilibili.com/BV1Eb421p7EZ) - 2024-06-20 12:00:00 112 | - [动态规划中的经典01背包问题你清楚嘛?搞懂它再刷题!](https://www.bilibili.com/BV1Xx4y1b7rv) - 2024-06-19 12:00:00 113 | - [如何优化空间复杂度,来听听袁老师如何“降维打击”!【渡一教育】](https://www.bilibili.com/BV1vn4y1976f) - 2024-06-18 12:00:00 114 | - [动态规划问题中常要求出最优解,来找找其中的一般思路!【渡一教育】](https://www.bilibili.com/BV1x4421Q7D8) - 2024-06-17 12:00:00 115 | - [遇到复杂的动态规划问题,要注意保证最终解的无后效性!【渡一教育】](https://www.bilibili.com/BV1vE421P7KE) - 2024-06-15 12:00:00 116 | - [通过这道动态规划题,锻炼一下把思维转换成代码的能力!【渡一教育】](https://www.bilibili.com/BV14Z421g7kD) - 2024-06-14 12:00:00 117 | - [动态规划问题如何解决?先来练习一下状态转移方程吧!【渡一教育】](https://www.bilibili.com/BV1rw4m1v7ib) - 2024-06-13 12:00:00 118 | - [前端必修掌握的动态规划算法之入门【渡一教育】](https://www.bilibili.com/BV1g1421C72e) - 2024-06-12 12:00:00 119 | - [VUE怎么学?没有方向怎么办?入门或者提升都在这呢!【渡一教育】](https://www.bilibili.com/BV131421274t) - 2024-06-11 12:00:00 120 | - [用v-model实现双向绑定,让代码写起来更加方便!【渡一教育】](https://www.bilibili.com/BV19b421v7CQ) - 2024-06-10 12:00:00 121 | - [带你从开发中,彻底搞清楚组件事件底层的处理过程!【渡一教育】](https://www.bilibili.com/BV1Si421S7u8) - 2024-06-08 12:00:00 122 | - [开发组件中千万不要让你的图方便,成为后期维护的难题!【渡一教育】](https://www.bilibili.com/BV1yJ4m1w7xH) - 2024-06-07 12:00:00 123 | - [彻底理解组件属性,才能解决这其中的问题!【渡一教育】](https://www.bilibili.com/BV1px4y1n7PA) - 2024-06-06 12:00:00 124 | - [以星级评分组件为例,总结一下vue组件的开发过程!【渡一教育】](https://www.bilibili.com/BV1VU411o7Dq) - 2024-06-05 12:00:00 125 | - [几分钟时间彻底搞清楚,在VUE里使用组件样式的几种常见做法!【渡一教育】](https://www.bilibili.com/BV1tx4y1p7SW) - 2024-06-04 12:00:00 126 | - [该如何给组件命名才方便使用,并且不易出错呢?其中又有什么规范?【渡一教育】](https://www.bilibili.com/BV1Bf421d7Yc) - 2024-06-03 12:00:00 127 | - [组件的全局注册和局部注册,到底有啥区别?【渡一教育】](https://www.bilibili.com/BV1mw4m1U7c2) - 2024-06-01 12:00:00 128 | - [搬好小板凳,来听听模板到底是什么?为何这样开发VUE效率更高?【渡一教育】](https://www.bilibili.com/BV15Z421x7Rh) - 2024-05-31 12:00:00 129 | - [了解前端工程化,利用vue-cli搭建项目你清楚了嘛?【渡一教育】](https://www.bilibili.com/BV1qx4y1W7i7) - 2024-05-30 12:00:00 130 | - [学会使用模块化分离组件代码,使你的代码结构更清晰!【渡一教育】](https://www.bilibili.com/BV1hU411Z7HY) - 2024-05-29 12:00:00 131 | - [实战来啦!VUE组件该如何编写及使用呢?【渡一教育】](https://www.bilibili.com/BV1Z1421i7tP) - 2024-05-28 12:00:00 132 | - [带你彻底清楚VUE组件的意义,如果没有它我们会面临什么呢?【渡一教育】](https://www.bilibili.com/BV1CM4m1k742) - 2024-05-27 12:00:00 133 | - [前端工程化怎么学?先找准方向捋清路线才不会错【渡一教育】](https://www.bilibili.com/BV1cy411a7Yy) - 2024-05-25 12:00:00 134 | - [我们为什么需要webpack?它的核心能力是什么呢?【渡一教育】](https://www.bilibili.com/BV1nx4y1i7Zd) - 2024-05-22 12:00:00 135 | - [学习前端时你绕不开的构建工具,今天带你一探究竟!【渡一教育】](https://www.bilibili.com/BV1Lm421p71S) - 2024-05-20 12:00:00 136 | - [带你了解CSS的终极方案PostCSS有多好用,我不允许你不知道!【渡一教育】](https://www.bilibili.com/BV1Jr42177Mc) - 2024-05-18 12:00:00 137 | - [学会CSS预编译器,写代码变得优雅起来!【渡一教育】](https://www.bilibili.com/BV1ri421k74P) - 2024-05-15 12:00:00 138 | - [巧妙运用Babel工具,代码兼容问题再也不用愁!【渡一教育】](https://www.bilibili.com/BV1qE421V7PU) - 2024-05-13 12:00:00 139 | - [ESlint,JS代码语法和风格检查必用利器【渡一教育】](https://www.bilibili.com/BV19b421t7f1) - 2024-05-11 12:00:00 140 | - [前端模块化和包管理器到底能解决哪些问题?【渡一教育】](https://www.bilibili.com/BV1Yr421g7Uq) - 2024-05-08 12:00:00 141 | - [学了工程化,解决前端学习90%的疑问!【渡一教育】](https://www.bilibili.com/BV1Np421S7Xn) - 2024-05-06 12:00:00 142 | - [Lodash实战练习之手写memoize函数【渡一教育】](https://www.bilibili.com/BV1vw4m1y7go) - 2024-05-04 12:00:00 143 | - [Lodash实战练习之手写get函数【渡一教育】](https://www.bilibili.com/BV1hF4m1w7u1) - 2024-05-01 12:00:00 144 | - [Lodash实战练习之手写countBy函数【渡一教育】](https://www.bilibili.com/BV1M1421X73J) - 2024-04-29 12:00:00 145 | - [通过Lodash提升代码水平之手写chunk函数【渡一教育】](https://www.bilibili.com/BV1xr42137Yf) - 2024-04-27 12:00:00 146 | - [两分钟带你梳理前端网络学习模块,看看你学到哪里了~【渡一教育】](https://www.bilibili.com/BV13t42177rT) - 2024-04-24 12:00:00 147 | - [前端常见跨域问题及解决方案【渡一教育】](https://www.bilibili.com/BV1UK421h7ux) - 2024-04-22 12:00:00 148 | - [跨域问题解决方案之代理【渡一教育】](https://www.bilibili.com/BV1yx421U7gX) - 2024-04-20 12:00:00 149 | - [JSONP的原理是什么?它是如何实现跨域的?【渡一教育】](https://www.bilibili.com/BV1mA4m1F7eY) - 2024-04-17 12:00:00 150 | - [掌握CORS跨域请求,看这个视频就够了【渡一教育】](https://www.bilibili.com/BV1yD421H7ay) - 2024-04-15 12:00:00 151 | - [你可以轻松搞定跨域问题吗?先从浏览器的同源策略入手,跟住我!【渡一教育】](https://www.bilibili.com/BV1QD421W7iQ) - 2024-04-13 12:00:00 152 | - [做几道ES6函数的常见面试题,看看你掌握的如何?【渡一教育】](https://www.bilibili.com/BV12D421V7wu) - 2024-04-10 12:00:00 153 | - [来看几个ES6函数常见的应用实例,具体场景具体分析!【渡一教育】](https://www.bilibili.com/BV1xA4m1A7iV) - 2024-04-08 12:00:00 154 | - [带大家实战ES6函数的几个典型场景【渡一教育】](https://www.bilibili.com/BV1SK421a7hu) - 2024-04-06 12:00:00 155 | - [ES6 箭头函数,你会正确使用吗?【渡一教育】](https://www.bilibili.com/BV1qA4m1A7MT) - 2024-04-03 12:00:00 156 | - [学会灵活运用ES6中的展开运算符,同样的需求实现起来更轻松哦!【渡一教育】](https://www.bilibili.com/BV1Xt421G7Nf) - 2024-04-01 12:00:00 157 | - [从函数层面彻底理解什么是剩余参数,活学活用才是真的掌握!【渡一教育】](https://www.bilibili.com/BV14K421i7Aa) - 2024-03-30 12:00:00 158 | - [带你学透参数默认值,扎实学好每一步才是真的技术!【渡一教育】](https://www.bilibili.com/BV17t421G77S) - 2024-03-27 12:00:00 159 | - [通过三个应用场景,带大家彻底理解CSS属性值 initial、unset、revert【渡一教育】](https://www.bilibili.com/BV1oD421j75K) - 2024-03-25 12:00:00 160 | - [在CSS的属性计算过程中,遇到不继承的问题该如何解决?【渡一教育】](https://www.bilibili.com/BV1Nx4y1U7Ta) - 2024-03-23 12:00:00 161 | - [带你彻底弄清楚CSS的继承规则,扎实学好每一步哦!【渡一教育】](https://www.bilibili.com/BV17t42157xG) - 2024-03-20 12:00:00 162 | - [带你详细剖析CSS的层叠规则,夯实基础才能运用自如!【渡一教育】](https://www.bilibili.com/BV19K421v7uq) - 2024-03-18 12:00:00 163 | - [CSS核心知识之属性计算的总流程,赶快码住学起来!【渡一教育】](https://www.bilibili.com/BV1Vp421U7qw) - 2024-03-16 12:00:00 164 | - [一起来练几道类型转换和运算的常见面试题,实践出真知!【渡一教育】](https://www.bilibili.com/BV1bZ421b71N) - 2024-03-14 12:00:00 165 | - [巧妙利用规则优化代码【渡一教育】](https://www.bilibili.com/BV1HW421A7r7) - 2024-03-11 12:00:00 166 | - [关于JS表达式返回结果的最全总结【渡一教育】](https://www.bilibili.com/BV1dS421w74e) - 2024-03-09 12:00:00 167 | - [JS中的运算规则到底是什么,彻底理解数据是如何运算的【渡一教育】](https://www.bilibili.com/BV1Fu4m137t3) - 2024-03-07 11:46:05 168 | - [笔面试中必不可少的运算符考察,首先类型是如何相互转换的?](https://www.bilibili.com/BV1hF4m1j797) - 2024-03-04 12:00:00 169 | -------------------------------------------------------------------------------- /docs/douyin/salary_increase_course.md: -------------------------------------------------------------------------------- 1 | # 渡一前端提薪课 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT](https://www.douyin.com/user/MS4wLjABAAAAeIIkCgELXG6XdUxuE9nQ6W4AfS-aoPFbtmnBL8ytcYtBSyurgePBYZXJpB0LJBCT) 8 | 9 |
10 | 11 | - [零宽字符](https://www.douyin.com/video/7582882193471589673) - 2025-12-13 23:50:00 12 | - [属性到底存在不存在?](https://www.douyin.com/video/7582619526236212523) - 2025-12-12 23:50:00 13 | - [JS真的有引用传递吗](https://www.douyin.com/video/7582142463847042310) - 2025-12-11 23:50:00 14 | - [等号运算符的运算和转换规则](https://www.douyin.com/video/7581837672986070314) - 2025-12-10 23:50:00 15 | - [你不知道的数字字面量](https://www.douyin.com/video/7581411010066631951) - 2025-12-09 23:50:00 16 | - [层叠规则](https://www.douyin.com/video/7580718034927635731) - 2025-12-08 23:50:00 17 | - [页面可见度API](https://www.douyin.com/video/7580300100317089064) - 2025-12-06 23:50:00 18 | - [Sass实现星空效果](https://www.douyin.com/video/7579927062677409024) - 2025-12-05 23:50:00 19 | - [SASS中的模块化开发](https://www.douyin.com/video/7579611165567831315) - 2025-12-04 23:50:00 20 | - [浏览器的自动播放策略](https://www.douyin.com/video/7579184017380068634) - 2025-12-03 23:50:00 21 | - [惰性函数](https://www.douyin.com/video/7578879656074448154) - 2025-12-02 23:50:00 22 | - [vue组件命名规范](https://www.douyin.com/video/7577691115470458162) - 2025-12-01 23:50:00 23 | - [01背包问题](https://www.douyin.com/video/7577690689069255945) - 2025-11-29 23:50:00 24 | - [Web Animation API](https://www.douyin.com/video/7577369232271314227) - 2025-11-28 23:50:00 25 | - [clip-path](https://www.douyin.com/video/7576951341843549483) - 2025-11-27 23:50:00 26 | - [封装动画函数](https://www.douyin.com/video/7576633710267600166) - 2025-11-26 23:50:00 27 | - [ES6函数的常见面试题](https://www.douyin.com/video/7576216171100310827) - 2025-11-25 23:50:00 28 | - [inspect插件](https://www.douyin.com/video/7575478391776824619) - 2025-11-24 23:50:00 29 | - [判断稀疏数组](https://www.douyin.com/video/7575103476317932819) - 2025-11-22 23:50:00 30 | - [实例成员和静态成员](https://www.douyin.com/video/7574728956625095990) - 2025-11-21 23:50:00 31 | - [最长递增子序列](https://www.douyin.com/video/7574417260534648106) - 2025-11-20 23:50:00 32 | - [参数归一化](https://www.douyin.com/video/7574014960011955497) - 2025-11-19 23:50:00 33 | - [下载的流式传输](https://www.douyin.com/video/7573687647449648424) - 2025-11-18 23:50:00 34 | - [SASS中的数学函数](https://www.douyin.com/video/7572499164794359081) - 2025-11-17 23:50:00 35 | - [数组的forEach方法](https://www.douyin.com/video/7572496836737486099) - 2025-11-15 23:50:00 36 | - [Reflect的本质](https://www.douyin.com/video/7572186272676990214) - 2025-11-14 23:50:00 37 | - [大O表示法](https://www.douyin.com/video/7571755689316470025) - 2025-11-13 23:50:00 38 | - [判断数组的准确方法](https://www.douyin.com/video/7571435547495910697) - 2025-11-12 23:50:00 39 | - [3D Hover Effect](https://www.douyin.com/video/7571016213233503498) - 2025-11-11 23:50:00 40 | - [mac docker效果](https://www.douyin.com/video/7570309705411677486) - 2025-11-10 23:50:00 41 | - [水波进度样式](https://www.douyin.com/video/7569908951781756214) - 2025-11-08 23:50:00 42 | - [Proxy和DefineProperty](https://www.douyin.com/video/7569536390363483434) - 2025-11-07 23:50:00 43 | - [内存泄漏和闭包](https://www.douyin.com/video/7569231360959778100) - 2025-11-06 23:50:00 44 | - [五子棋的胜负判定逻辑](https://www.douyin.com/video/7568794257650224447) - 2025-11-05 23:50:00 45 | - [从视频文件提取画面帧](https://www.douyin.com/video/7568496117621591296) - 2025-11-04 23:50:00 46 | - [故障波纹动效](https://www.douyin.com/video/7567310435846868239) - 2025-11-03 23:50:00 47 | - [前置的不定量参数](https://www.douyin.com/video/7567298929977576738) - 2025-11-01 23:50:00 48 | - [使用正则前瞻检查密码强度](https://www.douyin.com/video/7566944148801047860) - 2025-10-31 23:50:00 49 | - [剪切板对象无法获取的问题](https://www.douyin.com/video/7566561466279562515) - 2025-10-30 23:50:00 50 | - [一道高端的面试题](https://www.douyin.com/video/7566247977073839400) - 2025-10-29 23:50:00 51 | - [interact.js](https://www.douyin.com/video/7565824409240374571) - 2025-10-28 23:50:00 52 | - [永远不要用inline-block布局](https://www.douyin.com/video/7565011464088587583) - 2025-10-27 23:50:00 53 | - [mermaid](https://www.douyin.com/video/7564715641798741300) - 2025-10-25 23:50:00 54 | - [使用defer优化白屏时间](https://www.douyin.com/video/7564336666777865472) - 2025-10-24 23:50:00 55 | - [Clipboard API](https://www.douyin.com/video/7564016938297380115) - 2025-10-23 23:50:00 56 | - [为什么需要虚拟DOM?](https://www.douyin.com/video/7563601043519524111) - 2025-10-22 23:50:00 57 | - [封装统计函数](https://www.douyin.com/video/7563295620224568614) - 2025-10-21 23:50:00 58 | - [用发布订阅模式解耦](https://www.douyin.com/video/7562112613455334708) - 2025-10-20 23:50:00 59 | - [自动检测更新](https://www.douyin.com/video/7562102504549403938) - 2025-10-18 23:50:00 60 | - [使用代理实现单例](https://www.douyin.com/video/7561794111519460635) - 2025-10-17 23:50:00 61 | - [谢谢你发明了JS](https://www.douyin.com/video/7561365496424107310) - 2025-10-16 23:50:00 62 | - [深拷贝的循环引用问题](https://www.douyin.com/video/7561052870309743882) - 2025-10-15 23:50:00 63 | - [ConsoleImporter插件](https://www.douyin.com/video/7560631959882321198) - 2025-10-14 23:50:00 64 | - [DTO和VO](https://www.douyin.com/video/7559940119872982287) - 2025-10-13 23:50:00 65 | - [Promise.try](https://www.douyin.com/video/7559514820341534003) - 2025-10-11 23:50:00 66 | - [正则中的lastIndex](https://www.douyin.com/video/7559207287504571663) - 2025-10-10 23:50:00 67 | - [useTemplateRef](https://www.douyin.com/video/7555426028097735970) - 2025-10-09 23:50:00 68 | - [数据的流式获取](https://www.douyin.com/video/7555425161739062562) - 2025-10-08 23:50:00 69 | - [数组的交集并集差集](https://www.douyin.com/video/7555424638797368610) - 2025-10-07 23:50:00 70 | - [依赖倒置原则](https://www.douyin.com/video/7555423513503419683) - 2025-10-06 23:50:00 71 | - [请求的取消](https://www.douyin.com/video/7555422834768514338) - 2025-10-04 23:50:00 72 | - [跨标签页的数据共享](https://www.douyin.com/video/7555422382895205647) - 2025-10-03 23:50:00 73 | - [import-cost插件](https://www.douyin.com/video/7555421561478565160) - 2025-10-02 23:50:00 74 | - [数据响应式的本质](https://www.douyin.com/video/7555421152961711395) - 2025-10-01 23:50:00 75 | - [极简精妙的JS代码片段](https://www.douyin.com/video/7555418380845600035) - 2025-09-30 23:50:00 76 | - [弹性盒的异形布局](https://www.douyin.com/video/7555115500250991912) - 2025-09-29 23:50:00 77 | - [打包结果分析工具](https://www.douyin.com/video/7554313068478614822) - 2025-09-27 23:50:00 78 | - [妙用CSS变量](https://www.douyin.com/video/7554002489838718254) - 2025-09-26 23:50:00 79 | - [无缝轮播](https://www.douyin.com/video/7553579714753924415) - 2025-09-25 23:50:00 80 | - [let和var的区别](https://www.douyin.com/video/7553260944541994275) - 2025-09-24 23:50:00 81 | - [展示组件和容器组件](https://www.douyin.com/video/7552833071360314665) - 2025-09-23 23:50:00 82 | - [CommonJS的本质](https://www.douyin.com/video/7552086402717076788) - 2025-09-22 23:50:00 83 | - [这个表达式是真“nb”](https://www.douyin.com/video/7551725823410179378) - 2025-09-20 23:50:00 84 | - [使用代理拦截动态属性](https://www.douyin.com/video/7551346351959854346) - 2025-09-19 23:50:00 85 | - [Vue中的类型问题](https://www.douyin.com/video/7551027948401315108) - 2025-09-18 23:50:00 86 | - [可以重试的请求](https://www.douyin.com/video/7550596248953179401) - 2025-09-17 23:50:00 87 | - [无限递归一定会溢栈吗?](https://www.douyin.com/video/7550299436467965238) - 2025-09-16 23:50:00 88 | - [ESM中的符号绑定](https://www.douyin.com/video/7549129423061011758) - 2025-09-15 23:50:00 89 | - [一道丧心病狂的面试题](https://www.douyin.com/video/7549129001680342298) - 2025-09-13 23:50:00 90 | - [class转function](https://www.douyin.com/video/7548809234578738441) - 2025-09-12 23:50:00 91 | - [属性不可遍历](https://www.douyin.com/video/7548374244309224731) - 2025-09-11 23:50:00 92 | - [随机数的求整函数](https://www.douyin.com/video/7548067649910017326) - 2025-09-10 23:50:00 93 | - [磨砂玻璃效果](https://www.douyin.com/video/7547640517996154155) - 2025-09-09 23:50:00 94 | - [统计字符频率的风骚写法](https://www.douyin.com/video/7546916234969861417) - 2025-09-08 23:50:00 95 | - [使用阴影画图](https://www.douyin.com/video/7546529778782768427) - 2025-09-06 23:50:00 96 | - [Performance选项卡](https://www.douyin.com/video/7546154772869467446) - 2025-09-05 23:50:00 97 | - [network选项卡](https://www.douyin.com/video/7545839561453079834) - 2025-09-04 23:50:00 98 | - [JS引擎线程并不存在](https://www.douyin.com/video/7545412407812738347) - 2025-09-03 23:50:00 99 | - [数据响应式的bug](https://www.douyin.com/video/7545117341651045667) - 2025-09-02 23:50:00 100 | - [使用sources进行断点调试](https://www.douyin.com/video/7543919931126009127) - 2025-09-01 23:50:00 101 | - [你不知道的console](https://www.douyin.com/video/7543919516129053988) - 2025-08-30 23:50:00 102 | - [视频文本化](https://www.douyin.com/video/7542865952002657555) - 2025-08-27 23:50:00 103 | - [彻底搞懂时间函数](https://www.douyin.com/video/7542445445864377654) - 2025-08-26 23:50:00 104 | - [标签化模板](https://www.douyin.com/video/7541687844989914410) - 2025-08-25 23:50:00 105 | - [再谈多行文本溢出](https://www.douyin.com/video/7541366457926569270) - 2025-08-23 23:50:00 106 | - [字符串比较](https://www.douyin.com/video/7541009233161047337) - 2025-08-22 23:50:00 107 | - [一道解构的面试题](https://www.douyin.com/video/7540645795846982927) - 2025-08-21 23:50:00 108 | - [圆形放大的hover效果](https://www.douyin.com/video/7540226486578498858) - 2025-08-20 23:50:00 109 | - [代码雨效果](https://www.douyin.com/video/7539911998159572258) - 2025-08-19 23:50:00 110 | - [属性读取方式](https://www.douyin.com/video/7538758478718831923) - 2025-08-18 23:50:00 111 | - [视频文字特效](https://www.douyin.com/video/7538758088401194290) - 2025-08-16 23:50:00 112 | - [环形旋转效果](https://www.douyin.com/video/7538414985228094771) - 2025-08-15 23:50:00 113 | - [鼠标位置信息](https://www.douyin.com/video/7537995993996971283) - 2025-08-14 23:50:00 114 | - [倾斜按钮](https://www.douyin.com/video/7537677311416536358) - 2025-08-13 23:50:00 115 | - [保持元素宽高比](https://www.douyin.com/video/7537248236906581275) - 2025-08-12 23:50:00 116 | - [原型链的全貌图](https://www.douyin.com/video/7536497020497055002) - 2025-08-11 23:50:00 117 | - [变量交换的骚操作](https://www.douyin.com/video/7536143410319691062) - 2025-08-09 23:50:00 118 | - [瀑布流布局](https://www.douyin.com/video/7535423041170361640) - 2025-08-07 23:50:00 119 | - [青蛙跳台阶问题](https://www.douyin.com/video/7534718646552186122) - 2025-08-05 23:50:00 120 | - [watch的诸多疑点](https://www.douyin.com/video/7533544943428717863) - 2025-08-04 23:50:00 121 | - [妙用位运算](https://www.douyin.com/video/7533542308860448063) - 2025-08-02 23:50:00 122 | - [阿里面试题-连续赋值](https://www.douyin.com/video/7533216475302120723) - 2025-08-01 23:50:00 123 | - [分时函数的封装](https://www.douyin.com/video/7532801481125285154) - 2025-07-31 23:50:00 124 | - [访问器成员](https://www.douyin.com/video/7532057048121396522) - 2025-07-29 23:50:00 125 | - [vitepress](https://www.douyin.com/video/7530948984668540202) - 2025-07-26 23:50:00 126 | - [数据分组引发的思考](https://www.douyin.com/video/7530625676509039922) - 2025-07-25 23:50:00 127 | - [Houdini](https://www.douyin.com/video/7529486653228944655) - 2025-07-22 23:50:00 128 | - [使用元祖生成联合类型](https://www.douyin.com/video/7527238586391924011) - 2025-07-16 11:50:00 129 | - [ESModule的工作原理](https://www.douyin.com/video/7526165146746522930) - 2025-07-14 11:50:00 130 | - [对防抖函数进行类型标注](https://www.douyin.com/video/7523145037690031423) - 2025-07-05 11:50:00 131 | - [实现GetOptionals](https://www.douyin.com/video/7517649331470486803) - 2025-06-20 11:50:00 132 | - [实现Optional](https://www.douyin.com/video/7517207382355692836) - 2025-06-19 11:50:00 133 | - [语义化版本](https://www.douyin.com/video/7516468257897925900) - 2025-06-17 11:50:00 134 | - [文本溢出处理](https://www.douyin.com/video/7515358632733691186) - 2025-06-14 11:50:00 135 | - [不要使用计时器做动画](https://www.douyin.com/video/7514978862879624475) - 2025-06-13 11:50:00 136 | - [HTMLCollection & NodeList](https://www.douyin.com/video/7514677546521300260) - 2025-06-12 11:50:00 137 | - [map和parseInt](https://www.douyin.com/video/7513940858698321178) - 2025-06-10 11:50:00 138 | - [用位运算实现权限组合](https://www.douyin.com/video/7512751366314478885) - 2025-06-09 11:50:00 139 | - [++运算符](https://www.douyin.com/video/7512016979180440886) - 2025-06-05 11:50:00 140 | - [数据类型和typeof](https://www.douyin.com/video/7510158361342561547) - 2025-05-31 11:50:00 141 | - [布尔判定和短路规则](https://www.douyin.com/video/7509839814959664447) - 2025-05-30 11:50:00 142 | - [数字格式化](https://www.douyin.com/video/7509748478923361546) - 2025-05-29 14:21:27 143 | - [什么是Web API](https://www.douyin.com/video/7509115037387148559) - 2025-05-28 11:50:00 144 | - [使用void 0 替换undefined](https://www.douyin.com/video/7508675187282382090) - 2025-05-27 11:50:00 145 | - [canvas动画](https://www.douyin.com/video/7507964372753452340) - 2025-05-26 11:50:00 146 | - [NProgress插件](https://www.douyin.com/video/7506453395234934028) - 2025-05-21 11:50:00 147 | - [call和apply的链式调用](https://www.douyin.com/video/7504688698856885538) - 2025-05-16 11:50:00 148 | - [让文字立起来](https://www.douyin.com/video/7503859361450708263) - 2025-05-14 11:50:00 149 | - [闭包代码的提权漏洞](https://www.douyin.com/video/7502466755424488742) - 2025-05-12 11:50:00 150 | - [生成渐变背景小工具](https://www.douyin.com/video/7502465555656396083) - 2025-05-10 11:50:00 151 | - [优化代码分支](https://www.douyin.com/video/7501999523640675599) - 2025-05-09 11:50:00 152 | - [并发请求](https://www.douyin.com/video/7499002647752543524) - 2025-05-06 11:50:00 153 | - [中文输入法导致的高频事件](https://www.douyin.com/video/7496060708702948649) - 2025-04-23 11:50:00 154 | - [RTT最短时间](https://www.douyin.com/video/7491322650246024457) - 2025-04-10 11:50:00 155 | - [面试中的难点亮点该怎么聊?](https://www.douyin.com/video/7490175110310038821) - 2025-04-07 11:50:00 156 | - [动态规划代码实现](https://www.douyin.com/video/7487577335894396195) - 2025-03-31 11:50:00 157 | - [从字段到函数的推导](https://www.douyin.com/video/7486786401682328883) - 2025-03-29 11:50:00 158 | - [模拟 material 文本框](https://www.douyin.com/video/7486489353066138895) - 2025-03-28 11:50:00 159 | - [高亮关键字](https://www.douyin.com/video/7486084591862697255) - 2025-03-27 11:50:00 160 | - [字典顺序和编码顺序](https://www.douyin.com/video/7485360640593366322) - 2025-03-25 11:50:00 161 | - [利用延迟实现复杂动画](https://www.douyin.com/video/7483494472936885515) - 2025-03-20 11:50:00 162 | - [绝对路径和相对路径](https://www.douyin.com/video/7481591211581558055) - 2025-03-17 11:50:00 163 | - [使用depcheck进行依赖检查](https://www.douyin.com/video/7481282564834037032) - 2025-03-14 11:50:00 164 | - [妙用随机数](https://www.douyin.com/video/7480103932274969891) - 2025-03-11 11:50:00 165 | - [用Sass简化媒介查询](https://www.douyin.com/video/7479366420535463202) - 2025-03-10 11:50:00 166 | - [使用canvas完成基本绘图](https://www.douyin.com/video/7479053581891554600) - 2025-03-08 11:50:00 167 | - [封装多边形组件](https://www.douyin.com/video/7477576830485007650) - 2025-03-04 11:50:00 168 | - [Proxy比defineProperty到底好在哪](https://www.douyin.com/video/7476396266109406490) - 2025-03-03 11:50:00 169 | - [合并排序](https://www.douyin.com/video/7475654615095102770) - 2025-02-27 11:50:00 170 | - [跨域方案的抉择](https://www.douyin.com/video/7475353391795916082) - 2025-02-26 11:50:00 171 | - [CSS属性值的计算过程](https://www.douyin.com/video/7474434343289621798) - 2025-02-24 11:50:00 172 | - [全局注册和局部注册的区别](https://www.douyin.com/video/7473839340372675866) - 2025-02-22 11:50:00 173 | - [行盒的截断样式](https://www.douyin.com/video/7472378091730423080) - 2025-02-18 11:50:00 174 | - [运算优先级和包装类型](https://www.douyin.com/video/7434150876220099849) - 2024-11-07 11:50:00 175 | - [层叠规则](https://www.douyin.com/video/7361353616319384842) - 2024-04-25 11:50:00 176 | - [龙腾渡一 新春大吉。](https://www.douyin.com/video/7332375164518272308) - 2024-02-09 11:50:00 177 | - [公共库考虑的有多细致](https://www.douyin.com/video/7310190115379219750) - 2023-12-09 11:50:00 178 | - [站点域和公共后缀](https://www.douyin.com/video/7302998141052194058) - 2023-11-20 11:50:01 179 | - [常用滤镜效果](https://www.douyin.com/video/7294599730733010228) - 2023-10-28 11:50:00 180 | -------------------------------------------------------------------------------- /docs/douyin/compulsory_course.md: -------------------------------------------------------------------------------- 1 | # 渡一前端必修课 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://www.douyin.com/user/MS4wLjABAAAAy68qgQPB-aGWv7MKIRB544hLgzY18xgXhywYjnN-XKk](https://www.douyin.com/user/MS4wLjABAAAAy68qgQPB-aGWv7MKIRB544hLgzY18xgXhywYjnN-XKk) 8 | 9 |
10 | 11 | - [多次触发的动画结束事件](https://www.douyin.com/video/7582881566225976630) - 2025-12-13 15:30:00 12 | - [ESModule的工作原理](https://www.douyin.com/video/7582618753142197510) - 2025-12-12 15:30:00 13 | - [浏览器原生弹窗](https://www.douyin.com/video/7582141836622384438) - 2025-12-11 15:30:00 14 | - [利用延迟实现复杂动画](https://www.douyin.com/video/7581837566610115894) - 2025-12-10 15:30:00 15 | - [Sass实现文字替换](https://www.douyin.com/video/7581410394434997544) - 2025-12-09 15:30:00 16 | - [俄罗斯方块实现思路](https://www.douyin.com/video/7580718176103681322) - 2025-12-08 15:30:00 17 | - [使用SASS实现主题切换](https://www.douyin.com/video/7580300809468939560) - 2025-12-06 15:30:00 18 | - [无限视差滚动](https://www.douyin.com/video/7580297557851622708) - 2025-12-05 17:06:08 19 | - [漂亮的文字阴影](https://www.douyin.com/video/7579611081631468843) - 2025-12-04 15:30:00 20 | - [无法预测的大数运算](https://www.douyin.com/video/7579183143404457266) - 2025-12-03 15:30:00 21 | - [无法取消的默认行为](https://www.douyin.com/video/7579198392413310251) - 2025-12-02 18:00:52 22 | - [鼠标和键盘事件的常见问题](https://www.douyin.com/video/7577690044861844745) - 2025-12-01 15:30:00 23 | - [如何防截屏防录制](https://www.douyin.com/video/7577689354382871818) - 2025-11-29 15:30:00 24 | - [Ajax中的各种常见概念](https://www.douyin.com/video/7577369688749935918) - 2025-11-28 15:30:00 25 | - [copy的监听和解禁](https://www.douyin.com/video/7576950585681923382) - 2025-11-27 15:30:00 26 | - [黏性定位](https://www.douyin.com/video/7576633656769301811) - 2025-11-26 15:30:00 27 | - [initial、unset、revert](https://www.douyin.com/video/7576215142829018404) - 2025-11-25 15:30:00 28 | - [用canvas玩转图片](https://www.douyin.com/video/7575475355868351807) - 2025-11-24 15:30:00 29 | - [Cookie中的SameSite](https://www.douyin.com/video/7575475971797667078) - 2025-11-22 17:15:54 30 | - [实现防篡改的水印](https://www.douyin.com/video/7574728224660360454) - 2025-11-21 15:30:00 31 | - [钉钉官网的滚动动画](https://www.douyin.com/video/7574417235104566547) - 2025-11-20 15:30:00 32 | - [幻影依赖](https://www.douyin.com/video/7573993949443001636) - 2025-11-19 15:30:00 33 | - [打包体积的分析和优化](https://www.douyin.com/video/7573687493841751296) - 2025-11-18 15:30:00 34 | - [toFixed的结果可能会欺骗你](https://www.douyin.com/video/7572498604884069686) - 2025-11-17 15:30:00 35 | - [旋转中的视差效果](https://www.douyin.com/video/7572496113408806163) - 2025-11-15 15:30:00 36 | - [声音的分析和处理](https://www.douyin.com/video/7572186207636000042) - 2025-11-14 15:30:00 37 | - [模板的本质](https://www.douyin.com/video/7571754166314339634) - 2025-11-13 15:30:00 38 | - [拖拽API](https://www.douyin.com/video/7571436013827001636) - 2025-11-12 15:30:00 39 | - [代码风格](https://www.douyin.com/video/7571015329770376474) - 2025-11-11 15:30:00 40 | - [右键菜单的位置抉择](https://www.douyin.com/video/7570309335780232475) - 2025-11-10 15:30:00 41 | - [flex+margin](https://www.douyin.com/video/7569908558809042219) - 2025-11-08 15:30:00 42 | - [watchEffect中的异步问题](https://www.douyin.com/video/7569535782252203270) - 2025-11-07 15:30:00 43 | - [使用CORS解决跨域问题](https://www.douyin.com/video/7569230807433334068) - 2025-11-06 15:30:00 44 | - [静态资源的动态访问](https://www.douyin.com/video/7568792533048823083) - 2025-11-05 15:30:00 45 | - [如何实现高度自动的过渡](https://www.douyin.com/video/7568495968052727055) - 2025-11-04 15:30:00 46 | - [文字转语音](https://www.douyin.com/video/7567310018517667106) - 2025-11-03 15:30:00 47 | - [通过小游戏学前端](https://www.douyin.com/video/7567298251435543823) - 2025-11-01 15:30:00 48 | - [脚本加载失败如何重试](https://www.douyin.com/video/7566944201623997711) - 2025-10-31 15:30:00 49 | - [判断奇偶数](https://www.douyin.com/video/7566561014989229355) - 2025-10-30 15:30:00 50 | - [拖拽上传](https://www.douyin.com/video/7566248165578493224) - 2025-10-29 15:30:00 51 | - [优化动态规划的空间复杂度](https://www.douyin.com/video/7565823696728886547) - 2025-10-28 15:30:00 52 | - [单向数据流](https://www.douyin.com/video/7565011627200810259) - 2025-10-27 15:30:00 53 | - [图片调色盘](https://www.douyin.com/video/7565088365729598761) - 2025-10-25 17:26:42 54 | - [你不知道的CSS选择器](https://www.douyin.com/video/7564335898783927592) - 2025-10-24 15:30:00 55 | - [任务执行的洋葱模型](https://www.douyin.com/video/7564017044652395815) - 2025-10-23 15:30:00 56 | - [状态仓库持久化](https://www.douyin.com/video/7563601613672172852) - 2025-10-22 15:30:00 57 | - [图片边框](https://www.douyin.com/video/7563295516889533742) - 2025-10-21 15:30:00 58 | - [3D渐变的轮播图](https://www.douyin.com/video/7563228905281309987) - 2025-10-20 17:11:04 59 | - [交错排列的文字](https://www.douyin.com/video/7562100943693647139) - 2025-10-18 15:30:00 60 | - [渐进式图片](https://www.douyin.com/video/7561794739197021478) - 2025-10-17 15:30:00 61 | - [node的模块查找策略](https://www.douyin.com/video/7561364896202460442) - 2025-10-16 15:30:00 62 | - [LRU缓存算法](https://www.douyin.com/video/7561052065242418478) - 2025-10-15 15:30:00 63 | - [行为验证](https://www.douyin.com/video/7560630515041078579) - 2025-10-14 15:30:00 64 | - [单点登录的模式](https://www.douyin.com/video/7559940239066746146) - 2025-10-13 15:30:00 65 | - [可缓存的方法](https://www.douyin.com/video/7559514412361452850) - 2025-10-11 15:30:00 66 | - [Web性能指标](https://www.douyin.com/video/7559505198406765862) - 2025-10-10 16:21:06 67 | - [打印对象的「BUG」](https://www.douyin.com/video/7555431759739997475) - 2025-10-09 15:30:00 68 | - [最优解问题的典型思路](https://www.douyin.com/video/7555430983391038772) - 2025-10-08 15:30:00 69 | - [多行文本擦除效果](https://www.douyin.com/video/7555430164524469504) - 2025-10-07 15:30:00 70 | - [读取文件原始内容](https://www.douyin.com/video/7555429726815259956) - 2025-10-06 15:30:00 71 | - [系统级取色器](https://www.douyin.com/video/7555428913527246132) - 2025-10-04 15:30:00 72 | - [Promise面试题](https://www.douyin.com/video/7555428501763935488) - 2025-10-03 15:30:00 73 | - [实现私有字段](https://www.douyin.com/video/7555428078525173032) - 2025-10-02 15:30:00 74 | - [阿里云的文件上传](https://www.douyin.com/video/7555427186593778978) - 2025-10-01 15:30:00 75 | - [统一vite中的图片转换逻辑](https://www.douyin.com/video/7555422586646269210) - 2025-09-29 16:18:29 76 | - [最近距离排序](https://www.douyin.com/video/7554692035094072603) - 2025-09-27 17:03:34 77 | - [动态执行JS](https://www.douyin.com/video/7554322444165582118) - 2025-09-26 17:09:20 78 | - [大文件分片](https://www.douyin.com/video/7553951574670757129) - 2025-09-25 17:10:12 79 | - [srcset和sizes](https://www.douyin.com/video/7553260616409025807) - 2025-09-24 15:30:00 80 | - [手动解析DOM树](https://www.douyin.com/video/7552832338447633707) - 2025-09-23 15:30:00 81 | - [组件级权限控制的最佳实践](https://www.douyin.com/video/7552086653322530082) - 2025-09-22 15:30:00 82 | - [token无感刷新](https://www.douyin.com/video/7551345893480451366) - 2025-09-19 15:30:00 83 | - [获取参数和返回值类型](https://www.douyin.com/video/7551028168291831079) - 2025-09-18 15:30:00 84 | - [无后效性](https://www.douyin.com/video/7550595684219587866) - 2025-09-17 15:30:00 85 | - [图片裁剪上传原理](https://www.douyin.com/video/7549128431649279241) - 2025-09-15 15:30:00 86 | - [TS中字符串索引带来的类型问题](https://www.douyin.com/video/7549127683532246299) - 2025-09-13 15:30:00 87 | - [为什么组件库要加前缀](https://www.douyin.com/video/7548808935927549193) - 2025-09-12 15:30:00 88 | - [组件循环依赖问题](https://www.douyin.com/video/7548373499547553034) - 2025-09-11 15:30:00 89 | - [让文字适应纹理](https://www.douyin.com/video/7548067399396887854) - 2025-09-10 15:30:00 90 | - [解决组件库类型丢失的问题](https://www.douyin.com/video/7547639879920799012) - 2025-09-09 15:30:00 91 | - [数组新增的纯函数API](https://www.douyin.com/video/7546529849981078827) - 2025-09-06 15:30:00 92 | - [base和publicPath](https://www.douyin.com/video/7546154307050048811) - 2025-09-05 15:30:00 93 | - [CSS原子化](https://www.douyin.com/video/7545839388467432742) - 2025-09-04 15:30:00 94 | - [对等依赖报错问题](https://www.douyin.com/video/7545411968551652627) - 2025-09-03 15:30:00 95 | - [国际化、本地化、全球化](https://www.douyin.com/video/7545117239347891496) - 2025-09-02 15:30:00 96 | - [四角线框的跟随移动](https://www.douyin.com/video/7543919059507744039) - 2025-09-01 15:30:00 97 | - [元素倒影](https://www.douyin.com/video/7543918569763949887) - 2025-08-30 15:30:00 98 | - [服务监控与数据埋点](https://www.douyin.com/video/7543599788671929654) - 2025-08-29 15:30:00 99 | - [交融动画效果](https://www.douyin.com/video/7543180696928537919) - 2025-08-28 15:30:00 100 | - [开源库中的package](https://www.douyin.com/video/7542865929655389481) - 2025-08-27 15:30:00 101 | - [环绕式照片墙](https://www.douyin.com/video/7542444410328321334) - 2025-08-26 15:30:00 102 | - [用CSS自定义咖啡](https://www.douyin.com/video/7541686447342898468) - 2025-08-25 15:30:00 103 | - [改变鼠标样式和指向](https://www.douyin.com/video/7541364976980725028) - 2025-08-23 15:30:00 104 | - [GSAP的滚动插件](https://www.douyin.com/video/7541008357759536423) - 2025-08-22 15:30:00 105 | - [不可变类型](https://www.douyin.com/video/7540645702297210127) - 2025-08-21 15:30:00 106 | - [对柯里化进行类型标注](https://www.douyin.com/video/7540224955502447935) - 2025-08-20 15:30:00 107 | - [使用infer封装通用类型工具](https://www.douyin.com/video/7539911920846032163) - 2025-08-19 15:30:00 108 | - [丝滑的标题动画](https://www.douyin.com/video/7538756565105446207) - 2025-08-18 15:30:00 109 | - [vite打包结构控制](https://www.douyin.com/video/7538755670707834138) - 2025-08-16 15:30:00 110 | - [协变和逆变](https://www.douyin.com/video/7537995479305506102) - 2025-08-14 15:30:00 111 | - [JS中的计时是否精确](https://www.douyin.com/video/7537677424104983858) - 2025-08-13 15:30:00 112 | - [如何画一棵随机「树」](https://www.douyin.com/video/7537247535262420275) - 2025-08-12 15:30:00 113 | - [模特换装效果](https://www.douyin.com/video/7536496441775115566) - 2025-08-11 15:30:00 114 | - [联合类型转交叉类型](https://www.douyin.com/video/7536142611342576959) - 2025-08-09 15:30:00 115 | - [联合类型和交叉类型](https://www.douyin.com/video/7535768498480385321) - 2025-08-08 15:30:00 116 | - [如何获取组件的类型](https://www.douyin.com/video/7535422643831311656) - 2025-08-07 15:30:00 117 | - [旋转切换的轮播图](https://www.douyin.com/video/7535024654214253867) - 2025-08-06 15:30:00 118 | - [以同步的方式实现事件监听](https://www.douyin.com/video/7534718495976688947) - 2025-08-05 15:30:00 119 | - [动态表单的实现](https://www.douyin.com/video/7533541672282606890) - 2025-08-04 15:30:00 120 | - [SASS中的颜色函数](https://www.douyin.com/video/7533538860559519012) - 2025-08-02 15:30:00 121 | - [实现元素平滑上升](https://www.douyin.com/video/7533216693393411367) - 2025-08-01 15:30:00 122 | - [封装全屏功能](https://www.douyin.com/video/7530948448191909183) - 2025-07-26 15:30:00 123 | - [精妙的算法题](https://www.douyin.com/video/7530619103057415459) - 2025-07-25 15:30:00 124 | - [cspell](https://www.douyin.com/video/7529831019483057450) - 2025-07-23 15:30:00 125 | - [页面图标Badge如何实现](https://www.douyin.com/video/7528384472023108883) - 2025-07-19 15:30:00 126 | - [盛水最大的容器](https://www.douyin.com/video/7527923942351211818) - 2025-07-18 11:50:00 127 | - [GSAP已全部免费](https://www.douyin.com/video/7525793452848631091) - 2025-07-12 11:50:00 128 | - [这是在考原型吗](https://www.douyin.com/video/7522404750176898330) - 2025-07-03 11:50:00 129 | - [React代码执行分析工具](https://www.douyin.com/video/7517947152140684598) - 2025-06-21 11:50:00 130 | - [项目问题的表述结构](https://www.douyin.com/video/7517647774440082724) - 2025-06-20 11:50:00 131 | - [WeakSet的垃圾回收问题](https://www.douyin.com/video/7516906054102289673) - 2025-06-18 11:50:00 132 | - [如何封装组件](https://www.douyin.com/video/7516467718342610217) - 2025-06-17 11:50:00 133 | - [利用贝塞尔曲线实现复杂动画](https://www.douyin.com/video/7515783890468900159) - 2025-06-16 11:50:00 134 | - [Animation调试工具的使用](https://www.douyin.com/video/7515358672818539827) - 2025-06-14 11:50:00 135 | - [SASS中的继承](https://www.douyin.com/video/7514677337015782695) - 2025-06-12 11:50:00 136 | - [CSS Tricks](https://www.douyin.com/video/7514240974743227685) - 2025-06-11 11:50:00 137 | - [监控页面卡顿](https://www.douyin.com/video/7513940669749153033) - 2025-06-10 11:50:00 138 | - [实现抖音的“刚刚看过”功能](https://www.douyin.com/video/7512749288531758374) - 2025-06-09 11:50:00 139 | - [网络状态监控](https://www.douyin.com/video/7512747862137031945) - 2025-06-07 11:50:00 140 | - [使用SASS实现主题切换](https://www.douyin.com/video/7512453213535178035) - 2025-06-06 11:50:00 141 | - [上传OSS的正确姿势](https://www.douyin.com/video/7511689767268994315) - 2025-06-04 11:50:00 142 | - [Intersection Observer](https://www.douyin.com/video/7511232409883479296) - 2025-06-03 11:50:00 143 | - [动态规划问题的一般解题思路](https://www.douyin.com/video/7510946955997007154) - 2025-06-02 11:50:00 144 | - [二进制格式上传文件](https://www.douyin.com/video/7510158022715395364) - 2025-05-31 11:50:00 145 | - [在canvas中绘制和拖动](https://www.douyin.com/video/7509839847650020620) - 2025-05-30 11:50:00 146 | - [你不知道的数字字面量](https://www.douyin.com/video/7509415838022126884) - 2025-05-29 11:50:00 147 | - [页面可见度API](https://www.douyin.com/video/7509114867140267279) - 2025-05-28 11:50:00 148 | - [rAF和rIC的先后问题](https://www.douyin.com/video/7506453027033812263) - 2025-05-21 11:50:00 149 | - [最小栈问题](https://www.douyin.com/video/7504966341149969727) - 2025-05-17 11:50:00 150 | - [将函数打印成原始类型?](https://www.douyin.com/video/7503859430216289548) - 2025-05-14 11:50:00 151 | - [代码片段工具](https://www.douyin.com/video/7502465135173307686) - 2025-05-10 11:50:00 152 | - [withResolvers语法糖](https://www.douyin.com/video/7497217817893195048) - 2025-04-26 11:50:00 153 | - [封装resize指令](https://www.douyin.com/video/7496516389537090851) - 2025-04-24 11:50:00 154 | - [你不知道的阴影](https://www.douyin.com/video/7490925662916660490) - 2025-04-09 11:50:00 155 | - [30万年薪需要具备那些前端技术?](https://www.douyin.com/video/7490379793691725065) - 2025-04-07 11:50:01 156 | - [SVG的描边动画](https://www.douyin.com/video/7489295596671618354) - 2025-04-05 11:50:00 157 | - [前端各种风骚操作](https://www.douyin.com/video/7489010673817521417) - 2025-04-04 11:50:00 158 | - [FLIP动画](https://www.douyin.com/video/7486085711561624859) - 2025-03-27 11:50:00 159 | - [打印三角形的面试题](https://www.douyin.com/video/7485360295511067954) - 2025-03-25 11:50:00 160 | - [JSLabel语法](https://www.douyin.com/video/7483875247620443442) - 2025-03-21 11:50:00 161 | - [跟随系统的主题切换](https://www.douyin.com/video/7483073742051003667) - 2025-03-19 11:50:00 162 | - [高阶函数应用-函数防抖](https://www.douyin.com/video/7482761318278139136) - 2025-03-18 11:50:00 163 | - [文件上传的技术纲要](https://www.douyin.com/video/7479053219000339764) - 2025-03-08 11:50:00 164 | - [Headless CMS](https://www.douyin.com/video/7478622252984978724) - 2025-03-07 11:50:00 165 | - [粒子时钟](https://www.douyin.com/video/7478336459188063540) - 2025-03-06 11:50:00 166 | - [对象数组去重](https://www.douyin.com/video/7477917994182610203) - 2025-03-05 11:50:00 167 | - [弧形边框选项卡](https://www.douyin.com/video/7477576744631897344) - 2025-03-04 11:50:00 168 | - [音频可视化](https://www.douyin.com/video/7476394988285283634) - 2025-03-03 11:50:00 169 | - [请求的乱序问题](https://www.douyin.com/video/7474966486109392168) - 2025-02-25 11:50:00 170 | - [vscode绘图插件](https://www.douyin.com/video/7469774119056231689) - 2025-02-11 11:50:00 171 | - [复合属性造成的样式问题](https://www.douyin.com/video/7459754115254504715) - 2025-01-15 11:50:00 172 | - [Application选项卡](https://www.douyin.com/video/7457912528857730358) - 2025-01-10 11:50:00 173 | - [手写call](https://www.douyin.com/video/7431178812035042600) - 2024-10-30 11:50:00 174 | - [函数防抖](https://www.douyin.com/video/7428537687461743910) - 2024-10-23 11:50:00 175 | - [真随机和伪随机](https://www.douyin.com/video/7366911138828733708) - 2024-05-10 11:50:00 176 | - [龙腾渡一 新春大吉。](https://www.douyin.com/video/7332367905813761315) - 2024-02-09 11:50:00 177 | - [模拟微队列](https://www.douyin.com/video/7304210000556133684) - 2023-11-23 11:50:00 178 | - [元素的绘制顺序](https://www.douyin.com/video/7293866184812891429) - 2023-10-26 11:50:00 179 | - [元素的函数式排列](https://www.douyin.com/video/7291677668024601883) - 2023-10-20 11:50:01 180 | - [码点和码元](https://www.douyin.com/video/7289043051497016613) - 2023-10-13 11:50:00 181 | - [函数的length属性](https://www.douyin.com/video/7282298263145860409) - 2023-09-25 11:50:00 182 | - [加法运算规则](https://www.douyin.com/video/7260490479308000575) - 2023-07-28 11:50:00 183 | -------------------------------------------------------------------------------- /docs/bilibili/open_master_class.md: -------------------------------------------------------------------------------- 1 | # 渡一前端公开大师课 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://space.bilibili.com/3494367331354766/video](https://space.bilibili.com/3494367331354766/video) 8 | 9 |
10 | 11 | - [什么是工作流引擎?对前端开发会有哪些影响?【渡一教育】](https://www.bilibili.com/BV1EzSjBvE7F) - 2025-11-29 12:00:00 12 | - [学习工作流最重要的是理解核心概念,概念不明,寸步难行【渡一教育】](https://www.bilibili.com/BV1MXSGBgEWi) - 2025-11-28 12:00:00 13 | - [如何通过向量相似度算法匹配知识?如何结合用户问题生成答案?【渡一教育】](https://www.bilibili.com/BV1tHCpBUEVr) - 2025-11-14 12:00:00 14 | - [为什么需要对知识库建立索引?索引如何建立?【渡一教育】](https://www.bilibili.com/BV1iPCpBcEha) - 2025-11-13 12:00:00 15 | - [RAG为什么是重要的AI技术?什么是RAG?如何实现RAG?【渡一教育】](https://www.bilibili.com/BV1DyCjBzE28) - 2025-11-12 11:59:21 16 | - [实现样式隔离、自定义内容、自定义事件【渡一教育】](https://www.bilibili.com/BV1crs8zPE9Z) - 2025-10-25 12:00:00 17 | - [利用模板字符串实现精准渲染更新,你敢信?【渡一教育】](https://www.bilibili.com/BV1Hrs8zPEpb) - 2025-10-24 12:00:00 18 | - [组件的终极方案Web Components,让你的组件变成HTML标签【渡一教育】](https://www.bilibili.com/BV1wrs8zPEEx) - 2025-10-23 12:00:00 19 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何对子包进行打包、依赖、测试、发布【渡一教育】](https://www.bilibili.com/BV1tinuzGEfQ) - 2025-09-28 12:00:00 20 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何统一工程规范【渡一教育】](https://www.bilibili.com/BV1uinuzGEMK) - 2025-09-27 12:00:00 21 | - [前端终极布局方案——网格布局,如何将子项放入网格【渡一教育】](https://www.bilibili.com/BV1r7Hkz4EWQ) - 2025-09-14 12:00:00 22 | - [前端终极布局方案——网格布局,如何编排网格【渡一教育】](https://www.bilibili.com/BV1k7Hkz4EwH) - 2025-09-13 12:00:00 23 | - [实现Promise最复杂的then函数【渡一教育】](https://www.bilibili.com/BV11LaHzeEgA) - 2025-09-02 12:00:00 24 | - [Promise状态转换中你不知道的细节【渡一教育】](https://www.bilibili.com/BV11LaHzeEbB) - 2025-09-01 15:51:23 25 | - [关于前端职业的未来-真正的问题【渡一教育】](https://www.bilibili.com/BV17beFzAEqN) - 2025-08-25 12:00:00 26 | - [关于前端职业的未来-职业的选择【渡一教育】](https://www.bilibili.com/BV1ZbeFzAEBY) - 2025-08-22 12:00:00 27 | - [关于前端职业的未来-岗位的变化【渡一教育】](https://www.bilibili.com/BV17beFzAERN) - 2025-08-22 12:00:00 28 | - [关于前端职业的未来-市场的噪音【渡一教育】](https://www.bilibili.com/BV16WeFziEg6) - 2025-08-21 12:00:00 29 | - [火爆全网的MCP全解读,MCP项目助你就业涨薪【渡一教育】](https://www.bilibili.com/BV1GbYhz6EHs) - 2025-08-20 12:00:00 30 | - [火爆全网的MCP全解读,从开发到应用透彻理解【渡一教育】](https://www.bilibili.com/BV17PYszYEdU) - 2025-08-19 12:00:00 31 | - [火爆全网的MCP全解读,前置知识先知道【渡一教育】](https://www.bilibili.com/BV1qkYpzZEQ8) - 2025-08-18 12:00:42 32 | - [水波进度样式【渡一教育】](https://www.bilibili.com/BV1KT4y1t7rF) - 2024-02-12 11:55:00 33 | - [3D Hover Effect【渡一教育】](https://www.bilibili.com/BV1qV411Q7f6) - 2024-02-07 11:55:00 34 | - [mac docker效果【渡一教育】](https://www.bilibili.com/BV1ec411v7bu) - 2024-02-05 11:55:00 35 | - [多行文本擦除效果【渡一教育】](https://www.bilibili.com/BV1be411n7uB) - 2024-02-02 11:55:00 36 | - [元素倒影【渡一教育】](https://www.bilibili.com/BV1294y1K76s) - 2024-01-31 11:55:00 37 | - [故障波纹动效【渡一教育】](https://www.bilibili.com/BV1HK411a76E) - 2024-01-29 11:55:00 38 | - [色彩的差值混合【渡一教育】](https://www.bilibili.com/BV18T4y187e2) - 2024-01-26 11:55:00 39 | - [六边形布局【渡一教育】](https://www.bilibili.com/BV1qW4y1c7M1) - 2024-01-24 11:55:00 40 | - [文字视差背景【渡一教育】](https://www.bilibili.com/BV1P94y1M7kM) - 2024-01-22 11:55:00 41 | - [锯齿菱形边缘【渡一教育】](https://www.bilibili.com/BV11K411x7c1) - 2024-01-19 11:55:00 42 | - [交融动画效果【渡一教育】](https://www.bilibili.com/BV18W4y1N7E5) - 2024-01-17 11:55:00 43 | - [图片边框【渡一教育】](https://www.bilibili.com/BV18Q4y1j79o) - 2024-01-15 11:55:00 44 | - [视差滚动【渡一教育】](https://www.bilibili.com/BV1t94y1g72Y) - 2024-01-12 11:55:00 45 | - [改变鼠标样式和指向【渡一教育】](https://www.bilibili.com/BV1DC4y1N7eR) - 2024-01-10 11:55:00 46 | - [鼠标移动的高亮边框效果【渡一教育】](https://www.bilibili.com/BV1Ri4y1B7PA) - 2024-01-08 11:55:00 47 | - [交错排列的文字【渡一教育】](https://www.bilibili.com/BV1UK411t7FV) - 2024-01-05 11:55:00 48 | - [丝滑的标题动画【渡一教育】](https://www.bilibili.com/BV1wC4y1T7LW) - 2024-01-03 11:55:00 49 | - [3D渐变的轮播图【渡一教育】](https://www.bilibili.com/BV12a4y167UW) - 2024-01-01 11:55:00 50 | - [漂亮的文字阴影【渡一教育】](https://www.bilibili.com/BV1tC4y1g7Aj) - 2023-12-29 11:55:00 51 | - [实现一棵随机树【渡一教育】](https://www.bilibili.com/BV1rg4y117o4) - 2023-12-27 11:55:00 52 | - [模特换装效果【渡一教育】](https://www.bilibili.com/BV1xu4y1M7uD) - 2023-12-25 11:55:00 53 | - [SVG的描边动画【渡一教育】](https://www.bilibili.com/BV1Qi4y1Y7Sp) - 2023-12-22 11:55:00 54 | - [前端需要终生学习吗?【渡一教育】](https://www.bilibili.com/BV1jj411p7vr) - 2023-12-20 11:55:00 55 | - [不可变类型【渡一教育】](https://www.bilibili.com/BV1oH4y1k7Zo) - 2023-12-18 11:55:00 56 | - [前置的不定量参数【渡一教育】](https://www.bilibili.com/BV1BN4y1e7Dd) - 2023-12-15 11:55:00 57 | - [联合类型转交叉类型【渡一教育】](https://www.bilibili.com/BV19Q4y1G79m) - 2023-12-13 11:55:00 58 | - [TS中的协变与逆变【渡一教育】](https://www.bilibili.com/BV17N4y1e7PK) - 2023-12-11 11:55:00 59 | - [联合类型和交叉类型【渡一教育】](https://www.bilibili.com/BV1wu4y1c7ws) - 2023-12-08 11:55:00 60 | - [对防抖函数进行类型标注【渡一教育】](https://www.bilibili.com/BV1i64y177as) - 2023-12-06 11:55:00 61 | - [TS中的递归类型推断【渡一教育】](https://www.bilibili.com/BV1pb4y1M7eD) - 2023-12-04 11:55:00 62 | - [使用infer封装通用类型工具【渡一教育】](https://www.bilibili.com/BV1fu4y1L76H) - 2023-12-01 11:55:00 63 | - [从字段到函数的推导【渡一教育】](https://www.bilibili.com/BV1Nj41177ua) - 2023-11-29 11:55:00 64 | - [实现Optional【渡一教育】](https://www.bilibili.com/BV11Q4y1t7na) - 2023-11-24 11:55:00 65 | - [TS到底难在哪【渡一教育】](https://www.bilibili.com/BV1tu4y1A7gi) - 2023-11-22 11:55:00 66 | - [知识的深度和广度【渡一教育】](https://www.bilibili.com/BV1dc411X7Vs) - 2023-11-20 11:55:00 67 | - [SASS中的扩展和占位符【渡一教育】](https://www.bilibili.com/BV1Qz4y1A7dH) - 2023-11-17 11:55:00 68 | - [SASS中的模块化开发【渡一教育】](https://www.bilibili.com/BV1pM411S7Vj) - 2023-11-15 11:55:00 69 | - [SASS中的颜色函数【渡一教育】](https://www.bilibili.com/BV1Rg4y1R7Qr) - 2023-11-13 11:55:00 70 | - [SASS中的数学函数【渡一教育】](https://www.bilibili.com/BV1su4y1J77Z) - 2023-11-10 11:55:00 71 | - [使用SASS实现主题切换【渡一教育】](https://www.bilibili.com/BV15z4y1N7jB) - 2023-11-08 11:55:00 72 | - [用Sass简化媒介查询【渡一教育】](https://www.bilibili.com/BV1mj411e7zD) - 2023-11-06 11:55:00 73 | - [Sass实现文字替换【渡一教育】](https://www.bilibili.com/BV1694y1L73i) - 2023-11-03 11:55:00 74 | - [Sass实现星空效果【渡一教育】](https://www.bilibili.com/BV14C4y1375J) - 2023-11-01 11:55:00 75 | - [什么是CSS预编译器【渡一教育】](https://www.bilibili.com/BV1ec411o7BT) - 2023-10-30 11:55:00 76 | - [Web API总结【渡一教育】](https://www.bilibili.com/BV17N4y117fe) - 2023-10-27 11:55:00 77 | - [Clipboard API【渡一教育】](https://www.bilibili.com/BV1Xh4y1z7Nt) - 2023-10-25 11:55:00 78 | - [自动播放策略【渡一教育】](https://www.bilibili.com/BV1Gw411C745) - 2023-10-23 11:55:00 79 | - [声音的分析和处理【渡一教育】](https://www.bilibili.com/BV1y94y1b79m) - 2023-10-20 11:55:00 80 | - [拖拽API【渡一教育】](https://www.bilibili.com/BV1cC4y157nq) - 2023-10-18 11:55:00 81 | - [网络状态监控【渡一教育】](https://www.bilibili.com/BV1gz4y1F7ki) - 2023-10-16 11:55:00 82 | - [Web Animation API【渡一教育】](https://www.bilibili.com/BV18w411A7Cf) - 2023-10-13 11:55:00 83 | - [Page Visibility【渡一教育】](https://www.bilibili.com/BV1mw411a78n) - 2023-10-11 11:55:00 84 | - [Intersection Observer【渡一教育】](https://www.bilibili.com/BV12G411m7ak) - 2023-10-09 11:55:00 85 | - [什么是Web API【渡一教育】](https://www.bilibili.com/BV17w411m7fc) - 2023-10-07 11:55:00 86 | - [现代CSS样式总结【渡一教育】](https://www.bilibili.com/BV1AK4y1c7kz) - 2023-10-06 11:55:00 87 | - [flex+margin【渡一教育】](https://www.bilibili.com/BV1YF411m7Yv) - 2023-10-05 11:55:00 88 | - [你不知道的CSS选择器【渡一教育】](https://www.bilibili.com/BV1xN411n7uG) - 2023-10-04 11:55:00 89 | - [Houdini【渡一教育】](https://www.bilibili.com/BV1xw411Y7G7) - 2023-10-03 11:55:00 90 | - [时间函数【渡一教育】](https://www.bilibili.com/BV1gC4y1f7HA) - 2023-10-02 11:55:00 91 | - [常用滤镜效果【渡一教育】](https://www.bilibili.com/BV1kN411H7Ne) - 2023-09-30 11:55:00 92 | - [黏性定位【渡一教育】](https://www.bilibili.com/BV1Wy4y1F7yU) - 2023-09-29 11:55:00 93 | - [行盒的截断样式【渡一教育】](https://www.bilibili.com/BV1HP411b7C6) - 2023-09-28 11:55:00 94 | - [CSS变量的妙用【渡一教育】](https://www.bilibili.com/BV1zH4y1S7ui) - 2023-09-27 11:55:00 95 | - [clip-path【渡一教育】](https://www.bilibili.com/BV1JF411S7K2) - 2023-09-26 11:55:00 96 | - [知识可以很简单【渡一教育】](https://www.bilibili.com/BV1F94y1p7ga) - 2023-09-25 11:55:00 97 | - [分时函数的封装【渡一教育】](https://www.bilibili.com/BV1qK4y1c7q1) - 2023-09-23 11:55:00 98 | - [数据分组引发的思考【渡一教育】](https://www.bilibili.com/BV1m14y1r78K) - 2023-09-22 11:55:00 99 | - [惰性函数【渡一教育】](https://www.bilibili.com/BV1Y14y1r7sV) - 2023-09-21 11:55:00 100 | - [参数归一化【渡一教育】](https://www.bilibili.com/BV1bu411A7mf) - 2023-09-20 11:55:00 101 | - [高阶函数应用-并发队列【渡一教育】](https://www.bilibili.com/BV1SN411p7PN) - 2023-09-19 11:55:00 102 | - [高阶函数应用-函数防抖【渡一教育】](https://www.bilibili.com/BV1734y1K7Xz) - 2023-09-18 11:55:00 103 | - [高阶函数的应用-封装动画函数【渡一教育】](https://www.bilibili.com/BV1a34y1T7Do) - 2023-09-16 11:55:00 104 | - [什么是高阶函数【渡一教育】](https://www.bilibili.com/BV12P411h7Db) - 2023-09-15 11:55:00 105 | - [面相对象总结【渡一教育】](https://www.bilibili.com/BV1aF41167Rk) - 2023-09-14 11:55:00 106 | - [如何对class降级【渡一教育】](https://www.bilibili.com/BV1rj411y7sZ) - 2023-09-13 11:55:00 107 | - [访问器成员【渡一教育】](https://www.bilibili.com/BV1RP411h7vF) - 2023-09-12 11:55:00 108 | - [实例成员和静态成员【渡一教育】](https://www.bilibili.com/BV1Sh4y1m7fm) - 2023-09-11 11:55:00 109 | - [如何用面向对象开发程序【渡一教育】](https://www.bilibili.com/BV1d94y1x7gi) - 2023-09-09 11:55:00 110 | - [属性和方法【渡一教育】](https://www.bilibili.com/BV1xr4y1X7zg) - 2023-09-08 11:55:00 111 | - [类和对象【渡一教育】](https://www.bilibili.com/BV1tw411Q7H2) - 2023-09-07 11:55:00 112 | - [面向对象、面向函数、面向过程【渡一教育】](https://www.bilibili.com/BV1zp4y1P7nt) - 2023-09-06 11:55:00 113 | - [从canvas到编程本质【渡一教育】](https://www.bilibili.com/BV1N8411z7M2) - 2023-09-05 11:55:00 114 | - [在canvas中绘制和拖动【渡一教育】](https://www.bilibili.com/BV1Kz4y1M7Jr) - 2023-09-04 11:55:00 115 | - [用canvas玩转图片【渡一教育】](https://www.bilibili.com/BV1up4y1n7qi) - 2023-09-02 11:55:00 116 | - [文字也能很酷炫【渡一教育】](https://www.bilibili.com/BV1uN411B72M) - 2023-09-01 11:55:00 117 | - [canvas动画【渡一教育】](https://www.bilibili.com/BV1c14y117As) - 2023-08-31 11:55:00 118 | - [解决canvas清晰度的问题【渡一教育】](https://www.bilibili.com/BV1Wu4y1i7vA) - 2023-08-30 11:55:00 119 | - [使用canvas完成基本绘图【渡一教育】](https://www.bilibili.com/BV1Kh4y1U7fe) - 2023-08-29 11:55:00 120 | - [canvas的意义【渡一教育】](https://www.bilibili.com/BV1ZN4y1d7EU) - 2023-08-28 11:55:00 121 | - [文件上传总结【渡一教育】](https://www.bilibili.com/BV1aF411Z7S7) - 2023-08-26 11:55:00 122 | - [大文件分片上传【渡一教育】](https://www.bilibili.com/BV1q8411R7Cb) - 2023-08-25 11:55:00 123 | - [裁剪上传原理【渡一教育】](https://www.bilibili.com/BV1pF411Z7Jr) - 2023-08-24 11:55:00 124 | - [实现阿里云的文件上传【渡一教育】](https://www.bilibili.com/BV1G84y1f7k5) - 2023-08-23 11:55:00 125 | - [二进制格式的文件上传【渡一教育】](https://www.bilibili.com/BV1GN411z7t3) - 2023-08-22 11:55:00 126 | - [base64格式的文件上传【渡一教育】](https://www.bilibili.com/BV19P411W7iP) - 2023-08-21 11:55:00 127 | - [文件上传方式之拖拽上传【渡一教育】](https://www.bilibili.com/BV1Qh4y1r7Zp) - 2023-08-19 11:55:00 128 | - [学会如何使用Ajax上传文件数据,详细的顺序都在这!【渡一教育】](https://www.bilibili.com/BV1rV4y1e7Vt) - 2023-08-18 11:55:00 129 | - [上传文件的界面交互这么丰富,你还总是没有思路?【渡一教育】](https://www.bilibili.com/BV1Hu4y1B76c) - 2023-08-17 11:55:00 130 | - [如何调试文件上传接口,做好第一步很重要!【渡一教育】](https://www.bilibili.com/BV1uP411x7jW) - 2023-08-16 11:55:00 131 | - [你都是怎么做文件上传的?你的探索方式正确吗?【渡一教育】](https://www.bilibili.com/BV1kX4y1L78Z) - 2023-08-15 11:55:00 132 | - [动态规划中的典型01背包问题你清楚嘛?搞懂它再刷题!【渡一教育】](https://www.bilibili.com/BV1Gh4y1k7RK) - 2023-08-14 11:55:00 133 | - [如何优化空间复杂度,来听听袁老师如何“降维打击”!【渡一教育】](https://www.bilibili.com/BV1xV41157wK) - 2023-08-12 11:55:00 134 | - [动态规划问题中常要求出最优解,来找找其中的一般思路!【渡一教育】](https://www.bilibili.com/BV1wX4y177JB) - 2023-08-11 11:55:00 135 | - [遇到复杂的动态规划问题,要注意保证解的无后效性!【渡一教育】](https://www.bilibili.com/BV16M4y1H7kv) - 2023-08-10 11:55:00 136 | - [通过这道动态规划题,锻炼一下把思维转换成代码的能力!【渡一教育】](https://www.bilibili.com/BV1J8411d77F) - 2023-08-09 11:55:00 137 | - [动态规划问题如何解决?先来练习一下状态转移方程吧!【渡一教育】](https://www.bilibili.com/BV11V41157Ce) - 2023-08-08 11:55:00 138 | - [前端必修掌握的动态规划算法之入门【渡一教育】](https://www.bilibili.com/BV1oX4y1j71r) - 2023-08-07 11:55:00 139 | - [VUE怎么学?没有方向怎么办?入门或者提升都在这呢!【渡一教育】](https://www.bilibili.com/BV1Lc411F7c5) - 2023-08-05 11:55:00 140 | - [用v-model实现双向绑定,让代码写起来更加方便!【渡一教育】](https://www.bilibili.com/BV1Gm4y1j7FG) - 2023-08-04 11:55:00 141 | - [带你从开发中,彻底搞清楚组件事件底层的处理过程!【渡一教育】](https://www.bilibili.com/BV1jX4y1E7j1) - 2023-08-03 11:55:00 142 | - [开发组件中千万不要让你的图方便,成为后期维护的难题!【渡一教育】](https://www.bilibili.com/BV1Gx4y1R7zF) - 2023-08-02 11:55:00 143 | - [彻底理解组件属性,才能解决这其中的问题!【渡一教育】](https://www.bilibili.com/BV1CN411a7CC) - 2023-08-01 11:55:00 144 | - [以星级评分组件为例,总结一下vue组件的开发过程!【渡一教育】](https://www.bilibili.com/BV1Qh4y1y7XF) - 2023-07-31 11:55:00 145 | - [几分钟时间彻底搞清楚,在VUE里使用组件样式的几种常见做法!【渡一教育】](https://www.bilibili.com/BV1ok4y1V7Yj) - 2023-07-29 11:55:00 146 | - [该如何给组件命名才方便使用,并且不易出错呢?其中又有什么规范?【渡一教育】](https://www.bilibili.com/BV12X4y1Y7xc) - 2023-07-28 11:55:00 147 | - [组件的全局注册和局部注册,到底有啥区别?【渡一教育】](https://www.bilibili.com/BV1Rh4y157Ya) - 2023-07-27 11:55:00 148 | - [搬好小板凳,来听听模板到底是什么?为何这样开发VUE效率更高?【渡一教育】](https://www.bilibili.com/BV1P8411S7NF) - 2023-07-26 11:55:00 149 | - [了解前端工程化,利用vue-cli搭建项目你清楚了嘛?【渡一教育】](https://www.bilibili.com/BV1Q94y1i7YV) - 2023-07-25 11:55:00 150 | - [学会使用模块化分离组件代码,使你的代码结构更清晰!【渡一教育】](https://www.bilibili.com/BV1oh4y157ib) - 2023-07-24 11:55:00 151 | - [实战来啦!VUE组件该如何编写及使用呢?【渡一教育】](https://www.bilibili.com/BV1EM4y147on) - 2023-07-22 11:55:00 152 | - [带你彻底清楚VUE组件的意义,如果没有它我们会面临什么呢?【渡一教育】](https://www.bilibili.com/BV1xX4y1Y779) - 2023-07-21 11:55:00 153 | - [前端工程化怎么学?先找准方向捋清路线才不会错【渡一教育】](https://www.bilibili.com/BV1X94y1q7Xi) - 2023-07-20 11:55:00 154 | - [我们为什么需要webpack?它的能力是什么呢?【渡一教育】](https://www.bilibili.com/BV1Mk4y1N7N9) - 2023-07-19 11:55:00 155 | - [学习前端时你绕不开的构建工具,带你一探究竟!【渡一教育】](https://www.bilibili.com/BV1kj411Z7Cs) - 2023-07-18 11:55:00 156 | - [带你了解CSS的方案PostCSS有多好用,我不允许你不知道!【渡一教育】](https://www.bilibili.com/BV16V411T7k9) - 2023-07-17 11:55:00 157 | - [学会CSS预编译器,写代码变得优雅起来!【渡一教育】](https://www.bilibili.com/BV1ZV411K79b) - 2023-07-15 11:55:00 158 | - [巧妙运用Babel工具,代码兼容问题再也不用愁!【渡一教育】](https://www.bilibili.com/BV12s4y167mT) - 2023-07-14 11:55:00 159 | - [ESlint,JS代码语法和风格检查必用利器【渡一教育】](https://www.bilibili.com/BV1RF411R7sR) - 2023-07-13 11:55:00 160 | - [前端模块化和包管理器到底能解决哪些问题?【渡一教育】](https://www.bilibili.com/BV1aF411X7Es) - 2023-07-12 11:55:00 161 | - [学了工程化,解决前端学习90%的疑问!【渡一教育】](https://www.bilibili.com/BV1f8411S78K) - 2023-07-11 19:55:00 162 | - [Lodash实战练习之手写memoize函数【渡一教育】](https://www.bilibili.com/BV1CV4y187Cr) - 2023-07-11 11:55:00 163 | - [Lodash实战练习之手写get函数【渡一教育】](https://www.bilibili.com/BV1Wk4y1P7Lh) - 2023-07-10 19:55:00 164 | - [Lodash实战练习之手写countBy函数【渡一教育】](https://www.bilibili.com/BV1JN411m7Dj) - 2023-07-10 11:55:00 165 | - [通过Lodash提升代码水平之手写chunk函数【渡一教育】](https://www.bilibili.com/BV1Uu411L7rW) - 2023-07-09 19:55:00 166 | - [两分钟带你梳理前端网络学习模块,看看你学到哪里了~【渡一教育】](https://www.bilibili.com/BV1nz4y1E7ZR) - 2023-07-09 11:55:00 167 | - [前端常见跨域问题及解决方案【渡一教育】](https://www.bilibili.com/BV1ZX4y1v7mu) - 2023-07-08 19:55:00 168 | - [跨域问题解决方案之代理【渡一教育】](https://www.bilibili.com/BV1Ng4y1P7KH) - 2023-07-08 11:55:00 169 | - [JSONP的原理是什么?它是如何实现跨域的?【渡一教育】](https://www.bilibili.com/BV1XX4y1Y7Eh) - 2023-07-07 19:55:00 170 | - [掌握CORS跨域请求,看这个视频就够了【渡一教育】](https://www.bilibili.com/BV1fP411e71o) - 2023-07-07 11:55:00 171 | - [你可以轻松搞定跨域问题吗?先从浏览器的同源策略入手,跟住我!【渡一教育】](https://www.bilibili.com/BV1wu41187ut) - 2023-07-06 19:55:00 172 | - [做几道ES6函数的常见面试题,看看你掌握的如何?【渡一教育】](https://www.bilibili.com/BV12W4y1Z7tL) - 2023-07-06 11:55:00 173 | - [来看几个ES6函数常见的应用实例,具体场景具体分析!【渡一教育】](https://www.bilibili.com/BV1Sh411A71T) - 2023-07-05 19:55:00 174 | - [带大家实战ES6函数的几个典型场景【渡一教育】](https://www.bilibili.com/BV1Wj411U7LT) - 2023-07-05 11:55:00 175 | - [ES6箭头函数,你会正确使用吗【渡一教育】](https://www.bilibili.com/BV1o14y1d7yf) - 2023-07-04 11:55:00 176 | - [学会灵活运用ES6的展开运算符,同样的需求实现起来更轻松哦【渡一教育】](https://www.bilibili.com/BV1zg4y1A7ft) - 2023-07-03 11:55:00 177 | - [从函数层面彻底理解什么是剩余参数,活学活用才是真的掌握【渡一教育】](https://www.bilibili.com/BV1UN411D7S1) - 2023-07-02 11:55:00 178 | - [带你学透参数默认值,扎实学好每一步才是真的技术【渡一教育】](https://www.bilibili.com/BV1qs4y1r7Xj) - 2023-07-01 11:55:00 179 | - [通过三个应用场景,带大家彻底理解css属性值initial、unset、revert【渡一教育】](https://www.bilibili.com/BV1zX4y1q7dB) - 2023-06-30 19:55:00 180 | - [在css的属性计算过程中,遇到不继承的问题该如何解决【渡一教育】](https://www.bilibili.com/BV1wz4y1n7yu) - 2023-06-30 11:55:00 181 | - [带你彻底弄清楚css的继承规则,扎实学好每一步哦【渡一教育】](https://www.bilibili.com/BV1ag4y1N7Pd) - 2023-06-29 19:55:00 182 | - [带你详细剖析css的层叠规则,夯实基础才能运用自如【渡一教育】](https://www.bilibili.com/BV1vs4y1F7hg) - 2023-06-29 11:55:00 183 | - [css必会知识之属性计算的总流程,赶快码住学起来【渡一教育】](https://www.bilibili.com/BV13X4y1q7T8) - 2023-06-28 19:55:00 184 | - [一起来练几道类型转换和运算的常见面试题,实践出真知【渡一教育】](https://www.bilibili.com/BV1Cu41187t1) - 2023-06-28 11:55:00 185 | - [纯干货!这些代码优化技巧,你都知道吗?【渡一教育】](https://www.bilibili.com/BV14V4y1y7W8) - 2023-06-27 19:55:00 186 | - [关于js表达式返回结果的总结【渡一教育】](https://www.bilibili.com/BV1aV411u78b) - 2023-06-27 11:55:00 187 | - [js中的运算规则到底是什么,彻底理解数据是如何运算的【渡一教育】](https://www.bilibili.com/BV1Va4y1c7NZ) - 2023-06-26 20:55:00 188 | - [笔面试中必不可少的运算符考察,首先,类型是如何相互转换的【渡一教育】](https://www.bilibili.com/BV1Dh411K7dQ) - 2023-06-26 19:55:00 189 | -------------------------------------------------------------------------------- /docs/bilibili/textbook_review_base.md: -------------------------------------------------------------------------------- 1 | # 渡一教科书复习基地 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://space.bilibili.com/3546702577404004/video](https://space.bilibili.com/3546702577404004/video) 8 | 9 |
10 | 11 | - [为什么需要对知识库建立索引?索引如何建立?【渡一教育】](https://www.bilibili.com/BV11Pq8BQEkP) - 2025-12-19 23:00:00 12 | - [RAG为什么是重要的AI技术?什么是RAG?如何实现RAG?【渡一教育】](https://www.bilibili.com/BV1KPq8BXEHP) - 2025-12-17 23:00:00 13 | - [实现样式隔离、自定义内容、自定义事件【渡一教育】](https://www.bilibili.com/BV12B26BrEK1) - 2025-12-15 23:00:00 14 | - [利用模板字符串实现精准渲染更新,你敢信?【渡一教育】](https://www.bilibili.com/BV1EW2vB2En9) - 2025-12-12 23:00:00 15 | - [组件的终极方案Web Components,让你的组件变成HTML标签【渡一教育】](https://www.bilibili.com/BV1EW2vB2EnZ) - 2025-12-10 23:00:00 16 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何对子包进行打包、依赖、测试、发布【渡一教育】](https://www.bilibili.com/BV14T2vBtEMi) - 2025-12-08 23:00:00 17 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何统一工程规范【渡一教育】](https://www.bilibili.com/BV1xW2CBUEYU) - 2025-12-08 15:53:38 18 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何统一工程规范【渡一教育】](https://www.bilibili.com/BV1tZSjBHEyc) - 2025-12-05 23:00:00 19 | - [前端终极布局方案——网格布局,如何将子项放入网格【渡一教育】](https://www.bilibili.com/BV14fSjBDERE) - 2025-12-03 23:00:00 20 | - [前端终极布局方案——网格布局,如何编排网格【渡一教育】](https://www.bilibili.com/BV1tfSjBDEgm) - 2025-12-01 23:00:00 21 | - [实现Promise最复杂的then函数【渡一教育】](https://www.bilibili.com/BV1BHyuBNEjE) - 2025-11-28 23:00:00 22 | - [Promise状态转换中你不知道的细节【渡一教育】](https://www.bilibili.com/BV12PyuB2E7d) - 2025-11-26 23:00:00 23 | - [关于前端职业的未来-真正的问题【渡一教育】](https://www.bilibili.com/BV18ByuBWEff) - 2025-11-24 23:00:00 24 | - [关于前端职业的未来-新兴的机会【渡一教育】](https://www.bilibili.com/BV1SKCTBCE2u) - 2025-11-21 23:00:00 25 | - [关于前端职业的未来-职业的选择【渡一教育】](https://www.bilibili.com/BV1UMCTBVEs1) - 2025-11-19 23:00:00 26 | - [关于前端职业的未来-市场的噪音【渡一教育】](https://www.bilibili.com/BV1mMCTBGEZD) - 2025-11-17 23:00:00 27 | - [火爆全网的MCP全解读,MCP项目助你就业涨薪【渡一教育】](https://www.bilibili.com/BV1yp2TBCEJ8) - 2025-11-14 23:00:00 28 | - [火爆全网的MCP全解读,从开发到应用透彻理解【渡一教育】](https://www.bilibili.com/BV1Wp2TBCEon) - 2025-11-12 22:00:00 29 | - [火爆全网的MCP全解读,前置知识先知道【渡一教育】](https://www.bilibili.com/BV1Cs2TBGECL) - 2025-11-07 23:00:00 30 | - [CodePen上的神奇效果【渡一教育】](https://www.bilibili.com/BV15v16BDE3V) - 2025-11-05 23:00:00 31 | - [TS中的类型验算【渡一教育】](https://www.bilibili.com/BV1Hy1aBkEyn) - 2025-11-03 23:00:00 32 | - [CSS预编译器【渡一教育】](https://www.bilibili.com/BV15D1NB9EJp) - 2025-10-31 22:00:00 33 | - [现代Web API【渡一教育】](https://www.bilibili.com/BV1F3yzBsEJV) - 2025-10-29 23:00:00 34 | - [现代CSS样式【渡一教育】](https://www.bilibili.com/BV18FsJzHEdE) - 2025-10-27 23:00:00 35 | - [高阶函数【渡一教育】](https://www.bilibili.com/BV1S6s7zLEcw) - 2025-10-24 23:00:00 36 | - [JS中的类【渡一教育】](https://www.bilibili.com/BV1nxsgzkETA) - 2025-10-22 23:00:00 37 | - [canvas入门【渡一教育】](https://www.bilibili.com/BV1PSWCzGEBr) - 2025-10-20 23:00:00 38 | - [文件上传精讲【渡一教育】](https://www.bilibili.com/BV1bt4czTEWo) - 2025-10-17 23:00:00 39 | - [前端算法动态规划【渡一教育】](https://www.bilibili.com/BV1tb4cziEq8) - 2025-10-15 23:00:00 40 | - [vue组件入门【渡一教育】](https://www.bilibili.com/BV1tb4cziEQf) - 2025-10-13 23:00:00 41 | - [前端工程化-宏观篇【渡一教育】](https://www.bilibili.com/BV14ynizDECX) - 2025-10-10 23:00:00 42 | - [通过lodash提升代码水平【渡一教育】](https://www.bilibili.com/BV1mynizDENa) - 2025-10-08 23:00:00 43 | - [同源策略和跨域处理【渡一教育】](https://www.bilibili.com/BV1CXnizLEv2) - 2025-10-06 23:00:00 44 | - [es6中的函数【渡一教育】](https://www.bilibili.com/BV1xGHczSEGQ) - 2025-10-03 23:00:00 45 | - [css的属性计算过程【渡一教育】](https://www.bilibili.com/BV14uHczQEeE) - 2025-10-01 23:00:00 46 | - [js中的类型转换和运算规则【渡一教育】](https://www.bilibili.com/BV1KuHczQEQT) - 2025-09-29 23:00:00 47 | - [水波进度样式【渡一教育】](https://www.bilibili.com/BV11WpszpEyG) - 2025-09-25 12:00:00 48 | - [3D Hover Effect【渡一教育】](https://www.bilibili.com/BV11WpszpE1S) - 2025-09-25 09:00:00 49 | - [mac docker效果【渡一教育】](https://www.bilibili.com/BV12WpszpEFR) - 2025-09-24 12:00:00 50 | - [多行文本擦除效果【渡一教育】](https://www.bilibili.com/BV1mEpszdEoC) - 2025-09-24 09:00:00 51 | - [元素倒影【渡一教育】](https://www.bilibili.com/BV1mEpszdE37) - 2025-09-23 12:00:00 52 | - [故障波纹动效【渡一教育】](https://www.bilibili.com/BV1mEpszdEHX) - 2025-09-23 09:00:00 53 | - [色彩的差值混合【渡一教育】](https://www.bilibili.com/BV1UEpszdEMz) - 2025-09-22 12:00:00 54 | - [六边形布局【渡一教育】](https://www.bilibili.com/BV1mEpszdER5) - 2025-09-22 09:00:00 55 | - [文字视差背景【渡一教育】](https://www.bilibili.com/BV14xYPzoEzM) - 2025-09-20 12:00:00 56 | - [锯齿菱形边缘【渡一教育】](https://www.bilibili.com/BV1txYPzoEW2) - 2025-09-20 09:00:00 57 | - [交融动画效果【渡一教育】](https://www.bilibili.com/BV1GfYPzNETa) - 2025-09-19 12:00:00 58 | - [图片边框【渡一教育】](https://www.bilibili.com/BV1GfYPzKE89) - 2025-09-19 09:00:00 59 | - [视差滚动【渡一教育】](https://www.bilibili.com/BV13fYPzNEqC) - 2025-09-18 12:00:00 60 | - [改变鼠标样式和指向【渡一教育】](https://www.bilibili.com/BV1hFYNzeE88) - 2025-09-18 09:00:00 61 | - [鼠标移动的高亮边框效果【渡一教育】](https://www.bilibili.com/BV12Hpsz9EA2) - 2025-09-17 12:25:00 62 | - [交错排列的文字【渡一教育】](https://www.bilibili.com/BV13FYNzeEHb) - 2025-09-17 06:00:00 63 | - [丝滑的标题动画【渡一教育】](https://www.bilibili.com/BV1hFYNzeEED) - 2025-09-16 12:00:00 64 | - [3D渐变的轮播图【渡一教育】](https://www.bilibili.com/BV1VdYPzTEg6) - 2025-09-16 06:00:00 65 | - [漂亮的文字阴影【渡一教育】](https://www.bilibili.com/BV19dYPzTEMw) - 2025-09-15 12:00:00 66 | - [实现一棵随机树【渡一教育】](https://www.bilibili.com/BV1VdYPzTEPV) - 2025-09-15 09:00:00 67 | - [模特换装效果【渡一教育】](https://www.bilibili.com/BV1yxaUzrEPw) - 2025-09-13 12:00:00 68 | - [SVG的描边动画【渡一教育】](https://www.bilibili.com/BV1AtaUz3EN3) - 2025-09-13 09:00:00 69 | - [前端需要终生学习吗?【渡一教育】](https://www.bilibili.com/BV1ktaUzgEyy) - 2025-09-12 12:00:00 70 | - [不可变类型【渡一教育】](https://www.bilibili.com/BV1CtaUzgEPq) - 2025-09-12 09:00:00 71 | - [前置的不定量参数【渡一教育】](https://www.bilibili.com/BV1ktaUzgEJk) - 2025-09-11 12:00:00 72 | - [联合类型转交叉类型【渡一教育】](https://www.bilibili.com/BV1ypaUzCEaF) - 2025-09-11 09:00:00 73 | - [TS中的协变与逆变【渡一教育】](https://www.bilibili.com/BV1NpaUzyEsp) - 2025-09-10 12:00:00 74 | - [联合类型和交叉类型【渡一教育】](https://www.bilibili.com/BV1NpaUzyExp) - 2025-09-10 09:00:00 75 | - [对防抖函数进行类型标注【渡一教育】](https://www.bilibili.com/BV1ypaUzCEzG) - 2025-09-09 12:00:00 76 | - [TS中的递归类型推断【渡一教育】](https://www.bilibili.com/BV1ysaUzGE8J) - 2025-09-09 09:00:00 77 | - [使用infer封装通用类型工具【渡一教育】](https://www.bilibili.com/BV1ysaUzGEPT) - 2025-09-08 12:00:00 78 | - [从字段到函数的推导【渡一教育】](https://www.bilibili.com/BV1ysaUzGEYu) - 2025-09-08 09:00:00 79 | - [实现GetOptionals【渡一教育】](https://www.bilibili.com/BV1pee9zbEAb) - 2025-09-06 12:00:00 80 | - [实现Optional【渡一教育】](https://www.bilibili.com/BV1pee9zbESB) - 2025-09-06 09:00:00 81 | - [TS到底难在哪【渡一教育】](https://www.bilibili.com/BV1Aee9zbEpq) - 2025-09-05 12:00:00 82 | - [知识的深度和广度【渡一教育】](https://www.bilibili.com/BV1wee9zbEY9) - 2025-09-05 09:00:00 83 | - [SASS中的扩展和占位符【渡一教育】](https://www.bilibili.com/BV1wee9zbEqZ) - 2025-09-04 12:00:00 84 | - [SASS中的模块化开发【渡一教育】](https://www.bilibili.com/BV137e9zgEEn) - 2025-09-04 09:00:00 85 | - [SASS中的颜色函数【渡一教育】](https://www.bilibili.com/BV137e9z3EzF) - 2025-09-03 12:00:00 86 | - [SASS中的数学函数【渡一教育】](https://www.bilibili.com/BV1g7e9zgEaH) - 2025-09-03 09:00:00 87 | - [使用SASS实现主题切换【渡一教育】](https://www.bilibili.com/BV18Ee9zzEdn) - 2025-09-02 12:00:00 88 | - [用Sass简化媒介查询【渡一教育】](https://www.bilibili.com/BV1uEe9zzEk1) - 2025-09-02 09:00:00 89 | - [Sass实现文字替换【渡一教育】](https://www.bilibili.com/BV1gEe9zzEGu) - 2025-09-01 12:00:00 90 | - [Sass实现星空效果【渡一教育】](https://www.bilibili.com/BV1G5e9zGE7i) - 2025-09-01 09:00:00 91 | - [什么是CSS预编译器【渡一教育】](https://www.bilibili.com/BV1DTYXzPEB8) - 2025-08-30 12:00:00 92 | - [Web API总结【渡一教育】](https://www.bilibili.com/BV19cYXzMEN9) - 2025-08-30 09:00:00 93 | - [Clipboard API【渡一教育】](https://www.bilibili.com/BV1ddYQzkECp) - 2025-08-29 12:00:00 94 | - [自动播放策略【渡一教育】](https://www.bilibili.com/BV1LdYQzkEDr) - 2025-08-29 06:00:00 95 | - [声音的分析和处理【渡一教育】](https://www.bilibili.com/BV1LdYQzkEkk) - 2025-08-28 12:00:00 96 | - [拖拽API【渡一教育】](https://www.bilibili.com/BV1LZYQz3EL6) - 2025-08-28 09:00:00 97 | - [网络状态监控【渡一教育】](https://www.bilibili.com/BV1RZYQzgEnm) - 2025-08-27 12:00:00 98 | - [Web Animation API【渡一教育】](https://www.bilibili.com/BV1RZYQzgEfj) - 2025-08-27 09:00:00 99 | - [Page Visibility【渡一教育】](https://www.bilibili.com/BV15ZYQz3EQp) - 2025-08-26 12:00:00 100 | - [Intersection Observer【渡一教育】](https://www.bilibili.com/BV1DNYXzvERF) - 2025-08-26 09:00:00 101 | - [什么是Web API【渡一教育】](https://www.bilibili.com/BV1QNYXzvEVS) - 2025-08-25 12:00:00 102 | - [现代CSS样式总结【渡一教育】](https://www.bilibili.com/BV1QNYXzvEKc) - 2025-08-25 09:00:00 103 | - [flex+margin【渡一教育】](https://www.bilibili.com/BV11Fb6z2ECN) - 2025-08-23 12:00:00 104 | - [你不知道的CSS选择器【渡一教育】](https://www.bilibili.com/BV1xFb6z2ERx) - 2025-08-23 09:00:00 105 | - [Houdini【渡一教育】](https://www.bilibili.com/BV1KFb6z2E1C) - 2025-08-22 12:00:00 106 | - [时间函数【渡一教育】](https://www.bilibili.com/BV1KFb6z2E4y) - 2025-08-22 09:00:00 107 | - [常用滤镜效果【渡一教育】](https://www.bilibili.com/BV1xFb6z2EUs) - 2025-08-21 12:00:00 108 | - [黏性定位【渡一教育】](https://www.bilibili.com/BV1NFb6z2EmM) - 2025-08-21 09:00:00 109 | - [行盒的截断样式【渡一教育】](https://www.bilibili.com/BV12Fb6z2E17) - 2025-08-20 12:00:00 110 | - [CSS变量的妙用【渡一教育】](https://www.bilibili.com/BV1kMb6z3EXr) - 2025-08-20 09:00:00 111 | - [clip-path【渡一教育】](https://www.bilibili.com/BV1wub6z6EVD) - 2025-08-19 12:00:00 112 | - [知识可以很简单【渡一教育】](https://www.bilibili.com/BV1cub6z6EoA) - 2025-08-19 09:00:00 113 | - [分时函数的封装【渡一教育】](https://www.bilibili.com/BV1cub6z6Ek4) - 2025-08-18 12:00:00 114 | - [数据分组引发的思考【渡一教育】](https://www.bilibili.com/BV1ANb6zVECL) - 2025-08-18 09:00:00 115 | - [惰性函数【渡一教育】](https://www.bilibili.com/BV11btqzKEzy) - 2025-08-16 12:00:00 116 | - [参数归一化【渡一教育】](https://www.bilibili.com/BV1HitqzhEFC) - 2025-08-16 09:00:00 117 | - [高阶函数应用-并发队列【渡一教育】](https://www.bilibili.com/BV1HitqzhENH) - 2025-08-15 12:00:00 118 | - [高阶函数应用-函数防抖【渡一教育】](https://www.bilibili.com/BV16BtqzFErP) - 2025-08-15 09:00:00 119 | - [高阶函数的应用-封装动画函数【渡一教育】](https://www.bilibili.com/BV1nBtqzFEC2) - 2025-08-14 12:00:00 120 | - [什么是高阶函数【渡一教育】](https://www.bilibili.com/BV1nBtqzFE9X) - 2025-08-14 09:00:00 121 | - [面相对象总结【渡一教育】](https://www.bilibili.com/BV1nBtqzFEQk) - 2025-08-13 12:00:00 122 | - [如何对class降级【渡一教育】](https://www.bilibili.com/BV1WYtqzYEwy) - 2025-08-13 06:00:00 123 | - [访问器成员【渡一教育】](https://www.bilibili.com/BV1pYtqzYE7Y) - 2025-08-12 12:00:00 124 | - [实例成员和静态成员【渡一教育】](https://www.bilibili.com/BV1CYtqzYEjR) - 2025-08-12 09:00:00 125 | - [如何用面向对象开发程序【渡一教育】](https://www.bilibili.com/BV1AYtqzeE4v) - 2025-08-11 12:00:00 126 | - [属性和方法【渡一教育】](https://www.bilibili.com/BV1pvtqzwEJC) - 2025-08-11 09:00:00 127 | - [类和对象【渡一教育】](https://www.bilibili.com/BV1ec81z5EQu) - 2025-08-09 12:00:00 128 | - [面向对象、面向函数、面向过程【渡一教育】](https://www.bilibili.com/BV1Rc81z5EPT) - 2025-08-09 06:00:00 129 | - [从canvas到编程本质【渡一教育】](https://www.bilibili.com/BV1vc81z5EVW) - 2025-08-08 12:00:00 130 | - [在canvas中绘制和拖动【渡一教育】](https://www.bilibili.com/BV1ew81zCEgW) - 2025-08-08 06:00:00 131 | - [用canvas玩转图片【渡一教育】](https://www.bilibili.com/BV19w81zCE4P) - 2025-08-07 12:00:00 132 | - [文字也能很酷炫【渡一教育】](https://www.bilibili.com/BV1ew81zCEbq) - 2025-08-07 06:00:00 133 | - [canvas动画【渡一教育】](https://www.bilibili.com/BV19w81zCErV) - 2025-08-06 12:00:00 134 | - [解决canvas清晰度的问题【渡一教育】](https://www.bilibili.com/BV1iZ8yzjEBc) - 2025-08-06 06:00:00 135 | - [使用canvas完成基本绘图【渡一教育】](https://www.bilibili.com/BV1iZ8yzjEtk) - 2025-08-05 12:00:00 136 | - [canvas的意义【渡一教育】](https://www.bilibili.com/BV1iZ8yzjEe5) - 2025-08-05 06:00:00 137 | - [文件上传总结【渡一教育】](https://www.bilibili.com/BV1df8yz1EPV) - 2025-08-04 12:00:00 138 | - [大文件分片上传【渡一教育】](https://www.bilibili.com/BV1vf8yz1ERa) - 2025-08-04 09:00:00 139 | - [裁剪上传原理【渡一教育】](https://www.bilibili.com/BV1bT8uzeEE2) - 2025-08-02 12:00:00 140 | - [实现阿里云的文件上传【渡一教育】](https://www.bilibili.com/BV1uT8uzvEP8) - 2025-08-02 09:00:00 141 | - [二进制格式的文件上传【渡一教育】](https://www.bilibili.com/BV1Yz8uzkE6Q) - 2025-08-01 12:00:00 142 | - [base64格式的文件上传【渡一教育】](https://www.bilibili.com/BV1Gz8uzkE9R) - 2025-08-01 09:00:00 143 | - [拖拽上传【渡一教育】](https://www.bilibili.com/BV1Vz8uzkEV4) - 2025-07-31 12:00:00 144 | - [使用Ajax上传文件数据【渡一教育】](https://www.bilibili.com/BV1ez8uzkEKD) - 2025-07-31 09:00:00 145 | - [上传界面交互【渡一教育】](https://www.bilibili.com/BV1Gr8uz3EgK) - 2025-07-30 12:00:00 146 | - [调试上传接口【渡一教育】](https://www.bilibili.com/BV1eB8uzVEih) - 2025-07-30 09:00:00 147 | - [文件上传的技术纲要【渡一教育】](https://www.bilibili.com/BV1g18uzBEEX) - 2025-07-29 12:00:00 148 | - [综合练习-01背包问题【渡一教育】](https://www.bilibili.com/BV1g18uzBEuV) - 2025-07-29 09:00:00 149 | - [优化空间复杂度【渡一教育】](https://www.bilibili.com/BV1um8uzTE2H) - 2025-07-28 12:00:00 150 | - [最优解问题的典型思路【渡一教育】](https://www.bilibili.com/BV1um8uzTETn) - 2025-07-28 09:00:00 151 | - [无后效性【渡一教育】](https://www.bilibili.com/BV1zRutzQEVc) - 2025-07-26 12:00:00 152 | - [动态规划代码实现【渡一教育】](https://www.bilibili.com/BV1ERutzQErt) - 2025-07-26 09:00:00 153 | - [状态转移方程练习【渡一教育】](https://www.bilibili.com/BV1rDutzsELH) - 2025-07-25 12:00:00 154 | - [动态规划入门【渡一教育】](https://www.bilibili.com/BV1cDutzxE1o) - 2025-07-25 09:00:00 155 | - [VUE的学习路线【渡一教育】](https://www.bilibili.com/BV1rDutzsEaJ) - 2025-07-24 12:00:00 156 | - [用v-model实现双向绑定【渡一教育】](https://www.bilibili.com/BV1nDutzsEr8) - 2025-07-24 09:00:00 157 | - [组件事件【渡一教育】](https://www.bilibili.com/BV1rQutz9EA5) - 2025-07-23 12:00:00 158 | - [单向数据流【渡一教育】](https://www.bilibili.com/BV1tvutzvE18) - 2025-07-23 09:00:00 159 | - [组件属性【渡一教育】](https://www.bilibili.com/BV1tvutzvEDp) - 2025-07-22 12:00:00 160 | - [组件的基本配置【渡一教育】](https://www.bilibili.com/BV1bvutzvEti) - 2025-07-22 09:00:00 161 | - [编写组件样式的正确姿势【渡一教育】](https://www.bilibili.com/BV1mqutzPE7L) - 2025-07-21 12:00:00 162 | - [如何给组件命名【渡一教育】](https://www.bilibili.com/BV1sCutzFE4t) - 2025-07-21 09:00:00 163 | - [全局导入和局部导入的区别【渡一教育】](https://www.bilibili.com/BV1dLGcz5ECU) - 2025-07-19 12:00:00 164 | - [模板到底是什么【渡一教育】](https://www.bilibili.com/BV1jLGczLEai) - 2025-07-19 09:00:00 165 | - [vue+工程化【渡一教育】](https://www.bilibili.com/BV1oLGcz5E5b) - 2025-07-18 12:00:00 166 | - [使用模块化分离组件代码【渡一教育】](https://www.bilibili.com/BV1BgGczUEBo) - 2025-07-18 09:00:00 167 | - [编写第一个组件【渡一教育】](https://www.bilibili.com/BV1EgGczUEQJ) - 2025-07-17 12:00:00 168 | - [组件的意义【渡一教育】](https://www.bilibili.com/BV1fgGczmEge) - 2025-07-17 09:00:00 169 | - [前端工程化学习路线【渡一教育】](https://www.bilibili.com/BV1oGGczjEZ2) - 2025-07-16 12:00:00 170 | - [webpack的核心能力【渡一教育】](https://www.bilibili.com/BV1EGGcz7E4i) - 2025-07-16 09:00:00 171 | - [构建工具【渡一教育】](https://www.bilibili.com/BV1RJGczrETK) - 2025-07-15 12:00:00 172 | - [CSS终极方案PostCSS【渡一教育】](https://www.bilibili.com/BV1RJGczrEnV) - 2025-07-15 09:00:00 173 | - [CSS预编译器【渡一教育】](https://www.bilibili.com/BV19JGczrEW8) - 2025-07-14 12:00:00 174 | - [兼容性处理【渡一教育】](https://www.bilibili.com/BV15JGczkEXp) - 2025-07-14 09:00:00 175 | - [代码风格【渡一教育】](https://www.bilibili.com/BV1XHGczgE9K) - 2025-07-12 12:00:00 176 | - [模块化和包管理器【渡一教育】](https://www.bilibili.com/BV19HGczgExG) - 2025-07-12 09:00:00 177 | - [工程化意味着什么【渡一教育】](https://www.bilibili.com/BV1djGczCEww) - 2025-07-11 12:00:00 178 | - [手写memoize函数【渡一教育】](https://www.bilibili.com/BV1djGczCEPe) - 2025-07-11 09:00:00 179 | - [手写get函数【渡一教育】](https://www.bilibili.com/BV1dEGczGEKA) - 2025-07-10 12:00:00 180 | - [手写countBy函数【渡一教育】](https://www.bilibili.com/BV1BQGczSEt5) - 2025-07-10 09:00:00 181 | - [手写chunk函数【渡一教育】](https://www.bilibili.com/BV1zDGcznEU3) - 2025-07-09 17:01:35 182 | - [网络的正确学习方式【渡一教育】](https://www.bilibili.com/BV1MNg6zBEas) - 2025-07-09 09:00:00 183 | - [跨域问题解决方案应用场景【渡一教育】](https://www.bilibili.com/BV1UNg6zqEhL) - 2025-07-08 12:00:00 184 | - [跨域问题解决方案之JSONP【渡一教育】](https://www.bilibili.com/BV1yVg6zwEQw) - 2025-07-07 12:00:00 185 | - [跨域问题解决方案之CORS【渡一教育】](https://www.bilibili.com/BV1yVg6zwEmV) - 2025-07-07 09:00:00 186 | - [浏览器的同源策略【渡一教育】](https://www.bilibili.com/BV1L5grznEGT) - 2025-07-05 12:00:00 187 | - [es6函数的常见面试题【渡一教育】](https://www.bilibili.com/BV1pZg6zwEHi) - 2025-07-05 09:00:00 188 | - [es函数的常见操作2【渡一教育】](https://www.bilibili.com/BV1pZg6zwERW) - 2025-07-04 12:00:00 189 | - [es函数的常见操作1【渡一教育】](https://www.bilibili.com/BV1xXg6zvEwH) - 2025-07-04 09:00:00 190 | - [箭头函数【渡一教育】](https://www.bilibili.com/BV1WRg6zPE1h) - 2025-07-03 12:00:00 191 | - [展开运算符【渡一教育】](https://www.bilibili.com/BV1sRg6zPEaQ) - 2025-07-03 09:00:00 192 | - [剩余参数【渡一教育】](https://www.bilibili.com/BV1nwgrzbEgn) - 2025-07-02 12:00:00 193 | - [参数默认值【渡一教育】](https://www.bilibili.com/BV16wgrzbERz) - 2025-07-02 09:00:00 194 | - [initial、unset、revert【渡一教育】](https://www.bilibili.com/BV1FBKdz4ENF) - 2025-07-01 12:00:00 195 | - [如何解决不继承的问题【渡一教育】](https://www.bilibili.com/BV1tHKdzMEYr) - 2025-07-01 09:00:00 196 | - [CSS的继承规则【渡一教育】](https://www.bilibili.com/BV1UHKdzTENH) - 2025-06-30 12:00:00 197 | - [css的继承规则【渡一教育】](https://www.bilibili.com/BV1mHKdzTEog) - 2025-06-30 09:00:00 198 | - [CSS属性计算的总流程【渡一教育】](https://www.bilibili.com/BV1TpKdzqEne) - 2025-06-28 12:00:00 199 | - [类型转换和运算的常见面试题【渡一教育】](https://www.bilibili.com/BV18EKdzgEcU) - 2025-06-28 09:00:00 200 | - [纯干货!这些代码优化技巧,你都知道吗?【渡一教育】](https://www.bilibili.com/BV1UEKdzuE1c) - 2025-06-27 12:00:00 201 | - [关于js表达式返回结果的最全总结【渡一教育】](https://www.bilibili.com/BV18EKdzgEwn) - 2025-06-27 09:00:00 202 | - [数据是如何运算的【渡一教育】](https://www.bilibili.com/BV1GjKZzJE8q) - 2025-06-26 16:47:16 203 | - [类型是如何相互转换的【渡一教育】](https://www.bilibili.com/BV1FFKZzcEf8) - 2025-06-26 16:43:41 204 | -------------------------------------------------------------------------------- /docs/douyin/textbook.md: -------------------------------------------------------------------------------- 1 | # 渡一前端教科书 2 | 3 |
4 | 5 |

更新时间:2025-12-20 21:06:35

6 | 7 | 地址 [https://www.douyin.com/user/MS4wLjABAAAAKuAIiftuTMsdnH-9MyU8VZla5fmjhdY2Gd7tHueV25vzFnKs3lqLSV7xoPE7FTxi](https://www.douyin.com/user/MS4wLjABAAAAKuAIiftuTMsdnH-9MyU8VZla5fmjhdY2Gd7tHueV25vzFnKs3lqLSV7xoPE7FTxi) 8 | 9 |
10 | 11 | - [什么是工作流引擎?对前端开发会有哪些影响?](https://www.douyin.com/video/7577705163075439881) - 2025-11-29 12:00:00 12 | - [学习工作流最重要的是理解核心概念,概念不明,寸步难行](https://www.douyin.com/video/7577586431002987818) - 2025-11-28 12:00:00 13 | - [如何通过向量相似度算法匹配知识?如何结合用户问题生成答案?](https://www.douyin.com/video/7572023828306464009) - 2025-11-14 12:00:00 14 | - [为什么需要对知识库建立索引?索引如何建立?](https://www.douyin.com/video/7571706209791659291) - 2025-11-13 12:00:00 15 | - [RAG为什么是重要的AI技术?什么是RAG?如何实现RAG?](https://www.douyin.com/video/7571767756194958619) - 2025-11-12 17:26:06 16 | - [实现样式隔离、自定义内容、自定义事件](https://www.douyin.com/video/7563946966812609838) - 2025-10-25 12:00:00 17 | - [利用模板字符串实现精准渲染更新,你敢信?](https://www.douyin.com/video/7564289150090874164) - 2025-10-24 12:00:00 18 | - [组件的终极方案Web Components,让你的组件变成HTML标签](https://www.douyin.com/video/7564288520844545332) - 2025-10-23 13:42:57 19 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何对子包进行打包、依赖、测试、发布](https://www.douyin.com/video/7554234265781783818) - 2025-09-28 12:00:00 20 | - [大中厂都在用monorepo工程管理你掌握了吗?monorepo如何统一工程规范](https://www.douyin.com/video/7554233625416355099) - 2025-09-27 12:00:00 21 | - [前端终极布局方案——网格布局,如何将子项放入网格](https://www.douyin.com/video/7549045220403449098) - 2025-09-14 12:00:00 22 | - [前端终极布局方案——网格布局,如何编排网格](https://www.douyin.com/video/7549044616083918131) - 2025-09-13 12:00:00 23 | - [实现Promise最复杂的then函数](https://www.douyin.com/video/7545378351192509735) - 2025-09-02 14:41:46 24 | - [Promise状态转换中你不知道的细节](https://www.douyin.com/video/7545036086813265215) - 2025-09-01 16:33:35 25 | - [关于前端职业的未来-真正的问题](https://www.douyin.com/video/7540131529448525098) - 2025-08-25 12:00:00 26 | - [关于前端职业的未来-职业的选择](https://www.douyin.com/video/7540203667589287222) - 2025-08-22 12:00:00 27 | - [关于前端职业的未来-岗位的变化](https://www.douyin.com/video/7540129452949359913) - 2025-08-22 12:00:00 28 | - [关于前端职业的未来-市场的噪音](https://www.douyin.com/video/7540126249687993639) - 2025-08-21 12:00:00 29 | - [火爆全网的MCP全解读,MCP项目助你就业涨薪](https://www.douyin.com/video/7540125372214480182) - 2025-08-20 12:00:00 30 | - [火爆全网的MCP全解读,从开发到应用透彻理解](https://www.douyin.com/video/7539848929630883114) - 2025-08-19 12:00:00 31 | - [火爆全网的MCP全解读,前置知识先知道](https://www.douyin.com/video/7539770382912474409) - 2025-08-18 12:00:04 32 | - [水波进度样式](https://www.douyin.com/video/7276419940410740027) - 2023-09-09 11:50:00 33 | - [3D Hover Effect](https://www.douyin.com/video/7273833137283632395) - 2023-09-02 11:50:00 34 | - [mac docker效果](https://www.douyin.com/video/7269026898640899387) - 2023-08-21 11:50:00 35 | - [多行文本擦除效果](https://www.douyin.com/video/7267904415397465355) - 2023-08-17 11:50:00 36 | - [元素倒影](https://www.douyin.com/video/7265975773255716130) - 2023-08-12 11:50:00 37 | - [故障波纹动效](https://www.douyin.com/video/7265247379597675816) - 2023-08-10 11:50:00 38 | - [色彩的差值混合](https://www.douyin.com/video/7264878248880885027) - 2023-08-09 11:50:00 39 | - [六边形布局](https://www.douyin.com/video/7261914731206708515) - 2023-08-01 11:50:01 40 | - [文字视差背景](https://www.douyin.com/video/7260860832890883340) - 2023-07-29 11:50:00 41 | - [锯齿菱形边缘](https://www.douyin.com/video/7259743432862747940) - 2023-07-26 11:50:00 42 | - [交融动画效果](https://www.douyin.com/video/7259314138785139968) - 2023-07-25 11:50:00 43 | - [图片边框](https://www.douyin.com/video/7258259783864585491) - 2023-07-22 11:50:00 44 | - [视差滚动](https://www.douyin.com/video/7257522744059858187) - 2023-07-20 11:50:00 45 | - [改变鼠标样式和指向](https://www.douyin.com/video/7257143654626757923) - 2023-07-19 11:50:00 46 | - [鼠标移动的高亮边框效果](https://www.douyin.com/video/7256400840020348212) - 2023-07-17 11:50:00 47 | - [交错排列的文字](https://www.douyin.com/video/7255660692278119715) - 2023-07-15 11:50:00 48 | - [丝滑的标题动画](https://www.douyin.com/video/7255287410345413924) - 2023-07-14 11:50:00 49 | - [3D渐变的轮播图](https://www.douyin.com/video/7254917324665294091) - 2023-07-13 11:50:00 50 | - [漂亮的文字阴影](https://www.douyin.com/video/7254540863211113728) - 2023-07-12 11:50:00 51 | - [实现一棵随机树](https://www.douyin.com/video/7254167483404340512) - 2023-07-11 11:50:00 52 | - [模特换装效果](https://www.douyin.com/video/7253807926639332646) - 2023-07-10 11:50:00 53 | - [SVG的描边动画](https://www.douyin.com/video/7253061032011124000) - 2023-07-08 11:50:00 54 | - [前端需要终生学习吗?](https://www.douyin.com/video/7252701049616715045) - 2023-07-07 11:50:00 55 | - [不可变类型](https://www.douyin.com/video/7252326647817424132) - 2023-07-06 11:50:00 56 | - [前置的不定量参数](https://www.douyin.com/video/7251940306160028988) - 2023-07-05 11:50:00 57 | - [联合类型转交叉类型](https://www.douyin.com/video/7251579510435482895) - 2023-07-04 11:50:00 58 | - [TS中的协变与逆变](https://www.douyin.com/video/7251214858039905596) - 2023-07-03 11:50:00 59 | - [联合类型和交叉类型](https://www.douyin.com/video/7250463689499807036) - 2023-07-01 11:50:00 60 | - [对防抖函数进行类型标注](https://www.douyin.com/video/7250101892175383811) - 2023-06-30 11:50:00 61 | - [TS中的递归类型推断](https://www.douyin.com/video/7249645078581447996) - 2023-06-29 11:50:00 62 | - [使用infer封装通用类型工具](https://www.douyin.com/video/7249349950469983488) - 2023-06-28 11:50:00 63 | - [从字段到函数的推导](https://www.douyin.com/video/7248893459698814267) - 2023-06-27 11:50:00 64 | - [实现Optional](https://www.douyin.com/video/7247872430042090790) - 2023-06-24 11:50:00 65 | - [TS到底难在哪](https://www.douyin.com/video/7247504622003293496) - 2023-06-23 11:50:00 66 | - [知识的深度和广度](https://www.douyin.com/video/7246387452846279997) - 2023-06-20 11:50:00 67 | - [SASS中的扩展和占位符](https://www.douyin.com/video/7246010076144651579) - 2023-06-19 11:50:00 68 | - [SASS中的模块化开发](https://www.douyin.com/video/7244907550959766824) - 2023-06-16 11:50:00 69 | - [SASS中的颜色函数](https://www.douyin.com/video/7241482679730949434) - 2023-06-07 11:50:00 70 | - [SASS中的数学函数](https://www.douyin.com/video/7241189905030712633) - 2023-06-06 11:50:00 71 | - [使用SASS实现主题切换](https://www.douyin.com/video/7240712365015190842) - 2023-06-05 11:50:00 72 | - [用Sass简化媒介查询](https://www.douyin.com/video/7238245219626487098) - 2023-05-29 11:50:00 73 | - [Sass实现文字替换](https://www.douyin.com/video/7237490485302938935) - 2023-05-27 11:50:00 74 | - [Sass实现星空效果](https://www.douyin.com/video/7237111371677142309) - 2023-05-26 11:50:00 75 | - [什么是CSS预编译器](https://www.douyin.com/video/7236669836842044729) - 2023-05-25 11:50:00 76 | - [Web API总结](https://www.douyin.com/video/7234530538147581242) - 2023-05-19 11:50:00 77 | - [Clipboard API](https://www.douyin.com/video/7234068915297488186) - 2023-05-18 11:50:00 78 | - [自动播放策略](https://www.douyin.com/video/7233693540797271353) - 2023-05-17 11:50:00 79 | - [声音的分析和处理](https://www.douyin.com/video/7233338106701745445) - 2023-05-16 11:50:00 80 | - [拖拽API](https://www.douyin.com/video/7232940316200914231) - 2023-05-15 11:50:00 81 | - [网络状态监控](https://www.douyin.com/video/7232217913929796925) - 2023-05-13 11:50:00 82 | - [Web Animation API](https://www.douyin.com/video/7231843848455015740) - 2023-05-12 11:50:00 83 | - [Page Visibility](https://www.douyin.com/video/7231480542221421884) - 2023-05-11 11:50:00 84 | - [Intersection Observer](https://www.douyin.com/video/7231181407433788729) - 2023-05-10 11:50:00 85 | - [什么是Web API](https://www.douyin.com/video/7230706290824187192) - 2023-05-09 11:50:00 86 | - [现代CSS样式总结](https://www.douyin.com/video/7230028033221004602) - 2023-05-08 11:50:00 87 | - [flex+margin](https://www.douyin.com/video/7229625328677702949) - 2023-05-06 11:50:00 88 | - [你不知道的CSS选择器](https://www.douyin.com/video/7229228216823598396) - 2023-05-05 11:50:00 89 | - [Houdini](https://www.douyin.com/video/7228833216096963877) - 2023-05-04 11:50:00 90 | - [时间函数](https://www.douyin.com/video/7228186942997843257) - 2023-05-02 11:50:00 91 | - [常用滤镜效果](https://www.douyin.com/video/7226996541301542202) - 2023-04-29 11:50:00 92 | - [黏性定位](https://www.douyin.com/video/7226282064264416549) - 2023-04-27 11:50:00 93 | - [行盒的截断样式](https://www.douyin.com/video/7225527320449158455) - 2023-04-25 11:50:00 94 | - [CSS变量的妙用](https://www.douyin.com/video/7224453579904470309) - 2023-04-22 11:50:00 95 | - [clip-path](https://www.douyin.com/video/7223647014901271867) - 2023-04-20 11:50:00 96 | - [知识可以很简单](https://www.douyin.com/video/7222981565876407612) - 2023-04-18 11:50:00 97 | - [分时函数的封装](https://www.douyin.com/video/7221820217905679673) - 2023-04-15 11:50:00 98 | - [数据分组引发的思考](https://www.douyin.com/video/7221083385773493541) - 2023-04-13 11:50:00 99 | - [惰性函数](https://www.douyin.com/video/7220320328734526779) - 2023-04-11 11:50:00 100 | - [参数归一化](https://www.douyin.com/video/7219182616891723069) - 2023-04-08 11:50:00 101 | - [高阶函数应用-并发队列](https://www.douyin.com/video/7218554844980792635) - 2023-04-06 11:50:00 102 | - [高阶函数应用-函数防抖](https://www.douyin.com/video/7217735490034748730) - 2023-04-04 11:50:00 103 | - [高阶函数的应用-封装动画函数](https://www.douyin.com/video/7216605060871081272) - 2023-04-01 11:50:00 104 | - [什么是高阶函数](https://www.douyin.com/video/7215882375484427575) - 2023-03-30 11:50:00 105 | - [面向对象总结](https://www.douyin.com/video/7215155449304288572) - 2023-03-28 11:50:00 106 | - [如何对class降级](https://www.douyin.com/video/7214034293511785785) - 2023-03-25 11:50:00 107 | - [访问器成员](https://www.douyin.com/video/7213267630860324133) - 2023-03-23 11:50:00 108 | - [实例成员和静态成员](https://www.douyin.com/video/7212547077904043301) - 2023-03-21 11:50:00 109 | - [如何用面向对象开发程序](https://www.douyin.com/video/7211425979883949368) - 2023-03-18 11:50:00 110 | - [属性和方法](https://www.douyin.com/video/7211072541882928440) - 2023-03-17 11:50:00 111 | - [类和对象](https://www.douyin.com/video/7210690317127929146) - 2023-03-16 11:50:00 112 | - [面向对象、面向函数、面向过程](https://www.douyin.com/video/7210329147174898981) - 2023-03-15 11:50:00 113 | - [从canvas到编程本质](https://www.douyin.com/video/7209955801677532473) - 2023-03-14 11:50:00 114 | - [在canvas中绘制和拖动](https://www.douyin.com/video/7209643039361453371) - 2023-03-13 11:50:00 115 | - [用canvas玩转图片](https://www.douyin.com/video/7208843923882609977) - 2023-03-11 11:50:00 116 | - [文字也能很酷炫 ](https://www.douyin.com/video/7208476932319563064) - 2023-03-10 11:50:00 117 | - [canvas动画 ](https://www.douyin.com/video/7207721000723664187) - 2023-03-08 11:50:00 118 | - [解决canvas清晰度的问题](https://www.douyin.com/video/7206231390059253048) - 2023-03-06 11:50:00 119 | - [使用canvas完成基本绘图](https://www.douyin.com/video/7205880669560507685) - 2023-03-03 11:50:00 120 | - [canvas的意义](https://www.douyin.com/video/7205083471260290364) - 2023-03-01 11:50:00 121 | - [文件上传总结](https://www.douyin.com/video/7203618403339275581) - 2023-02-27 11:50:00 122 | - [大文件分片上传](https://www.douyin.com/video/7203617378331118907) - 2023-02-25 11:50:00 123 | - [裁剪上传原理](https://www.douyin.com/video/7202904457661697335) - 2023-02-23 11:50:00 124 | - [实现阿里云的文件上传](https://www.douyin.com/video/7202169544683638072) - 2023-02-21 11:50:00 125 | - [二进制格式的文件上传](https://www.douyin.com/video/7201022874314951991) - 2023-02-18 11:50:00 126 | - [base64格式的文件上传](https://www.douyin.com/video/7200711818384362810) - 2023-02-17 11:50:00 127 | - [文件上传方式之拖拽上传](https://www.douyin.com/video/7200383646828727589) - 2023-02-16 11:50:00 128 | - [学会如何使用Ajax上传文件数据,详细的顺序都在这!](https://www.douyin.com/video/7200008566827191610) - 2023-02-15 11:50:00 129 | - [上传文件的界面交互这么丰富,你还总是没有思路?](https://www.douyin.com/video/7199671221728906555) - 2023-02-14 11:50:00 130 | - [如何调试文件上传接口,做好第一步很重要!](https://www.douyin.com/video/7199293382491966780) - 2023-02-13 11:50:00 131 | - [你都是怎么做文件上传的?你的探索方式正确吗?](https://www.douyin.com/video/7198546831532494138) - 2023-02-11 11:50:00 132 | - [动态规划中的经典01背包问题你清楚嘛?搞懂它再刷题!](https://www.douyin.com/video/7198183905990659365) - 2023-02-10 11:50:00 133 | - [如何优化空间复杂度,来听听袁老师如何“降维打击”!](https://www.douyin.com/video/7197425052004994362) - 2023-02-08 11:50:00 134 | - [动态规划问题中常要求出最优解,来找找其中的一般思路!](https://www.douyin.com/video/7196885221914987834) - 2023-02-06 11:50:38 135 | - [遇到复杂的动态规划问题,要注意保证最终解的无后效性!](https://www.douyin.com/video/7195953651624578341) - 2023-02-04 11:50:00 136 | - [通过这道动态规划题,锻炼一下把思维转换成代码的能力!](https://www.douyin.com/video/7195216048470232381) - 2023-02-02 11:50:00 137 | - [动态规划问题如何解决?先来练习一下状态转移方程吧!](https://www.douyin.com/video/7194449193228864824) - 2023-01-31 11:50:00 138 | - [前端必修掌握的动态规划算法之入门](https://www.douyin.com/video/7193691738400099639) - 2023-01-29 11:50:00 139 | - [VUE怎么学?没有方向怎么办?入门或者提升都在这呢!](https://www.douyin.com/video/7193196562414177596) - 2023-01-28 11:50:00 140 | - [用v-model实现双向绑定,让代码写起来更加方便!](https://www.douyin.com/video/7192519770367987004) - 2023-01-26 11:50:00 141 | - [带你从开发中,彻底搞清楚组件事件底层的处理过程!](https://www.douyin.com/video/7189932994302397757) - 2023-01-24 11:50:00 142 | - [开发组件中千万不要让你的图方便,成为后期维护的难题!](https://www.douyin.com/video/7189931888176549177) - 2023-01-22 11:50:00 143 | - [彻底理解组件属性,才能解决这其中的问题!](https://www.douyin.com/video/7189930634754788664) - 2023-01-20 11:50:00 144 | - [以星级评分组件为例,总结一下vue组件的开发过程!](https://www.douyin.com/video/7189889813703576891) - 2023-01-19 11:50:00 145 | - [几分钟时间彻底搞清楚,在VUE里使用组件样式的几种常见做法!](https://www.douyin.com/video/7189617679773224247) - 2023-01-18 11:50:00 146 | - [该如何给组件命名才方便使用,并且不易出错呢?其中又有什么规范?](https://www.douyin.com/video/7189252304393096503) - 2023-01-17 11:50:00 147 | - [组件的全局注册和局部注册,到底有啥区别?](https://www.douyin.com/video/7188121794342030629) - 2023-01-16 11:50:00 148 | - [搬好小板凳,来听听模板到底是什么?为何这样开发VUE效率更高?](https://www.douyin.com/video/7188120318098115901) - 2023-01-14 11:50:00 149 | - [了解前端工程化,利用vue-cli搭建项目你清楚了嘛?](https://www.douyin.com/video/7187774876248231225) - 2023-01-13 11:50:00 150 | - [学会使用模块化分离组件代码,使你的代码结构更清晰!](https://www.douyin.com/video/7187400236082449701) - 2023-01-12 11:50:00 151 | - [实战来啦!VUE组件该如何编写及使用呢?](https://www.douyin.com/video/7187003061217348901) - 2023-01-11 11:50:00 152 | - [带你彻底清楚VUE组件的意义,如果没有它我们会面临什么呢?](https://www.douyin.com/video/7186660403269651772) - 2023-01-10 11:50:00 153 | - [前端工程化怎么学?先找准方向捋清路线才不会错](https://www.douyin.com/video/7186280510123986234) - 2023-01-09 11:50:00 154 | - [我们为什么需要webpack?它的核心能力是什么呢?](https://www.douyin.com/video/7185559640455843109) - 2023-01-07 11:50:00 155 | - [学习前端时你绕不开的构建工具,今天带你一探究竟!](https://www.douyin.com/video/7185175721067744573) - 2023-01-06 11:50:00 156 | - [带你了解CSS的终极方案PostCSS有多好用,我不允许你不知道!](https://www.douyin.com/video/7184803015663127864) - 2023-01-05 11:50:00 157 | - [学会CSS预编译器,写代码变得优雅起来!](https://www.douyin.com/video/7184426361862278461) - 2023-01-04 11:50:00 158 | - [巧妙运用Babel工具,代码兼容问题再也不用愁!](https://www.douyin.com/video/7183942340057353531) - 2023-01-03 11:50:00 159 | - [ESlint,JS代码语法和风格检查必用利器](https://www.douyin.com/video/7182966933141097786) - 2023-01-02 11:50:00 160 | - [前端模块化和包管理器到底能解决哪些问题?](https://www.douyin.com/video/7182965974621097272) - 2022-12-31 11:50:00 161 | - [学了工程化,解决前端学习90%的疑问!](https://www.douyin.com/video/7182594331067288865) - 2022-12-30 11:50:00 162 | - [Lodash实战练习之手写memoize函数](https://www.douyin.com/video/7182210972336082233) - 2022-12-29 11:50:00 163 | - [Lodash实战练习之手写get函数](https://www.douyin.com/video/7181827961165827384) - 2022-12-28 11:50:00 164 | - [Lodash实战练习之手写countBy函数](https://www.douyin.com/video/7181382773901446459) - 2022-12-27 11:50:00 165 | - [通过Lodash提升代码水平之手写chunk函数](https://www.douyin.com/video/7181043684421602619) - 2022-12-26 11:50:00 166 | - [两分钟带你梳理前端网络学习模块,看看你学到哪里了~](https://www.douyin.com/video/7180227430253169981) - 2022-12-24 11:50:00 167 | - [前端常见跨域问题及解决方案](https://www.douyin.com/video/7179909730645609789) - 2022-12-23 11:50:00 168 | - [跨域问题解决方案之代理](https://www.douyin.com/video/7179494508722277690) - 2022-12-22 11:50:01 169 | - [JSONP的原理是什么?它是如何实现跨域的?](https://www.douyin.com/video/7179242447988477245) - 2022-12-21 11:50:00 170 | - [掌握CORS跨域请求,看这个视频就够了](https://www.douyin.com/video/7177763240443727165) - 2022-12-17 11:50:00 171 | - [你可以轻松搞定跨域问题吗?先从浏览器的同源策略入手,跟住我!](https://www.douyin.com/video/7177300601297063226) - 2022-12-16 11:50:00 172 | - [做几道ES6函数的常见面试题,看看你掌握的如何?](https://www.douyin.com/video/7177217618590305594) - 2022-12-15 11:50:18 173 | - [来看几个ES6函数常见的应用实例,具体场景具体分析!](https://www.douyin.com/video/7175913295151418679) - 2022-12-12 11:50:00 174 | - [带大家实战ES6函数的几个典型场景](https://www.douyin.com/video/7175141050946784572) - 2022-12-10 11:50:00 175 | - [ES6 箭头函数,你会正确使用吗?](https://www.douyin.com/video/7174441757042642207) - 2022-12-08 11:50:00 176 | - [学会灵活运用ES6中的展开运算符,同样的需求实现起来更轻松哦!](https://www.douyin.com/video/7174033091277638920) - 2022-12-07 11:50:00 177 | - [从函数层面彻底理解什么是剩余参数,活学活用才是真的掌握!](https://www.douyin.com/video/7173655181974981899) - 2022-12-06 11:50:00 178 | - [带你学透参数默认值,扎实学好每一步才是真的技术!](https://www.douyin.com/video/7173314280392117541) - 2022-12-05 11:50:00 179 | - [通过三个应用场景,带大家彻底理解CSS属性值 initial、unset、revert](https://www.douyin.com/video/7172556035125792037) - 2022-12-03 11:50:00 180 | - [在CSS的属性计算过程中,遇到不继承的问题该如何解决?](https://www.douyin.com/video/7172182713774951711) - 2022-12-02 11:50:00 181 | - [带你彻底弄清楚CSS的继承规则,扎实学好每一步哦!](https://www.douyin.com/video/7171804590432636199) - 2022-12-01 11:50:00 182 | - [带你详细剖析CSS的层叠规则,夯实基础才能运用自如!](https://www.douyin.com/video/7171367600306392333) - 2022-11-30 11:50:00 183 | - [CSS核心知识之属性计算的总流程,赶快码住学起来!](https://www.douyin.com/video/7171017966862077215) - 2022-11-29 11:50:00 184 | - [一起来练几道类型转换和运算的常见面试题,实践出真知!](https://www.douyin.com/video/7170909138069884167) - 2022-11-28 11:50:12 185 | - [纯干货!这些代码优化技巧,你都知道吗?](https://www.douyin.com/video/7170166982740905224) - 2022-11-26 11:50:17 186 | - [关于JS表达式返回结果的最全总结](https://www.douyin.com/video/7169796947644009735) - 2022-11-25 11:54:17 187 | - [JS中的运算规则到底是什么,彻底理解数据是如何运算的](https://www.douyin.com/video/7169424958844718350) - 2022-11-24 11:50:46 188 | - [笔面试中必不可少的运算符考察,首先 类型是如何相互转换的?](https://www.douyin.com/video/7169053767692733704) - 2022-11-23 11:50:16 189 | --------------------------------------------------------------------------------