<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Tech & Life]]></title><description><![CDATA[Thoughts, Technologies and Talent.]]></description><link>https://www.tangkun.site/</link><image><url>https://www.tangkun.site/favicon.png</url><title>Tech &amp; Life</title><link>https://www.tangkun.site/</link></image><generator>Ghost 5.35</generator><lastBuildDate>Tue, 10 Nov 2026 22:04:36 GMT</lastBuildDate><atom:link href="https://www.tangkun.site/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Linux基础]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="%E4%B8%80%E3%80%81%E5%88%9D%E8%AF%86linux">&#x4E00;&#x3001;&#x521D;&#x8BC6;linux</h2>
<h3 id="1-linux%E7%B3%BB%E7%BB%9F%E7%BB%84%E6%88%90">1. linux&#x7CFB;&#x7EDF;&#x7EC4;&#x6210;</h3>
<ul>
<li>linux&#x7CFB;&#x7EDF;&#x5185;&#x6838;
<ul>
<li>&#x5185;&#x6838;&#x63D0;&#x4F9B;&#x7CFB;&#x7EDF;&#x6700;&#x6838;&#x5FC3;&#x529F;&#x80FD;&#xFF0C;&#x5982;&#x8C03;&#x5EA6;cpu&#x3001;&#x8C03;&#x5EA6;&#x5185;&#x5B58;&#x3001;&#x8C03;&#x5EA6;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3001;&#x8C03;&#x5EA6;&#x7F51;&#x7EDC;&#x901A;</li></ul></li></ul>]]></description><link>https://www.tangkun.site/linuxji-chu/</link><guid isPermaLink="false">6433767545f9be56fef9961b</guid><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Mon, 10 Apr 2023 02:47:06 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/04/b9f628b101cf6e28.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="%E4%B8%80%E3%80%81%E5%88%9D%E8%AF%86linux">&#x4E00;&#x3001;&#x521D;&#x8BC6;linux</h2>
<h3 id="1-linux%E7%B3%BB%E7%BB%9F%E7%BB%84%E6%88%90">1. linux&#x7CFB;&#x7EDF;&#x7EC4;&#x6210;</h3>
<ul>
<li>linux&#x7CFB;&#x7EDF;&#x5185;&#x6838;
<ul>
<li>&#x5185;&#x6838;&#x63D0;&#x4F9B;&#x7CFB;&#x7EDF;&#x6700;&#x6838;&#x5FC3;&#x529F;&#x80FD;&#xFF0C;&#x5982;&#x8C03;&#x5EA6;cpu&#x3001;&#x8C03;&#x5EA6;&#x5185;&#x5B58;&#x3001;&#x8C03;&#x5EA6;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x3001;&#x8C03;&#x5EA6;&#x7F51;&#x7EDC;&#x901A;&#x8BAF;&#x3001;&#x8C03;&#x5EA6;IO&#x7B49;</li>
</ul>
</li>
<li>&#x7CFB;&#x7EDF;&#x7EA7;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;
<ul>
<li>&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#x51FA;&#x5382;&#x81EA;&#x5E26;&#x7A0B;&#x5E8F;&#xFF0C;&#x5982;&#x6587;&#x4EF6;&#x7BA1;&#x7406;&#x5668;&#x3001;&#x4EFB;&#x52A1;&#x7BA1;&#x7406;&#x5668;&#x3001;&#x56FE;&#x7247;&#x67E5;&#x770B;&#x3001;&#x97F3;&#x4E50;&#x64AD;&#x653E;&#x7B49;</li>
</ul>
</li>
</ul>
<img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/04/b9f628b101cf6e28.jpg" alt="Linux&#x57FA;&#x7840;"><p>linux&#x7CFB;&#x7EDF;&#x53D1;&#x884C;&#x7248;&#xFF1A;ubantu&#x3001;centos&#x3001;debian</p>
<h2 id="%E4%BA%8C%E3%80%81linux%E5%9F%BA%E7%A1%80%E5%91%BD%E4%BB%A4">&#x4E8C;&#x3001;linux&#x57FA;&#x7840;&#x547D;&#x4EE4;</h2>
<h3 id="1-%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84">1. &#x76EE;&#x5F55;&#x7ED3;&#x6784;</h3>
<p>&#x6811;&#x5F62;&#x7ED3;&#x6784;&#xFF0C;linux&#x6CA1;&#x6709;&#x76D8;&#x7B26;&#x6982;&#x5FF5;&#xFF0C;&#x6240;&#x6709;&#x6587;&#x4EF6;&#x90FD;&#x5728;&#x6839;&#x76EE;&#x5F55;/&#x4E0B;&#x3002;</p>
<p>windows&#x4E2D;&#x5C42;&#x7EA7;&#x5173;&#x7CFB;&#x7528; \ &#x8868;&#x793A;&#xFF1B;linux&#x4E2D;&#x5C42;&#x6B21;&#x5173;&#x7CFB;&#x7528; / &#x8868;&#x793A;&#xFF0C;&#x5F00;&#x5934;&#x7684; / &#x8868;&#x793A;&#x6839;&#x76EE;&#x5F55;</p>
<h3 id="2-%E5%91%BD%E4%BB%A4%E5%85%A5%E9%97%A8">2. &#x547D;&#x4EE4;&#x5165;&#x95E8;</h3>
<p>command [-option] [parameter]</p>
<ul>
<li>command &#x547D;&#x4EE4;&#x672C;&#x8EAB;</li>
<li>-option &#x63A7;&#x5236;&#x547D;&#x4EE4;&#x7684;&#x884C;&#x4E3A;&#x7EC6;&#x8282;</li>
<li>parameter &#x547D;&#x4EE4;&#x53C2;&#x6570;&#xFF0C;&#x591A;&#x7528;&#x4E8E;&#x547D;&#x4EE4;&#x7684;&#x6307;&#x5411;&#x76EE;&#x6807;</li>
</ul>
<h3 id="3-%E7%9B%AE%E5%BD%95%E5%88%87%E6%8D%A2">3. &#x76EE;&#x5F55;&#x5207;&#x6362;</h3>
<p>cd [linux&#x8DEF;&#x5F84;]</p>
<ul>
<li>cd&#x547D;&#x4EE4;&#x65E0;&#x9700;&#x9009;&#x9879;&#xFF0C;&#x53EA;&#x6709;&#x53C2;&#x6570;&#xFF0C;&#x8868;&#x793A;&#x8981;&#x5207;&#x6362;&#x5230;&#x54EA;&#x4E2A;&#x76EE;&#x5F55;&#x4E0B;</li>
<li>cd&#x547D;&#x4EE4;&#x76F4;&#x63A5;&#x6267;&#x884C;&#xFF0C;&#x4E0D;&#x5199;&#x53C2;&#x6570;&#xFF0C;&#x8868;&#x793A;&#x56DE;&#x5230;&#x7528;&#x6237;&#x7684;HOME&#x76EE;&#x5F55;</li>
</ul>
<h3 id="4-%E7%9B%B8%E5%AF%B9%E8%B7%AF%E5%BE%84%E3%80%81%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84%E5%92%8C%E7%89%B9%E6%AE%8A%E8%B7%AF%E5%BE%84%E7%AC%A6">4. &#x76F8;&#x5BF9;&#x8DEF;&#x5F84;&#x3001;&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#x548C;&#x7279;&#x6B8A;&#x8DEF;&#x5F84;&#x7B26;</h3>
<p>&#x7EDD;&#x5BF9;&#x8DEF;&#x5F84;&#xFF1A;&#x4EE5;&#x6839;&#x76EE;&#x5F55;&#x4E3A;&#x8D77;&#x70B9;&#xFF0C;&#x8DEF;&#x5F84;&#x63CF;&#x8FF0;&#x4EE5; / &#x5F00;&#x5934;</p>
<p>&#x76F8;&#x5BF9;&#x8DEF;&#x5F84;&#xFF1A;&#x4EE5;&#x5F53;&#x524D;&#x76EE;&#x5F55;&#x4E3A;&#x8D77;&#x70B9;&#xFF0C;&#x8DEF;&#x5F84;&#x63CF;&#x8FF0;&#x65E0;&#x9700;&#x4EE5; / &#x5F00;&#x5934;</p>
<p>&#x7279;&#x6B8A;&#x8DEF;&#x5F84;&#x7B26;&#xFF1A;. - &#x5F53;&#x524D;&#x76EE;&#x5F55;&#xFF1B;.. - &#x4E0A;&#x4E00;&#x7EA7;&#x76EE;&#x5F55;&#xFF1B;~ HOME&#x76EE;&#x5F55;</p>
<h3 id="5-%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95%E5%91%BD%E4%BB%A4-mkdir">5. &#x521B;&#x5EFA;&#x76EE;&#x5F55;&#x547D;&#x4EE4; mkdir</h3>
<h3 id="6-%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C%E5%91%BD%E4%BB%A4%EF%BC%88touch%E3%80%81cat%E3%80%81cp%E3%80%81mv%EF%BC%89">6. &#x6587;&#x4EF6;&#x64CD;&#x4F5C;&#x547D;&#x4EE4;&#xFF08;touch&#x3001;cat&#x3001;cp&#x3001;mv&#xFF09;</h3>
<h3 id="7-%E6%9F%A5%E6%89%BE%E5%91%BD%E4%BB%A4%EF%BC%88which%E3%80%81find%EF%BC%89">7. &#x67E5;&#x627E;&#x547D;&#x4EE4;&#xFF08;which&#x3001;find&#xFF09;</h3>
<p>&#x901A;&#x8FC7;which&#x547D;&#x4EE4;&#xFF0C;&#x67E5;&#x770B;&#x6240;&#x4F7F;&#x7528;&#x7684;&#x4E00;&#x7CFB;&#x5217;&#x547D;&#x4EE4;&#x7684;&#x7A0B;&#x5E8F;&#x6587;&#x4EF6;&#x5B58;&#x653E;&#x5728;&#x54EA;&#x91CC;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;which &#x8981;&#x67E5;&#x627E;&#x7684;&#x547D;&#x4EE4;</p>
<p>&#x901A;&#x8FC7;fing&#x547D;&#x4EE4;&#x53BB;&#x641C;&#x7D22;&#x6307;&#x5B9A;&#x7684;&#x6587;&#x4EF6;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;find &#x8D77;&#x59CB;&#x8DEF;&#x5F84; -name &quot;&#x88AB;&#x67E5;&#x627E;&#x6587;&#x4EF6;&#x540D;&quot;&#xFF0C;&#x652F;&#x6301;&#x4F7F;&#x7528;&#x901A;&#x914D;&#x7B26; * &#x6765;&#x505A;&#x6A21;&#x7CCA;&#x67E5;&#x8BE2;&#x3002;</p>
<h3 id="8-grep%E3%80%81wc%E5%92%8C%E7%AE%A1%E9%81%93%E7%AC%A6">8. grep&#x3001;wc&#x548C;&#x7BA1;&#x9053;&#x7B26;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;grep&#x547D;&#x4EE4;&#xFF0C;&#x4ECE;&#x6587;&#x4EF6;&#x4E2D;&#x901A;&#x8FC7;&#x5173;&#x952E;&#x5B57;&#x8FC7;&#x6EE4;&#x6587;&#x4EF6;&#x884C;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;grep [-n] &#x5173;&#x952E;&#x5B57; &#x6587;&#x4EF6;&#x8DEF;&#x5F84;</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;wc&#x547D;&#x4EE4;&#x7EDF;&#x8BA1;&#x6587;&#x4EF6;&#x7684;&#x884C;&#x6570;&#x3001;&#x5355;&#x8BCD;&#x6570;&#x91CF;&#x7B49;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;wc [-c -m -l -w] &#x6587;&#x4EF6;&#x8DEF;&#x5F84;</p>
<p>&#x7BA1;&#x9053;&#x7B26; | &#x7684;&#x542B;&#x4E49;&#x662F;&#x848B;&#x7BA1;&#x9053;&#x7B26;&#x5DE6;&#x8FB9;&#x7684;&#x547D;&#x4EE4;&#x7ED3;&#x679C;&#xFF0C;&#x4F5C;&#x4E3A;&#x53F3;&#x8FB9;&#x547D;&#x4EE4;&#x7684;&#x8F93;&#x5165;</p>
<h3 id="9echo%E3%80%81tail%E5%92%8C%E9%87%8D%E5%AE%9A%E5%90%91%E7%AC%A6">9.echo&#x3001;tail&#x548C;&#x91CD;&#x5B9A;&#x5411;&#x7B26;</h3>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528;echo&#x547D;&#x4EE4;&#x5728;&#x547D;&#x4EE4;&#x884C;&#x5185;&#x8F93;&#x51FA;&#x6307;&#x5B9A;&#x5185;&#x5BB9;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;echo &#x8F93;&#x51FA;&#x7684;&#x5185;&#x5BB9;</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5C06;&#x547D;&#x4EE4;&#x7528;&#x53CD;&#x5F15;&#x53F7; ` &#x5C06;&#x5176;&#x5305;&#x56F4;&#xFF0C;&#x88AB;&#x5305;&#x56F4;&#x7684;&#x5185;&#x5BB9;&#x4F1A;&#x4F5C;&#x4E3A;&#x547D;&#x4EE4;&#x6267;&#x884C;&#x3002;pwd</p>
<p>&#x91CD;&#x5B9A;&#x5411;&#x7B26;&#xFF1A;&gt;&#x548C;&gt;&gt;</p>
<ul>
<li>1&gt;&#xFF0C;&#x5C06;&#x5DE6;&#x4FA7;&#x547D;&#x4EE4;&#x7684;&#x7ED3;&#x679C;&#x8986;&#x76D6;&#x5199;&#x5165;&#x7B26;&#x53F7;&#x53F3;&#x4FA7;&#x6307;&#x5B9A;&#x7684;&#x6587;&#x4EF6;&#x4E2D;</li>
<li>2&gt;&gt;&#xFF0C;&#x5C06;&#x5DE6;&#x4FA7;&#x547D;&#x4EE4;&#x7684;&#x7ED3;&#x679C;&#x8FFD;&#x52A0;&#x5230;&#x7B26;&#x53F7;&#x53F3;&#x4FA7;&#x6307;&#x5B9A;&#x7684;&#x6587;&#x4EF6;&#x4E2D;</li>
</ul>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;tail&#x547D;&#x4EE4;&#x67E5;&#x770B;&#x6587;&#x4EF6;&#x5C3E;&#x90E8;&#x5185;&#x5BB9;&#xFF0C;&#x8DDF;&#x8E2A;&#x6587;&#x4EF6;&#x7684;&#x6700;&#x65B0;&#x66F4;&#x6539;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;tail [-f -num] linux&#x8DEF;&#x5F84;</p>
<h3 id="10-vim%E7%BC%96%E8%BE%91%E5%99%A8">10. vim&#x7F16;&#x8F91;&#x5668;</h3>
<h3 id="11-%E4%B8%89%E7%A7%8D%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F">11. &#x4E09;&#x79CD;&#x5DE5;&#x4F5C;&#x6A21;&#x5F0F;</h3>
<p>&#x547D;&#x4EE4;&#x6A21;&#x5F0F; Command mode</p>
<p>&#x8F93;&#x5165;&#x6A21;&#x5F0F; Insert mode</p>
<p>&#x5E95;&#x7EBF;&#x547D;&#x4EE4;&#x6A21;&#x5F0F; Last line mode</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/04/76fb0093b0d2635b.png" alt="Linux&#x57FA;&#x7840;" loading="lazy"></p>
<h2 id="%E4%B8%89%E3%80%81%E7%94%A8%E6%88%B7%E5%92%8C%E6%9D%83%E9%99%90">&#x4E09;&#x3001;&#x7528;&#x6237;&#x548C;&#x6743;&#x9650;</h2>
<h3 id="1-root%E7%94%A8%E6%88%B7">1. root&#x7528;&#x6237;</h3>
<p>&#x62E5;&#x6709;&#x6700;&#x5927;&#x6743;&#x9650;&#x7684;&#x8D26;&#x6237;&#x540D;&#xFF1A;root &#x8D85;&#x7EA7;&#x7BA1;&#x7406;&#x5458;</p>
<ul>
<li>&#x666E;&#x901A;&#x7528;&#x6237;&#x7684;&#x6743;&#x9650;&#xFF0C;&#x4E00;&#x822C;&#x5728;&#x5176;HOME&#x76EE;&#x5F55;&#x5185;&#x662F;&#x4E0D;&#x53D7;&#x9650;&#x7684;</li>
<li>&#x4E00;&#x65E6;&#x51FA;&#x4E86;HOME&#x76EE;&#x5F55;&#xFF0C;&#x5927;&#x591A;&#x6570;&#x5730;&#x65B9;&#x666E;&#x901A;&#x7528;&#x6237;&#x4EC5;&#x6709;&#x53EA;&#x8BFB;&#x548C;&#x6267;&#x884C;&#x6743;&#x9650;&#xFF0C;&#x65E0;&#x4FEE;&#x6539;&#x6743;&#x9650;</li>
</ul>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;su&#x547D;&#x4EE4;&#x5207;&#x6362;&#x8D26;&#x6237;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;su [-] [&#x7528;&#x6237;&#x540D;]</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;exit&#x547D;&#x4EE4;&#x9000;&#x56DE;&#x4E0A;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x3002;</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;sudo&#x547D;&#x4EE4;&#xFF0C;&#x4E3A;&#x666E;&#x901A;&#x547D;&#x4EE4;&#x6388;&#x6743;&#xFF0C;&#x4E34;&#x65F6;&#x4EE5;root&#x8EAB;&#x4EFD;&#x6267;&#x884C;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;sudo &#x5176;&#x4ED6;&#x547D;&#x4EE4;</p>
<ul>
<li>&#x5728;&#x5176;&#x4ED6;&#x547D;&#x4EE4;&#x4E4B;&#x524D;&#x5E26;&#x4E0A;sudo&#xFF0C;&#x5373;&#x53EF;&#x4E3A;&#x8FD9;&#x4E00;&#x6761;&#x547D;&#x4EE4;&#x4E34;&#x65F6;&#x8D4B;&#x4E88;root&#x6388;&#x6743;</li>
<li>&#x4F7F;&#x7528;sudo&#x4E4B;&#x524D;&#x9700;&#x8981;&#x4E3A;&#x666E;&#x901A;&#x7528;&#x6237;&#x914D;&#x7F6E;sudo&#x8BA4;&#x8BC1;</li>
</ul>
<h4 id="11-%E4%B8%BA%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AEsudo%E8%AE%A4%E8%AF%81">1.1 &#x4E3A;&#x666E;&#x901A;&#x7528;&#x6237;&#x914D;&#x7F6E;sudo&#x8BA4;&#x8BC1;</h4>
<ul>
<li>&#x5207;&#x6362;&#x5230;root&#x7528;&#x6237;&#xFF0C;&#x6267;&#x884C;visudo&#x547D;&#x4EE4;&#xFF0C;&#x4F1A;&#x81EA;&#x52A8;&#x901A;&#x8FC7;vi&#x7F16;&#x8F91;&#x5668;&#x6253;&#x5F00; /etc/sudoers</li>
<li>&#x5728;&#x6587;&#x4EF6;&#x6700;&#x540E;&#x6DFB;&#x52A0; user ALL=(ALL) NOPASSWD:ALL
<ul>
<li>&#x5176;&#x4E2D;NOPASSWD:ALL&#x8868;&#x793A;&#x4F7F;&#x7528;sudo&#x547D;&#x4EE4;&#x65E0;&#x9700;&#x8F93;&#x5165;&#x5BC6;&#x7801;</li>
</ul>
</li>
<li>&#x6700;&#x540E;&#x901A;&#x8FC7;wq&#x4FDD;&#x5B58;</li>
</ul>
<h3 id="2-%E7%94%A8%E6%88%B7%E3%80%81%E7%94%A8%E6%88%B7%E7%BB%84%E7%AE%A1%E7%90%86">2. &#x7528;&#x6237;&#x3001;&#x7528;&#x6237;&#x7EC4;&#x7BA1;&#x7406;</h3>
<p>linux&#x7CFB;&#x7EDF;&#x4E2D;&#x53EF;&#x4EE5;&#xFF1A;</p>
<ul>
<li>&#x914D;&#x7F6E;&#x591A;&#x4E2A;&#x7528;&#x6237;</li>
<li>&#x914D;&#x7F6E;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x7EC4;</li>
<li>&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x52A0;&#x5165;&#x591A;&#x4E2A;&#x7528;&#x6237;&#x7EC4;</li>
</ul>
<p>linux&#x5173;&#x4E8E;&#x6743;&#x9650;&#x7BA1;&#x63A7;&#x6709;2&#x4E2A;&#x7EA7;&#x522B;&#xFF1A;</p>
<ul>
<li>&#x9488;&#x5BF9;&#x7528;&#x6237;&#x7684;&#x6743;&#x9650;&#x63A7;&#x5236;</li>
<li>&#x9488;&#x5BF9;&#x7528;&#x6237;&#x7EC4;&#x7684;&#x6743;&#x9650;&#x63A7;&#x5236;</li>
</ul>
<p>groupadd/groupdel &#x521B;&#x5EFA;/&#x5220;&#x9664;&#x7528;&#x6237;&#x7EC4;</p>
<p>useradd [-g -d]/userdel [-r] &#x521B;&#x5EFA;/&#x5220;&#x9664;&#x7528;&#x6237;&#x7EC4;</p>
<p>id [&#x7528;&#x6237;&#x540D;] &#x67E5;&#x770B;&#x7528;&#x6237;&#x6240;&#x5C5E;&#x7EC4;</p>
<p>usermod -aG &#x5C06;&#x6307;&#x5B9A;&#x7528;&#x6237;&#x52A0;&#x5165;&#x6307;&#x5B9A;&#x7528;&#x6237;&#x7EC4;</p>
<h3 id="3-%E6%9F%A5%E7%9C%8B%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6">3. &#x67E5;&#x770B;&#x6743;&#x9650;&#x63A7;&#x5236;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;ls -l &#x4EE5;&#x5217;&#x8868;&#x5F62;&#x5F0F;&#x67E5;&#x770B;&#x5185;&#x5BB9;&#x5E76;&#x663E;&#x793A;&#x6743;&#x9650;&#x7EC6;&#x8282;&#x3002;</p>
<p>&#x6743;&#x9650;&#x7EC6;&#x8282;&#x5206;&#x4E3A;10&#x4E2A;&#x69FD;&#x4F4D;&#xFF1A;</p>
<p>-/d/l&#xFF08;-&#x8868;&#x793A;&#x6587;&#x4EF6;&#xFF1B;d&#x8868;&#x793A;&#x6587;&#x4EF6;&#x5939;&#xFF1B;l&#x8868;&#x793A;&#x8F6F;&#x94FE;&#x63A5;&#xFF09; + &#x6240;&#x5C5E;&#x7528;&#x6237;&#x6743;&#x9650; + &#x6240;&#x5C5E;&#x7528;&#x6237;&#x7EC4;&#x6743;&#x9650; + &#x5176;&#x4ED6;&#x7528;&#x6237;&#x6743;&#x9650;&#xFF08;r/w/x &#x6216; -&#xFF09;</p>
<p>r&#x8BFB; w&#x5199; x&#x6267;&#x884C; -&#x65E0;</p>
<h3 id="4-%E4%BF%AE%E6%94%B9%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6chmodchown">4. &#x4FEE;&#x6539;&#x6743;&#x9650;&#x63A7;&#x5236; - chmod/chown</h3>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528;chmod&#x547D;&#x4EE4;&#x4FEE;&#x6539;&#x6587;&#x4EF6;&#x3001;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x6743;&#x9650;&#x4FE1;&#x606F;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;chmod [-R] &#x6743;&#x9650; &#x6587;&#x4EF6;&#x6216;&#x6587;&#x4EF6;&#x5939;</p>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x53EA;&#x6709;&#x6587;&#x4EF6;&#x3001;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x6240;&#x5C5E;&#x7528;&#x6237;&#x6216;root&#x7528;&#x6237;&#x624D;&#x53EF;&#x4EE5;&#x4FEE;&#x6539;&#x3002;</p>
<h4 id="41-%E6%9D%83%E9%99%90%E7%9A%84%E6%95%B0%E5%AD%97%E5%BA%8F%E5%8F%B7">4.1 &#x6743;&#x9650;&#x7684;&#x6570;&#x5B57;&#x5E8F;&#x53F7;</h4>
<p>&#x7B2C;&#x4E00;&#x4F4D;&#x8868;&#x793A;&#x7528;&#x6237;&#x6743;&#x9650;&#xFF0C;&#x7B2C;&#x4E8C;&#x4F4D;&#x8868;&#x793A;&#x7528;&#x6237;&#x7EC4;&#x6743;&#x9650;&#xFF0C;&#x7B2C;&#x4E09;&#x4F4D;&#x8868;&#x793A;&#x5176;&#x4ED6;&#x7528;&#x6237;&#x6743;&#x9650;</p>
<p>&#x7EC6;&#x8282;&#xFF1A;r &#x8BB0;&#x4E3A;4&#xFF0C;w &#x8BB0;&#x4E3A;2&#xFF0C;x &#x8BB0;&#x4E3A;1</p>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528;chown&#x547D;&#x4EE4;&#x4FEE;&#x6539;&#x6587;&#x4EF6;&#x3001;&#x6587;&#x4EF6;&#x5939;&#x7684;&#x6240;&#x5C5E;&#x7528;&#x6237;&#x548C;&#x7528;&#x6237;&#x7EC4;&#x3002;chown [-R] [&#x7528;&#x6237;] [:] [&#x7528;&#x6237;&#x7EC4;] &#x6587;&#x4EF6;&#x6216;&#x6587;&#x4EF6;&#x5939;</p>
<h2 id="%E5%9B%9B%E3%80%81linux%E5%AE%9E%E7%94%A8%E6%93%8D%E4%BD%9C">&#x56DB;&#x3001;linux&#x5B9E;&#x7528;&#x64CD;&#x4F5C;</h2>
<h3 id="1-%E5%90%84%E7%B1%BB%E5%B0%8F%E6%8A%80%E5%B7%A7">1. &#x5404;&#x7C7B;&#x5C0F;&#x6280;&#x5DE7;</h3>
<ul>
<li>
<p>&#x5F3A;&#x5236;&#x505C;&#x6B62;</p>
<p>ctrl + c &#x5F3A;&#x5236;&#x505C;&#x6B62;</p>
</li>
<li>
<p>&#x9000;&#x51FA;&#x3001;&#x767B;&#x51FA;</p>
<p>ctrl + d &#x9000;&#x51FA;&#x6216;&#x767B;&#x51FA;</p>
</li>
<li>
<p>&#x5386;&#x53F2;&#x547D;&#x4EE4;&#x641C;&#x7D22;</p>
<p>history &#x67E5;&#x770B;&#x5386;&#x53F2;&#x8F93;&#x5165;&#x8FC7;&#x7684;&#x547D;&#x4EE4;</p>
<p>! &#x547D;&#x4EE4;&#x524D;&#x7F00;&#xFF0C;&#x81EA;&#x52A8;&#x6267;&#x884C;&#x4E0A;&#x4E00;&#x6B21;&#x5339;&#x914D;&#x524D;&#x7F00;&#x7684;&#x547D;&#x4EE4;</p>
<p>ctrl + r &#x8F93;&#x5165;&#x5185;&#x5BB9;&#x5339;&#x914D;&#x5386;&#x53F2;&#x547D;&#x4EE4;</p>
</li>
<li>
<p>&#x5149;&#x6807;&#x79FB;&#x52A8;</p>
<ul>
<li>ctrl + a&#xFF0C;&#x8DF3;&#x5230;&#x547D;&#x4EE4;&#x5F00;&#x901A;</li>
<li>ctrl + e&#xFF0C;&#x8DF3;&#x5230;&#x547D;&#x4EE4;&#x7ED3;&#x5C3E;</li>
<li>ctrl + &#x952E;&#x76D8;&#x5DE6;&#x952E;&#xFF0C;&#x5411;&#x5DE6;&#x8DF3;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;</li>
<li>ctrl + &#x952E;&#x76D8;&#x53F3;&#x952E;&#xFF0C;&#x5411;&#x53F3;&#x8DF3;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;</li>
</ul>
</li>
<li>
<p>&#x6E05;&#x5C4F; ctrl + l &#x6216;&#x8005; clear &#x547D;&#x4EE4;</p>
</li>
</ul>
<h3 id="2-%E8%BD%AF%E4%BB%B6%E5%AE%89%E8%A3%85">2. &#x8F6F;&#x4EF6;&#x5B89;&#x88C5;</h3>
<p>yum&#x547D;&#x4EE4;&#xFF1A;RPM&#x5305;&#x8F6F;&#x4EF6;&#x7BA1;&#x7406;&#x5668;&#xFF0C;&#x7528;&#x4E8E;&#x81EA;&#x52A8;&#x5316;&#x5B89;&#x88C5;&#x914D;&#x7F6E;linux&#x6587;&#x4EF6;&#xFF0C;&#x5E76;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x89E3;&#x51B3;&#x4F9D;&#x8D56;&#x95EE;&#x9898;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;yum [-y] [install | remove | search] &#x8F6F;&#x4EF6;&#x540D;&#x79F0;</p>
<p>apt&#x547D;&#x4EE4;- &#x6269;&#x5C55;&#xFF1A;CentOS&#x4F7F;&#x7528;yun&#x7BA1;&#x7406;&#x5668;&#xFF0C;Ubuntu&#x4F7F;&#x7528;apt&#x7BA1;&#x7406;&#x5668;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;apt [-y] [install | remove | search] &#x8F6F;&#x4EF6;&#x540D;&#x79F0;</p>
<h3 id="3-systemctl">3. systemctl</h3>
<p>&#x547D;&#x4EE4;&#x63A7;&#x5236;&#xFF1A;&#x542F;&#x52A8;&#x3001;&#x505C;&#x6B62;&#x3001;&#x5F00;&#x673A;&#x81EA;&#x542F;&#x3002;&#x80FD;&#x591F;&#x88AB;systemctl&#x7BA1;&#x7406;&#x7684;&#x8F6F;&#x4EF6;&#xFF0C;&#x4E00;&#x822C;&#x79F0;&#x4E4B;&#x4E3A;&#x670D;&#x52A1;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;systemctl start | stop | status | enable | disable &#x670D;&#x52A1;&#x540D;</p>
<p>&#x7CFB;&#x7EDF;&#x5185;&#x7F6E;&#x7684;&#x670D;&#x52A1;&#x5305;&#x62EC;:</p>
<ul>
<li>NetwordManager&#xFF0C;&#x4E3B;&#x7F51;&#x7EDC;&#x670D;&#x52A1;</li>
<li>network&#xFF0C;&#x526F;&#x7F51;&#x7EDC;&#x670D;&#x52A1;</li>
<li>firewalld&#xFF0C;&#x9632;&#x706B;&#x5899;&#x670D;&#x52A1;</li>
<li>sshd&#xFF0C;ssh&#x670D;&#x52A1;&#xFF08;FinalShell&#x8FDC;&#x7A0B;&#x767B;&#x5F55;linux&#x4F7F;&#x7528;&#x7684;&#x5C31;&#x662F;&#x4E2D;&#x56FD;&#x670D;&#x52A1;&#xFF09;</li>
</ul>
<p>&#x9664;&#x4E86;&#x5185;&#x7F6E;&#x7684;&#x670D;&#x52A1;&#x4EE5;&#x5916;&#xFF0C;&#x90E8;&#x5206;&#x7B2C;&#x4E09;&#x65B9;&#x8F6F;&#x4EF6;&#x5B89;&#x88C5;&#x540E;&#x4E5F;&#x53EF;&#x4EE5;&#x4EE5;systemctl&#x8FDB;&#x884C;&#x63A7;&#x5236;&#x3002;</p>
<h3 id="4-%E8%BD%AF%E9%93%BE%E6%8E%A5">4. &#x8F6F;&#x94FE;&#x63A5;</h3>
<p>ln&#x547D;&#x4EE4;&#x521B;&#x5EFA;&#x8F6F;&#x8FDE;&#x63A5;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x6587;&#x4EF6;&#x3001;&#x6587;&#x4EF6;&#x5939;&#x94FE;&#x63A5;&#x5230;&#x5176;&#x4ED6;&#x4F4D;&#x7F6E;&#xFF0C;&#x7C7B;&#x4F3C;windows&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x5FEB;&#x6377;&#x65B9;&#x5F0F;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;ln -s &#x53C2;&#x6570;1 &#x53C2;&#x6570;2</p>
<h3 id="5-%E6%97%A5%E6%9C%9F%E3%80%81%E6%97%B6%E5%8C%BA">5. &#x65E5;&#x671F;&#x3001;&#x65F6;&#x533A;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;date&#x547D;&#x4EE4;&#x5728;&#x547D;&#x4EE4;&#x884C;&#x4E2D;&#x67E5;&#x770B;&#x7CFB;&#x7EDF;&#x65F6;&#x95F4;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;date [-d] [+&#x683C;&#x5F0F;&#x5316;&#x5B57;&#x7B26;&#x4E32; %Y %y %m %d %H %M %S %s]</p>
<h4 id="51-data%E5%91%BD%E4%BB%A4%E8%BF%9B%E8%A1%8C%E6%97%A5%E6%9C%9F%E5%8A%A0%E5%87%8F">5.1 data&#x547D;&#x4EE4;&#x8FDB;&#x884C;&#x65E5;&#x671F;&#x52A0;&#x51CF;</h4>
<p>&#x652F;&#x6301;&#x7684;&#x65F6;&#x95F4;&#x6807;&#x8BB0;&#x6709;&#xFF1A;year / month / day / hour / minute / second</p>
<h4 id="52-%E4%BF%AE%E6%94%B9linux%E6%97%B6%E5%8C%BA">5.2 &#x4FEE;&#x6539;linux&#x65F6;&#x533A;</h4>
<pre><code>rm -f /etc/localtime

sudo ln -s /usr/share/zoneinfo/Asia/Shagnhai /etc/localtime
</code></pre>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7;ntp&#x7A0B;&#x5E8F;&#x81EA;&#x52A8;&#x6821;&#x51C6;&#x7CFB;&#x7EDF;&#x65F6;&#x95F4;</p>
<h3 id="6-ip%E5%9C%B0%E5%9D%80%E3%80%81%E4%B8%BB%E6%9C%BA%E5%90%8D">6.  IP&#x5730;&#x5740;&#x3001;&#x4E3B;&#x673A;&#x540D;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; ifconfig &#x547D;&#x4EE4;&#x67E5;&#x770B;&#x672C;&#x673A;ip&#x5730;&#x5740;</p>
<h4 id="61-%E4%BF%AE%E6%94%B9%E4%B8%BB%E6%9C%BA%E5%90%8D">6.1  &#x4FEE;&#x6539;&#x4E3B;&#x673A;&#x540D;</h4>
<ul>
<li>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; hostname &#x547D;&#x4EE4;&#x67E5;&#x770B;&#x7CFB;&#x7EDF;&#x4E3B;&#x673A;&#x540D;</li>
<li>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; hostnamectl set-hostname &#x547D;&#x4EE4;&#x4FEE;&#x6539;&#x4E3B;&#x673A;&#x540D;</li>
</ul>
<h3 id="7-%E7%BD%91%E7%BB%9C%E4%BC%A0%E8%BE%93">7.  &#x7F51;&#x7EDC;&#x4F20;&#x8F93;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; ping &#x547D;&#x4EE4;&#x68C0;&#x67E5;&#x6307;&#x5B9A;&#x7F51;&#x7EDC;&#x670D;&#x52A1;&#x5668;&#x91CA;&#x653E;&#x53EF;&#x8054;&#x901A;&#x3002;&#x8BED;&#x6CD5;ping [-c num] ip&#x6216;&#x4E3B;&#x673A;&#x540D;</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; wget &#x5728;&#x547D;&#x4EE4;&#x884C;&#x5185;&#x4E0B;&#x8F7D;&#x7F51;&#x7EDC;&#x6587;&#x4EF6;&#xFF0C;&#x975E;&#x4EA4;&#x4E92;&#x5F0F;&#x7684;&#x6587;&#x4EF6;&#x4E0B;&#x8F7D;&#x5668;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;wget [-b] url</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; curl &#x8FD4;&#x9001;http&#x7F51;&#x7EDC;&#x8BF7;&#x6C42;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x4E8E;&#x4E0B;&#x8F7D;&#x6587;&#x4EF6;&#x3001;&#x83B7;&#x53D6;&#x4FE1;&#x606F;&#x7B49;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;curl [-O] url</p>
<h4 id="71-%E7%AB%AF%E5%8F%A3">7.1 &#x7AEF;&#x53E3;</h4>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; netstat &#x547D;&#x4EE4;&#x67E5;&#x770B;&#x7AEF;&#x53E3;&#x5360;&#x7528;&#x60C5;&#x51B5;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;netstat -anp | grep &#x7AEF;&#x53E3;&#x53F7;</p>
<h3 id="8-%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86">8. &#x8FDB;&#x7A0B;&#x7BA1;&#x7406;</h3>
<p>&#x6BCF;&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4FBF;&#x88AB;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x6CE8;&#x518C;&#x4E3A;&#x7CFB;&#x7EDF;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x3002;&#x5E76;&#x4F1A;&#x4E3A;&#x6BCF;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x5206;&#x914D;&#x4E00;&#x4E2A;&#x72EC;&#x6709;&#x7684;&#x8FDB;&#x7A0B;ID&#xFF08;&#x8FDB;&#x7A0B;&#x53F7;&#xFF09;&#x3002;</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; ps &#x547D;&#x4EE4;&#x67E5;&#x770B;&#x7CFB;&#x7EDF;&#x4E2D;&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;ps [-e -f]</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; kill &#x547D;&#x4EE4;&#x5173;&#x95ED;&#x8FDB;&#x7A0B;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;kill [-9] &#x8FDB;&#x7A0B;ID</p>
<h3 id="9-%E4%B8%BB%E6%9C%BA%E7%8A%B6%E6%80%81">9. &#x4E3B;&#x673A;&#x72B6;&#x6001;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; top &#x547D;&#x4EE4;&#x67E5;&#x770B;CPU&#x3001;&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x60C5;&#x51B5;&#xFF0C;&#x7C7B;&#x4F3C;&#x4E8E;&#x4EFB;&#x52A1;&#x7BA1;&#x7406;&#x5668;&#x3002;</p>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; df &#x547D;&#x4EE4; &#x67E5;&#x770B;&#x78C1;&#x76D8;&#x7684;&#x4F7F;&#x7528;&#x60C5;&#x51B5;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;df [-h]</p>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528; iostat &#x67E5;&#x770B;CPU&#x3001;&#x78C1;&#x76D8;&#x76F8;&#x5173;&#x4FE1;&#x606F;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;iostat  [-x] [num1] [num2]</p>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528;sar &#x547D;&#x4EE4;&#x67E5;&#x770B;&#x7F51;&#x7EDC;&#x7684;&#x76F8;&#x5173;&#x7EDF;&#x8BA1;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;sar -n DEV num1 num2</p>
<h3 id="10-%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F">10. &#x73AF;&#x5883;&#x53D8;&#x91CF;</h3>
<p>&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x53F2;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#xFF0C;&#x8BB0;&#x5F55;&#x7684;&#x4E00;&#x4E9B;&#x5173;&#x952E;&#x4FE1;&#x606F;&#xFF0C;&#x7528;&#x4EE5;&#x8F85;&#x52A9;&#x7CFB;&#x7EDF;&#x8FD0;&#x884C;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; env &#x547D;&#x4EE4;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x7CFB;&#x7EDF;&#x4E2D;&#x8BB0;&#x5F55;&#x7684;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x3002;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#x662F;&#x4E00;&#x79CD;KeyValue&#x578B;&#x7ED3;&#x6784;&#x3002;</p>
<h4 id="101-%E7%AC%A6%E5%8F%B7">10.1 $&#x7B26;&#x53F7;</h4>
<p>&#x5728;linux&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;$&#x7B26;&#x53F7;&#x88AB;&#x7528;&#x4E8E;&#x53D6;&quot;&#x53D8;&#x91CF;&quot;&#x7684;&#x503C;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;${PATH}</p>
<h4 id="102-%E8%87%AA%E8%A1%8C%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F">10.2 &#x81EA;&#x884C;&#x8BBE;&#x7F6E;&#x73AF;&#x5883;&#x53D8;&#x91CF;</h4>
<p>&#x8BED;&#x6CD5;&#xFF1A;export &#x53D8;&#x91CF;&#x540D;=&#x53D8;&#x91CF;&#x503C;</p>
<ul>
<li>&#x6C38;&#x4E45;&#x751F;&#x6548;
<ul>
<li>&#x9488;&#x5BF9;&#x5F53;&#x524D;&#x7528;&#x6237;&#x751F;&#x6548;&#xFF0C;&#x914D;&#x7F6E;&#x5728;&#x5F53;&#x524D;&#x7528;&#x6237;&#x7684;~/.bashrc&#x6587;&#x4EF6;&#x4E2D;</li>
<li>&#x9488;&#x5BF9;&#x6240;&#x6709;&#x7528;&#x6237;&#x751F;&#x6548;&#xFF0C;&#x914D;&#x7F6E;&#x5728;&#x7CFB;&#x7EDF;&#x7684;/etc/profile&#x6587;&#x4EF6;&#x4E2D;</li>
<li>&#x901A;&#x8FC7;&#x8BED;&#x6CD5;&#xFF1A;source &#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x8FDB;&#x884C;&#x7ACB;&#x523B;&#x751F;&#x6548;</li>
</ul>
</li>
</ul>
<h3 id="11-%E4%B8%8A%E4%BC%A0%E3%80%81%E4%B8%8B%E8%BD%BD">11. &#x4E0A;&#x4F20;&#x3001;&#x4E0B;&#x8F7D;</h3>
<p>&#x53EF;&#x4EE5;&#x901A;&#x8FC7; rz&#x3001;sz &#x547D;&#x4EE4;&#x8FDB;&#x884C;&#x6587;&#x4EF6;&#x4E0A;&#x4F20;&#x4E0B;&#x8F7D;&#x3002;&#x547D;&#x4EE4;&#x9700;&#x8981;&#x901A;&#x8FC7;apt -y install lrzsz &#x5B89;&#x88C5;&#x3002;</p>
<h3 id="12-%E5%8E%8B%E7%BC%A9%E3%80%81%E8%A7%A3%E5%8E%8B%E7%BC%A9">12. &#x538B;&#x7F29;&#x3001;&#x89E3;&#x538B;&#x7F29;</h3>
<h4 id="121-tar%E5%91%BD%E4%BB%A4%E5%8E%8B%E7%BC%A9%E8%A7%A3%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6">12.1 tar&#x547D;&#x4EE4;&#x538B;&#x7F29;&#x89E3;&#x538B;&#x7F29;&#x6587;&#x4EF6;</h4>
<p>linux&#x548C;Mac&#x7CFB;&#x7EDF;&#x5E38;&#x7528;&#x6709;&#x4E24;&#x79CD;&#x538B;&#x7F29;&#x683C;&#x5F0F;&#xFF0C;&#x540E;&#x7F00;&#x5206;&#x522B;&#x662F;&#xFF1A;</p>
<ul>
<li>.tar&#xFF0C;&#x79F0;&#x4E4B;&#x4E3A;tarball&#xFF0C;&#x5F52;&#x6863;&#x6587;&#x4EF6;&#xFF0C;&#x5373;&#x7B80;&#x5355;&#x7684;&#x5C06;&#x6587;&#x4EF6;&#x7EC4;&#x88C5;&#x5230;&#x4E00;&#x4E2A;.tar&#x7684;&#x6587;&#x4EF6;&#x5185;&#xFF0C;&#x5E76;&#x6CA1;&#x6709;&#x592A;&#x591A;&#x6587;&#x4EF6;&#x4F53;&#x79EF;&#x7684;&#x51CF;&#x5C11;&#xFF0C;&#x4EC5;&#x4EC5;&#x662F;&#x7B80;&#x5355;&#x5C01;&#x88C5;&#x3002;</li>
<li>.gz&#xFF0C;&#x4E5F;&#x5E38;&#x89C1;&#x4E3A;.tar.gz&#xFF0C;gzip&#x683C;&#x5F0F;&#x538B;&#x7F29;&#x6587;&#x4EF6;&#xFF0C;&#x5373;&#x4F7F;&#x7528;gzip&#x538B;&#x7F29;&#x7B97;&#x6CD5;&#x5C06;&#x6587;&#x4EF6;&#x538B;&#x7F29;&#x5230;&#x4E00;&#x4E2A;&#x6587;&#x4EF6;&#x5185;&#xFF0C;&#x53EF;&#x4EE5;&#x6781;&#x5927;&#x7684;&#x51CF;&#x5C11;&#x538B;&#x7F29;&#x7684;&#x4F53;&#x79EF;&#x3002;</li>
</ul>
<p>&#x4F7F;&#x7528; tar &#x547D;&#x4EE4;&#x5747;&#x53EF;&#x4EE5;&#x5BF9;&#x8FD9;&#x4E24;&#x79CD;&#x683C;&#x5F0F;&#x8FDB;&#x884C;&#x538B;&#x7F29;&#x548C;&#x89E3;&#x538B;&#x7F29;&#x7684;&#x64CD;&#x4F5C;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;tar [-c -v -x -f -z -C] &#x53C2;&#x6570;1 &#x53C2;&#x6570;2 ... &#x53C2;&#x6570;N</p>
<h4 id="122-zipunzip%E5%91%BD%E4%BB%A4%E5%8E%8B%E7%BC%A9%E8%A7%A3%E5%8E%8B%E7%BC%A9%E6%96%87%E4%BB%B6">12.2 zip/unzip&#x547D;&#x4EE4;&#x538B;&#x7F29;&#x89E3;&#x538B;&#x7F29;&#x6587;&#x4EF6;</h4>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528; zip &#x547D;&#x4EE4;&#x538B;&#x7F29;&#x6587;&#x4EF6;&#x4E3A;zip&#x538B;&#x7F29;&#x5305;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;zip [-r] &#x53C2;&#x6570;1 &#x53C2;&#x6570;2 ... &#x53C2;&#x6570;N</p>
<ul>
<li>&#x88AB;&#x538B;&#x7F29;&#x7684;&#x5305;&#x5305;&#x542B;&#x6587;&#x4EF6;&#x5939;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x4F7F;&#x7528;-r&#x9009;&#x9879;</li>
</ul>
<p>&#x53EF;&#x4EE5;&#x4F7F;&#x7528; unzip &#x547D;&#x4EE4;&#x89E3;&#x538B;zip&#x538B;&#x7F29;&#x5305;&#x3002;&#x8BED;&#x6CD5;&#xFF1A;unzip[-d] &#x53C2;&#x6570;</p>
<h3 id="13-scp%E5%91%BD%E4%BB%A4">13. scp&#x547D;&#x4EE4;</h3>
<p>scp &#x547D;&#x4EE4;&#x662F;cp&#x547D;&#x4EE4;&#x7684;&#x5347;&#x7EA7;&#x7248;&#xFF0C;&#x5373;ssh cp&#xFF0C;&#x901A;&#x8FC7;SSH&#x534F;&#x8BAE;&#x5B8C;&#x6210;&#x7684;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;scp &#x547D;&#x4EE4;&#xFF0C;&#x5728;&#x4E0D;&#x540C;&#x7684;linux&#x670D;&#x52A1;&#x5668;&#x4E2D;&#xFF0C;&#x901A;&#x8FC7;SSH&#x534F;&#x8BAE;&#x76F8;&#x4E92;&#x4F20;&#x8F93;&#x6587;&#x4EF6;&#x3002;</p>
<!--kg-card-end: markdown--><hr>]]></content:encoded></item><item><title><![CDATA[MyBatis]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="mybatis">MyBatis</h2>
<h3 id="1-%E4%BB%80%E4%B9%88%E6%98%AFmybatis">1. &#x4EC0;&#x4E48;&#x662F;MyBatis</h3>
<ul>
<li>
<p>MyBatis&#x662F;&#x4E00;&#x6B3E;&#x4F18;&#x79C0;&#x7684;&#x6301;&#x4E45;&#x5C42;&#x6846;&#x67B6;&#xFF0C;&#x7528;&#x4E8E;&#x7B80;&#x5316;JDBC&#x5F00;&#x53D1;</p>
</li>
<li>
<p><a href="http://www.mybatis.cn/">http://www.mybatis.cn/</a></p>
</li>
</ul>
<h4 id="11-%E6%8C%81%E4%B9%85%E5%B1%82">1.1 &#x6301;&#x4E45;&#x5C42;</h4>
<ul>
<li>&#x8D1F;&#x8D23;&#x5C06;&#x6570;&#x636E;&#x4FDD;&#x5B58;&#x5230;&#x6570;&#x636E;&#x5E93;&#x7684;&#x4E00;&#x5C42;&#x4EE3;</li></ul>]]></description><link>https://www.tangkun.site/mybatis/</link><guid isPermaLink="false">640468d145f9be56fef994d2</guid><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Sun, 05 Mar 2023 10:08:50 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/a6d8af7bea0b5b68.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="mybatis">MyBatis</h2>
<h3 id="1-%E4%BB%80%E4%B9%88%E6%98%AFmybatis">1. &#x4EC0;&#x4E48;&#x662F;MyBatis</h3>
<ul>
<li>
<img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/a6d8af7bea0b5b68.jpg" alt="MyBatis"><p>MyBatis&#x662F;&#x4E00;&#x6B3E;&#x4F18;&#x79C0;&#x7684;&#x6301;&#x4E45;&#x5C42;&#x6846;&#x67B6;&#xFF0C;&#x7528;&#x4E8E;&#x7B80;&#x5316;JDBC&#x5F00;&#x53D1;</p>
</li>
<li>
<p><a href="http://www.mybatis.cn/">http://www.mybatis.cn/</a></p>
</li>
</ul>
<h4 id="11-%E6%8C%81%E4%B9%85%E5%B1%82">1.1 &#x6301;&#x4E45;&#x5C42;</h4>
<ul>
<li>&#x8D1F;&#x8D23;&#x5C06;&#x6570;&#x636E;&#x4FDD;&#x5B58;&#x5230;&#x6570;&#x636E;&#x5E93;&#x7684;&#x4E00;&#x5C42;&#x4EE3;&#x7801;</li>
<li>JavaEE&#x4E09;&#x5C42;&#x67B6;&#x6784;&#xFF1A;&#x8868;&#x73B0;&#x5C42;&#x3001;&#x4E1A;&#x52A1;&#x5C42;&#x3001;&#x6301;&#x4E45;&#x5C42;</li>
</ul>
<h4 id="12-%E6%A1%86%E6%9E%B6">1.2 &#x6846;&#x67B6;</h4>
<ul>
<li>&#x6846;&#x67B6;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x534A;&#x6210;&#x54C1;&#x8F6F;&#x4EF6;&#xFF0C;&#x662F;&#x4E00;&#x5957;&#x53EF;&#x91CD;&#x7528;&#x7684;&#x3001;&#x901A;&#x7528;&#x7684;&#x3001;&#x8F6F;&#x4EF6;&#x57FA;&#x7840;&#x4EE3;&#x7801;&#x6A21;&#x578B;</li>
<li>&#x5728;&#x6846;&#x67B6;&#x57FA;&#x7840;&#x4E4B;&#x4E0A;&#x6784;&#x67B6;&#x8F6F;&#x4EF6;&#x7F16;&#x5199;&#x66F4;&#x52A0;&#x9AD8;&#x6548;&#x3001;&#x89C4;&#x8303;&#x3001;&#x901A;&#x7528;&#x3001;&#x53EF;&#x6269;&#x5C55;</li>
</ul>
<h4 id="13-jdbc%E7%BC%BA%E7%82%B9">1.3 JDBC&#x7F3A;&#x70B9;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/e779b2f492ba9b50.png" alt="MyBatis" loading="lazy"></p>
<ol>
<li>&#x786C;&#x7F16;&#x7801;
<ul>
<li>&#x6CE8;&#x518C;&#x9A71;&#x52A8;&#xFF0C;&#x83B7;&#x53D6;&#x8FDE;&#x63A5;</li>
<li>SQL&#x8BED;&#x53E5;</li>
</ul>
</li>
<li>&#x64CD;&#x4F5C;&#x7E41;&#x7410;
<ul>
<li>&#x624B;&#x52A8;&#x8BBE;&#x7F6E;&#x53C2;&#x6570;</li>
<li>&#x624B;&#x52A8;&#x5C01;&#x88C5;&#x7ED3;&#x679C;&#x96C6;</li>
</ul>
</li>
</ol>
<h4 id="14-mybatis%E7%AE%80%E5%8C%96">1.4 MyBatis&#x7B80;&#x5316;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/073d8939d1325cf5.png" alt="MyBatis" loading="lazy"></p>
<h3 id="2-mybatis%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8">2. MyBatis&#x5FEB;&#x901F;&#x5165;&#x95E8;</h3>
<p>&#x67E5;&#x8BE2;user&#x8868;&#x4E2D;&#x6240;&#x6709;&#x6570;&#x636E;</p>
<ol>
<li>
<p>&#x521B;&#x5EFA;user&#x8868;&#xFF0C;&#x6DFB;&#x52A0;&#x6570;&#x636E;</p>
</li>
<li>
<p>&#x521B;&#x5EFA;&#x6A21;&#x5757;&#xFF0C;&#x5BFC;&#x5165;&#x5750;&#x6807;</p>
</li>
<li>
<p>&#x7F16;&#x5199;MyBatis&#x6838;&#x5FC3;&#x914D;&#x7F6E;&#x6587;&#x4EF6; --&gt; &#x66FF;&#x6362;&#x8FDE;&#x63A5;&#x4FE1;&#x606F;&#xFF0C;&#x89E3;&#x51B3;&#x786C;&#x7F16;&#x7801;&#x95EE;&#x9898;</p>
</li>
<li>
<p>&#x7F16;&#x5199;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6; --&gt; &#x7EDF;&#x4E00;&#x7BA1;&#x7406;sql&#x8BED;&#x53E5;&#xFF0C;&#x89E3;&#x51B3;&#x786C;&#x7F16;&#x7801;&#x95EE;&#x9898;</p>
</li>
<li>
<p>&#x7F16;&#x7801;</p>
<pre><code class="language-java">// 1. &#x5B9A;&#x4E49;POJO&#x7C7B;
public class User{}
// 2. &#x52A0;&#x8F7D;&#x6838;&#x5FC3;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF0C;&#x83B7;&#x53D6;SqlSeesionFactory&#x5BF9;&#x8C61;
String resource = &quot;mybatis-config.xml&quot;;
InputStream in = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3. &#x83B7;&#x53D6;SqlSession&#x5BF9;&#x8C61;&#xFF0C;&#x6267;&#x884C;SQL&#x8BED;&#x53E5;
SqlSession session = factory.openSession();
List&lt;User&gt; users = session.selectList(&quot;test.selectAll&quot;);
// 4. &#x91CA;&#x653E;&#x8D44;&#x6E90;
</code></pre>
</li>
</ol>
<h4 id="21-%E8%A7%A3%E5%86%B3sql%E6%98%A0%E5%B0%84%E6%96%87%E4%BB%B6%E7%9A%84%E8%AD%A6%E5%91%8A%E6%8F%90%E7%A4%BA">2.1 &#x89E3;&#x51B3;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x7684;&#x8B66;&#x544A;&#x63D0;&#x793A;</h4>
<ul>
<li>&#x4EA7;&#x751F;&#x539F;&#x56E0;&#xFF1A;Idea&#x548C;&#x6570;&#x636E;&#x5E93;&#x6CA1;&#x6709;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#xFF0C;&#x4E0D;&#x8BC6;&#x522B;&#x8868;&#x4FE1;&#x606F;</li>
<li>&#x89E3;&#x51B3;&#x65B9;&#x5F0F;&#xFF1A;&#x5728;Idea&#x4E2D;&#x914D;&#x7F6E;MySQL&#x6570;&#x636E;&#x5E93;&#x8FDE;&#x63A5;</li>
</ul>
<h3 id="3-mapper%E4%BB%A3%E7%90%86%E5%BC%80%E5%8F%91">3. Mapper&#x4EE3;&#x7406;&#x5F00;&#x53D1;</h3>
<ul>
<li>&#x89E3;&#x51B3;&#x539F;&#x751F;&#x65B9;&#x5F0F;&#x4E2D;&#x7684;&#x786C;&#x7F16;&#x7801;</li>
<li>&#x7B80;&#x5316;&#x540E;&#x671F;&#x6267;&#x884C;SQL</li>
</ul>
<pre><code class="language-java">// 3. &#x83B7;&#x53D6;&#x63A5;&#x53E3;&#x4EE3;&#x7406;&#x5BF9;&#x8C61;
UserMppaer userMapper = sqlSession.getMapper(userMapper.class);
// 4. &#x6267;&#x884C;&#x65B9;&#x6CD5;&#xFF0C;&#x5176;&#x5B9E;&#x5C31;&#x662F;&#x6267;&#x884C;sql&#x8BED;&#x53E5;
List&lt;User&gt; users = userMapper.selectAll();
</code></pre>
<h4 id="31-%E5%85%A5%E9%97%A8%E6%A1%88%E4%BE%8B">3.1 &#x5165;&#x95E8;&#x6848;&#x4F8B;</h4>
<ol>
<li>&#x5B9A;&#x4E49;&#x4E0E;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x540C;&#x540D;&#x7684;Mapper&#x63A5;&#x53E3;&#xFF0C;&#x5E76;&#x4E14;&#x5C06;Mapper&#x63A5;&#x53E3;&#x4E0E;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x653E;&#x7F6E;&#x540C;&#x4E00;&#x76EE;&#x5F55;&#x4E0B;</li>
<li>&#x8BBE;&#x7F6E;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x7684;namespace&#x5C5E;&#x6027;&#x4E3A;Mapper&#x63A5;&#x53E3;&#x5168;&#x9650;&#x5B9A;&#x540D;</li>
<li>&#x5728;Mapper&#x63A5;&#x53E3;&#x4E2D;&#x5B9A;&#x4E49;&#x65B9;&#x6CD5;&#xFF0C;&#x65B9;&#x6CD5;&#x540D;&#x5C31;&#x662F;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x4E2D;sql&#x8BED;&#x53E5;&#x7684;id&#xFF0C;&#x5E76;&#x4FDD;&#x6301;&#x53C2;&#x6570;&#x7C7B;&#x578B;&#x548C;&#x8FD4;&#x56DE;&#x503C;&#x7C7B;&#x578B;&#x4E00;&#x81F4;</li>
<li>&#x7F16;&#x7801;
<ol>
<li>&#x901A;&#x8FC7;SqlSession&#x7684;getMapper()&#x65B9;&#x6CD5;&#x83B7;&#x53D6;Mapper&#x63A5;&#x53E3;&#x7684;&#x4EE3;&#x7406;&#x5BF9;&#x8C61;</li>
<li>&#x8C03;&#x7528;&#x5BF9;&#x5E94;&#x65B9;&#x6CD5;&#x5B8C;&#x6210;sql&#x6267;&#x884C;</li>
</ol>
</li>
</ol>
<p>&#x7EC6;&#x8282;&#xFF1A;&#x5982;&#x679C;Mapper&#x63A5;&#x53E3;&#x540D;&#x79F0;&#x4E0E;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x540D;&#x79F0;&#x76F8;&#x540C;&#xFF0C;&#x5E76;&#x5728;&#x540C;&#x4E00;&#x76EE;&#x5F55;&#x4E0B;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5305;&#x626B;&#x63CF;&#x7684;&#x65B9;&#x5F0F;&#x7B80;&#x5316;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;&#x7684;&#x52A0;&#x8F7D;&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/36b8ab54b3e2537a.png" alt="MyBatis" loading="lazy"></p>
<h3 id="4-mybatis%E6%A0%B8%E5%BF%83%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6">4. MyBatis&#x6838;&#x5FC3;&#x914D;&#x7F6E;&#x6587;&#x4EF6;</h3>
<p><a href="https://mybatis.org/mybatis-3/zh/index.html">https://mybatis.org/mybatis-3/zh/index.html</a></p>
<ul>
<li>configuration&#xFF08;&#x914D;&#x7F6E;&#xFF09;
<ul>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#properties">properties&#xFF08;&#x5C5E;&#x6027;&#xFF09;</a></li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#settings">settings&#xFF08;&#x8BBE;&#x7F6E;&#xFF09;</a></li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#typeAliases">typeAliases&#xFF08;&#x7C7B;&#x578B;&#x522B;&#x540D;&#xFF09;</a></li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers">typeHandlers&#xFF08;&#x7C7B;&#x578B;&#x5904;&#x7406;&#x5668;&#xFF09;</a></li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#objectFactory">objectFactory&#xFF08;&#x5BF9;&#x8C61;&#x5DE5;&#x5382;&#xFF09;</a></li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#plugins">plugins&#xFF08;&#x63D2;&#x4EF6;&#xFF09;</a></li>
<li>environments&#xFF08;&#x73AF;&#x5883;&#x914D;&#x7F6E;&#xFF09;
<ul>
<li>environment&#xFF08;&#x73AF;&#x5883;&#x53D8;&#x91CF;&#xFF09;
<ul>
<li>transactionManager&#xFF08;&#x4E8B;&#x52A1;&#x7BA1;&#x7406;&#x5668;&#xFF09;</li>
<li>dataSource&#xFF08;&#x6570;&#x636E;&#x6E90;&#xFF09;</li>
</ul>
</li>
</ul>
</li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#databaseIdProvider">databaseIdProvider&#xFF08;&#x6570;&#x636E;&#x5E93;&#x5382;&#x5546;&#x6807;&#x8BC6;&#xFF09;</a></li>
<li><a href="https://mybatis.org/mybatis-3/zh/configuration.html#mappers">mappers&#xFF08;&#x6620;&#x5C04;&#x5668;&#xFF09;</a></li>
</ul>
</li>
</ul>
<p>&#x7EC6;&#x8282;&#xFF1A;&#x6CE8;&#x610F;&#x9075;&#x5B88;&#x5404;&#x4E2A;&#x6807;&#x7B7E;&#x7684;&#x524D;&#x540E;&#x987A;&#x5E8F;</p>
<h3 id="5-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%AE%8C%E6%88%90%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5">5. &#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x5B8C;&#x6210;&#x589E;&#x5220;&#x6539;&#x67E5;</h3>
<ol>
<li>&#x7F16;&#x5199;&#x63A5;&#x53E3;&#x65B9;&#x6CD5;&#xFF1A;Mapper&#x63A5;&#x53E3;</li>
<li>&#x7F16;&#x5199;SQL&#x8BED;&#x53E5;&#xFF1A;SQL&#x6620;&#x5C04;&#x6587;&#x4EF6;</li>
<li>&#x6267;&#x884C;&#x65B9;&#x6CD5;&#xFF0C;&#x6D4B;&#x8BD5;</li>
</ol>
<p>&#x6570;&#x636E;&#x5E93;&#x7684;&#x5B57;&#x6BB5;&#x540D;&#x79F0;&#x548C;&#x5B9E;&#x4F53;&#x7C7B;&#x7684;&#x5C5E;&#x6027;&#x540D;&#x79F0;&#x4E0D;&#x4E00;&#x6837;&#x5BFC;&#x81F4;&#x4E0D;&#x80FD;&#x81EA;&#x52A8;&#x5C01;&#x88C5;&#xFF1A;</p>
<ol>
<li>
<p>&#x8D77;&#x522B;&#x540D;&#xFF1A;&#x5BF9;&#x4E0D;&#x4E00;&#x6837;&#x7684;&#x5217;&#x540D;&#x8D77;&#x522B;&#x540D;&#xFF0C;&#x8BA9;&#x522B;&#x540D;&#x548C;&#x5B9E;&#x4F53;&#x7C7B;&#x7684;&#x5C5E;&#x6027;&#x540D;&#x4E00;&#x6837;&#x3002;</p>
<ul>
<li>
<p>&#x7F3A;&#x70B9;&#xFF1A;&#x6BCF;&#x6B21;&#x67E5;&#x8BE2;&#x90FD;&#x8981;&#x5B9A;&#x4E49;&#x4E00;&#x6B21;&#x522B;&#x540D;</p>
</li>
<li>
<p>&#x89E3;&#x51B3;&#xFF1A;sql&#x7247;&#x6BB5;brand_column</p>
<pre><code>&lt;sql id=&quot;xxx&quot;&gt;
id, brand_name as bradName
&lt;/sql&gt;
</code></pre>
</li>
</ul>
</li>
<li>
<p>resultMap&#xFF1A;</p>
<pre><code>&lt;!--id&#xFF1A;&#x552F;&#x4E00;&#x6807;&#x8BC6;&#xFF1B;type&#xFF1A;&#x6620;&#x5C04;&#x7C7B;&#x578B;&#xFF0C;&#x652F;&#x6301;&#x522B;&#x540D;--&gt;
&lt;resultMap id=&quot;xxxResultMap&quot; type=&quot;xxx&quot;&gt;
	&lt;!--id&#xFF1A;&#x4E3B;&#x952E;&#x6620;&#x5C04;&#xFF1B;result&#xFF1A;&#x4E00;&#x822C;&#x81EA;&#x52A8;&#x6620;&#x5C04;&#xFF1B;cilumn&#x8868;&#x7684;&#x5217;&#x540D;&#xFF0C;property&#x5B9E;&#x4F53;&#x7C7B;&#x7684;&#x5C5E;&#x6027;&#x540D;--&gt;
	&lt;result column=&quot;xxx_xxx&quot; property=&quot;xxxXxx&quot;/&gt;
&lt;/resultMap&gt;
</code></pre>
</li>
</ol>
<h4 id="51-%E5%8F%82%E6%95%B0%E5%8D%A0%E4%BD%8D%E7%AC%A6">5.1 &#x53C2;&#x6570;&#x5360;&#x4F4D;&#x7B26;</h4>
<ol>
<li>
<h1 id="%EF%BC%9A%E4%BC%9A%E5%B0%86%E5%85%B6%E6%9B%BF%E6%8D%A2%E4%B8%BA%EF%BC%9F%EF%BC%8C%E9%98%B2%E6%AD%A2sql%E6%B3%A8%E5%85%A5">{}&#xFF1A;&#x4F1A;&#x5C06;&#x5176;&#x66FF;&#x6362;&#x4E3A;&#xFF1F;&#xFF0C;&#x9632;&#x6B62;SQL&#x6CE8;&#x5165;</h1>
</li>
<li>${}&#xFF1A;&#x62FC;sql&#xFF0C;&#x5B58;&#x5728;SQL&#x8BF8;&#x5982;&#x95EE;&#x9898;</li>
<li>&#x4F7F;&#x7528;&#x65F6;&#x673A;&#xFF1A;
<ul>
<li>&#x53C2;&#x6570;&#x4F20;&#x9012;&#x65F6;&#xFF1A;#{}</li>
<li>&#x8868;&#x540D;&#x6216;&#x5217;&#x540D;&#x4E0D;&#x56FA;&#x5B9A;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF1A;${}</li>
</ul>
</li>
</ol>
<h4 id="52-%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%EF%BC%9Aparametertype%EF%BC%88%E5%8F%AF%E7%9C%81%E7%95%A5%EF%BC%89">5.2 &#x53C2;&#x6570;&#x7C7B;&#x578B;&#xFF1A;parameterType&#xFF08;&#x53EF;&#x7701;&#x7565;&#xFF09;</h4>
<p>SQL&#x8BED;&#x53E5;&#x8BBE;&#x7F6E;&#x591A;&#x4E2A;&#x53C2;&#x6570;&#x7684;&#x51E0;&#x79CD;&#x65B9;&#x5F0F;&#xFF1F;</p>
<ol>
<li>&#x6563;&#x88C5;&#x53C2;&#x6570;&#xFF1A;&#x9700;&#x8981;&#x4F7F;&#x7528;@Param(&quot;SQL&#x4E2D;&#x53C2;&#x6570;&#x5360;&#x4F4D;&#x7B26;&#x540D;&#x79F0;&quot;)</li>
<li>&#x5B9E;&#x4F53;&#x7C7B;&#x5C01;&#x88C5;&#x53C2;&#x6570;&#xFF1A;&#x53EA;&#x9700;&#x8981;&#x4FDD;&#x8BC1;SQL&#x4E2D;&#x53C2;&#x6570;&#x540D;&#x4E0E;&#x5B9E;&#x4F53;&#x7C7B;&#x5C5E;&#x6027;&#x540D;&#x5BF9;&#x5E94;&#x4E0A;</li>
<li>map&#x96C6;&#x5408;&#xFF1A;&#x53EA;&#x9700;&#x8981;&#x4FDD;&#x8BC1;SQL&#x4E2D;&#x53C2;&#x6570;&#x540D;&#x548C;map&#x96C6;&#x5408;&#x7684;&#x952E;&#x7684;&#x540D;&#x79F0;&#x5BF9;&#x5E94;&#x4E0A;</li>
</ol>
<h4 id="53-%E6%9F%A5%E8%AF%A2%E5%8A%A8%E6%80%81%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2">5.3 &#x67E5;&#x8BE2; - &#x52A8;&#x6001;&#x6761;&#x4EF6;&#x67E5;&#x8BE2;</h4>
<p>SQL&#x8BED;&#x53E5;&#x4F1A;&#x968F;&#x7740;&#x7528;&#x6237;&#x8F93;&#x5165;&#x6216;&#x5916;&#x90E8;&#x6761;&#x4EF6;&#x53D8;&#x5316;&#x800C;&#x53D8;&#x5316;&#x3002;</p>
<ul>
<li>if &#x7528;&#x4E8E;&#x5224;&#x65AD;&#x53C2;&#x6570;&#x662F;&#x5426;&#x6709;&#x503C;&#xFF0C;&#x4F7F;&#x7528;test&#x5C5E;&#x6027;&#x8FDB;&#x884C;&#x6761;&#x4EF6;&#x5224;&#x65AD;
<ul>
<li>&#x95EE;&#x9898;&#xFF1A;&#x7B2C;&#x4E00;&#x4E2A;&#x6761;&#x4EF6;&#x4E0D;&#x9700;&#x8981;&#x903B;&#x8F91;&#x8FD0;&#x7B97;&#x7B26; and/or</li>
<li>&#x6052;&#x7B49;&#x5F0F;</li>
<li><where> &#x66FF;&#x6362;where&#x5173;&#x952E;&#x5B57;</where></li>
</ul>
</li>
<li>choose(when ptherwise)</li>
<li>trim(where set)</li>
<li>foreach</li>
</ul>
<h4 id="54-%E6%B7%BB%E5%8A%A0%E4%B8%BB%E9%94%AE%E8%BF%94%E5%9B%9E">5.4 &#x6DFB;&#x52A0; - &#x4E3B;&#x952E;&#x8FD4;&#x56DE;</h4>
<p>&#x6570;&#x636E;&#x6DFB;&#x52A0;&#x6210;&#x529F;&#x540E;&#xFF0C;&#x9700;&#x8981;&#x83B7;&#x53D6;&#x63D2;&#x5165;&#x6570;&#x636E;&#x5E93;&#x6570;&#x636E;&#x7684;&#x4E3B;&#x952E;&#x7684;&#x503C;</p>
<pre><code class="language-xml">&lt;insert useGeneratedKeys=&quot;true&quot; keyProperty=&quot;id&quot;&gt;
&lt;/insert&gt;
</code></pre>
<h4 id="55-%E4%BF%AE%E6%94%B9%E5%8A%A8%E6%80%81%E5%AD%97%E6%AE%B5%E4%BF%AE%E6%94%B9">5.5 &#x4FEE;&#x6539; - &#x52A8;&#x6001;&#x5B57;&#x6BB5;&#x4FEE;&#x6539;</h4>
<pre><code class="language-xml">&lt;update id=&quot;update&quot;&gt;
    update xx from xx
	&lt;set&gt;
        &lt;if test=&quot;name!=null and name!=&apos;&apos;&quot;&gt;
            name = #{name}
        &lt;/if&gt;
	&lt;/set&gt;
&lt;/update&gt;
</code></pre>
<h4 id="56-%E5%88%A0%E9%99%A4%E6%89%B9%E9%87%8F%E5%88%A0%E9%99%A4">5.6 &#x5220;&#x9664; - &#x6279;&#x91CF;&#x5220;&#x9664;</h4>
<pre><code class="language-xml">&lt;!--mybtis&#x4F1A;&#x5C06;&#x6570;&#x7EC4;&#x53C2;&#x6570;&#x5C01;&#x88C5;&#x4E3A;&#x4E00;&#x4E2A;Map&#x96C6;&#x5408;&#xFF0C;&#x9ED8;&#x8BA4;&#xFF1A;array=&#x6570;&#x7EC4;&#xFF1B;&#x4F7F;&#x7528;@Param&#x6CE8;&#x89E3;&#x6539;&#x53D8;map&#x96C6;&#x5408;&#x7684;&#x9ED8;&#x8BA4;key&#x540D;&#x79F0;--&gt;
&lt;delete id=&quot;deleteByIds&quot;&gt;
    delete from xx
    where id in
    &lt;foreach collection=&quot;ids&quot; item=&quot;id&quot; separator=&quot;,&quot; open=&quot;(&quot; close=&quot;)&quot;&gt;
        #{id}
    &lt;/foreach&gt;
&lt;/delete&gt;
</code></pre>
<h4 id="57-mybatis%E4%BA%8B%E5%8A%A1">5.7 MyBatis&#x4E8B;&#x52A1;</h4>
<ul>
<li>openSession()&#xFF1A;&#x9ED8;&#x8BA4;&#x5F00;&#x542F;&#x4E8B;&#x52A1;&#xFF0C;&#x8FDB;&#x884C;&#x589E;&#x5220;&#x6539;&#x7684;&#x64CD;&#x4F5C;&#x540E;&#x4F7F;&#x7528;sqlSession.commite()&#x624B;&#x52A8;&#x63D0;&#x4EA4;&#x4E8B;&#x52A1;</li>
<li>openSession(true)&#xFF1A;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x4E3A;&#x81EA;&#x52A8;&#x63D0;&#x4EA4;&#x4E8B;&#x52A1;&#xFF08;&#x5173;&#x95ED;&#x4E8B;&#x52A1;&#xFF09;</li>
</ul>
<h4 id="58-%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6%E5%A4%84%E7%90%86%EF%BC%9A">5.8 &#x7279;&#x6B8A;&#x5B57;&#x7B26;&#x5904;&#x7406;&#xFF1A;</h4>
<ol>
<li>&#x8F6C;&#x4E49;&#x5B57;&#x7B26; &amp;lt</li>
<li>CDATA&#x533A; &lt;![CDATA[ &#x5185;&#x5BB9; ]]</li>
</ol>
<h4 id="59-%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92">5.9 &#x53C2;&#x6570;&#x4F20;&#x9012;</h4>
<p>MyBatis&#x63A5;&#x53E3;&#x65B9;&#x6CD5;&#x4E2D;&#x53EF;&#x4EE5;&#x63A5;&#x6536;&#x5404;&#x79CD;&#x5404;&#x6837;&#x7684;&#x53C2;&#x6570;&#xFF0C;MyBatis&#x5E95;&#x5C42;&#x4F1A;&#x5BF9;&#x8FD9;&#x4E9B;&#x53C2;&#x6570;&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x5C01;&#x88C5;&#x5904;&#x7406;&#x65B9;&#x5F0F;</p>
<p><strong>&#x5355;&#x4E2A;&#x53C2;&#x6570;</strong>&#xFF1A;</p>
<ol>
<li>
<p>POJO&#x7C7B;&#x578B;&#xFF1A;&#x76F4;&#x63A5;&#x4F7F;&#x7528;&#xFF0C;&#x5C5E;&#x6027;&#x540D;&#x548C;&#x53C2;&#x6570;&#x5360;&#x4F4D;&#x7B26;&#x540D;&#x79F0;&#x4E00;&#x81F4;</p>
</li>
<li>
<p>Map&#x96C6;&#x5408;&#xFF1A;&#x76F4;&#x63A5;&#x4F7F;&#x7528;&#xFF0C;&#x5C5E;&#x6027;&#x540D;&#x548C;&#x53C2;&#x6570;&#x5360;&#x4F4D;&#x7B26;&#x540D;&#x79F0;&#x4E00;&#x81F4;</p>
</li>
<li>
<p>Collection&#xFF1A;&#x5C01;&#x88C5;&#x4E3A;Map&#x96C6;&#x5408;</p>
<pre><code class="language-java">map.put(&quot;agr0&quot;, collection&#x96C6;&#x5408;);
map.put(&quot;collection&quot;,colection&#x96C6;&#x5408;);
</code></pre>
</li>
<li>
<p>List&#xFF1A;&#x5C01;&#x88C5;&#x4E3A;Map&#x96C6;&#x5408;</p>
<pre><code class="language-java">map.put(&quot;agr0&quot;,list&#x96C6;&#x5408;);
map.put(&quot;collection&quot;,list&#x96C6;&#x5408;);
map.put(&quot;list&quot;,list&#x96C6;&#x5408;);
</code></pre>
</li>
<li>
<p>Array&#xFF1A;&#x5C01;&#x88C5;&#x4E3A;Map&#x96C6;&#x5408;</p>
<pre><code class="language-java">map.put(&quot;agr0&quot;,&#x6570;&#x7EC4;);
map.put(&quot;collection&quot;,&#x6570;&#x7EC4;);
map.put(&quot;list&quot;,&#x6570;&#x7EC4;);
</code></pre>
</li>
<li>
<p>&#x5176;&#x4ED6;&#x7C7B;&#x578B;&#xFF1A;&#x76F4;&#x63A5;&#x4F7F;&#x7528;</p>
</li>
</ol>
<p><strong>&#x591A;&#x4E2A;&#x53C2;&#x6570;</strong>&#xFF1A;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;@Param&#x6CE8;&#x89E3;&#x66FF;&#x6362;Map&#x96C6;&#x5408;&#x4E2D;arg&#x952E;&#x540D;</p>
<pre><code class="language-java">map.put(&quot;arg0&quot;&#xFF0C;&#x53C2;&#x6570;1);
map.put(&quot;param1&quot;&#xFF0C;&#x53C2;&#x6570;1);
map.put(&quot;param2&quot;&#xFF0C;&#x53C2;&#x6570;2);
map.put(&quot;arg1&quot;&#xFF0C;&#x53C2;&#x6570;2);
</code></pre>
<p><strong>MyBatis&#x63D0;&#x4F9B;&#x4E86;ParamNameResolveer&#x7C7B;&#x8FDB;&#x884C;&#x53C2;&#x6570;&#x5C01;&#x88C5;</strong></p>
<p><strong>&#x5EFA;&#x8BAE;&#xFF1A;&#x4F7F;&#x7528;@Param&#x6CE8;&#x89E3;&#x66FF;&#x6362;Map&#x96C6;&#x5408;&#x4E2D;arg&#x952E;&#x540D;&#xFF0C;&#x5E76;&#x7528;&#x4FEE;&#x6539;&#x540E;&#x7684;&#x540D;&#x79F0;&#x83B7;&#x53D6;&#x503C;</strong></p>
<h3 id="6-%E6%B3%A8%E8%A7%A3%E5%AE%8C%E6%88%90%E5%A2%9E%E5%88%A0%E6%94%B9%E6%9F%A5">6. &#x6CE8;&#x89E3;&#x5B8C;&#x6210;&#x589E;&#x5220;&#x6539;&#x67E5;</h3>
<p>&#x6CE8;&#x89E3;&#x5B8C;&#x6210;&#x7B80;&#x5355;&#x529F;&#x80FD;&#xFF0C;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x5B8C;&#x6210;&#x590D;&#x6742;&#x529F;&#x80FD;</p>
<pre><code class="language-java">@Select(&quot;select * from tb_user where id=#{id}&quot;)
public User selectById(int id);
</code></pre>
<ul>
<li>&#x67E5;&#x8BE2;&#xFF1A;@Select</li>
<li>&#x6DFB;&#x52A0;&#xFF1A;@Insert</li>
<li>&#x4FEE;&#x6539;&#xFF1A;@Update</li>
<li>&#x5220;&#x9664;&#xFF1A;@Delete</li>
</ul>
<h3 id="7-%E5%8A%A8%E6%80%81sql">7. &#x52A8;&#x6001;SQL</h3>
<p>&#x89C1;&#x7B2C;&#x4E94;&#x7AE0;&#x8282;CRUD&#x52A8;&#x6001;&#x8BED;&#x53E5;&#x5185;&#x5BB9;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[JVM——Java虚拟机]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="1-%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84">1. &#x5185;&#x5B58;&#x7ED3;&#x6784;</h2>
<h3 id="11-%E7%A8%8B%E5%BA%8F%E8%AE%A1%E6%95%B0%E5%99%A8">1.1 &#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;</h3>
<p>&#x5B9A;&#x4E49;&#xFF1A;Program Counter Register&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;&#xFF08;&#x5BC4;&#x5B58;&#x5668;&#xFF09;<br>
&#x4F5C;&#x7528;&#xFF1A;&#x8BB0;&#x4F4F;&#x4E0B;&#x4E00;&#x6761;JVM&#x6307;&#x4EE4;&#x7684;&#x6267;&#x884C;&#x5730;&#x5740;<br>
&#x7279;&#x70B9;&#xFF1A;&#x7EBF;&#x7A0B;&#x79C1;</p>]]></description><link>https://www.tangkun.site/javaxu-ni-ji-xue-xi-jvm/</link><guid isPermaLink="false">63fdc62cd9ccf409d265de9d</guid><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Tue, 28 Feb 2023 09:31:58 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/10939f4c9b7836b5.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="1-%E5%86%85%E5%AD%98%E7%BB%93%E6%9E%84">1. &#x5185;&#x5B58;&#x7ED3;&#x6784;</h2>
<h3 id="11-%E7%A8%8B%E5%BA%8F%E8%AE%A1%E6%95%B0%E5%99%A8">1.1 &#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;</h3>
<img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/10939f4c9b7836b5.png" alt="JVM&#x2014;&#x2014;Java&#x865A;&#x62DF;&#x673A;"><p>&#x5B9A;&#x4E49;&#xFF1A;Program Counter Register&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;&#xFF08;&#x5BC4;&#x5B58;&#x5668;&#xFF09;<br>
&#x4F5C;&#x7528;&#xFF1A;&#x8BB0;&#x4F4F;&#x4E0B;&#x4E00;&#x6761;JVM&#x6307;&#x4EE4;&#x7684;&#x6267;&#x884C;&#x5730;&#x5740;<br>
&#x7279;&#x70B9;&#xFF1A;&#x7EBF;&#x7A0B;&#x79C1;&#x6709;&#xFF1B;&#x4E0D;&#x4F1A;&#x5185;&#x5B58;&#x6EA2;&#x51FA;&#x3002;</p>
<h3 id="12-%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%A0%88">1.2 &#x865A;&#x62DF;&#x673A;&#x6808;</h3>
<p>Java Virtual Machines Stacks&#xFF08;Java&#x865A;&#x62DF;&#x673A;&#x6808;&#xFF09;</p>
<ul>
<li>&#x6808;-&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x9700;&#x8981;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF0C;&#x6BCF;&#x4E2A;&#x6808;&#x7531;&#x591A;&#x4E2A;&#x6808;&#x5E27;&#xFF08;Frame&#xFF09;&#x7EC4;&#x6210;</li>
<li>&#x6808;&#x5E27;-&#x6BCF;&#x4E2A;&#x65B9;&#x6CD5;&#x8FD0;&#x884C;&#x65F6;&#x9700;&#x8981;&#x7684;&#x5185;&#x5B58;</li>
<li>&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;&#x6D3B;&#x52A8;&#x6808;&#x5E27;&#xFF0C;&#x5BF9;&#x5E94;&#x5F53;&#x524D;&#x6B63;&#x5728;&#x6267;&#x884C;&#x7684;&#x90A3;&#x4E2A;&#x65B9;&#x6CD5;</li>
</ul>
<p>&#x95EE;&#x9898;&#x8FA8;&#x6790;&#xFF1A;</p>
<ol>
<li>&#x5783;&#x573E;&#x56DE;&#x6536;&#x662F;&#x5426;&#x6D89;&#x53CA;&#x6808;&#x5185;&#x5B58;&#xFF1F;&#x4E0D;&#x9700;&#x8981;&#xFF0C;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x7ED3;&#x675F;&#x5C31;&#x4F1A;&#x5F39;&#x51FA;&#x6808;</li>
<li>&#x6808;&#x5185;&#x5B58;&#x5206;&#x914D;&#x8D8A;&#x5927;&#x8D8A;&#x597D;&#x5417;&#xFF1F;-Xss size&#x8BBE;&#x7F6E;&#x6808;&#x5185;&#x5B58;&#x3002;&#x7269;&#x7406;&#x5185;&#x5B58;&#x4E00;&#x5B9A;&#xFF0C;&#x6808;&#x5185;&#x5B58;&#x8D8A;&#x5927;&#xFF0C;&#x7EBF;&#x7A0B;&#x6570;&#x8D8A;&#x5C11;&#x3002;</li>
<li>&#x65B9;&#x6CD5;&#x5185;&#x7684;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x662F;&#x5426;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF1F;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x5B89;&#x5168;&#xFF0C;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x672A;&#x5FC5;&#x3002;</li>
</ol>
<h4 id="121-%E6%A0%88%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BAstackoverflow">1.2.1 &#x6808;&#x5185;&#x5B58;&#x6EA2;&#x51FA;StackOverFlow</h4>
<ul>
<li>&#x6808;&#x5E27;&#x8FC7;&#x591A;&#x5BFC;&#x81F4;&#x6808;&#x5185;&#x5B58;&#x6EA2;&#x51FA;</li>
<li>&#x6808;&#x5E27;&#x8FC7;&#x5927;&#x5BFC;&#x81F4;&#x6808;&#x5185;&#x5B58;&#x6EA2;&#x51FA;</li>
</ul>
<h4 id="122-%E7%BA%BF%E7%A8%8B%E8%BF%90%E8%A1%8C%E8%AF%8A%E6%96%AD">1.2.2 &#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x8BCA;&#x65AD;</h4>
<p>cpu&#x5360;&#x7528;&#x8FC7;&#x591A;</p>
<ul>
<li>&#x7528;top&#x5B9A;&#x4F4D;&#x54EA;&#x4E2A;&#x8FDB;&#x7A0B;&#x5806;cpu&#x5360;&#x7528;&#x9AD8;</li>
<li>
<pre><code class="language-linux">ps H -ef pid,tid,%cpu | grep &#x8FDB;&#x7A0B;id&#xFF08;&#x7528;ps&#x547D;&#x4EE4;&#x8FDB;&#x4E00;&#x6B65;&#x5B9A;&#x4F4D;&#x54EA;&#x4E2A;&#x7EBF;&#x7A0B;&#x5F15;&#x8D77;cpu&#x5360;&#x7528;&#x8FC7;&#x9AD8;&#xFF09;
</code></pre>
</li>
<li>jstack &#x8FDB;&#x7A0B;id &#x53EF;&#x4EE5;&#x6839;&#x636E;&#x7EBF;&#x7A0B;id&#x627E;&#x5230;&#x6709;&#x95EE;&#x9898;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x8FDB;&#x4E00;&#x6B65;&#x5B9A;&#x4F4D;&#x95EE;&#x9898;&#x4EE3;&#x7801;&#x7684;&#x6E90;&#x7801;&#x884C;&#x53F7;</li>
</ul>
<p>&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x5F88;&#x957F;&#x65F6;&#x95F4;&#x6CA1;&#x6709;&#x7ED3;&#x679C;</p>
<h3 id="13-%E6%9C%AC%E5%9C%B0%E6%96%B9%E6%B3%95%E6%A0%88">1.3 &#x672C;&#x5730;&#x65B9;&#x6CD5;&#x6808;</h3>
<p>Native Method Stacks&#x672C;&#x5730;&#x65B9;&#x6CD5;&#x6808;</p>
<h3 id="14-%E5%A0%86">1.4 &#x5806;</h3>
<h4 id="141-heap%E5%A0%86">1.4.1 Heap&#x5806;</h4>
<p>&#x901A;&#x8FC7;new&#x5173;&#x952E;&#x5B57;&#xFF0C;&#x521B;&#x5EFA;&#x5BF9;&#x8C61;&#x90FD;&#x4F1A;&#x4F7F;&#x7528;&#x5806;&#x5185;&#x5B58;<br>
&#x7279;&#x70B9;</p>
<ul>
<li>&#x7EBF;&#x7A0B;&#x5171;&#x4EAB;&#xFF0C;&#x5806;&#x4E2D;&#x5BF9;&#x8C61;&#x90FD;&#x9700;&#x8981;&#x8003;&#x8651;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x95EE;&#x9898;</li>
<li>&#x6709;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;</li>
</ul>
<h4 id="142-%E5%A0%86%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA">1.4.2 &#x5806;&#x5185;&#x5B58;&#x6EA2;&#x51FA;</h4>
<h4 id="143-%E5%A0%86%E5%86%85%E5%AD%98%E8%AF%8A%E6%96%AD">1.4.3 &#x5806;&#x5185;&#x5B58;&#x8BCA;&#x65AD;</h4>
<ol>
<li>jps&#x5DE5;&#x5177;
<ul>
<li>&#x67E5;&#x770B;&#x5F53;&#x524D;&#x7CFB;&#x7EDF;&#x4E2D;&#x6709;&#x54EA;&#x4E9B;java&#x8FDB;&#x7A0B;</li>
</ul>
</li>
<li>jmap&#x5DE5;&#x5177;
<ul>
<li>&#x67E5;&#x770B;&#x5806;&#x5185;&#x5B58;&#x5360;&#x7528;&#x60C5;&#x51B5;</li>
</ul>
</li>
<li>jconsole&#x5DE5;&#x5177;
<ul>
<li>&#x56FE;&#x5F62;&#x754C;&#x9762;&#x7684;&#xFF0C;&#x591A;&#x529F;&#x80FD;&#x7684;&#x68C0;&#x6D4B;&#x5DE5;&#x5177;&#xFF0C;&#x53EF;&#x4EE5;&#x8FDE;&#x7EED;&#x76D1;&#x6D4B;</li>
</ul>
</li>
<li>jvisualvm&#x5DE5;&#x5177;</li>
</ol>
<h3 id="15-%E6%96%B9%E6%B3%95%E5%8C%BA">1.5 &#x65B9;&#x6CD5;&#x533A;</h3>
<h4 id="151-meathod-area%E6%96%B9%E6%B3%95%E5%8C%BA%E5%AE%9A%E4%B9%89%EF%BC%9A">1.5.1 Meathod Area&#x65B9;&#x6CD5;&#x533A;&#x5B9A;&#x4E49;&#xFF1A;</h4>
<ul>
<li>&#x7EBF;&#x7A0B;&#x5171;&#x4EAB;</li>
<li>JVM&#x542F;&#x52A8;&#x65F6;&#x521B;&#x5EFA;&#xFF0C;&#x903B;&#x8F91;&#x4E0A;&#x662F;&#x5806;&#x7684;&#x4E00;&#x90E8;&#x5206;</li>
<li>&#x5B58;&#x50A8;&#x7C7B;&#x76F8;&#x5173;&#x7ED3;&#x6784;&#xFF0C;&#x5982;&#x8FD0;&#x884C;&#x65F6;&#x5E38;&#x91CF;&#x6C60;&#x3001;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x3001;&#x65B9;&#x6CD5;&#x6570;&#x636E;&#x3001;&#x6210;&#x5458;&amp;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x3001;&#x7279;&#x6B8A;&#x65B9;&#x6CD5;&#xFF08;&#x7C7B;&#x6784;&#x9020;&#x5668;&#xFF09;</li>
</ul>
<h4 id="152-%E6%96%B9%E6%B3%95%E5%8C%BA%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA">1.5.2 &#x65B9;&#x6CD5;&#x533A;&#x5185;&#x5B58;&#x6EA2;&#x51FA;</h4>
<p>1.8&#x4EE5;&#x524D;&#x7684;&#x6C38;&#x4E45;&#x4EE3;&#x5185;&#x5B58;&#x6EA2;&#x51FA;</p>
<pre><code class="language-java">&#x6F14;&#x793A;&#x6C38;&#x4E45;&#x4EE3;&#x5185;&#x5B58;&#x6EA2;&#x51FA; java.lang.OutOfMemoryError:PermGen space
-XX:MaxPermSize-8m
</code></pre>
<p>1.8&#x4EE5;&#x540E;&#x7684;&#x5143;&#x7A7A;&#x95F4;&#x5185;&#x5B58;&#x6EA2;&#x51FA;</p>
<pre><code class="language-java">&#x6F14;&#x793A;&#x5143;&#x7A7A;&#x95F4;&#x5185;&#x5B58;&#x6EA2;&#x51FA; java.lang.OutOfMemoryError:Metaspace space
-XX:MaxMetaspaceSize-m
</code></pre>
<h4 id="153-%E8%BF%90%E8%A1%8C%E6%97%B6%E5%B8%B8%E9%87%8F%E6%B1%A0">1.5.3 &#x8FD0;&#x884C;&#x65F6;&#x5E38;&#x91CF;&#x6C60;</h4>
<ul>
<li>&#x5E38;&#x91CF;&#x6C60;&#xFF0C;&#x5C31;&#x662F;&#x4E00;&#x5F20;&#x8868;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x6307;&#x4EE4;&#x6839;&#x636E;&#x8FD9;&#x5F20;&#x5E38;&#x91CF;&#x8868;&#x627E;&#x5230;&#x8981;&#x6267;&#x884C;&#x7684;&#x7C7B;&#x540D;&#x3001;&#x65B9;&#x6CD5;&#x540D;&#x3001;&#x53C2;&#x6570;&#x7C7B;&#x578B;&#x3001;&#x5B57;&#x9762;&#x91CF;&#x7B49;&#x4FE1;&#x606F;</li>
<li>&#x8FD0;&#x884C;&#x65F6;&#x5E38;&#x91CF;&#x6C60;&#xFF0C;&#x5E38;&#x91CF;&#x6C60;&#x662F;*.class&#x6587;&#x4EF6;&#x4E2D;&#x7684;&#xFF0C;&#x5F53;&#x7C7B;&#x88AB;&#x52A0;&#x8F7D;&#xFF0C;&#x5B83;&#x7684;&#x5E38;&#x91CF;&#x6C60;&#x4FE1;&#x606F;&#x5C31;&#x4F1A;&#x88AB;&#x653E;&#x5165;&#x8FD0;&#x884C;&#x65F6;&#x5E38;&#x91CF;&#xFF0C;&#x5E76;&#x628A;&#x91CC;&#x9762;&#x7684;&#x7B26;&#x53F7;&#x5730;&#x5740;&#x53D8;&#x4E3A;&#x771F;&#x5B9E;&#x5730;&#x5740;&#x3002;</li>
</ul>
<h4 id="154-stringtable">1.5.4 StringTable</h4>
<pre><code class="language-java">// javap -v xxx.class&#x67E5;&#x770B;&#x5B57;&#x8282;&#x7801;
// StringTable[&quot;a&quot;,&quot;b&quot;,&quot;ab&quot;]
// &#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x7684;&#x4FE1;&#x606F;&#x4F1A;&#x88AB;&#x52A0;&#x8F7D;&#x5230;&#x8FD0;&#x884C;&#x65F6;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#xFF0C;&#x8FD9;&#x65F6;a b ab&#x90FD;&#x662F;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x7684;&#x7B26;&#x53F7;&#xFF0C;&#x8FD8;&#x6CA1;&#x6709;&#x7F16;&#x7A0B;java&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;
// idc #2&#x4F1A;&#x628A;a&#x7B26;&#x53F7;&#x53D8;&#x4E3A;&quot;a&quot;&#x5BF9;&#x8C61;
// idc #3&#x4F1A;&#x628A;b&#x7B26;&#x53F7;&#x53D8;&#x4E3A;&quot;b&quot;&#x5BF9;&#x8C61;
// idc #4&#x4F1A;&#x628A;ab&#x7B26;&#x53F7;&#x53D8;&#x4E3A;&quot;ab&quot;&#x5BF9;&#x8C61;

public static void main(String[] args){
    String s1 = &quot;a&quot;; // &#x61D2;&#x60F0;&#x7684;
    String s2 = &quot;b&quot;;
    // &#x5B57;&#x7B26;&#x4E32;&#x5E38;&#x91CF;&#x62FC;&#x63A5;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x4F18;&#x5316;&#x4E3A;&quot;ab&quot;&#xFF0C;&#x5165;&#x6C60;
    String s3 = &quot;ab&quot;;
    // &#x53D8;&#x91CF;&#x62FC;&#x63A5;&#xFF0C;&#x8FD0;&#x884C;&#x671F;&#x95F4;StringBuilder&#x521B;&#x5EFA;&#xFF0C;&#x5806;&#x4E2D;
    String s4 = s1 + s2; // new StringBuilder().append(&quot;a&quot;).append(&quot;b&quot;).toString(); 
    String s5 = &quot;a&quot; + &quot;b&quot;; // javac &#x5728;&#x7F16;&#x8BD1;&#x671F;&#x95F4;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x7ED3;&#x679C;&#x5DF2;&#x7ECF;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x95F4;&#x786E;&#x5B9A;&#x4E3A;ab
    String s6 = s4.intern();
    
    System.out.println(s3 == s4); // false
    System.out.println(s3 == s5); // true
    System.out.println(s3 == s6); // true
    
    String x2 = new String(&quot;c&quot;) + new String(&quot;d&quot;);
    String x1 = &quot;cd&quot;;
    String x3 = x2.intern();
    // &#x5982;&#x679C;&#x8C03;&#x6362;&#x3010;&#x6700;&#x540E;&#x4E24;&#x884C;&#x4EE3;&#x7801;&#x3011;&#x7684;&#x4F4D;&#x7F6E;&#xFF0C;&#x8C03;&#x6362;&#x540E;&#x4E3A;true
    System.out.println(x1 == x2);// false
    System.out.println(x1 == x3);// true
}
</code></pre>
<p>&#x7279;&#x6027;</p>
<ul>
<li>&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x5B57;&#x7B26;&#x4E32;&#x4EC5;&#x662F;&#x7B26;&#x53F7;&#xFF0C;&#x7B2C;&#x4E00;&#x6B21;&#x7528;&#x5230;&#x65F6;&#x624D;&#x53D8;&#x4E3A;&#x5BF9;&#x8C61;</li>
<li>&#x5229;&#x7528;&#x4E32;&#x6C60;&#x673A;&#x5236;&#xFF0C;&#x6765;&#x907F;&#x514D;&#x91CD;&#x590D;&#x521B;&#x5EFA;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;</li>
<li>&#x5B57;&#x7B26;&#x4E32;&#x53D8;&#x91CF;&#x62FC;&#x63A5;&#x539F;&#x7406;&#x65F6;StringBuilder(1.8)</li>
<li>&#x5B57;&#x7B26;&#x4E32;&#x5E38;&#x91CF;&#x62FC;&#x63A5;&#x7684;&#x539F;&#x7406;&#x662F;&#x7F16;&#x8BD1;&#x671F;&#x4F18;&#x5316;</li>
<li>&#x53EF;&#x4EE5;&#x4F7F;&#x7528;intern&#x65B9;&#x6CD5;&#xFF0C;&#x4E3B;&#x52A8;&#x5C06;&#x4E32;&#x6C60;&#x4E2D;&#x8FD8;&#x6CA1;&#x6709;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x653E;&#x5165;&#x4E32;&#x6C60;
<ul>
<li>1.8&#x5C06;&#x8FD9;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;&#x5C1D;&#x8BD5;&#x653E;&#x5165;&#x4E32;&#x6C60;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x5219;&#x5E76;&#x4E0D;&#x4F1A;&#x653E;&#x5165;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5219;&#x4F1A;&#x653E;&#x5165;&#x4E32;&#x6C60;&#xFF0C;&#x4F1A;&#x628A;&#x4E32;&#x6C60;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x8FD4;&#x56DE;</li>
<li>1.6&#x5C06;&#x8FD9;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;&#x5C1D;&#x8BD5;&#x653E;&#x5165;&#x4E32;&#x6C60;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x5219;&#x5E76;&#x4E0D;&#x4F1A;&#x653E;&#x5165;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5219;&#x4F1A;&#x590D;&#x5236;&#x4E00;&#x4EFD;&#x653E;&#x5165;&#x4E32;&#x6C60;&#xFF0C;&#x4F1A;&#x628A;&#x4E32;&#x6C60;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x8FD4;&#x56DE;</li>
</ul>
</li>
</ul>
<h4 id="155-stringtable%E4%BD%8D%E7%BD%AE">1.5.5 StringTable&#x4F4D;&#x7F6E;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/6fa83329d0cb733d.png" alt="JVM&#x2014;&#x2014;Java&#x865A;&#x62DF;&#x673A;" loading="lazy"></p>
<h4 id="156-stringtable%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6">1.5.6 StringTable&#x5783;&#x573E;&#x56DE;&#x6536;</h4>
<h4 id="157-stringtable%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98">1.5.7 StringTable&#x6027;&#x80FD;&#x8C03;&#x4F18;</h4>
<ul>
<li>&#x8C03;&#x6574;-XX:StringTableSize=&#x6876;&#x4E2A;&#x6570;</li>
<li>&#x8003;&#x8651;&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;&#x662F;&#x5426;&#x5165;&#x6C60;</li>
</ul>
<h3 id="16-%E7%9B%B4%E6%8E%A5%E5%86%85%E5%AD%98">1.6 &#x76F4;&#x63A5;&#x5185;&#x5B58;</h3>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/748a9fc080a51514.png" alt="JVM&#x2014;&#x2014;Java&#x865A;&#x62DF;&#x673A;" loading="lazy"></p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/0d6aebb94d3491be.png" alt="JVM&#x2014;&#x2014;Java&#x865A;&#x62DF;&#x673A;" loading="lazy"></p>
<p>Direct Memory</p>
<ul>
<li>&#x5E38;&#x89C1;&#x4E8E;NIO&#x64CD;&#x4F5C;&#xFF0C;&#x7528;&#x4E8E;&#x6570;&#x636E;&#x7F13;&#x51B2;&#x533A;</li>
<li>&#x5206;&#x914D;&#x56DE;&#x6536;&#x6210;&#x672C;&#x8F83;&#x9AD8;&#xFF0C;&#x4F46;&#x8BFB;&#x5199;&#x6027;&#x80FD;&#x9AD8;</li>
<li>&#x4E0D;&#x53D7;JVM&#x5185;&#x5B58;&#x56DE;&#x6536;&#x7BA1;&#x7406;</li>
</ul>
<h2 id="2-%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6">2. &#x5783;&#x573E;&#x56DE;&#x6536;</h2>
<h3 id="21-%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E5%AF%B9%E8%B1%A1%E5%8F%AF%E4%BB%A5%E5%9B%9E%E6%94%B6">2.1 &#x5982;&#x4F55;&#x5224;&#x65AD;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x56DE;&#x6536;</h3>
<h4 id="211-%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%E6%B3%95">2.1.1 &#x5F15;&#x7528;&#x8BA1;&#x6570;&#x6CD5;</h4>
<h4 id="222-%E5%8F%AF%E8%BE%BE%E6%80%A7%E5%88%86%E6%9E%90%E7%AE%97%E6%B3%95">2.2.2 &#x53EF;&#x8FBE;&#x6027;&#x5206;&#x6790;&#x7B97;&#x6CD5;</h4>
<ul>
<li>Java&#x865A;&#x62DF;&#x673A;&#x4E2D;&#x7684;&#x5783;&#x573E;&#x56DE;&#x6536;&#x5668;&#x91C7;&#x7528;&#x53EF;&#x8FBE;&#x6027;&#x5206;&#x6790;&#x6765;&#x63A2;&#x7D22;&#x6240;&#x6709;&#x5B58;&#x6D3B;&#x7684;&#x5BF9;&#x8C61;</li>
<li>&#x626B;&#x63CF;&#x5806;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x770B;&#x662F;&#x5426;&#x80FD;&#x591F;&#x6CBF;&#x7740;GC Root&#x5BF9;&#x8C61;&#x4E3A;&#x8D77;&#x70B9;&#x7684;&#x5F15;&#x7528;&#x94FE;&#x627E;&#x5230;&#x8BE5;&#x5BF9;&#x8C61;&#xFF0C;&#x627E;&#x4E0D;&#x5230;&#xFF0C;&#x8868;&#x793A;&#x53EF;&#x4EE5;&#x56DE;&#x6536;</li>
<li>&#x54EA;&#x4E9B;&#x5BF9;&#x8C61;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;GC Root&#xFF1F;</li>
</ul>
<h4 id="223-%E5%9B%9B%E7%A7%8D%E5%BC%95%E7%94%A8">2.2.3 &#x56DB;&#x79CD;&#x5F15;&#x7528;</h4>
<ol>
<li>
<h5 id="%E5%BC%BA%E5%BC%95%E7%94%A8">&#x5F3A;&#x5F15;&#x7528;</h5>
<ul>
<li>&#x53EA;&#x6709;&#x6240;&#x6709;GC Root&#x5BF9;&#x8C61;&#x90FD;&#x4E0D;&#x901A;&#x8FC7;&#x3010;&#x5F3A;&#x5F15;&#x7528;&#x3011;&#x8BE5;&#x5BF9;&#x8C61;&#xFF0C;&#x8BE5;&#x5BF9;&#x8C61;&#x624D;&#x80FD;&#x88AB;&#x5783;&#x573E;&#x56DE;&#x6536;</li>
</ul>
</li>
<li>
<h5 id="%E8%BD%AF%E5%BC%95%E7%94%A8">&#x8F6F;&#x5F15;&#x7528;</h5>
<ul>
<li>&#x4EC5;&#x6709;&#x8F6F;&#x5F15;&#x7528;&#x8BE5;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x5728;&#x5783;&#x573E;&#x56DE;&#x6536;&#x540E;&#xFF0C;&#x5185;&#x5B58;&#x4ECD;&#x4E0D;&#x8DB3;&#x65F6;&#x4F1A;&#x518D;&#x6B21;&#x53D1;&#x51FA;&#x5783;&#x573E;&#x56DE;&#x6536;&#xFF0C;&#x56DE;&#x6536;&#x8F6F;&#x5F15;&#x7528;&#x5BF9;&#x8C61;</li>
<li>&#x53EF;&#x4EE5;&#x914D;&#x5408;&#x5F15;&#x7528;&#x961F;&#x5217;&#x6765;&#x91CA;&#x653E;&#x5F15;&#x7528;&#x81EA;&#x8EAB;</li>
</ul>
<pre><code class="language-java">private static final int _4MB = 4*1024*1024;
public static void main(String[] args){
    List&lt;SoftReference&lt;byte[]&gt;&gt; list = new ArrayList&lt;&gt;();
    // &#x5F15;&#x7528;&#x961F;&#x5217;
    ReferenceQueue&lt;byte[]&gt; queue = new ReferenceQueue&lt;&gt;();
    for(int i=0;i&lt;5;i++){
        // &#x5173;&#x8054;&#x4E86;&#x5F15;&#x7528;&#x961F;&#x5217;&#xFF0C;&#x5F53;&#x8F6F;&#x5F15;&#x7528;&#x6240;&#x5173;&#x8054;&#x7684;byte[]&#x88AB;&#x56DE;&#x6536;&#xFF0C;&#x65F6;&#xFF0C;&#x8F6F;&#x5F15;&#x7528;&#x4F1A;&#x81EA;&#x5DF1;&#x52A0;&#x5165;&#x5F15;&#x7528;&#x961F;&#x5217;
        SoftReference&lt;byte[]&gt; ref = new SoftRerence&lt;&gt;(new byte[_4MB],queue);
        System.out.println(ref.get());
        list.add(ref);
        System.out.println(list.size());
    }
    Reference&lt;? extends byte[]&gt; poll = queue.poll();
    while(poll != null){
        list.remove(poll);
        poll = queue.poll();
    }
    for(SoftReference&lt;byte[] reference:list){
        System.out.println(reference.get());
    }
}
</code></pre>
</li>
<li>
<h5 id="%E5%BC%B1%E5%BC%95%E7%94%A8">&#x5F31;&#x5F15;&#x7528;</h5>
<ul>
<li>&#x4EC5;&#x6709;&#x5F31;&#x5F15;&#x7528;&#x5F15;&#x7528;&#x8BE5;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x5728;&#x5783;&#x573E;&#x56DE;&#x6536;&#x65F6;&#xFF0C;&#x65E0;&#x8BBA;&#x5185;&#x5B58;&#x662F;&#x5426;&#x5145;&#x8DB3;&#xFF0C;&#x90FD;&#x4F1A;&#x56DE;&#x6536;&#x5F31;&#x5F15;&#x7528;&#x5BF9;&#x8C61;</li>
<li>&#x53EF;&#x4EE5;&#x914D;&#x5408;&#x5F15;&#x7528;&#x961F;&#x5217;&#x6765;&#x91CA;&#x653E;&#x5F31;&#x5F15;&#x7528;&#x672C;&#x8EAB;</li>
</ul>
</li>
<li>
<h5 id="%E8%99%9A%E5%BC%95%E7%94%A8">&#x865A;&#x5F15;&#x7528;</h5>
<ul>
<li>&#x5FC5;&#x987B;&#x914D;&#x5408;&#x5F15;&#x7528;&#x961F;&#x5217;&#x4F7F;&#x7528;&#xFF0C;&#x4E3B;&#x8981;&#x914D;&#x5408;ByteBuffer&#x4F7F;&#x7528;&#xFF0C;&#x88AB;&#x5F15;&#x7528;&#x5BF9;&#x8C61;&#x56DE;&#x6536;&#x65F6;&#xFF0C;&#x4F1A;&#x5C06;&#x865A;&#x5F15;&#x7528;&#x5165;&#x961F;&#xFF0C;&#x7531;Reference Handler&#x7EBF;&#x7A0B;&#x8C03;&#x7528;&#x865A;&#x5F15;&#x7528;&#x76F8;&#x5173;&#x65B9;&#x6CD5;&#x91CA;&#x653E;&#x76F4;&#x63A5;&#x5185;&#x5B58;</li>
</ul>
</li>
<li>
<h5 id="%E7%BB%88%E7%BB%93%E5%99%A8%E5%BC%95%E7%94%A8">&#x7EC8;&#x7ED3;&#x5668;&#x5F15;&#x7528;</h5>
<ul>
<li>&#x65E0;&#x9700;&#x624B;&#x52A8;&#x7F16;&#x7801;&#xFF0C;&#x4F46;&#x5185;&#x90E8;&#x914D;&#x5408;&#x5F15;&#x7528;&#x961F;&#x5217;&#x4F7F;&#x7528;&#xFF0C;&#x5728;&#x5783;&#x573E;&#x56DE;&#x6536;&#x65F6;&#xFF0C;&#x7EC8;&#x7ED3;&#x5668;&#x5F15;&#x7528;&#x5165;&#x961F;&#xFF08;&#x88AB;&#x5F15;&#x7528;&#x5BF9;&#x8C61;&#x6682;&#x65F6;&#x6CA1;&#x6709;&#x88AB;&#x56DE;&#x6536;&#xFF09;&#xFF0C;&#x518D;&#x7531;Finalizer&#x7EBF;&#x7A0B;&#x901A;&#x8FC7;&#x7EC8;&#x7ED3;&#x5668;&#x5F15;&#x7528;&#x627E;&#x5230;&#x88AB;&#x5F15;&#x7528;&#x5BF9;&#x8C61;&#x5E76;&#x8C03;&#x7528;&#x5B83;&#x7684;finalize&#x65B9;&#x6CD5;&#xFF0C;&#x7B2C;&#x4E8C;&#x6B21;GC&#x624D;&#x80FD;&#x56DE;&#x6536;&#x88AB;&#x5F15;&#x7528;&#x5BF9;&#x8C61;&#x3002;</li>
</ul>
</li>
</ol>
<h3 id="22-%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E7%AE%97%E6%B3%95">2.2 &#x5783;&#x573E;&#x56DE;&#x6536;&#x7B97;&#x6CD5;</h3>
<h4 id="221-%E6%A0%87%E8%AE%B0%E6%B8%85%E9%99%A4mark-sweep">2.2.1 &#x6807;&#x8BB0;&#x6E05;&#x9664;Mark Sweep</h4>
<ul>
<li>&#x901F;&#x5EA6;&#x5FEB;</li>
<li>&#x4F1A;&#x9020;&#x6210;&#x5185;&#x5B58;&#x788E;&#x7247;</li>
</ul>
<h4 id="222-%E6%A0%87%E8%AE%B0%E6%95%B4%E7%90%86mark-compact">2.2.2 &#x6807;&#x8BB0;&#x6574;&#x7406;Mark Compact</h4>
<ul>
<li>&#x901F;&#x5EA6;&#x6162;</li>
<li>&#x6CA1;&#x6709;&#x5185;&#x5B58;&#x788E;&#x7247;</li>
</ul>
<h4 id="223-%E5%A4%8D%E5%88%B6copy">2.2.3 &#x590D;&#x5236;Copy</h4>
<ul>
<li>&#x4E0D;&#x4F1A;&#x6709;&#x5185;&#x5B58;&#x788E;&#x7247;</li>
<li>&#x53EF;&#x7528;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x51CF;&#x534A;</li>
</ul>
<h3 id="23-%E5%88%86%E4%BB%A3%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6">2.3 &#x5206;&#x4EE3;&#x5783;&#x573E;&#x56DE;&#x6536;</h3>
<ul>
<li>&#x5BF9;&#x8C61;&#x9996;&#x5148;&#x5206;&#x914D;&#x5728;&#x4F0A;&#x7538;&#x56ED;&#x533A;&#x57DF;</li>
<li>&#x65B0;&#x751F;&#x4EE3;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#x65F6;&#xFF0C;&#x89E6;&#x53D1;minor gc&#xFF0C;&#x4F0A;&#x7538;&#x56ED;&#x548C;from&#x5B58;&#x6D3B;&#x7684;&#x5BF9;&#x8C61;&#x4F7F;&#x7528;copy&#x590D;&#x5236;&#x5230;to&#x4E2D;&#xFF0C;&#x5B58;&#x6D3B;&#x7684;&#x5E74;&#x9F84;&#x52A0;1&#xFF0C;&#x5E76;&#x4E14;&#x4EA4;&#x6362;from to</li>
<li>minor gc&#x4F1A;&#x5F15;&#x53D1;stop the world&#xFF0C;&#x6682;&#x505C;&#x5176;&#x4ED6;&#x7528;&#x6237;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x7B49;&#x5F85;&#x5783;&#x573E;&#x56DE;&#x6536;&#x7EBF;&#x7A0B;&#x7ED3;&#x675F;</li>
<li>&#x5F53;&#x5BF9;&#x8C61;&#x5BFF;&#x547D;&#x8D85;&#x8FC7;&#x9608;&#x503C;&#x65F6;&#xFF0C;&#x4F1A;&#x664B;&#x5347;&#x81F3;&#x8001;&#x5E74;&#x4EE3;&#xFF0C;&#x6700;&#x5927;&#x5BFF;&#x547D;15&#x6B21;&#xFF08;4bit&#xFF09;</li>
<li>&#x5F53;&#x8001;&#x5E74;&#x4EE3;&#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#xFF0C;&#x4F1A;&#x5148;&#x5C1D;&#x8BD5;&#x89E6;&#x53D1;minor gc&#xFF0C;&#x5982;&#x679C;&#x4E4B;&#x540E;&#x7A7A;&#x95F4;&#x4ECD;&#x4E0D;&#x8DB3;&#xFF0C;&#x90A3;&#x4E48;&#x89E6;&#x53D1;full gc&#xFF0C;STW&#x65F6;&#x95F4;&#x66F4;&#x957F;&#x3002;</li>
</ul>
<p>&#x76F8;&#x5173;VM&#x53C2;&#x6570;</p>
<table>
<thead>
<tr>
<th>&#x542B;&#x4E49;</th>
<th>&#x53C2;&#x6570;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x5806;&#x521D;&#x59CB;&#x5927;&#x5C0F;</td>
<td>-Xms</td>
</tr>
<tr>
<td>&#x5806;&#x6700;&#x5927;&#x5927;&#x5C0F;</td>
<td>-Xmx&#x6216;-XX:MaxHeapSize=size</td>
</tr>
<tr>
<td>&#x65B0;&#x751F;&#x4EE3;&#x5927;&#x5C0F;</td>
<td>-Xmm&#x6216;&#xFF08;-XX:NewSize=size+-XX:MaxNewSize=size&#xFF09;</td>
</tr>
<tr>
<td>&#x5E78;&#x5B58;&#x533A;&#x6BD4;&#x4F8B;</td>
<td>-XX:SurvivorRatio=ratio</td>
</tr>
<tr>
<td>&#x664B;&#x5347;&#x9608;&#x503C;</td>
<td>-XX:MaxTenuringThreshold=threshold</td>
</tr>
<tr>
<td>GC&#x8BE6;&#x60C5;</td>
<td>-XX:+PrintGCDetails -verbose:gc</td>
</tr>
<tr>
<td>FullGC&#x524D;MinorGC</td>
<td>-XX:+ScavengeBeforeFullGC</td>
</tr>
</tbody>
</table>
<h3 id="24-%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E5%99%A8">2.4 &#x5783;&#x573E;&#x56DE;&#x6536;&#x5668;</h3>
<ol>
<li>
<h4 id="%E4%B8%B2%E8%A1%8C">&#x4E32;&#x884C;</h4>
<pre><code class="language-java">-XX:UseSerialGC=Serial+SeralOld
</code></pre>
<ul>
<li>&#x5355;&#x7EBF;&#x7A0B;</li>
<li>&#x5806;&#x5185;&#x5B58;&#x8F83;&#x5C0F;&#xFF0C;&#x9002;&#x5408;&#x4E2A;&#x4EBA;&#x7535;&#x8111;</li>
</ul>
</li>
<li>
<h4 id="%E5%90%9E%E5%90%90%E9%87%8F%E4%BC%98%E5%85%88">&#x541E;&#x5410;&#x91CF;&#x4F18;&#x5148;</h4>
<pre><code class="language-java">-XX:+UserParallelGC~-XX:+UseParallelOldGC
-XX:+UseAdaptiveSizePolicy
-XX:GCTimeRatio=ratio
-XX:MaxGCPauseMills=ms
-XX:ParallelGCThreads=n
</code></pre>
<ul>
<li>&#x591A;&#x7EBF;&#x7A0B;</li>
<li>&#x5806;&#x5185;&#x5B58;&#x8F83;&#x5927;&#xFF0C;&#x591A;&#x6838;cpu</li>
<li>&#x5355;&#x4F4D;&#x65F6;&#x95F4;&#x5185;STW&#x65F6;&#x95F4;&#x6700;&#x77ED;</li>
</ul>
</li>
<li>
<h4 id="%E5%93%8D%E5%BA%94%E6%97%B6%E9%97%B4%E4%BC%98%E5%85%88">&#x54CD;&#x5E94;&#x65F6;&#x95F4;&#x4F18;&#x5148;</h4>
<pre><code class="language-java">-XX:+UseConcMarkSweepGC ~ -XX:+UseParNewGC ~ SerialOld
-XX:ParallelGCThreads=n ~ -XX:ConcGCThreads=threads
-XX:CMSInitiatingOccupancyFraction=percent
-XX:+CMSScavengeBeforeRemark
</code></pre>
<ul>
<li>&#x591A;&#x7EBF;&#x7A0B;</li>
<li>&#x5806;&#x5185;&#x5B58;&#x8F83;&#x5927;&#xFF0C;&#x591A;&#x6838;cpu</li>
<li>&#x5C3D;&#x53EF;&#x80FD;&#x8BA9;&#x5355;&#x6B21;STW&#x65F6;&#x95F4;&#x6700;&#x77ED;</li>
</ul>
</li>
<li>
<h4 id="g1">G1</h4>
</li>
</ol>
<h3 id="25-%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E8%B0%83%E4%BC%98">2.5 &#x5783;&#x573E;&#x56DE;&#x6536;&#x8C03;&#x4F18;</h3>
<h2 id="3-%E7%B1%BB%E5%8A%A0%E8%BD%BD%E4%B8%8E%E5%AD%97%E8%8A%82%E7%A0%81%E8%AE%A1%E6%95%B0">3. &#x7C7B;&#x52A0;&#x8F7D;&#x4E0E;&#x5B57;&#x8282;&#x7801;&#x8BA1;&#x6570;</h2>
<h3 id="31-%E7%B1%BB%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84">3.1 &#x7C7B;&#x6587;&#x4EF6;&#x7ED3;&#x6784;</h3>
<p>&#x9B54;&#x6570; 0-3&#x5B57;&#x8282;&#xFF0C;&#x8868;&#x793A;&#x5B83;&#x662F;&#x5426;&#x662F;&#x3010;class&#x3011;&#x7C7B;&#x578B;&#x7684;&#x6587;&#x4EF6; ca fe ba be<br>
&#x7248;&#x672C; 4-7&#x5B57;&#x8282;&#xFF0C;&#x8868;&#x793A;&#x7248;&#x672C;00 34&#xFF08;52&#xFF09;&#xFF0C;&#x8868;&#x793A;java8<br>
&#x5E38;&#x91CF;&#x6C60; 8-9&#x5B57;&#x8282;&#xFF0C;&#x8868;&#x793A;&#x5E38;&#x91CF;&#x6C60;&#x957F;&#x5EA6;&#xFF0C;00 35&#xFF08;35&#xFF09;&#x8868;&#x793A;&#x5E38;&#x91CF;&#x6C60;&#x6709;#1~#34&#x9879;&#x3002;#0&#x9879;&#x4E0D;&#x8BA1;&#x5165;&#xFF0C;&#x4E5F;&#x6CA1;&#x6709;&#x503C;<br>
&#x7B2C;#1&#x9879;0a&#x8868;&#x793A;&#x4E00;&#x4E2A;Method&#x4FE1;&#x606F;&#xFF0C;00 06&#x548C;00 15&#xFF08;21&#xFF09;&#x8868;&#x793A;&#x5F15;&#x7528;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;#6&#x548C;#21&#x9879;&#x6765;&#x83B7;&#x5F97;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x3010;&#x6240;&#x5C5E;&#x7C7B;&#x3011;&#x548C;&#x3010;&#x65B9;&#x6CD5;&#x540D;&#x3011;<br>
ca fe ba be 00 00 00 34 00 23 0a 00 06 00 15 09</p>
<h3 id="32-%E5%AD%97%E8%8A%82%E7%A0%81%E6%8C%87%E4%BB%A4">3.2 &#x5B57;&#x8282;&#x7801;&#x6307;&#x4EE4;</h3>
<p>javap&#x5DE5;&#x5177;&#x53CD;&#x7F16;&#x8BD1;class&#x6587;&#x4EF6;</p>
<h4 id="321-%E5%9B%BE%E8%A7%A3%E6%96%B9%E6%B3%95%E6%89%A7%E8%A1%8C%E6%B5%81%E7%A8%8B">3.2.1 &#x56FE;&#x89E3;&#x65B9;&#x6CD5;&#x6267;&#x884C;&#x6D41;&#x7A0B;</h4>
<ol>
<li>&#x539F;&#x59CB;java&#x4EE3;&#x7801;</li>
<li>&#x7F16;&#x8BD1;&#x540E;&#x7684;&#x5B57;&#x8282;&#x6587;&#x4EF6;</li>
<li>&#x5E38;&#x91CF;&#x6C60;&#x8F7D;&#x5165;&#x8FD0;&#x884C;&#x65F6;&#x5E38;&#x91CF;&#x6C60;</li>
<li>&#x65B9;&#x6CD5;&#x5B57;&#x8282;&#x7801;&#x8F7D;&#x5165;&#x65B9;&#x6CD5;&#x533A;</li>
<li>main&#x7EBF;&#x7A0B;&#x5F00;&#x59CB;&#x8FD0;&#x884C;&#xFF0C;&#x5206;&#x914D;&#x6808;&#x5E27;&#x5185;&#x5B58;</li>
<li>&#x6267;&#x884C;&#x5F15;&#x64CE;&#x5F00;&#x59CB;&#x6267;&#x884C;&#x5B57;&#x8282;&#x7801;</li>
</ol>
<p>&#x591A;&#x6001;&#x7684;&#x539F;&#x7406;HSDB</p>
<h3 id="33-%E7%BC%96%E8%AF%91%E6%9C%9F%E5%A4%84%E7%90%86">3.3 &#x7F16;&#x8BD1;&#x671F;&#x5904;&#x7406;</h3>
<h3 id="34-%E7%B1%BB%E5%8A%A0%E8%BD%BD%E9%98%B6%E6%AE%B5">3.4 &#x7C7B;&#x52A0;&#x8F7D;&#x9636;&#x6BB5;</h3>
<ol>
<li>&#x52A0;&#x8F7D;
<ul>
<li>&#x5C06;&#x7C7B;&#x7684;&#x5B57;&#x8282;&#x7801;&#x8F7D;&#x5165;&#x65B9;&#x6CD5;&#x533A;&#xFF0C;&#x5185;&#x90E8;&#x91C7;&#x7528;C++&#x7684;instanceKlass&#x63CF;&#x8FF0;java&#x7C7B;&#xFF0C;&#x5B83;&#x7684;&#x91CD;&#x8981;field&#x6709;&#xFF1A;
<ul>
<li>_java_mirror &#x5373;java&#x7C7B;&#x955C;&#x50CF;&#xFF0C;&#x4F8B;&#x5982;&#x5BF9;String&#x6765;&#x8BF4;&#xFF0C;&#x5C31;&#x7B97;String.class&#xFF0C;&#x4F5C;&#x7528;&#x662F;&#x628A;Klass&#x66B4;&#x9732;&#x7ED9;java&#x4F7F;&#x7528;</li>
<li>_super &#x5373;&#x7236;&#x7C7B;</li>
<li>_fields &#x5373;&#x6210;&#x5458;&#x53D8;&#x91CF;</li>
<li>_methods &#x5373;&#x65B9;&#x6CD5;</li>
<li>_constants &#x5373;&#x5E38;&#x91CF;&#x6C60;</li>
<li>_class_loader &#x5373;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;</li>
<li>_vtable &#x865A;&#x65B9;&#x6CD5;&#x8868;</li>
<li>_itable &#x63A5;&#x53E3;&#x65B9;&#x6CD5;&#x8868;</li>
</ul>
</li>
<li>&#x5982;&#x679C;&#x8FD9;&#x4E2A;&#x7C7B;&#x8FD8;&#x6709;&#x7236;&#x7C7B;&#x6CA1;&#x6709;&#x52A0;&#x8F7D;&#xFF0C;&#x5148;&#x52A0;&#x8F7D;&#x7236;&#x7C7B;</li>
<li>&#x52A0;&#x8F7D;&#x548C;&#x94FE;&#x63A5;&#x53EF;&#x80FD;&#x662F;&#x4EA4;&#x66FF;&#x8FD0;&#x884C;&#x7684;</li>
</ul>
</li>
<li>&#x94FE;&#x63A5;
<ul>
<li>&#x9A8C;&#x8BC1;&#xFF1A;&#x9A8C;&#x8BC1;&#x7C7B;&#x662F;&#x5426;&#x7B26;&#x5408;JVM&#x89C4;&#x8303;&#xFF0C;&#x5B89;&#x5168;&#x6027;&#x68C0;&#x67E5;</li>
<li>&#x51C6;&#x5907;&#xFF1A;&#x4E3A;static&#x53D8;&#x91CF;&#x5206;&#x914D;&#x7A7A;&#x95F4;&#xFF0C;&#x51C6;&#x5907;&#x9ED8;&#x8BA4;&#x503C;
<ul>
<li>static&#x53D8;&#x91CF;&#x5728;JDK7&#x4E4B;&#x524D;&#x5B58;&#x50A8;&#x4E0E;instanceKlass&#x672B;&#x5C3E;&#xFF0C;JDK7&#x540E;&#x5B58;&#x50A8;&#x4E8E;_java_mirror&#x672B;&#x5C3E;&#x3002;</li>
<li>static&#x53D8;&#x91CF;&#x5206;&#x914D;&#x7A7A;&#x95F4;&#x548C;&#x8D4B;&#x503C;&#x662F;&#x4E24;&#x4E2A;&#x6B65;&#x9AA4;&#xFF0C;&#x5206;&#x914D;&#x7A7A;&#x95F4;&#x5728;&#x51C6;&#x5907;&#x9636;&#x6BB5;&#x5B8C;&#x6210;&#xFF0C;&#x8D4B;&#x503C;&#x5728;&#x521D;&#x59CB;&#x5316;&#x9636;&#x6BB5;&#x5B8C;&#x6210;</li>
<li>&#x5982;&#x679C;static&#x53D8;&#x91CF;&#x662F;final&#x7684;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x4EE5;&#x53CA;&#x5B57;&#x7B26;&#x4E32;&#x5E38;&#x91CF;&#xFF0C;&#x4F60;&#x4EEC;&#x7F16;&#x8BD1;&#x9636;&#x6BB5;&#x503C;&#x5C31;&#x786E;&#x5B9A;&#x4E86;&#xFF0C;&#x8D4B;&#x503C;&#x5728;&#x51C6;&#x5907;&#x9636;&#x6BB5;&#x5B8C;&#x6210;</li>
<li>&#x5982;&#x679C;static&#x53D8;&#x91CF;&#x662F;final&#x7684;&#xFF0C;&#x4F46;&#x5C5E;&#x4E8E;&#x5F15;&#x7528;&#x7C7B;&#x578B;&#xFF0C;&#x4F60;&#x4EEC;&#x8D4B;&#x503C;&#x4E5F;&#x4F1A;&#x5728;&#x521D;&#x59CB;&#x5316;&#x9636;&#x6BB5;&#x5B8C;&#x6210;</li>
</ul>
</li>
<li>&#x89E3;&#x6790;&#xFF1A;&#x5C06;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x7684;&#x7B26;&#x53F7;&#x5F15;&#x7528;&#x89E3;&#x6790;&#x4E3A;&#x76F4;&#x63A5;&#x5F15;&#x7528;</li>
</ul>
</li>
<li>&#x521D;&#x59CB;&#x5316;<br>
&#x521D;&#x59CB;&#x5316;&#x5373;<cinit>()v&#x65B9;&#x6CD5;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x4F1A;&#x4FDD;&#x8BC1;&#x6574;&#x4E2A;&#x7C7B;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x3002;&#x7C7B;&#x521D;&#x59CB;&#x5316;&#x662F;&#x61D2;&#x60F0;&#x7684;&#xFF0C;&#x53D1;&#x751F;&#x65F6;&#x673A;&#xFF1A;
<ul>
<li>main&#x65B9;&#x6CD5;&#x6240;&#x5728;&#x7684;&#x7C7B;&#xFF0C;&#x603B;&#x4F1A;&#x88AB;&#x9996;&#x5148;&#x521D;&#x59CB;&#x5316;</li>
<li>&#x9996;&#x6B21;&#x8BBF;&#x95EE;&#x8FD9;&#x4E2A;&#x7C7B;&#x7684;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x6216;&#x9759;&#x6001;&#x65B9;&#x6CD5;</li>
<li>&#x5B50;&#x7C7B;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x5982;&#x679C;&#x7236;&#x7C7B;&#x8FD8;&#x6CA1;&#x521D;&#x59CB;&#x5316;&#xFF0C;&#x4F1A;&#x5F15;&#x53D1;&#x7236;&#x7C7B;&#x521D;&#x59CB;&#x5316;</li>
<li>Class.forName()</li>
<li>new&#x4F1A;&#x5BFC;&#x81F4;&#x521D;&#x59CB;&#x5316;<br>
&#x4E0D;&#x4F1A;&#x5BFC;&#x81F4;&#x7C7B;&#x521D;&#x59CB;&#x5316;&#x60C5;&#x51B5;&#xFF1A;</li>
<li>&#x8BBF;&#x95EE;&#x7C7B;&#x7684;static final&#x9759;&#x6001;&#x5E38;&#x91CF;&#xFF08;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x548C;&#x5B57;&#x7B26;&#x4E32;&#xFF09;&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x521D;&#x59CB;&#x5316;</li>
<li>&#x7C7B;&#x5BF9;&#x8C61;.class&#x4E0D;&#x4F1A;&#x89E6;&#x53D1;&#x521D;&#x59CB;&#x5316;</li>
<li>&#x62C6;&#x7ED9;&#x5E74;&#x95F4;&#x8BE5;&#x7C7B;&#x7684;&#x6570;&#x7EC4;</li>
<li>&#x7C7B;&#x52A0;&#x8F7D;&#x5668;&#x7684;loadClass&#x65B9;&#x6CD5;</li>
<li>Class.forName()&#x7684;&#x53C2;&#x6570;2&#x4E3A;&#x6CD5;&#x62C9;&#x745F;&#x65F6;</li>
</ul>
</cinit></li>
</ol>
<h3 id="35-%E7%B1%BB%E5%8A%A0%E8%BD%BD%E5%99%A8">3.5 &#x7C7B;&#x52A0;&#x8F7D;&#x5668;</h3>
<table>
<thead>
<tr>
<th>&#x540D;&#x79F0;</th>
<th>&#x52A0;&#x8F7D;&#x7C7B;&#x8DEF;&#x5F84;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bootstrap ClassLoader</td>
<td>JAVA_HOME/jre/lib</td>
<td>&#x65E0;&#x6CD5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;</td>
</tr>
<tr>
<td>Extension ClassLoader</td>
<td>JAVA_HOME/jre/lib/ext</td>
<td>&#x4E0A;&#x7EA7;&#x4E3A;Bootstrap&#xFF0C;&#x663E;&#x793A;&#x4E3A;null</td>
</tr>
<tr>
<td>Application ClassLoader</td>
<td>classpath</td>
<td>&#x4E0A;&#x7EA7;&#x4E3A;Extension</td>
</tr>
<tr>
<td>&#x81EA;&#x5B9A;&#x4E49;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;</td>
<td>&#x81EA;&#x5B9A;&#x4E49;</td>
<td>&#x4E0A;&#x7EA7;&#x4E3A;Application</td>
</tr>
</tbody>
</table>
<ol>
<li>&#x542F;&#x52A8;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;</li>
<li>&#x6269;&#x5C55;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;</li>
<li>&#x53CC;&#x4EB2;&#x59D4;&#x6D3E;&#x673A;&#x5236;<br>
&#x6240;&#x8C13;&#x53CC;&#x4EB2;&#x59D4;&#x6D3E;&#xFF0C;&#x5C31;&#x662F;&#x6307;&#x8C03;&#x7528;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;&#x7684;loadClass&#x65B9;&#x6CD5;&#xFF0C;&#x67E5;&#x627E;&#x7C7B;&#x7684;&#x89C4;&#x5219;&#x3002;&#x4F18;&#x5148;&#x59D4;&#x6D3E;&#x4E0A;&#x7EA7;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;&#x8FDB;&#x884C;&#x52A0;&#x8F7D;&#xFF0C;&#x5982;&#x679C;&#x4E0A;&#x7EA7;&#x52A0;&#x8F7D;&#x5668;&#xFF1A;
<ul>
<li>&#x80FD;&#x627E;&#x5230;&#x8FD9;&#x4E2A;&#x7C7B;&#xFF0C;&#x7531;&#x4E0A;&#x7EA7;&#x52A0;&#x8F7D;&#xFF0C;&#x52A0;&#x8F7D;&#x540E;&#x8BE5;&#x7C7B;&#x4E5F;&#x5BF9;&#x590F;&#x5B63;&#x52A0;&#x8F7D;&#x5668;&#x53EF;&#x89C1;</li>
<li>&#x627E;&#x4E0D;&#x5230;&#x8FD9;&#x4E2A;&#x7C7B;&#xFF0C;&#x5219;&#x4E0B;&#x7EA7;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;&#x624D;&#x6709;&#x8D44;&#x683C;&#x6267;&#x884C;&#x52A0;&#x8F7D;</li>
</ul>
</li>
<li>&#x7EBF;&#x7A0B;&#x4E0A;&#x4E0B;&#x6587;&#x7C7B;&#x52A0;&#x8F7D;&#x5668;</li>
<li>&#x81EA;&#x5B9A;&#x4E49;&#x52A0;&#x8F7D;&#x5668;</li>
</ol>
<h3 id="36-%E8%BF%90%E8%A1%8C%E6%9C%9F%E4%BC%98%E5%8C%96">3.6 &#x8FD0;&#x884C;&#x671F;&#x4F18;&#x5316;</h3>
<ol>
<li>
<p>&#x5373;&#x65F6;&#x7F16;&#x8BD1;</p>
<ol>
<li>&#x5206;&#x5C42;&#x7F16;&#x8BD1;<br>
JVM&#x5C06;&#x6267;&#x884C;&#x72B6;&#x6001;&#x5206;&#x6210;&#x4E86;5&#x4E2A;&#x5C42;&#x6B21;
<ul>
<li>0&#x5C42;&#xFF0C;&#x89E3;&#x91CA;&#x6267;&#x884C;&#xFF08;Interpreter&#xFF09;</li>
<li>1&#x5C42;&#xFF0C;&#x4F7F;&#x7528;C1&#x5373;&#x65F6;&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6267;&#x884C;&#xFF08;&#x4E0D;&#x5E26;profiling&#xFF09;</li>
<li>2&#x5C42;&#xFF0C;&#x4F7F;&#x7528;C1&#x5373;&#x65F6;&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6267;&#x884C;&#xFF08;&#x5E26;&#x57FA;&#x672C;&#x7684;profiling&#xFF09;</li>
<li>3&#x5C42;&#xFF0C;&#x4F7F;&#x7528;C1&#x5373;&#x65F6;&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6267;&#x884C;&#xFF08;&#x5E26;&#x5B8C;&#x5168;&#x7684;profiling&#xFF09;</li>
<li>4&#x5C42;&#xFF0C;&#x4F7F;&#x7528;C2&#x5373;&#x65F6;&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6267;&#x884C;</li>
<li>profiling&#x662F;&#x6307;&#x5728;&#x8FD0;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x6536;&#x96C6;&#x4E00;&#x4E9B;&#x7A0B;&#x5E8F;&#x6267;&#x884C;&#x72B6;&#x6001;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x5982;&#x3010;&#x65B9;&#x6CD5;&#x7684;&#x8C03;&#x7528;&#x6B21;&#x6570;&#x3011;&#x3001;&#x3010;&#x5FAA;&#x73AF;&#x7684;&#x56DE;&#x8FB9;&#x6B21;&#x6570;&#x3011;&#x7B49;<br>
JIT&#x548C;&#x89E3;&#x91CA;&#x5668;&#x7684;&#x533A;&#x522B;&#xFF1A;</li>
<li>&#x89E3;&#x91CA;&#x5668;&#x662F;&#x5C06;&#x5B57;&#x8282;&#x7801;&#x89E3;&#x91CA;&#x4E3A;&#x673A;&#x5668;&#x7801;&#xFF0C;&#x4E0B;&#x6B21;&#x5373;&#x4F7F;&#x9047;&#x5230;&#x76F8;&#x540C;&#x7684;&#x5B57;&#x8282;&#x7801;&#xFF0C;&#x4ECD;&#x4F1A;&#x6267;&#x884C;&#x91CD;&#x590D;&#x7684;&#x89E3;&#x91CA;</li>
<li>JIT&#x662F;&#x5C06;&#x4E00;&#x4E9B;&#x5B57;&#x8282;&#x7801;&#x7F16;&#x8BD1;&#x4E3A;&#x9488;&#x5BF9;&#x5B57;&#x8282;&#x7801;&#xFF0C;&#x5E76;&#x5B58;&#x5165;Code Cache&#xFF0C;&#x4E0B;&#x6B21;&#x9047;&#x5230;&#x76F8;&#x540C;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x76F4;&#x63A5;&#x6267;&#x884C;&#xFF0C;&#x65E0;&#x9700;&#x518D;&#x7F16;&#x8BD1;</li>
<li>&#x89E3;&#x91CA;&#x5668;&#x662F;&#x5C06;&#x5B57;&#x8282;&#x7801;&#x89E3;&#x91CA;&#x4E3A;&#x9488;&#x5BF9;&#x6240;&#x6709;&#x5E73;&#x53F0;&#x90FD;&#x901A;&#x7528;&#x7684;&#x673A;&#x5668;&#x7801;</li>
<li>JIT&#x4F1A;&#x6839;&#x636E;&#x5E73;&#x53F0;&#x7C7B;&#x578B;&#xFF0C;&#x751F;&#x4EA7;&#x5E73;&#x53F0;&#x7279;&#x5B9A;&#x7684;&#x673A;&#x5668;&#x7801;<br>
&#x5BF9;&#x4E8E;&#x5360;&#x636E;&#x5927;&#x90E8;&#x5206;&#x7684;&#x4E0D;&#x5E38;&#x7528;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x6211;&#x4EEC;&#x65E0;&#x9700;&#x8017;&#x8D39;&#x65F6;&#x95F4;&#x5C06;&#x5176;&#x7F16;&#x8BD1;&#x6210;&#x673A;&#x5668;&#x7801;&#xFF0C;&#x800C;&#x662F;&#x91C7;&#x7528;&#x89E3;&#x91CA;&#x6267;&#x884C;&#x7684;&#x65B9;&#x5F0F;&#x8FD0;&#x884C;&#x3002;&#x5BF9;&#x4E8E;&#x5C0F;&#x90E8;&#x5206;&#x53D1;&#x7684;&#x70ED;&#x70B9;&#x4EE3;&#x7801;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5C06;&#x5176;&#x7F16;&#x8BD1;&#x6210;&#x673A;&#x5668;&#x7801;&#x3002;&#x6267;&#x884C;&#x6548;&#x7387;Interpreter&lt;C1&lt;C2&#xFF0C;&#x76EE;&#x6807;&#x662F;&#x53D1;&#x73B0;&#x70ED;&#x70B9;&#x4EE3;&#x7801;&#xFF08;hotspot&#x540D;&#x79F0;&#x7531;&#x6765;&#xFF09;<br>
<strong>&#x9003;&#x9038;&#x5206;&#x6790;</strong> &#xFF0C;C2&#x7F16;&#x8BD1;&#x5668;&#x4E2D;&#x4F1A;&#x53D1;&#x73B0;&#x65B0;&#x5EFA;&#x7684;&#x5BF9;&#x8C61;&#x662F;&#x5426;&#x9003;&#x9038;&#xFF0C;&#x82E5;&#x65E0;&#x9003;&#x9038;&#x5219;&#x4F18;&#x5316;&#x5B57;&#x8282;&#x7801;&#x3002;&#x4F7F;&#x7528;-XX:-DoEscapeAnalysis&#x5173;&#x95ED;&#x9003;&#x9038;&#x5206;&#x6790;&#x3002;</li>
</ul>
</li>
<li>&#x65B9;&#x6CD5;&#x5185;&#x8054;&#xFF08;Inlining&#xFF09;<br>
&#x5982;&#x679C;&#x53D1;&#x73B0;&#x70ED;&#x70B9;&#x65B9;&#x6CD5;&#xFF0C;&#x5E76;&#x4E14;&#x957F;&#x5EA6;&#x4E0D;&#x957F;&#x65F6;&#xFF0C;&#x4F1A;&#x8FDB;&#x884C;&#x5185;&#x8054;&#x3002;&#x5373;&#x628A;&#x65B9;&#x6CD5;&#x5185;&#x90E8;&#x4EE3;&#x7801;&#x62F7;&#x8D1D;&#x7C98;&#x8D34;&#x5230;&#x8C03;&#x7528;&#x8005;&#x4F4D;&#x7F6E;&#x3002;&#x8FD8;&#x80FD;&#x8FDB;&#x884C;&#x5E38;&#x91CF;&#x6298;&#x53E0;&#xFF08;constant folding&#xFF09;&#x7684;&#x4F18;&#x5316;&#x3002;</li>
<li>&#x5B57;&#x6BB5;&#x4F18;&#x5316;<br>
&#x5C3D;&#x53EF;&#x80FD;&#x4F7F;&#x7528;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x548C;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x3002;</li>
</ol>
</li>
<li>
<p>&#x53CD;&#x5C04;&#x4F18;&#x5316;</p>
</li>
</ol>
<h2 id="4-java%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8Bjmm">4. java&#x5185;&#x5B58;&#x6A21;&#x578B;JMM</h2>
<p>JMM(java memory model)&#x5B9A;&#x4E49;&#x4E86;&#x4E00;&#x5957;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x8BFB;&#x5199;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x65F6;&#xFF08;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x3001;&#x6570;&#x7EC4;&#xFF09;&#x65F6;&#xFF0C;&#x5BF9;&#x6570;&#x636E;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x3001;&#x6709;&#x5E8F;&#x6027;&#x548C;&#x539F;&#x5B50;&#x6027;&#x7684;&#x89C4;&#x5219;&#x548C;&#x4FDD;&#x969C;&#x3002;</p>
<h3 id="41-%E5%8E%9F%E5%AD%90%E6%80%A7">4.1 &#x539F;&#x5B50;&#x6027;</h3>
<h3 id="42-%E5%8F%AF%E8%A7%81%E6%80%A7">4.2 &#x53EF;&#x89C1;&#x6027;</h3>
<h3 id="43-%E6%9C%89%E5%BA%8F%E6%80%A7">4.3 &#x6709;&#x5E8F;&#x6027;</h3>
<p>&#x8BE6;&#x89C1;&#x5E76;&#x53D1;&#x7F16;&#x7A0B;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Java并发编程]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h1 id="%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B">&#x5E76;&#x53D1;&#x7F16;&#x7A0B;</h1>
<h2 id="%E7%BA%BF%E7%A8%8B%E4%B8%8E%E8%BF%9B%E7%A8%8B">&#x7EBF;&#x7A0B;&#x4E0E;&#x8FDB;&#x7A0B;</h2>
<h3 id="%E8%BF%9B%E7%A8%8B%E5%92%8C%E7%BA%BF%E7%A8%8B%E7%9A%84%E6%A6%82%E5%BF%B5">&#x8FDB;&#x7A0B;&#x548C;&#x7EBF;&#x7A0B;&#x7684;&#x6982;&#x5FF5;</h3>
<p><strong>&#x8FDB;&#x7A0B;</strong></p>
<ul>
<li>&#x7A0B;&#x5E8F;&#x7531;&#x6307;&#x4EE4;&#x548C;&#x6570;&#x636E;&#x7EC4;&#x6210;&#xFF0C;&#x4F46;&#x8FD9;&#x4E9B;&#x6307;&#x4EE4;&#x8981;&#x8FD0;&#x884C;&#xFF0C;&#x6570;&#x636E;&#x8981;&#x8BFB;&#x5199;&#xFF0C;&#x5C31;&#x5FC5;&#x987B;&#x5C06;&#x6307;</li></ul>]]></description><link>https://www.tangkun.site/javabing-fa-bian-cheng/</link><guid isPermaLink="false">63fdc133d9ccf409d265de55</guid><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Tue, 28 Feb 2023 09:11:03 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/e4db4f85e2397c07.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B">&#x5E76;&#x53D1;&#x7F16;&#x7A0B;</h1>
<h2 id="%E7%BA%BF%E7%A8%8B%E4%B8%8E%E8%BF%9B%E7%A8%8B">&#x7EBF;&#x7A0B;&#x4E0E;&#x8FDB;&#x7A0B;</h2>
<h3 id="%E8%BF%9B%E7%A8%8B%E5%92%8C%E7%BA%BF%E7%A8%8B%E7%9A%84%E6%A6%82%E5%BF%B5">&#x8FDB;&#x7A0B;&#x548C;&#x7EBF;&#x7A0B;&#x7684;&#x6982;&#x5FF5;</h3>
<img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/e4db4f85e2397c07.jpg" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;"><p><strong>&#x8FDB;&#x7A0B;</strong></p>
<ul>
<li>&#x7A0B;&#x5E8F;&#x7531;&#x6307;&#x4EE4;&#x548C;&#x6570;&#x636E;&#x7EC4;&#x6210;&#xFF0C;&#x4F46;&#x8FD9;&#x4E9B;&#x6307;&#x4EE4;&#x8981;&#x8FD0;&#x884C;&#xFF0C;&#x6570;&#x636E;&#x8981;&#x8BFB;&#x5199;&#xFF0C;&#x5C31;&#x5FC5;&#x987B;&#x5C06;&#x6307;&#x4EE4;&#x52A0;&#x8F7D;&#x81F3;CPU&#xFF0C;&#x6570;&#x636E;&#x52A0;&#x8F7D;&#x81F3;&#x5185;&#x5B58;&#x3002;&#x8FDB;&#x7A0B;&#x5C31;&#x7B97;&#x7528;&#x6765;&#x52A0;&#x8F7D;&#x6307;&#x4EE4;&#x3001;&#x7BA1;&#x7406;&#x5185;&#x5B58;&#x3001;&#x7BA1;&#x7406;IO&#x7684;</li>
<li>&#x5F53;&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#x88AB;&#x8FD0;&#x884C;&#xFF0C;&#x4ECE;&#x78C1;&#x76D8;&#x52A0;&#x8F7D;&#x8FD9;&#x4E2A;&#x7A0B;&#x5E8F;&#x7684;&#x4EE3;&#x7801;&#x81F3;&#x5185;&#x5B58;&#xFF0C;&#x8FD9;&#x65F6;&#x5C31;&#x5F00;&#x542F;&#x4E86;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x3002;</li>
<li>&#x8FDB;&#x7A0B;&#x5C31;&#x53EF;&#x4EE5;&#x89C6;&#x4E3A;&#x7A0B;&#x5E8F;&#x7684;&#x4E00;&#x4E2A;&#x5B9E;&#x4F8B;&#x3002;&#x5927;&#x90E8;&#x5206;&#x7A0B;&#x5E8F;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x8FD0;&#x884C;&#x591A;&#x4E2A;&#x5B9E;&#x4F8B;&#x8FDB;&#x7A0B;&#x3002;</li>
</ul>
<p><strong>&#x7EBF;&#x7A0B;</strong></p>
<ul>
<li>&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4E4B;&#x5185;&#x53EF;&#x4EE5;&#x5206;&#x4E3A;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;</li>
<li>&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x6307;&#x4EE4;&#x6D41;&#xFF0C;&#x5C06;&#x6307;&#x4EE4;&#x6D41;&#x7684;&#x4E00;&#x6761;&#x6761;&#x6307;&#x4EE4;&#x4EE5;&#x4E00;&#x5B9A;&#x987A;&#x5E8F;&#x4EA4;&#x7ED9;CPU&#x6267;&#x884C;</li>
<li>Java&#x4E2D;&#xFF0C;&#x7EBF;&#x7A0B;&#x4F5C;&#x4E3A;&#x6700;&#x5C0F;&#x8C03;&#x5EA6;&#x5355;&#x4F4D;&#xFF0C;&#x8FDB;&#x7A0B;&#x4F5C;&#x4E3A;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x7684;&#x6700;&#x5C0F;&#x5355;&#x4F4D;&#x3002;&#x5728;windows&#x4E2D;&#x8FDB;&#x7A0B;&#x662F;&#x4E0D;&#x6D3B;&#x52A8;&#x7684;&#xFF0C;&#x53EA;&#x662F;&#x4F5C;&#x4E3A;&#x7EBF;&#x7A0B;&#x7684;&#x5BB9;&#x5668;&#x3002;</li>
</ul>
<h3 id="%E5%B9%B6%E5%8F%91%E5%92%8C%E5%B9%B6%E8%A1%8C%E7%9A%84%E6%A6%82%E5%BF%B5">&#x5E76;&#x53D1;&#x548C;&#x5E76;&#x884C;&#x7684;&#x6982;&#x5FF5;</h3>
<p><strong>&#x5E76;&#x884C;</strong>&#xFF08;parallel&#xFF09;&#x662F;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x52A8;&#x624B;&#x505A;&#xFF08;doing&#xFF09;&#x591A;&#x4EF6;&#x4E8B;&#x60C5;&#x7684;&#x80FD;&#x529B;&#x3002;</p>
<p><strong>&#x5E76;&#x53D1;</strong>&#xFF08;concurrent&#xFF09;&#x662F;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x5E94;&#x5BF9;&#xFF08;dealing with&#xFF09;&#x591A;&#x89C1;&#x4E8B;&#x60C5;&#x7684;&#x80FD;&#x529B;&#x3002;</p>
<h3 id="%E7%BA%BF%E7%A8%8B%E5%9F%BA%E6%9C%AC%E5%BA%94%E7%94%A8">&#x7EBF;&#x7A0B;&#x57FA;&#x672C;&#x5E94;&#x7528;</h3>
<p>&#x5E94;&#x7528;&#x4E4B;&#x5F02;&#x6B65;&#x8C03;&#x7528;</p>
<p>&#x4ECE;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x7684;&#x89D2;&#x5EA6;&#x6765;&#x8BB2;&#xFF0C;&#x5982;&#x679C;</p>
<ul>
<li>&#x9700;&#x8981;&#x7B49;&#x5F85;&#x7ED3;&#x679C;&#x8FD4;&#x56DE;&#xFF0C;&#x624D;&#x80FD;&#x7EE7;&#x7EED;&#x8FD0;&#x884C;&#x5C31;&#x662F;&#x540C;&#x6B65;</li>
<li>&#x4E0D;&#x9700;&#x8981;&#x7B49;&#x5F85;&#x7ED3;&#x679C;&#x8FD4;&#x56DE;&#xFF0C;&#x5C31;&#x80FD;&#x7EE7;&#x7EED;&#x8FD0;&#x884C;&#x5C31;&#x7B97;&#x5F02;&#x6B65;</li>
</ul>
<p>&#x5E94;&#x7528;&#x4E4B;&#x63D0;&#x9AD8;&#x6548;&#x7387;</p>
<h2 id="java%E7%BA%BF%E7%A8%8B">java&#x7EBF;&#x7A0B;</h2>
<h3 id="%E5%88%9B%E5%BB%BA%E5%92%8C%E8%BF%90%E8%A1%8C%E7%BA%BF%E7%A8%8B">&#x521B;&#x5EFA;&#x548C;&#x8FD0;&#x884C;&#x7EBF;&#x7A0B;</h3>
<ol>
<li>
<p>&#x76F4;&#x63A5;&#x4F7F;&#x7528;Thread</p>
</li>
<li>
<p>&#x4F7F;&#x7528;Runnable&#x914D;&#x5408;Thread</p>
<p>lambda&#x7B80;&#x5316;</p>
<pre><code class="language-java">Runnable r = () -&gt; log.debug(&quot;running&quot;);

Thread t = new Thread(() -&gt; {log.debug(&quot;running&quot;);}, t2);
</code></pre>
<p>&#x539F;&#x7406;&#x4E4B;Thread&#x4E0E;Runnable&#x7684;&#x5173;&#x7CFB;</p>
<ul>
<li>&#x521B;&#x5EFA;&#x7EBF;&#x7A0B;&#x7684;&#x65B9;&#x6CD5;1&#x662F;&#x628A;&#x7EBF;&#x7A0B;&#x548C;&#x4EFB;&#x52A1;&#x5408;&#x5E76;&#x5728;&#x4E00;&#x8D77;&#xFF0C;&#x65B9;&#x6CD5;2&#x662F;&#x628A;&#x7EBF;&#x7A0B;&#x548C;&#x4EFB;&#x52A1;&#x5206;&#x5F00;</li>
<li>&#x7528;Runnable&#x66F4;&#x5BB9;&#x6613;&#x4E0E;&#x7EBF;&#x7A0B;&#x6C60;&#x7B49;&#x9AD8;&#x7EA7;API&#x914D;&#x5408;</li>
<li>&#x7528;Runnable&#x8BA9;&#x4EFB;&#x52A1;&#x7C7B;&#x8131;&#x79BB;&#x4E86;Thread&#x7EE7;&#x627F;&#x4F53;&#x7CFB;&#xFF0C;&#x66F4;&#x7075;&#x6D3B;</li>
</ul>
</li>
<li>
<p>FutureTask&#x914D;&#x5408;Thread</p>
<p>FutureTask&#x80FD;&#x591F;&#x63A5;&#x53D7;Callable&#x7C7B;&#x578B;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x7528;&#x6765;&#x5904;&#x7406;&#x6709;&#x8FD4;&#x56DE;&#x7ED3;&#x679C;&#x7684;&#x60C5;&#x51B5;</p>
</li>
</ol>
<h3 id="%E6%9F%A5%E7%9C%8B%E7%BA%BF%E7%A8%8B">&#x67E5;&#x770B;&#x7EBF;&#x7A0B;</h3>
<p>&#x89C2;&#x5BDF;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x8FD0;&#x884C;</p>
<ul>
<li>&#x4EA4;&#x66FF;&#x6267;&#x884C;</li>
<li>&#x5148;&#x540E;&#x987A;&#x5E8F;&#x4E0D;&#x53D7;&#x6211;&#x4EEC;&#x63A7;&#x5236;</li>
</ul>
<p>&#x67E5;&#x770B;&#x8FDB;&#x7A0B;&#x65B9;&#x6CD5;</p>
<p>windows</p>
<ul>
<li>&#x4EFB;&#x52A1;&#x7BA1;&#x7406;&#x5668;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x8FDB;&#x7A0B;&#x4E5F;&#x53EF;&#x4EE5;&#x6740;&#x6B7B;&#x8FDB;&#x7A0B;</li>
<li>tasklist&#x67E5;&#x770B;&#x8FDB;&#x7A0B;</li>
<li>taskkill&#x6740;&#x6B7B;&#x8FDB;&#x7A0B;</li>
</ul>
<p>linux</p>
<ul>
<li>ps -fe&#x67E5;&#x770B;&#x6240;&#x6709;&#x8FDB;&#x7A0B;</li>
<li>ps -fT -p <pid>&#x67E5;&#x770B;&#x67D0;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF08;PID&#xFF09;&#x7684;&#x6240;&#x6709;&#x7EBF;&#x7A0B;</pid></li>
<li>kill&#x6740;&#x6B7B;&#x8FDB;&#x7A0B;</li>
<li>top&#x6309;&#x5927;&#x5199;H&#x5207;&#x6362;&#x662F;&#x5426;&#x663E;&#x793A;&#x7EBF;&#x7A0B;</li>
<li>top -H -p <pid>&#x67E5;&#x770B;&#x67D0;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF08;PID)&#x7684;&#x6240;&#x6709;&#x7EBF;&#x7A0B;</pid></li>
</ul>
<p>Java</p>
<ul>
<li>jps&#x547D;&#x4EE4;&#x67E5;&#x770B;&#x6240;&#x6709;Java&#x8FDB;&#x7A0B;</li>
<li>jstack <pid> &#x67E5;&#x770B;&#x67D0;&#x4E2A;Java&#x8FDB;&#x7A0B;&#xFF08;PID&#xFF09;&#x7684;&#x6240;&#x6709;&#x7EBF;&#x7A0B;</pid></li>
<li>jconsole&#x67E5;&#x770B;&#x67D0;&#x4E2A;Java&#x8FDB;&#x7A0B;&#x4E2D;&#x7EBF;&#x7A0B;&#x7684;&#x8FD0;&#x884C;&#x60C5;&#x51B5;&#xFF08;&#x56FE;&#x5F62;&#x754C;&#x9762;&#xFF09;</li>
</ul>
<h3 id="%E7%BA%BF%E7%A8%8Bapi">&#x7EBF;&#x7A0B;API</h3>
<h3 id="%E5%8E%9F%E7%90%86%E4%B9%8B%E7%BA%BF%E7%A8%8B%E8%BF%90%E8%A1%8C">&#x539F;&#x7406;&#x4E4B;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;</h3>
<p><strong>&#x6808;&#x4E0E;&#x6808;&#x5E27;</strong></p>
<p>&#x6211;&#x4EEC;&#x90FD;&#x77E5;&#x9053;JVM&#xFF08;Java&#x865A;&#x62DF;&#x673A;&#x6808;&#xFF09;&#x4E2D;&#x7531;&#x5806;&#x3001;&#x6808;&#x3001;&#x65B9;&#x6CD5;&#x533A;&#x6240;&#x7EC4;&#x6210;&#xFF0C;&#x5176;&#x4E2D;&#x6808;&#x5185;&#x5B58;&#x662F;&#x7ED9;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#x7684;&#xFF0C;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x542F;&#x52A8;&#x540E;&#xFF0C;&#x865A;&#x62DF;&#x673A;&#x90FD;&#x4F1A;&#x4E3A;&#x5176;&#x5206;&#x914D;&#x4E00;&#x5757;&#x6808;&#x5185;&#x5B58;&#x3002;</p>
<ul>
<li>&#x6BCF;&#x4E2A;&#x6808;&#x7531;&#x591A;&#x4E2A;&#x6808;&#x5E27;&#xFF08;Frame&#xFF09;&#x7EC4;&#x6210;&#xFF0C;&#x5BF9;&#x5E94;&#x7740;&#x6BCF;&#x6B21;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x65F6;&#x6240;&#x5360;&#x7528;&#x7684;&#x5185;&#x5B58;</li>
<li>&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x53EA;&#x80FD;&#x7531;&#x4E00;&#x4E2A;&#x6D3B;&#x52A8;&#x6808;&#x5E27;&#xFF0C;&#x5BF9;&#x5E94;&#x7740;&#x5F53;&#x524D;&#x6B63;&#x5728;&#x6267;&#x884C;&#x7684;&#x90A3;&#x4E2A;&#x65B9;&#x6CD5;</li>
</ul>
<p>&#x7EBF;&#x7A0B;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF08;Thread Context Switch&#xFF09;</p>
<p>&#x56E0;&#x4E3A;&#x4EE5;&#x4E0B;&#x4E00;&#x4E9B;&#x539F;&#x56E0;&#x5BFC;&#x81F4;cpu&#x4E0D;&#x518D;&#x6267;&#x884C;&#x5F53;&#x524D;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x8F6C;&#x800C;&#x6267;&#x884C;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x4EE3;&#x7801;</p>
<ul>
<li>&#x7EBF;&#x7A0B;&#x7684;cpu&#x65F6;&#x95F4;&#x7247;&#x7528;&#x5B8C;</li>
<li>&#x5783;&#x573E;&#x56DE;&#x6536;</li>
<li>&#x6709;&#x66F4;&#x9AD8;&#x4F18;&#x5148;&#x7EA7;&#x7684;&#x7EBF;&#x7A0B;&#x9700;&#x8981;&#x8FD0;&#x884C;</li>
<li>&#x7EBF;&#x7A0B;&#x81EA;&#x5DF1;&#x8C03;&#x7528;&#x4E86;sleep&#x3001;yield&#x3001;wait&#x3001;join&#x3001;park&#x3001;synchronized&#x3001;lock&#x7B49;&#x65B9;&#x6CD5;</li>
</ul>
<p>&#x5F53;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x53D1;&#x751F;&#x65F6;&#xFF0C;&#x9700;&#x8981;&#x7531;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4FDD;&#x5B58;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x5E76;&#x6062;&#x590D;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x72B6;&#x6001;&#xFF0C;java&#x4E2D;&#x5BF9;&#x5E94;&#x7684;&#x6982;&#x5FF5;&#x5C31;&#x7B97;&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;&#xFF08;Program Counter Register&#xFF09;&#xFF0C;&#x4F5C;&#x7528;&#x662F;&#x8BB0;&#x4F4F;&#x4E0B;&#x4E00;&#x6761;jvm&#x6307;&#x4EE4;&#x7684;&#x6267;&#x884C;&#x5730;&#x5740;&#xFF0C;&#x662F;&#x7EBF;&#x7A0B;&#x79C1;&#x6709;&#x7684;&#x3002;</p>
<ul>
<li>&#x72B6;&#x6001;&#x5305;&#x62EC;&#x7A0B;&#x5E8F;&#x8BA1;&#x6570;&#x5668;&#x3001;&#x865A;&#x62DF;&#x673A;&#x6808;&#x4E2D;&#x6BCF;&#x4E2A;&#x6808;&#x5E27;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x5982;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x3001;&#x64CD;&#x4F5C;&#x6570;&#x6808;&#x3001;&#x8FD4;&#x56DE;&#x5730;&#x5740;&#x7B49;</li>
<li>Context Switch&#x9891;&#x7E41;&#x53D1;&#x751F;&#x4F1A;&#x5F71;&#x54CD;&#x6027;&#x80FD;</li>
</ul>
<h3 id="%E5%B8%B8%E8%A7%81%E6%96%B9%E6%B3%95">&#x5E38;&#x89C1;&#x65B9;&#x6CD5;</h3>
<table>
<thead>
<tr>
<th>&#x65B9;&#x6CD5;&#x540D;</th>
<th>&#x529F;&#x80FD;&#x8BF4;&#x660E;</th>
<th>&#x6CE8;&#x610F;</th>
</tr>
</thead>
<tbody>
<tr>
<td>start()</td>
<td>&#x542F;&#x52A8;&#x4E00;&#x4E2A;&#x65B0;&#x7EBF;&#x7A0B;&#xFF0C;&#x5728;&#x65B0;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;run&#x65B9;&#x6CD5;&#x4E2D;&#x7684;&#x4EE3;&#x7801;</td>
<td>start&#x65B9;&#x6CD5;&#x53EA;&#x662F;&#x8BA9;&#x73B0;&#x573A;&#x8FDB;&#x5165;&#x5C31;&#x7EEA;&#xFF0C;&#x91CC;&#x9762;&#x4EE3;&#x7801;&#x4E0D;&#x4E00;&#x5B9A;&#x7ACB;&#x523B;&#x8FD0;&#x884C;&#xFF08;CPU&#x65F6;&#x95F4;&#x7247;&#x8FD8;&#x6CA1;&#x5206;&#x914D;&#xFF09;&#x3002;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;start&#x65B9;&#x6CD5;&#x53EA;&#x80FD;&#x8C03;&#x7528;&#x4E00;&#x6B21;&#xFF0C;&#x8C03;&#x7528;&#x591A;&#x6B21;&#x4F1A;&#x51FA;&#x73B0;IllegalThreadStateException</td>
</tr>
<tr>
<td>run()</td>
<td>&#x65B0;&#x7EBF;&#x7A0B;&#x542F;&#x52A8;&#x540E;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x6CD5;</td>
<td>&#x5982;&#x679C;&#x6784;&#x9020;Thread&#x5BF9;&#x8C61;&#x65F6;&#x4F20;&#x9012;&#x4E86;Runnable&#x53C2;&#x6570;&#xFF0C;&#x5219;&#x7EBF;&#x7A0B;&#x542F;&#x52A8;&#x540E;&#x4F1A;&#x8C03;&#x7528;Runnable&#x4E2D;&#x7684;run&#x65B9;&#x6CD5;&#xFF0C;&#x5426;&#x5219;&#x9ED8;&#x8BA4;&#x4E0D;&#x6267;&#x884C;&#x4EFB;&#x4F55;&#x64CD;&#x4F5C;&#x3002;&#x4F46;&#x53EF;&#x4EE5;&#x521B;&#x5EFA;Thread&#x5B50;&#x7C7B;&#x5BF9;&#x8C61;&#xFF0C;&#x6765;&#x8986;&#x76D6;&#x9ED8;&#x8BA4;&#x884C;&#x4E3A;&#x3002;</td>
</tr>
<tr>
<td>join()</td>
<td>&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x7ED3;&#x675F;</td>
<td></td>
</tr>
<tr>
<td>join(long n)</td>
<td>&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x7ED3;&#x675F;&#xFF0C;&#x6700;&#x591A;&#x7B49;&#x5F85;n&#x6BEB;&#x79D2;</td>
<td></td>
</tr>
<tr>
<td>getId()</td>
<td>&#x83B7;&#x53D6;&#x7EBF;&#x7A0B;id</td>
<td>id&#x552F;&#x4E00;</td>
</tr>
<tr>
<td>getName()</td>
<td>&#x83B7;&#x53D6;&#x7EBF;&#x7A0B;&#x540D;</td>
<td></td>
</tr>
<tr>
<td>setName()</td>
<td>&#x4FEE;&#x6539;&#x7EBF;&#x7A0B;&#x540D;</td>
<td></td>
</tr>
<tr>
<td>getPriority()</td>
<td>&#x83B7;&#x53D6;&#x7EBF;&#x7A0B;&#x4F18;&#x5148;&#x7EA7;</td>
<td></td>
</tr>
<tr>
<td>setPriority()</td>
<td>&#x4FEE;&#x6539;&#x7EBF;&#x7A0B;&#x4F18;&#x5148;&#x7EA7;</td>
<td>java&#x4E2D;&#x89C4;&#x5B9A;&#x7EBF;&#x7A0B;&#x4F18;&#x5148;&#x7EA7;&#x662F;1~10&#x7684;&#x6574;&#x6570;&#xFF0C;&#x8F83;&#x5927;&#x4F18;&#x5148;&#x7EA7;&#x80FD;&#x63D0;&#x9AD8;&#x7EBF;&#x7A0B;&#x88AB;CPU&#x8C03;&#x5EA6;&#x7684;&#x51E0;&#x7387;</td>
</tr>
<tr>
<td>getState</td>
<td></td>
<td>java&#x4E2D;&#x7EBF;&#x7A0B;&#x72B6;&#x6001;&#x662F;&#x7528;6&#x4E2A;enum&#x8868;&#x793A;&#xFF0C;&#x5206;&#x522B;&#x4E3A;NEW&#x3001;RUNNABLE&#x3001;BLOCKED&#x3001;WAITING&#x3001;TIME_WAITING&#x3001;TERMINATED</td>
</tr>
<tr>
<td>isInterrupted()</td>
<td>&#x5224;&#x65AD;&#x662F;&#x5426;&#x88AB;&#x6253;&#x65AD;</td>
<td>&#x4E0D;&#x4F1A;&#x6E05;&#x9664;&#x6253;&#x65AD;&#x6807;&#x8BB0;</td>
</tr>
<tr>
<td>isAlive()</td>
<td>&#x7EBF;&#x7A0B;&#x662F;&#x5426;&#x5B58;&#x6D3B;</td>
<td></td>
</tr>
<tr>
<td>interrupt()</td>
<td>&#x6253;&#x65AD;&#x7EBF;&#x7A0B;</td>
<td>&#x5982;&#x679C;&#x88AB;&#x6253;&#x65AD;&#x7EBF;&#x7A0B;&#x6B63;&#x5728;sleep&#x3001;wait&#x3001;join&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4;&#x88AB;&#x6253;&#x65AD;&#x7EBF;&#x7A0B;&#x629B;&#x51FA;InterruptedException&#xFF0C;&#x5E76;<em>&#x6E05;<strong>&#x9664;&#x6253;&#x65AD;&#x6807;&#x8BB0;</strong></em>&#xFF1B;&#x5982;&#x679C;&#x6253;&#x65AD;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x5219;&#x4F1A;<em><strong>&#x8BBE;&#x7F6E;&#x6253;&#x65AD;&#x6807;&#x8BB0;</strong></em>&#xFF1B;park&#x7684;&#x7EBF;&#x7A0B;&#x88AB;&#x6253;&#x65AD;&#xFF0C;<em><strong>&#x4E0D;&#x4F1A;&#x8BBE;&#x7F6E;&#x6253;&#x65AD;&#x6807;&#x8BB0;</strong></em></td>
</tr>
<tr>
<td>interrupted()</td>
<td>&#x5224;&#x65AD;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x662F;&#x5426;&#x88AB;&#x6253;&#x65AD;</td>
<td>&#x4F1A;&#x6E05;&#x9664;&#x6253;&#x65AD;&#x6807;&#x8BB0;</td>
</tr>
<tr>
<td>currentThread()</td>
<td>&#x83B7;&#x53D6;&#x5F53;&#x524D;&#x6B63;&#x5728;&#x6267;&#x884C;&#x7684;&#x7EBF;&#x7A0B;</td>
<td></td>
</tr>
<tr>
<td>sleep(long n)</td>
<td>&#x8BA9;&#x5F53;&#x524D;&#x6267;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#x4F11;&#x7720;n&#x6BEB;&#x79D2;&#xFF0C;&#x4F11;&#x7720;&#x65F6;&#x8BA9;&#x51FA;cpu&#x65F6;&#x95F4;&#x7247;</td>
<td></td>
</tr>
<tr>
<td>yield()</td>
<td>&#x63D0;&#x793A;&#x7EBF;&#x7A0B;&#x8C03;&#x5EA6;&#x5668;&#x8BA9;&#x51FA;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x5BF9;cpu&#x7684;&#x4F7F;&#x7528;</td>
<td>&#x4E3B;&#x8981;&#x4E3A;&#x4E86;&#x6D4B;&#x8BD5;&#x548C;&#x8C03;&#x8BD5;</td>
</tr>
</tbody>
</table>
<p><strong>sleep</strong></p>
<ol>
<li>&#x8C03;&#x7528;sleep&#x4F1A;&#x8BA9;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x4ECE;Running&#x8FDB;&#x5165;Timed Waiting&#x72B6;&#x6001;</li>
<li>&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;interrupt&#x65B9;&#x6CD5;&#x6253;&#x65AD;&#x6B63;&#x5728;&#x7761;&#x7720;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x8FD9;&#x65F6;sleep&#x65B9;&#x6CD5;&#x4F1A;&#x629B;&#x51FA;InterruptedException</li>
<li>&#x7761;&#x7720;&#x7ED3;&#x675F;&#x540E;&#x7684;&#x7EBF;&#x7A0B;&#x672A;&#x5FC5;&#x4F1A;&#x7ACB;&#x523B;&#x5F97;&#x5230;&#x6267;&#x884C;</li>
</ol>
<p><strong>yield</strong></p>
<ol>
<li>&#x8C03;&#x7528;yield&#x4F1A;&#x8BA9;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;Running&#x8FDB;&#x5165;Runnable&#x72B6;&#x6001;&#xFF0C;&#x7136;&#x540E;&#x8C03;&#x5EA6;&#x6267;&#x884C;&#x5176;&#x4ED6;&#x540C;&#x4F18;&#x5148;&#x7EA7;&#x7684;&#x7EBF;&#x7A0B;&#x3002;&#x5982;&#x679C;&#x8FD9;&#x65F6;&#x6CA1;&#x6709;&#x540C;&#x4F18;&#x5148;&#x7EA7;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x90A3;&#x4E48;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x8BA9;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x6682;&#x505C;&#x7684;&#x6548;&#x679C;&#x3002;</li>
<li>&#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x4F9D;&#x8D56;&#x4E8E;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x4EFB;&#x52A1;&#x8C03;&#x5EA6;&#x5668;</li>
</ol>
<p><strong>join</strong></p>
<p><strong>interrupt</strong></p>
<p>&#x5982;&#x679C;&#x88AB;&#x6253;&#x65AD;&#x7EBF;&#x7A0B;&#x6B63;&#x5728;sleep&#x3001;wait&#x3001;join&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4;&#x88AB;&#x6253;&#x65AD;&#x7EBF;&#x7A0B;&#x629B;&#x51FA;InterruptedException&#xFF0C;&#x5E76;<em><strong>&#x6E05;&#x9664;&#x6253;&#x65AD;&#x6807;&#x8BB0;</strong></em>&#xFF1B;&#x5982;&#x679C;&#x6253;&#x65AD;&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x7EBF;&#x7A0B;&#xFF0C;&#x5219;&#x4F1A;<em><strong>&#x8BBE;&#x7F6E;&#x6253;&#x65AD;&#x6807;&#x8BB0;</strong></em>&#xFF1B;park&#x7684;&#x7EBF;&#x7A0B;&#x88AB;&#x6253;&#x65AD;&#xFF0C;<em><strong>&#x4E0D;&#x4F1A;&#x8BBE;&#x7F6E;&#x6253;&#x65AD;&#x6807;&#x8BB0;</strong></em></p>
<p><strong>&#x4E24;&#x9636;&#x6BB5;&#x7EC8;&#x6B62;&#x6A21;&#x5F0F;</strong></p>
<p>Two Phase Termination</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/f6df5ccae927b851.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<p>&#x9519;&#x8BEF;&#x601D;&#x8DEF;</p>
<ul>
<li>&#x4F7F;&#x7528;&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;&#x7684;stop()&#x65B9;&#x6CD5;&#x505C;&#x6B62;&#x7EBF;&#x7A0B;
<ul>
<li>stop&#x65B9;&#x6CD5;&#x4F1A;&#x771F;&#x6B63;&#x6740;&#x6B7B;&#x7EBF;&#x7A0B;&#xFF0C;&#x5982;&#x679C;&#x8FD9;&#x65F6;&#x7EBF;&#x7A0B;&#x9501;&#x4F4F;&#x4E86;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#xFF0C;&#x90A3;&#x4E48;&#x5F53;&#x5B83;&#x88AB;&#x6740;&#x6B7B;&#x540E;&#x5C31;&#x518D;&#x4E5F;&#x6CA1;&#x6709;&#x673A;&#x4F1A;&#x91CA;&#x653E;&#x9501;&#xFF0C;&#x5176;&#x5B83;&#x7EBF;&#x7A0B;&#x5C06;&#x6C38;&#x8FDC;&#x65E0;&#x6CD5;&#x83B7;&#x53D6;&#x9501;</li>
</ul>
</li>
<li>&#x4F7F;&#x7528;System.exit(int)&#x65B9;&#x6CD5;&#x505C;&#x6B62;&#x7EBF;&#x7A0B;
<ul>
<li>&#x76EE;&#x7684;&#x4EC5;&#x662F;&#x505C;&#x6B62;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x4F46;&#x8FD9;&#x79CD;&#x505A;&#x6CD5;&#x4F1A;&#x8BA9;&#x6574;&#x4E2A;&#x7A0B;&#x5E8F;&#x505C;&#x6B62;</li>
</ul>
</li>
</ul>
<p><strong>&#x6253;&#x65AD;park&#x7EBF;&#x7A0B;&#x4E0D;&#x4F1A;&#x6E05;&#x9664;&#x6253;&#x65AD;&#x72B6;&#x6001;</strong></p>
<p><strong>&#x7EBF;&#x7A0B;&#x4F18;&#x5148;&#x7EA7;</strong></p>
<ul>
<li>&#x7EBF;&#x7A0B;&#x4F18;&#x5148;&#x7EA7;&#x4F1A;&#x63D0;&#x793A;&#x8C03;&#x5EA6;&#x5668;&#x4F18;&#x5148;&#x8C03;&#x5EA6;&#x8BE5;&#x7EBF;&#x7A0B;</li>
<li>&#x5982;&#x679C;cpu&#x8F83;&#x5FD9;&#xFF0C;&#x90A3;&#x4E48;&#x4F18;&#x5148;&#x7EA7;&#x9AD8;&#x7684;&#x7EBF;&#x7A0B;&#x4F1A;&#x83B7;&#x53D6;&#x66F4;&#x591A;&#x7684;&#x65F6;&#x95F4;&#x7247;&#xFF0C;&#x4F46;cpu&#x95F2;&#x65F6;&#xFF0C;&#x4F18;&#x5148;&#x7EA7;&#x51E0;&#x4E4E;&#x6CA1;&#x4F5C;&#x7528;</li>
</ul>
<p><strong>&#x4E3B;&#x7EBF;&#x7A0B;&#x4E0E;&#x5B88;&#x62A4;&#x7EBF;&#x7A0B;</strong></p>
<p>&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;Java&#x8FDB;&#x7A0B;&#x8981;&#x7B49;&#x5F85;&#x6240;&#x6709;&#x7EBF;&#x7A0B;&#x90FD;&#x8FD0;&#x884C;&#x7ED3;&#x675F;&#x624D;&#x4F1A;&#x7ED3;&#x675F;&#x3002;&#x6709;&#x4E00;&#x79CD;&#x7279;&#x6B8A;&#x7684;&#x7EBF;&#x7A0B;&#x53EB;&#x5B88;&#x62A4;&#x7EBF;&#x7A0B;&#xFF0C;&#x53EA;&#x8981;&#x5176;&#x4ED6;&#x975E;&#x5B88;&#x62A4;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x7ED3;&#x675F;&#xFF0C;&#x5373;&#x4F7F;&#x5B88;&#x62A4;&#x7EBF;&#x7A0B;&#x4EE3;&#x7801;&#x6CA1;&#x6709;&#x6267;&#x884C;&#x5B8C;&#x5168;&#xFF0C;&#x4E5F;&#x4F1A;&#x5F3A;&#x5236;&#x7ED3;&#x675F;&#x3002;</p>
<pre><code class="language-java">t1.setDaemon(true);
</code></pre>
<ul>
<li>&#x5783;&#x573E;&#x56DE;&#x6536;&#x5668;&#x7EBF;&#x7A0B;&#x5C31;&#x662F;&#x4E00;&#x79CD;&#x5B88;&#x62A4;&#x7EBF;&#x7A0B;</li>
<li>Tomcat&#x4E2D;Acceptor&#x548C;Poller&#x7EBF;&#x7A0B;&#x90FD;&#x662F;&#x5B88;&#x62A4;&#x7EBF;&#x7A0B;&#xFF0C;&#x6240;&#x4EE5;Tomecat&#x63A5;&#x6536;&#x5230;shutdown&#x547D;&#x4EE4;&#x540E;&#xFF0C;&#x4E0D;&#x4F1A;&#x7B49;&#x5F85;&#x5B83;&#x4EEC;&#x5904;&#x7406;&#x5B8C;&#x5F53;&#x524D;&#x8BF7;&#x6C42;&#x3002;</li>
</ul>
<h3 id="%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81">&#x7EBF;&#x7A0B;&#x72B6;&#x6001;</h3>
<p>&#x65B0;&#x5EFA;new -&gt; run() -&gt; &#x5C31;&#x7EEA;ready -&gt; start() -&gt; &#x8FD0;&#x884C;running -&gt; sleep()/wait() -&gt; &#x963B;&#x585E;waiting/time_waiting/blocked -&gt; &#x9500;&#x6BC1;terminated</p>
<h2 id="%E5%85%B1%E4%BA%AB%E6%A8%A1%E5%9E%8B%E4%B9%8B%E7%AE%A1%E7%A8%8B">&#x5171;&#x4EAB;&#x6A21;&#x578B;&#x4E4B;&#x7BA1;&#x7A0B;</h2>
<h3 id="%E5%85%B1%E4%BA%AB%E9%97%AE%E9%A2%98">&#x5171;&#x4EAB;&#x95EE;&#x9898;</h3>
<p><strong>&#x95EE;&#x9898;&#x5206;&#x6790;</strong></p>
<p>&#x5BF9;&#x4E8E;i++&#x800C;&#x8A00;&#xFF08;i&#x4E3A;&#x9759;&#x6001;&#x53D8;&#x91CF;&#xFF09;&#xFF0C;&#x5B9E;&#x9645;&#x4F1A;&#x4EA7;&#x751F;&#x5982;&#x4E0B;&#x7684;JVM&#x5B57;&#x8282;&#x7801;&#x6307;&#x4EE4;</p>
<pre><code>getstatic	i// &#x83B7;&#x53D6;&#x9759;&#x6001;&#x53D8;&#x91CF;i&#x7684;&#x503C;
iconst_1	// &#x51C6;&#x5907;&#x5E38;&#x91CF;i
iadd		// &#x81EA;&#x589E;
putstatic	i// &#x5C06;&#x4FEE;&#x6539;&#x540E;&#x7684;&#x503C;&#x5B58;&#x5165;&#x9759;&#x6001;&#x53D8;&#x91CF;i
</code></pre>
<p><strong>&#x4E34;&#x754C;&#x533A; Critical Section</strong></p>
<ul>
<li>&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x672C;&#x8EAB;&#x662F;&#x6CA1;&#x6709;&#x95EE;&#x9898;&#x7684;</li>
<li>&#x95EE;&#x9898;&#x5728;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;<strong>&#x5171;&#x4EAB;&#x8D44;&#x6E90;</strong>
<ul>
<li>&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x8BFB;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x4E5F;&#x6CA1;&#x95EE;&#x9898;</li>
<li>&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5BF9;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x8BFB;&#x5199;&#x64CD;&#x4F5C;&#x65F6;&#x53D1;&#x751F;&#x6307;&#x4EE4;&#x4EA4;&#x9519;&#xFF0C;&#x5C31;&#x4F1A;&#x51FA;&#x73B0;&#x95EE;&#x9898;</li>
</ul>
</li>
<li>&#x4E00;&#x6BB5;&#x4EE3;&#x7801;&#x5757;&#x5185;&#x5B58;&#x5728;&#x5BF9;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x7684;&#x591A;&#x7EBF;&#x7A0B;&#x8BFB;&#x5199;&#x64CD;&#x4F5C;&#xFF0C;&#x79F0;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5757;&#x4E3A;<strong>&#x4E34;&#x754C;&#x533A;</strong></li>
</ul>
<p><strong>&#x7ADE;&#x6001;&#x6761;&#x4EF6; Race Condition</strong></p>
<p>&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x4E34;&#x754C;&#x533A;&#x5185;&#x6267;&#x884C;&#xFF0C;&#x7531;&#x4E8E;&#x4EE3;&#x7801;&#x7684;<strong>&#x6267;&#x884C;&#x5E8F;&#x5217;&#x4E0D;&#x540C;</strong>&#x800C;&#x5BFC;&#x81F4;&#x7ED3;&#x679C;&#x65E0;&#x6CD5;&#x9884;&#x6D4B;&#xFF0C;&#x79F0;&#x4E4B;&#x4E3A;&#x53D1;&#x751F;&#x4E86;&#x7ADE;&#x6001;&#x6761;&#x4EF6;&#x3002;</p>
<h3 id="synchronized-%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88"><strong>synchronized &#x89E3;&#x51B3;&#x65B9;&#x6848;</strong></h3>
<h4 id="%E5%BA%94%E7%94%A8%E4%B9%8B%E4%BA%92%E6%96%A5">&#x5E94;&#x7528;&#x4E4B;&#x4E92;&#x65A5;</h4>
<ul>
<li>&#x963B;&#x585E;&#x5F0F;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF1A;synchronized, Lock</li>
<li>&#x975E;&#x963B;&#x585E;&#x5F0F;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#xFF1A;&#x539F;&#x5B50;&#x53D8;&#x91CF;</li>
</ul>
<p>java&#x4E2D;&#x4E92;&#x65A5;&#x548C;&#x540C;&#x6B65;&#x90FD;&#x53EF;&#x4EE5;&#x91C7;&#x7528; synchronized &#x5173;&#x952E;&#x5B57;&#x5B8C;&#x6210;&#xFF0C;&#x4ED6;&#x4EEC;&#x7684;&#x533A;&#x522B;&#xFF1A;</p>
<ul>
<li>&#x4E92;&#x65A5;&#x662F;&#x4FDD;&#x8BC1;&#x4E34;&#x754C;&#x533A;&#x7684;&#x7ADE;&#x6001;&#x6761;&#x4EF6;&#x53D1;&#x751F;&#xFF0C;&#x540C;&#x4E00;&#x65F6;&#x523B;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x4E34;&#x754C;&#x533A;&#x4EE3;&#x7801;</li>
<li>&#x540C;&#x6B65;&#x662F;&#x7531;&#x4E8E;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x7684;&#x5148;&#x540E;&#x987A;&#x5E8F;&#x4E0D;&#x540C;&#xFF0C;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7B49;&#x5F85;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x8FD0;&#x884C;&#x5230;&#x67D0;&#x4E2A;&#x70B9;</li>
</ul>
<pre><code class="language-java">sychronized(Object){
    &#x4E34;&#x754C;&#x533A;
}
</code></pre>
<p>synchronized &#x5B9E;&#x9645;&#x662F;&#x7528;<strong>&#x5BF9;&#x8C61;&#x9501;</strong>&#x4FDD;&#x8BC1;<strong>&#x4E34;&#x754C;&#x533A;&#x4EE3;&#x7801;&#x7684;&#x539F;&#x5B50;&#x6027;</strong></p>
<ul>
<li>&#x5982;&#x679C;&#x628A;synchronized(obj)&#x653E;&#x5728;for&#x5FAA;&#x73AF;&#x5916;&#x9762;&#xFF0C;&#x5982;&#x4F55;&#x7406;&#x89E3;&#xFF1F; --&#x539F;&#x5B50;&#x6027;</li>
<li>&#x5982;&#x679C;t1 synchronized(obj1)&#x800C;t2 synchronized(obj2)&#x4F1A;&#x600E;&#x6837;&#x8FD0;&#x4F5C;&#xFF1F; --&#x9501;&#x5BF9;&#x8C61;</li>
<li>&#x5982;&#x679C;t1 synchronized(obj)&#x800C;t2&#x6CA1;&#x6709;&#x52A0;&#x4F1A;&#x600E;&#x4E48;&#x6837;&#xFF1F; --&#x9501;&#x5BF9;&#x8C61;</li>
</ul>
<h4 id="%E6%96%B9%E6%B3%95%E4%B8%8A%E7%9A%84synchronized"><strong>&#x65B9;&#x6CD5;&#x4E0A;&#x7684;synchronized</strong></h4>
<pre><code class="language-java">class Test{
    public synchronized void test(){      
    }
}
&#x7B49;&#x4EF7;&#x4E8E;
class Test{
    public void test(){
        synchronized(this){      
        }
    }
}

class Test{
    public synchronized static void test(){
        synchronized(Test.class){   
        }
    }
}
&#x7B49;&#x4EF7;&#x4E8E;
class Test{
    public static void test(){
        synchronized(Test.class){
        }
    }
}
</code></pre>
<p><strong>&#x4E0D;&#x52A0;synchronized&#x7684;&#x65B9;&#x6CD5;</strong> &#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;</p>
<p><strong>&#x7EBF;&#x7A0B;&#x516B;&#x9501;</strong></p>
<h3 id="%E5%8F%98%E9%87%8F%E7%9A%84%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E5%88%86%E6%9E%90">&#x53D8;&#x91CF;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x5206;&#x6790;</h3>
<h4 id="%E6%88%90%E5%91%98%E5%8F%98%E9%87%8F%E5%92%8C%E9%9D%99%E6%80%81%E5%8F%98%E9%87%8F%E6%98%AF%E5%90%A6%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%EF%BC%9F"><strong>&#x6210;&#x5458;&#x53D8;&#x91CF;</strong>&#x548C;&#x9759;&#x6001;&#x53D8;&#x91CF;&#x662F;&#x5426;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF1F;</h4>
<ul>
<li>&#x5982;&#x679C;&#x5B83;&#x4EEC;&#x6CA1;&#x6709;&#x5171;&#x4EAB;&#xFF0C;&#x5219;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;</li>
<li>&#x5982;&#x679C;&#x5B83;&#x4EEC;&#x88AB;&#x5171;&#x4EAB;&#x4E86;&#xFF0C;&#x6839;&#x5B83;&#x4EEC;&#x72B6;&#x6001;&#x662F;&#x5426;&#x80FD;&#x6539;&#x53D8;&#xFF0C;&#x53C8;&#x5206;&#x4E24;&#x79CD;&#x60C5;&#x51B5;
<ul>
<li>&#x5982;&#x679C;&#x53EA;&#x6709;&#x8BFB;&#x64CD;&#x4F5C;&#xFF0C;&#x5219;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;</li>
<li>&#x5982;&#x679C;&#x6709;&#x8BFB;&#x5199;&#x64CD;&#x4F5C;&#xFF0C;&#x5219;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x662F;&#x4E34;&#x754C;&#x533A;&#xFF0C;&#x9700;&#x8981;&#x8003;&#x8651;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;</li>
</ul>
</li>
</ul>
<h4 id="%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E6%98%AF%E5%90%A6%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%EF%BC%9F"><strong>&#x5C40;&#x90E8;&#x53D8;&#x91CF;</strong>&#x662F;&#x5426;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF1F;</h4>
<ul>
<li>&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;</li>
<li>&#x4F46;&#x5C40;&#x90E8;&#x53D8;&#x91CF;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x5219;&#x672A;&#x5FC5;
<ul>
<li>&#x5982;&#x679C;&#x8BE5;&#x5BF9;&#x8C61;&#x6CA1;&#x6709;&#x9003;&#x79BB;&#x65B9;&#x6CD5;&#x7684;&#x4F5C;&#x7528;&#x8303;&#x56F4;&#xFF0C;&#x5B83;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;</li>
<li>&#x5982;&#x679C;&#x8BE5;&#x5BF9;&#x8C61;&#x9003;&#x79BB;&#x65B9;&#x6CD5;&#x7684;&#x4F5C;&#x7528;&#x8303;&#x56F4;&#xFF0C;&#x9700;&#x8981;&#x8003;&#x8651;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;</li>
</ul>
</li>
</ul>
<h4 id="%E5%B8%B8%E8%A7%81%E7%9A%84%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E7%B1%BB">&#x5E38;&#x89C1;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7C7B;</h4>
<ul>
<li>String</li>
<li>Integer</li>
<li>StringBuffer</li>
<li>Random</li>
<li>Vector</li>
<li>HashTable</li>
<li>JUC&#x5305;&#x4E0B;&#x7684;&#x7C7B;</li>
</ul>
<p>&#x8FD9;&#x91CC;&#x8BF4;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x662F;&#x6307;&#xFF0C;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;&#x5B83;&#x4EEC;&#x540C;&#x4E00;&#x4E2A;&#x5B9E;&#x4F8B;&#x7684;&#x67D0;&#x4E2A;&#x65B9;&#x6CD5;&#x65F6;&#xFF0C;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x4E3A;&#xFF1A;</p>
<ul>
<li>&#x5B83;&#x4EEC;&#x6BCF;&#x4E2A;&#x65B9;&#x6CD5;&#x662F;&#x539F;&#x5B50;&#x7684;</li>
<li>&#x4F46;&#x6CE8;&#x610F;&#x5B83;&#x4EEC;&#x591A;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x7EC4;&#x5408;&#x4E0D;&#x662F;&#x539F;&#x5B50;&#x7684;</li>
</ul>
<h5 id="%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E7%B1%BB%E6%96%B9%E6%B3%95%E7%9A%84%E7%BB%84%E5%90%88"><strong>&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7C7B;&#x65B9;&#x6CD5;&#x7684;&#x7EC4;&#x5408;</strong></h5>
<h5 id="%E4%B8%8D%E5%8F%AF%E5%8F%98%E7%B1%BB%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E6%80%A7"><strong>&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x6027;</strong></h5>
<p>String&#x3001;Integer&#x7B49;&#x90FD;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#xFF0C;&#x56E0;&#x4E3A;&#x5176;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x4E0D;&#x53EF;&#x4EE5;&#x6539;&#x53D8;&#xFF0C;&#x56E0;&#x6B64;&#x5B83;&#x4EEC;&#x7684;&#x65B9;&#x6CD5;&#x90FD;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#x3002;</p>
<h3 id="monitor%E6%A6%82%E5%BF%B5">Monitor&#x6982;&#x5FF5;</h3>
<h4 id="monitor-%E7%9B%91%E8%A7%86%E5%99%A8%E7%AE%A1%E7%A8%8B">Monitor &#x76D1;&#x89C6;&#x5668;/&#x7BA1;&#x7A0B;</h4>
<p>java&#x666E;&#x901A;&#x5BF9;&#x8C61;&#x5934;Mark Word(32 bits)&#x3001;Klass Word(32 bits)</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/9a83edcf038f54df.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/e984f3206a8296fb.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<p>&#x6BCF;&#x4E2A;java&#x5BF9;&#x8C61;&#x90FD;&#x53EF;&#x4EE5;&#x5173;&#x8054;&#x4E00;&#x4E2A;Monitor&#x5BF9;&#x8C61;&#xFF0C;&#x5982;&#x679C;&#x4F7F;&#x7528;synchronized&#x7ED9;&#x5BF9;&#x8C61;&#x4E0A;&#x9501;&#xFF08;&#x91CD;&#x91CF;&#x7EA7;&#xFF09;&#x4E4B;&#x540E;&#xFF0C;&#x4E4B;&#x540E;&#x7684;Mark Word&#x4E2D;&#x5C31;&#x88AB;&#x8BBE;&#x7F6E;&#x6307;&#x5411;Monitor&#x5BF9;&#x8C61;&#x7684;&#x6307;&#x9488;&#x3002;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="C:%5CUsers%5C18656%5COneDrive%5C%E6%96%87%E6%A1%A3%5C%E5%AD%A6%E4%B9%A0%E5%93%A6%5CJava%5CJava%E5%9F%BA%E7%A1%80%5C%E9%9D%A2%E8%AF%952023%5CMonitor%E7%BB%93%E6%9E%84.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<ul>
<li>
<p>&#x521A;&#x5F00;&#x59CB;Monitor&#x4E2D;Owner&#x4E3A;null</p>
</li>
<li>
<p>&#x5F53;Thread-2&#x6267;&#x884C;synchronized(obj)&#x5C31;&#x4F1A;&#x5C06;Monitor&#x7684;&#x6240;&#x6709;&#x8005;Owner&#x7F6E;&#x4E3A;Thread-2&#xFF0C;Monitor&#x4E2D;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;Owner</p>
</li>
<li>
<p>&#x5728;Thread-2&#x4E0A;&#x9501;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5982;&#x679C;Thread-3&#xFF0C;Thread-4&#x4E5F;&#x6765;&#x6267;&#x884C;synchronized&#xFF0C;&#x5C31;&#x4F1A;&#x8FDB;&#x5165;EntryList BLOCKED</p>
</li>
<li>
<p>Thread-2&#x6267;&#x884C;&#x5B8C;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x5757;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x7136;&#x540E;&#x5524;&#x9192;EntryList&#x4E2D;&#x7B49;&#x5F85;&#x7684;&#x7EBF;&#x7A0B;&#x6765;&#x7ADE;&#x4E89;&#x9501;&#xFF0C;&#x7ADE;&#x4E89;&#x65F6;&#x662F;&#x975E;&#x516C;&#x5E73;&#x7684;&#x3002;</p>
</li>
<li>
<p>&#x9014;&#x4E2D;WaitSet&#x4E2D;&#x7684;Thread-0&#xFF0C;Thread-1&#x662F;&#x4E4B;&#x524D;&#x83B7;&#x5F97;&#x8FC7;&#x9501;&#xFF0C;&#x4F46;&#x6761;&#x4EF6;&#x4E0D;&#x6EE1;&#x8DB3;&#x8FDB;&#x5165;WAITING&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x3002;</p>
</li>
<li>
<p>Owner&#x7EBF;&#x7A0B;&#x53D1;&#x73B0;&#x6761;&#x4EF6;&#x4E0D;&#x6EE1;&#x8DB3;&#xFF0C;&#x8C03;&#x7528;wait&#x65B9;&#x6CD5;&#xFF0C;&#x5373;&#x53EF;&#x8FDB;&#x5165;WaitSet&#x53D8;&#x4E3A;WAITING&#x72B6;&#x6001;&#x3002;</p>
</li>
<li>
<p>BLOCKED&#x548C;WAITING&#x7EBF;&#x7A0B;&#x90FD;&#x5904;&#x4E8E;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF0C;&#x4E0D;&#x5360;&#x7528;CPU&#x65F6;&#x95F4;&#x7247;</p>
</li>
<li>
<p>BLOCKED&#x7EBF;&#x7A0B;&#x4F1A;&#x5728;Owner&#x7EBF;&#x7A0B;&#x91CA;&#x653E;&#x9501;&#x65F6;&#x5524;&#x9192;</p>
</li>
<li>
<p>WAITING&#x7EBF;&#x7A0B;&#x4F1A;&#x5728;Owner&#x7EBF;&#x7A0B;&#x8C03;&#x7528;notify&#x6216;notifyAll&#x65F6;&#x5524;&#x9192;&#xFF0C;&#x4F46;&#x5524;&#x9192;&#x540E;&#x5E76;&#x4E0D;&#x610F;&#x5473;&#x7740;&#x7ACB;&#x5373;&#x83B7;&#x5F97;&#x9501;&#xFF0C;&#x800C;&#x662F;&#x8FDB;&#x5165;EntryList&#x91CD;&#x65B0;&#x7ADE;&#x4E89;&#x3002;</p>
<p>&#x6CE8;&#x610F;&#xFF1A;</p>
<ul>
<li>synchronized&#x5FC5;&#x987B;&#x662F;&#x8FDB;&#x5165;&#x540C;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;Monitor&#x624D;&#x6709;&#x4E0A;&#x8FF0;&#x7684;&#x6548;&#x679C;&#x3002;</li>
<li>&#x4E0D;&#x52A0;synchronized&#x7684;&#x5BF9;&#x8C61;&#x4E0D;&#x4F1A;&#x5173;&#x8054;&#x76D1;&#x89C6;&#x5668;&#xFF0C;&#x4E0D;&#x9075;&#x4ECE;&#x4EE5;&#x4E0A;&#x89C4;&#x5219;&#x3002;</li>
</ul>
</li>
</ul>
<h4 id="%E5%8E%9F%E7%90%86%E4%B9%8Bsynchronized">&#x539F;&#x7406;&#x4E4B;synchronized</h4>
<h5 id="1%E3%80%81%E8%BD%BB%E9%87%8F%E7%BA%A7%E9%94%81">1&#x3001;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;</h5>
<p>&#x4F7F;&#x7528;&#x573A;&#x666F;&#xFF1A;&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x867D;&#x7136;&#x6709;&#x591A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;&#xFF0C;&#x4F46;&#x591A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;&#x7684;&#x65F6;&#x95F4;&#x662F;&#x9519;&#x5F00;&#x7684;&#xFF08;&#x4E5F;&#x5C31;&#x662F;&#x6CA1;&#x6709;&#x7ADE;&#x4E89;&#xFF09;&#xFF0C;&#x90A3;&#x4E48;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x4F18;&#x5316;&#x3002;</p>
<ul>
<li>
<p>&#x521B;&#x5EFA;&#x9501;&#x8BB0;&#x5F55;&#xFF08;Lock Record&#xFF09;&#x5BF9;&#x8C61;&#xFF0C;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x6808;&#x5E27;&#x90FD;&#x4F1A;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x9501;&#x8BB0;&#x5F55;&#x7684;&#x7ED3;&#x6784;&#xFF0C;&#x5185;&#x90E8;&#x53EF;&#x4EE5;&#x5B58;&#x50A8;&#x9501;&#x5B9A;&#x5BF9;&#x8C61;&#x7684;Mark Word&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/4a21fe36c8ea790f.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x8BA9;&#x9501;&#x8BB0;&#x5F55;&#x4E2D;Object Reference &#x6307;&#x5411;&#x9501;&#x5BF9;&#x8C61;&#xFF0C;&#x5E76;&#x5C1D;&#x8BD5;&#x4F7F;&#x7528;CAS&#x66FF;&#x6362;Object&#x7684;Mark Word&#xFF0C;&#x5C06;Mark Word&#x503C;&#x5B58;&#x5165;&#x9501;&#x8BB0;&#x5F55;&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/6fb70076410a3a89.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x5982;&#x679C;CAS&#x66FF;&#x6362;&#x6210;&#x529F;&#xFF0C;&#x5BF9;&#x8C61;&#x5934;&#x4E2D;&#x5B58;&#x50A8;&#x4E86;&#x9501;&#x8BB0;&#x5F55;&#x5730;&#x5740;&#x548C;&#x72B6;&#x6001;00&#xFF0C;&#x8868;&#x793A;&#x7531;&#x8BE5;&#x7EBF;&#x7A0B;&#x7ED9;&#x5BF9;&#x8C61;&#x52A0;&#x9501;&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/aef4147bf7c8d705.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x5982;&#x679C;CAS&#x5931;&#x8D25;&#xFF0C;&#x6709;&#x4E24;&#x79CD;&#x60C5;&#x51B5;</p>
<ul>
<li>
<p>&#x5982;&#x679C;&#x662F;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5DF2;&#x7ECF;&#x6301;&#x6709;&#x4E86;&#x8BE5;Object&#x7684;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x8FD9;&#x65F6;&#x8868;&#x660E;&#x6709;&#x7ADE;&#x4E89;&#xFF0C;&#x8FDB;&#x5165;&#x9501;&#x81A8;&#x80C0;&#x8FC7;&#x7A0B;&#x3002;</p>
</li>
<li>
<p>&#x5982;&#x679C;&#x662F;&#x81EA;&#x5DF1;&#x6267;&#x884C;&#x4E86;synchronized&#x9501;&#x91CD;&#x5165;&#xFF0C;&#x90A3;&#x4E48;&#x518D;&#x6DFB;&#x52A0;&#x4E00;&#x6761;Lock Record&#x4F5C;&#x4E3A;&#x91CD;&#x5165;&#x7684;&#x8BA1;&#x6570;&#x3002;</p>
</li>
</ul>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/ab7db3f3070ad6aa.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x5F53;&#x9000;&#x51FA;synchronized&#x4EE3;&#x7801;&#x5757;&#xFF08;&#x89E3;&#x9501;&#x65F6;&#xFF09;&#x5982;&#x679C;&#x6709;&#x53D6;&#x503C;&#x4E3A;null&#x7684;&#x9501;&#x8BB0;&#x5F55;&#xFF0C;&#x8868;&#x793A;&#x6709;&#x91CD;&#x5165;&#xFF0C;&#x8FD9;&#x65F6;&#x91CD;&#x7F6E;&#x9501;&#x8BB0;&#x5F55;&#xFF0C;&#x8868;&#x793A;&#x91CD;&#x5165;&#x8BA1;&#x6570;&#x51CF;&#x4E00;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/33a129f73e0f6fe1.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x5F53;&#x9000;&#x51FA;synchronized&#x4EE3;&#x7801;&#x5757;&#xFF08;&#x89E3;&#x9501;&#x65F6;&#xFF09;&#x9501;&#x8BB0;&#x5F55;&#x7684;&#x503C;&#x4E0D;&#x4E3A;null&#xFF0C;&#x8FD9;&#x65F6;&#x4F7F;&#x7528;CAS&#x5C06;Mark Word&#x7684;&#x503C;&#x6062;&#x590D;&#x7ED9;&#x5BF9;&#x8C61;&#x5934;&#x3002;</p>
<ul>
<li>&#x6210;&#x529F;&#xFF0C;&#x5219;&#x89E3;&#x9501;&#x6210;&#x529F;</li>
<li>&#x5931;&#x8D25;&#xFF0C;&#x8BF4;&#x660E;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x8FDB;&#x884C;&#x4E86;&#x9501;&#x81A8;&#x80C0;&#x6216;&#x5DF2;&#x7ECF;&#x5347;&#x7EA7;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#xFF0C;&#x8FDB;&#x5165;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x89E3;&#x9501;&#x6D41;&#x7A0B;&#x3002;</li>
</ul>
</li>
</ul>
<h5 id="2%E3%80%81%E9%94%81%E8%86%A8%E8%83%80">2&#x3001;&#x9501;&#x81A8;&#x80C0;</h5>
<p>&#x5982;&#x4F55;&#x5C1D;&#x8BD5;&#x52A0;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;CAS&#x64CD;&#x4F5C;&#x65E0;&#x6CD5;&#x6210;&#x529F;&#xFF0C;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5C31;&#x662F;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x4E3A;&#x6B64;&#x5BF9;&#x8C61;&#x52A0;&#x4E0A;&#x4E86;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#xFF08;&#x6709;&#x7ADE;&#x4E89;&#xFF09;&#xFF0C;&#x8FD9;&#x65F6;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x9501;&#x81A8;&#x80C0;&#xFF0C;&#x5C06;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x53D8;&#x4E3A;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x3002;</p>
<ul>
<li>
<p>&#x5F53;Thread-1&#x8FDB;&#x884C;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x65F6;&#xFF0C;Thread-0&#x5DF2;&#x7ECF;&#x5BF9;&#x8BE5;&#x5BF9;&#x8C61;&#x52A0;&#x4E86;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/c3528c9a331f4d92.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x8FD9;&#x65F6;Thread-1&#x52A0;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x5931;&#x8D25;&#xFF0C;&#x8FDB;&#x5165;&#x9501;&#x81A8;&#x80C0;&#x6D41;&#x7A0B;</p>
<ul>
<li>&#x5373;&#x4E3A;Object&#x5BF9;&#x8C61;&#x7533;&#x8BF7;Monitor&#x9501;&#xFF0C;&#x8BA9;Object&#x6307;&#x5411;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x5730;&#x5740;</li>
<li>&#x7136;&#x540E;&#x81EA;&#x5DF1;&#x8FDB;&#x5165;Monitor&#x7684;EntryList BLOCKED</li>
</ul>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/2373f914a5293a0f.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>Thread-0&#x9000;&#x51FA;&#x540C;&#x6B65;&#x5757;&#x89E3;&#x9501;&#x65F6;&#xFF0C;&#x4F7F;&#x7528;cas&#x5C06;Mark Word&#x7684;&#x503C;&#x6062;&#x590D;&#x7ED9;&#x5BF9;&#x8C61;&#x5934;&#xFF0C;&#x5931;&#x8D25;&#x3002;&#x8FD9;&#x65F6;&#x4F1A;&#x8FDB;&#x5165;&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x89E3;&#x9501;&#x6D41;&#x7A0B;&#xFF0C;&#x5373;&#x6309;&#x7167;Monitor&#x5730;&#x5740;&#x627E;&#x5230;Monitor&#x5BF9;&#x8C61;&#xFF0C;&#x8BBE;&#x7F6E;Owner&#x4E3A;null&#xFF0C;&#x5524;&#x9192;EntryList&#x4E2D;BLOCKED&#x7EBF;&#x7A0B;</p>
</li>
</ul>
<h5 id="3%E3%80%81%E8%87%AA%E6%97%8B%E4%BC%98%E5%8C%96">3&#x3001;&#x81EA;&#x65CB;&#x4F18;&#x5316;</h5>
<p>&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x7ADE;&#x4E89;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x81EA;&#x65CB;&#x6765;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#xFF0C;&#x5982;&#x679C;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x81EA;&#x65CB;&#x6210;&#x529F;&#xFF08;&#x5373;&#x8FD9;&#x65F6;&#x6301;&#x9501;&#x7EBF;&#x7A0B;&#x9000;&#x51FA;&#x4E86;&#x540C;&#x6B65;&#x5757;&#xFF0C;&#x91CA;&#x653E;&#x4E86;&#x9501;&#xFF09;&#xFF0C;&#x8FD9;&#x65F6;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x5C31;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x963B;&#x585E;&#x3002;</p>
<ul>
<li>&#x5728;Java6&#x4E4B;&#x540E;&#x81EA;&#x65CB;&#x9501;&#x662F;&#x81EA;&#x9002;&#x5E94;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x5BF9;&#x8C61;&#x521A;&#x521A;&#x4E00;&#x6B21;&#x81EA;&#x65CB;&#x64CD;&#x4F5C;&#x6210;&#x529F;&#x8FC7;&#xFF0C;&#x90A3;&#x4E48;&#x8BA4;&#x4E3A;&#x8FD9;&#x6B21;&#x81EA;&#x65CB;&#x6210;&#x529F;&#x7684;&#x53EF;&#x80FD;&#x6027;&#x4F1A;&#x9AD8;&#xFF0C;&#x5C31;&#x591A;&#x81EA;&#x65CB;&#x51E0;&#x6B21;&#xFF1B;&#x7E41;&#x6B96;&#x5C31;&#x5C11;&#x81EA;&#x65CB;&#x751A;&#x81F3;&#x4E0D;&#x81EA;&#x65CB;</li>
<li>&#x81EA;&#x65CB;&#x4F1A;&#x5360;&#x7528;cpu&#x65F6;&#x95F4;&#xFF0C;&#x5355;&#x6838;cpu&#x81EA;&#x65CB;&#x5C31;&#x662F;&#x6D6A;&#x8D39;&#xFF0C;&#x591A;&#x559D;cpu&#x81EA;&#x65CB;&#x624D;&#x80FD;&#x53D1;&#x6325;&#x4F18;&#x52BF;</li>
<li>Java7&#x4E4B;&#x540E;&#x4E0D;&#x80FD;&#x63A7;&#x5236;&#x662F;&#x5426;&#x5F00;&#x542F;&#x81EA;&#x65CB;&#x529F;&#x80FD;</li>
</ul>
<h5 id="4%E3%80%81%E5%81%8F%E5%90%91%E9%94%81">4&#x3001;&#x504F;&#x5411;&#x9501;</h5>
<p>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x5728;&#x6CA1;&#x6709;&#x7ADE;&#x4E89;&#x65F6;&#xFF08;&#x5C31;&#x81EA;&#x5DF1;&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF09;&#xFF0C;&#x6BCF;&#x6B21;&#x91CD;&#x5165;&#x4ECD;&#x7136;&#x9700;&#x8981;CAS&#x64CD;&#x4F5C;&#x3002;</p>
<p>Java6&#x4E2D;&#x5F15;&#x5165;&#x4E86;&#x504F;&#x5411;&#x9501;&#x6765;&#x505A;&#x8FDB;&#x4E00;&#x6B65;&#x4F18;&#x5316;&#xFF1A;&#x53EA;&#x6709;&#x7B2C;&#x4E00;&#x6B21;&#x4F7F;&#x7528;CAS&#x5C06;&#x7EBF;&#x7A0B;ID&#x8BBE;&#x7F6E;&#x5230;&#x5BF9;&#x8C61;&#x7684;Mark Word&#x5934;&#xFF0C;&#x4E4B;&#x540E;&#x53D1;&#x73B0;&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;ID&#x65F6;&#x81EA;&#x5DF1;&#x7684;&#x5C31;&#x8868;&#x793A;&#x6CA1;&#x6709;&#x7ADE;&#x4E89;&#xFF0C;&#x4E0D;&#x7528;&#x91CD;&#x65B0;CAS&#x3002;&#x4EE5;&#x540E;&#x53EA;&#x8981;&#x4E0D;&#x53D1;&#x751F;&#x7ADE;&#x4E89;&#xFF0C;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x5C31;&#x5F52;&#x7EBF;&#x7A0B;&#x6240;&#x6709;&#x3002;</p>
<h5 id="%E5%81%8F%E5%90%91%E7%8A%B6%E6%80%81">&#x504F;&#x5411;&#x72B6;&#x6001;</h5>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/89f3c56757c7e5cd.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<p>&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x65F6;</p>
<p>&#x5982;&#x679C;&#x5F00;&#x542F;&#x4E86;&#x504F;&#x5411;&#x9501;&#xFF0C;&#x90A3;&#x4E48;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x540E;&#xFF0C;Mark Word&#x503C;&#x4E3A;0x05&#x5373;&#x6700;&#x540E;&#x4E09;&#x4F4D;&#x4E3A;101&#xFF0C;&#x6B64;&#x65F6;&#x5B83;&#x7684;thread&#x3001;epoch&#x3001;age&#x90FD;&#x4E3A;0&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5F00;&#x542F;&#x504F;&#x5411;&#x9501;&#xFF0C;&#x90A3;&#x4E48;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x540E;&#xFF0C;Mark Word&#x503C;&#x4E3A;0x01&#x5373;&#x6700;&#x540E;3&#x4F4D;&#x4E3A;001.&#x8FD9;&#x662F;&#x5B83;&#x7684;hashCode&#x3001;age&#x4E3A;0&#xFF0C;&#x7B2C;&#x4E00;&#x6B21;&#x7528;&#x5230;hashCode&#x624D;&#x4F1A;&#x8D4B;&#x503C;&#x3002;</p>
<p><strong>&#x64A4;&#x9500;-&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#x5BF9;&#x8C61;</strong>&#xFF1A;&#x5F53;&#x6709;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x4F7F;&#x7528;&#x504F;&#x5411;&#x9501;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x4F1A;&#x5C06;&#x504F;&#x5411;&#x9501;&#x5347;&#x7EA7;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x3002;</p>
<p><strong>&#x64A4;&#x9500;-&#x8C03;&#x7528;&#x5BF9;&#x8C61;hashCode</strong>&#xFF1A;&#x8C03;&#x7528;&#x4E86;&#x5BF9;&#x8C61;&#x7684;hashCode&#xFF0C;&#x4F46;&#x504F;&#x5411;&#x9501;&#x7684;&#x5BF9;&#x8C61;Mark Word&#x4E2D;&#x5B58;&#x50A8;&#x7684;&#x662F;&#x7EBF;&#x7A0B;id&#xFF0C;&#x5982;&#x679C;&#x8C03;&#x7528;hashCode&#x4F1A;&#x5BFC;&#x81F4;&#x504F;&#x5411;&#x9501;&#x88AB;&#x64A4;&#x9500;&#x3002;</p>
<ul>
<li>&#x8F7B;&#x91CF;&#x7EA7;&#x9501;&#x4F1A;&#x5728;&#x9501;&#x8BB0;&#x5F55;&#x4E2D;&#x8BB0;&#x5F55;hashCode</li>
<li>&#x91CD;&#x91CF;&#x7EA7;&#x9501;&#x4F1A;&#x5728;Monitor&#x4E2D;&#x8BB0;&#x5F55;hashCode</li>
</ul>
<p><strong>&#x64A4;&#x9500;-&#x8C03;&#x7528;wait/notify</strong></p>
<p><strong>&#x6279;&#x91CF;&#x91CD;&#x504F;&#x5411;</strong></p>
<p>&#x5982;&#x679C;&#x5BF9;&#x8C61;&#x867D;&#x7136;&#x88AB;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;&#xFF0C;&#x4F46;&#x6CA1;&#x6709;&#x7ADE;&#x4E89;&#xFF0C;&#x8FD9;&#x65F6;&#x504F;&#x5411;&#x4E86;&#x7EBF;&#x7A0B;t1&#x7684;&#x5BF9;&#x8C61;&#x4ECD;&#x6709;&#x673A;&#x4F1A;&#x91CD;&#x65B0;&#x504F;&#x5411;t2&#xFF0C;&#x91CD;&#x504F;&#x5411;&#x4F1A;&#x91CD;&#x7F6E;&#x5BF9;&#x8C61;&#x7684;ThreadID</p>
<p>&#x5F53;&#x64A4;&#x9500;&#x504F;&#x5411;&#x9501;&#x9608;&#x503C;&#x8D85;&#x8FC7;20&#x6B21;&#x540E;&#xFF0C;jvm&#x4F1A;&#x8BA4;&#x4E3A;&#x504F;&#x5411;&#x9519;&#x5BF9;&#x8C61;&#xFF0C;&#x4E8E;&#x662F;&#x4F1A;&#x5728;&#x7ED9;&#x8FD9;&#x4E9B;&#x5BF9;&#x8C61;&#x52A0;&#x9501;&#x65F6;&#x91CD;&#x65B0;&#x504F;&#x5411;&#x81F3;&#x52A0;&#x9501;&#x7EBF;&#x7A0B;&#x3002;</p>
<p><strong>&#x6279;&#x91CF;&#x64A4;&#x9500;</strong></p>
<p>&#x5F53;&#x64A4;&#x9500;&#x504F;&#x5411;&#x9501;&#x9608;&#x503C;&#x8D85;&#x8FC7;40&#x6B21;&#x540E;&#xFF0C;jvm&#x4F1A;&#x89C9;&#x5F97;&#x504F;&#x5411;&#x9519;&#x4E86;&#xFF0C;&#x4E0D;&#x5E94;&#x8BE5;&#x504F;&#x5411;&#x3002;&#x6574;&#x4E2A;&#x7C7B;&#x7684;&#x6240;&#x6709;&#x5BF9;&#x8C61;&#x90FD;&#x4F1A;&#x53D8;&#x4E3A;&#x4E0D;&#x53EF;&#x504F;&#x5411;&#x7684;&#xFF0C;&#x65B0;&#x5EFA;&#x7684;&#x5BF9;&#x8C61;&#x4E5F;&#x662F;&#x4E0D;&#x53EF;&#x504F;&#x5411;&#x7684;&#x3002;</p>
<h5 id="5%E3%80%81%E9%94%81%E6%B6%88%E9%99%A4">5&#x3001;&#x9501;&#x6D88;&#x9664;</h5>
<h3 id="%E5%8E%9F%E7%90%86%E4%B9%8Bwaitnotify">&#x539F;&#x7406;&#x4E4B;wait/notify</h3>
<p><img src="C:%5CUsers%5C18656%5COneDrive%5C%E6%96%87%E6%A1%A3%5C%E5%AD%A6%E4%B9%A0%E5%93%A6%5CJava%5CJava%E5%9F%BA%E7%A1%80%5C%E9%9D%A2%E8%AF%952023%5Cwait-notify.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<ul>
<li>Owner&#x7EBF;&#x7A0B;&#x53D1;&#x73B0;&#x6761;&#x4EF6;&#x4E0D;&#x6EE1;&#x8DB3;&#xFF0C;&#x8C03;&#x7528;wait&#x65B9;&#x6CD5;&#xFF0C;&#x5373;&#x53EF;&#x8FDB;&#x5165;WaitSet&#x53D8;&#x4E3A;WITING&#x72B6;&#x6001;</li>
<li>BLOCKED&#x548C;WAITING&#x7684;&#x7EBF;&#x7A0B;&#x90FD;&#x5904;&#x4E8E;&#x963B;&#x585E;&#x72B6;&#x6001;&#xFF0C;&#x4E0D;&#x5360;&#x7528;CPU&#x65F6;&#x95F4;&#x7247;</li>
<li>BLOCKED&#x7EBF;&#x7A0B;&#x4F1A;&#x5728;Owner&#x7EBF;&#x7A0B;&#x91CA;&#x653E;&#x9501;&#x65F6;&#x5524;&#x9192;</li>
<li>WAITING&#x7EBF;&#x7A0B;&#x4F1A;&#x5728;Owner&#x7EBF;&#x7A0B;&#x8C03;&#x7528;notify&#x6216;notifyAll&#x65F6;&#x5524;&#x9192;&#xFF0C;&#x4F46;&#x5524;&#x9192;&#x540E;&#x5E76;&#x4E0D;&#x610F;&#x5473;&#x7740;&#x7ACB;&#x523B;&#x83B7;&#x53D6;&#x9501;&#xFF0C;&#x4ECD;&#x9700;&#x8FDB;&#x5165;EntryList&#x91CD;&#x65B0;&#x7ADE;&#x4E89;</li>
</ul>
<h5 id="api%E4%BB%8B%E7%BB%8D">API&#x4ECB;&#x7ECD;</h5>
<ul>
<li>obj.wait()&#x8BA9;&#x8FDB;&#x5165;object&#x76D1;&#x89C6;&#x5668;&#x7684;&#x7EBF;&#x7A0B;&#x5230;waitSet&#x7B49;&#x5F85;</li>
<li>obj.notify()&#x5728;object&#x4E0A;&#x6B63;&#x5728;waitSet&#x7B49;&#x5F85;&#x7684;&#x7EBF;&#x7A0B;&#x4E2D;&#x6311;&#x4E00;&#x4E2A;&#x5524;&#x9192;</li>
<li>obj.notifyAll()&#x8BA9;object&#x4E0A;&#x6B63;&#x5728;waitSet&#x7B49;&#x5F85;&#x7684;&#x7EBF;&#x7A0B;&#x5168;&#x90E8;&#x5524;&#x9192;</li>
</ul>
<p>&#x5B83;&#x4EEC;&#x90FD;&#x662F;&#x7EBF;&#x7A0B;&#x4E4B;&#x95F4;&#x8FDB;&#x884C;&#x534F;&#x4F5C;&#x7684;&#x624B;&#x6BB5;&#xFF0C;&#x90FD;&#x5C5E;&#x4E8E;Object&#x5BF9;&#x8C61;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x5FC5;&#x987B;&#x83B7;&#x53D6;&#x6B64;&#x5BF9;&#x8C61;&#x7684;&#x9501;&#x624D;&#x80FD;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x3002;</p>
<h3 id="waitnotify%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%A7%BF%E5%8A%BF">wait/notify&#x7684;&#x6B63;&#x786E;&#x59FF;&#x52BF;</h3>
<p>sleep(long n)&#x548C;wait(long n)&#x7684;&#x533A;&#x522B;&#xFF1A;</p>
<ol>
<li>sleep&#x662F;Thread&#x65B9;&#x6CD5;&#xFF0C;&#x800C;wait&#x662F;Object&#x65B9;&#x6CD5;</li>
<li>sleep&#x4E0D;&#x9700;&#x8981;&#x5F3A;&#x5236;&#x548C;synchronized&#x914D;&#x5408;&#x4F7F;&#x7528;&#xFF0C;&#x4F46;wait&#x9700;&#x8981;&#x548C;synchronized&#x4E00;&#x8D77;&#x7528;</li>
<li>sleep&#x5728;&#x7761;&#x7720;&#x7684;&#x540C;&#x4E8B;&#xFF0C;&#x4E0D;&#x4F1A;&#x91CA;&#x653E;&#x5BF9;&#x8C61;&#x9501;&#xFF0C;&#x4F46;wait&#x5728;&#x7B49;&#x5F85;&#x65F6;&#x5019;&#x4F1A;&#x91CA;&#x653E;&#x5BF9;&#x8C61;&#x9501;</li>
<li>sleep&#x8FDB;&#x5165;&#x72B6;&#x6001;TIMED_WAITING&#xFF0C;wait&#x8FDB;&#x5165;&#x72B6;&#x6001;WAITING&#x3002;</li>
</ol>
<pre><code class="language-java">sychronized(lock){
    while(&#x6761;&#x4EF6;&#x4E0D;&#x6210;&#x7ACB;){
        lock.wait
    }
    // &#x5E72;&#x6D3B;
}
// &#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;
synchronized(lock){
    lock.notifyAll();
}
</code></pre>
<h4 id="%E5%90%8C%E6%AD%A5%E6%A8%A1%E5%BC%8F%E4%B9%8B%E4%BF%9D%E6%8A%A4%E6%80%A7%E6%9A%82%E5%81%9C">&#x540C;&#x6B65;&#x6A21;&#x5F0F;&#x4E4B;&#x4FDD;&#x62A4;&#x6027;&#x6682;&#x505C;</h4>
<p>&#x5373;Guarded Suspension&#xFF0C;&#x7528;&#x5728;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7B49;&#x5F85;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6267;&#x884C;&#x7ED3;&#x679C;&#x3002;&#x8981;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x6709;&#x4E00;&#x4E2A;&#x7ED3;&#x679C;&#x9700;&#x8981;&#x4ECE;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x4F20;&#x9012;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#xFF0C;&#x8BA9;&#x4ED6;&#x4EEC;&#x5173;&#x8054;&#x540C;&#x4E00;&#x4E2A;Guarded Object</li>
<li>&#x5982;&#x679C;&#x6709;&#x7ED3;&#x679C;&#x4E0D;&#x65AD;&#x4ECE;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x90A3;&#x4E48;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x6D88;&#x606F;&#x961F;&#x5217;</li>
<li>JDK&#x4E2D;&#xFF0C;join&#x3001;Future&#x7684;&#x5B9E;&#x73B0;&#x5C31;&#x662F;&#x91C7;&#x7528;&#x6B64;&#x6A21;&#x5F0F;</li>
<li>&#x56E0;&#x4E3A;&#x8981;&#x7B49;&#x5F85;&#x53E6;&#x4E00;&#x65B9;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x56E0;&#x6B64;&#x5F52;&#x7C7B;&#x5230;&#x540C;&#x6B65;&#x6A21;&#x5F0F;</li>
</ul>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/5d8287cc19dd8f6e.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/0336d71b853b5672.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<h4 id="%E5%8E%9F%E7%90%86%E4%B9%8Bjoin">&#x539F;&#x7406;&#x4E4B;join</h4>
<h3 id="%E5%BC%82%E6%AD%A5%E6%A8%A1%E5%BC%8F%E4%B9%8B%E7%94%9F%E4%BA%A7%E8%80%85%E6%B6%88%E8%B4%B9%E8%80%85">&#x5F02;&#x6B65;&#x6A21;&#x5F0F;&#x4E4B;&#x751F;&#x4EA7;&#x8005;/&#x6D88;&#x8D39;&#x8005;</h3>
<p>&#x8981;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x4E0E;&#x524D;&#x9762;&#x7684;&#x4FDD;&#x62A4;&#x6027;&#x6682;&#x505C;&#x4E2D;&#x7684;GuardObject&#x4E0D;&#x540C;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x4EA7;&#x751F;&#x7ED3;&#x679C;&#x548C;&#x6D88;&#x8D39;&#x7ED3;&#x679C;&#x7684;&#x7EBF;&#x7A0B;&#x4E00;&#x4E00;&#x5BF9;&#x5E94;</li>
<li>&#x6D88;&#x8D39;&#x961F;&#x5217;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x5E73;&#x8861;&#x751F;&#x4EA7;&#x548C;&#x6D88;&#x8D39;&#x7684;&#x7EBF;&#x7A0B;&#x8D44;&#x6E90;</li>
<li>&#x751F;&#x4EA7;&#x8005;&#x4EC5;&#x8D1F;&#x8D23;&#x4EA7;&#x751F;&#x7ED3;&#x679C;&#x6570;&#x636E;&#xFF0C;&#x4E0D;&#x5173;&#x5FC3;&#x6570;&#x636E;&#x8BE5;&#x5982;&#x4F55;&#x5904;&#x7406;&#xFF0C;&#x800C;&#x6D88;&#x8D39;&#x8005;&#x4E13;&#x5FC3;&#x5904;&#x7406;&#x7ED3;&#x679C;&#x6570;&#x636E;</li>
<li>&#x6D88;&#x606F;&#x961F;&#x5217;&#x662F;&#x6709;&#x5BB9;&#x91CF;&#x9650;&#x5236;&#x7684;&#xFF0C;&#x6EE1;&#x65F6;&#x4E0D;&#x4F1A;&#x518D;&#x52A0;&#x5165;&#x6570;&#x636E;&#xFF0C;&#x7A7A;&#x65F6;&#x4E0D;&#x4F1A;&#x518D;&#x6D88;&#x8017;&#x6570;&#x636E;</li>
<li>JDK&#x4E2D;&#x5404;&#x79CD;&#x963B;&#x585E;&#x961F;&#x5217;&#xFF0C;&#x91C7;&#x7528;&#x7684;&#x5C31;&#x7B97;&#x8FD9;&#x79CD;&#x6A21;&#x5F0F;</li>
</ul>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/6b2429ffadf6273f.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<h3 id="park-unpark">Park &amp; Unpark</h3>
<p>&#x5B83;&#x4EEC;&#x662F;LockSupport&#x7C7B;&#x4E2D;&#x7684;&#x65B9;&#x6CD5;</p>
<pre><code class="language-java">// &#x6682;&#x505C;&#x5F53;&#x524D;&#x7EBF;&#x7A0B;
LockSupport.park();
// &#x6062;&#x590D;&#x67D0;&#x4E2A;&#x7EBF;&#x7A0B;&#x7684;&#x8FD0;&#x884C;
LockSupport.unpark(&#x6682;&#x505C;&#x7EBF;&#x7A0B;&#x5BF9;&#x8C61;);
</code></pre>
<p>&#x7279;&#x70B9;&#xFF0C;&#x4E0E;Object&#x7684;wait &amp; notify &#x76F8;&#x6BD4;</p>
<ul>
<li>wait&#x3001;notify&#x548C;notifyAll&#x5FC5;&#x987B;&#x914D;&#x5408;Object Monitor&#x4E00;&#x8D77;&#x4F7F;&#x7528;&#xFF0C;&#x800C;park &amp; unpark&#x4E0D;&#x5FC5;</li>
<li>park &amp; unpark&#x662F;&#x4EE5;&#x7EBF;&#x7A0B;&#x4E3A;&#x5355;&#x4F4D;&#x6765;&#x3010;&#x963B;&#x585E;&#x3011;&#x548C;&#x3010;&#x5524;&#x9192;&#x3011;&#x7EBF;&#x7A0B;&#xFF0C;&#x800C;notify&#x53EA;&#x80FD;&#x968F;&#x673A;&#x5524;&#x9192;&#x4E00;&#x4E2A;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#xFF0C;notifyAll&#x662F;&#x5524;&#x9192;&#x6240;&#x6709;&#x7B49;&#x5F85;&#x7EBF;&#x7A0B;&#xFF0C;&#x5C31;&#x4E0D;&#x90A3;&#x4E48;&#x3010;&#x7CBE;&#x786E;&#x3011;</li>
<li>park &amp; unpark&#x53EF;&#x4EE5;&#x5148;unpark&#xFF0C;&#x800C;wait &amp; notify&#x4E0D;&#x80FD;&#x5148;notify</li>
</ul>
<p>&#x539F;&#x7406;&#xFF1A;&#x6BCF;&#x4E2A;&#x7EBF;&#x7A0B;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;Parker&#x5BF9;&#x8C61;&#xFF0C;&#x7531;&#x4E09;&#x90E8;&#x5206;&#x7EC4;&#x6210;_counter, _cond &#x548C; _mutex</p>
<ul>
<li>&#x7EBF;&#x7A0B;&#x5C31;&#x50CF;&#x4E00;&#x4E2A;&#x65C5;&#x4EBA;&#xFF0C;Parker&#x5C31;&#x50CF;&#x4ED6;&#x968F;&#x8EAB;&#x643A;&#x5E26;&#x7684;&#x80CC;&#x5305;&#xFF0C;&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x5C31;&#x597D;&#x6BD4;&#x80CC;&#x5305;&#x4E2D;&#x7684;&#x5E10;&#x7BF7;&#x3002;_counter&#x5C31;&#x597D;&#x6BD4;&#x80CC;&#x5305;&#x4E2D;&#x7684;&#x5907;&#x7528;&#x5E72;&#x7CAE;&#xFF08;0&#x4E3A;&#x8017;&#x5C3D;&#xFF0C;1&#x4E3A;&#x5145;&#x8DB3;&#xFF09;&#x3002;</li>
<li>&#x8C03;&#x7528;park&#x5C31;&#x7B97;&#x8981;&#x770B;&#x9700;&#x4E0D;&#x9700;&#x8981;&#x505C;&#x4E0B;&#x6765;&#x4F11;&#x606F;
<ul>
<li>&#x5982;&#x679C;&#x5907;&#x7528;&#x5E72;&#x7CAE;&#x8017;&#x5C3D;&#xFF0C;&#x90A3;&#x4E48;&#x94BB;&#x8FDB;&#x5E10;&#x7BF7;&#x6B47;&#x606F;</li>
<li>&#x5982;&#x679C;&#x5907;&#x7528;&#x5E72;&#x7CAE;&#x5145;&#x8DB3;&#xFF0C;&#x90A3;&#x4E48;&#x4E0D;&#x9700;&#x505C;&#x7559;&#xFF0C;&#x7EE7;&#x7EED;&#x524D;&#x8FDB;</li>
</ul>
</li>
<li>&#x8C03;&#x7528;unpark&#xFF0C;&#x5C31;&#x597D;&#x6BD4;&#x4EE4;&#x5E72;&#x7CAE;&#x5145;&#x8DB3;
<ul>
<li>&#x5982;&#x679C;&#x8FD9;&#x65F6;&#x7EBF;&#x7A0B;&#x8FD8;&#x5728;&#x5E10;&#x7BF7;&#xFF0C;&#x5C31;&#x5524;&#x9192;&#x8BA9;&#x4ED6;&#x7EE7;&#x7EED;</li>
<li>&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x8FD8;&#x5728;&#x8FD0;&#x884C;&#xFF0C;&#x90A3;&#x4E48;&#x4E0B;&#x6B21;&#x8C03;&#x7528;park&#x65F6;&#xFF0C;&#x4EC5;&#x65F6;&#x6D88;&#x8017;&#x6389;&#x5907;&#x7528;&#x5E72;&#x7CAE;&#xFF0C;&#x4E0D;&#x9700;&#x505C;&#x7559;
<ul>
<li>&#x56E0;&#x4E3A;&#x80CC;&#x5305;&#x7A7A;&#x95F4;&#x6709;&#x9650;&#xFF0C;&#x591A;&#x6B21;&#x8C03;&#x7528;unpark&#x4EC5;&#x4F1A;&#x8865;&#x5145;&#x4E00;&#x4EFD;&#x5907;&#x7528;&#x5E72;&#x7CAE;</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/7c84955a4be382d2.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<ol>
<li>&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;Unsafe.park()&#x65B9;&#x6CD5;</li>
<li>&#x68C0;&#x67E5;_counter&#xFF0C;&#x672C;&#x60C5;&#x51B5;&#x4E3A;0&#xFF0C;&#x8FD9;&#x65F6;&#x83B7;&#x5F97;_mutex&#x4E92;&#x65A5;&#x9501;</li>
<li>&#x7EBF;&#x7A0B;&#x8FDB;&#x5165;_cond&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x963B;&#x585E;</li>
<li>&#x8BBE;&#x7F6E;_counter=0</li>
</ol>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/0394694392f221cf.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<ol>
<li>&#x8C03;&#x7528;Unsafe.unpark(Thread_0)&#x65B9;&#x6CD5;&#xFF0C;&#x8BBE;&#x7F6E;_counter&#x4E3A;1</li>
<li>&#x5524;&#x9192;_cond&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x4E2D;&#x7684;Thread_0</li>
<li>Thread_0&#x6062;&#x590D;&#x8FD0;&#x884C;</li>
<li>&#x8BBE;&#x7F6E;_counter&#x4E3A;0</li>
</ol>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/7b1b575e058d63f2.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<ol>
<li>&#x8C03;&#x7528;Unsafe.unpark(Thread_0)&#x65B9;&#x6CD5;&#xFF0C;&#x8BBE;&#x7F6E;_counter&#x4E3A;1</li>
<li>&#x5F53;&#x524D;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;Unsafe.park()&#x65B9;&#x6CD5;</li>
<li>&#x68C0;&#x67E5;_counter&#xFF0C;&#x672C;&#x60C5;&#x51B5;&#x4E3A;1&#xFF0C;&#x8FD9;&#x65F6;&#x7EBF;&#x7A0B;&#x65E0;&#x9700;&#x963B;&#x585E;&#xFF0C;&#x7EE7;&#x7EED;&#x8FD0;&#x884C;</li>
<li>&#x8BBE;&#x7F6E;_counter&#x4E3A;0</li>
</ol>
<h3 id="%E7%BA%BF%E7%A8%8B%E7%8A%B6%E6%80%81%E8%BD%AC%E6%8D%A2">&#x7EBF;&#x7A0B;&#x72B6;&#x6001;&#x8F6C;&#x6362;</h3>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/dba7d137a23a757a.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<h3 id="%E5%A4%9A%E6%8A%8A%E9%94%81">&#x591A;&#x628A;&#x9501;</h3>
<p>&#x591A;&#x628A;&#x4E0D;&#x76F8;&#x5E72;&#x7684;&#x9501;</p>
<p>&#x5C06;&#x9501;&#x7C92;&#x5EA6;&#x7EC6;&#x5206;</p>
<ul>
<li>&#x597D;&#x5904;&#x662F;&#x53EF;&#x4EE5;&#x589E;&#x52A0;&#x5E76;&#x53D1;&#x5EA6;</li>
<li>&#x574F;&#x5904;&#x662F;&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x9700;&#x8981;&#x540C;&#x65F6;&#x83B7;&#x5F97;&#x591A;&#x628A;&#x9501;&#xFF0C;&#x5BB9;&#x6613;&#x53D1;&#x751F;&#x6B7B;&#x9501;</li>
</ul>
<h3 id="%E6%B4%BB%E8%B7%83%E6%80%A7">&#x6D3B;&#x8DC3;&#x6027;</h3>
<p><strong>&#x6B7B;&#x9501;</strong> &#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x987A;&#x5E8F;&#x52A0;&#x9501;&#x7684;&#x65B9;&#x5F0F;&#x89E3;&#x51B3;&#xFF0C;&#x4F46;&#x662F;&#x53EF;&#x80FD;&#x4EA7;&#x751F;&#x9965;&#x997F;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<p><strong>&#x5B9A;&#x4F4D;&#x6B7B;&#x9501;</strong></p>
<p>&#x68C0;&#x6D4B;&#x6B7B;&#x9501;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;jconsole&#x5DE5;&#x5177;&#xFF0C;&#x6216;&#x8005;&#x4F7F;&#x7528;jps&#x5B9A;&#x4F4D;&#x8FDB;&#x7A0B;id&#xFF0C;&#x518D;&#x7528;jstack&#x5B9A;&#x4F4D;&#x6B7B;&#x9501;</p>
<p><strong>&#x6D3B;&#x9501;</strong> &#x51FA;&#x73B0;&#x5728;&#x4E24;&#x4E2A;&#x7EBF;&#x7A0B;&#x4E92;&#x76F8;&#x6539;&#x53D8;&#x5BF9;&#x65B9;&#x7684;&#x7ED3;&#x675F;&#x6761;&#x4EF6;&#xFF0C;&#x6700;&#x540E;&#x8C01;&#x4E5F;&#x65E0;&#x6CD5;&#x7ED3;&#x675F;&#x3002;</p>
<p><strong>&#x9965;&#x997F;</strong> &#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x7531;&#x4E8E;&#x4F18;&#x5148;&#x7EA7;&#x592A;&#x4F4E;&#xFF0C;&#x59CB;&#x7EC8;&#x5F97;&#x4E0D;&#x5230;CPU&#x8C03;&#x5EA6;&#x6267;&#x884C;&#xFF0C;&#x4E5F;&#x4E0D;&#x80FD;&#x591F;&#x7ED3;&#x675F;&#x3002;</p>
<h3 id="reentrantlock">ReentrantLock</h3>
<p>&#x548C;synchronized&#x4E00;&#x6837;&#x652F;&#x6301;&#x53EF;&#x91CD;&#x5165;&#xFF0C;&#x76F8;&#x6BD4;synchronized&#x6709;&#x4EE5;&#x4E0B;&#x7279;&#x70B9;</p>
<ul>
<li>&#x53EF;&#x4E2D;&#x65AD;</li>
<li>&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x8D85;&#x65F6;&#x65F6;&#x95F4;</li>
<li>&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x4E3A;&#x516C;&#x5E73;&#x9501;</li>
<li>&#x652F;&#x6301;&#x591A;&#x4E2A;&#x6761;&#x4EF6;&#x53D8;&#x91CF;</li>
</ul>
<p><strong>&#x53EF;&#x91CD;&#x5165;</strong> &#x6307;&#x540C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5982;&#x679C;&#x9996;&#x6B21;&#x83B7;&#x5F97;&#x8FD9;&#x628A;&#x9501;&#xFF0C;&#x90A3;&#x4E48;&#x56E0;&#x4E3A;&#x5B83;&#x662F;&#x8FD9;&#x628A;&#x9501;&#x7684;&#x62E5;&#x6709;&#x8005;&#xFF0C;&#x56E0;&#x6B64;&#x6709;&#x6743;&#x5229;&#x518D;&#x6B21;&#x83B7;&#x53D6;&#x8FD9;&#x628A;&#x9501;&#x3002;</p>
<pre><code class="language-java">// &#x83B7;&#x53D6;&#x9501;
reentrantLock.lock();
try{
    // &#x4E34;&#x754C;&#x533A;
}finally{
    // &#x91CA;&#x653E;&#x9501;
    reentrantLock.unlock();
}
</code></pre>
<p><strong>&#x53EF;&#x6253;&#x65AD;</strong></p>
<pre><code class="language-java">// &#x53EF;&#x88AB;interrupt&#x65B9;&#x6CD5;&#x6253;&#x65AD;
lock.lockInterruptibly();
</code></pre>
<p><strong>&#x9501;&#x8D85;&#x65F6;</strong></p>
<pre><code class="language-java">lock.tryLock(1,Timeunit.SECONDS)
</code></pre>
<p><strong>&#x516C;&#x5E73;&#x9501;</strong></p>
<pre><code class="language-java">// &#x516C;&#x5E73;&#x9501;
ReentrantLock lock = new ReentrantLock(true);
</code></pre>
<p><strong>&#x6761;&#x4EF6;&#x53D8;&#x91CF;</strong>&#x652F;&#x6301;&#x591A;&#x4E2A;&#x6761;&#x4EF6;&#x53D8;&#x91CF;</p>
<ul>
<li>await&#x524D;&#x9700;&#x8981;&#x83B7;&#x53D6;&#x9501;</li>
<li>await&#x6267;&#x884C;&#x540E;&#x4F1A;&#x91CA;&#x653E;&#x9501;&#x8FDB;&#x5165;conditionObject&#x7B49;&#x5F85;</li>
<li>await&#x7684;&#x7EBF;&#x7A0B;&#x88AB;&#x5524;&#x9192;&#xFF08;&#x6216;&#x6253;&#x65AD;&#x6216;&#x8D85;&#x65F6;&#xFF09;&#x53BB;&#x91CD;&#x65B0;&#x7ADE;&#x4E89;lock&#x9501;</li>
<li>&#x7ADE;&#x4E89;lock&#x9501;&#x6210;&#x529F;&#x540E;&#xFF0C;&#x4ECE;await&#x540E;&#x7EE7;&#x7EED;&#x6267;&#x884C;</li>
</ul>
<h3 id="%E5%B0%8F%E7%BB%93">&#x5C0F;&#x7ED3;</h3>
<p>&#x4F7F;&#x7528;synchronized&#x4E92;&#x65A5;&#x89E3;&#x51B3;&#x4E34;&#x754C;&#x533A;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x95EE;&#x9898;</p>
<ul>
<li>&#x638C;&#x63E1;synchronized&#x9501;&#x5BF9;&#x8C61;&#x8BED;&#x6CD5;</li>
<li>&#x638C;&#x63E1;synchronized&#x52A0;&#x8F7D;&#x6210;&#x5458;&#x65B9;&#x6CD5;&#x548C;&#x9759;&#x6001;&#x65B9;&#x6CD5;&#x8BED;&#x6CD5;</li>
<li>&#x638C;&#x63E1;wait/notify&#x540C;&#x6B65;&#x65B9;&#x6CD5;</li>
</ul>
<p>&#x4F7F;&#x7528;lock&#x4E92;&#x65A5;&#x89E3;&#x51B3;&#x4E34;&#x754C;&#x533A;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x95EE;&#x9898;&#xFF1A;&#x53EF;&#x6253;&#x65AD;&#x3001;&#x9501;&#x8D85;&#x65F6;&#x3001;&#x516C;&#x5E73;&#x9501;&#x3001;&#x6761;&#x4EF6;&#x53D8;&#x91CF;</p>
<p>&#x5B66;&#x4F1A;&#x5206;&#x6790;&#x53D8;&#x91CF;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x6027;&#x3001;&#x638C;&#x63E1;&#x5E38;&#x89C1;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7C7B;&#x7684;&#x4F7F;&#x7528;</p>
<p>&#x6D3B;&#x8DC3;&#x6027;&#x95EE;&#x9898;&#xFF1A;&#x6B7B;&#x9501;&#x3001;&#x6D3B;&#x9501;&#x3001;&#x9965;&#x997F;</p>
<p>&#x5E94;&#x7528;&#x65B9;&#x9762;</p>
<ul>
<li>&#x4E92;&#x65A5;&#xFF1A;&#x4F7F;&#x7528;synchronized&#x6216;Lock&#x8FBE;&#x5230;&#x5171;&#x4EAB;&#x8D44;&#x6E90;&#x4E92;&#x65A5;&#x6548;&#x679C;</li>
<li>&#x540C;&#x6B65;&#xFF1A;&#x4F7F;&#x7528;wait/notify&#x6216;Lock&#x7684;&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x6765;&#x8FBE;&#x5230;&#x7EBF;&#x7A0B;&#x95F4;&#x901A;&#x4FE1;&#x6548;&#x679C;</li>
</ul>
<p>&#x539F;&#x7406;&#x65B9;&#x9762;</p>
<ul>
<li>monitor&#x3001;synchronized&#x3001;wait/notify&#x539F;&#x7406;</li>
<li>synchronized&#x8FDB;&#x9636;</li>
<li>park &amp; unpark&#x539F;&#x7406;</li>
</ul>
<p>&#x6A21;&#x5F0F;&#x65B9;&#x9762;</p>
<ul>
<li>&#x540C;&#x6B65;&#x6A21;&#x5F0F;&#x81F3;&#x4FDD;&#x62A4;&#x6027;&#x6682;&#x505C;</li>
<li>&#x5F02;&#x6B65;&#x6A21;&#x578B;&#x4E4B;&#x751F;&#x4EA7;&#x8005;&#x6D88;&#x8D39;&#x8005;</li>
<li>&#x540C;&#x6B65;&#x6A21;&#x5F0F;&#x4E4B;&#x987A;&#x5E8F;&#x63A7;&#x5236;</li>
</ul>
<h2 id="%E5%85%B1%E4%BA%AB%E6%A8%A1%E5%9E%8B%E4%B9%8B%E5%86%85%E5%AD%98">&#x5171;&#x4EAB;&#x6A21;&#x578B;&#x4E4B;&#x5185;&#x5B58;</h2>
<p>Java&#x5185;&#x5B58;&#x6A21;&#x578B;JMM&#xFF0C;&#x5373;Java Memory Model&#xFF0C;&#x5B9A;&#x4E49;&#x4E86;&#x4E3B;&#x5B58;&#x3001;&#x5DE5;&#x4F5C;&#x5185;&#x5B58;&#x62BD;&#x8C61;&#x6982;&#x5FF5;&#xFF0C;&#x5E95;&#x5C42;&#x5BF9;&#x5E94;&#x7740;CPU&#x5BC4;&#x5B58;&#x5668;&#x3001;&#x7F13;&#x5B58;&#x3001;&#x786C;&#x4EF6;&#x5185;&#x5B58;&#x3001;CPU&#x6307;&#x4EE4;&#x4F18;&#x5316;&#x7B49;&#x3002;JMM&#x4F53;&#x73B0;&#x5728;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x65B9;&#x9762;</p>
<ul>
<li>&#x539F;&#x5B50;&#x6027;-&#x4FDD;&#x8BC1;&#x6307;&#x4EE4;&#x4E0D;&#x4F1A;&#x6536;&#x5230;&#x7EBF;&#x7A0B;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#x7684;&#x5F71;&#x54CD;</li>
<li>&#x53EF;&#x89C1;&#x6027;-&#x4FDD;&#x8BC1;&#x6307;&#x4EE4;&#x4E0D;&#x4F1A;&#x53D7;cpu&#x7F13;&#x5B58;&#x5F71;&#x54CD;</li>
<li>&#x6709;&#x5E8F;&#x6027;-&#x4FDD;&#x8BC1;&#x6307;&#x4EE4;&#x4E0D;&#x4F1A;&#x53D7;cpu&#x6307;&#x4EE4;&#x5E76;&#x4F18;&#x5316;&#x7684;&#x5F71;&#x54CD;</li>
</ul>
<h3 id="%E5%8F%AF%E8%A7%81%E6%80%A7">&#x53EF;&#x89C1;&#x6027;</h3>
<h4 id="%E9%80%80%E4%B8%8D%E5%87%BA%E7%9A%84%E5%BE%AA%E7%8E%AF">&#x9000;&#x4E0D;&#x51FA;&#x7684;&#x5FAA;&#x73AF;</h4>
<pre><code class="language-java">static boolean run = true;
public static void main(String[] args) throws InterruptedException{
    Thread t = new Thread(() -&gt; {
        whie(run){
            //...
        }
    });
    t.start();
    
    Thread.sleep(1000);
    log.debug(&quot;&#x505C;&#x6B62;t&quot;);
    run = false;// &#x7EBF;&#x7A0B;t&#x4E0D;&#x4F1A;&#x5982;&#x9884;&#x60F3;&#x7684;&#x505C;&#x4E0B;&#x6765;
}
</code></pre>
<ol>
<li>
<p>&#x521D;&#x59CB;&#x72B6;&#x6001;&#xFF0C;t&#x7EBF;&#x7A0B;&#x521A;&#x5F00;&#x59CB;&#x4ECE;&#x4E3B;&#x5185;&#x5B58;&#x8BFB;&#x53D6;&#x4E86;run&#x7684;&#x503C;&#x5230;&#x5DE5;&#x4F5C;&#x5185;&#x5B58;&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/ff766a76077633bc.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>&#x56E0;&#x4E3A;t&#x7EBF;&#x7A0B;&#x8981;&#x9891;&#x7E41;&#x4ECE;&#x4E3B;&#x5185;&#x5B58;&#x4E2D;&#x8BFB;&#x53D6;run&#x7684;&#x503C;&#xFF0C;JIT&#x7F16;&#x8BD1;&#x5668;&#x4F1A;&#x5C06;run&#x7684;&#x503C;&#x7F13;&#x5B58;&#x81F3;&#x81EA;&#x5DF1;&#x5DE5;&#x4F5C;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x544A;&#x8BC9;&#x7F13;&#x5B58;&#x4E2D;&#xFF0C;&#x51CF;&#x5C11;&#x5806;&#x8D2E;&#x5B58;&#x4E2D;run&#x7684;&#x8BBF;&#x95EE;&#xFF0C;&#x63D0;&#x9AD8;&#x6548;&#x7387;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/a1891c561a0528d0.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
<li>
<p>1&#x79D2;&#x540E;&#xFF0C;main&#x7EBF;&#x7A0B;&#x4FEE;&#x6539;&#x4E86;run&#x7684;&#x503C;&#x5E76;&#x540C;&#x6B65;&#x81F3;&#x5185;&#x5B58;&#xFF0C;&#x800C;t&#x662F;&#x4ECE;&#x81EA;&#x5DF1;&#x5DE5;&#x4F5C;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x544A;&#x8BC9;&#x7F13;&#x5B58;&#x4E2D;&#x8BFB;&#x53D6;&#x6574;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x503C;&#xFF0C;&#x7ED3;&#x679C;&#x6C38;&#x8FDC;&#x662F;&#x65E7;&#x503C;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/f05cb3f2fe4bab5c.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
</ol>
<h4 id="%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95">&#x89E3;&#x51B3;&#x65B9;&#x6CD5;</h4>
<p>volatile&#xFF08;&#x6613;&#x53D8;&#x5173;&#x952E;&#x5B57;&#xFF09;&#x5B83;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x4FEE;&#x9970;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x548C;&#x9759;&#x6001;&#x53D8;&#x91CF;&#xFF0C;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x7EBF;&#x7A0B;&#x4ECE;&#x81EA;&#x5DF1;&#x5DE5;&#x4F5C;&#x7F13;&#x5B58;&#x4E2D;&#x67E5;&#x627E;&#x53D8;&#x91CF;&#x7684;&#x503C;&#xFF0C;&#x5FC5;&#x987B;&#x4ECE;&#x4E3B;&#x5185;&#x5B58;&#x4E2D;&#x8BFB;&#x53D6;&#xFF0C;&#x7EBF;&#x7A0B;&#x64CD;&#x4F5C;volatile&#x53D8;&#x91CF;&#x90FD;&#x662F;&#x76F4;&#x63A5;&#x64CD;&#x4F5C;&#x4E3B;&#x5B58;&#x3002;</p>
<p>synchronized&#x8BED;&#x53E5;&#x5757;&#x65E2;&#x53EF;&#x4EE5;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x5757;&#x7684;&#x539F;&#x5B50;&#x6027;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x5757;&#x5185;&#x53D8;&#x91CF;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x3002;&#x4F46;&#x662F;&#x7F3A;&#x70B9;&#x662F;synchronized&#x5C5E;&#x4E8E;&#x91CD;&#x91CF;&#x7EA7;&#x64CD;&#x4F5C;&#xFF0C;&#x6027;&#x80FD;&#x76F8;&#x5BF9;&#x66F4;&#x4F4E;&#x3002;</p>
<h3 id="%E5%8E%9F%E5%AD%90%E6%80%A7">&#x539F;&#x5B50;&#x6027;</h3>
<p>&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5BF9;volatile&#x53D8;&#x91CF;&#x7684;&#x4FEE;&#x6539;&#x5BF9;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x53EF;&#x89C1;&#xFF0C;&#x4F46;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x539F;&#x5B50;&#x6027;&#x3002;</p>
<p><strong>&#x6CE8;&#x610F;</strong></p>
<p>synchronized&#x8BED;&#x53E5;&#x5757;&#x65E2;&#x53EF;&#x4EE5;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x5757;&#x7684;&#x539F;&#x5B50;&#x6027;&#xFF0C;&#x4E5F;&#x540C;&#x65F6;&#x4FDD;&#x8BC1;&#x4EE3;&#x7801;&#x5757;&#x5185;&#x53D8;&#x91CF;&#x7684;&#x53EF;&#x89C1;&#x6027;&#x3002;&#x4F46;&#x7F3A;&#x70B9;&#x662F;synchronized&#x662F;&#x5C5E;&#x4E8E;&#x91CD;&#x91CF;&#x7EA7;&#x64CD;&#x4F5C;&#xFF0C;&#x6027;&#x80FD;&#x76F8;&#x5BF9;&#x66F4;&#x4F4E;&#x3002;</p>
<h3 id="%E6%9C%89%E5%BA%8F%E6%80%A7">&#x6709;&#x5E8F;&#x6027;</h3>
<p>JVM&#x4F1A;&#x5728;&#x4E0D;&#x5F71;&#x54CD;&#x6B63;&#x786E;&#x6027;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#xFF0C;&#x8C03;&#x6574;&#x8BED;&#x53E5;&#x7684;&#x6267;&#x884C;&#x987A;&#x5E8F;&#x3002;&#x8FD9;&#x79CD;&#x7279;&#x6027;&#x79F0;&#x4E4B;&#x4E3A;&#x3010;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x3011;&#xFF0C;&#x591A;&#x7EBF;&#x7A0B;&#x4E0B;&#x3010;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x3011;&#x4F1A;&#x5F71;&#x54CD;&#x6B63;&#x786E;&#x6027;&#x3002;</p>
<h3 id="%E4%B8%A4%E9%98%B6%E6%AE%B5%E7%BB%88%E6%AD%A2%E6%A8%A1%E5%BC%8F">&#x4E24;&#x9636;&#x6BB5;&#x7EC8;&#x6B62;&#x6A21;&#x5F0F;</h3>
<p>&#x4F7F;&#x7528;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x65B9;&#x5F0F;&#x4F18;&#x96C5;&#x7684;&#x7ED3;&#x675F;&#x7EBF;&#x7A0B;&#x5229;&#x7528;isInterrupt&#x3001;&#x5229;&#x7528;&#x505C;&#x6B62;&#x6807;&#x8BB0;</p>
<h3 id="%E5%90%8C%E6%AD%A5%E6%A8%A1%E5%BC%8F%E4%B9%8B%E7%8A%B9%E8%B1%AB%E6%A8%A1%E5%BC%8F">&#x540C;&#x6B65;&#x6A21;&#x5F0F;&#x4E4B;&#x72B9;&#x8C6B;&#x6A21;&#x5F0F;</h3>
<p>Balking &#x7528;&#x5728;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x53D1;&#x73B0;&#x53E6;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5DF2;&#x7ECF;&#x505A;&#x4E86;&#x67D0;&#x4E00;&#x4EF6;&#x76F8;&#x540C;&#x7684;&#x4E8B;&#xFF0C;&#x90A3;&#x4E48;&#x672C;&#x7EBF;&#x7A0B;&#x65E0;&#x9700;&#x518D;&#x505A;&#x4E86;&#xFF0C;&#x76F4;&#x63A5;&#x7ED3;&#x675F;&#x8FD4;&#x56DE;&#x3002;</p>
<p>JVM&#x4F1A;&#x5728;&#x4E0D;&#x5F71;&#x54CD;&#x6B63;&#x786E;&#x6027;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#xFF0C;&#x53EF;&#x4EE5;&#x8C03;&#x6574;&#x8BED;&#x53E5;&#x7684;&#x6267;&#x884C;&#x987A;&#x5E8F;&#x3002;</p>
<h3 id="volatile%E5%8E%9F%E7%90%86">volatile&#x539F;&#x7406;</h3>
<p>volatile&#x7684;&#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x539F;&#x7406;&#x662F;&#x5185;&#x5B58;&#x5C4F;&#x969C;&#xFF0C;Memory Barrier&#xFF08;Memory Fence&#xFF09;</p>
<ul>
<li>&#x5BF9;volatile&#x53D8;&#x91CF;&#x7684;&#x5199;&#x6307;&#x4EE4;&#x540E;&#x4F1A;&#x52A0;&#x5165;&#x5199;&#x5C4F;&#x969C;</li>
<li>&#x5BF9;volatile&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x6307;&#x4EE4;&#x524D;&#x4F1A;&#x52A0;&#x5165;&#x8BFB;&#x5C4F;&#x969C;</li>
</ul>
<h4 id="%E4%BF%9D%E8%AF%81%E5%8F%AF%E8%A7%81%E6%80%A7">&#x4FDD;&#x8BC1;&#x53EF;&#x89C1;&#x6027;</h4>
<ul>
<li>
<p>&#x5199;&#x5C4F;&#x969C;(sfence)&#x4FDD;&#x8BC1;&#x5728;&#x8BE5;&#x5C4F;&#x969C;&#x4E4B;&#x524D;&#x7684;&#xFF0C;&#x5BF9;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x6539;&#x52A8;&#x90FD;&#x540C;&#x6B65;&#x5230;&#x4E3B;&#x5B58;&#x4E2D;&#x3002;</p>
</li>
<li>
<p>&#x8BFB;&#x5C4F;&#x969C;(lfence)&#x4FDD;&#x8BC1;&#x5728;&#x8BE5;&#x5C4F;&#x969C;&#x4E4B;&#x540E;&#xFF0C;&#x8BFB;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x53D6;&#xFF0C;&#x52A0;&#x8F7D;&#x7684;&#x662F;&#x4E3B;&#x5B58;&#x4E2D;&#x6700;&#x65B0;&#x6570;&#x636E;&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/88a23f92819c9f9a.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
</ul>
<h4 id="%E4%BF%9D%E8%AF%81%E6%9C%89%E5%BA%8F%E6%80%A7">&#x4FDD;&#x8BC1;&#x6709;&#x5E8F;&#x6027;</h4>
<ul>
<li>
<p>&#x5199;&#x5C4F;&#x969C;&#x4F1A;&#x786E;&#x4FDD;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x65F6;&#xFF0C;&#x4E0D;&#x4F1A;&#x5C06;&#x5199;&#x5C4F;&#x969C;&#x4E4B;&#x524D;&#x7684;&#x4EE3;&#x7801;&#x6392;&#x5728;&#x5199;&#x5C4F;&#x969C;&#x4E4B;&#x540E;</p>
</li>
<li>
<p>&#x8BFB;&#x5C4F;&#x969C;&#x4F1A;&#x786E;&#x4FDD;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x65F6;&#xFF0C;&#x4E0D;&#x4F1A;&#x5C06;&#x8BFB;&#x5C4F;&#x969C;&#x4E4B;&#x540E;&#x7684;&#x4EE3;&#x7801;&#x6392;&#x5728;&#x8BFB;&#x5C4F;&#x969C;&#x4E4B;&#x524D;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/9657c31d486ed2f5.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
</ul>
<p>&#x4F46;&#x4E0D;&#x80FD;&#x89E3;&#x51B3;&#x6307;&#x4EE4;&#x4EA4;&#x9519;</p>
<ul>
<li>
<p>&#x5199;&#x5C4F;&#x969C;&#x4EC5;&#x4EC5;&#x662F;&#x4FDD;&#x8BC1;&#x4E4B;&#x540E;&#x7684;&#x8BFB;&#x80FD;&#x591F;&#x8BFB;&#x5230;&#x6700;&#x65B0;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x4F46;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x8DD1;&#x5230;&#x5B83;&#x524D;&#x9762;&#x53BB;</p>
</li>
<li>
<p>&#x800C;&#x6709;&#x5E8F;&#x6027;&#x7684;&#x4FDD;&#x8BC1;&#x4E5F;&#x53EA;&#x662F;&#x4FDD;&#x8BC1;&#x672C;&#x7EBF;&#x7A0B;&#x5185;&#x76F8;&#x5173;&#x4EE3;&#x7801;&#x4E0D;&#x88AB;&#x91CD;&#x6392;&#x5E8F;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/b0cf80319c68a3c5.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
</li>
</ul>
<h3 id="double-checked-locking-dcl%E9%97%AE%E9%A2%98">double-checked locking DCL&#x95EE;&#x9898;</h3>
<p>&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x7C7B;&#x59CB;&#x7EC8;&#x53EA;&#x80FD;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x5B9E;&#x4F8B;&#xFF0C;&#x90A3;&#x4E48;&#x8FD9;&#x4E2A;&#x7C7B;&#x88AB;&#x79F0;&#x4E3A;&#x5355;&#x4F8B;&#x7C7B;&#xFF0C;&#x8FD9;&#x79CD;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x88AB;&#x79F0;&#x4E3A;&#x5355;&#x4F8B;&#x6A21;&#x5F0F;&#x3002;</p>
<pre><code class="language-java">public final class Singleton{
    private Singleton(){}
    private static /*volatile*/ Singleton INSTANCE = null;
    public static Singleton getInstance(){
        if(INISTANCE == null){
            synchronized(Singleton.class){
                if(INSTANCE == null){
                    INSTANCE = new Singleton();
                }
            }
        }
        return INSTANCE;
    }
}
</code></pre>
<ul>
<li>&#x61D2;&#x60F0;&#x5B9E;&#x4F8B;&#x5316;</li>
<li>&#x9996;&#x6B21;&#x4F7F;&#x7528;getInstance()&#x624D;&#x4F7F;&#x7528;synchronized&#x52A0;&#x9501;&#xFF0C;&#x540E;&#x7EED;&#x4F7F;&#x7528;&#x65E0;&#x9700;&#x52A0;&#x9501;</li>
<li>&#x6709;&#x9690;&#x542B;&#x7684;&#xFF1A;&#x7B2C;&#x4E00;&#x4E2A;if&#x4F7F;&#x7528;&#x4E86;INSTANCE&#x53D8;&#x91CF;&#xFF0C;&#x662F;&#x5728;&#x540C;&#x6B65;&#x4EE3;&#x7801;&#x5757;&#x5916;&#x9762;&#x3002;</li>
<li>&#x4EE3;&#x7801;&#x5757;&#x5185;&#x7684;&#x5B57;&#x8282;&#x7801;&#x4F1A;&#x6839;&#x636E;JVM&#x4F18;&#x5316;&#x800C;&#x81EA;&#x52A8;&#x91CD;&#x6392;&#x3002;&#x800C;&#x5916;&#x9762;&#x7684;if&#x8BED;&#x53E5;&#x4E0D;&#x662F;&#x52A0;&#x9501;&#x7684;&#xFF0C;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E0B;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6267;&#x884C;INSTANCE=new Singleton()&#xFF1B;&#x6709;&#x53EF;&#x80FD;&#x5148;&#x8D4B;&#x503C;&#x5728;&#x8C03;&#x7528;Singleton&#x5BF9;&#x8C61;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x3002;&#x800C;&#x7B2C;&#x4E8C;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x8FD9;&#x65F6;&#x8FDB;&#x5165;&#x65B9;&#x6CD5;&#xFF0C;&#x5224;&#x65AD;INSTANCE&#x4E0D;&#x4E3A;null&#xFF0C;&#x76F4;&#x63A5;&#x8303;&#x56F4;&#x5BF9;&#x8C61;&#xFF0C;&#x800C;&#x5B9E;&#x9645;&#x4E0A;INSTANCE&#x5F15;&#x7528;&#x5BF9;&#x8C61;&#x8FD8;&#x6CA1;&#x6709;&#x521D;&#x59CB;&#x5316;&#x3002;</li>
</ul>
<p>&#x89E3;&#x51B3;&#xFF1A;volatile&#x901A;&#x8FC7;&#x5185;&#x5B58;&#x5C4F;&#x969C;&#x53EF;&#x4EE5;&#x89E3;&#x51B3;&#x6307;&#x4EE4;&#x91CD;&#x6392;&#x7684;&#x95EE;&#x9898;</p>
<h3 id="happens-before">happens-before</h3>
<p>&#x89C4;&#x5B9A;&#x4E86;&#x5BF9;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x5199;&#x64CD;&#x4F5C;&#x5BF9;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x7684;&#x8BFB;&#x64CD;&#x4F5C;&#x53EF;&#x89C1;&#xFF0C;&#x5B83;&#x662F;&#x53EF;&#x89C1;&#x6027;&#x4E0E;&#x6709;&#x5E8F;&#x6027;&#x7684;&#x4E00;&#x5957;&#x89C4;&#x5219;&#x603B;&#x7ED3;&#xFF0C;&#x629B;&#x5F00;&#x4EE5;&#x4E0B;hasppens-before&#x89C4;&#x5219;&#xFF0C;JMM&#x5E76;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5BF9;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x5199;&#xFF0C;&#x5BF9;&#x4E8E;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5BF9;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x53EF;&#x89C1;&#x3002;</p>
<ul>
<li>
<p>&#x7EBF;&#x7A0B;&#x89E3;&#x9501;m&#x4E4B;&#x524D;&#x5BF9;&#x53D8;&#x91CF;&#x7684;&#x5199;&#xFF0C;&#x5BF9;&#x4E8E;&#x63A5;&#x4E0B;&#x6765;&#x5BF9;m&#x52A0;&#x9501;&#x7684;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5BF9;&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x53EF;&#x89C1;</p>
<pre><code class="language-java">static int x;
static Object m = new Object();
new Thread(() -&gt; {
    synchronized(m){
        x = 10;
    }
},&quot;t1&quot;).start();
new Thread(() -&gt; {
    synchronized(m){
        System.out.println(x);
    }
},&quot;t2&quot;).start();
</code></pre>
</li>
<li>
<p>&#x7EBF;&#x7A0B;&#x5BF9;volatile&#x53D8;&#x91CF;&#x7684;&#x5199;&#xFF0C;&#x8BFB;&#x63A5;&#x4E0B;&#x6765;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5BF9;&#x6539;&#x53D8;&#x4E86;&#x7684;&#x8BFB;&#x53EF;&#x89C1;</p>
<pre><code class="language-java">volatile static int x;
new Thread(() -&gt; {
    x = 10;
},&quot;t1&quot;).start();
new Thread(() -&gt; {
    System.out.println(x);
},&quot;t2&quot;).start();
</code></pre>
</li>
<li>
<p>&#x7EBF;&#x7A0B;start&#x524D;&#x5BF9;&#x53D8;&#x91CF;&#x7684;&#x5199;&#xFF0C;&#x5BF9;&#x8BE5;&#x7EBF;&#x7A0B;&#x5F00;&#x59CB;&#x540E;&#x5BF9;&#x8BE5;&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x53EF;&#x89C1;</p>
<pre><code class="language-java">static int x;
x = 10;
new Thread(() -&gt; {
    System.out.println(x);
},&quot;t2&quot;).start();
</code></pre>
</li>
<li>
<p>&#x7EBF;&#x7A0B;&#x7ED3;&#x675F;&#x524D;&#x5BF9;&#x53D8;&#x91CF;&#x7684;&#x5199;&#xFF0C;&#x5BF9;&#x5176;&#x5B83;&#x7EBF;&#x7A0B;&#x5F97;&#x77E5;&#x5B83;&#x7ED3;&#x675F;&#x540E;&#x7684;&#x8BFB;&#x53EF;&#x89C1;&#xFF08;&#x6BD4;&#x5982;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x8C03;&#x7528;t1.isAlive()&#x6216;t1.join()&#x7B49;&#x5F85;&#x5B83;&#x7ED3;&#x675F;&#xFF09;</p>
<pre><code class="language-java">static int x;
Thread t1 = new Thread(() -&gt; {
    x = 10;
},&quot;t1&quot;);
t1.start();
t1.join();
System.out.println(x);
</code></pre>
</li>
<li>
<p>&#x7EBF;&#x7A0B;t1&#x6253;&#x65AD;t2&#xFF08;interrupt&#xFF09;&#x524D;&#x5BF9;&#x53D8;&#x91CF;&#x7684;&#x5199;&#xFF0C;&#x5BF9;&#x4E8E;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5F97;&#x77E5;t2&#x88AB;&#x6253;&#x65AD;&#x540E;&#x5BF9;&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x53EF;&#x89C1;</p>
<pre><code class="language-java">static int x;
public static void main(String[] args){
    Thread t2 = new Thread(() -&gt; {
        while(true){
            if(Thread.currentThread().isInterrupted()){
                System.out.println(x);
                break;
            }
        }
    },&quot;t2&quot;);
    t2.start();
    
    new Thread(() -&gt; {
        Thread.sleep(1000);
        x = 10;
        t2.interrupt();
    }).start();
    
    while(!t2.isInterrupted()){
        Thread.yield();
    }
    System.out.println(x);
}
</code></pre>
</li>
<li>
<p>&#x5BF9;&#x53D8;&#x91CF;&#x9ED8;&#x8BA4;&#x503C;&#xFF08;0&#xFF0C;false&#xFF0C;null&#xFF09;&#x7684;&#x5199;&#xFF0C;&#x5BF9;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x5BF9;&#x8BE5;&#x53D8;&#x91CF;&#x7684;&#x8BFB;&#x53EF;&#x89C1;</p>
</li>
<li>
<p>&#x5177;&#x6709;&#x4F20;&#x9012;&#x6027;</p>
<pre><code class="language-java">volatile static int x;
static int y;
new Thread(() -&gt; {
    y = 10;
    x = 20;
},&quot;t1&quot;).start();
new Thread(() -&gt; {
    System.out.println(x);
},&quot;t2&quot;).start();
</code></pre>
</li>
</ul>
<p>&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x5355;&#x4F8B;</p>
<pre><code class="language-java">// &#x95EE;&#x9898;1&#xFF1A;&#x4E3A;&#x4EC0;&#x4E48;&#x52A0;final
// &#x95EE;&#x9898;2&#xFF1A;&#x5982;&#x679C;&#x5B9E;&#x73B0;&#x4E86;&#x5E8F;&#x5217;&#x5316;&#x63A5;&#x53E3;&#xFF0C;&#x8FD8;&#x8981;&#x505A;&#x4EC0;&#x4E48;&#x6765;&#x9632;&#x6B62;&#x53CD;&#x5E8F;&#x5217;&#x5316;&#x7834;&#x574F;&#x5355;&#x4F8B;
public final class Singleton implements Seriablizable{
    // &#x95EE;&#x9898;3&#xFF1A;&#x4E3A;&#x4EC0;&#x4E48;&#x8BBE;&#x7F6E;&#x4E3A;&#x79C1;&#x6709;&#xFF1F;&#x662F;&#x5426;&#x80FD;&#x9632;&#x6B62;&#x53CD;&#x5C04;&#x521B;&#x5EFA;&#x65B0;&#x7684;&#x5B9E;&#x4F8B;&#xFF1F;
    private Singleton{}
    // &#x95EE;&#x9898;4&#xFF1A;&#x8FD9;&#x6837;&#x521D;&#x59CB;&#x5316;&#x662F;&#x5426;&#x80FD;&#x4FDD;&#x8BC1;&#x5355;&#x4F8B;&#x5BF9;&#x8C61;&#x521B;&#x5EFA;&#x65F6;&#x7684;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF1F;
    private static final Singleton INSTANCE = new Singleton();
    // &#x95EE;&#x9898;5&#xFF1A;&#x4E3A;&#x4EC0;&#x4E48;&#x63D0;&#x4F9B;&#x9759;&#x6001;&#x65B9;&#x6CD5;&#x800C;&#x4E0D;&#x662F;&#x76F4;&#x63A5;&#x5C06;INSTANCE&#x8BBE;&#x7F6E;&#x4E3A;public&#xFF0C;&#x8BF4;&#x51FA;&#x4F60;&#x77E5;&#x9053;&#x7684;&#x7406;&#x7531;
    public static Singleton getInstance(){
        return INSTANCE;
    }
}
</code></pre>
<h3 id="%E5%B0%8F%E7%BB%93">&#x5C0F;&#x7ED3;</h3>
<p>&#x53EF;&#x89C1;&#x6027;</p>
<p>&#x6709;&#x5E8F;&#x6027;</p>
<p>happens-before&#x539F;&#x5219;</p>
<p>&#x539F;&#x7406;&#x65B9;&#x9762;</p>
<ul>
<li>CPU&#x6307;&#x4EE4;&#x5E76;&#x884C;</li>
<li>volatile</li>
</ul>
<p>&#x6A21;&#x5F0F;&#x65B9;&#x9762;</p>
<ul>
<li>&#x4E24;&#x9636;&#x6BB5;&#x7EC8;&#x6B62;&#x6A21;&#x5F0F;&#x7684;volatile&#x6539;&#x8FDB;</li>
<li>&#x540C;&#x6B65;&#x6A21;&#x5F0F;&#x4E4B;Balking</li>
</ul>
<h2 id="%E5%85%B1%E4%BA%AB%E6%A8%A1%E5%9E%8B%E4%B9%8B%E6%97%A0%E9%94%81">&#x5171;&#x4EAB;&#x6A21;&#x578B;&#x4E4B;&#x65E0;&#x9501;</h2>
<h3 id="cas%E5%92%8Cvolatile">CAS&#x548C;volatile</h3>
<pre><code class="language-java">AtomicInteger balance = new AtomicInteger();
public void withdraw(Integer amount){
    while(true){
        int prev = balance.get();
        int next = prev - amount;
        if(balance.compareAndSet(prev,next)){
            break;
        }
    }
}
</code></pre>
<p>CAS&#x5FC5;&#x987B;&#x501F;&#x52A9;volatile&#x624D;&#x80FD;&#x8BFB;&#x53D6;&#x5230;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x6700;&#x65B0;&#x503C;&#x6765;&#x5B9E;&#x73B0;&#x3010;&#x6BD4;&#x8F83;&#x5E76;&#x4EA4;&#x6362;&#x3011;&#x7684;&#x6548;&#x679C;</p>
<p>CAS&#x7279;&#x70B9;&#xFF1A;&#x7ED3;&#x5408;CAS&#x548C;volatile&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x65E0;&#x9501;&#x5E76;&#x53D1;&#xFF0C;&#x9002;&#x7528;&#x4E8E;&#x7EBF;&#x7A0B;&#x6570;&#x5C11;&#xFF0C;&#x591A;&#x6838;CPU&#x7684;&#x573A;&#x666F;&#x3002;</p>
<ul>
<li>CAS&#x65F6;&#x57FA;&#x4E8E;&#x4E50;&#x89C2;&#x9501;&#x7684;&#x601D;&#x60F3;</li>
<li>synchronized&#x65F6;&#x57FA;&#x4E8E;&#x60B2;&#x89C2;&#x9501;&#x7684;&#x601D;&#x60F3;</li>
<li>CAS&#x4F53;&#x73B0;&#x7684;&#x65F6;&#x65E0;&#x9501;&#x5E76;&#x53D1;&#xFF0C;&#x65E0;&#x963B;&#x585E;&#x5E76;&#x53D1;&#xFF0C;
<ul>
<li>&#x56E0;&#x4E3A;&#x6CA1;&#x6709;&#x4F7F;&#x7528;synchronized&#xFF0C;&#x6240;&#x4EE5;&#x7EBF;&#x7A0B;&#x4E0D;&#x4F1A;&#x9677;&#x5165;&#x963B;&#x585E;&#xFF0C;&#x8FD9;&#x65F6;&#x6548;&#x7387;&#x63D0;&#x5347;&#x7684;&#x56E0;&#x7D20;&#x4E4B;&#x4E00;</li>
<li>&#x5982;&#x679C;&#x7ADE;&#x4E89;&#x6FC0;&#x70C8;&#xFF0C;&#x91CD;&#x8BD5;&#x5FC5;&#x7136;&#x9891;&#x7E41;&#x53D1;&#x751F;&#xFF0C;&#x6548;&#x7387;&#x53CD;&#x800C;&#x53D7;&#x5F71;&#x54CD;</li>
</ul>
</li>
</ul>
<h3 id="%E5%8E%9F%E5%AD%90%E6%95%B4%E6%95%B0">&#x539F;&#x5B50;&#x6574;&#x6570;</h3>
<p>JUC&#x5E76;&#x53D1;&#x5305;&#x63D0;&#x4F9B;&#x4E86;AtomicBoolean&#x3001;AtomicInteger&#x3001;AtomicLong</p>
<p>updateAndGet &amp; getAndUpdate</p>
<h3 id="%E5%8E%9F%E5%AD%90%E5%BC%95%E7%94%A8">&#x539F;&#x5B50;&#x5F15;&#x7528;</h3>
<ul>
<li>AtomicReference</li>
<li>AtomicMarkableReference</li>
<li>AtomicStampedReference</li>
</ul>
<p>&#x4E3B;&#x7EBF;&#x7A0B;&#x4EC5;&#x80FD;&#x5224;&#x65AD;&#x51FA;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x503C;&#x4E0E;&#x6700;&#x521D;&#x503C;A&#x662F;&#x5426;&#x76F8;&#x540C;&#xFF0C;&#x4E0D;&#x80FD;&#x611F;&#x77E5;&#x5230;&#x4ECE;A&#x6539;&#x4E3A;B&#x53C8;&#x6539;&#x4E3A;A&#x7684;&#x60C5;&#x51B5;&#xFF08;ABA&#x95EE;&#x9898;&#xFF09;&#x3002;&#x5982;&#x679C;&#x4E3B;&#x7EBF;&#x7A0B;&#x5E0C;&#x671B;&#xFF1A;&#x53EA;&#x8981;&#x6709;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x3010;&#x52A8;&#x8FC7;&#x3011;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#xFF0C;&#x90A3;&#x4E48;&#x81EA;&#x5DF1;&#x7684;CAS&#x5C31;&#x5931;&#x8D25;&#x3002;&#x8FD9;&#x65F6;&#xFF0C;&#x6BD4;&#x8F83;&#x503C;&#x662F;&#x4E0D;&#x591F;&#x7684;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x518D;&#x52A0;&#x4E00;&#x4E2A;&#x7248;&#x672C;&#x53F7;&#x3002;</p>
<p>AtomicStampedReference&#x53EF;&#x4EE5;&#x7ED9;&#x539F;&#x5B50;&#x5F15;&#x7528;&#x52A0;&#x4E0A;&#x7248;&#x672C;&#x53F7;&#xFF0C;&#x8FFD;&#x8E2A;&#x539F;&#x5B50;&#x5F15;&#x7528;&#x6574;&#x4E2A;&#x7684;&#x53D8;&#x5316;&#x8FC7;&#x7A0B;&#xFF0C;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#x53D8;&#x91CF;&#x4E2D;&#x9014;&#x88AB;&#x66F4;&#x6539;&#x4E86;&#x51E0;&#x6B21;&#x3002;&#x5982;&#x679C;&#x4E0D;&#x5173;&#x5FC3;&#x5F15;&#x7528;&#x53D8;&#x91CF;&#x66F4;&#x6539;&#x4E86;&#x51E0;&#x6B21;&#xFF0C;&#x53EA;&#x662F;&#x5355;&#x7EAF;&#x7684;&#x5173;&#x7CFB;&#x662F;&#x5426;&#x66F4;&#x6539;&#x8FC7;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;AtomicMarkableReference&#x3002;</p>
<h3 id="%E5%8E%9F%E5%AD%90%E6%95%B0%E7%BB%84">&#x539F;&#x5B50;&#x6570;&#x7EC4;</h3>
<ul>
<li>AtomicIntegerArray</li>
<li>AtomicLongArray</li>
<li>AtomicReferenceArray</li>
</ul>
<h3 id="%E5%AD%97%E6%AE%B5%E6%9B%B4%E6%96%B0%E5%99%A8">&#x5B57;&#x6BB5;&#x66F4;&#x65B0;&#x5668;</h3>
<ul>
<li>AtomicReferenceFieldUpdater</li>
<li>AtomicIntegerFieldUpdater</li>
<li>AtomicLongFieldUpdater</li>
</ul>
<h3 id="%E5%8E%9F%E5%AD%90%E7%B4%AF%E5%8A%A0%E5%99%A8">&#x539F;&#x5B50;&#x7D2F;&#x52A0;&#x5668;</h3>
<ul>
<li>LongAdder</li>
<li>LongAccumulator</li>
</ul>
<pre><code class="language-java">// &#x7D2F;&#x52A0;&#x5355;&#x5143;&#x6570;&#x7EC4;&#xFF0C;&#x61D2;&#x60F0;&#x521D;&#x59CB;&#x5316;
transient volatile Cells[] cells;
// &#x57FA;&#x7840;&#x503C;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x7ADE;&#x4E89;&#xFF0C;&#x5219;&#x7528;cas&#x7D2F;&#x52A0;&#x8FD9;&#x4E2A;&#x57DF;
transient volatile long base;
// &#x5728;cells&#x521B;&#x5EFA;&#x6216;&#x6269;&#x5BB9;&#x65F6;&#xFF0C;&#x7F6E;&#x4E3A;1&#xFF0C;&#x8868;&#x793A;&#x52A0;&#x9501;
transient volatile int cellsBusy;
</code></pre>
<h4 id="%E5%8E%9F%E7%90%86%E4%B9%8B%E4%BC%AA%E5%85%B1%E4%BA%AB">&#x539F;&#x7406;&#x4E4B;&#x4F2A;&#x5171;&#x4EAB;</h4>
<p>&#x56E0;&#x4E3A;CPU&#x4E0E;&#x5185;&#x5B58;&#x901F;&#x5EA6;&#x5DEE;&#x5F02;&#x5F88;&#x5927;&#xFF0C;&#x9700;&#x8981;&#x9760;&#x9884;&#x8BFB;&#x6570;&#x636E;&#x81F3;&#x7F13;&#x5B58;&#x6765;&#x63D0;&#x5347;&#x6548;&#x7387;&#x3002;</p>
<p>&#x800C;&#x7F13;&#x5B58;&#x4EE5;&#x7F13;&#x5B58;&#x884C;&#x4E3A;&#x5355;&#x4F4D;&#xFF0C;&#x6BCF;&#x4E2A;&#x7F13;&#x5B58;&#x884C;&#x5BF9;&#x5E94;&#x4E00;&#x5757;&#x5185;&#x5B58;&#xFF0C;&#x4E00;&#x822C;64&#x4E2A;&#x5B57;&#x8282;&#x3002;</p>
<p>&#x7F13;&#x5B58;&#x7684;&#x52A0;&#x5165;&#x9020;&#x6210;&#x6570;&#x636E;&#x526F;&#x672C;&#x7684;&#x4EA7;&#x751F;&#xFF0C;&#x5373;&#x540C;&#x4E00;&#x4EFD;&#x6570;&#x636E;&#x4F1A;&#x7F13;&#x5B58;&#x5728;&#x4E0D;&#x540C;&#x6838;&#x5FC3;&#x7684;&#x7F13;&#x5B58;&#x884C;&#x4E2D;&#x3002;</p>
<p>CPU&#x8000;&#x4FDD;&#x8BC1;&#x6570;&#x636E;&#x4E00;&#x81F4;&#x6027;&#xFF0C;&#x5982;&#x679C;&#x67D0;&#x4E2A;CPU&#x6838;&#x5FC3;&#x66F4;&#x6539;&#x4E86;&#x6570;&#x636E;&#xFF0C;&#x5176;&#x4ED6;CPU&#x6838;&#x5FC3;&#x5BF9;&#x5E94;&#x7684;&#x6574;&#x4E2A;&#x7F13;&#x5B58;&#x884C;&#x5FC5;&#x987B;&#x5931;&#x6548;&#x3002;</p>
<p>&#x56E0;&#x4E3A;Cell&#x662F;&#x6570;&#x7EC4;&#x5F62;&#x5F0F;&#xFF0C;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x8FDE;&#x7EED;&#x5B58;&#x50A8;&#x7684;&#xFF0C;&#x4E00;&#x4E2A;Cell&#x4E3A;24&#x5B57;&#x8282;&#xFF08;16&#x5B57;&#x8282;&#x7684;&#x5BF9;&#x8C61;&#x5934;&#xFF0C;&#x548C;8&#x5B57;&#x8282;&#x7684;value&#xFF09;&#xFF0C;&#x56E0;&#x6B64;&#x7F13;&#x5B58;&#x884C;&#x53EF;&#x4EE5;&#x5B58;&#x4E0B;2&#x4E2A;cell&#x5BF9;&#x8C61;&#x3002;&#x90A3;&#x4E48;&#x95EE;&#x9898;&#x6765;&#x4E86;&#xFF1A;</p>
<ul>
<li>Core-0&#x8981;&#x4FEE;&#x6539;Cell[0]</li>
<li>Core-1&#x8981;&#x4FEE;&#x6539;Cell[1]</li>
</ul>
<p>&#x65E0;&#x8BBA;&#x8C01;&#x4FEE;&#x6539;&#x6210;&#x529F;&#xFF0C;&#x90FD;&#x4F1A;&#x5BFC;&#x81F4;&#x5BF9;&#x65B9;Core&#x7684;&#x7F13;&#x5B58;&#x884C;&#x5931;&#x6548;&#x3002;</p>
<p>@sun.misc.Contended &#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x7F13;&#x5B58;&#x884C;&#x4F2A;&#x5171;&#x4EAB;&#x7684;&#x95EE;&#x9898;&#x3002;&#x539F;&#x7406;&#x662F;&#x4F7F;&#x7528;&#x6B64;&#x6CE8;&#x89E3;&#x7684;&#x5BF9;&#x8C61;&#x6216;&#x5B57;&#x6BB5;&#x7684;&#x524D;&#x540E;&#x65B9;&#x5404;&#x589E;&#x52A0;128&#x5B57;&#x8282;&#x5927;&#x5C0F;&#x7684;padding&#xFF0C;&#x4ECE;&#x800C;CPU&#x5C06;&#x5BF9;&#x8C61;&#x9884;&#x8BFB;&#x81F3;&#x7F13;&#x5B58;&#x65F6;&#x5360;&#x7528;&#x4E0D;&#x540C;&#x7684;&#x7F13;&#x5B58;&#x884C;&#x3002;</p>
<h3 id="unsafe">Unsafe</h3>
<p>Unsafe&#x5BF9;&#x8C61;&#x63D0;&#x4F9B;&#x4E86;&#x975E;&#x5E38;&#x5E95;&#x5C42;&#x7684;&#xFF0C;&#x64CD;&#x4F5C;&#x5185;&#x5B58;&#x3001;&#x7EBF;&#x7A0B;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;Unsafe&#x5BF9;&#x8C61;&#x4E0D;&#x80FD;&#x76F4;&#x63A5;&#x8C03;&#x7528;&#xFF0C;&#x53EA;&#x80FD;&#x901A;&#x8FC7;&#x53CD;&#x5C04;&#x83B7;&#x5F97;&#x3002;</p>
<pre><code class="language-java">Field theUnsafe = Unsafe.class.getDeclaredField(&quot;theUnsafe&quot;);
</code></pre>
<p><em><strong>&#x51FD;&#x6570;&#x5F0F;&#x7F16;&#x7A0B;</strong></em></p>
<pre><code class="language-java">// supplier &#x63D0;&#x4F9B;&#x8005; &#x65E0;&#x4E2D;&#x751F;&#x6709; ()-&gt;&#x7ED3;&#x679C;
// function &#x51FD;&#x6570; &#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x4E00;&#x4E2A;&#x7ED3;&#x679C; (&#x53C2;&#x6570;)-&gt;&#x7ED3;&#x679C;&#xFF0C;BiFunction(&#x53C2;&#x6570;1,&#x53C2;&#x6570;2)-&gt;&#x7ED3;&#x679C;
// consumer &#x6D88;&#x8D39;&#x8005; &#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x6CA1;&#x7ED3;&#x679C;(&#x53C2;&#x6570;)-&gt;void&#xFF0C;BiCosumer(&#x53C2;&#x6570;1&#xFF0C;&#x53C2;&#x6570;2)-&gt;
</code></pre>
<h3 id="%E5%B0%8F%E7%BB%93">&#x5C0F;&#x7ED3;</h3>
<p>CAS&#x548C;volatile</p>
<p>API</p>
<ul>
<li>&#x539F;&#x5B50;&#x6574;&#x6570;</li>
<li>&#x539F;&#x5B50;&#x5F15;&#x7528;</li>
<li>&#x539F;&#x5B50;&#x6570;&#x7EC4;</li>
<li>&#x5B57;&#x6BB5;&#x66F4;&#x65B0;&#x5668;</li>
<li>&#x539F;&#x5B50;&#x7D2F;&#x52A0;&#x5668;</li>
</ul>
<p>Unsafe</p>
<p>&#x539F;&#x7406;</p>
<ul>
<li>LongAdder&#x6E90;&#x7801;</li>
<li>&#x4F2A;&#x5171;&#x4EAB;</li>
</ul>
<h2 id="%E5%85%B1%E4%BA%AB%E6%A8%A1%E5%9E%8B%E4%B9%8B%E4%B8%8D%E5%8F%AF%E5%8F%98">&#x5171;&#x4EAB;&#x6A21;&#x578B;&#x4E4B;&#x4E0D;&#x53EF;&#x53D8;</h2>
<h3 id="%E6%97%A5%E6%9C%9F%E8%BD%AC%E6%8D%A2%E7%9A%84%E9%97%AE%E9%A2%98">&#x65E5;&#x671F;&#x8F6C;&#x6362;&#x7684;&#x95EE;&#x9898;</h3>
<p>SimpleDateFormat&#x4E0D;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#xFF0C;&#x591A;&#x7EBF;&#x7A0B;&#x65F6;&#x6709;&#x5F88;&#x5927;&#x51E0;&#x7387;&#x51FA;&#x73B0;java.lang.NumberFormatException&#x6216;&#x8005;&#x51FA;&#x73B0;&#x4E0D;&#x6B63;&#x786E;&#x7684;&#x65E5;&#x671F;&#x89E3;&#x6790;&#x7ED3;&#x679C;&#x3002;</p>
<p>&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x7684;&#x4F7F;&#x7528;</p>
<p>DateTimeFormeatter&#x5BF9;&#x8C61;&#x662F;immutable&#x3001;Thread-safe&#x7684;&#x3002;</p>
<h3 id="%E4%B8%8D%E5%8F%AF%E5%8F%98%E7%B1%BB%E8%AE%BE%E8%AE%A1">&#x4E0D;&#x53EF;&#x53D8;&#x7C7B;&#x8BBE;&#x8BA1;</h3>
<p>String&#x7C7B;&#x4E5F;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x7684;&#x3002;</p>
<h4 id="final%E7%9A%84%E4%BD%BF%E7%94%A8">final&#x7684;&#x4F7F;&#x7528;</h4>
<p>String&#x7C7B;&#x3001;&#x7C7B;&#x4E2D;&#x6240;&#x6709;&#x5C5E;&#x6027;&#x90FD;&#x662F;final&#x7684;</p>
<ul>
<li>&#x5C5E;&#x6027;&#x7528;final&#x4FEE;&#x9970;&#x4FDD;&#x8BC1;&#x4E86;&#x8BE5;&#x5C5E;&#x6027;&#x662F;&#x53EA;&#x8BFB;&#x7684;&#xFF0C;&#x4E0D;&#x80FD;&#x4FEE;&#x6539;</li>
<li>&#x7C7B;&#x7528;final&#x4FEE;&#x9970;&#x4FDD;&#x8BC1;&#x4E86;&#x8BE5;&#x7C7B;&#x4E2D;&#x7684;&#x65B9;&#x6CD5;&#x4E0D;&#x80FD;&#x88AB;&#x8986;&#x76D6;&#xFF0C;&#x9632;&#x6B62;&#x5B50;&#x7C7B;&#x65E0;&#x610F;&#x95F4;&#x7834;&#x574F;&#x4E0D;&#x53EF;&#x53D8;&#x6027;</li>
</ul>
<h4 id="%E4%BF%9D%E6%8A%A4%E6%80%A7%E6%8B%B7%E8%B4%9D">&#x4FDD;&#x62A4;&#x6027;&#x62F7;&#x8D1D;</h4>
<p>&#x4F7F;&#x7528;&#x5B57;&#x7B26;&#x4E32;&#x65F6;&#xFF0C;&#x6709;&#x4E00;&#x4E9B;&#x8DDF;&#x4FEE;&#x6539;&#x76F8;&#x5173;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x6BD4;&#x5982;substring&#x7B49;&#xFF0C;&#x5176;&#x5185;&#x90E8;&#x662F;&#x8C03;&#x7528;String&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x5B57;&#x7B26;&#x4E32;&#x3002;&#x6784;&#x9020;&#x65B9;&#x6CD5;&#x6784;&#x9020;&#x65B0;&#x5B57;&#x7B26;&#x4E32;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x4F1A;&#x751F;&#x6210;&#x65B0;&#x7684;char[] value&#xFF0C;&#x5BF9;&#x5185;&#x5BB9;&#x8FDB;&#x884C;&#x590D;&#x5236;&#x3002;&#x8FD9;&#x79CD;&#x901A;&#x8FC7;&#x521B;&#x5EFA;&#x526F;&#x672C;&#x5BF9;&#x8C61;&#x6765;&#x907F;&#x514D;&#x5171;&#x4EAB;&#x7684;&#x624B;&#x6BB5;&#x79F0;&#x4E4B;&#x4E3A;&#x3010;&#x4FDD;&#x62A4;&#x6027;&#x62F7;&#x8D1D;&#xFF08;defensive copy&#xFF09;&#x3011;</p>
<h4 id="%E6%A8%A1%E5%BC%8F%E4%B9%8B%E4%BA%AB%E5%85%83">&#x6A21;&#x5F0F;&#x4E4B;&#x4EAB;&#x5143;</h4>
<p>&#x4EAB;&#x5143;&#x6A21;&#x5F0F;Flyweight pattern&#xFF0C;&#x5F53;&#x9700;&#x8981;&#x91CD;&#x7528;&#x6570;&#x91CF;&#x6709;&#x9650;&#x7684;&#x540C;&#x4E00;&#x7C7B;&#x5BF9;&#x8C61;&#x65F6;</p>
<h5 id="%E5%8C%85%E8%A3%85%E7%B1%BB">&#x5305;&#x88C5;&#x7C7B;</h5>
<p>&#x5728;JDK&#x4E2D;Boolean&#x3001;Byte&#x3001;Short&#x3001;Integer&#x3001;Long&#x3001;Character&#x7B49;&#x5305;&#x88C5;&#x7C7B;&#x63D0;&#x4F9B;&#x4E86;valueOf()&#x65B9;&#x6CD5;&#xFF0C;&#x4F8B;&#x5982;Long&#x7684;valueOf&#x4F1A;&#x7F13;&#x5B58;-128~127&#x4E4B;&#x95F4;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5728;&#x8FD9;&#x4E2A;&#x8303;&#x56F4;&#x4E4B;&#x95F4;&#x4F1A;&#x91CD;&#x7528;&#x5BF9;&#x8C61;&#xFF0C;&#x5927;&#x4E8E;&#x8FD9;&#x4E2A;&#x8303;&#x56F4;&#x624D;&#x4F1A;&#x65B0;&#x5EFA;Long&#x5BF9;&#x8C61;&#x3002;</p>
<h5 id="string%E4%B8%B2%E6%B1%A0">String&#x4E32;&#x6C60;</h5>
<h5 id="bigdecimal-biginteger">BigDecimal BigInteger</h5>
<h4 id="%E5%8E%9F%E7%90%86%E4%B9%8Bfinal">&#x539F;&#x7406;&#x4E4B;final</h4>
<p>&#x8BBE;&#x7F6E;final&#x53D8;&#x91CF;&#x7684;&#x539F;&#x7406;&#xFF1A;&#x5B57;&#x8282;&#x7801;&#x53D1;&#x73B0;final&#x53D8;&#x91CF;&#x8D4B;&#x503C;&#x4E5F;&#x662F;&#x901A;&#x8FC7;putfield&#x6307;&#x4EE4;&#x5B8C;&#x6210;&#xFF0C;&#x6307;&#x4EE4;&#x4E4B;&#x540E;&#x52A0;&#x5165;&#x5199;&#x5C4F;&#x969C;&#xFF0C;&#x4FDD;&#x8BC1;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x8BFB;&#x5B83;&#x7684;&#x65F6;&#x5019;&#x4E0D;&#x4F1A;&#x51FA;&#x73B0;0&#x7684;&#x60C5;&#x51B5;</p>
<p>&#x83B7;&#x53D6;final&#x53D8;&#x91CF;&#x7684;&#x539F;&#x7406;&#xFF08;&#x7ED3;&#x5408;&#x5B57;&#x8282;&#x7801;&#xFF09;</p>
<h4 id="%E6%97%A0%E7%8A%B6%E6%80%81">&#x65E0;&#x72B6;&#x6001;</h4>
<p>&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x7684;&#x7C7B;&#x662F;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;&#x3002;&#x56E0;&#x4E3A;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x4FDD;&#x5B58;&#x7684;&#x6570;&#x636E;&#x4E5F;&#x53EF;&#x4EE5;&#x79F0;&#x4E3A;&#x72B6;&#x6001;&#x4FE1;&#x606F;&#xFF0C;&#x56E0;&#x6B64;&#x6CA1;&#x6709;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x5C31;&#x79F0;&#x4E4B;&#x4E3A;&#x3010;&#x65E0;&#x72B6;&#x6001;&#x3011;</p>
<h2 id="%E5%85%B1%E4%BA%AB%E6%A8%A1%E5%9E%8B%E4%B9%8B%E5%B9%B6%E5%8F%91%E5%B7%A5%E5%85%B7">&#x5171;&#x4EAB;&#x6A21;&#x578B;&#x4E4B;&#x5E76;&#x53D1;&#x5DE5;&#x5177;</h2>
<h3 id="%E7%BA%BF%E7%A8%8B%E6%B1%A0">&#x7EBF;&#x7A0B;&#x6C60;</h3>
<p>ThreadPoolExecutor</p>
<h4 id="%E7%BA%BF%E7%A8%8B%E6%B1%A0%E7%8A%B6%E6%80%81">&#x7EBF;&#x7A0B;&#x6C60;&#x72B6;&#x6001;</h4>
<p>ThreadPoolExecutor&#x4F7F;&#x7528;int&#x7684;&#x9AD8;&#x4E09;&#x4F4D;&#x6765;&#x8868;&#x793A;&#x7EBF;&#x7A0B;&#x6C60;&#x72B6;&#x6001;&#xFF0C;&#x4F4E;29&#x4F4D;&#x8868;&#x793A;&#x7EBF;&#x7A0B;&#x6570;&#x91CF;</p>
<table>
<thead>
<tr>
<th>&#x72B6;&#x6001;&#x540D;</th>
<th>&#x9AD8;3&#x4F4D;</th>
<th>&#x63A5;&#x53D7;&#x65B0;&#x4EFB;&#x52A1;</th>
<th>&#x5904;&#x7406;&#x963B;&#x585E;&#x961F;&#x5217;&#x4EFB;&#x52A1;</th>
<th>&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>RUNNING</td>
<td>111</td>
<td>Y</td>
<td>Y</td>
<td></td>
</tr>
<tr>
<td>SHUTDOWN</td>
<td>000</td>
<td>N</td>
<td>Y</td>
<td>&#x4E0D;&#x4F1A;&#x63A5;&#x53D7;&#x65B0;&#x4EFB;&#x52A1;&#xFF0C;&#x4F46;&#x4F1A;&#x5904;&#x7406;&#x963B;&#x585E;&#x961F;&#x5217;&#x5269;&#x4F59;&#x4EFB;&#x52A1;</td>
</tr>
<tr>
<td>STOP</td>
<td>001</td>
<td>N</td>
<td>N</td>
<td>&#x4F1A;&#x4E2D;&#x65AD;&#x6B63;&#x5728;&#x6267;&#x884C;&#x7684;&#x4EFB;&#x52A1;&#xFF0C;&#x5E76;&#x629B;&#x5F03;&#x963B;&#x585E;&#x961F;&#x5217;&#x4EFB;&#x52A1;</td>
</tr>
<tr>
<td>TIDYING</td>
<td>010</td>
<td>-</td>
<td>-</td>
<td>&#x4EFB;&#x52A1;&#x5168;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#xFF0C;&#x6D3B;&#x52A8;&#x7EBF;&#x7A0B;&#x4E3A;0&#xFF0C;&#x5373;&#x5C06;&#x8FDB;&#x5165;&#x7EC8;&#x7ED3;</td>
</tr>
<tr>
<td>TERMINATED</td>
<td>011</td>
<td>-</td>
<td>-</td>
<td>&#x7EC8;&#x7ED3;&#x72B6;&#x6001;</td>
</tr>
</tbody>
</table>
<p>&#x6570;&#x5B57;&#x4E0A;&#x6BD4;&#x8F83;&#xFF0C;TERMINATED &gt; TIDYING &gt; STOP &gt; SHUTDOWN &gt; RUNNING</p>
<h4 id="%E6%9E%84%E9%80%A0%E6%96%B9%E6%B3%95">&#x6784;&#x9020;&#x65B9;&#x6CD5;</h4>
<ul>
<li>
<p>corePoolSize &#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570;&#x76EE;&#xFF08;&#x6700;&#x591A;&#x4FDD;&#x7559;&#x7684;&#x7EBF;&#x7A0B;&#x6570;&#xFF09;</p>
</li>
<li>
<p>maximumPoolSize &#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x76EE;</p>
</li>
<li>
<p>keepAliveTime &#x751F;&#x5B58;&#x65F6;&#x95F4;</p>
</li>
<li>
<p>unit &#x65F6;&#x95F4;&#x5355;&#x4F4D;</p>
</li>
<li>
<p>workQueue &#x963B;&#x585E;&#x961F;&#x5217;</p>
</li>
<li>
<p>threadFactory &#x7EBF;&#x7A0B;&#x5DE5;&#x5382;</p>
</li>
<li>
<p>handler &#x62D2;&#x7EDD;&#x7B56;&#x7565;</p>
</li>
<li>
<p>&#x7EBF;&#x7A0B;&#x6C60;&#x521A;&#x5F00;&#x59CB;&#x6CA1;&#x6709;&#x7EBF;&#x7A0B;&#xFF0C;&#x5F53;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#x63D0;&#x4EA4;&#x7ED9;&#x7EBF;&#x7A0B;&#x6C60;&#x540E;&#xFF0C; &#x7EBF;&#x7A0B;&#x6C60;&#x4F1A;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7EBF;&#x7A0B;&#x6765;&#x6267;&#x884C;&#x4EFB;&#x52A1;</p>
</li>
<li>
<p>&#x5F53;&#x7EBF;&#x7A0B;&#x6570;&#x8FBE;&#x5230;corePoolSize&#x5E76;&#x6CA1;&#x6709;&#x7EBF;&#x7A0B;&#x7A7A;&#x95F2;&#xFF0C;&#x8FD9;&#x65F6;&#x518D;&#x52A0;&#x5165;&#x4EFB;&#x52A1;&#xFF0C;&#x65B0;&#x52A0;&#x7684;&#x4EFB;&#x52A1;&#x4F1A;&#x88AB;&#x52A0;&#x5165;workQueue&#x961F;&#x5217;&#x6392;&#x961F;&#xFF0C;&#x76F4;&#x5230;&#x6709;&#x7A7A;&#x95F2;&#x7684;&#x7EBF;&#x7A0B;</p>
</li>
<li>
<p>&#x5982;&#x679C;&#x961F;&#x5217;&#x9009;&#x62E9;&#x4E86;&#x6709;&#x754C;&#x961F;&#x5217;&#xFF0C;&#x90A3;&#x4E48;&#x4EFB;&#x52A1;&#x8D85;&#x8FC7;&#x4E86;&#x961F;&#x5217;&#x5927;&#x5C0F;&#x65F6;&#xFF0C;&#x4F1A;&#x521B;&#x5EFA;maximumPoolSize-corePoolSize&#x6570;&#x76EE;&#x7684;&#x7EBF;&#x7A0B;&#x6765;&#x6551;&#x6025;&#x3002;</p>
</li>
<li>
<p>&#x5982;&#x679C;&#x7EBF;&#x7A0B;&#x5230;&#x8FBE;maximumPoolSize&#x4ECD;&#x7136;&#x6709;&#x65B0;&#x4EFB;&#x52A1;&#x8FD9;&#x65F6;&#x6267;&#x884C;&#x62D2;&#x7EDD;&#x7B56;&#x7565;&#x3002;&#x62D2;&#x7EDD;&#x7B56;&#x7565;jdk&#x63D0;&#x4F9B;&#x4E86;4&#x4E2D;&#x5B9E;&#x73B0;&#xFF1A;</p>
<ul>
<li>AbortPolicy&#x629B;&#x51FA;RejectedExecutionExeception&#x5F02;&#x5E38;&#xFF0C;&#x9ED8;&#x8BA4;&#x7B56;&#x7565;</li>
<li>CallerRunsPolicy&#x8BA9;&#x8C03;&#x7528;&#x8005;&#x81EA;&#x5DF1;&#x9009;&#x62E9;&#x5982;&#x4F55;&#x8FD0;&#x884C;&#x4EFB;&#x52A1;</li>
<li>DiscardPolicy&#x653E;&#x5F03;&#x672C;&#x6B21;&#x4EFB;&#x52A1;</li>
<li>DiscardOldestPolicy&#x653E;&#x5F03;&#x961F;&#x5217;&#x4E2D;&#x6700;&#x65E9;&#x7684;&#x4EFB;&#x52A1;&#xFF0C;&#x672C;&#x4EFB;&#x52A1;&#x53D6;&#x4EE3;&#x4E4B;</li>
</ul>
</li>
<li>
<p>&#x9AD8;&#x5CF0;&#x8FC7;&#x53BB;&#x540E;&#xFF0C;&#x8D85;&#x8FC7;corePoolSize&#x7684;&#x6551;&#x6D4E;&#x7EBF;&#x7A0B;&#x5982;&#x679C;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x6CA1;&#x6709;&#x4EFB;&#x52A1;&#x505A;&#xFF0C;&#x9700;&#x8981;&#x7ED3;&#x679C;&#x7EBF;&#x7A0B;&#x8282;&#x7701;&#x8D44;&#x6E90;&#xFF0C;&#x8FD9;&#x4E00;&#x65F6;&#x95F4;keepAliveTime&#x548C;unit&#x63A7;&#x5236;</p>
</li>
</ul>
<p><strong>newFixedThreadPool</strong></p>
<ul>
<li>&#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570; == &#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#xFF08;&#x6CA1;&#x6709;&#x6551;&#x6025;&#x7EBF;&#x7A0B;&#xFF09;&#xFF0C;&#x65E0;&#x9700;&#x8D85;&#x65F6;&#x65F6;&#x95F4;</li>
<li>&#x963B;&#x585E;&#x961F;&#x5217;&#x662F;&#x65E0;&#x754C;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x653E;&#x4EFB;&#x610F;&#x6570;&#x91CF;&#x4EFB;&#x52A1;</li>
</ul>
<p><strong>newCachedThreadPool</strong></p>
<ul>
<li>&#x6838;&#x5FC3;&#x7EBF;&#x7A0B;&#x6570;&#x4E3A;0&#xFF0C;&#x6700;&#x5927;&#x7EBF;&#x7A0B;&#x6570;&#x662F;Integer.MAX_VALUE&#xFF0C;&#x6551;&#x6025;&#x7EBF;&#x7A0B;&#x7684;&#x7A7A;&#x95F2;&#x751F;&#x5B58;&#x65F6;&#x95F4;&#x4E3A;60s
<ul>
<li>&#x5168;&#x90E8;&#x90FD;&#x662F;&#x6551;&#x6025;&#x7EBF;&#x7A0B;&#xFF08;60s&#x540E;&#x53EF;&#x4EE5;&#x56DE;&#x6536;&#xFF09;</li>
<li>&#x6551;&#x6025;&#x7EBF;&#x7A0B;&#x53EF;&#x4EE5;&#x65E0;&#x7EBF;&#x521B;&#x5EFA;</li>
</ul>
</li>
<li>&#x961F;&#x5217;&#x91C7;&#x7528;synchronousQueue&#x5B9E;&#x73B0;&#x7279;&#x70B9;&#x662F;&#xFF0C;&#x6CA1;&#x6709;&#x5BB9;&#x91CF;&#xFF0C;&#x6CA1;&#x6709;&#x7EBF;&#x7A0B;&#x6765;&#x53D6;&#x662F;&#x653E;&#x4E0D;&#x8FDB;&#x53BB;&#x7684;&#xFF08;&#x4E00;&#x624B;&#x4EA4;&#x94B1;&#x4E00;&#x624B;&#x4EA4;&#x8D27;&#xFF09;</li>
</ul>
<p><strong>newSingleThreadExecutor</strong></p>
<ul>
<li>&#x591A;&#x4E2A;&#x4EFB;&#x52A1;&#x6392;&#x961F;&#x6267;&#x884C;&#xFF0C;&#x7EBF;&#x7A0B;&#x6570;&#x56FA;&#x5B9A;&#x4E3A;1&#xFF0C;&#x4EFB;&#x52A1;&#x4E66;&#x591A;&#x4E8E;1&#x65F6;&#x653E;&#x5165;&#x65E0;&#x754C;&#x961F;&#x5217;&#x6392;&#x961F;&#x3002;&#x4EFB;&#x52A1;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#xFF0C;&#x8FD9;&#x552F;&#x4E00;&#x7684;&#x7EBF;&#x7A0B;&#x4E5F;&#x4E0D;&#x4F1A;&#x88AB;&#x91CA;&#x653E;</li>
</ul>
<p>&#x63D0;&#x4EA4;&#x4EFB;&#x52A1;</p>
<pre><code class="language-java">// &#x6267;&#x884C;&#x4EFB;&#x52A1;
void execute(Runnable command);
// &#x63D0;&#x4EA4;&#x4EFB;&#x52A1;task&#xFF0C;&#x7528;&#x8FD4;&#x56DE;&#x503C;Future&#x83B7;&#x5F97;&#x4EFB;&#x52A1;&#x6267;&#x884C;&#x7ED3;&#x679C;
&lt;T&gt; Future&lt;T&gt; submit(Callable&lt;T&gt; task);
// &#x63D0;&#x4EA4;tasks&#x4E2D;&#x6240;&#x6709;&#x4EFB;&#x52A1;
&lt;T&gt; List&lt;Future&lt;T&gt;&gt; invokeAll(Collection&lt;? extends Callable&lt;T&gt;&gt; tasks) throws InterruptedException;
// &#x63D0;&#x4EA4;tasks&#x4E2D;&#x6240;&#x6709;&#x4EFB;&#x52A1;&#xFF0C;&#x5E26;&#x8D85;&#x65F6;&#x65F6;&#x95F4;
&lt;T&gt; List&lt;Future&lt;T&gt;&gt; invokeAll(Collection&lt;? extends Callable&lt;T&gt;&gt; tasks, long timeout, TimeUnit unit) throws InterruptedException;
// &#x63D0;&#x4EA4;tasks&#x4E2D;&#x6240;&#x6709;&#x4EFB;&#x52A1;&#xFF0C;&#x54EA;&#x4E2A;&#x4EFB;&#x52A1;&#x5148;&#x6210;&#x529F;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#xFF0C;&#x8FD4;&#x56DE;&#x6B64;&#x4EFB;&#x52A1;&#x6267;&#x884C;&#x7ED3;&#x679C;&#xFF0C;&#x5176;&#x4ED6;&#x4EFB;&#x52A1;&#x53D6;&#x6D88;
&lt;T&gt; T invokeAny(Collection&lt;? extends Callable&lt;T&gt;&gt; tasks) throws InterruptedException, ExecutionException;
// &#x63D0;&#x4EA4;tasks&#x4E2D;&#x6240;&#x6709;&#x4EFB;&#x52A1;&#xFF0C;&#x54EA;&#x4E2A;&#x4EFB;&#x52A1;&#x5148;&#x6210;&#x529F;&#x6267;&#x884C;&#x5B8C;&#x6BD5;&#xFF0C;&#x8FD4;&#x56DE;&#x6B64;&#x4EFB;&#x52A1;&#x6267;&#x884C;&#x7ED3;&#x679C;&#xFF0C;&#x5176;&#x4ED6;&#x4EFB;&#x52A1;&#x53D6;&#x6D88;
&lt;T&gt; T invokeAny(Collection&lt;? extends Callable&lt;T&gt;&gt; tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException;
</code></pre>
<p>&#x5173;&#x95ED;&#x7EBF;&#x7A0B;&#x6C60;</p>
<pre><code class="language-java">/*
&#x7EBF;&#x7A0B;&#x6C60;&#x72B6;&#x6001;&#x53D8;&#x4E3A;SHUTDOWN
- &#x4E0D;&#x4F1A;&#x63A5;&#x53D7;&#x65B0;&#x4EFB;&#x52A1;
- &#x4F46;&#x5DF2;&#x63D0;&#x4EA4;&#x4EFB;&#x52A1;&#x4F1A;&#x6267;&#x884C;&#x5B8C;
- &#x6B64;&#x65B9;&#x6CD5;&#x4E0D;&#x4F1A;&#x963B;&#x585E;&#x8C03;&#x7528;&#x7EBF;&#x7A0B;&#x7684;&#x6267;&#x884C;
*/
void shutdown();
// &#x5C1D;&#x8BD5;&#x7EC8;&#x7ED3;
tryTerminate();
// &#x4E0D;&#x5728;RUNNING&#x72B6;&#x6001;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x6B64;&#x65B9;&#x6CD5;&#x8FD4;&#x56DE;true
boolean isShutdown();
// &#x7EBF;&#x7A0B;&#x6C60;&#x72B6;&#x6001;&#x662F;&#x5426;&#x662F;TERMINATED
boolean isTerminated();
// &#x8C03;&#x7528;SHUTDOWN&#x540E;&#xFF0C;&#x7531;&#x4E8E;&#x8C03;&#x7528;&#x7EBF;&#x7A0B;&#x5E76;&#x4E0D;&#x4F1A;&#x7B49;&#x5F85;&#x6240;&#x6709;&#x4EFB;&#x52A1;&#x8FD0;&#x884C;&#x7ED3;&#x675F;&#xFF0C;&#x56E0;&#x6B64;&#x5982;&#x679C;&#x5B83;&#x50CF;&#x5728;&#x7EBF;&#x7A0B;&#x6C60;TERMINATED&#x540E;&#x505A;&#x4E9B;&#x4E8B;&#x60C5;&#xFF0C;&#x53EF;&#x4EE5;&#x5229;&#x7528;&#x6B64;&#x65B9;&#x6CD5;&#x7B49;&#x5F85;
boolean awaitTerminated(long timeout, TimeUnit unnit) throws InterruptedException;
</code></pre>
<h4 id="%E5%BC%82%E6%AD%A5%E6%A8%A1%E5%BC%8F%E4%B9%8B%E5%B7%A5%E4%BD%9C%E7%BA%BF%E7%A8%8B">&#x5F02;&#x6B65;&#x6A21;&#x5F0F;&#x4E4B;&#x5DE5;&#x4F5C;&#x7EBF;&#x7A0B;</h4>
<p>&#x8BA9;&#x6709;&#x9650;&#x7684;&#x5DE5;&#x4F5C;&#x7EBF;&#x7A0B;&#xFF08;Worker Thread&#xFF09;&#x6765;&#x8F6E;&#x6D41;&#x5F02;&#x6B65;&#x5904;&#x7406;&#x65E0;&#x9650;&#x591A;&#x7684;&#x4EFB;&#x52A1;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5F52;&#x7C7B;&#x4E3A;&#x5206;&#x5DE5;&#x6A21;&#x5F0F;&#x3002;&#x5178;&#x578B;&#x5B9E;&#x73B0;&#x5C31;&#x7B97;&#x7EBF;&#x7A0B;&#x6C60;&#x3002;</p>
<p>&#x5BF9;&#x6BD4;&#x53E6;&#x4E00;&#x4E2A;&#x591A;&#x7EBF;&#x7A0B;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#xFF08;Thread-Per-Message&#xFF09;&#x3002;</p>
<p><em><strong>&#x4E0D;&#x540C;&#x4EFB;&#x52A1;&#x7C7B;&#x578B;&#x5E94;&#x8BE5;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#xFF0C;&#x8FD9;&#x6837;&#x80FD;&#x907F;&#x514D;&#x9965;&#x997F;&#xFF0C;&#x5E76;&#x80FD;&#x63D0;&#x5347;&#x6548;&#x7387;&#x3002;</strong></em></p>
<h5 id="%E9%A5%A5%E9%A5%BF">&#x9965;&#x997F;</h5>
<p>&#x56FA;&#x5B9A;&#x5927;&#x5C0F;&#x7EBF;&#x7A0B;&#x6C60;&#x4F1A;&#x6709;&#x9965;&#x997F;&#x73B0;&#x8C61;</p>
<ul>
<li>&#x4E24;&#x4E2A;&#x5DE5;&#x4EBA;&#x662F;&#x540C;&#x4E00;&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x4E24;&#x4E2A;&#x7EBF;&#x7A0B;</li>
<li>&#x4ED6;&#x4EEC;&#x8981;&#x505A;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;&#x70B9;&#x9910;&#x548C;&#x505A;&#x83DC;&#xFF0C;&#x8FD9;&#x662F;&#x4E24;&#x4E2A;&#x9636;&#x6BB5;&#x7684;&#x5DE5;&#x4F5C;
<ul>
<li>&#x70B9;&#x9910;&#xFF1A;&#x5FC5;&#x987B;&#x5148;&#x70B9;&#x9910;&#xFF0C;&#x7B49;&#x83DC;&#x505A;&#x597D;&#x518D;&#x4E0A;&#x83DC;&#xFF0C;&#x6B64;&#x671F;&#x95F4;&#x70B9;&#x9910;&#x5DE5;&#x4EBA;&#x5FC5;&#x987B;&#x7B49;&#x5F85;</li>
<li>&#x505A;&#x83DC;</li>
</ul>
</li>
<li>&#x540C;&#x65F6;&#x6765;&#x4E86;&#x4E24;&#x4E2A;&#x5BA2;&#x4EBA;&#xFF0C;&#x5DE5;&#x4EBA;A&#x548C;&#x5DE5;&#x4EBA;B&#x90FD;&#x5904;&#x7406;&#x70B9;&#x9910;&#xFF0C;&#x6CA1;&#x4EBA;&#x505A;&#x996D;&#xFF0C;&#x9965;&#x997F;&#x73B0;&#x8C61;&#x3002;</li>
</ul>
<h5 id="%E5%88%9B%E5%BB%BA%E5%A4%9A%E5%B0%91%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%90%88%E9%80%82">&#x521B;&#x5EFA;&#x591A;&#x5C11;&#x7EBF;&#x7A0B;&#x6C60;&#x5408;&#x9002;</h5>
<ul>
<li>&#x8FC7;&#x5C0F;&#x56DE;&#x5BFC;&#x81F4;&#x7A0B;&#x5E8F;&#x4E0D;&#x80FD;&#x5145;&#x5206;&#x5229;&#x7528;&#x7CFB;&#x7EDF;&#x8D44;&#x6E90;&#x3001;&#x5BB9;&#x6613;&#x5BFC;&#x81F4;&#x9965;&#x997F;</li>
<li>&#x8FC7;&#x5927;&#x4F1A;&#x5BFC;&#x81F4;&#x66F4;&#x591A;&#x7684;&#x7EBF;&#x7A0B;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;&#xFF0C;&#x5360;&#x7528;&#x66F4;&#x591A;&#x5185;&#x5B58;</li>
</ul>
<h6 id="cpu%E5%AF%86%E9%9B%86%E5%9E%8B%E8%BF%90%E7%AE%97">CPU&#x5BC6;&#x96C6;&#x578B;&#x8FD0;&#x7B97;</h6>
<p>&#x901A;&#x5E38;&#x4F7F;&#x7528;CPU&#x6838;&#x6570;+1&#x80FD;&#x5B9E;&#x73B0;&#x6700;&#x4F18;&#x7684;CPU&#x5229;&#x7528;&#x7387;&#xFF0C;+1&#x662F;&#x4FDD;&#x8BC1;&#x5F53;&#x7EBF;&#x7A0B;&#x7531;&#x4E8E;&#x9875;&#x7F3A;&#x5931;&#x6545;&#x969C;&#xFF08;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#xFF09;&#x6216;&#x5176;&#x5B83;&#x539F;&#x56E0;&#x5BFC;&#x81F4;&#x6682;&#x505C;&#x65F6;&#xFF0C;&#x989D;&#x5916;&#x7684;&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B;&#x5C31;&#x80FD;&#x9876;&#x4E0A;&#x53BB;&#xFF0C;&#x4FDD;&#x8BC1;CPU&#x65F6;&#x949F;&#x5468;&#x671F;&#x4E0D;&#x88AB;&#x6D6A;&#x8D39;</p>
<h6 id="io%E5%AF%86%E9%9B%86%E5%9E%8B%E8%BF%90%E7%AE%97">I/O&#x5BC6;&#x96C6;&#x578B;&#x8FD0;&#x7B97;</h6>
<p>&#x7EBF;&#x7A0B;&#x6570; = &#x6838;&#x6570; * &#x671F;&#x671B;CPU&#x5229;&#x7528;&#x7387; * &#x603B;&#x65F6;&#x95F4;&#xFF08;CPU&#x8BA1;&#x7B97;&#x65F6;&#x95F4;+&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#xFF09; / CPU&#x8BA1;&#x7B97;&#x65F6;&#x95F4;</p>
<h4 id="%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%BA%BF%E7%A8%8B%E6%B1%A0">&#x4EFB;&#x52A1;&#x8C03;&#x5EA6;&#x7EBF;&#x7A0B;&#x6C60;</h4>
<p>java.util.Timer&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x5B9A;&#x65F6;&#x529F;&#x80FD;&#xFF0C;Timer&#x4F18;&#x70B9;&#x5728;&#x4E8E;&#x7B80;&#x5355;&#x6613;&#x7528;&#xFF0C;&#x4F46;&#x7531;&#x4E8E;&#x6240;&#x6709;&#x4EFB;&#x52A1;&#x90FD;&#x662F;&#x7531;&#x540C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x6765;&#x8C03;&#x5EA6;&#xFF0C;&#x56E0;&#x6B64;&#x6240;&#x6709;&#x4EFB;&#x52A1;&#x90FD;&#x662F;&#x4E32;&#x884C;&#x6267;&#x884C;&#x7684;&#xFF0C;&#x540C;&#x4E00;&#x65F6;&#x95F4;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#x6267;&#x884C;&#xFF0C;&#x524D;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#x7684;&#x5EF6;&#x8FDF;&#x6216;&#x5F02;&#x5E38;&#x90FD;&#x5C06;&#x4F1A;&#x5F71;&#x54CD;&#x5230;&#x4E4B;&#x540E;&#x7684;&#x4EFB;&#x52A1;&#x3002;</p>
<pre><code class="language-java">ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
pool.schedule(() -&gt; {},1,TimeUnit.SECONDS);
</code></pre>
<h4 id="%E6%AD%A3%E7%A1%AE%E5%A4%84%E7%90%86%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%BC%82%E5%B8%B8">&#x6B63;&#x786E;&#x5904;&#x7406;&#x7EBF;&#x7A0B;&#x6C60;&#x5F02;&#x5E38;</h4>
<pre><code class="language-java">Future&lt;boolean&gt; f = pool.submit(() -&gt; {
    int i = 1 / 0;
    return true;
});
System.out.println(f.get());
</code></pre>
<h4 id="tomcat%E7%BA%BF%E7%A8%8B%E6%B1%A0">Tomcat&#x7EBF;&#x7A0B;&#x6C60;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/504025eac1ea5683.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<ul>
<li>LimitLatch&#x7528;&#x6765;&#x9650;&#x6D41;&#xFF0C;&#x7528;&#x6765;&#x63A7;&#x5236;&#x6700;&#x5927;&#x8FDE;&#x63A5;&#x4E2A;&#x6570;&#xFF0C;&#x7C7B;&#x4F3C;JUC&#x4E2D;&#x7684;Semaphore</li>
<li>Acceptor&#x53EA;&#x8D1F;&#x8D23;&#x3010;&#x63A5;&#x53D7;&#x65B0;&#x7684;socket&#x8FDE;&#x63A5;&#x3011;</li>
<li>Poller&#x53EA;&#x8D1F;&#x8D23;&#x76D1;&#x542C;socket channel&#x662F;&#x5426;&#x6709;&#x3010;&#x53EF;&#x8BFB;&#x7684;I/O&#x4E8B;&#x4EF6;&#x3011;</li>
<li>&#x4E00;&#x65E6;&#x53EF;&#x8BFB;&#xFF0C;&#x5C01;&#x88C5;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#x5BF9;&#x8C61;&#xFF08;socketProcessor&#xFF09;&#xFF0C;&#x63D0;&#x4EA4;&#x7ED9;Executor&#x7EBF;&#x7A0B;&#x6C60;&#x5904;&#x7406;</li>
<li>Executor&#x7EBF;&#x7A0B;&#x6C60;&#x4E2D;&#x7684;&#x5DE5;&#x4F5C;&#x7EBF;&#x7A0B;&#x6700;&#x7EC8;&#x8D1F;&#x8D23;&#x3010;&#x5904;&#x7406;&#x8BF7;&#x6C42;&#x3011;</li>
</ul>
<p>Tomcat&#x7EBF;&#x7A0B;&#x6C60;&#x6269;&#x5C55;&#x4E86;ThreadPoolExecutor</p>
<ul>
<li>&#x5982;&#x679C;&#x603B;&#x7EBF;&#x7A0B;&#x8FBE;&#x5230;maximumPoolSize
<ul>
<li>&#x8FD9;&#x662F;&#x4E0D;&#x4F1A;&#x7ACB;&#x523B;&#x629B;&#x51FA;RejectedExecutionException&#x5F02;&#x5E38;</li>
<li>&#x800C;&#x662F;&#x518D;&#x6B21;&#x5C1D;&#x8BD5;&#x653E;&#x5165;&#x961F;&#x5217;&#xFF0C;&#x5982;&#x679C;&#x8FD8;&#x5931;&#x8D25;&#xFF0C;&#x624D;&#x629B;&#x51FA;&#x5F02;&#x5E38;</li>
</ul>
</li>
<li></li>
</ul>
<h3 id="forkjoin">Fork/Join</h3>
<p>Fork/Join&#x662F;1.7&#x52A0;&#x5165;&#x7684;&#x65B0;&#x7684;&#x7EBF;&#x7A0B;&#x6C60;&#x5B9E;&#x73B0;&#xFF0C;&#x4F53;&#x73B0;&#x4E86;&#x5206;&#x6CBB;&#x601D;&#x60F3;&#xFF0C;&#x4F7F;&#x7528;&#x4E0E;&#x80FD;&#x591F;&#x8FDB;&#x884C;&#x4EFB;&#x52A1;&#x62C6;&#x5206;&#x7684;cpu&#x5BC6;&#x96C6;&#x578B;&#x8FD0;&#x7B97;</p>
<h5 id="%E4%BD%BF%E7%94%A8">&#x4F7F;&#x7528;</h5>
<p>&#x63D0;&#x4EA4;&#x7ED9;Fork/Join&#x7EBF;&#x7A0B;&#x6C60;&#x7684;&#x4EFB;&#x52A1;&#x9700;&#x8981;&#x7EE7;&#x627F;RecursiveTask&#xFF08;&#x6709;&#x8FD4;&#x56DE;&#x503C;&#xFF09;&#x6216;RecursiveAction&#xFF08;&#x65E0;&#x8FD4;&#x56DE;&#x503C;&#xFF09;&#x3002;</p>
<h3 id="juc">JUC</h3>
<h4 id="aqs%E5%8E%9F%E7%90%86">AQS&#x539F;&#x7406;</h4>
<p>AbstractQueuedSynchronizer&#xFF0C;&#x662F;&#x963B;&#x585E;&#x5F0F;&#x9501;&#x548C;&#x76F8;&#x5173;&#x540C;&#x6B65;&#x5668;&#x5DE5;&#x5177;&#x7684;&#x6846;&#x67B6;</p>
<ul>
<li>&#x7528;state&#x5C5E;&#x6027;&#x8868;&#x793A;&#x8D44;&#x6E90;&#x72B6;&#x6001;&#xFF08;&#x72EC;&#x5360;&#x6A21;&#x5F0F;&#x548C;&#x5171;&#x4EAB;&#x6A21;&#x5F0F;&#xFF09;&#xFF0C;&#x5B50;&#x7C7B;&#x9700;&#x8981;&#x5B9A;&#x4E49;&#x5982;&#x4F55;&#x7EF4;&#x62A4;&#x4E2D;&#x56FD;&#x72B6;&#x6001;&#xFF0C;&#x63A7;&#x5236;&#x5982;&#x4F55;&#x83B7;&#x53D6;&#x9501;&#x548C;&#x91CA;&#x653E;&#x9501;
<ul>
<li>getState-&#x83B7;&#x53D6;&#x72B6;&#x6001;</li>
<li>setState-&#x8BBE;&#x7F6E;&#x72B6;&#x6001;</li>
<li>compareAndSetState-CAS&#x673A;&#x5236;&#x8BBE;&#x7F6E;state&#x72B6;&#x6001;</li>
<li>&#x72EC;&#x5360;&#x6A21;&#x5F0F;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x80FD;&#x591F;&#x8BBF;&#x95EE;&#x8D44;&#x6E90;&#xFF0C;&#x5171;&#x4EAB;&#x6A21;&#x5F0F;&#x53EF;&#x4EE5;&#x5141;&#x8BB8;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x8BBF;&#x95EE;&#x8D44;&#x6E90;</li>
</ul>
</li>
<li>&#x63D0;&#x4F9B;&#x4E86;&#x57FA;&#x4E8E;FIFO&#x7684;&#x7B49;&#x5F85;&#x961F;&#x5217;&#xFF0C;&#x7C7B;&#x4F3C;&#x4E8E;Monitor&#x7684;EntryList</li>
<li>&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x6765;&#x5B9E;&#x73B0;&#x7B49;&#x5F85;&#x3001;&#x5524;&#x9192;&#x673A;&#x5236;&#xFF0C;&#x652F;&#x6301;&#x591A;&#x4E2A;&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#xFF0C;&#x7C7B;&#x4F3C;&#x4E8E;Monitor&#x7684;WaitSet</li>
</ul>
<h4 id="reentrantlock%E5%8E%9F%E7%90%86">ReentrantLock&#x539F;&#x7406;</h4>
<h5 id="%E9%9D%9E%E5%85%AC%E5%B9%B3%E9%94%81%E5%8E%9F%E7%90%86">&#x975E;&#x516C;&#x5E73;&#x9501;&#x539F;&#x7406;</h5>
<h5 id="%E5%8F%AF%E9%87%8D%E5%85%A5%E5%8E%9F%E7%90%86">&#x53EF;&#x91CD;&#x5165;&#x539F;&#x7406;</h5>
<h5 id="%E5%8F%AF%E6%89%93%E6%96%AD%E5%8E%9F%E7%90%86">&#x53EF;&#x6253;&#x65AD;&#x539F;&#x7406;</h5>
<h6 id="%E4%B8%8D%E5%8F%AF%E6%89%93%E6%96%AD%E6%A8%A1%E5%BC%8F">&#x4E0D;&#x53EF;&#x6253;&#x65AD;&#x6A21;&#x5F0F;</h6>
<p>&#x5728;&#x6B64;&#x6A21;&#x5F0F;&#x4E0B;&#xFF0C;&#x5373;&#x4F7F;&#x5B83;&#x88AB;&#x6253;&#x65AD;&#xFF0C;&#x4ECD;&#x4F1A;&#x9A7B;&#x7559;&#x5728;AQS&#x961F;&#x5217;&#x4E2D;&#xFF0C;&#x7B49;&#x83B7;&#x5F97;&#x9501;&#x540E;&#x65B9;&#x80FD;&#x7EE7;&#x7EED;&#x8FD0;&#x884C;&#xFF08;&#x6253;&#x65AD;&#x6807;&#x8BB0;&#x88AB;&#x8BBE;&#x7F6E;&#x4E3A;true&#xFF09;</p>
<h6 id="%E5%8F%AF%E6%89%93%E6%96%AD%E6%A8%A1%E5%BC%8F">&#x53EF;&#x6253;&#x65AD;&#x6A21;&#x5F0F;</h6>
<p>&#x5728;park&#x8FC7;&#x7A0B;&#x4E2D;&#x5982;&#x679C;&#x88AB;interrupt&#x4F1A;&#x629B;&#x51FA;&#x5F02;&#x5E38;&#x4E0D;&#x4F1A;&#x518D;&#x6B21;&#x8FDB;&#x5165;&#x6B7B;&#x5FAA;&#x73AF;</p>
<h5 id="%E5%85%AC%E5%B9%B3%E9%94%81%E5%8E%9F%E7%90%86">&#x516C;&#x5E73;&#x9501;&#x539F;&#x7406;</h5>
<p>&#x4E0E;&#x975E;&#x516C;&#x5E73;&#x9501;&#x4E3B;&#x8981;&#x533A;&#x522B;&#x5728;&#x4E8E;tryAcquire&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;&#xFF0C;&#x516C;&#x5E73;&#x9501;&#x4F1A;&#x5148;&#x68C0;&#x67E5;AQS&#x961F;&#x5217;&#x4E2D;&#x662F;&#x5426;&#x6709;&#x524D;&#x9A71;&#x8282;&#x70B9;&#xFF0C;&#x6CA1;&#x6709;&#x624D;&#x7ADE;&#x4E89;</p>
<h5 id="%E6%9D%A1%E4%BB%B6%E5%8F%98%E9%87%8F%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86">&#x6761;&#x4EF6;&#x53D8;&#x91CF;&#x5B9E;&#x73B0;&#x539F;&#x7406;</h5>
<p>await&#x6D41;&#x7A0B;</p>
<p>signal&#x6D41;&#x7A0B;</p>
<h4 id="%E8%AF%BB%E5%86%99%E9%94%81">&#x8BFB;&#x5199;&#x9501;</h4>
<h4 id="%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E9%9B%86%E5%90%88%E7%B1%BB">&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x96C6;&#x5408;&#x7C7B;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/80090f9a7556d740.png" alt="Java&#x5E76;&#x53D1;&#x7F16;&#x7A0B;" loading="lazy"></p>
<h4 id="semaphore">Semaphore</h4>
<h4 id="countdownlatch">CountdownLatch</h4>
<h4 id="cyclicbarrier">CyclicBarrier</h4>
<h4 id="concurrenthashmap%E5%8E%9F%E7%90%86">ConcurrentHashMap&#x539F;&#x7406;</h4>
<pre><code class="language-java">LongAdder value = map.computeIfAbsent(key,(key) -&gt; new LongAdder());
value.increment;
</code></pre>
<p>JDK 7 HashMap&#x5E76;&#x53D1;&#x6B7B;&#x94FE;&#x590D;&#x73B0;</p>
<ul>
<li>&#x7A76;&#x5176;&#x539F;&#x56E0;&#xFF0C;&#x662F;&#x56E0;&#x4E3A;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E0B;&#x4F7F;&#x7528;&#x975E;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684;map&#x96C6;&#x5408;</li>
<li>JDK8&#x867D;&#x7136;&#x5C06;&#x6269;&#x5BB9;&#x7B97;&#x6CD5;&#x505A;&#x4E86;&#x8C03;&#x6574;&#xFF0C;&#x4E0D;&#x518D;&#x5C06;&#x5143;&#x7D20;&#x52A0;&#x5165;&#x94FE;&#x8868;&#x5934;&#xFF08;&#x800C;&#x662F;&#x4FDD;&#x6301;&#x4E0E;&#x6269;&#x5BB9;&#x524D;&#x4E00;&#x6837;&#x7684;&#x987A;&#x5E8F;&#xFF09;&#xFF0C;&#x4F46;&#x4ECD;&#x4E0D;&#x610F;&#x5473;&#x7740;&#x80FD;&#x591F;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x73AF;&#x5883;&#x4E0B;&#x80FD;&#x5B89;&#x5168;&#x6269;&#x5BB9;&#xFF0C;&#x8FD8;&#x4F1A;&#x51FA;&#x73B0;&#x5176;&#x4ED6;&#x95EE;&#x9898;&#xFF08;&#x5982;&#x6269;&#x5BB9;&#x4E22;&#x6570;&#x636E;&#xFF09;</li>
</ul>
<h4 id="councurrentlinkedqueue%E5%8E%9F%E7%90%86">CouncurrentLinkedQueue&#x539F;&#x7406;</h4>
<h4 id="blockingqueue">BlockingQueue</h4>
<h4 id="copyonwritearraylist">CopyOnWriteArrayList</h4>
<h3 id="disruptor">disruptor</h3>
<h3 id="guava">guava</h3>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[RabbitMQ]]></title><description><![CDATA[<div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-light" style data-kg-background-image="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/4c5af49e4d3c2ae8.jpg"><h2 class="kg-header-card-header" id="%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6">&#x6D88;&#x606F;&#x4E2D;&#x95F4;&#x4EF6;</h2><h3 class="kg-header-card-subheader" id="rabbitmq">RabbitMQ</h3><a href="https://www.rabbitmq.com/getstarted.html" class="kg-header-card-button">RabbitMQ Tutorials</a></div><!--kg-card-begin: markdown--><h2 id="mq%E5%9F%BA%E7%A1%80">MQ&#x57FA;&#x7840;</h2>
<h3 id="1mq%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5">1.MQ&#x57FA;&#x672C;&#x6982;&#x5FF5;</h3>
<p>MQ &#x5168;&#x7A0B; Message Queue&#xFF08;&#x6D88;&#x606F;&#x961F;&#x5217;&#xFF09;&#xFF0C;&#x662F;&#x5728;&#x6D88;&#x606F;&#x4F20;&#x8F93;&#x8FC7;&#x7A0B;&#x4E2D;&#x4FDD;&#x5B58;&#x6D88;&#x606F;&#x7684;&#x5BB9;&#x5668;&#x3002;&#x591A;&#x7528;&#x4E8E;&#x5206;</p>]]></description><link>https://www.tangkun.site/rabbitmq-2/</link><guid isPermaLink="false">63fc8469d9ccf409d265ddef</guid><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Tue, 28 Feb 2023 08:53:12 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/1298d971a7cc806d.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card kg-header-card kg-width-full kg-size-small kg-style-light" style data-kg-background-image="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/4c5af49e4d3c2ae8.jpg"><h2 class="kg-header-card-header" id="%E6%B6%88%E6%81%AF%E4%B8%AD%E9%97%B4%E4%BB%B6">&#x6D88;&#x606F;&#x4E2D;&#x95F4;&#x4EF6;</h2><h3 class="kg-header-card-subheader" id="rabbitmq">RabbitMQ</h3><a href="https://www.rabbitmq.com/getstarted.html" class="kg-header-card-button">RabbitMQ Tutorials</a></div><!--kg-card-begin: markdown--><h2 id="mq%E5%9F%BA%E7%A1%80">MQ&#x57FA;&#x7840;</h2>
<h3 id="1mq%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5">1.MQ&#x57FA;&#x672C;&#x6982;&#x5FF5;</h3>
<img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/1298d971a7cc806d.jpg" alt="RabbitMQ"><p>MQ &#x5168;&#x7A0B; Message Queue&#xFF08;&#x6D88;&#x606F;&#x961F;&#x5217;&#xFF09;&#xFF0C;&#x662F;&#x5728;&#x6D88;&#x606F;&#x4F20;&#x8F93;&#x8FC7;&#x7A0B;&#x4E2D;&#x4FDD;&#x5B58;&#x6D88;&#x606F;&#x7684;&#x5BB9;&#x5668;&#x3002;&#x591A;&#x7528;&#x4E8E;&#x5206;&#x5E03;&#x5F0F;&#x7CFB;&#x7EDF;&#x4E4B;&#x95F4;&#x8FDB;&#x884C;&#x901A;&#x4FE1;&#x3002;</p>
<p>&#x4F18;&#x52BF;&#xFF1A;</p>
<ul>
<li>&#x5E94;&#x7528;&#x89E3;&#x8026;</li>
<li>&#x5F02;&#x6B65;&#x63D0;&#x901F;</li>
<li>&#x524A;&#x5CF0;&#x586B;&#x8C37;</li>
</ul>
<p>&#x52A3;&#x52BF;&#xFF1A;</p>
<ul>
<li>&#x7CFB;&#x7EDF;&#x53EF;&#x7528;&#x6027;&#x964D;&#x4F4E;</li>
<li>&#x7CFB;&#x7EDF;&#x590D;&#x5236;&#x5EA6;&#x63D0;&#x9AD8;</li>
<li>&#x4E00;&#x81F4;&#x6027;&#x95EE;&#x9898;</li>
</ul>
<h4 id="11%E5%B0%8F%E7%BB%93">1.1&#x5C0F;&#x7ED3;</h4>
<p>&#x4F7F;&#x7528;MQ&#x9700;&#x8981;&#x6EE1;&#x8DB3;&#x4EC0;&#x4E48;&#x6761;&#x4EF6;&#xFF1A;</p>
<ol>
<li>&#x751F;&#x4EA7;&#x8005;&#x4E0D;&#x9700;&#x8981;&#x4ECE;&#x6D88;&#x8D39;&#x8005;&#x5904;&#x83B7;&#x5F97;&#x53CD;&#x9988;&#x3002;&#x5F15;&#x5165;&#x6D88;&#x606F;&#x961F;&#x5217;&#x4E4B;&#x524D;&#x7684;&#x76F4;&#x63A5;&#x8C03;&#x7528;&#xFF0C;&#x5176;&#x63A5;&#x53E3;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#x5E94;&#x8BE5;&#x4E3A;&#x7A7A;&#xFF0C;&#x8FD9;&#x624D;&#x8BA9;&#x660E;&#x660E;&#x4E0B;&#x5C42;&#x7684;&#x52A8;&#x4F5C;&#x8FD8;&#x6CA1;&#x505A;&#xFF0C;&#x4E0A;&#x5C42;&#x5374;&#x5F53;&#x52A8;&#x4F5C;&#x505A;&#x5B8C;&#x4E86;&#x7EE7;&#x7EED;&#x5F80;&#x540E;&#x8D70;&#xFF0C;&#x5373;&#x6240;&#x8C13;&#x5F02;&#x6B65;&#x6210;&#x4E3A;&#x4E86;&#x53EF;&#x80FD;&#x3002;</li>
<li>&#x5BB9;&#x8BB8;&#x77ED;&#x6682;&#x7684;&#x4E0D;&#x4E00;&#x81F4;&#x6027;&#x3002;</li>
<li>&#x6536;&#x76CA;&#x8D85;&#x8FC7;&#x52A0;&#x5165;MQ&#x3001;&#x7BA1;&#x7406;MQ&#x6210;&#x672C;&#x3002;</li>
</ol>
<p>&#x5E38;&#x89C1;MQ&#x4EA7;&#x54C1;&#xFF1A;RabbitMQ&#x3001;RocketMQ&#x3001;kafka</p>
<p>AMQP&#xFF0C;&#x5373;Advanced Message Queueing Protocol&#xFF08;&#x9AD8;&#x7EA7;&#x6D88;&#x606F;&#x961F;&#x5217;&#x534F;&#x8BAE;&#xFF09;&#x662F;&#x5E94;&#x7528;&#x5C42;&#x534F;&#x8BAE;&#x7684;&#x5F00;&#x653E;&#x6807;&#x51C6;&#xFF0C;&#x4E3A;&#x9762;&#x5411;&#x6D88;&#x606F;&#x7684;&#x4E2D;&#x95F4;&#x4EF6;&#x8BBE;&#x8BA1;&#x3002;</p>
<p>AMQP &#x67B6;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/311df5ccf84132b1.png" alt="RabbitMQ" loading="lazy"></p>
<p>RabbitMQ &#x57FA;&#x7840;&#x67B6;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/1509288282275fcc.png" alt="RabbitMQ" loading="lazy"></p>
<h4 id="12rabbitmq-%E7%9B%B8%E5%85%B3%E6%A6%82%E5%BF%B5">1.2RabbitMQ &#x76F8;&#x5173;&#x6982;&#x5FF5;</h4>
<ul>
<li>Broker&#xFF1A;&#x63A5;&#x53D7;&#x548C;&#x5206;&#x53D1;&#x6D88;&#x606F;&#x7684;&#x5E94;&#x7528;</li>
<li>Virtual host&#xFF1A;&#x5904;&#x4E8E;&#x591A;&#x79DF;&#x6237;&#x548C;&#x5B89;&#x5168;&#x56E0;&#x7D20;&#x8BBE;&#x8BA1;&#x7684;&#xFF0C;&#x628A;AMQP&#x7684;&#x57FA;&#x672C;&#x7EC4;&#x4EF6;&#x5212;&#x5206;&#x5230;&#x4E00;&#x4E2A;&#x865A;&#x62DF;&#x7684;&#x5206;&#x7EC4;&#x4E2D;&#xFF0C;&#x7C7B;&#x4F3C;&#x7F51;&#x7EDC;&#x4E2D;namespace&#x6982;&#x5FF5;&#x3002;&#x5F53;&#x591A;&#x4E2A;&#x4E0D;&#x540C;&#x7684;&#x7528;&#x6237;&#x4F7F;&#x7528;&#x540C;&#x4E00;&#x4E2A;RabbitMQ server&#x63D0;&#x4F9B;&#x670D;&#x52A1;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x5212;&#x5206;&#x591A;&#x4E2A;vhost&#xFF0C;&#x6BCF;&#x4E2A;&#x7528;&#x6237;&#x5728;&#x81EA;&#x5DF1;&#x7684;vhost&#x521B;&#x5EFA;exchange / queue&#x7B49;</li>
<li>Connection&#xFF1A;publisher / consumer&#x548C;broker&#x4E4B;&#x95F4;&#x7684;TCP&#x8FDE;&#x63A5;</li>
<li>Channel&#xFF1A;&#x5982;&#x679C;&#x6BCF;&#x4E00;&#x6B21;&#x8BBF;&#x95EE;RabbitMQ&#x90FD;&#x5EFA;&#x7ACB;&#x4E00;&#x4E2A;Connectio&#xFF0C;&#x5728;&#x6D88;&#x606F;&#x91CF;&#x5927;&#x7684;&#x65F6;&#x5019;&#x5EFA;&#x7ACB;TCP Connection&#x7684;&#x5F00;&#x9500;&#x5C06;&#x662F;&#x5DE8;&#x5927;&#x7684;&#xFF0C;&#x6548;&#x7387;&#x4E5F;&#x8F83;&#x4F4E;&#x3002;Channel&#x662F;&#x5728;Connection&#x5185;&#x90E8;&#x5EFA;&#x7ACB;&#x7684;&#x903B;&#x8F91;&#x8FDE;&#x63A5;&#xFF0C;&#x5982;&#x679C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x652F;&#x6301;&#x591A;&#x7EBF;&#x7A0B;&#xFF0C;&#x901A;&#x5E38;&#x6BCF;&#x4E2A;thread&#x521B;&#x5EFA;&#x5355;&#x72EC;&#x7684;channel&#x8FDB;&#x884C;&#x901A;&#x8BAF;&#xFF0C;AMQPmethod&#x5305;&#x542B;&#x4E86;channel id&#x5E2E;&#x52A9;&#x5BA2;&#x6237;&#x7AEF;&#x548C;message broker&#x8BC6;&#x522B;channel&#xFF0C;&#x6240;&#x4EE5;channel&#x4E4B;&#x95F4;&#x662F;&#x5B8C;&#x5168;&#x9694;&#x79BB;&#x7684;&#x3002;Channel&#x4F5C;&#x4E3A;&#x8F7B;&#x91CF;&#x7EA7;&#x7684;Connection&#x6781;&#x5927;&#x51CF;&#x5C11;&#x4E86;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x5EFA;&#x7ACB;TCP connection&#x7684;&#x5F00;&#x9500;&#x3002;</li>
<li>Exchange&#xFF1A;message&#x5230;&#x8FBE;broker&#x7684;&#x7B2C;&#x4E00;&#x7AD9;&#xFF0C;&#x6839;&#x636E;&#x5206;&#x53D1;&#x89C4;&#x5219;&#xFF0C;&#x5339;&#x914D;&#x67E5;&#x8BE2;&#x8868;&#x4E2D;&#x7684;routing key&#xFF0C;&#x5206;&#x53D1;&#x6D88;&#x606F;&#x5230;queue&#x4E2D;&#x53BB;&#x3002;&#x5E38;&#x7528;&#x7684;&#x7C7B;&#x578B;&#x6709;&#xFF1A;direct&#xFF08;point-to-point&#xFF09;&#xFF0C;topic&#xFF08;publish-subscribe&#xFF09; and fanout&#xFF08;multicast&#xFF09;</li>
<li>Queue&#xFF1A;&#x6D88;&#x606F;&#x6700;&#x7EC8;&#x88AB;&#x9001;&#x8FBE;&#x8FD9;&#x91CC;&#x7B49;&#x5F85;consumer&#x53D6;&#x8D70;</li>
<li>Binding&#xFF1A;exchange&#x548C;queue&#x4E4B;&#x95F4;&#x7684;&#x865A;&#x62DF;&#x8FDE;&#x63A5;&#xFF0C;binding&#x4E2D;&#x53EF;&#x4EE5;&#x5305;&#x542B;routing key&#x3002;Binding&#x4FE1;&#x606F;&#x88AB;&#x4FDD;&#x5B58;&#x5230;exchange&#x4E2D;&#x7684;&#x67E5;&#x8BE2;&#x8868;&#x4E2D;&#xFF0C;&#x7528;&#x4E8E;message&#x7684;&#x5206;&#x53D1;&#x6743;&#x9650;&#x3002;</li>
</ul>
<p>RabbitMQ&#x7684;6&#x4E2D;&#x5DE5;&#x4F5C;&#x6A21;&#x5F0F;&#xFF1A;&#x7B80;&#x5355;&#x6A21;&#x5F0F;&#x3001;work queues&#x3001;Publish/Subscribe &#x53D1;&#x5E03;&#x4E8E;&#x8BA2;&#x9605;&#x6A21;&#x5F0F;&#x3001;Routing &#x8DEF;&#x7531;&#x6A21;&#x5F0F;&#x3001;Topics &#x4E3B;&#x9898;&#x6A21;&#x5F0F;&#x3001;RPC &#x8FDC;&#x7A0B;&#x8C03;&#x7528;&#x6A21;&#x5F0F;&#x3001;Publisher Comfirm&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/844ce5b3aa57216f.png" alt="RabbitMQ" loading="lazy"></p>
<h4 id="13jms">1.3JMS</h4>
<p>&#x5373;Java&#x6D88;&#x606F;&#x670D;&#x52A1;&#xFF08;Java Message Service&#xFF09;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x63A5;&#x53E3;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;Java&#x5E73;&#x53F0;&#x4E2D;&#x5173;&#x4E8E;&#x9762;&#x5411;&#x6D88;&#x606F;&#x4E2D;&#x95F4;&#x4EF6;&#x7684;API&#x3002;</p>
<h4 id="14%E5%B0%8F%E7%BB%93">1.4&#x5C0F;&#x7ED3;</h4>
<ul>
<li>RabbitMQ &#x662F;&#x57FA;&#x4E8E;AMQP&#x534F;&#x8BAE;&#x4F7F;&#x7528;Erlang&#x8BED;&#x8A00;&#x5F00;&#x53D1;&#x7684;&#x4E00;&#x6B3E;&#x6D88;&#x606F;&#x961F;&#x5217;&#x4EA7;&#x54C1;</li>
<li>RabbitMQ &#x63D0;&#x4F9B;&#x4E86;6&#x4E2D;&#x5DE5;&#x4F5C;&#x6A21;&#x5F0F;</li>
<li>AMQP &#x662F;&#x534F;&#x8BAE;&#xFF0C;&#x7C7B;&#x6BD4;HTTP</li>
<li>JMS &#x662F;API&#x89C4;&#x8303;&#x63A5;&#x53E3;&#xFF0C;&#x7C7B;&#x6BD4;JDBC</li>
</ul>
<h3 id="2rabbitmq-%E7%9A%84%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE">2.RabbitMQ &#x7684;&#x5B89;&#x88C5;&#x548C;&#x914D;&#x7F6E;</h3>
<p><a href="https://www.rabbitmq.com/download.html">RabbitMQ&#x5B98;&#x7F51;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x6307;&#x5357;</a></p>
<h4 id="21rabbitmq-web-ui">2.1RabbitMQ web UI</h4>
<pre><code># &#x5F00;&#x542F;&#x7BA1;&#x7406;&#x754C;&#x9762;
rabbitmq-plugins enable rabbitmq_managemet
# &#x542F;&#x52A8;
service rabbitmq-server start # &#x542F;&#x52A8;&#x670D;&#x52A1; 
service rabbitmq-server stop # &#x505C;&#x6B62;&#x670D;&#x52A1;
service rabbitmq-server restart # &#x91CD;&#x542F;&#x670D;&#x52A1;
</code></pre>
<ol>
<li>
<p>&#x7528;&#x6237;&#x7BA1;&#x7406;</p>
<ol>
<li>
<p>&#x65B0;&#x589E;&#x7528;&#x6237;</p>
<p>rabbitmqctl add_user &#x7528;&#x6237;&#x540D; &#x5BC6;&#x7801;</p>
</li>
<li>
<p>&#x5220;&#x9664;&#x7528;&#x6237;</p>
<p>rabbitmqctl delete_user &#x7528;&#x6237;&#x540D;</p>
</li>
<li>
<p>&#x4FEE;&#x6539;&#x5BC6;&#x7801;</p>
<p>rabbitmqctl change_password &#x7528;&#x6237;&#x540D; &#x65B0;&#x5BC6;&#x7801;</p>
</li>
<li>
<p>&#x67E5;&#x770B;&#x5F53;&#x524D;&#x7528;&#x6237;&#x5217;&#x8868;</p>
<p>rabbitmqctl list_users</p>
</li>
</ol>
</li>
<li>
<p>&#x7528;&#x6237;&#x89D2;&#x8272;</p>
<ol>
<li>
<p>&#x89D2;&#x8272;&#x53EF;&#x5206;&#x7C7B;&#x4E3A;&#x4E94;&#x79CD;&#xFF1A;administrator&#x3001;monitoring&#x3001;policymaker&#x3001;management&#x3001;&#x666E;&#x901A;&#x7528;&#x6237;</p>
</li>
<li>
<p>&#x8BBE;&#x7F6E;&#x7528;&#x6237;&#x89D2;&#x8272;</p>
<p>rabbitmqctl set_user_tags [administrator]</p>
</li>
</ol>
</li>
<li>
<p>&#x7528;&#x6237;&#x6743;&#x9650;</p>
<ol>
<li>
<p>&#x6743;&#x9650;&#x6709;conf&#x3001;write&#x3001;read</p>
</li>
<li>
<p>&#x8BBE;&#x7F6E;&#x7528;&#x6237;&#x6743;&#x9650;</p>
<p>rabbitmqctl set_permission [-p VHostPath] &#x7528;&#x6237;&#x540D; &#x6743;&#x9650;</p>
</li>
<li>
<p>&#x67E5;&#x770B;&#x6240;&#x6709;&#x7528;&#x6237;&#x6743;&#x9650;&#x4FE1;&#x606F;</p>
<p>rabbitmqctl list_permissions [-p VHostPath]</p>
</li>
<li>
<p>&#x6E05;&#x9664;&#x7528;&#x6237;&#x7684;&#x6743;&#x9650;&#x4FE1;&#x606F;</p>
<p>rabbitmqctl clear_permissions [-p VHostPath] &#x7528;&#x6237;&#x540D;</p>
</li>
</ol>
</li>
</ol>
<h3 id="3rabbitmq-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8">3.RabbitMQ &#x5FEB;&#x901F;&#x5165;&#x95E8;</h3>
<h4 id="31%E5%85%A5%E9%97%A8%E7%A8%8B%E5%BA%8F">3.1&#x5165;&#x95E8;&#x7A0B;&#x5E8F;</h4>
<p>&#x9700;&#x6C42;&#xFF1A;&#x4F7F;&#x7528;&#x7B80;&#x5355;&#x6A21;&#x5F0F;&#x5B8C;&#x6210;&#x6D88;&#x606F;&#x4F20;&#x9012;&#x3002;</p>
<p>&#x6B65;&#x9AA4;&#xFF1A;</p>
<ol>
<li>
<p>&#x521B;&#x5EFA;&#x5DE5;&#x7A0B;&#xFF08;&#x751F;&#x4EA7;&#x8005;&#x3001;&#x6D88;&#x8D39;&#x8005;&#xFF09;</p>
</li>
<li>
<p>&#x5206;&#x522B;&#x6DFB;&#x52A0;&#x4F9D;&#x8D56;</p>
<pre><code class="language-xml">&lt;dependencies&gt;
        &lt;!-- rabbitmq java &#x5BA2;&#x6237;&#x7AEF; --&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.rabbitmq&lt;/groupId&gt;
            &lt;artifactId&gt;amqp-client&lt;/artifactId&gt;
            &lt;version&gt;5.6.0&lt;/version&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;

    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
                &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
                &lt;version&gt;3.1&lt;/version&gt;
                &lt;configuration&gt;
                    &lt;source&gt;1.8&lt;/source&gt;
                    &lt;target&gt;1.8&lt;/target&gt;
                &lt;/configuration&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;
</code></pre>
</li>
<li>
<p>&#x7F16;&#x5199;&#x751F;&#x4EA7;&#x8005;&#x53D1;&#x9001;&#x6D88;&#x606F;</p>
<pre><code class="language-java">package person.kuntang.producer;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author kun tang
 * @date 2023/2/27
 */
public class RabbitmqProducer {
    public static void main(String[] args) throws IOException, TimeoutException {

        // 1&#x3001;&#x521B;&#x5EFA;&#x8FDE;&#x63A5;&#x5DE5;&#x5382;
        ConnectionFactory factory = new ConnectionFactory();
        // 2&#x3001;&#x8BBE;&#x7F6E;&#x53C2;&#x6570;
        factory.setHost(&quot;192.168.13.129&quot;);
        factory.setPort(5672);
        factory.setVirtualHost(&quot;demo&quot;);
        factory.setUsername(&quot;user&quot;);
        factory.setPassword(&quot;user&quot;);
        // 3&#x3001;&#x521B;&#x5EFA;&#x8FDE;&#x63A5; Connection
        Connection connection = factory.newConnection();
        // 4&#x3001;&#x521B;&#x5EFA; Channel
        Channel channel = connection.createChannel();
        // 5&#x3001;&#x521B;&#x5EFA;&#x961F;&#x5217; Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map&lt;String, Object&gt; arguments)
        &#x53C2;&#x6570;&#xFF1A;
            1&#x3001;queue&#xFF1A;&#x961F;&#x5217;&#x540D;&#x79F0;
            2&#x3001;durable&#xFF1A;&#x662F;&#x5426;&#x6301;&#x4E45;&#x5316;&#x3002;&#x5F53;mq&#x91CD;&#x542F;&#x4E4B;&#x540E;&#x8FD8;&#x5728;
            3&#x3001;exclusive&#xFF1A;
                    &#xB7; &#x662F;&#x5426;&#x72EC;&#x5360;&#xFF0C;&#x53EA;&#x80FD;&#x6709;&#x4E00;&#x4E2A;&#x6D88;&#x8D39;&#x8005;&#x76D1;&#x542C;&#x8FD9;&#x4E2A;&#x961F;&#x5217;
                    &#xB7; &#x5F53;Connection&#x5173;&#x95ED;&#xFF0C;&#x662F;&#x5426;&#x5220;&#x9664;&#x961F;&#x5217;
                    &#xB7;
            4&#x3001;autoDelete&#xFF1A;&#x5F53;&#x6CA1;&#x6709;consumer&#x65F6;&#xFF0C;&#x662F;&#x5426;&#x81EA;&#x52A8;&#x5220;&#x9664;
            5&#x3001;argument&#xFF1A;&#x53C2;&#x6570;
         */
        // &#x5982;&#x679C;&#x6CA1;&#x6709;&#x4E00;&#x4E2A;&#x540D;&#x5B57;&#x53EB;hello_world&#x7684;&#x961F;&#x5217;&#xFF0C;&#x5219;&#x521B;&#x5EFA;&#x961F;&#x5217;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x5219;&#x4E0D;&#x4F1A;&#x521B;&#x5EFA;
        channel.queueDeclare(&quot;hello_world&quot;,true,false,false,null);
        // 6&#x3001;&#x53D1;&#x9001;&#x6D88;&#x606F;
        /*
        basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body)
        &#x53C2;&#x6570;&#xFF1A;
            1&#x3001;exchange&#xFF1A;&#x4EA4;&#x6362;&#x673A;&#x540D;&#x79F0;&#x3002;&#x7B80;&#x5355;&#x6A21;&#x5F0F;&#x4E0B;&#x4EA4;&#x6362;&#x673A;&#x4F1A;&#x4F7F;&#x7528;&#x9ED8;&#x8BA4;&#x7684;&quot;&quot;
            2&#x3001;routingKey&#xFF1A;&#x8DEF;&#x7531;&#x540D;&#x79F0;
            3&#x3001;props&#xFF1A;&#x914D;&#x7F6E;&#x4FE1;&#x606F;
            4&#x3001;body&#xFF1A;&#x53D1;&#x9001;&#x6D88;&#x606F;&#x6570;&#x636E;
         */
        String body = &quot;hello,rabbitmq...&quot;;
        channel.basicPublish(&quot;&quot;,&quot;hello_world&quot;,null,body.getBytes());
        // 7&#x3001;&#x91CA;&#x653E;&#x8D44;&#x6E90;
        channel.close();
        connection.close();
    }
}
</code></pre>
</li>
<li>
<p>&#x7F16;&#x5199;&#x6D88;&#x8D39;&#x8005;&#x63A5;&#x53D7;&#x6D88;&#x606F;</p>
<pre><code class="language-java">// 6&#x3001;&#x63A5;&#x6536;&#x6D88;&#x606F;
        /*
        basicConsume(String queue, boolean autoAck, Consumer callback)
        &#x53C2;&#x6570;&#xFF1A;
            1&#x3001;queue&#xFF1A;&#x961F;&#x5217;&#x540D;&#x79F0;
            2&#x3001;autoAck&#xFF1A;&#x662F;&#x5426;&#x81EA;&#x52A8;&#x786E;&#x8BA4;
            3&#x3001;callback&#xFF1A;&#x56DE;&#x8C03;&#x5BF9;&#x8C61;
         */
        Consumer consumer = new DefaultConsumer(channel){
            /*
                &#x56DE;&#x8C03;&#x65B9;&#x6CD5;&#xFF0C;&#x5F53;&#x6536;&#x5230;&#x6D88;&#x606F;&#x540E;&#xFF0C;&#x81EA;&#x52A8;&#x6267;&#x884C;&#x8BE5;&#x65B9;&#x6CD5;
                1&#x3001;consumerTag&#xFF1A;&#x6807;&#x8BC6;
                2&#x3001;envelope&#xFF1A;&#x83B7;&#x53D6;&#x4FE1;&#x606F;&#xFF0C;&#x4EA4;&#x6362;&#x673A;&#x3001;&#x8DEF;&#x7531;key...
                3&#x3001;properties&#xFF1A;&#x914D;&#x7F6E;&#x4FE1;&#x606F;
                4&#x3001;body&#xFF1A;&#x6570;&#x636E;
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println(&quot;consumeTag: &quot; + consumerTag);
                System.out.println(&quot;Exchange: &quot; + envelope.getExchange());
                System.out.println(&quot;RoutingKey: &quot; + envelope.getRoutingKey());
                System.out.println(&quot;properties: &quot; + properties);
                System.out.println(&quot;body: &quot; + new String(body));
            }
        };
        channel.basicConsume(&quot;hello_world&quot;,true,consumer);
        // 7&#x3001;&#x4E0D;&#x8981;&#x5173;&#x95ED;&#x8D44;&#x6E90;
</code></pre>
</li>
</ol>
<h3 id="4rabbitmq-%E7%9A%84%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F">4.RabbitMQ &#x7684;&#x5DE5;&#x4F5C;&#x6A21;&#x5F0F;</h3>
<ol>
<li>
<p>Work queues &#x5DE5;&#x4F5C;&#x961F;&#x5217;&#x6A21;&#x5F0F;</p>
<ol>
<li>
<p>&#x6A21;&#x5F0F;&#x8BF4;&#x660E;</p>
<p>&#x4E0E;&#x666E;&#x901A;&#x6A21;&#x5F0F;&#x76F8;&#x6BD4;&#xFF0C;&#x591A;&#x4E86;&#x4E00;&#x4E9B;&#x6D88;&#x8D39;&#x7AEF;&#xFF0C;&#x591A;&#x4E2A;&#x6D88;&#x8D39;&#x7AEF;&#x5171;&#x540C;&#x6D88;&#x8D39;&#x540C;&#x4E00;&#x4E2A;&#x961F;&#x5217;&#x4E2D;&#x7684;&#x6D88;&#x606F;&#x3002;</p>
</li>
<li>
<p>&#x5E94;&#x7528;&#x573A;&#x666F;</p>
<p>&#x5BF9;&#x4E8E;&#x4EFB;&#x52A1;&#x8FC7;&#x91CD;&#x6216;&#x4EFB;&#x52A1;&#x8F83;&#x591A;&#x7684;&#x60C5;&#x51B5;&#x4F7F;&#x7528;&#x5DE5;&#x4F5C;&#x961F;&#x5217;&#x53EF;&#x4EE5;&#x63D0;&#x9AD8;&#x4EFB;&#x52A1;&#x5904;&#x7406;&#x901F;&#x5EA6;&#x3002;</p>
</li>
</ol>
</li>
<li>
<p>Pub/Sub &#x8BA2;&#x9605;&#x6A21;&#x5F0F;</p>
<ol>
<li>
<p>&#x6A21;&#x5F0F;&#x8BF4;&#x660E;</p>
<p>&#x591A;&#x4E86;&#x4E00;&#x4E2A;Exchange&#x89D2;&#x8272;&#xFF0C;&#x4E14;&#x8FC7;&#x7A0B;&#x7565;&#x6709;&#x53D8;&#x5316;&#xFF1A;</p>
<ul>
<li>P&#xFF1A;&#x751F;&#x4EA7;&#x8005;&#xFF0C;&#x4E0D;&#x518D;&#x53D1;&#x9001;&#x5230;&#x961F;&#x5217;&#xFF0C;&#x800C;&#x662F;&#x53D1;&#x7ED9;X&#xFF08;&#x4EA4;&#x6362;&#x673A;&#xFF09;</li>
<li>C&#xFF1A;&#x4E00;&#x76F4;&#x7B49;&#x5F85;&#x6D88;&#x606F;&#x5230;&#x6765;</li>
<li>Queue&#xFF1A;&#x63A5;&#x53D7;&#x3001;&#x7F13;&#x5B58;&#x6D88;&#x606F;</li>
<li>Exchange&#xFF1A;&#x4E00;&#x65B9;&#x9762;&#xFF0C;&#x63A5;&#x6536;&#x751F;&#x4EA7;&#x8005;&#x53D1;&#x9001;&#x7684;&#x6D88;&#x606F;&#x3002;&#x53E6;&#x4E00;&#x65B9;&#x9762;&#xFF0C;&#x77E5;&#x9053;&#x5982;&#x4F55;&#x5904;&#x7406;&#x6D88;&#x606F;&#x3002;
<ul>
<li>Fanout&#xFF1A;&#x5E7F;&#x64AD;&#xFF0C;&#x5C06;&#x6D88;&#x606F;&#x4EA4;&#x7ED9;&#x6240;&#x6709;&#x7ED1;&#x5B9A;&#x5230;&#x4EA4;&#x6362;&#x673A;&#x7684;&#x961F;&#x5217;&#xFF1B;</li>
<li>Direct&#xFF1A;&#x5B9A;&#x5411;&#xFF0C;&#x628A;&#x6D88;&#x606F;&#x4EA4;&#x7ED9;&#x7B26;&#x5408;&#x6307;&#x5B9A;routing key&#x7684;&#x961F;&#x5217;&#xFF1B;</li>
<li>Topic&#xFF1A;&#x901A;&#x914D;&#x7B26;&#xFF0C;&#x628A;&#x6D88;&#x606F;&#x4EA4;&#x7ED9;&#x7B26;&#x5408;routing pattern&#x7684;&#x961F;&#x5217;&#x3002;</li>
<li>Headers&#xFF1A;&#x53C2;&#x6570;&#x5339;&#x914D;</li>
</ul>
</li>
</ul>
<p>*Exchange&#x53EA;&#x8D1F;&#x8D23;&#x8F6C;&#x53D1;&#x6D88;&#x606F;&#xFF0C;&#x4E0D;&#x5177;&#x5907;&#x5B58;&#x50A8;&#x6D88;&#x606F;&#x7684;&#x80FD;&#x529B;&#xFF0C;&#x56E0;&#x6B64;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x961F;&#x5217;&#x4E0E;Exchange&#x7ED1;&#x5B9A;&#xFF0C;&#x6216;&#x8005;&#x6CA1;&#x6709;&#x7B26;&#x5408;&#x8DEF;&#x7531;&#x89C4;&#x5219;&#x7684;&#x961F;&#x5217;&#xFF0C;&#x4F60;&#x6D88;&#x606F;&#x4F1A;&#x4E22;&#x5931;&#x3002;</p>
</li>
</ol>
</li>
<li>
<p>Routing &#x8DEF;&#x7531;&#x6A21;&#x5F0F;</p>
<ol>
<li>&#x6A21;&#x5F0F;&#x8BF4;&#x660E;&#xFF1A;
<ul>
<li>&#x961F;&#x5217;&#x4E0E;&#x4EA4;&#x6362;&#x673A;&#x7ED1;&#x5B9A;&#x4E0D;&#x80FD;&#x662F;&#x4EFB;&#x610F;&#x7ED1;&#x5B9A;&#xFF0C;&#x800C;&#x662F;&#x6307;&#x5B9A;RoutingKey</li>
<li>&#x6D88;&#x606F;&#x53D1;&#x9001;&#x65B9;&#x5728;&#x5411;Exchange&#x53D1;&#x9001;&#x6D88;&#x606F;&#x65F6;&#xFF0C;&#x4E5F;&#x5FC5;&#x987B;&#x6307;&#x5B9A;&#x6D88;&#x606F;&#x7684;RoutingKey</li>
<li>Exchange&#x4E0D;&#x518D;&#x628A;&#x6D88;&#x606F;&#x4EA4;&#x7ED9;&#x6BCF;&#x4E00;&#x4E2A;&#x7ED1;&#x5B9A;&#x7684;&#x961F;&#x5217;&#xFF0C;&#x800C;&#x662F;&#x6839;&#x636E;&#x6D88;&#x606F;&#x7684;RoutingKey&#x8FDB;&#x884C;&#x5224;&#x65AD;&#xFF0C;&#x53EA;&#x6709;&#x961F;&#x5217;&#x7684;RoutingKey&#x4E0E;&#x6D88;&#x606F;&#x7684;RoutingKey&#x4E00;&#x76F4;&#xFF0C;&#x624D;&#x4F1A;&#x63A5;&#x6536;&#x5230;&#x6D88;&#x606F;</li>
</ul>
</li>
</ol>
</li>
<li>
<p>Topic &#x901A;&#x914D;&#x7B26;&#x6A21;&#x5F0F;</p>
<p>Topic &#x4E3B;&#x9898;&#x6A21;&#x5F0F;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;Pub/Sub &#x6A21;&#x5F0F;&#x4E0E;Routing &#x8DEF;&#x7531;&#x6A21;&#x5F0F;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x800C;&#x4E14;Topic&#x5728;&#x914D;&#x7F6E;routing key&#x7684;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x901A;&#x914D;&#x7B26;&#xFF0C;&#x66F4;&#x7075;&#x6D3B;&#x3002;</p>
</li>
</ol>
<h3 id="5spring-%E6%95%B4%E5%90%88-rabbitmq">5.Spring &#x6574;&#x5408; RabbitMQ</h3>
<p>SpringBoot&#x6574;&#x5408;RabbitMQ</p>
<h4 id="51%E7%94%9F%E4%BA%A7%E8%80%85">5.1&#x751F;&#x4EA7;&#x8005;</h4>
<ol>
<li>
<p>&#x521B;&#x5EFA;&#x751F;&#x4EA7;&#x8005;SpringBoot&#x5DE5;&#x7A0B;</p>
</li>
<li>
<p>&#x5F15;&#x5165;&#x4F9D;&#x8D56;&#x5750;&#x6807;</p>
<pre><code class="language-xml">&lt;dependency&gt;
    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    &lt;artifactId&gt;spring-boot-start-amqp&lt;/artifactId&gt;
&lt;/dependency&gt;
</code></pre>
</li>
<li>
<p>&#x7F16;&#x5199;yml&#x914D;&#x7F6E;&#xFF0C;&#x57FA;&#x672C;&#x4FE1;&#x606F;&#x914D;&#x7F6E;</p>
</li>
<li>
<p>&#x5B9A;&#x4E49;&#x4EA4;&#x6362;&#x673A;&#x3001;&#x961F;&#x5217;&#x53CA;&#x7ED1;&#x5B9A;&#x5173;&#x7CFB;&#x7684;&#x914D;&#x7F6E;&#x7C7B;</p>
<pre><code class="language-java">@Configuration
public class RabbitMQConfig{
    public static final String EXCHANGE_NAME = &quot;boot_topic_exchange&quot;;
    public static final String QUEUE_NAME = &quot;boot_queue&quot;;
    
    // 1&#x3001;&#x4EA4;&#x6362;&#x673A;
    @Bean(&quot;bootExchange&quot;)
    public Exchange bootExchange(){
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
    // 2&#x3001;Queue&#x961F;&#x5217;
    @Bean(&quot;bootQueue&quot;)
    public Queue bootQueue(){
        return QueueBulider.durable(QUEUE_NAME).build();
    }
    // 3&#x3001;&#x961F;&#x5217;&#x548C;&#x4EA4;&#x6362;&#x673A;&#x7ED1;&#x5B9A;&#x5173;&#x7CFB;Binding
    /*
    	1&#x3001;&#x77E5;&#x9053;&#x54EA;&#x4E2A;&#x961F;&#x5217;
    	2&#x3001;&#x77E5;&#x9053;&#x54EA;&#x4E2A;&#x4EA4;&#x6362;&#x673A;
    	3&#x3001;routing key
    */
    @Bean()
    public Bind bindQueueExchange(@Qualifier(&quot;bootQueue&quot;) Queue queue,@Qualifier(&quot;bootExchange&quot;) Exchange exchange){
        return BindingBuilder.bind(queue).to(exchange).with(&quot;boot.#&quot;).noargs();
    }
}
</code></pre>
</li>
<li>
<p>&#x6CE8;&#x5165;RabbitTemplate&#xFF0C;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#xFF0C;&#x5B8C;&#x6210;&#x6D88;&#x606F;&#x53D1;&#x9001;</p>
<pre><code class="language-java">public class ProducerTest{
    // 1&#x3001;&#x6CE8;&#x5165;RabbitTemplate
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSend(){
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME,&quot;boot.log&quot;,&quot;boot mq hello&quot;);
    }
}
</code></pre>
</li>
</ol>
<h4 id="52%E6%B6%88%E8%B4%B9%E8%80%85">5.2&#x6D88;&#x8D39;&#x8005;</h4>
<ol>
<li>
<p>&#x521B;&#x5EFA;&#x6D88;&#x8D39;&#x8005;SpringBoot&#x5DE5;&#x7A0B;</p>
</li>
<li>
<p>&#x5F15;&#x5165;start&#xFF0C;&#x4F9D;&#x8D56;&#x5750;&#x6807;</p>
</li>
<li>
<p>&#x7F16;&#x5199;yml&#x914D;&#x7F6E;&#xFF0C;&#x57FA;&#x672C;&#x4FE1;&#x606F;&#x914D;&#x7F6E;</p>
</li>
<li>
<p>&#x5B9A;&#x4E49;&#x76D1;&#x542C;&#x7C7B;&#xFF0C;&#x4F7F;&#x7528;@RabbitListener&#x6CE8;&#x89E3;&#x5B8C;&#x6210;&#x961F;&#x5217;&#x76D1;&#x542C;</p>
<pre><code class="language-java">@Component
public class RabbitMQListener{
    @RabbitListener(queues=&quot;boot_queue&quot;)
    public void ListenerQueue(Message message){
        System.out.println(new String(message.getBody()));
    }
}
</code></pre>
</li>
</ol>
<h4 id="53%E5%B0%8F%E7%BB%93">5.3&#x5C0F;&#x7ED3;</h4>
<ul>
<li>SpinrgBoot&#x63D0;&#x4F9B;&#x4E86;&#x5FEB;&#x901F;&#x6574;&#x5408;RabbitMQ&#x7684;&#x65B9;&#x5F0F;</li>
<li>&#x57FA;&#x672C;&#x4FE1;&#x606F;&#x5728;yml&#x4E2D;&#x914D;&#x7F6E;&#xFF0C;&#x961F;&#x5217;&#x4EA4;&#x6362;&#x673A;&#x4EE5;&#x53CA;&#x7ED1;&#x5B9A;&#x5173;&#x7CFB;&#x5728;&#x914D;&#x7F6E;&#x7C7B;&#x4E2D;&#x4F7F;&#x7528;Bean&#x7684;&#x65B9;&#x5F0F;&#x914D;&#x7F6E;</li>
<li>&#x751F;&#x4EA7;&#x7AEF;&#x76F4;&#x63A5;&#x6CE8;&#x5165;RabbitTemplate&#x5B8C;&#x6210;&#x6D88;&#x606F;&#x53D1;&#x9001;</li>
<li>&#x6D88;&#x8D39;&#x7AEF;&#x76F4;&#x63A5;&#x4F7F;&#x7528;@RabbitListener&#x5B8C;&#x6210;&#x6D88;&#x606F;&#x63A5;&#x6536;</li>
</ul>
<h2 id="mq%E9%AB%98%E7%BA%A7">MQ&#x9AD8;&#x7EA7;</h2>
<h3 id="1rabbitmq%E9%AB%98%E7%BA%A7%E7%89%B9%E6%80%A7">1.RabbitMQ&#x9AD8;&#x7EA7;&#x7279;&#x6027;</h3>
<h4 id="11%E6%B6%88%E6%81%AF%E5%8F%AF%E9%9D%A0%E6%80%A7%E6%8A%95%E9%80%92">1.1&#x6D88;&#x606F;&#x53EF;&#x9760;&#x6027;&#x6295;&#x9012;</h4>
<p>&#x4F7F;&#x7528;RabbitMQ&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F5C;&#x4E3A;&#x6D88;&#x606F;&#x53D1;&#x9001;&#x65B9;&#x5E0C;&#x671B;&#x675C;&#x7EDD;&#x4EFB;&#x4F55;&#x6D88;&#x606F;&#x4E22;&#x5931;&#x6216;&#x8005;&#x6295;&#x9012;&#x5931;&#x8D25;&#x7684;&#x573A;&#x666F;&#x3002;RabbiMQ&#x4E3A;&#x6211;&#x4EEC;&#x63D0;&#x4F9B;&#x4E86;&#x4E24;&#x79CD;&#x65B9;&#x5F0F;&#x7528;&#x6765;&#x63A7;&#x5236;&#x6D88;&#x606F;&#x7684;&#x6295;&#x9012;&#x53EF;&#x9760;&#x6027;&#x6A21;&#x5F0F;&#xFF1A;<strong>confirm &#x786E;&#x8BA4;&#x6A21;&#x5F0F;</strong>&#xFF1B;<strong>return &#x9000;&#x56DE;&#x6A21;&#x5F0F;</strong>&#x3002;</p>
<p>rabbitmq&#x6574;&#x4E2A;&#x6D88;&#x606F;&#x6295;&#x9012;&#x7684;&#x8DEF;&#x5F84;&#x4E3A;&#xFF1A;</p>
<p>producer ---&gt; rabbitmq broker ---&gt; exchange ---&gt; queue ---&gt; consumer</p>
<ul>
<li>&#x6D88;&#x606F;&#x4ECE;producer&#x5230;exchange&#x4F1A;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;confirmCallback</li>
<li>&#x6D88;&#x606F;&#x4ECE;exchange&#x5230;queue&#x6295;&#x9012;&#x5931;&#x8D25;&#x4F1A;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;returnCallback</li>
<li>&#x901A;&#x8FC7;&#x8FD9;&#x4E24;&#x4E2A;callback&#x63A7;&#x5236;&#x6D88;&#x606F;&#x7684;&#x53EF;&#x9760;&#x6027;&#x6295;&#x9012;</li>
</ul>
<p>&#x786E;&#x8BA4;&#x6A21;&#x5F0F;&#xFF1A;</p>
<ol>
<li>&#x5F00;&#x542F;&#xFF1A;ConnectionFactory&#x4E2D;&#x5F00;&#x542F;publisher-confirms=</li>
<li>&#x5728;rabbitTemplate&#x5B9A;&#x4E49;ConfirmCallback&#x56DE;&#x8C03;&#x51FD;&#x6570;</li>
</ol>
<p>&#x56DE;&#x9000;&#x6A21;&#x5F0F;&#xFF1A;</p>
<ol>
<li>
<p>&#x5F00;&#x542F;&#xFF1A;publisher-returns=true</p>
</li>
<li>
<p>&#x8BBE;&#x7F6E;RetrunCallback</p>
<pre><code class="language-java">rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback(){});
</code></pre>
</li>
<li>
<p>&#x8BBE;&#x7F6E;Exchange&#x5904;&#x7406;&#x6D88;&#x606F;&#x6A21;&#x5F0F;&#xFF1A;&#x5982;&#x679C;&#x6D88;&#x606F;&#x6CA1;&#x6709;&#x8DEF;&#x7531;&#x5230;Queue&#xFF0C;1&#x3001;&#x4E22;&#x5F03;&#x6D88;&#x606F;&#xFF1B;2&#x3001;&#x8FD4;&#x56DE;&#x6D88;&#x606F;&#x53D1;&#x9001;&#x65B9;ReturnCallback</p>
</li>
</ol>
<h4 id="12consumer-ack">1.2Consumer ACK</h4>
<p>&#x6D88;&#x8D39;&#x7AEF;&#x6536;&#x5230;&#x6D88;&#x606F;&#x540E;&#x7684;&#x786E;&#x8BA4;&#x65B9;&#x5F0F;&#x3002;&#x4E09;&#x79CD;&#x786E;&#x8BA4;&#x65B9;&#x5F0F;&#xFF08;rabbit:listener-container&#x6807;&#x7B7E;&#x4E2D;&#x5B9A;&#x4E49;&#xFF09;&#xFF1A;</p>
<ul>
<li>&#x81EA;&#x52A8;&#x786E;&#x8BA4;&#xFF1A;acknowledge=&quot;none&quot;</li>
<li>&#x624B;&#x52A8;&#x786E;&#x8BA4;&#xFF1A;acknowledge=&quot;manual&quot;</li>
<li>&#x6839;&#x636E;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#x786E;&#x8BA4;&#xFF1A;ackowledge=&quot;auto&quot;</li>
</ul>
<p>&#x81EA;&#x52A8;&#x786E;&#x8BA4;&#x662F;&#x6307;&#xFF0C;&#x5F53;&#x6D88;&#x606F;&#x4E00;&#x65E6;&#x88AB;Consumer&#x63A5;&#x6536;&#x5230;&#xFF0C;&#x5219;&#x81EA;&#x52A8;&#x786E;&#x8BA4;&#x6536;&#x5230;&#xFF0C;&#x5E76;&#x5C06;&#x76F8;&#x5E94;&#x7684;message&#x4ECE;rabbitmq&#x7684;&#x6D88;&#x606F;&#x7F13;&#x5B58;&#x4E2D;&#x79FB;&#x9664;&#x3002;&#x5B9E;&#x9645;&#x4E1A;&#x52A1;&#x5904;&#x7406;&#x4E2D;&#xFF0C;&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x6D88;&#x606F;&#x6536;&#x5230;&#x4F46;&#x4E1A;&#x52A1;&#x5904;&#x7406;&#x51FA;&#x73B0;&#x5F02;&#x5E38;&#xFF0C;&#x90A3;&#x4E48;&#x6D88;&#x606F;&#x5C31;&#x4F1A;&#x4E22;&#x5931;&#x3002;&#x8BBE;&#x7F6E;&#x624B;&#x52A8;&#x786E;&#x8BA4;&#xFF0C;&#x5219;&#x9700;&#x8981;&#x5728;&#x4E1A;&#x52A1;&#x5904;&#x7406;&#x540E;&#xFF0C;&#x8C03;&#x7528;channel.basicAck(deliveryTag,false)&#xFF0C;&#x624B;&#x52A8;&#x7B7E;&#x6536;&#xFF0C;&#x5982;&#x679C;&#x51FA;&#x73B0;&#x5F02;&#x5E38;&#xFF0C;&#x5219;&#x8C03;&#x7528;channel.basicNack()&#x6216;basicReject&#x65B9;&#x6CD5;&#xFF0C;&#x8BA9;&#x5176;&#x81EA;&#x52A8;&#x91CD;&#x65B0;&#x53D1;&#x9001;&#x6D88;&#x606F;&#x3002;</p>
<h5 id="%E5%8F%AF%E9%9D%A0%E6%80%A7%E6%80%BB%E7%BB%93">&#x53EF;&#x9760;&#x6027;&#x603B;&#x7ED3;</h5>
<ol>
<li>&#x6301;&#x4E45;&#x5316;
<ul>
<li>exchange &#x6301;&#x4E45;&#x5316;</li>
<li>queue &#x6301;&#x4E45;&#x5316;</li>
<li>message &#x6301;&#x4E45;&#x5316;</li>
</ul>
</li>
<li>&#x751F;&#x4EA7;&#x65B9;&#x786E;&#x8BA4;Confirm</li>
<li>&#x6D88;&#x8D39;&#x65B9;&#x786E;&#x8BA4;Ack</li>
<li>Broker&#x9AD8;&#x53EF;&#x7528;</li>
</ol>
<h4 id="13%E6%B6%88%E8%B4%B9%E7%AB%AF%E9%99%90%E6%B5%81">1.3&#x6D88;&#x8D39;&#x7AEF;&#x9650;&#x6D41;</h4>
<p>Consumer &#x9650;&#x6D41;&#x673A;&#x5236;</p>
<ol>
<li>
<p>&#x786E;&#x4FDD;ack&#x673A;&#x5236;&#x4E3A;&#x624B;&#x52A8;&#x786E;&#x8BA4;acknowledge=&quot;manual&quot;</p>
</li>
<li>
<p>listener-container&#x914D;&#x7F6E;&#x5C5E;&#x6027;</p>
<p>&#x200B;	perfetch = 1&#xFF0C;&#x8868;&#x793A;&#x6D88;&#x8D39;&#x7AEF;&#x6BCF;&#x6B21;&#x4ECE;mq&#x62C9;&#x53BB;&#x4E00;&#x6761;&#x6D88;&#x606F;&#x6765;&#x6D88;&#x8D39;&#xFF0C;&#x77E5;&#x9053;&#x624B;&#x52A8;&#x786E;&#x8BA4;&#x6D88;&#x8D39;&#x5B8C;&#x6BD5;&#xFF0C;&#x624D;&#x4F1A;&#x7EE7;&#x7EED;&#x62C9;&#x53D6;&#x4E0B;&#x4E00;&#x6761;&#x6D88;&#x606F;&#x3002;</p>
</li>
</ol>
<h4 id="14ttl">1.4TTL</h4>
<ul>
<li>&#x5168;&#x7A0B;Time To Live&#xFF08;&#x5B58;&#x6D3B;&#x65F6;&#x95F4;/&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#xFF09;</li>
<li>&#x5F53;&#x6D88;&#x606F;&#x5230;&#x8FBE;&#x5B58;&#x6D3B;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x8FD8;&#x6CA1;&#x6709;&#x88AB;&#x6D88;&#x8D39;&#xFF0C;&#x4F1A;&#x88AB;&#x81EA;&#x52A8;&#x6E05;&#x9664;</li>
<li>RabbitMQ&#x53EF;&#x4EE5;&#x5BF9;&#x6D88;&#x606F;&#x8BBE;&#x7F6E;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5BF9;&#x6574;&#x4E2A;&#x961F;&#x5217;&#xFF08;Queue&#xFF09;&#x8BBE;&#x7F6E;&#x8FC7;&#x671F;&#x65F6;&#x95F4;</li>
</ul>
<h5 id="%E5%B0%8F%E7%BB%93">&#x5C0F;&#x7ED3;</h5>
<ul>
<li>&#x8BBE;&#x7F6E;&#x961F;&#x5217;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#x4F7F;&#x7528;&#x53C2;&#x6570;&#xFF1A;x-message-ttl&#xFF0C;&#x5355;&#x4F4D;&#xFF1A;ms&#xFF0C;&#x706B;&#x5806;&#x6574;&#x4E2A;&#x961F;&#x5217;&#x6D88;&#x606F;&#x7EDF;&#x4E00;&#x8FC7;&#x671F;</li>
<li>&#x8BBE;&#x7F6E;&#x6D88;&#x606F;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#x4F7F;&#x7528;&#x53C2;&#x6570;&#xFF1A;expiration&#x3002;&#x5355;&#x4F4D;&#xFF1A;ms&#xFF0C;&#x5F53;&#x8BE5;&#x6D88;&#x606F;&#x5728;&#x961F;&#x5217;&#x5934;&#x90E8;&#x65F6;&#xFF08;&#x6D88;&#x8D39;&#x65F6;&#xFF09;&#xFF0C;&#x4F1A;&#x5355;&#x72EC;&#x5224;&#x65AD;&#x8FD9;&#x4E00;&#x6D88;&#x606F;&#x662F;&#x5426;&#x8FC7;&#x671F;&#x3002;</li>
<li>&#x5982;&#x679C;&#x4E24;&#x8005;&#x90FD;&#x8FDB;&#x884C;&#x4E86;&#x8BBE;&#x7F6E;&#xFF0C;&#x4EE5;&#x65F6;&#x95F4;&#x77ED;&#x7684;&#x4E3A;&#x51C6;&#x3002;</li>
</ul>
<h4 id="15%E6%AD%BB%E4%BF%A1%E9%98%9F%E5%88%97">1.5&#x6B7B;&#x4FE1;&#x961F;&#x5217;</h4>
<p>Dead Letter Exchange&#xFF08;&#x6B7B;&#x4FE1;&#x4EA4;&#x6362;&#x673A;&#xFF09;&#xFF0C;&#x5F53;&#x6D88;&#x606F;&#x6210;&#x4E3A;Dead message&#x540E;&#xFF0C;&#x53EF;&#x4EE5;&#x88AB;&#x91CD;&#x65B0;&#x53D1;&#x9001;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x961F;&#x5217;&#xFF0C;&#x8FD9;&#x4E2A;&#x4EA4;&#x6362;&#x673A;&#x5C31;&#x7B97;DLX&#x3002;</p>
<p>&#x6D88;&#x606F;&#x6210;&#x4E3A;&#x6B7B;&#x4FE1;&#x7684;&#x4E09;&#x79CD;&#x60C5;&#x51B5;&#xFF1A;</p>
<ol>
<li>&#x961F;&#x5217;&#x6D88;&#x606F;&#x957F;&#x5EA6;&#x5230;&#x8FBE;&#x9650;&#x5EA6;</li>
<li>&#x6D88;&#x8D39;&#x8005;&#x62D2;&#x7EDD;&#x6D88;&#x8D39;&#x6D88;&#x606F;&#xFF0C;basicNack/basicReject&#xFF0C;&#x5E76;&#x4E14;&#x4E0D;&#x628A;&#x6D88;&#x606F;&#x91CD;&#x65B0;&#x653E;&#x5165;&#x539F;&#x76EE;&#x6807;&#x961F;&#x5217;&#xFF0C;request=false</li>
<li>&#x539F;&#x961F;&#x5217;&#x5B58;&#x5728;&#x6D88;&#x606F;&#x8FC7;&#x671F;&#x8BBE;&#x7F6E;&#xFF0C;&#x6D88;&#x606F;&#x5230;&#x8FBE;&#x8D85;&#x65F6;&#x65F6;&#x95F4;&#x672A;&#x88AB;&#x6D88;&#x8D39;</li>
</ol>
<p>&#x961F;&#x5217;&#x7ED1;&#x5B9A;&#x6B7B;&#x4FE1;&#x4EA4;&#x6362;&#x673A;&#xFF1A;&#x7ED9;&#x961F;&#x5217;&#x8BBE;&#x7F6E;&#x53C2;&#x6570;&#xFF1A;x-dead-letter-exchange&#x548C;x-dead-letter-routing-key</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/726242047404a6e4.png" alt="RabbitMQ" loading="lazy"></p>
<h4 id="16%E5%BB%B6%E8%BF%9F%E9%98%9F%E5%88%97">1.6&#x5EF6;&#x8FDF;&#x961F;&#x5217;</h4>
<p>&#x5373;&#x6D88;&#x606F;&#x8FDB;&#x5165;&#x961F;&#x5217;&#x540E;&#x4E0D;&#x4F1A;&#x7ACB;&#x5373;&#x88AB;&#x6D88;&#x8D39;&#xFF0C;&#x53EA;&#x6709;&#x5230;&#x8FBE;&#x6307;&#x5B9A;&#x65F6;&#x95F4;&#x540E;&#xFF0C;&#x624D;&#x4F1A;&#x88AB;&#x6D88;&#x8D39;&#x3002;</p>
<p>&#x9700;&#x6C42;&#xFF1A;1&#x3001;&#x4E0B;&#x5355;&#x540E;&#xFF0C;30&#x5206;&#x949F;&#x672A;&#x652F;&#x4ED8;&#xFF0C;&#x53D6;&#x6D88;&#x8BA2;&#x5355;&#xFF0C;&#x56DE;&#x6EDA;&#x5E93;&#x5B58;&#x3002;2&#x3001;&#x65B0;&#x7528;&#x6237;&#x6CE8;&#x518C;&#x6210;&#x529F;7&#x5929;&#x540E;&#xFF0C;&#x53D1;&#x9001;&#x77ED;&#x4FE1;&#x95EE;&#x5019;&#x3002;</p>
<p>&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#xFF1A;1&#x3001;&#x5B9A;&#x65F6;&#x5668;&#x3002;2&#x3001;&#x5EF6;&#x8FDF;&#x961F;&#x5217;&#x3002;</p>
<p>RabbitMQ&#x4E2D;&#x672A;&#x63D0;&#x4F9B;&#x5EF6;&#x8FDF;&#x961F;&#x5217;&#x529F;&#x80FD;&#xFF0C;&#x4F46;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#xFF1A;TTL+&#x6B7B;&#x4FE1;&#x961F;&#x5217;&#x7EC4;&#x5408;&#x5B9E;&#x73B0;&#x5EF6;&#x8FDF;&#x961F;&#x5217;&#x7684;&#x6548;&#x679C;&#x3002;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/f00096dc6cced02d.png" alt="RabbitMQ" loading="lazy"></p>
<h4 id="17%E6%97%A5%E5%BF%97%E4%B8%8E%E7%9B%91%E6%8E%A7">1.7&#x65E5;&#x5FD7;&#x4E0E;&#x76D1;&#x63A7;</h4>
<h5 id="rabbitmq%E6%97%A5%E5%BF%97">RabbitMQ&#x65E5;&#x5FD7;</h5>
<p>&#x9ED8;&#x8BA4;&#x5B58;&#x653E;&#x8DEF;&#x5F84;&#xFF1A;/var/log/rabbitmq/rabbit@xxx.log</p>
<h5 id="web%E7%AE%A1%E6%8E%A7%E5%B9%B3%E5%8F%B0%E7%9B%91%E6%8E%A7">web&#x7BA1;&#x63A7;&#x5E73;&#x53F0;&#x76D1;&#x63A7;</h5>
<h5 id="rabbitmqctl%E7%AE%A1%E7%90%86%E5%92%8C%E7%9B%91%E6%8E%A7">rabbitmqctl&#x7BA1;&#x7406;&#x548C;&#x76D1;&#x63A7;</h5>
<h4 id="18%E6%B6%88%E6%81%AF%E5%8F%AF%E9%9D%A0%E6%80%A7%E5%88%86%E6%9E%90%E4%B8%8E%E8%BF%BD%E8%B8%AA">1.8&#x6D88;&#x606F;&#x53EF;&#x9760;&#x6027;&#x5206;&#x6790;&#x4E0E;&#x8FFD;&#x8E2A;</h4>
<p>&#x5728;&#x4F7F;&#x7528;&#x4EFB;&#x4F55;&#x6D88;&#x606F;&#x4E2D;&#x95F4;&#x4EF6;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x96BE;&#x514D;&#x4F1A;&#x51FA;&#x73B0;&#x67D0;&#x6761;&#x6D88;&#x606F;&#x5F02;&#x5E38;&#x4E22;&#x5931;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x9700;&#x8981;&#x6709;&#x4E00;&#x4E2A;&#x8F83;&#x597D;&#x7684;&#x673A;&#x5236;&#x8DDF;&#x8E2A;&#x8BB0;&#x5F55;&#x6D88;&#x606F;&#x7684;&#x6295;&#x9012;&#x8FC7;&#x7A0B;&#xFF0C;&#x4EE5;&#x6B64;&#x534F;&#x52A9;&#x5F00;&#x53D1;&#x548C;&#x8FD0;&#x7EF4;&#x4EBA;&#x5458;&#x8FDB;&#x884C;&#x95EE;&#x9898;&#x7684;&#x5B9A;&#x4F4D;&#x3002;&#x5728;RabbitMQ&#x4E2D;&#x4F7F;&#x7528;Firehose&#x548C;rabbitmq_tracing&#x63D2;&#x4EF6;&#x529F;&#x80FD;&#x6765;&#x5B9E;&#x73B0;&#x6D88;&#x606F;&#x8FFD;&#x8E2A;&#x3002;</p>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x6253;&#x5F00;trace&#x4F1A;&#x5F71;&#x54CD;&#x6D88;&#x606F;&#x5199;&#x5165;&#x529F;&#x80FD;&#xFF0C;&#x9002;&#x5F53;&#x6253;&#x5F00;&#x540E;&#x8BF7;&#x5173;&#x95ED;&#x3002;</p>
<p>&#x200B;	rabbitctl trace_on&#xFF1A;&#x5F00;&#x542F;Firehose&#x547D;&#x4EE4;</p>
<p>&#x200B;	rabbitctl trace_off&#xFF1A;&#x5173;&#x95ED;Firehose&#x547D;&#x4EE4;</p>
<h3 id="2rabbitmq%E5%BA%94%E7%94%A8%E9%97%AE%E9%A2%98">2.RabbitMQ&#x5E94;&#x7528;&#x95EE;&#x9898;</h3>
<h4 id="21%E6%B6%88%E6%81%AF%E5%8F%AF%E9%9D%A0%E6%80%A7%E4%BF%9D%E9%9A%9C">2.1&#x6D88;&#x606F;&#x53EF;&#x9760;&#x6027;&#x4FDD;&#x969C;</h4>
<ul>
<li>
<p>&#x6D88;&#x606F;&#x8865;&#x507F;&#x673A;&#x5236;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/0799705299ce653d.png" alt="RabbitMQ" loading="lazy"></p>
</li>
</ul>
<h4 id="22%E6%B6%88%E6%81%AF%E5%B9%82%E7%AD%89%E6%80%A7%E5%A4%84%E7%90%86">2.2&#x6D88;&#x606F;&#x5E42;&#x7B49;&#x6027;&#x5904;&#x7406;</h4>
<p>&#x5E42;&#x7B49;&#x6027;&#x6307;&#x4E00;&#x6B21;&#x548C;&#x591A;&#x6B21;&#x8BF7;&#x6C42;&#x67D0;&#x4E00;&#x4E2A;&#x8D44;&#x6E90;&#xFF0C;&#x5BF9;&#x4E8E;&#x8D44;&#x6E90;&#x672C;&#x8EAB;&#x5E94;&#x8BE5;&#x5177;&#x6709;&#x7EDF;&#x4E00;&#x7684;&#x7ED3;&#x679C;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x4EFB;&#x610F;&#x591A;&#x6B21;&#x6267;&#x884C;&#x5BF9;&#x8D44;&#x6E90;&#x672C;&#x8EAB;&#x6240;&#x4EA7;&#x751F;&#x7684;&#x5F71;&#x54CD;&#x5747;&#x4E0E;&#x4E00;&#x6B21;&#x6267;&#x884C;&#x7684;&#x5F71;&#x54CD;&#x76F8;&#x540C;&#x3002;</p>
<ul>
<li>&#x4E50;&#x89C2;&#x9501;&#x89E3;&#x51B3;&#x65B9;&#x6848;</li>
</ul>
<h3 id="3rabbitmq%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA">3.RabbitMQ&#x96C6;&#x7FA4;&#x642D;&#x5EFA;</h3>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/43ff1c5c2f7a341d.png" alt="RabbitMQ" loading="lazy"></p>
<p>Erlang&#x8BED;&#x8A00;&#x5929;&#x751F;&#x5177;&#x5907;&#x5206;&#x5E03;&#x5F0F;&#x7279;&#x6027;&#xFF08;&#x540C;&#x6B65;Erlang&#x96C6;&#x7FA4;&#x5404;&#x8282;&#x70B9;&#x7684;magic cookie&#x5B9E;&#x73B0;&#xFF09;&#xFF0C;&#x56E0;&#x6B64;RabbitMQ&#x5929;&#x7136;&#x652F;&#x6301;Clustring&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x50CF;kafka&#x90A3;&#x6837;&#x901A;&#x8FC7;ZooKeeper&#x5B9E;&#x73B0;HA&#x65B9;&#x6848;&#x548C;&#x4FDD;&#x5B58;&#x96C6;&#x7FA4;&#x7684;&#x5143;&#x6570;&#x636E;&#x3002;&#x96C6;&#x7FA4;&#x662F;&#x4FDD;&#x8BC1;&#x53EF;&#x9760;&#x6027;&#x7684;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#xFF0C;&#x540C;&#x65F6;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x6C34;&#x5E73;&#x6269;&#x5C55;&#x4EE5;&#x8FBE;&#x5230;&#x589E;&#x52A0;&#x6D88;&#x606F;&#x541E;&#x5410;&#x91CF;&#x80FD;&#x529B;&#x7684;&#x76EE;&#x7684;&#x3002;</p>
<h4 id="31rabbitmq%E9%AB%98%E5%8F%AF%E7%94%A8%E9%9B%86%E7%BE%A4">3.1RabbitMQ&#x9AD8;&#x53EF;&#x7528;&#x96C6;&#x7FA4;</h4>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><p>&#x6559;&#x5B66;&#x89C6;&#x9891;&#xFF1A;<a href="http://https://www.bilibili.com/video/BV15k4y1k7Ep/?share_source=copy_web&amp;vd_source=09ff798a599911b346095357b61ab692">&#x3010;&#x9ED1;&#x9A6C;&#x7A0B;&#x5E8F;&#x5458;RabbitMQ&#x5168;&#x5957;&#x6559;&#x7A0B;&#xFF0C;rabbitmq&#x6D88;&#x606F;&#x4E2D;&#x95F4;&#x4EF6;&#x5230;&#x5B9E;&#x6218;&#x3011; </a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[排序算法]]></title><description><![CDATA[<div class="kg-card kg-toggle-card" data-kg-toggle-state="close"><div class="kg-toggle-heading"><h4 class="kg-toggle-heading-text">&#x76EE;&#x5F55;</h4><button class="kg-toggle-card-icon"><svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/></svg></button></div><div class="kg-toggle-content"><p>&#x5192;&#x6CE1;&#x6392;&#x5E8F;</p><p>&#x9009;&#x62E9;&#x6392;&#x5E8F;</p><p>&#x63D2;&#x5165;&#x6392;&#x5E8F;</p><p>&#x5E0C;&#x5C14;&#x6392;&#x5E8F;</p><p>&#x5FEB;&#x901F;&#x6392;&#x5E8F;</p><p>&#x5F52;&#x5E76;&#x6392;&#x5E8F;</p><p>&#x8BA1;&#x6570;&#x6392;&#x5E8F;</p><p>&#x57FA;&#x6570;&#x6392;&#x5E8F;</p></div></div><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/0e6b8ba5c6336932.png" width="1080" height="858" loading="lazy" alt></div><div class="kg-gallery-image"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/16d42edfaa58c175.png" width="1080" height="730" loading="lazy" alt></div></div></div></figure><!--kg-card-begin: markdown--><h3 id="%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F">&#x5192;&#x6CE1;&#x6392;&#x5E8F;</h3>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/07e04dd4d57137ac.gif" class="kg-image" alt loading="lazy" width="639" height="192"></figure><!--kg-card-begin: markdown--><h4 id="%E5%88%9D%E6%AD%A5%E5%AE%9E%E7%8E%B0">&#x521D;&#x6B65;&#x5B9E;&#x73B0;</h4>
<p>&#x4E24;&#x6B21;&#x5B8C;&#x6574;&#x904D;&#x5386;&#x6570;&#x7EC4;</p>]]></description><link>https://www.tangkun.site/pai-xu-suan-fa/</link><guid isPermaLink="false">63fb27634344994407565756</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Sun, 26 Feb 2023 15:04:05 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/b7e5ec32b839b7d2.jpg" medium="image"/><content:encoded><![CDATA[<div class="kg-card kg-toggle-card" data-kg-toggle-state="close"><div class="kg-toggle-heading"><h4 class="kg-toggle-heading-text">&#x76EE;&#x5F55;</h4><button class="kg-toggle-card-icon"><svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24"><path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/></svg></button></div><div class="kg-toggle-content"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/b7e5ec32b839b7d2.jpg" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;"><p>&#x5192;&#x6CE1;&#x6392;&#x5E8F;</p><p>&#x9009;&#x62E9;&#x6392;&#x5E8F;</p><p>&#x63D2;&#x5165;&#x6392;&#x5E8F;</p><p>&#x5E0C;&#x5C14;&#x6392;&#x5E8F;</p><p>&#x5FEB;&#x901F;&#x6392;&#x5E8F;</p><p>&#x5F52;&#x5E76;&#x6392;&#x5E8F;</p><p>&#x8BA1;&#x6570;&#x6392;&#x5E8F;</p><p>&#x57FA;&#x6570;&#x6392;&#x5E8F;</p></div></div><figure class="kg-card kg-gallery-card kg-width-wide"><div class="kg-gallery-container"><div class="kg-gallery-row"><div class="kg-gallery-image"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/0e6b8ba5c6336932.png" width="1080" height="858" loading="lazy" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;"></div><div class="kg-gallery-image"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/16d42edfaa58c175.png" width="1080" height="730" loading="lazy" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;"></div></div></div></figure><!--kg-card-begin: markdown--><h3 id="%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F">&#x5192;&#x6CE1;&#x6392;&#x5E8F;</h3>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/07e04dd4d57137ac.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="639" height="192"></figure><!--kg-card-begin: markdown--><h4 id="%E5%88%9D%E6%AD%A5%E5%AE%9E%E7%8E%B0">&#x521D;&#x6B65;&#x5B9E;&#x73B0;</h4>
<p>&#x4E24;&#x6B21;&#x5B8C;&#x6574;&#x904D;&#x5386;&#x6570;&#x7EC4;</p>
<ol>
<li>&#x4F9D;&#x6B21;&#x6BD4;&#x8F83;&#x6570;&#x7EC4;&#x4E2D;&#x76F8;&#x90BB;&#x4E24;&#x4E2A;&#x5143;&#x7D20;&#x5927;&#x5C0F;&#xFF0C;&#x82E5;a[i]&gt;a[i+1]&#x5219;&#x4EA4;&#x6362;&#x4E24;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x4E24;&#x4E24;&#x90FD;&#x6BD4;&#x8F83;&#x4E00;&#x904D;&#x79F0;&#x4E3A;&#x5192;&#x6CE1;&#xFF0C;&#x7ED3;&#x679C;&#x662F;&#x8BA9;&#x6700;&#x5927;&#x7684;&#x5143;&#x7D20;&#x6392;&#x81F3;&#x6700;&#x540E;&#x3002;</li>
<li>&#x91CD;&#x590D;&#x4EE5;&#x4E0A;&#x6B65;&#x9AA4;&#xFF0C;&#x76F4;&#x5230;&#x6574;&#x4E2A;&#x6570;&#x7EC4;&#x6709;&#x5E8F;&#x3002;</li>
</ol>
<h4 id="%E5%87%8F%E5%B0%91%E6%AF%94%E8%BE%83%E6%AC%A1%E6%95%B0">&#x51CF;&#x5C11;&#x6BD4;&#x8F83;&#x6B21;&#x6570;</h4>
<p>&#x4E24;&#x6B21;&#x5FAA;&#x73AF;&#xFF0C;&#x4E00;&#x4E2A;&#x904D;&#x5386;length&#x6B21;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x904D;&#x5386;length - i&#x6B21;&#x3002;</p>
<h4 id="%E5%87%8F%E5%B0%91%E5%86%92%E6%B3%A1%E6%AC%A1%E6%95%B0">&#x51CF;&#x5C11;&#x5192;&#x6CE1;&#x6B21;&#x6570;</h4>
<p>&#x4E00;&#x6B21;&#x904D;&#x5386;&#x540E;&#x672A;&#x53D1;&#x751F;&#x4EA4;&#x6362;&#x65F6;&#x8BF4;&#x660E;&#x6570;&#x7EC4;&#x6709;&#x5E8F;&#x3002;</p>
<h4 id="%E8%BF%9B%E4%B8%80%E6%AD%A5%E4%BC%98%E5%8C%96">&#x8FDB;&#x4E00;&#x6B65;&#x4F18;&#x5316;</h4>
<p>&#x6700;&#x540E;&#x4E00;&#x6B21;&#x4EA4;&#x6362;&#x7684;&#x7D22;&#x5F15;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x4E0B;&#x4E00;&#x8F6E;&#x5192;&#x6CE1;&#x7684;&#x6BD4;&#x8F83;&#x6B21;&#x6570;&#x3002;&#x82E5;&#x4E3A;&#x96F6;&#xFF0C;&#x8868;&#x793A;&#x6574;&#x4E2A;&#x6570;&#x7EC4;&#x6709;&#x5E8F;&#x3002;</p>
<pre><code class="language-java">public static void main(String[] args){
    int n = a.length - 1;
        for(;;){
            int last = 0;
            for(int j = 0;j &lt; n;j++){
                if(a[j] &gt; a[j + 1]){
                    swap(a,j,j+1);
                    last = j;
                }
            }
            n = last;
            if(n == 0){
                return;
            }
            System.out.println(Arrays.toString(a));
        }
}

public static void swap(int[] a,int i,int j){
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}
</code></pre>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h3 id="%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F">&#x9009;&#x62E9;&#x6392;&#x5E8F;</h3>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/574b56b7ae9e07f2.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="640" height="195"></figure><!--kg-card-begin: markdown--><h4 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h4>
<ol>
<li>&#x5C06;&#x6570;&#x7EC4;&#x5206;&#x4E3A;&#x4E24;&#x4E2A;&#x5B50;&#x96C6;&#xFF0C;&#x6392;&#x5E8F;&#x7684;&#x548C;&#x672A;&#x6392;&#x5E8F;&#x7684;&#xFF0C;&#x6BCF;&#x4E00;&#x8F6E;&#x4ECE;&#x672A;&#x6392;&#x5E8F;&#x7684;&#x5B50;&#x96C6;&#x4E2D;&#x9009;&#x51FA;&#x6700;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x653E;&#x5165;&#x6392;&#x5E8F;&#x5B50;&#x96C6;</li>
<li>&#x91CD;&#x590D;&#x4EE5;&#x4E0A;&#x6B65;&#x9AA4;&#xFF0C;&#x76F4;&#x5230;&#x6574;&#x4E2A;&#x6570;&#x7EC4;&#x6709;&#x5E8F;</li>
</ol>
<h4 id="%E4%BC%98%E5%8C%96%E6%96%B9%E5%BC%8F">&#x4F18;&#x5316;&#x65B9;&#x5F0F;</h4>
<ol>
<li>&#x4E3A;&#x4E86;&#x51CF;&#x5C11;&#x4EA4;&#x6362;&#x6B21;&#x6570;&#xFF0C;&#x6BCF;&#x4E00;&#x8F6E;&#x53EF;&#x4EE5;&#x5148;&#x627E;&#x6700;&#x5C0F;&#x7684;&#x7D22;&#x5F15;&#xFF0C;&#x5728;&#x6BCF;&#x8F6E;&#x6700;&#x540E;&#x518D;&#x4EA4;&#x6362;&#x5143;&#x7D20;</li>
</ol>
<h4 id="%E4%B8%8E%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F%E7%9B%B8%E6%AF%94">&#x4E0E;&#x5192;&#x6CE1;&#x6392;&#x5E8F;&#x76F8;&#x6BD4;</h4>
<ol>
<li>&#x5E73;&#x5747;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x90FD;&#x662F;O(n^2)</li>
<li>&#x9009;&#x62E9;&#x6392;&#x5E8F;&#x4E00;&#x822C;&#x5FEB;&#x4E8E;&#x5192;&#x6CE1;&#xFF0C;&#x56E0;&#x4E3A;&#x4EA4;&#x6362;&#x6B21;&#x6570;&#x5C11;</li>
<li>&#x4F46;&#x5982;&#x679C;&#x96C6;&#x5408;&#x6709;&#x5E8F;&#x5EA6;&#x9AD8;&#xFF0C;&#x5192;&#x6CE1;&#x4F18;&#x4E8E;&#x9009;&#x62E9;</li>
<li>&#x5192;&#x6CE1;&#x5C5E;&#x4E8E;&#x7A33;&#x5B9A;&#x6392;&#x5E8F;&#x7B97;&#x6CD5;&#xFF0C;&#x800C;&#x9009;&#x62E9;&#x5C5E;&#x4E8E;&#x4E0D;&#x7A33;&#x5B9A;&#x6392;&#x5E8F;</li>
</ol>
<pre><code class="language-java">public static void selection(int[] a){
    for (int i = 0; i &lt; a.length - 1; i++){
        int s = i;
        for (int j = s + 1; j &lt; a.length; j++){
            if(a[s] &gt; a[j]){
                s = j;
            }
        }
        if(s != i){
            swap(a,s,i);
        }
        System.out.println(Arrays.toString(a));
    }
}
</code></pre>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h2 id="%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F">&#x63D2;&#x5165;&#x6392;&#x5E8F;</h2>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/9c5677322ff5bf5e.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="639" height="397"></figure><!--kg-card-begin: markdown--><h4 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h4>
<ol>
<li>&#x5C06;&#x6570;&#x7EC4;&#x5206;&#x4E3A;&#x4E24;&#x4E2A;&#x533A;&#x57DF;&#xFF0C;&#x6392;&#x5E8F;&#x533A;&#x57DF;&#x548C;&#x672A;&#x6392;&#x5E8F;&#x533A;&#x57DF;&#xFF0C;&#x6BCF;&#x4E00;&#x8F6E;&#x4ECE;&#x672A;&#x6392;&#x5E8F;&#x533A;&#x57DF;&#x4E2D;&#x53D6;&#x51FA;&#x7B2C;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x63D2;&#x5165;&#x5230;&#x6392;&#x5E8F;&#x533A;&#x57DF;&#xFF08;&#x9700;&#x4FDD;&#x8BC1;&#x987A;&#x5E8F;&#xFF09;</li>
<li>&#x91CD;&#x590D;&#x4EE5;&#x4E0A;&#x6B65;&#x9AA4;&#xFF0C;&#x76F4;&#x5230;&#x6574;&#x4E2A;&#x6570;&#x7EC4;&#x6709;&#x5E8F;</li>
</ol>
<h4 id="%E4%BC%98%E5%8C%96%E6%96%B9%E5%BC%8F">&#x4F18;&#x5316;&#x65B9;&#x5F0F;</h4>
<ol>
<li>&#x5F85;&#x63D2;&#x5165;&#x5143;&#x7D20;&#x8FDB;&#x884C;&#x6BD4;&#x8F83;&#xFF0C;&#x9047;&#x5230;&#x6BD4;&#x81EA;&#x5DF1;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x5C31;&#x4EE3;&#x8868;&#x627E;&#x5230;&#x4E86;&#x63D2;&#x5165;&#x4F4D;&#x7F6E;&#xFF0C;&#x65E0;&#x9700;&#x8FDB;&#x884C;&#x540E;&#x7EED;&#x6BD4;&#x8F83;</li>
<li>&#x63D2;&#x5165;&#x65F6;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x79FB;&#x52A8;&#x5143;&#x7D20;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x4EA4;&#x6362;&#x5143;&#x7D20;</li>
</ol>
<h4 id="%E4%B8%8E%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F%E6%AF%94%E8%BE%83">&#x4E0E;&#x9009;&#x62E9;&#x6392;&#x5E8F;&#x6BD4;&#x8F83;</h4>
<ol>
<li>&#x4E8C;&#x8005;&#x5E73;&#x5747;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x90FD;&#x662F;O(n^2)</li>
<li>&#x5927;&#x90E8;&#x5206;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x63D2;&#x5165;&#x90FD;&#x7565;&#x4F18;&#x4E8E;&#x9009;&#x62E9;</li>
<li>&#x6709;&#x5E8F;&#x96C6;&#x5408;&#x63D2;&#x5165;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A;O(n)</li>
<li>&#x63D2;&#x5165;&#x5C5E;&#x4E8E;&#x7A33;&#x5B9A;&#x6392;&#x5E8F;&#x7B97;&#x6CD5;&#xFF0C;&#x9009;&#x62E9;&#x5C5E;&#x4E8E;&#x4E0D;&#x7A33;&#x5B9A;&#x6392;&#x5E8F;</li>
</ol>
<pre><code class="language-java">public static void insert(int[] a){
    for(int i = 1; i &lt; a.length; i++){
        int temp = a[i];
        int j = i - 1;
        while(j &gt;= 0){
            if(temp &lt; a[j]){
                a[j + 1] = a[j];
            } else {
                break;
            }
            j--;
        }
        a[j + 1] = temp;
        System.out.println(Arrays.toString(a));
    }
}
</code></pre>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h2 id="%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F">&#x5E0C;&#x5C14;&#x6392;&#x5E8F;</h2>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h2 id="%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F">&#x5FEB;&#x901F;&#x6392;&#x5E8F;</h2>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/caa24033cc2588e6.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="637" height="198"></figure><!--kg-card-begin: markdown--><h4 id="%E5%AE%9E%E7%8E%B0">&#x5B9E;&#x73B0;</h4>
<ol>
<li>&#x6BCF;&#x4E00;&#x8F6E;&#x62CD;&#x5BFB;&#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x57FA;&#x51C6;&#x70B9;(pivot)&#x8FDB;&#x884C;&#x5206;&#x533A;
<ol>
<li>&#x8BA9;&#x5C0F;&#x4E8E;&#x57FA;&#x51C6;&#x70B9;&#x7684;&#x5143;&#x7D20;&#x8FDB;&#x5165;&#x4E00;&#x4E2A;&#x5206;&#x533A;&#xFF0C;&#x5927;&#x4E8E;&#x57FA;&#x51C6;&#x7684;&#x5143;&#x7D20;&#x8FDB;&#x5165;&#x53E6;&#x4E00;&#x4E2A;&#x5206;&#x533A;</li>
<li>&#x5F53;&#x5206;&#x533A;&#x5B8C;&#x6210;&#x65F6;&#xFF0C;&#x57FA;&#x51C6;&#x70B9;&#x5143;&#x7D20;&#x7684;&#x4F4D;&#x7F6E;&#x5C31;&#x7B97;&#x5176;&#x6700;&#x7EC8;&#x4F4D;&#x7F6E;</li>
</ol>
</li>
<li>&#x5728;&#x5B50;&#x5206;&#x533A;&#x91CD;&#x590D;&#x4EE5;&#x4E0A;&#x8FC7;&#x7A0B;&#xFF0C;&#x76F4;&#x81F3;&#x5B50;&#x5206;&#x533A;&#x5143;&#x7D20;&#x4E2A;&#x6570;&#x5C11;&#x4E8E;&#x7B49;&#x4E8E;1&#xFF0C;&#x4F53;&#x73B0;&#x7684;&#x662F;&#x5206;&#x800C;&#x6CBB;&#x4E4B;&#x7684;&#x601D;&#x60F3;(divide-and-conquer)</li>
<li>&#x5355;&#x8FB9;&#x5FAA;&#x73AF;&#x5FEB;&#x6392;&#xFF08;lomuto&#x6D1B;&#x7A46;&#x6258;&#x5206;&#x533A;&#x65B9;&#x6848;&#xFF09;
<ol>
<li>&#x9009;&#x62E9;&#x6700;&#x53F3;&#x5143;&#x7D20;&#x4F5C;&#x4E3A;&#x57FA;&#x51C6;&#x70B9;&#x5143;&#x7D20;</li>
<li>j&#x6307;&#x9488;&#x8D1F;&#x8D23;&#x627E;&#x5230;&#x6BD4;&#x57FA;&#x51C6;&#x70B9;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x4E00;&#x65E6;&#x627E;&#x5230;&#x5219;&#x4E0E;i&#x8FDB;&#x884C;&#x4EA4;&#x6362;</li>
<li>i&#x6307;&#x9488;&#x7EF4;&#x62A4;&#x5C0F;&#x4E8E;&#x57FA;&#x51C6;&#x70B9;&#x5143;&#x7D20;&#x7684;&#x8FB9;&#x754C;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6BCF;&#x6B21;&#x4EA4;&#x6362;&#x7684;&#x76EE;&#x6807;&#x7D22;&#x5F15;</li>
<li>&#x6700;&#x540E;&#x57FA;&#x51C6;&#x70B9;&#x4E0E;i&#x4EA4;&#x6362;&#xFF0C;i&#x5373;&#x4E3A;&#x5206;&#x533A;&#x4F4D;&#x7F6E;</li>
</ol>
</li>
<li>&#x53CC;&#x8FB9;&#x5FAA;&#x73AF;&#x5FEB;&#x6392;&#xFF08;&#x5E76;&#x4E0D;&#x5B8C;&#x5168;&#x7B49;&#x4EF7;&#x4E8E;hoare&#x970D;&#x5C14;&#x5206;&#x533A;&#x65B9;&#x6848;&#xFF09;
<ol>
<li>&#x9009;&#x62E9;&#x6700;&#x5DE6;&#x5143;&#x7D20;&#x4F5C;&#x4E3A;&#x57FA;&#x51C6;&#x70B9;&#x5143;&#x7D20;</li>
<li>j&#x6307;&#x9488;&#x8D1F;&#x8D23;&#x4ECE;&#x53F3;&#x5411;&#x5DE6;&#x627E;&#x6BD4;&#x57FA;&#x51C6;&#x70B9;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#xFF0C;i&#x6307;&#x9488;&#x8D1F;&#x8D23;&#x4ECE;&#x5DE6;&#x5411;&#x53F3;&#x627E;&#x6BD4;&#x57FA;&#x51C6;&#x70B9;&#x5927;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x4E00;&#x65E6;&#x627E;&#x5230;&#x4E8C;&#x8005;&#x4EA4;&#x6362;&#xFF0C;&#x76F4;&#x81F3;i&#xFF0C;j&#x76F8;&#x4EA4;</li>
<li>&#x6700;&#x540E;&#x57FA;&#x51C6;&#x70B9;&#x4E0E;i&#xFF08;&#x6B64;&#x65F6;i&#x4E0E;j&#x76F8;&#x7B49;&#xFF09;&#x4EA4;&#x6362;&#xFF0C;i&#x5373;&#x4E3A;&#x5206;&#x533A;&#x4F4D;&#x7F6E;</li>
</ol>
</li>
</ol>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h2 id="%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F">&#x5F52;&#x5E76;&#x6392;&#x5E8F;</h2>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/16c283a705b592cc.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="639" height="400"></figure><hr><!--kg-card-begin: markdown--><h2 id="%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F">&#x8BA1;&#x6570;&#x6392;&#x5E8F;</h2>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/998fb4bb05bff170.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="640" height="352"></figure><hr><!--kg-card-begin: markdown--><h2 id="%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F">&#x57FA;&#x6570;&#x6392;&#x5E8F;</h2>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/7c51ab2b8f665bfc.gif" class="kg-image" alt="&#x6392;&#x5E8F;&#x7B97;&#x6CD5;" loading="lazy" width="640" height="363"></figure><hr><div class="kg-card kg-button-card kg-align-center"><a href="https://github.com/hustcc/JS-Sorting-Algorithm" class="kg-btn kg-btn-accent">&#x5341;&#x5927;&#x7ECF;&#x5178;&#x6392;&#x5E8F;&#x7B97;&#x6CD5;</a></div>]]></content:encoded></item><item><title><![CDATA[MySQL 学习笔记]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="ddl-%E6%95%B0%E6%8D%AE%E5%AE%9A%E4%B9%89%E8%AF%AD%E8%A8%80">DDL &#x6570;&#x636E;&#x5B9A;&#x4E49;&#x8BED;&#x8A00;</h2>
<p>&#x7528;&#x6765;&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x5E93;&#x5BF9;&#x8C61;&#xFF08;&#x6570;&#x636E;&#x5E93;&#x3001;&#x8868;&#x3001;&#x5B57;&#x6BB5;&#xFF09;</p>
<h3 id="%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C">&#x6570;&#x636E;&#x5E93;&#x64CD;&#x4F5C;</h3>
<pre><code class="language-sql"># &#x67E5;&#x8BE2;&#x6240;&#x6709;&#x6570;&#x636E;&#x5E93;
SHOW DATABASES;
# &#x67E5;&#x8BE2;&#x5F53;&#x524D;&#x6570;&#x636E;&#x5E93;
SELECT DATABASE();
#&#x521B;</code></pre>]]></description><link>https://www.tangkun.site/mysql-xue-xi-bi-ji/</link><guid isPermaLink="false">63f8af0e4344994407565708</guid><category><![CDATA[Technology]]></category><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Sun, 26 Feb 2023 09:33:11 GMT</pubDate><media:content url="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/c66c5626e06d76d7.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="ddl-%E6%95%B0%E6%8D%AE%E5%AE%9A%E4%B9%89%E8%AF%AD%E8%A8%80">DDL &#x6570;&#x636E;&#x5B9A;&#x4E49;&#x8BED;&#x8A00;</h2>
<img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/c66c5626e06d76d7.jpg" alt="MySQL &#x5B66;&#x4E60;&#x7B14;&#x8BB0;"><p>&#x7528;&#x6765;&#x5B9A;&#x4E49;&#x6570;&#x636E;&#x5E93;&#x5BF9;&#x8C61;&#xFF08;&#x6570;&#x636E;&#x5E93;&#x3001;&#x8868;&#x3001;&#x5B57;&#x6BB5;&#xFF09;</p>
<h3 id="%E6%95%B0%E6%8D%AE%E5%BA%93%E6%93%8D%E4%BD%9C">&#x6570;&#x636E;&#x5E93;&#x64CD;&#x4F5C;</h3>
<pre><code class="language-sql"># &#x67E5;&#x8BE2;&#x6240;&#x6709;&#x6570;&#x636E;&#x5E93;
SHOW DATABASES;
# &#x67E5;&#x8BE2;&#x5F53;&#x524D;&#x6570;&#x636E;&#x5E93;
SELECT DATABASE();
#&#x521B;&#x5EFA;
CREATE DATABASE [IF NOT EXISTS] &#x6570;&#x636E;&#x5E93;&#x540D; [DEFAULT CHARSET &#x5B57;&#x7B26;&#x96C6;] [COLLATE &#x6392;&#x5E8F;&#x89C4;&#x5219;];
# &#x5220;&#x9664;
DROP DATABASE [IF EXISTS] &#x6570;&#x636E;&#x5E93;&#x540D;;
# &#x4F7F;&#x7528;
USE &#x6570;&#x636E;&#x5E93;&#x540D;;
</code></pre>
<h3 id="%E8%A1%A8%E6%93%8D%E4%BD%9C">&#x8868;&#x64CD;&#x4F5C;</h3>
<pre><code class="language-sql"># &#x67E5;&#x8BE2;
# &#x67E5;&#x8BE2;&#x5F53;&#x524D;&#x6570;&#x636E;&#x5E93;&#x6240;&#x6709;&#x8868;
SHOW TABLES;
# &#x67E5;&#x8BE2;&#x8868;&#x7ED3;&#x6784;
DESC &#x8868;&#x540D;;
# &#x67E5;&#x8BE2;&#x6307;&#x5B9A;&#x8868;&#x7684;&#x5EFA;&#x8868;&#x8BED;&#x53E5;
SHOW CREATE TABLE &#x8868;&#x540D;;

# &#x521B;&#x5EFA;
CREATE TABLE &#x8868;&#x540D;(
    &#x5B57;&#x6BB5;1 &#x5B57;&#x6BB5;1&#x7C7B;&#x578B;[COMMENT &apos;&#x5B57;&#x6BB5;1&#x6CE8;&#x91CA;&apos;],
    &#x5B57;&#x6BB5;2 &#x5B57;&#x6BB5;2&#x7C7B;&#x578B;[COMMENT &apos;&#x5B57;&#x6BB5;2&#x6CE8;&#x91CA;&apos;],
    ...
    &#x5B57;&#x6BB5;3 &#x5B57;&#x6BB5;3&#x7C7B;&#x578B;[COMMENT &apos;&#x5B57;&#x6BB5;3&#x6CE8;&#x91CA;&apos;],
)[COMMENT &apos;&#x8868;&#x6CE8;&#x91CA;&apos;]

# &#x4FEE;&#x6539;
# &#x6DFB;&#x52A0;&#x5B57;&#x6BB5;
ALTER TABLE &#x8868;&#x540D; ADD &#x5B57;&#x6BB5;&#x540D; &#x7C7B;&#x578B;&#xFF08;&#x957F;&#x5EA6;&#xFF09; [COMMENT &apos;&#x6CE8;&#x91CA;&apos;] [&#x7EA6;&#x675F;];
# &#x4FEE;&#x6539;&#x6570;&#x636E;&#x7C7B;&#x578B;
ALTER TABLE &#x8868;&#x540D; MODIFY &#x5B57;&#x6BB5;&#x540D; &#x65B0;&#x6570;&#x636E;&#x7C7B;&#x578B;&#xFF08;&#x957F;&#x5EA6;&#xFF09;;
# &#x4FEE;&#x6539;&#x5B57;&#x6BB5;&#x540D;&#x548C;&#x5B57;&#x6BB5;&#x7C7B;&#x578B;
ALTER TABLE &#x8868;&#x540D; CHANGE &#x65E7;&#x5B57;&#x6BB5;&#x540D; &#x65B0;&#x5B57;&#x6BB5;&#x540D; &#x7C7B;&#x578B;&#xFF08;&#x957F;&#x5EA6;&#xFF09; [COMMENT &apos;&#x6CE8;&#x91CA;&apos;] [&#x7EA6;&#x675F;];
# &#x5220;&#x9664;
ALTER TABLE &#x8868;&#x540D; DROP &#x5B57;&#x6BB5;&#x540D;;
# &#x4FEE;&#x6539;&#x8868;&#x540D;
ALTER TABLE &#x8868;&#x540D; RENAME TO &#x65B0;&#x8868;&#x540D;;

# &#x5220;&#x9664;
# &#x5220;&#x9664;&#x8868;
DROP TABLE [IF EXISTS] &#x8868;&#x540D;;
# &#x5220;&#x9664;&#x6307;&#x5B9A;&#x8868;&#xFF0C;&#x5E76;&#x91CD;&#x65B0;&#x521B;&#x5EFA;&#x8BE5;&#x8868;
TRUNCATE TABLE &#x8868;&#x540D;;
</code></pre>
<p>&#x6570;&#x636E;&#x5E93;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x4E3B;&#x8981;&#x5206;&#x4E3A;&#x4E09;&#x79CD;&#xFF0C;&#x6570;&#x503C;&#x3001;&#x5B57;&#x7B26;&#x4E32;&#x3001;&#x65E5;&#x671F;&#x65F6;&#x95F4;</p>
<h2 id="dml-%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C%E8%AF%AD%E8%A8%80">DML &#x6570;&#x636E;&#x64CD;&#x4F5C;&#x8BED;&#x8A00;</h2>
<p>&#x7528;&#x6765;&#x5BF9;&#x6570;&#x636E;&#x5E93;&#x8868;&#x4E2D;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x589E;&#x5220;&#x6539;</p>
<pre><code class="language-sql"># &#x6DFB;&#x52A0;&#x6570;&#x636E;
# 1&#x3001;&#x7ED9;&#x6307;&#x5B9A;&#x5B57;&#x6BB5;&#x6DFB;&#x52A0;&#x6570;&#x636E;
INSERT INTO &#x8868;&#x540D;(&#x5B57;&#x6BB5;&#x540D;1,&#x5B57;&#x6BB5;&#x540D;2,...) VALUES (&#x503C;1,&#x503C;2,...);
# 2&#x3001;&#x7ED9;&#x5168;&#x90E8;&#x5B57;&#x6BB5;&#x6DFB;&#x52A0;&#x6570;&#x636E;
INSERT INTO &#x8868;&#x540D; VALUES(&#x503C;1,&#x503C;2,...);
# 3&#x3001;&#x6279;&#x91CF;&#x6DFB;&#x52A0;&#x6570;&#x636E;
INSERT INTO &#x8868;&#x540D;(&#x5B57;&#x6BB5;&#x540D;1,&#x5B57;&#x6BB5;&#x540D;2,...) VALUES(&#x503C;1,...)(&#x503C;1,...)(&#x503C;1,...);
INSERT INTO &#x8868;&#x540D; VALUES (...)(...)(...);

# &#x4FEE;&#x6539;&#x6570;&#x636E;
UPDATE &#x8868;&#x540D; SET &#x5B57;&#x6BB5;&#x540D;1=&#x503C;1,&#x5B57;&#x6BB5;&#x540D;2=&#x503C;2,...[WHERE &#x6761;&#x4EF6;];

# &#x5220;&#x9664;&#x6570;&#x636E;
DELETE FROM &#x8868;&#x540D; [WHERE &#x6761;&#x4EF6;];
</code></pre>
<h2 id="dql-%E6%95%B0%E6%8D%AE%E6%9F%A5%E8%AF%A2%E8%AF%AD%E8%A8%80">DQL &#x6570;&#x636E;&#x67E5;&#x8BE2;&#x8BED;&#x8A00;</h2>
<p>&#x7528;&#x6765;&#x67E5;&#x8BE2;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x8868;&#x7684;&#x8BB0;&#x5F55;</p>
<pre><code class="language-sql"># &#x8BED;&#x6CD5;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;&#x540D;&#x5217;&#x8868; WHERE &#x6761;&#x4EF6;&#x5217;&#x8868; GROUP BY &#x5206;&#x7EC4;&#x5B57;&#x6BB5;&#x5217;&#x8868; HAVING &#x5206;&#x7EC4;&#x540E;&#x6761;&#x4EF6;&#x5217;&#x8868; ORDER BY &#x6392;&#x5E8F;&#x5B57;&#x6BB5;&#x5217;&#x8868; LIMIT &#x5206;&#x9875;&#x53C2;&#x6570;;
# &#x57FA;&#x672C;&#x67E5;&#x8BE2;
# 1&#x3001;&#x67E5;&#x8BE2;&#x591A;&#x4E2A;&#x5B57;&#x6BB5;
SELECT &#x5B57;&#x6BB5;1,&#x5B57;&#x6BB5;2,... FROM &#x8868;&#x540D;;
SELECT * FROM &#x8868;&#x540D;;
# 2&#x3001;&#x8BBE;&#x7F6E;&#x522B;&#x540D;
SELECT &#x5B57;&#x6BB5;1 [AS &#x522B;&#x540D;1],... FROM &#x8868;&#x540D;;
# 3&#x3001;&#x53BB;&#x9664;&#x91CD;&#x590D;&#x8BB0;&#x5F55;
SELECT DISTINCT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;&#x540D;;

# &#x6761;&#x4EF6;&#x67E5;&#x8BE2;
# &#x8303;&#x56F4;&#x4E4B;&#x5185;BETWEEN...AND... &#x5217;&#x8868;&#x4E2D;&#x7684;&#x503C;IN(...) &#x5360;&#x4F4D;&#x7B26;&#xFF0C;&#x6A21;&#x7CCA;&#x5339;&#x914D;LIKE &#x5224;&#x65AD;&#x7A7A;IS NULL &#x5E76;&#x4E14;AND &amp;&amp; &#x6216;&#x8005;OR || &#x975E;NOT !

# &#x805A;&#x5408;&#x51FD;&#x6570;
# &#x7EDF;&#x8BA1;COUNT &#x6700;&#x5927;MAX &#x6700;&#x5C0F;MIN &#x5E73;&#x5747;AVG &#x6C42;&#x548C;SUM

# &#x5206;&#x7EC4;&#x67E5;&#x8BE2;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;&#x540D; [WHERE &#x6761;&#x4EF6;] GROUP BY &#x5206;&#x7EC4;&#x5B57;&#x6BB5;&#x540D; [HAVING &#x5206;&#x7EC4;&#x540E;&#x8FC7;&#x6EE4;&#x6761;&#x4EF6;];

# &#x6392;&#x5E8F;&#x67E5;&#x8BE2;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;&#x540D; ORDER BY [&#x5B57;&#x6BB5;1,&#x6392;&#x5E8F;&#x65B9;&#x5F0F;1,...];

# &#x5206;&#x9875;&#x67E5;&#x8BE2;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;&#x540D; LIMIT &#x8D77;&#x59CB;&#x7D22;&#x5F15;&#xFF0C;&#x67E5;&#x8BE2;&#x8BB0;&#x5F55;&#x6570;;

# &#x6267;&#x884C;&#x987A;&#x5E8F;
FROM -&gt; WHERE -&gt; GROUP BY -&gt; HAVING -&gt; SELECT -&gt; ORDER BY -&gt; LIMIT
</code></pre>
<h2 id="dcl-%E6%95%B0%E6%8D%AE%E6%8E%A7%E5%88%B6%E8%AF%AD%E8%A8%80">DCL &#x6570;&#x636E;&#x63A7;&#x5236;&#x8BED;&#x8A00;</h2>
<p>&#x7528;&#x6765;&#x521B;&#x5EFA;&#x6570;&#x636E;&#x5E93;&#x7528;&#x6237;&#xFF0C;&#x63A7;&#x5236;&#x6570;&#x636E;&#x5E93;&#x7684;&#x8BBF;&#x95EE;&#x6743;&#x9650;</p>
<pre><code class="language-sql"># &#x7BA1;&#x7406;&#x7528;&#x6237;
# 1&#x3001;&#x67E5;&#x8BE2;&#x7528;&#x6237;
USE mysql;
SELECT * FROM user;
# 2&#x3001;&#x521B;&#x5EFA;&#x7528;&#x6237;
CREATE USER &apos;&#x7528;&#x6237;&#x540D;&apos;@&apos;&#x4E3B;&#x673A;&#x540D;&apos; IDENTIFIED BY &apos;&#x5BC6;&#x7801;&apos;;
# 3&#x3001;&#x4FEE;&#x6539;&#x7528;&#x6237;&#x5BC6;&#x7801;
ALTER USER &apos;&#x7528;&#x6237;&#x540D;&apos;@&apos;&#x4E3B;&#x673A;&#x540D;&apos; IDENTIFIED WITH mysql_native_password BY &apos;&#x65B0;&#x5BC6;&#x7801;&apos;;
# 4&#x3001;&#x5220;&#x9664;&#x7528;&#x6237;
DROP USER &apos;&#x7528;&#x6237;&#x540D;&apos;@&apos;&#x4E3B;&#x673A;&#x540D;&apos;;

# &#x6743;&#x9650;&#x63A7;&#x5236;
# 1&#x3001;&#x67E5;&#x8BE2;&#x6743;&#x9650;
SHOW GRANTS FOR &apos;&#x7528;&#x6237;&#x540D;&apos;@&apos;&#x4E3B;&#x673A;&#x540D;&apos;;
# 2&#x3001;&#x6388;&#x4E88;&#x6743;&#x9650;
GRANT &#x6743;&#x9650;&#x5217;&#x8868; ON &#x6570;&#x636E;&#x5E93;&#x540D;.&#x8868;&#x540D; TO &apos;&#x7528;&#x6237;&#x540D;&apos;@&apos;&#x4E3B;&#x673A;&#x540D;&apos;;
# 3&#x3001;&#x64A4;&#x9500;&#x6743;&#x9650;
REVOKE &#x6743;&#x9650;&#x5217;&#x8868; ON &#x6570;&#x636E;&#x5E93;&#x540D;.&#x8868;&#x540D; FROM &apos;&#x7528;&#x6237;&#x540D;&apos;@&apos;&#x4E3B;&#x673A;&#x540D;&apos;;
</code></pre>
<h2 id="%E5%87%BD%E6%95%B0">&#x51FD;&#x6570;</h2>
<h3 id="%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%87%BD%E6%95%B0">&#x5B57;&#x7B26;&#x4E32;&#x51FD;&#x6570;</h3>
<pre><code class="language-sql">CONCAT(s1,s2,...sn)
LOWER(str)
UPPER(str)
LPAD(str,n,pad)
RPAD(str,n,pad)
TRIM(str)
SUBSTRING(str,start,len)
</code></pre>
<h3 id="%E6%95%B0%E5%80%BC%E5%87%BD%E6%95%B0">&#x6570;&#x503C;&#x51FD;&#x6570;</h3>
<pre><code class="language-sql">CEIL(X)
FLOOR(X)
MOD(X)
RAND(X)
ROUND(X)
</code></pre>
<h3 id="%E6%97%A5%E6%9C%9F%E5%87%BD%E6%95%B0">&#x65E5;&#x671F;&#x51FD;&#x6570;</h3>
<pre><code class="language-sql">CURDATE()
CURTIME()
NOW()
YEAR(date)
MONTH(date)
DAY(dat)
DATE_ADD(date,interval expr type)
DATEDIFF(date1,date2)
</code></pre>
<h3 id="%E6%B5%81%E7%A8%8B%E5%87%BD%E6%95%B0">&#x6D41;&#x7A0B;&#x51FD;&#x6570;</h3>
<pre><code class="language-sql">IF(value,t,f)
IFNULL(value1,value2)
CASE WHEN [val1] THEN [res1] ... ELSE [default] END
CASE [expr] WHEN [val1] THEN[res1] ...ELSE [default] END
</code></pre>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h2 id="%E7%BA%A6%E6%9D%9F">&#x7EA6;&#x675F;</h2>
<p>&#x7EA6;&#x675F;&#x662F;&#x4F5C;&#x7528;&#x4E8E;&#x8868;&#x4E2D;&#x5B57;&#x6BB5;&#x4E0A;&#x7684;&#x89C4;&#x5219;&#xFF0C;&#x7528;&#x4E8E;&#x9650;&#x5236;&#x5B58;&#x50A8;&#x5728;&#x8868;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x3002;</p>
<h3 id="%E9%9D%9E%E7%A9%BA%E7%BA%A6%E6%9D%9F-not-null">&#x975E;&#x7A7A;&#x7EA6;&#x675F; NOT NULL</h3>
<h3 id="%E5%94%AF%E4%B8%80%E7%BA%A6%E6%9D%9F-unique">&#x552F;&#x4E00;&#x7EA6;&#x675F; UNIQUE</h3>
<h3 id="%E4%B8%BB%E9%94%AE%E7%BA%A6%E6%9D%9F-primary-key%E8%87%AA%E5%A2%9E%EF%BC%9Aautoincrement">&#x4E3B;&#x952E;&#x7EA6;&#x675F; PRIMARY KEY/(&#x81EA;&#x589E;&#xFF1A;AUTO_INCREMENT)</h3>
<h3 id="%E9%BB%98%E8%AE%A4%E7%BA%A6%E6%9D%9F-default">&#x9ED8;&#x8BA4;&#x7EA6;&#x675F; DEFAULT</h3>
<h3 id="%E6%A3%80%E6%9F%A5%E7%BA%A6%E6%9D%9F-check">&#x68C0;&#x67E5;&#x7EA6;&#x675F; CHECK</h3>
<h3 id="%E5%A4%96%E9%94%AE%E7%BA%A6%E6%9D%9F-foreign-key">&#x5916;&#x952E;&#x7EA6;&#x675F; FOREIGN KEY</h3>
<p>&#x5916;&#x952E;&#x7528;&#x6765;&#x8BA9;&#x4E24;&#x5F20;&#x8868;&#x7684;&#x6570;&#x636E;&#x4E4B;&#x95F4;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#xFF0C;&#x4ECE;&#x800C;&#x4FDD;&#x8BC1;&#x6570;&#x636E;&#x7684;&#x4E00;&#x81F4;&#x6027;&#x548C;&#x5B8C;&#x6574;&#x6027;&#x3002;</p>
<pre><code class="language-sql"># &#x6DFB;&#x52A0;&#x5916;&#x952E;
CREATE TABLE(
    &#x5B57;&#x6BB5;&#x540D; &#x6570;&#x636E;&#x7C7B;&#x578B;
    ...
    [CONSTRAINT] [&#x5916;&#x952E;&#x540D;&#x79F0;] FOREIGN KEY (&#x5916;&#x952E;&#x5B57;&#x6BB5;&#x540D;) REFERENCES &#x4E3B;&#x8868;(&#x4E3B;&#x8868;&#x7C7B;&#x540D;)
);
ALTER TABLE &#x8868;&#x540D; ADD CONSTRAINT &#x5916;&#x952E;&#x540D;&#x79F0; FOREIGN KEY (&#x5916;&#x952E;&#x5B57;&#x6BB5;&#x540D;) REFERENCES &#x4E3B;&#x8868;(&#x4E3B;&#x8868;&#x5217;&#x540D;);

# &#x5220;&#x9664;&#x5916;&#x952E;
ALTER TABLE &#x8868;&#x540D; DROP FOREIGN KEY &#x5916;&#x952E;&#x540D;&#x79F0;;

#&#x5220;&#x9664;/&#x66F4;&#x65B0;&#x884C;&#x4E3A;
# NO ACTION/RESTRICT &#x6709;&#x5BF9;&#x5E94;&#x5916;&#x952E;&#x65F6;&#x4E0D;&#x5141;&#x8BB8;
# CASCADE &#x6709;&#x5916;&#x952E;&#x5219;&#x5220;&#x9664;/&#x66F4;&#x65B0;&#x5B50;&#x8868;&#x4E2D;&#x8BB0;&#x5F55;
# SET NULL &#x8BBE;&#x7F6E;&#x4E3A;NULL
# SET DEFAULT &#x8BBE;&#x7F6E;&#x4E3A;&#x9ED8;&#x8BA4;&#x503C;
ALTER TABLE &#x8868;&#x540D; ADD CONSTRAINT &#x5916;&#x952E;&#x540D;&#x79F0; FOREIGN KEY (&#x5916;&#x952E;&#x5B57;&#x6BB5;) REFERENCES &#x4E3B;&#x8868;&#x540D;(&#x4E3B;&#x8868;&#x5B57;&#x6BB5;&#x540D;) ON UPDATE CASCADE ON DELETE CASCADE;
</code></pre>
<h2 id="%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2">&#x591A;&#x8868;&#x67E5;&#x8BE2;</h2>
<p>&#x4E00;&#x5BF9;&#x591A; &#x5728;&#x591A;&#x7684;&#x8868;&#x4E2D;&#x5EFA;&#x7ACB;&#x5916;&#x952E;&#x6307;&#x5411;&quot;&#x4E00;&quot;&#x7684;&#x4E3B;&#x952E;&#x3002;</p>
<p>&#x591A;&#x5BF9;&#x591A; &#x5EFA;&#x7ACB;&#x7B2C;&#x4E09;&#x5F20;&#x4E2D;&#x95F4;&#x8868;&#xFF0C;&#x4E2D;&#x95F4;&#x8868;&#x81F3;&#x5C11;&#x5305;&#x542B;&#x4E24;&#x4E2A;&#x5916;&#x952E;&#xFF0C;&#x5206;&#x522B;&#x5173;&#x8054;&#x4E24;&#x65B9;&#x4E3B;&#x952E;&#x3002;</p>
<p>&#x4E00;&#x5BF9;&#x4E00; &#x591A;&#x7528;&#x4E8E;&#x5355;&#x8868;&#x62C6;&#x5206;&#xFF0C;&#x5C06;&#x4E00;&#x5F20;&#x8868;&#x7684;&#x57FA;&#x7840;&#x5B57;&#x6BB5;&#x653E;&#x5728;&#x4E00;&#x5F20;&#x8868;&#x4E2D;&#xFF0C;&#x5176;&#x4ED6;&#x8BE6;&#x60C5;&#x5B57;&#x6BB5;&#x653E;&#x5728;&#x53E6;&#x4E00;&#x5F20;&#x8868;&#x4E2D;&#x3002;&#x5728;&#x4EFB;&#x610F;&#x4E00;&#x65B9;&#x52A0;&#x5165;&#x5916;&#x952E;&#xFF0C;&#x5173;&#x8054;&#x53E6;&#x4E00;&#x65B9;&#x7684;&#x4E3B;&#x952E;&#xFF0C;&#x5E76;&#x4E14;&#x8BBE;&#x7F6E;&#x5916;&#x952E;&#x4E3A;&#x552F;&#x4E00;&#xFF08;UNIQUE)&#x3002;</p>
<pre><code class="language-sql">SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;&#x540D; WHERE &#x8868;&#x540D;.&#x4E3B;&#x952E; = &#x8868;&#x540D;.&#x5916;&#x952E;
# &#x8FDE;&#x63A5;&#x67E5;&#x8BE2;&#xFF1A;&#x5185;&#x8FDE;&#x63A5;&#xFF08;&#x4EA4;&#x96C6;&#xFF09;&#x3001;&#x5916;&#x8FDE;&#x63A5;&#xFF08;&#x5DE6;&#x5916;&#x8FDE;&#x63A5;&#x3001;&#x53F3;&#x5916;&#x8FDE;&#x63A5;&#xFF09;&#x3001;&#x81EA;&#x8FDE;&#x63A5;
# &#x9690;&#x5F0F;&#x5185;&#x8FDE;&#x63A5;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;1,&#x8868;2 WHERE &#x6761;&#x4EF6;...;
# &#x663E;&#x5F0F;&#x5185;&#x8FDE;&#x63A5;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;1 [INNER] JOIN &#x8868;2 ON &#x8FDE;&#x63A5;&#x6761;&#x4EF6;;

# &#x5DE6;&#x5916;&#x8FDE;&#x63A5;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;1 LEFT [OUTER] JOIN &#x8868;2 ON &#x6761;&#x4EF6;...;
# &#x53F3;&#x5916;&#x8FDE;&#x63A5;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;1 RIGHT [OUTER] JOIN &#x8868;2 ON &#x6761;&#x4EF6;...;

# &#x81EA;&#x8FDE;&#x63A5;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;A &#x522B;&#x540D;A JOIN &#x8868;A &#x522B;&#x540D;B ON &#x6761;&#x4EF6;;

# &#x8054;&#x5408;&#x67E5;&#x8BE2;-union,union all
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;A...
UNION [ALL]
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;B...;
-- &#x8054;&#x5408;&#x67E5;&#x8BE2;&#x7684;&#x591A;&#x8868;&#x5217;&#x6570;&#x9700;&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#xFF0C;&#x5B57;&#x6BB5;&#x7C7B;&#x578B;&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#x3002;union all&#x4F1A;&#x5C06;&#x5168;&#x90E8;&#x6570;&#x636E;&#x76F4;&#x63A5;&#x5408;&#x5E76;&#xFF0C;union&#x4F1A;&#x5728;&#x5408;&#x5E76;&#x540E;&#x53BB;&#x91CD;&#x3002;

# &#x5B50;&#x67E5;&#x8BE2;&#xFF08;&#x5D4C;&#x5957;&#x67E5;&#x8BE2;&#xFF09;
# &#x6807;&#x91CF;&#x5B50;&#x67E5;&#x8BE2;&#x3001;&#x5217;&#x5B50;&#x67E5;&#x8BE2;&#x3001;&#x884C;&#x5B50;&#x67E5;&#x8BE2;&#x3001;&#x8868;&#x5B50;&#x67E5;&#x8BE2;
SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;1 WHERE &#x5B57;&#x6BB5; = (SELECT &#x5B57;&#x6BB5;&#x5217;&#x8868; FROM &#x8868;2);
</code></pre>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h2 id="%E4%BA%8B%E5%8A%A1">&#x4E8B;&#x52A1;</h2>
<p>&#x662F;&#x4E00;&#x7EC4;&#x64CD;&#x4F5C;&#x7684;&#x96C6;&#x5408;&#xFF0C;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x4E0D;&#x53EF;&#x5206;&#x5272;&#x7684;&#x5DE5;&#x4F5C;&#x5355;&#x4F4D;&#xFF0C;&#x4E8B;&#x52A1;&#x4F1A;&#x628A;&#x6240;&#x6709;&#x7684;&#x64CD;&#x4F5C;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x6574;&#x4F53;&#x5411;&#x7CFB;&#x7EDF;&#x63D0;&#x4EA4;&#x6216;&#x64A4;&#x9500;&#x64CD;&#x4F5C;&#x8BF7;&#x6C42;&#xFF0C;&#x5373;&#x8FD9;&#x4E9B;&#x64CD;&#x4F5C;&#x8981;&#x4E48;&#x540C;&#x65F6;&#x6210;&#x529F;&#xFF0C;&#x8981;&#x4E48;&#x540C;&#x65F6;&#x5931;&#x8D25;&#x3002;</p>
<pre><code class="language-sql"># &#x5F00;&#x542F;&#x4E8B;&#x52A1;
START TRANSACTION / BEGIN;
# &#x63D0;&#x4EA4;&#x4E8B;&#x52A1;
COMMIT;
# &#x56DE;&#x6EDA;&#x4E8B;&#x52A1;
ROLLBACK;
</code></pre>
<p>&#x4E8B;&#x52A1;&#x56DB;&#x5927;&#x7279;&#x6027;ACID</p>
<p><strong>&#x539F;&#x5B50;&#x6027;</strong>&#xFF1A;&#x4E8B;&#x52A1;&#x662F;&#x4E0D;&#x53EF;&#x5206;&#x5272;&#x7684;&#x6700;&#x5C0F;&#x64CD;&#x4F5C;&#x5355;&#x5143;&#x3002;</p>
<p><strong>&#x4E00;&#x81F4;&#x6027;</strong>&#xFF1A;&#x4E8B;&#x52A1;&#x5B8C;&#x6210;&#x65F6;&#xFF0C;&#x5FC5;&#x987B;&#x4F7F;&#x6240;&#x6709;&#x6570;&#x636E;&#x90FD;&#x4FDD;&#x6301;&#x4E00;&#x81F4;&#x3002;</p>
<p><strong>&#x9694;&#x79BB;&#x6027;</strong>&#xFF1A;&#x4FDD;&#x8BC1;&#x4E8B;&#x52A1;&#x5728;&#x4E0D;&#x53D7;&#x5916;&#x90E8;&#x5E76;&#x53D1;&#x64CD;&#x4F5C;&#x5F71;&#x54CD;&#x7684;&#x72EC;&#x7ACB;&#x73AF;&#x5883;&#x8FD0;&#x884C;&#x3002;</p>
<p><strong>&#x6301;&#x4E45;&#x6027;</strong>&#xFF1A;&#x4E8B;&#x52A1;&#x4E00;&#x65E6;&#x63D0;&#x4EA4;&#x6216;&#x56DE;&#x6EDA;&#xFF0C;&#x5B83;&#x5BF9;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x7684;&#x6539;&#x53D8;&#x662F;&#x6C38;&#x4E45;&#x7684;&#x3002;</p>
<pre><code class="language-sql"># &#x67E5;&#x770B;&#x4E8B;&#x52A1;&#x9694;&#x79BB;&#x7EA7;&#x522B;
SELECT @@TRANSACTION_ISOLATION;
#  &#x8BBE;&#x7F6E;&#x4E8B;&#x52A1;&#x9694;&#x79BB;&#x7EA7;&#x522B;
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE}
</code></pre>
<table>
<thead>
<tr>
<th style="text-align:left">&#x95EE;&#x9898;</th>
<th style="text-align:left">&#x63CF;&#x8FF0;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">&#x810F;&#x8BFB;</td>
<td style="text-align:left">&#x4E00;&#x4E2A;&#x4E8B;&#x52A1;&#x8BFB;&#x5230;&#x53E6;&#x4E00;&#x4E2A;&#x4E8B;&#x52A1;&#x8FD8;&#x6CA1;&#x6709;&#x63D0;&#x4EA4;&#x7684;&#x6570;&#x636E;&#x3002;</td>
</tr>
<tr>
<td style="text-align:left">&#x4E0D;&#x53EF;&#x91CD;&#x590D;&#x8BFB;</td>
<td style="text-align:left">&#x4E00;&#x4E2A;&#x4E8B;&#x52A1;&#x5148;&#x540E;&#x8BFB;&#x53D6;&#x540C;&#x4E00;&#x6761;&#x8BB0;&#x5F55;&#xFF0C;&#x4F46;&#x662F;&#x4E24;&#x6B21;&#x8BFB;&#x53D6;&#x7684;&#x6570;&#x636E;&#x4E0D;&#x540C;&#x3002;</td>
</tr>
<tr>
<td style="text-align:left">&#x5E7B;&#x8BFB;</td>
<td style="text-align:left">&#x4E00;&#x4E2A;&#x4E8B;&#x52A1;&#x6309;&#x7167;&#x6761;&#x4EF6;&#x67E5;&#x8BE2;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x6CA1;&#x6709;&#x5BF9;&#x5E94;&#x6570;&#x636E;&#x884C;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x63D2;&#x5165;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x53C8;&#x53D1;&#x73B0;&#x8FD9;&#x884C;&#x6570;&#x636E;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x3002;</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>&#x9694;&#x79BB;&#x7EA7;&#x522B;</th>
<th style="text-align:center">&#x810F;&#x8BFB;</th>
<th style="text-align:center">&#x4E0D;&#x53EF;&#x91CD;&#x590D;&#x8BFB;</th>
<th style="text-align:center">&#x5E7B;&#x8BFB;</th>
</tr>
</thead>
<tbody>
<tr>
<td>Read Uncommitted</td>
<td style="text-align:center">&#x221A;</td>
<td style="text-align:center">&#x221A;</td>
<td style="text-align:center">&#x221A;</td>
</tr>
<tr>
<td>Read Committed</td>
<td style="text-align:center">&#xD7;</td>
<td style="text-align:center">&#x221A;</td>
<td style="text-align:center">&#x221A;</td>
</tr>
<tr>
<td>Repeatable Read(&#x9ED8;&#x8BA4;)</td>
<td style="text-align:center">&#xD7;</td>
<td style="text-align:center">&#xD7;</td>
<td style="text-align:center">&#x221A;</td>
</tr>
<tr>
<td>Sreializable</td>
<td style="text-align:center">&#xD7;</td>
<td style="text-align:center">&#xD7;</td>
<td style="text-align:center">&#xD7;</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="mysql%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84">MySQL&#x4F53;&#x7CFB;&#x7ED3;&#x6784;</h2>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/02/088dee2947f7b35f.png" alt="MySQL &#x5B66;&#x4E60;&#x7B14;&#x8BB0;" loading="lazy"><br>
<strong>&#x8FDE;&#x63A5;&#x5C42;</strong> &#x6700;&#x4E0A;&#x5C42;&#x662F;&#x4E00;&#x4E9B;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x94FE;&#x63A5;&#x670D;&#x52A1;&#xFF0C;&#x4E3B;&#x8981;&#x5B8C;&#x6210;&#x4E00;&#x4E9B;&#x7C7B;&#x4F3C;&#x4E8E;&#x8FDE;&#x63A5;&#x5904;&#x7406;&#x3001;&#x6388;&#x6743;&#x8BA4;&#x8BC1;&#x53CA;&#x76F8;&#x5173;&#x7684;&#x5B89;&#x5168;&#x65B9;&#x6848;&#x3002;&#x670D;&#x52A1;&#x5668;&#x4E5F;&#x4F1A;&#x4E3A;&#x5B89;&#x5168;&#x63A5;&#x5165;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x9A8C;&#x8BC1;&#x5B83;&#x6240;&#x5177;&#x6709;&#x7684;&#x64CD;&#x4F5C;&#x6743;&#x9650;&#x3002;</p>
<p><strong>&#x670D;&#x52A1;&#x5C42;</strong> &#x7B2C;&#x4E8C;&#x5C42;&#x67B6;&#x6784;&#x4E3B;&#x8981;&#x5B8C;&#x6210;&#x5927;&#x591A;&#x6570;&#x7684;&#x6838;&#x5FC3;&#x670D;&#x52A1;&#x529F;&#x80FD;&#xFF0C;&#x5982;SQL&#x63A5;&#x53E3;&#xFF0C;&#x5E76;&#x5B8C;&#x6210;&#x7F13;&#x5B58;&#x7684;&#x67E5;&#x8BE2;&#xFF0C;SQL&#x7684;&#x5206;&#x6790;&#x548C;&#x4F18;&#x5316;&#xFF0C;&#x90E8;&#x5206;&#x5185;&#x7F6E;&#x51FD;&#x6570;&#x7684;&#x6267;&#x884C;&#x3002;&#x6240;&#x6709;&#x8DE8;&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x7684;&#x529F;&#x80FD;&#x4E5F;&#x5728;&#x8FD9;&#x4E00;&#x5C42;&#x5B9E;&#x73B0;&#x3002;</p>
<p><strong>&#x5F15;&#x64CE;&#x5C42;</strong> &#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x771F;&#x6B63;&#x7684;&#x8D1F;&#x8D23;&#x4E86;MySQL&#x4E2D;&#x6570;&#x636E;&#x7684;&#x5B58;&#x50A8;&#x548C;&#x63D0;&#x53D6;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x901A;&#x8FC7;API&#x548C;&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x8FDB;&#x884C;&#x901A;&#x4FE1;&#x3002;</p>
<p><strong>&#x5B58;&#x50A8;&#x5C42;</strong> &#x4E3B;&#x8981;&#x662F;&#x5C06;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x5728;&#x6587;&#x4EF6;&#x7CFB;&#x7EDF;&#x4E0A;&#xFF0C;&#x5E76;&#x5B8C;&#x6210;&#x4E8E;&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x7684;&#x4EA4;&#x4E92;&#x3002;</p>
<h2 id="%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E">&#x5B58;&#x50A8;&#x5F15;&#x64CE;</h2>
<p>&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x5C31;&#x662F;&#x5B58;&#x50A8;&#x6570;&#x636E;&#x3001;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;&#x3001;&#x66F4;&#x65B0;/&#x67E5;&#x8BE2;&#x6570;&#x636E;&#x7B49;&#x6280;&#x672F;&#x7684;&#x5B9E;&#x73B0;&#x65B9;&#x5F0F;&#x3002;&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x662F;&#x57FA;&#x4E8E;&#x8868;&#x7684;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x57FA;&#x4E8E;&#x5E93;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x4E5F;&#x88AB;&#x79F0;&#x4E3A;&#x8868;&#x7C7B;&#x578B;&#x3002;</p>
<pre><code class="language-sql"># 1&#x3001;&#x521B;&#x5EFA;&#x8868;&#x65F6;&#x6307;&#x5B9A;&#x5B58;&#x50A8;&#x5F15;&#x64CE;
CREATE TABLE &#x8868;&#x540D;(
    ...
)ENGINE = INNODB [COMMENT &#x6CE8;&#x91CA;];
# 2&#x3001;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x6570;&#x636E;&#x5E93;&#x652F;&#x6301;&#x7684;&#x5B58;&#x50A8;&#x5F15;&#x64CE;
SHOW ENGINES;
</code></pre>
<p><strong>InnoDB</strong> &#x652F;&#x6301;&#x4E8B;&#x52A1;&#x3001;&#x884C;&#x7EA7;&#x9501;&#x3001;&#x5916;&#x952E;&#xFF0C;innoDB&#x5F15;&#x64CE;&#x7684;&#x6BCF;&#x5F20;&#x8868;&#x90FD;&#x4F1A;&#x5BF9;&#x5E94;&#x8868;&#x7A7A;&#x95F4;&#x6587;&#x4EF6;xxx.idb&#xFF0C;&#x5B58;&#x50A8;&#x8868;&#x7ED3;&#x6784;&#xFF08;frm&#x3001;sdi&#xFF09;&#x3001;&#x6570;&#x636E;&#x548C;&#x7D22;&#x5F15;</p>
<p><strong>MyISAM</strong> &#x5982;&#x679C;&#x5E94;&#x7528;&#x4EE5;&#x8BFB;&#x64CD;&#x4F5C;&#x548C;&#x63D2;&#x5165;&#x64CD;&#x4F5C;&#x4E3A;&#x4E3B;&#xFF0C;&#x53EA;&#x6709;&#x5F88;&#x5C11;&#x7684;&#x66F4;&#x65B0;&#x548C;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#xFF0C;&#x5E76;&#x4E14;&#x5BF9;&#x4E8B;&#x52A1;&#x7684;&#x5B8C;&#x6574;&#x6027;&#x3001;&#x5E76;&#x53D1;&#x6027;&#x8981;&#x6C42;&#x6CA1;&#x6709;&#x90A3;&#x4E48;&#x9AD8;&#xFF0C;&#x90A3;&#x4E48;&#x5F88;&#x9002;&#x5408;&#x8FD9;&#x4E2A;&#x5F15;&#x64CE;&#x3002;</p>
<p><strong>MEMORY</strong> &#x5C06;&#x6240;&#x6709;&#x6570;&#x636E;&#x4FDD;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x8BBF;&#x95EE;&#x901F;&#x5EA6;&#x5FEB;&#xFF0C;&#x901A;&#x5E38;&#x7528;&#x4E8E;&#x4E34;&#x65F6;&#x8868;&#x53CA;&#x7F13;&#x5B58;&#x3002;&#x7F3A;&#x9677;&#x662F;&#x5BF9;&#x8868;&#x7684;&#x5927;&#x5C0F;&#x6709;&#x9650;&#x5236;&#xFF0C;&#x800C;&#x4E14;&#x65E0;&#x6CD5;&#x4FDD;&#x969C;&#x6570;&#x636E;&#x7684;&#x5B89;&#x5168;&#x6027;&#x3002;</p>
<h2 id="%E7%B4%A2%E5%BC%95">&#x7D22;&#x5F15;</h2>
<p>&#x7D22;&#x5F15;&#xFF08;index&#xFF09;&#x662F;&#x5E2E;&#x52A9;MySQL&#x9AD8;&#x6548;&#x83B7;&#x53D6;&#x6570;&#x636E;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF08;&#x6709;&#x5E8F;&#xFF09;&#x3002;&#x5E38;&#x89C1;&#x7D22;&#x5F15;&#x7ED3;&#x6784;B+Tree&#x3001;Hash&#x3001;R-tree&#xFF08;&#x7A7A;&#x95F4;&#x7D22;&#x5F15;&#xFF09;&#x3001;Full-text&#xFF08;&#x5168;&#x6587;&#x7D22;&#x5F15;&#xFF09;&#x3002;</p>
<p>&#x4E8C;&#x53C9;&#x6811;&#x7F3A;&#x70B9;&#xFF1A;&#x987A;&#x5E8F;&#x63D2;&#x5165;&#x65F6;&#x9000;&#x5316;&#x6210;&#x94FE;&#x8868;&#xFF0C;&#x67E5;&#x8BE2;&#x6548;&#x7387;&#x4E3A;O(N)&#x3002;-&gt; &#x7EA2;&#x9ED1;&#x6811;&#x7F3A;&#x70B9;&#xFF1A;&#x5927;&#x6570;&#x636E;&#x91CF;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5C42;&#x7EA7;&#x8F83;&#x6DF1;&#xFF0C;&#x68C0;&#x7D22;&#x901F;&#x5EA6;&#x6162;&#x3002;</p>
<p>B-Tree(&#x591A;&#x8DEF;&#x5E73;&#x8861;&#x67E5;&#x627E;&#x6811;)</p>
<p><strong>B+Tree</strong>&#xFF1A;&#x6240;&#x6709;&#x6570;&#x636E;&#x90FD;&#x4F1A;&#x51FA;&#x73B0;&#x5728;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF0C;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x5F62;&#x6210;&#x5355;&#x5411;&#x94FE;&#x8868;&#x3002;</p>
<table>
<thead>
<tr>
<th>&#x5206;&#x7C7B;</th>
<th>&#x542B;&#x4E49;</th>
<th>&#x7279;&#x70B9;</th>
<th>&#x5173;&#x952E;&#x5B57;</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x4E3B;&#x952E;&#x7D22;&#x5F15;</td>
<td>&#x9488;&#x5BF9;&#x8868;&#x4E2D;&#x4E3B;&#x952E;&#x521B;&#x5EFA;&#x7684;&#x7D22;&#x5F15;</td>
<td>&#x9ED8;&#x8BA4;&#x81EA;&#x52A8;&#x521B;&#x5EFA;&#xFF0C;&#x53EA;&#x6709;&#x4E00;&#x4E2A;</td>
<td>PRIMARY</td>
</tr>
<tr>
<td>&#x552F;&#x4E00;&#x7D22;&#x5F15;</td>
<td>&#x907F;&#x514D;&#x540C;&#x4E00;&#x4E2A;&#x8868;&#x4E2D;&#x67D0;&#x5217;&#x6570;&#x636E;&#x4E2D;&#x7684;&#x91CD;&#x590D;&#x503C;</td>
<td>&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;</td>
<td>UNIQUE</td>
</tr>
<tr>
<td>&#x5E38;&#x89C4;&#x7D22;&#x5F15;</td>
<td>&#x5FEB;&#x901F;&#x5B9A;&#x4F4D;&#x7279;&#x5B9A;&#x6570;&#x636E;</td>
<td>&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;</td>
<td></td>
</tr>
<tr>
<td>&#x5168;&#x6587;&#x7D22;&#x5F15;</td>
<td>&#x67E5;&#x627E;&#x6587;&#x672C;&#x4E2D;&#x7684;&#x5173;&#x952E;&#x8BCD;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6BD4;&#x8F83;&#x7D22;&#x5F15;&#x4E2D;&#x7684;&#x503C;</td>
<td>&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;</td>
<td>FULLTEXT</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>&#x5206;&#x7C7B;</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x805A;&#x96C6;&#x7D22;&#x5F15;(Clustered Index)</td>
<td>&#x5C06;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x4E0E;&#x7D22;&#x5F15;&#x653E;&#x5728;&#x4E00;&#x5757;&#xFF0C;&#x7D22;&#x5F15;&#x7ED3;&#x6784;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x4FDD;&#x5B58;&#x4E86;&#x884C;&#x6570;&#x636E;</td>
<td>&#x5FC5;&#x987B;&#x6709;&#x4E14;&#x53EA;&#x6709;&#x4E00;&#x4E2A;</td>
</tr>
<tr>
<td>&#x4E8C;&#x7EA7;&#x7D22;&#x5F15;(Secondary Index)</td>
<td>&#x5C06;&#x6570;&#x636E;&#x4E0E;&#x6240;&#x6709;&#x5206;&#x5F00;&#x5B58;&#x50A8;&#xFF0C;&#x7D22;&#x5F15;&#x7ED3;&#x6784;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x5173;&#x8054;&#x7684;&#x65F6;&#x5BF9;&#x5E94;&#x7684;&#x4E3B;&#x952E;</td>
<td>&#x53EF;&#x4EE5;&#x5B58;&#x5728;&#x591A;&#x4E2A;</td>
</tr>
</tbody>
</table>
<p><strong>&#x805A;&#x96C6;&#x7D22;&#x5F15;</strong>&#x9009;&#x53D6;&#x89C4;&#x5219;&#xFF1A;</p>
<ul>
<li>&#x5982;&#x679C;&#x5B58;&#x5728;&#x4E3B;&#x952E;&#xFF0C;&#x4E3B;&#x952E;&#x5C31;&#x662F;&#x805A;&#x96C6;&#x7D22;&#x5F15;&#x3002;</li>
<li>&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x4E3B;&#x952E;&#xFF0C;&#x4F7F;&#x7528;&#x7B2C;&#x4E00;&#x4E2A;&#x552F;&#x4E00; UNIQUE &#x7D22;&#x5F15;&#x4F5C;&#x4E3A;&#x805A;&#x96C6;&#x7D22;&#x5F15;&#x3002;</li>
<li>&#x5982;&#x679C;&#x6CA1;&#x6709;&#x4E3B;&#x952E;&#x548C;&#x552F;&#x4E00;&#x7D22;&#x5F15;&#xFF0C;InnoDB&#x4F1A;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x4E00;&#x4E2A;rowid&#x4F5C;&#x4E3A;&#x9690;&#x85CF;&#x7684;&#x805A;&#x96C6;&#x7D22;&#x5F15;&#x3002;</li>
</ul>
<p>&#x56DE;&#x8868;&#x67E5;&#x8BE2;&#x6307;&#x7684;&#x662F;&#x5148;&#x4E8C;&#x7EA7;&#x7D22;&#x5F15;&#x67E5;&#x5230;&#x5BF9;&#x5E94;&#x4E3B;&#x952E;&#x503C;&#xFF0C;&#x518D;&#x56DE;&#x5230;&#x805A;&#x96C6;&#x7D22;&#x5F15;&#x67E5;&#x5230;&#x884C;&#x6570;&#x636E;&#x3002;</p>
<pre><code class="language-sql"># &#x521B;&#x5EFA;&#x7D22;&#x5F15;
CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name (index_col_name,...);
# &#x67E5;&#x770B;&#x7D22;&#x5F15;
SHOW INDEX FROM table_name;
# &#x5220;&#x9664;&#x7D22;&#x5F15;
DROP INDEX index_name ON table_name;
</code></pre>
<h3 id="sql%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90">SQL&#x6027;&#x80FD;&#x5206;&#x6790;</h3>
<p><strong>SQL&#x6267;&#x884C;&#x9891;&#x7387;</strong></p>
<pre><code class="language-sql"># &#x67E5;&#x8BE2;&#x670D;&#x52A1;&#x5668;&#x72B6;&#x6001;&#x4FE1;&#x606F;
SHOW [SESSION|GLOBAL] STATUS;
# &#x8BBF;&#x95EE;&#x9891;&#x7387;
SHOW [SESSION|GLOBAL] STATUS LIKE &apos;COM_______&apos;;
</code></pre>
<p><strong>&#x6162;&#x67E5;&#x8BE2;&#x65E5;&#x5FD7;</strong>&#x8BB0;&#x5F55;&#x4E86;&#x6240;&#x6709;&#x6267;&#x884C;&#x65F6;&#x95F4;&#x8D85;&#x8FC7;&#x6307;&#x5B9A;&#x53C2;&#x6570;(long_query_time)&#x7684;&#x6240;&#x6709;SQL&#x8BED;&#x53E5;&#x7684;&#x65E5;&#x5FD7;&#x3002;</p>
<pre><code># &#x67E5;&#x770B;&#x6162;&#x65E5;&#x5FD7;&#x67E5;&#x8BE2;&#x8BBE;&#x7F6E;
SHOW VARIABLES LIKE &apos;SLOW_QUERY_LOG&apos;;
# var/lib/mysql&#x6587;&#x4EF6;&#x4E2D;
# &#x5F00;&#x542F;&#x6162;&#x65E5;&#x5FD7;&#x67E5;&#x8BE2;&#x5F00;&#x5173;
slow_query_log = 1
# &#x8BBE;&#x7F6E;&#x6162;&#x65E5;&#x5FD7;&#x7684;&#x65F6;&#x95F4;&#x4E3A;2&#x79D2;&#xFF0C;SQL&#x8BED;&#x53E5;&#x6267;&#x884C;&#x65F6;&#x95F4;&#x8D85;&#x8FC7;2&#x79D2;&#xFF0C;&#x5C31;&#x89C6;&#x4E3A;&#x6162;&#x67E5;&#x8BE2;&#x3002;
long_query_time = 2
</code></pre>
<p><strong>profile&#x8BE6;&#x60C5;</strong></p>
<p>show profiles&#x80FD;&#x591F;&#x5728;SQL&#x4F18;&#x5316;&#x65F6;&#x5E2E;&#x52A9;&#x6211;&#x4EEC;&#x4E86;&#x89E3;&#x65F6;&#x95F4;&#x8017;&#x8D39;&#x5230;&#x54EA;&#x91CC;&#x4E86;&#x3002;</p>
<pre><code class="language-sql"># &#x662F;&#x5426;&#x652F;&#x6301;profile&#x64CD;&#x4F5C;
SELECT @@HAVE_PROFILING;
# &#x5F00;&#x542F;
SET PROFILING = 1;

# &#x67E5;&#x770B;&#x6BCF;&#x4E00;&#x6761;SQL&#x8017;&#x65F6;&#x57FA;&#x672C;&#x60C5;&#x51B5;
SHOW PROFILES;
# &#x67E5;&#x770B;&#x6307;&#x5B9A;query_id&#x7684;SQL&#x8BED;&#x53E5;&#x5404;&#x4E2A;&#x9636;&#x6BB5;&#x8017;&#x65F6;&#x60C5;&#x51B5;
SHOW PROFILE FOR QUERY QUERY_ID;
# &#x67E5;&#x770B;&#x6307;&#x5B9A;query_id&#x7684;SQL&#x8BED;&#x53E5;CPU&#x4F7F;&#x7528;&#x60C5;&#x51B5;
SHOW PROFILE CPU FOR QUERY QUERY_ID;
</code></pre>
<p><strong>explain&#x6267;&#x884C;&#x8BA1;&#x5212;</strong></p>
<p>explain&#x6216;&#x8005;desc&#x547D;&#x4EE4;&#x83B7;&#x53D6;MySQL&#x5982;&#x4F55;&#x6267;&#x884C;SELECT&#x8BED;&#x53E5;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x5305;&#x62EC;&#x5728;SELECT&#x8BED;&#x53E5;&#x6267;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x8868;&#x5982;&#x4F55;&#x8FDE;&#x63A5;&#x548C;&#x8FDE;&#x63A5;&#x987A;&#x5E8F;&#x3002;</p>
<pre><code class="language-sql"># &#x76F4;&#x63A5;&#x5728;&#x6267;&#x884C;&#x8BED;&#x53E5;&#x524D;&#x52A0;&#x5173;&#x952E;&#x5B57; EXPLAIN/DESC
</code></pre>
<p>id: select&#x67E5;&#x8BE2;&#x7684;&#x5E8F;&#x5217;&#x53F7;&#xFF0C;&#x8868;&#x793A;&#x6267;&#x884C;select&#x8BED;&#x53E5;&#x6216;&#x8005;&#x662F;&#x64CD;&#x4F5C;&#x8868;&#x7684;&#x987A;&#x5E8F;(id&#x76F8;&#x540C;&#xFF0C;&#x987A;&#x5E8F;&#x6267;&#x884C;; id&#x4E0D;&#x540C;&#xFF0C;&#x503C;&#x5927;&#x7684;&#x5148;&#x6267;&#x884C;)&#x3002;</p>
<p>select_type: &#x8868;&#x793A;SELECT&#x7C7B;&#x578B;&#xFF0C;SIMPLE(&#x7B80;&#x5355;&#x8868;)&#x3001;PRIMARY(&#x4E3B;&#x67E5;&#x8BE2;)&#x3001;UNION(UNION&#x4E2D;&#x7B2C;&#x4E8C;&#x4E2A;&#x6216;&#x540E;&#x9762;&#x7684;&#x67E5;&#x8BE2;&#x8BED;&#x53E5;)&#x3001;SUBQUERY(SELECT/WHERE&#x4E4B;&#x540E;&#x7684;&#x5B50;&#x67E5;&#x8BE2;)&#x3002;</p>
<p>type: &#x8868;&#x793A;&#x8FDE;&#x63A5;&#x7C7B;&#x578B;&#xFF0C;&#x6027;&#x80FD;&#x597D;&#x574F;NULL&gt;system&gt;const&gt;eq_ref&gt;ref&gt;range&gt;index&gt;all&#x3002;</p>
<p>possible_key: &#x663E;&#x793A;&#x53EF;&#x80FD;&#x5E94;&#x7528;&#x7684;&#x7D22;&#x5F15;&#xFF0C;&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x3002;</p>
<p>Key: &#x5B9E;&#x9645;&#x4F7F;&#x7528;&#x7684;&#x7D22;&#x5F15;&#xFF0C;NULL&#x4E3A;&#x672A;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#x3002;</p>
<p>Key_len: &#x8868;&#x793A;&#x7D22;&#x5F15;&#x4E2D;&#x4F7F;&#x7528;&#x7684;&#x5B57;&#x8282;&#x6570;&#xFF0C;&#x503C;&#x4E3A;&#x7D22;&#x5F15;&#x5B57;&#x6BB5;&#x6700;&#x5927;&#x53EF;&#x80FD;&#x957F;&#x5EA6;&#xFF0C;&#x957F;&#x5EA6;&#x8D8A;&#x77ED;&#x8D8A;&#x597D;&#x3002;</p>
<p>rows: MySQL&#x8BA4;&#x4E3A;&#x5FC5;&#x987B;&#x8981;&#x6267;&#x884C;&#x67E5;&#x8BE2;&#x7684;&#x884C;&#x6570;&#xFF0C;&#x4F30;&#x8BA1;&#x503C;&#x3002;</p>
<p>filtered: &#x8868;&#x793A;&#x8FD4;&#x56DE;&#x7ED3;&#x679C;&#x7684;&#x884C;&#x6570;&#x5360;&#x9700;&#x8BFB;&#x53D6;&#x884C;&#x6570;&#x7684;&#x767E;&#x5206;&#x6BD4;&#xFF0C;&#x503C;&#x8D8A;&#x5927;&#x8D8A;&#x597D;&#x3002;</p>
<!--kg-card-end: markdown--><hr><!--kg-card-begin: markdown--><h3 id="%E7%B4%A2%E5%BC%95%E4%BD%BF%E7%94%A8">&#x7D22;&#x5F15;&#x4F7F;&#x7528;</h3>
<p><strong>&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x6CD5;&#x5219;</strong> &#x5982;&#x679C;&#x7D22;&#x5F15;&#x4E86;&#x591A;&#x5217;&#xFF08;&#x8054;&#x5408;&#x7D22;&#x5F15;&#xFF09;&#xFF0C;&#x67E5;&#x8BE2;&#x4ECE;&#x7D22;&#x5F15;&#x6700;&#x5DE6;&#x5217;&#x5F00;&#x59CB;&#xFF0C;&#x5E76;&#x4E14;&#x4E0D;&#x8DF3;&#x8FC7;&#x7D22;&#x5F15;&#x4E2D;&#x7684;&#x5217;&#x3002;&#x5982;&#x679C;&#x8DF3;&#x8DC3;&#x67D0;&#x4E00;&#x5217;&#xFF0C;&#x7D22;&#x5F15;&#x5C06;&#x90E8;&#x5206;&#x5931;&#x6548;&#xFF08;&#x540E;&#x9762;&#x7684;&#x5B57;&#x6BB5;&#x7D22;&#x5F15;&#x5931;&#x6548;&#xFF09;&#x3002;</p>
<p><strong>&#x8303;&#x56F4;&#x67E5;&#x8BE2;</strong> &#x8054;&#x5408;&#x7D22;&#x5F15;&#x4E2D;&#x51FA;&#x73B0;&#x8303;&#x56F4;&#x67E5;&#x8BE2;(&gt;,&lt;)&#xFF0C;&#x8303;&#x56F4;&#x67E5;&#x8BE2;&#x53F3;&#x4FA7;&#x7684;&#x5217;&#x7D22;&#x5F15;&#x5931;&#x6548;&#x3002;</p>
<p><strong>&#x7D22;&#x5F15;&#x5217;&#x8FD0;&#x7B97;</strong> &#x4E0D;&#x8981;&#x5728;&#x7D22;&#x5F15;&#x5217;&#x4E0A;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#x64CD;&#x4F5C;&#xFF0C;&#x7D22;&#x5F15;&#x4F1A;&#x5931;&#x6548;&#x3002;</p>
<p><strong>&#x5B57;&#x7B26;&#x4E32;&#x4E0D;&#x52A0;&#x5F15;&#x53F7;</strong> &#x5B57;&#x7B26;&#x4E32;&#x7C7B;&#x578B;&#x5B57;&#x6BB5;&#x4F7F;&#x7528;&#x65F6;&#xFF0C;&#x4E0D;&#x52A0;&#x5F15;&#x53F7;&#xFF0C;&#x7D22;&#x5F15;&#x5C06;&#x5931;&#x6548;&#x3002;</p>
<p><strong>&#x6A21;&#x7CCA;&#x67E5;&#x8BE2;</strong> &#x5C3E;&#x90E8;&#x6A21;&#x7CCA;&#x5339;&#x914D;&#xFF0C;&#x7D22;&#x5F15;&#x4E0D;&#x4F1A;&#x5931;&#x6548;&#x3002;&#x5934;&#x90E8;&#x6A21;&#x7CCA;&#x5339;&#x914D;&#xFF0C;&#x7D22;&#x5F15;&#x4F1A;&#x5931;&#x6548;&#x3002;</p>
<p><strong>or&#x8FDE;&#x63A5;&#x7684;&#x6761;&#x4EF6;</strong> &#x7528;or&#x5206;&#x5272;&#x5F00;&#x7684;&#x6761;&#x4EF6;&#xFF0C;&#x5982;&#x679C;or&#x524D;&#x7684;&#x6761;&#x4EF6;&#x4E2D;&#x7684;&#x5217;&#x6709;&#x7D22;&#x5F15;&#xFF0C;&#x540E;&#x9762;&#x7684;&#x5217;&#x6CA1;&#x6709;&#x7D22;&#x5F15;&#xFF0C;&#x90A3;&#x4E48;&#x6D89;&#x53CA;&#x7684;&#x7D22;&#x5F15;&#x90FD;&#x4E0D;&#x4F1A;&#x88AB;&#x7528;&#x5230;&#x3002;</p>
<p><strong>&#x6570;&#x636E;&#x5206;&#x5E03;&#x5F71;&#x54CD;</strong> &#x5982;&#x679C;MySQL&#x8BC4;&#x4F30;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#x6BD4;&#x5168;&#x8868;&#x6162;&#xFF0C;&#x5219;&#x4E0D;&#x9002;&#x7528;&#x7D22;&#x5F15;&#x3002;</p>
<p><strong>SQL&#x63D0;&#x793A;</strong> &#x5728;SQL&#x8BED;&#x53E5;&#x4E2D;&#x52A0;&#x5165;&#x4E00;&#x4E9B;&#x4EBA;&#x4E3A;&#x7684;&#x63D0;&#x793A;&#x6765;&#x4F18;&#x5316;&#x64CD;&#x4F5C;&#x3002;</p>
<pre><code class="language-sql">USE INDEX();
IGNORE INDEX();
FORCE INDEX();
</code></pre>
<p><strong>&#x8986;&#x76D6;&#x7D22;&#x5F15;</strong> &#x5C3D;&#x91CF;&#x4F7F;&#x7528;&#x8986;&#x76D6;&#x7D22;&#x5F15;&#xFF08;&#x67E5;&#x8BE2;&#x4F7F;&#x7528;&#x4E86;&#x7D22;&#x5F15;&#xFF0C;&#x5E76;&#x4E14;&#x9700;&#x8981;&#x8FD4;&#x56DE;&#x7684;&#x5217;&#xFF0C;&#x5728;&#x8BE5;&#x7D22;&#x5F15;&#x4E2D;&#x5DF2;&#x7ECF;&#x5168;&#x90E8;&#x80FD;&#x591F;&#x627E;&#x5230;&#xFF09;&#xFF0C;&#x51CF;&#x5C11;select *&#x3002;</p>
<p><strong>&#x524D;&#x7F00;&#x7D22;&#x5F15;</strong> &#x5B57;&#x6BB5;&#x7C7B;&#x578B;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#xFF08;varchar&#xFF0C;text&#x7B49;&#xFF09;&#x65F6;&#xFF0C;&#x6709;&#x65F6;&#x5019;&#x9700;&#x8981;&#x7D22;&#x5F15;&#x5F88;&#x957F;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x6B64;&#x65F6;&#x53EF;&#x4EE5;&#x53EA;&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x4E00;&#x90E8;&#x5206;&#x524D;&#x7F00;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;&#x3002;</p>
<pre><code class="language-sql"># &#x8BED;&#x6CD5;
CREATE INDEX idx_xxx ON table_name(COLUMN(n));
# &#x524D;&#x7F00;&#x957F;&#x5EA6;&#x6839;&#x636E;&#x7D22;&#x5F15;&#x9009;&#x62E9;&#x6027;&#x51B3;&#x5B9A;
# &#x9009;&#x62E9;&#x884C;&#x6307;&#x4E0D;&#x91CD;&#x590D;&#x7684;&#x7D22;&#x5F15;&#x503C;&#x548C;&#x6570;&#x636E;&#x8868;&#x7684;&#x8BB0;&#x5F55;&#x603B;&#x6570;&#x7684;&#x6BD4;&#x503C;
SELECT COUNT(DISTINCT SUBSTRING(&#x5B57;&#x6BB5;&#x540D;,M,N)/COUNT(*) FROM table_name;
</code></pre>
<p><strong>&#x5355;&#x5217;&#x7D22;&#x5F15;</strong>&#x548C;<strong>&#x8054;&#x5408;&#x7D22;&#x5F15;</strong></p>
<h3 id="%E7%B4%A2%E5%BC%95%E5%8E%9F%E5%88%99">&#x7D22;&#x5F15;&#x539F;&#x5219;</h3>
<ol>
<li>&#x9488;&#x5BF9;&#x6570;&#x636E;&#x91CF;&#x8F83;&#x5927;&#x4E14;&#x67E5;&#x8BE2;&#x6BD4;&#x8F83;&#x9891;&#x7E41;&#x7684;&#x8868;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;&#x3002;</li>
<li>&#x9488;&#x5BF9;&#x4E8E;&#x5E38;&#x4F5C;&#x4E3A;&#x67E5;&#x8BE2;&#x6761;&#x4EF6;&#xFF08;WHERE&#xFF09;&#x3001;&#x6392;&#x5E8F;&#xFF08;ORDER BY)&#x3001;&#x5206;&#x7EC4;&#xFF08;GROUP BY&#xFF09;&#x64CD;&#x4F5C;&#x7684;&#x5B57;&#x6BB5;&#x5EFA;&#x7ACB;&#x7D22;&#x5F15;&#x3002;</li>
<li>&#x5C3D;&#x91CF;&#x9009;&#x62E9;&#x533A;&#x5206;&#x5EA6;&#x9AD8;&#x7684;&#x5217;&#x4F5C;&#x4E3A;&#x7D22;&#x5F15;&#xFF0C;&#x5C3D;&#x91CF;&#x5EFA;&#x7ACB;&#x552F;&#x4E00;&#x7D22;&#x5F15;&#x3002;&#x533A;&#x5206;&#x5EA6;&#x8D8A;&#x9AD8;&#xFF0C;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#x6548;&#x7387;&#x5C31;&#x8D8A;&#x9AD8;&#x3002;</li>
<li>&#x5982;&#x679C;&#x662F;&#x5B57;&#x7B26;&#x4E32;&#x7C7B;&#x578B;&#x7684;&#x5B57;&#x6BB5;&#xFF0C;&#x5B57;&#x6BB5;&#x957F;&#x5EA6;&#x8F83;&#x957F;&#xFF0C;&#x53EF;&#x4EE5;&#x5EFA;&#x7ACB;&#x524D;&#x7F00;&#x7D22;&#x5F15;&#x3002;</li>
<li>&#x5C3D;&#x91CF;&#x4F7F;&#x7528;&#x8054;&#x5408;&#x7D22;&#x5F15;&#xFF0C;&#x51CF;&#x5C11;&#x5355;&#x5217;&#x7D22;&#x5F15;&#x3002;&#x67E5;&#x8BE2;&#x65F6;&#xFF0C;&#x8054;&#x5408;&#x7D22;&#x5F15;&#x5F88;&#x591A;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x8986;&#x76D6;&#x7D22;&#x5F15;&#xFF0C;&#x907F;&#x514D;&#x56DE;&#x8868;&#x3002;</li>
<li>&#x8981;&#x63A7;&#x5236;&#x7D22;&#x5F15;&#x6570;&#x91CF;&#xFF0C;&#x7D22;&#x5F15;&#x8D8A;&#x591A;&#x7EF4;&#x62A4;&#x7D22;&#x5F15;&#x7ED3;&#x6784;&#x4EE3;&#x4EF7;&#x8D8A;&#x5927;&#xFF0C;&#x5F71;&#x54CD;&#x589E;&#x5220;&#x6539;&#x7684;&#x6548;&#x7387;&#x3002;</li>
<li>&#x5982;&#x679C;&#x7D22;&#x5F15;&#x4E0D;&#x80FD;&#x5B58;&#x50A8;NULL&#xFF0C;&#x5728;&#x521B;&#x5EFA;&#x8868;&#x65F6;&#x5C31;&#x4F7F;&#x7528;NOT NULL&#x7EA6;&#x675F;&#x3002;&#x5F53;&#x4F18;&#x5316;&#x5668;&#x77E5;&#x9053;&#x6BCF;&#x5217;&#x662F;&#x5426;&#x5305;&#x542B;NULL&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x66F4;&#x597D;&#x7684;&#x786E;&#x5B9A;&#x54EA;&#x4E2A;&#x7D22;&#x5F15;&#x6700;&#x6709;&#x6548;&#x3002;</li>
</ol>
<h2 id="sql%E4%BC%98%E5%8C%96">SQL&#x4F18;&#x5316;</h2>
<h3 id="%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE"><strong>&#x63D2;&#x5165;&#x6570;&#x636E;</strong></h3>
<pre><code class="language-sql"># insert &#x4F18;&#x5316;
# &#x6279;&#x91CF;&#x63D2;&#x5165;
# &#x624B;&#x52A8;&#x63D0;&#x4EA4;&#x4E8B;&#x52A1;
# &#x4E3B;&#x952E;&#x987A;&#x5E8F;&#x63D2;&#x5165;

# &#x5927;&#x6279;&#x91CF;&#x63D2;&#x5165;&#x6570;&#x636E;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; load &#x6307;&#x4EE4;
# &#x5BA2;&#x6237;&#x7AEF;&#x8FDE;&#x63A5;&#x670D;&#x52A1;&#x5668;&#x65F6;&#x52A0;&#x4E0A;&#x53C2;&#x6570;--local-infile
mysql --local-infile -u root -p
# &#x5F00;&#x542F;&#x4ECE;&#x672C;&#x5730;&#x52A0;&#x8F7D;&#x6587;&#x4EF6;&#x5BFC;&#x5165;&#x6570;&#x636E;&#x7684;&#x5F00;&#x5173;
set global local_infile = 1;
# &#x6267;&#x884C; load &#x6307;&#x4EE4;&#x5C06;&#x51C6;&#x5907;&#x597D;&#x7684;&#x6570;&#x636E;&#x52A0;&#x8F7D;&#x5230;&#x8868;&#x7ED3;&#x6784;&#x4E2D;
load data infile &apos;/root/xxx.log&apos; into table &#x8868;&#x540D; terminated by &apos;;&apos; lines terminated by &apos;\n&apos;;
</code></pre>
<h3 id="%E4%B8%BB%E9%94%AE%E4%BC%98%E5%8C%96"><strong>&#x4E3B;&#x952E;&#x4F18;&#x5316;</strong></h3>
<p>&#x6570;&#x636E;&#x7EC4;&#x7EC7;&#x65B9;&#x5F0F; &#x5728;InnoDB&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x4E2D;&#xFF0C;&#x8868;&#x6570;&#x636E;&#x90FD;&#x662F;&#x6839;&#x636E;&#x4E3B;&#x952E;&#x987A;&#x5E8F;&#x7EC4;&#x7EC7;&#x5B58;&#x653E;&#x7684;&#xFF0C;&#x53C8;&#x79F0;&#x4E3A;&#x7D22;&#x5F15;&#x7EC4;&#x7EC7;&#x8868;&#xFF08;Index Organization Table IOT&#xFF09;&#x3002;</p>
<p>&#x9875;&#x53EF;&#x4EE5;&#x4E3A;&#x7A7A;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x586B;&#x5145;&#x4E00;&#x534A;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x586B;&#x5145;100%&#x3002;&#x6BCF;&#x4E2A;&#x9875;&#x5305;&#x542B;2-N&#x884C;&#x6570;&#x636E;&#xFF08;&#x5982;&#x679C;&#x4E00;&#x884C;&#x6570;&#x636E;&#x8FC7;&#x5927;&#xFF0C;&#x4F1A;&#x884C;&#x6EA2;&#x51FA;&#xFF09;&#xFF0C;&#x6839;&#x636E;&#x4E3B;&#x952E;&#x6392;&#x5217;&#x3002;</p>
<p>&#x9875;&#x5206;&#x88C2; &#x4E71;&#x5E8F;&#x63D2;&#x5165;&#x65F6;&#x53EF;&#x80FD;&#x4F1A;&#x5BFC;&#x81F4;&#x9875;&#x5206;&#x88C2;</p>
<p>&#x9875;&#x5408;&#x5E76; &#x5F53;&#x5220;&#x9664;&#x4E00;&#x884C;&#x8BB0;&#x5F55;&#x65F6;&#xFF0C;&#x5B9E;&#x9645;&#x53EA;&#x662F;&#x8BB0;&#x5F55;&#x88AB;&#x6807;&#x8BB0;&#xFF08;flagged&#xFF09;&#x4E3A;&#x5220;&#x9664;&#x5E76;&#x4E14;&#x5B83;&#x7684;&#x7A7A;&#x95F4;&#x5141;&#x8BB8;&#x88AB;&#x5176;&#x4ED6;&#x8BB0;&#x5F55;&#x58F0;&#x660E;&#x4F7F;&#x7528;&#x3002;&#x5F53;&#x9875;&#x4E2D;&#x5220;&#x9664;&#x7684;&#x8BB0;&#x5F55;&#x8FBE;&#x5230;MERGE_THRESHOLD&#xFF08;&#x9ED8;&#x8BA4;&#x4E3A;&#x9875;&#x7684;50%&#xFF09;&#xFF0C;InnoDB&#x4F1A;&#x5F00;&#x59CB;&#x5BFB;&#x627E;&#x6700;&#x9760;&#x8FD1;&#x7684;&#x9875;&#xFF0C;&#x770B;&#x770B;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x5408;&#x5E76;&#x4E24;&#x9875;&#x4EE5;&#x4F18;&#x5316;&#x7A7A;&#x95F4;&#x4F7F;&#x7528;&#x3002;</p>
<h3 id="%E4%B8%BB%E9%94%AE%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99"><strong>&#x4E3B;&#x952E;&#x8BBE;&#x8BA1;&#x539F;&#x5219;</strong></h3>
<p>&#x5C3D;&#x91CF;&#x964D;&#x4F4E;&#x4E3B;&#x952E;&#x957F;&#x5EA6;&#xFF1B;&#x63D2;&#x5165;&#x6570;&#x636E;&#x5C3D;&#x91CF;&#x987A;&#x5E8F;&#x63D2;&#x5165;&#xFF1B;&#x5C3D;&#x91CF;&#x4E0D;&#x8981;&#x4F7F;&#x7528;UUID&#x6216;&#x8EAB;&#x4EFD;&#x8BC1;&#x53F7;&#x505A;&#x4E3B;&#x952E;&#xFF1B;&#x4E1A;&#x52A1;&#x64CD;&#x4F5C;&#x907F;&#x514D;&#x4FEE;&#x6539;&#x4E3B;&#x952E;&#x3002;</p>
<h3 id="order-by-%E4%BC%98%E5%8C%96"><strong>order by &#x4F18;&#x5316;</strong></h3>
<p>Using filesort: &#x901A;&#x8FC7;&#x8868;&#x7684;&#x7D22;&#x5F15;&#x6216;&#x5168;&#x8868;&#x626B;&#x63CF;&#xFF0C;&#x8BFB;&#x53D6;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x7684;&#x6570;&#x636E;&#x884C;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x6392;&#x5E8F;&#x7F13;&#x51B2;&#x533A; sort buffer &#x4E2D;&#x5B8C;&#x6210;&#x6392;&#x5E8F;&#x3002;&#x6240;&#x6709;&#x4E0D;&#x662F;&#x901A;&#x8FC7;&#x7D22;&#x5F15;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x6392;&#x5E8F;&#x7ED3;&#x679C;&#x7684;&#x6392;&#x5E8F;&#x90FD;&#x53EB; Filesort &#x6392;&#x5E8F;&#x3002;</p>
<p>Using index: &#x901A;&#x8FC7;&#x6709;&#x5E8F;&#x7D22;&#x5F15;&#x987A;&#x5E8F;&#x626B;&#x63CF;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x6709;&#x5E8F;&#x6570;&#x636E;&#x3002;</p>
<h3 id="group-by-%E4%BC%98%E5%8C%96"><strong>group by &#x4F18;&#x5316;</strong></h3>
<ul>
<li>&#x5206;&#x7EC4;&#x64CD;&#x4F5C;&#x65F6;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x7D22;&#x5F15;&#x63D0;&#x9AD8;&#x6548;&#x7387;&#xFF0C;&#x4E14;&#x7D22;&#x5F15;&#x4F7F;&#x7528;&#x4E5F;&#x662F;&#x6EE1;&#x8DB3;&#x6700;&#x5DE6;&#x524D;&#x7F00;&#x6CD5;&#x5219;&#x7684;&#x3002;</li>
</ul>
<h3 id="limit-%E4%BC%98%E5%8C%96"><strong>limit &#x4F18;&#x5316;</strong></h3>
<p>&#x4F18;&#x5316;&#x601D;&#x8DEF;&#xFF1A;&#x4E00;&#x822C;&#x5206;&#x9875;&#x67E5;&#x8BE2;&#x65F6;&#xFF0C;&#x901A;&#x8FC7;&#x521B;&#x5EFA;&#x8986;&#x76D6;&#x7D22;&#x5F15;&#x52A0;&#x5B50;&#x67E5;&#x8BE2;&#x5F62;&#x5F0F;&#x4F18;&#x5316;&#x3002;</p>
<h3 id="count-%E4%BC%98%E5%8C%96"><strong>count &#x4F18;&#x5316;</strong></h3>
<p>count()&#x662F;&#x4E00;&#x4E2A;&#x805A;&#x5408;&#x51FD;&#x6570;&#xFF0C;&#x5BF9;&#x4E8E;&#x8FD4;&#x56DE;&#x7684;&#x7ED3;&#x679C;&#x96C6;&#xFF0C;&#x4E00;&#x884C;&#x884C;&#x5224;&#x65AD;&#xFF0C;&#x5982;&#x679C;NOT NULL&#xFF0C;&#x8BA1;&#x6570;&#x52A0;&#x4E00;&#xFF0C;&#x6700;&#x540E;&#x8FD4;&#x56DE;&#x7D2F;&#x8BA1;&#x503C;&#x3002;</p>
<p>&#x7528;&#x6CD5;&#xFF1A;count(*) &#x2248; count(1) &gt; count(&#x4E3B;&#x952E;) &gt; count(&#x5B57;&#x6BB5;)&#x3002;</p>
<p>count(1) &#x904D;&#x5386;&#x6574;&#x5F20;&#x8868;&#x4F46;&#x4E0D;&#x53D6;&#x503C;&#xFF0C;&#x670D;&#x52A1;&#x5C42;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E00;&#x884C;&#x653E;&#x6570;&#x5B57;&quot;1&quot;&#xFF0C;&#x76F4;&#x63A5;&#x6309;&#x884C;&#x7D2F;&#x52A0;&#x3002;</p>
<p>count(*) &#x6709;&#x4E13;&#x95E8;&#x4F18;&#x5316;&#xFF0C;&#x4E0D;&#x53D6;&#x503C;&#x670D;&#x52A1;&#x5C42;&#x6309;&#x884C;&#x7D2F;&#x52A0;&#x3002;</p>
<h3 id="update-%E4%BC%98%E5%8C%96"><strong>update &#x4F18;&#x5316;</strong></h3>
<p>InnoDB&#x7684;&#x884C;&#x9501;&#x662F;&#x9488;&#x5BF9;&#x7D22;&#x5F15;&#x52A0;&#x7684;&#x9501;&#xFF0C;&#x4E0D;&#x662F;&#x9488;&#x5BF9;&#x8BB0;&#x5F55;&#x52A0;&#x7684;&#x9501;&#xFF0C;&#x5E76;&#x4E14;&#x8BE5;&#x7D22;&#x5F15;&#x4E0D;&#x80FD;&#x5931;&#x6548;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x4ECE;&#x884C;&#x9501;&#x5347;&#x7EA7;&#x4E3A;&#x8868;&#x9501;&#x3002;</p>
<h2 id="%E8%A7%86%E5%9B%BE%E5%AD%98%E5%82%A8%E8%BF%87%E7%A8%8B%E8%A7%A6%E5%8F%91%E5%99%A8">&#x89C6;&#x56FE;/&#x5B58;&#x50A8;&#x8FC7;&#x7A0B;/&#x89E6;&#x53D1;&#x5668;</h2>
<h2 id="%E9%94%81">&#x9501;</h2>
<p><strong>&#x5168;&#x5C40;&#x9501;</strong>&#xFF1A;&#x9501;&#x5B9A;&#x6570;&#x636E;&#x5E93;&#x4E2D;&#x6240;&#x6709;&#x8868;&#xFF0C;&#x5178;&#x578B;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x662F;&#x505A;&#x5168;&#x5E93;&#x7684;&#x903B;&#x8F91;&#x5907;&#x4EFD;&#x3002;</p>
<p><strong>&#x8868;&#x7EA7;&#x9501;</strong>&#xFF1A;&#x6BCF;&#x6B21;&#x64CD;&#x4F5C;&#x9501;&#x4F4F;&#x6574;&#x5F20;&#x8868;</p>
<p>&#x8868;&#x5171;&#x4EAB;&#x8BFB;&#x9501;read lock/ &#x8868;&#x72EC;&#x5360;&#x5199;&#x9501;write lock</p>
<p>&#x8BFB;&#x9501;&#x4E0D;&#x4F1A;&#x963B;&#x585E;&#x5176;&#x4ED6;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8BFB;&#xFF0C;&#x4F46;&#x662F;&#x4F1A;&#x963B;&#x585E;&#x5199;&#x3002;&#x5199;&#x9501;&#x65E2;&#x4F1A;&#x963B;&#x585E;&#x5176;&#x4ED6;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x8BFB;&#xFF0C;&#x53C8;&#x4F1A;&#x963B;&#x585E;&#x5176;&#x4ED6;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x5199;&#x3002;</p>
<pre><code class="language-sql"># &#x52A0;&#x9501;
lock tables &#x8868;&#x540D;... read/write;
# &#x91CA;&#x653E;&#x9501;
unlock tables;
</code></pre>
<p><strong>&#x5143;&#x6570;&#x636E;&#x9501;</strong>&#xFF08;meta data lock MDL&#xFF09;&#x52A0;&#x9501;&#x662F;&#x7CFB;&#x7EDF;&#x81EA;&#x52A8;&#x63A7;&#x5236;&#xFF0C;&#x65E0;&#x9700;&#x663E;&#x793A;&#x4F7F;&#x7528;&#xFF0C;&#x5728;&#x8BBF;&#x95EE;&#x4E00;&#x5F20;&#x8868;&#x65F6;&#x5019;&#x4F1A;&#x81EA;&#x52A8;&#x52A0;&#x4E0A;&#x3002;MDL&#x9501;&#x4E3B;&#x8981;&#x662F;&#x7EF4;&#x62A4;&#x8868;&#x5143;&#x6570;&#x636E;&#x4E00;&#x81F4;&#x6027;&#xFF0C;&#x5728;&#x8868;&#x4E0A;&#x6709;&#x6D3B;&#x52A8;&#x4E8B;&#x52A1;&#x65F6;&#x5019;&#xFF0C;&#x4E0D;&#x53EF;&#x4EE5;&#x5BF9;&#x5143;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x5199;&#x5165;&#x64CD;&#x4F5C;&#x3002;<em>&#x907F;&#x514D;DML&#x4E0E;DDL&#x51B2;&#x7A81;&#xFF0C;&#x4FDD;&#x8BC1;&#x8BFB;&#x5199;&#x6B63;&#x786E;&#x6027;&#x3002;</em></p>
<p>&#x5F53;&#x5BF9;&#x4E00;&#x5F20;&#x8868;&#x8FDB;&#x884C;CRUD&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x52A0;MDL&#x8BFB;&#x9501;&#xFF08;&#x5171;&#x4EAB;&#xFF09;&#xFF1B;&#x5F53;&#x5BF9;&#x8868;&#x7ED3;&#x6784;&#x8FDB;&#x884C;&#x53D8;&#x66F4;&#x65F6;&#xFF0C;&#x52A0;MDL&#x5199;&#x9501;&#xFF08;&#x6392;&#x4ED6;&#xFF09;&#x3002;</p>
<p><strong>&#x610F;&#x5411;&#x9501;</strong>&#x4F7F;&#x5F97;&#x8868;&#x9501;&#x4E0D;&#x7528;&#x68C0;&#x67E5;&#x6BCF;&#x884C;&#x6570;&#x636E;&#x662F;&#x5426;&#x52A0;&#x9501;&#x3002;</p>
<p>&#x610F;&#x5411;&#x5171;&#x4EAB;&#x9501;&#xFF08;IS&#xFF09;&#xFF1A;&#x7531;&#x8BED;&#x53E5;select ... lock in share mode &#x6DFB;&#x52A0;&#x3002;&#x4E0E; read lock &#x517C;&#x5BB9;&#xFF0C;&#x4E0E; write lock &#x4E92;&#x65A5;&#x3002;</p>
<p>&#x610F;&#x5411;&#x6392;&#x4ED6;&#x9501;&#xFF08;IX&#xFF09;&#xFF1A;&#x7531;insert&#x3001;update&#x3001;delete&#x3001;select ... for update&#x6DFB;&#x52A0;&#x3002;&#x4E0E; read lock &#x53CA; write &#x90FD;&#x4E92;&#x65A5;&#x3002;&#x610F;&#x5411;&#x9501;&#x4E4B;&#x95F4;&#x4E0D;&#x4F1A;&#x4E92;&#x65A5;&#x3002;</p>
<p><strong>&#x884C;&#x7EA7;&#x9501;</strong>&#xFF1A;&#x6BCF;&#x6B21;&#x64CD;&#x4F5C;&#x9501;&#x4F4F;&#x5BF9;&#x5E94;&#x884C;</p>
<p>InnoDB&#x7684;&#x6570;&#x636E;&#x662F;&#x57FA;&#x4E8E;&#x7D22;&#x5F15;&#x7EC4;&#x7EC7;&#x7684;&#xFF0C;&#x884C;&#x9501;&#x662F;&#x901A;&#x8FC7;&#x5BF9;&#x7D22;&#x5F15;&#x4E0A;&#x7684;&#x7D22;&#x5F15;&#x9879;&#x52A0;&#x9501;&#x6765;&#x5B9E;&#x73B0;&#x7684;&#x3002;&#x884C;&#x9501;&#x4E3B;&#x8981;&#x5206;&#x4E3A;&#x4E09;&#x79CD;&#xFF1A;</p>
<ol>
<li>
<p><strong>&#x884C;&#x9501;</strong>&#xFF08;Record Lock&#xFF09;&#xFF1A;&#x9501;&#x5B9A;&#x5355;&#x4E2A;&#x8BB0;&#x5F55;&#x7684;&#x9501;&#xFF0C;&#x9632;&#x6B62;&#x5176;&#x4ED6;&#x4E8B;&#x52A1;&#x5BF9;&#x6B64;&#x8FDB;&#x884C;update&#x548C;delete&#x3002;&#x5728;RC&#x3001;RR&#x9694;&#x79BB;&#x7EA7;&#x522B;&#x4E0B;&#x90FD;&#x652F;&#x6301;&#x3002;</p>
<table>
<thead>
<tr>
<th>SQL</th>
<th style="text-align:center">&#x884C;&#x9501;&#x7C7B;&#x578B;</th>
<th style="text-align:center">&#x8BF4;&#x660E;</th>
</tr>
</thead>
<tbody>
<tr>
<td>INSERT/UPDATE/DELETE</td>
<td style="text-align:center">&#x6392;&#x4ED6;&#x9501;</td>
<td style="text-align:center">&#x81EA;&#x52A8;&#x52A0;&#x9501;</td>
</tr>
<tr>
<td>SELECT</td>
<td style="text-align:center">&#x4E0D;&#x52A0;&#x9501;</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td>SELECT .. LOCK IN SHARE MODE</td>
<td style="text-align:center">&#x5171;&#x4EAB;&#x9501;</td>
<td style="text-align:center">&#x624B;&#x52A8;&#x52A0;LOCK IN SHARE MODE</td>
</tr>
<tr>
<td>SELECT ... FOR UPDATE</td>
<td style="text-align:center">&#x6392;&#x4ED6;&#x9501;</td>
<td style="text-align:center">&#x624B;&#x52A8;&#x52A0;FOR UPDATE</td>
</tr>
</tbody>
</table>
</li>
<li>
<p><strong>&#x95F4;&#x9699;&#x9501;</strong>&#xFF08;Gap Lock&#xFF09;&#xFF1A;&#x9501;&#x5B9A;&#x7D22;&#x5F15;&#x8BB0;&#x5F55;&#x95F4;&#x9699;&#xFF08;&#x4E0D;&#x542B;&#x8BE5;&#x8BB0;&#x5F55;&#xFF09;&#xFF0C;&#x9632;&#x6B62;&#x5176;&#x4ED6;&#x4E8B;&#x52A1;&#x5728;&#x8FD9;&#x4E2A;&#x95F4;&#x9699;&#x8FDB;&#x884C;insert&#xFF0C;&#x4EA7;&#x751F;&#x5E7B;&#x8BFB;&#x3002;&#x5728;RR&#x9694;&#x79BB;&#x7EA7;&#x522B;&#x4E0B;&#x652F;&#x6301;&#x3002;</p>
</li>
<li>
<p><strong>&#x4E34;&#x952E;&#x9501;</strong>&#xFF08;Next-Key Lock&#xFF09;&#xFF1A;&#x884C;&#x9501;&#x548C;&#x95F4;&#x9699;&#x9501;&#x7EC4;&#x5408;&#xFF0C;&#x540C;&#x65F6;&#x9501;&#x4F4F;&#x6570;&#x636E;&#x4EE5;&#x53CA;&#x6570;&#x636E;&#x524D;&#x9762;&#x7684;&#x95F4;&#x9699;&#x3002;&#x5728;RR&#x9694;&#x79BB;&#x7EA7;&#x522B;&#x4E0B;&#x652F;&#x6301;&#x3002;</p>
</li>
</ol>
<p>&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;InnoDB&#x5728;RR&#x9694;&#x79BB;&#x7EA7;&#x522B;&#x8FD0;&#x884C;&#xFF0C;&#x4F7F;&#x7528;next-key&#x9501;&#x8FDB;&#x884C;&#x641C;&#x7D22;&#x548C;&#x7D22;&#x5F15;&#x626B;&#x63CF;&#xFF0C;&#x4EE5;&#x9632;&#x6B62;&#x5E7B;&#x8BFB;&#x3002;</p>
<ol>
<li>&#x7D22;&#x5F15;&#x4E0A;&#x7684;&#x7B49;&#x503C;&#x67E5;&#x8BE2;&#xFF08;&#x552F;&#x4E00;&#x7D22;&#x5F15;&#xFF09;&#xFF0C;&#x7ED9;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x8BB0;&#x5F55;&#x52A0;&#x9501;&#x65F6;&#xFF0C;&#x4F18;&#x5316;&#x4E3A;&#x95F4;&#x9699;&#x9501;&#x3002;</li>
<li>&#x7D22;&#x5F15;&#x4E0A;&#x7684;&#x7B49;&#x503C;&#x67E5;&#x8BE2;&#xFF08;&#x666E;&#x901A;&#x7D22;&#x5F15;&#xFF09;&#xFF0C;&#x5411;&#x53F3;&#x904D;&#x5386;&#x65F6;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x503C;&#x4E0D;&#x6EE1;&#x8DB3;&#x67E5;&#x8BE2;&#x9700;&#x6C42;&#x65F6;&#xFF0C;next-key lock&#x9000;&#x5316;&#x4E3A;&#x95F4;&#x9699;&#x9501;&#x3002;</li>
<li>&#x7D22;&#x5F15;&#x4E0A;&#x7684;&#x8303;&#x56F4;&#x67E5;&#x8BE2;&#xFF08;&#x552F;&#x4E00;&#x7D22;&#x5F15;&#xFF09;&#x4F1A;&#x8BBF;&#x95EE;&#x5230;&#x4E0D;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x503C;&#x4E3A;&#x6B62;&#x3002;</li>
</ol>
<p>&#x5171;&#x4EAB;&#x9501;&#xFF08;S&#xFF09;&#xFF1A;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x4E8B;&#x52A1;&#x8BFB;&#x4E00;&#x884C;&#xFF0C;&#x963B;&#x6B62;&#x5176;&#x4ED6;&#x4E8B;&#x52A1;&#x83B7;&#x5F97;&#x76F8;&#x540C;&#x6570;&#x636E;&#x96C6;&#x7684;&#x6392;&#x4ED6;&#x9501;&#x3002;</p>
<p>&#x6392;&#x4ED6;&#x9501;&#xFF08;X&#xFF09;&#xFF1A;&#x5141;&#x8BB8;&#x83B7;&#x53D6;&#x6392;&#x4ED6;&#x9501;&#x7684;&#x4E8B;&#x52A1;&#x66F4;&#x65B0;&#x6570;&#x636E;&#xFF0C;&#x963B;&#x6B62;&#x5176;&#x4ED6;&#x4E8B;&#x52A1;&#x83B7;&#x5F97;&#x76F8;&#x540C;&#x6570;&#x636E;&#x96C6;&#x7684;&#x5171;&#x4EAB;&#x9501;&#x548C;&#x6392;&#x4ED6;&#x9501;&#x3002;</p>
<h2 id="innodb%E5%BC%95%E6%93%8E">InnoDB&#x5F15;&#x64CE;</h2>
<h3 id="%E9%80%BB%E8%BE%91%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%84">&#x903B;&#x8F91;&#x5B58;&#x50A8;&#x7ED3;&#x6784;</h3>
<p><strong>&#x8868;&#x7A7A;&#x95F4;</strong>&#xFF08;idb&#x6587;&#x4EF6;&#xFF09;&#xFF0C;&#x4E00;&#x4E2A;mysql&#x5B9E;&#x4F8B;&#x53EF;&#x4EE5;&#x5BF9;&#x5E94;&#x591A;&#x4E2A;&#x8868;&#x7A7A;&#x95F4;&#xFF0C;&#x7528;&#x4E8E;&#x5B58;&#x50A8;&#x8BB0;&#x5F55;&#x3001;&#x7D22;&#x5F15;&#x7B49;&#x6570;&#x636E;&#x3002;</p>
<p><strong>&#x6BB5;</strong>&#xFF0C;&#x5206;&#x4E3A;&#x6570;&#x636E;&#x6BB5;&#xFF08;Leaf node segment&#xFF09;&#x3001;&#x7D22;&#x5F15;&#x6BB5;&#xFF08;Non-leaf node segment&#xFF09;&#x3001;&#x56DE;&#x6EDA;&#x6BB5;&#xFF08;Rollback segment&#xFF09;&#xFF0C;InnoDB&#x662F;&#x7D22;&#x5F15;&#x7EC4;&#x7EC7;&#x8868;&#xFF0C;&#x6570;&#x636E;&#x6BB5;&#x5C31;&#x7B97;B+&#x6811;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF0C;&#x7D22;&#x5F15;&#x6BB5;&#x5373;&#x4E3A;B+&#x6811;&#x7684;&#x975E;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x3002;&#x6BB5;&#x7528;&#x6765;&#x7BA1;&#x7406;&#x591A;&#x4E2A;&#x533A;&#x3002;</p>
<p><strong>&#x533A;</strong>&#xFF0C;&#x8868;&#x7A7A;&#x95F4;&#x7684;&#x5355;&#x5143;&#x7ED3;&#x6784;&#xFF0C;&#x6BCF;&#x4E2A;&#x533A;&#x7684;&#x5927;&#x5C0F;&#x4E3A;1M&#x3002;&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x4E0B;InnoDB&#x5F15;&#x64CE;&#x9875;&#x7684;&#x5927;&#x5C0F;&#x4E3A;16k&#xFF0C;&#x5373;&#x4E00;&#x4E2A;&#x533A;&#x4E2D;&#x4E00;&#x5171;&#x6709;64&#x4E2A;&#x8FDE;&#x7EED;&#x7684;&#x9875;&#x3002;</p>
<p><strong>&#x9875;</strong>&#xFF0C;&#x662F;InnoDB&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x78C1;&#x76D8;&#x7BA1;&#x7406;&#x7684;&#x6700;&#x5C0F;&#x5355;&#x5143;&#xFF0C;&#x6BCF;&#x4E2A;&#x9875;&#x5927;&#x5C0F;&#x9ED8;&#x8BA4;&#x4E3A;16KB&#x3002;&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;&#x9875;&#x7684;&#x8FDE;&#x7EED;&#x6027;&#xFF0C;InnoDB&#x6BCF;&#x6B21;&#x5411;&#x78C1;&#x76D8;&#x7533;&#x8BF7;4-5&#x4E2A;&#x533A;&#x3002;</p>
<p><strong>&#x884C;</strong>&#xFF0C;InnoDB&#x5B58;&#x50A8;&#x5F15;&#x64CE;&#x6570;&#x636E;&#x662F;&#x6309;&#x884C;&#x8FDB;&#x884C;&#x5B58;&#x653E;&#x7684;&#x3002;&#x884C;&#x5934;Trx_id&#x4E8B;&#x52A1;id&#x3001;Roll_pointer&#x56DE;&#x6EDA;&#x6307;&#x9488;&#x3002;</p>
<h3 id="%E6%9E%B6%E6%9E%84">&#x67B6;&#x6784;</h3>
<p>&#x5185;&#x5B58;&#x67B6;&#x6784;</p>
<p>Buffer Pool &#x7F13;&#x51B2;&#x6C60;</p>
<p>Change Buffer &#x66F4;&#x6539;&#x7F13;&#x51B2;&#x533A;</p>
<p>Adaptive Hash Index &#x81EA;&#x9002;&#x5E94;hash&#x7D22;&#x5F15;</p>
<p>Log Buffer &#x65E5;&#x5FD7;&#x7F13;&#x51B2;&#x533A;</p>
<p>&#x78C1;&#x76D8;&#x67B6;&#x6784;</p>
<h3 id="%E4%BA%8B%E5%8A%A1%E5%8E%9F%E7%90%86">&#x4E8B;&#x52A1;&#x539F;&#x7406;</h3>
<p><strong>redo log &#x91CD;&#x505A;&#x65E5;&#x5FD7;</strong>&#x8BB0;&#x5F55;&#x7684;&#x662F;&#x4E8B;&#x52A1;&#x63D0;&#x4EA4;&#x65F6;&#x6570;&#x636E;&#x9875;&#x7684;&#x7269;&#x7406;&#x4FEE;&#x6539;&#xFF0C;&#x7528;&#x6765;&#x5B9E;&#x73B0;&#x4E8B;&#x52A1;&#x7684;&#x6301;&#x4E45;&#x6027;&#x3002;&#x6587;&#x4EF6;&#x7531;&#x4E24;&#x90E8;&#x5206;&#x7EC4;&#x6210;&#xFF1A;&#x91CD;&#x505A;&#x65E5;&#x5FD7;&#x7F13;&#x51B2;&#xFF08;redo log buffer&#xFF09;&#xFF08;&#x5185;&#x5B58;&#x4E2D;&#xFF09;&#x4EE5;&#x53CA;&#x91CD;&#x505A;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#xFF08;redo log file&#xFF09;&#xFF08;&#x78C1;&#x76D8;&#x4E2D;&#xFF09;&#x3002;&#x4E8B;&#x52A1;&#x63D0;&#x4EA4;&#x540E;&#x4F1A;&#x628A;&#x6240;&#x6709;&#x4FEE;&#x6539;&#x4FE1;&#x606F;&#x90FD;&#x5B58;&#x5230;&#x8BE5;&#x65E5;&#x5FD7;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x7528;&#x4E8E;&#x5728;&#x5237;&#x65B0;&#x810F;&#x9875;&#x5230;&#x78C1;&#x76D8;&#xFF0C;&#x53D1;&#x751F;&#x9519;&#x8BEF;&#x65F6;&#xFF0C;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x6062;&#x590D;&#x4F7F;&#x7528;&#x3002;</p>
<p><strong>undo log &#x56DE;&#x6EDA;&#x65E5;&#x5FD7;</strong>&#x7528;&#x4E8E;&#x8BB0;&#x5F55;&#x6570;&#x636E;&#x88AB;&#x4FEE;&#x6539;&#x524D;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x7528;&#x6765;&#x4FDD;&#x8BC1;&#x4E8B;&#x52A1;&#x7684;&#x539F;&#x5B50;&#x6027;&#xFF0C;&#x63D0;&#x4F9B;&#x56DE;&#x6EDA;&#x548C;MVCC&#xFF08;&#x591A;&#x7248;&#x672C;&#x5E76;&#x53D1;&#x63A7;&#x5236;&#xFF09;&#x3002;undo log &#x662F;&#x903B;&#x8F91;&#x65E5;&#x5FD7;&#x3002;</p>
<h3 id="mvcc">MVCC</h3>
<p>Multi-Version Concurrency Control&#xFF0C;&#x591A;&#x7248;&#x672C;&#x5E76;&#x53D1;&#x63A7;&#x5236;&#xFF0C;&#x6307;&#x7EF4;&#x62A4;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7684;&#x591A;&#x4E2A;&#x7248;&#x672C;&#xFF0C;&#x4F7F;&#x5F97;&#x8BFB;&#x5199;&#x64CD;&#x4F5C;&#x6CA1;&#x6709;&#x51B2;&#x7A81;&#xFF0C;&#x5FEB;&#x7167;&#x8BFB;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x4E2A;&#x975E;&#x963B;&#x585E;&#x8BFB;&#x529F;&#x80FD;&#x3002;MVCC&#x5177;&#x4F53;&#x5B9E;&#x73B0;&#x4F9D;&#x8D56;&#x4E8E;&#x4E09;&#x4E2A;&#x9690;&#x5F0F;&#x5B57;&#x6BB5;&#x3001;undo log &#x65E5;&#x5FD7;&#x548C;readView&#x3002;</p>
<p><strong>&#x5F53;&#x524D;&#x8BFB;</strong>&#x8BFB;&#x53D6;&#x7684;&#x662F;&#x8BB0;&#x5F55;&#x7684;&#x6700;&#x65B0;&#x7248;&#x672C;&#xFF0C;&#x8BFB;&#x53D6;&#x65F6;&#x8FD8;&#x8981;&#x4FDD;&#x8BC1;&#x5176;&#x4ED6;&#x5E76;&#x53D1;&#x4E8B;&#x52A1;&#x4E0D;&#x80FD;&#x4FEE;&#x6539;&#x5F53;&#x524D;&#x8BB0;&#x5F55;&#xFF0C;&#x4F1A;&#x5BF9;&#x8BFB;&#x53D6;&#x7684;&#x8BB0;&#x5F55;&#x8FDB;&#x884C;&#x52A0;&#x9501;&#x3002;</p>
<p><strong>&#x5FEB;&#x7167;&#x8BFB;</strong>&#x5C31;&#x662F;&#x7B80;&#x5355;&#x7684;select&#xFF08;&#x4E0D;&#x52A0;&#x9501;&#xFF09;&#xFF0C;&#x8BFB;&#x53D6;&#x7684;&#x65F6;&#x8BB0;&#x5F55;&#x6570;&#x636E;&#x7684;&#x53EF;&#x89C1;&#x7248;&#x672C;&#xFF0C;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x5386;&#x53F2;&#x6570;&#x636E;&#xFF0C;&#x4E0D;&#x52A0;&#x9501;&#xFF0C;&#x662F;&#x975E;&#x963B;&#x585E;&#x8BFB;&#x3002;</p>
<p>RC&#xFF1A;&#x6BCF;&#x6B21;select&#x90FD;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x5FEB;&#x7167;&#x8BFB;&#x3002;</p>
<p>RR&#xFF1A;&#x5F00;&#x542F;&#x4E8B;&#x52A1;&#x540E;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;select&#x8BED;&#x53E5;&#x624D;&#x662F;&#x5FEB;&#x7167;&#x8BFB;&#x7684;&#x5730;&#x65B9;&#x3002;</p>
<p>Serializable&#xFF1A;&#x5FEB;&#x7167;&#x8BFB;&#x4F1A;&#x9000;&#x5316;&#x4E3A;&#x5F53;&#x524D;&#x8BFB;&#x3002;</p>
<ul>
<li>
<p>&#x8BB0;&#x5F55;&#x4E2D;&#x7684;&#x9690;&#x5F0F;&#x5B57;&#x6BB5;</p>
<p>DB_TRX_ID &#x6700;&#x8FD1;&#x4FEE;&#x6539;&#x4E8B;&#x52A1;ID&#xFF0C;&#x8BB0;&#x5F55;&#x63D2;&#x5165;&#x8FD9;&#x6761;&#x8BB0;&#x5F55;&#x6216;&#x6700;&#x540E;&#x4E00;&#x6B21;&#x4FEE;&#x6539;&#x8BE5;&#x8BB0;&#x5F55;&#x7684;&#x4E8B;&#x52A1;ID&#x3002;</p>
<p>EB_ROLL_PTR &#x56DE;&#x6EDA;&#x6307;&#x9488;&#xFF0C;&#x6307;&#x5411;&#x8FD9;&#x6761;&#x8BB0;&#x5F55;&#x7684;&#x4E0A;&#x4E00;&#x4E2A;&#x7248;&#x672C;&#xFF0C;&#x914D;&#x5408;undo log&#xFF0C;&#x6307;&#x5411;&#x4E0A;&#x4E00;&#x4E2A;&#x7248;&#x672C;&#x3002;</p>
<p>DB_ROW_ID &#x9690;&#x85CF;&#x4E3B;&#x952E;&#xFF0C;&#x5982;&#x679C;&#x8868;&#x7ED3;&#x6784;&#x6CA1;&#x6709;&#x6307;&#x5B9A;&#x4E3B;&#x952E;&#xFF0C;&#x5C06;&#x4F1A;&#x751F;&#x6210;&#x8BE5;&#x9690;&#x85CF;&#x5B57;&#x6BB5;&#x3002;</p>
</li>
<li>
<p>undo log</p>
<p>insert&#x65F6;&#x4EA7;&#x751F;&#x7684;undo log &#x65E5;&#x5FD7;&#x53EA;&#x5728;&#x56DE;&#x6EDA;&#x65F6;&#x9700;&#x8981;&#xFF0C;&#x4E8B;&#x52A1;&#x63D0;&#x4EA4;&#x540E;&#x53EF;&#x4EE5;&#x88AB;&#x5220;&#x9664;&#x3002;</p>
<p>update&#x3001;delete&#x65F6;&#xFF0C;&#x4EA7;&#x751F;&#x7684;undo log &#x4E0D;&#x4EC5;&#x5728;&#x56DE;&#x6EDA;&#x65F6;&#x9700;&#x8981;&#xFF0C;&#x5FEB;&#x7167;&#x8BFB;&#x65F6;&#x4E5F;&#x9700;&#x8981;&#xFF0C;&#x4E0D;&#x4F1A;&#x7ACB;&#x5373;&#x88AB;&#x5220;&#x9664;&#x3002;</p>
<p><strong>undo log &#x7248;&#x672C;&#x94FE;</strong> &#x4E0D;&#x540C;&#x4E8B;&#x7269;&#x6216;&#x76F8;&#x540C;&#x4E8B;&#x52A1;&#x5BF9;&#x540C;&#x4E00;&#x6761;&#x8BB0;&#x5F55;&#x8FDB;&#x884C;&#x4FEE;&#x6539;&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4;&#x8BE5;&#x8BB0;&#x5F55;&#x7684;undolog&#x751F;&#x6210;&#x4E00;&#x6761;&#x8BB0;&#x5F55;&#x7248;&#x672C;&#x94FE;&#x8868;&#xFF0C;&#x94FE;&#x8868;&#x7684;&#x5934;&#x90E8;&#x662F;&#x6700;&#x65B0;&#x7684;&#x65E7;&#x8BB0;&#x5F55;&#xFF0C;&#x94FE;&#x8868;&#x5C3E;&#x90E8;&#x662F;&#x6700;&#x65E9;&#x7684;&#x65E7;&#x8BB0;&#x5F55;&#x3002;</p>
</li>
<li>
<p>readView</p>
<p>&#x8BFB;&#x89C6;&#x56FE;&#x662F;&#x5FEB;&#x7167;&#x8BFB;SQL&#x6267;&#x884C;&#x65F6;MVCC&#x63D0;&#x53D6;&#x6570;&#x636E;&#x7684;&#x4F9D;&#x636E;&#xFF0C;&#x8BB0;&#x5F55;&#x5E76;&#x7EF4;&#x62A4;&#x7CFB;&#x7EDF;&#x5F53;&#x524D;&#x6D3B;&#x8DC3;&#x7684;&#x4E8B;&#x52A1;&#xFF08;&#x672A;&#x63D0;&#x4EA4;&#x7684;&#xFF09;id&#x3002;&#x56DB;&#x4E2A;&#x6838;&#x5FC3;&#x5B57;&#x6BB5;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>&#x5B57;&#x6BB5;</th>
<th>&#x542B;&#x4E49;</th>
</tr>
</thead>
<tbody>
<tr>
<td>m_ids</td>
<td>&#x5F53;&#x524D;&#x6D3B;&#x8DC3;&#x7684;&#x4E8B;&#x52A1;ID&#x96C6;&#x5408;</td>
</tr>
<tr>
<td>min_trx_id</td>
<td>&#x6700;&#x5C0F;&#x6D3B;&#x8DC3;&#x4E8B;&#x52A1;ID</td>
</tr>
<tr>
<td>max_trx_id</td>
<td>&#x9884;&#x5206;&#x914D;&#x4E8B;&#x52A1;ID&#xFF0C;&#x5F53;&#x524D;&#x6700;&#x5927;&#x4E8B;&#x52A1;ID+1&#xFF08;&#x4E8B;&#x52A1;ID&#x662F;&#x81EA;&#x589E;&#x7684;&#xFF09;</td>
</tr>
<tr>
<td>creator_trx_id</td>
<td>ReadView&#x521B;&#x5EFA;&#x8005;&#x4E8B;&#x52A1;ID</td>
</tr>
</tbody>
</table>
<ol>
<li>trx_id==creator_trx_id &#x6570;&#x636E;&#x662F;&#x5F53;&#x524D;&#x4E8B;&#x52A1;&#x66F4;&#x6539;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8BE5;&#x7248;&#x672C;</li>
<li>trx_id&lt;min_trxx_id &#x6570;&#x636E;&#x5DF2;&#x7ECF;&#x63D0;&#x4EA4;&#x4E86;&#xFF0C;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8BE5;&#x7248;&#x672C;&#x3002;</li>
<li>trx_id&gt;max_trx_id &#x5F53;&#x524D;&#x4E8B;&#x52A1;&#x5728;ReadView&#x751F;&#x6210;&#x540E;&#x624D;&#x5F00;&#x542F;&#x7684;&#x3002;</li>
<li>min&lt;=trx_id&lt;=max trx_id&#x4E0D;&#x5728;m_ids&#x4E2D;&#xFF0C;&#x8BF4;&#x660E;&#x6570;&#x636E;&#x5DF2;&#x7ECF;&#x63D0;&#x4EA4;&#xFF0C;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8BE5;&#x7248;&#x672C;&#x3002;</li>
</ol>
</li>
</ul>
<p>&#x4E0D;&#x540C;&#x7684;&#x9694;&#x79BB;&#x7EA7;&#x522B;&#xFF0C;&#x751F;&#x6210;ReadView&#x7684;&#x65F6;&#x673A;&#x4E0D;&#x540C;&#xFF1A;</p>
<ul>
<li>RC&#xFF1A;&#x5728;&#x4E8B;&#x52A1;&#x4E2D;&#x6BCF;&#x4E00;&#x6B21;&#x6267;&#x884C;&#x5FEB;&#x7167;&#x8BFB;&#x65F6;&#x751F;&#x6210;ReadView&#x3002;</li>
<li>RR&#xFF1A;&#x4EC5;&#x5728;&#x4E8B;&#x52A1;&#x4E2D;&#x7B2C;&#x4E00;&#x6B21;&#x6267;&#x884C;&#x5FEB;&#x7167;&#x8BFB;&#x65F6;&#x751F;&#x6210;ReadView&#xFF0C;&#x540E;&#x7EED;&#x590D;&#x7528;&#x8BE5;ReadView&#x3002;</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><h2 id="%E5%88%86%E5%BA%93%E5%88%86%E8%A1%A8">&#x5206;&#x5E93;&#x5206;&#x8868;</h2>
<h3 id="%E4%BB%8B%E7%BB%8D">&#x4ECB;&#x7ECD;</h3>
<p>&#x5355;&#x6570;&#x636E;&#x5E93;&#x6570;&#x636E;&#x5B58;&#x50A8;&#x5B58;&#x5728;&#x6027;&#x80FD;&#x74F6;&#x9888;&#xFF1A;</p>
<ol>
<li>IO&#x74F6;&#x9888;&#xFF1A;&#x70ED;&#x70B9;&#x6570;&#x636E;&#x592A;&#x591A;&#xFF0C;&#x6570;&#x636E;&#x5E93;&#x7F13;&#x5B58;&#x4E0D;&#x8DB3;&#xFF0C;&#x4EA7;&#x751F;&#x5927;&#x91CF;&#x78C1;&#x76D8;IO&#x3002;&#x8BF7;&#x6C42;&#x6570;&#x636E;&#x592A;&#x591A;&#xFF0C;&#x5E26;&#x5BBD;&#x4E0D;&#x591F;&#xFF0C;&#x7F51;&#x7EDC;IO&#x74F6;&#x9888;</li>
<li>CPU&#x74F6;&#x9888;&#xFF1A;&#x6392;&#x5E8F;&#x3001;&#x5206;&#x7EC4;&#x3001;&#x8FDE;&#x63A5;&#x67E5;&#x8BE2;&#x3001;&#x805A;&#x5408;&#x7EDF;&#x8BA1;&#x7B49;SQL&#x4F1A;&#x8017;&#x8D39;&#x5927;&#x91CF;COU&#x8D44;&#x6E90;&#xFF0C;&#x8BF7;&#x6C42;&#x6570;&#x592A;&#x591A;&#xFF0C;CPU&#x74F6;&#x9888;</li>
</ol>
<p>&#x5206;&#x5E93;&#x5206;&#x8868;&#x7684;&#x4E2D;&#x5FC3;&#x601D;&#x60F3;&#x90FD;&#x662F;&#x5C06;&#x6570;&#x636E;&#x5206;&#x6563;&#x5B58;&#x50A8;&#xFF0C;&#x4F7F;&#x5F97;&#x5355;&#x4E00;&#x6570;&#x636E;&#x5E93;/&#x8868;&#x7684;&#x6570;&#x636E;&#x91CF;&#x53D8;&#x5C0F;&#x6765;&#x7F13;&#x89E3;&#x5355;&#x4E00;&#x6570;&#x636E;&#x5E93;&#x7684;&#x6027;&#x80FD;&#x95EE;&#x9898;&#xFF0C;&#x4ECE;&#x800C;&#x63D0;&#x5347;&#x6570;&#x636E;&#x5E93;&#x7684;&#x6027;&#x80FD;&#x3002;</p>
<h4 id="%E6%8B%86%E5%88%86%E7%AD%96%E7%95%A5">&#x62C6;&#x5206;&#x7B56;&#x7565;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/c46d3f5dd403a9e2.png" alt="MySQL &#x5B66;&#x4E60;&#x7B14;&#x8BB0;" loading="lazy"></p>
<h4 id="%E5%9E%82%E7%9B%B4%E6%8B%86%E5%88%86">&#x5782;&#x76F4;&#x62C6;&#x5206;</h4>
<p><strong>&#x5782;&#x76F4;&#x5206;&#x5E93;</strong>&#xFF1A;&#x4EE5;&#x8868;&#x4E3A;&#x4F9D;&#x636E;&#xFF0C;&#x6839;&#x636E;&#x4E1A;&#x52A1;&#x5C06;&#x4E0D;&#x540C;&#x8868;&#x62C6;&#x5206;&#x5230;&#x4E0D;&#x540C;&#x5E93;&#x4E2D;&#x3002;&#x7279;&#x70B9;&#xFF1A;</p>
<ol>
<li>&#x6BCF;&#x4E2A;&#x5E93;&#x8868;&#x7ED3;&#x6784;&#x90FD;&#x4E0D;&#x4E00;&#x6837;</li>
<li>&#x6BCF;&#x4E2A;&#x5E93;&#x7684;&#x6570;&#x636E;&#x4E5F;&#x4E0D;&#x4E00;&#x6837;</li>
<li>&#x6240;&#x6709;&#x5E93;&#x7684;&#x5E76;&#x96C6;&#x662F;&#x5168;&#x91CF;&#x6570;&#x636E;</li>
</ol>
<p><strong>&#x5782;&#x76F4;&#x5206;&#x8868;</strong>&#xFF1A;&#x4EE5;&#x5B57;&#x6BB5;&#x4E3A;&#x4F9D;&#x636E;&#xFF0C;&#x6839;&#x636E;&#x5B57;&#x6BB5;&#x5C5E;&#x6027;&#x4E0D;&#x540C;&#x5C06;&#x4E0D;&#x540C;&#x5B57;&#x6BB5;&#x62C6;&#x5206;&#x5230;&#x4E0D;&#x540C;&#x8868;&#x4E2D;&#x3002;&#x7279;&#x70B9;&#xFF1A;</p>
<ol>
<li>&#x6BCF;&#x4E2A;&#x8868;&#x7ED3;&#x6784;&#x4E0D;&#x4E00;&#x6837;</li>
<li>&#x6BCF;&#x4E2A;&#x8868;&#x6570;&#x636E;&#x4E5F;&#x4E0D;&#x4E00;&#x6837;&#xFF0C;&#x4E00;&#x822C;&#x901A;&#x8FC7;&#x4E00;&#x5217;&#xFF08;&#x5916;&#x952E;/&#x4E3B;&#x952E;&#xFF09;&#x5173;&#x8054;</li>
<li>&#x6240;&#x6709;&#x8868;&#x7684;&#x5E76;&#x96C6;&#x662F;&#x5168;&#x91CF;&#x6570;&#x636E;</li>
</ol>
<h4 id="%E6%B0%B4%E5%B9%B3%E6%8B%86%E5%88%86">&#x6C34;&#x5E73;&#x62C6;&#x5206;</h4>
<p>&#x6C34;&#x5E73;&#x5206;&#x5E93;&#xFF1A;&#x4EE5;&#x5B57;&#x6BB5;&#x4E3A;&#x4F9D;&#x636E;&#xFF0C;&#x4F9D;&#x7167;&#x4E00;&#x5B9A;&#x7B56;&#x7565;&#xFF0C;&#x5C06;&#x4E00;&#x4E2A;&#x5E93;&#x7684;&#x6570;&#x636E;&#x62C6;&#x5206;&#x5230;&#x591A;&#x4E2A;&#x5E93;&#x4E2D;&#x3002;&#x7279;&#x70B9;&#xFF1A;</p>
<ol>
<li>&#x6BCF;&#x4E2A;&#x5E93;&#x7684;&#x8868;&#x7ED3;&#x6784;&#x90FD;&#x4E00;&#x6837;</li>
<li>&#x6BCF;&#x4E2A;&#x5E93;&#x7684;&#x6570;&#x636E;&#x90FD;&#x4E0D;&#x4E00;&#x6837;</li>
<li>&#x6240;&#x6709;&#x5E93;&#x7684;&#x5E76;&#x96C6;&#x662F;&#x5168;&#x91CF;&#x6570;&#x636E;</li>
</ol>
<p>&#x6C34;&#x5E73;&#x5206;&#x8868;&#xFF1A;&#x4EE5;&#x5B57;&#x6BB5;&#x4E3A;&#x4F9D;&#x636E;&#xFF0C;&#x6309;&#x7167;&#x4E00;&#x5B9A;&#x7B56;&#x7565;&#xFF0C;&#x5C06;&#x4E00;&#x4E2A;&#x8868;&#x7684;&#x6570;&#x636E;&#x62C6;&#x5206;&#x5230;&#x591A;&#x4E2A;&#x8868;&#x4E2D;&#x3002;</p>
<ol>
<li>&#x6BCF;&#x4E2A;&#x8868;&#x7684;&#x8868;&#x7ED3;&#x6784;&#x90FD;&#x4E00;&#x6837;</li>
<li>&#x6BCF;&#x4E2A;&#x8868;&#x7684;&#x6570;&#x636E;&#x90FD;&#x4E0D;&#x4E00;&#x6837;</li>
<li>&#x6240;&#x6709;&#x8868;&#x7684;&#x5E76;&#x96C6;&#x662F;&#x5168;&#x91CF;&#x6570;&#x636E;</li>
</ol>
<h4 id="%E5%AE%9E%E7%8E%B0%E6%8A%80%E6%9C%AF">&#x5B9E;&#x73B0;&#x6280;&#x672F;</h4>
<ul>
<li>shardingJDBC&#xFF1A;&#x57FA;&#x4E8E;AOP&#x539F;&#x7406;&#xFF0C;&#x5728;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x4E2D;&#x5BF9;&#x672C;&#x5730;&#x6267;&#x884C;&#x7684;SQL&#x8FDB;&#x884C;&#x62E6;&#x622A;&#x3001;&#x89E3;&#x6790;&#x3001;&#x6539;&#x5199;&#x3001;&#x8DEF;&#x7531;&#x5904;&#x7406;&#x3002;&#x9700;&#x8981;&#x81EA;&#x884C;&#x7F16;&#x7801;&#x914D;&#x7F6E;&#x5B9E;&#x73B0;&#xFF0C;&#x53EA;&#x652F;&#x6301;java&#xFF0C;&#x6027;&#x80FD;&#x8F83;&#x9AD8;</li>
<li>Mycat&#xFF1A;&#x6570;&#x636E;&#x5E93;&#x5206;&#x5E93;&#x5206;&#x8868;&#x4E2D;&#x95F4;&#x4EF6;&#xFF0C;&#x4E0D;&#x7528;&#x8C03;&#x6574;&#x4EE3;&#x7801;&#x5373;&#x53EF;&#x5B9E;&#x73B0;&#x5206;&#x5E93;&#x5206;&#x8868;&#xFF0C;&#x652F;&#x6301;&#x591A;&#x79CD;&#x8BED;&#x8A00;&#xFF0C;&#x6027;&#x80FD;&#x4E0D;&#x53CA;&#x524D;&#x8005;</li>
</ul>
<h3 id="mycat%E6%A6%82%E8%BF%B0">Mycat&#x6982;&#x8FF0;</h3>
<h4 id="%E6%A6%82%E5%BF%B5%E4%BB%8B%E7%BB%8D">&#x6982;&#x5FF5;&#x4ECB;&#x7ECD;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/d04db26b13c7c649.png" alt="MySQL &#x5B66;&#x4E60;&#x7B14;&#x8BB0;" loading="lazy"></p>
<h3 id="mycat%E5%85%A5%E9%97%A8">Mycat&#x5165;&#x95E8;</h3>
<ul>
<li>
<p>&#x5B89;&#x88C5;</p>
</li>
<li>
<p>&#x73AF;&#x5883;&#x51C6;&#x5907;</p>
</li>
<li>
<p>Mycat&#x914D;&#x7F6E;&#xFF08;schema.xml&#x3001;server.xml&#x3001;rule.xml&#xFF09;</p>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/e5bd558c2bc16283.png" alt="MySQL &#x5B66;&#x4E60;&#x7B14;&#x8BB0;" loading="lazy"></p>
</li>
</ul>
<h3 id="mycat%E9%85%8D%E7%BD%AE">Mycat&#x914D;&#x7F6E;</h3>
<p>schema.xml &#x6DB5;&#x76D6;&#x4E86;Mycat&#x7684;&#x903B;&#x8F91;&#x5E93;&#x3001;&#x903B;&#x8F91;&#x8868;&#x3001;&#x5206;&#x7247;&#x89C4;&#x5219;&#x3001;&#x5206;&#x7247;&#x8282;&#x70B9;&#x53CA;&#x6570;&#x636E;&#x6E90;&#x914D;&#x7F6E;&#x3002;</p>
<ul>
<li>schema&#x6807;&#x7B7E;&#x7528;&#x4E8E;&#x5B9A;&#x4E49;Mycat&#x5B9E;&#x4F8B;&#x4E2D;&#x7684;&#x903B;&#x8F91;&#x5E93;&#xFF0C;&#x4E00;&#x4E2A;Mycat&#x5B9E;&#x4F8B;&#x4E2D;&#xFF0C;&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x903B;&#x8F91;&#x5E93;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;schema&#x6807;&#x7B7E;&#x6765;&#x5212;&#x5206;&#x4E0D;&#x540C;&#x7684;&#x903B;&#x8F91;&#x5E93;&#x3002;Mycat&#x4E2D;&#x903B;&#x8F91;&#x5E93;&#x7684;&#x6982;&#x5FF5;&#x7B49;&#x540C;&#x4E8E;MySQL&#x4E2D;&#x7684;database&#x6982;&#x5FF5;&#x3002;&#x9700;&#x8981;&#x64CD;&#x4F5C;&#x67D0;&#x4E2A;&#x903B;&#x8F91;&#x5E93;&#x4E0B;&#x7684;&#x8868;&#x65F6;&#xFF0C;&#x4E5F;&#x9700;&#x8981;&#x5207;&#x6362;&#x903B;&#x8F91;&#x5E93;&#xFF08;use xxx&#xFF09;</li>
<li>datanode&#x6807;&#x7B7E;&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;Mycat&#x4E2D;&#x7684;&#x6570;&#x636E;&#x8282;&#x70B9;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x901A;&#x5E38;&#x8BF4;&#x7684;&#x6570;&#x636E;&#x5206;&#x7247;&#x3002;&#x4E00;&#x4E2A;dataNode&#x6807;&#x7B7E;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x72EC;&#x7ACB;&#x7684;&#x6570;&#x636E;&#x5206;&#x7247;&#x3002;</li>
<li>datahost&#x6807;&#x7B7E;&#x5728;Mycat&#x903B;&#x8F91;&#x5E93;&#x4E2D;&#x4F5C;&#x4E3A;&#x5E95;&#x5C42;&#x6807;&#x7B7E;&#x5B58;&#x5728;&#xFF0C;&#x76F4;&#x63A5;&#x5B9A;&#x4E49;&#x4E86;&#x5177;&#x4F53;&#x7684;&#x6570;&#x636E;&#x5E93;&#x5B9E;&#x4F8B;&#x3001;&#x8BFB;&#x5199;&#x5206;&#x79BB;&#x3001;&#x5FC3;&#x8DF3;&#x8BED;&#x53E5;&#x3002;</li>
</ul>
<p>server.xml&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x5305;&#x542B;Mycat&#x7684;&#x7CFB;&#x7EDF;&#x914D;&#x7F6E;&#x4FE1;&#x606F;&#xFF0C;&#x4E3B;&#x8981;&#x6709;&#x4E24;&#x4E2A;&#x91CD;&#x8981;&#x6807;&#x7B7E;&#xFF1A;system&#x3001;user</p>
<p>rule.xml&#x4E2D;&#x5B9A;&#x4E49;&#x6240;&#x6709;&#x62C6;&#x5206;&#x8868;&#x7684;&#x89C4;&#x5219;&#xFF0C;&#x5728;&#x4F7F;&#x7528;&#x8FC7;&#x7A0B;&#x4E2D;&#x53EF;&#x4EE5;&#x7075;&#x6D3B;&#x7684;&#x4F7F;&#x7528;&#x5206;&#x7247;&#x7B97;&#x6CD5;&#xFF0C;&#x6216;&#x8005;&#x5BF9;&#x540C;&#x4E00;&#x4E2A;&#x5206;&#x7247;&#x7B97;&#x6CD5;&#x4F7F;&#x7528;&#x4E0D;&#x540C;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x5B83;&#x8BA9;&#x5206;&#x7247;&#x8FC7;&#x7A0B;&#x53EF;&#x914D;&#x7F6E;&#x5316;&#x3002;&#x4E3B;&#x8981;&#x5305;&#x542B;&#x4E24;&#x7C7B;&#x6807;&#x7B7E;&#xFF1A;tableRule&#x3001;Function</p>
<h3 id="mycat%E5%88%86%E7%89%87">Mycat&#x5206;&#x7247;</h3>
<ul>
<li>
<p>&#x5206;&#x7247;&#x89C4;&#x5219;-&#x8303;&#x56F4;</p>
<p>&#x6839;&#x636E;&#x6307;&#x5B9A;&#x7684;&#x5B57;&#x6BB5;&#x53CA;&#x5176;&#x914D;&#x7F6E;&#x7684;&#x8303;&#x56F4;&#x4E0E;&#x6570;&#x636E;&#x8282;&#x70B9;&#x7684;&#x5BF9;&#x5E94;&#x60C5;&#x51B5;&#xFF0C;&#x6765;&#x51B3;&#x5B9A;&#x8BE5;&#x6570;&#x636E;&#x5C5E;&#x4E8E;&#x54EA;&#x4E00;&#x4E2A;&#x5206;&#x7247;</p>
</li>
<li>
<p>&#x5206;&#x7247;&#x89C4;&#x5219;-&#x53D6;&#x6A21;</p>
<p>&#x6839;&#x636E;&#x6307;&#x5B9A;&#x5B57;&#x6BB5;&#x4E0E;&#x8282;&#x70B9;&#x6570;&#x91CF;&#x8FDB;&#x884C;&#x7403;&#x78E8;&#x8FD0;&#x7B97;&#xFF0C;&#x6839;&#x636E;&#x8FD0;&#x7B97;&#x7ED3;&#x679C;&#x6765;&#x51B3;&#x5B9A;&#x8BE5;&#x6570;&#x636E;&#x5C5E;&#x4E8E;&#x54EA;&#x4E00;&#x4E2A;&#x5206;&#x7247;</p>
</li>
<li></li>
</ul>
<h3 id="mycat%E7%AE%A1%E7%90%86%E5%8F%8A%E7%9B%91%E6%8E%A7">Mycat&#x7BA1;&#x7406;&#x53CA;&#x76D1;&#x63A7;</h3>
<h4 id="mycat%E5%8E%9F%E7%90%86">Mycat&#x539F;&#x7406;</h4>
<p><img src="//tangkun-1304713332.cos.ap-shanghai.myqcloud.com/ghost/content/images/2023/03/062b32db906c6c0c.png" alt="MySQL &#x5B66;&#x4E60;&#x7B14;&#x8BB0;" loading="lazy"></p>
<h4 id="mycat%E7%AE%A1%E7%90%86">Mycat&#x7BA1;&#x7406;</h4>
<p>Mycat&#x9ED8;&#x8BA4;&#x5F00;&#x901A;2&#x4E2A;&#x7AEF;&#x53E3;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;server.xml&#x4E2D;&#x8FDB;&#x884C;&#x4FEE;&#x6539;&#x3002;</p>
<ul>
<li>8066&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x7AEF;&#x53E3;&#xFF0C;&#x5373;&#x8FDB;&#x884C;DML&#x548C;DDL&#x64CD;&#x4F5C;</li>
<li>9066&#x6570;&#x636E;&#x5E93;&#x7BA1;&#x7406;&#x7AEF;&#x53E3;&#xFF0C;&#x5373;mycat&#x670D;&#x52A1;&#x7BA1;&#x7406;&#x63A7;&#x5236;&#x529F;&#x80FD;&#xFF0C;&#x7528;&#x4E8E;&#x7BA1;&#x7406;mycat&#x7684;&#x6574;&#x4E2A;&#x96C6;&#x7FA4;&#x72B6;&#x6001;</li>
</ul>
<h2 id="%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB">&#x8BFB;&#x5199;&#x5206;&#x79BB;</h2>
<h3 id="%E4%BB%8B%E7%BB%8D">&#x4ECB;&#x7ECD;</h3>
<p>&#x8BFB;&#x5199;&#x5206;&#x79BB;&#xFF0C;&#x7B80;&#x5355;&#x5730;&#x8BF4;&#x5C31;&#x662F;&#x628A;&#x5BF9;&#x6570;&#x636E;&#x5E93;&#x7684;&#x8BFB;&#x548C;&#x5199;&#x64CD;&#x4F5C;&#x5206;&#x5F00;&#xFF0C;&#x4EE5;&#x5BF9;&#x5E94;&#x4E0D;&#x540C;&#x7684;&#x6570;&#x636E;&#x5E93;&#x670D;&#x52A1;&#x5668;&#x3002;&#x4E3B;&#x6570;&#x636E;&#x5E93;&#x63D0;&#x4F9B;&#x5199;&#x64CD;&#x4F5C;&#xFF0C;&#x4ECE;&#x6570;&#x636E;&#x5E93;&#x63D0;&#x4F9B;&#x8BFB;&#x64CD;&#x4F5C;&#xFF0C;&#x8FD9;&#x6837;&#x80FD;&#x6709;&#x6548;&#x7684;&#x51CF;&#x8F7B;&#x5355;&#x53F0;&#x6570;&#x636E;&#x5E93;&#x7684;&#x538B;&#x529B;&#x3002;</p>
<h3 id="%E4%B8%80%E4%B8%BB%E4%B8%80%E4%BB%8E">&#x4E00;&#x4E3B;&#x4E00;&#x4ECE;</h3>
<p>&#x539F;&#x7406;&#xFF1A;MySQL&#x7684;&#x4E3B;&#x4ECE;&#x590D;&#x5236;&#x662F;&#x57FA;&#x4E8E;binlog&#x5B9E;&#x73B0;&#x7684;&#x3002;</p>
<h3 id="%E4%B8%80%E4%B8%BB%E4%B8%80%E4%BB%8E%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB">&#x4E00;&#x4E3B;&#x4E00;&#x4ECE;&#x8BFB;&#x5199;&#x5206;&#x79BB;</h3>
<p>&#x914D;&#x7F6E;&#xFF1A;Mycat&#x63A7;&#x5236;&#x540E;&#x53F0;&#x6570;&#x636E;&#x5E93;&#x7684;&#x8BFB;&#x5199;&#x5206;&#x79BB;&#x548C;&#x8D1F;&#x8D23;&#x5747;&#x8861;&#x7531;schema.xml&#x6587;&#x4EF6;datahost&#x6807;&#x7B7E;&#x7684;balance&#x5C5E;&#x6027;&#x63A7;&#x5236;</p>
<pre><code class="language-xml">&lt;writeHost&gt;&lt;/writeHost&gt;
&lt;readHost&gt;&lt;/readHost&gt;
</code></pre>
<h3 id="%E5%8F%8C%E4%B8%BB%E5%8F%8C%E4%BB%8E">&#x53CC;&#x4E3B;&#x53CC;&#x4ECE;</h3>
<p>&#x4E24;&#x53F0;&#x4E3B;&#x5E93;&#xFF0C;&#x76F8;&#x4E92;&#x590D;&#x5236;&#xFF0C;&#x4E92;&#x4E3A;&#x4E3B;&#x5907;&#xFF0C;&#x589E;&#x5F3A;&#x53EF;&#x7528;&#x6027;</p>
<h3 id="%E5%8F%8C%E4%B8%BB%E5%8F%8C%E4%BB%8E%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB">&#x53CC;&#x4E3B;&#x53CC;&#x4ECE;&#x8BFB;&#x5199;&#x5206;&#x79BB;</h3>
<pre><code class="language-xml">&lt;writeHost&gt;&lt;/writeHost&gt;
balance\writeType\switchType
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Coming soon]]></title><description><![CDATA[<p>This is Geek &amp; Tech, a brand new site by KUN TANG that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is</p>]]></description><link>https://www.tangkun.site/coming-soon/</link><guid isPermaLink="false">63f83d68cd8c0d1f5d25d510</guid><category><![CDATA[News]]></category><dc:creator><![CDATA[KUN TANG]]></dc:creator><pubDate>Fri, 24 Feb 2023 04:30:32 GMT</pubDate><media:content url="https://static.ghost.org/v4.0.0/images/feature-image.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://static.ghost.org/v4.0.0/images/feature-image.jpg" alt="Coming soon"><p>This is Geek &amp; Tech, a brand new site by KUN TANG that&apos;s just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you&apos;d like to stay up to date and receive emails when new content is published!</p>]]></content:encoded></item></channel></rss>