diff --git a/2024/2024-03-22.html b/2024/2024-03-22.html index fbf766a8..de15c182 100644 --- a/2024/2024-03-22.html +++ b/2024/2024-03-22.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 数据结构与算法

# javascript

# java

# php

# python

# 运维

# 移动开发

# c/c++

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-面试

# 前端-React.js

# 前端-Node.js

# 前端-CSS

# 前端-后端

# 前端-TypeScript

# 前端-前端框架

# 前端-GitHub

# 前端-Webpack

# 前端-NestJS

# 前端-微信小程序

# 后端

# Android

  • Android FD水位监控实现原理 (opens new window): 前言 在操作系统中,任何资源的使用都是受限制的,诸如进程数量、fd最大数量、信号缓存数量都是受到限制的。对于FD而言,FD不足可能引发OOM,其他情况下,还会造成Socket网络连接打开失败、进程无法----👍🏻点赞量:25
  • Flutter 知识集锦 | extension 拓展类方法 (opens new window): Dart 的拓展类方法已经支持很久了,之前忘了写篇文章介绍一下。最近写了几个拓展方法,借此机会,好好介绍一下 extension 关键字对类的拓展。 1. 从密文的字符串开始说起 比如现在有个需求: ----👍🏻点赞量:21
  • Android 纯代码布局编写手游sdk (opens new window): 前言 : 最近因为公司需求 上Google被查的很严, 所以就想着把代码重构 然后写布局也改成用代码写,所以就写了一个demo 然后我这边就想着 分享给各位同学 具体实现: 精简View的Base封装----👍🏻点赞量:12
  • Flutter & GLSL#8 | 乘法与矩形 (opens new window): 张风捷特烈 Flutter & GLSL 系列文章: 《Flutter & GLSL#1 | Shader 让绘制无限强大》 《Flutter & GLSL#2 | 从坐标到颜色》 《Flutter ----👍🏻点赞量:10
  • Android 基于绘制缓冲的代码雨效果 (opens new window): 前言 看过很多代码雨的前端实现,却很少看到过Android代码雨效果的实现,当然 open gl es的实现是有的。一个主要的原因是,在Android Canvas绘制时,很少有人考虑使用绘制缓冲,我----👍🏻点赞量:15
  • Compose编程思想 -- 初识Compose (opens new window): 本文主要介绍了JetPack Compose中常用的一些组件,以及Compose设计的一些小思路,通过本文的学习,可以动手简单写一些简单的页面。----👍🏻点赞量:7
  • Flutter鸿蒙终端一体化—鹊桥相会 (opens new window): 在鸿蒙中开发Flutter项目,一个最大的问题,就是「不太会写鸿蒙代码」,这对于一个Flutter开发者来说,虽然不是一件很麻烦的事,但由于现在鸿蒙的版本和文档还略有一些混乱,所以要写好还是有一些麻烦----👍🏻点赞量:9
  • 【面试基础】读写多个大文件,有哪些优化方案? (opens new window): 面试官:假如我们对客户端的一些日志信息需要写入文件,然后把文件上传云端。在这种场景中有大量的文件读写操作,你有什么优化方案?----👍🏻点赞量:16

# IOS

# GitHub

# javascript

  • obsidianmd/jsoncanvas (opens new window): An open file format for infinite canvas data.----总⭐️1,787; 今日⭐️255
  • plankanban/planka (opens new window): The realtime kanban board for workgroups built with React and Redux.----总⭐️5,971; 今日⭐️1,657
  • projectdiscovery/nuclei-templates (opens new window): Community curated list of templates for the nuclei engine to find security vulnerabilities.----总⭐️7,859; 今日⭐️43
  • sunner/ChatALL (opens new window): Concurrently chat with ChatGPT, Bing Chat, Bard, Alpaca, Vicuna, Claude, ChatGLM, MOSS, 讯飞星火, 文心一言 and more, discover the best answers----总⭐️13,566; 今日⭐️171
  • usebruno/bruno (opens new window): Opensource IDE For Exploring and Testing Api's (lightweight alternative to postman/insomnia)----总⭐️16,992; 今日⭐️1,159
  • songquanpeng/one-api (opens new window): OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.----总⭐️11,742; 今日⭐️420
  • Significant-Gravitas/AutoGPT (opens new window): AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters.----总⭐️159,749; 今日⭐️727
  • catvod/CatVodOpen (opens new window): Open version of catvod.----总⭐️2,076; 今日⭐️81
  • nodejs/node (opens new window): Node.js JavaScript runtime ✨🐢🚀✨----总⭐️102,683; 今日⭐️332
  • WebGoat/WebGoat (opens new window): WebGoat is a deliberately insecure application----总⭐️6,424; 今日⭐️51

# vue

# typescript

  • tiangolo/full-stack-fastapi-template (opens new window): Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.----总⭐️21,094; 今日⭐️5,297
  • teableio/teable (opens new window): ✨ A Super fast, Real-time, Professional, Developer friendly, No code database----总⭐️4,353; 今日⭐️2,130
  • clash-verge-rev/clash-verge-rev (opens new window): Continuation of Clash Verge - A Clash Meta GUI based on Tauri (Windows, MacOS, Linux)----总⭐️13,787; 今日⭐️1,725
  • superagent-ai/superagent (opens new window): 🥷 Run AI-agents with an API----总⭐️4,126; 今日⭐️116
  • Project-DARC/DARC (opens new window): Decentralized Autonomous Regulated Company (DARC), a company virtual machine that runs on any EVM-compatible blockchain, with on-chain law system, multi-level tokens and dividends mechanism.----总⭐️8,364; 今日⭐️1,455
  • enricoros/big-AGI (opens new window): Generative AI suite powered by the newest LLMs. Bundling AI personas, AGI functions, text-to-image, voice, response streaming, code highlighting and execution, PDF import, presets for developers, much more. Deploy on-prem or in the cloud.----总⭐️3,270; 今日⭐️183
  • fdundjer/solana-sniper-bot (opens new window): Solana Sniper Bot - Proof of Concept----总⭐️267; 今日⭐️125
  • vercel/ai-chatbot (opens new window): A full-featured, hackable Next.js AI chatbot built by Vercel----总⭐️4,340; 今日⭐️127
  • Deeptrain-Community/chatnio (opens new window): 🚀 Next Generation AI One-Stop Internationalization Solution. 🚀 下一代 AI 一站式 B/C 端解决方案,支持 OpenAI,Midjourney,Claude,讯飞星火,Stable Diffusion,DALL·E,ChatGLM,通义千问,腾讯混元,360 智脑,百川 AI,火山方舟,新必应,Gemini,Moonshot 等模型,支持对话分享,自定义预设,云端同步,模型市场,支持弹性计费和订阅计划模式,支持图片解析,支持联网搜索,支持模型缓存,丰富美观的后台管理与仪表盘数据统计。----总⭐️2,020; 今日⭐️394
  • solana-labs/solana-web3.js (opens new window): Solana JavaScript SDK----总⭐️1,731; 今日⭐️57

# python

# go

# rust

# object-c

# css

- + diff --git a/2024/2024-03-29.html b/2024/2024-03-29.html index 8447c24c..f27ab715 100644 --- a/2024/2024-03-29.html +++ b/2024/2024-03-29.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 数据结构与算法

# javascript

# java

# php

# python

# 运维

# 移动开发

# c/c++

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-面试

# 前端-React.js

# 前端-Node.js

# 前端-CSS

# 前端-后端

# 前端-TypeScript

# 前端-前端框架

# 前端-GitHub

# 前端-Webpack

# 前端-微信小程序

# 前端-NestJS

# 后端

# Android

# IOS

# GitHub

# javascript

# vue

# typescript

# python

# go

# rust

# object-c

# css

- + diff --git a/2024/2024-04-07.html b/2024/2024-04-07.html index cd409bbf..3604ad0e 100644 --- a/2024/2024-04-07.html +++ b/2024/2024-04-07.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 数据结构与算法

# javascript

# java

# php

# python

# 运维

# 移动开发

# c/c++

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-面试

  • "作为一名学前端的我,如何实现渲染十万条数据?" (opens new window): 在我的项目中,有时需要展示上万条甚至十万条数据,而如何在保证性能的前提下高效地渲染这些数据成为了我面临的难题。在经过一段时间的摸索和实践后,我积累了一些经验和技巧,现在我将这些分享给大家。----👍🏻点赞量:48
  • 防抖和节流 (opens new window): 防抖(debounce)和节流(throttle)是两种常用的优化高频触发事件的方法。> 防抖:当持续触发事件时,一定时间段内没有再触发事件,函数才会执行一次,如果在这个时间段内又触发了事件,则会重新----👍🏻点赞量:9
  • Promise从0到手写 (opens new window): promise是个面试热点问题,基本上百分百会被问到,并且是你每天都需要用上的方法,面试中,面试官会让你手写一个promise方法源码,promise身上所有的方法你都需要彻底搞明白 在介绍pr----👍🏻点赞量:32
  • JSSDK开发思路,基于RollupJS记录 (opens new window): 背景 项目需要开发一个发版通知插件,同时公司项目属于乾坤架构的微前端应用,涉及多个子应用,如果每个项目都写一遍逻辑,在修改时可能会重复修改多个项目,于是想着能不能通过开发一个插件,对项目侵入最少方式,----👍🏻点赞量:5
  • LocalStorage 还能这么用??? (opens new window): 通过本文自查下localStorage你真的用明白了吗?你能学到 优雅的 Storage 工具如何封装(前缀key、加密存储、过期时间,ts封装等) localStorage 真实存储大小/存储统计----👍🏻点赞量:40
  • 掌握JavaScript:多种方法生成二维数组 (opens new window): 本文深入探讨JavaScript中生成一维和二维数组的多种方法,从基础到进阶,通俗易懂,适合各层次开发者。旨在提升对数组操作的理解和灵活运用能力。----👍🏻点赞量:5
  • 一组解决常见设计问题的 CSS 片段和技巧 (opens new window): 一组解决常见设计问题的 CSS 片段和技巧 例如: 此 CSS 代码段以具有该类的元素为目标.button,并将背景颜色设置为#f1f1f1。 代码片段可以是简单的一行,也可以是选择器、属性和值的更复----👍🏻点赞量:3
  • 领悟页面加载原理,成为恋爱高手:一篇不可错过的对线指南 (opens new window): 我们都羡慕😮那些工作爱情双丰收的家伙,岂可修,事业好就算了,还有狗粮满满的爱情,😭让我们这些修狗有何颜面存活下去。 为此,有没有想过,人的精力是有限的,他们又是如何修炼的🤔。来看我如何从页面加载----👍🏻点赞量:5

# 前端-React.js

# 前端-Node.js

# 前端-CSS

# 前端-后端

# 前端-TypeScript

# 前端-Webpack

# 前端-GitHub

  • 一款好用到爆的可视化拖拽库 (opens new window): 嗨,大家好,我是徐小夕,之前一直在研究可视化零代码相关的技术实践,也做了很多可视化搭建的产品,比如: H5-Dooring(页面可视化搭建平台) V6.Dooring(数据大屏可视化平台) formM----👍🏻点赞量:12
  • 造轮子之大数浮点数计算 (opens new window): JavaScript浮点数溢出问题及其解决方案的开源库介绍 在JavaScript中,浮点数溢出是一个常见且棘手的问题。这主要是由于JavaScript使用IEEE 754双精度浮点数格式来表示数字,----👍🏻点赞量:1
  • AIGC 正在吞噬互联网的内容创作?! (opens new window): 你们有没有想过,我们正在目睹着互联网的衰亡? 就在上个月(2024年3月),Reddit 即将以 65 亿美元估值公开上市。Reddit 此次 IPO 或许是......----👍🏻点赞量:11
  • git添加多个远程仓库 (opens new window): 1.查看远程仓库 没有仓库时: 2.添加第一个远程仓库 使用命令(仓库名一般都是origin): 注意这里的仓库地址更换成你自己的地址 再次查看 3.添加第二个远程仓库 如果我们直接添加,会报这个错误----👍🏻点赞量:3
  • 如果快速搭建一个可以用于全球收款的web应用? (opens new window): ​ 其实github和网上有很多开源或者付费的模版,可以用户全球化页面的搭建。 但是这些基本都是外国人开发的,中文生态很不友好。小编今天就推荐一个GitHub上的由国人开源的新项目。该项目3月26日开----👍🏻点赞量:7
  • git删除某次commit的代码 (opens new window): 1.问题背景 主要是同事的代码合并到了dev分支,然后自己的代码也合并到了dev分支,但是其中有一个commit不想要,因为这次commit是一个功能,但是暂时是不需要上线的,所以需要把这个commi----👍🏻点赞量:5
  • 使用 GitHub actions 自动部署 gf 项目 (opens new window): 首先来说需要实现一种什么效果 当我们写完代码打上 git tag 推送到 GitHub 仓库时自动触发 GitHub actions 工作流,将项目打包并自动发布更新----👍🏻点赞量:2
  • react+canvas实现手写签名组件 (opens new window): 长话短说,一个简单而纯粹的手写签名组件,采用纯canvas+react的写法,把扩展性握在自己的手里!----👍🏻点赞量:3

# 前端-前端框架

# 前端-架构

# 前端-微信小程序

  • 微信使用uniapp进行小程序分包 (opens new window): 小程序编译后非常容易超过2m的限制体积,但分包后的小程序体积能达到20m,非常实用,记录一下分包过程----👍🏻点赞量:3
  • 微信小程序速览 (opens new window): 前提条件 会scss 明白vw,vh的意思 会vue 会es6语法, 会ts 小程序代码文件构成 ts文件: 实现主要代码逻辑 wxml文件: 实现页面/组件视图 scss文件: 实现页面/组件引入 ----👍🏻点赞量:0
  • uniapp小程序开发 (opens new window): 很久没发文章了,一直都没有时间去总结,去年随便投了两家宁波的公司,本来是抱着试一试的心理,没想到刚去宁波第一个面试就过了,然后也懒得找,就同意了,我记得当时要的是1w,然后被老板一顿忽悠,一直画大饼,----👍🏻点赞量:3
  • 微信小程序接入lottie动画 (opens new window): 需要把lottie动画在小程序的环境下进行展示,不失真,本地path,使用lottie-miniprogram库。----👍🏻点赞量:0

# 后端

# Android

# IOS

# GitHub

# javascript

# vue

# typescript

  • developersdigest/llm-answer-engine (opens new window): Build a Perplexity-Inspired Answer Engine Using Next.js, Groq, Mixtral, Langchain, OpenAI, Brave & Serper----总⭐️2,756; 今日⭐️1,401
  • midday-ai/midday (opens new window): Run your business smarter 🪄----总⭐️2,029; 今日⭐️670
  • kamranahmedse/developer-roadmap (opens new window): Interactive roadmaps, guides and other educational content to help developers grow in their careers.----总⭐️272,240; 今日⭐️1,644
  • upscayl/upscayl (opens new window): 🆙 Upscayl - Free and Open Source AI Image Upscaler for Linux, MacOS and Windows built with Linux-First philosophy.----总⭐️25,501; 今日⭐️1,604
  • janhq/jan (opens new window): Jan is an open source alternative to ChatGPT that runs 100% offline on your computer----总⭐️16,189; 今日⭐️1,964
  • LLM-Red-Team/kimi-free-api (opens new window): 🚀 KIMI AI 长文本大模型白嫖服务,支持高速流式输出、联网搜索、长文档解读、图像解析、多轮对话,零配置部署,多路token支持,自动清理会话痕迹。----总⭐️1,221; 今日⭐️421
  • semanser/codel (opens new window): ✨ Fully autonomous AI Agent that can perform complicated tasks and projects using terminal, browser, and editor.----总⭐️1,681; 今日⭐️364
  • danny-avila/LibreChat (opens new window): Enhanced ChatGPT Clone: Features OpenAI, Assistants API, Azure, Groq, GPT-4 Vision, Mistral, Bing, Anthropic, OpenRouter, Google Gemini, AI model switching, message search, langchain, DALL-E-3, ChatGPT Plugins, OpenAI Functions, Secure Multi-User System, Presets, completely open-source for self-hosting. More features in development----总⭐️9,408; 今日⭐️234
  • apache/superset (opens new window): Apache Superset is a Data Visualization and Data Exploration Platform----总⭐️58,412; 今日⭐️464
  • Expensify/App (opens new window): Welcome to New Expensify: a complete re-imagination of financial collaboration, centered around chat. Help us build the next generation of Expensify by sharing feedback and contributing to the code.----总⭐️2,887; 今日⭐️127

# python

# go

# rust

# object-c

# css

- + diff --git a/2024/2024-04-12.html b/2024/2024-04-12.html index 05c4a9a4..f764ac04 100644 --- a/2024/2024-04-12.html +++ b/2024/2024-04-12.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 数据结构与算法

# javascript

# java

# php

# python

# 运维

# 移动开发

# c/c++

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-面试

# 前端-React.js

# 前端-Node.js

# 前端-CSS

  • 下一代 CSS 框架:Mojo CSS (opens new window): Mojo CSS 定位为下一代原子级 CSS 框架。它于 2023 年发布,该框架的工作原理是扫描你的代码并实时创建 CSS 视觉效果,而无需你编写新的 CSS 代码。----👍🏻点赞量:76
  • 接私活神器:1200+ 免费开源模板!!! (opens new window): 经常接私活或者搭建过一些个人站点或和博客的前端同学应该都深有体会: 缺乏精美的设计和交互会让网站显得平淡无奇!!! 🌟 感觉个人制作网站超级头疼??? 别担心,HTMLrev 来帮你轻松搞定!!! 什----👍🏻点赞量:72
  • CSS实现一个故障时钟效果 (opens new window): 起因 最近公司事情不是太多,我趁着这段时间在网上学习一些Cool~的效果。今天我想和大家分享一个故障时钟的效果。很多时候,一个效果开始看起来很难,但是当你一步步摸索之后,就会发现其实它们只是由一些简单----👍🏻点赞量:27
  • 一组解决常见设计问题的 CSS 片段和技巧 (opens new window): 一组解决常见设计问题的 CSS 片段和技巧 例如: 此 CSS 代码段以具有该类的元素为目标.button,并将背景颜色设置为#f1f1f1。 代码片段可以是简单的一行,也可以是选择器、属性和值的更复----👍🏻点赞量:6
  • Web隐藏术 (opens new window): 在Web 页面或 Web 应用程序的开发中,有些元素是需要被隐藏起来。让一个元素隐藏起来的实现方案会有很多种,只不过每种不同的技术方案实现的原理和最终呈现给用户的渲染方式会有所不同。----👍🏻点赞量:16
  • 你真的了解z-index吗?z-index为什么有时候会失效? (opens new window): 当涉及到层叠顺序时,z-index 属性是非常重要的,它可以用来控制定位元素及其后代元素或 flex 项目的 Z 轴顺序。较大的 z-index 值会使元素位于 Z 轴上更靠近观察者,因此会覆盖具有较----👍🏻点赞量:6
  • 【现代 CSS】标准滚动条控制规范 scrollbar-color 和 scrollbar-width (opens new window): Chrome 在 121 版本开始,原生支持了两个滚动条样式相关的样式 scrollbar-color 和 scrollbar-width。 要知道,在此前,虽然有 ::-webkit-scrollb----👍🏻点赞量:14
  • CSS Tips:圆形文本排版 (opens new window): 在 Web 设计中,圆形文本排版则是一种独特而引人注目的设计技巧,它能够为 Web 页面注入一份别致和趣味。通过 CSS 变换、自定义属性、三角函数和 SVG 多种不同姿势来实现圆形文本排版效果!----👍🏻点赞量:7

# 前端-后端

# 前端-TypeScript

# 前端-GitHub

# 前端-前端框架

# 前端-Webpack

# 前端-架构

# 前端-微信小程序

# 后端

# Android

# IOS

# GitHub

# javascript

# vue

  • zyronon/douyin (opens new window): TikTok 抖音 Vue.js----总⭐️2,837; 今日⭐️967
  • CorentinTh/it-tools (opens new window): Collection of handy online tools for developers, with great UX.----总⭐️9,667; 今日⭐️342
  • sugarforever/chat-ollama (opens new window): ChatOllama is an open source chatbot based on LLMs. It supports a wide range of language models, and knowledge base management.----总⭐️1,101; 今日⭐️244
  • hakadao/BewlyBewly (opens new window): Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. (English | 简体中文 | 正體中文 | 廣東話)----总⭐️1,925; 今日⭐️292
  • imsyy/home (opens new window): 个人主页,我的个人主页,个人主页源码,主页模板,homepage----总⭐️2,282; 今日⭐️78
  • jason5ng32/MyIP (opens new window): The best IP Toolbox. Easy to check what's your IPs, IP geolocation, check for DNS leaks, examine WebRTC connections, speed test, ping test, MTR test, check website availability and more! || 🇨🇳 可能是最好用的IP工具箱。轻松检查你的 IP,IP 地理位置,检查DNS泄漏,检查 WebRTC 连接,速度测试,ping 测试,MTR测试,检查网站可用性等等。----总⭐️4,001; 今日⭐️254
  • ParisNeo/lollms-webui (opens new window): Lord of Large Language Models Web User Interface----总⭐️3,711; 今日⭐️39
  • qier222/YesPlayMusic (opens new window): 高颜值的第三方网易云播放器,支持 Windows / macOS / Linux----总⭐️26,902; 今日⭐️123
  • viarotel-org/escrcpy (opens new window): 📱 Graphical Scrcpy to display and control Android, devices powered by Electron. | 使用图形化的 Scrcpy 显示和控制您的 Android 设备,由 Electron 驱动。----总⭐️1,272; 今日⭐️137
  • crmeb/CRMEB (opens new window): 🔥CRMEB开源商城免费开源多语言商城系统,Tp6框架商城,系统可商用;包含小程序商城、H5商城、公众号商城、PC商城、App,支持分销、拼团、砍价、秒杀、优惠券、积分、会员等级、小程序直播、页面DIY,前后端分离,方便二开,更有详细使用文档、接口文档、数据字典、二开文档/视频教程,欢迎大家提出宝贵意见和建议----总⭐️4,762; 今日⭐️41

# typescript

# python

# go

# rust

# object-c

# css

- + diff --git a/2024/2024-04-19.html b/2024/2024-04-19.html index dd3776ec..c32d7fca 100644 --- a/2024/2024-04-19.html +++ b/2024/2024-04-19.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 数据结构与算法

# javascript

# java

# php

# python

# 运维

# 移动开发

# c/c++

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-面试

# 前端-React.js

# 前端-Node.js

# 前端-CSS

# 前端-后端

# 前端-TypeScript

# 前端-GitHub

# 前端-Webpack

# 前端-前端框架

# 前端-架构

  • 深入理解Transformer技术原理 | 得物技术 (opens new window): 谷歌在2017年发布Transformer架构的论文时,论文的标题是:Attention Is All You Need。重点说明了这个架构是基于注意力机制的。----👍🏻点赞量:9
  • EMP3.0-基于Rust生态打造的高性能前端构建系统 (opens new window): EMP3基于Rspack、new Module Federation、Lightningcss、Biome等前沿技术进行重构,实现了性能的飞跃性提升和功能的全面扩展。----👍🏻点赞量:8
  • Canvas简历编辑器-Monorepo+Rspack工程实践 (opens new window): 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下在多个子项目的情况下,借助于Monorepo+Rspack管理的项目最佳实践。----👍🏻点赞量:15
  • 前端工程化之代码规范 (opens new window): 前端工程化是指将前端开发流程标准化、自动化和模块化的过程。实际项目中根据需求和团队情况可能会有所不同。前端工程化是一个很大的话题,并不局限于上述列举的部分,主要目的是,前端工程化通过引入模块化。。。。----👍🏻点赞量:2
  • Node 包管理工具进化历程 (opens new window): 我们每天都在接触 xxx install 来安装依赖,其中包管理器是必不可少的工具,它从最初的 NPM 发展到 Yarn、Pnpm、Bun 百花齐放,这篇文章将带大家探索包管理器的发展历程和原理。----👍🏻点赞量:3
  • 前端依赖注入的探索和实践 (opens new window): 随着前端领域快速发展,前端不再停留于“切图”,直接开发逻辑已经很难 hold 住现在的前端项目。而在后端领域已经很成熟的架构设计思想,整洁架构,DDD,控制反转等,正好能够应对前端项目当前面临的问题。----👍🏻点赞量:2
  • Vite优化方案 (opens new window): 其实优化的主要难点还是从哪里开始去优化,如果不清楚自己的项目问题出现在哪里,就显得比较盲目,不知道优化哪里,那在优化之前我们先分析一下我文件依赖----👍🏻点赞量:1
  • 两分钟构建你自己的前端脚手架 (opens new window): Swift-Core 是一个用于构建命令行界面(CLI)应用的工具包,可以帮助你快速搭建 CLI 脚手架下载器。要开始使用,你需要: 1. 配置你的仓库地址 对于 GitHub 个人账号:打开你的仓库----👍🏻点赞量:2

# 前端-微信小程序

# 后端

# Android

# IOS

  • iOS 隐私协议清单整理 (opens new window): iOS 隐私协议清单配置流程。 创建PrivacyInfo文件 File -> Resource下选择App Privacy 文件。----👍🏻点赞量:12
  • SwiftUI-布局案例 (opens new window): SwiftUI 的布局算法会通过 body 的返回值获取描述 View 的信息,转换为对应的内部视图信息,然后交给绘图引擎绘制。----👍🏻点赞量:3
  • 再探 OSX / iOS 的内存管理 (opens new window): 谈到 iOS/OS X 内存管理开发者首先想到的可能是 Objective-C 中 ARC 相关的内容(毕竟相关的内容实在是太多了),但这篇文章与大家分享的是操作系统层面的一些内存相关的概念与知识点。----👍🏻点赞量:3
  • Swift 二进制组件getTypeContextDescriptor crash 分析 (opens new window): 二进制组件中出现的崩溃问题,通过堆栈分析和符号断点定位,发现问题出现在 Swift 源码中,由于编译器/链接器的优化,导致了两个不同的符号被合并到一起。文章提供了修复方案和长期、短期解决方案。----👍🏻点赞量:1
  • APP联合Unity3D实战 (opens new window): APP中如何嵌入Unity3D?首先准备一个空的项目,其次把Unity3D导出的工程合并进来,最后编译,整体项目就完成了。具体的操作可以看文章内容。----👍🏻点赞量:4
  • iOS隐私清单API检测 (opens new window): iOS隐私清单API检测 背景 在 WWDC23 上苹果引入了常用第三方 SDK 的新隐私声明和签名,并宣布开发者需要在其应用的隐私声明中声明使用一组 API 的批准理由。这些变更有助于开发者更好地了----👍🏻点赞量:6
  • SwiftUI本地化-应用内切换语言 (opens new window): App实现本地化,提供多种语言,不仅会极大提高用户体验,而且还会提升App的质量。本文将会完整的介绍怎么为一个App添加多种语言支持,并且无需重启系统就可以实现应用内切换语言。----👍🏻点赞量:1
  • swift 5.7 开始,再也不用背正则表达式语法了 (opens new window): 这里每天分享一个 iOS 的新知识,快来关注我吧 前言 前面介绍了一些关于正则表达式的常规用法,其实在 WWDC 2022 上,swift 5.7 中带来了字符串匹配相关的重大升级,其中就包括正则方面----👍🏻点赞量:5

# GitHub

# javascript

# vue

  • CorentinTh/it-tools (opens new window): Collection of handy online tools for developers, with great UX.----总⭐️10,491; 今日⭐️815
  • ParisNeo/lollms-webui (opens new window): Lord of Large Language Models Web User Interface----总⭐️3,750; 今日⭐️39
  • hakadao/BewlyBewly (opens new window): Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. (English | 简体中文 | 正體中文 | 廣東話)----总⭐️2,386; 今日⭐️564
  • jason5ng32/MyIP (opens new window): The best IP Toolbox. Easy to check what's your IPs, IP geolocation, check for DNS leaks, examine WebRTC connections, speed test, ping test, MTR test, check website availability and more! || 🇨🇳 可能是最好用的IP工具箱。轻松检查你的 IP,IP 地理位置,检查DNS泄漏,检查 WebRTC 连接,速度测试,ping 测试,MTR测试,检查网站可用性等等。----总⭐️4,426; 今日⭐️447
  • yudaocode/yudao-ui-admin-vue3 (opens new window): 芋道管理后台,基于 Vue3 + Element Plus 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城、CRM、ERP 等功能。----总⭐️1,041; 今日⭐️28
  • jdf2e/nutui (opens new window): 京东风格的移动端 Vue 组件库,支持多端小程序(A Vue.js UI Toolkit for Mobile Web)----总⭐️5,893; 今日⭐️44
  • ccfddl/ccf-deadlines (opens new window): ⏰ Collaboratively track deadlines of conferences recommended by CCF (Website, Python Cli, Wechat Applet) / If you find it useful, please star this project, thanks~----总⭐️4,868; 今日⭐️54
  • radix-vue/radix-vue (opens new window): Vue port of Radix UI Primitives. An open-source UI component library for building high-quality, accessible design systems and web apps.----总⭐️2,561; 今日⭐️46
  • chansee97/nova-admin (opens new window): A simple and flexible admin template based on Vue3, Vite, TypeScript, NaiveUI----总⭐️271; 今日⭐️87
  • vueComponent/ant-design-vue (opens new window): 🌈 An enterprise-class UI components based on Ant Design and Vue. 🐜----总⭐️19,565; 今日⭐️38

# typescript

  • miurla/morphic (opens new window): An AI-powered answer engine with a generative UI----总⭐️3,215; 今日⭐️1,045
  • quilljs/quill (opens new window): Quill is a modern WYSIWYG editor built for compatibility and extensibility.----总⭐️39,961; 今日⭐️774
  • bluesky-social/social-app (opens new window): The Bluesky Social application for Web, iOS, and Android----总⭐️6,320; 今日⭐️210
  • langgenius/dify (opens new window): Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.----总⭐️22,537; 今日⭐️1,644
  • code100x/cms (opens new window): ----总⭐️470; 今日⭐️269
  • code100x/daily-code (opens new window): ----总⭐️460; 今日⭐️136
  • danny-avila/LibreChat (opens new window): Enhanced ChatGPT Clone: Features OpenAI, Assistants API, Azure, Groq, GPT-4 Vision, Mistral, Bing, Anthropic, OpenRouter, Vertex AI, Gemini, AI model switching, message search, langchain, DALL-E-3, ChatGPT Plugins, OpenAI Functions, Secure Multi-User System, Presets, completely open-source for self-hosting. More features in development----总⭐️10,489; 今日⭐️914
  • LLM-Red-Team/kimi-free-api (opens new window): 🚀 KIMI AI 长文本大模型逆向API白嫖服务【特长:长文本解读整理】,支持高速流式输出、联网搜索、长文档解读、图像解析、多轮对话,零配置部署,多路token支持,自动清理会话痕迹。----总⭐️1,882; 今日⭐️365
  • CopilotKit/CopilotKit (opens new window): A framework for building custom AI Copilots 🤖 in-app AI chatbots, in-app AI Agents, & AI-powered Textareas.----总⭐️4,501; 今日⭐️253
  • yangshun/tech-interview-handbook (opens new window): 💯 Curated coding interview preparation materials for busy software engineers----总⭐️109,640; 今日⭐️728

# python

# go

# rust

# object-c

# css

- + diff --git a/2024/2024-04-28.html b/2024/2024-04-28.html index 59cea4e9..bb760411 100644 --- a/2024/2024-04-28.html +++ b/2024/2024-04-28.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 数据结构与算法

# javascript

# java

# php

# python

# 运维

# 移动开发

# c/c++

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-React.js

# 前端-面试

# 前端-Node.js

# 前端-CSS

  • 22个实用的CSS技巧,让你的网站脱颖而出 (opens new window): 想要让你的网站在激烈的竞争中脱颖而出吗?使用CSS的强大功能可以帮助你实现这一目标。本文将分享22个实用的CSS技巧,帮助你提升网站的外观和用户体验----👍🏻点赞量:54
  • 15 分钟带你感受 CSS :has() 选择器的强大 (opens new window): 最近看到了许多关于 :has() 选择器的知识点,在此总结下来。 MDN 对 :has() 选择器 的解释是这样的: 下面一起来感受下 :has() 选择器的强大之处吧。 :has() 选择器选择父元----👍🏻点赞量:70
  • H5 下拉刷新如何实现 (opens new window): 最近我需要做一个下拉刷新的功能,实现功能后我发现,它需要处理的情况还蛮多,于是我整理了这篇文章。首先我会讲解下拉的原理、根据原理写出初始代码;然后我会一边介绍代码存在的缺陷、一边解决缺陷并做些许优化。----👍🏻点赞量:83
  • 仿拼多多现金大转盘,H5 抽奖转盘如何实现? (opens new window): 电商应用中我们常常看到抽奖转盘活动,比如拼多多的「抽奖大转盘」:点击中央的抽奖按钮,转盘开始旋转,一段时间后指针停止在奖品上。 这个效果如果用 H5 应该怎么实现呢?----👍🏻点赞量:38
  • 手把手教你写一个 headless 无头组件的单元测试、集成测试、E2E 测试 (opens new window): 我们都知道要想让自己的 headless ui 组件经受得起千锤百炼,那么一个合格的组件测试那是必不可少的; 如果你想对组件测试了解的更深,我相信这篇文章会给你带来不一样的惊喜。----👍🏻点赞量:21
  • 面试官:有哪五种定位 (opens new window): 1. CSS的position属性值: static:默认值,元素在正常的文档流中,不会被特别定位。 relative:相对于元素在文档流中的初始位置进行定位的。 absolute:相对于最近的已定位----👍🏻点赞量:12
  • 你可以用伪元素做的有趣事情 (opens new window): 今天这篇文章同样是围绕着CSS的伪元素,主要介绍几个大家平时不怎么用,但又非常有趣的事情,比如卡片蒙层、渐变边框、渐变阴影、伪逗号等。希望这几个小技巧能帮助大家解决平时工作中的需求。----👍🏻点赞量:8
  • CSS Tips:跑马灯效果 (opens new window): 在 Web 上,存在着众多借鉴跑马灯理念的无限滚动展示方案,它们能在屏幕或是限定区域内循环往复地呈现信息内容。今天我将分享多种不同的纯 CSS 技术方案实现跑马灯的动画效果!----👍🏻点赞量:15

# 前端-后端

# 前端-TypeScript

# 前端-GitHub

# 前端-Webpack

# 前端-前端框架

# 前端-架构

# 前端-NPM

# 后端

# Android

# IOS

# GitHub

# javascript

# vue

# typescript

# python

# go

# rust

# object-c

# css

- + diff --git a/2024/2024-05-19.html b/2024/2024-05-19.html index af0c96fa..ed57e8cd 100644 --- a/2024/2024-05-19.html +++ b/2024/2024-05-19.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024

收集各大技术社区网站每周热文,个人技术博客 (opens new window) 在此

每周更新,展示当前周的数据,进行查看,欢迎关注公众号 (opens new window),点个star呀

# CSDN

# 掘金

# 前端

# 前端-JavaScript

# 前端-Vue.js

# 前端-React.js

# 前端-面试

# 前端-CSS

# 前端-Node.js

# 前端-后端

# 前端-TypeScript

# 前端-前端框架

# 前端-GitHub

# 前端-Webpack

# 前端-HarmonyOS

# 前端-架构

# 后端

# Android

# IOS

# GitHub

# javascript

# vue

# typescript

# python

# go

# rust

# object-c

# css

- + diff --git a/404.html b/404.html index 0e1b9c65..ff20eb24 100644 --- a/404.html +++ b/404.html @@ -18,11 +18,11 @@ - +
- + diff --git a/about.html b/about.html index e132e869..2cc16f53 100644 --- a/about.html +++ b/about.html @@ -18,7 +18,7 @@ - + @@ -66,6 +66,6 @@ 2024

关于我

# 杂活

  • 做小程序
  • 做鸿蒙
  • 做设计
  • 讲段子

# 联系我

欢迎关注我的公众号,每天获取最新高质量技术文章

- + diff --git a/assets/js/14.2aa31384.js b/assets/js/14.9167f4f5.js similarity index 99% rename from assets/js/14.2aa31384.js rename to assets/js/14.9167f4f5.js index ee9372d8..c3a4219d 100644 --- a/assets/js/14.2aa31384.js +++ b/assets/js/14.9167f4f5.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{531:function(e,r,t){"use strict";t.r(r);var n=t(7),a=Object(n.a)({},(function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("收集各大技术社区网站每周热文,"),t("a",{attrs:{href:"https://github.com/dravenww/blob",target:"_blank",rel:"noopener noreferrer"}},[e._v("个人技术博客"),t("OutboundLink")],1),e._v(" 在此")]),e._v(" "),t("p",[e._v("每周更新,展示当前周的数据,进行查看,欢迎"),t("a",{attrs:{href:"https://www.dravenwu.top",target:"_blank",rel:"noopener noreferrer"}},[e._v("关注公众号"),t("OutboundLink")],1),e._v(",点个star呀")]),e._v(" "),t("h2",{attrs:{id:"csdn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#csdn"}},[e._v("#")]),e._v(" CSDN")]),e._v(" "),t("h3",{attrs:{id:"数据结构与算法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#数据结构与算法"}},[e._v("#")]),e._v(" 数据结构与算法")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_71158509/article/details/137855059",target:"_blank",rel:"noopener noreferrer"}},[e._v("逻辑回归树是一种用于二分类问题的机器学习模型,结合了决策树和逻辑回归的思想。使用逻辑回归树时,有几个注意事项可以帮助提高模型的性能和可靠性。1. 数据预处理:在使用逻辑回归树之前,应该对数据进行适"),t("OutboundLink")],1),e._v(": 亦旧sea-逻辑回归树是一种用于二分类问题的机器学习模型,结合了决策树和逻辑回归的思想。使用逻辑回归树时,有几个注意事项可以帮助提高模型的性能和可靠性。1. 数据预处理:在使用逻辑回归树之前,应该对数据进行适----🔥 热度:14354")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_60104186/article/details/137752823",target:"_blank",rel:"noopener noreferrer"}},[e._v("探索Java世界中的七大排序算法(上)"),t("OutboundLink")],1),e._v(": 舞法荔枝-探索Java世界中的七大排序算法(上)----🔥 热度:14044")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_70834415/article/details/137800475",target:"_blank",rel:"noopener noreferrer"}},[e._v("决策树:原理,划分属性的选择和剪枝"),t("OutboundLink")],1),e._v(": 川岛新一-决策树:原理,划分属性的选择和剪枝----🔥 热度:12562")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/cz88888888666/article/details/137939922",target:"_blank",rel:"noopener noreferrer"}},[e._v("【详细介绍下图搜索算法】"),t("OutboundLink")],1),e._v(": 程序员不想YY啊-【详细介绍下图搜索算法】----🔥 热度:11258")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_74070923/article/details/137892400",target:"_blank",rel:"noopener noreferrer"}},[e._v("数据传承:多元环境下的HDFS文件上传与配置调优探索"),t("OutboundLink")],1),e._v(": 小伍_Five-数据传承:多元环境下的HDFS文件上传与配置调优探索----🔥 热度:10349")])]),e._v(" "),t("h3",{attrs:{id:"javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/baidu_22713341/article/details/137936390",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flask + Bootstrap vs Flask + React/Vue:初学者指南"),t("OutboundLink")],1),e._v(": civilpy-Flask + Bootstrap vs Flask + React/Vue:初学者指南----🔥 热度:29145")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/ZSZ1805355272/article/details/137916574",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue 3响应式系统全解析:深入ref、reactive、computed、watch及watchEffect"),t("OutboundLink")],1),e._v(": 俎树振-Vue 3响应式系统全解析:深入ref、reactive、computed、watch及watchEffect----🔥 热度:24695")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/dont27/article/details/137934519",target:"_blank",rel:"noopener noreferrer"}},[e._v("react合成事件与原生事件区别备忘"),t("OutboundLink")],1),e._v(": Shellphon-react合成事件与原生事件区别备忘----🔥 热度:21747")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/yunzhan_wurao/article/details/137930013",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue3+ts项目antd-vue中实现树节点添加,编辑,删除等操作"),t("OutboundLink")],1),e._v(": yunzhan_wurao-vue3+ts项目antd-vue中实现树节点添加,编辑,删除等操作----🔥 热度:21739")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_23633427/article/details/137939521",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue整合monaco-editor编译报错 ERROR in ./node_modules/monaco-editor/esm/vs/language/typescript/tsMode.js"),t("OutboundLink")],1),e._v(": MengYan89-Vue整合monaco-editor编译报错 ERROR in ./node_modules/monaco-editor/esm/vs/language/typescript/tsMode.js----🔥 热度:19558")])]),e._v(" "),t("h3",{attrs:{id:"java"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java"}},[e._v("#")]),e._v(" java")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_63947499/article/details/137752045",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解"),t("OutboundLink")],1),e._v(": 陈橘又青-【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解----🔥 热度:40364")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/asvxc324deas/article/details/137900100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加"),t("OutboundLink")],1),e._v(": asvxc324deas-Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加----🔥 热度:27430")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84413420/article/details/137899185",target:"_blank",rel:"noopener noreferrer"}},[e._v("IntelliJ IDEA创建基于maven的springboot项目(1)"),t("OutboundLink")],1),e._v(": 2401_84413420-IntelliJ IDEA创建基于maven的springboot项目(1)----🔥 热度:27305")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84413490/article/details/137899196",target:"_blank",rel:"noopener noreferrer"}},[e._v("IntelliJ IDEA创建基于maven的springboot项目"),t("OutboundLink")],1),e._v(": 2401_84413490-IntelliJ IDEA创建基于maven的springboot项目----🔥 热度:27305")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84408337/article/details/137898731",target:"_blank",rel:"noopener noreferrer"}},[e._v("IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Maven版"),t("OutboundLink")],1),e._v(": 2401_84408337-IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Maven版----🔥 热度:27248")])]),e._v(" "),t("h3",{attrs:{id:"php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#php"}},[e._v("#")]),e._v(" php")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/vmt/article/details/137909805",target:"_blank",rel:"noopener noreferrer"}},[e._v("网络爬虫软件学习"),t("OutboundLink")],1),e._v(": code .-网络爬虫软件学习----🔥 热度:11222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_36798131/article/details/133950698",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP按自然月计算未来日期"),t("OutboundLink")],1),e._v(": 温暖如春520-PHP按自然月计算未来日期----🔥 热度:10977")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/jxjdhdnd/article/details/137880374",target:"_blank",rel:"noopener noreferrer"}},[e._v("华为ensp中静态路由和默认路由的原理及配置"),t("OutboundLink")],1),e._v(": 神秘泣男子-华为ensp中静态路由和默认路由的原理及配置----🔥 热度:10490")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_62273193/article/details/137922773",target:"_blank",rel:"noopener noreferrer"}},[e._v("bt宝塔面板部署vue+php laraval前后端分离项目"),t("OutboundLink")],1),e._v(": 与鱼有约-bt宝塔面板部署vue+php laraval前后端分离项目----🔥 热度:10180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/aronSandy/article/details/137921962",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP性能调优中的关键缓存技术"),t("OutboundLink")],1),e._v(": 代码奇幻之旅-PHP性能调优中的关键缓存技术----🔥 热度:10168")])]),e._v(" "),t("h3",{attrs:{id:"python"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/littlefun591/article/details/137874674",target:"_blank",rel:"noopener noreferrer"}},[e._v("【python】flask中ORM工具SQLAIchemy,各种数据查询操作详细解析"),t("OutboundLink")],1),e._v(": 景天科技苑-【python】flask中ORM工具SQLAIchemy,各种数据查询操作详细解析----🔥 热度:36601")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_43784341/article/details/137877655",target:"_blank",rel:"noopener noreferrer"}},[e._v("Python机器学习库中Scikit-learn和TensorFlow如何选择?"),t("OutboundLink")],1),e._v(": 山间漫步人生路-Python机器学习库中Scikit-learn和TensorFlow如何选择?----🔥 热度:24669")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/QQ_188083800/article/details/137919081",target:"_blank",rel:"noopener noreferrer"}},[e._v("python基于协同过滤算法旅游景点推荐系统flask-django"),t("OutboundLink")],1),e._v(": QQ_188083800-python基于协同过滤算法旅游景点推荐系统flask-django----🔥 热度:24303")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/QQ188083800/article/details/137909720",target:"_blank",rel:"noopener noreferrer"}},[e._v("python退休人员老年人志愿者活动服务系统django-flask"),t("OutboundLink")],1),e._v(": QQ188083800-python退休人员老年人志愿者活动服务系统django-flask----🔥 热度:23920")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_840612233/article/details/137885752",target:"_blank",rel:"noopener noreferrer"}},[e._v("django_flask二维码学生考勤请假签到系统python-vue"),t("OutboundLink")],1),e._v(": qq_840612233-django_flask二维码学生考勤请假签到系统python-vue----🔥 热度:22507")])]),e._v(" "),t("h3",{attrs:{id:"运维"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#运维"}},[e._v("#")]),e._v(" 运维")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_35995514/article/details/137872959",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Linux】服务器时区 [ CST | UTC | GMT | RTC ]"),t("OutboundLink")],1),e._v(": 阿龙先生啊-【Linux】服务器时区 [ CST | UTC | GMT | RTC ]----🔥 热度:36555")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/FDS99999/article/details/137738863",target:"_blank",rel:"noopener noreferrer"}},[e._v("Linux 网络排查命令"),t("OutboundLink")],1),e._v(": 飞大圣-Linux 网络排查命令----🔥 热度:23813")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84010865/article/details/137879169",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nginx多台服务器实现负载均衡"),t("OutboundLink")],1),e._v(": 渊Y-Nginx多台服务器实现负载均衡----🔥 热度:22246")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/rubys007/article/details/137722785",target:"_blank",rel:"noopener noreferrer"}},[e._v("如何在 Ubuntu 14.04 上配置 Bind 作为缓存或转发 DNS 服务器"),t("OutboundLink")],1),e._v(": 白如意i-如何在 Ubuntu 14.04 上配置 Bind 作为缓存或转发 DNS 服务器----🔥 热度:20679")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Once_day/article/details/137935794",target:"_blank",rel:"noopener noreferrer"}},[e._v("网络运输层之(3)GRE协议"),t("OutboundLink")],1),e._v(": Once-Day-网络运输层之(3)GRE协议----🔥 热度:20168")])]),e._v(" "),t("h3",{attrs:{id:"移动开发"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移动开发"}},[e._v("#")]),e._v(" 移动开发")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84123380/article/details/137930597",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Android】使用Kotlin在Android Studio上开发App"),t("OutboundLink")],1),e._v(": 2401_84123380-【Android】使用Kotlin在Android Studio上开发App----🔥 热度:32922")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/eqiang8271/article/details/137911942",target:"_blank",rel:"noopener noreferrer"}},[e._v("Android studio 报错无法找到android.support.v4.app.Fragment——终极解决方案"),t("OutboundLink")],1),e._v(": 阿强的一亩三分地-Android studio 报错无法找到android.support.v4.app.Fragment——终极解决方案----🔥 热度:21338")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84132401/article/details/137904885",target:"_blank",rel:"noopener noreferrer"}},[e._v("React Native 与 嵌入Android原生与Activity页面互相跳转(2)"),t("OutboundLink")],1),e._v(": 2401_84132401-React Native 与 嵌入Android原生与Activity页面互相跳转(2)----🔥 热度:21202")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84132393/article/details/137904850",target:"_blank",rel:"noopener noreferrer"}},[e._v("React Native 与 嵌入Android原生与Activity页面互相跳转(1)"),t("OutboundLink")],1),e._v(": 2401_84132393-React Native 与 嵌入Android原生与Activity页面互相跳转(1)----🔥 热度:21200")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84132381/article/details/137904823",target:"_blank",rel:"noopener noreferrer"}},[e._v("React Native Android混合开发实战教程"),t("OutboundLink")],1),e._v(": 2401_84132381-React Native Android混合开发实战教程----🔥 热度:21200")])]),e._v(" "),t("h3",{attrs:{id:"c-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#c-c"}},[e._v("#")]),e._v(" c/c++")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/jupangMZ/article/details/137891906",target:"_blank",rel:"noopener noreferrer"}},[e._v("【C++杂货铺】继承"),t("OutboundLink")],1),e._v(": 秋刀鱼的滋味@-【C++杂货铺】继承----🔥 热度:18521")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_35662333/article/details/137874497",target:"_blank",rel:"noopener noreferrer"}},[e._v("[c++][netcdf]通过c\\c++读取字段的scale_factor与add_offset"),t("OutboundLink")],1),e._v(": 去往火星-[c++][netcdf]通过c\\c++读取字段的scale_factor与add_offset----🔥 热度:14737")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/feiyangqingyun/article/details/137906373",target:"_blank",rel:"noopener noreferrer"}},[e._v("Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换"),t("OutboundLink")],1),e._v(": feiyangqingyun-Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换----🔥 热度:14231")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Ly768768/article/details/137858370",target:"_blank",rel:"noopener noreferrer"}},[e._v("从C转入C++"),t("OutboundLink")],1),e._v(": Ly768768-从C转入C++----🔥 热度:13203")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_83430041/article/details/137772351",target:"_blank",rel:"noopener noreferrer"}},[e._v("C++对比C的增强"),t("OutboundLink")],1),e._v(": 温柔有度-C++对比C的增强----🔥 热度:12345")])]),e._v(" "),t("h2",{attrs:{id:"掘金"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#掘金"}},[e._v("#")]),e._v(" 掘金")]),e._v(" "),t("h3",{attrs:{id:"前端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端"}},[e._v("#")]),e._v(" 前端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357194991339143168",target:"_blank",rel:"noopener noreferrer"}},[e._v("别忘了前端是靠什么起家的😡😡😡"),t("OutboundLink")],1),e._v(": 回想起多年前,前端开发者常被戏称为“切图仔”,但就是这样的角色,通过精湛的CSS技巧,能够实现各种复杂的交互和特效,展现出前所未有的网页魔法。这是那些专注于服务端开发的工程师所难以企及的领域。----👍🏻点赞量:222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357976193271857203",target:"_blank",rel:"noopener noreferrer"}},[e._v(" 这个项目被阮一峰老师周刊推荐了,PV 直线上升啊!"),t("OutboundLink")],1),e._v(": 日常也有订阅阮一峰老师的周刊,上面有些有趣的内容会看下。上周五收到了最新一期的推送,看到资源那块有个 “1. Learn Next.js 中文教程”,这个再熟悉不过了,激动不已,哈哈----👍🏻点赞量:126")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574136884",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:如何实现大文件上传"),t("OutboundLink")],1),e._v(": 前阵子被一个 base 北京的小厂面到这个问题,我仅知道实现大文件上传可以通过切片的方式,但是当面试官问我具体实现细节的时候我就沉默了,这个问题本来就应该是大厂问的,心想现在行业都这么卷了吗,小----👍🏻点赞量:180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355303183922659391",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024 抖音欢笑中国年(三):编辑器技巧与实践"),t("OutboundLink")],1),e._v(": 2024年春节,抖音APP春节活动主要基于内部自研的SAR Creator互动方案完成,编辑器的使用是互动开发的核心。----👍🏻点赞量:31")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357674793791324200",target:"_blank",rel:"noopener noreferrer"}},[e._v("被裁四个月后做出了PC端小说阅读软件"),t("OutboundLink")],1),e._v(": 前言 2023年年底,被裁,开发pc端跨端应用markit,主要功能阅读小说、订阅、便笺。想通过这个找工作,上海深圳南京合肥都行。----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357231056288940072",target:"_blank",rel:"noopener noreferrer"}},[e._v("🔥Rust Farm v1.0 发布!极致性能兼容体验,海量编译特性,真正的下一代 Rust web 构建引擎!"),t("OutboundLink")],1),e._v(": Farm⭐️ 是基于 Rust 语言编写的下一代 Web 构建引擎,已经正式发布 1.0 版本,兼具性能和兼容性,是目前最强大、最快、最稳定的 Rust Web 构建工具。----👍🏻点赞量:88")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356778082824372250",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节无缘后,迎来了滴滴二面,好家伙鏖战三小时!"),t("OutboundLink")],1),e._v(": 先说明下自身成分,双非二本,属于 debuff 拉满了,在之前的一个月中也面试了许多的中厂,自认为经验准备充分,于是4月2号去面试了字节的懂车帝实习岗位(这里后续会写一篇),第一次面试......----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357301805568671755",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:flex:1代表什么"),t("OutboundLink")],1),e._v(": 理解flex属性 在flexbox布局中,flex属性是用来控制项目的伸缩性的。它是一个复合属性,包含了flex-grow、flex-shrink和flex-basis这三个子属性。 在 Flexbo----👍🏻点赞量:41")])]),e._v(" "),t("h3",{attrs:{id:"前端-javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-javascript"}},[e._v("#")]),e._v(" 前端-JavaScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357194991339143168",target:"_blank",rel:"noopener noreferrer"}},[e._v("别忘了前端是靠什么起家的😡😡😡"),t("OutboundLink")],1),e._v(": 回想起多年前,前端开发者常被戏称为“切图仔”,但就是这样的角色,通过精湛的CSS技巧,能够实现各种复杂的交互和特效,展现出前所未有的网页魔法。这是那些专注于服务端开发的工程师所难以企及的领域。----👍🏻点赞量:222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574136884",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:如何实现大文件上传"),t("OutboundLink")],1),e._v(": 前阵子被一个 base 北京的小厂面到这个问题,我仅知道实现大文件上传可以通过切片的方式,但是当面试官问我具体实现细节的时候我就沉默了,这个问题本来就应该是大厂问的,心想现在行业都这么卷了吗,小----👍🏻点赞量:180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357674793791324200",target:"_blank",rel:"noopener noreferrer"}},[e._v("被裁四个月后做出了PC端小说阅读软件"),t("OutboundLink")],1),e._v(": 前言 2023年年底,被裁,开发pc端跨端应用markit,主要功能阅读小说、订阅、便笺。想通过这个找工作,上海深圳南京合肥都行。----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356778082824372250",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节无缘后,迎来了滴滴二面,好家伙鏖战三小时!"),t("OutboundLink")],1),e._v(": 先说明下自身成分,双非二本,属于 debuff 拉满了,在之前的一个月中也面试了许多的中厂,自认为经验准备充分,于是4月2号去面试了字节的懂车帝实习岗位(这里后续会写一篇),第一次面试......----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358598695267008527",target:"_blank",rel:"noopener noreferrer"}},[e._v("autolog.js:一个小而美的toast插件。"),t("OutboundLink")],1),e._v(": css部分正正好好 100 行代码,从上到下分别是:iconfont 字体图标链接、主容器样式、各类型提示框的样式、退场类,入场动画。 由此可见,你也可以重写这些css,为他们添加不同的 icon、----👍🏻点赞量:58")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358704808525971475",target:"_blank",rel:"noopener noreferrer"}},[e._v("手撸一个星系,送给心爱的姑娘!(Three.js Shader 粒子系统实现)"),t("OutboundLink")],1),e._v(": 用 Three.js Shader 粒子系统手撸一个超级漂亮的星系效果!学习如何在球体和圆盘上设置顶点、如何插值颜色、让粒子运动起来等等!----👍🏻点赞量:75")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574284340",target:"_blank",rel:"noopener noreferrer"}},[e._v("总结Vue3的11种传参通信方式,非常齐全"),t("OutboundLink")],1),e._v(": 特意总结一下vue3竟然总结出来11种传参通信方式那么多,11种我分别都列了出来,并且带上最通俗易懂的例子。----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357151301220335653",target:"_blank",rel:"noopener noreferrer"}},[e._v("一边开飞机、一边修飞机,Node 官网的重新设计"),t("OutboundLink")],1),e._v(": Node 不仅重新设计了新官网,还有新设计的吉祥物助阵,一起来深度学习 Node 官方博客,携手 Node 团队一起回顾重新设计官网的这段旅程。----👍🏻点赞量:15")])]),e._v(" "),t("h3",{attrs:{id:"前端-vue-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-vue-js"}},[e._v("#")]),e._v(" 前端-Vue.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357674793791324200",target:"_blank",rel:"noopener noreferrer"}},[e._v("被裁四个月后做出了PC端小说阅读软件"),t("OutboundLink")],1),e._v(": 前言 2023年年底,被裁,开发pc端跨端应用markit,主要功能阅读小说、订阅、便笺。想通过这个找工作,上海深圳南京合肥都行。----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574284340",target:"_blank",rel:"noopener noreferrer"}},[e._v("总结Vue3的11种传参通信方式,非常齐全"),t("OutboundLink")],1),e._v(": 特意总结一下vue3竟然总结出来11种传参通信方式那么多,11种我分别都列了出来,并且带上最通俗易懂的例子。----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358704808525414419",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue3 超前版发布三个新特性!有望全面拥抱 JSX/TSX!"),t("OutboundLink")],1),e._v(": 前言 大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~ 拥抱 JSX/TSX? 我们都知道 Vue 一直主流是使用 template 模板来进行页面的编写 ----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355319119296380980",target:"_blank",rel:"noopener noreferrer"}},[e._v("你知道JSON.parse(JSON.stringify())实现深拷贝的原理是什么吗?"),t("OutboundLink")],1),e._v(": 很多场景我们都需要用到深拷贝,那么JSON.parse(JSON.stringify())绝对是我们首选之一,因为他既简单,又能解决我们浅拷贝带来的引用问题,那么你知道它是怎么实现深拷贝的吗?----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358375367340228659",target:"_blank",rel:"noopener noreferrer"}},[e._v("写 H5 页面真的要了解 "),t("meta"),e._v(" 标签! "),t("OutboundLink")],1),e._v(": 前言 事情的起因是这样的,由于 小 A 需要负责开发一个 H5 移动端的项目,需要分别在 微信环境 和 企微环境 中去使用,于是 小 A 使用 Vite + Vue3 来进行开发,然后测试提出如下问题----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357382699629559845",target:"_blank",rel:"noopener noreferrer"}},[e._v("JS 最新提案 Signals(信号),stage 0 草案正式发布!"),t("OutboundLink")],1),e._v(": JS Signals(信号)提案的 stage 0 草案、以及符合规范的 polyfill(功能补丁)现已正式公开发布。----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358348786845040680",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue 2024 预言"),t("OutboundLink")],1),e._v(": 就像前端开发世界的其他生态一样,2024 Vue 的生态系统也日新月异。在本文中,我们会回顾 Vue 生态的开发现状,且共享关于 Vue 生态 2024 发展趋势的预言。----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083109912412186",target:"_blank",rel:"noopener noreferrer"}},[e._v("写了个webpack插件,1722行代码,无感升级到vue3😎"),t("OutboundLink")],1),e._v(": 之前对公司七八年的老项目进行了升级,将vue2升级到vue3,并输出了一篇文章。但它存在很多问题,具体来说: 可读性巨差......----👍🏻点赞量:26")])]),e._v(" "),t("h3",{attrs:{id:"前端-面试"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-面试"}},[e._v("#")]),e._v(" 前端-面试")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574136884",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:如何实现大文件上传"),t("OutboundLink")],1),e._v(": 前阵子被一个 base 北京的小厂面到这个问题,我仅知道实现大文件上传可以通过切片的方式,但是当面试官问我具体实现细节的时候我就沉默了,这个问题本来就应该是大厂问的,心想现在行业都这么卷了吗,小----👍🏻点赞量:180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356778082824372250",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节无缘后,迎来了滴滴二面,好家伙鏖战三小时!"),t("OutboundLink")],1),e._v(": 先说明下自身成分,双非二本,属于 debuff 拉满了,在之前的一个月中也面试了许多的中厂,自认为经验准备充分,于是4月2号去面试了字节的懂车帝实习岗位(这里后续会写一篇),第一次面试......----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357301805568671755",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:flex:1代表什么"),t("OutboundLink")],1),e._v(": 理解flex属性 在flexbox布局中,flex属性是用来控制项目的伸缩性的。它是一个复合属性,包含了flex-grow、flex-shrink和flex-basis这三个子属性。 在 Flexbo----👍🏻点赞量:41")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355319119296380980",target:"_blank",rel:"noopener noreferrer"}},[e._v("你知道JSON.parse(JSON.stringify())实现深拷贝的原理是什么吗?"),t("OutboundLink")],1),e._v(": 很多场景我们都需要用到深拷贝,那么JSON.parse(JSON.stringify())绝对是我们首选之一,因为他既简单,又能解决我们浅拷贝带来的引用问题,那么你知道它是怎么实现深拷贝的吗?----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357698668890112036",target:"_blank",rel:"noopener noreferrer"}},[e._v("学历或履历不好,如何进大厂"),t("OutboundLink")],1),e._v(": 人往高处走,只要大家努力,加上朋友的帮助,总有一天能进入大厂工作,但进入大厂只是起点,要想获得更有的职业发展,需要持续学习成长,团队学习效率更高,走得更远,----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357957809071554594",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024.04.15 更新前端面试问题总结(20 道题)"),t("OutboundLink")],1),e._v(": 2024.04.15 更新前端面试问题总结(20 道题) https://github.com/pro-collection/interview-question/issues----👍🏻点赞量:26")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356596872571076627",target:"_blank",rel:"noopener noreferrer"}},[e._v("【优化篇】网站中文字体包优化指南"),t("OutboundLink")],1),e._v(": 汉字字体包的体积通常比较大,通过font-display、woff2、font-spider、字体包切片等手段优化中文字体包。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356809873432641599",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024.04.12 更新前端面试问题总结(17 道题) "),t("OutboundLink")],1),e._v(": 2024.04.12 更新前端面试问题总结(17道题) 获取更多面试相关问题可以访问https://github.com/pro-collection/interview-question----👍🏻点赞量:11")])]),e._v(" "),t("h3",{attrs:{id:"前端-react-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-react-js"}},[e._v("#")]),e._v(" 前端-React.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357976193271857203",target:"_blank",rel:"noopener noreferrer"}},[e._v(" 这个项目被阮一峰老师周刊推荐了,PV 直线上升啊!"),t("OutboundLink")],1),e._v(": 日常也有订阅阮一峰老师的周刊,上面有些有趣的内容会看下。上周五收到了最新一期的推送,看到资源那块有个 “1. Learn Next.js 中文教程”,这个再熟悉不过了,激动不已,哈哈----👍🏻点赞量:126")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357292176945184795",target:"_blank",rel:"noopener noreferrer"}},[e._v("用expo开发react native实在是太爽了"),t("OutboundLink")],1),e._v(": expo出来已经有一段时间了,发现相关的文章还是比较少的。如果你在开发react native,那么我推荐你赶快使用expo来开发把! expo的好处是什么? 一、零配置开发,降低开发者的心智负担。如----👍🏻点赞量:30")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357917741909819407",target:"_blank",rel:"noopener noreferrer"}},[e._v("实现一个支持@的输入框"),t("OutboundLink")],1),e._v(": 产品期望在后台发布帖子时,需要添加 "),t("strong",[e._v("@用户")]),e._v(" 的功能,以便用户收到通知,例如“xxx在xxx提及了您!”。然而,现有的开源库未能满足我们的需求,例如 ant-design的Mentions组件.----👍🏻点赞量:61")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357374179648536576",target:"_blank",rel:"noopener noreferrer"}},[e._v("遇到这三个 api,你会把它封装成组件么?"),t("OutboundLink")],1),e._v(": 最近遇到一些组件,它们只是对 api 的一层简易封装,用起来也和直接用 api 差不多。 但是这种组件的下载量还是挺多的。 今天我们一起来写三个这样的组件,大家来感受下和直接用 api 的区别。 Po----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358665606915588096",target:"_blank",rel:"noopener noreferrer"}},[e._v("图解网页的各种距离"),t("OutboundLink")],1),e._v(": 网页开发中,我们经常要计算各种距离。 比如 OnBoarding 组件,我们要拿到每一步的高亮元素的位置、宽高: 比如 Popover 组件,需要拿到每个元素的位置,然后确定浮层位置: 比如滚动到页面----👍🏻点赞量:32")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356813407373328418",target:"_blank",rel:"noopener noreferrer"}},[e._v("原子化状态管理库 Jotai,它和 Zustand 有啥区别?"),t("OutboundLink")],1),e._v(": Jotai 是一个 react 的状态管理库,主打原子化。 提到原子化,你可能会想到原子化 CSS 框架 tailwind。 比如这样的 css: 用 tailwind 这样写: 定义一系列原子 cl----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357141293111509032",target:"_blank",rel:"noopener noreferrer"}},[e._v("React 19 的新增功能:Action Hooks"),t("OutboundLink")],1),e._v(": React 是前端开发领域最流行的框架之一。我喜欢 React 是因为它背后的团队和社区对它的热情。当社区提出新功能和改进的需求时,团队会倾听,React 的未来是令人兴奋和有趣的。 让我们来看一下 ----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358446362575568906",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tauri 2.0 Updater自动更新指南"),t("OutboundLink")],1),e._v(": Tauri 2.0 Updater自动更新指南 Tauri2.0 将原来的updater 单独封装成了插件plugins-workspace/plugins/updater tauri.conf.js----👍🏻点赞量:9")])]),e._v(" "),t("h3",{attrs:{id:"前端-node-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-node-js"}},[e._v("#")]),e._v(" 前端-Node.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357151301220335653",target:"_blank",rel:"noopener noreferrer"}},[e._v("一边开飞机、一边修飞机,Node 官网的重新设计"),t("OutboundLink")],1),e._v(": Node 不仅重新设计了新官网,还有新设计的吉祥物助阵,一起来深度学习 Node 官方博客,携手 Node 团队一起回顾重新设计官网的这段旅程。----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356450983838384137",target:"_blank",rel:"noopener noreferrer"}},[e._v("探究 CPU 密集型与 IO 密集型任务:提升对 Node.js 中 libuv 库的理解"),t("OutboundLink")],1),e._v(": 在软件开发和系统设计中,了解 CPU 密集型和 IO 密集型的任务对于优化应用程序和选择合适的技术栈极为重要。这些概念主要与应用程序的性能瓶颈有关,可以帮助开发者更好地理解如何设计高效的多线程和异步程----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356867483829600265",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第十五章 child_process"),t("OutboundLink")],1),e._v(": child_process 子进程 child_process 模块是 Node.js 的一个核心模块,可以从 Node.js 应用程序中创建和管理子进程。子进程是从父进程(你的 Node.js 应用----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357965931480055818",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node 汗流浃背,Bun 1.1 支持 Windows,代号“Bundows”"),t("OutboundLink")],1),e._v(": 从 Bun 1.1 开始,Bun 正式支持 Windows!所以,今天我们一起来瞄一下 Bun 官方博客的版本升级说明吧。----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355347789676167219",target:"_blank",rel:"noopener noreferrer"}},[e._v("【0-1搭建网站】(一)Koa+koa/router+module-alias+eslint+prettier"),t("OutboundLink")],1),e._v(": 《【0-1】搭建网站》系列会详细记录一个网站从后端、前端、部署的全过程。本文记录了使用Koa框架搭建网站后端的一些基础配置,包括router、module-alias、eslint、prettier。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356889912127832064",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端脚手架系列(一):Node.js与 ls -al 模拟"),t("OutboundLink")],1),e._v(": 在这篇开篇文章中,我们将介绍如何在Node.js环境下开发前端脚手架,并探讨文件目录统计功能的实现。我们会详细解释如何通过精确的文件数量计算,提升脚手架的准确性和可靠性,为前端自动化工具开发奠定坚实。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091175764002",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个typescript 5 + rollup 4 打包lib模板仓库实现"),t("OutboundLink")],1),e._v(": 前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollu----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359084330121396236",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第六十六章(SCL扫码登录)"),t("OutboundLink")],1),e._v(": 扫码登录 SCL (Scan Code Login) 是一种扫码登录的技术,它允许用户通过扫描二维码来进行登录操作。这种登录方式在许多应用和网站中得到广泛应用,因为它简单、方便且安全。 SCL 扫码登----👍🏻点赞量:8")])]),e._v(" "),t("h3",{attrs:{id:"前端-css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-css"}},[e._v("#")]),e._v(" 前端-CSS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357194991339143168",target:"_blank",rel:"noopener noreferrer"}},[e._v("别忘了前端是靠什么起家的😡😡😡"),t("OutboundLink")],1),e._v(": 回想起多年前,前端开发者常被戏称为“切图仔”,但就是这样的角色,通过精湛的CSS技巧,能够实现各种复杂的交互和特效,展现出前所未有的网页魔法。这是那些专注于服务端开发的工程师所难以企及的领域。----👍🏻点赞量:222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357301805568671755",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:flex:1代表什么"),t("OutboundLink")],1),e._v(": 理解flex属性 在flexbox布局中,flex属性是用来控制项目的伸缩性的。它是一个复合属性,包含了flex-grow、flex-shrink和flex-basis这三个子属性。 在 Flexbo----👍🏻点赞量:41")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358598695267008527",target:"_blank",rel:"noopener noreferrer"}},[e._v("autolog.js:一个小而美的toast插件。"),t("OutboundLink")],1),e._v(": css部分正正好好 100 行代码,从上到下分别是:iconfont 字体图标链接、主容器样式、各类型提示框的样式、退场类,入场动画。 由此可见,你也可以重写这些css,为他们添加不同的 icon、----👍🏻点赞量:58")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358295139457400869",target:"_blank",rel:"noopener noreferrer"}},[e._v("CSS如何优雅的实现卡片多行排列布局?"),t("OutboundLink")],1),e._v(": 在前端开发中,我们经常遇见这样的开发需求,实现多行排布的卡片,这些卡片宽度一般是固定的, 并且在不同大小的屏幕宽度下自动换行。----👍🏻点赞量:32")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358699186630737955",target:"_blank",rel:"noopener noreferrer"}},[e._v("【动画进阶】类 ChatGpt 多行文本打字效果"),t("OutboundLink")],1),e._v(": 今天我们来学习一个有意思的多行文本输入打字效果,像是这样: 这个效果其实本身并非特别困难,实现的方式也很多,在本文中,我们更多的会聚焦于整个多行打字效果最后的动态光标的实现。 也就是如何在文本不断变长----👍🏻点赞量:54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357546247848378406",target:"_blank",rel:"noopener noreferrer"}},[e._v("对比小红书与电商三巨头的瀑布流,H5 瀑布流实现方案应该如何选择?"),t("OutboundLink")],1),e._v(": 瀑布流布局,我们既能在小红书这类图文网站看到,也能在拼多多、京东和淘宝这类电商网站看到。那么,同样是瀑布流,两种实现方式的优点、缺点是什么呢?如果想用 H5 实现瀑布流,应该用哪一种方案呢?----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358348786843959336",target:"_blank",rel:"noopener noreferrer"}},[e._v("聊聊 CSS 的 ::marker"),t("OutboundLink")],1),e._v(": ::marker 是一个 CSS 的另一个伪元素,使用::marker伪元素,可以对列表做一些有趣的事情,在本文中,我们将深入的聊聊该伪元素。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083412403486746",target:"_blank",rel:"noopener noreferrer"}},[e._v("通过自然语言处理(NLP)实现图像识别的革命:深入探讨多语言目标检测。"),t("OutboundLink")],1),e._v(': 1. 前言 "探索图像识别的未来,我们时常被人工智能所惊艳。但是,你曾想过将自然语言处理(NLP)与图像识别相结合,会擦出怎样的火花吗?让我们一起来揭开这个令人振奋的未来!本文将带你深入探讨如何通过融----👍🏻点赞量:29')])]),e._v(" "),t("h3",{attrs:{id:"前端-后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-后端"}},[e._v("#")]),e._v(" 前端-后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358704845735510027",target:"_blank",rel:"noopener noreferrer"}},[e._v("每个开发人员都应该知道的13个Nodejs库"),t("OutboundLink")],1),e._v(": Node.js,作为一种广受推崇的后端JavaScript环境,已成为众多网络开发者的首选。它不仅位列全球最流行编程语言之一,还通过JavaScript库的代码复用功能,极大地提升了项目开发效率。然而----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356450983838384137",target:"_blank",rel:"noopener noreferrer"}},[e._v("探究 CPU 密集型与 IO 密集型任务:提升对 Node.js 中 libuv 库的理解"),t("OutboundLink")],1),e._v(": 在软件开发和系统设计中,了解 CPU 密集型和 IO 密集型的任务对于优化应用程序和选择合适的技术栈极为重要。这些概念主要与应用程序的性能瓶颈有关,可以帮助开发者更好地理解如何设计高效的多线程和异步程----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357261180492513306",target:"_blank",rel:"noopener noreferrer"}},[e._v("经典问题:从输入url到页面渲染的整个历程"),t("OutboundLink")],1),e._v(": 前言 这个问题可以说是很经典的一个问题了,经典到讲的人太多,感觉现在很多面试都不愿意去问这个问题了。但是被问到但是你不会的话,那就很尴尬了,就像我一样😭。 DNS解析 整个过程的第一步就是DNS的解析----👍🏻点赞量:25")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355347789676167219",target:"_blank",rel:"noopener noreferrer"}},[e._v("【0-1搭建网站】(一)Koa+koa/router+module-alias+eslint+prettier"),t("OutboundLink")],1),e._v(": 《【0-1】搭建网站》系列会详细记录一个网站从后端、前端、部署的全过程。本文记录了使用Koa框架搭建网站后端的一些基础配置,包括router、module-alias、eslint、prettier。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356233295851257890",target:"_blank",rel:"noopener noreferrer"}},[e._v("【0-1搭建网站】(二)GraphQL+环境区分+path添加prefix+统一返回数据格式"),t("OutboundLink")],1),e._v(": 《【0-1】搭建网站》系列会详细记录一个网站从后端、前端、部署的全过程。基于上文增加了GraphQL、环境区分、全局请求path的prefix、统一数据返回格式。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358355063923032115",target:"_blank",rel:"noopener noreferrer"}},[e._v("我把 NextJS 的 App Router 搬到了 Server 端,写一个后端框架有多简单"),t("OutboundLink")],1),e._v(": Hello 大家好,我是 anuoua ,自从很久以前写了前端框架 Unis 后,很长一段时间觉得啥都不感兴趣,期间做了 NextJS 的项目,突然对全栈框架产生了兴趣, NextJS 是真的好用,其----👍🏻点赞量:5")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359076801278722100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Next.js 14 踩坑:处理API中的JWT登录认证问题"),t("OutboundLink")],1),e._v(": 在使用 Next.js14 开发登录登出功能时遇到一个问题:可以设置 cookie,但无法清除 cookie。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356892796614377484",target:"_blank",rel:"noopener noreferrer"}},[e._v("[译]现代化JavaScript深拷贝方式"),t("OutboundLink")],1),e._v(": 你知道现在 JavaScript 有一种原生的深拷贝方法吗? 没错,就是 structuredClone 方法。该方法已内置于 JavaScript 运行时中。----👍🏻点赞量:4")])]),e._v(" "),t("h3",{attrs:{id:"前端-typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-typescript"}},[e._v("#")]),e._v(" 前端-TypeScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355303183922659391",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024 抖音欢笑中国年(三):编辑器技巧与实践"),t("OutboundLink")],1),e._v(": 2024年春节,抖音APP春节活动主要基于内部自研的SAR Creator互动方案完成,编辑器的使用是互动开发的核心。----👍🏻点赞量:31")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356041157993136140",target:"_blank",rel:"noopener noreferrer"}},[e._v("从zustand中窥探typescript逆变、协变、双变和不变"),t("OutboundLink")],1),e._v(": typescript中的协变、逆变等概念比较晦涩,要想成为typescript高手,协变逆变是绕不过去的坎,本文通过一个个例子带你窥探其神秘的面纱...----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091175764002",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个typescript 5 + rollup 4 打包lib模板仓库实现"),t("OutboundLink")],1),e._v(": 前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollu----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358664464999088166",target:"_blank",rel:"noopener noreferrer"}},[e._v("react+ts:类型“Element”的参数不能赋给类型“ReactNode”的参数。ts(2345)"),t("OutboundLink")],1),e._v(": 在React、Ts项目中,引入tsx文件的React代码,在ts配置文件中添加moduleResolution配置选项。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358295139457122341",target:"_blank",rel:"noopener noreferrer"}},[e._v("框架中的类型编程(三):Elysia 中的链式调用与错误处理"),t("OutboundLink")],1),e._v(": 这是专栏「框架中的类型编程」的第三篇内容,你可以在 Framework Typings 或 笔者的个人博客 找到前两篇内容,在之前的内容里我们介绍了 Prisma、tRPC 以及 Hono 中的类型编----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357922389416034313",target:"_blank",rel:"noopener noreferrer"}},[e._v("区区十几个勾子,这次必须要全部拿捏(下篇)"),t("OutboundLink")],1),e._v(": 在上一篇文章中,已经相继介绍了几个React里面常用的hook,这篇文章中,我们继续介绍剩下的几个hook以及它们的特性与用法。 useMemo 这个勾子从名字上就能看出它是与缓存有关的,那么究竟是缓----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083412387315722",target:"_blank",rel:"noopener noreferrer"}},[e._v("探秘TypeScript:基本概念至实际应用一网打尽"),t("OutboundLink")],1),e._v(": TypeScript是JavaScript的超集,为那些希望加强代码质量和工具的Web开发人员带来了新的希望。这篇文章的目的就是带你领略TypeScript的魅力,从基本概念到实际应用,一网打尽。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357279156613726234",target:"_blank",rel:"noopener noreferrer"}},[e._v("「Typescript之旅」:看一遍就理解Ts中的class"),t("OutboundLink")],1),e._v(": 大家好,我是心灵。 最近看过我的文章的小伙伴都知道,在更新一个在Typescript中旅行的专栏,已经更新了5篇文章,这是第六篇。----👍🏻点赞量:5")])]),e._v(" "),t("h3",{attrs:{id:"前端-github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-github"}},[e._v("#")]),e._v(" 前端-GitHub")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358337136023846963",target:"_blank",rel:"noopener noreferrer"}},[e._v("Formik:让用户体验更加出色的表单解决方案"),t("OutboundLink")],1),e._v(": hi, 大家好,我是徐小夕, 今天又到了我们的博学时间。今天和大家分享一款非常有价值的开源项目——Formik。 这款开源项目也是我研究零代码搭建平台——H5-Dooring 时参考的项目之一,它可以----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667573350452",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端人专属的 10 个 GitHub 资源,成为 JS 大神的必由之路"),t("OutboundLink")],1),e._v(": 在本文中,我们会共享 10 个开源好用的 Github 存储库,它们会把我们的 JS 技能提升到新的高度!来不及解释了,快上车!----👍🏻点赞量:32")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358446362575568906",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tauri 2.0 Updater自动更新指南"),t("OutboundLink")],1),e._v(": Tauri 2.0 Updater自动更新指南 Tauri2.0 将原来的updater 单独封装成了插件plugins-workspace/plugins/updater tauri.conf.js----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358267939441950720",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:说说包管理工具的发展以及 pnpm 依赖治理的最佳实践 🤯"),t("OutboundLink")],1),e._v(": 目前在前端领域最流行的包管理工具包含了 npm、yarn、pnpm,其中 pnpm 的机制对 yarn 和 npm 堪称降维打击,这篇文章来梳理一下包管理工具的发展历程以及 pnpm 的相关最佳实践----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356886425332990003",target:"_blank",rel:"noopener noreferrer"}},[e._v("使用又拍云极速搭建图床"),t("OutboundLink")],1),e._v(": 前言 某天在群里摸 🐟 ,聊到了图床相关的话题,说又拍云的可以白嫖,于是将它接入到了自己的图床应用里。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357546247848869926",target:"_blank",rel:"noopener noreferrer"}},[e._v("stokado拥抱localForage,轻松管理Web Storage和IndexedDB"),t("OutboundLink")],1),e._v(": stokado结合localForage食用,轻松实现语法糖,监听订阅且跨页面通知,过期设置等功能。sessionStorage和localStorage也变得更加强大,进来看看具体实现----👍🏻点赞量:5")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359076801278525492",target:"_blank",rel:"noopener noreferrer"}},[e._v("Quasar项目中集成unocss解决方案,又Get一个"),t("OutboundLink")],1),e._v(": 今天接手别人的quasar项目要写一个适配PC和手机的页面,想着接入unocss方便点~~~ 结果浪费了半个下午 期间各种踩坑,文档引入不成功,去github搜解决方案,终于解决了----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357382699630542885",target:"_blank",rel:"noopener noreferrer"}},[e._v("js-pytorch:开启前端+AI新世界"),t("OutboundLink")],1),e._v(": 嗨, 大家好, 我是徐小夕。 最近在 github 上发现一款非常有意思的框架—— js-pytorch。它可以让前端轻松使用 javascript 来运行深度学习框架。作为一名资深前端技术玩家, 今----👍🏻点赞量:7")])]),e._v(" "),t("h3",{attrs:{id:"前端-webpack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-webpack"}},[e._v("#")]),e._v(" 前端-Webpack")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083109912412186",target:"_blank",rel:"noopener noreferrer"}},[e._v("写了个webpack插件,1722行代码,无感升级到vue3😎"),t("OutboundLink")],1),e._v(": 之前对公司七八年的老项目进行了升级,将vue2升级到vue3,并输出了一篇文章。但它存在很多问题,具体来说: 可读性巨差......----👍🏻点赞量:26")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357700734005887015",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rspack v0.6.0 发布,全新 Tree Shaking 算法"),t("OutboundLink")],1),e._v(": Rspack v0.6.0 版本已发布!内容包括新版 Tree Shaking 算法、更小的产物体积、新增 CSS extract 插件等。----👍🏻点赞量:22")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356133709089308687",target:"_blank",rel:"noopener noreferrer"}},[e._v("静态站点全文搜索实现原理之Rspress篇"),t("OutboundLink")],1),e._v(": 大家好,我是老纪。书接上回dumi篇,未阅读过的同学建议先看一遍。本文带你继续了解静态站点全文搜索的Rspress的实现方案。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355692365329301544",target:"_blank",rel:"noopener noreferrer"}},[e._v("静态站点全文搜索实现原理之dumi篇"),t("OutboundLink")],1),e._v(": 在构建前端文档网站时,搜索功能是用户体验的关键组成部分之一。从技术的维度上来看,网站的搜索方案可分为后端搜索和前端搜索两种方式。本文带你了解下dumi的全文搜索实现思路。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357205817253658633",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack loaders插件编写"),t("OutboundLink")],1),e._v(': 1. 了解什么是loader 官方解释:loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(t----👍🏻点赞量:2')]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358015785422815286",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rsbuild v0.6 发布,基于 Rspack 的构建工具"),t("OutboundLink")],1),e._v(": Rsbuild v0.6 版本已发布!主要特性包括: 升级 Rspack v0.6、默认启用 error overlay、支持 Vue JSX HMR 等。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358136994331885609",target:"_blank",rel:"noopener noreferrer"}},[e._v("Webpack 2024 前前端架构老鸟的分享(三)"),t("OutboundLink")],1),e._v(": Webpack 2024 前前端架构老鸟的分享(三) 七、Webpack 自定义 Loader 的实践。好了各位,关于Webpack的知识我就分享到这里。 无论你们对Webpack爱与恨----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357362143395971072",target:"_blank",rel:"noopener noreferrer"}},[e._v("涨薪面技:写个 enhanced-resolve 插件(6)"),t("OutboundLink")],1),e._v(": 本文接着上文的流水线注册环节讲述后续的流水线注册: 1. module 阶段:处理 @xx 类似这种带有命名空间的内部request,将其变成一个绝对路径;2. resolve-as-module----👍🏻点赞量:1")])]),e._v(" "),t("h3",{attrs:{id:"前端-前端框架"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-前端框架"}},[e._v("#")]),e._v(" 前端-前端框架")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357998495481888777",target:"_blank",rel:"noopener noreferrer"}},[e._v("秒开率破90%!交易后台渲染性能优化 | 得物技术"),t("OutboundLink")],1),e._v(": 一直以来,体验都是得物技术部的关键词之一。本文从本次交易后台性能优化实践出发,同时介绍应用整体架构和设计,希望可以给参与网站性能建设的同学提供一定的学习和参考价值。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356892796613115916",target:"_blank",rel:"noopener noreferrer"}},[e._v("基于 AntvX6 的流程编排系统搭建实践"),t("OutboundLink")],1),e._v(": 基于 AntvX6 的流程编排系统搭建实践 一、 引言 众所周知,前端的流程化配置与框架升级,一直以来都是所有前端开发所需要经历的一环。恰巧最近有项目要进行整合重构,正好可以从0搭建一把可视化配置流----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356915703156523035",target:"_blank",rel:"noopener noreferrer"}},[e._v("画图技术之正交线支持自定义拐点"),t("OutboundLink")],1),e._v(": 介绍最近给流程图支持的魔法功能:正交线支持自定义拐点。 技术实现、数据存储、中间踩过的坑,总结分享。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356772896045858852",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue和react通用后台管理系统权限控制方案"),t("OutboundLink")],1),e._v(": 在任何企业级应用中,尤其是后台管理系统,权限控制是一个至关重要的环节。它确保了系统资源的安全性,防止非法访问和操作,保障业务流程的正常进行。本文件将详细解析后台管理系统中的权限控制机制及其..----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358822246649643049",target:"_blank",rel:"noopener noreferrer"}},[e._v("我为何要放弃Nextjs的App Router开发应用"),t("OutboundLink")],1),e._v(": 背景 在项目前期开发时,曾经对Next的App Router和Page Router都做了一些基础的demo试验,通过对比去看那个Router更合适。从试验的demo来看,其实无论是App和Page都----👍🏻点赞量:5")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358015785422815286",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rsbuild v0.6 发布,基于 Rspack 的构建工具"),t("OutboundLink")],1),e._v(": Rsbuild v0.6 版本已发布!主要特性包括: 升级 Rspack v0.6、默认启用 error overlay、支持 Vue JSX HMR 等。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358734620618178586",target:"_blank",rel:"noopener noreferrer"}},[e._v("Astro 开启网站性能与开发效率的双重提升之旅"),t("OutboundLink")],1),e._v(": Astro是一个新兴的全栈框架,它结合了多种优秀的Web技术,为构建现代化网站提供了一种全新的方式。使用 Astro 几乎不可能做出缓慢的网站!!!----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356910138945585186",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文说透前端主题切换的思路和实现"),t("OutboundLink")],1),e._v(": 前言 随着现在的前端技术发展,对于UI界面的要求也是越来越高, 在实现框架搭建的时候, 主题切换就是我们考虑的点,今天就和大家讲一讲目前实现主题切换时的方案,以及分析一下各个方案的优劣势----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-架构"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-架构"}},[e._v("#")]),e._v(" 前端-架构")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358743626166222874",target:"_blank",rel:"noopener noreferrer"}},[e._v("深入理解Transformer技术原理 | 得物技术"),t("OutboundLink")],1),e._v(": 谷歌在2017年发布Transformer架构的论文时,论文的标题是:Attention Is All You Need。重点说明了这个架构是基于注意力机制的。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357542359565484082",target:"_blank",rel:"noopener noreferrer"}},[e._v("EMP3.0-基于Rust生态打造的高性能前端构建系统"),t("OutboundLink")],1),e._v(": EMP3基于Rspack、new Module Federation、Lightningcss、Biome等前沿技术进行重构,实现了性能的飞跃性提升和功能的全面扩展。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357349281885503500",target:"_blank",rel:"noopener noreferrer"}},[e._v("Canvas简历编辑器-Monorepo+Rspack工程实践"),t("OutboundLink")],1),e._v(": 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下在多个子项目的情况下,借助于Monorepo+Rspack管理的项目最佳实践。----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356138322367807526",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端工程化之代码规范"),t("OutboundLink")],1),e._v(": 前端工程化是指将前端开发流程标准化、自动化和模块化的过程。实际项目中根据需求和团队情况可能会有所不同。前端工程化是一个很大的话题,并不局限于上述列举的部分,主要目的是,前端工程化通过引入模块化。。。。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358748614854393875",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node 包管理工具进化历程"),t("OutboundLink")],1),e._v(": 我们每天都在接触 "),t("code",[e._v("xxx install")]),e._v(" 来安装依赖,其中包管理器是必不可少的工具,它从最初的 NPM 发展到 Yarn、Pnpm、Bun 百花齐放,这篇文章将带大家探索包管理器的发展历程和原理。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357990322063310874",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端依赖注入的探索和实践"),t("OutboundLink")],1),e._v(": 随着前端领域快速发展,前端不再停留于“切图”,直接开发逻辑已经很难 hold 住现在的前端项目。而在后端领域已经很成熟的架构设计思想,整洁架构,DDD,控制反转等,正好能够应对前端项目当前面临的问题。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091174469666",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vite优化方案"),t("OutboundLink")],1),e._v(": 其实优化的主要难点还是从哪里开始去优化,如果不清楚自己的项目问题出现在哪里,就显得比较盲目,不知道优化哪里,那在优化之前我们先分析一下我文件依赖----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357546247849164838",target:"_blank",rel:"noopener noreferrer"}},[e._v("两分钟构建你自己的前端脚手架"),t("OutboundLink")],1),e._v(": Swift-Core 是一个用于构建命令行界面(CLI)应用的工具包,可以帮助你快速搭建 CLI 脚手架下载器。要开始使用,你需要: 1. 配置你的仓库地址 对于 GitHub 个人账号:打开你的仓库----👍🏻点赞量:2")])]),e._v(" "),t("h3",{attrs:{id:"前端-微信小程序"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-微信小程序"}},[e._v("#")]),e._v(" 前端-微信小程序")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358306245349621786",target:"_blank",rel:"noopener noreferrer"}},[e._v("uniapp微信小程序支付,并设置订阅消息"),t("OutboundLink")],1),e._v(": 微信支付后。用户消费会得到积分,支付完成后,积分的变动需要通过微信公众号进行提醒。 整体流程,用户选择好商品后,点击立即购买,然后提交订单。 然后弹出申请消息通知。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356133709089669135",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个小猪咪🐱品种鉴定小工具"),t("OutboundLink")],1),e._v(": 🐱前言 今日突发奇想给自家小猪咪做一个品种血统鉴定小工具看看猪咪继承了哪些血统,毕竟小猪咪到家这么久了都不知道他继承了那只猪咪的基因~~ 🤔️技术选择 目前调研了多个图片识别,感觉只有百度的做的最好,----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355383157556510759",target:"_blank",rel:"noopener noreferrer"}},[e._v(" 【记一记】h5移动端和小程序富文本渲染和富文本解决方案mp-html组件使用记录"),t("OutboundLink")],1),e._v(": uni-app多平台富文本渲染,富文本编辑组件mp-html使用小技巧,主要记录我在使用过程中遇到的一些问题----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357261180492693530",target:"_blank",rel:"noopener noreferrer"}},[e._v("小程序之Taro跨端框架实战总结"),t("OutboundLink")],1),e._v(": 本文介绍了在小程序中使用Taro跨端框架的经验总结,包含:技术选型调研、Taro编译时的流程解析、小程序开发效率、用户体验和性能优化等。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083109911183386",target:"_blank",rel:"noopener noreferrer"}},[e._v("小程序原生开发学习"),t("OutboundLink")],1),e._v(": 小程序是依赖特定小程序平台环境的跨平台应用程序,无需下载安装,即开即用,同时在使用体验上更贴近一般手机APP。本文详细介绍了入门小程序所需要了解的一系列知识,包括开发入门、常见场景应用。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357932616086569011",target:"_blank",rel:"noopener noreferrer"}},[e._v("记一次对某高校微信小程序的漏洞挖掘"),t("OutboundLink")],1),e._v(": 挖掘目标部署在微信的资产,减少信息的收集,毕竟一般web站点没有账号密码不好进入后台,挖掘功能点少。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358687549848469555",target:"_blank",rel:"noopener noreferrer"}},[e._v("定制小程序:全局修改tabbar,导航栏主题色,闪烁问题"),t("OutboundLink")],1),e._v(": 背景 由于公司为合作伙伴推出定制小程序服务,小程序都是一套代码实现,而每个小程序都有自己的导航栏主题色,自己的tabBar,需要全局修改。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359208736668614693",target:"_blank",rel:"noopener noreferrer"}},[e._v("微信小程序地图polyline坐标太多异常显示BUG"),t("OutboundLink")],1),e._v(": 描述 微信小程序map地图上显示polyline线,点位超过1250个出现bug,(仅真机上出现,模拟器上正常) 这里以加载四川省边界为例, 以下是示例代码----👍🏻点赞量:1")])]),e._v(" "),t("h3",{attrs:{id:"后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#后端"}},[e._v("#")]),e._v(" 后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356652717392740404",target:"_blank",rel:"noopener noreferrer"}},[e._v("【推荐】steam流太难用了看看JDFrame"),t("OutboundLink")],1),e._v(": 由于经常记不住stream的一些API每次要复制来复制去并且又长又臭,想要更加语意化的api,于是便有这个工具,语意化和简化java8的stream流式处理工具----👍🏻点赞量:33")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357261180492922906",target:"_blank",rel:"noopener noreferrer"}},[e._v("上菜了 , G1 GC 回收器垃圾回收的处理流程放在这了"),t("OutboundLink")],1),e._v(": 👈👈👈 欢迎点赞收藏关注哟 一. 前言 G1 回收器的回收循环主要分为3大主要的类型 : 年轻代循环 ,多步骤并行标记循环 ,混合收集阶段。 同时流程外还有一个保护性的 FullGC 同样存在。 而在----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357922389417017353",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:为什么忘记密码要重置而不是告诉你原密码?"),t("OutboundLink")],1),e._v(": 这是一个挺有意思的面试题,挺简单的,不知道大家平时在重置密码的时候有没有想过这个问题。回答这个问题其实就一句话:因为服务端也不知道你的原密码是什么。如果知道的话,那就是严重的安全风险问题了。 我们这里----👍🏻点赞量:25")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357172505961578511",target:"_blank",rel:"noopener noreferrer"}},[e._v("【禁止血压飙升】如何拥有一个优雅的 controller"),t("OutboundLink")],1),e._v(": 见过几千行代码的 controller吗?我见过。 见过全是 try catch 的 controller 吗,我见过。如何拥有一个优雅的 controller 呢?----👍🏻点赞量:27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358295139457761317",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js VS .Net:国外网友也吵起来了!"),t("OutboundLink")],1),e._v(": 近日有人在 Hacker News 上询问了有关 Node.js 和 .Net Core(2024)生态系统,此前在 2016 年也有过同样问题的讨论。引发激烈讨论----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356770034180948009",target:"_blank",rel:"noopener noreferrer"}},[e._v("探索Java世界中的多线程:理论、实践与案例分析"),t("OutboundLink")],1),e._v(": 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356434494511071268",target:"_blank",rel:"noopener noreferrer"}},[e._v("看了Kubernetes源码后,我学到的架构设计"),t("OutboundLink")],1),e._v(": 在阅读Kubernetes的源码和相关演进的过程时,结合我自己的工作经验得到的架构设计的应用及最佳实践。----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358753499138179107",target:"_blank",rel:"noopener noreferrer"}},[e._v("正式发布的Spring AI,能让Java喝上AI赛道的汤吗?"),t("OutboundLink")],1),e._v(": Java在AI这条路上一直没什么好的发展,不过Spring最近出来了一个新的模块叫做Spring AI,能让Java喝上AI赛道的汤吗?----👍🏻点赞量:17")])]),e._v(" "),t("h3",{attrs:{id:"android"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#android"}},[e._v("#")]),e._v(" Android")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356888527654977571",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter开发7个建议,让你的工作效率飙升"),t("OutboundLink")],1),e._v(": 日常开发中,还有没有其它提升工作效率的方法呢,今天就给大家分享几个超实用的建议,助你在 "),t("code",[e._v("Flutter")]),e._v(" 开发中事半功倍。----👍🏻点赞量:22")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356450983838318601",target:"_blank",rel:"noopener noreferrer"}},[e._v("Doodle Jump — 使用Flutter&Flame开发游戏真不错!"),t("OutboundLink")],1),e._v(": 用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672588716163112",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter - 热更新 Shorebird 1.0 正式版来了 🐦"),t("OutboundLink")],1),e._v(": 等了这么久,就在 4月9号 这一天,Shorebird 的 1.0 正式版终于来了!本次最关心的还是对 iOS 的热更新支持得如何了,因为在之前的版本中,iOS 的性能表现简直差到无法使用~----👍🏻点赞量:25")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358647510518497307",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?"),t("OutboundLink")],1),e._v(": 虽然 HTTP3/QUIC 和 cronet 跟 Flutter 没太大关系,只是最近在整理 Flutter 相关资料时发现还挺多人不了解,就放到一起聊聊。 前言 其实为什么会有 HTTP3/QUIC----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357151301221269541",target:"_blank",rel:"noopener noreferrer"}},[e._v("玩鸿蒙项目来了,请尝鲜"),t("OutboundLink")],1),e._v(": 玩鸿蒙项目来了,如果你已经熟悉了鸿蒙的组件,那么这个项目对你来说,一定是很有价值的。包括网路请求,动画,数据持久化,还有第三库的使用。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356437111601758218",target:"_blank",rel:"noopener noreferrer"}},[e._v("Android Jetpack Compose开发体验"),t("OutboundLink")],1),e._v(": 前言 作为Android开发者,xml布局和Compose布局大家应该很熟悉,而Compose作为Android平台上第二款支持声明式UI的框架,第一款是Flutter框架了。 声明式UI有哪些特点,----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358270777984090150",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter 像素编辑器#03 | 像素图层"),t("OutboundLink")],1),e._v(": 本系列,将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】 《Flutter 像素编辑器#01 | 像素网格》 《Flutter 像素编辑器#02 | 配----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356511140829331465",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter&Flame游戏实践#11 | 打砖块 - 功能背包"),t("OutboundLink")],1),e._v(": Flutter&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲染框架,兼具 全端 跨平台和高性能的特点。目前官方对----👍🏻点赞量:8")])]),e._v(" "),t("h3",{attrs:{id:"ios"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ios"}},[e._v("#")]),e._v(" IOS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356233295850586146",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS 隐私协议清单整理"),t("OutboundLink")],1),e._v(": iOS 隐私协议清单配置流程。 创建PrivacyInfo文件 File -> Resource下选择App Privacy 文件。----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355433339547811859",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftUI-布局案例"),t("OutboundLink")],1),e._v(": SwiftUI 的布局算法会通过 body 的返回值获取描述 View 的信息,转换为对应的内部视图信息,然后交给绘图引擎绘制。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356032959214518323",target:"_blank",rel:"noopener noreferrer"}},[e._v("再探 OSX / iOS 的内存管理"),t("OutboundLink")],1),e._v(": 谈到 iOS/OS X 内存管理开发者首先想到的可能是 Objective-C 中 ARC 相关的内容(毕竟相关的内容实在是太多了),但这篇文章与大家分享的是操作系统层面的一些内存相关的概念与知识点。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355763456082083880",target:"_blank",rel:"noopener noreferrer"}},[e._v("Swift 二进制组件getTypeContextDescriptor crash 分析"),t("OutboundLink")],1),e._v(": 二进制组件中出现的崩溃问题,通过堆栈分析和符号断点定位,发现问题出现在 Swift 源码中,由于编译器/链接器的优化,导致了两个不同的符号被合并到一起。文章提供了修复方案和长期、短期解决方案。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355298553473826826",target:"_blank",rel:"noopener noreferrer"}},[e._v("APP联合Unity3D实战"),t("OutboundLink")],1),e._v(": APP中如何嵌入Unity3D?首先准备一个空的项目,其次把Unity3D导出的工程合并进来,最后编译,整体项目就完成了。具体的操作可以看文章内容。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356888527656534051",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS隐私清单API检测"),t("OutboundLink")],1),e._v(": iOS隐私清单API检测 背景 在 WWDC23 上苹果引入了常用第三方 SDK 的新隐私声明和签名,并宣布开发者需要在其应用的隐私声明中声明使用一组 API 的批准理由。这些变更有助于开发者更好地了----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356882188997247013",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftUI本地化-应用内切换语言"),t("OutboundLink")],1),e._v(": App实现本地化,提供多种语言,不仅会极大提高用户体验,而且还会提升App的质量。本文将会完整的介绍怎么为一个App添加多种语言支持,并且无需重启系统就可以实现应用内切换语言。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358310951479558155",target:"_blank",rel:"noopener noreferrer"}},[e._v("swift 5.7 开始,再也不用背正则表达式语法了"),t("OutboundLink")],1),e._v(": 这里每天分享一个 iOS 的新知识,快来关注我吧 前言 前面介绍了一些关于正则表达式的常规用法,其实在 WWDC 2022 上,swift 5.7 中带来了字符串匹配相关的重大升级,其中就包括正则方面----👍🏻点赞量:5")])]),e._v(" "),t("h2",{attrs:{id:"github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github"}},[e._v("#")]),e._v(" GitHub")]),e._v(" "),t("h3",{attrs:{id:"javascript-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-2"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/drawdb-io/drawdb",target:"_blank",rel:"noopener noreferrer"}},[e._v("drawdb-io/drawdb"),t("OutboundLink")],1),e._v(": Free, simple, and intuitive online database design tool and SQL generator.----总⭐️5,969; 今日⭐️1,911")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/trekhleb/javascript-algorithms",target:"_blank",rel:"noopener noreferrer"}},[e._v("trekhleb/javascript-algorithms"),t("OutboundLink")],1),e._v(": 📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings----总⭐️182,498; 今日⭐️1,107")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/google/zx",target:"_blank",rel:"noopener noreferrer"}},[e._v("google/zx"),t("OutboundLink")],1),e._v(": A tool for writing better scripts----总⭐️41,568; 今日⭐️505")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/cypress-io/cypress",target:"_blank",rel:"noopener noreferrer"}},[e._v("cypress-io/cypress"),t("OutboundLink")],1),e._v(": Fast, easy and reliable testing for anything that runs in a browser.----总⭐️46,130; 今日⭐️92")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bigskysoftware/htmx",target:"_blank",rel:"noopener noreferrer"}},[e._v("bigskysoftware/htmx"),t("OutboundLink")],1),e._v(": htmx - high power tools for HTML----总⭐️32,478; 今日⭐️363")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/iamadamdev/bypass-paywalls-chrome",target:"_blank",rel:"noopener noreferrer"}},[e._v("iamadamdev/bypass-paywalls-chrome"),t("OutboundLink")],1),e._v(": Bypass Paywalls web browser extension for Chrome and Firefox.----总⭐️46,521; 今日⭐️250")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Mintplex-Labs/anything-llm",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mintplex-Labs/anything-llm"),t("OutboundLink")],1),e._v(": The all-in-one AI app for any LLM with full RAG and AI Agent capabilites.----总⭐️11,548; 今日⭐️537")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/NaiboWang/EasySpider",target:"_blank",rel:"noopener noreferrer"}},[e._v("NaiboWang/EasySpider"),t("OutboundLink")],1),e._v(": A visual no-code/code-free web crawler/spider易采集:一个可视化浏览器自动化测试/数据采集/爬虫软件,可以无代码图形化的设计和执行爬虫任务。别名:ServiceWrapper面向Web应用的智能化服务封装系统。----总⭐️21,280; 今日⭐️402")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/langflow-ai/langflow",target:"_blank",rel:"noopener noreferrer"}},[e._v("langflow-ai/langflow"),t("OutboundLink")],1),e._v(": ⛓️ Langflow is a dynamic graph where each node is an executable unit. Its modular and interactive design fosters rapid experimentation and prototyping, pushing hard on the limits of creativity.----总⭐️16,960; 今日⭐️476")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/wg-easy/wg-easy",target:"_blank",rel:"noopener noreferrer"}},[e._v("wg-easy/wg-easy"),t("OutboundLink")],1),e._v(": The easiest way to run WireGuard VPN + Web-based Admin UI.----总⭐️11,528; 今日⭐️159")])]),e._v(" "),t("h3",{attrs:{id:"vue"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue"}},[e._v("#")]),e._v(" vue")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/CorentinTh/it-tools",target:"_blank",rel:"noopener noreferrer"}},[e._v("CorentinTh/it-tools"),t("OutboundLink")],1),e._v(": Collection of handy online tools for developers, with great UX.----总⭐️10,491; 今日⭐️815")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ParisNeo/lollms-webui",target:"_blank",rel:"noopener noreferrer"}},[e._v("ParisNeo/lollms-webui"),t("OutboundLink")],1),e._v(": Lord of Large Language Models Web User Interface----总⭐️3,750; 今日⭐️39")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hakadao/BewlyBewly",target:"_blank",rel:"noopener noreferrer"}},[e._v("hakadao/BewlyBewly"),t("OutboundLink")],1),e._v(": Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. (English | 简体中文 | 正體中文 | 廣東話)----总⭐️2,386; 今日⭐️564")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/jason5ng32/MyIP",target:"_blank",rel:"noopener noreferrer"}},[e._v("jason5ng32/MyIP"),t("OutboundLink")],1),e._v(": The best IP Toolbox. Easy to check what's your IPs, IP geolocation, check for DNS leaks, examine WebRTC connections, speed test, ping test, MTR test, check website availability and more! || 🇨🇳 可能是最好用的IP工具箱。轻松检查你的 IP,IP 地理位置,检查DNS泄漏,检查 WebRTC 连接,速度测试,ping 测试,MTR测试,检查网站可用性等等。----总⭐️4,426; 今日⭐️447")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/yudaocode/yudao-ui-admin-vue3",target:"_blank",rel:"noopener noreferrer"}},[e._v("yudaocode/yudao-ui-admin-vue3"),t("OutboundLink")],1),e._v(": 芋道管理后台,基于 Vue3 + Element Plus 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城、CRM、ERP 等功能。----总⭐️1,041; 今日⭐️28")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/jdf2e/nutui",target:"_blank",rel:"noopener noreferrer"}},[e._v("jdf2e/nutui"),t("OutboundLink")],1),e._v(": 京东风格的移动端 Vue 组件库,支持多端小程序(A Vue.js UI Toolkit for Mobile Web)----总⭐️5,893; 今日⭐️44")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ccfddl/ccf-deadlines",target:"_blank",rel:"noopener noreferrer"}},[e._v("ccfddl/ccf-deadlines"),t("OutboundLink")],1),e._v(": ⏰ Collaboratively track deadlines of conferences recommended by CCF (Website, Python Cli, Wechat Applet) / If you find it useful, please star this project, thanks~----总⭐️4,868; 今日⭐️54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/radix-vue/radix-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("radix-vue/radix-vue"),t("OutboundLink")],1),e._v(": Vue port of Radix UI Primitives. An open-source UI component library for building high-quality, accessible design systems and web apps.----总⭐️2,561; 今日⭐️46")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/chansee97/nova-admin",target:"_blank",rel:"noopener noreferrer"}},[e._v("chansee97/nova-admin"),t("OutboundLink")],1),e._v(": A simple and flexible admin template based on Vue3, Vite, TypeScript, NaiveUI----总⭐️271; 今日⭐️87")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/vueComponent/ant-design-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("vueComponent/ant-design-vue"),t("OutboundLink")],1),e._v(": 🌈 An enterprise-class UI components based on Ant Design and Vue. 🐜----总⭐️19,565; 今日⭐️38")])]),e._v(" "),t("h3",{attrs:{id:"typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[e._v("#")]),e._v(" typescript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/miurla/morphic",target:"_blank",rel:"noopener noreferrer"}},[e._v("miurla/morphic"),t("OutboundLink")],1),e._v(": An AI-powered answer engine with a generative UI----总⭐️3,215; 今日⭐️1,045")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/quilljs/quill",target:"_blank",rel:"noopener noreferrer"}},[e._v("quilljs/quill"),t("OutboundLink")],1),e._v(": Quill is a modern WYSIWYG editor built for compatibility and extensibility.----总⭐️39,961; 今日⭐️774")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bluesky-social/social-app",target:"_blank",rel:"noopener noreferrer"}},[e._v("bluesky-social/social-app"),t("OutboundLink")],1),e._v(": The Bluesky Social application for Web, iOS, and Android----总⭐️6,320; 今日⭐️210")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/langgenius/dify",target:"_blank",rel:"noopener noreferrer"}},[e._v("langgenius/dify"),t("OutboundLink")],1),e._v(": Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.----总⭐️22,537; 今日⭐️1,644")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/code100x/cms",target:"_blank",rel:"noopener noreferrer"}},[e._v("code100x/cms"),t("OutboundLink")],1),e._v(": ----总⭐️470; 今日⭐️269")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/code100x/daily-code",target:"_blank",rel:"noopener noreferrer"}},[e._v("code100x/daily-code"),t("OutboundLink")],1),e._v(": ----总⭐️460; 今日⭐️136")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/danny-avila/LibreChat",target:"_blank",rel:"noopener noreferrer"}},[e._v("danny-avila/LibreChat"),t("OutboundLink")],1),e._v(": Enhanced ChatGPT Clone: Features OpenAI, Assistants API, Azure, Groq, GPT-4 Vision, Mistral, Bing, Anthropic, OpenRouter, Vertex AI, Gemini, AI model switching, message search, langchain, DALL-E-3, ChatGPT Plugins, OpenAI Functions, Secure Multi-User System, Presets, completely open-source for self-hosting. More features in development----总⭐️10,489; 今日⭐️914")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/LLM-Red-Team/kimi-free-api",target:"_blank",rel:"noopener noreferrer"}},[e._v("LLM-Red-Team/kimi-free-api"),t("OutboundLink")],1),e._v(": 🚀 KIMI AI 长文本大模型逆向API白嫖服务【特长:长文本解读整理】,支持高速流式输出、联网搜索、长文档解读、图像解析、多轮对话,零配置部署,多路token支持,自动清理会话痕迹。----总⭐️1,882; 今日⭐️365")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/CopilotKit/CopilotKit",target:"_blank",rel:"noopener noreferrer"}},[e._v("CopilotKit/CopilotKit"),t("OutboundLink")],1),e._v(": A framework for building custom AI Copilots 🤖 in-app AI chatbots, in-app AI Agents, & AI-powered Textareas.----总⭐️4,501; 今日⭐️253")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/yangshun/tech-interview-handbook",target:"_blank",rel:"noopener noreferrer"}},[e._v("yangshun/tech-interview-handbook"),t("OutboundLink")],1),e._v(": 💯 Curated coding interview preparation materials for busy software engineers----总⭐️109,640; 今日⭐️728")])]),e._v(" "),t("h3",{attrs:{id:"python-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python-2"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/MaxKB",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/MaxKB"),t("OutboundLink")],1),e._v(": 💬 基于 LLM 大语言模型的知识库问答系统。开箱即用,支持快速嵌入到第三方业务系统,1Panel 官方出品。----总⭐️2,862; 今日⭐️2,321")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/huggingface/parler-tts",target:"_blank",rel:"noopener noreferrer"}},[e._v("huggingface/parler-tts"),t("OutboundLink")],1),e._v(": Inference and training library for high-quality TTS models.----总⭐️2,014; 今日⭐️1,246")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/dvlab-research/MiniGemini",target:"_blank",rel:"noopener noreferrer"}},[e._v("dvlab-research/MiniGemini"),t("OutboundLink")],1),e._v(": Official implementation for Mini-Gemini----总⭐️2,577; 今日⭐️1,724")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Asabeneh/30-Days-Of-Python",target:"_blank",rel:"noopener noreferrer"}},[e._v("Asabeneh/30-Days-Of-Python"),t("OutboundLink")],1),e._v(": 30 days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than100 days, follow your own pace. These videos may help too:----总⭐️31,038; 今日⭐️730")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/TheAlgorithms/Python",target:"_blank",rel:"noopener noreferrer"}},[e._v("TheAlgorithms/Python"),t("OutboundLink")],1),e._v(": All Algorithms implemented in Python----总⭐️179,186; 今日⭐️1,672")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/zulip/zulip",target:"_blank",rel:"noopener noreferrer"}},[e._v("zulip/zulip"),t("OutboundLink")],1),e._v(": Zulip server and web application. Open-source team chat that helps teams stay productive and focused.----总⭐️20,020; 今日⭐️342")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/pytorch/torchtune",target:"_blank",rel:"noopener noreferrer"}},[e._v("pytorch/torchtune"),t("OutboundLink")],1),e._v(": A Native-PyTorch Library for LLM Fine-tuning----总⭐️1,716; 今日⭐️418")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/infiniflow/ragflow",target:"_blank",rel:"noopener noreferrer"}},[e._v("infiniflow/ragflow"),t("OutboundLink")],1),e._v(": RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.----总⭐️5,228; 今日⭐️1,206")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/FoundationVision/VAR",target:"_blank",rel:"noopener noreferrer"}},[e._v("FoundationVision/VAR"),t("OutboundLink")],1),e._v(': [GPT beats diffusion🔥] [scaling laws in visual generation📈] Official impl. of "Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction". An '),t("em",[e._v("ultra-simple, user-friendly yet state-of-the-art")]),e._v(" codebase for autoregressive image generation!----总⭐️2,582; 今日⭐️746")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/PixArt-alpha/PixArt-sigma",target:"_blank",rel:"noopener noreferrer"}},[e._v("PixArt-alpha/PixArt-sigma"),t("OutboundLink")],1),e._v(": PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation----总⭐️695; 今日⭐️180")])]),e._v(" "),t("h3",{attrs:{id:"go"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#go"}},[e._v("#")]),e._v(" go")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/hashicorp/terraform-provider-azurerm",target:"_blank",rel:"noopener noreferrer"}},[e._v("hashicorp/terraform-provider-azurerm"),t("OutboundLink")],1),e._v(": Terraform provider for Azure Resource Manager----总⭐️4,399; 今日⭐️17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ollama/ollama",target:"_blank",rel:"noopener noreferrer"}},[e._v("ollama/ollama"),t("OutboundLink")],1),e._v(": Get up and running with Llama 3, Mistral, Gemma, and other large language models.----总⭐️56,291; 今日⭐️1,755")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/goharbor/harbor",target:"_blank",rel:"noopener noreferrer"}},[e._v("goharbor/harbor"),t("OutboundLink")],1),e._v(": An open source trusted cloud native registry project that stores, signs, and scans content.----总⭐️22,426; 今日⭐️235")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/1Panel",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/1Panel"),t("OutboundLink")],1),e._v(": 🔥 🔥 🔥 现代化、开源的 Linux 服务器运维管理面板。----总⭐️17,751; 今日⭐️381")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/semaphoreui/semaphore",target:"_blank",rel:"noopener noreferrer"}},[e._v("semaphoreui/semaphore"),t("OutboundLink")],1),e._v(": Modern UI for Ansible----总⭐️9,283; 今日⭐️104")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/m1k1o/neko",target:"_blank",rel:"noopener noreferrer"}},[e._v("m1k1o/neko"),t("OutboundLink")],1),e._v(": A self hosted virtual browser that runs in docker and uses WebRTC.----总⭐️5,396; 今日⭐️132")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/milvus-io/milvus",target:"_blank",rel:"noopener noreferrer"}},[e._v("milvus-io/milvus"),t("OutboundLink")],1),e._v(": A cloud-native vector database, storage for next generation AI applications----总⭐️26,694; 今日⭐️186")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/go-gorm/gorm",target:"_blank",rel:"noopener noreferrer"}},[e._v("go-gorm/gorm"),t("OutboundLink")],1),e._v(": The fantastic ORM library for Golang, aims to be developer friendly----总⭐️35,393; 今日⭐️88")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/v2rayA/v2rayA",target:"_blank",rel:"noopener noreferrer"}},[e._v("v2rayA/v2rayA"),t("OutboundLink")],1),e._v(": A web GUI client of Project V which supports VMess, VLESS, SS, SSR, Trojan, Tuic and Juicity protocols. 🚀----总⭐️9,517; 今日⭐️106")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bluenviron/mediamtx",target:"_blank",rel:"noopener noreferrer"}},[e._v("bluenviron/mediamtx"),t("OutboundLink")],1),e._v(": Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams.----总⭐️9,901; 今日⭐️85")])]),e._v(" "),t("h3",{attrs:{id:"rust"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust"}},[e._v("#")]),e._v(" rust")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/zed-industries/zed",target:"_blank",rel:"noopener noreferrer"}},[e._v("zed-industries/zed"),t("OutboundLink")],1),e._v(": Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.----总⭐️31,865; 今日⭐️1,428")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ordinals/ord",target:"_blank",rel:"noopener noreferrer"}},[e._v("ordinals/ord"),t("OutboundLink")],1),e._v(": 👁‍🗨 Rare and exotic sats----总⭐️3,452; 今日⭐️163")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/a16z/jolt",target:"_blank",rel:"noopener noreferrer"}},[e._v("a16z/jolt"),t("OutboundLink")],1),e._v(": The simplest and most extensible ZK VM. Fast and fully open source from a16z crypto and friends. ⚡ 💌----总⭐️490; 今日⭐️87")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/extrawurst/gitui",target:"_blank",rel:"noopener noreferrer"}},[e._v("extrawurst/gitui"),t("OutboundLink")],1),e._v(": Blazing 💥 fast terminal-ui for git written in rust 🦀----总⭐️16,961; 今日⭐️76")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/GreptimeTeam/greptimedb",target:"_blank",rel:"noopener noreferrer"}},[e._v("GreptimeTeam/greptimedb"),t("OutboundLink")],1),e._v(": An open-source, cloud-native, distributed time-series database with PromQL/SQL/Python supported. Available on GreptimeCloud.----总⭐️3,731; 今日⭐️74")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/neondatabase/neon",target:"_blank",rel:"noopener noreferrer"}},[e._v("neondatabase/neon"),t("OutboundLink")],1),e._v(": Neon: Serverless Postgres. We separated storage and compute to offer autoscaling, branching, and bottomless storage.----总⭐️12,176; 今日⭐️185")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/GyulyVGC/sniffnet",target:"_blank",rel:"noopener noreferrer"}},[e._v("GyulyVGC/sniffnet"),t("OutboundLink")],1),e._v(": Comfortably monitor your Internet traffic 🕵️‍♂️----总⭐️13,734; 今日⭐️236")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ratatui-org/ratatui",target:"_blank",rel:"noopener noreferrer"}},[e._v("ratatui-org/ratatui"),t("OutboundLink")],1),e._v(": Rust library that's all about cooking up terminal user interfaces (TUIs)----总⭐️7,660; 今日⭐️188")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/clap-rs/clap",target:"_blank",rel:"noopener noreferrer"}},[e._v("clap-rs/clap"),t("OutboundLink")],1),e._v(": A full featured, fast Command Line Argument Parser for Rust----总⭐️13,253; 今日⭐️41")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/DragonOS-Community/DragonOS",target:"_blank",rel:"noopener noreferrer"}},[e._v("DragonOS-Community/DragonOS"),t("OutboundLink")],1),e._v(": 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算轻量化场景而设计。----总⭐️668; 今日⭐️96")])]),e._v(" "),t("h3",{attrs:{id:"object-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#object-c"}},[e._v("#")]),e._v(" object-c")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/prisonerjohn/FBZ-BEAT",target:"_blank",rel:"noopener noreferrer"}},[e._v("prisonerjohn/FBZ-BEAT"),t("OutboundLink")],1),e._v(": ----总⭐️3; 今日⭐️0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/vegos/LED_Matrix_Clock_Temperature",target:"_blank",rel:"noopener noreferrer"}},[e._v("vegos/LED_Matrix_Clock_Temperature"),t("OutboundLink")],1),e._v(": Clock & Temperature/Humidity Sensor, displayed on LED Matrix, using Arduino, RTC (DS1307), DHT11 Temp/Hum Sensor and one tacticle switch. Time can be set by entering the epoch/unix timestamp on terminal. Light intensity can be set using the button. The code is using Greek characters for displaying the scrolling messages in Greek language, but yo…----总⭐️4; 今日⭐️0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/schacon/blink",target:"_blank",rel:"noopener noreferrer"}},[e._v("schacon/blink"),t("OutboundLink")],1),e._v(": Example file to blink the LED on an Arduino----总⭐️98; 今日⭐️1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/amowu/arduimo",target:"_blank",rel:"noopener noreferrer"}},[e._v("amowu/arduimo"),t("OutboundLink")],1),e._v(": Amo + Arduino = Arduimo----总⭐️6; 今日⭐️0")])]),e._v(" "),t("h3",{attrs:{id:"css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css"}},[e._v("#")]),e._v(" css")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primereact",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primereact"),t("OutboundLink")],1),e._v(": The Most Complete React UI Component Library----总⭐️5,705; 今日⭐️51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/micro-zoe/micro-app",target:"_blank",rel:"noopener noreferrer"}},[e._v("micro-zoe/micro-app"),t("OutboundLink")],1),e._v(": A simple, efficient and powerful micro front-end framework. 一款简约、高效、功能强大的微前端框架----总⭐️5,205; 今日⭐️27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/safak/youtube",target:"_blank",rel:"noopener noreferrer"}},[e._v("safak/youtube"),t("OutboundLink")],1),e._v(": ----总⭐️4,823; 今日⭐️6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/sakai-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/sakai-vue"),t("OutboundLink")],1),e._v(": ----总⭐️383; 今日⭐️16")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/100xdevs-cohort-2/paytm",target:"_blank",rel:"noopener noreferrer"}},[e._v("100xdevs-cohort-2/paytm"),t("OutboundLink")],1),e._v(": ----总⭐️91; 今日⭐️7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/thewhiteh4t/seeker",target:"_blank",rel:"noopener noreferrer"}},[e._v("thewhiteh4t/seeker"),t("OutboundLink")],1),e._v(": Accurately Locate Smartphones using Social Engineering----总⭐️6,453; 今日⭐️27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/john-smilga/react-projects",target:"_blank",rel:"noopener noreferrer"}},[e._v("john-smilga/react-projects"),t("OutboundLink")],1),e._v(": ----总⭐️4,704; 今日⭐️9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/codebucks27/Next.js-Developer-Portfolio-Starter-Code",target:"_blank",rel:"noopener noreferrer"}},[e._v("codebucks27/Next.js-Developer-Portfolio-Starter-Code"),t("OutboundLink")],1),e._v(": ⭐Build a stunning portfolio website with Next.js, Tailwind CSS and Framer-motion. If you want to learn to create this you can follow the tutorial link given in the Read me file.----总⭐️607; 今日⭐️11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hasan-py/MERN_Stack_Project_Ecommerce_Hayroo",target:"_blank",rel:"noopener noreferrer"}},[e._v("hasan-py/MERN_Stack_Project_Ecommerce_Hayroo"),t("OutboundLink")],1),e._v(": E-commerce Website | Payment gateway | Reactjs | Nodejs | Mongodb | Expressjs | JWT | Tailwind Css----总⭐️657; 今日⭐️3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primevue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primevue"),t("OutboundLink")],1),e._v(": Next Generation Vue UI Component Library----总⭐️7,555; 今日⭐️91")])])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{530:function(e,r,t){"use strict";t.r(r);var n=t(7),a=Object(n.a)({},(function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("收集各大技术社区网站每周热文,"),t("a",{attrs:{href:"https://github.com/dravenww/blob",target:"_blank",rel:"noopener noreferrer"}},[e._v("个人技术博客"),t("OutboundLink")],1),e._v(" 在此")]),e._v(" "),t("p",[e._v("每周更新,展示当前周的数据,进行查看,欢迎"),t("a",{attrs:{href:"https://www.dravenwu.top",target:"_blank",rel:"noopener noreferrer"}},[e._v("关注公众号"),t("OutboundLink")],1),e._v(",点个star呀")]),e._v(" "),t("h2",{attrs:{id:"csdn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#csdn"}},[e._v("#")]),e._v(" CSDN")]),e._v(" "),t("h3",{attrs:{id:"数据结构与算法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#数据结构与算法"}},[e._v("#")]),e._v(" 数据结构与算法")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_71158509/article/details/137855059",target:"_blank",rel:"noopener noreferrer"}},[e._v("逻辑回归树是一种用于二分类问题的机器学习模型,结合了决策树和逻辑回归的思想。使用逻辑回归树时,有几个注意事项可以帮助提高模型的性能和可靠性。1. 数据预处理:在使用逻辑回归树之前,应该对数据进行适"),t("OutboundLink")],1),e._v(": 亦旧sea-逻辑回归树是一种用于二分类问题的机器学习模型,结合了决策树和逻辑回归的思想。使用逻辑回归树时,有几个注意事项可以帮助提高模型的性能和可靠性。1. 数据预处理:在使用逻辑回归树之前,应该对数据进行适----🔥 热度:14354")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_60104186/article/details/137752823",target:"_blank",rel:"noopener noreferrer"}},[e._v("探索Java世界中的七大排序算法(上)"),t("OutboundLink")],1),e._v(": 舞法荔枝-探索Java世界中的七大排序算法(上)----🔥 热度:14044")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_70834415/article/details/137800475",target:"_blank",rel:"noopener noreferrer"}},[e._v("决策树:原理,划分属性的选择和剪枝"),t("OutboundLink")],1),e._v(": 川岛新一-决策树:原理,划分属性的选择和剪枝----🔥 热度:12562")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/cz88888888666/article/details/137939922",target:"_blank",rel:"noopener noreferrer"}},[e._v("【详细介绍下图搜索算法】"),t("OutboundLink")],1),e._v(": 程序员不想YY啊-【详细介绍下图搜索算法】----🔥 热度:11258")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_74070923/article/details/137892400",target:"_blank",rel:"noopener noreferrer"}},[e._v("数据传承:多元环境下的HDFS文件上传与配置调优探索"),t("OutboundLink")],1),e._v(": 小伍_Five-数据传承:多元环境下的HDFS文件上传与配置调优探索----🔥 热度:10349")])]),e._v(" "),t("h3",{attrs:{id:"javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/baidu_22713341/article/details/137936390",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flask + Bootstrap vs Flask + React/Vue:初学者指南"),t("OutboundLink")],1),e._v(": civilpy-Flask + Bootstrap vs Flask + React/Vue:初学者指南----🔥 热度:29145")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/ZSZ1805355272/article/details/137916574",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue 3响应式系统全解析:深入ref、reactive、computed、watch及watchEffect"),t("OutboundLink")],1),e._v(": 俎树振-Vue 3响应式系统全解析:深入ref、reactive、computed、watch及watchEffect----🔥 热度:24695")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/dont27/article/details/137934519",target:"_blank",rel:"noopener noreferrer"}},[e._v("react合成事件与原生事件区别备忘"),t("OutboundLink")],1),e._v(": Shellphon-react合成事件与原生事件区别备忘----🔥 热度:21747")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/yunzhan_wurao/article/details/137930013",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue3+ts项目antd-vue中实现树节点添加,编辑,删除等操作"),t("OutboundLink")],1),e._v(": yunzhan_wurao-vue3+ts项目antd-vue中实现树节点添加,编辑,删除等操作----🔥 热度:21739")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_23633427/article/details/137939521",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue整合monaco-editor编译报错 ERROR in ./node_modules/monaco-editor/esm/vs/language/typescript/tsMode.js"),t("OutboundLink")],1),e._v(": MengYan89-Vue整合monaco-editor编译报错 ERROR in ./node_modules/monaco-editor/esm/vs/language/typescript/tsMode.js----🔥 热度:19558")])]),e._v(" "),t("h3",{attrs:{id:"java"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java"}},[e._v("#")]),e._v(" java")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_63947499/article/details/137752045",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解"),t("OutboundLink")],1),e._v(": 陈橘又青-【Spring进阶系列丨第十篇】基于注解的面向切面编程(AOP)详解----🔥 热度:40364")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/asvxc324deas/article/details/137900100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加"),t("OutboundLink")],1),e._v(": asvxc324deas-Java SSM 项目实战 day02 功能介绍,SSM整合,数据库和IDEA的maven工程搭建,产品信息查询和添加----🔥 热度:27430")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84413420/article/details/137899185",target:"_blank",rel:"noopener noreferrer"}},[e._v("IntelliJ IDEA创建基于maven的springboot项目(1)"),t("OutboundLink")],1),e._v(": 2401_84413420-IntelliJ IDEA创建基于maven的springboot项目(1)----🔥 热度:27305")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84413490/article/details/137899196",target:"_blank",rel:"noopener noreferrer"}},[e._v("IntelliJ IDEA创建基于maven的springboot项目"),t("OutboundLink")],1),e._v(": 2401_84413490-IntelliJ IDEA创建基于maven的springboot项目----🔥 热度:27305")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84408337/article/details/137898731",target:"_blank",rel:"noopener noreferrer"}},[e._v("IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Maven版"),t("OutboundLink")],1),e._v(": 2401_84408337-IDEA创建SSM(Spring+SpringMVC+Mybatis)项目-Maven版----🔥 热度:27248")])]),e._v(" "),t("h3",{attrs:{id:"php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#php"}},[e._v("#")]),e._v(" php")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/vmt/article/details/137909805",target:"_blank",rel:"noopener noreferrer"}},[e._v("网络爬虫软件学习"),t("OutboundLink")],1),e._v(": code .-网络爬虫软件学习----🔥 热度:11222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_36798131/article/details/133950698",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP按自然月计算未来日期"),t("OutboundLink")],1),e._v(": 温暖如春520-PHP按自然月计算未来日期----🔥 热度:10977")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/jxjdhdnd/article/details/137880374",target:"_blank",rel:"noopener noreferrer"}},[e._v("华为ensp中静态路由和默认路由的原理及配置"),t("OutboundLink")],1),e._v(": 神秘泣男子-华为ensp中静态路由和默认路由的原理及配置----🔥 热度:10490")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_62273193/article/details/137922773",target:"_blank",rel:"noopener noreferrer"}},[e._v("bt宝塔面板部署vue+php laraval前后端分离项目"),t("OutboundLink")],1),e._v(": 与鱼有约-bt宝塔面板部署vue+php laraval前后端分离项目----🔥 热度:10180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/aronSandy/article/details/137921962",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP性能调优中的关键缓存技术"),t("OutboundLink")],1),e._v(": 代码奇幻之旅-PHP性能调优中的关键缓存技术----🔥 热度:10168")])]),e._v(" "),t("h3",{attrs:{id:"python"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/littlefun591/article/details/137874674",target:"_blank",rel:"noopener noreferrer"}},[e._v("【python】flask中ORM工具SQLAIchemy,各种数据查询操作详细解析"),t("OutboundLink")],1),e._v(": 景天科技苑-【python】flask中ORM工具SQLAIchemy,各种数据查询操作详细解析----🔥 热度:36601")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_43784341/article/details/137877655",target:"_blank",rel:"noopener noreferrer"}},[e._v("Python机器学习库中Scikit-learn和TensorFlow如何选择?"),t("OutboundLink")],1),e._v(": 山间漫步人生路-Python机器学习库中Scikit-learn和TensorFlow如何选择?----🔥 热度:24669")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/QQ_188083800/article/details/137919081",target:"_blank",rel:"noopener noreferrer"}},[e._v("python基于协同过滤算法旅游景点推荐系统flask-django"),t("OutboundLink")],1),e._v(": QQ_188083800-python基于协同过滤算法旅游景点推荐系统flask-django----🔥 热度:24303")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/QQ188083800/article/details/137909720",target:"_blank",rel:"noopener noreferrer"}},[e._v("python退休人员老年人志愿者活动服务系统django-flask"),t("OutboundLink")],1),e._v(": QQ188083800-python退休人员老年人志愿者活动服务系统django-flask----🔥 热度:23920")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_840612233/article/details/137885752",target:"_blank",rel:"noopener noreferrer"}},[e._v("django_flask二维码学生考勤请假签到系统python-vue"),t("OutboundLink")],1),e._v(": qq_840612233-django_flask二维码学生考勤请假签到系统python-vue----🔥 热度:22507")])]),e._v(" "),t("h3",{attrs:{id:"运维"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#运维"}},[e._v("#")]),e._v(" 运维")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_35995514/article/details/137872959",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Linux】服务器时区 [ CST | UTC | GMT | RTC ]"),t("OutboundLink")],1),e._v(": 阿龙先生啊-【Linux】服务器时区 [ CST | UTC | GMT | RTC ]----🔥 热度:36555")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/FDS99999/article/details/137738863",target:"_blank",rel:"noopener noreferrer"}},[e._v("Linux 网络排查命令"),t("OutboundLink")],1),e._v(": 飞大圣-Linux 网络排查命令----🔥 热度:23813")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84010865/article/details/137879169",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nginx多台服务器实现负载均衡"),t("OutboundLink")],1),e._v(": 渊Y-Nginx多台服务器实现负载均衡----🔥 热度:22246")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/rubys007/article/details/137722785",target:"_blank",rel:"noopener noreferrer"}},[e._v("如何在 Ubuntu 14.04 上配置 Bind 作为缓存或转发 DNS 服务器"),t("OutboundLink")],1),e._v(": 白如意i-如何在 Ubuntu 14.04 上配置 Bind 作为缓存或转发 DNS 服务器----🔥 热度:20679")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Once_day/article/details/137935794",target:"_blank",rel:"noopener noreferrer"}},[e._v("网络运输层之(3)GRE协议"),t("OutboundLink")],1),e._v(": Once-Day-网络运输层之(3)GRE协议----🔥 热度:20168")])]),e._v(" "),t("h3",{attrs:{id:"移动开发"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移动开发"}},[e._v("#")]),e._v(" 移动开发")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84123380/article/details/137930597",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Android】使用Kotlin在Android Studio上开发App"),t("OutboundLink")],1),e._v(": 2401_84123380-【Android】使用Kotlin在Android Studio上开发App----🔥 热度:32922")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/eqiang8271/article/details/137911942",target:"_blank",rel:"noopener noreferrer"}},[e._v("Android studio 报错无法找到android.support.v4.app.Fragment——终极解决方案"),t("OutboundLink")],1),e._v(": 阿强的一亩三分地-Android studio 报错无法找到android.support.v4.app.Fragment——终极解决方案----🔥 热度:21338")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84132401/article/details/137904885",target:"_blank",rel:"noopener noreferrer"}},[e._v("React Native 与 嵌入Android原生与Activity页面互相跳转(2)"),t("OutboundLink")],1),e._v(": 2401_84132401-React Native 与 嵌入Android原生与Activity页面互相跳转(2)----🔥 热度:21202")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84132393/article/details/137904850",target:"_blank",rel:"noopener noreferrer"}},[e._v("React Native 与 嵌入Android原生与Activity页面互相跳转(1)"),t("OutboundLink")],1),e._v(": 2401_84132393-React Native 与 嵌入Android原生与Activity页面互相跳转(1)----🔥 热度:21200")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84132381/article/details/137904823",target:"_blank",rel:"noopener noreferrer"}},[e._v("React Native Android混合开发实战教程"),t("OutboundLink")],1),e._v(": 2401_84132381-React Native Android混合开发实战教程----🔥 热度:21200")])]),e._v(" "),t("h3",{attrs:{id:"c-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#c-c"}},[e._v("#")]),e._v(" c/c++")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/jupangMZ/article/details/137891906",target:"_blank",rel:"noopener noreferrer"}},[e._v("【C++杂货铺】继承"),t("OutboundLink")],1),e._v(": 秋刀鱼的滋味@-【C++杂货铺】继承----🔥 热度:18521")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_35662333/article/details/137874497",target:"_blank",rel:"noopener noreferrer"}},[e._v("[c++][netcdf]通过c\\c++读取字段的scale_factor与add_offset"),t("OutboundLink")],1),e._v(": 去往火星-[c++][netcdf]通过c\\c++读取字段的scale_factor与add_offset----🔥 热度:14737")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/feiyangqingyun/article/details/137906373",target:"_blank",rel:"noopener noreferrer"}},[e._v("Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换"),t("OutboundLink")],1),e._v(": feiyangqingyun-Qt/C++音视频开发70-无感切换通道/无缝切换播放视频/多通道流畅切换/不同视频打开无缝切换----🔥 热度:14231")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Ly768768/article/details/137858370",target:"_blank",rel:"noopener noreferrer"}},[e._v("从C转入C++"),t("OutboundLink")],1),e._v(": Ly768768-从C转入C++----🔥 热度:13203")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_83430041/article/details/137772351",target:"_blank",rel:"noopener noreferrer"}},[e._v("C++对比C的增强"),t("OutboundLink")],1),e._v(": 温柔有度-C++对比C的增强----🔥 热度:12345")])]),e._v(" "),t("h2",{attrs:{id:"掘金"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#掘金"}},[e._v("#")]),e._v(" 掘金")]),e._v(" "),t("h3",{attrs:{id:"前端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端"}},[e._v("#")]),e._v(" 前端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357194991339143168",target:"_blank",rel:"noopener noreferrer"}},[e._v("别忘了前端是靠什么起家的😡😡😡"),t("OutboundLink")],1),e._v(": 回想起多年前,前端开发者常被戏称为“切图仔”,但就是这样的角色,通过精湛的CSS技巧,能够实现各种复杂的交互和特效,展现出前所未有的网页魔法。这是那些专注于服务端开发的工程师所难以企及的领域。----👍🏻点赞量:222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357976193271857203",target:"_blank",rel:"noopener noreferrer"}},[e._v(" 这个项目被阮一峰老师周刊推荐了,PV 直线上升啊!"),t("OutboundLink")],1),e._v(": 日常也有订阅阮一峰老师的周刊,上面有些有趣的内容会看下。上周五收到了最新一期的推送,看到资源那块有个 “1. Learn Next.js 中文教程”,这个再熟悉不过了,激动不已,哈哈----👍🏻点赞量:126")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574136884",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:如何实现大文件上传"),t("OutboundLink")],1),e._v(": 前阵子被一个 base 北京的小厂面到这个问题,我仅知道实现大文件上传可以通过切片的方式,但是当面试官问我具体实现细节的时候我就沉默了,这个问题本来就应该是大厂问的,心想现在行业都这么卷了吗,小----👍🏻点赞量:180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355303183922659391",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024 抖音欢笑中国年(三):编辑器技巧与实践"),t("OutboundLink")],1),e._v(": 2024年春节,抖音APP春节活动主要基于内部自研的SAR Creator互动方案完成,编辑器的使用是互动开发的核心。----👍🏻点赞量:31")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357674793791324200",target:"_blank",rel:"noopener noreferrer"}},[e._v("被裁四个月后做出了PC端小说阅读软件"),t("OutboundLink")],1),e._v(": 前言 2023年年底,被裁,开发pc端跨端应用markit,主要功能阅读小说、订阅、便笺。想通过这个找工作,上海深圳南京合肥都行。----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357231056288940072",target:"_blank",rel:"noopener noreferrer"}},[e._v("🔥Rust Farm v1.0 发布!极致性能兼容体验,海量编译特性,真正的下一代 Rust web 构建引擎!"),t("OutboundLink")],1),e._v(": Farm⭐️ 是基于 Rust 语言编写的下一代 Web 构建引擎,已经正式发布 1.0 版本,兼具性能和兼容性,是目前最强大、最快、最稳定的 Rust Web 构建工具。----👍🏻点赞量:88")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356778082824372250",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节无缘后,迎来了滴滴二面,好家伙鏖战三小时!"),t("OutboundLink")],1),e._v(": 先说明下自身成分,双非二本,属于 debuff 拉满了,在之前的一个月中也面试了许多的中厂,自认为经验准备充分,于是4月2号去面试了字节的懂车帝实习岗位(这里后续会写一篇),第一次面试......----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357301805568671755",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:flex:1代表什么"),t("OutboundLink")],1),e._v(": 理解flex属性 在flexbox布局中,flex属性是用来控制项目的伸缩性的。它是一个复合属性,包含了flex-grow、flex-shrink和flex-basis这三个子属性。 在 Flexbo----👍🏻点赞量:41")])]),e._v(" "),t("h3",{attrs:{id:"前端-javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-javascript"}},[e._v("#")]),e._v(" 前端-JavaScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357194991339143168",target:"_blank",rel:"noopener noreferrer"}},[e._v("别忘了前端是靠什么起家的😡😡😡"),t("OutboundLink")],1),e._v(": 回想起多年前,前端开发者常被戏称为“切图仔”,但就是这样的角色,通过精湛的CSS技巧,能够实现各种复杂的交互和特效,展现出前所未有的网页魔法。这是那些专注于服务端开发的工程师所难以企及的领域。----👍🏻点赞量:222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574136884",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:如何实现大文件上传"),t("OutboundLink")],1),e._v(": 前阵子被一个 base 北京的小厂面到这个问题,我仅知道实现大文件上传可以通过切片的方式,但是当面试官问我具体实现细节的时候我就沉默了,这个问题本来就应该是大厂问的,心想现在行业都这么卷了吗,小----👍🏻点赞量:180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357674793791324200",target:"_blank",rel:"noopener noreferrer"}},[e._v("被裁四个月后做出了PC端小说阅读软件"),t("OutboundLink")],1),e._v(": 前言 2023年年底,被裁,开发pc端跨端应用markit,主要功能阅读小说、订阅、便笺。想通过这个找工作,上海深圳南京合肥都行。----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356778082824372250",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节无缘后,迎来了滴滴二面,好家伙鏖战三小时!"),t("OutboundLink")],1),e._v(": 先说明下自身成分,双非二本,属于 debuff 拉满了,在之前的一个月中也面试了许多的中厂,自认为经验准备充分,于是4月2号去面试了字节的懂车帝实习岗位(这里后续会写一篇),第一次面试......----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358598695267008527",target:"_blank",rel:"noopener noreferrer"}},[e._v("autolog.js:一个小而美的toast插件。"),t("OutboundLink")],1),e._v(": css部分正正好好 100 行代码,从上到下分别是:iconfont 字体图标链接、主容器样式、各类型提示框的样式、退场类,入场动画。 由此可见,你也可以重写这些css,为他们添加不同的 icon、----👍🏻点赞量:58")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358704808525971475",target:"_blank",rel:"noopener noreferrer"}},[e._v("手撸一个星系,送给心爱的姑娘!(Three.js Shader 粒子系统实现)"),t("OutboundLink")],1),e._v(": 用 Three.js Shader 粒子系统手撸一个超级漂亮的星系效果!学习如何在球体和圆盘上设置顶点、如何插值颜色、让粒子运动起来等等!----👍🏻点赞量:75")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574284340",target:"_blank",rel:"noopener noreferrer"}},[e._v("总结Vue3的11种传参通信方式,非常齐全"),t("OutboundLink")],1),e._v(": 特意总结一下vue3竟然总结出来11种传参通信方式那么多,11种我分别都列了出来,并且带上最通俗易懂的例子。----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357151301220335653",target:"_blank",rel:"noopener noreferrer"}},[e._v("一边开飞机、一边修飞机,Node 官网的重新设计"),t("OutboundLink")],1),e._v(": Node 不仅重新设计了新官网,还有新设计的吉祥物助阵,一起来深度学习 Node 官方博客,携手 Node 团队一起回顾重新设计官网的这段旅程。----👍🏻点赞量:15")])]),e._v(" "),t("h3",{attrs:{id:"前端-vue-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-vue-js"}},[e._v("#")]),e._v(" 前端-Vue.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357674793791324200",target:"_blank",rel:"noopener noreferrer"}},[e._v("被裁四个月后做出了PC端小说阅读软件"),t("OutboundLink")],1),e._v(": 前言 2023年年底,被裁,开发pc端跨端应用markit,主要功能阅读小说、订阅、便笺。想通过这个找工作,上海深圳南京合肥都行。----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574284340",target:"_blank",rel:"noopener noreferrer"}},[e._v("总结Vue3的11种传参通信方式,非常齐全"),t("OutboundLink")],1),e._v(": 特意总结一下vue3竟然总结出来11种传参通信方式那么多,11种我分别都列了出来,并且带上最通俗易懂的例子。----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358704808525414419",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue3 超前版发布三个新特性!有望全面拥抱 JSX/TSX!"),t("OutboundLink")],1),e._v(": 前言 大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~ 拥抱 JSX/TSX? 我们都知道 Vue 一直主流是使用 template 模板来进行页面的编写 ----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355319119296380980",target:"_blank",rel:"noopener noreferrer"}},[e._v("你知道JSON.parse(JSON.stringify())实现深拷贝的原理是什么吗?"),t("OutboundLink")],1),e._v(": 很多场景我们都需要用到深拷贝,那么JSON.parse(JSON.stringify())绝对是我们首选之一,因为他既简单,又能解决我们浅拷贝带来的引用问题,那么你知道它是怎么实现深拷贝的吗?----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358375367340228659",target:"_blank",rel:"noopener noreferrer"}},[e._v("写 H5 页面真的要了解 "),t("meta"),e._v(" 标签! "),t("OutboundLink")],1),e._v(": 前言 事情的起因是这样的,由于 小 A 需要负责开发一个 H5 移动端的项目,需要分别在 微信环境 和 企微环境 中去使用,于是 小 A 使用 Vite + Vue3 来进行开发,然后测试提出如下问题----👍🏻点赞量:51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357382699629559845",target:"_blank",rel:"noopener noreferrer"}},[e._v("JS 最新提案 Signals(信号),stage 0 草案正式发布!"),t("OutboundLink")],1),e._v(": JS Signals(信号)提案的 stage 0 草案、以及符合规范的 polyfill(功能补丁)现已正式公开发布。----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358348786845040680",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue 2024 预言"),t("OutboundLink")],1),e._v(": 就像前端开发世界的其他生态一样,2024 Vue 的生态系统也日新月异。在本文中,我们会回顾 Vue 生态的开发现状,且共享关于 Vue 生态 2024 发展趋势的预言。----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083109912412186",target:"_blank",rel:"noopener noreferrer"}},[e._v("写了个webpack插件,1722行代码,无感升级到vue3😎"),t("OutboundLink")],1),e._v(": 之前对公司七八年的老项目进行了升级,将vue2升级到vue3,并输出了一篇文章。但它存在很多问题,具体来说: 可读性巨差......----👍🏻点赞量:26")])]),e._v(" "),t("h3",{attrs:{id:"前端-面试"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-面试"}},[e._v("#")]),e._v(" 前端-面试")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667574136884",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:如何实现大文件上传"),t("OutboundLink")],1),e._v(": 前阵子被一个 base 北京的小厂面到这个问题,我仅知道实现大文件上传可以通过切片的方式,但是当面试官问我具体实现细节的时候我就沉默了,这个问题本来就应该是大厂问的,心想现在行业都这么卷了吗,小----👍🏻点赞量:180")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356778082824372250",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节无缘后,迎来了滴滴二面,好家伙鏖战三小时!"),t("OutboundLink")],1),e._v(": 先说明下自身成分,双非二本,属于 debuff 拉满了,在之前的一个月中也面试了许多的中厂,自认为经验准备充分,于是4月2号去面试了字节的懂车帝实习岗位(这里后续会写一篇),第一次面试......----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357301805568671755",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:flex:1代表什么"),t("OutboundLink")],1),e._v(": 理解flex属性 在flexbox布局中,flex属性是用来控制项目的伸缩性的。它是一个复合属性,包含了flex-grow、flex-shrink和flex-basis这三个子属性。 在 Flexbo----👍🏻点赞量:41")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355319119296380980",target:"_blank",rel:"noopener noreferrer"}},[e._v("你知道JSON.parse(JSON.stringify())实现深拷贝的原理是什么吗?"),t("OutboundLink")],1),e._v(": 很多场景我们都需要用到深拷贝,那么JSON.parse(JSON.stringify())绝对是我们首选之一,因为他既简单,又能解决我们浅拷贝带来的引用问题,那么你知道它是怎么实现深拷贝的吗?----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357698668890112036",target:"_blank",rel:"noopener noreferrer"}},[e._v("学历或履历不好,如何进大厂"),t("OutboundLink")],1),e._v(": 人往高处走,只要大家努力,加上朋友的帮助,总有一天能进入大厂工作,但进入大厂只是起点,要想获得更有的职业发展,需要持续学习成长,团队学习效率更高,走得更远,----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357957809071554594",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024.04.15 更新前端面试问题总结(20 道题)"),t("OutboundLink")],1),e._v(": 2024.04.15 更新前端面试问题总结(20 道题) https://github.com/pro-collection/interview-question/issues----👍🏻点赞量:26")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356596872571076627",target:"_blank",rel:"noopener noreferrer"}},[e._v("【优化篇】网站中文字体包优化指南"),t("OutboundLink")],1),e._v(": 汉字字体包的体积通常比较大,通过font-display、woff2、font-spider、字体包切片等手段优化中文字体包。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356809873432641599",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024.04.12 更新前端面试问题总结(17 道题) "),t("OutboundLink")],1),e._v(": 2024.04.12 更新前端面试问题总结(17道题) 获取更多面试相关问题可以访问https://github.com/pro-collection/interview-question----👍🏻点赞量:11")])]),e._v(" "),t("h3",{attrs:{id:"前端-react-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-react-js"}},[e._v("#")]),e._v(" 前端-React.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357976193271857203",target:"_blank",rel:"noopener noreferrer"}},[e._v(" 这个项目被阮一峰老师周刊推荐了,PV 直线上升啊!"),t("OutboundLink")],1),e._v(": 日常也有订阅阮一峰老师的周刊,上面有些有趣的内容会看下。上周五收到了最新一期的推送,看到资源那块有个 “1. Learn Next.js 中文教程”,这个再熟悉不过了,激动不已,哈哈----👍🏻点赞量:126")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357292176945184795",target:"_blank",rel:"noopener noreferrer"}},[e._v("用expo开发react native实在是太爽了"),t("OutboundLink")],1),e._v(": expo出来已经有一段时间了,发现相关的文章还是比较少的。如果你在开发react native,那么我推荐你赶快使用expo来开发把! expo的好处是什么? 一、零配置开发,降低开发者的心智负担。如----👍🏻点赞量:30")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357917741909819407",target:"_blank",rel:"noopener noreferrer"}},[e._v("实现一个支持@的输入框"),t("OutboundLink")],1),e._v(": 产品期望在后台发布帖子时,需要添加 "),t("strong",[e._v("@用户")]),e._v(" 的功能,以便用户收到通知,例如“xxx在xxx提及了您!”。然而,现有的开源库未能满足我们的需求,例如 ant-design的Mentions组件.----👍🏻点赞量:61")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357374179648536576",target:"_blank",rel:"noopener noreferrer"}},[e._v("遇到这三个 api,你会把它封装成组件么?"),t("OutboundLink")],1),e._v(": 最近遇到一些组件,它们只是对 api 的一层简易封装,用起来也和直接用 api 差不多。 但是这种组件的下载量还是挺多的。 今天我们一起来写三个这样的组件,大家来感受下和直接用 api 的区别。 Po----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358665606915588096",target:"_blank",rel:"noopener noreferrer"}},[e._v("图解网页的各种距离"),t("OutboundLink")],1),e._v(": 网页开发中,我们经常要计算各种距离。 比如 OnBoarding 组件,我们要拿到每一步的高亮元素的位置、宽高: 比如 Popover 组件,需要拿到每个元素的位置,然后确定浮层位置: 比如滚动到页面----👍🏻点赞量:32")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356813407373328418",target:"_blank",rel:"noopener noreferrer"}},[e._v("原子化状态管理库 Jotai,它和 Zustand 有啥区别?"),t("OutboundLink")],1),e._v(": Jotai 是一个 react 的状态管理库,主打原子化。 提到原子化,你可能会想到原子化 CSS 框架 tailwind。 比如这样的 css: 用 tailwind 这样写: 定义一系列原子 cl----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357141293111509032",target:"_blank",rel:"noopener noreferrer"}},[e._v("React 19 的新增功能:Action Hooks"),t("OutboundLink")],1),e._v(": React 是前端开发领域最流行的框架之一。我喜欢 React 是因为它背后的团队和社区对它的热情。当社区提出新功能和改进的需求时,团队会倾听,React 的未来是令人兴奋和有趣的。 让我们来看一下 ----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358446362575568906",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tauri 2.0 Updater自动更新指南"),t("OutboundLink")],1),e._v(": Tauri 2.0 Updater自动更新指南 Tauri2.0 将原来的updater 单独封装成了插件plugins-workspace/plugins/updater tauri.conf.js----👍🏻点赞量:9")])]),e._v(" "),t("h3",{attrs:{id:"前端-node-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-node-js"}},[e._v("#")]),e._v(" 前端-Node.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357151301220335653",target:"_blank",rel:"noopener noreferrer"}},[e._v("一边开飞机、一边修飞机,Node 官网的重新设计"),t("OutboundLink")],1),e._v(": Node 不仅重新设计了新官网,还有新设计的吉祥物助阵,一起来深度学习 Node 官方博客,携手 Node 团队一起回顾重新设计官网的这段旅程。----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356450983838384137",target:"_blank",rel:"noopener noreferrer"}},[e._v("探究 CPU 密集型与 IO 密集型任务:提升对 Node.js 中 libuv 库的理解"),t("OutboundLink")],1),e._v(": 在软件开发和系统设计中,了解 CPU 密集型和 IO 密集型的任务对于优化应用程序和选择合适的技术栈极为重要。这些概念主要与应用程序的性能瓶颈有关,可以帮助开发者更好地理解如何设计高效的多线程和异步程----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356867483829600265",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第十五章 child_process"),t("OutboundLink")],1),e._v(": child_process 子进程 child_process 模块是 Node.js 的一个核心模块,可以从 Node.js 应用程序中创建和管理子进程。子进程是从父进程(你的 Node.js 应用----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357965931480055818",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node 汗流浃背,Bun 1.1 支持 Windows,代号“Bundows”"),t("OutboundLink")],1),e._v(": 从 Bun 1.1 开始,Bun 正式支持 Windows!所以,今天我们一起来瞄一下 Bun 官方博客的版本升级说明吧。----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355347789676167219",target:"_blank",rel:"noopener noreferrer"}},[e._v("【0-1搭建网站】(一)Koa+koa/router+module-alias+eslint+prettier"),t("OutboundLink")],1),e._v(": 《【0-1】搭建网站》系列会详细记录一个网站从后端、前端、部署的全过程。本文记录了使用Koa框架搭建网站后端的一些基础配置,包括router、module-alias、eslint、prettier。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356889912127832064",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端脚手架系列(一):Node.js与 ls -al 模拟"),t("OutboundLink")],1),e._v(": 在这篇开篇文章中,我们将介绍如何在Node.js环境下开发前端脚手架,并探讨文件目录统计功能的实现。我们会详细解释如何通过精确的文件数量计算,提升脚手架的准确性和可靠性,为前端自动化工具开发奠定坚实。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091175764002",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个typescript 5 + rollup 4 打包lib模板仓库实现"),t("OutboundLink")],1),e._v(": 前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollu----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359084330121396236",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第六十六章(SCL扫码登录)"),t("OutboundLink")],1),e._v(": 扫码登录 SCL (Scan Code Login) 是一种扫码登录的技术,它允许用户通过扫描二维码来进行登录操作。这种登录方式在许多应用和网站中得到广泛应用,因为它简单、方便且安全。 SCL 扫码登----👍🏻点赞量:8")])]),e._v(" "),t("h3",{attrs:{id:"前端-css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-css"}},[e._v("#")]),e._v(" 前端-CSS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357194991339143168",target:"_blank",rel:"noopener noreferrer"}},[e._v("别忘了前端是靠什么起家的😡😡😡"),t("OutboundLink")],1),e._v(": 回想起多年前,前端开发者常被戏称为“切图仔”,但就是这样的角色,通过精湛的CSS技巧,能够实现各种复杂的交互和特效,展现出前所未有的网页魔法。这是那些专注于服务端开发的工程师所难以企及的领域。----👍🏻点赞量:222")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357301805568671755",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:flex:1代表什么"),t("OutboundLink")],1),e._v(": 理解flex属性 在flexbox布局中,flex属性是用来控制项目的伸缩性的。它是一个复合属性,包含了flex-grow、flex-shrink和flex-basis这三个子属性。 在 Flexbo----👍🏻点赞量:41")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358598695267008527",target:"_blank",rel:"noopener noreferrer"}},[e._v("autolog.js:一个小而美的toast插件。"),t("OutboundLink")],1),e._v(": css部分正正好好 100 行代码,从上到下分别是:iconfont 字体图标链接、主容器样式、各类型提示框的样式、退场类,入场动画。 由此可见,你也可以重写这些css,为他们添加不同的 icon、----👍🏻点赞量:58")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358295139457400869",target:"_blank",rel:"noopener noreferrer"}},[e._v("CSS如何优雅的实现卡片多行排列布局?"),t("OutboundLink")],1),e._v(": 在前端开发中,我们经常遇见这样的开发需求,实现多行排布的卡片,这些卡片宽度一般是固定的, 并且在不同大小的屏幕宽度下自动换行。----👍🏻点赞量:32")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358699186630737955",target:"_blank",rel:"noopener noreferrer"}},[e._v("【动画进阶】类 ChatGpt 多行文本打字效果"),t("OutboundLink")],1),e._v(": 今天我们来学习一个有意思的多行文本输入打字效果,像是这样: 这个效果其实本身并非特别困难,实现的方式也很多,在本文中,我们更多的会聚焦于整个多行打字效果最后的动态光标的实现。 也就是如何在文本不断变长----👍🏻点赞量:54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357546247848378406",target:"_blank",rel:"noopener noreferrer"}},[e._v("对比小红书与电商三巨头的瀑布流,H5 瀑布流实现方案应该如何选择?"),t("OutboundLink")],1),e._v(": 瀑布流布局,我们既能在小红书这类图文网站看到,也能在拼多多、京东和淘宝这类电商网站看到。那么,同样是瀑布流,两种实现方式的优点、缺点是什么呢?如果想用 H5 实现瀑布流,应该用哪一种方案呢?----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358348786843959336",target:"_blank",rel:"noopener noreferrer"}},[e._v("聊聊 CSS 的 ::marker"),t("OutboundLink")],1),e._v(": ::marker 是一个 CSS 的另一个伪元素,使用::marker伪元素,可以对列表做一些有趣的事情,在本文中,我们将深入的聊聊该伪元素。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083412403486746",target:"_blank",rel:"noopener noreferrer"}},[e._v("通过自然语言处理(NLP)实现图像识别的革命:深入探讨多语言目标检测。"),t("OutboundLink")],1),e._v(': 1. 前言 "探索图像识别的未来,我们时常被人工智能所惊艳。但是,你曾想过将自然语言处理(NLP)与图像识别相结合,会擦出怎样的火花吗?让我们一起来揭开这个令人振奋的未来!本文将带你深入探讨如何通过融----👍🏻点赞量:29')])]),e._v(" "),t("h3",{attrs:{id:"前端-后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-后端"}},[e._v("#")]),e._v(" 前端-后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358704845735510027",target:"_blank",rel:"noopener noreferrer"}},[e._v("每个开发人员都应该知道的13个Nodejs库"),t("OutboundLink")],1),e._v(": Node.js,作为一种广受推崇的后端JavaScript环境,已成为众多网络开发者的首选。它不仅位列全球最流行编程语言之一,还通过JavaScript库的代码复用功能,极大地提升了项目开发效率。然而----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356450983838384137",target:"_blank",rel:"noopener noreferrer"}},[e._v("探究 CPU 密集型与 IO 密集型任务:提升对 Node.js 中 libuv 库的理解"),t("OutboundLink")],1),e._v(": 在软件开发和系统设计中,了解 CPU 密集型和 IO 密集型的任务对于优化应用程序和选择合适的技术栈极为重要。这些概念主要与应用程序的性能瓶颈有关,可以帮助开发者更好地理解如何设计高效的多线程和异步程----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357261180492513306",target:"_blank",rel:"noopener noreferrer"}},[e._v("经典问题:从输入url到页面渲染的整个历程"),t("OutboundLink")],1),e._v(": 前言 这个问题可以说是很经典的一个问题了,经典到讲的人太多,感觉现在很多面试都不愿意去问这个问题了。但是被问到但是你不会的话,那就很尴尬了,就像我一样😭。 DNS解析 整个过程的第一步就是DNS的解析----👍🏻点赞量:25")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355347789676167219",target:"_blank",rel:"noopener noreferrer"}},[e._v("【0-1搭建网站】(一)Koa+koa/router+module-alias+eslint+prettier"),t("OutboundLink")],1),e._v(": 《【0-1】搭建网站》系列会详细记录一个网站从后端、前端、部署的全过程。本文记录了使用Koa框架搭建网站后端的一些基础配置,包括router、module-alias、eslint、prettier。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356233295851257890",target:"_blank",rel:"noopener noreferrer"}},[e._v("【0-1搭建网站】(二)GraphQL+环境区分+path添加prefix+统一返回数据格式"),t("OutboundLink")],1),e._v(": 《【0-1】搭建网站》系列会详细记录一个网站从后端、前端、部署的全过程。基于上文增加了GraphQL、环境区分、全局请求path的prefix、统一数据返回格式。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358355063923032115",target:"_blank",rel:"noopener noreferrer"}},[e._v("我把 NextJS 的 App Router 搬到了 Server 端,写一个后端框架有多简单"),t("OutboundLink")],1),e._v(": Hello 大家好,我是 anuoua ,自从很久以前写了前端框架 Unis 后,很长一段时间觉得啥都不感兴趣,期间做了 NextJS 的项目,突然对全栈框架产生了兴趣, NextJS 是真的好用,其----👍🏻点赞量:5")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359076801278722100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Next.js 14 踩坑:处理API中的JWT登录认证问题"),t("OutboundLink")],1),e._v(": 在使用 Next.js14 开发登录登出功能时遇到一个问题:可以设置 cookie,但无法清除 cookie。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356892796614377484",target:"_blank",rel:"noopener noreferrer"}},[e._v("[译]现代化JavaScript深拷贝方式"),t("OutboundLink")],1),e._v(": 你知道现在 JavaScript 有一种原生的深拷贝方法吗? 没错,就是 structuredClone 方法。该方法已内置于 JavaScript 运行时中。----👍🏻点赞量:4")])]),e._v(" "),t("h3",{attrs:{id:"前端-typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-typescript"}},[e._v("#")]),e._v(" 前端-TypeScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355303183922659391",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024 抖音欢笑中国年(三):编辑器技巧与实践"),t("OutboundLink")],1),e._v(": 2024年春节,抖音APP春节活动主要基于内部自研的SAR Creator互动方案完成,编辑器的使用是互动开发的核心。----👍🏻点赞量:31")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356041157993136140",target:"_blank",rel:"noopener noreferrer"}},[e._v("从zustand中窥探typescript逆变、协变、双变和不变"),t("OutboundLink")],1),e._v(": typescript中的协变、逆变等概念比较晦涩,要想成为typescript高手,协变逆变是绕不过去的坎,本文通过一个个例子带你窥探其神秘的面纱...----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091175764002",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个typescript 5 + rollup 4 打包lib模板仓库实现"),t("OutboundLink")],1),e._v(": 前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollu----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358664464999088166",target:"_blank",rel:"noopener noreferrer"}},[e._v("react+ts:类型“Element”的参数不能赋给类型“ReactNode”的参数。ts(2345)"),t("OutboundLink")],1),e._v(": 在React、Ts项目中,引入tsx文件的React代码,在ts配置文件中添加moduleResolution配置选项。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358295139457122341",target:"_blank",rel:"noopener noreferrer"}},[e._v("框架中的类型编程(三):Elysia 中的链式调用与错误处理"),t("OutboundLink")],1),e._v(": 这是专栏「框架中的类型编程」的第三篇内容,你可以在 Framework Typings 或 笔者的个人博客 找到前两篇内容,在之前的内容里我们介绍了 Prisma、tRPC 以及 Hono 中的类型编----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357922389416034313",target:"_blank",rel:"noopener noreferrer"}},[e._v("区区十几个勾子,这次必须要全部拿捏(下篇)"),t("OutboundLink")],1),e._v(": 在上一篇文章中,已经相继介绍了几个React里面常用的hook,这篇文章中,我们继续介绍剩下的几个hook以及它们的特性与用法。 useMemo 这个勾子从名字上就能看出它是与缓存有关的,那么究竟是缓----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083412387315722",target:"_blank",rel:"noopener noreferrer"}},[e._v("探秘TypeScript:基本概念至实际应用一网打尽"),t("OutboundLink")],1),e._v(": TypeScript是JavaScript的超集,为那些希望加强代码质量和工具的Web开发人员带来了新的希望。这篇文章的目的就是带你领略TypeScript的魅力,从基本概念到实际应用,一网打尽。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357279156613726234",target:"_blank",rel:"noopener noreferrer"}},[e._v("「Typescript之旅」:看一遍就理解Ts中的class"),t("OutboundLink")],1),e._v(": 大家好,我是心灵。 最近看过我的文章的小伙伴都知道,在更新一个在Typescript中旅行的专栏,已经更新了5篇文章,这是第六篇。----👍🏻点赞量:5")])]),e._v(" "),t("h3",{attrs:{id:"前端-github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-github"}},[e._v("#")]),e._v(" 前端-GitHub")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358337136023846963",target:"_blank",rel:"noopener noreferrer"}},[e._v("Formik:让用户体验更加出色的表单解决方案"),t("OutboundLink")],1),e._v(": hi, 大家好,我是徐小夕, 今天又到了我们的博学时间。今天和大家分享一款非常有价值的开源项目——Formik。 这款开源项目也是我研究零代码搭建平台——H5-Dooring 时参考的项目之一,它可以----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356817667573350452",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端人专属的 10 个 GitHub 资源,成为 JS 大神的必由之路"),t("OutboundLink")],1),e._v(": 在本文中,我们会共享 10 个开源好用的 Github 存储库,它们会把我们的 JS 技能提升到新的高度!来不及解释了,快上车!----👍🏻点赞量:32")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358446362575568906",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tauri 2.0 Updater自动更新指南"),t("OutboundLink")],1),e._v(": Tauri 2.0 Updater自动更新指南 Tauri2.0 将原来的updater 单独封装成了插件plugins-workspace/plugins/updater tauri.conf.js----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358267939441950720",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:说说包管理工具的发展以及 pnpm 依赖治理的最佳实践 🤯"),t("OutboundLink")],1),e._v(": 目前在前端领域最流行的包管理工具包含了 npm、yarn、pnpm,其中 pnpm 的机制对 yarn 和 npm 堪称降维打击,这篇文章来梳理一下包管理工具的发展历程以及 pnpm 的相关最佳实践----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356886425332990003",target:"_blank",rel:"noopener noreferrer"}},[e._v("使用又拍云极速搭建图床"),t("OutboundLink")],1),e._v(": 前言 某天在群里摸 🐟 ,聊到了图床相关的话题,说又拍云的可以白嫖,于是将它接入到了自己的图床应用里。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357546247848869926",target:"_blank",rel:"noopener noreferrer"}},[e._v("stokado拥抱localForage,轻松管理Web Storage和IndexedDB"),t("OutboundLink")],1),e._v(": stokado结合localForage食用,轻松实现语法糖,监听订阅且跨页面通知,过期设置等功能。sessionStorage和localStorage也变得更加强大,进来看看具体实现----👍🏻点赞量:5")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359076801278525492",target:"_blank",rel:"noopener noreferrer"}},[e._v("Quasar项目中集成unocss解决方案,又Get一个"),t("OutboundLink")],1),e._v(": 今天接手别人的quasar项目要写一个适配PC和手机的页面,想着接入unocss方便点~~~ 结果浪费了半个下午 期间各种踩坑,文档引入不成功,去github搜解决方案,终于解决了----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357382699630542885",target:"_blank",rel:"noopener noreferrer"}},[e._v("js-pytorch:开启前端+AI新世界"),t("OutboundLink")],1),e._v(": 嗨, 大家好, 我是徐小夕。 最近在 github 上发现一款非常有意思的框架—— js-pytorch。它可以让前端轻松使用 javascript 来运行深度学习框架。作为一名资深前端技术玩家, 今----👍🏻点赞量:7")])]),e._v(" "),t("h3",{attrs:{id:"前端-webpack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-webpack"}},[e._v("#")]),e._v(" 前端-Webpack")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083109912412186",target:"_blank",rel:"noopener noreferrer"}},[e._v("写了个webpack插件,1722行代码,无感升级到vue3😎"),t("OutboundLink")],1),e._v(": 之前对公司七八年的老项目进行了升级,将vue2升级到vue3,并输出了一篇文章。但它存在很多问题,具体来说: 可读性巨差......----👍🏻点赞量:26")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357700734005887015",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rspack v0.6.0 发布,全新 Tree Shaking 算法"),t("OutboundLink")],1),e._v(": Rspack v0.6.0 版本已发布!内容包括新版 Tree Shaking 算法、更小的产物体积、新增 CSS extract 插件等。----👍🏻点赞量:22")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356133709089308687",target:"_blank",rel:"noopener noreferrer"}},[e._v("静态站点全文搜索实现原理之Rspress篇"),t("OutboundLink")],1),e._v(": 大家好,我是老纪。书接上回dumi篇,未阅读过的同学建议先看一遍。本文带你继续了解静态站点全文搜索的Rspress的实现方案。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355692365329301544",target:"_blank",rel:"noopener noreferrer"}},[e._v("静态站点全文搜索实现原理之dumi篇"),t("OutboundLink")],1),e._v(": 在构建前端文档网站时,搜索功能是用户体验的关键组成部分之一。从技术的维度上来看,网站的搜索方案可分为后端搜索和前端搜索两种方式。本文带你了解下dumi的全文搜索实现思路。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357205817253658633",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack loaders插件编写"),t("OutboundLink")],1),e._v(': 1. 了解什么是loader 官方解释:loader 用于对模块的源代码进行转换。loader 可以使你在 import 或"加载"模块时预处理文件。因此,loader 类似于其他构建工具中“任务(t----👍🏻点赞量:2')]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358015785422815286",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rsbuild v0.6 发布,基于 Rspack 的构建工具"),t("OutboundLink")],1),e._v(": Rsbuild v0.6 版本已发布!主要特性包括: 升级 Rspack v0.6、默认启用 error overlay、支持 Vue JSX HMR 等。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358136994331885609",target:"_blank",rel:"noopener noreferrer"}},[e._v("Webpack 2024 前前端架构老鸟的分享(三)"),t("OutboundLink")],1),e._v(": Webpack 2024 前前端架构老鸟的分享(三) 七、Webpack 自定义 Loader 的实践。好了各位,关于Webpack的知识我就分享到这里。 无论你们对Webpack爱与恨----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357362143395971072",target:"_blank",rel:"noopener noreferrer"}},[e._v("涨薪面技:写个 enhanced-resolve 插件(6)"),t("OutboundLink")],1),e._v(": 本文接着上文的流水线注册环节讲述后续的流水线注册: 1. module 阶段:处理 @xx 类似这种带有命名空间的内部request,将其变成一个绝对路径;2. resolve-as-module----👍🏻点赞量:1")])]),e._v(" "),t("h3",{attrs:{id:"前端-前端框架"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-前端框架"}},[e._v("#")]),e._v(" 前端-前端框架")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357998495481888777",target:"_blank",rel:"noopener noreferrer"}},[e._v("秒开率破90%!交易后台渲染性能优化 | 得物技术"),t("OutboundLink")],1),e._v(": 一直以来,体验都是得物技术部的关键词之一。本文从本次交易后台性能优化实践出发,同时介绍应用整体架构和设计,希望可以给参与网站性能建设的同学提供一定的学习和参考价值。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356892796613115916",target:"_blank",rel:"noopener noreferrer"}},[e._v("基于 AntvX6 的流程编排系统搭建实践"),t("OutboundLink")],1),e._v(": 基于 AntvX6 的流程编排系统搭建实践 一、 引言 众所周知,前端的流程化配置与框架升级,一直以来都是所有前端开发所需要经历的一环。恰巧最近有项目要进行整合重构,正好可以从0搭建一把可视化配置流----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356915703156523035",target:"_blank",rel:"noopener noreferrer"}},[e._v("画图技术之正交线支持自定义拐点"),t("OutboundLink")],1),e._v(": 介绍最近给流程图支持的魔法功能:正交线支持自定义拐点。 技术实现、数据存储、中间踩过的坑,总结分享。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356772896045858852",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue和react通用后台管理系统权限控制方案"),t("OutboundLink")],1),e._v(": 在任何企业级应用中,尤其是后台管理系统,权限控制是一个至关重要的环节。它确保了系统资源的安全性,防止非法访问和操作,保障业务流程的正常进行。本文件将详细解析后台管理系统中的权限控制机制及其..----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358822246649643049",target:"_blank",rel:"noopener noreferrer"}},[e._v("我为何要放弃Nextjs的App Router开发应用"),t("OutboundLink")],1),e._v(": 背景 在项目前期开发时,曾经对Next的App Router和Page Router都做了一些基础的demo试验,通过对比去看那个Router更合适。从试验的demo来看,其实无论是App和Page都----👍🏻点赞量:5")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358015785422815286",target:"_blank",rel:"noopener noreferrer"}},[e._v("Rsbuild v0.6 发布,基于 Rspack 的构建工具"),t("OutboundLink")],1),e._v(": Rsbuild v0.6 版本已发布!主要特性包括: 升级 Rspack v0.6、默认启用 error overlay、支持 Vue JSX HMR 等。----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358734620618178586",target:"_blank",rel:"noopener noreferrer"}},[e._v("Astro 开启网站性能与开发效率的双重提升之旅"),t("OutboundLink")],1),e._v(": Astro是一个新兴的全栈框架,它结合了多种优秀的Web技术,为构建现代化网站提供了一种全新的方式。使用 Astro 几乎不可能做出缓慢的网站!!!----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356910138945585186",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文说透前端主题切换的思路和实现"),t("OutboundLink")],1),e._v(": 前言 随着现在的前端技术发展,对于UI界面的要求也是越来越高, 在实现框架搭建的时候, 主题切换就是我们考虑的点,今天就和大家讲一讲目前实现主题切换时的方案,以及分析一下各个方案的优劣势----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-架构"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-架构"}},[e._v("#")]),e._v(" 前端-架构")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358743626166222874",target:"_blank",rel:"noopener noreferrer"}},[e._v("深入理解Transformer技术原理 | 得物技术"),t("OutboundLink")],1),e._v(": 谷歌在2017年发布Transformer架构的论文时,论文的标题是:Attention Is All You Need。重点说明了这个架构是基于注意力机制的。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357542359565484082",target:"_blank",rel:"noopener noreferrer"}},[e._v("EMP3.0-基于Rust生态打造的高性能前端构建系统"),t("OutboundLink")],1),e._v(": EMP3基于Rspack、new Module Federation、Lightningcss、Biome等前沿技术进行重构,实现了性能的飞跃性提升和功能的全面扩展。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357349281885503500",target:"_blank",rel:"noopener noreferrer"}},[e._v("Canvas简历编辑器-Monorepo+Rspack工程实践"),t("OutboundLink")],1),e._v(": 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下在多个子项目的情况下,借助于Monorepo+Rspack管理的项目最佳实践。----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356138322367807526",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端工程化之代码规范"),t("OutboundLink")],1),e._v(": 前端工程化是指将前端开发流程标准化、自动化和模块化的过程。实际项目中根据需求和团队情况可能会有所不同。前端工程化是一个很大的话题,并不局限于上述列举的部分,主要目的是,前端工程化通过引入模块化。。。。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358748614854393875",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node 包管理工具进化历程"),t("OutboundLink")],1),e._v(": 我们每天都在接触 "),t("code",[e._v("xxx install")]),e._v(" 来安装依赖,其中包管理器是必不可少的工具,它从最初的 NPM 发展到 Yarn、Pnpm、Bun 百花齐放,这篇文章将带大家探索包管理器的发展历程和原理。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357990322063310874",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端依赖注入的探索和实践"),t("OutboundLink")],1),e._v(": 随着前端领域快速发展,前端不再停留于“切图”,直接开发逻辑已经很难 hold 住现在的前端项目。而在后端领域已经很成熟的架构设计思想,整洁架构,DDD,控制反转等,正好能够应对前端项目当前面临的问题。----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091174469666",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vite优化方案"),t("OutboundLink")],1),e._v(": 其实优化的主要难点还是从哪里开始去优化,如果不清楚自己的项目问题出现在哪里,就显得比较盲目,不知道优化哪里,那在优化之前我们先分析一下我文件依赖----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357546247849164838",target:"_blank",rel:"noopener noreferrer"}},[e._v("两分钟构建你自己的前端脚手架"),t("OutboundLink")],1),e._v(": Swift-Core 是一个用于构建命令行界面(CLI)应用的工具包,可以帮助你快速搭建 CLI 脚手架下载器。要开始使用,你需要: 1. 配置你的仓库地址 对于 GitHub 个人账号:打开你的仓库----👍🏻点赞量:2")])]),e._v(" "),t("h3",{attrs:{id:"前端-微信小程序"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-微信小程序"}},[e._v("#")]),e._v(" 前端-微信小程序")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358306245349621786",target:"_blank",rel:"noopener noreferrer"}},[e._v("uniapp微信小程序支付,并设置订阅消息"),t("OutboundLink")],1),e._v(": 微信支付后。用户消费会得到积分,支付完成后,积分的变动需要通过微信公众号进行提醒。 整体流程,用户选择好商品后,点击立即购买,然后提交订单。 然后弹出申请消息通知。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356133709089669135",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个小猪咪🐱品种鉴定小工具"),t("OutboundLink")],1),e._v(": 🐱前言 今日突发奇想给自家小猪咪做一个品种血统鉴定小工具看看猪咪继承了哪些血统,毕竟小猪咪到家这么久了都不知道他继承了那只猪咪的基因~~ 🤔️技术选择 目前调研了多个图片识别,感觉只有百度的做的最好,----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355383157556510759",target:"_blank",rel:"noopener noreferrer"}},[e._v(" 【记一记】h5移动端和小程序富文本渲染和富文本解决方案mp-html组件使用记录"),t("OutboundLink")],1),e._v(": uni-app多平台富文本渲染,富文本编辑组件mp-html使用小技巧,主要记录我在使用过程中遇到的一些问题----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357261180492693530",target:"_blank",rel:"noopener noreferrer"}},[e._v("小程序之Taro跨端框架实战总结"),t("OutboundLink")],1),e._v(": 本文介绍了在小程序中使用Taro跨端框架的经验总结,包含:技术选型调研、Taro编译时的流程解析、小程序开发效率、用户体验和性能优化等。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359083109911183386",target:"_blank",rel:"noopener noreferrer"}},[e._v("小程序原生开发学习"),t("OutboundLink")],1),e._v(": 小程序是依赖特定小程序平台环境的跨平台应用程序,无需下载安装,即开即用,同时在使用体验上更贴近一般手机APP。本文详细介绍了入门小程序所需要了解的一系列知识,包括开发入门、常见场景应用。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357932616086569011",target:"_blank",rel:"noopener noreferrer"}},[e._v("记一次对某高校微信小程序的漏洞挖掘"),t("OutboundLink")],1),e._v(": 挖掘目标部署在微信的资产,减少信息的收集,毕竟一般web站点没有账号密码不好进入后台,挖掘功能点少。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358687549848469555",target:"_blank",rel:"noopener noreferrer"}},[e._v("定制小程序:全局修改tabbar,导航栏主题色,闪烁问题"),t("OutboundLink")],1),e._v(": 背景 由于公司为合作伙伴推出定制小程序服务,小程序都是一套代码实现,而每个小程序都有自己的导航栏主题色,自己的tabBar,需要全局修改。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359208736668614693",target:"_blank",rel:"noopener noreferrer"}},[e._v("微信小程序地图polyline坐标太多异常显示BUG"),t("OutboundLink")],1),e._v(": 描述 微信小程序map地图上显示polyline线,点位超过1250个出现bug,(仅真机上出现,模拟器上正常) 这里以加载四川省边界为例, 以下是示例代码----👍🏻点赞量:1")])]),e._v(" "),t("h3",{attrs:{id:"后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#后端"}},[e._v("#")]),e._v(" 后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356652717392740404",target:"_blank",rel:"noopener noreferrer"}},[e._v("【推荐】steam流太难用了看看JDFrame"),t("OutboundLink")],1),e._v(": 由于经常记不住stream的一些API每次要复制来复制去并且又长又臭,想要更加语意化的api,于是便有这个工具,语意化和简化java8的stream流式处理工具----👍🏻点赞量:33")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357261180492922906",target:"_blank",rel:"noopener noreferrer"}},[e._v("上菜了 , G1 GC 回收器垃圾回收的处理流程放在这了"),t("OutboundLink")],1),e._v(": 👈👈👈 欢迎点赞收藏关注哟 一. 前言 G1 回收器的回收循环主要分为3大主要的类型 : 年轻代循环 ,多步骤并行标记循环 ,混合收集阶段。 同时流程外还有一个保护性的 FullGC 同样存在。 而在----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357922389417017353",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:为什么忘记密码要重置而不是告诉你原密码?"),t("OutboundLink")],1),e._v(": 这是一个挺有意思的面试题,挺简单的,不知道大家平时在重置密码的时候有没有想过这个问题。回答这个问题其实就一句话:因为服务端也不知道你的原密码是什么。如果知道的话,那就是严重的安全风险问题了。 我们这里----👍🏻点赞量:25")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357172505961578511",target:"_blank",rel:"noopener noreferrer"}},[e._v("【禁止血压飙升】如何拥有一个优雅的 controller"),t("OutboundLink")],1),e._v(": 见过几千行代码的 controller吗?我见过。 见过全是 try catch 的 controller 吗,我见过。如何拥有一个优雅的 controller 呢?----👍🏻点赞量:27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358295139457761317",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js VS .Net:国外网友也吵起来了!"),t("OutboundLink")],1),e._v(": 近日有人在 Hacker News 上询问了有关 Node.js 和 .Net Core(2024)生态系统,此前在 2016 年也有过同样问题的讨论。引发激烈讨论----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356770034180948009",target:"_blank",rel:"noopener noreferrer"}},[e._v("探索Java世界中的多线程:理论、实践与案例分析"),t("OutboundLink")],1),e._v(": 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356434494511071268",target:"_blank",rel:"noopener noreferrer"}},[e._v("看了Kubernetes源码后,我学到的架构设计"),t("OutboundLink")],1),e._v(": 在阅读Kubernetes的源码和相关演进的过程时,结合我自己的工作经验得到的架构设计的应用及最佳实践。----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358753499138179107",target:"_blank",rel:"noopener noreferrer"}},[e._v("正式发布的Spring AI,能让Java喝上AI赛道的汤吗?"),t("OutboundLink")],1),e._v(": Java在AI这条路上一直没什么好的发展,不过Spring最近出来了一个新的模块叫做Spring AI,能让Java喝上AI赛道的汤吗?----👍🏻点赞量:17")])]),e._v(" "),t("h3",{attrs:{id:"android"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#android"}},[e._v("#")]),e._v(" Android")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356888527654977571",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter开发7个建议,让你的工作效率飙升"),t("OutboundLink")],1),e._v(": 日常开发中,还有没有其它提升工作效率的方法呢,今天就给大家分享几个超实用的建议,助你在 "),t("code",[e._v("Flutter")]),e._v(" 开发中事半功倍。----👍🏻点赞量:22")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356450983838318601",target:"_blank",rel:"noopener noreferrer"}},[e._v("Doodle Jump — 使用Flutter&Flame开发游戏真不错!"),t("OutboundLink")],1),e._v(": 用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672588716163112",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter - 热更新 Shorebird 1.0 正式版来了 🐦"),t("OutboundLink")],1),e._v(": 等了这么久,就在 4月9号 这一天,Shorebird 的 1.0 正式版终于来了!本次最关心的还是对 iOS 的热更新支持得如何了,因为在之前的版本中,iOS 的性能表现简直差到无法使用~----👍🏻点赞量:25")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358647510518497307",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter 之 HTTP3/QUIC 和 Cronet 你了解过吗?"),t("OutboundLink")],1),e._v(": 虽然 HTTP3/QUIC 和 cronet 跟 Flutter 没太大关系,只是最近在整理 Flutter 相关资料时发现还挺多人不了解,就放到一起聊聊。 前言 其实为什么会有 HTTP3/QUIC----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7357151301221269541",target:"_blank",rel:"noopener noreferrer"}},[e._v("玩鸿蒙项目来了,请尝鲜"),t("OutboundLink")],1),e._v(": 玩鸿蒙项目来了,如果你已经熟悉了鸿蒙的组件,那么这个项目对你来说,一定是很有价值的。包括网路请求,动画,数据持久化,还有第三库的使用。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356437111601758218",target:"_blank",rel:"noopener noreferrer"}},[e._v("Android Jetpack Compose开发体验"),t("OutboundLink")],1),e._v(": 前言 作为Android开发者,xml布局和Compose布局大家应该很熟悉,而Compose作为Android平台上第二款支持声明式UI的框架,第一款是Flutter框架了。 声明式UI有哪些特点,----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358270777984090150",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter 像素编辑器#03 | 像素图层"),t("OutboundLink")],1),e._v(": 本系列,将通过 Flutter 实现一个全平台的像素编辑器应用。源码见开源项目 【pix_editor】 《Flutter 像素编辑器#01 | 像素网格》 《Flutter 像素编辑器#02 | 配----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356511140829331465",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter&Flame游戏实践#11 | 打砖块 - 功能背包"),t("OutboundLink")],1),e._v(": Flutter&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲染框架,兼具 全端 跨平台和高性能的特点。目前官方对----👍🏻点赞量:8")])]),e._v(" "),t("h3",{attrs:{id:"ios"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ios"}},[e._v("#")]),e._v(" IOS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356233295850586146",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS 隐私协议清单整理"),t("OutboundLink")],1),e._v(": iOS 隐私协议清单配置流程。 创建PrivacyInfo文件 File -> Resource下选择App Privacy 文件。----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355433339547811859",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftUI-布局案例"),t("OutboundLink")],1),e._v(": SwiftUI 的布局算法会通过 body 的返回值获取描述 View 的信息,转换为对应的内部视图信息,然后交给绘图引擎绘制。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356032959214518323",target:"_blank",rel:"noopener noreferrer"}},[e._v("再探 OSX / iOS 的内存管理"),t("OutboundLink")],1),e._v(": 谈到 iOS/OS X 内存管理开发者首先想到的可能是 Objective-C 中 ARC 相关的内容(毕竟相关的内容实在是太多了),但这篇文章与大家分享的是操作系统层面的一些内存相关的概念与知识点。----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355763456082083880",target:"_blank",rel:"noopener noreferrer"}},[e._v("Swift 二进制组件getTypeContextDescriptor crash 分析"),t("OutboundLink")],1),e._v(": 二进制组件中出现的崩溃问题,通过堆栈分析和符号断点定位,发现问题出现在 Swift 源码中,由于编译器/链接器的优化,导致了两个不同的符号被合并到一起。文章提供了修复方案和长期、短期解决方案。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7355298553473826826",target:"_blank",rel:"noopener noreferrer"}},[e._v("APP联合Unity3D实战"),t("OutboundLink")],1),e._v(": APP中如何嵌入Unity3D?首先准备一个空的项目,其次把Unity3D导出的工程合并进来,最后编译,整体项目就完成了。具体的操作可以看文章内容。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356888527656534051",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS隐私清单API检测"),t("OutboundLink")],1),e._v(": iOS隐私清单API检测 背景 在 WWDC23 上苹果引入了常用第三方 SDK 的新隐私声明和签名,并宣布开发者需要在其应用的隐私声明中声明使用一组 API 的批准理由。这些变更有助于开发者更好地了----👍🏻点赞量:6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356882188997247013",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftUI本地化-应用内切换语言"),t("OutboundLink")],1),e._v(": App实现本地化,提供多种语言,不仅会极大提高用户体验,而且还会提升App的质量。本文将会完整的介绍怎么为一个App添加多种语言支持,并且无需重启系统就可以实现应用内切换语言。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358310951479558155",target:"_blank",rel:"noopener noreferrer"}},[e._v("swift 5.7 开始,再也不用背正则表达式语法了"),t("OutboundLink")],1),e._v(": 这里每天分享一个 iOS 的新知识,快来关注我吧 前言 前面介绍了一些关于正则表达式的常规用法,其实在 WWDC 2022 上,swift 5.7 中带来了字符串匹配相关的重大升级,其中就包括正则方面----👍🏻点赞量:5")])]),e._v(" "),t("h2",{attrs:{id:"github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github"}},[e._v("#")]),e._v(" GitHub")]),e._v(" "),t("h3",{attrs:{id:"javascript-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-2"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/drawdb-io/drawdb",target:"_blank",rel:"noopener noreferrer"}},[e._v("drawdb-io/drawdb"),t("OutboundLink")],1),e._v(": Free, simple, and intuitive online database design tool and SQL generator.----总⭐️5,969; 今日⭐️1,911")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/trekhleb/javascript-algorithms",target:"_blank",rel:"noopener noreferrer"}},[e._v("trekhleb/javascript-algorithms"),t("OutboundLink")],1),e._v(": 📝 Algorithms and data structures implemented in JavaScript with explanations and links to further readings----总⭐️182,498; 今日⭐️1,107")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/google/zx",target:"_blank",rel:"noopener noreferrer"}},[e._v("google/zx"),t("OutboundLink")],1),e._v(": A tool for writing better scripts----总⭐️41,568; 今日⭐️505")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/cypress-io/cypress",target:"_blank",rel:"noopener noreferrer"}},[e._v("cypress-io/cypress"),t("OutboundLink")],1),e._v(": Fast, easy and reliable testing for anything that runs in a browser.----总⭐️46,130; 今日⭐️92")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bigskysoftware/htmx",target:"_blank",rel:"noopener noreferrer"}},[e._v("bigskysoftware/htmx"),t("OutboundLink")],1),e._v(": htmx - high power tools for HTML----总⭐️32,478; 今日⭐️363")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/iamadamdev/bypass-paywalls-chrome",target:"_blank",rel:"noopener noreferrer"}},[e._v("iamadamdev/bypass-paywalls-chrome"),t("OutboundLink")],1),e._v(": Bypass Paywalls web browser extension for Chrome and Firefox.----总⭐️46,521; 今日⭐️250")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Mintplex-Labs/anything-llm",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mintplex-Labs/anything-llm"),t("OutboundLink")],1),e._v(": The all-in-one AI app for any LLM with full RAG and AI Agent capabilites.----总⭐️11,548; 今日⭐️537")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/NaiboWang/EasySpider",target:"_blank",rel:"noopener noreferrer"}},[e._v("NaiboWang/EasySpider"),t("OutboundLink")],1),e._v(": A visual no-code/code-free web crawler/spider易采集:一个可视化浏览器自动化测试/数据采集/爬虫软件,可以无代码图形化的设计和执行爬虫任务。别名:ServiceWrapper面向Web应用的智能化服务封装系统。----总⭐️21,280; 今日⭐️402")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/langflow-ai/langflow",target:"_blank",rel:"noopener noreferrer"}},[e._v("langflow-ai/langflow"),t("OutboundLink")],1),e._v(": ⛓️ Langflow is a dynamic graph where each node is an executable unit. Its modular and interactive design fosters rapid experimentation and prototyping, pushing hard on the limits of creativity.----总⭐️16,960; 今日⭐️476")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/wg-easy/wg-easy",target:"_blank",rel:"noopener noreferrer"}},[e._v("wg-easy/wg-easy"),t("OutboundLink")],1),e._v(": The easiest way to run WireGuard VPN + Web-based Admin UI.----总⭐️11,528; 今日⭐️159")])]),e._v(" "),t("h3",{attrs:{id:"vue"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue"}},[e._v("#")]),e._v(" vue")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/CorentinTh/it-tools",target:"_blank",rel:"noopener noreferrer"}},[e._v("CorentinTh/it-tools"),t("OutboundLink")],1),e._v(": Collection of handy online tools for developers, with great UX.----总⭐️10,491; 今日⭐️815")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ParisNeo/lollms-webui",target:"_blank",rel:"noopener noreferrer"}},[e._v("ParisNeo/lollms-webui"),t("OutboundLink")],1),e._v(": Lord of Large Language Models Web User Interface----总⭐️3,750; 今日⭐️39")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hakadao/BewlyBewly",target:"_blank",rel:"noopener noreferrer"}},[e._v("hakadao/BewlyBewly"),t("OutboundLink")],1),e._v(": Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. (English | 简体中文 | 正體中文 | 廣東話)----总⭐️2,386; 今日⭐️564")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/jason5ng32/MyIP",target:"_blank",rel:"noopener noreferrer"}},[e._v("jason5ng32/MyIP"),t("OutboundLink")],1),e._v(": The best IP Toolbox. Easy to check what's your IPs, IP geolocation, check for DNS leaks, examine WebRTC connections, speed test, ping test, MTR test, check website availability and more! || 🇨🇳 可能是最好用的IP工具箱。轻松检查你的 IP,IP 地理位置,检查DNS泄漏,检查 WebRTC 连接,速度测试,ping 测试,MTR测试,检查网站可用性等等。----总⭐️4,426; 今日⭐️447")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/yudaocode/yudao-ui-admin-vue3",target:"_blank",rel:"noopener noreferrer"}},[e._v("yudaocode/yudao-ui-admin-vue3"),t("OutboundLink")],1),e._v(": 芋道管理后台,基于 Vue3 + Element Plus 实现,支持 RBAC 动态权限、数据权限、SaaS 多租户、Flowable 工作流、三方登录、支付、短信、商城、CRM、ERP 等功能。----总⭐️1,041; 今日⭐️28")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/jdf2e/nutui",target:"_blank",rel:"noopener noreferrer"}},[e._v("jdf2e/nutui"),t("OutboundLink")],1),e._v(": 京东风格的移动端 Vue 组件库,支持多端小程序(A Vue.js UI Toolkit for Mobile Web)----总⭐️5,893; 今日⭐️44")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ccfddl/ccf-deadlines",target:"_blank",rel:"noopener noreferrer"}},[e._v("ccfddl/ccf-deadlines"),t("OutboundLink")],1),e._v(": ⏰ Collaboratively track deadlines of conferences recommended by CCF (Website, Python Cli, Wechat Applet) / If you find it useful, please star this project, thanks~----总⭐️4,868; 今日⭐️54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/radix-vue/radix-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("radix-vue/radix-vue"),t("OutboundLink")],1),e._v(": Vue port of Radix UI Primitives. An open-source UI component library for building high-quality, accessible design systems and web apps.----总⭐️2,561; 今日⭐️46")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/chansee97/nova-admin",target:"_blank",rel:"noopener noreferrer"}},[e._v("chansee97/nova-admin"),t("OutboundLink")],1),e._v(": A simple and flexible admin template based on Vue3, Vite, TypeScript, NaiveUI----总⭐️271; 今日⭐️87")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/vueComponent/ant-design-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("vueComponent/ant-design-vue"),t("OutboundLink")],1),e._v(": 🌈 An enterprise-class UI components based on Ant Design and Vue. 🐜----总⭐️19,565; 今日⭐️38")])]),e._v(" "),t("h3",{attrs:{id:"typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[e._v("#")]),e._v(" typescript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/miurla/morphic",target:"_blank",rel:"noopener noreferrer"}},[e._v("miurla/morphic"),t("OutboundLink")],1),e._v(": An AI-powered answer engine with a generative UI----总⭐️3,215; 今日⭐️1,045")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/quilljs/quill",target:"_blank",rel:"noopener noreferrer"}},[e._v("quilljs/quill"),t("OutboundLink")],1),e._v(": Quill is a modern WYSIWYG editor built for compatibility and extensibility.----总⭐️39,961; 今日⭐️774")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bluesky-social/social-app",target:"_blank",rel:"noopener noreferrer"}},[e._v("bluesky-social/social-app"),t("OutboundLink")],1),e._v(": The Bluesky Social application for Web, iOS, and Android----总⭐️6,320; 今日⭐️210")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/langgenius/dify",target:"_blank",rel:"noopener noreferrer"}},[e._v("langgenius/dify"),t("OutboundLink")],1),e._v(": Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.----总⭐️22,537; 今日⭐️1,644")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/code100x/cms",target:"_blank",rel:"noopener noreferrer"}},[e._v("code100x/cms"),t("OutboundLink")],1),e._v(": ----总⭐️470; 今日⭐️269")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/code100x/daily-code",target:"_blank",rel:"noopener noreferrer"}},[e._v("code100x/daily-code"),t("OutboundLink")],1),e._v(": ----总⭐️460; 今日⭐️136")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/danny-avila/LibreChat",target:"_blank",rel:"noopener noreferrer"}},[e._v("danny-avila/LibreChat"),t("OutboundLink")],1),e._v(": Enhanced ChatGPT Clone: Features OpenAI, Assistants API, Azure, Groq, GPT-4 Vision, Mistral, Bing, Anthropic, OpenRouter, Vertex AI, Gemini, AI model switching, message search, langchain, DALL-E-3, ChatGPT Plugins, OpenAI Functions, Secure Multi-User System, Presets, completely open-source for self-hosting. More features in development----总⭐️10,489; 今日⭐️914")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/LLM-Red-Team/kimi-free-api",target:"_blank",rel:"noopener noreferrer"}},[e._v("LLM-Red-Team/kimi-free-api"),t("OutboundLink")],1),e._v(": 🚀 KIMI AI 长文本大模型逆向API白嫖服务【特长:长文本解读整理】,支持高速流式输出、联网搜索、长文档解读、图像解析、多轮对话,零配置部署,多路token支持,自动清理会话痕迹。----总⭐️1,882; 今日⭐️365")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/CopilotKit/CopilotKit",target:"_blank",rel:"noopener noreferrer"}},[e._v("CopilotKit/CopilotKit"),t("OutboundLink")],1),e._v(": A framework for building custom AI Copilots 🤖 in-app AI chatbots, in-app AI Agents, & AI-powered Textareas.----总⭐️4,501; 今日⭐️253")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/yangshun/tech-interview-handbook",target:"_blank",rel:"noopener noreferrer"}},[e._v("yangshun/tech-interview-handbook"),t("OutboundLink")],1),e._v(": 💯 Curated coding interview preparation materials for busy software engineers----总⭐️109,640; 今日⭐️728")])]),e._v(" "),t("h3",{attrs:{id:"python-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python-2"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/MaxKB",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/MaxKB"),t("OutboundLink")],1),e._v(": 💬 基于 LLM 大语言模型的知识库问答系统。开箱即用,支持快速嵌入到第三方业务系统,1Panel 官方出品。----总⭐️2,862; 今日⭐️2,321")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/huggingface/parler-tts",target:"_blank",rel:"noopener noreferrer"}},[e._v("huggingface/parler-tts"),t("OutboundLink")],1),e._v(": Inference and training library for high-quality TTS models.----总⭐️2,014; 今日⭐️1,246")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/dvlab-research/MiniGemini",target:"_blank",rel:"noopener noreferrer"}},[e._v("dvlab-research/MiniGemini"),t("OutboundLink")],1),e._v(": Official implementation for Mini-Gemini----总⭐️2,577; 今日⭐️1,724")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Asabeneh/30-Days-Of-Python",target:"_blank",rel:"noopener noreferrer"}},[e._v("Asabeneh/30-Days-Of-Python"),t("OutboundLink")],1),e._v(": 30 days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than100 days, follow your own pace. These videos may help too:----总⭐️31,038; 今日⭐️730")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/TheAlgorithms/Python",target:"_blank",rel:"noopener noreferrer"}},[e._v("TheAlgorithms/Python"),t("OutboundLink")],1),e._v(": All Algorithms implemented in Python----总⭐️179,186; 今日⭐️1,672")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/zulip/zulip",target:"_blank",rel:"noopener noreferrer"}},[e._v("zulip/zulip"),t("OutboundLink")],1),e._v(": Zulip server and web application. Open-source team chat that helps teams stay productive and focused.----总⭐️20,020; 今日⭐️342")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/pytorch/torchtune",target:"_blank",rel:"noopener noreferrer"}},[e._v("pytorch/torchtune"),t("OutboundLink")],1),e._v(": A Native-PyTorch Library for LLM Fine-tuning----总⭐️1,716; 今日⭐️418")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/infiniflow/ragflow",target:"_blank",rel:"noopener noreferrer"}},[e._v("infiniflow/ragflow"),t("OutboundLink")],1),e._v(": RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine based on deep document understanding.----总⭐️5,228; 今日⭐️1,206")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/FoundationVision/VAR",target:"_blank",rel:"noopener noreferrer"}},[e._v("FoundationVision/VAR"),t("OutboundLink")],1),e._v(': [GPT beats diffusion🔥] [scaling laws in visual generation📈] Official impl. of "Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction". An '),t("em",[e._v("ultra-simple, user-friendly yet state-of-the-art")]),e._v(" codebase for autoregressive image generation!----总⭐️2,582; 今日⭐️746")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/PixArt-alpha/PixArt-sigma",target:"_blank",rel:"noopener noreferrer"}},[e._v("PixArt-alpha/PixArt-sigma"),t("OutboundLink")],1),e._v(": PixArt-Σ: Weak-to-Strong Training of Diffusion Transformer for 4K Text-to-Image Generation----总⭐️695; 今日⭐️180")])]),e._v(" "),t("h3",{attrs:{id:"go"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#go"}},[e._v("#")]),e._v(" go")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/hashicorp/terraform-provider-azurerm",target:"_blank",rel:"noopener noreferrer"}},[e._v("hashicorp/terraform-provider-azurerm"),t("OutboundLink")],1),e._v(": Terraform provider for Azure Resource Manager----总⭐️4,399; 今日⭐️17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ollama/ollama",target:"_blank",rel:"noopener noreferrer"}},[e._v("ollama/ollama"),t("OutboundLink")],1),e._v(": Get up and running with Llama 3, Mistral, Gemma, and other large language models.----总⭐️56,291; 今日⭐️1,755")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/goharbor/harbor",target:"_blank",rel:"noopener noreferrer"}},[e._v("goharbor/harbor"),t("OutboundLink")],1),e._v(": An open source trusted cloud native registry project that stores, signs, and scans content.----总⭐️22,426; 今日⭐️235")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/1Panel",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/1Panel"),t("OutboundLink")],1),e._v(": 🔥 🔥 🔥 现代化、开源的 Linux 服务器运维管理面板。----总⭐️17,751; 今日⭐️381")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/semaphoreui/semaphore",target:"_blank",rel:"noopener noreferrer"}},[e._v("semaphoreui/semaphore"),t("OutboundLink")],1),e._v(": Modern UI for Ansible----总⭐️9,283; 今日⭐️104")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/m1k1o/neko",target:"_blank",rel:"noopener noreferrer"}},[e._v("m1k1o/neko"),t("OutboundLink")],1),e._v(": A self hosted virtual browser that runs in docker and uses WebRTC.----总⭐️5,396; 今日⭐️132")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/milvus-io/milvus",target:"_blank",rel:"noopener noreferrer"}},[e._v("milvus-io/milvus"),t("OutboundLink")],1),e._v(": A cloud-native vector database, storage for next generation AI applications----总⭐️26,694; 今日⭐️186")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/go-gorm/gorm",target:"_blank",rel:"noopener noreferrer"}},[e._v("go-gorm/gorm"),t("OutboundLink")],1),e._v(": The fantastic ORM library for Golang, aims to be developer friendly----总⭐️35,393; 今日⭐️88")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/v2rayA/v2rayA",target:"_blank",rel:"noopener noreferrer"}},[e._v("v2rayA/v2rayA"),t("OutboundLink")],1),e._v(": A web GUI client of Project V which supports VMess, VLESS, SS, SSR, Trojan, Tuic and Juicity protocols. 🚀----总⭐️9,517; 今日⭐️106")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bluenviron/mediamtx",target:"_blank",rel:"noopener noreferrer"}},[e._v("bluenviron/mediamtx"),t("OutboundLink")],1),e._v(": Ready-to-use SRT / WebRTC / RTSP / RTMP / LL-HLS media server and media proxy that allows to read, publish, proxy, record and playback video and audio streams.----总⭐️9,901; 今日⭐️85")])]),e._v(" "),t("h3",{attrs:{id:"rust"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust"}},[e._v("#")]),e._v(" rust")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/zed-industries/zed",target:"_blank",rel:"noopener noreferrer"}},[e._v("zed-industries/zed"),t("OutboundLink")],1),e._v(": Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.----总⭐️31,865; 今日⭐️1,428")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ordinals/ord",target:"_blank",rel:"noopener noreferrer"}},[e._v("ordinals/ord"),t("OutboundLink")],1),e._v(": 👁‍🗨 Rare and exotic sats----总⭐️3,452; 今日⭐️163")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/a16z/jolt",target:"_blank",rel:"noopener noreferrer"}},[e._v("a16z/jolt"),t("OutboundLink")],1),e._v(": The simplest and most extensible ZK VM. Fast and fully open source from a16z crypto and friends. ⚡ 💌----总⭐️490; 今日⭐️87")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/extrawurst/gitui",target:"_blank",rel:"noopener noreferrer"}},[e._v("extrawurst/gitui"),t("OutboundLink")],1),e._v(": Blazing 💥 fast terminal-ui for git written in rust 🦀----总⭐️16,961; 今日⭐️76")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/GreptimeTeam/greptimedb",target:"_blank",rel:"noopener noreferrer"}},[e._v("GreptimeTeam/greptimedb"),t("OutboundLink")],1),e._v(": An open-source, cloud-native, distributed time-series database with PromQL/SQL/Python supported. Available on GreptimeCloud.----总⭐️3,731; 今日⭐️74")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/neondatabase/neon",target:"_blank",rel:"noopener noreferrer"}},[e._v("neondatabase/neon"),t("OutboundLink")],1),e._v(": Neon: Serverless Postgres. We separated storage and compute to offer autoscaling, branching, and bottomless storage.----总⭐️12,176; 今日⭐️185")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/GyulyVGC/sniffnet",target:"_blank",rel:"noopener noreferrer"}},[e._v("GyulyVGC/sniffnet"),t("OutboundLink")],1),e._v(": Comfortably monitor your Internet traffic 🕵️‍♂️----总⭐️13,734; 今日⭐️236")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ratatui-org/ratatui",target:"_blank",rel:"noopener noreferrer"}},[e._v("ratatui-org/ratatui"),t("OutboundLink")],1),e._v(": Rust library that's all about cooking up terminal user interfaces (TUIs)----总⭐️7,660; 今日⭐️188")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/clap-rs/clap",target:"_blank",rel:"noopener noreferrer"}},[e._v("clap-rs/clap"),t("OutboundLink")],1),e._v(": A full featured, fast Command Line Argument Parser for Rust----总⭐️13,253; 今日⭐️41")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/DragonOS-Community/DragonOS",target:"_blank",rel:"noopener noreferrer"}},[e._v("DragonOS-Community/DragonOS"),t("OutboundLink")],1),e._v(": 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算轻量化场景而设计。----总⭐️668; 今日⭐️96")])]),e._v(" "),t("h3",{attrs:{id:"object-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#object-c"}},[e._v("#")]),e._v(" object-c")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/prisonerjohn/FBZ-BEAT",target:"_blank",rel:"noopener noreferrer"}},[e._v("prisonerjohn/FBZ-BEAT"),t("OutboundLink")],1),e._v(": ----总⭐️3; 今日⭐️0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/vegos/LED_Matrix_Clock_Temperature",target:"_blank",rel:"noopener noreferrer"}},[e._v("vegos/LED_Matrix_Clock_Temperature"),t("OutboundLink")],1),e._v(": Clock & Temperature/Humidity Sensor, displayed on LED Matrix, using Arduino, RTC (DS1307), DHT11 Temp/Hum Sensor and one tacticle switch. Time can be set by entering the epoch/unix timestamp on terminal. Light intensity can be set using the button. The code is using Greek characters for displaying the scrolling messages in Greek language, but yo…----总⭐️4; 今日⭐️0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/schacon/blink",target:"_blank",rel:"noopener noreferrer"}},[e._v("schacon/blink"),t("OutboundLink")],1),e._v(": Example file to blink the LED on an Arduino----总⭐️98; 今日⭐️1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/amowu/arduimo",target:"_blank",rel:"noopener noreferrer"}},[e._v("amowu/arduimo"),t("OutboundLink")],1),e._v(": Amo + Arduino = Arduimo----总⭐️6; 今日⭐️0")])]),e._v(" "),t("h3",{attrs:{id:"css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css"}},[e._v("#")]),e._v(" css")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primereact",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primereact"),t("OutboundLink")],1),e._v(": The Most Complete React UI Component Library----总⭐️5,705; 今日⭐️51")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/micro-zoe/micro-app",target:"_blank",rel:"noopener noreferrer"}},[e._v("micro-zoe/micro-app"),t("OutboundLink")],1),e._v(": A simple, efficient and powerful micro front-end framework. 一款简约、高效、功能强大的微前端框架----总⭐️5,205; 今日⭐️27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/safak/youtube",target:"_blank",rel:"noopener noreferrer"}},[e._v("safak/youtube"),t("OutboundLink")],1),e._v(": ----总⭐️4,823; 今日⭐️6")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/sakai-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/sakai-vue"),t("OutboundLink")],1),e._v(": ----总⭐️383; 今日⭐️16")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/100xdevs-cohort-2/paytm",target:"_blank",rel:"noopener noreferrer"}},[e._v("100xdevs-cohort-2/paytm"),t("OutboundLink")],1),e._v(": ----总⭐️91; 今日⭐️7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/thewhiteh4t/seeker",target:"_blank",rel:"noopener noreferrer"}},[e._v("thewhiteh4t/seeker"),t("OutboundLink")],1),e._v(": Accurately Locate Smartphones using Social Engineering----总⭐️6,453; 今日⭐️27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/john-smilga/react-projects",target:"_blank",rel:"noopener noreferrer"}},[e._v("john-smilga/react-projects"),t("OutboundLink")],1),e._v(": ----总⭐️4,704; 今日⭐️9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/codebucks27/Next.js-Developer-Portfolio-Starter-Code",target:"_blank",rel:"noopener noreferrer"}},[e._v("codebucks27/Next.js-Developer-Portfolio-Starter-Code"),t("OutboundLink")],1),e._v(": ⭐Build a stunning portfolio website with Next.js, Tailwind CSS and Framer-motion. If you want to learn to create this you can follow the tutorial link given in the Read me file.----总⭐️607; 今日⭐️11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hasan-py/MERN_Stack_Project_Ecommerce_Hayroo",target:"_blank",rel:"noopener noreferrer"}},[e._v("hasan-py/MERN_Stack_Project_Ecommerce_Hayroo"),t("OutboundLink")],1),e._v(": E-commerce Website | Payment gateway | Reactjs | Nodejs | Mongodb | Expressjs | JWT | Tailwind Css----总⭐️657; 今日⭐️3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primevue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primevue"),t("OutboundLink")],1),e._v(": Next Generation Vue UI Component Library----总⭐️7,555; 今日⭐️91")])])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/15.b8e7ada3.js b/assets/js/15.d0bedf34.js similarity index 99% rename from assets/js/15.b8e7ada3.js rename to assets/js/15.d0bedf34.js index 75c8de58..a1e9b5c2 100644 --- a/assets/js/15.b8e7ada3.js +++ b/assets/js/15.d0bedf34.js @@ -1 +1 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{530:function(e,r,t){"use strict";t.r(r);var n=t(7),a=Object(n.a)({},(function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("收集各大技术社区网站每周热文,"),t("a",{attrs:{href:"https://github.com/dravenww/blob",target:"_blank",rel:"noopener noreferrer"}},[e._v("个人技术博客"),t("OutboundLink")],1),e._v(" 在此")]),e._v(" "),t("p",[e._v("每周更新,展示当前周的数据,进行查看,欢迎"),t("a",{attrs:{href:"https://www.dravenwu.top",target:"_blank",rel:"noopener noreferrer"}},[e._v("关注公众号"),t("OutboundLink")],1),e._v(",点个star呀")]),e._v(" "),t("h2",{attrs:{id:"csdn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#csdn"}},[e._v("#")]),e._v(" CSDN")]),e._v(" "),t("h3",{attrs:{id:"数据结构与算法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#数据结构与算法"}},[e._v("#")]),e._v(" 数据结构与算法")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/xcltapestry/article/details/138089325",target:"_blank",rel:"noopener noreferrer"}},[e._v("迭代加深算法(IDDFS)在电商商品推荐中的应用方案"),t("OutboundLink")],1),e._v(": 拙_言-迭代加深算法(IDDFS)在电商商品推荐中的应用方案----🔥 热度:15485")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_49945796/article/details/138091529",target:"_blank",rel:"noopener noreferrer"}},[e._v("3.机器学习_逻辑回归,SVM"),t("OutboundLink")],1),e._v(": weixin_49945796-3.机器学习_逻辑回归,SVM----🔥 热度:13826")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/cw19980223/article/details/136560469",target:"_blank",rel:"noopener noreferrer"}},[e._v("排序算法汇总"),t("OutboundLink")],1),e._v(": 不会写代码的码农啊-排序算法汇总----🔥 热度:11926")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_63287589/article/details/138124005",target:"_blank",rel:"noopener noreferrer"}},[e._v("机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病"),t("OutboundLink")],1),e._v(": 矩阵猫咪-机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病----🔥 热度:11510")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_63068858/article/details/138173253",target:"_blank",rel:"noopener noreferrer"}},[e._v("各大排序算法总结,你值得一看"),t("OutboundLink")],1),e._v(": 取址执行-各大排序算法总结,你值得一看----🔥 热度:7222")])]),e._v(" "),t("h3",{attrs:{id:"javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_60189088/article/details/138160676",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue3中的reactive、readonly和shallowReactive"),t("OutboundLink")],1),e._v(": 猛扇赵四那半好嘴-vue3中的reactive、readonly和shallowReactive----🔥 热度:28083")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84437530/article/details/138241957",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端框架大比拼:2024年的Vue与React谁更胜一筹?_vue和react哪个厉害"),t("OutboundLink")],1),e._v(": 2401_84437530-前端框架大比拼:2024年的Vue与React谁更胜一筹?_vue和react哪个厉害----🔥 热度:26470")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Everglowwwwww/article/details/138219482",target:"_blank",rel:"noopener noreferrer"}},[e._v("【前端学习——React】React API"),t("OutboundLink")],1),e._v(": Everglowwwwww-【前端学习——React】React API----🔥 热度:21432")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_45356258/article/details/138215551",target:"_blank",rel:"noopener noreferrer"}},[e._v("本地json数据的增删改查#Vue3"),t("OutboundLink")],1),e._v(": Alexeigirl-本地json数据的增删改查#Vue3----🔥 热度:21239")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2302_76609856/article/details/138255654",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue3中的ref与reactive:构建响应式数据的双刃剑"),t("OutboundLink")],1),e._v(": 我是牢大(肘鸡王)-Vue3中的ref与reactive:构建响应式数据的双刃剑----🔥 热度:20904")])]),e._v(" "),t("h3",{attrs:{id:"java"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java"}},[e._v("#")]),e._v(" java")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_63947499/article/details/137752354",target:"_blank",rel:"noopener noreferrer"}},[e._v("【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解"),t("OutboundLink")],1),e._v(": 陈橘又青-【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解----🔥 热度:29962")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_51601665/article/details/138193995",target:"_blank",rel:"noopener noreferrer"}},[e._v("深度解析 Spring 源码:揭秘BeanFactory 之谜"),t("OutboundLink")],1),e._v(": 忆~遂愿-深度解析 Spring 源码:揭秘BeanFactory 之谜----🔥 热度:21318")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84103441/article/details/138261254",target:"_blank",rel:"noopener noreferrer"}},[e._v("15年大牛用140多个实战案例深入讲解Java微服务架构实战:SpringBoot +SpringCloud +Docker +RabbitMQ"),t("OutboundLink")],1),e._v(": 2401_84103441-15年大牛用140多个实战案例深入讲解Java微服务架构实战:SpringBoot +SpringCloud +Docker +RabbitMQ----🔥 热度:20195")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/QQ3166678367/article/details/138252284",target:"_blank",rel:"noopener noreferrer"}},[e._v("java基于springboot的邮箱邮件收发系统设计与实现"),t("OutboundLink")],1),e._v(": QQ3166678367-java基于springboot的邮箱邮件收发系统设计与实现----🔥 热度:19580")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/c18213590220/article/details/138114906",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Java系列】SpringCloudAlibaba 实现在不修改配置文件情况下适配不同环境部署"),t("OutboundLink")],1),e._v(": 后端小肥肠-【Java系列】SpringCloudAlibaba 实现在不修改配置文件情况下适配不同环境部署----🔥 热度:19499")])]),e._v(" "),t("h3",{attrs:{id:"php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#php"}},[e._v("#")]),e._v(" php")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/jxjdhdnd/article/details/138213523",target:"_blank",rel:"noopener noreferrer"}},[e._v("华为ensp中链路聚合两种(lacp-static)模式配置方法"),t("OutboundLink")],1),e._v(": 神秘泣男子-华为ensp中链路聚合两种(lacp-static)模式配置方法----🔥 热度:22074")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_74888502/article/details/138222333",target:"_blank",rel:"noopener noreferrer"}},[e._v("Windows搭建php文件管理服务Tiny File Manager并发布至公网可访问"),t("OutboundLink")],1),e._v(": 学编程的小程-Windows搭建php文件管理服务Tiny File Manager并发布至公网可访问----🔥 热度:21326")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/aran2002/article/details/138232227",target:"_blank",rel:"noopener noreferrer"}},[e._v("linux系统-FTP服务配置"),t("OutboundLink")],1),e._v(": 早点睡吧zzz-linux系统-FTP服务配置----🔥 热度:9202")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_19448821/article/details/138194206",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP利用phpmailer实现邮件发送功能"),t("OutboundLink")],1),e._v(": 知码者-PHP利用phpmailer实现邮件发送功能----🔥 热度:8820")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/ip16yun/article/details/138182289",target:"_blank",rel:"noopener noreferrer"}},[e._v("图片大搜罗:PHP下载器带你畅游Twitter图像海洋"),t("OutboundLink")],1),e._v(": 亿牛云爬虫专家-图片大搜罗:PHP下载器带你畅游Twitter图像海洋----🔥 热度:8385")])]),e._v(" "),t("h3",{attrs:{id:"python"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/lida2003/article/details/138244483",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jammy@Jetson Orin - Tensorflow & Keras Get Started: 003 Implementing a CNN in TensorFlow & Keras"),t("OutboundLink")],1),e._v(": lida2003-Jammy@Jetson Orin - Tensorflow & Keras Get Started: 003 Implementing a CNN in TensorFlow & Keras----🔥 热度:28386")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/liyimindbq/article/details/138220648",target:"_blank",rel:"noopener noreferrer"}},[e._v("Python小游戏 贪吃蛇(完整版) Pygame sys time"),t("OutboundLink")],1),e._v(": 柒小李-Python小游戏 贪吃蛇(完整版) Pygame sys time----🔥 热度:23269")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/aronSandy/article/details/138197882",target:"_blank",rel:"noopener noreferrer"}},[e._v("Python机器学习库scikit-learn和TensorFlow如何选择?"),t("OutboundLink")],1),e._v(": 代码奇幻之旅-Python机器学习库scikit-learn和TensorFlow如何选择?----🔥 热度:23209")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_69240837/article/details/138197135",target:"_blank",rel:"noopener noreferrer"}},[e._v("利用机器学习进行图像分类:以TensorFlow和Keras为例"),t("OutboundLink")],1),e._v(": Just try it-利用机器学习进行图像分类:以TensorFlow和Keras为例----🔥 热度:23155")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2303_79419613/article/details/138209219",target:"_blank",rel:"noopener noreferrer"}},[e._v("Transforms在Pytorch中的使用(Pycharm)"),t("OutboundLink")],1),e._v(": 哆啦蒙圈-Transforms在Pytorch中的使用(Pycharm)----🔥 热度:22169")])]),e._v(" "),t("h3",{attrs:{id:"运维"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#运维"}},[e._v("#")]),e._v(" 运维")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_73951752/article/details/138232414",target:"_blank",rel:"noopener noreferrer"}},[e._v("【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析"),t("OutboundLink")],1),e._v(": 离芩-【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析----🔥 热度:24752")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_74265792/article/details/138047341",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Linux】详解信号产生的方式"),t("OutboundLink")],1),e._v(": 北飞的山羊-【Linux】详解信号产生的方式----🔥 热度:24249")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/WordPresPHP/article/details/138231183",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alibaba Cloud Linux vs Debian服务器选择哪个系统好?"),t("OutboundLink")],1),e._v(": WordPresPHP-Alibaba Cloud Linux vs Debian服务器选择哪个系统好?----🔥 热度:23271")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/sushhsishdgsusk/article/details/138042893",target:"_blank",rel:"noopener noreferrer"}},[e._v("网络程序 -- TCP版服务器"),t("OutboundLink")],1),e._v(": 云烟梦柳-网络程序 -- TCP版服务器----🔥 热度:22463")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_41905051/article/details/138116801",target:"_blank",rel:"noopener noreferrer"}},[e._v("3节点ubuntu24.04服务器docker-compose方式部署高可用elk+kafka日志系统并接入nginx日志"),t("OutboundLink")],1),e._v(": 心软且酷丶-3节点ubuntu24.04服务器docker-compose方式部署高可用elk+kafka日志系统并接入nginx日志----🔥 热度:22042")])]),e._v(" "),t("h3",{attrs:{id:"移动开发"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移动开发"}},[e._v("#")]),e._v(" 移动开发")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/u012881779/article/details/138250722",target:"_blank",rel:"noopener noreferrer"}},[e._v("[iOS]使用CocoaPods发布公开库"),t("OutboundLink")],1),e._v(": 风浅月明-[iOS]使用CocoaPods发布公开库----🔥 热度:21732")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_61164038/article/details/138228763",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unity和iOS 原生专题一 unity打包设置C#设置 Xcode添加OTHER_LDFLAGS和Info.plist设置"),t("OutboundLink")],1),e._v(": leluckys-Unity和iOS 原生专题一 unity打包设置C#设置 Xcode添加OTHER_LDFLAGS和Info.plist设置----🔥 热度:20562")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84544780/article/details/138228100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版"),t("OutboundLink")],1),e._v(": 2401_84544780-Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版----🔥 热度:20500")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/piggy514/article/details/138212805",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS XCode项目自动签名"),t("OutboundLink")],1),e._v(": piggy514-iOS XCode项目自动签名----🔥 热度:19818")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2301_78601147/article/details/138213125",target:"_blank",rel:"noopener noreferrer"}},[e._v("基于微信小程序+SpringBoot+MySQL的中国各地美食推荐小程序(附论文)"),t("OutboundLink")],1),e._v(": code99Top-基于微信小程序+SpringBoot+MySQL的中国各地美食推荐小程序(附论文)----🔥 热度:19193")])]),e._v(" "),t("h3",{attrs:{id:"c-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#c-c"}},[e._v("#")]),e._v(" c/c++")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Bettysweetyaaa/article/details/138252036",target:"_blank",rel:"noopener noreferrer"}},[e._v("C++必修:类与对象(一)"),t("OutboundLink")],1),e._v(": Betty’s Sweet-C++必修:类与对象(一)----🔥 热度:30658")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_70261953/article/details/138229948",target:"_blank",rel:"noopener noreferrer"}},[e._v("【小梦C嘎嘎——启航篇】C++四大类型转换"),t("OutboundLink")],1),e._v(": 博客小梦-【小梦C嘎嘎——启航篇】C++四大类型转换----🔥 热度:19340")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/u011039332/article/details/130783452",target:"_blank",rel:"noopener noreferrer"}},[e._v("12 c++版本的坦克大战"),t("OutboundLink")],1),e._v(": 教练、我想打篮球-12 c++版本的坦克大战----🔥 热度:15321")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_57761637/article/details/138174670",target:"_blank",rel:"noopener noreferrer"}},[e._v("【C++干货基地】深度理解C++中的高效内存管理方式 new & delete"),t("OutboundLink")],1),e._v(": 鸽芷咕-【C++干货基地】深度理解C++中的高效内存管理方式 new & delete----🔥 热度:12771")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_43808717/article/details/138039837",target:"_blank",rel:"noopener noreferrer"}},[e._v("C++高级特性:C/C++内存结构模型(十一)"),t("OutboundLink")],1),e._v(": Splaying-C++高级特性:C/C++内存结构模型(十一)----🔥 热度:10549")])]),e._v(" "),t("h2",{attrs:{id:"掘金"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#掘金"}},[e._v("#")]),e._v(" 掘金")]),e._v(" "),t("h3",{attrs:{id:"前端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端"}},[e._v("#")]),e._v(" 前端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360528073631318027",target:"_blank",rel:"noopener noreferrer"}},[e._v("只写后台管理的前端要怎么提升自己"),t("OutboundLink")],1),e._v(": 本人写了五年的后台管理。每次面试前就会头疼,因为写的页面除了表单就是表格。抱怨过苦恼过也后悔过,但是站在现在的时间点回想以前,发现有很多事情可以做的更好,于是有了这篇文----👍🏻点赞量:530")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329967013923962895",target:"_blank",rel:"noopener noreferrer"}},[e._v("js如何实现当文本内容过长时,中间显示省略号...,两端正常展示"),t("OutboundLink")],1),e._v(": 前一阵做需求时,有个小功能实现起来废了点脑细胞,觉得可以记录一下。 产品的具体诉求是:用户点击按钮进入详情页面,详情页内的卡片标题内容过长时,标题的前后两端正常展示,中间用省略号...表示,并且鼠标悬----👍🏻点赞量:284")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7346512120639340607",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试题:如何让 var [a, b] = {a: 1, b: 2} 解构赋值成功?"),t("OutboundLink")],1),e._v(": 这是一道字节面试题,大家第一眼看到这个面试题的时候,是不是脑瓜子嗡嗡的?有一种熟悉又陌生的感觉?我当时也一样的😭😭😭,接下来,让我们看看思路吧。----👍🏻点赞量:241")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352090806453567500",target:"_blank",rel:"noopener noreferrer"}},[e._v("女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件"),t("OutboundLink")],1),e._v(": 前言 对于复杂的逻辑或者流程来说,画一画流程图可以帮助我们更好的捋清楚逻辑。平时我女朋友也偶尔会用 processon 来画一下流程图, processon 确实是一个很好的软件。 但是免费版只能创建----👍🏻点赞量:141")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360583337511550986",target:"_blank",rel:"noopener noreferrer"}},[e._v("作者把他写了3年的软件,给开源了!"),t("OutboundLink")],1),e._v(": 最近,GitHub上又一款热度很高的开源项目冲进了开发者们的视野。 项目开源不到一个月,现如今就已经收获了15000+的Star标星。 这就是最近非常火热的“顶流” Web OS,名为Puter! 作----👍🏻点赞量:95")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7343138637971734569",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!"),t("OutboundLink")],1),e._v(": node.js的优缺点和应用场景 Express框架:实践与技术探索 Express是一个轻量级且灵活的Node.js Web应用程序框架,它提供了一组简洁而强大的工具,帮助开发者快速构建Web应用。----👍🏻点赞量:72")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340197367515578378",target:"_blank",rel:"noopener noreferrer"}},[e._v("如果iconfont停止服务了,我们怎么办"),t("OutboundLink")],1),e._v(": 在iconfont不能提供服务之后我们只能自己动手去lu一个了,毕竟老板要的是结果,而不是你说的那句苍白的理由,学着自己造轮子吧----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7333986476030935050",target:"_blank",rel:"noopener noreferrer"}},[e._v("【HTML】交友软件上照片的遮罩是如何做的"),t("OutboundLink")],1),e._v(": 笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐,🐶。于是就去下了一些交友软件来排遣寂寞。可惜的是,有些交友软件真不够意思,连一些漂亮小姐姐的图片都要进行遮罩,完全不考虑兄弟们的感受,😠。所以今----👍🏻点赞量:54")])]),e._v(" "),t("h3",{attrs:{id:"前端-javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-javascript"}},[e._v("#")]),e._v(" 前端-JavaScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329967013923962895",target:"_blank",rel:"noopener noreferrer"}},[e._v("js如何实现当文本内容过长时,中间显示省略号...,两端正常展示"),t("OutboundLink")],1),e._v(": 前一阵做需求时,有个小功能实现起来废了点脑细胞,觉得可以记录一下。 产品的具体诉求是:用户点击按钮进入详情页面,详情页内的卡片标题内容过长时,标题的前后两端正常展示,中间用省略号...表示,并且鼠标悬----👍🏻点赞量:284")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352090806453567500",target:"_blank",rel:"noopener noreferrer"}},[e._v("女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件"),t("OutboundLink")],1),e._v(": 前言 对于复杂的逻辑或者流程来说,画一画流程图可以帮助我们更好的捋清楚逻辑。平时我女朋友也偶尔会用 processon 来画一下流程图, processon 确实是一个很好的软件。 但是免费版只能创建----👍🏻点赞量:141")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340197367515578378",target:"_blank",rel:"noopener noreferrer"}},[e._v("如果iconfont停止服务了,我们怎么办"),t("OutboundLink")],1),e._v(": 在iconfont不能提供服务之后我们只能自己动手去lu一个了,毕竟老板要的是结果,而不是你说的那句苍白的理由,学着自己造轮子吧----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7333986476030935050",target:"_blank",rel:"noopener noreferrer"}},[e._v("【HTML】交友软件上照片的遮罩是如何做的"),t("OutboundLink")],1),e._v(": 笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐,🐶。于是就去下了一些交友软件来排遣寂寞。可惜的是,有些交友软件真不够意思,连一些漂亮小姐姐的图片都要进行遮罩,完全不考虑兄弟们的感受,😠。所以今----👍🏻点赞量:54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329353489678680103",target:"_blank",rel:"noopener noreferrer"}},[e._v("分享一款前端网页代码编辑器 Monaco Editor"),t("OutboundLink")],1),e._v(": Monaco Editor Monaco Editor 是由 Microsoft 开发的一款基于 Web 技术的开源代码编辑器,它是 Visual Studio Code 编辑器的核心。Monaco ----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360892717545799689",target:"_blank",rel:"noopener noreferrer"}},[e._v("和后端吵架后,我写了个库,让整个前端团队更加规范!"),t("OutboundLink")],1),e._v(": 前言 大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~ 背景 在平时的开发中,表格数据->(增加/编辑/查看)行->(增加/编辑)提交,这是很常见且简单的业----👍🏻点赞量:46")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340836136208859174",target:"_blank",rel:"noopener noreferrer"}},[e._v("H5 下拉刷新如何实现"),t("OutboundLink")],1),e._v(": 最近我需要做一个下拉刷新的功能,实现功能后我发现,它需要处理的情况还蛮多,于是我整理了这篇文章。首先我会讲解下拉的原理、根据原理写出初始代码;然后我会一边介绍代码存在的缺陷、一边解决缺陷并做些许优化。----👍🏻点赞量:83")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361687968519700514",target:"_blank",rel:"noopener noreferrer"}},[e._v("什么,你连一个Node.js脚本都不会写!!!"),t("OutboundLink")],1),e._v(": 有些人可能会误解 Node.js 脚本,认为它是用 Node.js 编写的。他们可能会觉得如果不懂 Node.js 的语法就无法编写 Node.js 脚本,感觉会写 Node.js 脚本就很神秘。实际----👍🏻点赞量:72")])]),e._v(" "),t("h3",{attrs:{id:"前端-vue-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-vue-js"}},[e._v("#")]),e._v(" 前端-Vue.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329353489678680103",target:"_blank",rel:"noopener noreferrer"}},[e._v("分享一款前端网页代码编辑器 Monaco Editor"),t("OutboundLink")],1),e._v(": Monaco Editor Monaco Editor 是由 Microsoft 开发的一款基于 Web 技术的开源代码编辑器,它是 Visual Studio Code 编辑器的核心。Monaco ----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361687968519700514",target:"_blank",rel:"noopener noreferrer"}},[e._v("什么,你连一个Node.js脚本都不会写!!!"),t("OutboundLink")],1),e._v(": 有些人可能会误解 Node.js 脚本,认为它是用 Node.js 编写的。他们可能会觉得如果不懂 Node.js 的语法就无法编写 Node.js 脚本,感觉会写 Node.js 脚本就很神秘。实际----👍🏻点赞量:72")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7345277549335642112",target:"_blank",rel:"noopener noreferrer"}},[e._v("从0到1实践,企业级前端开发底层规范搭建(2024版) "),t("OutboundLink")],1),e._v(": 写在开头 公司用的前端开发底层还是我18年底刚毕业时候搭建的,虽然后续有更新Vue3,再往后就因为工作忙、转岗产品经理导致落下了更新,很多都已经跟不上现在的潮流了----👍🏻点赞量:53")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7282603229640687672",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue3 中的虚拟DOM、 h() 函数,渲染函数,渲染器知识点一网打尽!"),t("OutboundLink")],1),e._v(": 在平常开发阶段我们总是分不清虚拟 DOM、 h() 函数、渲染函数和渲染器的知识。笔者在翻阅相关文档之后,总结了下面这些知识点。 h() 函数用于创建虚拟 DOM,渲染函数的作用就是返回虚拟 DOM。----👍🏻点赞量:31")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361620320363855926",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个简洁、干净的中后台管理模板"),t("OutboundLink")],1),e._v(": nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。----👍🏻点赞量:42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359876671136301108",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024年了,11款Vue3的PC端UI组件库怎么选?——Vue3组件库推荐"),t("OutboundLink")],1),e._v(": 2024年,Vue3逐渐成为前端开发者使用Vue进行开发时的首选,本文旨在梳理当前市场上比较受欢迎的11款Vue3 PC端UI组件库,帮助开发者在繁多的选择中找到最适合自己项目的组件库。----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360143810599223350",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个惨痛的教训教你Vue后台技术选型"),t("OutboundLink")],1),e._v(": 如果摆上一桌好菜,我立马就会思考我先吃哪个菜,哪个菜我喜欢吃多吃点,哪个菜没吃过我要尝尝,哪个菜不喜欢吃看都不会看一眼;如果出去旅游,我也会想我去过哪里,没去过那里,我最想去哪里;如果让我技术选型----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360892717545521161",target:"_blank",rel:"noopener noreferrer"}},[e._v("客户又要一次性滚动千万条数据..."),t("OutboundLink")],1),e._v(": 欸,朋友们好,我是性能优化带师,寅时码 昨天,产品发来张截图,问我怎么这么卡 我一看,噢~原来是佐田,后端的数据,有三千多条,给我挤爆了 这时间,按照传统前端的方式,应该是 减数据、截数据、分段出 引----👍🏻点赞量:14")])]),e._v(" "),t("h3",{attrs:{id:"前端-react-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-react-js"}},[e._v("#")]),e._v(" 前端-React.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352090806453567500",target:"_blank",rel:"noopener noreferrer"}},[e._v("女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件"),t("OutboundLink")],1),e._v(": 前言 对于复杂的逻辑或者流程来说,画一画流程图可以帮助我们更好的捋清楚逻辑。平时我女朋友也偶尔会用 processon 来画一下流程图, processon 确实是一个很好的软件。 但是免费版只能创建----👍🏻点赞量:141")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7331135154209308687",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官问我 react scheduler 调度机制原理? 我却支支吾吾答不上来...😭😭"),t("OutboundLink")],1),e._v(": 在一次面试时,面试官问我 react scheduler 调度机制原理是什么?我却支支吾吾想了半天没答上来,看着面试官轻蔑的表情,我在心里默默的下定决心:三十年河东三十年河西,莫欺少年穷...... ----👍🏻点赞量:67")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360486735799418916",target:"_blank",rel:"noopener noreferrer"}},[e._v("React 19 带来了 JSX 运行时的重要更新"),t("OutboundLink")],1),e._v(": 在 React 的发展历程中,JSX 运行时一直扮演着重要的角色。在以前的的版本,JSX 运行时会克隆传入的 props 对象,这背后有着两大原因。 历史原因 React 保留了一些特殊的 prop ----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361934843209777152",target:"_blank",rel:"noopener noreferrer"}},[e._v("如何在网页实现 TypeScript 编辑器?"),t("OutboundLink")],1),e._v(": 有的需求需要在网页上写代码。 比如在线执行代码的 playground: 或者在线面试: 如果让你实现网页版 TypeScript 编辑器,你会如何做呢? 有的同学说,直接用微软的 monaco ed----👍🏻点赞量:33")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362057701792923684",target:"_blank",rel:"noopener noreferrer"}},[e._v("React 19 公测版官宣:新功能和新范式"),t("OutboundLink")],1),e._v(": 在这篇 React 官方博客中,我们会科普 React 19 中的 Action 和新型 hook 等新功能,以及万众期待的 RSC(服务器组件)新范式。----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361204571828731956",target:"_blank",rel:"noopener noreferrer"}},[e._v("使用 Next.js App Router 常犯的 10 个错误"),t("OutboundLink")],1),e._v(": 我觉得非常有意义,所以记录下了这 10 个常犯错误的内容,从我自己的角度为大家介绍下这 10 个错误。现在就让我们开始吧!顺便看看你有没有中招。----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360928627632357402",target:"_blank",rel:"noopener noreferrer"}},[e._v("10分钟掌握 react 中的 hooks"),t("OutboundLink")],1),e._v(": 接上文:20分钟带你vue转react 本系列的文章适合 vue 转 react 的同志,建议接上文来看,目前反馈均不错 react 函数组件写法才是官方推荐的,官方推荐我们使用函数组件就是因为----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360737180392996899",target:"_blank",rel:"noopener noreferrer"}},[e._v("Next.js v14 的 cookies()、header() 函数实现原理 —— AsyncLocalStorage"),t("OutboundLink")],1),e._v(": 如果说,有一个 Node.js API 是 Next.js 路由和我们日常开发用到的多个 API 的核心,你猜是哪个 API? 答案是 AsyncLocalStorage。这可不是一个新 API,早----👍🏻点赞量:23")])]),e._v(" "),t("h3",{attrs:{id:"前端-面试"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-面试"}},[e._v("#")]),e._v(" 前端-面试")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360528073631318027",target:"_blank",rel:"noopener noreferrer"}},[e._v("只写后台管理的前端要怎么提升自己"),t("OutboundLink")],1),e._v(": 本人写了五年的后台管理。每次面试前就会头疼,因为写的页面除了表单就是表格。抱怨过苦恼过也后悔过,但是站在现在的时间点回想以前,发现有很多事情可以做的更好,于是有了这篇文----👍🏻点赞量:530")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7346512120639340607",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试题:如何让 var [a, b] = {a: 1, b: 2} 解构赋值成功?"),t("OutboundLink")],1),e._v(": 这是一道字节面试题,大家第一眼看到这个面试题的时候,是不是脑瓜子嗡嗡的?有一种熟悉又陌生的感觉?我当时也一样的😭😭😭,接下来,让我们看看思路吧。----👍🏻点赞量:241")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7331135154209308687",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官问我 react scheduler 调度机制原理? 我却支支吾吾答不上来...😭😭"),t("OutboundLink")],1),e._v(": 在一次面试时,面试官问我 react scheduler 调度机制原理是什么?我却支支吾吾想了半天没答上来,看着面试官轻蔑的表情,我在心里默默的下定决心:三十年河东三十年河西,莫欺少年穷...... ----👍🏻点赞量:67")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7341669201009655845",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文盘点Typescript中23个内置类型工具! (建议收藏)"),t("OutboundLink")],1),e._v(": 一文盘点Typescript中23个内置类型工具! 引言     TypeScript 是一种基于 JavaScript 的类型编程语言, 提供了严格的类型检查机制和类型推导能力,类型是Typescr----👍🏻点赞量:81")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7341408996597448723",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试:性能优化表格和业务场景优化,你了解吗?"),t("OutboundLink")],1),e._v(": 3月的第一个开头,失业已久的我参加了一次线下面试,很有意思的是,这一次面试直接是开发+项目经理+HR,一轮到底。 总而言之,言而总之,面试复盘还是不能少。----👍🏻点赞量:26")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360894458671513651",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:相比于 class 类组件,hooks 到底解决了什么问题?"),t("OutboundLink")],1),e._v(": 相信使用 react 的小伙伴,都使用过 class 组件和函数式组件。 目前来说,函数式组件比较流行,基本上新开发的项目都是以函数式组件为主。 那相比于这两种方式,最直观的就是函数式组件引----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362080157237116978",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:聊一聊前端性能优化"),t("OutboundLink")],1),e._v(": 性能优化总是被面试官问,每次都只能答出那么几个,其实大家都清楚性能优化手段非常多,只要是能让用户体验更好的手段都可以称之为性能优化,本期我就总结下我所知道的性能优化手段,欢迎各位补充~ 一、减少----👍🏻点赞量:21")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359900973990969381",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:有哪五种定位"),t("OutboundLink")],1),e._v(": 1. CSS的position属性值: static:默认值,元素在正常的文档流中,不会被特别定位。 relative:相对于元素在文档流中的初始位置进行定位的。 absolute:相对于最近的已定位----👍🏻点赞量:12")])]),e._v(" "),t("h3",{attrs:{id:"前端-node-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-node-js"}},[e._v("#")]),e._v(" 前端-Node.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7343138637971734569",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!"),t("OutboundLink")],1),e._v(": node.js的优缺点和应用场景 Express框架:实践与技术探索 Express是一个轻量级且灵活的Node.js Web应用程序框架,它提供了一组简洁而强大的工具,帮助开发者快速构建Web应用。----👍🏻点赞量:72")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361620320363855926",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个简洁、干净的中后台管理模板"),t("OutboundLink")],1),e._v(": nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。----👍🏻点赞量:42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361629576415838249",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js 22 发布,原生支持 WebSocket 客户端"),t("OutboundLink")],1),e._v(": 昨日,Node.js 官方博客正式宣布 Node.js 22 的发布!新版本亮点包括 require() ES 模块、WebSocket 客户端、V8 JavaScript 引擎的更新等!----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361305594777894975",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024 年 Node 最新版本升级:Node 22 正式发布!"),t("OutboundLink")],1),e._v(": Node 核心团队 Node 22 正式发布!Node 22 会在今年 10 月份进入 LTS 长期支持,但在此之前,该版本是未来半年里的“当前”版本。----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7306018966920658978",target:"_blank",rel:"noopener noreferrer"}},[e._v("控制台的进度条是如何实现的"),t("OutboundLink")],1),e._v(": 我们在使用npm-check-updates,或者pkg-fetch的时候,会发现在loading的状态下控制台会出现一个进度条。 这个是通过progress这个npm包来实现的,虽然它上次更新是20----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360586351815196709",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第六十七章(OpenAI)"),t("OutboundLink")],1),e._v(": OpenAI OpenAI是一个人工智能研究实验室和技术公司,致力于推动人工智能的发展和应用 OpenAI最著名的项目之一是GPT(Generative Pre-trained Transformer----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361253974052503561",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第六十八章(远程桌面)"),t("OutboundLink")],1),e._v(": 远程桌面 远程桌面(Remote Desktop)是一种技术,允许用户通过网络远程连接到另一台计算机,并在本地计算机上控制远程计算机的操作。通过远程桌面,用户可以在不同地点的计算机之间共享屏幕、键盘和----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361261846089564210",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第二十六章 反向代理"),t("OutboundLink")],1),e._v(": Nodejs 第二十六章 反向代理 什么是反向代理? 反向代理(Reverse Proxy)是一种服务器,它位于客户端和服务器之间,对外表现为服务器,接受客户端的请求,并将这些请求转发到内部的服务器上----👍🏻点赞量:3")])]),e._v(" "),t("h3",{attrs:{id:"前端-css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-css"}},[e._v("#")]),e._v(" 前端-CSS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7266745788536356879",target:"_blank",rel:"noopener noreferrer"}},[e._v("22个实用的CSS技巧,让你的网站脱颖而出"),t("OutboundLink")],1),e._v(": 想要让你的网站在激烈的竞争中脱颖而出吗?使用CSS的强大功能可以帮助你实现这一目标。本文将分享22个实用的CSS技巧,帮助你提升网站的外观和用户体验----👍🏻点赞量:54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7349360925185802251",target:"_blank",rel:"noopener noreferrer"}},[e._v("15 分钟带你感受 CSS :has() 选择器的强大"),t("OutboundLink")],1),e._v(": 最近看到了许多关于 :has() 选择器的知识点,在此总结下来。 MDN 对 :has() 选择器 的解释是这样的: 下面一起来感受下 :has() 选择器的强大之处吧。 :has() 选择器选择父元----👍🏻点赞量:70")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340836136208859174",target:"_blank",rel:"noopener noreferrer"}},[e._v("H5 下拉刷新如何实现"),t("OutboundLink")],1),e._v(": 最近我需要做一个下拉刷新的功能,实现功能后我发现,它需要处理的情况还蛮多,于是我整理了这篇文章。首先我会讲解下拉的原理、根据原理写出初始代码;然后我会一边介绍代码存在的缺陷、一边解决缺陷并做些许优化。----👍🏻点赞量:83")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361323113156542490",target:"_blank",rel:"noopener noreferrer"}},[e._v("仿拼多多现金大转盘,H5 抽奖转盘如何实现?"),t("OutboundLink")],1),e._v(": 电商应用中我们常常看到抽奖转盘活动,比如拼多多的「抽奖大转盘」:点击中央的抽奖按钮,转盘开始旋转,一段时间后指针停止在奖品上。 这个效果如果用 H5 应该怎么实现呢?----👍🏻点赞量:38")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360216766373117989",target:"_blank",rel:"noopener noreferrer"}},[e._v("手把手教你写一个 headless 无头组件的单元测试、集成测试、E2E 测试"),t("OutboundLink")],1),e._v(": 我们都知道要想让自己的 headless ui 组件经受得起千锤百炼,那么一个合格的组件测试那是必不可少的; 如果你想对组件测试了解的更深,我相信这篇文章会给你带来不一样的惊喜。----👍🏻点赞量:21")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359900973990969381",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:有哪五种定位"),t("OutboundLink")],1),e._v(": 1. CSS的position属性值: static:默认值,元素在正常的文档流中,不会被特别定位。 relative:相对于元素在文档流中的初始位置进行定位的。 absolute:相对于最近的已定位----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360497239872192552",target:"_blank",rel:"noopener noreferrer"}},[e._v("你可以用伪元素做的有趣事情"),t("OutboundLink")],1),e._v(": 今天这篇文章同样是围绕着CSS的伪元素,主要介绍几个大家平时不怎么用,但又非常有趣的事情,比如卡片蒙层、渐变边框、渐变阴影、伪逗号等。希望这几个小技巧能帮助大家解决平时工作中的需求。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359567256584552482",target:"_blank",rel:"noopener noreferrer"}},[e._v("CSS Tips:跑马灯效果"),t("OutboundLink")],1),e._v(": 在 Web 上,存在着众多借鉴跑马灯理念的无限滚动展示方案,它们能在屏幕或是限定区域内循环往复地呈现信息内容。今天我将分享多种不同的纯 CSS 技术方案实现跑马灯的动画效果!----👍🏻点赞量:15")])]),e._v(" "),t("h3",{attrs:{id:"前端-后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-后端"}},[e._v("#")]),e._v(" 前端-后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360583337511550986",target:"_blank",rel:"noopener noreferrer"}},[e._v("作者把他写了3年的软件,给开源了!"),t("OutboundLink")],1),e._v(": 最近,GitHub上又一款热度很高的开源项目冲进了开发者们的视野。 项目开源不到一个月,现如今就已经收获了15000+的Star标星。 这就是最近非常火热的“顶流” Web OS,名为Puter! 作----👍🏻点赞量:95")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361683213280313394",target:"_blank",rel:"noopener noreferrer"}},[e._v("32.6k star🔥原来国内的独立开发者都在做这些事情"),t("OutboundLink")],1),e._v(": 你是否每天都在重复做着 CRUD 的工作,你是否每天下班后就瘫在家里玩起游戏、 刷起视频,那你应该了解一下国内的独立开发者们都在做些什么。 有的人在做百词斩助手 有的人在做----👍🏻点赞量:122")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361274099107594303",target:"_blank",rel:"noopener noreferrer"}},[e._v("创作者训练营 · 助力创作成长,探索写作之旅!"),t("OutboundLink")],1),e._v(": 👏 2024年创作者训练营第二期全新启程,经过第一期的创作,相信很多新手作者都收获了很多心得,文章质量也大有进步,训练营第二期将继续助力掘友们创作成长,快来一起探索写作进阶之旅吧!----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359821247680675892",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:为什么选择学习 Nestjs,而不是 Express?🧐🧐🧐"),t("OutboundLink")],1),e._v(": NestJS 采用了 AOP 的概念,尤其是通过其提供的拦截器(Interceptors)、守卫(Guards)、管道(Pipes)和自定义装饰器来实现。这些功能在 NestJS 中用于处理各种横切 ----👍🏻点赞量:19")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362084722820382760",target:"_blank",rel:"noopener noreferrer"}},[e._v("1 小时速通 ,Node.js 入门要了解的知识点有哪些"),t("OutboundLink")],1),e._v(": 👈👈👈 欢迎点赞收藏关注哟 一. 前言 最近在研究新的东西,难免用到了一些前端的工具 ,所以这篇文章就产生了。 文章定位 : 这是一篇速通文 , 针对的是有其他程序领域的基础,但是没有接触或者接触得不----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360961068165775401",target:"_blank",rel:"noopener noreferrer"}},[e._v("写给前端的 Docker 入门教程"),t("OutboundLink")],1),e._v(": 在软件开发过程中,环境配置是一个至关重要的步骤,它不仅影响开发效率,也直接关联到软件的最终质量。正确的环境配置可以极大地减少开发中的潜在问题,提升软件发布的流畅度和稳定性。以下是几个关键方面,以及如何----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361409349733564457",target:"_blank",rel:"noopener noreferrer"}},[e._v("不用 git 也能把代码到 Github 仓库上?😱😱😱"),t("OutboundLink")],1),e._v(": 在我们的日常开发中,使用 git 是我们作为一个前后端开发者必备的工具了,无论你是将代码提交到 GayHub 上还是 gitlab 上。那么如果不使用你有没有办法将代码提交到 GayHub 仓库上呢?----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359240782564261927",target:"_blank",rel:"noopener noreferrer"}},[e._v("如何使用 Node.js 发送电子邮件全解和相关工具推荐"),t("OutboundLink")],1),e._v(": 你会在 npm 上找到大量与电子邮件相关的模块,其中最流行的是 NodeMailer,每周的下载量超过 300 万次。 要使用它,您需要一个可以发送电子邮件的 SMTP 服务器。您可以使用自己的电子邮----👍🏻点赞量:4")])]),e._v(" "),t("h3",{attrs:{id:"前端-typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-typescript"}},[e._v("#")]),e._v(" 前端-TypeScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7341669201009655845",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文盘点Typescript中23个内置类型工具! (建议收藏)"),t("OutboundLink")],1),e._v(": 一文盘点Typescript中23个内置类型工具! 引言     TypeScript 是一种基于 JavaScript 的类型编程语言, 提供了严格的类型检查机制和类型推导能力,类型是Typescr----👍🏻点赞量:81")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360512664316526626",target:"_blank",rel:"noopener noreferrer"}},[e._v("JS 没有枚举,但 JS 可以创建枚举"),t("OutboundLink")],1),e._v(": 当我们将 TS 编译为 JS 之后,就会发现 TS 的枚举其实也是用原生 JS 来模拟的。本文共享的是,在 JS 中创建枚举的若干方案及其利弊。----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091175764002",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个typescript 5 + rollup 4 打包lib模板仓库实现"),t("OutboundLink")],1),e._v(": 前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollu----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361257579698618419",target:"_blank",rel:"noopener noreferrer"}},[e._v("「译」面向 JavaScript 开发人员的 TSConfig 简介"),t("OutboundLink")],1),e._v(": JavaScript 从最初作为一种简单的脚本语言开始不断发展,成为用于构建复杂应用程序的强大、现代的语言工具。为了管理更大、复杂的代码库,JavaScript 开发人员不断寻找方法改善他们的工作流程----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360206524843950119",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue-manage-system 版本更新,让开发更加简单"),t("OutboundLink")],1),e._v(": vue-manage-system 近期进行了一次版本升级,主要是支持了更多功能、升级依赖版本和优化样式,并且上线了官方文档网站,大部分功能都有文档或者使用示例,更加适合新手上手开发,只需要根据实际业----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362119848660680767",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端实现千位分隔符并保留指定小数位"),t("OutboundLink")],1),e._v(": 前言 最近写需求遇到了一个金额的显示需求,要求使用千位分隔符并保留两位小数。这个需求并不是太难,下面写下我的思路。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360528073630449675",target:"_blank",rel:"noopener noreferrer"}},[e._v("72小时带你光速入门TypeScript - 环境搭建02"),t("OutboundLink")],1),e._v(": 上篇文章里,我们初接触了TypeScript。本篇文章,小编将会带着大家一起来搭建一下有关Ts的前后端开发环境----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362029084878848000",target:"_blank",rel:"noopener noreferrer"}},[e._v("使用 ArkUI 开发一个任务管理应用"),t("OutboundLink")],1),e._v(": 本文将介绍如何使用 ArkUI 来开发一个任务管理应用,包括 @Link、@Watch、@Provide、@Consume 等装饰器的使用,实现对页面数据的 CRUD 操作。----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-github"}},[e._v("#")]),e._v(" 前端-GitHub")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360583337511550986",target:"_blank",rel:"noopener noreferrer"}},[e._v("作者把他写了3年的软件,给开源了!"),t("OutboundLink")],1),e._v(": 最近,GitHub上又一款热度很高的开源项目冲进了开发者们的视野。 项目开源不到一个月,现如今就已经收获了15000+的Star标星。 这就是最近非常火热的“顶流” Web OS,名为Puter! 作----👍🏻点赞量:95")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361683213280313394",target:"_blank",rel:"noopener noreferrer"}},[e._v("32.6k star🔥原来国内的独立开发者都在做这些事情"),t("OutboundLink")],1),e._v(": 你是否每天都在重复做着 CRUD 的工作,你是否每天下班后就瘫在家里玩起游戏、 刷起视频,那你应该了解一下国内的独立开发者们都在做些什么。 有的人在做百词斩助手 有的人在做----👍🏻点赞量:122")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360493040135651366",target:"_blank",rel:"noopener noreferrer"}},[e._v("独立开发(裸辞)100天,我的阶段性复盘"),t("OutboundLink")],1),e._v(": 嗨,大家好,我是徐小夕。从裸辞到现在已经快100天了,今天做一个系统性的复盘,聊聊这100天,我都做了些什么。 从零代码和可视化说起 4年前一个夜高风黑的夜晚,我决定做一款前端效率工具,通过拖拽式来帮----👍🏻点赞量:61")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7326738921471016969",target:"_blank",rel:"noopener noreferrer"}},[e._v("打造完美桌面应用体验:Tauri自动升级技术揭秘"),t("OutboundLink")],1),e._v(": 探索如何通过Tauri框架实现桌面应用的自动更新提示。本文详细介绍了私钥生成、Tauri的Updater配置和GitHub环境变量设置等关键步骤。通过作者的实际经验,读者将了解到成功实现自动更新的技术----👍🏻点赞量:27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359900973990920229",target:"_blank",rel:"noopener noreferrer"}},[e._v("git必看技巧:一行代码恢复被同事误删(覆盖)的代码"),t("OutboundLink")],1),e._v(": 代码提交常遇到的问题 在企业项目开发中,git是我们每个程序员提交代码必用的工具。在多人开发同一个项目中的时候,总会出现很多代码提交问题,一个常见的问题就是:我刚提交了代码,结果另一个(混蛋)同事不小----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361253974052290569",target:"_blank",rel:"noopener noreferrer"}},[e._v("轻松实现协同编辑能力?+请给你的编辑器安排上!"),t("OutboundLink")],1),e._v(": 前言 hi,大家好,我是徐小夕,之前和大家分享了很多可视化低代码的技术实践,最近也做了一款非常有意思的文档搭建引擎——Nocode/Doc: 也做了一些分享: 文档引擎+AI可视化打造下一代文档编辑器----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360947498943528987",target:"_blank",rel:"noopener noreferrer"}},[e._v("有关vscode的一些命令行小技巧"),t("OutboundLink")],1),e._v(": 有过好几次当我在用命令行操作git的时候,同事会过来问我不是有工具吗,干啥还要那么累噼里啪啦的敲命令行呢,我只能说那么多年了习惯了,同事只能呵呵一声表示不理解,我也回一声呵呵表示有代沟,而最近我忽然发----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362046189011812367",target:"_blank",rel:"noopener noreferrer"}},[e._v("在 GitHub 中掌握键盘快捷键的简短指南"),t("OutboundLink")],1),e._v(": 你是否知道 GitHub 几乎每页都有键盘快捷键?这篇文章将带你探索 GitHub 的键盘快捷键世界,以及它们如何帮助你快速导航和执行操作。 读完这篇,你将能够: 掌握快捷键:想知道如何访问这些快捷键----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-webpack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-webpack"}},[e._v("#")]),e._v(" 前端-Webpack")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360879591236124706",target:"_blank",rel:"noopener noreferrer"}},[e._v("【菜狗学前端】超超超详尽Webpack实践笔记"),t("OutboundLink")],1),e._v(": 超超超详尽的webpack使用,实践笔记!!!知原因晓使用,一撸到底!各种使用插件、配置,一应俱全,希望可以喜欢----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362309246556651559",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节 Web Infra 团队和 Module Federation 作者联手,正式推出 Module Federation 2.0!"),t("OutboundLink")],1),e._v(": 字节 Web Infra 团队和 Module Federation 作者联手,正式推出 Module Federation 2.0!----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360700937965174838",target:"_blank",rel:"noopener noreferrer"}},[e._v("深入理解 Webpack Chunk Graph 策略"),t("OutboundLink")],1),e._v(": 通过这篇文章,你可以完全理解前端代码经过打包工具后,到底怎样会产生 chunk,怎样减少 chunk 体积等。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361650229739241491",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文搞懂 Webpack 和 Vite"),t("OutboundLink")],1),e._v(": Webpack 和 Vite 都是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟。随着Vite 的出现,Webpack 的缺陷就慢慢暴露,Vite 逐渐开始替代 Webpack。----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362084371057082368",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack 整个原理过程 "),t("OutboundLink")],1),e._v(": 什么是webpack 简单来说,webpack是一个简单的打包工具。可以将互相依赖的html,css,js,以及图片文字字体文件等资源文件,经过处理打包一个可执行的项目文件 开始第一步 我们开始第一步----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360312278920986664",target:"_blank",rel:"noopener noreferrer"}},[e._v("一篇文章,webpack深入浅出,原因、基础配置、常见配置..."),t("OutboundLink")],1),e._v(": 原先笔者也一直没有真正去了解过webpack,觉得会敲项目就好了,只知道它是打包工具,但为什么?有什么好处?基层工事决定上层建筑。要深入了解它的原理不容易,所以今天决定开始深入学一下webpack----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360320083221381157",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter web 打包部署到 uniCloud 免费的前端网页托管平台"),t("OutboundLink")],1),e._v(": Flutter web 打包部署到 uniCloud 免费的前端网页托管平台,可以是用 uniCloud 中免费阿里云服务器。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361684907809701898",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tapable的神秘之处-源码解析(1)"),t("OutboundLink")],1),e._v(": Tapable的神秘之处-源码解析系列 通过使用Tapable,我们可以轻松地实现各种功能,从简单的插件拓展到复杂的编译过程优化。在这篇文章中,我们将深入探索Tapable的神秘之处,了解它的底层实现----👍🏻点赞量:2")])]),e._v(" "),t("h3",{attrs:{id:"前端-前端框架"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-前端框架"}},[e._v("#")]),e._v(" 前端-前端框架")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360216766373117989",target:"_blank",rel:"noopener noreferrer"}},[e._v("手把手教你写一个 headless 无头组件的单元测试、集成测试、E2E 测试"),t("OutboundLink")],1),e._v(": 我们都知道要想让自己的 headless ui 组件经受得起千锤百炼,那么一个合格的组件测试那是必不可少的; 如果你想对组件测试了解的更深,我相信这篇文章会给你带来不一样的惊喜。----👍🏻点赞量:21")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361631167064457216",target:"_blank",rel:"noopener noreferrer"}},[e._v("Next.js动态路由、动态渲染傻傻分不清"),t("OutboundLink")],1),e._v(": 最近,有位群友说「动态路由就是动态渲染」。这是很符合直觉的判断,但真理往往是反直觉的,动态路由不一定是动态渲染的。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7348275757800521743",target:"_blank",rel:"noopener noreferrer"}},[e._v("什么是虚拟DOM-【图解】"),t("OutboundLink")],1),e._v(": What 什么是虚拟DOM 原理 使用状态生成虚拟节点,然后使用虚拟节点来渲染视图 例如:DOM中字体颜色发生改变时,就会产生一个状态,并生成了对应的虚拟Dom,虚拟DOM再进一步处理,渲染出了变化后----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359919545274826793",target:"_blank",rel:"noopener noreferrer"}},[e._v("加速前端开发:用MFSU瞬间解决本地热更新慢的烦恼!"),t("OutboundLink")],1),e._v(": 本文介绍了如何通过用MFSU瞬间解决本地热更新慢的烦恼!将本地构建时间从5分钟缩短至1分钟左右,热更新时间从几十秒降至十几秒。----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362023585517436968",target:"_blank",rel:"noopener noreferrer"}},[e._v("Stencil 搭建 Web Component 组件库项目(工作原理解析)"),t("OutboundLink")],1),e._v(": Stencil 搭建扩展性和兼容性好的 Web Component 组件库,支持按需引入,懒加载;介绍 Stencil 框架工作原理----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360947498943528987",target:"_blank",rel:"noopener noreferrer"}},[e._v("有关vscode的一些命令行小技巧"),t("OutboundLink")],1),e._v(": 有过好几次当我在用命令行操作git的时候,同事会过来问我不是有工具吗,干啥还要那么累噼里啪啦的敲命令行呢,我只能说那么多年了习惯了,同事只能呵呵一声表示不理解,我也回一声呵呵表示有代沟,而最近我忽然发----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362140838972882953",target:"_blank",rel:"noopener noreferrer"}},[e._v("用更合适的文档库!打造专属品质,尽显码农风采!"),t("OutboundLink")],1),e._v(": 一个合格的组件工具等库,我们不仅要会知其然,更要知其所以然; 同时我们也要达到让别人开箱即用,尽量降低使用成本,从而提升大家的研发使用效率; 那么一个文档就必不可少了,而且还要一看就秒懂。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359876671137022004",target:"_blank",rel:"noopener noreferrer"}},[e._v("不止响应式:Vue3探秘系列— 虚拟vnode的页面挂载之旅(一)"),t("OutboundLink")],1),e._v(": 前言 在浩如烟海的网络世界中,关于Vue3源码的文章比星星还多,但让人哭笑不得的是,大部分文章都在讲数据响应式。这种情况让人误以为,Vue3的全部秘密就藏在响应式里面,仿佛一旦你掌握了这门黑魔法,就可----👍🏻点赞量:3")])]),e._v(" "),t("h3",{attrs:{id:"前端-架构"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-架构"}},[e._v("#")]),e._v(" 前端-架构")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7350226744051925042",target:"_blank",rel:"noopener noreferrer"}},[e._v("Token无感知刷新,让流畅成为常态"),t("OutboundLink")],1),e._v(": Token无感知刷新,让流畅成为常态 Token无感知刷新是现代Web应用中提升用户身份验证体验的关键技术。在多用户的互联网服务中,保障安全的同时提供无缝体验至关重要。用户期望在使用应用程序时能顺畅进----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359821944148361256",target:"_blank",rel:"noopener noreferrer"}},[e._v("领导:写个请求库,要支持中断请求、缓存请求(幂等)、重试请求、脚手架生成代码模板..."),t("OutboundLink")],1),e._v(": 现况 前端的请求库,大家基本都用的是 Axios 而他是基于 XHR 封装的,目前 XHR 已经停更了 相较于 fetch,缺失了一些功能 如: 可读流 中断请求 自定义referrer 由于 fet----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361737504512114715",target:"_blank",rel:"noopener noreferrer"}},[e._v("也许是最全面的前端同步持久化管理方案了:awesome-storage-manage"),t("OutboundLink")],1),e._v(": awesome-storage-manage:前端存储管理方案 一、项目当前痛点 1. 存/取storage方法各式各样 有直接调用原生setItem/getItem的 也有自己封装了一套方法的 还有----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361361507311534106",target:"_blank",rel:"noopener noreferrer"}},[e._v("HarmonyOS基本UI封装——Cell单元格组件封装与使用(三)"),t("OutboundLink")],1),e._v(": 前言 BasicLibrary是一个基于API 11封装的基本库 未来的计划是将其打造成一个通用的UI组件+基本工具组件,目前正在完善UI组件,大家如果组件有什么需求,可以尽管提哦 BasicLibr----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360856203838783539",target:"_blank",rel:"noopener noreferrer"}},[e._v("HarmonyOS基本UI封装——标题栏组件NavBar封装与使用(二)"),t("OutboundLink")],1),e._v(": 前言 BasicLibrary是一个基于API 11封装的基本库 未来的计划是将其打造成一个通用的UI组件+基本工具组件,目前正在完善UI组件,大家如果组件有什么需求,可以尽管提哦 BasicLibr----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361323894450946086",target:"_blank",rel:"noopener noreferrer"}},[e._v("新手也能学会的甘特图制作教程"),t("OutboundLink")],1),e._v(": 甘特图是什么? 甘特图(Gantt Chart)是一种以图表形式直观展示项目计划的工具,由20世纪初的管理学家亨利·甘特(Henry Gantt)发明并命名。它具有以下几个主要特点: 水平时间轴 甘特----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361752279726407680",target:"_blank",rel:"noopener noreferrer"}},[e._v("搭建通用工具打包框架"),t("OutboundLink")],1),e._v(": 使用 rollup 开发自己通用工具打包框架。同时通过 pnpm+Monorepo 进行统一仓库管理。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361611938474213426",target:"_blank",rel:"noopener noreferrer"}},[e._v("全面解析:使用TypeScript和Rollup构建JavaScript库的生命周期及实践"),t("OutboundLink")],1),e._v(": 详细介绍了如何从初始设定到发布,使用 TypeScript 和 Rollup 工具构建 JavaScript 库的各个步骤----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-npm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-npm"}},[e._v("#")]),e._v(" 前端-NPM")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361620320363855926",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个简洁、干净的中后台管理模板"),t("OutboundLink")],1),e._v(": nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。----👍🏻点赞量:42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360700937966600246",target:"_blank",rel:"noopener noreferrer"}},[e._v("【本地npm包调试】有了它,再也不用npm link了!"),t("OutboundLink")],1),e._v(": 问题:我们开发完一个npm包,有没有这样一种方式,既不用正式发包,又能像正式发包一样本地直接安装调试呢?----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361631167065178112",target:"_blank",rel:"noopener noreferrer"}},[e._v("消息推送到微信:给我的npm插件加上消息推送"),t("OutboundLink")],1),e._v(": 前言 之前我为了提高工作效率,实现了我的第一个npm包。 我的第一个npm包:plugin-zip-pack - 掘金 (juejin.cn) 用ts重构基于rollup的npm包踩坑记录 - 掘金 ----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361752279726899200",target:"_blank",rel:"noopener noreferrer"}},[e._v("做自己的npm包的过程记录"),t("OutboundLink")],1),e._v(": 感觉过程中把能踩的坑都踩了一遍。 我是一个菜狗,记录的也只是一个流水账,请各位大佬不要嘲笑我,谢谢O(∩_∩)O----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361458685484662835",target:"_blank",rel:"noopener noreferrer"}},[e._v("简单发布一个 ts 的 npm 包"),t("OutboundLink")],1),e._v(": 通过 TypeScript 编写一些通用的 JavaScript 工具函数,并能通过 NPM 发布、安装、更新等。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362046189012221967",target:"_blank",rel:"noopener noreferrer"}},[e._v("深入浅出Node.js中的AWS请求签名——aws4使用指南"),t("OutboundLink")],1),e._v(": AWS服务在安全性方面要求极高,所有通过API发起的请求都必须进行签名验证。今天我们就来探讨如何在Node.js中利用aws4库来进行签名,确保你的请求符合AWS的安全标准。 🛠️ 快速开始 首先,你----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359893210797015051",target:"_blank",rel:"noopener noreferrer"}},[e._v("rollup+ts开发npm包的知识点总结"),t("OutboundLink")],1),e._v(": 开始 使用 rollup + ts 开发插件时遇到的一些问题和知识点,谨以此篇记录自己的学习过程,方便日后复习,也希望能帮助到其他同学。 往期推荐: 解决ts+rollup打包报错以及警告 - 掘金 ----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361284455535738915",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js 中的 AWS 请求签名实操:aws-sign2 快速入门"),t("OutboundLink")],1),e._v(": AWS 云服务提供了众多的服务和 API,为了保证这些 API 的调用安全,AWS 实施了一套复杂的签名机制。本文将向您展示如何在 Node.js 项目中利用 aws-sign2 快速实现 AWS 请----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#后端"}},[e._v("#")]),e._v(" 后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7346959888008020002",target:"_blank",rel:"noopener noreferrer"}},[e._v("node_koa后端——初始化配置jwt和swagger的koa框架"),t("OutboundLink")],1),e._v(": 分享 node_koa后端——初始化配置jwt和swagger的koa框架。 面向对象:前端初学者、前端转后端的同学----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360486735798927396",target:"_blank",rel:"noopener noreferrer"}},[e._v("偷偷分享下我们公司的研发规范~"),t("OutboundLink")],1),e._v(": 前几天我分享了自己 创业一周年的复盘总结 ,其中提到了一点:随着团队的扩大,我们会更注重研发规范和技术沉淀,今天就给大家分享下团队的研发规范。----👍🏻点赞量:158")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359764922727333939",target:"_blank",rel:"noopener noreferrer"}},[e._v("接了个私活,分享下我是如何从 0 到 1 交付项目的"),t("OutboundLink")],1),e._v(": 🤣虽然我也不知道在哪能接到靠谱的私活,但你可以先收藏本文,万一之后来活了,还能翻出来看看是吧。。。----👍🏻点赞量:136")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7322733301668495375",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nacos 高级详解:提升你的开发和部署效率"),t("OutboundLink")],1),e._v(": Nacos 高级 前言 欢迎来到本篇文章,今天我们将探索 Nacos 高级版,这是一个旨在提升开发和部署效率的强大工具。作为 Nacos 的高级版本,它提供了更多功能和特性,帮助开发人员和运维团队更好----👍🏻点赞量:28")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360984753463803930",target:"_blank",rel:"noopener noreferrer"}},[e._v("MySQL千万级数据从190秒优化到1秒全过程"),t("OutboundLink")],1),e._v(": 千万级数据大概就是MySQL查询的天花板了。这里讨论的情况是在MySQL一张表的数据达到千万级别。表设计很烂,业务统计规则又不允许把sql拆成多个子查询。----👍🏻点赞量:64")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359821944147230760",target:"_blank",rel:"noopener noreferrer"}},[e._v("从零开始,探索一次使用 Go 打造通用连接池的经历"),t("OutboundLink")],1),e._v(": 这篇文章讲述了作者在业务开发中发现的各种连接池实现方式的问题,并描述了不同团队采用的多种技术方法。为解决这些问题,作者着手开发了一个通用的连接池模型,以提高代码的维护性和性能。----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356044171244159002",target:"_blank",rel:"noopener noreferrer"}},[e._v("Garnet,缓存的新选择!"),t("OutboundLink")],1),e._v(": Garnet是微软推出的一款远程缓存存储系统,旨在为开发者提供高性能、可靠性和可伸缩性的缓存解决方案。它采用了现代化的架构和技术,具有高度可定制性和灵活性,适用于各种规模和类型的应用场景。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352075703859150899",target:"_blank",rel:"noopener noreferrer"}},[e._v("分支管理:master,release,hotfix,sit,dev等等,听着都麻烦。"),t("OutboundLink")],1),e._v(": 从一开始的svn到后来接触到git,到目前已经和git打交道比较多了,突然觉得可以把项目中所用到一些分支的管理方式分享出来,希望帮助到大家。----👍🏻点赞量:11")])]),e._v(" "),t("h3",{attrs:{id:"android"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#android"}},[e._v("#")]),e._v(" Android")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7344571269555126335",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jetpack-ViewModel(面试深度起来)"),t("OutboundLink")],1),e._v(": 面试素质三联? ViewModel优点是啥? 答:保存数据 自动管理。 Fragment能拿Activity的ViewModel么? 答:能吧?。 = = ! ViewModel怎么管理的? 答:母鸡----👍🏻点赞量:36")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359743113198600202",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter大型项目架构:UI设计系统实现(一)"),t("OutboundLink")],1),e._v(": 作为前端开发,设计资源怎么去管理、设计系统如何去实现其实在日常开发中接触是最多的,每个开发者或者项目都有一套自己的管理方式或实现方式,今天来分享一下我在大型项目中是如何做设计和实现资源管理的。----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7353156196935434290",target:"_blank",rel:"noopener noreferrer"}},[e._v("在Jetpack Compose中管理网络请求竟然如此简单!"),t("OutboundLink")],1),e._v(": 写在前面 本文中提及的use开头的函数,都出自与我的 ComposeHooks 项目,它提供了一系列 React Hooks 风格的状态封装函数,可以帮你更好的使用 Compose,无需关系复杂的状态----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7347911786803789876",target:"_blank",rel:"noopener noreferrer"}},[e._v("全网首发:探秘Flutter UI测试-Golden Test"),t("OutboundLink")],1),e._v(": Golden Test 是一种通过比较图片来测试 UI 的技术。它首先创建一个标准图片,表示 UI 正确状态。然后,当开发者对 UI 进行修改时,Golden Test会自动捕获新的 UI状态,并与标----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360903734853730356",target:"_blank",rel:"noopener noreferrer"}},[e._v("完了,安卓项目代码被误删了......"),t("OutboundLink")],1),e._v(": 朋友开发完了一个公司的app,过了一段时间,在清理电脑空间的时候把该app的项目目录给删了,突然公司针对该app提出了新的需求,这不完了?----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359213228587122700",target:"_blank",rel:"noopener noreferrer"}},[e._v("你的Android“老”项目适配了吗?在Android14上还能安装吗?"),t("OutboundLink")],1),e._v(": 从 Android14开始,targetSdkVersion无法安装低于 23 的应用。要求应用程序满足这些最低目标 API 级别要求可以提高用户的安全性和隐私性。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360520652519047206",target:"_blank",rel:"noopener noreferrer"}},[e._v("flutter 集成高徳地图,获取定位以及展示地图高徳地图"),t("OutboundLink")],1),e._v(": flutter 集成高徳地图:获取项目证书文件、SHA1,高德地图官方 appkey 申请,使用高徳地图插件定位,展示高徳地图----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359893196439142436",target:"_blank",rel:"noopener noreferrer"}},[e._v("【车载Android】模拟Android系统的高负载环境"),t("OutboundLink")],1),e._v(": 在开发车载Android应用和系统时,我们总会面临着一些挑战,尤其是处理高负载应用。例如,当一款新车型发布后,用户可能会同时运行地图、智能驾驶和爱奇艺等资源密集型应用。----👍🏻点赞量:16")])]),e._v(" "),t("h3",{attrs:{id:"ios"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ios"}},[e._v("#")]),e._v(" IOS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359475637206040610",target:"_blank",rel:"noopener noreferrer"}},[e._v("从对微信支付SDK二次封装,到OC和swift混编调用总结"),t("OutboundLink")],1),e._v(": 从对微信支付SDK二次封装,到OC和swift混编调用总结。对微信支付的二次封装pod。使得接入微信支付,方便快捷,省事----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359229698604810280",target:"_blank",rel:"noopener noreferrer"}},[e._v("Option:定制化你的动画"),t("OutboundLink")],1),e._v(": 动画时长(Animation Duration) 动画时长是指动画播放的「秒」数。到目前为止,您看到的所有动画代码都使用了默认的动画时长(大概是 0.4 秒左右)。在本节中,我们将展示如何在动画中设置----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359577911991730211",target:"_blank",rel:"noopener noreferrer"}},[e._v("吃得饱系列-用 Rust 给 Flutter 反序列化减负"),t("OutboundLink")],1),e._v(": 通常 Flutter 项目涉及网络请求,就会用到 JSON 转对象,看网上的方案要么 Editor/IDE 工具生成,要么是用网页生成……总之就是要做一件很钢笔又重复的事,本着看闹热不嫌事大的心态,我----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359225201282613286",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftUI 支持即时模式绘制视图 - Canvas"),t("OutboundLink")],1),e._v(": 前言 在 SwiftUI 中,你可以使用 Shape 的 API 去绘制你所需要的 2D 图形。但最终,SwiftUI 框架会将你绘制的所有图形转换为 SwiftUI 视图并去渲染它们。这种方法有利有----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360879734690168886",target:"_blank",rel:"noopener noreferrer"}},[e._v("关于 iOS 18 目前知道的消息"),t("OutboundLink")],1),e._v(": 这里每天分享一个 iOS 的新知识,快来关注我吧 前言 前几天苹果公布了 WWDC 24 的最新消息,确定 6 月 10 号开始,今天来盘点一下目前已知的关于今年即将发布的 iOS 18 可能要发布的----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360243360059686950",target:"_blank",rel:"noopener noreferrer"}},[e._v("拿到一台新MAC,如何快速配置并运行Flutter项目"),t("OutboundLink")],1),e._v(": 最近我的电脑因为升级要求需要格式化,悲催,一切要重新开始,本文就记录了我的配置之路,可谓保姆级讲解记录,方便后面有需要回顾查看,如果你也有需要,不妨收藏看看是否用得上。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360595729486315554",target:"_blank",rel:"noopener noreferrer"}},[e._v("掌握 Swift 中的 reduce 操作符,使你的代码更高效"),t("OutboundLink")],1),e._v(": Swift 的 Sequence 类型有一个强大的操作符叫做 reduce,它允许你将序列的所有元素组合成一个单一的值。在处理来自 App Store Connect API 的响应时,我一直在反复使----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360951254605938697",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS UITextView 加载 HTML 时的问题与优化"),t("OutboundLink")],1),e._v(": 在 iOS 中如果想加载显示 HTML 文本,一般有以下的几种方案: 使用 WKWebView ,偏重、性能较差 将 HTML 字符串转换为 NSAttributedString 对象,使用 UITe----👍🏻点赞量:7")])]),e._v(" "),t("h2",{attrs:{id:"github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github"}},[e._v("#")]),e._v(" GitHub")]),e._v(" "),t("h3",{attrs:{id:"javascript-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-2"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/max32002/tixcraft_bot",target:"_blank",rel:"noopener noreferrer"}},[e._v("max32002/tixcraft_bot"),t("OutboundLink")],1),e._v(": MaxBot open source code bot----总⭐️2,152; 今日⭐️338")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/HeyPuter/puter",target:"_blank",rel:"noopener noreferrer"}},[e._v("HeyPuter/puter"),t("OutboundLink")],1),e._v(": 🌐 The Internet OS! Free, Open-Source, and Self-Hostable.----总⭐️16,209; 今日⭐️1,962")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bia-pain-bache/BPB-Worker-Panel",target:"_blank",rel:"noopener noreferrer"}},[e._v("bia-pain-bache/BPB-Worker-Panel"),t("OutboundLink")],1),e._v(": A GUI Panel providing Worker subscriptions and Fragment settings and configs, providing configs for cross-platform clients using (singbox-core and xray-core)----总⭐️646; 今日⭐️360")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/adrianhajdin/aora",target:"_blank",rel:"noopener noreferrer"}},[e._v("adrianhajdin/aora"),t("OutboundLink")],1),e._v(": Build your first mobile application----总⭐️310; 今日⭐️85")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/UseInterstellar/Interstellar",target:"_blank",rel:"noopener noreferrer"}},[e._v("UseInterstellar/Interstellar"),t("OutboundLink")],1),e._v(": One of the most popular modern web proxies with blazing fast speeds and a variety of games.----总⭐️671; 今日⭐️44")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Mintplex-Labs/anything-llm",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mintplex-Labs/anything-llm"),t("OutboundLink")],1),e._v(": The all-in-one Desktop & Docker AI application with full RAG and AI Agent capabilities.----总⭐️12,264; 今日⭐️612")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/vercel/next.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("vercel/next.js"),t("OutboundLink")],1),e._v(": The React Framework----总⭐️120,671; 今日⭐️306")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/louislam/uptime-kuma",target:"_blank",rel:"noopener noreferrer"}},[e._v("louislam/uptime-kuma"),t("OutboundLink")],1),e._v(": A fancy self-hosted monitoring tool----总⭐️49,569; 今日⭐️397")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/facebook/react",target:"_blank",rel:"noopener noreferrer"}},[e._v("facebook/react"),t("OutboundLink")],1),e._v(": The library for web and native user interfaces.----总⭐️221,923; 今日⭐️448")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/replicate/llama-chat",target:"_blank",rel:"noopener noreferrer"}},[e._v("replicate/llama-chat"),t("OutboundLink")],1),e._v(": A boilerplate for creating a Llama 3 chat app----总⭐️692; 今日⭐️63")])]),e._v(" "),t("h3",{attrs:{id:"vue"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue"}},[e._v("#")]),e._v(" vue")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/CorentinTh/it-tools",target:"_blank",rel:"noopener noreferrer"}},[e._v("CorentinTh/it-tools"),t("OutboundLink")],1),e._v(": Collection of handy online tools for developers, with great UX.----总⭐️11,218; 今日⭐️580")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/sugarforever/chat-ollama",target:"_blank",rel:"noopener noreferrer"}},[e._v("sugarforever/chat-ollama"),t("OutboundLink")],1),e._v(": ChatOllama is an open source chatbot based on LLMs. It supports a wide range of language models, and knowledge base management.----总⭐️1,742; 今日⭐️322")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Lissy93/dashy",target:"_blank",rel:"noopener noreferrer"}},[e._v("Lissy93/dashy"),t("OutboundLink")],1),e._v(": 🚀 A self-hostable personal dashboard built for you. Includes status-checking, widgets, themes, icon packs, a UI editor and tons more!----总⭐️15,390; 今日⭐️184")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/BewlyBewly/BewlyBewly",target:"_blank",rel:"noopener noreferrer"}},[e._v("BewlyBewly/BewlyBewly"),t("OutboundLink")],1),e._v(": Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. (English | 简体中文 | 正體中文 | 廣東話)----总⭐️2,759; 今日⭐️322")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/HelgeSverre/ollama-gui",target:"_blank",rel:"noopener noreferrer"}},[e._v("HelgeSverre/ollama-gui"),t("OutboundLink")],1),e._v(": A Web Interface for chatting with your local LLMs via the ollama API----总⭐️295; 今日⭐️15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/nuxt/ui",target:"_blank",rel:"noopener noreferrer"}},[e._v("nuxt/ui"),t("OutboundLink")],1),e._v(": A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.----总⭐️3,318; 今日⭐️48")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/youlaitech/vue3-element-admin",target:"_blank",rel:"noopener noreferrer"}},[e._v("youlaitech/vue3-element-admin"),t("OutboundLink")],1),e._v(": 🔥基于 vue3 + vite5 + typescript + element-plus 构建的后台管理前端模板(配套后端源码),vue-element-admin 的 vue3 版本。----总⭐️950; 今日⭐️19")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/kingwrcy/moments",target:"_blank",rel:"noopener noreferrer"}},[e._v("kingwrcy/moments"),t("OutboundLink")],1),e._v(": 极简朋友圈----总⭐️789; 今日⭐️393")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ExpTechTW/TREM-tauri",target:"_blank",rel:"noopener noreferrer"}},[e._v("ExpTechTW/TREM-tauri"),t("OutboundLink")],1),e._v(": Taiwan Real-time Earthquake Monitoring(臺灣即時地震監測)----总⭐️120; 今日⭐️48")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Zhouqluo/bilidown-web",target:"_blank",rel:"noopener noreferrer"}},[e._v("Zhouqluo/bilidown-web"),t("OutboundLink")],1),e._v(": 在线下载b站视频----总⭐️130; 今日⭐️60")])]),e._v(" "),t("h3",{attrs:{id:"typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[e._v("#")]),e._v(" typescript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/code100x/chess",target:"_blank",rel:"noopener noreferrer"}},[e._v("code100x/chess"),t("OutboundLink")],1),e._v(": A multiplayer chess platform----总⭐️1,469; 今日⭐️1,378")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/langgenius/dify",target:"_blank",rel:"noopener noreferrer"}},[e._v("langgenius/dify"),t("OutboundLink")],1),e._v(": Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.----总⭐️25,288; 今日⭐️2,566")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/mendableai/firecrawl",target:"_blank",rel:"noopener noreferrer"}},[e._v("mendableai/firecrawl"),t("OutboundLink")],1),e._v(": 🔥 Turn entire websites into LLM-ready markdown----总⭐️1,921; 今日⭐️869")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/PawanOsman/ChatGPT",target:"_blank",rel:"noopener noreferrer"}},[e._v("PawanOsman/ChatGPT"),t("OutboundLink")],1),e._v(": OpenAI API Free Reverse Proxy----总⭐️4,417; 今日⭐️762")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/continuedev/continue",target:"_blank",rel:"noopener noreferrer"}},[e._v("continuedev/continue"),t("OutboundLink")],1),e._v(": ⏩ Open-source VS Code and JetBrains extensions that enable you to easily create your own modular AI software development system----总⭐️10,985; 今日⭐️455")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/sadmann7/shadcn-table",target:"_blank",rel:"noopener noreferrer"}},[e._v("sadmann7/shadcn-table"),t("OutboundLink")],1),e._v(": A shadcn table component with server-side sorting, filtering, and pagination.----总⭐️1,628; 今日⭐️888")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/twentyhq/twenty",target:"_blank",rel:"noopener noreferrer"}},[e._v("twentyhq/twenty"),t("OutboundLink")],1),e._v(": Building a modern alternative to Salesforce, powered by the community.----总⭐️12,678; 今日⭐️3,371")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/immich-app/immich",target:"_blank",rel:"noopener noreferrer"}},[e._v("immich-app/immich"),t("OutboundLink")],1),e._v(": High performance self-hosted photo and video management solution.----总⭐️31,859; 今日⭐️1,557")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/quilljs/quill",target:"_blank",rel:"noopener noreferrer"}},[e._v("quilljs/quill"),t("OutboundLink")],1),e._v(": Quill is a modern WYSIWYG editor built for compatibility and extensibility.----总⭐️41,207; 今日⭐️810")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hydralauncher/hydra",target:"_blank",rel:"noopener noreferrer"}},[e._v("hydralauncher/hydra"),t("OutboundLink")],1),e._v(": Hydra is a game launcher with its own embedded bittorrent client and a self-managed repack scraper.----总⭐️647; 今日⭐️284")])]),e._v(" "),t("h3",{attrs:{id:"python-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python-2"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/meta-llama/llama3",target:"_blank",rel:"noopener noreferrer"}},[e._v("meta-llama/llama3"),t("OutboundLink")],1),e._v(": The official Meta Llama 3 GitHub site----总⭐️17,977; 今日⭐️11,700")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/unslothai/unsloth",target:"_blank",rel:"noopener noreferrer"}},[e._v("unslothai/unsloth"),t("OutboundLink")],1),e._v(": Finetune Llama 3, Mistral & Gemma LLMs 2-5x faster with 80% less memory----总⭐️7,653; 今日⭐️1,679")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hiyouga/LLaMA-Factory",target:"_blank",rel:"noopener noreferrer"}},[e._v("hiyouga/LLaMA-Factory"),t("OutboundLink")],1),e._v(": Unify Efficient Fine-Tuning of 100+ LLMs----总⭐️20,139; 今日⭐️3,232")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/myshell-ai/OpenVoice",target:"_blank",rel:"noopener noreferrer"}},[e._v("myshell-ai/OpenVoice"),t("OutboundLink")],1),e._v(": Instant voice cloning by MyShell.----总⭐️19,766; 今日⭐️1,690")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/meta-llama/codellama",target:"_blank",rel:"noopener noreferrer"}},[e._v("meta-llama/codellama"),t("OutboundLink")],1),e._v(": Inference code for CodeLlama models----总⭐️15,013; 今日⭐️565")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/meta-llama/PurpleLlama",target:"_blank",rel:"noopener noreferrer"}},[e._v("meta-llama/PurpleLlama"),t("OutboundLink")],1),e._v(": Set of tools to assess and improve LLM security.----总⭐️1,865; 今日⭐️1,010")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/TencentARC/InstantMesh",target:"_blank",rel:"noopener noreferrer"}},[e._v("TencentARC/InstantMesh"),t("OutboundLink")],1),e._v(": InstantMesh: Efficient 3D Mesh Generation from a Single Image with Sparse-view Large Reconstruction Models----总⭐️1,541; 今日⭐️456")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Doriandarko/maestro",target:"_blank",rel:"noopener noreferrer"}},[e._v("Doriandarko/maestro"),t("OutboundLink")],1),e._v(": A framework for Claude Opus to intelligently orchestrate subagents.----总⭐️1,090; 今日⭐️315")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/pytorch/torchtune",target:"_blank",rel:"noopener noreferrer"}},[e._v("pytorch/torchtune"),t("OutboundLink")],1),e._v(": A Native-PyTorch Library for LLM Fine-tuning----总⭐️2,799; 今日⭐️720")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/MaxKB",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/MaxKB"),t("OutboundLink")],1),e._v(": 💬 基于 LLM 大语言模型的知识库问答系统。开箱即用,支持快速嵌入到第三方业务系统,1Panel 官方出品。----总⭐️3,966; 今日⭐️929")])]),e._v(" "),t("h3",{attrs:{id:"go"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#go"}},[e._v("#")]),e._v(" go")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/ollama/ollama",target:"_blank",rel:"noopener noreferrer"}},[e._v("ollama/ollama"),t("OutboundLink")],1),e._v(": Get up and running with Llama 3, Mistral, Gemma, and other large language models.----总⭐️61,361; 今日⭐️4,377")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/openbao/openbao",target:"_blank",rel:"noopener noreferrer"}},[e._v("openbao/openbao"),t("OutboundLink")],1),e._v(": OpenBao exists to provide a software solution to manage, store, and distribute sensitive data including secrets, certificates, and keys.----总⭐️2,109; 今日⭐️333")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/1Panel",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/1Panel"),t("OutboundLink")],1),e._v(": 🔥 🔥 🔥 现代化、开源的 Linux 服务器运维管理面板。----总⭐️18,180; 今日⭐️352")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/smartcontractkit/chainlink",target:"_blank",rel:"noopener noreferrer"}},[e._v("smartcontractkit/chainlink"),t("OutboundLink")],1),e._v(": node of the decentralized oracle network, bridging on and off-chain computation----总⭐️6,630; 今日⭐️56")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/opentofu/opentofu",target:"_blank",rel:"noopener noreferrer"}},[e._v("opentofu/opentofu"),t("OutboundLink")],1),e._v(": OpenTofu lets you declaratively manage your cloud infrastructure.----总⭐️20,253; 今日⭐️459")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/jeessy2/ddns-go",target:"_blank",rel:"noopener noreferrer"}},[e._v("jeessy2/ddns-go"),t("OutboundLink")],1),e._v(": Simple and easy to use DDNS. Support Aliyun, Tencent Cloud, Dnspod, Cloudflare, Callback, Huawei Cloud, Baidu Cloud, Porkbun, GoDaddy, Namecheap, NameSilo...----总⭐️9,526; 今日⭐️311")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/techschool/simplebank",target:"_blank",rel:"noopener noreferrer"}},[e._v("techschool/simplebank"),t("OutboundLink")],1),e._v(": Backend master class: build a simple bank service in Go----总⭐️3,970; 今日⭐️64")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/version-fox/vfox",target:"_blank",rel:"noopener noreferrer"}},[e._v("version-fox/vfox"),t("OutboundLink")],1),e._v(": A cross-platform and extendable version manager with support for Java, Node.js, Flutter, .Net & more----总⭐️2,089; 今日⭐️250")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/prometheus/prometheus",target:"_blank",rel:"noopener noreferrer"}},[e._v("prometheus/prometheus"),t("OutboundLink")],1),e._v(": The Prometheus monitoring system and time series database.----总⭐️52,783; 今日⭐️123")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/cosmos/cosmos-sdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("cosmos/cosmos-sdk"),t("OutboundLink")],1),e._v(": ⛓️ A Framework for Building High Value Public Blockchains ✨----总⭐️5,946; 今日⭐️30")])]),e._v(" "),t("h3",{attrs:{id:"rust"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust"}},[e._v("#")]),e._v(" rust")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/Whitecat18/Rust-for-Malware-Development",target:"_blank",rel:"noopener noreferrer"}},[e._v("Whitecat18/Rust-for-Malware-Development"),t("OutboundLink")],1),e._v(": This repository contains my complete resources and coding practices for malware development using Rust 🦀.----总⭐️577; 今日⭐️271")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/zellij-org/zellij",target:"_blank",rel:"noopener noreferrer"}},[e._v("zellij-org/zellij"),t("OutboundLink")],1),e._v(": A terminal workspace with batteries included----总⭐️17,664; 今日⭐️315")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/lapce/lapce",target:"_blank",rel:"noopener noreferrer"}},[e._v("lapce/lapce"),t("OutboundLink")],1),e._v(": Lightning-fast and Powerful Code Editor written in Rust----总⭐️32,353; 今日⭐️196")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/zed-industries/zed",target:"_blank",rel:"noopener noreferrer"}},[e._v("zed-industries/zed"),t("OutboundLink")],1),e._v(": Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.----总⭐️32,601; 今日⭐️637")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/pola-rs/polars",target:"_blank",rel:"noopener noreferrer"}},[e._v("pola-rs/polars"),t("OutboundLink")],1),e._v(": Dataframes powered by a multithreaded, vectorized query engine, written in Rust----总⭐️26,221; 今日⭐️190")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/apache/datafusion",target:"_blank",rel:"noopener noreferrer"}},[e._v("apache/datafusion"),t("OutboundLink")],1),e._v(": Apache DataFusion SQL Query Engine----总⭐️5,041; 今日⭐️100")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/rust-unofficial/awesome-rust",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-unofficial/awesome-rust"),t("OutboundLink")],1),e._v(": A curated list of Rust code and resources.----总⭐️42,944; 今日⭐️232")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ordinals/ord",target:"_blank",rel:"noopener noreferrer"}},[e._v("ordinals/ord"),t("OutboundLink")],1),e._v(": 👁‍🗨 Rare and exotic sats----总⭐️3,618; 今日⭐️124")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/YaLTeR/niri",target:"_blank",rel:"noopener noreferrer"}},[e._v("YaLTeR/niri"),t("OutboundLink")],1),e._v(": A scrollable-tiling Wayland compositor.----总⭐️1,973; 今日⭐️252")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/astral-sh/ruff",target:"_blank",rel:"noopener noreferrer"}},[e._v("astral-sh/ruff"),t("OutboundLink")],1),e._v(": An extremely fast Python linter and code formatter, written in Rust.----总⭐️26,623; 今日⭐️286")])]),e._v(" "),t("h3",{attrs:{id:"object-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#object-c"}},[e._v("#")]),e._v(" object-c")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/amowu/arduimo",target:"_blank",rel:"noopener noreferrer"}},[e._v("amowu/arduimo"),t("OutboundLink")],1),e._v(": Amo + Arduino = Arduimo----总⭐️6; 今日⭐️0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/schacon/blink",target:"_blank",rel:"noopener noreferrer"}},[e._v("schacon/blink"),t("OutboundLink")],1),e._v(": Example file to blink the LED on an Arduino----总⭐️98; 今日⭐️0")])]),e._v(" "),t("h3",{attrs:{id:"css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css"}},[e._v("#")]),e._v(" css")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/Aikoyori/ProgrammingVTuberLogos",target:"_blank",rel:"noopener noreferrer"}},[e._v("Aikoyori/ProgrammingVTuberLogos"),t("OutboundLink")],1),e._v(": High-quality PNGs for logos I made for fun----总⭐️4,326; 今日⭐️3,127")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primeng",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primeng"),t("OutboundLink")],1),e._v(": The Most Complete Angular UI Component Library----总⭐️9,457; 今日⭐️39")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/chokcoco/iCSS",target:"_blank",rel:"noopener noreferrer"}},[e._v("chokcoco/iCSS"),t("OutboundLink")],1),e._v(": 不止于 CSS----总⭐️18,850; 今日⭐️106")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/cloudflare/cloudflare-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("cloudflare/cloudflare-docs"),t("OutboundLink")],1),e._v(": Cloudflare’s documentation----总⭐️2,578; 今日⭐️19")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primereact",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primereact"),t("OutboundLink")],1),e._v(": The Most Complete React UI Component Library----总⭐️5,771; 今日⭐️63")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/animate-css/animate.css",target:"_blank",rel:"noopener noreferrer"}},[e._v("animate-css/animate.css"),t("OutboundLink")],1),e._v(": 🍿 A cross-browser library of CSS animations. As easy to use as an easy thing.----总⭐️79,764; 今日⭐️54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primevue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primevue"),t("OutboundLink")],1),e._v(": Next Generation Vue UI Component Library----总⭐️7,678; 今日⭐️120")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/spicetify/spicetify-themes",target:"_blank",rel:"noopener noreferrer"}},[e._v("spicetify/spicetify-themes"),t("OutboundLink")],1),e._v(": A community-driven collection of themes for customizing Spotify through Spicetify -----总⭐️4,698; 今日⭐️42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/sakai-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/sakai-vue"),t("OutboundLink")],1),e._v(": ----总⭐️400; 今日⭐️13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/rafaelmardojai/firefox-gnome-theme",target:"_blank",rel:"noopener noreferrer"}},[e._v("rafaelmardojai/firefox-gnome-theme"),t("OutboundLink")],1),e._v(": A GNOME👣 theme for Firefox🔥----总⭐️3,201; 今日⭐️17")])])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{531:function(e,r,t){"use strict";t.r(r);var n=t(7),a=Object(n.a)({},(function(){var e=this,r=e.$createElement,t=e._self._c||r;return t("ContentSlotsDistributor",{attrs:{"slot-key":e.$parent.slotKey}},[t("p",[e._v("收集各大技术社区网站每周热文,"),t("a",{attrs:{href:"https://github.com/dravenww/blob",target:"_blank",rel:"noopener noreferrer"}},[e._v("个人技术博客"),t("OutboundLink")],1),e._v(" 在此")]),e._v(" "),t("p",[e._v("每周更新,展示当前周的数据,进行查看,欢迎"),t("a",{attrs:{href:"https://www.dravenwu.top",target:"_blank",rel:"noopener noreferrer"}},[e._v("关注公众号"),t("OutboundLink")],1),e._v(",点个star呀")]),e._v(" "),t("h2",{attrs:{id:"csdn"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#csdn"}},[e._v("#")]),e._v(" CSDN")]),e._v(" "),t("h3",{attrs:{id:"数据结构与算法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#数据结构与算法"}},[e._v("#")]),e._v(" 数据结构与算法")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/xcltapestry/article/details/138089325",target:"_blank",rel:"noopener noreferrer"}},[e._v("迭代加深算法(IDDFS)在电商商品推荐中的应用方案"),t("OutboundLink")],1),e._v(": 拙_言-迭代加深算法(IDDFS)在电商商品推荐中的应用方案----🔥 热度:15485")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_49945796/article/details/138091529",target:"_blank",rel:"noopener noreferrer"}},[e._v("3.机器学习_逻辑回归,SVM"),t("OutboundLink")],1),e._v(": weixin_49945796-3.机器学习_逻辑回归,SVM----🔥 热度:13826")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/cw19980223/article/details/136560469",target:"_blank",rel:"noopener noreferrer"}},[e._v("排序算法汇总"),t("OutboundLink")],1),e._v(": 不会写代码的码农啊-排序算法汇总----🔥 热度:11926")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_63287589/article/details/138124005",target:"_blank",rel:"noopener noreferrer"}},[e._v("机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病"),t("OutboundLink")],1),e._v(": 矩阵猫咪-机器学习:基于Sklearn、XGBoost框架,使用逻辑回归、支持向量机和XGBClassifier预测帕金森病----🔥 热度:11510")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_63068858/article/details/138173253",target:"_blank",rel:"noopener noreferrer"}},[e._v("各大排序算法总结,你值得一看"),t("OutboundLink")],1),e._v(": 取址执行-各大排序算法总结,你值得一看----🔥 热度:7222")])]),e._v(" "),t("h3",{attrs:{id:"javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_60189088/article/details/138160676",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue3中的reactive、readonly和shallowReactive"),t("OutboundLink")],1),e._v(": 猛扇赵四那半好嘴-vue3中的reactive、readonly和shallowReactive----🔥 热度:28083")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84437530/article/details/138241957",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端框架大比拼:2024年的Vue与React谁更胜一筹?_vue和react哪个厉害"),t("OutboundLink")],1),e._v(": 2401_84437530-前端框架大比拼:2024年的Vue与React谁更胜一筹?_vue和react哪个厉害----🔥 热度:26470")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Everglowwwwww/article/details/138219482",target:"_blank",rel:"noopener noreferrer"}},[e._v("【前端学习——React】React API"),t("OutboundLink")],1),e._v(": Everglowwwwww-【前端学习——React】React API----🔥 热度:21432")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_45356258/article/details/138215551",target:"_blank",rel:"noopener noreferrer"}},[e._v("本地json数据的增删改查#Vue3"),t("OutboundLink")],1),e._v(": Alexeigirl-本地json数据的增删改查#Vue3----🔥 热度:21239")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2302_76609856/article/details/138255654",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue3中的ref与reactive:构建响应式数据的双刃剑"),t("OutboundLink")],1),e._v(": 我是牢大(肘鸡王)-Vue3中的ref与reactive:构建响应式数据的双刃剑----🔥 热度:20904")])]),e._v(" "),t("h3",{attrs:{id:"java"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java"}},[e._v("#")]),e._v(" java")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_63947499/article/details/137752354",target:"_blank",rel:"noopener noreferrer"}},[e._v("【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解"),t("OutboundLink")],1),e._v(": 陈橘又青-【SSM进阶学习系列丨整合篇】Spring+SpringMVC+MyBatis 框架配置详解----🔥 热度:29962")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_51601665/article/details/138193995",target:"_blank",rel:"noopener noreferrer"}},[e._v("深度解析 Spring 源码:揭秘BeanFactory 之谜"),t("OutboundLink")],1),e._v(": 忆~遂愿-深度解析 Spring 源码:揭秘BeanFactory 之谜----🔥 热度:21318")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84103441/article/details/138261254",target:"_blank",rel:"noopener noreferrer"}},[e._v("15年大牛用140多个实战案例深入讲解Java微服务架构实战:SpringBoot +SpringCloud +Docker +RabbitMQ"),t("OutboundLink")],1),e._v(": 2401_84103441-15年大牛用140多个实战案例深入讲解Java微服务架构实战:SpringBoot +SpringCloud +Docker +RabbitMQ----🔥 热度:20195")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/QQ3166678367/article/details/138252284",target:"_blank",rel:"noopener noreferrer"}},[e._v("java基于springboot的邮箱邮件收发系统设计与实现"),t("OutboundLink")],1),e._v(": QQ3166678367-java基于springboot的邮箱邮件收发系统设计与实现----🔥 热度:19580")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/c18213590220/article/details/138114906",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Java系列】SpringCloudAlibaba 实现在不修改配置文件情况下适配不同环境部署"),t("OutboundLink")],1),e._v(": 后端小肥肠-【Java系列】SpringCloudAlibaba 实现在不修改配置文件情况下适配不同环境部署----🔥 热度:19499")])]),e._v(" "),t("h3",{attrs:{id:"php"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#php"}},[e._v("#")]),e._v(" php")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/jxjdhdnd/article/details/138213523",target:"_blank",rel:"noopener noreferrer"}},[e._v("华为ensp中链路聚合两种(lacp-static)模式配置方法"),t("OutboundLink")],1),e._v(": 神秘泣男子-华为ensp中链路聚合两种(lacp-static)模式配置方法----🔥 热度:22074")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_74888502/article/details/138222333",target:"_blank",rel:"noopener noreferrer"}},[e._v("Windows搭建php文件管理服务Tiny File Manager并发布至公网可访问"),t("OutboundLink")],1),e._v(": 学编程的小程-Windows搭建php文件管理服务Tiny File Manager并发布至公网可访问----🔥 热度:21326")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/aran2002/article/details/138232227",target:"_blank",rel:"noopener noreferrer"}},[e._v("linux系统-FTP服务配置"),t("OutboundLink")],1),e._v(": 早点睡吧zzz-linux系统-FTP服务配置----🔥 热度:9202")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_19448821/article/details/138194206",target:"_blank",rel:"noopener noreferrer"}},[e._v("PHP利用phpmailer实现邮件发送功能"),t("OutboundLink")],1),e._v(": 知码者-PHP利用phpmailer实现邮件发送功能----🔥 热度:8820")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/ip16yun/article/details/138182289",target:"_blank",rel:"noopener noreferrer"}},[e._v("图片大搜罗:PHP下载器带你畅游Twitter图像海洋"),t("OutboundLink")],1),e._v(": 亿牛云爬虫专家-图片大搜罗:PHP下载器带你畅游Twitter图像海洋----🔥 热度:8385")])]),e._v(" "),t("h3",{attrs:{id:"python"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/lida2003/article/details/138244483",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jammy@Jetson Orin - Tensorflow & Keras Get Started: 003 Implementing a CNN in TensorFlow & Keras"),t("OutboundLink")],1),e._v(": lida2003-Jammy@Jetson Orin - Tensorflow & Keras Get Started: 003 Implementing a CNN in TensorFlow & Keras----🔥 热度:28386")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/liyimindbq/article/details/138220648",target:"_blank",rel:"noopener noreferrer"}},[e._v("Python小游戏 贪吃蛇(完整版) Pygame sys time"),t("OutboundLink")],1),e._v(": 柒小李-Python小游戏 贪吃蛇(完整版) Pygame sys time----🔥 热度:23269")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/aronSandy/article/details/138197882",target:"_blank",rel:"noopener noreferrer"}},[e._v("Python机器学习库scikit-learn和TensorFlow如何选择?"),t("OutboundLink")],1),e._v(": 代码奇幻之旅-Python机器学习库scikit-learn和TensorFlow如何选择?----🔥 热度:23209")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_69240837/article/details/138197135",target:"_blank",rel:"noopener noreferrer"}},[e._v("利用机器学习进行图像分类:以TensorFlow和Keras为例"),t("OutboundLink")],1),e._v(": Just try it-利用机器学习进行图像分类:以TensorFlow和Keras为例----🔥 热度:23155")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2303_79419613/article/details/138209219",target:"_blank",rel:"noopener noreferrer"}},[e._v("Transforms在Pytorch中的使用(Pycharm)"),t("OutboundLink")],1),e._v(": 哆啦蒙圈-Transforms在Pytorch中的使用(Pycharm)----🔥 热度:22169")])]),e._v(" "),t("h3",{attrs:{id:"运维"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#运维"}},[e._v("#")]),e._v(" 运维")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_73951752/article/details/138232414",target:"_blank",rel:"noopener noreferrer"}},[e._v("【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析"),t("OutboundLink")],1),e._v(": 离芩-【linux高性能服务器编程】项目实战——仿QQ聊天程序源码剖析----🔥 热度:24752")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_74265792/article/details/138047341",target:"_blank",rel:"noopener noreferrer"}},[e._v("【Linux】详解信号产生的方式"),t("OutboundLink")],1),e._v(": 北飞的山羊-【Linux】详解信号产生的方式----🔥 热度:24249")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/WordPresPHP/article/details/138231183",target:"_blank",rel:"noopener noreferrer"}},[e._v("Alibaba Cloud Linux vs Debian服务器选择哪个系统好?"),t("OutboundLink")],1),e._v(": WordPresPHP-Alibaba Cloud Linux vs Debian服务器选择哪个系统好?----🔥 热度:23271")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/sushhsishdgsusk/article/details/138042893",target:"_blank",rel:"noopener noreferrer"}},[e._v("网络程序 -- TCP版服务器"),t("OutboundLink")],1),e._v(": 云烟梦柳-网络程序 -- TCP版服务器----🔥 热度:22463")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_41905051/article/details/138116801",target:"_blank",rel:"noopener noreferrer"}},[e._v("3节点ubuntu24.04服务器docker-compose方式部署高可用elk+kafka日志系统并接入nginx日志"),t("OutboundLink")],1),e._v(": 心软且酷丶-3节点ubuntu24.04服务器docker-compose方式部署高可用elk+kafka日志系统并接入nginx日志----🔥 热度:22042")])]),e._v(" "),t("h3",{attrs:{id:"移动开发"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#移动开发"}},[e._v("#")]),e._v(" 移动开发")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/u012881779/article/details/138250722",target:"_blank",rel:"noopener noreferrer"}},[e._v("[iOS]使用CocoaPods发布公开库"),t("OutboundLink")],1),e._v(": 风浅月明-[iOS]使用CocoaPods发布公开库----🔥 热度:21732")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/m0_61164038/article/details/138228763",target:"_blank",rel:"noopener noreferrer"}},[e._v("Unity和iOS 原生专题一 unity打包设置C#设置 Xcode添加OTHER_LDFLAGS和Info.plist设置"),t("OutboundLink")],1),e._v(": leluckys-Unity和iOS 原生专题一 unity打包设置C#设置 Xcode添加OTHER_LDFLAGS和Info.plist设置----🔥 热度:20562")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2401_84544780/article/details/138228100",target:"_blank",rel:"noopener noreferrer"}},[e._v("Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版"),t("OutboundLink")],1),e._v(": 2401_84544780-Android 低功耗蓝牙开发(扫描、连接、数据交互)Kotlin版----🔥 热度:20500")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/piggy514/article/details/138212805",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS XCode项目自动签名"),t("OutboundLink")],1),e._v(": piggy514-iOS XCode项目自动签名----🔥 热度:19818")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/2301_78601147/article/details/138213125",target:"_blank",rel:"noopener noreferrer"}},[e._v("基于微信小程序+SpringBoot+MySQL的中国各地美食推荐小程序(附论文)"),t("OutboundLink")],1),e._v(": code99Top-基于微信小程序+SpringBoot+MySQL的中国各地美食推荐小程序(附论文)----🔥 热度:19193")])]),e._v(" "),t("h3",{attrs:{id:"c-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#c-c"}},[e._v("#")]),e._v(" c/c++")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://blog.csdn.net/Bettysweetyaaa/article/details/138252036",target:"_blank",rel:"noopener noreferrer"}},[e._v("C++必修:类与对象(一)"),t("OutboundLink")],1),e._v(": Betty’s Sweet-C++必修:类与对象(一)----🔥 热度:30658")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_70261953/article/details/138229948",target:"_blank",rel:"noopener noreferrer"}},[e._v("【小梦C嘎嘎——启航篇】C++四大类型转换"),t("OutboundLink")],1),e._v(": 博客小梦-【小梦C嘎嘎——启航篇】C++四大类型转换----🔥 热度:19340")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/u011039332/article/details/130783452",target:"_blank",rel:"noopener noreferrer"}},[e._v("12 c++版本的坦克大战"),t("OutboundLink")],1),e._v(": 教练、我想打篮球-12 c++版本的坦克大战----🔥 热度:15321")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/qq_57761637/article/details/138174670",target:"_blank",rel:"noopener noreferrer"}},[e._v("【C++干货基地】深度理解C++中的高效内存管理方式 new & delete"),t("OutboundLink")],1),e._v(": 鸽芷咕-【C++干货基地】深度理解C++中的高效内存管理方式 new & delete----🔥 热度:12771")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://blog.csdn.net/weixin_43808717/article/details/138039837",target:"_blank",rel:"noopener noreferrer"}},[e._v("C++高级特性:C/C++内存结构模型(十一)"),t("OutboundLink")],1),e._v(": Splaying-C++高级特性:C/C++内存结构模型(十一)----🔥 热度:10549")])]),e._v(" "),t("h2",{attrs:{id:"掘金"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#掘金"}},[e._v("#")]),e._v(" 掘金")]),e._v(" "),t("h3",{attrs:{id:"前端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端"}},[e._v("#")]),e._v(" 前端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360528073631318027",target:"_blank",rel:"noopener noreferrer"}},[e._v("只写后台管理的前端要怎么提升自己"),t("OutboundLink")],1),e._v(": 本人写了五年的后台管理。每次面试前就会头疼,因为写的页面除了表单就是表格。抱怨过苦恼过也后悔过,但是站在现在的时间点回想以前,发现有很多事情可以做的更好,于是有了这篇文----👍🏻点赞量:530")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329967013923962895",target:"_blank",rel:"noopener noreferrer"}},[e._v("js如何实现当文本内容过长时,中间显示省略号...,两端正常展示"),t("OutboundLink")],1),e._v(": 前一阵做需求时,有个小功能实现起来废了点脑细胞,觉得可以记录一下。 产品的具体诉求是:用户点击按钮进入详情页面,详情页内的卡片标题内容过长时,标题的前后两端正常展示,中间用省略号...表示,并且鼠标悬----👍🏻点赞量:284")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7346512120639340607",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试题:如何让 var [a, b] = {a: 1, b: 2} 解构赋值成功?"),t("OutboundLink")],1),e._v(": 这是一道字节面试题,大家第一眼看到这个面试题的时候,是不是脑瓜子嗡嗡的?有一种熟悉又陌生的感觉?我当时也一样的😭😭😭,接下来,让我们看看思路吧。----👍🏻点赞量:241")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352090806453567500",target:"_blank",rel:"noopener noreferrer"}},[e._v("女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件"),t("OutboundLink")],1),e._v(": 前言 对于复杂的逻辑或者流程来说,画一画流程图可以帮助我们更好的捋清楚逻辑。平时我女朋友也偶尔会用 processon 来画一下流程图, processon 确实是一个很好的软件。 但是免费版只能创建----👍🏻点赞量:141")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360583337511550986",target:"_blank",rel:"noopener noreferrer"}},[e._v("作者把他写了3年的软件,给开源了!"),t("OutboundLink")],1),e._v(": 最近,GitHub上又一款热度很高的开源项目冲进了开发者们的视野。 项目开源不到一个月,现如今就已经收获了15000+的Star标星。 这就是最近非常火热的“顶流” Web OS,名为Puter! 作----👍🏻点赞量:95")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7343138637971734569",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!"),t("OutboundLink")],1),e._v(": node.js的优缺点和应用场景 Express框架:实践与技术探索 Express是一个轻量级且灵活的Node.js Web应用程序框架,它提供了一组简洁而强大的工具,帮助开发者快速构建Web应用。----👍🏻点赞量:72")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340197367515578378",target:"_blank",rel:"noopener noreferrer"}},[e._v("如果iconfont停止服务了,我们怎么办"),t("OutboundLink")],1),e._v(": 在iconfont不能提供服务之后我们只能自己动手去lu一个了,毕竟老板要的是结果,而不是你说的那句苍白的理由,学着自己造轮子吧----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7333986476030935050",target:"_blank",rel:"noopener noreferrer"}},[e._v("【HTML】交友软件上照片的遮罩是如何做的"),t("OutboundLink")],1),e._v(": 笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐,🐶。于是就去下了一些交友软件来排遣寂寞。可惜的是,有些交友软件真不够意思,连一些漂亮小姐姐的图片都要进行遮罩,完全不考虑兄弟们的感受,😠。所以今----👍🏻点赞量:54")])]),e._v(" "),t("h3",{attrs:{id:"前端-javascript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-javascript"}},[e._v("#")]),e._v(" 前端-JavaScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329967013923962895",target:"_blank",rel:"noopener noreferrer"}},[e._v("js如何实现当文本内容过长时,中间显示省略号...,两端正常展示"),t("OutboundLink")],1),e._v(": 前一阵做需求时,有个小功能实现起来废了点脑细胞,觉得可以记录一下。 产品的具体诉求是:用户点击按钮进入详情页面,详情页内的卡片标题内容过长时,标题的前后两端正常展示,中间用省略号...表示,并且鼠标悬----👍🏻点赞量:284")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352090806453567500",target:"_blank",rel:"noopener noreferrer"}},[e._v("女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件"),t("OutboundLink")],1),e._v(": 前言 对于复杂的逻辑或者流程来说,画一画流程图可以帮助我们更好的捋清楚逻辑。平时我女朋友也偶尔会用 processon 来画一下流程图, processon 确实是一个很好的软件。 但是免费版只能创建----👍🏻点赞量:141")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340197367515578378",target:"_blank",rel:"noopener noreferrer"}},[e._v("如果iconfont停止服务了,我们怎么办"),t("OutboundLink")],1),e._v(": 在iconfont不能提供服务之后我们只能自己动手去lu一个了,毕竟老板要的是结果,而不是你说的那句苍白的理由,学着自己造轮子吧----👍🏻点赞量:40")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7333986476030935050",target:"_blank",rel:"noopener noreferrer"}},[e._v("【HTML】交友软件上照片的遮罩是如何做的"),t("OutboundLink")],1),e._v(": 笑谈 我不知道大家有没有在夜深人静的时候感受到孤苦难耐,🐶。于是就去下了一些交友软件来排遣寂寞。可惜的是,有些交友软件真不够意思,连一些漂亮小姐姐的图片都要进行遮罩,完全不考虑兄弟们的感受,😠。所以今----👍🏻点赞量:54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329353489678680103",target:"_blank",rel:"noopener noreferrer"}},[e._v("分享一款前端网页代码编辑器 Monaco Editor"),t("OutboundLink")],1),e._v(": Monaco Editor Monaco Editor 是由 Microsoft 开发的一款基于 Web 技术的开源代码编辑器,它是 Visual Studio Code 编辑器的核心。Monaco ----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360892717545799689",target:"_blank",rel:"noopener noreferrer"}},[e._v("和后端吵架后,我写了个库,让整个前端团队更加规范!"),t("OutboundLink")],1),e._v(": 前言 大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~ 背景 在平时的开发中,表格数据->(增加/编辑/查看)行->(增加/编辑)提交,这是很常见且简单的业----👍🏻点赞量:46")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340836136208859174",target:"_blank",rel:"noopener noreferrer"}},[e._v("H5 下拉刷新如何实现"),t("OutboundLink")],1),e._v(": 最近我需要做一个下拉刷新的功能,实现功能后我发现,它需要处理的情况还蛮多,于是我整理了这篇文章。首先我会讲解下拉的原理、根据原理写出初始代码;然后我会一边介绍代码存在的缺陷、一边解决缺陷并做些许优化。----👍🏻点赞量:83")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361687968519700514",target:"_blank",rel:"noopener noreferrer"}},[e._v("什么,你连一个Node.js脚本都不会写!!!"),t("OutboundLink")],1),e._v(": 有些人可能会误解 Node.js 脚本,认为它是用 Node.js 编写的。他们可能会觉得如果不懂 Node.js 的语法就无法编写 Node.js 脚本,感觉会写 Node.js 脚本就很神秘。实际----👍🏻点赞量:72")])]),e._v(" "),t("h3",{attrs:{id:"前端-vue-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-vue-js"}},[e._v("#")]),e._v(" 前端-Vue.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7329353489678680103",target:"_blank",rel:"noopener noreferrer"}},[e._v("分享一款前端网页代码编辑器 Monaco Editor"),t("OutboundLink")],1),e._v(": Monaco Editor Monaco Editor 是由 Microsoft 开发的一款基于 Web 技术的开源代码编辑器,它是 Visual Studio Code 编辑器的核心。Monaco ----👍🏻点赞量:50")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361687968519700514",target:"_blank",rel:"noopener noreferrer"}},[e._v("什么,你连一个Node.js脚本都不会写!!!"),t("OutboundLink")],1),e._v(": 有些人可能会误解 Node.js 脚本,认为它是用 Node.js 编写的。他们可能会觉得如果不懂 Node.js 的语法就无法编写 Node.js 脚本,感觉会写 Node.js 脚本就很神秘。实际----👍🏻点赞量:72")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7345277549335642112",target:"_blank",rel:"noopener noreferrer"}},[e._v("从0到1实践,企业级前端开发底层规范搭建(2024版) "),t("OutboundLink")],1),e._v(": 写在开头 公司用的前端开发底层还是我18年底刚毕业时候搭建的,虽然后续有更新Vue3,再往后就因为工作忙、转岗产品经理导致落下了更新,很多都已经跟不上现在的潮流了----👍🏻点赞量:53")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7282603229640687672",target:"_blank",rel:"noopener noreferrer"}},[e._v("Vue3 中的虚拟DOM、 h() 函数,渲染函数,渲染器知识点一网打尽!"),t("OutboundLink")],1),e._v(": 在平常开发阶段我们总是分不清虚拟 DOM、 h() 函数、渲染函数和渲染器的知识。笔者在翻阅相关文档之后,总结了下面这些知识点。 h() 函数用于创建虚拟 DOM,渲染函数的作用就是返回虚拟 DOM。----👍🏻点赞量:31")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361620320363855926",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个简洁、干净的中后台管理模板"),t("OutboundLink")],1),e._v(": nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。----👍🏻点赞量:42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359876671136301108",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024年了,11款Vue3的PC端UI组件库怎么选?——Vue3组件库推荐"),t("OutboundLink")],1),e._v(": 2024年,Vue3逐渐成为前端开发者使用Vue进行开发时的首选,本文旨在梳理当前市场上比较受欢迎的11款Vue3 PC端UI组件库,帮助开发者在繁多的选择中找到最适合自己项目的组件库。----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360143810599223350",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个惨痛的教训教你Vue后台技术选型"),t("OutboundLink")],1),e._v(": 如果摆上一桌好菜,我立马就会思考我先吃哪个菜,哪个菜我喜欢吃多吃点,哪个菜没吃过我要尝尝,哪个菜不喜欢吃看都不会看一眼;如果出去旅游,我也会想我去过哪里,没去过那里,我最想去哪里;如果让我技术选型----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360892717545521161",target:"_blank",rel:"noopener noreferrer"}},[e._v("客户又要一次性滚动千万条数据..."),t("OutboundLink")],1),e._v(": 欸,朋友们好,我是性能优化带师,寅时码 昨天,产品发来张截图,问我怎么这么卡 我一看,噢~原来是佐田,后端的数据,有三千多条,给我挤爆了 这时间,按照传统前端的方式,应该是 减数据、截数据、分段出 引----👍🏻点赞量:14")])]),e._v(" "),t("h3",{attrs:{id:"前端-react-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-react-js"}},[e._v("#")]),e._v(" 前端-React.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352090806453567500",target:"_blank",rel:"noopener noreferrer"}},[e._v("女朋友不想开Processon会员,我魔改了一个无限制的在线绘图软件"),t("OutboundLink")],1),e._v(": 前言 对于复杂的逻辑或者流程来说,画一画流程图可以帮助我们更好的捋清楚逻辑。平时我女朋友也偶尔会用 processon 来画一下流程图, processon 确实是一个很好的软件。 但是免费版只能创建----👍🏻点赞量:141")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7331135154209308687",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官问我 react scheduler 调度机制原理? 我却支支吾吾答不上来...😭😭"),t("OutboundLink")],1),e._v(": 在一次面试时,面试官问我 react scheduler 调度机制原理是什么?我却支支吾吾想了半天没答上来,看着面试官轻蔑的表情,我在心里默默的下定决心:三十年河东三十年河西,莫欺少年穷...... ----👍🏻点赞量:67")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360486735799418916",target:"_blank",rel:"noopener noreferrer"}},[e._v("React 19 带来了 JSX 运行时的重要更新"),t("OutboundLink")],1),e._v(": 在 React 的发展历程中,JSX 运行时一直扮演着重要的角色。在以前的的版本,JSX 运行时会克隆传入的 props 对象,这背后有着两大原因。 历史原因 React 保留了一些特殊的 prop ----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361934843209777152",target:"_blank",rel:"noopener noreferrer"}},[e._v("如何在网页实现 TypeScript 编辑器?"),t("OutboundLink")],1),e._v(": 有的需求需要在网页上写代码。 比如在线执行代码的 playground: 或者在线面试: 如果让你实现网页版 TypeScript 编辑器,你会如何做呢? 有的同学说,直接用微软的 monaco ed----👍🏻点赞量:33")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362057701792923684",target:"_blank",rel:"noopener noreferrer"}},[e._v("React 19 公测版官宣:新功能和新范式"),t("OutboundLink")],1),e._v(": 在这篇 React 官方博客中,我们会科普 React 19 中的 Action 和新型 hook 等新功能,以及万众期待的 RSC(服务器组件)新范式。----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361204571828731956",target:"_blank",rel:"noopener noreferrer"}},[e._v("使用 Next.js App Router 常犯的 10 个错误"),t("OutboundLink")],1),e._v(": 我觉得非常有意义,所以记录下了这 10 个常犯错误的内容,从我自己的角度为大家介绍下这 10 个错误。现在就让我们开始吧!顺便看看你有没有中招。----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360928627632357402",target:"_blank",rel:"noopener noreferrer"}},[e._v("10分钟掌握 react 中的 hooks"),t("OutboundLink")],1),e._v(": 接上文:20分钟带你vue转react 本系列的文章适合 vue 转 react 的同志,建议接上文来看,目前反馈均不错 react 函数组件写法才是官方推荐的,官方推荐我们使用函数组件就是因为----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360737180392996899",target:"_blank",rel:"noopener noreferrer"}},[e._v("Next.js v14 的 cookies()、header() 函数实现原理 —— AsyncLocalStorage"),t("OutboundLink")],1),e._v(": 如果说,有一个 Node.js API 是 Next.js 路由和我们日常开发用到的多个 API 的核心,你猜是哪个 API? 答案是 AsyncLocalStorage。这可不是一个新 API,早----👍🏻点赞量:23")])]),e._v(" "),t("h3",{attrs:{id:"前端-面试"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-面试"}},[e._v("#")]),e._v(" 前端-面试")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360528073631318027",target:"_blank",rel:"noopener noreferrer"}},[e._v("只写后台管理的前端要怎么提升自己"),t("OutboundLink")],1),e._v(": 本人写了五年的后台管理。每次面试前就会头疼,因为写的页面除了表单就是表格。抱怨过苦恼过也后悔过,但是站在现在的时间点回想以前,发现有很多事情可以做的更好,于是有了这篇文----👍🏻点赞量:530")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7346512120639340607",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试题:如何让 var [a, b] = {a: 1, b: 2} 解构赋值成功?"),t("OutboundLink")],1),e._v(": 这是一道字节面试题,大家第一眼看到这个面试题的时候,是不是脑瓜子嗡嗡的?有一种熟悉又陌生的感觉?我当时也一样的😭😭😭,接下来,让我们看看思路吧。----👍🏻点赞量:241")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7331135154209308687",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官问我 react scheduler 调度机制原理? 我却支支吾吾答不上来...😭😭"),t("OutboundLink")],1),e._v(": 在一次面试时,面试官问我 react scheduler 调度机制原理是什么?我却支支吾吾想了半天没答上来,看着面试官轻蔑的表情,我在心里默默的下定决心:三十年河东三十年河西,莫欺少年穷...... ----👍🏻点赞量:67")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7341669201009655845",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文盘点Typescript中23个内置类型工具! (建议收藏)"),t("OutboundLink")],1),e._v(": 一文盘点Typescript中23个内置类型工具! 引言     TypeScript 是一种基于 JavaScript 的类型编程语言, 提供了严格的类型检查机制和类型推导能力,类型是Typescr----👍🏻点赞量:81")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7341408996597448723",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试:性能优化表格和业务场景优化,你了解吗?"),t("OutboundLink")],1),e._v(": 3月的第一个开头,失业已久的我参加了一次线下面试,很有意思的是,这一次面试直接是开发+项目经理+HR,一轮到底。 总而言之,言而总之,面试复盘还是不能少。----👍🏻点赞量:26")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360894458671513651",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:相比于 class 类组件,hooks 到底解决了什么问题?"),t("OutboundLink")],1),e._v(": 相信使用 react 的小伙伴,都使用过 class 组件和函数式组件。 目前来说,函数式组件比较流行,基本上新开发的项目都是以函数式组件为主。 那相比于这两种方式,最直观的就是函数式组件引----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362080157237116978",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:聊一聊前端性能优化"),t("OutboundLink")],1),e._v(": 性能优化总是被面试官问,每次都只能答出那么几个,其实大家都清楚性能优化手段非常多,只要是能让用户体验更好的手段都可以称之为性能优化,本期我就总结下我所知道的性能优化手段,欢迎各位补充~ 一、减少----👍🏻点赞量:21")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359900973990969381",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:有哪五种定位"),t("OutboundLink")],1),e._v(": 1. CSS的position属性值: static:默认值,元素在正常的文档流中,不会被特别定位。 relative:相对于元素在文档流中的初始位置进行定位的。 absolute:相对于最近的已定位----👍🏻点赞量:12")])]),e._v(" "),t("h3",{attrs:{id:"前端-node-js"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-node-js"}},[e._v("#")]),e._v(" 前端-Node.js")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7343138637971734569",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端太卷了,不玩了,写写node.js全栈涨工资,赶紧学起来吧!!!!!"),t("OutboundLink")],1),e._v(": node.js的优缺点和应用场景 Express框架:实践与技术探索 Express是一个轻量级且灵活的Node.js Web应用程序框架,它提供了一组简洁而强大的工具,帮助开发者快速构建Web应用。----👍🏻点赞量:72")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361620320363855926",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个简洁、干净的中后台管理模板"),t("OutboundLink")],1),e._v(": nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。----👍🏻点赞量:42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361629576415838249",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js 22 发布,原生支持 WebSocket 客户端"),t("OutboundLink")],1),e._v(": 昨日,Node.js 官方博客正式宣布 Node.js 22 的发布!新版本亮点包括 require() ES 模块、WebSocket 客户端、V8 JavaScript 引擎的更新等!----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361305594777894975",target:"_blank",rel:"noopener noreferrer"}},[e._v("2024 年 Node 最新版本升级:Node 22 正式发布!"),t("OutboundLink")],1),e._v(": Node 核心团队 Node 22 正式发布!Node 22 会在今年 10 月份进入 LTS 长期支持,但在此之前,该版本是未来半年里的“当前”版本。----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7306018966920658978",target:"_blank",rel:"noopener noreferrer"}},[e._v("控制台的进度条是如何实现的"),t("OutboundLink")],1),e._v(": 我们在使用npm-check-updates,或者pkg-fetch的时候,会发现在loading的状态下控制台会出现一个进度条。 这个是通过progress这个npm包来实现的,虽然它上次更新是20----👍🏻点赞量:14")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360586351815196709",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第六十七章(OpenAI)"),t("OutboundLink")],1),e._v(": OpenAI OpenAI是一个人工智能研究实验室和技术公司,致力于推动人工智能的发展和应用 OpenAI最著名的项目之一是GPT(Generative Pre-trained Transformer----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361253974052503561",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第六十八章(远程桌面)"),t("OutboundLink")],1),e._v(": 远程桌面 远程桌面(Remote Desktop)是一种技术,允许用户通过网络远程连接到另一台计算机,并在本地计算机上控制远程计算机的操作。通过远程桌面,用户可以在不同地点的计算机之间共享屏幕、键盘和----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361261846089564210",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nodejs 第二十六章 反向代理"),t("OutboundLink")],1),e._v(": Nodejs 第二十六章 反向代理 什么是反向代理? 反向代理(Reverse Proxy)是一种服务器,它位于客户端和服务器之间,对外表现为服务器,接受客户端的请求,并将这些请求转发到内部的服务器上----👍🏻点赞量:3")])]),e._v(" "),t("h3",{attrs:{id:"前端-css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-css"}},[e._v("#")]),e._v(" 前端-CSS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7266745788536356879",target:"_blank",rel:"noopener noreferrer"}},[e._v("22个实用的CSS技巧,让你的网站脱颖而出"),t("OutboundLink")],1),e._v(": 想要让你的网站在激烈的竞争中脱颖而出吗?使用CSS的强大功能可以帮助你实现这一目标。本文将分享22个实用的CSS技巧,帮助你提升网站的外观和用户体验----👍🏻点赞量:54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7349360925185802251",target:"_blank",rel:"noopener noreferrer"}},[e._v("15 分钟带你感受 CSS :has() 选择器的强大"),t("OutboundLink")],1),e._v(": 最近看到了许多关于 :has() 选择器的知识点,在此总结下来。 MDN 对 :has() 选择器 的解释是这样的: 下面一起来感受下 :has() 选择器的强大之处吧。 :has() 选择器选择父元----👍🏻点赞量:70")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7340836136208859174",target:"_blank",rel:"noopener noreferrer"}},[e._v("H5 下拉刷新如何实现"),t("OutboundLink")],1),e._v(": 最近我需要做一个下拉刷新的功能,实现功能后我发现,它需要处理的情况还蛮多,于是我整理了这篇文章。首先我会讲解下拉的原理、根据原理写出初始代码;然后我会一边介绍代码存在的缺陷、一边解决缺陷并做些许优化。----👍🏻点赞量:83")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361323113156542490",target:"_blank",rel:"noopener noreferrer"}},[e._v("仿拼多多现金大转盘,H5 抽奖转盘如何实现?"),t("OutboundLink")],1),e._v(": 电商应用中我们常常看到抽奖转盘活动,比如拼多多的「抽奖大转盘」:点击中央的抽奖按钮,转盘开始旋转,一段时间后指针停止在奖品上。 这个效果如果用 H5 应该怎么实现呢?----👍🏻点赞量:38")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360216766373117989",target:"_blank",rel:"noopener noreferrer"}},[e._v("手把手教你写一个 headless 无头组件的单元测试、集成测试、E2E 测试"),t("OutboundLink")],1),e._v(": 我们都知道要想让自己的 headless ui 组件经受得起千锤百炼,那么一个合格的组件测试那是必不可少的; 如果你想对组件测试了解的更深,我相信这篇文章会给你带来不一样的惊喜。----👍🏻点赞量:21")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359900973990969381",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:有哪五种定位"),t("OutboundLink")],1),e._v(": 1. CSS的position属性值: static:默认值,元素在正常的文档流中,不会被特别定位。 relative:相对于元素在文档流中的初始位置进行定位的。 absolute:相对于最近的已定位----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360497239872192552",target:"_blank",rel:"noopener noreferrer"}},[e._v("你可以用伪元素做的有趣事情"),t("OutboundLink")],1),e._v(": 今天这篇文章同样是围绕着CSS的伪元素,主要介绍几个大家平时不怎么用,但又非常有趣的事情,比如卡片蒙层、渐变边框、渐变阴影、伪逗号等。希望这几个小技巧能帮助大家解决平时工作中的需求。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359567256584552482",target:"_blank",rel:"noopener noreferrer"}},[e._v("CSS Tips:跑马灯效果"),t("OutboundLink")],1),e._v(": 在 Web 上,存在着众多借鉴跑马灯理念的无限滚动展示方案,它们能在屏幕或是限定区域内循环往复地呈现信息内容。今天我将分享多种不同的纯 CSS 技术方案实现跑马灯的动画效果!----👍🏻点赞量:15")])]),e._v(" "),t("h3",{attrs:{id:"前端-后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-后端"}},[e._v("#")]),e._v(" 前端-后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360583337511550986",target:"_blank",rel:"noopener noreferrer"}},[e._v("作者把他写了3年的软件,给开源了!"),t("OutboundLink")],1),e._v(": 最近,GitHub上又一款热度很高的开源项目冲进了开发者们的视野。 项目开源不到一个月,现如今就已经收获了15000+的Star标星。 这就是最近非常火热的“顶流” Web OS,名为Puter! 作----👍🏻点赞量:95")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361683213280313394",target:"_blank",rel:"noopener noreferrer"}},[e._v("32.6k star🔥原来国内的独立开发者都在做这些事情"),t("OutboundLink")],1),e._v(": 你是否每天都在重复做着 CRUD 的工作,你是否每天下班后就瘫在家里玩起游戏、 刷起视频,那你应该了解一下国内的独立开发者们都在做些什么。 有的人在做百词斩助手 有的人在做----👍🏻点赞量:122")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361274099107594303",target:"_blank",rel:"noopener noreferrer"}},[e._v("创作者训练营 · 助力创作成长,探索写作之旅!"),t("OutboundLink")],1),e._v(": 👏 2024年创作者训练营第二期全新启程,经过第一期的创作,相信很多新手作者都收获了很多心得,文章质量也大有进步,训练营第二期将继续助力掘友们创作成长,快来一起探索写作进阶之旅吧!----👍🏻点赞量:24")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359821247680675892",target:"_blank",rel:"noopener noreferrer"}},[e._v("面试官:为什么选择学习 Nestjs,而不是 Express?🧐🧐🧐"),t("OutboundLink")],1),e._v(": NestJS 采用了 AOP 的概念,尤其是通过其提供的拦截器(Interceptors)、守卫(Guards)、管道(Pipes)和自定义装饰器来实现。这些功能在 NestJS 中用于处理各种横切 ----👍🏻点赞量:19")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362084722820382760",target:"_blank",rel:"noopener noreferrer"}},[e._v("1 小时速通 ,Node.js 入门要了解的知识点有哪些"),t("OutboundLink")],1),e._v(": 👈👈👈 欢迎点赞收藏关注哟 一. 前言 最近在研究新的东西,难免用到了一些前端的工具 ,所以这篇文章就产生了。 文章定位 : 这是一篇速通文 , 针对的是有其他程序领域的基础,但是没有接触或者接触得不----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360961068165775401",target:"_blank",rel:"noopener noreferrer"}},[e._v("写给前端的 Docker 入门教程"),t("OutboundLink")],1),e._v(": 在软件开发过程中,环境配置是一个至关重要的步骤,它不仅影响开发效率,也直接关联到软件的最终质量。正确的环境配置可以极大地减少开发中的潜在问题,提升软件发布的流畅度和稳定性。以下是几个关键方面,以及如何----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361409349733564457",target:"_blank",rel:"noopener noreferrer"}},[e._v("不用 git 也能把代码到 Github 仓库上?😱😱😱"),t("OutboundLink")],1),e._v(": 在我们的日常开发中,使用 git 是我们作为一个前后端开发者必备的工具了,无论你是将代码提交到 GayHub 上还是 gitlab 上。那么如果不使用你有没有办法将代码提交到 GayHub 仓库上呢?----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359240782564261927",target:"_blank",rel:"noopener noreferrer"}},[e._v("如何使用 Node.js 发送电子邮件全解和相关工具推荐"),t("OutboundLink")],1),e._v(": 你会在 npm 上找到大量与电子邮件相关的模块,其中最流行的是 NodeMailer,每周的下载量超过 300 万次。 要使用它,您需要一个可以发送电子邮件的 SMTP 服务器。您可以使用自己的电子邮----👍🏻点赞量:4")])]),e._v(" "),t("h3",{attrs:{id:"前端-typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-typescript"}},[e._v("#")]),e._v(" 前端-TypeScript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7341669201009655845",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文盘点Typescript中23个内置类型工具! (建议收藏)"),t("OutboundLink")],1),e._v(": 一文盘点Typescript中23个内置类型工具! 引言     TypeScript 是一种基于 JavaScript 的类型编程语言, 提供了严格的类型检查机制和类型推导能力,类型是Typescr----👍🏻点赞量:81")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360512664316526626",target:"_blank",rel:"noopener noreferrer"}},[e._v("JS 没有枚举,但 JS 可以创建枚举"),t("OutboundLink")],1),e._v(": 当我们将 TS 编译为 JS 之后,就会发现 TS 的枚举其实也是用原生 JS 来模拟的。本文共享的是,在 JS 中创建枚举的若干方案及其利弊。----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7358672091175764002",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个typescript 5 + rollup 4 打包lib模板仓库实现"),t("OutboundLink")],1),e._v(": 前言 昨天在写点什么东西的时候,发现有些逻辑可以搞成一个 npm 模块。 找了下看看,有没有什么好用现成模板用于开发。。发现并没有; 那有需求就解决需求。。 需求 基于当前的流行技术栈选型(rollu----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361257579698618419",target:"_blank",rel:"noopener noreferrer"}},[e._v("「译」面向 JavaScript 开发人员的 TSConfig 简介"),t("OutboundLink")],1),e._v(": JavaScript 从最初作为一种简单的脚本语言开始不断发展,成为用于构建复杂应用程序的强大、现代的语言工具。为了管理更大、复杂的代码库,JavaScript 开发人员不断寻找方法改善他们的工作流程----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360206524843950119",target:"_blank",rel:"noopener noreferrer"}},[e._v("vue-manage-system 版本更新,让开发更加简单"),t("OutboundLink")],1),e._v(": vue-manage-system 近期进行了一次版本升级,主要是支持了更多功能、升级依赖版本和优化样式,并且上线了官方文档网站,大部分功能都有文档或者使用示例,更加适合新手上手开发,只需要根据实际业----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362119848660680767",target:"_blank",rel:"noopener noreferrer"}},[e._v("前端实现千位分隔符并保留指定小数位"),t("OutboundLink")],1),e._v(": 前言 最近写需求遇到了一个金额的显示需求,要求使用千位分隔符并保留两位小数。这个需求并不是太难,下面写下我的思路。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360528073630449675",target:"_blank",rel:"noopener noreferrer"}},[e._v("72小时带你光速入门TypeScript - 环境搭建02"),t("OutboundLink")],1),e._v(": 上篇文章里,我们初接触了TypeScript。本篇文章,小编将会带着大家一起来搭建一下有关Ts的前后端开发环境----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362029084878848000",target:"_blank",rel:"noopener noreferrer"}},[e._v("使用 ArkUI 开发一个任务管理应用"),t("OutboundLink")],1),e._v(": 本文将介绍如何使用 ArkUI 来开发一个任务管理应用,包括 @Link、@Watch、@Provide、@Consume 等装饰器的使用,实现对页面数据的 CRUD 操作。----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-github"}},[e._v("#")]),e._v(" 前端-GitHub")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360583337511550986",target:"_blank",rel:"noopener noreferrer"}},[e._v("作者把他写了3年的软件,给开源了!"),t("OutboundLink")],1),e._v(": 最近,GitHub上又一款热度很高的开源项目冲进了开发者们的视野。 项目开源不到一个月,现如今就已经收获了15000+的Star标星。 这就是最近非常火热的“顶流” Web OS,名为Puter! 作----👍🏻点赞量:95")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361683213280313394",target:"_blank",rel:"noopener noreferrer"}},[e._v("32.6k star🔥原来国内的独立开发者都在做这些事情"),t("OutboundLink")],1),e._v(": 你是否每天都在重复做着 CRUD 的工作,你是否每天下班后就瘫在家里玩起游戏、 刷起视频,那你应该了解一下国内的独立开发者们都在做些什么。 有的人在做百词斩助手 有的人在做----👍🏻点赞量:122")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360493040135651366",target:"_blank",rel:"noopener noreferrer"}},[e._v("独立开发(裸辞)100天,我的阶段性复盘"),t("OutboundLink")],1),e._v(": 嗨,大家好,我是徐小夕。从裸辞到现在已经快100天了,今天做一个系统性的复盘,聊聊这100天,我都做了些什么。 从零代码和可视化说起 4年前一个夜高风黑的夜晚,我决定做一款前端效率工具,通过拖拽式来帮----👍🏻点赞量:61")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7326738921471016969",target:"_blank",rel:"noopener noreferrer"}},[e._v("打造完美桌面应用体验:Tauri自动升级技术揭秘"),t("OutboundLink")],1),e._v(": 探索如何通过Tauri框架实现桌面应用的自动更新提示。本文详细介绍了私钥生成、Tauri的Updater配置和GitHub环境变量设置等关键步骤。通过作者的实际经验,读者将了解到成功实现自动更新的技术----👍🏻点赞量:27")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359900973990920229",target:"_blank",rel:"noopener noreferrer"}},[e._v("git必看技巧:一行代码恢复被同事误删(覆盖)的代码"),t("OutboundLink")],1),e._v(": 代码提交常遇到的问题 在企业项目开发中,git是我们每个程序员提交代码必用的工具。在多人开发同一个项目中的时候,总会出现很多代码提交问题,一个常见的问题就是:我刚提交了代码,结果另一个(混蛋)同事不小----👍🏻点赞量:7")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361253974052290569",target:"_blank",rel:"noopener noreferrer"}},[e._v("轻松实现协同编辑能力?+请给你的编辑器安排上!"),t("OutboundLink")],1),e._v(": 前言 hi,大家好,我是徐小夕,之前和大家分享了很多可视化低代码的技术实践,最近也做了一款非常有意思的文档搭建引擎——Nocode/Doc: 也做了一些分享: 文档引擎+AI可视化打造下一代文档编辑器----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360947498943528987",target:"_blank",rel:"noopener noreferrer"}},[e._v("有关vscode的一些命令行小技巧"),t("OutboundLink")],1),e._v(": 有过好几次当我在用命令行操作git的时候,同事会过来问我不是有工具吗,干啥还要那么累噼里啪啦的敲命令行呢,我只能说那么多年了习惯了,同事只能呵呵一声表示不理解,我也回一声呵呵表示有代沟,而最近我忽然发----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362046189011812367",target:"_blank",rel:"noopener noreferrer"}},[e._v("在 GitHub 中掌握键盘快捷键的简短指南"),t("OutboundLink")],1),e._v(": 你是否知道 GitHub 几乎每页都有键盘快捷键?这篇文章将带你探索 GitHub 的键盘快捷键世界,以及它们如何帮助你快速导航和执行操作。 读完这篇,你将能够: 掌握快捷键:想知道如何访问这些快捷键----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-webpack"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-webpack"}},[e._v("#")]),e._v(" 前端-Webpack")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360879591236124706",target:"_blank",rel:"noopener noreferrer"}},[e._v("【菜狗学前端】超超超详尽Webpack实践笔记"),t("OutboundLink")],1),e._v(": 超超超详尽的webpack使用,实践笔记!!!知原因晓使用,一撸到底!各种使用插件、配置,一应俱全,希望可以喜欢----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362309246556651559",target:"_blank",rel:"noopener noreferrer"}},[e._v("字节 Web Infra 团队和 Module Federation 作者联手,正式推出 Module Federation 2.0!"),t("OutboundLink")],1),e._v(": 字节 Web Infra 团队和 Module Federation 作者联手,正式推出 Module Federation 2.0!----👍🏻点赞量:18")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360700937965174838",target:"_blank",rel:"noopener noreferrer"}},[e._v("深入理解 Webpack Chunk Graph 策略"),t("OutboundLink")],1),e._v(": 通过这篇文章,你可以完全理解前端代码经过打包工具后,到底怎样会产生 chunk,怎样减少 chunk 体积等。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361650229739241491",target:"_blank",rel:"noopener noreferrer"}},[e._v("一文搞懂 Webpack 和 Vite"),t("OutboundLink")],1),e._v(": Webpack 和 Vite 都是前端工程化工具。Webpack 作为老大哥,在前端社区也算站稳了脚跟。随着Vite 的出现,Webpack 的缺陷就慢慢暴露,Vite 逐渐开始替代 Webpack。----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362084371057082368",target:"_blank",rel:"noopener noreferrer"}},[e._v("webpack 整个原理过程 "),t("OutboundLink")],1),e._v(": 什么是webpack 简单来说,webpack是一个简单的打包工具。可以将互相依赖的html,css,js,以及图片文字字体文件等资源文件,经过处理打包一个可执行的项目文件 开始第一步 我们开始第一步----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360312278920986664",target:"_blank",rel:"noopener noreferrer"}},[e._v("一篇文章,webpack深入浅出,原因、基础配置、常见配置..."),t("OutboundLink")],1),e._v(": 原先笔者也一直没有真正去了解过webpack,觉得会敲项目就好了,只知道它是打包工具,但为什么?有什么好处?基层工事决定上层建筑。要深入了解它的原理不容易,所以今天决定开始深入学一下webpack----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360320083221381157",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter web 打包部署到 uniCloud 免费的前端网页托管平台"),t("OutboundLink")],1),e._v(": Flutter web 打包部署到 uniCloud 免费的前端网页托管平台,可以是用 uniCloud 中免费阿里云服务器。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361684907809701898",target:"_blank",rel:"noopener noreferrer"}},[e._v("Tapable的神秘之处-源码解析(1)"),t("OutboundLink")],1),e._v(": Tapable的神秘之处-源码解析系列 通过使用Tapable,我们可以轻松地实现各种功能,从简单的插件拓展到复杂的编译过程优化。在这篇文章中,我们将深入探索Tapable的神秘之处,了解它的底层实现----👍🏻点赞量:2")])]),e._v(" "),t("h3",{attrs:{id:"前端-前端框架"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-前端框架"}},[e._v("#")]),e._v(" 前端-前端框架")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360216766373117989",target:"_blank",rel:"noopener noreferrer"}},[e._v("手把手教你写一个 headless 无头组件的单元测试、集成测试、E2E 测试"),t("OutboundLink")],1),e._v(": 我们都知道要想让自己的 headless ui 组件经受得起千锤百炼,那么一个合格的组件测试那是必不可少的; 如果你想对组件测试了解的更深,我相信这篇文章会给你带来不一样的惊喜。----👍🏻点赞量:21")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361631167064457216",target:"_blank",rel:"noopener noreferrer"}},[e._v("Next.js动态路由、动态渲染傻傻分不清"),t("OutboundLink")],1),e._v(": 最近,有位群友说「动态路由就是动态渲染」。这是很符合直觉的判断,但真理往往是反直觉的,动态路由不一定是动态渲染的。----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7348275757800521743",target:"_blank",rel:"noopener noreferrer"}},[e._v("什么是虚拟DOM-【图解】"),t("OutboundLink")],1),e._v(": What 什么是虚拟DOM 原理 使用状态生成虚拟节点,然后使用虚拟节点来渲染视图 例如:DOM中字体颜色发生改变时,就会产生一个状态,并生成了对应的虚拟Dom,虚拟DOM再进一步处理,渲染出了变化后----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359919545274826793",target:"_blank",rel:"noopener noreferrer"}},[e._v("加速前端开发:用MFSU瞬间解决本地热更新慢的烦恼!"),t("OutboundLink")],1),e._v(": 本文介绍了如何通过用MFSU瞬间解决本地热更新慢的烦恼!将本地构建时间从5分钟缩短至1分钟左右,热更新时间从几十秒降至十几秒。----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362023585517436968",target:"_blank",rel:"noopener noreferrer"}},[e._v("Stencil 搭建 Web Component 组件库项目(工作原理解析)"),t("OutboundLink")],1),e._v(": Stencil 搭建扩展性和兼容性好的 Web Component 组件库,支持按需引入,懒加载;介绍 Stencil 框架工作原理----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360947498943528987",target:"_blank",rel:"noopener noreferrer"}},[e._v("有关vscode的一些命令行小技巧"),t("OutboundLink")],1),e._v(": 有过好几次当我在用命令行操作git的时候,同事会过来问我不是有工具吗,干啥还要那么累噼里啪啦的敲命令行呢,我只能说那么多年了习惯了,同事只能呵呵一声表示不理解,我也回一声呵呵表示有代沟,而最近我忽然发----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362140838972882953",target:"_blank",rel:"noopener noreferrer"}},[e._v("用更合适的文档库!打造专属品质,尽显码农风采!"),t("OutboundLink")],1),e._v(": 一个合格的组件工具等库,我们不仅要会知其然,更要知其所以然; 同时我们也要达到让别人开箱即用,尽量降低使用成本,从而提升大家的研发使用效率; 那么一个文档就必不可少了,而且还要一看就秒懂。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359876671137022004",target:"_blank",rel:"noopener noreferrer"}},[e._v("不止响应式:Vue3探秘系列— 虚拟vnode的页面挂载之旅(一)"),t("OutboundLink")],1),e._v(": 前言 在浩如烟海的网络世界中,关于Vue3源码的文章比星星还多,但让人哭笑不得的是,大部分文章都在讲数据响应式。这种情况让人误以为,Vue3的全部秘密就藏在响应式里面,仿佛一旦你掌握了这门黑魔法,就可----👍🏻点赞量:3")])]),e._v(" "),t("h3",{attrs:{id:"前端-架构"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-架构"}},[e._v("#")]),e._v(" 前端-架构")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7350226744051925042",target:"_blank",rel:"noopener noreferrer"}},[e._v("Token无感知刷新,让流畅成为常态"),t("OutboundLink")],1),e._v(": Token无感知刷新,让流畅成为常态 Token无感知刷新是现代Web应用中提升用户身份验证体验的关键技术。在多用户的互联网服务中,保障安全的同时提供无缝体验至关重要。用户期望在使用应用程序时能顺畅进----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359821944148361256",target:"_blank",rel:"noopener noreferrer"}},[e._v("领导:写个请求库,要支持中断请求、缓存请求(幂等)、重试请求、脚手架生成代码模板..."),t("OutboundLink")],1),e._v(": 现况 前端的请求库,大家基本都用的是 Axios 而他是基于 XHR 封装的,目前 XHR 已经停更了 相较于 fetch,缺失了一些功能 如: 可读流 中断请求 自定义referrer 由于 fet----👍🏻点赞量:3")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361737504512114715",target:"_blank",rel:"noopener noreferrer"}},[e._v("也许是最全面的前端同步持久化管理方案了:awesome-storage-manage"),t("OutboundLink")],1),e._v(": awesome-storage-manage:前端存储管理方案 一、项目当前痛点 1. 存/取storage方法各式各样 有直接调用原生setItem/getItem的 也有自己封装了一套方法的 还有----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361361507311534106",target:"_blank",rel:"noopener noreferrer"}},[e._v("HarmonyOS基本UI封装——Cell单元格组件封装与使用(三)"),t("OutboundLink")],1),e._v(": 前言 BasicLibrary是一个基于API 11封装的基本库 未来的计划是将其打造成一个通用的UI组件+基本工具组件,目前正在完善UI组件,大家如果组件有什么需求,可以尽管提哦 BasicLibr----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360856203838783539",target:"_blank",rel:"noopener noreferrer"}},[e._v("HarmonyOS基本UI封装——标题栏组件NavBar封装与使用(二)"),t("OutboundLink")],1),e._v(": 前言 BasicLibrary是一个基于API 11封装的基本库 未来的计划是将其打造成一个通用的UI组件+基本工具组件,目前正在完善UI组件,大家如果组件有什么需求,可以尽管提哦 BasicLibr----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361323894450946086",target:"_blank",rel:"noopener noreferrer"}},[e._v("新手也能学会的甘特图制作教程"),t("OutboundLink")],1),e._v(": 甘特图是什么? 甘特图(Gantt Chart)是一种以图表形式直观展示项目计划的工具,由20世纪初的管理学家亨利·甘特(Henry Gantt)发明并命名。它具有以下几个主要特点: 水平时间轴 甘特----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361752279726407680",target:"_blank",rel:"noopener noreferrer"}},[e._v("搭建通用工具打包框架"),t("OutboundLink")],1),e._v(": 使用 rollup 开发自己通用工具打包框架。同时通过 pnpm+Monorepo 进行统一仓库管理。----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361611938474213426",target:"_blank",rel:"noopener noreferrer"}},[e._v("全面解析:使用TypeScript和Rollup构建JavaScript库的生命周期及实践"),t("OutboundLink")],1),e._v(": 详细介绍了如何从初始设定到发布,使用 TypeScript 和 Rollup 工具构建 JavaScript 库的各个步骤----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"前端-npm"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#前端-npm"}},[e._v("#")]),e._v(" 前端-NPM")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361620320363855926",target:"_blank",rel:"noopener noreferrer"}},[e._v("一个简洁、干净的中后台管理模板"),t("OutboundLink")],1),e._v(": nova-admin —— 一个基于Vue3、Vite5、Typescript、Naive UI, 简洁干净后台管理模板。----👍🏻点赞量:42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360700937966600246",target:"_blank",rel:"noopener noreferrer"}},[e._v("【本地npm包调试】有了它,再也不用npm link了!"),t("OutboundLink")],1),e._v(": 问题:我们开发完一个npm包,有没有这样一种方式,既不用正式发包,又能像正式发包一样本地直接安装调试呢?----👍🏻点赞量:8")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361631167065178112",target:"_blank",rel:"noopener noreferrer"}},[e._v("消息推送到微信:给我的npm插件加上消息推送"),t("OutboundLink")],1),e._v(": 前言 之前我为了提高工作效率,实现了我的第一个npm包。 我的第一个npm包:plugin-zip-pack - 掘金 (juejin.cn) 用ts重构基于rollup的npm包踩坑记录 - 掘金 ----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361752279726899200",target:"_blank",rel:"noopener noreferrer"}},[e._v("做自己的npm包的过程记录"),t("OutboundLink")],1),e._v(": 感觉过程中把能踩的坑都踩了一遍。 我是一个菜狗,记录的也只是一个流水账,请各位大佬不要嘲笑我,谢谢O(∩_∩)O----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361458685484662835",target:"_blank",rel:"noopener noreferrer"}},[e._v("简单发布一个 ts 的 npm 包"),t("OutboundLink")],1),e._v(": 通过 TypeScript 编写一些通用的 JavaScript 工具函数,并能通过 NPM 发布、安装、更新等。----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7362046189012221967",target:"_blank",rel:"noopener noreferrer"}},[e._v("深入浅出Node.js中的AWS请求签名——aws4使用指南"),t("OutboundLink")],1),e._v(": AWS服务在安全性方面要求极高,所有通过API发起的请求都必须进行签名验证。今天我们就来探讨如何在Node.js中利用aws4库来进行签名,确保你的请求符合AWS的安全标准。 🛠️ 快速开始 首先,你----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359893210797015051",target:"_blank",rel:"noopener noreferrer"}},[e._v("rollup+ts开发npm包的知识点总结"),t("OutboundLink")],1),e._v(": 开始 使用 rollup + ts 开发插件时遇到的一些问题和知识点,谨以此篇记录自己的学习过程,方便日后复习,也希望能帮助到其他同学。 往期推荐: 解决ts+rollup打包报错以及警告 - 掘金 ----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7361284455535738915",target:"_blank",rel:"noopener noreferrer"}},[e._v("Node.js 中的 AWS 请求签名实操:aws-sign2 快速入门"),t("OutboundLink")],1),e._v(": AWS 云服务提供了众多的服务和 API,为了保证这些 API 的调用安全,AWS 实施了一套复杂的签名机制。本文将向您展示如何在 Node.js 项目中利用 aws-sign2 快速实现 AWS 请----👍🏻点赞量:0")])]),e._v(" "),t("h3",{attrs:{id:"后端"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#后端"}},[e._v("#")]),e._v(" 后端")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7346959888008020002",target:"_blank",rel:"noopener noreferrer"}},[e._v("node_koa后端——初始化配置jwt和swagger的koa框架"),t("OutboundLink")],1),e._v(": 分享 node_koa后端——初始化配置jwt和swagger的koa框架。 面向对象:前端初学者、前端转后端的同学----👍🏻点赞量:15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360486735798927396",target:"_blank",rel:"noopener noreferrer"}},[e._v("偷偷分享下我们公司的研发规范~"),t("OutboundLink")],1),e._v(": 前几天我分享了自己 创业一周年的复盘总结 ,其中提到了一点:随着团队的扩大,我们会更注重研发规范和技术沉淀,今天就给大家分享下团队的研发规范。----👍🏻点赞量:158")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359764922727333939",target:"_blank",rel:"noopener noreferrer"}},[e._v("接了个私活,分享下我是如何从 0 到 1 交付项目的"),t("OutboundLink")],1),e._v(": 🤣虽然我也不知道在哪能接到靠谱的私活,但你可以先收藏本文,万一之后来活了,还能翻出来看看是吧。。。----👍🏻点赞量:136")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7322733301668495375",target:"_blank",rel:"noopener noreferrer"}},[e._v("Nacos 高级详解:提升你的开发和部署效率"),t("OutboundLink")],1),e._v(": Nacos 高级 前言 欢迎来到本篇文章,今天我们将探索 Nacos 高级版,这是一个旨在提升开发和部署效率的强大工具。作为 Nacos 的高级版本,它提供了更多功能和特性,帮助开发人员和运维团队更好----👍🏻点赞量:28")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360984753463803930",target:"_blank",rel:"noopener noreferrer"}},[e._v("MySQL千万级数据从190秒优化到1秒全过程"),t("OutboundLink")],1),e._v(": 千万级数据大概就是MySQL查询的天花板了。这里讨论的情况是在MySQL一张表的数据达到千万级别。表设计很烂,业务统计规则又不允许把sql拆成多个子查询。----👍🏻点赞量:64")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359821944147230760",target:"_blank",rel:"noopener noreferrer"}},[e._v("从零开始,探索一次使用 Go 打造通用连接池的经历"),t("OutboundLink")],1),e._v(": 这篇文章讲述了作者在业务开发中发现的各种连接池实现方式的问题,并描述了不同团队采用的多种技术方法。为解决这些问题,作者着手开发了一个通用的连接池模型,以提高代码的维护性和性能。----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7356044171244159002",target:"_blank",rel:"noopener noreferrer"}},[e._v("Garnet,缓存的新选择!"),t("OutboundLink")],1),e._v(": Garnet是微软推出的一款远程缓存存储系统,旨在为开发者提供高性能、可靠性和可伸缩性的缓存解决方案。它采用了现代化的架构和技术,具有高度可定制性和灵活性,适用于各种规模和类型的应用场景。----👍🏻点赞量:11")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7352075703859150899",target:"_blank",rel:"noopener noreferrer"}},[e._v("分支管理:master,release,hotfix,sit,dev等等,听着都麻烦。"),t("OutboundLink")],1),e._v(": 从一开始的svn到后来接触到git,到目前已经和git打交道比较多了,突然觉得可以把项目中所用到一些分支的管理方式分享出来,希望帮助到大家。----👍🏻点赞量:11")])]),e._v(" "),t("h3",{attrs:{id:"android"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#android"}},[e._v("#")]),e._v(" Android")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7344571269555126335",target:"_blank",rel:"noopener noreferrer"}},[e._v("Jetpack-ViewModel(面试深度起来)"),t("OutboundLink")],1),e._v(": 面试素质三联? ViewModel优点是啥? 答:保存数据 自动管理。 Fragment能拿Activity的ViewModel么? 答:能吧?。 = = ! ViewModel怎么管理的? 答:母鸡----👍🏻点赞量:36")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359743113198600202",target:"_blank",rel:"noopener noreferrer"}},[e._v("Flutter大型项目架构:UI设计系统实现(一)"),t("OutboundLink")],1),e._v(": 作为前端开发,设计资源怎么去管理、设计系统如何去实现其实在日常开发中接触是最多的,每个开发者或者项目都有一套自己的管理方式或实现方式,今天来分享一下我在大型项目中是如何做设计和实现资源管理的。----👍🏻点赞量:20")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7353156196935434290",target:"_blank",rel:"noopener noreferrer"}},[e._v("在Jetpack Compose中管理网络请求竟然如此简单!"),t("OutboundLink")],1),e._v(": 写在前面 本文中提及的use开头的函数,都出自与我的 ComposeHooks 项目,它提供了一系列 React Hooks 风格的状态封装函数,可以帮你更好的使用 Compose,无需关系复杂的状态----👍🏻点赞量:17")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7347911786803789876",target:"_blank",rel:"noopener noreferrer"}},[e._v("全网首发:探秘Flutter UI测试-Golden Test"),t("OutboundLink")],1),e._v(": Golden Test 是一种通过比较图片来测试 UI 的技术。它首先创建一个标准图片,表示 UI 正确状态。然后,当开发者对 UI 进行修改时,Golden Test会自动捕获新的 UI状态,并与标----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360903734853730356",target:"_blank",rel:"noopener noreferrer"}},[e._v("完了,安卓项目代码被误删了......"),t("OutboundLink")],1),e._v(": 朋友开发完了一个公司的app,过了一段时间,在清理电脑空间的时候把该app的项目目录给删了,突然公司针对该app提出了新的需求,这不完了?----👍🏻点赞量:10")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359213228587122700",target:"_blank",rel:"noopener noreferrer"}},[e._v("你的Android“老”项目适配了吗?在Android14上还能安装吗?"),t("OutboundLink")],1),e._v(": 从 Android14开始,targetSdkVersion无法安装低于 23 的应用。要求应用程序满足这些最低目标 API 级别要求可以提高用户的安全性和隐私性。----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360520652519047206",target:"_blank",rel:"noopener noreferrer"}},[e._v("flutter 集成高徳地图,获取定位以及展示地图高徳地图"),t("OutboundLink")],1),e._v(": flutter 集成高徳地图:获取项目证书文件、SHA1,高德地图官方 appkey 申请,使用高徳地图插件定位,展示高徳地图----👍🏻点赞量:13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359893196439142436",target:"_blank",rel:"noopener noreferrer"}},[e._v("【车载Android】模拟Android系统的高负载环境"),t("OutboundLink")],1),e._v(": 在开发车载Android应用和系统时,我们总会面临着一些挑战,尤其是处理高负载应用。例如,当一款新车型发布后,用户可能会同时运行地图、智能驾驶和爱奇艺等资源密集型应用。----👍🏻点赞量:16")])]),e._v(" "),t("h3",{attrs:{id:"ios"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#ios"}},[e._v("#")]),e._v(" IOS")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359475637206040610",target:"_blank",rel:"noopener noreferrer"}},[e._v("从对微信支付SDK二次封装,到OC和swift混编调用总结"),t("OutboundLink")],1),e._v(": 从对微信支付SDK二次封装,到OC和swift混编调用总结。对微信支付的二次封装pod。使得接入微信支付,方便快捷,省事----👍🏻点赞量:2")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359229698604810280",target:"_blank",rel:"noopener noreferrer"}},[e._v("Option:定制化你的动画"),t("OutboundLink")],1),e._v(": 动画时长(Animation Duration) 动画时长是指动画播放的「秒」数。到目前为止,您看到的所有动画代码都使用了默认的动画时长(大概是 0.4 秒左右)。在本节中,我们将展示如何在动画中设置----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359577911991730211",target:"_blank",rel:"noopener noreferrer"}},[e._v("吃得饱系列-用 Rust 给 Flutter 反序列化减负"),t("OutboundLink")],1),e._v(": 通常 Flutter 项目涉及网络请求,就会用到 JSON 转对象,看网上的方案要么 Editor/IDE 工具生成,要么是用网页生成……总之就是要做一件很钢笔又重复的事,本着看闹热不嫌事大的心态,我----👍🏻点赞量:4")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7359225201282613286",target:"_blank",rel:"noopener noreferrer"}},[e._v("SwiftUI 支持即时模式绘制视图 - Canvas"),t("OutboundLink")],1),e._v(": 前言 在 SwiftUI 中,你可以使用 Shape 的 API 去绘制你所需要的 2D 图形。但最终,SwiftUI 框架会将你绘制的所有图形转换为 SwiftUI 视图并去渲染它们。这种方法有利有----👍🏻点赞量:0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360879734690168886",target:"_blank",rel:"noopener noreferrer"}},[e._v("关于 iOS 18 目前知道的消息"),t("OutboundLink")],1),e._v(": 这里每天分享一个 iOS 的新知识,快来关注我吧 前言 前几天苹果公布了 WWDC 24 的最新消息,确定 6 月 10 号开始,今天来盘点一下目前已知的关于今年即将发布的 iOS 18 可能要发布的----👍🏻点赞量:1")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360243360059686950",target:"_blank",rel:"noopener noreferrer"}},[e._v("拿到一台新MAC,如何快速配置并运行Flutter项目"),t("OutboundLink")],1),e._v(": 最近我的电脑因为升级要求需要格式化,悲催,一切要重新开始,本文就记录了我的配置之路,可谓保姆级讲解记录,方便后面有需要回顾查看,如果你也有需要,不妨收藏看看是否用得上。----👍🏻点赞量:9")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360595729486315554",target:"_blank",rel:"noopener noreferrer"}},[e._v("掌握 Swift 中的 reduce 操作符,使你的代码更高效"),t("OutboundLink")],1),e._v(": Swift 的 Sequence 类型有一个强大的操作符叫做 reduce,它允许你将序列的所有元素组合成一个单一的值。在处理来自 App Store Connect API 的响应时,我一直在反复使----👍🏻点赞量:12")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://juejin.cn/post/7360951254605938697",target:"_blank",rel:"noopener noreferrer"}},[e._v("iOS UITextView 加载 HTML 时的问题与优化"),t("OutboundLink")],1),e._v(": 在 iOS 中如果想加载显示 HTML 文本,一般有以下的几种方案: 使用 WKWebView ,偏重、性能较差 将 HTML 字符串转换为 NSAttributedString 对象,使用 UITe----👍🏻点赞量:7")])]),e._v(" "),t("h2",{attrs:{id:"github"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#github"}},[e._v("#")]),e._v(" GitHub")]),e._v(" "),t("h3",{attrs:{id:"javascript-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#javascript-2"}},[e._v("#")]),e._v(" javascript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/max32002/tixcraft_bot",target:"_blank",rel:"noopener noreferrer"}},[e._v("max32002/tixcraft_bot"),t("OutboundLink")],1),e._v(": MaxBot open source code bot----总⭐️2,152; 今日⭐️338")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/HeyPuter/puter",target:"_blank",rel:"noopener noreferrer"}},[e._v("HeyPuter/puter"),t("OutboundLink")],1),e._v(": 🌐 The Internet OS! Free, Open-Source, and Self-Hostable.----总⭐️16,209; 今日⭐️1,962")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/bia-pain-bache/BPB-Worker-Panel",target:"_blank",rel:"noopener noreferrer"}},[e._v("bia-pain-bache/BPB-Worker-Panel"),t("OutboundLink")],1),e._v(": A GUI Panel providing Worker subscriptions and Fragment settings and configs, providing configs for cross-platform clients using (singbox-core and xray-core)----总⭐️646; 今日⭐️360")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/adrianhajdin/aora",target:"_blank",rel:"noopener noreferrer"}},[e._v("adrianhajdin/aora"),t("OutboundLink")],1),e._v(": Build your first mobile application----总⭐️310; 今日⭐️85")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/UseInterstellar/Interstellar",target:"_blank",rel:"noopener noreferrer"}},[e._v("UseInterstellar/Interstellar"),t("OutboundLink")],1),e._v(": One of the most popular modern web proxies with blazing fast speeds and a variety of games.----总⭐️671; 今日⭐️44")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Mintplex-Labs/anything-llm",target:"_blank",rel:"noopener noreferrer"}},[e._v("Mintplex-Labs/anything-llm"),t("OutboundLink")],1),e._v(": The all-in-one Desktop & Docker AI application with full RAG and AI Agent capabilities.----总⭐️12,264; 今日⭐️612")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/vercel/next.js",target:"_blank",rel:"noopener noreferrer"}},[e._v("vercel/next.js"),t("OutboundLink")],1),e._v(": The React Framework----总⭐️120,671; 今日⭐️306")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/louislam/uptime-kuma",target:"_blank",rel:"noopener noreferrer"}},[e._v("louislam/uptime-kuma"),t("OutboundLink")],1),e._v(": A fancy self-hosted monitoring tool----总⭐️49,569; 今日⭐️397")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/facebook/react",target:"_blank",rel:"noopener noreferrer"}},[e._v("facebook/react"),t("OutboundLink")],1),e._v(": The library for web and native user interfaces.----总⭐️221,923; 今日⭐️448")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/replicate/llama-chat",target:"_blank",rel:"noopener noreferrer"}},[e._v("replicate/llama-chat"),t("OutboundLink")],1),e._v(": A boilerplate for creating a Llama 3 chat app----总⭐️692; 今日⭐️63")])]),e._v(" "),t("h3",{attrs:{id:"vue"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#vue"}},[e._v("#")]),e._v(" vue")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/CorentinTh/it-tools",target:"_blank",rel:"noopener noreferrer"}},[e._v("CorentinTh/it-tools"),t("OutboundLink")],1),e._v(": Collection of handy online tools for developers, with great UX.----总⭐️11,218; 今日⭐️580")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/sugarforever/chat-ollama",target:"_blank",rel:"noopener noreferrer"}},[e._v("sugarforever/chat-ollama"),t("OutboundLink")],1),e._v(": ChatOllama is an open source chatbot based on LLMs. It supports a wide range of language models, and knowledge base management.----总⭐️1,742; 今日⭐️322")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Lissy93/dashy",target:"_blank",rel:"noopener noreferrer"}},[e._v("Lissy93/dashy"),t("OutboundLink")],1),e._v(": 🚀 A self-hostable personal dashboard built for you. Includes status-checking, widgets, themes, icon packs, a UI editor and tons more!----总⭐️15,390; 今日⭐️184")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/BewlyBewly/BewlyBewly",target:"_blank",rel:"noopener noreferrer"}},[e._v("BewlyBewly/BewlyBewly"),t("OutboundLink")],1),e._v(": Improve your Bilibili homepage by redesigning it, adding more features, and personalizing it to match your preferences. (English | 简体中文 | 正體中文 | 廣東話)----总⭐️2,759; 今日⭐️322")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/HelgeSverre/ollama-gui",target:"_blank",rel:"noopener noreferrer"}},[e._v("HelgeSverre/ollama-gui"),t("OutboundLink")],1),e._v(": A Web Interface for chatting with your local LLMs via the ollama API----总⭐️295; 今日⭐️15")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/nuxt/ui",target:"_blank",rel:"noopener noreferrer"}},[e._v("nuxt/ui"),t("OutboundLink")],1),e._v(": A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.----总⭐️3,318; 今日⭐️48")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/youlaitech/vue3-element-admin",target:"_blank",rel:"noopener noreferrer"}},[e._v("youlaitech/vue3-element-admin"),t("OutboundLink")],1),e._v(": 🔥基于 vue3 + vite5 + typescript + element-plus 构建的后台管理前端模板(配套后端源码),vue-element-admin 的 vue3 版本。----总⭐️950; 今日⭐️19")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/kingwrcy/moments",target:"_blank",rel:"noopener noreferrer"}},[e._v("kingwrcy/moments"),t("OutboundLink")],1),e._v(": 极简朋友圈----总⭐️789; 今日⭐️393")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ExpTechTW/TREM-tauri",target:"_blank",rel:"noopener noreferrer"}},[e._v("ExpTechTW/TREM-tauri"),t("OutboundLink")],1),e._v(": Taiwan Real-time Earthquake Monitoring(臺灣即時地震監測)----总⭐️120; 今日⭐️48")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Zhouqluo/bilidown-web",target:"_blank",rel:"noopener noreferrer"}},[e._v("Zhouqluo/bilidown-web"),t("OutboundLink")],1),e._v(": 在线下载b站视频----总⭐️130; 今日⭐️60")])]),e._v(" "),t("h3",{attrs:{id:"typescript"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#typescript"}},[e._v("#")]),e._v(" typescript")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/code100x/chess",target:"_blank",rel:"noopener noreferrer"}},[e._v("code100x/chess"),t("OutboundLink")],1),e._v(": A multiplayer chess platform----总⭐️1,469; 今日⭐️1,378")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/langgenius/dify",target:"_blank",rel:"noopener noreferrer"}},[e._v("langgenius/dify"),t("OutboundLink")],1),e._v(": Dify is an open-source LLM app development platform. Dify's intuitive interface combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more, letting you quickly go from prototype to production.----总⭐️25,288; 今日⭐️2,566")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/mendableai/firecrawl",target:"_blank",rel:"noopener noreferrer"}},[e._v("mendableai/firecrawl"),t("OutboundLink")],1),e._v(": 🔥 Turn entire websites into LLM-ready markdown----总⭐️1,921; 今日⭐️869")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/PawanOsman/ChatGPT",target:"_blank",rel:"noopener noreferrer"}},[e._v("PawanOsman/ChatGPT"),t("OutboundLink")],1),e._v(": OpenAI API Free Reverse Proxy----总⭐️4,417; 今日⭐️762")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/continuedev/continue",target:"_blank",rel:"noopener noreferrer"}},[e._v("continuedev/continue"),t("OutboundLink")],1),e._v(": ⏩ Open-source VS Code and JetBrains extensions that enable you to easily create your own modular AI software development system----总⭐️10,985; 今日⭐️455")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/sadmann7/shadcn-table",target:"_blank",rel:"noopener noreferrer"}},[e._v("sadmann7/shadcn-table"),t("OutboundLink")],1),e._v(": A shadcn table component with server-side sorting, filtering, and pagination.----总⭐️1,628; 今日⭐️888")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/twentyhq/twenty",target:"_blank",rel:"noopener noreferrer"}},[e._v("twentyhq/twenty"),t("OutboundLink")],1),e._v(": Building a modern alternative to Salesforce, powered by the community.----总⭐️12,678; 今日⭐️3,371")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/immich-app/immich",target:"_blank",rel:"noopener noreferrer"}},[e._v("immich-app/immich"),t("OutboundLink")],1),e._v(": High performance self-hosted photo and video management solution.----总⭐️31,859; 今日⭐️1,557")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/quilljs/quill",target:"_blank",rel:"noopener noreferrer"}},[e._v("quilljs/quill"),t("OutboundLink")],1),e._v(": Quill is a modern WYSIWYG editor built for compatibility and extensibility.----总⭐️41,207; 今日⭐️810")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hydralauncher/hydra",target:"_blank",rel:"noopener noreferrer"}},[e._v("hydralauncher/hydra"),t("OutboundLink")],1),e._v(": Hydra is a game launcher with its own embedded bittorrent client and a self-managed repack scraper.----总⭐️647; 今日⭐️284")])]),e._v(" "),t("h3",{attrs:{id:"python-2"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#python-2"}},[e._v("#")]),e._v(" python")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/meta-llama/llama3",target:"_blank",rel:"noopener noreferrer"}},[e._v("meta-llama/llama3"),t("OutboundLink")],1),e._v(": The official Meta Llama 3 GitHub site----总⭐️17,977; 今日⭐️11,700")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/unslothai/unsloth",target:"_blank",rel:"noopener noreferrer"}},[e._v("unslothai/unsloth"),t("OutboundLink")],1),e._v(": Finetune Llama 3, Mistral & Gemma LLMs 2-5x faster with 80% less memory----总⭐️7,653; 今日⭐️1,679")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/hiyouga/LLaMA-Factory",target:"_blank",rel:"noopener noreferrer"}},[e._v("hiyouga/LLaMA-Factory"),t("OutboundLink")],1),e._v(": Unify Efficient Fine-Tuning of 100+ LLMs----总⭐️20,139; 今日⭐️3,232")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/myshell-ai/OpenVoice",target:"_blank",rel:"noopener noreferrer"}},[e._v("myshell-ai/OpenVoice"),t("OutboundLink")],1),e._v(": Instant voice cloning by MyShell.----总⭐️19,766; 今日⭐️1,690")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/meta-llama/codellama",target:"_blank",rel:"noopener noreferrer"}},[e._v("meta-llama/codellama"),t("OutboundLink")],1),e._v(": Inference code for CodeLlama models----总⭐️15,013; 今日⭐️565")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/meta-llama/PurpleLlama",target:"_blank",rel:"noopener noreferrer"}},[e._v("meta-llama/PurpleLlama"),t("OutboundLink")],1),e._v(": Set of tools to assess and improve LLM security.----总⭐️1,865; 今日⭐️1,010")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/TencentARC/InstantMesh",target:"_blank",rel:"noopener noreferrer"}},[e._v("TencentARC/InstantMesh"),t("OutboundLink")],1),e._v(": InstantMesh: Efficient 3D Mesh Generation from a Single Image with Sparse-view Large Reconstruction Models----总⭐️1,541; 今日⭐️456")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/Doriandarko/maestro",target:"_blank",rel:"noopener noreferrer"}},[e._v("Doriandarko/maestro"),t("OutboundLink")],1),e._v(": A framework for Claude Opus to intelligently orchestrate subagents.----总⭐️1,090; 今日⭐️315")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/pytorch/torchtune",target:"_blank",rel:"noopener noreferrer"}},[e._v("pytorch/torchtune"),t("OutboundLink")],1),e._v(": A Native-PyTorch Library for LLM Fine-tuning----总⭐️2,799; 今日⭐️720")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/MaxKB",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/MaxKB"),t("OutboundLink")],1),e._v(": 💬 基于 LLM 大语言模型的知识库问答系统。开箱即用,支持快速嵌入到第三方业务系统,1Panel 官方出品。----总⭐️3,966; 今日⭐️929")])]),e._v(" "),t("h3",{attrs:{id:"go"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#go"}},[e._v("#")]),e._v(" go")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/ollama/ollama",target:"_blank",rel:"noopener noreferrer"}},[e._v("ollama/ollama"),t("OutboundLink")],1),e._v(": Get up and running with Llama 3, Mistral, Gemma, and other large language models.----总⭐️61,361; 今日⭐️4,377")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/openbao/openbao",target:"_blank",rel:"noopener noreferrer"}},[e._v("openbao/openbao"),t("OutboundLink")],1),e._v(": OpenBao exists to provide a software solution to manage, store, and distribute sensitive data including secrets, certificates, and keys.----总⭐️2,109; 今日⭐️333")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/1Panel-dev/1Panel",target:"_blank",rel:"noopener noreferrer"}},[e._v("1Panel-dev/1Panel"),t("OutboundLink")],1),e._v(": 🔥 🔥 🔥 现代化、开源的 Linux 服务器运维管理面板。----总⭐️18,180; 今日⭐️352")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/smartcontractkit/chainlink",target:"_blank",rel:"noopener noreferrer"}},[e._v("smartcontractkit/chainlink"),t("OutboundLink")],1),e._v(": node of the decentralized oracle network, bridging on and off-chain computation----总⭐️6,630; 今日⭐️56")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/opentofu/opentofu",target:"_blank",rel:"noopener noreferrer"}},[e._v("opentofu/opentofu"),t("OutboundLink")],1),e._v(": OpenTofu lets you declaratively manage your cloud infrastructure.----总⭐️20,253; 今日⭐️459")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/jeessy2/ddns-go",target:"_blank",rel:"noopener noreferrer"}},[e._v("jeessy2/ddns-go"),t("OutboundLink")],1),e._v(": Simple and easy to use DDNS. Support Aliyun, Tencent Cloud, Dnspod, Cloudflare, Callback, Huawei Cloud, Baidu Cloud, Porkbun, GoDaddy, Namecheap, NameSilo...----总⭐️9,526; 今日⭐️311")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/techschool/simplebank",target:"_blank",rel:"noopener noreferrer"}},[e._v("techschool/simplebank"),t("OutboundLink")],1),e._v(": Backend master class: build a simple bank service in Go----总⭐️3,970; 今日⭐️64")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/version-fox/vfox",target:"_blank",rel:"noopener noreferrer"}},[e._v("version-fox/vfox"),t("OutboundLink")],1),e._v(": A cross-platform and extendable version manager with support for Java, Node.js, Flutter, .Net & more----总⭐️2,089; 今日⭐️250")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/prometheus/prometheus",target:"_blank",rel:"noopener noreferrer"}},[e._v("prometheus/prometheus"),t("OutboundLink")],1),e._v(": The Prometheus monitoring system and time series database.----总⭐️52,783; 今日⭐️123")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/cosmos/cosmos-sdk",target:"_blank",rel:"noopener noreferrer"}},[e._v("cosmos/cosmos-sdk"),t("OutboundLink")],1),e._v(": ⛓️ A Framework for Building High Value Public Blockchains ✨----总⭐️5,946; 今日⭐️30")])]),e._v(" "),t("h3",{attrs:{id:"rust"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#rust"}},[e._v("#")]),e._v(" rust")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/Whitecat18/Rust-for-Malware-Development",target:"_blank",rel:"noopener noreferrer"}},[e._v("Whitecat18/Rust-for-Malware-Development"),t("OutboundLink")],1),e._v(": This repository contains my complete resources and coding practices for malware development using Rust 🦀.----总⭐️577; 今日⭐️271")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/zellij-org/zellij",target:"_blank",rel:"noopener noreferrer"}},[e._v("zellij-org/zellij"),t("OutboundLink")],1),e._v(": A terminal workspace with batteries included----总⭐️17,664; 今日⭐️315")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/lapce/lapce",target:"_blank",rel:"noopener noreferrer"}},[e._v("lapce/lapce"),t("OutboundLink")],1),e._v(": Lightning-fast and Powerful Code Editor written in Rust----总⭐️32,353; 今日⭐️196")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/zed-industries/zed",target:"_blank",rel:"noopener noreferrer"}},[e._v("zed-industries/zed"),t("OutboundLink")],1),e._v(": Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.----总⭐️32,601; 今日⭐️637")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/pola-rs/polars",target:"_blank",rel:"noopener noreferrer"}},[e._v("pola-rs/polars"),t("OutboundLink")],1),e._v(": Dataframes powered by a multithreaded, vectorized query engine, written in Rust----总⭐️26,221; 今日⭐️190")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/apache/datafusion",target:"_blank",rel:"noopener noreferrer"}},[e._v("apache/datafusion"),t("OutboundLink")],1),e._v(": Apache DataFusion SQL Query Engine----总⭐️5,041; 今日⭐️100")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/rust-unofficial/awesome-rust",target:"_blank",rel:"noopener noreferrer"}},[e._v("rust-unofficial/awesome-rust"),t("OutboundLink")],1),e._v(": A curated list of Rust code and resources.----总⭐️42,944; 今日⭐️232")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/ordinals/ord",target:"_blank",rel:"noopener noreferrer"}},[e._v("ordinals/ord"),t("OutboundLink")],1),e._v(": 👁‍🗨 Rare and exotic sats----总⭐️3,618; 今日⭐️124")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/YaLTeR/niri",target:"_blank",rel:"noopener noreferrer"}},[e._v("YaLTeR/niri"),t("OutboundLink")],1),e._v(": A scrollable-tiling Wayland compositor.----总⭐️1,973; 今日⭐️252")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/astral-sh/ruff",target:"_blank",rel:"noopener noreferrer"}},[e._v("astral-sh/ruff"),t("OutboundLink")],1),e._v(": An extremely fast Python linter and code formatter, written in Rust.----总⭐️26,623; 今日⭐️286")])]),e._v(" "),t("h3",{attrs:{id:"object-c"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#object-c"}},[e._v("#")]),e._v(" object-c")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/amowu/arduimo",target:"_blank",rel:"noopener noreferrer"}},[e._v("amowu/arduimo"),t("OutboundLink")],1),e._v(": Amo + Arduino = Arduimo----总⭐️6; 今日⭐️0")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/schacon/blink",target:"_blank",rel:"noopener noreferrer"}},[e._v("schacon/blink"),t("OutboundLink")],1),e._v(": Example file to blink the LED on an Arduino----总⭐️98; 今日⭐️0")])]),e._v(" "),t("h3",{attrs:{id:"css"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#css"}},[e._v("#")]),e._v(" css")]),e._v(" "),t("ul",[t("li",[t("a",{attrs:{href:"https://github.com/Aikoyori/ProgrammingVTuberLogos",target:"_blank",rel:"noopener noreferrer"}},[e._v("Aikoyori/ProgrammingVTuberLogos"),t("OutboundLink")],1),e._v(": High-quality PNGs for logos I made for fun----总⭐️4,326; 今日⭐️3,127")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primeng",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primeng"),t("OutboundLink")],1),e._v(": The Most Complete Angular UI Component Library----总⭐️9,457; 今日⭐️39")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/chokcoco/iCSS",target:"_blank",rel:"noopener noreferrer"}},[e._v("chokcoco/iCSS"),t("OutboundLink")],1),e._v(": 不止于 CSS----总⭐️18,850; 今日⭐️106")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/cloudflare/cloudflare-docs",target:"_blank",rel:"noopener noreferrer"}},[e._v("cloudflare/cloudflare-docs"),t("OutboundLink")],1),e._v(": Cloudflare’s documentation----总⭐️2,578; 今日⭐️19")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primereact",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primereact"),t("OutboundLink")],1),e._v(": The Most Complete React UI Component Library----总⭐️5,771; 今日⭐️63")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/animate-css/animate.css",target:"_blank",rel:"noopener noreferrer"}},[e._v("animate-css/animate.css"),t("OutboundLink")],1),e._v(": 🍿 A cross-browser library of CSS animations. As easy to use as an easy thing.----总⭐️79,764; 今日⭐️54")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/primevue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/primevue"),t("OutboundLink")],1),e._v(": Next Generation Vue UI Component Library----总⭐️7,678; 今日⭐️120")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/spicetify/spicetify-themes",target:"_blank",rel:"noopener noreferrer"}},[e._v("spicetify/spicetify-themes"),t("OutboundLink")],1),e._v(": A community-driven collection of themes for customizing Spotify through Spicetify -----总⭐️4,698; 今日⭐️42")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/primefaces/sakai-vue",target:"_blank",rel:"noopener noreferrer"}},[e._v("primefaces/sakai-vue"),t("OutboundLink")],1),e._v(": ----总⭐️400; 今日⭐️13")]),e._v(" "),t("li",[t("a",{attrs:{href:"https://github.com/rafaelmardojai/firefox-gnome-theme",target:"_blank",rel:"noopener noreferrer"}},[e._v("rafaelmardojai/firefox-gnome-theme"),t("OutboundLink")],1),e._v(": A GNOME👣 theme for Firefox🔥----总⭐️3,201; 今日⭐️17")])])])}),[],!1,null,null,null);r.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/19.9bca7cbf.js b/assets/js/19.9bca7cbf.js new file mode 100644 index 00000000..8889147e --- /dev/null +++ b/assets/js/19.9bca7cbf.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{535:function(t,r,e){"use strict";e.r(r);var a=e(7),_=Object(a.a)({},(function(){var t=this,r=t.$createElement,e=t._self._c||r;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("ul",[e("li",[t._v("互联网越来越流行,程序员内卷越来越严重,技术层出不穷,更新迭代不断;")]),t._v(" "),e("li",[t._v("有可能是为了让技术精进,也有可能是害怕技术落后而掉队;总之需要获取一些前沿信息;")]),t._v(" "),e("li",[t._v("这个项目会基本涵盖大部分技术体系。内容会按照日期进行分类,每天排行前几的文章会被收录;")]),t._v(" "),e("li",[t._v("如果这个网站的分享对你有所帮助,还请大家给个 ⭐️ 让更多的人知道 "),e("a",{attrs:{href:"https://github.com/dravenww/curated-article",target:"_blank",rel:"noopener noreferrer"}},[t._v("它"),e("OutboundLink")],1),t._v(" .")])]),t._v(" "),e("h2",{attrs:{id:"_2024"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_2024"}},[t._v("#")]),t._v(" 2024")]),t._v(" "),e("ul",[e("li",[e("a",{attrs:{href:"/2024/2024-04-28"}},[t._v("2024-04-28")]),t._v(":2024-04-28的文章合集")]),t._v(" "),e("li",[e("a",{attrs:{href:"/2024/2024-04-19"}},[t._v("2024-04-19")]),t._v(":2024-04-19的文章合集")]),t._v(" "),e("li",[e("a",{attrs:{href:"/2024/2024-04-12"}},[t._v("2024-04-12")]),t._v(":2024-04-12的文章合集")]),t._v(" "),e("li",[e("a",{attrs:{href:"/2024/2024-04-07"}},[t._v("2024-04-07")]),t._v(":2024-04-07的文章合集")]),t._v(" "),e("li",[e("a",{attrs:{href:"/2024/2024-03-29"}},[t._v("2024-03-29")]),t._v(":2024-03-29的文章合集")]),t._v(" "),e("li",[e("a",{attrs:{href:"/2024/2024-03-22"}},[t._v("2024-03-22")]),t._v(":2024-03-22的文章合集")])])])}),[],!1,null,null,null);r.default=_.exports}}]); \ No newline at end of file diff --git a/assets/js/19.a241ea8b.js b/assets/js/19.a241ea8b.js deleted file mode 100644 index c5c26793..00000000 --- a/assets/js/19.a241ea8b.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{535:function(t,r,_){"use strict";_.r(r);var a=_(7),e=Object(a.a)({},(function(){var t=this,r=t.$createElement,_=t._self._c||r;return _("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[_("ul",[_("li",[t._v("互联网越来越流行,程序员内卷越来越严重,技术层出不穷,更新迭代不断;")]),t._v(" "),_("li",[t._v("有可能是为了让技术精进,也有可能是害怕技术落后而掉队;总之需要获取一些前沿信息;")]),t._v(" "),_("li",[t._v("这个项目会基本涵盖大部分技术体系。内容会按照日期进行分类,每天排行前几的文章会被收录;")]),t._v(" "),_("li",[t._v("如果这个网站的分享对你有所帮助,还请大家给个 ⭐️ 让更多的人知道 "),_("a",{attrs:{href:"https://github.com/dravenww/curated-article",target:"_blank",rel:"noopener noreferrer"}},[t._v("它"),_("OutboundLink")],1),t._v(" .")])]),t._v(" "),_("h2",{attrs:{id:"_2024"}},[_("a",{staticClass:"header-anchor",attrs:{href:"#_2024"}},[t._v("#")]),t._v(" 2024")]),t._v(" "),_("ul",[_("li",[_("a",{attrs:{href:"/2024/2024-05-19"}},[t._v("2024-05-19")]),t._v(":2024-05-19的文章合集")]),t._v(" "),_("li",[_("a",{attrs:{href:"/2024/2024-04-28"}},[t._v("2024-04-28")]),t._v(":2024-04-28的文章合集")]),t._v(" "),_("li",[_("a",{attrs:{href:"/2024/2024-04-19"}},[t._v("2024-04-19")]),t._v(":2024-04-19的文章合集")]),t._v(" "),_("li",[_("a",{attrs:{href:"/2024/2024-04-12"}},[t._v("2024-04-12")]),t._v(":2024-04-12的文章合集")]),t._v(" "),_("li",[_("a",{attrs:{href:"/2024/2024-04-07"}},[t._v("2024-04-07")]),t._v(":2024-04-07的文章合集")]),t._v(" "),_("li",[_("a",{attrs:{href:"/2024/2024-03-29"}},[t._v("2024-03-29")]),t._v(":2024-03-29的文章合集")]),t._v(" "),_("li",[_("a",{attrs:{href:"/2024/2024-03-22"}},[t._v("2024-03-22")]),t._v(":2024-03-22的文章合集")])])])}),[],!1,null,null,null);r.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/app.c1db30e4.js b/assets/js/app.c020baa7.js similarity index 99% rename from assets/js/app.c1db30e4.js rename to assets/js/app.c020baa7.js index 9d93f998..717b3ec8 100644 --- a/assets/js/app.c1db30e4.js +++ b/assets/js/app.c020baa7.js @@ -1,4 +1,4 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(t){function e(e){for(var r,a,s=e[0],c=e[1],u=e[2],f=0,p=[];f1){for(var r={},i=0,a=n.length;i-1&&(n[e[r]]=this.get(e[r]));return n}};var l=null;for(var f in s.prototype)c[f]=s.prototype[f];e.default=c},function(t,e,n){"use strict";var r=n(12),o=n(9),i=n(11),a=n(13),s=n(49),c=r(a());o(c,{getPolyfill:a,implementation:i,shim:s}),t.exports=c},function(t,e,n){"use strict";var r=n(1),o=r("%String%"),i=r("%TypeError%");t.exports=function(t){if("symbol"==typeof t)throw new i("Cannot convert a Symbol value to a string");return o(t)}},function(t,e,n){"use strict";var r=n(1)("%TypeError%");t.exports=function(t,e){if(null==t)throw new r(e||"Cannot call method on "+t);return t}},function(t,e,n){"use strict";var r=n(1),o=n(12),i=o(r("String.prototype.indexOf"));t.exports=function(t,e){var n=r(t,!!e);return"function"==typeof n&&i(t,".prototype.")?o(n):n}},function(t,e,n){"use strict";(function(e){var r=e.Symbol,o=n(48);t.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&o()}}).call(e,n(14))},function(t,e,n){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),n=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var r=Object.getOwnPropertySymbols(t);if(1!==r.length||r[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},function(t,e,n){"use strict";var r=n(9),o=n(13);t.exports=function(){var t=o();return r(String.prototype,{trim:t},{trim:function(){return String.prototype.trim!==t}}),t}},function(t,e,n){"use strict";(function(e){var n=function(){};if("production"!==e.env.NODE_ENV){var r=function(t,e){var n=arguments.length;e=new Array(n>1?n-1:0);for(var r=1;r2?o-2:0);for(var i=2;i";var y=function(t){var e=l.spaceIndex(t);if(-1===e)return{html:"",closing:"/"===t[t.length-2]};var n="/"===(t=l.trim(t.slice(e+1,-1)))[t.length-1];return n&&(t=l.trim(t.slice(0,-1))),{html:t,closing:n}}(c),b=n[a],w=u(y.html,(function(t,e){var n,o=-1!==l.indexOf(b,t);return r(n=s(a,t,e,o))?o?(e=p(a,t,e,h))?t+'="'+e+'"':t:r(n=f(a,t,e,o))?void 0:n:n}));return c="<"+a,w&&(c+=" "+w),y.closing&&(c+=" /"),c+">"}return r(m=i(a,c,g))?d(c):m}),d);return v&&(m=v.remove(m)),m},t.exports=o},function(t,e){t.exports={smile:"e3/2018new_weixioa02_org.png",lovely:"09/2018new_keai_org.png",happy:"1e/2018new_taikaixin_org.png",clap:"6e/2018new_guzhang_thumb.png",whee:"33/2018new_xixi_thumb.png",haha:"8f/2018new_haha_thumb.png","laugh and cry":"4a/2018new_xiaoku_thumb.png",wink:"43/2018new_jiyan_org.png",greddy:"fa/2018new_chanzui_org.png",awkward:"a3/2018new_heixian_thumb.png",sweat:"28/2018new_han_org.png","pick nose":"9a/2018new_wabi_thumb.png",hum:"7c/2018new_heng_thumb.png",angry:"f6/2018new_nu_thumb.png",grievance:"a5/2018new_weiqu_thumb.png",poor:"96/2018new_kelian_org.png",disappoint:"aa/2018new_shiwang_thumb.png",sad:"ee/2018new_beishang_org.png",tear:"6e/2018new_leimu_org.png","no way":"83/2018new_kuxiao_org.png",shy:"c1/2018new_haixiu_org.png",dirt:"10/2018new_wu_thumb.png","love you":"f6/2018new_aini_org.png",kiss:"2c/2018new_qinqin_thumb.png",amorousness:"9d/2018new_huaxin_org.png",longing:"c9/2018new_chongjing_org.png",desire:"3e/2018new_tianping_thumb.png","bad laugh":"4d/2018new_huaixiao_org.png",blackness:"9e/2018new_yinxian_org.png","laugh without word":"2d/2018new_xiaoerbuyu_org.png",titter:"71/2018new_touxiao_org.png",cool:"c4/2018new_ku_org.png","not easy":"aa/2018new_bingbujiandan_thumb.png",think:"30/2018new_sikao_org.png",question:"b8/2018new_ningwen_org.png","no idea":"2a/2018new_wenhao_thumb.png",dizzy:"07/2018new_yun_thumb.png",bomb:"a2/2018new_shuai_thumb.png",bone:"a1/2018new_kulou_thumb.png","be quiet":"b0/2018new_xu_org.png","shut up":"62/2018new_bizui_org.png",stupid:"dd/2018new_shayan_org.png","surprise ":"49/2018new_chijing_org.png",vomit:"08/2018new_tu_org.png",cold:"40/2018new_kouzhao_thumb.png",sick:"3b/2018new_shengbing_thumb.png",bye:"fd/2018new_baibai_thumb.png","look down on":"da/2018new_bishi_org.png","white eye":"ef/2018new_landelini_org.png","left hum":"43/2018new_zuohengheng_thumb.png","right hum":"c1/2018new_youhengheng_thumb.png",crazy:"17/2018new_zhuakuang_org.png","scold ":"87/2018new_zhouma_thumb.png","hit on face":"cb/2018new_dalian_org.png",wow:"ae/2018new_ding_org.png",fan:"86/2018new_hufen02_org.png",money:"a2/2018new_qian_thumb.png",yawn:"55/2018new_dahaqian_org.png",sleepy:"3c/2018new_kun_thumb.png",sleep:"e2/2018new_shuijiao_thumb.png","watermelon ":"01/2018new_chigua_thumb.png",doge:"a1/2018new_doge02_org.png",dog:"22/2018new_erha_org.png",cat:"7b/2018new_miaomiao_thumb.png",thumb:"e6/2018new_zan_org.png",good:"8a/2018new_good_org.png",ok:"45/2018new_ok_org.png",yeah:"29/2018new_ye_thumb.png","shack hand":"e9/2018new_woshou_thumb.png",bow:"e7/2018new_zuoyi_org.png",come:"42/2018new_guolai_thumb.png",punch:"86/2018new_quantou_thumb.png"}},function(t,e){t.exports={nick:"NickName",mail:"E-Mail",link:"Website(http://)",nickFail:"NickName cannot be less than 3 bytes.",mailFail:"Please confirm your email address.",sofa:"No comment yet.",submit:"Submit",reply:"Reply",cancelReply:"Cancel reply",comments:"Comments",cancel:"Cancel",confirm:"Confirm",continue:"Continue",more:"Load More...",preview:"Preview",emoji:"Emoji",expand:"See more....",seconds:"seconds ago",minutes:"minutes ago",hours:"hours ago",days:"days ago",now:"just now",uploading:"Uploading ...",uploadDone:"Upload completed!",busy:"Submit is busy, please wait...","code-98":"Valine initialization failed, please check your version of av-min.js.","code-99":"Valine initialization failed, Please check the `el` element in the init method.","code-100":"Valine initialization failed, Please check your appId and appKey.","code-140":"The total number of API calls today has exceeded the development version limit.","code-401":"Unauthorized operation, Please check your appId and appKey.","code-403":"Access denied by API domain white list, Please check your security domain."}},function(t,e){t.exports={nick:"ニックネーム",mail:"メールアドレス",link:"サイト(http://)",nickFail:"3バイト以上のニックネームをご入力ください.",mailFail:"メールアドレスをご確認ください.",sofa:"コメントしましょう~",submit:"提出する",reply:"返信する",cancelReply:"キャンセル",comments:"コメント",cancel:"キャンセル",confirm:"確認する",continue:"继续",more:"さらに読み込む...",preview:"プレビュー",emoji:"絵文字",expand:"もっと見る",seconds:"秒前",minutes:"分前",hours:"時間前",days:"日前",now:"たっだ今",uploading:"アップロード中...",uploadDone:"アップロードが完了しました!",busy:"20 秒間隔で提出してください ...","code-98":"ロードエラーです。av-min.js のバージョンを確認してください.","code-99":"ロードエラーです。initにある`el`エレメントを確認ください.","code-100":"ロードエラーです。AppIdとAppKeyを確認ください.","code-140":"今日のAPIコールの総数が開発バージョンの上限を超えた.","code-401":"権限が制限されています。AppIdとAppKeyを確認ください.","code-403":"アクセスがAPIなどに制限されました、ドメイン名のセキュリティ設定を確認ください"}},function(t,e){t.exports={nick:"昵称",mail:"邮箱",link:"网址(http://)",nickFail:"昵称不能少于3个字符",mailFail:"请填写正确的邮件地址",sofa:"来发评论吧~",submit:"提交",reply:"回复",cancelReply:"取消回复",comments:"评论",cancel:"取消",confirm:"确认",continue:"继续",more:"加载更多...",preview:"预览",emoji:"表情",expand:"查看更多...",seconds:"秒前",minutes:"分钟前",hours:"小时前",days:"天前",now:"刚刚",uploading:"正在传输...",uploadDone:"传输完成!",busy:"操作频繁,请稍候再试...","code-98":"Valine 初始化失败,请检查 av-min.js 版本","code-99":"Valine 初始化失败,请检查init中的`el`元素.","code-100":"Valine 初始化失败,请检查你的AppId和AppKey.","code-140":"今日 API 调用总次数已超过开发版限制.","code-401":"未经授权的操作,请检查你的AppId和AppKey.","code-403":"访问被API域名白名单拒绝,请检查你的安全域名设置."}},function(t,e){t.exports={nick:"暱稱",mail:"郵箱",link:"網址(http://)",nickFail:"昵稱不能少於3個字符",mailFail:"請填寫正確的郵件地址",sofa:"來發評論吧~",submit:"提交",reply:"回覆",cancelReply:"取消回覆",comments:"評論",cancel:"取消",confirm:"確認",continue:"繼續",more:"加載更多...",preview:"預覽",emoji:"表情",expand:"查看更多...",seconds:"秒前",minutes:"分鐘前",hours:"小時前",days:"天前",now:"剛剛",uploading:"正在上傳...",uploadDone:"上傳完成!",busy:"操作頻繁,請稍候再試...","code-98":"Valine 初始化失敗,請檢查 av-min.js 版本","code-99":"Valine 初始化失敗,請檢查init中的`el`元素.","code-100":"Valine 初始化失敗,請檢查你的AppId和AppKey.","code-140":"今日 API 調用總次數已超過開發版限制.","code-401":"未經授權的操作,請檢查你的AppId和AppKey.","code-403":"訪問被API域名白名單拒絕,請檢查你的安全域名設置."}},function(t,e,n){var r=n(59);"string"==typeof r&&(r=[[t.i,r,""]]);var o={transform:void 0};n(61)(r,o),r.locals&&(t.exports=r.locals)},function(t,e,n){(t.exports=n(60)(!1)).push([t.i,'.v[data-class=v]{font-size:16px;text-align:left}.v[data-class=v] *{-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.75}.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#555}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#b3b3b3}.v[data-class=v] .text-right{text-align:right}.v[data-class=v] .text-center{text-align:center}.v[data-class=v] img{max-width:100%;border:none}.v[data-class=v] hr{margin:.825em 0;border-color:#f6f6f6;border-style:dashed}.v[data-class=v].hide-avatar .vimg{display:none}.v[data-class=v] a{position:relative;cursor:pointer;color:#1abc9c;text-decoration:none;display:inline-block}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] code,.v[data-class=v] pre{background-color:#f8f8f8;padding:.2em .4em;border-radius:3px;font-size:85%;margin:0}.v[data-class=v] pre{padding:10px;overflow:auto;line-height:1.45}.v[data-class=v] pre code{padding:0;background:transparent;white-space:pre-wrap;word-break:keep-all}.v[data-class=v] blockquote{color:#666;margin:.5em 0;padding:0 0 0 1em;border-left:8px solid hsla(0,0%,93%,.5)}.v[data-class=v] .vinput{border:none;resize:none;outline:none;padding:10px 5px;max-width:100%;font-size:.775em}.v[data-class=v] input[type=checkbox],.v[data-class=v] input[type=radio]{display:inline-block;vertical-align:middle;margin-top:-2px}.v[data-class=v] .vicon{cursor:pointer;display:inline-block;overflow:hidden;fill:#555;vertical-align:middle}.v[data-class=v] .vicon+.vicon{margin-left:10px}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vrow{font-size:0;padding:10px 0}.v[data-class=v] .vrow .vcol{display:inline-block;vertical-align:middle;font-size:14px}.v[data-class=v] .vrow .vcol.vcol-20{width:20%}.v[data-class=v] .vrow .vcol.vcol-30{width:30%}.v[data-class=v] .vrow .vcol.vcol-40{width:40%}.v[data-class=v] .vrow .vcol.vcol-50{width:50%}.v[data-class=v] .vrow .vcol.vcol-60{width:60%}.v[data-class=v] .vrow .vcol.vcol-70{width:70%}.v[data-class=v] .vrow .vcol.vcol-80{width:80%}.v[data-class=v] .vrow .vcol.vctrl{font-size:12px}.v[data-class=v] .emoji,.v[data-class=v] .vemoji{max-width:25px;vertical-align:middle;margin:0 1px;display:inline-block}.v[data-class=v] .vwrap{border:1px solid #f0f0f0;border-radius:4px;margin-bottom:10px;overflow:hidden;position:relative;padding:10px}.v[data-class=v] .vwrap input{background:transparent}.v[data-class=v] .vwrap .vedit{position:relative;padding-top:10px}.v[data-class=v] .vwrap .cancel-reply-btn{position:absolute;right:5px;top:5px;cursor:pointer}.v[data-class=v] .vwrap .vemojis{display:none;font-size:18px;max-height:145px;overflow:auto;padding-bottom:10px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vemojis i{font-style:normal;padding-top:7px;width:36px;cursor:pointer;text-align:center;display:inline-block;vertical-align:middle}.v[data-class=v] .vwrap .vpreview{padding:7px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vheader .vinput{width:33.33%;border-bottom:1px dashed #dedede}.v[data-class=v] .vwrap .vheader.item2 .vinput{width:50%}.v[data-class=v] .vwrap .vheader.item1 .vinput{width:100%}.v[data-class=v] .vwrap .vheader .vinput:focus{border-bottom-color:#eb5055}@media screen and (max-width:520px){.v[data-class=v] .vwrap .vheader.item2 .vinput,.v[data-class=v] .vwrap .vheader .vinput{width:100%}}.v[data-class=v] .vpower{color:#999;font-size:.75em;padding:.5em 0}.v[data-class=v] .vpower a{font-size:.75em}.v[data-class=v] .vcount{padding:5px;font-weight:600;font-size:1.25em}.v[data-class=v] ol,.v[data-class=v] ul{padding:0;margin-left:1.25em}.v[data-class=v] .txt-center{text-align:center}.v[data-class=v] .txt-right{text-align:right}.v[data-class=v] .pd5{padding:5px}.v[data-class=v] .pd10{padding:10px}.v[data-class=v] .veditor{width:100%;min-height:8.75em;font-size:.875em;background:transparent;resize:vertical;-webkit-transition:all .25s ease;transition:all .25s ease}.v[data-class=v] .vbtn{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#555;border:1px solid #ededed;border-radius:.3em;display:inline-block;background:transparent;margin-bottom:0;font-weight:400;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;white-space:nowrap;padding:.5em 1.25em;font-size:.875em;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.v[data-class=v] .vbtn+.vbtn{margin-left:1.25em}.v[data-class=v] .vbtn:active,.v[data-class=v] .vbtn:hover{color:#3090e4;border-color:#3090e4}.v[data-class=v] .vbtn:disabled{border-color:#e1e1e1;color:#e1e1e1;background-color:#fdfafa;cursor:not-allowed}.v[data-class=v] .vempty{padding:1.25em;text-align:center;color:#555;overflow:auto}.v[data-class=v] .vsys{display:inline-block;padding:.2em .5em;font-size:.75em;border-radius:.2em;margin-right:.3em}@media screen and (max-width:520px){.v[data-class=v] .vsys{display:none}}.v[data-class=v] .vcards{width:100%}.v[data-class=v] .vcards .vcard{padding-top:1.25em;position:relative;display:block}.v[data-class=v] .vcards .vcard:after{content:"";clear:both;display:block}.v[data-class=v] .vcards .vcard .vimg{width:3.125em;height:3.125em;float:left;border-radius:50%;margin-right:.7525em;border:1px solid #f5f5f5;padding:.125em}@media screen and (max-width:720px){.v[data-class=v] .vcards .vcard .vimg{width:2.5em;height:2.5em}}.v[data-class=v] .vcards .vcard .vhead{line-height:1.5;margin-top:0}.v[data-class=v] .vcards .vcard .vhead .vnick{position:relative;font-size:.875em;font-weight:500;margin-right:.875em;cursor:pointer;text-decoration:none;display:inline-block}.v[data-class=v] .vcards .vcard .vhead .vnick:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vh{overflow:hidden;padding-bottom:.5em;border-bottom:1px dashed #f5f5f5}.v[data-class=v] .vcards .vcard .vh .vtime{font-size:.75em;margin-right:.875em}.v[data-class=v] .vcards .vcard .vh .vmeta{line-height:1;position:relative}.v[data-class=v] .vcards .vcard .vh .vmeta .vat{font-size:.8125em;color:#ef2f11;cursor:pointer;float:right}.v[data-class=v] .vcards .vcard:last-child .vh{border-bottom:none}.v[data-class=v] .vcards .vcard .vcontent{word-wrap:break-word;word-break:break-all;font-size:.875em;line-height:2;position:relative;margin-bottom:.75em;padding-top:.625em}.v[data-class=v] .vcards .vcard .vcontent.expand{cursor:pointer;max-height:8em;overflow:hidden}.v[data-class=v] .vcards .vcard .vcontent.expand:before{display:block;content:"";position:absolute;width:100%;left:0;top:0;bottom:3.15em;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(hsla(0,0%,100%,.9)));background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.9));z-index:999}.v[data-class=v] .vcards .vcard .vcontent.expand:after{display:block;content:attr(data-expand);text-align:center;color:#828586;position:absolute;width:100%;height:3.15em;line-height:3.15em;left:0;bottom:0;z-index:999;background:hsla(0,0%,100%,.9)}.v[data-class=v] .vcards .vcard .vquote{padding-left:1em;border-left:1px dashed hsla(0,0%,93%,.5)}.v[data-class=v] .vcards .vcard .vquote .vimg{width:2.225em;height:2.225em}.v[data-class=v] .vpage .vmore{margin:1em 0}.v[data-class=v] .clear{content:"";display:block;clear:both}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes pulse{50%{background:#dcdcdc}}@keyframes pulse{50%{background:#dcdcdc}}.v[data-class=v] .vspinner{width:22px;height:22px;display:inline-block;border:6px double #a0a0a0;border-top-color:transparent;border-bottom-color:transparent;border-radius:50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear;position:relative;vertical-align:middle;margin:0 5px}.dark .v[data-class=v] .status-bar,.dark .v[data-class=v] .veditor,.dark .v[data-class=v] .vinput,.dark .v[data-class=v] p,.dark .v[data-class=v] pre code,.night .v[data-class=v] .status-bar,.night .v[data-class=v] .veditor,.night .v[data-class=v] .vinput,.night .v[data-class=v] p,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] .status-bar,.theme__dark .v[data-class=v] .veditor,.theme__dark .v[data-class=v] .vinput,.theme__dark .v[data-class=v] p,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] .status-bar,[data-theme=dark] .v[data-class=v] .veditor,[data-theme=dark] .v[data-class=v] .vinput,[data-theme=dark] .v[data-class=v] p,[data-theme=dark] .v[data-class=v] pre code{color:#b2b2b5}.dark .v[data-class=v] .vsys,.dark .v[data-class=v] .vtime,.night .v[data-class=v] .vsys,.night .v[data-class=v] .vtime,.theme__dark .v[data-class=v] .vsys,.theme__dark .v[data-class=v] .vtime,[data-theme=dark] .v[data-class=v] .vsys,[data-theme=dark] .v[data-class=v] .vtime{color:#929298}.dark .v[data-class=v] code,.dark .v[data-class=v] pre,.dark .v[data-class=v] pre code,.night .v[data-class=v] code,.night .v[data-class=v] pre,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] code,.theme__dark .v[data-class=v] pre,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] code,[data-theme=dark] .v[data-class=v] pre,[data-theme=dark] .v[data-class=v] pre code{color:#929298;background-color:#151414}.dark .v[data-class=v] .vwrap,.night .v[data-class=v] .vwrap,.theme__dark .v[data-class=v] .vwrap,[data-theme=dark] .v[data-class=v] .vwrap{border-color:#b2b2b5}.dark .v[data-class=v] .vicon,.night .v[data-class=v] .vicon,.theme__dark .v[data-class=v] .vicon,[data-theme=dark] .v[data-class=v] .vicon{fill:#b2b2b5}.dark .v[data-class=v] .vicon.actived,.night .v[data-class=v] .vicon.actived,.theme__dark .v[data-class=v] .vicon.actived,[data-theme=dark] .v[data-class=v] .vicon.actived{fill:#66b1ff}.dark .v[data-class=v] .vbtn,.night .v[data-class=v] .vbtn,.theme__dark .v[data-class=v] .vbtn,[data-theme=dark] .v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.dark .v[data-class=v] .vbtn:hover,.night .v[data-class=v] .vbtn:hover,.theme__dark .v[data-class=v] .vbtn:hover,[data-theme=dark] .v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.dark .v[data-class=v] a:hover,.night .v[data-class=v] a:hover,.theme__dark .v[data-class=v] a:hover,[data-theme=dark] .v[data-class=v] a:hover{color:#d7191a}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,.night .v[data-class=v] .vcards .vcard .vcontent.expand:before,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,.night .v[data-class=v] .vcards .vcard .vcontent.expand:after,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}@media (prefers-color-scheme:dark){.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#b2b2b5}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#929298}.v[data-class=v] code,.v[data-class=v] pre,.v[data-class=v] pre code{color:#929298;background-color:#151414}.v[data-class=v] .vwrap{border-color:#b2b2b5}.v[data-class=v] .vicon{fill:#b2b2b5}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}}',""])},function(t,e){function n(t,e){var n=t[1]||"",r=t[3];if(!r)return n;if(e&&"function"==typeof btoa){var o=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(r);return[n].concat(r.sources.map((function(t){return"/*# sourceURL="+r.sourceRoot+t+" */"}))).concat([o]).join("\n")}return[n].join("\n")}t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var r=n(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r})).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},o=0;o=0&&b.splice(e,1)}function s(t){var e=document.createElement("style");return t.attrs.type="text/css",u(e,t.attrs),i(t,e),e}function c(t){var e=document.createElement("link");return t.attrs.type="text/css",t.attrs.rel="stylesheet",u(e,t.attrs),i(t,e),e}function u(t,e){Object.keys(e).forEach((function(n){t.setAttribute(n,e[n])}))}function l(t,e){var n,r,o,i;if(e.transform&&t.css){if(!(i=e.transform(t.css)))return function(){};t.css=i}if(e.singleton){var u=y++;n=g||(g=s(e)),r=f.bind(null,n,u,!1),o=f.bind(null,n,u,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=c(e),r=d.bind(null,n,e),o=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(e),r=p.bind(null,n),o=function(){a(n)});return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else o()}}function f(t,e,n,r){var o=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=_(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function p(t,e){var n=e.css,r=e.media;if(r&&t.setAttribute("media",r),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function d(t,e,n){var r=n.css,o=n.sourceMap,i=void 0===e.convertToAbsoluteUrls&&o;(e.convertToAbsoluteUrls||i)&&(r=w(r)),o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}var h={},v=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}}((function(){return window&&document&&document.all&&!window.atob})),m=function(t){var e={};return function(n){return void 0===e[n]&&(e[n]=t.call(this,n)),e[n]}}((function(t){return document.querySelector(t)})),g=null,y=0,b=[],w=n(62);t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||(e.singleton=v()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var n=o(t,e);return r(n,e),function(t){for(var i=[],a=0;a0?x.join(",")||null:void 0}];else if(c(f))k=f;else{var S=Object.keys(x);k=p?S.sort(p):S}for(var j=0;j0?w+b:""}},function(t,e,n){"use strict";var r=n(125),o=n(388),i=n(390),a=r("%TypeError%"),s=r("%WeakMap%",!0),c=r("%Map%",!0),u=o("WeakMap.prototype.get",!0),l=o("WeakMap.prototype.set",!0),f=o("WeakMap.prototype.has",!0),p=o("Map.prototype.get",!0),d=o("Map.prototype.set",!0),h=o("Map.prototype.has",!0),v=function(t,e){for(var n,r=t;null!==(n=r.next);r=n)if(n.key===e)return r.next=n.next,n.next=t.next,t.next=n,n};t.exports=function(){var t,e,n,r={assert:function(t){if(!r.has(t))throw new a("Side channel does not contain "+i(t))},get:function(r){if(s&&r&&("object"==typeof r||"function"==typeof r)){if(t)return u(t,r)}else if(c){if(e)return p(e,r)}else if(n)return function(t,e){var n=v(t,e);return n&&n.value}(n,r)},has:function(r){if(s&&r&&("object"==typeof r||"function"==typeof r)){if(t)return f(t,r)}else if(c){if(e)return h(e,r)}else if(n)return function(t,e){return!!v(t,e)}(n,r);return!1},set:function(r,o){s&&r&&("object"==typeof r||"function"==typeof r)?(t||(t=new s),l(t,r,o)):c?(e||(e=new c),d(e,r,o)):(n||(n={key:{},next:null}),function(t,e,n){var r=v(t,e);r?r.value=n:t.next={key:e,next:t.next,value:n}}(n,r,o))}};return r}},function(t,e,n){"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(385);t.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},function(t,e,n){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),n=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var r=Object.getOwnPropertySymbols(t);if(1!==r.length||r[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},function(t,e,n){"use strict";var r="Function.prototype.bind called on incompatible ",o=Array.prototype.slice,i=Object.prototype.toString;t.exports=function(t){var e=this;if("function"!=typeof e||"[object Function]"!==i.call(e))throw new TypeError(r+e);for(var n,a=o.call(arguments,1),s=function(){if(this instanceof n){var r=e.apply(this,a.concat(o.call(arguments)));return Object(r)===r?r:this}return e.apply(t,a.concat(o.call(arguments)))},c=Math.max(0,e.length-a.length),u=[],l=0;l-1?o(n):n}},function(t,e,n){"use strict";var r=n(126),o=n(125),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),l=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(t){u=null}t.exports=function(t){var e=s(r,a,arguments);if(c&&u){var n=c(e,"length");n.configurable&&u(e,"length",{value:1+l(0,t.length-(arguments.length-1))})}return e};var f=function(){return s(r,i,arguments)};u?u(t.exports,"apply",{value:f}):t.exports.apply=f},function(t,e,n){var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"==typeof o.get?o.get:null,a=r&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=s&&c&&"function"==typeof c.get?c.get:null,l=s&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,d="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,h=Boolean.prototype.valueOf,v=Object.prototype.toString,m=Function.prototype.toString,g=String.prototype.match,y="function"==typeof BigInt?BigInt.prototype.valueOf:null,b=Object.getOwnPropertySymbols,w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,_="function"==typeof Symbol&&"object"==typeof Symbol.iterator,x=Object.prototype.propertyIsEnumerable,k=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null),O=n(391).custom,S=O&&E(O)?O:null,j="function"==typeof Symbol&&void 0!==Symbol.toStringTag?Symbol.toStringTag:null;function $(t,e,n){var r="double"===(n.quoteStyle||e)?'"':"'";return r+t+r}function C(t){return String(t).replace(/"/g,""")}function A(t){return!("[object Array]"!==I(t)||j&&"object"==typeof t&&j in t)}function E(t){if(_)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!w)return!1;try{return w.call(t),!0}catch(t){}return!1}t.exports=function t(e,n,r,o){var s=n||{};if(P(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(P(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!P(s,"customInspect")||s.customInspect;if("boolean"!=typeof c&&"symbol"!==c)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(P(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return function t(e,n){if(e.length>n.maxStringLength){var r=e.length-n.maxStringLength,o="... "+r+" more character"+(r>1?"s":"");return t(e.slice(0,n.maxStringLength),n)+o}return $(e.replace(/(['\\])/g,"\\$1").replace(/[\x00-\x1f]/g,M),"single",n)}(e,s);if("number"==typeof e)return 0===e?1/0/e>0?"0":"-0":String(e);if("bigint"==typeof e)return String(e)+"n";var v=void 0===s.depth?5:s.depth;if(void 0===r&&(r=0),r>=v&&v>0&&"object"==typeof e)return A(e)?"[Array]":"[Object]";var b=function(t,e){var n;if("\t"===t.indent)n="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;n=Array(t.indent+1).join(" ")}return{base:n,prev:Array(e+1).join(n)}}(s,r);if(void 0===o)o=[];else if(R(o,e)>=0)return"[Circular]";function x(e,n,i){if(n&&(o=o.slice()).push(n),i){var a={depth:s.depth};return P(s,"quoteStyle")&&(a.quoteStyle=s.quoteStyle),t(e,a,r+1,o)}return t(e,s,r+1,o)}if("function"==typeof e){var O=function(t){if(t.name)return t.name;var e=g.call(m.call(t),/^function\s*([\w$]+)/);if(e)return e[1];return null}(e),T=D(e,x);return"[Function"+(O?": "+O:" (anonymous)")+"]"+(T.length>0?" { "+T.join(", ")+" }":"")}if(E(e)){var U=_?String(e).replace(/^(Symbol\(.*\))_[^)]*$/,"$1"):w.call(e);return"object"!=typeof e||_?U:L(U)}if(function(t){if(!t||"object"!=typeof t)return!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement)return!0;return"string"==typeof t.nodeName&&"function"==typeof t.getAttribute}(e)){for(var B="<"+String(e.nodeName).toLowerCase(),q=e.attributes||[],V=0;V"}if(A(e)){if(0===e.length)return"[]";var H=D(e,x);return b&&!function(t){for(var e=0;e=0)return!1;return!0}(H)?"["+z(H,b)+"]":"[ "+H.join(", ")+" ]"}if(function(t){return!("[object Error]"!==I(t)||j&&"object"==typeof t&&j in t)}(e)){var W=D(e,x);return 0===W.length?"["+String(e)+"]":"{ ["+String(e)+"] "+W.join(", ")+" }"}if("object"==typeof e&&c){if(S&&"function"==typeof e[S])return e[S]();if("symbol"!==c&&"function"==typeof e.inspect)return e.inspect()}if(function(t){if(!i||!t||"object"!=typeof t)return!1;try{i.call(t);try{u.call(t)}catch(t){return!0}return t instanceof Map}catch(t){}return!1}(e)){var G=[];return a.call(e,(function(t,n){G.push(x(n,e,!0)+" => "+x(t,e))})),F("Map",i.call(e),G,b)}if(function(t){if(!u||!t||"object"!=typeof t)return!1;try{u.call(t);try{i.call(t)}catch(t){return!0}return t instanceof Set}catch(t){}return!1}(e)){var Q=[];return l.call(e,(function(t){Q.push(x(t,e))})),F("Set",u.call(e),Q,b)}if(function(t){if(!f||!t||"object"!=typeof t)return!1;try{f.call(t,f);try{p.call(t,p)}catch(t){return!0}return t instanceof WeakMap}catch(t){}return!1}(e))return N("WeakMap");if(function(t){if(!p||!t||"object"!=typeof t)return!1;try{p.call(t,p);try{f.call(t,f)}catch(t){return!0}return t instanceof WeakSet}catch(t){}return!1}(e))return N("WeakSet");if(function(t){if(!d||!t||"object"!=typeof t)return!1;try{return d.call(t),!0}catch(t){}return!1}(e))return N("WeakRef");if(function(t){return!("[object Number]"!==I(t)||j&&"object"==typeof t&&j in t)}(e))return L(x(Number(e)));if(function(t){if(!t||"object"!=typeof t||!y)return!1;try{return y.call(t),!0}catch(t){}return!1}(e))return L(x(y.call(e)));if(function(t){return!("[object Boolean]"!==I(t)||j&&"object"==typeof t&&j in t)}(e))return L(h.call(e));if(function(t){return!("[object String]"!==I(t)||j&&"object"==typeof t&&j in t)}(e))return L(x(String(e)));if(!function(t){return!("[object Date]"!==I(t)||j&&"object"==typeof t&&j in t)}(e)&&!function(t){return!("[object RegExp]"!==I(t)||j&&"object"==typeof t&&j in t)}(e)){var Y=D(e,x),K=k?k(e)===Object.prototype:e instanceof Object||e.constructor===Object,J=e instanceof Object?"":"null prototype",X=!K&&j&&Object(e)===e&&j in e?I(e).slice(8,-1):J?"Object":"",Z=(K||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(X||J?"["+[].concat(X||[],J||[]).join(": ")+"] ":"");return 0===Y.length?Z+"{}":b?Z+"{"+z(Y,b)+"}":Z+"{ "+Y.join(", ")+" }"}return String(e)};var T=Object.prototype.hasOwnProperty||function(t){return t in this};function P(t,e){return T.call(t,e)}function I(t){return v.call(t)}function R(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0,r=t.length;n-1?t.split(","):t},u=function(t,e,n,r){if(t){var i=n.allowDots?t.replace(/\.([^.[]+)/g,"[$1]"):t,a=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(i),u=s?i.slice(0,s.index):i,l=[];if(u){if(!n.plainObjects&&o.call(Object.prototype,u)&&!n.allowPrototypes)return;l.push(u)}for(var f=0;n.depth>0&&null!==(s=a.exec(i))&&f=0;--i){var a,s=t[i];if("[]"===s&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,l=parseInt(u,10);n.parseArrays||""!==u?!isNaN(l)&&s!==u&&String(l)===u&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(a=[])[l]=o:a[u]=o:a={0:o}}o=a}return o}(l,e,n,r)}};t.exports=function(t,e){var n=function(t){if(!t)return a;if(null!==t.decoder&&void 0!==t.decoder&&"function"!=typeof t.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var e=void 0===t.charset?a.charset:t.charset;return{allowDots:void 0===t.allowDots?a.allowDots:!!t.allowDots,allowPrototypes:"boolean"==typeof t.allowPrototypes?t.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof t.allowSparse?t.allowSparse:a.allowSparse,arrayLimit:"number"==typeof t.arrayLimit?t.arrayLimit:a.arrayLimit,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof t.comma?t.comma:a.comma,decoder:"function"==typeof t.decoder?t.decoder:a.decoder,delimiter:"string"==typeof t.delimiter||r.isRegExp(t.delimiter)?t.delimiter:a.delimiter,depth:"number"==typeof t.depth||!1===t.depth?+t.depth:a.depth,ignoreQueryPrefix:!0===t.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof t.interpretNumericEntities?t.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof t.parameterLimit?t.parameterLimit:a.parameterLimit,parseArrays:!1!==t.parseArrays,plainObjects:"boolean"==typeof t.plainObjects?t.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:a.strictNullHandling}}(e);if(""===t||null==t)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof t?function(t,e){var n,u={},l=e.ignoreQueryPrefix?t.replace(/^\?/,""):t,f=e.parameterLimit===1/0?void 0:e.parameterLimit,p=l.split(e.delimiter,f),d=-1,h=e.charset;if(e.charsetSentinel)for(n=0;n-1&&(m=i(m)?[m]:m),o.call(u,v)?u[v]=r.combine(u[v],m):u[v]=m}return u}(t,n):t,f=n.plainObjects?Object.create(null):{},p=Object.keys(l),d=0;d0?"in "+o:o+" ago":o}}}},function(t,e,n){var r=n(405);t.exports=function(){var t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],n=["Su","Mo","Tu","We","Th","Fr","Sa"],o=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],i=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],a=["AM","PM"],s=["am","pm"],c=["a.m.","p.m."],u={MMM:function(e){return t[e.getMonth()]},MMMM:function(t){return e[t.getMonth()]},dd:function(t){return n[t.getDay()]},ddd:function(t){return o[t.getDay()]},dddd:function(t){return i[t.getDay()]},A:function(t){return t.getHours()/12>=1?a[1]:a[0]},a:function(t){return t.getHours()/12>=1?s[1]:s[0]},aa:function(t){return t.getHours()/12>=1?c[1]:c[0]}};return["M","D","DDD","d","Q","W"].forEach((function(t){u[t+"o"]=function(e,n){return function(t){var e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"}(n[t](e))}})),{formatters:u,formattingTokensRegExp:r(u)}}},function(t,e){var n=["M","MM","Q","D","DD","DDD","DDDD","d","E","W","WW","YY","YYYY","GG","GGGG","H","HH","h","hh","m","mm","s","ss","S","SS","SSS","Z","ZZ","X","x"];t.exports=function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);var o=n.concat(e).sort().reverse();return new RegExp("(\\[[^\\[]*\\])|(\\\\)?("+o.join("|")+"|.)","g")}},function(t,e,n){"use strict";var r=n(16),o=n(210),i=n(407),a=n(216);function s(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var c=s(n(213));c.Axios=i,c.create=function(t){return s(a(c.defaults,t))},c.Cancel=n(217),c.CancelToken=n(420),c.isCancel=n(212),c.all=function(t){return Promise.all(t)},c.spread=n(421),c.isAxiosError=n(422),t.exports=c,t.exports.default=c},function(t,e,n){"use strict";var r=n(16),o=n(211),i=n(408),a=n(409),s=n(216);function c(t){this.defaults=t,this.interceptors={request:new i,response:new i}}c.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=s(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=[a,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},c.prototype.getUri=function(t){return t=s(this.defaults,t),o(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,r){return this.request(s(r||{},{method:t,url:e,data:n}))}})),t.exports=c},function(t,e,n){"use strict";var r=n(16);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(16),o=n(410),i=n(212),a=n(213);function s(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return s(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||a.adapter)(t).then((function(e){return s(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(s(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(16);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";var r=n(16);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(215);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},function(t,e,n){"use strict";var r=n(16);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(416),o=n(417);t.exports=function(t,e){return t&&!r(e)?o(t,e):e}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(16),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,i,a={};return t?(r.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e){if(a[e]&&o.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},function(t,e,n){"use strict";var r=n(16);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";var r=n(217);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){"use strict";t.exports=function(t){return"object"==typeof t&&!0===t.isAxiosError}},function(t,e,n){},function(t,e,n){"use strict";n(218)},function(t,e,n){},function(t,e,n){var r;function o(t){function n(){if(n.enabled){var t=n,o=+new Date,i=o-(r||o);t.diff=i,t.prev=r,t.curr=o,r=o;for(var a=new Array(arguments.length),s=0;s0)return function(t){if((t=String(t)).length>100)return;var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(!e)return;var a=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*a;case"days":case"day":case"d":return a*i;case"hours":case"hour":case"hrs":case"hr":case"h":return a*o;case"minutes":case"minute":case"mins":case"min":case"m":return a*r;case"seconds":case"second":case"secs":case"sec":case"s":return a*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}(t);if("number"===c&&!1===isNaN(t))return e.long?a(s=t,i,"day")||a(s,o,"hour")||a(s,r,"minute")||a(s,n,"second")||s+" ms":function(t){if(t>=i)return Math.round(t/i)+"d";if(t>=o)return Math.round(t/o)+"h";if(t>=r)return Math.round(t/r)+"m";if(t>=n)return Math.round(t/n)+"s";return t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){"use strict";n(221)},function(t,e,n){"use strict";n(222)},function(t,e,n){"use strict";n.r(e);n(139),n(243),n(252),n(254),n(18);function r(t,e,n,r,o,i,a){try{var s=t[i](a),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(r,o)}function o(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function s(t){r(a,o,i,s,c,"next",t)}function c(t){r(a,o,i,s,c,"throw",t)}s(void 0)}))}}n(162),n(34),n(24),n(26),n(42),n(21);var i=n(0);function a(t,e){for(var n in e)t[n]=e[n];return t}var s=/[!'()*]/g,c=function(t){return"%"+t.charCodeAt(0).toString(16)},u=/%2C/g,l=function(t){return encodeURIComponent(t).replace(s,c).replace(u,",")};function f(t){try{return decodeURIComponent(t)}catch(t){0}return t}var p=function(t){return null==t||"object"==typeof t?t:String(t)};function d(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=f(n.shift()),o=n.length>0?f(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function h(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return l(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(l(e)):r.push(l(e)+"="+l(t)))})),r.join("&")}return l(e)+"="+l(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var v=/\/?$/;function m(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=g(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:w(e,o),matched:t?b(t):[]};return n&&(a.redirectedFrom=w(n,o)),Object.freeze(a)}function g(t){if(Array.isArray(t))return t.map(g);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=g(t[n]);return e}return t}var y=m(null,{path:"/"});function b(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function w(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||h)(r)+o}function _(t,e,n){return e===y?t===e:!!e&&(t.path&&e.path?t.path.replace(v,"")===e.path.replace(v,"")&&(n||t.hash===e.hash&&x(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&x(t.query,e.query)&&x(t.params,e.params))))}function x(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?x(i,a):String(i)===String(a)}))}function k(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",f=u.path?j(u.path,l,n||o.append):l,h=function(t,e,n){void 0===e&&(e={});var r,o=n||d;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(p):p(a)}return r}(u.query,o.query,r&&r.options.parseQuery),v=o.hash||u.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:f,query:h,hash:v}}var G,Q=function(){},Y={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,s=o.route,c=o.href,u={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,g=null==this.exactActiveClass?d:this.exactActiveClass,y=s.redirectedFrom?m(null,W(s.redirectedFrom),null,n):s;u[g]=_(r,y,this.exactPath),u[h]=this.exact||this.exactPath?u[g]:function(t,e){return 0===t.path.replace(v,"/").indexOf(e.path.replace(v,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var b=u[g]?this.ariaCurrentValue:null,w=function(t){K(t)&&(e.replace?n.replace(i,Q):n.push(i,Q))},x={click:K};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=w})):x[this.event]=w;var k={class:u},O=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:s,navigate:w,isActive:u[h],isExactActive:u[g]});if(O){if(1===O.length)return O[0];if(O.length>1||!O.length)return 0===O.length?t():t("span",{},O)}if("a"===this.tag)k.on=x,k.attrs={href:c,"aria-current":b};else{var S=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=H(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}var xt={redirected:2,aborted:4,cancelled:8,duplicated:16};function kt(t,e){return St(t,e,xt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return jt.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Ot(t,e){return St(t,e,xt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function St(t,e,n,r){var o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}var jt=["params","query","hash"];function $t(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Ct(t,e){return $t(t)&&t._isRouter&&(null==e||t.type===e)}function At(t){return function(e,n,r){var o=!1,i=0,a=null;Et(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=It((function(e){var o;((o=e).__esModule||Pt&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:G.extend(e),n.components[s]=e,--i<=0&&r()})),l=It((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=$t(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function Et(t,e){return Tt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Tt(t){return Array.prototype.concat.apply([],t)}var Pt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function It(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Rt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=y,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Mt(t,e,n,r){var o=Et(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=G.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Tt(r?o.reverse():o)}function Lt(t,e){if(e)return function(){return t.apply(e,arguments)}}Rt.prototype.listen=function(t){this.cb=t},Rt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Rt.prototype.onError=function(t){this.errorCbs.push(t)},Rt.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(Ct(t,xt.redirected)&&i===y||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Rt.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i=function(t){!Ct(t)&&$t(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},a=t.matched.length-1,s=o.matched.length-1;if(_(t,o)&&a===s&&t.matched[a]===o.matched[s])return this.ensureURL(),i(function(t,e){var n=St(t,e,xt.duplicated,'Avoided redundant navigation to current location: "'+t.fullPath+'".');return n.name="NavigationDuplicated",n}(o,t));var c=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=yt&&n;r&&this.listeners.push(ct());var o=function(){var n=t.current,o=Ft(t.base);t.current===y&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ut(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){bt($(r.base+t.fullPath)),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){wt($(r.base+t.fullPath)),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ft(this.base)!==this.current.fullPath){var e=$(this.base+this.current.fullPath);t?bt(e):wt(e)}},e.prototype.getCurrentLocation=function(){return Ft(this.base)},e}(Rt);function Ft(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf($(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var zt=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ft(t);if(!/^\/#/.test(e))return window.location.replace($(t+"/#"+e)),!0}(this.base)||Dt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=yt&&e;n&&this.listeners.push(ct());var r=function(){var e=t.current;Dt()&&t.transitionTo(Ut(),(function(r){n&&ut(t.router,r,e,!0),yt||Vt(r.fullPath)}))},o=yt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){qt(t.fullPath),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Vt(t.fullPath),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ut()!==e&&(t?qt(e):Vt(e))},e.prototype.getCurrentLocation=function(){return Ut()},e}(Rt);function Dt(){var t=Ut();return"/"===t.charAt(0)||(Vt("/"+t),!1)}function Ut(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Bt(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function qt(t){yt?bt(Bt(t)):window.location.hash=t}function Vt(t){yt?wt(Bt(t)):window.location.replace(Bt(t))}var Ht=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Ct(t,xt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Rt),Wt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=tt(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!yt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Nt(this,t.base);break;case"hash":this.history=new zt(this,t.base,this.fallback);break;case"abstract":this.history=new Ht(this,t.base);break;default:0}},Gt={currentRoute:{configurable:!0}};function Qt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Wt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Gt.currentRoute.get=function(){return this.history&&this.history.current},Wt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Nt||n instanceof zt){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;yt&&o&&"fullPath"in t&&ut(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Wt.prototype.beforeEach=function(t){return Qt(this.beforeHooks,t)},Wt.prototype.beforeResolve=function(t){return Qt(this.resolveHooks,t)},Wt.prototype.afterEach=function(t){return Qt(this.afterHooks,t)},Wt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Wt.prototype.onError=function(t){this.history.onError(t)},Wt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Wt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Wt.prototype.go=function(t){this.history.go(t)},Wt.prototype.back=function(){this.go(-1)},Wt.prototype.forward=function(){this.go(1)},Wt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Wt.prototype.resolve=function(t,e,n){var r=W(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?$(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Wt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Wt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Wt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Wt.prototype,Gt),Wt.install=function t(e){if(!t.installed||G!==e){t.installed=!0,G=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",O),e.component("RouterLink",Y);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Wt.version="3.5.2",Wt.isNavigationFailure=Ct,Wt.NavigationFailureType=xt,Wt.START_LOCATION=y,J&&window.Vue&&window.Vue.use(Wt);var Yt=Wt;n(165),n(166),n(167),n(72),n(258),n(61),n(62),n(259);function Kt(t){t.locales&&Object.keys(t.locales).forEach((function(e){t.locales[e].path=e})),Object.freeze(t)}n(134);var Jt=n(52),Xt=(n(176),n(43),n(50),n(265),n(266),{NotFound:function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,521))},Category:function(){return Promise.all([n.e(0),n.e(1),n.e(6)]).then(n.bind(null,522))},Layout:function(){return Promise.all([n.e(0),n.e(1),n.e(3)]).then(n.bind(null,520))},Tag:function(){return Promise.all([n.e(0),n.e(1),n.e(4)]).then(n.bind(null,523))},Tags:function(){return Promise.all([n.e(0),n.e(1),n.e(5)]).then(n.bind(null,524))},TimeLines:function(){return Promise.all([n.e(0),n.e(1),n.e(9)]).then(n.bind(null,525))}}),Zt={"v-5a1b77a6":function(){return n.e(10).then(n.bind(null,526))},"v-7c364b8d":function(){return n.e(11).then(n.bind(null,527))},"v-effb4c26":function(){return n.e(12).then(n.bind(null,528))},"v-21482c2d":function(){return n.e(13).then(n.bind(null,529))},"v-7b669c4d":function(){return n.e(15).then(n.bind(null,530))},"v-6ae798e6":function(){return n.e(14).then(n.bind(null,531))},"v-4fa1a9ed":function(){return n.e(16).then(n.bind(null,532))},"v-5c479aae":function(){return n.e(17).then(n.bind(null,533))},"v-30bc9f8d":function(){return n.e(18).then(n.bind(null,534))},"v-d2c6fb4a":function(){return n.e(19).then(n.bind(null,535))}};function te(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var ee=/-(\w)/g,ne=te((function(t){return t.replace(ee,(function(t,e){return e?e.toUpperCase():""}))})),re=/\B([A-Z])/g,oe=te((function(t){return t.replace(re,"-$1").toLowerCase()})),ie=te((function(t){return t.charAt(0).toUpperCase()+t.slice(1)}));function ae(t,e){if(e)return t(e)?t(e):e.includes("-")?t(ie(ne(e))):t(ie(e))||t(oe(e))}var se=Object.assign({},Xt,Zt),ce=function(t){return se[t]},ue=function(t){return Zt[t]},le=function(t){return Xt[t]},fe=function(t){return i.default.component(t)};function pe(t){return ae(ue,t)}function de(t){return ae(le,t)}function he(t){return ae(ce,t)}function ve(t){return ae(fe,t)}function me(){for(var t=arguments.length,e=new Array(t),n=0;n"})).join("\n "):"",this.$ssrContext.canonicalLink=Oe(this.$canonicalUrl)}var e},mounted:function(){this.currentMetaTags=Object(Jt.a)(document.querySelectorAll("meta")),this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta:function(){document.title=this.$title,document.documentElement.lang=this.$lang;var t=this.getMergedMetaTags();this.currentMetaTags=Se(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return _e()([{name:"description",content:this.$description}],t,this.siteMeta,je)},updateCanonicalLink:function(){ke(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",Oe(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){Se(null,this.currentMetaTags),ke()}};function ke(){var t=document.querySelector("link[rel='canonical']");t&&t.remove()}function Oe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t?''):""}function Se(t,e){if(e&&Object(Jt.a)(e).filter((function(t){return t.parentNode===document.head})).forEach((function(t){return document.head.removeChild(t)})),t)return t.map((function(t){var e=document.createElement("meta");return Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])})),document.head.appendChild(e),e}))}function je(t){for(var e=0,n=["name","property","itemprop"];e=s.parentElement.offsetTop+10&&(!c||r1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==S?-1!==b.indexOf(e)&&v({target:e}):h()},i=function(){if(!_&&O.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(x-t)>k.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(S.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Ae({},k.container,t.container)),t.template){var n=Te(t.template)?t.template:document.querySelector(t.template);e.template=n}return k=Ae({},k,e),b.forEach((function(t){t.dispatchEvent(Le("medium-zoom:update",{detail:{zoom:j}}))})),j},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Ae({},k,e))},u=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,Ie(e))}),[]):b;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(Le("medium-zoom:detach",{detail:{zoom:j}}))})),b=b.filter((function(t){return-1===r.indexOf(t)})),j},f=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),w.push({type:"medium-zoom:"+t,listener:e,options:n}),j},p=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),w=w.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),j},d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(k.container)if(k.container instanceof Object)e=(t=Ae({},t,k.container)).width-t.left-t.right-2*k.margin,n=t.height-t.top-t.bottom-2*k.margin;else{var r=(Te(k.container)?k.container:document.querySelector(k.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,s=r.top;t=Ae({},t,{width:o,height:i,left:a,top:s})}e=e||t.width-2*k.margin,n=n||t.height-2*k.margin;var c=O.zoomedHd||O.original,u=Pe(c)?e:c.naturalWidth||e,l=Pe(c)?n:c.naturalHeight||n,f=c.getBoundingClientRect(),p=f.top,d=f.left,h=f.width,v=f.height,m=Math.min(u,e)/h,g=Math.min(l,n)/v,y=Math.min(m,g),b="scale("+y+") translate3d("+((e-h)/2-d+k.margin+t.left)/y+"px, "+((n-v)/2-p+k.margin+t.top)/y+"px, 0)";O.zoomed.style.transform=b,O.zoomedHd&&(O.zoomedHd.style.transform=b)};return new r((function(t){if(e&&-1===b.indexOf(e))t(j);else{if(O.zoomed)t(j);else{if(e)O.original=e;else{if(!(b.length>0))return void t(j);var r=b;O.original=r[0]}if(O.original.dispatchEvent(Le("medium-zoom:open",{detail:{zoom:j}})),x=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,_=!0,O.zoomed=Me(O.original),document.body.appendChild(S),k.template){var o=Te(k.template)?k.template:document.querySelector(k.template);O.template=document.createElement("div"),O.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(O.template)}if(document.body.appendChild(O.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),O.original.classList.add("medium-zoom-image--hidden"),O.zoomed.classList.add("medium-zoom-image--opened"),O.zoomed.addEventListener("click",h),O.zoomed.addEventListener("transitionend",(function e(){_=!1,O.zoomed.removeEventListener("transitionend",e),O.original.dispatchEvent(Le("medium-zoom:opened",{detail:{zoom:j}})),t(j)})),O.original.getAttribute("data-zoom-src")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("srcset"),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.src=O.zoomed.getAttribute("data-zoom-src"),O.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+O.zoomedHd.src),O.zoomedHd=null,n()};var i=setInterval((function(){O.zoomedHd.complete&&(clearInterval(i),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",h),document.body.appendChild(O.zoomedHd),n())}),10)}else if(O.original.hasAttribute("srcset")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.removeAttribute("loading");var a=O.zoomedHd.addEventListener("load",(function(){O.zoomedHd.removeEventListener("load",a),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",h),document.body.appendChild(O.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!_&&O.original){_=!0,document.body.classList.remove("medium-zoom--opened"),O.zoomed.style.transform="",O.zoomedHd&&(O.zoomedHd.style.transform=""),O.template&&(O.template.style.transition="opacity 150ms",O.template.style.opacity=0),O.original.dispatchEvent(Le("medium-zoom:close",{detail:{zoom:j}})),O.zoomed.addEventListener("transitionend",(function e(){O.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(O.zoomed),O.zoomedHd&&document.body.removeChild(O.zoomedHd),document.body.removeChild(S),O.zoomed.classList.remove("medium-zoom-image--opened"),O.template&&document.body.removeChild(O.template),_=!1,O.zoomed.removeEventListener("transitionend",e),O.original.dispatchEvent(Le("medium-zoom:closed",{detail:{zoom:j}})),O.original=null,O.zoomed=null,O.zoomedHd=null,O.template=null,t(j)}))}else t(j)}))},v=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return O.original?h():d({target:e})},m=function(){return k},g=function(){return b},y=function(){return O.original},b=[],w=[],_=!1,x=0,k=n,O={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?k=e:(e||"string"==typeof e)&&u(e),k=Ae({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},k);var S=Re(k.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var j={open:d,close:h,toggle:v,update:s,clone:c,attach:u,detach:l,on:f,off:p,getOptions:m,getImages:g,getZoomedImage:y};return j},Fe={data:function(){return{zoom:null}},mounted:function(){this.updateZoom()},updated:function(){this.updateZoom()},methods:{updateZoom:function(){var t=this;setTimeout((function(){t.zoom&&t.zoom.detach(),t.zoom=Ne(".theme-reco-content :not(a) > img",void 0)}),1e3)}}},ze=(n(95),n(93)),De=n.n(ze),Ue={mounted:function(){var t=this;De.a.configure({showSpinner:!1}),this.$router.beforeEach((function(t,e,n){t.path===e.path||i.default.component(t.name)||De.a.start(),n()})),this.$router.afterEach((function(){De.a.done(),t.isSidebarOpen=!1}))}},Be=n(225),qe=n.n(Be),Ve=(n(363),[xe,Ce,Fe,Ue,{mounted:function(){qe.a.polyfill()}}]),He={name:"GlobalLayout",computed:{layout:function(){var t=this.getLayout();return ge("layout",t),i.default.component(t)}},methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},We=n(7),Ge=Object(We.a)(He,(function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){var r;switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),(r=t[e]).push.apply(r,Object(Jt.a)(n));break;default:throw new Error("Unknown option name.")}}(Ge,"mixins",Ve);var Qe=[{name:"v-5a1b77a6",path:"/2024/2024-03-22.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-5a1b77a6").then(n)}},{name:"v-7c364b8d",path:"/2024/2024-03-29.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-7c364b8d").then(n)}},{name:"v-effb4c26",path:"/2024/2024-04-07.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-effb4c26").then(n)}},{name:"v-21482c2d",path:"/2024/2024-04-12.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-21482c2d").then(n)}},{name:"v-7b669c4d",path:"/2024/2024-04-28.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-7b669c4d").then(n)}},{name:"v-6ae798e6",path:"/2024/2024-04-19.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-6ae798e6").then(n)}},{name:"v-4fa1a9ed",path:"/2024/2024-05-19.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-4fa1a9ed").then(n)}},{name:"v-5c479aae",path:"/",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-5c479aae").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-30bc9f8d",path:"/about.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-30bc9f8d").then(n)}},{name:"v-d2c6fb4a",path:"/menu.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-d2c6fb4a").then(n)}},{name:"v-b1564aac",path:"/tag/",component:Ge,beforeEnter:function(t,e,n){me("Tags","v-b1564aac").then(n)},meta:{pid:"tags",id:"tags"}},{path:"/tag/index.html",redirect:"/tag/"},{name:"v-ef9325c4",path:"/categories/",component:Ge,beforeEnter:function(t,e,n){me("FrontmatterKey","v-ef9325c4").then(n)},meta:{pid:"categories",id:"categories"}},{path:"/categories/index.html",redirect:"/categories/"},{name:"v-6319eb4e",path:"/timeline/",component:Ge,beforeEnter:function(t,e,n){me("TimeLines","v-6319eb4e").then(n)},meta:{pid:"timeline",id:"timeline"}},{path:"/timeline/index.html",redirect:"/timeline/"},{path:"*",component:Ge}],Ye={title:"每周精选文章合集",description:"精选文章, 每周更新,每周热文,文章合集",base:"/",headTags:[["meta",{name:"viewport",content:"width=device-width,initial-scale=1,user-scalable=no"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["meta",{name:"apple-mobile-web-app-status-bar-style",content:"black"}],["meta",{name:"keywords",content:"draven, blog, 前端, 技术博客, 德莱问"}],["script",{},'var _hmt = _hmt || [];\n (function() {\n var hm = document.createElement("script");\n hm.src = "https://hm.baidu.com/hm.js?f7e6799f17989e184072a05d38820494";\n var s = document.getElementsByTagName("script")[0]; \n s.parentNode.insertBefore(hm, s);\n })();']],pages:[{frontmatter:{},regularPath:"/2024/2024-03-22.html",relativePath:"2024/2024-03-22.md",key:"v-5a1b77a6",path:"/2024/2024-03-22.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-NestJS",slug:"前端-nestjs"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-03-29.html",relativePath:"2024/2024-03-29.md",key:"v-7c364b8d",path:"/2024/2024-03-29.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"前端-NestJS",slug:"前端-nestjs"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-07.html",relativePath:"2024/2024-04-07.md",key:"v-effb4c26",path:"/2024/2024-04-07.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-12.html",relativePath:"2024/2024-04-12.md",key:"v-21482c2d",path:"/2024/2024-04-12.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-28.html",relativePath:"2024/2024-04-28.md",key:"v-7b669c4d",path:"/2024/2024-04-28.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-NPM",slug:"前端-npm"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-19.html",relativePath:"2024/2024-04-19.md",key:"v-6ae798e6",path:"/2024/2024-04-19.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-05-19.html",relativePath:"2024/2024-05-19.md",key:"v-4fa1a9ed",path:"/2024/2024-05-19.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-HarmonyOS",slug:"前端-harmonyos"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{title:"Home",frontmatter:{home:!0,heroImage:"/hero.png",heroImageStyle:{maxHeight:"200px",maxWidth:"100%",display:"block",margin:"6rem auto 1.5rem",borderRadius:"5px",boxShadow:"0 5px 18px rgba(0,0,0,0.2)"},actionText:"开始 →",actionLink:"/menu",features:[{title:"质量优先",details:"各大技术社区每周精选优质文章"},{title:"文章合集",details:"收录历史精选文章,不再遗忘"},{title:"每周更新",details:"每周进行收集,发布"}]},regularPath:"/",relativePath:"README.md",key:"v-5c479aae",path:"/"},{title:"关于我",frontmatter:{title:"关于我"},regularPath:"/about.html",relativePath:"about.md",key:"v-30bc9f8d",path:"/about.html"},{title:"目录",frontmatter:{title:"目录"},regularPath:"/menu.html",relativePath:"menu.md",key:"v-d2c6fb4a",path:"/menu.html",headers:[{level:2,title:"2024",slug:"_2024"}]},{frontmatter:{layout:"Tags",title:"Tags"},regularPath:"/tag/",key:"v-b1564aac",path:"/tag/"},{frontmatter:{layout:"FrontmatterKey",title:"Categories"},regularPath:"/categories/",key:"v-ef9325c4",path:"/categories/"},{frontmatter:{layout:"TimeLines",title:"Timeline"},regularPath:"/timeline/",key:"v-6319eb4e",path:"/timeline/"}],themeConfig:{author:"dravenwu",startYear:"2021",valineConfig:{appId:"j2HkS1t6CpVpw4mzhvpRyVQA-gzGzoHsz",appKey:"i5YI6RXIUCeVja0t1DQjphDI",meta:["nick","mail"],requiredFields:["mail"]},nav:[{text:"文章列表",link:"/menu.html",icon:"reco-menu"},{text:"关于我",link:"/about.html",icon:"reco-account"},{text:"掘金",link:"https://juejin.cn/user/1732486056921614",icon:"reco-juejin"},{text:"GitHub",link:"https://github.com/dravenww/curated-article",icon:"reco-github"},{text:"工程化模板",items:[{text:"vite|element-ui|Vue2",link:"https://github.com/tnfe/vite-vue2-pro"},{text:"vite|antd|react",link:"https://github.com/tnfe/vite-concent-pro"},{text:"webpack|react|concent",link:"https://github.com/tnfe/concent-pro"}],icon:"reco-github"}],displayAllHeaders:!0,sidebar:"auto",sidebarDepth:2}},Ke=(n(51),n(231),n(232),n(70),n(233),n(66)),Je={computed:{$recoPosts:function(){var t=this.$site.pages;return t=Object(Ke.a)(t,!1),Object(Ke.c)(t),t},$recoPostsForTimeline:function(){var t=this.$recoPosts,e={},n=[];t=Object(Ke.a)(t,!0),this.pages=0==t.length?[]:t;for(var r=0,o=t.length;r-1)&&([o,i].indexOf("auto")>-1&&a.length>0||[e,n].indexOf("auto")>-1&&a.length>0)}}};function Xe(t,e){t=function(t){var e=new Date(t).toJSON();return new Date(+new Date(e)+288e5).toISOString().replace(/T/g," ").replace(/\.[\d]{3}Z/,"").replace(/-/g,"/")}(t);var n=new Date(t),r=n.getFullYear(),o=n.getMonth()+1,i=n.getDate();return"year"==e?r:"".concat(o,"-").concat(i)}var Ze=n(8),tn={all:"全部",article:"文章",tag:"标签",category:"分类",friendLink:"友情链接",timeLine:"时间轴",timeLineMsg:"昨日重现!"},en={all:"全部",article:"文章",tag:"標簽",category:"分類",friendLink:"友情鏈接",timeLine:"時間軸",timeLineMsg:"昨日重現!"},nn={all:"All",article:"Articles",tag:"Tags",category:"Categories",friendLink:"Friend Links",timeLine:"TimeLine",timeLineMsg:"Yesterday Once More!"},rn={all:"全部",article:"文章",tag:"ラベル",category:"分類",friendLink:"友情リンク",timeLine:"タイムライン",timeLineMsg:"昨日また!"},on={all:"전체",article:"글",tag:"태그",category:"분류",friendLink:"링크 참조",timeLine:"타임 라인",timeLineMsg:"어제 또!"},an={all:"Todas",article:"Artículos",tag:"Etiquetas",category:"Categorías",friendLink:"Páginas amigas",timeLine:"Cronología",timeLineMsg:"¡Ayer otra vez!"},sn={computed:{$recoLocales:function(){var t=this.$themeLocaleConfig.recoLocales||{};return/^zh\-(CN|SG)$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},tn),t):/^zh\-(HK|MO|TW)$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},en),t):/^ja\-JP$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},rn),t):/^ko\-KR$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},on),t):/^es(\-[A-Z]+)?$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},an),t):Object(Ze.a)(Object(Ze.a)({},nn),t)}}},cn=n(27),un=n(71),ln=n(129);n(373);i.default.component("Badge",(function(){return Promise.all([n.e(0),n.e(8)]).then(n.bind(null,536))}));n(374);var fn={name:"BackToTop",data:function(){return{visible:!1,customStyle:{right:"1rem",bottom:"6rem",width:"2.5rem",height:"2.5rem","border-radius":".25rem","line-height":"2.5rem"},visibilityHeight:400}},mounted:function(){window.addEventListener("scroll",this.throttle(this.handleScroll,500))},beforeDestroy:function(){window.removeEventListener("scroll",this.throttle(this.handleScroll,500))},methods:{handleScroll:function(){this.visible=window.pageYOffset>this.visibilityHeight},backToTop:function(){window.scrollTo(0,0)},throttle:function(t,e){var n=null,r=Date.now();return function(){var o=Date.now(),i=e-(o-r),a=this,s=arguments;clearTimeout(n),i<=0?(t.apply(a,s),r=Date.now()):n=setTimeout(t,i)}}}},pn=(n(375),Object(We.a)(fn,(function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:this.visible,expression:"visible"}],staticClass:"back-to-ceiling",style:this.customStyle,on:{click:this.backToTop}},[e("svg",{staticClass:"icon",attrs:{t:"1574745035067",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"5404"}},[e("path",{attrs:{d:"M526.60727968 10.90185116a27.675 27.675 0 0 0-29.21455937 0c-131.36607665 82.28402758-218.69155461 228.01873535-218.69155402 394.07834331a462.20625001 462.20625001 0 0 0 5.36959153 69.94390903c1.00431239 6.55289093-0.34802892 13.13561351-3.76865779 18.80351572-32.63518765 54.11355614-51.75690182 118.55860487-51.7569018 187.94566865a371.06718723 371.06718723 0 0 0 11.50484808 91.98906777c6.53300375 25.50556257 41.68394495 28.14064038 52.69160883 4.22606766 17.37162448-37.73630017 42.14135425-72.50938081 72.80769204-103.21549295 2.18761121 3.04276886 4.15646224 6.24463696 6.40373557 9.22774369a1871.4375 1871.4375 0 0 0 140.04691725 5.34970492 1866.36093723 1866.36093723 0 0 0 140.04691723-5.34970492c2.24727335-2.98310674 4.21612437-6.18497483 6.3937923-9.2178004 30.66633723 30.70611158 55.4360664 65.4791928 72.80769147 103.21549355 11.00766384 23.91457269 46.15860503 21.27949489 52.69160879-4.22606768a371.15156223 371.15156223 0 0 0 11.514792-91.99901164c0-69.36717486-19.13165746-133.82216804-51.75690182-187.92578088-3.42062944-5.66790279-4.76302748-12.26056868-3.76865837-18.80351632a462.20625001 462.20625001 0 0 0 5.36959269-69.943909c-0.00994388-166.08943902-87.32547796-311.81420293-218.6915546-394.09823051zM605.93803103 357.87693858a93.93749974 93.93749974 0 1 1-187.89594924 6.1e-7 93.93749974 93.93749974 0 0 1 187.89594924-6.1e-7z","p-id":"5405"}}),e("path",{attrs:{d:"M429.50777625 765.63860547C429.50777625 803.39355007 466.44236686 1000.39046097 512.00932183 1000.39046097c45.56695499 0 82.4922232-197.00623328 82.5015456-234.7518555 0-37.75494459-36.9345906-68.35043303-82.4922232-68.34111062-45.57627738-0.00932239-82.52019037 30.59548842-82.51086798 68.34111062z","p-id":"5406"}})])])])}),[],!1,null,"c6073ba8",null).exports),dn=(n(376),Object(We.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"loader-wrapper"}},[n("div",{staticClass:"loader-main"},t._l(4,(function(t){return n("div",{key:"out"+t})})),0),t._v(" "),t.$frontmatter.home?n("h3",{staticClass:"title"},[t._v(t._s(t.$site.title||t.$localeConfig.title))]):t._e(),t._v(" "),t.$frontmatter.home?n("p",{staticClass:"description"},[t._v(t._s(t.$site.description||t.$localeConfig.description))]):t._e()])}),[],!1,null,"d48f4d20",null).exports),hn=(n(377),n(229),{prev:"上一页",next:"下一页",go:"前往",jump:"跳转至"}),vn={prev:"上壹頁",next:"下壹頁",go:"前往",jump:"跳轉至"},mn={prev:"Prev",next:"Next",go:"Go",jump:"Jump To"},gn={prev:"前のページ",next:"次のページ",go:"へ",jump:"ジャンプ"},yn={prev:"이전 페이지",next:"다음 페이지",go:"행",jump:"건너뛰기"};var bn={data:function(){return{changePage:"",pageSize:10}},props:{total:{type:Number,default:10},perPage:{type:Number,default:10},currentPage:{type:Number,default:1}},computed:{pages:function(){var t=this.pageSize||this.perPage;return Math.ceil(this.total/t)},show:function(){return this.pages&&1!=this.pages},efont:function(){return!(this.pages<=7)&&this.currentPage>5},indexs:function(){var t=1,e=this.pages,n=[];for(this.pages>=7&&(this.currentPage>5&&this.currentPage1&&this.emit(--t)},goNext:function(){var t=this.currentPage;t0?this.emit(e):alert("请输入大于0,并且小于".concat(this.pages,"的页码!"))},emit:function(t){this.$emit("getCurrentPage",t)}}},wn=(n(379),Object(We.a)(bn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"show"}],staticClass:"pagation"},[n("div",{staticClass:"pagation-list"},[n("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage>1,expression:"currentPage > 1"}],staticClass:"jump",attrs:{unselectable:"on"},on:{click:t.goPrev}},[t._v(t._s(t.pagationLocales.prev))]),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.efont,expression:"efont"}],staticClass:"jump",on:{click:function(e){return t.jumpPage(1)}}},[t._v("1")]),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.efont,expression:"efont"}],staticClass:"ellipsis"},[t._v("...")]),t._v(" "),t._l(t.indexs,(function(e){return n("span",{key:e,staticClass:"jump",class:{bgprimary:t.currentPage==e},on:{click:function(n){return t.jumpPage(e)}}},[t._v(t._s(e))])})),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.efont&&t.currentPageObject(In.stringify)(t),Mn=(t,e)=>`${t}${Object(In.stringify)(e,{addQueryPrefix:!0})}`,Ln=(t,e)=>`${t.replace(/\/$/,"")}/${e.replace(/^\//,"")}`;var Nn=n(226),Fn=n.n(Nn);const zn=t=>Fn()(t,"YYYY-MM-DD HH:mm:ss"),Dn=t=>(t.split("#")[0]||"").split("?")[0]||"",Un=t=>Object(In.parse)(t,{ignoreQueryPrefix:!0}) +var u=window.localStorage;u=function(t){var e="_Is_Incognit";try{t.setItem(e,"yes")}catch(e){if("QuotaExceededError"===e.name){var n=function(){};t.__proto__={setItem:n,getItem:n,removeItem:n,clear:n}}}finally{"yes"===t.getItem(e)&&t.removeItem(e)}return t}(u),s.prototype={set:function(t,e){if(t&&!r(t))u.setItem(t,function(t){return void 0===t||"function"==typeof t?t+"":JSON.stringify(t)}(e));else if(r(t))for(var n in t)this.set(n,t[n]);return this},get:function(t){if(!t){var e={};return this.forEach((function(t,n){return e[t]=n})),e}if("?"===t.charAt(0))return this.has(t.substr(1));var n=arguments;if(n.length>1){for(var r={},i=0,a=n.length;i-1&&(n[e[r]]=this.get(e[r]));return n}};var l=null;for(var f in s.prototype)c[f]=s.prototype[f];e.default=c},function(t,e,n){"use strict";var r=n(12),o=n(9),i=n(11),a=n(13),s=n(49),c=r(a());o(c,{getPolyfill:a,implementation:i,shim:s}),t.exports=c},function(t,e,n){"use strict";var r=n(1),o=r("%String%"),i=r("%TypeError%");t.exports=function(t){if("symbol"==typeof t)throw new i("Cannot convert a Symbol value to a string");return o(t)}},function(t,e,n){"use strict";var r=n(1)("%TypeError%");t.exports=function(t,e){if(null==t)throw new r(e||"Cannot call method on "+t);return t}},function(t,e,n){"use strict";var r=n(1),o=n(12),i=o(r("String.prototype.indexOf"));t.exports=function(t,e){var n=r(t,!!e);return"function"==typeof n&&i(t,".prototype.")?o(n):n}},function(t,e,n){"use strict";(function(e){var r=e.Symbol,o=n(48);t.exports=function(){return"function"==typeof r&&"function"==typeof Symbol&&"symbol"==typeof r("foo")&&"symbol"==typeof Symbol("bar")&&o()}}).call(e,n(14))},function(t,e,n){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),n=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var r=Object.getOwnPropertySymbols(t);if(1!==r.length||r[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},function(t,e,n){"use strict";var r=n(9),o=n(13);t.exports=function(){var t=o();return r(String.prototype,{trim:t},{trim:function(){return String.prototype.trim!==t}}),t}},function(t,e,n){"use strict";(function(e){var n=function(){};if("production"!==e.env.NODE_ENV){var r=function(t,e){var n=arguments.length;e=new Array(n>1?n-1:0);for(var r=1;r2?o-2:0);for(var i=2;i";var y=function(t){var e=l.spaceIndex(t);if(-1===e)return{html:"",closing:"/"===t[t.length-2]};var n="/"===(t=l.trim(t.slice(e+1,-1)))[t.length-1];return n&&(t=l.trim(t.slice(0,-1))),{html:t,closing:n}}(c),b=n[a],w=u(y.html,(function(t,e){var n,o=-1!==l.indexOf(b,t);return r(n=s(a,t,e,o))?o?(e=p(a,t,e,h))?t+'="'+e+'"':t:r(n=f(a,t,e,o))?void 0:n:n}));return c="<"+a,w&&(c+=" "+w),y.closing&&(c+=" /"),c+">"}return r(m=i(a,c,g))?d(c):m}),d);return v&&(m=v.remove(m)),m},t.exports=o},function(t,e){t.exports={smile:"e3/2018new_weixioa02_org.png",lovely:"09/2018new_keai_org.png",happy:"1e/2018new_taikaixin_org.png",clap:"6e/2018new_guzhang_thumb.png",whee:"33/2018new_xixi_thumb.png",haha:"8f/2018new_haha_thumb.png","laugh and cry":"4a/2018new_xiaoku_thumb.png",wink:"43/2018new_jiyan_org.png",greddy:"fa/2018new_chanzui_org.png",awkward:"a3/2018new_heixian_thumb.png",sweat:"28/2018new_han_org.png","pick nose":"9a/2018new_wabi_thumb.png",hum:"7c/2018new_heng_thumb.png",angry:"f6/2018new_nu_thumb.png",grievance:"a5/2018new_weiqu_thumb.png",poor:"96/2018new_kelian_org.png",disappoint:"aa/2018new_shiwang_thumb.png",sad:"ee/2018new_beishang_org.png",tear:"6e/2018new_leimu_org.png","no way":"83/2018new_kuxiao_org.png",shy:"c1/2018new_haixiu_org.png",dirt:"10/2018new_wu_thumb.png","love you":"f6/2018new_aini_org.png",kiss:"2c/2018new_qinqin_thumb.png",amorousness:"9d/2018new_huaxin_org.png",longing:"c9/2018new_chongjing_org.png",desire:"3e/2018new_tianping_thumb.png","bad laugh":"4d/2018new_huaixiao_org.png",blackness:"9e/2018new_yinxian_org.png","laugh without word":"2d/2018new_xiaoerbuyu_org.png",titter:"71/2018new_touxiao_org.png",cool:"c4/2018new_ku_org.png","not easy":"aa/2018new_bingbujiandan_thumb.png",think:"30/2018new_sikao_org.png",question:"b8/2018new_ningwen_org.png","no idea":"2a/2018new_wenhao_thumb.png",dizzy:"07/2018new_yun_thumb.png",bomb:"a2/2018new_shuai_thumb.png",bone:"a1/2018new_kulou_thumb.png","be quiet":"b0/2018new_xu_org.png","shut up":"62/2018new_bizui_org.png",stupid:"dd/2018new_shayan_org.png","surprise ":"49/2018new_chijing_org.png",vomit:"08/2018new_tu_org.png",cold:"40/2018new_kouzhao_thumb.png",sick:"3b/2018new_shengbing_thumb.png",bye:"fd/2018new_baibai_thumb.png","look down on":"da/2018new_bishi_org.png","white eye":"ef/2018new_landelini_org.png","left hum":"43/2018new_zuohengheng_thumb.png","right hum":"c1/2018new_youhengheng_thumb.png",crazy:"17/2018new_zhuakuang_org.png","scold ":"87/2018new_zhouma_thumb.png","hit on face":"cb/2018new_dalian_org.png",wow:"ae/2018new_ding_org.png",fan:"86/2018new_hufen02_org.png",money:"a2/2018new_qian_thumb.png",yawn:"55/2018new_dahaqian_org.png",sleepy:"3c/2018new_kun_thumb.png",sleep:"e2/2018new_shuijiao_thumb.png","watermelon ":"01/2018new_chigua_thumb.png",doge:"a1/2018new_doge02_org.png",dog:"22/2018new_erha_org.png",cat:"7b/2018new_miaomiao_thumb.png",thumb:"e6/2018new_zan_org.png",good:"8a/2018new_good_org.png",ok:"45/2018new_ok_org.png",yeah:"29/2018new_ye_thumb.png","shack hand":"e9/2018new_woshou_thumb.png",bow:"e7/2018new_zuoyi_org.png",come:"42/2018new_guolai_thumb.png",punch:"86/2018new_quantou_thumb.png"}},function(t,e){t.exports={nick:"NickName",mail:"E-Mail",link:"Website(http://)",nickFail:"NickName cannot be less than 3 bytes.",mailFail:"Please confirm your email address.",sofa:"No comment yet.",submit:"Submit",reply:"Reply",cancelReply:"Cancel reply",comments:"Comments",cancel:"Cancel",confirm:"Confirm",continue:"Continue",more:"Load More...",preview:"Preview",emoji:"Emoji",expand:"See more....",seconds:"seconds ago",minutes:"minutes ago",hours:"hours ago",days:"days ago",now:"just now",uploading:"Uploading ...",uploadDone:"Upload completed!",busy:"Submit is busy, please wait...","code-98":"Valine initialization failed, please check your version of av-min.js.","code-99":"Valine initialization failed, Please check the `el` element in the init method.","code-100":"Valine initialization failed, Please check your appId and appKey.","code-140":"The total number of API calls today has exceeded the development version limit.","code-401":"Unauthorized operation, Please check your appId and appKey.","code-403":"Access denied by API domain white list, Please check your security domain."}},function(t,e){t.exports={nick:"ニックネーム",mail:"メールアドレス",link:"サイト(http://)",nickFail:"3バイト以上のニックネームをご入力ください.",mailFail:"メールアドレスをご確認ください.",sofa:"コメントしましょう~",submit:"提出する",reply:"返信する",cancelReply:"キャンセル",comments:"コメント",cancel:"キャンセル",confirm:"確認する",continue:"继续",more:"さらに読み込む...",preview:"プレビュー",emoji:"絵文字",expand:"もっと見る",seconds:"秒前",minutes:"分前",hours:"時間前",days:"日前",now:"たっだ今",uploading:"アップロード中...",uploadDone:"アップロードが完了しました!",busy:"20 秒間隔で提出してください ...","code-98":"ロードエラーです。av-min.js のバージョンを確認してください.","code-99":"ロードエラーです。initにある`el`エレメントを確認ください.","code-100":"ロードエラーです。AppIdとAppKeyを確認ください.","code-140":"今日のAPIコールの総数が開発バージョンの上限を超えた.","code-401":"権限が制限されています。AppIdとAppKeyを確認ください.","code-403":"アクセスがAPIなどに制限されました、ドメイン名のセキュリティ設定を確認ください"}},function(t,e){t.exports={nick:"昵称",mail:"邮箱",link:"网址(http://)",nickFail:"昵称不能少于3个字符",mailFail:"请填写正确的邮件地址",sofa:"来发评论吧~",submit:"提交",reply:"回复",cancelReply:"取消回复",comments:"评论",cancel:"取消",confirm:"确认",continue:"继续",more:"加载更多...",preview:"预览",emoji:"表情",expand:"查看更多...",seconds:"秒前",minutes:"分钟前",hours:"小时前",days:"天前",now:"刚刚",uploading:"正在传输...",uploadDone:"传输完成!",busy:"操作频繁,请稍候再试...","code-98":"Valine 初始化失败,请检查 av-min.js 版本","code-99":"Valine 初始化失败,请检查init中的`el`元素.","code-100":"Valine 初始化失败,请检查你的AppId和AppKey.","code-140":"今日 API 调用总次数已超过开发版限制.","code-401":"未经授权的操作,请检查你的AppId和AppKey.","code-403":"访问被API域名白名单拒绝,请检查你的安全域名设置."}},function(t,e){t.exports={nick:"暱稱",mail:"郵箱",link:"網址(http://)",nickFail:"昵稱不能少於3個字符",mailFail:"請填寫正確的郵件地址",sofa:"來發評論吧~",submit:"提交",reply:"回覆",cancelReply:"取消回覆",comments:"評論",cancel:"取消",confirm:"確認",continue:"繼續",more:"加載更多...",preview:"預覽",emoji:"表情",expand:"查看更多...",seconds:"秒前",minutes:"分鐘前",hours:"小時前",days:"天前",now:"剛剛",uploading:"正在上傳...",uploadDone:"上傳完成!",busy:"操作頻繁,請稍候再試...","code-98":"Valine 初始化失敗,請檢查 av-min.js 版本","code-99":"Valine 初始化失敗,請檢查init中的`el`元素.","code-100":"Valine 初始化失敗,請檢查你的AppId和AppKey.","code-140":"今日 API 調用總次數已超過開發版限制.","code-401":"未經授權的操作,請檢查你的AppId和AppKey.","code-403":"訪問被API域名白名單拒絕,請檢查你的安全域名設置."}},function(t,e,n){var r=n(59);"string"==typeof r&&(r=[[t.i,r,""]]);var o={transform:void 0};n(61)(r,o),r.locals&&(t.exports=r.locals)},function(t,e,n){(t.exports=n(60)(!1)).push([t.i,'.v[data-class=v]{font-size:16px;text-align:left}.v[data-class=v] *{-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.75}.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#555}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#b3b3b3}.v[data-class=v] .text-right{text-align:right}.v[data-class=v] .text-center{text-align:center}.v[data-class=v] img{max-width:100%;border:none}.v[data-class=v] hr{margin:.825em 0;border-color:#f6f6f6;border-style:dashed}.v[data-class=v].hide-avatar .vimg{display:none}.v[data-class=v] a{position:relative;cursor:pointer;color:#1abc9c;text-decoration:none;display:inline-block}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] code,.v[data-class=v] pre{background-color:#f8f8f8;padding:.2em .4em;border-radius:3px;font-size:85%;margin:0}.v[data-class=v] pre{padding:10px;overflow:auto;line-height:1.45}.v[data-class=v] pre code{padding:0;background:transparent;white-space:pre-wrap;word-break:keep-all}.v[data-class=v] blockquote{color:#666;margin:.5em 0;padding:0 0 0 1em;border-left:8px solid hsla(0,0%,93%,.5)}.v[data-class=v] .vinput{border:none;resize:none;outline:none;padding:10px 5px;max-width:100%;font-size:.775em}.v[data-class=v] input[type=checkbox],.v[data-class=v] input[type=radio]{display:inline-block;vertical-align:middle;margin-top:-2px}.v[data-class=v] .vicon{cursor:pointer;display:inline-block;overflow:hidden;fill:#555;vertical-align:middle}.v[data-class=v] .vicon+.vicon{margin-left:10px}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vrow{font-size:0;padding:10px 0}.v[data-class=v] .vrow .vcol{display:inline-block;vertical-align:middle;font-size:14px}.v[data-class=v] .vrow .vcol.vcol-20{width:20%}.v[data-class=v] .vrow .vcol.vcol-30{width:30%}.v[data-class=v] .vrow .vcol.vcol-40{width:40%}.v[data-class=v] .vrow .vcol.vcol-50{width:50%}.v[data-class=v] .vrow .vcol.vcol-60{width:60%}.v[data-class=v] .vrow .vcol.vcol-70{width:70%}.v[data-class=v] .vrow .vcol.vcol-80{width:80%}.v[data-class=v] .vrow .vcol.vctrl{font-size:12px}.v[data-class=v] .emoji,.v[data-class=v] .vemoji{max-width:25px;vertical-align:middle;margin:0 1px;display:inline-block}.v[data-class=v] .vwrap{border:1px solid #f0f0f0;border-radius:4px;margin-bottom:10px;overflow:hidden;position:relative;padding:10px}.v[data-class=v] .vwrap input{background:transparent}.v[data-class=v] .vwrap .vedit{position:relative;padding-top:10px}.v[data-class=v] .vwrap .cancel-reply-btn{position:absolute;right:5px;top:5px;cursor:pointer}.v[data-class=v] .vwrap .vemojis{display:none;font-size:18px;max-height:145px;overflow:auto;padding-bottom:10px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vemojis i{font-style:normal;padding-top:7px;width:36px;cursor:pointer;text-align:center;display:inline-block;vertical-align:middle}.v[data-class=v] .vwrap .vpreview{padding:7px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v[data-class=v] .vwrap .vheader .vinput{width:33.33%;border-bottom:1px dashed #dedede}.v[data-class=v] .vwrap .vheader.item2 .vinput{width:50%}.v[data-class=v] .vwrap .vheader.item1 .vinput{width:100%}.v[data-class=v] .vwrap .vheader .vinput:focus{border-bottom-color:#eb5055}@media screen and (max-width:520px){.v[data-class=v] .vwrap .vheader.item2 .vinput,.v[data-class=v] .vwrap .vheader .vinput{width:100%}}.v[data-class=v] .vpower{color:#999;font-size:.75em;padding:.5em 0}.v[data-class=v] .vpower a{font-size:.75em}.v[data-class=v] .vcount{padding:5px;font-weight:600;font-size:1.25em}.v[data-class=v] ol,.v[data-class=v] ul{padding:0;margin-left:1.25em}.v[data-class=v] .txt-center{text-align:center}.v[data-class=v] .txt-right{text-align:right}.v[data-class=v] .pd5{padding:5px}.v[data-class=v] .pd10{padding:10px}.v[data-class=v] .veditor{width:100%;min-height:8.75em;font-size:.875em;background:transparent;resize:vertical;-webkit-transition:all .25s ease;transition:all .25s ease}.v[data-class=v] .vbtn{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#555;border:1px solid #ededed;border-radius:.3em;display:inline-block;background:transparent;margin-bottom:0;font-weight:400;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;white-space:nowrap;padding:.5em 1.25em;font-size:.875em;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.v[data-class=v] .vbtn+.vbtn{margin-left:1.25em}.v[data-class=v] .vbtn:active,.v[data-class=v] .vbtn:hover{color:#3090e4;border-color:#3090e4}.v[data-class=v] .vbtn:disabled{border-color:#e1e1e1;color:#e1e1e1;background-color:#fdfafa;cursor:not-allowed}.v[data-class=v] .vempty{padding:1.25em;text-align:center;color:#555;overflow:auto}.v[data-class=v] .vsys{display:inline-block;padding:.2em .5em;font-size:.75em;border-radius:.2em;margin-right:.3em}@media screen and (max-width:520px){.v[data-class=v] .vsys{display:none}}.v[data-class=v] .vcards{width:100%}.v[data-class=v] .vcards .vcard{padding-top:1.25em;position:relative;display:block}.v[data-class=v] .vcards .vcard:after{content:"";clear:both;display:block}.v[data-class=v] .vcards .vcard .vimg{width:3.125em;height:3.125em;float:left;border-radius:50%;margin-right:.7525em;border:1px solid #f5f5f5;padding:.125em}@media screen and (max-width:720px){.v[data-class=v] .vcards .vcard .vimg{width:2.5em;height:2.5em}}.v[data-class=v] .vcards .vcard .vhead{line-height:1.5;margin-top:0}.v[data-class=v] .vcards .vcard .vhead .vnick{position:relative;font-size:.875em;font-weight:500;margin-right:.875em;cursor:pointer;text-decoration:none;display:inline-block}.v[data-class=v] .vcards .vcard .vhead .vnick:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vh{overflow:hidden;padding-bottom:.5em;border-bottom:1px dashed #f5f5f5}.v[data-class=v] .vcards .vcard .vh .vtime{font-size:.75em;margin-right:.875em}.v[data-class=v] .vcards .vcard .vh .vmeta{line-height:1;position:relative}.v[data-class=v] .vcards .vcard .vh .vmeta .vat{font-size:.8125em;color:#ef2f11;cursor:pointer;float:right}.v[data-class=v] .vcards .vcard:last-child .vh{border-bottom:none}.v[data-class=v] .vcards .vcard .vcontent{word-wrap:break-word;word-break:break-all;font-size:.875em;line-height:2;position:relative;margin-bottom:.75em;padding-top:.625em}.v[data-class=v] .vcards .vcard .vcontent.expand{cursor:pointer;max-height:8em;overflow:hidden}.v[data-class=v] .vcards .vcard .vcontent.expand:before{display:block;content:"";position:absolute;width:100%;left:0;top:0;bottom:3.15em;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(hsla(0,0%,100%,.9)));background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.9));z-index:999}.v[data-class=v] .vcards .vcard .vcontent.expand:after{display:block;content:attr(data-expand);text-align:center;color:#828586;position:absolute;width:100%;height:3.15em;line-height:3.15em;left:0;bottom:0;z-index:999;background:hsla(0,0%,100%,.9)}.v[data-class=v] .vcards .vcard .vquote{padding-left:1em;border-left:1px dashed hsla(0,0%,93%,.5)}.v[data-class=v] .vcards .vcard .vquote .vimg{width:2.225em;height:2.225em}.v[data-class=v] .vpage .vmore{margin:1em 0}.v[data-class=v] .clear{content:"";display:block;clear:both}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes pulse{50%{background:#dcdcdc}}@keyframes pulse{50%{background:#dcdcdc}}.v[data-class=v] .vspinner{width:22px;height:22px;display:inline-block;border:6px double #a0a0a0;border-top-color:transparent;border-bottom-color:transparent;border-radius:50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear;position:relative;vertical-align:middle;margin:0 5px}.dark .v[data-class=v] .status-bar,.dark .v[data-class=v] .veditor,.dark .v[data-class=v] .vinput,.dark .v[data-class=v] p,.dark .v[data-class=v] pre code,.night .v[data-class=v] .status-bar,.night .v[data-class=v] .veditor,.night .v[data-class=v] .vinput,.night .v[data-class=v] p,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] .status-bar,.theme__dark .v[data-class=v] .veditor,.theme__dark .v[data-class=v] .vinput,.theme__dark .v[data-class=v] p,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] .status-bar,[data-theme=dark] .v[data-class=v] .veditor,[data-theme=dark] .v[data-class=v] .vinput,[data-theme=dark] .v[data-class=v] p,[data-theme=dark] .v[data-class=v] pre code{color:#b2b2b5}.dark .v[data-class=v] .vsys,.dark .v[data-class=v] .vtime,.night .v[data-class=v] .vsys,.night .v[data-class=v] .vtime,.theme__dark .v[data-class=v] .vsys,.theme__dark .v[data-class=v] .vtime,[data-theme=dark] .v[data-class=v] .vsys,[data-theme=dark] .v[data-class=v] .vtime{color:#929298}.dark .v[data-class=v] code,.dark .v[data-class=v] pre,.dark .v[data-class=v] pre code,.night .v[data-class=v] code,.night .v[data-class=v] pre,.night .v[data-class=v] pre code,.theme__dark .v[data-class=v] code,.theme__dark .v[data-class=v] pre,.theme__dark .v[data-class=v] pre code,[data-theme=dark] .v[data-class=v] code,[data-theme=dark] .v[data-class=v] pre,[data-theme=dark] .v[data-class=v] pre code{color:#929298;background-color:#151414}.dark .v[data-class=v] .vwrap,.night .v[data-class=v] .vwrap,.theme__dark .v[data-class=v] .vwrap,[data-theme=dark] .v[data-class=v] .vwrap{border-color:#b2b2b5}.dark .v[data-class=v] .vicon,.night .v[data-class=v] .vicon,.theme__dark .v[data-class=v] .vicon,[data-theme=dark] .v[data-class=v] .vicon{fill:#b2b2b5}.dark .v[data-class=v] .vicon.actived,.night .v[data-class=v] .vicon.actived,.theme__dark .v[data-class=v] .vicon.actived,[data-theme=dark] .v[data-class=v] .vicon.actived{fill:#66b1ff}.dark .v[data-class=v] .vbtn,.night .v[data-class=v] .vbtn,.theme__dark .v[data-class=v] .vbtn,[data-theme=dark] .v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.dark .v[data-class=v] .vbtn:hover,.night .v[data-class=v] .vbtn:hover,.theme__dark .v[data-class=v] .vbtn:hover,[data-theme=dark] .v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.dark .v[data-class=v] a:hover,.night .v[data-class=v] a:hover,.theme__dark .v[data-class=v] a:hover,[data-theme=dark] .v[data-class=v] a:hover{color:#d7191a}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,.night .v[data-class=v] .vcards .vcard .vcontent.expand:before,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:before,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,.night .v[data-class=v] .vcards .vcard .vcontent.expand:after,.theme__dark .v[data-class=v] .vcards .vcard .vcontent.expand:after,[data-theme=dark] .v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}@media (prefers-color-scheme:dark){.v[data-class=v] .status-bar,.v[data-class=v] .veditor,.v[data-class=v] .vinput,.v[data-class=v] p,.v[data-class=v] pre code{color:#b2b2b5}.v[data-class=v] .vsys,.v[data-class=v] .vtime{color:#929298}.v[data-class=v] code,.v[data-class=v] pre,.v[data-class=v] pre code{color:#929298;background-color:#151414}.v[data-class=v] .vwrap{border-color:#b2b2b5}.v[data-class=v] .vicon{fill:#b2b2b5}.v[data-class=v] .vicon.actived{fill:#66b1ff}.v[data-class=v] .vbtn{color:#b2b2b5;border-color:#b2b2b5}.v[data-class=v] .vbtn:hover{color:#66b1ff;border-color:#66b1ff}.v[data-class=v] a:hover{color:#d7191a}.v[data-class=v] .vcards .vcard .vcontent.expand:before{background:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.3)),to(rgba(0,0,0,.7)));background:linear-gradient(180deg,rgba(0,0,0,.3),rgba(0,0,0,.7))}.v[data-class=v] .vcards .vcard .vcontent.expand:after{background:rgba(0,0,0,.7)}}',""])},function(t,e){function n(t,e){var n=t[1]||"",r=t[3];if(!r)return n;if(e&&"function"==typeof btoa){var o=function(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}(r);return[n].concat(r.sources.map((function(t){return"/*# sourceURL="+r.sourceRoot+t+" */"}))).concat([o]).join("\n")}return[n].join("\n")}t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var r=n(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r})).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},o=0;o=0&&b.splice(e,1)}function s(t){var e=document.createElement("style");return t.attrs.type="text/css",u(e,t.attrs),i(t,e),e}function c(t){var e=document.createElement("link");return t.attrs.type="text/css",t.attrs.rel="stylesheet",u(e,t.attrs),i(t,e),e}function u(t,e){Object.keys(e).forEach((function(n){t.setAttribute(n,e[n])}))}function l(t,e){var n,r,o,i;if(e.transform&&t.css){if(!(i=e.transform(t.css)))return function(){};t.css=i}if(e.singleton){var u=y++;n=g||(g=s(e)),r=f.bind(null,n,u,!1),o=f.bind(null,n,u,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=c(e),r=d.bind(null,n,e),o=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(e),r=p.bind(null,n),o=function(){a(n)});return r(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;r(t=e)}else o()}}function f(t,e,n,r){var o=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=_(e,o);else{var i=document.createTextNode(o),a=t.childNodes;a[e]&&t.removeChild(a[e]),a.length?t.insertBefore(i,a[e]):t.appendChild(i)}}function p(t,e){var n=e.css,r=e.media;if(r&&t.setAttribute("media",r),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}function d(t,e,n){var r=n.css,o=n.sourceMap,i=void 0===e.convertToAbsoluteUrls&&o;(e.convertToAbsoluteUrls||i)&&(r=w(r)),o&&(r+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */");var a=new Blob([r],{type:"text/css"}),s=t.href;t.href=URL.createObjectURL(a),s&&URL.revokeObjectURL(s)}var h={},v=function(t){var e;return function(){return void 0===e&&(e=t.apply(this,arguments)),e}}((function(){return window&&document&&document.all&&!window.atob})),m=function(t){var e={};return function(n){return void 0===e[n]&&(e[n]=t.call(this,n)),e[n]}}((function(t){return document.querySelector(t)})),g=null,y=0,b=[],w=n(62);t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||(e.singleton=v()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var n=o(t,e);return r(n,e),function(t){for(var i=[],a=0;a0?x.join(",")||null:void 0}];else if(c(f))k=f;else{var S=Object.keys(x);k=p?S.sort(p):S}for(var j=0;j0?w+b:""}},function(t,e,n){"use strict";var r=n(125),o=n(388),i=n(390),a=r("%TypeError%"),s=r("%WeakMap%",!0),c=r("%Map%",!0),u=o("WeakMap.prototype.get",!0),l=o("WeakMap.prototype.set",!0),f=o("WeakMap.prototype.has",!0),p=o("Map.prototype.get",!0),d=o("Map.prototype.set",!0),h=o("Map.prototype.has",!0),v=function(t,e){for(var n,r=t;null!==(n=r.next);r=n)if(n.key===e)return r.next=n.next,n.next=t.next,t.next=n,n};t.exports=function(){var t,e,n,r={assert:function(t){if(!r.has(t))throw new a("Side channel does not contain "+i(t))},get:function(r){if(s&&r&&("object"==typeof r||"function"==typeof r)){if(t)return u(t,r)}else if(c){if(e)return p(e,r)}else if(n)return function(t,e){var n=v(t,e);return n&&n.value}(n,r)},has:function(r){if(s&&r&&("object"==typeof r||"function"==typeof r)){if(t)return f(t,r)}else if(c){if(e)return h(e,r)}else if(n)return function(t,e){return!!v(t,e)}(n,r);return!1},set:function(r,o){s&&r&&("object"==typeof r||"function"==typeof r)?(t||(t=new s),l(t,r,o)):c?(e||(e=new c),d(e,r,o)):(n||(n={key:{},next:null}),function(t,e,n){var r=v(t,e);r?r.value=n:t.next={key:e,next:t.next,value:n}}(n,r,o))}};return r}},function(t,e,n){"use strict";var r="undefined"!=typeof Symbol&&Symbol,o=n(385);t.exports=function(){return"function"==typeof r&&("function"==typeof Symbol&&("symbol"==typeof r("foo")&&("symbol"==typeof Symbol("bar")&&o())))}},function(t,e,n){"use strict";t.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var t={},e=Symbol("test"),n=Object(e);if("string"==typeof e)return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(e in t[e]=42,t)return!1;if("function"==typeof Object.keys&&0!==Object.keys(t).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(t).length)return!1;var r=Object.getOwnPropertySymbols(t);if(1!==r.length||r[0]!==e)return!1;if(!Object.prototype.propertyIsEnumerable.call(t,e))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(t,e);if(42!==o.value||!0!==o.enumerable)return!1}return!0}},function(t,e,n){"use strict";var r="Function.prototype.bind called on incompatible ",o=Array.prototype.slice,i=Object.prototype.toString;t.exports=function(t){var e=this;if("function"!=typeof e||"[object Function]"!==i.call(e))throw new TypeError(r+e);for(var n,a=o.call(arguments,1),s=function(){if(this instanceof n){var r=e.apply(this,a.concat(o.call(arguments)));return Object(r)===r?r:this}return e.apply(t,a.concat(o.call(arguments)))},c=Math.max(0,e.length-a.length),u=[],l=0;l-1?o(n):n}},function(t,e,n){"use strict";var r=n(126),o=n(125),i=o("%Function.prototype.apply%"),a=o("%Function.prototype.call%"),s=o("%Reflect.apply%",!0)||r.call(a,i),c=o("%Object.getOwnPropertyDescriptor%",!0),u=o("%Object.defineProperty%",!0),l=o("%Math.max%");if(u)try{u({},"a",{value:1})}catch(t){u=null}t.exports=function(t){var e=s(r,a,arguments);if(c&&u){var n=c(e,"length");n.configurable&&u(e,"length",{value:1+l(0,t.length-(arguments.length-1))})}return e};var f=function(){return s(r,i,arguments)};u?u(t.exports,"apply",{value:f}):t.exports.apply=f},function(t,e,n){var r="function"==typeof Map&&Map.prototype,o=Object.getOwnPropertyDescriptor&&r?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,i=r&&o&&"function"==typeof o.get?o.get:null,a=r&&Map.prototype.forEach,s="function"==typeof Set&&Set.prototype,c=Object.getOwnPropertyDescriptor&&s?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,u=s&&c&&"function"==typeof c.get?c.get:null,l=s&&Set.prototype.forEach,f="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,p="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,d="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,h=Boolean.prototype.valueOf,v=Object.prototype.toString,m=Function.prototype.toString,g=String.prototype.match,y="function"==typeof BigInt?BigInt.prototype.valueOf:null,b=Object.getOwnPropertySymbols,w="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,_="function"==typeof Symbol&&"object"==typeof Symbol.iterator,x=Object.prototype.propertyIsEnumerable,k=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(t){return t.__proto__}:null),O=n(391).custom,S=O&&E(O)?O:null,j="function"==typeof Symbol&&void 0!==Symbol.toStringTag?Symbol.toStringTag:null;function $(t,e,n){var r="double"===(n.quoteStyle||e)?'"':"'";return r+t+r}function C(t){return String(t).replace(/"/g,""")}function A(t){return!("[object Array]"!==I(t)||j&&"object"==typeof t&&j in t)}function E(t){if(_)return t&&"object"==typeof t&&t instanceof Symbol;if("symbol"==typeof t)return!0;if(!t||"object"!=typeof t||!w)return!1;try{return w.call(t),!0}catch(t){}return!1}t.exports=function t(e,n,r,o){var s=n||{};if(P(s,"quoteStyle")&&"single"!==s.quoteStyle&&"double"!==s.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(P(s,"maxStringLength")&&("number"==typeof s.maxStringLength?s.maxStringLength<0&&s.maxStringLength!==1/0:null!==s.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var c=!P(s,"customInspect")||s.customInspect;if("boolean"!=typeof c&&"symbol"!==c)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(P(s,"indent")&&null!==s.indent&&"\t"!==s.indent&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('options "indent" must be "\\t", an integer > 0, or `null`');if(void 0===e)return"undefined";if(null===e)return"null";if("boolean"==typeof e)return e?"true":"false";if("string"==typeof e)return function t(e,n){if(e.length>n.maxStringLength){var r=e.length-n.maxStringLength,o="... "+r+" more character"+(r>1?"s":"");return t(e.slice(0,n.maxStringLength),n)+o}return $(e.replace(/(['\\])/g,"\\$1").replace(/[\x00-\x1f]/g,M),"single",n)}(e,s);if("number"==typeof e)return 0===e?1/0/e>0?"0":"-0":String(e);if("bigint"==typeof e)return String(e)+"n";var v=void 0===s.depth?5:s.depth;if(void 0===r&&(r=0),r>=v&&v>0&&"object"==typeof e)return A(e)?"[Array]":"[Object]";var b=function(t,e){var n;if("\t"===t.indent)n="\t";else{if(!("number"==typeof t.indent&&t.indent>0))return null;n=Array(t.indent+1).join(" ")}return{base:n,prev:Array(e+1).join(n)}}(s,r);if(void 0===o)o=[];else if(R(o,e)>=0)return"[Circular]";function x(e,n,i){if(n&&(o=o.slice()).push(n),i){var a={depth:s.depth};return P(s,"quoteStyle")&&(a.quoteStyle=s.quoteStyle),t(e,a,r+1,o)}return t(e,s,r+1,o)}if("function"==typeof e){var O=function(t){if(t.name)return t.name;var e=g.call(m.call(t),/^function\s*([\w$]+)/);if(e)return e[1];return null}(e),T=D(e,x);return"[Function"+(O?": "+O:" (anonymous)")+"]"+(T.length>0?" { "+T.join(", ")+" }":"")}if(E(e)){var U=_?String(e).replace(/^(Symbol\(.*\))_[^)]*$/,"$1"):w.call(e);return"object"!=typeof e||_?U:L(U)}if(function(t){if(!t||"object"!=typeof t)return!1;if("undefined"!=typeof HTMLElement&&t instanceof HTMLElement)return!0;return"string"==typeof t.nodeName&&"function"==typeof t.getAttribute}(e)){for(var B="<"+String(e.nodeName).toLowerCase(),q=e.attributes||[],V=0;V"}if(A(e)){if(0===e.length)return"[]";var H=D(e,x);return b&&!function(t){for(var e=0;e=0)return!1;return!0}(H)?"["+z(H,b)+"]":"[ "+H.join(", ")+" ]"}if(function(t){return!("[object Error]"!==I(t)||j&&"object"==typeof t&&j in t)}(e)){var W=D(e,x);return 0===W.length?"["+String(e)+"]":"{ ["+String(e)+"] "+W.join(", ")+" }"}if("object"==typeof e&&c){if(S&&"function"==typeof e[S])return e[S]();if("symbol"!==c&&"function"==typeof e.inspect)return e.inspect()}if(function(t){if(!i||!t||"object"!=typeof t)return!1;try{i.call(t);try{u.call(t)}catch(t){return!0}return t instanceof Map}catch(t){}return!1}(e)){var G=[];return a.call(e,(function(t,n){G.push(x(n,e,!0)+" => "+x(t,e))})),F("Map",i.call(e),G,b)}if(function(t){if(!u||!t||"object"!=typeof t)return!1;try{u.call(t);try{i.call(t)}catch(t){return!0}return t instanceof Set}catch(t){}return!1}(e)){var Q=[];return l.call(e,(function(t){Q.push(x(t,e))})),F("Set",u.call(e),Q,b)}if(function(t){if(!f||!t||"object"!=typeof t)return!1;try{f.call(t,f);try{p.call(t,p)}catch(t){return!0}return t instanceof WeakMap}catch(t){}return!1}(e))return N("WeakMap");if(function(t){if(!p||!t||"object"!=typeof t)return!1;try{p.call(t,p);try{f.call(t,f)}catch(t){return!0}return t instanceof WeakSet}catch(t){}return!1}(e))return N("WeakSet");if(function(t){if(!d||!t||"object"!=typeof t)return!1;try{return d.call(t),!0}catch(t){}return!1}(e))return N("WeakRef");if(function(t){return!("[object Number]"!==I(t)||j&&"object"==typeof t&&j in t)}(e))return L(x(Number(e)));if(function(t){if(!t||"object"!=typeof t||!y)return!1;try{return y.call(t),!0}catch(t){}return!1}(e))return L(x(y.call(e)));if(function(t){return!("[object Boolean]"!==I(t)||j&&"object"==typeof t&&j in t)}(e))return L(h.call(e));if(function(t){return!("[object String]"!==I(t)||j&&"object"==typeof t&&j in t)}(e))return L(x(String(e)));if(!function(t){return!("[object Date]"!==I(t)||j&&"object"==typeof t&&j in t)}(e)&&!function(t){return!("[object RegExp]"!==I(t)||j&&"object"==typeof t&&j in t)}(e)){var Y=D(e,x),K=k?k(e)===Object.prototype:e instanceof Object||e.constructor===Object,J=e instanceof Object?"":"null prototype",X=!K&&j&&Object(e)===e&&j in e?I(e).slice(8,-1):J?"Object":"",Z=(K||"function"!=typeof e.constructor?"":e.constructor.name?e.constructor.name+" ":"")+(X||J?"["+[].concat(X||[],J||[]).join(": ")+"] ":"");return 0===Y.length?Z+"{}":b?Z+"{"+z(Y,b)+"}":Z+"{ "+Y.join(", ")+" }"}return String(e)};var T=Object.prototype.hasOwnProperty||function(t){return t in this};function P(t,e){return T.call(t,e)}function I(t){return v.call(t)}function R(t,e){if(t.indexOf)return t.indexOf(e);for(var n=0,r=t.length;n-1?t.split(","):t},u=function(t,e,n,r){if(t){var i=n.allowDots?t.replace(/\.([^.[]+)/g,"[$1]"):t,a=/(\[[^[\]]*])/g,s=n.depth>0&&/(\[[^[\]]*])/.exec(i),u=s?i.slice(0,s.index):i,l=[];if(u){if(!n.plainObjects&&o.call(Object.prototype,u)&&!n.allowPrototypes)return;l.push(u)}for(var f=0;n.depth>0&&null!==(s=a.exec(i))&&f=0;--i){var a,s=t[i];if("[]"===s&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,l=parseInt(u,10);n.parseArrays||""!==u?!isNaN(l)&&s!==u&&String(l)===u&&l>=0&&n.parseArrays&&l<=n.arrayLimit?(a=[])[l]=o:a[u]=o:a={0:o}}o=a}return o}(l,e,n,r)}};t.exports=function(t,e){var n=function(t){if(!t)return a;if(null!==t.decoder&&void 0!==t.decoder&&"function"!=typeof t.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==t.charset&&"utf-8"!==t.charset&&"iso-8859-1"!==t.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var e=void 0===t.charset?a.charset:t.charset;return{allowDots:void 0===t.allowDots?a.allowDots:!!t.allowDots,allowPrototypes:"boolean"==typeof t.allowPrototypes?t.allowPrototypes:a.allowPrototypes,allowSparse:"boolean"==typeof t.allowSparse?t.allowSparse:a.allowSparse,arrayLimit:"number"==typeof t.arrayLimit?t.arrayLimit:a.arrayLimit,charset:e,charsetSentinel:"boolean"==typeof t.charsetSentinel?t.charsetSentinel:a.charsetSentinel,comma:"boolean"==typeof t.comma?t.comma:a.comma,decoder:"function"==typeof t.decoder?t.decoder:a.decoder,delimiter:"string"==typeof t.delimiter||r.isRegExp(t.delimiter)?t.delimiter:a.delimiter,depth:"number"==typeof t.depth||!1===t.depth?+t.depth:a.depth,ignoreQueryPrefix:!0===t.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof t.interpretNumericEntities?t.interpretNumericEntities:a.interpretNumericEntities,parameterLimit:"number"==typeof t.parameterLimit?t.parameterLimit:a.parameterLimit,parseArrays:!1!==t.parseArrays,plainObjects:"boolean"==typeof t.plainObjects?t.plainObjects:a.plainObjects,strictNullHandling:"boolean"==typeof t.strictNullHandling?t.strictNullHandling:a.strictNullHandling}}(e);if(""===t||null==t)return n.plainObjects?Object.create(null):{};for(var l="string"==typeof t?function(t,e){var n,u={},l=e.ignoreQueryPrefix?t.replace(/^\?/,""):t,f=e.parameterLimit===1/0?void 0:e.parameterLimit,p=l.split(e.delimiter,f),d=-1,h=e.charset;if(e.charsetSentinel)for(n=0;n-1&&(m=i(m)?[m]:m),o.call(u,v)?u[v]=r.combine(u[v],m):u[v]=m}return u}(t,n):t,f=n.plainObjects?Object.create(null):{},p=Object.keys(l),d=0;d0?"in "+o:o+" ago":o}}}},function(t,e,n){var r=n(405);t.exports=function(){var t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],e=["January","February","March","April","May","June","July","August","September","October","November","December"],n=["Su","Mo","Tu","We","Th","Fr","Sa"],o=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],i=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],a=["AM","PM"],s=["am","pm"],c=["a.m.","p.m."],u={MMM:function(e){return t[e.getMonth()]},MMMM:function(t){return e[t.getMonth()]},dd:function(t){return n[t.getDay()]},ddd:function(t){return o[t.getDay()]},dddd:function(t){return i[t.getDay()]},A:function(t){return t.getHours()/12>=1?a[1]:a[0]},a:function(t){return t.getHours()/12>=1?s[1]:s[0]},aa:function(t){return t.getHours()/12>=1?c[1]:c[0]}};return["M","D","DDD","d","Q","W"].forEach((function(t){u[t+"o"]=function(e,n){return function(t){var e=t%100;if(e>20||e<10)switch(e%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"}(n[t](e))}})),{formatters:u,formattingTokensRegExp:r(u)}}},function(t,e){var n=["M","MM","Q","D","DD","DDD","DDDD","d","E","W","WW","YY","YYYY","GG","GGGG","H","HH","h","hh","m","mm","s","ss","S","SS","SSS","Z","ZZ","X","x"];t.exports=function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);var o=n.concat(e).sort().reverse();return new RegExp("(\\[[^\\[]*\\])|(\\\\)?("+o.join("|")+"|.)","g")}},function(t,e,n){"use strict";var r=n(16),o=n(210),i=n(407),a=n(216);function s(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var c=s(n(213));c.Axios=i,c.create=function(t){return s(a(c.defaults,t))},c.Cancel=n(217),c.CancelToken=n(420),c.isCancel=n(212),c.all=function(t){return Promise.all(t)},c.spread=n(421),c.isAxiosError=n(422),t.exports=c,t.exports.default=c},function(t,e,n){"use strict";var r=n(16),o=n(211),i=n(408),a=n(409),s=n(216);function c(t){this.defaults=t,this.interceptors={request:new i,response:new i}}c.prototype.request=function(t){"string"==typeof t?(t=arguments[1]||{}).url=arguments[0]:t=t||{},(t=s(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var e=[a,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},c.prototype.getUri=function(t){return t=s(this.defaults,t),o(t.url,t.params,t.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(s(n||{},{method:t,url:e,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,r){return this.request(s(r||{},{method:t,url:e,data:n}))}})),t.exports=c},function(t,e,n){"use strict";var r=n(16);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(16),o=n(410),i=n(212),a=n(213);function s(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return s(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||a.adapter)(t).then((function(e){return s(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(s(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(16);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";var r=n(16);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(215);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t.isAxiosError=!0,t.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},t}},function(t,e,n){"use strict";var r=n(16);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,a){var s=[];s.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(o)&&s.push("path="+o),r.isString(i)&&s.push("domain="+i),!0===a&&s.push("secure"),document.cookie=s.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(416),o=n(417);t.exports=function(t,e){return t&&!r(e)?o(t,e):e}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(16),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];t.exports=function(t){var e,n,i,a={};return t?(r.forEach(t.split("\n"),(function(t){if(i=t.indexOf(":"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e){if(a[e]&&o.indexOf(e)>=0)return;a[e]="set-cookie"===e?(a[e]?a[e]:[]).concat([n]):a[e]?a[e]+", "+n:n}})),a):a}},function(t,e,n){"use strict";var r=n(16);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";var r=n(217);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){"use strict";t.exports=function(t){return"object"==typeof t&&!0===t.isAxiosError}},function(t,e,n){},function(t,e,n){"use strict";n(218)},function(t,e,n){},function(t,e,n){var r;function o(t){function n(){if(n.enabled){var t=n,o=+new Date,i=o-(r||o);t.diff=i,t.prev=r,t.curr=o,r=o;for(var a=new Array(arguments.length),s=0;s0)return function(t){if((t=String(t)).length>100)return;var e=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(!e)return;var a=parseFloat(e[1]);switch((e[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*a;case"days":case"day":case"d":return a*i;case"hours":case"hour":case"hrs":case"hr":case"h":return a*o;case"minutes":case"minute":case"mins":case"min":case"m":return a*r;case"seconds":case"second":case"secs":case"sec":case"s":return a*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return}}(t);if("number"===c&&!1===isNaN(t))return e.long?a(s=t,i,"day")||a(s,o,"hour")||a(s,r,"minute")||a(s,n,"second")||s+" ms":function(t){if(t>=i)return Math.round(t/i)+"d";if(t>=o)return Math.round(t/o)+"h";if(t>=r)return Math.round(t/r)+"m";if(t>=n)return Math.round(t/n)+"s";return t+"ms"}(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))}},function(t,e,n){"use strict";n(221)},function(t,e,n){"use strict";n(222)},function(t,e,n){"use strict";n.r(e);n(139),n(243),n(252),n(254),n(18);function r(t,e,n,r,o,i,a){try{var s=t[i](a),c=s.value}catch(t){return void n(t)}s.done?e(c):Promise.resolve(c).then(r,o)}function o(t){return function(){var e=this,n=arguments;return new Promise((function(o,i){var a=t.apply(e,n);function s(t){r(a,o,i,s,c,"next",t)}function c(t){r(a,o,i,s,c,"throw",t)}s(void 0)}))}}n(162),n(34),n(24),n(26),n(42),n(21);var i=n(0);function a(t,e){for(var n in e)t[n]=e[n];return t}var s=/[!'()*]/g,c=function(t){return"%"+t.charCodeAt(0).toString(16)},u=/%2C/g,l=function(t){return encodeURIComponent(t).replace(s,c).replace(u,",")};function f(t){try{return decodeURIComponent(t)}catch(t){0}return t}var p=function(t){return null==t||"object"==typeof t?t:String(t)};function d(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.split("&").forEach((function(t){var n=t.replace(/\+/g," ").split("="),r=f(n.shift()),o=n.length>0?f(n.join("=")):null;void 0===e[r]?e[r]=o:Array.isArray(e[r])?e[r].push(o):e[r]=[e[r],o]})),e):e}function h(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(void 0===n)return"";if(null===n)return l(e);if(Array.isArray(n)){var r=[];return n.forEach((function(t){void 0!==t&&(null===t?r.push(l(e)):r.push(l(e)+"="+l(t)))})),r.join("&")}return l(e)+"="+l(n)})).filter((function(t){return t.length>0})).join("&"):null;return e?"?"+e:""}var v=/\/?$/;function m(t,e,n,r){var o=r&&r.options.stringifyQuery,i=e.query||{};try{i=g(i)}catch(t){}var a={name:e.name||t&&t.name,meta:t&&t.meta||{},path:e.path||"/",hash:e.hash||"",query:i,params:e.params||{},fullPath:w(e,o),matched:t?b(t):[]};return n&&(a.redirectedFrom=w(n,o)),Object.freeze(a)}function g(t){if(Array.isArray(t))return t.map(g);if(t&&"object"==typeof t){var e={};for(var n in t)e[n]=g(t[n]);return e}return t}var y=m(null,{path:"/"});function b(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}function w(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var o=t.hash;return void 0===o&&(o=""),(n||"/")+(e||h)(r)+o}function _(t,e,n){return e===y?t===e:!!e&&(t.path&&e.path?t.path.replace(v,"")===e.path.replace(v,"")&&(n||t.hash===e.hash&&x(t.query,e.query)):!(!t.name||!e.name)&&(t.name===e.name&&(n||t.hash===e.hash&&x(t.query,e.query)&&x(t.params,e.params))))}function x(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return t===e;var n=Object.keys(t).sort(),r=Object.keys(e).sort();return n.length===r.length&&n.every((function(n,o){var i=t[n];if(r[o]!==n)return!1;var a=e[n];return null==i||null==a?i===a:"object"==typeof i&&"object"==typeof a?x(i,a):String(i)===String(a)}))}function k(t){for(var e=0;e=0&&(e=t.slice(r),t=t.slice(0,r));var o=t.indexOf("?");return o>=0&&(n=t.slice(o+1),t=t.slice(0,o)),{path:t,query:n,hash:e}}(o.path||""),l=e&&e.path||"/",f=u.path?j(u.path,l,n||o.append):l,h=function(t,e,n){void 0===e&&(e={});var r,o=n||d;try{r=o(t||"")}catch(t){r={}}for(var i in e){var a=e[i];r[i]=Array.isArray(a)?a.map(p):p(a)}return r}(u.query,o.query,r&&r.options.parseQuery),v=o.hash||u.hash;return v&&"#"!==v.charAt(0)&&(v="#"+v),{_normalized:!0,path:f,query:h,hash:v}}var G,Q=function(){},Y={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(t){var e=this,n=this.$router,r=this.$route,o=n.resolve(this.to,r,this.append),i=o.location,s=o.route,c=o.href,u={},l=n.options.linkActiveClass,f=n.options.linkExactActiveClass,p=null==l?"router-link-active":l,d=null==f?"router-link-exact-active":f,h=null==this.activeClass?p:this.activeClass,g=null==this.exactActiveClass?d:this.exactActiveClass,y=s.redirectedFrom?m(null,W(s.redirectedFrom),null,n):s;u[g]=_(r,y,this.exactPath),u[h]=this.exact||this.exactPath?u[g]:function(t,e){return 0===t.path.replace(v,"/").indexOf(e.path.replace(v,"/"))&&(!e.hash||t.hash===e.hash)&&function(t,e){for(var n in e)if(!(n in t))return!1;return!0}(t.query,e.query)}(r,y);var b=u[g]?this.ariaCurrentValue:null,w=function(t){K(t)&&(e.replace?n.replace(i,Q):n.push(i,Q))},x={click:K};Array.isArray(this.event)?this.event.forEach((function(t){x[t]=w})):x[this.event]=w;var k={class:u},O=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:c,route:s,navigate:w,isActive:u[h],isExactActive:u[g]});if(O){if(1===O.length)return O[0];if(O.length>1||!O.length)return 0===O.length?t():t("span",{},O)}if("a"===this.tag)k.on=x,k.attrs={href:c,"aria-current":b};else{var S=function t(e){var n;if(e)for(var r=0;r-1&&(s.params[p]=n.params[p]);return s.path=H(l.path,s.params),c(l,s,a)}if(s.path){s.params={};for(var d=0;d=t.length?n():t[o]?e(t[o],(function(){r(o+1)})):r(o+1)};r(0)}var xt={redirected:2,aborted:4,cancelled:8,duplicated:16};function kt(t,e){return St(t,e,xt.redirected,'Redirected when going from "'+t.fullPath+'" to "'+function(t){if("string"==typeof t)return t;if("path"in t)return t.path;var e={};return jt.forEach((function(n){n in t&&(e[n]=t[n])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Ot(t,e){return St(t,e,xt.cancelled,'Navigation cancelled from "'+t.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function St(t,e,n,r){var o=new Error(r);return o._isRouter=!0,o.from=t,o.to=e,o.type=n,o}var jt=["params","query","hash"];function $t(t){return Object.prototype.toString.call(t).indexOf("Error")>-1}function Ct(t,e){return $t(t)&&t._isRouter&&(null==e||t.type===e)}function At(t){return function(e,n,r){var o=!1,i=0,a=null;Et(t,(function(t,e,n,s){if("function"==typeof t&&void 0===t.cid){o=!0,i++;var c,u=It((function(e){var o;((o=e).__esModule||Pt&&"Module"===o[Symbol.toStringTag])&&(e=e.default),t.resolved="function"==typeof e?e:G.extend(e),n.components[s]=e,--i<=0&&r()})),l=It((function(t){var e="Failed to resolve async component "+s+": "+t;a||(a=$t(t)?t:new Error(e),r(a))}));try{c=t(u,l)}catch(t){l(t)}if(c)if("function"==typeof c.then)c.then(u,l);else{var f=c.component;f&&"function"==typeof f.then&&f.then(u,l)}}})),o||r()}}function Et(t,e){return Tt(t.map((function(t){return Object.keys(t.components).map((function(n){return e(t.components[n],t.instances[n],t,n)}))})))}function Tt(t){return Array.prototype.concat.apply([],t)}var Pt="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function It(t){var e=!1;return function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];if(!e)return e=!0,t.apply(this,n)}}var Rt=function(t,e){this.router=t,this.base=function(t){if(!t)if(J){var e=document.querySelector("base");t=(t=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else t="/";"/"!==t.charAt(0)&&(t="/"+t);return t.replace(/\/$/,"")}(e),this.current=y,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function Mt(t,e,n,r){var o=Et(t,(function(t,r,o,i){var a=function(t,e){"function"!=typeof t&&(t=G.extend(t));return t.options[e]}(t,e);if(a)return Array.isArray(a)?a.map((function(t){return n(t,r,o,i)})):n(a,r,o,i)}));return Tt(r?o.reverse():o)}function Lt(t,e){if(e)return function(){return t.apply(e,arguments)}}Rt.prototype.listen=function(t){this.cb=t},Rt.prototype.onReady=function(t,e){this.ready?t():(this.readyCbs.push(t),e&&this.readyErrorCbs.push(e))},Rt.prototype.onError=function(t){this.errorCbs.push(t)},Rt.prototype.transitionTo=function(t,e,n){var r,o=this;try{r=this.router.match(t,this.current)}catch(t){throw this.errorCbs.forEach((function(e){e(t)})),t}var i=this.current;this.confirmTransition(r,(function(){o.updateRoute(r),e&&e(r),o.ensureURL(),o.router.afterHooks.forEach((function(t){t&&t(r,i)})),o.ready||(o.ready=!0,o.readyCbs.forEach((function(t){t(r)})))}),(function(t){n&&n(t),t&&!o.ready&&(Ct(t,xt.redirected)&&i===y||(o.ready=!0,o.readyErrorCbs.forEach((function(e){e(t)}))))}))},Rt.prototype.confirmTransition=function(t,e,n){var r=this,o=this.current;this.pending=t;var i=function(t){!Ct(t)&&$t(t)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(t)})):console.error(t)),n&&n(t)},a=t.matched.length-1,s=o.matched.length-1;if(_(t,o)&&a===s&&t.matched[a]===o.matched[s])return this.ensureURL(),i(function(t,e){var n=St(t,e,xt.duplicated,'Avoided redundant navigation to current location: "'+t.fullPath+'".');return n.name="NavigationDuplicated",n}(o,t));var c=function(t,e){var n,r=Math.max(t.length,e.length);for(n=0;n0)){var e=this.router,n=e.options.scrollBehavior,r=yt&&n;r&&this.listeners.push(ct());var o=function(){var n=t.current,o=Ft(t.base);t.current===y&&o===t._startLocation||t.transitionTo(o,(function(t){r&&ut(e,t,n,!0)}))};window.addEventListener("popstate",o),this.listeners.push((function(){window.removeEventListener("popstate",o)}))}},e.prototype.go=function(t){window.history.go(t)},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){bt($(r.base+t.fullPath)),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){wt($(r.base+t.fullPath)),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.ensureURL=function(t){if(Ft(this.base)!==this.current.fullPath){var e=$(this.base+this.current.fullPath);t?bt(e):wt(e)}},e.prototype.getCurrentLocation=function(){return Ft(this.base)},e}(Rt);function Ft(t){var e=window.location.pathname,n=e.toLowerCase(),r=t.toLowerCase();return!t||n!==r&&0!==n.indexOf($(r+"/"))||(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}var zt=function(t){function e(e,n,r){t.call(this,e,n),r&&function(t){var e=Ft(t);if(!/^\/#/.test(e))return window.location.replace($(t+"/#"+e)),!0}(this.base)||Dt()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var t=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,n=yt&&e;n&&this.listeners.push(ct());var r=function(){var e=t.current;Dt()&&t.transitionTo(Ut(),(function(r){n&&ut(t.router,r,e,!0),yt||Vt(r.fullPath)}))},o=yt?"popstate":"hashchange";window.addEventListener(o,r),this.listeners.push((function(){window.removeEventListener(o,r)}))}},e.prototype.push=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){qt(t.fullPath),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this,o=this.current;this.transitionTo(t,(function(t){Vt(t.fullPath),ut(r.router,t,o,!1),e&&e(t)}),n)},e.prototype.go=function(t){window.history.go(t)},e.prototype.ensureURL=function(t){var e=this.current.fullPath;Ut()!==e&&(t?qt(e):Vt(e))},e.prototype.getCurrentLocation=function(){return Ut()},e}(Rt);function Dt(){var t=Ut();return"/"===t.charAt(0)||(Vt("/"+t),!1)}function Ut(){var t=window.location.href,e=t.indexOf("#");return e<0?"":t=t.slice(e+1)}function Bt(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e.slice(0,n):e)+"#"+t}function qt(t){yt?bt(Bt(t)):window.location.hash=t}function Vt(t){yt?wt(Bt(t)):window.location.replace(Bt(t))}var Ht=function(t){function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.push=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index+1).concat(t),r.index++,e&&e(t)}),n)},e.prototype.replace=function(t,e,n){var r=this;this.transitionTo(t,(function(t){r.stack=r.stack.slice(0,r.index).concat(t),e&&e(t)}),n)},e.prototype.go=function(t){var e=this,n=this.index+t;if(!(n<0||n>=this.stack.length)){var r=this.stack[n];this.confirmTransition(r,(function(){var t=e.current;e.index=n,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,t)}))}),(function(t){Ct(t,xt.duplicated)&&(e.index=n)}))}},e.prototype.getCurrentLocation=function(){var t=this.stack[this.stack.length-1];return t?t.fullPath:"/"},e.prototype.ensureURL=function(){},e}(Rt),Wt=function(t){void 0===t&&(t={}),this.app=null,this.apps=[],this.options=t,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=tt(t.routes||[],this);var e=t.mode||"hash";switch(this.fallback="history"===e&&!yt&&!1!==t.fallback,this.fallback&&(e="hash"),J||(e="abstract"),this.mode=e,e){case"history":this.history=new Nt(this,t.base);break;case"hash":this.history=new zt(this,t.base,this.fallback);break;case"abstract":this.history=new Ht(this,t.base);break;default:0}},Gt={currentRoute:{configurable:!0}};function Qt(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}Wt.prototype.match=function(t,e,n){return this.matcher.match(t,e,n)},Gt.currentRoute.get=function(){return this.history&&this.history.current},Wt.prototype.init=function(t){var e=this;if(this.apps.push(t),t.$once("hook:destroyed",(function(){var n=e.apps.indexOf(t);n>-1&&e.apps.splice(n,1),e.app===t&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=t;var n=this.history;if(n instanceof Nt||n instanceof zt){var r=function(t){n.setupListeners(),function(t){var r=n.current,o=e.options.scrollBehavior;yt&&o&&"fullPath"in t&&ut(e,t,r,!1)}(t)};n.transitionTo(n.getCurrentLocation(),r,r)}n.listen((function(t){e.apps.forEach((function(e){e._route=t}))}))}},Wt.prototype.beforeEach=function(t){return Qt(this.beforeHooks,t)},Wt.prototype.beforeResolve=function(t){return Qt(this.resolveHooks,t)},Wt.prototype.afterEach=function(t){return Qt(this.afterHooks,t)},Wt.prototype.onReady=function(t,e){this.history.onReady(t,e)},Wt.prototype.onError=function(t){this.history.onError(t)},Wt.prototype.push=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.push(t,e,n)}));this.history.push(t,e,n)},Wt.prototype.replace=function(t,e,n){var r=this;if(!e&&!n&&"undefined"!=typeof Promise)return new Promise((function(e,n){r.history.replace(t,e,n)}));this.history.replace(t,e,n)},Wt.prototype.go=function(t){this.history.go(t)},Wt.prototype.back=function(){this.go(-1)},Wt.prototype.forward=function(){this.go(1)},Wt.prototype.getMatchedComponents=function(t){var e=t?t.matched?t:this.resolve(t).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(t){return Object.keys(t.components).map((function(e){return t.components[e]}))}))):[]},Wt.prototype.resolve=function(t,e,n){var r=W(t,e=e||this.history.current,n,this),o=this.match(r,e),i=o.redirectedFrom||o.fullPath;return{location:r,route:o,href:function(t,e,n){var r="hash"===n?"#"+e:e;return t?$(t+"/"+r):r}(this.history.base,i,this.mode),normalizedTo:r,resolved:o}},Wt.prototype.getRoutes=function(){return this.matcher.getRoutes()},Wt.prototype.addRoute=function(t,e){this.matcher.addRoute(t,e),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Wt.prototype.addRoutes=function(t){this.matcher.addRoutes(t),this.history.current!==y&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(Wt.prototype,Gt),Wt.install=function t(e){if(!t.installed||G!==e){t.installed=!0,G=e;var n=function(t){return void 0!==t},r=function(t,e){var r=t.$options._parentVnode;n(r)&&n(r=r.data)&&n(r=r.registerRouteInstance)&&r(t,e)};e.mixin({beforeCreate:function(){n(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",O),e.component("RouterLink",Y);var o=e.config.optionMergeStrategies;o.beforeRouteEnter=o.beforeRouteLeave=o.beforeRouteUpdate=o.created}},Wt.version="3.5.2",Wt.isNavigationFailure=Ct,Wt.NavigationFailureType=xt,Wt.START_LOCATION=y,J&&window.Vue&&window.Vue.use(Wt);var Yt=Wt;n(165),n(166),n(167),n(72),n(258),n(61),n(62),n(259);function Kt(t){t.locales&&Object.keys(t.locales).forEach((function(e){t.locales[e].path=e})),Object.freeze(t)}n(134);var Jt=n(52),Xt=(n(176),n(43),n(50),n(265),n(266),{NotFound:function(){return Promise.all([n.e(0),n.e(7)]).then(n.bind(null,521))},Category:function(){return Promise.all([n.e(0),n.e(1),n.e(6)]).then(n.bind(null,522))},Layout:function(){return Promise.all([n.e(0),n.e(1),n.e(3)]).then(n.bind(null,520))},Tag:function(){return Promise.all([n.e(0),n.e(1),n.e(4)]).then(n.bind(null,523))},Tags:function(){return Promise.all([n.e(0),n.e(1),n.e(5)]).then(n.bind(null,524))},TimeLines:function(){return Promise.all([n.e(0),n.e(1),n.e(9)]).then(n.bind(null,525))}}),Zt={"v-5a1b77a6":function(){return n.e(10).then(n.bind(null,526))},"v-7c364b8d":function(){return n.e(11).then(n.bind(null,527))},"v-effb4c26":function(){return n.e(12).then(n.bind(null,528))},"v-21482c2d":function(){return n.e(13).then(n.bind(null,529))},"v-6ae798e6":function(){return n.e(14).then(n.bind(null,530))},"v-7b669c4d":function(){return n.e(15).then(n.bind(null,531))},"v-4fa1a9ed":function(){return n.e(16).then(n.bind(null,532))},"v-5c479aae":function(){return n.e(17).then(n.bind(null,533))},"v-30bc9f8d":function(){return n.e(18).then(n.bind(null,534))},"v-d2c6fb4a":function(){return n.e(19).then(n.bind(null,535))}};function te(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}var ee=/-(\w)/g,ne=te((function(t){return t.replace(ee,(function(t,e){return e?e.toUpperCase():""}))})),re=/\B([A-Z])/g,oe=te((function(t){return t.replace(re,"-$1").toLowerCase()})),ie=te((function(t){return t.charAt(0).toUpperCase()+t.slice(1)}));function ae(t,e){if(e)return t(e)?t(e):e.includes("-")?t(ie(ne(e))):t(ie(e))||t(oe(e))}var se=Object.assign({},Xt,Zt),ce=function(t){return se[t]},ue=function(t){return Zt[t]},le=function(t){return Xt[t]},fe=function(t){return i.default.component(t)};function pe(t){return ae(ue,t)}function de(t){return ae(le,t)}function he(t){return ae(ce,t)}function ve(t){return ae(fe,t)}function me(){for(var t=arguments.length,e=new Array(t),n=0;n"})).join("\n "):"",this.$ssrContext.canonicalLink=Oe(this.$canonicalUrl)}var e},mounted:function(){this.currentMetaTags=Object(Jt.a)(document.querySelectorAll("meta")),this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta:function(){document.title=this.$title,document.documentElement.lang=this.$lang;var t=this.getMergedMetaTags();this.currentMetaTags=Se(t,this.currentMetaTags)},getMergedMetaTags:function(){var t=this.$page.frontmatter.meta||[];return _e()([{name:"description",content:this.$description}],t,this.siteMeta,je)},updateCanonicalLink:function(){ke(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",Oe(this.$canonicalUrl))}},watch:{$page:function(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy:function(){Se(null,this.currentMetaTags),ke()}};function ke(){var t=document.querySelector("link[rel='canonical']");t&&t.remove()}function Oe(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return t?''):""}function Se(t,e){if(e&&Object(Jt.a)(e).filter((function(t){return t.parentNode===document.head})).forEach((function(t){return document.head.removeChild(t)})),t)return t.map((function(t){var e=document.createElement("meta");return Object.keys(t).forEach((function(n){e.setAttribute(n,t[n])})),document.head.appendChild(e),e}))}function je(t){for(var e=0,n=["name","property","itemprop"];e=s.parentElement.offsetTop+10&&(!c||r1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(t){function e(){}t(e,e)},o=function(t){var e=t.target;e!==S?-1!==b.indexOf(e)&&v({target:e}):h()},i=function(){if(!_&&O.original){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(x-t)>k.scrollOffset&&setTimeout(h,150)}},a=function(t){var e=t.key||t.keyCode;"Escape"!==e&&"Esc"!==e&&27!==e||h()},s=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t;if(t.background&&(S.style.background=t.background),t.container&&t.container instanceof Object&&(e.container=Ae({},k.container,t.container)),t.template){var n=Te(t.template)?t.template:document.querySelector(t.template);e.template=n}return k=Ae({},k,e),b.forEach((function(t){t.dispatchEvent(Le("medium-zoom:update",{detail:{zoom:j}}))})),j},c=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return t(Ae({},k,e))},u=function(){for(var t=arguments.length,e=Array(t),n=0;n0?e.reduce((function(t,e){return[].concat(t,Ie(e))}),[]):b;return r.forEach((function(t){t.classList.remove("medium-zoom-image"),t.dispatchEvent(Le("medium-zoom:detach",{detail:{zoom:j}}))})),b=b.filter((function(t){return-1===r.indexOf(t)})),j},f=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.addEventListener("medium-zoom:"+t,e,n)})),w.push({type:"medium-zoom:"+t,listener:e,options:n}),j},p=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return b.forEach((function(r){r.removeEventListener("medium-zoom:"+t,e,n)})),w=w.filter((function(n){return!(n.type==="medium-zoom:"+t&&n.listener.toString()===e.toString())})),j},d=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,n=function(){var t={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},e=void 0,n=void 0;if(k.container)if(k.container instanceof Object)e=(t=Ae({},t,k.container)).width-t.left-t.right-2*k.margin,n=t.height-t.top-t.bottom-2*k.margin;else{var r=(Te(k.container)?k.container:document.querySelector(k.container)).getBoundingClientRect(),o=r.width,i=r.height,a=r.left,s=r.top;t=Ae({},t,{width:o,height:i,left:a,top:s})}e=e||t.width-2*k.margin,n=n||t.height-2*k.margin;var c=O.zoomedHd||O.original,u=Pe(c)?e:c.naturalWidth||e,l=Pe(c)?n:c.naturalHeight||n,f=c.getBoundingClientRect(),p=f.top,d=f.left,h=f.width,v=f.height,m=Math.min(u,e)/h,g=Math.min(l,n)/v,y=Math.min(m,g),b="scale("+y+") translate3d("+((e-h)/2-d+k.margin+t.left)/y+"px, "+((n-v)/2-p+k.margin+t.top)/y+"px, 0)";O.zoomed.style.transform=b,O.zoomedHd&&(O.zoomedHd.style.transform=b)};return new r((function(t){if(e&&-1===b.indexOf(e))t(j);else{if(O.zoomed)t(j);else{if(e)O.original=e;else{if(!(b.length>0))return void t(j);var r=b;O.original=r[0]}if(O.original.dispatchEvent(Le("medium-zoom:open",{detail:{zoom:j}})),x=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,_=!0,O.zoomed=Me(O.original),document.body.appendChild(S),k.template){var o=Te(k.template)?k.template:document.querySelector(k.template);O.template=document.createElement("div"),O.template.appendChild(o.content.cloneNode(!0)),document.body.appendChild(O.template)}if(document.body.appendChild(O.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),O.original.classList.add("medium-zoom-image--hidden"),O.zoomed.classList.add("medium-zoom-image--opened"),O.zoomed.addEventListener("click",h),O.zoomed.addEventListener("transitionend",(function e(){_=!1,O.zoomed.removeEventListener("transitionend",e),O.original.dispatchEvent(Le("medium-zoom:opened",{detail:{zoom:j}})),t(j)})),O.original.getAttribute("data-zoom-src")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("srcset"),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.src=O.zoomed.getAttribute("data-zoom-src"),O.zoomedHd.onerror=function(){clearInterval(i),console.warn("Unable to reach the zoom image target "+O.zoomedHd.src),O.zoomedHd=null,n()};var i=setInterval((function(){O.zoomedHd.complete&&(clearInterval(i),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",h),document.body.appendChild(O.zoomedHd),n())}),10)}else if(O.original.hasAttribute("srcset")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.removeAttribute("loading");var a=O.zoomedHd.addEventListener("load",(function(){O.zoomedHd.removeEventListener("load",a),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",h),document.body.appendChild(O.zoomedHd),n()}))}else n()}}}))},h=function(){return new r((function(t){if(!_&&O.original){_=!0,document.body.classList.remove("medium-zoom--opened"),O.zoomed.style.transform="",O.zoomedHd&&(O.zoomedHd.style.transform=""),O.template&&(O.template.style.transition="opacity 150ms",O.template.style.opacity=0),O.original.dispatchEvent(Le("medium-zoom:close",{detail:{zoom:j}})),O.zoomed.addEventListener("transitionend",(function e(){O.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(O.zoomed),O.zoomedHd&&document.body.removeChild(O.zoomedHd),document.body.removeChild(S),O.zoomed.classList.remove("medium-zoom-image--opened"),O.template&&document.body.removeChild(O.template),_=!1,O.zoomed.removeEventListener("transitionend",e),O.original.dispatchEvent(Le("medium-zoom:closed",{detail:{zoom:j}})),O.original=null,O.zoomed=null,O.zoomedHd=null,O.template=null,t(j)}))}else t(j)}))},v=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.target;return O.original?h():d({target:e})},m=function(){return k},g=function(){return b},y=function(){return O.original},b=[],w=[],_=!1,x=0,k=n,O={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(e)?k=e:(e||"string"==typeof e)&&u(e),k=Ae({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},k);var S=Re(k.background);document.addEventListener("click",o),document.addEventListener("keyup",a),document.addEventListener("scroll",i),window.addEventListener("resize",h);var j={open:d,close:h,toggle:v,update:s,clone:c,attach:u,detach:l,on:f,off:p,getOptions:m,getImages:g,getZoomedImage:y};return j},Fe={data:function(){return{zoom:null}},mounted:function(){this.updateZoom()},updated:function(){this.updateZoom()},methods:{updateZoom:function(){var t=this;setTimeout((function(){t.zoom&&t.zoom.detach(),t.zoom=Ne(".theme-reco-content :not(a) > img",void 0)}),1e3)}}},ze=(n(95),n(93)),De=n.n(ze),Ue={mounted:function(){var t=this;De.a.configure({showSpinner:!1}),this.$router.beforeEach((function(t,e,n){t.path===e.path||i.default.component(t.name)||De.a.start(),n()})),this.$router.afterEach((function(){De.a.done(),t.isSidebarOpen=!1}))}},Be=n(225),qe=n.n(Be),Ve=(n(363),[xe,Ce,Fe,Ue,{mounted:function(){qe.a.polyfill()}}]),He={name:"GlobalLayout",computed:{layout:function(){var t=this.getLayout();return ge("layout",t),i.default.component(t)}},methods:{getLayout:function(){if(this.$page.path){var t=this.$page.frontmatter.layout;return t&&(this.$vuepress.getLayoutAsyncComponent(t)||this.$vuepress.getVueComponent(t))?t:"Layout"}return"NotFound"}}},We=n(7),Ge=Object(We.a)(He,(function(){var t=this.$createElement;return(this._self._c||t)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(t,e,n){var r;switch(e){case"components":t[e]||(t[e]={}),Object.assign(t[e],n);break;case"mixins":t[e]||(t[e]=[]),(r=t[e]).push.apply(r,Object(Jt.a)(n));break;default:throw new Error("Unknown option name.")}}(Ge,"mixins",Ve);var Qe=[{name:"v-5a1b77a6",path:"/2024/2024-03-22.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-5a1b77a6").then(n)}},{name:"v-7c364b8d",path:"/2024/2024-03-29.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-7c364b8d").then(n)}},{name:"v-effb4c26",path:"/2024/2024-04-07.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-effb4c26").then(n)}},{name:"v-21482c2d",path:"/2024/2024-04-12.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-21482c2d").then(n)}},{name:"v-6ae798e6",path:"/2024/2024-04-19.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-6ae798e6").then(n)}},{name:"v-7b669c4d",path:"/2024/2024-04-28.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-7b669c4d").then(n)}},{name:"v-4fa1a9ed",path:"/2024/2024-05-19.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-4fa1a9ed").then(n)}},{name:"v-5c479aae",path:"/",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-5c479aae").then(n)}},{path:"/index.html",redirect:"/"},{name:"v-30bc9f8d",path:"/about.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-30bc9f8d").then(n)}},{name:"v-d2c6fb4a",path:"/menu.html",component:Ge,beforeEnter:function(t,e,n){me("Layout","v-d2c6fb4a").then(n)}},{name:"v-b1564aac",path:"/tag/",component:Ge,beforeEnter:function(t,e,n){me("Tags","v-b1564aac").then(n)},meta:{pid:"tags",id:"tags"}},{path:"/tag/index.html",redirect:"/tag/"},{name:"v-ef9325c4",path:"/categories/",component:Ge,beforeEnter:function(t,e,n){me("FrontmatterKey","v-ef9325c4").then(n)},meta:{pid:"categories",id:"categories"}},{path:"/categories/index.html",redirect:"/categories/"},{name:"v-6319eb4e",path:"/timeline/",component:Ge,beforeEnter:function(t,e,n){me("TimeLines","v-6319eb4e").then(n)},meta:{pid:"timeline",id:"timeline"}},{path:"/timeline/index.html",redirect:"/timeline/"},{path:"*",component:Ge}],Ye={title:"每周精选文章合集",description:"精选文章, 每周更新,每周热文,文章合集",base:"/",headTags:[["meta",{name:"viewport",content:"width=device-width,initial-scale=1,user-scalable=no"}],["meta",{name:"apple-mobile-web-app-capable",content:"yes"}],["meta",{name:"apple-mobile-web-app-status-bar-style",content:"black"}],["meta",{name:"keywords",content:"draven, blog, 前端, 技术博客, 德莱问"}],["script",{},'var _hmt = _hmt || [];\n (function() {\n var hm = document.createElement("script");\n hm.src = "https://hm.baidu.com/hm.js?f7e6799f17989e184072a05d38820494";\n var s = document.getElementsByTagName("script")[0]; \n s.parentNode.insertBefore(hm, s);\n })();']],pages:[{frontmatter:{},regularPath:"/2024/2024-03-22.html",relativePath:"2024/2024-03-22.md",key:"v-5a1b77a6",path:"/2024/2024-03-22.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-NestJS",slug:"前端-nestjs"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-03-29.html",relativePath:"2024/2024-03-29.md",key:"v-7c364b8d",path:"/2024/2024-03-29.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"前端-NestJS",slug:"前端-nestjs"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-07.html",relativePath:"2024/2024-04-07.md",key:"v-effb4c26",path:"/2024/2024-04-07.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-12.html",relativePath:"2024/2024-04-12.md",key:"v-21482c2d",path:"/2024/2024-04-12.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-19.html",relativePath:"2024/2024-04-19.md",key:"v-6ae798e6",path:"/2024/2024-04-19.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-微信小程序",slug:"前端-微信小程序"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-04-28.html",relativePath:"2024/2024-04-28.md",key:"v-7b669c4d",path:"/2024/2024-04-28.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:3,title:"数据结构与算法",slug:"数据结构与算法"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"java",slug:"java"},{level:3,title:"php",slug:"php"},{level:3,title:"python",slug:"python"},{level:3,title:"运维",slug:"运维"},{level:3,title:"移动开发",slug:"移动开发"},{level:3,title:"c/c++",slug:"c-c"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"前端-NPM",slug:"前端-npm"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript-2"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python-2"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{frontmatter:{},regularPath:"/2024/2024-05-19.html",relativePath:"2024/2024-05-19.md",key:"v-4fa1a9ed",path:"/2024/2024-05-19.html",headers:[{level:2,title:"CSDN",slug:"csdn"},{level:2,title:"掘金",slug:"掘金"},{level:3,title:"前端",slug:"前端"},{level:3,title:"前端-JavaScript",slug:"前端-javascript"},{level:3,title:"前端-Vue.js",slug:"前端-vue-js"},{level:3,title:"前端-React.js",slug:"前端-react-js"},{level:3,title:"前端-面试",slug:"前端-面试"},{level:3,title:"前端-CSS",slug:"前端-css"},{level:3,title:"前端-Node.js",slug:"前端-node-js"},{level:3,title:"前端-后端",slug:"前端-后端"},{level:3,title:"前端-TypeScript",slug:"前端-typescript"},{level:3,title:"前端-前端框架",slug:"前端-前端框架"},{level:3,title:"前端-GitHub",slug:"前端-github"},{level:3,title:"前端-Webpack",slug:"前端-webpack"},{level:3,title:"前端-HarmonyOS",slug:"前端-harmonyos"},{level:3,title:"前端-架构",slug:"前端-架构"},{level:3,title:"后端",slug:"后端"},{level:3,title:"Android",slug:"android"},{level:3,title:"IOS",slug:"ios"},{level:2,title:"GitHub",slug:"github"},{level:3,title:"javascript",slug:"javascript"},{level:3,title:"vue",slug:"vue"},{level:3,title:"typescript",slug:"typescript"},{level:3,title:"python",slug:"python"},{level:3,title:"go",slug:"go"},{level:3,title:"rust",slug:"rust"},{level:3,title:"object-c",slug:"object-c"},{level:3,title:"css",slug:"css"}]},{title:"Home",frontmatter:{home:!0,heroImage:"/hero.png",heroImageStyle:{maxHeight:"200px",maxWidth:"100%",display:"block",margin:"6rem auto 1.5rem",borderRadius:"5px",boxShadow:"0 5px 18px rgba(0,0,0,0.2)"},actionText:"开始 →",actionLink:"/menu",features:[{title:"质量优先",details:"各大技术社区每周精选优质文章"},{title:"文章合集",details:"收录历史精选文章,不再遗忘"},{title:"每周更新",details:"每周进行收集,发布"}]},regularPath:"/",relativePath:"README.md",key:"v-5c479aae",path:"/"},{title:"关于我",frontmatter:{title:"关于我"},regularPath:"/about.html",relativePath:"about.md",key:"v-30bc9f8d",path:"/about.html"},{title:"目录",frontmatter:{title:"目录"},regularPath:"/menu.html",relativePath:"menu.md",key:"v-d2c6fb4a",path:"/menu.html",headers:[{level:2,title:"2024",slug:"_2024"}]},{frontmatter:{layout:"Tags",title:"Tags"},regularPath:"/tag/",key:"v-b1564aac",path:"/tag/"},{frontmatter:{layout:"FrontmatterKey",title:"Categories"},regularPath:"/categories/",key:"v-ef9325c4",path:"/categories/"},{frontmatter:{layout:"TimeLines",title:"Timeline"},regularPath:"/timeline/",key:"v-6319eb4e",path:"/timeline/"}],themeConfig:{author:"dravenwu",startYear:"2021",valineConfig:{appId:"j2HkS1t6CpVpw4mzhvpRyVQA-gzGzoHsz",appKey:"i5YI6RXIUCeVja0t1DQjphDI",meta:["nick","mail"],requiredFields:["mail"]},nav:[{text:"文章列表",link:"/menu.html",icon:"reco-menu"},{text:"关于我",link:"/about.html",icon:"reco-account"},{text:"掘金",link:"https://juejin.cn/user/1732486056921614",icon:"reco-juejin"},{text:"GitHub",link:"https://github.com/dravenww/curated-article",icon:"reco-github"},{text:"工程化模板",items:[{text:"vite|element-ui|Vue2",link:"https://github.com/tnfe/vite-vue2-pro"},{text:"vite|antd|react",link:"https://github.com/tnfe/vite-concent-pro"},{text:"webpack|react|concent",link:"https://github.com/tnfe/concent-pro"}],icon:"reco-github"}],displayAllHeaders:!0,sidebar:"auto",sidebarDepth:2}},Ke=(n(51),n(231),n(232),n(70),n(233),n(66)),Je={computed:{$recoPosts:function(){var t=this.$site.pages;return t=Object(Ke.a)(t,!1),Object(Ke.c)(t),t},$recoPostsForTimeline:function(){var t=this.$recoPosts,e={},n=[];t=Object(Ke.a)(t,!0),this.pages=0==t.length?[]:t;for(var r=0,o=t.length;r-1)&&([o,i].indexOf("auto")>-1&&a.length>0||[e,n].indexOf("auto")>-1&&a.length>0)}}};function Xe(t,e){t=function(t){var e=new Date(t).toJSON();return new Date(+new Date(e)+288e5).toISOString().replace(/T/g," ").replace(/\.[\d]{3}Z/,"").replace(/-/g,"/")}(t);var n=new Date(t),r=n.getFullYear(),o=n.getMonth()+1,i=n.getDate();return"year"==e?r:"".concat(o,"-").concat(i)}var Ze=n(8),tn={all:"全部",article:"文章",tag:"标签",category:"分类",friendLink:"友情链接",timeLine:"时间轴",timeLineMsg:"昨日重现!"},en={all:"全部",article:"文章",tag:"標簽",category:"分類",friendLink:"友情鏈接",timeLine:"時間軸",timeLineMsg:"昨日重現!"},nn={all:"All",article:"Articles",tag:"Tags",category:"Categories",friendLink:"Friend Links",timeLine:"TimeLine",timeLineMsg:"Yesterday Once More!"},rn={all:"全部",article:"文章",tag:"ラベル",category:"分類",friendLink:"友情リンク",timeLine:"タイムライン",timeLineMsg:"昨日また!"},on={all:"전체",article:"글",tag:"태그",category:"분류",friendLink:"링크 참조",timeLine:"타임 라인",timeLineMsg:"어제 또!"},an={all:"Todas",article:"Artículos",tag:"Etiquetas",category:"Categorías",friendLink:"Páginas amigas",timeLine:"Cronología",timeLineMsg:"¡Ayer otra vez!"},sn={computed:{$recoLocales:function(){var t=this.$themeLocaleConfig.recoLocales||{};return/^zh\-(CN|SG)$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},tn),t):/^zh\-(HK|MO|TW)$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},en),t):/^ja\-JP$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},rn),t):/^ko\-KR$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},on),t):/^es(\-[A-Z]+)?$/.test(this.$lang)?Object(Ze.a)(Object(Ze.a)({},an),t):Object(Ze.a)(Object(Ze.a)({},nn),t)}}},cn=n(27),un=n(71),ln=n(129);n(373);i.default.component("Badge",(function(){return Promise.all([n.e(0),n.e(8)]).then(n.bind(null,536))}));n(374);var fn={name:"BackToTop",data:function(){return{visible:!1,customStyle:{right:"1rem",bottom:"6rem",width:"2.5rem",height:"2.5rem","border-radius":".25rem","line-height":"2.5rem"},visibilityHeight:400}},mounted:function(){window.addEventListener("scroll",this.throttle(this.handleScroll,500))},beforeDestroy:function(){window.removeEventListener("scroll",this.throttle(this.handleScroll,500))},methods:{handleScroll:function(){this.visible=window.pageYOffset>this.visibilityHeight},backToTop:function(){window.scrollTo(0,0)},throttle:function(t,e){var n=null,r=Date.now();return function(){var o=Date.now(),i=e-(o-r),a=this,s=arguments;clearTimeout(n),i<=0?(t.apply(a,s),r=Date.now()):n=setTimeout(t,i)}}}},pn=(n(375),Object(We.a)(fn,(function(){var t=this.$createElement,e=this._self._c||t;return e("transition",{attrs:{name:"fade"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:this.visible,expression:"visible"}],staticClass:"back-to-ceiling",style:this.customStyle,on:{click:this.backToTop}},[e("svg",{staticClass:"icon",attrs:{t:"1574745035067",viewBox:"0 0 1024 1024",version:"1.1",xmlns:"http://www.w3.org/2000/svg","p-id":"5404"}},[e("path",{attrs:{d:"M526.60727968 10.90185116a27.675 27.675 0 0 0-29.21455937 0c-131.36607665 82.28402758-218.69155461 228.01873535-218.69155402 394.07834331a462.20625001 462.20625001 0 0 0 5.36959153 69.94390903c1.00431239 6.55289093-0.34802892 13.13561351-3.76865779 18.80351572-32.63518765 54.11355614-51.75690182 118.55860487-51.7569018 187.94566865a371.06718723 371.06718723 0 0 0 11.50484808 91.98906777c6.53300375 25.50556257 41.68394495 28.14064038 52.69160883 4.22606766 17.37162448-37.73630017 42.14135425-72.50938081 72.80769204-103.21549295 2.18761121 3.04276886 4.15646224 6.24463696 6.40373557 9.22774369a1871.4375 1871.4375 0 0 0 140.04691725 5.34970492 1866.36093723 1866.36093723 0 0 0 140.04691723-5.34970492c2.24727335-2.98310674 4.21612437-6.18497483 6.3937923-9.2178004 30.66633723 30.70611158 55.4360664 65.4791928 72.80769147 103.21549355 11.00766384 23.91457269 46.15860503 21.27949489 52.69160879-4.22606768a371.15156223 371.15156223 0 0 0 11.514792-91.99901164c0-69.36717486-19.13165746-133.82216804-51.75690182-187.92578088-3.42062944-5.66790279-4.76302748-12.26056868-3.76865837-18.80351632a462.20625001 462.20625001 0 0 0 5.36959269-69.943909c-0.00994388-166.08943902-87.32547796-311.81420293-218.6915546-394.09823051zM605.93803103 357.87693858a93.93749974 93.93749974 0 1 1-187.89594924 6.1e-7 93.93749974 93.93749974 0 0 1 187.89594924-6.1e-7z","p-id":"5405"}}),e("path",{attrs:{d:"M429.50777625 765.63860547C429.50777625 803.39355007 466.44236686 1000.39046097 512.00932183 1000.39046097c45.56695499 0 82.4922232-197.00623328 82.5015456-234.7518555 0-37.75494459-36.9345906-68.35043303-82.4922232-68.34111062-45.57627738-0.00932239-82.52019037 30.59548842-82.51086798 68.34111062z","p-id":"5406"}})])])])}),[],!1,null,"c6073ba8",null).exports),dn=(n(376),Object(We.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"loader-wrapper"}},[n("div",{staticClass:"loader-main"},t._l(4,(function(t){return n("div",{key:"out"+t})})),0),t._v(" "),t.$frontmatter.home?n("h3",{staticClass:"title"},[t._v(t._s(t.$site.title||t.$localeConfig.title))]):t._e(),t._v(" "),t.$frontmatter.home?n("p",{staticClass:"description"},[t._v(t._s(t.$site.description||t.$localeConfig.description))]):t._e()])}),[],!1,null,"d48f4d20",null).exports),hn=(n(377),n(229),{prev:"上一页",next:"下一页",go:"前往",jump:"跳转至"}),vn={prev:"上壹頁",next:"下壹頁",go:"前往",jump:"跳轉至"},mn={prev:"Prev",next:"Next",go:"Go",jump:"Jump To"},gn={prev:"前のページ",next:"次のページ",go:"へ",jump:"ジャンプ"},yn={prev:"이전 페이지",next:"다음 페이지",go:"행",jump:"건너뛰기"};var bn={data:function(){return{changePage:"",pageSize:10}},props:{total:{type:Number,default:10},perPage:{type:Number,default:10},currentPage:{type:Number,default:1}},computed:{pages:function(){var t=this.pageSize||this.perPage;return Math.ceil(this.total/t)},show:function(){return this.pages&&1!=this.pages},efont:function(){return!(this.pages<=7)&&this.currentPage>5},indexs:function(){var t=1,e=this.pages,n=[];for(this.pages>=7&&(this.currentPage>5&&this.currentPage1&&this.emit(--t)},goNext:function(){var t=this.currentPage;t0?this.emit(e):alert("请输入大于0,并且小于".concat(this.pages,"的页码!"))},emit:function(t){this.$emit("getCurrentPage",t)}}},wn=(n(379),Object(We.a)(bn,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{directives:[{name:"show",rawName:"v-show",value:t.show,expression:"show"}],staticClass:"pagation"},[n("div",{staticClass:"pagation-list"},[n("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage>1,expression:"currentPage > 1"}],staticClass:"jump",attrs:{unselectable:"on"},on:{click:t.goPrev}},[t._v(t._s(t.pagationLocales.prev))]),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.efont,expression:"efont"}],staticClass:"jump",on:{click:function(e){return t.jumpPage(1)}}},[t._v("1")]),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.efont,expression:"efont"}],staticClass:"ellipsis"},[t._v("...")]),t._v(" "),t._l(t.indexs,(function(e){return n("span",{key:e,staticClass:"jump",class:{bgprimary:t.currentPage==e},on:{click:function(n){return t.jumpPage(e)}}},[t._v(t._s(e))])})),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.efont&&t.currentPageObject(In.stringify)(t),Mn=(t,e)=>`${t}${Object(In.stringify)(e,{addQueryPrefix:!0})}`,Ln=(t,e)=>`${t.replace(/\/$/,"")}/${e.replace(/^\//,"")}`;var Nn=n(226),Fn=n.n(Nn);const zn=t=>Fn()(t,"YYYY-MM-DD HH:mm:ss"),Dn=t=>(t.split("#")[0]||"").split("?")[0]||"",Un=t=>Object(In.parse)(t,{ignoreQueryPrefix:!0}) /*! * vue-i18n v8.25.0 * (c) 2021 kazuya kawaguchi @@ -65,4 +65,4 @@ MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. -***************************************************************************** */function Nr(t,e,n,r){var o,i=arguments.length,a=i<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,n,r);else for(var s=t.length-1;s>=0;s--)(o=t[s])&&(a=(i<3?o(a):i>3?o(e,n,a):o(e,n))||a);return i>3&&a&&Object.defineProperty(e,n,a),a}var Fr=i.default.extend({name:"Iconfont"});function zr(t,e,n,r,o,i,a,s,c,u){"boolean"!=typeof a&&(c=s,s=a,a=!1);const l="function"==typeof n?n.options:n;let f;if(t&&t.render&&(l.render=t.render,l.staticRenderFns=t.staticRenderFns,l._compiled=!0,o&&(l.functional=!0)),r&&(l._scopeId=r),i?(f=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,c(t)),t&&t._registeredComponents&&t._registeredComponents.add(i)},l._ssrRegister=f):e&&(f=a?function(t){e.call(this,u(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,s(t))}),f)if(l.functional){const t=l.render;l.render=function(e,n){return f.call(n),t(e,n)}}else{const t=l.beforeCreate;l.beforeCreate=t?[].concat(t,f):[f]}return n}"undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());const Dr=zr({render:function(t,e){var n=e._c;return n("svg",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}]},[n("symbol",{attrs:{id:"vssue-icon-bitbucket",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M579.5522464 489.45249493q4.8371808 38.38537173-30.81752427 61.55702827t-67.95459093 3.66689493q-23.79580907-10.37653333-32.6119616-35.34262826t-0.31207573-50.01020907 31.67573333-35.34262827q21.92335253-11.00068587 44.1587808-7.33379093t39.00952427 21.61127573 16.77409493 41.1160384zM647.19476053 476.65737173q-8.50407573-65.22392427-68.8908192-99.9424t-120.07131413-7.9579424q-38.38537173 17.08617173-61.24495253 53.9111616t-21.0651424 78.95527574q2.41859093 55.4715424 47.20152426 94.48106666t100.87862827 34.1723424q55.4715424-4.8371808 92.60860907-51.18049493t30.50544746-102.43900907zM792.93434133 146.32472427q-12.17097173-16.4620192-34.1723424-27.15062827t-35.34262826-13.41927573-43.30057174-7.64586667q-177.33729493-28.63299093-345.00022826 1.24830507-26.2144 4.29104747-40.25782827 7.33379093t-33.54819093 13.41927573-30.50544747 26.2144q18.2564576 17.08617173 46.34331413 27.6967616t44.78293334 13.41927574 53.36502826 7.02171413q138.95192427 17.71032427 273.06666667 0.62415253 38.38537173-4.8371808 54.53531413-7.33379093t44.1587808-13.1072 45.7191616-28.32091413zM827.65281813 777.10872427q-4.8371808 15.83786667-9.44030506 46.65539093t-8.50407574 51.18049493-17.39824746 42.6764192-35.34262827 34.4064q-52.4288 29.2571424-115.46819093 43.61264747t-123.1140576 13.41927573-122.8019808-11.3127616q-28.0088384-4.8371808-49.69813334-11.00068586t-46.65539093-16.4620192-44.4708576-26.52647574-31.67573333-37.4491424q-15.21371413-58.51428587-34.71847574-177.96144746l3.66689494-9.7523808 11.00068586-5.46133334q135.9091808 90.1900192 308.72137174 90.1900192t309.34552426-90.1900192q12.79512427 3.66689493 14.5895616 14.04342827t-3.0427424 27.46270507-4.8371808 22.54750506zM937.97175147 191.41973333q-15.83786667 101.8148576-67.64251414 399.22346667-3.0427424 18.2564576-16.4620192 34.1723424t-26.52647573 24.3419424-33.23611413 18.88060907q-153.61950507 76.7707424-371.8387808 53.67710506-151.12289493-16.4620192-240.14262827-84.72868586-9.12822827-7.33379093-15.52579093-16.1499424t-10.37653334-21.2992-5.46133333-20.75306667-3.66689493-24.10788587-3.3548192-21.2992q-5.46133333-30.50544747-16.1499424-91.43832426t-17.08617174-98.4600384-14.35550506-89.8779424-13.41927574-96.27550507q1.7944384-15.83786667 10.68860907-29.5692192t19.19268587-22.8595808 27.46270506-18.2564576 28.0088384-13.73135253 29.2571424-11.3127616q76.22460907-28.0088384 190.75657174-39.00952427 231.0144-22.54750507 412.01859093 30.50544747 94.48106667 28.0088384 131.072 74.35215253 9.7523808 12.17097173 10.0644576 31.0515808t-3.3548192 32.9240384z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitea",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M184.31868985 236.10860742C106.94832667 235.94086648 3.32655508 285.13080468 9.02973665 408.46209936c8.93218827 192.65010787 206.32096845 210.5144844 285.20099725 212.06608453 8.63864186 36.14810496 101.48307766 160.77938883 170.21479898 167.32127321h301.09442177c180.57278288-11.99345499 315.77172611-546.07960359 215.54670217-548.09249109-165.7696721 7.79993906-264.02374305 11.74184405-348.27147151 12.41280591v166.69224585l-26.25140843-11.61603761-0.16773997-154.99233728c-96.70246985-0.04193548-181.83083757-4.52899687-343.4069947-12.49667687-20.21274496-0.12580547-48.39316992-3.5644886-78.67035236-3.64835859z m10.94507577 68.14462849h9.22573371c10.98701124 98.75729283 28.85138778 156.50200291 64.99949274 244.73357185-92.25734394-10.90314029-170.75995634-37.69970509-185.18564974-137.75698809-7.46445813-51.78991757 17.69663558-105.84433456 110.96042329-107.01851827z m358.83913087 97.07988723c6.29027343 0.08386999 12.70635233 1.25805468 18.74501482 4.02577499l31.40943263 13.54505513-22.51917887 41.05451824a28.18042496 25.03528825 0 0 0-10.10637297 1.59353561 28.18042496 25.03528825 0 0 0-16.98373825 32.038459 28.18042496 25.03528825 0 0 0 4.69673781 7.29671718l-38.83195528 70.70267333a28.18042496 25.03528825 0 0 0-9.30960467 1.59353659 28.18042496 25.03528825 0 0 0-16.98373825 32.038459 28.18042496 25.03528825 0 0 0 36.06423497 15.09665623 28.18042496 25.03528825 0 0 0 16.94180276-32.08039449 28.18042496 25.03528825 0 0 0-6.62575434-9.22573468l37.82551056-68.85752581a28.18042496 25.03528825 0 0 0 12.28700044-1.25805469 28.18042496 25.03528825 0 0 0 8.93218826-4.69673783c14.59343435 6.12253248 26.54495386 11.11281671 35.14166122 15.34826717 12.91602778 6.37414341 17.48696012 10.60959485 18.87082027 15.30633169 1.38386015 4.61286685-0.12580547 13.50312062-7.42252263 29.10299872-5.45157063 11.61603859-14.46762889 28.09655497-25.11915823 47.51253164a28.18042496 25.03528825 0 0 0-10.52572486 1.59353659 28.18042496 25.03528825 0 0 0-16.98373826 32.038459 28.18042496 25.03528825 0 0 0 36.06423498 15.09665623 28.18042496 25.03528825 0 0 0 16.94180278-32.03845901 28.18042496 25.03528825 0 0 0-5.74511608-8.47090188c10.52572388-19.20630122 19.58371762-35.72875308 25.41270465-48.14155897 7.88380904-16.85793279 11.99345499-29.39654416 8.38703091-41.51580463-3.60642311-12.11926046-14.67730434-20.0030695-29.35460966-27.25785217-9.6450856-4.73867233-21.68047607-9.77089106-36.06423399-15.80955357a28.18042496 25.03528825 0 0 0-1.59353562-10.022502 28.18042496 25.03528825 0 0 0-6.08059796-8.7644483l22.14176246-40.38355541 122.61839638 52.96410227c22.14176247 9.6031511 31.2836262 33.12877372 20.54822685 52.8382968l-84.28966393 154.32137544c-10.77733482 19.66758857-37.23841869 27.80300855-59.38018118 18.24179293l-173.48574115-74.98005927c-22.14176247-9.5612156-31.32556167-33.12877372-20.54822687-52.83829679l84.28966395-154.27943995c7.38058716-13.54505513 22.22563246-21.59660511 37.951317-22.22563246h2.68384935z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitee",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M978.404275 409.561604H455.061338c-25.117645 0-45.499734 20.382089-45.499734 45.499734l-0.031997 113.781333c0 25.117645 20.350092 45.499734 45.499734 45.531731h318.594132c25.117645 0 45.499734 20.382089 45.499734 45.499735v22.749867a136.5312 136.5312 0 0 1-136.5312 136.5312H250.248539a45.499734 45.499734 0 0 1-45.499734-45.499734V341.343999a136.5312 136.5312 0 0 1 136.5312-136.5312L978.308284 204.780802c25.117645 0 45.499734-20.350092 45.499734-45.467738L1023.904009 45.531731h0.031997A45.499734 45.499734 0 0 0 978.468269 0h-0.031997L341.343999 0.031997C152.84967 0.031997 0.031997 152.84967 0.031997 341.343999v637.092273c0 25.117645 20.382089 45.499734 45.499734 45.499734h671.233072a307.171203 307.171203 0 0 0 307.171203-307.171203v-261.671468c0-25.117645-20.382089-45.499734-45.499734-45.499734z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-github",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M512 20.4425c-278.334 0-504 225.6345-504 504 0 222.6735 144.4275 411.6105 344.673 478.233 25.2 4.662 34.461-10.9305 34.461-24.255 0-12.0015-0.4725-51.723-0.693-93.8385-140.238 30.492-169.8165-59.472-169.8165-59.472-22.932-58.2435-55.944-73.7415-55.944-73.7415-45.738-31.2795 3.465-30.6495 3.465-30.6495 50.589 3.5595 77.238 51.9435 77.238 51.9435 44.9505 77.049 117.9045 54.7785 146.664 41.895 4.5045-32.571 17.577-54.81 32.004-67.41-111.951-12.726-229.635-55.9755-229.635-249.0705 0-55.0305 19.6875-99.981 51.9435-135.2925-5.229-12.6945-22.491-63.945 4.8825-133.371 0 0 42.336-13.545 138.6315 51.66 40.194-11.1825 83.3175-16.758 126.1575-16.9785 42.8085 0.189 85.9635 5.796 126.252 16.9785 96.201-65.205 138.4425-51.66 138.4425-51.66 27.4365 69.426 10.1745 120.6765 4.9455 133.371 32.319 35.28 51.8805 80.262 51.8805 135.2925 0 193.5675-117.9045 236.187-230.139 248.6925 18.081 15.6555 34.1775 46.305 34.1775 93.3345 0 67.4415-0.5985 121.716-0.5985 138.3165 0 13.419 9.072 29.1375 34.6185 24.192 200.151-66.717 344.3895-255.5595 344.3895-478.17 0-278.3655-225.666-504-504-504z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitlab",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M66.61375986 405.11600042L512.11376028 976.03999972 23.84576 621.65599958a39.312 39.312 0 0 1-14.07600042-43.30799944l56.8080007-173.26800028z m259.88400014 0h371.26800014L512.14975986 976.03999972zM215.11376 60.88400042l111.384 344.232H66.61375986l111.384-344.232a19.72800014 19.72800014 0 0 1 37.11600014 0z m742.49999972 344.232l56.8080007 173.2679993a39.23999986 39.23999986 0 0 1-14.07600042 43.30800042l-488.26800028 354.38400014 445.50000042-570.92400028z m0 0h-259.88400014l111.384-344.232a19.72800014 19.72800014 0 0 1 37.11600014 0z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-loading",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M843.307 742.24c0 3.217 2.607 5.824 5.824 5.824s5.824-2.607 5.824-5.824a5.823 5.823 0 0 0-5.824-5.824 5.823 5.823 0 0 0-5.824 5.824zM714.731 874.912c0 6.398 5.186 11.584 11.584 11.584s11.584-5.186 11.584-11.584-5.186-11.584-11.584-11.584-11.584 5.186-11.584 11.584zM541.419 943.2c0 9.614 7.794 17.408 17.408 17.408s17.408-7.794 17.408-17.408-7.794-17.408-17.408-17.408-17.408 7.794-17.408 17.408z m-186.56-9.152c0 12.795 10.373 23.168 23.168 23.168s23.168-10.373 23.168-23.168-10.373-23.168-23.168-23.168-23.168 10.373-23.168 23.168zM189.355 849.12c0 16.012 12.98 28.992 28.992 28.992s28.992-12.98 28.992-28.992-12.98-28.992-28.992-28.992-28.992 12.98-28.992 28.992zM74.731 704.736c0 19.228 15.588 34.816 34.816 34.816s34.816-15.588 34.816-34.816-15.588-34.816-34.816-34.816-34.816 15.588-34.816 34.816z m-43.008-177.28c0 22.41 18.166 40.576 40.576 40.576s40.576-18.166 40.576-40.576-18.166-40.576-40.576-40.576-40.576 18.166-40.576 40.576z m35.392-176.128c0 25.626 20.774 46.4 46.4 46.4s46.4-20.774 46.4-46.4c0-25.626-20.774-46.4-46.4-46.4-25.626 0-46.4 20.774-46.4 46.4z m106.176-142.016c0 28.843 23.381 52.224 52.224 52.224s52.224-23.381 52.224-52.224c0-28.843-23.381-52.224-52.224-52.224-28.843 0-52.224 23.381-52.224 52.224z m155.904-81.344c0 32.024 25.96 57.984 57.984 57.984s57.984-25.96 57.984-57.984-25.96-57.984-57.984-57.984-57.984 25.96-57.984 57.984z m175.104-5.056c0 35.24 28.568 63.808 63.808 63.808s63.808-28.568 63.808-63.808c0-35.24-28.568-63.808-63.808-63.808-35.24 0-63.808 28.568-63.808 63.808z m160.32 72.128c0 38.421 31.147 69.568 69.568 69.568s69.568-31.147 69.568-69.568-31.147-69.568-69.568-69.568-69.568 31.147-69.568 69.568z m113.92 135.488c0 41.638 33.754 75.392 75.392 75.392s75.392-33.754 75.392-75.392-33.754-75.392-75.392-75.392-75.392 33.754-75.392 75.392z m45.312 175.488c0 44.854 36.362 81.216 81.216 81.216s81.216-36.362 81.216-81.216c0-44.854-36.362-81.216-81.216-81.216-44.854 0-81.216 36.362-81.216 81.216z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-like",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M885.9 533.7c16.8-22.2 26.1-49.4 26.1-77.7 0-44.9-25.1-87.4-65.5-111.1a67.67 67.67 0 0 0-34.3-9.3H572.4l6-122.9c1.4-29.7-9.1-57.9-29.5-79.4-20.5-21.5-48.1-33.4-77.9-33.4-52 0-98 35-111.8 85.1l-85.9 311H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h601.3c9.2 0 18.2-1.8 26.5-5.4 47.6-20.3 78.3-66.8 78.3-118.4 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7-0.2-12.6-2-25.1-5.6-37.1zM184 852V568h81v284h-81z m636.4-353l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 22.4-13.2 42.6-33.6 51.8H329V564.8l99.5-360.5c5.2-18.9 22.5-32.2 42.2-32.3 7.6 0 15.1 2.2 21.1 6.7 9.9 7.4 15.2 18.6 14.6 30.5l-9.6 198.4h314.4C829 418.5 840 436.9 840 456c0 16.5-7.2 32.1-19.6 43z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-unlike",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M885.9 490.3c3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-51.6-30.7-98.1-78.3-118.4-8.3-3.6-17.2-5.4-26.5-5.4H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h129.3l85.8 310.8C372.9 889 418.9 924 470.9 924c29.7 0 57.4-11.8 77.9-33.4 20.5-21.5 31-49.7 29.5-79.4l-6-122.9h239.9c12.1 0 23.9-3.2 34.3-9.3 40.4-23.5 65.5-66.1 65.5-111 0-28.3-9.3-55.5-26.1-77.7zM184 456V172h81v284h-81z m627.2 160.4H496.8l9.6 198.4c0.6 11.9-4.7 23.1-14.6 30.5-6.1 4.5-13.6 6.8-21.1 6.7-19.6-0.1-36.9-13.4-42.2-32.3L329 459.2V172h415.4c20.4 9.2 33.6 29.4 33.6 51.8 0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 9.7-2.3 18.9-6.9 27.3l-14 25.5 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 19.1-11 37.5-28.8 48.4z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-heart",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M923 283.6c-13.4-31.1-32.6-58.9-56.9-82.8-24.3-23.8-52.5-42.4-84-55.5-32.5-13.5-66.9-20.3-102.4-20.3-49.3 0-97.4 13.5-139.2 39-10 6.1-19.5 12.8-28.5 20.1-9-7.3-18.5-14-28.5-20.1-41.8-25.5-89.9-39-139.2-39-35.5 0-69.9 6.8-102.4 20.3-31.4 13-59.7 31.7-84 55.5-24.4 23.9-43.5 51.7-56.9 82.8-13.9 32.3-21 66.6-21 101.9 0 33.3 6.8 68 20.3 103.3 11.3 29.5 27.5 60.1 48.2 91 32.8 48.9 77.9 99.9 133.9 151.6 92.8 85.7 184.7 144.9 188.6 147.3l23.7 15.2c10.5 6.7 24 6.7 34.5 0l23.7-15.2c3.9-2.5 95.7-61.6 188.6-147.3 56-51.7 101.1-102.7 133.9-151.6 20.7-30.9 37-61.5 48.2-91 13.5-35.3 20.3-70 20.3-103.3 0.1-35.3-7-69.6-20.9-101.9zM512 814.8S156 586.7 156 385.5C156 283.6 240.3 201 344.3 201c73.1 0 136.5 40.8 167.7 100.4C543.2 241.8 606.6 201 679.7 201c104 0 188.3 82.6 188.3 184.5 0 201.2-356 429.3-356 429.3z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-edit",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M723.2 917.76H286.72c-65.28 0-118.4-51.2-118.4-113.92V261.76C168.32 198.4 221.44 147.2 286.72 147.2h375.04c17.92 0 32 14.08 32 32s-14.08 32-32 32H286.72c-30.08 0-54.4 22.4-54.4 49.92v542.08c0 27.52 24.32 49.92 54.4 49.92H723.2c30.08 0 54.4-22.4 54.4-49.92V440.32c0-17.92 14.08-32 32-32s32 14.08 32 32v363.52c0 62.72-53.12 113.92-118.4 113.92z"}}),e._v(" "),n("path",{attrs:{d:"M499.84 602.24c-7.68 0-14.72-2.56-21.12-7.68-13.44-11.52-14.72-32-3.2-45.44L780.16 198.4c11.52-13.44 32-14.72 45.44-3.2s14.72 32 3.2 45.44L524.16 591.36c-6.4 7.04-15.36 10.88-24.32 10.88z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-delete",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M677.647059 256l0-90.352941c0-37.436235-23.461647-60.235294-61.771294-60.235294L408.094118 105.411765c-38.249412 0-61.741176 22.799059-61.741176 60.235294l0 90.352941-180.705882 0 0 60.235294 60.235294 0 0 512c0 54.272 33.972706 90.352941 90.352941 90.352941l391.529412 0c55.085176 0 90.352941-33.490824 90.352941-90.352941l0-512 60.235294 0 0-60.235294L677.647059 256zM406.588235 165.647059l210.823529 0-1.264941 90.352941L406.588235 256 406.588235 165.647059zM737.882353 858.352941l-451.764706 0 0-542.117647 451.764706 0L737.882353 858.352941zM466.823529 376.470588l-58.729412 0-1.505882 391.529412 60.235294 0L466.823529 376.470588zM617.411765 376.470588l-60.235294 0 0 391.529412 60.235294 0L617.411765 376.470588z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-reply",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M426.666667 384 426.666667 213.333333 128 512 426.666667 810.666667 426.666667 635.733333C640 635.733333 789.333333 704 896 853.333333 853.333333 640 725.333333 426.666667 426.666667 384Z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-error",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M512 720m-48 0a48 48 0 1 0 96 0 48 48 0 1 0-96 0Z"}}),e._v(" "),n("path",{attrs:{d:"M480 416v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8z"}}),e._v(" "),n("path",{attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48z m-783.5-27.9L512 239.9l339.8 588.2H172.2z"}})])])},staticRenderFns:[]},void 0,Fr,void 0,!0,void 0,!1,void 0,void 0,void 0);const Ur=zr({},void 0,i.default.extend({name:"TransitionFade",functional:!0,props:{group:{type:Boolean,required:!1,default:!1},tag:{type:String,required:!1,default:"div"}},render:(t,{props:e,children:n})=>t(e.group?"TransitionGroup":"Transition",{props:{name:"fade",mode:"out-in",appear:!0,tag:e.tag}},n)}),void 0,void 0,void 0,!1,void 0,void 0,void 0);const Br=zr({},void 0,i.default.extend({name:"VssueIcon",functional:!0,props:{name:{type:String,required:!0},title:{type:String,required:!1,default:null}},render:(t,{props:e,data:n})=>t("svg",Object.assign(Object.assign({},n),{class:["vssue-icon","vssue-icon-"+e.name],attrs:{"aria-hidden":"true"}}),[t("title",e.title),t("use",{attrs:{"xlink:href":"#vssue-icon-"+e.name}})])}),void 0,void 0,void 0,!1,void 0,void 0,void 0);let qr=class extends i.default{constructor(){super(...arguments),this.editMode=!1,this.editContent=this.comment.contentRaw,this.creatingReactions=[],this.isPutingComment=!1,this.isDeletingComment=!1}get currentUser(){return this.vssue.user?this.vssue.user.username:null}get content(){return this.comment.content}get author(){return this.comment.author}get createdAt(){return zn(this.comment.createdAt)}get updatedAt(){return zn(this.comment.updatedAt)}get showReactions(){return Boolean(this.vssue.API&&this.vssue.API.platform.meta.reactable&&this.comment.reactions&&!this.editMode)}get reactionKeys(){return["heart","like","unlike"]}get editContentRows(){return this.editContent.split("\n").length-1}get editInputRows(){return this.editContentRows<3?5:this.editContentRows+2}async postReaction({reaction:t}){try{if(this.creatingReactions.includes(t))return;this.creatingReactions.push(t);await this.vssue.postCommentReaction({commentId:this.comment.id,reaction:t})||this.vssue.$emit("error",new Error(this.vssue.$t("reactionGiven",{reaction:this.vssue.$t(t)})));const e=await this.vssue.getCommentReactions({commentId:this.comment.id});e&&(this.comment.reactions=e)}finally{this.creatingReactions.splice(this.creatingReactions.findIndex(e=>e===t),1)}}enterEdit(){this.editMode=!0,this.$nextTick(()=>{this.$refs.input.focus()})}resetEdit(){this.editMode=!1,this.editContent=this.comment.contentRaw}async putComment(){try{if(this.vssue.isPending)return;if(this.editContent!==this.comment.contentRaw){this.isPutingComment=!0,this.vssue.isUpdatingComment=!0;const t=await this.vssue.putComment({commentId:this.comment.id,content:this.editContent});t&&this.vssue.comments.data.splice(this.vssue.comments.data.findIndex(t=>t.id===this.comment.id),1,t)}this.editMode=!1}finally{this.isPutingComment=!1,this.vssue.isUpdatingComment=!1}}async deleteComment(){try{if(this.vssue.isPending)return;if(!window.confirm(this.vssue.$t("deleteConfirm")))return;this.isDeletingComment=!0,this.vssue.isUpdatingComment=!0;await this.vssue.deleteComment({commentId:this.comment.id})?(this.vssue.comments.count-=1,this.vssue.comments.data.length>1&&this.vssue.comments.data.splice(this.vssue.comments.data.findIndex(t=>t.id===this.comment.id),1),this.vssue.query.page>1&&this.vssue.query.page>Math.ceil(this.vssue.comments.count/this.vssue.query.perPage)?this.vssue.query.page-=1:await this.vssue.getComments()):this.vssue.$emit("error",new Error(this.vssue.$t("deleteFailed")))}finally{this.isDeletingComment=!1,this.vssue.isUpdatingComment=!1}}};Nr([Tn({type:Object,required:!0})],qr.prototype,"comment",void 0),Nr([On()],qr.prototype,"vssue",void 0),qr=Nr([Object(kn.b)({components:{VssueIcon:Br}})],qr);const Vr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-comment",class:{"vssue-comment-edit-mode":t.editMode,"vssue-comment-disabled":t.isDeletingComment||t.isPutingComment}},[n("div",{staticClass:"vssue-comment-avatar"},[n("a",{attrs:{href:t.author.homepage,title:t.author.username,target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:t.author.avatar,alt:t.author.username}})])]),t._v(" "),n("div",{staticClass:"vssue-comment-body"},[t._t("body",[n("div",{staticClass:"vssue-comment-header"},[n("span",{staticClass:"vssue-comment-author"},[n("a",{attrs:{href:t.author.homepage,title:t.author.username,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n "+t._s(t.author.username)+"\n ")])]),t._v(" "),n("span",{staticClass:"vssue-comment-created-at"},[t._v("\n "+t._s(t.createdAt)+"\n ")])]),t._v(" "),n("div",{staticClass:"vssue-comment-main"},[t.editMode?n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.editContent,expression:"editContent"}],ref:"input",staticClass:"vssue-edit-comment-input",attrs:{rows:t.editInputRows},domProps:{value:t.editContent},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:e.ctrlKey?t.putComment():null},input:function(e){e.target.composing||(t.editContent=e.target.value)}}}):n("article",{staticClass:"markdown-body",domProps:{innerHTML:t._s(t.content)}})]),t._v(" "),n("div",{staticClass:"vssue-comment-footer"},[t.editMode?n("span",{staticClass:"vssue-comment-hint"},[t._v("\n "+t._s(t.vssue.$t("editMode"))+"\n ")]):t._e(),t._v(" "),t.showReactions?n("span",{staticClass:"vssue-comment-reactions"},t._l(t.reactionKeys,(function(e){return n("span",{key:e,staticClass:"vssue-comment-reaction",attrs:{title:t.vssue.$t(t.creatingReactions.includes(e)?"loading":e)},on:{click:function(n){return t.postReaction({reaction:e})}}},[n("VssueIcon",{attrs:{name:t.creatingReactions.includes(e)?"loading":e,title:t.vssue.$t(t.creatingReactions.includes(e)?"loading":e)}}),t._v(" "),n("span",{staticClass:"vssue-comment-reaction-number"},[t._v("\n "+t._s(t.comment.reactions[e])+"\n ")])],1)})),0):t._e(),t._v(" "),n("span",{staticClass:"vssue-comment-operations"},[t.comment.author.username===t.currentUser&&t.editMode?n("span",{staticClass:"vssue-comment-operation",class:{"vssue-comment-operation-muted":t.isPutingComment},attrs:{title:t.vssue.$t(t.isPutingComment?"loading":"submit")},on:{click:function(e){return t.putComment()}}},[n("VssueIcon",{directives:[{name:"show",rawName:"v-show",value:t.isPutingComment,expression:"isPutingComment"}],attrs:{name:"loading",title:t.vssue.$t("loading")}}),t._v("\n\n "+t._s(t.vssue.$t("submit"))+"\n ")],1):t._e(),t._v(" "),t.comment.author.username===t.currentUser&&t.editMode?n("span",{staticClass:"vssue-comment-operation vssue-comment-operation-muted",attrs:{title:t.vssue.$t("cancel")},on:{click:function(e){return t.resetEdit()}}},[t._v("\n "+t._s(t.vssue.$t("cancel"))+"\n ")]):t._e(),t._v(" "),t.comment.author.username===t.currentUser?n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.enterEdit()}}},[n("VssueIcon",{attrs:{name:"edit",title:t.vssue.$t("edit")}})],1):t._e(),t._v(" "),t.comment.author.username===t.currentUser||t.vssue.isAdmin?n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.deleteComment()}}},[n("VssueIcon",{attrs:{name:t.isDeletingComment?"loading":"delete",title:t.vssue.$t(t.isDeletingComment?"loading":"delete")}})],1):t._e(),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.vssue.$emit("reply-comment",t.comment)}}},[n("VssueIcon",{attrs:{name:"reply",title:t.vssue.$t("reply")}})],1)])])])],2)])},staticRenderFns:[]},void 0,qr,void 0,!1,void 0,!1,void 0,void 0,void 0);let Hr=class extends i.default{get disabled(){return this.vssue.isPending}get pageCount(){const t=Math.ceil(this.vssue.comments.count/this.vssue.comments.perPage);return t>1?t:1}get perPageOptions(){const t=[5,10,20,50];return!t.includes(this.vssue.options.perPage)&&this.vssue.options.perPage<100&&t.push(this.vssue.options.perPage),t.sort((t,e)=>t-e)}get page(){return this.vssue.query.page>this.pageCount?this.pageCount:this.vssue.query.page}set page(t){t>0&&t<=this.pageCount&&(this.vssue.query.page=t)}get perPage(){return this.vssue.query.perPage}set perPage(t){this.perPageOptions.includes(t)&&(this.vssue.query.perPage=t)}};Nr([On()],Hr.prototype,"vssue",void 0),Hr=Nr([Object(kn.b)({components:{VssueIcon:Br}})],Hr);const Wr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-pagination"},[n("div",{staticClass:"vssue-pagination-per-page"},[n("label",[n("select",{directives:[{name:"model",rawName:"v-model",value:t.perPage,expression:"perPage"}],staticClass:"vssue-pagination-select",attrs:{disabled:t.disabled},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.perPage=e.target.multiple?n:n[0]}}},t._l(t.perPageOptions,(function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(e)+"\n ")])})),0),t._v(" "),n("span",[t._v("\n "+t._s(t.vssue.$t("perPage"))+"\n ")])]),t._v(" "),t.vssue.API.platform.meta.sortable?n("span",{class:{"vssue-pagination-link":!0,disabled:t.disabled},attrs:{title:t.vssue.$t("sort")},on:{click:function(e){t.vssue.query.sort="asc"===t.vssue.query.sort?"desc":"asc"}}},[t._v("\n "+t._s("asc"===t.vssue.query.sort?"↑":"↓")+"\n ")]):t._e()]),t._v(" "),n("div",{staticClass:"vssue-pagination-page"},[n("span",{class:{"vssue-pagination-link":!0,disabled:1===t.page||t.disabled},attrs:{title:t.vssue.$t("prev")},domProps:{textContent:t._s("<")},on:{click:function(e){t.page-=1}}}),t._v(" "),n("label",[n("span",[t._v("\n "+t._s(t.vssue.$t("page"))+"\n ")]),t._v(" "),n("select",{directives:[{name:"show",rawName:"v-show",value:t.pageCount>1,expression:"pageCount > 1"},{name:"model",rawName:"v-model",value:t.page,expression:"page"}],staticClass:"vssue-pagination-select",attrs:{disabled:t.disabled},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.page=e.target.multiple?n:n[0]}}},t._l(t.pageCount,(function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(e)+"\n ")])})),0),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.pageCount<2,expression:"pageCount < 2"}],domProps:{textContent:t._s(t.page)}}),t._v(" "),n("span",{domProps:{textContent:t._s(" / "+t.pageCount+" ")}})]),t._v(" "),n("span",{class:{"vssue-pagination-link":!0,disabled:t.page===t.pageCount||t.disabled},attrs:{title:t.vssue.$t("next")},domProps:{textContent:t._s(">")},on:{click:function(e){t.page+=1}}})])])},staticRenderFns:[]},void 0,Hr,void 0,!1,void 0,!1,void 0,void 0,void 0);let Gr=class extends i.default{};Nr([On()],Gr.prototype,"vssue",void 0),Gr=Nr([Object(kn.b)({components:{TransitionFade:Ur,VssueComment:Vr,VssuePagination:Wr}})],Gr);const Qr=zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vssue-comments"},[e("VssuePagination"),this._v(" "),e("TransitionFade",{attrs:{group:""}},this._l(this.vssue.comments.data,(function(t){return e("VssueComment",{key:t.id,attrs:{comment:t}})})),1),this._v(" "),e("VssuePagination",{directives:[{name:"show",rawName:"v-show",value:this.vssue.comments.data.length>5,expression:"vssue.comments.data.length > 5"}]})],1)},staticRenderFns:[]},void 0,Gr,void 0,!1,void 0,!1,void 0,void 0,void 0);const Yr=zr({},void 0,i.default.extend({name:"VssueIcon",functional:!0,props:{type:{type:String,required:!1,default:"default"}},render:(t,{props:e,data:n,children:r})=>t("button",Object.assign(Object.assign({},n),{class:["vssue-button","vssue-button-"+e.type]}),r)}),void 0,void 0,void 0,!1,void 0,void 0,void 0);let Kr=class extends i.default{constructor(){super(...arguments),this.content=""}get user(){return this.vssue.user}get platform(){return this.vssue.API&&this.vssue.API.platform.name}get isInputDisabled(){return this.loading||null===this.user||null===this.vssue.issue}get isSubmitDisabled(){return""===this.content||this.vssue.isPending||null===this.vssue.issue}get loading(){return this.vssue.isCreatingComment}get contentRows(){return this.content.split("\n").length-1}get inputRows(){return this.contentRows<3?5:this.contentRows+2}created(){this.vssue.$on("reply-comment",t=>{const e=t.contentRaw.replace(/\n/g,"\n> "),n=`@${t.author.username}\n\n> ${e}\n\n`;this.content=this.content.concat(n),this.focus()})}beforeDestroy(){this.vssue.$off("reply-comment")}focus(){this.$refs.input.focus()}async submit(){this.isSubmitDisabled||(await this.vssue.postComment({content:this.content}),this.content="",await this.vssue.getComments())}};Nr([On()],Kr.prototype,"vssue",void 0),Kr=Nr([Object(kn.b)({components:{VssueButton:Yr,VssueIcon:Br}})],Kr);const Jr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-new-comment"},[n("div",{staticClass:"vssue-comment-avatar"},[t.user?n("a",{attrs:{href:t.user.homepage,title:t.user.username,target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:t.user.avatar,alt:t.user.username}})]):n("VssueIcon",{attrs:{name:t.platform.toLowerCase(),title:t.vssue.$t("loginToComment",{platform:t.platform})},on:{click:function(e){return t.vssue.login()}}})],1),t._v(" "),n("div",{staticClass:"vssue-new-comment-body"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.content,expression:"content"}],ref:"input",staticClass:"vssue-new-comment-input",attrs:{rows:t.inputRows,disabled:t.isInputDisabled,placeholder:t.vssue.$t(t.user?"placeholder":"noLoginPlaceHolder"),spellcheck:!1,"aria-label":"leave a comment"},domProps:{value:t.content},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:e.ctrlKey?t.submit():null},input:function(e){e.target.composing||(t.content=e.target.value)}}})]),t._v(" "),n("div",{staticClass:"vssue-new-comment-footer"},[t.user?n("span",{staticClass:"vssue-current-user"},[n("span",[t._v(t._s(t.vssue.$t("currentUser"))+" - "+t._s(t.user.username)+" - ")]),t._v(" "),n("a",{staticClass:"vssue-logout",on:{click:function(e){return t.vssue.logout()}}},[t._v("\n "+t._s(t.vssue.$t("logout"))+"\n ")])]):n("span",{staticClass:"vssue-current-user"},[t._v("\n "+t._s(t.vssue.$t("loginToComment",{platform:t.platform}))+"\n ")]),t._v(" "),n("div",{staticClass:"vssue-new-comment-operations"},[t.user?n("VssueButton",{staticClass:"vssue-button-submit-comment",attrs:{type:"primary",disabled:t.isSubmitDisabled},on:{click:function(e){return t.submit()}}},[n("VssueIcon",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],attrs:{name:"loading"}}),t._v("\n\n "+t._s(t.vssue.$t(t.loading?"submitting":"submitComment"))+"\n ")],1):n("VssueButton",{staticClass:"vssue-button-login",attrs:{type:"primary",title:t.vssue.$t("loginToComment",{platform:t.platform})},on:{click:function(e){return t.vssue.login()}}},[t._v("\n "+t._s(t.vssue.$t("login",{platform:t.platform}))+"\n ")])],1)])])},staticRenderFns:[]},void 0,Kr,void 0,!1,void 0,!1,void 0,void 0,void 0);let Xr=class extends i.default{constructor(){super(...arguments),this.progress={show:!1,percent:0,timer:null,speed:200},this.alert={show:!1,message:null,timer:null}}onLoadingCommentsChange(t){this.vssue.comments&&(t?this.progressStart():this.progressDone())}created(){this.vssue.$on("error",t=>this.alertShow(t.message))}beforeDestroy(){this.vssue.$off("error"),null!==this.progress.timer&&window.clearTimeout(this.progress.timer),null!==this.alert.timer&&window.clearTimeout(this.alert.timer)}progressStart(){this.progress.show=!0,this.progress.percent=0,this.progress.timer=window.setInterval(()=>{this.progress.percent+=5,this.progress.percent>94&&null!==this.progress.timer&&window.clearInterval(this.progress.timer)},this.progress.speed)}progressDone(){this.progress.percent=100,null!==this.progress.timer&&window.clearTimeout(this.progress.timer),this.progress.timer=null,window.setTimeout(()=>{this.progress.show=!1},this.progress.speed)}alertShow(t){this.alert.show=!0,this.alert.message=t,null!==this.alert.timer&&window.clearTimeout(this.alert.timer),this.alert.timer=window.setTimeout(()=>{this.alertHide()},3e3)}alertHide(){this.alert.show=!1,null!==this.alert.timer&&window.clearTimeout(this.alert.timer),this.alert.timer=null}};Nr([On()],Xr.prototype,"vssue",void 0),Nr([Pn("vssue.isLoadingComments")],Xr.prototype,"onLoadingCommentsChange",null),Xr=Nr([Object(kn.b)({components:{TransitionFade:Ur}})],Xr);const Zr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-notice"},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.progress.show,expression:"progress.show"}],staticClass:"vssue-progress",style:{width:t.progress.percent+"%",transition:"all "+t.progress.speed+"ms linear"}}),t._v(" "),n("TransitionFade",[n("div",{directives:[{name:"show",rawName:"v-show",value:t.alert.show,expression:"alert.show"}],staticClass:"vssue-alert",domProps:{textContent:t._s(t.alert.message)},on:{click:function(e){return t.alertHide()}}})])],1)},staticRenderFns:[]},void 0,Xr,void 0,!1,void 0,!1,void 0,void 0,void 0);let to=class extends i.default{get status(){return this.vssue.isFailed?"failed":this.vssue.isInitializing?"initializing":this.vssue.isIssueNotCreated&&!this.vssue.isCreatingIssue?this.vssue.isAdmin||!this.vssue.isLogined?"issueNotCreated":"failed":this.vssue.isLoginRequired?"loginRequired":!this.vssue.comments||this.vssue.isCreatingIssue?"loadingComments":0===this.vssue.comments.data.length?"noComments":null}handleClick(){"issueNotCreated"===this.status?this.vssue.postIssue():"loginRequired"===this.status&&this.vssue.login()}};Nr([On()],to.prototype,"vssue",void 0),to=Nr([Object(kn.b)({components:{TransitionFade:Ur,VssueIcon:Br}})],to);const eo=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("TransitionFade",[t.status?n("div",{key:t.status,staticClass:"vssue-status"},[["failed","loadingComments","initializing"].includes(t.status)?n("VssueIcon",{attrs:{name:"failed"===t.status?"error":"loading"}}):t._e(),t._v(" "),n("p",{staticClass:"vssue-status-info"},[n(["issueNotCreated","loginRequired"].includes(t.status)?"a":"span",{tag:"Component",on:{click:t.handleClick}},[t._v("\n "+t._s(t.vssue.$t(t.status))+"\n ")])],1)],1):t._e()])},staticRenderFns:[]},void 0,to,void 0,!1,void 0,!1,void 0,void 0,void 0);let no=class extends i.default{};Nr([On()],no.prototype,"vssue",void 0),no=Nr([Object(kn.b)({components:{TransitionFade:Ur,VssueIcon:Br,VssueComments:Qr,VssueNewComment:Jr,VssueNotice:Zr,VssueStatus:eo}})],no);const ro=zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("TransitionFade",[this.vssue.isInitializing?e("VssueStatus"):e("div",{staticClass:"vssue-body"},[this.vssue.API?e("VssueNewComment"):this._e(),this._v(" "),e("VssueNotice"),this._v(" "),e("TransitionFade",[this.vssue.comments&&this.vssue.comments.data.length>0?e("VssueComments"):e("VssueStatus")],1)],1)],1)},staticRenderFns:[]},void 0,no,void 0,!1,void 0,!1,void 0,void 0,void 0);let oo=class extends i.default{};Nr([On()],oo.prototype,"vssue",void 0),oo=Nr([kn.b],oo);const io=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-header"},[n("a",{staticClass:"vssue-header-comments-count",attrs:{href:t.vssue.issue?t.vssue.issue.link:null,target:"_blank",rel:"noopener noreferrer"}},[n("span",[t._v("\n "+t._s(t.vssue.comments?t.vssue.$tc("comments",t.vssue.comments.count,{count:t.vssue.comments.count}):t.vssue.$tc("comments",0))+"\n ")])]),t._v(" "),n("span",{staticClass:"vssue-header-powered-by"},[n("span",[t._v("Powered by")]),t._v(" "),t.vssue.API?n("span",[n("a",{attrs:{href:t.vssue.API.platform.link,title:t.vssue.API.platform.name+" API "+t.vssue.API.platform.version,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n "+t._s(t.vssue.API.platform.name)+"\n ")]),t._v(" "),n("span",[t._v("&")])]):t._e(),t._v(" "),n("a",{attrs:{href:"https://github.com/meteorlxy/vssue",title:"Vssue v"+t.vssue.version,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n Vssue\n ")])])])},staticRenderFns:[]},void 0,oo,void 0,!1,void 0,!1,void 0,void 0,void 0),ao={login:"Login with {platform}",logout:"Logout",currentUser:"Current User",loading:"Loading",submit:"Submit",submitting:"Submitting",submitComment:"Submit Comment",cancel:"Cancel",edit:"Edit",editMode:"Edit Mode",delete:"Delete",reply:"Reply",heart:"Heart",like:"Like",unlike:"Unlike",perPage:"Comments per page",sort:"Click to change the sort direction",page:"Page",prev:"Previous Page",next:"Next Page",comments:"Comments | {count} Comment | {count} Comments",loginToComment:"Login with {platform} account to leave a comment",placeholder:"Leave a comment. Styling with Markdown is supported. Ctrl + Enter to submit.",noLoginPlaceHolder:"Login to leave a comment. Styling with Markdown is supported. ",failed:"Failed to load comments",initializing:"Initializing...",issueNotCreated:"Click to create issue",loadingComments:"Loading comments...",loginRequired:"Login to view comments",noComments:"No comments yet. Leave the first comment !",reactionGiven:"Already given '{reaction}' reaction",deleteConfirm:"Confirm to delete this comment ?",deleteFailed:"Failed to delete comment"},so={login:"使用 {platform} 登录",logout:"退出登录",currentUser:"当前用户",loading:"加载中",submit:"提交",submitting:"发表中",submitComment:"发表评论",cancel:"取消",edit:"编辑",editMode:"编辑模式",delete:"删除",reply:"回复",heart:"喜欢",like:"赞",unlike:"踩",perPage:"每页评论数",sort:"点击改变排序方式",page:"页数",prev:"上一页",next:"下一页",comments:"评论 | {count} 条评论 | {count} 条评论",loginToComment:"使用 {platform} 帐号登录后发表评论",placeholder:"留下你的评论丨支持 Markdown 语法丨Ctrl + Enter 发表评论",noLoginPlaceHolder:"登录后才能发表评论丨支持 Markdown 语法",failed:"评论加载失败",initializing:"正在初始化...",issueNotCreated:"点击创建 Issue",loadingComments:"正在加载评论...",loginRequired:"登录后查看评论",noComments:"还没有评论,来发表第一条评论吧!",reactionGiven:"已经添加过 '{reaction}' 了",deleteConfirm:"确认要删除该评论吗?",deleteFailed:"评论删除失败"},co={login:"Entrar com {platform}",logout:"Sair",currentUser:"Usuário Atual",loading:"Carregando",submit:"Enviar",submitting:"Enviando",submitComment:"Enviar Comentário",cancel:"Cancelar",edit:"Editar",editMode:"Modo de Edição",delete:"Apagar",reply:"Responder",heart:"Heart",like:"Like",unlike:"Unlike",perPage:"Comentários por página",sort:"Clique para alterar a ordenação",page:"Página",prev:"Página Anterior",next:"Próxima Página",comments:"Comentários | {count} Comentário | {count} Comentários",loginToComment:"Entre com uma conta {platform} para deixar um comentário",placeholder:"Deixe um comentário. Estilos com Markdown suportados. Ctrl + Enter para enviar.",noLoginPlaceHolder:"Entre para deixar um comentário. Estilos com Markdown suportados. ",failed:"Falha ao carregar comentários",initializing:"Inicializando...",issueNotCreated:"Click to create issue",loadingComments:"Carregando comentários...",loginRequired:"Entrar para visualizar comentários",noComments:"Nenhum comentário. Deixe o primeiro comentário!",reactionGiven:"Já reagiu com '{reaction}'",deleteConfirm:"Apagar este comentário?",deleteFailed:"Falha ao apagar comentário"},uo={login:"{platform} でログイン",logout:"ログアウト",currentUser:"現在のユーザー",loading:"読み込み中",submit:"送信",submitting:"送信中",submitComment:"コメントを送信",cancel:"キャンセル",edit:"編集",editMode:"編集モード",delete:"削除",reply:"返信",heart:"ハート",like:"高評価",unlike:"低評価",perPage:"コメント/ページ",sort:"並び順を変更するにはクリックしてください",page:"ページ",prev:"前のページ",next:"次のページ",comments:"コメント | {count} コメント | {count} コメント",loginToComment:"コメントを残すには {platform} アカウントでログインしてください。",placeholder:"コメントを残してください。Markdown 記法をサポートしています。 Ctrl + Enter で送信できます。",noLoginPlaceHolder:"コメントを残すにはログインしてください。マークダウン記法をサポートしています。",failed:"コメントの読み込みに失敗しました",initializing:"初期化中...",issueNotCreated:"Click to create issue",loadingComments:"コメントの読み込み中...",loginRequired:"コメントを見るにはログインしてください",noComments:"まだコメントがありません。最初のコメントを残しましょう!",reactionGiven:"既に '{reaction}' のリアクションをしています",deleteConfirm:"本当にコメントを削除してもいいですか?",deleteFailed:"コメントの削除に失敗しました"},lo={login:"התחברו עם {platform}",logout:"התנתקו",currentUser:"משתמש/ת נוכחי/ת",loading:"טוען",submit:"שליחה",submitting:"שולח",submitComment:"שליחת תגובה",cancel:"ביטל",edit:"עריכה",editMode:"מצב עריכה",delete:"מחיקה",reply:"תשובה",heart:"לב",like:"לייק",unlike:"אנלייק",perPage:"תגובות לדף",sort:"לחצו כדי לשנות את כיוון המיון",page:"דף",prev:"הדף הקודם",next:"הדף הבא",comments:"תגובות | {count} תגובה | {count} תגובות",loginToComment:"התחברו עם חשבון {platform} כדי להשאיר תגובה",placeholder:"השאירו תגובה. יש תמיכה בעיצוב בעזרת Markdown. Ctrl + Enter כדי לשלוח.",noLoginPlaceHolder:"התחברו כדי להשאיר תגובה. יש תמיכה בעיצוב בעזרת Markdown. ",failed:"כשלון בטעינת התגובות",initializing:"מאתחל...",issueNotCreated:"לחצו ליצירת issue",loadingComments:"טוען תגובות...",loginRequired:"התחברו כדי לצפות בתגובות",noComments:"עדיין אין תגובות. השאירו תגובה ראשונה !",reactionGiven:"כבר ניתן חיווי '{reaction}'",deleteConfirm:"בטוחים במחיקת התגובה ?",deleteFailed:"כשלון במחיקת התגובה"};Object.prototype.hasOwnProperty.call(i.default,"$i18n")||i.default.use(Lr);const fo=new Lr({locale:"en",fallbackLocale:"en",messages:{en:ao,"en-US":ao,zh:so,"zh-CN":so,pt:co,"pt-BR":co,ja:uo,"ja-JP":uo,he:lo,"he-IL":lo}});let po=class extends i.default{constructor(){super(...arguments),this.title=t=>`${t.prefix}${document.title}`,this.issueId=null,this.options=null,this.API=null,this.accessToken=null,this.user=null,this.issue=null,this.comments=null,this.query={page:1,perPage:10,sort:"desc"},this.isInitializing=!0,this.isIssueNotCreated=!1,this.isLoginRequired=!1,this.isFailed=!1,this.isCreatingIssue=!1,this.isLoadingComments=!1,this.isCreatingComment=!1,this.isUpdatingComment=!1}get version(){return"1.4.8"}get issueTitle(){return null===this.options?"":"function"==typeof this.title?this.title(this.options):`${this.options.prefix}${this.title}`}get isPending(){return this.isLoadingComments||this.isCreatingComment||this.isUpdatingComment}get isLogined(){return null!==this.accessToken&&null!==this.user}get isAdmin(){return null!==this.options&&null!==this.accessToken&&null!==this.user&&(this.user.username===this.options.owner||this.options.admins.includes(this.user.username))}get accessTokenKey(){return this.API?`Vssue.${this.API.platform.name.toLowerCase()}.access_token`:""}onQueryPerPageChange(){this.query.page=1,this.getComments()}onQueryChange(){this.getComments()}setOptions(t){this.options=Object.assign({labels:["Vssue"],state:"Vssue",prefix:"[Vssue]",admins:[],perPage:10,proxy:t=>"https://cors-anywhere.azm.workers.dev/"+t,issueContent:({url:t})=>t,autoCreateIssue:!1},t);const e=["api","owner","repo","clientId"];for(const t of e)this.options[t]||console.warn(`[Vssue] the option '${t}' is required`);if(this.options.locale)this.$i18n.locale=this.options.locale;else{const t=Object.keys(this.$i18n.messages),e=window.navigator.languages;this.$i18n.locale=e.filter(e=>t.includes(e)).shift()||"en"}}async init(){try{await this.initStore(),await this.initComments()}catch(t){t.response&&[401,403].includes(t.response.status)?this.isLoginRequired=!0:this.isFailed=!0,console.error(t)}}async initStore(){try{if(!this.options)throw new Error("Options are required to initialize Vssue");this.API=null,this.accessToken=null,this.user=null,this.issue=null,this.comments=null,this.query={page:1,perPage:this.options.perPage,sort:"desc"},this.isInitializing=!0,this.isIssueNotCreated=!1,this.isLoginRequired=!1,this.isFailed=!1,this.isCreatingIssue=!1,this.isLoadingComments=!1,this.isCreatingComment=!1,this.isUpdatingComment=!1;const t=this.options.api;this.API=new t({baseURL:this.options.baseURL,labels:this.options.labels,state:this.options.state,owner:this.options.owner,repo:this.options.repo,clientId:this.options.clientId,clientSecret:this.options.clientSecret,proxy:this.options.proxy}),await this.handleAuth()}finally{this.isInitializing=!1}}async initComments(){if(this.API&&this.options)if(this.issueId){const[t,e]=await Promise.all([this.API.getIssue({accessToken:this.accessToken,issueId:this.issueId}),this.API.getComments({accessToken:this.accessToken,issueId:this.issueId,query:this.query})]);this.issue=t,this.comments=e}else this.issue=await this.API.getIssue({accessToken:this.accessToken,issueTitle:this.issueTitle}),null===this.issue?(this.isIssueNotCreated=!0,this.options.autoCreateIssue&&await this.postIssue()):await this.getComments()}async postIssue(){if(this.API&&this.options&&!this.issue&&!this.issueId&&(this.isLogined||this.login(),this.isAdmin))try{this.isCreatingIssue=!0;const t=await this.API.postIssue({title:this.issueTitle,content:await this.options.issueContent({options:this.options,url:Dn(window.location.href)}),accessToken:this.accessToken});this.issue=t,this.isIssueNotCreated=!1,await this.getComments()}catch(t){this.isFailed=!0}finally{this.isCreatingIssue=!1}}async getComments(){try{if(!this.API||!this.issue||this.isLoadingComments)return;this.isLoadingComments=!0;const t=await this.API.getComments({accessToken:this.accessToken,issueId:this.issue.id,query:this.query});return this.comments=t,this.query.page!==t.page&&(this.query.page=t.page),this.query.perPage!==t.perPage&&(this.query.perPage=t.perPage),t}catch(t){if(!t.response||![401,403].includes(t.response.status)||this.isLogined)throw this.$emit("error",t),t;this.isLoginRequired=!0}finally{this.isLoadingComments=!1}}async postComment({content:t}){try{if(!this.API||!this.issue||this.isCreatingComment)return;this.isCreatingComment=!0;return await this.API.postComment({accessToken:this.accessToken,content:t,issueId:this.issue.id})}catch(t){throw this.$emit("error",t),t}finally{this.isCreatingComment=!1}}async putComment({commentId:t,content:e}){try{if(!this.API||!this.issue)return;return await this.API.putComment({accessToken:this.accessToken,issueId:this.issue.id,commentId:t,content:e})}catch(t){throw this.$emit("error",t),t}}async deleteComment({commentId:t}){try{if(!this.API||!this.issue)return;return await this.API.deleteComment({accessToken:this.accessToken,issueId:this.issue.id,commentId:t})}catch(t){throw this.$emit("error",t),t}}async getCommentReactions({commentId:t}){try{if(!this.API||!this.issue)return;return await this.API.getCommentReactions({accessToken:this.accessToken,issueId:this.issue.id,commentId:t})}catch(t){throw this.$emit("error",t),t}}async postCommentReaction({commentId:t,reaction:e}){try{if(!this.API||!this.issue)return!1;return await this.API.postCommentReaction({accessToken:this.accessToken,issueId:this.issue.id,commentId:t,reaction:e})}catch(t){throw this.$emit("error",t),t}}login(){this.API&&this.API.redirectAuth()}logout(){this.setAccessToken(null),this.user=null}async handleAuth(){if(!this.API)return;const t=await this.API.handleAuth();t?(this.setAccessToken(t),this.user=await this.API.getUser({accessToken:t})):this.getAccessToken()?this.user=await this.API.getUser({accessToken:this.accessToken}):(this.setAccessToken(null),this.user=null)}getAccessToken(){return this.accessToken=window.localStorage.getItem(this.accessTokenKey),this.accessToken}setAccessToken(t){null===t?window.localStorage.removeItem(this.accessTokenKey):window.localStorage.setItem(this.accessTokenKey,t),this.accessToken=t}};Nr([Pn("query.perPage")],po.prototype,"onQueryPerPageChange",null),Nr([Pn("query.page"),Pn("query.sort")],po.prototype,"onQueryChange",null),po=Nr([Object(kn.b)({i18n:fo})],po);var ho=po;let vo=class extends i.default{constructor(){super(...arguments),this.vssue=new ho}onOptionsChange(t){this.vssue.setOptions(t)}mounted(){null!==this.title&&(this.vssue.title=this.title),null!==this.issueId&&(this.vssue.issueId=this.issueId),this.vssue.setOptions(this.options),this.vssue.init()}};var mo;Nr([Tn({type:[String,Function],required:!1,default:null})],vo.prototype,"title",void 0),Nr([Tn({type:[String,Number],required:!1,default:null})],vo.prototype,"issueId",void 0),Nr([Tn({type:Object,required:!1,default:()=>({})})],vo.prototype,"options",void 0),Nr([(mo="vssue",Object(kn.a)((function(t,e){var n=t.provide;Cn(t),Sn(n)&&(n=t.provide=jn(n)),n.managed[e]=mo||e})))],vo.prototype,"vssue",void 0),Nr([Pn("options",{deep:!0})],vo.prototype,"onOptionsChange",null),vo=Nr([Object(kn.b)({components:{Iconfont:Dr,VssueBody:ro,VssueHeader:io}})],vo);const go=zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vssue"},[e("Iconfont"),this._v(" "),e("VssueHeader"),this._v(" "),e("VssueBody")],1)},staticRenderFns:[]},void 0,vo,void 0,!1,void 0,!1,void 0,void 0,void 0);var yo=n(25),bo=n.n(yo);function wo(t){return{username:t.login,avatar:t.avatar_url,homepage:t.html_url}}function _o(t){return{id:t.number,title:t.title,content:t.body,link:t.html_url}}function xo(t){return{like:t["+1"],unlike:t[-1],heart:t.heart}}function ko(t){return{id:t.id,content:t.body_html,contentRaw:t.body,author:wo(t.user),createdAt:t.created_at,updatedAt:t.updated_at,reactions:xo(t.reactions)}}function Oo(t){return"like"===t?"+1":"unlike"===t?"-1":t}class So{constructor({baseURL:t="https://github.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:a,proxy:s}){if(void 0===i||void 0===s)throw new Error("clientSecret and proxy is required for GitHub V3");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=a,this.proxy=s,this.$http=bo.a.create({baseURL:"https://github.com"===t?"https://api.github.com":Ln(t,"api/v3"),headers:{Accept:"application/vnd.github.v3+json"}}),this.$http.interceptors.response.use(t=>t.data&&t.data.error?Promise.reject(new Error(t.data.error_description)):t,t=>(void 0===t.response&&"Network Error"===t.message&&(t.response={status:403}),Promise.reject(t)))}get platform(){return{name:"GitHub",link:this.baseURL,version:"v3",meta:{reactable:!0,sortable:!1}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"login/oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"public_repo",state:this.state})}async handleAuth(){const t=Un(window.location.search);if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Mn(Dn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Ln(this.baseURL,"login/oauth/access_token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t},{headers:{Accept:"application/json"}});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{headers:{Authorization:"token "+t}});return wo(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"token "+t}),!e){r.params={q:[`"${n}"`,"is:issue","in:title",`repo:${this.owner}/${this.repo}`,"is:public",...this.labels.map(t=>"label:"+t)].join(" "),timestamp:Date.now()};const{data:t}=await this.$http.get("search/issues",r);return t.items.map(_o).find(t=>t.title===n)||null}try{r.params={timestamp:Date.now()};const{data:t}=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}`,r);return _o(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues`,{title:e,body:n,labels:this.labels},{headers:{Authorization:"token "+t}});return _o(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10}={}}){const o={params:{timestamp:Date.now()}},i={params:{page:n,per_page:r,timestamp:Date.now()},headers:{Accept:["application/vnd.github.v3.raw+json","application/vnd.github.v3.html+json","application/vnd.github.squirrel-girl-preview"]}};t&&(o.headers={Authorization:"token "+t},i.headers.Authorization="token "+t);const[a,s]=await Promise.all([this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}`,o),this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,i)]),c=s.headers.link||null,u=/rel="next"/.test(c)?Number(c.replace(/^.*[^_]page=(\d*).*rel="next".*$/,"$1"))-1:/rel="prev"/.test(c)?Number(c.replace(/^.*[^_]page=(\d*).*rel="prev".*$/,"$1"))+1:1,l=c?Number(c.replace(/^.*per_page=(\d*).*$/,"$1")):r;return{count:Number(a.data.comments),page:u,perPage:l,data:s.data.map(ko)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,{body:n},{headers:{Authorization:"token "+t,Accept:["application/vnd.github.v3.raw+json","application/vnd.github.v3.html+json","application/vnd.github.squirrel-girl-preview"]}});return ko(r)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.patch(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{body:n},{headers:{Authorization:"token "+t,Accept:["application/vnd.github.v3.raw+json","application/vnd.github.v3.html+json","application/vnd.github.squirrel-girl-preview"]}});return ko(r)}async deleteComment({accessToken:t,commentId:e}){const{status:n}=await this.$http.delete(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{headers:{Authorization:"token "+t}});return 204===n}async getCommentReactions({accessToken:t,commentId:e}){const{data:n}=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{params:{timestamp:Date.now()},headers:{Authorization:"token "+t,Accept:"application/vnd.github.squirrel-girl-preview"}});return xo(n.reactions)}async postCommentReaction({accessToken:t,commentId:e,reaction:n}){const r=await this.$http.post(`repos/${this.owner}/${this.repo}/issues/comments/${e}/reactions`,{content:Oo(n)},{headers:{Authorization:"token "+t,Accept:"application/vnd.github.squirrel-girl-preview"}});return 200===r.status?this.deleteCommentReaction({accessToken:t,commentId:e,reactionId:r.data.id}):201===r.status}async deleteCommentReaction({accessToken:t,commentId:e,reactionId:n}){return 204===(await this.$http.delete(`repos/${this.owner}/${this.repo}/issues/comments/${e}/reactions/${n}`,{headers:{Authorization:"token "+t,Accept:"application/vnd.github.squirrel-girl-preview"}})).status}}function jo(t){return null===t?{username:"ghost",avatar:"https://avatars3.githubusercontent.com/u/10137?v=4",homepage:"https://github.com/ghost"}:{username:t.login,avatar:t.avatarUrl,homepage:t.url}}function $o(t){return{id:t.number,title:t.title,content:t.body,link:t.url}}function Co(t){return{like:t.find(t=>"THUMBS_UP"===t.content).users.totalCount,unlike:t.find(t=>"THUMBS_DOWN"===t.content).users.totalCount,heart:t.find(t=>"HEART"===t.content).users.totalCount}}function Ao(t){return{id:t.id,content:t.bodyHTML,contentRaw:t.body,author:jo(t.author),createdAt:t.createdAt,updatedAt:t.updatedAt,reactions:Co(t.reactionGroups)}}function Eo(t){return"like"===t?"THUMBS_UP":"unlike"===t?"THUMBS_DOWN":"heart"===t?"HEART":t}class To{constructor({baseURL:t="https://github.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:a,proxy:s}){if(void 0===i||void 0===s)throw new Error("clientSecret and proxy is required for GitHub V4");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=a,this.proxy=s,this._pageInfo={page:1,startCursor:null,endCursor:null,sort:null,perPage:null},this._issueNodeId=null,this.$http=bo.a.create({baseURL:"https://github.com"===t?"https://api.github.com":Ln(t,"api"),headers:{Accept:"application/vnd.github.v3+json"}}),this.$http.interceptors.response.use(t=>t.data.error?Promise.reject(t.data.error_description):t.data.errors?Promise.reject(t.data.errors[0].message):t)}get platform(){return{name:"GitHub",link:this.baseURL,version:"v4",meta:{reactable:!0,sortable:!0}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"login/oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"public_repo",state:this.state})}async handleAuth(){const t=Un(window.location.search);if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Mn(Dn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Ln(this.baseURL,"login/oauth/access_token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t},{headers:{Accept:"application/json"}});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.post("graphql",{query:"query getUser {\n viewer {\n login\n avatarUrl\n url\n }\n}"},{headers:{Authorization:"token "+t}});return jo(e.data.viewer)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"token "+t}),!e){const t=[`"${n}"`,"in:title",`repo:${this.owner}/${this.repo}`,"is:public",...this.labels.map(t=>"label:"+t)].join(" "),{data:e}=await this.$http.post("graphql",{variables:{query:t},query:"query getIssueByTitle(\n $query: String!\n) {\n search(\n query: $query\n type: ISSUE\n first: 20\n ) {\n nodes {\n ... on Issue {\n id\n number\n title\n body\n url\n }\n }\n }\n}"},r),o=e.data.search.nodes.find(t=>t.title===n);return o?(this._issueNodeId=o.id,$o(o)):null}try{const{data:t}=await this.$http.post("graphql",{query:`query getIssueById {\n repository(owner: "${this.owner}", name: "${this.repo}") {\n issue (number: ${e}) {\n id\n number\n title\n body\n url\n }\n }\n}`},r);return this._issueNodeId=t.data.repository.issue.id,$o(t.data.repository.issue)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues`,{title:e,body:n,labels:this.labels},{headers:{Authorization:"token "+t}});return r.url=r.html_url,this._issueNodeId=r.node_id,$o(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={};t&&(i.headers={Authorization:"token "+t}),null!==this._pageInfo.sort&&o!==this._pageInfo.sort&&(n=1);const{firstOrLast:a,afterOrBefore:s,cursor:c}=this._getQueryParams({page:n,sort:o}),{data:u}=await this.$http.post("graphql",{variables:{owner:this.owner,repo:this.repo,issueId:e,perPage:r},query:`query getComments(\n $owner: String!\n $repo: String!\n $issueId: Int!\n $perPage: Int!\n) {\n repository(owner: $owner, name: $repo) {\n issue(number: $issueId) {\n comments(\n ${a}: $perPage\n ${null===s?"":`${s}: "${c}"`}\n ) {\n totalCount\n pageInfo {\n endCursor\n startCursor\n }\n nodes {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n }\n}`},i),l=u.data.repository.issue.comments;return"desc"===o&&l.nodes.reverse(),this._pageInfo={page:n,startCursor:l.pageInfo.startCursor,endCursor:l.pageInfo.endCursor,sort:o,perPage:r},{count:l.totalCount,page:n,perPage:r,data:l.nodes.map(Ao)}}async postComment({accessToken:t,content:e}){const{data:n}=await this.$http.post("graphql",{variables:{issueNodeId:this._issueNodeId,content:e},query:"mutation postComment(\n $issueNodeId: ID!\n $content: String!\n) {\n addComment(\n input: {\n subjectId: $issueNodeId\n body: $content\n }\n ) {\n commentEdge {\n node {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n}"},{headers:{Authorization:"token "+t}});return Ao(n.data.addComment.commentEdge.node)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.post("graphql",{variables:{commentId:e,content:n},query:"mutation putComment(\n $commentId: ID!,\n $content: String!,\n) {\n updateIssueComment(input: {\n id: $commentId\n body: $content\n }) {\n issueComment {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n}"},{headers:{Authorization:"token "+t}});return Ao(r.data.updateIssueComment.issueComment)}async deleteComment({accessToken:t,commentId:e}){return await this.$http.post("graphql",{variables:{commentId:e},query:"mutation deleteComment(\n $commentId: ID!,\n) {\n deleteIssueComment(input: {\n id: $commentId\n }) {\n clientMutationId\n }\n}"},{headers:{Authorization:"token "+t}}),!0}async getCommentReactions({accessToken:t,issueId:e,commentId:n}){const{firstOrLast:r,afterOrBefore:o,cursor:i}=this._getQueryParams(),{data:a}=await this.$http.post("graphql",{variables:{owner:this.owner,repo:this.repo,issueId:e,perPage:this._pageInfo.perPage},query:`query getComments(\n $owner: String!\n $repo: String!\n $issueId: Int!\n $perPage: Int!\n) {\n repository(owner: $owner, name: $repo) {\n issue(number: $issueId) {\n comments(\n ${r}: $perPage\n ${null===o?"":`${o}: "${i}"`}\n ) {\n nodes {\n id\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n }\n}`},{headers:{Authorization:"token "+t}});return Co(a.data.repository.issue.comments.nodes.find(t=>t.id===n).reactionGroups)}async postCommentReaction({accessToken:t,commentId:e,reaction:n}){return await this.$http.post("graphql",{variables:{commentId:e,content:Eo(n)},query:"mutation postCommentReaction(\n $commentId: ID!,\n $content: ReactionContent!,\n) {\n addReaction(input: {\n subjectId: $commentId\n content: $content\n }) {\n reaction {\n databaseId\n }\n }\n}"},{headers:{Authorization:"token "+t}}),!0}_getQueryParams({page:t=this._pageInfo.page,sort:e=this._pageInfo.sort}={}){let n,r,o;return 1===t?(n="asc"===e?"first":"last",r=null,o=null):"asc"===e?t>this._pageInfo.page?(n="first",r="after",o=this._pageInfo.endCursor):(n="last",r="before",o=this._pageInfo.startCursor):t>this._pageInfo.page?(n="last",r="before",o=this._pageInfo.startCursor):(n="first",r="after",o=this._pageInfo.endCursor),{firstOrLast:n,afterOrBefore:r,cursor:o}}}function Po(t){return{username:t.username,avatar:t.avatar_url,homepage:t.web_url}}function Io(t){return{id:t.iid,title:t.title,content:t.description,link:t.web_url}}function Ro(t){return{id:t.id,content:t.body_html||"",contentRaw:t.body,author:Po(t.author),createdAt:t.created_at,updatedAt:t.updated_at,reactions:t.reactions}}function Mo(t){return{like:t.filter(t=>"thumbsup"===t.name).length,unlike:t.filter(t=>"thumbsdown"===t.name).length,heart:t.filter(t=>"heart"===t.name).length}}function Lo(t){return"like"===t?"thumbsup":"unlike"===t?"thumbsdown":t}class No{constructor({baseURL:t="https://gitlab.com",owner:e,repo:n,labels:r,clientId:o,state:i}){this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.state=i,this._encodedRepo=encodeURIComponent(`${this.owner}/${this.repo}`),this.$http=bo.a.create({baseURL:Ln(t,"api/v4"),headers:{Accept:"application/json"}})}get platform(){return{name:"GitLab",link:this.baseURL,version:"v4",meta:{reactable:!0,sortable:!0}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,response_type:"token",state:this.state})}async handleAuth(){const t=Un(window.location.hash.slice(1));if(!t.access_token||t.state!==this.state)return null;const e=t.access_token;delete t.access_token,delete t.token_type,delete t.expires_in,delete t.state;const n=Rn(t),r=n?"#"+n:"",o=`${Dn(window.location.href)}${window.location.search}${r}`;return window.history.replaceState(null,"",o),e}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{headers:{Authorization:"Bearer "+t}});return Po(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"Bearer "+t}),!e){r.params={labels:this.labels.join(","),order_by:"created_at",sort:"asc",search:n};const{data:t}=await this.$http.get(`projects/${this._encodedRepo}/issues`,r);return t.map(Io).find(t=>t.title===n)||null}try{const{data:t}=await this.$http.get(`projects/${this._encodedRepo}/issues/${e}`,r);return Io(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`projects/${this._encodedRepo}/issues`,{title:e,description:n,labels:this.labels.join(",")},{headers:{Authorization:"Bearer "+t}});return Io(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={params:{page:n,per_page:r,order_by:"created_at",sort:o}};t&&(i.headers={Authorization:"Bearer "+t});const a=await this.$http.get(`projects/${this._encodedRepo}/issues/${e}/notes`,i),s=a.data,c=[];for(const n of s)c.push((async()=>{n.body_html=await this.getMarkdownContent({accessToken:t,contentRaw:n.body})})()),c.push((async()=>{n.reactions=await this.getCommentReactions({accessToken:t,issueId:e,commentId:n.id})})());return await Promise.all(c),{count:Number(a.headers["x-total"]),page:Number(a.headers["x-page"]),perPage:Number(a.headers["x-per-page"]),data:s.map(Ro)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`projects/${this._encodedRepo}/issues/${e}/notes`,{body:n},{headers:{Authorization:"Bearer "+t}});return Ro(r)}async putComment({accessToken:t,issueId:e,commentId:n,content:r}){const{data:o}=await this.$http.put(`projects/${this._encodedRepo}/issues/${e}/notes/${n}`,{body:r},{headers:{Authorization:"Bearer "+t}}),[i,a]=await Promise.all([this.getMarkdownContent({accessToken:t,contentRaw:o.body}),this.getCommentReactions({accessToken:t,issueId:e,commentId:o.id})]);return o.body_html=i,o.reactions=a,Ro(o)}async deleteComment({accessToken:t,issueId:e,commentId:n}){const{status:r}=await this.$http.delete(`projects/${this._encodedRepo}/issues/${e}/notes/${n}`,{headers:{Authorization:"Bearer "+t}});return 204===r}async getCommentReactions({accessToken:t,issueId:e,commentId:n}){const{data:r}=await this.$http.get(`projects/${this._encodedRepo}/issues/${e}/notes/${n}/award_emoji`,{headers:{Authorization:"Bearer "+t}});return Mo(r)}async postCommentReaction({issueId:t,commentId:e,reaction:n,accessToken:r}){try{return 201===(await this.$http.post(`projects/${this._encodedRepo}/issues/${t}/notes/${e}/award_emoji`,{name:Lo(n)},{headers:{Authorization:"Bearer "+r}})).status}catch(t){if(t.response&&404===t.response.status)return!1;throw t}}async getMarkdownContent({accessToken:t,contentRaw:e}){const n={};t&&(n.headers={Authorization:"Bearer "+t});const{data:r}=await this.$http.post("markdown",{text:e,gfm:!0},n);return r.html}}function Fo(t){return{username:t.nickname,avatar:t.links.avatar.href,homepage:t.links.html.href}}function zo(t){return{id:t.id,title:t.title,content:t.content.raw,link:t.links.html.href}}function Do(t){return{id:t.id,content:t.content.html,contentRaw:t.content.raw,author:Fo(t.user),createdAt:t.created_on,updatedAt:t.updated_on,reactions:null}}class Uo{constructor({baseURL:t="https://bitbucket.org",owner:e,repo:n,clientId:r,state:o}){this.baseURL=t,this.owner=e,this.repo=n,this.clientId=r,this.state=o,this.$http=bo.a.create({baseURL:"https://api.bitbucket.org/2.0",headers:{Accept:"application/json"}})}get platform(){return{name:"Bitbucket",link:this.baseURL,version:"v2",meta:{reactable:!1,sortable:!0}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"site/oauth2/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,response_type:"token",state:this.state})}async handleAuth(){const t=Un(window.location.hash.slice(1));if(!t.access_token||t.state!==this.state)return null;const e=t.access_token;delete t.access_token,delete t.token_type,delete t.expires_in,delete t.state,delete t.scopes;const n=Rn(t),r=n?"#"+n:"",o=`${Dn(window.location.href)}${window.location.search}${r}`;return window.history.replaceState(null,"",o),e}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{headers:{Authorization:"Bearer "+t}});return Fo(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"Bearer "+t}),!e){r.params={sort:"created_on",q:`title="${n}"`,timestamp:Date.now()};const{data:t}=await this.$http.get(`repositories/${this.owner}/${this.repo}/issues`,r);return t.size>0?zo(t.values[0]):null}try{r.params={timestamp:Date.now()};const{data:t}=await this.$http.get(`repositories/${this.owner}/${this.repo}/issues/${e}`,r);return zo(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repositories/${this.owner}/${this.repo}/issues`,{title:e,content:{raw:n},priority:"trivial",kind:"task"},{headers:{Authorization:"Bearer "+t}});return r.links.html={href:Ln(this.baseURL,`${this.owner}/${this.repo}/issues/${r.id}`)},zo(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={params:{page:n,pagelen:r,sort:"desc"===o?"-created_on":"created_on",timestamp:Date.now()}};t&&(i.headers={Authorization:"Bearer "+t});const{data:a}=await this.$http.get(`repositories/${this.owner}/${this.repo}/issues/${e}/comments`,i);return{count:a.size,page:a.page,perPage:a.pagelen,data:a.values.filter(t=>null!==t.content.raw).map(Do)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`repositories/${this.owner}/${this.repo}/issues/${e}/comments`,{content:{raw:n}},{headers:{Authorization:"Bearer "+t}});return Do(r)}async putComment({accessToken:t,issueId:e,commentId:n,content:r}){const{data:o}=await this.$http.put(`repositories/${this.owner}/${this.repo}/issues/${e}/comments/${n}`,{content:{raw:r}},{headers:{Authorization:"Bearer "+t}});return Do(o)}async deleteComment({accessToken:t,issueId:e,commentId:n}){const{status:r}=await this.$http.delete(`repositories/${this.owner}/${this.repo}/issues/${e}/comments/${n}`,{headers:{Authorization:"Bearer "+t}});return 204===r}async getCommentReactions(t){throw new Error("501 Not Implemented")}async postCommentReaction(t){throw new Error("501 Not Implemented")}}function Bo(t){return{username:t.login,avatar:t.avatar_url,homepage:t.html_url}}function qo(t){return{id:t.number,title:t.title,content:t.body,link:t.html_url}}function Vo(t){return{id:t.id,content:t.body_html||"",contentRaw:t.body,author:Bo(t.user),createdAt:t.created_at,updatedAt:t.updated_at||"",reactions:null}}class Ho{constructor({baseURL:t="https://gitee.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:a,proxy:s}){if(void 0===i||void 0===s)throw new Error("clientSecret and proxy is required for Gitee V5");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=a,this.proxy=s,this.$http=bo.a.create({baseURL:Ln(t,"api/v5")}),this.$http.interceptors.response.use(t=>t,t=>(t.response.data&&t.response.data.message&&(t.message=t.response.data.message),Promise.reject(t)))}get platform(){return{name:"Gitee",link:this.baseURL,version:"v5",meta:{reactable:!1,sortable:!1}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"user_info issues notes",response_type:"code",state:this.state})}async handleAuth(){const t=Un(window.location.search);if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Mn(Dn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Ln(this.baseURL,"oauth/token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t,grant_type:"authorization_code",redirect_uri:window.location.href});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{params:{access_token:t}});return Bo(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={params:{timestamp:Date.now()}};if(t&&(r.params.access_token=t),!e){Object.assign(r.params,{q:n,repo:`${this.owner}/${this.repo}`,per_page:1});const{data:t}=await this.$http.get("search/issues",r);return t.map(qo).find(t=>t.title===n)||null}try{const{data:t}=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}`,r);return qo(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/issues`,{access_token:t,repo:this.repo,title:e,body:n,labels:this.labels.join(",")});return qo(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10}={}}){const o={params:{page:n,per_page:r,timestamp:Date.now()},headers:{Accept:["application/vnd.gitee.html+json"]}};t&&(o.params.access_token=t);const i=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,o);return{count:Number(i.headers.total_count),page:n,perPage:r,data:i.data.map(Vo)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,{body:n,access_token:t},{headers:{Accept:["application/vnd.gitee.html+json"]}});return Vo(r)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.patch(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{body:n,access_token:t},{headers:{Accept:["application/vnd.gitee.html+json"]}});return Vo(r)}async deleteComment({accessToken:t,commentId:e}){const{status:n}=await this.$http.delete(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{params:{access_token:t}});return 204===n}async getCommentReactions(t){throw new Error("501 Not Implemented")}async postCommentReaction(t){throw new Error("501 Not Implemented")}}n(423);var Wo={name:"Vssue",components:{VssueComponent:go},props:{options:{type:Object,default:function(){return{}}}},data:function(){return{key:"key",platformOptions:{github:So,"github-v4":To,gitlab:No,bitbucket:Uo,gitee:Ho}}},computed:{vssueOptions:function(){var t=this.platformOptions,e=this.options,n=t[e.platform];return Object(Ze.a)(Object(Ze.a)({},e),{},{api:n})}},watch:{$route:function(t,e){var n=this;t.path!==e.path&&setTimeout((function(){n.key="reco-".concat((new Date).getTime())}),300)}}},Go=(n(424),{components:{Valine:xn,Vssue:Object(We.a)(Wo,(function(){var t=this.$createElement;return(this._self._c||t)("VssueComponent",{key:this.key,staticClass:"vssue-wrapper",attrs:{options:this.vssueOptions}})}),[],!1,null,null,null).exports},props:{isShowComments:{type:Boolean,default:!0}},data:function(){return{commentsOptions:{}}},computed:{solution:function(){var t=this.commentsOptions.solution,e=this.$themeConfig,n=e.valineConfig,r=e.vssueConfig,o=this.$themeLocaleConfig,i=o.valineConfig,a=o.vssueConfig,s="";return void 0!==t?s=t:void 0!==i||void 0!==n?s="valine":void 0===a&&void 0===r||(s="vssue"),s},options:function(){var t=this.commentsOptions.options,e=this.$themeConfig,n=e.valineConfig,r=e.vssueConfig,o=this.$themeLocaleConfig,i=o.valineConfig,a=o.vssueConfig;return void 0!==t?t:void 0!==i||void 0!==n?i||n:void 0!==a||void 0!==r?a||r:null},componentName:function(){var t=this.solution;return"valine"===t?"Valine":"vssue"===t?"Vssue":""}},mounted:function(){this.$themeConfig.commentsSolution=this.solution}}),Qo=Object(We.a)(Go,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{directives:[{name:"show",rawName:"v-show",value:this.isShowComments,expression:"isShowComments"}],staticClass:"comments-wrapper"},[e("ClientOnly",[e(this.componentName,{tag:"component",attrs:{options:this.options}})],1)],1)}),[],!1,null,null,null).exports,Yo={props:{idVal:String,numStyle:Object,flagTitle:{type:String,default:"Your Article Title"}},methods:{getIdVal:function(t){var e=this.$site.base;return e.slice(0,e.length-1)+t}}},Ko=Object(We.a)(Yo,(function(){var t=this.$createElement,e=this._self._c||t;return e("span",{staticClass:"leancloud-visitors",attrs:{id:this.getIdVal(this.idVal),"data-flag-title":this.flagTitle}},[e("a",{staticClass:"leancloud-visitors-count",style:this.numStyle})])}),[],!1,null,null,null).exports,Jo=(n(425),n(67)),Xo=n(20),Zo=n(31),ti={tags:{},categories:{},timeline:{}},ei=function(){function t(e,n){var r=this;Object(Xo.a)(this,t),this._metaMap=Object.assign({},e),Object.keys(this._metaMap).forEach((function(t){var e=r._metaMap[t].pageKeys;r._metaMap[t].pages=e.map((function(t){return function(t,e){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:i.default;Kt(e),n.$vuepress.$set("siteData",e);var r=t(n.$vuepress.$get("siteData")),o=new r,a=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),s={};return Object.keys(a).reduce((function(t,e){return e.startsWith("$")&&(t[e]=a[e].get),t}),s),{computed:s}}((function(t){return function(){function e(){Object(Xo.a)(this,e)}return Object(Zo.a)(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$canonicalUrl",get:function(){var t=this.$page.frontmatter.canonicalUrl;return"string"==typeof t&&t}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n=0;s--)(o=t[s])&&(a=(i<3?o(a):i>3?o(e,n,a):o(e,n))||a);return i>3&&a&&Object.defineProperty(e,n,a),a}var Fr=i.default.extend({name:"Iconfont"});function zr(t,e,n,r,o,i,a,s,c,u){"boolean"!=typeof a&&(c=s,s=a,a=!1);const l="function"==typeof n?n.options:n;let f;if(t&&t.render&&(l.render=t.render,l.staticRenderFns=t.staticRenderFns,l._compiled=!0,o&&(l.functional=!0)),r&&(l._scopeId=r),i?(f=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),e&&e.call(this,c(t)),t&&t._registeredComponents&&t._registeredComponents.add(i)},l._ssrRegister=f):e&&(f=a?function(t){e.call(this,u(t,this.$root.$options.shadowRoot))}:function(t){e.call(this,s(t))}),f)if(l.functional){const t=l.render;l.render=function(e,n){return f.call(n),t(e,n)}}else{const t=l.beforeCreate;l.beforeCreate=t?[].concat(t,f):[f]}return n}"undefined"!=typeof navigator&&/msie [6-9]\\b/.test(navigator.userAgent.toLowerCase());const Dr=zr({render:function(t,e){var n=e._c;return n("svg",{directives:[{name:"show",rawName:"v-show",value:!1,expression:"false"}]},[n("symbol",{attrs:{id:"vssue-icon-bitbucket",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M579.5522464 489.45249493q4.8371808 38.38537173-30.81752427 61.55702827t-67.95459093 3.66689493q-23.79580907-10.37653333-32.6119616-35.34262826t-0.31207573-50.01020907 31.67573333-35.34262827q21.92335253-11.00068587 44.1587808-7.33379093t39.00952427 21.61127573 16.77409493 41.1160384zM647.19476053 476.65737173q-8.50407573-65.22392427-68.8908192-99.9424t-120.07131413-7.9579424q-38.38537173 17.08617173-61.24495253 53.9111616t-21.0651424 78.95527574q2.41859093 55.4715424 47.20152426 94.48106666t100.87862827 34.1723424q55.4715424-4.8371808 92.60860907-51.18049493t30.50544746-102.43900907zM792.93434133 146.32472427q-12.17097173-16.4620192-34.1723424-27.15062827t-35.34262826-13.41927573-43.30057174-7.64586667q-177.33729493-28.63299093-345.00022826 1.24830507-26.2144 4.29104747-40.25782827 7.33379093t-33.54819093 13.41927573-30.50544747 26.2144q18.2564576 17.08617173 46.34331413 27.6967616t44.78293334 13.41927574 53.36502826 7.02171413q138.95192427 17.71032427 273.06666667 0.62415253 38.38537173-4.8371808 54.53531413-7.33379093t44.1587808-13.1072 45.7191616-28.32091413zM827.65281813 777.10872427q-4.8371808 15.83786667-9.44030506 46.65539093t-8.50407574 51.18049493-17.39824746 42.6764192-35.34262827 34.4064q-52.4288 29.2571424-115.46819093 43.61264747t-123.1140576 13.41927573-122.8019808-11.3127616q-28.0088384-4.8371808-49.69813334-11.00068586t-46.65539093-16.4620192-44.4708576-26.52647574-31.67573333-37.4491424q-15.21371413-58.51428587-34.71847574-177.96144746l3.66689494-9.7523808 11.00068586-5.46133334q135.9091808 90.1900192 308.72137174 90.1900192t309.34552426-90.1900192q12.79512427 3.66689493 14.5895616 14.04342827t-3.0427424 27.46270507-4.8371808 22.54750506zM937.97175147 191.41973333q-15.83786667 101.8148576-67.64251414 399.22346667-3.0427424 18.2564576-16.4620192 34.1723424t-26.52647573 24.3419424-33.23611413 18.88060907q-153.61950507 76.7707424-371.8387808 53.67710506-151.12289493-16.4620192-240.14262827-84.72868586-9.12822827-7.33379093-15.52579093-16.1499424t-10.37653334-21.2992-5.46133333-20.75306667-3.66689493-24.10788587-3.3548192-21.2992q-5.46133333-30.50544747-16.1499424-91.43832426t-17.08617174-98.4600384-14.35550506-89.8779424-13.41927574-96.27550507q1.7944384-15.83786667 10.68860907-29.5692192t19.19268587-22.8595808 27.46270506-18.2564576 28.0088384-13.73135253 29.2571424-11.3127616q76.22460907-28.0088384 190.75657174-39.00952427 231.0144-22.54750507 412.01859093 30.50544747 94.48106667 28.0088384 131.072 74.35215253 9.7523808 12.17097173 10.0644576 31.0515808t-3.3548192 32.9240384z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitea",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M184.31868985 236.10860742C106.94832667 235.94086648 3.32655508 285.13080468 9.02973665 408.46209936c8.93218827 192.65010787 206.32096845 210.5144844 285.20099725 212.06608453 8.63864186 36.14810496 101.48307766 160.77938883 170.21479898 167.32127321h301.09442177c180.57278288-11.99345499 315.77172611-546.07960359 215.54670217-548.09249109-165.7696721 7.79993906-264.02374305 11.74184405-348.27147151 12.41280591v166.69224585l-26.25140843-11.61603761-0.16773997-154.99233728c-96.70246985-0.04193548-181.83083757-4.52899687-343.4069947-12.49667687-20.21274496-0.12580547-48.39316992-3.5644886-78.67035236-3.64835859z m10.94507577 68.14462849h9.22573371c10.98701124 98.75729283 28.85138778 156.50200291 64.99949274 244.73357185-92.25734394-10.90314029-170.75995634-37.69970509-185.18564974-137.75698809-7.46445813-51.78991757 17.69663558-105.84433456 110.96042329-107.01851827z m358.83913087 97.07988723c6.29027343 0.08386999 12.70635233 1.25805468 18.74501482 4.02577499l31.40943263 13.54505513-22.51917887 41.05451824a28.18042496 25.03528825 0 0 0-10.10637297 1.59353561 28.18042496 25.03528825 0 0 0-16.98373825 32.038459 28.18042496 25.03528825 0 0 0 4.69673781 7.29671718l-38.83195528 70.70267333a28.18042496 25.03528825 0 0 0-9.30960467 1.59353659 28.18042496 25.03528825 0 0 0-16.98373825 32.038459 28.18042496 25.03528825 0 0 0 36.06423497 15.09665623 28.18042496 25.03528825 0 0 0 16.94180276-32.08039449 28.18042496 25.03528825 0 0 0-6.62575434-9.22573468l37.82551056-68.85752581a28.18042496 25.03528825 0 0 0 12.28700044-1.25805469 28.18042496 25.03528825 0 0 0 8.93218826-4.69673783c14.59343435 6.12253248 26.54495386 11.11281671 35.14166122 15.34826717 12.91602778 6.37414341 17.48696012 10.60959485 18.87082027 15.30633169 1.38386015 4.61286685-0.12580547 13.50312062-7.42252263 29.10299872-5.45157063 11.61603859-14.46762889 28.09655497-25.11915823 47.51253164a28.18042496 25.03528825 0 0 0-10.52572486 1.59353659 28.18042496 25.03528825 0 0 0-16.98373826 32.038459 28.18042496 25.03528825 0 0 0 36.06423498 15.09665623 28.18042496 25.03528825 0 0 0 16.94180278-32.03845901 28.18042496 25.03528825 0 0 0-5.74511608-8.47090188c10.52572388-19.20630122 19.58371762-35.72875308 25.41270465-48.14155897 7.88380904-16.85793279 11.99345499-29.39654416 8.38703091-41.51580463-3.60642311-12.11926046-14.67730434-20.0030695-29.35460966-27.25785217-9.6450856-4.73867233-21.68047607-9.77089106-36.06423399-15.80955357a28.18042496 25.03528825 0 0 0-1.59353562-10.022502 28.18042496 25.03528825 0 0 0-6.08059796-8.7644483l22.14176246-40.38355541 122.61839638 52.96410227c22.14176247 9.6031511 31.2836262 33.12877372 20.54822685 52.8382968l-84.28966393 154.32137544c-10.77733482 19.66758857-37.23841869 27.80300855-59.38018118 18.24179293l-173.48574115-74.98005927c-22.14176247-9.5612156-31.32556167-33.12877372-20.54822687-52.83829679l84.28966395-154.27943995c7.38058716-13.54505513 22.22563246-21.59660511 37.951317-22.22563246h2.68384935z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitee",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M978.404275 409.561604H455.061338c-25.117645 0-45.499734 20.382089-45.499734 45.499734l-0.031997 113.781333c0 25.117645 20.350092 45.499734 45.499734 45.531731h318.594132c25.117645 0 45.499734 20.382089 45.499734 45.499735v22.749867a136.5312 136.5312 0 0 1-136.5312 136.5312H250.248539a45.499734 45.499734 0 0 1-45.499734-45.499734V341.343999a136.5312 136.5312 0 0 1 136.5312-136.5312L978.308284 204.780802c25.117645 0 45.499734-20.350092 45.499734-45.467738L1023.904009 45.531731h0.031997A45.499734 45.499734 0 0 0 978.468269 0h-0.031997L341.343999 0.031997C152.84967 0.031997 0.031997 152.84967 0.031997 341.343999v637.092273c0 25.117645 20.382089 45.499734 45.499734 45.499734h671.233072a307.171203 307.171203 0 0 0 307.171203-307.171203v-261.671468c0-25.117645-20.382089-45.499734-45.499734-45.499734z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-github",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M512 20.4425c-278.334 0-504 225.6345-504 504 0 222.6735 144.4275 411.6105 344.673 478.233 25.2 4.662 34.461-10.9305 34.461-24.255 0-12.0015-0.4725-51.723-0.693-93.8385-140.238 30.492-169.8165-59.472-169.8165-59.472-22.932-58.2435-55.944-73.7415-55.944-73.7415-45.738-31.2795 3.465-30.6495 3.465-30.6495 50.589 3.5595 77.238 51.9435 77.238 51.9435 44.9505 77.049 117.9045 54.7785 146.664 41.895 4.5045-32.571 17.577-54.81 32.004-67.41-111.951-12.726-229.635-55.9755-229.635-249.0705 0-55.0305 19.6875-99.981 51.9435-135.2925-5.229-12.6945-22.491-63.945 4.8825-133.371 0 0 42.336-13.545 138.6315 51.66 40.194-11.1825 83.3175-16.758 126.1575-16.9785 42.8085 0.189 85.9635 5.796 126.252 16.9785 96.201-65.205 138.4425-51.66 138.4425-51.66 27.4365 69.426 10.1745 120.6765 4.9455 133.371 32.319 35.28 51.8805 80.262 51.8805 135.2925 0 193.5675-117.9045 236.187-230.139 248.6925 18.081 15.6555 34.1775 46.305 34.1775 93.3345 0 67.4415-0.5985 121.716-0.5985 138.3165 0 13.419 9.072 29.1375 34.6185 24.192 200.151-66.717 344.3895-255.5595 344.3895-478.17 0-278.3655-225.666-504-504-504z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-gitlab",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M66.61375986 405.11600042L512.11376028 976.03999972 23.84576 621.65599958a39.312 39.312 0 0 1-14.07600042-43.30799944l56.8080007-173.26800028z m259.88400014 0h371.26800014L512.14975986 976.03999972zM215.11376 60.88400042l111.384 344.232H66.61375986l111.384-344.232a19.72800014 19.72800014 0 0 1 37.11600014 0z m742.49999972 344.232l56.8080007 173.2679993a39.23999986 39.23999986 0 0 1-14.07600042 43.30800042l-488.26800028 354.38400014 445.50000042-570.92400028z m0 0h-259.88400014l111.384-344.232a19.72800014 19.72800014 0 0 1 37.11600014 0z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-loading",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M843.307 742.24c0 3.217 2.607 5.824 5.824 5.824s5.824-2.607 5.824-5.824a5.823 5.823 0 0 0-5.824-5.824 5.823 5.823 0 0 0-5.824 5.824zM714.731 874.912c0 6.398 5.186 11.584 11.584 11.584s11.584-5.186 11.584-11.584-5.186-11.584-11.584-11.584-11.584 5.186-11.584 11.584zM541.419 943.2c0 9.614 7.794 17.408 17.408 17.408s17.408-7.794 17.408-17.408-7.794-17.408-17.408-17.408-17.408 7.794-17.408 17.408z m-186.56-9.152c0 12.795 10.373 23.168 23.168 23.168s23.168-10.373 23.168-23.168-10.373-23.168-23.168-23.168-23.168 10.373-23.168 23.168zM189.355 849.12c0 16.012 12.98 28.992 28.992 28.992s28.992-12.98 28.992-28.992-12.98-28.992-28.992-28.992-28.992 12.98-28.992 28.992zM74.731 704.736c0 19.228 15.588 34.816 34.816 34.816s34.816-15.588 34.816-34.816-15.588-34.816-34.816-34.816-34.816 15.588-34.816 34.816z m-43.008-177.28c0 22.41 18.166 40.576 40.576 40.576s40.576-18.166 40.576-40.576-18.166-40.576-40.576-40.576-40.576 18.166-40.576 40.576z m35.392-176.128c0 25.626 20.774 46.4 46.4 46.4s46.4-20.774 46.4-46.4c0-25.626-20.774-46.4-46.4-46.4-25.626 0-46.4 20.774-46.4 46.4z m106.176-142.016c0 28.843 23.381 52.224 52.224 52.224s52.224-23.381 52.224-52.224c0-28.843-23.381-52.224-52.224-52.224-28.843 0-52.224 23.381-52.224 52.224z m155.904-81.344c0 32.024 25.96 57.984 57.984 57.984s57.984-25.96 57.984-57.984-25.96-57.984-57.984-57.984-57.984 25.96-57.984 57.984z m175.104-5.056c0 35.24 28.568 63.808 63.808 63.808s63.808-28.568 63.808-63.808c0-35.24-28.568-63.808-63.808-63.808-35.24 0-63.808 28.568-63.808 63.808z m160.32 72.128c0 38.421 31.147 69.568 69.568 69.568s69.568-31.147 69.568-69.568-31.147-69.568-69.568-69.568-69.568 31.147-69.568 69.568z m113.92 135.488c0 41.638 33.754 75.392 75.392 75.392s75.392-33.754 75.392-75.392-33.754-75.392-75.392-75.392-75.392 33.754-75.392 75.392z m45.312 175.488c0 44.854 36.362 81.216 81.216 81.216s81.216-36.362 81.216-81.216c0-44.854-36.362-81.216-81.216-81.216-44.854 0-81.216 36.362-81.216 81.216z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-like",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M885.9 533.7c16.8-22.2 26.1-49.4 26.1-77.7 0-44.9-25.1-87.4-65.5-111.1a67.67 67.67 0 0 0-34.3-9.3H572.4l6-122.9c1.4-29.7-9.1-57.9-29.5-79.4-20.5-21.5-48.1-33.4-77.9-33.4-52 0-98 35-111.8 85.1l-85.9 311H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h601.3c9.2 0 18.2-1.8 26.5-5.4 47.6-20.3 78.3-66.8 78.3-118.4 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7 0-12.6-1.8-25-5.4-37 16.8-22.2 26.1-49.4 26.1-77.7-0.2-12.6-2-25.1-5.6-37.1zM184 852V568h81v284h-81z m636.4-353l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 16.5-7.2 32.2-19.6 43l-21.9 19 13.9 25.4c4.6 8.4 6.9 17.6 6.9 27.3 0 22.4-13.2 42.6-33.6 51.8H329V564.8l99.5-360.5c5.2-18.9 22.5-32.2 42.2-32.3 7.6 0 15.1 2.2 21.1 6.7 9.9 7.4 15.2 18.6 14.6 30.5l-9.6 198.4h314.4C829 418.5 840 436.9 840 456c0 16.5-7.2 32.1-19.6 43z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-unlike",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M885.9 490.3c3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-28.3-9.3-55.5-26.1-77.7 3.6-12 5.4-24.4 5.4-37 0-51.6-30.7-98.1-78.3-118.4-8.3-3.6-17.2-5.4-26.5-5.4H144c-17.7 0-32 14.3-32 32v364c0 17.7 14.3 32 32 32h129.3l85.8 310.8C372.9 889 418.9 924 470.9 924c29.7 0 57.4-11.8 77.9-33.4 20.5-21.5 31-49.7 29.5-79.4l-6-122.9h239.9c12.1 0 23.9-3.2 34.3-9.3 40.4-23.5 65.5-66.1 65.5-111 0-28.3-9.3-55.5-26.1-77.7zM184 456V172h81v284h-81z m627.2 160.4H496.8l9.6 198.4c0.6 11.9-4.7 23.1-14.6 30.5-6.1 4.5-13.6 6.8-21.1 6.7-19.6-0.1-36.9-13.4-42.2-32.3L329 459.2V172h415.4c20.4 9.2 33.6 29.4 33.6 51.8 0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 9.7-2.3 18.9-6.9 27.3l-13.9 25.4 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 9.7-2.3 18.9-6.9 27.3l-14 25.5 21.9 19c12.5 10.8 19.6 26.5 19.6 43 0 19.1-11 37.5-28.8 48.4z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-heart",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M923 283.6c-13.4-31.1-32.6-58.9-56.9-82.8-24.3-23.8-52.5-42.4-84-55.5-32.5-13.5-66.9-20.3-102.4-20.3-49.3 0-97.4 13.5-139.2 39-10 6.1-19.5 12.8-28.5 20.1-9-7.3-18.5-14-28.5-20.1-41.8-25.5-89.9-39-139.2-39-35.5 0-69.9 6.8-102.4 20.3-31.4 13-59.7 31.7-84 55.5-24.4 23.9-43.5 51.7-56.9 82.8-13.9 32.3-21 66.6-21 101.9 0 33.3 6.8 68 20.3 103.3 11.3 29.5 27.5 60.1 48.2 91 32.8 48.9 77.9 99.9 133.9 151.6 92.8 85.7 184.7 144.9 188.6 147.3l23.7 15.2c10.5 6.7 24 6.7 34.5 0l23.7-15.2c3.9-2.5 95.7-61.6 188.6-147.3 56-51.7 101.1-102.7 133.9-151.6 20.7-30.9 37-61.5 48.2-91 13.5-35.3 20.3-70 20.3-103.3 0.1-35.3-7-69.6-20.9-101.9zM512 814.8S156 586.7 156 385.5C156 283.6 240.3 201 344.3 201c73.1 0 136.5 40.8 167.7 100.4C543.2 241.8 606.6 201 679.7 201c104 0 188.3 82.6 188.3 184.5 0 201.2-356 429.3-356 429.3z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-edit",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M723.2 917.76H286.72c-65.28 0-118.4-51.2-118.4-113.92V261.76C168.32 198.4 221.44 147.2 286.72 147.2h375.04c17.92 0 32 14.08 32 32s-14.08 32-32 32H286.72c-30.08 0-54.4 22.4-54.4 49.92v542.08c0 27.52 24.32 49.92 54.4 49.92H723.2c30.08 0 54.4-22.4 54.4-49.92V440.32c0-17.92 14.08-32 32-32s32 14.08 32 32v363.52c0 62.72-53.12 113.92-118.4 113.92z"}}),e._v(" "),n("path",{attrs:{d:"M499.84 602.24c-7.68 0-14.72-2.56-21.12-7.68-13.44-11.52-14.72-32-3.2-45.44L780.16 198.4c11.52-13.44 32-14.72 45.44-3.2s14.72 32 3.2 45.44L524.16 591.36c-6.4 7.04-15.36 10.88-24.32 10.88z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-delete",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M677.647059 256l0-90.352941c0-37.436235-23.461647-60.235294-61.771294-60.235294L408.094118 105.411765c-38.249412 0-61.741176 22.799059-61.741176 60.235294l0 90.352941-180.705882 0 0 60.235294 60.235294 0 0 512c0 54.272 33.972706 90.352941 90.352941 90.352941l391.529412 0c55.085176 0 90.352941-33.490824 90.352941-90.352941l0-512 60.235294 0 0-60.235294L677.647059 256zM406.588235 165.647059l210.823529 0-1.264941 90.352941L406.588235 256 406.588235 165.647059zM737.882353 858.352941l-451.764706 0 0-542.117647 451.764706 0L737.882353 858.352941zM466.823529 376.470588l-58.729412 0-1.505882 391.529412 60.235294 0L466.823529 376.470588zM617.411765 376.470588l-60.235294 0 0 391.529412 60.235294 0L617.411765 376.470588z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-reply",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M426.666667 384 426.666667 213.333333 128 512 426.666667 810.666667 426.666667 635.733333C640 635.733333 789.333333 704 896 853.333333 853.333333 640 725.333333 426.666667 426.666667 384Z"}})]),e._v(" "),n("symbol",{attrs:{id:"vssue-icon-error",viewBox:"0 0 1024 1024"}},[n("path",{attrs:{d:"M512 720m-48 0a48 48 0 1 0 96 0 48 48 0 1 0-96 0Z"}}),e._v(" "),n("path",{attrs:{d:"M480 416v184c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V416c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8z"}}),e._v(" "),n("path",{attrs:{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48z m-783.5-27.9L512 239.9l339.8 588.2H172.2z"}})])])},staticRenderFns:[]},void 0,Fr,void 0,!0,void 0,!1,void 0,void 0,void 0);const Ur=zr({},void 0,i.default.extend({name:"TransitionFade",functional:!0,props:{group:{type:Boolean,required:!1,default:!1},tag:{type:String,required:!1,default:"div"}},render:(t,{props:e,children:n})=>t(e.group?"TransitionGroup":"Transition",{props:{name:"fade",mode:"out-in",appear:!0,tag:e.tag}},n)}),void 0,void 0,void 0,!1,void 0,void 0,void 0);const Br=zr({},void 0,i.default.extend({name:"VssueIcon",functional:!0,props:{name:{type:String,required:!0},title:{type:String,required:!1,default:null}},render:(t,{props:e,data:n})=>t("svg",Object.assign(Object.assign({},n),{class:["vssue-icon","vssue-icon-"+e.name],attrs:{"aria-hidden":"true"}}),[t("title",e.title),t("use",{attrs:{"xlink:href":"#vssue-icon-"+e.name}})])}),void 0,void 0,void 0,!1,void 0,void 0,void 0);let qr=class extends i.default{constructor(){super(...arguments),this.editMode=!1,this.editContent=this.comment.contentRaw,this.creatingReactions=[],this.isPutingComment=!1,this.isDeletingComment=!1}get currentUser(){return this.vssue.user?this.vssue.user.username:null}get content(){return this.comment.content}get author(){return this.comment.author}get createdAt(){return zn(this.comment.createdAt)}get updatedAt(){return zn(this.comment.updatedAt)}get showReactions(){return Boolean(this.vssue.API&&this.vssue.API.platform.meta.reactable&&this.comment.reactions&&!this.editMode)}get reactionKeys(){return["heart","like","unlike"]}get editContentRows(){return this.editContent.split("\n").length-1}get editInputRows(){return this.editContentRows<3?5:this.editContentRows+2}async postReaction({reaction:t}){try{if(this.creatingReactions.includes(t))return;this.creatingReactions.push(t);await this.vssue.postCommentReaction({commentId:this.comment.id,reaction:t})||this.vssue.$emit("error",new Error(this.vssue.$t("reactionGiven",{reaction:this.vssue.$t(t)})));const e=await this.vssue.getCommentReactions({commentId:this.comment.id});e&&(this.comment.reactions=e)}finally{this.creatingReactions.splice(this.creatingReactions.findIndex(e=>e===t),1)}}enterEdit(){this.editMode=!0,this.$nextTick(()=>{this.$refs.input.focus()})}resetEdit(){this.editMode=!1,this.editContent=this.comment.contentRaw}async putComment(){try{if(this.vssue.isPending)return;if(this.editContent!==this.comment.contentRaw){this.isPutingComment=!0,this.vssue.isUpdatingComment=!0;const t=await this.vssue.putComment({commentId:this.comment.id,content:this.editContent});t&&this.vssue.comments.data.splice(this.vssue.comments.data.findIndex(t=>t.id===this.comment.id),1,t)}this.editMode=!1}finally{this.isPutingComment=!1,this.vssue.isUpdatingComment=!1}}async deleteComment(){try{if(this.vssue.isPending)return;if(!window.confirm(this.vssue.$t("deleteConfirm")))return;this.isDeletingComment=!0,this.vssue.isUpdatingComment=!0;await this.vssue.deleteComment({commentId:this.comment.id})?(this.vssue.comments.count-=1,this.vssue.comments.data.length>1&&this.vssue.comments.data.splice(this.vssue.comments.data.findIndex(t=>t.id===this.comment.id),1),this.vssue.query.page>1&&this.vssue.query.page>Math.ceil(this.vssue.comments.count/this.vssue.query.perPage)?this.vssue.query.page-=1:await this.vssue.getComments()):this.vssue.$emit("error",new Error(this.vssue.$t("deleteFailed")))}finally{this.isDeletingComment=!1,this.vssue.isUpdatingComment=!1}}};Nr([Tn({type:Object,required:!0})],qr.prototype,"comment",void 0),Nr([On()],qr.prototype,"vssue",void 0),qr=Nr([Object(kn.b)({components:{VssueIcon:Br}})],qr);const Vr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-comment",class:{"vssue-comment-edit-mode":t.editMode,"vssue-comment-disabled":t.isDeletingComment||t.isPutingComment}},[n("div",{staticClass:"vssue-comment-avatar"},[n("a",{attrs:{href:t.author.homepage,title:t.author.username,target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:t.author.avatar,alt:t.author.username}})])]),t._v(" "),n("div",{staticClass:"vssue-comment-body"},[t._t("body",[n("div",{staticClass:"vssue-comment-header"},[n("span",{staticClass:"vssue-comment-author"},[n("a",{attrs:{href:t.author.homepage,title:t.author.username,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n "+t._s(t.author.username)+"\n ")])]),t._v(" "),n("span",{staticClass:"vssue-comment-created-at"},[t._v("\n "+t._s(t.createdAt)+"\n ")])]),t._v(" "),n("div",{staticClass:"vssue-comment-main"},[t.editMode?n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.editContent,expression:"editContent"}],ref:"input",staticClass:"vssue-edit-comment-input",attrs:{rows:t.editInputRows},domProps:{value:t.editContent},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:e.ctrlKey?t.putComment():null},input:function(e){e.target.composing||(t.editContent=e.target.value)}}}):n("article",{staticClass:"markdown-body",domProps:{innerHTML:t._s(t.content)}})]),t._v(" "),n("div",{staticClass:"vssue-comment-footer"},[t.editMode?n("span",{staticClass:"vssue-comment-hint"},[t._v("\n "+t._s(t.vssue.$t("editMode"))+"\n ")]):t._e(),t._v(" "),t.showReactions?n("span",{staticClass:"vssue-comment-reactions"},t._l(t.reactionKeys,(function(e){return n("span",{key:e,staticClass:"vssue-comment-reaction",attrs:{title:t.vssue.$t(t.creatingReactions.includes(e)?"loading":e)},on:{click:function(n){return t.postReaction({reaction:e})}}},[n("VssueIcon",{attrs:{name:t.creatingReactions.includes(e)?"loading":e,title:t.vssue.$t(t.creatingReactions.includes(e)?"loading":e)}}),t._v(" "),n("span",{staticClass:"vssue-comment-reaction-number"},[t._v("\n "+t._s(t.comment.reactions[e])+"\n ")])],1)})),0):t._e(),t._v(" "),n("span",{staticClass:"vssue-comment-operations"},[t.comment.author.username===t.currentUser&&t.editMode?n("span",{staticClass:"vssue-comment-operation",class:{"vssue-comment-operation-muted":t.isPutingComment},attrs:{title:t.vssue.$t(t.isPutingComment?"loading":"submit")},on:{click:function(e){return t.putComment()}}},[n("VssueIcon",{directives:[{name:"show",rawName:"v-show",value:t.isPutingComment,expression:"isPutingComment"}],attrs:{name:"loading",title:t.vssue.$t("loading")}}),t._v("\n\n "+t._s(t.vssue.$t("submit"))+"\n ")],1):t._e(),t._v(" "),t.comment.author.username===t.currentUser&&t.editMode?n("span",{staticClass:"vssue-comment-operation vssue-comment-operation-muted",attrs:{title:t.vssue.$t("cancel")},on:{click:function(e){return t.resetEdit()}}},[t._v("\n "+t._s(t.vssue.$t("cancel"))+"\n ")]):t._e(),t._v(" "),t.comment.author.username===t.currentUser?n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.enterEdit()}}},[n("VssueIcon",{attrs:{name:"edit",title:t.vssue.$t("edit")}})],1):t._e(),t._v(" "),t.comment.author.username===t.currentUser||t.vssue.isAdmin?n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.deleteComment()}}},[n("VssueIcon",{attrs:{name:t.isDeletingComment?"loading":"delete",title:t.vssue.$t(t.isDeletingComment?"loading":"delete")}})],1):t._e(),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:!t.editMode,expression:"!editMode"}],staticClass:"vssue-comment-operation",on:{click:function(e){return t.vssue.$emit("reply-comment",t.comment)}}},[n("VssueIcon",{attrs:{name:"reply",title:t.vssue.$t("reply")}})],1)])])])],2)])},staticRenderFns:[]},void 0,qr,void 0,!1,void 0,!1,void 0,void 0,void 0);let Hr=class extends i.default{get disabled(){return this.vssue.isPending}get pageCount(){const t=Math.ceil(this.vssue.comments.count/this.vssue.comments.perPage);return t>1?t:1}get perPageOptions(){const t=[5,10,20,50];return!t.includes(this.vssue.options.perPage)&&this.vssue.options.perPage<100&&t.push(this.vssue.options.perPage),t.sort((t,e)=>t-e)}get page(){return this.vssue.query.page>this.pageCount?this.pageCount:this.vssue.query.page}set page(t){t>0&&t<=this.pageCount&&(this.vssue.query.page=t)}get perPage(){return this.vssue.query.perPage}set perPage(t){this.perPageOptions.includes(t)&&(this.vssue.query.perPage=t)}};Nr([On()],Hr.prototype,"vssue",void 0),Hr=Nr([Object(kn.b)({components:{VssueIcon:Br}})],Hr);const Wr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-pagination"},[n("div",{staticClass:"vssue-pagination-per-page"},[n("label",[n("select",{directives:[{name:"model",rawName:"v-model",value:t.perPage,expression:"perPage"}],staticClass:"vssue-pagination-select",attrs:{disabled:t.disabled},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.perPage=e.target.multiple?n:n[0]}}},t._l(t.perPageOptions,(function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(e)+"\n ")])})),0),t._v(" "),n("span",[t._v("\n "+t._s(t.vssue.$t("perPage"))+"\n ")])]),t._v(" "),t.vssue.API.platform.meta.sortable?n("span",{class:{"vssue-pagination-link":!0,disabled:t.disabled},attrs:{title:t.vssue.$t("sort")},on:{click:function(e){t.vssue.query.sort="asc"===t.vssue.query.sort?"desc":"asc"}}},[t._v("\n "+t._s("asc"===t.vssue.query.sort?"↑":"↓")+"\n ")]):t._e()]),t._v(" "),n("div",{staticClass:"vssue-pagination-page"},[n("span",{class:{"vssue-pagination-link":!0,disabled:1===t.page||t.disabled},attrs:{title:t.vssue.$t("prev")},domProps:{textContent:t._s("<")},on:{click:function(e){t.page-=1}}}),t._v(" "),n("label",[n("span",[t._v("\n "+t._s(t.vssue.$t("page"))+"\n ")]),t._v(" "),n("select",{directives:[{name:"show",rawName:"v-show",value:t.pageCount>1,expression:"pageCount > 1"},{name:"model",rawName:"v-model",value:t.page,expression:"page"}],staticClass:"vssue-pagination-select",attrs:{disabled:t.disabled},on:{change:function(e){var n=Array.prototype.filter.call(e.target.options,(function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));t.page=e.target.multiple?n:n[0]}}},t._l(t.pageCount,(function(e){return n("option",{key:e,domProps:{value:e}},[t._v("\n "+t._s(e)+"\n ")])})),0),t._v(" "),n("span",{directives:[{name:"show",rawName:"v-show",value:t.pageCount<2,expression:"pageCount < 2"}],domProps:{textContent:t._s(t.page)}}),t._v(" "),n("span",{domProps:{textContent:t._s(" / "+t.pageCount+" ")}})]),t._v(" "),n("span",{class:{"vssue-pagination-link":!0,disabled:t.page===t.pageCount||t.disabled},attrs:{title:t.vssue.$t("next")},domProps:{textContent:t._s(">")},on:{click:function(e){t.page+=1}}})])])},staticRenderFns:[]},void 0,Hr,void 0,!1,void 0,!1,void 0,void 0,void 0);let Gr=class extends i.default{};Nr([On()],Gr.prototype,"vssue",void 0),Gr=Nr([Object(kn.b)({components:{TransitionFade:Ur,VssueComment:Vr,VssuePagination:Wr}})],Gr);const Qr=zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vssue-comments"},[e("VssuePagination"),this._v(" "),e("TransitionFade",{attrs:{group:""}},this._l(this.vssue.comments.data,(function(t){return e("VssueComment",{key:t.id,attrs:{comment:t}})})),1),this._v(" "),e("VssuePagination",{directives:[{name:"show",rawName:"v-show",value:this.vssue.comments.data.length>5,expression:"vssue.comments.data.length > 5"}]})],1)},staticRenderFns:[]},void 0,Gr,void 0,!1,void 0,!1,void 0,void 0,void 0);const Yr=zr({},void 0,i.default.extend({name:"VssueIcon",functional:!0,props:{type:{type:String,required:!1,default:"default"}},render:(t,{props:e,data:n,children:r})=>t("button",Object.assign(Object.assign({},n),{class:["vssue-button","vssue-button-"+e.type]}),r)}),void 0,void 0,void 0,!1,void 0,void 0,void 0);let Kr=class extends i.default{constructor(){super(...arguments),this.content=""}get user(){return this.vssue.user}get platform(){return this.vssue.API&&this.vssue.API.platform.name}get isInputDisabled(){return this.loading||null===this.user||null===this.vssue.issue}get isSubmitDisabled(){return""===this.content||this.vssue.isPending||null===this.vssue.issue}get loading(){return this.vssue.isCreatingComment}get contentRows(){return this.content.split("\n").length-1}get inputRows(){return this.contentRows<3?5:this.contentRows+2}created(){this.vssue.$on("reply-comment",t=>{const e=t.contentRaw.replace(/\n/g,"\n> "),n=`@${t.author.username}\n\n> ${e}\n\n`;this.content=this.content.concat(n),this.focus()})}beforeDestroy(){this.vssue.$off("reply-comment")}focus(){this.$refs.input.focus()}async submit(){this.isSubmitDisabled||(await this.vssue.postComment({content:this.content}),this.content="",await this.vssue.getComments())}};Nr([On()],Kr.prototype,"vssue",void 0),Kr=Nr([Object(kn.b)({components:{VssueButton:Yr,VssueIcon:Br}})],Kr);const Jr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-new-comment"},[n("div",{staticClass:"vssue-comment-avatar"},[t.user?n("a",{attrs:{href:t.user.homepage,title:t.user.username,target:"_blank",rel:"noopener noreferrer"}},[n("img",{attrs:{src:t.user.avatar,alt:t.user.username}})]):n("VssueIcon",{attrs:{name:t.platform.toLowerCase(),title:t.vssue.$t("loginToComment",{platform:t.platform})},on:{click:function(e){return t.vssue.login()}}})],1),t._v(" "),n("div",{staticClass:"vssue-new-comment-body"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.content,expression:"content"}],ref:"input",staticClass:"vssue-new-comment-input",attrs:{rows:t.inputRows,disabled:t.isInputDisabled,placeholder:t.vssue.$t(t.user?"placeholder":"noLoginPlaceHolder"),spellcheck:!1,"aria-label":"leave a comment"},domProps:{value:t.content},on:{keyup:function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:e.ctrlKey?t.submit():null},input:function(e){e.target.composing||(t.content=e.target.value)}}})]),t._v(" "),n("div",{staticClass:"vssue-new-comment-footer"},[t.user?n("span",{staticClass:"vssue-current-user"},[n("span",[t._v(t._s(t.vssue.$t("currentUser"))+" - "+t._s(t.user.username)+" - ")]),t._v(" "),n("a",{staticClass:"vssue-logout",on:{click:function(e){return t.vssue.logout()}}},[t._v("\n "+t._s(t.vssue.$t("logout"))+"\n ")])]):n("span",{staticClass:"vssue-current-user"},[t._v("\n "+t._s(t.vssue.$t("loginToComment",{platform:t.platform}))+"\n ")]),t._v(" "),n("div",{staticClass:"vssue-new-comment-operations"},[t.user?n("VssueButton",{staticClass:"vssue-button-submit-comment",attrs:{type:"primary",disabled:t.isSubmitDisabled},on:{click:function(e){return t.submit()}}},[n("VssueIcon",{directives:[{name:"show",rawName:"v-show",value:t.loading,expression:"loading"}],attrs:{name:"loading"}}),t._v("\n\n "+t._s(t.vssue.$t(t.loading?"submitting":"submitComment"))+"\n ")],1):n("VssueButton",{staticClass:"vssue-button-login",attrs:{type:"primary",title:t.vssue.$t("loginToComment",{platform:t.platform})},on:{click:function(e){return t.vssue.login()}}},[t._v("\n "+t._s(t.vssue.$t("login",{platform:t.platform}))+"\n ")])],1)])])},staticRenderFns:[]},void 0,Kr,void 0,!1,void 0,!1,void 0,void 0,void 0);let Xr=class extends i.default{constructor(){super(...arguments),this.progress={show:!1,percent:0,timer:null,speed:200},this.alert={show:!1,message:null,timer:null}}onLoadingCommentsChange(t){this.vssue.comments&&(t?this.progressStart():this.progressDone())}created(){this.vssue.$on("error",t=>this.alertShow(t.message))}beforeDestroy(){this.vssue.$off("error"),null!==this.progress.timer&&window.clearTimeout(this.progress.timer),null!==this.alert.timer&&window.clearTimeout(this.alert.timer)}progressStart(){this.progress.show=!0,this.progress.percent=0,this.progress.timer=window.setInterval(()=>{this.progress.percent+=5,this.progress.percent>94&&null!==this.progress.timer&&window.clearInterval(this.progress.timer)},this.progress.speed)}progressDone(){this.progress.percent=100,null!==this.progress.timer&&window.clearTimeout(this.progress.timer),this.progress.timer=null,window.setTimeout(()=>{this.progress.show=!1},this.progress.speed)}alertShow(t){this.alert.show=!0,this.alert.message=t,null!==this.alert.timer&&window.clearTimeout(this.alert.timer),this.alert.timer=window.setTimeout(()=>{this.alertHide()},3e3)}alertHide(){this.alert.show=!1,null!==this.alert.timer&&window.clearTimeout(this.alert.timer),this.alert.timer=null}};Nr([On()],Xr.prototype,"vssue",void 0),Nr([Pn("vssue.isLoadingComments")],Xr.prototype,"onLoadingCommentsChange",null),Xr=Nr([Object(kn.b)({components:{TransitionFade:Ur}})],Xr);const Zr=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-notice"},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.progress.show,expression:"progress.show"}],staticClass:"vssue-progress",style:{width:t.progress.percent+"%",transition:"all "+t.progress.speed+"ms linear"}}),t._v(" "),n("TransitionFade",[n("div",{directives:[{name:"show",rawName:"v-show",value:t.alert.show,expression:"alert.show"}],staticClass:"vssue-alert",domProps:{textContent:t._s(t.alert.message)},on:{click:function(e){return t.alertHide()}}})])],1)},staticRenderFns:[]},void 0,Xr,void 0,!1,void 0,!1,void 0,void 0,void 0);let to=class extends i.default{get status(){return this.vssue.isFailed?"failed":this.vssue.isInitializing?"initializing":this.vssue.isIssueNotCreated&&!this.vssue.isCreatingIssue?this.vssue.isAdmin||!this.vssue.isLogined?"issueNotCreated":"failed":this.vssue.isLoginRequired?"loginRequired":!this.vssue.comments||this.vssue.isCreatingIssue?"loadingComments":0===this.vssue.comments.data.length?"noComments":null}handleClick(){"issueNotCreated"===this.status?this.vssue.postIssue():"loginRequired"===this.status&&this.vssue.login()}};Nr([On()],to.prototype,"vssue",void 0),to=Nr([Object(kn.b)({components:{TransitionFade:Ur,VssueIcon:Br}})],to);const eo=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("TransitionFade",[t.status?n("div",{key:t.status,staticClass:"vssue-status"},[["failed","loadingComments","initializing"].includes(t.status)?n("VssueIcon",{attrs:{name:"failed"===t.status?"error":"loading"}}):t._e(),t._v(" "),n("p",{staticClass:"vssue-status-info"},[n(["issueNotCreated","loginRequired"].includes(t.status)?"a":"span",{tag:"Component",on:{click:t.handleClick}},[t._v("\n "+t._s(t.vssue.$t(t.status))+"\n ")])],1)],1):t._e()])},staticRenderFns:[]},void 0,to,void 0,!1,void 0,!1,void 0,void 0,void 0);let no=class extends i.default{};Nr([On()],no.prototype,"vssue",void 0),no=Nr([Object(kn.b)({components:{TransitionFade:Ur,VssueIcon:Br,VssueComments:Qr,VssueNewComment:Jr,VssueNotice:Zr,VssueStatus:eo}})],no);const ro=zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("TransitionFade",[this.vssue.isInitializing?e("VssueStatus"):e("div",{staticClass:"vssue-body"},[this.vssue.API?e("VssueNewComment"):this._e(),this._v(" "),e("VssueNotice"),this._v(" "),e("TransitionFade",[this.vssue.comments&&this.vssue.comments.data.length>0?e("VssueComments"):e("VssueStatus")],1)],1)],1)},staticRenderFns:[]},void 0,no,void 0,!1,void 0,!1,void 0,void 0,void 0);let oo=class extends i.default{};Nr([On()],oo.prototype,"vssue",void 0),oo=Nr([kn.b],oo);const io=zr({render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"vssue-header"},[n("a",{staticClass:"vssue-header-comments-count",attrs:{href:t.vssue.issue?t.vssue.issue.link:null,target:"_blank",rel:"noopener noreferrer"}},[n("span",[t._v("\n "+t._s(t.vssue.comments?t.vssue.$tc("comments",t.vssue.comments.count,{count:t.vssue.comments.count}):t.vssue.$tc("comments",0))+"\n ")])]),t._v(" "),n("span",{staticClass:"vssue-header-powered-by"},[n("span",[t._v("Powered by")]),t._v(" "),t.vssue.API?n("span",[n("a",{attrs:{href:t.vssue.API.platform.link,title:t.vssue.API.platform.name+" API "+t.vssue.API.platform.version,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n "+t._s(t.vssue.API.platform.name)+"\n ")]),t._v(" "),n("span",[t._v("&")])]):t._e(),t._v(" "),n("a",{attrs:{href:"https://github.com/meteorlxy/vssue",title:"Vssue v"+t.vssue.version,target:"_blank",rel:"noopener noreferrer"}},[t._v("\n Vssue\n ")])])])},staticRenderFns:[]},void 0,oo,void 0,!1,void 0,!1,void 0,void 0,void 0),ao={login:"Login with {platform}",logout:"Logout",currentUser:"Current User",loading:"Loading",submit:"Submit",submitting:"Submitting",submitComment:"Submit Comment",cancel:"Cancel",edit:"Edit",editMode:"Edit Mode",delete:"Delete",reply:"Reply",heart:"Heart",like:"Like",unlike:"Unlike",perPage:"Comments per page",sort:"Click to change the sort direction",page:"Page",prev:"Previous Page",next:"Next Page",comments:"Comments | {count} Comment | {count} Comments",loginToComment:"Login with {platform} account to leave a comment",placeholder:"Leave a comment. Styling with Markdown is supported. Ctrl + Enter to submit.",noLoginPlaceHolder:"Login to leave a comment. Styling with Markdown is supported. ",failed:"Failed to load comments",initializing:"Initializing...",issueNotCreated:"Click to create issue",loadingComments:"Loading comments...",loginRequired:"Login to view comments",noComments:"No comments yet. Leave the first comment !",reactionGiven:"Already given '{reaction}' reaction",deleteConfirm:"Confirm to delete this comment ?",deleteFailed:"Failed to delete comment"},so={login:"使用 {platform} 登录",logout:"退出登录",currentUser:"当前用户",loading:"加载中",submit:"提交",submitting:"发表中",submitComment:"发表评论",cancel:"取消",edit:"编辑",editMode:"编辑模式",delete:"删除",reply:"回复",heart:"喜欢",like:"赞",unlike:"踩",perPage:"每页评论数",sort:"点击改变排序方式",page:"页数",prev:"上一页",next:"下一页",comments:"评论 | {count} 条评论 | {count} 条评论",loginToComment:"使用 {platform} 帐号登录后发表评论",placeholder:"留下你的评论丨支持 Markdown 语法丨Ctrl + Enter 发表评论",noLoginPlaceHolder:"登录后才能发表评论丨支持 Markdown 语法",failed:"评论加载失败",initializing:"正在初始化...",issueNotCreated:"点击创建 Issue",loadingComments:"正在加载评论...",loginRequired:"登录后查看评论",noComments:"还没有评论,来发表第一条评论吧!",reactionGiven:"已经添加过 '{reaction}' 了",deleteConfirm:"确认要删除该评论吗?",deleteFailed:"评论删除失败"},co={login:"Entrar com {platform}",logout:"Sair",currentUser:"Usuário Atual",loading:"Carregando",submit:"Enviar",submitting:"Enviando",submitComment:"Enviar Comentário",cancel:"Cancelar",edit:"Editar",editMode:"Modo de Edição",delete:"Apagar",reply:"Responder",heart:"Heart",like:"Like",unlike:"Unlike",perPage:"Comentários por página",sort:"Clique para alterar a ordenação",page:"Página",prev:"Página Anterior",next:"Próxima Página",comments:"Comentários | {count} Comentário | {count} Comentários",loginToComment:"Entre com uma conta {platform} para deixar um comentário",placeholder:"Deixe um comentário. Estilos com Markdown suportados. Ctrl + Enter para enviar.",noLoginPlaceHolder:"Entre para deixar um comentário. Estilos com Markdown suportados. ",failed:"Falha ao carregar comentários",initializing:"Inicializando...",issueNotCreated:"Click to create issue",loadingComments:"Carregando comentários...",loginRequired:"Entrar para visualizar comentários",noComments:"Nenhum comentário. Deixe o primeiro comentário!",reactionGiven:"Já reagiu com '{reaction}'",deleteConfirm:"Apagar este comentário?",deleteFailed:"Falha ao apagar comentário"},uo={login:"{platform} でログイン",logout:"ログアウト",currentUser:"現在のユーザー",loading:"読み込み中",submit:"送信",submitting:"送信中",submitComment:"コメントを送信",cancel:"キャンセル",edit:"編集",editMode:"編集モード",delete:"削除",reply:"返信",heart:"ハート",like:"高評価",unlike:"低評価",perPage:"コメント/ページ",sort:"並び順を変更するにはクリックしてください",page:"ページ",prev:"前のページ",next:"次のページ",comments:"コメント | {count} コメント | {count} コメント",loginToComment:"コメントを残すには {platform} アカウントでログインしてください。",placeholder:"コメントを残してください。Markdown 記法をサポートしています。 Ctrl + Enter で送信できます。",noLoginPlaceHolder:"コメントを残すにはログインしてください。マークダウン記法をサポートしています。",failed:"コメントの読み込みに失敗しました",initializing:"初期化中...",issueNotCreated:"Click to create issue",loadingComments:"コメントの読み込み中...",loginRequired:"コメントを見るにはログインしてください",noComments:"まだコメントがありません。最初のコメントを残しましょう!",reactionGiven:"既に '{reaction}' のリアクションをしています",deleteConfirm:"本当にコメントを削除してもいいですか?",deleteFailed:"コメントの削除に失敗しました"},lo={login:"התחברו עם {platform}",logout:"התנתקו",currentUser:"משתמש/ת נוכחי/ת",loading:"טוען",submit:"שליחה",submitting:"שולח",submitComment:"שליחת תגובה",cancel:"ביטל",edit:"עריכה",editMode:"מצב עריכה",delete:"מחיקה",reply:"תשובה",heart:"לב",like:"לייק",unlike:"אנלייק",perPage:"תגובות לדף",sort:"לחצו כדי לשנות את כיוון המיון",page:"דף",prev:"הדף הקודם",next:"הדף הבא",comments:"תגובות | {count} תגובה | {count} תגובות",loginToComment:"התחברו עם חשבון {platform} כדי להשאיר תגובה",placeholder:"השאירו תגובה. יש תמיכה בעיצוב בעזרת Markdown. Ctrl + Enter כדי לשלוח.",noLoginPlaceHolder:"התחברו כדי להשאיר תגובה. יש תמיכה בעיצוב בעזרת Markdown. ",failed:"כשלון בטעינת התגובות",initializing:"מאתחל...",issueNotCreated:"לחצו ליצירת issue",loadingComments:"טוען תגובות...",loginRequired:"התחברו כדי לצפות בתגובות",noComments:"עדיין אין תגובות. השאירו תגובה ראשונה !",reactionGiven:"כבר ניתן חיווי '{reaction}'",deleteConfirm:"בטוחים במחיקת התגובה ?",deleteFailed:"כשלון במחיקת התגובה"};Object.prototype.hasOwnProperty.call(i.default,"$i18n")||i.default.use(Lr);const fo=new Lr({locale:"en",fallbackLocale:"en",messages:{en:ao,"en-US":ao,zh:so,"zh-CN":so,pt:co,"pt-BR":co,ja:uo,"ja-JP":uo,he:lo,"he-IL":lo}});let po=class extends i.default{constructor(){super(...arguments),this.title=t=>`${t.prefix}${document.title}`,this.issueId=null,this.options=null,this.API=null,this.accessToken=null,this.user=null,this.issue=null,this.comments=null,this.query={page:1,perPage:10,sort:"desc"},this.isInitializing=!0,this.isIssueNotCreated=!1,this.isLoginRequired=!1,this.isFailed=!1,this.isCreatingIssue=!1,this.isLoadingComments=!1,this.isCreatingComment=!1,this.isUpdatingComment=!1}get version(){return"1.4.8"}get issueTitle(){return null===this.options?"":"function"==typeof this.title?this.title(this.options):`${this.options.prefix}${this.title}`}get isPending(){return this.isLoadingComments||this.isCreatingComment||this.isUpdatingComment}get isLogined(){return null!==this.accessToken&&null!==this.user}get isAdmin(){return null!==this.options&&null!==this.accessToken&&null!==this.user&&(this.user.username===this.options.owner||this.options.admins.includes(this.user.username))}get accessTokenKey(){return this.API?`Vssue.${this.API.platform.name.toLowerCase()}.access_token`:""}onQueryPerPageChange(){this.query.page=1,this.getComments()}onQueryChange(){this.getComments()}setOptions(t){this.options=Object.assign({labels:["Vssue"],state:"Vssue",prefix:"[Vssue]",admins:[],perPage:10,proxy:t=>"https://cors-anywhere.azm.workers.dev/"+t,issueContent:({url:t})=>t,autoCreateIssue:!1},t);const e=["api","owner","repo","clientId"];for(const t of e)this.options[t]||console.warn(`[Vssue] the option '${t}' is required`);if(this.options.locale)this.$i18n.locale=this.options.locale;else{const t=Object.keys(this.$i18n.messages),e=window.navigator.languages;this.$i18n.locale=e.filter(e=>t.includes(e)).shift()||"en"}}async init(){try{await this.initStore(),await this.initComments()}catch(t){t.response&&[401,403].includes(t.response.status)?this.isLoginRequired=!0:this.isFailed=!0,console.error(t)}}async initStore(){try{if(!this.options)throw new Error("Options are required to initialize Vssue");this.API=null,this.accessToken=null,this.user=null,this.issue=null,this.comments=null,this.query={page:1,perPage:this.options.perPage,sort:"desc"},this.isInitializing=!0,this.isIssueNotCreated=!1,this.isLoginRequired=!1,this.isFailed=!1,this.isCreatingIssue=!1,this.isLoadingComments=!1,this.isCreatingComment=!1,this.isUpdatingComment=!1;const t=this.options.api;this.API=new t({baseURL:this.options.baseURL,labels:this.options.labels,state:this.options.state,owner:this.options.owner,repo:this.options.repo,clientId:this.options.clientId,clientSecret:this.options.clientSecret,proxy:this.options.proxy}),await this.handleAuth()}finally{this.isInitializing=!1}}async initComments(){if(this.API&&this.options)if(this.issueId){const[t,e]=await Promise.all([this.API.getIssue({accessToken:this.accessToken,issueId:this.issueId}),this.API.getComments({accessToken:this.accessToken,issueId:this.issueId,query:this.query})]);this.issue=t,this.comments=e}else this.issue=await this.API.getIssue({accessToken:this.accessToken,issueTitle:this.issueTitle}),null===this.issue?(this.isIssueNotCreated=!0,this.options.autoCreateIssue&&await this.postIssue()):await this.getComments()}async postIssue(){if(this.API&&this.options&&!this.issue&&!this.issueId&&(this.isLogined||this.login(),this.isAdmin))try{this.isCreatingIssue=!0;const t=await this.API.postIssue({title:this.issueTitle,content:await this.options.issueContent({options:this.options,url:Dn(window.location.href)}),accessToken:this.accessToken});this.issue=t,this.isIssueNotCreated=!1,await this.getComments()}catch(t){this.isFailed=!0}finally{this.isCreatingIssue=!1}}async getComments(){try{if(!this.API||!this.issue||this.isLoadingComments)return;this.isLoadingComments=!0;const t=await this.API.getComments({accessToken:this.accessToken,issueId:this.issue.id,query:this.query});return this.comments=t,this.query.page!==t.page&&(this.query.page=t.page),this.query.perPage!==t.perPage&&(this.query.perPage=t.perPage),t}catch(t){if(!t.response||![401,403].includes(t.response.status)||this.isLogined)throw this.$emit("error",t),t;this.isLoginRequired=!0}finally{this.isLoadingComments=!1}}async postComment({content:t}){try{if(!this.API||!this.issue||this.isCreatingComment)return;this.isCreatingComment=!0;return await this.API.postComment({accessToken:this.accessToken,content:t,issueId:this.issue.id})}catch(t){throw this.$emit("error",t),t}finally{this.isCreatingComment=!1}}async putComment({commentId:t,content:e}){try{if(!this.API||!this.issue)return;return await this.API.putComment({accessToken:this.accessToken,issueId:this.issue.id,commentId:t,content:e})}catch(t){throw this.$emit("error",t),t}}async deleteComment({commentId:t}){try{if(!this.API||!this.issue)return;return await this.API.deleteComment({accessToken:this.accessToken,issueId:this.issue.id,commentId:t})}catch(t){throw this.$emit("error",t),t}}async getCommentReactions({commentId:t}){try{if(!this.API||!this.issue)return;return await this.API.getCommentReactions({accessToken:this.accessToken,issueId:this.issue.id,commentId:t})}catch(t){throw this.$emit("error",t),t}}async postCommentReaction({commentId:t,reaction:e}){try{if(!this.API||!this.issue)return!1;return await this.API.postCommentReaction({accessToken:this.accessToken,issueId:this.issue.id,commentId:t,reaction:e})}catch(t){throw this.$emit("error",t),t}}login(){this.API&&this.API.redirectAuth()}logout(){this.setAccessToken(null),this.user=null}async handleAuth(){if(!this.API)return;const t=await this.API.handleAuth();t?(this.setAccessToken(t),this.user=await this.API.getUser({accessToken:t})):this.getAccessToken()?this.user=await this.API.getUser({accessToken:this.accessToken}):(this.setAccessToken(null),this.user=null)}getAccessToken(){return this.accessToken=window.localStorage.getItem(this.accessTokenKey),this.accessToken}setAccessToken(t){null===t?window.localStorage.removeItem(this.accessTokenKey):window.localStorage.setItem(this.accessTokenKey,t),this.accessToken=t}};Nr([Pn("query.perPage")],po.prototype,"onQueryPerPageChange",null),Nr([Pn("query.page"),Pn("query.sort")],po.prototype,"onQueryChange",null),po=Nr([Object(kn.b)({i18n:fo})],po);var ho=po;let vo=class extends i.default{constructor(){super(...arguments),this.vssue=new ho}onOptionsChange(t){this.vssue.setOptions(t)}mounted(){null!==this.title&&(this.vssue.title=this.title),null!==this.issueId&&(this.vssue.issueId=this.issueId),this.vssue.setOptions(this.options),this.vssue.init()}};var mo;Nr([Tn({type:[String,Function],required:!1,default:null})],vo.prototype,"title",void 0),Nr([Tn({type:[String,Number],required:!1,default:null})],vo.prototype,"issueId",void 0),Nr([Tn({type:Object,required:!1,default:()=>({})})],vo.prototype,"options",void 0),Nr([(mo="vssue",Object(kn.a)((function(t,e){var n=t.provide;Cn(t),Sn(n)&&(n=t.provide=jn(n)),n.managed[e]=mo||e})))],vo.prototype,"vssue",void 0),Nr([Pn("options",{deep:!0})],vo.prototype,"onOptionsChange",null),vo=Nr([Object(kn.b)({components:{Iconfont:Dr,VssueBody:ro,VssueHeader:io}})],vo);const go=zr({render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"vssue"},[e("Iconfont"),this._v(" "),e("VssueHeader"),this._v(" "),e("VssueBody")],1)},staticRenderFns:[]},void 0,vo,void 0,!1,void 0,!1,void 0,void 0,void 0);var yo=n(25),bo=n.n(yo);function wo(t){return{username:t.login,avatar:t.avatar_url,homepage:t.html_url}}function _o(t){return{id:t.number,title:t.title,content:t.body,link:t.html_url}}function xo(t){return{like:t["+1"],unlike:t[-1],heart:t.heart}}function ko(t){return{id:t.id,content:t.body_html,contentRaw:t.body,author:wo(t.user),createdAt:t.created_at,updatedAt:t.updated_at,reactions:xo(t.reactions)}}function Oo(t){return"like"===t?"+1":"unlike"===t?"-1":t}class So{constructor({baseURL:t="https://github.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:a,proxy:s}){if(void 0===i||void 0===s)throw new Error("clientSecret and proxy is required for GitHub V3");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=a,this.proxy=s,this.$http=bo.a.create({baseURL:"https://github.com"===t?"https://api.github.com":Ln(t,"api/v3"),headers:{Accept:"application/vnd.github.v3+json"}}),this.$http.interceptors.response.use(t=>t.data&&t.data.error?Promise.reject(new Error(t.data.error_description)):t,t=>(void 0===t.response&&"Network Error"===t.message&&(t.response={status:403}),Promise.reject(t)))}get platform(){return{name:"GitHub",link:this.baseURL,version:"v3",meta:{reactable:!0,sortable:!1}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"login/oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"public_repo",state:this.state})}async handleAuth(){const t=Un(window.location.search);if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Mn(Dn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Ln(this.baseURL,"login/oauth/access_token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t},{headers:{Accept:"application/json"}});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{headers:{Authorization:"token "+t}});return wo(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"token "+t}),!e){r.params={q:[`"${n}"`,"is:issue","in:title",`repo:${this.owner}/${this.repo}`,"is:public",...this.labels.map(t=>"label:"+t)].join(" "),timestamp:Date.now()};const{data:t}=await this.$http.get("search/issues",r);return t.items.map(_o).find(t=>t.title===n)||null}try{r.params={timestamp:Date.now()};const{data:t}=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}`,r);return _o(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues`,{title:e,body:n,labels:this.labels},{headers:{Authorization:"token "+t}});return _o(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10}={}}){const o={params:{timestamp:Date.now()}},i={params:{page:n,per_page:r,timestamp:Date.now()},headers:{Accept:["application/vnd.github.v3.raw+json","application/vnd.github.v3.html+json","application/vnd.github.squirrel-girl-preview"]}};t&&(o.headers={Authorization:"token "+t},i.headers.Authorization="token "+t);const[a,s]=await Promise.all([this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}`,o),this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,i)]),c=s.headers.link||null,u=/rel="next"/.test(c)?Number(c.replace(/^.*[^_]page=(\d*).*rel="next".*$/,"$1"))-1:/rel="prev"/.test(c)?Number(c.replace(/^.*[^_]page=(\d*).*rel="prev".*$/,"$1"))+1:1,l=c?Number(c.replace(/^.*per_page=(\d*).*$/,"$1")):r;return{count:Number(a.data.comments),page:u,perPage:l,data:s.data.map(ko)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,{body:n},{headers:{Authorization:"token "+t,Accept:["application/vnd.github.v3.raw+json","application/vnd.github.v3.html+json","application/vnd.github.squirrel-girl-preview"]}});return ko(r)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.patch(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{body:n},{headers:{Authorization:"token "+t,Accept:["application/vnd.github.v3.raw+json","application/vnd.github.v3.html+json","application/vnd.github.squirrel-girl-preview"]}});return ko(r)}async deleteComment({accessToken:t,commentId:e}){const{status:n}=await this.$http.delete(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{headers:{Authorization:"token "+t}});return 204===n}async getCommentReactions({accessToken:t,commentId:e}){const{data:n}=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{params:{timestamp:Date.now()},headers:{Authorization:"token "+t,Accept:"application/vnd.github.squirrel-girl-preview"}});return xo(n.reactions)}async postCommentReaction({accessToken:t,commentId:e,reaction:n}){const r=await this.$http.post(`repos/${this.owner}/${this.repo}/issues/comments/${e}/reactions`,{content:Oo(n)},{headers:{Authorization:"token "+t,Accept:"application/vnd.github.squirrel-girl-preview"}});return 200===r.status?this.deleteCommentReaction({accessToken:t,commentId:e,reactionId:r.data.id}):201===r.status}async deleteCommentReaction({accessToken:t,commentId:e,reactionId:n}){return 204===(await this.$http.delete(`repos/${this.owner}/${this.repo}/issues/comments/${e}/reactions/${n}`,{headers:{Authorization:"token "+t,Accept:"application/vnd.github.squirrel-girl-preview"}})).status}}function jo(t){return null===t?{username:"ghost",avatar:"https://avatars3.githubusercontent.com/u/10137?v=4",homepage:"https://github.com/ghost"}:{username:t.login,avatar:t.avatarUrl,homepage:t.url}}function $o(t){return{id:t.number,title:t.title,content:t.body,link:t.url}}function Co(t){return{like:t.find(t=>"THUMBS_UP"===t.content).users.totalCount,unlike:t.find(t=>"THUMBS_DOWN"===t.content).users.totalCount,heart:t.find(t=>"HEART"===t.content).users.totalCount}}function Ao(t){return{id:t.id,content:t.bodyHTML,contentRaw:t.body,author:jo(t.author),createdAt:t.createdAt,updatedAt:t.updatedAt,reactions:Co(t.reactionGroups)}}function Eo(t){return"like"===t?"THUMBS_UP":"unlike"===t?"THUMBS_DOWN":"heart"===t?"HEART":t}class To{constructor({baseURL:t="https://github.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:a,proxy:s}){if(void 0===i||void 0===s)throw new Error("clientSecret and proxy is required for GitHub V4");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=a,this.proxy=s,this._pageInfo={page:1,startCursor:null,endCursor:null,sort:null,perPage:null},this._issueNodeId=null,this.$http=bo.a.create({baseURL:"https://github.com"===t?"https://api.github.com":Ln(t,"api"),headers:{Accept:"application/vnd.github.v3+json"}}),this.$http.interceptors.response.use(t=>t.data.error?Promise.reject(t.data.error_description):t.data.errors?Promise.reject(t.data.errors[0].message):t)}get platform(){return{name:"GitHub",link:this.baseURL,version:"v4",meta:{reactable:!0,sortable:!0}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"login/oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"public_repo",state:this.state})}async handleAuth(){const t=Un(window.location.search);if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Mn(Dn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Ln(this.baseURL,"login/oauth/access_token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t},{headers:{Accept:"application/json"}});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.post("graphql",{query:"query getUser {\n viewer {\n login\n avatarUrl\n url\n }\n}"},{headers:{Authorization:"token "+t}});return jo(e.data.viewer)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"token "+t}),!e){const t=[`"${n}"`,"in:title",`repo:${this.owner}/${this.repo}`,"is:public",...this.labels.map(t=>"label:"+t)].join(" "),{data:e}=await this.$http.post("graphql",{variables:{query:t},query:"query getIssueByTitle(\n $query: String!\n) {\n search(\n query: $query\n type: ISSUE\n first: 20\n ) {\n nodes {\n ... on Issue {\n id\n number\n title\n body\n url\n }\n }\n }\n}"},r),o=e.data.search.nodes.find(t=>t.title===n);return o?(this._issueNodeId=o.id,$o(o)):null}try{const{data:t}=await this.$http.post("graphql",{query:`query getIssueById {\n repository(owner: "${this.owner}", name: "${this.repo}") {\n issue (number: ${e}) {\n id\n number\n title\n body\n url\n }\n }\n}`},r);return this._issueNodeId=t.data.repository.issue.id,$o(t.data.repository.issue)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues`,{title:e,body:n,labels:this.labels},{headers:{Authorization:"token "+t}});return r.url=r.html_url,this._issueNodeId=r.node_id,$o(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={};t&&(i.headers={Authorization:"token "+t}),null!==this._pageInfo.sort&&o!==this._pageInfo.sort&&(n=1);const{firstOrLast:a,afterOrBefore:s,cursor:c}=this._getQueryParams({page:n,sort:o}),{data:u}=await this.$http.post("graphql",{variables:{owner:this.owner,repo:this.repo,issueId:e,perPage:r},query:`query getComments(\n $owner: String!\n $repo: String!\n $issueId: Int!\n $perPage: Int!\n) {\n repository(owner: $owner, name: $repo) {\n issue(number: $issueId) {\n comments(\n ${a}: $perPage\n ${null===s?"":`${s}: "${c}"`}\n ) {\n totalCount\n pageInfo {\n endCursor\n startCursor\n }\n nodes {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n }\n}`},i),l=u.data.repository.issue.comments;return"desc"===o&&l.nodes.reverse(),this._pageInfo={page:n,startCursor:l.pageInfo.startCursor,endCursor:l.pageInfo.endCursor,sort:o,perPage:r},{count:l.totalCount,page:n,perPage:r,data:l.nodes.map(Ao)}}async postComment({accessToken:t,content:e}){const{data:n}=await this.$http.post("graphql",{variables:{issueNodeId:this._issueNodeId,content:e},query:"mutation postComment(\n $issueNodeId: ID!\n $content: String!\n) {\n addComment(\n input: {\n subjectId: $issueNodeId\n body: $content\n }\n ) {\n commentEdge {\n node {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n}"},{headers:{Authorization:"token "+t}});return Ao(n.data.addComment.commentEdge.node)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.post("graphql",{variables:{commentId:e,content:n},query:"mutation putComment(\n $commentId: ID!,\n $content: String!,\n) {\n updateIssueComment(input: {\n id: $commentId\n body: $content\n }) {\n issueComment {\n id\n body\n bodyHTML\n createdAt\n updatedAt\n author {\n avatarUrl\n login\n url\n }\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n}"},{headers:{Authorization:"token "+t}});return Ao(r.data.updateIssueComment.issueComment)}async deleteComment({accessToken:t,commentId:e}){return await this.$http.post("graphql",{variables:{commentId:e},query:"mutation deleteComment(\n $commentId: ID!,\n) {\n deleteIssueComment(input: {\n id: $commentId\n }) {\n clientMutationId\n }\n}"},{headers:{Authorization:"token "+t}}),!0}async getCommentReactions({accessToken:t,issueId:e,commentId:n}){const{firstOrLast:r,afterOrBefore:o,cursor:i}=this._getQueryParams(),{data:a}=await this.$http.post("graphql",{variables:{owner:this.owner,repo:this.repo,issueId:e,perPage:this._pageInfo.perPage},query:`query getComments(\n $owner: String!\n $repo: String!\n $issueId: Int!\n $perPage: Int!\n) {\n repository(owner: $owner, name: $repo) {\n issue(number: $issueId) {\n comments(\n ${r}: $perPage\n ${null===o?"":`${o}: "${i}"`}\n ) {\n nodes {\n id\n reactionGroups {\n users (first: 0) {\n totalCount\n }\n content\n }\n }\n }\n }\n }\n}`},{headers:{Authorization:"token "+t}});return Co(a.data.repository.issue.comments.nodes.find(t=>t.id===n).reactionGroups)}async postCommentReaction({accessToken:t,commentId:e,reaction:n}){return await this.$http.post("graphql",{variables:{commentId:e,content:Eo(n)},query:"mutation postCommentReaction(\n $commentId: ID!,\n $content: ReactionContent!,\n) {\n addReaction(input: {\n subjectId: $commentId\n content: $content\n }) {\n reaction {\n databaseId\n }\n }\n}"},{headers:{Authorization:"token "+t}}),!0}_getQueryParams({page:t=this._pageInfo.page,sort:e=this._pageInfo.sort}={}){let n,r,o;return 1===t?(n="asc"===e?"first":"last",r=null,o=null):"asc"===e?t>this._pageInfo.page?(n="first",r="after",o=this._pageInfo.endCursor):(n="last",r="before",o=this._pageInfo.startCursor):t>this._pageInfo.page?(n="last",r="before",o=this._pageInfo.startCursor):(n="first",r="after",o=this._pageInfo.endCursor),{firstOrLast:n,afterOrBefore:r,cursor:o}}}function Po(t){return{username:t.username,avatar:t.avatar_url,homepage:t.web_url}}function Io(t){return{id:t.iid,title:t.title,content:t.description,link:t.web_url}}function Ro(t){return{id:t.id,content:t.body_html||"",contentRaw:t.body,author:Po(t.author),createdAt:t.created_at,updatedAt:t.updated_at,reactions:t.reactions}}function Mo(t){return{like:t.filter(t=>"thumbsup"===t.name).length,unlike:t.filter(t=>"thumbsdown"===t.name).length,heart:t.filter(t=>"heart"===t.name).length}}function Lo(t){return"like"===t?"thumbsup":"unlike"===t?"thumbsdown":t}class No{constructor({baseURL:t="https://gitlab.com",owner:e,repo:n,labels:r,clientId:o,state:i}){this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.state=i,this._encodedRepo=encodeURIComponent(`${this.owner}/${this.repo}`),this.$http=bo.a.create({baseURL:Ln(t,"api/v4"),headers:{Accept:"application/json"}})}get platform(){return{name:"GitLab",link:this.baseURL,version:"v4",meta:{reactable:!0,sortable:!0}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,response_type:"token",state:this.state})}async handleAuth(){const t=Un(window.location.hash.slice(1));if(!t.access_token||t.state!==this.state)return null;const e=t.access_token;delete t.access_token,delete t.token_type,delete t.expires_in,delete t.state;const n=Rn(t),r=n?"#"+n:"",o=`${Dn(window.location.href)}${window.location.search}${r}`;return window.history.replaceState(null,"",o),e}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{headers:{Authorization:"Bearer "+t}});return Po(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"Bearer "+t}),!e){r.params={labels:this.labels.join(","),order_by:"created_at",sort:"asc",search:n};const{data:t}=await this.$http.get(`projects/${this._encodedRepo}/issues`,r);return t.map(Io).find(t=>t.title===n)||null}try{const{data:t}=await this.$http.get(`projects/${this._encodedRepo}/issues/${e}`,r);return Io(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`projects/${this._encodedRepo}/issues`,{title:e,description:n,labels:this.labels.join(",")},{headers:{Authorization:"Bearer "+t}});return Io(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={params:{page:n,per_page:r,order_by:"created_at",sort:o}};t&&(i.headers={Authorization:"Bearer "+t});const a=await this.$http.get(`projects/${this._encodedRepo}/issues/${e}/notes`,i),s=a.data,c=[];for(const n of s)c.push((async()=>{n.body_html=await this.getMarkdownContent({accessToken:t,contentRaw:n.body})})()),c.push((async()=>{n.reactions=await this.getCommentReactions({accessToken:t,issueId:e,commentId:n.id})})());return await Promise.all(c),{count:Number(a.headers["x-total"]),page:Number(a.headers["x-page"]),perPage:Number(a.headers["x-per-page"]),data:s.map(Ro)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`projects/${this._encodedRepo}/issues/${e}/notes`,{body:n},{headers:{Authorization:"Bearer "+t}});return Ro(r)}async putComment({accessToken:t,issueId:e,commentId:n,content:r}){const{data:o}=await this.$http.put(`projects/${this._encodedRepo}/issues/${e}/notes/${n}`,{body:r},{headers:{Authorization:"Bearer "+t}}),[i,a]=await Promise.all([this.getMarkdownContent({accessToken:t,contentRaw:o.body}),this.getCommentReactions({accessToken:t,issueId:e,commentId:o.id})]);return o.body_html=i,o.reactions=a,Ro(o)}async deleteComment({accessToken:t,issueId:e,commentId:n}){const{status:r}=await this.$http.delete(`projects/${this._encodedRepo}/issues/${e}/notes/${n}`,{headers:{Authorization:"Bearer "+t}});return 204===r}async getCommentReactions({accessToken:t,issueId:e,commentId:n}){const{data:r}=await this.$http.get(`projects/${this._encodedRepo}/issues/${e}/notes/${n}/award_emoji`,{headers:{Authorization:"Bearer "+t}});return Mo(r)}async postCommentReaction({issueId:t,commentId:e,reaction:n,accessToken:r}){try{return 201===(await this.$http.post(`projects/${this._encodedRepo}/issues/${t}/notes/${e}/award_emoji`,{name:Lo(n)},{headers:{Authorization:"Bearer "+r}})).status}catch(t){if(t.response&&404===t.response.status)return!1;throw t}}async getMarkdownContent({accessToken:t,contentRaw:e}){const n={};t&&(n.headers={Authorization:"Bearer "+t});const{data:r}=await this.$http.post("markdown",{text:e,gfm:!0},n);return r.html}}function Fo(t){return{username:t.nickname,avatar:t.links.avatar.href,homepage:t.links.html.href}}function zo(t){return{id:t.id,title:t.title,content:t.content.raw,link:t.links.html.href}}function Do(t){return{id:t.id,content:t.content.html,contentRaw:t.content.raw,author:Fo(t.user),createdAt:t.created_on,updatedAt:t.updated_on,reactions:null}}class Uo{constructor({baseURL:t="https://bitbucket.org",owner:e,repo:n,clientId:r,state:o}){this.baseURL=t,this.owner=e,this.repo=n,this.clientId=r,this.state=o,this.$http=bo.a.create({baseURL:"https://api.bitbucket.org/2.0",headers:{Accept:"application/json"}})}get platform(){return{name:"Bitbucket",link:this.baseURL,version:"v2",meta:{reactable:!1,sortable:!0}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"site/oauth2/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,response_type:"token",state:this.state})}async handleAuth(){const t=Un(window.location.hash.slice(1));if(!t.access_token||t.state!==this.state)return null;const e=t.access_token;delete t.access_token,delete t.token_type,delete t.expires_in,delete t.state,delete t.scopes;const n=Rn(t),r=n?"#"+n:"",o=`${Dn(window.location.href)}${window.location.search}${r}`;return window.history.replaceState(null,"",o),e}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{headers:{Authorization:"Bearer "+t}});return Fo(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={};if(t&&(r.headers={Authorization:"Bearer "+t}),!e){r.params={sort:"created_on",q:`title="${n}"`,timestamp:Date.now()};const{data:t}=await this.$http.get(`repositories/${this.owner}/${this.repo}/issues`,r);return t.size>0?zo(t.values[0]):null}try{r.params={timestamp:Date.now()};const{data:t}=await this.$http.get(`repositories/${this.owner}/${this.repo}/issues/${e}`,r);return zo(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repositories/${this.owner}/${this.repo}/issues`,{title:e,content:{raw:n},priority:"trivial",kind:"task"},{headers:{Authorization:"Bearer "+t}});return r.links.html={href:Ln(this.baseURL,`${this.owner}/${this.repo}/issues/${r.id}`)},zo(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10,sort:o="desc"}={}}){const i={params:{page:n,pagelen:r,sort:"desc"===o?"-created_on":"created_on",timestamp:Date.now()}};t&&(i.headers={Authorization:"Bearer "+t});const{data:a}=await this.$http.get(`repositories/${this.owner}/${this.repo}/issues/${e}/comments`,i);return{count:a.size,page:a.page,perPage:a.pagelen,data:a.values.filter(t=>null!==t.content.raw).map(Do)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`repositories/${this.owner}/${this.repo}/issues/${e}/comments`,{content:{raw:n}},{headers:{Authorization:"Bearer "+t}});return Do(r)}async putComment({accessToken:t,issueId:e,commentId:n,content:r}){const{data:o}=await this.$http.put(`repositories/${this.owner}/${this.repo}/issues/${e}/comments/${n}`,{content:{raw:r}},{headers:{Authorization:"Bearer "+t}});return Do(o)}async deleteComment({accessToken:t,issueId:e,commentId:n}){const{status:r}=await this.$http.delete(`repositories/${this.owner}/${this.repo}/issues/${e}/comments/${n}`,{headers:{Authorization:"Bearer "+t}});return 204===r}async getCommentReactions(t){throw new Error("501 Not Implemented")}async postCommentReaction(t){throw new Error("501 Not Implemented")}}function Bo(t){return{username:t.login,avatar:t.avatar_url,homepage:t.html_url}}function qo(t){return{id:t.number,title:t.title,content:t.body,link:t.html_url}}function Vo(t){return{id:t.id,content:t.body_html||"",contentRaw:t.body,author:Bo(t.user),createdAt:t.created_at,updatedAt:t.updated_at||"",reactions:null}}class Ho{constructor({baseURL:t="https://gitee.com",owner:e,repo:n,labels:r,clientId:o,clientSecret:i,state:a,proxy:s}){if(void 0===i||void 0===s)throw new Error("clientSecret and proxy is required for Gitee V5");this.baseURL=t,this.owner=e,this.repo=n,this.labels=r,this.clientId=o,this.clientSecret=i,this.state=a,this.proxy=s,this.$http=bo.a.create({baseURL:Ln(t,"api/v5")}),this.$http.interceptors.response.use(t=>t,t=>(t.response.data&&t.response.data.message&&(t.message=t.response.data.message),Promise.reject(t)))}get platform(){return{name:"Gitee",link:this.baseURL,version:"v5",meta:{reactable:!1,sortable:!1}}}redirectAuth(){window.location.href=Mn(Ln(this.baseURL,"oauth/authorize"),{client_id:this.clientId,redirect_uri:window.location.href,scope:"user_info issues notes",response_type:"code",state:this.state})}async handleAuth(){const t=Un(window.location.search);if(t.code){if(t.state!==this.state)return null;const e=t.code;delete t.code,delete t.state;const n=Mn(Dn(window.location.href),t)+window.location.hash;window.history.replaceState(null,"",n);return await this.getAccessToken({code:e})}return null}async getAccessToken({code:t}){const e=Ln(this.baseURL,"oauth/token"),n="function"==typeof this.proxy?this.proxy(e):this.proxy,{data:r}=await this.$http.post(n,{client_id:this.clientId,client_secret:this.clientSecret,code:t,grant_type:"authorization_code",redirect_uri:window.location.href});return r.access_token}async getUser({accessToken:t}){const{data:e}=await this.$http.get("user",{params:{access_token:t}});return Bo(e)}async getIssue({accessToken:t,issueId:e,issueTitle:n}){const r={params:{timestamp:Date.now()}};if(t&&(r.params.access_token=t),!e){Object.assign(r.params,{q:n,repo:`${this.owner}/${this.repo}`,per_page:1});const{data:t}=await this.$http.get("search/issues",r);return t.map(qo).find(t=>t.title===n)||null}try{const{data:t}=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}`,r);return qo(t)}catch(t){if(t.response&&404===t.response.status)return null;throw t}}async postIssue({accessToken:t,title:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/issues`,{access_token:t,repo:this.repo,title:e,body:n,labels:this.labels.join(",")});return qo(r)}async getComments({accessToken:t,issueId:e,query:{page:n=1,perPage:r=10}={}}){const o={params:{page:n,per_page:r,timestamp:Date.now()},headers:{Accept:["application/vnd.gitee.html+json"]}};t&&(o.params.access_token=t);const i=await this.$http.get(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,o);return{count:Number(i.headers.total_count),page:n,perPage:r,data:i.data.map(Vo)}}async postComment({accessToken:t,issueId:e,content:n}){const{data:r}=await this.$http.post(`repos/${this.owner}/${this.repo}/issues/${e}/comments`,{body:n,access_token:t},{headers:{Accept:["application/vnd.gitee.html+json"]}});return Vo(r)}async putComment({accessToken:t,commentId:e,content:n}){const{data:r}=await this.$http.patch(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{body:n,access_token:t},{headers:{Accept:["application/vnd.gitee.html+json"]}});return Vo(r)}async deleteComment({accessToken:t,commentId:e}){const{status:n}=await this.$http.delete(`repos/${this.owner}/${this.repo}/issues/comments/${e}`,{params:{access_token:t}});return 204===n}async getCommentReactions(t){throw new Error("501 Not Implemented")}async postCommentReaction(t){throw new Error("501 Not Implemented")}}n(423);var Wo={name:"Vssue",components:{VssueComponent:go},props:{options:{type:Object,default:function(){return{}}}},data:function(){return{key:"key",platformOptions:{github:So,"github-v4":To,gitlab:No,bitbucket:Uo,gitee:Ho}}},computed:{vssueOptions:function(){var t=this.platformOptions,e=this.options,n=t[e.platform];return Object(Ze.a)(Object(Ze.a)({},e),{},{api:n})}},watch:{$route:function(t,e){var n=this;t.path!==e.path&&setTimeout((function(){n.key="reco-".concat((new Date).getTime())}),300)}}},Go=(n(424),{components:{Valine:xn,Vssue:Object(We.a)(Wo,(function(){var t=this.$createElement;return(this._self._c||t)("VssueComponent",{key:this.key,staticClass:"vssue-wrapper",attrs:{options:this.vssueOptions}})}),[],!1,null,null,null).exports},props:{isShowComments:{type:Boolean,default:!0}},data:function(){return{commentsOptions:{}}},computed:{solution:function(){var t=this.commentsOptions.solution,e=this.$themeConfig,n=e.valineConfig,r=e.vssueConfig,o=this.$themeLocaleConfig,i=o.valineConfig,a=o.vssueConfig,s="";return void 0!==t?s=t:void 0!==i||void 0!==n?s="valine":void 0===a&&void 0===r||(s="vssue"),s},options:function(){var t=this.commentsOptions.options,e=this.$themeConfig,n=e.valineConfig,r=e.vssueConfig,o=this.$themeLocaleConfig,i=o.valineConfig,a=o.vssueConfig;return void 0!==t?t:void 0!==i||void 0!==n?i||n:void 0!==a||void 0!==r?a||r:null},componentName:function(){var t=this.solution;return"valine"===t?"Valine":"vssue"===t?"Vssue":""}},mounted:function(){this.$themeConfig.commentsSolution=this.solution}}),Qo=Object(We.a)(Go,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{directives:[{name:"show",rawName:"v-show",value:this.isShowComments,expression:"isShowComments"}],staticClass:"comments-wrapper"},[e("ClientOnly",[e(this.componentName,{tag:"component",attrs:{options:this.options}})],1)],1)}),[],!1,null,null,null).exports,Yo={props:{idVal:String,numStyle:Object,flagTitle:{type:String,default:"Your Article Title"}},methods:{getIdVal:function(t){var e=this.$site.base;return e.slice(0,e.length-1)+t}}},Ko=Object(We.a)(Yo,(function(){var t=this.$createElement,e=this._self._c||t;return e("span",{staticClass:"leancloud-visitors",attrs:{id:this.getIdVal(this.idVal),"data-flag-title":this.flagTitle}},[e("a",{staticClass:"leancloud-visitors-count",style:this.numStyle})])}),[],!1,null,null,null).exports,Jo=(n(425),n(67)),Xo=n(20),Zo=n(31),ti={tags:{},categories:{},timeline:{}},ei=function(){function t(e,n){var r=this;Object(Xo.a)(this,t),this._metaMap=Object.assign({},e),Object.keys(this._metaMap).forEach((function(t){var e=r._metaMap[t].pageKeys;r._metaMap[t].pages=e.map((function(t){return function(t,e){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:i.default;Kt(e),n.$vuepress.$set("siteData",e);var r=t(n.$vuepress.$get("siteData")),o=new r,a=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(o)),s={};return Object.keys(a).reduce((function(t,e){return e.startsWith("$")&&(t[e]=a[e].get),t}),s),{computed:s}}((function(t){return function(){function e(){Object(Xo.a)(this,e)}return Object(Zo.a)(e,[{key:"setPage",value:function(t){this.__page=t}},{key:"$site",get:function(){return t}},{key:"$themeConfig",get:function(){return this.$site.themeConfig}},{key:"$frontmatter",get:function(){return this.$page.frontmatter}},{key:"$localeConfig",get:function(){var t,e,n=this.$site.locales,r=void 0===n?{}:n;for(var o in r)"/"===o?e=r[o]:0===this.$page.path.indexOf(o)&&(t=r[o]);return t||e||{}}},{key:"$siteTitle",get:function(){return this.$localeConfig.title||this.$site.title||""}},{key:"$canonicalUrl",get:function(){var t=this.$page.frontmatter.canonicalUrl;return"string"==typeof t&&t}},{key:"$title",get:function(){var t=this.$page,e=this.$page.frontmatter.metaTitle;if("string"==typeof e)return e;var n=this.$siteTitle,r=t.frontmatter.home?null:t.frontmatter.title||t.title;return n?r?r+" | "+n:n:r||"VuePress"}},{key:"$description",get:function(){var t=function(t){if(t){var e=t.filter((function(t){return"description"===t.name}))[0];if(e)return e.content}}(this.$page.frontmatter.meta);return t||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}},{key:"$lang",get:function(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}},{key:"$localePath",get:function(){return this.$localeConfig.path||"/"}},{key:"$themeLocaleConfig",get:function(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}},{key:"$page",get:function(){return this.__page?this.__page:function(t,e){for(var n=0;n - + @@ -65,6 +65,6 @@ 2021 - 2024

- + diff --git a/index.html b/index.html index db8aa588..143aba5b 100644 --- a/index.html +++ b/index.html @@ -18,7 +18,7 @@ - + @@ -75,6 +75,6 @@ 2021 - 2024
- + diff --git a/menu.html b/menu.html index 08d14214..f2e29ad0 100644 --- a/menu.html +++ b/menu.html @@ -18,7 +18,7 @@ - + @@ -64,7 +64,7 @@    2021 - 2024 -

目录

  • 互联网越来越流行,程序员内卷越来越严重,技术层出不穷,更新迭代不断;
  • 有可能是为了让技术精进,也有可能是害怕技术落后而掉队;总之需要获取一些前沿信息;
  • 这个项目会基本涵盖大部分技术体系。内容会按照日期进行分类,每天排行前几的文章会被收录;
  • 如果这个网站的分享对你有所帮助,还请大家给个 ⭐️ 让更多的人知道 (opens new window) .

# 2024

- +

目录

  • 互联网越来越流行,程序员内卷越来越严重,技术层出不穷,更新迭代不断;
  • 有可能是为了让技术精进,也有可能是害怕技术落后而掉队;总之需要获取一些前沿信息;
  • 这个项目会基本涵盖大部分技术体系。内容会按照日期进行分类,每天排行前几的文章会被收录;
  • 如果这个网站的分享对你有所帮助,还请大家给个 ⭐️ 让更多的人知道 (opens new window) .

# 2024

+ diff --git a/tag/index.html b/tag/index.html index 021d47dc..24045003 100644 --- a/tag/index.html +++ b/tag/index.html @@ -18,7 +18,7 @@ - + @@ -64,7 +64,7 @@    2021 - 2024 -
- +
+ diff --git a/timeline/index.html b/timeline/index.html index 35d35213..00522829 100644 --- a/timeline/index.html +++ b/timeline/index.html @@ -18,7 +18,7 @@ - + @@ -65,6 +65,6 @@ 2021 - 2024
- +