├── docs
├── public
│ ├── ikun
│ │ ├── ikun.css
│ │ └── ikun.mp4
│ ├── vue3.jpeg
│ ├── vue
│ │ └── arch.jpg
│ ├── wechat2.png
│ ├── wechat3.jpeg
│ ├── about-page.png
│ ├── react
│ │ └── arch.jpg
│ ├── source
│ │ └── arch.png
│ ├── wanzhuanvue.jpg
│ ├── algorithm
│ │ ├── all.png
│ │ ├── arch.png
│ │ ├── head.jpeg
│ │ └── intro.png
│ ├── gongzhonghao.jpeg
│ ├── blockchain-2018.jpg
│ ├── interview
│ │ └── index.jpeg
│ ├── vue.svg
│ ├── al.svg
│ ├── subtitle
│ │ └── index.html
│ ├── sijiao.svg
│ ├── gray.js
│ ├── vite.svg
│ ├── site.html
│ ├── gray1.html
│ ├── ikun-danmu.html
│ ├── bili.svg
│ ├── react.svg
│ ├── gray.html
│ ├── interview.svg
│ ├── ad.html
│ └── ikun.html
├── books
│ └── morden-jslib.md
├── interview
│ ├── vue
│ │ ├── 16-until.md
│ │ ├── 19-v-focus.md
│ │ ├── 26-v-model.md
│ │ ├── 7-raw-api.md
│ │ ├── 10-lifecycle.md
│ │ ├── 13-dom-portal.md
│ │ ├── 15-useToggle.md
│ │ ├── 17-useCounter.md
│ │ ├── 2-ref-family.md
│ │ ├── 23-custom-ref.md
│ │ ├── 25-useMouse.md
│ │ ├── 27-global-css.md
│ │ ├── 6-shallow-ref.md
│ │ ├── 305-capitalize.md
│ │ ├── 5-watch-family.md
│ │ ├── 8-effect-scope.md
│ │ ├── 11-next-dom-update.md
│ │ ├── 18-useLocalStorage.md
│ │ ├── 208-tree-component.md
│ │ ├── 22-custom-element.md
│ │ ├── 232-key-modifiers.md
│ │ ├── 24-v-active-style.md
│ │ ├── 20-v-debounce-click.md
│ │ ├── 3-losing-reactivity.md
│ │ ├── 323-prop-validation.md
│ │ ├── 4-writable-computed.md
│ │ ├── 14-dynamic-css-values.md
│ │ ├── 21-functional-component.md
│ │ ├── 218-h-render-function.md
│ │ ├── 9-dependency-injection.md
│ │ ├── 12-optimize-perf-directive.md
│ │ ├── 243-prevent-event-propagation.md
│ │ ├── index.md
│ │ └── 1-hello-world.md
│ ├── index.md
│ └── js
│ │ ├── gray.md
│ │ └── limit.md
├── react
│ ├── arch
│ │ ├── 06.file-upload.md
│ │ ├── 04.role.md
│ │ ├── 01.arch.md
│ │ ├── 05.data-render.md
│ │ ├── 03.infra.md
│ │ └── 02.typescript.md
│ ├── intro
│ │ ├── 02.stack.md
│ │ └── 01.intro.md
│ └── index.md
├── blog
│ ├── 2024-09-22-learn-web3.md
│ ├── 2023-01-28-guangsanyuan.md
│ ├── remot-tools.md
│ ├── 2023-03-03-remote-jobs.md
│ ├── 2022-11-29-english.md
│ ├── 2023-02-15-996.md
│ ├── tools.md
│ ├── 2022-12-05-gray-filter.md
│ ├── 2022-12-04-chatgpt.md
│ └── itwords.md
├── infra
│ └── index.md
├── sijiao
│ └── index.md
├── word.md
├── ppt
│ └── fe-decorate-worker.md
├── algorithm
│ └── index.md
├── .vitepress
│ ├── theme
│ │ ├── BFrame.vue
│ │ ├── Sound.vue
│ │ ├── WordList.vue
│ │ ├── test.ts
│ │ ├── Member.vue
│ │ ├── index.ts
│ │ ├── CalCom.vue
│ │ ├── Word.vue
│ │ ├── NotFound.vue
│ │ ├── theme.css
│ │ └── MyLayout.vue
│ ├── util.ts
│ └── config.ts
├── project
│ ├── index.md
│ └── vue-bili.md
├── node
│ └── nest.md
├── coach.md
├── 1v1.md
├── about.md
├── vue
│ └── index.md
├── source
│ └── index.md
├── life
│ └── 2023.md
├── index.md
├── template.md
├── funnycoder.md
└── me.md
├── scripts
├── help.js
└── guangsanyuan.js
├── .npmrc
├── README.md
├── package.json
├── .github
└── workflows
│ ├── check.yml
│ └── main.yml
├── LICENSE
└── .gitignore
/docs/public/ikun/ikun.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/books/morden-jslib.md:
--------------------------------------------------------------------------------
1 | # XX读书笔记
--------------------------------------------------------------------------------
/docs/interview/vue/16-until.md:
--------------------------------------------------------------------------------
1 | 16-until
--------------------------------------------------------------------------------
/docs/interview/vue/19-v-focus.md:
--------------------------------------------------------------------------------
1 | 19-v-focus
--------------------------------------------------------------------------------
/docs/interview/vue/26-v-model.md:
--------------------------------------------------------------------------------
1 | 26-v-model
--------------------------------------------------------------------------------
/docs/interview/vue/7-raw-api.md:
--------------------------------------------------------------------------------
1 | 7-raw-api
--------------------------------------------------------------------------------
/docs/react/arch/06.file-upload.md:
--------------------------------------------------------------------------------
1 | # 大文件如何上传
--------------------------------------------------------------------------------
/scripts/help.js:
--------------------------------------------------------------------------------
1 | console.log('help')
2 |
--------------------------------------------------------------------------------
/docs/blog/2024-09-22-learn-web3.md:
--------------------------------------------------------------------------------
1 | # web3入门科普
--------------------------------------------------------------------------------
/docs/infra/index.md:
--------------------------------------------------------------------------------
1 | # 前端工程化
2 | ✅
3 |
4 | 1.
--------------------------------------------------------------------------------
/docs/interview/vue/10-lifecycle.md:
--------------------------------------------------------------------------------
1 | 10-lifecycle
--------------------------------------------------------------------------------
/docs/interview/vue/13-dom-portal.md:
--------------------------------------------------------------------------------
1 | 13-dom-portal
--------------------------------------------------------------------------------
/docs/interview/vue/15-useToggle.md:
--------------------------------------------------------------------------------
1 | 15-useToggle
--------------------------------------------------------------------------------
/docs/interview/vue/17-useCounter.md:
--------------------------------------------------------------------------------
1 | 17-useCounter
--------------------------------------------------------------------------------
/docs/interview/vue/2-ref-family.md:
--------------------------------------------------------------------------------
1 | 2-ref-family
--------------------------------------------------------------------------------
/docs/interview/vue/23-custom-ref.md:
--------------------------------------------------------------------------------
1 | 23-custom-ref
--------------------------------------------------------------------------------
/docs/interview/vue/25-useMouse.md:
--------------------------------------------------------------------------------
1 | 25-useMouse
--------------------------------------------------------------------------------
/docs/interview/vue/27-global-css.md:
--------------------------------------------------------------------------------
1 | 27-global-css
--------------------------------------------------------------------------------
/docs/interview/vue/6-shallow-ref.md:
--------------------------------------------------------------------------------
1 | 6-shallow-ref
--------------------------------------------------------------------------------
/docs/sijiao/index.md:
--------------------------------------------------------------------------------
1 | # 大圣前端私教课
2 |
3 | 辅导+全部课程
--------------------------------------------------------------------------------
/docs/interview/vue/305-capitalize.md:
--------------------------------------------------------------------------------
1 | 305-capitalize
--------------------------------------------------------------------------------
/docs/interview/vue/5-watch-family.md:
--------------------------------------------------------------------------------
1 | 5-watch-family
--------------------------------------------------------------------------------
/docs/interview/vue/8-effect-scope.md:
--------------------------------------------------------------------------------
1 | 8-effect-scope
--------------------------------------------------------------------------------
/docs/interview/vue/11-next-dom-update.md:
--------------------------------------------------------------------------------
1 | 11-next-dom-update
--------------------------------------------------------------------------------
/docs/interview/vue/18-useLocalStorage.md:
--------------------------------------------------------------------------------
1 | 18-useLocalStorage
--------------------------------------------------------------------------------
/docs/interview/vue/208-tree-component.md:
--------------------------------------------------------------------------------
1 | 208-tree-component
--------------------------------------------------------------------------------
/docs/interview/vue/22-custom-element.md:
--------------------------------------------------------------------------------
1 | 22-custom-element
--------------------------------------------------------------------------------
/docs/interview/vue/232-key-modifiers.md:
--------------------------------------------------------------------------------
1 | 232-key-modifiers
--------------------------------------------------------------------------------
/docs/interview/vue/24-v-active-style.md:
--------------------------------------------------------------------------------
1 | 24-v-active-style
--------------------------------------------------------------------------------
/docs/interview/vue/20-v-debounce-click.md:
--------------------------------------------------------------------------------
1 | 20-v-debounce-click
--------------------------------------------------------------------------------
/docs/interview/vue/3-losing-reactivity.md:
--------------------------------------------------------------------------------
1 | 3-losing-reactivity
--------------------------------------------------------------------------------
/docs/interview/vue/323-prop-validation.md:
--------------------------------------------------------------------------------
1 | 323-prop-validation
--------------------------------------------------------------------------------
/docs/interview/vue/4-writable-computed.md:
--------------------------------------------------------------------------------
1 | 4-writable-computed
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | auto-install-peers=true
2 | strict-peer-dependencies=false
--------------------------------------------------------------------------------
/docs/interview/vue/14-dynamic-css-values.md:
--------------------------------------------------------------------------------
1 | 14-dynamic-css-values
--------------------------------------------------------------------------------
/docs/interview/vue/21-functional-component.md:
--------------------------------------------------------------------------------
1 | 21-functional-component
--------------------------------------------------------------------------------
/docs/interview/vue/218-h-render-function.md:
--------------------------------------------------------------------------------
1 | 218-h-render-function
--------------------------------------------------------------------------------
/docs/interview/vue/9-dependency-injection.md:
--------------------------------------------------------------------------------
1 | 9-dependency-injection
--------------------------------------------------------------------------------
/docs/word.md:
--------------------------------------------------------------------------------
1 | # 生词记录
2 |
3 | italicized refain disheveled fierce
4 |
--------------------------------------------------------------------------------
/docs/ppt/fe-decorate-worker.md:
--------------------------------------------------------------------------------
1 | # 前端 & 装修工人
2 |
3 |
4 | ---
5 |
6 |
--------------------------------------------------------------------------------
/docs/interview/vue/12-optimize-perf-directive.md:
--------------------------------------------------------------------------------
1 | 12-optimize-perf-directive
--------------------------------------------------------------------------------
/docs/interview/vue/243-prevent-event-propagation.md:
--------------------------------------------------------------------------------
1 | 243-prevent-event-propagation
--------------------------------------------------------------------------------
/docs/public/vue3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/vue3.jpeg
--------------------------------------------------------------------------------
/docs/public/ikun/ikun.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/ikun/ikun.mp4
--------------------------------------------------------------------------------
/docs/public/vue/arch.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/vue/arch.jpg
--------------------------------------------------------------------------------
/docs/public/wechat2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/wechat2.png
--------------------------------------------------------------------------------
/docs/public/wechat3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/wechat3.jpeg
--------------------------------------------------------------------------------
/docs/public/about-page.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/about-page.png
--------------------------------------------------------------------------------
/docs/public/react/arch.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/react/arch.jpg
--------------------------------------------------------------------------------
/docs/public/source/arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/source/arch.png
--------------------------------------------------------------------------------
/docs/public/wanzhuanvue.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/wanzhuanvue.jpg
--------------------------------------------------------------------------------
/docs/public/algorithm/all.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/algorithm/all.png
--------------------------------------------------------------------------------
/docs/public/algorithm/arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/algorithm/arch.png
--------------------------------------------------------------------------------
/docs/public/gongzhonghao.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/gongzhonghao.jpeg
--------------------------------------------------------------------------------
/docs/public/algorithm/head.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/algorithm/head.jpeg
--------------------------------------------------------------------------------
/docs/public/algorithm/intro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/algorithm/intro.png
--------------------------------------------------------------------------------
/docs/public/blockchain-2018.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/blockchain-2018.jpg
--------------------------------------------------------------------------------
/docs/public/interview/index.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hug-sun/blog/main/docs/public/interview/index.jpeg
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # challenages
2 |
3 | https://cdn.jsdelivr.net/gh/woniuppp/static/commit.png
4 | 
5 |
--------------------------------------------------------------------------------
/docs/interview/vue/index.md:
--------------------------------------------------------------------------------
1 | # Vue 挑战题
2 |
3 | 推荐大家直接在StackBlitz上在线写代码,这样可以直接看到效果,不用下载代码到本地运行,欢迎大家持续贡献Vue相关的测试题,我也会录制配套的解答视频
4 |
5 |
6 | 题目来源 [https://github.com/webfansplz/vuejs-challenges](https://github.com/webfansplz/vuejs-challenges)
7 |
--------------------------------------------------------------------------------
/docs/algorithm/index.md:
--------------------------------------------------------------------------------
1 | # 前端学算法
2 |
3 |
4 |
5 | 
6 | 
7 | 
8 | 
9 |
10 |
11 | 
12 |
--------------------------------------------------------------------------------
/docs/blog/2023-01-28-guangsanyuan.md:
--------------------------------------------------------------------------------
1 | # 算法喝酒
2 |
3 |
4 | ```mermaid
5 | graph TD
6 | A[西] --> |动物园|B[犀牛, 蜥蜴]
7 | A --> |植物园|C[西蓝花, 西芹]
8 | A --> |果园|D[西柚, 西瓜, 西梅]
9 | A --> |xing|E[猩猩, 杏鲍菇, 杏]
10 | A --> |xiang|F[香菇,香蕉, 响尾蛇]
11 |
12 | ```
--------------------------------------------------------------------------------
/docs/public/vue.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/BFrame.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/docs/blog/remot-tools.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | # 远程工作工具推荐
4 |
5 |
6 |
7 | ## 面试经验
8 |
9 | https://www.onsites.fyi/
10 |
11 | https://twitter.com/acghnu/status/1701840791143100776
12 |
13 | https://twitter.com/bitfool1/status/1692403747635560518
14 |
15 |
16 |
--------------------------------------------------------------------------------
/docs/project/index.md:
--------------------------------------------------------------------------------
1 | # 企业级实战要素
2 |
3 | 每个需求,都可以做成可以写在简历里的内容
4 |
5 | * Typescript
6 | * css解决方案
7 | * axios封装
8 | * promise封装
9 | * 前端工程化
10 | * vite插件+进阶
11 | * 组件设计
12 | * 性能优化
13 | * 一万数据量渲染优化
14 | * eslint团队规范
15 | * 前端监控
16 | * 发布部署
17 | * ab测试
18 | * 低代码
19 |
20 |
21 | ## 常见需求实现
22 | * 键盘快捷键
23 | * 秒杀
24 | * 分步表单
25 | * 数据大屏
26 | * 文件上传
--------------------------------------------------------------------------------
/docs/react/arch/04.role.md:
--------------------------------------------------------------------------------
1 | # 权限系统和布局
2 |
3 |
4 | ---
5 |
6 |
7 | ## Header
8 |
9 | 用户信息、通知、设置、退出登录
10 |
11 | https://ant.design/docs/react/customize-theme-cn
12 |
13 |
14 |
15 | ---
16 |
17 |
18 | ## 侧边栏
19 |
20 |
21 | ---
22 |
23 | ## 面包屑导航
24 |
25 | ---
26 |
27 |
28 | ## 路由缓存
29 |
30 |
31 | ---
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/docs/node/nest.md:
--------------------------------------------------------------------------------
1 | # Nest
2 |
3 |
4 | ```bash
5 | nest new node-server
6 |
7 | # crud模块
8 | nest g resource user
9 |
10 | ```
11 |
12 |
13 | ```
14 | brew services start mongodb-community@6.0
15 | brew services stop mongodb-community@6.0
16 |
17 | brew services list
18 |
19 | mongod
20 | mongosh
21 |
22 | ```
23 |
24 |
25 | https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-red-hat/#install-mongodb-community-edition
26 |
27 | ```
28 | sudo rm -rf /tmp/mongodb-27017.sock
29 | sudo service mongod start
30 | ```
--------------------------------------------------------------------------------
/docs/.vitepress/theme/Sound.vue:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/WordList.vue:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
18 |
19 | {{ w }}
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/docs/react/arch/01.arch.md:
--------------------------------------------------------------------------------
1 | # 企业级实战思路 - 什么是亮点
2 |
3 | 实现CRUD后,我们能做什么
4 |
5 | ---
6 |
7 |
8 |
9 | ---
10 |
11 | ## 大数据量
12 | 1. 懒加载 & 执行
13 | 2. 分批执行
14 | 3. 不断地思考如何优化(面试官喜欢的场景)
15 |
16 | 用大文件上传来举例
17 |
18 | ---
19 |
20 | ## 研发效率
21 | 1. 规范 (统一开发规则)
22 | 2. 组件化和hooks封装 (复用)
23 | 3. 脚手架 (多个项目初始化效率)
24 | 4. 联调 (多人协作效率)
25 | 5. 自动化部署 (部署效率)
26 | ...
27 |
28 | ---
29 |
30 | ## 开发质量
31 | 1. 单元测试 (代码帮你测试代码)
32 | 2. 监控报警 (线上问题提前预支)
33 | 3. 代码Review ( 多人协作规范)
34 | 4. 规范 (统一代码、Git风格)
35 | ...
36 | ---
37 |
38 | ## 性能和用户体验
39 | 1. 性能指标
40 | 2. 更快的加载和执行
41 | 3. 交互反馈
42 | 4. 骨架屏
43 | ...
44 |
--------------------------------------------------------------------------------
/docs/coach.md:
--------------------------------------------------------------------------------
1 | The essence of most Internet projects is to Create, Read, Update, and Delete data, called CRUD.
2 | Front-end frameworks are tools for the CRUD of the browser elements, and back-end frameworks are for the CRUD of the data.
3 |
4 |
5 | Let's use the front-end framework as an example. First, we must understand how the framework interacts with the browser because the list application requires input elements, buttons, and lists to display.
6 |
7 | We need to get the users' inputs and the list of data to add or delete, but also synchronize to the browser, and this step will give birth to MVC, MVMM, and other development concepts.
8 |
9 | On this website https://todomvc.com/, you can see most of the front-end frameworks to achieve the code for our0 Todo-list application.
--------------------------------------------------------------------------------
/docs/public/al.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/react/arch/05.data-render.md:
--------------------------------------------------------------------------------
1 | # 大数据量如何渲染
2 |
3 |
4 | https://cdn.jsdelivr.net/gh/woniuppp/static/virtual.webp
5 |
6 | https://cdn.jsdelivr.net/gh/woniuppp/static/virtual1.gif
7 |
8 | 1. 减少不必要渲染
9 | 2. 减少不必要的加载
10 |
11 |
12 | ---
13 |
14 | ## 虚拟列表
15 |
16 | 0. 可视区的高度固定 viewHeight
17 | 1. 每个列表高度height (也可能不定)
18 | 2. 可视区域的数据索引start和end
19 | 3. 基于startIndex计算出offset偏移
20 | 4. 渲染数据
21 | --
22 |
23 | ## 虚拟列表
24 |
25 | 1. 总高度(只漏出可视区) = height * list.length
26 | 2. start = Math.floor(scrollTop / height)
27 | 3. end = start + Math.ceil(viewHeight / height)
28 | 4. offset = scrollTop - (scrollTop % height);
29 | 5. onScroll event
30 |
31 | ---
32 |
33 | ## 高度不确定
34 | 1. 先离屏渲染 (不可见区域),获取高度后 再计算 首次渲染会卡顿
35 | 2. 预估大致高度,先渲染一部分,再计算高度+缓存
36 |
37 |
38 |
39 | ---
40 | ## todo
41 | 1. 二分查找优化 (findIndex)
42 | 2. 用IntersectionObserver优化scroll的性能
--------------------------------------------------------------------------------
/docs/1v1.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar: false
3 | prev: false
4 | next: false
5 | editLink: false
6 | aside: false
7 | ---
8 |
9 | # 1V1聊天
10 |
11 | 最近有十几个同学找我聊了,很高兴能解答一些同学的疑惑,单独开个页面吧
12 |
13 | 简单的问题私信我会回复,复杂的问题需要找我1V1的话,腾讯会议/谷歌会议,聊什么话题都可以,说不定今天就是合适的日子
14 |
15 |
16 |
19 |
20 |
21 | 1. 改简历和模拟面试
22 | 2. 前端技术发展和职业生涯
23 | 3. 海外remote和英语
24 | 4. 自由职业,讲师经验
25 | 5. 房车,旅行,自由职业
26 |
27 | ## 费用(一小时)
28 | * 888 人民币 (微信支付宝)
29 | * 125 美元 (Wise or USDT)
30 |
31 |
32 |
33 |
34 |
35 | 时间不够的话还可以选择一小时
36 |
37 |
38 |
39 | 预约后记得加我微信沟通和付款
40 |
41 |
42 |
43 |
44 | :::tip
45 | 1. 可以提前把想聊的话题发给我,方便我提前准备
46 | 2. 临时有事记得提前告知
47 | 3. 最好能做一下自我介绍,让我能更好的了解你的现状
48 | :::
--------------------------------------------------------------------------------
/docs/public/subtitle/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
9 |
10 |
11 |
12 |
29 |
30 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fa-advanced-interview",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "type": "module",
7 | "scripts": {
8 | "dev": "vitepress dev docs --port 8080 --max-old-space-size=50000",
9 | "build": "vitepress build docs",
10 | "serve": "vitepress serve docs"
11 | },
12 | "dependencies": {
13 | "@ant-design/icons-vue": "6.1.0",
14 | "@vueuse/core": "^10.5.0",
15 | "ant-design-vue": "3.2.15",
16 | "axios": "1.2.0",
17 | "bilibili-live-ws": "6.2.1",
18 | "bing-chat": "0.2.1",
19 | "dotenv": "16.0.3",
20 | "mermaid": "9.1.7",
21 | "node-fetch": "3.3.0",
22 | "pinyin": "3.0.0-alpha.4",
23 | "sound-play": "1.1.0",
24 | "vitepress": "1.0.0-alpha.50",
25 | "vitepress-plugin-mermaid": "2.0.8",
26 | "vue": "3.2.41"
27 | },
28 | "keywords": [],
29 | "author": "",
30 | "license": "ISC"
31 | }
32 |
--------------------------------------------------------------------------------
/docs/interview/vue/1-hello-world.md:
--------------------------------------------------------------------------------
1 | ---
2 | aside: true
3 | ---
4 | # 热身
5 |
6 | 大概就是让你熟悉一下Vue.js的渲染,把页面渲染的`Hello World`改成`msg`就可以了,这里
7 |
8 |
9 |
10 |
11 |
12 |
13 | 题目要求和代码
14 | ```vue
15 |
19 |
20 |
21 |
22 |
23 |
msg
24 |
25 |
26 | ```
27 |
28 | 解答
29 |
30 | [解答地址](https://stackblitz.com/edit/angular-nyboi3?file=App.vue)
31 | ```diff
32 |
37 | ```
38 |
39 | 视频
40 |
41 |
--------------------------------------------------------------------------------
/docs/public/sijiao.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/public/gray.js:
--------------------------------------------------------------------------------
1 | let style = document.createElement('style')
2 | let graySelector = 'gray-filter'
3 | style.setAttribute('type', 'text/css')
4 | // style.setAttribute('data-vite-dev-id', id)
5 | style.textContent = `.${graySelector}{
6 | -webkit-filter: grayscale(100%);
7 | -moz-filter: grayscale(100%);
8 | -ms-filter: grayscale(100%);
9 | -o-filter: grayscale(100%);
10 | filter: grayscale(100%);
11 | -webkit-filter: gray;
12 | filter: gray;
13 | -webkit-filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
14 | filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
15 | }`
16 | document.head.appendChild(style)
17 |
18 | let root = document.querySelector('html')
19 | let btn = document.querySelector('#set-gray')
20 | btn.addEventlistener('click',()=>{
21 | if(root.className.indexOf(graySelector)>-1){
22 | root.className = root.className.replace(graySelector,'')
23 | }else{
24 | root.className += ' '+graySelector
25 | }
26 | },false)
--------------------------------------------------------------------------------
/docs/.vitepress/theme/test.ts:
--------------------------------------------------------------------------------
1 | function getContainer(root) {
2 | root ||= document.body;
3 | if (!root.innerText) return null;
4 | const totalWords = root.innerText.match(/\S+/g).length;
5 | let ps = root.querySelectorAll('p');
6 | if (!ps.length) ps = root.querySelectorAll('div');
7 | if (!ps.length) return null;
8 |
9 | let container = null;
10 | let maxWords = 0;
11 | for (let p of ps) {
12 | const numWords = p.innerText.trim().length;
13 | if (numWords > maxWords) {
14 | maxWords = numWords;
15 | container = p;
16 | }
17 | }
18 | let selectedWords = maxWords;
19 | while (selectedWords / totalWords < 0.5 && container !== root) {
20 | container = container.parentElement;
21 | selectedWords = container.innerText.match(/\S+/g).length;
22 | }
23 |
24 | if (container.tagName === 'P') {
25 | container = container.parentElement;
26 | }
27 |
28 | return container;
29 | }
30 | // setTimeout(()=>{
31 | // let a = getContainer()
32 | // console.log(a)
33 | // },2000)
34 |
--------------------------------------------------------------------------------
/docs/blog/2023-03-03-remote-jobs.md:
--------------------------------------------------------------------------------
1 | # 2023前端已死怎么办?
2 |
3 | 2023年好多人说前端已死,讲的是前端不好找工作了,但是同时很多团队又找不到合适的前端,前端是一个脑力工作者,但是大部分前段本质上是体力劳动者,天天做增删改查,肯定会被年轻人或者AI取代,如何避免这种情况呢
4 |
5 | 我反而觉得现在是前端工程师最好的时代,待会解释一下
6 |
7 | 首先前端确实没有以前那么高的涨幅了,就像房子不好卖了,工地上的工友工资涨幅就不会高了,那我们怎么办呢,我提供几个思路
8 |
9 | 先认清自己的定位,如果公司是一个工地,后端负责盖楼,运维负责水电,测试负责验收,那前端就是装修,我们的工作就是把盖好的楼装修的好, 只干体力活是没有未来的 ,你非得跟后端比盖楼的技术水平,没必要,我们要发挥装修的特色,交互体验,而且我们可以做全栈,自己就能盖个小房子,讲究居住体验的时候,盖别墅不需要那么多高并发知识,js技术栈完全hold得住,是程序员里唯一一个可以做全端应用的
10 |
11 |
12 | 做一些有资源积累或者有护城河的事情
13 |
14 |
15 |
16 | 1. node做后台
17 | 2. vue或者react做前端
18 | 3. uni-app做 微信,支付宝,字节小程序
19 | 4. react-native开发安卓,ios
20 | 5. electron开发桌面应用
21 |
22 |
23 |
24 | 2023年前端工程师如何保持竞争力
25 |
26 | 1. 一定要有自己的强项,修炼自己的亮点
27 | 1. 亮点!亮点!亮点!
28 | 2. 性能优化,框架源码,工程化,架构,组件库,单侧....
29 | 3. 夯实计算机基础,算法,网络,操作系统....
30 | 2. 了解公司的业务,搞清楚业务闭环怎么实现的,成为业务高手
31 | 3. 找到一个领域深扎,crud已经不够了
32 | 1. 文档,webgl,图形学
33 | 2. 框架,工程化等源码
34 | 3. 一年找到一个前端有话语权的公司
35 | 4. 剑走偏锋,国外远程,脱离国内卷的环境
36 | 1. 学英语,我最近就在学英语,中国互联网的程序员,除了去美国都是领先水平
37 | 2. 国外的前端的面试比较简单,简单的算法+八股文+系统设计,最难的题就是手写promise了
38 |
39 | 客户端,测试都活的好好地,前端也会一直好好地 放心吧
40 |
--------------------------------------------------------------------------------
/.github/workflows/check.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: check
4 |
5 | # Controls when the workflow will run
6 | on:
7 | pull_request:
8 | branches: [ main ]
9 | # Allows you to run this workflow manually from the Actions tab
10 | workflow_dispatch:
11 |
12 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
13 | jobs:
14 | # This workflow contains a single job called "build"
15 | build:
16 | # The type of runner that the job will run on
17 | runs-on: ubuntu-latest
18 | # Steps represent a sequence of tasks that will be executed as part of the job
19 | steps:
20 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
21 | - uses: actions/checkout@v3
22 | - name: install Node.js
23 | uses: actions/setup-node@v23
24 | with:
25 | node-version: "16.X"
26 | - uses: pnpm/action-setup@v2
27 | with:
28 | version: 7.13.4
29 | - name: install dep
30 | run: pnpm install
31 | - name: build app
32 | run: pnpm run build
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 花果山大圣
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/docs/blog/2022-11-29-english.md:
--------------------------------------------------------------------------------
1 | # 看官网学英语
2 |
3 | 我的英语也比较烂,最近准备记录一下学英语的过程
4 |
5 | 除了强化单词之外,我通过阅读一些开源框架的官网来提高一下阅读和表达能力,编程英语两不误,欢迎大家一起
6 |
7 | [讨论区](https://github.com/shengxinjing/fe-advanced-interview/discussions/categories/%E8%8B%B1%E8%AF%AD%E5%AD%A6%E4%B9%A0)
8 |
9 | 1. [Vue3](https://vuejs.org/)
10 | 2. [React](https://beta.reactjs.org/)
11 | 3. [Nuxt](https://nuxt.com/v3)
12 | 4. [Next](https://nextjs.org/)
13 | 5. [Nest](https://nestjs.com/)
14 | 6. 英文JS书
15 | 1. @todo
16 |
17 |
18 | ## 单词 & 名词解释
19 |
20 | ### Vue3
21 |
22 |
23 | ### Native speakers
24 |
25 |
28 |
29 | {{word}}
30 |
31 | elaborate instructors intrigues phrase illustrated contextual usage ethnic jargon slang
32 |
33 | indicator upright conduct autonomy
34 |
35 | rote memorization | repetitively | induce cramming | core curriculum | irrespective |
36 |
--------------------------------------------------------------------------------
/docs/react/intro/02.stack.md:
--------------------------------------------------------------------------------
1 | # React全家桶入门
2 |
3 | 尽量选择主流 & 稳定的,个人项目可以尝鲜
4 |
5 | 1. 工程化工具Vite & Webpack
6 | 2. Typescript
7 | 3. 路由
8 | 4. 数据流
9 | 5. CSS
10 | 6. 组件库
11 | 7. 网络请求
12 | 8. React进阶API (优化)
13 | 9. 组件化进阶
14 | 10. 封装自己的Hooks
15 |
16 | ---
17 |
18 | ## 工程化工具
19 |
20 | 1. Webpack (Bundle)
21 | 2. Vite (Bundless)
22 | 3. Parcel
23 | 4. Umi
24 | 5. ....
25 |
26 | 进阶都是插件的定制和优化
27 |
28 | ---
29 |
30 | ## 强类型语言
31 | Typescript,可追踪 ,可维护性
32 | 上手难度大
33 |
34 | ---
35 |
36 | ## 路由
37 |
38 | React-router
39 | 1. 嵌套路由
40 | 2. 动态路由
41 | 3. 路由懒加载
42 | 4. ....
43 |
44 |
45 | ---
46 |
47 | ## 数据流
48 | 全局共享的数据源
49 | 1. Redux + Tookit
50 | 2. Mobx
51 | 3. Jotai
52 | 4. Zustand
53 | 5. Recoil
54 | 6. Valtio...
55 |
56 | 是否单向数据流,是否单一数据源...
57 | 不用太纠结,任选一个都可以满足你的需求
58 | 我们会选单向数据流代表Redux 和
59 |
60 | ---
61 |
62 | ## 组件库和css方案
63 |
64 | AntDesign5 or MUI
65 |
66 | 1. less, [sass](https://sass-lang.com/) ,stylus
67 | 2. [tailwind.css](https://tailwindcss.com/)
68 | 3. css in js
69 | 4. postcss (新语法和兼容)
70 |
71 | ---
72 |
73 | ## 网络请求
74 | axios最常见
75 | 1. swr
76 | 2. React-Query
77 |
78 | ---
79 |
80 |
81 | ## 封装自己的Hooks & Hooks工具库
82 | 1. ahooks
83 | 2. react-use
84 | 3. 封装自己的Hooks
85 |
86 | ---
87 |
88 | ## 其他
89 | 1. 可视化
90 | 2. 表单
91 | 3. 文本编辑器
92 | 4. 动画
93 | 5. 全栈(Next.js,Remix...)
--------------------------------------------------------------------------------
/scripts/guangsanyuan.js:
--------------------------------------------------------------------------------
1 | import {pinyin} from 'pinyin'
2 |
3 | let fruit = `苹果,梨,葡萄,提子,枣,柑橘,西柚,
4 | 桃,西瓜,杏,甜瓜,香瓜,荔枝,甘蔗,柿,柠檬,香蕉,芒果,菠萝,哈密瓜,李子,
5 | 石榴,枸杞,山楂,椰子,桑葚,草莓,木瓜,龙眼,
6 | 枇杷,山竹,红毛丹,无花果,杨桃,猕猴桃,杨梅,蓝莓,
7 | 西梅,释迦,百花果,樱桃,榴莲,火龙果,菠萝蜜,百香果,罗汉果,莲雾
8 | `
9 | let vegetable = `
10 | 菠菜,韭菜,花菜,西兰花,白菜,芹菜,辣椒,西芹,
11 | 木耳,蒜苔,油菜,生菜,蒜苗,茼蒿,芥菜,油菜
12 | 紫甘蓝,娃娃菜,空心菜,
13 | 香菇,草菇,平菇,金针菇,杏鲍菇,
14 | 冬瓜,南瓜,黄瓜,丝瓜,苦瓜,
15 | 大葱,生姜,洋葱,山药,芋头,魔芋,红薯,土豆,莲藕,胡萝卜,萝卜,
16 | 银耳,玉米,芦笋,竹笋,茴香,茄子,番茄,豌豆芽
17 | `
18 | let animal = `
19 | 熊猫,大象,豹子,老虎,猫头鹰,孔雀,羊驼,山羊,河马,牛,斑马,猴子,
20 | 熊,老鹰,骆驼,狮子,龟,兔子,考拉,袋鼠,犀牛,蜥蜴,长尾猴,猩猩,金丝猴,
21 | 长颈鹿,梅花鹿,马,小鹿,羚羊,海豹,海鸥,海象,海狮,响尾蛇
22 | `
23 | let obj = {}
24 | function parse(str, name) {
25 | let ret = [...new Set(str.replace(/\n/g, '').split(','))]
26 | ret = ret.forEach((item) => {
27 | let pin = pinyin(item, {
28 | style: pinyin.STYLE_NORMAL, // 设置拼音风格
29 | })
30 | let p = pin[0][0]
31 | if (p in obj) {
32 | ( obj[p][name] || (obj[p][name]=[]) ).push(item)
33 | } else {
34 | obj[p] = { [name]: [item] }
35 | }
36 | })
37 | }
38 |
39 | parse(animal, '动物园')
40 | parse(vegetable, '植物园')
41 | parse(fruit, '果园')
42 | Object.keys(obj).forEach((key) => {
43 | let item = obj[key]
44 | if (Object.keys(item).length === 3) {
45 | //三个园都有的
46 | console.log(key, '开头的', item)
47 | }
48 | })
49 | console.log('--------------------')
50 |
51 | // console.log(pinyin("犀牛", {
52 | // style: pinyin.STYLE_NORMAL, // 设置拼音风格
53 | // }));
54 |
--------------------------------------------------------------------------------
/docs/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/about.md:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
21 | # 关于我
22 |
23 | 你好,我是大圣,现在是自由职业程序员,独立开发者 && 讲师,欢迎关注我公众号
24 |
25 | 你可以收获前端学习小秘籍,一起学习`前端进阶`的知识
26 |
27 | 无论是想职场进阶,还是不想上班,都可以聊聊
28 |
29 |
30 |
31 |
32 |
33 |
34 | ## 大圣前端私教课
35 |
36 | 从1V1面试摸底 给你制定学习路线图 + 课程 + 导师辅导 帮你成功进阶前端
37 |
38 |
39 | ## 体系课
40 | 私教课的部分模块单独拆分
41 |
42 | 1. [前端啃算法](https://blc.xet.tech/s/2Ajvex)
43 | - Leetcode200题,掌握刷题公式,大厂面试必杀技
44 | 2. [Vue+ Typescript 企业实战+组件库课](/vue/)
45 | 3. [React+ Typescript 企业实战+组件库课](/react/)
46 | 4. [前端源码漫游记](/source/)
47 | - 一次性掌握前端热门框架原理
48 | - Vue3 + React + Vite + Rollup 源码手写 ...
49 | - Typescript + Pnpm + Monorepo + Vitest
50 | 5. Node + 工程化体系
51 | 6. 前端性能优化
52 | 7. [玩转Vue3文字专栏@极客时间](http://gk.link/a/10BM3)
53 | 8. 面试刷题辅导
54 |
55 | other
56 |
57 | 1. 玩转Web3
58 | 2. 玩转Three.js
59 | 3. 玩转Rust
60 | 4. 玩转小程序
61 | 5. [如何做开源 with Anthony Fu(WIP)](https://github.com/tutorial-kit/open-source)
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/Member.vue:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | # This is a basic workflow to help you get started with Actions
2 |
3 | name: deploy
4 |
5 | # Controls when the workflow will run
6 | on:
7 | # Triggers the workflow on push or pull request events but only for the main branch
8 | push:
9 | branches: [ main ]
10 | # Allows you to run this workflow manually from the Actions tab
11 | workflow_dispatch:
12 |
13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel
14 | jobs:
15 | # This workflow contains a single job called "build"
16 | build:
17 | # The type of runner that the job will run on
18 | runs-on: ubuntu-latest
19 | # Steps represent a sequence of tasks that will be executed as part of the job
20 | steps:
21 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
22 | - uses: actions/checkout@v3
23 | - name: install Node.js
24 | uses: actions/setup-node@v3
25 | with:
26 | node-version: "18.X"
27 | - uses: pnpm/action-setup@v2
28 | with:
29 | version: 8.6.5
30 | - name: install dep
31 | run: pnpm install
32 | - name: build app
33 | run: pnpm run build
34 | - name: copy file via ssh password
35 | uses: appleboy/scp-action@master
36 | with:
37 | host: ${{ secrets.REMOTE_HOST }}
38 | username: ${{ secrets.REMOTE_USER }}
39 | password: ${{ secrets.REMOTE_PASS }}
40 | port: 22
41 | source: "docs/"
42 | target: ${{ secrets.REMOTE_TARGET }}
--------------------------------------------------------------------------------
/docs/.vitepress/theme/index.ts:
--------------------------------------------------------------------------------
1 | import DefaultTheme from 'vitepress/theme'
2 | import BFrame from './BFrame.vue'
3 | import MyLayout from './MyLayout.vue'
4 | import NotFound from './NotFound.vue'
5 | import Word from './Word.vue'
6 | import WordList from './WordList.vue'
7 | import { Card,Avatar } from 'ant-design-vue';
8 | import 'ant-design-vue/dist/antd.css';
9 | // import 'ant-design-vue/es/card/style/css'
10 | // import 'ant-design-vue/es/avatar/style/css'
11 |
12 | import Member from './Member.vue'
13 | import CalCom from './CalCom.vue'
14 | // import Sound from './Sound.vue'
15 | import './theme.css'
16 | import './test'
17 | export default {
18 | ...DefaultTheme,
19 | NotFound,
20 | Layout:MyLayout,
21 | enhanceApp({ app, router, siteData }) {
22 | app.component('BFrame',BFrame)
23 | app.component('Word',Word)
24 | app.component('WordList',WordList)
25 | app.component('Member',Member)
26 | app.component('CalCom',CalCom)
27 | app.use(Card)
28 | app.use(Avatar)
29 | // app.component('Sound',Sound)
30 | // baidutongji
31 | // var _hmt = _hmt || [];
32 | // if(process.env.NODE_ENV === 'production' && typeof window !=='undefined'){
33 | // var hm = document.createElement("script");
34 | // hm.src = "https://hm.baidu.com/hm.js?ccf55dfd2764cf3ebf43d6b3c9da9b20";
35 | // var s = document.getElementsByTagName("script")[0];
36 | // s.parentNode.insertBefore(hm, s);
37 | // }
38 |
39 | // DefaultTheme.enhanceApp(ctx)
40 | // // ctx.app.component('VueClickAwayExample', VueClickAwayExample)
41 | }
42 | }
--------------------------------------------------------------------------------
/docs/.vitepress/theme/CalCom.vue:
--------------------------------------------------------------------------------
1 |
51 |
52 |
53 |
57 |
--------------------------------------------------------------------------------
/docs/blog/2023-02-15-996.md:
--------------------------------------------------------------------------------
1 | # 996的再思考
2 |
3 | “996”工作制,即每天早 9 点到岗,一直工作到晚上 9 点,每周工作 6 天。
4 |
5 | 996周工作时间为最低 11x6=66 小时,这明显是一种压迫
6 |
7 | 劳动力再生的概念,狭义的需要休息,广义的是要养活自己的下一代
8 | 简单再生产和扩大再生产,996一直crud,就是简单再生产,没有提高 (政治经济学) 我们要扩大再生产
9 |
10 | 实习医生是没有工资的,实习律师可能更低,因为你不干,有的是人愿意干,内卷化的结果
11 |
12 | 996意味着原本三个人的岗位,现在两个人干,有一个失业了,那个人就会降低工资来卷你
13 |
14 | 扩大再生产需要在智力和技能上进行投资
15 | 最近对996的新的感悟 大圣@2023
16 |
17 | 先科普一下,996就是早上9点上班,晚上9点下班,每周工作6天 去掉午休一小时,每周工作时间是11\*6 = 66,965是8\*5=40 如果加班工资算1.5,996相当于时薪直接腰斩
18 |
19 | 之前我认为996只是变相降低50%,剥夺你学习的精力和时间,并且用晚餐+免费打车来美化这种行为,还用奋斗是福报pua你,而且还实用末尾淘汰机制让你们内斗,而且996效率极低,我一天能注意力集中4个小时算高的了,996的节奏就是9点或者10点到公司,开个早会泡个茶,看看邮件刷刷知乎摸摸鱼就吃午饭了,基本都是下午才能开始干活,但是很多会议就来了,其实整体效率并没有提高,都在假装忙碌在摸鱼,反而是晚饭后能集中注意力工作一会,长久对积极的工作态度是毁灭性的打击
20 |
21 | 所以我都是不鼓励学员去996的公司,首先996违反了劳动法,不应该鼓励这种行为,有些急需工作的学员我也是鼓励学员涨薪50%以上才考虑996,并且日常要多摸鱼学习,比如无聊的会议可以刷刷算法,而且要多休息,保养身体,多睡觉多泡澡多按摩, 自由职业一年后我才意识到,除了时薪的降低,还有对你发展机会的扼杀
22 |
23 | 做自由职业得自己搞钱,有些小机会,比如外包,行业小聚,大家基本都是工作晚上7点~10点或者周六的小聚,周日那些小甲方都会在家休息,会促成一些意想不到的收入机会,晚上9点才放你走,有可能就是老板要把你晚上可能接触到商业机会的聚会干掉,成为彻底的打工人
24 |
25 | 一个年轻人进入到公司,工作几年从啥也不懂,到掌握了代码,运营,产品等技能之一,六七点下班后,同学聚会,发小聚会,微信群线下聚会等,不同公司不同角色的人在一起交流,可能就会诞生心得机会,你的发小A可能是个设计,你会写代码,你同学他姑父公司需要做个小程序,这就可以成为你新的机会,你会有直接和社会交易的机会,你有成为老板的机会,哪怕很小,你也不会因为公司裁员而绝望,万一机会多了,你就会开始创业或者自由职业,所以老板一定要让你再公司待到9点,持续修炼垂直的技能,变成架构师,但是你没有接触到商务,或者叫靠自己获得收入的能力
26 |
27 | 就像打篮球一样,投篮就是最重要的得分机会,你是一个很好大学的毕业生,爱学习能力强,但是老板只训练你的传球,篮板和抢断能力,本来你可以接触到投篮的时间夺走,让你待在公司继续训练过人和篮板,哪怕晚上你效率低摸鱼都可以,只要你不会投篮,成为他的潜在对手就可以
28 |
29 | 所以996效率低老板是知道的,除了训练服从性之外,还让你成为彻底的打工人,哪怕上午摸鱼,晚上7点公司内部组织技术分享会学习都没关系,你只能持续训练你的传球技能,然后传球给你的老板,这真是定级的pua
30 |
31 | 再次建议所有学员不要加入996的公司,除了工资,健康和法律问题,还有被彻底剥夺了社交的机会,失去了多元发展的机会,我也建议所有的程序员,前端学学后端,后端学学前端,这俩是能开发出完整产品的技术,然后看看《商业百科》《增长黑客》《启示录》《运营之光》《优势谈判》综合入个门,日常除了喜欢造轮子之外,可以好好思考一下,你现在做的业务,到底是怎么赚到钱的 这个能力其实真的很有用,说不定哪次聚会就有用
32 |
33 | #灵感 #稿件
--------------------------------------------------------------------------------
/docs/public/site.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
50 |
51 |
--------------------------------------------------------------------------------
/docs/interview/index.md:
--------------------------------------------------------------------------------
1 | # 面试辅导课
2 |
3 | 1. 一次1V1深度面试 (技术摸底)
4 | 2. 定制学习计划 ,职业规划
5 | 3. 社群技术答疑 & 分享
6 | 4. 常见题目讲解分析
7 | 5. 简历点评 & 优化
8 |
9 |
10 |
11 |
12 |
13 |
15 |
16 | ## 面试小技巧
17 | 1. 一个简单的面试题如何由浅入深
18 | 2. 如何设计一个组件/数据结构
19 | 3. 一个问题你不会如何分析
20 | 4. 软技能 & 其他
21 |
22 | ## 面试考察什么
23 | 1. 八股文
24 | - 考的就是你有没有背过,算是一个基础能力, 虽然诟病多,但是删选效率高
25 | - 防抖节流,Promise,响应式... 多练
26 | 2. 算法 & 网络
27 | 1. 计算机基础,算法多背点刷题公式,就像高中三角函数一样,背公式,然后套题
28 | 2. 网络去看图解http和图解tcp入个门
29 | 3. 实战踩坑能力
30 | 1. 这个就是你的工作经验,比如你在工作中遇到了什么问题,怎么解决的
31 | 4. 系统设计 & 源码相关
32 | 1. 源码本身需要更高的视野,包括框架,组件库,脚手架...
33 |
34 | 
35 |
36 |
37 | ## 面试题
38 | 不断更新
39 | 1. 常见八股文
40 | 2. Promise相关
41 | 3. SSR相关
42 | 4. 项目相关
43 | 5. TS相关
44 | 6. ...
45 |
46 |
47 |
48 | ## 好的面试
49 | 好的面试就是问你简历上写的东西,问到你不会为止
50 |
51 | 老是问你简历没写或者不会的面试官,赶紧说拜拜
52 | ## 如何回答面试题
53 |
54 | ## 面试如何驱动学习
55 |
56 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/Word.vue:
--------------------------------------------------------------------------------
1 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 | 英
44 | 美
45 | How
46 |
47 |
48 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/NotFound.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
404
9 |
这就触碰到我知识的盲区了
10 |
11 |
12 | 不过你可以加我一起探讨学习
13 |
14 |
15 | 前端热门面试题和面试技巧
16 | Vue React Vite热门框架原理
17 | 企业级项目实战+性能优化
18 | 更自由的前端职业生涯
19 |
20 |
21 |
22 |
23 |
24 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/docs/interview/js/gray.md:
--------------------------------------------------------------------------------
1 | # 网页部分置灰
2 |
3 |
4 | 最近有很多网站都实现了全体置灰,都用到了filter: grayscale属性来实现,我们直接在网页html上加上这些属性就可以
5 |
6 |
7 | ```javascript
8 | let style = document.createElement('style')
9 | let graySelector = 'gray-filter'
10 | style.setAttribute('type', 'text/css')
11 | // style.setAttribute('data-vite-dev-id', id)
12 | style.textContent = `.${graySelector}{
13 | -webkit-filter: grayscale(100%);
14 | -moz-filter: grayscale(100%);
15 | -ms-filter: grayscale(100%);
16 | -o-filter: grayscale(100%);
17 | filter: grayscale(100%);
18 | -webkit-filter: gray;
19 | filter: gray;
20 | -webkit-filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
21 | filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
22 | }`
23 | document.head.appendChild(style)
24 |
25 | let root = document.querySelector('html')
26 | let btn = document.querySelector('#set-gray')
27 | btn && btn.addEventListener('click',()=>{
28 | console.log(root.className)
29 | if(root.className.indexOf(graySelector)>-1){
30 | root.className = root.className.replace(graySelector,'')
31 | }else{
32 | root.className += ' '+graySelector
33 | }
34 | },false)
35 |
36 |
37 | function setGray(){
38 | let filter = ['#not-gray2','.not-gray3']
39 |
40 | let doms = filter.reduce((acc,cur)=>{
41 | let dom = [...document.querySelectorAll(cur)].forEach(d=>{
42 | d.isGary = false
43 | while(d.parentNode){
44 | if(d.parentNode.isGary){
45 | d.isGary = true
46 | break
47 | }
48 | d = d.parentNode
49 | }
50 | })
51 | },[])
52 |
53 | setTimeout(()=>{
54 | setGray()
55 | },1000)
56 | ```
57 |
58 |
59 |
60 | ## 首屏灰色,滚动的时候第二屏彩色
61 |
62 | ## 某个特定selector不灰色
63 |
64 | 这个属于特殊需求,比如某个logo是彩色,或者某几个区域,这时候就不能无脑的全局置灰了,这时候就需要配置选择器
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
--------------------------------------------------------------------------------
/docs/interview/js/limit.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | https://www.npmjs.com/package/throat
5 |
6 |
7 | ```ts{1,4,5-8}
8 | export async function asyncPool- ({
9 | concurrency,
10 | items,
11 | fn
12 | }: {
13 | concurrency: number
14 | items: Item[]
15 | fn: (item: Item) => Promise
16 | }): Promise {
17 | const promises: Promise[] = []
18 | const pool = new Set>()
19 | for (const item of items) {
20 | const promise = fn(item)
21 | promises.push(promise)
22 | pool.add(promise)
23 | const clean = () => pool.delete(promise)
24 | promise.then(clean, clean)
25 | if (pool.size >= concurrency) await Promise.race(pool)
26 | }
27 | return Promise.all(promises)
28 | }
29 |
30 | ```
31 |
32 | ```js
33 |
34 |
35 | function limit(maxCount){
36 | // [,5]
37 | // [2,34,]
38 | let queue = []
39 | let activeCount = 0
40 |
41 | const next = ()=>{
42 | //下一个任务
43 | activeCount--
44 | if(queue.length>0){
45 | queue.shift()()
46 | }
47 | }
48 | const run = async (fn,resolve,args)=>{
49 | //执行一个函数
50 | activeCount++
51 | const result = (async()=>fn(...args))()
52 | resolve(result)
53 | await result
54 | next() //下一个
55 | }
56 | const push = async (fn,resolve,args)=>{
57 | queue.push(run.bind(null,fn,resolve,args))
58 | if(activeCount0){
59 | // 队列没满 并且还有任务 启动任务
60 | queue.shift()()
61 | }
62 | }
63 |
64 | let runner = (fn,...args)=>{
65 | return new Promise((resolve)=>{
66 | push(fn,resolve,args)
67 | })
68 | }
69 | return runner
70 |
71 |
72 | }
73 | async function sleep(n,name='test'){
74 | return new Promise(resolve=>{
75 | console.log(n,name,'start')
76 | setTimeout(()=>{
77 | console.log(n,name,'end','-------------')
78 | resolve({n,name})
79 | },n*1000)
80 | })
81 | }
82 |
83 | async function start(){
84 | let runner = limit(2) //并发量是3
85 | let tasks = [
86 | ()=> sleep(1,'吃饭'),
87 | ()=> sleep(3,'睡觉'),
88 | ()=> sleep(5,'打游戏'),
89 | ()=> sleep(3.5,'学习算法'),
90 | ()=> sleep(4,'学习Vue和React'),
91 | ].map(runner)
92 | let result = await Promise.all(tasks)
93 | console.log(result,'end')
94 | }
95 | // @think 如果任务有优先级呢
96 | start()
97 |
98 | ```
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 | deploy.sh
9 | scripts/bili-live.js
10 | scripts/youtube.js
11 | scripts/db.json
12 | *.mp3
13 | pnpm-lock.yaml
14 | # Diagnostic reports (https://nodejs.org/api/report.html)
15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
16 |
17 | # Runtime data
18 | pids
19 | *.pid
20 | *.seed
21 | *.pid.lock
22 |
23 | # Directory for instrumented libs generated by jscoverage/JSCover
24 | lib-cov
25 |
26 | # Coverage directory used by tools like istanbul
27 | coverage
28 | *.lcov
29 |
30 | # nyc test coverage
31 | .nyc_output
32 |
33 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
34 | .grunt
35 |
36 | # Bower dependency directory (https://bower.io/)
37 | bower_components
38 |
39 | # node-waf configuration
40 | .lock-wscript
41 |
42 | # Compiled binary addons (https://nodejs.org/api/addons.html)
43 | build/Release
44 |
45 | # Dependency directories
46 | node_modules/
47 | jspm_packages/
48 |
49 | # TypeScript v1 declaration files
50 | typings/
51 |
52 | # TypeScript cache
53 | *.tsbuildinfo
54 |
55 | # Optional npm cache directory
56 | .npm
57 |
58 | # Optional eslint cache
59 | .eslintcache
60 |
61 | # Microbundle cache
62 | .rpt2_cache/
63 | .rts2_cache_cjs/
64 | .rts2_cache_es/
65 | .rts2_cache_umd/
66 |
67 | # Optional REPL history
68 | .node_repl_history
69 |
70 | # Output of 'npm pack'
71 | *.tgz
72 |
73 | # Yarn Integrity file
74 | .yarn-integrity
75 |
76 | # dotenv environment variables file
77 | .env
78 | .env.test
79 |
80 | # parcel-bundler cache (https://parceljs.org/)
81 | .cache
82 |
83 | # Next.js build output
84 | .next
85 |
86 | # Nuxt.js build / generate output
87 | .nuxt
88 | dist
89 |
90 | # Gatsby files
91 | .cache/
92 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
93 | # https://nextjs.org/blog/next-9-1#public-directory-support
94 | # public
95 |
96 | # vuepress build output
97 | .vuepress/dist
98 | .vuepress/
99 | docs/.vitepress/cache
100 | # Serverless directories
101 | .serverless/
102 |
103 | # FuseBox cache
104 | .fusebox/
105 |
106 | # DynamoDB Local files
107 | .dynamodb/
108 |
109 | # TernJS port file
110 | .tern-port
111 |
--------------------------------------------------------------------------------
/docs/react/intro/01.intro.md:
--------------------------------------------------------------------------------
1 | # React入门学习
2 | 花果山大圣
3 |
4 | ---
5 |
6 |
7 |
8 | ## React是什么
9 |
10 | https://reactjs.org/
11 |
12 | https://beta.reactjs.org/
13 |
14 | 全球使用率都很高的热门前端框架,进阶必备
15 |
16 | 视图层,高效的渲染网页 & 更新,良好的开发体验
17 |
18 | 组件化 & 虚拟Dom & 跨端 & ConCurrent ...
19 |
20 | `UI = f(state)`
21 |
22 | ---
23 |
24 | 阿里,字节,腾讯等大厂必备
25 |
26 | 1. 生态齐全
27 | 2. 成功案例
28 | 3. 跨端(Native)
29 |
30 | 核心:组件化 + 工具函数(Hooks)
31 |
32 |
33 |
34 |
35 | ---
36 |
37 | ## 第一个React应用
38 |
39 | #### 学前知识(自检)
40 |
41 | 1. Javascript
42 | 1. 模块化
43 | 2. 箭头函数
44 | 3. 解构赋值
45 | 4. 常见数组和对象操作 ( map, filter...)
46 | 5. async + await && Promise
47 | 6. ...
48 | 2. HTML 和 CSS
49 | 3. Nodejs + VSCode + Chrome开发
50 |
51 | ---
52 |
53 | ## 环境
54 |
55 | ```bash
56 | ❯ node -v
57 | v16.17.1
58 | ❯ npm -v
59 | 8.15.0
60 | ❯ pnpm -v
61 | 7.13.4
62 | ```
63 |
64 | 官方的cra,我更喜欢用vite (入门区别不大)
65 | ```bash
66 | npm create vite@latest
67 | # or
68 | pnpm create vite
69 | ```
70 |
71 | ---
72 |
73 | ## React的基本代码
74 | 1. React组件
75 | 2. React渲染组件
76 | 3. JSX
77 |
78 | ---
79 |
80 |
81 | ## class组件和function组件
82 | React组件的两种写法
83 | 1. 类写法
84 | 2. 函数写法(主流,重点学习)
85 |
86 |
87 | 组件的进阶
88 | 1. 组件 & 模块
89 | 2. 组件嵌套
90 | 3. Props & State
91 | 4. 积木式开发
92 |
93 | ---
94 |
95 | 
96 |
97 | ---
98 |
99 | ## JSX是什么
100 | 长得像HTML,本质是JS
101 |
102 | 1. 基本语法
103 | 2. {}
104 | 3. css
105 | 4. 循环渲染
106 | 5. 条件渲染
107 |
108 |
109 | ---
110 |
111 |
112 | ## 处理用户交互 && 事件处理
113 | 1. 用户输入
114 | 2. 事件绑定
115 | 3. Hooks尝鲜
116 | 4. 复杂对象和数组的更新
117 |
118 | ---
119 |
120 | ## useEffect副作用
121 |
122 | 副作用:`UI = f(state, effect)`
123 |
124 | ```js
125 | useEffect(()=>{
126 | 副作用变了之后,执行的代码
127 | },[deps])
128 |
129 | ```
130 |
131 | 本地存储实现
132 |
133 | ---
134 |
135 | ## 其他API
136 |
137 | 值:`useState`,useContext,useReducer, useRef ...
138 |
139 | 副作用:`useEffect`,useLayoutEffect ...
140 |
141 | 性能优化 `useMemo`, `useCallback` ...
142 |
143 | 优先级:useTransition, useDeferredValue ....
144 |
145 | ---
146 |
147 | ## 下一步
148 | React生态
149 | 1. 工程化工具Vite & Webpack
150 | 2. 路由
151 | 3. 数据流
152 | 4. CSS
153 | 5. 组件库
154 | 6. 网络请求
155 | 7. React进阶API (优化)
156 | 8. 组件化进阶
157 | 9. 封装自己的Hooks
158 | ...
159 |
--------------------------------------------------------------------------------
/docs/project/vue-bili.md:
--------------------------------------------------------------------------------
1 | # Vue3+TS实现B站项目
2 |
3 |
4 | ---
5 |
6 | ## 项目技术栈和初始化
7 |
8 | 1. Vite
9 | 2. Typescript
10 | 3. Pinia
11 | 4. Vue-router
12 | 5. Ant-design-vue
13 |
14 | ---
15 |
16 | ## 下一步
17 | 1. 规范搭建
18 | 2. 功能实现 & 网络调试
19 | 3. 项目优化
20 | 4. 发布部署
21 | 5. 总结归纳
22 |
23 | ---
24 |
25 | ---
26 |
27 | ## 项目初始化
28 |
29 | 使用create-vite初始化
30 |
31 | `pnpm create vite-app vue-bili --template vue-ts`
32 | ---
33 |
34 |
35 |
36 | ## 项目目录规范
37 | ```
38 | pages 页面
39 | components 组件
40 | routes 路由
41 | hooks hooks工具库
42 | utils 函数工具库
43 | api 网络请求
44 | layout 布局
45 | types 类型定义(TS)
46 | store 数据流
47 | ....
48 |
49 | ```
50 | ---
51 |
52 | ## css解决方案
53 |
54 | 1. css
55 | 2. 行内样式
56 | 3. less sass stylus预处理
57 | 4. css in js
58 | 5. tailwindcss原子化css
59 |
60 |
61 |
62 | ---
63 | ## 各种规范lint
64 |
65 | 1. 代码规范eslint (prettier)
66 | 2. stylelint (自行体验)
67 | 3. git hooks `husky`
68 | 4. lint-staged只处理缓存区的代码
69 | 5. git commit信息格式 自己写脚本 or commitlint
70 | 6. commitizen (自行体验)
71 |
72 | ---
73 |
74 |
75 | ## Git 校验
76 | 使用Husky在代码提交的时候,执行校验
77 |
78 | ```sh
79 | pnpm i husky -D
80 | husky install
81 | npx husky add .husky/pre-commit "npm run lint"
82 |
83 | ```
84 |
85 | ```json
86 | "scripts": {
87 | // install自动执行
88 | "prepare": "husky install"
89 | }
90 | ```
91 |
92 | ---
93 |
94 | ## lint-staged 防止每次都全量
95 |
96 | ```json
97 | "lint-staged": {
98 | "**/*.{js,jsx,tsx,ts}": [
99 | "npm run lint"
100 | ]
101 | }
102 | ```
103 |
104 | ---
105 |
106 | ## git commit信息格式
107 | 方便自动生成changelog和团队协作
108 |
109 | ```sh
110 | :
111 | ```
112 | type可以是下面的值
113 | 1. feat: 新功能。
114 | 2. fix: Bug修复
115 | 3. docs: 文档修改
116 | 4. perf: 性能优化
117 | 5. refactor: 代码重构
118 | 6. test: 测试代码
119 | 7. chore: 不知道是啥就写chore
120 |
121 | ---
122 |
123 | ## commitlint
124 |
125 | https://commitlint.js.org/#/
126 |
127 | 其实自己写也不费劲,参考
128 | https://github.com/vuejs/core/tree/main/scripts
129 |
130 | ```sh
131 | pnpm install -D commitlint @commitlint/config-conventional @commitlint/cli
132 |
133 | npx husky add .husky/commit-msg 'npx --no -- commitlint --edit ${1}'
134 |
135 | ```
136 |
137 | `.commitlintrc`
138 |
139 | ```json
140 | {
141 | "extends": ["@commitlint/config-conventional"]
142 | }
143 | ```
144 |
145 |
146 |
147 | 1. 目录规范搭建
148 | 2. 好用的脚本工具
149 | 3. 工程化系统搭建(插件和工具)
150 |
151 |
--------------------------------------------------------------------------------
/docs/.vitepress/util.ts:
--------------------------------------------------------------------------------
1 |
2 | export const biliSvg = ``
5 |
6 | export const telegramSvg = ``
--------------------------------------------------------------------------------
/docs/public/gray1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Document
9 |
10 |
11 |
58 |
59 |
60 |
61 |
62 | 联系作者
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
82 |
83 |
88 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/theme.css:
--------------------------------------------------------------------------------
1 | .iframe,iframe{
2 | width:100%;
3 | height:666px;
4 |
5 | }
6 | .VPDoc.has-aside .content-container{
7 | max-width:1000px !important;
8 | }
9 | .sbtn{
10 | pointer:cursor;
11 | border-color: var(--vp-button-brand-border);
12 | color: var(--vp-button-brand-text);
13 | background-image: linear-gradient(90deg,rgba(255,0,105,.99) 0,#ff7a00 99%);
14 | border-radius: 24px;
15 | padding: 0 20px;
16 | line-height: 38px;
17 | font-size: 14px;
18 | display: inline-block;
19 | border: 1px solid transparent;
20 | text-align: center;
21 | font-weight: 500;
22 | white-space: nowrap;
23 | transition: color 0.25s, border-color 0.25s, background-color 0.25s;
24 | z-index:100;
25 | }
26 | .course-btn {
27 | pointer:cursor;
28 | border-color: var(--vp-button-brand-border);
29 | color: var(--vp-button-brand-text);
30 | /* background-color: var(--vp-button-brand-bg); */
31 | /* border-radius: 20px; */
32 | background-image: linear-gradient(90deg,rgba(255,0,105,.99) 0,#ff7a00 99%);
33 | border-radius: 24px;
34 | /* color: #fff; */
35 | padding: 0 20px;
36 | line-height: 38px;
37 | font-size: 14px;
38 | display: inline-block;
39 | border: 1px solid transparent;
40 | text-align: center;
41 | font-weight: 500;
42 | white-space: nowrap;
43 | transition: color 0.25s, border-color 0.25s, background-color 0.25s;
44 | position:absolute;
45 | right:0;
46 | z-index:100;
47 | }
48 | /* .aside{
49 | display:none !important;
50 | } */
51 | /* html{
52 | filter: grayscale(100%);
53 | -webkit-filter: grayscale(100%);
54 | -moz-filter: grayscale(100%);
55 | -ms-filter: grayscale(100%);
56 | -o-filter: grayscale(100%);
57 | filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
58 | -webkit-filter: grayscale(1);
59 | filter:gray !important;
60 | }
61 | .VPImage{
62 | filter:none;
63 | -webkit-filter: none;
64 | } */
65 |
66 | .btn{
67 | padding:5px 8px;
68 | color:white;
69 | background: var(--vp-c-brand);
70 | border: 1px solid var(--vp-c-brand);
71 | border-radius: 4px;
72 | }
73 |
74 | .vp-doc h2{
75 | margin:16px 0;
76 | }
77 |
78 | .gpt-fix-window{
79 | position:fixed;
80 | right:10px;
81 | bottom:400px;
82 | width:280px;
83 | list-style:none;
84 | /* border:1px solid var(--vp-c-brand); */
85 | padding:10px;
86 | font-size:14px;
87 | }
88 | .gpt-item{
89 | display:inline-block;
90 | float:right;
91 | font-size:16px;
92 | }
93 | .vp-doc p{
94 | margin:6px 0;
95 | line-height:26px;
96 | font-size:18px;
97 | }
98 | h4{
99 | font-size:24px;
100 | margin-top:20px;
101 | }
102 | /* .VPNav{
103 | display:none !important;
104 | }
105 | .VPContent{
106 | padding-top:10px !important;
107 | } */
108 |
109 | pre {
110 | white-space: pre-wrap;
111 | word-wrap: break-word;
112 | }
113 |
114 | hr{
115 | display:none;
116 | }
117 |
118 | .vp-doc li strong{
119 | color:rgba(233, 30, 44, 1);
120 | }
121 |
--------------------------------------------------------------------------------
/docs/vue/index.md:
--------------------------------------------------------------------------------
1 | # Vue3 + Typescript + Vite4企业级实战
2 |
3 |
4 | 一个从入门到专家的Vue3企业级实战课程
5 |
6 |
7 | ## 什么是企业级的项目
8 | 
9 |
10 |
11 | ## 课程亮点和收获
12 |
13 | :::tip 一次性学完Vue3进阶的项目和实战难点
14 |
15 | 让你拥有一个可以写入简历的项目和组件库
16 | - Vue3 全家桶入门
17 | - 企业级项目实战全流程
18 | - 企业级项目基建:规范,工程化,Typescript
19 | - 功能实现、复杂场景优化
20 | - 性能优化、发布部署...
21 | - 设计和开发自己的组件库
22 | - Vue3 生态框架一览 (Nuxt)
23 | :::
24 |
25 | :::tip 技术栈
26 |
27 | - [Vue3](https://vuejs.org/)
28 | - [VueRouter](https://router.vuejs.org/)
29 | - [Pinia](https://pinia.vuejs.org/)
30 | - [AntDesignVue](https://www.antdv.com/components/overview)
31 | - [Vite4](https://vitejs.dev/) / [Nuxt.js](https://nuxt.com/)
32 | - [Typescript](https://www.typescriptlang.org/) + [Pnpm](https://pnpm.io/) + [Tailwindcss](https://tailwindcss.com/) +各种规范库
33 | :::
34 |
35 |
36 |
37 | ## 课程架构
38 | 
39 |
40 | :::tip 适合学员
41 | 0~5年经验的前端,希望构建前端核心竞争力
42 |
43 | 有一定的Javascript基础,想要深入Vue框架,成为Vue生态高手
44 |
45 | 提高面试成功率,进大厂
46 | :::
47 |
48 | :::tip 学习前提
49 | - 掌握基础的前端基础知识
50 | - 掌握ES6基础知识
51 | - 使用Vue开发过简单的项目
52 | - 有Node.js和Npm的使用经验
53 | :::
54 |
55 |
56 | :::tip 讲授方式
57 |
58 |
59 | - 从入门到实战 循序渐进
60 | - 理论和实战结合 体系化提升
61 | - 手写代码,力求让大家知其然也知其所以然
62 |
63 | :::
64 |
65 | :::tip 你将获得
66 | - 企业级的Vue项目实战
67 | - 企业级前端架构设计
68 | - 一个自己的Vue组件库 (类Element3)
69 | - 更高的前端视野 + 前端核心竞争力 + 良好的学习习惯
70 | - 一个可以写入简历的亮点的开源项目,不定期的简历点评, 让你面试游刃有余
71 | - 不定期加餐 (新框架 新技术)
72 | :::
73 | ## 详细大纲
74 |
75 |
76 | 0. 开课介绍
77 | 1. Vue3 技术栈介绍
78 | 1. Vue实战 & 第一个Vue应用
79 | 2. 什么是组件
80 | 3. composition是什么
81 | 4. 处理用户交互
82 | 5. 事件处理
83 | 6. script-setup语法
84 | 7. Vue3 带来了什么
85 | 2. Vue3 全家桶进阶
86 | 1. 工程化工具Vite
87 | 2. 路由机制 Vue-Roter
88 | 3. 数据管理 Pinia
89 | 4. AntDesignVue实战
90 | 5. Vue进阶API
91 | 6. 组件化进阶
92 | 7. 封装自己的Hooks工具库
93 | 8. 项目实战
94 | 9. 项目打包
95 | 3. 企业级实战
96 | 1. 实现CRUD后,我们能做什么
97 | 2. 性能如何提升
98 | 3. 开发效率如何提高
99 | 4. 如何提高开发质量
100 | 5. 用户体验的提升
101 | 6. 相关技术栈和工具介绍
102 | 4. Vue和Typescript必知必会
103 | 1. 为什么我们需要Typescript
104 | 2. Typescript入门类型
105 | 3. Typescript函数
106 | 4. 宿主环境的类型
107 | 5. Typescript泛型入门
108 | 6. 好用的类型工具函数
109 | 7. Vue中的Typescript
110 | 5. 企业级项目规范搭建
111 | 1. Vite + pnpm
112 | 2. 代码规范
113 | 3. 目录规范搭建
114 | 4. 好用的脚本工具
115 | 5. 工程化系统搭建
116 | 6. 企业级项目实战
117 | 1. 权限系统
118 | 2. 大数据量如何渲染
119 | 3. 大文件如何上传
120 | 4. Vue前端性能优化
121 | 5. 用户体验优化
122 | 6. Vue前端监控
123 | 7. 网络请求封装和优化
124 | 8. 工程化Vite插件定制
125 | 9. 自动化部署 CI / CD
126 | 7. Vue3 组件库 (Element3)
127 | 1. 组件库AntDesignVue学习
128 | 2. 组件库设计概览
129 | 3. 技术选型讨论
130 | 4. 通用组件渲染 (Button,Layout
131 | 5. 表单组件(Form,Input
132 | 6. 弹窗组件(Modal,Notification
133 | 7. 表格组件(Table
134 | 8. 树形组件(Tree
135 | 9. 组件库文档
136 | 10. 组件库发布
137 | 8. 新技术&框架探讨
138 | 1. Nuxt3介绍
139 | 2. Svelte
140 | 3. 前端全栈框架
141 | 4. Vue生态有意思的库(持续更新)
142 | 9. 课程总结
143 | 1. Vue进阶带来了什么
144 | 2. 不定期面试提高
145 | 3. 课程总结与回顾
146 | 4. 头脑风暴
147 |
148 |
149 | 
150 |
--------------------------------------------------------------------------------
/docs/react/index.md:
--------------------------------------------------------------------------------
1 | # React18 + Typescript + Vite4企业级实战
2 |
3 |
4 | 一个从入门到专家的React企业级实战课程
5 |
6 |
7 | ## 什么是企业级的项目
8 | 
9 |
10 |
11 | ## 课程亮点和收获
12 |
13 | :::tip 一次性学完React进阶的项目和实战难点
14 |
15 | 让你拥有一个可以写入简历的项目和组件库
16 | - React18全家桶入门
17 | - 企业级项目实战全流程
18 | - 企业级项目基建:规范,工程化,Typescript
19 | - 功能实现、复杂场景优化
20 | - 性能优化、发布部署...
21 | - 设计和开发自己的组件库
22 | - React生态框架一览 (Next,Umi)
23 | :::
24 |
25 | :::tip 技术栈
26 |
27 | - [React18](https://beta.reactjs.org/)
28 | - [React-router 6](https://reactrouter.com/en/main)
29 | - [Redux + Tookit](https://redux-toolkit.js.org/) / [zustand](https://zustand-demo.pmnd.rs/) / [Jotai](https://jotai.org/) / [Recoil](https://recoiljs.org/) / [Valtio](https://valtio.pmnd.rs/)...
30 | - [AntDesign 5](https://ant.design/)
31 | - [Vite4](https://vitejs.dev/) / [Umi4](https://v2.umijs.org/) / [Next.js](https://nextjs.org/) / [Webpack](https://webpack.js.org/)
32 | - [Typescript](https://www.typescriptlang.org/) + [Pnpm](https://pnpm.io/) + [Tailwindcss](https://tailwindcss.com/) +各种规范库
33 | :::
34 |
35 |
36 |
37 | ## 课程架构
38 | 
39 |
40 | :::tip 适合学员
41 | 0~5年经验的前端,希望构建前端核心竞争力
42 |
43 | 有一定的Javascript基础,想要深入React18框架,成为React生态高手
44 |
45 | 提高面试成功率,进大厂
46 | :::
47 |
48 | :::tip 学习前提
49 | - 掌握基础的前端基础知识
50 | - 掌握ES6基础知识
51 | - 使用React开发过简单的项目
52 | - 有Node.js和Npm的使用经验
53 | :::
54 |
55 |
56 | :::tip 讲授方式
57 |
58 |
59 | - 从入门到实战 循序渐进
60 | - 理论和实战结合 体系化提升
61 | - 手写代码,力求让大家知其然也知其所以然
62 |
63 | :::
64 |
65 | :::tip 你将获得
66 | - 企业级的React项目实战
67 | - 企业级前端架构设计
68 | - 一个自己的React组件库
69 | - 更高的前端视野 + 前端核心竞争力 + 良好的学习习惯
70 | - 一个可以写入简历的亮点的开源项目,不定期的简历点评, 让你面试游刃有余
71 | - 不定期加餐 (新框架 新技术)
72 | :::
73 | ## 详细大纲
74 |
75 |
76 | 0. 开课介绍
77 | 1. React18技术栈介绍
78 | 1. React实战 & 第一个React应用
79 | 2. 什么是组件
80 | 3. JSX是什么
81 | 4. 处理用户交互
82 | 5. 事件处理
83 | 6. React18带来了什么
84 | 2. React全家桶进阶
85 | 1. 工程化工具Vite
86 | 2. 路由机制
87 | 3. 数据流讨论
88 | 4. AntDesign5实战
89 | 5. React进阶API
90 | 6. 组件化进阶
91 | 7. 封装自己的Hooks
92 | 8. 项目实战
93 | 9. 项目打包
94 | 3. 企业级实战
95 | 1. 实现CRUD后,我们能做什么
96 | 2. 性能如何提升
97 | 3. 开发效率如何提高
98 | 4. 如何提高开发质量
99 | 5. 用户体验的提升
100 | 6. 相关技术栈和工具介绍
101 | 4. React和Typescript必知必会
102 | 1. 为什么我们需要Typescript
103 | 2. Typescript入门类型
104 | 3. Typescript函数
105 | 4. 宿主环境的类型
106 | 5. Typescript泛型入门
107 | 6. 好用的类型工具函数
108 | 7. React中的Typescript
109 | 5. 企业级项目规范搭建
110 | 1. Vite + pnpm
111 | 2. 代码规范
112 | 3. 目录规范搭建
113 | 4. 好用的脚本工具
114 | 7. 工程化系统搭建
115 | 6. 企业级项目实战
116 | 1. 权限系统
117 | 2. 大数据量如何渲染
118 | 3. 大文件如何上传
119 | 4. React前端性能优化
120 | 5. 用户体验优化
121 | 6. React前端监控
122 | 7. 网络请求封装和优化
123 | 8. 工程化Vite插件定制
124 | 9. 自动化部署 CI / CD
125 | 7. React18 组件库
126 | 1. AntDesign5学习
127 | 2. 组件库设计概览
128 | 3. 技术选型讨论
129 | 4. 通用组件渲染 (Button,Layout
130 | 5. 表单组件(Form,Input
131 | 6. 弹窗组件(Modal,Notification
132 | 7. 表格组件(Table
133 | 8. 树形组件(Tree
134 | 9. 组件库文档
135 | 10. 组件库发布
136 | 8. 新技术&框架探讨
137 | 1. Next.js介绍
138 | 2. Umijs介绍
139 | 3. Solidjs
140 | 4. 前端全栈框架
141 | 5. React在Web3生态的库
142 | 6. React生态有意思的库(持续更新)
143 | 9. 课程总结
144 | 1. React进阶带来了什么
145 | 2. 不定期面试提高
146 | 3. 课程总结与回顾
147 | 4. 头脑风暴
148 |
149 |
150 | 
151 |
152 |
153 |
154 |
--------------------------------------------------------------------------------
/docs/source/index.md:
--------------------------------------------------------------------------------
1 | # 前端源码漫游记
2 |
3 | 课程+社群答疑,一次性学完热门前端框架原理
4 |
5 | ## 🔥为什么要学习源码
6 |
7 | 1. 如果你想学习Vue、React、Vite、Rollup等热门框架的原理
8 | 2. 如果你想面试的时候和面试官谈笑风生
9 | 3. 如果你想构建自己的 __前端核心竞争力__
10 | 4. 前端架构师必备的技能,让你的简历更加亮眼 (定制插件,脚手架,性能优化)
11 | 5. 源码设计思想 + 手写实战,来一次性掌握这些源码吧
12 |
13 | ## 🏗️课程架构图
14 |
15 | 1. 了解前端框架的分层
16 | 2. 前端框架的发展历程
17 | 3. 自己实现Vue (reactivity响应式 + compiler编译+runtine运行时)
18 | 4. 自己实现React(组件化 + Fiber + Hooks)
19 | 5. 自己实现Vite ( 脚手架 + 预打包 + esbuild + 热更新 + 插件)
20 | 6. 自己实现Rollup 、Webpack (词法分析 + Tree-shaking + 打包)
21 | 7. 自己实现全栈框架架构 (文件路由,SSR,Island架构、性能优化)
22 | 8. 全面学习和了解框架的工程化架构 (Monorepo,pnpm,Typescript)
23 | 9. 单元测试驱动,全面提升综合实力
24 |
25 | 
26 |
27 |
28 |
29 |
30 | ## 主讲老师
31 |
32 | 
33 |
34 | ## 适合学员
35 |
36 | 0~5年经验的前端,希望构建前端核心竞争力
37 |
38 | 有一定的Javascript基础,想要深入框架设计原理 , 做开源的前端
39 |
40 | 提高面试成功率,进大厂
41 |
42 | ## 你将获得
43 |
44 | 热门前端框架的原理,构建前端核心竞争力
45 |
46 | 18次直播授课 + 录播课程
47 |
48 | 带你写框架源码的体验 + 良好的学习习惯
49 |
50 | 一个可以写入简历的亮点的开源项目,不定期的简历点评, 让你面试游刃有余
51 |
52 | 不定期加餐 (新框架 新技术)
53 |
54 | ## 课程大纲 (11.3正式开课)
55 |
56 | |课程大纲|详细介绍|
57 | |-|-|
58 | |0. 开课 & 环境搭建 & 参考资料
(开班前在线见面会)|1. 前置知识学习介绍
2. Typescript
3. Vitest
4. Unbuild
5. Pnpm
6. Rollup
7. 前端调试技巧
头脑风暴|
59 | |1. 前端框架设计要素|1. 前端框架现状分析
2. 一个清单看前端框架
3. 响应式原理分析
4. 框架的插件机制设计
5. 前端框架设计要素分析
6. 编译时 和 运行时
7. 性能 & 代码体积|
60 | |2. Vue3 框架分析和响应式实现|1. Proxy语法
2. 副作用收集和触发 tack和trigger
3. 副作用的清理
4. effect嵌套和调度
5. Vue3.2的位运算优化|
61 | |3. Vue3 组件化 & 虚拟Dom|1. 组件到底是什么
2. 组件的创建与更新
3. 生命周期和props
4. 虚拟Dom的diff全流程分析
5. 从组件的本质看待组件库的设计|
62 | |4. Vue Compiler编译|1. 编译原理基础概念科普
2. AST的生成与解析
3. 代码生成
4. Vue的compiler中的静态标记优化
5. 常见的编译工具(babel,rollup...)|
63 | |5. React18 框架全家桶分析|1. JSX 和 template
2. React的设计理念
3. React中的Fiber,Hooks,Concurrenrt
4. React中组件的渲染|
64 | |6. React18更新流程|1. 调度逻辑
2. fiber和requestIdleCallback
3. useState的实现
4. React18中的优先级制度
5. React18的更新机制|
65 | |7. React18中的hooks和事件系统|1. hooks设计理念
2. useState和useEffect
3. useCallback和useMemo
4. 新的hook use介绍
5. React的事件合成系统
6. React框架中的算法|
66 | |8. 前端框架中的特性设计|1. 数据流管理 (pinia redux)
2. 路由原理实现 (vue-router, react-router)
3. Context实现
4. 缓存组件的实现
5. 框架内部的性能优化|
67 | |9. 新一代框架原理展望和科普
头脑风暴和总结|1. 编译型框架:Svelte
2. 更简单的React: Solidjs
3. SSR & 同构框架的兴起:Next & Nuxt
4. 框架性能考虑的极致: 岛屿架构
5. Rust和Go等语言的入侵|
68 | |10. 前端工程化领域的发展|1. Webpack的设计理念
2. Rollup的tree-shaking
3. Vite的兴起和Bundless
4. 前端脚手架工具分析|
69 | |11. webpack框架分析|1. AST的遍历
2. 模块依赖关系管理
3. webpack代码生成
4. webpack的常用优化手段|
70 | |12. Vite原理手写(一)|1. 前端脚手架原理
2. 初始化代码
3. esbuild扫描模块依赖关系
4. 依赖预构建功能实现 |
71 | |13. Vite原理手写 (二)|1. Vite的插件机制
2. Vite 处理css文件
3. Vite处理 JSX/TSX
4. Vite 入力 Vue单文件组件
5. Vite的热更新实现|
72 | |14. Rollup 原理|1. 词法解析回顾
2. 模块依赖关系遍历和分析
3. tree-shaking如何实现
4. magic-string的使用|
73 | |15. 工程化工具总结和补充|1. 源码回顾和总结
2. bundless的展望
3. Vite生态介绍
4. 如何参与开源的生态建设|
74 | |16. 现代全栈框架的分析|1. Nuxt 和 Next 新特性
2. SSR的实现
3. 渲染方式一览 SSG, ISR, Pre-render
4. 手写island架构
5. 畅聊前端的未来|
75 | |17. 微前端原理与实现|1. 微前端框架机制和痛点分析
2. 基座应用的实现
3. Javascript沙箱
4. css沙箱
5. 数据流和优化
6. 业内微前端框架分析|
76 | |18. 课程总结|1. 框架原理带来了什么
2. unplugin开发插件 (兼容rollup,vite,webpack)
3. Vue扩展插件开发介绍
4. React扩展插件开发介绍
5. 课程总结与回顾
6. 头脑风暴|
77 |
78 |
79 | ## 购买须知
80 |
81 | 1. 直播课程有录播,可持续回看
82 | 2. 课程为虚拟内容服务,购买成功后不可退款,敬请原谅
83 | 3. 此课程是前端私教课的源码模块
84 |
85 |
86 | 
--------------------------------------------------------------------------------
/docs/life/2023.md:
--------------------------------------------------------------------------------
1 | # 2023
2 |
3 | 大家好,我是大圣,又要到了一年一度的总结时间,不过2022我好像没啥总结的,简单来说就是一整年都没有上班,做自由职业,写写文章录录课,整个生活都慢了下来,我也懒了,疫情期间躺平倒也怡然自得,看了挺多书,最近还学了学英语
4 |
5 | u1s1, 不上班还是挺舒服的,通勤和开无聊会的时间都用来看书,睡觉,打游戏了 (虽然挣钱还是上班多), 并且约其他自由职业小聚的时候,可以挑工作日人少的时候去,基本啥店都不用排队
6 |
7 | 年底被新冠gank了一波,好好规划一下2023把
8 |
9 | ```html
10 | 2019>
11 | <2020>
12 | <2021>
13 | <2022>永生难忘的三年, 但是我不会怀念它2022>
14 | 2021>
15 | 2020>
16 |
17 | <2023>
18 | <新的开始>
19 | <开心 />
20 | <免费开源教程
21 | :list=["Typescript","Web3","Vue3","React18","Node","小程序"]
22 | :platform=["小程序","FreeCodeCamp","B站","YouTube"]
23 | />
24 | <更专业的编程课程
25 | role="独立讲师"
26 | :list=["前端啃算法","源码漫游记","Vue3+TS实战&组件库",
27 | "React18+TS实战&组件库","Node进阶实战课",
28 | "前端全链路性能优化", "前端工程化..."]/>
29 | <断舍离 action="书架上200多本书都录视频推荐+送出去"/>
30 | <开源 target="把《前端源码漫游记》写完"/>
31 | <学英语 target="可以辅导学员找国外的远程" />
32 | <自媒体 target="争取周更"
33 | :playlists=["采访12个funnyCoder","读书推荐","开源教程","英语vlog..."]/>
34 | <写一本书 />
35 | <开发一个小型独立产品 techstack="React+Node+serverless" />
36 | <读书+照顾蘑菇+旅行+每年都减肥... />
37 | 新的开始>
38 | 2023>
39 |
40 | ```
41 |
42 | 由于是自由职业,所以主要收入还是录制课程,2023可以多元化一些
43 |
44 | 
45 |
46 | ## 自媒体
47 | 自媒体也定一些KPI吧,争取周更,定几个具体的话题吧
48 | 1. funnyCoder每月采访一个有趣的程序员
49 | 2. 书籍红黑榜,点评热门畅销书 & 技术书 并且抽奖送,一周一次吧
50 | - 争取把书架上200多本书都抽奖 or 送给朋友
51 | - Javascript 、CSS 、 Node.js大部分的书
52 | - 吴军博士全部的书
53 | - Python 、计算机基础的书
54 | - 教育 、写作、个人成长
55 | 3. 热门开源项目录制教程,优先英文文档,技术英语两手都要硬
56 | - [Vuejs官网](https://vuej-org/)
57 | - [Reactjs官网](https://b-a.reactjs.org/) (总感觉还没写完)
58 | - [Vite官网](https://vitejs.dev/)
59 | - [Type-challenges](https://github.com/type-challenges/type-challenges) 配套视频解答
60 | - [Vue-challenges](https://vuejs-challenges.netlify.app/) 视频解答
61 | - [Wtf-Solidity](https://wtf.academy/) web3教程
62 | - 小程序入门和实战教程
63 | - 热门文章共度 比如[Why React Re-Renders](https://www.joshwcomeau.com/react/why-react-re-renders/), [Islands Architecture](https://www.patterns.dev/posts/islands-architecture/#:~:text=Islands%20are%20a%20component-based%20architecture%20that%20suggests%20a,and%20scripts%20capable%20of%20rehydrating%20themselves%20after%20rendering.)
64 | - 其他大家喜欢的框架 & 教程 欢迎留言
65 | 4. 互联网科普 & 唠嗑视频
66 | - 科普互联网
67 | - 新技术科普
68 |
69 | ## 开发
70 |
71 | 自由职业那天起,就像做一个独立的小产品,希望2023能够发布一个mvp版本,现在有两个想法
72 | 1. 学英语相关的工具
73 | 2. 交互式的blog,有在线录制课程 & 讲解的功能
74 |
75 | 要求不高,借助Serverless跑起来 有用就行,正好好好调研一下业界内的免费和好用的开发资源,包括不仅限于 aircode, cloudflare,图床、数据库、翻译API、监控,支付等服务,应该挺有趣
76 |
77 |
78 | 然后开源方面可以对一些热门的框架做点力所能及的贡献,然后把我的[前端源码漫游记](https://github.com/course-dasheng/source-tour)写好完善,把前端热门的框架原理都造个轮子,作为学习教程
79 |
80 | ## 课程
81 | 2022因为各方面原因,我的个人效率也不是很高,很多内容拖延了,2023争取提高效率,维护&开发下列课程,争取做到质量过关
82 |
83 | 1. 前端学算法(更新)
84 | - leetcode刷题200,一次性解决大厂面试的算法题
85 | 2. [前端源码漫游记](/source/)
86 | - 一次性掌握前端热门框架原理
87 | - Vue3 + React + Vite + Rollup 源码手写 ...
88 | - Typescript + Pnpm + Monorepo + Vitest
89 | 3. [Vue3+Typescript高级工程师培养计划](/vue/)
90 | - 入门实战 + Typescrpt企业级实战
91 | - 性能优化 & 监控 & 项目亮点
92 | - 组件库实战
93 | 4. [React18+Typescript高级工程师培养计划](/react/)
94 | - 入门实战 + Typescrpt企业级实战
95 | - 性能优化 & 监控 & 项目亮点
96 | - 组件库实战
97 | 5. 前端全链路性能优化 (可能是个文字专栏)
98 | 6. Web3实战教程,把我2018年的教程更新改版一下
99 | 7. 面试专项提高(刷题 & 系统学习)
100 | 8. 和其他大佬合作课程,在谈的有【Vue3进阶】和【开源入门教程】
101 |
102 | 
103 |
104 | 
105 | ## 生活和学习
106 |
107 | 1. 多锻炼,减减肥,新的挑战
108 | 2. 学习英语
109 | - 以雅思作为目标,系统的学习英语,可以辅导学员找国外的远程,自己和学员都多条路
110 | - 试试英文输出
111 | 3. 放开了,得出去旅旅游了
112 | 4. 写一本书
113 | - Javascript入门实战相关
114 | - [玩转Vue3出版](http://gk.link/a/10BM3)
115 |
--------------------------------------------------------------------------------
/docs/public/ikun-danmu.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | KunBoard
7 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
《传 世 经 典》
76 |
发动技能:铁山靠
77 |
《梦开始的地方》
78 |
每一帧都是表情包
79 |
恭喜你找到了镇站之宝!!!
80 |
《永垂不朽》
81 |
万 恶 之 源
82 |
你干吗?
83 |
哈哈哈哈哈哈哈
84 |
披金成王,伴坤远航
85 |
第一首赞美家禽
86 |
87 |
88 |
89 |
134 |
135 |
136 |
--------------------------------------------------------------------------------
/docs/blog/tools.md:
--------------------------------------------------------------------------------
1 | ---
2 | sidebar: false
3 | prev: false
4 | next: false
5 |
6 | ---
7 | # 出海独立开发资源
8 |
9 | > 只是我准备用的,并不是最好的, 欢迎讨论和PR
10 | > Javascript技术栈+英语 一切皆有可能
11 |
12 | ## 开发模板(快速开发)
13 |
14 | > 地铁口摆摊赚到钱最重要,具体是卖袜子还是卖耳机,都是次要的
15 |
16 | | 模板作用 | 服务地址 | 备注 |
17 | |--- |--- |--- |
18 | | 网页Sass服务 | [Opensaas](https://opensaas.sh/)
[Shipfast(付费)](https://shipfa.st/)
[Supastarter(付费)](https://supastarter.dev/) | 免费
付费
付费 |
19 | | Chrome插件 | | |
20 | | App开发 | | |
21 | | 桌面客户端开发| | |
22 |
23 |
24 |
25 | ## 技术栈和模板
26 | > 我是前端 用的都是前端技术养活自己
27 |
28 | | 场景 | 框架 | 备注 |
29 | |--- |--- |--- |
30 | | 前端开发 | [Next.js](https://nextjs.org/) | 占有率最高的React开发框架 |
31 | | 后端开发 | [Nest.js](https://nestjs.com/) | Node.js框架 |
32 | | 组件库 | [tailwindcss](https://tailwindcss.com/)
[shadcn-ui](https://shadcn-ui.vercel.app/)
[mui](https://mui.com/zh/) | 快速开发 |
33 | | 鉴权| next-auth | |
34 | | Chrome插件开发 | | |
35 |
36 | https://github.com/PlasmoHQ/plasmo
37 |
38 |
39 |
40 |
41 |
42 | ## 好用的工具和服务
43 |
44 | > 启动初期减少花费
45 |
46 | | 服务名称 | 服务地址 | 服务描述 |
47 | |--- |--- |--- |
48 | | 前端&函数部署 | [Vercel](https://vercel.com/)
[Aircode](https://aircode.io/)
[zeabur](https://zeabur.com/)| |
49 | | 支付 | [stripe](https://stripe.com/)
[lemonsqueezy](https://www.lemonsqueezy.com/) | 企业资质
个人资质,手续费高点,有分销功能 |
50 | | 数据库 | [Supabase](https://supabase.com/) | 数据库
文件存储
auth|
51 | | 个人展示页 | [linktree](https://linktr.ee/) | |
52 | | 代码管理 | [github](https://github.com/) | |
53 | | CDN & 域名 | [⭐️Cloudflare](https://www.cloudflare.com/) | 还有存储 ddos pages worker等服务 |
54 | | 文档 | [飞书](https://www.feishu.cn/)
github+markdown | |
55 | | 邮件 | [resend](https://resend.com)
[mailgun](https://mailgun.com) | |
56 | | 图标和配图| [iconscout](https://iconscout.com/)
[devicon](https://devicon.dev/) | |
57 | | 网站设计| [Happyhues](https://www.happyhues.co/)
[Mobbin](https://mobbin.com/browse/ios/apps) | 配色选择
参考(抄袭)界面设计 |
58 | | 录屏| [focusee](https://gemoo.com/focusee/) | |
59 | | 网页分析| [Google Analytics](https://analytics.google.com/)
[beamanalytics](https://beamanalytics.io/)
[clarity](https://clarity.microsoft.com/)| |
60 |
61 |
62 |
63 |
64 | crisp
65 |
66 | ## 文章&推特推荐(打鸡血,找灵感)
67 | * [西方人到底有多喜欢单一功能的产品](https://twitter.com/nishuang/status/1692346895136408028)
68 | * [不上班的1000天](https://vikingz.me/1000-days/)
69 | * [如何注册海外公司](https://twitter.com/xqliu/status/1745648319026926044)
70 | * [你都做了啥项目](https://www.reddit.com/r/SideProject/comments/196nuzu/whats_your_project_and_how_much_did_yall_make/)
71 | * [一个独立开发者的8年创业](https://mp.weixin.qq.com/s/sUcLSYE4DdX-iItIBjy8kg)
72 | * [独立开发者如何赚钱?](https://mp.weixin.qq.com/s/8_g73xwsihgFQYn67BTP3Q)
73 | * [海外产品开发套件(不定期更新)](https://twitter.com/lai_jia_wei/status/1713891009577554255)
74 |
75 |
76 | ## 网站、书籍推荐 (有部分pdf可以分享)
77 |
78 | | 书名 | 备注 |
79 | |--- |--- |
80 | | [单干](https://book.douban.com/subject/36459316/) | |
81 | | [一人公司](https://book.douban.com/subject/36492867/) | |
82 | | [写给大家看的设计书](https://book.douban.com/subject/26664522/) | |
83 | | [离谱的英语学习指南](https://github.com/byoungd/English-level-up-tips) | |
84 | | [罗永浩15堂演讲私教课](https://www.bilibili.com/video/BV1PP411T7fv/) | 讲故事吹牛逼 |
85 | | [Refactoring UI](https://www.refactoringui.com/) | tailwind作者写的UI设计书|
86 | | [The indie maker handbook](https://readmake.com/) | 传奇独立开发者levelsio写的独立开发指南 |
87 | | [Compant Of One](https://book.douban.com/subject/30385558/) | |
88 | | [Zero to sold](https://zerotosold.com/) | |
89 | | [Start Small, Stay Small](https://book.douban.com/subject/5924300/) | |
90 |
91 | show your work
92 | get together
93 | the sass playbook
94 |
95 |
96 | ## 网站推荐(找灵感,做推广)
97 | * [indiehackers](https://www.indiehackers.com/)
98 | * [独立开发展示页startups.fyi](https://www.startups.fyi/)
99 | * [硬地骇客博客](https://hardhacker.com/)
100 | * 需要运营和推广的:Twitter, Youtube, Reddit, Hacker News、V2EX、ProductHunt
101 |
--------------------------------------------------------------------------------
/docs/public/bili.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/public/react.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: home
3 | sidebar: false
4 |
5 | title: 大圣前端进阶指南
6 | titleTemplate: 解决前端进阶的难点
7 |
8 | hero:
9 | name: 大圣的前端进阶课程
10 | # text: 解决前端进阶的难点
11 | tagline: 面试, 企业级项目, 源码,算法,做最好的前端课程
12 | image:
13 | src: https://cdn.jsdelivr.net/gh/woniuppp/static/coding.svg
14 | alt: challenges
15 | actions:
16 | # - theme: brand
17 | # text: 使用说明
18 | # link: /desc
19 | - theme: brand
20 | text: 前端面试辅导
21 | link: /interview/
22 | - theme: alt
23 | text: 玩转Vue3
24 | link: /vue/
25 | - theme: alt
26 | text: 玩转React18
27 | link: /react/
28 | # - theme: alt
29 | # text: 源码手写
30 | # link: /source/
31 | # - theme: alt
32 | # text: 啃算法
33 | # link: /algorithm/
34 | # - theme: alt
35 | # text: 博客
36 | # link: /life/2023
37 | features:
38 | - title: React+TS企业级实战+组件库
39 | icon:
40 | src: /react.svg
41 | details: React+Typescript+Vite企业级实战+组件库
42 |
一个从入门到专家的React企业级实战课程
43 | link: /react/
44 | linkText: 玩转React18
45 | - title: Vue3+TS企业级实战+组件库
46 | icon:
47 | src: /vue.svg
48 | details: Vue3+Typescript+Vite企业级实战+组件库
49 |
一个从入门到专家的Vue企业级实战课程
50 | link: /vue/
51 | linkText: 玩转Vue3
52 | - title: 前端工程师的算法课
53 | icon:
54 | src: /al.svg
55 | details: JS实现算法+ Vue/React框架中的算法 + leetcode200题
56 |
一次性解决前端工程师面试中的算法难题
57 | link: /algorithm/
58 | linkText: 前端算法课
59 | - title: 源码漫游记
60 | icon:
61 | src: /vite.svg
62 | details: 前端框架热门源码一次性搞懂
63 |
手写Vue,React,Vite等前端框架源码
64 | link: /source/
65 | linkText: 前端源码漫游记
66 |
67 | - title: 前端面试课
68 | icon:
69 | src: /interview.svg
70 | details: 一次1V1模拟面试 + 职业规划 + 常见面试题剖析
71 |
面试突击必备
72 | link: /interview/
73 | linkText: 前端面试课
74 | - title: 大圣前端私教课
75 | icon:
76 | src: /sijiao.svg
77 | details: 1V1辅导+全部视频课
78 |
定制你的学习路线,辅导你的职业规划
79 | link: /sijiao/
80 | linkText: 前端私教课
81 |
82 | - title: 玩转Vue3全家桶(极客时间)
83 | icon:
84 | src: https://static001.geekbang.org/static/time/icon/apple-touch-icon.jpg
85 | details: 图文课程
86 |
基础+实战+源码,全方位学透Vue 3
87 | link: http://gk.link/a/10BM3
88 | linkText: 玩转Vue3全家桶
89 | - title: Vue3实战入门(B站)
90 | icon:
91 | src: /bili.svg
92 | details: Vue3+TS实战课
93 |
B站课堂
94 | link: https://www.bilibili.com/cheese/play/ss2185
95 | linkText: Vue3TS实战课
96 |
97 | - title: 关于
98 | icon:
99 | src: /wanzhuanvue.jpg
100 | details: 关于我
101 | link: /about
102 | linkText: 关于
103 |
104 |
105 |
106 |
107 | # - title: 选题丰富
108 | # # icon: 🚀
109 | # details: 来源社区热门面试题 & 挑战项目,Javascript, Typescript, Vue, React, Node.js, 系统设计题
110 | # link: /interview/
111 | # linkText: 了解更多
112 | # - title: 知识体系完善
113 | # details: 企业级实战,框架源码,热门面试题一网打尽
114 | # - title: 配套视频讲解
115 | # details: 逐行代码演示+讲解,手把手助你进阶前端
116 | # - title: 社区共建
117 | # details: 欢迎大家贡献面试中遇到的题目,寻求最优解
118 | # - title: 社区共建
119 | # details: 欢迎大家贡献面试中遇到的题目,寻求最优解
120 |
121 | # - title: 社区共建
122 | # details: 欢迎大家贡献面试中遇到的题目,寻求最优解
123 |
124 | ---
125 |
126 |
127 |
128 |
129 |
130 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
--------------------------------------------------------------------------------
/docs/template.md:
--------------------------------------------------------------------------------
1 | # 标题
2 |
3 |
4 | [题目来源](https://fullstack-challenges.netlify.app/)
5 |
6 | ## 题目要求和代码
7 | ```vue
8 |
9 | ```
10 |
11 | ## 解答
12 |
13 | ```vue
14 |
15 |
16 | - xx
17 | + aa
18 | ```
19 |
20 | ## 视频
21 |
22 | []()
23 |
24 | https://mermaid.js.org/syntax/examples.html
25 |
26 |
27 | default, neutral,dark,forest,base
28 |
29 | ```mermaid
30 | flowchart LR
31 | subgraph TOP
32 | direction TB
33 | subgraph B1
34 | direction RL
35 | i1 -->f1
36 | end
37 | subgraph B2
38 | direction BT
39 | i2 -->f2
40 | end
41 | end
42 | A --> TOP --> B
43 | B1 --> B2
44 |
45 |
46 | ```
47 |
48 | ```mermaid
49 | sequenceDiagram
50 | par Alice to Bob
51 | Alice->>Bob: Hello guys!
52 | and Alice to John
53 | Alice->>John: Hello guys!
54 | end
55 | Bob-->>Alice: Hi Alice!
56 | John-->>Alice: Hi Alice!
57 |
58 |
59 | ```
60 |
61 | ```mermaid
62 | stateDiagram-v2
63 | State1: The state with a note
64 | note right of State1
65 | Important information! You can write
66 | notes.
67 | end note
68 | State1 --> State2
69 | note left of State2 : This is the note to the left.
70 |
71 |
72 | ```
73 |
74 | ```mermaid
75 | journey
76 | title My working day
77 | section Go to work
78 | Make tea: 5: Me
79 | Go upstairs: 3: Me
80 | Do work: 1: Me, Cat
81 | section Go home
82 | Go downstairs: 5: Me
83 | Sit down: 5: Me
84 |
85 |
86 | ```
87 |
88 | ```mermaid
89 | gantt
90 | dateFormat YYYY-MM-DD
91 | title Adding GANTT diagram functionality to mermaid
92 | excludes weekends
93 | %% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)
94 |
95 | section A section
96 | Completed task :done, des1, 2014-01-06,2014-01-08
97 | Active task :active, des2, 2014-01-09, 3d
98 | Future task : des3, after des2, 5d
99 | Future task2 : des4, after des3, 5d
100 |
101 | section Critical tasks
102 | Completed task in the critical line :crit, done, 2014-01-06,24h
103 | Implement parser and jison :crit, done, after des1, 2d
104 | Create tests for parser :crit, active, 3d
105 | Future task in critical line :crit, 5d
106 | Create tests for renderer :2d
107 | Add to mermaid :1d
108 | Functionality added :milestone, 2014-01-25, 0d
109 |
110 | section Documentation
111 | Describe gantt syntax :active, a1, after des1, 3d
112 | Add gantt diagram to demo page :after a1 , 20h
113 | Add another diagram to demo page :doc1, after a1 , 48h
114 |
115 | section Last section
116 | Describe gantt syntax :after doc1, 3d
117 | Add gantt diagram to demo page :20h
118 | Add another diagram to demo page :48h
119 |
120 |
121 | ```
122 |
123 | ```mermaid
124 | pie showData
125 | title Key elements in Product X
126 | "Calcium" : 42.96
127 | "Potassium" : 50.05
128 | "Magnesium" : 10.01
129 | "Iron" : 5
130 |
131 |
132 | ```
133 |
134 | ```mermaid
135 | gitGraph
136 | commit
137 | commit
138 | branch develop
139 | commit
140 | commit
141 | commit
142 | checkout main
143 | commit
144 | commit
145 | merge develop
146 | commit
147 | commit
148 | ```
149 |
150 | ```mermaid
151 | mindmap
152 | root((mindmap))
153 | Origins
154 | Long history
155 | ::icon(fa fa-book)
156 | Popularisation
157 | British popular psychology author Tony Buzan
158 | Research
159 | On effectiveness
and features
160 | On Automatic creation
161 | Uses
162 | Creative techniques
163 | Strategic planning
164 | Argument mapping
165 | Tools
166 | Pen and paper
167 | Mermaid
168 | ```
169 |
--------------------------------------------------------------------------------
/docs/react/arch/03.infra.md:
--------------------------------------------------------------------------------
1 | # 企业级项目规范搭建
2 |
3 |
4 | ---
5 |
6 | ## 项目目录规范
7 | ```
8 | pages 页面
9 | components 组件
10 | routes 路由 react-router-dom
11 | hooks hooks工具库
12 | utils 函数工具库
13 | api 网络请求
14 | layout 布局
15 | types 类型定义(TS)
16 | store 数据流
17 | ....
18 |
19 | ```
20 |
21 | ---
22 |
23 | ## 页面搭建
24 | 1. 登录
25 | 2. 管理后台 (动态权限控制)
26 | 3. 404(报错
27 |
28 | ---
29 |
30 | ## 登录页面
31 |
32 | 其实登录没啥大数据量,复杂度来自后端
33 |
34 | 1. 用户名密码
35 | 2. 第三方登录(扫码,github...)
36 | 3. 验证码(图片,短信,语音)
37 | 4. 前端主要在于表单验证,和后端交互 & 一点点体验
38 |
39 | ---
40 |
41 | 1. ant-design的form表单使用
42 | 2. 输入验证
43 | 3. 登录请求
44 | 4. 登录的token管理(jwt)
45 | 5. 路由跳转
46 | 6. 路由守卫,非登录态跳转到登录页
47 |
48 | ---
49 | ## 网络请求代理
50 |
51 | vite的proxy配置
52 |
53 | ---
54 |
55 | ## 请求方式
56 |
57 | 1. fetch
58 |
59 | 所有api前缀代理到server端,
60 | `/user/hi`
61 | =>
62 | `http://localhost:7001/api/user/hi`
63 | =>
64 | `http://shengxinjing.cn:7001/user/hi`
65 |
66 |
67 | ```javascript
68 | fetch('/api/user/hi',{
69 | // headers:{
70 | // apikey:'dasheng123'
71 | // }
72 | }).then(res=>res.json()).then(res=>{
73 | console.log(res)
74 | })
75 |
76 | ```
77 |
78 | ---
79 |
80 | ## api校验 & axios
81 | 后端设置了api校验,隔一段时间会换一次,过期会报错,大家pull最新代码即可,维护正版的权益
82 | axios的interceptors
83 |
84 | ```
85 | VITE_API_KEY=dasheng123
86 | VITE_URL=[http://shengxinjing.cn:7001](http://shengxinjing.cn:7001)
87 | ```
88 |
89 | 1. 判断返回值的code,是0的话,返回data (也可以交给业务处理)
90 | 2. 不是0的话,用antd显示报错信息
91 | 3. 请求需要获取环境变量,.env下面 VITE_开头
92 | 1. 登录后的token
93 | 2. api的key
94 | 4. 登录账号
95 | 1. /user/login
96 |
97 | ```
98 | 316783812@qq.com
99 | 316783812
100 | ```
101 |
102 | ---
103 |
104 | ## token和用户信息怎么存
105 | localStorage和Context
106 |
107 | 1. Context是最简单的数据数据管理方案
108 | 2. Provider包裹+useContext获取
109 |
110 |
111 | ---
112 | ## 路由守卫
113 | 1. AuthRouter设计
114 | 2. 路由配置自动化 (glob import)
115 | 3. 路由懒加载Suspense实现
116 | 4. 路由匹配函数
117 |
118 | ---
119 |
120 | ## 页面布局Layout
121 |
122 | 1. antd layout组件(后续会实现)
123 | 2. antd 栅格系统
124 |
125 | ---
126 |
127 | ## css解决方案
128 |
129 | 1. css
130 | 2. 行内样式
131 | 3. less sass stylus预处理
132 | 4. css in js
133 | 5. tailwindcss原子化css
134 |
135 |
136 |
137 | ---
138 | ## 各种规范lint
139 |
140 | 1. 代码规范eslint (prettier)
141 | 2. stylelint (自行体验)
142 | 3. git hooks `husky`
143 | 4. lint-staged只处理缓存区的代码
144 | 5. git commit信息格式 自己写脚本 or commitlint
145 | 6. commitizen (自行体验)
146 |
147 | ---
148 | ## eslint
149 |
150 | ```sh
151 | pnpm add -D eslint @antfu/eslint-config
152 |
153 | ```
154 |
155 | `.eslintrc`
156 |
157 | ```json
158 | {
159 | "extends": [
160 | "@antfu/eslint-config"
161 | ]
162 | }
163 | ```
164 |
165 | package.json
166 |
167 | ```json
168 | "lint": "eslint src --fix --cache"
169 | ```
170 | ---
171 |
172 | ## prettier和eslint
173 |
174 | @task: 定制自己团队风格的eslint配置 @shengxj/eslint-config
175 |
176 | 自己定义rules,0表示关闭,1表示warn,2表示error级
177 |
178 | ---
179 |
180 | ## Git 校验
181 | 使用Husky在代码提交的时候,执行校验
182 |
183 | ```sh
184 | pnpm i husky -D
185 | husky install
186 | npx husky add .husky/pre-commit "npm run lint"
187 |
188 | ```
189 |
190 | ```json
191 | "scripts": {
192 | // install自动执行
193 | "prepare": "husky install"
194 | }
195 | ```
196 |
197 | ---
198 |
199 | ## lint-staged 防止每次都全量
200 |
201 | ```json
202 | "lint-staged": {
203 | "**/*.{js,jsx,tsx,ts}": [
204 | "npm run lint"
205 | ]
206 | }
207 | ```
208 |
209 | ---
210 |
211 | ## git commit信息格式
212 | 方便自动生成changelog和团队协作
213 |
214 | ```sh
215 | :
216 | ```
217 | type可以是下面的值
218 | 1. feat: 新功能。
219 | 2. fix: Bug修复
220 | 3. docs: 文档修改
221 | 4. perf: 性能优化
222 | 5. refactor: 代码重构
223 | 6. test: 测试代码
224 | 7. chore: 不知道是啥就写chore
225 |
226 | ---
227 |
228 | ## commitlint
229 |
230 | https://commitlint.js.org/#/
231 |
232 | 其实自己写也不费劲,参考
233 | https://github.com/vuejs/core/tree/main/scripts
234 |
235 | ```sh
236 | pnpm install -D commitlint @commitlint/config-conventional @commitlint/cli
237 |
238 | npx husky add .husky/commit-msg 'npx --no -- commitlint --edit ${1}'
239 |
240 | ```
241 |
242 | `.commitlintrc`
243 |
244 | ```json
245 | {
246 | "extends": ["@commitlint/config-conventional"]
247 | }
248 | ```
249 |
250 |
251 |
252 | 1. 目录规范搭建
253 | 2. 好用的脚本工具
254 | 3. 工程化系统搭建(插件和工具)
255 |
256 |
--------------------------------------------------------------------------------
/docs/funnycoder.md:
--------------------------------------------------------------------------------
1 | ---
2 | aside: false
3 | ---
4 |
5 | # funnyCoder有趣的程序员
6 |
7 |
152 |
153 | 有趣程序员的职业经历,希望可以给刚入行的程序员一些启发,除了闷头写KPI代码,还有很多有趣的事情可以做。
154 |
155 | 下一期想邀请哪位嘉宾 ,欢迎[联系我](/about)
156 |
157 |
158 |
159 |
--------------------------------------------------------------------------------
/docs/blog/2022-12-05-gray-filter.md:
--------------------------------------------------------------------------------
1 | # 网页置灰方案讨论
2 |
3 | 如何在网页置灰的前提下,保持部分元素彩色
4 |
5 | [在线体验](https://shengxinjing.cn/gray.html)
6 |
7 | [本文视频版链接](https://www.bilibili.com/video/BV14g411H7Ad/)
8 |
9 | 最近哀悼日,网页端如何一键变灰已经有很多实现方式了,但是我看到一个推文很有意思,是一个不错的面试题
10 |
11 | > 现在网页置灰已经不仅仅是一行css的事了,如何在网页置灰的前提下,部分元素保持彩色,这是一个不错的system design题
12 |
13 | ## 一键变灰
14 |
15 | 这个大部分同学都写了,直接
16 | ```css
17 | html{
18 | filter: grayscale(100%);
19 | }
20 | ```
21 | 考虑ie之类的兼容性的话,就直接把兼容性的属性都搞上去
22 | ```css
23 | html{
24 | -webkit-filter: grayscale(100%);
25 | -moz-filter: grayscale(100%);
26 | -ms-filter: grayscale(100%);
27 | -o-filter: grayscale(100%);
28 | filter: grayscale(100%);
29 | filter: gray;
30 | filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
31 | }
32 | ```
33 |
34 | 如果想控制的更动态一些,可以用js控制html的class来实现这个切换过程
35 |
36 | ```html
37 |
38 | ```
39 |
40 | ```javascript
41 | let style = document.createElement('style')
42 | let graySelector = 'gray-filter'
43 | style.setAttribute('type', 'text/css')
44 | // style.setAttribute('data-vite-dev-id', id)
45 | style.textContent = `.${graySelector}{
46 | -webkit-filter: grayscale(100%);
47 | -moz-filter: grayscale(100%);
48 | -ms-filter: grayscale(100%);
49 | -o-filter: grayscale(100%);
50 | filter: grayscale(100%);
51 | filter: gray;
52 | filter: progid:dximagetransform.microsoft.basicimage(grayscale=1);
53 | }`
54 | document.head.appendChild(style)
55 |
56 | let root = document.querySelector('html')
57 | let btn = document.querySelector('#set-gray')
58 | btn && btn.addEventListener('click', () => {
59 | setAllGray()
60 | }, false)
61 |
62 | function toggleClassName(el,name){
63 | if (el.className.indexOf(name) > -1) {
64 | el.className = el.className.replace(name, '').trim()
65 | } else {
66 | el.className = [el.className, name].join(' ')
67 | }
68 | }
69 |
70 | function setAllGray() {
71 | toggleClassName(root,graySelector)
72 | }
73 |
74 | ```
75 | 这样可以在后端通过接口的形式决定是不是加载这段js就可以了
76 |
77 |
78 | 
79 |
80 | > 那么问题来了,如何在置灰的前提下部分元素保持彩色呢
81 |
82 |
83 |
84 | ## filter重置(失败)
85 | 如果能直接某个元素重置filter, 尝试下面的写法,但是不生效
86 |
87 | ```css
88 | html{
89 | filter:grayscale(100%);
90 | }
91 | .not-gray{
92 | filter:none;
93 | }
94 | ```
95 |
96 | 如果filter的算法可逆的话,可以在`.not-gray`元素上设置一个翻转的filter,查了点资料,Chromium灰色100%的算法如下, 我本人图像处理方面比较菜,但是看起来全灰的算法不可逆,而且如果在元素上再盖一个canvas也不太好弄 放弃
97 |
98 | ```
99 | R/G/B = 0.2126R' + 0.7152G' + 0.0722'B
100 | ```
101 |
102 |
103 | ## 遮挡解决方案 backdrop-filter
104 |
105 | 有一个解决方案是用backdrop-filter做一个遮罩,毕竟filter还是有点损耗首屏性能的,虽然可以用transform开启硬件优化一些,我们还可以用遮罩的方式挡住也可以的,并且设置`pointer-events: none;`不阻挡用户交互,也是一段css搞定
106 |
107 | ```css
108 | html {
109 | position: relative;
110 | width: 100%;
111 | height: 100%;
112 | }
113 | html::before {
114 | content: "";
115 | position: fixed;
116 | backdrop-filter: grayscale(100%);
117 | pointer-events: none;
118 | inset: 0;
119 | z-index: 100;
120 | }
121 | ```
122 | 还可以把遮罩的position换成absolute, 实现一个只置灰首屏的效果,不过我感觉没啥必要
123 |
124 |
125 | 
126 |
127 | 然后我们可以设置指定元素的z-index,超过backdrop-filter的100就可以, 就有首屏+部分彩色的效果
128 |
129 | 
130 |
131 | ```css
132 | .not-gray{
133 | position: relative;
134 | z-index:1000;
135 | }
136 | ```
137 |
138 |
139 | ## 元素遍历标记
140 |
141 | backdrop-filter其实也有他的兼容性问题,尤其是firefox版本102(最新107)之前都不能用,filter方案更普及一些,不过作为面试题的话 我们还可以继续用filter这个方法,
142 |
143 | 
144 |
145 | 
146 |
147 |
148 | 我们设置有一些选择器保持彩色,然后统计出当前这个网页中,需要置灰的元素,网页是一个属性结果,我们先对选中元素的父元素进行遍历标记
149 |
150 |
151 |
152 |
153 | 
154 |
155 | ```javascript
156 |
157 | let body = document.body
158 | //配置选择器,命中这个列表选择器的不置灰
159 | let selectors = ['#not-gray2', '.not-gray3']
160 | selectors.forEach(selector=>{
161 | let doms = [...document.querySelectorAll(selector)].forEach(v=>{
162 | if(!v) return
163 | v.staycolor = true
164 | let parent = v.parentNode
165 | while(parent && !parent.colorful){
166 | parent.colorful = true
167 | parent = parent.parentNode
168 | }
169 | })
170 | })
171 |
172 | ```
173 |
174 | 然后现在需要置灰的元素都已经标记了colorful,然后我们遍历一下,递归每个child,如果没有colorful,直接置灰返回,通过递归就可以把所有元素都置灰了
175 |
176 | ```js
177 | let graySelector = 'gray-filter'
178 | walk(body)
179 |
180 | function walk(node){
181 | if(node.nodeType!==1) return
182 | if(node.staycolor) return
183 | if(!node.colorful){
184 | toggleClassName(node,graySelector)
185 | return
186 | }
187 | for (var i = 0; i < node.children.length; i++) {
188 | var child = node.children[i];
189 | walk(child)
190 | }
191 | }
192 | ```
193 |
194 | 可以把selectors做成从后端读取,就可以动态设置保持彩色的部分了, 不过这样设置filter可能会导致部分元素的定位失效,不过作为面试题的追问还不错
195 |
196 | 
197 |
198 | ## 总结
199 | 作为面试题来说,考察了面试者的css,js的dom遍历,递归思想,很不错的入门题
200 |
--------------------------------------------------------------------------------
/docs/public/gray.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 如何在网页置灰的时候,部分元素保持彩色-有意思的面试题
9 |
10 |
11 |
60 |
61 |
62 |
63 |
64 | 联系作者
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
84 |
85 |
90 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
204 |
205 |
206 |
207 |
--------------------------------------------------------------------------------
/docs/react/arch/02.typescript.md:
--------------------------------------------------------------------------------
1 | # Typescript必知必会
2 |
3 |
4 | ## 为什么我们需要Typescript
5 |
6 | [在线学习TS](https://www.typescriptlang.org/play?#code/Q)
7 |
8 | ```ts
9 | // 类型系统
10 | let course:string = '前端工程师'
11 | let price:number = 129
12 | price = '89' //类型报错
13 | let isOnline:boolean = true
14 | ```
15 | 就像三体人一样,都是透明的
16 |
17 |
18 | ---
19 |
20 |
21 | ## Typescript入门类型
22 |
23 | `boolean`, `number`, `string`, `null`,`undefined`,`symbol` ...
24 |
25 | `any`,`enum` ...
26 |
27 |
28 | ---
29 |
30 | ## 联合类型
31 |
32 | ```ts
33 |
34 | let course1 : string|number = '玩转前端'
35 | course1 = 1
36 | course1 = true // 报错
37 |
38 | type courseScore = '好' | '非常好' | '嘎嘎好'
39 | let score1 :courseScore = '好'
40 | let score2 :courseScore = '一般好' // 报错
41 | ```
42 |
43 | ---
44 |
45 | ## 接口类型
46 |
47 | ```ts
48 |
49 |
50 | interface 前端课程 {
51 | 课程名字:string,
52 | 价格:number[],
53 | 受众:string,
54 | 讲师头像?:string|boolean,
55 | readonly 课程地址:string
56 | }
57 | let course: 前端课程 = {
58 | 课程名字:'玩转前端',
59 | 价格:[59,'139'],
60 | 讲师头像:false,
61 | 课程地址:"xxxx"
62 | }
63 | course['课程地址']= 'yyyy' // 报错
64 |
65 | ```
66 |
67 | ---
68 |
69 |
70 | ## Typescript函数
71 |
72 | ```ts
73 |
74 | function 函数名(参数:参数类型):返回值类型{} //大致语法
75 | function add(x: number, y: number): number {
76 | return x + y;
77 | }
78 | add(1, 2);
79 |
80 |
81 | ```
82 |
83 | ---
84 |
85 | ```ts
86 |
87 | let add1:(a:number,b:number)=>number = function(x: number, y: number): number {
88 | return x + y;
89 | }
90 | type addType = (a:number,b:number)=>number
91 | let add2:addType = function(x: number, y: number): number {
92 | return x + y;
93 | }
94 |
95 | interface addType1{
96 | (a:number,b:number):number
97 | }
98 | let add3:addType1 = function(x: number, y: number): number {
99 | return x + y;
100 | }
101 | ```
102 |
103 | ---
104 |
105 | ```ts
106 |
107 | function reverse(x: number): number
108 | function reverse(x: string): string
109 | function reverse(x: number | string): number | string | void {
110 | if (typeof x === 'number') {
111 | return Number(x.toString().split('').reverse().join(''));
112 | } else if (typeof x === 'string') {
113 | return x.split('').reverse().join('');
114 | }
115 | }
116 |
117 | ```
118 |
119 |
120 | ---
121 |
122 |
123 | ## 宿主环境的类型
124 |
125 | [参考地址](https://github.com/Microsoft/TypeScript/tree/main/src/lib)
126 | ```ts
127 | let w:Window = window
128 | let ele:HTMLElement = document.createElement('div')
129 | let allDiv: NodeList = document.querySelectorAll('div')
130 |
131 | ele.addEventListener('click',function(e:MouseEvent){
132 | const args:IArguments = arguments
133 | w.alert(1)
134 | console.log(args)
135 | },false)
136 | ```
137 |
138 | ---
139 |
140 |
141 | ## 泛型入门
142 |
143 | ```ts
144 |
145 | function identity0(arg: any): any {
146 | return arg
147 | }
148 | // 相当于type T = arg的类型
149 | function identity(arg: T): T {
150 | return arg
151 | }
152 | identity('玩转前端') // 这个T就是string,所以返回值必须得是string
153 | identity(1)
154 | ```
155 |
156 | ---
157 |
158 | ## keyof
159 |
160 | ```ts
161 |
162 | interface VueCourse5 {
163 | name:string,
164 | price:number
165 | }
166 | type CourseProps = keyof VueCourse5 // 只能是name和price选一个
167 | let k:CourseProps = 'name'
168 | let k1:CourseProps = 'p' // 改成price
169 |
170 | ```
171 |
172 |
173 | ---
174 |
175 | ## extends && in
176 |
177 | ```ts
178 |
179 | // T extends U ? X : Y 类型三元表达式
180 |
181 | type ExtendsType = T extends boolean ? "前端" : "后端"
182 | type ExtendsType1 = ExtendsType
183 | // type ExtendsType1='前端'
184 | type ExtendsType2 = ExtendsType
185 | // type ExtendsType2='后端'
186 |
187 |
188 | type Courses = '前端'|'后端'
189 | type CourseObj = {
190 | [k in Courses]:number // 遍历Courses类型作为key
191 | }
192 | // 上面的代码等于下面的定义
193 | // type CourseObj = {
194 | // 前端: number;
195 | // 后端: number;
196 | // }
197 |
198 |
199 | ```
200 |
201 |
202 | ---
203 |
204 | ```ts
205 |
206 | // K extends keyof T限制K的类型必须是T的属性之一
207 | // T[K]是值得类型
208 | function getProperty(o: T, name: K): T[K] {
209 | return o[name]
210 | }
211 | const coursePrice:CourseObj = {
212 | "前端":20,
213 | "后端":30
214 | }
215 | getProperty(coursePrice,'前端')
216 | getProperty(coursePrice,'运维') // 报错
217 |
218 | ```
219 |
220 | ---
221 |
222 | ## infer
223 |
224 | ```ts
225 | // 其实写的不多,认识一下就好
226 | type Foo = () => CourseObj
227 |
228 | // 如果T是一个函数,并且函数返回类型是P就返回P
229 | type ReturnType1 = T extends ()=>infer P ?P:never
230 | type Foo1 = ReturnType1
231 |
232 | ```
233 |
234 |
235 |
236 | ---
237 |
238 |
239 | ## 好用的类型工具函数
240 |
241 |
242 | [地址](https://www.typescriptlang.org/docs/handbook/utility-types.html)
243 |
244 | ```ts
245 |
246 | interface Todo {
247 | title: string
248 | desc:string
249 | done?: boolean
250 | }
251 |
252 |
253 | type partTodo = Partial
254 | type requiredTodo = Required
255 | type TodoPreview = Pick
256 | type TodoPreview1= Omit
257 |
258 | ```
259 |
260 |
261 | ---
262 |
263 |
264 | 1. React中的Typescript
265 |
266 | 最简单的React+TS,
267 | [不推荐React.FC](https://github.com/facebook/create-react-app/pull/8177)
268 |
269 | ```ts
270 | useState(0) //简单的借助自动推导
271 | useSate([]) // 类型声明
272 |
273 | // useEffect 先不管
274 | // React.FC不推荐, 单独的事件处理函数需要类型
275 | type CourseProps = {
276 | name:string
277 | }
278 | const CoursePage = (props:CourseProps) => {
279 | function handle1(e:React.MouseEvent){}
280 | return
281 |
handle(x)}>{props.name}
282 |
283 |
284 |
285 |
286 | }
287 |
288 | ```
289 |
290 | ---
291 |
292 | useEffect不太需要额外的props
293 |
294 | 封装的hooks按照函数类型
295 |
296 | children & 复杂的props
297 |
298 | 项目中用到随用随学
299 |
300 | https://react-typescript-cheatsheet.netlify.app/docs/basic/setup/
301 |
302 | https://profy.dev/article/react-typescript
303 |
304 |
305 | ---
306 |
307 |
--------------------------------------------------------------------------------
/docs/public/interview.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/docs/.vitepress/theme/MyLayout.vue:
--------------------------------------------------------------------------------
1 |
78 |
79 |
80 |
81 |
82 |
85 |
86 |
87 |
88 |
89 |
90 |
扫码联系 & 客服
91 |
学习编程 & 自由职业
92 |
![]()
93 |
94 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
125 |
165 |
--------------------------------------------------------------------------------
/docs/public/ad.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | 防拦截广告
8 |
9 |
27 |
28 |
29 |
30 | 首页
31 |
32 |
33 |

34 |
❌
35 |
36 |
199 |
200 |
201 |
--------------------------------------------------------------------------------
/docs/blog/2022-12-04-chatgpt.md:
--------------------------------------------------------------------------------
1 | # 体验一下ChatGPT
2 |
3 | 可以帮你写代码、写邮件、编故事的神器
4 |
5 | 最近OpenAI 发布了备受期待的原型通用 ChatGPT,这是一种基于对话的 AI 聊天界面,算是GPT-3(Generative Pre-trained Transformer 3)的继承者,今天记录一下体验的过程,以前我对AI的理解总感觉离我很远,现在我好像看到了未来
6 |
7 | ChatGPT 几乎可以做任何事情,从写邮件,到写算法,到做面试题,写个歌,帮你编周报,甚至还能帮你写自动化测试,感觉可以取代stackoverflow了
8 |
9 |
10 | ## 1. 工作助手
11 |
12 | 首先感觉有用的就是帮忙写工作中的邮件 or github的issue,文笔比我自己写的好多了
13 |
14 |
15 | > 给我写一个英语商务邮件,语法优雅,友好一些,邮件内容是:下周一早晨我请大壮吃鸡蛋煎饼,顺便邀请开个早会
16 |
17 |
18 | 
19 |
20 | ## 代码助手
21 |
22 | > how to write a login form using React ,Typescript and useReducer?
23 | >
24 | 下面是他生成的代码
25 | ```javascript
26 | import React, { useReducer } from 'react'
27 |
28 | type State = {
29 | username: string
30 | password: string
31 | error: string
32 | }
33 |
34 | type Action =
35 | | { type: 'SET_USERNAME'; username: string }
36 | | { type: 'SET_PASSWORD'; password: string }
37 | | { type: 'SET_ERROR'; error: string }
38 |
39 | function reducer(state: State, action: Action): State {
40 | switch (action.type) {
41 | case 'SET_USERNAME':
42 | return { ...state, username: action.username }
43 | case 'SET_PASSWORD':
44 | return { ...state, password: action.password }
45 | case 'SET_ERROR':
46 | return { ...state, error: action.error }
47 | default:
48 | return state
49 | }
50 | }
51 |
52 | function LoginForm() {
53 | const [state, dispatch] = useReducer(reducer, {
54 | username: '',
55 | password: '',
56 | error: '',
57 | })
58 |
59 | function handleUsernameChange(event: React.ChangeEvent) {
60 | dispatch({ type: 'SET_USERNAME', username: event.target.value })
61 | }
62 |
63 | function handlePasswordChange(event: React.ChangeEvent) {
64 | dispatch({ type: 'SET_PASSWORD', password: event.target.value })
65 | }
66 |
67 | function handleSubmit(
68 |
69 | ```
70 |
71 | > 一个解析页面script标签内容的正则表达式
72 |
73 | 比我写的好
74 |
75 | 
76 | > leetcode第一题twosum用javascript怎么做
77 |
78 | 甚至还有复杂度的优化过程
79 |
80 | 
81 |
82 | > write a eslint plugin to forbidden code writing at weekends
83 |
84 | 还有vscode插件,chrome插件
85 |
86 | 
87 |
88 |
89 | ## 面试
90 | > 出五个高级前端工程师的面试题
91 |
92 | > 来两道算法题
93 | 算法还给了答案,真不错
94 |
95 | 
96 |
97 |
98 | 
99 |
100 | ## Vue代码转成React
101 |
102 | 把这段Vue3代码转换成react
103 | ```html
104 |
114 |
115 |
116 |
117 |
118 |
121 |
124 |
125 | ```
126 |
127 | 转换结果, 可以直接运行的
128 |
129 | ```javascript
130 | import React, { useState } from 'react'
131 |
132 | function TodoList() {
133 | const [msg, setMsg] = useState('Hello World!')
134 | const [todos, setTodos] = useState(['吃饭'])
135 |
136 | function add() {
137 | setTodos([...todos, msg])
138 | setMsg('')
139 | }
140 |
141 | return (
142 |
143 |
setMsg(event.target.value)} />
144 |
145 |
146 | {todos.map(todo => (
147 | - {todo}
148 | ))}
149 |
150 |
151 | )
152 | }
153 |
154 | ```
155 | 然后我把生成的react代码转成angular,在转成vue3,依然是很好的代码质量
156 |
157 | ```html
158 |
169 |
170 |
171 |
172 |
173 |
174 |
177 |
178 |
179 |
180 | ```
181 |
182 | ## 自动写单测
183 | 甚至可以帮你写测试, 比如给上一段vue代码写点单元测试,给跪了
184 |
185 |
186 | 
187 |
188 |
189 | ## Code review
190 | 设置还可以代码review, 提示我清单输入框要做非空判断
191 |
192 | 
193 |
194 | ## 写代码
195 | 用vue 的写一个组件,可以校验用户输入的邮箱是不是合法,不合法弹出信息提示
196 |
197 | 
198 |
199 | ## 闲的无聊
200 |
201 |
202 | > 给Vuejs写一个英文歌曲,摇滚一些
203 |
204 | 感觉可以直接年会 or vueconf上唱了
205 |
206 | ```
207 | Verse 1:
208 | Vue, you're my favorite framework
209 | You make my code more powerful
210 | With your reactive APIs
211 | And your declarative syntax
212 |
213 | Chorus:
214 | Vue, oh Vue
215 | You're the one I want to use
216 | Vue, oh Vue
217 | You make my life so easy
218 |
219 | Verse 2:
220 | With your components and data-binding
221 | And your virtual DOM rendering
222 | I can create a web app
223 | That's both fast and flexible
224 |
225 | Chorus:
226 | Vue, oh Vue
227 | You're the one I want to use
228 | Vue, oh Vue
229 | You make my life so easy
230 |
231 | Bridge:
232 | When I need to build a frontend
233 | I know just what to do
234 | I turn to you, Vue
235 | You make it all so simple
236 |
237 | Chorus:
238 | Vue, oh Vue
239 | You're the one I want to use
240 | Vue, oh Vue
241 | You make my life so easy
242 |
243 | Outro:
244 | Vue, oh Vue
245 | You're the one I want to use
246 | Vue, oh Vue
247 | You make my life so easy
248 |
249 | ```
250 |
251 | > 给Reactjs写一个英文歌曲,摇滚一些
252 |
253 | > 一个练习时长两年半的练习生,喜欢唱跳rap 为开头写一个故事
254 |
255 | > 一个人前来买瓜
256 |
257 |
258 | #### 产品经理
259 | > 写一个帮程序员背单词的chrome插件的需求文档
260 | > 产品经理的10个坏习惯
261 |
262 | #### 老中医
263 | 某女,65岁,教师,初诊: 2005年12月20日。患者慢性咳嗽已12年余,近1周加剧。
264 | 1周前夜行不慎触冒风寒,而致旧病又起。证见咳嗽频剧,气急作喘,甚至不能平卧, 喉中痰鸣,痰量多,日约50- 60ml,质稀有泡沫,胸部膨满,微有恶寒发热,两下肢略见水肿,苔白腻较润,舌胖有齿印,舌质淡暗,脉浮细滑。
265 | 请根据患者症状写出证候分析,治法,处方
266 |
267 |
268 | #### 运营
269 | > 马上双十二了,写一个双十二运营活动的需求吧,我是卖编程课的
270 | > 功能7的跟踪和分析,用什么工具监控的
271 | > 写一个让用户感兴趣的消息推送
272 |
273 | #### 招聘经理
274 | > 我们团队想招聘一个高级前端工程师,希望能活泼一些,帮我写个招聘介绍吧
275 | > 不错,再写一个邀请候选人来面试的邮件吧,商务一些,活泼一些
276 | > 面试人来了,出5个高级前端工程师的面试题
277 | > 第一题答案是啥
278 | > 来两个简单的算法题
279 | > 候选人不太合适,写一个拒绝他的邮件,委婉一些
280 |
281 | #### 美食探店
282 | > 想做一个美食探店的视频,帮我写个文案吧
283 | > 今天去的是一个北京卤煮店,写一个文案,要体现口味非常的地道
284 | > 写一份蹭饭挑战的剧本
285 | > 写一个街头关于爱情采访的剧本
286 | >
287 |
288 | #### 职场人
289 | > 怎么跟领导提涨薪
290 | > 给我写一个英语商务邮件,语法优雅,友好一些,邮件内容是:下周一早晨我请大壮吃鸡蛋煎饼,顺便邀请开个早会
291 | #### 写前端代码
292 | > vue3代码 用户名密码
293 | > 加点验证
294 | > 密码加上md5加密
295 | > 代码转成react
296 | > 写点单元测试
297 | > 刚才你那段代码,我一直 PUA 它,让它要写单测,要用 esm 风格,要重构为 ts,要写性能测试,要写文档
298 |
299 | #### 玩游戏
300 | 我们来玩一个游戏吧,场景是这样的,不知为何,我一觉醒来,周围是一个荒岛,然后在荒岛种求生,你来扮演npc,我是玩家,你提供选项给我操作
301 |
302 | 可以加入一些修仙元素吗?比如我接下来会遇见仙人洞府之类的
303 |
304 |
305 |
306 | #### 写后端代码
307 |
308 | #### 写个app
309 |
310 | #### 写检讨
311 | > 我今天忘记做核酸了,老师要求每天都要做核酸,需要写一份500字的检讨书,认错态度要诚恳 帮忙写一下
312 | >
313 | > 今天忘了写日记了,今天主要就是出去遛狗,玩了一下午游戏,帮我写一个500字的日记吧
314 | >
315 | #### 写诗
316 | > 写一首阳了被送去方舱的诗
317 | >
318 | > 再写一首痊愈后从方舱出来,被歧视的诗
319 |
320 |
321 | #### 小学生
322 |
323 | > 帮我写一篇日记,小学四年级 在朝阳公园堆雪人,然后去吃肯德基的日记,不少于800字
324 | ---
325 |
326 |
327 | >
328 | 这个开放之后,稍微二开一下,每个人都可以拥有自己的贾维斯人工智能助理了,期待
329 |
330 | 不过老有人说这玩意会取代程序员,取代产品经理,这个我感觉还不至于,可能会淘汰一些入门的岗位,AI本身也需要输入,需要高质量的从业人员贡献产出,所以无论哪个行业,不想被AI取代,还是得提高自己的知识水平啊
331 |
332 |
333 | ## 补充
334 |
335 | [体验地址,需要注册](https://chat.openai.com/chat)
336 |
337 | [1块钱注册教程](https://juejin.cn/post/7173447848292253704)
338 |
339 | 1. 你要能访问google
340 | 2. 得有个国外手机号,或者1块钱去sms-activate.org注册一个虚拟的
341 |
342 |
343 |
--------------------------------------------------------------------------------
/docs/public/ikun.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | ikun-只因键盘
9 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
ikun只因键盘
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 | 参考曲谱:
100 | jntm
101 | jns
102 | gah
103 | zqerjntmwjns
104 |
105 |
106 |
107 |
108 |
110 | 联系我 一起学编程
111 |
112 |
113 |
114 |
115 |
318 |
319 |
320 |
--------------------------------------------------------------------------------
/docs/.vitepress/config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfigWithTheme,defineConfig } from 'vitepress'
2 | import type { Config as ThemeConfig } from '@vue/theme'
3 | import { withMermaid } from "vitepress-plugin-mermaid";
4 | import fs from 'fs'
5 | import path from 'path'
6 | import { fileURLToPath } from 'url';
7 | import { biliSvg,telegramSvg } from './util';
8 |
9 | const __filename = fileURLToPath(import.meta.url);
10 | const __dirname = path.dirname(__filename);
11 |
12 | // import taskLists from 'markdown-it-task-lists'
13 |
14 | function getDirctSidebar(pathname: string) {
15 | const p = path.resolve(__dirname, '../', pathname)
16 | if(!fs.existsSync(p)) return []
17 | const dirct = fs.readdirSync(p)
18 | .filter(v=>v.endsWith('.md'))
19 | .sort((a, b) => {
20 | if(a==='index.md') return 1
21 | if(a[0]!=='2') return 1
22 | return a>b ? -1 : 1
23 | })
24 | return dirct.map(dir=>{
25 | const file = fs.readFileSync(path.resolve(p,dir)).toString()
26 | let text = dir
27 | let lines = file.split('\n')
28 | const line = lines.shift() as string
29 | if(line.startsWith('# ')){
30 | text = line.replace('# ','')
31 | }else{
32 | if(line.startsWith('---')){
33 | const index = lines.findIndex(v=>v.startsWith('---'))
34 | lines = lines.slice(index+1).filter(v=>v)
35 | if(lines[0].startsWith('# ')){
36 | text = lines[0].replace('# ','')
37 | }
38 | }
39 | }
40 | return {
41 | text,
42 | link: `/${pathname}/${dir.replace('.md','')}`
43 | }
44 | })
45 | }
46 |
47 | const projectSidebar = {
48 | text:'前端实战进阶',
49 | collapsible: true,
50 | collapsed: true,
51 | items:getDirctSidebar('project')
52 | }
53 | // export default withMermaid(defineConfig({
54 | export default withMermaid(defineConfigWithTheme({
55 | title: '大圣前端进阶指南',
56 | description: '大圣前端进阶指南|Vue3|React|Vite|Cli|项目实战',
57 | head: [
58 | // ['link', { rel: 'icon', href: 'https://cdn.jsdelivr.net/gh/woniuppp/static/element3.ico', type: 'image/svg+xml' }],
59 | ['link', { rel: 'alternate icon', href: 'https://cdn.jsdelivr.net/gh/woniuppp/static/woniu.png', type: 'image/png', sizes: '16x16' }],
60 | // ['script',{src:'/live2d.js'}],
61 | ['link', { rel: 'stylesheet', href:'https://unpkg.com/tailwindcss@2.0.4/dist/tailwind.min.css' }],
62 | // ['link', { rel: 'stylesheet', href:'https://cdn.jsdelivr.net/npm/daisyui@2.51.3/dist/full.css' }],
63 |
64 |
65 | ['script',{src:"https://hm.baidu.com/hm.js?ccf55dfd2764cf3ebf43d6b3c9da9b20"}]
66 | ],
67 | // mermaid:{
68 | // theme: 'dark' // default,neutral,forest,dark,base
69 | // },
70 | appearance:false,
71 |
72 | // base:"/src/"
73 | themeConfig: {
74 | me: {
75 | // wechat:"https://cdn.jsdelivr.net/gh/woniuppp/static/wechat.jpg"
76 | // wechat: "https://cdn.jsdelivr.net/gh/woniuppp/static/jingu2.png"
77 | wechat: "/wechat2.png",
78 | gongzhonghao: "/gongzhonghao.jpeg"
79 | // wechat:"https://cdn.jsdelivr.net/gh/woniuppp/static/xiao3.jpg"
80 | },
81 | logo: 'https://cdn.jsdelivr.net/gh/woniuppp/static/woniu.png',
82 | nav: [
83 | // { text: '英语', link: '/blog/itwords' },
84 | { text: '面试课', link: '/interview/' },
85 | { text: '🔥玩转Vue3', link: '/vue/' },
86 | { text: '🔥玩转React18', link: '/react/' },
87 | { text: '源码漫游记', link: '/source/' },
88 | { text: '前端学算法', link: '/algorithm/' },
89 | { text: '1V1咨询', link: '/1v1' },
90 | { text: '关于我', link: '/about' },
91 | { text: '路线图', link: 'https://roadmap.shengxinjing.cn/' },
92 | ],
93 |
94 | socialLinks: [
95 | { icon: 'youtube', link: 'https://www.youtube.com/@shengxj' },
96 | { icon: 'discord', link: 'https://discord.gg/qCB4pUzpzw' },
97 | { icon: 'github', link: 'https://github.com/shengxinjing/fe-advanced-interview' },
98 | { icon: 'twitter', link: 'https://twitter.com/shengxj1' },
99 | {
100 | icon: {
101 | svg: biliSvg
102 | }, link: "https://space.bilibili.com/26995758"
103 | },
104 | {
105 | icon: {
106 | svg: telegramSvg}, link: "https://t.me/+TudEYWNH2fw4NDg1"
107 | },
108 | // {
109 | // icon: {
110 | // svg: `
116 | // `,
117 | // }, link: "https://mas.to/@shengxj"
118 | // }
119 | ],
120 | lastUpdatedText:"更新时间",
121 | editLink: {
122 | pattern: 'https://github.com/shengxinjing/fe-advanced-interview/tree/main/docs/:path',
123 | text: '编辑页面'
124 | },
125 | markdown:{
126 | config(md){
127 | // md.use(taskLists)
128 | }
129 | },
130 | sidebar: {
131 | "/react":[
132 | {
133 | text: '玩转React18',
134 | // link: "/react/",
135 | collapsible: true,
136 | collapsed: false,
137 | items: [
138 | {
139 | text: 'React+TS企业级实战+组件库', link: '/react/'
140 | },
141 | {
142 | text:'实战入门', items: getDirctSidebar('react/intro')
143 | },
144 | {
145 | text:'企业级实战', items: getDirctSidebar('react/arch')
146 | },
147 | {
148 | text:'自己的组件库', items: getDirctSidebar('react/component')
149 | },
150 | {
151 | text:'React生态', items: getDirctSidebar('react/framework')
152 | },
153 | ],
154 | }
155 | ],
156 | "/vue":[
157 | {
158 | text: '玩转Vue3',
159 | // link: "/react/",
160 | collapsible: true,
161 | collapsed: true,
162 | items: [
163 | {
164 | text: 'Vue3+TS企业级实战+组件库', link: '/vue/'
165 | },
166 | {
167 | text:'实战入门', items:getDirctSidebar('vue/intro')
168 | },
169 | {
170 | text:'企业级实战', items:getDirctSidebar('vue/arch')
171 | },
172 | {
173 | text:'组件库入门', items:getDirctSidebar('vue/component')
174 | },
175 | {
176 | text:'Vue生态', items: getDirctSidebar('vue/framework')
177 | },
178 | ],
179 | },
180 | ],
181 | '/': [
182 |
183 | {
184 | text:'文章',
185 | collapsible: true,
186 | collapsed: false,
187 | items:[
188 | {text:'',items:getDirctSidebar('blog')},
189 | {text:'读书测评',items:getDirctSidebar('books')},
190 | {text:'生活规划',items:getDirctSidebar('life')}
191 | ]
192 | },
193 | // {
194 | // text:'面试题',
195 | // collapsible: true,
196 | // collapsed: true,
197 | // items:[
198 | // {text:'面试题',link:'/interview/'},
199 | // ]
200 | // },
201 |
202 | // projectSidebar,
203 | // {
204 | // text:"源码漫游记",
205 | // collapsible: true,
206 | // collapsed: true,
207 | // items:getDirctSidebar('source')
208 | // },
209 | // {
210 | // text:"前端啃算法",
211 | // collapsible: true,
212 | // collapsed: true,
213 | // items:getDirctSidebar('algorithm')
214 | // }
215 | ],
216 | },
217 | footer: {
218 | message: '追求持续轻松的职业生涯',
219 | // copyright: ' Copyright © 京ICP备18000331号-1'
220 | }
221 | },
222 |
223 | }))
--------------------------------------------------------------------------------
/docs/me.md:
--------------------------------------------------------------------------------
1 | The essence of most Internet projects is to create, read, update, and delete data, we call it CRUD for short, the front-end framework is the crud of the browser elements, and the back-end framework is the crud of the data
2 |
3 | Using the front-end framework as an example, first, we need to understand how the framework interacts with the browser because the list application requires input elements, buttons, and lists to display
4 |
5 | We need to get the user's input, and the list of data to add or delete, but also synchronize to the browser, this step will give birth to MVC, MVMM, and other development concepts
6 |
7 | There is also a website https://todomvc.com/
8 | you can see all the front-end frameworks to achieve the code for the Todo-list application
9 |
10 |
11 |
12 |
13 | {
14 | "cmd": "SEND_GIFT",
15 | "data": {
16 | "action": "投喂",
17 | "batch_combo_id": "batch:gift:combo_id:26995758:1196492516:31039:1671098209.8109",
18 | "batch_combo_send": {
19 | "action": "投喂",
20 | "batch_combo_id": "batch:gift:combo_id:26995758:1196492516:31039:1671098209.8109",
21 | "batch_combo_num": 1,
22 | "blind_gift": null,
23 | "gift_id": 31039,
24 | "gift_name": "牛哇牛哇",
25 | "gift_num": 1,
26 | "send_master": null,
27 | "uid": 26995758,
28 | "uname": "花果山-大圣"
29 | },
30 | "beatId": "0",
31 | "biz_source": "Live",
32 | "blind_gift": null,
33 | "broadcast_id": 0,
34 | "coin_type": "gold",
35 | "combo_resources_id": 1,
36 | "combo_send": {
37 | "action": "投喂",
38 | "combo_id": "gift:combo_id:26995758:1196492516:31039:1671098209.8076",
39 | "combo_num": 1,
40 | "gift_id": 31039,
41 | "gift_name": "牛哇牛哇",
42 | "gift_num": 1,
43 | "send_master": null,
44 | "uid": 26995758,
45 | "uname": "花果山-大圣"
46 | },
47 | "combo_stay_time": 3,
48 | "combo_total_coin": 100,
49 | "crit_prob": 0,
50 | "demarcation": 1,
51 | "discount_price": 100,
52 | "dmscore": 8,
53 | "draw": 0,
54 | "effect": 0,
55 | "effect_block": 0,
56 | "face": "https://i0.hdslb.com/bfs/face/d945b3c10c48053d1d23769dc6a7b4140971835c.jpg",
57 | "face_effect_id": 0,
58 | "face_effect_type": 0,
59 | "float_sc_resource_id": 0,
60 | "giftId": 31039,
61 | "giftName": "牛哇牛哇",
62 | "giftType": 0,
63 | "gold": 0,
64 | "guard_level": 0,
65 | "is_first": true,
66 | "is_naming": false,
67 | "is_special_batch": 0,
68 | "magnification": 1,
69 | "medal_info": {
70 | "anchor_roomid": 0,
71 | "anchor_uname": "",
72 | "guard_level": 0,
73 | "icon_id": 0,
74 | "is_lighted": 0,
75 | "medal_color": 0,
76 | "medal_color_border": 0,
77 | "medal_color_end": 0,
78 | "medal_color_start": 0,
79 | "medal_level": 0,
80 | "medal_name": "",
81 | "special": "",
82 | "target_id": 0
83 | },
84 | "name_color": "",
85 | "num": 1,
86 | "original_gift_name": "",
87 | "price": 100,
88 | "rcost": 1091862,
89 | "remain": 0,
90 | "rnd": "1671098209111800001",
91 | "send_master": null,
92 | "silver": 0,
93 | "super": 0,
94 | "super_batch_gift_num": 1,
95 | "super_gift_num": 1,
96 | "svga_block": 0,
97 | "switch": true,
98 | "tag_image": "",
99 | "tid": "1671098209111800001",
100 | "timestamp": 1671098209,
101 | "top_list": null,
102 | "total_coin": 100,
103 | "uid": 26995758,
104 | "uname": "花果山-大圣"
105 | }
106 | }
107 | 感谢礼物: 26995758 花果山-大圣 投喂 1 个 | 牛哇牛哇(1)
108 | {
109 | "cmd": "SEND_GIFT",
110 | "data": {
111 | "action": "投喂",
112 | "batch_combo_id": "batch:gift:combo_id:26995758:1196492516:31039:1671098209.8109",
113 | "batch_combo_send": null,
114 | "beatId": "0",
115 | "biz_source": "Live",
116 | "blind_gift": null,
117 | "broadcast_id": 0,
118 | "coin_type": "gold",
119 | "combo_resources_id": 1,
120 | "combo_send": null,
121 | "combo_stay_time": 3,
122 | "combo_total_coin": 200,
123 | "crit_prob": 0,
124 | "demarcation": 1,
125 | "discount_price": 100,
126 | "dmscore": 8,
127 | "draw": 0,
128 | "effect": 0,
129 | "effect_block": 0,
130 | "face": "https://i0.hdslb.com/bfs/face/d945b3c10c48053d1d23769dc6a7b4140971835c.jpg",
131 | "face_effect_id": 0,
132 | "face_effect_type": 0,
133 | "float_sc_resource_id": 0,
134 | "giftId": 31039,
135 | "giftName": "牛哇牛哇",
136 | "giftType": 0,
137 | "gold": 0,
138 | "guard_level": 0,
139 | "is_first": false,
140 | "is_naming": false,
141 | "is_special_batch": 0,
142 | "magnification": 1,
143 | "medal_info": {
144 | "anchor_roomid": 0,
145 | "anchor_uname": "",
146 | "guard_level": 0,
147 | "icon_id": 0,
148 | "is_lighted": 0,
149 | "medal_color": 0,
150 | "medal_color_border": 0,
151 | "medal_color_end": 0,
152 | "medal_color_start": 0,
153 | "medal_level": 0,
154 | "medal_name": "",
155 | "special": "",
156 | "target_id": 0
157 | },
158 | "name_color": "",
159 | "num": 1,
160 | "original_gift_name": "",
161 | "price": 100,
162 | "rcost": 1091863,
163 | "remain": 0,
164 | "rnd": "1671098211111800001",
165 | "send_master": null,
166 | "silver": 0,
167 | "super": 0,
168 | "super_batch_gift_num": 2,
169 | "super_gift_num": 2,
170 | "svga_block": 0,
171 | "switch": true,
172 | "tag_image": "",
173 | "tid": "1671098211111800001",
174 | "timestamp": 1671098211,
175 | "top_list": null,
176 | "total_coin": 100,
177 | "uid": 26995758,
178 | "uname": "花果山-大圣"
179 | }
180 | }
181 | 感谢礼物: 26995758 花果山-大圣 投喂 1 个 | 牛哇牛哇(2)
182 | {
183 | "cmd": "SEND_GIFT",
184 | "data": {
185 | "action": "投喂",
186 | "batch_combo_id": "batch:gift:combo_id:26995758:1196492516:31039:1671098209.8109",
187 | "batch_combo_send": null,
188 | "beatId": "0",
189 | "biz_source": "Live",
190 | "blind_gift": null,
191 | "broadcast_id": 0,
192 | "coin_type": "gold",
193 | "combo_resources_id": 1,
194 | "combo_send": null,
195 | "combo_stay_time": 3,
196 | "combo_total_coin": 300,
197 | "crit_prob": 0,
198 | "demarcation": 1,
199 | "discount_price": 100,
200 | "dmscore": 8,
201 | "draw": 0,
202 | "effect": 0,
203 | "effect_block": 0,
204 | "face": "https://i0.hdslb.com/bfs/face/d945b3c10c48053d1d23769dc6a7b4140971835c.jpg",
205 | "face_effect_id": 0,
206 | "face_effect_type": 0,
207 | "float_sc_resource_id": 0,
208 | "giftId": 31039,
209 | "giftName": "牛哇牛哇",
210 | "giftType": 0,
211 | "gold": 0,
212 | "guard_level": 0,
213 | "is_first": false,
214 | "is_naming": false,
215 | "is_special_batch": 0,
216 | "magnification": 1,
217 | "medal_info": {
218 | "anchor_roomid": 0,
219 | "anchor_uname": "",
220 | "guard_level": 0,
221 | "icon_id": 0,
222 | "is_lighted": 0,
223 | "medal_color": 0,
224 | "medal_color_border": 0,
225 | "medal_color_end": 0,
226 | "medal_color_start": 0,
227 | "medal_level": 0,
228 | "medal_name": "",
229 | "special": "",
230 | "target_id": 0
231 | },
232 | "name_color": "",
233 | "num": 1,
234 | "original_gift_name": "",
235 | "price": 100,
236 | "rcost": 1091864,
237 | "remain": 0,
238 | "rnd": "1671098214111800001",
239 | "send_master": null,
240 | "silver": 0,
241 | "super": 0,
242 | "super_batch_gift_num": 3,
243 | "super_gift_num": 3,
244 | "svga_block": 0,
245 | "switch": true,
246 | "tag_image": "",
247 | "tid": "1671098214111800001",
248 | "timestamp": 1671098214,
249 | "top_list": null,
250 | "total_coin": 100,
251 | "uid": 26995758,
252 | "uname": "花果山-大圣"
253 | }
254 | }
255 | 感谢礼物: 26995758 花果山-大圣 投喂 1 个 | 牛哇牛哇(3)
256 | {
257 | "cmd": "SEND_GIFT",
258 | "data": {
259 | "action": "投喂",
260 | "batch_combo_id": "batch:gift:combo_id:26995758:1196492516:31039:1671098209.8109",
261 | "batch_combo_send": null,
262 | "beatId": "0",
263 | "biz_source": "Live",
264 | "blind_gift": null,
265 | "broadcast_id": 0,
266 | "coin_type": "gold",
267 | "combo_resources_id": 1,
268 | "combo_send": null,
269 | "combo_stay_time": 3,
270 | "combo_total_coin": 400,
271 | "crit_prob": 0,
272 | "demarcation": 1,
273 | "discount_price": 100,
274 | "dmscore": 8,
275 | "draw": 0,
276 | "effect": 0,
277 | "effect_block": 0,
278 | "face": "https://i0.hdslb.com/bfs/face/d945b3c10c48053d1d23769dc6a7b4140971835c.jpg",
279 | "face_effect_id": 0,
280 | "face_effect_type": 0,
281 | "float_sc_resource_id": 0,
282 | "giftId": 31039,
283 | "giftName": "牛哇牛哇",
284 | "giftType": 0,
285 | "gold": 0,
286 | "guard_level": 0,
287 | "is_first": false,
288 | "is_naming": false,
289 | "is_special_batch": 0,
290 | "magnification": 1,
291 | "medal_info": {
292 | "anchor_roomid": 0,
293 | "anchor_uname": "",
294 | "guard_level": 0,
295 | "icon_id": 0,
296 | "is_lighted": 0,
297 | "medal_color": 0,
298 | "medal_color_border": 0,
299 | "medal_color_end": 0,
300 | "medal_color_start": 0,
301 | "medal_level": 0,
302 | "medal_name": "",
303 | "special": "",
304 | "target_id": 0
305 | },
306 | "name_color": "",
307 | "num": 1,
308 | "original_gift_name": "",
309 | "price": 100,
310 | "rcost": 1091865,
311 | "remain": 0,
312 | "rnd": "1671098215111800001",
313 | "send_master": null,
314 | "silver": 0,
315 | "super": 0,
316 | "super_batch_gift_num": 4,
317 | "super_gift_num": 4,
318 | "svga_block": 0,
319 | "switch": true,
320 | "tag_image": "",
321 | "tid": "1671098215111800001",
322 | "timestamp": 1671098215,
323 | "top_list": null,
324 | "total_coin": 100,
325 | "uid": 26995758,
326 | "uname": "花果山-大圣"
327 | }
328 | }
329 | 感谢礼物: 26995758 花果山-大圣 投喂 1 个 | 牛哇牛哇(4)
330 | {
331 | "cmd": "SEND_GIFT",
332 | "data": {
333 | "action": "投喂",
334 | "batch_combo_id": "batch:gift:combo_id:26995758:1196492516:31039:1671098209.8109",
335 | "batch_combo_send": null,
336 | "beatId": "0",
337 | "biz_source": "Live",
338 | "blind_gift": null,
339 | "broadcast_id": 0,
340 | "coin_type": "gold",
341 | "combo_resources_id": 1,
342 | "combo_send": null,
343 | "combo_stay_time": 3,
344 | "combo_total_coin": 500,
345 | "crit_prob": 0,
346 | "demarcation": 1,
347 | "discount_price": 100,
348 | "dmscore": 8,
349 | "draw": 0,
350 | "effect": 0,
351 | "effect_block": 0,
352 | "face": "https://i0.hdslb.com/bfs/face/d945b3c10c48053d1d23769dc6a7b4140971835c.jpg",
353 | "face_effect_id": 0,
354 | "face_effect_type": 0,
355 | "float_sc_resource_id": 0,
356 | "giftId": 31039,
357 | "giftName": "牛哇牛哇",
358 | "giftType": 0,
359 | "gold": 0,
360 | "guard_level": 0,
361 | "is_first": false,
362 | "is_naming": false,
363 | "is_special_batch": 0,
364 | "magnification": 1,
365 | "medal_info": {
366 | "anchor_roomid": 0,
367 | "anchor_uname": "",
368 | "guard_level": 0,
369 | "icon_id": 0,
370 | "is_lighted": 0,
371 | "medal_color": 0,
372 | "medal_color_border": 0,
373 | "medal_color_end": 0,
374 | "medal_color_start": 0,
375 | "medal_level": 0,
376 | "medal_name": "",
377 | "special": "",
378 | "target_id": 0
379 | },
380 | "name_color": "",
381 | "num": 1,
382 | "original_gift_name": "",
383 | "price": 100,
384 | "rcost": 1091865,
385 | "remain": 0,
386 | "rnd": "1671098216111800001",
387 | "send_master": null,
388 | "silver": 0,
389 | "super": 0,
390 | "super_batch_gift_num": 5,
391 | "super_gift_num": 5,
392 | "svga_block": 0,
393 | "switch": true,
394 | "tag_image": "",
395 | "tid": "1671098216111800001",
396 | "timestamp": 1671098216,
397 | "top_list": null,
398 | "total_coin": 100,
399 | "uid": 26995758,
400 | "uname": "花果山-大圣"
401 | }
402 | }
403 | 感谢礼物: 26995758 花果山-大圣 投喂 1 个 | 牛哇牛哇(5)
404 | 弹幕 2022-12-15 17:56:59 33579594 Innnnooovation 五天了!
405 | {
406 | "cmd": "COM
407 |
408 |
409 |
410 | 代码有bug
411 |
412 | 前段时间,做项目需要在地图上展示聚合点,搜索了一些资料,最终使用高德地图实现。
413 |
414 | ### 一、高德地图聚合点简介
415 |
416 | 聚合点是指将多个位置点进行聚合,以一个点的形式显示出来,并显示聚合的点的数量,减少点的数量,提升地图的美观度。
417 |
418 | 
419 |
420 | ### 二、高德地图聚合点实现
421 |
422 | 高德地图支持使用JS API实现,实现的步骤如下:
423 |
424 | 1. 引入高德地图JS API文件
425 |
426 | ```html
427 |
428 | ```
429 |
430 | 2. 初始化地图
431 |
432 | ```js
433 | // 初始化地图对象,加载地图
434 | map = new AMap.Map("container", {
435 | resizeEnable: true,
436 | center: [116.397428, 39.90923], //地图中心点
437 | zoom: 10
438 | });
439 | ```
440 |
441 | 3. 添加聚
442 | {
443 | code: 0,
444 | message: '0',
445 | ttl: 1,
446 | data: {
447 | relation: { mid: 0, attribute: 0, mtime: 0, tag: null, special: 0 },
448 | be_relation: {
449 | mid: 26995758,
450 | attribute: 2,
451 | mtime: 1650116396,
452 | tag: null,
453 | special: 0
454 | }
455 | }
456 | }
--------------------------------------------------------------------------------
/docs/blog/itwords.md:
--------------------------------------------------------------------------------
1 | ---
2 | # aside: false
3 | ---
4 | # 程序员相关单词和短语
5 |
6 | 做一个好好学英语的程序员,左下角【编辑页面】欢迎PR
7 | ```
8 | Word组件包裹 就可以发音了,单词发音来自有道词典
9 | privacy
10 | ```
11 |
12 | ---
13 |
14 |
15 | Vue is a JavaScript framework that helps developers build user interfaces efficiently using a declarative and component-based programming model. It extends standard HTML, CSS, and JavaScript, and provides features such as declarative rendering and reactivity to track JavaScript state changes and update the DOM efficiently.
16 |
17 | Vue is designed to be flexible and incrementally adoptable, and can be used in different ways depending on the use case, such as enhancing static HTML or building single-page applications. Vue also supports Single-File Components for authoring Vue components, which we can write the component's logic, template, and styles in a single file. Vue components can be authored in two different API styles, Options API and Composition API, both of which are capable of covering common use cases. The Options API is more beginner-friendly, while the Composition API enables more powerful patterns for organizing and reusing logic.
18 |
19 | education
20 |
21 | learn React is an arduous but rewarding process
22 |
23 | Teaching can be a very resarding career,it allows teachers to have an input in the development of young lives
24 | work
25 | people
26 | traffic
27 | food
28 | media
29 | science
30 | friendship
31 | likes and dislike
32 | effort,plan
33 | clothing,
34 | reading,writing
35 | money
36 | music
37 | travel
38 | sports
39 | skill
40 | crime,law,justice
41 | nature
42 | health,fitness
43 | culture
44 | building
45 | parties,festivals
46 | goverment
47 | environment
48 | animals
49 | home appliances
50 | development
51 | family
52 | solutions
53 |
54 |
55 |
56 | ---
57 | 口语练习
58 | ```
59 | work/study where do you live
60 | birthdays weather morning snacks technology writing
61 | geography housrwork/job
62 | travelling(public) puzzles
63 | names singing social media
64 | where do you live
65 | small business, jewelry
66 | space and the stars
67 | chocolate ,weekends ,T-shirts
68 | keys,being happy,library,art
69 | sports
70 | ```
71 | ## 学习群
72 |
73 | 先做自我介绍w
74 |
75 | ```
76 | Hey, I am Sheng Xinjing, a self-employed programmer whose main job is to build programming courses and contribute to the open-source project
77 |
78 | With 10 years of javascript development experience and 5 years of management, I am very happy to join this group to improve my English skills and I am planning to find a remote job abroad in the future.
79 |
80 | Outside of programming, I enjoy traveling, reading, and computer games, If you happen to be in the same city I live ( currently in Beijing ), maybe we can hang out and code together.
81 | ```
82 |
83 |
84 |
85 | | 纪录片| 字幕(中英对照)|
86 | | ---------------- | :---: |
87 | | [React纪录片](https://www.bilibili.com/video/BV188411T7ty/) | [字幕](/subtitle/react.html)|
88 |
89 | | 单词 (拼错 or 不好发音) | 翻译 |
90 | | ---------------- | :---: |
91 | | privacy | 隐私 |
92 | | fiber | |
93 | | access | 访问权限 |
94 | | exclamation point | `!`感叹号 |
95 | | hyphen | `-`连字号 |
96 | | semicolon | `;`分号|
97 | | double quotes | `"` 双引号 |
98 | | single quotes | `'` 单引号 |
99 | | colon | `:`冒号 |
100 | | semicolon | `;`分号 |
101 | | pound | `#`井号 |
102 | | parenthesis | `()`圆括号 |
103 | | square bracket | `[]`方括号 |
104 | | curly brace | `{}`花括号 |
105 | | asterisk | `*`星号 |
106 | | caret | `^` |
107 | | slash | `/` 斜线 |
108 | | back slash | `\` 反斜线 |
109 | | tilde | `~` 波浪线 |
110 | | ampersand | `&` and符 |
111 | | pipe | `\|` 竖杠 |
112 | | underscore | `_` 下划线 |
113 | | backtick | `反引号 |
114 | | decimal | `.` 小数点 |
115 | | addition operator | `+` 加号 |
116 | | multiplication operator | `*` 乘号 |
117 | | subtraction | 减法 |
118 | | division | 除法 |
119 | | 前端工程师 | |
120 | | frontend | 前端 |
121 | | closure | 闭包 |
122 | | box model | 盒模型 |
123 | | pseudo class | 伪类 |
124 | | preprocessors | 预处理器 |
125 | | hoisting | 变量提升 |
126 | | self-invoking | 函数自执行 |
127 | | higher-order | 高阶(函数,组件) |
128 | | user interfaces | 用户界面(UI) |
129 | | declarative | 声明式|
130 | | reactivity | 响应式|
131 | | single-file components | 单文件组件(Vue)|
132 | | composition | 组合Api|
133 | | integration | 集成|
134 | | scaffolding | 脚手架|
135 | | monolithic | 大型的|
136 | | recursive | 递归|
137 | | concurrency | 并发|
138 | | Virtual dom | 虚拟Dom|
139 | | immutable | 不可变的|
140 | | polyfill | 垫片(语法垫片)|
141 | | scheduler |调度|
142 | | 后端工程师 | |
143 | | backend | 后端|
144 | | asynchronous | 异步|
145 | | synchronous | 同步|
146 | | agile | 敏捷的|
147 | | agnostic | 不可知的|
148 | | arbitrary | 任意的|
149 | | crucial | 至关重要|
150 | | elastic | 弹性的|
151 | | hierarchical | 分层的|
152 | | implicit | 隐式|
153 | | intrusive | 侵入式|
154 | | permanent | 永久的|
155 | | retrospective | 回顾|
156 | | sophisticated | 复杂的|
157 | | sustainable | 可持续|
158 | | decouple | 解耦|
159 | | leverage | 杠杆,利用|
160 | | implement | 实现|
161 | | architecture | 架构|
162 | | bandwidth | 带宽,资源|
163 | | bottleneck | 瓶颈|
164 | | infrastructure | 基础设施|
165 | | 简历吹自己的词 | |
166 | | Approachable | 平易近人 |
167 | | Creative | 有创造力 |
168 | | Responsible | 有责任心 |
169 | | Hardworking | 努力工作 |
170 |
171 |
172 | ## 短语
173 |
174 | | 中文 | 翻译 |
175 | | ------------- | :----------- |
176 | | 这不是bug是功能 | It's not a bug, it's a feature. |
177 | | 裁员 | Send talents to the society |
178 | | 你需要系统的思考,你做的这个事的价值是什么 | You need to be able to think systematically. What is the value of what you do? |
179 | |能干的干,不干就走|Do it if you can,get out if you don't|
180 | |XX是年轻人的福报| XX is a blessing for young people|
181 | | 在字节,你需要学会如何去学习,而不是学习什么| In ByteDance, you need to learn how to learn, not what to learn|
182 | |其实,我对你是有一些失望的。当初给你定级P6,是高于你面试时的水平的。|To be honest, I am somewhat disappointed in you. When I assigned you the P6 rating, it was based on a level higher than your performance during the interview.|
183 | |我是希望进来后,你能够拼一把,快速成长起来的。|I was hoping that after coming in, you would be able to put in the effort and grow quickly.|
184 | |P7这个层级,不是把事情做好就可以的。你需要有体系化思考的能力。|The P7 level is not just about getting things done. You need to have the ability to think systematically.|
185 | |你做的事情,他的价值点在哪里?|Where is the value in what you are doing?|
186 | |你是否作出了壁垒形成了核心竞争力?|Have you created barriers and formed a core competency?|
187 | |你做的事情,和公司内其他团队的差异化在哪里?你的事情,是否沉淀了一套可复用的物理资料和方法论?|Where is the differentiation in what you are doing compared to other teams within the company? Have you developed a set of reusable physical materials and methodology for your work?|
188 | |为什么是你来做,其他人不能做吗?|Why are you the one doing this, can't anyone else do it?|
189 | |你需要有自己的判断力,而不是我说什么你就做什么。|You need to have your own judgment and not just do whatever I say.|
190 | |我不需要中规中矩的答卷,它是有一些差异化在里面的。|I don't need a conventional answer, there is some differentiation in it.|
191 | |把你的思考沉淀到日报周报月报里,我希望看到你的思考,而不仅仅是进度。|I want to see your thoughts reflected in your daily, weekly, and monthly reports, not just progress.|
192 | |提醒一下,你的产出,和同层级比,是有些单薄的|Just a reminder, your output compared to those at the same level is somewhat thin.|
193 | |马上要到年底了,加把劲儿|It's almost the end of the year, put in some extra effort.|
194 | |你看咱们团队的XX去年晋升之前,可以一整年都在项目室打地铺的。|You see, our team's XX worked in the project room for an entire year before being promoted last year.|
195 | |成长,一定是伴随着痛苦的 |Growth is always accompanied by pain.|
196 | | 你最痛苦的时候,恰恰就是你成长最快的时候,加油| ~~When you are the most painful, you are actually growing the fastest. come on~~the moments that you grow fastest are those when you suffer the most,so keep moving |
197 | |我不想狭隘地认为自己只是一个前端开发人员| I don’t want to narrow my mind and consider myself as a front-end developer only|
198 |
199 | ## tips
200 |
201 | ::: info 避免中式英语, 重点or主语在前面
202 |
203 | 我喜欢 [那个角色] 带着一把大剑的
204 |
205 | 我 [更高] 比他
206 | :::
207 |
208 |
209 | ## 好用的工具
210 | 1. https://www.deepl.com/
211 | 2. https://app.grammarly.com/
212 |
213 |
214 |
215 | framework
216 |
217 | avenue urban outskirts suburb suburban deposit rental
218 | cheque serial
219 |
220 | facility garage laundry furniture toaster stereo fridge
221 |
222 | landlord tenant occupation accountant geography biology physical mathematics politics economics physics chemistry statistics
223 |
224 | primary elementary secondary intermediate
225 |
226 | vegetarian vegan fruitarian flat accommodation
227 |
228 | torn leak flicker cockroach mosquito net(蚊帐) firefly
229 |
230 | balcony bedsit(起居兼卧室两用租间) trailer(拖车) caravan(拖车)
231 |
232 | transporation ferry cab
233 |
234 | church reptile cathedral cottages canoe fare reservation castle
235 |
236 | facility orientation stadium laboratory refectory cafeteria canteen dormitory residence
237 |
238 | lecturer associate professor dean principal counselor advisor
239 |
240 | finacial grant loan insurance domestic nersery academic
241 |
242 | occupation annual squash pitch judo stretch
243 |
244 | venue chilled buffet snake crisps biscuit lentil tart desserts sundae lobster
245 |
246 | overdue periodical encyclopedia bibliography mulitmedia photocopier interlibrary locker
247 |
248 | clinic practice infirmary chemist pharmacy
249 |
250 | internist surgeon surgery diploma
251 |
252 | lecturer demonstrator materials booklet handout facilities tape
253 |
254 | presentation measurement approach reference questionnaire criteria bibliography vocabulary paragraphs inaccurate essay survey assignment
255 |
256 | sevenfold incorrectness documentary italic evaluation seminar theory relevant approach conference laboratory assignment postal surgey
257 |
258 | lectures literature anthropology psychology sociology resit vocational
259 |
260 |
261 | 分割线
262 |
263 | barrier insurance supervision segment quiz theatrical velvet violin texture rural
264 |
265 | auditorium fertilizer concrete confidential leather morale democratic tin loyalty rational
266 |
267 | cafeteria contamination scent catalogue grain domestic pottery mayor geology mineral bound recruit religion sailing strain helicopter fossil harvest violation intact treasure periodical
268 |
269 | lentil thriller tolerance carnivorous vaccination isect slop spoon parallel temple insulation evolution resistant carpet charity fountain herb reinforce cittage vary refectory unaware marine massage skyscraper recreation tunnel military venue tailor cruise
270 |
271 | fluctuation discipline craftsman shelter catering strait stem thesis poverty vacant pest flute regrettable encyclopedia stretch kiosk surgery spine germ mite distortion atlas perferenct steel polish steer ladder intensive parliament glue welfare migration relaxation
272 |
273 |
274 | orientation laboratory nutrition aspiration oxygen literature shady dome mechanism bedsit buffet
275 |
276 | obligation instinct mature outfit cosmetics psychology theoretical curve volocanic trademark pigeon
277 |
278 | surplus compulsory conservation heritage activate itinerary
279 |
280 | corruption litre pump hibernate antifreeze mould melt impaction sediment tribe lobby butcher sedentary pedestrian hurricane plum vest powder troop
281 |
282 | mounument depression methodolgy linguistics simulation originality chill breed emu
283 |
284 | fence stadium seasoned immune cabin estimate evaporation sponge appealing erosion
285 |
286 | drought workforce rehearsal mobility orgainic therapy toll comprehension gradient enthusiasm institution elbow radiogram association corridor slang surveillance astrontaut
287 |
288 | rack fur consecutive peg syrup orchestra leak coordinate linen gum corporate hormone stike sculpture league coconut tire secretary trader jewelry facility stock scarce irrigation wasp oven
289 |
290 | kidney mansion debit estate predator endorse sheer debatable antibiotic
291 |
292 | hospitality stir pine prey motel migrant swan fort crab fraud wool circular negative harbor stomach tattoo radiator nusery typo arctic fever martial mattress fortune glory colonist dizzy fragrant sphere projector persuade utilize archievement telescope capablity culticate
293 |
294 | promotion carpenter nephew farewell bullet alter helmet spot suburb metallic petrol Greek
295 |
296 | snack incineration decade tobacco inferior soccer discrimination dormitory run-down clarity statue expertise ceremony dolphin bitter melon excursion consistent suspicious gamble sanctuary
297 |
298 | pasta mime wound sesame pluse worm eggplant
299 |
300 | brow ambitious sake badminton palm puppet campsite parasite capital sandstone loan revision generous lid truck canal scarf servant compliment dye supervise abbreviate crisis antique
301 |
302 | botanical proximity accredit magnify
303 |
304 | technicaion analogy socibiology forge fluster canyon insufficient juvenile justify
305 |
306 | infant bend ambulance intake rubber disguise
307 |
308 | landscape evaporate bitterness scissor brick monopoly resin span drowsy
309 |
310 | mat junction basement dam ballon crystal castle chase hypothesis steady
311 |
312 | misinterpret carnivorous projection emotion campanion oppourtunity otter debt
313 |
314 | weed liver announcement era miniature album bacteria slim dawn foyer athlete
315 |
316 | stereo necklace pursue hoof tension revolution counsel yam fleet digestive
317 |
318 | timber invasion realism display patent frustration berry esteem contaminate sewage
319 |
320 | flicker tame emission prosperity picnic kit tragedy continent sack chin silk pepper toungue
321 |
322 | wax nylon strap spice vet stove moral hostel bone sector ally verdict proof proportion
323 |
324 | tactic dean seminar bribe compensate behalf induction epic ferry satellite wrist viola
325 |
326 | crack trek journalism quilt coal regulation permit refurbish talent shortage indication
327 |
328 | morality vehicle curtain delicate hamburger residence bully mediator superiority
329 |
330 | valley absence bamboo associate booklet letter labor adequate myth
331 |
332 | elevator bracelet allergy diploma obey incentive scheme pond tram
333 |
334 | escalator souvenir cruise contemporary clay premiere
335 |
336 | verbal sustainable fiction leisure librarian stall observation
337 |
338 | ostrich colleague tutor mass naval lecturer marsh stamp expedition protein rigorous triple
339 |
340 | delivery fin flour mental definite instructor resort proficiency candel cabinet garage liable frontier
341 |
342 | lottery phenomenon expansion strategy curved bypass textile flu emperor court
343 |
344 | cable invoice perspective envelope transcript trumpet drum
345 |
346 | pot donkey scar figure appliance exterior plough mammal acid foam casino
347 |
348 | herbivorous anxiety grocery
349 |
350 | rust
351 |
352 | captcha
353 |
354 | obsession drama obsession
355 |
356 |
357 |
358 | United Kindom London Scotland(苏格兰) Wales威尔士 Ireland 爱尔兰 Australia Sydney Melbourne墨尔本 New Zealand新西兰 Canada加拿大 Toronto
359 |
360 | United States of America
361 |
362 |
363 |
--------------------------------------------------------------------------------