├── .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 |
8 |
17 |
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 |
--------------------------------------------------------------------------------