<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Daily Record</title>
    <link>https://2d992714.xianglin2020-github-io.pages.dev/</link>
    <description>Recent content on Daily Record</description>
    <image>
      <title>Daily Record</title>
      <url>https://2d992714.xianglin2020-github-io.pages.dev/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Fri, 06 Feb 2026 00:00:00 +0800</lastBuildDate>
    <atom:link href="https://2d992714.xianglin2020-github-io.pages.dev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>测试环境 Bakong 订单通知任务不执行问题排查</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2026/bakong-order-notification-task-troubleshooting/</link>
      <pubDate>Thu, 05 Feb 2026 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2026/bakong-order-notification-task-troubleshooting/</guid>
      <description>通过日志与 JStack 定位 Bakong 订单通知任务因 PostgreSQL 网络读取无限等待而假死的问题，并用连接超时参数完成修复验证。</description>
    </item>
    <item>
      <title>微信支付退款通知解密失败排查</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/wechat-pay-refund-notification-decryption/</link>
      <pubDate>Fri, 19 Dec 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/wechat-pay-refund-notification-decryption/</guid>
      <description>定位微信支付 API v2 退款通知在旧版 JDK 中因 JCE 密钥长度限制而解密失败的问题。</description>
    </item>
    <item>
      <title>使用 Webhook.site 调试回调通知</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/webhook-site-testing/</link>
      <pubDate>Mon, 15 Dec 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/webhook-site-testing/</guid>
      <description>使用 Webhook.site 临时接收和检查 HTTP 回调，验证请求方法、请求头及通知内容。</description>
    </item>
    <item>
      <title>Java 编译时保留方法参数名</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/java-parameters-compiler-option/</link>
      <pubDate>Tue, 18 Nov 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/java-parameters-compiler-option/</guid>
      <description>解释 javac 的 -parameters 选项如何把真实方法参数名写入 class 文件，并给出 Maven、Gradle 和 MyBatis 中的用法。</description>
    </item>
    <item>
      <title>Dubbo 实践：配置优先级与消费者直连</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/dubbo-config-priority-and-direct-connection/</link>
      <pubDate>Thu, 30 Oct 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/dubbo-config-priority-and-direct-connection/</guid>
      <description>记录 Dubbo 2.6 消费者注册中心配置被 JVM 参数覆盖的排查过程，以及本地开发时按接口直连提供者的方法。</description>
    </item>
    <item>
      <title>Windows 排查和处理端口占用</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/windows-port-process-management/</link>
      <pubDate>Thu, 25 Sep 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/windows-port-process-management/</guid>
      <description>在 Windows 中根据端口定位监听进程，确认进程身份后安全地终止或调整服务。</description>
    </item>
    <item>
      <title>渠道服务 fundchannel-core-service 定时任务优化</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/fundchannel-core-service-scheduled-task-optimization/</link>
      <pubDate>Thu, 21 Aug 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/fundchannel-core-service-scheduled-task-optimization/</guid>
      <description>分析 fundchannel-core-service 定时任务的性能问题，并比较定时任务优化与延迟队列两类改造方案。</description>
    </item>
    <item>
      <title>使用 Super CSV 导出大批量 CSV 文件</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/super-csv-export/</link>
      <pubDate>Wed, 06 Aug 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/super-csv-export/</guid>
      <description>在 Spring Web 接口中使用 Super CSV 分页导出数据，处理字段映射、国际化表头、UTF-8 BOM 和响应流。</description>
    </item>
    <item>
      <title>Java 实用片段：国家区号与指数退避重试</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/java-country-calling-codes-and-exponential-backoff/</link>
      <pubDate>Mon, 04 Aug 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/java-country-calling-codes-and-exponential-backoff/</guid>
      <description>使用 libphonenumber 获取国家/地区国际区号，并通过 guava-retrying 实现带指数退避的有限重试。</description>
    </item>
    <item>
      <title>Oracle 实用手册：诊断查询与用户初始化</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/oracle-practical-queries-and-user-setup/</link>
      <pubDate>Sun, 03 Aug 2025 00:00:00 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2025/oracle-practical-queries-and-user-setup/</guid>
      <description>整理 Oracle 索引、SQL 性能和字符集查询，并记录创建表空间、用户及基础权限的完整流程。</description>
    </item>
    <item>
      <title>VirtualBox_Debian12_修复引导</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/virtualbox-debian12-bootstrap-repair/</link>
      <pubDate>Sun, 10 Nov 2024 11:35:53 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/virtualbox-debian12-bootstrap-repair/</guid>
      <description>使用 live cd 修复 Debian12 引导。</description>
    </item>
    <item>
      <title>大数据基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/bigdata-basics/</link>
      <pubDate>Tue, 22 Oct 2024 13:49:32 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/bigdata-basics/</guid>
      <description>&lt;h2 id=&#34;hadoop&#34;&gt;Hadoop&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://hadoop.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://hadoop.apache.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://hadoop.org.cn/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://hadoop.org.cn/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hadoop 适合海量数据的分布式存储和分布式计算框架。&lt;/p&gt;
&lt;p&gt;Hadoop Common：支持其他 Hadoop 模块的通用实用程序。&lt;/p&gt;
&lt;p&gt;Hadoop HDFS：一种分布式文件系统，可提供对应用程序数据的高吞吐量访问。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2024面试记录</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/2024-interview-record/</link>
      <pubDate>Fri, 20 Sep 2024 08:23:36 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/2024-interview-record/</guid>
      <description>2024社招的几次笔试面试记录。</description>
    </item>
    <item>
      <title>Kubernetes基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/kubernetes-basics/</link>
      <pubDate>Fri, 20 Sep 2024 08:19:52 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/kubernetes-basics/</guid>
      <description>kubernetes 基础知识。</description>
    </item>
    <item>
      <title>Kubernetes安装</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/kubernetes-installation/</link>
      <pubDate>Tue, 10 Sep 2024 08:01:44 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/kubernetes-installation/</guid>
      <description>使用 Debian12 安装 Kubernetes 1.31 版本。</description>
    </item>
    <item>
      <title>Docker代理</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/docker-proxy/</link>
      <pubDate>Sun, 01 Sep 2024 11:58:07 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/docker-proxy/</guid>
      <description>&lt;h2 id=&#34;前提&#34;&gt;前提&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;需要一个梯子🪜&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;设置代理&#34;&gt;设置代理&lt;/h2&gt;
&lt;h3 id=&#34;用于拉取镜像&#34;&gt;用于拉取镜像&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.docker.com/engine/daemon/proxy/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Configure the daemon to use a proxy&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;编辑 &lt;code&gt;/etc/docker/daemon.json&lt;/code&gt; 文件，添加代理配置&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;proxies&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;http-proxy&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://192.168.31.113:7897&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;https-proxy&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://192.168.31.113:7897&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;no-proxy&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.test.example.com,.example.org,127.0.0.0/8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;用于构建镜像&#34;&gt;用于构建镜像&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.docker.com/build/building/variables/#proxy-arguments&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Proxy arguments&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在 build 命令中使用 &amp;ndash;build-arg 参数&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker image build -t web:latest  --build-arg &lt;span class=&#34;nv&#34;&gt;HTTP_PROXY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://192.168.31.113:7897 --build-arg &lt;span class=&#34;nv&#34;&gt;HTTPS_PROXY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://192.168.31.113:7897 .
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;还可以试试直接添加环境变量&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;https_proxy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://192.168.31.86:7897 &lt;span class=&#34;nv&#34;&gt;http_proxy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://192.168.31.86:7897 &lt;span class=&#34;nv&#34;&gt;all_proxy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;socks5://192.168.31.86:7897
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;为容器设置代理&#34;&gt;为容器设置代理&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.docker.com/reference/cli/docker/#automatic-proxy-configuration-for-containers&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Automatic proxy configuration for containers&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>C 语言基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/c-basics/</link>
      <pubDate>Mon, 25 Mar 2024 20:04:01 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/c-basics/</guid>
      <description>C 语言基础及 GTK 编程。</description>
    </item>
    <item>
      <title>Java各版本语言特性</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/java-version-features/</link>
      <pubDate>Sat, 02 Mar 2024 10:29:51 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/java-version-features/</guid>
      <description>Java8到Java21语言相关的部分特性。</description>
    </item>
    <item>
      <title>GO语言开发常用库</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/go-library/</link>
      <pubDate>Sat, 20 Jan 2024 15:54:28 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2024/go-library/</guid>
      <description>记录 GO 语言 WEB 开发中常用的框架和库。</description>
    </item>
    <item>
      <title>Starter原理解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/starter-source-code-learning/</link>
      <pubDate>Mon, 04 Dec 2023 19:56:02 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/starter-source-code-learning/</guid>
      <description>SpringBoot conditional 注解、starter 原理及动手搭建 starter。</description>
    </item>
    <item>
      <title>Servlet容器启动解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/servlet-container-source-code-learning/</link>
      <pubDate>Sun, 26 Nov 2023 12:46:13 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/servlet-container-source-code-learning/</guid>
      <description>Servlet 容器启动流程解析、WEB 容器工厂类加载解析、WEB 容器个性化配置解析。</description>
    </item>
    <item>
      <title>配置类解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/config-class-source-code-learning/</link>
      <pubDate>Thu, 23 Nov 2023 20:01:17 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/config-class-source-code-learning/</guid>
      <description>SpringBoot 配置类解析流程、执行逻辑解析、核心方法解析。</description>
    </item>
    <item>
      <title>异常报告器解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/exception-reporter-source-code-learning/</link>
      <pubDate>Tue, 21 Nov 2023 21:59:41 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/exception-reporter-source-code-learning/</guid>
      <description>SpringBoot 异常报告器类介绍、异常处理流程分析、案例分析。</description>
    </item>
    <item>
      <title>属性配置解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/configuration-source-code-learning/</link>
      <pubDate>Sun, 19 Nov 2023 08:22:19 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/configuration-source-code-learning/</guid>
      <description>SpringBoot 属性配置介绍、Aware 介绍、Environment 解析、Spring profile 解析。</description>
    </item>
    <item>
      <title>启动加载器解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/runner-source-code-learning/</link>
      <pubDate>Sat, 18 Nov 2023 20:27:43 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/runner-source-code-learning/</guid>
      <description>SpringBoot 计时器介绍、启动加载器案例演示、启动加载器原理解析。</description>
    </item>
    <item>
      <title>Banner解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/banner-source-code-learning/</link>
      <pubDate>Sat, 18 Nov 2023 11:59:42 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/banner-source-code-learning/</guid>
      <description>SpringBoot Banner解析、效果演示。</description>
    </item>
    <item>
      <title>Bean解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/bean-source-code-learning/</link>
      <pubDate>Thu, 16 Nov 2023 20:04:48 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/bean-source-code-learning/</guid>
      <description>SpringBoot 中 IOC思想、Bean 的配置方式、refresh 方法解析、Bean 实例化解析。</description>
    </item>
    <item>
      <title>监听器解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/listener-source-code-learning/</link>
      <pubDate>Sun, 12 Nov 2023 19:58:52 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/listener-source-code-learning/</guid>
      <description>SpringBoot 监听器模式介绍、系统监听器介绍、监听事件触发机制和自定义监听器。</description>
    </item>
    <item>
      <title>初始化器解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/initializer-source-code-learning/</link>
      <pubDate>Thu, 09 Nov 2023 19:48:24 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/initializer-source-code-learning/</guid>
      <description>SpringBoot 系统初始化器解析。</description>
    </item>
    <item>
      <title>全局流程解析 SpringBoot源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/basics-source-code-learning/</link>
      <pubDate>Wed, 08 Nov 2023 19:46:32 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/basics-source-code-learning/</guid>
      <description>SpringBoot 项目环境准备、工程搭建、框架启动流程。</description>
    </item>
    <item>
      <title>Spring Cloud Alibaba 学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/springcloudalibaba-basics/</link>
      <pubDate>Wed, 25 Oct 2023 18:41:25 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/springcloudalibaba-basics/</guid>
      <description>学习 Spring Cloud Alibaba 分布式应用开发一站式解决方案。</description>
    </item>
    <item>
      <title>Gradle&#43;Kotlin构建SpringCloudAlibaba多模块项目</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/gradle-kotlin-build-springcloudalibaba-multi-module/</link>
      <pubDate>Tue, 24 Oct 2023 18:47:39 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/gradle-kotlin-build-springcloudalibaba-multi-module/</guid>
      <description>使用 Gradle Kotlin 构建 SpringCloudAlibaba 多模块项目</description>
    </item>
    <item>
      <title>计算机网络</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/computer-network/</link>
      <pubDate>Wed, 04 Oct 2023 13:23:32 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/computer-network/</guid>
      <description>计算机网络概述、网络层、传输层、应用层和实践。</description>
    </item>
    <item>
      <title>操作系统</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/operating-system-basics/</link>
      <pubDate>Sat, 30 Sep 2023 17:07:38 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/operating-system-basics/</guid>
      <description>操作系统基础知识</description>
    </item>
    <item>
      <title>计算机组成原理</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/principles-of-computer-composition/</link>
      <pubDate>Thu, 21 Sep 2023 20:38:03 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/principles-of-computer-composition/</guid>
      <description>计算机组成原理，包括概述、组成、计算和实践</description>
    </item>
    <item>
      <title>Kotlin基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/kotlin-basics/</link>
      <pubDate>Sun, 27 Aug 2023 10:44:46 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/kotlin-basics/</guid>
      <description>Kotlin的基础知识学习和与Java的异同点比较。</description>
    </item>
    <item>
      <title>Java性能监控与调优</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/java-performance-monitoring-and-tuning/</link>
      <pubDate>Thu, 17 Aug 2023 20:46:41 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/java-performance-monitoring-and-tuning/</guid>
      <description>生产环境可能存在的问题和常用的性能监控工具。</description>
    </item>
    <item>
      <title>JVM基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/jvm-basics/</link>
      <pubDate>Mon, 31 Jul 2023 19:44:41 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/jvm-basics/</guid>
      <description>JVM基础知识体系学习。</description>
    </item>
    <item>
      <title>Kafka基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/kafka-basics/</link>
      <pubDate>Sun, 23 Jul 2023 12:01:41 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/kafka-basics/</guid>
      <description>分布式事件流处理平台Kafka学习。</description>
    </item>
    <item>
      <title>ShardingSphere亿级分库分表</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/shardingsphere-hands-on/</link>
      <pubDate>Mon, 12 Jun 2023 19:56:23 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/shardingsphere-hands-on/</guid>
      <description>&lt;h1 id=&#34;数据初始化&#34;&gt;数据初始化&lt;/h1&gt;
&lt;h2 id=&#34;实验环境&#34;&gt;实验环境&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;5.15.0-73-generic #80~20.04.1-Ubuntu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mysql  Ver 8.0.33-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;openjdk version &amp;quot;19.0.2&amp;quot; 2023-01-17&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;初始化&#34;&gt;初始化&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;post&lt;/code&gt; 表结构见 &lt;code&gt;post.sql&lt;/code&gt;，初始化程序见 &lt;code&gt;gen.GenExecutor&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;初始磁盘使用空间 &lt;code&gt;18G&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master//202307021650748.png&#34; alt=&#34;image-20230612202601520&#34;  /&gt;
&lt;/p&gt;
&lt;p&gt;数据初始化完成后磁盘使用空间 &lt;code&gt;76G&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ElasticSearch 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/elasticsearch-basics/</link>
      <pubDate>Mon, 22 May 2023 20:28:46 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/elasticsearch-basics/</guid>
      <description>分布式搜索引擎与ElasticSearch的基本使用。</description>
    </item>
    <item>
      <title>Spring 源码学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/spring-source-basics/</link>
      <pubDate>Fri, 06 Jan 2023 13:04:14 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2023/spring-source-basics/</guid>
      <description>Spring v5.2.0.RELEASE 源码学习。</description>
    </item>
    <item>
      <title>Vue3 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vue3-basic/</link>
      <pubDate>Wed, 28 Dec 2022 22:14:54 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vue3-basic/</guid>
      <description>Vue3 基础知识与语法。</description>
    </item>
    <item>
      <title>Vuex 和 Vue Router</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vuex-and-vuerouter/</link>
      <pubDate>Sat, 24 Dec 2022 17:13:56 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vuex-and-vuerouter/</guid>
      <description>Vuex 和 Vue Router 的使用。</description>
    </item>
    <item>
      <title>Vue2 组件和脚手架</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vue-scaffold/</link>
      <pubDate>Wed, 07 Dec 2022 20:14:54 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vue-scaffold/</guid>
      <description>Vue 组件语法与脚手架使用。</description>
    </item>
    <item>
      <title>Gradle基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/gradle-basics/</link>
      <pubDate>Sun, 06 Nov 2022 22:18:16 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/gradle-basics/</guid>
      <description>gradle 的基础用法，以及 groovy 与 Java 语法的区别。</description>
    </item>
    <item>
      <title>Spring Data MongoDB</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/spring-data-mongodb/</link>
      <pubDate>Sat, 13 Aug 2022 11:52:27 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/spring-data-mongodb/</guid>
      <description>学习 Spring Data MongoDB 的基础用法。</description>
    </item>
    <item>
      <title>Vue2 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vue-basics/</link>
      <pubDate>Thu, 11 Aug 2022 21:22:49 +0800</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/vue-basics/</guid>
      <description>Vue 基础知识与语法</description>
    </item>
    <item>
      <title>MongoDB-CRUD操作</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/mongodb-crud-basics/</link>
      <pubDate>Sun, 26 Jun 2022 09:21:48 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/mongodb-crud-basics/</guid>
      <description>MongoDB CRUD 基础操作。</description>
    </item>
    <item>
      <title>MongoDB 基础知识</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/mongodb-basics/</link>
      <pubDate>Sat, 21 May 2022 15:32:19 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/mongodb-basics/</guid>
      <description>MongoDB 入门知识，包括 MongoDB 介绍、安装、基本操作、复制集等内容。</description>
    </item>
    <item>
      <title>Virtual Box 安装配置 Ubuntu</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/virtualbox-install-ubuntu/</link>
      <pubDate>Sat, 14 May 2022 16:03:16 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/virtualbox-install-ubuntu/</guid>
      <description>使用 VirtualBox 安装 Ubuntu 桌面版，并更换软件源。</description>
    </item>
    <item>
      <title>Virtual Box 安装配置 CentOS</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/virtualbox-install-centos/</link>
      <pubDate>Tue, 10 May 2022 22:14:44 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/virtualbox-install-centos/</guid>
      <description>使用 VirtualBox 安装 CentOS 服务器版，并安装增强功能。</description>
    </item>
    <item>
      <title>Manjaro 安装配置记录</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/manjaro-install-configuration/</link>
      <pubDate>Sat, 30 Apr 2022 16:21:51 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/manjaro-install-configuration/</guid>
      <description>把自己的台式机从 Hackintosh 转到 Manjaro，记录安装步骤。</description>
    </item>
    <item>
      <title>Play2 in Java</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/play2-use-java/</link>
      <pubDate>Mon, 18 Apr 2022 21:18:35 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/play2-use-java/</guid>
      <description>Play is a high-productivity Java and Scala web application framework that integrates the components and APIs you need for modern web application development.</description>
    </item>
    <item>
      <title>使用 Docker 安装GitLab、Jenkins 配置自动化构建</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/gitlab-jenkins-cicd-in-docker/</link>
      <pubDate>Sat, 16 Apr 2022 17:20:05 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/gitlab-jenkins-cicd-in-docker/</guid>
      <description>使用 Docker 安装配置 GitLab，搭建代码托管平台，安装配置 Jenkins，实现自动化构建。</description>
    </item>
    <item>
      <title>2022面试记录</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/2022-interview-record/</link>
      <pubDate>Tue, 01 Mar 2022 11:18:42 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/2022-interview-record/</guid>
      <description>社招的几次笔试面试记录。</description>
    </item>
    <item>
      <title>MySQL 中类型转换的几种方式</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/mysql-type-convert/</link>
      <pubDate>Fri, 11 Feb 2022 18:53:36 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2022/mysql-type-convert/</guid>
      <description>MySQL 中类型转换的几种方式</description>
    </item>
    <item>
      <title>Cron表达式学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/cron-basics/</link>
      <pubDate>Wed, 29 Dec 2021 17:26:59 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/cron-basics/</guid>
      <description>Cron 表达式是一种使用简单字符串来表示时间规则的方式。</description>
    </item>
    <item>
      <title>VirtualBox_install_Win11</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/virtualbox_install_win11/</link>
      <pubDate>Wed, 17 Nov 2021 14:46:04 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/virtualbox_install_win11/</guid>
      <description>使用 VirtualBox 安装 Windows11。</description>
    </item>
    <item>
      <title>CAS 集成、认证流程和模拟登录</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/cas-integration/</link>
      <pubDate>Sat, 03 Jul 2021 15:48:55 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/cas-integration/</guid>
      <description>CAS 集成、认证流程和模拟登录分享。</description>
    </item>
    <item>
      <title>接口打包、安装到本地、上传至仓库</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/java-interface-install/</link>
      <pubDate>Fri, 23 Apr 2021 09:48:19 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/java-interface-install/</guid>
      <description>接口打包、安装到本地、上传至仓库。</description>
    </item>
    <item>
      <title>Docker 安装 Oracle-11g</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/docker-install-oracle11g/</link>
      <pubDate>Tue, 06 Apr 2021 10:18:12 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/docker-install-oracle11g/</guid>
      <description>&lt;h1 id=&#34;docker-安装-oracle-11g&#34;&gt;Docker 安装 Oracle-11g&lt;/h1&gt;
&lt;h2 id=&#34;参考链接&#34;&gt;参考链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DockerHub：&lt;a href=&#34;https://hub.docker.com/r/jaspeen/oracle-11g&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;jaspeen/oracle-11g (docker.com)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Oracle Database：&lt;a href=&#34;https://www.oracle.com/cn/database/enterprise-edition/downloads/oracle-db11g-linux.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;适用于 Linux x86-64 的 Oracle Database 11g 第 2 版 | Oracle 中国&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Docker CE 清华源：&lt;a href=&#34;https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;docker-ce | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安装步骤&#34;&gt;安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;docker-安装步骤&#34;&gt;Docker 安装步骤&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;删除旧版 Docker&lt;/p&gt;</description>
    </item>
    <item>
      <title>多机 Redis</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/multi-redis/</link>
      <pubDate>Sat, 27 Feb 2021 10:44:46 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2021/multi-redis/</guid>
      <description>Redis 主从复制、哨兵、集群配置。</description>
    </item>
    <item>
      <title>MySQL 数据库知识</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mysql-basics-1/</link>
      <pubDate>Sat, 26 Dec 2020 18:58:00 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mysql-basics-1/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery/202101/%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93.png&#34; alt=&#34;关系型数据库&#34;  /&gt;
&lt;/p&gt;
&lt;h2 id=&#34;数据库模块划分&#34;&gt;数据库模块划分&lt;/h2&gt;
&lt;h2 id=&#34;关键语法&#34;&gt;关键语法&lt;/h2&gt;
&lt;h3 id=&#34;group-by&#34;&gt;GROUP BY&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;满足 SELECT 子句中的列名必须为分组列或列函数&lt;/li&gt;
&lt;li&gt;列函数对于 GROUP BY 子句定义的每一个组各返回一个结果&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;having&#34;&gt;HAVING&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;通常与 GROUP BY 子句一起使用&lt;/li&gt;
&lt;li&gt;WHERE 过滤行，HAVING 过滤组&lt;/li&gt;
&lt;li&gt;关键字的顺序：WHERE &amp;ndash; GROUP BY &amp;ndash; HAVING&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;索引相关内容&#34;&gt;索引相关内容&lt;/h2&gt;
&lt;h3 id=&#34;为什么要使用索引&#34;&gt;为什么要使用索引&lt;/h3&gt;
&lt;p&gt;全表扫描适用范围窄，借助字典的思想，使用索引可以加快查询速度。&lt;/p&gt;</description>
    </item>
    <item>
      <title>网络相关知识总结</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/network-knowledge-basics/</link>
      <pubDate>Sun, 20 Dec 2020 11:01:32 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/network-knowledge-basics/</guid>
      <description>国际标准化组织 ISO 提出的开放系统互联基本参考模型（Open Systems Interconnection Reference Model），简称为 OSI ，是一个概念模型。</description>
    </item>
    <item>
      <title>Zookeeper 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/zookeeper-basics/</link>
      <pubDate>Sun, 13 Dec 2020 13:25:23 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/zookeeper-basics/</guid>
      <description>&lt;h1 id=&#34;zookeeper&#34;&gt;Zookeeper&lt;/h1&gt;
&lt;h2 id=&#34;理解-zookeeper&#34;&gt;理解 Zookeeper&lt;/h2&gt;
&lt;h3 id=&#34;为什么需要-zookeeper&#34;&gt;为什么需要 Zookeeper&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;用起来像单机但是又比单机更可靠&lt;/li&gt;
&lt;li&gt;类似于 Leader 在团队里面的协调作用&lt;/li&gt;
&lt;li&gt;在多节点中尽量压缩数据同步时间&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;zookeeper-是什么&#34;&gt;Zookeeper 是什么&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Zookeeper 是开源的高性能的分布式应用协调系统，一个高性能的分布式数据一致性解决方案&lt;/li&gt;
&lt;li&gt;它的设计目标是将那些复杂的容易出错的分布式一致性服务封装起来，构成一个高效可靠的原语集，并以一系列简单易用的接口提供给用户。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;zookeeper-的特点&#34;&gt;Zookeeper 的特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;顺序一致性：从同一客户端发起的事务请求，会严格的按照顺序被应用到 Zookeeper 服务器中&lt;/li&gt;
&lt;li&gt;原子性：所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的&lt;/li&gt;
&lt;li&gt;单一视图：无论连接哪一个 Zookeeper 节点，看到的服务端数据模型都是一致性的&lt;/li&gt;
&lt;li&gt;可靠性：一旦一次更改请求被应用，更改的结果就会被持久化，直到被下一次更改覆盖&lt;/li&gt;
&lt;li&gt;及时性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;zookeeper-与-cap-的关系&#34;&gt;Zookeeper 与 CAP 的关系&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CP：一致性+分区容错性&lt;/li&gt;
&lt;li&gt;任何时候都能得到一致的数据结果，同时系统对网络具有容错性&lt;/li&gt;
&lt;li&gt;它不能保证每次服务请求的可用性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;zookeeper-的作用&#34;&gt;Zookeeper 的作用&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;分布式服务注册与订阅&lt;/li&gt;
&lt;li&gt;统一配置文件&lt;/li&gt;
&lt;li&gt;生成分布式唯一 ID：通过 Zookeeper 的顺序节点生成全局唯一ID&lt;/li&gt;
&lt;li&gt;Master 节点选举&lt;/li&gt;
&lt;li&gt;分布式锁：通过创建唯一节点获得分布式锁，当获取锁的一方执行完代码或挂掉后就释放锁&lt;/li&gt;
&lt;li&gt;数据发布/订阅：通过 Watcher 机制可以很方便的实现数据的发布与订阅。当你将数据发布到 Zookeeper 被监听的节点上，其它机器可以通过监听 Zookeeper 上节点的变化来实现配置的&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;zookeeper-的重要概念&#34;&gt;Zookeeper 的重要概念&lt;/h2&gt;
&lt;h3 id=&#34;数据模型-datamodel&#34;&gt;数据模型 DataModel&lt;/h3&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202012/172917.png&#34; alt=&#34;image-20201213141229663&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>SpringCloud 和微服务</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/springcloud-micro-service/</link>
      <pubDate>Sun, 06 Dec 2020 12:15:12 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/springcloud-micro-service/</guid>
      <description>&lt;h1 id=&#34;微服务&#34;&gt;微服务&lt;/h1&gt;
&lt;h2 id=&#34;微服务的基础概念&#34;&gt;微服务的基础概念&lt;/h2&gt;
&lt;h3 id=&#34;单体应用的不足&#34;&gt;单体应用的不足&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;部署效率低下：依赖众多、应用体积较大、启动时间较长&lt;/li&gt;
&lt;li&gt;团队协作开发成本高&lt;/li&gt;
&lt;li&gt;系统可用性差&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;服务化&#34;&gt;服务化&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;把传统的单机应用中的本地方法调用，改造成通过 RPC、HTTP 产生的远程方法调用&lt;/li&gt;
&lt;li&gt;把模块从单体应用中拆分出来，独立成一个服务部署&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;微服务概念&#34;&gt;微服务概念&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;一种架构风格&lt;/li&gt;
&lt;li&gt;开发单个应用作为一系列小型服务的套件，其中每个服务都运行在自己的进程中，并且通过轻量级的机制实现彼此间的通信，这通常是 HTTP 资源 API&lt;/li&gt;
&lt;li&gt;这些服务是围绕着业务功能构建的，并且可以通过完全自动化的部署机制进行独立部署&lt;/li&gt;
&lt;li&gt;这些服务的集中化管理做到了最小化（例如 docker 相关技术），每一种服务都可以通过不同的编程语言进行编写，并且可以使用不同的数据存储技术&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;微服务的特点&#34;&gt;微服务的特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;组件以服务形式来提供&lt;/li&gt;
&lt;li&gt;微服务是产品而不是项目&lt;/li&gt;
&lt;li&gt;轻量级通信、独立进程&lt;/li&gt;
&lt;li&gt;分散治理、去中心化治理&lt;/li&gt;
&lt;li&gt;容错性设计&lt;/li&gt;
&lt;li&gt;会带来团队组织架构的调整&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;微服务的优缺点&#34;&gt;微服务的优缺点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;服务简单、便于学习和上手、相对易于维护&lt;/p&gt;</description>
    </item>
    <item>
      <title>RabbitMQ 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/rabbitmq-basics/</link>
      <pubDate>Sat, 05 Dec 2020 13:20:00 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/rabbitmq-basics/</guid>
      <description>&lt;h1 id=&#34;rabbitmq&#34;&gt;RabbitMQ&lt;/h1&gt;
&lt;h2 id=&#34;消息队列&#34;&gt;消息队列&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;MQ（Message Queue）：MQ 的模型大致如下&lt;/p&gt;
&lt;img src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202012/095535.png&#34; alt=&#34;image-20201206095534595&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;img src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202012/133513.png&#34; alt=&#34;image-20201205133512771&#34; style=&#34;zoom:25%;&#34; /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;消息队列的特性&#34;&gt;消息队列的特性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;业务无关性&lt;/li&gt;
&lt;li&gt;FIFO&lt;/li&gt;
&lt;li&gt;容灾&lt;/li&gt;
&lt;li&gt;性能&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;使用消息队列的原因&#34;&gt;使用消息队列的原因&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;系统解耦&lt;/li&gt;
&lt;li&gt;异步调用&lt;/li&gt;
&lt;li&gt;流量削峰&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;rabbitmq-介绍&#34;&gt;RabbitMQ 介绍&lt;/h2&gt;
&lt;h3 id=&#34;rabbitmq-基础思想&#34;&gt;RabbitMQ 基础思想&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;核心思想：接收并转发消息，可以类比于邮局&lt;/li&gt;
&lt;li&gt;producer：生产者、消息发送者&lt;/li&gt;
&lt;li&gt;queue：消息存储队列&lt;/li&gt;
&lt;li&gt;consumer：消费者&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rabbitmq-的特点&#34;&gt;RabbitMQ 的特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;开源、跨语言&lt;/li&gt;
&lt;li&gt;Erlang 语言编写、内建集群&lt;/li&gt;
&lt;li&gt;应用广泛&lt;/li&gt;
&lt;li&gt;社区活跃、API 丰富&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rabbitmq-核心概念&#34;&gt;RabbitMQ 核心概念&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;RabbitMQ 是基于 AMPQ 协议的开源实现，其模型如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202012/135354.png&#34; alt=&#34;image-20201205135354320&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx 基础知识</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/nginx-basics/</link>
      <pubDate>Thu, 03 Dec 2020 20:39:51 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/nginx-basics/</guid>
      <description>&lt;h1 id=&#34;nginx&#34;&gt;Nginx&lt;/h1&gt;
&lt;p&gt;Nginx 是一款轻量级的 Web 服务器、反向代理服务器及电子邮件代理服务器，其特点是占用内存小，并发能力强。&lt;/p&gt;
&lt;h2 id=&#34;nginx-使用场景&#34;&gt;Nginx 使用场景&lt;/h2&gt;
&lt;h3 id=&#34;http-的反向代理服务器&#34;&gt;HTTP 的反向代理服务器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;正向代理&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202012/210919.png&#34; alt=&#34;image-20201203210919188&#34;  /&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;反向代理&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202012/211044.png&#34; alt=&#34;image-20201203211044613&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/docker-basics/</link>
      <pubDate>Tue, 01 Dec 2020 22:38:26 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/docker-basics/</guid>
      <description>Docker 是一个用来装程序及其环境的容器，属于Linux 容器的一种封装，提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。</description>
    </item>
    <item>
      <title>分布式基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/distributed-basics/</link>
      <pubDate>Tue, 01 Dec 2020 21:50:46 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/distributed-basics/</guid>
      <description>分布式基础知识</description>
    </item>
    <item>
      <title>ThreadLocal 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/threadlocal-basics/</link>
      <pubDate>Mon, 30 Nov 2020 20:46:36 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/threadlocal-basics/</guid>
      <description>&lt;h2 id=&#34;threadlocal&#34;&gt;ThreadLocal&lt;/h2&gt;
&lt;h3 id=&#34;threadlocal-典型应用场景&#34;&gt;ThreadLocal 典型应用场景&lt;/h3&gt;
&lt;p&gt;场景介绍：资源持有、线程安全、线程一致、并发计算&lt;/p&gt;
&lt;h4 id=&#34;线程独享对象&#34;&gt;线程独享对象&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;每个 Thread 内有自己的实例副本，各个线程间不共享。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;线程保存全局变量资源持有&#34;&gt;线程保存全局变量（资源持有）&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;避免参数在各个方法之间传递&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;threadlocal-主要-api&#34;&gt;ThreadLocal 主要 API&lt;/h3&gt;
&lt;h4 id=&#34;threadlocalt&#34;&gt;&lt;code&gt;ThreadLocal&amp;lt;T&amp;gt;()&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;构造函数&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java 线程池学习</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-thread-pool/</link>
      <pubDate>Sun, 29 Nov 2020 17:10:44 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-thread-pool/</guid>
      <description>线程池是一种基于池化管理线程的工具，经常出现在多线程服务器中。既避免处理任务时创建销毁线程的开销，也避免了线程数据膨胀导致过分调度的问题。</description>
    </item>
    <item>
      <title>Spring 事务管理</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/spring-transaction/</link>
      <pubDate>Sun, 29 Nov 2020 10:57:54 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/spring-transaction/</guid>
      <description>&lt;h1 id=&#34;spring-事务管理&#34;&gt;Spring 事务管理&lt;/h1&gt;
&lt;h2 id=&#34;事务的基础概念&#34;&gt;事务的基础概念&lt;/h2&gt;
&lt;h3 id=&#34;什么是事务&#34;&gt;什么是事务&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;事务是指逻辑上的一组操作，要么一起成功、要么一起失败。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;事务的特性&#34;&gt;事务的特性&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;原子性：原子性是指事务是一个不可分割的工作单位，事务中的操作要么都发生，要么都不发生。&lt;/li&gt;
&lt;li&gt;一致性：一致性指事务前后数据的完整性必须保持一致。&lt;/li&gt;
&lt;li&gt;隔离性：隔离性是指多个用户并发访问数据库时，一个用户的事务不能被其他用户的事务所干扰，多个并发事务之间数据要相互隔离。&lt;/li&gt;
&lt;li&gt;持久性：持久性是指一个事务一旦被提交，它对数据库中数据的改变就是永久性的，即使数据库发生故障也不应该对其有影响。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;事务隔离级别&#34;&gt;事务隔离级别&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;READ_UNCOMMITED&lt;/code&gt;：允许读取还未提交的数据，可能导致脏读、不可重复读、幻读。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;READ_COMMITTED&lt;/code&gt;：允许读取并发事务已提交的数据，可防止脏读，但不可重复读、幻读仍可能发生。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REPEATABLE_READ&lt;/code&gt;： 在统一事务中读取的数据保持一致，即使其他事务对其修改并提交。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SERIALIZABLE&lt;/code&gt;：将并发事务串行化，解决一切问题。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;spring-接口介绍&#34;&gt;Spring 接口介绍&lt;/h2&gt;
&lt;h3 id=&#34;三个抽象接口&#34;&gt;三个抽象接口&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;事务管理器：&lt;code&gt;PlatformTransactionManager&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;事务定义信息（隔离级别、传播行为、超时、只读）：&lt;code&gt;TransactionDefinition&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;事务运行状态：&lt;code&gt;TransactionStatus&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;flatformtransactionmanager&#34;&gt;&lt;code&gt;FlatformTransactionManager&lt;/code&gt;&lt;/h3&gt;
&lt;img src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202011/112045.png&#34; alt=&#34;PlatformTransactionManager&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;h3 id=&#34;transcationdefinition&#34;&gt;&lt;code&gt;TranscationDefinition&lt;/code&gt;&lt;/h3&gt;
&lt;img src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202011/111550.png&#34; alt=&#34;transactiondefinition&#34; style=&#34;zoom:50%;&#34; /&gt;
&lt;h4 id=&#34;事务的传播行为&#34;&gt;事务的传播行为&lt;/h4&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;事务传播行为&lt;/th&gt;
					&lt;th&gt;描述&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_REQUIRED&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;支持当前事务，如果不存在就新建一个&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_SUPPORTS&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;支持当前事务，如果不存在就不使用事务&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_MANDATORY&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;支持当前事务，如果不存在则抛出异常&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_REQUIRES_NEW&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;创建一个新事务，如果有事务存在则挂起&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_NOT_SUPPORTED&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;以非事务方式运行，如果有事务存在则挂起&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_NEVER&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;以非事务方式运行，如果存在事务则抛出异常&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;PROPAGATION_NESTED&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;如果当前事务存在，则嵌套事务执行&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;transactionstatus&#34;&gt;&lt;code&gt;TransactionStatus&lt;/code&gt;&lt;/h3&gt;
&lt;img src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202011/122018.png&#34; alt=&#34;TransactionStatus&#34; style=&#34;zoom:33%;&#34; /&gt;
&lt;h2 id=&#34;spring-事务管理操作&#34;&gt;Spring 事务管理操作&lt;/h2&gt;
&lt;h3 id=&#34;准备转账案例&#34;&gt;准备转账案例&lt;/h3&gt;
&lt;h4 id=&#34;表设计&#34;&gt;表设计&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;TABLE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;account&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NOT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;varchar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NOT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DEFAULT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIMARY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;KEY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ENGINE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InnoDB&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DEFAULT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CHARSET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;INSERT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;INTO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imooc_demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;account&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;VALUES&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;INSERT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;INTO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imooc_demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;account&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;VALUES&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;INSERT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;INTO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imooc_demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;account&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;VALUES&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;实现-dao-层&#34;&gt;实现 DAO 层&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;interface&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AccountDao&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;accountAdd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;accountSub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AccountDaoImpl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AccountDao&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JdbcTemplate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jdbcTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;setJdbcTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JdbcTemplate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jdbcTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;jdbcTemplate&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;jdbcTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;accountAdd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;update account set money = money + ? where name = ?&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;jdbcTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;accountSub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;update account set money = money - ? where name = ?&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;jdbcTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;实现-service-层&#34;&gt;实现 Service 层&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;interface&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AccountService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;transfer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AccountServiceImpl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;implements&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AccountService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AccountDao&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountDao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;setAccountDao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AccountDao&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountDao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;accountDao&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountDao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Override&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;transfer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountDao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;accountSub&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountDao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;accountAdd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;money&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;使用-xml-方式声明对象&#34;&gt;使用 XML 方式声明对象&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;bean&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dataSource&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.springframework.jdbc.datasource.DriverManagerDataSource&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;driverClassName&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;com.mysql.cj.jdbc.Driver&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;url&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbc:mysql://hostip:port/dbname&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;username&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;bean&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbcTemplate&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;org.springframework.jdbc.core.JdbcTemplate&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dataSource&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;ref=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dataSource&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;bean&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;accountDao&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;dao.AccountDaoImpl&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbcTemplate&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;ref=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;jdbcTemplate&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;bean&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;accountService&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;service.AccountServiceImpl&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;accountDao&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;ref=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;accountDao&amp;#34;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/bean&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;测试转账效果&#34;&gt;测试转账效果&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@RunWith&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SpringJUnit4ClassRunner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@ContextConfiguration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;classpath:applicationContext.xml&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AccountServiceImplTest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Resource&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;private&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AccountService&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountService&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;@Test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;transfer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;accountService&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transfer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BigDecimal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;valueOf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;编程式的事务管理&#34;&gt;编程式的事务管理&lt;/h3&gt;
&lt;p&gt;配置事务管理器&lt;/p&gt;</description>
    </item>
    <item>
      <title>MyBatis 拦截器</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mybatis-interceptor/</link>
      <pubDate>Sat, 31 Oct 2020 22:53:47 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mybatis-interceptor/</guid>
      <description>&lt;h1 id=&#34;mybatis-插件原理及-pagehelper-分页插件介绍&#34;&gt;MyBatis 插件原理及 PageHelper 分页插件介绍&lt;/h1&gt;
&lt;h2 id=&#34;从-jdbc-开始&#34;&gt;从 JDBC 开始&lt;/h2&gt;
&lt;h3 id=&#34;jdbc-介绍&#34;&gt;JDBC 介绍&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;JDBC（Java Database Connectivity）API 是 Java 语言与广泛数据库产品交互的基础，JDBC 技术体现了 Java &lt;code&gt;&amp;quot;write Once,Run AnyWhere&amp;quot;&lt;/code&gt;的思想，即Java 为数据库访问提供一套纯 Java API，同时提供一个驱动管理器（DriverManager）。数据库供应商提供自己的数据库驱动，并注册到 Java 提供的DriverManager 中。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu 安装 MySQL</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/ubuntu-install-mysql/</link>
      <pubDate>Sat, 10 Oct 2020 22:44:19 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/ubuntu-install-mysql/</guid>
      <description>&lt;h1 id=&#34;ubuntu-安装-mysql&#34;&gt;Ubuntu 安装 MySQL&lt;/h1&gt;
&lt;h2 id=&#34;ubuntu-server-和-mysql&#34;&gt;Ubuntu Server 和 MySQL&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://ubuntu.com/download/alternative-downloads&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Ubuntu Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://downloads.mysql.com/archives/community/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MySQL Server&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;使用-apt-安装-mysql&#34;&gt;使用 APT 安装 MySQL&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用命令安装 MySQL Server&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo apt install mysql-server&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看 MySQL 运行情况&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo service mysql status&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo /etc/init.d/mysql status&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo /etc/init.d/mysql status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;● mysql.service - MySQL Community Server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Loaded: loaded &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/lib/systemd/system/mysql.service&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; enabled&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; vendor preset: enabled&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Active: active &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;running&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; since Thu 2020-10-08 22:41:04 CST&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; days ago
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Main PID: &lt;span class=&#34;m&#34;&gt;55128&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Status: &lt;span class=&#34;s2&#34;&gt;&amp;#34;Server is operational&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      Tasks: &lt;span class=&#34;m&#34;&gt;40&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;limit: 2319&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Memory: 332.3M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     CGroup: /system.slice/mysql.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             └─55128 /usr/sbin/mysqld
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Oct &lt;span class=&#34;m&#34;&gt;08&lt;/span&gt; 22:41:03 iZwz92js0u6m08arfj6jp8Z systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Starting MySQL Community…...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Oct &lt;span class=&#34;m&#34;&gt;08&lt;/span&gt; 22:41:04 iZwz92js0u6m08arfj6jp8Z systemd&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;: Started MySQL Community …er.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Hint: Some lines were ellipsized, use -l to show in full.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动、停止、重启MySQL 的命令类似&lt;/p&gt;</description>
    </item>
    <item>
      <title>SpringMVC</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/springmvc-basics/</link>
      <pubDate>Tue, 06 Oct 2020 13:16:26 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/springmvc-basics/</guid>
      <description>&lt;h1 id=&#34;spring-mvc&#34;&gt;Spring MVC&lt;/h1&gt;
&lt;h2 id=&#34;spring-mvc-环境搭建&#34;&gt;Spring MVC 环境搭建&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;引入 spring-mvc 相关依赖&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;javax.servlet&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;servlet-api&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.5&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;provided&lt;span class=&#34;nt&#34;&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-webmvc&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在&lt;code&gt;web.xml&lt;/code&gt;中配置&lt;code&gt;DispatcherServlet&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;servlet&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;servlet-name&amp;gt;&lt;/span&gt;springmvc&lt;span class=&#34;nt&#34;&gt;&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;servlet-class&amp;gt;&lt;/span&gt;org.springframework.web.servlet.DispatcherServlet&lt;span class=&#34;nt&#34;&gt;&amp;lt;/servlet-class&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;init-param&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;param-name&amp;gt;&lt;/span&gt;contextConfigLocation&lt;span class=&#34;nt&#34;&gt;&amp;lt;/param-name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;param-value&amp;gt;&lt;/span&gt;classpath:applicationContext.xml&lt;span class=&#34;nt&#34;&gt;&amp;lt;/param-value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;/init-param&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;load-on-startup&amp;gt;&lt;/span&gt;0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/load-on-startup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/servlet&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;servlet-mapping&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;servlet-name&amp;gt;&lt;/span&gt;springmvc&lt;span class=&#34;nt&#34;&gt;&amp;lt;/servlet-name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;lt;url-pattern&amp;gt;&lt;/span&gt;/&lt;span class=&#34;nt&#34;&gt;&amp;lt;/url-pattern&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;创建并配置&lt;code&gt;applicationContext.xml&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>VirtualBox 的安装和使用</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/virtualbox-basics/</link>
      <pubDate>Sun, 04 Oct 2020 21:16:32 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/virtualbox-basics/</guid>
      <description>&lt;h1 id=&#34;virtualbox&#34;&gt;VirtualBox&lt;/h1&gt;
&lt;h2 id=&#34;virtualbox-安装&#34;&gt;VirtualBox 安装&lt;/h2&gt;
&lt;p&gt;VirtualBox 安装比较简单，参考其官方说明即可：&lt;a href=&#34;https://www.virtualbox.org/wiki/Downloads&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Download VirtualBox&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&#34;vboxmanage-基础命令&#34;&gt;VBoxManage 基础命令&lt;/h2&gt;
&lt;h3 id=&#34;vboxmanage-list&#34;&gt;&lt;code&gt;VBoxManage list&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;列出已安装的虚拟机&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;➜  ~ VBoxManage list vms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;fedora&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;b9daec39-7e85-485f-969b-629fa52bd549&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;centos&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;49074fd5-386b-42ca-9e25-af29f5e42f1f&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;列出正在运行的虚拟机&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;➜  ~ VBoxManage list runningvms
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;centos&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;49074fd5-386b-42ca-9e25-af29f5e42f1f&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;vboxmanage-startvm&#34;&gt;&lt;code&gt;VBoxManage startvm&lt;/code&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;命令格式&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;➜  ~ VBoxManage startvm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Usage:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;VBoxManage startvm          &amp;lt;uuid&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;vmname&amp;gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--type gui&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;headless&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;separate&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-E&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;--putenv &amp;lt;NAME&amp;gt;&lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;&amp;lt;VALUE&amp;gt;&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以窗口模式启动虚拟机&lt;/p&gt;</description>
    </item>
    <item>
      <title>Spring 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/spring-basics/</link>
      <pubDate>Sun, 04 Oct 2020 18:08:53 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/spring-basics/</guid>
      <description>&lt;h1 id=&#34;spring&#34;&gt;Spring&lt;/h1&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202010/153710.png&#34; alt=&#34;image-20201005094800988&#34;  /&gt;
&lt;/p&gt;
&lt;h2 id=&#34;spring-ioc&#34;&gt;Spring IOC&lt;/h2&gt;
&lt;h3 id=&#34;ioc控制反转&#34;&gt;IOC：控制反转&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IOC 控制反转，全称 Inverse of Control，是一种设计理念。&lt;/li&gt;
&lt;li&gt;由代理人来创建与管理对象，消费者通过代理人获取对象。&lt;/li&gt;
&lt;li&gt;IoC 的目的是降低对象之间的直接耦合。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;di依赖注入&#34;&gt;DI：依赖注入&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IOC 是设计理念，是现代程序设计遵循的标准，是宏观目标。&lt;/li&gt;
&lt;li&gt;DI（Dependency Injection）是具体技术实现。&lt;/li&gt;
&lt;li&gt;DI 在 Java 中利用反射技术实现对象注入。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;bean-配置方式&#34;&gt;Bean 配置方式&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;基于 XML 配置 JavaBean：&lt;code&gt;applicationContext.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;基于注解配置 JavaBean&lt;/li&gt;
&lt;li&gt;基于 Java 代码配置 JavaBean&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;路径表达式：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Redis 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/redis-basics/</link>
      <pubDate>Sat, 03 Oct 2020 20:53:49 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/redis-basics/</guid>
      <description>&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery/202101/Redis%E7%BC%93%E5%AD%98.png&#34; alt=&#34;Redis 缓存&#34;  /&gt;
&lt;/p&gt;
&lt;h2 id=&#34;redis-介绍&#34;&gt;Redis 介绍&lt;/h2&gt;
&lt;h3 id=&#34;redis-简介&#34;&gt;Redis 简介&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Redis 是 &lt;code&gt;key-value&lt;/code&gt; 型 NoSQL 数据库&lt;/li&gt;
&lt;li&gt;Redis 将数据存储在内存中，同时也能持久化到磁盘中&lt;/li&gt;
&lt;li&gt;Redis 常用于缓存，利用内存的高效提高程序的处理速度&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;redis-特点&#34;&gt;Redis 特点&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;速度快&lt;/li&gt;
&lt;li&gt;广泛的语言支持&lt;/li&gt;
&lt;li&gt;支持数据磁盘持久化&lt;/li&gt;
&lt;li&gt;多种数据结构&lt;/li&gt;
&lt;li&gt;支持主从复制&lt;/li&gt;
&lt;li&gt;支持分片&lt;/li&gt;
&lt;li&gt;分布式与高可用&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;redis-常用配置项&#34;&gt;Redis 常用配置项&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;配置&lt;/th&gt;
					&lt;th&gt;示例&lt;/th&gt;
					&lt;th&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;daemonize&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;daemonize yes&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;是否启用后台运行&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;port&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;port 6379&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;设置端口号&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;databases&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;databases 16&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;设置 redis 数据库个数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;requirepass&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;requirepass abc123&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;设置 redis 连接密码&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;redis通用命令&#34;&gt;Redis通用命令&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;select&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;set&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;get&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;keys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbsize&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exists&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;del&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expire&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ttl&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;redis-数据结构&#34;&gt;Redis 数据结构&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;string&lt;/code&gt;：字符串，值的长度不能超过 512 MB，是二进制安全的。
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;set key value [EX seconds] [PX milliseconds] [NX|XX]&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;EX&lt;/code&gt;：将键的过期时间设置为&lt;code&gt;seconds&lt;/code&gt;秒，&lt;code&gt;set key value ex seconds&lt;/code&gt;等同于&lt;code&gt;setex key seconds value&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PX&lt;/code&gt;：将键的过期时间设置为&lt;code&gt;milliseconds&lt;/code&gt;毫秒，与&lt;code&gt;psetex key milliseconds value&lt;/code&gt; 等价&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NX|XX&lt;/code&gt;：只有在键不存在|存在时，才对键执行设置操作，&lt;code&gt;set key value NX&lt;/code&gt;等同于&lt;code&gt;setnx key value&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mset key value [key value ...] mget key [key ...]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;incr key | incrby k increment&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;decr key | decrby key decrement&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exists key [key ...]  del key [key ...]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;expire key seconds  ttl key &lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hash&lt;/code&gt;：键值类型&lt;/li&gt;
&lt;li&gt;&lt;code&gt;list&lt;/code&gt;：列表，Redis lists基于Linked Lists实现。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;set&lt;/code&gt;：无序排列&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zset&lt;/code&gt;：有序排列&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;redis&#34;&gt;Redis&lt;/h2&gt;
&lt;h3 id=&#34;redis-为啥这么快&#34;&gt;Redis 为啥这么快&lt;/h3&gt;
&lt;p&gt;Redis 支持 100000+QPS。&lt;/p&gt;</description>
    </item>
    <item>
      <title>MyBatis 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mybatis-basics/</link>
      <pubDate>Tue, 15 Sep 2020 21:41:19 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mybatis-basics/</guid>
      <description>&lt;h1 id=&#34;mybatis-基础&#34;&gt;MyBatis 基础&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mybatis.org/mybatis-3/zh/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MyBatis 中文文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mybatis.org/spring/zh/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MyBatis-Spring 中文文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;MyBatis-Spring-Boot 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/pagehelper/Mybatis-PageHelper&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;PageHelper 地址&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mybatis-介绍&#34;&gt;MyBatis 介绍&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MyBatis 是优秀的持久层框架&lt;/li&gt;
&lt;li&gt;MyBatis 使用 XML 将 SQL 与程序代码解耦，便于维护&lt;/li&gt;
&lt;li&gt;MyBatis 学习简单，执行高效，是 JDBC 的延伸&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mybatis-开发流程&#34;&gt;MyBatis 开发流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;引入 MyBatis 依赖&lt;/li&gt;
&lt;li&gt;创建核心配置文件&lt;/li&gt;
&lt;li&gt;创建实体（Entity）类&lt;/li&gt;
&lt;li&gt;创建 Mapper 映射文件&lt;/li&gt;
&lt;li&gt;初始化 SessionFactory&lt;/li&gt;
&lt;li&gt;利用 SQLSession对象操作数据&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;sqlsessionfactory&#34;&gt;SqlSessionFactory&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SqlSessionFactory 是 MyBatis 的核心对象&lt;/li&gt;
&lt;li&gt;SQLSessionFactory 用于初始化MyBatis，创建 SQLSession 对象&lt;/li&gt;
&lt;li&gt;应保证 SQLSessionFactory 全局唯一&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sqlsession&#34;&gt;SqlSession&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SQLSession 是MyBatis 操作数据库的核心对象&lt;/li&gt;
&lt;li&gt;SQLSession 使用 JDBC 与数据库交互&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mybatis-查询&#34;&gt;MyBatis 查询&lt;/h2&gt;
&lt;h2 id=&#34;mybatis-日志框架&#34;&gt;MyBatis 日志框架&lt;/h2&gt;
&lt;p&gt;Mybatis 通过使用内置的日志工厂&lt;code&gt;org.apache.ibatis.logging.LogFactory&lt;/code&gt;提供日志功能。内置日志工厂将会把日志工作委托给下面的实现之一：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lambda、Stream与函数式编程</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/lambda-stream-functional/</link>
      <pubDate>Sat, 12 Sep 2020 18:24:41 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/lambda-stream-functional/</guid>
      <description>&lt;h1 id=&#34;lambda&#34;&gt;Lambda&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Java8 开始支持Lambda 表达式，让程序编写更简洁、优雅&lt;/li&gt;
&lt;li&gt;利用 Lambda 表达式可以更简洁的实现匿名内部类和函数声明与调用&lt;/li&gt;
&lt;li&gt;Lambda 使得 Stream 流式编程为操作集合提供便利&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lambda-表达式语法结构&#34;&gt;Lambda 表达式语法结构&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;(参数列表) -&amp;gt; 实现语句&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 标准使用方式&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MathOperation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;加法运算&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Lambda 允许忽略参数类型&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MathOperation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 单行代码可以省略方法体和 return 语句&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MathOperation&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;operation2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;opt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;函数式编程&#34;&gt;函数式编程&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;基于函数式接口并使用 Lambda 表达式的编程方式&lt;/li&gt;
&lt;li&gt;函数式编程的理念是将代码作为可重用数据代入到程序运行中&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;函数式接口&#34;&gt;函数式接口&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;有且仅有一个抽象方法的接口&lt;/li&gt;
&lt;li&gt;Java8 提供了一系列新的函数式接口，位于&lt;code&gt;java.util.function&lt;/code&gt;包中&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Predicate&lt;/code&gt;用于判断传入的数据是否满足要求，使用&lt;code&gt;test()&lt;/code&gt;方法进行逻辑判断&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;java.util.function.Predicate&lt;/code&gt; :用于条件判断，返回 Boolean 值&lt;/li&gt;
&lt;li&gt;&lt;code&gt;java.util.function.Consumer&lt;/code&gt;：对应只有一个输入参数，而不需要返回的情况&lt;/li&gt;
&lt;li&gt;&lt;code&gt;java.util.function.Function&lt;/code&gt;：对应一个输入参数，且返回数据的情况&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&#34;stream&#34;&gt;Stream&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Stream&lt;/code&gt;流式处理是建立在 Lambda 表达式基础上的多数据处理技术&lt;/li&gt;
&lt;li&gt;Stream 对集合数据处理高度抽象，极大简化代码量&lt;/li&gt;
&lt;li&gt;Stream 可以对集合数据进行迭代、去重、筛选、排序、聚合等操作&lt;/li&gt;
&lt;li&gt;位于&lt;code&gt;java.util.stream.Stream&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;创建流的五种方式&#34;&gt;创建流的五种方式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;基于数组创建&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java 反射</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-reflect/</link>
      <pubDate>Sat, 12 Sep 2020 18:23:05 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-reflect/</guid>
      <description>反射是在运行时动态访问类与对象的技术。</description>
    </item>
    <item>
      <title>Maven 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/maven-basics/</link>
      <pubDate>Sat, 12 Sep 2020 18:22:16 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/maven-basics/</guid>
      <description>&lt;h1 id=&#34;maven&#34;&gt;Maven&lt;/h1&gt;
&lt;h2 id=&#34;maven-的核心特性&#34;&gt;Maven 的核心特性&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maven 是项目管理工具，对软件项目提供构建和依赖管理&lt;/li&gt;
&lt;li&gt;Maven 是 Apache 下的 Java 开源项目&lt;/li&gt;
&lt;li&gt;Maven 为 Java 项目提供了统一的管理方式，已成为业界标准&lt;/li&gt;
&lt;li&gt;项目设置遵循统一的规则，保证不同开发环境的兼容性&lt;/li&gt;
&lt;li&gt;强大的依赖管理，项目依赖组件自动下载，自动更新&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://maven.apache.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Maven 官网&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maven-项目的标准结构&#34;&gt;Maven 项目的标准结构&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;mvn&lt;/code&gt;命令创建 Maven 项目&lt;/p&gt;</description>
    </item>
    <item>
      <title>MySQL 事务</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mysql-transaction/</link>
      <pubDate>Mon, 07 Sep 2020 21:41:58 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mysql-transaction/</guid>
      <description>&lt;h1 id=&#34;mysql事务&#34;&gt;MySQL事务&lt;/h1&gt;
&lt;h2 id=&#34;mysql事务简介&#34;&gt;MySQL事务简介&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;数据库的事务是指一组SQL语句组成的数据库逻辑处理单元，在这组SQL操作中，要么全部执行成功，要么全部执行失败。简单又经典的例子就是转账，事务A中进行转账，那么转出的账号要扣钱，转入的账号要加钱。为了保证数据一致性，这两个操作都必需要同时执行成功。&lt;/li&gt;
&lt;li&gt;MySQL 事务都是指在 InnoDB 引擎下，MyISAM 引擎是不支持事务的。&lt;/li&gt;
&lt;li&gt;事务用来管理insert、update、delete语句。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mysql事务特性&#34;&gt;MySQL事务特性&lt;/h2&gt;
&lt;h3 id=&#34;acid简介&#34;&gt;ACID简介&lt;/h3&gt;
&lt;p&gt;MySQL中事务的四大特性包括：&lt;strong&gt;原子性（Atomicity）&lt;/strong&gt;、&lt;strong&gt;一致性（Consistent）&lt;/strong&gt;、&lt;strong&gt;隔离性（Isolation）&lt;/strong&gt;、&lt;strong&gt;持久性（Durable）&lt;/strong&gt;,简称&lt;code&gt;ACID&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>jdbc 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/jdbc-basics/</link>
      <pubDate>Sun, 06 Sep 2020 22:55:29 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/jdbc-basics/</guid>
      <description>jdbc 基础知识学习。</description>
    </item>
    <item>
      <title>MySQL 与数据库</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mysql-basics/</link>
      <pubDate>Sun, 06 Sep 2020 22:55:14 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/mysql-basics/</guid>
      <description>&lt;h1 id=&#34;mysql&#34;&gt;MySQL&lt;/h1&gt;
&lt;h2 id=&#34;sql-与-nosql&#34;&gt;SQL 与 NoSQL&lt;/h2&gt;
&lt;h3 id=&#34;常见的关系型数据库&#34;&gt;常见的关系型数据库：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;MySQL&lt;/li&gt;
&lt;li&gt;Oracle&lt;/li&gt;
&lt;li&gt;DB2&lt;/li&gt;
&lt;li&gt;SQL Server&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;常见的非关系型数据库&#34;&gt;常见的非关系型数据库&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;MongoDB&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;mysql-安装与用户管理&#34;&gt;MySQL 安装与用户管理&lt;/h3&gt;
&lt;h3 id=&#34;mysql-配置文件&#34;&gt;MySQL 配置文件&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/etc/mysql/mysql.conf.d/mysqld.cnf&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;mysql-数据库表操作&#34;&gt;MySQL 数据库、表操作&lt;/h2&gt;
&lt;h3 id=&#34;sql&#34;&gt;SQL&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;DML：数据操作语言&lt;/li&gt;
&lt;li&gt;DCL：数据控制语言&lt;/li&gt;
&lt;li&gt;DDL：数据定义语言&lt;/li&gt;
&lt;li&gt;SQL 语句的注意事项
&lt;ol&gt;
&lt;li&gt;SQL 语句不区分大小写&lt;/li&gt;
&lt;li&gt;SQL 语句必须以分号结尾&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;SQL 语句的注释
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;# 这是一段注释文字&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/* 这是另一段注释文字 */&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;数据库操作&#34;&gt;数据库操作&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;数据库操作&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;创建数据库&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;查询存在的数据库&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;databases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;删除数据库&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;drop&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;database&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;数据表操作&#34;&gt;数据表操作&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;创建数据表&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;--student
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;       &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;primary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;varchar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sex&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;birthday&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;remark&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;varchar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;insert&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;into&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;values&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;李强&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;男&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1999-01-01&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;17328222989&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;备注&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;查看表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tables&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;查看表结构&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;查看建表语句&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;删除表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;drop&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;修改数据表结构&#34;&gt;修改数据表结构&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;修改表结构&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;增加表字段&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;VARCHAR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home_tel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;CHAR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;     &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;修改表字段属性&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;modify&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home_tel&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;VARCHAR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;修改字段名&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;change&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home_address&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;VARCHAR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NOT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;删除字段&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;drop&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home_address&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;drop&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;home_tel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;student&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;mysql-的数据类型和约束&#34;&gt;MySQL 的数据类型和约束&lt;/h2&gt;
&lt;h3 id=&#34;数据类型&#34;&gt;数据类型&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;数值型&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java Web 进阶</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/javaweb-advanced/</link>
      <pubDate>Sun, 06 Sep 2020 22:54:39 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/javaweb-advanced/</guid>
      <description>&lt;h1 id=&#34;json入门&#34;&gt;JSON入门&lt;/h1&gt;
&lt;h2 id=&#34;json语法规则&#34;&gt;JSON语法规则&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript Object Notation&lt;/li&gt;
&lt;li&gt;JSON是轻量级的数据交换格式&lt;/li&gt;
&lt;li&gt;独立于语言、自解释、易于理解书写&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;javascript与json&#34;&gt;JavaScript与JSON&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;JSON.parse()&lt;/code&gt;将json格式的字符串转为JSON对象&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JSON.stringify()&lt;/code&gt;将JSON对象转为json字符串&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;java与json&#34;&gt;Java与JSON&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Java 的JSON工具包：FastJson、Jackson、Gson、Json-lib&lt;/li&gt;
&lt;li&gt;fastjson是阿里巴巴的开源JSON解析库，它可以解析JSON格式的字符串，支持将Java Bean序列化为JSON字符串，也可以从JSON字符串反序列化到JavaBean。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JSON.toJSONString(Object object)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JSON.parseObject(String text, Class&amp;lt;T&amp;gt; clazz)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;JSON.parseArray(String text, Class&amp;lt;T&amp;gt; clazz)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;jqueryajax&#34;&gt;jQuery&amp;amp;Ajax&lt;/h1&gt;
&lt;h2 id=&#34;jquery使用&#34;&gt;jQuery使用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;jQuery是一个轻量级的js库，使用简便&lt;/li&gt;
&lt;li&gt;jQuery的核心是选择器，用于获取页面的元素&lt;/li&gt;
&lt;li&gt;jQuery&lt;a href=&#34;https://jquery.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;官网&lt;/a&gt;，采用独立JS文件发布&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;jquery选择器&#34;&gt;jQuery选择器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;jQuery选择器用于选中需要操作的页面元素：&lt;code&gt;$(expression)&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Java Web 基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/javaweb-basics/</link>
      <pubDate>Sun, 06 Sep 2020 22:54:32 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/javaweb-basics/</guid>
      <description>&lt;h1 id=&#34;xml入门&#34;&gt;XML入门&lt;/h1&gt;
&lt;h2 id=&#34;xml的作用&#34;&gt;XML的作用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;XML（EXtensible Makup Language）是可扩展标记语言&lt;/li&gt;
&lt;li&gt;编写XML就是编写标签，XML没有预定义标签&lt;/li&gt;
&lt;li&gt;XML重在保存和传输数据&lt;/li&gt;
&lt;li&gt;良好的可读性&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;xml用途&#34;&gt;XML用途&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;用于Java程序的配置文件（&lt;code&gt;web.xml&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;用于保存、传输程序产生的数据（EJB调用、WebService的soap协议）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;xml的语法规则&#34;&gt;XML的语法规则&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;XML第一行必须是XML声明；XML声明说明XML文档的基本信息，包括版本号与字符集。&lt;/p&gt;</description>
    </item>
    <item>
      <title>java 面向对象基础</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-oop-basics/</link>
      <pubDate>Sun, 06 Sep 2020 22:50:16 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-oop-basics/</guid>
      <description>&lt;h1 id=&#34;java-面向对象&#34;&gt;Java 面向对象&lt;/h1&gt;
&lt;h2 id=&#34;对象&#34;&gt;对象&lt;/h2&gt;
&lt;p&gt;在 Java 中，万物皆对象，只要是现实存在的，都可以是对象。&lt;/p&gt;
&lt;h2 id=&#34;面向对象&#34;&gt;面向对象&lt;/h2&gt;
&lt;h2 id=&#34;类&#34;&gt;类&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;类是模型，确定对象将会有的属性（特征）和方法（行为）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对象是类的实例体现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;定义一个类&lt;code&gt;Cat&lt;/code&gt;描述猫&lt;/p&gt;</description>
    </item>
    <item>
      <title>java 控制流程</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-control-flow/</link>
      <pubDate>Sun, 06 Sep 2020 22:49:43 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-control-flow/</guid>
      <description>&lt;h1 id=&#34;java-流程控制&#34;&gt;Java 流程控制&lt;/h1&gt;
&lt;p&gt;三大流程控制语句：顺序、选择、循环&lt;/p&gt;
&lt;h2 id=&#34;选择结构&#34;&gt;选择结构&lt;/h2&gt;
&lt;h3 id=&#34;if-结构&#34;&gt;&lt;code&gt;if&lt;/code&gt; 结构&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;判断条件是布尔类型，且是一个范围&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Scanner&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scanner&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Scanner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scanner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nextInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;优&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;良&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;中&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;不及格&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;多重-if&#34;&gt;多重 &lt;code&gt;if&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;90&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;优&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;良&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;score&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;中&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;不及格&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;嵌套-if&#34;&gt;嵌套 &lt;code&gt;if&lt;/code&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;将整个 if 块嵌套到另一个 if 块中&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;static&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 定义两个整型变量并初始化&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Scanner&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scanner&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Scanner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scanner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nextInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scanner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nextInt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 判断 x 和 y 是否相等&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;x 大于 y!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;            &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;x 小于 y！&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;System&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;out&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;x 和 y 相等！&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;switch结构&#34;&gt;&lt;code&gt;switch&lt;/code&gt;结构&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;判断条件是一个常量&lt;/p&gt;</description>
    </item>
    <item>
      <title>java 运算符</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-operator/</link>
      <pubDate>Sun, 06 Sep 2020 22:49:34 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-operator/</guid>
      <description>&lt;h1 id=&#34;java-运算符&#34;&gt;Java 运算符&lt;/h1&gt;
&lt;h2 id=&#34;表达式&#34;&gt;表达式&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;表达式由运算符和操作数组成&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;运算符&#34;&gt;运算符&lt;/h2&gt;
&lt;h3 id=&#34;算术运算符&#34;&gt;算术运算符&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;算术运算符主要用于进行基本的算术运算，包括加减乘除&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style=&#34;text-align: center&#34;&gt;算术运算符&lt;/th&gt;
					&lt;th style=&#34;text-align: center&#34;&gt;名称&lt;/th&gt;
					&lt;th style=&#34;text-align: left&#34;&gt;举例&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;+&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;加法&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;5+10=15&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;-&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;减法&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;10-5=5&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;*&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;乘法&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;3*6=18&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;/&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;除法&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;10/2=5&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;%&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;取余数&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;3%2=1&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;++&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;自增1&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;int n;n++;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;&amp;ndash;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;自减1&lt;/td&gt;
					&lt;td style=&#34;text-align: left&#34;&gt;int n=4;&amp;ndash;n;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;自增自减运算符&lt;/p&gt;</description>
    </item>
    <item>
      <title>java 变量与常量</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-variables/</link>
      <pubDate>Sun, 06 Sep 2020 22:49:20 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-variables/</guid>
      <description>&lt;h1 id=&#34;java-常量与变量&#34;&gt;Java 常量与变量&lt;/h1&gt;
&lt;h2 id=&#34;标识符&#34;&gt;标识符&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;标识符可以由字母、数字、下划线&lt;code&gt;_&lt;/code&gt;和美元符&lt;code&gt;$&lt;/code&gt;组成，且不能以数字开头&lt;/li&gt;
&lt;li&gt;标识符完全区分大小写，即&lt;code&gt;void&lt;/code&gt;是关键字，&lt;code&gt;Void&lt;/code&gt;是合法的标识符&lt;/li&gt;
&lt;li&gt;标识符不能是 Java 关键字和保留字&lt;/li&gt;
&lt;li&gt;标识符命名最好能见名知意&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;关键字&#34;&gt;关键字&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202009/213028.png&#34; alt=&#34;img&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>java 初识</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-beginning/</link>
      <pubDate>Sun, 06 Sep 2020 22:47:54 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/java-beginning/</guid>
      <description>&lt;h1 id=&#34;java-初识&#34;&gt;Java 初识&lt;/h1&gt;
&lt;h2 id=&#34;java-简介&#34;&gt;Java 简介&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Java 是一门面向对象的程序设计语言。&lt;/li&gt;
&lt;li&gt;1995 年由 sun 公司发布。&lt;/li&gt;
&lt;li&gt;2010 年 sun 公司被 Oracle 收购，Java 现在属于 Oracle 公司。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;jvm&#34;&gt;JVM&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;JVM（Java Virtual Machine），Java 虚拟机的简称。&lt;/li&gt;
&lt;li&gt;JVM 是 Java 语言平台无关性的关键。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;java-程序执行的流程&#34;&gt;Java 程序执行的流程&lt;/h2&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://cdn.jsdelivr.net/gh/xianglin2020/gallery@master/202009/224832.png&#34; alt=&#34;image-20200511220044340&#34;  /&gt;
&lt;/p&gt;</description>
    </item>
    <item>
      <title>ubuntu-linux</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/ubuntu-linux-basics/</link>
      <pubDate>Sun, 06 Sep 2020 22:45:23 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/ubuntu-linux-basics/</guid>
      <description>Linux 发展至今，已经是一个相当复杂和丰富的操作系统了，其大部分源代码还是 GNU 项目的。</description>
    </item>
    <item>
      <title>start-new-year</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/start-new-year/</link>
      <pubDate>Sun, 06 Sep 2020 22:39:52 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/posts/2020/start-new-year/</guid>
      <description>&lt;p&gt;都说程序员应该写写博客、文章，记录自己的成长。一方面总结自己、一方面给后者提供参考。之前做过这样的事，但因为某些原因没有坚持下去，现在想着再继续写博客。&lt;/p&gt;</description>
    </item>
    <item>
      <title>🙋🏻‍♂️关于我</title>
      <link>https://2d992714.xianglin2020-github-io.pages.dev/about/</link>
      <pubDate>Sun, 06 Sep 2020 22:09:39 +0000</pubDate>
      <guid>https://2d992714.xianglin2020-github-io.pages.dev/about/</guid>
      <description>&lt;h2 id=&#34;个人信息&#34;&gt;个人信息&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;向林 / 男 / 1996&lt;/li&gt;
&lt;li&gt;本科 / 重庆交通大学计算机科学与技术专业&lt;/li&gt;
&lt;li&gt;工作年限：6 年&lt;/li&gt;
&lt;li&gt;求职意向：Java 中高级后端开发工程师&lt;/li&gt;
&lt;li&gt;Email：xianglin2020@outlook.com&lt;/li&gt;
&lt;li&gt;个人博客：https://blog.xianglin.uk&lt;/li&gt;
&lt;li&gt;Github：https://github.com/xianglin2020&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;工作经历&#34;&gt;工作经历&lt;/h2&gt;
&lt;h3 id=&#34;广州青芒软件开发有限责任公司&#34;&gt;广州青芒软件开发有限责任公司&lt;/h3&gt;
&lt;p&gt;参与&lt;a href=&#34;https://www.coolcashcam.com/index.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;CoolCash&lt;/a&gt;移动支付类产品开发和维护。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
