<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tech on Elastic Code</title>
    <link>https://my.elastic-code.com/zh/categories/tech/</link>
    <description>Recent content in Tech on Elastic Code</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <copyright>© 2026 Elastic Code</copyright>
    <lastBuildDate>Wed, 08 Jan 2025 09:32:11 +0800</lastBuildDate><atom:link href="https://my.elastic-code.com/zh/categories/tech/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>gRPC 介绍</title>
      <link>https://my.elastic-code.com/zh/posts/tech/grpc-%E5%9B%9B%E7%A7%8D%E6%A8%A1%E5%BC%8F%E5%8F%8A%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tech/grpc-%E5%9B%9B%E7%A7%8D%E6%A8%A1%E5%BC%8F%E5%8F%8A%E5%BA%94%E7%94%A8%E5%9C%BA%E6%99%AF/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;gRPC 四种模式及应用场景&#xA;    &lt;div id=&#34;grpc-四种模式及应用场景&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#grpc-%e5%9b%9b%e7%a7%8d%e6%a8%a1%e5%bc%8f%e5%8f%8a%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&lt;p&gt;在 gRPC 中，RPC 调用模式有四种，每种模式适用于不同的业务场景。下面将详细分析这四种模式及其对应的应用场景。&lt;/p&gt;&#xA;&lt;p&gt;参考官方文档概念：https://grpc.io/docs/what-is-grpc/core-concepts&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;1. 简单 RPC (Unary RPC)&#xA;    &lt;div id=&#34;1-简单-rpc-unary-rpc&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#1-%e7%ae%80%e5%8d%95-rpc-unary-rpc&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h3 class=&#34;relative group&#34;&gt;模式描述&#xA;    &lt;div id=&#34;模式描述&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%a8%a1%e5%bc%8f%e6%8f%8f%e8%bf%b0&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h3&gt;&#xA;&lt;p&gt;客户端发送一个请求，服务端返回一个响应。双方的通信都是一次性的。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Http 之 jsonp</title>
      <link>https://my.elastic-code.com/zh/posts/tech/http/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tech/http/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Http&#xA;    &lt;div id=&#34;http&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#http&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;jsonp&#xA;    &lt;div id=&#34;jsonp&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#jsonp&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;概念：浏览器通过script标签中src属性向服务端发送执行函数的名字，服务端根据函数名、服务端数据，拼接成一个函数调用的字符串给客户端script标签执行，这称之为JSONP&lt;/p&gt;&#xA;&lt;p&gt;特点：&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ssh 登入服务器过程分析</title>
      <link>https://my.elastic-code.com/zh/posts/legacy/ssh-%E7%99%BB%E5%85%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%87%E7%A8%8B%E5%88%86%E6%9E%90/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/legacy/ssh-%E7%99%BB%E5%85%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%87%E7%A8%8B%E5%88%86%E6%9E%90/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;用户密码方式验证登入过程分析&#xA;    &lt;div id=&#34;用户密码方式验证登入过程分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e6%96%b9%e5%bc%8f%e9%aa%8c%e8%af%81%e7%99%bb%e5%85%a5%e8%bf%87%e7%a8%8b%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;客户端ssh向服务器发送连接请求，传递用户名及ip端口&lt;/li&gt;&#xA;&lt;li&gt;服务端接收到请求，检查用户名是否存在，不存在则拒绝。反之，会将公钥及指纹（公钥对应的sha256值）发送给客户端&lt;/li&gt;&#xA;&lt;li&gt;若客户端是第一次请求连接，则会提醒用户确认该指纹是否来自目的服务器，若用户输入yes确认则会将指纹存放到known_host中，下次再连接时，当发现服务器传过来的指纹与已存入到known_host中的指纹一致，则服务器身份直接验证通过，无需提醒确认。反之会发出警告：提醒说该公钥和指纹可能是由于中间人拦截而被篡改的或者可能是服务器更新了新的公私钥对。&lt;/li&gt;&#xA;&lt;li&gt;客户端完成公钥接收及指纹对比后，需要输入密码，将密码使用服务器公钥进行加密发送到服务器，服务器私钥解密验证成功则允许登入。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;公钥身份验证登入过程分析&#xA;    &lt;div id=&#34;公钥身份验证登入过程分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%85%ac%e9%92%a5%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e7%99%bb%e5%85%a5%e8%bf%87%e7%a8%8b%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;客户端在本地生成一对密钥，包括一个公钥和一个私钥。且将自己的公钥放到到服务器上的 &lt;strong&gt;~/.ssh/authorized_keys&lt;/strong&gt; 文件中&lt;/li&gt;&#xA;&lt;li&gt;客户端ssh向服务器发送连接请求&lt;/li&gt;&#xA;&lt;li&gt;服务端检查用户名存在后，生成一个随机串返给客户端&lt;/li&gt;&#xA;&lt;li&gt;客户端自己的私钥对随机串进行签名并发送给服务器&lt;/li&gt;&#xA;&lt;li&gt;服务器使用已存入&lt;strong&gt;authorized_keys&lt;/strong&gt; 中的公钥进行验签，若验签通过则客户端身份认证成功&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
      
    </item>
    
    <item>
      <title>ssh 连接过程</title>
      <link>https://my.elastic-code.com/zh/posts/tech/ssh-%E7%99%BB%E5%85%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%87%E7%A8%8B%E5%88%86%E6%9E%90/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tech/ssh-%E7%99%BB%E5%85%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%87%E7%A8%8B%E5%88%86%E6%9E%90/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;用户密码方式验证登入过程分析&#xA;    &lt;div id=&#34;用户密码方式验证登入过程分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%94%a8%e6%88%b7%e5%af%86%e7%a0%81%e6%96%b9%e5%bc%8f%e9%aa%8c%e8%af%81%e7%99%bb%e5%85%a5%e8%bf%87%e7%a8%8b%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;客户端ssh向服务器发送连接请求，传递用户名及ip端口&lt;/li&gt;&#xA;&lt;li&gt;服务端接收到请求，检查用户名是否存在，不存在则拒绝。反之，会将公钥及指纹（公钥对应的sha256值）发送给客户端&lt;/li&gt;&#xA;&lt;li&gt;若客户端是第一次请求连接，则会提醒用户确认该指纹是否来自目的服务器，若用户输入yes确认则会将指纹存放到known_host中，下次再连接时，当发现服务器传过来的指纹与已存入到known_host中的指纹一致，则服务器身份直接验证通过，无需提醒确认。反之会发出警告：提醒说该公钥和指纹可能是由于中间人拦截而被篡改的或者可能是服务器更新了新的公私钥对。&lt;/li&gt;&#xA;&lt;li&gt;客户端完成公钥接收及指纹对比后，需要输入密码，将密码使用服务器公钥进行加密发送到服务器，服务器私钥解密验证成功则允许登入。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;公钥身份验证登入过程分析&#xA;    &lt;div id=&#34;公钥身份验证登入过程分析&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%85%ac%e9%92%a5%e8%ba%ab%e4%bb%bd%e9%aa%8c%e8%af%81%e7%99%bb%e5%85%a5%e8%bf%87%e7%a8%8b%e5%88%86%e6%9e%90&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;客户端在本地生成一对密钥，包括一个公钥和一个私钥。且将自己的公钥放到到服务器上的 &lt;strong&gt;~/.ssh/authorized_keys&lt;/strong&gt; 文件中&lt;/li&gt;&#xA;&lt;li&gt;客户端ssh向服务器发送连接请求&lt;/li&gt;&#xA;&lt;li&gt;服务端检查用户名存在后，生成一个随机串返给客户端&lt;/li&gt;&#xA;&lt;li&gt;客户端自己的私钥对随机串进行签名并发送给服务器&lt;/li&gt;&#xA;&lt;li&gt;服务器使用已存入&lt;strong&gt;authorized_keys&lt;/strong&gt; 中的公钥进行验签，若验签通过则客户端身份认证成功&lt;/li&gt;&#xA;&lt;/ol&gt;</description>
      
    </item>
    
    <item>
      <title>代码提交规范之 Conventional Commits</title>
      <link>https://my.elastic-code.com/zh/posts/tool/git-commits-specification/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tool/git-commits-specification/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;Conventional Commits：让您的Git历史更加清晰和有意义&#xA;    &lt;div id=&#34;conventional-commits让您的git历史更加清晰和有意义&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#conventional-commits%e8%ae%a9%e6%82%a8%e7%9a%84git%e5%8e%86%e5%8f%b2%e6%9b%b4%e5%8a%a0%e6%b8%85%e6%99%b0%e5%92%8c%e6%9c%89%e6%84%8f%e4%b9%89&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;引言&#xA;    &lt;div id=&#34;引言&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%bc%95%e8%a8%80&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在软件开发中，良好的版本控制实践是维持项目健康和可持续发展的关键。一个清晰、一致的提交历史不仅可以加强团队合作，还能提高代码的可维护性。本文将介绍 Conventional Commits 规范，一种帮助您实现这一目标的提交信息格式规范。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>代码提交规范之 Conventional Commits</title>
      <link>https://my.elastic-code.com/zh/posts/tool/git%E4%BB%A3%E7%A0%81%E6%8F%90%E4%BA%A4%E6%B3%A8%E9%87%8A%E8%A7%84%E8%8C%83/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tool/git%E4%BB%A3%E7%A0%81%E6%8F%90%E4%BA%A4%E6%B3%A8%E9%87%8A%E8%A7%84%E8%8C%83/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;引言&#xA;    &lt;div id=&#34;引言&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%bc%95%e8%a8%80&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;在软件开发中，良好的版本控制实践是维持项目健康和可持续发展的关键。一个清晰、一致的提交历史不仅可以加强团队合作，还能提高代码的可维护性。本文将介绍 Conventional Commits 规范，一种帮助您实现这一目标的提交信息格式规范。&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;什么是 Conventional Commits？&#xA;    &lt;div id=&#34;什么是-conventional-commits&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e4%bb%80%e4%b9%88%e6%98%af-conventional-commits&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Conventional Commits 是一个轻量级的、社区驱动的提交信息格式规范。它的核心目的是使提交信息更加可读和易于理解。遵循这一规范，可以让您的 Git 历史成为一个清晰的故事，而不仅仅是代码的变更记录。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>缓存简介</title>
      <link>https://my.elastic-code.com/zh/posts/tech/cache/</link>
      <pubDate>Wed, 08 Jan 2025 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tech/cache/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;缓存&#xA;    &lt;div id=&#34;缓存&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%bc%93%e5%ad%98&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;&#xA;    &lt;div id=&#34;&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;简介&#xA;    &lt;div id=&#34;简介&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%ae%80%e4%bb%8b&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;简而言之，即是数据存储的缓冲区。使用缓存之后，可以减轻访问数据库的压力，显著的提升系统的性能。&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>控制反转 IoC 与依赖注入 DI</title>
      <link>https://my.elastic-code.com/zh/posts/tech/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC-ioc-%E4%B8%8E%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5-di/</link>
      <pubDate>Fri, 08 Nov 2024 09:32:11 +0800</pubDate>
      
      <guid>https://my.elastic-code.com/zh/posts/tech/%E6%8E%A7%E5%88%B6%E5%8F%8D%E8%BD%AC-ioc-%E4%B8%8E%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5-di/</guid>
      <description>&lt;h1 class=&#34;relative group&#34;&gt;控制反转 IoC 与依赖注入 DI&#xA;    &lt;div id=&#34;控制反转-ioc-与依赖注入-di&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%8e%a7%e5%88%b6%e5%8f%8d%e8%bd%ac-ioc-%e4%b8%8e%e4%be%9d%e8%b5%96%e6%b3%a8%e5%85%a5-di&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h1&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;引入&#xA;    &lt;div id=&#34;引入&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%bc%95%e5%85%a5&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;讨论之前，先来简述一下软件对象中的&lt;strong&gt;耦合&lt;/strong&gt;&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
