www.ifb.me Open in urlscan Pro
76.76.21.98  Public Scan

Submitted URL: https://ifb.me/search.json
Effective URL: https://www.ifb.me/search.json
Submission: On October 26 via api from US — Scanned from US

Form analysis 0 forms found in the DOM

Text Content

[{"title":"Flask + xlwings: Building Powerful Automation for Excel Calculation Tasks","date":"2024-10-25T21:06:03.000Z","tags":["Python"],"draft":false,"isPinned":false,"images":["/static/images/flaskxlwings-da-zao/dc5f9cd2721c93e9aa673745fffe6c3cmd5.jpeg"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.265,"time":195900,"words":653},"slug":"en/backend/flaskxlwings-da-zao","path":"blog/en/backend/flaskxlwings-da-zao","filePath":"blog/en/backend/flaskxlwings-da-zao.mdx","toc":[{"value":"Project Highlights","url":"#project-highlights","depth":3},{"value":"Environment Setup","url":"#environment-setup","depth":3},{"value":"Code Explanation: Building the Excel Processing API","url":"#code-explanation-building-the-excel-processing-api","depth":3},{"value":"Testing the API Service","url":"#testing-the-api-service","depth":3},{"value":"Example Response","url":"#example-response","depth":3},{"value":"FAQ","url":"#faq","depth":3},{"value":"Conclusion","url":"#conclusion","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Flask + xlwings: Building Powerful Automation for Excel Calculation Tasks","datePublished":"2024-10-25T21:06:03.000Z","dateModified":"2024-10-25T21:06:03.000Z","image":"/static/images/flaskxlwings-da-zao/dc5f9cd2721c93e9aa673745fffe6c3cmd5.jpeg","url":"https://www.ifb.me/blog/en/backend/flaskxlwings-da-zao"},"language":"en"},{"title":"Flask + xlwings:打造自动化处理Excel计算任务的强大能力","date":"2024-10-25T21:06:03.000Z","tags":["Python"],"draft":false,"isPinned":false,"images":["/static/images/flaskxlwings-da-zao/dc5f9cd2721c93e9aa673745fffe6c3cmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.705,"time":282300,"words":941},"slug":"zh/backend/flaskxlwings-da-zao","path":"blog/zh/backend/flaskxlwings-da-zao","filePath":"blog/zh/backend/flaskxlwings-da-zao.mdx","toc":[{"value":"项目亮点","url":"#项目亮点","depth":3},{"value":"环境搭建","url":"#环境搭建","depth":3},{"value":"代码详解:构建 Excel 处理 API","url":"#代码详解构建-excel-处理-api","depth":3},{"value":"如何测试API服务","url":"#如何测试api服务","depth":3},{"value":"返回示例","url":"#返回示例","depth":3},{"value":"常见问题解答","url":"#常见问题解答","depth":3},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Flask + xlwings:打造自动化处理Excel计算任务的强大能力","datePublished":"2024-10-25T21:06:03.000Z","dateModified":"2024-10-25T21:06:03.000Z","image":"/static/images/flaskxlwings-da-zao/dc5f9cd2721c93e9aa673745fffe6c3cmd5.jpeg","url":"https://www.ifb.me/blog/zh/backend/flaskxlwings-da-zao"},"language":"zh"},{"title":"FFlow Next: Your First Overseas Nextjs SaaS Template","date":"2024-10-22T17:43:26.000Z","tags":["Nextjs","FFlow"],"draft":false,"isPinned":true,"summary":"🚀 Building a global SaaS platform? FFlow Next offers a complete solution tailored to your needs! It integrates the powerful Next.js 14, Drizzle ORM, and Google Analytics, supports Cloudflare deployment, and has built-in multilingual capabilities to help you easily conquer global markets and reach users worldwide.","images":["/static/images/fflownext-zhu-nin-ku/bc538fdf4c9f5a3bfaf4ee95b419ab8fmd5.jpeg"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.91,"time":234600,"words":782},"slug":"en/backend/fflownext-zhu-nin-ku","path":"blog/en/backend/fflownext-zhu-nin-ku","filePath":"blog/en/backend/fflownext-zhu-nin-ku.mdx","toc":[{"value":"Why Choose FFlow Next?","url":"#why-choose-fflow-next","depth":3},{"value":"The Tech Stack Behind FFlow Next","url":"#the-tech-stack-behind-fflow-next","depth":3},{"value":"1. Next.js 14: The Foundation for High-Performance Apps","url":"#1-nextjs-14-the-foundation-for-high-performance-apps","depth":4},{"value":"2. Drizzle ORM: Simplified Database Interaction","url":"#2-drizzle-orm-simplified-database-interaction","depth":4},{"value":"3. Cloudflare Deployment Support: Global Deployment Made Easy","url":"#3-cloudflare-deployment-support-global-deployment-made-easy","depth":4},{"value":"4. Next-Intl: Multilingual Support: Reach a Global Audience with Ease","url":"#4-next-intl-multilingual-support-reach-a-global-audience-with-ease","depth":4},{"value":"Quick Start Guide: How to Deploy FFlow Next","url":"#quick-start-guide-how-to-deploy-fflow-next","depth":3},{"value":"Multilingual Functionality: Easily Support Multiple Languages 🌍","url":"#multilingual-functionality-easily-support-multiple-languages-","depth":3},{"value":"Conclusion","url":"#conclusion","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"FFlow Next: Your First Overseas Nextjs SaaS Template","datePublished":"2024-10-22T17:43:26.000Z","dateModified":"2024-10-22T17:43:26.000Z","description":"🚀 Building a global SaaS platform? FFlow Next offers a complete solution tailored to your needs! It integrates the powerful Next.js 14, Drizzle ORM, and Google Analytics, supports Cloudflare deployment, and has built-in multilingual capabilities to help you easily conquer global markets and reach users worldwide.","image":"/static/images/fflownext-zhu-nin-ku/bc538fdf4c9f5a3bfaf4ee95b419ab8fmd5.jpeg","url":"https://www.ifb.me/blog/en/backend/fflownext-zhu-nin-ku"},"language":"en"},{"title":"Unlock the Full Potential of Cursor in 10 Minutes: From Basic Operations to Advanced Techniques","date":"2024-10-21T22:34:23.000Z","tags":["Cursor"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.15,"time":249000,"words":830},"slug":"en/backend/10-fen-zhong-jie-suo","path":"blog/en/backend/10-fen-zhong-jie-suo","filePath":"blog/en/backend/10-fen-zhong-jie-suo.mdx","toc":[{"value":"Basic Setup of Cursor","url":"#basic-setup-of-cursor","depth":2},{"value":"Download and Install Cursor","url":"#download-and-install-cursor","depth":3},{"value":"Get Familiar with the Interface","url":"#get-familiar-with-the-interface","depth":3},{"value":"Key Configuration Features","url":"#key-configuration-features","depth":3},{"value":"Basic Use Cases of Cursor","url":"#basic-use-cases-of-cursor","depth":2},{"value":"Advanced Tips for Cursor","url":"#advanced-tips-for-cursor","depth":2},{"value":"Conclusion","url":"#conclusion","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Unlock the Full Potential of Cursor in 10 Minutes: From Basic Operations to Advanced Techniques","datePublished":"2024-10-21T22:34:23.000Z","dateModified":"2024-10-21T22:34:23.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/10-fen-zhong-jie-suo"},"language":"en"},{"title":"Cursor + V0 + Reweb:全栈开发者的 AI 变革之旅","date":"2024-10-09T10:36:44.000Z","tags":["Cursor"],"draft":false,"isPinned":false,"images":["/static/images/cursorv0reweb-quan-z/4b0755dd196d3582429b57dfa948fbc7md5.jpeg"],"type":"Blog","readingTime":{"text":"10 min read","minutes":9.125,"time":547500,"words":1825},"slug":"backend/cursorv0reweb-quan-z","path":"blog/backend/cursorv0reweb-quan-z","filePath":"blog/backend/cursorv0reweb-quan-z.mdx","toc":[{"value":"什么是 Cursor、V0 和 Reweb?","url":"#什么是-cursorv0-和-reweb","depth":4},{"value":"这些 AI 工具如何为普通开发者减负?","url":"#这些-ai-工具如何为普通开发者减负","depth":3},{"value":"AI 工具是否真的能替代中低级开发者?","url":"#ai-工具是否真的能替代中低级开发者","depth":3},{"value":"现代开发者为何不能忽视这些 AI 工具?","url":"#现代开发者为何不能忽视这些-ai-工具","depth":3},{"value":"为什么普通开发者需要拥抱 AI 工具?","url":"#为什么普通开发者需要拥抱-ai-工具","depth":4},{"value":"常见问题解答 (FAQs)","url":"#常见问题解答-faqs","depth":3},{"value":"结语","url":"#结语","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Cursor + V0 + Reweb:全栈开发者的 AI 变革之旅","datePublished":"2024-10-09T10:36:44.000Z","dateModified":"2024-10-09T10:36:44.000Z","image":"/static/images/cursorv0reweb-quan-z/4b0755dd196d3582429b57dfa948fbc7md5.jpeg","url":"https://www.ifb.me/blog/backend/cursorv0reweb-quan-z"},"language":"zh"},{"title":"FFlow Next:你的第一个出海 Nextjs SaaS 模板","date":"2024-09-29T17:43:26.000Z","tags":["Nextjs","FFlow"],"draft":false,"isPinned":true,"summary":"🚀 正在构建全球化的出海 SaaS 平台?FFlow Next 为你量身打造全面解决方案!集成了强大的 Next.js 14、Drizzle ORM、Google Analytics,支持 Cloudflare 部署,以及内置的多语言能力,让你轻松征服全球市场,快速出海触达全世界用户。","images":["/static/images/fflownext-zhu-nin-ku/bc538fdf4c9f5a3bfaf4ee95b419ab8fmd5.jpeg"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.395,"time":383700,"words":1279},"slug":"backend/fflownext-zhu-nin-ku","path":"blog/backend/fflownext-zhu-nin-ku","filePath":"blog/backend/fflownext-zhu-nin-ku.mdx","toc":[{"value":"为什么选择 FFlow Next?","url":"#为什么选择-fflow-next","depth":3},{"value":"FFlow Next 的技术栈大揭秘","url":"#fflow-next-的技术栈大揭秘","depth":3},{"value":"1. Next.js 14:高性能应用的基石","url":"#1-nextjs-14高性能应用的基石","depth":4},{"value":"2. Drizzle ORM:数据库交互如此简单","url":"#2-drizzle-orm数据库交互如此简单","depth":4},{"value":"3. Cloudflare 部署支持:全球部署,无压力","url":"#3-cloudflare-部署支持全球部署无压力","depth":4},{"value":"4. Next-Intl:多语言支持:轻松触达全球受众","url":"#4-next-intl多语言支持轻松触达全球受众","depth":4},{"value":"快速上手指南:如何部署 FFlow Next","url":"#快速上手指南如何部署-fflow-next","depth":3},{"value":"国际化功能:轻松支持多语言 🌍","url":"#国际化功能轻松支持多语言-","depth":3},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"FFlow Next:你的第一个出海 Nextjs SaaS 模板","datePublished":"2024-09-29T17:43:26.000Z","dateModified":"2024-09-29T17:43:26.000Z","description":"🚀 正在构建全球化的出海 SaaS 平台?FFlow Next 为你量身打造全面解决方案!集成了强大的 Next.js 14、Drizzle ORM、Google Analytics,支持 Cloudflare 部署,以及内置的多语言能力,让你轻松征服全球市场,快速出海触达全世界用户。","image":"/static/images/fflownext-zhu-nin-ku/bc538fdf4c9f5a3bfaf4ee95b419ab8fmd5.jpeg","url":"https://www.ifb.me/blog/backend/fflownext-zhu-nin-ku"},"language":"zh"},{"title":"Cursor + Nocalhost:重塑 Kubernetes Java 开发丝滑体验","date":"2024-09-27T02:00:00.000Z","tags":["Cursor","Kubernetes"],"draft":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.625,"time":397500,"words":1325},"slug":"backend/cursornocalhost-zhon","path":"blog/backend/cursornocalhost-zhon","filePath":"blog/backend/cursornocalhost-zhon.mdx","toc":[{"value":"💡 Cursor 与 Nocalhost:开发效率的革命性组合 💡","url":"#-cursor-与-nocalhost开发效率的革命性组合-","depth":2},{"value":"🚀 Cursor + Nocalhost:云原生开发的新范式 🚀","url":"#-cursor--nocalhost云原生开发的新范式-","depth":2},{"value":"🛠️ 配置步骤:开启您的云原生开发之旅 🛠️","url":"#️-配置步骤开启您的云原生开发之旅-️","depth":2},{"value":"🎉 结语:拥抱云原生开发的未来 🎉","url":"#-结语拥抱云原生开发的未来-","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Cursor + Nocalhost:重塑 Kubernetes Java 开发丝滑体验","datePublished":"2024-09-27T02:00:00.000Z","dateModified":"2024-09-27T02:00:00.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/cursornocalhost-zhon"},"language":"zh"},{"title":"开发提效必备:轻松驾驭 k8s 中 Java 应用的远程调试","date":"2024-09-26T17:42:06.000Z","tags":["Java","Kubernetes"],"draft":false,"isPinned":false,"images":["7b860e8d90ba968cc58355a53a7719aa_MD5.jpeg"],"type":"Blog","readingTime":{"text":"9 min read","minutes":8.025,"time":481500,"words":1605},"slug":"backend/kai-fa-ti-xiao-bi-be","path":"blog/backend/kai-fa-ti-xiao-bi-be","filePath":"blog/backend/kai-fa-ti-xiao-bi-be.mdx","toc":[{"value":"1. 环境准备","url":"#1-环境准备","depth":3},{"value":"2. 安装 kubectl 并连接 Kubernetes 集群","url":"#2-安装-kubectl-并连接-kubernetes-集群","depth":3},{"value":"步骤1: 安装kubectl","url":"#步骤1-安装kubectl","depth":4},{"value":"步骤2: 连接 Kubernetes 集群","url":"#步骤2-连接-kubernetes-集群","depth":4},{"value":"步骤3: 验证连接是否成功","url":"#步骤3-验证连接是否成功","depth":4},{"value":"3. 安装 VsCode Kubernetes 插件(可选)","url":"#3-安装-vscode-kubernetes-插件可选","depth":3},{"value":"4. 配置远程调试","url":"#4-配置远程调试","depth":3},{"value":"步骤1: 在Java应用中启用远程调试","url":"#步骤1-在java应用中启用远程调试","depth":4},{"value":"步骤2: 配置VsCode的调试设置","url":"#步骤2-配置vscode的调试设置","depth":4},{"value":"步骤3: 暴露调试端口","url":"#步骤3-暴露调试端口","depth":4},{"value":"5. 开始调试","url":"#5-开始调试","depth":3},{"value":"6.  总结","url":"#6--总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"开发提效必备:轻松驾驭 k8s 中 Java 应用的远程调试","datePublished":"2024-09-26T17:42:06.000Z","dateModified":"2024-09-26T17:42:06.000Z","image":"7b860e8d90ba968cc58355a53a7719aa_MD5.jpeg","url":"https://www.ifb.me/blog/backend/kai-fa-ti-xiao-bi-be"},"language":"zh"},{"title":"A Must-Have for Boosting Development Efficiency: Effortlessly Master Remote Debugging of Java Applications in Kubernetes","date":"2024-09-26T17:42:06.000Z","tags":["Java","Kubernetes"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.205,"time":312300,"words":1041},"slug":"en/backend/kai-fa-ti-xiao-bi-be","path":"blog/en/backend/kai-fa-ti-xiao-bi-be","filePath":"blog/en/backend/kai-fa-ti-xiao-bi-be.mdx","toc":[{"value":"1. Environment Setup","url":"#1-environment-setup","depth":3},{"value":"2. Installing kubectl and Connecting to Kubernetes Cluster","url":"#2-installing-kubectl-and-connecting-to-kubernetes-cluster","depth":3},{"value":"Step 1: Install kubectl","url":"#step-1-install-kubectl","depth":4},{"value":"Step 2: Connect to Kubernetes Cluster","url":"#step-2-connect-to-kubernetes-cluster","depth":4},{"value":"Step 3: Verify Connection","url":"#step-3-verify-connection","depth":4},{"value":"3. Installing the VsCode Kubernetes Plugin (Optional)","url":"#3-installing-the-vscode-kubernetes-plugin-optional","depth":3},{"value":"4. Configuring Remote Debugging","url":"#4-configuring-remote-debugging","depth":3},{"value":"Step 1: Enable Remote Debugging in the Java Application","url":"#step-1-enable-remote-debugging-in-the-java-application","depth":4},{"value":"Step 2: Configure Debug Settings in VsCode","url":"#step-2-configure-debug-settings-in-vscode","depth":4},{"value":"Step 3: Expose the Debug Port","url":"#step-3-expose-the-debug-port","depth":4},{"value":"5. Start Debugging","url":"#5-start-debugging","depth":3},{"value":"6. Summary","url":"#6-summary","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"A Must-Have for Boosting Development Efficiency: Effortlessly Master Remote Debugging of Java Applications in Kubernetes","datePublished":"2024-09-26T17:42:06.000Z","dateModified":"2024-09-26T17:42:06.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/kai-fa-ti-xiao-bi-be"},"language":"en"},{"title":"Cursor Composer:AI 编程工具的革命性功能","date":"2024-09-20T21:55:45.000Z","tags":["Java","Cursor"],"draft":false,"isPinned":false,"images":null,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.92,"time":295200,"words":984},"slug":"ai/cursorcomposerai-bia","path":"blog/ai/cursorcomposerai-bia","filePath":"blog/ai/cursorcomposerai-bia.mdx","toc":[{"value":"什么是 Cursor Composer?","url":"#什么是-cursor-composer","depth":2},{"value":"如何启用 Cursor Composer?","url":"#如何启用-cursor-composer","depth":2},{"value":"多文件编辑功能的优势","url":"#多文件编辑功能的优势","depth":2},{"value":"实际操作示例","url":"#实际操作示例","depth":2},{"value":"键盘快捷键与 UI 集成","url":"#键盘快捷键与-ui-集成","depth":2},{"value":"单个模型的局限性与选择","url":"#单个模型的局限性与选择","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Cursor Composer:AI 编程工具的革命性功能","datePublished":"2024-09-20T21:55:45.000Z","dateModified":"2024-09-20T21:55:45.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/cursorcomposerai-bia"},"language":"zh"},{"title":"两小时手撕一个 Java 版本的区块链应用程序","date":"2024-09-17T23:18:11.000Z","tags":["Java"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.945,"time":236700,"words":789},"slug":"backend/implementing-a-simple-blockchain-in-java","path":"blog/backend/implementing-a-simple-blockchain-in-java","filePath":"blog/backend/implementing-a-simple-blockchain-in-java.mdx","toc":[{"value":"区块链是什么?","url":"#区块链是什么","depth":2},{"value":"用 Java 实现区块链","url":"#用-java-实现区块链","depth":2},{"value":"1. 定义区块结构","url":"#1-定义区块结构","depth":3},{"value":"2. 计算区块哈希","url":"#2-计算区块哈希","depth":3},{"value":"3. 挖矿过程","url":"#3-挖矿过程","depth":3},{"value":"4. 创建区块链","url":"#4-创建区块链","depth":3},{"value":"运行我们的区块链","url":"#运行我们的区块链","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"两小时手撕一个 Java 版本的区块链应用程序","datePublished":"2024-09-17T23:18:11.000Z","dateModified":"2024-09-17T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/implementing-a-simple-blockchain-in-java"},"language":"zh"},{"title":"架构整洁之道核心要点","date":"2024-09-15T01:48:04.000Z","tags":["Java"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.55,"time":213000,"words":710},"slug":"backend/arch-clean","path":"blog/backend/arch-clean","filePath":"blog/backend/arch-clean.mdx","toc":[{"value":"设计原则","url":"#设计原则","depth":2},{"value":"单一职责原则 (SRP)","url":"#单一职责原则-srp","depth":3},{"value":"开闭原则 (OCP)","url":"#开闭原则-ocp","depth":3},{"value":"里氏替换原则 (LSP)","url":"#里氏替换原则-lsp","depth":3},{"value":"接口隔离原则 (ISP)","url":"#接口隔离原则-isp","depth":3},{"value":"依赖倒置原则 (DIP)","url":"#依赖倒置原则-dip","depth":3},{"value":"编程范式","url":"#编程范式","depth":2},{"value":"软件开发三步骤","url":"#软件开发三步骤","depth":2},{"value":"架构设计要点","url":"#架构设计要点","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"架构整洁之道核心要点","datePublished":"2024-09-15T01:48:04.000Z","dateModified":"2024-09-15T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/arch-clean"},"language":"zh"},{"title":"Spring Boot Admin指南","date":"2024-09-14T23:18:11.000Z","tags":["Java"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.595,"time":155700,"words":519},"slug":"backend/a-guide-to-spring-boot-admin","path":"blog/backend/a-guide-to-spring-boot-admin","filePath":"blog/backend/a-guide-to-spring-boot-admin.mdx","toc":[{"value":"2. 设置管理服务器","url":"#2-设置管理服务器","depth":2},{"value":"3. 设置客户端","url":"#3-设置客户端","depth":2},{"value":"4. 安全配置","url":"#4-安全配置","depth":2},{"value":"5. 监控和管理功能","url":"#5-监控和管理功能","depth":2},{"value":"6. 通知","url":"#6-通知","depth":2},{"value":"7. 总结","url":"#7-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring Boot Admin指南","datePublished":"2024-09-14T23:18:11.000Z","dateModified":"2024-09-14T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/a-guide-to-spring-boot-admin"},"language":"zh"},{"title":"Thymeleaf中处理日期的完整指南","date":"2024-09-14T19:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.325,"time":139500,"words":465},"slug":"backend/how-to-work-with-dates-in-thymeleaf","path":"blog/backend/how-to-work-with-dates-in-thymeleaf","filePath":"blog/backend/how-to-work-with-dates-in-thymeleaf.mdx","toc":[{"value":"2. Maven依赖","url":"#2-maven依赖","depth":2},{"value":"3. java.util和java.time","url":"#3-javautil和javatime","depth":2},{"value":"3.1 格式化日期","url":"#31-格式化日期","depth":3},{"value":"3.2 获取特定日期字段","url":"#32-获取特定日期字段","depth":3},{"value":"4. 在表单中使用日期选择器","url":"#4-在表单中使用日期选择器","depth":2},{"value":"5. 总结","url":"#5-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Thymeleaf中处理日期的完整指南","datePublished":"2024-09-14T19:18:11.000Z","dateModified":"2024-09-14T19:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/how-to-work-with-dates-in-thymeleaf"},"language":"zh"},{"title":"Spring TaskScheduler任务调度器使用指南","date":"2024-09-14T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.45,"time":147000,"words":490},"slug":"backend/a-guide-to-the-spring-task-scheduler","path":"blog/backend/a-guide-to-the-spring-task-scheduler","filePath":"blog/backend/a-guide-to-the-spring-task-scheduler.mdx","toc":[{"value":"2. ThreadPoolTaskScheduler","url":"#2-threadpooltaskscheduler","depth":2},{"value":"3. 调度任务","url":"#3-调度任务","depth":2},{"value":"3.1 固定延迟调度","url":"#31-固定延迟调度","depth":3},{"value":"3.2 固定频率调度","url":"#32-固定频率调度","depth":3},{"value":"3.3 Cron表达式调度","url":"#33-cron表达式调度","depth":3},{"value":"4. 高级配置","url":"#4-高级配置","depth":2},{"value":"5. 总结","url":"#5-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring TaskScheduler任务调度器使用指南","datePublished":"2024-09-14T03:18:11.000Z","dateModified":"2024-09-14T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/a-guide-to-the-spring-task-scheduler"},"language":"zh"},{"title":"Cursor 必知必会: 一键生成专业的 Git Commit Message","date":"2024-09-13T22:50:04.000Z","tags":["Cursor","LLM"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.085,"time":185100,"words":617},"slug":"backend/cursorgit-rang-ni-de","path":"blog/backend/cursorgit-rang-ni-de","filePath":"blog/backend/cursorgit-rang-ni-de.mdx","toc":[{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Cursor 必知必会: 一键生成专业的 Git Commit Message","datePublished":"2024-09-13T22:50:04.000Z","dateModified":"2024-09-13T22:50:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/cursorgit-rang-ni-de"},"language":"zh"},{"title":"Obsidian + Text Generator + Smart Connections: Create an Immersive AI-Powered Note-Taking Experience","date":"2024-09-13T22:50:04.000Z","tags":["ChatGPT","LLM","Obsidian"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.085,"time":185100,"words":617},"slug":"en/backend/obsidiantextgenerato","path":"blog/en/backend/obsidiantextgenerato","filePath":"blog/en/backend/obsidiantextgenerato.mdx","toc":[{"value":"Obsidian: Building Your Personal Knowledge Base","url":"#obsidian-building-your-personal-knowledge-base","depth":2},{"value":"Text Generator: Speed Up Your Writing","url":"#text-generator-speed-up-your-writing","depth":2},{"value":"Smart Connections: Establishing Knowledge Links","url":"#smart-connections-establishing-knowledge-links","depth":2},{"value":"Conclusion: AI-Driven Knowledge Management","url":"#conclusion-ai-driven-knowledge-management","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + Text Generator + Smart Connections: Create an Immersive AI-Powered Note-Taking Experience","datePublished":"2024-09-13T22:50:04.000Z","dateModified":"2024-09-13T22:50:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/obsidiantextgenerato"},"language":"en"},{"title":"10 分钟带你解锁 Cursor 的全部潜力:从基础操作到高级技巧","date":"2024-09-08T22:34:23.000Z","tags":["Cursor"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.915,"time":414900,"words":1383},"slug":"backend/10-fen-zhong-jie-suo","path":"blog/backend/10-fen-zhong-jie-suo","filePath":"blog/backend/10-fen-zhong-jie-suo.mdx","toc":[{"value":"Cursor 基础配置","url":"#cursor-基础配置","depth":2},{"value":"下载并安装 Cursor","url":"#下载并安装-cursor","depth":3},{"value":"熟悉界面","url":"#熟悉界面","depth":3},{"value":"关键配置功能","url":"#关键配置功能","depth":3},{"value":"Cursor 基础使用场景","url":"#cursor-基础使用场景","depth":2},{"value":"Cursor 的高级进阶技巧","url":"#cursor-的高级进阶技巧","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"10 分钟带你解锁 Cursor 的全部潜力:从基础操作到高级技巧","datePublished":"2024-09-08T22:34:23.000Z","dateModified":"2024-09-08T22:34:23.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/10-fen-zhong-jie-suo"},"language":"zh"},{"title":"A Dual Leap in Performance and Flexibility: The Ultimate Guide to Seamlessly Migrating Next.js Applications to Cloudflare Pages","date":"2024-09-08T18:18:14.000Z","tags":["Nextjs"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.91,"time":234600,"words":782},"slug":"en/backend/po-jie-nextjs-bao-ha","path":"blog/en/backend/po-jie-nextjs-bao-ha","filePath":"blog/en/backend/po-jie-nextjs-bao-ha.mdx","toc":[{"value":"Part 1: Preparations","url":"#part-1-preparations","depth":3},{"value":"Part 2: Drizzle ORM and Neon/PostgreSQL Connection Issues","url":"#part-2-drizzle-orm-and-neonpostgresql-connection-issues","depth":3},{"value":"Problem: Drizzle ORM client not supporting Edge Runtime","url":"#problem-drizzle-orm-client-not-supporting-edge-runtime","depth":4},{"value":"Solution: Use @neondatabase/serverless","url":"#solution-use-neondatabaseserverless","depth":4},{"value":"Part 3: Cloudflare Build Failures","url":"#part-3-cloudflare-build-failures","depth":3},{"value":"Problem: Successful local build but failed Cloudflare build","url":"#problem-successful-local-build-but-failed-cloudflare-build","depth":4},{"value":"Solution: Specify npm build version","url":"#solution-specify-npm-build-version","depth":4},{"value":"Part 4: Solving MDX File Rendering Issues","url":"#part-4-solving-mdx-file-rendering-issues","depth":3},{"value":"Part 5: Conclusion","url":"#part-5-conclusion","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"A Dual Leap in Performance and Flexibility: The Ultimate Guide to Seamlessly Migrating Next.js Applications to Cloudflare Pages","datePublished":"2024-09-08T18:18:14.000Z","dateModified":"2024-09-08T18:18:14.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/po-jie-nextjs-bao-ha"},"language":"en"},{"title":"Java内存溢出全揭秘:从堆溢出到栈溢出的实战经验分享","date":"2024-09-08T17:44:08.000Z","tags":["Java"],"draft":false,"isPinned":false,"summary":"Java中的内存溢出不仅会导致应用崩溃,还可能带来潜在的性能问题。本文将全面分析Java中的堆溢出、栈溢出、MetaSpace等不同类型内存溢出问题,并提供有效的排查工具和解决方案,帮助你提升应用稳定性。","images":["/static/images/java-nei-cun-yi-chu/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"8 min read","minutes":7.105,"time":426300,"words":1421},"slug":"backend/java-nei-cun-yi-chu","path":"blog/backend/java-nei-cun-yi-chu","filePath":"blog/backend/java-nei-cun-yi-chu.mdx","toc":[{"value":"一、Java内存溢出的主要类型","url":"#一java内存溢出的主要类型","depth":3},{"value":"1. 堆内存溢出","url":"#1-堆内存溢出","depth":4},{"value":"常见场景","url":"#常见场景","depth":5},{"value":"解决方法","url":"#解决方法","depth":5},{"value":"2. 栈内存溢出","url":"#2-栈内存溢出","depth":4},{"value":"常见场景","url":"#常见场景","depth":5},{"value":"解决方法","url":"#解决方法","depth":5},{"value":"3. MetaSpace溢出","url":"#3-metaspace溢出","depth":4},{"value":"常见场景","url":"#常见场景","depth":5},{"value":"解决方法","url":"#解决方法","depth":5},{"value":"4. 本地直接内存溢出","url":"#4-本地直接内存溢出","depth":4},{"value":"常见场景","url":"#常见场景","depth":5},{"value":"解决方法","url":"#解决方法","depth":5},{"value":"二、内存溢出的排查工具","url":"#二内存溢出的排查工具","depth":3},{"value":"三、JDK命令行工具的使用","url":"#三jdk命令行工具的使用","depth":3},{"value":"小结","url":"#小结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Java内存溢出全揭秘:从堆溢出到栈溢出的实战经验分享","datePublished":"2024-09-08T17:44:08.000Z","dateModified":"2024-09-08T17:44:08.000Z","description":"Java中的内存溢出不仅会导致应用崩溃,还可能带来潜在的性能问题。本文将全面分析Java中的堆溢出、栈溢出、MetaSpace等不同类型内存溢出问题,并提供有效的排查工具和解决方案,帮助你提升应用稳定性。","image":"/static/images/java-nei-cun-yi-chu/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/java-nei-cun-yi-chu"},"language":"zh"},{"title":"Java Memory Leaks Demystified: Tools and Techniques for Troubleshooting","date":"2024-09-08T17:44:08.000Z","tags":["Java"],"draft":false,"isPinned":false,"summary":"Memory overflows in Java not only cause application crashes but can also lead to potential performance issues. This article provides an in-depth analysis of different types of memory overflows in Java, such as heap overflow, stack overflow, and MetaSpace overflow. It also offers effective troubleshooting tools and solutions to help you improve your application's stability.","images":["/static/images/javamemoryleaksdemys/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.695,"time":281700,"words":939},"slug":"en/backend/java-nei-cun-yi-chu","path":"blog/en/backend/java-nei-cun-yi-chu","filePath":"blog/en/backend/java-nei-cun-yi-chu.mdx","toc":[{"value":"1. Main Types of Java Memory Overflows","url":"#1-main-types-of-java-memory-overflows","depth":3},{"value":"1. Heap Memory Overflow","url":"#1-heap-memory-overflow","depth":4},{"value":"Common Scenarios","url":"#common-scenarios","depth":5},{"value":"Solutions","url":"#solutions","depth":5},{"value":"2. Stack Memory Overflow","url":"#2-stack-memory-overflow","depth":4},{"value":"Common Scenarios","url":"#common-scenarios","depth":5},{"value":"Solutions","url":"#solutions","depth":5},{"value":"3. MetaSpace Overflow","url":"#3-metaspace-overflow","depth":4},{"value":"Common Scenarios","url":"#common-scenarios","depth":5},{"value":"Solutions","url":"#solutions","depth":5},{"value":"4. Native Direct Memory Overflow","url":"#4-native-direct-memory-overflow","depth":4},{"value":"Common Scenarios","url":"#common-scenarios","depth":5},{"value":"Solutions","url":"#solutions","depth":5},{"value":"2. Tools for Troubleshooting Memory Overflow","url":"#2-tools-for-troubleshooting-memory-overflow","depth":3},{"value":"3. Using JDK Command-Line Tools","url":"#3-using-jdk-command-line-tools","depth":3},{"value":"Conclusion","url":"#conclusion","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Java Memory Leaks Demystified: Tools and Techniques for Troubleshooting","datePublished":"2024-09-08T17:44:08.000Z","dateModified":"2024-09-08T17:44:08.000Z","description":"Memory overflows in Java not only cause application crashes but can also lead to potential performance issues. This article provides an in-depth analysis of different types of memory overflows in Java, such as heap overflow, stack overflow, and MetaSpace overflow. It also offers effective troubleshooting tools and solutions to help you improve your application's stability.","image":"/static/images/javamemoryleaksdemys/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/en/backend/java-nei-cun-yi-chu"},"language":"en"},{"title":"Arrays.asList 与 new ArrayList(Arrays.asList()) 的区别","date":"2024-09-06T23:18:11.000Z","tags":["Java"],"type":"Blog","readingTime":{"text":"2 min read","minutes":1.595,"time":95700,"words":319},"slug":"backend/arrays.aslist-vs-new-arraylist(arrays.aslist())","path":"blog/backend/arrays.aslist-vs-new-arraylist(arrays.aslist())","filePath":"blog/backend/arrays.aslist-vs-new-arraylist(arrays.aslist()).mdx","toc":[{"value":"Arrays.asList","url":"#arraysaslist","depth":2},{"value":"new ArrayList<>(Arrays.asList(array))","url":"#new-arraylistarraysaslistarray","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Arrays.asList 与 new ArrayList(Arrays.asList()) 的区别","datePublished":"2024-09-06T23:18:11.000Z","dateModified":"2024-09-06T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/arrays.aslist-vs-new-arraylist(arrays.aslist())"},"language":"zh"},{"title":"Streamlit + FastAPI: A New Approach for Rapidly Building and Deploying AI Web Applications","date":"2024-09-01T03:18:11.000Z","tags":[],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.49,"time":269400,"words":898},"slug":"en/ai/streamlitfastapi-kua","path":"blog/en/ai/streamlitfastapi-kua","filePath":"blog/en/ai/streamlitfastapi-kua.mdx","toc":[{"value":"1. Overview","url":"#1-overview","depth":2},{"value":"Streamlit","url":"#streamlit","depth":3},{"value":"FastAPI","url":"#fastapi","depth":3},{"value":"2. Streamlit + FastAPI","url":"#2-streamlit--fastapi","depth":2},{"value":"Streamlit as the Frontend","url":"#streamlit-as-the-frontend","depth":3},{"value":"FastAPI as the Backend","url":"#fastapi-as-the-backend","depth":3},{"value":"Overall Interaction Workflow","url":"#overall-interaction-workflow","depth":3},{"value":"3. Why Use Streamlit + FastAPI Architecture","url":"#3-why-use-streamlit--fastapi-architecture","depth":2},{"value":"1. Rapid MVP Development","url":"#1-rapid-mvp-development","depth":3},{"value":"2. Scalability","url":"#2-scalability","depth":3},{"value":"3. Ease of Use","url":"#3-ease-of-use","depth":3},{"value":"4. Strong Community and Ecosystem","url":"#4-strong-community-and-ecosystem","depth":3},{"value":"4. Practical Example: Stock Price Visualization Application","url":"#4-practical-example-stock-price-visualization-application","depth":2},{"value":"5. Conclusion","url":"#5-conclusion","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Streamlit + FastAPI: A New Approach for Rapidly Building and Deploying AI Web Applications","datePublished":"2024-09-01T03:18:11.000Z","dateModified":"2024-09-01T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/ai/streamlitfastapi-kua"},"language":"en"},{"title":"终极争论落幕:Cursor 领航 AI 编辑器新时代","date":"2024-08-27T21:15:24.000Z","tags":["Java","Cursor"],"draft":false,"isPinned":false,"images":["/static/images/zhong-ji-zheng-lun-l/11471ed1bf7bcf35ec5ff9c9f67ae4ffmd5.jpeg"],"type":"Blog","readingTime":{"text":"6 min read","minutes":5.925,"time":355500,"words":1185},"slug":"ai/zhong-ji-zheng-lun-l","path":"blog/ai/zhong-ji-zheng-lun-l","filePath":"blog/ai/zhong-ji-zheng-lun-l.mdx","toc":[{"value":"不走寻常路:Cursor 选择二开 VS Code","url":"#不走寻常路cursor-选择二开-vs-code","depth":2},{"value":"大一统:打破编辑器割裂的困局","url":"#大一统打破编辑器割裂的困局","depth":2},{"value":"最后的思考","url":"#最后的思考","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"终极争论落幕:Cursor 领航 AI 编辑器新时代","datePublished":"2024-08-27T21:15:24.000Z","dateModified":"2024-08-27T21:15:24.000Z","image":"/static/images/zhong-ji-zheng-lun-l/11471ed1bf7bcf35ec5ff9c9f67ae4ffmd5.jpeg","url":"https://www.ifb.me/blog/ai/zhong-ji-zheng-lun-l"},"language":"zh"},{"title":"Vercel AI SDK + LangChain + Upstash Vector:30 分钟打造你自己的 RAG 聊天机器人","date":"2024-08-26T21:15:55.000Z","tags":["Vercel"],"draft":false,"isPinned":false,"images":["/static/images/vercelaisdklangchain/9e9512687e4a360c741e5ee44f9c865dmd5.jpeg"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.935,"time":416100,"words":1387},"slug":"ai/vercelaisdklangchain","path":"blog/ai/vercelaisdklangchain","filePath":"blog/ai/vercelaisdklangchain.mdx","toc":[{"value":"整体架构","url":"#整体架构","depth":2},{"value":"系统概述","url":"#系统概述","depth":2},{"value":"数据爬虫","url":"#数据爬虫","depth":3},{"value":"用户认证","url":"#用户认证","depth":3},{"value":"速率限制","url":"#速率限制","depth":3},{"value":"向量检索","url":"#向量检索","depth":3},{"value":"AI Agent 执行","url":"#ai-agent-执行","depth":3},{"value":"流式响应","url":"#流式响应","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Vercel AI SDK + LangChain + Upstash Vector:30 分钟打造你自己的 RAG 聊天机器人","datePublished":"2024-08-26T21:15:55.000Z","dateModified":"2024-08-26T21:15:55.000Z","image":"/static/images/vercelaisdklangchain/9e9512687e4a360c741e5ee44f9c865dmd5.jpeg","url":"https://www.ifb.me/blog/ai/vercelaisdklangchain"},"language":"zh"},{"title":"轻松实现全球部署:Vercel 平台的核心功能及其竞对分析","date":"2024-08-26T21:00:14.000Z","tags":["Vercel"],"draft":false,"isPinned":false,"images":["/static/images/qing-song-shi-xian-q/8293c5ef1659a753e2b550762e24b9cbmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.775,"time":286500,"words":955},"slug":"backend/qing-song-shi-xian-q","path":"blog/backend/qing-song-shi-xian-q","filePath":"blog/backend/qing-song-shi-xian-q.mdx","toc":[{"value":"Vercel 简介","url":"#vercel-简介","depth":2},{"value":"Vercel 的核心功能","url":"#vercel-的核心功能","depth":2},{"value":"Vercel 的优势","url":"#vercel-的优势","depth":2},{"value":"Vercel 的劣势","url":"#vercel-的劣势","depth":2},{"value":"竞品分析","url":"#竞品分析","depth":2},{"value":"1. Netlify","url":"#1-netlify","depth":3},{"value":"2. Firebase","url":"#2-firebase","depth":3},{"value":"3. Amazon Web Services (AWS) Amplify","url":"#3-amazon-web-services-aws-amplify","depth":3},{"value":"4. Cloudflare Pages","url":"#4-cloudflare-pages","depth":3},{"value":"5. Coolify","url":"#5-coolify","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"轻松实现全球部署:Vercel 平台的核心功能及其竞对分析","datePublished":"2024-08-26T21:00:14.000Z","dateModified":"2024-08-26T21:00:14.000Z","image":"/static/images/qing-song-shi-xian-q/8293c5ef1659a753e2b550762e24b9cbmd5.jpeg","url":"https://www.ifb.me/blog/backend/qing-song-shi-xian-q"},"language":"zh"},{"title":"破解 Next.js 包含 mdx 在 Cloudflare Pages 上的部署难题:解决 EvalError 错误的终极指南","date":"2024-08-26T20:44:01.000Z","tags":["Nextjs"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.38,"time":202800,"words":676},"slug":"backend/po-jie-nextjs-bao-ha","path":"blog/backend/po-jie-nextjs-bao-ha","filePath":"blog/backend/po-jie-nextjs-bao-ha.mdx","toc":[{"value":"引言","url":"#引言","depth":2},{"value":"Edge Runtime 的特点与限制","url":"#edge-runtime-的特点与限制","depth":2},{"value":"了解 \"EvalError: Code generation from strings disallowed for this context\"","url":"#了解-evalerror-code-generation-from-strings-disallowed-for-this-context","depth":2},{"value":"如何解决该问题","url":"#如何解决该问题","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"破解 Next.js 包含 mdx 在 Cloudflare Pages 上的部署难题:解决 EvalError 错误的终极指南","datePublished":"2024-08-26T20:44:01.000Z","dateModified":"2024-08-26T20:44:01.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/po-jie-nextjs-bao-ha"},"language":"zh"},{"title":"传统数据库 vs. Neon Postgres:革命性的数据分支功能解析","date":"2024-08-16T19:35:18.000Z","tags":["Database"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.745,"time":404700,"words":1349},"slug":"backend/chuan-tong-shu-ju-ku","path":"blog/backend/chuan-tong-shu-ju-ku","filePath":"blog/backend/chuan-tong-shu-ju-ku.mdx","toc":[{"value":"Neon Postgres 与传统数据库的核心区别","url":"#neon-postgres-与传统数据库的核心区别","depth":4},{"value":"数据分支特性(Branchable):现代数据库管理的革新","url":"#数据分支特性branchable现代数据库管理的革新","depth":4},{"value":"什么是数据分支?","url":"#什么是数据分支","depth":5},{"value":"数据分支的应用场景","url":"#数据分支的应用场景","depth":5},{"value":"Neon Postgres 与传统数据库:未来展望","url":"#neon-postgres-与传统数据库未来展望","depth":4},{"value":"FAQs","url":"#faqs","depth":3},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"传统数据库 vs. Neon Postgres:革命性的数据分支功能解析","datePublished":"2024-08-16T19:35:18.000Z","dateModified":"2024-08-16T19:35:18.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/chuan-tong-shu-ju-ku"},"language":"zh"},{"title":"Vercel + PostHog:快速开发 Web 应用和提升用户体验的最佳组合","date":"2024-08-14T17:24:56.000Z","tags":["Vercel"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"10 min read","minutes":9.375,"time":562500,"words":1875},"slug":"backend/vercelposthog-kuai-s","path":"blog/backend/vercelposthog-kuai-s","filePath":"blog/backend/vercelposthog-kuai-s.mdx","toc":[{"value":"主要特性","url":"#主要特性","depth":2},{"value":"1. 快速部署与实时分析:从开发到上线的无缝体验","url":"#1-快速部署与实时分析从开发到上线的无缝体验","depth":4},{"value":"2. 全栈性能优化:速度与数据结合的双重提升","url":"#2-全栈性能优化速度与数据结合的双重提升","depth":4},{"value":"3. 数据驱动的产品决策:让每个决策都有理有据","url":"#3-数据驱动的产品决策让每个决策都有理有据","depth":4},{"value":"4. 无缝集成,减少复杂性:轻松接入,专注创新","url":"#4-无缝集成减少复杂性轻松接入专注创新","depth":4},{"value":"5. 增强的用户体验:用数据驱动每一个细节的优化","url":"#5-增强的用户体验用数据驱动每一个细节的优化","depth":4},{"value":"实践建议","url":"#实践建议","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Vercel + PostHog:快速开发 Web 应用和提升用户体验的最佳组合","datePublished":"2024-08-14T17:24:56.000Z","dateModified":"2024-08-14T17:24:56.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/vercelposthog-kuai-s"},"language":"zh"},{"title":"配置GitLab Webhook发送企业微信消息的实践案例分享","date":"2024-08-11T21:04:49.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"2 min read","minutes":1.73,"time":103800,"words":346},"slug":"backend/pei-zhi-gitlabwebhoo","path":"blog/backend/pei-zhi-gitlabwebhoo","filePath":"blog/backend/pei-zhi-gitlabwebhoo.mdx","toc":[{"value":"1. 安装依赖","url":"#1-安装依赖","depth":3},{"value":"2. 下载代码","url":"#2-下载代码","depth":3},{"value":"3. 构建项目","url":"#3-构建项目","depth":3},{"value":"4. 通过 pm2 启动应用","url":"#4-通过-pm2-启动应用","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"配置GitLab Webhook发送企业微信消息的实践案例分享","datePublished":"2024-08-11T21:04:49.000Z","dateModified":"2024-08-11T21:04:49.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/pei-zhi-gitlabwebhoo"},"language":"zh"},{"title":"深入剖析最新爆火毒舌 AI 的代码:揭开背后的技术栈秘密","date":"2024-08-11T17:49:19.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["/static/images/shen-ru-pou-xi-zui-x/416e2b70c6f733fe9df8fa67404eb75bmd5.jpeg"],"type":"Blog","readingTime":{"text":"18 min read","minutes":17.92,"time":1075200,"words":3584},"slug":"ai/shen-ru-pou-xi-zui-x","path":"blog/ai/shen-ru-pou-xi-zui-x","filePath":"blog/ai/shen-ru-pou-xi-zui-x.mdx","toc":[{"value":"Wordware AI Agent:强大的个性化分析引擎","url":"#wordware-ai-agent强大的个性化分析引擎","depth":4},{"value":"开发语言和部署平台: Nextjs + Vercel","url":"#开发语言和部署平台-nextjs--vercel","depth":4},{"value":"数据库:Neon","url":"#数据库neon","depth":4},{"value":"API集成:快速采集 Twitter 的数据","url":"#api集成快速采集-twitter-的数据","depth":4},{"value":"Stripe:无缝的支付集成","url":"#stripe无缝的支付集成","depth":4},{"value":"PostHog:实时用户行为分析","url":"#posthog实时用户行为分析","depth":4},{"value":"总结:技术驱动的创新","url":"#总结技术驱动的创新","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入剖析最新爆火毒舌 AI 的代码:揭开背后的技术栈秘密","datePublished":"2024-08-11T17:49:19.000Z","dateModified":"2024-08-11T17:49:19.000Z","image":"/static/images/shen-ru-pou-xi-zui-x/416e2b70c6f733fe9df8fa67404eb75bmd5.jpeg","url":"https://www.ifb.me/blog/ai/shen-ru-pou-xi-zui-x"},"language":"zh"},{"title":"Vercel + Supabase: The Ultimate Toolset for Rapid Prototyping","date":"2024-08-10T14:14:18.000Z","tags":["Vercel"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.275,"time":256500,"words":855},"slug":"en/backend/vercelsupabasetheult","path":"blog/en/backend/vercelsupabasetheult","filePath":"blog/en/backend/vercelsupabasetheult.mdx","toc":[{"value":"Vercel","url":"#vercel","depth":3},{"value":"Supabase","url":"#supabase","depth":3},{"value":"Quickly Adding a Like Button Feature to a Blog Deployed on Vercel Using Supabase","url":"#quickly-adding-a-like-button-feature-to-a-blog-deployed-on-vercel-using-supabase","depth":3},{"value":"1. Create a Project in Supabase","url":"#1-create-a-project-in-supabase","depth":4},{"value":"2. Configure Supabase Integration in Vercel","url":"#2-configure-supabase-integration-in-vercel","depth":4},{"value":"3. Use the Supabase API","url":"#3-use-the-supabase-api","depth":4},{"value":"4. Deploy to Vercel","url":"#4-deploy-to-vercel","depth":4},{"value":"Summary","url":"#summary","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Vercel + Supabase: The Ultimate Toolset for Rapid Prototyping","datePublished":"2024-08-10T14:14:18.000Z","dateModified":"2024-08-10T14:14:18.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/vercelsupabasetheult"},"language":"en"},{"title":"Vercel + Supabase:快速构建原型的终极工具组合","date":"2024-08-10T13:24:07.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["/static/images/vercelsupabase-kuai/aba6e175127e3a5f713e79f431d8d6a3md5.jpeg"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.125,"time":367500,"words":1225},"slug":"ai/vercelsupabase-kuai","path":"blog/ai/vercelsupabase-kuai","filePath":"blog/ai/vercelsupabase-kuai.mdx","toc":[{"value":"Vercel","url":"#vercel","depth":3},{"value":"Supabase","url":"#supabase","depth":3},{"value":"使用 Supabase 给 Vercel 上部署的博客快速添加点赞功能","url":"#使用-supabase-给-vercel-上部署的博客快速添加点赞功能","depth":3},{"value":"1. 在 Supabase 中创建一个项目","url":"#1-在-supabase-中创建一个项目","depth":4},{"value":"2. 在 Vercel 中配置集成 Supabase","url":"#2-在-vercel-中配置集成-supabase","depth":4},{"value":"3. 使用 Supabase API","url":"#3-使用-supabase-api","depth":4},{"value":"4. 部署到 Vercel","url":"#4-部署到-vercel","depth":4},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Vercel + Supabase:快速构建原型的终极工具组合","datePublished":"2024-08-10T13:24:07.000Z","dateModified":"2024-08-10T13:24:07.000Z","image":"/static/images/vercelsupabase-kuai/aba6e175127e3a5f713e79f431d8d6a3md5.jpeg","url":"https://www.ifb.me/blog/ai/vercelsupabase-kuai"},"language":"zh"},{"title":"Vercel + Morphic + Tavily:30 分钟打造你的专属 AI 问答系统","date":"2024-08-04T12:36:28.000Z","tags":["Vercel","LLM"],"draft":false,"isPinned":false,"images":["/static/images/vercelmorphictavily3/99092d013338939446fb120138ed136fmd5.jpeg"],"type":"Blog","readingTime":{"text":"8 min read","minutes":7.465,"time":447900,"words":1493},"slug":"ai/vercelmorphictavily3","path":"blog/ai/vercelmorphictavily3","filePath":"blog/ai/vercelmorphictavily3.mdx","toc":[{"value":"组件介绍","url":"#组件介绍","depth":2},{"value":"什么是 Vercel?","url":"#什么是-vercel","depth":3},{"value":"什么是 Morphic?","url":"#什么是-morphic","depth":3},{"value":"什么是 Tavily?","url":"#什么是-tavily","depth":3},{"value":"前期准备 - 申请各平台的 API Key","url":"#前期准备---申请各平台的-api-key","depth":2},{"value":"申请 OpenAI API Key","url":"#申请-openai-api-key","depth":3},{"value":"申请 Tavily AI API Key","url":"#申请-tavily-ai-api-key","depth":3},{"value":"申请 Redis - Upstash API Key","url":"#申请-redis---upstash-api-key","depth":3},{"value":"通过 Vercel 部署 Morphic","url":"#通过-vercel-部署-morphic","depth":2},{"value":"测试系统","url":"#测试系统","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Vercel + Morphic + Tavily:30 分钟打造你的专属 AI 问答系统","datePublished":"2024-08-04T12:36:28.000Z","dateModified":"2024-08-04T12:36:28.000Z","image":"/static/images/vercelmorphictavily3/99092d013338939446fb120138ed136fmd5.jpeg","url":"https://www.ifb.me/blog/ai/vercelmorphictavily3"},"language":"zh"},{"title":"面向开发者的 Model Marketplace 重新洗牌:GitHub Models 申请加入战斗","date":"2024-08-04T09:54:26.000Z","tags":["LLM","ChatGPT"],"draft":false,"isPinned":false,"images":["/static/images/mian-xiang-kai-fa-zh/2c408f30e769b893dfcb4bc329a6bea1md5.jpeg"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.98,"time":58800,"words":196},"slug":"ai/mian-xiang-kai-fa-zh","path":"blog/ai/mian-xiang-kai-fa-zh","filePath":"blog/ai/mian-xiang-kai-fa-zh.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"面向开发者的 Model Marketplace 重新洗牌:GitHub Models 申请加入战斗","datePublished":"2024-08-04T09:54:26.000Z","dateModified":"2024-08-04T09:54:26.000Z","image":"/static/images/mian-xiang-kai-fa-zh/2c408f30e769b893dfcb4bc329a6bea1md5.jpeg","url":"https://www.ifb.me/blog/ai/mian-xiang-kai-fa-zh"},"language":"zh"},{"title":"稳定性保障的方法论:打造坚如磐石的系统","date":"2024-07-29T01:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.42,"time":205200,"words":684},"slug":"backend/sre","path":"blog/backend/sre","filePath":"blog/backend/sre.mdx","toc":[{"value":"稳定性保障的方法论:打造坚如磐石的系统","url":"#稳定性保障的方法论打造坚如磐石的系统","depth":1},{"value":"稳定性金字塔:构建坚实基础","url":"#稳定性金字塔构建坚实基础","depth":2},{"value":"全链路作战:360度无死角防护","url":"#全链路作战360度无死角防护","depth":2},{"value":"监控分层:精准定位问题根源","url":"#监控分层精准定位问题根源","depth":2},{"value":"问题处理流程:化繁为简","url":"#问题处理流程化繁为简","depth":2},{"value":"止血策略:快速应对危机","url":"#止血策略快速应对危机","depth":2},{"value":"拥抱风险:平衡创新与稳定","url":"#拥抱风险平衡创新与稳定","depth":2},{"value":"结语:持续优化,永不止步","url":"#结语持续优化永不止步","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"稳定性保障的方法论:打造坚如磐石的系统","datePublished":"2024-07-29T01:48:04.000Z","dateModified":"2024-07-29T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/sre"},"language":"zh"},{"title":"Dify + OpenRouter + k8s: Quickly Building a Pre-Production Environment LLM Application Development Platform","date":"2024-07-28T11:40:41.000Z","tags":["LLM","Kubernetes"],"draft":false,"isPinned":true,"summary":"This article will introduce how to quickly build a quasi-production environment LLM application development platform using Dify, OpenRouter, and Kubernetes (k8s), allowing you to use Dify to quickly build custom large model agents.","images":["/static/images/difyopenrouterk8squi/0b69ac28a4a3dbc95309fc8005df31b2md5.jpg"],"type":"Blog","readingTime":{"text":"6 min read","minutes":5.07,"time":304200,"words":1014},"slug":"en/ai/difyopenrouterk8s-ku","path":"blog/en/ai/difyopenrouterk8s-ku","filePath":"blog/en/ai/difyopenrouterk8s-ku.mdx","toc":[{"value":"What is Dify?","url":"#what-is-dify","depth":2},{"value":"Dify Technical Architecture","url":"#dify-technical-architecture","depth":3},{"value":"What is OpenRouter?","url":"#what-is-openrouter","depth":2},{"value":"Quickly Building a Quasi-Production Environment LLM Application Development Platform","url":"#quickly-building-a-quasi-production-environment-llm-application-development-platform","depth":2},{"value":"Environment Preparation","url":"#environment-preparation","depth":3},{"value":"Step 1: Deploy Dify","url":"#step-1-deploy-dify","depth":3},{"value":"Step 2: Configure OpenRouter","url":"#step-2-configure-openrouter","depth":2},{"value":"Practical Example","url":"#practical-example","depth":2},{"value":"FAQs","url":"#faqs","depth":2},{"value":"Summary","url":"#summary","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Dify + OpenRouter + k8s: Quickly Building a Pre-Production Environment LLM Application Development Platform","datePublished":"2024-07-28T11:40:41.000Z","dateModified":"2024-07-28T11:40:41.000Z","description":"This article will introduce how to quickly build a quasi-production environment LLM application development platform using Dify, OpenRouter, and Kubernetes (k8s), allowing you to use Dify to quickly build custom large model agents.","image":"/static/images/difyopenrouterk8squi/0b69ac28a4a3dbc95309fc8005df31b2md5.jpg","url":"https://www.ifb.me/blog/en/ai/difyopenrouterk8s-ku"},"language":"en"},{"title":"Obsidian + Smart Connection + Ollama:Make Local LLM Your Intelligent Note-Taking Assistant","date":"2024-07-28T09:55:37.000Z","tags":["Ollama"],"draft":false,"isPinned":false,"images":["![](/static/images/obsidiansmartconnect/3f7f4732d22d931cb85ec4fb2c5aa955md5.jpg)"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.045,"time":122700,"words":409},"slug":"en/ai/obsidiansmartconnect","path":"blog/en/ai/obsidiansmartconnect","filePath":"blog/en/ai/obsidiansmartconnect.mdx","toc":[{"value":"Download and Run Ollama Locally","url":"#download-and-run-ollama-locally","depth":2},{"value":"Install Ollama","url":"#install-ollama","depth":3},{"value":"Start the Model","url":"#start-the-model","depth":3},{"value":"Configure the Installed Model in the Smart Connection Plugin","url":"#configure-the-installed-model-in-the-smart-connection-plugin","depth":2},{"value":"Summary","url":"#summary","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + Smart Connection + Ollama:Make Local LLM Your Intelligent Note-Taking Assistant","datePublished":"2024-07-28T09:55:37.000Z","dateModified":"2024-07-28T09:55:37.000Z","image":"![](/static/images/obsidiansmartconnect/3f7f4732d22d931cb85ec4fb2c5aa955md5.jpg)","url":"https://www.ifb.me/blog/en/ai/obsidiansmartconnect"},"language":"en"},{"title":"Openplexity Pages:助你一键生成产品介绍页的开源工具","date":"2024-07-27T22:21:12.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["![](/static/images/openplexitypages-zhu/5d10e86694e6b72e37c720cf5a7cf81dmd5.jpeg)"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.9,"time":54000,"words":180},"slug":"ai/openplexitypages-zhu","path":"blog/ai/openplexitypages-zhu","filePath":"blog/ai/openplexitypages-zhu.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Openplexity Pages:助你一键生成产品介绍页的开源工具","datePublished":"2024-07-27T22:21:12.000Z","dateModified":"2024-07-27T22:21:12.000Z","image":"![](/static/images/openplexitypages-zhu/5d10e86694e6b72e37c720cf5a7cf81dmd5.jpeg)","url":"https://www.ifb.me/blog/ai/openplexitypages-zhu"},"language":"zh"},{"title":"HuggingFace + Ollama + Llama 3.1:轻松搞定Llama 3.1中文微调版本安装","date":"2024-07-27T19:27:26.000Z","tags":["LLM","Ollama"],"draft":false,"isPinned":false,"images":["![](/static/images/macm1ollamallama3130/f14b0356e4ccb742d88a4e077c327d3fmd5.jpeg)"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.35,"time":381000,"words":1270},"slug":"ai/macm1ollamallama3130","path":"blog/ai/macm1ollamallama3130","filePath":"blog/ai/macm1ollamallama3130.mdx","toc":[{"value":"安装Ollama","url":"#安装ollama","depth":2},{"value":"macOS","url":"#macos","depth":3},{"value":"Windows","url":"#windows","depth":3},{"value":"Linux","url":"#linux","depth":3},{"value":"安装 Llama3.1-8B-Chinese-Chat 模型","url":"#安装-llama31-8b-chinese-chat-模型","depth":2},{"value":"导入模型","url":"#导入模型","depth":3},{"value":"运行模型","url":"#运行模型","depth":3},{"value":"模型测试与应用","url":"#模型测试与应用","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"HuggingFace + Ollama + Llama 3.1:轻松搞定Llama 3.1中文微调版本安装","datePublished":"2024-07-27T19:27:26.000Z","dateModified":"2024-07-27T19:27:26.000Z","image":"![](/static/images/macm1ollamallama3130/f14b0356e4ccb742d88a4e077c327d3fmd5.jpeg)","url":"https://www.ifb.me/blog/ai/macm1ollamallama3130"},"language":"zh"},{"title":"Cloudflare llama 3.1 免费大尝鲜:中文效果令你意想不到","date":"2024-07-27T11:20:32.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["/static/images/cloudflarellama31-mi/cd5df1648cb031867508e349c732acc4md5.jpeg"],"type":"Blog","readingTime":{"text":"6 min read","minutes":5.805,"time":348300,"words":1161},"slug":"ai/cloudflarellama31-mi","path":"blog/ai/cloudflarellama31-mi","filePath":"blog/ai/cloudflarellama31-mi.mdx","toc":[{"value":"接口试用","url":"#接口试用","depth":2},{"value":"中文大尝鲜","url":"#中文大尝鲜","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Cloudflare llama 3.1 免费大尝鲜:中文效果令你意想不到","datePublished":"2024-07-27T11:20:32.000Z","dateModified":"2024-07-27T11:20:32.000Z","image":"/static/images/cloudflarellama31-mi/cd5df1648cb031867508e349c732acc4md5.jpeg","url":"https://www.ifb.me/blog/ai/cloudflarellama31-mi"},"language":"zh"},{"title":"Llama 3.1:Meta 推出的最新版开源模型媲美 GPT-4o","date":"2024-07-24T17:00:26.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["![](/static/images/llama31meta-tui-chu/cd5df1648cb031867508e349c732acc4md5.jpeg)"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.205,"time":12300,"words":41},"slug":"short/llama31meta-tui-chu","path":"blog/short/llama31meta-tui-chu","filePath":"blog/short/llama31meta-tui-chu.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Llama 3.1:Meta 推出的最新版开源模型媲美 GPT-4o","datePublished":"2024-07-24T17:00:26.000Z","dateModified":"2024-07-24T17:00:26.000Z","image":"![](/static/images/llama31meta-tui-chu/cd5df1648cb031867508e349c732acc4md5.jpeg)","url":"https://www.ifb.me/blog/short/llama31meta-tui-chu"},"language":"zh"},{"title":"和相册对话:Album AI","date":"2024-07-24T16:53:52.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["/static/images/he-xiang-ce-dui-hua/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"1 min read","minutes":0.425,"time":25500,"words":85},"slug":"short/he-xiang-ce-dui-hua","path":"blog/short/he-xiang-ce-dui-hua","filePath":"blog/short/he-xiang-ce-dui-hua.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"和相册对话:Album AI","datePublished":"2024-07-24T16:53:52.000Z","dateModified":"2024-07-24T16:53:52.000Z","image":"/static/images/he-xiang-ce-dui-hua/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/short/he-xiang-ce-dui-hua"},"language":"zh"},{"title":"大模型开发者必备:探索市场上常见的 LLM 部署平台","date":"2024-07-22T20:36:04.000Z","tags":["LLM","Vercel"],"draft":false,"isPinned":false,"images":["/static/images/da-mo-xing-kai-fa-zh/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"6 min read","minutes":5.86,"time":351600,"words":1172},"slug":"ai/da-mo-xing-kai-fa-zh","path":"blog/ai/da-mo-xing-kai-fa-zh","filePath":"blog/ai/da-mo-xing-kai-fa-zh.mdx","toc":[{"value":"FireWorks AI","url":"#fireworks-ai","depth":2},{"value":"Together.AI","url":"#togetherai","depth":2},{"value":"Groq LM Playground","url":"#groq-lm-playground","depth":2},{"value":"Vercel AI","url":"#vercel-ai","depth":2},{"value":"Nvidia","url":"#nvidia","depth":2},{"value":"Perplexity Lab","url":"#perplexity-lab","depth":2},{"value":"HuggingChat","url":"#huggingchat","depth":2},{"value":"Quora Poe","url":"#quora-poe","depth":2},{"value":"比较结果","url":"#比较结果","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"大模型开发者必备:探索市场上常见的 LLM 部署平台","datePublished":"2024-07-22T20:36:04.000Z","dateModified":"2024-07-22T20:36:04.000Z","image":"/static/images/da-mo-xing-kai-fa-zh/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/ai/da-mo-xing-kai-fa-zh"},"language":"zh"},{"title":"探索 Disruptor:构建高吞吐量系统的核心代码解析","date":"2024-07-21T20:18:42.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.125,"time":247500,"words":825},"slug":"backend/tan-suo-disruptor-go","path":"blog/backend/tan-suo-disruptor-go","filePath":"blog/backend/tan-suo-disruptor-go.mdx","toc":[{"value":"1. Disruptor 的基本结构","url":"#1-disruptor-的基本结构","depth":2},{"value":"2. RingBuffer","url":"#2-ringbuffer","depth":2},{"value":"2.1 RingBuffer 的关键点","url":"#21-ringbuffer-的关键点","depth":3},{"value":"3. Sequencer","url":"#3-sequencer","depth":2},{"value":"3.1 Sequencer 的关键点","url":"#31-sequencer-的关键点","depth":3},{"value":"4. Producer 和 Consumer","url":"#4-producer-和-consumer","depth":2},{"value":"5. 总结","url":"#5-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"探索 Disruptor:构建高吞吐量系统的核心代码解析","datePublished":"2024-07-21T20:18:42.000Z","dateModified":"2024-07-21T20:18:42.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/tan-suo-disruptor-go"},"language":"zh"},{"title":"Dify + OpenRouter + k8s:快速搭建准生产环境的LLM应用开发平台","date":"2024-07-21T11:40:41.000Z","tags":["LLM","Kubernetes"],"draft":false,"isPinned":true,"summary":"自 2022 年底 OpenAI 发布 GPT 3.5 以来,市面上大模型的价格越来越低,最近发布的 gpt-4o-mini 生成一本 2500 页的书籍只需要 `60` 美分。本文将介绍如何利用Dify、OpenRouter和 k8s 快速搭建一个准生产环境的LLM应用开发平台。","images":["/static/images/paste/87ff83c7e1826d52ff5fcc672ed688972347a7cec8e0e35acfb641ca8c4a5942.png"],"type":"Blog","readingTime":{"text":"9 min read","minutes":8.265,"time":495900,"words":1653},"slug":"ai/difyopenrouterk8s-ku","path":"blog/ai/difyopenrouterk8s-ku","filePath":"blog/ai/difyopenrouterk8s-ku.mdx","toc":[{"value":"什么是 Dify?","url":"#什么是-dify","depth":2},{"value":"Dify 技术架构","url":"#dify-技术架构","depth":3},{"value":"什么是 OpenRouter?","url":"#什么是-openrouter","depth":2},{"value":"快速搭建准生产环境的LLM应用开发平台","url":"#快速搭建准生产环境的llm应用开发平台","depth":2},{"value":"环境准备","url":"#环境准备","depth":3},{"value":"步骤一:部署Dify","url":"#步骤一部署dify","depth":3},{"value":"步骤二:配置OpenRouter","url":"#步骤二配置openrouter","depth":3},{"value":"实践案例","url":"#实践案例","depth":3},{"value":"FAQs","url":"#faqs","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Dify + OpenRouter + k8s:快速搭建准生产环境的LLM应用开发平台","datePublished":"2024-07-21T11:40:41.000Z","dateModified":"2024-07-21T11:40:41.000Z","description":"自 2022 年底 OpenAI 发布 GPT 3.5 以来,市面上大模型的价格越来越低,最近发布的 gpt-4o-mini 生成一本 2500 页的书籍只需要 `60` 美分。本文将介绍如何利用Dify、OpenRouter和 k8s 快速搭建一个准生产环境的LLM应用开发平台。","image":"/static/images/paste/87ff83c7e1826d52ff5fcc672ed688972347a7cec8e0e35acfb641ca8c4a5942.png","url":"https://www.ifb.me/blog/ai/difyopenrouterk8s-ku"},"language":"zh"},{"title":"Kubernetes + Ollama:10 分钟教你在 Kubernetes 中快速部署 Ollama","date":"2024-07-14T22:08:17.000Z","tags":["LLM","Ollama"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.07,"time":364200,"words":1214},"slug":"ai/kubernetesollama10-f","path":"blog/ai/kubernetesollama10-f","filePath":"blog/ai/kubernetesollama10-f.mdx","toc":[{"value":"准备工作","url":"#准备工作","depth":2},{"value":"第一步:编写 Ollama 部署文件","url":"#第一步编写-ollama-部署文件","depth":2},{"value":"第二步:应用部署文件","url":"#第二步应用部署文件","depth":2},{"value":"第三步:验证部署","url":"#第三步验证部署","depth":2},{"value":"第四步:访问 Ollama 服务","url":"#第四步访问-ollama-服务","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Kubernetes + Ollama:10 分钟教你在 Kubernetes 中快速部署 Ollama","datePublished":"2024-07-14T22:08:17.000Z","dateModified":"2024-07-14T22:08:17.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/kubernetesollama10-f"},"language":"zh"},{"title":"Mac M1 + Ollama + Llama3:30 分钟教你在个人电脑快速安装配置大模型","date":"2024-07-09T19:27:26.000Z","tags":["LLM","Ollama"],"draft":false,"isPinned":false,"images":["/static/images/macm1ollamallama330/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.68,"time":400800,"words":1336},"slug":"ai/macm1ollamallama330","path":"blog/ai/macm1ollamallama330","filePath":"blog/ai/macm1ollamallama330.mdx","toc":[{"value":"一、安装Ollama","url":"#一安装ollama","depth":2},{"value":"macOS","url":"#macos","depth":3},{"value":"Windows","url":"#windows","depth":3},{"value":"Linux","url":"#linux","depth":3},{"value":"三、安装 Llama3-8B-Chinese-Chat-GGUF-8bit 模型","url":"#三安装-llama3-8b-chinese-chat-gguf-8bit-模型","depth":2},{"value":"导入模型","url":"#导入模型","depth":3},{"value":"运行模型","url":"#运行模型","depth":3},{"value":"模型测试与应用","url":"#模型测试与应用","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Mac M1 + Ollama + Llama3:30 分钟教你在个人电脑快速安装配置大模型","datePublished":"2024-07-09T19:27:26.000Z","dateModified":"2024-07-09T19:27:26.000Z","image":"/static/images/macm1ollamallama330/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/ai/macm1ollamallama330"},"language":"zh"},{"title":"Obsidian + Smart Connection + Ollama:让本地私有大模型成为你的笔记智能体","date":"2024-07-07T22:44:58.000Z","tags":["Obsidian","Ollama"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":3,"time":180000,"words":600},"slug":"backend/obsidiansmartconnect","path":"blog/backend/obsidiansmartconnect","filePath":"blog/backend/obsidiansmartconnect.mdx","toc":[{"value":"本地下载 Ollama 并运行模型","url":"#本地下载-ollama-并运行模型","depth":2},{"value":"安装 Ollama","url":"#安装-ollama","depth":3},{"value":"macOS","url":"#macos","depth":4},{"value":"Windows","url":"#windows","depth":4},{"value":"Linux","url":"#linux","depth":4},{"value":"启动模型","url":"#启动模型","depth":3},{"value":"Smart Connection 插件里面配置安装的模型","url":"#smart-connection-插件里面配置安装的模型","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + Smart Connection + Ollama:让本地私有大模型成为你的笔记智能体","datePublished":"2024-07-07T22:44:58.000Z","dateModified":"2024-07-07T22:44:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/obsidiansmartconnect"},"language":"zh"},{"title":"面向 RAG 的未来:深入探索微软 GraphRAG 技术","date":"2024-07-06T18:57:46.000Z","tags":["LLM"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"19 min read","minutes":18.075,"time":1084500,"words":3615},"slug":"backend/mian-xiang-rag-de-we","path":"blog/backend/mian-xiang-rag-de-we","filePath":"blog/backend/mian-xiang-rag-de-we.mdx","toc":[{"value":"什么是 GraphRAG?","url":"#什么是-graphrag","depth":2},{"value":"GraphRAG 的主要优点和应用案例","url":"#graphrag-的主要优点和应用案例","depth":2},{"value":"连接分散的信息","url":"#连接分散的信息","depth":3},{"value":"总结主题和概念","url":"#总结主题和概念","depth":3},{"value":"提高性能指标","url":"#提高性能指标","depth":3},{"value":"潜在应用场景","url":"#潜在应用场景","depth":3},{"value":"工程化 GraphRAG","url":"#工程化-graphrag","depth":2},{"value":"可扩展性:关键问题","url":"#可扩展性关键问题","depth":3},{"value":"如何在生产上实际应用","url":"#如何在生产上实际应用","depth":3},{"value":"目前的局限性:改进空间","url":"#目前的局限性改进空间","depth":3},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"面向 RAG 的未来:深入探索微软 GraphRAG 技术","datePublished":"2024-07-06T18:57:46.000Z","dateModified":"2024-07-06T18:57:46.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mian-xiang-rag-de-we"},"language":"zh"},{"title":"个人开发者必备工具:OpenRouter 让市面上的大模型触手可及","date":"2024-07-03T20:18:42.000Z","tags":["LLM"],"draft":false,"isPinned":false,"images":["/static/images/ge-ren-kai-fa-zhe-bi/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.38,"time":262800,"words":876},"slug":"backend/ge-ren-kai-fa-zhe-bi","path":"blog/backend/ge-ren-kai-fa-zhe-bi","filePath":"blog/backend/ge-ren-kai-fa-zhe-bi.mdx","toc":[{"value":"什么是 OpenRouter?","url":"#什么是-openrouter","depth":2},{"value":"OpenRouter 的主要特点","url":"#openrouter-的主要特点","depth":3},{"value":"为什么选择 OpenRouter?","url":"#为什么选择-openrouter","depth":2},{"value":"如何使用 OpenRouter?","url":"#如何使用-openrouter","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"个人开发者必备工具:OpenRouter 让市面上的大模型触手可及","datePublished":"2024-07-03T20:18:42.000Z","dateModified":"2024-07-03T20:18:42.000Z","image":"/static/images/ge-ren-kai-fa-zhe-bi/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/ge-ren-kai-fa-zhe-bi"},"language":"zh"},{"title":"如何在 Obsidian 中实现自定义功能:插件开发详解","date":"2024-06-30T21:04:41.000Z","tags":["Obsidian"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.685,"time":221100,"words":737},"slug":"backend/ru-he-zai-obsidian-z","path":"blog/backend/ru-he-zai-obsidian-z","filePath":"blog/backend/ru-he-zai-obsidian-z.mdx","toc":[{"value":"第一步:了解 Obsidian API 和环境","url":"#第一步了解-obsidian-api-和环境","depth":2},{"value":"第二步:设置开发环境","url":"#第二步设置开发环境","depth":2},{"value":"第三步:编写插件代码","url":"#第三步编写插件代码","depth":2},{"value":"第四步:测试插件","url":"#第四步测试插件","depth":2},{"value":"第五步:发布和维护插件","url":"#第五步发布和维护插件","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"如何在 Obsidian 中实现自定义功能:插件开发详解","datePublished":"2024-06-30T21:04:41.000Z","dateModified":"2024-06-30T21:04:41.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/ru-he-zai-obsidian-z"},"language":"zh"},{"title":"Obsidian + Text Generator + Smart Connections:打造沉浸式 AI 笔记工具","date":"2024-06-29T20:15:58.000Z","tags":["ChatGPT","Obsidian","LLM"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.05,"time":303000,"words":1010},"slug":"ai/obsidiantextgenerato","path":"blog/ai/obsidiantextgenerato","filePath":"blog/ai/obsidiantextgenerato.mdx","toc":[{"value":"Obsidian:构建你的个人知识库","url":"#obsidian构建你的个人知识库","depth":2},{"value":"Text Generator:为写作提速","url":"#text-generator为写作提速","depth":2},{"value":"Smart Connections:让知识建立连接","url":"#smart-connections让知识建立连接","depth":2},{"value":"总结:AI 驱动知识管理","url":"#总结ai-驱动知识管理","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + Text Generator + Smart Connections:打造沉浸式 AI 笔记工具","datePublished":"2024-06-29T20:15:58.000Z","dateModified":"2024-06-29T20:15:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/obsidiantextgenerato"},"language":"zh"},{"title":"Obsidian + Omnisearch:高效连接线上和本地搜索利器","date":"2024-06-24T19:21:43.000Z","tags":["Obsidian"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.335,"time":200100,"words":667},"slug":"backend/obsidianomnisearch-g","path":"blog/backend/obsidianomnisearch-g","filePath":"blog/backend/obsidianomnisearch-g.mdx","toc":[{"value":"引言 📓","url":"#引言-","depth":2},{"value":"Omnisearch 插件简介 🌟","url":"#omnisearch-插件简介-","depth":2},{"value":"安装 Omnisearch 插件 🔧","url":"#安装-omnisearch-插件-","depth":2},{"value":"配置 Omnisearch 插件 ⚙️","url":"#配置-omnisearch-插件-️","depth":2},{"value":"使用 Omnisearch 连接线上和本地搜索 🔍","url":"#使用-omnisearch-连接线上和本地搜索-","depth":2},{"value":"总结 🎉","url":"#总结-","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + Omnisearch:高效连接线上和本地搜索利器","datePublished":"2024-06-24T19:21:43.000Z","dateModified":"2024-06-24T19:21:43.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/obsidianomnisearch-g"},"language":"zh"},{"title":"参考Odoo实现RBAC:最佳实践和技巧","date":"2024-06-03T20:02:01.000Z","tags":["Java"],"draft":false,"isPinned":false,"images":["/static/images/can-kao-odoo-shi-xia/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"14 min read","minutes":13.655,"time":819300,"words":2731},"slug":"backend/can-kao-odoo-shi-xia","path":"blog/backend/can-kao-odoo-shi-xia","filePath":"blog/backend/can-kao-odoo-shi-xia.mdx","toc":[{"value":"基于角色的访问控制 (RBAC)","url":"#基于角色的访问控制-rbac","depth":2},{"value":"Odoo 为什么要使用 RBAC","url":"#odoo-为什么要使用-rbac","depth":2},{"value":"Odoo 中的用户群组","url":"#odoo-中的用户群组","depth":2},{"value":"用户群组类型","url":"#用户群组类型","depth":3},{"value":"角色定义和分配","url":"#角色定义和分配","depth":2},{"value":"应用程序群组详细信息","url":"#应用程序群组详细信息","depth":2},{"value":"配置用户群组和权限","url":"#配置用户群组和权限","depth":2},{"value":"将用户分配到用户群组","url":"#将用户分配到用户群组","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"参考Odoo实现RBAC:最佳实践和技巧","datePublished":"2024-06-03T20:02:01.000Z","dateModified":"2024-06-03T20:02:01.000Z","image":"/static/images/can-kao-odoo-shi-xia/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/can-kao-odoo-shi-xia"},"language":"zh"},{"title":"巧用环境变量:动态设置 Logback 日志级别的终极指南","date":"2024-06-02T10:23:10.000Z","tags":["Java"],"draft":false,"isPinned":false,"images":["/static/images/qiao-yong-huan-jing/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.255,"time":255300,"words":851},"slug":"backend/qiao-yong-huan-jing","path":"blog/backend/qiao-yong-huan-jing","filePath":"blog/backend/qiao-yong-huan-jing.mdx","toc":[{"value":"1. 添加 Logback 依赖","url":"#1-添加-logback-依赖","depth":3},{"value":"2. 配置 logback.xml","url":"#2-配置-logbackxml","depth":3},{"value":"3. 设置环境变量","url":"#3-设置环境变量","depth":3},{"value":"4. 示例代码","url":"#4-示例代码","depth":3},{"value":"结语","url":"#结语","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"巧用环境变量:动态设置 Logback 日志级别的终极指南","datePublished":"2024-06-02T10:23:10.000Z","dateModified":"2024-06-02T10:23:10.000Z","image":"/static/images/qiao-yong-huan-jing/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/qiao-yong-huan-jing"},"language":"zh"},{"title":"深入探究 Odoo 权限管理:模型和表解析","date":"2024-06-02T10:23:10.000Z","tags":[],"draft":false,"isPinned":false,"images":null,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.105,"time":366300,"words":1221},"slug":"backend/shen-ru-tan-jiu-odoo","path":"blog/backend/shen-ru-tan-jiu-odoo","filePath":"blog/backend/shen-ru-tan-jiu-odoo.mdx","toc":[{"value":"权限管理相关的主要模型和表","url":"#权限管理相关的主要模型和表","depth":2},{"value":"res.users","url":"#resusers","depth":3},{"value":"res.groups","url":"#resgroups","depth":3},{"value":"ir.model.access","url":"#irmodelaccess","depth":3},{"value":"ir.rule","url":"#irrule","depth":3},{"value":"权限管理示例","url":"#权限管理示例","depth":2},{"value":"1. 创建用户组","url":"#1-创建用户组","depth":3},{"value":"2. 配置访问控制","url":"#2-配置访问控制","depth":3},{"value":"3. 添加用户到用户组","url":"#3-添加用户到用户组","depth":3},{"value":"代码判断是否有权限示例","url":"#代码判断是否有权限示例","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入探究 Odoo 权限管理:模型和表解析","datePublished":"2024-06-02T10:23:10.000Z","dateModified":"2024-06-02T10:23:10.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/shen-ru-tan-jiu-odoo"},"language":"zh"},{"title":"探索 Odoo 开源力量:开发者初体验","date":"2024-06-01T10:09:32.000Z","tags":[],"draft":false,"isPinned":false,"images":["/static/images/tan-suo-odoo-kai-yua/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.47,"time":268200,"words":894},"slug":"backend/tan-suo-odoo-kai-yua","path":"blog/backend/tan-suo-odoo-kai-yua","filePath":"blog/backend/tan-suo-odoo-kai-yua.mdx","toc":[{"value":"介绍","url":"#介绍","depth":2},{"value":"Odoo 的用途","url":"#odoo-的用途","depth":2},{"value":"代码下载","url":"#代码下载","depth":2},{"value":"启动开发者模式","url":"#启动开发者模式","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"探索 Odoo 开源力量:开发者初体验","datePublished":"2024-06-01T10:09:32.000Z","dateModified":"2024-06-01T10:09:32.000Z","image":"/static/images/tan-suo-odoo-kai-yua/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/tan-suo-odoo-kai-yua"},"language":"zh"},{"title":"Spring Boot Logback 配置日志关键字过滤指南","date":"2024-04-22T21:08:35.000Z","tags":["Java"],"draft":false,"isPinned":false,"images":["/static/images/springbootlogback-pe/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.245,"time":134700,"words":449},"slug":"backend/springbootlogback-pe","path":"blog/backend/springbootlogback-pe","filePath":"blog/backend/springbootlogback-pe.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring Boot Logback 配置日志关键字过滤指南","datePublished":"2024-04-22T21:08:35.000Z","dateModified":"2024-04-22T21:08:35.000Z","image":"/static/images/springbootlogback-pe/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/springbootlogback-pe"},"language":"zh"},{"title":"代码评审实战指南:打造高质量、可维护的项目","date":"2024-04-20T17:45:18.000Z","tags":["Java"],"draft":false,"isPinned":false,"images":["/static/images/dai-ma-ping-shen-shi/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"7 min read","minutes":6.37,"time":382200,"words":1274},"slug":"backend/dai-ma-ping-shen-shi","path":"blog/backend/dai-ma-ping-shen-shi","filePath":"blog/backend/dai-ma-ping-shen-shi.mdx","toc":[{"value":"What?什么是 CR","url":"#what什么是-cr","depth":2},{"value":"Why?为什么要做 CR","url":"#why为什么要做-cr","depth":2},{"value":"How ? 如何进行 CR","url":"#how--如何进行-cr","depth":2},{"value":"Design:程序设计、架构设计是否设计合理","url":"#design程序设计架构设计是否设计合理","depth":4},{"value":"Functionality:代码功能是否符合作者预期,代码行为是否用户友好","url":"#functionality代码功能是否符合作者预期代码行为是否用户友好","depth":4},{"value":"Complexity:实现是否能简化,代码可读性是否良好,接口是否易用","url":"#complexity实现是否能简化代码可读性是否良好接口是否易用","depth":4},{"value":"如何减少 if else?","url":"#如何减少-if-else","depth":5},{"value":"Naming:变量名、类名、方法名等字面量的选择是否清晰、精炼","url":"#naming变量名类名方法名等字面量的选择是否清晰精炼","depth":4},{"value":"Comments:是否编写了清晰的、有用的注释","url":"#comments是否编写了清晰的有用的注释","depth":4},{"value":"Style:代码风格是否符合规范","url":"#style代码风格是否符合规范","depth":4},{"value":"Documentation:修改代码的同时,是否同步更新了相关文档","url":"#documentation修改代码的同时是否同步更新了相关文档","depth":4},{"value":"实施注意","url":"#实施注意","depth":2},{"value":"参考","url":"#参考","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"代码评审实战指南:打造高质量、可维护的项目","datePublished":"2024-04-20T17:45:18.000Z","dateModified":"2024-04-20T17:45:18.000Z","image":"/static/images/dai-ma-ping-shen-shi/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/dai-ma-ping-shen-shi"},"language":"zh"},{"title":"开始使用Crawlab Java爬虫 - 简易指南","date":"2024-03-26T17:03:14.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"2 min read","minutes":1.55,"time":93000,"words":310},"slug":"backend/kai-shi-shi-yong-cra","path":"blog/backend/kai-shi-shi-yong-cra","filePath":"blog/backend/kai-shi-shi-yong-cra.mdx","toc":[{"value":"登录爬虫容器安装 JDK","url":"#登录爬虫容器安装-jdk","depth":3},{"value":"创建Java爬虫项目","url":"#创建java爬虫项目","depth":3},{"value":"打包并配置爬虫任务","url":"#打包并配置爬虫任务","depth":3},{"value":"运行爬虫任务","url":"#运行爬虫任务","depth":3},{"value":"查看结果数据","url":"#查看结果数据","depth":3},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"开始使用Crawlab Java爬虫 - 简易指南","datePublished":"2024-03-26T17:03:14.000Z","dateModified":"2024-03-26T17:03:14.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/kai-shi-shi-yong-cra"},"language":"zh"},{"title":"数据处理不再烦恼:尝试这六大数据访问模式迈向成功","date":"2024-03-25T21:01:28.000Z","tags":["Database"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.12,"time":247200,"words":824},"slug":"backend/shu-ju-chu-li-bu-zai","path":"blog/backend/shu-ju-chu-li-bu-zai","filePath":"blog/backend/shu-ju-chu-li-bu-zai.mdx","toc":[{"value":"Cache Aside","url":"#cache-aside","depth":2},{"value":"Materialized View","url":"#materialized-view","depth":2},{"value":"CQRS","url":"#cqrs","depth":2},{"value":"Event Sourcing","url":"#event-sourcing","depth":2},{"value":"Index Table","url":"#index-table","depth":2},{"value":"Sharding","url":"#sharding","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"数据处理不再烦恼:尝试这六大数据访问模式迈向成功","datePublished":"2024-03-25T21:01:28.000Z","dateModified":"2024-03-25T21:01:28.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/shu-ju-chu-li-bu-zai"},"language":"zh"},{"title":"五分钟搞定CentOS Jenkins的安装和配置","date":"2024-03-20T19:48:58.000Z","tags":["DevOps"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"2 min read","minutes":1.9,"time":114000,"words":380},"slug":"backend/wu-fen-zhong-gao-din","path":"blog/backend/wu-fen-zhong-gao-din","filePath":"blog/backend/wu-fen-zhong-gao-din.mdx","toc":[{"value":"安装步骤","url":"#安装步骤","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"五分钟搞定CentOS Jenkins的安装和配置","datePublished":"2024-03-20T19:48:58.000Z","dateModified":"2024-03-20T19:48:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/wu-fen-zhong-gao-din"},"language":"zh"},{"title":"Kubernetes + Spring Boot + Dubbo 优雅停机最佳实践","date":"2024-03-13T19:48:58.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.725,"time":223500,"words":745},"slug":"backend/kubernetesspringboot","path":"blog/backend/kubernetesspringboot","filePath":"blog/backend/kubernetesspringboot.mdx","toc":[{"value":"什么是优雅停机?","url":"#什么是优雅停机","depth":2},{"value":"实现优雅停机的步骤","url":"#实现优雅停机的步骤","depth":2},{"value":"1. 通过 Kubernetes 控制器配置 liveness 和 readiness 探针","url":"#1-通过-kubernetes-控制器配置-liveness-和-readiness-探针","depth":3},{"value":"2. 配置 Kubernetes preStop","url":"#2-配置-kubernetes-prestop","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Kubernetes + Spring Boot + Dubbo 优雅停机最佳实践","datePublished":"2024-03-13T19:48:58.000Z","dateModified":"2024-03-13T19:48:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/kubernetesspringboot"},"language":"zh"},{"title":"深入探讨:如何设计优雅而强大的 API 接口?","date":"2024-03-08T21:27:59.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.545,"time":452700,"words":1509},"slug":"backend/shen-ru-tan-tao-ru-h","path":"blog/backend/shen-ru-tan-tao-ru-h","filePath":"blog/backend/shen-ru-tan-tao-ru-h.mdx","toc":[{"value":"设计一个良好 API 接口的重要性","url":"#设计一个良好-api-接口的重要性","depth":2},{"value":"良好 API 的特征","url":"#良好-api-的特征","depth":2},{"value":"准确的实现需求","url":"#准确的实现需求","depth":2},{"value":"只实现一个功能","url":"#只实现一个功能","depth":2},{"value":"一致性","url":"#一致性","depth":2},{"value":"清晰易懂的命名","url":"#清晰易懂的命名","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入探讨:如何设计优雅而强大的 API 接口?","datePublished":"2024-03-08T21:27:59.000Z","dateModified":"2024-03-08T21:27:59.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/shen-ru-tan-tao-ru-h"},"language":"zh"},{"title":"深入浅出 Java 垃圾回收机制","date":"2024-03-01T01:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.535,"time":332100,"words":1107},"slug":"backend/java-gc","path":"blog/backend/java-gc","filePath":"blog/backend/java-gc.mdx","toc":[{"value":"Java 垃圾回收:从入门到精通","url":"#java-垃圾回收从入门到精通","depth":1},{"value":"1. 对象的生与死:Java 中的对象生命周期","url":"#1-对象的生与死java-中的对象生命周期","depth":2},{"value":"1.1 引用计数法:简单但不完美","url":"#11-引用计数法简单但不完美","depth":3},{"value":"1.2 可达性分析:GC 的火眼金睛","url":"#12-可达性分析gc-的火眼金睛","depth":3},{"value":"1.3 引用的五个等级:不是所有引用都一样","url":"#13-引用的五个等级不是所有引用都一样","depth":3},{"value":"2. 垃圾回收的艺术:主流算法解析","url":"#2-垃圾回收的艺术主流算法解析","depth":2},{"value":"2.1 标记-清除算法:简单直接但有隐患","url":"#21-标记-清除算法简单直接但有隐患","depth":3},{"value":"2.2 复制算法:新生代的宠儿","url":"#22-复制算法新生代的宠儿","depth":3},{"value":"2.3 标记-整理算法:老年代的首选","url":"#23-标记-整理算法老年代的首选","depth":3},{"value":"2.4 分代收集算法:集大成者","url":"#24-分代收集算法集大成者","depth":3},{"value":"3. 垃圾收集器:各显神通","url":"#3-垃圾收集器各显神通","depth":2},{"value":"3.1 Serial 收集器:简单而高效","url":"#31-serial-收集器简单而高效","depth":3},{"value":"3.2 ParNew 收集器:多线程版的 Serial","url":"#32-parnew-收集器多线程版的-serial","depth":3},{"value":"3.3 Parallel Scavenge 收集器:注重吞吐量","url":"#33-parallel-scavenge-收集器注重吞吐量","depth":3},{"value":"3.4 CMS 收集器:低延迟的追求者","url":"#34-cms-收集器低延迟的追求者","depth":3},{"value":"3.5 G1 收集器:驾驭复杂场景的全能选手","url":"#35-g1-收集器驾驭复杂场景的全能选手","depth":3},{"value":"3.6 ZGC:超低延迟的新秀","url":"#36-zgc超低延迟的新秀","depth":3},{"value":"4. 实践与优化:调优的艺术","url":"#4-实践与优化调优的艺术","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入浅出 Java 垃圾回收机制","datePublished":"2024-03-01T01:48:04.000Z","dateModified":"2024-03-01T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/java-gc"},"language":"zh"},{"title":"RabbitMQ踩坑:多个消费者共用一个 ContainerFactory","date":"2024-02-04T10:25:45.000Z","tags":["Java","MQ"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.045,"time":242700,"words":809},"slug":"backend/rabbitmq-cai-keng-du","path":"blog/backend/rabbitmq-cai-keng-du","filePath":"blog/backend/rabbitmq-cai-keng-du.mdx","toc":[{"value":"坑一:消息处理并发问题","url":"#坑一消息处理并发问题","depth":3},{"value":"坑二:资源共享导致的性能瓶颈","url":"#坑二资源共享导致的性能瓶颈","depth":3},{"value":"坑三:错误的消息路由","url":"#坑三错误的消息路由","depth":3},{"value":"坑四:配置和管理的复杂性","url":"#坑四配置和管理的复杂性","depth":3},{"value":"结论","url":"#结论","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"RabbitMQ踩坑:多个消费者共用一个 ContainerFactory","datePublished":"2024-02-04T10:25:45.000Z","dateModified":"2024-02-04T10:25:45.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/rabbitmq-cai-keng-du"},"language":"zh"},{"title":"MySQL最佳实践:MySQL 为什么建议使用自增组件?","date":"2024-02-02T20:07:34.000Z","tags":["Database"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.845,"time":230700,"words":769},"slug":"backend/mysql-zui-jia-shi-ji","path":"blog/backend/mysql-zui-jia-shi-ji","filePath":"blog/backend/mysql-zui-jia-shi-ji.mdx","toc":[{"value":"便于范围查询","url":"#便于范围查询","depth":3},{"value":"避免插入时的页分裂,提高插入效率","url":"#避免插入时的页分裂提高插入效率","depth":3},{"value":"其他考虑","url":"#其他考虑","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"MySQL最佳实践:MySQL 为什么建议使用自增组件?","datePublished":"2024-02-02T20:07:34.000Z","dateModified":"2024-02-02T20:07:34.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mysql-zui-jia-shi-ji"},"language":"zh"},{"title":"Arthas+JVM命令实战指南:快速定位并解决JVM内存溢出问题","date":"2024-02-01T21:04:02.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.81,"time":228600,"words":762},"slug":"backend/arthasjvm-ming-ling","path":"blog/backend/arthasjvm-ming-ling","filePath":"blog/backend/arthasjvm-ming-ling.mdx","toc":[{"value":"一、JVM内存溢出的原因","url":"#一jvm内存溢出的原因","depth":2},{"value":"二、使用Arthas工具定位问题","url":"#二使用arthas工具定位问题","depth":2},{"value":"步骤1:安装Arthas","url":"#步骤1安装arthas","depth":3},{"value":"步骤2:分析线程","url":"#步骤2分析线程","depth":3},{"value":"步骤3:仪表板监控","url":"#步骤3仪表板监控","depth":3},{"value":"步骤4:生成堆转储文件","url":"#步骤4生成堆转储文件","depth":3},{"value":"三、JVM命令行工具的使用","url":"#三jvm命令行工具的使用","depth":2},{"value":"1. 查看内存占用最多的对象","url":"#1-查看内存占用最多的对象","depth":3},{"value":"2. 查看和调整JVM配置","url":"#2-查看和调整jvm配置","depth":3},{"value":"3. 手动触发垃圾回收","url":"#3-手动触发垃圾回收","depth":3},{"value":"四、总结","url":"#四总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Arthas+JVM命令实战指南:快速定位并解决JVM内存溢出问题","datePublished":"2024-02-01T21:04:02.000Z","dateModified":"2024-02-01T21:04:02.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/arthasjvm-ming-ling"},"language":"zh"},{"title":"Java类加载深度探索:提升你的代码效率与安全性","date":"2024-01-25T19:51:21.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.115,"time":306900,"words":1023},"slug":"backend/java-lei-jia-zai-she","path":"blog/backend/java-lei-jia-zai-she","filePath":"blog/backend/java-lei-jia-zai-she.mdx","toc":[{"value":"类加载的时机","url":"#类加载的时机","depth":3},{"value":"类加载的过程","url":"#类加载的过程","depth":3},{"value":"类加载器及双亲委派模型","url":"#类加载器及双亲委派模型","depth":3},{"value":"工作过程","url":"#工作过程","depth":4},{"value":"破坏双亲委派模型","url":"#破坏双亲委派模型","depth":4},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Java类加载深度探索:提升你的代码效率与安全性","datePublished":"2024-01-25T19:51:21.000Z","dateModified":"2024-01-25T19:51:21.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/java-lei-jia-zai-she"},"language":"zh"},{"title":"解析Java动态代理的威力:JDK Proxy vs CGLIB vs Javassist vs ASM对比分析","date":"2024-01-25T19:40:44.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.06,"time":243600,"words":812},"slug":"backend/jie-xi-java-dong-tai","path":"blog/backend/jie-xi-java-dong-tai","filePath":"blog/backend/jie-xi-java-dong-tai.mdx","toc":[{"value":"JDK Proxy","url":"#jdk-proxy","depth":3},{"value":"优点:","url":"#优点","depth":4},{"value":"缺点:","url":"#缺点","depth":4},{"value":"示例:","url":"#示例","depth":4},{"value":"CGLIB","url":"#cglib","depth":3},{"value":"优点:","url":"#优点","depth":4},{"value":"缺点:","url":"#缺点","depth":4},{"value":"示例:","url":"#示例","depth":4},{"value":"Javassist","url":"#javassist","depth":3},{"value":"优点:","url":"#优点","depth":4},{"value":"缺点:","url":"#缺点","depth":4},{"value":"示例:","url":"#示例","depth":4},{"value":"ASM","url":"#asm","depth":3},{"value":"优点:","url":"#优点","depth":4},{"value":"缺点:","url":"#缺点","depth":4},{"value":"示例:","url":"#示例","depth":4},{"value":"总结","url":"#总结","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"解析Java动态代理的威力:JDK Proxy vs CGLIB vs Javassist vs ASM对比分析","datePublished":"2024-01-25T19:40:44.000Z","dateModified":"2024-01-25T19:40:44.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/jie-xi-java-dong-tai"},"language":"zh"},{"title":"Snowflake + Streamlit:打造智能数据应用程序的最强组合","date":"2024-01-18T20:12:24.000Z","tags":["Database"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.42,"time":325200,"words":1084},"slug":"ai/snowflakestreamlit-d","path":"blog/ai/snowflakestreamlit-d","filePath":"blog/ai/snowflakestreamlit-d.mdx","toc":[{"value":"示例场景:销售数据分析仪表板","url":"#示例场景销售数据分析仪表板","depth":2},{"value":"步骤 1: 在 Snowflake 中准备数据","url":"#步骤-1-在-snowflake-中准备数据","depth":4},{"value":"步骤 2: 使用 Streamlit 构建前端应用","url":"#步骤-2-使用-streamlit-构建前端应用","depth":4},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Snowflake + Streamlit:打造智能数据应用程序的最强组合","datePublished":"2024-01-18T20:12:24.000Z","dateModified":"2024-01-18T20:12:24.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/snowflakestreamlit-d"},"language":"zh"},{"title":"Streamlit + FastAPI:快速构建和部署 AI Web 应用的新思路","date":"2024-01-10T03:18:11.000Z","tags":["LLM"],"draft":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.435,"time":446100,"words":1487},"slug":"ai/streamlitfastapi-kua","path":"blog/ai/streamlitfastapi-kua","filePath":"blog/ai/streamlitfastapi-kua.mdx","toc":[{"value":"一、概述","url":"#一概述","depth":2},{"value":"Streamlit","url":"#streamlit","depth":3},{"value":"FastAPI","url":"#fastapi","depth":3},{"value":"二、Streamlit + FastAPI","url":"#二streamlit--fastapi","depth":2},{"value":"Streamlit 作为前端","url":"#streamlit-作为前端","depth":3},{"value":"FastAPI 作为后端","url":"#fastapi-作为后端","depth":3},{"value":"整体交互流程","url":"#整体交互流程","depth":3},{"value":"三、为什么要使用 Streamlit + FastAPI 的架构","url":"#三为什么要使用-streamlit--fastapi-的架构","depth":2},{"value":"1. 快速开发 MVP","url":"#1-快速开发-mvp","depth":3},{"value":"2. 可扩展性","url":"#2-可扩展性","depth":3},{"value":"3. 容易上手","url":"#3-容易上手","depth":3},{"value":"4. 良好的社区和生态","url":"#4-良好的社区和生态","depth":3},{"value":"四、实际案例:股票价格可视化应用程序","url":"#四实际案例股票价格可视化应用程序","depth":2},{"value":"五、结论","url":"#五结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Streamlit + FastAPI:快速构建和部署 AI Web 应用的新思路","datePublished":"2024-01-10T03:18:11.000Z","dateModified":"2024-01-10T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/streamlitfastapi-kua"},"language":"zh"},{"title":"深入理解应用的可观测性 - 日志、追踪、度量的集成与实践","date":"2024-01-05T22:56:35.000Z","tags":["Java"],"draft":false,"isPinned":false,"images":["/static/images/shen-ru-li-jie-ying/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"4 min read","minutes":3.465,"time":207900,"words":693},"slug":"backend/shen-ru-li-jie-ying","path":"blog/backend/shen-ru-li-jie-ying","filePath":"blog/backend/shen-ru-li-jie-ying.mdx","toc":[{"value":"1. 日志(Logging):记录系统的生命脉动","url":"#1-日志logging记录系统的生命脉动","depth":2},{"value":"2. 追踪(Tracing):揭露事务的全貌","url":"#2-追踪tracing揭露事务的全貌","depth":2},{"value":"3. 度量(Metrics):系统健康的量化指标","url":"#3-度量metrics系统健康的量化指标","depth":2},{"value":"集成与实践:创建全面的可观测性策略","url":"#集成与实践创建全面的可观测性策略","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入理解应用的可观测性 - 日志、追踪、度量的集成与实践","datePublished":"2024-01-05T22:56:35.000Z","dateModified":"2024-01-05T22:56:35.000Z","image":"/static/images/shen-ru-li-jie-ying/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/shen-ru-li-jie-ying"},"language":"zh"},{"title":"API测试的九大门道:一网打尽软件缺陷","date":"2024-01-03T21:07:08.000Z","tags":["Java"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.705,"time":162300,"words":541},"slug":"backend/api-ce-shi-de-jiu-da","path":"blog/backend/api-ce-shi-de-jiu-da","filePath":"blog/backend/api-ce-shi-de-jiu-da.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"API测试的九大门道:一网打尽软件缺陷","datePublished":"2024-01-03T21:07:08.000Z","dateModified":"2024-01-03T21:07:08.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/api-ce-shi-de-jiu-da"},"language":"zh"},{"title":"Kafka实战指南:五大关键应用场景","date":"2024-01-02T19:14:12.000Z","tags":["MQ"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.92,"time":175200,"words":584},"slug":"backend/kafka-shi-zhan-zhi-n","path":"blog/backend/kafka-shi-zhan-zhi-n","filePath":"blog/backend/kafka-shi-zhan-zhi-n.mdx","toc":[{"value":"📊 日志处理与分析","url":"#-日志处理与分析","depth":2},{"value":"💡 数据流推荐","url":"#-数据流推荐","depth":2},{"value":"🚨 系统监控与告警","url":"#-系统监控与告警","depth":2},{"value":"🔄 CDC(变更数据捕获)","url":"#-cdc变更数据捕获","depth":2},{"value":"🔁 系统迁移","url":"#-系统迁移","depth":2},{"value":"小结","url":"#小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Kafka实战指南:五大关键应用场景","datePublished":"2024-01-02T19:14:12.000Z","dateModified":"2024-01-02T19:14:12.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/kafka-shi-zhan-zhi-n"},"language":"zh"},{"title":"破解密码:驱动现代数据库的关键数据结构(下)","date":"2023-12-29T21:38:17.000Z","tags":["Database"],"draft":false,"summary":"在这个数据驱动的时代,数据库如同现代科技的心脏,承载着海量信息的运转与管理。但是,您是否曾好奇过,支撑这些数据库背后的结构是什么呢?让我们一起探索这些强大的数据结构,并理解它们如何塑造我们的数字世界。","type":"Blog","readingTime":{"text":"12 min read","minutes":11.265,"time":675900,"words":2253},"slug":"backend/index-compare-2","path":"blog/backend/index-compare-2","filePath":"blog/backend/index-compare-2.mdx","toc":[{"value":"一、SkipList","url":"#一skiplist","depth":2},{"value":"二、SSTable","url":"#二sstable","depth":2},{"value":"三、LSM Tree","url":"#三lsm-tree","depth":2},{"value":"四、Suffix Tree","url":"#四suffix-tree","depth":2},{"value":"五、R Tree","url":"#五r-tree","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"破解密码:驱动现代数据库的关键数据结构(下)","datePublished":"2023-12-29T21:38:17.000Z","dateModified":"2023-12-29T21:38:17.000Z","description":"在这个数据驱动的时代,数据库如同现代科技的心脏,承载着海量信息的运转与管理。但是,您是否曾好奇过,支撑这些数据库背后的结构是什么呢?让我们一起探索这些强大的数据结构,并理解它们如何塑造我们的数字世界。","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/index-compare-2"},"language":"zh"},{"title":"异步通信、削峰填谷、解耦利器:揭秘五种流行消息队列","date":"2023-12-28T21:38:17.000Z","tags":["MQ"],"draft":false,"images":["/static/images/java-mq/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.235,"time":254100,"words":847},"slug":"backend/java-mq","path":"blog/backend/java-mq","filePath":"blog/backend/java-mq.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"异步通信、削峰填谷、解耦利器:揭秘五种流行消息队列","datePublished":"2023-12-28T21:38:17.000Z","dateModified":"2023-12-28T21:38:17.000Z","image":"/static/images/java-mq/pin-ff4aab374b81cd444978d5f6ff357f9fmd5.jpeg","url":"https://www.ifb.me/blog/backend/java-mq"},"language":"zh"},{"title":"破解密码:驱动现代数据库的关键数据结构(上)","date":"2023-12-27T21:38:17.000Z","tags":["Database"],"draft":false,"summary":"在这个数据驱动的时代,数据库如同现代科技的心脏,承载着海量信息的运转与管理。但是,您是否曾好奇过,支撑这些数据库背后的结构是什么呢?让我们一起探索这些强大的数据结构,并理解它们如何塑造我们的数字世界。","type":"Blog","readingTime":{"text":"9 min read","minutes":8.125,"time":487500,"words":1625},"slug":"backend/index-compare","path":"blog/backend/index-compare","filePath":"blog/backend/index-compare.mdx","toc":[{"value":"一、B Tree","url":"#一b-tree","depth":2},{"value":"二、Inverted Index","url":"#二inverted-index","depth":2},{"value":"三、Hash Index","url":"#三hash-index","depth":2},{"value":"四、Prefix Tree","url":"#四prefix-tree","depth":2},{"value":"五、Sparse Index","url":"#五sparse-index","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"破解密码:驱动现代数据库的关键数据结构(上)","datePublished":"2023-12-27T21:38:17.000Z","dateModified":"2023-12-27T21:38:17.000Z","description":"在这个数据驱动的时代,数据库如同现代科技的心脏,承载着海量信息的运转与管理。但是,您是否曾好奇过,支撑这些数据库背后的结构是什么呢?让我们一起探索这些强大的数据结构,并理解它们如何塑造我们的数字世界。","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/index-compare"},"language":"zh"},{"title":"从URL到网页:揭开浏览器背后URL解析的神秘面纱","date":"2023-12-27T04:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.63,"time":217800,"words":726},"slug":"backend/cong-url-dao-wang-ye","path":"blog/backend/cong-url-dao-wang-ye","filePath":"blog/backend/cong-url-dao-wang-ye.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"从URL到网页:揭开浏览器背后URL解析的神秘面纱","datePublished":"2023-12-27T04:18:11.000Z","dateModified":"2023-12-27T04:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/cong-url-dao-wang-ye"},"language":"zh"},{"title":"保护数据完整性与机密性:探索PGP的四种典型应用场景","date":"2023-12-26T12:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.01,"time":240600,"words":802},"slug":"backend/bao-hu-shu-ju-wan-zh","path":"blog/backend/bao-hu-shu-ju-wan-zh","filePath":"blog/backend/bao-hu-shu-ju-wan-zh.mdx","toc":[{"value":"1. 加签(Signing)","url":"#1-加签signing","depth":3},{"value":"2. 验签(Verifying)","url":"#2-验签verifying","depth":3},{"value":"3. 加密并加签(Encrypting and Signing)","url":"#3-加密并加签encrypting-and-signing","depth":3},{"value":"4. 解密并验签(Decrypting and Verifying)","url":"#4-解密并验签decrypting-and-verifying","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"保护数据完整性与机密性:探索PGP的四种典型应用场景","datePublished":"2023-12-26T12:18:11.000Z","dateModified":"2023-12-26T12:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/bao-hu-shu-ju-wan-zh"},"language":"zh"},{"title":"Redis数据持久化的奥秘揭秘:你需要知道的一切","date":"2023-12-25T09:18:11.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.26,"time":195600,"words":652},"slug":"backend/redis-shu-ju-chi-jiu","path":"blog/backend/redis-shu-ju-chi-jiu","filePath":"blog/backend/redis-shu-ju-chi-jiu.mdx","toc":[{"value":"🔍 探秘数据持久化的双重保险","url":"#-探秘数据持久化的双重保险","depth":2},{"value":"1️⃣ AOF:时光机的日志","url":"#1️⃣-aof时光机的日志","depth":2},{"value":"2️⃣ RDB:时空快照","url":"#2️⃣-rdb时空快照","depth":2},{"value":"🚀 “瞬间转移,不干扰时空”","url":"#-瞬间转移不干扰时空","depth":2},{"value":"📖 故事里的 AOF 和 RDB","url":"#-故事里的-aof-和-rdb","depth":2},{"value":"🤹 混合使用:最佳组合","url":"#-混合使用最佳组合","depth":2},{"value":"🙋‍♂️ 你的选择是什么?","url":"#️-你的选择是什么","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Redis数据持久化的奥秘揭秘:你需要知道的一切","datePublished":"2023-12-25T09:18:11.000Z","dateModified":"2023-12-25T09:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/redis-shu-ju-chi-jiu"},"language":"zh"},{"title":"保障API接口安全:深入了解并选择合适的API身份验证方法","date":"2023-12-24T11:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.81,"time":228600,"words":762},"slug":"backend/bao-zhang-api-jie-ko","path":"blog/backend/bao-zhang-api-jie-ko","filePath":"blog/backend/bao-zhang-api-jie-ko.mdx","toc":[{"value":"🔑 基本认证(Basic Authentication)","url":"#-基本认证basic-authentication","depth":2},{"value":"🌟 令牌认证(Token Authentication)","url":"#-令牌认证token-authentication","depth":2},{"value":"🔗 OAuth认证","url":"#-oauth认证","depth":2},{"value":"🔑 API密钥认证(API Key Authentication)","url":"#-api密钥认证api-key-authentication","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"保障API接口安全:深入了解并选择合适的API身份验证方法","datePublished":"2023-12-24T11:48:04.000Z","dateModified":"2023-12-24T11:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/bao-zhang-api-jie-ko"},"language":"zh"},{"title":"安全护航:揭秘CSRF保护机制,从原理到实践","date":"2023-12-24T09:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.055,"time":363300,"words":1211},"slug":"backend/an-quan-hu-hang-jie","path":"blog/backend/an-quan-hu-hang-jie","filePath":"blog/backend/an-quan-hu-hang-jie.mdx","toc":[{"value":"CSRF攻击","url":"#csrf攻击","depth":2},{"value":"CSRF保护机制","url":"#csrf保护机制","depth":2},{"value":"CSRF保护实现示例","url":"#csrf保护实现示例","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"安全护航:揭秘CSRF保护机制,从原理到实践","datePublished":"2023-12-24T09:18:11.000Z","dateModified":"2023-12-24T09:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/an-quan-hu-hang-jie"},"language":"zh"},{"title":"重新定义 Kubernetes Java 开发:Nocalhost 和 JRebel 的完美结合","date":"2023-12-23T11:48:04.000Z","tags":["Java","Kubernetes"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.035,"time":182100,"words":607},"slug":"backend/chong-xin-ding-yi-ku","path":"blog/backend/chong-xin-ding-yi-ku","filePath":"blog/backend/chong-xin-ding-yi-ku.mdx","toc":[{"value":"💡 解决之道 —— Nocalhost 💡","url":"#-解决之道--nocalhost-","depth":2},{"value":"🌐 Nocalhost & JRebel 联手 —— 神奇的 Java 热加载 🌐","url":"#-nocalhost--jrebel-联手--神奇的-java-热加载-","depth":2},{"value":"🚀 一、Nocalhost:云原生应用开发的新伙伴 🚀","url":"#-一nocalhost云原生应用开发的新伙伴-","depth":2},{"value":"🛠️ 二、配置步骤:迈向效率的旅程 🛠️","url":"#️-二配置步骤迈向效率的旅程-️","depth":2},{"value":"🎉 三、小结:高效开发的新篇章 🎉","url":"#-三小结高效开发的新篇章-","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"重新定义 Kubernetes Java 开发:Nocalhost 和 JRebel 的完美结合","datePublished":"2023-12-23T11:48:04.000Z","dateModified":"2023-12-23T11:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/chong-xin-ding-yi-ku"},"language":"zh"},{"title":"Obsidian + Nextjs + Vercel:专家级知识管理与个人博客的完美融合","date":"2023-12-22T20:15:58.000Z","tags":["ChatGPT","Obsidian","Excalidraw","LLM"],"draft":false,"isPinned":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.36,"time":201600,"words":672},"slug":"ai/obsidiannextjsvercel","path":"blog/ai/obsidiannextjsvercel","filePath":"blog/ai/obsidiannextjsvercel.mdx","toc":[{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + Nextjs + Vercel:专家级知识管理与个人博客的完美融合","datePublished":"2023-12-22T20:15:58.000Z","dateModified":"2023-12-22T20:15:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/obsidiannextjsvercel"},"language":"zh"},{"title":"连接方程式:解密SQL Join的逻辑密语","date":"2023-12-22T03:18:11.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.965,"time":177900,"words":593},"slug":"backend/lian-jie-fang-cheng","path":"blog/backend/lian-jie-fang-cheng","filePath":"blog/backend/lian-jie-fang-cheng.mdx","toc":[{"value":"INNER JOIN(内连接)","url":"#inner-join内连接","depth":2},{"value":"LEFT JOIN(左连接)","url":"#left-join左连接","depth":2},{"value":"RIGHT JOIN(右连接)","url":"#right-join右连接","depth":2},{"value":"FULL JOIN(全连接)","url":"#full-join全连接","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"连接方程式:解密SQL Join的逻辑密语","datePublished":"2023-12-22T03:18:11.000Z","dateModified":"2023-12-22T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/lian-jie-fang-cheng"},"language":"zh"},{"title":"Obsidian + ChatGPT + Excalidraw:打造高效学习与知识沉淀系统","date":"2023-12-21T20:15:58.000Z","tags":["ChatGPT","Obsidian","Excalidraw","LLM"],"draft":false,"isPinned":false,"images":["/static/images/paste/e1ce14055b5e73b1ecf7e346e843bd7168d5afec523c36cc4b6ee3b7c0d58ebb.png"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.48,"time":268800,"words":896},"slug":"ai/obsidian","path":"blog/ai/obsidian","filePath":"blog/ai/obsidian.mdx","toc":[{"value":"Obsidian:构建你的知识库","url":"#obsidian构建你的知识库","depth":2},{"value":"ChatGPT:你的智能学习助手","url":"#chatgpt你的智能学习助手","depth":2},{"value":"Excalidraw:让知识更直观","url":"#excalidraw让知识更直观","depth":2},{"value":"整合应用:创造协同效应","url":"#整合应用创造协同效应","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Obsidian + ChatGPT + Excalidraw:打造高效学习与知识沉淀系统","datePublished":"2023-12-21T20:15:58.000Z","dateModified":"2023-12-21T20:15:58.000Z","image":"/static/images/paste/e1ce14055b5e73b1ecf7e346e843bd7168d5afec523c36cc4b6ee3b7c0d58ebb.png","url":"https://www.ifb.me/blog/ai/obsidian"},"language":"zh"},{"title":"用 Java 实现邮件实时接收:完整指南与最佳实践","date":"2023-12-21T13:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.195,"time":251700,"words":839},"slug":"backend/tong-guo-java-shi-sh","path":"blog/backend/tong-guo-java-shi-sh","filePath":"blog/backend/tong-guo-java-shi-sh.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"用 Java 实现邮件实时接收:完整指南与最佳实践","datePublished":"2023-12-21T13:18:11.000Z","dateModified":"2023-12-21T13:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/tong-guo-java-shi-sh"},"language":"zh"},{"title":"Web存储之争:Cookie与Session的魔法对决","date":"2023-12-21T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.97,"time":178200,"words":594},"slug":"backend/web-cun-chu-zhi-zhen","path":"blog/backend/web-cun-chu-zhi-zhen","filePath":"blog/backend/web-cun-chu-zhi-zhen.mdx","toc":[{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Web存储之争:Cookie与Session的魔法对决","datePublished":"2023-12-21T03:18:11.000Z","dateModified":"2023-12-21T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/web-cun-chu-zhi-zhen"},"language":"zh"},{"title":"多模态语言模型:探索 Gemini Pro 和 Streamlit 的神奇组合","date":"2023-12-20T11:48:04.000Z","tags":["LLM"],"draft":false,"type":"Blog","readingTime":{"text":"12 min read","minutes":11.285,"time":677100,"words":2257},"slug":"ai/duo-mo-tai-yu-yan-mo","path":"blog/ai/duo-mo-tai-yu-yan-mo","filePath":"blog/ai/duo-mo-tai-yu-yan-mo.mdx","toc":[{"value":"Gemini API","url":"#gemini-api","depth":2},{"value":"使用 Streamlit 构建 LLM 应用","url":"#使用-streamlit-构建-llm-应用","depth":1},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"多模态语言模型:探索 Gemini Pro 和 Streamlit 的神奇组合","datePublished":"2023-12-20T11:48:04.000Z","dateModified":"2023-12-20T11:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/duo-mo-tai-yu-yan-mo"},"language":"zh"},{"title":"探秘数据库的核心:ACID原则解析","date":"2023-12-20T11:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.37,"time":142200,"words":474},"slug":"backend/tan-mi-shu-ju-ku-de","path":"blog/backend/tan-mi-shu-ju-ku-de","filePath":"blog/backend/tan-mi-shu-ju-ku-de.mdx","toc":[{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"探秘数据库的核心:ACID原则解析","datePublished":"2023-12-20T11:48:04.000Z","dateModified":"2023-12-20T11:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/tan-mi-shu-ju-ku-de"},"language":"zh"},{"title":"控制数据一致性:探索五种缓存策略","date":"2023-12-20T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.92,"time":235200,"words":784},"slug":"backend/kong-zhi-shu-ju-yi-z","path":"blog/backend/kong-zhi-shu-ju-yi-z","filePath":"blog/backend/kong-zhi-shu-ju-yi-z.mdx","toc":[{"value":"🔹 读取策略","url":"#-读取策略","depth":2},{"value":"旁路缓存(Cache Aside)","url":"#旁路缓存cache-aside","depth":3},{"value":"透读缓存(Read Through)","url":"#透读缓存read-through","depth":3},{"value":"🔹 写入策略","url":"#-写入策略","depth":2},{"value":"绕写缓存(Write Around)","url":"#绕写缓存write-around","depth":3},{"value":"写回缓存(Write Back)","url":"#写回缓存write-back","depth":3},{"value":"透写缓存(Write Through)","url":"#透写缓存write-through","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"控制数据一致性:探索五种缓存策略","datePublished":"2023-12-20T01:48:04.000Z","dateModified":"2023-12-20T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/kong-zhi-shu-ju-yi-z"},"language":"zh"},{"title":"解密ShardingSphere:提升数据库性能的必备利器","date":"2023-12-15T01:20:04.000Z","tags":["Database"],"type":"Blog","readingTime":{"text":"9 min read","minutes":8.675,"time":520500,"words":1735},"slug":"backend/sharding-jdbc","path":"blog/backend/sharding-jdbc","filePath":"blog/backend/sharding-jdbc.mdx","toc":[{"value":"1. 概览","url":"#1-概览","depth":2},{"value":"2. 什么是 ShardingSphere?","url":"#2-什么是-shardingsphere","depth":2},{"value":"3. 使用案例","url":"#3-使用案例","depth":2},{"value":"3.1. 分片","url":"#31-分片","depth":3},{"value":"3.2. 分布式事务","url":"#32-分布式事务","depth":3},{"value":"3.3. 读写分离","url":"#33-读写分离","depth":3},{"value":"3.4. 数据库网关","url":"#34-数据库网关","depth":3},{"value":"3.5. 流量治理","url":"#35-流量治理","depth":3},{"value":"3.6. 数据迁移","url":"#36-数据迁移","depth":3},{"value":"3.7. 加密","url":"#37-加密","depth":3},{"value":"3.8. 数据脱敏","url":"#38-数据脱敏","depth":3},{"value":"3.9. 影子测试","url":"#39-影子测试","depth":3},{"value":"3.10. 可观测性","url":"#310-可观测性","depth":3},{"value":"4. 入门","url":"#4-入门","depth":2},{"value":"4.1. 依赖","url":"#41-依赖","depth":3},{"value":"4.2. 数据源配置","url":"#42-数据源配置","depth":3},{"value":"5. 连接点","url":"#5-连接点","depth":2},{"value":"6. 结论","url":"#6-结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"解密ShardingSphere:提升数据库性能的必备利器","datePublished":"2023-12-15T01:20:04.000Z","dateModified":"2023-12-15T01:20:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/sharding-jdbc"},"language":"zh"},{"title":"比尔盖茨:人工智能即将全面改变我们使用电脑的方式 [译]","date":"2023-12-14T14:08:27.000Z","tags":["ChatGPT","LLM"],"draft":false,"type":"Blog","readingTime":{"text":"25 min read","minutes":24.59,"time":1475400,"words":4918},"slug":"ai/bill-gates","path":"blog/ai/bill-gates","filePath":"blog/ai/bill-gates.mdx","toc":[{"value":"每个人都能拥有的个人助理","url":"#每个人都能拥有的个人助理","depth":2},{"value":"医疗保健","url":"#医疗保健","depth":2},{"value":"教育","url":"#教育","depth":1},{"value":"提升效率","url":"#提升效率","depth":2},{"value":"娱乐和购物新体验","url":"#娱乐和购物新体验","depth":2},{"value":"技术行业的剧变","url":"#技术行业的剧变","depth":2},{"value":"技术挑战","url":"#技术挑战","depth":2},{"value":"隐私与其他迫切问题","url":"#隐私与其他迫切问题","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"比尔盖茨:人工智能即将全面改变我们使用电脑的方式 [译]","datePublished":"2023-12-14T14:08:27.000Z","dateModified":"2023-12-14T14:08:27.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/bill-gates"},"language":"zh"},{"title":"容器编排大战:Docker Compose vs Kubernetes,哪个更适合你的应用?","date":"2023-12-13T21:38:17.000Z","tags":["Kubernetes"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.085,"time":185100,"words":617},"slug":"backend/docker-compose-vs-k8s","path":"blog/backend/docker-compose-vs-k8s","filePath":"blog/backend/docker-compose-vs-k8s.mdx","toc":[{"value":"Docker-compose","url":"#docker-compose","depth":3},{"value":"Kubernetes","url":"#kubernetes","depth":3},{"value":"总结对比","url":"#总结对比","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"容器编排大战:Docker Compose vs Kubernetes,哪个更适合你的应用?","datePublished":"2023-12-13T21:38:17.000Z","dateModified":"2023-12-13T21:38:17.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/docker-compose-vs-k8s"},"language":"zh"},{"title":"开源数据库对决:Postgres vs MySQL,哪个更适合你的项目?","date":"2023-12-13T10:24:52.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"14 min read","minutes":13.94,"time":836400,"words":2788},"slug":"backend/postgres-vs-mysql","path":"blog/backend/postgres-vs-mysql","filePath":"blog/backend/postgres-vs-mysql.mdx","toc":[{"value":"基础知识","url":"#基础知识","depth":2},{"value":"MySQL","url":"#mysql","depth":2},{"value":"PostgreSQL","url":"#postgresql","depth":2},{"value":"查询比较","url":"#查询比较","depth":2},{"value":"数据类型比较","url":"#数据类型比较","depth":2},{"value":"Undo logs","url":"#undo-logs","depth":2},{"value":"进程与线程的对比","url":"#进程与线程的对比","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"开源数据库对决:Postgres vs MySQL,哪个更适合你的项目?","datePublished":"2023-12-13T10:24:52.000Z","dateModified":"2023-12-13T10:24:52.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/postgres-vs-mysql"},"language":"zh"},{"title":"Unleashing the Dragon: Can Dragonfly Really Outpace Redis by 25x?","date":"2023-12-13T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.07,"time":184200,"words":614},"slug":"en/backend/dragonfly","path":"blog/en/backend/dragonfly","filePath":"blog/en/backend/dragonfly.mdx","toc":[{"value":"Performance Comparison","url":"#performance-comparison","depth":2},{"value":"Redis","url":"#redis","depth":3},{"value":"KeyDB","url":"#keydb","depth":3},{"value":"Dragonfly","url":"#dragonfly","depth":3},{"value":"Skytable","url":"#skytable","depth":3},{"value":"Conclusion","url":"#conclusion","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Unleashing the Dragon: Can Dragonfly Really Outpace Redis by 25x?","datePublished":"2023-12-13T01:48:04.000Z","dateModified":"2023-12-13T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/dragonfly"},"language":"en"},{"title":"云原生时代的Java:拥抱创新与扩展","date":"2023-12-10T13:18:11.000Z","tags":["Java","Kubernetes"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.145,"time":188700,"words":629},"slug":"backend/java-future-in-native-cloud","path":"blog/backend/java-future-in-native-cloud","filePath":"blog/backend/java-future-in-native-cloud.mdx","toc":[{"value":"Java与微服务架构的融合","url":"#java与微服务架构的融合","depth":2},{"value":"容器化技术的适应","url":"#容器化技术的适应","depth":2},{"value":"无服务器计算的发展","url":"#无服务器计算的发展","depth":2},{"value":"性能优化","url":"#性能优化","depth":2},{"value":"安全性的加强","url":"#安全性的加强","depth":2},{"value":"与云原生工具的集成","url":"#与云原生工具的集成","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"云原生时代的Java:拥抱创新与扩展","datePublished":"2023-12-10T13:18:11.000Z","dateModified":"2023-12-10T13:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/java-future-in-native-cloud"},"language":"zh"},{"title":"破解锁机制:深入理解乐观锁与悲观锁的利弊","date":"2023-12-10T11:48:04.000Z","tags":["Database"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.56,"time":273600,"words":912},"slug":"backend/lock","path":"blog/backend/lock","filePath":"blog/backend/lock.mdx","toc":[{"value":"乐观锁","url":"#乐观锁","depth":2},{"value":"悲观锁","url":"#悲观锁","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"破解锁机制:深入理解乐观锁与悲观锁的利弊","datePublished":"2023-12-10T11:48:04.000Z","dateModified":"2023-12-10T11:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/lock"},"language":"zh"},{"title":"职场必备技能:利用 ChatGPT 像专业人士一样回复工作中的电子邮件","date":"2023-12-09T13:58:08.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"14 min read","minutes":13.86,"time":831600,"words":2772},"slug":"ai/how-to-use-chatgpt-to-reply-to-emails-in-your-9-5-job-like-a-pro","path":"blog/ai/how-to-use-chatgpt-to-reply-to-emails-in-your-9-5-job-like-a-pro","filePath":"blog/ai/how-to-use-chatgpt-to-reply-to-emails-in-your-9-5-job-like-a-pro.mdx","toc":[{"value":"1. 从 ChatGPT 的电子邮件回复能力开始","url":"#1-从-chatgpt-的电子邮件回复能力开始","depth":2},{"value":"将你的电子邮件或电子邮件线索提供给 ChatGPT","url":"#将你的电子邮件或电子邮件线索提供给-chatgpt","depth":3},{"value":"自定义 ChatGPT 的首个电子邮件草稿","url":"#自定义-chatgpt-的首个电子邮件草稿","depth":3},{"value":"微调电子邮件的语气和长度","url":"#微调电子邮件的语气和长度","depth":3},{"value":"2. 通过创建模板更高效地回复电子邮件","url":"#2-通过创建模板更高效地回复电子邮件","depth":2},{"value":"创建可重用的电子邮件模板回复","url":"#创建可重用的电子邮件模板回复","depth":3},{"value":"为你的电子邮件创建自动回复","url":"#为你的电子邮件创建自动回复","depth":3},{"value":"识别你电子邮件中的常用短语","url":"#识别你电子邮件中的常用短语","depth":3},{"value":"提供行业特定的模板","url":"#提供行业特定的模板","depth":3},{"value":"3. ChatGPT 可以从你的电子邮件中制作待办事项清单","url":"#3-chatgpt-可以从你的电子邮件中制作待办事项清单","depth":2},{"value":"4. ChatGPT 可以从你的电子邮件中记笔记","url":"#4-chatgpt-可以从你的电子邮件中记笔记","depth":2},{"value":"5. 回应困难的电子邮件","url":"#5-回应困难的电子邮件","depth":2},{"value":"6. BONUS: 为 ChatGPT 设置专门的线程来回复你的电子邮件","url":"#6-bonus-为-chatgpt-设置专门的线程来回复你的电子邮件","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"职场必备技能:利用 ChatGPT 像专业人士一样回复工作中的电子邮件","datePublished":"2023-12-09T13:58:08.000Z","dateModified":"2023-12-09T13:58:08.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/how-to-use-chatgpt-to-reply-to-emails-in-your-9-5-job-like-a-pro"},"language":"zh"},{"title":"打开国际支付新大门:国内持有香港银行卡注册Stripe的方法-更新于202411","date":"2023-12-09T13:48:04.000Z","tags":[],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.455,"time":207300,"words":691},"slug":"short/stripe","path":"blog/short/stripe","filePath":"blog/short/stripe.mdx","toc":[{"value":"注册Stripe步骤","url":"#注册stripe步骤","depth":2},{"value":"总结","url":"#总结","depth":2},{"value":"FAQ","url":"#faq","depth":2},{"value":"如果 Stripe 显示 Payout paused 怎么处理?","url":"#如果-stripe-显示-payout-paused-怎么处理","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"打开国际支付新大门:国内持有香港银行卡注册Stripe的方法-更新于202411","datePublished":"2023-12-09T13:48:04.000Z","dateModified":"2023-12-09T13:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/short/stripe"},"language":"zh"},{"title":"Ensuring Data Consistency in High-Traffic Apps: Strategies for Cache and Database Synchronization","date":"2023-12-09T13:48:04.000Z","tags":["Database"],"type":"Blog","readingTime":{"text":"3 min read","minutes":2.38,"time":142800,"words":476},"slug":"en/backend/cache","path":"blog/en/backend/cache","filePath":"blog/en/backend/cache.mdx","toc":[{"value":"Understanding When to Use Caching","url":"#understanding-when-to-use-caching","depth":3},{"value":"The Standard Call Pattern Between Cache and Database","url":"#the-standard-call-pattern-between-cache-and-database","depth":3},{"value":"Approaches to Synchronization","url":"#approaches-to-synchronization","depth":3},{"value":"Handling Concurrency and Performance","url":"#handling-concurrency-and-performance","depth":3},{"value":"Special Considerations for Read-Write Separation Architectures","url":"#special-considerations-for-read-write-separation-architectures","depth":3},{"value":"Addressing Edge Cases and Failures","url":"#addressing-edge-cases-and-failures","depth":3},{"value":"The Bigger Picture: Cache Penetration, Breakdown, and Avalanche","url":"#the-bigger-picture-cache-penetration-breakdown-and-avalanche","depth":3},{"value":"Conclusion","url":"#conclusion","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Ensuring Data Consistency in High-Traffic Apps: Strategies for Cache and Database Synchronization","datePublished":"2023-12-09T13:48:04.000Z","dateModified":"2023-12-09T13:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/cache"},"language":"en"},{"title":"车迷利用 ChatGPT 赚取额外收入的十种方式","date":"2023-12-08T13:53:12.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.975,"time":298500,"words":995},"slug":"ai/10-ways-car-lovers-can-make-side-income-using-chatgpt","path":"blog/ai/10-ways-car-lovers-can-make-side-income-using-chatgpt","filePath":"blog/ai/10-ways-car-lovers-can-make-side-income-using-chatgpt.mdx","toc":[{"value":"1. 汽车历史和规格博客","url":"#1-汽车历史和规格博客","depth":2},{"value":"2. DIY 汽车维修教程","url":"#2-diy-汽车维修教程","depth":2},{"value":"3. 定制汽车商品","url":"#3-定制汽车商品","depth":2},{"value":"4. 汽车科技评论","url":"#4-汽车科技评论","depth":2},{"value":"5. 汽车投资指导","url":"#5-汽车投资指导","depth":2},{"value":"6. 汽车主题旅行规划","url":"#6-汽车主题旅行规划","depth":2},{"value":"7. 汽车改装和个性化咨询","url":"#7-汽车改装和个性化咨询","depth":2},{"value":"8. 虚拟汽车聚会","url":"#8-虚拟汽车聚会","depth":2},{"value":"9. 汽车艺术创作","url":"#9-汽车艺术创作","depth":2},{"value":"10. AI 辅助汽车设计概念","url":"#10-ai-辅助汽车设计概念","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"车迷利用 ChatGPT 赚取额外收入的十种方式","datePublished":"2023-12-08T13:53:12.000Z","dateModified":"2023-12-08T13:53:12.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/10-ways-car-lovers-can-make-side-income-using-chatgpt"},"language":"zh"},{"title":"谷歌推出新一代大模型 Gemini","date":"2023-12-07T14:08:27.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.31,"time":138600,"words":462},"slug":"ai/gemini","path":"blog/ai/gemini","filePath":"blog/ai/gemini.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"谷歌推出新一代大模型 Gemini","datePublished":"2023-12-07T14:08:27.000Z","dateModified":"2023-12-07T14:08:27.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/gemini"},"language":"zh"},{"title":"深入剖析JVM中的堆与堆空间:掌握Java内存管理的核心要点","date":"2023-12-07T09:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.41,"time":444600,"words":1482},"slug":"backend/jvm-space","path":"blog/backend/jvm-space","filePath":"blog/backend/jvm-space.mdx","toc":[{"value":"1. 栈空间","url":"#1-栈空间","depth":2},{"value":"1.1 栈空间的主要特性","url":"#11-栈空间的主要特性","depth":3},{"value":"2. 堆空间","url":"#2-堆空间","depth":2},{"value":"2.1 堆空间的主要特性","url":"#21-堆空间的主要特性","depth":3},{"value":"3. 内存分配示例","url":"#3-内存分配示例","depth":2},{"value":"4. 小结","url":"#4-小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入剖析JVM中的堆与堆空间:掌握Java内存管理的核心要点","datePublished":"2023-12-07T09:18:11.000Z","dateModified":"2023-12-07T09:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/jvm-space"},"language":"zh"},{"title":"Supercharge Your Data Processing: Why ClickHouse is a Game-Changer?","date":"2023-12-07T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.64,"time":458400,"words":1528},"slug":"en/backend/clickhouse","path":"blog/en/backend/clickhouse","filePath":"blog/en/backend/clickhouse.mdx","toc":[{"value":"一、What is Clickhouse?","url":"#一what-is-clickhouse","depth":2},{"value":"1.1 What is columnar storage?","url":"#11-what-is-columnar-storage","depth":3},{"value":"二、Why Clickhouse has changed the game","url":"#二why-clickhouse-has-changed-the-game","depth":2},{"value":"三、Scenarios Not Suitable for Clickhouse","url":"#三scenarios-not-suitable-for-clickhouse","depth":2},{"value":"四、Why Doesn't MySQL Use Columnar Storage?","url":"#四why-doesnt-mysql-use-columnar-storage","depth":2},{"value":"五、Advantages of Clickhouse","url":"#五advantages-of-clickhouse","depth":2},{"value":"5.1 Active Open Source Community","url":"#51-active-open-source-community","depth":3},{"value":"5.2 Lightning Fast Query Speed","url":"#52-lightning-fast-query-speed","depth":3},{"value":"5.3 Small Indexes (Sparse Indexes)","url":"#53-small-indexes-sparse-indexes","depth":3},{"value":"5.4 Data Compression","url":"#54-data-compression","depth":3},{"value":"5.5 Data TTL","url":"#55-data-ttl","depth":3},{"value":"5.6 Supports Multiple Languages","url":"#56-supports-multiple-languages","depth":3},{"value":"5.7 Horizontal Scalability and High Availability","url":"#57-horizontal-scalability-and-high-availability","depth":3},{"value":"六、Conclusion","url":"#六conclusion","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Supercharge Your Data Processing: Why ClickHouse is a Game-Changer?","datePublished":"2023-12-07T01:48:04.000Z","dateModified":"2023-12-07T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/clickhouse"},"language":"en"},{"title":"PostgreSQL连接的奥秘:探索连接过程和常用连接池技术","date":"2023-12-06T21:38:17.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.36,"time":321600,"words":1072},"slug":"backend/postgresql","path":"blog/backend/postgresql","filePath":"blog/backend/postgresql.mdx","toc":[{"value":"1 为什么要使用连接池","url":"#1-为什么要使用连接池","depth":2},{"value":"2 常见的连接池","url":"#2-常见的连接池","depth":2},{"value":"3 小结","url":"#3-小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"PostgreSQL连接的奥秘:探索连接过程和常用连接池技术","datePublished":"2023-12-06T21:38:17.000Z","dateModified":"2023-12-06T21:38:17.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/postgresql"},"language":"zh"},{"title":"解析 Java 应用的 CPU 飙高问题:诊断流程和修复方法","date":"2023-12-06T09:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.18,"time":430800,"words":1436},"slug":"backend/java-cpu-high","path":"blog/backend/java-cpu-high","filePath":"blog/backend/java-cpu-high.mdx","toc":[{"value":"一、问题定位","url":"#一问题定位","depth":2},{"value":"二、问题修复","url":"#二问题修复","depth":2},{"value":"小结","url":"#小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"解析 Java 应用的 CPU 飙高问题:诊断流程和修复方法","datePublished":"2023-12-06T09:18:11.000Z","dateModified":"2023-12-06T09:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/java-cpu-high"},"language":"zh"},{"title":"关于JVM日志伪造:你需要知道的一切","date":"2023-12-05T09:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.77,"time":226200,"words":754},"slug":"backend/jvm-log-forging","path":"blog/backend/jvm-log-forging","filePath":"blog/backend/jvm-log-forging.mdx","toc":[{"value":"JVM 日志伪造概述","url":"#jvm-日志伪造概述","depth":2},{"value":"使用 ESAPI 防范日志伪造示例","url":"#使用-esapi-防范日志伪造示例","depth":2},{"value":"小结","url":"#小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"关于JVM日志伪造:你需要知道的一切","datePublished":"2023-12-05T09:18:11.000Z","dateModified":"2023-12-05T09:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/jvm-log-forging"},"language":"zh"},{"title":"从零开始:Spring JPA使用详解","date":"2023-12-04T09:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.8,"time":348000,"words":1160},"slug":"backend/jpa-with-spring","path":"blog/backend/jpa-with-spring","filePath":"blog/backend/jpa-with-spring.mdx","toc":[{"value":"什么是 Spring JPA","url":"#什么是-spring-jpa","depth":2},{"value":"Spring JPA 的优势","url":"#spring-jpa-的优势","depth":2},{"value":"Spring JPA 的基本用法","url":"#spring-jpa-的基本用法","depth":2},{"value":"Spring JPA 的高级特性","url":"#spring-jpa-的高级特性","depth":2},{"value":"Spring JPA 使用示例","url":"#spring-jpa-使用示例","depth":2},{"value":"Spring JPA 的注意事项","url":"#spring-jpa-的注意事项","depth":2},{"value":"小结","url":"#小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"从零开始:Spring JPA使用详解","datePublished":"2023-12-04T09:18:11.000Z","dateModified":"2023-12-04T09:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/jpa-with-spring"},"language":"zh"},{"title":"AI革命:利用 ChatGPT 让您在社交媒体脱颖而出(下)","date":"2023-12-02T13:54:39.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"26 min read","minutes":25.65,"time":1539000,"words":5130},"slug":"ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-3","path":"blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-3","filePath":"blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-3.mdx","toc":[{"value":"36. 为抖音挑战提出想法","url":"#36-为抖音挑战提出想法","depth":2},{"value":"37. 编写有吸引力的视频字幕","url":"#37-编写有吸引力的视频字幕","depth":2},{"value":"38. 撰写对视频评论的回复","url":"#38-撰写对视频评论的回复","depth":2},{"value":"39. 为抖音视频开发脚本","url":"#39-为抖音视频开发脚本","depth":2},{"value":"40.为抖音挑战创建主题标签","url":"#40为抖音挑战创建主题标签","depth":2},{"value":"41. 编写有吸引力的状态更新","url":"#41-编写有吸引力的状态更新","depth":2},{"value":"42. 为知乎文章开发内容","url":"#42-为知乎文章开发内容","depth":2},{"value":"43. 为知乎广告撰写文案","url":"#43-为知乎广告撰写文案","depth":2},{"value":"44. 为知乎民意调查生成想法","url":"#44-为知乎民意调查生成想法","depth":2},{"value":"45. 对您帖子的评论进行回复","url":"#45-对您帖子的评论进行回复","depth":2},{"value":"46. 为知乎起草职业总结或职位描述","url":"#46-为知乎起草职业总结或职位描述","depth":2},{"value":"47. 为知乎问答环节编写有吸引力的问题","url":"#47-为知乎问答环节编写有吸引力的问题","depth":2},{"value":"48. 为知乎公司页面制定内容策略","url":"#48-为知乎公司页面制定内容策略","depth":2},{"value":"49. 使用 ChatGPT 确定调查的利基受众,并为这些群体生成相关问题或内容","url":"#49-使用-chatgpt-确定调查的利基受众并为这些群体生成相关问题或内容","depth":2},{"value":"50. 利用 ChatGPT 监控在线对话并分析情绪,使您能够做出适当的回应并与受众建立牢固的联系","url":"#50-利用-chatgpt-监控在线对话并分析情绪使您能够做出适当的回应并与受众建立牢固的联系","depth":2},{"value":"使用 ChatGPT 进行社交媒体的常见问题解答","url":"#使用-chatgpt-进行社交媒体的常见问题解答","depth":2},{"value":"ChatGPT 可以帮助我获得社交媒体的内容创意吗?","url":"#chatgpt-可以帮助我获得社交媒体的内容创意吗","depth":3},{"value":"我如何使用 ChatGPT 来提高我的社交媒体参与度?","url":"#我如何使用-chatgpt-来提高我的社交媒体参与度","depth":3},{"value":"ChatGPT 可以协助制定社交媒体营销计划吗?","url":"#chatgpt-可以协助制定社交媒体营销计划吗","depth":3},{"value":"如何利用 ChatGPT 进行有效的社交媒体品牌推广?","url":"#如何利用-chatgpt-进行有效的社交媒体品牌推广","depth":3},{"value":"我正在推出一个产品。 ChatGPT 如何帮助社交媒体推广?","url":"#我正在推出一个产品-chatgpt-如何帮助社交媒体推广","depth":3},{"value":"ChatGPT 能否提供有关社交媒体分析和增长的见解?","url":"#chatgpt-能否提供有关社交媒体分析和增长的见解","depth":3},{"value":"如何使用 ChatGPT 处理社交媒体上的负面评论或反馈?","url":"#如何使用-chatgpt-处理社交媒体上的负面评论或反馈","depth":3},{"value":"ChatGPT 可以推荐用于社交媒体管理的工具或应用程序吗?","url":"#chatgpt-可以推荐用于社交媒体管理的工具或应用程序吗","depth":3},{"value":"我如何使用 ChatGPT 了解社交媒体趋势的最新动态?","url":"#我如何使用-chatgpt-了解社交媒体趋势的最新动态","depth":3},{"value":"ChatGPT 可以协助社交媒体危机管理吗?","url":"#chatgpt-可以协助社交媒体危机管理吗","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"AI革命:利用 ChatGPT 让您在社交媒体脱颖而出(下)","datePublished":"2023-12-02T13:54:39.000Z","dateModified":"2023-12-02T13:54:39.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-3"},"language":"zh"},{"title":"AI革命:利用 ChatGPT 让您在社交媒体脱颖而出(中)","date":"2023-12-01T13:54:39.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"28 min read","minutes":27.035,"time":1622100,"words":5407},"slug":"ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-2","path":"blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-2","filePath":"blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-2.mdx","toc":[{"value":"16. 撰写有吸引力的状态更新","url":"#16-撰写有吸引力的状态更新","depth":2},{"value":"17. 为朋友圈活动开发内容","url":"#17-为朋友圈活动开发内容","depth":2},{"value":"18. 为朋友圈广告撰写文案","url":"#18-为朋友圈广告撰写文案","depth":2},{"value":"19. 创建有吸引力的民意调查或测验","url":"#19-创建有吸引力的民意调查或测验","depth":2},{"value":"20. 在朋友圈页面上写评论回复","url":"#20-在朋友圈页面上写评论回复","depth":2},{"value":"21. 制作有吸引力的微博和话题","url":"#21-制作有吸引力的微博和话题","depth":2},{"value":"22. 写下对其他微博或私信的回复","url":"#22-写下对其他微博或私信的回复","depth":2},{"value":"23. 为微博聊天提出想法","url":"#23-为微博聊天提出想法","depth":2},{"value":"24. 为微博广告撰写文案","url":"#24-为微博广告撰写文案","depth":2},{"value":"25. 为微博民意调查提出想法","url":"#25-为微博民意调查提出想法","depth":2},{"value":"26. 为引脚创建有吸引力的描述","url":"#26-为引脚创建有吸引力的描述","depth":2},{"value":"27. 为小红书广告撰写文案","url":"#27-为小红书广告撰写文案","depth":2},{"value":"28.开发板描述和名称","url":"#28开发板描述和名称","depth":2},{"value":"29. 为新的引脚或板产生想法","url":"#29-为新的引脚或板产生想法","depth":2},{"value":"30. 在你的小红书上写下评论的回复","url":"#30-在你的小红书上写下评论的回复","depth":2},{"value":"31. 制作有吸引力的照片标题","url":"#31-制作有吸引力的照片标题","depth":2},{"value":"32. 写出有吸引力的故事标题","url":"#32-写出有吸引力的故事标题","depth":2},{"value":"33. 为抖音广告撰写文案","url":"#33-为抖音广告撰写文案","depth":2},{"value":"34.为抖音问答环节创建有吸引力的问题","url":"#34为抖音问答环节创建有吸引力的问题","depth":2},{"value":"35. 为抖音内容产生创意","url":"#35-为抖音内容产生创意","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"AI革命:利用 ChatGPT 让您在社交媒体脱颖而出(中)","datePublished":"2023-12-01T13:54:39.000Z","dateModified":"2023-12-01T13:54:39.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-2"},"language":"zh"},{"title":"科技爱好者的福音:利用 ChatGPT 创收的十种方式","date":"2023-11-30T14:08:27.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.135,"time":308100,"words":1027},"slug":"ai/10-ways-tech-geeks-can-make-side-money-using-chatgpt","path":"blog/ai/10-ways-tech-geeks-can-make-side-money-using-chatgpt","filePath":"blog/ai/10-ways-tech-geeks-can-make-side-money-using-chatgpt.mdx","toc":[{"value":"1. 网站自定义聊天机器人","url":"#1-网站自定义聊天机器人","depth":2},{"value":"2. 人工智能辅导","url":"#2-人工智能辅导","depth":2},{"value":"3. 技术博客","url":"#3-技术博客","depth":2},{"value":"4. 技术产品评论","url":"#4-技术产品评论","depth":2},{"value":"5. 小工具故障排除","url":"#5-小工具故障排除","depth":2},{"value":"6. AI 支持的应用程序开发","url":"#6-ai-支持的应用程序开发","depth":2},{"value":"7. DIY 技术套件","url":"#7-diy-技术套件","depth":2},{"value":"8. AI 辅助游戏策略","url":"#8-ai-辅助游戏策略","depth":2},{"value":"9. 远程技术研讨会","url":"#9-远程技术研讨会","depth":2},{"value":"10. 技术预测","url":"#10-技术预测","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"科技爱好者的福音:利用 ChatGPT 创收的十种方式","datePublished":"2023-11-30T14:08:27.000Z","dateModified":"2023-11-30T14:08:27.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/10-ways-tech-geeks-can-make-side-money-using-chatgpt"},"language":"zh"},{"title":"AI革命:利用 ChatGPT 让您在社交媒体脱颖而出(上)","date":"2023-11-30T13:54:39.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"21 min read","minutes":20.16,"time":1209600,"words":4032},"slug":"ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-1","path":"blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-1","filePath":"blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-1.mdx","toc":[{"value":"1. 制作引人入胜的帖子标题以吸引人们对您的内容的关注","url":"#1-制作引人入胜的帖子标题以吸引人们对您的内容的关注","depth":2},{"value":"2. 为您的活动开发吸引人的主题标签","url":"#2-为您的活动开发吸引人的主题标签","depth":2},{"value":"3. 生成对评论和消息的回复","url":"#3-生成对评论和消息的回复","depth":2},{"value":"4. 预测什么类型的内容可能会引起受众的共鸣","url":"#4-预测什么类型的内容可能会引起受众的共鸣","depth":2},{"value":"5. 制作包含帖子创意的内容日历","url":"#5-制作包含帖子创意的内容日历","depth":2},{"value":"6. 为广告活动撰写有说服力的文案","url":"#6-为广告活动撰写有说服力的文案","depth":2},{"value":"7. 创建博客文章内容以在社交媒体上分享","url":"#7-创建博客文章内容以在社交媒体上分享","depth":2},{"value":"8. 制定引人入胜的问题来刺激观众互动","url":"#8-制定引人入胜的问题来刺激观众互动","depth":2},{"value":"9. 起草新闻稿或新闻更新以在社交媒体上分享","url":"#9-起草新闻稿或新闻更新以在社交媒体上分享","depth":2},{"value":"10. 为用户生成的内容活动提出想法","url":"#10-为用户生成的内容活动提出想法","depth":2},{"value":"11. 开发引人注目的视频标题和描述","url":"#11-开发引人注目的视频标题和描述","depth":2},{"value":"12. 视频博客或其他视频内容的草稿脚本","url":"#12-视频博客或其他视频内容的草稿脚本","depth":2},{"value":"13. 写对观众评论的回复","url":"#13-写对观众评论的回复","depth":2},{"value":"14. 为新视频内容产生创意","url":"#14-为新视频内容产生创意","depth":2},{"value":"15.创建SEO优化关键词","url":"#15创建seo优化关键词","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"AI革命:利用 ChatGPT 让您在社交媒体脱颖而出(上)","datePublished":"2023-11-30T13:54:39.000Z","dateModified":"2023-11-30T13:54:39.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/50-ways-to-use-chatgpt-for-social-media-(with-prompts)-1"},"language":"zh"},{"title":"开发者的福音:通过Excalidraw的AI功能进行绘图以及将图转换成代码","date":"2023-11-30T13:48:04.000Z","tags":["Excalidraw"],"draft":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.23,"time":373800,"words":1246},"slug":"backend/excalidraw","path":"blog/backend/excalidraw","filePath":"blog/backend/excalidraw.mdx","toc":[{"value":"一、Excalidraw介绍","url":"#一excalidraw介绍","depth":2},{"value":"二、使用场景","url":"#二使用场景","depth":2},{"value":"2.1 通过 Excalidraw 的 AI 功能自动生成流程图","url":"#21-通过-excalidraw-的-ai-功能自动生成流程图","depth":3},{"value":"2.2 通过截图生成前端代码","url":"#22-通过截图生成前端代码","depth":3},{"value":"三、AI 画图使用示例","url":"#三ai-画图使用示例","depth":2},{"value":"生成 Github OAuth2 的认证时序图","url":"#生成-github-oauth2-的认证时序图","depth":3},{"value":"HTTPS 证书交换时序图","url":"#https-证书交换时序图","depth":3},{"value":"Dubbo 调用处理流程图","url":"#dubbo-调用处理流程图","depth":3},{"value":"JVM 内存模型","url":"#jvm-内存模型","depth":3},{"value":"K8S 模块架构图","url":"#k8s-模块架构图","depth":3},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"开发者的福音:通过Excalidraw的AI功能进行绘图以及将图转换成代码","datePublished":"2023-11-30T13:48:04.000Z","dateModified":"2023-11-30T13:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/excalidraw"},"language":"zh"},{"title":"Developer's Gospel: Drawing and Converting Diagrams to Code with Excalidraw's AI Feature","date":"2023-11-30T13:48:04.000Z","tags":["Excalidraw"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.845,"time":230700,"words":769},"slug":"en/backend/excalidraw","path":"blog/en/backend/excalidraw","filePath":"blog/en/backend/excalidraw.mdx","toc":[{"value":"1. Introduction to Excalidraw","url":"#1-introduction-to-excalidraw","depth":2},{"value":"2. Use Cases","url":"#2-use-cases","depth":2},{"value":"2.1 Generating Flowcharts with Excalidraw's AI Feature","url":"#21-generating-flowcharts-with-excalidraws-ai-feature","depth":3},{"value":"2.2 Generating Frontend Code from Screenshots","url":"#22-generating-frontend-code-from-screenshots","depth":3},{"value":"3. Examples of AI Drawings","url":"#3-examples-of-ai-drawings","depth":2},{"value":"Generating Github OAuth2 Authentication Timing Diagram","url":"#generating-github-oauth2-authentication-timing-diagram","depth":3},{"value":"HTTPS Certificate Exchange Timing Diagram","url":"#https-certificate-exchange-timing-diagram","depth":3},{"value":"Dubbo Invocation Process Flowchart","url":"#dubbo-invocation-process-flowchart","depth":3},{"value":"JVM Memory Model","url":"#jvm-memory-model","depth":3},{"value":"K8S Module Architecture Diagram","url":"#k8s-module-architecture-diagram","depth":3},{"value":"Summary","url":"#summary","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Developer's Gospel: Drawing and Converting Diagrams to Code with Excalidraw's AI Feature","datePublished":"2023-11-30T13:48:04.000Z","dateModified":"2023-11-30T13:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/en/backend/excalidraw"},"language":"en"},{"title":"让 ChatGPT 成为你的私人营养师","date":"2023-11-29T15:39:37.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"16 min read","minutes":15.5,"time":930000,"words":3100},"slug":"ai/how-to-use-chatgpt-to-create-custom-meal-plans-that-work","path":"blog/ai/how-to-use-chatgpt-to-create-custom-meal-plans-that-work","filePath":"blog/ai/how-to-use-chatgpt-to-create-custom-meal-plans-that-work.mdx","toc":[{"value":"第 1 步:使用 ChatGPT 完善您的目标和偏好","url":"#第-1-步使用-chatgpt-完善您的目标和偏好","depth":2},{"value":"减肥、增肌还是只是保持健康?","url":"#减肥增肌还是只是保持健康","depth":3},{"value":"满足您独特的品味和需求","url":"#满足您独特的品味和需求","depth":3},{"value":"个性化","url":"#个性化","depth":3},{"value":"步骤 2:包含卡路里和营养目标的结构化膳食计划","url":"#步骤-2包含卡路里和营养目标的结构化膳食计划","depth":2},{"value":"平衡卡路里和营养","url":"#平衡卡路里和营养","depth":3},{"value":"根据您的时间安排定制膳食计划","url":"#根据您的时间安排定制膳食计划","depth":3},{"value":"适应您的日程安排和生活方式","url":"#适应您的日程安排和生活方式","depth":3},{"value":"购物清单和膳食准备指南:节省时间并减少食物浪费","url":"#购物清单和膳食准备指南节省时间并减少食物浪费","depth":2},{"value":"轻松购物清单","url":"#轻松购物清单","depth":3},{"value":"简化的膳食准备指南","url":"#简化的膳食准备指南","depth":3},{"value":"节省时间并减少食物浪费","url":"#节省时间并减少食物浪费","depth":3},{"value":"通过 ChatGPT 实现替代膳食创意和食谱调整:保持新鲜和令人兴奋","url":"#通过-chatgpt-实现替代膳食创意和食谱调整保持新鲜和令人兴奋","depth":2},{"value":"将食物与替代膳食想法混合起来","url":"#将食物与替代膳食想法混合起来","depth":3},{"value":"调整现有食谱以满足您的口味和目标","url":"#调整现有食谱以满足您的口味和目标","depth":3},{"value":"保持膳食计划动态","url":"#保持膳食计划动态","depth":3},{"value":"从 ChatGPT 破解终极膳食计划","url":"#从-chatgpt-破解终极膳食计划","depth":2},{"value":"使用 ChatGPT 制定膳食计划的常见问题解答","url":"#使用-chatgpt-制定膳食计划的常见问题解答","depth":2},{"value":"ChatGPT 可以帮助我制定膳食计划吗?","url":"#chatgpt-可以帮助我制定膳食计划吗","depth":3},{"value":"我正在努力减肥。 ChatGPT 如何协助制定膳食计划?","url":"#我正在努力减肥-chatgpt-如何协助制定膳食计划","depth":3},{"value":"我可以使用 ChatGPT 获得针对特定菜肴的膳食计划吗?","url":"#我可以使用-chatgpt-获得针对特定菜肴的膳食计划吗","depth":3},{"value":"ChatGPT 如何帮助我坚持我的膳食计划预算?","url":"#chatgpt-如何帮助我坚持我的膳食计划预算","depth":3},{"value":"我有食物过敏,ChatGPT 能为我制定安全膳食计划吗?","url":"#我有食物过敏chatgpt-能为我制定安全膳食计划吗","depth":3},{"value":"如何使用 ChatGPT 为我的重复膳食计划添加多样性?","url":"#如何使用-chatgpt-为我的重复膳食计划添加多样性","depth":3},{"value":"ChatGPT 可以为我的健身计划设计膳食计划吗?","url":"#chatgpt-可以为我的健身计划设计膳食计划吗","depth":3},{"value":"如何使用 ChatGPT 确保我的膳食计划营养均衡?","url":"#如何使用-chatgpt-确保我的膳食计划营养均衡","depth":3},{"value":"我太忙了,没时间每天做饭。 ChatGPT 可以帮助制定膳食准备计划吗?","url":"#我太忙了没时间每天做饭-chatgpt-可以帮助制定膳食准备计划吗","depth":3},{"value":"ChatGPT 如何帮助我的膳食计划更加可持续和环保?","url":"#chatgpt-如何帮助我的膳食计划更加可持续和环保","depth":3},{"value":"终极思考","url":"#终极思考","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"让 ChatGPT 成为你的私人营养师","datePublished":"2023-11-29T15:39:37.000Z","dateModified":"2023-11-29T15:39:37.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/how-to-use-chatgpt-to-create-custom-meal-plans-that-work"},"language":"zh"},{"title":"ChatGPT与股市:利用ChatGPT撰写财报开启副业的方法","date":"2023-11-28T13:55:37.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"12 min read","minutes":11.9,"time":714000,"words":2380},"slug":"ai/chatgpt-and-the-stock-market-how-to-use-ai-to-write-financial-reports-and-make-money","path":"blog/ai/chatgpt-and-the-stock-market-how-to-use-ai-to-write-financial-reports-and-make-money","filePath":"blog/ai/chatgpt-and-the-stock-market-how-to-use-ai-to-write-financial-reports-and-make-money.mdx","toc":[{"value":"什么是财报?","url":"#什么是财报","depth":2},{"value":"10种使用ChatGPT撰写财报并赚钱的方法","url":"#10种使用chatgpt撰写财报并赚钱的方法","depth":2},{"value":"1. 股票分析报告","url":"#1-股票分析报告","depth":3},{"value":"2. 市场趋势预测","url":"#2-市场趋势预测","depth":3},{"value":"3. 盈利报告总结","url":"#3-盈利报告总结","depth":3},{"value":"4. 投资组合建议","url":"#4-投资组合建议","depth":3},{"value":"5. 财经教育内容","url":"#5-财经教育内容","depth":3},{"value":"6. 互动问答","url":"#6-互动问答","depth":3},{"value":"7. 财经短视频","url":"#7-财经短视频","depth":3},{"value":"8. 交易策略","url":"#8-交易策略","depth":3},{"value":"9. 财经视","url":"#9-财经视","depth":3},{"value":"10. 第三方报告","url":"#10-第三方报告","depth":3},{"value":"怎样从你的ChatGPT生成的财报中赚钱的10个方式","url":"#怎样从你的chatgpt生成的财报中赚钱的10个方式","depth":2},{"value":"结论和最后的思考","url":"#结论和最后的思考","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"ChatGPT与股市:利用ChatGPT撰写财报开启副业的方法","datePublished":"2023-11-28T13:55:37.000Z","dateModified":"2023-11-28T13:55:37.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/chatgpt-and-the-stock-market-how-to-use-ai-to-write-financial-reports-and-make-money"},"language":"zh"},{"title":"MySQL必知必会:常见问题解答与实用指南","date":"2023-11-28T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"9 min read","minutes":8.185,"time":491100,"words":1637},"slug":"backend/mysql","path":"blog/backend/mysql","filePath":"blog/backend/mysql.mdx","toc":[{"value":"MySQL必知必会:常见问题解答与实用指南","url":"#mysql必知必会常见问题解答与实用指南","depth":1},{"value":"如何优化分页查询?","url":"#如何优化分页查询","depth":2},{"value":"可靠性实现","url":"#可靠性实现","depth":2},{"value":"事务的可重复读是如何实现的?","url":"#事务的可重复读是如何实现的","depth":2},{"value":"读提交和可重复读实现的区别?","url":"#读提交和可重复读实现的区别","depth":2},{"value":"Redo Log和Undo Log的区别?","url":"#redo-log和undo-log的区别","depth":2},{"value":"MySQL如何保证数据不丢失?","url":"#mysql如何保证数据不丢失","depth":2},{"value":"MyISAM和InnoDB的区别?","url":"#myisam和innodb的区别","depth":2},{"value":"count(*)、count(1)和count(col)的区别?","url":"#countcount1和countcol的区别","depth":2},{"value":"可重复读隔离级别下,MVCC在数据的CRUD层面分别如何实现?","url":"#可重复读隔离级别下mvcc在数据的crud层面分别如何实现","depth":2},{"value":"索引命名规范?","url":"#索引命名规范","depth":2},{"value":"select into from和insert into select from的区别?","url":"#select-into-from和insert-into-select-from的区别","depth":2},{"value":"如何保证MySQL不丢失数据?","url":"#如何保证mysql不丢失数据","depth":2},{"value":"Redo Log + Binlog写入策略","url":"#redo-log--binlog写入策略","depth":2},{"value":"Redo Log的写入策略","url":"#redo-log的写入策略","depth":3},{"value":"Binlog的写入策略","url":"#binlog的写入策略","depth":3},{"value":"Binlog日志类型","url":"#binlog日志类型","depth":3},{"value":"生产配置建议","url":"#生产配置建议","depth":3},{"value":"性能瓶颈和提升方法","url":"#性能瓶颈和提升方法","depth":3},{"value":"MySQL 为什么建议使用自增组件?","url":"#mysql-为什么建议使用自增组件","depth":1}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"MySQL必知必会:常见问题解答与实用指南","datePublished":"2023-11-28T01:48:04.000Z","dateModified":"2023-11-28T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mysql"},"language":"zh"},{"title":"图表设计秘籍:提升 PPT 的说服力","date":"2023-11-27T23:18:11.000Z","tags":[],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.645,"time":158700,"words":529},"slug":"backend/ppt-chart","path":"blog/backend/ppt-chart","filePath":"blog/backend/ppt-chart.mdx","toc":[{"value":"一、图表呈现的哲学","url":"#一图表呈现的哲学","depth":2},{"value":"1.1 好的标准","url":"#11-好的标准","depth":3},{"value":"1.2 图表的分类","url":"#12-图表的分类","depth":3},{"value":"1.3 排版原则","url":"#13-排版原则","depth":3},{"value":"二、图表选型","url":"#二图表选型","depth":2},{"value":"2.1 比较类图表","url":"#21-比较类图表","depth":3},{"value":"2.1.1 多系列柱状图","url":"#211-多系列柱状图","depth":4},{"value":"2.1.2 堆积柱状图","url":"#212-堆积柱状图","depth":4},{"value":"2.1.3 对比柱状图","url":"#213-对比柱状图","depth":4},{"value":"2.1.4分区柱状图","url":"#214分区柱状图","depth":4},{"value":"2.1.5 漏斗图","url":"#215-漏斗图","depth":4},{"value":"2.2 占比类图表","url":"#22-占比类图表","depth":3},{"value":"2.2.1 玫瑰饼图","url":"#221-玫瑰饼图","depth":4},{"value":"2.2.2 仪表版图","url":"#222-仪表版图","depth":4},{"value":"2.2.3 矩形树图","url":"#223-矩形树图","depth":4},{"value":"2.2.4 雷达图","url":"#224-雷达图","depth":4},{"value":"2.2.5 散点图","url":"#225-散点图","depth":4},{"value":"2.2.6 甘特图","url":"#226-甘特图","depth":4},{"value":"2.2.7 树状图","url":"#227-树状图","depth":4},{"value":"2.3 趋势类图表","url":"#23-趋势类图表","depth":3},{"value":"2.3.1 线图","url":"#231-线图","depth":4},{"value":"2.3.2 面积图","url":"#232-面积图","depth":4},{"value":"2.3.3 瀑布图","url":"#233-瀑布图","depth":4},{"value":"2.4 地图类图表","url":"#24-地图类图表","depth":3},{"value":"2.4.1 热力地图","url":"#241-热力地图","depth":4},{"value":"2.4.2 点地图","url":"#242-点地图","depth":4},{"value":"三、小结","url":"#三小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"图表设计秘籍:提升 PPT 的说服力","datePublished":"2023-11-27T23:18:11.000Z","dateModified":"2023-11-27T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/ppt-chart"},"language":"zh"},{"title":"从容应对消息堆积:提高消息处理效率的关键策略","date":"2023-11-27T21:38:17.000Z","tags":["MQ"],"draft":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.47,"time":388200,"words":1294},"slug":"backend/mq-bugfix-online","path":"blog/backend/mq-bugfix-online","filePath":"blog/backend/mq-bugfix-online.mdx","toc":[{"value":"一、识别消息堆积问题","url":"#一识别消息堆积问题","depth":2},{"value":"二、应急处理策略","url":"#二应急处理策略","depth":2},{"value":"2.1 扩容资源","url":"#21-扩容资源","depth":3},{"value":"2.2 临时消费者","url":"#22-临时消费者","depth":3},{"value":"2.3 优先级调整","url":"#23-优先级调整","depth":3},{"value":"2.4 消息重放","url":"#24-消息重放","depth":3},{"value":"2.5 监控和反馈","url":"#25-监控和反馈","depth":3},{"value":"三、长期解决方案","url":"#三长期解决方案","depth":2},{"value":"四、预防措施","url":"#四预防措施","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"从容应对消息堆积:提高消息处理效率的关键策略","datePublished":"2023-11-27T21:38:17.000Z","dateModified":"2023-11-27T21:38:17.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mq-bugfix-online"},"language":"zh"},{"title":"Dapr vs. Service Mesh:理解微服务架构中的差异与应用场景","date":"2023-11-26T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.385,"time":443100,"words":1477},"slug":"backend/dapr-servicemesh","path":"blog/backend/dapr-servicemesh","filePath":"blog/backend/dapr-servicemesh.mdx","toc":[{"value":"引言","url":"#引言","depth":2},{"value":"Dapr的概述","url":"#dapr的概述","depth":2},{"value":"Service Mesh的概述","url":"#service-mesh的概述","depth":2},{"value":"Dapr和Service Mesh的区别","url":"#dapr和service-mesh的区别","depth":2},{"value":"Dapr和Service Mesh的应用场景","url":"#dapr和service-mesh的应用场景","depth":2},{"value":"Dapr和Service Mesh的优点和不足","url":"#dapr和service-mesh的优点和不足","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Dapr vs. Service Mesh:理解微服务架构中的差异与应用场景","datePublished":"2023-11-26T03:18:11.000Z","dateModified":"2023-11-26T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/dapr-servicemesh"},"language":"zh"},{"title":"全新商业模式:ChatGPT 带来的小说创作赚钱机会","date":"2023-11-25T20:17:47.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"14 min read","minutes":13.13,"time":787800,"words":2626},"slug":"ai/earn-with-chatgpt-generated-fiction-books-on-kindle-direct-publishing","path":"blog/ai/earn-with-chatgpt-generated-fiction-books-on-kindle-direct-publishing","filePath":"blog/ai/earn-with-chatgpt-generated-fiction-books-on-kindle-direct-publishing.mdx","toc":[{"value":"Kindle 自助出版平台","url":"#kindle-自助出版平台","depth":2},{"value":"使用 ChatGPT 在 Kindle 自助出版平台出版作品的 10 个步骤","url":"#使用-chatgpt-在-kindle-自助出版平台出版作品的-10-个步骤","depth":2},{"value":"1. 构思和情节生成","url":"#1-构思和情节生成","depth":3},{"value":"2.角色发展","url":"#2角色发展","depth":3},{"value":"3. 创建对话","url":"#3-创建对话","depth":3},{"value":"4. 描述性写作","url":"#4-描述性写作","depth":3},{"value":"5. 完善情节","url":"#5-完善情节","depth":3},{"value":"6. 场景延续","url":"#6-场景延续","depth":3},{"value":"7. 生成评论","url":"#7-生成评论","depth":3},{"value":"8. 作者简介和书籍简介","url":"#8-作者简介和书籍简介","depth":3},{"value":"9. 提供续集想法","url":"#9-提供续集想法","depth":3},{"value":"10. 提高粉丝参与度","url":"#10-提高粉丝参与度","depth":3},{"value":"如何让 ChatGPT 生成的小说在 Kindle Direct Publishing 上出版","url":"#如何让-chatgpt-生成的小说在-kindle-direct-publishing-上出版","depth":2},{"value":"终极策略","url":"#终极策略","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"全新商业模式:ChatGPT 带来的小说创作赚钱机会","datePublished":"2023-11-25T20:17:47.000Z","dateModified":"2023-11-25T20:17:47.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/earn-with-chatgpt-generated-fiction-books-on-kindle-direct-publishing"},"language":"zh"},{"title":"ChatGPT创收指南:业务分析师的十种副业收入途径","date":"2023-11-25T13:58:15.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.305,"time":378300,"words":1261},"slug":"ai/10-ways-business-analysts-can-make-side-income-using-chatgpt","path":"blog/ai/10-ways-business-analysts-can-make-side-income-using-chatgpt","filePath":"blog/ai/10-ways-business-analysts-can-make-side-income-using-chatgpt.mdx","toc":[{"value":"1. 商业计划书写作服务","url":"#1-商业计划书写作服务","depth":2},{"value":"2. 数据可视化顾问","url":"#2-数据可视化顾问","depth":2},{"value":"3. 流程自动化顾问","url":"#3-流程自动化顾问","depth":2},{"value":"4. 市场调查","url":"#4-市场调查","depth":2},{"value":"5. 设计研讨会","url":"#5-设计研讨会","depth":2},{"value":"6. 量身定制的业务报告","url":"#6-量身定制的业务报告","depth":2},{"value":"7.BA 工具教程","url":"#7ba-工具教程","depth":2},{"value":"8. 远程培训和指导","url":"#8-远程培训和指导","depth":2},{"value":"9. 博客和联盟营销","url":"#9-博客和联盟营销","depth":2},{"value":"10. 基于订阅的 BA 资源中心","url":"#10-基于订阅的-ba-资源中心","depth":2},{"value":"结论","url":"#结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"ChatGPT创收指南:业务分析师的十种副业收入途径","datePublished":"2023-11-25T13:58:15.000Z","dateModified":"2023-11-25T13:58:15.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/10-ways-business-analysts-can-make-side-income-using-chatgpt"},"language":"zh"},{"title":"ClickHouse 和 StarRocks 对比指南:选型时需要考虑的关键因素","date":"2023-11-24T23:18:11.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"7 min read","minutes":6.825,"time":409500,"words":1365},"slug":"backend/clickhouse-starrocks","path":"blog/backend/clickhouse-starrocks","filePath":"blog/backend/clickhouse-starrocks.mdx","toc":[{"value":"一、数据存储","url":"#一数据存储","depth":2},{"value":"二、查询性能","url":"#二查询性能","depth":2},{"value":"三、系统管理","url":"#三系统管理","depth":2},{"value":"四、适用场景","url":"#四适用场景","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"ClickHouse 和 StarRocks 对比指南:选型时需要考虑的关键因素","datePublished":"2023-11-24T23:18:11.000Z","dateModified":"2023-11-24T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/clickhouse-starrocks"},"language":"zh"},{"title":"有效利用 ChatGPT 多模态技术的十种最佳方法","date":"2023-11-24T17:08:25.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"13 min read","minutes":12.43,"time":745800,"words":2486},"slug":"ai/chatgpt-can-see-images-10-best-ways-to-use-the-multimodal-feature","path":"blog/ai/chatgpt-can-see-images-10-best-ways-to-use-the-multimodal-feature","filePath":"blog/ai/chatgpt-can-see-images-10-best-ways-to-use-the-multimodal-feature.mdx","toc":[{"value":"1. 语言翻译","url":"#1-语言翻译","depth":2},{"value":"2. 医疗保健指南","url":"#2-医疗保健指南","depth":2},{"value":"3. 教育辅导","url":"#3-教育辅导","depth":2},{"value":"4. 时尚推荐","url":"#4-时尚推荐","depth":2},{"value":"5. 辅助健身","url":"#5-辅助健身","depth":2},{"value":"6. 烹饪指导","url":"#6-烹饪指导","depth":2},{"value":"7. 装修建议","url":"#7-装修建议","depth":2},{"value":"8. 了解野生动物和宠物行为","url":"#8-了解野生动物和宠物行为","depth":2},{"value":"9. 识别植物种类","url":"#9-识别植物种类","depth":2},{"value":"10. OCR 功能","url":"#10-ocr-功能","depth":2},{"value":"关于 ChatGPT 的多模态功能的常见问题解答","url":"#关于-chatgpt-的多模态功能的常见问题解答","depth":2},{"value":"ChatGPT 推出了哪些新功能?","url":"#chatgpt-推出了哪些新功能","depth":3},{"value":"这些功能在我的日常生活中有何用处?","url":"#这些功能在我的日常生活中有何用处","depth":3},{"value":"谁可以在哪些平台上使用这些新功能?","url":"#谁可以在哪些平台上使用这些新功能","depth":3},{"value":"如何开始使用图像功能?","url":"#如何开始使用图像功能","depth":3},{"value":"ChatGPT 图像理解的动力是什么?","url":"#chatgpt-图像理解的动力是什么","depth":3},{"value":"基于视觉的模型有什么挑战吗?","url":"#基于视觉的模型有什么挑战吗","depth":3},{"value":"这个功能的开发是如何获知的?","url":"#这个功能的开发是如何获知的","depth":3},{"value":"ChatGPT 可以对图像中的人物进行分析和陈述吗?","url":"#chatgpt-可以对图像中的人物进行分析和陈述吗","depth":3},{"value":"我可以使用该功能进行有关包含人物的图像的一般对话吗?","url":"#我可以使用该功能进行有关包含人物的图像的一般对话吗","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"有效利用 ChatGPT 多模态技术的十种最佳方法","datePublished":"2023-11-24T17:08:25.000Z","dateModified":"2023-11-24T17:08:25.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/chatgpt-can-see-images-10-best-ways-to-use-the-multimodal-feature"},"language":"zh"},{"title":"解决 ChatGPT 幻觉问题:利用向量数据库提高回答的准确性","date":"2023-11-23T17:08:25.000Z","tags":["ChatGPT","LLM"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.75,"time":345000,"words":1150},"slug":"ai/chatgpt-huanjue","path":"blog/ai/chatgpt-huanjue","filePath":"blog/ai/chatgpt-huanjue.mdx","toc":[{"value":"什么是 AI 幻觉问题?","url":"#什么是-ai-幻觉问题","depth":3},{"value":"为什么会出现幻觉问题?","url":"#为什么会出现幻觉问题","depth":3},{"value":"向量数据库的作用","url":"#向量数据库的作用","depth":3},{"value":"工作流程分析","url":"#工作流程分析","depth":3},{"value":"预计成效与潜在挑战","url":"#预计成效与潜在挑战","depth":3},{"value":"结语","url":"#结语","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"解决 ChatGPT 幻觉问题:利用向量数据库提高回答的准确性","datePublished":"2023-11-23T17:08:25.000Z","dateModified":"2023-11-23T17:08:25.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/chatgpt-huanjue"},"language":"zh"},{"title":"揭秘 Mock Server:提升开发和测试效率的利器","date":"2023-11-23T01:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.28,"time":196800,"words":656},"slug":"backend/mock-server","path":"blog/backend/mock-server","filePath":"blog/backend/mock-server.mdx","toc":[{"value":"What?什么是 Mock Server","url":"#what什么是-mock-server","depth":2},{"value":"Why?为什么要用 Mock Server","url":"#why为什么要用-mock-server","depth":2},{"value":"How?怎么用 Mock Server","url":"#how怎么用-mock-server","depth":2},{"value":"使用方式一:通过现成的服务打桩","url":"#使用方式一通过现成的服务打桩","depth":3},{"value":"使用方式二:通过代码打桩","url":"#使用方式二通过代码打桩","depth":3},{"value":"示例一","url":"#示例一","depth":4},{"value":"示例二","url":"#示例二","depth":4}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"揭秘 Mock Server:提升开发和测试效率的利器","datePublished":"2023-11-23T01:48:04.000Z","dateModified":"2023-11-23T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mock-server"},"language":"zh"},{"title":"序列化之选型指南:选择适合你的序列化方式","date":"2023-11-23T01:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.83,"time":289800,"words":966},"slug":"backend/perf-ser","path":"blog/backend/perf-ser","filePath":"blog/backend/perf-ser.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"序列化之选型指南:选择适合你的序列化方式","datePublished":"2023-11-23T01:48:04.000Z","dateModified":"2023-11-23T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/perf-ser"},"language":"zh"},{"title":"AI 革命:让 ChatGPT 成为您的专属理财顾问","date":"2023-11-22T20:14:51.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"16 min read","minutes":15.055,"time":903300,"words":3011},"slug":"ai/leveraging-ai-like-chatgpt-for-personalized-financial-advice","path":"blog/ai/leveraging-ai-like-chatgpt-for-personalized-financial-advice","filePath":"blog/ai/leveraging-ai-like-chatgpt-for-personalized-financial-advice.mdx","toc":[{"value":"ChatGPT 在财务规划中的作用","url":"#chatgpt-在财务规划中的作用","depth":2},{"value":"使用 ChatGPT 提供个性化财务建议的潜在好处","url":"#使用-chatgpt-提供个性化财务建议的潜在好处","depth":3},{"value":"ChatGPT 如何提供个性化财务建议","url":"#chatgpt-如何提供个性化财务建议","depth":2},{"value":"利用人工智能和自然语言处理 (NLP) 提供量身定制的建议","url":"#利用人工智能和自然语言处理-nlp-提供量身定制的建议","depth":3},{"value":"将 ChatGPT 的建议和个人判断相结合","url":"#将-chatgpt-的建议和个人判断相结合","depth":3},{"value":"案例研究:利用 ChatGPT 进行成功的财务规划","url":"#案例研究利用-chatgpt-进行成功的财务规划","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"AI 革命:让 ChatGPT 成为您的专属理财顾问","datePublished":"2023-11-22T20:14:51.000Z","dateModified":"2023-11-22T20:14:51.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/leveraging-ai-like-chatgpt-for-personalized-financial-advice"},"language":"zh"},{"title":"深入解析Java内存溢出:排查方法与优化技巧","date":"2023-11-22T07:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.165,"time":309900,"words":1033},"slug":"backend/java-oom","path":"blog/backend/java-oom","filePath":"blog/backend/java-oom.mdx","toc":[{"value":"一、内存溢出分类","url":"#一内存溢出分类","depth":2},{"value":"1.1 栈溢出","url":"#11-栈溢出","depth":3},{"value":"1.2 堆溢出","url":"#12-堆溢出","depth":3},{"value":"1.3 MetaSpace 数据区溢出","url":"#13-metaspace-数据区溢出","depth":3},{"value":"1.4 本地直接内存溢出","url":"#14-本地直接内存溢出","depth":3},{"value":"1.5 数据超限内存溢出","url":"#15-数据超限内存溢出","depth":3},{"value":"二、主要排查方法","url":"#二主要排查方法","depth":2},{"value":"2.1 内存分析工具","url":"#21-内存分析工具","depth":3},{"value":"2.2 JDK 自带命令","url":"#22-jdk-自带命令","depth":3},{"value":"2.3 参数检查","url":"#23-参数检查","depth":3},{"value":"三、小结","url":"#三小结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"深入解析Java内存溢出:排查方法与优化技巧","datePublished":"2023-11-22T07:48:04.000Z","dateModified":"2023-11-22T07:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/java-oom"},"language":"zh"},{"title":"企业使用 ChatGPT 提升竞争力的一百种方法(下)","date":"2023-11-21T20:15:58.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"53 min read","minutes":52.515,"time":3150900,"words":10503},"slug":"ai/100-ways-to-use-chatgpt-for-business-2","path":"blog/ai/100-ways-to-use-chatgpt-for-business-2","filePath":"blog/ai/100-ways-to-use-chatgpt-for-business-2.mdx","toc":[{"value":"51. 创建使命和愿景声明","url":"#51-创建使命和愿景声明","depth":2},{"value":"52. 继任计划","url":"#52-继任计划","depth":2},{"value":"53. 工作场所多元化和包容性","url":"#53-工作场所多元化和包容性","depth":2},{"value":"54. 建立积极的工作环境","url":"#54-建立积极的工作环境","depth":2},{"value":"55. GDPR 和数据隐私基础知识","url":"#55-gdpr-和数据隐私基础知识","depth":2},{"value":"56. 提高企业生产力","url":"#56-提高企业生产力","depth":2},{"value":"57. 业务辅导和指导","url":"#57-业务辅导和指导","depth":2},{"value":"58.人力资源管理","url":"#58人力资源管理","depth":2},{"value":"59. 商业预算","url":"#59-商业预算","depth":2},{"value":"60. 企业可持续发展实践","url":"#60-企业可持续发展实践","depth":2},{"value":"61. 业务退出战略规划","url":"#61-业务退出战略规划","depth":2},{"value":"62. 公司治理基础知识","url":"#62-公司治理基础知识","depth":2},{"value":"63. 商业创新","url":"#63-商业创新","depth":2},{"value":"64. 开始特许经营","url":"#64-开始特许经营","depth":2},{"value":"65. 工作与生活平衡","url":"#65-工作与生活平衡","depth":2},{"value":"66.云计算","url":"#66云计算","depth":2},{"value":"67. 建立业务伙伴关系","url":"#67-建立业务伙伴关系","depth":2},{"value":"68. 召开有效的会议","url":"#68-召开有效的会议","depth":2},{"value":"69. SaaS 商业模式讲解","url":"#69-saas-商业模式讲解","depth":2},{"value":"70. 客户反馈收集和分析","url":"#70-客户反馈收集和分析","depth":2},{"value":"71. 业务灾难恢复计划","url":"#71-业务灾难恢复计划","depth":2},{"value":"72.精益创业方法论","url":"#72精益创业方法论","depth":2},{"value":"73. 业务敏捷性","url":"#73-业务敏捷性","depth":2},{"value":"74.影响者营销策略","url":"#74影响者营销策略","depth":2},{"value":"75.商业众筹","url":"#75商业众筹","depth":2},{"value":"76. 竞争分析","url":"#76-竞争分析","depth":2},{"value":"77. 专利、商标和版权基础知识","url":"#77-专利商标和版权基础知识","depth":2},{"value":"78. 商业中的 ESG(环境、社会、治理)","url":"#78-商业中的-esg环境社会治理","depth":2},{"value":"79. 经济衰退期间的业务管理","url":"#79-经济衰退期间的业务管理","depth":2},{"value":"80. 拓展国际业务","url":"#80-拓展国际业务","depth":2},{"value":"81. B2B 销售策略","url":"#81-b2b-销售策略","depth":2},{"value":"82. 商业补助金和资助选项","url":"#82-商业补助金和资助选项","depth":2},{"value":"83. 使用区块链","url":"#83-使用区块链","depth":2},{"value":"84. 商业保险基础知识","url":"#84-商业保险基础知识","depth":2},{"value":"85. 业务自动化策略","url":"#85-业务自动化策略","depth":2},{"value":"86. 建立客户忠诚度","url":"#86-建立客户忠诚度","depth":2},{"value":"87. 全渠道营销策略","url":"#87-全渠道营销策略","depth":2},{"value":"88. 创建业务连续性计划","url":"#88-创建业务连续性计划","depth":2},{"value":"89. 创建一个包容性的工作场所","url":"#89-创建一个包容性的工作场所","depth":2},{"value":"90. 员工健康计划","url":"#90-员工健康计划","depth":2},{"value":"91. 入职流程优化","url":"#91-入职流程优化","depth":2},{"value":"92. 处理工作场所冲突","url":"#92-处理工作场所冲突","depth":2},{"value":"93. 绩效评估流程","url":"#93-绩效评估流程","depth":2},{"value":"94. 在线声誉管理","url":"#94-在线声誉管理","depth":2},{"value":"95. 平衡短期和长期策略","url":"#95-平衡短期和长期策略","depth":2},{"value":"96.敏捷项目管理","url":"#96敏捷项目管理","depth":2},{"value":"97. 成立一家企业","url":"#97-成立一家企业","depth":2},{"value":"98. 员工激励策略","url":"#98-员工激励策略","depth":2},{"value":"99. 营业税扣除","url":"#99-营业税扣除","depth":2},{"value":"100. 企业文化审核","url":"#100-企业文化审核","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"企业使用 ChatGPT 提升竞争力的一百种方法(下)","datePublished":"2023-11-21T20:15:58.000Z","dateModified":"2023-11-21T20:15:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/100-ways-to-use-chatgpt-for-business-2"},"language":"zh"},{"title":"一文教你如何从 JUnit 4 迁移到 JUnit 5","date":"2023-11-21T19:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.895,"time":353700,"words":1179},"slug":"backend/migrating-from-junit-4-to-junit-5","path":"blog/backend/migrating-from-junit-4-to-junit-5","filePath":"blog/backend/migrating-from-junit-4-to-junit-5.mdx","toc":[{"value":"一、概述","url":"#一概述","depth":2},{"value":"二、JUnit 5 的优势","url":"#二junit-5-的优势","depth":2},{"value":"三、差异","url":"#三差异","depth":2},{"value":"3.1 注释","url":"#31-注释","depth":3},{"value":"3.2 断言","url":"#32-断言","depth":3},{"value":"3.3 假设","url":"#33-假设","depth":3},{"value":"3.4 标记和过滤","url":"#34-标记和过滤","depth":3},{"value":"3.5 运行测试的新注释","url":"#35-运行测试的新注释","depth":3},{"value":"3.6 新的测试规则注释","url":"#36-新的测试规则注释","depth":3},{"value":"3.7 JUnit 5 Vintage","url":"#37-junit-5-vintage","depth":3},{"value":"四、结论","url":"#四结论","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"一文教你如何从 JUnit 4 迁移到 JUnit 5","datePublished":"2023-11-21T19:18:11.000Z","dateModified":"2023-11-21T19:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/migrating-from-junit-4-to-junit-5"},"language":"zh"},{"title":"Redis - 听说 Dragonfly 宣称比我快 25 倍","date":"2023-11-21T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.335,"time":260100,"words":867},"slug":"backend/dragonfly","path":"blog/backend/dragonfly","filePath":"blog/backend/dragonfly.mdx","toc":[{"value":"性能对比","url":"#性能对比","depth":1},{"value":"Redis","url":"#redis","depth":2},{"value":"KeyDB","url":"#keydb","depth":2},{"value":"Dragonfly","url":"#dragonfly","depth":2},{"value":"Skytable","url":"#skytable","depth":2},{"value":"小结","url":"#小结","depth":1}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Redis - 听说 Dragonfly 宣称比我快 25 倍","datePublished":"2023-11-21T01:48:04.000Z","dateModified":"2023-11-21T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/dragonfly"},"language":"zh"},{"title":"企业使用 ChatGPT 提升竞争力的一百种方法(上)","date":"2023-11-20T20:15:58.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"52 min read","minutes":51.045,"time":3062700,"words":10209},"slug":"ai/100-ways-to-use-chatgpt-for-business-1","path":"blog/ai/100-ways-to-use-chatgpt-for-business-1","filePath":"blog/ai/100-ways-to-use-chatgpt-for-business-1.mdx","toc":[{"value":"1.市场研究","url":"#1市场研究","depth":2},{"value":"2. 商业计划撰写","url":"#2-商业计划撰写","depth":2},{"value":"3. SWOT 分析","url":"#3-swot-分析","depth":2},{"value":"4. 制定营销策略","url":"#4-制定营销策略","depth":2},{"value":"5. 提供产品开发思路","url":"#5-提供产品开发思路","depth":2},{"value":"6. 定价策略","url":"#6-定价策略","depth":2},{"value":"7. 财务规划","url":"#7-财务规划","depth":2},{"value":"8. 现金流管理建议","url":"#8-现金流管理建议","depth":2},{"value":"9. 品牌建议","url":"#9-品牌建议","depth":2},{"value":"10. 客户关系管理","url":"#10-客户关系管理","depth":2},{"value":"11.社交媒体策略","url":"#11社交媒体策略","depth":2},{"value":"12.内容营销策略","url":"#12内容营销策略","depth":2},{"value":"13. SEO 建议","url":"#13-seo-建议","depth":2},{"value":"14. 广告策略","url":"#14-广告策略","depth":2},{"value":"15. 电子邮件营销建议","url":"#15-电子邮件营销建议","depth":2},{"value":"16. 商法基础知识","url":"#16-商法基础知识","depth":2},{"value":"17. 电子商务建议","url":"#17-电子商务建议","depth":2},{"value":"18. 雇用和招聘建议","url":"#18-雇用和招聘建议","depth":2},{"value":"19. 员工管理建议","url":"#19-员工管理建议","depth":2},{"value":"20. 客户服务建议","url":"#20-客户服务建议","depth":2},{"value":"21.供应链管理","url":"#21供应链管理","depth":2},{"value":"22. 风险管理策略","url":"#22-风险管理策略","depth":2},{"value":"23. 销售策略和技巧","url":"#23-销售策略和技巧","depth":2},{"value":"24.公共关系策略","url":"#24公共关系策略","depth":2},{"value":"25. 企业社会责任","url":"#25-企业社会责任","depth":2},{"value":"26. 领导力建议","url":"#26-领导力建议","depth":2},{"value":"27. 项目管理","url":"#27-项目管理","depth":2},{"value":"28.商业道德讨论","url":"#28商业道德讨论","depth":2},{"value":"29. 商业模式画布说明","url":"#29-商业模式画布说明","depth":2},{"value":"30. 数据分析基础知识","url":"#30-数据分析基础知识","depth":2},{"value":"31.商业中的人工智能和机器学习","url":"#31商业中的人工智能和机器学习","depth":2},{"value":"32.企业税务规划","url":"#32企业税务规划","depth":2},{"value":"33. 员工培训和发展","url":"#33-员工培训和发展","depth":2},{"value":"34. 商务谈判技巧","url":"#34-商务谈判技巧","depth":2},{"value":"35. 建立客户关系","url":"#35-建立客户关系","depth":2},{"value":"36. 战略规划流程","url":"#36-战略规划流程","depth":2},{"value":"37. 领导者的时间管理","url":"#37-领导者的时间管理","depth":2},{"value":"38. 客户留存策略","url":"#38-客户留存策略","depth":2},{"value":"39. 业务流程改进","url":"#39-业务流程改进","depth":2},{"value":"40.数字化转型策略","url":"#40数字化转型策略","depth":2},{"value":"41. 外包策略","url":"#41-外包策略","depth":2},{"value":"42. 并购基础知识","url":"#42-并购基础知识","depth":2},{"value":"43.企业文化建设","url":"#43企业文化建设","depth":2},{"value":"44.团队建设活动","url":"#44团队建设活动","depth":2},{"value":"45. 业务增长策略","url":"#45-业务增长策略","depth":2},{"value":"46.变革管理技术","url":"#46变革管理技术","depth":2},{"value":"47. 业务指标和 KPI","url":"#47-业务指标和-kpi","depth":2},{"value":"48. 危机管理策略","url":"#48-危机管理策略","depth":2},{"value":"49.远程工作管理","url":"#49远程工作管理","depth":2},{"value":"50. 网络安全基础知识","url":"#50-网络安全基础知识","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"企业使用 ChatGPT 提升竞争力的一百种方法(上)","datePublished":"2023-11-20T20:15:58.000Z","dateModified":"2023-11-20T20:15:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/100-ways-to-use-chatgpt-for-business-1"},"language":"zh"},{"title":"到底为什么我们需要 Clickhouse?","date":"2023-11-20T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"12 min read","minutes":11.43,"time":685800,"words":2286},"slug":"backend/clickhouse","path":"blog/backend/clickhouse","filePath":"blog/backend/clickhouse.mdx","toc":[{"value":"什么是 Clickhouse?","url":"#什么是-clickhouse","depth":2},{"value":"什么是列式存储?","url":"#什么是列式存储","depth":3},{"value":"为什么 Clickhouse 改变了游戏规则","url":"#为什么-clickhouse-改变了游戏规则","depth":2},{"value":"什么场景不适合 Clickhouse","url":"#什么场景不适合-clickhouse","depth":2},{"value":"为什么 MySQL 不使用列式存储?","url":"#为什么-mysql-不使用列式存储","depth":2},{"value":"Clickhouse 的优点","url":"#clickhouse-的优点","depth":2},{"value":"开源社区很活跃","url":"#开源社区很活跃","depth":3},{"value":"飞快的查询速度","url":"#飞快的查询速度","depth":3},{"value":"小索引(稀疏索引)","url":"#小索引稀疏索引","depth":3},{"value":"数据压缩","url":"#数据压缩","depth":3},{"value":"数据 TTL","url":"#数据-ttl","depth":3},{"value":"适配多种语言","url":"#适配多种语言","depth":3},{"value":"水平可扩展和高可用","url":"#水平可扩展和高可用","depth":3},{"value":"小结","url":"#小结","depth":1}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"到底为什么我们需要 Clickhouse?","datePublished":"2023-11-20T01:48:04.000Z","dateModified":"2023-11-20T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/clickhouse"},"language":"zh"},{"title":"只有树立正确的技术观,才能做出卖座的产品","date":"2023-11-19T20:15:58.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"8 min read","minutes":7.01,"time":420600,"words":1402},"slug":"short/product","path":"blog/short/product","filePath":"blog/short/product.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"只有树立正确的技术观,才能做出卖座的产品","datePublished":"2023-11-19T20:15:58.000Z","dateModified":"2023-11-19T20:15:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/short/product"},"language":"zh"},{"title":"利用ChatGPT提供辅导服务赚钱的十种方法","date":"2023-11-19T01:48:04.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"13 min read","minutes":12.675,"time":760500,"words":2535},"slug":"ai/chatgpt-teacher","path":"blog/ai/chatgpt-teacher","filePath":"blog/ai/chatgpt-teacher.mdx","toc":[{"value":"什么是辅导服务?","url":"#什么是辅导服务","depth":2},{"value":"使用 ChatGPT 赚钱的 10 种方法","url":"#使用-chatgpt-赚钱的-10-种方法","depth":2},{"value":"1.解答学生疑问","url":"#1解答学生疑问","depth":3},{"value":"2.制定课程计划","url":"#2制定课程计划","depth":3},{"value":"3.生成练习题","url":"#3生成练习题","depth":3},{"value":"4.审查学生作业","url":"#4审查学生作业","depth":3},{"value":"5.辅导作业","url":"#5辅导作业","depth":3},{"value":"6.提供详细说明","url":"#6提供详细说明","depth":3},{"value":"7.创建学习指南","url":"#7创建学习指南","depth":3},{"value":"8.提供学习技巧","url":"#8提供学习技巧","depth":3},{"value":"9.语言学习","url":"#9语言学习","depth":3},{"value":"10.励志秘诀","url":"#10励志秘诀","depth":3},{"value":"关于如何吸引学生辅导服务","url":"#关于如何吸引学生辅导服务","depth":2},{"value":"结论和最终想法","url":"#结论和最终想法","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"利用ChatGPT提供辅导服务赚钱的十种方法","datePublished":"2023-11-19T01:48:04.000Z","dateModified":"2023-11-19T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/chatgpt-teacher"},"language":"zh"},{"title":"OpenAI CEO Sam Altman 离职时间线","date":"2023-11-18T20:15:58.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"1 min read","minutes":0.57,"time":34200,"words":114},"slug":"short/openai","path":"blog/short/openai","filePath":"blog/short/openai.mdx","toc":[],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"OpenAI CEO Sam Altman 离职时间线","datePublished":"2023-11-18T20:15:58.000Z","dateModified":"2023-11-18T20:15:58.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/short/openai"},"language":"zh"},{"title":"ChatGPT引领你开启盈利博客的十种方式","date":"2023-11-18T01:48:04.000Z","tags":["ChatGPT"],"draft":false,"images":["/static/images/paste/87ff83c7e1826d52ff5fcc672ed688972347a7cec8e0e35acfb641ca8c4a5942.png"],"type":"Blog","readingTime":{"text":"13 min read","minutes":12.975,"time":778500,"words":2595},"slug":"ai/review-blog","path":"blog/ai/review-blog","filePath":"blog/ai/review-blog.mdx","toc":[{"value":"什么是评论博客?","url":"#什么是评论博客","depth":2},{"value":"ChatGPT 帮助开启盈利博客的 10 种方式","url":"#chatgpt-帮助开启盈利博客的-10-种方式","depth":2},{"value":"关于如何通过ChatGPT将写博客作为赚钱副业的想法","url":"#关于如何通过chatgpt将写博客作为赚钱副业的想法","depth":2},{"value":"终极策略","url":"#终极策略","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"ChatGPT引领你开启盈利博客的十种方式","datePublished":"2023-11-18T01:48:04.000Z","dateModified":"2023-11-18T01:48:04.000Z","image":"/static/images/paste/87ff83c7e1826d52ff5fcc672ed688972347a7cec8e0e35acfb641ca8c4a5942.png","url":"https://www.ifb.me/blog/ai/review-blog"},"language":"zh"},{"title":"ChatGPT DALL-E 的十种超酷使用姿势","date":"2023-11-17T01:48:04.000Z","tags":["ChatGPT"],"draft":false,"type":"Blog","readingTime":{"text":"10 min read","minutes":9.53,"time":571800,"words":1906},"slug":"ai/dall-e","path":"blog/ai/dall-e","filePath":"blog/ai/dall-e.mdx","toc":[{"value":"1. 孩子的私人老师","url":"#1-孩子的私人老师","depth":2},{"value":"2. 发挥你的想象力生成一张专属你的图片","url":"#2-发挥你的想象力生成一张专属你的图片","depth":2},{"value":"3. 用时尚设计彰显你的风格","url":"#3-用时尚设计彰显你的风格","depth":2},{"value":"4. 创作漫画故事","url":"#4-创作漫画故事","depth":2},{"value":"5. 尽情享受烹饪灵感","url":"#5-尽情享受烹饪灵感","depth":2},{"value":"6. 定制个性化卡片","url":"#6-定制个性化卡片","depth":2},{"value":"7. 为作家创造这个世界","url":"#7-为作家创造这个世界","depth":2},{"value":"8. 游戏开发头脑风暴","url":"#8-游戏开发头脑风暴","depth":2},{"value":"9. 踏上你的虚拟旅程","url":"#9-踏上你的虚拟旅程","depth":2},{"value":"10.可视化学习","url":"#10可视化学习","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"ChatGPT DALL-E 的十种超酷使用姿势","datePublished":"2023-11-17T01:48:04.000Z","dateModified":"2023-11-17T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/ai/dall-e"},"language":"zh"},{"title":"解码事务神秘:揭秘MySQL和Redis事务的差异","date":"2023-11-16T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.245,"time":254700,"words":849},"slug":"backend/mysql-redis-tran","path":"blog/backend/mysql-redis-tran","filePath":"blog/backend/mysql-redis-tran.mdx","toc":[{"value":"一、原子性","url":"#一原子性","depth":1},{"value":"MySQL - 原子性","url":"#mysql---原子性","depth":2},{"value":"Redis - 原子性","url":"#redis---原子性","depth":2},{"value":"二、持久性","url":"#二持久性","depth":1},{"value":"MySQL - 持久性","url":"#mysql---持久性","depth":2},{"value":"Redis - 持久性","url":"#redis---持久性","depth":2},{"value":"三、隔离性","url":"#三隔离性","depth":1},{"value":"MySQL - 隔离性","url":"#mysql---隔离性","depth":2},{"value":"读未提交 - Read Uncommitted","url":"#读未提交---read-uncommitted","depth":3},{"value":"读已提交 - Read Committed","url":"#读已提交---read-committed","depth":3},{"value":"可重复读 - Repeatable Read","url":"#可重复读---repeatable-read","depth":3},{"value":"序列化 - Serializable","url":"#序列化---serializable","depth":3},{"value":"Redis - 隔离性","url":"#redis---隔离性","depth":2},{"value":"四、小结","url":"#四小结","depth":1}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"解码事务神秘:揭秘MySQL和Redis事务的差异","datePublished":"2023-11-16T01:48:04.000Z","dateModified":"2023-11-16T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mysql-redis-tran"},"language":"zh"},{"title":"JVM提速利器:ZGC垃圾回收器的工作原理和应用","date":"2023-11-15T01:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"14 min read","minutes":13.35,"time":801000,"words":2670},"slug":"backend/zgc","path":"blog/backend/zgc","filePath":"blog/backend/zgc.mdx","toc":[{"value":"ZGC的原理","url":"#zgc的原理","depth":2},{"value":"配置ZGC","url":"#配置zgc","depth":2},{"value":"安装ZGC","url":"#安装zgc","depth":3},{"value":"配置ZGC","url":"#配置zgc","depth":3},{"value":"使用示例","url":"#使用示例","depth":2},{"value":"性能测试","url":"#性能测试","depth":2},{"value":"总结","url":"#总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"JVM提速利器:ZGC垃圾回收器的工作原理和应用","datePublished":"2023-11-15T01:48:04.000Z","dateModified":"2023-11-15T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/zgc"},"language":"zh"},{"title":"Spring Security 实战:手动验证用户身份的高级技巧","date":"2023-10-06T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.885,"time":233100,"words":777},"slug":"backend/manually-authenticate-user-with-spring-security","path":"blog/backend/manually-authenticate-user-with-spring-security","filePath":"blog/backend/manually-authenticate-user-with-spring-security.mdx","toc":[{"value":"1. 引言:为什么需要手动验证?","url":"#1-引言为什么需要手动验证","depth":2},{"value":"2. Spring Security 身份验证的核心概念","url":"#2-spring-security-身份验证的核心概念","depth":2},{"value":"3. 手动触发身份验证","url":"#3-手动触发身份验证","depth":2},{"value":"4. 在 Spring MVC 中持久化认证状态","url":"#4-在-spring-mvc-中持久化认证状态","depth":2},{"value":"5. 实战示例:自定义登录接口","url":"#5-实战示例自定义登录接口","depth":2},{"value":"6. 安全注意事项","url":"#6-安全注意事项","depth":2},{"value":"7. 总结","url":"#7-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring Security 实战:手动验证用户身份的高级技巧","datePublished":"2023-10-06T03:18:11.000Z","dateModified":"2023-10-06T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/manually-authenticate-user-with-spring-security"},"language":"zh"},{"title":"Jess 规则引擎和 JSR 94: 让你的 Java 应用更智能! 🧠","date":"2023-10-02T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"6 min read","minutes":5.2,"time":312000,"words":1040},"slug":"backend/jess-rule-engine-and-jsr-94","path":"blog/backend/jess-rule-engine-and-jsr-94","filePath":"blog/backend/jess-rule-engine-and-jsr-94.mdx","toc":[{"value":"Jess 规则引擎: 你的 Java 应用的超级大脑 🧠","url":"#jess-规则引擎-你的-java-应用的超级大脑-","depth":2},{"value":"动手实践: 让 Jess 为你的 Java 应用增添魔力 ✨","url":"#动手实践-让-jess-为你的-java-应用增添魔力-","depth":2},{"value":"1. Hello, Jess! 👋","url":"#1-hello-jess-","depth":3},{"value":"2. Jess 与 Java 对象的完美共舞 💃🕺","url":"#2-jess-与-java-对象的完美共舞-","depth":3},{"value":"JSR 94: 规则引擎的标准化接口 📏","url":"#jsr-94-规则引擎的标准化接口-","depth":2},{"value":"总结: Jess 和 JSR 94 能为你做什么? 🎁","url":"#总结-jess-和-jsr-94-能为你做什么-","depth":2},{"value":"思考题 🤔","url":"#思考题-","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Jess 规则引擎和 JSR 94: 让你的 Java 应用更智能! 🧠","datePublished":"2023-10-02T03:18:11.000Z","dateModified":"2023-10-02T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/jess-rule-engine-and-jsr-94"},"language":"zh"},{"title":"MySQL索引:程序员必备的性能优化利器 🚀","date":"2023-07-28T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.68,"time":220800,"words":736},"slug":"backend/mysql-index","path":"blog/backend/mysql-index","filePath":"blog/backend/mysql-index.mdx","toc":[{"value":"MySQL索引:让你的查询飞起来 🦅","url":"#mysql索引让你的查询飞起来-","depth":1},{"value":"索引的种类:各有千秋 🌈","url":"#索引的种类各有千秋-","depth":2},{"value":"索引的幕后英雄:B+树 🌳","url":"#索引的幕后英雄b树-","depth":2},{"value":"为什么MySQL钟情于B+树?❤️","url":"#为什么mysql钟情于b树️","depth":2},{"value":"揭秘SQL执行计划 🕵️‍♀️","url":"#揭秘sql执行计划-️️","depth":2},{"value":"索引失效的坑,你踩过吗?⚠️","url":"#索引失效的坑你踩过吗️","depth":2},{"value":"结语","url":"#结语","depth":1}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"MySQL索引:程序员必备的性能优化利器 🚀","datePublished":"2023-07-28T01:48:04.000Z","dateModified":"2023-07-28T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/mysql-index"},"language":"zh"},{"title":"掌握Java与Cassandra:打造高性能大数据解决方案","date":"2023-05-13T23:18:11.000Z","tags":["Java","Database"],"type":"Blog","readingTime":{"text":"5 min read","minutes":4.215,"time":252900,"words":843},"slug":"backend/cassandra","path":"blog/backend/cassandra","filePath":"blog/backend/cassandra.mdx","toc":[{"value":"Cassandra:为大数据而生的NoSQL数据库","url":"#cassandra为大数据而生的nosql数据库","depth":2},{"value":"Java与Cassandra:天作之合","url":"#java与cassandra天作之合","depth":2},{"value":"实战:用Java驾驭Cassandra的力量","url":"#实战用java驾驭cassandra的力量","depth":2},{"value":"性能优化技巧","url":"#性能优化技巧","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"掌握Java与Cassandra:打造高性能大数据解决方案","datePublished":"2023-05-13T23:18:11.000Z","dateModified":"2023-05-13T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/cassandra"},"language":"zh"},{"title":"Spring @Lookup 注解:动态依赖注入的秘密武器","date":"2023-05-02T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.94,"time":236400,"words":788},"slug":"backend/lookup-annotation-in-spring","path":"blog/backend/lookup-annotation-in-spring","filePath":"blog/backend/lookup-annotation-in-spring.mdx","toc":[{"value":"1. @Lookup 注解:动态依赖注入的魔法","url":"#1-lookup-注解动态依赖注入的魔法","depth":2},{"value":"2. @Lookup 实战:支付系统的华丽转身","url":"#2-lookup-实战支付系统的华丽转身","depth":2},{"value":"3. @Lookup 的独门绝技","url":"#3-lookup-的独门绝技","depth":2},{"value":"4. 使用 @Lookup 的注意事项","url":"#4-使用-lookup-的注意事项","depth":2},{"value":"5. 总结:@Lookup 注解的艺术","url":"#5-总结lookup-注解的艺术","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring @Lookup 注解:动态依赖注入的秘密武器","datePublished":"2023-05-02T03:18:11.000Z","dateModified":"2023-05-02T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/lookup-annotation-in-spring"},"language":"zh"},{"title":"揭秘 Drools 规则引擎的反向推理魔法","date":"2022-11-11T23:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.545,"time":212700,"words":709},"slug":"backend/an-example-of-backward-chaining-in-drools","path":"blog/backend/an-example-of-backward-chaining-in-drools","filePath":"blog/backend/an-example-of-backward-chaining-in-drools.mdx","toc":[{"value":"Drools:不只是规则引擎,更是你的AI助手","url":"#drools不只是规则引擎更是你的ai助手","depth":2},{"value":"正向VS反向:两种截然不同的思考方式","url":"#正向vs反向两种截然不同的思考方式","depth":2},{"value":"实战案例:用Drools证明\"长城属于地球\"","url":"#实战案例用drools证明长城属于地球","depth":2},{"value":"步骤1: 准备知识库","url":"#步骤1-准备知识库","depth":3},{"value":"步骤2: 编写魔法规则","url":"#步骤2-编写魔法规则","depth":3},{"value":"步骤3: 启动推理引擎","url":"#步骤3-启动推理引擎","depth":3}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"揭秘 Drools 规则引擎的反向推理魔法","datePublished":"2022-11-11T23:18:11.000Z","dateModified":"2022-11-11T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/an-example-of-backward-chaining-in-drools"},"language":"zh"},{"title":"SonarQube: 你的代码质量守护者","date":"2022-10-12T23:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"5 min read","minutes":4.165,"time":249900,"words":833},"slug":"backend/code-analysis-with-sonarqube","path":"blog/backend/code-analysis-with-sonarqube","filePath":"blog/backend/code-analysis-with-sonarqube.mdx","toc":[{"value":"SonarQube: 你的代码质量守护者","url":"#sonarqube-你的代码质量守护者","depth":2},{"value":"开始使用 SonarQube","url":"#开始使用-sonarqube","depth":2},{"value":"深入了解分析结果","url":"#深入了解分析结果","depth":2},{"value":"质量门禁: 你的代码质量守门员","url":"#质量门禁-你的代码质量守门员","depth":2},{"value":"将SonarQube集成到CI/CD流程","url":"#将sonarqube集成到cicd流程","depth":2},{"value":"结语: 迈向更好的代码质量","url":"#结语-迈向更好的代码质量","depth":2},{"value":"延伸阅读","url":"#延伸阅读","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"SonarQube: 你的代码质量守护者","datePublished":"2022-10-12T23:18:11.000Z","dateModified":"2022-10-12T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/code-analysis-with-sonarqube"},"language":"zh"},{"title":"🚀 PowerMock 终极指南:一篇文章搞定所有难题!","date":"2022-10-09T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.475,"time":208500,"words":695},"slug":"backend/powermock","path":"blog/backend/powermock","filePath":"blog/backend/powermock.mdx","toc":[{"value":"PowerMock: 单元测试的超级英雄 🦸‍♀️","url":"#powermock-单元测试的超级英雄-️","depth":2},{"value":"开始使用 PowerMock","url":"#开始使用-powermock","depth":2},{"value":"PowerMock 使用实战 💪","url":"#powermock-使用实战-","depth":2},{"value":"1. Mock 公有方法","url":"#1-mock-公有方法","depth":3},{"value":"2. Mock Final 方法","url":"#2-mock-final-方法","depth":3},{"value":"3. Mock 私有方法","url":"#3-mock-私有方法","depth":3},{"value":"4. Mock 静态方法","url":"#4-mock-静态方法","depth":3},{"value":"5. Mock 依赖对象","url":"#5-mock-依赖对象","depth":3},{"value":"PowerMock 使用小贴士 💡","url":"#powermock-使用小贴士-","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"🚀 PowerMock 终极指南:一篇文章搞定所有难题!","datePublished":"2022-10-09T03:18:11.000Z","dateModified":"2022-10-09T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/powermock"},"language":"zh"},{"title":"Java Stream:关还是不关?这是个问题 🤔","date":"2022-10-07T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.05,"time":183000,"words":610},"slug":"backend/should-we-close-a-java-stream","path":"blog/backend/should-we-close-a-java-stream","filePath":"blog/backend/should-we-close-a-java-stream.mdx","toc":[{"value":"引言:Stream的秘密生活 🕵️‍♂️","url":"#引言stream的秘密生活-️️","depth":2},{"value":"Stream:自动关闭还是手动关闭? 🚰","url":"#stream自动关闭还是手动关闭-","depth":2},{"value":"场景一:集合、数组和生成器的Stream 🧘‍♂️","url":"#场景一集合数组和生成器的stream-️","depth":3},{"value":"场景二:IO资源的Stream 🚨","url":"#场景二io资源的stream-","depth":3},{"value":"Stream关闭的黄金法则 🏆","url":"#stream关闭的黄金法则-","depth":2},{"value":"挑战你的理解 🧠","url":"#挑战你的理解-","depth":2},{"value":"结语:Stream智慧 🌊","url":"#结语stream智慧-","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Java Stream:关还是不关?这是个问题 🤔","datePublished":"2022-10-07T03:18:11.000Z","dateModified":"2022-10-07T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/should-we-close-a-java-stream"},"language":"zh"},{"title":"AspectJ 中的 Joinpoint 与 ProceedingJoinPoint: 掌控切面编程的关键","date":"2022-10-03T19:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.49,"time":209400,"words":698},"slug":"backend/joinpoint-vs.-proceedingjoinpoint-in-aspectj","path":"blog/backend/joinpoint-vs.-proceedingjoinpoint-in-aspectj","filePath":"blog/backend/joinpoint-vs.-proceedingjoinpoint-in-aspectj.mdx","toc":[{"value":"Joinpoint: 洞察方法执行的魔镜","url":"#joinpoint-洞察方法执行的魔镜","depth":2},{"value":"Joinpoint 的实战应用","url":"#joinpoint-的实战应用","depth":3},{"value":"ProceedingJoinPoint: 掌控方法执行的指挥棒","url":"#proceedingjoinpoint-掌控方法执行的指挥棒","depth":2},{"value":"ProceedingJoinPoint 的实战应用","url":"#proceedingjoinpoint-的实战应用","depth":3},{"value":"Joinpoint vs ProceedingJoinPoint: 如何选择?","url":"#joinpoint-vs-proceedingjoinpoint-如何选择","depth":2},{"value":"总结: 掌握 AspectJ,提升代码质量","url":"#总结-掌握-aspectj提升代码质量","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"AspectJ 中的 Joinpoint 与 ProceedingJoinPoint: 掌控切面编程的关键","datePublished":"2022-10-03T19:18:11.000Z","dateModified":"2022-10-03T19:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/joinpoint-vs.-proceedingjoinpoint-in-aspectj"},"language":"zh"},{"title":"Java文件操作的秘密武器:Paths.get()与Path.of()大比拼","date":"2022-10-03T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.87,"time":172200,"words":574},"slug":"backend/differences-between-paths.get-and-path.of","path":"blog/backend/differences-between-paths.get-and-path.of","filePath":"blog/backend/differences-between-paths.get-and-path.of.mdx","toc":[{"value":"揭秘Java文件路径操作的两大主角","url":"#揭秘java文件路径操作的两大主角","depth":2},{"value":"相同的目标,不同的外衣","url":"#相同的目标不同的外衣","depth":2},{"value":"时光机带我们回到过去","url":"#时光机带我们回到过去","depth":2},{"value":"命名的艺术","url":"#命名的艺术","depth":2},{"value":"如何选择?这是一个问题","url":"#如何选择这是一个问题","depth":2},{"value":"总结:新瓶装旧酒,但味道更佳","url":"#总结新瓶装旧酒但味道更佳","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Java文件操作的秘密武器:Paths.get()与Path.of()大比拼","datePublished":"2022-10-03T03:18:11.000Z","dateModified":"2022-10-03T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/differences-between-paths.get-and-path.of"},"language":"zh"},{"title":"Spring Security 登录后重定向魔法 🧙‍♂️ - 让不同用户飞向不同目的地!","date":"2022-10-02T23:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.915,"time":174900,"words":583},"slug":"backend/redirect-to-different-pages-after-login-with-spring-security","path":"blog/backend/redirect-to-different-pages-after-login-with-spring-security","filePath":"blog/backend/redirect-to-different-pages-after-login-with-spring-security.mdx","toc":[{"value":"🎭 角色不同,去处各异 - 你准备好了吗?","url":"#-角色不同去处各异---你准备好了吗","depth":2},{"value":"🛠️ 搭建我们的魔法工坊","url":"#️-搭建我们的魔法工坊","depth":2},{"value":"🧪 酝酿我们的魔法药水","url":"#-酝酿我们的魔法药水","depth":2},{"value":"🎩 施展我们的魔法","url":"#-施展我们的魔法","depth":2},{"value":"🤔 思考时间","url":"#-思考时间","depth":2},{"value":"🌟 总结","url":"#-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring Security 登录后重定向魔法 🧙‍♂️ - 让不同用户飞向不同目的地!","datePublished":"2022-10-02T23:18:11.000Z","dateModified":"2022-10-02T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/redirect-to-different-pages-after-login-with-spring-security"},"language":"zh"},{"title":"Spring Security 中的 Remember Me 功能 - 让用户体验更上一层楼! 🚀","date":"2022-10-01T03:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.495,"time":209700,"words":699},"slug":"backend/spring-security-remember-me","path":"blog/backend/spring-security-remember-me","filePath":"blog/backend/spring-security-remember-me.mdx","toc":[{"value":"🤔 你是否遇到过这样的困扰?","url":"#-你是否遇到过这样的困扰","depth":2},{"value":"💡 什么是 Remember Me?","url":"#-什么是-remember-me","depth":2},{"value":"🛠️ 如何配置 Remember Me?","url":"#️-如何配置-remember-me","depth":2},{"value":"🧐 Remember Me 是如何工作的?","url":"#-remember-me-是如何工作的","depth":2},{"value":"🎨 如何在登录表单中添加 Remember Me 选项?","url":"#-如何在登录表单中添加-remember-me-选项","depth":2},{"value":"🚀 实战测试","url":"#-实战测试","depth":2},{"value":"🤓 进阶技巧","url":"#-进阶技巧","depth":2},{"value":"🎭 结语","url":"#-结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring Security 中的 Remember Me 功能 - 让用户体验更上一层楼! 🚀","datePublished":"2022-10-01T03:18:11.000Z","dateModified":"2022-10-01T03:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/spring-security-remember-me"},"language":"zh"},{"title":"FFlow 流程编排指引","date":"2022-09-22T20:38:17.000Z","tags":["FFlow"],"draft":false,"type":"Blog","readingTime":{"text":"25 min read","minutes":24.36,"time":1461600,"words":4872},"slug":"fflow/fflow-guide","path":"blog/fflow/fflow-guide","filePath":"blog/fflow/fflow-guide.mdx","toc":[{"value":"配置约定和规范","url":"#配置约定和规范","depth":1},{"value":"缩写约定","url":"#缩写约定","depth":1},{"value":"节点级别支持的数据引用","url":"#节点级别支持的数据引用","depth":3},{"value":"流程定义","url":"#流程定义","depth":1},{"value":"流程字段描述","url":"#流程字段描述","depth":2},{"value":"流程输入字段描述 ","url":"#流程输入字段描述","depth":2},{"value":"示例","url":"#示例","depth":2},{"value":"触发器定义","url":"#触发器定义","depth":1},{"value":"触发器字段描述","url":"#触发器字段描述","depth":2},{"value":"触发器操作描述","url":"#触发器操作描述","depth":2},{"value":"触发器类型描述","url":"#触发器类型描述","depth":2},{"value":"START_WORKFLOW","url":"#start_workflow","depth":3},{"value":"RERUN_NODE/RESUME_NODE/RUN_NODE(暂不支持)/COMPLETE_NODE","url":"#rerun_noderesume_noderun_node暂不支持complete_node","depth":3},{"value":"示例","url":"#示例","depth":4},{"value":"节点定义","url":"#节点定义","depth":1},{"value":"节点字段描述","url":"#节点字段描述","depth":2},{"value":"节点类型定义","url":"#节点类型定义","depth":2},{"value":"SERVICE节点","url":"#service节点","depth":3},{"value":"Args通用字段描述","url":"#args通用字段描述","depth":4},{"value":"TRPC args字段描述","url":"#trpc-args字段描述","depth":4},{"value":"TRPC 协议示例","url":"#trpc-协议示例","depth":5},{"value":"TRPC_HTTP 协议示例","url":"#trpc_http-协议示例","depth":5},{"value":"HTTP args字段描述","url":"#http-args字段描述","depth":4},{"value":"示例","url":"#示例","depth":5},{"value":"FAAS args字段描述","url":"#faas-args字段描述","depth":4},{"value":"示例","url":"#示例","depth":5},{"value":"SWITCH节点","url":"#switch节点","depth":3},{"value":"字段描述","url":"#字段描述","depth":4},{"value":"示例","url":"#示例","depth":4},{"value":"EXCLUSIVE_JOIN节点","url":"#exclusive_join节点","depth":3},{"value":"示例","url":"#示例","depth":4},{"value":"TRANSFORM节点","url":"#transform节点","depth":3},{"value":"示例","url":"#示例","depth":4},{"value":"FORK节点","url":"#fork节点","depth":3},{"value":"字段描述","url":"#字段描述","depth":4},{"value":"示例","url":"#示例","depth":4},{"value":"JOIN节点","url":"#join节点","depth":3},{"value":"示例","url":"#示例","depth":4},{"value":"SUB_WORKFLOW节点","url":"#sub_workflow节点","depth":3},{"value":"字段描述","url":"#字段描述","depth":4},{"value":"示例","url":"#示例","depth":4},{"value":"ASSIGN节点","url":"#assign节点","depth":3},{"value":"字段描述","url":"#字段描述","depth":4},{"value":"REF节点","url":"#ref节点","depth":3},{"value":"字段描述","url":"#字段描述","depth":4},{"value":"WAIT节点","url":"#wait节点","depth":3},{"value":"示例","url":"#示例","depth":4},{"value":"附录","url":"#附录","depth":2},{"value":"表达式编写指南","url":"#表达式编写指南","depth":3},{"value":"一、内置表达式方法","url":"#一内置表达式方法","depth":4}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"FFlow 流程编排指引","datePublished":"2022-09-22T20:38:17.000Z","dateModified":"2022-09-22T20:38:17.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/fflow/fflow-guide"},"language":"zh"},{"title":"Spring Shell CLI 使用指南","date":"2022-09-19T23:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.14,"time":188400,"words":628},"slug":"backend/a-cli-with-spring-shell","path":"blog/backend/a-cli-with-spring-shell","filePath":"blog/backend/a-cli-with-spring-shell.mdx","toc":[{"value":"1. 概述","url":"#1-概述","depth":2},{"value":"2. Maven依赖","url":"#2-maven依赖","depth":2},{"value":"3. 访问Shell","url":"#3-访问shell","depth":2},{"value":"4. 创建命令","url":"#4-创建命令","depth":2},{"value":"4.1 添加自定义命令","url":"#41-添加自定义命令","depth":3},{"value":"4.2 命令可用性控制","url":"#42-命令可用性控制","depth":3},{"value":"4.3 必需参数","url":"#43-必需参数","depth":3},{"value":"4.4 默认参数","url":"#44-默认参数","depth":3},{"value":"4.5 帮助信息","url":"#45-帮助信息","depth":3},{"value":"5. Shell定制","url":"#5-shell定制","depth":2},{"value":"6. 类型转换","url":"#6-类型转换","depth":2},{"value":"7. 总结","url":"#7-总结","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Spring Shell CLI 使用指南","datePublished":"2022-09-19T23:18:11.000Z","dateModified":"2022-09-19T23:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/a-cli-with-spring-shell"},"language":"zh"},{"title":"🚀 RocketMQ: 不得不了解的消息中间件","date":"2022-07-31T01:20:04.000Z","tags":["MQ"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.345,"time":200700,"words":669},"slug":"backend/rocketmq","path":"blog/backend/rocketmq","filePath":"blog/backend/rocketmq.mdx","toc":[{"value":"🌟 RocketMQ 的诞生","url":"#-rocketmq-的诞生","depth":2},{"value":"🏗️ 核心架构","url":"#️-核心架构","depth":2},{"value":"💡 RocketMQ 的独特优势","url":"#-rocketmq-的独特优势","depth":2},{"value":"🤨 有优势就有劣势?","url":"#-有优势就有劣势","depth":2},{"value":"🔬 技术原理深度剖析","url":"#-技术原理深度剖析","depth":2},{"value":"如何实现高吞吐?","url":"#如何实现高吞吐","depth":3},{"value":"主从同步有何妙招?","url":"#主从同步有何妙招","depth":3},{"value":"🛒 应用场景","url":"#-应用场景","depth":2},{"value":"🔮 未来展望: 存算分离","url":"#-未来展望-存算分离","depth":2},{"value":"🥊 RocketMQ vs Kafka","url":"#-rocketmq-vs-kafka","depth":2},{"value":"🤔 思考题","url":"#-思考题","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"🚀 RocketMQ: 不得不了解的消息中间件","datePublished":"2022-07-31T01:20:04.000Z","dateModified":"2022-07-31T01:20:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/rocketmq"},"language":"zh"},{"title":"Gradle 测试跳过大法 🏃‍♂️💨 - 让你的构建飞起来!","date":"2022-07-30T19:18:11.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.82,"time":169200,"words":564},"slug":"backend/skipping-tests-with-gradle","path":"blog/backend/skipping-tests-with-gradle","filePath":"blog/backend/skipping-tests-with-gradle.mdx","toc":[{"value":"🤔 为什么要跳过测试?","url":"#-为什么要跳过测试","depth":2},{"value":"💡 命令行魔法: 一键跳过测试","url":"#-命令行魔法-一键跳过测试","depth":2},{"value":"🧙‍♂️ Gradle脚本: 更灵活的跳过方式","url":"#️-gradle脚本-更灵活的跳过方式","depth":2},{"value":"🤓 小贴士","url":"#-小贴士","depth":2},{"value":"🤔 思考题","url":"#-思考题","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Gradle 测试跳过大法 🏃‍♂️💨 - 让你的构建飞起来!","datePublished":"2022-07-30T19:18:11.000Z","dateModified":"2022-07-30T19:18:11.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/skipping-tests-with-gradle"},"language":"zh"},{"title":"程序员必备网络知识图谱 🌐","date":"2022-07-28T01:48:04.000Z","tags":["Java"],"draft":false,"type":"Blog","readingTime":{"text":"3 min read","minutes":2.61,"time":156600,"words":522},"slug":"backend/network","path":"blog/backend/network","filePath":"blog/backend/network.mdx","toc":[{"value":"TCP/IP 网络模型:四层架构的秘密 🏗️","url":"#tcpip-网络模型四层架构的秘密-️","depth":2},{"value":"应用层:HTTP 的进化之路 🚀","url":"#应用层http-的进化之路-","depth":2},{"value":"HTTP/1.1 vs HTTP/2.0:谁更胜一筹?","url":"#http11-vs-http20谁更胜一筹","depth":3},{"value":"实现\"推\"的艺术 🏓","url":"#实现推的艺术-","depth":3},{"value":"传输层:TCP 的秘密花园 🌺","url":"#传输层tcp-的秘密花园-","depth":2},{"value":"TCP 的握手与挥手:优雅的协议舞蹈","url":"#tcp-的握手与挥手优雅的协议舞蹈","depth":3},{"value":"TCP 连接状态的困扰","url":"#tcp-连接状态的困扰","depth":3},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"程序员必备网络知识图谱 🌐","datePublished":"2022-07-28T01:48:04.000Z","dateModified":"2022-07-28T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/network"},"language":"zh"},{"title":"Redis 知识宝库 - 从入门到精通 🚀","date":"2022-07-27T01:48:04.000Z","tags":["Database"],"draft":false,"type":"Blog","readingTime":{"text":"4 min read","minutes":3.965,"time":237900,"words":793},"slug":"backend/redis","path":"blog/backend/redis","filePath":"blog/backend/redis.mdx","toc":[{"value":"Redis - 你的高性能数据库好帮手 💪","url":"#redis---你的高性能数据库好帮手-","depth":1},{"value":"为什么需要 Redis? 🤔","url":"#为什么需要-redis-","depth":2},{"value":"Redis 的超能力 🦸‍♂️","url":"#redis-的超能力-️","depth":2},{"value":"Redis 的应用场景 🎯","url":"#redis-的应用场景-","depth":2},{"value":"Redis 的核心特性 🔍","url":"#redis-的核心特性-","depth":2},{"value":"1. 数据结构","url":"#1-数据结构","depth":3},{"value":"2. 持久化","url":"#2-持久化","depth":3},{"value":"3. 主从复制","url":"#3-主从复制","depth":3},{"value":"4. Redis Cluster","url":"#4-redis-cluster","depth":3},{"value":"Redis 的实战技巧 💡","url":"#redis-的实战技巧-","depth":2},{"value":"结语","url":"#结语","depth":2}],"structuredData":{"@context":"https://schema.org","@type":"BlogPosting","headline":"Redis 知识宝库 - 从入门到精通 🚀","datePublished":"2022-07-27T01:48:04.000Z","dateModified":"2022-07-27T01:48:04.000Z","image":"/static/images/twitter-card.png","url":"https://www.ifb.me/blog/backend/redis"},"language":"zh"}]