diff --git "a/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/kxspepu7t1b7783v.md" "b/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/kxspepu7t1b7783v.md" index b100d77..30c46ea 100644 --- "a/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/kxspepu7t1b7783v.md" +++ "b/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/kxspepu7t1b7783v.md" @@ -2,7 +2,7 @@ title: 计算机网络面试必问 urlname: kxspepu7t1b7783v date: '2024-08-07 12:53:57' -updated: '2024-09-24 20:58:29' +updated: '2024-10-04 09:08:21' cover: 'https://cdn.nlark.com/yuque/0/2024/png/22382235/1722953399419-c3811ae6-707c-48c1-8a48-d32f46d24b40.png?x-oss-process=image%2Fformat%2Cwebp' description: HTTP常用的状态码及其含义HTTP状态码是用来表示服务器响应客户端请求的状态。常用的状态码分为以下几类:状态码含义200OK:请求成功,服务器已返回所请求的数据。201Created:请求成功并且服务器创建了新的资源。204No Content:服务器成功处理了请求,但没有返回任何内容。30... --- @@ -667,11 +667,7 @@ if (!receivedToken.equals(sessionToken)) { -**「参考回答」**: - -WebSocket和socket虽然名字相似,但它们在本质上有很大的区别: - - +**「参考回答」**:WebSocket和socket虽然名字相似,但它们在本质上有很大的区别,一句话,WebSocket是HTML5新增的协议,用于解决浏览器与服务器全双工通信的问题,而Socket是一个更底层的概念,是网络编程的基础。 1. **概念层面**: - **Socket**:是一个**底层的通信接口**,是应用层与TCP/IP协议族通信的中间软件抽象层。它是一组接口,在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket后面。 @@ -692,7 +688,7 @@ WebSocket和socket虽然名字相似,但它们在本质上有很大的区别 - **Socket**:通常**不涉及跨域**问题。 - **WebSocket**:**支持跨域**通信。 -总的来说,WebSocket是HTML5新增的协议,用于解决浏览器与服务器全双工通信的问题,而Socket是一个更底层的概念,是网络编程的基础。 + # DoS、DDoS、DRDoS攻击的区别 **「面试官」**:请解释一下什么是DoS、DDoS、DRDoS攻击? diff --git "a/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/\351\235\242\350\257\225\347\234\237\351\242\230/iuv8q8c4vg3h6tg8.md" "b/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/\351\235\242\350\257\225\347\234\237\351\242\230/iuv8q8c4vg3h6tg8.md" new file mode 100644 index 0000000..c6bf2c0 --- /dev/null +++ "b/docs/doc/\360\237\222\271 \345\244\247\345\216\202\351\235\242\347\273\217/\351\235\242\350\257\225\347\234\237\351\242\230/iuv8q8c4vg3h6tg8.md" @@ -0,0 +1,64 @@ +--- +title: 字节三次面试面经 +urlname: iuv8q8c4vg3h6tg8 +date: '2024-10-02 23:07:25' +updated: '2024-10-02 23:10:21' +description: 一面MySQL相关MySQL CPU飙高如何排查?整个系统的性能瓶颈是什么?如何排查的慢SQL?MySQL的索引结构是什么?详细讲一下B +树。MySQL的数据在B +树上是如何存储的?GC垃圾回收相关讲一下GC垃圾回收。GC垃圾回收时CPU大概会提升多少?Redis相关Redis的过期删除机... +--- +# 一面 +1. **MySQL相关** + - MySQL CPU飙高如何排查? + - 整个系统的性能瓶颈是什么? + - 如何排查的慢SQL? + - MySQL的索引结构是什么?详细讲一下B +树。MySQL的数据在B +树上是如何存储的? +2. **GC垃圾回收相关** + - 讲一下GC垃圾回收。 + - GC垃圾回收时CPU大概会提升多少? +3. **Redis相关** + - Redis的过期删除机制是什么?他的定时删除会发生冲突吗? + - Redis内存淘汰策略 +4. **IO相关** + - 讲一下IO多路复用,线程的资源占用大概是多少? + - select、poll、epoll的区别。为什么epoll性能好? +5. **算法题** + - 奇偶链表排序 + +# 二面 +1. **EPoll相关** + - EPoll是什么? +2. **IO模式相关** + - 同步IO和异步IO的区别在哪?如何将同步IO修改为异步IO? + - 常见的IO模式有哪些?这些IO模式有哪些区别? +3. **进程和线程相关** + - 进程和线程的区别? + - GMP模型中线程是一个什么样的角色? + - 进程间的通信方式? + - 命名管道和匿名管道的区别。 +4. **磁盘访问相关** + - 应用访问一块磁盘上的数据需要哪些步骤?讲一下上述过程中页表发生的变化。如何理解DMA? +5. **数据库设计相关** + - 设计一个数据库的表,需要遵循哪些原则? + - 优化MySQL插入可以从哪几个角度进行优化? +6. **网络相关** + - Socket和WebSocket的区别?socket的组成 + - TCP拥塞控制包括哪些阶段? +7. **算法和数据结构相关** + - 如何判断1亿个数某一个数是否存在,数的取值范围是1到1万亿。需要精确判断。 + - 字符串反转 + +# 三面 +1. **MySQL锁相关** + - MySQL锁机制讲一下。锁相关的这个使用上面有什么需要注意的吗? + - MySQL读select的性能优化方案。 + - MySQL读写分离和水平扩展的方式。 + - 读多写少的场景,数据不经常发生变化,如何处理? +2. **Redis相关** + - redis的性能受限于什么?如果需要对Redis性能进行扩展的话怎么做? + - Redis集群模式和主从模式有什么区别?集群模式下热key如何处理? + - 如何保障缓存和数据库的一致性?删除缓存后的缓存击穿如何处理? +3. **数据结构相关** + - zset有了解过吗?跳表有什么好处?zrange和zrangeby的时间复杂度是多少? +4. **场景题和算法题** + - 场景题:打赏排行榜 + - 大数乘法 + diff --git "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/satyn7anq2cv9p7p.md" "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/satyn7anq2cv9p7p.md" index 652e443..ada2be8 100644 --- "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/satyn7anq2cv9p7p.md" +++ "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/satyn7anq2cv9p7p.md" @@ -1,8 +1,8 @@ --- -title: 【教程】不一样的Nextjs! +title: 「万赞」不一样的Nextjs! urlname: satyn7anq2cv9p7p date: '2024-09-30 11:08:19' -updated: '2024-09-30 11:36:11' +updated: '2024-09-30 22:39:53' description: '---is_nav: falsenav_path: nextjskeywords: Nextjs,Nextjs教程tags: [''Nextjs'']---在前端开发的广袤天地中,Next.js 犹如一颗璀璨的新星,吸引着无数开发者的目光。本专栏——“聊点不一样的 Next.js!”将带你踏上一场...' is_nav: false nav_path: nextjs diff --git "a/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/negzqyxtxszvawof.md" "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/negzqyxtxszvawof.md" new file mode 100644 index 0000000..c63b5cb --- /dev/null +++ "b/docs/doc/\360\237\224\245 \347\250\213\345\272\217\345\221\230\350\207\252\346\210\221\344\277\256\345\205\273/\346\234\200\345\274\272\345\211\215\347\253\257\360\237\217\267\357\270\217/\343\200\214\344\270\207\350\265\236\343\200\215\344\270\215\344\270\200\346\240\267\347\232\204Nextjs\357\274\201/negzqyxtxszvawof.md" @@ -0,0 +1,376 @@ +--- +title: 「项目」开发一个导航网站 +urlname: negzqyxtxszvawof +date: '2024-09-30 22:40:04' +updated: '2024-10-08 08:52:01' +cover: 'https://cdn.nlark.com/yuque/0/2024/png/22382235/1727781047419-0223592a-fe80-4c9b-b389-4e833643c4f9.png' +description: '背景在工作学习中,发现一个问题,那就是有一个导航网站非常重要!无意之中,看到一个很棒的导航网站,打算基于此开发一个,记录一下开发的过程。Demo仓库:https://github.com/wangfengyuan/frontend-nav记录tailwindcss的scrollbarhttps...' +--- +# 背景 +在工作学习中,发现一个问题,那就是有一个导航网站非常重要! + + + +无意之中,看到一个很棒的导航网站,打算基于此开发一个,记录一下开发的过程。 + + + +Demo仓库:[https://github.com/wangfengyuan/frontend-nav](https://github.com/wangfengyuan/frontend-nav) + + + +# 记录 +## tailwindcss的scrollbar +[https://adoxography.github.io/tailwind-scrollbar/examples](https://adoxography.github.io/tailwind-scrollbar/examples) + + + +## prisma的env没有读取到dababase_url +参考这个帖子: + +[https://stackoverflow.com/questions/67796217/prisma-getting-environment-variable-not-found-error-message-when-running-graph](https://stackoverflow.com/questions/67796217/prisma-getting-environment-variable-not-found-error-message-when-running-graph) + +[https://www.prisma.io/docs/orm/more/development-environment/environment-variables/managing-env-files-and-setting-variables#manage-env-files-manually](https://www.prisma.io/docs/orm/more/development-environment/environment-variables/managing-env-files-and-setting-variables#manage-env-files-manually) + +两种解法: + +1、安装dotenv + +2、直接env.local改名为env + + + +## 登陆怎么做? +### 测试账号 +```typescript +test1997321@qq.com + test1997322@qq.com + test1997323@qq.com + test1997324@qq.com + test1997325@qq.com + test1997326@qq.com ** admin +123456789 + +email: '1373685219@qq.com', + password: 'leilei1997321me', +``` + + + +### bcrypt-ts到底怎么用? +!!!注意!不能够把加盐的函数直接去比较,因为每次生产的都是不一样的! + +![](https://oss1.aistar.cool/elog-offer-now/5b3f4eb25fd2485c267fac74c6ab1b25.png) + + + + + + + ++ 如果是Github模式 + +0、参考[https://authjs.dev/getting-started/authentication/oauth](https://authjs.dev/getting-started/authentication/oauth) + +1、先在github申请appid和secret,填写url链接 + +2、而后在nextjs的env中写上 + +![](https://oss1.aistar.cool/elog-offer-now/dafedf58f2ded0e54eaa829f0e455ba8.png) + + + + + ++ 如果是账号密码模式 + +[https://authjs.dev/getting-started/authentication/credentials](https://authjs.dev/getting-started/authentication/credentials) + +![](https://oss1.aistar.cool/elog-offer-now/8bf25afc09f6f8a26eddac0ae674ff08.png) + + + +必须这样!!!官方文档是错的!! + +![](https://oss1.aistar.cool/elog-offer-now/225bfa5746d131c00f74d01b18afb545.png) + + + +### from的action类型错误? +不用管··· + + + +[https://www.reddit.com/r/nextjs/comments/1616bh9/form_action_not_working/](https://www.reddit.com/r/nextjs/comments/1616bh9/form_action_not_working/) + +[https://github.com/vercel/next.js/discussions/56581](https://github.com/vercel/next.js/discussions/56581) + + + +### client和server的调用方式不一样·· +![](https://oss1.aistar.cool/elog-offer-now/b2ccc78c2593e903422fa45202e206f7.png) + + + +![](https://oss1.aistar.cool/elog-offer-now/014c40e2908cf8a21fd4b2d44a3ab495.png) + + + +### 客户端的组件又报错了CSRF··· +![](https://oss1.aistar.cool/elog-offer-now/eacc76c02bab8c968a0d4a5c744a1d9a.png) + + + +发现是环境变量错了,直接注释掉就行: + +![](https://oss1.aistar.cool/elog-offer-now/fea872cb19874f9f49372edc3a78501c.png) + +## shadcn/ui的Button没有loading,怎么办? +直接参考这个文章:[https://blog.typeart.cc/add-loading-spinner-in-shadcn-ui-button/](https://blog.typeart.cc/add-loading-spinner-in-shadcn-ui-button/) + + + +```typescript ++ import { Loader2 } from 'lucide-react'; + + +// ... 略過前面 cva 部份 + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; ++ loading?: boolean; +} + +// 將 loading 與 children 從 props 取出來 +const Button = React.forwardRef( ++ ({ className, variant, size, asChild = false, loading, children, ...props }, ref) => { + const Comp = asChild ? Slot : 'button'; + return ( + ++ {loading ? : children} + + ); + }, +); +Button.displayName = 'Button'; +``` + +## 怎么使用safe-server-action? +官方文档:[https://next-safe-action.dev/](https://next-safe-action.dev/) + + + +## Zod应该怎么使用?比如声明了一个结构体,应该怎么赋值呢? +官方文档:[https://zod.dev/?id=basic-usage](https://zod.dev/?id=basic-usage) + + + +这样: + +```typescript +import { z } from "zod"; + +const User = z.object({ + username: z.string(), +}); + +User.parse({ username: "Ludwig" }); + +// extract the inferred type +type User = z.infer; +// { username: string } +``` + +## 怎么实现选择Emoji? +![](https://oss1.aistar.cool/elog-offer-now/aa0b3d1e7f8789bfd4e1e11e5b236816.png) + + + +如上图,我需要在这个输入框,可以选择表情或者分组地址。 + + + +找到一个库,在这里:[https://ealush.com/emoji-picker-react/](https://ealush.com/emoji-picker-react/) + +很好用,可以选择屏蔽某些不需要的Emoji,比如Flag···· + + + +当选择表情之后,会有一个callBack,输出的内容是当前的表情信息: + +```typescript +{ + "activeSkinTone": "neutral", + "emoji": "😆", + "imageUrl": "https://cdn.jsdelivr.net/npm/emoji-datasource-apple/img/apple/64/1f606.png", + "isCustom": false, + "names": [ + "laughing", + "satisfied", + "smiling face with open mouth and tightly-closed eyes" + ], + "unified": "1f606", + "unifiedWithoutSkinTone": "1f606" +} +``` + +## 发现一个问题useAction的操作是异步的! +```typescript +// 调用Action进行更新 + const AddCategoryAction = useAction(AddCategory) + + +``` + +由于是hook来的,在onclick函数里是异步的,造成数据不一致,怎么办啊! + + + +两种方法: + +1、换成使用const res = await AddCategoryAction.**executeAsync**(newCategory) + + + +2、使用useEffect来监听 + + + +```typescript +useEffect(() => { + if (!AddCategoryAction.isPending) { + if (AddCategoryAction.hasErrored) { + toast( + JSON.stringify(AddCategoryAction.result.validationErrors) ?? + "分类添加失败,请重试" + ) + } else { + toast("分类添加成功") + // 你可以在这里执行其他操作,比如关闭对话框或重置表单 + } + } + }, [ + AddCategoryAction.isPending, + AddCategoryAction.hasErrored, + AddCategoryAction.result, + ]) +``` + +## Icon可以选择的网站~ + + +[https://lucide.dev/guide/packages/lucide-react](https://lucide.dev/guide/packages/lucide-react) + + + +## 如何从结构体中去除某个字段?-Omit +在 TypeScript 中没有严格意义上的“结构体”概念,但可以通过对象类型或接口来模拟。要从一个对象中去除某个字段,可以通过类型断言和对象解构的方式来实现。 + +假设你有一个类型如下: + +```typescript +interface MyType { + field1: string; + field2: number; + field3: boolean; +} +``` + +现在要去除 `field2` 字段,可以这样做: + +```typescript +const obj: MyType = { field1: 'some string', field2: 123, field3: true }; + +const { field2,...rest } = obj; + +const newObj = rest as Omit; +console.log(newObj); +``` + +这里使用了对象解构和类型断言来创建一个新的对象,不包含指定的字段。 + +或者可以使用 `Omit` 类型工具来创建一个新的类型,然后将原对象转换为新类型: + +```typescript +type NewType = Omit; + +const newObj2: NewType = obj as NewType; +console.log(newObj2); +``` + +## 遇到一个问题form的值没有更新啊!SetValue +有一个issue已经提到了:[https://github.com/react-hook-form/react-hook-form/issues/456](https://github.com/react-hook-form/react-hook-form/issues/456) + + + +其实关键在于SetValue不会导致form的组件重新更新。 + + + +如果想实现setValue之后,组件内容更新,需要useEffect进行组件re-render。 + + + +## diaglog里的form数据没有被清空。 +发现新建一个分类之后,再次点开新建,里面的内容还是上一次保存的数据,因此需要做一次清空。 + +![](https://oss1.aistar.cool/elog-offer-now/7e7a3ca698b98f5fe7d2e4c995ebee43.png) + +## TODO 图片尺寸不对··· +![](https://oss1.aistar.cool/elog-offer-now/f4de64e9a4eb419ac16e4bf5cacdc5ee.png) + +源代码如下: + +![](https://oss1.aistar.cool/elog-offer-now/a5313ba3b7c3cea1da0354b7dc945abc.png) + + + +到底什么原因呢? + + + +## 部署在vercel之后,一直报错Prisma is not defined +谷歌了半天,一直没找到问题出在哪·· + + + +发现是没有import····为什么编辑器没有提示啊? + +![](https://oss1.aistar.cool/elog-offer-now/a08087d143007e00c946bee258021f86.png) + + + +## TODO 怎么实现点击url跳转对应的页面,但是url不变? + + diff --git a/elog.cache.json b/elog.cache.json index 0020712..d32114c 100644 --- a/elog.cache.json +++ b/elog.cache.json @@ -12594,12 +12594,12 @@ { "id": 181246765, "doc_id": "kxspepu7t1b7783v", - "updated": 1727182709000, + "updated": 1728004101000, "properties": { "title": "计算机网络面试必问", "urlname": "kxspepu7t1b7783v", "date": "2024-08-07 12:53:57", - "updated": "2024-09-24 20:58:29", + "updated": "2024-10-04 09:08:21", "cover": "https://cdn.nlark.com/yuque/0/2024/png/22382235/1722953399419-c3811ae6-707c-48c1-8a48-d32f46d24b40.png?x-oss-process=image%2Fformat%2Cwebp", "description": "HTTP常用的状态码及其含义HTTP状态码是用来表示服务器响应客户端请求的状态。常用的状态码分为以下几类:状态码含义200OK:请求成功,服务器已返回所请求的数据。201Created:请求成功并且服务器创建了新的资源。204No Content:服务器成功处理了请求,但没有返回任何内容。30..." }, @@ -13478,12 +13478,12 @@ { "id": 188627200, "doc_id": "satyn7anq2cv9p7p", - "updated": 1727667371000, + "updated": 1727707193000, "properties": { - "title": "【教程】不一样的Nextjs!", + "title": "「万赞」不一样的Nextjs!", "urlname": "satyn7anq2cv9p7p", "date": "2024-09-30 11:08:19", - "updated": "2024-09-30 11:36:11", + "updated": "2024-09-30 22:39:53", "description": "---is_nav: falsenav_path: nextjskeywords: Nextjs,Nextjs教程tags: ['Nextjs']---在前端开发的广袤天地中,Next.js 犹如一颗璀璨的新星,吸引着无数开发者的目光。本专栏——“聊点不一样的 Next.js!”将带你踏上一场...", "is_nav": false, "nav_path": "nextjs", @@ -13505,6 +13505,61 @@ "realName": "satyn7anq2cv9p7p", "relativePath": "/🔥 程序员自我修养/最强前端🏷️/satyn7anq2cv9p7p.md", "docPath": "docs/doc/🔥 程序员自我修养/最强前端🏷️" + }, + { + "id": 188692563, + "doc_id": "negzqyxtxszvawof", + "updated": 1728348721000, + "properties": { + "title": "「项目」开发一个导航网站", + "urlname": "negzqyxtxszvawof", + "date": "2024-09-30 22:40:04", + "updated": "2024-10-08 08:52:01", + "cover": "https://cdn.nlark.com/yuque/0/2024/png/22382235/1727781047419-0223592a-fe80-4c9b-b389-4e833643c4f9.png", + "description": "背景在工作学习中,发现一个问题,那就是有一个导航网站非常重要!无意之中,看到一个很棒的导航网站,打算基于此开发一个,记录一下开发的过程。Demo仓库:https://github.com/wangfengyuan/frontend-nav记录tailwindcss的scrollbarhttps..." + }, + "catalog": [ + { + "title": "🔥 程序员自我修养", + "doc_id": "negzqyxtxszvawof" + }, + { + "title": "最强前端🏷️", + "doc_id": "negzqyxtxszvawof" + }, + { + "title": "「万赞」不一样的Nextjs!", + "doc_id": "negzqyxtxszvawof" + } + ], + "realName": "negzqyxtxszvawof", + "relativePath": "/🔥 程序员自我修养/最强前端🏷️/「万赞」不一样的Nextjs!/negzqyxtxszvawof.md", + "docPath": "docs/doc/🔥 程序员自我修养/最强前端🏷️/「万赞」不一样的Nextjs!" + }, + { + "id": 188843369, + "doc_id": "iuv8q8c4vg3h6tg8", + "updated": 1727881821000, + "properties": { + "title": "字节三次面试面经", + "urlname": "iuv8q8c4vg3h6tg8", + "date": "2024-10-02 23:07:25", + "updated": "2024-10-02 23:10:21", + "description": "一面MySQL相关MySQL CPU飙高如何排查?整个系统的性能瓶颈是什么?如何排查的慢SQL?MySQL的索引结构是什么?详细讲一下B +树。MySQL的数据在B +树上是如何存储的?GC垃圾回收相关讲一下GC垃圾回收。GC垃圾回收时CPU大概会提升多少?Redis相关Redis的过期删除机..." + }, + "catalog": [ + { + "title": "💹 大厂面经", + "doc_id": "iuv8q8c4vg3h6tg8" + }, + { + "title": "面试真题", + "doc_id": "iuv8q8c4vg3h6tg8" + } + ], + "realName": "iuv8q8c4vg3h6tg8", + "relativePath": "/💹 大厂面经/面试真题/iuv8q8c4vg3h6tg8.md", + "docPath": "docs/doc/💹 大厂面经/面试真题" } ], "catalog": [ @@ -13855,11 +13910,11 @@ }, { "type": "DOC", - "title": "【教程】不一样的Nextjs!", + "title": "「万赞」不一样的Nextjs!", "uuid": "2cJ18ZvNWGR6hhHx", "url": "satyn7anq2cv9p7p", "prev_uuid": "Oi5FMtop6oZm1oNe", - "sibling_uuid": "65Zy9C8l2pAx_MzP", + "sibling_uuid": "jnYOD86cVlBDX55q", "child_uuid": "-AFgYDHw_54vMFRY", "parent_uuid": "Oi5FMtop6oZm1oNe", "doc_id": 188627200, @@ -13874,7 +13929,7 @@ "uuid": "-AFgYDHw_54vMFRY", "url": "le4uyv5kbaf9gy65", "prev_uuid": "2cJ18ZvNWGR6hhHx", - "sibling_uuid": "1Lvhxo_-uRpiTKwf", + "sibling_uuid": "65Zy9C8l2pAx_MzP", "child_uuid": "", "parent_uuid": "2cJ18ZvNWGR6hhHx", "doc_id": 188631178, @@ -13883,13 +13938,28 @@ "open_window": 1, "visible": 1 }, + { + "type": "DOC", + "title": "「推荐」三个例子解释Nextjs的ISR、SSR、SSG", + "uuid": "65Zy9C8l2pAx_MzP", + "url": "hn2yy5i3avufqfhq", + "prev_uuid": "-AFgYDHw_54vMFRY", + "sibling_uuid": "1Lvhxo_-uRpiTKwf", + "child_uuid": "", + "parent_uuid": "2cJ18ZvNWGR6hhHx", + "doc_id": 188432276, + "level": 3, + "id": 188432276, + "open_window": 1, + "visible": 0 + }, { "type": "DOC", "title": "你真的知道Nextjs的api怎么用吗?", "uuid": "1Lvhxo_-uRpiTKwf", "url": "rtnwlsk5vh350o83", - "prev_uuid": "-AFgYDHw_54vMFRY", - "sibling_uuid": "", + "prev_uuid": "65Zy9C8l2pAx_MzP", + "sibling_uuid": "LIvU2PY4A3qPVXWp", "child_uuid": "", "parent_uuid": "2cJ18ZvNWGR6hhHx", "doc_id": 188627476, @@ -13900,25 +13970,25 @@ }, { "type": "DOC", - "title": "【付费】三个例子解释Nextjs的ISR、SSR、SSG", - "uuid": "65Zy9C8l2pAx_MzP", - "url": "hn2yy5i3avufqfhq", - "prev_uuid": "2cJ18ZvNWGR6hhHx", - "sibling_uuid": "jnYOD86cVlBDX55q", + "title": "「项目」开发一个导航网站", + "uuid": "LIvU2PY4A3qPVXWp", + "url": "negzqyxtxszvawof", + "prev_uuid": "1Lvhxo_-uRpiTKwf", + "sibling_uuid": "", "child_uuid": "", - "parent_uuid": "Oi5FMtop6oZm1oNe", - "doc_id": 188432276, - "level": 2, - "id": 188432276, + "parent_uuid": "2cJ18ZvNWGR6hhHx", + "doc_id": 188692563, + "level": 3, + "id": 188692563, "open_window": 1, - "visible": 0 + "visible": 1 }, { "type": "DOC", "title": "pnpm lockfile版本不一致", "uuid": "jnYOD86cVlBDX55q", "url": "ypqbhwx47hgka006", - "prev_uuid": "65Zy9C8l2pAx_MzP", + "prev_uuid": "2cJ18ZvNWGR6hhHx", "sibling_uuid": "bMLi3II7MP6uNKzl", "child_uuid": "", "parent_uuid": "Oi5FMtop6oZm1oNe", @@ -18975,7 +19045,7 @@ "url": "vxn8883st7lhfom9", "prev_uuid": "k38gbMVOoHwtcD2F", "sibling_uuid": "-4qV2TE5gTaU9pS4", - "child_uuid": "NNGpo_NW1QKe3LNz", + "child_uuid": "SJCHophUCpSrCSpm", "parent_uuid": "uHCIfCp4Xzc-fCfY", "doc_id": 171465323, "level": 1, @@ -18983,12 +19053,27 @@ "open_window": 1, "visible": 1 }, + { + "type": "DOC", + "title": "字节三次面试面经", + "uuid": "SJCHophUCpSrCSpm", + "url": "iuv8q8c4vg3h6tg8", + "prev_uuid": "NcVLTZK8sE8hkJmb", + "sibling_uuid": "NNGpo_NW1QKe3LNz", + "child_uuid": "", + "parent_uuid": "NcVLTZK8sE8hkJmb", + "doc_id": 188843369, + "level": 2, + "id": 188843369, + "open_window": 1, + "visible": 1 + }, { "type": "DOC", "title": "收钱吧面试真题", "uuid": "NNGpo_NW1QKe3LNz", "url": "ubg35bic4t7bekms", - "prev_uuid": "NcVLTZK8sE8hkJmb", + "prev_uuid": "SJCHophUCpSrCSpm", "sibling_uuid": "ZHHNRSroll5OdyS0", "child_uuid": "", "parent_uuid": "NcVLTZK8sE8hkJmb",