diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 032cb01..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,32 +0,0 @@ -# name 可以自定义 -name: Deploy GitHub Pages - -# 触发条件:在 push 到 main/master 分支后,新的 Github 项目 应该都是 main,而之前的项目一般都是 master -on: - push: - branches: - - main - -# 任务 -jobs: - build-and-deploy: - # 服务器环境:最新版 Ubuntu - runs-on: ubuntu-latest - steps: - # 拉取代码 - - name: Checkout - uses: actions/checkout@v2 - with: - persist-credentials: false - - # 生成静态文件 - - name: Build - run: npm install && yarn build - - # 部署到 GitHub Pages - - name: Deploy - uses: JamesIves/github-pages-deploy-action@releases/v3 - with: - ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} # 也就是我们刚才生成的 secret - BRANCH: gh-pages # 部署到 gh-pages 分支,因为 main 分支存放的一般是源码,而 gh-pages 分支则用来存放生成的静态文件 - FOLDER: docs/.vuepress/dist # vuepress 生成的静态文件存放的地方 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 144efaa..0000000 --- a/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# npm -package-lock.json -node_modules -yarn-error.log - -# vscode -.vscode - -#yarn -yarn.lock - -# vuepress -docs/.vuepress/dist - -# 百度链接推送 -urls.txt - -# mac -.DS_Store diff --git a/404.html b/404.html new file mode 100644 index 0000000..1a1c74e --- /dev/null +++ b/404.html @@ -0,0 +1,20 @@ + + + + + + Java技术文档 + + + + + + + + + + +
404
这里什么都没有。
返回首页
+ + + diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 16d6732..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019-present gaoyi(Evan) Xu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index b75aed4..0000000 --- a/README.md +++ /dev/null @@ -1,31 +0,0 @@ -## 介绍 - -1. 这个主题的初衷是打造一个好用的、面向程序员的`知识管理工具` -2. 轻松构建一个`结构化`的知识库,让你的知识海洋像一本本书一样清晰易读。 -3. 博客功能提供一种知识的`碎片化`形态,并支持个性化博客配置。 -4. `简洁高效`,以 Markdown 为中心的项目结构。内置自动化工具,以更少的配置完成更多的事。配合多维索引快速定位每个知识点。 - -[**更新日志**](https://github.com/xugaoyi/vuepress-theme-vdoing/releases) - -## 这个主题可以做什么? - -* 案例1:[知识库兼博客站](https://xugaoyi.com/) -* 案例2:[仅博客站](https://xugaoyi.github.io/vdoing-demo-blog/) -* 案例3:[仅知识库](https://xugaoyi.github.io/vdoing-demo-repository/) -* 案例4:[文档站](https://doc.xugaoyi.com/) - -## 快速上手 - -```bash -# clone the project -git clone https://github.com/xugaoyi/vuepress-theme-vdoing.git - -# enter the project directory -cd vuepress-theme-vdoing - -# install dependency -npm install # or yarn install - -# develop -npm run dev # or yarn dev -``` diff --git a/archives/index.html b/archives/index.html new file mode 100644 index 0000000..1559a02 --- /dev/null +++ b/archives/index.html @@ -0,0 +1,104 @@ + + + + + + 归档 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/assets/css/0.styles.7032feb5.css b/assets/css/0.styles.7032feb5.css new file mode 100644 index 0000000..c3ec26a --- /dev/null +++ b/assets/css/0.styles.7032feb5.css @@ -0,0 +1 @@ +@import url(//at.alicdn.com/t/font_1678482_4tbhmh589x.css);.code-copy{color:#aaa;fill:#aaa;font-size:14px;display:inline-block;cursor:pointer}div[class*=aside-code] aside .code-copy,div[class*=language-] pre .code-copy{position:absolute;z-index:1000;top:7px;right:35px;opacity:0;font-size:16px}div[class*=aside-code] aside:hover .code-copy,div[class*=language-] pre:hover .code-copy{opacity:1}.content pre,.content pre[class*=language-]{overflow-y:hidden}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{position:static!important}div[class~=language-text]:before{content:"text"}div[class~=language-yml]:before{content:"yml"}div[class*=language-] pre{-webkit-user-select:text;-moz-user-select:text;user-select:text}p code{-webkit-user-select:all;-moz-user-select:all;user-select:all}@-webkit-keyframes message-move-in{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}@keyframes message-move-in{0%{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:translateY(0)}}#message-container .message.move-in{-webkit-animation:message-move-in .3s ease-in-out;animation:message-move-in .3s ease-in-out}@-webkit-keyframes message-move-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}@keyframes message-move-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-100%)}}#message-container .message.move-out{-webkit-animation:message-move-out .3s ease-in-out;animation:message-move-out .3s ease-in-out;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards}#message-container .message{background:#fff;margin:10px 0;padding:0 10px;height:40px;box-shadow:0 0 10px 0 #ccc;font-size:14px;border-radius:3px;display:flex;align-items:center;transition:height .2s ease-in-out,margin .2s ease-in-out}#message-container{position:fixed;left:0;top:100px;right:0;display:flex;flex-direction:column;align-items:center}#message-container .message .text{color:#333;padding:0 20px 0 5px}.theme-code-block[data-v-5a3e6e86]{display:none}.theme-code-block__active[data-v-5a3e6e86]{display:block}.theme-code-block>pre[data-v-5a3e6e86]{background-color:orange}@media (max-width:419px){.theme-code-group div[class*=language-][data-v-5a3e6e86]{margin:0}}.theme-mode-light[data-v-392329f0]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-392329f0],.theme-mode-light pre[class*=language-][data-v-392329f0]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-392329f0]::-moz-selection,.theme-mode-light code[class*=language-][data-v-392329f0] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-392329f0]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-392329f0] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-392329f0]::selection,.theme-mode-light code[class*=language-][data-v-392329f0] ::selection,.theme-mode-light pre[class*=language-][data-v-392329f0]::selection,.theme-mode-light pre[class*=language-][data-v-392329f0] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-392329f0],.theme-mode-light pre[class*=language-][data-v-392329f0]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-392329f0]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-392329f0],.theme-mode-light pre[class*=language-][data-v-392329f0]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-392329f0]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-392329f0],.theme-mode-light .token.comment[data-v-392329f0],.theme-mode-light .token.doctype[data-v-392329f0],.theme-mode-light .token.prolog[data-v-392329f0]{color:#708090}.theme-mode-light .token.punctuation[data-v-392329f0]{color:#999}.theme-mode-light .namespace[data-v-392329f0]{opacity:.7}.theme-mode-light .token.boolean[data-v-392329f0],.theme-mode-light .token.constant[data-v-392329f0],.theme-mode-light .token.deleted[data-v-392329f0],.theme-mode-light .token.number[data-v-392329f0],.theme-mode-light .token.property[data-v-392329f0],.theme-mode-light .token.symbol[data-v-392329f0],.theme-mode-light .token.tag[data-v-392329f0]{color:#905}.theme-mode-light .token.attr-name[data-v-392329f0],.theme-mode-light .token.builtin[data-v-392329f0],.theme-mode-light .token.char[data-v-392329f0],.theme-mode-light .token.inserted[data-v-392329f0],.theme-mode-light .token.selector[data-v-392329f0],.theme-mode-light .token.string[data-v-392329f0]{color:#690}.theme-mode-light .language-css .token.string[data-v-392329f0],.theme-mode-light .style .token.string[data-v-392329f0],.theme-mode-light .token.entity[data-v-392329f0],.theme-mode-light .token.operator[data-v-392329f0],.theme-mode-light .token.url[data-v-392329f0]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-392329f0],.theme-mode-light .token.attr-value[data-v-392329f0],.theme-mode-light .token.keyword[data-v-392329f0]{color:#07a}.theme-mode-light .token.class-name[data-v-392329f0],.theme-mode-light .token.function[data-v-392329f0]{color:#dd4a68}.theme-mode-light .token.important[data-v-392329f0],.theme-mode-light .token.regex[data-v-392329f0],.theme-mode-light .token.variable[data-v-392329f0]{color:#e90}.theme-mode-light .token.bold[data-v-392329f0],.theme-mode-light .token.important[data-v-392329f0]{font-weight:700}.theme-mode-light .token.italic[data-v-392329f0]{font-style:italic}.theme-mode-light .token.entity[data-v-392329f0]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-392329f0],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-392329f0]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-392329f0]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-392329f0],.theme-mode-dark pre[class*=language-][data-v-392329f0]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-392329f0]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-392329f0],.theme-mode-dark pre[class*=language-][data-v-392329f0]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-392329f0]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-392329f0],.theme-mode-dark .token.cdata[data-v-392329f0],.theme-mode-dark .token.comment[data-v-392329f0],.theme-mode-dark .token.doctype[data-v-392329f0],.theme-mode-dark .token.prolog[data-v-392329f0]{color:#999}.theme-mode-dark .token.punctuation[data-v-392329f0]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-392329f0],.theme-mode-dark .token.deleted[data-v-392329f0],.theme-mode-dark .token.namespace[data-v-392329f0],.theme-mode-dark .token.tag[data-v-392329f0]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-392329f0]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-392329f0],.theme-mode-dark .token.function[data-v-392329f0],.theme-mode-dark .token.number[data-v-392329f0]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-392329f0],.theme-mode-dark .token.constant[data-v-392329f0],.theme-mode-dark .token.property[data-v-392329f0],.theme-mode-dark .token.symbol[data-v-392329f0]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-392329f0],.theme-mode-dark .token.builtin[data-v-392329f0],.theme-mode-dark .token.important[data-v-392329f0],.theme-mode-dark .token.keyword[data-v-392329f0],.theme-mode-dark .token.selector[data-v-392329f0]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-392329f0],.theme-mode-dark .token.char[data-v-392329f0],.theme-mode-dark .token.regex[data-v-392329f0],.theme-mode-dark .token.string[data-v-392329f0],.theme-mode-dark .token.variable[data-v-392329f0]{color:#7ec699}.theme-mode-dark .token.entity[data-v-392329f0],.theme-mode-dark .token.operator[data-v-392329f0],.theme-mode-dark .token.url[data-v-392329f0]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-392329f0],.theme-mode-dark .style .token.string[data-v-392329f0],.theme-mode-dark .token.entity[data-v-392329f0],.theme-mode-dark .token.operator[data-v-392329f0],.theme-mode-dark .token.url[data-v-392329f0]{background:none}.theme-mode-dark .token.bold[data-v-392329f0],.theme-mode-dark .token.important[data-v-392329f0]{font-weight:700}.theme-mode-dark .token.italic[data-v-392329f0]{font-style:italic}.theme-mode-dark .token.entity[data-v-392329f0]{cursor:help}.theme-mode-dark .token.inserted[data-v-392329f0]{color:green}.theme-mode-read[data-v-392329f0]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-392329f0],.theme-mode-read pre[class*=language-][data-v-392329f0]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-392329f0]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-392329f0],.theme-mode-read pre[class*=language-][data-v-392329f0]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-392329f0]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-392329f0],.theme-mode-read .token.cdata[data-v-392329f0],.theme-mode-read .token.comment[data-v-392329f0],.theme-mode-read .token.doctype[data-v-392329f0],.theme-mode-read .token.prolog[data-v-392329f0]{color:#999}.theme-mode-read .token.punctuation[data-v-392329f0]{color:#ccc}.theme-mode-read .token.attr-name[data-v-392329f0],.theme-mode-read .token.deleted[data-v-392329f0],.theme-mode-read .token.namespace[data-v-392329f0],.theme-mode-read .token.tag[data-v-392329f0]{color:#e2777a}.theme-mode-read .token.function-name[data-v-392329f0]{color:#6196cc}.theme-mode-read .token.boolean[data-v-392329f0],.theme-mode-read .token.function[data-v-392329f0],.theme-mode-read .token.number[data-v-392329f0]{color:#f08d49}.theme-mode-read .token.class-name[data-v-392329f0],.theme-mode-read .token.constant[data-v-392329f0],.theme-mode-read .token.property[data-v-392329f0],.theme-mode-read .token.symbol[data-v-392329f0]{color:#f8c555}.theme-mode-read .token.atrule[data-v-392329f0],.theme-mode-read .token.builtin[data-v-392329f0],.theme-mode-read .token.important[data-v-392329f0],.theme-mode-read .token.keyword[data-v-392329f0],.theme-mode-read .token.selector[data-v-392329f0]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-392329f0],.theme-mode-read .token.char[data-v-392329f0],.theme-mode-read .token.regex[data-v-392329f0],.theme-mode-read .token.string[data-v-392329f0],.theme-mode-read .token.variable[data-v-392329f0]{color:#7ec699}.theme-mode-read .token.entity[data-v-392329f0],.theme-mode-read .token.operator[data-v-392329f0],.theme-mode-read .token.url[data-v-392329f0]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-392329f0],.theme-mode-read .style .token.string[data-v-392329f0],.theme-mode-read .token.entity[data-v-392329f0],.theme-mode-read .token.operator[data-v-392329f0],.theme-mode-read .token.url[data-v-392329f0]{background:none}.theme-mode-read .token.bold[data-v-392329f0],.theme-mode-read .token.important[data-v-392329f0]{font-weight:700}.theme-mode-read .token.italic[data-v-392329f0]{font-style:italic}.theme-mode-read .token.entity[data-v-392329f0]{cursor:help}.theme-mode-read .token.inserted[data-v-392329f0]{color:green}.theme-style-line.theme-mode-light[data-v-392329f0]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-392329f0]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-392329f0]{--bodyBg:#f5f5d5}.theme-code-group[data-v-392329f0],.theme-code-group__nav[data-v-392329f0]{background-color:var(--codeBg);padding-bottom:22px;border-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__nav[data-v-392329f0]{margin-bottom:-35px}.theme-code-group__ul[data-v-392329f0]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__li[data-v-392329f0],.theme-code-group__nav-tab[data-v-392329f0]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:var(--codeColor);font-weight:600;opacity:.85}.theme-code-group__nav-tab-active[data-v-392329f0]{border-bottom:1px solid #11a8cd;opacity:1}.pre-blank[data-v-392329f0]{color:#11a8cd}body .theme-vdoing-content code{color:var(--textLightenColor);padding:.25rem .5rem;margin:0;font-size:.9em;background-color:hsla(0,0%,39.2%,.08);border-radius:3px}body .theme-vdoing-content code .token.deleted{color:#ec5975}body .theme-vdoing-content code .token.inserted{color:#11a8cd}body .theme-vdoing-content pre,body .theme-vdoing-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}body .theme-vdoing-content pre[class*=language-] code,body .theme-vdoing-content pre code{color:var(--codeColor);padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:var(--codeBg);border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.3)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative!important;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.8rem;color:hsla(0,0%,58.8%,.7)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:2.5rem;height:100%;background-color:rgba(0,0,0,.3)}div[class*=language-].line-numbers-mode pre{padding-left:3.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:2.5rem;text-align:center;color:hsla(0,0%,49.8%,.5);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:2.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid var(--borderColor);background-color:var(--codeBg)}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:.2rem}.custom-block p{margin:0}.custom-block.danger,.custom-block.note,.custom-block.tip,.custom-block.warning{padding:.5rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983;color:#215d42}.custom-block.warning{background-color:#fff7d0;border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:var(--textColor)}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:var(--textColor)}.custom-block.note{background-color:#e8f5fa;border-color:#157bae;color:#0d4a68}.custom-block.right{color:var(--textColor);font-size:.9rem;text-align:right}.custom-block.theorem{margin:1rem 0;padding:.8rem 1.5rem;border-radius:2px;background-color:var(--customBlockBg)}.custom-block.theorem .title{font-weight:700;margin:.5rem 0}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1em 0;padding:1.6em;background-color:var(--customBlockBg)}.custom-block.details p{margin:.8rem 0}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.custom-block.details summary:hover{color:#11a8cd}.theme-mode-dark .custom-block.warning{background-color:rgba(255,247,208,.2);color:#e7c000}.theme-mode-dark .custom-block.warning .custom-block-title{color:#ffdc2f}.theme-mode-dark .custom-block.tip{background-color:rgba(243,245,247,.2);color:#42b983}.theme-mode-dark .custom-block.danger{background-color:rgba(255,230,230,.4);color:maroon}.theme-mode-dark .custom-block.danger a{color:#11a8cd}.theme-mode-dark .custom-block.note{background-color:rgba(243,245,247,.2);color:#157bae}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-vdoing-content:not(.custom){max-width:860px}.table-of-contents .badge{vertical-align:middle}.center-container{text-align:center}.center-container>h1,.center-container>h2,.center-container>h3,.center-container>h4,.center-container>h5,.center-container>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.center-container>h1 a.header-anchor,.center-container>h2 a.header-anchor,.center-container>h3 a.header-anchor,.center-container>h4 a.header-anchor,.center-container>h5 a.header-anchor,.center-container>h6 a.header-anchor{float:none;padding-right:0;margin-left:-.9rem}.cardListContainer{margin:.7rem 0}.cardListContainer>:not(.card-list){display:none}.cardListContainer .card-list{margin:-.35rem;display:flex;flex-wrap:wrap;align-items:flex-start}.cardListContainer .card-list .card-item{width:calc(33.33333% - .7rem);margin:.35rem;background:var(--bodyBg);border-radius:3px;color:var(--textColor);display:flex;box-shadow:1px 1px 2px 0 rgba(0,0,0,.06);transition:all .4s}.cardListContainer .card-list .card-item:hover{text-decoration:none;box-shadow:0 10px 20px -10px var(--randomColor,rgba(0,0,0,.15));transform:translateY(-3px) scale(1.01)}.cardListContainer .card-list .card-item:hover img{box-shadow:3px 2px 7px rgba(0,0,0,.15)}.cardListContainer .card-list .card-item:hover div p{text-shadow:3px 2px 5px rgba(0,0,0,.15)}.cardListContainer .card-list .card-item img{width:60px;height:60px;border-radius:50%;border:2px solid #fff;margin:1rem 0 1rem 1rem;box-shadow:3px 2px 5px rgba(0,0,0,.08);transition:all .4s}.cardListContainer .card-list .card-item div{flex:1;display:inline-block;float:right;padding:1rem 0}.cardListContainer .card-list .card-item div p{margin:0;padding:0 1rem;transition:text-shadow .4s;text-align:center}.cardListContainer .card-list .card-item div .name{margin:.2rem 0 .3rem}.cardListContainer .card-list .card-item div .desc{font-size:.8rem;line-height:1.1rem;opacity:.8;margin-bottom:.2rem}.cardListContainer .card-list .card-item.row-1{width:calc(100% - .7rem)}.cardListContainer .card-list .card-item.row-1 img{margin-left:2rem}.cardListContainer .card-list .card-item.row-2{width:calc(50% - .7rem)}.cardListContainer .card-list .card-item.row-2 img{margin-left:1.5rem}.cardListContainer .card-list .card-item.row-3{width:calc(33.33333% - .7rem)}.cardListContainer .card-list .card-item.row-4{width:calc(25% - .7rem)}.cardImgListContainer{margin:1rem 0}.cardImgListContainer>:not(.card-list){display:none}.cardImgListContainer .card-list{margin:-.5rem;display:flex;flex-wrap:wrap;align-items:flex-start}.cardImgListContainer .card-list .card-item{width:calc(33.33333% - 1rem);margin:.5rem;background:var(--mainBg);border:1px solid rgba(0,0,0,.1);box-sizing:border-box;border-radius:3px;overflow:hidden;color:var(--textColor);box-shadow:2px 2px 10px rgba(0,0,0,.04);display:flex;flex-direction:column;justify-content:flex-start;align-items:stretch;align-content:stretch;transition:all .4s}.cardImgListContainer .card-list .card-item:hover{box-shadow:1px 1px 20px rgba(0,0,0,.1);transform:translateY(-3px)}.cardImgListContainer .card-list .card-item .box-img{overflow:hidden;position:relative;background:#eee}.cardImgListContainer .card-list .card-item .box-img img{display:block;width:100%;height:100%;transition:all .3s}.cardImgListContainer .card-list .card-item a{color:var(--textColor);transition:color .3s}.cardImgListContainer .card-list .card-item a:hover{text-decoration:none}.cardImgListContainer .card-list .card-item .box-info{padding:.8rem 1rem}.cardImgListContainer .card-list .card-item .box-info p{margin:0}.cardImgListContainer .card-list .card-item .box-info .desc{margin-top:.3rem;opacity:.8;font-size:.9rem;line-height:1.1rem;overflow:hidden;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical}.cardImgListContainer .card-list .card-item .box-footer{overflow:hidden;padding:.8rem 1rem;border-top:1px solid rgba(0,0,0,.1)}.cardImgListContainer .card-list .card-item .box-footer img{width:1.8rem;height:1.8rem;border-radius:50%;float:left}.cardImgListContainer .card-list .card-item .box-footer span{line-height:1.8rem;float:left;margin-left:.6rem;font-size:.8rem}.cardImgListContainer .card-list .card-item.row-1{width:calc(100% - 1rem)}.cardImgListContainer .card-list .card-item.row-2{width:calc(50% - 1rem)}.cardImgListContainer .card-list .card-item.row-3{width:calc(33.33333% - 1rem)}.cardImgListContainer .card-list .card-item.row-4{width:calc(25% - 1rem)}.theme-mode-dark .cardImgListContainer .card-list .card-item,.theme-mode-dark .cardImgListContainer .card-list .card-item .box-footer{border-color:var(--borderColor)}@media (max-width:900px){.cardListContainer .card-list .card-item.row-4{width:calc(33.33333% - .7rem)}.cardImgListContainer .card-list .card-item.row-4{width:calc(33.33333% - 1rem)}}@media (max-width:720px){.cardListContainer .card-list .card-item.row-3,.cardListContainer .card-list .card-item.row-4{width:calc(50% - .7rem)}.cardListContainer .card-list .card-item.row-3 img,.cardListContainer .card-list .card-item.row-4 img{margin-left:1.5rem}.cardImgListContainer .card-list .card-item.row-3,.cardImgListContainer .card-list .card-item.row-4{width:calc(50% - 1rem)}}@media (max-width:500px){.cardListContainer .card-list .card-item.row-1,.cardListContainer .card-list .card-item.row-2,.cardListContainer .card-list .card-item.row-3,.cardListContainer .card-list .card-item.row-4{width:calc(100% - .7rem)}.cardListContainer .card-list .card-item.row-1 img,.cardListContainer .card-list .card-item.row-2 img,.cardListContainer .card-list .card-item.row-3 img,.cardListContainer .card-list .card-item.row-4 img{margin-left:1.5rem}.cardImgListContainer .card-list .card-item.row-1,.cardImgListContainer .card-list .card-item.row-2,.cardImgListContainer .card-list .card-item.row-3,.cardImgListContainer .card-list .card-item.row-4{width:calc(100% - 1rem)}}body,html{padding:0;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent;font-size:16px;color:#2c3e50;background:var(--bodyBg)}a,button,input{outline:none;-webkit-tap-highlight-color:rgba(255,255,255,0);-webkit-focus-ring-color:transparent}@media (min-width:719px){::-webkit-scrollbar{width:6px;height:5px}::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.15);-webkit-border-radius:3px}::-webkit-scrollbar-thumb:vertical{height:5px;background-color:rgba(0,0,0,.28);-webkit-border-radius:3px}::-webkit-scrollbar-thumb:horizontal{width:5px;background-color:rgba(0,0,0,.28);-webkit-border-radius:3px}}.card-box{border-radius:5px;background:var(--mainBg);box-shadow:0 0 4px 0 rgba(0,0,0,.1);transition:box-shadow .5s}.card-box:hover{box-shadow:0 1px 15px 0 rgba(0,0,0,.1)}@media (max-width:719px){.theme-style-line{margin-left:-1px;margin-right:-1px}}.theme-style-line .card-box{box-shadow:0 0;border:1px solid var(--borderColor)}.blur{-webkit-backdrop-filter:saturate(200%) blur(20px);backdrop-filter:saturate(200%) blur(20px)}.custom-page{min-height:calc(100vh - 3.6rem);padding-top:3.6rem;padding-bottom:.9rem}.custom-page .theme-vdoing-wrapper{margin:0 auto}body .search-box input{background-color:transparent;color:var(--textColor);border:1px solid var(--borderColor,#ccc)}@media (max-width:959px){body .search-box input{border-color:transparent}}.page{transition:padding .2s ease;padding-left:.8rem}.navbar{position:fixed;z-index:20;top:0;left:0;right:0;height:3.6rem;background-color:var(--blurBg);box-sizing:border-box;box-shadow:0 2px 5px rgba(0,0,0,.06)}.sidebar-mask{top:0;width:100vw;height:100vh}.sidebar-hover-trigger,.sidebar-mask{position:fixed;z-index:12;left:0;display:none}.sidebar-hover-trigger{top:8.1rem;bottom:0;width:24px}.sidebar{font-size:16px;background-color:var(--sidebarBg);width:18rem;position:fixed;z-index:13;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid var(--borderColor);overflow-y:auto;transform:translateX(-100%);transition:transform .2s}@media (max-width:719px){.sidebar{background-color:var(--mainBg)}}.theme-vdoing-content:not(.custom){word-wrap:break-word}.theme-vdoing-content:not(.custom) a:hover{text-decoration:underline}.theme-vdoing-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-vdoing-content:not(.custom) img{max-width:100%}.theme-vdoing-content.custom{padding:0;margin:0}.theme-vdoing-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#11a8cd}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;opacity:.75;border-left:.2rem solid hsla(0,0%,39.2%,.3);margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-vdoing-content:not(.custom)>h1,.theme-vdoing-content:not(.custom)>h2,.theme-vdoing-content:not(.custom)>h3,.theme-vdoing-content:not(.custom)>h4,.theme-vdoing-content:not(.custom)>h5,.theme-vdoing-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-vdoing-content:not(.custom)>h1:first-child,.theme-vdoing-content:not(.custom)>h2:first-child,.theme-vdoing-content:not(.custom)>h3:first-child,.theme-vdoing-content:not(.custom)>h4:first-child,.theme-vdoing-content:not(.custom)>h5:first-child,.theme-vdoing-content:not(.custom)>h6:first-child{margin-bottom:1rem}.theme-vdoing-content:not(.custom)>h1:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h1:first-child+p,.theme-vdoing-content:not(.custom)>h1:first-child+pre,.theme-vdoing-content:not(.custom)>h2:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h2:first-child+p,.theme-vdoing-content:not(.custom)>h2:first-child+pre,.theme-vdoing-content:not(.custom)>h3:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h3:first-child+p,.theme-vdoing-content:not(.custom)>h3:first-child+pre,.theme-vdoing-content:not(.custom)>h4:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h4:first-child+p,.theme-vdoing-content:not(.custom)>h4:first-child+pre,.theme-vdoing-content:not(.custom)>h5:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h5:first-child+p,.theme-vdoing-content:not(.custom)>h5:first-child+pre,.theme-vdoing-content:not(.custom)>h6:first-child+.custom-block,.theme-vdoing-content:not(.custom)>h6:first-child+p,.theme-vdoing-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}.theme-vdoing-content:not(.custom)>.custom-block:first-child,.theme-vdoing-content:not(.custom)>p:first-child,.theme-vdoing-content:not(.custom)>pre:first-child{margin-top:2rem}h1{font-size:1.9rem}.theme-vdoing-content:not(.custom)>h1:first-child{display:none}h2{font-size:1.5rem;padding-bottom:.3rem;border-bottom:1px solid var(--borderColor)}h3{font-size:1.35rem}.page h4{font-size:1.25rem}.page h5{font-size:1.15rem}.page h6{font-size:1.05rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid var(--borderColor)}table{border-collapse:collapse;margin:1rem 0;overflow-x:auto;width:100%;display:inline-table}@media (max-width:719px){table{display:block}}tr{border-top:1px solid var(--borderColor)}tr:nth-child(2n){background-color:hsla(0,0%,58.8%,.1)}td,th{border:1px solid var(--borderColor);padding:.6em 1em}@media (max-width:719px){td,th{padding:.3em .5em}}td a,th a{word-break:break-all}.theme-container{color:var(--textColor);min-height:100vh}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-vdoing-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px}}@media (max-width:719px){.sidebar{width:17.099999999999998rem}}@media (min-width:720px) and (max-width:959px){.sidebar{width:16.2rem}.theme-container.sidebar-open .page{padding-left:17rem!important}}@media (max-width:719px){.sidebar{top:0;height:100vh;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-vdoing-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}@media (min-width:720px){.theme-container .sidebar-hover-trigger{display:block}.theme-container .sidebar-hover-trigger:hover~.sidebar,.theme-container:not(.sidebar-open) .sidebar-hover-trigger~.sidebar:hover{transform:translateX(0);z-index:100}.theme-container.sidebar-open .sidebar-mask{display:none}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.sidebar-open .sidebar-button{left:18rem}.theme-container.sidebar-open .page{padding-left:18.8rem;padding-right:.8rem}.theme-container.sidebar-open .sidebar-hover-trigger{display:none}.theme-container.have-rightmenu .page{padding-right:250px}.theme-container.no-sidebar .page{padding-left:0!important}.theme-container.no-sidebar .sidebar-hover-trigger{display:none}.theme-container.hide-navbar .sidebar-hover-trigger{top:4.5rem}.theme-container.hide-navbar .sidebar{top:0}.theme-container.no-sidebar .sidebar-button{display:none}}@media print{.buttons,.navbar,.sidebar{display:none}.page{padding-top:0!important}}@media (min-width:720px) and (max-width:959px){.theme-container.sidebar-open:not(.on-sidebar) .sidebar-button{left:12.6rem}}.gt-container .gt-ico-tip:after{content:"。( Win + . ) or ( ⌃ + ⌘ + ␣ ) open Emoji";color:#999}.gt-container .gt-meta{border-color:var(--borderColor)!important}.gt-container .gt-comments-null{color:var(--textColor);opacity:.5}.gt-container .gt-header-textarea{color:var(--textColor);background:hsla(0,0%,70.6%,.1)!important}.gt-container .gt-btn{border-color:#11a8cd!important;background-color:#11a8cd!important}.gt-container .gt-btn-preview{background-color:hsla(0,0%,100%,0)!important;color:#11a8cd!important}.gt-container a{color:#11a8cd!important}.gt-container .gt-svg svg{fill:#11a8cd!important}.gt-container .gt-comment-admin .gt-comment-content,.gt-container .gt-comment-content{background-color:hsla(0,0%,58.8%,.1)!important}.gt-container .gt-comment-admin .gt-comment-content:hover,.gt-container .gt-comment-content:hover{box-shadow:0 0 25px hsla(0,0%,58.8%,.5)!important}.gt-container .gt-comment-admin .gt-comment-content .gt-comment-body,.gt-container .gt-comment-content .gt-comment-body{color:var(--textColor)!important}.qq{position:relative}.qq:after{content:"可撩";background:#11a8cd;color:#fff;padding:0 5px;border-radius:10px;font-size:12px;position:absolute;top:-4px;right:-35px;transform:scale(.85)}body .vuepress-plugin-demo-block__wrapper,body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__display{border-color:hsla(0,0%,62.7%,.3)}body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__footer:hover .vuepress-plugin-demo-block__expand:before{border-top-color:#11a8cd!important;border-bottom-color:#11a8cd!important}body .vuepress-plugin-demo-block__wrapper .vuepress-plugin-demo-block__footer:hover svg{fill:#11a8cd!important}.suggestions{overflow:auto;max-height:calc(100vh - 6rem)}@media (max-width:719px){.suggestions{width:90vw;min-width:90vw!important;margin-right:-20px}}.suggestions .highlight{color:#11a8cd;font-weight:700}#nprogress{pointer-events:none}#nprogress .bar{background:#11a8cd;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #11a8cd,0 0 5px #11a8cd;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#11a8cd transparent transparent #11a8cd;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.theme-mode-light[data-v-08abdc17]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-08abdc17],.theme-mode-light pre[class*=language-][data-v-08abdc17]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-08abdc17]::-moz-selection,.theme-mode-light code[class*=language-][data-v-08abdc17] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-08abdc17]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-08abdc17] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-08abdc17]::selection,.theme-mode-light code[class*=language-][data-v-08abdc17] ::selection,.theme-mode-light pre[class*=language-][data-v-08abdc17]::selection,.theme-mode-light pre[class*=language-][data-v-08abdc17] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-08abdc17],.theme-mode-light pre[class*=language-][data-v-08abdc17]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-08abdc17]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-08abdc17],.theme-mode-light pre[class*=language-][data-v-08abdc17]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-08abdc17]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-08abdc17],.theme-mode-light .token.comment[data-v-08abdc17],.theme-mode-light .token.doctype[data-v-08abdc17],.theme-mode-light .token.prolog[data-v-08abdc17]{color:#708090}.theme-mode-light .token.punctuation[data-v-08abdc17]{color:#999}.theme-mode-light .namespace[data-v-08abdc17]{opacity:.7}.theme-mode-light .token.boolean[data-v-08abdc17],.theme-mode-light .token.constant[data-v-08abdc17],.theme-mode-light .token.deleted[data-v-08abdc17],.theme-mode-light .token.number[data-v-08abdc17],.theme-mode-light .token.property[data-v-08abdc17],.theme-mode-light .token.symbol[data-v-08abdc17],.theme-mode-light .token.tag[data-v-08abdc17]{color:#905}.theme-mode-light .token.attr-name[data-v-08abdc17],.theme-mode-light .token.builtin[data-v-08abdc17],.theme-mode-light .token.char[data-v-08abdc17],.theme-mode-light .token.inserted[data-v-08abdc17],.theme-mode-light .token.selector[data-v-08abdc17],.theme-mode-light .token.string[data-v-08abdc17]{color:#690}.theme-mode-light .language-css .token.string[data-v-08abdc17],.theme-mode-light .style .token.string[data-v-08abdc17],.theme-mode-light .token.entity[data-v-08abdc17],.theme-mode-light .token.operator[data-v-08abdc17],.theme-mode-light .token.url[data-v-08abdc17]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-08abdc17],.theme-mode-light .token.attr-value[data-v-08abdc17],.theme-mode-light .token.keyword[data-v-08abdc17]{color:#07a}.theme-mode-light .token.class-name[data-v-08abdc17],.theme-mode-light .token.function[data-v-08abdc17]{color:#dd4a68}.theme-mode-light .token.important[data-v-08abdc17],.theme-mode-light .token.regex[data-v-08abdc17],.theme-mode-light .token.variable[data-v-08abdc17]{color:#e90}.theme-mode-light .token.bold[data-v-08abdc17],.theme-mode-light .token.important[data-v-08abdc17]{font-weight:700}.theme-mode-light .token.italic[data-v-08abdc17]{font-style:italic}.theme-mode-light .token.entity[data-v-08abdc17]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-08abdc17],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-08abdc17]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-08abdc17]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-08abdc17],.theme-mode-dark pre[class*=language-][data-v-08abdc17]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-08abdc17]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-08abdc17],.theme-mode-dark pre[class*=language-][data-v-08abdc17]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-08abdc17]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-08abdc17],.theme-mode-dark .token.cdata[data-v-08abdc17],.theme-mode-dark .token.comment[data-v-08abdc17],.theme-mode-dark .token.doctype[data-v-08abdc17],.theme-mode-dark .token.prolog[data-v-08abdc17]{color:#999}.theme-mode-dark .token.punctuation[data-v-08abdc17]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-08abdc17],.theme-mode-dark .token.deleted[data-v-08abdc17],.theme-mode-dark .token.namespace[data-v-08abdc17],.theme-mode-dark .token.tag[data-v-08abdc17]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-08abdc17]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-08abdc17],.theme-mode-dark .token.function[data-v-08abdc17],.theme-mode-dark .token.number[data-v-08abdc17]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-08abdc17],.theme-mode-dark .token.constant[data-v-08abdc17],.theme-mode-dark .token.property[data-v-08abdc17],.theme-mode-dark .token.symbol[data-v-08abdc17]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-08abdc17],.theme-mode-dark .token.builtin[data-v-08abdc17],.theme-mode-dark .token.important[data-v-08abdc17],.theme-mode-dark .token.keyword[data-v-08abdc17],.theme-mode-dark .token.selector[data-v-08abdc17]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-08abdc17],.theme-mode-dark .token.char[data-v-08abdc17],.theme-mode-dark .token.regex[data-v-08abdc17],.theme-mode-dark .token.string[data-v-08abdc17],.theme-mode-dark .token.variable[data-v-08abdc17]{color:#7ec699}.theme-mode-dark .token.entity[data-v-08abdc17],.theme-mode-dark .token.operator[data-v-08abdc17],.theme-mode-dark .token.url[data-v-08abdc17]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-08abdc17],.theme-mode-dark .style .token.string[data-v-08abdc17],.theme-mode-dark .token.entity[data-v-08abdc17],.theme-mode-dark .token.operator[data-v-08abdc17],.theme-mode-dark .token.url[data-v-08abdc17]{background:none}.theme-mode-dark .token.bold[data-v-08abdc17],.theme-mode-dark .token.important[data-v-08abdc17]{font-weight:700}.theme-mode-dark .token.italic[data-v-08abdc17]{font-style:italic}.theme-mode-dark .token.entity[data-v-08abdc17]{cursor:help}.theme-mode-dark .token.inserted[data-v-08abdc17]{color:green}.theme-mode-read[data-v-08abdc17]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-08abdc17],.theme-mode-read pre[class*=language-][data-v-08abdc17]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-08abdc17]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-08abdc17],.theme-mode-read pre[class*=language-][data-v-08abdc17]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-08abdc17]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-08abdc17],.theme-mode-read .token.cdata[data-v-08abdc17],.theme-mode-read .token.comment[data-v-08abdc17],.theme-mode-read .token.doctype[data-v-08abdc17],.theme-mode-read .token.prolog[data-v-08abdc17]{color:#999}.theme-mode-read .token.punctuation[data-v-08abdc17]{color:#ccc}.theme-mode-read .token.attr-name[data-v-08abdc17],.theme-mode-read .token.deleted[data-v-08abdc17],.theme-mode-read .token.namespace[data-v-08abdc17],.theme-mode-read .token.tag[data-v-08abdc17]{color:#e2777a}.theme-mode-read .token.function-name[data-v-08abdc17]{color:#6196cc}.theme-mode-read .token.boolean[data-v-08abdc17],.theme-mode-read .token.function[data-v-08abdc17],.theme-mode-read .token.number[data-v-08abdc17]{color:#f08d49}.theme-mode-read .token.class-name[data-v-08abdc17],.theme-mode-read .token.constant[data-v-08abdc17],.theme-mode-read .token.property[data-v-08abdc17],.theme-mode-read .token.symbol[data-v-08abdc17]{color:#f8c555}.theme-mode-read .token.atrule[data-v-08abdc17],.theme-mode-read .token.builtin[data-v-08abdc17],.theme-mode-read .token.important[data-v-08abdc17],.theme-mode-read .token.keyword[data-v-08abdc17],.theme-mode-read .token.selector[data-v-08abdc17]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-08abdc17],.theme-mode-read .token.char[data-v-08abdc17],.theme-mode-read .token.regex[data-v-08abdc17],.theme-mode-read .token.string[data-v-08abdc17],.theme-mode-read .token.variable[data-v-08abdc17]{color:#7ec699}.theme-mode-read .token.entity[data-v-08abdc17],.theme-mode-read .token.operator[data-v-08abdc17],.theme-mode-read .token.url[data-v-08abdc17]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-08abdc17],.theme-mode-read .style .token.string[data-v-08abdc17],.theme-mode-read .token.entity[data-v-08abdc17],.theme-mode-read .token.operator[data-v-08abdc17],.theme-mode-read .token.url[data-v-08abdc17]{background:none}.theme-mode-read .token.bold[data-v-08abdc17],.theme-mode-read .token.important[data-v-08abdc17]{font-weight:700}.theme-mode-read .token.italic[data-v-08abdc17]{font-style:italic}.theme-mode-read .token.entity[data-v-08abdc17]{cursor:help}.theme-mode-read .token.inserted[data-v-08abdc17]{color:green}.theme-style-line.theme-mode-light[data-v-08abdc17]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-08abdc17]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-08abdc17]{--bodyBg:#f5f5d5}.theme-vdoing-content[data-v-08abdc17]{margin:3rem auto;padding:1.5rem}.theme-vdoing-content span[data-v-08abdc17]{font-size:6rem;color:#11a8cd}.main-wrapper{margin:1.5rem auto 0;max-width:1100px;padding:0 .9rem;box-sizing:border-box;position:relative;display:flex}.main-wrapper .main-left{flex:1}.main-wrapper .main-left .theme-vdoing-content.card-box{padding:1rem 1.5rem;margin-bottom:.9rem}.main-wrapper .main-left .home-content{padding:1rem 1.5rem 0}.main-wrapper .main-right>*{width:245px;box-sizing:border-box}@media (max-width:900px){.main-wrapper .main-right>*{width:235px}}.main-wrapper .main-right .card-box{margin:0 0 .8rem .8rem;padding-top:.95rem;padding-bottom:.95rem}@media (max-width:719px){.main-wrapper{margin:.9rem 0;padding:0;display:block}.main-wrapper .main-left{width:100%}.main-wrapper .main-left .post-list{margin-bottom:3rem}.main-wrapper .main-left .post-list .post{border-radius:0}.main-wrapper .main-left .pagination{margin-bottom:3rem}.main-wrapper .main-right .blogger-wrapper{display:none}.main-wrapper .main-right .card-box{margin:0 0 .9rem;border-radius:0;width:100%}.theme-style-line .main-wrapper .main-right .card-box{margin:-1px 0 0}}.post-list{margin-bottom:3rem}.post-list .post{position:relative;padding:1rem 1.5rem;margin-bottom:.8rem;transition:all .3s}.post-list .post:last-child{border-bottom:none}.post-list .post.post-leave-active{display:none}.post-list .post.post-enter{opacity:0;transform:translateX(-20px)}.post-list .post:before{position:absolute;top:-1px;right:0;font-size:2.5rem;color:#ff5722;opacity:.85}.post-list .post .title-wrapper a{color:var(--textColor)}.post-list .post .title-wrapper a:hover{color:#11a8cd}.post-list .post .title-wrapper h2{margin:.5rem 0;font-size:1.4rem;border:none}.post-list .post .title-wrapper h2 .title-tag{height:1.2rem;line-height:1.2rem;border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.15rem);display:inline-block}.post-list .post .title-wrapper h2 a{display:block}@media (max-width:719px){.post-list .post .title-wrapper h2 a{font-weight:400}}.post-list .post .title-wrapper .article-info>a,.post-list .post .title-wrapper .article-info>span{opacity:.7;font-size:.8rem;margin-right:1rem;cursor:pointer}.post-list .post .title-wrapper .article-info>a:before,.post-list .post .title-wrapper .article-info>span:before{margin-right:.3rem}.post-list .post .title-wrapper .article-info>a a,.post-list .post .title-wrapper .article-info>span a{margin:0}.post-list .post .title-wrapper .article-info>a a:not(:first-child):before,.post-list .post .title-wrapper .article-info>span a:not(:first-child):before{content:"/"}.post-list .post .title-wrapper .article-info .tags a:not(:first-child):before{content:"、"}.post-list .post .excerpt-wrapper{border-top:1px solid var(--borderColor);margin:.5rem 0;overflow:hidden}.post-list .post .excerpt-wrapper .excerpt{margin-bottom:.3rem;font-size:.92rem}.post-list .post .excerpt-wrapper .excerpt h1,.post-list .post .excerpt-wrapper .excerpt h2,.post-list .post .excerpt-wrapper .excerpt h3{display:none}.post-list .post .excerpt-wrapper .excerpt img{max-height:280px;max-width:100%!important;margin:0 auto}.post-list .post .excerpt-wrapper .readmore{float:right;margin-right:1rem;line-height:1rem}.post-list .post .excerpt-wrapper .readmore:before{float:right;font-size:.8rem;margin:.1rem 0 0 .2rem}.theme-style-line .post-list{border:1px solid var(--borderColor);border-bottom:none;border-radius:5px;overflow:hidden}.theme-style-line .post-list .post{margin-bottom:0;border:none;border-bottom:1px solid var(--borderColor);border-radius:0}.article-list{padding:1rem 2rem}@media (max-width:959px){.article-list{padding:1rem 1.5rem}}.article-list.no-article-list{display:none}.article-list .article-title{border-bottom:1px solid var(--borderColor);font-size:1.3rem;padding:1rem}.article-list .article-title a{font-size:1.2rem;color:var(--textColor);opacity:.9}.article-list .article-title a:before{margin-right:.4rem;font-size:1.1rem}.article-list .article-wrapper{overflow:hidden}.article-list .article-wrapper dl{border-bottom:1px dotted var(--borderColor);float:left;display:flex;padding:8px 0;margin:0;height:45px;width:100%}.article-list .article-wrapper dl dd{font-size:1.1rem;color:#f17229;width:50px;text-align:center;margin:0;line-height:45px}.article-list .article-wrapper dl dt{flex:1;display:flex}.article-list .article-wrapper dl dt a{color:var(--textColor);flex:1;display:flex;height:45px;align-items:center;font-weight:400}.article-list .article-wrapper dl dt a div{overflow:hidden;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.article-list .article-wrapper dl dt a div .title-tag{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}.article-list .article-wrapper dl dt a:hover{text-decoration:underline}.article-list .article-wrapper dl dt a.more{color:#11a8cd}.article-list .article-wrapper dl dt .date{width:50px;margin-right:15px;color:#999;text-align:right;font-size:.9rem;line-height:45px}.pagination{position:relative;height:60px;text-align:center}@media (max-width:720px){.pagination{margin-left:1px;margin-right:1px}}.pagination span{line-height:1rem;opacity:.9;cursor:pointer}.pagination span:hover{color:#11a8cd}.pagination span.ellipsis{opacity:.5}.pagination span.ellipsis:before{content:"...";font-size:1.2rem}@media (any-hover:hover){.pagination span.ellipsis.ell-two:hover:before{content:"«"}.pagination span.ellipsis.ell-four:hover:before{content:"»"}}.pagination>span{position:absolute;top:0;padding:1rem 1.2rem;font-size:.95rem}.pagination>span:before{font-size:.4rem}.pagination>span.disabled{color:hsla(0,0%,49%,.5)}.pagination>span.prev{left:0}.pagination>span.prev:before{margin-right:.3rem}.pagination>span.next{right:0}.pagination>span.next:before{float:right;margin-left:.3rem}.pagination>span p{display:inline;line-height:.95rem}.pagination .pagination-list span{display:inline-block;width:2.5rem;height:2.5rem;line-height:2.5rem;margin:.3rem}.pagination .pagination-list span.active{background:#11a8cd;color:var(--mainBg)}@media (max-width:800px){.pagination>span{padding:1rem 1.5rem}.pagination>span p{display:none}}@media (max-width:719px){.pagination>span{padding:.9rem 1.5rem}.pagination .pagination-list span{width:2.3rem;height:2.3rem;line-height:2.3rem;margin:.25rem}}@media (max-width:390px){.pagination>span{padding:.8rem 1.3rem}.pagination .pagination-list span{width:2rem;height:2rem;line-height:2rem;margin:.3rem .1rem .1rem}}.blogger-wrapper{height:auto;display:inline-table;padding-top:0!important;overflow:hidden}.blogger-wrapper .avatar{width:100%;overflow:hidden}.blogger-wrapper .avatar img{width:100%;height:100%}.blogger-wrapper .icons{border-top:none;height:35px;line-height:35px}.blogger-wrapper .icons a{font-size:20px;width:33%;color:var(--textColor);display:block;float:left;text-align:center;opacity:.8}.blogger-wrapper .icons a:hover{color:#11a8cd}.blogger-wrapper .blogger{padding:.3rem .95rem 0}.blogger-wrapper .blogger .name{font-size:1.3rem;display:block;margin-bottom:6px}.blogger-wrapper .blogger .slogan{color:var(--textColor)}.categories-wrapper .title{color:var(--textColor);opacity:.9;font-size:1.2rem;padding:0 .95rem}.categories-wrapper .title:before{margin-right:.3rem}.categories-wrapper .categories{margin-top:.6rem}.categories-wrapper .categories a{display:block;padding:8px 2.4rem 7px .95rem;color:var(--textColor);opacity:.8;font-size:.95rem;line-height:.95rem;position:relative;transition:all .2s;border-left:2px solid transparent;margin-top:-1px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}@media (max-width:719px){.categories-wrapper .categories a{font-weight:400}}.categories-wrapper .categories a:not(.active):hover{color:#11a8cd;background:#f8f8f8;border-color:#11a8cd}.categories-wrapper .categories a:not(.active):hover span{opacity:.8}.categories-wrapper .categories a span{background-color:var(--textColor);color:var(--mainBg);border-radius:8px;padding:0 .13rem;min-width:1rem;height:1rem;line-height:1rem;font-size:12px;text-align:center;opacity:.6;transition:opacity .3s;position:absolute;right:.95rem;top:8px}.categories-wrapper .categories a.active{background:#11a8cd;color:var(--mainBg);padding-left:.8rem;border-radius:1px;border-color:transparent}.theme-mode-dark .categories-wrapper .categories a:not(.active):hover,.theme-mode-read .categories-wrapper .categories a:not(.active):hover{background:var(--customBlockBg)}.tags-wrapper{padding:0 .95rem}.tags-wrapper .title{color:var(--textColor);opacity:.9;font-size:1.2rem}.tags-wrapper .title:before{margin-right:.3rem}.tags-wrapper .tags{text-align:justify;padding:.8rem .5rem .5rem;margin:0 -.5rem -.5rem}.tags-wrapper .tags a{opacity:.8;display:inline-block;padding:.2rem .4rem;transition:all .4s;background-color:var(--textColor);color:var(--mainBg);border-radius:3px;margin:0 .3rem .5rem 0;min-width:2rem;height:1rem;line-height:1rem;font-size:.8rem;text-align:center}@media (max-width:719px){.tags-wrapper .tags a{font-weight:400}}.tags-wrapper .tags a:hover{opacity:1;transform:scale(1.1)}.tags-wrapper .tags a.active{box-shadow:0 5px 10px -5px var(--randomColor,rgba(0,0,0,.15));transform:scale(1.22);opacity:1}.tags-wrapper .tags a.active:hover{text-decoration:none}.theme-mode-light[data-v-d146d2d2]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-d146d2d2],.theme-mode-light pre[class*=language-][data-v-d146d2d2]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-d146d2d2]::-moz-selection,.theme-mode-light code[class*=language-][data-v-d146d2d2] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-d146d2d2]::selection,.theme-mode-light code[class*=language-][data-v-d146d2d2] ::selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2]::selection,.theme-mode-light pre[class*=language-][data-v-d146d2d2] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-d146d2d2],.theme-mode-light pre[class*=language-][data-v-d146d2d2]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-d146d2d2]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-d146d2d2],.theme-mode-light pre[class*=language-][data-v-d146d2d2]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-d146d2d2]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-d146d2d2],.theme-mode-light .token.comment[data-v-d146d2d2],.theme-mode-light .token.doctype[data-v-d146d2d2],.theme-mode-light .token.prolog[data-v-d146d2d2]{color:#708090}.theme-mode-light .token.punctuation[data-v-d146d2d2]{color:#999}.theme-mode-light .namespace[data-v-d146d2d2]{opacity:.7}.theme-mode-light .token.boolean[data-v-d146d2d2],.theme-mode-light .token.constant[data-v-d146d2d2],.theme-mode-light .token.deleted[data-v-d146d2d2],.theme-mode-light .token.number[data-v-d146d2d2],.theme-mode-light .token.property[data-v-d146d2d2],.theme-mode-light .token.symbol[data-v-d146d2d2],.theme-mode-light .token.tag[data-v-d146d2d2]{color:#905}.theme-mode-light .token.attr-name[data-v-d146d2d2],.theme-mode-light .token.builtin[data-v-d146d2d2],.theme-mode-light .token.char[data-v-d146d2d2],.theme-mode-light .token.inserted[data-v-d146d2d2],.theme-mode-light .token.selector[data-v-d146d2d2],.theme-mode-light .token.string[data-v-d146d2d2]{color:#690}.theme-mode-light .language-css .token.string[data-v-d146d2d2],.theme-mode-light .style .token.string[data-v-d146d2d2],.theme-mode-light .token.entity[data-v-d146d2d2],.theme-mode-light .token.operator[data-v-d146d2d2],.theme-mode-light .token.url[data-v-d146d2d2]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-d146d2d2],.theme-mode-light .token.attr-value[data-v-d146d2d2],.theme-mode-light .token.keyword[data-v-d146d2d2]{color:#07a}.theme-mode-light .token.class-name[data-v-d146d2d2],.theme-mode-light .token.function[data-v-d146d2d2]{color:#dd4a68}.theme-mode-light .token.important[data-v-d146d2d2],.theme-mode-light .token.regex[data-v-d146d2d2],.theme-mode-light .token.variable[data-v-d146d2d2]{color:#e90}.theme-mode-light .token.bold[data-v-d146d2d2],.theme-mode-light .token.important[data-v-d146d2d2]{font-weight:700}.theme-mode-light .token.italic[data-v-d146d2d2]{font-style:italic}.theme-mode-light .token.entity[data-v-d146d2d2]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-d146d2d2],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-d146d2d2]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-d146d2d2]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-d146d2d2],.theme-mode-dark pre[class*=language-][data-v-d146d2d2]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-d146d2d2]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-d146d2d2],.theme-mode-dark pre[class*=language-][data-v-d146d2d2]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-d146d2d2]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-d146d2d2],.theme-mode-dark .token.cdata[data-v-d146d2d2],.theme-mode-dark .token.comment[data-v-d146d2d2],.theme-mode-dark .token.doctype[data-v-d146d2d2],.theme-mode-dark .token.prolog[data-v-d146d2d2]{color:#999}.theme-mode-dark .token.punctuation[data-v-d146d2d2]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-d146d2d2],.theme-mode-dark .token.deleted[data-v-d146d2d2],.theme-mode-dark .token.namespace[data-v-d146d2d2],.theme-mode-dark .token.tag[data-v-d146d2d2]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-d146d2d2]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-d146d2d2],.theme-mode-dark .token.function[data-v-d146d2d2],.theme-mode-dark .token.number[data-v-d146d2d2]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-d146d2d2],.theme-mode-dark .token.constant[data-v-d146d2d2],.theme-mode-dark .token.property[data-v-d146d2d2],.theme-mode-dark .token.symbol[data-v-d146d2d2]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-d146d2d2],.theme-mode-dark .token.builtin[data-v-d146d2d2],.theme-mode-dark .token.important[data-v-d146d2d2],.theme-mode-dark .token.keyword[data-v-d146d2d2],.theme-mode-dark .token.selector[data-v-d146d2d2]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-d146d2d2],.theme-mode-dark .token.char[data-v-d146d2d2],.theme-mode-dark .token.regex[data-v-d146d2d2],.theme-mode-dark .token.string[data-v-d146d2d2],.theme-mode-dark .token.variable[data-v-d146d2d2]{color:#7ec699}.theme-mode-dark .token.entity[data-v-d146d2d2],.theme-mode-dark .token.operator[data-v-d146d2d2],.theme-mode-dark .token.url[data-v-d146d2d2]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-d146d2d2],.theme-mode-dark .style .token.string[data-v-d146d2d2],.theme-mode-dark .token.entity[data-v-d146d2d2],.theme-mode-dark .token.operator[data-v-d146d2d2],.theme-mode-dark .token.url[data-v-d146d2d2]{background:none}.theme-mode-dark .token.bold[data-v-d146d2d2],.theme-mode-dark .token.important[data-v-d146d2d2]{font-weight:700}.theme-mode-dark .token.italic[data-v-d146d2d2]{font-style:italic}.theme-mode-dark .token.entity[data-v-d146d2d2]{cursor:help}.theme-mode-dark .token.inserted[data-v-d146d2d2]{color:green}.theme-mode-read[data-v-d146d2d2]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-d146d2d2],.theme-mode-read pre[class*=language-][data-v-d146d2d2]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-d146d2d2]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-d146d2d2],.theme-mode-read pre[class*=language-][data-v-d146d2d2]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-d146d2d2]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-d146d2d2],.theme-mode-read .token.cdata[data-v-d146d2d2],.theme-mode-read .token.comment[data-v-d146d2d2],.theme-mode-read .token.doctype[data-v-d146d2d2],.theme-mode-read .token.prolog[data-v-d146d2d2]{color:#999}.theme-mode-read .token.punctuation[data-v-d146d2d2]{color:#ccc}.theme-mode-read .token.attr-name[data-v-d146d2d2],.theme-mode-read .token.deleted[data-v-d146d2d2],.theme-mode-read .token.namespace[data-v-d146d2d2],.theme-mode-read .token.tag[data-v-d146d2d2]{color:#e2777a}.theme-mode-read .token.function-name[data-v-d146d2d2]{color:#6196cc}.theme-mode-read .token.boolean[data-v-d146d2d2],.theme-mode-read .token.function[data-v-d146d2d2],.theme-mode-read .token.number[data-v-d146d2d2]{color:#f08d49}.theme-mode-read .token.class-name[data-v-d146d2d2],.theme-mode-read .token.constant[data-v-d146d2d2],.theme-mode-read .token.property[data-v-d146d2d2],.theme-mode-read .token.symbol[data-v-d146d2d2]{color:#f8c555}.theme-mode-read .token.atrule[data-v-d146d2d2],.theme-mode-read .token.builtin[data-v-d146d2d2],.theme-mode-read .token.important[data-v-d146d2d2],.theme-mode-read .token.keyword[data-v-d146d2d2],.theme-mode-read .token.selector[data-v-d146d2d2]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-d146d2d2],.theme-mode-read .token.char[data-v-d146d2d2],.theme-mode-read .token.regex[data-v-d146d2d2],.theme-mode-read .token.string[data-v-d146d2d2],.theme-mode-read .token.variable[data-v-d146d2d2]{color:#7ec699}.theme-mode-read .token.entity[data-v-d146d2d2],.theme-mode-read .token.operator[data-v-d146d2d2],.theme-mode-read .token.url[data-v-d146d2d2]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-d146d2d2],.theme-mode-read .style .token.string[data-v-d146d2d2],.theme-mode-read .token.entity[data-v-d146d2d2],.theme-mode-read .token.operator[data-v-d146d2d2],.theme-mode-read .token.url[data-v-d146d2d2]{background:none}.theme-mode-read .token.bold[data-v-d146d2d2],.theme-mode-read .token.important[data-v-d146d2d2]{font-weight:700}.theme-mode-read .token.italic[data-v-d146d2d2]{font-style:italic}.theme-mode-read .token.entity[data-v-d146d2d2]{cursor:help}.theme-mode-read .token.inserted[data-v-d146d2d2]{color:green}.theme-style-line.theme-mode-light[data-v-d146d2d2]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-d146d2d2]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-d146d2d2]{--bodyBg:#f5f5d5}.home-wrapper .banner[data-v-d146d2d2]{width:100%;min-height:450px;margin-top:3.6rem;color:#fff;position:relative;overflow:hidden}.home-wrapper .banner .banner-conent[data-v-d146d2d2]{max-width:1100px;margin:0 auto;position:relative;z-index:1;overflow:hidden}.home-wrapper .banner .banner-conent .hero[data-v-d146d2d2]{text-align:center;margin-top:3rem}.home-wrapper .banner .banner-conent .hero img[data-v-d146d2d2]{max-width:100%;max-height:240px;display:block;margin:2rem auto 1.5rem}.home-wrapper .banner .banner-conent .hero h1[data-v-d146d2d2]{margin:0;font-size:3.2rem}.home-wrapper .banner .banner-conent .hero .action[data-v-d146d2d2],.home-wrapper .banner .banner-conent .hero .description[data-v-d146d2d2]{margin:1.5rem auto}.home-wrapper .banner .banner-conent .hero .description[data-v-d146d2d2]{max-width:40rem;font-size:1.1rem;line-height:1.3;opacity:.9}.home-wrapper .banner .banner-conent .hero .action-button[data-v-d146d2d2]{display:inline-block;font-size:1.2rem;background-color:#11a8cd;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #0f97b9;color:#fff}.home-wrapper .banner .banner-conent .hero .action-button[data-v-d146d2d2]:hover{background-color:#13bee8}.home-wrapper .banner .banner-conent .features[data-v-d146d2d2]{padding:2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home-wrapper .banner .banner-conent .feature[data-v-d146d2d2]{flex-grow:1;flex-basis:30%;max-width:30%;text-align:center}.home-wrapper .banner .banner-conent .feature a[data-v-d146d2d2]{color:inherit}.home-wrapper .banner .banner-conent .feature a .feature-img[data-v-d146d2d2]{width:10rem;height:10rem;-webkit-animation:heart-d146d2d2 1.2s ease-in-out 0s infinite alternate;animation:heart-d146d2d2 1.2s ease-in-out 0s infinite alternate;-webkit-animation-play-state:paused;animation-play-state:paused}.home-wrapper .banner .banner-conent .feature a h2[data-v-d146d2d2]{font-weight:500;font-size:1.3rem;border-bottom:none;padding-bottom:0}.home-wrapper .banner .banner-conent .feature a p[data-v-d146d2d2]{opacity:.8;padding:0 .8rem}.home-wrapper .banner .banner-conent .feature:hover .feature-img[data-v-d146d2d2]{-webkit-animation-play-state:running;animation-play-state:running}.home-wrapper .banner .banner-conent .feature:hover h2[data-v-d146d2d2],.home-wrapper .banner .banner-conent .feature:hover p[data-v-d146d2d2]{color:#11a8cd}.home-wrapper .banner .slide-banner[data-v-d146d2d2]{margin-top:2rem}.home-wrapper .banner .slide-banner .banner-wrapper[data-v-d146d2d2]{position:relative}.home-wrapper .banner .slide-banner .slide-banner-scroll[data-v-d146d2d2]{min-height:1px;overflow:hidden}.home-wrapper .banner .slide-banner .slide-banner-wrapper[data-v-d146d2d2]{height:300px}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item[data-v-d146d2d2]{display:inline-block;height:300px;width:100%;text-align:center}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a[data-v-d146d2d2]{color:inherit}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a .feature-img[data-v-d146d2d2]{width:10rem;height:10rem}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a h2[data-v-d146d2d2]{font-size:1.1rem;font-weight:500;border-bottom:none;padding-bottom:0}.home-wrapper .banner .slide-banner .slide-banner-wrapper .slide-item a p[data-v-d146d2d2]{opacity:.8;padding:0 .8rem}.home-wrapper .banner .slide-banner .docs-wrapper[data-v-d146d2d2]{position:absolute;bottom:25px;left:50%;transform:translateX(-50%)}.home-wrapper .banner .slide-banner .docs-wrapper .doc[data-v-d146d2d2]{display:inline-block;margin:0 4px;width:8px;height:8px;border-radius:50%;background:var(--textColor);opacity:.9}.home-wrapper .banner .slide-banner .docs-wrapper .doc.active[data-v-d146d2d2]{opacity:.5}.home-wrapper .banner.hide-banner[data-v-d146d2d2]{display:none}.home-wrapper .banner.hide-banner+.main-wrapper[data-v-d146d2d2]{margin-top:4.5rem}.home-wrapper .main-wrapper[data-v-d146d2d2]{margin-top:2rem}.home-wrapper .main-wrapper .main-left .card-box[data-v-d146d2d2]{margin-bottom:2rem}.home-wrapper .main-wrapper .main-left .pagination[data-v-d146d2d2]{margin-bottom:3rem}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-d146d2d2]{padding:0 2rem;overflow:hidden;border:none}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-d146d2d2]>:first-child{padding-top:2rem}.home-wrapper .main-wrapper .main-left .theme-vdoing-content[data-v-d146d2d2]>:last-child{padding-bottom:2rem}.home-wrapper .main-wrapper .main-right .custom-html-box[data-v-d146d2d2]{padding:0;overflow:hidden}@media (max-width:1025px){.home-wrapper .banner .banner-conent .hero h1[data-v-d146d2d2]{font-size:2.5rem}.home-wrapper .banner .banner-conent .hero .description[data-v-d146d2d2]{font-size:1rem}.home-wrapper .banner .banner-conent .feature a h2[data-v-d146d2d2]{font-size:1.1rem}.home-wrapper .banner .banner-conent .feature a .feature-img[data-v-d146d2d2]{width:9rem;height:9rem}}@media (max-width:719px){.home-wrapper .banner .banner-conent .features[data-v-d146d2d2]{display:none!important}}@media (max-width:419px){.home-wrapper .banner-conent[data-v-d146d2d2]{padding-left:1.5rem;padding-right:1.5rem}.home-wrapper .banner-conent .hero img[data-v-d146d2d2]{max-height:210px;margin:2rem auto 1.2rem}.home-wrapper .banner-conent .hero h1[data-v-d146d2d2]{font-size:2rem}.home-wrapper .banner-conent .hero .action[data-v-d146d2d2],.home-wrapper .banner-conent .hero .description[data-v-d146d2d2],.home-wrapper .banner-conent .hero h1[data-v-d146d2d2]{margin:1.2rem auto}.home-wrapper .banner-conent .hero .description[data-v-d146d2d2]{font-size:1.2rem}.home-wrapper .banner-conent .hero .action-button[data-v-d146d2d2]{font-size:1rem;padding:.6rem 1.2rem}.home-wrapper .banner-conent .feature h2[data-v-d146d2d2]{font-size:1.25rem}}@media (max-width:719px){.theme-style-line .main-wrapper[data-v-d146d2d2]{margin-top:-1px}}@-webkit-keyframes heart-d146d2d2{0%{transform:translate(0)}to{transform:translateY(8px)}}@keyframes heart-d146d2d2{0%{transform:translate(0)}to{transform:translateY(8px)}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/java-it-docs/assets/img/search.237d6f6a.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#11a8cd}.search-box .suggestions{background:#fff;min-width:500px;max-width:700px;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;border-radius:4px;cursor:pointer;width:100%}.search-box .suggestion a{display:block;white-space:normal;color:#415b75;width:100%}.search-box .suggestion a .parent-page-title{color:#fff;font-weight:600;background-color:#11a8cd;padding:5px}.search-box .suggestion a .suggestion-row{border-collapse:collapse;width:100%;display:table}.search-box .suggestion a .suggestion-row .page-title{width:35%;background:#f5f5f5;border:1px solid #eaecef;border-left:none;display:table-cell;text-align:right;padding:5px;font-weight:600}.search-box .suggestion a .suggestion-row .suggestion-content{font-weight:400;border:1px solid #eaecef;border-right:none;width:65%;display:table-cell;padding:5px}.search-box .suggestion a .suggestion-row .suggestion-content .highlight{text-decoration:underline}.search-box .suggestion a .suggestion-row .suggestion-content .header{font-weight:600}.search-box .suggestion.focused{background-color:#f3f4f5}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}@media (max-width:719px){.sidebar-button{display:block}}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (min-width:720px){.sidebar-button{width:40px;height:40px;display:inline-block;position:fixed;left:0;top:4.6rem;text-align:center;line-height:44px;margin:5px 8px;color:#888;border-radius:50%;padding:0;transition:all .2s}.sidebar-button:hover{background:#11a8cd;color:#fff;box-shadow:0 0 6px #11a8cd}.sidebar-button .icon{display:inline;width:1rem;height:1rem}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:var(--textColor)}.dropdown-wrapper .dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid var(--borderColor);padding:.45rem 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#11a8cd}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #11a8cd;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{font-weight:600;font-size:inherit}.dropdown-wrapper .dropdown-title:hover{color:#11a8cd}.dropdown-wrapper .dropdown-title .link-title{display:none}.dropdown-wrapper .dropdown-title .title{display:inline-block!important}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .dropdown-title .arrow{border-left:4px solid transparent;border-right:4px solid transparent;border-top:6px solid #ccc;border-bottom:0}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:var(--mainBg);padding:.6rem 0;border-bottom-color:var(--borderColor);border:1px solid var(--borderColor);text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}.nav-item .dropdown-title a.router-link-active,.nav-item .dropdown-title a:hover{margin-bottom:-2px;border-bottom:2px solid #13b9e2}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#11a8cd}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:959px){.nav-links .nav-item{margin-left:1.2rem}}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:var(--textColor)}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #13b9e2}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem;transition:transform .3s}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:var(--textColor);position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}.hide-navbar .navbar{transform:translateY(-100%)}@media (max-width:959px){.navbar .site-name{display:none}}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:860px;padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block;float:left;margin:0 2rem .5rem 0}.page-edit .edit-link a{margin-right:.25rem}.page-edit .tags{float:left}.page-edit .tags a{margin:0 .8rem .5rem 0;display:inline-block;color:var(--textLightenColor);padding:.2rem .7rem;font-size:.9em;background-color:hsla(0,0%,50.2%,.08);border-radius:3px;opacity:.8}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:var(--textColor);opacity:.8}.page-edit .last-updated .time{font-weight:400;color:#aaa}@media (max-width:719px){.page-edit .edit-link,.page-edit .tags{margin-bottom:.5rem}.page-edit .last-updated{width:100%;font-size:.8em;text-align:left}}.page-nav{max-width:860px;padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid var(--borderColor);padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page-nav-centre-wrap .page-nav-centre{position:fixed;top:50%;width:80px;height:70px;margin-top:-35px;outline:0;transition:all .2s;border-radius:3px;opacity:.55;z-index:99}@media (max-width:1340px){.page-nav-centre-wrap .page-nav-centre{width:50px}}@media (max-width:960px){.page-nav-centre-wrap .page-nav-centre{display:none}}.page-nav-centre-wrap .page-nav-centre:hover{background:hsla(0,0%,60%,.15);opacity:1}.page-nav-centre-wrap .page-nav-centre:hover .tooltip{display:block}.page-nav-centre-wrap .page-nav-centre:before{content:"";display:block;width:10px;height:10px;border-top:2px solid #999;border-right:2px solid #999;position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.page-nav-centre-wrap .page-nav-centre .tooltip{display:none;background:rgba(0,0,0,.5);color:#fff;padding:4px 8px;font-size:13px;border-radius:3px;position:fixed;max-width:200px;z-index:99}.page-nav-centre-wrap .page-nav-centre-prev{left:0}.page-nav-centre-wrap .page-nav-centre-prev:before{transform:rotate(-135deg)}.page-nav-centre-wrap .page-nav-centre-next{right:0}.page-nav-centre-wrap .page-nav-centre-next:before{transform:rotate(45deg)}.sidebar-open .page-nav-centre-wrap .page-nav-centre-prev{left:18rem}.no-sidebar .page-nav-centre-wrap .page-nav-centre-prev{left:0}.theme-mode-light[data-v-06970110]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-06970110],.theme-mode-light pre[class*=language-][data-v-06970110]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-06970110]::-moz-selection,.theme-mode-light code[class*=language-][data-v-06970110] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-06970110]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-06970110] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-06970110]::selection,.theme-mode-light code[class*=language-][data-v-06970110] ::selection,.theme-mode-light pre[class*=language-][data-v-06970110]::selection,.theme-mode-light pre[class*=language-][data-v-06970110] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-06970110],.theme-mode-light pre[class*=language-][data-v-06970110]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-06970110]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-06970110],.theme-mode-light pre[class*=language-][data-v-06970110]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-06970110]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-06970110],.theme-mode-light .token.comment[data-v-06970110],.theme-mode-light .token.doctype[data-v-06970110],.theme-mode-light .token.prolog[data-v-06970110]{color:#708090}.theme-mode-light .token.punctuation[data-v-06970110]{color:#999}.theme-mode-light .namespace[data-v-06970110]{opacity:.7}.theme-mode-light .token.boolean[data-v-06970110],.theme-mode-light .token.constant[data-v-06970110],.theme-mode-light .token.deleted[data-v-06970110],.theme-mode-light .token.number[data-v-06970110],.theme-mode-light .token.property[data-v-06970110],.theme-mode-light .token.symbol[data-v-06970110],.theme-mode-light .token.tag[data-v-06970110]{color:#905}.theme-mode-light .token.attr-name[data-v-06970110],.theme-mode-light .token.builtin[data-v-06970110],.theme-mode-light .token.char[data-v-06970110],.theme-mode-light .token.inserted[data-v-06970110],.theme-mode-light .token.selector[data-v-06970110],.theme-mode-light .token.string[data-v-06970110]{color:#690}.theme-mode-light .language-css .token.string[data-v-06970110],.theme-mode-light .style .token.string[data-v-06970110],.theme-mode-light .token.entity[data-v-06970110],.theme-mode-light .token.operator[data-v-06970110],.theme-mode-light .token.url[data-v-06970110]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-06970110],.theme-mode-light .token.attr-value[data-v-06970110],.theme-mode-light .token.keyword[data-v-06970110]{color:#07a}.theme-mode-light .token.class-name[data-v-06970110],.theme-mode-light .token.function[data-v-06970110]{color:#dd4a68}.theme-mode-light .token.important[data-v-06970110],.theme-mode-light .token.regex[data-v-06970110],.theme-mode-light .token.variable[data-v-06970110]{color:#e90}.theme-mode-light .token.bold[data-v-06970110],.theme-mode-light .token.important[data-v-06970110]{font-weight:700}.theme-mode-light .token.italic[data-v-06970110]{font-style:italic}.theme-mode-light .token.entity[data-v-06970110]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-06970110],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-06970110]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-06970110]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-06970110],.theme-mode-dark pre[class*=language-][data-v-06970110]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-06970110]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-06970110],.theme-mode-dark pre[class*=language-][data-v-06970110]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-06970110]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-06970110],.theme-mode-dark .token.cdata[data-v-06970110],.theme-mode-dark .token.comment[data-v-06970110],.theme-mode-dark .token.doctype[data-v-06970110],.theme-mode-dark .token.prolog[data-v-06970110]{color:#999}.theme-mode-dark .token.punctuation[data-v-06970110]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-06970110],.theme-mode-dark .token.deleted[data-v-06970110],.theme-mode-dark .token.namespace[data-v-06970110],.theme-mode-dark .token.tag[data-v-06970110]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-06970110]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-06970110],.theme-mode-dark .token.function[data-v-06970110],.theme-mode-dark .token.number[data-v-06970110]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-06970110],.theme-mode-dark .token.constant[data-v-06970110],.theme-mode-dark .token.property[data-v-06970110],.theme-mode-dark .token.symbol[data-v-06970110]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-06970110],.theme-mode-dark .token.builtin[data-v-06970110],.theme-mode-dark .token.important[data-v-06970110],.theme-mode-dark .token.keyword[data-v-06970110],.theme-mode-dark .token.selector[data-v-06970110]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-06970110],.theme-mode-dark .token.char[data-v-06970110],.theme-mode-dark .token.regex[data-v-06970110],.theme-mode-dark .token.string[data-v-06970110],.theme-mode-dark .token.variable[data-v-06970110]{color:#7ec699}.theme-mode-dark .token.entity[data-v-06970110],.theme-mode-dark .token.operator[data-v-06970110],.theme-mode-dark .token.url[data-v-06970110]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-06970110],.theme-mode-dark .style .token.string[data-v-06970110],.theme-mode-dark .token.entity[data-v-06970110],.theme-mode-dark .token.operator[data-v-06970110],.theme-mode-dark .token.url[data-v-06970110]{background:none}.theme-mode-dark .token.bold[data-v-06970110],.theme-mode-dark .token.important[data-v-06970110]{font-weight:700}.theme-mode-dark .token.italic[data-v-06970110]{font-style:italic}.theme-mode-dark .token.entity[data-v-06970110]{cursor:help}.theme-mode-dark .token.inserted[data-v-06970110]{color:green}.theme-mode-read[data-v-06970110]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-06970110],.theme-mode-read pre[class*=language-][data-v-06970110]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-06970110]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-06970110],.theme-mode-read pre[class*=language-][data-v-06970110]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-06970110]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-06970110],.theme-mode-read .token.cdata[data-v-06970110],.theme-mode-read .token.comment[data-v-06970110],.theme-mode-read .token.doctype[data-v-06970110],.theme-mode-read .token.prolog[data-v-06970110]{color:#999}.theme-mode-read .token.punctuation[data-v-06970110]{color:#ccc}.theme-mode-read .token.attr-name[data-v-06970110],.theme-mode-read .token.deleted[data-v-06970110],.theme-mode-read .token.namespace[data-v-06970110],.theme-mode-read .token.tag[data-v-06970110]{color:#e2777a}.theme-mode-read .token.function-name[data-v-06970110]{color:#6196cc}.theme-mode-read .token.boolean[data-v-06970110],.theme-mode-read .token.function[data-v-06970110],.theme-mode-read .token.number[data-v-06970110]{color:#f08d49}.theme-mode-read .token.class-name[data-v-06970110],.theme-mode-read .token.constant[data-v-06970110],.theme-mode-read .token.property[data-v-06970110],.theme-mode-read .token.symbol[data-v-06970110]{color:#f8c555}.theme-mode-read .token.atrule[data-v-06970110],.theme-mode-read .token.builtin[data-v-06970110],.theme-mode-read .token.important[data-v-06970110],.theme-mode-read .token.keyword[data-v-06970110],.theme-mode-read .token.selector[data-v-06970110]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-06970110],.theme-mode-read .token.char[data-v-06970110],.theme-mode-read .token.regex[data-v-06970110],.theme-mode-read .token.string[data-v-06970110],.theme-mode-read .token.variable[data-v-06970110]{color:#7ec699}.theme-mode-read .token.entity[data-v-06970110],.theme-mode-read .token.operator[data-v-06970110],.theme-mode-read .token.url[data-v-06970110]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-06970110],.theme-mode-read .style .token.string[data-v-06970110],.theme-mode-read .token.entity[data-v-06970110],.theme-mode-read .token.operator[data-v-06970110],.theme-mode-read .token.url[data-v-06970110]{background:none}.theme-mode-read .token.bold[data-v-06970110],.theme-mode-read .token.important[data-v-06970110]{font-weight:700}.theme-mode-read .token.italic[data-v-06970110]{font-style:italic}.theme-mode-read .token.entity[data-v-06970110]{cursor:help}.theme-mode-read .token.inserted[data-v-06970110]{color:green}.theme-style-line.theme-mode-light[data-v-06970110]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-06970110]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-06970110]{--bodyBg:#f5f5d5}.articleInfo-wrap[data-v-06970110]{max-width:860px}.theme-style-line .articleInfo-wrap .articleInfo[data-v-06970110]{padding-top:.5rem}.articleInfo-wrap[data-v-06970110]{position:relative;z-index:1;color:#888}.articleInfo-wrap .articleInfo[data-v-06970110]{overflow:hidden;font-size:.92rem}.articleInfo-wrap .articleInfo .breadcrumbs[data-v-06970110]{margin:0;padding:0;overflow:hidden;display:inline-block;line-height:2rem}@media (max-width:960px){.articleInfo-wrap .articleInfo .breadcrumbs[data-v-06970110]{width:100%}}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-06970110]{list-style-type:none;float:left;padding-right:5px}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-06970110]:after{content:"/";margin-left:5px;color:#999}.articleInfo-wrap .articleInfo .breadcrumbs li[data-v-06970110]:last-child:after{content:""}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-06970110]{color:#888}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-06970110]:before{font-size:.92rem}.articleInfo-wrap .articleInfo .breadcrumbs li a[data-v-06970110]:hover{color:#11a8cd}.articleInfo-wrap .articleInfo .breadcrumbs li .icon-home[data-v-06970110]{text-decoration:none}.articleInfo-wrap .articleInfo .info[data-v-06970110]{float:right;line-height:32px}@media (max-width:960px){.articleInfo-wrap .articleInfo .info[data-v-06970110]{float:left}}.articleInfo-wrap .articleInfo .info div[data-v-06970110]{float:left;margin-left:20px;font-size:.8rem}@media (max-width:960px){.articleInfo-wrap .articleInfo .info div[data-v-06970110]{margin:0 20px 0 0}}.articleInfo-wrap .articleInfo .info div[data-v-06970110]:before{margin-right:3px}.articleInfo-wrap .articleInfo .info div a[data-v-06970110]{color:#888}.articleInfo-wrap .articleInfo .info div a[data-v-06970110]:hover{text-decoration:none}.articleInfo-wrap .articleInfo .info div a.beLink[data-v-06970110]:hover{color:#11a8cd;text-decoration:underline}.theme-mode-light[data-v-25eb0b2a]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-25eb0b2a],.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-25eb0b2a]::-moz-selection,.theme-mode-light code[class*=language-][data-v-25eb0b2a] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-25eb0b2a]::selection,.theme-mode-light code[class*=language-][data-v-25eb0b2a] ::selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a]::selection,.theme-mode-light pre[class*=language-][data-v-25eb0b2a] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-25eb0b2a],.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-25eb0b2a],.theme-mode-light pre[class*=language-][data-v-25eb0b2a]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-25eb0b2a]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-25eb0b2a],.theme-mode-light .token.comment[data-v-25eb0b2a],.theme-mode-light .token.doctype[data-v-25eb0b2a],.theme-mode-light .token.prolog[data-v-25eb0b2a]{color:#708090}.theme-mode-light .token.punctuation[data-v-25eb0b2a]{color:#999}.theme-mode-light .namespace[data-v-25eb0b2a]{opacity:.7}.theme-mode-light .token.boolean[data-v-25eb0b2a],.theme-mode-light .token.constant[data-v-25eb0b2a],.theme-mode-light .token.deleted[data-v-25eb0b2a],.theme-mode-light .token.number[data-v-25eb0b2a],.theme-mode-light .token.property[data-v-25eb0b2a],.theme-mode-light .token.symbol[data-v-25eb0b2a],.theme-mode-light .token.tag[data-v-25eb0b2a]{color:#905}.theme-mode-light .token.attr-name[data-v-25eb0b2a],.theme-mode-light .token.builtin[data-v-25eb0b2a],.theme-mode-light .token.char[data-v-25eb0b2a],.theme-mode-light .token.inserted[data-v-25eb0b2a],.theme-mode-light .token.selector[data-v-25eb0b2a],.theme-mode-light .token.string[data-v-25eb0b2a]{color:#690}.theme-mode-light .language-css .token.string[data-v-25eb0b2a],.theme-mode-light .style .token.string[data-v-25eb0b2a],.theme-mode-light .token.entity[data-v-25eb0b2a],.theme-mode-light .token.operator[data-v-25eb0b2a],.theme-mode-light .token.url[data-v-25eb0b2a]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-25eb0b2a],.theme-mode-light .token.attr-value[data-v-25eb0b2a],.theme-mode-light .token.keyword[data-v-25eb0b2a]{color:#07a}.theme-mode-light .token.class-name[data-v-25eb0b2a],.theme-mode-light .token.function[data-v-25eb0b2a]{color:#dd4a68}.theme-mode-light .token.important[data-v-25eb0b2a],.theme-mode-light .token.regex[data-v-25eb0b2a],.theme-mode-light .token.variable[data-v-25eb0b2a]{color:#e90}.theme-mode-light .token.bold[data-v-25eb0b2a],.theme-mode-light .token.important[data-v-25eb0b2a]{font-weight:700}.theme-mode-light .token.italic[data-v-25eb0b2a]{font-style:italic}.theme-mode-light .token.entity[data-v-25eb0b2a]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-25eb0b2a],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-25eb0b2a]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-25eb0b2a]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-25eb0b2a],.theme-mode-dark pre[class*=language-][data-v-25eb0b2a]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-25eb0b2a]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-25eb0b2a],.theme-mode-dark pre[class*=language-][data-v-25eb0b2a]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-25eb0b2a]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-25eb0b2a],.theme-mode-dark .token.cdata[data-v-25eb0b2a],.theme-mode-dark .token.comment[data-v-25eb0b2a],.theme-mode-dark .token.doctype[data-v-25eb0b2a],.theme-mode-dark .token.prolog[data-v-25eb0b2a]{color:#999}.theme-mode-dark .token.punctuation[data-v-25eb0b2a]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-25eb0b2a],.theme-mode-dark .token.deleted[data-v-25eb0b2a],.theme-mode-dark .token.namespace[data-v-25eb0b2a],.theme-mode-dark .token.tag[data-v-25eb0b2a]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-25eb0b2a]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-25eb0b2a],.theme-mode-dark .token.function[data-v-25eb0b2a],.theme-mode-dark .token.number[data-v-25eb0b2a]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-25eb0b2a],.theme-mode-dark .token.constant[data-v-25eb0b2a],.theme-mode-dark .token.property[data-v-25eb0b2a],.theme-mode-dark .token.symbol[data-v-25eb0b2a]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-25eb0b2a],.theme-mode-dark .token.builtin[data-v-25eb0b2a],.theme-mode-dark .token.important[data-v-25eb0b2a],.theme-mode-dark .token.keyword[data-v-25eb0b2a],.theme-mode-dark .token.selector[data-v-25eb0b2a]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-25eb0b2a],.theme-mode-dark .token.char[data-v-25eb0b2a],.theme-mode-dark .token.regex[data-v-25eb0b2a],.theme-mode-dark .token.string[data-v-25eb0b2a],.theme-mode-dark .token.variable[data-v-25eb0b2a]{color:#7ec699}.theme-mode-dark .token.entity[data-v-25eb0b2a],.theme-mode-dark .token.operator[data-v-25eb0b2a],.theme-mode-dark .token.url[data-v-25eb0b2a]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-25eb0b2a],.theme-mode-dark .style .token.string[data-v-25eb0b2a],.theme-mode-dark .token.entity[data-v-25eb0b2a],.theme-mode-dark .token.operator[data-v-25eb0b2a],.theme-mode-dark .token.url[data-v-25eb0b2a]{background:none}.theme-mode-dark .token.bold[data-v-25eb0b2a],.theme-mode-dark .token.important[data-v-25eb0b2a]{font-weight:700}.theme-mode-dark .token.italic[data-v-25eb0b2a]{font-style:italic}.theme-mode-dark .token.entity[data-v-25eb0b2a]{cursor:help}.theme-mode-dark .token.inserted[data-v-25eb0b2a]{color:green}.theme-mode-read[data-v-25eb0b2a]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-25eb0b2a],.theme-mode-read pre[class*=language-][data-v-25eb0b2a]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-25eb0b2a]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-25eb0b2a],.theme-mode-read pre[class*=language-][data-v-25eb0b2a]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-25eb0b2a]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-25eb0b2a],.theme-mode-read .token.cdata[data-v-25eb0b2a],.theme-mode-read .token.comment[data-v-25eb0b2a],.theme-mode-read .token.doctype[data-v-25eb0b2a],.theme-mode-read .token.prolog[data-v-25eb0b2a]{color:#999}.theme-mode-read .token.punctuation[data-v-25eb0b2a]{color:#ccc}.theme-mode-read .token.attr-name[data-v-25eb0b2a],.theme-mode-read .token.deleted[data-v-25eb0b2a],.theme-mode-read .token.namespace[data-v-25eb0b2a],.theme-mode-read .token.tag[data-v-25eb0b2a]{color:#e2777a}.theme-mode-read .token.function-name[data-v-25eb0b2a]{color:#6196cc}.theme-mode-read .token.boolean[data-v-25eb0b2a],.theme-mode-read .token.function[data-v-25eb0b2a],.theme-mode-read .token.number[data-v-25eb0b2a]{color:#f08d49}.theme-mode-read .token.class-name[data-v-25eb0b2a],.theme-mode-read .token.constant[data-v-25eb0b2a],.theme-mode-read .token.property[data-v-25eb0b2a],.theme-mode-read .token.symbol[data-v-25eb0b2a]{color:#f8c555}.theme-mode-read .token.atrule[data-v-25eb0b2a],.theme-mode-read .token.builtin[data-v-25eb0b2a],.theme-mode-read .token.important[data-v-25eb0b2a],.theme-mode-read .token.keyword[data-v-25eb0b2a],.theme-mode-read .token.selector[data-v-25eb0b2a]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-25eb0b2a],.theme-mode-read .token.char[data-v-25eb0b2a],.theme-mode-read .token.regex[data-v-25eb0b2a],.theme-mode-read .token.string[data-v-25eb0b2a],.theme-mode-read .token.variable[data-v-25eb0b2a]{color:#7ec699}.theme-mode-read .token.entity[data-v-25eb0b2a],.theme-mode-read .token.operator[data-v-25eb0b2a],.theme-mode-read .token.url[data-v-25eb0b2a]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-25eb0b2a],.theme-mode-read .style .token.string[data-v-25eb0b2a],.theme-mode-read .token.entity[data-v-25eb0b2a],.theme-mode-read .token.operator[data-v-25eb0b2a],.theme-mode-read .token.url[data-v-25eb0b2a]{background:none}.theme-mode-read .token.bold[data-v-25eb0b2a],.theme-mode-read .token.important[data-v-25eb0b2a]{font-weight:700}.theme-mode-read .token.italic[data-v-25eb0b2a]{font-style:italic}.theme-mode-read .token.entity[data-v-25eb0b2a]{cursor:help}.theme-mode-read .token.inserted[data-v-25eb0b2a]{color:green}.theme-style-line.theme-mode-light[data-v-25eb0b2a]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-25eb0b2a]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-25eb0b2a]{--bodyBg:#f5f5d5}.theme-vdoing-content[data-v-25eb0b2a]{margin-bottom:3.6rem}.title-tag[data-v-25eb0b2a]{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}dd[data-v-25eb0b2a],dl[data-v-25eb0b2a]{margin:0}.column-wrapper[data-v-25eb0b2a]{margin-top:1rem;display:flex;padding-bottom:2rem;border-bottom:1px solid var(--borderColor)}.column-wrapper img[data-v-25eb0b2a]{width:80px;height:80px;border-radius:2px;margin-right:1rem}.column-wrapper .column-info .title[data-v-25eb0b2a]{font-size:1.6rem}.column-wrapper .column-info .description[data-v-25eb0b2a]{color:var(--textColor);opacity:.8;margin:.5rem 0}.catalogue-wrapper .catalogue-title[data-v-25eb0b2a]{font-size:1.45rem;margin:2rem 0}.catalogue-wrapper .catalogue-content dl[data-v-25eb0b2a]{margin-bottom:1.8rem}.catalogue-wrapper .catalogue-content dl.inline[data-v-25eb0b2a]{display:inline-block;width:50%;margin-bottom:1rem}@media (max-width:419px){.catalogue-wrapper .catalogue-content dl.inline[data-v-25eb0b2a]{width:100%}}.catalogue-wrapper .catalogue-content dl.inline a[data-v-25eb0b2a]{width:100%}.catalogue-wrapper .catalogue-content dl:not(.inline) dt[data-v-25eb0b2a]{margin-top:-3.6rem;padding-top:3.6rem}.catalogue-wrapper .catalogue-content dl dt[data-v-25eb0b2a]{font-size:1.1rem}.catalogue-wrapper .catalogue-content dl dt:hover .header-anchor[data-v-25eb0b2a]{opacity:1}.catalogue-wrapper .catalogue-content dl dd[data-v-25eb0b2a]{margin-top:.7rem;margin-left:1rem}.catalogue-wrapper .catalogue-content dl dd a[data-v-25eb0b2a]:not(.header-anchor){margin-bottom:.5rem;display:inline-block;width:50%}.catalogue-wrapper .catalogue-content dl dd a[data-v-25eb0b2a]:not(.header-anchor):hover{color:#ff5722;text-decoration:none}@media (max-width:720px){.catalogue-wrapper .catalogue-content dl dd a[data-v-25eb0b2a]:not(.header-anchor){width:100%}}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap[data-v-25eb0b2a]{margin:5px 0 8px;font-size:.95rem}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap>a[data-v-25eb0b2a]{padding-left:1rem;box-sizing:border-box}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap .sub-title[data-v-25eb0b2a]{margin-top:-3.6rem;padding-top:3.6rem;margin-bottom:6px;font-size:1rem}.catalogue-wrapper .catalogue-content dl .sub-cat-wrap:hover .header-anchor[data-v-25eb0b2a]{opacity:1}.theme-style-line .right-menu-wrapper .right-menu-margin{border-left:1px solid var(--borderColor)}.right-menu-wrapper{width:230px;float:right;margin-right:-285px;position:-webkit-sticky;position:sticky;top:0;font-size:.8rem}.right-menu-wrapper .right-menu-margin{margin-top:4.6rem;border-radius:3px;overflow:hidden}.right-menu-wrapper .right-menu-title{padding:10px 15px 0;background:var(--mainBg);font-size:1rem}.right-menu-wrapper .right-menu-title:after{content:"";display:block;width:100%;height:1px;background:var(--borderColor);margin-top:10px}.right-menu-wrapper .right-menu-content{max-height:80vh;position:relative;overflow:hidden;background:var(--mainBg);padding:4px 3px 4px 0}.right-menu-wrapper .right-menu-content::-webkit-scrollbar{width:3px;height:3px}.right-menu-wrapper .right-menu-content::-webkit-scrollbar-track-piece{background:none}.right-menu-wrapper .right-menu-content::-webkit-scrollbar-thumb:vertical{background-color:hsla(0,0%,49%,.3)}.right-menu-wrapper .right-menu-content:hover{overflow-y:auto;padding-right:0}.right-menu-wrapper .right-menu-content .right-menu-item{padding:4px 15px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;position:relative}.right-menu-wrapper .right-menu-content .right-menu-item.level2{font-size:.8rem}.right-menu-wrapper .right-menu-content .right-menu-item.level3{padding-left:27px}.right-menu-wrapper .right-menu-content .right-menu-item.level4{padding-left:37px}.right-menu-wrapper .right-menu-content .right-menu-item.level5{padding-left:47px}.right-menu-wrapper .right-menu-content .right-menu-item.level6{padding-left:57px}.right-menu-wrapper .right-menu-content .right-menu-item.active:before{content:"";position:absolute;top:5px;left:0;width:3px;height:14px;background:#11a8cd;border-radius:0 4px 4px 0}.right-menu-wrapper .right-menu-content .right-menu-item.active a{color:#11a8cd;opacity:1}.right-menu-wrapper .right-menu-content .right-menu-item a{color:var(--textColor);opacity:.75;display:inline-block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.right-menu-wrapper .right-menu-content .right-menu-item a:hover{opacity:1}.right-menu-wrapper .right-menu-content:hover{color:#11a8cd}.page>*{max-width:860px;margin:0 auto;padding:1rem 2.5rem 2rem}.page>:not(.footer){background:var(--mainBg);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin-bottom:1rem}@media (min-width:940px){.page>:not(.footer){border-radius:2px}}@media (max-width:959px){.page>*{padding:1rem 2rem}}@media (max-width:419px){.page>*{padding:1rem 1.5rem}}.page{padding-bottom:2rem;display:block}@media (max-width:719px){.page{padding-top:3.6rem}}@media (min-width:719px){.page{padding-top:5.1rem}}@media (min-width:719px){.theme-style-line .page{padding-top:3.6rem}}.theme-style-line .page>:not(.footer){box-shadow:0 0}@media (min-width:720px){.theme-style-line .page .placeholder{height:1.2rem}}.theme-vdoing-wrapper .content-wrapper{position:relative}.theme-vdoing-wrapper h1 .title-tag{height:1.5rem;line-height:1.5rem;border:1px solid #ff5722;color:#ff5722;font-size:1rem;padding:0 .4rem;border-radius:.2rem;margin-left:.5rem;transform:translateY(-.25rem);display:inline-block}.theme-vdoing-wrapper h1 img{margin-bottom:-.2rem;margin-right:.2rem;max-width:2.2rem;max-height:2.2rem}.theme-vdoing-wrapper{--linesColor:rgba(50,0,0,0.05)}.theme-vdoing-wrapper.bg-style-1{background-image:linear-gradient(90deg,var(--linesColor) 3%,transparent 0),linear-gradient(0deg,var(--linesColor) 3%,transparent 0);background-position:50%;background-size:20px 20px}.theme-vdoing-wrapper.bg-style-2{background-image:repeating-linear-gradient(0,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:30px 30px}.theme-vdoing-wrapper.bg-style-3{background-image:repeating-linear-gradient(90deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:30px 30px}.theme-vdoing-wrapper.bg-style-4{background-image:repeating-linear-gradient(-45deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:20px 20px}.theme-vdoing-wrapper.bg-style-5{background-image:repeating-linear-gradient(45deg,var(--linesColor),var(--linesColor) 1px,transparent 0,transparent 50%);background-size:20px 20px}.theme-vdoing-wrapper.bg-style-6{background-image:radial-gradient(var(--linesColor) 1px,transparent 0);background-size:10px 10px}.theme-mode-dark .theme-vdoing-wrapper{--linesColor:hsla(0,0%,49%,0.05)}@media (min-width:720px) and (max-width:1279px){.have-rightmenu .page{padding-right:.8rem!important}}@media (max-width:1279px){.have-rightmenu .right-menu-wrapper{display:none}}@media (min-width:1280px){.have-rightmenu .sidebar .sidebar-sub-headers{display:none}}.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar,.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar-button{display:none}@media (min-width:720px){.theme-container.only-sidebarItem:not(.have-rightmenu) .page{padding-left:.8rem!important}}@media (max-width:719px){.theme-container.only-sidebarItem:not(.have-rightmenu) .page{padding-left:0!important}.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar,.theme-container.only-sidebarItem:not(.have-rightmenu) .sidebar-button{display:block}}@media (min-width:720px) and (max-width:1279px){.theme-container.only-sidebarItem.have-rightmenu .sidebar,.theme-container.only-sidebarItem.have-rightmenu .sidebar-button{display:block}}@media (min-width:1280px){.theme-container.only-sidebarItem.have-rightmenu .sidebar,.theme-container.only-sidebarItem.have-rightmenu .sidebar-button{display:none}}.categories-page .categories-wrapper{position:-webkit-sticky;position:sticky;top:4.5rem;max-height:calc(100vh - 10rem);min-height:4.2rem}@media (max-width:719px){.categories-page .categories-wrapper{display:none}}.categories-page .categories-wrapper .categories{max-height:calc(100vh - 14rem);min-height:2.2rem;overflow-y:auto;transition:all .2s;position:relative}.categories-page .categories-wrapper .categories a{padding-right:1.8rem}.categories-page .categories-wrapper .categories a span{right:.4rem}.categories-page .categories-wrapper .categories::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.05)}.categories-page .categories-wrapper .categories::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.15)}.categories-page .categories-wrapper .categories:hover::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.1)}.categories-page .categories-wrapper .categories:hover::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25)}.categories-page .main-left .categories-wrapper{position:relative;top:0;padding:.9rem 1.5rem;margin-bottom:.9rem;max-height:15rem;border-radius:0;display:none}@media (max-width:719px){.categories-page .main-left .categories-wrapper{display:block}}.categories-page .main-left .categories-wrapper .categories{max-height:12.3rem}@media (max-width:719px){.theme-style-line .categories-page .main-left .categories-wrapper{margin-top:-.91rem;margin-bottom:-1px;padding:.9rem .2rem .5rem}}.tags-page .tags-wrapper{position:-webkit-sticky;position:sticky;top:4.5rem;max-height:calc(100vh - 10rem);min-height:4.2rem}@media (max-width:719px){.tags-page .tags-wrapper{display:none}}.tags-page .tags-wrapper .tags{max-height:calc(100vh - 14rem);min-height:2.2rem;overflow-x:hidden;overflow-y:auto;transition:all .2s}.tags-page .tags-wrapper .tags::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.05)}.tags-page .tags-wrapper .tags::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.15)}.tags-page .tags-wrapper .tags:hover::-webkit-scrollbar-track-piece{background-color:rgba(0,0,0,.1)}.tags-page .tags-wrapper .tags:hover::-webkit-scrollbar-thumb:vertical{background-color:rgba(0,0,0,.25)}.tags-page .main-left .tags-wrapper{position:relative;top:0;padding:.9rem 1.5rem;margin-bottom:.9rem;max-height:15rem;border-radius:0;display:none}@media (max-width:719px){.tags-page .main-left .tags-wrapper{display:block}}.tags-page .main-left .tags-wrapper .tags{max-height:11.5rem}@media (max-width:719px){.theme-style-line .tags-page .main-left .tags-wrapper{margin-top:-.91rem;margin-bottom:-1px}}.archives-page .theme-vdoing-wrapper{max-width:860px;margin:0 auto;padding:1rem 2.5rem 2rem}.archives-page .theme-vdoing-wrapper:not(.footer){background:var(--mainBg);box-shadow:0 1px 2px 0 rgba(0,0,0,.1);margin-bottom:1rem}@media (min-width:940px){.archives-page .theme-vdoing-wrapper:not(.footer){border-radius:2px}}@media (max-width:959px){.archives-page .theme-vdoing-wrapper{padding:1rem 2rem}}@media (max-width:419px){.archives-page .theme-vdoing-wrapper{padding:1rem 1.5rem}}.theme-style-line .archives-page .theme-vdoing-wrapper{box-shadow:0 0}.archives-page .theme-vdoing-wrapper{position:relative}@media (min-width:940px){.archives-page .theme-vdoing-wrapper{margin-top:1.5rem!important}}.archives-page .theme-vdoing-wrapper .count{text-align:right;margin-top:-2.5rem;font-size:.85rem;opacity:.8}.archives-page .theme-vdoing-wrapper li,.archives-page .theme-vdoing-wrapper ul{margin:0;padding:0}.archives-page .theme-vdoing-wrapper ul{margin-top:2rem}.archives-page .theme-vdoing-wrapper li{list-style:none}.archives-page .theme-vdoing-wrapper li.year{position:-webkit-sticky;position:sticky;top:3.6rem;background:var(--mainBg);z-index:1}.archives-page .theme-vdoing-wrapper li.year:not(:first-child){margin-top:3.5rem}.archives-page .theme-vdoing-wrapper li h2{margin-bottom:.8rem;font-weight:400;padding:.5rem 0}.archives-page .theme-vdoing-wrapper li h2 span{font-size:.85rem;font-weight:300;float:right;margin-top:1rem}.archives-page .theme-vdoing-wrapper li a{display:block;color:var(--textColor);transition:padding .3s;padding:.5rem 2rem;line-height:1.2rem}.archives-page .theme-vdoing-wrapper li a:hover{padding-left:2.5rem;color:#11a8cd;background:#f9f9f9}@media (max-width:940px){.archives-page .theme-vdoing-wrapper li a{padding:.5rem 1rem;font-weight:400}.archives-page .theme-vdoing-wrapper li a:hover{padding-left:1.5rem}}.archives-page .theme-vdoing-wrapper li a span.date{opacity:.6;font-size:.85rem;font-weight:400;margin-right:.3rem}.archives-page .theme-vdoing-wrapper li a .title-tag{border:1px solid #ff5722;color:#ff5722;font-size:.8rem;padding:0 .35rem;border-radius:.2rem;margin-left:0;transform:translateY(-.05rem);display:inline-block}.archives-page .theme-vdoing-wrapper .loadmore{text-align:center;margin-top:1rem;opacity:.5}.theme-mode-dark .archives-page .theme-vdoing-wrapper li a:hover,.theme-mode-read .archives-page .theme-vdoing-wrapper li a:hover{background:var(--customBlockBg)}.hide-navbar .archives-page .theme-vdoing-wrapper li.year{top:0}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:1.01em;line-height:1.4;font-weight:700;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.98em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:var(--textColor);transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#11a8cd;border-left-color:#11a8cd}.sidebar-heading.clickable:hover{color:#11a8cd}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}.sidebar .sidebar-sub-headers .level4{padding-left:.2rem}.sidebar .sidebar-sub-headers .level5{padding-left:.4rem}.sidebar .sidebar-sub-headers .level6{padding-left:.6rem}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:var(--textColor);border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#11a8cd}a.sidebar-link.active{font-weight:600;color:#11a8cd;border-left-color:#11a8cd}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid var(--borderColor);padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}.sidebar .blogger{display:none;border-bottom:1px solid var(--borderColor)}.sidebar .blogger img{width:60px;height:60px;border-radius:5px;margin:.75rem 1rem}.sidebar .blogger .blogger-info{flex:1;padding:0 .3rem .3rem 0}.sidebar .blogger .blogger-info h3{margin:.95rem 0 .6rem;font-size:1.1rem}.sidebar .blogger .blogger-info .icons .iconfont{font-size:1.2rem;padding-right:.6rem;color:#777}.sidebar .sidebar-slot{margin-bottom:-.5rem;font-size:.85rem}.sidebar .sidebar-slot.sidebar-slot-top{padding:1.5rem 1.5rem 0}.sidebar .sidebar-slot.sidebar-slot-bottom{padding:0 1.5rem 1.5rem}@media (max-width:719px){.sidebar .blogger{display:flex}.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.yellowBorder{border-radius:5px;box-shadow:0 0 15px #ffe089!important}.buttons{position:fixed;right:2rem;bottom:2.5rem;z-index:11}@media (max-width:959px){.buttons{right:1rem;bottom:1.5rem}}.buttons .button{width:2.2rem;height:2.2rem;line-height:2.2rem;border-radius:50%;box-shadow:0 2px 6px rgba(0,0,0,.15);margin-top:.9rem;text-align:center;cursor:pointer;transition:all .5s;background:var(--blurBg)}.buttons .button.hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.buttons .button.hover:before{color:#fff}@media (any-hover:hover){.buttons .button:hover{background:#11a8cd;box-shadow:0 0 15px #11a8cd}.buttons .button:hover:before{color:#fff}}.buttons .button .select-box{margin:0;padding:.8rem 0;position:absolute;bottom:0;right:1.5rem;background:var(--mainBg);border:1px solid var(--borderColor);width:120px;border-radius:6px;box-shadow:0 0 15px hsla(0,0%,100%,.2)}.buttons .button .select-box li{list-style:none;line-height:2rem;font-size:.95rem}.buttons .button .select-box li:hover{color:#11a8cd}.buttons .button .select-box li.active{background-color:hsla(0,0%,58.8%,.2);color:#11a8cd}.mode-enter-active,.mode-leave-active{transition:all .3s}.mode-enter,.mode-leave-to{opacity:0;transform:scale(.8)}.fade-enter-active,.fade-leave-active{transition:opacity .2s}.fade-enter,.fade-leave-to{opacity:0}.footer{padding:5rem 1.5rem 2.5rem;text-align:center;color:#666;box-sizing:border-box;font-size:.85rem;transition:all .2s ease}.footer>span{line-height:1.5rem}.footer .icons{margin-bottom:12px}.footer .icons .iconfont{padding:0 10px;font-size:1.3rem}.footer a{color:inherit}.footer a:hover{color:#11a8cd}@media (min-width:720px){.sidebar-open .footer{width:auto;padding-left:19.5rem}}@media (min-width:1520px){.have-rightmenu .footer{padding-right:231.5px}}.no-sidebar .footer{width:auto;padding-left:1.5rem}.body-bg{position:fixed;left:0;top:0;z-index:-999999;height:100vh;width:100vw;transition:background .5s}.theme-mode-light{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-],.theme-mode-light pre[class*=language-]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-]::-moz-selection,.theme-mode-light code[class*=language-] ::-moz-selection,.theme-mode-light pre[class*=language-]::-moz-selection,.theme-mode-light pre[class*=language-] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-]::selection,.theme-mode-light code[class*=language-] ::selection,.theme-mode-light pre[class*=language-]::selection,.theme-mode-light pre[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-],.theme-mode-light pre[class*=language-]{text-shadow:none}}.theme-mode-light pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-],.theme-mode-light pre[class*=language-]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata,.theme-mode-light .token.comment,.theme-mode-light .token.doctype,.theme-mode-light .token.prolog{color:#708090}.theme-mode-light .token.punctuation{color:#999}.theme-mode-light .namespace{opacity:.7}.theme-mode-light .token.boolean,.theme-mode-light .token.constant,.theme-mode-light .token.deleted,.theme-mode-light .token.number,.theme-mode-light .token.property,.theme-mode-light .token.symbol,.theme-mode-light .token.tag{color:#905}.theme-mode-light .token.attr-name,.theme-mode-light .token.builtin,.theme-mode-light .token.char,.theme-mode-light .token.inserted,.theme-mode-light .token.selector,.theme-mode-light .token.string{color:#690}.theme-mode-light .language-css .token.string,.theme-mode-light .style .token.string,.theme-mode-light .token.entity,.theme-mode-light .token.operator,.theme-mode-light .token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule,.theme-mode-light .token.attr-value,.theme-mode-light .token.keyword{color:#07a}.theme-mode-light .token.class-name,.theme-mode-light .token.function{color:#dd4a68}.theme-mode-light .token.important,.theme-mode-light .token.regex,.theme-mode-light .token.variable{color:#e90}.theme-mode-light .token.bold,.theme-mode-light .token.important{font-weight:700}.theme-mode-light .token.italic{font-style:italic}.theme-mode-light .token.entity{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted,.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-],.theme-mode-dark pre[class*=language-]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-],.theme-mode-dark pre[class*=language-]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment,.theme-mode-dark .token.cdata,.theme-mode-dark .token.comment,.theme-mode-dark .token.doctype,.theme-mode-dark .token.prolog{color:#999}.theme-mode-dark .token.punctuation{color:#ccc}.theme-mode-dark .token.attr-name,.theme-mode-dark .token.deleted,.theme-mode-dark .token.namespace,.theme-mode-dark .token.tag{color:#e2777a}.theme-mode-dark .token.function-name{color:#6196cc}.theme-mode-dark .token.boolean,.theme-mode-dark .token.function,.theme-mode-dark .token.number{color:#f08d49}.theme-mode-dark .token.class-name,.theme-mode-dark .token.constant,.theme-mode-dark .token.property,.theme-mode-dark .token.symbol{color:#f8c555}.theme-mode-dark .token.atrule,.theme-mode-dark .token.builtin,.theme-mode-dark .token.important,.theme-mode-dark .token.keyword,.theme-mode-dark .token.selector{color:#cc99cd}.theme-mode-dark .token.attr-value,.theme-mode-dark .token.char,.theme-mode-dark .token.regex,.theme-mode-dark .token.string,.theme-mode-dark .token.variable{color:#7ec699}.theme-mode-dark .token.entity,.theme-mode-dark .token.operator,.theme-mode-dark .token.url{color:#67cdcc}.theme-mode-dark .language-css .token.string,.theme-mode-dark .style .token.string,.theme-mode-dark .token.entity,.theme-mode-dark .token.operator,.theme-mode-dark .token.url{background:none}.theme-mode-dark .token.bold,.theme-mode-dark .token.important{font-weight:700}.theme-mode-dark .token.italic{font-style:italic}.theme-mode-dark .token.entity{cursor:help}.theme-mode-dark .token.inserted{color:green}.theme-mode-read{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-],.theme-mode-read pre[class*=language-]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-],.theme-mode-read pre[class*=language-]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment,.theme-mode-read .token.cdata,.theme-mode-read .token.comment,.theme-mode-read .token.doctype,.theme-mode-read .token.prolog{color:#999}.theme-mode-read .token.punctuation{color:#ccc}.theme-mode-read .token.attr-name,.theme-mode-read .token.deleted,.theme-mode-read .token.namespace,.theme-mode-read .token.tag{color:#e2777a}.theme-mode-read .token.function-name{color:#6196cc}.theme-mode-read .token.boolean,.theme-mode-read .token.function,.theme-mode-read .token.number{color:#f08d49}.theme-mode-read .token.class-name,.theme-mode-read .token.constant,.theme-mode-read .token.property,.theme-mode-read .token.symbol{color:#f8c555}.theme-mode-read .token.atrule,.theme-mode-read .token.builtin,.theme-mode-read .token.important,.theme-mode-read .token.keyword,.theme-mode-read .token.selector{color:#cc99cd}.theme-mode-read .token.attr-value,.theme-mode-read .token.char,.theme-mode-read .token.regex,.theme-mode-read .token.string,.theme-mode-read .token.variable{color:#7ec699}.theme-mode-read .token.entity,.theme-mode-read .token.operator,.theme-mode-read .token.url{color:#67cdcc}.theme-mode-read .language-css .token.string,.theme-mode-read .style .token.string,.theme-mode-read .token.entity,.theme-mode-read .token.operator,.theme-mode-read .token.url{background:none}.theme-mode-read .token.bold,.theme-mode-read .token.important{font-weight:700}.theme-mode-read .token.italic{font-style:italic}.theme-mode-read .token.entity{cursor:help}.theme-mode-read .token.inserted{color:green}.theme-style-line.theme-mode-light{--bodyBg:#fff}.theme-style-line.theme-mode-dark{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read{--bodyBg:#f5f5d5}.custom-html-window{position:fixed;bottom:0;display:flex;overflow:hidden;font-weight:350}@media (max-width:960px){.custom-html-window{display:none}}.custom-html-window .custom-wrapper{position:relative;max-width:200px;max-height:400px}.custom-html-window .custom-wrapper .close-but{cursor:pointer;position:absolute;right:0;top:0;font-size:1.5rem;line-height:1.5rem;width:1.5rem;height:1.5rem;opacity:0;transition:all .2s}.custom-html-window .custom-wrapper .close-but:hover{opacity:.9}.custom-html-window .custom-wrapper:hover .close-but{opacity:.7}.custom-html-window.custom-html-window-lb{left:0;z-index:99}.custom-html-window.custom-html-window-lb>*{align-self:flex-end}.custom-html-window.custom-html-window-rb{right:80px;z-index:10;justify-content:flex-end}.custom-html-window.custom-html-window-rb>*{align-self:flex-end}.theme-mode-light[data-v-3396d6b6]{--bodyBg:#f4f4f4;--mainBg:#fff;--sidebarBg:hsla(0,0%,100%,0.8);--blurBg:hsla(0,0%,100%,0.9);--customBlockBg:#f1f1f1;--textColor:#00323c;--textLightenColor:#0085ad;--borderColor:rgba(0,0,0,0.12);--codeBg:#f6f6f6;--codeColor:#525252}.theme-mode-light code[class*=language-][data-v-3396d6b6],.theme-mode-light pre[class*=language-][data-v-3396d6b6]{color:#000;background:none;text-shadow:0 1px #fff;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-light code[class*=language-][data-v-3396d6b6]::-moz-selection,.theme-mode-light code[class*=language-][data-v-3396d6b6] ::-moz-selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6]::-moz-selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6] ::-moz-selection{text-shadow:none;background:#b3d4fc}.theme-mode-light code[class*=language-][data-v-3396d6b6]::selection,.theme-mode-light code[class*=language-][data-v-3396d6b6] ::selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6]::selection,.theme-mode-light pre[class*=language-][data-v-3396d6b6] ::selection{text-shadow:none;background:#b3d4fc}@media print{.theme-mode-light code[class*=language-][data-v-3396d6b6],.theme-mode-light pre[class*=language-][data-v-3396d6b6]{text-shadow:none}}.theme-mode-light pre[class*=language-][data-v-3396d6b6]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-light :not(pre)>code[class*=language-][data-v-3396d6b6],.theme-mode-light pre[class*=language-][data-v-3396d6b6]{background:#f5f2f0}.theme-mode-light :not(pre)>code[class*=language-][data-v-3396d6b6]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-light .token.cdata[data-v-3396d6b6],.theme-mode-light .token.comment[data-v-3396d6b6],.theme-mode-light .token.doctype[data-v-3396d6b6],.theme-mode-light .token.prolog[data-v-3396d6b6]{color:#708090}.theme-mode-light .token.punctuation[data-v-3396d6b6]{color:#999}.theme-mode-light .namespace[data-v-3396d6b6]{opacity:.7}.theme-mode-light .token.boolean[data-v-3396d6b6],.theme-mode-light .token.constant[data-v-3396d6b6],.theme-mode-light .token.deleted[data-v-3396d6b6],.theme-mode-light .token.number[data-v-3396d6b6],.theme-mode-light .token.property[data-v-3396d6b6],.theme-mode-light .token.symbol[data-v-3396d6b6],.theme-mode-light .token.tag[data-v-3396d6b6]{color:#905}.theme-mode-light .token.attr-name[data-v-3396d6b6],.theme-mode-light .token.builtin[data-v-3396d6b6],.theme-mode-light .token.char[data-v-3396d6b6],.theme-mode-light .token.inserted[data-v-3396d6b6],.theme-mode-light .token.selector[data-v-3396d6b6],.theme-mode-light .token.string[data-v-3396d6b6]{color:#690}.theme-mode-light .language-css .token.string[data-v-3396d6b6],.theme-mode-light .style .token.string[data-v-3396d6b6],.theme-mode-light .token.entity[data-v-3396d6b6],.theme-mode-light .token.operator[data-v-3396d6b6],.theme-mode-light .token.url[data-v-3396d6b6]{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.theme-mode-light .token.atrule[data-v-3396d6b6],.theme-mode-light .token.attr-value[data-v-3396d6b6],.theme-mode-light .token.keyword[data-v-3396d6b6]{color:#07a}.theme-mode-light .token.class-name[data-v-3396d6b6],.theme-mode-light .token.function[data-v-3396d6b6]{color:#dd4a68}.theme-mode-light .token.important[data-v-3396d6b6],.theme-mode-light .token.regex[data-v-3396d6b6],.theme-mode-light .token.variable[data-v-3396d6b6]{color:#e90}.theme-mode-light .token.bold[data-v-3396d6b6],.theme-mode-light .token.important[data-v-3396d6b6]{font-weight:700}.theme-mode-light .token.italic[data-v-3396d6b6]{font-style:italic}.theme-mode-light .token.entity[data-v-3396d6b6]{cursor:help}.theme-mode-light div[class*=language-] .highlight-lines .highlighted[data-v-3396d6b6],.theme-mode-light div[class*=language-].line-numbers-mode .highlight-lines .highlighted[data-v-3396d6b6]:before{background-color:hsla(0,0%,78.4%,.4)}.theme-mode-dark[data-v-3396d6b6]{--bodyBg:#27272b;--mainBg:#1e1e22;--sidebarBg:rgba(30,30,34,0.8);--blurBg:rgba(30,30,34,0.8);--customBlockBg:#27272b;--textColor:#9b9baa;--textLightenColor:#0085ad;--borderColor:#30363d;--codeBg:#252526;--codeColor:#fff}.theme-mode-dark code[class*=language-][data-v-3396d6b6],.theme-mode-dark pre[class*=language-][data-v-3396d6b6]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-dark pre[class*=language-][data-v-3396d6b6]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-dark :not(pre)>code[class*=language-][data-v-3396d6b6],.theme-mode-dark pre[class*=language-][data-v-3396d6b6]{background:#2d2d2d}.theme-mode-dark :not(pre)>code[class*=language-][data-v-3396d6b6]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-dark .token.block-comment[data-v-3396d6b6],.theme-mode-dark .token.cdata[data-v-3396d6b6],.theme-mode-dark .token.comment[data-v-3396d6b6],.theme-mode-dark .token.doctype[data-v-3396d6b6],.theme-mode-dark .token.prolog[data-v-3396d6b6]{color:#999}.theme-mode-dark .token.punctuation[data-v-3396d6b6]{color:#ccc}.theme-mode-dark .token.attr-name[data-v-3396d6b6],.theme-mode-dark .token.deleted[data-v-3396d6b6],.theme-mode-dark .token.namespace[data-v-3396d6b6],.theme-mode-dark .token.tag[data-v-3396d6b6]{color:#e2777a}.theme-mode-dark .token.function-name[data-v-3396d6b6]{color:#6196cc}.theme-mode-dark .token.boolean[data-v-3396d6b6],.theme-mode-dark .token.function[data-v-3396d6b6],.theme-mode-dark .token.number[data-v-3396d6b6]{color:#f08d49}.theme-mode-dark .token.class-name[data-v-3396d6b6],.theme-mode-dark .token.constant[data-v-3396d6b6],.theme-mode-dark .token.property[data-v-3396d6b6],.theme-mode-dark .token.symbol[data-v-3396d6b6]{color:#f8c555}.theme-mode-dark .token.atrule[data-v-3396d6b6],.theme-mode-dark .token.builtin[data-v-3396d6b6],.theme-mode-dark .token.important[data-v-3396d6b6],.theme-mode-dark .token.keyword[data-v-3396d6b6],.theme-mode-dark .token.selector[data-v-3396d6b6]{color:#cc99cd}.theme-mode-dark .token.attr-value[data-v-3396d6b6],.theme-mode-dark .token.char[data-v-3396d6b6],.theme-mode-dark .token.regex[data-v-3396d6b6],.theme-mode-dark .token.string[data-v-3396d6b6],.theme-mode-dark .token.variable[data-v-3396d6b6]{color:#7ec699}.theme-mode-dark .token.entity[data-v-3396d6b6],.theme-mode-dark .token.operator[data-v-3396d6b6],.theme-mode-dark .token.url[data-v-3396d6b6]{color:#67cdcc}.theme-mode-dark .language-css .token.string[data-v-3396d6b6],.theme-mode-dark .style .token.string[data-v-3396d6b6],.theme-mode-dark .token.entity[data-v-3396d6b6],.theme-mode-dark .token.operator[data-v-3396d6b6],.theme-mode-dark .token.url[data-v-3396d6b6]{background:none}.theme-mode-dark .token.bold[data-v-3396d6b6],.theme-mode-dark .token.important[data-v-3396d6b6]{font-weight:700}.theme-mode-dark .token.italic[data-v-3396d6b6]{font-style:italic}.theme-mode-dark .token.entity[data-v-3396d6b6]{cursor:help}.theme-mode-dark .token.inserted[data-v-3396d6b6]{color:green}.theme-mode-read[data-v-3396d6b6]{--bodyBg:#ececcc;--mainBg:#f5f5d5;--sidebarBg:rgba(245,245,213,0.8);--blurBg:rgba(245,245,213,0.9);--customBlockBg:#ececcc;--textColor:#704214;--textLightenColor:#963;--borderColor:rgba(0,0,0,0.15);--codeBg:#282c34;--codeColor:#fff}.theme-mode-read code[class*=language-][data-v-3396d6b6],.theme-mode-read pre[class*=language-][data-v-3396d6b6]{color:#ccc;background:none;text-shadow:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;hyphens:none}.theme-mode-read pre[class*=language-][data-v-3396d6b6]{padding:1em;margin:.5em 0;overflow:auto}.theme-mode-read :not(pre)>code[class*=language-][data-v-3396d6b6],.theme-mode-read pre[class*=language-][data-v-3396d6b6]{background:#2d2d2d}.theme-mode-read :not(pre)>code[class*=language-][data-v-3396d6b6]{padding:.1em;border-radius:.3em;white-space:normal}.theme-mode-read .token.block-comment[data-v-3396d6b6],.theme-mode-read .token.cdata[data-v-3396d6b6],.theme-mode-read .token.comment[data-v-3396d6b6],.theme-mode-read .token.doctype[data-v-3396d6b6],.theme-mode-read .token.prolog[data-v-3396d6b6]{color:#999}.theme-mode-read .token.punctuation[data-v-3396d6b6]{color:#ccc}.theme-mode-read .token.attr-name[data-v-3396d6b6],.theme-mode-read .token.deleted[data-v-3396d6b6],.theme-mode-read .token.namespace[data-v-3396d6b6],.theme-mode-read .token.tag[data-v-3396d6b6]{color:#e2777a}.theme-mode-read .token.function-name[data-v-3396d6b6]{color:#6196cc}.theme-mode-read .token.boolean[data-v-3396d6b6],.theme-mode-read .token.function[data-v-3396d6b6],.theme-mode-read .token.number[data-v-3396d6b6]{color:#f08d49}.theme-mode-read .token.class-name[data-v-3396d6b6],.theme-mode-read .token.constant[data-v-3396d6b6],.theme-mode-read .token.property[data-v-3396d6b6],.theme-mode-read .token.symbol[data-v-3396d6b6]{color:#f8c555}.theme-mode-read .token.atrule[data-v-3396d6b6],.theme-mode-read .token.builtin[data-v-3396d6b6],.theme-mode-read .token.important[data-v-3396d6b6],.theme-mode-read .token.keyword[data-v-3396d6b6],.theme-mode-read .token.selector[data-v-3396d6b6]{color:#cc99cd}.theme-mode-read .token.attr-value[data-v-3396d6b6],.theme-mode-read .token.char[data-v-3396d6b6],.theme-mode-read .token.regex[data-v-3396d6b6],.theme-mode-read .token.string[data-v-3396d6b6],.theme-mode-read .token.variable[data-v-3396d6b6]{color:#7ec699}.theme-mode-read .token.entity[data-v-3396d6b6],.theme-mode-read .token.operator[data-v-3396d6b6],.theme-mode-read .token.url[data-v-3396d6b6]{color:#67cdcc}.theme-mode-read .language-css .token.string[data-v-3396d6b6],.theme-mode-read .style .token.string[data-v-3396d6b6],.theme-mode-read .token.entity[data-v-3396d6b6],.theme-mode-read .token.operator[data-v-3396d6b6],.theme-mode-read .token.url[data-v-3396d6b6]{background:none}.theme-mode-read .token.bold[data-v-3396d6b6],.theme-mode-read .token.important[data-v-3396d6b6]{font-weight:700}.theme-mode-read .token.italic[data-v-3396d6b6]{font-style:italic}.theme-mode-read .token.entity[data-v-3396d6b6]{cursor:help}.theme-mode-read .token.inserted[data-v-3396d6b6]{color:green}.theme-style-line.theme-mode-light[data-v-3396d6b6]{--bodyBg:#fff}.theme-style-line.theme-mode-dark[data-v-3396d6b6]{--bodyBg:#1e1e22}.theme-style-line.theme-mode-read[data-v-3396d6b6]{--bodyBg:#f5f5d5}.badge[data-v-3396d6b6]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-3396d6b6],.badge.tip[data-v-3396d6b6],.badge[data-v-3396d6b6]{background-color:#42b983}.badge.error[data-v-3396d6b6]{background-color:#da5961}.badge.warn[data-v-3396d6b6],.badge.warning[data-v-3396d6b6],.badge.yellow[data-v-3396d6b6]{background-color:#e7c000}.badge+.badge[data-v-3396d6b6]{margin-left:5px} \ No newline at end of file diff --git a/docs/01.DevOps/01.Linux/imgs/2022-08-05-18-18-02.png b/assets/img/2022-08-05-18-18-02.bdcb0c94.png similarity index 100% rename from docs/01.DevOps/01.Linux/imgs/2022-08-05-18-18-02.png rename to assets/img/2022-08-05-18-18-02.bdcb0c94.png diff --git a/docs/01.DevOps/01.Linux/imgs/2022-08-05-18-36-10.png b/assets/img/2022-08-05-18-36-10.f7eef6aa.png similarity index 100% rename from docs/01.DevOps/01.Linux/imgs/2022-08-05-18-36-10.png rename to assets/img/2022-08-05-18-36-10.f7eef6aa.png diff --git a/docs/01.DevOps/01.Linux/imgs/2022-08-05-18-36-49.png b/assets/img/2022-08-05-18-36-49.4d7152d4.png similarity index 100% rename from docs/01.DevOps/01.Linux/imgs/2022-08-05-18-36-49.png rename to assets/img/2022-08-05-18-36-49.4d7152d4.png diff --git "a/docs/01.DevOps/05.\345\274\200\345\217\221\345\267\245\345\205\267/imgs/2022-08-12-20-05-12.png" b/assets/img/2022-08-12-20-05-12.8e287c48.png similarity index 100% rename from "docs/01.DevOps/05.\345\274\200\345\217\221\345\267\245\345\205\267/imgs/2022-08-12-20-05-12.png" rename to assets/img/2022-08-12-20-05-12.8e287c48.png diff --git "a/docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-08-15-25-10.png" b/assets/img/2022-09-08-15-25-10.a27e3dfe.png similarity index 100% rename from "docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-08-15-25-10.png" rename to assets/img/2022-09-08-15-25-10.a27e3dfe.png diff --git "a/docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-13-20-42-11.png" b/assets/img/2022-09-13-20-42-47.bbdff446.png similarity index 100% rename from "docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-13-20-42-11.png" rename to assets/img/2022-09-13-20-42-47.bbdff446.png diff --git "a/docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-13-20-46-34.png" b/assets/img/2022-09-13-20-46-34.66c88bce.png similarity index 100% rename from "docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-13-20-46-34.png" rename to assets/img/2022-09-13-20-46-34.66c88bce.png diff --git "a/docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-13-21-07-51.png" b/assets/img/2022-09-13-21-07-51.b45a2b11.png similarity index 100% rename from "docs/01.DevOps/03.\345\256\271\345\231\250\345\214\226\351\203\250\347\275\262/imgs/2022-09-13-21-07-51.png" rename to assets/img/2022-09-13-21-07-51.b45a2b11.png diff --git "a/docs/01.DevOps/04.\345\270\270\347\224\250\347\273\204\344\273\266/imgs/2022-11-13-21-28-36.png" b/assets/img/2022-11-13-21-28-36.a1db3efd.png similarity index 100% rename from "docs/01.DevOps/04.\345\270\270\347\224\250\347\273\204\344\273\266/imgs/2022-11-13-21-28-36.png" rename to assets/img/2022-11-13-21-28-36.a1db3efd.png diff --git "a/docs/01.DevOps/04.\345\270\270\347\224\250\347\273\204\344\273\266/imgs/2022-11-14-20-19-45.png" b/assets/img/2022-11-14-20-19-45.ef2f299a.png similarity index 100% rename from "docs/01.DevOps/04.\345\270\270\347\224\250\347\273\204\344\273\266/imgs/2022-11-14-20-19-45.png" rename to assets/img/2022-11-14-20-19-45.ef2f299a.png diff --git "a/docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-14-02-38.png" b/assets/img/2022-11-22-14-02-38.105a9a84.png similarity index 100% rename from "docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-14-02-38.png" rename to assets/img/2022-11-22-14-02-38.105a9a84.png diff --git "a/docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-14-27-24.png" b/assets/img/2022-11-22-14-27-24.b286b0f9.png similarity index 100% rename from "docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-14-27-24.png" rename to assets/img/2022-11-22-14-27-24.b286b0f9.png diff --git "a/docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-23-24-48.png" b/assets/img/2022-11-22-23-24-48.48b89c9d.png similarity index 100% rename from "docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-23-24-48.png" rename to assets/img/2022-11-22-23-24-48.48b89c9d.png diff --git "a/docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-23-26-56.png" b/assets/img/2022-11-22-23-26-56.dad87aab.png similarity index 100% rename from "docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-22-23-26-56.png" rename to assets/img/2022-11-22-23-26-56.dad87aab.png diff --git "a/docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-23-14-52-41.png" b/assets/img/2022-11-23-14-52-41.16f4bf28.png similarity index 100% rename from "docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2022-11-23-14-52-41.png" rename to assets/img/2022-11-23-14-52-41.16f4bf28.png diff --git "a/docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2023-01-06-15-48-35.png" b/assets/img/2023-01-06-15-48-57.ef0b5485.png similarity index 100% rename from "docs/02.Java/01.Java\346\240\270\345\277\203/imgs/2023-01-06-15-48-35.png" rename to assets/img/2023-01-06-15-48-57.ef0b5485.png diff --git "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-21-11-27-43.png" b/assets/img/2023-02-21-11-27-43.82201180.png similarity index 100% rename from "docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-21-11-27-43.png" rename to assets/img/2023-02-21-11-27-43.82201180.png diff --git "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-23-10-10-20.png" b/assets/img/2023-02-23-10-10-20.0a747ad2.png similarity index 100% rename from "docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-23-10-10-20.png" rename to assets/img/2023-02-23-10-10-20.0a747ad2.png diff --git "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-23-17-42-35.png" b/assets/img/2023-02-23-17-42-35.d77e9cfc.png similarity index 100% rename from "docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-23-17-42-35.png" rename to assets/img/2023-02-23-17-42-35.d77e9cfc.png diff --git "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-24-10-54-04.png" b/assets/img/2023-02-24-10-54-04.67a800c0.png similarity index 100% rename from "docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-24-10-54-04.png" rename to assets/img/2023-02-24-10-54-04.67a800c0.png diff --git "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-03-02-17-07-19.png" b/assets/img/2023-03-02-17-07-19.9e348631.png similarity index 100% rename from "docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-03-02-17-07-19.png" rename to assets/img/2023-03-02-17-07-19.9e348631.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-02-21-40-34.png b/assets/img/2023-04-02-21-40-34.6b061fc8.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-02-21-40-34.png rename to assets/img/2023-04-02-21-40-34.6b061fc8.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-09-18-13-34.png b/assets/img/2023-04-09-18-13-34.7c091320.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-09-18-13-34.png rename to assets/img/2023-04-09-18-13-34.7c091320.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-13-12-08-49.png b/assets/img/2023-04-13-12-08-49.fc792a28.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-13-12-08-49.png rename to assets/img/2023-04-13-12-08-49.fc792a28.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-22-10-09-27.png b/assets/img/2023-04-22-10-09-27.9cb5be0c.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-22-10-09-27.png rename to assets/img/2023-04-22-10-09-27.9cb5be0c.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-22-10-10-02.png b/assets/img/2023-04-22-10-10-02.70461bd7.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-22-10-10-02.png rename to assets/img/2023-04-22-10-10-02.70461bd7.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-22-11-10-00.png b/assets/img/2023-04-22-11-10-00.050b42f4.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-22-11-10-00.png rename to assets/img/2023-04-22-11-10-00.050b42f4.png diff --git a/docs/02.Java/02.Spring/imgs/2023-04-22-11-36-12.png b/assets/img/2023-04-22-11-36-12.3e5ad6c2.png similarity index 100% rename from docs/02.Java/02.Spring/imgs/2023-04-22-11-36-12.png rename to assets/img/2023-04-22-11-36-12.3e5ad6c2.png diff --git a/assets/img/search.237d6f6a.svg b/assets/img/search.237d6f6a.svg new file mode 100644 index 0000000..18ed22a --- /dev/null +++ b/assets/img/search.237d6f6a.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/js/10.12411284.js b/assets/js/10.12411284.js new file mode 100644 index 0000000..c005d29 --- /dev/null +++ b/assets/js/10.12411284.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{241:function(t,s,n){},278:function(t,s,n){"use strict";n(241)},355:function(t,s,n){"use strict";n.r(s);const i=["这里什么都没有。","我是谁?我在哪?","这是一个Four-Oh-Four.","看来我们的链接坏掉了~"];var o={methods:{getMsg:()=>i[Math.floor(Math.random()*i.length)]}},e=(n(278),n(6)),a=Object(e.a)(o,(function(){var t=this._self._c;return t("div",{staticClass:"theme-container"},[t("div",{staticClass:"theme-vdoing-content"},[t("span",[this._v("404")]),this._v(" "),t("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),t("router-link",{attrs:{to:"/"}},[this._v("返回首页")])],1)])}),[],!1,null,"08abdc17",null);s.default=a.exports}}]); \ No newline at end of file diff --git a/assets/js/11.14f82df2.js b/assets/js/11.14f82df2.js new file mode 100644 index 0000000..aae2936 --- /dev/null +++ b/assets/js/11.14f82df2.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{330:function(s,a,n){s.exports=n.p+"assets/img/2022-11-13-21-28-36.a1db3efd.png"},331:function(s,a,n){s.exports=n.p+"assets/img/2022-11-14-20-19-45.ef2f299a.png"},365:function(s,a,n){"use strict";n.r(a);var t=n(6),e=Object(t.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h2",{attrs:{id:"编译安装"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#编译安装"}},[s._v("#")]),s._v(" 编译安装")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("yum -y "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel\n./configure --with-http_ssl_module --with-http_sub_module\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("make")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("whereis")]),s._v(" nginx\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ln")]),s._v(" -s /usr/local/nginx/sbin/nginx /usr/bin\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("ul",[a("li",[s._v("设置nginx自启\n在rc.local中添加启动代码:")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/rc.local\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在文件末尾添加一句 /usr/local/nginx/sbin/nginx")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 重新赋予权限")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("chmod")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("755")]),s._v(" rc.local\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("ul",[a("li",[s._v("安装为系统服务")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vi")]),s._v(" /usr/lib/systemd/system/nginx.service\nsystemctl daemon-reload\nsystemctl start nginx.service\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Unit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("Description")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("nginx - web server\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("After")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("network.target remote-fs.target nss-lookup.target\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Service"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("Type")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("forking\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("PIDFile")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/nginx/logs/nginx.pid\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ExecStartPre")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ExecStart")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ExecReload")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/nginx/sbin/nginx -s reload\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ExecStop")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/nginx/sbin/nginx -s stop\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ExecQuit")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("/usr/local/nginx/sbin/nginx -s quit\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("PrivateTmp")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("true\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),s._v("Install"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("WantedBy")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("multi-user.target\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br")])]),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 重新启动nginx服务")]),s._v("\nsystemctl reload nginx\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#开机启动 ")]),s._v("\nsystemctl "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("enable")]),s._v(" nginx.service\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("ul",[a("li",[s._v("重启nginx")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("nginx -s reload\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 启动")]),s._v("\nnginx\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 停止")]),s._v("\nnginx -s stop\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 重启")]),s._v("\nnginx -s reload\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 检查文件是否正确(修改配置文件后都必须检查,不然网站部署会出现问题)")]),s._v("\nnginx -t\n\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[a("img",{attrs:{src:n(330),alt:""}})]),s._v(" "),a("h2",{attrs:{id:"反向代理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#反向代理"}},[s._v("#")]),s._v(" 反向代理")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("server_name www.nginxtest.com"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\nlocation /nginxtest/ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n proxy_pass http://127.0.0.1:8080/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n- 添加谷歌代理\n```bash\nserver "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n server_name "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".xx.xx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n location / "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n proxy_pass https://www.google.com/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n proxy_redirect https://www.google.com/ /"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n proxy_cookie_domain google.com "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".xx.xx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n proxy_set_header User-Agent "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$http_user_agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n proxy_set_header Cookie "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 这里设置cookie,这里是别人给出的一段,必要时请放上适合你自己的cookie")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 设置这个可以避免一些情况下的302跳转,如果google服务器返回302 redirect,那么浏览器被跳转到google自己的域名,那就没的玩了")]),s._v("\n\n proxy_set_header X-Real-IP "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$remote_addr")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n proxy_set_header X-Forwarded-For "),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$proxy_add_x_forwarded_for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n sub_filter http://www.google.com http://192.168.xx.xx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n sub_filter https://www.google.com http://192.168.xx.xx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 这里替换网页中的链接,因为我们的镜像站是http的,所以上面顺便把协议也一起替换了")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br")])]),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v('- 模拟504错误\n```java\n/**\n * 测试nginx用的接口\n */\n@Controller\n@RequestMapping("/nginx")\npublic class NginxTestController {\n /**\n * 模拟网关超时504\n * @return\n * @throws InterruptedException\n */\n @GetMapping("/timeout")\n @ResponseBody\n public String timeout() throws InterruptedException {\n // 30s后返回结果\n Thread.sleep(30000);\n\n return "success";\n }\n}\n')])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])]),a("ul",[a("li",[s._v("设置nginx等待后端返回超时时间(默认60s)")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("proxy_connect_timeout "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#nginx跟后端服务器连接超时时间(代理连接超时)默认60s")]),s._v("\nproxy_read_timeout "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#后端服务器数据回传时间(代理发送超时)默认值60s")]),s._v("\nproxy_send_timeout "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#连接成功后,后端服务器响应时间(代理接收超时)默认值60s")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("h2",{attrs:{id:"限流"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#限流"}},[s._v("#")]),s._v(" 限流")]),s._v(" "),a("p",[s._v("https://www.freesion.com/article/29971328266/")]),s._v(" "),a("h2",{attrs:{id:"负载均衡"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#负载均衡"}},[s._v("#")]),s._v(" 负载均衡")]),s._v(" "),a("ul",[a("li",[s._v("算法:\n"),a("code",[s._v("轮询")]),s._v(","),a("code",[s._v("ip哈希")]),s._v(","),a("code",[s._v("随机")])])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("upstream appserver"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n server "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".44.102 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("weight")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("8")]),s._v(" down"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n server "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".44.103 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("weight")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n server "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".44.104 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("weight")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" backup"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br")])]),a("h2",{attrs:{id:"urlrewrite"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#urlrewrite"}},[s._v("#")]),s._v(" URLRewrite")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("location / "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n rewrite ^/"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("-9"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("+"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(".html$ /index.jsp?pageNum"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("break")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n proxy_pass http://192.168.159.104"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("h2",{attrs:{id:"防盗链"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#防盗链"}},[s._v("#")]),s._v(" 防盗链")]),s._v(" "),a("p",[a("img",{attrs:{src:n(331),alt:""}})])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/12.2a984365.js b/assets/js/12.2a984365.js new file mode 100644 index 0000000..e3de375 --- /dev/null +++ b/assets/js/12.2a984365.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{332:function(s,a,t){s.exports=t.p+"assets/img/2022-08-12-20-05-12.8e287c48.png"},370:function(s,a,t){"use strict";t.r(a);var n=t(6),r=Object(n.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"网络配置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#网络配置"}},[s._v("#")]),s._v(" 网络配置")]),s._v(" "),a("h2",{attrs:{id:"virtualbox配置nat网络"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#virtualbox配置nat网络"}},[s._v("#")]),s._v(" virtualbox配置nat网络")]),s._v(" "),a("ul",[a("li",[s._v("工具配置nat端口转发规则\n"),a("img",{attrs:{src:t(332),alt:""}})]),s._v(" "),a("li",[s._v("centos7")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/sysconfig/network-scripts/ifcfg-enp0s3\n\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("TYPE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Ethernet"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("PROXY_METHOD")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"none"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BROWSER_ONLY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BOOTPROTO")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"static"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DEFROUTE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yes"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV4_FAILURE_FATAL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6INIT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yes"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_AUTOCONF")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yes"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_DEFROUTE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yes"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_FAILURE_FATAL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"no"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_ADDR_GEN_MODE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"stable-privacy"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"enp0s3"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("UUID")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"4db2fd13-13d0-4c0f-bbd7-16b4cb0d449c"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DEVICE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"enp0s3"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ONBOOT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"yes"')]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPADDR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10.0")]),s._v(".2.6\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GATEWAY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("10.0")]),s._v(".2.2\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NETMASK")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("255.255")]),s._v(".255.0\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DNS1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("114.114")]),s._v(".114.114\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br")])]),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 重启网络")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("service")]),s._v(" network restart\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("ping")]),s._v(" www.baidu.com\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/13.f2d517d3.js b/assets/js/13.f2d517d3.js new file mode 100644 index 0000000..e9a6c20 --- /dev/null +++ b/assets/js/13.f2d517d3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{338:function(s,t,a){s.exports=a.p+"assets/img/2023-01-06-15-48-57.ef0b5485.png"},376:function(s,t,a){"use strict";a.r(t);var n=a(6),r=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"为什么工作中项目很少用到设计模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#为什么工作中项目很少用到设计模式"}},[s._v("#")]),s._v(" 为什么工作中项目很少用到设计模式?")]),s._v(" "),t("blockquote",[t("p",[s._v("设计模式的目的是提供可扩展性和可维护性。但是我们开发的项目本身,大部分都是固定写死的,逻辑单一,我们开发的模块也并不在其他位置或者其他项目中复用,目的很明确就是做当前的业务,支付模块就管支付的业务,推送模块就管消息推送的业务。所以,平时开发中用到设计模式的地方很少。但是框架就不同了,框架必须适应不同的项目,具备高弹性和高扩展性。他们要能适应各种不同的环境,所以,设计模式在框架设计中处处可见。")])]),s._v(" "),t("blockquote",[t("p",[s._v("世界上成千上万的项目都在使用Spring,Shiro,Mybatis,SpringBoot等,那么,他们就必须能满足各种不同的需求,使用不同的配置,插件,定制化,他们不仅要适应你,还要适应他,各种策略模式,代理模式,责任链模式,状态模式,众口难调在这里是不存在的!。比如shiro中的一个token,可能有的项目要使用简单文本密码,可能有些项目已要使用数字证书,这里就必须使用策略模式spring中的事务处理,因为他是框架,他根本不知道自己要放在哪段service对象身上,他就使用动态代理模式,动态的进行运行时施加代理。可以这么说,设计模式为扩展而生,对修改说NO,对扩展说YES! 你绝不会为了项目需要去傻傻的修改spring的源码来适应你的项目需求。")])]),s._v(" "),t("blockquote",[t("p",[s._v("框架就是这样适应成千上万的项目的。我们的业务逻辑代码,平时开发项目的时候,功能是死的,是专为这个场景而生的,不会在另外的场景中出现,所以,这种代码开发,业务的开发,是不需要设计模式的。对于我们平时开发的项目,如果需求有变化,我们一般的做法,是直接修改源代码了,这样的其实带来了一定的修改成本,但是,为了一个项目中可能不明确的未来变化,而精心设计扩展性很高的架构,成本也是显而易见的,所以,这是一个取舍的过程。深层次的说这是企业开发成本与项目实际应用的一个博弈过程。")])]),s._v(" "),t("h1",{attrs:{id:"设计原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#设计原则"}},[s._v("#")]),s._v(" 设计原则")]),s._v(" "),t("h2",{attrs:{id:"单一职责原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#单一职责原则"}},[s._v("#")]),s._v(" 单一职责原则")]),s._v(" "),t("ol",[t("li",[s._v("降低代码复杂度")]),s._v(" "),t("li",[s._v("提高可读性、可维护性")])]),s._v(" "),t("h2",{attrs:{id:"接口隔离原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#接口隔离原则"}},[s._v("#")]),s._v(" 接口隔离原则")]),s._v(" "),t("ol",[t("li",[s._v("客户端不应该依赖它不需要的接口。")]),s._v(" "),t("li",[s._v("一个类对另一个类的依赖应该建立在最小的接口上")])]),s._v(" "),t("h2",{attrs:{id:"依赖倒转原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#依赖倒转原则"}},[s._v("#")]),s._v(" 依赖倒转原则")]),s._v(" "),t("ol",[t("li",[s._v("高层模块不依赖低层模块,二者都应依赖其抽象")]),s._v(" "),t("li",[s._v("抽象不依赖细节,细节依赖抽象")]),s._v(" "),t("li",[s._v("依赖倒转是面向接口编程")])]),s._v(" "),t("p",[t("img",{attrs:{src:a(338),alt:""}})]),s._v(" "),t("h2",{attrs:{id:"里氏替换原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#里氏替换原则"}},[s._v("#")]),s._v(" 里氏替换原则")]),s._v(" "),t("ol",[t("li",[s._v("所有引用基类的地方必须能透明地使用其子类的对象。")]),s._v(" "),t("li",[s._v("子类中尽量不要重写父类的方法!")]),s._v(" "),t("li",[s._v("做法:让原来的父类和子类都继承一个更通用的基类,原有继承关系调整为依赖、聚合、组合等关系。")])]),s._v(" "),t("h2",{attrs:{id:"开闭原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#开闭原则"}},[s._v("#")]),s._v(" 开闭原则")]),s._v(" "),t("ol",[t("li",[s._v("模块和函数对扩展(提供方)开放,对修改(使用方)关闭。")]),s._v(" "),t("li",[s._v("当需求变化,尽量通过扩展实体行为来实现,而不是通过修改已有代码")])]),s._v(" "),t("h2",{attrs:{id:"迪米特法则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#迪米特法则"}},[s._v("#")]),s._v(" 迪米特法则")]),s._v(" "),t("ol",[t("li",[s._v("(Law of Demeter)又叫作最少知识原则(The Least Knowledge Principle)最少知道原则,一个类对其依赖的类知道的越少越好。")])]),s._v(" "),t("h2",{attrs:{id:"合成复用原则"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#合成复用原则"}},[s._v("#")]),s._v(" 合成复用原则")]),s._v(" "),t("ol",[t("li",[s._v("尽量使用合成/聚合的方式,而不是使用继承")])]),s._v(" "),t("h1",{attrs:{id:"uml类图"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uml类图"}},[s._v("#")]),s._v(" UML类图")]),s._v(" "),t("blockquote",[t("p",[s._v("用于描述系统中类的组成和类之间的各种静态关系。")])]),s._v(" "),t("p",[t("strong",[s._v("类之间的关系包括:")])]),s._v(" "),t("ul",[t("li",[s._v("依赖")])]),s._v(" "),t("ol",[t("li",[s._v("作为类的成员属性")]),s._v(" "),t("li",[s._v("作为方法的返回类型")]),s._v(" "),t("li",[s._v("作为方法接收的参数类型")]),s._v(" "),t("li",[s._v("方法中使用到")])]),s._v(" "),t("ul",[t("li",[s._v("泛化(继承)")]),s._v(" "),t("li",[s._v("实现")]),s._v(" "),t("li",[s._v("关联")]),s._v(" "),t("li",[s._v("聚合")]),s._v(" "),t("li",[s._v("组合")])]),s._v(" "),t("h1",{attrs:{id:"代理模式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#代理模式"}},[s._v("#")]),s._v(" 代理模式")]),s._v(" "),t("h2",{attrs:{id:"静态代理"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#静态代理"}},[s._v("#")]),s._v(" 静态代理")]),s._v(" "),t("blockquote",[t("p",[s._v("真实对象和代理对象都要实现同一接口\n代理对象要代理真实对象")])]),s._v(" "),t("div",{staticClass:"language-java line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("StaticProxy")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" args"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("WeddingCompany")]),s._v(" wc "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("WeddingCompany")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("You")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n wc"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("goMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Marry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("goMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("You")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Marry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("goMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"杰克要结婚了!"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("WeddingCompany")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Marry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Marry")]),s._v(" client"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("WeddingCompany")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Marry")]),s._v(" client"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("client "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" client"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("goMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n client"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("goMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("afterMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"婚礼结束收钱了!"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("beforMarry")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"婚礼布置..."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br")])])])}),[],!1,null,null,null);t.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/14.13913274.js b/assets/js/14.13913274.js new file mode 100644 index 0000000..092fe73 --- /dev/null +++ b/assets/js/14.13913274.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{345:function(t,a,s){t.exports=s.p+"assets/img/2023-04-02-21-40-34.6b061fc8.png"},378:function(t,a,s){"use strict";s.r(a);var e=s(6),r=Object(e.a)({},(function(){var t=this,a=t._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"spring5"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#spring5"}},[t._v("#")]),t._v(" Spring5")]),t._v(" "),a("h1",{attrs:{id:"源码地址"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#源码地址"}},[t._v("#")]),t._v(" 源码地址:")]),t._v(" "),a("p",[a("a",{attrs:{href:"https://gitee.com/javaproejct/spring_tutorial",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://gitee.com/javaproejct/spring_tutorial"),a("OutboundLink")],1)]),t._v(" "),a("h2",{attrs:{id:"ioc"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ioc"}},[t._v("#")]),t._v(" IOC")]),t._v(" "),a("p",[a("code",[t._v("Inversion of Control")]),t._v("控制反转,把对象的创建和对象之间的调用过程,交给 Spring 进行管理。\n降低耦合度。")]),t._v(" "),a("h2",{attrs:{id:"bean-管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bean-管理"}},[t._v("#")]),t._v(" Bean 管理")]),t._v(" "),a("blockquote",[a("p",[t._v("默认单实例对象 "),a("code",[t._v("singleton")]),t._v(",scope="),a("code",[t._v("prototype")]),t._v(" 可以指定多实例。")])]),t._v(" "),a("h2",{attrs:{id:"singleton-和-prototype-区别"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#singleton-和-prototype-区别"}},[t._v("#")]),t._v(" singleton 和 prototype 区别")]),t._v(" "),a("ol",[a("li",[t._v("singleton 单实例,prototype 多实例")]),t._v(" "),a("li",[t._v("单实例模式下,加载 spring 配置文件时创建实例对象;")]),t._v(" "),a("li",[t._v("多实例模式下,是在调用 getBean 方法时创建多实例对象。")])]),t._v(" "),a("h2",{attrs:{id:"bean-生命周期"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#bean-生命周期"}},[t._v("#")]),t._v(" bean 生命周期")]),t._v(" "),a("p",[a("img",{attrs:{src:s(345),alt:""}})]),t._v(" "),a("h3",{attrs:{id:"xml-方式管理-bean"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#xml-方式管理-bean"}},[t._v("#")]),t._v(" xml 方式管理 bean")]),t._v(" "),a("ul",[a("li",[t._v("创建对象 "),a("code",[t._v("")])]),t._v(" "),a("li",[t._v("属性注入 "),a("code",[t._v("")]),t._v(" 或"),a("code",[t._v("p命名空间")])]),t._v(" "),a("li",[t._v("构造函数注入 "),a("code",[t._v("")])])]),t._v(" "),a("h3",{attrs:{id:"基于注解方式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#基于注解方式"}},[t._v("#")]),t._v(" 基于注解方式")]),t._v(" "),a("ol",[a("li",[t._v("@Component")]),t._v(" "),a("li",[t._v("@Sevice")]),t._v(" "),a("li",[t._v("@Controller")]),t._v(" "),a("li",[t._v("@Repository")])]),t._v(" "),a("ul",[a("li",[a("p",[t._v("@Autowire 默认基于类型注入")])]),t._v(" "),a("li",[a("p",[t._v("@Qualifier 根据属性名称注入")])]),t._v(" "),a("li",[a("p",[t._v("@Resource javax 扩展,推荐使用")])]),t._v(" "),a("li",[a("p",[t._v("@Configuration 配置类")])]),t._v(" "),a("li"),t._v(" "),a("li",[a("p",[t._v("根据属性名称自动注入")])]),t._v(" "),a("li",[a("p",[t._v("开启包扫描:"),a("code",[t._v('@ComponentScan(value = {"com.example", "com.fox"})')])])])]),t._v(" "),a("h2",{attrs:{id:"resource-装配顺序"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resource-装配顺序"}},[t._v("#")]),t._v(" @Resource 装配顺序")]),t._v(" "),a("ol",[a("li",[t._v("如果同时指定了 name 和 type,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常")]),t._v(" "),a("li",[t._v("如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常")]),t._v(" "),a("li",[t._v("如果指定了 type,则从上下文中找到类型匹配的唯一 bean 进行装配,找不到或者找到多个,都会抛出异常")]),t._v(" "),a("li",[t._v("如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;")])]),t._v(" "),a("h2",{attrs:{id:"为何不推荐使用-autowired"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#为何不推荐使用-autowired"}},[t._v("#")]),t._v(" 为何不推荐使用@Autowired?")]),t._v(" "),a("ol",[a("li",[t._v("容易引发 NPE")])]),t._v(" "),a("blockquote",[a("p",[t._v("通过 @Autowired 注入的 user 对象可能为空,而 JVM 虚拟机在编译时也无法检测出 user 为 null,只有在运行时调用 user 的方法时, 发现 user 为 null,出现空指针异常(NPE)")])]),t._v(" "),a("ol",{attrs:{start:"2"}},[a("li",[a("p",[t._v("违反单一职责原则")]),t._v(" "),a("blockquote",[a("p",[t._v("使用基于字段的注解,我们无需关注类之间的依赖关系,完全依赖于 spring IOC 容器的管理,但是使用”基于构造器注入的方式”, 我们需要手动在类代码中去编写需要依赖的类,当依赖的类越来越多,我们就能发现 code smell,这个时候就能显示的提醒我们,代码的质量是否有问题")])])]),t._v(" "),a("li",[a("p",[t._v("无法注入 final 或者 static 对象")])]),t._v(" "),a("li",[a("p",[t._v("byType 方式注入在可能存在多个相同类型 bean 情况下注入失败")])])]),t._v(" "),a("h3",{attrs:{id:"底层原理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#底层原理"}},[t._v("#")]),t._v(" 底层原理")]),t._v(" "),a("ul",[a("li",[t._v("xml 解析")]),t._v(" "),a("li",[t._v("反射")]),t._v(" "),a("li",[t._v("工厂模式:\n"),a("ul",[a("li",[t._v("BeanFactory:内置,一般不使用;获取对象时才会创建;")]),t._v(" "),a("li",[a("code",[t._v("ApplicationContext")]),t._v(":子接口,提供更多功能;加载配置文件即创建")])])])]),t._v(" "),a("h1",{attrs:{id:"aop"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#aop"}},[t._v("#")]),t._v(" AOP")]),t._v(" "),a("h2",{attrs:{id:"术语解释"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#术语解释"}},[t._v("#")]),t._v(" 术语解释")]),t._v(" "),a("ul",[a("li",[a("p",[t._v("通知(Advice)包含了需要用于多个应用对象的横切行为,完全听不懂,没关系,通俗一点说就是定义了“什么时候”和“做什么”。")])]),t._v(" "),a("li",[a("p",[t._v("连接点(Join Point)是程序执行过程中能够应用通知的所有点。")])]),t._v(" "),a("li",[a("p",[t._v("切点(Poincut)是定义了在“什么地方”进行切入,哪些连接点会得到通知。显然,切点一定是连接点。")])]),t._v(" "),a("li",[a("p",[t._v("切面(Aspect)是通知和切点的结合。通知和切点共同定义了切面的全部内容——是什么,何时,何地完成功能。")])]),t._v(" "),a("li",[a("p",[t._v("引入(Introduction)允许我们向现有的类中添加新方法或者属性。")])]),t._v(" "),a("li",[a("p",[t._v("织入(Weaving)是把切面应用到目标对象并创建新的代理对象的过程,分为编译期织入、类加载期织入和运行期织入。")])])]),t._v(" "),a("h1",{attrs:{id:"jdbctemplate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#jdbctemplate"}},[t._v("#")]),t._v(" JdbcTemplate")]),t._v(" "),a("blockquote",[a("p",[t._v("JdbcTemplate 是 Spring 对 JDBC 的封装,目的是使 JDBC 更加易于使用。JDBC 如同是毛坯房,而 JdbcTemplate 类似于精装房,使用 JdbcTemplate 会更舒坦一些。")])]),t._v(" "),a("h2",{attrs:{id:"操作分类"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#操作分类"}},[t._v("#")]),t._v(" 操作分类")]),t._v(" "),a("p",[t._v("(1)execute:可以执行所有 SQL 语句,一般用于执行 DDL 语句。")]),t._v(" "),a("p",[t._v("(2)update:用于执行 INSERT、UPDATE、DELETE 等 DML 语句。")]),t._v(" "),a("p",[t._v("(3)queryXXX:用于 DQL 数据查询语句。")]),t._v(" "),a("ul",[a("li",[t._v("RowMapper 可以将数据中的每一行数据封装成用户定义的类")]),t._v(" "),a("li")]),t._v(" "),a("h2",{attrs:{id:"事务管理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#事务管理"}},[t._v("#")]),t._v(" 事务管理")]),t._v(" "),a("ul",[a("li",[t._v("启动类:@EnableTransactionManagement")]),t._v(" "),a("li",[t._v("声明式事务:@Transactional 在方法的开头开始事务,在方法的结束提交事务")]),t._v(" "),a("li",[t._v("底层用到 AOP\n"),a("blockquote",[a("p",[t._v("通过 AOP 对目标方法进行拦截,在方法的开始出开始事务(或者加入事务),在方法结束时提交事务,当发生异常时回滚事务, 可以通过")])])])]),t._v(" "),a("blockquote",[a("p",[t._v("针对非运行时异常,如果要进行事务回滚的话,可以在 @Transactional 注解中使用 rollbackFor 属性来指定异常,比如 @Transactional(rollbackFor = Exception.class) ,这样就没有问题了,所以在实际项目中,一定要指定异常。")])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Transactional")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("User")]),t._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n jdbcTemplate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"insert into tb_user(username,password) values(?,?)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getUsername")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" user"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPassword")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" a "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n jdbcTemplate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"delete from tb_user where id=?"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("ul",[a("li",[t._v("@Transactional 一般用在方法上,对于查询方法不需要使用事务,如果用在类上,对查询方法的性能有影响")]),t._v(" "),a("li",[t._v("@Transactional 注解只能应用到 public 可见度的方法上。 如果你在 protected、private 或者\npackage-visible 的方法上使用 @Transactional 注解,它也不会报错,但是这个被注解的方法将不会展示已配置的事务设置")]),t._v(" "),a("li",[t._v("一个没有事务的 方法 A 调用有事务的 方法 B ,则 A 调用的 B 的事务不会生效。比如\nOrderService,它的一个方法 addShoppingCart,addShoppingCart 再调用 OrderService 本类的方法 doAddShoppingCart(不管 doAddShoppingCart 是否 public 还是 private),但 addShoppingCart 没有声明注解事务,而 B 有。则外部调用 addShoppingCart 之后,doAddShoppingCart 的事务是不会起作用的。")])]),t._v(" "),a("h1",{attrs:{id:"webflux"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#webflux"}},[t._v("#")]),t._v(" webflux")]),t._v(" "),a("blockquote",[a("p",[t._v("Spring WebFlux 是一个异步非阻塞式的 Web 框架,它能够充分利用多核 CPU 的硬件资源去处理大量的并发请求。\n特适合于 IO 密集型的服务中,比如微服务网关。")])]),t._v(" "),a("h2",{attrs:{id:"响应式编程"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#响应式编程"}},[t._v("#")]),t._v(" 响应式编程")]),t._v(" "),a("blockquote",[a("p",[t._v("指的是一种面向数据流并传播事件的异步编程范式(asynchronous programming paradigm).\n响应式编程最初是为了简化交互式用户界面的创建和实时系统动画的绘制而提出来的一种方法,但它本质上是一种通用的编程范式。\n简单来说,在 Reactive 方式中,上一个任务执行结果的反馈就是一个事件,这个事件的到来将会触发下一个任务的执行。")])]),t._v(" "),a("ul",[a("li",[t._v("实现 Reactive 模型最核心的是线程和消息管道")]),t._v(" "),a("li",[t._v("线程用于侦听事件,消息管道用于 Reactor 之间通信不同的消息。与他们相关的是事件管理器用于注册、注销事件,而消息分配器则会根据消息类型分发.")]),t._v(" "),a("li")])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/15.d81ec452.js b/assets/js/15.d81ec452.js new file mode 100644 index 0000000..1e3a8e4 --- /dev/null +++ b/assets/js/15.d81ec452.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{357:function(t,s,a){"use strict";a.r(s);var n=a(6),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:""}},[s("a",{staticClass:"header-anchor",attrs:{href:"#"}},[t._v("#")])]),t._v(" "),s("div",{staticClass:"language-bash line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-bash"}},[s("code",[s("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(".")]),t._v(" -type f -name "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"*.txt"')]),t._v(" -print -exec "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("rm")]),t._v(" -rf "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/16.eadc5e3c.js b/assets/js/16.eadc5e3c.js new file mode 100644 index 0000000..a7f2b31 --- /dev/null +++ b/assets/js/16.eadc5e3c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{358:function(s,a,t){"use strict";t.r(a);var n=t(6),e=Object(n.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h2",{attrs:{id:"配置静态ip"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#配置静态ip"}},[s._v("#")]),s._v(" 配置静态ip")]),s._v(" "),a("p",[s._v("vi /etc/network/interfaces")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# The loopback network interface")]),s._v("\nauto lo\niface lo inet loopback\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# The primary network interface")]),s._v("\nauto enp0s8\nallow-hotplug enp0s8\niface enp0s8 inet static\naddress "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".56.101\nnetmask "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("255.255")]),s._v(".255.0\ngateway "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".56.1\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br")])]),a("h2",{attrs:{id:"修改主机名"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#修改主机名"}},[s._v("#")]),s._v(" 修改主机名")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/hostname\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" /etc/hosts\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("reboot")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("h2",{attrs:{id:"解决debian-vi编辑器按键错乱问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#解决debian-vi编辑器按键错乱问题"}},[s._v("#")]),s._v(" 解决debian vi编辑器按键错乱问题")]),s._v(" "),a("p",[s._v("用nano打开/etc/vim/vimrc.tiny,输入以下两行:")]),s._v(" "),a("div",{staticClass:"language- line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[s._v("set nocompatible\nset backspace=2\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("h2",{attrs:{id:"解决debian不允许直接root登录问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#解决debian不允许直接root登录问题"}},[s._v("#")]),s._v(" 解决debian不允许直接root登录问题")]),s._v(" "),a("p",[s._v("修改/etc/ssh/sshd_config "),a("br"),s._v("\n#PermitRootLogin prohibit-password 修改为:\nPermitRootLogin yes\n重启sshd\n"),a("code",[s._v("service sshd restart")])]),s._v(" "),a("h2",{attrs:{id:"解决dbeaver窗口闪烁问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#解决dbeaver窗口闪烁问题"}},[s._v("#")]),s._v(" 解决dbeaver窗口闪烁问题")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" ibus-gtk ibus-gtk3 -y\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h2",{attrs:{id:"解决xfce无法输入部分中文"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#解决xfce无法输入部分中文"}},[s._v("#")]),s._v(" 解决xfce无法输入部分中文")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 安装")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("apt-get")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("install")]),s._v(" --install-recommends fcitx5 fcitx5-chinese-addons zentity im-config\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 输入")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# im-config进行配置,选择fcitx5作为默认输入法")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 重启vnc")]),s._v("\nsystemctl restart vncserver\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/17.416a908a.js b/assets/js/17.416a908a.js new file mode 100644 index 0000000..1fb86e9 --- /dev/null +++ b/assets/js/17.416a908a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{363:function(s,a,t){"use strict";t.r(a);var e=t(6),n=Object(e.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h2",{attrs:{id:"关闭防火墙"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#关闭防火墙"}},[s._v("#")]),s._v(" 关闭防火墙")]),s._v(" "),a("div",{staticClass:"language-shell line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-shell"}},[a("code",[s._v("systemctl stop firewalld.service\nsystemctl disable firewalld.service\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 查看状态")]),s._v("\nsystemctl status firewalld.service\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("h2",{attrs:{id:"解决xshell-ssh登录慢问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#解决xshell-ssh登录慢问题"}},[s._v("#")]),s._v(" 解决Xshell ssh登录慢问题")]),s._v(" "),a("p",[s._v("编辑文件:"),a("code",[s._v("vi /etc/ssh/sshd_config")]),s._v("\n找到GSSAPIAuthentication值改为no\n找到UseDNS,将注释放开,值改为yes\n保存文件。\n执行命令,重启sshd"),a("br"),s._v(" "),a("code",[s._v("systemctl restart sshd")])]),s._v(" "),a("h2",{attrs:{id:"关闭selinux"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#关闭selinux"}},[s._v("#")]),s._v(" 关闭selinux")]),s._v(" "),a("p",[s._v("vi /etc/selinux/config "),a("br"),s._v("\nSELINUX=disabled (设置安全选项关闭,重启生效)")]),s._v(" "),a("h2",{attrs:{id:"配置双机ssh免密访问"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#配置双机ssh免密访问"}},[s._v("#")]),s._v(" 配置双机SSH免密访问")]),s._v(" "),a("p",[s._v("1)修改/etc/ssh/sshd_config "),a("br"),s._v(" "),a("code",[s._v("vim /etc/ssh/sshd_config")]),s._v("\n将PermitRootLogin yes的注释去掉,然后保存,重启ssh:"),a("br"),s._v(" "),a("code",[s._v("systemctl restart sshd")])]),s._v(" "),a("p",[s._v("2)root用户分别执行")]),s._v(" "),a("ul",[a("li",[s._v("生成密钥 "),a("br"),s._v(" "),a("code",[s._v("ssh-keygen -t rsa")])]),s._v(" "),a("li",[s._v("查看密钥 "),a("br"),s._v(" "),a("code",[s._v("cat ~/.ssh/id_rsa.pub")])]),s._v(" "),a("li",[s._v("分别将密钥传输到对方机器")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.101\nssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.56.100\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("ul",[a("li",[s._v("分别添加/ect/hosts "),a("br"),s._v("\n192.168.56.101 wszwgk01 "),a("br"),s._v("\n192.168.56.102 wszwgk02")]),s._v(" "),a("li",[s._v("测试\n"),a("code",[s._v("ssh wszwgk01")])])]),s._v(" "),a("h2",{attrs:{id:"配置静态ip"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#配置静态ip"}},[s._v("#")]),s._v(" 配置静态IP")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("cd")]),s._v(" /etc/sysconfig/network-scripts/\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" ifcfg-enpOs3 ifcfg-enpOs8\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("vim")]),s._v(" ifcfg-enpOs8\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("ul",[a("li",[s._v("修改后:")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("TYPE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("Ethernet\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("BOOTPROTO")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("static\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DEFROUTE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("PEERDNS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("PEERROUTES")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV4_FAILURE_FATAL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("no\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6INIT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_AUTOCONF")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_DEFROUTE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_PEERDNS")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_PEERROUTES")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_FAILURE_FATAL")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("no\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPV6_ADDR_GEN_MODE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("stable-privacy\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NAME")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("enp0s8\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("UUID")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("d89f6702-9f65-4961-a8a6-1872ad61ac19\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DEVICE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("enp0s8\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ONBOOT")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("yes\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("IPADDR")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".56.101\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("NETMASK")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("255.255")]),s._v(".255.0\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("GATEWAY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("192.168")]),s._v(".56.1\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DNS1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("114.114")]),s._v(".114.114\n"),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DNS2")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("8.8")]),s._v(".8.8\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/18.35b53c91.js b/assets/js/18.35b53c91.js new file mode 100644 index 0000000..dc1a563 --- /dev/null +++ b/assets/js/18.35b53c91.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{361:function(s,a,t){"use strict";t.r(a);var e=t(6),n=Object(e.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"事务隔离级别"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#事务隔离级别"}},[s._v("#")]),s._v(" 事务隔离级别")]),s._v(" "),a("h1",{attrs:{id:"数据导出"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据导出"}},[s._v("#")]),s._v(" 数据导出")]),s._v(" "),a("ul",[a("li",[s._v("sql 方式")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 导出为sql文件")]),s._v("\nmysqldump -u username -p databasename "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v(" filename.sql\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("ul",[a("li",[s._v('文件方式\n配置文件中添加:\nsecure_file_priv="d:/tmp"')])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" * from dc_mp_fans into outfile "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/data/fans.txt'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 传输")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("zip")]),s._v(" fans.zip /data/fans.txt\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("scp")]),s._v(" fans.zip root@ip:/data/\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("h1",{attrs:{id:"数据导入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据导入"}},[s._v("#")]),s._v(" 数据导入")]),s._v(" "),a("ul",[a("li",[s._v("sql 方式")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("mysql -u username -p password db_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" file.sql\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("ul",[a("li",[s._v("文件方式")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("load data infile "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'/tmp/inhos_genoperation.sql'")]),s._v(" into table qingtongxiayiyuan.inhos_genoperation"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h1",{attrs:{id:"部署"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#部署"}},[s._v("#")]),s._v(" 部署")]),s._v(" "),a("h2",{attrs:{id:"docker-镜像启动"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#docker-镜像启动"}},[s._v("#")]),s._v(" docker 镜像启动")]),s._v(" "),a("h1",{attrs:{id:"最佳实践"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#最佳实践"}},[s._v("#")]),s._v(" 最佳实践")]),s._v(" "),a("h2",{attrs:{id:"利用-limit-实现分页"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#利用-limit-实现分页"}},[s._v("#")]),s._v(" 利用 limit 实现分页")]),s._v(" "),a("p",[s._v("第 1 页 : 0 , 1 , 2 , 3\n第 2 页 : 4 , 5 , 6 , 7\n第 3 页: 8 , 9 ,10 , 11")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" tb_user "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("limit")]),s._v(" pageNo"),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("pageSize"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" pageSize\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h1",{attrs:{id:"常见数据库设置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常见数据库设置"}},[s._v("#")]),s._v(" 常见数据库设置")]),s._v(" "),a("h2",{attrs:{id:"表名库名不区分大小写"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#表名库名不区分大小写"}},[s._v("#")]),s._v(" 表名库名不区分大小写")]),s._v(" "),a("p",[a("code",[s._v("注意")]),s._v(":需要在数据初始化之前配置好!!! "),a("br"),s._v("\nmysql server 有个参数叫做 lower_case_table_names,控制表名、字段名的大小写\n它可以有 3 个值:")]),s._v(" "),a("ul",[a("li",[s._v("0:大小写敏感")]),s._v(" "),a("li",[s._v("1:比较名字时 忽略大小写,但创建表时,大写字母也转为小写字母。")]),s._v(" "),a("li",[s._v("2:比较名字时 忽略大小写,创建表时,维持原样。")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("show variables like "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'lower_case_table_names'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("p",[s._v("在 my.cnf 配置文件中[mysqld]标签的作用区域,增加 lower_case_table_names=1 的配置,然后重启 MySQL 服务:")]),s._v(" "),a("h1",{attrs:{id:"常见问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常见问题"}},[s._v("#")]),s._v(" 常见问题")]),s._v(" "),a("h2",{attrs:{id:"unable-to-load-authentication-plugin-caching-sha2-password"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#unable-to-load-authentication-plugin-caching-sha2-password"}},[s._v("#")]),s._v(" unable to load authentication plugin caching_sha2_password")]),s._v(" "),a("blockquote",[a("p",[s._v("caching_sha2_password 是 8.0\nmysql_native_password 是 5.x")])]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ALTER")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("USER")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'root'")]),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("@'localhost'")]),s._v(" IDENTIFIED "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("WITH")]),s._v(" mysql_native_password "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("BY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'pass123'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("ALTER")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("USER")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'root'")]),a("span",{pre:!0,attrs:{class:"token variable"}},[s._v("@'%'")]),s._v(" IDENTIFIED "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("WITH")]),s._v(" mysql_native_password "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("BY")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'pass123'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nflush "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("privileges")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("h2",{attrs:{id:"字符串日期转换"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#字符串日期转换"}},[s._v("#")]),s._v(" 字符串日期转换")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("SELECT")]),s._v(" DATE_FORMAT"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("STR_TO_DATE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'201912161450000000'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'%Y%m%d%H%i%s'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'%Y-%m-%d %H:%i:%s'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/19.b06cf435.js b/assets/js/19.b06cf435.js new file mode 100644 index 0000000..98bfa09 --- /dev/null +++ b/assets/js/19.b06cf435.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{359:function(s,a,t){"use strict";t.r(a);var e=t(6),r=Object(e.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"数据导出"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据导出"}},[s._v("#")]),s._v(" 数据导出")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("expdp system/Nariadmin_123$ "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("owner")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("scyw,dwzy "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("directory")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("DATA_PUMP_DIR "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("dumpfile")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("scyw_dwzy_20190726.dmp "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("logfile")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("scyw_dwzy_20190726.log\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h1",{attrs:{id:"数据导入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据导入"}},[s._v("#")]),s._v(" 数据导入")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("impdp EVPBDMGIS/212130@orcl "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("schemas")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("EVPBDMGIS "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DIRECTORY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("DUMP_DIR "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("DUMPFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("123")]),s._v(".dump "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("LOGFILE")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("123")]),s._v(".log \n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h2",{attrs:{id:"字符串日期转换"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#字符串日期转换"}},[s._v("#")]),s._v(" 字符串日期转换")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v(" TO_CHAR"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("to_date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("substr"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'201912161450000000'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("14")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'yyyymmddhh24miss'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'yyyy-mm-dd hh24:mi:ss'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" dual"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])])])}),[],!1,null,null,null);a.default=r.exports}}]); \ No newline at end of file diff --git a/assets/js/2.a7754ad0.js b/assets/js/2.a7754ad0.js new file mode 100644 index 0000000..86e9548 --- /dev/null +++ b/assets/js/2.a7754ad0.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{242:function(t,e,s){},243:function(t,e,s){},244:function(t,e,s){},245:function(t,e,s){},246:function(t,e,s){},247:function(t,e,s){},248:function(t,e,s){},249:function(t,e,s){},252:function(t,e,s){},253:function(t,e,s){},254:function(t,e,s){},255:function(t,e,s){},256:function(t,e,s){},258:function(t,e,s){},259:function(t,e,s){},260:function(t,e,s){},261:function(t,e,s){},262:function(t,e,s){},263:function(t,e,s){},264:function(t,e,s){},265:function(t,e,s){},266:function(t,e,s){},267:function(t,e,s){},268:function(t,e,s){},269:function(t,e,s){},271:function(t,e,s){},272:function(t,e,s){},273:function(t,e,s){},274:function(t,e,s){},276:function(t,e,s){"use strict";s.r(e);var a=s(11),i={name:"SidebarGroup",props:["item","open","collapsable","depth"],components:{DropdownTransition:s(277).a},beforeCreate(){this.$options.components.SidebarLinks=s(276).default},methods:{isActive:a.f}},n=(s(315),s(6)),o=Object(n.a)(i,(function(){var t=this,e=t._self._c;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("router-link",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(e){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;function r(t,e,s,a){return t("router-link",{props:{to:e,activeClass:"",exactActiveClass:""},class:{active:a,"sidebar-link":!0}},s)}function l(t,e,s,i,n,o=1){return!e||o>n?null:t("ul",{class:"sidebar-sub-headers"},e.map(e=>{const c=Object(a.f)(i,s+"#"+e.slug);return t("li",{class:"sidebar-sub-header level"+e.level},[r(t,s+"#"+e.slug,e.title,c),l(t,e.children,s,i,n,o+1)])}))}var c={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:e,$site:s,$route:i,$themeConfig:n,$themeLocaleConfig:o},props:{item:c,sidebarDepth:h}}){const u=Object(a.f)(i,c.path),g="auto"===c.type?u||c.children.some(t=>Object(a.f)(i,c.basePath+"#"+t.slug)):u,d="external"===c.type?function(t,e,s){return t("a",{attrs:{href:e,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[s,t("OutboundLink")])}(t,c.path,c.title||c.path):r(t,c.path,c.title||c.path,g),p=[e.frontmatter.sidebarDepth,h,o.sidebarDepth,n.sidebarDepth,1].find(t=>void 0!==t),m=o.displayAllHeaders||n.displayAllHeaders;if("auto"===c.type)return[d,l(t,c.children,c.basePath,i,p)];if((g||m)&&c.headers&&!a.e.test(c.path)){return[d,l(t,Object(a.d)(c.headers),c.path,i,p)]}return d}};s(316);function h(t,e){return"group"===e.type&&e.children.some(e=>"group"===e.type?h(t,e):"page"===e.type&&Object(a.f)(t,e.path))}var u={name:"SidebarLinks",components:{SidebarGroup:o,SidebarLink:Object(n.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},created(){this.refreshIndex()},watch:{$route(){this.refreshIndex()}},methods:{refreshIndex(){const t=function(t,e){for(let s=0;s-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(a.f)(this.$route,t.regularPath)}}},g=Object(n.a)(u,(function(){var t=this,e=t._self._c;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(s,a){return e("li",{key:a},["group"===s.type?e("SidebarGroup",{attrs:{item:s,open:a===t.openGroupIndex,collapsable:s.collapsable||s.collapsible,depth:t.depth},on:{toggle:function(e){return t.toggleGroup(a)}}}):e("SidebarLink",{attrs:{sidebarDepth:t.sidebarDepth,item:s}})],1)})),0):t._e()}),[],!1,null,null,null);e.default=g.exports},277:function(t,e,s){"use strict";var a={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(s(301),s(6)),n=Object(i.a)(a,(function(){return(0,this._self._c)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);e.a=n.exports},281:function(t,e,s){"use strict";s(242)},282:function(t,e,s){"use strict";s(243)},283:function(t,e,s){"use strict";s(244)},284:function(t,e,s){"use strict";s(245)},285:function(t,e,s){"use strict";s(246)},286:function(t,e,s){"use strict";s(247)},287:function(t,e,s){"use strict";s(248)},288:function(t,e,s){"use strict";s(249)},300:function(t,e,s){"use strict";s(252)},301:function(t,e,s){"use strict";s(253)},302:function(t,e,s){"use strict";s(254)},303:function(t,e,s){"use strict";s(255)},304:function(t,e,s){"use strict";s(256)},305:function(t,e,s){"use strict";s(258)},307:function(t,e,s){"use strict";s(259)},308:function(t,e,s){"use strict";s(260)},309:function(t,e,s){"use strict";s(261)},310:function(t,e,s){"use strict";s(262)},311:function(t,e,s){"use strict";s(263)},312:function(t,e,s){"use strict";s(264)},313:function(t,e,s){"use strict";s(265)},314:function(t,e,s){"use strict";s(266)},315:function(t,e,s){"use strict";s(267)},316:function(t,e,s){"use strict";s(268)},317:function(t,e,s){"use strict";s(269)},318:function(t,e,s){"use strict";s(271)},319:function(t,e,s){"use strict";s(272)},320:function(t,e,s){"use strict";s(273)},321:function(t,e,s){"use strict";s(274)},354:function(t,e,s){"use strict";s.r(e);var a=s(11),i={props:{item:{required:!0}},computed:{link(){return Object(a.c)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link}},methods:{isExternal:a.g,isMailto:a.h,isTel:a.i,focusoutAction(){this.$emit("focusout")}}},n=s(6),o=Object(n.a)(i,(function(){var t=this,e=t._self._c;return t.isExternal(t.link)?e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.isMailto(t.link)||t.isTel(t.link)?null:"_blank",rel:t.isMailto(t.link)||t.isTel(t.link)?null:"noopener noreferrer"},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),e("OutboundLink")],1):e("router-link",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(e){return t.focusoutAction.apply(null,arguments)}}},[t._v(t._s(t.item.text))])}),[],!1,null,null,null).exports,r=s(279),l=s(280),c=(s(281),Object(n.a)({},(function(){var t=this._self._c;return t("div",{staticClass:"main-wrapper"},[t("div",{staticClass:"main-left"},[this._t("mainLeft")],2),this._v(" "),t("div",{staticClass:"main-right"},[this._t("mainRight")],2)])}),[],!1,null,null,null).exports),h={props:{category:{type:String,default:""},tag:{type:String,default:""},currentPage:{type:Number,default:1},perPage:{type:Number,default:10}},data:()=>({sortPosts:[],postListOffsetTop:0}),created(){this.setPosts()},mounted(){},watch:{currentPage(){this.$route.query.p!=this.currentPage&&this.$router.push({query:{...this.$route.query,p:this.currentPage}}),this.setPosts()},category(){this.setPosts()},tag(){this.setPosts()}},methods:{setPosts(){const t=this.currentPage,e=this.perPage;let s=[];s=this.category?this.$groupPosts.categories[this.category]:this.tag?this.$groupPosts.tags[this.tag]:this.$sortPosts,this.sortPosts=s.slice((t-1)*e,t*e)}}},u=(s(282),Object(n.a)(h,(function(){var t=this,e=t._self._c;return e("div",{ref:"postList",staticClass:"post-list"},[e("transition-group",{attrs:{tag:"div",name:"post"}},t._l(t.sortPosts,(function(s){return e("div",{key:s.key,staticClass:"post card-box",class:s.frontmatter.sticky&&"iconfont icon-zhiding"},[e("div",{staticClass:"title-wrapper"},[e("h2",[e("router-link",{attrs:{to:s.path}},[t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v(t._s(s.frontmatter.titleTag))]):t._e()])],1),t._v(" "),e("div",{staticClass:"article-info"},[s.author&&s.author.href?e("a",{staticClass:"iconfont icon-touxiang",attrs:{title:"作者",target:"_blank",href:s.author.href}},[t._v(t._s(s.author.name?s.author.name:s.author))]):s.author?e("span",{staticClass:"iconfont icon-touxiang",attrs:{title:"作者"}},[t._v(t._s(s.author.name?s.author.name:s.author))]):t._e(),t._v(" "),s.frontmatter.date?e("span",{staticClass:"iconfont icon-riqi",attrs:{title:"创建时间"}},[t._v(t._s(s.frontmatter.date.split(" ")[0]))]):t._e(),t._v(" "),!1!==t.$themeConfig.category&&s.frontmatter.categories?e("span",{staticClass:"iconfont icon-wenjian",attrs:{title:"分类"}},t._l(s.frontmatter.categories,(function(s,a){return e("router-link",{key:a,attrs:{to:"/categories/?category="+encodeURIComponent(s)}},[t._v(t._s(s))])})),1):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&s.frontmatter.tags&&s.frontmatter.tags[0]?e("span",{staticClass:"iconfont icon-biaoqian tags",attrs:{title:"标签"}},t._l(s.frontmatter.tags,(function(s,a){return e("router-link",{key:a,attrs:{to:"/tags/?tag="+encodeURIComponent(s)}},[t._v(t._s(s))])})),1):t._e()])]),t._v(" "),s.excerpt?e("div",{staticClass:"excerpt-wrapper"},[e("div",{staticClass:"excerpt",domProps:{innerHTML:t._s(s.excerpt)}}),t._v(" "),e("router-link",{staticClass:"readmore iconfont icon-jiantou-you",attrs:{to:s.path}},[t._v("阅读全文")])],1):t._e()])})),0)],1)}),[],!1,null,null,null).exports),g={name:"UpdateArticle",props:{length:{type:[String,Number],default:3},moreArticle:String},data:()=>({posts:[],currentPath:""}),created(){this.posts=this.$site.pages,this.currentPath=this.$page.path},computed:{topPublishPosts(){return this.$sortPostsByDate?this.$sortPostsByDate.filter(t=>{const{path:e}=t;return e!==this.currentPath}).slice(0,this.length):[]},isShowArticle(){const{frontmatter:t}=this.$page;return!(!1!==t.article)}},methods:{getNum:t=>t<9?"0"+(t+1):t+1,getDate:t=>t.frontmatter.date?t.frontmatter.date.split(" ")[0].slice(5,10):""},watch:{$route(){this.currentPath=this.$page.path}}},d=(s(283),Object(n.a)(g,(function(){var t=this,e=t._self._c;return e("div",{class:["article-list",{"no-article-list":t.isShowArticle}]},[e("div",{staticClass:"article-title"},[e("router-link",{staticClass:"iconfont icon-bi",attrs:{to:t.moreArticle||"/archives/"}},[t._v("最近更新")])],1),t._v(" "),e("div",{staticClass:"article-wrapper"},[t._l(t.topPublishPosts,(function(s,a){return e("dl",{key:a},[e("dd",[t._v(t._s(t.getNum(a)))]),t._v(" "),e("dt",[e("router-link",{attrs:{to:s.path}},[e("div",[t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v("\n "+t._s(s.frontmatter.titleTag)+"\n ")]):t._e()])]),t._v(" "),e("span",{staticClass:"date"},[t._v(t._s(t.getDate(s)))])],1)])})),t._v(" "),e("dl",[e("dd"),t._v(" "),e("dt",[e("router-link",{staticClass:"more",attrs:{to:t.moreArticle||"/archives/"}},[t._v("更多文章>")])],1)])],2)])}),[],!1,null,null,null).exports),p={props:{total:{type:Number,default:10},perPage:{type:Number,default:10},currentPage:{type:Number,default:1}},computed:{pages(){return Math.ceil(this.total/this.perPage)}},methods:{threeNum(){let t=3;const e=this.currentPage,s=this.pages;return t=e<3?3:e>s-3?s-2:e,t},goPrex(){let t=this.currentPage;t>1&&this.handleEmit(--t)},goNext(){let t=this.currentPage;t3,expression:"currentPage > 3"}],staticClass:"ellipsis ell-two",attrs:{title:"上两页"},on:{click:function(e){return t.goIndex(t.currentPage-2)}}}),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage<=3,expression:"currentPage <= 3"}],staticClass:"card-box",class:{active:2===t.currentPage},on:{click:function(e){return t.goIndex(2)}}},[t._v("2")]),t._v(" "),e("span",{staticClass:"card-box",class:{active:t.currentPage>=3&&t.currentPage<=t.pages-2},on:{click:function(e){t.goIndex(t.threeNum())}}},[t._v(t._s(t.threeNum()))]),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:t.currentPage=t.pages-2,expression:"currentPage >= pages - 2"}],staticClass:"card-box",class:{active:t.currentPage===t.pages-1},on:{click:function(e){return t.goIndex(t.pages-1)}}},[t._v(t._s(t.pages-1))]),t._v(" "),e("span",{staticClass:"card-box",class:{active:t.currentPage===t.pages},on:{click:function(e){return t.goIndex(t.pages)}}},[t._v(t._s(t.pages))])]),t._v(" "),e("span",{staticClass:"card-box next iconfont icon-jiantou-you",class:{disabled:t.currentPage===t.pages},on:{click:function(e){return t.goNext()}}},[e("p",[t._v("下一页")])])])}),[],!1,null,null,null).exports),v={computed:{blogger(){return this.$themeConfig.blogger},social(){return this.$themeConfig.social}}},f=(s(285),Object(n.a)(v,(function(){var t=this,e=t._self._c;return e("aside",{staticClass:"blogger-wrapper card-box"},[e("div",{staticClass:"avatar"},[e("img",{attrs:{src:t.blogger.avatar,alt:"头像",title:"我好看吗"}})]),t._v(" "),t.social&&t.social.icons&&t.social.icons.length?e("div",{staticClass:"icons"},t._l(t.social.icons,(function(s,a){return e("a",{key:a,class:["iconfont",s.iconClass],style:{width:100/t.social.icons.length+"%"},attrs:{href:s.link,title:s.title,target:"_blank"}})})),0):t._e(),t._v(" "),e("div",{staticClass:"blogger"},[e("span",{staticClass:"name"},[t._v(t._s(t.blogger.name))]),t._v(" "),e("span",{staticClass:"slogan"},[t._v(t._s(t.blogger.slogan))])])])}),[],!1,null,null,null).exports),_={props:{category:{type:String,default:""},categoriesData:{type:Array,default:[]},length:{type:[String,Number],default:"all"}},computed:{categories(){return"all"===this.length?this.categoriesData:this.categoriesData.slice(0,this.length)}}},b=(s(286),Object(n.a)(_,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"categories-wrapper card-box"},[e("router-link",{staticClass:"title iconfont icon-wenjianjia",attrs:{to:"/categories/",title:"全部分类"}},[t._v(t._s("all"===t.length?"全部分类":"文章分类"))]),t._v(" "),e("div",{staticClass:"categories"},[t._l(t.categories,(function(s,a){return e("router-link",{key:a,class:{active:s.key===t.category},attrs:{to:"/categories/?category="+encodeURIComponent(s.key)}},[t._v("\n "+t._s(s.key)+"\n "),e("span",[t._v(t._s(s.length))])])})),t._v(" "),"all"!==t.length&&t.length({tagBgColor:["#11a8cd","#F8B26A","#67CC86","#E15B64","#F47E60","#849B87"],tagStyleList:[]}),created(){for(let t=0,e=this.tags.length;tt.length?e("router-link",{attrs:{to:"/tags/"}},[t._v("更多...")]):t._e()],2)],1)}),[],!1,null,null,null).exports);r.a.use(l.a);var y={data:()=>({isMQMobile:!1,slide:null,currentPageIndex:0,playTimer:0,mark:0,total:0,perPage:10,currentPage:1}),computed:{homeData(){return{...this.$page.frontmatter}},hasFeatures(){return!(!this.homeData.features||!this.homeData.features.length)},homeSidebarB(){const{htmlModules:t}=this.$themeConfig;return t?t.homeSidebarB:""},showBanner(){return!(this.$route.query.p&&1!=this.$route.query.p&&(!this.homeData.postList||"detailed"===this.homeData.postList))},bannerBgStyle(){let t=this.homeData.bannerBg;return t&&"auto"!==t?"none"===t?this.$themeConfig.bodyBgImg?"":"background: var(--mainBg);color: var(--textColor)":t.indexOf("background:")>-1?t:t.indexOf(".")>-1?`background: url(${this.$withBase(t)}) center center / cover no-repeat`:void 0:this.$themeConfig.bodyBgImg?"":"background: rgb(40,40,45) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVFhH7c6xCQAgDAVRR9A6E4hLu4uLiWJ7tSnuQcIvr2TRYsw3/zOGGEOMIcYQY4gxxBhiDDGGGEOMIcYQY4gxxBhiDLkx52W4Gn1tuslCtHJvL54AAAAASUVORK5CYII=)"},actionLink(){return{link:this.homeData.actionLink,text:this.homeData.actionText}}},components:{NavLink:o,MainLayout:c,PostList:u,UpdateArticle:d,BloggerBar:f,CategoriesBar:b,TagsBar:w,Pagination:m},created(){this.total=this.$sortPosts.length},beforeMount(){this.isMQMobile=window.innerWidth<720},mounted(){this.$route.query.p&&(this.currentPage=Number(this.$route.query.p)),!this.hasFeatures||!this.isMQMobile||this.$route.query.p&&1!=this.$route.query.p||this.init(),this.hasFeatures&&window.addEventListener("resize",()=>{this.isMQMobile=window.innerWidth<720,!this.isMQMobile||this.slide||this.mark||(this.mark++,setTimeout(()=>{this.init()},60))})},beforeDestroy(){clearTimeout(this.playTimer),this.slide&&this.slide.destroy()},watch:{"$route.query.p"(){this.$route.query.p?this.currentPage=Number(this.$route.query.p):this.currentPage=1,this.hasFeatures&&1===this.currentPage&&this.isMQMobile&&setTimeout(()=>{this.slide&&this.slide.destroy(),this.init()},0)}},methods:{init(){clearTimeout(this.playTimer),this.slide=new r.a(this.$refs.slide,{scrollX:!0,scrollY:!1,slide:{loop:!0,threshold:100},useTransition:!0,momentum:!1,bounce:!1,stopPropagation:!1,probeType:2,preventDefault:!1}),this.slide.on("beforeScrollStart",()=>{clearTimeout(this.playTimer)}),this.slide.on("scrollEnd",()=>{this.autoGoNext()}),this.slide.on("slideWillChange",t=>{this.currentPageIndex=t.pageX}),this.autoGoNext()},autoGoNext(){clearTimeout(this.playTimer),this.playTimer=setTimeout(()=>{this.slide.next()},4e3)},handlePagination(t){this.currentPage=t},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop}},k=(s(288),Object(n.a)(y,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"home-wrapper"},[e("div",{staticClass:"banner",class:{"hide-banner":!t.showBanner},style:t.bannerBgStyle},[e("div",{staticClass:"banner-conent",style:!t.homeData.features&&!t.homeData.heroImage&&"padding-top: 7rem"},[e("header",{staticClass:"hero"},[t.homeData.heroImage?e("img",{attrs:{src:t.$withBase(t.homeData.heroImage),alt:t.homeData.heroAlt}}):t._e(),t._v(" "),t.homeData.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.homeData.heroText)+"\n ")]):t._e(),t._v(" "),t.homeData.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.homeData.tagline)+"\n ")]):t._e(),t._v(" "),t.homeData.actionText&&t.homeData.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.hasFeatures&&!t.isMQMobile?e("div",{staticClass:"features"},t._l(t.homeData.features,(function(s,a){return e("div",{key:a,staticClass:"feature"},[s.link?e("router-link",{attrs:{to:s.link}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])]):e("a",{attrs:{href:"javascript:;"}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])])],1)})),0):t._e()]),t._v(" "),t.hasFeatures?e("div",{directives:[{name:"show",rawName:"v-show",value:t.isMQMobile,expression:"isMQMobile"}],staticClass:"slide-banner"},[e("div",{staticClass:"banner-wrapper"},[e("div",{ref:"slide",staticClass:"slide-banner-scroll"},[e("div",{staticClass:"slide-banner-wrapper"},t._l(t.homeData.features,(function(s,a){return e("div",{key:a,staticClass:"slide-item"},[s.link?e("router-link",{attrs:{to:s.link}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])]):e("a",{attrs:{href:"javascript:;"}},[s.imgUrl?e("img",{staticClass:"feature-img",attrs:{src:t.$withBase(s.imgUrl),alt:s.title}}):t._e(),t._v(" "),e("h2",[t._v(t._s(s.title))]),t._v(" "),e("p",[t._v(t._s(s.details))])])],1)})),0)]),t._v(" "),e("div",{staticClass:"docs-wrapper"},t._l(t.homeData.features.length,(function(s,a){return e("span",{key:a,staticClass:"doc",class:{active:t.currentPageIndex===a}})})),0)])]):t._e()]),t._v(" "),e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return["simple"===t.homeData.postList?e("UpdateArticle",{staticClass:"card-box",attrs:{length:t.homeData.simplePostListLength||10,moreArticle:t.$themeConfig.updateBar&&t.$themeConfig.updateBar.moreArticle}}):t.homeData.postList&&"detailed"!==t.homeData.postList?t._e():[e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})],t._v(" "),e("Content",{staticClass:"theme-vdoing-content custom card-box"})]},proxy:!0},t.homeData.hideRightBar?null:{key:"mainRight",fn:function(){return[t.$themeConfig.blogger?e("BloggerBar"):t._e(),t._v(" "),!1!==t.$themeConfig.category&&t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,length:10}}):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,length:30}}):t._e(),t._v(" "),t.homeSidebarB?e("div",{staticClass:"custom-html-box card-box",domProps:{innerHTML:t._s(t.homeSidebarB)}}):t._e()]},proxy:!0}],null,!0)})],1)}),[],!1,null,"d146d2d2",null).exports),x=s(353),P=(s(300),Object(n.a)({},(function(){var t=this,e=t._self._c;return e("div",{staticClass:"sidebar-button",attrs:{title:"目录"},on:{click:function(e){return t.$emit("toggle-sidebar")}}},[e("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[e("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports),T=s(277),A=s(100),L=s.n(A),$={components:{NavLink:o,DropdownTransition:T.a},data:()=>({open:!1,isMQMobile:!1}),props:{item:{required:!0}},computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},beforeMount(){this.isMQMobile=window.innerWidth<720,window.addEventListener("resize",()=>{this.isMQMobile=window.innerWidth<720})},methods:{toggle(){this.isMQMobile&&(this.open=!this.open)},isLastItemOfArray:(t,e)=>L()(e)===t},watch:{$route(){this.open=!1}}},S=(s(302),{components:{NavLink:o,DropdownLink:Object(n.a)($,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.toggle}},[t.item.link?e("router-link",{staticClass:"link-title",attrs:{to:t.item.link}},[t._v(t._s(t.item.text))]):t._e(),t._v(" "),e("span",{directives:[{name:"show",rawName:"v-show",value:!t.item.link,expression:"!item.link"}],staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})],1),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(s,a){return e("li",{key:s.link||a,staticClass:"dropdown-item"},["links"===s.type?e("h4",[t._v(t._s(s.text))]):t._e(),t._v(" "),"links"===s.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(s.items,(function(a){return e("li",{key:a.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:a},on:{focusout:function(e){t.isLastItemOfArray(a,s.items)&&t.isLastItemOfArray(s,t.item.items)&&t.toggle()}}})],1)})),0):e("NavLink",{attrs:{item:s},on:{focusout:function(e){t.isLastItemOfArray(s,t.item.items)&&t.toggle()}}})],1)})),0)])],1)}),[],!1,null,null,null).exports},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const e=this.$page.path,s=this.$router.options.routes,a=this.$site.themeConfig.locales||{},i={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(i=>{const n=t[i],o=a[i]&&a[i].label||n.lang;let r;return n.lang===this.$lang?r=e:(r=e.replace(this.$localeConfig.path,i),s.some(t=>t.path===r)||(r=i)),{text:o,link:r}})};return[...this.userNav,i]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(a.k)(t),{items:(t.items||[]).map(a.k)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],e=["GitHub","GitLab","Bitbucket"];for(let s=0;s({linksWrapMaxWidth:null}),mounted(){const t=parseInt(M(this.$el,"paddingLeft"))+parseInt(M(this.$el,"paddingRight")),e=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};e(),window.addEventListener("resize",e,!1)},computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}}},E=(s(304),Object(n.a)(O,(function(){var t=this,e=t._self._c;return e("header",{staticClass:"navbar blur"},[e("SidebarButton",{on:{"toggle-sidebar":function(e){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("router-link",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null).exports),N=s(257),I=s.n(N),D={name:"PageEdit",computed:{tags(){return this.$frontmatter.tags},lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=I()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:e,docsDir:s="",docsBranch:a="master",docsRepo:i=e}=this.$site.themeConfig;return t&&i&&this.$page.relativePath?this.createEditLink(e,i,s,a,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,e,s,i,n){if(/bitbucket.org/.test(e)){return e.replace(a.b,"")+"/src"+`/${i}/`+(s?s.replace(a.b,"")+"/":"")+n+`?mode=edit&spa=0&at=${i}&fileviewer=file-view-default`}if(/gitlab.com/.test(e)){return e.replace(a.b,"")+"/-/edit"+`/${i}/`+(s?s.replace(a.b,"")+"/":"")+n}const o=/gitee.com/;if(o.test(e)){return e.replace(o,"gitee.com/-/ide/project")+"/edit"+`/${i}/-/`+(s?s.replace(a.b,"")+"/":"")+n}return(a.j.test(e)?e:"https://github.com/"+e).replace(a.b,"")+"/edit"+`/${i}/`+(s?s.replace(a.b,"")+"/":"")+n}}},U=(s(305),Object(n.a)(D,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),!1!==t.$themeConfig.tag&&t.tags&&t.tags[0]?e("div",{staticClass:"tags"},t._l(t.tags,(function(s,a){return e("router-link",{key:a,attrs:{to:"/tags/?tag="+encodeURIComponent(s),title:"标签"}},[t._v("#"+t._s(s))])})),1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null).exports),j=s(306),H=s.n(j),R={name:"PageNav",props:["sidebarItems"],computed:{prev(){return G(q.PREV,this)},next(){return G(q.NEXT,this)}},methods:{showTooltip(t){const e=document.body.clientWidth,s=t.clientX,a=t.target.querySelector(".tooltip");if(!a)return;const i=a.style;st,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,e){return Y(t,e,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function G(t,{$themeConfig:e,$page:s,$route:i,$site:n,sidebarItems:o}){const{resolveLink:r,getThemeLinkConfig:l,getPageLinkConfig:c}=t,h=l(e),u=c(s),g=I()(u)?h:u;return!1===g?void 0:H()(g)?Object(a.l)(n.pages,g,i.path):r(s,o)}function Y(t,e,s){const a=[];!function t(e,s){for(let a=0,i=e.length;a({date:"",classify1:"",classifyList:[],cataloguePermalink:"",author:null,categories:[]}),created(){this.getPageInfo()},watch:{"$route.path"(){this.classifyList=[],this.getPageInfo()}},methods:{getPageInfo(){const t=this.$page,{relativePath:e}=t,{sidebar:s}=this.$themeConfig,a=e.split("/");a.forEach((t,e)=>{const s=t.split(".");if(e!==a.length-1)if(1===s)this.classifyList.push(s[0]);else{const e=t.indexOf(".");this.classifyList.push(t.substring(e+1)||"")}}),this.classify1=this.classifyList[0];const i=s&&s.catalogue?s.catalogue[this.classify1]:"",n=this.$frontmatter.author||this.$themeConfig.author;let o=(t.frontmatter.date||"").split(" ")[0];const{categories:r}=this.$frontmatter;this.date=o,this.cataloguePermalink=i,this.author=n,this.categories=r},getLink(t){const{cataloguePermalink:e}=this;return t===e?e:`${e}${"/"===e.charAt(e.length-1)?"":"/"}#${t}`}}},J=(s(308),Object(n.a)(W,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"articleInfo-wrap"},[e("div",{staticClass:"articleInfo"},[t.classify1&&"_posts"!==t.classify1?e("ul",{staticClass:"breadcrumbs"},[e("li",[e("router-link",{staticClass:"iconfont icon-home",attrs:{to:"/",title:"首页"}})],1),t._v(" "),t._l(t.classifyList,(function(s){return e("li",{key:s},[t.cataloguePermalink?e("router-link",{attrs:{to:t.getLink(s)}},[t._v(t._s(s))]):!1!==t.$themeConfig.category?e("router-link",{attrs:{to:"/categories/?category="+encodeURIComponent(s),title:"分类"}},[t._v(t._s(s))]):e("span",[t._v(t._s(s))])],1)}))],2):t._e(),t._v(" "),e("div",{staticClass:"info"},[t.author?e("div",{staticClass:"author iconfont icon-touxiang",attrs:{title:"作者"}},[t.author.href||t.author.link&&"string"==typeof t.author.link?e("a",{staticClass:"beLink",attrs:{href:t.author.href||t.author.link,target:"_blank",title:"作者"}},[t._v(t._s(t.author.name))]):e("a",{attrs:{href:"javascript:;"}},[t._v(t._s(t.author.name||t.author))])]):t._e(),t._v(" "),t.date?e("div",{staticClass:"date iconfont icon-riqi",attrs:{title:"创建时间"}},[e("a",{attrs:{href:"javascript:;"}},[t._v(t._s(t.date))])]):t._e(),t._v(" "),!1===t.$themeConfig.category||t.classify1&&"_posts"!==t.classify1||!t.categories?t._e():e("div",{staticClass:"date iconfont icon-wenjian",attrs:{title:"分类"}},t._l(t.categories,(function(s,a){return e("router-link",{key:a,attrs:{to:"/categories/?category="+encodeURIComponent(s)}},[t._v(t._s(s+" "))])})),1)])])])}),[],!1,null,"06970110",null).exports),z={data:()=>({pageData:null,isStructuring:!0,appointDir:{}}),created(){this.getPageData();const t=this.$themeConfig.sidebar;t&&"auto"!==t||(this.isStructuring=!1,console.error("目录页数据依赖于结构化的侧边栏数据,请在主题设置中将侧边栏字段设置为'structuring',否则无法获取目录数据。"))},methods:{getPageData(){const t=this.$frontmatter.pageComponent;t&&t.data?this.pageData={...t.data,title:this.$frontmatter.title}:console.error("请在front matter中设置pageComponent和pageComponent.data数据")},getCatalogueList(){const{sidebar:t}=this.$site.themeConfig,{data:e}=this.$frontmatter.pageComponent;let s=(e.path||e.key).split("/"),a=t[`/${s[0]}/`];return s.length>1&&(s.shift(),a=this.appointDirDeal(0,s,a)),a||console.error("未获取到目录数据,请查看front matter中设置的path是否正确。"),a},type:t=>Object.prototype.toString.call(t).match(/\[object (.*?)\]/)[1].toLowerCase(),appointDirDeal(t,e,s){let a=e[t];void 0!==a&&-1!==a.indexOf(".")&&(a=a.substring(a.indexOf(".")+1));for(let i=0;i({headers:[],hashText:""}),mounted(){this.getHeadersData(),this.getHashText()},watch:{$route(){this.headers=this.$page.headers,this.getHashText()}},methods:{getHeadersData(){this.headers=this.$page.headers},getHashText(){this.hashText=decodeURIComponent(window.location.hash.slice(1))}}},K=(s(310),{data:()=>({badges:["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABGpJREFUSA3tVVtoXFUU3fvOI53UlmCaKIFmwEhsE7QK0ipFEdHEKpXaZGrp15SINsXUWvBDpBgQRKi0+KKoFeJHfZA+ED9KKoIU2gYD9UejTW4rVIzm0VSTziPzuNu1z507dibTTjL4U/DAzLn3nL3X2o91ziX6f9wMFdh6Jvbm9nNSV0msViVO6tN1Rm7NMu2OpeJ9lWBUTDxrJbYTS0hInuwciu9eLHlFxCLCZEk3MegsJmZ5K/JD6t7FkFdEvGUo1g7qJoG3MHImqRIn8/nzY1K9UPKKiJmtnUqHVE3Gbuay6vJE/N2FEmuxFjW2nUuE0yQXRRxLiTUAzs36zhZvOXJPdX850EVnnLZkB8prodQoM5JGj7Xk2mvC7JB8tG04Ef5PiXtG0UtxupRQSfTnBoCy554x18yJHI6I+G5Eru4LHmPJZEQsrvPUbMiA8G/WgMK7w7I+ez7++o2ANfbrjvaOl1tFMs+htG3IrZH9/hDX1Pr8Tc0UvH8tcX29KzAgIGcEkINyW5BF9x891hw6VYqgJHEk0huccS7vh3C6gTiODL+26huuBtbct8eZnqLML8PkxGYpuPZBqtqwkSjgc4mB5gbgig5i+y0UDK35LMxXisn9xQtK+nd26gTIHsHe/oblK/b29fUmN/8Y+9jAQrnBp56m1LcDlDp9irKTExSKduXJVWSqdBMA08pEJnEIOB3FPPMybu/oeV8zFeYN3xx576Q6RH+VmplE4ncQV5v+5rzSoyOU7PuEAg8g803PwBJ0CExno/jcMbN8tONYeOmHiuUNryvm3fRUy4tMPVLdAGkUhNWuggGrJcXPv+ouCjz0MKUHz1J2/E8IC9nqTabcxgaBYM0hPhD5Y65FsbxRQKxCQrDjDctW7PUM3HuZunFyifSAqEfuzCp48Il24luWUWZoyJCaPR82jE0+kFA643wRFVni4RYSq3ohJO2pZ7B5dO4xkDWbEpossJPLSrPjYID8rS2UHTlvyNxqIGsg674XJJ7vnh5L7PNwC4hh2sjCI96mzszOTpxLF0T7l88Yz7lAuK6OnL8gXLOnTvpzSb22YG8W7us3jSebFHeeqnXRG1vt+MoUM84LQIBmMsCTAcOauTh0T0l0neQK7m2bLMt2mGxU3HYssS0J2cdv5wljlPsrIuZLAG/2DOZIXgCYT8uMGZN+e2kSirfxZOPCsC0f24nTZzspnVn9VePS1Z5vubmAGGXG8ZFno9Hel0yfA5ZPhF7Dh972BQJ2qCpgH67lmWtBYbvk6sz02wjky2vXyz0XErP/kFB619js1BtwfOV4OPRqOQBjy3Qbk18vigUPPSD5ceHnwck7W9bhAqZdd7SuG7w4/P2F/GaJh8c7e9qgow+Q7cGBo+98WsLkuktFqiZabtXuQTu/Y5ETbR0v7tNSFnvrmu6pjdoan2KjMu8q/Hmj1EfCO2ZGfEIbIXKUlw8qaX9/b2oeSJmFksSeT/Fn0V3nSypChh4Gjh74ybO9aeZ/AN2dwciu2/MhAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABH1JREFUSA3tVl1oHFUUPmdmd2ltklqbpJDiNnXFmgbFktho7YMPNiJSSZM0+CAYSkUELVhM6YuwIPpgoOKDqOBDC0XE2CQoNtQXBUFTTcCi+Wlh1V2TQExsUzcltd3M9Tt3ZjZzZ2fT+OJTL8yeM+eee757fmeJbq//KQL8X3DUSFOcfr7cRsRtxNQMWueeVzOkaITIGqQHNg5y8+jNW9ldM7A6nTpAjuolUikAwq7CE3WcM2RRDz+XGVgN3FptU/aUSlvq9Pa3iZ1+sgAqJyyAFqkipd9dqiwHF3P65YycLWc/6sqGrvoEoIp6DOFaX5h6+dnfjkWprwqsPk0dUGq5vySwDImC10KxFHgGL1SWoc92O3eVht09qdXNH11I2SsTsJYqMWzihqGMi+A+Garf3BAuuLI5oGlULyNfyB/HYNujwktOfRrMr5t77NmevqaUopx0grnKAyvVpmwUDB4x6FPXuGvYLTDwWsejwgtgkYKPqRJg8SV6xaiZ3ZTppGneS4yfH5/66fZSDHv+QZci/+h5c5UHtpy67JUqGppM0sh0Nc1dW6/N1W5Yoqat8/TU/VnadmdeW2PLLSyh0cvxBs3KbqTmwYPpxN4do/mzE8nEpvX/UMu2Wbp74zUAK5q6WkHns7V0eWkdPbPzd3rxkTGybadYySumVzhcaJFbs5UrEkQ/+CK8gF5dnh/6ciIZ73gwQ927L1IitoxKLXYP3SjYdOrHHfTZhRRlFyrorafPk20B3HPD1y2G3qKZME5Jcf3t/HUC13/8tSd++vqFveMUTwAUxSUFI1QekR1+bIze3D9MF2aq6cPvG72CgnldWCFqyRw3lwH8ZMerjTD9ElRO7Gv44wNpC90aASqGfVlz/Rx17srQ57/UU26hkhQqUB7dBR71WmzQhHUnblGmVOEw0jhbV1n9OlXUDCIRGaNV5Jp43N516fN7JmnTHdfp7Hgy0luO4aMhtkLL8Bi3bUWYvzh5Mn1dTxrL6QmGuRhGL/TiTTxRoEdTszSaq9GR0NGA3KdkOz3hqSV3MIDhQ5IVX/Ivx3umBti2es2h4eZby7x8br1rkf7Mo90AqC8aQ3sJeNzqFRu+vSANAQe3PL7l0HGOAdwDCeZYvNKeoZp1Qfs6Aipndh86HmFRi0LAnEO47wsqM6cdfjh3jBPUzhZy7nvlUfFsamED1VQt6aISHVymXZ/B2aCtIG8AI8xfobj2d3en1wWVhOeHELKmLQ1s211s88comkv4UCwWyF787mJdYXtNfhKAXVqnKTq8QZvGAGGOfaTo5pGZ/PwbUCr5+DPr/1J92JNHr9aOl/F3iI5+O1nfybsGxoimvZ3ViWSluDITw3P37mypheDIPY0tw7+O/5ApbkYw+zpfaUVu32Pi98+defdUhEpZkRFq0aqyNh9FuL9hpYbEm6iwi0z2REd09ZmyENEbuhjDWzKvZXTqKYaBIr3tt5kuPtQBZFvEUwHt60vfCNu41XsksH9Ij1BMMz1Y0OOunHNShFIP5868g5zeXmuLwL9T4b6Q2+KejgAAAABJRU5ErkJggg==","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg=="],currentBadge:""}),created(){this.$themeConfig.titleBadgeIcons&&(this.badges=this.$themeConfig.titleBadgeIcons),this.currentBadge=this.getBadge()},watch:{"$route.path"(){this.currentBadge=this.getBadge()}},methods:{getBadge(){return this.badges[Math.floor(Math.random()*this.badges.length)]}}}),X={mixins:[K],data:()=>({updateBarConfig:null}),props:["sidebarItems"],components:{PageEdit:U,PageNav:Q,ArticleInfo:J,Catalogue:V,UpdateArticle:d,RightMenu:Object(n.a)(Z,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"right-menu-wrapper"},[e("div",{staticClass:"right-menu-margin"},[e("div",{staticClass:"right-menu-title"},[t._v("目录")]),t._v(" "),e("div",{staticClass:"right-menu-content"},t._l(t.headers,(function(s,a){return e("div",{key:a,class:["right-menu-item","level"+s.level,{active:s.slug===t.hashText}]},[e("a",{attrs:{href:"#"+s.slug}},[t._v(t._s(s.title))])])})),0)])])}),[],!1,null,null,null).exports},created(){this.updateBarConfig=this.$themeConfig.updateBar},computed:{bgStyle(){const{contentBgStyle:t}=this.$themeConfig;return t?"bg-style-"+t:""},isShowUpdateBar(){return!this.updateBarConfig||!1!==this.updateBarConfig.showToArticle},showTitle(){return!this.$frontmatter.pageComponent},showRightMenu(){const{$frontmatter:t,$themeConfig:e,$page:s}=this,{sidebar:a}=t;return!1!==e.rightMenuBar&&s.headers&&!1!==(t&&a&&!1!==a)},pageComponent(){return!!this.$frontmatter.pageComponent&&this.$frontmatter.pageComponent.name},isShowSlotT(){return this.getShowStatus("pageTshowMode")},isShowSlotB(){return this.getShowStatus("pageBshowMode")}},methods:{getShowStatus(t){const{htmlModules:e}=this.$themeConfig;return!!e&&("article"===e[t]?this.isArticle():"custom"!==e[t]||!this.isArticle())},isArticle(){return!1!==this.$frontmatter.article}}},tt=(s(311),Object(n.a)(X,(function(){var t=this,e=t._self._c;return e("div",[e("main",{staticClass:"page"},[e("div",{class:"theme-vdoing-wrapper "+t.bgStyle},[t.isArticle()?e("ArticleInfo"):e("div",{staticClass:"placeholder"}),t._v(" "),t.pageComponent?e(t.pageComponent,{tag:"component",staticClass:"theme-vdoing-content"}):t._e(),t._v(" "),e("div",{staticClass:"content-wrapper"},[t.showRightMenu?e("RightMenu"):t._e(),t._v(" "),t.showTitle?e("h1",[!1!==t.$themeConfig.titleBadge?e("img",{attrs:{src:t.currentBadge}}):t._e(),t._v(t._s(this.$page.title)),t.$frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v(t._s(t.$frontmatter.titleTag))]):t._e()]):t._e(),t._v(" "),t.isShowSlotT?t._t("top"):t._e(),t._v(" "),e("Content",{staticClass:"theme-vdoing-content"})],2),t._v(" "),t.isShowSlotB?t._t("bottom"):t._e(),t._v(" "),e("PageEdit"),t._v(" "),e("PageNav",t._b({},"PageNav",{sidebarItems:t.sidebarItems},!1))],2),t._v(" "),t.isShowUpdateBar?e("UpdateArticle",{attrs:{length:3,moreArticle:t.updateBarConfig&&t.updateBarConfig.moreArticle}}):t._e()],1)])}),[],!1,null,null,null).exports),et={data:()=>({category:"",total:0,perPage:10,currentPage:1}),components:{MainLayout:c,PostList:u,Pagination:m,CategoriesBar:b},mounted(){const t=this.$route.query.category;t?(this.category=t,this.total=this.$groupPosts.categories[t].length):this.total=this.$sortPosts.length,this.$route.query.p&&(this.currentPage=Number(this.$route.query.p));const e=document.querySelector(".categories");e&&setTimeout(()=>{const t=e.querySelector(".active"),s=t?t.offsetTop:0;e.scrollTo({top:s,behavior:"smooth"})},300)},methods:{handlePagination(t){this.currentPage=t}},watch:{"$route.query.category"(t){this.category=t?decodeURIComponent(t):"",this.category?this.total=this.$groupPosts.categories[this.category].length:this.total=this.$sortPosts.length,this.currentPage=1}}},st=(s(312),Object(n.a)(et,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page categories-page"},[e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return[t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,category:t.category}}):t._e(),t._v(" "),e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage,category:t.category}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})]},proxy:!0},{key:"mainRight",fn:function(){return[t.$categoriesAndTags.categories.length?e("CategoriesBar",{attrs:{categoriesData:t.$categoriesAndTags.categories,category:t.category}}):t._e()]},proxy:!0}])})],1)}),[],!1,null,null,null).exports),at={data:()=>({tag:"",total:0,perPage:10,currentPage:1}),components:{MainLayout:c,PostList:u,Pagination:m,TagsBar:w},mounted(){const t=this.$route.query.tag;t?(this.tag=t,this.total=this.$groupPosts.tags[t].length):this.total=this.$sortPosts.length,this.$route.query.p&&(this.currentPage=Number(this.$route.query.p))},methods:{handlePagination(t){this.currentPage=t}},watch:{"$route.query.tag"(t){this.tag=t?decodeURIComponent(t):"",this.tag?this.total=this.$groupPosts.tags[this.tag].length:this.total=this.$sortPosts.length,this.currentPage=1}}},it=(s(313),Object(n.a)(at,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page tags-page"},[e("MainLayout",{scopedSlots:t._u([{key:"mainLeft",fn:function(){return[t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,tag:t.tag}}):t._e(),t._v(" "),e("PostList",{attrs:{currentPage:t.currentPage,perPage:t.perPage,tag:t.tag}}),t._v(" "),e("Pagination",{directives:[{name:"show",rawName:"v-show",value:Math.ceil(t.total/t.perPage)>1,expression:"Math.ceil(total / perPage) > 1"}],attrs:{total:t.total,perPage:t.perPage,currentPage:t.currentPage},on:{getCurrentPage:t.handlePagination}})]},proxy:!0},{key:"mainRight",fn:function(){return[t.$categoriesAndTags.tags.length?e("TagsBar",{attrs:{tagsData:t.$categoriesAndTags.tags,tag:t.tag}}):t._e()]},proxy:!0}])})],1)}),[],!1,null,null,null).exports),nt=s(49),ot=s.n(nt),rt={mixins:[K],data:()=>({postsList:[],countByYear:{},perPage:80,currentPage:1}),created(){this.getPageData();const{$sortPostsByDate:t,countByYear:e}=this;for(let s=0;s{if(this.postsList.lengtha&&s+a>=i-250&&this.loadmore()}},200))},methods:{getPageData(){const t=this.currentPage,e=this.perPage;this.postsList=this.postsList.concat(this.$sortPostsByDate.slice((t-1)*e,t*e))},loadmore(){this.currentPage=this.currentPage+1,this.getPageData()},getYear(t){const e=this.postsList[t];if(!e)return;const{frontmatter:{date:s}}=e;return s&&"string"===Object(a.n)(s)?s.slice(0,4):void 0},getDate(t){const{frontmatter:{date:e}}=t;if(e&&"string"===Object(a.n)(e))return e.slice(5,10)}}},lt=(s(314),Object(n.a)(rt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"custom-page archives-page"},[e("div",{staticClass:"theme-vdoing-wrapper"},[e("h1",[!1!==t.$themeConfig.titleBadge?e("img",{attrs:{src:t.currentBadge}}):t._e(),t._v("\n "+t._s(t.$page.title)+"\n ")]),t._v(" "),e("div",{staticClass:"count"},[t._v("\n 总共 "),e("i",[t._v(t._s(t.$sortPostsByDate.length))]),t._v(" 篇文章\n ")]),t._v(" "),e("ul",[t._l(t.postsList,(function(s,a){return[(t.year=t.getYear(a))!==t.getYear(a-1)?e("li",{key:a+t.$sortPostsByDate.length,staticClass:"year"},[e("h2",[t._v("\n "+t._s(t.year)+"\n "),e("span",[e("i",[t._v(t._s(t.countByYear[t.year]))]),t._v(" 篇\n ")])])]):t._e(),t._v(" "),e("li",{key:a},[e("router-link",{attrs:{to:s.path}},[e("span",{staticClass:"date"},[t._v(t._s(t.getDate(s)))]),t._v("\n "+t._s(s.title)+"\n "),s.frontmatter.titleTag?e("span",{staticClass:"title-tag"},[t._v("\n "+t._s(s.frontmatter.titleTag)+"\n ")]):t._e()])],1)]}))],2)])])}),[],!1,null,null,null).exports),ct={name:"Sidebar",components:{SidebarLinks:s(276).default,NavLinks:B},props:["items"],computed:{blogger(){return this.$themeConfig.blogger}}},ht=(s(317),Object(n.a)(ct,(function(){var t=this,e=t._self._c;return e("aside",{staticClass:"sidebar"},[t.blogger?e("div",{staticClass:"blogger"},[e("img",{attrs:{src:t.blogger.avatar}}),t._v(" "),e("div",{staticClass:"blogger-info"},[e("h3",[t._v(t._s(t.blogger.name))]),t._v(" "),t.blogger.social?e("div",{staticClass:"icons"},t._l(t.blogger.social.icons,(function(t,s){return e("a",{key:s,class:["iconfont",t.iconClass],attrs:{href:t.link,title:t.title,target:"_blank"}})})),0):e("span",[t._v(t._s(t.blogger.slogan))])])]):t._e(),t._v(" "),e("NavLinks"),t._v(" "),t._t("top"),t._v(" "),e("SidebarLinks",{attrs:{depth:0,items:t.items}}),t._v(" "),t._t("bottom")],2)}),[],!1,null,null,null).exports),ut=s(270);var gt={data:()=>({threshold:100,scrollTop:null,showCommentBut:!1,commentTop:null,currentMode:"",showModeBox:!1,modeList:[{name:"跟随系统",icon:"icon-zidong",KEY:"auto"},{name:"浅色模式",icon:"icon-rijianmoshi",KEY:"light"},{name:"深色模式",icon:"icon-yejianmoshi",KEY:"dark"},{name:"阅读模式",icon:"icon-yuedu",KEY:"read"}],_scrollTimer:null,_textareaEl:null,_recordScrollTop:null,COMMENT_SELECTOR_1:"#vuepress-plugin-comment",COMMENT_SELECTOR_2:"#valine-vuepress-comment",COMMENT_SELECTOR_3:".vssue"}),mounted(){if(this.currentMode=ut.a.get("mode")||this.$themeConfig.defaultMode||"auto",this.scrollTop=this.getScrollTop(),window.addEventListener("scroll",ot()(()=>{this.scrollTop=this.getScrollTop()},100)),window.addEventListener("load",()=>{this.getCommentTop()}),document.documentElement.clientWidth<719){this.$refs.modeBox.onclick=()=>{this.showModeBox=!1},window.addEventListener("scroll",ot()(()=>{this.showModeBox&&(this.showModeBox=!1)},100))}const t=document.querySelectorAll(".buttons .button");for(let e=0;e{s.classList.remove("hover")},150)}))}},computed:{showToTop(){return this.scrollTop>this.threshold}},methods:{toggleMode(t){this.currentMode=t,this.$emit("toggle-theme-mode",t)},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,scrollToTop(){window.scrollTo({top:0,behavior:"smooth"}),this.scrollTop=0},getCommentTop(){setTimeout(()=>{let t=document.querySelector(this.COMMENT_SELECTOR_1)||document.querySelector(this.COMMENT_SELECTOR_2)||document.querySelector(this.COMMENT_SELECTOR_3);t&&(this.showCommentBut=!1!==this.$frontmatter.comment&&!0!==this.$frontmatter.home,this.commentTop=t.offsetTop-58)},500)},scrollToComment(){window.scrollTo({top:this.commentTop,behavior:"smooth"}),this._textareaEl=document.querySelector(this.COMMENT_SELECTOR_1+" textarea")||document.querySelector(this.COMMENT_SELECTOR_2+" input")||document.querySelector(this.COMMENT_SELECTOR_3+" textarea"),this._textareaEl&&this.getScrollTop()!==this._recordScrollTop?document.addEventListener("scroll",this._handleListener):this._textareaEl&&this.getScrollTop()===this._recordScrollTop&&this._handleFocus()},_handleListener(){clearTimeout(this._scrollTimer),this._scrollTimer=setTimeout(()=>{document.removeEventListener("scroll",this._handleListener),this._recordScrollTop=this.getScrollTop(),this._handleFocus()},30)},_handleFocus(){this._textareaEl.focus(),this._textareaEl.classList.add("yellowBorder"),setTimeout(()=>{this._textareaEl.classList.remove("yellowBorder")},500)}},watch:{"$route.path"(){this.showCommentBut=!1,this.getCommentTop()}}},dt=(s(318),Object(n.a)(gt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"buttons"},[e("transition",{attrs:{name:"fade"}},[e("div",{directives:[{name:"show",rawName:"v-show",value:t.showToTop,expression:"showToTop"}],staticClass:"button blur go-to-top iconfont icon-fanhuidingbu",attrs:{title:"返回顶部"},on:{click:t.scrollToTop}})]),t._v(" "),e("div",{directives:[{name:"show",rawName:"v-show",value:t.showCommentBut,expression:"showCommentBut"}],staticClass:"button blur go-to-comment iconfont icon-pinglun",attrs:{title:"去评论"},on:{click:t.scrollToComment}}),t._v(" "),e("div",{staticClass:"button blur theme-mode-but iconfont icon-zhuti",attrs:{title:"主题模式"},on:{mouseenter:function(e){t.showModeBox=!0},mouseleave:function(e){t.showModeBox=!1},click:function(e){t.showModeBox=!0}}},[e("transition",{attrs:{name:"mode"}},[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.showModeBox,expression:"showModeBox"}],ref:"modeBox",staticClass:"select-box",on:{click:function(t){t.stopPropagation()},touchstart:function(t){t.stopPropagation()}}},t._l(t.modeList,(function(s){return e("li",{key:s.KEY,staticClass:"iconfont",class:[s.icon,{active:s.KEY===t.currentMode}],on:{click:function(e){return t.toggleMode(s.KEY)}}},[t._v("\n "+t._s(s.name)+"\n ")])})),0)])],1)],1)}),[],!1,null,null,null).exports),pt={computed:{social(){return this.$themeConfig.social},footer(){return this.$themeConfig.footer}}},mt=(s(319),Object(n.a)(pt,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"footer"},[t.social&&t.social.icons?e("div",{staticClass:"icons"},t._l(t.social.icons,(function(t,s){return e("a",{key:s,class:["iconfont",t.iconClass],attrs:{href:t.link,title:t.title,target:"_blank"}})})),0):t._e(),t._v(" "),t.footer?[t._v("\n Copyright © "+t._s(t.footer.createYear)+"-"+t._s((new Date).getFullYear())+"\n "),e("span",{domProps:{innerHTML:t._s(t.footer.copyrightInfo)}})]:t._e()],2)}),[],!1,null,null,null).exports),vt={data:()=>({bgImg:"",opacity:.5}),mounted(){let{bodyBgImg:t,bodyBgImgOpacity:e,bodyBgImgInterval:s=15}=this.$themeConfig;if("string"===Object(a.n)(t))this.bgImg=t;else if("array"===Object(a.n)(t)){let e=0,a=null;this.bgImg=t[e],clearInterval(a),a=setInterval(()=>{if(++e>=t.length&&(e=0),this.bgImg=t[e],t[e+1]){(new Image).src=t[e+1]}},1e3*s)}void 0!==e&&(this.opacity=e)}},ft=(s(320),Object(n.a)(vt,(function(){return(0,this._self._c)("div",{staticClass:"body-bg",style:`background: url(${this.bgImg}) center center / cover no-repeat;opacity:${this.opacity}`})}),[],!1,null,null,null).exports),_t=s(250),bt=s.n(_t);var Ct={components:{Home:k,Navbar:E,Page:tt,CategoriesPage:st,TagsPage:it,ArchivesPage:lt,Sidebar:ht,Footer:mt,Buttons:dt,BodyBgImg:ft},data:()=>({hideNavbar:!1,isSidebarOpen:!0,showSidebar:!1,themeMode:"auto",showWindowLB:!0,showWindowRB:!0}),computed:{sidebarSlotTop(){return this.getHtmlStr("sidebarT")},sidebarSlotBottom(){return this.getHtmlStr("sidebarB")},pageSlotTop(){return this.getHtmlStr("pageT")},pageSlotBottom(){return this.getHtmlStr("pageB")},windowLB(){return this.getHtmlStr("windowLB")},windowRB(){return this.getHtmlStr("windowRB")},showRightMenu(){const{headers:t}=this.$page;return!this.$frontmatter.home&&!1!==this.$themeConfig.rightMenuBar&&t&&t.length&&!1!==this.$frontmatter.sidebar},shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:e}=this.$page;return!1!==e.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length&&!1!==t.showSidebar},sidebarItems(){return Object(a.m)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"hide-navbar":this.hideNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar,"have-rightmenu":this.showRightMenu,"have-body-img":this.$themeConfig.bodyBgImg,"only-sidebarItem":1===this.sidebarItems.length&&"page"===this.sidebarItems[0].type},t]}},created(){const t=this.$themeConfig.sidebarOpen;!1===t&&(this.isSidebarOpen=t)},beforeMount(){this.isSidebarOpenOfclientWidth();const t=ut.a.get("mode"),{defaultMode:e}=this.$themeConfig;e&&"auto"!==e&&!t?this.themeMode=e:t&&"auto"!==t&&"auto"!==e?this.themeMode=t:this._autoMode(),this.setBodyClass();const s=this.$themeConfig.social;if(s&&s.iconfontCssFile){let t=document.createElement("link");t.setAttribute("rel","stylesheet"),t.setAttribute("type","text/css"),t.setAttribute("href",s.iconfontCssFile),document.head.appendChild(t)}},mounted(){const t=document.location.hash;if(t.length>1){const e=decodeURIComponent(t.substring(1)),s=document.getElementById(e);s&&s.scrollIntoView()}this.showSidebar=!0,this.$router.afterEach(()=>{this.isSidebarOpenOfclientWidth()});let e=0,s=0;window.addEventListener("scroll",bt.a.throttle(()=>{this.isSidebarOpen||(e=this.getScrollTop(),this.hideNavbar=s58,setTimeout(()=>{s=e},0))},300))},watch:{isSidebarOpen(){this.isSidebarOpen&&(this.hideNavbar=!1)},themeMode(){this.setBodyClass()}},methods:{getHtmlStr(t){const{htmlModules:e}=this.$themeConfig;return e?e[t]:""},setBodyClass(){let{pageStyle:t="card",bodyBgImg:e}=this.$themeConfig;("card"!==t&&"line"!==t||e)&&(t="card"),document.body.className=`theme-mode-${this.themeMode} theme-style-${t}`},getScrollTop:()=>window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,isSidebarOpenOfclientWidth(){document.documentElement.clientWidth<719&&(this.isSidebarOpen=!1)},toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},_autoMode(){window.matchMedia("(prefers-color-scheme: dark)").matches?this.themeMode="dark":this.themeMode="light"},toggleThemeMode(t){"auto"===t?this._autoMode():this.themeMode=t,ut.a.set("mode",t)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const e=t.changedTouches[0].clientX-this.touchStart.x,s=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(e)>Math.abs(s)&&Math.abs(e)>40&&(e>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}},wt=(s(321),Object(n.a)(Ct,(function(){var t=this,e=t._self._c;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(e){return t.toggleSidebar(!1)}}}),t._v(" "),!1!==t.$themeConfig.sidebarHoverTriggerOpen?e("div",{staticClass:"sidebar-hover-trigger"}):t._e(),t._v(" "),e("Sidebar",{directives:[{name:"show",rawName:"v-show",value:t.showSidebar,expression:"showSidebar"}],attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([t.sidebarSlotTop?{key:"top",fn:function(){return[e("div",{staticClass:"sidebar-slot sidebar-slot-top",domProps:{innerHTML:t._s(t.sidebarSlotTop)}})]},proxy:!0}:null,t.sidebarSlotBottom?{key:"bottom",fn:function(){return[e("div",{staticClass:"sidebar-slot sidebar-slot-bottom",domProps:{innerHTML:t._s(t.sidebarSlotBottom)}})]},proxy:!0}:null],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):t.$page.frontmatter.categoriesPage?e("CategoriesPage"):t.$page.frontmatter.tagsPage?e("TagsPage"):t.$page.frontmatter.archivesPage?e("ArchivesPage"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([t.pageSlotTop?{key:"top",fn:function(){return[e("div",{staticClass:"page-slot page-slot-top",domProps:{innerHTML:t._s(t.pageSlotTop)}})]},proxy:!0}:null,t.pageSlotBottom?{key:"bottom",fn:function(){return[e("div",{staticClass:"page-slot page-slot-bottom",domProps:{innerHTML:t._s(t.pageSlotBottom)}})]},proxy:!0}:null],null,!0)}),t._v(" "),e("Footer"),t._v(" "),e("Buttons",{ref:"buttons",on:{"toggle-theme-mode":t.toggleThemeMode}}),t._v(" "),t.$themeConfig.bodyBgImg?e("BodyBgImg"):t._e(),t._v(" "),t.windowLB?e("div",{directives:[{name:"show",rawName:"v-show",value:t.showWindowLB,expression:"showWindowLB"}],staticClass:"custom-html-window custom-html-window-lb"},[e("div",{staticClass:"custom-wrapper"},[e("span",{staticClass:"close-but",on:{click:function(e){t.showWindowLB=!1}}},[t._v("×")]),t._v(" "),e("div",{domProps:{innerHTML:t._s(t.windowLB)}})])]):t._e(),t._v(" "),t.windowRB?e("div",{directives:[{name:"show",rawName:"v-show",value:t.showWindowRB,expression:"showWindowRB"}],staticClass:"custom-html-window custom-html-window-rb"},[e("div",{staticClass:"custom-wrapper"},[e("span",{staticClass:"close-but",on:{click:function(e){t.showWindowRB=!1}}},[t._v("×")]),t._v(" "),e("div",{domProps:{innerHTML:t._s(t.windowRB)}})])]):t._e()],1)}),[],!1,null,null,null));e.default=wt.exports}}]); \ No newline at end of file diff --git a/assets/js/20.182555f4.js b/assets/js/20.182555f4.js new file mode 100644 index 0000000..59d9d79 --- /dev/null +++ b/assets/js/20.182555f4.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{360:function(s,a,t){"use strict";t.r(a);var n=t(6),e=Object(n.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"数据导出"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据导出"}},[s._v("#")]),s._v(" 数据导出")]),s._v(" "),a("h1",{attrs:{id:"数据导入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#数据导入"}},[s._v("#")]),s._v(" 数据导入")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("psql –h localhost –U postgres dbname "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" dbname.backup\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h1",{attrs:{id:"常用配置"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常用配置"}},[s._v("#")]),s._v(" 常用配置")]),s._v(" "),a("h2",{attrs:{id:"修改postgres用户密码"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#修改postgres用户密码"}},[s._v("#")]),s._v(" 修改postgres用户密码")]),s._v(" "),a("ol",[a("li",[s._v("psql -d postgres -U postgres")]),s._v(" "),a("li",[s._v("ALTER USER 用户名 WITH PASSWORD 'xxx';")]),s._v(" "),a("li",[s._v("\\q退出")]),s._v(" "),a("li",[s._v("修改配置文件"),a("code",[s._v("pg_hba.conf")]),s._v(",将trust修改为md5")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# IPv4 local connections:")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("host")]),s._v(" all all "),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("0.0")]),s._v(".0.0/0 md5\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("h1",{attrs:{id:"处理问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#处理问题"}},[s._v("#")]),s._v(" 处理问题")]),s._v(" "),a("h2",{attrs:{id:"psql-invalid-command-n-while-restore-sql"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#psql-invalid-command-n-while-restore-sql"}},[s._v("#")]),s._v(" psql invalid command \\N while restore sql")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("psql -v "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("ON_ERROR_STOP")]),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("h1",{attrs:{id:"工具"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#工具"}},[s._v("#")]),s._v(" 工具")]),s._v(" "),a("h2",{attrs:{id:"psql"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#psql"}},[s._v("#")]),s._v(" psql")]),s._v(" "),a("ul",[a("li",[s._v("连接数据库")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("psql -h localhost -U username databasename\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 开启timing")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("timing\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 列出数据库")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("l\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 列出表")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("d\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("d+\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 查看表")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("d employees\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("d+ employees\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 列出所有schema")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("dn\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("dn+\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 列出所有函数")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("df\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("df+\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 切换数据库")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("c dbname\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 退出")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("q\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br")])]),a("h2",{attrs:{id:"connections-on-unix-domain-socket-tmp-s-pgsql-5432"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connections-on-unix-domain-socket-tmp-s-pgsql-5432"}},[s._v("#")]),s._v(' connections on Unix domain socket "/tmp/.s.PGSQL.5432"?')])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/21.f3386015.js b/assets/js/21.f3386015.js new file mode 100644 index 0000000..c486ee6 --- /dev/null +++ b/assets/js/21.f3386015.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{362:function(s,n,a){"use strict";a.r(n);var t=a(6),e=Object(t.a)({},(function(){var s=this,n=s._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h1",{attrs:{id:"常用配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#常用配置"}},[s._v("#")]),s._v(" 常用配置")]),s._v(" "),n("h2",{attrs:{id:"配置镜像仓库"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#配置镜像仓库"}},[s._v("#")]),s._v(" 配置镜像仓库")]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vi")]),s._v(" /etc/docker/daemon.json\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("div",{staticClass:"language-json line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-json"}},[n("code",[n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),n("span",{pre:!0,attrs:{class:"token property"}},[s._v('"registry-mirrors"')]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v(":")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"https://registry.docker-cn.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"http://hub-mirror.c.163.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"https://kfwkfulq.mirror.aliyuncs.com"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("h1",{attrs:{id:"开发环境"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#开发环境"}},[s._v("#")]),s._v(" 开发环境")]),s._v(" "),n("h2",{attrs:{id:"mongodb"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#mongodb"}},[s._v("#")]),s._v(" mongodb")]),s._v(" "),n("ul",[n("li",[s._v("docker部署")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 创建挂在目录")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /mydata/mongodb/"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("data,conf,log"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 创建配置文件")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vi")]),s._v(" /mydata/mongodb/conf/mongodb.conf\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("div",{staticClass:"language- line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-text"}},[n("code",[s._v("# for documentation of all options, see:\n# http://docs.mongodb.org/manual/reference/configuration-options/\n\n# Where and how to store data.\nstorage:\n dbPath: /var/lib/mongodb\n journal:\n enabled: true\n# engine:\n# mmapv1:\n# wiredTiger:\n\n# where to write logging data.\nsystemLog:\n destination: file\n logAppend: true\n path: /var/log/mongodb/mongod.log\n\n# network interfaces\nnet:\n port: 27017\n bindIp: 0.0.0.0\n\n\n# how the process runs\nprocessManagement:\n timeZoneInfo: /usr/share/zoneinfo\n\n#security:\n\n#operationProfiling:\n\n#replication:\n\n#sharding:\n\n## Enterprise-Only Options:\n\n#auditLog:\n\n#snmp:\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br")])]),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 创建启动脚本")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("vi")]),s._v(" /home/mongo-start.sh\n\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" run -d --name mongo -v /mydata/mongodb/data:/data/db -v /mydata/mongodb/conf:/data/configdb -v /mydata/mongodb/log:/data/log -p "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("27017")]),s._v(":27017 -e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MONGO_INITDB_ROOT_USERNAME")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("admin -e "),n("span",{pre:!0,attrs:{class:"token assign-left variable"}},[s._v("MONGO_INITDB_ROOT_PASSWORD")]),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("admin --privileged"),n("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v("true mongo:4\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 启动")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("sh")]),s._v(" mongo-start.sh\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("h2",{attrs:{id:"nginx"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#nginx"}},[s._v("#")]),s._v(" nginx")]),s._v(" "),n("ul",[n("li",[s._v("创建挂载目录")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("mkdir")]),s._v(" -p /mydata/nginx/"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("conf.d,html,logs"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br")])]),n("ul",[n("li",[s._v("拉取镜像并启动")])]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" pull nginx\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" run -d --name mynginx -p "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("8080")]),s._v(":80 nginx\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("ul",[n("li",[s._v("将容器内配置文件复制到挂载目录")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" 8934bcf58cdf:/etc/nginx/nginx.conf /mydata/nginx/\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" 8934bcf58cdf:/etc/nginx/conf.d /mydata/nginx\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" 8934bcf58cdf:/usr/share/nginx/html/ /mydata/nginx\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" 8934bcf58cdf:/var/log/nginx/ /mydata/nginx/logs/\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("h2",{attrs:{id:"常用命令"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#常用命令"}},[s._v("#")]),s._v(" 常用命令")]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 从容器内拷贝文件到linux主机上")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# docker cp 容器id:容器内路径 目标主机路径")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" eaac94ef6926:/home/test.txt /root/test.txt\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 从宿主机拷贝文件到容器内 # docker cp 文件路径 容器id:容器内路径")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("cp")]),s._v(" test.txt eaac94ef6926:/home/test.txt\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 将容器ID打包为新镜像")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("docker")]),s._v(" commit cba0423bc6f4 nginx:T1.0.0\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br")])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/22.cd6186fd.js b/assets/js/22.cd6186fd.js new file mode 100644 index 0000000..088eded --- /dev/null +++ b/assets/js/22.cd6186fd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{366:function(s,n,a){"use strict";a.r(n);var e=a(6),t=Object(e.a)({},(function(){var s=this,n=s._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"客户端工具"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#客户端工具"}},[s._v("#")]),s._v(" 客户端工具")]),s._v(" "),n("p",[s._v("https://github.com/qishibo/AnotherRedisDesktopManager")]),s._v(" "),n("h1",{attrs:{id:"安装部署"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#安装部署"}},[s._v("#")]),s._v(" 安装部署")]),s._v(" "),n("h2",{attrs:{id:"手动方式"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#手动方式"}},[s._v("#")]),s._v(" 手动方式")]),s._v(" "),n("h2",{attrs:{id:"docker-方式"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#docker-方式"}},[s._v("#")]),s._v(" docker 方式")]),s._v(" "),n("p",[s._v("1.docker 拉取 redis 镜像\n// 这里我没有指定版本 就默认拉取最新的用的人最多的稳定版")]),s._v(" "),n("p",[s._v("docker pull redis")]),s._v(" "),n("p",[s._v("2.redis 配置目录创建与设置\nmkdir -p /mydata/redis/conf")]),s._v(" "),n("p",[s._v("touch /mydata/redis/conf/redis.conf")]),s._v(" "),n("p",[s._v('3.设置 redis 持久化 aof---选做\necho "appendonly yes" >> /mydata/redis/conf/redis.conf')]),s._v(" "),n("p",[s._v("4.docker 启动 redis\ndocker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf --restart=always --network common-network -d redis redis-server /etc/redis/redis.conf")]),s._v(" "),n("p",[s._v("5.进入 redis 容器内部 进行查看或者操作\ndocker exec -it redis /bin/bash 默认进入 data 文件夹")]),s._v(" "),n("p",[s._v("cd /etc/redis/\n// 连接 redis")]),s._v(" "),n("p",[s._v("docker exec -it redis redis-cli")]),s._v(" "),n("p",[s._v("6.重启 redis\ndocker restart redis")]),s._v(" "),n("p",[s._v("7.设置 redis 跟随 docker 启动\ndocker update redis --restart=always")]),s._v(" "),n("h1",{attrs:{id:"常用命令"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#常用命令"}},[s._v("#")]),s._v(" 常用命令")]),s._v(" "),n("p",[n("a",{attrs:{href:"https://www.redis.com.cn/commands.html",target:"_blank",rel:"noopener noreferrer"}},[s._v("https://www.redis.com.cn/commands.html"),n("OutboundLink")],1)]),s._v(" "),n("ul",[n("li",[s._v("redis-server -v 查看版本")]),s._v(" "),n("li",[s._v("set/mset")]),s._v(" "),n("li",[s._v("get/mget")]),s._v(" "),n("li",[s._v("hset hget hdel 哈希操作")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[s._v("hset user:1 name jack age "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("20")]),s._v("\nhset user:2 name lucy age "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("12")]),s._v("\nhget user:1 name\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br")])]),n("ul",[n("li",[s._v("lpush 和 lrange 列表操作")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[s._v("lpush citys nj js shanghai hangzhou wuhan\nlpush citys nanchang\nLRANGE citys "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"nanchang"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"wuhan"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"hangzhou"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"shanghai"')]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br")])]),n("ul",[n("li",[s._v("sadd、smembers、srem 集合操作")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[s._v("sadd fruit apple banana\nSMEMBERS fruit\n"),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"banana"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"apple"')]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br")])]),n("ul",[n("li",[s._v("zadd、 zrang、zrem 有序集合,分数用于排序")])]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[s._v("zadd grade "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("60")]),s._v(" jack "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("90")]),s._v(" xiaoming\nZRANGE grade "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" withscores\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("ul",[n("li",[s._v("禁用 keys *")]),s._v(" "),n("li",[s._v("exists key 判断 key 是否存在")]),s._v(" "),n("li",[s._v("incr key")]),s._v(" "),n("li",[s._v("append key value 追加字符串")]),s._v(" "),n("li",[s._v("strlen key 每个汉子占 3 个字节")]),s._v(" "),n("li")]),s._v(" "),n("h1",{attrs:{id:"最佳实践"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#最佳实践"}},[s._v("#")]),s._v(" 最佳实践")]),s._v(" "),n("ol",[n("li",[s._v("缩短键值对的存储长度;")]),s._v(" "),n("li",[s._v("使用  lazy free(延迟删除)特性;")]),s._v(" "),n("li",[s._v("设置键值的过期时间;")]),s._v(" "),n("li",[s._v("禁用长耗时的查询命令;")]),s._v(" "),n("li",[s._v("使用 slowlog 优化耗时命令;")]),s._v(" "),n("li",[s._v("使用 Pipeline 批量操作数据;")]),s._v(" "),n("li",[s._v("避免大量数据同时失效;")]),s._v(" "),n("li",[s._v("客户端使用优化;")]),s._v(" "),n("li",[s._v("限制 Redis 内存大小;")]),s._v(" "),n("li",[s._v("使用物理机而非虚拟机安装 Redis 服务;")]),s._v(" "),n("li",[s._v("检查数据持久化策略;")]),s._v(" "),n("li",[s._v("禁用 THP 特性;")]),s._v(" "),n("li",[s._v("使用分布式架构来增加读写速度。")])]),s._v(" "),n("p",[n("a",{attrs:{href:"https://juejin.cn/post/6844904101151506446",target:"_blank",rel:"noopener noreferrer"}},[s._v("https://juejin.cn/post/6844904101151506446"),n("OutboundLink")],1)]),s._v(" "),n("h1",{attrs:{id:"常用-redis-conf"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#常用-redis-conf"}},[s._v("#")]),s._v(" 常用 redis.conf")]),s._v(" "),n("div",{staticClass:"language-shell line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-shell"}},[n("code",[n("span",{pre:!0,attrs:{class:"token builtin class-name"}},[s._v("bind")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("127.0")]),s._v(".0.1 "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 注释掉这部分,否则只能本地访问")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 默认redis不是以后台进程的方式启动,如果需要在后台运行,需要将这个值设置成yes")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 以后台方式启动的时候,redis会写入默认的进程文件/var/run/redis.pid")]),s._v("\ndaemonize no\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 默认yes,开启保护模式,限制为本地访问")]),s._v("\nprotected-mode no\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# redis启动的进程路径")]),s._v("\npidfile/var/run/redis.pid\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 启动进程端口号,默认6379,可以改")]),s._v("\nport "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("6379")]),s._v("\n\ntcp-backlog "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("511")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 配置redis监听到的ip地址,可以是一个也可以多个,这里我注释掉了")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#bind 127.0.0.110.254.3.42")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# redis的sock路径")]),s._v("\nunixsocket/tmp/redis.sock\nunixsocketperm "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("755")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 超时时间")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("timeout")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('#指定TCP连接是否为长连接,"侦探"信号有server端维护。默认为0.表示禁用')]),s._v("\ntcp-keepalive "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 日志级别,log 等级分为4 级,debug,verbose,notice, 和warning。生产环境下一般开启notice")]),s._v("\nloglevel notice\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 日志文件地址")]),s._v("\nlogfile"),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"/usr/local/redis/logs/redis.log"')]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 设置数据库的个数,可以使用SELECT 命令来切换数据库。默认使用的数据库是0号库。默认16个库")]),s._v("\ndatabases "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("16")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上。进行快照的条件可以由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。RDB是Redis默认采用的持久化方式,在配置文件中已经预置了3个条件:")]),s._v("\nsave "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("900")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 900秒内有至少1个键被更改则进行快照")]),s._v("\nsave "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("300")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 300秒内有至少10个键被更改则进行快照")]),s._v("\nsave "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("60")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10000")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 60秒内有至少10000个键被更改则进行快照")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 持久化数据存储目录")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("dir")]),s._v(" /usr/local/redis/data\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 当持久化出现错误时,是否依然继续进行工作,是否终止所有的客户端write请求。默认设置"yes"表示终止,一旦snapshot数据保存故障,那么此server为只读服务。如果为"no",那么此次snapshot将失败,但下一次snapshot不会受到影响,不过如果出现故障,数据只能恢复到"最近一个成功点"')]),s._v("\nstop-writes-on-bgsave-error no\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。压缩可能需要额外的cpu开支,不过这能够有效的减小rdb文件的大,有利于存储/备份/传输/数据恢复")]),s._v("\nrdbcompression "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# checksum文件检测,读取写入的时候rdb文件checksum,会损失一些性能")]),s._v("\nrdbchecksum "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#镜像备份文件的文件名,默认为dump.rdb")]),s._v("\ndbfilename dump.rdb\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('#当主master服务器挂机或主从复制在进行时,是否依然可以允许客户访问可能过期的数据。在"yes"情况下,slave继续向客户端提供只读服务,有可能此时的数据已经过期;在"no"情况下,任何向此server发送的数据请求服务(包括客户端和此server的slave)都将被告知"error"')]),s._v("\nslave-serve-stale-data "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 如果是slave库,只允许只读,不允许修改")]),s._v("\nslave-read-only "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# slave与master的连接,是否禁用TCPnodelay选项。"yes"表示禁用,那么socket通讯中数据将会以packet方式发送(packet大小受到socket buffer限制)。可以提高socket通讯的效率(tcp交互次数),但是小数据将会被buffer,不会被立即发送,对于接受者可能存在延迟。"no"表示开启tcp nodelay选项,任何数据都会被立即发送,及时性较好,但是效率较低,建议设为no,在高并发或者主从有大量操作的情况下,设置为yes')]),s._v("\nrepl-disable-tcp-nodelay no\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 适用Sentinel模块(unstable,M-S集群管理和监控),需要额外的配置文件支持。slave的权重值,默认100.当master失效后,Sentinel将会从slave列表中找到权重值最低(>0)的slave,并提升为master。如果权重值为0,表示此slave为"观察者",不参与master选举')]),s._v("\nslave-priority "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 限制同时连接的客户数量。当连接数超过这个值时,redis 将不再接收其他连接请求,客户端尝试连接时将收到error 信息。默认为10000,要考虑系统文件描述符限制,不宜过大,浪费文件描述符,具体多少根据具体情况而定")]),s._v("\nmaxclients "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10000")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# redis-cache所能使用的最大内存(bytes),默认为0,表示"无限制",最终由OS物理内存大小决定(如果物理内存不足,有可能会使用swap)。此值尽量不要超过机器的物理内存尺寸,从性能和实施的角度考虑,可以为物理内存3/4。此配置需要和"maxmemory-policy"配合使用,当redis中内存数据达到maxmemory时,触发"清除策略"。在"内存不足"时,任何write操作(比如set,lpush等)都会触发"清除策略"的执行。在实际环境中,建议redis的所有物理机器的硬件配置保持一致(内存一致),同时确保master/slave中"maxmemory""policy"配置一致。')]),s._v("\nmaxmemory "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 内存过期策略,内存不足"时,数据清除策略,默认为"volatile-lru"。')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# volatile-lru ->对"过期集合"中的数据采取LRU(近期最少使用)算法.如果对key使用"expire"指令指定了过期时间,那么此key将会被添加到"过期集合"中。将已经过期/LRU的数据优先移除.如果"过期集合"中全部移除仍不能满足内存需求,将OOM.')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# allkeys-lru ->对所有的数据,采用LRU算法")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# volatile-random ->对"过期集合"中的数据采取"随即选取"算法,并移除选中的K-V,直到"内存足够"为止. 如果如果"过期集合"中全部移除全部移除仍不能满足,将OOM')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# allkeys-random ->对所有的数据,采取"随机选取"算法,并移除选中的K-V,直到"内存足够"为止')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# volatile-ttl ->对"过期集合"中的数据采取TTL算法(最小存活时间),移除即将过期的数据.')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# noeviction ->不做任何干扰操作,直接返回OOM异常")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 另外,如果数据的过期不会对"应用系统"带来异常,且系统中write操作比较密集,建议采取"allkeys-lru"')]),s._v("\nmaxmemory-policy volatile-lru\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 默认值5,上面LRU和最小TTL策略并非严谨的策略,而是大约估算的方式,因此可以选择取样值以便检查")]),s._v("\nmaxmemory-samples "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 默认情况下,redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。所以redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。如果不经常进行数据迁移操作,推荐生产环境下的做法为关闭镜像,开启appendonly.aof,同时可以选择在访问较少的时间每天对appendonly.aof 进行重写一次。")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 另外,对master机器,主要负责写,建议使用AOF,对于slave,主要负责读,挑选出1-2台开启AOF,其余的建议关闭")]),s._v("\nappendonly "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# aof文件名字,默认为appendonly.aof")]),s._v("\nappendfilename "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"appendonly.aof"')]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 设置对appendonly.aof 文件进行同步的频率。always表示每次有写操作都进行同步,everysec 表示对写操作进行累积,每秒同步一次。no不主动fsync,由OS自己来完成。这个需要根据实际业务场景进行配置")]),s._v("\nappendfsync everysec\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 在aof rewrite期间,是否对aof新记录的append暂缓使用文件同步策略,主要考虑磁盘IO开支和请求阻塞时间。默认为no,表示"不暂缓",新的aof记录仍然会被立即同步')]),s._v("\nno-appendfsync-on-rewrite no\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当Aof log增长超过指定比例时,重写logfile,设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。")]),s._v("\nauto-aof-rewrite-percentage "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("100")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 触发aof rewrite的最小文件尺寸")]),s._v("\nauto-aof-rewrite-min-size 64mb\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# lua脚本执行的最大时间,单位毫秒")]),s._v("\nlua-time-limit "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("5000")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# 慢日志记录,单位微妙,10000就是10毫秒值,如果操作时间超过此值,将会把command信息"记录"起来.(内存,非文件)。其中"操作时间"不包括网络IO开支,只包括请求达到server后进行"内存实施"的时间."0"表示记录全部操作')]),s._v("\nslowlog-log-slower-than "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10000")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# "慢操作日志"保留的最大条数,"记录"将会被队列化,如果超过了此长度,旧记录将会被移除。可以通过"SLOWLOG args"查看慢记录的信息(SLOWLOG get 10,SLOWLOG reset)')]),s._v("\nslowlog-max-len "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("128")]),s._v("\nnotify-keyspace-events "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('""')]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# hash类型的数据结构在编码上可以使用ziplist和hashtable。ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样.因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 这个参数指的是ziplist中允许存储的最大条目个数,,默认为512,建议为128")]),s._v("\nhash-max-ziplist-entries "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("512")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# ziplist中允许条目value值最大字节数,默认为64,建议为1024")]),s._v("\nhash-max-ziplist-value "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("64")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 同上")]),s._v("\nlist-max-ziplist-entries "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("512")]),s._v("\nlist-max-ziplist-value "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("64")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# intset中允许保存的最大条目个数,如果达到阀值,intset将会被重构为hashtable")]),s._v("\nset-max-intset-entries "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("512")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# zset为有序集合,有2中编码类型:ziplist,skiplist。因为"排序"将会消耗额外的性能,当zset中数据较多时,将会被重构为skiplist。')]),s._v("\nzset-max-ziplist-entries "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("128")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# zset中允许条目value值最大字节数,默认为64,建议为1024")]),s._v("\nzset-max-ziplist-value "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("64")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 是否开启顶层数据结构的rehash功能,如果内存允许,请开启。rehash能够很大程度上提高K-V存取的效率")]),s._v("\nactiverehashing "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 客户端buffer控制。在客户端与server进行的交互中,每个连接都会与一个buffer关联,此buffer用来队列化等待被client接受的响应信息。如果client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.如果buffer中积压的数据达到阀值,将会导致连接被关闭,buffer被移除。")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# buffer控制类型包括:normal -> 普通连接;slave->与slave之间的连接;pubsub ->pub/sub类型连接,此类型的连接,往往会产生此种问题;因为pub端会密集的发布消息,但是sub端可能消费不足.指令格式:client-output-buffer-limit ",其中hard表示buffer最大值,一旦达到阀值将立即关闭连接;soft表示"容忍值",它和seconds配合,如果buffer值超过soft且持续时间达到了seconds,也将立即关闭连接,如果超过了soft但是在seconds之后,buffer数据小于了soft,连接将会被保留.其中hard和soft都设置为0,则表示禁用buffer控制.通常hard值大于soft.')]),s._v("\nclient-output-buffer-limitnormal "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),s._v("\nclient-output-buffer-limitslave 256mb 64mb "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("60")]),s._v("\nclient-output-buffer-limitpubsub 32mb 8mb "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("60")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v('# Redis server执行后台任务的频率,默认为10,此值越大表示redis对"间歇性task"的执行次数越频繁(次数/秒)。"间歇性task"包括"过期集合"检测、关闭"空闲超时"的连接等,此值必须大于0且小于500。此值过小就意味着更多的cpu周期消耗,后台task被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。建议采用默认值。')]),s._v("\nhz "),n("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 当一个child在重写AOF文件的时候,如果aof-rewrite-incremental-fsync值为yes生效,那么这个文件会以每次32M数据的来被同步,这大量新增提交到磁盘是有用的,并且能避免高峰延迟。")]),s._v("\naof-rewrite-incremental-fsync "),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("yes")]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br"),n("span",{staticClass:"line-number"},[s._v("22")]),n("br"),n("span",{staticClass:"line-number"},[s._v("23")]),n("br"),n("span",{staticClass:"line-number"},[s._v("24")]),n("br"),n("span",{staticClass:"line-number"},[s._v("25")]),n("br"),n("span",{staticClass:"line-number"},[s._v("26")]),n("br"),n("span",{staticClass:"line-number"},[s._v("27")]),n("br"),n("span",{staticClass:"line-number"},[s._v("28")]),n("br"),n("span",{staticClass:"line-number"},[s._v("29")]),n("br"),n("span",{staticClass:"line-number"},[s._v("30")]),n("br"),n("span",{staticClass:"line-number"},[s._v("31")]),n("br"),n("span",{staticClass:"line-number"},[s._v("32")]),n("br"),n("span",{staticClass:"line-number"},[s._v("33")]),n("br"),n("span",{staticClass:"line-number"},[s._v("34")]),n("br"),n("span",{staticClass:"line-number"},[s._v("35")]),n("br"),n("span",{staticClass:"line-number"},[s._v("36")]),n("br"),n("span",{staticClass:"line-number"},[s._v("37")]),n("br"),n("span",{staticClass:"line-number"},[s._v("38")]),n("br"),n("span",{staticClass:"line-number"},[s._v("39")]),n("br"),n("span",{staticClass:"line-number"},[s._v("40")]),n("br"),n("span",{staticClass:"line-number"},[s._v("41")]),n("br"),n("span",{staticClass:"line-number"},[s._v("42")]),n("br"),n("span",{staticClass:"line-number"},[s._v("43")]),n("br"),n("span",{staticClass:"line-number"},[s._v("44")]),n("br"),n("span",{staticClass:"line-number"},[s._v("45")]),n("br"),n("span",{staticClass:"line-number"},[s._v("46")]),n("br"),n("span",{staticClass:"line-number"},[s._v("47")]),n("br"),n("span",{staticClass:"line-number"},[s._v("48")]),n("br"),n("span",{staticClass:"line-number"},[s._v("49")]),n("br"),n("span",{staticClass:"line-number"},[s._v("50")]),n("br"),n("span",{staticClass:"line-number"},[s._v("51")]),n("br"),n("span",{staticClass:"line-number"},[s._v("52")]),n("br"),n("span",{staticClass:"line-number"},[s._v("53")]),n("br"),n("span",{staticClass:"line-number"},[s._v("54")]),n("br"),n("span",{staticClass:"line-number"},[s._v("55")]),n("br"),n("span",{staticClass:"line-number"},[s._v("56")]),n("br"),n("span",{staticClass:"line-number"},[s._v("57")]),n("br"),n("span",{staticClass:"line-number"},[s._v("58")]),n("br"),n("span",{staticClass:"line-number"},[s._v("59")]),n("br"),n("span",{staticClass:"line-number"},[s._v("60")]),n("br"),n("span",{staticClass:"line-number"},[s._v("61")]),n("br"),n("span",{staticClass:"line-number"},[s._v("62")]),n("br"),n("span",{staticClass:"line-number"},[s._v("63")]),n("br"),n("span",{staticClass:"line-number"},[s._v("64")]),n("br"),n("span",{staticClass:"line-number"},[s._v("65")]),n("br"),n("span",{staticClass:"line-number"},[s._v("66")]),n("br"),n("span",{staticClass:"line-number"},[s._v("67")]),n("br"),n("span",{staticClass:"line-number"},[s._v("68")]),n("br"),n("span",{staticClass:"line-number"},[s._v("69")]),n("br"),n("span",{staticClass:"line-number"},[s._v("70")]),n("br"),n("span",{staticClass:"line-number"},[s._v("71")]),n("br"),n("span",{staticClass:"line-number"},[s._v("72")]),n("br"),n("span",{staticClass:"line-number"},[s._v("73")]),n("br"),n("span",{staticClass:"line-number"},[s._v("74")]),n("br"),n("span",{staticClass:"line-number"},[s._v("75")]),n("br"),n("span",{staticClass:"line-number"},[s._v("76")]),n("br"),n("span",{staticClass:"line-number"},[s._v("77")]),n("br"),n("span",{staticClass:"line-number"},[s._v("78")]),n("br"),n("span",{staticClass:"line-number"},[s._v("79")]),n("br"),n("span",{staticClass:"line-number"},[s._v("80")]),n("br"),n("span",{staticClass:"line-number"},[s._v("81")]),n("br"),n("span",{staticClass:"line-number"},[s._v("82")]),n("br"),n("span",{staticClass:"line-number"},[s._v("83")]),n("br"),n("span",{staticClass:"line-number"},[s._v("84")]),n("br"),n("span",{staticClass:"line-number"},[s._v("85")]),n("br"),n("span",{staticClass:"line-number"},[s._v("86")]),n("br"),n("span",{staticClass:"line-number"},[s._v("87")]),n("br"),n("span",{staticClass:"line-number"},[s._v("88")]),n("br"),n("span",{staticClass:"line-number"},[s._v("89")]),n("br"),n("span",{staticClass:"line-number"},[s._v("90")]),n("br"),n("span",{staticClass:"line-number"},[s._v("91")]),n("br"),n("span",{staticClass:"line-number"},[s._v("92")]),n("br"),n("span",{staticClass:"line-number"},[s._v("93")]),n("br"),n("span",{staticClass:"line-number"},[s._v("94")]),n("br"),n("span",{staticClass:"line-number"},[s._v("95")]),n("br"),n("span",{staticClass:"line-number"},[s._v("96")]),n("br"),n("span",{staticClass:"line-number"},[s._v("97")]),n("br"),n("span",{staticClass:"line-number"},[s._v("98")]),n("br"),n("span",{staticClass:"line-number"},[s._v("99")]),n("br"),n("span",{staticClass:"line-number"},[s._v("100")]),n("br"),n("span",{staticClass:"line-number"},[s._v("101")]),n("br"),n("span",{staticClass:"line-number"},[s._v("102")]),n("br"),n("span",{staticClass:"line-number"},[s._v("103")]),n("br"),n("span",{staticClass:"line-number"},[s._v("104")]),n("br"),n("span",{staticClass:"line-number"},[s._v("105")]),n("br"),n("span",{staticClass:"line-number"},[s._v("106")]),n("br"),n("span",{staticClass:"line-number"},[s._v("107")]),n("br"),n("span",{staticClass:"line-number"},[s._v("108")]),n("br"),n("span",{staticClass:"line-number"},[s._v("109")]),n("br"),n("span",{staticClass:"line-number"},[s._v("110")]),n("br"),n("span",{staticClass:"line-number"},[s._v("111")]),n("br"),n("span",{staticClass:"line-number"},[s._v("112")]),n("br"),n("span",{staticClass:"line-number"},[s._v("113")]),n("br"),n("span",{staticClass:"line-number"},[s._v("114")]),n("br"),n("span",{staticClass:"line-number"},[s._v("115")]),n("br"),n("span",{staticClass:"line-number"},[s._v("116")]),n("br"),n("span",{staticClass:"line-number"},[s._v("117")]),n("br"),n("span",{staticClass:"line-number"},[s._v("118")]),n("br"),n("span",{staticClass:"line-number"},[s._v("119")]),n("br"),n("span",{staticClass:"line-number"},[s._v("120")]),n("br"),n("span",{staticClass:"line-number"},[s._v("121")]),n("br"),n("span",{staticClass:"line-number"},[s._v("122")]),n("br"),n("span",{staticClass:"line-number"},[s._v("123")]),n("br"),n("span",{staticClass:"line-number"},[s._v("124")]),n("br"),n("span",{staticClass:"line-number"},[s._v("125")]),n("br"),n("span",{staticClass:"line-number"},[s._v("126")]),n("br"),n("span",{staticClass:"line-number"},[s._v("127")]),n("br"),n("span",{staticClass:"line-number"},[s._v("128")]),n("br"),n("span",{staticClass:"line-number"},[s._v("129")]),n("br"),n("span",{staticClass:"line-number"},[s._v("130")]),n("br"),n("span",{staticClass:"line-number"},[s._v("131")]),n("br"),n("span",{staticClass:"line-number"},[s._v("132")]),n("br"),n("span",{staticClass:"line-number"},[s._v("133")]),n("br"),n("span",{staticClass:"line-number"},[s._v("134")]),n("br"),n("span",{staticClass:"line-number"},[s._v("135")]),n("br"),n("span",{staticClass:"line-number"},[s._v("136")]),n("br"),n("span",{staticClass:"line-number"},[s._v("137")]),n("br"),n("span",{staticClass:"line-number"},[s._v("138")]),n("br"),n("span",{staticClass:"line-number"},[s._v("139")]),n("br"),n("span",{staticClass:"line-number"},[s._v("140")]),n("br"),n("span",{staticClass:"line-number"},[s._v("141")]),n("br"),n("span",{staticClass:"line-number"},[s._v("142")]),n("br"),n("span",{staticClass:"line-number"},[s._v("143")]),n("br"),n("span",{staticClass:"line-number"},[s._v("144")]),n("br"),n("span",{staticClass:"line-number"},[s._v("145")]),n("br"),n("span",{staticClass:"line-number"},[s._v("146")]),n("br"),n("span",{staticClass:"line-number"},[s._v("147")]),n("br"),n("span",{staticClass:"line-number"},[s._v("148")]),n("br"),n("span",{staticClass:"line-number"},[s._v("149")]),n("br"),n("span",{staticClass:"line-number"},[s._v("150")]),n("br"),n("span",{staticClass:"line-number"},[s._v("151")]),n("br")])])])}),[],!1,null,null,null);n.default=t.exports}}]); \ No newline at end of file diff --git a/assets/js/23.a3734b50.js b/assets/js/23.a3734b50.js new file mode 100644 index 0000000..4ea219e --- /dev/null +++ b/assets/js/23.a3734b50.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{367:function(s,a,t){"use strict";t.r(a);var n=t(6),e=Object(n.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h2",{attrs:{id:"安装"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#安装"}},[s._v("#")]),s._v(" 安装")]),s._v(" "),a("p",[s._v("https://blog.csdn.net/u012206617/article/details/110875428")]),s._v(" "),a("ul",[a("li",[s._v("开启认证")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 修改配置文件:/etc/mongod.conf")]),s._v("\nsecurity:\n authorization: enabled\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br")])]),a("h2",{attrs:{id:"常用命令"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常用命令"}},[s._v("#")]),s._v(" 常用命令")]),s._v(" "),a("ul",[a("li",[s._v("导入json文件")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("mongoimport -u admin -p DMZcdP123 -d uniapp_waimai -c discuss --file /home/data/db/discuss.json\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br")])]),a("ul",[a("li",[s._v("用户验证")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 查看用户")]),s._v("\nshow "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("users")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 删除用户必须由账号管理员来删,所以,切换到admin角色")]),s._v("\nuse admin\ndb.auth"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"admin"')]),s._v(","),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"password"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 删除单个用户")]),s._v("\ndb.system.users.remove"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("user:"),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"XXXXXX"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 删除所有用户")]),s._v("\ndb.system.users.remove"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h2",{attrs:{id:"开发工具"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#开发工具"}},[s._v("#")]),s._v(" 开发工具")]),s._v(" "),a("p",[a("code",[s._v("Navicat")])]),s._v(" "),a("h2",{attrs:{id:"常见问题"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#常见问题"}},[s._v("#")]),s._v(" 常见问题")]),s._v(" "),a("ul",[a("li",[s._v("mongoose和mongodb版本兼容\nhttps://mongoosejs.com/docs/compatibility.html#mongodb-server-version-compatibility")])])])}),[],!1,null,null,null);a.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/24.840a2ffa.js b/assets/js/24.840a2ffa.js new file mode 100644 index 0000000..68a4808 --- /dev/null +++ b/assets/js/24.840a2ffa.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{368:function(s,a,e){"use strict";e.r(a);var n=e(6),t=Object(n.a)({},(function(){var s=this,a=s._self._c;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h2",{attrs:{id:"运行"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#运行"}},[s._v("#")]),s._v(" 运行")]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 挂起运行")]),s._v("\nbin/zookeeper-server-start.sh config/zookeeper.properties\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 后台运行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("nohup")]),s._v(" bin/zookeeper-server-start.sh config/zookeeper.properties "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">")]),s._v("/dev/null "),a("span",{pre:!0,attrs:{class:"token operator"}},[a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[s._v("2")]),s._v(">")]),a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[s._v("&1")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 挂起运行")]),s._v("\nbin/kafka-server-start.sh config/server.properties\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 后台运行")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("nohup")]),s._v(" bin/kafka-server-start.sh config/server.properties "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">>")]),s._v("kafka.log "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("&")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])]),a("ul",[a("li",[s._v("关闭")])]),s._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[s._v("关闭挂起运行\nctrl+c\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 关闭后台运行")]),s._v("\nbin/kafka-server-stop.sh\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 关闭挂起运行")]),s._v("\nctrl+c\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("#关闭后台运行")]),s._v("\nbin/zookeeper-server-stop.sh\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br")])])])}),[],!1,null,null,null);a.default=t.exports}}]); \ No newline at end of file diff --git a/assets/js/25.1aff598b.js b/assets/js/25.1aff598b.js new file mode 100644 index 0000000..6d6ec52 --- /dev/null +++ b/assets/js/25.1aff598b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{369:function(t,s,a){"use strict";a.r(s);var r=a(6),e=Object(r.a)({},(function(){var t=this._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[t("h1",{attrs:{id:"分页"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#分页"}},[this._v("#")]),this._v(" 分页")]),this._v(" "),t("h1",{attrs:{id:"条件查询"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#条件查询"}},[this._v("#")]),this._v(" 条件查询")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/26.11b855b9.js b/assets/js/26.11b855b9.js new file mode 100644 index 0000000..b3afcfe --- /dev/null +++ b/assets/js/26.11b855b9.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{371:function(t,e,s){"use strict";s.r(e);var o=s(6),n=Object(o.a)({},(function(){var t=this,e=t._self._c;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h2",{attrs:{id:"下载最新谷歌浏览器离线安装包"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#下载最新谷歌浏览器离线安装包"}},[t._v("#")]),t._v(" 下载最新谷歌浏览器离线安装包")]),t._v(" "),e("p",[e("a",{attrs:{href:"https://www.google.com/intl/zh-CN/chrome/?standalone=1",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://www.google.com/intl/zh-CN/chrome/?standalone=1"),e("OutboundLink")],1)]),t._v(" "),e("h2",{attrs:{id:"解决-github-访问慢问题"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#解决-github-访问慢问题"}},[t._v("#")]),t._v(" 解决 github 访问慢问题")]),t._v(" "),e("ul",[e("li",[t._v("参考\n"),e("a",{attrs:{href:"https://github.com/521xueweihan/GitHub520",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/521xueweihan/GitHub520"),e("OutboundLink")],1)]),t._v(" "),e("li",[t._v("获取自动定时更新 hosts 文件\n"),e("a",{attrs:{href:"https://raw.hellogithub.com/hosts",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://raw.hellogithub.com/hosts"),e("OutboundLink")],1)]),t._v(" "),e("li",[t._v("修改 hosts 文件\n"),e("ul",[e("li",[t._v("Windows 系统:C:\\Windows\\System32\\drivers\\etc\\hosts")]),t._v(" "),e("li",[t._v("Linux 系统:/etc/hosts")]),t._v(" "),e("li",[t._v("Mac(苹果电脑)系统:/etc/hosts")]),t._v(" "),e("li",[t._v("Android(安卓)系统:/system/etc/hosts")]),t._v(" "),e("li",[t._v("iPhone(iOS)系统:/etc/hosts")])])])]),t._v(" "),e("blockquote",[e("p",[t._v("注意事项\n大部分情况下是直接生效,如未生效可尝试下面的办法,刷新 DNS:")])]),t._v(" "),e("ol",[e("li",[e("p",[t._v("Windows:在 CMD 窗口输入:"),e("code",[t._v("ipconfig /flushdns")])])]),t._v(" "),e("li",[e("p",[t._v("Linux 命令:"),e("code",[t._v("sudo nscd restart")]),t._v(",如报错则须安装:"),e("code",[t._v("sudo apt install nscd")]),t._v(" 或 "),e("code",[t._v("sudo /etc/init.d/nscd restart")])])]),t._v(" "),e("li",[e("p",[t._v("Mac 命令:"),e("code",[t._v("sudo killall -HUP mDNSResponder")])])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/assets/js/27.9c02f53e.js b/assets/js/27.9c02f53e.js new file mode 100644 index 0000000..aaa29cd --- /dev/null +++ b/assets/js/27.9c02f53e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{372:function(s,n,a){"use strict";a.r(n);var t=a(6),e=Object(t.a)({},(function(){var s=this,n=s._self._c;return n("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[n("h2",{attrs:{id:"基本配置"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#基本配置"}},[s._v("#")]),s._v(" 基本配置")]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" config --global user.name "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"xx"')]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" config --global user.email "),n("span",{pre:!0,attrs:{class:"token string"}},[s._v('"xx@xx"')]),s._v("\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br")])]),n("h2",{attrs:{id:"分支管理"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#分支管理"}},[s._v("#")]),s._v(" 分支管理")]),s._v(" "),n("div",{staticClass:"language-bash line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-bash"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 使用如下git命令查看所有远程分支:")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" branch -r\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 查看远程和本地所有分支:")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" branch -a\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 查看本地分支:")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" branch\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 在输出结果中,前面带* 的是当前分支")]),s._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 拉取远程分支并在本地切换")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" checkout -b 本地分支名x origin/远程分支名x\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 创建本地分支并推送到远程")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" checkout -b 分支名\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" push --set-upstream origin 分支名\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 删除本地分支")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" branch -d 分支名\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[s._v("# 删除远程分支")]),s._v("\n"),n("span",{pre:!0,attrs:{class:"token function"}},[s._v("git")]),s._v(" push origin -d 分支名\n")])]),s._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[s._v("1")]),n("br"),n("span",{staticClass:"line-number"},[s._v("2")]),n("br"),n("span",{staticClass:"line-number"},[s._v("3")]),n("br"),n("span",{staticClass:"line-number"},[s._v("4")]),n("br"),n("span",{staticClass:"line-number"},[s._v("5")]),n("br"),n("span",{staticClass:"line-number"},[s._v("6")]),n("br"),n("span",{staticClass:"line-number"},[s._v("7")]),n("br"),n("span",{staticClass:"line-number"},[s._v("8")]),n("br"),n("span",{staticClass:"line-number"},[s._v("9")]),n("br"),n("span",{staticClass:"line-number"},[s._v("10")]),n("br"),n("span",{staticClass:"line-number"},[s._v("11")]),n("br"),n("span",{staticClass:"line-number"},[s._v("12")]),n("br"),n("span",{staticClass:"line-number"},[s._v("13")]),n("br"),n("span",{staticClass:"line-number"},[s._v("14")]),n("br"),n("span",{staticClass:"line-number"},[s._v("15")]),n("br"),n("span",{staticClass:"line-number"},[s._v("16")]),n("br"),n("span",{staticClass:"line-number"},[s._v("17")]),n("br"),n("span",{staticClass:"line-number"},[s._v("18")]),n("br"),n("span",{staticClass:"line-number"},[s._v("19")]),n("br"),n("span",{staticClass:"line-number"},[s._v("20")]),n("br"),n("span",{staticClass:"line-number"},[s._v("21")]),n("br")])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/28.e5de8071.js b/assets/js/28.e5de8071.js new file mode 100644 index 0000000..64f7cb1 --- /dev/null +++ b/assets/js/28.e5de8071.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{373:function(t,s,a){"use strict";a.r(s);var r=a(6),l=Object(r.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h2",{attrs:{id:"tcp协议"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#tcp协议"}},[t._v("#")]),t._v(" tcp协议")]),t._v(" "),s("h2",{attrs:{id:"http协议"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#http协议"}},[t._v("#")]),t._v(" http协议")]),t._v(" "),s("ul",[s("li",[t._v("域名解析")])]),t._v(" "),s("ol",[s("li",[t._v("泛解析")]),t._v(" "),s("li",[t._v("二级域名")]),t._v(" "),s("li",[t._v("虚拟主机")])])])}),[],!1,null,null,null);s.default=l.exports}}]); \ No newline at end of file diff --git a/assets/js/29.fe9d30cf.js b/assets/js/29.fe9d30cf.js new file mode 100644 index 0000000..6ae3b47 --- /dev/null +++ b/assets/js/29.fe9d30cf.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{374:function(s,t,a){"use strict";a.r(t);var n=a(6),e=Object(n.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"最佳实践"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#最佳实践"}},[s._v("#")]),s._v(" 最佳实践")]),s._v(" "),t("h2",{attrs:{id:"java8利用stream对list进行过滤"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#java8利用stream对list进行过滤"}},[s._v("#")]),s._v(" Java8利用stream对List进行过滤")]),s._v(" "),t("div",{staticClass:"language-java line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("List")]),t("span",{pre:!0,attrs:{class:"token generics"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Map")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Object")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" result "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" list"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("stream")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("filter")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("map "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("equals")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("valueOf")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("map"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("get")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"source"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("collect")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Collectors")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("toList")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("h2",{attrs:{id:"md5加密"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#md5加密"}},[s._v("#")]),s._v(" md5加密")]),s._v(" "),t("div",{staticClass:"language-java line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("package")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("com"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("test"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("java"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("secsale"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("utils")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("import")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token import"}},[t("span",{pre:!0,attrs:{class:"token namespace"}},[s._v("org"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("apache"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("commons"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("codec"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("digest"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")])]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DigestUtils")])]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * md5工具类\n */")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("MD5Util")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" SALT"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1a2b3c4d"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("md5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" str"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("DigestUtils")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("md2Hex")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("str"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 第一次给明文加密\n * @param pass\n * @return\n */")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("encodeInput")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" pass"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" str "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" SALT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("SALT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("pass"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("SALT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("SALT"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("md5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("str"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 第二次给md5密码加密\n * @param md5Pass\n * @param salt\n * @return\n */")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("encodeMD5Password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" md5Pass"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" str "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("0")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("md5Pass"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("4")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v("salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("charAt")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("md5")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("str"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 明文--\x3e二次加密密码\n * @param input\n * @param salt\n * @return\n */")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("inputToDBPass")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" input"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" inputPass "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("encodeInput")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("input"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" dbPass "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("encodeMD5Password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("inputPass"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" salt"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" dbPass"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" args"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 0a9a4f2235db1b80a667e5ac8b14fc26")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("encodeInput")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"123456"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 2b30269b5c608096eac5a48f718be878")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("encodeMD5Password")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0a9a4f2235db1b80a667e5ac8b14fc26"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1a2b3c4d"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 2b30269b5c608096eac5a48f718be878")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("inputToDBPass")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"123456"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1a2b3c4d"')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br"),t("span",{staticClass:"line-number"},[s._v("51")]),t("br"),t("span",{staticClass:"line-number"},[s._v("52")]),t("br"),t("span",{staticClass:"line-number"},[s._v("53")]),t("br"),t("span",{staticClass:"line-number"},[s._v("54")]),t("br"),t("span",{staticClass:"line-number"},[s._v("55")]),t("br"),t("span",{staticClass:"line-number"},[s._v("56")]),t("br"),t("span",{staticClass:"line-number"},[s._v("57")]),t("br"),t("span",{staticClass:"line-number"},[s._v("58")]),t("br")])]),t("h2",{attrs:{id:"函数式接口"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#函数式接口"}},[s._v("#")]),s._v(" 函数式接口")]),s._v(" "),t("blockquote",[t("p",[s._v("任何接口,如果只包含一个抽象方法,它就是一个函数式接口。")])]),s._v(" "),t("h2",{attrs:{id:"lambda表达式"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#lambda表达式"}},[s._v("#")]),s._v(" Lambda表达式")]),s._v(" "),t("div",{staticClass:"language-java line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-java"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LambdaDemo")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 2.静态内部类")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Like2")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ILike")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I like lambda2."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("main")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("[")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("]")]),s._v(" args"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ILike")]),s._v(" like "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Like")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n like"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n like "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Like2")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n like"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 3.局部内部类")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Like3")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ILike")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I like lambda3."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n like "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Like3")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n like"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 4.匿名内部类")]),s._v("\n like "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ILike")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I like lambda4."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n like"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 5.lambda表达式")]),s._v("\n like "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I like lambda5."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n like"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("interface")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ILike")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ILike")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("void")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("lambda")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("System")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("out"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("println")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v('"I like lambda."')]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br"),t("span",{staticClass:"line-number"},[s._v("16")]),t("br"),t("span",{staticClass:"line-number"},[s._v("17")]),t("br"),t("span",{staticClass:"line-number"},[s._v("18")]),t("br"),t("span",{staticClass:"line-number"},[s._v("19")]),t("br"),t("span",{staticClass:"line-number"},[s._v("20")]),t("br"),t("span",{staticClass:"line-number"},[s._v("21")]),t("br"),t("span",{staticClass:"line-number"},[s._v("22")]),t("br"),t("span",{staticClass:"line-number"},[s._v("23")]),t("br"),t("span",{staticClass:"line-number"},[s._v("24")]),t("br"),t("span",{staticClass:"line-number"},[s._v("25")]),t("br"),t("span",{staticClass:"line-number"},[s._v("26")]),t("br"),t("span",{staticClass:"line-number"},[s._v("27")]),t("br"),t("span",{staticClass:"line-number"},[s._v("28")]),t("br"),t("span",{staticClass:"line-number"},[s._v("29")]),t("br"),t("span",{staticClass:"line-number"},[s._v("30")]),t("br"),t("span",{staticClass:"line-number"},[s._v("31")]),t("br"),t("span",{staticClass:"line-number"},[s._v("32")]),t("br"),t("span",{staticClass:"line-number"},[s._v("33")]),t("br"),t("span",{staticClass:"line-number"},[s._v("34")]),t("br"),t("span",{staticClass:"line-number"},[s._v("35")]),t("br"),t("span",{staticClass:"line-number"},[s._v("36")]),t("br"),t("span",{staticClass:"line-number"},[s._v("37")]),t("br"),t("span",{staticClass:"line-number"},[s._v("38")]),t("br"),t("span",{staticClass:"line-number"},[s._v("39")]),t("br"),t("span",{staticClass:"line-number"},[s._v("40")]),t("br"),t("span",{staticClass:"line-number"},[s._v("41")]),t("br"),t("span",{staticClass:"line-number"},[s._v("42")]),t("br"),t("span",{staticClass:"line-number"},[s._v("43")]),t("br"),t("span",{staticClass:"line-number"},[s._v("44")]),t("br"),t("span",{staticClass:"line-number"},[s._v("45")]),t("br"),t("span",{staticClass:"line-number"},[s._v("46")]),t("br"),t("span",{staticClass:"line-number"},[s._v("47")]),t("br"),t("span",{staticClass:"line-number"},[s._v("48")]),t("br"),t("span",{staticClass:"line-number"},[s._v("49")]),t("br"),t("span",{staticClass:"line-number"},[s._v("50")]),t("br")])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/assets/js/3.fc9693d7.js b/assets/js/3.fc9693d7.js new file mode 100644 index 0000000..0d66ca3 --- /dev/null +++ b/assets/js/3.fc9693d7.js @@ -0,0 +1,33 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{250:function(t,e,n){(function(t){var r; +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */(function(){var i="Expected a function",o="__lodash_placeholder__",s=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],a="[object Arguments]",u="[object Array]",c="[object Boolean]",h="[object Date]",l="[object Error]",f="[object Function]",p="[object GeneratorFunction]",d="[object Map]",g="[object Number]",v="[object Object]",y="[object RegExp]",m="[object Set]",_="[object String]",b="[object Symbol]",k="[object WeakMap]",w="[object ArrayBuffer]",x="[object DataView]",P="[object Float32Array]",T="[object Float64Array]",S="[object Int8Array]",C="[object Int16Array]",O="[object Int32Array]",E="[object Uint8Array]",M="[object Uint16Array]",L="[object Uint32Array]",I=/\b__p \+= '';/g,A=/\b(__p \+=) '' \+/g,B=/(__e\(.*?\)|\b__t\)) \+\n'';/g,X=/&(?:amp|lt|gt|quot|#39);/g,Y=/[&<>"']/g,j=RegExp(X.source),D=RegExp(Y.source),z=/<%-([\s\S]+?)%>/g,R=/<%([\s\S]+?)%>/g,F=/<%=([\s\S]+?)%>/g,H=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,W=/^\w*$/,N=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,U=/[\\^$.*+?()[\]{}|]/g,q=RegExp(U.source),K=/^\s+/,$=/\s/,Z=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,G=/\{\n\/\* \[wrapped with (.+)\] \*/,V=/,? & /,J=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Q=/[()=,{}\[\]\/\s]/,tt=/\\(\\)?/g,et=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,nt=/\w*$/,rt=/^[-+]0x[0-9a-f]+$/i,it=/^0b[01]+$/i,ot=/^\[object .+?Constructor\]$/,st=/^0o[0-7]+$/i,at=/^(?:0|[1-9]\d*)$/,ut=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ct=/($^)/,ht=/['\n\r\u2028\u2029\\]/g,lt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",ft="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",pt="[\\ud800-\\udfff]",dt="["+ft+"]",gt="["+lt+"]",vt="\\d+",yt="[\\u2700-\\u27bf]",mt="[a-z\\xdf-\\xf6\\xf8-\\xff]",_t="[^\\ud800-\\udfff"+ft+vt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",bt="\\ud83c[\\udffb-\\udfff]",kt="[^\\ud800-\\udfff]",wt="(?:\\ud83c[\\udde6-\\uddff]){2}",xt="[\\ud800-\\udbff][\\udc00-\\udfff]",Pt="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Tt="(?:"+mt+"|"+_t+")",St="(?:"+Pt+"|"+_t+")",Ct="(?:"+gt+"|"+bt+")"+"?",Ot="[\\ufe0e\\ufe0f]?"+Ct+("(?:\\u200d(?:"+[kt,wt,xt].join("|")+")[\\ufe0e\\ufe0f]?"+Ct+")*"),Et="(?:"+[yt,wt,xt].join("|")+")"+Ot,Mt="(?:"+[kt+gt+"?",gt,wt,xt,pt].join("|")+")",Lt=RegExp("['’]","g"),It=RegExp(gt,"g"),At=RegExp(bt+"(?="+bt+")|"+Mt+Ot,"g"),Bt=RegExp([Pt+"?"+mt+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[dt,Pt,"$"].join("|")+")",St+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[dt,Pt+Tt,"$"].join("|")+")",Pt+"?"+Tt+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Pt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",vt,Et].join("|"),"g"),Xt=RegExp("[\\u200d\\ud800-\\udfff"+lt+"\\ufe0e\\ufe0f]"),Yt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,jt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Dt=-1,zt={};zt[P]=zt[T]=zt[S]=zt[C]=zt[O]=zt[E]=zt["[object Uint8ClampedArray]"]=zt[M]=zt[L]=!0,zt[a]=zt[u]=zt[w]=zt[c]=zt[x]=zt[h]=zt[l]=zt[f]=zt[d]=zt[g]=zt[v]=zt[y]=zt[m]=zt[_]=zt[k]=!1;var Rt={};Rt[a]=Rt[u]=Rt[w]=Rt[x]=Rt[c]=Rt[h]=Rt[P]=Rt[T]=Rt[S]=Rt[C]=Rt[O]=Rt[d]=Rt[g]=Rt[v]=Rt[y]=Rt[m]=Rt[_]=Rt[b]=Rt[E]=Rt["[object Uint8ClampedArray]"]=Rt[M]=Rt[L]=!0,Rt[l]=Rt[f]=Rt[k]=!1;var Ft={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Ht=parseFloat,Wt=parseInt,Nt="object"==typeof global&&global&&global.Object===Object&&global,Ut="object"==typeof self&&self&&self.Object===Object&&self,qt=Nt||Ut||Function("return this")(),Kt=e&&!e.nodeType&&e,$t=Kt&&"object"==typeof t&&t&&!t.nodeType&&t,Zt=$t&&$t.exports===Kt,Gt=Zt&&Nt.process,Vt=function(){try{var t=$t&&$t.require&&$t.require("util").types;return t||Gt&&Gt.binding&&Gt.binding("util")}catch(t){}}(),Jt=Vt&&Vt.isArrayBuffer,Qt=Vt&&Vt.isDate,te=Vt&&Vt.isMap,ee=Vt&&Vt.isRegExp,ne=Vt&&Vt.isSet,re=Vt&&Vt.isTypedArray;function ie(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function oe(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i-1}function le(t,e,n){for(var r=-1,i=null==t?0:t.length;++r-1;);return n}function Be(t,e){for(var n=t.length;n--&&be(e,t[n],0)>-1;);return n}function Xe(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}var Ye=Te({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),je=Te({"&":"&","<":"<",">":">",'"':""","'":"'"});function De(t){return"\\"+Ft[t]}function ze(t){return Xt.test(t)}function Re(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}function Fe(t,e){return function(n){return t(e(n))}}function He(t,e){for(var n=-1,r=t.length,i=0,s=[];++n",""":'"',"'":"'"});var Ze=function t(e){var n,r=(e=null==e?qt:Ze.defaults(qt.Object(),e,Ze.pick(qt,jt))).Array,$=e.Date,lt=e.Error,ft=e.Function,pt=e.Math,dt=e.Object,gt=e.RegExp,vt=e.String,yt=e.TypeError,mt=r.prototype,_t=ft.prototype,bt=dt.prototype,kt=e["__core-js_shared__"],wt=_t.toString,xt=bt.hasOwnProperty,Pt=0,Tt=(n=/[^.]+$/.exec(kt&&kt.keys&&kt.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",St=bt.toString,Ct=wt.call(dt),Ot=qt._,Et=gt("^"+wt.call(xt).replace(U,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Mt=Zt?e.Buffer:void 0,At=e.Symbol,Xt=e.Uint8Array,Ft=Mt?Mt.allocUnsafe:void 0,Nt=Fe(dt.getPrototypeOf,dt),Ut=dt.create,Kt=bt.propertyIsEnumerable,$t=mt.splice,Gt=At?At.isConcatSpreadable:void 0,Vt=At?At.iterator:void 0,ye=At?At.toStringTag:void 0,Te=function(){try{var t=to(dt,"defineProperty");return t({},"",{}),t}catch(t){}}(),Ge=e.clearTimeout!==qt.clearTimeout&&e.clearTimeout,Ve=$&&$.now!==qt.Date.now&&$.now,Je=e.setTimeout!==qt.setTimeout&&e.setTimeout,Qe=pt.ceil,tn=pt.floor,en=dt.getOwnPropertySymbols,nn=Mt?Mt.isBuffer:void 0,rn=e.isFinite,on=mt.join,sn=Fe(dt.keys,dt),an=pt.max,un=pt.min,cn=$.now,hn=e.parseInt,ln=pt.random,fn=mt.reverse,pn=to(e,"DataView"),dn=to(e,"Map"),gn=to(e,"Promise"),vn=to(e,"Set"),yn=to(e,"WeakMap"),mn=to(dt,"create"),_n=yn&&new yn,bn={},kn=Oo(pn),wn=Oo(dn),xn=Oo(gn),Pn=Oo(vn),Tn=Oo(yn),Sn=At?At.prototype:void 0,Cn=Sn?Sn.valueOf:void 0,On=Sn?Sn.toString:void 0;function En(t){if(Us(t)&&!Bs(t)&&!(t instanceof An)){if(t instanceof In)return t;if(xt.call(t,"__wrapped__"))return Eo(t)}return new In(t)}var Mn=function(){function t(){}return function(e){if(!Ns(e))return{};if(Ut)return Ut(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();function Ln(){}function In(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}function An(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Bn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e=e?t:e)),t}function Vn(t,e,n,r,i,o){var s,u=1&e,l=2&e,k=4&e;if(n&&(s=i?n(t,r,i,o):n(t)),void 0!==s)return s;if(!Ns(t))return t;var I=Bs(t);if(I){if(s=function(t){var e=t.length,n=new t.constructor(e);e&&"string"==typeof t[0]&&xt.call(t,"index")&&(n.index=t.index,n.input=t.input);return n}(t),!u)return mi(t,s)}else{var A=ro(t),B=A==f||A==p;if(Ds(t))return fi(t,u);if(A==v||A==a||B&&!i){if(s=l||B?{}:oo(t),!u)return l?function(t,e){return _i(t,no(t),e)}(t,function(t,e){return t&&_i(e,wa(e),t)}(s,t)):function(t,e){return _i(t,eo(t),e)}(t,Kn(s,t))}else{if(!Rt[A])return i?t:{};s=function(t,e,n){var r=t.constructor;switch(e){case w:return pi(t);case c:case h:return new r(+t);case x:return function(t,e){var n=e?pi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case P:case T:case S:case C:case O:case E:case"[object Uint8ClampedArray]":case M:case L:return di(t,n);case d:return new r;case g:case _:return new r(t);case y:return function(t){var e=new t.constructor(t.source,nt.exec(t));return e.lastIndex=t.lastIndex,e}(t);case m:return new r;case b:return i=t,Cn?dt(Cn.call(i)):{}}var i}(t,A,u)}}o||(o=new Dn);var X=o.get(t);if(X)return X;o.set(t,s),Gs(t)?t.forEach((function(r){s.add(Vn(r,e,n,r,t,o))})):qs(t)&&t.forEach((function(r,i){s.set(i,Vn(r,e,n,i,t,o))}));var Y=I?void 0:(k?l?Ki:qi:l?wa:ka)(t);return se(Y||t,(function(r,i){Y&&(r=t[i=r]),Nn(s,i,Vn(r,e,n,i,t,o))})),s}function Jn(t,e,n){var r=n.length;if(null==t)return!r;for(t=dt(t);r--;){var i=n[r],o=e[i],s=t[i];if(void 0===s&&!(i in t)||!o(s))return!1}return!0}function Qn(t,e,n){if("function"!=typeof t)throw new yt(i);return ko((function(){t.apply(void 0,n)}),e)}function tr(t,e,n,r){var i=-1,o=he,s=!0,a=t.length,u=[],c=e.length;if(!a)return u;n&&(e=fe(e,Me(n))),r?(o=le,s=!1):e.length>=200&&(o=Ie,s=!1,e=new jn(e));t:for(;++i-1},Xn.prototype.set=function(t,e){var n=this.__data__,r=Un(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},Yn.prototype.clear=function(){this.size=0,this.__data__={hash:new Bn,map:new(dn||Xn),string:new Bn}},Yn.prototype.delete=function(t){var e=Ji(this,t).delete(t);return this.size-=e?1:0,e},Yn.prototype.get=function(t){return Ji(this,t).get(t)},Yn.prototype.has=function(t){return Ji(this,t).has(t)},Yn.prototype.set=function(t,e){var n=Ji(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},jn.prototype.add=jn.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},jn.prototype.has=function(t){return this.__data__.has(t)},Dn.prototype.clear=function(){this.__data__=new Xn,this.size=0},Dn.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Dn.prototype.get=function(t){return this.__data__.get(t)},Dn.prototype.has=function(t){return this.__data__.has(t)},Dn.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Xn){var r=n.__data__;if(!dn||r.length<199)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new Yn(r)}return n.set(t,e),this.size=n.size,this};var er=wi(cr),nr=wi(hr,!0);function rr(t,e){var n=!0;return er(t,(function(t,r,i){return n=!!e(t,r,i)})),n}function ir(t,e,n){for(var r=-1,i=t.length;++r0&&n(a)?e>1?sr(a,e-1,n,r,i):pe(i,a):r||(i[i.length]=a)}return i}var ar=xi(),ur=xi(!0);function cr(t,e){return t&&ar(t,e,ka)}function hr(t,e){return t&&ur(t,e,ka)}function lr(t,e){return ce(e,(function(e){return Fs(t[e])}))}function fr(t,e){for(var n=0,r=(e=ui(e,t)).length;null!=t&&ne}function vr(t,e){return null!=t&&xt.call(t,e)}function yr(t,e){return null!=t&&e in dt(t)}function mr(t,e,n){for(var i=n?le:he,o=t[0].length,s=t.length,a=s,u=r(s),c=1/0,h=[];a--;){var l=t[a];a&&e&&(l=fe(l,Me(e))),c=un(l.length,c),u[a]=!n&&(e||o>=120&&l.length>=120)?new jn(a&&l):void 0}l=t[0];var f=-1,p=u[0];t:for(;++f=a)return u;var c=n[r];return u*("desc"==c?-1:1)}}return t.index-e.index}(t,e,n)}))}function Br(t,e,n){for(var r=-1,i=e.length,o={};++r-1;)a!==t&&$t.call(a,u,1),$t.call(t,u,1);return t}function Yr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;ao(i)?$t.call(t,i,1):ti(t,i)}}return t}function jr(t,e){return t+tn(ln()*(e-t+1))}function Dr(t,e){var n="";if(!t||e<1||e>9007199254740991)return n;do{e%2&&(n+=t),(e=tn(e/2))&&(t+=t)}while(e);return n}function zr(t,e){return wo(vo(t,e,Ka),t+"")}function Rr(t){return Rn(Ma(t))}function Fr(t,e){var n=Ma(t);return To(n,Gn(e,0,n.length))}function Hr(t,e,n,r){if(!Ns(t))return t;for(var i=-1,o=(e=ui(e,t)).length,s=o-1,a=t;null!=a&&++io?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var s=r(o);++i>>1,s=t[o];null!==s&&!Js(s)&&(n?s<=e:s=200){var c=e?null:Di(t);if(c)return We(c);s=!1,i=Ie,u=new jn}else u=e?[]:a;t:for(;++r=r?t:qr(t,e,n)}var li=Ge||function(t){return qt.clearTimeout(t)};function fi(t,e){if(e)return t.slice();var n=t.length,r=Ft?Ft(n):new t.constructor(n);return t.copy(r),r}function pi(t){var e=new t.constructor(t.byteLength);return new Xt(e).set(new Xt(t)),e}function di(t,e){var n=e?pi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function gi(t,e){if(t!==e){var n=void 0!==t,r=null===t,i=t==t,o=Js(t),s=void 0!==e,a=null===e,u=e==e,c=Js(e);if(!a&&!c&&!o&&t>e||o&&s&&u&&!a&&!c||r&&s&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,s&&uo(n[0],n[1],s)&&(o=i<3?void 0:o,i=1),e=dt(e);++r-1?i[o?e[s]:s]:void 0}}function Oi(t){return Ui((function(e){var n=e.length,r=n,o=In.prototype.thru;for(t&&e.reverse();r--;){var s=e[r];if("function"!=typeof s)throw new yt(i);if(o&&!a&&"wrapper"==Zi(s))var a=new In([],!0)}for(r=a?r:n;++r1&&_.reverse(),l&&ca))return!1;var c=o.get(t),h=o.get(e);if(c&&h)return c==e&&h==t;var l=-1,f=!0,p=2&n?new jn:void 0;for(o.set(t,e),o.set(e,t);++l-1&&t%1==0&&t1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Z,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return se(s,(function(n){var r="_."+n[0];e&n[1]&&!he(t,r)&&t.push(r)})),t.sort()}(function(t){var e=t.match(G);return e?e[1].split(V):[]}(r),n)))}function Po(t){var e=0,n=0;return function(){var r=cn(),i=16-(r-n);if(n=r,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function To(t,e){var n=-1,r=t.length,i=r-1;for(e=void 0===e?r:e;++n1?t[e-1]:void 0;return n="function"==typeof n?(t.pop(),n):void 0,Zo(t,n)}));function ns(t){var e=En(t);return e.__chain__=!0,e}function rs(t,e){return e(t)}var is=Ui((function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return Zn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof An&&ao(n)?((r=r.slice(n,+n+(e?1:0))).__actions__.push({func:rs,args:[i],thisArg:void 0}),new In(r,this.__chain__).thru((function(t){return e&&!t.length&&t.push(void 0),t}))):this.thru(i)}));var os=bi((function(t,e,n){xt.call(t,n)?++t[n]:$n(t,n,1)}));var ss=Ci(Ao),as=Ci(Bo);function us(t,e){return(Bs(t)?se:er)(t,Vi(e,3))}function cs(t,e){return(Bs(t)?ae:nr)(t,Vi(e,3))}var hs=bi((function(t,e,n){xt.call(t,n)?t[n].push(e):$n(t,n,[e])}));var ls=zr((function(t,e,n){var i=-1,o="function"==typeof e,s=Ys(t)?r(t.length):[];return er(t,(function(t){s[++i]=o?ie(e,t,n):_r(t,e,n)})),s})),fs=bi((function(t,e,n){$n(t,n,e)}));function ps(t,e){return(Bs(t)?fe:Or)(t,Vi(e,3))}var ds=bi((function(t,e,n){t[n?0:1].push(e)}),(function(){return[[],[]]}));var gs=zr((function(t,e){if(null==t)return[];var n=e.length;return n>1&&uo(t,e[0],e[1])?e=[]:n>2&&uo(e[0],e[1],e[2])&&(e=[e[0]]),Ar(t,sr(e,1),[])})),vs=Ve||function(){return qt.Date.now()};function ys(t,e,n){return e=n?void 0:e,Ri(t,128,void 0,void 0,void 0,void 0,e=t&&null==e?t.length:e)}function ms(t,e){var n;if("function"!=typeof e)throw new yt(i);return t=ia(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=void 0),n}}var _s=zr((function(t,e,n){var r=1;if(n.length){var i=He(n,Gi(_s));r|=32}return Ri(t,r,e,n,i)})),bs=zr((function(t,e,n){var r=3;if(n.length){var i=He(n,Gi(bs));r|=32}return Ri(e,r,t,n,i)}));function ks(t,e,n){var r,o,s,a,u,c,h=0,l=!1,f=!1,p=!0;if("function"!=typeof t)throw new yt(i);function d(e){var n=r,i=o;return r=o=void 0,h=e,a=t.apply(i,n)}function g(t){return h=t,u=ko(y,e),l?d(t):a}function v(t){var n=t-c;return void 0===c||n>=e||n<0||f&&t-h>=s}function y(){var t=vs();if(v(t))return m(t);u=ko(y,function(t){var n=e-(t-c);return f?un(n,s-(t-h)):n}(t))}function m(t){return u=void 0,p&&r?d(t):(r=o=void 0,a)}function _(){var t=vs(),n=v(t);if(r=arguments,o=this,c=t,n){if(void 0===u)return g(c);if(f)return li(u),u=ko(y,e),d(c)}return void 0===u&&(u=ko(y,e)),a}return e=sa(e)||0,Ns(n)&&(l=!!n.leading,s=(f="maxWait"in n)?an(sa(n.maxWait)||0,e):s,p="trailing"in n?!!n.trailing:p),_.cancel=function(){void 0!==u&&li(u),h=0,r=c=o=u=void 0},_.flush=function(){return void 0===u?a:m(vs())},_}var ws=zr((function(t,e){return Qn(t,1,e)})),xs=zr((function(t,e,n){return Qn(t,sa(e)||0,n)}));function Ps(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new yt(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var s=t.apply(this,r);return n.cache=o.set(i,s)||o,s};return n.cache=new(Ps.Cache||Yn),n}function Ts(t){if("function"!=typeof t)throw new yt(i);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}Ps.Cache=Yn;var Ss=ci((function(t,e){var n=(e=1==e.length&&Bs(e[0])?fe(e[0],Me(Vi())):fe(sr(e,1),Me(Vi()))).length;return zr((function(r){for(var i=-1,o=un(r.length,n);++i=e})),As=br(function(){return arguments}())?br:function(t){return Us(t)&&xt.call(t,"callee")&&!Kt.call(t,"callee")},Bs=r.isArray,Xs=Jt?Me(Jt):function(t){return Us(t)&&dr(t)==w};function Ys(t){return null!=t&&Ws(t.length)&&!Fs(t)}function js(t){return Us(t)&&Ys(t)}var Ds=nn||su,zs=Qt?Me(Qt):function(t){return Us(t)&&dr(t)==h};function Rs(t){if(!Us(t))return!1;var e=dr(t);return e==l||"[object DOMException]"==e||"string"==typeof t.message&&"string"==typeof t.name&&!$s(t)}function Fs(t){if(!Ns(t))return!1;var e=dr(t);return e==f||e==p||"[object AsyncFunction]"==e||"[object Proxy]"==e}function Hs(t){return"number"==typeof t&&t==ia(t)}function Ws(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function Ns(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Us(t){return null!=t&&"object"==typeof t}var qs=te?Me(te):function(t){return Us(t)&&ro(t)==d};function Ks(t){return"number"==typeof t||Us(t)&&dr(t)==g}function $s(t){if(!Us(t)||dr(t)!=v)return!1;var e=Nt(t);if(null===e)return!0;var n=xt.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&wt.call(n)==Ct}var Zs=ee?Me(ee):function(t){return Us(t)&&dr(t)==y};var Gs=ne?Me(ne):function(t){return Us(t)&&ro(t)==m};function Vs(t){return"string"==typeof t||!Bs(t)&&Us(t)&&dr(t)==_}function Js(t){return"symbol"==typeof t||Us(t)&&dr(t)==b}var Qs=re?Me(re):function(t){return Us(t)&&Ws(t.length)&&!!zt[dr(t)]};var ta=Xi(Cr),ea=Xi((function(t,e){return t<=e}));function na(t){if(!t)return[];if(Ys(t))return Vs(t)?qe(t):mi(t);if(Vt&&t[Vt])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[Vt]());var e=ro(t);return(e==d?Re:e==m?We:Ma)(t)}function ra(t){return t?(t=sa(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ia(t){var e=ra(t),n=e%1;return e==e?n?e-n:e:0}function oa(t){return t?Gn(ia(t),0,4294967295):0}function sa(t){if("number"==typeof t)return t;if(Js(t))return NaN;if(Ns(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Ns(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=Ee(t);var n=it.test(t);return n||st.test(t)?Wt(t.slice(2),n?2:8):rt.test(t)?NaN:+t}function aa(t){return _i(t,wa(t))}function ua(t){return null==t?"":Jr(t)}var ca=ki((function(t,e){if(fo(e)||Ys(e))_i(e,ka(e),t);else for(var n in e)xt.call(e,n)&&Nn(t,n,e[n])})),ha=ki((function(t,e){_i(e,wa(e),t)})),la=ki((function(t,e,n,r){_i(e,wa(e),t,r)})),fa=ki((function(t,e,n,r){_i(e,ka(e),t,r)})),pa=Ui(Zn);var da=zr((function(t,e){t=dt(t);var n=-1,r=e.length,i=r>2?e[2]:void 0;for(i&&uo(e[0],e[1],i)&&(r=1);++n1),e})),_i(t,Ki(t),n),r&&(n=Vn(n,7,Wi));for(var i=e.length;i--;)ti(n,e[i]);return n}));var Sa=Ui((function(t,e){return null==t?{}:function(t,e){return Br(t,e,(function(e,n){return ya(t,n)}))}(t,e)}));function Ca(t,e){if(null==t)return{};var n=fe(Ki(t),(function(t){return[t]}));return e=Vi(e),Br(t,n,(function(t,n){return e(t,n[0])}))}var Oa=zi(ka),Ea=zi(wa);function Ma(t){return null==t?[]:Le(t,ka(t))}var La=Ti((function(t,e,n){return e=e.toLowerCase(),t+(n?Ia(e):e)}));function Ia(t){return Ra(ua(t).toLowerCase())}function Aa(t){return(t=ua(t))&&t.replace(ut,Ye).replace(It,"")}var Ba=Ti((function(t,e,n){return t+(n?"-":"")+e.toLowerCase()})),Xa=Ti((function(t,e,n){return t+(n?" ":"")+e.toLowerCase()})),Ya=Pi("toLowerCase");var ja=Ti((function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}));var Da=Ti((function(t,e,n){return t+(n?" ":"")+Ra(e)}));var za=Ti((function(t,e,n){return t+(n?" ":"")+e.toUpperCase()})),Ra=Pi("toUpperCase");function Fa(t,e,n){return t=ua(t),void 0===(e=n?void 0:e)?function(t){return Yt.test(t)}(t)?function(t){return t.match(Bt)||[]}(t):function(t){return t.match(J)||[]}(t):t.match(e)||[]}var Ha=zr((function(t,e){try{return ie(t,void 0,e)}catch(t){return Rs(t)?t:new lt(t)}})),Wa=Ui((function(t,e){return se(e,(function(e){e=Co(e),$n(t,e,_s(t[e],t))})),t}));function Na(t){return function(){return t}}var Ua=Oi(),qa=Oi(!0);function Ka(t){return t}function $a(t){return Pr("function"==typeof t?t:Vn(t,1))}var Za=zr((function(t,e){return function(n){return _r(n,t,e)}})),Ga=zr((function(t,e){return function(n){return _r(t,n,e)}}));function Va(t,e,n){var r=ka(e),i=lr(e,r);null!=n||Ns(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=lr(e,ka(e)));var o=!(Ns(n)&&"chain"in n&&!n.chain),s=Fs(t);return se(i,(function(n){var r=e[n];t[n]=r,s&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__),i=n.__actions__=mi(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,pe([this.value()],arguments))})})),t}function Ja(){}var Qa=Ii(fe),tu=Ii(ue),eu=Ii(ve);function nu(t){return co(t)?Pe(Co(t)):function(t){return function(e){return fr(e,t)}}(t)}var ru=Bi(),iu=Bi(!0);function ou(){return[]}function su(){return!1}var au=Li((function(t,e){return t+e}),0),uu=ji("ceil"),cu=Li((function(t,e){return t/e}),1),hu=ji("floor");var lu,fu=Li((function(t,e){return t*e}),1),pu=ji("round"),du=Li((function(t,e){return t-e}),0);return En.after=function(t,e){if("function"!=typeof e)throw new yt(i);return t=ia(t),function(){if(--t<1)return e.apply(this,arguments)}},En.ary=ys,En.assign=ca,En.assignIn=ha,En.assignInWith=la,En.assignWith=fa,En.at=pa,En.before=ms,En.bind=_s,En.bindAll=Wa,En.bindKey=bs,En.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Bs(t)?t:[t]},En.chain=ns,En.chunk=function(t,e,n){e=(n?uo(t,e,n):void 0===e)?1:an(ia(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var o=0,s=0,a=r(Qe(i/e));oi?0:i+n),(r=void 0===r||r>i?i:ia(r))<0&&(r+=i),r=n>r?0:oa(r);n>>0)?(t=ua(t))&&("string"==typeof e||null!=e&&!Zs(e))&&!(e=Jr(e))&&ze(t)?hi(qe(t),0,n):t.split(e,n):[]},En.spread=function(t,e){if("function"!=typeof t)throw new yt(i);return e=null==e?0:an(ia(e),0),zr((function(n){var r=n[e],i=hi(n,0,e);return r&&pe(i,r),ie(t,this,i)}))},En.tail=function(t){var e=null==t?0:t.length;return e?qr(t,1,e):[]},En.take=function(t,e,n){return t&&t.length?qr(t,0,(e=n||void 0===e?1:ia(e))<0?0:e):[]},En.takeRight=function(t,e,n){var r=null==t?0:t.length;return r?qr(t,(e=r-(e=n||void 0===e?1:ia(e)))<0?0:e,r):[]},En.takeRightWhile=function(t,e){return t&&t.length?ni(t,Vi(e,3),!1,!0):[]},En.takeWhile=function(t,e){return t&&t.length?ni(t,Vi(e,3)):[]},En.tap=function(t,e){return e(t),t},En.throttle=function(t,e,n){var r=!0,o=!0;if("function"!=typeof t)throw new yt(i);return Ns(n)&&(r="leading"in n?!!n.leading:r,o="trailing"in n?!!n.trailing:o),ks(t,e,{leading:r,maxWait:e,trailing:o})},En.thru=rs,En.toArray=na,En.toPairs=Oa,En.toPairsIn=Ea,En.toPath=function(t){return Bs(t)?fe(t,Co):Js(t)?[t]:mi(So(ua(t)))},En.toPlainObject=aa,En.transform=function(t,e,n){var r=Bs(t),i=r||Ds(t)||Qs(t);if(e=Vi(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:Ns(t)&&Fs(o)?Mn(Nt(t)):{}}return(i?se:cr)(t,(function(t,r,i){return e(n,t,r,i)})),n},En.unary=function(t){return ys(t,1)},En.union=Uo,En.unionBy=qo,En.unionWith=Ko,En.uniq=function(t){return t&&t.length?Qr(t):[]},En.uniqBy=function(t,e){return t&&t.length?Qr(t,Vi(e,2)):[]},En.uniqWith=function(t,e){return e="function"==typeof e?e:void 0,t&&t.length?Qr(t,void 0,e):[]},En.unset=function(t,e){return null==t||ti(t,e)},En.unzip=$o,En.unzipWith=Zo,En.update=function(t,e,n){return null==t?t:ei(t,e,ai(n))},En.updateWith=function(t,e,n,r){return r="function"==typeof r?r:void 0,null==t?t:ei(t,e,ai(n),r)},En.values=Ma,En.valuesIn=function(t){return null==t?[]:Le(t,wa(t))},En.without=Go,En.words=Fa,En.wrap=function(t,e){return Cs(ai(e),t)},En.xor=Vo,En.xorBy=Jo,En.xorWith=Qo,En.zip=ts,En.zipObject=function(t,e){return oi(t||[],e||[],Nn)},En.zipObjectDeep=function(t,e){return oi(t||[],e||[],Hr)},En.zipWith=es,En.entries=Oa,En.entriesIn=Ea,En.extend=ha,En.extendWith=la,Va(En,En),En.add=au,En.attempt=Ha,En.camelCase=La,En.capitalize=Ia,En.ceil=uu,En.clamp=function(t,e,n){return void 0===n&&(n=e,e=void 0),void 0!==n&&(n=(n=sa(n))==n?n:0),void 0!==e&&(e=(e=sa(e))==e?e:0),Gn(sa(t),e,n)},En.clone=function(t){return Vn(t,4)},En.cloneDeep=function(t){return Vn(t,5)},En.cloneDeepWith=function(t,e){return Vn(t,5,e="function"==typeof e?e:void 0)},En.cloneWith=function(t,e){return Vn(t,4,e="function"==typeof e?e:void 0)},En.conformsTo=function(t,e){return null==e||Jn(t,e,ka(e))},En.deburr=Aa,En.defaultTo=function(t,e){return null==t||t!=t?e:t},En.divide=cu,En.endsWith=function(t,e,n){t=ua(t),e=Jr(e);var r=t.length,i=n=void 0===n?r:Gn(ia(n),0,r);return(n-=e.length)>=0&&t.slice(n,i)==e},En.eq=Ms,En.escape=function(t){return(t=ua(t))&&D.test(t)?t.replace(Y,je):t},En.escapeRegExp=function(t){return(t=ua(t))&&q.test(t)?t.replace(U,"\\$&"):t},En.every=function(t,e,n){var r=Bs(t)?ue:rr;return n&&uo(t,e,n)&&(e=void 0),r(t,Vi(e,3))},En.find=ss,En.findIndex=Ao,En.findKey=function(t,e){return me(t,Vi(e,3),cr)},En.findLast=as,En.findLastIndex=Bo,En.findLastKey=function(t,e){return me(t,Vi(e,3),hr)},En.floor=hu,En.forEach=us,En.forEachRight=cs,En.forIn=function(t,e){return null==t?t:ar(t,Vi(e,3),wa)},En.forInRight=function(t,e){return null==t?t:ur(t,Vi(e,3),wa)},En.forOwn=function(t,e){return t&&cr(t,Vi(e,3))},En.forOwnRight=function(t,e){return t&&hr(t,Vi(e,3))},En.get=va,En.gt=Ls,En.gte=Is,En.has=function(t,e){return null!=t&&io(t,e,vr)},En.hasIn=ya,En.head=Yo,En.identity=Ka,En.includes=function(t,e,n,r){t=Ys(t)?t:Ma(t),n=n&&!r?ia(n):0;var i=t.length;return n<0&&(n=an(i+n,0)),Vs(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&be(t,e,n)>-1},En.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:ia(n);return i<0&&(i=an(r+i,0)),be(t,e,i)},En.inRange=function(t,e,n){return e=ra(e),void 0===n?(n=e,e=0):n=ra(n),function(t,e,n){return t>=un(e,n)&&t=-9007199254740991&&t<=9007199254740991},En.isSet=Gs,En.isString=Vs,En.isSymbol=Js,En.isTypedArray=Qs,En.isUndefined=function(t){return void 0===t},En.isWeakMap=function(t){return Us(t)&&ro(t)==k},En.isWeakSet=function(t){return Us(t)&&"[object WeakSet]"==dr(t)},En.join=function(t,e){return null==t?"":on.call(t,e)},En.kebabCase=Ba,En.last=Ro,En.lastIndexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return void 0!==n&&(i=(i=ia(n))<0?an(r+i,0):un(i,r-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,i):_e(t,we,i,!0)},En.lowerCase=Xa,En.lowerFirst=Ya,En.lt=ta,En.lte=ea,En.max=function(t){return t&&t.length?ir(t,Ka,gr):void 0},En.maxBy=function(t,e){return t&&t.length?ir(t,Vi(e,2),gr):void 0},En.mean=function(t){return xe(t,Ka)},En.meanBy=function(t,e){return xe(t,Vi(e,2))},En.min=function(t){return t&&t.length?ir(t,Ka,Cr):void 0},En.minBy=function(t,e){return t&&t.length?ir(t,Vi(e,2),Cr):void 0},En.stubArray=ou,En.stubFalse=su,En.stubObject=function(){return{}},En.stubString=function(){return""},En.stubTrue=function(){return!0},En.multiply=fu,En.nth=function(t,e){return t&&t.length?Ir(t,ia(e)):void 0},En.noConflict=function(){return qt._===this&&(qt._=Ot),this},En.noop=Ja,En.now=vs,En.pad=function(t,e,n){t=ua(t);var r=(e=ia(e))?Ue(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Ai(tn(i),n)+t+Ai(Qe(i),n)},En.padEnd=function(t,e,n){t=ua(t);var r=(e=ia(e))?Ue(t):0;return e&&re){var r=t;t=e,e=r}if(n||t%1||e%1){var i=ln();return un(t+i*(e-t+Ht("1e-"+((i+"").length-1))),e)}return jr(t,e)},En.reduce=function(t,e,n){var r=Bs(t)?de:Se,i=arguments.length<3;return r(t,Vi(e,4),n,i,er)},En.reduceRight=function(t,e,n){var r=Bs(t)?ge:Se,i=arguments.length<3;return r(t,Vi(e,4),n,i,nr)},En.repeat=function(t,e,n){return e=(n?uo(t,e,n):void 0===e)?1:ia(e),Dr(ua(t),e)},En.replace=function(){var t=arguments,e=ua(t[0]);return t.length<3?e:e.replace(t[1],t[2])},En.result=function(t,e,n){var r=-1,i=(e=ui(e,t)).length;for(i||(i=1,t=void 0);++r9007199254740991)return[];var n=4294967295,r=un(t,4294967295);t-=4294967295;for(var i=Oe(r,e=Vi(e));++n=o)return t;var a=n-Ue(r);if(a<1)return r;var u=s?hi(s,0,a).join(""):t.slice(0,a);if(void 0===i)return u+r;if(s&&(a+=u.length-a),Zs(i)){if(t.slice(a).search(i)){var c,h=u;for(i.global||(i=gt(i.source,ua(nt.exec(i))+"g")),i.lastIndex=0;c=i.exec(h);)var l=c.index;u=u.slice(0,void 0===l?a:l)}}else if(t.indexOf(Jr(i),a)!=a){var f=u.lastIndexOf(i);f>-1&&(u=u.slice(0,f))}return u+r},En.unescape=function(t){return(t=ua(t))&&j.test(t)?t.replace(X,$e):t},En.uniqueId=function(t){var e=++Pt;return ua(t)+e},En.upperCase=za,En.upperFirst=Ra,En.each=us,En.eachRight=cs,En.first=Yo,Va(En,(lu={},cr(En,(function(t,e){xt.call(En.prototype,e)||(lu[e]=t)})),lu),{chain:!1}),En.VERSION="4.17.21",se(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){En[t].placeholder=En})),se(["drop","take"],(function(t,e){An.prototype[t]=function(n){n=void 0===n?1:an(ia(n),0);var r=this.__filtered__&&!e?new An(this):this.clone();return r.__filtered__?r.__takeCount__=un(n,r.__takeCount__):r.__views__.push({size:un(n,4294967295),type:t+(r.__dir__<0?"Right":"")}),r},An.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}})),se(["filter","map","takeWhile"],(function(t,e){var n=e+1,r=1==n||3==n;An.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Vi(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}})),se(["head","last"],(function(t,e){var n="take"+(e?"Right":"");An.prototype[t]=function(){return this[n](1).value()[0]}})),se(["initial","tail"],(function(t,e){var n="drop"+(e?"":"Right");An.prototype[t]=function(){return this.__filtered__?new An(this):this[n](1)}})),An.prototype.compact=function(){return this.filter(Ka)},An.prototype.find=function(t){return this.filter(t).head()},An.prototype.findLast=function(t){return this.reverse().find(t)},An.prototype.invokeMap=zr((function(t,e){return"function"==typeof t?new An(this):this.map((function(n){return _r(n,t,e)}))})),An.prototype.reject=function(t){return this.filter(Ts(Vi(t)))},An.prototype.slice=function(t,e){t=ia(t);var n=this;return n.__filtered__&&(t>0||e<0)?new An(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),void 0!==e&&(n=(e=ia(e))<0?n.dropRight(-e):n.take(e-t)),n)},An.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},An.prototype.toArray=function(){return this.take(4294967295)},cr(An.prototype,(function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),r=/^(?:head|last)$/.test(e),i=En[r?"take"+("last"==e?"Right":""):e],o=r||/^find/.test(e);i&&(En.prototype[e]=function(){var e=this.__wrapped__,s=r?[1]:arguments,a=e instanceof An,u=s[0],c=a||Bs(e),h=function(t){var e=i.apply(En,pe([t],s));return r&&l?e[0]:e};c&&n&&"function"==typeof u&&1!=u.length&&(a=c=!1);var l=this.__chain__,f=!!this.__actions__.length,p=o&&!l,d=a&&!f;if(!o&&c){e=d?e:new An(this);var g=t.apply(e,s);return g.__actions__.push({func:rs,args:[h],thisArg:void 0}),new In(g,l)}return p&&d?t.apply(this,s):(g=this.thru(h),p?r?g.value()[0]:g.value():g)})})),se(["pop","push","shift","sort","splice","unshift"],(function(t){var e=mt[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);En.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(Bs(i)?i:[],t)}return this[n]((function(n){return e.apply(Bs(n)?n:[],t)}))}})),cr(An.prototype,(function(t,e){var n=En[e];if(n){var r=n.name+"";xt.call(bn,r)||(bn[r]=[]),bn[r].push({name:e,func:n})}})),bn[Ei(void 0,2).name]=[{name:"wrapper",func:void 0}],An.prototype.clone=function(){var t=new An(this.__wrapped__);return t.__actions__=mi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=mi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=mi(this.__views__),t},An.prototype.reverse=function(){if(this.__filtered__){var t=new An(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},An.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=Bs(t),r=e<0,i=n?t.length:0,o=function(t,e,n){var r=-1,i=n.length;for(;++r=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},En.prototype.plant=function(t){for(var e,n=this;n instanceof Ln;){var r=Eo(n);r.__index__=0,r.__values__=void 0,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e},En.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof An){var e=t;return this.__actions__.length&&(e=new An(this)),(e=e.reverse()).__actions__.push({func:rs,args:[No],thisArg:void 0}),new In(e,this.__chain__)}return this.thru(No)},En.prototype.toJSON=En.prototype.valueOf=En.prototype.value=function(){return ri(this.__wrapped__,this.__actions__)},En.prototype.first=En.prototype.head,Vt&&(En.prototype[Vt]=function(){return this}),En}();qt._=Ze,void 0===(r=function(){return Ze}.call(e,n,e,t))||(t.exports=r)}).call(this)}).call(this,n(48)(t))},251:function(t,e,n){},257:function(t,e){t.exports=function(t){return null==t}},270:function(t,e,n){"use strict";var r=Object.assign||function(t){for(var e=1;e0,p=function(){if("string"==typeof h){var t=/os (\d\d?_\d(_\d)?)/.exec(h);if(!t)return!1;var e=t[1].split("_").map((function(t){return parseInt(t,10)}));return!!(13===e[0]&&e[1]>=4)}return!1}(),d=!1;if(c){try{var g={};Object.defineProperty(g,"passive",{get:function(){d=!0}}),window.addEventListener("test-passive",(function(){}),g)}catch(t){}}function v(){return window.performance&&window.performance.now&&window.performance.timing?window.performance.now()+window.performance.timing.navigationStart:+new Date}var y=function(t,e){for(var n in e)t[n]=e[n];return t};function m(t){return null==t}function _(t,e,n){return tn?n:t}var b=c&&document.createElement("div").style,k=function(){if(!c)return!1;for(var t=0,e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}];tdocument.documentElement.clientWidth-u||a>document.documentElement.clientHeight-u||s0?-1:n<0?1:0},o=i(e.x,t.x),s=i(e.y,t.y),a=n.x-r.x,u=n.y-r.y;return o*a<=0&&s*u<=0})(t,e,o,r)&&n.hooks.trigger(n.hooks.eventTypes.move,o),n.pending||(n.callStopWhenPending?n.callStopWhenPending=!1:n.hooks.trigger(n.hooks.eventTypes.end,o)),r=o,n.pending&&(n.timer=F(i))};this.callStopWhenPending&&this.setCallStop(!1),H(this.timer),i()},e.prototype.transitionTime=function(t){void 0===t&&(t=0),this.style[I.transitionDuration]=t+"ms",this.hooks.trigger(this.hooks.eventTypes.time,t)},e.prototype.transitionTimingFunction=function(t){this.style[I.transitionTimingFunction]=t,this.hooks.trigger(this.hooks.eventTypes.timeFunction,t)},e.prototype.transitionProperty=function(){this.style[I.transitionProperty]=I.transform},e.prototype.move=function(t,e,n,r){this.setPending(n>0),this.transitionTimingFunction(r),this.transitionProperty(),this.transitionTime(n),this.translate(e);var i=3===this.options.probeType;n&&i&&this.startProbe(t,e),n||(this._reflow=this.content.offsetHeight,i&&this.hooks.trigger(this.hooks.eventTypes.move,e),this.hooks.trigger(this.hooks.eventTypes.end,e))},e.prototype.doStop=function(){var t=this.pending;if(this.setForceStopped(!1),this.setCallStop(!1),t){this.setPending(!1),H(this.timer);var e=this.translater.getComputedPosition(),n=e.x,r=e.y;this.transitionTime(),this.translate({x:n,y:r}),this.setForceStopped(!0),this.setCallStop(!0),this.hooks.trigger(this.hooks.eventTypes.forceStop,{x:n,y:r})}return t},e.prototype.stop=function(){this.doStop()&&this.hooks.trigger(this.hooks.eventTypes.callStop)},e}(V),Q=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i(e,t),e.prototype.move=function(t,e,n,r){if(!n)return this.translate(e),3===this.options.probeType&&this.hooks.trigger(this.hooks.eventTypes.move,e),void this.hooks.trigger(this.hooks.eventTypes.end,e);this.animate(t,e,n,r)},e.prototype.animate=function(t,e,n,r){var i=this,o=v(),s=o+n,a=3===this.options.probeType,u=function(){var c=v();if(c>=s)return i.translate(e),a&&i.hooks.trigger(i.hooks.eventTypes.move,e),void i.hooks.trigger(i.hooks.eventTypes.end,e);var h=r(c=(c-o)/n),l={};Object.keys(e).forEach((function(n){var r=t[n],i=e[n];l[n]=(i-r)*h+r})),i.translate(l),a&&i.hooks.trigger(i.hooks.eventTypes.move,l),i.pending&&(i.timer=F(u)),i.pending||(i.callStopWhenPending?i.callStopWhenPending=!1:i.hooks.trigger(i.hooks.eventTypes.end,e))};this.setPending(!0),this.callStopWhenPending&&this.setCallStop(!1),H(this.timer),u()},e.prototype.doStop=function(){var t=this.pending;if(this.setForceStopped(!1),this.setCallStop(!1),t){this.setPending(!1),H(this.timer);var e=this.translater.getComputedPosition();this.setForceStopped(!0),this.setCallStop(!0),this.hooks.trigger(this.hooks.eventTypes.forceStop,e)}return t},e.prototype.stop=function(){this.doStop()&&this.hooks.trigger(this.hooks.eventTypes.callStop)},e}(V);var tt,et,nt,rt,it=function(){function t(t,e,n){this.wrapper=t,this.options=n,this.hooks=new U(["beforeComputeBoundary","computeBoundary","momentum","end","ignoreHasScroll"]),this.refresh(e)}return t.prototype.start=function(){this.dist=0,this.setMovingDirection(0),this.setDirection(0)},t.prototype.move=function(t){return t=this.hasScroll?t:0,this.setMovingDirection(t),this.performDampingAlgorithm(t,this.options.outOfBoundaryDampingFactor)},t.prototype.setMovingDirection=function(t){this.movingDirection=t>0?-1:t<0?1:0},t.prototype.setDirection=function(t){this.direction=t>0?-1:t<0?1:0},t.prototype.performDampingAlgorithm=function(t,e){var n=this.currentPos+t;return(n>this.minScrollPos||nthis.minScrollPos&&this.options.bounces[0]||nthis.minScrollPos?this.minScrollPos:this.maxScrollPos),n},t.prototype.end=function(t){var e={duration:0},n=Math.abs(this.currentPos-this.startPos);if(this.options.momentum&&tthis.options.momentumLimitDistance){var r=-1===this.direction&&this.options.bounces[0]||1===this.direction&&this.options.bounces[1]?this.wrapperSize:0;e=this.hasScroll?this.momentum(this.currentPos,this.startPos,t,this.maxScrollPos,this.minScrollPos,r,this.options):{destination:this.currentPos,duration:0}}else this.hooks.trigger(this.hooks.eventTypes.end,e);return e},t.prototype.momentum=function(t,e,n,r,i,o,s){void 0===s&&(s=this.options);var a=t-e,u=Math.abs(a)/n,c=s.deceleration,h=s.swipeBounceTime,l=s.swipeTime,f={destination:t+u*u/c*(a<0?-1:1),duration:Math.min(l,2*u/c),rate:15};return this.hooks.trigger(this.hooks.eventTypes.momentum,f,a),f.destinationi&&(f.destination=o?Math.min(i+o/4,i+o/f.rate*u):i,f.duration=h),f.destination=Math.round(f.destination),f},t.prototype.updateDirection=function(){var t=this.currentPos-this.absStartPos;this.setDirection(t)},t.prototype.refresh=function(t){var e=this.options.rect,n=e.size,r=e.position,i="static"===window.getComputedStyle(this.wrapper,null).position,o=B(this.wrapper);this.wrapperSize=this.wrapper["width"===n?"clientWidth":"clientHeight"],this.setContent(t);var s=B(this.content);this.contentSize=s[n],this.relativeOffset=s[r],i&&(this.relativeOffset-=o[r]),this.computeBoundary(),this.setDirection(0)},t.prototype.setContent=function(t){t!==this.content&&(this.content=t,this.resetState())},t.prototype.resetState=function(){this.currentPos=0,this.startPos=0,this.dist=0,this.setDirection(0),this.setMovingDirection(0),this.resetStartPos()},t.prototype.computeBoundary=function(){this.hooks.trigger(this.hooks.eventTypes.beforeComputeBoundary);var t={minScrollPos:0,maxScrollPos:this.wrapperSize-this.contentSize};t.maxScrollPos<0&&(t.maxScrollPos-=this.relativeOffset,0===this.options.specifiedIndexAsContent&&(t.minScrollPos=-this.relativeOffset)),this.hooks.trigger(this.hooks.eventTypes.computeBoundary,t),this.minScrollPos=t.minScrollPos,this.maxScrollPos=t.maxScrollPos,this.hasScroll=this.options.scrollable&&this.maxScrollPosthis.minScrollPos?t=this.minScrollPos:te+this.directionLockThreshold?this.directionLocked="horizontal":e>=t+this.directionLockThreshold?this.directionLocked="vertical":this.directionLocked="none")},t.prototype.handleEventPassthrough=function(t){var e=st[this.directionLocked];if(e){if(this.eventPassthrough===e.yes)return ot.yes(t);if(this.eventPassthrough===e.no)return ot.no(t)}return!1},t}(),ut=function(){function t(t,e,n,r,i){this.hooks=new U(["start","beforeMove","scrollStart","scroll","beforeEnd","end","scrollEnd","contentNotMoved","detectMovingDirection","coordinateTransformation"]),this.scrollBehaviorX=t,this.scrollBehaviorY=e,this.actionsHandler=n,this.animater=r,this.options=i,this.directionLockAction=new at(i.directionLockThreshold,i.freeScroll,i.eventPassthrough),this.enabled=!0,this.bindActionsHandler()}return t.prototype.bindActionsHandler=function(){var t=this;this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.start,(function(e){return!t.enabled||t.handleStart(e)})),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.move,(function(e){var n=e.deltaX,r=e.deltaY,i=e.e;if(!t.enabled)return!0;var o=function(t,e,n){return 2===n?[e,-t]:3===n?[-t,-e]:4===n?[-e,t]:[t,e]}(n,r,t.options.quadrant),s={deltaX:o[0],deltaY:o[1]};return t.hooks.trigger(t.hooks.eventTypes.coordinateTransformation,s),t.handleMove(s.deltaX,s.deltaY,i)})),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.end,(function(e){return!t.enabled||t.handleEnd(e)})),this.actionsHandler.hooks.on(this.actionsHandler.hooks.eventTypes.click,(function(e){t.enabled&&!e._constructed&&t.handleClick(e)}))},t.prototype.handleStart=function(t){var e=v();this.fingerMoved=!1,this.contentMoved=!1,this.startTime=e,this.directionLockAction.reset(),this.scrollBehaviorX.start(),this.scrollBehaviorY.start(),this.animater.doStop(),this.scrollBehaviorX.resetStartPos(),this.scrollBehaviorY.resetStartPos(),this.hooks.trigger(this.hooks.eventTypes.start,t)},t.prototype.handleMove=function(t,e,n){if(!this.hooks.trigger(this.hooks.eventTypes.beforeMove,n)){var r=this.scrollBehaviorX.getAbsDist(t),i=this.scrollBehaviorY.getAbsDist(e),o=v();if(this.checkMomentum(r,i,o))return!0;if(this.directionLockAction.checkMovingDirection(r,i,n))return this.actionsHandler.setInitiated(),!0;var s=this.directionLockAction.adjustDelta(t,e),a=this.scrollBehaviorX.getCurrentPos(),u=this.scrollBehaviorX.move(s.deltaX),c=this.scrollBehaviorY.getCurrentPos(),h=this.scrollBehaviorY.move(s.deltaY);if(!this.hooks.trigger(this.hooks.eventTypes.detectMovingDirection)){this.fingerMoved||(this.fingerMoved=!0);var l=u!==a||h!==c;this.contentMoved||l||this.hooks.trigger(this.hooks.eventTypes.contentNotMoved),!this.contentMoved&&l&&(this.contentMoved=!0,this.hooks.trigger(this.hooks.eventTypes.scrollStart)),this.contentMoved&&l&&(this.animater.translate({x:u,y:h}),this.dispatchScroll(o))}}},t.prototype.dispatchScroll=function(t){t-this.startTime>this.options.momentumLimitTime&&(this.startTime=t,this.scrollBehaviorX.updateStartPos(),this.scrollBehaviorY.updateStartPos(),1===this.options.probeType&&this.hooks.trigger(this.hooks.eventTypes.scroll,this.getCurrentPos())),this.options.probeType>1&&this.hooks.trigger(this.hooks.eventTypes.scroll,this.getCurrentPos())},t.prototype.checkMomentum=function(t,e,n){return n-this.endTime>this.options.momentumLimitTime&&e0?Math.ceil(e):Math.floor(e),n=n>0?Math.ceil(n):Math.floor(n),{x:e=_(e,o,i),y:n=_(n,u,a)}},t.prototype.handleClick=function(t){X(t.target,this.options.preventDefaultException)||(t.preventDefault(),t.stopPropagation())},t.prototype.getCurrentPos=function(){return{x:this.scrollBehaviorX.getCurrentPos(),y:this.scrollBehaviorY.getCurrentPos()}},t.prototype.refresh=function(){this.endTime=0},t.prototype.destroy=function(){this.hooks.destroy()},t}();function ct(t,e,n,r){var i=["momentum","momentumLimitTime","momentumLimitDistance","deceleration","swipeBounceTime","swipeTime","outOfBoundaryDampingFactor","specifiedIndexAsContent"].reduce((function(e,n){return e[n]=t[n],e}),{});return i.scrollable=!!t[e],i.bounces=n,i.rect=r,i}function ht(t,e,n){n.forEach((function(n){var r,i;"string"==typeof n?r=i=n:(r=n.source,i=n.target),t.on(r,(function(){for(var t=[],n=0;n1&&t1||e>1))return!0},t.prototype.momentum=function(t,e){var n={time:0,easing:D.swiper,newX:t.x,newY:t.y},r=this.scrollBehaviorX.end(e),i=this.scrollBehaviorY.end(e);if(n.newX=m(r.destination)?n.newX:r.destination,n.newY=m(i.destination)?n.newY:i.destination,n.time=Math.max(r.duration,i.duration),this.hooks.trigger(this.hooks.eventTypes.momentum,n,this),n.newX!==t.x||n.newY!==t.y)return(n.newX>this.scrollBehaviorX.minScrollPos||n.newXthis.scrollBehaviorY.minScrollPos||n.newY=4)}}();if(i){try{var s={};Object.defineProperty(s,"passive",{get:function(){!0}}),window.addEventListener("test-passive",(function(){}),s)}catch(t){}}var a=function(t,e){for(var n in e)t[n]=e[n];return t};function u(t,e,n){return tn?n:t}var c=i&&document.createElement("div").style,h=function(){if(!i)return!1;for(var t=0,e=[{key:"standard",value:"transform"},{key:"webkit",value:"webkitTransform"},{key:"Moz",value:"MozTransform"},{key:"O",value:"OTransform"},{key:"ms",value:"msTransform"}];t=this.pages[n][0].cx);n++);for(i=this.pages[n].length;r=this.pages[0][r].cy);r++);return{pageX:n,pageY:r}},t.prototype.buildPagesMatrix=function(t,e){var n,r,i,o,s=[],a=0,u=0,c=this.scroll.scroller.scrollBehaviorX.maxScrollPos,h=this.scroll.scroller.scrollBehaviorY.maxScrollPos;for(r=Math.round(t/2),i=Math.round(e/2);a>-this.scrollerWidth;){for(s[u]=[],o=0,n=0;n>-this.scrollerHeight;)s[u][o]={x:Math.max(a,c),y:Math.max(n,h),width:t,height:e,cx:a-r,cy:n-i},n-=e,o++;a-=t,u++}return s},t}(),d={pageX:0,pageY:0,x:0,y:0},g=function(){function t(t,e){this.scroll=t,this.slideOptions=e,this.slideX=!1,this.slideY=!1,this.currentPage=a({},d)}return t.prototype.refresh=function(){this.pagesMatrix=new p(this.scroll),this.checkSlideLoop(),this.currentPage=this.getAdjustedCurrentPage()},t.prototype.getAdjustedCurrentPage=function(){var t=this.currentPage,e=t.pageX,n=t.pageY;e=Math.min(e,this.pagesMatrix.pageLengthOfX-1),n=Math.min(n,this.pagesMatrix.pageLengthOfY-1),this.loopX&&(e=Math.min(e,this.pagesMatrix.pageLengthOfX-2)),this.loopY&&(n=Math.min(n,this.pagesMatrix.pageLengthOfY-2));var r=this.pagesMatrix.getPageStats(e,n);return{pageX:e,pageY:n,x:r.x,y:r.y}},t.prototype.setCurrentPage=function(t){this.currentPage=t},t.prototype.getInternalPage=function(t,e){t>=this.pagesMatrix.pageLengthOfX?t=this.pagesMatrix.pageLengthOfX-1:t<0&&(t=0),e>=this.pagesMatrix.pageLengthOfY?e=this.pagesMatrix.pageLengthOfY-1:e<0&&(e=0);var n=this.pagesMatrix.getPageStats(t,e);return{pageX:t,pageY:e,x:n.x,y:n.y}},t.prototype.getInitialPage=function(t,e){void 0===t&&(t=!1),void 0===e&&(e=!1);var n=this.slideOptions,r=n.startPageXIndex,i=n.startPageYIndex,o=this.loopX?1:0,s=this.loopY?1:0,a=t?o:this.currentPage.pageX,u=t?s:this.currentPage.pageY;e?(a=this.loopX?r+1:r,u=this.loopY?i+1:i):(a=t?o:this.currentPage.pageX,u=t?s:this.currentPage.pageY);var c=this.pagesMatrix.getPageStats(a,u);return{pageX:a,pageY:u,x:c.x,y:c.y}},t.prototype.getExposedPage=function(t){var e=a({},t);return this.loopX&&(e.pageX=this.fixedPage(e.pageX,this.pagesMatrix.pageLengthOfX-2)),this.loopY&&(e.pageY=this.fixedPage(e.pageY,this.pagesMatrix.pageLengthOfY-2)),e},t.prototype.getExposedPageByPageIndex=function(t,e){var n={pageX:t,pageY:e};this.loopX&&(n.pageX=t+1),this.loopY&&(n.pageY=e+1);var r=this.pagesMatrix.getPageStats(n.pageX,n.pageY);return{x:r.x,y:r.y,pageX:t,pageY:e}},t.prototype.getWillChangedPage=function(t){return t=a({},t),this.loopX&&(t.pageX=this.fixedPage(t.pageX,this.pagesMatrix.pageLengthOfX-2),t.x=this.pagesMatrix.getPageStats(t.pageX+1,0).x),this.loopY&&(t.pageY=this.fixedPage(t.pageY,this.pagesMatrix.pageLengthOfY-2),t.y=this.pagesMatrix.getPageStats(0,t.pageY+1).y),t},t.prototype.fixedPage=function(t,e){for(var n=[],r=0;r1?this.slideX=!0:this.slideX=!1,this.pagesMatrix.pages[0]&&this.pagesMatrix.pageLengthOfY>1?this.slideY=!0:this.slideY=!1,this.loopX=this.wannaLoop&&this.slideX,this.loopY=this.wannaLoop&&this.slideY,this.slideX&&this.slideY&&r("slide does not support two direction at the same time.")},t}(),v=[{key:"next",name:"next"},{key:"prev",name:"prev"},{key:"goToPage",name:"goToPage"},{key:"getCurrentPage",name:"getCurrentPage"},{key:"startPlay",name:"startPlay"},{key:"pausePlay",name:"pausePlay"}].map((function(t){return{key:t.key,sourceKey:"plugins.slide."+t.name}})),y=function(){function t(t){this.scroll=t,this.cachedClonedPageDOM=[],this.resetLooping=!1,this.autoplayTimer=0,this.satisfyInitialization()&&this.init()}return t.prototype.satisfyInitialization=function(){return!(this.scroll.scroller.content.children.length<=0)||(r("slide need at least one slide page to be initialised.please check your DOM layout."),!1)},t.prototype.init=function(){this.willChangeToPage=a({},d),this.handleBScroll(),this.handleOptions(),this.handleHooks(),this.createPages()},t.prototype.createPages=function(){this.pages=new g(this.scroll,this.options)},t.prototype.handleBScroll=function(){this.scroll.registerType(["slideWillChange","slidePageChanged"]),this.scroll.proxy(v)},t.prototype.handleOptions=function(){var t=!0===this.scroll.options.slide?{}:this.scroll.options.slide,e={loop:!0,threshold:.1,speed:400,easing:f.bounce,listenFlick:!0,autoplay:!0,interval:3e3,startPageXIndex:0,startPageYIndex:0};this.options=a(e,t)},t.prototype.handleLoop=function(t){var e=this.options.loop,n=this.scroll.scroller.content,r=n.children.length;e&&(n!==t?(this.resetLoopChangedStatus(),this.removeClonedSlidePage(t),r>1&&this.cloneFirstAndLastSlidePage(n)):3===r&&this.initialised?(this.removeClonedSlidePage(n),this.moreToOnePageInLoop=!0,this.oneToMorePagesInLoop=!1):r>1?(this.initialised&&0===this.cachedClonedPageDOM.length?(this.oneToMorePagesInLoop=!0,this.moreToOnePageInLoop=!1):(this.removeClonedSlidePage(n),this.resetLoopChangedStatus()),this.cloneFirstAndLastSlidePage(n)):this.resetLoopChangedStatus())},t.prototype.resetLoopChangedStatus=function(){this.moreToOnePageInLoop=!1,this.oneToMorePagesInLoop=!1},t.prototype.handleHooks=function(){var t=this,e=this.scroll.hooks,n=this.scroll.scroller.hooks,r=this.options.listenFlick;this.prevContent=this.scroll.scroller.content,this.hooksFn=[],this.registerHooks(this.scroll,this.scroll.eventTypes.beforeScrollStart,this.pausePlay),this.registerHooks(this.scroll,this.scroll.eventTypes.scrollEnd,this.modifyCurrentPage),this.registerHooks(this.scroll,this.scroll.eventTypes.scrollEnd,this.startPlay),this.scroll.eventTypes.mousewheelMove&&(this.registerHooks(this.scroll,this.scroll.eventTypes.mousewheelMove,(function(){return!0})),this.registerHooks(this.scroll,this.scroll.eventTypes.mousewheelEnd,(function(e){1!==e.directionX&&1!==e.directionY||t.next(),-1!==e.directionX&&-1!==e.directionY||t.prev()}))),this.registerHooks(e,e.eventTypes.refresh,this.refreshHandler),this.registerHooks(e,e.eventTypes.destroy,this.destroy),this.registerHooks(n,n.eventTypes.beforeRefresh,(function(){t.handleLoop(t.prevContent),t.setSlideInlineStyle()})),this.registerHooks(n,n.eventTypes.momentum,this.modifyScrollMetaHandler),this.registerHooks(n,n.eventTypes.scroll,this.scrollHandler),this.registerHooks(n,n.eventTypes.checkClick,this.startPlay),r&&this.registerHooks(n,n.eventTypes.flick,this.flickHandler)},t.prototype.startPlay=function(){var t=this,e=this.options,n=e.interval;e.autoplay&&(clearTimeout(this.autoplayTimer),this.autoplayTimer=window.setTimeout((function(){t.next()}),n))},t.prototype.pausePlay=function(){this.options.autoplay&&clearTimeout(this.autoplayTimer)},t.prototype.setSlideInlineStyle=function(){var t=this.scroll.scroller,e=t.content,n=t.wrapper,r=this.scroll.options;[{direction:"scrollX",sizeType:"offsetWidth",styleType:"width"},{direction:"scrollY",sizeType:"offsetHeight",styleType:"height"}].forEach((function(t){var i=t.direction,o=t.sizeType,s=t.styleType;if(r[i]){for(var a=n[o],u=e.children,c=u.length,h=0;h1?arguments[1]:void 0)}}),o("findLastIndex")},291:function(t,e,n){var r=n(292),i=n(43),o=n(45),s=n(47),a=function(t){var e=1==t;return function(n,a,u){for(var c,h=o(n),l=i(h),f=r(a,u),p=s(l);p-- >0;)if(f(c=l[p],p,h))switch(t){case 0:return c;case 1:return p}return e?-1:void 0}};t.exports={findLast:a(0),findLastIndex:a(1)}},292:function(t,e,n){var r=n(1),i=n(44),o=n(25),s=r(r.bind);t.exports=function(t,e){return i(t),void 0===e?t:o?s(t,e):function(){return t.apply(e,arguments)}}},293:function(t,e,n){var r=n(27),i=n(294),o=n(15).f,s=r("unscopables"),a=Array.prototype;null==a[s]&&o(a,s,{configurable:!0,value:i(null)}),t.exports=function(t){a[s][t]=!0}},294:function(t,e,n){var r,i=n(24),o=n(295),s=n(95),a=n(46),u=n(297),c=n(96),h=n(98),l=h("IE_PROTO"),f=function(){},p=function(t){return" - - - -
- - - -
- - - - -``` - -## vue 父组件传递方法 :和@的区别 - -1. `@`是 v-on 指令的简写,表示监听事件; - 用于父子组件之间方法的传递 - `@`是 v-on 的简写,是为组件绑定事件,子组件不需要接收,在子组件的$listeners上可以找到,可以使用`this.$emit('xxx')`手动触发,这样就会触发事件上绑定的函数 - v-on:abc 其原理相当于父组件给子组件传了一个邮箱地址 abc,子组件需要的时候往这个地址发邮件,父组件就能从邮件里拿到子组件发送的信息。 - -2. `:`是 v-bind 指令的简写,表示绑定参数。 - 用于父子组件之间值传递 - `:`是 `v-bind` 的简写,是为组件传递属性,这里属性可以是任意类型的,在子组件中需要使用 props 接收,在子组件的$props上可以找到(对于未使用props接收的属性,可以在$attrs 上找到),如果传入的数据是一个函数,那么就可以使用 this.xxx(),手动调用函数。 - -# 模块系统 - -推荐创建一个 components 目录,并将每个组件放置在其各自的文件中,然后你需要在局部注册之前导入每个你想使用的组件。例如,在一个假设的 ComponentB.js 或 ComponentB.vue 文件中: - -```js -import ComponentA from "./ComponentA"; -import ComponentC from "./ComponentC"; - -export default { - components: { - ComponentA, - ComponentC, - }, - // ... -}; -``` - -## Props - -> Spring boot+VUE 实现 token 验证,通常你希望每个 prop 都有指定的值类型 - -```js -props: { - title: String, - likes: Number, - isPublished: Boolean, - commentIds: Array, - author: Object, - callback: Function, - contactsPromise: Promise // or any other constructor -} -``` - -## 单向数据流 - -> 所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解 - -# 插槽 - -## 具名插槽 - -## 作用域插槽 - -## 动态组件 - -> 在动态组件上使用 keep-alive -> 当在这些组件之间切换的时候,你有时会想保持这些组件的状态,以避免反复重新渲染导致的性能问题。例如我们来展开说一说这个多标签界面: -> ![](./imgs/2023-02-23-10-10-20.png) - -```html - - - - -``` - -## 异步组件 - -## 访问父级组件实例 - -$parent property 可以用来从一个子组件访问父组件的实例。它提供了一种机会,可以在后期随时触达父级组件,以替代将数据以 prop 的方式传入子组件的方式 - -## 访问子组件实例或子元素 - -```html - -``` - -现在在你已经定义了这个 ref 的组件里: -`this.$refs.usernameInput` - -# 可复用性和组合 - -## 自定义指令 - -```js -directives: { - focus: { - // 指令的定义 - inserted: function (el) { - el.focus() - } - } -} -``` - -```html - -``` - -## 钩子函数 - -## 过滤器 - -> Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 - -```html - -{{ message | capitalize }} - - -
-``` - -```js -filters: { - capitalize: function (value) { - if (!value) return '' - value = value.toString() - return value.charAt(0).toUpperCase() + value.slice(1) - } -} -``` - -# Vue CLI - -> Vue2.0 脚手架,CLI (@vue/cli) 是一个全局安装的 npm 包,提供了终端里的 vue 命令。它可以通过 vue create 快速搭建一个新项目,或者直接通过 vue serve 构建新想法的原型。你也可以通过 vue ui 通过一套图形化界面管理你的所有项目。 - -```bash -npm install -g @vue/cli -vue --version -# 创建项目 -vue create vue-hello -# 手动选择插件 选取Router, Vuex插件 -cd vue-hello -npm run serve -访问:http://localhost:8080/ -``` - -![](./imgs/2023-02-23-17-42-35.png) - -# 路由 Vue-router - -## router-link 和 router-view - -当安装了 vue-router 后,就可以使用 router-link 代替 a 链接。 -![](./imgs/2023-03-02-17-07-19.png) - -# Vuex 状态管理 - -> 如果你有一处需要被多个实例间共享的状态,可以简单地通过维护一份数据来实现共享,为了解决这个问题,我们采用一个简单的 `store 模式`: -> ![](./imgs/2023-02-24-10-54-04.png) - -- 视图(view)发送动作(action)到派发器(dispatcher) -- 派发器(dispatcher)发送动作(action)到每一个存储(store) -- 存储(store)发送数据(data)到视图(view) - [mapMutations 详细讲解](https://blog.csdn.net/feifantiantang/article/details/111995635) - -# mixin 混入 - -> 将组件的公共逻辑或者配置提取出来,哪个组件需要用到时,直接将提取的这部分混入到组件内部即可。这样既可以减少代码冗余度,也可以让后期维护起来更加容易. - -- 和 vuex 区别: - -1. Vuex 公共状态管理,如果在一个组件中更改了 Vuex 中的某个数据,那么其它所有引用了 Vuex 中该数据的组件也会跟着变化。 -2. Mixin 中的数据和方法都是独立的,组件之间使用后是互相不影响的 - -```js -// src/mixin/index.js -import { mixins } from "./mixin/index"; -export default { - name: "App", - mixins: [mixins], - components: {}, - created() { - console.log("组件调用minxi数据", this.msg); - }, - mounted() { - console.log("我是组件的mounted生命周期函数"); - }, -}; -``` - -```js -import { mixins } from "./mixin/index"; -export default { - name: "App", - mixins: [mixins], - components: {}, - created() { - console.log("组件调用minxi数据", this.msg); - }, - mounted() { - console.log("我是组件的mounted生命周期函数"); - }, -}; -``` - -- 全局混入 - -```js -import { mixins } from "./mixin/index"; -Vue.mixin(mixins); -``` - -# 插件 plugin - -# 过滤器 - -> Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化 - -```html - -{{ message | capitalize }} - - -
-``` - -```js -filters: { - capitalize: function (value) { - if (!value) return '' - value = value.toString() - return value.charAt(0).toUpperCase() + value.slice(1) - } -} -// 或者 -Vue.filter('capitalize', function (value) { - if (!value) return '' - value = value.toString() - return value.charAt(0).toUpperCase() + value.slice(1) -}) -``` - -# webstorage - -- sessionStorage: 浏览器关闭后清除 -- localStorage:举例:电商网站搜索历史 - -# watch 深度监视 - -# this.$emit('事件名',param)子组件触发自定义绑定事件 diff --git "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-22-10-22-46.png" "b/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-22-10-22-46.png" deleted file mode 100644 index 94447c0..0000000 Binary files "a/docs/04.Web\345\274\200\345\217\221/04.JS\346\241\206\346\236\266/imgs/2023-02-22-10-22-46.png" and /dev/null differ diff --git "a/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/01.\350\256\241\347\256\227\346\234\272\345\216\237\347\220\206.md" "b/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/01.\350\256\241\347\256\227\346\234\272\345\216\237\347\220\206.md" deleted file mode 100644 index a9ccae0..0000000 --- "a/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/01.\350\256\241\347\256\227\346\234\272\345\216\237\347\220\206.md" +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 计算机原理 -date: 2022-08-11 15:46:04 -permalink: /pages/4b4042/ ---- diff --git "a/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/02.\346\225\260\346\215\256\347\273\223\346\236\204.md" "b/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/02.\346\225\260\346\215\256\347\273\223\346\236\204.md" deleted file mode 100644 index c371849..0000000 --- "a/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/02.\346\225\260\346\215\256\347\273\223\346\236\204.md" +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 数据结构 -date: 2022-08-11 15:46:25 -permalink: /pages/6fbc45/ ---- diff --git "a/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/03.\347\256\227\346\263\225.md" "b/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/03.\347\256\227\346\263\225.md" deleted file mode 100644 index b24e64f..0000000 --- "a/docs/05.\344\272\272\345\267\245\346\231\272\350\203\275/01.\350\256\241\347\256\227\346\234\272\345\237\272\347\241\200/03.\347\256\227\346\263\225.md" +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: 算法 -date: 2022-08-11 15:46:40 -permalink: /pages/220194/ ---- diff --git a/docs/@pages/archivesPage.md b/docs/@pages/archivesPage.md deleted file mode 100644 index c021f6b..0000000 --- a/docs/@pages/archivesPage.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -archivesPage: true -title: 归档 -permalink: /archives/ -article: false ---- \ No newline at end of file diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index a4fe4ae..0000000 --- a/docs/index.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -home: true -heroImage: /img/logo.png -heroText: Java技术文档 -tagline: 好的文档就是生产力🚀 -actionText: 开始使用 → -actionLink: /pages/f93948/ -bannerBg: none # auto => 网格纹背景(有bodyBgImg时无背景),默认 | none => 无 | '大图地址' | background: 自定义背景样式 提示:如发现文本颜色不适应你的背景时可以到palette.styl修改$bannerTextColor变量 - -features: # 可选的 - - title: 知识管理 - details: 包含三种典型的知识管理形态:结构化、碎片化、体系化。轻松打造属于你自己的知识管理平台 - - title: 简洁高效 - details: 以 Markdown 为中心的项目结构,内置自动化工具,以更少的配置完成更多的事。配合多维索引快速定位每个知识点 - - title: 沉浸式阅读 - details: 专为阅读设计的UI,配合多种颜色模式、可关闭的侧边栏和导航栏,带给你一种沉浸式阅读体验 - -# 文章列表显示方式: detailed 默认,显示详细版文章列表(包括作者、分类、标签、摘要、分页等)| simple => 显示简约版文章列表(仅标题和日期)| none 不显示文章列表 -postList: none ---- - - -## ⚡ 联系老徐 - -项目开发、问题咨询、毕业设计相关问题可以联系我:2480035622 - - - - - - - - -
- QQ: 2480035622 -

我的QQ: 2480035622

-
- 捐赠 -

捐赠 | Donate

-
\ No newline at end of file diff --git a/docs/.vuepress/public/img/bg.jpeg b/img/bg.jpeg similarity index 100% rename from docs/.vuepress/public/img/bg.jpeg rename to img/bg.jpeg diff --git a/docs/.vuepress/public/img/bg.jpg b/img/bg.jpg similarity index 100% rename from docs/.vuepress/public/img/bg.jpg rename to img/bg.jpg diff --git a/docs/.vuepress/public/img/favicon.ico b/img/favicon.ico similarity index 100% rename from docs/.vuepress/public/img/favicon.ico rename to img/favicon.ico diff --git "a/docs/.vuepress/public/img/gif/\347\214\2531.gif" "b/img/gif/\347\214\2531.gif" similarity index 100% rename from "docs/.vuepress/public/img/gif/\347\214\2531.gif" rename to "img/gif/\347\214\2531.gif" diff --git "a/docs/.vuepress/public/img/gif/\347\214\2532.gif" "b/img/gif/\347\214\2532.gif" similarity index 100% rename from "docs/.vuepress/public/img/gif/\347\214\2532.gif" rename to "img/gif/\347\214\2532.gif" diff --git "a/docs/.vuepress/public/img/gif/\347\214\2533.gif" "b/img/gif/\347\214\2533.gif" similarity index 100% rename from "docs/.vuepress/public/img/gif/\347\214\2533.gif" rename to "img/gif/\347\214\2533.gif" diff --git "a/docs/.vuepress/public/img/gif/\347\214\2534.gif" "b/img/gif/\347\214\2534.gif" similarity index 100% rename from "docs/.vuepress/public/img/gif/\347\214\2534.gif" rename to "img/gif/\347\214\2534.gif" diff --git a/docs/.vuepress/public/img/logo.png b/img/logo.png similarity index 100% rename from docs/.vuepress/public/img/logo.png rename to img/logo.png diff --git a/docs/.vuepress/public/img/logo1.png b/img/logo1.png similarity index 100% rename from docs/.vuepress/public/img/logo1.png rename to img/logo1.png diff --git a/docs/.vuepress/public/img/more.png b/img/more.png similarity index 100% rename from docs/.vuepress/public/img/more.png rename to img/more.png diff --git a/docs/.vuepress/public/img/other.png b/img/other.png similarity index 100% rename from docs/.vuepress/public/img/other.png rename to img/other.png diff --git a/docs/.vuepress/public/img/panda-waving.png b/img/panda-waving.png similarity index 100% rename from docs/.vuepress/public/img/panda-waving.png rename to img/panda-waving.png diff --git "a/docs/.vuepress/public/img/png/\346\200\235\347\273\264\345\257\274\345\233\276.png" "b/img/png/\346\200\235\347\273\264\345\257\274\345\233\276.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\346\200\235\347\273\264\345\257\274\345\233\276.png" rename to "img/png/\346\200\235\347\273\264\345\257\274\345\233\276.png" diff --git "a/docs/.vuepress/public/img/png/\346\225\260\346\215\256\345\272\223.png" "b/img/png/\346\225\260\346\215\256\345\272\223.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\346\225\260\346\215\256\345\272\223.png" rename to "img/png/\346\225\260\346\215\256\345\272\223.png" diff --git "a/docs/.vuepress/public/img/png/\346\225\260\346\215\256\347\273\223\346\236\204.png" "b/img/png/\346\225\260\346\215\256\347\273\223\346\236\204.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\346\225\260\346\215\256\347\273\223\346\236\204.png" rename to "img/png/\346\225\260\346\215\256\347\273\223\346\236\204.png" diff --git "a/docs/.vuepress/public/img/png/\346\234\215\345\212\241\345\231\250.png" "b/img/png/\346\234\215\345\212\241\345\231\250.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\346\234\215\345\212\241\345\231\250.png" rename to "img/png/\346\234\215\345\212\241\345\231\250.png" diff --git "a/docs/.vuepress/public/img/png/\346\234\272\345\231\250\345\255\246\344\271\240.png" "b/img/png/\346\234\272\345\231\250\345\255\246\344\271\240.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\346\234\272\345\231\250\345\255\246\344\271\240.png" rename to "img/png/\346\234\272\345\231\250\345\255\246\344\271\240.png" diff --git "a/docs/.vuepress/public/img/png/\347\256\227\346\263\225.png" "b/img/png/\347\256\227\346\263\225.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\347\256\227\346\263\225.png" rename to "img/png/\347\256\227\346\263\225.png" diff --git "a/docs/.vuepress/public/img/png/\347\263\273\347\273\237.png" "b/img/png/\347\263\273\347\273\237.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\347\263\273\347\273\237.png" rename to "img/png/\347\263\273\347\273\237.png" diff --git "a/docs/.vuepress/public/img/png/\347\263\273\347\273\237\345\210\206\346\236\220.png" "b/img/png/\347\263\273\347\273\237\345\210\206\346\236\220.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\347\263\273\347\273\237\345\210\206\346\236\220.png" rename to "img/png/\347\263\273\347\273\237\345\210\206\346\236\220.png" diff --git "a/docs/.vuepress/public/img/png/\347\274\226\347\250\213.png" "b/img/png/\347\274\226\347\250\213.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\347\274\226\347\250\213.png" rename to "img/png/\347\274\226\347\250\213.png" diff --git "a/docs/.vuepress/public/img/png/\347\275\221\347\273\234\346\212\200\346\234\257.png" "b/img/png/\347\275\221\347\273\234\346\212\200\346\234\257.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\347\275\221\347\273\234\346\212\200\346\234\257.png" rename to "img/png/\347\275\221\347\273\234\346\212\200\346\234\257.png" diff --git "a/docs/.vuepress/public/img/png/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234.png" "b/img/png/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234.png" rename to "img/png/\350\256\241\347\256\227\346\234\272\347\275\221\347\273\234.png" diff --git "a/docs/.vuepress/public/img/png/\350\275\257\344\273\266\345\274\200\345\217\221.png" "b/img/png/\350\275\257\344\273\266\345\274\200\345\217\221.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\350\275\257\344\273\266\345\274\200\345\217\221.png" rename to "img/png/\350\275\257\344\273\266\345\274\200\345\217\221.png" diff --git "a/docs/.vuepress/public/img/png/\351\235\242\345\220\221\345\257\271\350\261\241.png" "b/img/png/\351\235\242\345\220\221\345\257\271\350\261\241.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\351\235\242\345\220\221\345\257\271\350\261\241.png" rename to "img/png/\351\235\242\345\220\221\345\257\271\350\261\241.png" diff --git "a/docs/.vuepress/public/img/png/\351\241\271\347\233\256\347\256\241\347\220\206.png" "b/img/png/\351\241\271\347\233\256\347\256\241\347\220\206.png" similarity index 100% rename from "docs/.vuepress/public/img/png/\351\241\271\347\233\256\347\256\241\347\220\206.png" rename to "img/png/\351\241\271\347\233\256\347\256\241\347\220\206.png" diff --git a/docs/.vuepress/public/img/python.png b/img/python.png similarity index 100% rename from docs/.vuepress/public/img/python.png rename to img/python.png diff --git a/docs/.vuepress/public/img/qrcode/dashang.jpg b/img/qrcode/dashang.jpg similarity index 100% rename from docs/.vuepress/public/img/qrcode/dashang.jpg rename to img/qrcode/dashang.jpg diff --git a/docs/.vuepress/public/img/qrcode/qqcode.png b/img/qrcode/qqcode.png similarity index 100% rename from docs/.vuepress/public/img/qrcode/qqcode.png rename to img/qrcode/qqcode.png diff --git a/docs/.vuepress/public/img/ui.png b/img/ui.png similarity index 100% rename from docs/.vuepress/public/img/ui.png rename to img/ui.png diff --git a/docs/.vuepress/public/img/web.png b/img/web.png similarity index 100% rename from docs/.vuepress/public/img/web.png rename to img/web.png diff --git a/index.html b/index.html new file mode 100644 index 0000000..5da7dcf --- /dev/null +++ b/index.html @@ -0,0 +1,38 @@ + + + + + + Java技术文档 + + + + + + + + + + +
+ + + diff --git a/docs/.vuepress/public/markmap/01.html b/markmap/01.html similarity index 100% rename from docs/.vuepress/public/markmap/01.html rename to markmap/01.html diff --git a/package.json b/package.json deleted file mode 100644 index ee84f92..0000000 --- a/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "theme-vdoing-doc", - "version": "1.0.0", - "scripts": { - "dev": "set NODE_OPTIONS=--openssl-legacy-provider && vuepress dev docs", - "build": "set NODE_OPTIONS=--openssl-legacy-provider && vuepress build docs", - "deploy": "bash deploy.sh", - "updateTheme": "yarn remove vuepress-theme-vdoing && rm -rf node_modules && yarn && yarn add vuepress-theme-vdoing -D", - "editFm": "node utils/editFrontmatter.js" - }, - "license": "MIT", - "devDependencies": { - "dayjs": "^1.9.7", - "inquirer": "^7.1.0", - "json2yaml": "^1.1.0", - "vuepress": "1.9.2", - "vuepress-plugin-fulltext-search": "^2.2.1", - "vuepress-plugin-one-click-copy": "^1.0.2", - "vuepress-plugin-thirdparty-search": "^1.0.2", - "vuepress-plugin-zooming": "^1.1.7", - "vuepress-theme-vdoing": "^1.12.3", - "yamljs": "^0.3.0" - }, - "dependencies": {} -} diff --git a/pages/106ccb/index.html b/pages/106ccb/index.html new file mode 100644 index 0000000..310dfb7 --- /dev/null +++ b/pages/106ccb/index.html @@ -0,0 +1,167 @@ + + + + + + Java基础 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/1549df/index.html b/pages/1549df/index.html new file mode 100644 index 0000000..e709a53 --- /dev/null +++ b/pages/1549df/index.html @@ -0,0 +1,75 @@ + + + + + + Spring核心 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/220194/index.html b/pages/220194/index.html new file mode 100644 index 0000000..7372c53 --- /dev/null +++ b/pages/220194/index.html @@ -0,0 +1,59 @@ + + + + + + 算法 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/24bc3a/index.html b/pages/24bc3a/index.html new file mode 100644 index 0000000..6beb990 --- /dev/null +++ b/pages/24bc3a/index.html @@ -0,0 +1,63 @@ + + + + + + Oracle | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/2d7c3e/index.html b/pages/2d7c3e/index.html new file mode 100644 index 0000000..478f676 --- /dev/null +++ b/pages/2d7c3e/index.html @@ -0,0 +1,100 @@ + + + + + + Centos | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/449335/index.html b/pages/449335/index.html new file mode 100644 index 0000000..0f83307 --- /dev/null +++ b/pages/449335/index.html @@ -0,0 +1,83 @@ + + + + + + GIT | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/4b4042/index.html b/pages/4b4042/index.html new file mode 100644 index 0000000..aa00759 --- /dev/null +++ b/pages/4b4042/index.html @@ -0,0 +1,58 @@ + + + + + + 计算机原理 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/6fbc45/index.html b/pages/6fbc45/index.html new file mode 100644 index 0000000..eff9dff --- /dev/null +++ b/pages/6fbc45/index.html @@ -0,0 +1,60 @@ + + + + + + 数据结构 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/708e07/index.html b/pages/708e07/index.html new file mode 100644 index 0000000..2de2115 --- /dev/null +++ b/pages/708e07/index.html @@ -0,0 +1,85 @@ + + + + + + 虚拟机 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/72aff1/index.html b/pages/72aff1/index.html new file mode 100644 index 0000000..c652f0f --- /dev/null +++ b/pages/72aff1/index.html @@ -0,0 +1,133 @@ + + + + + + Docker | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/7d2728/index.html b/pages/7d2728/index.html new file mode 100644 index 0000000..b690a0e --- /dev/null +++ b/pages/7d2728/index.html @@ -0,0 +1,59 @@ + + + + + + 问答题 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/883222/index.html b/pages/883222/index.html new file mode 100644 index 0000000..9eb1c45 --- /dev/null +++ b/pages/883222/index.html @@ -0,0 +1,293 @@ + + + + + + K8S | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/899cd5/index.html b/pages/899cd5/index.html new file mode 100644 index 0000000..0fe7504 --- /dev/null +++ b/pages/899cd5/index.html @@ -0,0 +1,91 @@ + + + + + + PHP核心实战 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/8e7d10/index.html b/pages/8e7d10/index.html new file mode 100644 index 0000000..78a25ef --- /dev/null +++ b/pages/8e7d10/index.html @@ -0,0 +1,61 @@ + + + + + + Shell脚本 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/921ebd/index.html b/pages/921ebd/index.html new file mode 100644 index 0000000..8acc7b2 --- /dev/null +++ b/pages/921ebd/index.html @@ -0,0 +1,81 @@ + + + + + + Mysql | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/9744c0/index.html b/pages/9744c0/index.html new file mode 100644 index 0000000..57c8df2 --- /dev/null +++ b/pages/9744c0/index.html @@ -0,0 +1,85 @@ + + + + + + Postgresql | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/9ce477/index.html b/pages/9ce477/index.html new file mode 100644 index 0000000..985cbcf --- /dev/null +++ b/pages/9ce477/index.html @@ -0,0 +1,60 @@ + + + + + + mybatis-plus | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/9f54c0/index.html b/pages/9f54c0/index.html new file mode 100644 index 0000000..d0c26b8 --- /dev/null +++ b/pages/9f54c0/index.html @@ -0,0 +1,78 @@ + + + + + + Kafka | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/a329d1/index.html b/pages/a329d1/index.html new file mode 100644 index 0000000..ebf46c2 --- /dev/null +++ b/pages/a329d1/index.html @@ -0,0 +1,59 @@ + + + + + + 计算机网络 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/aceeea/index.html b/pages/aceeea/index.html new file mode 100644 index 0000000..4e16eed --- /dev/null +++ b/pages/aceeea/index.html @@ -0,0 +1,100 @@ + + + + + + Java设计模式 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/b7c630/index.html b/pages/b7c630/index.html new file mode 100644 index 0000000..292200a --- /dev/null +++ b/pages/b7c630/index.html @@ -0,0 +1,235 @@ + + + + + + Redis | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/bb175e/index.html b/pages/bb175e/index.html new file mode 100644 index 0000000..926885d --- /dev/null +++ b/pages/bb175e/index.html @@ -0,0 +1,64 @@ + + + + + + 实用技巧 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/c1bbd9/index.html b/pages/c1bbd9/index.html new file mode 100644 index 0000000..c4db60e --- /dev/null +++ b/pages/c1bbd9/index.html @@ -0,0 +1,157 @@ + + + + + + SpringBoot | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/c2fb36/index.html b/pages/c2fb36/index.html new file mode 100644 index 0000000..89d4aa7 --- /dev/null +++ b/pages/c2fb36/index.html @@ -0,0 +1,89 @@ + + + + + + Debain | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/de4102/index.html b/pages/de4102/index.html new file mode 100644 index 0000000..bb4f488 --- /dev/null +++ b/pages/de4102/index.html @@ -0,0 +1,170 @@ + + + + + + Nginx | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/df8c84/index.html b/pages/df8c84/index.html new file mode 100644 index 0000000..d7bc313 --- /dev/null +++ b/pages/df8c84/index.html @@ -0,0 +1,75 @@ + + + + + + MongoDB | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/ef2999/index.html b/pages/ef2999/index.html new file mode 100644 index 0000000..26b2dde --- /dev/null +++ b/pages/ef2999/index.html @@ -0,0 +1,497 @@ + + + + + + Java多线程 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/f1c5c3/index.html b/pages/f1c5c3/index.html new file mode 100644 index 0000000..28006fa --- /dev/null +++ b/pages/f1c5c3/index.html @@ -0,0 +1,415 @@ + + + + + + Vue实战 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/f4491a/index.html b/pages/f4491a/index.html new file mode 100644 index 0000000..521abc9 --- /dev/null +++ b/pages/f4491a/index.html @@ -0,0 +1,327 @@ + + + + + + Java笔试题 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/pages/f93948/index.html b/pages/f93948/index.html new file mode 100644 index 0000000..f341c8d --- /dev/null +++ b/pages/f93948/index.html @@ -0,0 +1,69 @@ + + + + + + Linux基础 | Java技术文档 + + + + + + + + + + +
+ + + diff --git a/utils/config.yml b/utils/config.yml deleted file mode 100644 index 6fac6a2..0000000 --- a/utils/config.yml +++ /dev/null @@ -1,14 +0,0 @@ -#批量添加和修改、删除front matter配置文件 - -# 需要批量处理的路径,docs文件夹内的文件夹 (数组。映射路径:docs/arr[0]/arr[1] ... ) -path: - - docs # 第一个成员必须是docs - -# 要删除的字段 (数组) -delete: - # - test - # - tags - - # 要添加、修改front matter的数据 (front matter中没有的数据则添加,已有的数据则覆盖) -data: - article: false \ No newline at end of file diff --git a/utils/editFrontmatter.js b/utils/editFrontmatter.js deleted file mode 100644 index 8c223f4..0000000 --- a/utils/editFrontmatter.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * 批量添加和修改front matter ,需要配置 ./config.yml 文件。 - */ -const fs = require('fs'); // 文件模块 -const path = require('path'); // 路径模块 -const matter = require('gray-matter'); // front matter解析器 https://github.com/jonschlinkert/gray-matter -const jsonToYaml = require('json2yaml') -const yamlToJs = require('yamljs') -const inquirer = require('inquirer') // 命令行操作 -const chalk = require('chalk') // 命令行打印美化 -const readFileList = require('./modules/readFileList'); -const { type, repairDate} = require('./modules/fn'); -const log = console.log - -const configPath = path.join(__dirname, 'config.yml') // 配置文件的路径 - -main(); - -/** - * 主体函数 - */ -async function main() { - - const promptList = [{ - type: "confirm", - message: chalk.yellow('批量操作frontmatter有修改数据的风险,确定要继续吗?'), - name: "edit", - }]; - let edit = true; - - await inquirer.prompt(promptList).then(answers => { - edit = answers.edit - }) - - if(!edit) { // 退出操作 - return - } - - const config = yamlToJs.load(configPath) // 解析配置文件的数据转为js对象 - - if (type(config.path) !== 'array') { - log(chalk.red('路径配置有误,path字段应该是一个数组')) - return - } - - if (config.path[0] !== 'docs') { - log(chalk.red("路径配置有误,path数组的第一个成员必须是'docs'")) - return - } - - const filePath = path.join(__dirname, '..', ...config.path); // 要批量修改的文件路径 - const files = readFileList(filePath); // 读取所有md文件数据 - - files.forEach(file => { - let dataStr = fs.readFileSync(file.filePath, 'utf8');// 读取每个md文件的内容 - const fileMatterObj = matter(dataStr) // 解析md文件的front Matter。 fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{}, ...} - let matterData = fileMatterObj.data; // 得到md文件的front Matter - - let mark = false - // 删除操作 - if (config.delete) { - if( type(config.delete) !== 'array' ) { - log(chalk.yellow('未能完成删除操作,delete字段的值应该是一个数组!')) - } else { - config.delete.forEach(item => { - if (matterData[item]) { - delete matterData[item] - mark = true - } - }) - - } - } - - // 添加、修改操作 - if (type(config.data) === 'object') { - Object.assign(matterData, config.data) // 将配置数据合并到front Matter对象 - mark = true - } - - // 有操作时才继续 - if (mark) { - if(matterData.date && type(matterData.date) === 'date') { - matterData.date = repairDate(matterData.date) // 修复时间格式 - } - const newData = jsonToYaml.stringify(matterData).replace(/\n\s{2}/g,"\n").replace(/"/g,"") + '---\r\n' + fileMatterObj.content; - fs.writeFileSync(file.filePath, newData); // 写入 - log(chalk.green(`update frontmatter:${file.filePath} `)) - } - - }) -} diff --git a/utils/modules/fn.js b/utils/modules/fn.js deleted file mode 100644 index 48cbbd1..0000000 --- a/utils/modules/fn.js +++ /dev/null @@ -1,21 +0,0 @@ -// 类型判断 -exports.type = function (o){ - var s = Object.prototype.toString.call(o) - return s.match(/\[object (.*?)\]/)[1].toLowerCase() -} - - // 修复date时区格式的问题 - exports.repairDate = function (date) { - date = new Date(date); - return `${date.getUTCFullYear()}-${zero(date.getUTCMonth()+1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; -} - -// 日期的格式 -exports.dateFormat = function (date) { - return `${date.getFullYear()}-${zero(date.getMonth()+1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` -} - -// 小于10补0 -function zero(d){ - return d.toString().padStart(2,'0') -} \ No newline at end of file diff --git a/utils/modules/readFileList.js b/utils/modules/readFileList.js deleted file mode 100644 index 8eb97c6..0000000 --- a/utils/modules/readFileList.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 读取所有md文件数据 - */ -const fs = require('fs'); // 文件模块 -const path = require('path'); // 路径模块 -const docsRoot = path.join(__dirname, '..', '..', 'docs'); // docs文件路径 - -function readFileList(dir = docsRoot, filesList = []) { - const files = fs.readdirSync(dir); - files.forEach( (item, index) => { - let filePath = path.join(dir, item); - const stat = fs.statSync(filePath); - if (stat.isDirectory() && item !== '.vuepress') { - readFileList(path.join(dir, item), filesList); //递归读取文件 - } else { - if(path.basename(dir) !== 'docs'){ // 过滤docs目录级下的文件 - - const fileNameArr = path.basename(filePath).split('.') - let name = null, type = null; - if (fileNameArr.length === 2) { // 没有序号的文件 - name = fileNameArr[0] - type = fileNameArr[1] - } else if (fileNameArr.length === 3) { // 有序号的文件 - name = fileNameArr[1] - type = fileNameArr[2] - } else { // 超过两个‘.’的 - log(chalk.yellow(`warning: 该文件 "${filePath}" 没有按照约定命名,将忽略生成相应数据。`)) - return - } - if(type === 'md'){ // 过滤非md文件 - filesList.push({ - name, - filePath - }); - } - - } - } - }); - return filesList; -} - -module.exports = readFileList; \ No newline at end of file diff --git a/vdoing/LICENSE b/vdoing/LICENSE deleted file mode 100644 index 16d6732..0000000 --- a/vdoing/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019-present gaoyi(Evan) Xu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vdoing/README.md b/vdoing/README.md deleted file mode 100644 index 9d54bed..0000000 --- a/vdoing/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# vuepress-theme-vdoing - -vuepress-theme-vdoing for vuepress - -一个基于VuePress的 知识管理兼博客 主题。 - -[More](https://github.com/xugaoyi/vuepress-theme-vdoing#readme). diff --git a/vdoing/components/AlgoliaSearchBox.vue b/vdoing/components/AlgoliaSearchBox.vue deleted file mode 100644 index f191f35..0000000 --- a/vdoing/components/AlgoliaSearchBox.vue +++ /dev/null @@ -1,166 +0,0 @@ - - - - - diff --git a/vdoing/components/ArchivesPage.vue b/vdoing/components/ArchivesPage.vue deleted file mode 100644 index 9ee64be..0000000 --- a/vdoing/components/ArchivesPage.vue +++ /dev/null @@ -1,207 +0,0 @@ - - - - - diff --git a/vdoing/components/ArticleInfo.vue b/vdoing/components/ArticleInfo.vue deleted file mode 100644 index a7a2a07..0000000 --- a/vdoing/components/ArticleInfo.vue +++ /dev/null @@ -1,203 +0,0 @@ - - - - - diff --git a/vdoing/components/BloggerBar.vue b/vdoing/components/BloggerBar.vue deleted file mode 100644 index 71ca215..0000000 --- a/vdoing/components/BloggerBar.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/vdoing/components/BodyBgImg.vue b/vdoing/components/BodyBgImg.vue deleted file mode 100644 index 97b6b55..0000000 --- a/vdoing/components/BodyBgImg.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - - - diff --git a/vdoing/components/Buttons.vue b/vdoing/components/Buttons.vue deleted file mode 100644 index abf239d..0000000 --- a/vdoing/components/Buttons.vue +++ /dev/null @@ -1,263 +0,0 @@ - - - - - diff --git a/vdoing/components/Catalogue.vue b/vdoing/components/Catalogue.vue deleted file mode 100644 index 39dcb49..0000000 --- a/vdoing/components/Catalogue.vue +++ /dev/null @@ -1,232 +0,0 @@ - - - - - diff --git a/vdoing/components/CategoriesBar.vue b/vdoing/components/CategoriesBar.vue deleted file mode 100644 index b5a1bd5..0000000 --- a/vdoing/components/CategoriesBar.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - - - diff --git a/vdoing/components/CategoriesPage.vue b/vdoing/components/CategoriesPage.vue deleted file mode 100644 index 218a14d..0000000 --- a/vdoing/components/CategoriesPage.vue +++ /dev/null @@ -1,144 +0,0 @@ - - - - - diff --git a/vdoing/components/DropdownLink.vue b/vdoing/components/DropdownLink.vue deleted file mode 100644 index 7e8bd9e..0000000 --- a/vdoing/components/DropdownLink.vue +++ /dev/null @@ -1,228 +0,0 @@ - - - - - diff --git a/vdoing/components/DropdownTransition.vue b/vdoing/components/DropdownTransition.vue deleted file mode 100644 index 8b1b4b1..0000000 --- a/vdoing/components/DropdownTransition.vue +++ /dev/null @@ -1,32 +0,0 @@ - - - - - diff --git a/vdoing/components/Footer.vue b/vdoing/components/Footer.vue deleted file mode 100644 index 2b26fd3..0000000 --- a/vdoing/components/Footer.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/vdoing/components/Home.vue b/vdoing/components/Home.vue deleted file mode 100644 index c22d81b..0000000 --- a/vdoing/components/Home.vue +++ /dev/null @@ -1,545 +0,0 @@ - - - - - diff --git a/vdoing/components/MainLayout.vue b/vdoing/components/MainLayout.vue deleted file mode 100644 index 40dc89b..0000000 --- a/vdoing/components/MainLayout.vue +++ /dev/null @@ -1,64 +0,0 @@ - - diff --git a/vdoing/components/NavLink.vue b/vdoing/components/NavLink.vue deleted file mode 100644 index 93feac7..0000000 --- a/vdoing/components/NavLink.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - diff --git a/vdoing/components/NavLinks.vue b/vdoing/components/NavLinks.vue deleted file mode 100644 index 7be2ca3..0000000 --- a/vdoing/components/NavLinks.vue +++ /dev/null @@ -1,154 +0,0 @@ - - - - - diff --git a/vdoing/components/Navbar.vue b/vdoing/components/Navbar.vue deleted file mode 100644 index 2fb8bda..0000000 --- a/vdoing/components/Navbar.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - - - diff --git a/vdoing/components/Page.vue b/vdoing/components/Page.vue deleted file mode 100644 index 5d0865c..0000000 --- a/vdoing/components/Page.vue +++ /dev/null @@ -1,218 +0,0 @@ - - - - - diff --git a/vdoing/components/PageEdit.vue b/vdoing/components/PageEdit.vue deleted file mode 100644 index c9ac0ef..0000000 --- a/vdoing/components/PageEdit.vue +++ /dev/null @@ -1,181 +0,0 @@ - - - diff --git a/vdoing/components/PageNav.vue b/vdoing/components/PageNav.vue deleted file mode 100644 index b6b2a86..0000000 --- a/vdoing/components/PageNav.vue +++ /dev/null @@ -1,237 +0,0 @@ - - - diff --git a/vdoing/components/Pagination.vue b/vdoing/components/Pagination.vue deleted file mode 100644 index 0a65cd0..0000000 --- a/vdoing/components/Pagination.vue +++ /dev/null @@ -1,240 +0,0 @@ - - - - - diff --git a/vdoing/components/PostList.vue b/vdoing/components/PostList.vue deleted file mode 100644 index 6b32f95..0000000 --- a/vdoing/components/PostList.vue +++ /dev/null @@ -1,260 +0,0 @@ - - - - - diff --git a/vdoing/components/RightMenu.vue b/vdoing/components/RightMenu.vue deleted file mode 100644 index 09b2b68..0000000 --- a/vdoing/components/RightMenu.vue +++ /dev/null @@ -1,149 +0,0 @@ - - - - - diff --git a/vdoing/components/Sidebar.vue b/vdoing/components/Sidebar.vue deleted file mode 100644 index 5e5c9c0..0000000 --- a/vdoing/components/Sidebar.vue +++ /dev/null @@ -1,113 +0,0 @@ - - - - - diff --git a/vdoing/components/SidebarButton.vue b/vdoing/components/SidebarButton.vue deleted file mode 100644 index 706adf1..0000000 --- a/vdoing/components/SidebarButton.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - diff --git a/vdoing/components/SidebarGroup.vue b/vdoing/components/SidebarGroup.vue deleted file mode 100644 index 3ef66e2..0000000 --- a/vdoing/components/SidebarGroup.vue +++ /dev/null @@ -1,128 +0,0 @@ - - - - - diff --git a/vdoing/components/SidebarLink.vue b/vdoing/components/SidebarLink.vue deleted file mode 100644 index d1e524a..0000000 --- a/vdoing/components/SidebarLink.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - diff --git a/vdoing/components/SidebarLinks.vue b/vdoing/components/SidebarLinks.vue deleted file mode 100644 index 678c94b..0000000 --- a/vdoing/components/SidebarLinks.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/vdoing/components/TagsBar.vue b/vdoing/components/TagsBar.vue deleted file mode 100644 index 9f4072d..0000000 --- a/vdoing/components/TagsBar.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/vdoing/components/TagsPage.vue b/vdoing/components/TagsPage.vue deleted file mode 100644 index fdeab56..0000000 --- a/vdoing/components/TagsPage.vue +++ /dev/null @@ -1,125 +0,0 @@ - - - - - diff --git a/vdoing/components/UpdateArticle.vue b/vdoing/components/UpdateArticle.vue deleted file mode 100644 index ae0270f..0000000 --- a/vdoing/components/UpdateArticle.vue +++ /dev/null @@ -1,162 +0,0 @@ - - - - - diff --git a/vdoing/enhanceApp.js b/vdoing/enhanceApp.js deleted file mode 100644 index d0166a0..0000000 --- a/vdoing/enhanceApp.js +++ /dev/null @@ -1,47 +0,0 @@ -// 解决代码选项卡无法加载的问题 -import Vue from 'vue' -import CodeBlock from "@theme/global-components/CodeBlock.vue" -import CodeGroup from "@theme/global-components/CodeGroup.vue" -// Register the Vue global component -Vue.component(CodeBlock) -Vue.component(CodeGroup) - -// 注:此文件在浏览器端运行 -import postsMixin from '@theme/mixins/posts' -export default ({ - Vue, // VuePress 正在使用的 Vue 构造函数 - options, // 附加到根实例的一些选项 - router, // 当前应用的路由实例 - siteData // 站点元数据 -}) => { - // 修复ISO8601时间格式为普通时间格式,以及添加作者信息 - siteData.pages.map(item => { - const { frontmatter: { date, author } } = item - if (typeof date === 'string' && date.charAt(date.length - 1) === 'Z') { - item.frontmatter.date = repairUTCDate(date) - } - if (author) { - item.author = author - } else { - if (siteData.themeConfig.author) { - item.author = siteData.themeConfig.author - } - } - }) - - // 将对文章数据的处理结果混入Vue实例 - Vue.mixin(postsMixin) -} - - -// 修复ISO8601时间格式为普通时间格式 -function repairUTCDate(date) { - if (!(date instanceof Date)) { - date = new Date(date) - } - return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; -} -// 小于10补0 -function zero(d) { - return d.toString().padStart(2, '0') -} diff --git a/vdoing/global-components/Badge.vue b/vdoing/global-components/Badge.vue deleted file mode 100644 index c89600d..0000000 --- a/vdoing/global-components/Badge.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/vdoing/global-components/CodeBlock.vue b/vdoing/global-components/CodeBlock.vue deleted file mode 100644 index 50cf503..0000000 --- a/vdoing/global-components/CodeBlock.vue +++ /dev/null @@ -1,38 +0,0 @@ - - - - - diff --git a/vdoing/global-components/CodeGroup.vue b/vdoing/global-components/CodeGroup.vue deleted file mode 100644 index 871c295..0000000 --- a/vdoing/global-components/CodeGroup.vue +++ /dev/null @@ -1,99 +0,0 @@ - - - - - diff --git a/vdoing/index.js b/vdoing/index.js deleted file mode 100644 index d40b863..0000000 --- a/vdoing/index.js +++ /dev/null @@ -1,292 +0,0 @@ -const path = require('path') -const setFrontmatter = require('./node_utils/setFrontmatter') -const getSidebarData = require('./node_utils/getSidebarData') -const { createPage, deletePage } = require('./node_utils/handlePage') -const chalk = require('chalk') // 命令行打印美化 -const yaml = require('js-yaml') // yaml转js -const log = console.log - -// md容器名 -const CARD_LIST = 'cardList' -const CARD_IMG_LIST = 'cardImgList' - -// siteConfig base 配置 -let base = '' - - -// Theme API. -module.exports = (options, ctx) => { - const { sourceDir, themeConfig, siteConfig } = ctx - - // base路径 - base = siteConfig.base || '' - - // 自动设置front matter - setFrontmatter(sourceDir, themeConfig) - - // 自动生成结构化侧边栏 - const sidebar = themeConfig.sidebar - if (sidebar === 'structuring' || sidebar && sidebar.mode === 'structuring') { - const collapsable = themeConfig.sidebar.collapsable === false ? false : true - const sidebarData = getSidebarData(sourceDir, collapsable) - if (sidebarData) { - themeConfig.sidebar = sidebarData - log(chalk.blue('tip ') + chalk.green('add sidebar data. 成功生成侧边栏数据。')) - } else { - themeConfig.sidebar = 'auto' - log(chalk.yellow('warning: fail to add sidebar data, switch to "auto". 未能添加侧边栏数据,将切换为“auto”。')) - } - } - - // 分类页 - if (themeConfig.category !== false) { - createPage(sourceDir, 'categoriesPage') - } else { - deletePage(sourceDir, 'categoriesPage') - } - - // 标签页 - if (themeConfig.tag !== false) { - createPage(sourceDir, 'tagsPage') - } else { - deletePage(sourceDir, 'tagsPage') - } - - // 归档页 - if (themeConfig.archive !== false) { - createPage(sourceDir, 'archivesPage') - } else { - deletePage(sourceDir, 'archivesPage') - } - - // resolve algolia - const isAlgoliaSearch = ( - themeConfig.algolia - || Object - .keys(siteConfig.locales && themeConfig.locales || {}) - .some(base => themeConfig.locales[base].algolia) - ) - - const enableSmoothScroll = themeConfig.smoothScroll === true - - return { - alias() { - return { - '@AlgoliaSearchBox': isAlgoliaSearch - ? path.resolve(__dirname, 'components/AlgoliaSearchBox.vue') - : path.resolve(__dirname, 'noopModule.js') - } - }, - - plugins: [ - ['@vuepress/active-header-links', options.activeHeaderLinks], - '@vuepress/search', - '@vuepress/plugin-nprogress', - ['smooth-scroll', enableSmoothScroll], - - ['container', { - type: 'note', - defaultTitle: { - '/': '笔记', - '/en/': 'NOTE' - } - }], - ['container', { - type: 'tip', - defaultTitle: { - '/': '提示', - '/en/': 'TIP' - } - }], - ['container', { - type: 'warning', - defaultTitle: { - '/': '注意', - '/en/': 'WARNING' - } - }], - ['container', { - type: 'danger', - defaultTitle: { - '/': '警告', - '/en/': 'WARNING' - } - }], - ['container', { - type: 'right', - defaultTitle: '' - }], - ['container', { - type: 'theorem', - before: info => `

${info}

`, - after: '
' - }], - ['container', { - type: 'details', - before: info => `
${info ? `${info}` : ''}\n`, - after: () => '
\n', - defaultTitle: { - '/': '点击查看', - '/en/': 'DETAILS' - } - }], - - // 内容居中容器 - ['container', { - type: 'center', - before: info => `
`, - after: () => '
' - }], - - // 卡片列表 - [ - 'container', - { - type: CARD_LIST, - render: (tokens, idx) => { - // tokens 是整个md文件的虚拟dom结构数组 - // idx 是tokens中':::' 所在的索引,而且是当前指定type的':::',分别有开始和结束两次的idx - // if (tokens[idx].nesting === 1) { // 开头的 ':::' 标记 - // } else { // 结束的 ':::' 标记 - // } - // 注意:修改这里面的代码后需要在md文件保存一下才会重新执行渲染 - return renderCardList(tokens, idx, CARD_LIST) - } - }, - ], - - // 图文卡片列表 - [ - 'container', - { - type: CARD_IMG_LIST, - render: (tokens, idx) => { - return renderCardList(tokens, idx, CARD_IMG_LIST) - } - }, - ], - - - ] - } -} - - -// 渲染md容器的卡片列表 -function renderCardList(tokens, idx, type) { - const END_TYPE = `container_${type}_close`, - _tokens$idx = tokens[idx], - nesting = _tokens$idx.nesting, - info = _tokens$idx.info; - - if (nesting === 1) { // 渲染开头的 ':::' 标记 - let yamlStr = ''; - - for (let i = idx; i < tokens.length; i++) { - let _tokens$i = tokens[i], - type = _tokens$i.type, - content = _tokens$i.content, - _info = _tokens$i.info; - if (type === END_TYPE) break; // 遇到结束的 ':::' 时 - if (!content) continue; - if (type === 'fence' && _info === 'yaml') { // 是代码块类型,并且是yaml代码 - yamlStr = content - } - } - - if (yamlStr) { // 正确解析出yaml字符串后 - const dataObj = yaml.safeLoad(yamlStr) // 将yaml字符串解析成js对象 - let dataList = [] - let config = {} - - if (dataObj) { // 正确解析出数据对象 - if (Array.isArray(dataObj)) { - dataList = dataObj - } else { - config = dataObj.config - dataList = dataObj.data - } - } - - if (dataList && dataList.length) { // 有列表数据 - - // 每行显示几个 - let row = Number(info.split(' ').pop()) - if (!row || row > 4 || row < 1) { - row = 3 // 默认 3 - } - - let listDOM = '' - if (type === CARD_LIST) { // 普通卡片列表 - listDOM = getCardListDOM(dataList, row, config) - } else if (type === CARD_IMG_LIST) { // 卡片图片列表 - listDOM = getCardImgListDOM(dataList, row, config) - } - - return `
${listDOM}
` - } - } - } else { // 渲染':::' 结尾 - return '
' - } -} - - -// 将数据解析成DOM结构 - 普通卡片列表 -function getCardListDOM(dataList, row, config) { - const { target = '_blank' } = config - let listDOM = '' - dataList.forEach(item => { - listDOM += ` - <${item.link ? 'a href="' + withBase(item.link) + '" target="' + target + '"' : 'span'} class="card-item ${row ? 'row-' + row : ''}" - style="${item.bgColor ? 'background-color:' + item.bgColor + ';--randomColor:' + item.bgColor + ';' : '--randomColor: var(--bodyBg);'}${item.textColor ? 'color:' + item.textColor + ';' : ''}" - > - ${item.avatar ? '' : ''} -
-

${item.name}

-

${item.desc}

-
- - ` - }) - return listDOM -} - - -// 将数据解析成DOM结构 - 图文卡片列表 -function getCardImgListDOM(dataList, row, config) { - const { imgHeight = 'auto', objectFit = 'cover', lineClamp = 1, target = '_blank' } = config - - let listDOM = '' - dataList.forEach(item => { - listDOM += ` - - ` - }) - return listDOM -} - -// 添加base路径 -function withBase(path) { - if (!path) return ''; - if (base && path.charAt(0) === '/') { - return base + path.slice(1); - } else { - return path; - } -} diff --git a/vdoing/layouts/404.vue b/vdoing/layouts/404.vue deleted file mode 100644 index c8b7672..0000000 --- a/vdoing/layouts/404.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - diff --git a/vdoing/layouts/Layout.vue b/vdoing/layouts/Layout.vue deleted file mode 100644 index 62dda70..0000000 --- a/vdoing/layouts/Layout.vue +++ /dev/null @@ -1,382 +0,0 @@ - - - - - diff --git a/vdoing/mixins/posts.js b/vdoing/mixins/posts.js deleted file mode 100644 index 2dec307..0000000 --- a/vdoing/mixins/posts.js +++ /dev/null @@ -1,21 +0,0 @@ -import { filterPosts, sortPosts, sortPostsByDate, groupPosts, categoriesAndTags } from '../util/postData' - -export default { - computed: { - $filterPosts () { // 过滤非文章页和首页的文章数据 - return filterPosts(this.$site.pages) - }, - $sortPosts () { // 按置顶和时间排序的文章数据 - return sortPosts(this.$filterPosts) - }, - $sortPostsByDate () { // 仅按时间排序的文章数据 - return sortPostsByDate(this.$filterPosts) - }, - $groupPosts () { // 按分类和标签分组的文章数据 - return groupPosts(this.$sortPosts) - }, - $categoriesAndTags () { // 所有分类和标签数据 - return categoriesAndTags(this.$groupPosts) - } - } -} diff --git a/vdoing/mixins/titleBadge.js b/vdoing/mixins/titleBadge.js deleted file mode 100644 index 224f0c0..0000000 --- a/vdoing/mixins/titleBadge.js +++ /dev/null @@ -1,28 +0,0 @@ -export default { - data () { - return { - badges: [ - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABGpJREFUSA3tVVtoXFUU3fvOI53UlmCaKIFmwEhsE7QK0ipFEdHEKpXaZGrp15SINsXUWvBDpBgQRKi0+KKoFeJHfZA+ED9KKoIU2gYD9UejTW4rVIzm0VSTziPzuNu1z507dibTTjL4U/DAzLn3nL3X2o91ziX6f9wMFdh6Jvbm9nNSV0msViVO6tN1Rm7NMu2OpeJ9lWBUTDxrJbYTS0hInuwciu9eLHlFxCLCZEk3MegsJmZ5K/JD6t7FkFdEvGUo1g7qJoG3MHImqRIn8/nzY1K9UPKKiJmtnUqHVE3Gbuay6vJE/N2FEmuxFjW2nUuE0yQXRRxLiTUAzs36zhZvOXJPdX850EVnnLZkB8prodQoM5JGj7Xk2mvC7JB8tG04Ef5PiXtG0UtxupRQSfTnBoCy554x18yJHI6I+G5Eru4LHmPJZEQsrvPUbMiA8G/WgMK7w7I+ez7++o2ANfbrjvaOl1tFMs+htG3IrZH9/hDX1Pr8Tc0UvH8tcX29KzAgIGcEkINyW5BF9x891hw6VYqgJHEk0huccS7vh3C6gTiODL+26huuBtbct8eZnqLML8PkxGYpuPZBqtqwkSjgc4mB5gbgig5i+y0UDK35LMxXisn9xQtK+nd26gTIHsHe/oblK/b29fUmN/8Y+9jAQrnBp56m1LcDlDp9irKTExSKduXJVWSqdBMA08pEJnEIOB3FPPMybu/oeV8zFeYN3xx576Q6RH+VmplE4ncQV5v+5rzSoyOU7PuEAg8g803PwBJ0CExno/jcMbN8tONYeOmHiuUNryvm3fRUy4tMPVLdAGkUhNWuggGrJcXPv+ouCjz0MKUHz1J2/E8IC9nqTabcxgaBYM0hPhD5Y65FsbxRQKxCQrDjDctW7PUM3HuZunFyifSAqEfuzCp48Il24luWUWZoyJCaPR82jE0+kFA643wRFVni4RYSq3ohJO2pZ7B5dO4xkDWbEpossJPLSrPjYID8rS2UHTlvyNxqIGsg674XJJ7vnh5L7PNwC4hh2sjCI96mzszOTpxLF0T7l88Yz7lAuK6OnL8gXLOnTvpzSb22YG8W7us3jSebFHeeqnXRG1vt+MoUM84LQIBmMsCTAcOauTh0T0l0neQK7m2bLMt2mGxU3HYssS0J2cdv5wljlPsrIuZLAG/2DOZIXgCYT8uMGZN+e2kSirfxZOPCsC0f24nTZzspnVn9VePS1Z5vubmAGGXG8ZFno9Hel0yfA5ZPhF7Dh972BQJ2qCpgH67lmWtBYbvk6sz02wjky2vXyz0XErP/kFB619js1BtwfOV4OPRqOQBjy3Qbk18vigUPPSD5ceHnwck7W9bhAqZdd7SuG7w4/P2F/GaJh8c7e9qgow+Q7cGBo+98WsLkuktFqiZabtXuQTu/Y5ETbR0v7tNSFnvrmu6pjdoan2KjMu8q/Hmj1EfCO2ZGfEIbIXKUlw8qaX9/b2oeSJmFksSeT/Fn0V3nSypChh4Gjh74ybO9aeZ/AN2dwciu2/MhAAAAAElFTkSuQmCC', - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABH1JREFUSA3tVl1oHFUUPmdmd2ltklqbpJDiNnXFmgbFktho7YMPNiJSSZM0+CAYSkUELVhM6YuwIPpgoOKDqOBDC0XE2CQoNtQXBUFTTcCi+Wlh1V2TQExsUzcltd3M9Tt3ZjZzZ2fT+OJTL8yeM+eee757fmeJbq//KQL8X3DUSFOcfr7cRsRtxNQMWueeVzOkaITIGqQHNg5y8+jNW9ldM7A6nTpAjuolUikAwq7CE3WcM2RRDz+XGVgN3FptU/aUSlvq9Pa3iZ1+sgAqJyyAFqkipd9dqiwHF3P65YycLWc/6sqGrvoEoIp6DOFaX5h6+dnfjkWprwqsPk0dUGq5vySwDImC10KxFHgGL1SWoc92O3eVht09qdXNH11I2SsTsJYqMWzihqGMi+A+Garf3BAuuLI5oGlULyNfyB/HYNujwktOfRrMr5t77NmevqaUopx0grnKAyvVpmwUDB4x6FPXuGvYLTDwWsejwgtgkYKPqRJg8SV6xaiZ3ZTppGneS4yfH5/66fZSDHv+QZci/+h5c5UHtpy67JUqGppM0sh0Nc1dW6/N1W5Yoqat8/TU/VnadmdeW2PLLSyh0cvxBs3KbqTmwYPpxN4do/mzE8nEpvX/UMu2Wbp74zUAK5q6WkHns7V0eWkdPbPzd3rxkTGybadYySumVzhcaJFbs5UrEkQ/+CK8gF5dnh/6ciIZ73gwQ927L1IitoxKLXYP3SjYdOrHHfTZhRRlFyrorafPk20B3HPD1y2G3qKZME5Jcf3t/HUC13/8tSd++vqFveMUTwAUxSUFI1QekR1+bIze3D9MF2aq6cPvG72CgnldWCFqyRw3lwH8ZMerjTD9ElRO7Gv44wNpC90aASqGfVlz/Rx17srQ57/UU26hkhQqUB7dBR71WmzQhHUnblGmVOEw0jhbV1n9OlXUDCIRGaNV5Jp43N516fN7JmnTHdfp7Hgy0luO4aMhtkLL8Bi3bUWYvzh5Mn1dTxrL6QmGuRhGL/TiTTxRoEdTszSaq9GR0NGA3KdkOz3hqSV3MIDhQ5IVX/Ivx3umBti2es2h4eZby7x8br1rkf7Mo90AqC8aQ3sJeNzqFRu+vSANAQe3PL7l0HGOAdwDCeZYvNKeoZp1Qfs6Aipndh86HmFRi0LAnEO47wsqM6cdfjh3jBPUzhZy7nvlUfFsamED1VQt6aISHVymXZ/B2aCtIG8AI8xfobj2d3en1wWVhOeHELKmLQ1s211s88comkv4UCwWyF787mJdYXtNfhKAXVqnKTq8QZvGAGGOfaTo5pGZ/PwbUCr5+DPr/1J92JNHr9aOl/F3iI5+O1nfybsGxoimvZ3ViWSluDITw3P37mypheDIPY0tw7+O/5ApbkYw+zpfaUVu32Pi98+defdUhEpZkRFq0aqyNh9FuL9hpYbEm6iwi0z2REd09ZmyENEbuhjDWzKvZXTqKYaBIr3tt5kuPtQBZFvEUwHt60vfCNu41XsksH9Ij1BMMz1Y0OOunHNShFIP5868g5zeXmuLwL9T4b6Q2+KejgAAAABJRU5ErkJggg==', - 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAAAXNSR0IArs4c6QAABKFJREFUSA3tVl1oFVcQnrMbrak3QUgkya1akpJYcrUtIqW1JvFBE9LiQ5v6JmJpolbMg32rVrhgoYK0QiMY6i9Y6EMaW5D+xFJaTYItIuK2Kr3+BJNwkxBj05sQY3b3nM6cs2dv9t7NT/vQJw/sndk5M/PNzJkzewGerP+pAmy+ON8lLzUJgA8ZYxYIYZmGYRnctDaWvJJAmTtfP1pvXsBCCPP8QFcCaRkZYACgDZFO4stNIcBCajEOlmmC9XpJ9bAGCaPaPmzPl32dvLSVu3BWCTQs0XQQ6g0DYgwLIoAZbBCdW/i+781o1VVlm/410mw4h06Y7bIPHNyWDyL4FHkX03Q8SrzNhZTZriieckWt7cL6MM85YcLpsi/7O9/iXFT6MswI0DmmpkSaJ0qLxFIm3+i1THHB3zmBH3PYx9CcykcLOeQVVa7QtdxTgQgEleX2AjHYfwA+2ddV77ruGoJUbhGDI09YSNXyMpUt5ylOzxgbUmtOp7NmbNt8v3arjTBfYELmLUV+M+nSawNNAUqpT3ClJWg5I3BLT+cGW/DXNGCa6tx1aakCGEigArTn4TDIPdrXXYKCZNrHLMCOEPvHBlLQ99s9eHB7EB6NTki73CVPQ2F5MSx/uRQixfmq7rK0wYD8w8E905bnPDfwoWs/rfv93NWN/ZfvwsLIU7A09gxECyISeGJkHAau98L97tuw7NXnoPyNF8FcYGLGKsOs0mN3OEyec9esGW/ZEl945dTP34wlR2FZVQWU1q0Cw8Tr7p+hgLLNL0FPxx/Q35mA8aEUrH6nCgwEl0tn7wUiZYJnNRh6DK4UH/k0lfyrsBKdPVv/AriGIQcEDQZ65LBAGe2Rzui9Ybjz7XUppz1/uKBbyVPGkN3ZAeC6hr0x7Nr38N5+EqkoOm17xpoqR9ohQF55ERSvr4Dkr3chNfC3DMzGJlNBElW8w9nsGQvhNGIzDkXzCg8cLK951xHsFBlTJspJNi3ZFIMF2AeDV3q8DNOB+YHi6QTrChDIWDBRi5U5f+ZMfJLu3ccrqxtdxk4SKH336LFxSmkqefwU5T8fhdSdQf9IVKD6aNiwI/hnmcAZ91isYMJIaCUCx9W098+LgruikeTqzqqxKPUwqJyCPJiyemVVZBOijDGjD38Os0jOiSPL1z3SPjXNANbiNPXAdzTfukjjuknNBbyz3nwgTd3AVFqUJ5hpHlq9MveLnWwttUfoygBmvVjuikxND3znrhsELnZk7k+OjIGxeNEkomyLVta0xxn+HZhjBc4YZ/AFjHjz9u3xRZl2BN4aq9nFwWh16IrQ1aHHEd3j1+4/dB9OtH4e29A2H1DyHQRmOSfQZ1Fy7MHBTGB6J/Djq6p3OxyO2cB+4Car7v/o3GXgfAkj23+x9ID1Teoamo/SXcbvSf2PX7Vc8DdCmE1vN9di+32P9/5YR3vLnhCVGUWBjEkr3yh4H8v9CzmsbdhzOKzsJKM90iFdaTMjRPhGVsakRvOaRidljo6H6G7j+ctrJpsP+4COhDIl0La2+FS4+5mlocBaXY5QnGZysIBYoeSsl5qQzrSj/cgNrfuEzlWBfwA+EjrZyWUvpAAAAABJRU5ErkJggg==' - ], - currentBadge: '' - } - }, - created () { - if (this.$themeConfig.titleBadgeIcons) { - this.badges = this.$themeConfig.titleBadgeIcons - } - this.currentBadge = this.getBadge() - }, - watch: { - '$route.path' () { - this.currentBadge = this.getBadge() - } - }, - methods: { - getBadge () { - return this.badges[Math.floor(Math.random() * this.badges.length)] - } - } -} diff --git a/vdoing/node_utils/getSidebarData.js b/vdoing/node_utils/getSidebarData.js deleted file mode 100644 index ab52ffd..0000000 --- a/vdoing/node_utils/getSidebarData.js +++ /dev/null @@ -1,185 +0,0 @@ -const fs = require('fs'); // 文件模块 -const path = require('path'); // 路径模块 -const chalk = require('chalk') // 命令行打印美化 -const matter = require('gray-matter'); // front matter解析器 -const log = console.log - -let catalogueData = {}; // 目录页数据 - -/** - * 生成侧边栏数据 - * @param {String} sourceDir .md文件所在源目录(一般是docs目录) - * @param {Boolean} collapsable 是否可折叠 - */ -function createSidebarData(sourceDir, collapsable) { - const sidebarData = {}; - const tocs = readTocs(sourceDir); - tocs.forEach(toc => { // toc是每个目录的绝对路径 - - if (toc.substr(-6) === '_posts') { // 碎片化文章 - - // 注释说明:碎片化文章不需要生成结构化侧边栏 2020.05.01 - // const sidebarArr = mapTocToPostSidebar(toc); - // sidebarData[`/${path.basename(toc)}/`] = sidebarArr - - } else { - const sidebarObj = mapTocToSidebar(toc, collapsable); - if (!sidebarObj.sidebar.length) { - log(chalk.yellow(`warning: 该目录 "${toc}" 内部没有任何文件或文件序号出错,将忽略生成对应侧边栏`)) - return; - } - sidebarData[`/${path.basename(toc)}/`] = sidebarObj.sidebar - sidebarData.catalogue = sidebarObj.catalogueData - } - }) - - return sidebarData -} - -module.exports = createSidebarData; - - -/** - * 读取指定目录下的文件绝对路径 - * @param {String} root 指定的目录 -*/ -function readTocs(root) { - const result = []; - const files = fs.readdirSync(root); // 读取目录,返回数组,成员是root底下所有的目录名 (包含文件夹和文件) - files.forEach(name => { - const file = path.resolve(root, name); // 将路径或路径片段的序列解析为绝对路径 - if (fs.statSync(file).isDirectory() && name !== '.vuepress' && name !== '@pages') { // 是否为文件夹目录,并排除.vuepress文件夹 - result.push(file); - } - }) - return result; -} - - -/** - * 将碎片化文章目录(_posts)映射为对应的侧边栏配置数据 - * @param {String} root - */ -function mapTocToPostSidebar(root) { - let postSidebar = [] // 碎片化文章数据 - const files = fs.readdirSync(root); // 读取目录(文件和文件夹),返回数组 - - files.forEach(filename => { - const file = path.resolve(root, filename); // 方法:将路径或路径片段的序列解析为绝对路径 - const stat = fs.statSync(file); // 文件信息 - - const fileNameArr = filename.split('.'); - if (fileNameArr.length > 2) { - log(chalk.yellow(`warning: 该文件 "${file}" 在_posts文件夹中,不应有序号,且文件名中间不应有'.'`)) - return - } - if (stat.isDirectory()) { // 是文件夹目录 - // log(chalk.yellow(`warning: 该目录 "${file}" 内文件无法生成侧边栏,_posts文件夹里面不能有二级目录。`)) - return - } - - let [title, type] = filename.split('.'); - if (type !== 'md') { - log(chalk.yellow(`warning: 该文件 "${file}" 非.md格式文件,不支持该文件类型`)) - return; - } - - const contentStr = fs.readFileSync(file, 'utf8') // 读取md文件内容,返回字符串 - const { data } = matter(contentStr, {}) // 解析出front matter数据 - const { permalink = '', titleTag = '' } = data || {} - if (data.title) { - title = data.title - } - const item = [filename, title, permalink] - if (titleTag) { - item.push(titleTag) - } - postSidebar.push(item); // [<路径>, <标题>, <永久链接>, ] - }) - - return postSidebar -} - - -/** - * 将目录映射为对应的侧边栏配置数据 - * @param {String} root - * @param {Boolean} collapsable - * @param {String} prefix - */ - -function mapTocToSidebar(root, collapsable, prefix = '') { - let sidebar = []; // 结构化文章侧边栏数据 - const files = fs.readdirSync(root); // 读取目录(文件和文件夹),返回数组 - - files.forEach(filename => { - const file = path.resolve(root, filename); // 方法:将路径或路径片段的序列解析为绝对路径 - const stat = fs.statSync(file); // 文件信息 - if (filename === '.DS_Store') { // 过滤.DS_Store文件 - return - } - // let [order, title, type] = filename.split('.'); - - const fileNameArr = filename.split('.') - const isDir = stat.isDirectory() - let order = '', title = '', type = ''; - if (fileNameArr.length === 2) { - order = fileNameArr[0]; - title = fileNameArr[1]; - } else { - const firstDotIndex = filename.indexOf('.'); - const lastDotIndex = filename.lastIndexOf('.'); - order = filename.substring(0, firstDotIndex); - type = filename.substring(lastDotIndex + 1); - if (isDir) { - title = filename.substring(firstDotIndex + 1); - } else { - title = filename.substring(firstDotIndex + 1, lastDotIndex); - } - } - - order = parseInt(order, 10); - if (isNaN(order) || order < 0) { - log(chalk.yellow(`warning: 该文件 "${file}" 序号出错,请填写正确的序号`)) - return; - } - if (sidebar[order]) { // 判断序号是否已经存在 - log(chalk.yellow(`warning: 该文件 "${file}" 的序号在同一级别中重复出现,将会被覆盖`)) - } - if (isDir) { // 是文件夹目录 - sidebar[order] = { - title, - collapsable, // 是否可折叠,默认true - children: mapTocToSidebar(file, collapsable, prefix + filename + '/').sidebar // 子栏路径添加前缀 - } - } else { // 是文件 - if (type !== 'md') { - log(chalk.yellow(`warning: 该文件 "${file}" 非.md格式文件,不支持该文件类型`)) - return; - } - const contentStr = fs.readFileSync(file, 'utf8') // 读取md文件内容,返回字符串 - const { data } = matter(contentStr, {}) // 解析出front matter数据 - const { permalink = '', titleTag = '' } = data || {} - - // 目录页对应的永久链接,用于给面包屑提供链接 - const { pageComponent } = data - if (pageComponent && pageComponent.name === "Catalogue") { - catalogueData[title] = permalink - } - - if (data.title) { - title = data.title - } - const item = [prefix + filename, title, permalink] - if (titleTag) item.push(titleTag) - sidebar[order] = item; // [<路径>, <标题>, <永久链接>, ] - - } - }) - - sidebar = sidebar.filter(item => item !== null && item !== undefined); - return { - sidebar, - catalogueData - }; -} diff --git a/vdoing/node_utils/handlePage.js b/vdoing/node_utils/handlePage.js deleted file mode 100644 index 5268653..0000000 --- a/vdoing/node_utils/handlePage.js +++ /dev/null @@ -1,82 +0,0 @@ -// 生成或删除页面(分类页、标签页、归档页...) - -const fs = require('fs'); // 文件模块 -const path = require('path'); // 路径模块 -const chalk = require('chalk') // 命令行打印美化 -const { type } = require('./modules/fn'); -const log = console.log - -function createPage (sourceDir, page) { - const dirPath = path.join(sourceDir, '@pages') // 生成的文件夹路径 - - // 文件夹不存在时 - if (!fs.existsSync(dirPath)) { - fs.mkdirSync(dirPath) // 创建文件夹 - } - - const pagePath = path.join(dirPath, `${page}.md`) // 生成的文件路径 - - // 文件已经存在时跳出 - if (fs.existsSync(pagePath)) { - return - } - - // 注意:反引号字符串的格式会映射到文件 - let content = '' - if (page.indexOf('categories') > -1) { - content = `--- -categoriesPage: true -title: 分类 -permalink: /categories/ -article: false ----` - } else if (page.indexOf('tags') > -1) { - content = `--- -tagsPage: true -title: 标签 -permalink: /tags/ -article: false ----` - } else if (page.indexOf('archives') > -1) { - content = `--- -archivesPage: true -title: 归档 -permalink: /archives/ -article: false ----` - } - - if (content) { - fs.writeFileSync(pagePath, content) - log(chalk.blue('tip ') + chalk.green(`create page(生成页面): ${pagePath}`)) - } -} - -// 删除页面文件 -function deletePage (sourceDir, page) { - const dirPath = path.join(sourceDir, '@pages') // 文件夹路径 - const pagePath = path.join(dirPath, `${page}.md`) // 文件路径 - - // 文件是否存在 - if (fs.existsSync(pagePath)) { - fs.unlinkSync(pagePath) - log(chalk.blue('tip ') + chalk.green(`delete page(删除页面): ${pagePath}`)) - } - deleteDir(dirPath) -} - -// 删除文件夹 -function deleteDir (dirPath) { - if (fs.existsSync(dirPath)) { - const files = fs.readdirSync(dirPath) - if (type(files) === 'array' && files.length === 0) { - fs.rmdirSync(dirPath) - log(chalk.blue('tip ') + chalk.green(`delete dir(删除目录): ${dirPath}`)) - } - } -} - -module.exports = { - createPage, - deletePage -} diff --git a/vdoing/node_utils/modules/fn.js b/vdoing/node_utils/modules/fn.js deleted file mode 100644 index 1528498..0000000 --- a/vdoing/node_utils/modules/fn.js +++ /dev/null @@ -1,21 +0,0 @@ -// 类型判断 -exports.type = function (o) { - var s = Object.prototype.toString.call(o) - return s.match(/\[object (.*?)\]/)[1].toLowerCase() -} - -// 修复date时区格式的问题 -exports.repairDate = function (date) { - date = new Date(date); - return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())} ${zero(date.getUTCHours())}:${zero(date.getUTCMinutes())}:${zero(date.getUTCSeconds())}`; -} - -// 日期的格式 -exports.dateFormat = function (date) { - return `${date.getFullYear()}-${zero(date.getMonth() + 1)}-${zero(date.getDate())} ${zero(date.getHours())}:${zero(date.getMinutes())}:${zero(date.getSeconds())}` -} - -// 小于10补0 -function zero (d) { - return d.toString().padStart(2, '0') -} diff --git a/vdoing/node_utils/modules/readFileList.js b/vdoing/node_utils/modules/readFileList.js deleted file mode 100644 index 4e8d20d..0000000 --- a/vdoing/node_utils/modules/readFileList.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * 读取所有md文件数据 - */ -const fs = require('fs'); // 文件模块 -const path = require('path'); // 路径模块 -const chalk = require('chalk') // 命令行打印美化 -const log = console.log - -function readFileList(dir, filesList = []) { - const files = fs.readdirSync(dir); - files.forEach((item, index) => { - let filePath = path.join(dir, item); - const stat = fs.statSync(filePath); - if (stat.isDirectory() && item !== '.vuepress' && item !== '@pages') { - readFileList(path.join(dir, item), filesList); //递归读取文件 - } else { - if (path.basename(dir) !== 'docs') { // 过滤docs目录级下的文件 - - const filename = path.basename(filePath) - const fileNameArr = filename.split('.') - const firstDotIndex = filename.indexOf('.'); - const lastDotIndex = filename.lastIndexOf('.'); - - let name = null, type = null; - if (fileNameArr.length === 2) { // 没有序号的文件 - name = fileNameArr[0] - type = fileNameArr[1] - } else if (fileNameArr.length >= 3) { // 有序号的文件(或文件名中间有'.') - name = filename.substring(firstDotIndex + 1, lastDotIndex) - type = filename.substring(lastDotIndex + 1) - } - - if (type === 'md') { // 过滤非md文件 - filesList.push({ - name, - filePath - }); - } - } - } - }); - return filesList; -} - -module.exports = readFileList; diff --git a/vdoing/node_utils/setFrontmatter.js b/vdoing/node_utils/setFrontmatter.js deleted file mode 100644 index e3a5716..0000000 --- a/vdoing/node_utils/setFrontmatter.js +++ /dev/null @@ -1,172 +0,0 @@ -const fs = require('fs'); // 文件模块 -const matter = require('gray-matter'); // FrontMatter解析器 https://github.com/jonschlinkert/gray-matter -const jsonToYaml = require('json2yaml') -const chalk = require('chalk') // 命令行打印美化 -// const arg = process.argv.splice(2)[0]; // 获取命令行传入的参数 -const readFileList = require('./modules/readFileList'); -const { type, repairDate, dateFormat } = require('./modules/fn'); -const log = console.log -const path = require('path'); -const os = require('os'); - -const PREFIX = '/pages/' - -/** - * 给.md文件设置frontmatter(标题、日期、永久链接等数据) - */ -function setFrontmatter(sourceDir, themeConfig) { - const { category: isCategory, tag: isTag, categoryText = '随笔', extendFrontmatter } = themeConfig - const files = readFileList(sourceDir) // 读取所有md文件数据 - // 扩展自定义生成frontmatter - const extendFrontmatterStr = extendFrontmatter ? - jsonToYaml.stringify(extendFrontmatter) - .replace(/\n\s{2}/g, "\n") - .replace(/"|---\n/g, "") - : ''; - - files.forEach(file => { - let dataStr = fs.readFileSync(file.filePath, 'utf8');// 读取每个md文件内容 - - // fileMatterObj => {content:'剔除frontmatter后的文件内容字符串', data:{}, ...} - const fileMatterObj = matter(dataStr, {}); - - if (Object.keys(fileMatterObj.data).length === 0) { // 未定义FrontMatter数据 - const stat = fs.statSync(file.filePath); - const dateStr = dateFormat( - getBirthtime(stat) - ); // 文件的创建时间 - const categories = getCategories( - file, - categoryText - ); - - let cateLabelStr = ''; - categories.forEach(item => { - cateLabelStr += os.EOL + ' - ' + item - }); - - let cateStr = ''; - if (!(isCategory === false)) { - cateStr = os.EOL + 'categories:' + cateLabelStr - }; - - // 注意下面这些反引号字符串的格式会映射到文件 - const tagsStr = isTag === false ? '' : ` -tags: - - `; - - const fmData = `--- -title: ${file.name} -date: ${dateStr} -permalink: ${getPermalink()}${file.filePath.indexOf('_posts') > -1 ? os.EOL + 'sidebar: auto' : ''}${cateStr}${tagsStr} -${extendFrontmatterStr}---`; - - fs.writeFileSync(file.filePath, `${fmData}${os.EOL}${fileMatterObj.content}`); // 写入 - log(chalk.blue('tip ') + chalk.green(`write frontmatter(写入frontmatter):${file.filePath} `)) - - } else { // 已有FrontMatter - let matterData = fileMatterObj.data; - let hasChange = false; - - // 已有FrontMatter,但是没有title、date、permalink、categories、tags数据的 - if (!matterData.hasOwnProperty('title')) { // 标题 - matterData.title = file.name; - hasChange = true; - } - - if (!matterData.hasOwnProperty('date')) { // 日期 - const stat = fs.statSync(file.filePath); - matterData.date = dateFormat(getBirthtime(stat)); - hasChange = true; - } - - if (!matterData.hasOwnProperty('permalink')) { // 永久链接 - matterData.permalink = getPermalink(); - hasChange = true; - } - - if (file.filePath.indexOf('_posts') > -1 && !matterData.hasOwnProperty('sidebar')) { // auto侧边栏,_posts文件夹特有 - matterData.sidebar = "auto"; - hasChange = true; - } - - if (!matterData.hasOwnProperty('pageComponent') && matterData.article !== false) { // 是文章页才添加分类和标签 - if (isCategory !== false && !matterData.hasOwnProperty('categories')) { // 分类 - matterData.categories = getCategories(file, categoryText) - hasChange = true; - } - if (isTag !== false && !matterData.hasOwnProperty('tags')) { // 标签 - matterData.tags = ['']; - hasChange = true; - } - } - - // 扩展自动生成frontmatter的字段 - if (type(extendFrontmatter) === 'object') { - Object.keys(extendFrontmatter).forEach(keyName => { - if (!matterData.hasOwnProperty(keyName)) { - matterData[keyName] = extendFrontmatter[keyName] - hasChange = true; - } - }) - } - - if (hasChange) { - if (matterData.date && type(matterData.date) === 'date') { - matterData.date = repairDate(matterData.date) // 修复时间格式 - } - const newData = jsonToYaml.stringify(matterData).replace(/\n\s{2}/g, "\n").replace(/"/g, "") + '---' + os.EOL + fileMatterObj.content; - fs.writeFileSync(file.filePath, newData); // 写入 - log(chalk.blue('tip ') + chalk.green(`write frontmatter(写入frontmatter):${file.filePath} `)) - } - - } - }) -} - -// 获取分类数据 -function getCategories(file, categoryText) { - let categories = [] - - if (file.filePath.indexOf('_posts') === -1) { - // 不在_posts文件夹 - let filePathArr = file.filePath.split(path.sep) // path.sep用于兼容不同系统下的路径斜杠 - filePathArr.pop() - - let ind = filePathArr.indexOf('docs') - if (ind !== -1) { - while (filePathArr[++ind] !== undefined) { - const item = filePathArr[ind] - const firstDotIndex = item.indexOf('.'); - categories.push(item.substring(firstDotIndex + 1) || '') // 获取分类 - // categories.push(filePathArr[ind].split('.').pop()) // 获取分类 - } - } - } else { - // 碎片化文章的分类生成 - const matchResult = file.filePath.match(/_posts\/(\S*)\//); - const resultStr = matchResult ? matchResult[1] : '' - const resultArr = resultStr.split('/').filter(Boolean) - - if (resultArr.length) { - categories.push(...resultArr) - } else { - categories.push(categoryText) - } - } - return categories -} - -// 获取文件创建时间 -function getBirthtime(stat) { - // 在一些系统下无法获取birthtime属性的正确时间,使用atime代替 - return stat.birthtime.getFullYear() != 1970 ? stat.birthtime : stat.atime -} - -// 定义永久链接数据 -function getPermalink() { - return `${PREFIX + (Math.random() + Math.random()).toString(16).slice(2, 8)}/` -} - - -module.exports = setFrontmatter; diff --git a/vdoing/noopModule.js b/vdoing/noopModule.js deleted file mode 100644 index b1c6ea4..0000000 --- a/vdoing/noopModule.js +++ /dev/null @@ -1 +0,0 @@ -export default {} diff --git a/vdoing/package.json b/vdoing/package.json deleted file mode 100644 index ff17100..0000000 --- a/vdoing/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "vuepress-theme-vdoing", - "version": "1.12.8", - "description": "Vdoing theme for VuePress. 一个基于VuePress的知识管理兼博客主题。", - "author": { - "name": "gaoyi(Evan) Xu" - }, - "homepage": "https://github.com/xugaoyi/vuepress-theme-vdoing#readme", - "bugs": { - "url": "https://github.com/xugaoyi/vuepress-theme-vdoing/issues" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/xugaoyi/vuepress-theme-vdoing.git" - }, - "keywords": [ - "documentation", - "vue", - "vuepress", - "generator", - "theme", - "blog" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "name": "Evan xu", - "email": "894072666@qq.com" - } - ], - "dependencies": { - "@better-scroll/core": "^2.0.0-beta.6", - "@better-scroll/slide": "^2.0.0-beta.6", - "@vuepress/plugin-active-header-links": "^1.2.0", - "@vuepress/plugin-nprogress": "^1.2.0", - "@vuepress/plugin-search": "^1.2.0", - "chalk": "^4.0.0", - "docsearch.js": "^2.5.2", - "good-storage": "^1.1.1", - "js-yaml": "^3.13.1", - "json2yaml": "^1.1.0", - "lodash": "^4.17.15", - "stylus": "^0.54.5", - "stylus-loader": "^3.0.2", - "vuepress-plugin-container": "^2.0.2", - "vuepress-plugin-smooth-scroll": "^0.0.3" - }, - "devDependencies": { - "@vuepress/types": "^1.9.5" - }, - "engines": { - "node": ">=14.17.0" - } -} diff --git a/vdoing/styles/arrow.styl b/vdoing/styles/arrow.styl deleted file mode 100644 index 20bffc0..0000000 --- a/vdoing/styles/arrow.styl +++ /dev/null @@ -1,22 +0,0 @@ -@require './config' - -.arrow - display inline-block - width 0 - height 0 - &.up - border-left 4px solid transparent - border-right 4px solid transparent - border-bottom 6px solid $arrowBgColor - &.down - border-left 4px solid transparent - border-right 4px solid transparent - border-top 6px solid $arrowBgColor - &.right - border-top 4px solid transparent - border-bottom 4px solid transparent - border-left 6px solid $arrowBgColor - &.left - border-top 4px solid transparent - border-bottom 4px solid transparent - border-right 6px solid $arrowBgColor diff --git a/vdoing/styles/code-theme.styl b/vdoing/styles/code-theme.styl deleted file mode 100644 index 922a67c..0000000 --- a/vdoing/styles/code-theme.styl +++ /dev/null @@ -1,274 +0,0 @@ -// 适合浅色背景 //@import '~prismjs/themes/prism.css' -codeThemeLight() - code[class*="language-"], - pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - font-size: 1em; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; - } - - pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, - code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; - } - - pre[class*="language-"]::selection, pre[class*="language-"] ::selection, - code[class*="language-"]::selection, code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; - } - - @media print { - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } - } - - /* Code blocks */ - pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; - } - - :not(pre) > code[class*="language-"], - pre[class*="language-"] { - background: #f5f2f0; - } - - /* Inline code */ - :not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; - } - - .token.comment, - .token.prolog, - .token.doctype, - .token.cdata { - color: slategray; - } - - .token.punctuation { - color: #999; - } - - .namespace { - opacity: .7; - } - - .token.property, - .token.tag, - .token.boolean, - .token.number, - .token.constant, - .token.symbol, - .token.deleted { - color: #905; - } - - .token.selector, - .token.attr-name, - .token.string, - .token.char, - .token.builtin, - .token.inserted { - color: #690; - } - - .token.operator, - .token.entity, - .token.url, - .language-css .token.string, - .style .token.string { - color: #9a6e3a; - background: hsla(0, 0%, 100%, .5); - } - - .token.atrule, - .token.attr-value, - .token.keyword { - color: #07a; - } - - .token.function, - .token.class-name { - color: #DD4A68; - } - - .token.regex, - .token.important, - .token.variable { - color: #e90; - } - - .token.important, - .token.bold { - font-weight: bold; - } - .token.italic { - font-style: italic; - } - - .token.entity { - cursor: help; - } - - // 行高亮颜色 - div[class*="language-"] - .highlight-lines - .highlighted - background-color rgba(200, 200, 200, 40%) - &.line-numbers-mode - .highlight-lines .highlighted - &:before - background-color rgba(200, 200, 200, 40%) - - -// 适合深色背景 // @import '~prismjs/themes/prism-tomorrow.css' -codeThemeDark() - code[class*="language-"], - pre[class*="language-"] { - color: #ccc; - background: none; - text-shadow: none; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - font-size: 1em; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; - - } - - /* Code blocks */ - pre[class*="language-"] { - padding: 1em; - margin: .5em 0; - overflow: auto; - } - - :not(pre) > code[class*="language-"], - pre[class*="language-"] { - background: #2d2d2d; - } - - /* Inline code */ - :not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; - } - - .token.comment, - .token.block-comment, - .token.prolog, - .token.doctype, - .token.cdata { - color: #999; - } - - .token.punctuation { - color: #ccc; - } - - .token.tag, - .token.attr-name, - .token.namespace, - .token.deleted { - color: #e2777a; - } - - .token.function-name { - color: #6196cc; - } - - .token.boolean, - .token.number, - .token.function { - color: #f08d49; - } - - .token.property, - .token.class-name, - .token.constant, - .token.symbol { - color: #f8c555; - } - - .token.selector, - .token.important, - .token.atrule, - .token.keyword, - .token.builtin { - color: #cc99cd; - } - - .token.string, - .token.char, - .token.attr-value, - .token.regex, - .token.variable { - color: #7ec699; - } - - .token.operator, - .token.entity, - .token.url { - color: #67cdcc; - } - - .token.operator, - .token.entity, - .token.url, - .language-css .token.string, - .style .token.string { - background: none; - } - - .token.important, - .token.bold { - font-weight: bold; - } - .token.italic { - font-style: italic; - } - - .token.entity { - cursor: help; - } - - .token.inserted { - color: green; - } diff --git a/vdoing/styles/code.styl b/vdoing/styles/code.styl deleted file mode 100644 index 36206af..0000000 --- a/vdoing/styles/code.styl +++ /dev/null @@ -1,142 +0,0 @@ -body {$contentClass} - code - color var(--textLightenColor) - padding 0.25rem 0.5rem - margin 0 - font-size 0.9em - // background-color rgba(27,31,35,0.05) - background-color rgba(100,100,100,0.08) - border-radius 3px - .token - &.deleted - color #EC5975 - &.inserted - color $accentColor - -body {$contentClass} - pre, pre[class*="language-"] - line-height 1.4 - padding 1.25rem 1.5rem - margin 0.85rem 0 - background-color $codeBgColor - border-radius 6px - overflow auto - code - // color #fff - color var(--codeColor) - padding 0 - background-color transparent - border-radius 0 - -div[class*="language-"] - position relative - // background-color $codeBgColor - background-color var(--codeBg) - border-radius 6px - .highlight-lines - user-select none - padding-top 1.3rem - position absolute - top 0 - left 0 - width 100% - line-height 1.4 - .highlighted - background-color rgba(0, 0, 0, 30%) - pre, pre[class*="language-"] - background transparent - position relative !important - z-index 1 - &::before - position absolute - z-index 3 - top 0.8em - right 1em - font-size 0.8rem - color rgba(150,150,150,.7) - // color rgba(255, 255, 255, 0.4) - &:not(.line-numbers-mode) - .line-numbers-wrapper - display none - &.line-numbers-mode - .highlight-lines .highlighted - position relative - &:before - content ' ' - position absolute - z-index 3 - left 0 - top 0 - display block - width $lineNumbersWrapperWidth - height 100% - background-color rgba(0, 0, 0, 30%) - pre - padding-left $lineNumbersWrapperWidth + 1 rem - vertical-align middle - .line-numbers-wrapper - position absolute - top 0 - width $lineNumbersWrapperWidth - text-align center - // color rgba(255, 255, 255, 0.3) - color rgba(127, 127, 127, .5) - padding 1.25rem 0 - line-height 1.4 - br - user-select none - .line-number - position relative - z-index 4 - user-select none - font-size 0.85em - &::after - content '' - position absolute - z-index 2 - top 0 - left 0 - width $lineNumbersWrapperWidth - height 100% - border-radius 6px 0 0 6px - // border-right 1px solid rgba(0, 0, 0, 66%) - // background-color $codeBgColor - border-right 1px solid var(--borderColor) - background-color var(--codeBg) - - -for lang in $codeLang - div{'[class~="language-' + lang + '"]'} - &:before - content ('' + lang) - -div[class~="language-javascript"] - &:before - content "js" - -div[class~="language-typescript"] - &:before - content "ts" - -div[class~="language-markup"] - &:before - content "html" - -div[class~="language-markdown"] - &:before - content "md" - -div[class~="language-json"]:before - content "json" - -div[class~="language-ruby"]:before - content "rb" - -div[class~="language-python"]:before - content "py" - -div[class~="language-bash"]:before - content "sh" - -div[class~="language-php"]:before - content "php" diff --git a/vdoing/styles/config.styl b/vdoing/styles/config.styl deleted file mode 100644 index fa973ff..0000000 --- a/vdoing/styles/config.styl +++ /dev/null @@ -1 +0,0 @@ -$contentClass = '.theme-vdoing-content' diff --git a/vdoing/styles/custom-blocks.styl b/vdoing/styles/custom-blocks.styl deleted file mode 100644 index e212779..0000000 --- a/vdoing/styles/custom-blocks.styl +++ /dev/null @@ -1,87 +0,0 @@ -.custom-block - .custom-block-title - font-weight 600 - margin-bottom .2rem - p - margin 0 - &.tip, &.warning, &.danger, &.note - padding .5rem 1.5rem - border-left-width .5rem - border-left-style solid - margin 1rem 0 - &.tip - background-color #f3f5f7 - border-color #42b983 - color darken(#42b983, 50%) - &.warning - background-color #FFF7D0 - border-color darken(#ffe564, 35%) - color darken(#ffe564, 70%) - .custom-block-title - color darken(#ffe564, 50%) - a - color var(--textColor) - &.danger - background-color #ffe6e6 - border-color darken(red, 20%) - color darken(red, 70%) - .custom-block-title - color darken(red, 40%) - a - color var(--textColor) - &.note - background-color #E8F5FA - border-color #157BAE - color darken(#157BAE, 40%) - &.right - color var(--textColor) - font-size 0.9rem - text-align right - &.theorem - margin 1rem 0 - padding .8rem 1.5rem - border-radius 2px - background-color var(--customBlockBg) - .title - font-weight bold - margin .5rem 0 - &.details - display block - position relative - border-radius 2px - margin 1em 0 - padding 1.6em - background-color var(--customBlockBg) - p - margin .8rem 0 - h4 - margin-top 0 - figure, p - &:last-child - margin-bottom 0 - padding-bottom 0 - summary - outline none - cursor pointer - &:hover - color $accentColor - -// 深色模式适配 -.theme-mode-dark - .custom-block - &.warning - background-color rgba(255, 247, 208, .2) - color darken(#ffe564, 35%) - .custom-block-title - color darken(#ffe564, 15%) - &.tip - background-color rgba(243, 245, 247, .2) - color darken(#42b983, 0%) - &.danger - background-color rgba(255, 230, 230, .4) - color darken(red, 50%) - a - color $accentColor - &.note - background-color rgba(243, 245, 247, .2) - color darken(#157BAE, 0%) diff --git a/vdoing/styles/index.styl b/vdoing/styles/index.styl deleted file mode 100644 index f27a48e..0000000 --- a/vdoing/styles/index.styl +++ /dev/null @@ -1,318 +0,0 @@ -// 引入字体图标 -@import '//at.alicdn.com/t/font_1678482_4tbhmh589x.css' - -@require './config' -@require './code' -@require './custom-blocks' -@require './arrow' -@require './wrapper' -@require './toc' -@require './markdown-container' - - -html, body - padding 0 - margin 0 - -body - font-family -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif - -webkit-font-smoothing antialiased - -moz-osx-font-smoothing grayscale - -webkit-tap-highlight-color transparent - font-size 16px - color $textColor - background var(--bodyBg) - -// 去掉黄色边框 -a,input,button - outline: none; -webkit-tap-highlight-color: rgba(255, 255, 255, 0); -webkit-focus-ring-color: rgba(0, 0, 0, 0); -// 滚动条样式 -@media (min-width: $MQMobile) - ::-webkit-scrollbar - width:6px; - height:5px; - ::-webkit-scrollbar-track-piece - background-color:rgba(0,0,0,.15) - -webkit-border-radius:3px - ::-webkit-scrollbar-thumb:vertical - height:5px; - background-color:rgba(0,0,0,.28) - -webkit-border-radius:3px - ::-webkit-scrollbar-thumb:horizontal - width:5px; - background-color:rgba(0,0,0,.28) - -webkit-border-radius:3px - - -.card-box // 卡片 - border-radius 5px - background var(--mainBg) - box-shadow 0px 0px 4px 0 rgba(0,0,0,.1) - transition box-shadow .5s - &:hover - box-shadow 0 1px 15px 0 rgba(0,0,0,.1) - -.theme-style-line - @media (max-width: 719px) - margin-left: -1px; - margin-right: -1px; - .card-box - box-shadow 0 0 - border: 1px solid var(--borderColor) - -.blur // 模糊滤镜 - backdrop-filter saturate(200%) blur(20px) - -.custom-page // 自定义页面 - min-height calc(100vh - 3.6rem) - padding-top $navbarHeight - padding-bottom .9rem - .theme-vdoing-wrapper - margin 0 auto - -// 默认的搜索框样式重置 -body .search-box - input - background-color transparent - color var(--textColor) - border 1px solid var(--borderColor, #ccc) - @media (max-width: $MQNarrow) - border-color transparent - - - -.page - transition padding .2s ease - padding-left .8rem - -.navbar - position fixed - z-index 20 - top 0 - left 0 - right 0 - height $navbarHeight - background-color var(--blurBg) - box-sizing border-box - box-shadow 0 2px 5px rgba(0,0,0,.06) - -.sidebar-mask - position fixed - z-index 12 - top 0 - left 0 - width 100vw - height 100vh - display none - -.sidebar-hover-trigger - display none - position: fixed - z-index 12 - top ($navbarHeight + 4.5rem) - left 0 - bottom 0 - width 24px - -.sidebar - font-size 16px - background-color var(--sidebarBg) - width $sidebarWidth - position fixed - z-index 13 - margin 0 - top $navbarHeight - left 0 - bottom 0 - box-sizing border-box - border-right 1px solid var(--borderColor) - overflow-y auto - transform translateX(-100%) - transition transform .2s - @media (max-width: $MQMobile) - background-color var(--mainBg) - - -{$contentClass}:not(.custom) - word-wrap break-word - @extend $wrapper - > *:first-child - // margin-top $navbarHeight // 内容第一个元素的top距离 - - a:hover - text-decoration underline - - p.demo - padding 1rem 1.5rem - border 1px solid #ddd - border-radius 4px - - img - max-width 100% - -{$contentClass}.custom - padding 0 - margin 0 - - img - max-width 100% - -a - font-weight 500 - color $accentColor - text-decoration none - -p a code - font-weight 400 - color $accentColor - -kbd - background #eee - border solid 0.15rem #ddd - border-bottom solid 0.25rem #ddd - border-radius 0.15rem - padding 0 0.15em - -blockquote - font-size 1rem - opacity .75 - border-left .2rem solid rgba(100,100,100,.3) - margin 1rem 0 - padding .25rem 0 .25rem 1rem - - & > p - margin 0 - -ul, ol - padding-left 1.2em - -strong - font-weight 600 - -h1, h2, h3, h4, h5, h6 - font-weight 600 - line-height 1.25 - - {$contentClass}:not(.custom) > & - margin-top (0.5rem - $navbarHeight) - padding-top ($navbarHeight + 1rem) - margin-bottom 0 - - &:first-child - // margin-top -1.5rem - margin-bottom 1rem - - + p, + pre, + .custom-block - margin-top 2rem - - &:focus .header-anchor, - &:hover .header-anchor - opacity: 1 - - -// 没有h1标签时 -p,pre,.custom-block - {$contentClass}:not(.custom) > & - &:first-child - margin-top 2rem - - -h1 - font-size 1.9rem - {$contentClass}:not(.custom) > & // 页面内容的首个h1标签隐藏 - &:first-child - display none - -h2 - font-size 1.5rem - padding-bottom .3rem - border-bottom 1px solid var(--borderColor) - -h3 - font-size 1.35rem - -.page - h4 - font-size 1.25rem - h5 - font-size 1.15rem - h6 - font-size 1.05rem - -a.header-anchor - font-size 0.85em - float left - margin-left -0.87em - padding-right 0.23em - margin-top 0.125em - opacity 0 - - &:focus, - &:hover - text-decoration none - -code, kbd, .line-number - font-family source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace - -p, ul, ol - line-height 1.7 - -hr - border 0 - border-top 1px solid var(--borderColor) - -table - border-collapse collapse - margin 1rem 0 - overflow-x: auto - width 100% - display inline-table - @media (max-width: $MQMobile) - display block -tr - border-top 1px solid var(--borderColor) - - &:nth-child(2n) - background-color rgba(150,150,150,0.1) - -th, td - border 1px solid var(--borderColor) - padding .6em 1em - @media (max-width: $MQMobile) - padding .3em .5em - a - word-break break-all - -.theme-container - // background var(--mainBg) - color var(--textColor) - min-height 100vh - &.sidebar-open - .sidebar-mask - display: block - - &.no-navbar - {$contentClass}:not(.custom) > h1, h2, h3, h4, h5, h6 - margin-top 1.5rem - padding-top 0 - - .sidebar - top 0 - - -@media (min-width: ($MQMobile + 1px)) - .theme-container.no-sidebar - .sidebar - display none - - .page - padding-left 0 - -@require 'mobile.styl' - -// 打印时的样式 -@media print - .navbar,.sidebar,.buttons - display: none - .page - padding-top: 0 !important diff --git a/vdoing/styles/markdown-container.styl b/vdoing/styles/markdown-container.styl deleted file mode 100644 index 9f9e0bc..0000000 --- a/vdoing/styles/markdown-container.styl +++ /dev/null @@ -1,211 +0,0 @@ -// markdown容器样式 - -// 居中容器 -.center-container - text-align: center - -h1, h2, h3, h4, h5, h6 - .center-container > & - margin-top (0.5rem - $navbarHeight) - padding-top ($navbarHeight + 1rem) - margin-bottom 0 - a.header-anchor - float none - padding-right: 0 - margin-left: -.9rem - - -// 普通卡片列表 -.cardListContainer - margin .7rem 0 - &>:not(.card-list) - display none - .card-list - margin -0.35rem - display: flex; - flex-wrap: wrap; - align-items: flex-start; - .card-item - width calc(100%/3 - .7rem) - margin .35rem - background var(--bodyBg) - border-radius 3px - color var(--textColor) - display flex - box-shadow 1px 1px 2px 0 rgba(0,0,0,.06) - transition all .4s - &:hover - text-decoration none - box-shadow: 0 10px 20px -10px var(--randomColor, rgba(0,0,0,0.15)); - transform: translateY(-3px) scale(1.01, 1.01) - img - // transform rotate(8deg) scale(1.1, 1.1) - box-shadow 3px 2px 7px rgba(0, 0, 0, 0.15) - div p - text-shadow 3px 2px 5px rgba(0, 0, 0, 0.15) - img - width 60px - height 60px - border-radius 50% - border 2px solid #fff - margin 1rem - margin-right 0 - box-shadow 3px 2px 5px rgba(0, 0, 0, 0.08) - transition all .4s - div - flex 1 - display inline-block - float right - padding 1rem 0 - p - margin 0 - padding 0 1rem - transition text-shadow .4s - text-align center - .name - margin .2rem 0 .3rem 0 - .desc - font-size .8rem - line-height 1.1rem - opacity .8 - margin-bottom .2rem - .card-item.row-1 - width calc(100% - .7rem) - img - margin-left 2rem - .card-item.row-2 - width calc(100%/2 - .7rem) - img - margin-left 1.5rem - .card-item.row-3 - width calc(100%/3 - .7rem) - .card-item.row-4 - width calc(100%/4 - .7rem) - -// 图文卡片列表 -.cardImgListContainer - margin 1rem 0 - &>:not(.card-list) - display none - .card-list - margin -0.5rem - display: flex; - flex-wrap: wrap; - align-items: flex-start; - .card-item - width calc(100%/3 - 1rem) - margin .5rem - background var(--mainBg) - border 1px solid rgba(0,0,0,0.1) - box-sizing: border-box - border-radius 3px - overflow hidden - color var(--textColor) - box-shadow 2px 2px 10px rgba(0,0,0,.04) - display flex - flex-direction: column; - justify-content: flex-start; - align-items: stretch; - align-content: stretch; - transition: all .4s - &:hover - box-shadow 1px 1px 20px rgba(0,0,0,.1) - transform: translateY(-3px) - .box-img - overflow hidden - position relative - background #eee - img - display block - width 100% - height 100% - transition: all .3s - // &:hover - // img - // transform: scale(1.1, 1.1) - // opacity .75 - a - color var(--textColor) - transition: color .3s - &:hover - // color $accentColor - text-decoration none - .box-info - padding: .8rem 1rem - p - margin 0 - .desc - margin-top: .3rem - opacity .8 - font-size: .9rem - line-height: 1.1rem - overflow: hidden; - white-space: normal; - text-overflow: ellipsis; - display: -webkit-box; - -webkit-box-orient: vertical; - .box-footer - overflow hidden - padding: .8rem 1rem - border-top: 1px solid rgba(0,0,0,0.1) - img - width 1.8rem - height 1.8rem - border-radius 50% - float left - span - line-height 1.8rem - float left - margin-left: .6rem - font-size: .8rem - .card-item.row-1 - width calc(100% - 1rem) - .card-item.row-2 - width calc(100%/2 - 1rem) - .card-item.row-3 - width calc(100%/3 - 1rem) - .card-item.row-4 - width calc(100%/4 - 1rem) - -.theme-mode-dark - .cardImgListContainer - .card-list - .card-item - border-color: var(--borderColor) - .box-footer - border-color: var(--borderColor) - -// 卡片列表的响应 -@media (max-width: 900px) - .cardListContainer - .card-list - .card-item.row-4 - width calc(100%/3 - .7rem) - .cardImgListContainer - .card-list - .card-item.row-4 - width calc(100%/3 - 1rem) - -@media (max-width: 720px) - .cardListContainer - .card-list - .card-item.row-3, .card-item.row-4 - width calc(100%/2 - .7rem) - img - margin-left 1.5rem - .cardImgListContainer - .card-list - .card-item.row-3, .card-item.row-4 - width calc(100%/2 - 1rem) - -@media (max-width: 500px) - .cardListContainer - .card-list - .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4 - width calc(100% - .7rem) - img - margin-left 1.5rem - .cardImgListContainer - .card-list - .card-item.row-1, .card-item.row-2, .card-item.row-3, .card-item.row-4 - width calc(100% - 1rem) diff --git a/vdoing/styles/mobile.styl b/vdoing/styles/mobile.styl deleted file mode 100644 index 030405d..0000000 --- a/vdoing/styles/mobile.styl +++ /dev/null @@ -1,101 +0,0 @@ -@require './config' - -$mobileSidebarWidth = $sidebarWidth * 0.9 - -// narrow desktop / iPad -@media (max-width: $MQNarrow) - .sidebar - font-size 15px - -@media (max-width: $MQMobile) - .sidebar - width $sidebarWidth * 0.95 - -@media (min-width: ($MQMobile + 1px)) and (max-width: $MQNarrow) - .sidebar - width $mobileSidebarWidth - .theme-container - &.sidebar-open - .page - padding-left ($mobileSidebarWidth + .8rem)!important - -// wide mobile -@media (max-width: $MQMobile) - .sidebar - top 0 - height 100vh - padding-top $navbarHeight - transform translateX(-100%) - transition transform .2s ease - .page - padding-left 0 - .theme-container - &.sidebar-open - .sidebar - transform translateX(0) - .sidebar-mask // 蒙版在小屏中才能显示 - display block - &.no-navbar - .sidebar - padding-top: 0 - -// narrow mobile -@media (max-width: $MQMobileNarrow) - h1 - font-size 1.9rem - {$contentClass} - div[class*="language-"] - margin 0.85rem -1.5rem - border-radius 0 - -// 侧边栏显示隐藏的适配 -@media (min-width: ($MQMobile + 1px)) // 720px - .theme-container - .sidebar-hover-trigger - display: block - .sidebar-hover-trigger:hover ~ .sidebar - transform translateX(0) - z-index: 100 - - &:not(.sidebar-open) - .sidebar-hover-trigger ~ .sidebar:hover - transform translateX(0) - z-index: 100 - - &.sidebar-open - .sidebar-mask - display: none - .sidebar - transform translateX(0) - .sidebar-button - left $sidebarWidth - .page - padding-left ($sidebarWidth + .8rem) - padding-right .8rem - .sidebar-hover-trigger - display: none - - &.have-rightmenu - .page - padding-right ($rightMenuWidth + 20rem) - &.no-sidebar - .page - padding-left 0!important - .sidebar-hover-trigger - display: none - - &.hide-navbar - .sidebar-hover-trigger - top 4.5rem - .sidebar - top 0 - - @media (max-width: $MQNarrow) - .theme-container - &.sidebar-open:not(.on-sidebar) - .sidebar-button - $mobileSidebarWidth = $sidebarWidth * 0.7 - left $mobileSidebarWidth - .theme-container.no-sidebar - .sidebar-button - display none diff --git a/vdoing/styles/palette.styl b/vdoing/styles/palette.styl deleted file mode 100644 index e66eb26..0000000 --- a/vdoing/styles/palette.styl +++ /dev/null @@ -1,96 +0,0 @@ -// 主题调色板 - -// 原主题预设变量 -// 颜色 -// $accentColor = #3eaf7c -// $textColor = #2c3e50 -// $borderColor = #eaecef -// $codeBgColor = #282c34 -// $arrowBgColor = #ccc -// $badgeTipColor = #42b983 -// $badgeWarningColor = darken(#ffe564, 35%) -// $badgeErrorColor = #DA5961 -// 布局 -// $navbarHeight = 3.6rem -// $sidebarWidth = 20rem -// $contentWidth = 740px -// $homePageWidth = 960px -// 代码块 -// $lineNumbersWrapperWidth = 3.5rem - - -@require './code-theme' - -//***vdoing主题-变量***// - -// 颜色 - -$bannerTextColor = #fff // 首页banner区(博客标题)文本颜色 -$accentColor = #11A8CD -$activeColor = #ff5722 -$arrowBgColor = #ccc -// 放弃使用 -// $badgeTipColor = #42b983 -// $badgeWarningColor = darken(#ffe564, 35%) -// $badgeErrorColor = #DA5961 - -// 布局 -$navbarHeight = 3.6rem -$sidebarWidth = 18rem -$contentWidth = 860px -$homePageWidth = 1100px -$rightMenuWidth = 230px // 右侧菜单 - -// 代码块 -$lineNumbersWrapperWidth = 2.5rem - -// 浅色模式 -.theme-mode-light - --bodyBg: #f4f4f4 - --mainBg: rgba(255,255,255,1) - --sidebarBg: rgba(255,255,255,.8) - --blurBg: rgba(255,255,255,.9) - --customBlockBg: #f1f1f1 - --textColor: #00323c - --textLightenColor: #0085AD - --borderColor: rgba(0,0,0,.12) - --codeBg: #f6f6f6 - --codeColor: #525252 - codeThemeLight() - -// 深色模式 -.theme-mode-dark - --bodyBg: rgb(39,39,43) - --mainBg: rgba(30,30,34,1) - --sidebarBg: rgba(30,30,34,.8) - --blurBg: rgba(30,30,34,.8) - --customBlockBg: rgb(39,39,43) - --textColor: rgb(155,155,170) - --textLightenColor: #0085AD - // --borderColor: #2C2C3A - --borderColor: #30363d - --codeBg: #252526 - --codeColor: #fff - codeThemeDark() - -// 阅读模式 -.theme-mode-read - --bodyBg: rgb(236,236,204) - --mainBg: rgba(245,245,213,1) - --sidebarBg: rgba(245,245,213,.8) - --blurBg: rgba(245,245,213,.9) - --customBlockBg: rgb(236,236,204) - --textColor: #704214 - --textLightenColor: #996633 - --borderColor: rgba(0,0,0,.15) - --codeBg: #282c34 - --codeColor: #fff - codeThemeDark() - -// 背景色整体一致 -.theme-style-line.theme-mode-light - --bodyBg: rgba(255,255,255,1) -.theme-style-line.theme-mode-dark - --bodyBg: rgba(30,30,34,1) -.theme-style-line.theme-mode-read - --bodyBg: rgba(245,245,213,1) diff --git a/vdoing/styles/toc.styl b/vdoing/styles/toc.styl deleted file mode 100644 index d3e7106..0000000 --- a/vdoing/styles/toc.styl +++ /dev/null @@ -1,3 +0,0 @@ -.table-of-contents - .badge - vertical-align middle diff --git a/vdoing/styles/wrapper.styl b/vdoing/styles/wrapper.styl deleted file mode 100644 index eacda78..0000000 --- a/vdoing/styles/wrapper.styl +++ /dev/null @@ -1,17 +0,0 @@ -$vdoing-wrapper - max-width $contentWidth - margin 0 auto - padding 1rem 2.5rem 2rem 2.5rem - &:not(.footer) - background var(--mainBg) - box-shadow 0 1px 2px 0 rgba(0,0,0,.1) - // box-shadow 0 0 3px 0 rgba(0,0,0,.1) - margin-bottom 1rem - @media (min-width $contentWidth + 80) - border-radius 2px - @media (max-width: $MQNarrow) - padding 1rem 2rem - @media (max-width: $MQMobileNarrow) - padding 1rem 1.5rem -$wrapper - max-width $contentWidth diff --git a/vdoing/templates/dev.html b/vdoing/templates/dev.html deleted file mode 100644 index 2c53351..0000000 --- a/vdoing/templates/dev.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - -
- - \ No newline at end of file diff --git a/vdoing/templates/ssr.html b/vdoing/templates/ssr.html deleted file mode 100644 index db2fb63..0000000 --- a/vdoing/templates/ssr.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - {{ title }} - - {{{ userHeadTags }}} - {{{ pageMeta }}} - {{{ canonicalLink }}} - {{{ renderResourceHints() }}} - {{{ renderStyles() }}} - - - - {{{ renderScripts() }}} - - diff --git a/vdoing/types/index.ts b/vdoing/types/index.ts deleted file mode 100644 index 98c7e12..0000000 --- a/vdoing/types/index.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { DefaultThemeConfig } from '@vuepress/types' - -type NoSidebar4DefaultThemeConfig = Omit // 忽略sidebar属性 - -/** - * Vdoing主题配置类型 - * @see https://doc.xugaoyi.com/ - */ -export interface VdoingThemeConfig extends NoSidebar4DefaultThemeConfig { - /** - * 是否打开分类功能. Enable classification - * @default true - */ - category?: boolean; - - /** - * 是否打开标签功能. Enable tag - * @default true - */ - tag?: boolean; - - /** - * 是否打开归档功能. Enable archive - * @default true - */ - archive?: boolean; - - /** - * 碎片化文章(_posts文件夹的文章)预设生成的分类值 - * @default '随笔' - */ - categoryText?: string; - - /** - * 页面风格 - * @default 'card' - */ - pageStyle?: 'card' | 'line'; - - /** - * body背景大图链接。单张图片 string | 多张图片 string[], 多张图片时每隔15秒换一张。 - * @default '' - */ - bodyBgImg?: string | string[]; - - /** - * body背景图透明度,选值 0.1 ~ 1.0 - * @default 0.5 - */ - bodyBgImgOpacity?: 0.1 | 0.2 | 0.3 | 0.4 | 0.5 | 0.6 | 0.7 | 0.8 | 0.9 | 1; - - - /** - * body当多张背景图时,设置切换时间,默认15s - * @default 15 - */ - bodyBgImgInterval?: number; - - /** - * 是否显示文章标题前的图标 - * @default true - */ - titleBadge?: boolean; - - /** - * 文章标题前图标的地址 - * @default <内置图标> - */ - titleBadgeIcons?: string[]; - - /** - * 文章内容块的背景风格. 1 方格 | 2 横线 | 3 竖线 | 4 左斜线 | 5 右斜线 | 6 点状 - * @default - */ - contentBgStyle?: 1 | 2 | 3 | 4 | 5 | 6; - - /** - * 最近更新栏. showToArticle 是否显示到文章页底部,默认true。 moreArticle “更多文章”跳转的页面,默认'/archives' - * @default {showToArticle: true, moreArticle: '/archives'} - */ - updateBar?: { - showToArticle: boolean, - moreArticle?: '/archives' | string - }; - - /** - * 宽屏时是否显示右侧文章大纲栏 (屏宽小于1300px下无论如何都不显示) - * @default true - */ - rightMenuBar?: boolean; - - /** - * 初始状态是否打开左侧边栏 (注:这里只是决定收起还是展开侧边栏) - * @default true - */ - sidebarOpen?: boolean; - - /** - * 是否显示快捷翻页按钮 - * @default true - */ - pageButton?: boolean; - - /** - * 默认外观模式 - * @default 'auto' - */ - defaultMode?: 'auto' | 'light' | 'dark' | 'read'; - - /** - * 侧边栏配置 - */ - sidebar?: - | 'structuring' - | { mode: 'structuring', collapsable: Boolean } - | DefaultThemeConfig['sidebar'] - - /** - * 文章默认的作者信息 - */ - author?: string | { name: string, link?: string } - - /** - * 博主信息 (显示在首页侧边栏) - */ - blogger?: { - avatar: string, - name: string, - slogan?: string, - } - - /** - * 社交图标 (显示于博主信息栏和页脚栏) - * @内置图标-see:https://doc.xugaoyi.com/pages/a20ce8/#social - */ - social?: { - iconfontCssFile?: string, - icons: { - iconClass: string, - title: string, - link: string, - }[] - } - - /** - * 页脚信息 - */ - footer?: { - createYear: number, - copyrightInfo: string - } - - /** - * 扩展自动生成frontmatter。 - * 说明:当md文件的frontmatter不存在相应的字段时将自动添加。不会覆盖已有的数据。 - */ - extendFrontmatter?: { - [key: string]: any - } - - /** - * 自定义hmtl(广告)模块 - * @see: https://doc.xugaoyi.com/pages/a20ce8/#htmlmodules - */ - htmlModules?: { - homeSidebarB?: string, - sidebarT?: string, - sidebarB?: string, - pageT?: string, - pageB?: string, - pageTshowMode?: 'article' | 'custom', - pageBshowMode?: 'article' | 'custom', - windowLB?: string, - windowRB?: string, - } - - /** - * 兼容其他未列举配置项 - */ - [key: string]: any; -} diff --git a/vdoing/util/index.js b/vdoing/util/index.js deleted file mode 100644 index a623585..0000000 --- a/vdoing/util/index.js +++ /dev/null @@ -1,292 +0,0 @@ -export const hashRE = /#.*$/ -export const extRE = /\.(md|html)$/ -export const endingSlashRE = /\/$/ -export const outboundRE = /^[a-z]+:/i - -export function normalize(path) { - return decodeURI(path) - .replace(hashRE, '') - .replace(extRE, '') -} - -export function getHash(path) { - const match = path && path.match(hashRE) - if (match) { - return match[0] - } -} - -export function isExternal(path) { - return outboundRE.test(path) -} - -export function isMailto(path) { - return /^mailto:/.test(path) -} - -export function isTel(path) { - return /^tel:/.test(path) -} - -export function ensureExt(path) { - if (isExternal(path)) { - return path - } - if (!path) return '404' - const hashMatch = path.match(hashRE) - const hash = hashMatch ? hashMatch[0] : '' - const normalized = normalize(path) - - if (endingSlashRE.test(normalized)) { - return path - } - return normalized + '.html' + hash -} - -export function isActive(route, path) { - const routeHash = route.hash - const linkHash = getHash(path) - if (linkHash && routeHash !== linkHash) { - return false - } - const routePath = normalize(route.path) - const pagePath = normalize(path) - return routePath === pagePath -} - -export function resolvePage(pages, rawPath, base) { - if (isExternal(rawPath)) { - return { - type: 'external', - path: rawPath - } - } - if (base) { - rawPath = resolvePath(rawPath, base) - } - const path = normalize(rawPath) - for (let i = 0; i < pages.length; i++) { - if (normalize(pages[i].regularPath) === path) { - return Object.assign({}, pages[i], { - type: 'page', - path: ensureExt(pages[i].path) - }) - } - } - console.error(`[vuepress] No matching page found for sidebar item "${rawPath}"`) - return {} -} - -function resolvePath(relative, base, append) { - const firstChar = relative.charAt(0) - if (firstChar === '/') { - return relative - } - - if (firstChar === '?' || firstChar === '#') { - return base + relative - } - - const stack = base.split('/') - - // remove trailing segment if: - // - not appending - // - appending to trailing slash (last segment is empty) - if (!append || !stack[stack.length - 1]) { - stack.pop() - } - - // resolve relative path - const segments = relative.replace(/^\//, '').split('/') - for (let i = 0; i < segments.length; i++) { - const segment = segments[i] - if (segment === '..') { - stack.pop() - } else if (segment !== '.') { - stack.push(segment) - } - } - - // ensure leading slash - if (stack[0] !== '') { - stack.unshift('') - } - - return stack.join('/') -} - -/** - * @param { Page } page - * @param { string } regularPath - * @param { SiteData } site - * @param { string } localePath - * @returns { SidebarGroup } - */ -export function resolveSidebarItems(page, regularPath, site, localePath) { - const { pages, themeConfig } = site - - const localeConfig = localePath && themeConfig.locales - ? themeConfig.locales[localePath] || themeConfig - : themeConfig - - const pageSidebarConfig = page.frontmatter.sidebar || localeConfig.sidebar || themeConfig.sidebar - if (pageSidebarConfig === 'auto') { - return resolveHeaders(page) - } - - const sidebarConfig = localeConfig.sidebar || themeConfig.sidebar - if (!sidebarConfig) { - return [] - } else { - const { base, config } = resolveMatchingConfig(regularPath, sidebarConfig) - if (config === 'auto') { - return resolveHeaders(page) - } - return config - ? config.map(item => resolveItem(item, pages, base)) - : [] - } -} - -/** - * @param { Page } page - * @returns { SidebarGroup } - */ -function resolveHeaders(page) { - const headers = groupHeaders(page.headers || []) - return [{ - type: 'group', - collapsable: false, - title: page.title, - path: null, - children: headers.map(h => ({ - type: 'auto', - title: h.title, - basePath: page.path, - path: page.path + '#' + h.slug, - children: h.children || [] - })) - }] -} - -export function groupHeaders(headers) { - // group h3s under h2 - headers = headers.map(h => Object.assign({}, h)) - let lastH2 - headers.forEach(h => { - if (h.level === 2) { - lastH2 = h - } else if (lastH2) { - (lastH2.children || (lastH2.children = [])).push(h) - } - }) - return headers.filter(h => h.level === 2) -} - -export function resolveNavLinkItem(linkItem) { - return Object.assign(linkItem, { - type: linkItem.items && linkItem.items.length ? 'links' : 'link' - }) -} - -/** - * @param { Route } route - * @param { Array | Array | [link: string]: SidebarConfig } config - * @returns { base: string, config: SidebarConfig } - */ -export function resolveMatchingConfig(regularPath, config) { - if (Array.isArray(config)) { - return { - base: '/', - config: config - } - } - for (const base in config) { - if (ensureEndingSlash(regularPath).indexOf(encodeURI(base)) === 0) { - return { - base, - config: config[base] - } - } - } - return {} -} - -function ensureEndingSlash(path) { - return /(\.html|\/)$/.test(path) - ? path - : path + '/' -} - -function resolveItem(item, pages, base, groupDepth = 1) { - if (typeof item === 'string') { - return resolvePage(pages, item, base) - } else if (Array.isArray(item)) { - return Object.assign(resolvePage(pages, item[0], base), { - title: item[1] - }) - } else { - if (groupDepth > 3) { - console.error( - '[vuepress] detected a too deep nested sidebar group.' - ) - } - const children = item.children || [] - if (children.length === 0 && item.path) { - return Object.assign(resolvePage(pages, item.path, base), { - title: item.title - }) - } - return { - type: 'group', - path: item.path, - title: item.title, - sidebarDepth: item.sidebarDepth, - initialOpenGroupIndex: item.initialOpenGroupIndex, - children: children.map(child => resolveItem(child, pages, base, groupDepth + 1)), - collapsable: item.collapsable !== false - } - } -} - - -// 类型判断 -export function type(o) { - const s = Object.prototype.toString.call(o) - return s.match(/\[object (.*?)\]/)[1].toLowerCase() -} - -// 日期格式化(只获取年月日) -export function dateFormat(date) { - if (!(date instanceof Date)) { - date = new Date(date) - } - return `${date.getUTCFullYear()}-${zero(date.getUTCMonth() + 1)}-${zero(date.getUTCDate())}` -} - -// 小于10补0 -export function zero(d) { - return d.toString().padStart(2, '0') -} - -// 获取时间的时间戳 -export function getTimeNum(post) { - let dateStr = post.frontmatter.date || post.lastUpdated || new Date() - let date = new Date(dateStr) - if (date == "Invalid Date" && dateStr) { // 修复new Date()在Safari下出现Invalid Date的问题 - date = new Date(dateStr.replace(/-/g, '/')) - } - return date.getTime() -} - -// 比对时间 -export function compareDate(a, b) { - return getTimeNum(b) - getTimeNum(a) -} - -// 将特殊符号编码(应用于url) -export function encodeUrl(str) { - str = str + '' - str = str.replace(/ |((?=[\x21-\x7e]+)[^A-Za-z0-9])/g, '-') - return str -} diff --git a/vdoing/util/postData.js b/vdoing/util/postData.js deleted file mode 100644 index 91eba96..0000000 --- a/vdoing/util/postData.js +++ /dev/null @@ -1,108 +0,0 @@ -import { type, compareDate } from './index' - -/** - * 过滤非文章页 - * @param {Array} posts 所有文章数据 - */ -export function filterPosts (posts) { - posts = posts.filter(item => { - const { frontmatter: { pageComponent, article, home } } = item - return !(pageComponent || article === false || home === true) // 存在页面组件、article字段为false,以及首页 - }) - return posts -} - -/** - * 按置顶和时间排序 - * @param {Array} posts 过滤非文章页之后的文章数据 - */ -export function sortPosts (posts) { - posts.sort((prev, next) => { - const prevSticky = prev.frontmatter.sticky - const nextSticky = next.frontmatter.sticky - if (prevSticky && nextSticky) { - return prevSticky == nextSticky ? compareDate(prev, next) : (prevSticky - nextSticky) - } else if (prevSticky && !nextSticky) { - return -1 - } else if (!prevSticky && nextSticky) { - return 1 - } - return compareDate(prev, next) - }) - return posts -} - -/** - * 按时间排序 - * @param {Array} posts 过滤非文章页之后的文章数据 - */ -export function sortPostsByDate (posts) { - posts.sort((prev, next) => { - return compareDate(prev, next) - }) - return posts -} - -/** - * 按分类和标签分组 - * @param {Array} posts 按时间排序之后的文章数据 - */ -export function groupPosts (posts) { - const categoriesObj = {} - const tagsObj = {} - - for (let i = 0, postsL = posts.length; i < postsL; i++) { - const { frontmatter: { categories, tags } } = posts[i] - if (type(categories) === 'array') { - categories.forEach(item => { - if (item) { // 分类值是有效的 - if (!categoriesObj[item]) { - categoriesObj[item] = [] - } - categoriesObj[item].push(posts[i]) - } - }) - } - if (type(tags) === 'array') { - tags.forEach(item => { - if (item) { // 标签值是有效的 - if (!tagsObj[item]) { - tagsObj[item] = [] - } - tagsObj[item].push(posts[i]) - } - }) - } - } - return { - categories: categoriesObj, - tags: tagsObj - } -} - -/** - * 获取所有分类和标签 - * @param {Object} groupPosts 按分类和标签分组之后的文章数据 - */ -export function categoriesAndTags (groupPosts) { - const categoriesArr = [] - const tagsArr = [] - - for (let key in groupPosts.categories) { - categoriesArr.push({ - key, - length: groupPosts.categories[key].length - }) - } - - for (let key in groupPosts.tags) { - tagsArr.push({ - key, - length: groupPosts.tags[key].length - }) - } - return { - categories: categoriesArr, - tags: tagsArr - } -}