<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>所有文章 - 研发日志 · R&amp;D Log</title><link>https://rd163.visword.com/posts/</link><description>所有文章 | 研发日志 · R&amp;D Log</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>whutluohui@gmail.com (小智晖)</managingEditor><webMaster>whutluohui@gmail.com (小智晖)</webMaster><copyright>本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。</copyright><lastBuildDate>Sat, 20 Sep 2025 00:00:00 +0800</lastBuildDate><atom:link href="https://rd163.visword.com/posts/" rel="self" type="application/rss+xml"/><item><title>ue4-ds-getting-started</title><link>https://rd163.visword.com/posts/ue4-ds-getting-started/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ue4-ds-getting-started/</guid><description><![CDATA[<h2 id="heading" class="headerLink">
    <a href="#heading" class="header-mark"></a> </h2><h2 id="--ue" class="headerLink">
    <a href="#--ue" class="header-mark"></a>layout:     post
title:      &ldquo;UnrealEngine-4.23.1 引擎编译安装及Dedicated Server服务搭建&rdquo;
subtitle:   &ldquo;UnrealEngine-4.23.1 引擎编译安装及Dedicated Server服务搭建&rdquo;
date:       2025-01-12
author:     &ldquo;vxiaozhi&rdquo;
catalog: true
tags:
- UE</h2><h1 id="unrealengine-4231-引擎编译安装及dedicated-server服务搭建" class="headerLink">
    <a href="#unrealengine-4231-%e5%bc%95%e6%93%8e%e7%bc%96%e8%af%91%e5%ae%89%e8%a3%85%e5%8f%8adedicated-server%e6%9c%8d%e5%8a%a1%e6%90%ad%e5%bb%ba" class="header-mark"></a>UnrealEngine-4.23.1 引擎编译安装及Dedicated Server服务搭建</h1><p>本文将详细介绍如何在 Windows 操作系统上 编译安装UnrealEngine-4.23.1引擎，并搭建ds服务。
 
<strong>为什么要编译安装 UnrealEngine？</strong></p>]]></description></item><item><title>server-management</title><link>https://rd163.visword.com/posts/server-management/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/server-management/</guid><description><![CDATA[<h1 id="服务器运维管理" class="headerLink">
    <a href="#%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%bf%90%e7%bb%b4%e7%ae%a1%e7%90%86" class="header-mark"></a>服务器运维管理</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/1Panel-dev/1Panel" target="_blank" rel="noopener noreferrer">Web-based linux server management control panel. / 现代化、开源的 Linux 服务器运维管理面板</a></li>
</ul>]]></description></item><item><title>Blender简介</title><link>https://rd163.visword.com/posts/blender/</link><pubDate>Fri, 10 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/blender/</guid><description><![CDATA[<h1 id="blender" class="headerLink">
    <a href="#blender" class="header-mark"></a>Blender</h1><ul>
<li><a href="https://github.com/puxiao/notes/blob/master/Blender%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B.md" target="_blank" rel="noopener noreferrer">Blender基础教程</a></li>
<li><a href="https://github.com/blender/blender" target="_blank" rel="noopener noreferrer">blender github</a></li>
</ul>
<h2 id="服务端渲染" class="headerLink">
    <a href="#%e6%9c%8d%e5%8a%a1%e7%ab%af%e6%b8%b2%e6%9f%93" class="header-mark"></a>服务端渲染</h2><p>通过 -b 参数 开启无头渲染</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-4" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">Render Options
</span></span><span class="line"><span class="cl">-b, --background
</span></span><span class="line"><span class="cl">Run in background (often used for UI-less rendering).
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The audio device is disabled in background-mode by default and can be re-enabled by passing in -setaudo Default afterwards.</span></span></code></pre>
</div>
<ul>
<li><a href="https://docs.blender.org/manual/en/latest/advanced/command_line/arguments.html" target="_blank" rel="noopener noreferrer">Command Line Arguments</a></li>
</ul>
<p>python包装的blender 无头类库</p>]]></description></item><item><title>怎么设计及保存密码</title><link>https://rd163.visword.com/posts/how-to-save-password/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/how-to-save-password/</guid><description><![CDATA[<h1 id="怎么设计及保存密码" class="headerLink">
    <a href="#%e6%80%8e%e4%b9%88%e8%ae%be%e8%ae%a1%e5%8f%8a%e4%bf%9d%e5%ad%98%e5%af%86%e7%a0%81" class="header-mark"></a>怎么设计及保存密码</h1><p>保存密码的目的是什么，当然是保证账号的安全。我们分阶段来分析。</p>
<h2 id="问题分析" class="headerLink">
    <a href="#%e9%97%ae%e9%a2%98%e5%88%86%e6%9e%90" class="header-mark"></a>问题分析</h2><ul>
<li>首先注意的是我们不能给所有账号设置相同的密码，这样会存在撞库的危险，因此需要给不同账号设置不同的密码。我之前就被盗过几次号，因为我的密码都是基本都是统一的，除非是有些网站非得让我添加大写字母和符号以保证安全性。可随之而来的是密码太多，难以记忆的问题。</li>
<li>这个时候我们可以准备一个笔记本，把自己不同账户的密码都记上去。使用笔记本记载密码也存在两个问题。其一，笔记本丢失或者忘带。其二，笔记本被他人偷看。</li>
<li>为了解决上述个问题，我们可以做好备份，随身携带一个笔记本，家里放置一个笔记本，这样可以解决遗失问题，但如何解决忘带问题呢？我出门不小心忘带笔记本了，这个时候我要在外面输入一个密码怎么办？最好的解决办法是网络备份。</li>
<li>网络备份的话方案有很多，比如可以用网盘、或者网络笔记软件、或者github来存储密码文件。</li>
<li>这个时候又会面临新的问题：存储在网络上的文件怎么保证安全性呢？即不被人发现或者被人发现的情况下也无法窥探到真实的密码内容。</li>
</ul>
<p>所以这里最关键的问题就是如何解决密码在网络上的存储问题。</p>]]></description></item><item><title>云原生 API 网关</title><link>https://rd163.visword.com/posts/cloud-native-api-gateway/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cloud-native-api-gateway/</guid><description><![CDATA[<h1 id="云原生-api-网关" class="headerLink">
    <a href="#%e4%ba%91%e5%8e%9f%e7%94%9f-api-%e7%bd%91%e5%85%b3" class="header-mark"></a>云原生 API 网关</h1><p>市面上的云原生API网关大多基于 Nginx 和 Envoy</p>
<h2 id="nginx" class="headerLink">
    <a href="#nginx" class="header-mark"></a>Nginx</h2><h3 id="blueking-apigateway" class="headerLink">
    <a href="#blueking-apigateway" class="header-mark"></a>blueking-apigateway</h3><p>蓝鲸 API 网关（API Gateway），是一种高性能、高可用的 API 托管服务，可以帮助开发者创建、发布、维护、监控和保护 API， 以快速、低成本、低风险地对外开放蓝鲸应用或其他系统的数据或服务。</p>]]></description></item><item><title>域名解析(DNS) -- CoreDNS</title><link>https://rd163.visword.com/posts/k8s-dns-coredns/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-dns-coredns/</guid><description><![CDATA[<h1 id="域名解析dns--coredns" class="headerLink">
    <a href="#%e5%9f%9f%e5%90%8d%e8%a7%a3%e6%9e%90dns--coredns" class="header-mark"></a>域名解析(DNS) &ndash; CoreDNS</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://thiscute.world/posts/about-dns-protocol/" target="_blank" rel="noopener noreferrer">Linux网络学习笔记（二）：域名解析(DNS)——以 CoreDNS 为例</a></li>
<li><a href="https://github.com/chenzongshu/Kubernetes/blob/master/CoreDNS%E8%AF%A6%E8%A7%A3.md" target="_blank" rel="noopener noreferrer">CoreDNS详解</a></li>
</ul>]]></description></item><item><title>游戏强化训练</title><link>https://rd163.visword.com/posts/game-rl-trainning/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/game-rl-trainning/</guid><description><![CDATA[<h1 id="游戏强化训练" class="headerLink">
    <a href="#%e6%b8%b8%e6%88%8f%e5%bc%ba%e5%8c%96%e8%ae%ad%e7%bb%83" class="header-mark"></a>游戏强化训练</h1><ul>
<li><a href="https://github.com/LeelaChessZero/lc0" target="_blank" rel="noopener noreferrer">LeelaChessZero/Lc0</a></li>
</ul>]]></description></item><item><title>用 AIGC 开发 Web UI 界面的产品</title><link>https://rd163.visword.com/posts/web-development-by-aigc/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/web-development-by-aigc/</guid><description><![CDATA[<h1 id="用-aigc-开发-web-ui-界面的产品" class="headerLink">
    <a href="#%e7%94%a8-aigc-%e5%bc%80%e5%8f%91-web-ui-%e7%95%8c%e9%9d%a2%e7%9a%84%e4%ba%a7%e5%93%81" class="header-mark"></a>用 AIGC 开发 Web UI 界面的产品</h1><ul>
<li><a href="https://github.com/AndySpider/uicloner-extension" target="_blank" rel="noopener noreferrer">UICloner Extension</a> 浏览器插件，一键克隆任意网页 UI 组件，生成代码。</li>
</ul>]]></description></item><item><title>详解圈复杂度</title><link>https://rd163.visword.com/posts/code-cyclomatic-complexity/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/code-cyclomatic-complexity/</guid><description><![CDATA[<h1 id="详解圈复杂度" class="headerLink">
    <a href="#%e8%af%a6%e8%a7%a3%e5%9c%88%e5%a4%8d%e6%9d%82%e5%ba%a6" class="header-mark"></a>详解圈复杂度</h1><h2 id="什么是圈复杂度" class="headerLink">
    <a href="#%e4%bb%80%e4%b9%88%e6%98%af%e5%9c%88%e5%a4%8d%e6%9d%82%e5%ba%a6" class="header-mark"></a>什么是圈复杂度？</h2><p>圈复杂度(Cyclomatic complexity)是一种代码复杂度的衡量标准，在1976年由Thomas J. McCabe, Sr. 提出，目标是为了指导程序员写出更具可测性和可维护性的代码。</p>]]></description></item><item><title>无头cms</title><link>https://rd163.visword.com/posts/headless-cms/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/headless-cms/</guid><description><![CDATA[<h1 id="无头cms" class="headerLink">
    <a href="#%e6%97%a0%e5%a4%b4cms" class="header-mark"></a>无头cms</h1><p>参考</p>
<ul>
<li><a href="https://juejin.cn/post/7264525350913245236" target="_blank" rel="noopener noreferrer">内容管理革命：无头 CMS 推荐</a></li>
</ul>]]></description></item><item><title>为什么选择 WordPress</title><link>https://rd163.visword.com/posts/why-use-wordpress/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/why-use-wordpress/</guid><description><![CDATA[<h1 id="为什么选择-wordpress" class="headerLink">
    <a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89%e6%8b%a9-wordpress" class="header-mark"></a>为什么选择 WordPress</h1><p>WordPress 是PHP开发的内容管理系统(CMS), 常用来搭建博客网站、企业网站等。</p>
<p>为什么选择 WordPress？这个问题可以从以下几个方面回答：</p>
<ol>
<li>为什么不适用其它语言开发的CMS来建站，如： <a href="" rel="">nodejs</a> <a href="https://github.com/halo-dev/halo" target="_blank" rel="noopener noreferrer">halo java开发</a> ？</li>
</ol>
<p>因为都没有PHP方便， PHP搭建的网站，发现bug，直接修复代码立即生效， 对小白也能轻松驾驭。 而其他语言修改后通常要重新编译。</p>]]></description></item><item><title>使用 Rust 创建 Web 应用程序</title><link>https://rd163.visword.com/posts/web-app-with-rust/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/web-app-with-rust/</guid><description><![CDATA[<h1 id="使用-rust-创建-web-应用程序" class="headerLink">
    <a href="#%e4%bd%bf%e7%94%a8-rust-%e5%88%9b%e5%bb%ba-web-%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f" class="header-mark"></a>使用 Rust 创建 Web 应用程序</h1><ul>
<li><a href="https://github.com/DioxusLabs/dioxus" target="_blank" rel="noopener noreferrer">dioxus</a></li>
<li><a href="https://github.com/leptos-rs/leptos" target="_blank" rel="noopener noreferrer">leptos</a></li>
<li><a href="https://github.com/yewstack/yew" target="_blank" rel="noopener noreferrer">yew</a></li>
</ul>
<p>Yew</p>
<ul>
<li>最成熟、应用最广泛</li>
<li>类似 JSX 的模板语法</li>
<li>类似 React（以前是类似 Elm 的结构组件，现在是类似 React 的函数组件）</li>
<li>更多样板文件，例如事件回调、需要将 .clone() 内容放入闭包等。</li>
<li>相对较好的性能（比如 Preact/Vue，比 React 更快）</li>
<li>WASM 二进制大小中等</li>
<li>社区维护（即原创者已经丢失）；它维护得很好，审稿人在查看 PR 等方面做得很好，但是（这里主观认为）没有看到太多推动它长期发展的愿景</li>
</ul>
<p>Dioxus</p>]]></description></item><item><title>使用 LetterAvatar 实现纯前端生成字母头像</title><link>https://rd163.visword.com/posts/golang-letter-avatar/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-letter-avatar/</guid><description><![CDATA[<h1 id="使用-letteravatar-实现纯前端生成字母头像" class="headerLink">
    <a href="#%e4%bd%bf%e7%94%a8-letteravatar-%e5%ae%9e%e7%8e%b0%e7%ba%af%e5%89%8d%e7%ab%af%e7%94%9f%e6%88%90%e5%ad%97%e6%af%8d%e5%a4%b4%e5%83%8f" class="header-mark"></a>使用 LetterAvatar 实现纯前端生成字母头像</h1><p>如何自动给没头像的用户生成一个昵称首字符的彩色头像。参考这个 golang 库：</p>
<ul>
<li><a href="https://github.com/disintegration/letteravatar" target="_blank" rel="noopener noreferrer">letteravatar</a></li>
</ul>
<p>遗憾的是，这个库不支持中文，因此可以将中文字符先转化为拼音再调用这个库。</p>]]></description></item><item><title>使用 KubeRay 在 Kubernetes 中托管 Ray 工作负载</title><link>https://rd163.visword.com/posts/running-ray-on-k8s/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/running-ray-on-k8s/</guid><description><![CDATA[<h1 id="使用-kuberay-在-kubernetes-中托管-ray-工作负载" class="headerLink">
    <a href="#%e4%bd%bf%e7%94%a8-kuberay-%e5%9c%a8-kubernetes-%e4%b8%ad%e6%89%98%e7%ae%a1-ray-%e5%b7%a5%e4%bd%9c%e8%b4%9f%e8%bd%bd" class="header-mark"></a>使用 KubeRay 在 Kubernetes 中托管 Ray 工作负载</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/ray-project/kuberay" target="_blank" rel="noopener noreferrer">KubeRay</a></li>
<li><a href="https://developer.volcengine.com/articles/7309395740965486619" target="_blank" rel="noopener noreferrer">使用 KubeRay 和 Kueue 在 Kubernetes 中托管 Ray 工作负载</a></li>
</ul>]]></description></item><item><title>如何在 K8s 上运行 Spark</title><link>https://rd163.visword.com/posts/running-spark-on-k8s/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/running-spark-on-k8s/</guid><description><![CDATA[<h1 id="如何在-k8s-上运行-spark" class="headerLink">
    <a href="#%e5%a6%82%e4%bd%95%e5%9c%a8-k8s-%e4%b8%8a%e8%bf%90%e8%a1%8c-spark" class="header-mark"></a>如何在 K8s 上运行 Spark</h1><h2 id="operators" class="headerLink">
    <a href="#operators" class="header-mark"></a>Operators</h2><ul>
<li><a href="https://github.com/kubeflow/spark-operator" target="_blank" rel="noopener noreferrer">Spark Operator</a></li>
<li></li>
</ul>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://spark.apache.org/docs/latest/running-on-kubernetes.html" target="_blank" rel="noopener noreferrer">Running Spark on Kubernetes</a></li>
</ul>]]></description></item><item><title>如何使用主机当前用户运行 docker</title><link>https://rd163.visword.com/posts/run-docker-with-same-host-user/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/run-docker-with-same-host-user/</guid><description><![CDATA[<h1 id="如何使用主机当前用户运行-docker" class="headerLink">
    <a href="#%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8%e4%b8%bb%e6%9c%ba%e5%bd%93%e5%89%8d%e7%94%a8%e6%88%b7%e8%bf%90%e8%a1%8c-docker" class="header-mark"></a>如何使用主机当前用户运行 docker</h1><p>这里提供两种方法：</p>
<h2 id="method-1-using-user-flag" class="headerLink">
    <a href="#method-1-using-user-flag" class="header-mark"></a>Method 1: Using &ndash;user Flag</h2><p>Get Current User&rsquo;s UID and GID:
You need to retrieve your current user&rsquo;s UID (User ID) and GID (Group ID). You can do this with the following commands:</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">bash</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-1" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">UID</span><span class="o">=</span><span class="k">$(</span>id -u<span class="k">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">export</span> <span class="nv">GID</span><span class="o">=</span><span class="k">$(</span>id -g<span class="k">)</span></span></span></code></pre>
</div>
<p>Run Docker Container:
Use the &ndash;user flag to specify the UID and GID when running your Docker container. Here’s an example command:</p>]]></description></item><item><title>如何获取 App 源码</title><link>https://rd163.visword.com/posts/how-to-get-app-source/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/how-to-get-app-source/</guid><description><![CDATA[<h1 id="如何获取-app-源码" class="headerLink">
    <a href="#%e5%a6%82%e4%bd%95%e8%8e%b7%e5%8f%96-app-%e6%ba%90%e7%a0%81" class="header-mark"></a>如何获取 App 源码</h1><ul>
<li><a href="https://www.sellmyapp.com/" target="_blank" rel="noopener noreferrer">sellmyapp</a></li>
<li><a href="https://sellanycode.com/" target="_blank" rel="noopener noreferrer">sellanycode</a></li>
</ul>]]></description></item><item><title>任务代理服务</title><link>https://rd163.visword.com/posts/job-agent-service/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/job-agent-service/</guid><description><![CDATA[<h1 id="任务代理服务" class="headerLink">
    <a href="#%e4%bb%bb%e5%8a%a1%e4%bb%a3%e7%90%86%e6%9c%8d%e5%8a%a1" class="header-mark"></a>任务代理服务</h1><h2 id="开源方案" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90%e6%96%b9%e6%a1%88" class="header-mark"></a>开源方案</h2><ul>
<li><a href="https://github.com/buildkite/agent" target="_blank" rel="noopener noreferrer">buildkite-agent</a></li>
<li><a href="https://github.com/actions/runner" target="_blank" rel="noopener noreferrer">github 官方 - action runner</a></li>
</ul>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2>]]></description></item><item><title>前端低代码平台</title><link>https://rd163.visword.com/posts/ui-low-code/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ui-low-code/</guid><description><![CDATA[<h1 id="前端低代码平台" class="headerLink">
    <a href="#%e5%89%8d%e7%ab%af%e4%bd%8e%e4%bb%a3%e7%a0%81%e5%b9%b3%e5%8f%b0" class="header-mark"></a>前端低代码平台</h1><ul>
<li><a href="https://juejin.cn/post/7164694758588153863" target="_blank" rel="noopener noreferrer">推荐20个开源的前端低代码项目</a></li>
<li><a href="https://github.com/taowen/awesome-lowcode" target="_blank" rel="noopener noreferrer">国内低代码平台</a></li>
</ul>
<h2 id="amis" class="headerLink">
    <a href="#amis" class="header-mark"></a><a href="https://github.com/baidu/amis" target="_blank" rel="noopener noreferrer">amis</a></h2><ul>
<li><a href="https://aisuda.bce.baidu.com/amis/zh-CN/docs/index" target="_blank" rel="noopener noreferrer">amis 文档</a></li>
<li><a href="https://aisuda.bce.baidu.com/amis/examples/index" target="_blank" rel="noopener noreferrer">amis demos</a></li>
</ul>
<h2 id="wujie无界" class="headerLink">
    <a href="#wujie%e6%97%a0%e7%95%8c" class="header-mark"></a><a href="https://github.com/Tencent/wujie" target="_blank" rel="noopener noreferrer">wujie（无界）</a></h2><p>无界微前端是一款基于 Web Components + iframe 微前端框架，具备成本低、速度快、原生隔离、功能强等一系列优点。</p>]]></description></item><item><title>内网穿透工具</title><link>https://rd163.visword.com/posts/local-server-expose-to-internet/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/local-server-expose-to-internet/</guid><description><![CDATA[<h1 id="内网穿透工具" class="headerLink">
    <a href="#%e5%86%85%e7%bd%91%e7%a9%bf%e9%80%8f%e5%b7%a5%e5%85%b7" class="header-mark"></a>内网穿透工具</h1><p>如果希望自己二次开发（有API可以调用）或者有多个租户（每个客户端一个单独的key），建议使用nps。
如果希望简单上手，没有多个租户的要求，建议使用<a href="https://github.com/fatedier/frp" target="_blank" rel="noopener noreferrer">frp</a>。</p>
<p>通过在具有公网 IP 的节点上部署 frp 服务端，可以轻松地将内网服务穿透到公网，同时提供诸多专业的功能特性，这包括：</p>]]></description></item><item><title>内存优化综述</title><link>https://rd163.visword.com/posts/mem-opt-overview/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/mem-opt-overview/</guid><description><![CDATA[<h1 id="内存优化综述" class="headerLink">
    <a href="#%e5%86%85%e5%ad%98%e4%bc%98%e5%8c%96%e7%bb%bc%e8%bf%b0" class="header-mark"></a>内存优化综述</h1><p>任何一个复杂的系统内存分配释放的最佳策略一定是： 按照其特性进行内存分类管理。 一般来说可将其特性分为以下几类：</p>
<ul>
<li>对象池（Object Pools）</li>
<li>延迟销毁（Lazy Deletion）</li>
<li>动态生成（Dynamic Generation）</li>
</ul>
<p>为什么说这种策略是最优的呢， 举例来说：</p>]]></description></item><item><title>模板编程语言-Liquid</title><link>https://rd163.visword.com/posts/template-lang-liquid/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/template-lang-liquid/</guid><description><![CDATA[<h1 id="模板编程语言-liquid" class="headerLink">
    <a href="#%e6%a8%a1%e6%9d%bf%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80-liquid" class="header-mark"></a>模板编程语言-Liquid</h1><p>Liquid 是一门开源的模板语言，由 Shopify 创造并用 Ruby 实现。它是 Shopify 主题的骨骼，并且被用于加载店铺系统的动态内容。</p>
<p>从 2006 年起，Liquid 就被 Shopify 所使用，现在更是被大量 web 应用所使用。</p>]]></description></item><item><title>跨域资源共享 CORS 详解</title><link>https://rd163.visword.com/posts/http-cors/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/http-cors/</guid><description><![CDATA[<h1 id="跨域资源共享-cors-详解" class="headerLink">
    <a href="#%e8%b7%a8%e5%9f%9f%e8%b5%84%e6%ba%90%e5%85%b1%e4%ba%ab-cors-%e8%af%a6%e8%a7%a3" class="header-mark"></a>跨域资源共享 CORS 详解</h1><h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>CORS 是一个 W3C 标准，全称是“跨域资源共享”（Cross-origin resource sharing）。
CORS 允许在浏览器中运行的Web应用程序访问不同域名下的资源，以实现跨域通信。</p>]]></description></item><item><title>客服系统</title><link>https://rd163.visword.com/posts/customer-service-system/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/customer-service-system/</guid><description><![CDATA[<h1 id="客服系统" class="headerLink">
    <a href="#%e5%ae%a2%e6%9c%8d%e7%b3%bb%e7%bb%9f" class="header-mark"></a>客服系统</h1><h2 id="开源" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90" class="header-mark"></a>开源</h2><ul>
<li><a href="https://github.com/taoshihan1991/go-fly" target="_blank" rel="noopener noreferrer">GO-FLY</a> 开源在线客服系统GO语言开发GO-FLY,免费在线客服系统/</li>
<li><a href="https://github.com/cskefu/cskefu" target="_blank" rel="noopener noreferrer">cskefu</a> 春松客服，开源客服系统</li>
</ul>
<h2 id="商业" class="headerLink">
    <a href="#%e5%95%86%e4%b8%9a" class="header-mark"></a>商业</h2><ul>
<li><a href="https://qidian.qq.com/module/service.html" target="_blank" rel="noopener noreferrer">腾讯企点客服</a></li>
</ul>]]></description></item><item><title>可视化</title><link>https://rd163.visword.com/posts/visual/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/visual/</guid><description><![CDATA[<h1 id="可视化" class="headerLink">
    <a href="#%e5%8f%af%e8%a7%86%e5%8c%96" class="header-mark"></a>可视化</h1><h2 id="算法可视化" class="headerLink">
    <a href="#%e7%ae%97%e6%b3%95%e5%8f%af%e8%a7%86%e5%8c%96" class="header-mark"></a>算法可视化</h2><ul>
<li><a href="https://github.com/mszula/visual-sorting" target="_blank" rel="noopener noreferrer">Visual Sorting </a> 各种排序算法的可视化演示，代码开源。</li>
</ul>
<h2 id="编程调试可视化" class="headerLink">
    <a href="#%e7%bc%96%e7%a8%8b%e8%b0%83%e8%af%95%e5%8f%af%e8%a7%86%e5%8c%96" class="header-mark"></a>编程调试可视化</h2>]]></description></item><item><title>解决Linux操作系统下Terminal中光标消失的问题</title><link>https://rd163.visword.com/posts/linux-terminal-cursor-disappear/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-terminal-cursor-disappear/</guid><description><![CDATA[<h1 id="解决linux操作系统下terminal中光标消失的问题" class="headerLink">
    <a href="#%e8%a7%a3%e5%86%b3linux%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e4%b8%8bterminal%e4%b8%ad%e5%85%89%e6%a0%87%e6%b6%88%e5%a4%b1%e7%9a%84%e9%97%ae%e9%a2%98" class="header-mark"></a>解决Linux操作系统下Terminal中光标消失的问题</h1><p>使用Terminal时会偶尔遇到光标消失的问题。</p>
<p>显示光标</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-7" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">echo -e &#34;\033[?25h&#34;</span></span></code></pre>
</div>
<p>隐藏光标</p>]]></description></item><item><title>计算器</title><link>https://rd163.visword.com/posts/calculator/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/calculator/</guid><description><![CDATA[<h1 id="计算器" class="headerLink">
    <a href="#%e8%ae%a1%e7%ae%97%e5%99%a8" class="header-mark"></a>计算器</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://www.calculatorsoup.com/" target="_blank" rel="noopener noreferrer">calculatorsoup</a></li>
<li><a href="https://oi-wiki.org/misc/expression/" target="_blank" rel="noopener noreferrer">表达式求值</a></li>
<li><a href="https://github.com/microsoft/calculator" target="_blank" rel="noopener noreferrer">Windows Calculator</a></li>
<li><a href="https://github.com/mumuy/relationship" target="_blank" rel="noopener noreferrer">中国亲戚关系计算器 </a></li>
<li><a href="https://github.com/YutHelloWorld/personal-income-tax-calculator" target="_blank" rel="noopener noreferrer">2019个税计算器</a></li>
<li><a href="https://github.com/seaswalker/js_calculator" target="_blank" rel="noopener noreferrer">JavaScript模仿Windows10计算器</a></li>
</ul>]]></description></item><item><title>计算机经典书籍</title><link>https://rd163.visword.com/posts/awesome-cs-books/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/awesome-cs-books/</guid><description><![CDATA[<h1 id="计算机经典书籍" class="headerLink">
    <a href="#%e8%ae%a1%e7%ae%97%e6%9c%ba%e7%bb%8f%e5%85%b8%e4%b9%a6%e7%b1%8d" class="header-mark"></a>计算机经典书籍</h1><p>CS四大基础课</p>
<h2 id="操作系统" class="headerLink">
    <a href="#%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f" class="header-mark"></a>操作系统</h2><ul>
<li>操作系统设计与实现.PDF</li>
<li>《Linux内核完全剖析基于0.12内核》</li>
</ul>
<h2 id="编译原理" class="headerLink">
    <a href="#%e7%bc%96%e8%af%91%e5%8e%9f%e7%90%86" class="header-mark"></a>编译原理</h2><h2 id="计算机网络" class="headerLink">
    <a href="#%e8%ae%a1%e7%ae%97%e6%9c%ba%e7%bd%91%e7%bb%9c" class="header-mark"></a>计算机网络</h2><ul>
<li>HTTP权威指南（中文版）</li>
</ul>
<h2 id="计算机系统" class="headerLink">
    <a href="#%e8%ae%a1%e7%ae%97%e6%9c%ba%e7%b3%bb%e7%bb%9f" class="header-mark"></a>计算机系统</h2><ul>
<li>深入理解计算机系统（中文清晰）.pdf</li>
<li>分布式系统概念与设计 原书第5版.pdf</li>
</ul>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/erikluo/awesome-cs-books" target="_blank" rel="noopener noreferrer">awesome-cs-books: 超过 200 本经典的计算机书籍分享</a></li>
</ul>]]></description></item><item><title>集成前端UI和API Server 的最佳实践</title><link>https://rd163.visword.com/posts/integrate-frontend-and-api/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/integrate-frontend-and-api/</guid><description><![CDATA[<h1 id="集成前端ui和api-server-的最佳实践" class="headerLink">
    <a href="#%e9%9b%86%e6%88%90%e5%89%8d%e7%ab%afui%e5%92%8capi-server-%e7%9a%84%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" class="header-mark"></a>集成前端UI和API Server 的最佳实践</h1><h2 id="一些开源项目" class="headerLink">
    <a href="#%e4%b8%80%e4%ba%9b%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae" class="header-mark"></a>一些开源项目</h2><p>全栈框架</p>
<ul>
<li><a href="" rel="">next</a></li>
<li><a href="" rel="">nuxt</a></li>
</ul>
<p>golang + frontend</p>
<ul>
<li><a href="https://github.com/zmh-program/chatnio" target="_blank" rel="noopener noreferrer">chatnio</a></li>
<li><a href="https://github.com/casdoor/casdoor" target="_blank" rel="noopener noreferrer">casdoor</a></li>
<li><a href="https://github.com/kubernetes/dashboard" target="_blank" rel="noopener noreferrer">k8s dashboard</a></li>
</ul>
<p>python + frontend</p>
<ul>
<li><a href="https://github.com/mehdigmira/celery-dashboard" target="_blank" rel="noopener noreferrer">celery-dashboard</a></li>
</ul>
<p>nginx + python + frontend</p>
<ul>
<li><a href="https://github.com/langgenius/dify" target="_blank" rel="noopener noreferrer">dify</a></li>
</ul>
<p>nginx + golang + frontend</p>]]></description></item><item><title>机器狗技术</title><link>https://rd163.visword.com/posts/robot-dog-tech/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/robot-dog-tech/</guid><description><![CDATA[<h1 id="机器狗技术" class="headerLink">
    <a href="#%e6%9c%ba%e5%99%a8%e7%8b%97%e6%8a%80%e6%9c%af" class="header-mark"></a>机器狗技术</h1><p>国内外所有搞机器狗的公司，全都是基于 MIT 的开源项目基础上做的。包括 机器人操作系统 ROS 和 Mini Cheetah。</p>
<h2 id="ros" class="headerLink">
    <a href="#ros" class="header-mark"></a>ROS</h2><p>整个ROS的项目在部署运行过程中，分为几个部分：</p>
<p>环境
执行器
传感器
软件结构</p>
<ul>
<li><a href="http://www.ros.org" target="_blank" rel="noopener noreferrer">ROS 官网</a></li>
<li><a href="https://github.com/ros/ros" target="_blank" rel="noopener noreferrer">ROS github</a></li>
<li><a href="http://design.ros2.org" target="_blank" rel="noopener noreferrer">ROS 2 Design</a></li>
</ul>
<p>以下是 ROS 的学习资源：</p>
<ul>
<li><a href="https://github.com/HuangCongQing/ROS" target="_blank" rel="noopener noreferrer">ROS(c++)机器人操作系统 学习（写于2020年夏）</a></li>
<li><a href="https://github.com/Ewenwan/Ros" target="_blank" rel="noopener noreferrer">Learn ROS</a></li>
</ul>
<h2 id="mini-cheetah" class="headerLink">
    <a href="#mini-cheetah" class="header-mark"></a>Mini Cheetah</h2><ul>
<li><a href="https://github.com/mit-biomimetics/Cheetah-Software" target="_blank" rel="noopener noreferrer">Mini Cheetah</a></li>
</ul>
<h2 id="机器人公司开源项目" class="headerLink">
    <a href="#%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%85%ac%e5%8f%b8%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae" class="header-mark"></a>机器人公司开源项目</h2><ul>
<li><a href="" rel="">云深处</a></li>
<li><a href="" rel="">宇树科技</a></li>
<li><a href="https://github.com/AgibotTech" target="_blank" rel="noopener noreferrer">智元灵犀X1 推理、训练、硬件开源</a></li>
</ul>]]></description></item><item><title>互联网公司经典技术架构</title><link>https://rd163.visword.com/posts/classic-technical-architecture/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/classic-technical-architecture/</guid><description><![CDATA[<h1 id="互联网公司经典技术架构" class="headerLink">
    <a href="#%e4%ba%92%e8%81%94%e7%bd%91%e5%85%ac%e5%8f%b8%e7%bb%8f%e5%85%b8%e6%8a%80%e6%9c%af%e6%9e%b6%e6%9e%84" class="header-mark"></a>互联网公司经典技术架构</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/erikluo/architecture.wechat-tencent" target="_blank" rel="noopener noreferrer">互联网公司经典技术架构</a></li>
</ul>]]></description></item><item><title>后台技术图谱</title><link>https://rd163.visword.com/posts/server-technical-map/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/server-technical-map/</guid><description><![CDATA[<h1 id="后台技术图谱" class="headerLink">
    <a href="#%e5%90%8e%e5%8f%b0%e6%8a%80%e6%9c%af%e5%9b%be%e8%b0%b1" class="header-mark"></a>后台技术图谱</h1><h1>《后端架构师技术图谱》</h1>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%b0%e6%8d%ae%e7%bb%93%e6%9e%84" target="_blank" rel="noopener noreferrer">数据结构</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%98%9f%e5%88%97" target="_blank" rel="noopener noreferrer">队列</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%9b%86%e5%90%88" target="_blank" rel="noopener noreferrer">集合</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%93%be%e8%a1%a8%e6%95%b0%e7%bb%84" target="_blank" rel="noopener noreferrer">链表、数组</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ad%97%e5%85%b8%e5%85%b3%e8%81%94%e6%95%b0%e7%bb%84" target="_blank" rel="noopener noreferrer">字典、关联数组</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%a0%88" target="_blank" rel="noopener noreferrer">栈</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%a0%91" target="_blank" rel="noopener noreferrer">树</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%8c%e5%8f%89%e6%a0%91" target="_blank" rel="noopener noreferrer">二叉树</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%8c%e5%85%a8%e4%ba%8c%e5%8f%89%e6%a0%91" target="_blank" rel="noopener noreferrer">完全二叉树</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b9%b3%e8%a1%a1%e4%ba%8c%e5%8f%89%e6%a0%91" target="_blank" rel="noopener noreferrer">平衡二叉树</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%8c%e5%8f%89%e6%9f%a5%e6%89%be%e6%a0%91bst" target="_blank" rel="noopener noreferrer">二叉查找树（BST）</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%ba%a2%e9%bb%91%e6%a0%91" target="_blank" rel="noopener noreferrer">红黑树</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#b-bb%e6%a0%91" target="_blank" rel="noopener noreferrer">B，B+，B*树</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#lsm-%e6%a0%91" target="_blank" rel="noopener noreferrer">LSM 树</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#bitset" target="_blank" rel="noopener noreferrer">BitSet</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b8%b8%e7%94%a8%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">常用算法</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8e%92%e5%ba%8f%e6%9f%a5%e6%89%be%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">排序、查找算法</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%80%89%e6%8b%a9%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">选择排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%86%92%e6%b3%a1%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">冒泡排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8f%92%e5%85%a5%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">插入排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%bf%ab%e9%80%9f%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">快速排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%bd%92%e5%b9%b6%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">归并排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b8%8c%e5%b0%94%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">希尔排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%a0%86%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">堆排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%ae%a1%e6%95%b0%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">计数排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%a1%b6%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">桶排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9f%ba%e6%95%b0%e6%8e%92%e5%ba%8f" target="_blank" rel="noopener noreferrer">基数排序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%8c%e5%88%86%e6%9f%a5%e6%89%be" target="_blank" rel="noopener noreferrer">二分查找</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java-%e4%b8%ad%e7%9a%84%e6%8e%92%e5%ba%8f%e5%b7%a5%e5%85%b7" target="_blank" rel="noopener noreferrer">Java 中的排序工具</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b8%83%e9%9a%86%e8%bf%87%e6%bb%a4%e5%99%a8" target="_blank" rel="noopener noreferrer">布隆过滤器</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ad%97%e7%ac%a6%e4%b8%b2%e6%af%94%e8%be%83" target="_blank" rel="noopener noreferrer">字符串比较</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kmp-%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">KMP 算法</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b7%b1%e5%ba%a6%e4%bc%98%e5%85%88%e5%b9%bf%e5%ba%a6%e4%bc%98%e5%85%88" target="_blank" rel="noopener noreferrer">深度优先、广度优先</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%b4%aa%e5%bf%83%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">贪心算法</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9b%9e%e6%ba%af%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">回溯算法</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%89%aa%e6%9e%9d%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">剪枝算法</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8a%a8%e6%80%81%e8%a7%84%e5%88%92" target="_blank" rel="noopener noreferrer">动态规划</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%b4%e7%b4%a0%e8%b4%9d%e5%8f%b6%e6%96%af" target="_blank" rel="noopener noreferrer">朴素贝叶斯</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8e%a8%e8%8d%90%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">推荐算法</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%80%e5%b0%8f%e7%94%9f%e6%88%90%e6%a0%91%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">最小生成树算法</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%80%e7%9f%ad%e8%b7%af%e5%be%84%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">最短路径算法</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b9%b6%e5%8f%91" target="_blank" rel="noopener noreferrer">并发</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java-%e5%b9%b6%e5%8f%91" target="_blank" rel="noopener noreferrer">Java 并发</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%a4%9a%e7%ba%bf%e7%a8%8b" target="_blank" rel="noopener noreferrer">多线程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%ba%bf%e7%a8%8b%e5%ae%89%e5%85%a8" target="_blank" rel="noopener noreferrer">线程安全</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%80%e8%87%b4%e6%80%a7%e4%ba%8b%e5%8a%a1" target="_blank" rel="noopener noreferrer">一致性、事务</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%8b%e5%8a%a1-acid-%e7%89%b9%e6%80%a7" target="_blank" rel="noopener noreferrer">事务 ACID 特性</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%8b%e5%8a%a1%e7%9a%84%e9%9a%94%e7%a6%bb%e7%ba%a7%e5%88%ab" target="_blank" rel="noopener noreferrer">事务的隔离级别</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mvcc" target="_blank" rel="noopener noreferrer">MVCC</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%94%81" target="_blank" rel="noopener noreferrer">锁</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java%e4%b8%ad%e7%9a%84%e9%94%81%e5%92%8c%e5%90%8c%e6%ad%a5%e7%b1%bb" target="_blank" rel="noopener noreferrer">Java中的锁和同步类</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%85%ac%e5%b9%b3%e9%94%81--%e9%9d%9e%e5%85%ac%e5%b9%b3%e9%94%81" target="_blank" rel="noopener noreferrer">公平锁 &amp; 非公平锁</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%82%b2%e8%a7%82%e9%94%81" target="_blank" rel="noopener noreferrer">悲观锁</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b9%90%e8%a7%82%e9%94%81--cas" target="_blank" rel="noopener noreferrer">乐观锁 &amp; CAS</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#aba-%e9%97%ae%e9%a2%98" target="_blank" rel="noopener noreferrer">ABA 问题</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#copyonwrite%e5%ae%b9%e5%99%a8" target="_blank" rel="noopener noreferrer">CopyOnWrite容器</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ringbuffer" target="_blank" rel="noopener noreferrer">RingBuffer</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8f%af%e9%87%8d%e5%85%a5%e9%94%81--%e4%b8%8d%e5%8f%af%e9%87%8d%e5%85%a5%e9%94%81" target="_blank" rel="noopener noreferrer">可重入锁 &amp; 不可重入锁</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%92%e6%96%a5%e9%94%81--%e5%85%b1%e4%ba%ab%e9%94%81" target="_blank" rel="noopener noreferrer">互斥锁 &amp; 共享锁</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%ad%bb%e9%94%81" target="_blank" rel="noopener noreferrer">死锁</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f" target="_blank" rel="noopener noreferrer">操作系统</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%ae%a1%e7%ae%97%e6%9c%ba%e5%8e%9f%e7%90%86" target="_blank" rel="noopener noreferrer">计算机原理</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#cpu" target="_blank" rel="noopener noreferrer">CPU</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%a4%9a%e7%ba%a7%e7%bc%93%e5%ad%98" target="_blank" rel="noopener noreferrer">多级缓存</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%bf%9b%e7%a8%8b" target="_blank" rel="noopener noreferrer">进程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%ba%bf%e7%a8%8b" target="_blank" rel="noopener noreferrer">线程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%8f%e7%a8%8b" target="_blank" rel="noopener noreferrer">协程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#linux" target="_blank" rel="noopener noreferrer">Linux</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">设计模式</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f%e7%9a%84%e5%85%ad%e5%a4%a7%e5%8e%9f%e5%88%99" target="_blank" rel="noopener noreferrer">设计模式的六大原则</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#23%e7%a7%8d%e5%b8%b8%e8%a7%81%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">23种常见设计模式</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af" target="_blank" rel="noopener noreferrer">应用场景</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%95%e4%be%8b%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">单例模式</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%b4%a3%e4%bb%bb%e9%93%be%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">责任链模式</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mvc" target="_blank" rel="noopener noreferrer">MVC</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ioc" target="_blank" rel="noopener noreferrer">IOC</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#aop" target="_blank" rel="noopener noreferrer">AOP</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#uml" target="_blank" rel="noopener noreferrer">UML</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%be%ae%e6%9c%8d%e5%8a%a1%e6%80%9d%e6%83%b3" target="_blank" rel="noopener noreferrer">微服务思想</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ba%b7%e5%a8%81%e5%ae%9a%e5%be%8b" target="_blank" rel="noopener noreferrer">康威定律</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%bf%90%e7%bb%b4--%e7%bb%9f%e8%ae%a1--%e6%8a%80%e6%9c%af%e6%94%af%e6%8c%81" target="_blank" rel="noopener noreferrer">运维 &amp; 统计 &amp; 技术支持</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b8%b8%e8%a7%84%e7%9b%91%e6%8e%a7" target="_blank" rel="noopener noreferrer">常规监控</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#apm" target="_blank" rel="noopener noreferrer">APM</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bb%9f%e8%ae%a1%e5%88%86%e6%9e%90" target="_blank" rel="noopener noreferrer">统计分析</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8c%81%e7%bb%ad%e9%9b%86%e6%88%90cicd" target="_blank" rel="noopener noreferrer">持续集成(CI/CD)</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#jenkins" target="_blank" rel="noopener noreferrer">Jenkins</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%8e%af%e5%a2%83%e5%88%86%e7%a6%bb" target="_blank" rel="noopener noreferrer">环境分离</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%87%aa%e5%8a%a8%e5%8c%96%e8%bf%90%e7%bb%b4" target="_blank" rel="noopener noreferrer">自动化运维</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ansible" target="_blank" rel="noopener noreferrer">Ansible</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#puppet" target="_blank" rel="noopener noreferrer">puppet</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#chef" target="_blank" rel="noopener noreferrer">chef</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b5%8b%e8%af%95" target="_blank" rel="noopener noreferrer">测试</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tdd-%e7%90%86%e8%ae%ba" target="_blank" rel="noopener noreferrer">TDD 理论</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%95%e5%85%83%e6%b5%8b%e8%af%95" target="_blank" rel="noopener noreferrer">单元测试</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8e%8b%e5%8a%9b%e6%b5%8b%e8%af%95" target="_blank" rel="noopener noreferrer">压力测试</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%85%a8%e9%93%be%e8%b7%af%e5%8e%8b%e6%b5%8b" target="_blank" rel="noopener noreferrer">全链路压测</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ab-%e7%81%b0%e5%ba%a6%e8%93%9d%e7%bb%bf%e6%b5%8b%e8%af%95" target="_blank" rel="noopener noreferrer">A/B 、灰度、蓝绿测试</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%99%9a%e6%8b%9f%e5%8c%96" target="_blank" rel="noopener noreferrer">虚拟化</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kvm" target="_blank" rel="noopener noreferrer">KVM</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#xen" target="_blank" rel="noopener noreferrer">Xen</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#openvz" target="_blank" rel="noopener noreferrer">OpenVZ</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%b9%e5%99%a8%e6%8a%80%e6%9c%af" target="_blank" rel="noopener noreferrer">容器技术</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#docker" target="_blank" rel="noopener noreferrer">Docker</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%ba%91%e6%8a%80%e6%9c%af" target="_blank" rel="noopener noreferrer">云技术</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#openstack" target="_blank" rel="noopener noreferrer">OpenStack</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#devops" target="_blank" rel="noopener noreferrer">DevOps</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%96%87%e6%a1%a3%e7%ae%a1%e7%90%86" target="_blank" rel="noopener noreferrer">文档管理</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%ad%e9%97%b4%e4%bb%b6" target="_blank" rel="noopener noreferrer">中间件</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web-server" target="_blank" rel="noopener noreferrer">Web Server</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#nginx" target="_blank" rel="noopener noreferrer">Nginx</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#openresty" target="_blank" rel="noopener noreferrer">OpenResty</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#Tengine" target="_blank" rel="noopener noreferrer">Tengine</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#apache-httpd" target="_blank" rel="noopener noreferrer">Apache Httpd</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tomcat" target="_blank" rel="noopener noreferrer">Tomcat</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9e%b6%e6%9e%84%e5%8e%9f%e7%90%86" target="_blank" rel="noopener noreferrer">架构原理</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%b0%83%e4%bc%98%e6%96%b9%e6%a1%88" target="_blank" rel="noopener noreferrer">调优方案</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#jetty" target="_blank" rel="noopener noreferrer">Jetty</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bc%93%e5%ad%98" target="_blank" rel="noopener noreferrer">缓存</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%ac%e5%9c%b0%e7%bc%93%e5%ad%98" target="_blank" rel="noopener noreferrer">本地缓存</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%a2%e6%88%b7%e7%ab%af%e7%bc%93%e5%ad%98" target="_blank" rel="noopener noreferrer">客户端缓存</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%8d%e5%8a%a1%e7%ab%af%e7%bc%93%e5%ad%98" target="_blank" rel="noopener noreferrer">服务端缓存</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web%e7%bc%93%e5%ad%98" target="_blank" rel="noopener noreferrer">Web缓存</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#memcached" target="_blank" rel="noopener noreferrer">Memcached</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#redis" target="_blank" rel="noopener noreferrer">Redis</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9e%b6%e6%9e%84" target="_blank" rel="noopener noreferrer">架构</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9b%9e%e6%94%b6%e7%ad%96%e7%95%a5" target="_blank" rel="noopener noreferrer">回收策略</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tair" target="_blank" rel="noopener noreferrer">Tair</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b6%88%e6%81%af%e9%98%9f%e5%88%97" target="_blank" rel="noopener noreferrer">消息队列</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b6%88%e6%81%af%e6%80%bb%e7%ba%bf" target="_blank" rel="noopener noreferrer">消息总线</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b6%88%e6%81%af%e7%9a%84%e9%a1%ba%e5%ba%8f" target="_blank" rel="noopener noreferrer">消息的顺序</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rabbitmq" target="_blank" rel="noopener noreferrer">RabbitMQ</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rocketmq" target="_blank" rel="noopener noreferrer">RocketMQ</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#activemq" target="_blank" rel="noopener noreferrer">ActiveMQ</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kafka" target="_blank" rel="noopener noreferrer">Kafka</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#redis-%e6%b6%88%e6%81%af%e6%8e%a8%e9%80%81" target="_blank" rel="noopener noreferrer">Redis 消息推送</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#zeromq" target="_blank" rel="noopener noreferrer">ZeroMQ</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%9a%e6%97%b6%e8%b0%83%e5%ba%a6" target="_blank" rel="noopener noreferrer">定时调度</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%95%e6%9c%ba%e5%ae%9a%e6%97%b6%e8%b0%83%e5%ba%a6" target="_blank" rel="noopener noreferrer">单机定时调度</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e5%ae%9a%e6%97%b6%e8%b0%83%e5%ba%a6" target="_blank" rel="noopener noreferrer">分布式定时调度</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rpc" target="_blank" rel="noopener noreferrer">RPC</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#dubbo" target="_blank" rel="noopener noreferrer">Dubbo</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#thrift" target="_blank" rel="noopener noreferrer">Thrift</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#grpc" target="_blank" rel="noopener noreferrer">gRPC</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%ad%e9%97%b4%e4%bb%b6" target="_blank" rel="noopener noreferrer">数据库中间件</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#sharding-jdbc" target="_blank" rel="noopener noreferrer">Sharding Jdbc</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%97%a5%e5%bf%97%e7%b3%bb%e7%bb%9f" target="_blank" rel="noopener noreferrer">日志系统</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%97%a5%e5%bf%97%e6%90%9c%e9%9b%86" target="_blank" rel="noopener noreferrer">日志搜集</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%85%8d%e7%bd%ae%e4%b8%ad%e5%bf%83" target="_blank" rel="noopener noreferrer">配置中心</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#api-%e7%bd%91%e5%85%b3" target="_blank" rel="noopener noreferrer">API 网关</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bd%91%e7%bb%9c" target="_blank" rel="noopener noreferrer">网络</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%8f%e8%ae%ae" target="_blank" rel="noopener noreferrer">协议</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#osi-%e4%b8%83%e5%b1%82%e5%8d%8f%e8%ae%ae" target="_blank" rel="noopener noreferrer">OSI 七层协议</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tcpip" target="_blank" rel="noopener noreferrer">TCP/IP</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#http" target="_blank" rel="noopener noreferrer">HTTP</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#http20" target="_blank" rel="noopener noreferrer">HTTP2.0</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#https" target="_blank" rel="noopener noreferrer">HTTPS</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bd%91%e7%bb%9c%e6%a8%a1%e5%9e%8b" target="_blank" rel="noopener noreferrer">网络模型</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#epoll" target="_blank" rel="noopener noreferrer">Epoll</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#java-nio" target="_blank" rel="noopener noreferrer">Java NIO</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kqueue" target="_blank" rel="noopener noreferrer">kqueue</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%bf%9e%e6%8e%a5%e5%92%8c%e7%9f%ad%e8%bf%9e%e6%8e%a5" target="_blank" rel="noopener noreferrer">连接和短连接</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%a1%86%e6%9e%b6" target="_blank" rel="noopener noreferrer">框架</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%9b%b6%e6%8b%b7%e8%b4%9dzero-copy" target="_blank" rel="noopener noreferrer">零拷贝（Zero-copy）</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ba%8f%e5%88%97%e5%8c%96%e4%ba%8c%e8%bf%9b%e5%88%b6%e5%8d%8f%e8%ae%ae" target="_blank" rel="noopener noreferrer">序列化(二进制协议)</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hessian" target="_blank" rel="noopener noreferrer">Hessian</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#protobuf" target="_blank" rel="noopener noreferrer">Protobuf</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%b0%e6%8d%ae%e5%ba%93" target="_blank" rel="noopener noreferrer">数据库</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9f%ba%e7%a1%80%e7%90%86%e8%ae%ba" target="_blank" rel="noopener noreferrer">基础理论</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%85%b3%e7%b3%bb%e6%95%b0%e6%8d%ae%e5%ba%93%e8%ae%be%e8%ae%a1%e7%9a%84%e4%b8%89%e5%a4%a7%e8%8c%83%e5%bc%8f" target="_blank" rel="noopener noreferrer">关系数据库设计的三大范式</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mysql" target="_blank" rel="noopener noreferrer">MySQL</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8e%9f%e7%90%86" target="_blank" rel="noopener noreferrer">原理</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#innodb" target="_blank" rel="noopener noreferrer">InnoDB</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%bc%98%e5%8c%96" target="_blank" rel="noopener noreferrer">优化</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%b4%a2%e5%bc%95" target="_blank" rel="noopener noreferrer">索引</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%81%9a%e9%9b%86%e7%b4%a2%e5%bc%95-%e9%9d%9e%e8%81%9a%e9%9b%86%e7%b4%a2%e5%bc%95" target="_blank" rel="noopener noreferrer">聚集索引, 非聚集索引</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%a4%8d%e5%90%88%e7%b4%a2%e5%bc%95" target="_blank" rel="noopener noreferrer">复合索引</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%87%aa%e9%80%82%e5%ba%94%e5%93%88%e5%b8%8c%e7%b4%a2%e5%bc%95ahi" target="_blank" rel="noopener noreferrer">自适应哈希索引(AHI)</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#explain" target="_blank" rel="noopener noreferrer">explain</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#nosql" target="_blank" rel="noopener noreferrer">NoSQL</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mongodb" target="_blank" rel="noopener noreferrer">MongoDB</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hbase" target="_blank" rel="noopener noreferrer">Hbase</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e" target="_blank" rel="noopener noreferrer">搜索引擎</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e%e5%8e%9f%e7%90%86" target="_blank" rel="noopener noreferrer">搜索引擎原理</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#lucene" target="_blank" rel="noopener noreferrer">Lucene</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#elasticsearch" target="_blank" rel="noopener noreferrer">Elasticsearch</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#solr" target="_blank" rel="noopener noreferrer">Solr</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#sphinx" target="_blank" rel="noopener noreferrer">sphinx</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%80%a7%e8%83%bd" target="_blank" rel="noopener noreferrer">性能</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96%e6%96%b9%e6%b3%95%e8%ae%ba" target="_blank" rel="noopener noreferrer">性能优化方法论</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%b9%e9%87%8f%e8%af%84%e4%bc%b0" target="_blank" rel="noopener noreferrer">容量评估</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#cdn-%e7%bd%91%e7%bb%9c" target="_blank" rel="noopener noreferrer">CDN 网络</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%bf%9e%e6%8e%a5%e6%b1%a0" target="_blank" rel="noopener noreferrer">连接池</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%80%a7%e8%83%bd%e8%b0%83%e4%bc%98" target="_blank" rel="noopener noreferrer">性能调优</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%a4%a7%e6%95%b0%e6%8d%ae" target="_blank" rel="noopener noreferrer">大数据</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b5%81%e5%bc%8f%e8%ae%a1%e7%ae%97" target="_blank" rel="noopener noreferrer">流式计算</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#storm" target="_blank" rel="noopener noreferrer">Storm</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#flink" target="_blank" rel="noopener noreferrer">Flink</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#kafka-stream" target="_blank" rel="noopener noreferrer">Kafka Stream</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af-1" target="_blank" rel="noopener noreferrer">应用场景</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hadoop" target="_blank" rel="noopener noreferrer">Hadoop</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hdfs" target="_blank" rel="noopener noreferrer">HDFS</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#mapreduce" target="_blank" rel="noopener noreferrer">MapReduce</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#yarn" target="_blank" rel="noopener noreferrer">Yarn</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#spark" target="_blank" rel="noopener noreferrer">Spark</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%89%e5%85%a8" target="_blank" rel="noopener noreferrer">安全</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web-%e5%ae%89%e5%85%a8" target="_blank" rel="noopener noreferrer">web 安全</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#xss" target="_blank" rel="noopener noreferrer">XSS</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#csrf" target="_blank" rel="noopener noreferrer">CSRF</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#sql-%e6%b3%a8%e5%85%a5" target="_blank" rel="noopener noreferrer">SQL 注入</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#hash-dos" target="_blank" rel="noopener noreferrer">Hash Dos</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%84%9a%e6%9c%ac%e6%b3%a8%e5%85%a5" target="_blank" rel="noopener noreferrer">脚本注入</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%bc%8f%e6%b4%9e%e6%89%ab%e6%8f%8f%e5%b7%a5%e5%85%b7" target="_blank" rel="noopener noreferrer">漏洞扫描工具</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%aa%8c%e8%af%81%e7%a0%81" target="_blank" rel="noopener noreferrer">验证码</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ddos-%e9%98%b2%e8%8c%83" target="_blank" rel="noopener noreferrer">DDoS 防范</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%94%a8%e6%88%b7%e9%9a%90%e7%a7%81%e4%bf%a1%e6%81%af%e4%bf%9d%e6%8a%a4" target="_blank" rel="noopener noreferrer">用户隐私信息保护</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ba%8f%e5%88%97%e5%8c%96%e6%bc%8f%e6%b4%9e" target="_blank" rel="noopener noreferrer">序列化漏洞</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8a%a0%e5%af%86%e8%a7%a3%e5%af%86" target="_blank" rel="noopener noreferrer">加密解密</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%af%b9%e7%a7%b0%e5%8a%a0%e5%af%86" target="_blank" rel="noopener noreferrer">对称加密</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%93%88%e5%b8%8c%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">哈希算法</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%9d%9e%e5%af%b9%e7%a7%b0%e5%8a%a0%e5%af%86" target="_blank" rel="noopener noreferrer">非对称加密</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%ae%89%e5%85%a8" target="_blank" rel="noopener noreferrer">服务器安全</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%b0%e6%8d%ae%e5%ae%89%e5%85%a8" target="_blank" rel="noopener noreferrer">数据安全</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%b0%e6%8d%ae%e5%a4%87%e4%bb%bd" target="_blank" rel="noopener noreferrer">数据备份</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bd%91%e7%bb%9c%e9%9a%94%e7%a6%bb" target="_blank" rel="noopener noreferrer">网络隔离</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%86%85%e5%a4%96%e7%bd%91%e5%88%86%e7%a6%bb" target="_blank" rel="noopener noreferrer">内外网分离</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%99%bb%e5%bd%95%e8%b7%b3%e6%9d%bf%e6%9c%ba" target="_blank" rel="noopener noreferrer">登录跳板机</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8e%88%e6%9d%83%e8%ae%a4%e8%af%81" target="_blank" rel="noopener noreferrer">授权、认证</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rbac" target="_blank" rel="noopener noreferrer">RBAC</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#oauth20" target="_blank" rel="noopener noreferrer">OAuth2.0</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#oidc" target="_blank" rel="noopener noreferrer">OIDC</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#saml" target="_blank" rel="noopener noreferrer">SAML</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8f%8c%e5%9b%a0%e7%b4%a0%e8%ae%a4%e8%af%812fa" target="_blank" rel="noopener noreferrer">双因素认证（2FA）</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%95%e7%82%b9%e7%99%bb%e5%bd%95sso" target="_blank" rel="noopener noreferrer">单点登录(SSO)</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b8%b8%e7%94%a8%e5%bc%80%e6%ba%90%e6%a1%86%e6%9e%b6" target="_blank" rel="noopener noreferrer">常用开源框架</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%bc%80%e6%ba%90%e5%8d%8f%e8%ae%ae" target="_blank" rel="noopener noreferrer">开源协议</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%97%a5%e5%bf%97%e6%a1%86%e6%9e%b6" target="_blank" rel="noopener noreferrer">日志框架</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#log4jlog4j2" target="_blank" rel="noopener noreferrer">Log4j、Log4j2</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#logback" target="_blank" rel="noopener noreferrer">Logback</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#orm" target="_blank" rel="noopener noreferrer">ORM</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bd%91%e7%bb%9c%e6%a1%86%e6%9e%b6" target="_blank" rel="noopener noreferrer">网络框架</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#web-%e6%a1%86%e6%9e%b6" target="_blank" rel="noopener noreferrer">Web 框架</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#spring-%e5%ae%b6%e6%97%8f" target="_blank" rel="noopener noreferrer">Spring 家族</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b7%a5%e5%85%b7%e6%a1%86%e6%9e%b6" target="_blank" rel="noopener noreferrer">工具框架</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e8%ae%be%e8%ae%a1" target="_blank" rel="noopener noreferrer">分布式设计</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%89%a9%e5%b1%95%e6%80%a7%e8%ae%be%e8%ae%a1" target="_blank" rel="noopener noreferrer">扩展性设计</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%a8%b3%e5%ae%9a%e6%80%a7--%e9%ab%98%e5%8f%af%e7%94%a8" target="_blank" rel="noopener noreferrer">稳定性 &amp; 高可用</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%a1%ac%e4%bb%b6%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1" target="_blank" rel="noopener noreferrer">硬件负载均衡</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%bd%af%e4%bb%b6%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1" target="_blank" rel="noopener noreferrer">软件负载均衡</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%99%90%e6%b5%81" target="_blank" rel="noopener noreferrer">限流</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ba%94%e7%94%a8%e5%b1%82%e5%ae%b9%e7%81%be" target="_blank" rel="noopener noreferrer">应用层容灾</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%b7%a8%e6%9c%ba%e6%88%bf%e5%ae%b9%e7%81%be" target="_blank" rel="noopener noreferrer">跨机房容灾</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%ae%b9%e7%81%be%e6%bc%94%e7%bb%83%e6%b5%81%e7%a8%8b" target="_blank" rel="noopener noreferrer">容灾演练流程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b9%b3%e6%bb%91%e5%90%af%e5%8a%a8" target="_blank" rel="noopener noreferrer">平滑启动</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%b0%e6%8d%ae%e5%ba%93%e6%89%a9%e5%b1%95" target="_blank" rel="noopener noreferrer">数据库扩展</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%af%bb%e5%86%99%e5%88%86%e7%a6%bb%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">读写分离模式</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e7%89%87%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">分片模式</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%8d%e5%8a%a1%e6%b2%bb%e7%90%86" target="_blank" rel="noopener noreferrer">服务治理</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%8d%e5%8a%a1%e6%b3%a8%e5%86%8c%e4%b8%8e%e5%8f%91%e7%8e%b0" target="_blank" rel="noopener noreferrer">服务注册与发现</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9c%8d%e5%8a%a1%e8%b7%af%e7%94%b1%e6%8e%a7%e5%88%b6" target="_blank" rel="noopener noreferrer">服务路由控制</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e4%b8%80%e8%87%b4" target="_blank" rel="noopener noreferrer">分布式一致</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#cap-%e4%b8%8e-base-%e7%90%86%e8%ae%ba" target="_blank" rel="noopener noreferrer">CAP 与 BASE 理论</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e9%94%81" target="_blank" rel="noopener noreferrer">分布式锁</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e4%b8%80%e8%87%b4%e6%80%a7%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">分布式一致性算法</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#paxos" target="_blank" rel="noopener noreferrer">PAXOS</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#zab" target="_blank" rel="noopener noreferrer">Zab</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#raft" target="_blank" rel="noopener noreferrer">Raft</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#gossip" target="_blank" rel="noopener noreferrer">Gossip</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%a4%e9%98%b6%e6%ae%b5%e6%8f%90%e4%ba%a4%e5%a4%9a%e9%98%b6%e6%ae%b5%e6%8f%90%e4%ba%a4" target="_blank" rel="noopener noreferrer">两阶段提交、多阶段提交</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b9%82%e7%ad%89" target="_blank" rel="noopener noreferrer">幂等</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e4%b8%80%e8%87%b4%e6%96%b9%e6%a1%88" target="_blank" rel="noopener noreferrer">分布式一致方案</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f-leader-%e8%8a%82%e7%82%b9%e9%80%89%e4%b8%be" target="_blank" rel="noopener noreferrer">分布式 Leader 节点选举</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#tcctryconfirmcancel-%e6%9f%94%e6%80%a7%e4%ba%8b%e5%8a%a1" target="_blank" rel="noopener noreferrer">TCC(Try/Confirm/Cancel) 柔性事务</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f" target="_blank" rel="noopener noreferrer">分布式文件系统</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%94%af%e4%b8%80id-%e7%94%9f%e6%88%90" target="_blank" rel="noopener noreferrer">唯一ID 生成</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%85%a8%e5%b1%80%e5%94%af%e4%b8%80id" target="_blank" rel="noopener noreferrer">全局唯一ID</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%80%e8%87%b4%e6%80%a7hash%e7%ae%97%e6%b3%95" target="_blank" rel="noopener noreferrer">一致性Hash算法</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%ae%be%e8%ae%a1%e6%80%9d%e6%83%b3--%e5%bc%80%e5%8f%91%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">设计思想 &amp; 开发模式</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#ddddomain-driven-design---%e9%a2%86%e5%9f%9f%e9%a9%b1%e5%8a%a8%e8%ae%be%e8%ae%a1" target="_blank" rel="noopener noreferrer">DDD(Domain-driven Design - 领域驱动设计)</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%91%bd%e4%bb%a4%e6%9f%a5%e8%af%a2%e8%81%8c%e8%b4%a3%e5%88%86%e7%a6%bbcqrs" target="_blank" rel="noopener noreferrer">命令查询职责分离(CQRS)</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%b4%ab%e8%a1%80%e5%85%85%e8%a1%80%e6%a8%a1%e5%9e%8b" target="_blank" rel="noopener noreferrer">贫血，充血模型</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#actor-%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">Actor 模式</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%93%8d%e5%ba%94%e5%bc%8f%e7%bc%96%e7%a8%8b" target="_blank" rel="noopener noreferrer">响应式编程</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#reactor" target="_blank" rel="noopener noreferrer">Reactor</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rxjava" target="_blank" rel="noopener noreferrer">RxJava</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#vertx" target="_blank" rel="noopener noreferrer">Vert.x</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#dodaf20" target="_blank" rel="noopener noreferrer">DODAF2.0</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#serverless" target="_blank" rel="noopener noreferrer">Serverless</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#service-mesh" target="_blank" rel="noopener noreferrer">Service Mesh</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%a1%b9%e7%9b%ae%e7%ae%a1%e7%90%86" target="_blank" rel="noopener noreferrer">项目管理</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9e%b6%e6%9e%84%e8%af%84%e5%ae%a1" target="_blank" rel="noopener noreferrer">架构评审</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%87%8d%e6%9e%84" target="_blank" rel="noopener noreferrer">重构</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%bb%a3%e7%a0%81%e8%a7%84%e8%8c%83" target="_blank" rel="noopener noreferrer">代码规范</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%bb%a3%e7%a0%81-review" target="_blank" rel="noopener noreferrer">代码 Review</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#rup" target="_blank" rel="noopener noreferrer">RUP</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%9c%8b%e6%9d%bf%e7%ae%a1%e7%90%86" target="_blank" rel="noopener noreferrer">看板管理</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#scrum" target="_blank" rel="noopener noreferrer">SCRUM</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%95%8f%e6%8d%b7%e5%bc%80%e5%8f%91" target="_blank" rel="noopener noreferrer">敏捷开发</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9e%81%e9%99%90%e7%bc%96%e7%a8%8bxp" target="_blank" rel="noopener noreferrer">极限编程（XP）</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bb%93%e5%af%b9%e7%bc%96%e7%a8%8b" target="_blank" rel="noopener noreferrer">结对编程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#pdca-%e5%be%aa%e7%8e%af%e8%b4%a8%e9%87%8f%e7%ae%a1%e7%90%86" target="_blank" rel="noopener noreferrer">PDCA 循环质量管理</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#fmea%e7%ae%a1%e7%90%86%e6%a8%a1%e5%bc%8f" target="_blank" rel="noopener noreferrer">FMEA管理模式</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%80%9a%e7%94%a8%e4%b8%9a%e5%8a%a1%e6%9c%af%e8%af%ad" target="_blank" rel="noopener noreferrer">通用业务术语</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8a%80%e6%9c%af%e8%b6%8b%e5%8a%bf" target="_blank" rel="noopener noreferrer">技术趋势</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%94%bf%e7%ad%96%e6%b3%95%e8%a7%84" target="_blank" rel="noopener noreferrer">政策、法规</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%b3%95%e5%be%8b" target="_blank" rel="noopener noreferrer">法律</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%a5%e6%a0%bc%e9%81%b5%e5%ae%88%e5%88%91%e6%b3%95253%e6%b3%95%e6%9d%a1" target="_blank" rel="noopener noreferrer">严格遵守刑法253法条</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9e%b6%e6%9e%84%e5%b8%88%e7%b4%a0%e8%b4%a8" target="_blank" rel="noopener noreferrer">架构师素质</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9b%a2%e9%98%9f%e7%ae%a1%e7%90%86" target="_blank" rel="noopener noreferrer">团队管理</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8b%9b%e8%81%98" target="_blank" rel="noopener noreferrer">招聘</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%b5%84%e8%ae%af" target="_blank" rel="noopener noreferrer">资讯</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%a1%8c%e4%b8%9a%e8%b5%84%e8%ae%af" target="_blank" rel="noopener noreferrer">行业资讯</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%85%ac%e4%bc%97%e5%8f%b7%e5%88%97%e8%a1%a8" target="_blank" rel="noopener noreferrer">公众号列表</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%8d%9a%e5%ae%a2" target="_blank" rel="noopener noreferrer">博客</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9b%a2%e9%98%9f%e5%8d%9a%e5%ae%a2" target="_blank" rel="noopener noreferrer">团队博客</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%aa%e4%ba%ba%e5%8d%9a%e5%ae%a2" target="_blank" rel="noopener noreferrer">个人博客</a></li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bb%bc%e5%90%88%e9%97%a8%e6%88%b7%e7%a4%be%e5%8c%ba" target="_blank" rel="noopener noreferrer">综合门户、社区</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e9%97%ae%e7%ad%94%e8%ae%a8%e8%ae%ba%e7%b1%bb%e7%a4%be%e5%8c%ba" target="_blank" rel="noopener noreferrer">问答、讨论类社区</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e8%a1%8c%e4%b8%9a%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90" target="_blank" rel="noopener noreferrer">行业数据分析</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%b8%93%e9%a1%b9%e7%bd%91%e7%ab%99" target="_blank" rel="noopener noreferrer">专项网站</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%85%b6%e4%bb%96%e7%b1%bb" target="_blank" rel="noopener noreferrer">其他类</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8e%a8%e8%8d%90%e5%8f%82%e8%80%83%e4%b9%a6" target="_blank" rel="noopener noreferrer">推荐参考书</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9c%a8%e7%ba%bf%e7%94%b5%e5%ad%90%e4%b9%a6" target="_blank" rel="noopener noreferrer">在线电子书</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%ba%b8%e8%b4%a8%e4%b9%a6" target="_blank" rel="noopener noreferrer">纸质书</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%bc%80%e5%8f%91%e6%96%b9%e9%9d%a2" target="_blank" rel="noopener noreferrer">开发方面</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%9e%b6%e6%9e%84%e6%96%b9%e9%9d%a2" target="_blank" rel="noopener noreferrer">架构方面</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8a%80%e6%9c%af%e7%ae%a1%e7%90%86%e6%96%b9%e9%9d%a2" target="_blank" rel="noopener noreferrer">技术管理方面</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9f%ba%e7%a1%80%e7%90%86%e8%ae%ba-1" target="_blank" rel="noopener noreferrer">基础理论</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b7%a5%e5%85%b7%e6%96%b9%e9%9d%a2" target="_blank" rel="noopener noreferrer">工具方面</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%a4%a7%e6%95%b0%e6%8d%ae%e6%96%b9%e9%9d%a2" target="_blank" rel="noopener noreferrer">大数据方面</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%8a%80%e6%9c%af%e8%b5%84%e6%ba%90" target="_blank" rel="noopener noreferrer">技术资源</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%bc%80%e6%ba%90%e8%b5%84%e6%ba%90" target="_blank" rel="noopener noreferrer">开源资源</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%89%8b%e5%86%8c%e6%96%87%e6%a1%a3%e6%95%99%e7%a8%8b" target="_blank" rel="noopener noreferrer">手册、文档、教程</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%9c%a8%e7%ba%bf%e8%af%be%e5%a0%82" target="_blank" rel="noopener noreferrer">在线课堂</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%bc%9a%e8%ae%ae%e6%b4%bb%e5%8a%a8" target="_blank" rel="noopener noreferrer">会议、活动</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b8%b8%e7%94%a8app" target="_blank" rel="noopener noreferrer">常用APP</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%89%be%e5%b7%a5%e4%bd%9c" target="_blank" rel="noopener noreferrer">找工作</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e5%b7%a5%e5%85%b7" target="_blank" rel="noopener noreferrer">工具</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e4%bb%a3%e7%a0%81%e6%89%98%e7%ae%a1" target="_blank" rel="noopener noreferrer">代码托管</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e6%96%87%e4%bb%b6%e6%9c%8d%e5%8a%a1" target="_blank" rel="noopener noreferrer">文件服务</a></li>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#%e7%bb%bc%e5%90%88%e4%ba%91%e6%9c%8d%e5%8a%a1%e5%95%86" target="_blank" rel="noopener noreferrer">综合云服务商</a>
<ul>
<li><a href="https://github.com/xingshaocheng/architect-awesome/blob/master/README.md#vps" target="_blank" rel="noopener noreferrer">VPS</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>（Toc generated by <a href="https://github.com/xingshaocheng/simple-php-github-toc" target="_blank" rel="noopener noreferrer">simple-php-github-toc</a> ）</strong></p>]]></description></item><item><title>后台技术</title><link>https://rd163.visword.com/posts/server-tech/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/server-tech/</guid><description><![CDATA[<h1 id="后台技术" class="headerLink">
    <a href="#%e5%90%8e%e5%8f%b0%e6%8a%80%e6%9c%af" class="header-mark"></a>后台技术</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/rohitg00/DevOps_Books" target="_blank" rel="noopener noreferrer">DevOps_Books</a></li>
<li><a href="https://github.com/isno/theByteBook" target="_blank" rel="noopener noreferrer">深入架构原理与实践</a></li>
<li><a href="https://github.com/rohitg00/DevOps_Books/blob/main/The%20Kubernetes%20Book%20%28Nigel%20Poulton%29%20%28z-lib.org%29.pdf" target="_blank" rel="noopener noreferrer">The Kubernetes Book, 2021 Edition</a></li>
</ul>]]></description></item><item><title>函数调用关系绘制</title><link>https://rd163.visword.com/posts/function-call-drawing/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/function-call-drawing/</guid><description><![CDATA[<h1 id="函数调用关系绘制" class="headerLink">
    <a href="#%e5%87%bd%e6%95%b0%e8%b0%83%e7%94%a8%e5%85%b3%e7%b3%bb%e7%bb%98%e5%88%b6" class="header-mark"></a>函数调用关系绘制</h1><h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>cflow是一款静态分析C语言代码的工具，通过它可以生成函数调用关系。</p>
<p>该工具能够生成两种图：直接图和反向图。直接图以main函数(main)开始，递归地显示它调用的所有函数。相反，反向图是一组子图，以相反的顺序为每个函数的调用者绘制图表。由于它们的树状外观，图也可以称为树。</p>]]></description></item><item><title>工作周报自动总结</title><link>https://rd163.visword.com/posts/auto-weekly/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/auto-weekly/</guid><description><![CDATA[<h1 id="工作周报自动总结" class="headerLink">
    <a href="#%e5%b7%a5%e4%bd%9c%e5%91%a8%e6%8a%a5%e8%87%aa%e5%8a%a8%e6%80%bb%e7%bb%93" class="header-mark"></a>工作周报自动总结</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/irbull/obsidian-ai-summary" target="_blank" rel="noopener noreferrer">Obsidian AI Summary Plugin</a></li>
</ul>]]></description></item><item><title>个人开发者相关网址收集</title><link>https://rd163.visword.com/posts/independent-developer-site/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/independent-developer-site/</guid><description><![CDATA[<h1 id="个人开发者相关网址收集" class="headerLink">
    <a href="#%e4%b8%aa%e4%ba%ba%e5%bc%80%e5%8f%91%e8%80%85%e7%9b%b8%e5%85%b3%e7%bd%91%e5%9d%80%e6%94%b6%e9%9b%86" class="header-mark"></a>个人开发者相关网址收集</h1><ul>
<li><a href="https://github.com/erikluo/indie-hacker-tools" target="_blank" rel="noopener noreferrer">indie-hacker-tools</a></li>
<li><a href="https://github.com/yaolifeng0629/Awesome-independent-tools" target="_blank" rel="noopener noreferrer">Independent-developer-tools</a></li>
</ul>]]></description></item><item><title>分布式计算平台-Boinc</title><link>https://rd163.visword.com/posts/distributed-computation-boinc/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/distributed-computation-boinc/</guid><description><![CDATA[<h1 id="分布式计算平台-boinc" class="headerLink">
    <a href="#%e5%88%86%e5%b8%83%e5%bc%8f%e8%ae%a1%e7%ae%97%e5%b9%b3%e5%8f%b0-boinc" class="header-mark"></a>分布式计算平台-Boinc</h1><p>BOINC 是 Berkeley Open Infrastructure for Network Computing 的首字母缩写，即伯克利开放式网络计算平台，是用于志愿计算和网格计算的开放的中间件系统。</p>
<p>BOINC 最早是为了支持 SETI@home 项目而开发的，之后逐渐成了最为主流的分布式计算平台，为众多的数学、物理、化学、生命科学、地球科学等学科类别的项目所使用。BOINC 的开发目的是为了帮助研究人员更方便地获得分布在世界各地的志愿者的计算资源。</p>]]></description></item><item><title>分布式计算平台</title><link>https://rd163.visword.com/posts/distributed-computation/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/distributed-computation/</guid><description><![CDATA[<h1 id="分布式计算" class="headerLink">
    <a href="#%e5%88%86%e5%b8%83%e5%bc%8f%e8%ae%a1%e7%ae%97" class="header-mark"></a>分布式计算</h1><h2 id="boinc" class="headerLink">
    <a href="#boinc" class="header-mark"></a><a href="https://github.com/BOINC/boinc" target="_blank" rel="noopener noreferrer">boinc</a></h2><ul>
<li>
<p><a href="https://boinc.berkeley.edu/trac/wiki/TitleIndex" target="_blank" rel="noopener noreferrer">Wiki索引</a></p>
<ul>
<li><a href="https://boinc.berkeley.edu/trac/wiki/ProjectOptions#Schedulingoptionsandparameters" target="_blank" rel="noopener noreferrer">config.xml 字段说明</a></li>
</ul>
</li>
<li>
<p><a href="https://github.com/BOINC/boinc.wiki.git" target="_blank" rel="noopener noreferrer">github wiki</a></p>
</li>
</ul>
<h3 id="1-部署服务" class="headerLink">
    <a href="#1-%e9%83%a8%e7%bd%b2%e6%9c%8d%e5%8a%a1" class="header-mark"></a>1. 部署服务</h3><p><strong>源码编译安装部署</strong></p>
<p>参考  <a href="https://boinc.berkeley.edu/trac/wiki/ServerIntro" target="_blank" rel="noopener noreferrer">Boinc Server搭建</a></p>
<p><strong>docker部署</strong></p>
<p>参考 <a href="https://github.com/marius311/boinc-server-docker" target="_blank" rel="noopener noreferrer">Boinc Server Docker</a></p>]]></description></item><item><title>导航网站</title><link>https://rd163.visword.com/posts/nav-sites/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/nav-sites/</guid><description><![CDATA[<h1 id="导航网站" class="headerLink">
    <a href="#%e5%af%bc%e8%88%aa%e7%bd%91%e7%ab%99" class="header-mark"></a>导航网站</h1><p><strong>next</strong></p>
<ul>
<li><a href="https://github.com/liwenka1/next-web-nav" target="_blank" rel="noopener noreferrer">next-web-nav 一个简单好用的导航网站</a></li>
<li><a href="https://github.com/6677-ai/tap4-ai-webui" target="_blank" rel="noopener noreferrer">tap4-ai-webui</a> 支持支付</li>
</ul>
<p><strong>nuxt</strong></p>
<ul>
<li><a href="https://github.com/geekape/geek-navigation" target="_blank" rel="noopener noreferrer">geek-navigation 极客猿导航</a> 前端 + server + admin</li>
</ul>
<p><strong>Vue</strong></p>
<ul>
<li><a href="https://github.com/eehhh/naviii" target="_blank" rel="noopener noreferrer">naviii 一个简单优雅的导航页</a> 个人设置存储于本地</li>
<li><a href="https://github.com/lissy93/dashy" target="_blank" rel="noopener noreferrer">Dashy</a> Github 18K. 支持可视化编辑。</li>
</ul>
<p><strong>angular</strong></p>
<ul>
<li><a href="https://github.com/xjh22222228/nav" target="_blank" rel="noopener noreferrer">发现导航</a> 支持检测网站存活状态 多款高颜值主题切换 三叉树分类 SEO 搜索引擎</li>
</ul>
<p><strong>golang + react</strong></p>]]></description></item><item><title>代码覆盖率</title><link>https://rd163.visword.com/posts/code-coverage/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/code-coverage/</guid><description><![CDATA[<h1 id="代码覆盖率" class="headerLink">
    <a href="#%e4%bb%a3%e7%a0%81%e8%a6%86%e7%9b%96%e7%8e%87" class="header-mark"></a>代码覆盖率</h1><p>代码覆盖率是软件测试中的一种度量，描述程序中源代码被测试的比例和程度，所得比例称为代码覆盖率 。</p>
<p>代码覆盖率指标通常包含下面几类：</p>
<ul>
<li>函数/方法覆盖率：函数/方法中有多少被调用到</li>
<li>分支覆盖率：有多少控制结构的分支（例如if语句）被执行</li>
<li>条件覆盖率：有多少布尔子表达式被测试为真值和假值</li>
<li>行覆盖率：有多少行的源代码被测试过</li>
</ul>
<p><strong>代码覆盖率的意义</strong></p>]]></description></item><item><title>代码风格最佳实践</title><link>https://rd163.visword.com/posts/best-practice-for-code-style/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/best-practice-for-code-style/</guid><description><![CDATA[<h1 id="代码风格最佳实践" class="headerLink">
    <a href="#%e4%bb%a3%e7%a0%81%e9%a3%8e%e6%a0%bc%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" class="header-mark"></a>代码风格最佳实践</h1><p>下面收录了一些 代码风格比较好，值得学习的开源项目</p>
<h2 id="c" class="headerLink">
    <a href="#c" class="header-mark"></a>C++</h2><ul>
<li><a href="https://github.com/google/leveldb" target="_blank" rel="noopener noreferrer">LevelDB </a> Google出品，作者是 Jeff Dean 大神。</li>
<li><a href="https://github.com/chenshuo/muduo" target="_blank" rel="noopener noreferrer">Muduo: is a multithreaded C++ network library based on the reactor pattern.</a></li>
<li><a href="https://github.com/abseil/abseil-cpp" target="_blank" rel="noopener noreferrer">Abseil - C++ Common Libraries</a> Google内部的C++轮子库，各种基础能力都包含，值得学习</li>
<li><a href="https://github.com/facebook/folly" target="_blank" rel="noopener noreferrer">Folly: Facebook Open-source Library</a> Facebook内部的轮子库，线程池、内存池、异步IO、executor等，应有尽有</li>
<li><a href="https://github.com/godotengine/godot" target="_blank" rel="noopener noreferrer">Godot – Multi-platform 2D and 3D game engine</a></li>
<li><a href="https://github.com/chromium/chromium" target="_blank" rel="noopener noreferrer">Chromium</a> google浏览器源码仓库，包括edge等很多浏览器和应用都会基于chromium二次开发</li>
</ul>]]></description></item><item><title>词典</title><link>https://rd163.visword.com/posts/dict/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/dict/</guid><description><![CDATA[<h1 id="词典" class="headerLink">
    <a href="#%e8%af%8d%e5%85%b8" class="header-mark"></a>词典</h1><h2 id="英汉词典相关的开源项目" class="headerLink">
    <a href="#%e8%8b%b1%e6%b1%89%e8%af%8d%e5%85%b8%e7%9b%b8%e5%85%b3%e7%9a%84%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae" class="header-mark"></a>英汉词典相关的开源项目</h2><ul>
<li><a href="https://github.com/chienlungcheung/MyDict" target="_blank" rel="noopener noreferrer">MyDict 一个用C语言实现的命令行英汉对照词典</a></li>
<li><a href="https://github.com/ChestnutHeng/Wudao-dict" target="_blank" rel="noopener noreferrer">Wudao-dict 无道词典,有道词典的命令行版本，支持英汉互查和在线查询。</a></li>
<li><a href="https://github.com/yyt6801/Dict" target="_blank" rel="noopener noreferrer">Dict《牛津英汉词典》 查词</a></li>
</ul>]]></description></item><item><title>程序员的酒后真言</title><link>https://rd163.visword.com/posts/drunk-post-of-a-programmer/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/drunk-post-of-a-programmer/</guid><description><![CDATA[<h1 id="程序员的酒后真言" class="headerLink">
    <a href="#%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%84%e9%85%92%e5%90%8e%e7%9c%9f%e8%a8%80" class="header-mark"></a>程序员的酒后真言</h1><p>美国最大的论坛 Reddit，最近有一个热帖。</p>
<p>一个程序员说自己喝醉了，软件工程师已经当了10年，心里有好多话想说，&ldquo;我可能会后悔今天说了这些话。&rdquo;</p>]]></description></item><item><title>蔡勒(Zeller)公式</title><link>https://rd163.visword.com/posts/zellers-congruence/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/zellers-congruence/</guid><description><![CDATA[<h1 id="蔡勒zeller公式" class="headerLink">
    <a href="#%e8%94%a1%e5%8b%92zeller%e5%85%ac%e5%bc%8f" class="header-mark"></a>蔡勒(Zeller)公式</h1><p>短视频刷到漫画家 蔡志忠 说他可以根据任意日期快速说出是星期几，比较好奇，就查了以下。</p>
<p>其实计算方式就是：蔡勒（Zeller）公式，其是一个计算星期的公式，随便给一个日期，就能用这个公式推算出是星期几。</p>]]></description></item><item><title>北极星（Polaris）</title><link>https://rd163.visword.com/posts/tencent-polaris/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/tencent-polaris/</guid><description><![CDATA[<h1 id="北极星polaris" class="headerLink">
    <a href="#%e5%8c%97%e6%9e%81%e6%98%9fpolaris" class="header-mark"></a>北极星（Polaris）</h1><h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>北极星是腾讯开源的服务治理平台，致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题，针对不同的技术栈和环境提供服务治理的标准方案和最佳实践。下面介绍北极星的应用场景、功能特性、系统组件和常见问题。</p>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://polarismesh.cn/docs/%E5%8C%97%E6%9E%81%E6%98%9F%E6%98%AF%E4%BB%80%E4%B9%88/%E7%AE%80%E4%BB%8B/" target="_blank" rel="noopener noreferrer">Polaris 简介</a></li>
<li><a href="https://github.com/polarismesh/polaris" target="_blank" rel="noopener noreferrer">Polaris github</a></li>
</ul>
<h2 id="部署" class="headerLink">
    <a href="#%e9%83%a8%e7%bd%b2" class="header-mark"></a>部署</h2><p>腾讯微服务平台（TSF）- 注册配置治理 - Polaris（北极星）用于解决分布式或者微服务架构中的服务注册与发现、故障容错、流量控制和安全问题，提供快速部署、高可用容灾、免运维、一键搭建北极星网格能力。
﻿Polaris（中文名北极星，以下简称北极星）是腾讯开源的服务发现和治理中心。北极星在腾讯内部的服务注册数量超过百万，日接口调用量超过十万亿，通用性和稳定性都得到了大规模的验证。</p>]]></description></item><item><title>安德斯·海尔斯伯格（Anders Hejlsberg</title><link>https://rd163.visword.com/posts/anders-hejlsberg/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/anders-hejlsberg/</guid><description><![CDATA[<h1 id="安德斯海尔斯伯格anders-hejlsberg-编程领域的传奇ctypescript之父全世界最顶尖的程序员之一" class="headerLink">
    <a href="#%e5%ae%89%e5%be%b7%e6%96%af%e6%b5%b7%e5%b0%94%e6%96%af%e4%bc%af%e6%a0%bcanders-hejlsberg-%e7%bc%96%e7%a8%8b%e9%a2%86%e5%9f%9f%e7%9a%84%e4%bc%a0%e5%a5%87ctypescript%e4%b9%8b%e7%88%b6%e5%85%a8%e4%b8%96%e7%95%8c%e6%9c%80%e9%a1%b6%e5%b0%96%e7%9a%84%e7%a8%8b%e5%ba%8f%e5%91%98%e4%b9%8b%e4%b8%80" class="header-mark"></a>安德斯·海尔斯伯格（Anders Hejlsberg）-编程领域的传奇！C#、TypeScript之父！全世界最顶尖的程序员之一</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://cloud.tencent.com/developer/article/1751937" target="_blank" rel="noopener noreferrer">编程领域的传奇！C#、TypeScript之父！全世界最顶尖的程序员之一。</a></li>
</ul>]]></description></item><item><title>Zig 语言简介</title><link>https://rd163.visword.com/posts/zig-lang-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/zig-lang-intro/</guid><description><![CDATA[<h1 id="zig-语言简介" class="headerLink">
    <a href="#zig-%e8%af%ad%e8%a8%80%e7%ae%80%e4%bb%8b" class="header-mark"></a>Zig 语言简介</h1><p>根据其官网所述：</p>
<p><a href="https://github.com/ziglang/zig" target="_blank" rel="noopener noreferrer">Zig</a> 是一种通用的编程语言和工具链，用于维护健壮、最优和可重用的软件</p>
<p>这样的概念解释可能比较模糊，我们来看看维基百科怎么说的：</p>]]></description></item><item><title>x86 汇编语言</title><link>https://rd163.visword.com/posts/x86-asm/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/x86-asm/</guid><description><![CDATA[<h1 id="x86-汇编语言" class="headerLink">
    <a href="#x86-%e6%b1%87%e7%bc%96%e8%af%ad%e8%a8%80" class="header-mark"></a>x86 汇编语言</h1><p>这里提供了各种十六进制机器操作码</p>
<p><a href="http://ref.x86asm.net/coder64.html#xCB" target="_blank" rel="noopener noreferrer">X86 Opcode and Instruction Reference Home</a></p>
<p>这里提供了在线工具进行汇编或者反汇编</p>
<p><a href="https://defuse.ca/online-x86-assembler.htm" target="_blank" rel="noopener noreferrer">Online x86 / x64 Assembler and Disassembler</a></p>
<h2 id="常用机器码指令" class="headerLink">
    <a href="#%e5%b8%b8%e7%94%a8%e6%9c%ba%e5%99%a8%e7%a0%81%e6%8c%87%e4%bb%a4" class="header-mark"></a>常用机器码指令</h2><ul>
<li>0xffe0   jmp rax</li>
</ul>
<h2 id="反汇编" class="headerLink">
    <a href="#%e5%8f%8d%e6%b1%87%e7%bc%96" class="header-mark"></a>反汇编</h2><p>objdump反汇编常用参数</p>
<ul>
<li>objdump -d &lt;file(s)&gt;: 将代码段反汇编；</li>
<li>objdump -S &lt;file(s)&gt;: 将代码段反汇编的同时，将反汇编代码与源代码交替显示，编译时需要使用-g参数，即需要调试信息，不需要再包含-d；</li>
<li>objdump -C &lt;file(s)&gt;: 将C++符号名逆向解析</li>
<li>objdump -l &lt;file(s)&gt;: 反汇编代码中插入文件名和行号</li>
<li>objdump -j section -S &lt;file(s)&gt;: 仅反汇编指定的section</li>
</ul>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2>]]></description></item><item><title>wordpress 安装配置实践</title><link>https://rd163.visword.com/posts/wordpress-setup/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/wordpress-setup/</guid><description><![CDATA[<h1 id="wordpress-安装配置实践" class="headerLink">
    <a href="#wordpress-%e5%ae%89%e8%a3%85%e9%85%8d%e7%bd%ae%e5%ae%9e%e8%b7%b5" class="header-mark"></a>wordpress 安装配置实践</h1><p>有如下几种安装方式：</p>
<h2 id="基于-docker-compose-方式" class="headerLink">
    <a href="#%e5%9f%ba%e4%ba%8e-docker-compose-%e6%96%b9%e5%bc%8f" class="header-mark"></a>基于 docker-compose 方式</h2><p>如果在本地测试查看效果，可采用 docker-compose 方式启动， 参考</p>
<ul>
<li><a href="https://github.com/nezhar/wordpress-docker-compose" target="_blank" rel="noopener noreferrer">wordpress-docker-compose</a></li>
</ul>
<h2 id="基于-docker-方式" class="headerLink">
    <a href="#%e5%9f%ba%e4%ba%8e-docker-%e6%96%b9%e5%bc%8f" class="header-mark"></a>基于 docker 方式</h2><p>如果 已有 MySQL 服务的情况下， 可采用docker方式：</p>]]></description></item><item><title>Webpack 教程</title><link>https://rd163.visword.com/posts/webpack/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/webpack/</guid><description><![CDATA[<h1 id="webpack-教程" class="headerLink">
    <a href="#webpack-%e6%95%99%e7%a8%8b" class="header-mark"></a>Webpack 教程</h1><p>关于Webpack 的教程，最有名的莫过于 阮一峰在github上关于 Webpack 示例集合了。仓库为：</p>
<ul>
<li><a href="https://github.com/ruanyf/webpack-demos" target="_blank" rel="noopener noreferrer">webpack-demos</a></li>
</ul>
<p>为全英文版本， 也有人将这个翻译成了中文版本：</p>
<ul>
<li><a href="https://github.com/userkang/webpack-demos-cn" target="_blank" rel="noopener noreferrer">webpack-demos-cn</a></li>
</ul>
<p>同时，在csdn 博客园、掘金上也有大量对改仓库的介绍。如 博客园上：</p>]]></description></item><item><title>Web 前端框架</title><link>https://rd163.visword.com/posts/web-framework/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/web-framework/</guid><description><![CDATA[<h1 id="web-前端框架" class="headerLink">
    <a href="#web-%e5%89%8d%e7%ab%af%e6%a1%86%e6%9e%b6" class="header-mark"></a>Web 前端框架</h1><ul>
<li><a href="" rel="">nextjs</a></li>
<li>[vite]</li>
<li>[vue]</li>
<li><a href="https://github.com/alibaba/ice" target="_blank" rel="noopener noreferrer">ice</a>  The Progressive App Framework Based On React（基于 React 的渐进式应用框架）</li>
</ul>]]></description></item><item><title>wagtail 介绍</title><link>https://rd163.visword.com/posts/wagtail-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/wagtail-intro/</guid><description><![CDATA[<h1 id="wagtail-介绍" class="headerLink">
    <a href="#wagtail-%e4%bb%8b%e7%bb%8d" class="header-mark"></a>wagtail 介绍</h1><p>基于 Python 知名 Web 框架 Django 实现的无头内容管理系统，拥有清爽的 UI 和简洁易用的编辑器。独特的 StreamField 技术，可以让内容排版灵活又不失结构，再加上强大的多语言系统，让它在众多开源 CMS 中脱颖而出。</p>]]></description></item><item><title>VuePress 使用指南</title><link>https://rd163.visword.com/posts/vuepress-getting-started/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/vuepress-getting-started/</guid><description><![CDATA[<h1 id="vuepress-使用指南" class="headerLink">
    <a href="#vuepress-%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97" class="header-mark"></a>VuePress 使用指南</h1><p>本文档基于 <a href="https://vuepress.vuejs.org/zh/" target="_blank" rel="noopener noreferrer">VuePress 文档</a> 总结而成。</p>
<h2 id="介绍" class="headerLink">
    <a href="#%e4%bb%8b%e7%bb%8d" class="header-mark"></a>介绍</h2><p>VuePress 是一个以 Markdown 为中心的静态网站生成器。你可以使用 Markdown 来书写内容（如文档、博客等），然后 VuePress 会帮助你生成一个静态网站来展示它们。</p>]]></description></item><item><title>VUE</title><link>https://rd163.visword.com/posts/vuejs/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/vuejs/</guid><description><![CDATA[<h1 id="vue" class="headerLink">
    <a href="#vue" class="header-mark"></a>VUE</h1><ul>
<li><a href="https://cn.vuejs.org/" target="_blank" rel="noopener noreferrer">VUE 官方文档</a></li>
<li><a href="https://cn.vuejs.org/guide/essentials/template-syntax.html" target="_blank" rel="noopener noreferrer">VUE 模板语法</a></li>
<li><a href="https://play.vuejs.org/" target="_blank" rel="noopener noreferrer">Vue Playground</a></li>
</ul>]]></description></item><item><title>vLLM</title><link>https://rd163.visword.com/posts/vllm/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/vllm/</guid><description><![CDATA[<h1 id="vllm" class="headerLink">
    <a href="#vllm" class="header-mark"></a>vLLM</h1><p>vLLM 是一个快速且易于使用的库，用于 LLM 推理和服务，和 HuggingFace 无缝集成。区别于 chatglm.cpp 和 llama.cpp，仅是在 GPU 上的模型推理加速，没有 CPU 上的加速。</p>
<p>在吞吐量方面，vLLM 的性能比 HuggingFace Transformers  （HF） 高出 24 倍，文本生成推理 （TGI） 高出 3.5 倍。</p>]]></description></item><item><title>Vite 学习</title><link>https://rd163.visword.com/posts/get-started-with-vite/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/get-started-with-vite/</guid><description><![CDATA[<h1 id="vite-学习" class="headerLink">
    <a href="#vite-%e5%ad%a6%e4%b9%a0" class="header-mark"></a>Vite 学习</h1><p>Next generation frontend tooling. It&rsquo;s fast!</p>
<ul>
<li><a href="https://github.com/vitejs/vite" target="_blank" rel="noopener noreferrer">vite github</a></li>
</ul>
<h2 id="why" class="headerLink">
    <a href="#why" class="header-mark"></a>Why</h2><ul>
<li>Vite 通过在一开始将应用中的模块区分为 依赖 和 源码 两类，改进了开发服务器启动时间。</li>
<li>在 Vite 中，HMR 是在原生 ESM 上执行的。当编辑一个文件时，Vite 只需要精确地使已编辑的模块与其最近的 HMR 边界之间的链失活[1]（大多数时候只是模块本身），使得无论应用大小如何，HMR 始终能保持快速更新。</li>
</ul>
<h2 id="开始" class="headerLink">
    <a href="#%e5%bc%80%e5%a7%8b" class="header-mark"></a>开始</h2><p>安装</p>]]></description></item><item><title>Typst</title><link>https://rd163.visword.com/posts/rust-typst/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/rust-typst/</guid><description><![CDATA[<h1 id="typst" class="headerLink">
    <a href="#typst" class="header-mark"></a>Typst</h1><p>Typst 是一款专门为排版而生的新生代工具。它完全摒弃了现有系统的约束，着眼于现代化的功能与设计，成功地克服了传统方案上的一些不足之处。</p>
<p>在使用流程上，Typst 和 Latex 的实际使用流程非常相似，总结起来可以用三个步骤概括：</p>]]></description></item><item><title>tproxy（透明代理）</title><link>https://rd163.visword.com/posts/tproxy/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/tproxy/</guid><description><![CDATA[<h1 id="tproxy透明代理" class="headerLink">
    <a href="#tproxy%e9%80%8f%e6%98%8e%e4%bb%a3%e7%90%86" class="header-mark"></a>tproxy（透明代理）</h1><h2 id="什么是透明代理" class="headerLink">
    <a href="#%e4%bb%80%e4%b9%88%e6%98%af%e9%80%8f%e6%98%8e%e4%bb%a3%e7%90%86" class="header-mark"></a>什么是透明代理</h2><p><a href="https://github.com/KatelynHaworth/go-tproxy" target="_blank" rel="noopener noreferrer">tproxy</a> 即 transparent（透明） proxy。这里的 transparent（透明）有两层含义：</p>
<ul>
<li>代理对于 client 是透明的，client 端无需进行任何配置。即无需修改请求地址，也无需采用代理协议和代理服务器进行协商。与之相对比的是 socks 代理或者 http 代理，需要在 client 端设置代理的地址，在发起请求时也需要通过代理协议告知代理服务器其需要访问的真实地址。</li>
<li>代理对于 server 是透明的，server 端看到的是 client 端的地址，而不是 proxy 的地址。</li>
</ul>
<p>github上有个叫 <a href="https://github.com/kevwan/tproxy" target="_blank" rel="noopener noreferrer">tproxy</a> 的项目，但其实实现的并不是透明代理， 而是 用来做 tcp 连接分析的。</p>]]></description></item><item><title>Tmux</title><link>https://rd163.visword.com/posts/tmux/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/tmux/</guid><description><![CDATA[<h1 id="tmux" class="headerLink">
    <a href="#tmux" class="header-mark"></a>Tmux</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://www.cnblogs.com/bamanzi/archive/2012/08/17/mouse-wheel-in-tmux-screen.html" target="_blank" rel="noopener noreferrer">tmux里面用鼠标滚轮来卷动窗口内容</a></li>
<li><a href="https://www.ruanyifeng.com/blog/2019/10/tmux.html" target="_blank" rel="noopener noreferrer">Tmux 使用教程</a></li>
</ul>]]></description></item><item><title>Strapi 介绍</title><link>https://rd163.visword.com/posts/strapi-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/strapi-intro/</guid><description><![CDATA[<h1 id="strapi-介绍" class="headerLink">
    <a href="#strapi-%e4%bb%8b%e7%bb%8d" class="header-mark"></a>Strapi 介绍</h1><p>Strapi 是一个开源的 Headless CMS（无头内容管理系统）。它允许开发者通过自定义的方式快速构建、管理和分发内容。Strapi 提供了一个强大的后端 API，支持 RESTful 和 GraphQL 两种方式，使得开发者可以方便地将内容分发到任何设备或服务，无论是网站、移动应用还是 IoT 设备。</p>]]></description></item><item><title>SEO-向谷歌提交网站</title><link>https://rd163.visword.com/posts/submit-website-to-google/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/submit-website-to-google/</guid><description><![CDATA[<h2 id="谷歌是如何找到并索引你的内容的" class="headerLink">
    <a href="#%e8%b0%b7%e6%ad%8c%e6%98%af%e5%a6%82%e4%bd%95%e6%89%be%e5%88%b0%e5%b9%b6%e7%b4%a2%e5%bc%95%e4%bd%a0%e7%9a%84%e5%86%85%e5%ae%b9%e7%9a%84" class="header-mark"></a>谷歌是如何找到并索引你的内容的？</h2><p>Google 自己出了一集视频叫 <a href="https://www.youtube.com/watch?v=BNHR6IQJGZs" target="_blank" rel="noopener noreferrer">《How Search Works》</a></p>
<p>谷歌会通过4个主要的方法来查找并索引你的内容</p>
<p>小提示. 由于谷歌内部算法复杂，因此下面的流程在一定程度上做了简化。</p>]]></description></item><item><title>Rust 实现的应用有哪些？</title><link>https://rd163.visword.com/posts/rust-apps/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/rust-apps/</guid><description><![CDATA[<h1 id="rust-实现的应用有哪些" class="headerLink">
    <a href="#rust-%e5%ae%9e%e7%8e%b0%e7%9a%84%e5%ba%94%e7%94%a8%e6%9c%89%e5%93%aa%e4%ba%9b" class="header-mark"></a>Rust 实现的应用有哪些？</h1><h2 id="web-类" class="headerLink">
    <a href="#web-%e7%b1%bb" class="header-mark"></a>Web 类</h2><ul>
<li><a href="../web/web-app-with-rust.md" rel="">web-app-with-rust</a></li>
</ul>
<h2 id="编辑器" class="headerLink">
    <a href="#%e7%bc%96%e8%be%91%e5%99%a8" class="header-mark"></a>编辑器</h2><ul>
<li><a href="https://github.com/zed-industries/zed" target="_blank" rel="noopener noreferrer">zed</a></li>
<li><a href="https://github.com/lapce/lapce" target="_blank" rel="noopener noreferrer">Lapce</a> Lightning-fast and Powerful Code Editor written in Rust</li>
<li><a href="https://github.com/typst/typst" target="_blank" rel="noopener noreferrer">Typst</a> A new markup-based typesetting system that is powerful and easy to learn.</li>
</ul>
<h2 id="在线图像编辑" class="headerLink">
    <a href="#%e5%9c%a8%e7%ba%bf%e5%9b%be%e5%83%8f%e7%bc%96%e8%be%91" class="header-mark"></a>在线图像编辑</h2><ul>
<li><a href="https://github.com/GraphiteEditor/Graphite" target="_blank" rel="noopener noreferrer">Graphite</a> 一款在线版的图像编辑器，代码开源。</li>
</ul>
<h2 id="js编译打包" class="headerLink">
    <a href="#js%e7%bc%96%e8%af%91%e6%89%93%e5%8c%85" class="header-mark"></a>js编译打包</h2><ul>
<li><a href="../web/get-started-with-vite.md" rel="">get-started-with-vite.md</a></li>
</ul>]]></description></item><item><title>Rust 实现的命令行工具</title><link>https://rd163.visword.com/posts/cmd-by-rust/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cmd-by-rust/</guid><description><![CDATA[<h1 id="rust-实现的命令行工具" class="headerLink">
    <a href="#rust-%e5%ae%9e%e7%8e%b0%e7%9a%84%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7" class="header-mark"></a>Rust 实现的命令行工具</h1><ul>
<li><a href="https://github.com/hanshuaikang/Nping" target="_blank" rel="noopener noreferrer">Nping</a> Rust 语言开发的 Ping 工具，支持多个地址并发 Ping，并附带实时折线图展示。</li>
</ul>]]></description></item><item><title>Reids 数据类型</title><link>https://rd163.visword.com/posts/redis-data-type/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/redis-data-type/</guid><description><![CDATA[<h1 id="reids-数据类型" class="headerLink">
    <a href="#reids-%e6%95%b0%e6%8d%ae%e7%b1%bb%e5%9e%8b" class="header-mark"></a>Reids 数据类型</h1><p>Redis 主要支持以下几种数据类型：</p>
<ul>
<li>string（字符串）: 基本的数据存储单元，可以存储字符串、整数或者浮点数。</li>
<li>hash（哈希）:一个键值对集合，可以存储多个字段。</li>
<li>list（列表）:一个简单的列表，可以存储一系列的字符串元素。</li>
<li>set（集合）:一个无序集合，可以存储不重复的字符串元素。</li>
<li>zset(sorted set：有序集合): 类似于集合，但是每个元素都有一个分数（score）与之关联。</li>
<li>位图（Bitmaps）：基于字符串类型，可以对每个位进行操作。</li>
<li>超日志（HyperLogLogs）：用于基数统计，可以估算集合中的唯一元素数量。</li>
<li>地理空间（Geospatial）：用于存储地理位置信息。</li>
<li>发布/订阅（Pub/Sub）：一种消息通信模式，允许客户端订阅消息通道，并接收发布到该通道的消息。</li>
<li>流（Streams）：用于消息队列和日志存储，支持消息的持久化和时间排序。</li>
<li>模块（Modules）：Redis 支持动态加载模块，可以扩展 Redis 的功能。</li>
</ul>
<h2 id="zsetsorted-set有序集合" class="headerLink">
    <a href="#zsetsorted-set%e6%9c%89%e5%ba%8f%e9%9b%86%e5%90%88" class="header-mark"></a>zset(sorted set：有序集合)</h2><p>Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。</p>]]></description></item><item><title>Python 与 bash 脚本共享配置文件的最佳实践</title><link>https://rd163.visword.com/posts/python-bash-share-conf/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-bash-share-conf/</guid><description><![CDATA[<h1 id="python-与-bash-脚本共享配置文件的最佳实践" class="headerLink">
    <a href="#python-%e4%b8%8e-bash-%e8%84%9a%e6%9c%ac%e5%85%b1%e4%ba%ab%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e7%9a%84%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" class="header-mark"></a>Python 与 bash 脚本共享配置文件的最佳实践</h1><p>同一个工程的代码中可能会同时包含 python 代码和 bash 脚本， 不可避免的会用到配置文件。一些场景下，这两种语言需要共享相同的配置。 怎么实现呢？ 有两种方案：</p>]]></description></item><item><title>Python 可视化调试</title><link>https://rd163.visword.com/posts/python-visual-debug/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-visual-debug/</guid><description><![CDATA[<h1 id="python-可视化调试" class="headerLink">
    <a href="#python-%e5%8f%af%e8%a7%86%e5%8c%96%e8%b0%83%e8%af%95" class="header-mark"></a>Python 可视化调试</h1><h2 id="方法1-vscode" class="headerLink">
    <a href="#%e6%96%b9%e6%b3%951-vscode" class="header-mark"></a>方法1： VsCode</h2><h2 id="方法2-pycharm" class="headerLink">
    <a href="#%e6%96%b9%e6%b3%952-pycharm" class="header-mark"></a>方法2： PyCharm</h2><h2 id="方法3-viztracer" class="headerLink">
    <a href="#%e6%96%b9%e6%b3%953-viztracer" class="header-mark"></a>方法3： VizTracer</h2><ul>
<li><a href="https://github.com/gaogaotiantian/viztracer" target="_blank" rel="noopener noreferrer">VizTracer</a> A debugging and profiling tool that can trace and visualize python code execution</li>
</ul>]]></description></item><item><title>Python 的 dataclass</title><link>https://rd163.visword.com/posts/python-dataclass/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-dataclass/</guid><description><![CDATA[<h1 id="python-的-dataclass" class="headerLink">
    <a href="#python-%e7%9a%84-dataclass" class="header-mark"></a>Python 的 dataclass</h1><p>dataclass是从Python3.7版本开始，作为标准库中的模块被引入。Python 3.6 版本可通过手动安装 <code>python3.6 -m pip install dataclasses </code>.</p>]]></description></item><item><title>Python Web 框架</title><link>https://rd163.visword.com/posts/python-web-framework/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-web-framework/</guid><description><![CDATA[<h1 id="python-web-框架" class="headerLink">
    <a href="#python-web-%e6%a1%86%e6%9e%b6" class="header-mark"></a>Python Web 框架</h1><h2 id="django" class="headerLink">
    <a href="#django" class="header-mark"></a>django</h2><h2 id="fastapi" class="headerLink">
    <a href="#fastapi" class="header-mark"></a>FastAPI</h2><p><strong>路由</strong></p>
<ul>
<li><a href="https://fastapi.tiangolo.com/zh/tutorial/path-params/" target="_blank" rel="noopener noreferrer">路径参数 定义一般路由</a></li>
<li><a href="https://fastapi.tiangolo.com/zh/reference/apirouter/" target="_blank" rel="noopener noreferrer">对路由分组</a></li>
</ul>
<p><strong>OpenAPI 文档相关</strong></p>
<ul>
<li><a href="https://fastapi.tiangolo.com/zh/tutorial/body-fields/" target="_blank" rel="noopener noreferrer">请求体 - 字段</a></li>
<li><a href="https://fastapi.tiangolo.com/zh/tutorial/metadata/" target="_blank" rel="noopener noreferrer">元数据和文档 URL</a></li>
<li><a href="https://docs.pydantic.dev/latest/api/fields/" target="_blank" rel="noopener noreferrer">BaseModel 字段约束的Field定义</a></li>
</ul>
<p><strong>中间件</strong></p>]]></description></item><item><title>Python embeddable 版本安装过程记录</title><link>https://rd163.visword.com/posts/python-embeddable-install/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-embeddable-install/</guid><description><![CDATA[<h1 id="python-embeddable-版本安装过程记录" class="headerLink">
    <a href="#python-embeddable-%e7%89%88%e6%9c%ac%e5%ae%89%e8%a3%85%e8%bf%87%e7%a8%8b%e8%ae%b0%e5%bd%95" class="header-mark"></a>Python embeddable 版本安装过程记录</h1><ul>
<li>操作系统： Win11</li>
<li>Python版本： Python 3.10</li>
</ul>
<h2 id="step-1-安装python310" class="headerLink">
    <a href="#step-1-%e5%ae%89%e8%a3%85python310" class="header-mark"></a>Step 1: 安装Python3.10</h2><p>从下载列表 <a href="https://www.python.org/downloads/release/python-3100/" target="_blank" rel="noopener noreferrer">Python3.10</a> 可以看出，Installer版本的安装文件大小比Embeddable版本大很多。</p>]]></description></item><item><title>ptrace 学习笔记</title><link>https://rd163.visword.com/posts/linux-ptrace-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-ptrace-intro/</guid><description><![CDATA[<h1 id="ptrace-学习笔记" class="headerLink">
    <a href="#ptrace-%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0" class="header-mark"></a>ptrace 学习笔记</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://omasko.github.io/2018/04/19/ptrace%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0I/" target="_blank" rel="noopener noreferrer">ptrace学习笔记I</a></li>
<li><a href="https://www.cnblogs.com/mysky007/p/11047943.html" target="_blank" rel="noopener noreferrer">ptrace理解 </a></li>
<li><a href="https://www.codeleading.com/article/1771725337/" target="_blank" rel="noopener noreferrer">ptrace 跟踪多线程程序</a></li>
</ul>]]></description></item><item><title>php-with-golang</title><link>https://rd163.visword.com/posts/php-with-golang/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/php-with-golang/</guid><description><![CDATA[<h1 id="php-with-golang" class="headerLink">
    <a href="#php-with-golang" class="header-mark"></a>php-with-golang</h1><p>参考</p>
<ul>
<li><a href="https://github.com/roadrunner-server/roadrunner" target="_blank" rel="noopener noreferrer">RoadRunner </a> High-performance PHP application server, process manager written in Go and powered with plugins</li>
</ul>]]></description></item><item><title>Php + Nginx 部署</title><link>https://rd163.visword.com/posts/php-nginx-deploy/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/php-nginx-deploy/</guid><description><![CDATA[<h1 id="php--nginx-部署" class="headerLink">
    <a href="#php--nginx-%e9%83%a8%e7%bd%b2" class="header-mark"></a>Php + Nginx 部署</h1><p>这里介绍三种部署模式：</p>
<h2 id="1-常规部署" class="headerLink">
    <a href="#1-%e5%b8%b8%e8%a7%84%e9%83%a8%e7%bd%b2" class="header-mark"></a>1. 常规部署</h2><p>参考 <a href="php-nginx.md" rel="">php-nginx</a></p>
<h2 id="2-dockerfile-单镜像部署" class="headerLink">
    <a href="#2-dockerfile-%e5%8d%95%e9%95%9c%e5%83%8f%e9%83%a8%e7%bd%b2" class="header-mark"></a>2. Dockerfile 单镜像部署</h2><ul>
<li>
<p><a href="https://github.com/TrafeX/docker-php-nginx" target="_blank" rel="noopener noreferrer">Docker PHP-FPM 8.3 &amp; Nginx 1.26 on Alpine Linux</a> supervisord 【1.x版本支持PHP7.4 2.0开始升级到PHP8】</p>
</li>
<li>
<p><a href="https://github.com/richarvey/nginx-php-fpm" target="_blank" rel="noopener noreferrer">Docker PHP-FPM 8.2.7 &amp; Nginx </a> supervisord + letsencrypt证书生成</p>]]></description></item><item><title>Perl 语言学习</title><link>https://rd163.visword.com/posts/perl-study/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/perl-study/</guid><description><![CDATA[<h1 id="perl-语言学习" class="headerLink">
    <a href="#perl-%e8%af%ad%e8%a8%80%e5%ad%a6%e4%b9%a0" class="header-mark"></a>Perl 语言学习</h1><h2 id="perl-背景" class="headerLink">
    <a href="#perl-%e8%83%8c%e6%99%af" class="header-mark"></a><a href="https://github.com/Perl/perl5" target="_blank" rel="noopener noreferrer">Perl</a> 背景</h2><p>Perl全称为&quot;Practical Extraction and Reporting Language&quot;，意为实用提取和报告语言。</p>
<p>Perl由Larry Wall在1987年创建，其灵感来自于C、sed、awk、shell脚本以及许多其他编程语言的特性。</p>]]></description></item><item><title>Open Graph Protocol（开放图谱协议）</title><link>https://rd163.visword.com/posts/open-graph-protocol/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/open-graph-protocol/</guid><description><![CDATA[<h1 id="open-graph-protocol开放图谱协议" class="headerLink">
    <a href="#open-graph-protocol%e5%bc%80%e6%94%be%e5%9b%be%e8%b0%b1%e5%8d%8f%e8%ae%ae" class="header-mark"></a>Open Graph Protocol（开放图谱协议）</h1><p>Open Graph Protocol（开放图谱协议），简称 OG 协议。它是 Facebook 在 2010 年 F8 开发者大会公布的一种网页元信息（Meta Information）标记协议，属于 Meta Tag （Meta 标签）的范畴，是一种为社交分享而生的 Meta 标签，用于标准化网页中元数据的使用，使得社交媒体得以以丰富的“图形”对象来表示共享的页面内容。它允许在 Facebook 上，其他网站能像 Facebook 内容一样具有丰富的“图形”对象，进而促进 Facebook 和其他网站之间的集成。</p>]]></description></item><item><title>Ollama-WebUI</title><link>https://rd163.visword.com/posts/ollama-webui/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ollama-webui/</guid><description><![CDATA[<h1 id="ollama-webui" class="headerLink">
    <a href="#ollama-webui" class="header-mark"></a>Ollama-WebUI</h1><p><a href="https://github.com/ollama/ollama" target="_blank" rel="noopener noreferrer">ollama</a></p>
<ul>
<li>
<p><a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener noreferrer">ollama-ui</a> 纯html实现</p>
</li>
<li>
<p><a href="https://github.com/swuecho/chat" target="_blank" rel="noopener noreferrer">chat</a></p>
</li>
<li>
<p><a href="https://github.com/drazdra/ollama-chats" target="_blank" rel="noopener noreferrer">ollama-chats</a></p>
</li>
<li>
<p><a href="https://github.com/Mintplex-Labs/anything-llm" target="_blank" rel="noopener noreferrer">anything-llm</a></p>
</li>
<li>
<p><a href="https://github.com/Bin-Huang/Chatbox" target="_blank" rel="noopener noreferrer">Chatbox</a></p>
</li>
</ul>]]></description></item><item><title>Nginx+PHP-FPM 部署</title><link>https://rd163.visword.com/posts/php-nginx/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/php-nginx/</guid><description><![CDATA[<h1 id="nginxphp-fpm-部署" class="headerLink">
    <a href="#nginxphp-fpm-%e9%83%a8%e7%bd%b2" class="header-mark"></a>Nginx+PHP-FPM 部署</h1><p>PHP-FPM 自 PHP 5.3.3 版本之后已经集成在 php 核心代码中了。</p>
<p>代码路径：<code>https://github.com/php/php-src/blob/master/sapi/fpm/fpm/fpm_main.c</code></p>]]></description></item><item><title>Nginx 内存池机制</title><link>https://rd163.visword.com/posts/nginx-mem-pool/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/nginx-mem-pool/</guid><description><![CDATA[<h1 id="nginx-内存池机制" class="headerLink">
    <a href="#nginx-%e5%86%85%e5%ad%98%e6%b1%a0%e6%9c%ba%e5%88%b6" class="header-mark"></a>Nginx 内存池机制</h1><p>nginx 的内存池设计得非常精妙，它在满足小块内存申请的同时，也处理大块内存的申请请求，同时还允许挂载自己的数据区域及对应的数据清楚操作。</p>]]></description></item><item><title>Make 的替代品</title><link>https://rd163.visword.com/posts/make-alternative/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/make-alternative/</guid><description><![CDATA[<h1 id="make-的替代品" class="headerLink">
    <a href="#make-%e7%9a%84%e6%9b%bf%e4%bb%a3%e5%93%81" class="header-mark"></a>Make 的替代品</h1><p><a href="https://github.com/go-task/task" target="_blank" rel="noopener noreferrer">task</a> 是Go语言实现的Make工具的替代品， 相比后者，没有任何依赖。</p>
<p>使用task的项目有：</p>
<ul>
<li><a href="https://github.com/gogs/gogs" target="_blank" rel="noopener noreferrer">gogs</a></li>
</ul>]]></description></item><item><title>Mac 重装系统</title><link>https://rd163.visword.com/posts/mac-system-reinstall/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/mac-system-reinstall/</guid><description><![CDATA[<h1 id="mac-重装系统" class="headerLink">
    <a href="#mac-%e9%87%8d%e8%a3%85%e7%b3%bb%e7%bb%9f" class="header-mark"></a>Mac 重装系统</h1><p>电脑关机状态下，键盘长按command+R键不放，同时按一下开机键松手，此时继续长按command+R键不放。等待出现苹果图标后松手。</p>]]></description></item><item><title>Linux 中的虚拟网络接口</title><link>https://rd163.visword.com/posts/linux-virtual-network-interfaces/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-virtual-network-interfaces/</guid><description><![CDATA[<h1 id="linux-中的虚拟网络接口" class="headerLink">
    <a href="#linux-%e4%b8%ad%e7%9a%84%e8%99%9a%e6%8b%9f%e7%bd%91%e7%bb%9c%e6%8e%a5%e5%8f%a3" class="header-mark"></a>Linux 中的虚拟网络接口</h1><h2 id="tuntap" class="headerLink">
    <a href="#tuntap" class="header-mark"></a>tun/tap</h2><ul>
<li>对应 char 设备 <code>/dev/net/tun</code>，</li>
<li>操作系统内核中的虚拟网络设备，用户层程序提供数据的接收与传输。</li>
<li>普通的物理网络接口如 eth0，它的两端分别是内核协议栈和外面的物理网络。而对于 TUN/TAP 虚拟接口如 tun0，它的一端一定是连接的用户层程序，另一端则视配置方式的不同而变化，可以直连内核协议栈，也可以是某个 bridge。</li>
<li>TUN 和 TAP 的区别在于工作的网络层次不同，用户程序通过 TUN 设备只能读写网络层的 IP 数据包， 而 TAP 设备则支持读写链路层的数据包（通常是以太网数据包，带有 Ethernet headers）。</li>
<li>TUN 与 TAP 的关系，就类似于 socket 和 raw socket.</li>
<li>TUN/TAP 应用最多的场景是 VPN 代理，比如:clash、tun2socks。</li>
</ul>
<h2 id="ipip" class="headerLink">
    <a href="#ipip" class="header-mark"></a>ipip</h2><p>即 IPv4 in IPv4，在 IPv4 报文的基础上再封装一个 IPv4 报文。</p>]]></description></item><item><title>Linux 中C/C++代码通过函数名称字符串发起调用</title><link>https://rd163.visword.com/posts/linux-get-func-addr-by-name/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-get-func-addr-by-name/</guid><description><![CDATA[<h1 id="linux-中cc代码通过函数名称字符串发起调用" class="headerLink">
    <a href="#linux-%e4%b8%adcc%e4%bb%a3%e7%a0%81%e9%80%9a%e8%bf%87%e5%87%bd%e6%95%b0%e5%90%8d%e7%a7%b0%e5%ad%97%e7%ac%a6%e4%b8%b2%e5%8f%91%e8%b5%b7%e8%b0%83%e7%94%a8" class="header-mark"></a>Linux 中C/C++代码通过函数名称字符串发起调用</h1><p>分两种情况：</p>
<h2 id="1-函数实现在so-中" class="headerLink">
    <a href="#1-%e5%87%bd%e6%95%b0%e5%ae%9e%e7%8e%b0%e5%9c%a8so-%e4%b8%ad" class="header-mark"></a>1. 函数实现在so 中</h2><div class="code-block highlight is-closed show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-7" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">  // 打开动态链接库
</span></span><span class="line"><span class="cl">    void* handle = dlopen(&#34;demo.so&#34;, RTLD_LAZY);
</span></span><span class="line"><span class="cl">    if (!handle) {
</span></span><span class="line"><span class="cl">        fprintf(stderr, &#34;无法打开动态链接库: %s\n&#34;, dlerror());
</span></span><span class="line"><span class="cl">        return ;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    // 获取函数地址
</span></span><span class="line"><span class="cl">    void (*myFunction)() = dlsym(handle, &#34;__gcov_dump&#34;);
</span></span><span class="line"><span class="cl">    if (!myFunction) {
</span></span><span class="line"><span class="cl">        fprintf(stderr, &#34;无法获取函数地址: %s\n&#34;, dlerror());
</span></span><span class="line"><span class="cl">        dlclose(handle);
</span></span><span class="line"><span class="cl">        return ;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">    fprintf(stderr, &#34;gcov_dump addr:%p\n&#34;, myFunction);
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    // 调用函数
</span></span><span class="line"><span class="cl">    myFunction();
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    // 关闭动态链接库
</span></span><span class="line"><span class="cl">    dlclose(handle);</span></span></code></pre>
</div>
<h2 id="2-函数实现在主模块中" class="headerLink">
    <a href="#2-%e5%87%bd%e6%95%b0%e5%ae%9e%e7%8e%b0%e5%9c%a8%e4%b8%bb%e6%a8%a1%e5%9d%97%e4%b8%ad" class="header-mark"></a>2. 函数实现在主模块中</h2><p>主模块（编译成 .out 的那个二进制模块）当中的符号，和普通的动态库 <code>.so</code>当中的不同。普通的动态库中的符号，只要没有<code>static</code> 限制为未局部的，都会成为导出符号，出现在 <code>.dynsym</code> 当中。但是，<strong>主模块呢，只有在其他模块，比如 <code>A .so</code>中使用和主模块中同名的符号（不论这个符号在<code>A.so</code> 还是 <code>B.so</code> 当中是否有定义）</strong>，主模块的符号才会成为导出符号，出现在 <code>.dynsym</code> 当中。</p>]]></description></item><item><title>Linux 网络命名空间</title><link>https://rd163.visword.com/posts/linux-net-namespace/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-net-namespace/</guid><description><![CDATA[<h1 id="linux-网络命名空间" class="headerLink">
    <a href="#linux-%e7%bd%91%e7%bb%9c%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4" class="header-mark"></a>Linux 网络命名空间</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://www.qikqiak.com/post/learn-linux-net-namespace/" target="_blank" rel="noopener noreferrer">网络命名空间</a></li>
<li><a href="https://cizixs.com/2017/02/10/network-virtualization-network-namespace/" target="_blank" rel="noopener noreferrer">linux 网络虚拟化： network namespace 简介</a></li>
<li><a href="https://asphaltt.github.io/post/linux-how-nsenter-works/" target="_blank" rel="noopener noreferrer">一文吃透 Linux nsenter</a></li>
</ul>]]></description></item><item><title>Linux 网络负载均衡</title><link>https://rd163.visword.com/posts/linux-net-lb/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-net-lb/</guid><description><![CDATA[<h1 id="linux-网络负载均衡" class="headerLink">
    <a href="#linux-%e7%bd%91%e7%bb%9c%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1" class="header-mark"></a>Linux 网络负载均衡</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://tonydeng.github.io/sdn-handbook/linux/loadbalance.html" target="_blank" rel="noopener noreferrer">负载均衡-lvs</a></li>
<li><a href="https://www.cnblogs.com/kevingrace/p/6137881.html" target="_blank" rel="noopener noreferrer">linux负载均衡总结性说明（四层负载/七层负载）</a></li>
<li><a href="https://cloud.tencent.com/developer/article/1644903" target="_blank" rel="noopener noreferrer">Linux 集群总结 + LVS（负载均衡器）原理及配置</a></li>
<li><a href="https://docs.qq.com/slide/DSHpBV1pmWEVvY05D" target="_blank" rel="noopener noreferrer">黑石5.0-网络架构设计</a></li>
</ul>]]></description></item><item><title>Linux 反弹Shell</title><link>https://rd163.visword.com/posts/linux-reverse-shell/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-reverse-shell/</guid><description><![CDATA[<h1 id="linux-反弹shell" class="headerLink">
    <a href="#linux-%e5%8f%8d%e5%bc%b9shell" class="header-mark"></a>Linux 反弹Shell</h1><h2 id="前言" class="headerLink">
    <a href="#%e5%89%8d%e8%a8%80" class="header-mark"></a>前言</h2><p>在渗透测试实战中，我们经常会遇到Linux系统环境，而让Linux主机反弹个shell是再常见不过的事情了。</p>
<p>反弹shell，就是攻击机监听在某个TCP/UDP端口为服务端，目标机主动发起请求到攻击机监听的端口，并将其命令行的输入输出转到攻击机。</p>]]></description></item><item><title>Linux LD_PRELOAD 技术介绍</title><link>https://rd163.visword.com/posts/linux-ld-preload/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-ld-preload/</guid><description><![CDATA[<h1 id="linux-ld_preload-技术介绍" class="headerLink">
    <a href="#linux-ld_preload-%e6%8a%80%e6%9c%af%e4%bb%8b%e7%bb%8d" class="header-mark"></a>Linux LD_PRELOAD 技术介绍</h1><h2 id="ld_preload介绍" class="headerLink">
    <a href="#ld_preload%e4%bb%8b%e7%bb%8d" class="header-mark"></a>LD_PRELOAD介绍</h2><p>LD_PRELOAD是Linux/Unix系统的一个环境变量，它可以影响程序的运行时的链接，它允许在程序运行前定义优先加载的动态链接库。通过这个环境变量，可以在主程序和其动态链接库的中间加载别的动态链接库，甚至覆盖系统的函数库。</p>
<p>具体来说， Linux操作系统的动态链接库在加载过程中，动态链接器会先读取LD_PRELOAD环境变量和默认配置文件/etc/ld.so.preload，并将读取到的动态链接库文件进行预加载。即使程序不依赖这些动态链接库，LD_PRELOAD环境变量和/etc/ld.so.preload配置文件中指定的动态链接库依然会被加载，因为它们的优先级比LD_LIBRARY_PATH环境变量所定义的链接库查找路径的文件优先级要高，所以能够提前于用户调用的动态库载入。</p>]]></description></item><item><title>Linux GRE 协议</title><link>https://rd163.visword.com/posts/linux-generic-routing-encapsulation/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linux-generic-routing-encapsulation/</guid><description><![CDATA[<h1 id="linux-gre-协议" class="headerLink">
    <a href="#linux-gre-%e5%8d%8f%e8%ae%ae" class="header-mark"></a>Linux GRE 协议</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://abcdxyzk.github.io/blog/2022/11/27/kernel-gre/" target="_blank" rel="noopener noreferrer">Linux内核之GRE处理分析</a></li>
<li><a href="https://www.cnblogs.com/weifeng1463/p/6806204.html" target="_blank" rel="noopener noreferrer">linux 下创建GRE隧道</a></li>
<li><a href="https://www.cnblogs.com/HByang/p/17351537.html" target="_blank" rel="noopener noreferrer">通用路由封装协议GRE</a></li>
<li><a href="https://www.cnblogs.com/xingyun/p/4620727.html" target="_blank" rel="noopener noreferrer">GRE与Vxlan网络详解</a></li>
</ul>]]></description></item><item><title>Linux cron 定时任务</title><link>https://rd163.visword.com/posts/crontab/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/crontab/</guid><description><![CDATA[<h1 id="linux-cron-定时任务" class="headerLink">
    <a href="#linux-cron-%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1" class="header-mark"></a>Linux cron 定时任务</h1><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-7" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">┌──────────── [optional] seconds (0 - 59)
</span></span><span class="line"><span class="cl">| ┌────────── minute (0 - 59)
</span></span><span class="line"><span class="cl">| | ┌──────── hour (0 - 23)
</span></span><span class="line"><span class="cl">| | | ┌────── day of month (1 - 31)
</span></span><span class="line"><span class="cl">| | | | ┌──── month (1 - 12) OR jan,feb,mar,apr ...
</span></span><span class="line"><span class="cl">| | | | | ┌── day of week (0 - 6, sunday=0) OR sun,mon ...
</span></span><span class="line"><span class="cl">| | | | | |
</span></span><span class="line"><span class="cl">* * * * * * command</span></span></code></pre>
</div>
<p>参考 <a href="https://it-tools.tech/crontab-generator" target="_blank" rel="noopener noreferrer">crontab-generator</a></p>]]></description></item><item><title>Kubernetes 中文指南</title><link>https://rd163.visword.com/posts/k8s-handbook/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-handbook/</guid><description><![CDATA[<h1 id="kubernetes-中文指南" class="headerLink">
    <a href="#kubernetes-%e4%b8%ad%e6%96%87%e6%8c%87%e5%8d%97" class="header-mark"></a>Kubernetes 中文指南</h1><h2 id="术语解释" class="headerLink">
    <a href="#%e6%9c%af%e8%af%ad%e8%a7%a3%e9%87%8a" class="header-mark"></a>术语解释</h2><ul>
<li>Istio: Istio 是由 Google、IBM 和 Lyft 开源的微服务管理、保护和监控框架. Istio 并不是首字母缩写，但如果一定要说它代表着什么，也许会是 “I Secure, Then I Observe”（我保护，我观察），或者 &ldquo;I’m Sexy To Infrastructure Operators.&quot;（我对基础设施运营商富有吸引力）。</li>
</ul>
<h2 id="k8s-与-云原生的关系" class="headerLink">
    <a href="#k8s-%e4%b8%8e-%e4%ba%91%e5%8e%9f%e7%94%9f%e7%9a%84%e5%85%b3%e7%b3%bb" class="header-mark"></a>k8s 与 云原生的关系</h2><h3 id="云原生定义" class="headerLink">
    <a href="#%e4%ba%91%e5%8e%9f%e7%94%9f%e5%ae%9a%e4%b9%89" class="header-mark"></a>云原生定义</h3><p>云原生是一种行为方式和设计理念，究其本质，凡是能够提高云上资源利用率和应用交付效率的行为或方式都是云原生的。</p>]]></description></item><item><title>kubernetes 网络模型</title><link>https://rd163.visword.com/posts/k8s-networking-model/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-networking-model/</guid><description><![CDATA[<h1 id="kubernetes-网络模型" class="headerLink">
    <a href="#kubernetes-%e7%bd%91%e7%bb%9c%e6%a8%a1%e5%9e%8b" class="header-mark"></a>kubernetes 网络模型</h1><h2 id="k8s通信原理" class="headerLink">
    <a href="#k8s%e9%80%9a%e4%bf%a1%e5%8e%9f%e7%90%86" class="header-mark"></a>K8s通信原理</h2><p>这是一张由外向内的典型的容器网络架构图。</p>
<p><img class="tw:inline" loading="lazy" src='https://wmxiaozhi.github.io/picx-images-hosting/picx-imgs/k8s-net/k8s-network-arch.png'     ></p>
<p>为了能够正常通信，图中每个参与通信的实体都需要有一个 IP 地址，由集群外部到集群内部：</p>
<table>
	<thead>
			<tr>
					<th>IP类型</th>
					<th>说明</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Proxy-IP</td>
					<td>代理层公网地址IP，外部访问应用的网关服务器。[实际需要关注的IP]</td>
			</tr>
			<tr>
					<td>Service-IP</td>
					<td>Service的固定虚拟IP，Service-IP是内部，外部无法寻址到。</td>
			</tr>
			<tr>
					<td>Node-IP</td>
					<td>容器宿主机的主机IP。</td>
			</tr>
			<tr>
					<td>Container-Bridge-IP</td>
					<td>容器网桥（docker0）IP，容器的网络都需要通过容器网桥转发。</td>
			</tr>
			<tr>
					<td>Pod-IP</td>
					<td>Pod的IP，等效于Pod中网络容器的Container-IP。</td>
			</tr>
			<tr>
					<td>Container-IP</td>
					<td>容器的IP，容器的网络是个隔离的网络空间。</td>
			</tr>
	</tbody>
</table>
<h3 id="容器间通信" class="headerLink">
    <a href="#%e5%ae%b9%e5%99%a8%e9%97%b4%e9%80%9a%e4%bf%a1" class="header-mark"></a>容器间通信</h3><p>先来看最简单的情况， 即同一个Pod内部容器之间的通信：</p>]]></description></item><item><title>kubernetes 网络技术与服务通信</title><link>https://rd163.visword.com/posts/k8s-network-and-service/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-network-and-service/</guid><description><![CDATA[<h1 id="kubernetes-网络技术与服务通信-exploring-network-technologies-and-service-communication" class="headerLink">
    <a href="#kubernetes-%e7%bd%91%e7%bb%9c%e6%8a%80%e6%9c%af%e4%b8%8e%e6%9c%8d%e5%8a%a1%e9%80%9a%e4%bf%a1-exploring-network-technologies-and-service-communication" class="header-mark"></a>kubernetes 网络技术与服务通信 (Exploring Network Technologies and Service Communication)</h1><p><strong>副标题</strong> &ndash;K8s网络通信技术</p>
<h2 id="1-引言" class="headerLink">
    <a href="#1-%e5%bc%95%e8%a8%80" class="header-mark"></a>1. 引言</h2><p>K8s 是一个开源的容器编排平台，用来自动化部署、管理容器化的应用程序, Bcs 是腾讯开源的容器管理平台。后者相较于前者，功能要更丰富些，bcs主要聚焦于复杂应用场景下的容器化应用的部署和整合， 除了兼容原生的的K8s外，对于游戏的这种场景提供了特别的适配。</p>]]></description></item><item><title>Kubernetes Gateway API 简介</title><link>https://rd163.visword.com/posts/k8s-gateway-api-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-gateway-api-intro/</guid><description><![CDATA[<h1 id="kubernetes-gateway-api-简介" class="headerLink">
    <a href="#kubernetes-gateway-api-%e7%ae%80%e4%bb%8b" class="header-mark"></a>Kubernetes Gateway API 简介</h1><h2 id="背景" class="headerLink">
    <a href="#%e8%83%8c%e6%99%af" class="header-mark"></a>背景</h2><p>Kubernetes Gateway API 是 Kubernetes 1.18 版本引入的一种新的 API 规范，是 Kubernetes 官方正在开发的新的 API，Ingress 是 Kubernetes 已有的 API。Gateway API 会成为 Ingress 的下一代替代方案。Gateway API 提供更丰富的功能，支持 TCP、UDP、TLS 等，不仅仅是 HTTP。Ingress 主要面向 HTTP 流量。Gateway API 具有更强的扩展性，通过 CRD 可以轻易新增特定的 Gateway 类型，比如 AWS Gateway 等。Ingress 的扩展相对较难。Gateway API 支持更细粒度的流量路由规则，可以精确到服务级别。Ingress 的最小路由单元是路径。</p>]]></description></item><item><title>Kubernetes CRD 和 Operator</title><link>https://rd163.visword.com/posts/k8s-opeator/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-opeator/</guid><description><![CDATA[<h1 id="kubernetes-crd-和-operator" class="headerLink">
    <a href="#kubernetes-crd-%e5%92%8c-operator" class="header-mark"></a>Kubernetes CRD 和 Operator</h1><p>CRD的全称是CustomResourceDefinition, 是Kubernetes为提高可扩展性，让开发者去自定义资源（如Deployment，StatefulSet等）的一种方法.</p>]]></description></item><item><title>Kube-dns</title><link>https://rd163.visword.com/posts/k8s-dns-kubedns/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-dns-kubedns/</guid><description><![CDATA[<h1 id="kube-dns" class="headerLink">
    <a href="#kube-dns" class="header-mark"></a>Kube-dns</h1><h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>从 Kubernetes v1.3 版本开始，使用 cluster add-on 插件管理器回自动启动内置的 DNS。</p>
<p>Kubernetes DNS pod 中包括 3 个容器：</p>
<ul>
<li>kubedns：kubedns 进程监视 Kubernetes master 中的 Service 和 Endpoint 的变化，并维护内存查找结构来服务DNS请求。</li>
<li>dnsmasq：dnsmasq 容器添加 DNS 缓存以提高性能。</li>
<li>sidecar：sidecar 容器在执行双重健康检查（针对 dnsmasq 和 kubedns）时提供单个健康检查端点（监听在10054端口）。</li>
</ul>
<p>DNS pod 具有静态 IP 并作为 Kubernetes 服务暴露出来。该静态 IP 分配后，kubelet 会将使用 &ndash;cluster-dns = <dns-service-ip> 标志配置的 DNS 传递给每个容器。</p>]]></description></item><item><title>Kmesh 技术</title><link>https://rd163.visword.com/posts/k8s-service-mesh-kmesh/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-service-mesh-kmesh/</guid><description><![CDATA[<h1 id="kmesh-技术" class="headerLink">
    <a href="#kmesh-%e6%8a%80%e6%9c%af" class="header-mark"></a>Kmesh 技术</h1><h2 id="背景" class="headerLink">
    <a href="#%e8%83%8c%e6%99%af" class="header-mark"></a>背景</h2><p>像 Istio 这样的服务网格已成为管理复杂微服务架构的核心，提供流量管理、安全性和可观测性等功能。Sidecar 模型，即在每个服务实例旁运行一个代理，已成为主要方法。虽然功能有效，但这种架构引入了显著的延迟和资源开销。</p>]]></description></item><item><title>K8s 中的开放接口</title><link>https://rd163.visword.com/posts/k8s-open-interfaces/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-open-interfaces/</guid><description><![CDATA[<h1 id="k8s-中的开放接口" class="headerLink">
    <a href="#k8s-%e4%b8%ad%e7%9a%84%e5%bc%80%e6%94%be%e6%8e%a5%e5%8f%a3" class="header-mark"></a>K8s 中的开放接口</h1><p>Kubernetes作为云原生应用的基础调度平台，相当于云原生的操作系统，为了便于系统的扩展，Kubernetes中开放的以下接口，可以分别对接不同的后端，来实现自己的业务逻辑：</p>]]></description></item><item><title>K8s 源码阅读</title><link>https://rd163.visword.com/posts/k8s-source-review/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-source-review/</guid><description><![CDATA[<h1 id="k8s-源码阅读" class="headerLink">
    <a href="#k8s-%e6%ba%90%e7%a0%81%e9%98%85%e8%af%bb" class="header-mark"></a>K8s 源码阅读</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/chenzongshu/Kubernetes/blob/master/k8s%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/Kubeedge%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B%E6%80%BB%E4%BD%93%E4%BB%8B%E7%BB%8D.md" target="_blank" rel="noopener noreferrer">Kubeedge源码分析之总体介绍</a></li>
</ul>]]></description></item><item><title>K8s 演示文稿及分享</title><link>https://rd163.visword.com/posts/k8s-presentations/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-presentations/</guid><description><![CDATA[<h1 id="k8s-演示文稿及分享" class="headerLink">
    <a href="#k8s-%e6%bc%94%e7%a4%ba%e6%96%87%e7%a8%bf%e5%8f%8a%e5%88%86%e4%ba%ab" class="header-mark"></a>K8s 演示文稿及分享</h1><h2 id="cncf-组织的一些分享" class="headerLink">
    <a href="#cncf-%e7%bb%84%e7%bb%87%e7%9a%84%e4%b8%80%e4%ba%9b%e5%88%86%e4%ba%ab" class="header-mark"></a>CNCF 组织的一些分享</h2><ul>
<li><a href="https://github.com/cncf/presentations" target="_blank" rel="noopener noreferrer">CNCF Community Presentations </a></li>
</ul>
<h2 id="ppt" class="headerLink">
    <a href="#ppt" class="header-mark"></a>PPT</h2><ul>
<li><a href="https://drive.google.com/file/d/1p65kmMRyDL4_r2MWSJLTMAZyMnHEZUXt/view?pli=1" target="_blank" rel="noopener noreferrer">K8s Introduction</a></li>
<li><a href="https://www.slideshare.net/slideshow/deep-dive-into-kubernetes-networking-108505405/108505405#1" target="_blank" rel="noopener noreferrer">Deep dive into Kubernetes Networking</a></li>
<li><a href="https://www.slideshare.net/slideshow/kubernetes-networking-78049891/78049891#1" target="_blank" rel="noopener noreferrer">Kubernetes Networking 101</a></li>
<li><a href="https://itdks.su.bcebos.com/03ede220525049a7aea7ad4966c21387.pdf" target="_blank" rel="noopener noreferrer">Kubernetes 101/201 </a></li>
</ul>
<h2 id="分享视频" class="headerLink">
    <a href="#%e5%88%86%e4%ba%ab%e8%a7%86%e9%a2%91" class="header-mark"></a>分享视频</h2><ul>
<li><a href="https://www.youtube.com/watch?v=cyKUaT0SEtU" target="_blank" rel="noopener noreferrer">k8s 主流网络方案（OVS、Flannel、Calico）及原理</a></li>
<li><a href="https://www.youtube.com/watch?v=HxS4s11rmyA" target="_blank" rel="noopener noreferrer">技术分享：Kubernetes Networking Model （赵锟）</a></li>
<li><a href="https://www.bilibili.com/video/BV1Ft4y117Ch/?spm_id_from=333.337.search-card.all.click&amp;vd_source=a9df3242be9eb413a269ab45ec32652e" target="_blank" rel="noopener noreferrer">深入理解Kubernetes网络</a></li>
</ul>]]></description></item><item><title>K8s 网络插件 SRIOV-CNI</title><link>https://rd163.visword.com/posts/k8s-cni-sriov/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-cni-sriov/</guid><description><![CDATA[<h1 id="k8s-网络插件-sriov-cni" class="headerLink">
    <a href="#k8s-%e7%bd%91%e7%bb%9c%e6%8f%92%e4%bb%b6-sriov-cni" class="header-mark"></a>K8s 网络插件 SRIOV-CNI</h1><p>SRIOV-CNI最早由腾讯互娱计算资源团队开发， 后被 CNI 社区接纳，并被Intel关注和<a href="https://github.com/Intel-Corp/sriov-cni" target="_blank" rel="noopener noreferrer">Fork</a>。</p>
<p>SRIOV-CNI 为K8s 提供一种 Underlay 网络。 其主要是 基于 网卡虚拟化技术 SR-IOV 实现的。</p>]]></description></item><item><title>K8s 网络插件 Flannel</title><link>https://rd163.visword.com/posts/k8s-cni-flannel/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-cni-flannel/</guid><description><![CDATA[<h1 id="k8s-网络插件-flannel" class="headerLink">
    <a href="#k8s-%e7%bd%91%e7%bb%9c%e6%8f%92%e4%bb%b6-flannel" class="header-mark"></a>K8s 网络插件 Flannel</h1><h2 id="cnicontainer-network-interface" class="headerLink">
    <a href="#cnicontainer-network-interface" class="header-mark"></a>cni（Container Network Interface）</h2><p>CNI 全称为 Container Network Interface，是用来定义容器网络的一个 规范。<a href="https://github.com/containernetworking/cni" target="_blank" rel="noopener noreferrer">containernetworking/cni</a> 是一个 CNCF 的 CNI 实现项目，包括基本的 bridge,macvlan等基本网络插件。</p>]]></description></item><item><title>k8s 网络插件 Cilium</title><link>https://rd163.visword.com/posts/k8s-cni-cilium/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-cni-cilium/</guid><description><![CDATA[<h1 id="k8s-网络插件-cilium" class="headerLink">
    <a href="#k8s-%e7%bd%91%e7%bb%9c%e6%8f%92%e4%bb%b6-cilium" class="header-mark"></a>k8s 网络插件 Cilium</h1><h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>Cilium 是一个基于 eBPF 和 XDP 的高性能容器网络方案，代码开源在 <a href="https://github.com/cilium/cilium" target="_blank" rel="noopener noreferrer">https://github.com/cilium/cilium</a>。其主要功能特性包括</p>]]></description></item><item><title>k8s 网络插件 Calico</title><link>https://rd163.visword.com/posts/k8s-cni-calico/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-cni-calico/</guid><description><![CDATA[<h1 id="k8s-网络插件-calico" class="headerLink">
    <a href="#k8s-%e7%bd%91%e7%bb%9c%e6%8f%92%e4%bb%b6-calico" class="header-mark"></a>k8s 网络插件 Calico</h1><h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>Calico 是一个纯三层的数据中心网络方案（不需要 Overlay），并且与 OpenStack、Kubernetes、AWS、GCE 等 IaaS 和容器平台都有良好的集成。</p>]]></description></item><item><title>K8s 网关介绍</title><link>https://rd163.visword.com/posts/k8s-gateway-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-gateway-intro/</guid><description><![CDATA[<h1 id="k8s-网关介绍" class="headerLink">
    <a href="#k8s-%e7%bd%91%e5%85%b3%e4%bb%8b%e7%bb%8d" class="header-mark"></a>K8s 网关介绍</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://kubernetes.io/docs/concepts/services-networking/" target="_blank" rel="noopener noreferrer">Services, Load Balancing, and Networking</a></li>
<li><a href="https://kubernetes.io/docs/concepts/services-networking/gateway/" target="_blank" rel="noopener noreferrer">Gateway API</a></li>
<li><a href="https://gateway-api.sigs.k8s.io/" target="_blank" rel="noopener noreferrer">Gateway API Overview</a></li>
<li><a href="https://cloudnative.to/blog/kubernetes-gateway-api-explained/" target="_blank" rel="noopener noreferrer">Kubernetes Gateway API 深入解读和落地指南</a></li>
<li><a href="https://gateway-api.sigs.k8s.io/implementations/" target="_blank" rel="noopener noreferrer">实现了 K8s gateway 的控制器列表</a></li>
</ul>]]></description></item><item><title>K8s 跨集群通信</title><link>https://rd163.visword.com/posts/k8s-pod-to-pod-different-clusters/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-pod-to-pod-different-clusters/</guid><description><![CDATA[<h1 id="k8s-跨集群通信" class="headerLink">
    <a href="#k8s-%e8%b7%a8%e9%9b%86%e7%be%a4%e9%80%9a%e4%bf%a1" class="header-mark"></a>K8s 跨集群通信</h1><p>分两种情况讨论：</p>
<p><strong>不同集群间Node互通</strong></p>
<ul>
<li>如公司内部多个集群 或者</li>
<li>同一个云服务商如腾讯云下的多个集群。</li>
</ul>
<p><strong>不同集群间Node不互通</strong></p>
<ul>
<li>如公司内集群 和 腾讯公有云集群。</li>
<li>不同云服务商之间的集群，如腾讯云、阿里云。</li>
</ul>
<h2 id="方案" class="headerLink">
    <a href="#%e6%96%b9%e6%a1%88" class="header-mark"></a>方案</h2><p><strong>不同集群间Node互通</strong></p>]]></description></item><item><title>K8s 服务治理</title><link>https://rd163.visword.com/posts/k8s-service-governance/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-service-governance/</guid><description><![CDATA[<h1 id="k8s-服务治理" class="headerLink">
    <a href="#k8s-%e6%9c%8d%e5%8a%a1%e6%b2%bb%e7%90%86" class="header-mark"></a>K8s 服务治理</h1><p>微服务治理的手段</p>
<ul>
<li><a href="https://github.com/apache/dubbo" target="_blank" rel="noopener noreferrer">Apache Dubbo</a> 在早期的微服务框架中，很多用户会选择 Dubbo，国内成熟案例也很多。然而 Dubbo 自身的服务治理能力是很弱的，需要自行整合多种服务治理插件</li>
<li><a href="https://github.com/spring-cloud" target="_blank" rel="noopener noreferrer">Spring Cloud</a> 尽管 Spring Cloud 全家桶功能多可以全套搞定，社区也活跃，文档也丰富，但是 Spring Cloud 最大的问题是 Java 语言绑定和业务侵入性强</li>
<li><a href="https://github.com/alibaba/nacos" target="_blank" rel="noopener noreferrer">Nacos</a> Nacos 是阿里巴巴的开源的产品，现在是 SpringCloud 中的一个组件。相比Eureka功能更加丰富，在国内受欢迎程度较高。Nacos是用来发现、配置和管理微服务。Nacos提供了一组简单易用的特性集，帮助快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos的一大优势是整合了注册中心、配置中心功能。相当于 Polaris + Rainbow。</li>
<li>Istio 新型的服务网格代表 Istio 巧妙地解决了 Dubbo 和 Spring Cloud 的缺点问题，它通过 Sidecar 来进行流量的劫持代理，做到了无侵入和语言无关。但正是因为这种代理模式，导致了其流量性能损耗问题，同时也缺乏了内部 SDK 支持与精细化的方法级治理。</li>
<li><a href="https://github.com/polarismesh/polaris" target="_blank" rel="noopener noreferrer">Polaris Mesh</a> 北极星是一个支持多语言和多框架的服务发现和治理平台，致力于解决分布式和微服务架构中的服务管理、流量管理、故障容错、配置管理和可观测性问题，针对不同的技术栈和环境提供服务治理的标准方案和最佳实践。</li>
</ul>
<p>两者虽然都支持： 路由、熔断、重试 等服务治理手段， 但两者的实现原理完全不同。 区别在于：</p>]]></description></item><item><title>K8s 服务网格配置发现协议</title><link>https://rd163.visword.com/posts/k8s-service-mesh-config-proto/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-service-mesh-config-proto/</guid><description><![CDATA[<h1 id="k8s-服务网格配置发现协议" class="headerLink">
    <a href="#k8s-%e6%9c%8d%e5%8a%a1%e7%bd%91%e6%a0%bc%e9%85%8d%e7%bd%ae%e5%8f%91%e7%8e%b0%e5%8d%8f%e8%ae%ae" class="header-mark"></a>K8s 服务网格配置发现协议</h1><h2 id="mcp" class="headerLink">
    <a href="#mcp" class="header-mark"></a>MCP</h2><ul>
<li>MCP是基于订阅的配置分发API。</li>
<li>配置使用者(即sink)从配置生产者(即source)请求更新资源集合.添加,更新或删除资源时,source会将资源更新推送到sink.</li>
<li>sink积极确认资源更新,如果sink接受,则返回ACK,如果被拒绝则返回NACK,例如: 因为资源无效。</li>
<li>一旦对先前的更新进行了ACK/NACK,则源可以推送其他更新.该源一次只能运行一个未完成的更新(每个集合).</li>
<li>MCP是一对双向流gRPC API服务(ResourceSource和ResourceSink)。</li>
</ul>
<h2 id="xds" class="headerLink">
    <a href="#xds" class="header-mark"></a>xDS</h2><p>xDS REST和gRPC协议 Envoy通过文件系统或查询一台或多台管理服务器发现其各种动态资源。这些发现服务及其相应的API统称为xDS。通过预订,指定要监视的文件系统路径,启动gRPC流或轮询REST-JSON URL来请求资源。后两种方法涉及发送带有DiscoveryRequest 原型有效负载的请求.在所有方法中,资源都是通过DiscoveryResponse原型有效负载交付的 。我们在下面讨论每种订阅类型。</p>]]></description></item><item><title>k8s 服务网格（Service Mesh）</title><link>https://rd163.visword.com/posts/k8s-service-mesh/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-service-mesh/</guid><description><![CDATA[<h1 id="k8s-服务网格service-mesh" class="headerLink">
    <a href="#k8s-%e6%9c%8d%e5%8a%a1%e7%bd%91%e6%a0%bcservice-mesh" class="header-mark"></a>k8s 服务网格（Service Mesh）</h1><p>希腊语言中大概是风帆的意思， 发音  [iːst&rsquo;iəʊ] ，相当于中文的 伊斯特亿欧。</p>
<p>如果用一句话来解释什么是服务网格，可以将它比作是应用程序或者说微服务间的 TCP/IP，负责服务之间的网络调用、限流、熔断和监控。</p>]]></description></item><item><title>k8s 服务网格（Service Mesh）</title><link>https://rd163.visword.com/posts/k8s-service-mesh-istio/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-service-mesh-istio/</guid><description><![CDATA[<h1 id="k8s-服务网格service-mesh" class="headerLink">
    <a href="#k8s-%e6%9c%8d%e5%8a%a1%e7%bd%91%e6%a0%bcservice-mesh" class="header-mark"></a>k8s 服务网格（Service Mesh）</h1><p>希腊语言中大概是风帆的意思， 发音  [iːst&rsquo;iəʊ] ，相当于中文的 伊斯特亿欧。</p>
<h2 id="1-为何使用服务网格why" class="headerLink">
    <a href="#1-%e4%b8%ba%e4%bd%95%e4%bd%bf%e7%94%a8%e6%9c%8d%e5%8a%a1%e7%bd%91%e6%a0%bcwhy" class="header-mark"></a>1. 为何使用服务网格？(Why)</h2><ul>
<li>服务网格并没有给我们带来新功能，它是用于解决其他工具已经解决过的问题，只不过这次是在云原生的  Kubernetes 环境下的实现。</li>
<li>MVC 三层 Web 应用程序架构下，服务之间的通讯并不复杂，在应用程序内部自己管理即可，但是在现今的复杂的大型网站情况下，单体应用被分解为众多的微服务，服务之间的依赖和通讯十分复杂，出现了 Twitter 开发的 Finagle、Netflix 开发的 Hystrix 和 Google 的 Stubby 这样的 ”胖客户端“ 库，这些就是早期的服务网格，但是它们都近适用于特定的环境和特定的开发语言，并不能作为平台级的服务网格支持。</li>
<li>在云原生架构下，容器的使用给予了异构应用程序的更多可行性， Kubernetes 增强的应用的横向扩容能力，用户可以快速的编排出复杂环境、复杂依赖关系的应用程序，同时开发者又无须过分关心应用程序的监控、扩展性、服务发现和分布式追踪这些繁琐的事情而专注于程序开发，赋予开发者更多的创造性。</li>
</ul>
<h2 id="2-简介what" class="headerLink">
    <a href="#2-%e7%ae%80%e4%bb%8bwhat" class="header-mark"></a>2. 简介(What)</h2><p>服务网格有如下几个特点：</p>]]></description></item><item><title>K8s 多集群</title><link>https://rd163.visword.com/posts/k8s-multi-cluster/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-multi-cluster/</guid><description><![CDATA[<h1 id="k8s-多集群" class="headerLink">
    <a href="#k8s-%e5%a4%9a%e9%9b%86%e7%be%a4" class="header-mark"></a>K8s 多集群</h1><h2 id="1-为什么需要-k8s-多集群" class="headerLink">
    <a href="#1-%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81-k8s-%e5%a4%9a%e9%9b%86%e7%be%a4" class="header-mark"></a>1. 为什么需要 K8s 多集群？</h2><p>在探讨为什么需要 K8s 多集群之前，我们首先定义一下什么是 K8s 多集群：</p>
<p>所谓 K8s 多集群，顾名思义就是多个 K8s 集群。企业或组织可能根据自身的需求，例如为了满足隔离性、可用性、合规性或使用成本等，将其应用程序运行在任意一个或多个集群中。此外，在更加成熟的 K8s 多集群中，应用程序实际运行的集群能够动态配置，不同集群间的应用程序也应该支持相互访问。</p>]]></description></item><item><title>K8s 的一些设计理念</title><link>https://rd163.visword.com/posts/k8s-perspective/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-perspective/</guid><description><![CDATA[<h1 id="k8s-的一些设计理念" class="headerLink">
    <a href="#k8s-%e7%9a%84%e4%b8%80%e4%ba%9b%e8%ae%be%e8%ae%a1%e7%90%86%e5%bf%b5" class="header-mark"></a>K8s 的一些设计理念</h1><p>分析和理解 K8s 的设计理念可以使我们更深入地了解 Kubernetes 系统，更好地利用它管理分布式部署的云原生应用，另一方面也可以让我们借鉴其在分布式系统设计方面的经验。</p>]]></description></item><item><title>k8s 本地化安装部署</title><link>https://rd163.visword.com/posts/k8s-local-deploy/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-local-deploy/</guid><description><![CDATA[<h1 id="k8s-本地化安装部署" class="headerLink">
    <a href="#k8s-%e6%9c%ac%e5%9c%b0%e5%8c%96%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2" class="header-mark"></a>k8s 本地化安装部署</h1><p>由很多方式可以让你能够在本地计算机上运行 Kubernetes， 包括：</p>
<ul>
<li>
<p><a href="https://github.com/kubernetes-sigs/kind/" target="_blank" rel="noopener noreferrer">Kind</a></p>
</li>
<li>
<p><a href="k3s" rel="">K3s</a></p>
</li>
<li>
<p><a href="" rel="">MiniKube</a></p>
</li>
<li>
<p><a href="" rel="">kubeadm</a></p>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://kubernetes.io/zh-cn/docs/tasks/tools/" target="_blank" rel="noopener noreferrer">kubernetes tools</a></li>
</ul>
</li>
</ul>]]></description></item><item><title>K8s 本地安装</title><link>https://rd163.visword.com/posts/k8s-install-locally/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-install-locally/</guid><description><![CDATA[<h1 id="k8s-本地安装" class="headerLink">
    <a href="#k8s-%e6%9c%ac%e5%9c%b0%e5%ae%89%e8%a3%85" class="header-mark"></a>K8s 本地安装</h1><h2 id="方案" class="headerLink">
    <a href="#%e6%96%b9%e6%a1%88" class="header-mark"></a>方案</h2><h3 id="1-minikube" class="headerLink">
    <a href="#1-minikube" class="header-mark"></a><a href="https://github.com/kubernetes/minikube" target="_blank" rel="noopener noreferrer">1. minikube</a></h3><ul>
<li><a href="https://minikube.kubernetes.ac.cn/docs/tutorials/multi_node/" target="_blank" rel="noopener noreferrer">minikube 使用多节点集群</a></li>
</ul>
<h3 id="2-kind" class="headerLink">
    <a href="#2-kind" class="header-mark"></a><a href="https://github.com/kubernetes-sigs/kind/" target="_blank" rel="noopener noreferrer">2. Kind</a></h3><h3 id="3-k3s---lightweight-kubernetes" class="headerLink">
    <a href="#3-k3s---lightweight-kubernetes" class="header-mark"></a><a href="https://github.com/k3s-io/k3s" target="_blank" rel="noopener noreferrer">3. K3s - Lightweight Kubernetes</a></h3><h3 id="4-kubeadm" class="headerLink">
    <a href="#4-kubeadm" class="header-mark"></a><a href="https://github.com/kubernetes/kubeadm" target="_blank" rel="noopener noreferrer">4. Kubeadm</a></h3><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://kubernetes.io/zh-cn/docs/tasks/tools/" target="_blank" rel="noopener noreferrer">安装工具</a></li>
</ul>]]></description></item><item><title>k8s 暴露服务的方式</title><link>https://rd163.visword.com/posts/k8s-expose/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-expose/</guid><description><![CDATA[<h1 id="k8s-暴露服务的方式" class="headerLink">
    <a href="#k8s-%e6%9a%b4%e9%9c%b2%e6%9c%8d%e5%8a%a1%e7%9a%84%e6%96%b9%e5%bc%8f" class="header-mark"></a>k8s 暴露服务的方式</h1><h2 id="暴露service-的三种方式" class="headerLink">
    <a href="#%e6%9a%b4%e9%9c%b2service-%e7%9a%84%e4%b8%89%e7%a7%8d%e6%96%b9%e5%bc%8f" class="header-mark"></a>暴露Service 的三种方式</h2><h3 id="1-nodeport" class="headerLink">
    <a href="#1-nodeport" class="header-mark"></a>1. NodePort</h3><p>将服务的类型设置成NodePort-每个集群节点都会在节点上打 开 一个端口， 对于NodePort服务， 每个集群节点在节点本身（因此得名叫 NodePort)上打开一个端口，并将在该端口上接收到的流量重定向到基础服务。
该服务仅在内部集群 IP 和端口上才可访间， 但也可通过所有节点上的专用端口访问。</p>]]></description></item><item><title>K8s Nginx Ingress Controller 简介</title><link>https://rd163.visword.com/posts/k8s-nginx-ingress-controller/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-nginx-ingress-controller/</guid><description><![CDATA[<h1 id="k8s-nginx-ingress-controller-简介" class="headerLink">
    <a href="#k8s-nginx-ingress-controller-%e7%ae%80%e4%bb%8b" class="header-mark"></a>K8s Nginx Ingress Controller 简介</h1><p>在Kubernetes集群中，Ingress作为集群内服务对外暴露的访问接入点，几乎承载着集群内服务访问的所有流量。</p>
<p>Ingress是Kubernetes中的一个资源对象，用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则，从而实现根据不同的规则设置访问集群内不同的Service所对应的后端Pod。</p>]]></description></item><item><title>K8s Ingress 控制器</title><link>https://rd163.visword.com/posts/k8s-ingress-controller/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-ingress-controller/</guid><description><![CDATA[<h1 id="k8s-ingress-控制器" class="headerLink">
    <a href="#k8s-ingress-%e6%8e%a7%e5%88%b6%e5%99%a8" class="header-mark"></a>K8s Ingress 控制器</h1><h2 id="ingress-控制器开源实现及不同控制器的多维度对比" class="headerLink">
    <a href="#ingress-%e6%8e%a7%e5%88%b6%e5%99%a8%e5%bc%80%e6%ba%90%e5%ae%9e%e7%8e%b0%e5%8f%8a%e4%b8%8d%e5%90%8c%e6%8e%a7%e5%88%b6%e5%99%a8%e7%9a%84%e5%a4%9a%e7%bb%b4%e5%ba%a6%e5%af%b9%e6%af%94" class="header-mark"></a>Ingress 控制器开源实现，及不同控制器的多维度对比：</h2><p><a href="https://www.kubernetes.org.cn/5948.html" target="_blank" rel="noopener noreferrer">K8s 工程师必懂的 10 种 Ingress 控制器</a></p>
<p><img class="tw:inline" loading="lazy" src='https://www.kubernetes.org.cn/imgs/2019/10/4c50e6eb0f2d3e6b7acb0806190a46e8.jpg'   alt="ing"  ></p>]]></description></item><item><title>K8s Ingress 介绍</title><link>https://rd163.visword.com/posts/k8s-ingress-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-ingress-intro/</guid><description><![CDATA[<h1 id="k8s-ingress-介绍" class="headerLink">
    <a href="#k8s-ingress-%e4%bb%8b%e7%bb%8d" class="header-mark"></a>K8s Ingress 介绍</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://github.com/TencentBlueKing/bk-bcs/blob/master/docs/features/bcs-ingress-controller/design.md" target="_blank" rel="noopener noreferrer">bcs-ingress-controller design</a></li>
<li><a href="https://github.com/TencentBlueKing/bk-bcs/blob/master/docs/features/bcs-ingress-controller/usage.md" target="_blank" rel="noopener noreferrer">bcs-ingress-controller使用</a></li>
<li><a href="https://github.com/TencentBlueKing/bk-bcs/blob/master/docs/features/bcs-clb-controller/README.md" target="_blank" rel="noopener noreferrer">bcs CLB controller 【已被bcs-ingress-controller代替】</a></li>
<li><a href="https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress-controllers/" target="_blank" rel="noopener noreferrer">Ingress 控制器实现有哪些？</a></li>
<li><a href="https://cloud.tencent.com/developer/article/1592281" target="_blank" rel="noopener noreferrer">浅谈Kubernetes Ingress控制器的技术选型</a></li>
<li><a href="https://www.cnblogs.com/kebibuluan/p/15143837.html" target="_blank" rel="noopener noreferrer">使用ingress+service机制实现高可用负载均衡</a></li>
<li><a href="https://github.com/Miss-you/awesome-ingress" target="_blank" rel="noopener noreferrer">Ingress总览</a></li>
</ul>]]></description></item><item><title>K8s dns 技术实现原理</title><link>https://rd163.visword.com/posts/k8s-dns-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-dns-intro/</guid><description><![CDATA[<h1 id="k8s-dns-技术实现原理" class="headerLink">
    <a href="#k8s-dns-%e6%8a%80%e6%9c%af%e5%ae%9e%e7%8e%b0%e5%8e%9f%e7%90%86" class="header-mark"></a>K8s dns 技术实现原理</h1><p>K8s 中DNS采用的服务器方案也在不断演变， 早期用的是 kube-dns， 从 1.11 版本开始 默认的dns服务器 由 kube-dns切换到了 coredns。</p>]]></description></item><item><title>K8s CNI网络插件</title><link>https://rd163.visword.com/posts/k8s-network-cni/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-network-cni/</guid><description><![CDATA[<h1 id="k8s-cni网络插件" class="headerLink">
    <a href="#k8s-cni%e7%bd%91%e7%bb%9c%e6%8f%92%e4%bb%b6" class="header-mark"></a>K8s CNI网络插件</h1><ul>
<li><a href="https://github.com/antrea-io/antrea" target="_blank" rel="noopener noreferrer">Antrea</a></li>
<li><a href="https://github.com/aws/amazon-vpc-cni-k8s" target="_blank" rel="noopener noreferrer">amazon-vpc-cni-k8s</a></li>
<li><a href="https://github.com/projectcalico/calico" target="_blank" rel="noopener noreferrer">calico</a></li>
<li><a href="https://github.com/projectcalico/canal" target="_blank" rel="noopener noreferrer">canal</a></li>
<li><a href="https://github.com/cilium/cilium" target="_blank" rel="noopener noreferrer">cilium</a></li>
<li><a href="https://github.com/contiv/vpp" target="_blank" rel="noopener noreferrer">contiv</a></li>
<li><a href="https://github.com/flannel-io/flannel" target="_blank" rel="noopener noreferrer">Flannel</a></li>
<li><a href="https://github.com/cloudnativelabs/kube-router" target="_blank" rel="noopener noreferrer">Kube-router</a></li>
<li><a href="https://github.com/kubeovn/kube-ovn" target="_blank" rel="noopener noreferrer">Kube-OVN</a></li>
<li><a href="https://github.com/weaveworks/weave" target="_blank" rel="noopener noreferrer">WeaveNet</a></li>
<li><a href="https://github.com/AliyunContainerService/terway" target="_blank" rel="noopener noreferrer">阿里云 Terway CNI Network Plugin</a></li>
</ul>
<h2 id="cni-性能" class="headerLink">
    <a href="#cni-%e6%80%a7%e8%83%bd" class="header-mark"></a>CNI 性能</h2><p>ITNEXT 网站对不同插件的测评</p>
<ul>
<li><a href="https://itnext.io/benchmark-results-of-kubernetes-network-plugins-cni-over-10gbit-s-network-updated-august-2020-6e1b757b9e49" target="_blank" rel="noopener noreferrer">Benchmark results of Kubernetes network plugins (CNI) over 10Gbit/s network (Updated: August 2020)</a></li>
<li><a href="https://itnext.io/benchmark-results-of-kubernetes-network-plugins-cni-over-40gbit-s-network-2024-156f085a5e4e#89d8-90c23c8caeb4-reply" target="_blank" rel="noopener noreferrer">Benchmark results of Kubernetes network plugins (CNI) over 40Gbit/s network [2024]</a></li>
</ul>
<p>作者给的建议是：</p>]]></description></item><item><title>JS引擎</title><link>https://rd163.visword.com/posts/js-engine/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/js-engine/</guid><description><![CDATA[<h1 id="js引擎" class="headerLink">
    <a href="#js%e5%bc%95%e6%93%8e" class="header-mark"></a>JS引擎</h1><h2 id="1-javascriptcore" class="headerLink">
    <a href="#1-javascriptcore" class="header-mark"></a>1. JavaScriptCore</h2><p>JavaScriptCore 是 WebKit 默认的内嵌 JS 引擎，wikipedia 上都没有独立的词条，只在 WebKit 词条的三级目录[1]里介绍了一下，个人感觉还是有些不像话，毕竟也是老牌 JS 引擎了。</p>]]></description></item><item><title>Json 转 Go语言结构体方案</title><link>https://rd163.visword.com/posts/golang-json-to-struct/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-json-to-struct/</guid><description><![CDATA[<h1 id="json-转-go语言结构体方案" class="headerLink">
    <a href="#json-%e8%bd%ac-go%e8%af%ad%e8%a8%80%e7%bb%93%e6%9e%84%e4%bd%93%e6%96%b9%e6%a1%88" class="header-mark"></a>Json 转 Go语言结构体方案</h1><h2 id="开源方案" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90%e6%96%b9%e6%a1%88" class="header-mark"></a>开源方案</h2><h3 id="1-transformtools" class="headerLink">
    <a href="#1-transformtools" class="header-mark"></a>1. <a href="https://transform.tools/json-to-go" target="_blank" rel="noopener noreferrer">transform.tools</a></h3><ul>
<li><a href="https://github.com/ritz078/transform" target="_blank" rel="noopener noreferrer">github</a> Star 8.1K</li>
<li>不仅支持Go，也能转换成其它语言的结构</li>
</ul>
<h3 id="2-json-to-go" class="headerLink">
    <a href="#2-json-to-go" class="header-mark"></a>2. <a href="https://mholt.github.io/json-to-go/" target="_blank" rel="noopener noreferrer">JSON-to-Go</a></h3><ul>
<li><a href="https://github.com/mholt/json-to-go" target="_blank" rel="noopener noreferrer">github</a> Star 4.5K</li>
</ul>
<h3 id="3-json2struct" class="headerLink">
    <a href="#3-json2struct" class="header-mark"></a>3. <a href="https://json2struct.mervine.net/" target="_blank" rel="noopener noreferrer">Json2Struct</a></h3><ul>
<li><a href="https://github.com/jmervine/gojson-http" target="_blank" rel="noopener noreferrer">github</a> Star 93</li>
</ul>]]></description></item><item><title>Json 可视化编辑</title><link>https://rd163.visword.com/posts/json-visual-edit/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/json-visual-edit/</guid><description><![CDATA[<h1 id="json-可视化编辑" class="headerLink">
    <a href="#json-%e5%8f%af%e8%a7%86%e5%8c%96%e7%bc%96%e8%be%91" class="header-mark"></a>Json 可视化编辑</h1><ul>
<li><a href="https://github.com/AykutSarac/jsoncrack.com" target="_blank" rel="noopener noreferrer">JSON Crack</a>  star 33K</li>
<li><a href="https://github.com/wibetter/json-editor" target="_blank" rel="noopener noreferrer">JSON数据可视化/JSONEditor</a> 感觉最好用</li>
<li><a href="https://github.com/Open-Federation/json-schema-editor-visual" target="_blank" rel="noopener noreferrer">json-schema-editor-visual</a>  YApi使用</li>
<li><a href="https://github.com/sempostma/json-gui" target="_blank" rel="noopener noreferrer">json-gui</a></li>
<li><a href="https://github.com/ogaoga/json-visual-editor" target="_blank" rel="noopener noreferrer">JSON Visual Editor v2</a></li>
</ul>]]></description></item><item><title>IM 开源解决方案</title><link>https://rd163.visword.com/posts/im-open-source/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/im-open-source/</guid><description><![CDATA[<h1 id="im-开源解决方案" class="headerLink">
    <a href="#im-%e5%bc%80%e6%ba%90%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="header-mark"></a>IM 开源解决方案</h1><h2 id="开源方案" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90%e6%96%b9%e6%a1%88" class="header-mark"></a>开源方案</h2><ul>
<li>
<p><a href="https://docs.wildfirechat.cn/" target="_blank" rel="noopener noreferrer">野火IM解决方案</a> 提供了完整的后台、终端、web端解决方案</p>
<ul>
<li><a href="https://github.com/wildfirechat/im-server" target="_blank" rel="noopener noreferrer">im-server</a> Java语言实现</li>
<li><a href="https://github.com/wildfirechat/ios-chat" target="_blank" rel="noopener noreferrer">ios-chat</a></li>
<li><a href="" rel="">Andriud</a></li>
<li><a href="" rel="">Web</a></li>
</ul>
</li>
<li>
<p><a href="https://github.com/TangSengDaoDao" target="_blank" rel="noopener noreferrer">唐僧叨叨</a></p>]]></description></item><item><title>HTTP 相关的库</title><link>https://rd163.visword.com/posts/http-libs/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/http-libs/</guid><description><![CDATA[<h1 id="http-相关的库" class="headerLink">
    <a href="#http-%e7%9b%b8%e5%85%b3%e7%9a%84%e5%ba%93" class="header-mark"></a>HTTP 相关的库</h1><h2 id="c-语言" class="headerLink">
    <a href="#c-%e8%af%ad%e8%a8%80" class="header-mark"></a>C 语言</h2><p><strong>libmicrohttpd</strong></p>
<p>libmicrohttpd 是 GUN 下开源的一个小型的 HTTP 库，能够方便的嵌入到系统中。支持 HTTP 1.1 可以同时侦听多个端口，具有 select, poll, pthread, thread poo 等多种模式，库平台支持 GNU/Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana/Solaris, z/OS 等。</p>]]></description></item><item><title>Go语言实现的命令行工具</title><link>https://rd163.visword.com/posts/cmd-by-golang/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cmd-by-golang/</guid><description><![CDATA[<h1 id="go语言实现的命令行工具" class="headerLink">
    <a href="#go%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e7%9a%84%e5%91%bd%e4%bb%a4%e8%a1%8c%e5%b7%a5%e5%85%b7" class="header-mark"></a>Go语言实现的命令行工具</h1><ul>
<li><a href="https://github.com/mr-karan/doggo" target="_blank" rel="noopener noreferrer">doggo</a> 一个易用的 DNS 命令行查询工具。</li>
</ul>]]></description></item><item><title>Google 统计接入</title><link>https://rd163.visword.com/posts/google-analytics/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/google-analytics/</guid><description><![CDATA[<h2 id="步骤" class="headerLink">
    <a href="#%e6%ad%a5%e9%aa%a4" class="header-mark"></a>步骤</h2><p>如果要在后端接入，可参考： <a href="https://www.cnblogs.com/lwhzj/p/18347217" target="_blank" rel="noopener noreferrer">谷歌统计接入</a></p>
<p>要在网站中接入谷歌统计插件(Google Analytics),你可以按照以下步骤操作：</p>
<h3 id="step-1" class="headerLink">
    <a href="#step-1" class="header-mark"></a>Step 1</h3><p>注册Google Analytics账号并获取跟踪ID：访问 <a href="https://analytics.google.com/" target="_blank" rel="noopener noreferrer">https://analytics.google.com/</a> 并使用你的 Google 账户登录</p>]]></description></item><item><title>Golang 学习</title><link>https://rd163.visword.com/posts/get-started-with-golang/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/get-started-with-golang/</guid><description><![CDATA[<h1 id="golang-学习" class="headerLink">
    <a href="#golang-%e5%ad%a6%e4%b9%a0" class="header-mark"></a>Golang 学习</h1><p>云风说：</p>
<p>我发现我花了四年时间锤炼自己用 C 语言构建系统的能力，试图找到一个规范，可以更好的编写软件。结果发现只是对 Go 的模仿。缺乏语言层面的支持，只能是一个拙劣的模仿。
参考 <a href="https://blog.codingnow.com/2010/11/go_prime.html" target="_blank" rel="noopener noreferrer">云风的 BLOG: Go 语言初步</a></p>]]></description></item><item><title>Golang 书籍</title><link>https://rd163.visword.com/posts/golang-books/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-books/</guid><description><![CDATA[<h1 id="golang-书籍" class="headerLink">
    <a href="#golang-%e4%b9%a6%e7%b1%8d" class="header-mark"></a>Golang 书籍</h1><ul>
<li><a href="https://github.com/astaxie/build-web-application-with-golang" target="_blank" rel="noopener noreferrer">A golang ebook intro how to build a web with golang</a></li>
<li><a href="https://github.com/eddycjy/blog" target="_blank" rel="noopener noreferrer">煎鱼的迷之博客</a></li>
</ul>]]></description></item><item><title>Golang 模板</title><link>https://rd163.visword.com/posts/golang-template/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-template/</guid><description><![CDATA[<h1 id="golang-模板" class="headerLink">
    <a href="#golang-%e6%a8%a1%e6%9d%bf" class="header-mark"></a>Golang 模板</h1><h2 id="标准库实现" class="headerLink">
    <a href="#%e6%a0%87%e5%87%86%e5%ba%93%e5%ae%9e%e7%8e%b0" class="header-mark"></a>标准库实现</h2><p>参考</p>
<ul>
<li><a href="https://www.cnblogs.com/f-ck-need-u/p/10053124.html" target="_blank" rel="noopener noreferrer">Go标准库：Go template用法详解 </a></li>
<li><a href="https://www.cnblogs.com/f-ck-need-u/p/10035768.html" target="_blank" rel="noopener noreferrer">Go标准库：深入剖析Go template </a></li>
</ul>
<p><strong>踩坑记录</strong></p>
<p>模板默认会对一些参数进行转义，因此渲染后的字符串可能与预期不符。</p>]]></description></item><item><title>Golang 服务相关的库</title><link>https://rd163.visword.com/posts/golang-service-libs/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-service-libs/</guid><description><![CDATA[<h1 id="golang-服务相关的库" class="headerLink">
    <a href="#golang-%e6%9c%8d%e5%8a%a1%e7%9b%b8%e5%85%b3%e7%9a%84%e5%ba%93" class="header-mark"></a>Golang 服务相关的库</h1><ul>
<li><a href="https://github.com/zeromicro/go-zero" target="_blank" rel="noopener noreferrer">go-zero 一个集成了各种工程实践的 web 和 rpc 框架</a></li>
<li><a href="https://github.com/trpc-group/trpc-go" target="_blank" rel="noopener noreferrer">trpc-go</a></li>
<li><a href="https://github.com/gin-gonic/gin" target="_blank" rel="noopener noreferrer">gin</a></li>
<li><a href="https://github.com/beego/beego" target="_blank" rel="noopener noreferrer">Beego </a></li>
<li><a href="https://github.com/grpc-ecosystem/grpc-gateway" target="_blank" rel="noopener noreferrer">gRPC-Gateway gRPC to JSON proxy generator following the gRPC HTTP spec</a></li>
</ul>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://www.liwenzhou.com/posts/Go/grpc-gateway/" target="_blank" rel="noopener noreferrer">gRPC-Gateway使用指南</a></li>
</ul>]]></description></item><item><title>Golang 程序加载配置最佳实践</title><link>https://rd163.visword.com/posts/best-practice-for-go-conf/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/best-practice-for-go-conf/</guid><description><![CDATA[<h1 id="golang-程序加载配置最佳实践" class="headerLink">
    <a href="#golang-%e7%a8%8b%e5%ba%8f%e5%8a%a0%e8%bd%bd%e9%85%8d%e7%bd%ae%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" class="header-mark"></a>Golang 程序加载配置最佳实践</h1><h2 id="常用配置文件读取方式" class="headerLink">
    <a href="#%e5%b8%b8%e7%94%a8%e9%85%8d%e7%bd%ae%e6%96%87%e4%bb%b6%e8%af%bb%e5%8f%96%e6%96%b9%e5%bc%8f" class="header-mark"></a>常用配置文件读取方式</h2><h3 id="1-json" class="headerLink">
    <a href="#1-json" class="header-mark"></a>1. json</h3><ul>
<li>内置</li>
<li><a href="https://github.com/json-iterator/go" target="_blank" rel="noopener noreferrer">json-iterator for go</a></li>
<li><a href="https://github.com/tidwall/gjson" target="_blank" rel="noopener noreferrer">GJSON </a></li>
</ul>
<h3 id="2-yaml" class="headerLink">
    <a href="#2-yaml" class="header-mark"></a>2. yaml</h3><ul>
<li><a href="https://github.com/go-yaml/yaml" target="_blank" rel="noopener noreferrer">YAML</a></li>
</ul>
<h3 id="3-toml" class="headerLink">
    <a href="#3-toml" class="header-mark"></a>3. toml</h3><ul>
<li><a href="https://github.com/BurntSushi/toml" target="_blank" rel="noopener noreferrer">TOML</a></li>
</ul>
<h3 id="4-ini" class="headerLink">
    <a href="#4-ini" class="header-mark"></a>4. ini</h3><ul>
<li><a href="https://github.com/go-ini/ini" target="_blank" rel="noopener noreferrer">INI</a></li>
</ul>
<h3 id="5-hcl" class="headerLink">
    <a href="#5-hcl" class="header-mark"></a>5. HCL</h3><ul>
<li><a href="https://github.com/hashicorp/hcl" target="_blank" rel="noopener noreferrer">HCL</a></li>
</ul>
<h3 id="其它库" class="headerLink">
    <a href="#%e5%85%b6%e5%ae%83%e5%ba%93" class="header-mark"></a>其它库</h3><ul>
<li><a href="https://github.com/spf13/viper" target="_blank" rel="noopener noreferrer">Viper</a> Viper是一个完全配置解析库，可以支持上面所有类型的配置文件的解析。</li>
</ul>
<h2 id="最佳实践" class="headerLink">
    <a href="#%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" class="header-mark"></a>最佳实践</h2><p>最好的方式应该是能够同时支持 从 命令行参数、配置文件、环境变量 三种方式加载参数写入到特定的结构中。</p>]]></description></item><item><title>Golang 常用日志库</title><link>https://rd163.visword.com/posts/golang-log-libs/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-log-libs/</guid><description><![CDATA[<h1 id="golang-常用日志库" class="headerLink">
    <a href="#golang-%e5%b8%b8%e7%94%a8%e6%97%a5%e5%bf%97%e5%ba%93" class="header-mark"></a>Golang 常用日志库</h1><ul>
<li><a href="https://github.com/golang/glog" target="_blank" rel="noopener noreferrer">Google Glog 的Go语言版本</a></li>
<li><a href="https://github.com/uber-go/zap" target="_blank" rel="noopener noreferrer">zap 日志</a></li>
<li><a href="https://github.com/sirupsen/logrus" target="_blank" rel="noopener noreferrer">logrus</a></li>
<li><a href="https://github.com/mix-go/logrus" target="_blank" rel="noopener noreferrer">logrus 扩展</a></li>
</ul>]]></description></item><item><title>Golang 常用的程序库</title><link>https://rd163.visword.com/posts/golang-util-libs/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-util-libs/</guid><description><![CDATA[<h1 id="golang-常用的程序库" class="headerLink">
    <a href="#golang-%e5%b8%b8%e7%94%a8%e7%9a%84%e7%a8%8b%e5%ba%8f%e5%ba%93" class="header-mark"></a>Golang 常用的程序库</h1><h2 id="通用库" class="headerLink">
    <a href="#%e9%80%9a%e7%94%a8%e5%ba%93" class="header-mark"></a>通用库</h2><ul>
<li><a href="https://github.com/duke-git/lancet" target="_blank" rel="noopener noreferrer">lancet（柳叶刀</a> 是一个全面、高效、可复用的go语言工具函数库。 lancet受到了java apache common包和lodash.js的启发。</li>
</ul>
<h2 id="类型转换" class="headerLink">
    <a href="#%e7%b1%bb%e5%9e%8b%e8%bd%ac%e6%8d%a2" class="header-mark"></a>类型转换</h2><p><strong>cast</strong></p>]]></description></item><item><title>Golang web框架</title><link>https://rd163.visword.com/posts/golang-web-framework/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-web-framework/</guid><description><![CDATA[<h1 id="golang-web框架" class="headerLink">
    <a href="#golang-web%e6%a1%86%e6%9e%b6" class="header-mark"></a>Golang web框架</h1><h2 id="fiber" class="headerLink">
    <a href="#fiber" class="header-mark"></a>fiber</h2><ul>
<li><a href="https://github.com/gofiber/fiber" target="_blank" rel="noopener noreferrer">fiber</a> Express inspired web framework written in Go</li>
</ul>
<p>基于Fiber的开源项目</p>
<ul>
<li><a href="https://github.com/Finb/bark-server" target="_blank" rel="noopener noreferrer">bark-server</a></li>
</ul>
<h2 id="macaron" class="headerLink">
    <a href="#macaron" class="header-mark"></a>macaron</h2><ul>
<li><a href="https://github.com/go-macaron/macaron" target="_blank" rel="noopener noreferrer">macaron</a></li>
</ul>
<h2 id="beego" class="headerLink">
    <a href="#beego" class="header-mark"></a>beego</h2><ul>
<li><a href="https://github.com/astaxie/beego" target="_blank" rel="noopener noreferrer">beego</a></li>
</ul>
<h2 id="gin" class="headerLink">
    <a href="#gin" class="header-mark"></a>gin</h2><ul>
<li><a href="https://github.com/gin-gonic/gin" target="_blank" rel="noopener noreferrer">gin</a></li>
</ul>
<h2 id="echo" class="headerLink">
    <a href="#echo" class="header-mark"></a>echo</h2><ul>
<li><a href="https://github.com/labstack/echo" target="_blank" rel="noopener noreferrer">echo</a></li>
</ul>
<h2 id="chi" class="headerLink">
    <a href="#chi" class="header-mark"></a>chi</h2><ul>
<li><a href="https://github.com/go-chi/chi" target="_blank" rel="noopener noreferrer">chi</a></li>
</ul>
<h2 id="gorilla" class="headerLink">
    <a href="#gorilla" class="header-mark"></a>gorilla</h2><ul>
<li><a href="https://github.com/gorilla/mux" target="_blank" rel="noopener noreferrer">gorilla</a></li>
<li><a href="https://github.com/gorilla/websocket" target="_blank" rel="noopener noreferrer">websocket</a> 最广泛使用的 WebSocket 库。</li>
</ul>
<h2 id="fasthttp" class="headerLink">
    <a href="#fasthttp" class="header-mark"></a>fasthttp</h2><ul>
<li><a href="https://github.com/valyala/fasthttp" target="_blank" rel="noopener noreferrer">fasthttp</a></li>
</ul>
<h2 id="httprouter" class="headerLink">
    <a href="#httprouter" class="header-mark"></a>httprouter</h2><ul>
<li><a href="https://github.com/julienschmidt/httprouter" target="_blank" rel="noopener noreferrer">httprouter</a></li>
</ul>
<h2 id="hertz" class="headerLink">
    <a href="#hertz" class="header-mark"></a>Hertz</h2><p>Hertz[həːts] 是一个 Golang 微服务 HTTP 框架，最初fork自fasthttp，并在设计时参考了其他开源框架gin、echo 的优势，并结合字节跳动内部的需求，使其具有高易用性、高 性能、高扩展性等特点，目前在字节跳动内部已广泛使用。如今越来越多的微服务选择使用 Golang，如果对微服务性能有要求，又希望框架能够充分满足内部的可定制化需求，Hertz 会是一个不错的选择。</p>]]></description></item><item><title>golang web framework - macaron</title><link>https://rd163.visword.com/posts/golang-macaron/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-macaron/</guid><description><![CDATA[<h1 id="golang-web-framework---macaron" class="headerLink">
    <a href="#golang-web-framework---macaron" class="header-mark"></a>golang web framework - macaron</h1><p><a href="https://github.com/go-macaron/macaron" target="_blank" rel="noopener noreferrer">macaron</a> 是 Golang 开发的 Web Framework， 与 gin、beego 起名。详细的中文文档参考这里：</p>
<ul>
<li><a href="https://go-macaron.com/zh-cn" target="_blank" rel="noopener noreferrer">macaron 文档</a></li>
</ul>
<p>提供了子网址的强大路由，可以嵌套多组路由器，提供热加载，修改模板就会立刻在页面修改，采用模块化设计，可以非常方便替换组件，采用依赖注入加载组件，非常适合现代化工程项目，代码松耦合，适合开发大型团队项目。</p>]]></description></item><item><title>Github 开源替代方案</title><link>https://rd163.visword.com/posts/open-source-alternatives-for-github/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/open-source-alternatives-for-github/</guid><description><![CDATA[<h1 id="github-开源替代方案" class="headerLink">
    <a href="#github-%e5%bc%80%e6%ba%90%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88" class="header-mark"></a>Github 开源替代方案</h1><ul>
<li><a href="https://github.com/gogs/gogs" target="_blank" rel="noopener noreferrer">gogs</a> golang + template 实现</li>
<li><a href="https://github.com/go-gitea/gitea" target="_blank" rel="noopener noreferrer">gitea </a> golang + template + vite 实现， 该工程  2016 年从 Gogs fork而来, 但是做了很多改变.</li>
<li><a href="https://github.com/gitbucket/gitbucket" target="_blank" rel="noopener noreferrer">gitbucket</a> Scala 实现</li>
</ul>]]></description></item><item><title>Github Pages + jekyll 搭建个人网站和博客</title><link>https://rd163.visword.com/posts/github-pages-setup-with-jekyll/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/github-pages-setup-with-jekyll/</guid><description><![CDATA[<h1 id="github-pages--jekyll-搭建个人网站和博客" class="headerLink">
    <a href="#github-pages--jekyll-%e6%90%ad%e5%bb%ba%e4%b8%aa%e4%ba%ba%e7%bd%91%e7%ab%99%e5%92%8c%e5%8d%9a%e5%ae%a2" class="header-mark"></a>Github Pages + jekyll 搭建个人网站和博客</h1><p>Jekyll 是 Github Pages 官方支持的静态网站生成工具，优点是在可以直接github上使用vscode online编辑md，提交后，github会承担生成html的工作。除了Jekyll， 还有其它一些工具方案，如：</p>]]></description></item><item><title>Gitbook 输出为静态网站</title><link>https://rd163.visword.com/posts/gitbook-outfile/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbook-outfile/</guid><description><![CDATA[<h1 id="输出为静态网站" class="headerLink">
    <a href="#%e8%be%93%e5%87%ba%e4%b8%ba%e9%9d%99%e6%80%81%e7%bd%91%e7%ab%99" class="header-mark"></a>输出为静态网站</h1><p>你有两种方式输出一个静态的网站：</p>
<h2 id="本地预览是自动生成" class="headerLink">
    <a href="#%e6%9c%ac%e5%9c%b0%e9%a2%84%e8%a7%88%e6%98%af%e8%87%aa%e5%8a%a8%e7%94%9f%e6%88%90" class="header-mark"></a>本地预览是自动生成</h2><p>当你编辑好gitbook文档之后，你可以使用gitbook的命令来进行本地预览。</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">bash</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-10" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">$ gitbook serve ./<span class="o">{</span>book_name<span class="o">}</span></span></span></code></pre>
</div>
<p>gitbook会启动一个<code>4000</code>端口用于预览。</p>]]></description></item><item><title>Gitbook 输出格式</title><link>https://rd163.visword.com/posts/gitbook-output/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbook-output/</guid><description><![CDATA[<h1 id="图书输出" class="headerLink">
    <a href="#%e5%9b%be%e4%b9%a6%e8%be%93%e5%87%ba" class="header-mark"></a>图书输出</h1><p>目前为止，Gitbook支持如下输出：</p>
<ul>
<li>静态HTML，可以看作一个静态网站</li>
<li>PDF格式</li>
<li>eBook格式</li>
<li>单个HTML文件</li>
<li>JSON格式</li>
</ul>
<p>我们这里着重说下如何输出静态的HTML和PDF文件。</p>]]></description></item><item><title>Gitbook 输出PDF</title><link>https://rd163.visword.com/posts/gitbook-pdfandebook/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbook-pdfandebook/</guid><description><![CDATA[<h1 id="输出pdf" class="headerLink">
    <a href="#%e8%be%93%e5%87%bapdf" class="header-mark"></a>输出PDF</h1><p>输出为PDF文件，需要先安装<code>gitbook pdf</code></p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">bash</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-1" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">$ npm install gitbook-pdf -g</span></span></code></pre>
</div>
<blockquote>
  <p>如果在安装gitbook-pdf时，觉得下载<code>phantomjs</code>包太慢的话，你可以到<code>phantomjs</code>的官方网站上去下载。</p>]]></description></item><item><title>Gitbook 使用入门</title><link>https://rd163.visword.com/posts/gitbook-get-started/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbook-get-started/</guid><description><![CDATA[<h1 id="gitbook-使用入门" class="headerLink">
    <a href="#gitbook-%e4%bd%bf%e7%94%a8%e5%85%a5%e9%97%a8" class="header-mark"></a>Gitbook 使用入门</h1><blockquote>
  <p>GitBook 是一个基于 Node.js 的命令行工具，可使用 Github/Git 和 Markdown 来制作精美的电子书。</p>

</blockquote><p>本书将简单介绍如何安装、编写、生成、发布一本在线图书。</p>
<h2 id="支持格式" class="headerLink">
    <a href="#%e6%94%af%e6%8c%81%e6%a0%bc%e5%bc%8f" class="header-mark"></a>支持格式</h2><p>GitBook支持输出多种文档格式，如：</p>
<ul>
<li>静态站点：GitBook默认输出该种格式，生成的静态站点可直接托管搭载Github Pages服务上；</li>
<li>PDF：需要安装gitbook-pdf依赖；</li>
<li>eBook：需要安装ebook-convert；</li>
<li>单HTML网页：支持将内容输出为单页的HTML，不过一般用在将电子书格式转换为PDF或eBook的中间过程；</li>
<li>JSON：一般用于电子书的调试或元数据提取。</li>
</ul>
<h2 id="gitbook项目地址" class="headerLink">
    <a href="#gitbook%e9%a1%b9%e7%9b%ae%e5%9c%b0%e5%9d%80" class="header-mark"></a>Gitbook项目地址</h2><ul>
<li>GitBook项目官网：<a href="http://www.gitbook.io" target="_blank" rel="noopener noreferrer">http://www.gitbook.io</a></li>
<li>GitBook Github地址：<a href="https://github.com/GitbookIO/gitbook" target="_blank" rel="noopener noreferrer">https://github.com/GitbookIO/gitbook</a></li>
</ul>
<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li>仓库：https://github.com/tonydeng/gitbook-zh/tree/master/gitbook-howtouse</li>
<li>在线阅读：http://tonydeng.github.io/gitbook-zh/gitbook-howtouse</li>
</ul>]]></description></item><item><title>Gitbook 命令行速览</title><link>https://rd163.visword.com/posts/gitbookcli/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbookcli/</guid><description><![CDATA[<h1 id="gitbook命令行速览" class="headerLink">
    <a href="#gitbook%e5%91%bd%e4%bb%a4%e8%a1%8c%e9%80%9f%e8%a7%88" class="header-mark"></a>Gitbook命令行速览</h1><p>Gitbook是一个命令行工具，使用方法：</p>
<p><strong>本地预览</strong></p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">bash</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-1" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">$ gitbook serve ./<span class="o">{</span>book_name<span class="o">}</span></span></span></code></pre>
</div>
<p><strong>输出一个静态网站</strong></p>]]></description></item><item><title>Gitbook 简介</title><link>https://rd163.visword.com/posts/gitbook-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbook-intro/</guid><description><![CDATA[<h1 id="图书项目结构" class="headerLink">
    <a href="#%e5%9b%be%e4%b9%a6%e9%a1%b9%e7%9b%ae%e7%bb%93%e6%9e%84" class="header-mark"></a>图书项目结构</h1><p><code>README.md</code>和<code>SUMMARY.md</code>
是Gitbook项目必备的两个文件，也就是一本最简单的gitbook也必须含有这两个文件，它们在一本Gitbook中具有不同的用处。</p>
<h2 id="readmemd-与-summary编写" class="headerLink">
    <a href="#readmemd-%e4%b8%8e-summary%e7%bc%96%e5%86%99" class="header-mark"></a>README.md 与 SUMMARY编写</h2><h2 id="使用语法" class="headerLink">
    <a href="#%e4%bd%bf%e7%94%a8%e8%af%ad%e6%b3%95" class="header-mark"></a>使用语法</h2><p>在Gitbook中所有文字的编写都使用<code>Markdown</code>语法。</p>]]></description></item><item><title>Gitbook 基本安装</title><link>https://rd163.visword.com/posts/gitbook-how-to-use/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gitbook-how-to-use/</guid><description><![CDATA[<h1 id="基本安装" class="headerLink">
    <a href="#%e5%9f%ba%e6%9c%ac%e5%ae%89%e8%a3%85" class="header-mark"></a>基本安装</h1><p>Gitbook的安装及命令行的快速功能预览说明。</p>
<h2 id="nodejs安装" class="headerLink">
    <a href="#nodejs%e5%ae%89%e8%a3%85" class="header-mark"></a>Node.js安装</h2><p><img class="tw:inline" loading="lazy" src='../imgs/node.js.png'   alt="Node.js"  ></p>
<blockquote>
  <p>Node.js是一个基于Chrome Javascript运行时建立的一个平台，用来方便的搭建快速的，易于扩展的网络应用。</p>

</blockquote><blockquote>
  <p>Node.js借助事件驱动，非阻塞I/O模型变得轻量和高效，非常适合run across distributed devices的data-intensivede 的实时应用。</p>]]></description></item><item><title>Git 服务搭建</title><link>https://rd163.visword.com/posts/git-server/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/git-server/</guid><description><![CDATA[<h1 id="git-服务搭建" class="headerLink">
    <a href="#git-%e6%9c%8d%e5%8a%a1%e6%90%ad%e5%bb%ba" class="header-mark"></a>Git 服务搭建</h1><ul>
<li>
<p><a href="https://www.ruanyifeng.com/blog/2022/10/git-server.html" target="_blank" rel="noopener noreferrer">最简单的 Git 服务器</a></p>
</li>
<li>
<p><a href="https://xiaowenxia.github.io/git-inside/2021/02/23/git-internal-protocol.1/index.html" target="_blank" rel="noopener noreferrer">Git 底层原理：传输协议分析（一）</a></p>
</li>
<li>
<p><a href="https://xiaowenxia.github.io/git-inside/2021/02/23/git-internal-protocol.2/" target="_blank" rel="noopener noreferrer">Git 底层原理：传输协议分析（二）</a></p>
</li>
</ul>]]></description></item><item><title>Gin 开发后台服务最佳实践</title><link>https://rd163.visword.com/posts/best-practice-for-gin/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/best-practice-for-gin/</guid><description><![CDATA[<h1 id="gin-开发后台服务最佳实践" class="headerLink">
    <a href="#gin-%e5%bc%80%e5%8f%91%e5%90%8e%e5%8f%b0%e6%9c%8d%e5%8a%a1%e6%9c%80%e4%bd%b3%e5%ae%9e%e8%b7%b5" class="header-mark"></a>Gin 开发后台服务最佳实践</h1><p><a href="https://github.com/gin-gonic/gin" target="_blank" rel="noopener noreferrer">gin</a> 是一个 golang 实现的 http web 框架。</p>
<p><a href="https://github.com/skyhee/gin-doc-cn" target="_blank" rel="noopener noreferrer">go 语言框架 gin 的中文文档</a> 介绍了 路由、无缝重启、中间件、db接入常用方法。</p>
<h2 id="脚手架项目" class="headerLink">
    <a href="#%e8%84%9a%e6%89%8b%e6%9e%b6%e9%a1%b9%e7%9b%ae" class="header-mark"></a>脚手架项目</h2><p>github上有这么些 stars 数排名较高的：</p>
<ul>
<li>
<p><a href="https://github.com/flipped-aurora/gin-vue-admin" target="_blank" rel="noopener noreferrer">gin-vue-admin</a> Vite+Vue3+Gin拥有AI辅助的基础开发平台，支持TS和JS混用。它集成了JWT鉴权、权限管理、动态路由、casbin鉴权、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器、表单生成器和可配置的导入导出等开发必备功能。</p>]]></description></item><item><title>fzf 使用笔记</title><link>https://rd163.visword.com/posts/fzf/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/fzf/</guid><description><![CDATA[<h1 id="fzf-使用笔记" class="headerLink">
    <a href="#fzf-%e4%bd%bf%e7%94%a8%e7%ac%94%e8%ae%b0" class="header-mark"></a>fzf 使用笔记</h1><p>fzf 是一款使用 GO 语言编写的交互式的命令行工具, 可以用来查找任何 列表内容、文件、历史命令、 本机绑定的host、 进程、 Git 分支、进程 等.</p>]]></description></item><item><title>Docker容器时间如何与宿主机同步问题解决方案</title><link>https://rd163.visword.com/posts/how-to-fix-docker-timezone/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/how-to-fix-docker-timezone/</guid><description><![CDATA[<h1 id="docker容器时间如何与宿主机同步问题解决方案" class="headerLink">
    <a href="#docker%e5%ae%b9%e5%99%a8%e6%97%b6%e9%97%b4%e5%a6%82%e4%bd%95%e4%b8%8e%e5%ae%bf%e4%b8%bb%e6%9c%ba%e5%90%8c%e6%ad%a5%e9%97%ae%e9%a2%98%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="header-mark"></a>Docker容器时间如何与宿主机同步问题解决方案</h1><p>宿主机设置了时区，而Docker容器并没有设置，会导致导致两者相差8小时
一般来说， 原因是docker 和宿主机所采用的时区不一样。</p>
<ul>
<li>宿主机采用：CST应该是指（China Shanghai Time，东八区时间）</li>
<li>Docker采用：UTC应该是指（Coordinated Universal Time，标准时间）</li>
</ul>
<p>所以，必须统一两者的时区</p>]]></description></item><item><title>docker-compose 简介</title><link>https://rd163.visword.com/posts/docker-compose-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/docker-compose-intro/</guid><description><![CDATA[<h1 id="docker-compose-简介" class="headerLink">
    <a href="#docker-compose-%e7%ae%80%e4%bb%8b" class="header-mark"></a>docker-compose 简介</h1><h2 id="docker-compose-中volumes参数说明" class="headerLink">
    <a href="#docker-compose-%e4%b8%advolumes%e5%8f%82%e6%95%b0%e8%af%b4%e6%98%8e" class="header-mark"></a>docker-compose 中volumes参数说明</h2><p>docker-compose 使用数据卷进行持久化</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-13" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">    <span class="n">ghost</span><span class="p">:</span>  
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">      <span class="n">image</span><span class="p">:</span> <span class="n">ghost</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">      <span class="n">volumes</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">        <span class="o">-</span> <span class="o">./</span><span class="n">ghost</span><span class="o">/</span><span class="n">config</span><span class="o">.</span><span class="n">js</span><span class="p">:</span><span class="o">/</span><span class="k">var</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">ghost</span><span class="o">/</span><span class="n">config</span><span class="o">.</span><span class="n">js</span></span></span></code></pre>
</div>
<p>使用卷标映射</p>]]></description></item><item><title>DNS 全局负载均衡（GSLB）介绍</title><link>https://rd163.visword.com/posts/dns-gslb/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/dns-gslb/</guid><description><![CDATA[<h1 id="dns-全局负载均衡gslb介绍" class="headerLink">
    <a href="#dns-%e5%85%a8%e5%b1%80%e8%b4%9f%e8%bd%bd%e5%9d%87%e8%a1%a1gslb%e4%bb%8b%e7%bb%8d" class="header-mark"></a>DNS 全局负载均衡（GSLB）介绍</h1><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://cloud.tencent.com/developer/article/2085462" target="_blank" rel="noopener noreferrer">DNS 全局负载均衡（GSLB）基本原理[通俗易懂]</a></li>
<li><a href="https://jjayyyyyyy.github.io/2017/05/17/GSLB.html" target="_blank" rel="noopener noreferrer">全局负载均衡GSLB学习笔记</a></li>
</ul>]]></description></item><item><title>dns 基础知识</title><link>https://rd163.visword.com/posts/dns-basic/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/dns-basic/</guid><description><![CDATA[<h1 id="dns-基础知识" class="headerLink">
    <a href="#dns-%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86" class="header-mark"></a>dns 基础知识</h1><h2 id="一基础知识" class="headerLink">
    <a href="#%e4%b8%80%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86" class="header-mark"></a>一、基础知识</h2><p><strong>记录类型</strong></p>
<ul>
<li>A 记录：它记录域名与 IPv4 地址的对应关系。目前用的最多的 DNS 记录就是这个。</li>
<li>AAAA 记录：它对应的是 IPv6，可以理解成新一代的 A 记录。以后会用的越来越多的。</li>
<li>NS 记录：记录 DNS 域对应的权威服务器域名，权威服务器域名必须要有对应的 A 记录。通过这个记录，可以将子域名的解析分配给别的 DNS 服务器。</li>
<li>CNAME 记录: 记录域名与另一个域名的对应关系，用于给域名起别名。这个用得也挺多的。</li>
<li>MX 记录：记录域名对应的邮件服务器域名，邮件服务器的域名必须要有对应的 A 记录。</li>
<li>SRV 记录：SRV 记录用于提供服务发现。SRV 记录的内容有固定格式：优先级 权重 端口 目标地址，例如0 5 5060 sipserver.example.com</li>
</ul>
<p><strong>解析方式</strong></p>]]></description></item><item><title>django-cms</title><link>https://rd163.visword.com/posts/django-cms-intro/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/django-cms-intro/</guid><description><![CDATA[<h1 id="django-cms" class="headerLink">
    <a href="#django-cms" class="header-mark"></a>django-cms</h1><p>由 Django 编写的企业级 CMS，它功能实用、安全可靠，支持拖拽上传图片、轮播图、Docker 部署等功能，可轻松进行二次开发，多用于构建企业官网，比如：国家地理等网站就是基于它开发而成。</p>]]></description></item><item><title>dive</title><link>https://rd163.visword.com/posts/docker-dive/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/docker-dive/</guid><description><![CDATA[<h1 id="dive" class="headerLink">
    <a href="#dive" class="header-mark"></a>dive</h1><p>这个工具可以显示 Docker 镜像文件每一层的内容。</p>
<ul>
<li><a href="https://github.com/wagoodman/dive" target="_blank" rel="noopener noreferrer">dive</a></li>
</ul>]]></description></item><item><title>CSRF</title><link>https://rd163.visword.com/posts/http-csrf/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/http-csrf/</guid><description><![CDATA[<h1 id="csrf" class="headerLink">
    <a href="#csrf" class="header-mark"></a>CSRF</h1><p>CSRF 是指跨站的请求伪造，这种攻击方法会强迫使用者在他们已经验证身份的网站中，执行某些恶意的伪造操作，因为已经验证过该使用者，所以网站就会以操作来自该使用者，因此接受了该操作。举例来说，某个使用者登入银行帐户后，去逛别的网站，但不小心点开恶意网站，该恶意网站中的代码用这名使用者的名义，进行未经同意的转帐操作。</p>]]></description></item><item><title>Conda的替代品</title><link>https://rd163.visword.com/posts/alternatives-for-conda/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/alternatives-for-conda/</guid><description><![CDATA[<h1 id="conda的替代品" class="headerLink">
    <a href="#conda%e7%9a%84%e6%9b%bf%e4%bb%a3%e5%93%81" class="header-mark"></a>Conda的替代品</h1><p>由于 Anaconda MiniConda 开始收费了，我们可以用 MiniForge 或 Mamba 来代替 Conda。</p>
<ul>
<li><a href="https://github.com/conda-forge/miniforge" target="_blank" rel="noopener noreferrer">Miniforge</a></li>
<li><a href="https://github.com/mamba-org/mamba" target="_blank" rel="noopener noreferrer">Mamba</a></li>
</ul>]]></description></item><item><title>C/C++ 实现的服务器和服务器相关的库</title><link>https://rd163.visword.com/posts/cpp-servers/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cpp-servers/</guid><description><![CDATA[<h1 id="cc-实现的服务器和服务器相关的库" class="headerLink">
    <a href="#cc-%e5%ae%9e%e7%8e%b0%e7%9a%84%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%92%8c%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%9b%b8%e5%85%b3%e7%9a%84%e5%ba%93" class="header-mark"></a>C/C++ 实现的服务器和服务器相关的库</h1><h2 id="http-server" class="headerLink">
    <a href="#http-server" class="header-mark"></a>Http Server</h2><h3 id="nginx" class="headerLink">
    <a href="#nginx" class="header-mark"></a>NGINX</h3><h3 id="haproxy" class="headerLink">
    <a href="#haproxy" class="header-mark"></a>HAProxy</h3><h3 id="envoy" class="headerLink">
    <a href="#envoy" class="header-mark"></a>Envoy</h3><h3 id="apache-http-server" class="headerLink">
    <a href="#apache-http-server" class="header-mark"></a>Apache HTTP Server</h3><h3 id="apache-traffic-server" class="headerLink">
    <a href="#apache-traffic-server" class="header-mark"></a>Apache Traffic Server</h3><ul>
<li><a href="https://github.com/apache/trafficserver" target="_blank" rel="noopener noreferrer">Apache Traffic Server</a></li>
</ul>
<p>Apache Traffic Server™ 是一种高性能 Web 代理缓存，它通过在网络边缘缓存经常访问的信息来提高网络效率和性能。这使内容在物理上更接近最终用户，同时实现更快的交付并减少带宽使用。Traffic Server 旨在通过最大化现有和可用带宽来改善企业、互联网服务提供商 (ISP)、骨干提供商和大型 Intranet 的内容交付。</p>]]></description></item><item><title>Boinc 网络通信协议</title><link>https://rd163.visword.com/posts/distributed-computation-boinc-net-protocol/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/distributed-computation-boinc-net-protocol/</guid><description><![CDATA[<h1 id="boinc-网络通信协议" class="headerLink">
    <a href="#boinc-%e7%bd%91%e7%bb%9c%e9%80%9a%e4%bf%a1%e5%8d%8f%e8%ae%ae" class="header-mark"></a>Boinc 网络通信协议</h1><p>官网文档这里有作简单介绍：</p>
<ul>
<li><a href="https://github.com/BOINC/boinc/wiki/CommIntro" target="_blank" rel="noopener noreferrer">网络交互概览</a></li>
</ul>
<p><img class="tw:inline" loading="lazy" src='https://raw.githubusercontent.com/wiki/BOINC/boinc/comm.png'   alt="boinc-net-proto"  ></p>
<p>为了更好的观测到boinc客户端与服务器的通信流程，可以在客户端开启 http_debug http_xfer_debug 调试选项， 当加入到新项目时，可在日志中观察到Boinc客户端和Server之间的通信协议内容。</p>]]></description></item><item><title>Boinc 任务分配</title><link>https://rd163.visword.com/posts/distributed-computation-boinc-job-assign/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/distributed-computation-boinc-job-assign/</guid><description><![CDATA[<h1 id="boinc-任务分配" class="headerLink">
    <a href="#boinc-%e4%bb%bb%e5%8a%a1%e5%88%86%e9%85%8d" class="header-mark"></a>Boinc 任务分配</h1><p>参考 <a href="https://github.com/BOINC/boinc/wiki/AssignedWork" target="_blank" rel="noopener noreferrer">AssignedWork</a></p>
<p>任务分配分两种情况 广播(Broadcast) 和 绑定（targeted jobs）</p>
<p>先从从任务提交命令说起。</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-13" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">bin/create_work --appname worker --wu_name worker_nodelete input</span></span></code></pre>
</div>
<p>create_work 的一些重要参数说明：</p>]]></description></item><item><title>Boinc 后台服务搭建</title><link>https://rd163.visword.com/posts/distributed-computation-boinc-server-setup/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/distributed-computation-boinc-server-setup/</guid><description><![CDATA[<h1 id="boinc-后台服务搭建" class="headerLink">
    <a href="#boinc-%e5%90%8e%e5%8f%b0%e6%9c%8d%e5%8a%a1%e6%90%ad%e5%bb%ba" class="header-mark"></a>Boinc 后台服务搭建</h1><h2 id="源码编译安装部署" class="headerLink">
    <a href="#%e6%ba%90%e7%a0%81%e7%bc%96%e8%af%91%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2" class="header-mark"></a>源码编译安装部署</h2><p>参考  <a href="https://boinc.berkeley.edu/trac/wiki/ServerIntro" target="_blank" rel="noopener noreferrer">Boinc Server搭建</a></p>
<p><strong>用户和组</strong></p>
<p>BOINC server programs 运行需要两个不同的用户账号:</p>
<ul>
<li>Web账号： 即Apache http服务需要的账号， 调度程序、文件上传以及Web程序使用该账号运行 (不同Linux发行版该账号可能不同，如 Fedora 叫：&lsquo;apache&rsquo;;  Debian 叫 &lsquo;www-data&rsquo;).</li>
<li>项目账号： 其它程序的运行，主要是任务管理程序， 该账号不建议用root， 可以用一个已经存在的用户账号或者新建一个账号，如 boincadm。</li>
</ul>
<p>创建用户</p>]]></description></item><item><title>Auth-Wiki</title><link>https://rd163.visword.com/posts/auth-wiki/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/auth-wiki/</guid><description><![CDATA[<h1 id="auth-wiki" class="headerLink">
    <a href="#auth-wiki" class="header-mark"></a>Auth-Wiki</h1><p>一个开源维基网站，收录各种与身份验证、授权和身份管理相关的条目，解释很详细。并且支持各国语言。</p>
<ul>
<li><a href="https://github.com/logto-io/auth-wiki" target="_blank" rel="noopener noreferrer">auth-wiki github</a></li>
<li><a href="https://auth.wiki/zh" target="_blank" rel="noopener noreferrer">sites</a></li>
</ul>]]></description></item><item><title>Android 应用程序中的 Coredump 抓取与分析</title><link>https://rd163.visword.com/posts/android-debug-coredump/</link><pubDate>Sun, 12 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/android-debug-coredump/</guid><description><![CDATA[<h1 id="android-应用程序中的-coredump-抓取与分析" class="headerLink">
    <a href="#android-%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e4%b8%ad%e7%9a%84-coredump-%e6%8a%93%e5%8f%96%e4%b8%8e%e5%88%86%e6%9e%90" class="header-mark"></a>Android 应用程序中的 Coredump 抓取与分析</h1><h2 id="coredump-开启" class="headerLink">
    <a href="#coredump-%e5%bc%80%e5%90%af" class="header-mark"></a>coredump 开启</h2><h2 id="coredump-调试" class="headerLink">
    <a href="#coredump-%e8%b0%83%e8%af%95" class="header-mark"></a>coredump 调试</h2><h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://cloud.baidu.com/article/3305315" target="_blank" rel="noopener noreferrer">Android 应用程序中的 Coredump 抓取与分析</a></li>
<li><a href="https://www.jianshu.com/p/7751fe02063d" target="_blank" rel="noopener noreferrer">Android P 开启抓取Coredump功能</a></li>
</ul>]]></description></item><item><title>使用 Certbot 为 Nginx 网站服务器设置永久免费的 HTTPS 证书</title><link>https://rd163.visword.com/posts/nginx-free-certificates-with-certbot/</link><pubDate>Mon, 13 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/nginx-free-certificates-with-certbot/</guid><description><![CDATA[<h1 id="使用-certbot-为-nginx-网站服务器设置永久免费的-https-证书" class="headerLink">
    <a href="#%e4%bd%bf%e7%94%a8-certbot-%e4%b8%ba-nginx-%e7%bd%91%e7%ab%99%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%ae%be%e7%bd%ae%e6%b0%b8%e4%b9%85%e5%85%8d%e8%b4%b9%e7%9a%84-https-%e8%af%81%e4%b9%a6" class="header-mark"></a>使用 Certbot 为 Nginx 网站服务器设置永久免费的 HTTPS 证书</h1><p>目前流行的设置https证书的方案有2种：</p>
<ul>
<li><a href="https://github.com/acmesh-official/acme.sh" target="_blank" rel="noopener noreferrer">acme</a> 采用纯Shell实现， 并且有完善的中文文档。【只能支持Nginx配置安装在标准目录，如果自定义了配置目录，则无法使用】</li>
<li>certbot</li>
</ul>
<p>本文介绍第二种方式。</p>]]></description></item><item><title>macOS 常用快捷键</title><link>https://rd163.visword.com/posts/mac-shortcut-key/</link><pubDate>Mon, 13 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/mac-shortcut-key/</guid><description><![CDATA[<h1 id="1-macos-快捷键简介" class="headerLink">
    <a href="#1-macos-%e5%bf%ab%e6%8d%b7%e9%94%ae%e7%ae%80%e4%bb%8b" class="header-mark"></a>1. macOS 快捷键简介</h1><p>macOS 上有几个常用的修饰键： <strong>Command（或 Cmd）⌘</strong>、<strong>Option（或 Alt）⌥</strong>、<strong>Caps Lock ⇪</strong>、<strong>Shift ⇧</strong>、<strong>Control（或 Ctrl）⌃</strong>、<strong>Fn</strong>。</p>]]></description></item><item><title>Python Http 客户端库</title><link>https://rd163.visword.com/posts/python-http-client-libs/</link><pubDate>Wed, 15 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-http-client-libs/</guid><description><![CDATA[<h2 id="urlliburllib2" class="headerLink">
    <a href="#urlliburllib2" class="header-mark"></a>urllib、urllib2</h2><p>Python2中早期使用的http库 urllib、urllib2 ，给我们提供了许多方便的功能。</p>
<h2 id="requests" class="headerLink">
    <a href="#requests" class="header-mark"></a>requests</h2><p>requests 是使用率非常高的 HTTP 库.</p>
<p>异常情况处理说明：</p>
<p>在发送HTTP请求获取数据的过程中，可能会遭遇以下异常:</p>]]></description></item><item><title>macOS的defaults命令</title><link>https://rd163.visword.com/posts/mac-cmd-defaults/</link><pubDate>Tue, 21 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/mac-cmd-defaults/</guid><description><![CDATA[<h1 id="1-macos的defaults命令" class="headerLink">
    <a href="#1-macos%e7%9a%84defaults%e5%91%bd%e4%bb%a4" class="header-mark"></a>1. macOS的defaults命令</h1><p>/usr/bin/defaults 是 Mac OS X系统默认配置的设置命令。</p>
<p><a href="https://macos-defaults.com/" target="_blank" rel="noopener noreferrer">macos-defaults.com/</a> 这个网站记录了 defaults 在修改 Docker、ScreenShots、Finder 等时的具体操作方法，并且是开源的。开源地址：</p>]]></description></item><item><title>怎么使用AI大模型画图</title><link>https://rd163.visword.com/posts/ai-drawing-with-model/</link><pubDate>Thu, 23 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ai-drawing-with-model/</guid><description><![CDATA[<h2 id="模型选择" class="headerLink">
    <a href="#%e6%a8%a1%e5%9e%8b%e9%80%89%e6%8b%a9" class="header-mark"></a>模型选择</h2><p>可以在 replicate 网站上寻找合适的绘图模型。</p>
<ul>
<li><a href="https://replicate.com/explore" target="_blank" rel="noopener noreferrer">replicate</a></li>
</ul>
<p>例如：图像生成（Generate images）模型，用户使用次数最多的是 字节跳动的这个 sdxl 模型, 但经过实际验证，flux-schnell的效果要更好：</p>]]></description></item><item><title>美国地址</title><link>https://rd163.visword.com/posts/american-address/</link><pubDate>Thu, 23 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/american-address/</guid><description><![CDATA[<h1 id="美国地址" class="headerLink">
    <a href="#%e7%be%8e%e5%9b%bd%e5%9c%b0%e5%9d%80" class="header-mark"></a>美国地址</h1><p>美国地址的格式是从小到大，先写名字，然后是道路地址，然后是市名、州名缩写和邮编。如果要写国家（USA），写在邮编后面。</p>
<p>名字很简单不谈了。道路地址的格式是「数字+街名+房号」。490 2nd St, Suite 300 就是「第二街 490 号 300 室」。数字前面不需要加「No.」，这是很多中国人会犯的错误。街道类型可能是 Street/Road/Drive/Lane/Highway 等等之一，通常缩写为 St/Rd/Dr/Ln/Hwy 等。独栋房屋没有房号不用写，如果是公寓楼或者办公楼，则在街名后面加逗号，空一格，然后写房号。公寓写 Apt. 300，办公楼写 Suite 300 或缩写为 Ste. 300。也可以简写为 #300，公寓和办公楼都适用。</p>]]></description></item><item><title>LLM时代下的AI网关</title><link>https://rd163.visword.com/posts/gateway-for-ai/</link><pubDate>Thu, 23 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/gateway-for-ai/</guid><description><![CDATA[<h2 id="ai-网关" class="headerLink">
    <a href="#ai-%e7%bd%91%e5%85%b3" class="header-mark"></a>AI 网关</h2><p>AI Gateway 也被称为大模型网关、AI 网关，是一个用于部署和管理人工智能（AI）模型的平台，在开源社区有对应技术实现。它为用户提供了一种方便的方式来部署和管理 AI 模型，无论这些模型是预训练的模型，还是用户自己开发的模型。AI Gateway 还提供了一种方式，让用户能够在需要的时候轻松地调用这些模型，例如在进行数据分析或开发新的 AI 应用程序时。此外，AI Gateway 还提供了各种工具，可以帮助用户监控模型的性能，以及进行模型的优化。</p>]]></description></item><item><title>使用 webp-tools 实现 webp与png、jpg 之间的格式转换</title><link>https://rd163.visword.com/posts/webp-format-conversion/</link><pubDate>Fri, 24 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/webp-format-conversion/</guid><description><![CDATA[<h2 id="安装-webp-tools" class="headerLink">
    <a href="#%e5%ae%89%e8%a3%85-webp-tools" class="header-mark"></a>安装 webp-tools</h2><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-10" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="c1">#ubuntu</span>
</span></span><span class="line"><span class="cl"><span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">webp</span>
</span></span><span class="line"><span class="cl"> 
</span></span><span class="line"><span class="cl"><span class="c1">#centos</span>
</span></span><span class="line"><span class="cl"><span class="n">yum</span> <span class="o">-</span><span class="n">y</span> <span class="n">install</span> <span class="n">libwebp</span><span class="o">-</span><span class="n">devel</span> <span class="n">libwebp</span><span class="o">-</span><span class="n">tools</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#macOS</span>
</span></span><span class="line"><span class="cl"><span class="n">brew</span> <span class="n">install</span> <span class="n">webp</span></span></span></code></pre>
</div>
<p>会生成几个工具:</p>]]></description></item><item><title>如何创建 XML 网站地图 (并向 Google 提交)</title><link>https://rd163.visword.com/posts/how-to-create-sitemap/</link><pubDate>Fri, 24 Jan 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/how-to-create-sitemap/</guid><description><![CDATA[<h1 id="网站地图sitemap" class="headerLink">
    <a href="#%e7%bd%91%e7%ab%99%e5%9c%b0%e5%9b%besitemap" class="header-mark"></a>网站地图（SiteMap）</h1><p>站点地图是一个网站所有链接的容器。很多网站的连接层次比较深，爬虫很难抓取到，站点地图可以方便爬虫抓取网站页面，通过抓取网站页面，清晰了解网站的架构，网站地图一般存放在根目录下并命名sitemap，为爬虫指路，增加网站重要内容页面的收录。站点地图就是根据网站的结构、框架、内容，生成的导航网页文件。站点地图对于提高用户体验有好处，它们为网站访问者指明方向，并帮助迷失的访问者找到他们想看的页面。</p>
<p>站点地图（sitemap）一般分为两种方式来记录，xml格式文件或者txt文件，一般两种文件中包含了该网站的所有链接，可以提交给爬虫去爬取，让搜索引擎更快的去收录网站内容</p>]]></description></item><item><title>DeepSeek 模型发展时间线</title><link>https://rd163.visword.com/posts/deepseek-models-development-timeline/</link><pubDate>Fri, 07 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/deepseek-models-development-timeline/</guid><description><![CDATA[<h2 id="2023年" class="headerLink">
    <a href="#2023%e5%b9%b4" class="header-mark"></a>2023年</h2><p>2023年7月：DeepSeek成立，总部位于杭州，专注于通用人工智能（AGI）与大模型研发</p>
<p><strong>DeepSeek Coder</strong></p>
<p>发布于2023年7月，支持多种编程语言的代码生成、调试和数据分析任务。</p>
<p><strong>DeepSeek LLM</strong></p>
<p>发布于2023年7月，包括7B和67B的base及chat版本。</p>]]></description></item><item><title>deepseek 部署方案</title><link>https://rd163.visword.com/posts/deepseek-deployment/</link><pubDate>Fri, 07 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/deepseek-deployment/</guid><description>&lt;p>DeepSeek是最近非常火的开源大模型，国产大模型 DeepSeek 凭借其优异的性能和对硬件资源的友好性，受到了众多开发者的关注。&lt;/p>
&lt;p>无奈，在使用时候deepseek总是提示服务器繁忙，请稍后再试。&lt;/p></description></item><item><title>deepseek 前端方案</title><link>https://rd163.visword.com/posts/deepseek-frontend/</link><pubDate>Sat, 08 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/deepseek-frontend/</guid><description><![CDATA[<p><a href="https://github.com/deepseek-ai/awesome-deepseek-integration" target="_blank" rel="noopener noreferrer">Awesome DeepSeek Integrations</a> 这里列举了DeepSeek 支持的所有前端项目。</p>
<p>经过测试， 最好用的是：</p>
<h3 id="1--chatbox" class="headerLink">
    <a href="#1--chatbox" class="header-mark"></a>1.  <a href="" rel="">Chatbox</a></h3><ul>
<li>特点是简洁，提供App和Web部署</li>
</ul>
<h3 id="2-open-webui" class="headerLink">
    <a href="#2-open-webui" class="header-mark"></a>2. <a href="https://github.com/open-webui/open-webui" target="_blank" rel="noopener noreferrer">open-webui</a></h3><ul>
<li>支持联网搜索</li>
<li>TTS</li>
<li>丰富的应用市场</li>
</ul>
<h3 id="3-lobe-chat" class="headerLink">
    <a href="#3-lobe-chat" class="header-mark"></a>3. <a href="https://github.com/lobehub/lobe-chat" target="_blank" rel="noopener noreferrer">Lobe Chat</a></h3><ul>
<li>TTS &amp; STT 语音会话</li>
<li>Text to Image 文生图</li>
<li>插件系统 (Tools Calling), 插件需要模型支持function call ， 具体原理参考:<a href="https://api-docs.deepseek.com/zh-cn/news/news0725" target="_blank" rel="noopener noreferrer">DeepSeek API 升级，支持续写、FIM、Function Calling、JSON Output</a></li>
<li>助手市场 (GPTs)</li>
</ul>
<p>docker 部署：</p>]]></description></item><item><title>deepseek 联网搜索方案</title><link>https://rd163.visword.com/posts/deepseek-web-search-api/</link><pubDate>Sat, 08 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/deepseek-web-search-api/</guid><description><![CDATA[<p>联网搜索实现方案，参考: <a href="https://zhuanlan.zhihu.com/p/673524057" target="_blank" rel="noopener noreferrer">基于ChatGPT开发Agent实现互联网内容搜索</a></p>
<h2 id="搜索引擎api" class="headerLink">
    <a href="#%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8eapi" class="header-mark"></a>搜索引擎API</h2><p>以Open-webui为例，其提供联网搜索API的搜索引擎有如下：</p>
<h3 id="免费开源" class="headerLink">
    <a href="#%e5%85%8d%e8%b4%b9%e5%bc%80%e6%ba%90" class="header-mark"></a>免费开源</h3><ul>
<li>&lsquo;searxng&rsquo;,</li>
</ul>
<h3 id="免费" class="headerLink">
    <a href="#%e5%85%8d%e8%b4%b9" class="header-mark"></a>免费</h3><ul>
<li>&lsquo;duckduckgo&rsquo;,</li>
</ul>
<h3 id="商业收费" class="headerLink">
    <a href="#%e5%95%86%e4%b8%9a%e6%94%b6%e8%b4%b9" class="header-mark"></a>商业收费</h3><ul>
<li>&lsquo;google_pse&rsquo;,</li>
<li>&lsquo;brave&rsquo;,</li>
<li>&lsquo;kagi&rsquo;,</li>
<li>&lsquo;mojeek&rsquo;,</li>
<li>&lsquo;serpstack&rsquo;,</li>
<li>&lsquo;serper&rsquo;,</li>
<li>&lsquo;serply&rsquo;,</li>
<li>&lsquo;searchapi&rsquo;,</li>
<li>&rsquo;tavily',</li>
<li>&lsquo;jina&rsquo;,</li>
<li>&lsquo;bing&rsquo;,</li>
<li>&rsquo;exa'</li>
</ul>
<h2 id="open-webui-搜索流程代码解析" class="headerLink">
    <a href="#open-webui-%e6%90%9c%e7%b4%a2%e6%b5%81%e7%a8%8b%e4%bb%a3%e7%a0%81%e8%a7%a3%e6%9e%90" class="header-mark"></a>Open-webui 搜索流程代码解析</h2><ul>
<li>@app.post(&quot;/api/chat/completions&quot;)</li>
<li>async def chat_completion()
<ul>
<li>async def process_chat_payload()
<ul>
<li>async def chat_web_search_handler()
<ul>
<li>def process_web_search()</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>]]></description></item><item><title>VsCode+cline+DeepSeek 进行辅助编程</title><link>https://rd163.visword.com/posts/deepseek-coding-with-vscode-cline/</link><pubDate>Sun, 09 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/deepseek-coding-with-vscode-cline/</guid><description><![CDATA[<p>用法参考视频 <a href="https://www.youtube.com/watch?v=ft1nCPQqeW8" target="_blank" rel="noopener noreferrer">AI辅助开发利器Cline + DeepSeek R1 + Claude【大师推荐】</a></p>
<p><a href="https://github.com/cline/cline" target="_blank" rel="noopener noreferrer">Cline</a> 是一个可以在你的IDE 中运行的自主编程助手，能够创建、编辑文件，执行命令，甚至利用浏览器。</p>]]></description></item><item><title>LLM 工作流编排方案</title><link>https://rd163.visword.com/posts/llm-workflow-compose/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/llm-workflow-compose/</guid><description><![CDATA[<h2 id="商业方案" class="headerLink">
    <a href="#%e5%95%86%e4%b8%9a%e6%96%b9%e6%a1%88" class="header-mark"></a>商业方案</h2><ul>
<li><a href="https://yuanqi.tencent.com/agent-shop" target="_blank" rel="noopener noreferrer">腾讯元器</a></li>
<li><a href="https://www.coze.cn/home" target="_blank" rel="noopener noreferrer">字节扣子</a></li>
</ul>
<h2 id="开源" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90" class="header-mark"></a>开源</h2><ul>
<li><a href="https://github.com/langgenius/dify" target="_blank" rel="noopener noreferrer">Dify</a></li>
<li><a href="https://github.com/infiniflow/ragflow" target="_blank" rel="noopener noreferrer">RAGFLOW</a></li>
<li><a href="https://github.com/deepset-ai/haystack" target="_blank" rel="noopener noreferrer">Haystack</a></li>
<li><a href="https://github.com/labring/FastGPT" target="_blank" rel="noopener noreferrer">FastGPT</a></li>
<li><a href="https://github.com/netease-youdao/QAnything" target="_blank" rel="noopener noreferrer">QAnything</a></li>
</ul>]]></description></item><item><title>LLM Retrieval-Augmented Generation(RAG)</title><link>https://rd163.visword.com/posts/llm-retrieval-augmented-generation/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/llm-retrieval-augmented-generation/</guid><description><![CDATA[<p>相关论文：<a href="https://arxiv.org/abs/2005.11401" target="_blank" rel="noopener noreferrer">Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks</a>
这里有个 <a href="https://github.com/SmartFlowAI/Hand-on-RAG" target="_blank" rel="noopener noreferrer">手搓的RAG</a> github项目可以一窥RAG的全貌。</p>
<h2 id="什么是检索增强生成" class="headerLink">
    <a href="#%e4%bb%80%e4%b9%88%e6%98%af%e6%a3%80%e7%b4%a2%e5%a2%9e%e5%bc%ba%e7%94%9f%e6%88%90" class="header-mark"></a>什么是检索增强生成？</h2><p>检索增强生成（RAG）是一个概念，它旨在为大语言模型（LLM）提供额外的、来自外部知识源的信息。这样，LLM 在生成更精确、更贴合上下文的答案的同时，也能有效减少产生误导性信息的可能。</p>]]></description></item><item><title>DeepSeek 提示词</title><link>https://rd163.visword.com/posts/deepseek-prompts/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/deepseek-prompts/</guid><description><![CDATA[<h3 id="周报" class="headerLink">
    <a href="#%e5%91%a8%e6%8a%a5" class="header-mark"></a>周报</h3><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-25" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">你是一个周报汇总助手，用户每次输入工作内容，你将其填充为一篇完整的周报并进行润色，用 markdown 格式以分点叙述的形式输出.</span></span></code></pre>
</div>
<h3 id="面试官" class="headerLink">
    <a href="#%e9%9d%a2%e8%af%95%e5%ae%98" class="header-mark"></a>面试官</h3><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-26" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">我希望您扮演面试官的角色。我将是应聘者，而您将为&#39;C++后台开发&#39;职位问我面试问题。我希望您只回复面试官的角色。不要一次写下整个对话。我希望您只和我进行面试。一个一个地像面试官一样问我问题，然后等待我的回答</span></span></code></pre>
</div>
<h3 id="做图表" class="headerLink">
    <a href="#%e5%81%9a%e5%9b%be%e8%a1%a8" class="header-mark"></a>做图表</h3><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-27" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="n">You</span> <span class="n">are</span> <span class="n">an</span> <span class="n">AI</span> <span class="n">assistant</span> <span class="n">skilled</span> <span class="ow">in</span> <span class="n">using</span> <span class="n">Mermaid</span> <span class="n">diagrams</span> <span class="n">to</span> <span class="n">explain</span> <span class="n">concepts</span> <span class="ow">and</span> <span class="n">answer</span> <span class="n">questions</span><span class="o">.</span> <span class="n">When</span> <span class="n">responding</span> <span class="n">to</span> <span class="n">user</span> <span class="n">queries</span><span class="p">,</span> <span class="n">please</span> <span class="n">follow</span> <span class="n">these</span> <span class="n">guidelines</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"><span class="mf">1.</span> <span class="n">Analyze</span> <span class="n">the</span> <span class="n">user</span><span class="s1">&#39;s question to determine if a diagram would be suitable for explanation or answering. Suitable scenarios for using diagrams include, but are not limited to: process descriptions, hierarchical structures, timelines, relationship maps, etc.</span>
</span></span><span class="line"><span class="cl"><span class="mf">2.</span> <span class="n">If</span> <span class="n">you</span> <span class="n">decide</span> <span class="n">to</span> <span class="n">use</span> <span class="n">a</span> <span class="n">diagram</span><span class="p">,</span> <span class="n">choose</span> <span class="n">the</span> <span class="n">most</span> <span class="n">appropriate</span> <span class="n">type</span> <span class="n">of</span> <span class="n">Mermaid</span> <span class="n">diagram</span><span class="p">,</span> <span class="n">such</span> <span class="n">as</span> <span class="n">Flowchart</span><span class="p">,</span> <span class="n">Sequence</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">Class</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">State</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">Entity</span> <span class="n">Relationship</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">User</span> <span class="n">Journey</span><span class="p">,</span> <span class="n">Gantt</span><span class="p">,</span> <span class="n">Pie</span> <span class="n">Chart</span><span class="p">,</span> <span class="n">Quadrant</span> <span class="n">Chart</span><span class="p">,</span> <span class="n">Requirement</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">Gitgraph</span> <span class="p">(</span><span class="n">Git</span><span class="p">)</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">C4</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">Mindmaps</span><span class="p">,</span> <span class="n">Timeline</span><span class="p">,</span> <span class="n">Zenuml</span><span class="p">,</span> <span class="n">Sankey</span><span class="p">,</span> <span class="n">XYChart</span><span class="p">,</span> <span class="n">Block</span> <span class="n">Diagram</span><span class="p">,</span> <span class="n">etc</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="mf">3.</span> <span class="n">Write</span> <span class="n">the</span> <span class="n">diagram</span> <span class="n">code</span> <span class="n">using</span> <span class="n">Mermaid</span> <span class="n">syntax</span><span class="p">,</span> <span class="n">ensuring</span> <span class="n">the</span> <span class="n">syntax</span> <span class="n">is</span> <span class="n">correct</span><span class="o">.</span> <span class="n">Place</span> <span class="n">the</span> <span class="n">diagram</span> <span class="n">code</span> <span class="n">between</span>  <span class="ow">and</span> <span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="mf">4.</span> <span class="n">Provide</span> <span class="n">textual</span> <span class="n">explanations</span> <span class="n">before</span> <span class="ow">and</span> <span class="n">after</span> <span class="n">the</span> <span class="n">diagram</span><span class="p">,</span> <span class="n">explaining</span> <span class="n">the</span> <span class="n">content</span> <span class="ow">and</span> <span class="n">key</span> <span class="n">points</span> <span class="n">of</span> <span class="n">the</span> <span class="n">diagram</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="mf">5.</span> <span class="n">If</span> <span class="n">the</span> <span class="n">question</span> <span class="n">is</span> <span class="n">complex</span><span class="p">,</span> <span class="n">use</span> <span class="n">multiple</span> <span class="n">diagrams</span> <span class="n">to</span> <span class="n">explain</span> <span class="n">different</span> <span class="n">aspects</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="mf">6.</span> <span class="n">Ensure</span> <span class="n">the</span> <span class="n">diagram</span> <span class="n">is</span> <span class="n">clear</span> <span class="ow">and</span> <span class="n">concise</span><span class="p">,</span> <span class="n">avoiding</span> <span class="n">over</span><span class="o">-</span><span class="n">complication</span> <span class="ow">or</span> <span class="n">information</span> <span class="n">overload</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="mf">7.</span> <span class="n">Where</span> <span class="n">appropriate</span><span class="p">,</span> <span class="n">combine</span> <span class="n">textual</span> <span class="n">description</span> <span class="ow">and</span> <span class="n">diagrams</span> <span class="n">to</span> <span class="n">comprehensively</span> <span class="n">answer</span> <span class="n">the</span> <span class="n">question</span><span class="o">.</span>
</span></span><span class="line"><span class="cl"><span class="mf">8.</span> <span class="n">If</span> <span class="n">the</span> <span class="n">user</span><span class="s1">&#39;s question is not suitable for a diagram, answer in a conventional manner without forcing the use of a diagram.</span>
</span></span><span class="line"><span class="cl"><span class="n">Remember</span><span class="p">,</span> <span class="n">the</span> <span class="n">purpose</span> <span class="n">of</span> <span class="n">diagrams</span> <span class="n">is</span> <span class="n">to</span> <span class="n">make</span> <span class="n">explanations</span> <span class="n">more</span> <span class="n">intuitive</span> <span class="ow">and</span> <span class="n">understandable</span><span class="o">.</span> <span class="n">When</span> <span class="n">using</span> <span class="n">diagrams</span><span class="p">,</span> <span class="n">always</span> <span class="n">aim</span> <span class="n">to</span> <span class="n">enhance</span> <span class="n">the</span> <span class="n">clarity</span> <span class="ow">and</span> <span class="n">comprehensiveness</span> <span class="n">of</span> <span class="n">your</span> <span class="n">responses</span><span class="o">.</span></span></span></code></pre>
</div>
<p>中文翻译如下：</p>]]></description></item><item><title>HttpAPI规范及生态组件</title><link>https://rd163.visword.com/posts/http-api-spec/</link><pubDate>Wed, 19 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/http-api-spec/</guid><description><![CDATA[<h2 id="背景" class="headerLink">
    <a href="#%e8%83%8c%e6%99%af" class="header-mark"></a>背景</h2><p>随着业务的增多，越来越多的服务需要提供http协议的API接口供第三方调用， 由于http api并不像trpc协议那样有一个通用的协议规范来定义约束接口， 通常API开发者需要提供一份API文档来说明每个API的详细参数。
如：<a href="https://cloud.tencent.com/document/product/213/15692" target="_blank" rel="noopener noreferrer">腾讯云API文档</a> 等， 这些文档分散在各个地方，缺乏统一的管理，并且每篇文档的撰写风格也不一样，这就增加了API调用方的接入负担。。。<br>
总结一下，现有的API管理体系存在这如下缺点：</p>]]></description></item><item><title>WebDAV 搭建方案</title><link>https://rd163.visword.com/posts/webdav-deploy/</link><pubDate>Fri, 28 Feb 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/webdav-deploy/</guid><description><![CDATA[<h2 id="web-服务器方案" class="headerLink">
    <a href="#web-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%96%b9%e6%a1%88" class="header-mark"></a>Web 服务器方案</h2><p>借助传统Web服务器使用的WebDAV的方法有多种：</p>
<ul>
<li>Apache2 推荐使用 <a href="https://hub.docker.com/r/bytemark/webdav" target="_blank" rel="noopener noreferrer">下载量最多的docker镜像</a></li>
<li>Nginx Nginx和Caddy都需要额外安装模块才能实现最完整的WebDAV功能
<ul>
<li><a href="https://hub.docker.com/r/ionelmc/webdav" target="_blank" rel="noopener noreferrer">docker镜像</a></li>
<li><a href="https://github.com/erikluo/docker-webdav/" target="_blank" rel="noopener noreferrer">docker镜像 github</a></li>
</ul>
</li>
<li>Caddy Nginx和Caddy都需要额外安装模块才能实现最完整的WebDAV功能（下载、上传、修改）</li>
</ul>
<h2 id="专用服务器方案" class="headerLink">
    <a href="#%e4%b8%93%e7%94%a8%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%96%b9%e6%a1%88" class="header-mark"></a>专用服务器方案</h2><ul>
<li><a href="https://github.com/hacdias/webdav" target="_blank" rel="noopener noreferrer">Simple Go WebDAV server Go实现</a></li>
<li><a href="https://github.com/mar10/wsgidav" target="_blank" rel="noopener noreferrer">wsgidav python实现 obsidian remotelySync插件指定服务</a></li>
</ul>]]></description></item><item><title>阿里千问系列模型</title><link>https://rd163.visword.com/posts/qwenlm-intro/</link><pubDate>Sat, 08 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/qwenlm-intro/</guid><description><![CDATA[<h2 id="简介" class="headerLink">
    <a href="#%e7%ae%80%e4%bb%8b" class="header-mark"></a>简介</h2><p>Github仓库:</p>
<ul>
<li><a href="https://github.com/QwenLM" target="_blank" rel="noopener noreferrer">Qwen</a></li>
</ul>
<p>所有的博客都会发表在这里：</p>
<ul>
<li><a href="https://github.com/QwenLM/qwenlm.github.io" target="_blank" rel="noopener noreferrer">qwenlm.github.io</a></li>
</ul>
<p>如：</p>
<ul>
<li><a href="https://qwenlm.github.io/zh/blog/qwq-32b/" target="_blank" rel="noopener noreferrer">QwQ-32B: 领略强化学习之力</a></li>
</ul>
<h2 id="api" class="headerLink">
    <a href="#api" class="header-mark"></a>API</h2><p>以下我们展示了一段简短的示例代码，说明如何通过 API 使用 QwQ-32B:</p>
<div class="code-block highlight is-closed show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-4" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="n">from</span> <span class="n">openai</span> <span class="n">import</span> <span class="n">OpenAI</span>
</span></span><span class="line"><span class="cl"><span class="n">import</span> <span class="n">os</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Initialize OpenAI client</span>
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">OpenAI</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># If the environment variable is not configured, replace with your API Key: api_key=&#34;sk-xxx&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># How to get an API Key：https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key</span>
</span></span><span class="line"><span class="cl">    <span class="n">api_key</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&#34;DASHSCOPE_API_KEY&#34;</span><span class="p">),</span>
</span></span><span class="line"><span class="cl">    <span class="n">base_url</span><span class="o">=</span><span class="s2">&#34;https://dashscope.aliyuncs.com/compatible-mode/v1&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">reasoning_content</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="n">content</span> <span class="o">=</span> <span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">is_answering</span> <span class="o">=</span> <span class="n">False</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">completion</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">chat</span><span class="o">.</span><span class="n">completions</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
</span></span><span class="line"><span class="cl">    <span class="n">model</span><span class="o">=</span><span class="s2">&#34;qwq-32b&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="n">messages</span><span class="o">=</span><span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span><span class="s2">&#34;role&#34;</span><span class="p">:</span> <span class="s2">&#34;user&#34;</span><span class="p">,</span> <span class="s2">&#34;content&#34;</span><span class="p">:</span> <span class="s2">&#34;Which is larger, 9.9 or 9.11?&#34;</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="n">stream</span><span class="o">=</span><span class="n">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># Uncomment the following line to return token usage in the last chunk</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># stream_options={</span>
</span></span><span class="line"><span class="cl">    <span class="c1">#     &#34;include_usage&#34;: True</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># }</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span> <span class="o">+</span> <span class="s2">&#34;=&#34;</span> <span class="o">*</span> <span class="mi">20</span> <span class="o">+</span> <span class="s2">&#34;reasoning content&#34;</span> <span class="o">+</span> <span class="s2">&#34;=&#34;</span> <span class="o">*</span> <span class="mi">20</span> <span class="o">+</span> <span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="n">completion</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># If chunk.choices is empty, print usage</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="ow">not</span> <span class="n">chunk</span><span class="o">.</span><span class="n">choices</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">Usage:&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">chunk</span><span class="o">.</span><span class="n">usage</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">delta</span> <span class="o">=</span> <span class="n">chunk</span><span class="o">.</span><span class="n">choices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">delta</span>
</span></span><span class="line"><span class="cl">        <span class="c1"># Print reasoning content</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">hasattr</span><span class="p">(</span><span class="n">delta</span><span class="p">,</span> <span class="s1">&#39;reasoning_content&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">delta</span><span class="o">.</span><span class="n">reasoning_content</span> <span class="n">is</span> <span class="ow">not</span> <span class="n">None</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">delta</span><span class="o">.</span><span class="n">reasoning_content</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">flush</span><span class="o">=</span><span class="n">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">reasoning_content</span> <span class="o">+=</span> <span class="n">delta</span><span class="o">.</span><span class="n">reasoning_content</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="n">delta</span><span class="o">.</span><span class="n">content</span> <span class="o">!=</span> <span class="s2">&#34;&#34;</span> <span class="ow">and</span> <span class="n">is_answering</span> <span class="n">is</span> <span class="n">False</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">                <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span> <span class="o">+</span> <span class="s2">&#34;=&#34;</span> <span class="o">*</span> <span class="mi">20</span> <span class="o">+</span> <span class="s2">&#34;content&#34;</span> <span class="o">+</span> <span class="s2">&#34;=&#34;</span> <span class="o">*</span> <span class="mi">20</span> <span class="o">+</span> <span class="s2">&#34;</span><span class="se">\n</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">                <span class="n">is_answering</span> <span class="o">=</span> <span class="n">True</span>
</span></span><span class="line"><span class="cl">            <span class="c1"># Print content</span>
</span></span><span class="line"><span class="cl">            <span class="nb">print</span><span class="p">(</span><span class="n">delta</span><span class="o">.</span><span class="n">content</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">flush</span><span class="o">=</span><span class="n">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">content</span> <span class="o">+=</span> <span class="n">delta</span><span class="o">.</span><span class="n">content</span></span></span></code></pre>
</div>]]></description></item><item><title>llama.cpp 使用</title><link>https://rd163.visword.com/posts/llama-cpp-get-started/</link><pubDate>Sat, 08 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/llama-cpp-get-started/</guid><description><![CDATA[<h2 id="install" class="headerLink">
    <a href="#install" class="header-mark"></a>Install</h2><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-28" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">git clone https://github.com/ggml-org/llama.cpp.git
</span></span><span class="line"><span class="cl">mkdir build &amp;&amp; cd build
</span></span><span class="line"><span class="cl">cmake .. 
</span></span><span class="line"><span class="cl">make &amp;&amp; make install</span></span></code></pre>
</div>
<h2 id="gguf量化" class="headerLink">
    <a href="#gguf%e9%87%8f%e5%8c%96" class="header-mark"></a>GGUF量化</h2><p><strong>一、GGUF量化过程</strong></p>]]></description></item><item><title>ComfyUI教程</title><link>https://rd163.visword.com/posts/comfyui-get-started/</link><pubDate>Mon, 10 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/comfyui-get-started/</guid><description><![CDATA[<h2 id="术语解释" class="headerLink">
    <a href="#%e6%9c%af%e8%af%ad%e8%a7%a3%e9%87%8a" class="header-mark"></a>术语解释</h2><ul>
<li>VAE：变分自动编码器</li>
<li>CLIP模型： 全称 Contrastive Language-Image Pre-Training（对比性语言-图像预训练模型</li>
</ul>
<h2 id="安装" class="headerLink">
    <a href="#%e5%ae%89%e8%a3%85" class="header-mark"></a>安装</h2><p>参考 gihtub 官网，直接下载桌面安装包：</p>
<ul>
<li><a href="https://github.com/comfyanonymous/ComfyUI" target="_blank" rel="noopener noreferrer">ComfyUI</a></li>
</ul>
<p>这里提供各模型的使用说明：</p>]]></description></item><item><title>图片加水印的命令行工具</title><link>https://rd163.visword.com/posts/tools-for-image-watermark/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/tools-for-image-watermark/</guid><description><![CDATA[<p>在 Linux 或 macOS 系统中，可以通过命令行工具（如 <strong>ImageMagick</strong> 或 <strong>ffmpeg</strong>）快速为图片添加水印。以下是几种常用方法：</p>
<hr>
<h3 id="方法-1使用-imagemagick推荐" class="headerLink">
    <a href="#%e6%96%b9%e6%b3%95-1%e4%bd%bf%e7%94%a8-imagemagick%e6%8e%a8%e8%8d%90" class="header-mark"></a><strong>方法 1：使用 ImageMagick（推荐）</strong></h3><h4 id="1-安装-imagemagick" class="headerLink">
    <a href="#1-%e5%ae%89%e8%a3%85-imagemagick" class="header-mark"></a><strong>1. 安装 ImageMagick</strong></h4><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">bash</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-34" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="c1"># Linux (Debian/Ubuntu)</span>
</span></span><span class="line"><span class="cl">sudo apt-get install imagemagick
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># macOS</span>
</span></span><span class="line"><span class="cl">brew install imagemagick</span></span></code></pre>
</div>
<h4 id="2-添加文字水印" class="headerLink">
    <a href="#2-%e6%b7%bb%e5%8a%a0%e6%96%87%e5%ad%97%e6%b0%b4%e5%8d%b0" class="header-mark"></a><strong>2. 添加文字水印</strong></h4><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">bash</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-35" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">convert input.jpg -font Arial -pointsize <span class="m">40</span> -fill <span class="s2">&#34;rgba(255,255,255,0.5)&#34;</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">-gravity southeast -annotate +20+10 <span class="s2">&#34;Your Watermark&#34;</span> output.jpg</span></span></code></pre>
</div>
<p>• <strong>参数说明</strong>：
• <code>-font Arial</code>：指定字体（使用 <code>convert -list font</code> 查看可用字体）。
• <code>-pointsize 40</code>：文字大小。
• <code>-fill &quot;rgba(255,255,255,0.5)&quot;</code>：文字颜色和透明度（0=全透明，1=不透明）。
• <code>-gravity southeast</code>：水印位置（<code>southeast</code>=右下角，其他选项：<code>north</code>, <code>center</code> 等）。
• <code>-annotate +20+10</code>：距离边缘的偏移量（水平+20，垂直+10）。</p>]]></description></item><item><title>png 格式工具</title><link>https://rd163.visword.com/posts/png-format-tools/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/png-format-tools/</guid><description><![CDATA[<h2 id="工具示例imagemagick" class="headerLink">
    <a href="#%e5%b7%a5%e5%85%b7%e7%a4%ba%e4%be%8bimagemagick" class="header-mark"></a>工具示例：ImageMagick</h2><p>PNG 格式支持多种预定义的文本块类型（如 tEXt, iTXt, zTXt），用于存储文本信息（如作者、版权、描述等）。这些数据块会被大多数图片查看器和编辑器保留。</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-37" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"># 添加文本元数据
</span></span><span class="line"><span class="cl">convert input.png -set &#34;Description&#34; &#34;这是附加的注释&#34; output.png
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"># 添加多个字段（如作者、版权）
</span></span><span class="line"><span class="cl">convert input.png -set &#34;Artist&#34; &#34;John Doe&#34; -set &#34;Copyright&#34; &#34;2024&#34; output.png</span></span></code></pre>
</div>
<h2 id="查看元数据" class="headerLink">
    <a href="#%e6%9f%a5%e7%9c%8b%e5%85%83%e6%95%b0%e6%8d%ae" class="header-mark"></a>查看元数据</h2><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-38" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">identify -verbose output.png</span></span></code></pre>
</div>
<h2 id="压缩" class="headerLink">
    <a href="#%e5%8e%8b%e7%bc%a9" class="header-mark"></a>压缩</h2><p>安装：</p>]]></description></item><item><title>C++内存泄露检测工具</title><link>https://rd163.visword.com/posts/memleak-check-tools-for-cpp/</link><pubDate>Sat, 22 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/memleak-check-tools-for-cpp/</guid><description><![CDATA[<p>在服务器后台开发中，排查和定位C++内存泄漏的常用工具和方法可分为以下几类，结合其特点和使用场景进行选择：</p>
<hr>
<h2 id="工具分类" class="headerLink">
    <a href="#%e5%b7%a5%e5%85%b7%e5%88%86%e7%b1%bb" class="header-mark"></a>工具分类</h2><h3 id="1-动态检测工具" class="headerLink">
    <a href="#1-%e5%8a%a8%e6%80%81%e6%a3%80%e6%b5%8b%e5%b7%a5%e5%85%b7" class="header-mark"></a><strong>1. 动态检测工具</strong></h3><h4 id="valgrind-memcheck" class="headerLink">
    <a href="#valgrind-memcheck" class="header-mark"></a><strong>Valgrind Memcheck</strong></h4><ul>
<li>
<p><strong>特点</strong>：</p>
<ul>
<li>• Linux下经典工具，检测内存泄漏、越界访问、未初始化内存等问题。</li>
<li>• 无需重新编译代码（但建议编译时保留调试符号 <code>-g</code>）。</li>
<li>• 运行速度较慢，适合测试环境。</li>
</ul>
</li>
<li>
<p><strong>使用方式</strong>：</p>]]></description></item><item><title>AI网关-Higress简介</title><link>https://rd163.visword.com/posts/ai-gateway-higress-intro/</link><pubDate>Sun, 23 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ai-gateway-higress-intro/</guid><description>&lt;p>Higress 是一款云原生 API 网关，内核基于 Istio 和 Envoy，可以用 Go/Rust/JS 等编写 Wasm 插件，提供了数十个现成的通用插件，以及开箱即用的控制台（demo 点&lt;a href="http://demo.higress.io/" target="_blank" rel="noopener noreferrer">这里&lt;/a>）&lt;/p></description></item><item><title>AI网关-Higress部署</title><link>https://rd163.visword.com/posts/ai-gateway-higress-deployment/</link><pubDate>Sun, 23 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ai-gateway-higress-deployment/</guid><description><![CDATA[<h2 id="部署方式" class="headerLink">
    <a href="#%e9%83%a8%e7%bd%b2%e6%96%b9%e5%bc%8f" class="header-mark"></a>部署方式</h2><h3 id="1-云原生部署" class="headerLink">
    <a href="#1-%e4%ba%91%e5%8e%9f%e7%94%9f%e9%83%a8%e7%bd%b2" class="header-mark"></a>1. 云原生部署</h3><p>支持 部署到 Kubernetes，或者 本地k8s， 如 Kind。具体参考</p>
<ul>
<li><a href="https://higress.cn/docs/latest/ops/deploy-by-helm/?spm=36971b57.d107700.0.0.23882d89GafqV0" target="_blank" rel="noopener noreferrer">使用 Helm 进行云原生部署</a></li>
<li><a href="https://higress.cn/docs/latest/user/quickstart/?spm=36971b57.d107700.0.0.23882d89GafqV0" target="_blank" rel="noopener noreferrer">部署到本地k8s，如Kind</a></li>
</ul>
<h3 id="2-docker-compose部署" class="headerLink">
    <a href="#2-docker-compose%e9%83%a8%e7%bd%b2" class="header-mark"></a>2. Docker-Compose部署</h3><p>参考</p>]]></description></item><item><title>Envoy XDS 介绍</title><link>https://rd163.visword.com/posts/xds-for-envoy/</link><pubDate>Mon, 24 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/xds-for-envoy/</guid><description><![CDATA[<h1 id="envoy-xds-介绍" class="headerLink">
    <a href="#envoy-xds-%e4%bb%8b%e7%bb%8d" class="header-mark"></a>Envoy XDS 介绍</h1><p>xDS（Extensible Discovery Service）是一种通信协议，用于在微服务架构中管理服务发现和动态配置。这种机制被广泛用于 Envoy 代理和 Istio 服务网格中，以管理各种类型的资源配置，如路由、服务发现、负载均衡设置等。</p>]]></description></item><item><title>Docker Desktop 开源替代方案</title><link>https://rd163.visword.com/posts/open-source-alternatives-for-docker-desktop/</link><pubDate>Mon, 24 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/open-source-alternatives-for-docker-desktop/</guid><description><![CDATA[<h1 id="docker-desktop--开源替代方案" class="headerLink">
    <a href="#docker-desktop--%e5%bc%80%e6%ba%90%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88" class="header-mark"></a>Docker Desktop  开源替代方案</h1><ul>
<li><a href="https://github.com/rancher-sandbox/rancher-desktop/" target="_blank" rel="noopener noreferrer">Rancher Desktop</a> Rancher Desktop is an open-source project that brings Kubernetes and container management to the desktop. It runs on Windows, macOS and Linux</li>
<li><a href="https://github.com/podman-desktop/podman-desktop" target="_blank" rel="noopener noreferrer">Podman Desktop</a> A graphical tool for developing on containers and Kubernetes</li>
</ul>
<h2 id="applecontainer" class="headerLink">
    <a href="#applecontainer" class="header-mark"></a>apple/container</h2><p>Apple 官方出品，可用于在Mac上创建和运行轻量级虚拟机般的Linux容器。该工具采用Swift语言编写，并针对Apple芯片进行了优化。</p>]]></description></item><item><title>静态网站生成工具</title><link>https://rd163.visword.com/posts/static-site-gen-tools/</link><pubDate>Tue, 25 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/static-site-gen-tools/</guid><description><![CDATA[<h2 id="静态网站工具" class="headerLink">
    <a href="#%e9%9d%99%e6%80%81%e7%bd%91%e7%ab%99%e5%b7%a5%e5%85%b7" class="header-mark"></a>静态网站工具</h2><h3 id="1-jekyll" class="headerLink">
    <a href="#1-jekyll" class="header-mark"></a>1. Jekyll</h3><h3 id="2-hugo" class="headerLink">
    <a href="#2-hugo" class="header-mark"></a>2. Hugo</h3><p>应用：
k8s文档 <a href="https://github.com/kubernetes/website" target="_blank" rel="noopener noreferrer">https://github.com/kubernetes/website</a></p>
<h3 id="3-hexo" class="headerLink">
    <a href="#3-hexo" class="header-mark"></a>3. Hexo</h3><p><a href="https://github.com/hexojs/hexo" target="_blank" rel="noopener noreferrer">https://github.com/hexojs/hexo</a></p>
<h3 id="4-gatsby" class="headerLink">
    <a href="#4-gatsby" class="header-mark"></a>4. Gatsby</h3><h3 id="5-vuepress" class="headerLink">
    <a href="#5-vuepress" class="header-mark"></a>5. VuePress</h3><ul>
<li><a href="https://vuepress.vuejs.org/" target="_blank" rel="noopener noreferrer">vuepress.vuejs.org</a></li>
<li><a href="https://www.vuepress.cn/" target="_blank" rel="noopener noreferrer">VuePress中文文档 | VuePress中文网</a></li>
<li><a href="https://github.com/liyupi/codefather" target="_blank" rel="noopener noreferrer">应用-codefather </a></li>
<li><a href="https://github.com/PicGo/PicGo-Doc" target="_blank" rel="noopener noreferrer">应用-PicGo文档</a></li>
</ul>
<h3 id="6-nuxtjs" class="headerLink">
    <a href="#6-nuxtjs" class="header-mark"></a>6. Nuxt.js</h3><h3 id="7-docusaurus" class="headerLink">
    <a href="#7-docusaurus" class="header-mark"></a>7. Docusaurus</h3><h3 id="8-eleventy" class="headerLink">
    <a href="#8-eleventy" class="header-mark"></a>8. Eleventy</h3><h3 id="9-publii" class="headerLink">
    <a href="#9-publii" class="header-mark"></a>9. Publii</h3><h3 id="10-primo" class="headerLink">
    <a href="#10-primo" class="header-mark"></a>10. Primo</h3><h3 id="11-mkdocs" class="headerLink">
    <a href="#11-mkdocs" class="header-mark"></a>11. mkdocs</h3><p><a href="https://github.com/mkdocs/mkdocs" target="_blank" rel="noopener noreferrer">https://github.com/mkdocs/mkdocs</a></p>]]></description></item><item><title>Higress 的OCI扩展插件</title><link>https://rd163.visword.com/posts/ai-gateway-higress-oci-ext/</link><pubDate>Sat, 29 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ai-gateway-higress-oci-ext/</guid><description><![CDATA[<h2 id="oci" class="headerLink">
    <a href="#oci" class="header-mark"></a>OCI</h2><p>OCI，Open Container Initiative，是一个轻量级，开放的治理结构（项目），在 Linux 基金会的支持下成立，致力于围绕容器格式和运行时创建开放的行业标准。OCI 项目由 Docker，CoreOS（后来被 Red Hat 收购了，相应的席位被 Red Hat 继承）和容器行业中的其他领导者在 2015 年 6 月的时候启动。OCI 的技术委员会成员包括 Red Hat，Microsoft，Docker，Cruise，IBM，Google，Red Hat 和 SUSE，其中 Docker 公司有两名成员，且其中的一位是现任主席，具体的细节可以查看 OCI Technical Oversight Board。</p>]]></description></item><item><title>C++协程介绍</title><link>https://rd163.visword.com/posts/fiber-intro-for-cpp/</link><pubDate>Mon, 31 Mar 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/fiber-intro-for-cpp/</guid><description><![CDATA[<h2 id="协程corouting与纤程fiber区别" class="headerLink">
    <a href="#%e5%8d%8f%e7%a8%8bcorouting%e4%b8%8e%e7%ba%a4%e7%a8%8bfiber%e5%8c%ba%e5%88%ab" class="header-mark"></a>协程(corouting)与纤程(fiber)区别</h2><h3 id="协程coroutine" class="headerLink">
    <a href="#%e5%8d%8f%e7%a8%8bcoroutine" class="header-mark"></a>协程（Coroutine）​</h3><p>N:1协程</p>
<p>协程是语言级别的特性（C++20原生支持），由编译器生成状态机逻辑，通过co_await、co_yield等关键字实现隐式挂起和恢复，无需直接操作底层上下文。</p>]]></description></item><item><title>trpc-cpp流式服务</title><link>https://rd163.visword.com/posts/trpc-cpp-stream-service/</link><pubDate>Tue, 01 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/trpc-cpp-stream-service/</guid><description><![CDATA[<h2 id="流式应用场景" class="headerLink">
    <a href="#%e6%b5%81%e5%bc%8f%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af" class="header-mark"></a>流式应用场景</h2><ul>
<li>大规模数据包。 比如，有一个大文件需要传输。 使用流式 RPC 时，客户端分片读出文件内容后直接写入到流中，服务端可以按客户端写入顺序读取到文件分片内容，然后执行业务逻辑。 如果使用单次 RPC，需要多次调用RPC方法，会遇到分包、组包、乱序、业务逻辑上下文切换等问题。</li>
<li>实时场景。 比如，股票行情走势，资讯 Feeds 流。 服务端接收到消息后，需要往多个客户端进行实时消息推送，流式 RPC 可以在一次 RPC 调用过程中，推送完整的消息列表。</li>
<li>Istio、Envoy、Nacos 等项目，内部都是用 gRPC 作为通信协议来实现控制平面</li>
</ul>
<h2 id="三种流式-rpc-方法" class="headerLink">
    <a href="#%e4%b8%89%e7%a7%8d%e6%b5%81%e5%bc%8f-rpc-%e6%96%b9%e6%b3%95" class="header-mark"></a>三种流式 RPC 方法</h2><p>tRPC 协议的流式 RPC 分为三种类型：</p>]]></description></item><item><title>c++20协程简介</title><link>https://rd163.visword.com/posts/cpp20-corouting-intro/</link><pubDate>Sun, 06 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cpp20-corouting-intro/</guid><description><![CDATA[<h2 id="c20协程简介" class="headerLink">
    <a href="#c20%e5%8d%8f%e7%a8%8b%e7%ae%80%e4%bb%8b" class="header-mark"></a>c++20协程简介</h2><p>参考：</p>
<ul>
<li><a href="https://github.com/0voice/cpp_backend_awsome_blog/blob/main/%E3%80%90NO.241%E3%80%91%E5%8D%8F%E7%A8%8B%E5%8F%8Ac%2B%2B%2020%E5%8E%9F%E7%94%9F%E5%8D%8F%E7%A8%8B%E7%A0%94%E7%A9%B6%E6%8A%A5%E5%91%8A.md" target="_blank" rel="noopener noreferrer">协程及c++ 20原生协程研究报告</a></li>
<li><a href="https://0cch.com/uploads/2022/02/k&#43;2021.pdf" target="_blank" rel="noopener noreferrer">2021K+ 全球软件研发行业创新峰会 深入解析C++20协程</a></li>
</ul>
<p>C++20协程通过Promise和Awaitable接口的15个以上的函数来提供给程序员定制协程的流程和功能，实现最简单的协程需要用到其中的8个（5个Promise的函数和3个Awaitable的函数），
先来看Awaitable的3个函数。</p>]]></description></item><item><title>c++ Promise/Future模型</title><link>https://rd163.visword.com/posts/cpp-promise-future-intro/</link><pubDate>Sun, 06 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cpp-promise-future-intro/</guid><description>&lt;p>Promise/Future是一种经典的异步抽象，由于其“标准化”的概念，提供了很多可能性。这就如同工业史的集装箱、软件界的docker，由于其“标准化”，不同组件可以简单地自由组合，从而提升了整体效率。&lt;/p></description></item><item><title>Boost.Asio 简介</title><link>https://rd163.visword.com/posts/cpp-boost-asio-intro/</link><pubDate>Tue, 08 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cpp-boost-asio-intro/</guid><description><![CDATA[<h2 id="概述" class="headerLink">
    <a href="#%e6%a6%82%e8%bf%b0" class="header-mark"></a>概述</h2><p>Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。</p>
<p>Asio，即「异步 IO」（Asynchronous Input/Output），本是一个 <a href="http://think-async.com/Asio" target="_blank" rel="noopener noreferrer">独立的 C++ 网络程序库</a>，似乎并不为人所知，后来因为被 Boost 相中，才声名鹊起。</p>]]></description></item><item><title>Python 协程简介</title><link>https://rd163.visword.com/posts/python-corouting-intro/</link><pubDate>Sun, 13 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-corouting-intro/</guid><description><![CDATA[<p>Python 在 3.5 版本中引入了关于协程的语法糖 async 和 await, 在 python3.7 版本可以通过 asyncio.run() 运行一个协程。
所以建议大家学习协程的时候使用 python3.7+ 版本。</p>
<p>Python 官方提供了各个版本的 Pyothon 协程的文档，<a href="https://docs.python.org/zh-cn/3.13/library/asyncio-task.html" target="_blank" rel="noopener noreferrer">协程官方文档</a></p>]]></description></item><item><title>Js 协程简介</title><link>https://rd163.visword.com/posts/js-corouting-intro/</link><pubDate>Sun, 13 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/js-corouting-intro/</guid><description><![CDATA[<p>这篇文章 <a href="https://zh.javascript.info/async" target="_blank" rel="noopener noreferrer">JavaScript Promise，async/await</a> 是对 async/await 最详细的介绍，而且 文章开源：</p>
<ul>
<li><a href="https://github.com/javascript-tutorial/zh.javascript.info" target="_blank" rel="noopener noreferrer">现代 JavaScript 教程中文版</a></li>
</ul>
<h2 id="callback回调" class="headerLink">
    <a href="#callback%e5%9b%9e%e8%b0%83" class="header-mark"></a>callback(回调)</h2><p>回调地狱：</p>
<div class="code-block highlight is-closed show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-103" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="n">loadScript</span><span class="p">(</span><span class="s1">&#39;1.js&#39;</span><span class="p">,</span> <span class="n">function</span><span class="p">(</span><span class="n">error</span><span class="p">,</span> <span class="n">script</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">handleError</span><span class="p">(</span><span class="n">error</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="o">//</span> <span class="o">...</span>
</span></span><span class="line"><span class="cl">    <span class="n">loadScript</span><span class="p">(</span><span class="s1">&#39;2.js&#39;</span><span class="p">,</span> <span class="n">function</span><span class="p">(</span><span class="n">error</span><span class="p">,</span> <span class="n">script</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">handleError</span><span class="p">(</span><span class="n">error</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="o">//</span> <span class="o">...</span>
</span></span><span class="line"><span class="cl">        <span class="n">loadScript</span><span class="p">(</span><span class="s1">&#39;3.js&#39;</span><span class="p">,</span> <span class="n">function</span><span class="p">(</span><span class="n">error</span><span class="p">,</span> <span class="n">script</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="k">if</span> <span class="p">(</span><span class="n">error</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">handleError</span><span class="p">(</span><span class="n">error</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="o">//</span> <span class="o">...</span><span class="err">加载完所有脚本后继续</span> <span class="p">(</span><span class="o">*</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">});</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">});</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">});</span></span></span></code></pre>
</div>
<p>嵌套调用的“金字塔”随着每个异步行为会向右增长。很快它就失控了。</p>]]></description></item><item><title>golang 性能优化工具</title><link>https://rd163.visword.com/posts/golang-perf-opti-tools/</link><pubDate>Mon, 14 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-perf-opti-tools/</guid><description><![CDATA[<p>在 Golang 中，性能优化分析工具是定位瓶颈、优化代码的关键。以下是常用的工具及其使用场景和方法：</p>
<hr>
<h2 id="性能剖析工具" class="headerLink">
    <a href="#%e6%80%a7%e8%83%bd%e5%89%96%e6%9e%90%e5%b7%a5%e5%85%b7" class="header-mark"></a>性能剖析工具</h2><h3 id="1" class="headerLink">
    <a href="#1" class="header-mark"></a><strong>1. <code>pprof</code> 性能剖析工具</strong></h3><p>Go 内置的 <code>pprof</code> 包提供 CPU、内存、Goroutine、阻塞等维度的性能分析，支持可视化（火焰图、调用链）。</p>]]></description></item><item><title>代码阅读工具</title><link>https://rd163.visword.com/posts/source-code-explore/</link><pubDate>Sun, 20 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/source-code-explore/</guid><description><![CDATA[<h2 id="开源代码阅读文档工具" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90%e4%bb%a3%e7%a0%81%e9%98%85%e8%af%bb%e6%96%87%e6%a1%a3%e5%b7%a5%e5%85%b7" class="header-mark"></a>开源代码阅读文档工具</h2><ul>
<li><a href="https://github.com/doxygen/doxygen" target="_blank" rel="noopener noreferrer">doxygen</a></li>
<li><a href="https://github.com/CoatiSoftware/Sourcetrail" target="_blank" rel="noopener noreferrer">Sourcetrail</a></li>
</ul>]]></description></item><item><title>golang 内存泄露定位</title><link>https://rd163.visword.com/posts/golang-mem-leak/</link><pubDate>Sun, 20 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-mem-leak/</guid><description>&lt;p>Golang 作为自带垃圾回收（Garbage Collection，GC）机制的语言，可以自动管理内存。但在实际开发中代码编写不当的话也会出现内存泄漏的情况。&lt;/p></description></item><item><title>Kubernetes 渐进式发布</title><link>https://rd163.visword.com/posts/k8s-rollout/</link><pubDate>Wed, 23 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-rollout/</guid><description><![CDATA[<h1 id="kubernetes-渐进式发布" class="headerLink">
    <a href="#kubernetes-%e6%b8%90%e8%bf%9b%e5%bc%8f%e5%8f%91%e5%b8%83" class="header-mark"></a>Kubernetes 渐进式发布</h1><p>通常渐进式发布包括：蓝绿发布、金丝雀发布。这篇文章对此做了详细介绍：</p>
<ul>
<li><a href="https://www.hebye.com/docs/k8s-roll/k8s-roll-1dd4l55dga9d1" target="_blank" rel="noopener noreferrer">k8s应用更新策略：灰度发布和蓝绿发布</a></li>
</ul>
<h2 id="常规方案" class="headerLink">
    <a href="#%e5%b8%b8%e8%a7%84%e6%96%b9%e6%a1%88" class="header-mark"></a>常规方案</h2><h3 id="蓝绿发布" class="headerLink">
    <a href="#%e8%93%9d%e7%bb%bf%e5%8f%91%e5%b8%83" class="header-mark"></a>蓝绿发布</h3><p>蓝绿部署中，一共有两套系统：一套是正在提供的服务系统，标记为”绿色”；另一套是准备发布的系统，标记为”蓝色”。两套系统都是功能完善的、正在运行的系统，只是系统版本和对外服务情况不同。
开发新版本，要用新版本替换线上的旧版本，在线上的系统之后，搭建了一个使用新版本代码的全新系统，这时候，一共有两套系统在运行，正在对外提供服务的老系统是绿色系统，新部署的系统是蓝色系统。</p>]]></description></item><item><title>线性回归</title><link>https://rd163.visword.com/posts/linear-regression/</link><pubDate>Sat, 26 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/linear-regression/</guid><description>&lt;p>回归（regression）是能为一个或多个自变量与因变量之间关系建模的一类方法。 在自然科学和社会科学领域，回归经常用来表示输入和输出之间的关系。&lt;/p></description></item><item><title>逻辑回归</title><link>https://rd163.visword.com/posts/logistic-regression/</link><pubDate>Sat, 26 Apr 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/logistic-regression/</guid><description>&lt;p>Logistic Regression 虽然被称为回归，但其实际上是分类模型，并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。&lt;/p>
&lt;p>Logistic 回归的本质是：假设数据服从这个分布，然后使用极大似然估计做参数的估计。&lt;/p></description></item><item><title>C/C++面试基础知识</title><link>https://rd163.visword.com/posts/cpp-interview/</link><pubDate>Thu, 08 May 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cpp-interview/</guid><description><![CDATA[<h2 id="cc-basics" class="headerLink">
    <a href="#cc-basics" class="header-mark"></a>C/C++ Basics</h2><h3 id="如何定义一个只能在堆上栈上生成对象的类" class="headerLink">
    <a href="#%e5%a6%82%e4%bd%95%e5%ae%9a%e4%b9%89%e4%b8%80%e4%b8%aa%e5%8f%aa%e8%83%bd%e5%9c%a8%e5%a0%86%e4%b8%8a%e6%a0%88%e4%b8%8a%e7%94%9f%e6%88%90%e5%af%b9%e8%b1%a1%e7%9a%84%e7%b1%bb" class="header-mark"></a>如何定义一个只能在堆上（栈上）生成对象的类？</h3><blockquote>
  <p><a href="https://www.nowcoder.com/questionTerminal/0a584aa13f804f3ea72b442a065a7618" target="_blank" rel="noopener noreferrer">如何定义一个只能在堆上（栈上）生成对象的类?</a></p>

</blockquote><h4 id="只能在堆上" class="headerLink">
    <a href="#%e5%8f%aa%e8%83%bd%e5%9c%a8%e5%a0%86%e4%b8%8a" class="header-mark"></a>只能在堆上</h4><p>方法：将析构函数设置为私有</p>
<p>原因：C++ 是静态绑定语言，编译器管理栈上对象的生命周期，编译器在为类对象分配栈空间时，会先检查类的析构函数的访问性。若析构函数不可访问，则不能在栈上创建对象。</p>]]></description></item><item><title>Kubernetes 优雅停止</title><link>https://rd163.visword.com/posts/k8s-termination-grace/</link><pubDate>Fri, 09 May 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/k8s-termination-grace/</guid><description><![CDATA[<h1 id="kubernetes-优雅停止" class="headerLink">
    <a href="#kubernetes-%e4%bc%98%e9%9b%85%e5%81%9c%e6%ad%a2" class="header-mark"></a>Kubernetes 优雅停止</h1><p>在Kubernetes (K8s) 中，Pod的优雅终止过程是一个有序的过程，旨在确保Pod中运行的应用程序能够平滑关闭，释放资源，并尽可能减少因突然关闭带来的数据丢失和服务中断。</p>]]></description></item><item><title>通知推送服务方案</title><link>https://rd163.visword.com/posts/notify-push-service/</link><pubDate>Sat, 31 May 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/notify-push-service/</guid><description><![CDATA[<h2 id="bark" class="headerLink">
    <a href="#bark" class="header-mark"></a>Bark</h2><ul>
<li><a href="https://github.com/Finb/bark-server" target="_blank" rel="noopener noreferrer">Backend of Bark</a></li>
</ul>
<h2 id="ntfysh" class="headerLink">
    <a href="#ntfysh" class="header-mark"></a>ntfy.sh</h2><ul>
<li><a href="https://github.com/binwiederhier/ntfy" target="_blank" rel="noopener noreferrer">ntfy.sh</a></li>
</ul>]]></description></item><item><title>trpc微服务寻址方案设计</title><link>https://rd163.visword.com/posts/trpc-service-addressing-scheme-design/</link><pubDate>Sun, 01 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/trpc-service-addressing-scheme-design/</guid><description><![CDATA[<h2 id="服务命名" class="headerLink">
    <a href="#%e6%9c%8d%e5%8a%a1%e5%91%bd%e5%90%8d" class="header-mark"></a>服务命名</h2><p>tRPC在服务命名上定义了以下3个纬度信息：</p>
<ul>
<li>app名（应用名），表示某个业务系统的名称，用于标识某个业务下不同服务模块的一个集合；</li>
<li>server名（模块名），表示具体服务模块的名称，一般也称为模块的进程名称；</li>
<li>service名，表示具体服务提供者的名称，一般使用proto文件定义的Service名称； 其中app.server 的组合在全局上要具备唯一性。</li>
</ul>
<p>服务命名这样定义的好处是：</p>]]></description></item><item><title>html5之语义化标签</title><link>https://rd163.visword.com/posts/html5-semantic-tags/</link><pubDate>Sun, 01 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/html5-semantic-tags/</guid><description><![CDATA[<h2 id="语义化标签" class="headerLink">
    <a href="#%e8%af%ad%e4%b9%89%e5%8c%96%e6%a0%87%e7%ad%be" class="header-mark"></a>语义化标签</h2><p>在[HTML5]标准中，新加了几个用于增添页面语义的标签，这些标签有：article、section、nav和aside等。与别的大多数标签不同，浏览器在解释渲染这些标签的时候仅仅把它们作为普通的div块级元素来进行处理，不会添加任何额外的展现逻辑；也即，这些标签仅用于增添语义。对于Web开发人员而言，使用这些标签的实际意义主要有2点：搜索引擎优化(SEO)，以及增加页面的可用性(accessibility)。</p>
<p>在元素分类上，article、section、nav和aside称之为“Sectioning Content”。</p>
<p><code>article</code><br>
article元素可用于表示页面上某块具有<strong>一定独立性</strong>的内容，这个内容可以是一篇文章、论坛上的一个帖子/评论、一篇博客、一个可交互的控件等。article标签可以嵌套使用，当这么做时，子article元素与父article元素在逻辑上必须有相应的关联。如Web开发者可以将一篇博客的正文以及评论作为父级article元素，而将其中的各个评论作为子article元素。</p>]]></description></item><item><title>boost.asio 网络编程</title><link>https://rd163.visword.com/posts/boost-asio-cpp-network/</link><pubDate>Tue, 03 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/boost-asio-cpp-network/</guid><description><![CDATA[<h2 id="参考" class="headerLink">
    <a href="#%e5%8f%82%e8%80%83" class="header-mark"></a>参考</h2><ul>
<li><a href="https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chinese/content/Chapter1.html" target="_blank" rel="noopener noreferrer">boost.asio 网络编程</a></li>
<li><a href="https://www.cnblogs.com/blizzard8204/p/17562607.html" target="_blank" rel="noopener noreferrer">C++ 网络编程 asio 使用总结 </a></li>
<li><a href="https://github.com/sprinfall/boost-asio-study/blob/master/Tutorial_zh-CN.md?plain=1" target="_blank" rel="noopener noreferrer">基于 Boost Asio 的 C++ 网络编程</a></li>
<li><a href="http://www.anger6.com/2022/05/05/boost/asio/" target="_blank" rel="noopener noreferrer">Boost.Asio看这一篇就够了</a></li>
</ul>]]></description></item><item><title>基于boost.asio的WebSocket类库</title><link>https://rd163.visword.com/posts/cpp-websocket-base-on-boost-asio/</link><pubDate>Thu, 05 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/cpp-websocket-base-on-boost-asio/</guid><description><![CDATA[<h2 id="zaphoydwebsocketpp" class="headerLink">
    <a href="#zaphoydwebsocketpp" class="header-mark"></a>zaphoyd/websocketpp</h2><p><a href="https://github.com/zaphoyd/websocketpp" target="_blank" rel="noopener noreferrer">WebSocket++ github </a></p>
<p>具有以下特点：</p>
<ul>
<li>Header Only的跨平台 WebSocket 库</li>
<li>网络 IO 基于 Boost::asio 实现</li>
<li>由于boost::asio 的 io_context 使用了线程存储,所以在 M:N 的协程模式(fiber) 下调用需格外小心。最好是采用 1:N 的协程。</li>
</ul>
<p>当服务作为客户端管理多个 Connection 时， 如果每个Connection 对象都使用一个 Client 对象， 由于 Client 在Connect（无论Url中使用IP还是域名） 时都会创建一个独立线程来进行域名解析，导致线程数过多，从而性能地下。</p>]]></description></item><item><title>Go语言Web框架：Beego</title><link>https://rd163.visword.com/posts/golang-beego/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-beego/</guid><description><![CDATA[<h2 id="beego框架概述" class="headerLink">
    <a href="#beego%e6%a1%86%e6%9e%b6%e6%a6%82%e8%bf%b0" class="header-mark"></a>Beego框架概述</h2><p>Beego是一个用Go语言开发的全栈MVC框架，由国人谢孟军(Asta Xie)开发并维护。它借鉴了Python的Django和Flask等框架的设计思想，同时结合了Go语言的特性，为开发者提供了一套完整的Web开发解决方案。</p>]]></description></item><item><title>js模板引擎Pug</title><link>https://rd163.visword.com/posts/js-template-engine-pug/</link><pubDate>Wed, 11 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/js-template-engine-pug/</guid><description><![CDATA[<p>Pug 是一个用 JavaScript 实现的高性能的模板引擎，支持 Node.js 和浏览器运行环境，其灵感来自 Haml 项目。</p>
<h2 id="曾用名-jade" class="headerLink">
    <a href="#%e6%9b%be%e7%94%a8%e5%90%8d-jade" class="header-mark"></a>曾用名 &ldquo;Jade&rdquo;</h2><p>本项目曾用名叫 “Jade”。然而，我们发现 “Jade” 是一个已经被注册的商标，因此需要给项目起一个新名字。经过项目维护团队的讨论，我们将名字改为了 “Pug”。从版本 2 开始，&ldquo;pug&rdquo; 成为了官方软件包的名称。</p>]]></description></item><item><title>Markdown 转换为 HTML 的golang开源项目</title><link>https://rd163.visword.com/posts/golang-markdown-to-html/</link><pubDate>Fri, 13 Jun 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/golang-markdown-to-html/</guid><description><![CDATA[<p>在 Go 语言生态中，有几个优秀的开源项目可以将 Markdown 转换为 HTML。以下是常见的工具和库：</p>
<h2 id="goldmark" class="headerLink">
    <a href="#goldmark" class="header-mark"></a>Goldmark</h2><p>GitHub: <a href="https://github.com/yuin/goldmark" target="_blank" rel="noopener noreferrer">https://github.com/yuin/goldmark</a></p>
<p>特点：</p>
<ul>
<li>高性能、符合 CommonMark 标准。</li>
<li>支持扩展（如表格、任务列表、数学公式等）。</li>
<li>被许多知名项目（如 Hugo 静态站点生成器）使用。</li>
<li>提供 Playground：https://yuin.github.io/goldmark/playground/</li>
</ul>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-13" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="n">import</span> <span class="s2">&#34;github.com/yuin/goldmark&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">md</span> <span class="p">:</span><span class="o">=</span> <span class="n">goldmark</span><span class="o">.</span><span class="n">New</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="k">var</span> <span class="n">buf</span> <span class="n">bytes</span><span class="o">.</span><span class="n">Buffer</span>
</span></span><span class="line"><span class="cl"><span class="n">err</span> <span class="p">:</span><span class="o">=</span> <span class="n">md</span><span class="o">.</span><span class="n">Convert</span><span class="p">([]</span><span class="n">byte</span><span class="p">(</span><span class="s2">&#34;# Hello&#34;</span><span class="p">),</span> <span class="o">&amp;</span><span class="n">buf</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">html</span> <span class="p">:</span><span class="o">=</span> <span class="n">buf</span><span class="o">.</span><span class="n">String</span><span class="p">()</span></span></span></code></pre>
</div>
<h2 id="blackfriday" class="headerLink">
    <a href="#blackfriday" class="header-mark"></a>Blackfriday</h2><p>GitHub: <a href="https://github.com/russross/blackfriday" target="_blank" rel="noopener noreferrer">https://github.com/russross/blackfriday</a></p>]]></description></item><item><title>部署postfix服务进行发送邮件</title><link>https://rd163.visword.com/posts/postfix_deployment_to_sendmail/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/postfix_deployment_to_sendmail/</guid><description><![CDATA[<h2 id="概述" class="headerLink">
    <a href="#%e6%a6%82%e8%bf%b0" class="header-mark"></a>概述</h2><p>若只需发送邮件（如监控报警、事务通知），无需接收邮件，可采用 ​​Postfix​​ 或 ​​SSMTP​​ 的极简配置，本文介绍如何部署​​Postfix​​ 服务进行发送邮件。</p>
<p>如果需要收发同时支持， 可采用 iRedMail 部署.</p>]]></description></item><item><title>trpc/brpc/grpc协议设计</title><link>https://rd163.visword.com/posts/proto_disign_for_trpc_grpc_brpc/</link><pubDate>Wed, 09 Jul 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/proto_disign_for_trpc_grpc_brpc/</guid><description><![CDATA[<h2 id="trpc" class="headerLink">
    <a href="#trpc" class="header-mark"></a>trpc</h2><ul>
<li><a href="https://github.com/trpc-group/trpc/blob/main/docs/zh/trpc_protocol_design.md" target="_blank" rel="noopener noreferrer">tRPC协议设计</a></li>
<li><a href="https://github.com/trpc-group/trpc/blob/main/trpc/trpc.proto" target="_blank" rel="noopener noreferrer">trpc.proto</a></li>
</ul>
<h2 id="grpc" class="headerLink">
    <a href="#grpc" class="header-mark"></a>grpc</h2><p>四种通信模式实现​​:</p>
<p>​- ​Unary RPC​​：单一请求对应单一响应（类似传统 HTTP 请求）。
​​- Server Streaming​​：服务端通过同一流发送多个响应。
​​- Client Streaming​​：客户端通过同一流发送多个请求。
​​- Bidirectional Streaming​​：全双工通信，双方可异步发送消息（基于 HTTP/2 流控机制）。</p>]]></description></item><item><title>kimi k2模型介绍</title><link>https://rd163.visword.com/posts/kimi_k2_model_intro/</link><pubDate>Sun, 20 Jul 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/kimi_k2_model_intro/</guid><description><![CDATA[<p>Kimi K2 是北京月之暗面科技有限公司于 2025 年 7 月 11 日推出的万亿参数 MoE（混合专家）架构大模型，包含两个主要版本：<strong>Kimi-K2-Base</strong>（基座模型）和 <strong>Kimi-K2-Instruct</strong>（指令微调模型）。以下是它们的详细介绍：</p>]]></description></item><item><title>实时语音转文字</title><link>https://rd163.visword.com/posts/realtime_audio_to_text/</link><pubDate>Sat, 23 Aug 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/realtime_audio_to_text/</guid><description><![CDATA[<h1 id="开源项目" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae" class="header-mark"></a>开源项目</h1><h2 id="intrascribe" class="headerLink">
    <a href="#intrascribe" class="header-mark"></a>IntraScribe</h2><ul>
<li><a href="https://github.com/weynechen/intrascribe" target="_blank" rel="noopener noreferrer">团队适用的语音转录总结工具，完整的前后端代码</a></li>
</ul>
<p>实现原理：</p>
<h3 id="rtc" class="headerLink">
    <a href="#rtc" class="header-mark"></a>rtc</h3><ul>
<li>其音频捕获框架采用 fastrtc，直接将端口mount到fastapi之上，对外公开暴露</li>
<li>鉴权：需要再不修改源码的情况下，对fastrtc的端口添加中间件进行认证保护。</li>
</ul>
<h3 id="asr" class="headerLink">
    <a href="#asr" class="header-mark"></a>asr</h3><p>语音识别采用了当前流行的开源项目 FunASR.</p>]]></description></item><item><title>斯坦福小镇 AI 解读</title><link>https://rd163.visword.com/posts/generative-agents/</link><pubDate>Wed, 27 Aug 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/generative-agents/</guid><description>&lt;p>斯坦福和谷歌的研究人员创建了一个类似于《模拟人生》的微型 RPG 虚拟世界，其中 25 个角色由 GPT 和自定义代码控制，并在arxiv上提交了论文版本，引起了对AIGC+游戏的广泛讨论；&lt;/p></description></item><item><title>虚幻引擎 UE 学习路线</title><link>https://rd163.visword.com/posts/ue-learning-roadmap/</link><pubDate>Sun, 07 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/ue-learning-roadmap/</guid><description><![CDATA[<p>虚幻引擎 UE 学习路线</p>
<h2 id="一启动项目" class="headerLink">
    <a href="#%e4%b8%80%e5%90%af%e5%8a%a8%e9%a1%b9%e7%9b%ae" class="header-mark"></a>一、启动项目</h2><h3 id="1-roguelike" class="headerLink">
    <a href="#1-roguelike" class="header-mark"></a>1. Roguelike</h3><ul>
<li><a href="https://github.com/vxiaozhi/ActionRoguelike" target="_blank" rel="noopener noreferrer">Action Roguelike C++ Unreal Engine Game</a></li>
</ul>
<p>理由：</p>
<ul>
<li>足够简单而且代码开源</li>
<li>提供 UE4.x - UE5.x 的支持。</li>
<li>有中英文教程
<ul>
<li><a href="https://www.cnblogs.com/Qiu-Bai/p/17180550.html" target="_blank" rel="noopener noreferrer">斯坦福课程 UE4 C++ ActionRoguelike游戏实例教程 0.绪论 </a></li>
</ul>
</li>
</ul>
<h3 id="step" class="headerLink">
    <a href="#step" class="header-mark"></a>Step</h3><div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-4" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl">git clone git@github.com:vxiaozhi/ActionRoguelike.git
</span></span><span class="line"><span class="cl">cd ActionRoguelike
</span></span><span class="line"><span class="cl">git chekcout UE5.3</span></span></code></pre>
</div>
<hr>
<h3 id="2-epicsurvivalgame---epic求生游戏" class="headerLink">
    <a href="#2-epicsurvivalgame---epic%e6%b1%82%e7%94%9f%e6%b8%b8%e6%88%8f" class="header-mark"></a>2. EpicSurvivalGame - Epic求生游戏</h3><ul>
<li><a href="https://github.com/vxiaozhi/EpicSurvivalGame" target="_blank" rel="noopener noreferrer">EpicSurvivalGame</a></li>
</ul>
<h3 id="3-carla---自动驾驶模拟器" class="headerLink">
    <a href="#3-carla---%e8%87%aa%e5%8a%a8%e9%a9%be%e9%a9%b6%e6%a8%a1%e6%8b%9f%e5%99%a8" class="header-mark"></a>3. <strong>CARLA - 自动驾驶模拟器</strong></h3><ul>
<li><strong>GitHub 地址</strong>: <a href="https://github.com/carla-simulator/carla" target="_blank" rel="noopener noreferrer">https://github.com/carla-simulator/carla</a></li>
<li><strong>描述</strong>: CARLA 是一个开源的自动驾驶模拟器，基于 Unreal Engine 构建。它提供了高度可定制的城市环境、交通模拟、传感器模拟（如摄像头、激光雷达）以及用于训练和测试自动驾驶算法的 API。</li>
<li><strong>特点</strong>:
<ul>
<li>支持多种天气和光照条件。</li>
<li>提供真实的物理模拟和交通行为。</li>
<li>兼容 ROS（机器人操作系统）和 Autoware。</li>
</ul>
</li>
</ul>
<hr>
<h3 id="4-airsim---无人机与车辆模拟器" class="headerLink">
    <a href="#4-airsim---%e6%97%a0%e4%ba%ba%e6%9c%ba%e4%b8%8e%e8%bd%a6%e8%be%86%e6%a8%a1%e6%8b%9f%e5%99%a8" class="header-mark"></a>4. <strong>AirSim - 无人机与车辆模拟器</strong></h3><ul>
<li><strong>GitHub 地址</strong>: <a href="https://github.com/microsoft/AirSim" target="_blank" rel="noopener noreferrer">https://github.com/microsoft/AirSim</a></li>
<li><strong>描述</strong>: AirSim 是微软开发的开源模拟器，最初专注于无人机，后来扩展支持车辆模拟。它基于 Unreal Engine（也支持 Unity），提供高保真的物理引擎和传感器模拟，适用于自动驾驶研究和机器学习。</li>
<li><strong>特点</strong>:
<ul>
<li>支持多种车辆类型（汽车、无人机）。</li>
<li>提供逼真的环境渲染和物理模拟。</li>
<li>兼容 Python 和 C++ API，便于集成机器学习框架。</li>
</ul>
</li>
</ul>
<hr>
<h3 id="5-deepdrive---自动驾驶模拟平台" class="headerLink">
    <a href="#5-deepdrive---%e8%87%aa%e5%8a%a8%e9%a9%be%e9%a9%b6%e6%a8%a1%e6%8b%9f%e5%b9%b3%e5%8f%b0" class="header-mark"></a>5. <strong>DeepDrive - 自动驾驶模拟平台</strong></h3><ul>
<li><strong>GitHub 地址</strong>: <a href="https://github.com/deepdrive/deepdrive" target="_blank" rel="noopener noreferrer">https://github.com/deepdrive/deepdrive</a></li>
<li><strong>描述</strong>: DeepDrive 是一个基于 Unreal Engine 的自动驾驶模拟平台，专注于提供大规模数据集和训练环境。它支持端到端的深度学习模型训练，并提供丰富的传感器数据。</li>
<li><strong>特点</strong>:</li>
<li>支持多摄像头和 LiDAR 数据生成。</li>
<li>提供预构建的城市环境和交通场景。</li>
<li>易于与 TensorFlow 或 PyTorch 集成。</li>
</ul>
<hr>
<h2 id="二把项目改为unlua" class="headerLink">
    <a href="#%e4%ba%8c%e6%8a%8a%e9%a1%b9%e7%9b%ae%e6%94%b9%e4%b8%baunlua" class="header-mark"></a>二、把项目改为：UnLua</h2><h2 id="三把项目改为unlua--python" class="headerLink">
    <a href="#%e4%b8%89%e6%8a%8a%e9%a1%b9%e7%9b%ae%e6%94%b9%e4%b8%baunlua--python" class="header-mark"></a>三、把项目改为：UnLua + Python</h2>]]></description></item><item><title>Python asyncio 的事件循环机制</title><link>https://rd163.visword.com/posts/python-asyncio-event-loop/</link><pubDate>Sun, 07 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python-asyncio-event-loop/</guid><description><![CDATA[<p>在使用 Python 的 asyncio 库实现异步编程的过程中，协程与事件循环这两个概念可以说有着千丝万缕的联系，常常是形影不离的出现，如胶似漆般的存在。</p>
<h2 id="asyncio-事件循环的理解" class="headerLink">
    <a href="#asyncio-%e4%ba%8b%e4%bb%b6%e5%be%aa%e7%8e%af%e7%9a%84%e7%90%86%e8%a7%a3" class="header-mark"></a>Asyncio 事件循环的理解</h2><ul>
<li><a href="https://fastapi.tiangolo.com/async/" target="_blank" rel="noopener noreferrer">FastAPI 文档中对 async 的介绍</a></li>
<li><a href="https://www.lipijin.com/python-asyncio-eventloop" target="_blank" rel="noopener noreferrer">以定时器为例研究一手 Python asyncio 的协程事件循环调度</a></li>
<li><a href="https://www.cnblogs.com/traditional/p/17357782.html" target="_blank" rel="noopener noreferrer">《asyncio 系列》1. 什么是 asyncio？如何基于单线程实现并发？事件循环又是怎么工作的？</a></li>
<li><a href="https://www.cnblogs.com/traditional/p/17363960.html" target="_blank" rel="noopener noreferrer">《asyncio 系列》2. 详解 asyncio 的协程、任务、future，以及事件循环 </a></li>
<li><a href="https://www.cnblogs.com/traditional/p/17364391.html" target="_blank" rel="noopener noreferrer">《asyncio 系列》3. 详解 Socket（阻塞、非阻塞），以及和 asyncio 的搭配</a></li>
</ul>
<h2 id="事件循环第三方实现" class="headerLink">
    <a href="#%e4%ba%8b%e4%bb%b6%e5%be%aa%e7%8e%af%e7%ac%ac%e4%b8%89%e6%96%b9%e5%ae%9e%e7%8e%b0" class="header-mark"></a>事件循环第三方实现</h2><p>Python 的 EventLoop 是一个抽象类，它定义了事件循环的基本方法，如创建、运行、停止、注册回调函数等等。除了Python 自带的 asyncio 库，还有其他第三方库，它们都实现了 EventLoop 的功能，如：</p>]]></description></item><item><title>游戏剧情交互开发工具</title><link>https://rd163.visword.com/posts/storyline-interactive-tools/</link><pubDate>Mon, 08 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/storyline-interactive-tools/</guid><description><![CDATA[<h2 id="游戏剧情交互开发工具" class="headerLink">
    <a href="#%e6%b8%b8%e6%88%8f%e5%89%a7%e6%83%85%e4%ba%a4%e4%ba%92%e5%bc%80%e5%8f%91%e5%b7%a5%e5%85%b7" class="header-mark"></a>游戏剧情交互开发工具</h2><h2 id="yarn-spinner-工具" class="headerLink">
    <a href="#yarn-spinner-%e5%b7%a5%e5%85%b7" class="header-mark"></a>Yarn Spinner 工具</h2><ul>
<li><a href="https://github.com/YarnSpinnerTool/YarnSpinner" target="_blank" rel="noopener noreferrer">Yarn Spinner C#</a></li>
<li><a href="https://github.com/YarnSpinnerTool/YarnSpinner-Unity" target="_blank" rel="noopener noreferrer">Yarn Spinner for Unity</a></li>
<li><a href="https://github.com/YarnSpinnerTool/YarnSpinner-Console" target="_blank" rel="noopener noreferrer">Yarn Spinner Console</a> Console命令行</li>
<li><a href="https://github.com/YarnSpinnerTool/try.yarnspinner.dev" target="_blank" rel="noopener noreferrer">try.yarnspinner.dev</a> Web端 Playground</li>
<li><a href="https://github.com/relaypro-open/YarnRunner-Python" target="_blank" rel="noopener noreferrer">YarnRunner-Python</a> YarnRunner的 Python 实现</li>
</ul>]]></description></item><item><title>GOAP(Goal-Oriented Action Planning)算法</title><link>https://rd163.visword.com/posts/algorithm-goap/</link><pubDate>Sat, 13 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/algorithm-goap/</guid><description><![CDATA[<h2 id="goap-概述" class="headerLink">
    <a href="#goap-%e6%a6%82%e8%bf%b0" class="header-mark"></a>GOAP 概述</h2><p>GOAP（Goal-Oriented Action Planning，目标导向行动规划）是一种基于目标的智能决策算法，常用于游戏 AI、机器人控制等领域。</p>]]></description></item><item><title>行为树算法</title><link>https://rd163.visword.com/posts/behavior-tree/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/behavior-tree/</guid><description><![CDATA[<p>行为树(Behavior Tree)​​ 是一种用于描述AI行为的树状数据结构，通过节点之间的层次关系来组织复杂的行为逻辑。</p>
<h2 id="开源项目" class="headerLink">
    <a href="#%e5%bc%80%e6%ba%90%e9%a1%b9%e7%9b%ae" class="header-mark"></a>开源项目</h2><h3 id="behaviortreecpp" class="headerLink">
    <a href="#behaviortreecpp" class="header-mark"></a>BehaviorTree.CPP</h3><ul>
<li><a href="https://github.com/BehaviorTree/BehaviorTree.CPP" target="_blank" rel="noopener noreferrer">BehaviorTree.CPP</a></li>
</ul>
<h3 id="golang" class="headerLink">
    <a href="#golang" class="header-mark"></a>Golang</h3><ul>
<li><a href="https://github.com/magicsea/behavior3go" target="_blank" rel="noopener noreferrer">behavior3go</a></li>
<li><a href="https://github.com/askft/go-behave" target="_blank" rel="noopener noreferrer">go-behave</a></li>
<li><a href="https://github.com/joeycumines/go-behaviortree" target="_blank" rel="noopener noreferrer">go-behaviortree</a> 实现了Sequence and Selector，与 PyTrees 类似</li>
</ul>
<h3 id="pytrees" class="headerLink">
    <a href="#pytrees" class="header-mark"></a>PyTrees</h3><p>PyTrees 是一个强大的 Python 行为树实现，专为机器人和其他复杂系统创建决策引擎而设计。PyTrees 提供了一个优雅的模块化框架，使复杂的决策管理变得简单。</p>]]></description></item><item><title>server学习路线</title><link>https://rd163.visword.com/posts/server-learning-roadmap/</link><pubDate>Sun, 14 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/server-learning-roadmap/</guid><description><![CDATA[<h2 id="良好的系统设计" class="headerLink">
    <a href="#%e8%89%af%e5%a5%bd%e7%9a%84%e7%b3%bb%e7%bb%9f%e8%ae%be%e8%ae%a1" class="header-mark"></a>良好的系统设计</h2><ul>
<li><a href="https://github.com/ruanyf/weekly/blob/master/docs/issue-362.md" target="_blank" rel="noopener noreferrer">GitHub 工程师总结什么是良好的系统设计</a></li>
</ul>
<p><strong>总结如下：</strong></p>
<p>1、</p>
<p>程序设计是组装代码，系统设计是组装服务。</p>
<p>程序设计的组件是变量、函数、类等，系统设计的组件是服务器、数据库、缓存、队列、事件总线、代理等。</p>]]></description></item><item><title>python3开发环境搭建</title><link>https://rd163.visword.com/posts/python3-development-env-setup/</link><pubDate>Sat, 20 Sep 2025 00:00:00 +0800</pubDate><author><name>小智晖</name></author><guid>https://rd163.visword.com/posts/python3-development-env-setup/</guid><description><![CDATA[<h2 id="版本选择" class="headerLink">
    <a href="#%e7%89%88%e6%9c%ac%e9%80%89%e6%8b%a9" class="header-mark"></a>版本选择</h2><p>建议使用 Python 3.10.x 以上版本，因为 3.8 版本已经不再支持。
例如，在 mac 安装 python3.8报错：</p>
<div class="code-block highlight is-open show-line-numbers  tw:group tw:my-2">
  <div class="
    
    tw:flex 
    tw:flex-row
    tw:flex-1 
    tw:justify-between 
    tw:w-full tw:bg-bgColor-secondary
    ">      
    <button 
      class="
        code-block-button
        tw:mx-2 
        tw:flex
        tw:flex-row
        tw:flex-1"
      aria-hidden="true">
          <span class="tw:group-[.is-open]:rotate-90 tw:transition-[transform] tw:duration-500 tw:ease-in-out tw:print:hidden! tw:w-min tw:h-min tw:my-1 tw:mx-1"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"/></svg></span>
          <span class="tw:select-none tw:my-1! tw:block">text</span>
      </button>

   <div class="tw:flex">
      <button 
        class="
          line-number-button
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.show-line-numbers]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle line numbers"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z"/></svg></button>

      <button 
        class="
          wrap-code-button
          tw:select-none 
          tw:mx-2 
          tw:hidden 
          tw:group-[.is-open]:block 
          tw:group-[.is-wrap]:text-fgColor-link 
          tw:print:hidden!" 
        title="Toggle code wrap"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z"/></svg></button>
      
      <button 
        class="
          copy-code-button
          tw:select-none
          tw:mx-2 
          tw:hidden
          tw:group-[.is-open]:block
          tw:hover:text-fgColor-link 
          tw:print:hidden!"
        title="Copy code">
          <span class="copy-icon tw:block"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z"/></svg></span>
          <span class="check-icon tw:hidden"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"/></svg></span>
      </button>
        
      <button 
        class="
          tw:select-none 
          tw:mx-2 
          tw:block 
          tw:group-[.is-open]:hidden 
          tw:print:hidden!" 
        disabled
        aria-hidden="true"><svg class="icon"
    xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --><path d="M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"/></svg></button>
    </div>
  </div>
  <pre style="counter-reset: codeblock;" class="tw:block tw:m-0 tw:p-0"><code 
    id="codeblock-id-28" 
    class="
      chroma 
      tw:block! 
      tw:p-0
      tw:m-0
      tw:transition-[max-height] 
      tw:duration-500 
      tw:ease-in-out 
      tw:group-[.is-closed]:max-h-0! 
      tw:group-[.is-wrap]:text-wrap
      tw:overflow-y-hidden
      tw:overflow-x-auto
      tw:scrollbar-thin
      "><span class="line"><span class="cl"><span class="o">==&gt;</span> <span class="n">Fetching</span> <span class="n">downloads</span> <span class="k">for</span><span class="p">:</span> <span class="n">python</span><span class="err">@</span><span class="mf">3.8</span>
</span></span><span class="line"><span class="cl"><span class="n">Error</span><span class="p">:</span> <span class="n">python</span><span class="err">@</span><span class="mf">3.8</span> <span class="n">has</span> <span class="n">been</span> <span class="n">disabled</span> <span class="n">because</span> <span class="n">it</span> <span class="n">is</span> <span class="n">deprecated</span> <span class="n">upstream</span><span class="o">!</span> <span class="n">It</span> <span class="n">was</span> <span class="n">disabled</span> <span class="n">on</span> <span class="mi">2024</span><span class="o">-</span><span class="mi">10</span><span class="o">-</span><span class="mf">14.</span></span></span></code></pre>
</div>
<h2 id="ubuntu-2004-上安装-python-310" class="headerLink">
    <a href="#ubuntu-2004-%e4%b8%8a%e5%ae%89%e8%a3%85-python-310" class="header-mark"></a>Ubuntu 20.04 上安装 Python 3.10</h2><p>在 Ubuntu 20.04 上安装 Python 3.10 是一个非常常见的需求，因为 20.04 自带的版本是 3.8。有几种可靠的方法，<strong>强烈推荐使用 Deadsnakes PPA</strong>，这是最官方、最便捷的方式。</p>]]></description></item></channel></rss>