<?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[Lss233's.Blog()]]></title><description><![CDATA[Everything is possible by code.]]></description><link>https://blog.lss233.com/</link><image><url>https://blog.lss233.com/favicon.png</url><title>Lss233&apos;s.Blog()</title><link>https://blog.lss233.com/</link></image><generator>Ghost 5.26</generator><lastBuildDate>Sat, 11 Apr 2026 17:39:31 GMT</lastBuildDate><atom:link href="https://blog.lss233.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[10 分钟快速入门垃圾回收机制]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x81EA;&#x52A8;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x662F;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x53D1;&#x5C55;&#x5386;&#x7A0B;&#x4E0A;&#x7684;&#x4E00;&#x9879;&#x4F1F;&#x5927;&#x53D1;&#x660E;&#x3002;</p>
<p>&#x5728;&#x6CA1;&#x6709;&#x81EA;&#x52A8;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x524D;&#xFF0C;&#x4EBA;&#x4EEC;&#x90FD;&#x662F;&#x624B;&#x52A8;&#x8FDB;&#x884C;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x3002;&#x5728; C</p>]]></description><link>https://blog.lss233.com/10-fen-zhong-kuai-su-ru-men-la-ji-hui-shou-ji-zhi/</link><guid isPermaLink="false">63d91c3e1797efe6d55f9693</guid><category><![CDATA[Java]]></category><category><![CDATA[编程语言]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Tue, 31 Jan 2023 13:55:30 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1675110972343-67d9aaaea396?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8YWxsfDR8fHx8fHwyfHwxNjc1MTczMjQw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1675110972343-67d9aaaea396?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8YWxsfDR8fHx8fHwyfHwxNjc1MTczMjQw&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;"><p>&#x81EA;&#x52A8;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x662F;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x53D1;&#x5C55;&#x5386;&#x7A0B;&#x4E0A;&#x7684;&#x4E00;&#x9879;&#x4F1F;&#x5927;&#x53D1;&#x660E;&#x3002;</p>
<p>&#x5728;&#x6CA1;&#x6709;&#x81EA;&#x52A8;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x524D;&#xFF0C;&#x4EBA;&#x4EEC;&#x90FD;&#x662F;&#x624B;&#x52A8;&#x8FDB;&#x884C;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x3002;&#x5728; C &#x8BED;&#x8A00;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x7533;&#x8BF7;&#x5185;&#x5B58;&#x65F6;&#xFF0C;&#x4F1A;&#x4F7F;&#x7528; <code>malloc</code> &#x51FD;&#x6570;&#x5411;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7533;&#x8BF7;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF0C;&#x4F7F;&#x7528;&#x7ED3;&#x675F;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x4F7F;&#x7528; <code>free</code> &#x51FD;&#x6570;&#x91CA;&#x653E;&#x5185;&#x5B58;&#x3002;</p>
<p>&#x4E8E;&#x662F;&#xFF0C;&#x4E00;&#x4E9B;&#x5199;&#x4E86; C &#x8BED;&#x8A00;&#x6BD4;&#x8F83;&#x4E45;&#x7684;&#x540C;&#x5B66;&#x53EF;&#x80FD;&#x4F1A;&#x53D1;&#x73B0;&#xFF0C;&#x81EA;&#x5DF1;&#x7684;&#x7A0B;&#x5E8F;&#x7ECF;&#x5E38;&#x9047;&#x5230;&#x5185;&#x5B58;&#x6CC4;&#x6F0F;&#x3001;<code>double free</code>&#x3001;<code>use after free</code> &#x7B49;&#x9519;&#x8BEF;&#xFF0C;&#x8FD9;&#x90FD;&#x662F;&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x5728;&#x7BA1;&#x7406;&#x8FD9;&#x4E9B;&#x5185;&#x5B58;&#x65F6;&#xFF0C;&#x6CA1;&#x6709;&#x6B63;&#x786E;&#x7684;&#x91CA;&#x653E;&#x4ED6;&#x4EEC;&#x5BFC;&#x81F4;&#x7684;&#x3002;</p>
<p>&#x800C;&#x5E26;&#x6709;&#x81EA;&#x52A8;&#x5185;&#x5B58;&#x7BA1;&#x7406;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x5374;&#x4E0D;&#x4E00;&#x6837;&#xFF0C;&#x5B83;&#x4EEC;&#x5E26;&#x6765;&#x4E86;&#x4E00;&#x4E2A;&#x53EB;&#x505A; <code>runtime</code> &#x7684;&#x4E1C;&#x897F;&#xFF0C;&#x50CF;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x4E00;&#x6837;&#xFF0C;&#x5E2E;&#x6211;&#x4EEC;&#x4E3A;&#x65B0;&#x5BF9;&#x8C61;&#x5206;&#x914D;&#x7A7A;&#x95F4;&#x3001;&#x56DE;&#x6536;&#x4E0D;&#x9700;&#x8981;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF0C;&#x4E3A;&#x6211;&#x4EEC;&#x51CF;&#x8F7B;&#x4E86;&#x8BB8;&#x591A;&#x8D1F;&#x62C5;&#x3002;</p>
<p>&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x5C06;&#x4ECB;&#x7ECD;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;&#x7684;&#x5E38;&#x7528;&#x7B56;&#x7565;&#x3002;&#x6211;&#x4EEC;&#x5C06;&#x4E0D;&#x4F1A;&#x8BA8;&#x8BBA;&#x7279;&#x5B9A;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x662F;&#x600E;&#x4E48;&#x5B9E;&#x73B0;&#x7684;&#xFF0C;&#x800C;&#x662F;&#x53EA;&#x4ECB;&#x7ECD;&#x4E00;&#x4E9B;&#x901A;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x8FD9;&#x6837;&#x4F60;&#x5728;&#x770B;&#x4EFB;&#x4F55;&#x6709;&#x5173;&#x5783;&#x573E;&#x56DE;&#x6536;&#x7684;&#x6587;&#x7AE0;&#x65F6;&#x90FD;&#x53EF;&#x4EE5;&#x5F88;&#x8F7B;&#x677E;&#x5730;&#x53BB;&#x7406;&#x89E3;&#x5B83;&#x7684;&#x539F;&#x7406;&#x3002;</p>
<p>&#x6E05;&#x7406;&#x5783;&#x573E;&#x8FD9;&#x4EF6;&#x4E8B;&#x5176;&#x5B9E;&#x53EA;&#x6709;&#x4E24;&#x6B65;&#xFF1A;</p>
<ol>
<li>&#x627E;&#x5783;&#x573E;</li>
<li>&#x4E22;&#x5783;&#x573E;</li>
</ol>
<h2 id="0x01-%E8%B0%81%E6%98%AF%E5%9E%83%E5%9C%BE%EF%BC%9F">0x01 &#x8C01;&#x662F;&#x5783;&#x573E;&#xFF1F;</h2>
<p>&#x5783;&#x573E;&#x7684;&#x5B9A;&#x4E49;&#x5C31;&#x662F;&#xFF1A;&#x6CA1;&#x4EBA;&#x7528;&#x7684;&#x4E1C;&#x897F;&#x3002;</p>
<p>&#x5728;&#x53D1;&#x73B0;&#x5783;&#x573E;&#x8FD9;&#x4EF6;&#x4E8B;&#x4E0A;&#xFF0C;&#x6211;&#x4EEC;&#x7684;&#x91CD;&#x70B9;&#x5728;&#x4E8E;&#x600E;&#x6837;&#x786E;&#x5B9A;&#x54EA;&#x4E9B;&#x5BF9;&#x8C61;&#x662F;&#x6CA1;&#x7528;&#x7684;&#x3002;</p>
<p>&#x4E3A;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x6709;&#x4E24;&#x79CD;&#x5E38;&#x89C1;&#x7684;&#x65B9;&#x6CD5;&#xFF1A;</p>
<h2 id="1-reference-counting-gc%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%E7%AE%97%E6%B3%95">1. Reference Counting GC - &#x5F15;&#x7528;&#x8BA1;&#x6570;&#x7B97;&#x6CD5;</h2>
<p>&#x6BCF;&#x4E2A;&#x5BF9;&#x8C61;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x4E0E;&#x4E4B;&#x5173;&#x8054;&#x7684;&#x5F15;&#x7528;&#x6570;&#x76EE; <code>refCount</code>&#xFF0C; &#x591A;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#x5F15;&#x7528;&#x5C31; <code>+1</code>&#xFF0C;&#x5C11;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#x5F15;&#x7528;&#x5C31; <code>-1</code>&#x3002;</p>
<p>&#x5F53;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61; <code>refCount &lt;= 0</code>  &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B83;&#x5C31;&#x662F;&#x4E2A;&#x6CA1;&#x4EBA;&#x8981;&#x7684;&#x5783;&#x573E;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/ReferenceCounting_ManimCE_v0.17.2.gif" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1920" height="1080" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/ReferenceCounting_ManimCE_v0.17.2.gif 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/ReferenceCounting_ManimCE_v0.17.2.gif 1000w, https://blog.lss233.com/content/images/size/w1600/2023/01/ReferenceCounting_ManimCE_v0.17.2.gif 1600w, https://blog.lss233.com/content/images/2023/01/ReferenceCounting_ManimCE_v0.17.2.gif 1920w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p><strong>&#x4F18;&#x70B9;&#x4E00;&#xFF1A;&#x5B9E;&#x73B0;&#x7B80;&#x5355;</strong><br>
&#x4ECE;<strong>&#x5B9E;&#x73B0;</strong>&#x7684;&#x89D2;&#x5EA6;&#x6765;&#x770B;&#xFF0C;&#x8FD9;&#x79CD;&#x5783;&#x573E;&#x8BC6;&#x522B;&#x7684;&#x7B97;&#x6CD5;&#x5B9E;&#x73B0;&#x7684;&#x8FC7;&#x7A0B;&#x4E0E; runtime &#x8026;&#x5408;&#x8F83;&#x5C0F;&#xFF0C;&#x53EA;&#x8981;&#x6211;&#x4EEC;&#x80FD;&#x591F;&#x5728;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x88AB;<strong>&#x8D4B;&#x503C;</strong>&#x7684;&#x65F6;&#x5019;&#x5224;&#x65AD;&#x4E00;&#x4E0B;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0; <code>refCount</code> &#x7684;&#x66F4;&#x65B0;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x7B80;&#x5355;&#x5230;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x5355;&#x72EC;&#x7684;&#x5E93;&#x6765;&#x5B9E;&#x73B0;&#x3002;</p>
<p>C++ &#x4E2D;&#x7684;&#x667A;&#x80FD;&#x6307;&#x9488; <code>shared_ptr</code> &#x5C31;&#x91C7;&#x7528;&#x4E86;&#x8FD9;&#x79CD;&#x5F15;&#x7528;&#x8BA1;&#x6570;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x5B83;&#x91CD;&#x5199;&#x4E86; <code>=</code> &#x64CD;&#x4F5C;&#x7B26;&#xFF0C;&#x8BA9;&#x5B83;&#x62E5;&#x6709;&#x4E86;&#x8FD9;&#x4E00;&#x80FD;&#x529B;&#x3002;</p>
<p><strong>&#x4F18;&#x70B9;&#x4E8C;&#xFF1A;&#x4E0D;&#x9700;&#x8981;&#x72EC;&#x7ACB;&#x7684;&#x5BFB;&#x627E;&#x8FC7;&#x7A0B;</strong><br>
&#x4ECE;<strong>&#x6267;&#x884C;</strong>&#x7684;&#x89D2;&#x5EA6;&#x6765;&#x770B;&#xFF0C;&#x5783;&#x573E;&#x7684;&#x5BFB;&#x627E;&#x76F4;&#x63A5;&#x7ED1;&#x5B9A;&#x5728;&#x4E86;&#x7A0B;&#x5E8F;&#x6267;&#x884C;&#x8FC7;&#x7A0B;&#x4E2D;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x4E0D;&#x9700;&#x8981;&#x4E13;&#x95E8;&#x5730;&#x53BB;&#x5199;&#x4E00;&#x4E2A;&#x590D;&#x6742;&#x7684;&#x4F53;&#x7CFB;&#x6765;&#x66FF;&#x6211;&#x4EEC;&#x53D1;&#x73B0;&#x5783;&#x573E;&#xFF0C;&#x4EE3;&#x7801;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x65F6;&#x5019;&#x81EA;&#x5DF1;&#x5C31;&#x80FD;&#x66FF;&#x6211;&#x4EEC;&#x6807;&#x8BB0;&#x51FA;&#x8C01;&#x662F;&#x5783;&#x573E;&#x3002;</p>
<p>&#x4F46;&#x95EE;&#x9898;&#x4E5F;&#x6765;&#x4E86;&#xFF1A;</p>
<p><strong>&#x7F3A;&#x70B9;&#x4E00;&#xFF1A;&#x7EF4;&#x62A4; <code>refCount</code> &#x7684;&#x5F00;&#x9500;&#x5176;&#x5B9E;&#x5F88;&#x5927;</strong></p>
<p>&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x90FD;&#x60F3;&#x5F15;&#x7528;&#x5BF9;&#x8C61; A&#xFF0C;&#x90A3;&#x4E48;&#x5BF9;&#x8C61; A &#x7684; <code>refCount</code> &#x5C31;&#x4F1A;&#x88AB;&#x591A;&#x4E2A;&#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x4FEE;&#x6539;&#x3002;&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x7EBF;&#x7A0B;&#x5728;&#x4FEE;&#x6539; <code>refCount</code> &#x65F6;&#x88AB;&#x5176;&#x4ED6;&#x7EBF;&#x7A0B;&#x6253;&#x65AD;&#xFF0C;&#x90A3;&#x4E48; <code>refCount</code> &#x7684;&#x503C;&#x5C31;&#x4F1A;&#x53D8;&#x5F97;&#x6DF7;&#x4E71;&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4;<strong>&#x5E76;&#x53D1;&#x5B89;&#x5168;&#x95EE;&#x9898;</strong>&#x3002;</p>
<p>&#x5B66;&#x8FC7;&#x64CD;&#x4F5C;&#x7CFB;&#x7EDF;&#x7684;&#x540C;&#x5B66;&#x5E94;&#x8BE5;&#x4F1A;&#x719F;&#x6089;&#xFF1A;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x5E76;&#x53D1;&#x95EE;&#x9898;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x4FDD;&#x8BC1;<code>refCount</code> &#x5177;&#x6709;<strong>&#x539F;&#x5B50;&#x6027;</strong>&#x3002;</p>
<p>&#x4FDD;&#x8BC1;&#x539F;&#x5B50;&#x6027;&#x7684;&#x624B;&#x6BB5;&#x5C31;&#x662F;&#x5728;&#x4FEE;&#x6539;<code>refCount</code>&#x524D;&#x5BF9;&#x5B83;<strong>&#x52A0;&#x9501;</strong>&#x3002;&#x53EA;&#x8981;&#x52A0;&#x9501;&#xFF0C;&#x5176;&#x4ED6;&#x60F3;&#x4FEE;&#x6539;<code>refCount</code>&#x7684;&#x7EBF;&#x7A0B;&#x5C31;&#x4F1A;&#x505C;&#x4E0B;&#x6765;&#x7B49;&#x5F85;&#x9501;&#x88AB;&#x91CA;&#x653E;&#x3002;</p>
<p>&#x4F46;&#x8FD9;&#x4FBF;&#x5E26;&#x6765;&#x4E86;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#xFF1A;&#x5F53;&#x6211;&#x4EEC;&#x5728;&#x591A;&#x7EBF;&#x7A0B;&#x7684;&#x73AF;&#x5883;&#x91CC;&#x5F15;&#x7528;&#x516C;&#x5171;&#x5BF9;&#x8C61;&#x65F6;&#xFF0C;&#x591A;&#x7EBF;&#x7A0B;&#x7684;&#x6548;&#x7387;&#x4F1A;&#x4E25;&#x91CD;&#x964D;&#x4F4E;&#xFF0C;&#x8FD9;&#x662F;&#x4E0D;&#x53EF;&#x5FCD;&#x53D7;&#x7684;&#x3002;</p>
<p><strong>&#x7F3A;&#x70B9;&#x4E8C;&#xFF1A;&#x65E0;&#x6CD5;&#x56DE;&#x6536;&#x5FAA;&#x73AF;&#x5F15;&#x7528;</strong><br>
&#x5982;&#x679C;&#x5927;&#x5BB6;&#x5199;&#x8FC7;&#x73AF;&#x5F62;&#x961F;&#x5217;&#xFF0C;&#x80AF;&#x5B9A;&#x8FD8;&#x8BB0;&#x5F97;&#x5B83;&#x7684;&#x6838;&#x5FC3;&#x7279;&#x70B9;&#xFF1A;&#x628A;&#x5934;&#x90E8;&#x548C;&#x5C3E;&#x90E8;&#x8FDE;&#x63A5;&#xFF0C;&#x5F62;&#x6210;&#x4E00;&#x4E2A;&#x5FAA;&#x73AF;&#x5F15;&#x7528;&#x3002;</p>
<p>&#x8FD9;&#x79CD;&#x64CD;&#x4F5C;&#x770B;&#x4F3C;&#x5DE7;&#x5999;&#xFF0C;&#x4F46;&#x5BF9;&#x6211;&#x4EEC;&#x7684;&#x7B97;&#x6CD5;&#x800C;&#x8A00;&#x5C06;&#x662F;&#x4E00;&#x4E2A;&#x5DE8;&#x5927;&#x7684;&#x6253;&#x51FB;&#xFF1A;</p>
<p>&#x5047;&#x5982;&#x4F60;&#x4E0D;&#x60F3;&#x8981;&#x8FD9;&#x4E2A;&#x73AF;&#x5F62;&#x961F;&#x5217;&#x4E86;&#xFF0C;&#x4F46;&#x5B83;&#x4EEC;&#x7684; <code>refCount</code> &#x90FD;&#x662F; <code>1</code>&#xFF0C;&#x5F15;&#x7528;&#x8BA1;&#x6570;&#x7B97;&#x6CD5;&#x65E0;&#x6CD5;&#x8BA4;&#x4E3A;&#x8FD9;&#x662F;&#x4E00;&#x5768;&#x5783;&#x573E;&#xFF0C;&#x5B83;&#x4F1A;&#x4E00;&#x76F4;&#x7559;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x9020;&#x6210;<strong>&#x5185;&#x5B58;&#x6CC4;&#x6F0F;</strong>&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/circular-reference-counting-gc.drawio.jpg" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="411" height="171"></figure><!--kg-card-begin: markdown--><h2 id="2-tracing-gc%E8%BF%BD%E8%B8%AA%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%E7%AE%97%E6%B3%95">2. Tracing GC - &#x8FFD;&#x8E2A;&#x5783;&#x573E;&#x56DE;&#x6536;&#x7B97;&#x6CD5;</h2>
<p>&#x5BF9;&#x4E8E;&#x5F15;&#x7528;&#x8BA1;&#x6570;&#x7B97;&#x6CD5;&#x8FD9;&#x4E00;&#x95EE;&#x9898;&#x7684;&#x672C;&#x8D28;&#x5176;&#x5B9E;&#x8FD8;&#x662F;&#x4E0D;&#x80FD;&#x9274;&#x522B;&#x51FA;&#x8C01;&#x5230;&#x5E95;&#x6709;&#x6CA1;&#x6709;&#x7528;&#x3002;</p>
<p>&#x5982;&#x679C;&#x8BF4;&#x6211;&#x4EEC;&#x4ECE;&#x5934;&#x5F00;&#x59CB;&#x904D;&#x5386;&#x6240;&#x6709;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x770B;&#x4ED6;&#x4EEC;&#x73B0;&#x5728;&#x5728;&#x7528;&#x8C01;&#xFF0C;&#x8FD9;&#x6837;&#x4E0D;&#x5C31;&#x77E5;&#x9053;&#x8C01;&#x662F;&#x5783;&#x573E;&#x4E86;&#x561B;&#xFF01;</p>
<p>&#x4E8E;&#x662F;&#x6211;&#x4EEC;&#x4FBF;&#x6709;&#x4E86; Tracing GC &#xFF0C;&#x5B83;&#x4E5F;&#x88AB;&#x79F0;&#x4E3A;<strong>&#x53EF;&#x8FBE;&#x6027;&#x6536;&#x96C6;&#x6CD5;</strong>&#x3002;</p>
<p>&#x5176;&#x57FA;&#x672C;&#x539F;&#x7406;&#x5C31;&#x548C;<strong>&#x6DF1;&#x5EA6;&#x4F18;&#x5148;&#x641C;&#x7D22;</strong>&#x4E00;&#x6837;&#xFF1A;</p>
<ol>
<li>&#x6807;&#x8BB0;&#x6839;&#x5BF9;&#x8C61;&#xFF08;&#x5982;&#x5E38;&#x91CF;&#x3001;&#x6808;&#x7A7A;&#x95F4;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x7B49;&#xFF09;</li>
<li>&#x4ECE;&#x6839;&#x5BF9;&#x8C61;&#x51FA;&#x53D1;&#xFF0C;&#x626B;&#x63CF;&#x6240;&#x6709;&#x7684;&#x53EF;&#x8FBE;&#x5BF9;&#x8C61;</li>
<li>&#x90A3;&#x4E9B;&#x4E0D;&#x53EF;&#x8FBE;&#x7684;&#xFF0C;&#x5C31;&#x90FD;&#x662F;&#x5783;&#x573E;&#x4E86;</li>
</ol>
<p>&#x597D;&#x5427;&#xFF0C;&#x8FD9;&#x4E48;&#x4E00;&#x770B;&#x6211;&#x4EEC;&#x662F;&#x4ECE;&#x6839;&#x6E90;&#x4E0A;&#x89E3;&#x51B3;&#x4E86;&#x6700;&#x5927;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x4F46;&#x662F;&#x522B;&#x6025;&#xFF0C;&#x4E8B;&#x60C5;&#x8FD8;&#x6CA1;&#x8FD9;&#x4E48;&#x5FEB;&#x7ED3;&#x675F;&#x3002;</p>
<p>&#x89E3;&#x51B3;&#x4E00;&#x4E2A;&#x4E25;&#x91CD; BUG &#x7684;&#x65B9;&#x6CD5;&#x5C31;&#x662F;&#x5F15;&#x5165; N &#x4E2A;&#x65B0;&#x7684; BUG&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x4F1A;&#x5411;&#x4F60;&#x8BC1;&#x660E;&#x8FD9;&#x4E00;&#x70B9;&#x3002;</p>
<p>&#x8BA9;&#x6211;&#x4EEC;&#x770B;&#x770B; Tracing GC &#x5728;&#x5176;&#x4ED6;&#x65B9;&#x9762;&#x8868;&#x73B0;&#x5F97;&#x600E;&#x4E48;&#x6837;&#xFF1A;</p>
<ol>
<li><strong>&#x2714; &#x5F00;&#x9500; &#x2014;&#x2014; &#x5E76;&#x53D1;&#x5B89;&#x5168;</strong>&#xFF1A;&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x539F;&#x5B50;&#x6027;&#x7684;&#x53D8;&#x91CF;&#x8981;&#x53BB;&#x7EF4;&#x62A4;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x73B0;&#x5728;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x60F3;&#x600E;&#x4E48;&#x5199;&#x5C31;&#x600E;&#x4E48;&#x5199;&#x3002;</li>
<li><strong>&#x274C; &#x5B9E;&#x73B0; &#x2014;&#x2014; &#x4E0E; runtime &#x9AD8;&#x5EA6;&#x8026;&#x5408;</strong>&#xFF1A; &#x4E0E;&#x5F15;&#x7528;&#x8BA1;&#x6570;&#x4E0D;&#x540C;&#xFF0C;&#x6839;&#x5BF9;&#x8C61;&#x7684;&#x8BC6;&#x522B;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x90FD;&#x4E0D;&#x592A;&#x4E00;&#x6837;&#xFF0C;&#x56E0;&#x6B64;&#x4E0D;&#x540C;&#x7684; runtime &#x5B9E;&#x73B0;&#x90FD;&#x4E0D;&#x592A;&#x4E00;&#x6837;&#x3002;</li>
<li><strong>&#x274C; &#x6267;&#x884C; &#x2014;&#x2014; &#x590D;&#x6742;&#x7684;&#x5BFB;&#x627E;&#x8FC7;&#x7A0B;</strong>&#xFF1A;&#x5982;&#x4F55;&#x5728;&#x7A0B;&#x5E8F;&#x8FD0;&#x884C;&#x7684;&#x540C;&#x65F6;&#x626B;&#x63CF;&#x5783;&#x573E;&#xFF1F; Tracing GC &#x7684;&#x6700;&#x5927;&#x6311;&#x6218;&#x5C31;&#x5728;&#x8FD9;&#x91CC;&#x3002;</li>
</ol>
<h3 id="%E5%A4%8D%E6%9D%82%E7%9A%84%E5%AF%BB%E6%89%BE%E8%BF%87%E7%A8%8B">&#x590D;&#x6742;&#x7684;&#x5BFB;&#x627E;&#x8FC7;&#x7A0B;</h3>
<p>Tracing GC &#x662F;&#x901A;&#x8FC7;&#x626B;&#x63CF;&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x8BC6;&#x522B;&#x5783;&#x573E;&#x7684;&#xFF0C;&#x626B;&#x63CF;&#x5DE5;&#x4F5C;&#x4F1A;&#x88AB;&#x5B89;&#x6392;&#x5728;&#x4E00;&#x79CD;&#x53EB;&#x505A; GC Thread &#x7684;&#x7EBF;&#x7A0B;&#x4E2D;&#x8FDB;&#x884C;&#x3002;</p>
<p>&#x626B;&#x63CF;&#x7684;&#x8FC7;&#x7A0B;&#x6709;&#x4E09;&#x79CD;&#xFF1A;</p>
<ul>
<li>Serial GC: &#x53EA;&#x6709;&#x4E00;&#x4E2A; GC Thread &#x5E72;&#x6D3B;</li>
<li>Parallel GC: &#x6709;&#x591A;&#x4E2A; GC Thread &#x540C;&#x65F6;&#x5E72;&#x6D3B;</li>
<li>Concurrent GC: &#x4E1A;&#x52A1;&#x7EBF;&#x7A0B;&#x548C; GC &#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x6267;&#x884C;</li>
</ul>
<p>Serial GC &#x548C; Parallel GC &#x7684;&#x533A;&#x522B;&#x53EA;&#x6709;&#x7EBF;&#x7A0B;&#x7684;&#x4E2A;&#x6570;&#xFF0C;&#x5B83;&#x4EEC;&#x548C;&#x4E1A;&#x52A1;&#x7EBF;&#x7A0B;&#x7684;&#x5173;&#x7CFB;&#x662F;<strong>&#x540C;&#x6B65;&#x6267;&#x884C;</strong>&#x3002;</p>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x8FD9;&#x91CC;&#x6240;&#x8BF4;&#x7684;&#x540C;&#x6B65;&#x6267;&#x884C;&#x4E0D;&#x662F;&#x6307;&#x4E00;&#x8D77;&#x6267;&#x884C;&#xFF0C;&#x800C;&#x662F;&#x4E00;&#x4E2A;&#x6267;&#x884C;&#x5B8C;&#x624D;&#x80FD;&#x6267;&#x884C;&#x4E0B;&#x4E00;&#x4E2A;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/sg.png" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1280" height="559" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/sg.png 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/sg.png 1000w, https://blog.lss233.com/content/images/2023/01/sg.png 1280w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>&#x5728; GC &#x6267;&#x884C;&#x671F;&#x95F4;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x4E1A;&#x52A1;&#x7EBF;&#x7A0B;&#x90FD;&#x4F1A;&#x88AB;&#x6682;&#x505C;&#xFF0C;&#x6574;&#x4E2A;&#x7A0B;&#x5E8F;&#x770B;&#x8D77;&#x6765;&#x4F1A;&#x50CF;&#x5361;&#x6B7B;&#x4E00;&#x6837;&#xFF0C;&#x8FD9;&#x88AB;&#x79F0;&#x4E3A; <strong>Stop The World</strong>&#x3002;</p>
<p>&#x8FD9;&#x542C;&#x8D77;&#x6765;&#x592A;&#x7CDF;&#x7CD5;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x8FEB;&#x5207;&#x5E0C;&#x671B; GC &#x80FD;&#x591F;<strong>&#x5E76;&#x53D1;&#x6267;&#x884C;</strong>&#x3002;</p>
<h4 id="%E5%B9%B6%E5%8F%91-gc-%E7%9A%84%E6%94%B9%E9%80%A0%EF%BC%9A%E4%B8%89%E8%89%B2%E6%A0%87%E8%AE%B0%E6%B3%95">&#x5E76;&#x53D1; GC &#x7684;&#x6539;&#x9020;&#xFF1A;&#x4E09;&#x8272;&#x6807;&#x8BB0;&#x6CD5;</h4>
<p>&#x5E76;&#x53D1;&#x610F;&#x5473;&#x7740;&#x6211;&#x4EEC;&#x7684; GC &#x626B;&#x63CF;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;CPU &#x4F1A;&#x5728;&#x6211;&#x4EEC;&#x7684;&#x4E1A;&#x52A1;&#x4EE3;&#x7801;&#x548C; GC &#x7684;&#x626B;&#x63CF;&#x4EE3;&#x7801;&#x4E4B;&#x95F4;&#x4E0D;&#x65AD;&#x5730;&#x8FDB;&#x884C;&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362; &#x2014;&#x2014; &#x4EE5;&#x4FDD;&#x8BC1;&#x4E1A;&#x52A1;&#x548C; GC &#x90FD;&#x80FD;&#x4E0D;&#x65AD;&#x8FD0;&#x884C;&#x3002;</p>
<p>&#x6B64;&#x5916;&#xFF0C;&#x6211;&#x4EEC;&#x4E5F;&#x4E0D;&#x5E0C;&#x671B; GC &#x4E00;&#x626B;&#x5C31;&#x626B;&#x534A;&#x5929;&#xFF0C;&#x6211;&#x4EEC;&#x5E0C;&#x671B;&#x80FD;&#x6709;&#x591A;&#x4E2A; GC &#x7EBF;&#x7A0B;&#x5E2E;&#x6211;&#x4EEC;&#x4E00;&#x8D77;&#x626B;&#x63CF;&#x3002;</p>
<p>&#x8FD9;&#x4E48;&#x4E00;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x4E09;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x989C;&#x8272;&#x6765;&#x8868;&#x793A;&#x5BF9;&#x8C61;&#xFF0C;&#x4EE3;&#x8868;&#x4E09;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x72B6;&#x6001;&#xFF1A;</p>
<ul>
<li>&#x767D;&#x8272;&#xFF1A;&#x5BF9;&#x8C61;&#x4ECE;&#x88AB;&#x672A;&#x8BBF;&#x95EE;&#x8FC7;</li>
<li>&#x7070;&#x8272;&#xFF1A;&#x626B;&#x63CF;&#x8FC7;&#x5BF9;&#x8C61;&#x672C;&#x8EAB;&#xFF0C;<strong>&#x6B63;&#x5728;</strong>&#x626B;&#x63CF;&#x5B83;&#x7684;&#x5168;&#x90E8;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;</li>
<li>&#x9ED1;&#x8272;&#xFF1A;&#x626B;&#x63CF;&#x8FC7;&#x5BF9;&#x8C61;&#x672C;&#x8EAB;&#xFF0C;&#x4E5F;&#x626B;&#x63CF;&#x8FC7;&#x5B83;&#x5168;&#x90E8;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;</li>
</ul>
<p>&#x6211;&#x4EEC;&#x7528;&#x4E09;&#x4E2A;&#x4E0D;&#x540C;&#x7684;&#x96C6;&#x5408;&#x6765;&#x653E;&#x8FD9;&#x4E9B;&#x5BF9;&#x8C61;&#x3002;</p>
<p>&#x5728;&#x6700;&#x5F00;&#x59CB;&#x65F6;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x5BF9;&#x8C61;&#x90FD;&#x5728;&#x767D;&#x8272;&#x96C6;&#x5408;&#x4E2D;&#x3002;</p>
<p>&#x626B;&#x63CF;&#x65F6;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x662F;&#x4ECE;&#x6839;&#x8282;&#x70B9;&#x5F00;&#x59CB;&#xFF0C;&#x5148;&#x5C06;&#x6839;&#x5BF9;&#x8C61;&#x6807;&#x4E3A;&#x9ED1;&#x8272;&#x3001;&#x88AB;&#x6839;&#x8282;&#x70B9;&#x5F15;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x6807;&#x4E3A;&#x7070;&#x8272;&#x3002;</p>
<p>&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x7684; GC &#x7EBF;&#x7A0B;&#x53EA;&#x8981;&#x4E0D;&#x65AD;&#x5730;&#x4ECE;&#x7070;&#x8272;&#x96C6;&#x5408;&#x91CC;&#x62FF;&#x5BF9;&#x8C61;&#xFF0C;&#x626B;&#x63CF;&#x4E4B;&#x540E;&#x4E22;&#x8FDB;&#x9ED1;&#x8272;&#x5BF9;&#x8C61;&#x5C31;&#x597D;&#x4E86;&#x3002;</p>
<p>&#x5F53;&#x7070;&#x8272;&#x96C6;&#x5408;&#x4E3A;&#x7A7A;&#x65F6;&#xFF0C;&#x626B;&#x63CF;&#x5B8C;&#x6BD5;&#x3002;&#x6B64;&#x65F6;&#x767D;&#x8272;&#x96C6;&#x5408;&#x4E2D;&#x7684;&#x5BF9;&#x8C61;&#x5C31;&#x662F;&#x5783;&#x573E;&#xFF0C;&#x53EF;&#x4EE5;&#x88AB;&#x76F4;&#x63A5;&#x6E05;&#x9664;&#x3002;</p>
<p>&#x8FD9;&#x79CD;&#x6539;&#x9020;&#x5176;&#x5B9E;&#x5C31;&#x662F;&#x628A;&#x6DF1;&#x5EA6;&#x4F18;&#x5148;&#x641C;&#x7D22;&#x6539;&#x9020;&#x6210;&#x4E86;&#x5E7F;&#x5EA6;&#x4F18;&#x5148;&#x641C;&#x7D22;&#xFF0C;&#x4ECE;&#x800C;&#x5B9E;&#x73B0;&#x4E86;&#x5E76;&#x53D1;&#x3002;</p>
<h4 id="%E5%B9%B6%E5%8F%91%E9%99%B7%E9%98%B1%EF%BC%9A%E8%AF%AF%E5%88%A0">&#x5E76;&#x53D1;&#x9677;&#x9631;&#xFF1A;&#x8BEF;&#x5220;</h4>
<p>&#x6211;&#x4EEC;&#x6765;&#x770B;&#x5982;&#x679C;&#x4E1A;&#x52A1;&#x7EBF;&#x7A0B;&#x548C; GC &#x7EBF;&#x7A0B;&#x540C;&#x65F6;&#x6267;&#x884C;&#x4F1A;&#x600E;&#x4E48;&#x6837;&#xFF1A;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/misd.png" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1304" height="410" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/misd.png 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/misd.png 1000w, https://blog.lss233.com/content/images/2023/01/misd.png 1304w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>&#x4E0A;&#x56FE;&#x8868;&#x793A; GC &#x8FD0;&#x884C;&#x65F6;&#x7684; 3 &#x4E2A;&#x65F6;&#x523B;&#x3002;</p>
<ul>
<li>&#x65F6;&#x523B; 1&#xFF1A;&#x6211;&#x4EEC;&#x7684; GC &#x4ECE;&#x5BF9;&#x8C61; A &#x626B;&#x63CF;&#x51FA;&#x4E86;&#x5BF9;&#x8C61; B &#x548C; &#x5BF9;&#x8C61; C</li>
<li>&#x65F6;&#x523B; 2&#xFF1A;&#x5BF9;&#x8C61; A &#x589E;&#x52A0;&#x4E86;&#x5BF9;&#x8C61; D &#x7684;&#x5F15;&#x7528;</li>
<li>&#x65F6;&#x523B; 3&#xFF1A;&#x5BF9;&#x8C61; B &#x5220;&#x9664;&#x4E86;&#x5BF9;&#x8C61; D &#x7684;&#x5F15;&#x7528;</li>
</ul>
<p>&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x53EA;&#x626B;&#x63CF;&#x7070;&#x8272;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5BF9;&#x8C61; D &#x4ECE;&#x4E8B;&#x5B9E;&#x4E0A;&#x6765;&#x8BF4;&#x5E76;&#x4E0D;&#x662F;&#x5783;&#x573E;&#xFF0C;&#x4F46;&#x5B83;&#x5B8C;&#x7F8E;&#x5730;&#x9519;&#x8FC7; GC &#x4E86;&#xFF0C;&#x5C06;&#x4F1A;&#x906D;&#x5230;&#x8BEF;&#x5220;&#xFF0C;&#x662F;&#x4E2A;&#x5927;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x8981;&#x60F3;&#x89E3;&#x51B3;&#x5B83;&#xFF0C;&#x6211;&#x4EEC;&#x5C31;&#x5F97;&#x901A;&#x8FC7;&#x67D0;&#x79CD;&#x64CD;&#x4F5C;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x7684; GC &#x53EF;&#x4EE5;&#x8BB0;&#x5F55;&#x4E0B;&#x8FD9;&#x4E2A;&#x767D;&#x8272;&#x5BF9;&#x8C61; D&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4ECE;&#x4E24;&#x4E2A;&#x4E0D;&#x540C;&#x7684;&#x89D2;&#x5EA6;&#x6765;&#x5206;&#x6790;&#x5B83;&#xFF1A;</p>
<ol>
<li>
<p>&#x5728;&#x65F6;&#x523B;2&#xFF1A;&#x9ED1;&#x8272;&#x5BF9;&#x8C61;&#x589E;&#x52A0;&#x4E86;&#x4E00;&#x4E2A;&#x767D;&#x8272;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;<br>
&#x5982;&#x679C;&#x60F3;&#x4ECE;&#x8FD9;&#x4E2A;&#x89D2;&#x5EA6;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#xFF0C;&#x90A3;&#x5C31;&#x5728;&#x9ED1;&#x8272;&#x5BF9;&#x8C61;&#x589E;&#x52A0;&#x5F15;&#x7528;&#x65F6;&#xFF0C;&#x628A;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61; D &#x8BB0;&#x4E0B;&#x6765;&#xFF0C;&#x5F85;&#x4F1A;&#x626B;&#x63CF;&#x5B83;&#xFF0C;&#x8FD9;&#x88AB;&#x79F0;&#x4E3A;<strong>&#x589E;&#x91CF;&#x66F4;&#x65B0;</strong>&#x3002;</p>
</li>
<li>
<p>&#x5728;&#x65F6;&#x523B;3&#xFF1A;&#x7070;&#x8272;&#x5BF9;&#x8C61;&#x65AD;&#x5F00;&#x4E86;&#x4E00;&#x4E2A;&#x767D;&#x8272;&#x5BF9;&#x8C61;&#x7684;&#x5F15;&#x7528;<br>
&#x5982;&#x679C;&#x4ECE;&#x8FD9;&#x4E2A;&#x89D2;&#x5EA6;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#xFF0C;&#x90A3;&#x5C31;&#x5728;&#x7070;&#x8272;&#x5BF9;&#x8C61;&#x65AD;&#x5F00;&#x5F15;&#x7528;&#x65F6;&#xFF0C;&#x628A;&#x5BF9;&#x8C61; D &#x8BB0;&#x4E0B;&#x6765;&#xFF0C;&#x5F85;&#x4F1A;&#x626B;&#x63CF;&#x5B83;&#xFF0C;&#x8FD9;&#x88AB;&#x79F0;&#x4E3A;<strong>&#x539F;&#x59CB;&#x5FEB;&#x7167;</strong>&#x3002;&#x5B83;&#x610F;&#x5473;&#x7740;&#x65E0;&#x8BBA;&#x5BF9;&#x8C61;&#x600E;&#x4E48;&#x6539;&#x53D8;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x662F;&#x6309;&#x7167;&#x521A;&#x5F00;&#x59CB; GC &#x65F6;&#x7684;&#x5BF9;&#x8C61;&#x72B6;&#x6001;&#x6765;&#x626B;&#x63CF;&#x5B83;&#x3002;</p>
</li>
</ol>
<h4 id="%E6%97%B6%E9%97%B4%E5%81%9C%E6%AD%A2%EF%BC%9Astw">&#x65F6;&#x95F4;&#x505C;&#x6B62;&#xFF1A;STW</h4>
<p>&#x73B0;&#x5728;&#xFF0C;&#x6211;&#x4EEC;&#x6709;&#x4E86;&#x4E00;&#x4E2A;&#x770B;&#x4F3C;&#x6CA1;&#x6709; BUG &#x7684;<strong>&#x5E76;&#x53D1;GC</strong>&#xFF0C;&#x5B83;&#x5206;&#x4E3A;&#x4E09;&#x4E2A;&#x9636;&#x6BB5;&#xFF1A;</p>
<ul>
<li>&#x521D;&#x59CB;&#x5316;&#x9636;&#x6BB5;&#xFF1A;&#x627E;&#x5230;&#x6240;&#x6709;&#x7684;&#x6839;&#x5BF9;&#x8C61;</li>
<li>&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x9636;&#x6BB5;&#xFF1A;&#x4E09;&#x8272;&#x6807;&#x8BB0;&#x6CD5;&#x626B;&#x63CF;</li>
<li>&#x91CD;&#x65B0;&#x6807;&#x8BB0;&#x9636;&#x6BB5;&#xFF1A;&#x626B;&#x63CF;&#x5E76;&#x53D1;&#x6807;&#x8BB0;&#x9636;&#x6BB5;&#x9519;&#x8FC7;&#x7684;&#x767D;&#x8272;&#x5BF9;&#x8C61;</li>
</ul>
<p>&#x4F46;&#x6211;&#x4EEC;&#x5728;&#x6267;&#x884C;&#x626B;&#x63CF;&#x65F6;&#xFF0C;&#x8FD8;&#x662F;&#x4F1A;&#x9047;&#x5230; <strong>Stop-The-World</strong>&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x7684; <strong>Stop-The-World</strong> &#x5C06;&#x4F1A;&#x53D1;&#x751F;&#x5728;&#x626B;&#x63CF;&#x7684;&#x5728;&#x7B2C;&#x4E00;&#x9636;&#x6BB5;&#x548C;&#x7B2C;&#x4E09;&#x9636;&#x6BB5;&#x3002;</p>
<ul>
<li>
<p><strong>&#x7B2C;&#x4E00;&#x9636;&#x6BB5;</strong>&#xFF1A;&#x505C;&#x6B62;&#x6839;&#x5BF9;&#x8C61;&#x7684;&#x5236;&#x9020;&#xFF0C;&#x4EE5;&#x786E;&#x5B9A;&#x626B;&#x63CF;&#x8D77;&#x70B9;&#x3002;</p>
</li>
<li>
<p><strong>&#x7B2C;&#x4E09;&#x9636;&#x6BB5;</strong>&#xFF1A;&#x505C;&#x6B62;&#x65B0;&#x5BF9;&#x8C61;&#x7684;&#x5236;&#x9020;&#xFF0C;&#x4EE5;&#x4FDD;&#x8BC1;&#x6CA1;&#x6709;&#x65B0;&#x5BF9;&#x8C61;&#x9519;&#x8FC7; GC&#x3002;</p>
</li>
</ul>
<p>&#x4E0D;&#x8FC7;&#x8FD8;&#x597D;&#xFF0C;&#x56E0;&#x4E3A;&#x6839;&#x5BF9;&#x8C61;&#x548C;&#x91CD;&#x65B0;&#x626B;&#x63CF;&#x7684;&#x5BF9;&#x8C61;&#x6570;&#x91CF;&#x5176;&#x5B9E;&#x4E0D;&#x591A;&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x4E24;&#x4E2A; Stop-The-World &#x7684;&#x95F4;&#x9694;&#x5C06;&#x4F1A;&#x5F88;&#x77ED;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/Compare-Serial-GC-vs-Concurrent-GC.jpg" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1501" height="914" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/Compare-Serial-GC-vs-Concurrent-GC.jpg 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/Compare-Serial-GC-vs-Concurrent-GC.jpg 1000w, https://blog.lss233.com/content/images/2023/01/Compare-Serial-GC-vs-Concurrent-GC.jpg 1501w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><h2 id="0x02-%E4%B8%A2%E5%9E%83%E5%9C%BE">0x02 &#x4E22;&#x5783;&#x573E;</h2>
<p>&#x901A;&#x5E38;&#x6765;&#x8BF4;&#xFF0C;&#x6E05;&#x7406;&#x5783;&#x573E;&#x6709;&#x4E09;&#x79CD;&#x65B9;&#x6CD5;&#xFF0C;&#x4ED6;&#x4EEC;&#x90FD;&#x5F88;&#x597D;&#x7406;&#x89E3;&#x3002;</p>
<h3 id="mark-sweep-gc-%E5%B0%86%E5%9E%83%E5%9C%BE%E5%AF%B9%E8%B1%A1%E7%9A%84%E5%86%85%E5%AD%98%E6%A0%87%E8%AE%B0%E4%B8%BA%E5%8F%AF%E5%88%86%E9%85%8D">Mark-sweep GC: &#x5C06;&#x5783;&#x573E;&#x5BF9;&#x8C61;&#x7684;&#x5185;&#x5B58;&#x6807;&#x8BB0;&#x4E3A;&#x53EF;&#x5206;&#x914D;</h3>
<p>&#x8FD9;&#x79CD;&#x6E05;&#x7406;&#x5783;&#x573E;&#x7684;&#x65B9;&#x6CD5;&#x5E94;&#x8BE5;&#x662F;&#x6700;&#x5FEB;&#x7684;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x5176;&#x5B9E;&#x6839;&#x672C;&#x6CA1;&#x6709;&#x6E05;&#x7406;&#xFF0C;&#x53EA;&#x662F;&#x5355;&#x7EAF;&#x5730;&#x58F0;&#x660E;&#x8FD9;&#x4E2A;&#x5730;&#x65B9;&#x53EF;&#x4EE5;&#x653E;&#x65B0;&#x5BF9;&#x8C61;&#x4E86;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/MarkSweep_ManimCE_v0.17.2.gif" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1920" height="1080" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/MarkSweep_ManimCE_v0.17.2.gif 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/MarkSweep_ManimCE_v0.17.2.gif 1000w, https://blog.lss233.com/content/images/size/w1600/2023/01/MarkSweep_ManimCE_v0.17.2.gif 1600w, https://blog.lss233.com/content/images/2023/01/MarkSweep_ManimCE_v0.17.2.gif 1920w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>&#x4F46;&#x6E05;&#x7406;&#x7684;&#x65F6;&#x5019;&#x8F7B;&#x677E;&#x4E86;&#xFF0C;&#x8981;&#x7528;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x6CA1;&#x90A3;&#x4E48;&#x5BB9;&#x6613;&#x4E86;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x90FD;&#x77E5;&#x9053;&#xFF0C;&#x5BF9;&#x4E8E;&#x65B0;&#x6765;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5982;&#x679C;&#x60F3;&#x8981;&#x627E;&#x4E2A;&#x5B89;&#x5BB6;&#x7684;&#x4F4D;&#x7F6E;&#xFF0C;&#x90A3;&#x5FC5;&#x987B;&#x5F97;&#x6311;&#x9009;&#x4E00;&#x4E2A;&#x5408;&#x9002;&#x81EA;&#x5DF1;&#x5927;&#x5C0F;&#x7684;&#x7A7A;&#x95F2;&#x7A7A;&#x95F4;&#x3002;</p>
<p>&#x4E0D;&#x540C;&#x7684;&#x5BF9;&#x8C61;&#x53D8;&#x6210;&#x5783;&#x573E;&#x7684;&#x65F6;&#x95F4;&#x80AF;&#x5B9A;&#x4E0D;&#x4E00;&#x6837;&#xFF0C;&#x8FD9;&#x4E00;&#x901A;&#x64CD;&#x4F5C;&#x6E05;&#x7406;&#x5B8C;&#x4EE5;&#x540E;&#xFF0C;&#x4F1A;&#x628A;&#x53EF;&#x7528;&#x7A7A;&#x95F4;&#x53D8;&#x5F97;&#x4E1C;&#x4E00;&#x5757;&#x897F;&#x4E00;&#x5757;&#xFF0C;&#x751A;&#x81F3;&#x6709;&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x4E00;&#x79CD;&#x6781;&#x7AEF;&#x7684;&#x60C5;&#x51B5;&#xFF1A;&#x5C31;&#x7B97;&#x603B;&#x4F53;&#x7684;&#x53EF;&#x7528;&#x7A7A;&#x95F4;&#x6EE1;&#x8DB3;&#x5BF9;&#x8C61;&#x7684;&#x9700;&#x6C42;&#xFF0C;&#x4F46;&#x56E0;&#x4E3A;&#x88AB;&#x5206;&#x6563;&#x5230;&#x5404;&#x4E2A;&#x89D2;&#x843D;&#xFF0C;&#x6240;&#x4EE5;&#x65E0;&#x6CD5;&#x5206;&#x914D;&#x3002;</p>
<p>&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x6211;&#x4EEC;&#x53EB;&#x505A;<strong>&#x5185;&#x5B58;&#x788E;&#x7247;&#x5316;</strong>&#x3002;</p>
<h3 id="compact-gc-%E7%A7%BB%E5%8A%A8%E5%B9%B6%E6%95%B4%E7%90%86%E5%AD%98%E6%B4%BB%E5%AF%B9%E8%B1%A1">Compact GC: &#x79FB;&#x52A8;&#x5E76;&#x6574;&#x7406;&#x5B58;&#x6D3B;&#x5BF9;&#x8C61;</h3>
<p>&#x548C;&#x6211;&#x4EEC;&#x5E73;&#x65F6;&#x6253;&#x626B;&#x536B;&#x751F;&#x4E00;&#x6837;&#xFF0C;&#x6211;&#x4EEC;&#x5728;&#x4E22;&#x5783;&#x573E;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4E5F;&#x4F1A;&#x987A;&#x624B;&#x628A;&#x623F;&#x95F4;&#x6574;&#x7406;&#x4E00;&#x4E0B;&#x3002;</p>
<p>&#x8981;&#x89E3;&#x51B3;&#x788E;&#x7247;&#x5316;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x8981;&#x5B9E;&#x73B0;&#x7684;&#x5C31;&#x662F;&#x628A;&#x5B58;&#x6D3B;&#x7684;&#x5BF9;&#x8C61;&#x653E;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x4E00;&#x7AEF;&#x3002;</p>
<p>&#x8FD9;&#x6837;&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x7AEF;&#x5C31;&#x5168;&#x90E8;&#x90FD;&#x662F;&#x5783;&#x573E;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x5206;&#x914D;&#x65B0;&#x7684;&#x5BF9;&#x8C61;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/CompactGC_ManimCE_v0.17.2.gif" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1920" height="1080" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/CompactGC_ManimCE_v0.17.2.gif 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/CompactGC_ManimCE_v0.17.2.gif 1000w, https://blog.lss233.com/content/images/size/w1600/2023/01/CompactGC_ManimCE_v0.17.2.gif 1600w, https://blog.lss233.com/content/images/2023/01/CompactGC_ManimCE_v0.17.2.gif 1920w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>&#x8FD9;&#x79CD;&#x64CD;&#x4F5C;&#x8BA9;&#x6211;&#x4EEC;&#x7684;&#x53EF;&#x7528;&#x5185;&#x5B58;&#x548C;&#x7A7A;&#x95F2;&#x5185;&#x5B58;&#x90FD;&#x662F;&#x8FDE;&#x7EED;&#x7684;&#xFF0C;&#x4F7F;&#x5F97;&#x6211;&#x4EEC;&#x5728;&#x5206;&#x914D;&#x65B0;&#x5BF9;&#x8C61;&#x65F6;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;<strong>&#x6307;&#x9488;&#x78B0;&#x649E;</strong>&#x3002;</p>
<p>&#x6307;&#x9488;&#x78B0;&#x649E;&#x6307;&#x7684;&#x662F;&#xFF1A;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x628A;&#x5185;&#x5B58;&#x5F53;&#x4F5C;&#x4E00;&#x4E2A;&#x7EBF;&#x6027;&#x8868;&#xFF0C;&#x7528;&#x4E00;&#x4E2A;&#x6307;&#x9488;<code>cur</code>&#x6307;&#x5411;&#x7EBF;&#x6027;&#x8868;&#x4E2D;&#x7B2C;&#x4E00;&#x4E2A;&#x53EF;&#x7528;&#x7A7A;&#x95F4;&#x7684;&#x5730;&#x5740;&#xFF0C;</p>
<p>&#x90A3;&#x4E48;&#x5982;&#x679C;&#x8981;&#x5206;&#x914D;&#x4E00;&#x4E2A;&#x65B0;&#x7684;<code>size</code>&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5F97;&#x77E5;&#x5B83;&#x7684;&#x8D77;&#x59CB;&#x4F4D;&#x7F6E;&#x662F; <code>cur</code>&#xFF0C;&#x5206;&#x914D;&#x5B8C;&#x5B8C;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x4EE5;&#x540E;&#xFF0C;&#x4E0B;&#x4E00;&#x4E2A;&#x53EF;&#x7528;&#x7684;&#x4F4D;&#x7F6E; <code>cur = cur + size</code>&#x3002;</p>
<pre><code class="language-c++">// &#x4E3A;&#x4E00;&#x4E2A;&#x65B0;&#x5BF9;&#x8C61;&#x7533;&#x8BF7;&#x7A7A;&#x95F4;
// @param size &#x65B0;&#x5BF9;&#x8C61;&#x7684;&#x5927;&#x5C0F;
// @return &#x65B0;&#x5BF9;&#x8C61;&#x7684;&#x8D77;&#x59CB;&#x5730;&#x5740;
(void*) allocate(int size)
{
    if(cur + size &lt;= total_size) { // &#x5224;&#x65AD;&#x7A7A;&#x95F4;&#x662F;&#x5426;&#x8DB3;&#x591F;&#x7533;&#x8BF7;
        int addr = cur;	// &#x65B0;&#x5BF9;&#x8C61;&#x7684;&#x8D77;&#x59CB;&#x5730;&#x5740;
        cur = cur + size; // &#x4E0B;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x7684;&#x8D77;&#x59CB;&#x5730;&#x5740;
        return addr;
    }
    return nullptr; // &#x7A7A;&#x95F4;&#x4E0D;&#x8DB3;&#xFF0C;&#x7533;&#x8BF7;&#x5931;&#x8D25;
}
</code></pre>
<p>&#x4F46;&#x8FD9;&#x6837;&#x505A;&#x5176;&#x5B9E;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#xFF1A;&#x6574;&#x7406;&#x7684;&#x8FC7;&#x7A0B;&#x9700;&#x8981;&#x65F6;&#x95F4;&#x3002;</p>
<p>&#x5176;&#x5B9E;&#x4E0D;&#x96BE;&#x7406;&#x89E3;&#xFF0C;&#x626B;&#x63CF;&#x5B8C;&#x4E00;&#x6B21;&#x5783;&#x573E;&#x4E4B;&#x540E;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x80AF;&#x5B9A;&#x662F;&#x4E1C;&#x4E00;&#x5757;&#x897F;&#x4E00;&#x5757;&#xFF0C;&#x5982;&#x679C;&#x60F3;&#x8BA9;&#x6240;&#x6709;&#x53EF;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x4E56;&#x4E56;&#x5730;&#x8D34;&#x5728;&#x4E00;&#x7AEF;&#xFF0C;&#x90A3;&#x80AF;&#x5B9A;&#x5F97;&#x4EA4;&#x6362;&#x3002;</p>
<h3 id="copying-gc-%E5%B0%86%E5%AD%98%E6%B4%BB%E5%AF%B9%E8%B1%A1%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8F%A6%E5%A4%96%E7%9A%84%E5%86%85%E5%AD%98%E7%A9%BA%E9%97%B4">Copying GC: &#x5C06;&#x5B58;&#x6D3B;&#x5BF9;&#x8C61;&#x590D;&#x5236;&#x5230;&#x53E6;&#x5916;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;</h3>
<p>&#x548C;&#x4E0A;&#x4E00;&#x79CD;&#x7B97;&#x6CD5;&#x76F8;&#x6BD4;&#xFF0C;&#x5B83;&#x5C31;&#x7B80;&#x5355;&#x7C97;&#x66B4;&#x7684;&#x591A;&#x4E86;&#x3002;</p>
<p>&#x8FD9;&#x79CD;&#x7B97;&#x6CD5;&#x5728;&#x6E05;&#x7406;&#x5783;&#x573E;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x76F4;&#x63A5;&#x627E;&#x4E00;&#x5757;&#x5E72;&#x51C0;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF08;&#x73B0;&#x5728;&#x6CA1;&#x6709;&#x5B58;&#x5BF9;&#x8C61;&#x7684;&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x524D;&#x9762;&#x6807;&#x8BB0;&#x7684;<strong>&#x4E0D;&#x662F;&#x5783;&#x573E;</strong>&#x7684;&#x5BF9;&#x8C61;&#x5168;&#x90E8;&#x4E22;&#x8FDB;&#x53BB;&#x3002;</p>
<p>&#x8FD9;&#x6837;&#xFF0C;&#x539F;&#x6765;&#x7684;&#x90A3;&#x5757;&#x7A7A;&#x95F4;&#x5C31;&#x5168;&#x90E8;&#x90FD;&#x662F;&#x5783;&#x573E;&#x4E86;&#x3002;</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2023/01/CopyingGC_ManimCE_v0.17.2.gif" class="kg-image" alt="10 &#x5206;&#x949F;&#x5FEB;&#x901F;&#x5165;&#x95E8;&#x5783;&#x573E;&#x56DE;&#x6536;&#x673A;&#x5236;" loading="lazy" width="1920" height="1080" srcset="https://blog.lss233.com/content/images/size/w600/2023/01/CopyingGC_ManimCE_v0.17.2.gif 600w, https://blog.lss233.com/content/images/size/w1000/2023/01/CopyingGC_ManimCE_v0.17.2.gif 1000w, https://blog.lss233.com/content/images/size/w1600/2023/01/CopyingGC_ManimCE_v0.17.2.gif 1600w, https://blog.lss233.com/content/images/2023/01/CopyingGC_ManimCE_v0.17.2.gif 1920w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p>&#x867D;&#x7136;&#x8FD8;&#x662F;&#x9700;&#x8981;&#x590D;&#x5236;&#xFF0C;&#x4F46;&#x81F3;&#x5C11;&#x5B83;&#x6574;&#x7406;&#x7684;&#x8FC7;&#x7A0B;&#x5C11;&#x4E86;&#x4EA4;&#x6362;&#x8FD9;&#x4E00;&#x6B65;&#x9AA4;&#x3002;</p>
<p>&#x4F46;&#x8FD9;&#x79CD;&#x4E22;&#x6CD5;&#x4E5F;&#x6709;&#x5B83;&#x7684;&#x7F3A;&#x70B9;&#xFF0C;&#x6BD4;&#x5982;&#x8BF4;&#xFF1A;&#x5FC5;&#x987B;&#x627E;&#x4E00;&#x5757;&#x5E72;&#x51C0;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF0C;&#x5962;&#x4F88;&#x3002;</p>
<p>&#x5982;&#x679C;&#x5B58;&#x6D3B;&#x7684;&#x5BF9;&#x8C61;&#x6BD4;&#x8F83;&#x591A;&#x7684;&#x8BDD;&#xFF0C;&#x5C31;&#x5F97;&#x590D;&#x5236;&#x4E00;&#x5806;&#x4E1C;&#x897F;&#xFF0C;&#x82B1;&#x65F6;&#x95F4;&#x3002;</p>
<p>&#x65E2;&#x7136;&#x8FD9;&#x4E9B;&#x4E22;&#x5783;&#x573E;&#x7684;&#x65B9;&#x6CD5;&#x5404;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x7F3A;&#x70B9;&#xFF0C;&#x90A3;&#x4E48;&#x6211;&#x4EEC;&#x5728;&#x5B9E;&#x9645;&#x4E2D;&#x80AF;&#x5B9A;&#x8981;&#x6839;&#x636E;&#x5BF9;&#x8C61;&#x7684;&#x7279;&#x70B9;&#x6765;&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684;&#x6E05;&#x7406;&#x7B56;&#x7565;&#x3002;</p>
<h3 id="%E6%B7%B7%E5%90%88%E6%B8%85%E7%90%86%E7%AD%96%E7%95%A5-%E2%80%94%E2%80%94-%E5%88%86%E4%BB%A3%E5%81%87%E8%AF%B4">&#x6DF7;&#x5408;&#x6E05;&#x7406;&#x7B56;&#x7565; &#x2014;&#x2014; &#x5206;&#x4EE3;&#x5047;&#x8BF4;</h3>
<p>&#x8FD9;&#x4E2A;&#x7B97;&#x6CD5;&#x5F88;&#x591A;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x7684; runtime &#x90FD;&#x5728;&#x7528;&#xFF0C;&#x7279;&#x522B;&#x662F; Java&#x3002;</p>
<p>&#x5206;&#x4EE3;&#x5047;&#x8BF4;&#x8BA4;&#x4E3A;&#xFF1A;&#x5927;&#x90E8;&#x5206;&#x5BF9;&#x8C61;&#x90FD;&#x5C5E;&#x4E8E;<strong>&#x65E9;&#x5E74;&#x592D;&#x6298;</strong>&#x7684;&#x7C7B;&#x578B;&#x3002;</p>
<p>&#x8FD9;&#x4E5F;&#x5F88;&#x597D;&#x7406;&#x89E3;&#xFF0C;&#x6BD5;&#x7ADF;&#x6211;&#x4EEC;&#x73B0;&#x5728;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x90FD;&#x559C;&#x6B22;&#x8BA4;&#x4E3A;<strong>&#x4E07;&#x7269;&#x7686;&#x5BF9;&#x8C61;</strong>&#xFF0C;&#x4F60;&#x7684;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x91CC;&#x53EF;&#x80FD;&#x5C31;&#x9020;&#x51FA;&#x4E86;&#x597D;&#x51E0;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x4F46;&#x6700;&#x7EC8;&#x53EA;&#x8FD4;&#x56DE;&#x90A3;&#x4E48;&#x4E00;&#x4E24;&#x4E2A;&#x3002;</p>
<p>&#x6240;&#x4EE5;&#xFF0C;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x4E3A;&#x6BCF;&#x4E2A;&#x5BF9;&#x8C61;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x201C;&#x5E74;&#x9F84;&#x201D; &#x2014;&#x2014; &#x8BE5;&#x5BF9;&#x8C61;&#x6240;&#x7ECF;&#x5386;&#x8FC7;&#x7684; GC &#x6B21;&#x6570;&#x3002;</p>
<p>&#x8FD9;&#x6837;&#x4E00;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x5C31;&#x53EF;&#x4EE5;&#x533A;&#x5206;&#x51FA;&#x5BF9;&#x5E74;&#x8F7B;&#x7684;&#x5BF9;&#x8C61;&#x548C;&#x8001;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x5E76;&#x4E3A;&#x4ED6;&#x4EEC;&#x5206;&#x522B;&#x91C7;&#x7528;&#x4E0D;&#x540C;&#x7684; GC &#x7B56;&#x7565;&#x3002;</p>
<ul>
<li>
<p><strong>&#x5E74;&#x8F7B;&#x4EE3;&#xFF1A;</strong>  &#x7531;&#x4E8E;&#x5B58;&#x6D3B;&#x5BF9;&#x8C61;&#x5C11;&#xFF0C;&#x53EF;&#x4EE5;&#x91C7;&#x7528; Copying GC &#x7684;&#x7B56;&#x7565;&#x6765;&#x6E05;&#x7406;&#x3002;</p>
</li>
<li>
<p><strong>&#x8001;&#x5E74;&#x4EE3;</strong>&#xFF1A;  &#x7531;&#x4E8E;&#x4E00;&#x76F4;&#x6D3B;&#x7740;&#xFF0C;&#x53CD;&#x590D;&#x590D;&#x5236;&#x5F00;&#x9500;&#x8F83;&#x5927;&#xFF0C;&#x90A3;&#x6211;&#x4EEC;&#x5C31;&#x91C7;&#x7528; Mark-sweep &#x7684;&#x7B56;&#x7565;&#x6E05;&#x7406;&#x3002;</p>
</li>
</ul>
<h1 id="0x03-%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E8%BF%90%E8%A1%8C%E6%97%B6%E4%B8%AD%E7%9A%84%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8">0x03 &#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x8FD0;&#x884C;&#x65F6;&#x4E2D;&#x7684;&#x5783;&#x573E;&#x6536;&#x96C6;&#x5668;</h1>
<p>&#x4E0A;&#x9762;&#x6211;&#x4EEC;&#x8BF4;&#x7684;&#x90A3;&#x4E9B;&#x90FD;&#x662F;&#x7406;&#x8BBA;&#x57FA;&#x7840;&#xFF0C;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x4ECE;&#x91CC;&#x9762;&#x6311;&#x9009;&#x4E00;&#x4E24;&#x4E2A;&#x8FDB;&#x884C;&#x5B9E;&#x73B0;&#xFF0C;&#x90A3;&#x5C31;&#x6210;&#x4E3A;&#x4E86;&#x7F16;&#x7A0B;&#x8BED;&#x8A00; runtime &#x4E2D;&#x7684; &#x5783;&#x573E;&#x6536;&#x96C6;&#x5668;&#x3002;</p>
<p>&#x5728;&#x5B9E;&#x73B0;&#x7B97;&#x6CD5;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x5783;&#x573E;&#x6536;&#x96C6;&#x5668;&#x4F1A;&#x6839;&#x636E;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x7684;&#x7279;&#x6027;&#x6765;&#x4FEE;&#x6539;&#x7B97;&#x6CD5;&#xFF0C;</p>
<p>&#x4EE5; Java &#x4E3A;&#x4F8B;&#xFF0C; &#x4ECE; JDK1.1 &#x5230; JDK1.8&#xFF0C;Java &#x7684;&#x5F00;&#x53D1;&#x8005;&#x4EEC;&#x5F00;&#x53D1;&#x51FA;&#x4E86; 6 &#x79CD; GC &#x6536;&#x96C6;&#x5668;&#xFF0C;&#x90FD;&#x662F;&#x4EE5;&#x8DDF;&#x8E2A;&#x6807;&#x8BB0;&#x7684;&#x65B9;&#x5F0F;&#x5BFB;&#x627E;&#x5783;&#x573E;&#xFF0C;&#x4F7F;&#x7528;&#x5206;&#x4EE3;&#x5047;&#x8BF4;&#x6E05;&#x7406;&#x5783;&#x573E;&#x3002;&#x968F;&#x7740; JDK1.8 &#x53D1;&#x5E03;&#x7684; G1 &#x6536;&#x96C6;&#x5668;&#x4F1A;&#x8FD8;&#x901A;&#x8FC7;&#x5EFA;&#x7ACB;&#x6570;&#x5B66;&#x6A21;&#x578B;&#x6765;&#x9884;&#x6D4B; Stop-The-World &#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x8BA9;&#x505C;&#x987F;&#x66F4;&#x52A0;&#x53EF;&#x63A7;&#xFF0C;&#x88AB;&#x5E7F;&#x6CDB;&#x5E94;&#x7528;&#x4E8E;&#x5546;&#x4E1A;&#x9886;&#x57DF;&#x3002;</p>
<p>PHP &#x5219;&#x662F;&#x77E5;&#x540D;&#x7684;&#x5F15;&#x7528;&#x7B97;&#x6CD5;&#x4F7F;&#x7528;&#x8005;&#xFF0C;&#x8FD9;&#x548C; PHP &#x4E3B;&#x8981;&#x4F7F;&#x7528;&#x7684; CGI &#x6A21;&#x5F0F;&#x6709;&#x5173;&#xFF0C;PHP &#x4EE3;&#x7801;&#x7684;&#x751F;&#x547D;&#x5468;&#x671F;&#x4E3B;&#x8981;&#x5728;&#x4E00;&#x6B21;&#x8BF7;&#x6C42;&#x7ED3;&#x675F;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x5F88;&#x5C11;&#x6709;&#x673A;&#x4F1A;&#x5F00;&#x542F;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x8FDB;&#x7A0B;&#x6765;&#x6E05;&#x7406;&#x5783;&#x573E;&#x3002;</p>
<p>Python &#x4E3A;&#x4E86;&#x8BA9;&#x81EA;&#x5DF1;&#x53EF;&#x4EE5;&#x9002;&#x5E94;&#x5404;&#x79CD;&#x5E94;&#x7528;&#x573A;&#x666F;&#xFF0C;&#x76F4;&#x63A5;&#x5F00;&#x653E;&#x4E86; <code>gc</code> &#x6A21;&#x5757;&#xFF0C;&#x5141;&#x8BB8;&#x5F00;&#x53D1;&#x8005;&#x5B9E;&#x73B0;&#x81EA;&#x5DF1;&#x7684;&#x5783;&#x573E;&#x6E05;&#x7406;&#x7B97;&#x6CD5;&#x3002;</p>
<p>Go &#x901A;&#x8FC7;&#x66F4;&#x4E3A;&#x5148;&#x8FDB;&#x7684;&#x5185;&#x5B58;&#x5206;&#x914D;&#x7B97;&#x6CD5; <strong>TCMalloc</strong> &#x89E3;&#x51B3;&#x4E86;&#x5185;&#x5B58;&#x788E;&#x7247;&#x5316;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x901A;&#x8FC7;&#x7F16;&#x8BD1;&#x5668;&#x4F18;&#x5316;&#x5B9E;&#x73B0;&#x9003;&#x9038;&#x5206;&#x6790;&#xFF0C;&#x8BA9;&#x65E9;&#x671F;&#x521B;&#x5EFA;&#x7684;&#x5BF9;&#x8C61;&#x76F4;&#x63A5;&#x5728;&#x6808;&#x4E0A;&#x9500;&#x6BC1;&#xFF0C;&#x4ECE;&#x800C;&#x4E0D;&#x4F9D;&#x8D56;&#x5206;&#x7C7B;&#x5047;&#x8BF4;&#xFF0C;&#x8BA9; STW &#x505C;&#x987F;&#x7F29;&#x77ED;&#x81F3;&#x5FAE;&#x79D2;&#x7EA7;&#x522B;&#x3002;&#x8FD9;&#x662F;&#x5B83;&#x8FC5;&#x901F;&#x8D70;&#x7EA2;&#x7684;&#x539F;&#x56E0;&#x4E4B;&#x4E00;&#x3002;</p>
<p>&#x672C;&#x6587;&#x4ECB;&#x7ECD;&#x7684;&#x5783;&#x573E;&#x6536;&#x96C6;&#x7B97;&#x6CD5;&#x5E76;&#x4E0D;&#x5B8C;&#x5584;&#xFF0C;&#x5728;&#x5B66;&#x4E60;&#x5177;&#x4F53;&#x7684;&#x5783;&#x573E;&#x6536;&#x96C6;&#x5668;&#x7B97;&#x6CD5;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x7ED3;&#x5408;&#x8FD9;&#x95E8;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x7684;&#x7279;&#x5F81;&#x548C;&#x5B83;&#x7684;&#x4F7F;&#x7528;&#x573A;&#x666F;&#xFF0C;&#x518D;&#x6765;&#x5206;&#x6790;&#x5B83;&#x662F;&#x5982;&#x4F55;&#x4FEE;&#x6539;&#x548C;&#x5B8C;&#x5584;&#x8FD9;&#x4E9B;&#x7B97;&#x6CD5;&#x7684;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x5B66;&#x4E60;&#x5F97;&#x66F4;&#x5FEB;&#x3002;</p>
<p>&#x53C2;&#x8003;&#x94FE;&#x63A5;&#xFF1A;</p>
<ol>
<li><a href="https://memostack.tistory.com/229">JVM GC &#xB3D9;&#xC791; &#xC21C;&#xC11C;</a></li>
<li><a href="https://en.wikipedia.org/wiki/Tracing_garbage_collection">Tracing Garbage Collection</a></li>
<li><a href="https://www.cnblogs.com/cielosun/p/6674431.html">Java&#x57FA;&#x7840;&#xFF1A;JVM&#x5783;&#x573E;&#x56DE;&#x6536;&#x7B97;&#x6CD5;</a></li>
<li><a href="https://nullcc.github.io/2017/11/11/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6%28GC%29%E7%AE%97%E6%B3%95%E4%BB%8B%E7%BB%8D%282%29%E2%80%94%E2%80%94GC%E5%BC%95%E7%94%A8%E8%AE%A1%E6%95%B0%E7%AE%97%E6%B3%95/#%E4%BC%98%E7%82%B9%E5%92%8C%E7%BC%BA%E7%82%B9">&#x5783;&#x573E;&#x56DE;&#x6536;(GC)&#x7B97;&#x6CD5;&#x4ECB;&#x7ECD;(2)&#x2014;&#x2014;GC&#x5F15;&#x7528;&#x8BA1;&#x6570;&#x7B97;&#x6CD5;</a></li>
<li><a href="https://google.github.io/tcmalloc/overview.html">TCMalloc Overview</a></li>
</ol>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[2022: 艰难，但充满希望]]></title><description><![CDATA[<p>&#x968F;&#x7740;&#x5FD9;&#x788C;&#x7684;&#x7ED3;&#x675F;&#xFF0C;&#x7EC8;&#x4E8E;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x5199;&#x4ECA;&#x5E74;&#x7684;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x4E86;&#x3002;</p><p>&#x6390;&#x6307;&#x4E00;&#x7B97;&#xFF0C;&#x8FD9;&#x662F;&#x300A;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x300B;&#x7CFB;&#x5217;&#x7684;&#x7B2C;&#x4E94;&#x7BC7;&#x6587;&#x7AE0;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;</p>]]></description><link>https://blog.lss233.com/2022-jian-nan-er-you-chong-man-xi-wang/</link><guid isPermaLink="false">63b03763a446270829392e22</guid><category><![CDATA[年末总结]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Sat, 31 Dec 2022 16:07:03 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1672484730377-97b2d5676629?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8YWxsfDJ8fHx8fHwyfHwxNjcyNDkyOTE4&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1672484730377-97b2d5676629?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8YWxsfDJ8fHx8fHwyfHwxNjcyNDkyOTE4&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=2000" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;"><p>&#x968F;&#x7740;&#x5FD9;&#x788C;&#x7684;&#x7ED3;&#x675F;&#xFF0C;&#x7EC8;&#x4E8E;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x5199;&#x4ECA;&#x5E74;&#x7684;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x4E86;&#x3002;</p><p>&#x6390;&#x6307;&#x4E00;&#x7B97;&#xFF0C;&#x8FD9;&#x662F;&#x300A;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x300B;&#x7CFB;&#x5217;&#x7684;&#x7B2C;&#x4E94;&#x7BC7;&#x6587;&#x7AE0;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x6211;&#x4ECE;2018&#x5E74;&#x7684;&#x6700;&#x540E;&#x4E00;&#x5929;&#x5F00;&#x59CB;&#x5199;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF0C;&#x5230;&#x73B0;&#x5728;&#x6B63;&#x597D;&#x662F;&#x7B2C;&#x4E94;&#x5E74;&#x3002;</p><h2 id="%E8%BF%87%E5%8E%BB%E4%B8%80%E5%B9%B4%E9%87%8C%EF%BC%8C%E6%88%91%E5%81%9A%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F">&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x6211;&#x505A;&#x4E86;&#x4EC0;&#x4E48;&#xFF1F;</h2><p>&#x4F3C;&#x4E4E;&#x6709;&#x5F88;&#x591A;&#x4E8B;&#x60C5;&#xFF0C;&#x8BA9;&#x6211;&#x5148;&#x634B;&#x4E00;&#x634B;&#x2026;&#x2026;</p><p>&#x8FD9;&#x4E00;&#x5E74;&#xFF0C;&#x6211;&#x2026;&#x2026;</p><ul><li>&#x5199;&#x4E86; <code>1500+</code> &#x4E2A; commit&#xFF0C; <code>24</code> &#x4E2A; Pull Request</li><li>&#x535A;&#x5BA2;&#x53D1;&#x5E03;&#x4E86; 3 &#x7BC7;&#x6587;&#x7AE0;&#xFF0C;&#x5176;&#x4E2D; 1 &#x7BC7;&#x4E3A;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x3002;</li><li>&#x8FFD;&#x4E86; <code>2</code> &#x90E8;&#x756A;&#xFF0C; &#x770B;&#x4E86; <code>1</code> &#x90E8;&#x7F8E;&#x5267;&#x3002;</li></ul><h3 id="%E4%B8%8A%E5%8D%8A%E5%B9%B4%EF%BC%9Arm%E7%94%9F%E6%B6%AF%E4%B8%AD%E6%B0%B8%E8%BF%9C%E7%9A%84%E9%81%97%E6%86%BE">&#x4E0A;&#x534A;&#x5E74;&#xFF1A;RM&#x751F;&#x6DAF;&#x4E2D;&#x6C38;&#x8FDC;&#x7684;&#x9057;&#x61BE;</h3><p>&#x4ECE;&#x4E0A;&#x534A;&#x5E74;&#x7684;&#x5F00;&#x5B66;&#x4E00;&#x76F4;&#x5230;&#x516D;&#x6708;&#x521D;&#xFF0C;&#x6211;&#x90FD;&#x5728;&#x5168;&#x8EAB;&#x5FC3;&#x5730;&#x6295;&#x5165;&#x5230; RoboMaster 2022 &#x8D5B;&#x5B63;&#x7684;&#x5907;&#x8D5B;&#x5F53;&#x4E2D;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/1672493879649.jpeg" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="2000" height="1502" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/1672493879649.jpeg 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/1672493879649.jpeg 1000w, https://blog.lss233.com/content/images/size/w1600/2022/12/1672493879649.jpeg 1600w, https://blog.lss233.com/content/images/2022/12/1672493879649.jpeg 2130w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x516D;&#x6708;&#x521D;&#xFF0C;&#x6211;&#x4EEC;&#x6765;&#x5230;&#x4E86;&#x53A6;&#x95E8;&#xFF0C;&#x53C2;&#x52A0;&#x533A;&#x57DF;&#x8D5B;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/1672493863891.jpeg" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="2000" height="1502" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/1672493863891.jpeg 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/1672493863891.jpeg 1000w, https://blog.lss233.com/content/images/size/w1600/2022/12/1672493863891.jpeg 1600w, https://blog.lss233.com/content/images/2022/12/1672493863891.jpeg 2130w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x5728;&#x6BD4;&#x8D5B;&#x524D;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x5C3D;&#x7BA1;&#x6CA1;&#x6211;&#x4EC0;&#x4E48;&#x4E8B;&#x60C5;&#xFF0C;&#x4F46;&#x6211;&#x8FD8;&#x662F;&#x6CA1;&#x600E;&#x4E48;&#x7761;&#x89C9;&#xFF0C;&#x56E0;&#x4E3A;&#x89C9;&#x5F97;&#x961F;&#x53CB;&#x90FD;&#x5728;&#x4E3A;&#x56E2;&#x961F;&#x800C;&#x52AA;&#x529B;&#x7740;&#xFF0C;&#x6211;&#x76F4;&#x63A5;&#x53BB;&#x7761;&#x89C9;&#x4E0D;&#x592A;&#x5B89;&#x5FC3;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/1672493887602.jpeg" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="2000" height="1502" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/1672493887602.jpeg 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/1672493887602.jpeg 1000w, https://blog.lss233.com/content/images/size/w1600/2022/12/1672493887602.jpeg 1600w, https://blog.lss233.com/content/images/2022/12/1672493887602.jpeg 2130w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x90A3;&#x51E0;&#x5929;&#x7684;&#x5929;&#x6C14;&#x4E5F;&#x4E0D;&#x662F;&#x7279;&#x522B;&#x597D;&#xFF0C;&#x6709;&#x597D;&#x51E0;&#x6B21;&#x662F;&#x6DCB;&#x7740;&#x96E8;&#x56DE;&#x4F4F;&#x7684;&#x5730;&#x65B9;&#x7684;&#x3002;&#x5F53;&#x65F6;&#x5C31;&#x5E26;&#x4E86;&#x4E00;&#x53CC;&#x978B;&#xFF0C;&#x975E;&#x5E38;&#x75DB;&#x82E6;&#xFF0C;&#x8FD9;&#x4E5F;&#x8BB8;&#x6697;&#x793A;&#x4E86;&#x6211;&#x4EEC;&#x60B2;&#x5267;&#x6536;&#x573A;&#x7684;&#x7ED3;&#x5C40; &#x2014;&#x2014; &#x5C0F;&#x7EC4;&#x7B2C;&#x4E09;&#x7684;&#x6210;&#x7EE9;&#x60E8;&#x8D25;&#x56DE;&#x5BB6;&#x3002;</p><p>&#x4E5F;&#x8BB8;&#x662F;&#x56E0;&#x4E3A;&#x5BF9;&#x624B;&#x592A;&#x5F3A;&#xFF0C;&#x6216;&#x8005;&#x662F;&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x592A;&#x8FC7;&#x81EA;&#x4FE1;&#x3002;&#x8EAB;&#x4E3A;&#x6B65;&#x5175;&#x64CD;&#x4F5C;&#x624B;&#x7684;&#x6211;&#xFF0C;&#x8FDE;&#x4E00;&#x6B21;&#x4F53;&#x9A8C;&#x81EA;&#x7784;&#x7684;&#x673A;&#x4F1A;&#x90FD;&#x6CA1;&#x6709;&#x3002;</p><p>&#x6211;&#x4EEC;&#x7684;&#x6700;&#x540E;&#x4E00;&#x573A;&#x6BD4;&#x8D5B;&#x7ED3;&#x675F;&#x4E4B;&#x540E;&#xFF0C;&#x6211;&#x54ED;&#x4E86;&#x5F88;&#x4E45;&#x3002;</p><h3 id="4%E6%9C%88%E4%BB%BD%EF%BC%9A%E5%85%A5%E6%89%8B-dji-air2-%E6%97%A0%E4%BA%BA%E6%9C%BA">4&#x6708;&#x4EFD;&#xFF1A;&#x5165;&#x624B; DJI Air2 &#x65E0;&#x4EBA;&#x673A;</h3><p>&#x5F88;&#x60F3;&#x4E70;&#x4E00;&#x53F0;&#x65E0;&#x4EBA;&#x673A;&#x73A9;&#x73A9;&#xFF0C;&#x4E8E;&#x662F;&#x4FBF;&#x4E70;&#x4E86;&#x3002;</p><figure class="kg-card kg-image-card kg-width-full"><img src="https://blog.lss233.com/content/images/2022/12/1672493847781-1.jpeg" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="2000" height="1125" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/1672493847781-1.jpeg 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/1672493847781-1.jpeg 1000w, https://blog.lss233.com/content/images/size/w1600/2022/12/1672493847781-1.jpeg 1600w, https://blog.lss233.com/content/images/2022/12/1672493847781-1.jpeg 2000w"></figure><p>&#x62CD;&#x4E86;&#x51E0;&#x5F20;&#x7167;&#x7247;&#x73A9;&#x4E86;&#x73A9;&#xFF0C;&#x7136;&#x540E;&#x5C31;&#x8BA9;&#x5B83;&#x4E00;&#x76F4;&#x5403;&#x7070;&#x3002;&#x6700;&#x4E3B;&#x8981;&#x7684;&#x539F;&#x56E0;&#x5176;&#x5B9E;&#x8FD8;&#x662F;&#x56E0;&#x4E3A;&#x5B83;&#x592A;&#x6709;&#x70B9;&#x8D35;&#xFF0C;&#x6015;&#x73A9;&#x574F;&#x4E86;&#x3002;</p><p>&#x5728;&#x5E74;&#x5E95;&#x5C01;&#x6821;&#x7684;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#x91CC;&#xFF0C;&#x6211;&#x4EEC;&#x8FD8;&#x7528;&#x8FC7;&#x8FD9;&#x53F0;&#x65E0;&#x4EBA;&#x673A;&#x5728;&#x5357;&#x5317;&#x4E24;&#x4E2A;&#x6821;&#x533A;&#x4E4B;&#x95F4;&#x9001;&#x8FC7;&#x4E1C;&#x897F;&#x3002;</p><h3 id="8%E6%9C%88%EF%BC%9A%E5%9C%A8%E5%B9%BF%E5%B7%9E%EF%BC%8C%E7%BB%99%E5%A4%A7%E7%96%86%E6%89%93%E5%B7%A5">8&#x6708;&#xFF1A;&#x5728;&#x5E7F;&#x5DDE;&#xFF0C;&#x7ED9;&#x5927;&#x7586;&#x6253;&#x5DE5;</h3><p>&#x4E03;&#x6708;&#x4EFD;&#x65F6;&#xFF0C;&#x6211;&#x5728; RM &#x53C2;&#x8D5B;&#x7FA4;&#x91CC;&#x5F97;&#x4E86; RoboMaster &#x9752;&#x5C11;&#x5E74;&#x7CFB;&#x5217;&#x8D5B;&#x56FD;&#x8D5B;&#x7684;&#x4E3E;&#x529E;&#x6D88;&#x606F;&#x3002;&#x5F53;&#x65F6;&#x89C9;&#x5F97;&#x633A;&#x6709;&#x610F;&#x601D;&#x7684;&#xFF0C;&#x4E8E;&#x662F;&#x5C31;&#x62A5;&#x540D;&#x4E86;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/image-2.png" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="283" height="443"></figure><p>&#x7ECF;&#x8FC7;&#x8003;&#x6838;&#x4E4B;&#x540E;&#xFF0C;&#x6211;&#x88AB;&#x5206;&#x914D;&#x5230; RMYT &#xFF08;&#x9752;&#x5C11;&#x5E74;&#x65E0;&#x4EBA;&#x673A;&#x7CFB;&#x5217;&#x6311;&#x6218;&#x8D5B;&#xFF09;&#x8D5B;&#x4E8B;&#x6267;&#x884C;&#x5206;&#x7EC4;&#x4E2D;&#x3002;&#x5E76;&#x4E14;&#x5728; 8 &#x6708;&#x4E2D;&#x65EC;&#x72EC;&#x81EA;&#x4E00;&#x4EBA;&#x524D;&#x5F80;&#x5E7F;&#x5DDE;&#x5357;&#x6C99;&#xFF0C;&#x5230;&#x5C97;&#x4E0A;&#x73ED;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/1672493959532.jpeg" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="1600" height="1067" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/1672493959532.jpeg 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/1672493959532.jpeg 1000w, https://blog.lss233.com/content/images/2022/12/1672493959532.jpeg 1600w" sizes="(min-width: 1200px) 1200px"></figure><h3 id="%E4%B8%8B%E5%8D%8A%E5%B9%B4%EF%BC%9Aminidb">&#x4E0B;&#x534A;&#x5E74;&#xFF1A;MiniDB</h3><p>&#x8FD9;&#x5B66;&#x671F;&#x9047;&#x5230;&#x4E86;&#x4E00;&#x95E8;&#x5F88;&#x6709;&#x610F;&#x601D;&#x7684;&#x8BFE;&#x7A0B;&#xFF0C;&#x53EB;&#x300C;&#x5E94;&#x7528;&#x8F6F;&#x4EF6;&#x5F00;&#x53D1;&#x300D;&#x3002;&#x8FD9;&#x95E8;&#x8BFE;&#x7ED9;&#x6211;&#x4EEC;&#x7684;&#x4EFB;&#x52A1;&#x662F;&#x72EC;&#x7ACB;&#x5F00;&#x53D1;&#x4E00;&#x6B3E; DBMS &#xFF08;&#x4E5F;&#x6709;&#x5176;&#x4ED6;&#x7684;&#xFF0C;&#x5982; XX &#x7BA1;&#x7406;&#x7CFB;&#x7EDF;&#x4E4B;&#x7C7B;&#x5DF2;&#x7ECF;&#x5199;&#x5230;&#x817B;&#x7684;&#x4E1C;&#x897F;&#xFF09;&#x3002;</p><p>&#x8FD9;&#x662F;&#x6211;&#x7684;&#x4F5C;&#x4E1A;&#xFF1A;</p><!--kg-card-begin: markdown--><p><a href="https://github.com/lss233/MiniDB"><img src="https://gh-card.dev/repos/lss233/MiniDB.svg" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy"></a></p>
<!--kg-card-end: markdown--><p>&#x8FD9;&#x4E2A; MiniDB &#x4F7F;&#x7528; Kotlin &#x7F16;&#x5199;&#xFF0C;&#x7F51;&#x7EDC;&#x6846;&#x67B6;&#x57FA;&#x4E8E; Netty&#x3002;SQL &#x89E3;&#x6790;&#x4F7F;&#x7528;&#x7684;&#x662F; Alibaba &#x7684; Cobar&#xFF0C;&#x5176;&#x4ED6;&#x7684;&#x90E8;&#x5206;&#x90FD;&#x662F;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x5199;&#x7684;&#x3002;</p><p>&#x5728;&#x5F00;&#x53D1;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x4EEC;&#x57FA;&#x672C;&#x4E0A;&#x6CA1;&#x4EC0;&#x4E48;&#x5934;&#x7EEA;&#xFF0C;&#x4E8E;&#x662F;&#x51B3;&#x5B9A;&#x8D70;&#x4E00;&#x6B65;&#x770B;&#x4E00;&#x6B65;&#x3002;</p><p>&#x5148;&#x662F;&#x5BF9;&#x63A5;&#x4E86; PostgreSQL &#x7684;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#xFF0C;&#x7136;&#x540E;&#x64B8;&#x4E86;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684; Key-value &#x6570;&#x636E;&#x5E93;&#x540E;&#xFF0C;&#x6839;&#x636E;&#x8BFE;&#x672C;&#x4E0A;&#x7684;&#x5173;&#x7CFB;&#x4EE3;&#x6570;&#x8FD0;&#x7B97;&#x5F00;&#x59CB;&#x5B9E;&#x73B0;&#x5173;&#x7CFB;&#x5F15;&#x64CE;&#x3002;</p><p>&#x6700;&#x7EC8;&#xFF0C;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x957F;&#x8FD9;&#x6837;&#xFF1A;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/image-3.png" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="1382" height="860" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/image-3.png 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/image-3.png 1000w, https://blog.lss233.com/content/images/2022/12/image-3.png 1382w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x503C;&#x5F97;&#x4E00;&#x63D0;&#x7684;&#x662F;&#xFF0C; &#x6211;&#x4EEC;&#x5B9E;&#x73B0;&#x7684;&#x662F; PostgreSQL &#x7684;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#xFF0C;&#x56E0;&#x6B64; PostgreSQL &#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8FDE;&#x63A5;&#x5230;&#x8FD9;&#x4E2A; MiniDB&#x3002;&#x7136;&#x800C;&#xFF0C;Cobar &#x662F;&#x4E00;&#x4E2A; MySQL &#x7684; SQL Parser&#xFF0C;&#x6240;&#x4EE5;&#x4E3A;&#x4E86;&#x8BA9;&#x8FD9;&#x4E24;&#x8D27;&#x80FD;&#x7528;&#xFF0C;&#x6211;&#x4EEC;&#x53C8;&#x4E0D;&#x5F97;&#x4E0D;&#x5BF9;&#x53D1;&#x8FC7;&#x6765;&#x7684; SQL &#x8BED;&#x53E5;&#x8FDB;&#x884C;&#x9B54;&#x6539;&#x3002;</p><p>&#x6700;&#x7EC8;&#xFF0C;&#x6211;&#x4EEC;&#x8BA9;&#x5B83;&#x53EF;&#x4EE5;&#x6210;&#x529F;&#x67E5;&#x8BE2;&#x975E;&#x5E38;&#x590D;&#x6742;&#x7684; SQL &#x8BED;&#x53E5;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/image-4.png" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="751" height="775" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/image-4.png 600w, https://blog.lss233.com/content/images/2022/12/image-4.png 751w"></figure><p>&#x5F53;&#x7136;&#xFF0C;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x53EA;&#x80FD;&#x7B97;&#x662F;&#x4E2A;&#x73A9;&#x5177;&#x3002;&#x5199;&#x5230;&#x540E;&#x9762;&#x7684;&#x65F6;&#x5019;&#x6211;&#x53D1;&#x73B0;&#xFF0C;&#x5B83;&#x548C;&#x5927;&#x5BB6;&#x7684;&#x6570;&#x636E;&#x5E93;&#x957F;&#x5F97;&#x90FD;&#x4E0D;&#x592A;&#x4E00;&#x6837;&#x3002;</p><p>&#x6BD4;&#x5982;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x4E86; <code>Predicate</code> &#x6765;&#x5224;&#x65AD;&#x6761;&#x4EF6;&#xFF0C;&#x8FD9;&#x5BFC;&#x81F4;&#x4E86;&#x6211;&#x4EEC;&#x76F4;&#x63A5;&#x7528;&#x4E0D;&#x4E86;&#x7D22;&#x5F15;&#x3002;</p><p>&#x6B64;&#x5916;&#xFF0C;&#x5927;&#x5BB6;&#x7684;&#x6570;&#x636E;&#x5E93;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x53EB;&#x505A; SQL Planner &#x7684;&#x4E1C;&#x897F;&#xFF0C;&#x6211;&#x4EEC;&#x4E5F;&#x6CA1;&#x6709;&#x3002;</p><p>&#x5C06;&#x6765;&#xFF0C;&#x6211;&#x4F1A;&#x7EE7;&#x7EED;&#x5B8C;&#x5584;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x5E76;&#x4E14;&#x5C06;<a href="https://blog.lss233.com/minidb-kai-fa-shou-zha-1-jia-gou/">&#x300A;MiniDB &#x5F00;&#x53D1;&#x624B;&#x672D;&#x300B;</a>&#x7CFB;&#x5217;&#x5199;&#x5B8C;&#x3002;</p><h3 id="11%E6%9C%88%EF%BC%9A-chatgpt-for-mirai-qq-bot">11&#x6708;&#xFF1A; ChatGPT for Mirai QQ bot</h3><p>OpenAI &#x7684; ChatGPT &#x706B;&#x7206;&#x5168;&#x7F51;&#xFF0C;&#x6211;&#x5199;&#x4E86;&#x4E00;&#x4E2A;&#x4F7F;&#x7528; Mirai &#x5BF9;&#x63A5;&#x7684;&#x804A;&#x5929;&#x673A;&#x5668;&#x4EBA;&#xFF0C;&#x6CA1;&#x60F3;&#x5230;&#x5728; GitHub &#x5F00;&#x6E90;&#x4EE5;&#x540E;&#x6536;&#x5230;&#x4E86;&#x5F88;&#x591A; star&#x3002;</p><!--kg-card-begin: markdown--><p><a href="https://github.com/lss233/chatgpt-mirai-qq-bot"><img src="https://gh-card.dev/repos/lss233/chatgpt-mirai-qq-bot.svg" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy"></a></p>
<!--kg-card-end: markdown--><p>star &#x591A;&#x4E86;&#x4EE5;&#x540E;&#xFF0C; issue &#x4E5F;&#x8DDF;&#x7740;&#x591A;&#x4E86;&#x8D77;&#x6765;&#x3002;&#x5F88;&#x591A;&#x4EBA;&#x662F;&#x7B2C;&#x4E00;&#x6B21;&#x7528; Mirai&#xFF0C;&#x5728;&#x90E8;&#x7F72;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#x9047;&#x5230;&#x4E86;&#x5404;&#x79CD;&#x95EE;&#x9898;&#x3002;</p><p>&#x4E8E;&#x662F;&#x6211;&#x53C8;&#x5199;&#x4E86;&#x5404;&#x79CD;&#x6587;&#x6863;&#x548C;&#x6559;&#x7A0B;&#xFF0C;&#x8FD8;&#x5199;&#x4E86;&#x4E00;&#x4E2A; GitHub Action &#x81EA;&#x52A8;&#x751F;&#x6210; Windows &#x90E8;&#x7F72;&#x811A;&#x672C;&#x3002;</p><p>&#x540E;&#x6765;&#x8FD8;&#x7559;&#x4E86;&#x4E00;&#x4E2A;&#x4EA4;&#x6D41;&#x7FA4;&#xFF0C;&#x5728;&#x9879;&#x76EE;&#x6700;&#x706B;&#x7206;&#x7684;&#x9636;&#x6BB5;&#xFF0C;&#x6BCF;&#x5929;&#x6709;&#x4E09;&#x5341;&#x56DB;&#x4EBA;&#x52A0;&#x7FA4;&#xFF0C;&#x5168;&#x90E8;&#x90FD;&#x662F;&#x95EE;&#x600E;&#x4E48;&#x90E8;&#x7F72;&#x7684;&#x3002;</p><p>&#x5728;&#x5F00;&#x53D1;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x4E5F;&#x9047;&#x5230;&#x4E86;&#x8BB8;&#x591A; dalao&#xFF0C;&#x5E2E;&#x6211;&#x5B9E;&#x73B0;&#x4E86;&#x5404;&#x79CD;&#x529F;&#x80FD;&#x3002;</p><p>&#x6700;&#x5927;&#x7684;&#x6536;&#x83B7;&#x662F;&#x77E5;&#x9053;&#x4E86;&#x5F00;&#x6E90;&#x534F;&#x8BAE;&#x4E5F;&#x662F;&#x53EF;&#x4EE5;&#x5408;&#x5E76;&#x7684;&#x3002; AGPL + GPL = AGPL&#x3002;</p><h3 id="12%E6%9C%88%EF%BC%9A%E8%87%AA%E7%9E%84%E5%9C%A8-robomaster-ep-%E4%B8%8A%E7%9A%84%E5%AE%9E%E7%8E%B0">12&#x6708;&#xFF1A;&#x81EA;&#x7784;&#x5728; RoboMaster EP &#x4E0A;&#x7684;&#x5B9E;&#x73B0;</h3><p>&#x8D77;&#x521D;&#x662F;&#x63A5;&#x4E86;&#x4E00;&#x4E2A;&#x57F9;&#x8BAD;&#x673A;&#x6784;&#x7684;&#x59D4;&#x6258;&#x3002;&#x8FD9;&#x4E2A;&#x57F9;&#x8BAD;&#x673A;&#x6784;&#x4E5F;&#x662F;&#x4E13;&#x95E8;&#x505A;&#x9752;&#x5C11;&#x5E74;&#x673A;&#x5668;&#x4EBA;&#x6BD4;&#x8D5B;&#x57F9;&#x8BAD;&#x7684;&#xFF08;&#x5C31;&#x662F;&#x6211;&#x5728;8&#x6708;&#x4EFD;&#x5F53;&#x8D5B;&#x4E8B;&#x6267;&#x884C;&#x7684;&#x90A3;&#x4E2A;&#xFF09;&#x3002;</p><p>&#x7136;&#x540E;&#x662F;&#x56E0;&#x4E3A;&#x653F;&#x7B56;&#x6709;&#x53D8;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x5927;&#x5B66;&#x751F;&#x5FC5;&#x987B;&#x79BB;&#x6821;&#x8FD4;&#x4E61;&#x3002;&#x4E8E;&#x662F;12&#x6708;&#x7684;&#x540E;&#x534A;&#x90E8;&#x5206;&#xFF0C;&#x6211;&#x4EEC;&#x662F;&#x5728;&#x57F9;&#x8BAD;&#x673A;&#x6784;&#x5EA6;&#x8FC7;&#x7684;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/12/H1QZF-9X-SAE-OF--3-SUX9.jpg" class="kg-image" alt="2022: &#x8270;&#x96BE;&#xFF0C;&#x4F46;&#x5145;&#x6EE1;&#x5E0C;&#x671B;" loading="lazy" width="2000" height="900" srcset="https://blog.lss233.com/content/images/size/w600/2022/12/H1QZF-9X-SAE-OF--3-SUX9.jpg 600w, https://blog.lss233.com/content/images/size/w1000/2022/12/H1QZF-9X-SAE-OF--3-SUX9.jpg 1000w, https://blog.lss233.com/content/images/size/w1600/2022/12/H1QZF-9X-SAE-OF--3-SUX9.jpg 1600w, https://blog.lss233.com/content/images/2022/12/H1QZF-9X-SAE-OF--3-SUX9.jpg 2400w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x8FD9;&#x4E2A;&#x81EA;&#x7784;&#x6700;&#x521D;&#x4F7F;&#x7528; <a href="https://github.com/jeguzzi/robomaster_ros">https://github.com/jeguzzi/robomaster_ros</a> &#x8FDB;&#x884C;&#x4F20;&#x611F;&#x5668;&#x53C2;&#x6570;&#x8BFB;&#x53D6;&#x548C;&#x63A7;&#x5236;&#xFF0C;&#x8FD0;&#x884C;&#x5728;&#x6811;&#x8393;&#x6D3E;&#x4E0A;&#x3002;</p><p>&#x6811;&#x8393;&#x6D3E;&#x6700;&#x5F00;&#x59CB;&#x662F;&#x5B89;&#x88C5;&#x5728;&#x5E95;&#x76D8;&#x4E0A;&#xFF0C;&#x7136;&#x540E;&#x76F8;&#x673A;&#x8D70;&#x6ED1;&#x73AF;&#x8FDE;&#x63A5;&#x5230;&#x6811;&#x8393;&#x6D3E;&#x3002;</p><p>&#x4F46;&#x540E;&#x6765;&#x53D1;&#x73B0;&#x5982;&#x679C;&#x8981;&#x914D;&#x5408;&#x4ED6;&#x4EEC;&#x5728;&#x6BD4;&#x8D5B;&#x4E2D;&#x4F7F;&#x7528;&#xFF0C;&#x8FD8;&#x5F97;&#x8D70;&#x4E32;&#x53E3;&#xFF0C;&#x800C;&#x8FD9;&#x4E2A;&#x6ED1;&#x73AF;&#x4E5F;&#x627F;&#x8F7D;&#x4E0D;&#x4E86; USB2.0 &#x7684;&#x901A;&#x4FE1;&#x9891;&#x7387;&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x6539;&#x6210;&#x4E86;&#x73B0;&#x5728;&#x8FD9;&#x4E2A;&#x6837;&#x5B50;&#x3002;</p><p>&#x8111;&#x5B50;&#x4E0A;&#x88AB;&#x63D2;&#x4E86;&#x5F88;&#x591A;&#x7535;&#x7F06;&#xFF0C;&#x6709;&#x70B9;&#x50CF; RA2 &#x91CC;&#x7684;&#x5C24;&#x91CC;&#x3002;</p><p>&#x6D4B;&#x8BD5;&#x4E86;&#x4E00;&#x4E0B;&#x6548;&#x679C;&#x8FD8;&#x662F;&#x633A;&#x4E0D;&#x9519;&#x7684;&#xFF0C;&#x5E0C;&#x671B;&#x660E;&#x5E74;&#x7684;&#x6BD4;&#x8D5B;&#x80FD;&#x7528;&#x4E0A;&#x5B83;&#x3002;</p><h2 id="%E6%96%B0%E7%9A%84%E4%B8%80%E5%B9%B4%EF%BC%8C%E6%89%93%E7%AE%97%E5%81%9A%E4%BB%80%E4%B9%88%E5%91%A2%EF%BC%9F">&#x65B0;&#x7684;&#x4E00;&#x5E74;&#xFF0C;&#x6253;&#x7B97;&#x505A;&#x4EC0;&#x4E48;&#x5462;&#xFF1F;</h2><p>&#x56DE;&#x987E;&#x4E86;&#x53BB;&#x5E74;&#x7684;&#x5C55;&#x671B;&#x90E8;&#x5206;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x8FD9;&#x4E2A;&#x73AF;&#x8282;&#x5DF2;&#x7ECF;&#x53EF;&#x4EE5;&#x7B97;&#x662F;&#x8BC5;&#x5492;&#x4E86;&#x7F62;&#x3002;</p><p>2023&#x5E74;&#x4E0D;&#x5F97;&#x4E0D;&#x63D0;&#x7684;&#x4E00;&#x4E2A;&#x8BDD;&#x9898;&#x662F;&#xFF1A;&#x672A;&#x6765;&#xFF0C;&#x5230;&#x5E95;&#x662F;&#x8003;&#x7814;&#xFF0C;&#x8FD8;&#x662F;&#x5C31;&#x4E1A;&#xFF1F;</p><p>&#x6309;&#x7167;&#x6211;&#x76EE;&#x524D;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5728;&#x4E92;&#x8054;&#x7F51;&#x884C;&#x4E1A;&#x76F4;&#x63A5;&#x5C31;&#x4E1A;&#x5E94;&#x8BE5;&#x662F;&#x6CA1;&#x4EC0;&#x4E48;&#x592A;&#x5927;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x6211;&#x5BF9;&#x4E92;&#x8054;&#x7F51;&#x884C;&#x4E1A;&#x5DF2;&#x7ECF;&#x5931;&#x53BB;&#x5174;&#x8DA3;&#x3002;</p><p>&#x4F46;&#x662F;&#x5728;&#x673A;&#x5668;&#x4EBA;&#x884C;&#x4E1A;&#xFF0C;&#x6050;&#x6015;&#x662F;&#x6CA1;&#x6709;&#x4EC0;&#x4E48;&#x673A;&#x4F1A;&#x3002;&#x6211;&#x77E5;&#x9053;&#x7684;&#x4E1C;&#x897F;&#x8FD8;&#x592A;&#x5C11;&#xFF0C;&#x9700;&#x8981;&#x66F4;&#x9AD8;&#x7684;&#x5B66;&#x5386;&#x624D;&#x80FD;&#x8DB3;&#x4EE5;&#x652F;&#x6491;&#x3002;&#x4F46;&#x662F;&#x5BF9;&#x4E8E;&#x6211;&#x8FD9;&#x79CD;&#x4E0D;&#x64C5;&#x957F;&#x8003;&#x8BD5;&#x7684;&#x4EBA;&#x6765;&#x8BF4;&#xFF0C;&#x8003;&#x7814;&#x771F;&#x7684;&#x80FD;&#x884C;&#x5417;&#x2026;&#x2026;</p><p>&#x5728;&#x8FC7;&#x53BB;&#xFF0C;&#x6211;&#x4E00;&#x76F4;&#x56DE;&#x907F;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x73B0;&#x5728;&#xFF0C;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x5DF2;&#x7ECF;&#x9003;&#x907F;&#x4E0D;&#x4E86;&#x4E86;&#xFF0C;&#x9700;&#x8981;&#x5C3D;&#x5FEB;&#x8FDB;&#x884C;&#x4E86;&#x65AD;&#x3002;</p><p>&#x4ECE;&#x8FD1;&#x4E24;&#x5E74;&#x7684;&#x603B;&#x7ED3;&#x6765;&#x770B;&#xFF0C;&#x6211;&#x4E5F;&#x5F88;&#x5C11;&#x63A5;&#x89E6;&#x6587;&#x5B66;&#x4F5C;&#x54C1;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x8FD9;&#x4E3B;&#x8981;&#x539F;&#x56E0;&#x662F;&#x56E0;&#x4E3A;&#x5E73;&#x65F6;&#x592A;&#x5FD9;&#xFF0C;&#x6CA1;&#x65F6;&#x95F4;&#x9676;&#x51B6;&#x60C5;&#x64CD;&#x3002;&#x5E0C;&#x671B;&#x660E;&#x5E74;&#x53EF;&#x4EE5;&#x6539;&#x5584;&#x4E00;&#x4E0B;&#xFF0C;&#x591A;&#x4E00;&#x70B9;&#x65F6;&#x95F4;&#x7ED9;&#x81EA;&#x5DF1;&#x5427;&#xFF01;</p><h2 id="end">End</h2><p>&#x5148;&#x5199;&#x5230;&#x8FD9;&#x91CC;&#x3002;</p><p>&#x5E0C;&#x671B;&#x660E;&#x5E74;&#x53EF;&#x4EE5;&#x505A;&#x5F97;&#x6BD4;&#x4ECA;&#x5E74;&#x66F4;&#x597D;&#x3002;</p><p>&#x6700;&#x597D;&#x7684;&#x795D;&#x613F;&#x7ED9;2023&#x5E74;&#x7684;Lss233&#xFF0C;&#x660E;&#x5E74;&#x518D;&#x89C1;&#x3002;</p><!--kg-card-begin: html--><p align="right">--- Lss233,&#x4E8E;2022&#x5E74;&#x4E0E;2023&#x5E74;&#x8DE8;&#x5E74;&#x4E4B;&#x9645;</p><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[MiniDB 开发手札2 - 网络通信: PostgreSQL 服务端实现]]></title><description><![CDATA[<p>&#x8981;&#x5199;&#x4E00;&#x4E2A;&#x80FD;&#x591F;&#x8FDB;&#x884C;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x7684;&#x534F;&#x8BAE;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x6709;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x5B9A;&#x4E49;&#x5404;&#x79CD;&#x6570;&#x636E;&#x5305;&#x683C;&#x5F0F;&#x4EE5;&#x53CA;&#x5B83;&#x4EEC;&#x7684;&#x4EA4;&#x4E92;&#x6D41;&#x7A0B;&#xFF0C;&#x7136;&#x540E;</p>]]></description><link>https://blog.lss233.com/minidb-kai-fa-shou-zha-2-wang-luo-tong-xin-postgresql-fu-wu-duan-shi-xian/</link><guid isPermaLink="false">633ae6fda446270829392df2</guid><category><![CDATA[数据库]]></category><category><![CDATA[MiniDB开发手札]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Mon, 03 Oct 2022 13:46:13 GMT</pubDate><content:encoded><![CDATA[<p>&#x8981;&#x5199;&#x4E00;&#x4E2A;&#x80FD;&#x591F;&#x8FDB;&#x884C;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x7684;&#x534F;&#x8BAE;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x6709;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x5B9A;&#x4E49;&#x5404;&#x79CD;&#x6570;&#x636E;&#x5305;&#x683C;&#x5F0F;&#x4EE5;&#x53CA;&#x5B83;&#x4EEC;&#x7684;&#x4EA4;&#x4E92;&#x6D41;&#x7A0B;&#xFF0C;&#x7136;&#x540E;&#x9700;&#x8981;&#x8003;&#x8651;&#x5B89;&#x5168;&#x6027;&#x3001;&#x6548;&#x7387;&#x7B49;&#x5404;&#x79CD;&#x56E0;&#x7D20;&#x2026;&#x2026;&#x5B9E;&#x5728;&#x662F;&#x592A;&#x9EBB;&#x70E6;&#x4E86;&#xFF01;&#x6240;&#x4EE5;&#xFF0C;&#x4E0E;&#x5176;&#x4ECE;&#x5934;&#x5F00;&#x59CB;&#x8BBE;&#x8BA1;&#x4E00;&#x4E2A;&#x901A;&#x8BAF;&#x534F;&#x8BAE;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x4E0D;&#x5148;&#x7814;&#x7A76;&#x4E00;&#x4E0B;&#x73B0;&#x6709;&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#x7684;&#x534F;&#x8BAE;&#x5462;&#xFF1F;</p><p>&#x5982;&#x679C;&#x6211;&#x4EEC;&#x76F4;&#x63A5;&#x5B9E;&#x73B0;&#x4E86;&#x67D0;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x7684;&#x534F;&#x8BAE;&#xFF0C;&#x90A3;&#x4E48;&#x8FD9;&#x6B3E;&#x6570;&#x636E;&#x5E93;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x5C31;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8FDE;&#x63A5;&#x5230;&#x6211;&#x4EEC;&#x7684;&#x6570;&#x636E;&#x5E93;&#x4E0A;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x8BDD;&#xFF0C;&#x6211;&#x4EEC;&#x5C82;&#x4E0D;&#x662F;&#x8FDE;&#x5BA2;&#x6237;&#x7AEF;&#x90FD;&#x53EF;&#x4EE5;&#x4E0D;&#x7528;&#x5199;&#x4E86;&#x3002;&#x563F;&#x563F;&#x2026;&#x2026;</p><p>&#x62B1;&#x7740;&#x8FD9;&#x79CD;&#x60F3;&#x6CD5;&#xFF0C;&#x672C;&#x4EBA;&#x5728;&#x7F51;&#x4E0A;&#x8FDB;&#x884C;&#x4E86;&#x4E00;&#x756A;&#x8C03;&#x7814;&#xFF0C;&#x6700;&#x540E;&#x51B3;&#x5B9A;&#x4F7F;&#x7528; PostgreSQL &#x6570;&#x636E;&#x5E93;&#x7684;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x3002;</p><p>&#x9009;&#x62E9; PostgreSQL &#x4E3B;&#x8981;&#x662F;&#x56E0;&#x4E3A;&#x2026;&#x2026;</p><ol><li>&#x793E;&#x533A;&#x6D3B;&#x8DC3;&#xFF0C;&#x8D44;&#x6599;&#x4E30;&#x5BCC;&#xFF08;&#x4E0D;&#x77E5;&#x9053;&#x7684;&#x80FD; Google&#xFF09;</li><li>&#x5B98;&#x7F51;&#x6709;&#x8F83;&#x4E3A;&#x8BE6;&#x7EC6;&#x7684;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x6587;&#x6863;&#xFF08;&#x6211;&#x770B;&#x5F97;&#x61C2;&#xFF09;</li><li>&#x7248;&#x6743;&#x5C5E;&#x4E8E;&#x793E;&#x533A;&#xFF0C;&#x4E0D;&#x4F1A;&#x56E0;&#x4E3A;&#x67D0;&#x4E9B;&#x5546;&#x4E1A;&#x51B3;&#x5B9A;&#x6CE2;&#x53CA;&#x5230;&#x81EA;&#x5DF1;&#xFF08;&#x7136;&#x540E;&#x4F60;&#x5C31;&#x767D;&#x5199;&#x4E86;&#xFF09;</li><li>&#x5F00;&#x6E90;&#x534F;&#x8BAE;&#x81EA;&#x7531;&#xFF0C;&#x5141;&#x8BB8;&#x57FA;&#x4E8E;&#x5B83;&#x4FEE;&#x6539;&#x7684;&#x4EE3;&#x7801;&#x5546;&#x7528;<s>&#xFF08;&#x4E07;&#x4E00;&#x54EA;&#x5929;&#x6211;&#x7684;&#x9879;&#x76EE;&#x6210;&#x540D;&#x4E86;&#x5462;&#xFF1F;&#xFF09;</s></li></ol><p>&#x8FD8;&#x6709;&#x4E00;&#x4EF6;&#x503C;&#x5F97;&#x4E00;&#x63D0;&#x7684;&#x4E8B;&#x60C5;&#x662F;&#xFF0C;GitHub &#x4E0A;&#x4F7F;&#x7528; Kotlin/Java &#x548C; PostgreSQL &#x534F;&#x8BAE;&#x5B9E;&#x73B0;&#x7684;&#x9879;&#x76EE;&#x4E0D;&#x591A;&#xFF0C;&#x5C31;&#x7B97;&#x6709;&#xFF0C;&#x4E5F;&#x90FD;&#x662F;&#x4F5C;&#x4E3A;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x7684; MiniDB &#x662F;&#x7B2C;&#x4E00;&#x4E2A;&#x8FD9;&#x4E48;&#x5E72;&#x7684;&#xFF08;&#x6CA1;&#x6709;&#x6284;&#x88AD;&#x5ACC;&#x7591;&#xFF01;&#xFF09;</p><blockquote>PostgreSQL &#x7684;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x6587;&#x6863;&#x5728;&#x8FD9;&#x91CC;&#x53EF;&#x4EE5;&#x67E5;&#x9605;&#xFF1A;<a href="https://www.postgresql.org/docs/current/protocol.html">https://www.postgresql.org/docs/current/protocol.html</a></blockquote><h2 id="0x01-postgresql-%E9%80%9A%E4%BF%A1%E5%8D%8F%E8%AE%AE%E6%A6%82%E8%A7%88">0x01 PostgreSQL &#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x6982;&#x89C8;</h2><p>&#x7FFB;&#x5230;&#x7AE0;&#x8282;&#x76EE;&#x5F55;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5B83;&#x7531;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x90E8;&#x5206;&#x7EC4;&#x6210;&#xFF1A;</p><ul><li>Message Flow - &#x5B9A;&#x4E49;&#x6BCF;&#x4E00;&#x79CD;&#x6570;&#x636E;&#x5305;&#x5728;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x53D1;&#x9001;&#xFF0C;&#x671F;&#x671B;&#x5F97;&#x5230;&#x4EC0;&#x4E48;&#x6837;&#x7684;&#x56DE;&#x5E94;</li><li>Message Data Types - &#x5B9A;&#x4E49;&#x6570;&#x636E;&#x5305;&#x91CC;&#x4F1A;&#x5305;&#x542B;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;</li><li>Message Formats - &#x5B9A;&#x4E49;&#x6BCF;&#x4E00;&#x79CD;&#x6570;&#x636E;&#x5305;&#x7684;&#x7ED3;&#x6784;&#x548C;&#x542B;&#x4E49;</li><li>&#x901A;&#x8BAF;&#x534F;&#x8BAE;&#x7684;&#x66F4;&#x65B0;&#x65E5;&#x5FD7;</li><li>&#x4E00;&#x4E9B;&#x5176;&#x4ED6;&#x7684;&#x9AD8;&#x7EA7;&#x7684;&#x4E1C;&#x897F;&#xFF0C;&#x8FD9;&#x4E0D;&#x662F;&#x6211;&#x4EEC;&#x76EE;&#x524D;&#x9700;&#x8981;&#x8003;&#x8651;&#x7684;&#x4E1C;&#x897F;</li></ul><p>&#x8981;&#x8BA9;&#x4E00;&#x4E2A;&#x666E;&#x901A;&#x7684; PostgreSQL &#x5BA2;&#x6237;&#x7AEF;&#x80FD;&#x8FDE;&#x4E0A;&#x6211;&#x4EEC;&#x7684;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x6211;&#x4EEC;&#x53EA;&#x9700;&#x8981;&#x4E86;&#x89E3;<strong>&#x63E1;&#x624B;&#x9636;&#x6BB5;</strong>&#x548C;<strong>&#x67E5;&#x8BE2;&#x9636;&#x6BB5;</strong>&#xFF0C;&#x81F3;&#x4E8E;&#x522B;&#x7684;&#x7EC6;&#x8282;&#xFF0C;&#x6211;&#x4EEC;&#x4EE5;&#x540E;&#x9047;&#x5230;&#x4E86;&#x518D;&#x8003;&#x8651;&#x3002;</p><h3 id="start-up-phase%EF%BC%9A%E6%8F%A1%E6%89%8B">Start-up Phase&#xFF1A;&#x63E1;&#x624B;</h3><p>&#x6700;&#x7B80;&#x5355;&#x7684;&#x63E1;&#x624B;&#x6D41;&#x7A0B;&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2022/10/image-2.png" class="kg-image" alt loading="lazy" width="550" height="1012"></figure><p>&#x6839;&#x636E;&#x6587;&#x6863;&#x4E2D;&#x7684;&#x4ECB;&#x7ECD;&#xFF0C;&#x5E26;&#x6709;SSL&#x652F;&#x6301;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x5728;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x540E;&#xFF0C;&#x9996;&#x5148;&#x4F1A;&#x53D1;&#x9001;&#x4E00;&#x4E2A; SSLRequest &#x6570;&#x636E;&#x5305;&#xFF0C;&#x8BE2;&#x95EE;&#x670D;&#x52A1;&#x7AEF;&#x662F;&#x5426;&#x8FDB;&#x884C; SSL &#x52A0;&#x5BC6;&#x3002;</p><p>&#x670D;&#x52A1;&#x7AEF;&#x8981;&#x4E48;&#x56DE;&#x590D; S&#xFF0C;&#x7136;&#x540E;&#x53CC;&#x65B9;&#x8FDB;&#x5165; SSL &#x52A0;&#x5BC6;&#xFF0C;&#x6216;&#x8005;&#x56DE;&#x590D; N&#xFF0C;&#x53EA;&#x8FDB;&#x884C;&#x660E;&#x6587;&#x901A;&#x4FE1;&#x3002;</p><p>&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x4E00;&#x4E2A; StartupMessage&#xFF0C;&#x5305;&#x542B;&#x4E00;&#x4E9B;&#x57FA;&#x672C;&#x8BBE;&#x7F6E;&#x3001;&#x7528;&#x6237;&#x540D;&#x548C;&#x6570;&#x636E;&#x5E93;&#x540D;&#x5B57;&#x7B49;&#x4FE1;&#x606F;&#xFF0C;&#x4EE3;&#x8868;&#x6B63;&#x5F0F;&#x63E1;&#x624B;&#x3002;</p><p>&#x670D;&#x52A1;&#x7AEF;&#x4F1A;&#x4ECE; Authentication &#x7CFB;&#x5217;&#x7684;&#x6570;&#x636E;&#x5305;&#x4E2D;&#x53D1;&#x9001;&#x4E00;&#x4E2A;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x8868;&#x793A;&#x8BF7;&#x6C42;&#x5BA2;&#x6237;&#x7AEF;&#x4EE5;&#x67D0;&#x79CD;&#x65B9;&#x5F0F;&#x8FDB;&#x884C;&#x8BA4;&#x8BC1;&#x3002;&#x5982;&#x679C;&#x8BA4;&#x8BC1;&#x6210;&#x529F;&#xFF0C;&#x5219;&#x53D1;&#x9001; AuthenticationOk &#x7684;&#x6570;&#x636E;&#x5305;&#xFF0C;&#x4EE3;&#x8868;&#x8BA4;&#x8BC1;&#x6210;&#x529F;&#x3002; &#x5982;&#x679C;&#x8BA4;&#x8BC1;&#x5931;&#x8D25;&#xFF0C;&#x53D1;&#x9001; ErrorResponse&#x3002;</p><p>&#x8BA4;&#x8BC1;&#x6210;&#x529F;&#x4EE5;&#x540E;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x4F1A;&#x7B49;&#x5F85;&#x670D;&#x52A1;&#x7AEF;&#x53D1;&#x9001; ReadyForQuery &#x6570;&#x636E;&#x5305;&#xFF0C;&#x4EE3;&#x8868;&#x670D;&#x52A1;&#x7AEF;&#x51C6;&#x5907;&#x5B8C;&#x6BD5;&#xFF0C;&#x53EF;&#x4EE5;&#x8FDB;&#x5165;&#x67E5;&#x8BE2;&#x9636;&#x6BB5;&#x3002;&#x5728;&#x6B64;&#x671F;&#x95F4;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x53EF;&#x4EE5;&#x53D1;&#x9001;&#x4E00;&#x4E9B; ParameterStatus &#x6570;&#x636E;&#x5305;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#x5305;&#x4E2D;&#x5305;&#x542B;&#x4E00;&#x4E9B;&#x670D;&#x52A1;&#x7AEF;&#x7684;&#x9ED8;&#x8BA4;&#x8BBE;&#x7F6E;&#xFF08;&#x5982;&#x7F16;&#x7801;&#x3001;&#x65F6;&#x533A;&#x7B49;&#xFF09;&#x3002;</p><h3 id="query-phase%EF%BC%9A%E6%9F%A5%E8%AF%A2%E9%98%B6%E6%AE%B5">Query Phase&#xFF1A;&#x67E5;&#x8BE2;&#x9636;&#x6BB5;</h3><p>PostgreSQL &#x6709;&#x591A;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x67E5;&#x8BE2;&#x6A21;&#x5F0F;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;&#x6211;&#x4EEC;&#x5148;&#x5B66;&#x4E60;&#x4E00;&#x4E0B;&#x6700;&#x7B80;&#x5355;&#x7684;&#x67E5;&#x8BE2;&#x8FC7;&#x7A0B;&#x3002;</p><p>&#x9996;&#x5148;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x4E00;&#x4E2A; Query &#x6570;&#x636E;&#x5305;&#xFF0C;&#x5185;&#x542B;&#x6211;&#x4EEC;&#x8981;&#x67E5;&#x8BE2;&#x7684; SQL &#x8BED;&#x53E5;&#xFF08;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x591A;&#x6761;&#x5594;&#xFF01;&#xFF09;</p><p>&#x670D;&#x52A1;&#x7AEF;&#x63A5;&#x5230;&#x67E5;&#x8BE2;&#x8BED;&#x53E5;&#x540E;&#x8FDB;&#x884C;&#x67E5;&#x8BE2;&#xFF0C;&#x5F97;&#x5230;&#x7ED3;&#x679C;&#x540E;&#x8FD4;&#x56DE;&#x3002;</p><p>&#x5982;&#x679C;&#x5F97;&#x5230;&#x7684;&#x7ED3;&#x679C;&#x662F;&#x4E00;&#x4E2A;&#x8868;&#x683C;&#xFF08;&#x6BD4;&#x5982;&#x8BF4;&#x6267;&#x884C;&#x4E86; <code>SELECT</code> &#x6216;&#x8005; <code>EXPLAIN</code>&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x9996;&#x5148;&#x4F1A;&#x53D1;&#x4E00;&#x4E2A; RowDescription &#x7684;&#x6570;&#x636E;&#x5305;&#x4ECB;&#x7ECD;&#x6BCF;&#x4E00;&#x5217;&#x7684;&#x542B;&#x4E49;&#xFF0C;&#x7136;&#x540E;&#x6BCF;&#x884C;&#x6570;&#x636E;&#x4E00;&#x4E2A; DataRow &#x6570;&#x636E;&#x5305;&#xFF0C;&#x7136;&#x540E;&#x4EE5;&#x4E00;&#x4E2A; CommandComplete &#x6570;&#x636E;&#x5305;&#x4F5C;&#x4E3A;&#x7ED3;&#x675F;&#xFF0C;&#x6700;&#x540E;&#x662F;&#x4E00;&#x4E2A; ReadyForQuery &#x7B49;&#x5F85;&#x4E0B;&#x4E00;&#x6761;&#x67E5;&#x8BE2;&#x8BF7;&#x6C42;&#x3002;</p><p></p><h3 id="message-formats-%E6%95%B0%E6%8D%AE%E5%8C%85%E6%A0%BC%E5%BC%8F">Message Formats: &#x6570;&#x636E;&#x5305;&#x683C;&#x5F0F;</h3><p>&#x901A;&#x5E38;&#x6765;&#x8BF4;&#xFF0C;&#x901A;&#x4FE1;&#x534F;&#x8BAE;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x5305;&#x4E00;&#x822C;&#x8981;&#x6709;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#xFF1A;</p><ul><li>&#x6570;&#x636E;&#x5305;&#x6807;&#x8BC6;&#x7B26; - &#x7528;&#x4E8E;&#x533A;&#x5206;&#x6570;&#x636E;&#x5305;&#x4E4B;&#x95F4;&#x7684;&#x7C7B;&#x578B;</li><li>&#x6570;&#x636E;&#x5305;&#x957F;&#x5EA6; - &#x7528;&#x4E8E;&#x544A;&#x8BC9;&#x53E6;&#x5916;&#x4E00;&#x7AEF;&#x8981;&#x51C6;&#x5907;&#x591A;&#x5927;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x53BB;&#x63A5;&#x6536;&#x6570;&#x636E;</li><li>&#x6B63;&#x6587; - &#x5B9E;&#x9645;&#x8981;&#x53D1;&#x7684;&#x5185;&#x5BB9;</li></ul><p>PostgreSQL &#x7684;&#x6570;&#x636E;&#x5305;&#x683C;&#x5F0F;&#x6B63;&#x662F;&#x7531;&#x8FD9;&#x4E9B;&#x8981;&#x7D20;&#x7EC4;&#x6210;&#x7684;&#x3002;</p><h2 id="0x02-netty-%E4%B8%8B%E7%9A%84%E7%AE%80%E6%98%93%E5%AE%9E%E7%8E%B0">0x02 Netty &#x4E0B;&#x7684;&#x7B80;&#x6613;&#x5B9E;&#x73B0;</h2><p>&#x8BF4;&#x4E86;&#x8FD9;&#x4E48;&#x591A;&#xFF0C;&#x8BE5;&#x5F00;&#x59CB;&#x5199;&#x4EE3;&#x7801;&#x4E86;&#x3002;</p><p>MiniDB &#x7684;&#x7F51;&#x7EDC;&#x90E8;&#x5206;&#x4EE3;&#x7801;&#x7ED3;&#x6784;&#x662F;&#x8FD9;&#x6837;&#x7684;&#xFF1A;</p><pre><code class="language-text-plain">MiniDB
&#x2502;
&#x251C;&#x2500;com
&#x2502;  &#x2514;&#x2500;lss233
&#x2502;      &#x2514;&#x2500;minidb
&#x2502;          &#x2514;&#x2500;networking
&#x2502;              &#x2502;  MessageType.kt
&#x2502;              &#x2502;  NettyServer.kt
&#x2502;              &#x2502;  NettyServerInitializer.kt
&#x2502;              &#x2502;  Session.kt
&#x2502;              &#x2502;
&#x2502;              &#x2502;  &#x251C;&#x2500;query
&#x2502;              &#x2502;  &#x2502;      QueryHandler.kt
&#x2502;              &#x2502;  &#x2502;
&#x2502;              &#x2502;  &#x2514;&#x2500;startup
&#x2502;              &#x2502;          SSLRequestRejectHandler.kt
&#x2502;              &#x2502;          StartupMessageHandler.kt
&#x2502;              &#x2502;
&#x2502;              &#x2514;&#x2500;packets
&#x2502;                      AuthenticationOk.kt
&#x2502;                      AuthenticationSASL.kt
&#x2502;                      CommandComplete.kt
&#x2502;                      EmptyQueryResponse.kt
&#x2502;                      ErrorResponse.kt
&#x2502;                      NotificationResponse.kt
&#x2502;                      ParameterStatus.kt
&#x2502;                      PostgresSQLPacket.kt
&#x2502;                      Query.kt
&#x2502;                      ReadyForQuery.kt
&#x2502;                      RowDescription.kt
&#x2502;                      SSLRequest.kt
&#x2502;                      StartupMessage.kt
&#x2502;                      Terminate.kt
&#x2502;
&#x2514;&#x2500;Main.kt</code></pre><p><strong>NettyServerInitializer</strong></p><p>&#x8FD9;&#x4E2A;&#x7C7B;&#x5B9A;&#x4E49;&#x4E86;&#x6570;&#x636E;&#x5305;&#x7684;&#x5904;&#x7406;&#x987A;&#x5E8F;&#x3002;</p><pre><code class="language-kotlin">    @Throws(Exception::class)
    public override fun initChannel(ch: SocketChannel) {
        val session = Session()
        val pipeline = ch.pipeline()
        pipeline.addLast(PostgreSQLDecoder(session), PostgreSQLEncoder(session))
        pipeline.addLast(SSLRequestRejectHandler(session), StartupMessageHandler(session))
        pipeline.addLast(QueryHandler(session))
        pipeline.addLast(TerminateHandler(session))
    }</code></pre><p>&#x5728; Netty &#x4E2D;&#xFF0C;&#x670D;&#x52A1;&#x7AEF;&#x6BCF;&#x6536;&#x5230;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x8FDE;&#x63A5;&#xFF0C;&#x5C31;&#x4F1A;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x65B0;&#x7684; SocketChannel&#xFF0C;&#x4EE3;&#x8868;&#x8FD9;&#x4E2A;&#x8FDE;&#x63A5;&#x3002;</p><p>&#x8FD9;&#x4E2A;&#x8FDE;&#x63A5;&#x6536;&#x53D1;&#x7684;&#x6570;&#x636E;&#x5305;&#x4F1A;&#x50CF;&#x5DE5;&#x5382;&#x4E2D;&#x7684;&#x6D41;&#x6C34;&#x7EBF;&#x4E00;&#x6837;&#x4E00;&#x4E2A;&#x73AF;&#x8282;&#x4E00;&#x4E2A;&#x73AF;&#x8282;&#x5730;&#x5904;&#x7406;&#x4E0B;&#x53BB;&#xFF0C;&#x8FD9;&#x91CC;&#x7684;&#x6D41;&#x6C34;&#x7EBF;&#x5C31;&#x662F; pipeline&#x3002;</p><p>PostgreSQL &#x7684;&#x6570;&#x636E;&#x5305;&#x90FD;&#x662F;&#x6709;&#x7ED3;&#x6784;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x5728;&#x8FD9;&#x6761;&#x6D41;&#x6C34;&#x7EBF;&#x7684;&#x6700;&#x524D;&#x7AEF;&#xFF0C;&#x6211;&#x4EEC;&#x6DFB;&#x52A0;&#x4E86;&#x6570;&#x636E;&#x89E3;&#x6790;&#x5668; PostgreDecoder &#x548C;&#x6570;&#x636E;&#x7F16;&#x7801;&#x5668; PostgreEncoder&#xFF0C;&#x5B9E;&#x73B0;&#x6211;&#x4EEC;&#x7684;&#x5BF9;&#x8C61;&#x548C;&#x6570;&#x636E;&#x5305;&#x4E4B;&#x95F4;&#x7684;&#x8F6C;&#x5316;&#x3002;</p><p><strong>Session</strong></p><p>PostgreSQL &#x4E2D;&#x7EDD;&#x5927;&#x591A;&#x6570;&#x7684;&#x6570;&#x636E;&#x5305;&#x90FD;&#x662F;&#x4EE5; 1 &#x5B57;&#x8282;&#x7684;&#x6807;&#x8BC6;&#x7B26;&#x5F00;&#x5934;&#xFF08;&#x901A;&#x5E38;&#x662F;&#x4E00;&#x4E2A;&#x6709;&#x542B;&#x4E49;&#x7684;&#x5B57;&#x7B26;&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x662F; 4 &#x5B57;&#x8282;&#x7684;&#x6570;&#x636E;&#x5305;&#x957F;&#x5EA6;&#xFF0C;&#x540E;&#x9762;&#x624D;&#x662F;&#x6570;&#x636E;&#x5305;&#x7684;&#x5177;&#x4F53;&#x4FE1;&#x606F;&#x3002; &#x800C;&#x6309;&#x7167;&#x6587;&#x6863;&#x4E2D;&#x7684;&#x8BF4;&#x6CD5;&#xFF0C; SSLRequest&#x3001; StartupMessage &#x548C; CancelRequest &#x8FD9;&#x51E0;&#x4E2A;&#x6570;&#x636E;&#x5305;&#x7531;&#x4E8E;&#x5386;&#x53F2;&#x539F;&#x56E0;&#xFF0C;&#x5B83;&#x4EEC;&#x4E00;&#x5F00;&#x5934;&#x76F4;&#x63A5;&#x5C31;&#x662F;&#x6570;&#x636E;&#x5305;&#x7684;&#x957F;&#x5EA6;&#xFF0C;&#x6CA1;&#x6709;&#x6570;&#x636E;&#x5305;&#x6807;&#x8BC6;&#x7B26;&#x3002;</p><p>&#x6240;&#x4EE5;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x72EC;&#x7ACB;&#x7684;&#x5BF9;&#x8C61;&#x6765;&#x4FDD;&#x5B58;&#x8FDE;&#x63A5;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x8FD9;&#x4E2A;&#x5BF9;&#x8C61;&#x5728;&#x8FDE;&#x63A5;&#x521B;&#x5EFA;&#x65F6;&#x4EA7;&#x751F;&#xFF0C;&#x8FDE;&#x63A5;&#x65AD;&#x5F00;&#x65F6;&#x6D88;&#x4EA1;&#x3002;</p><pre><code class="language-kotlin">class Session {
    var state = State.Startup
    var user: String? = null
    var database: String? = null
    val properties = HashMap&lt;String, String&gt;()
    enum class State {
        Startup, Authenticating, Query, Terminated
    }
}</code></pre><p>&#x5728;&#x8FD9;&#x91CC;&#xFF0C;&#x6211;&#x5B9A;&#x4E49;&#x4E86; &#xA0;Startup &#x63E1;&#x624B;&#x3001; Authenticating &#x8BA4;&#x8BC1;&#x3001;Query &#x67E5;&#x8BE2;&#x548C; Terminated &#x7EC8;&#x6B62;&#x56DB;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x72B6;&#x6001;&#x3002;</p><p>&#x5BA2;&#x6237;&#x7AEF;&#x4E0E;MiniDB&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x4EE5;&#x540E;&#xFF0C;&#x5148;&#x8FDB;&#x5165;&#x63E1;&#x624B;&#x72B6;&#x6001;&#x3002;&#x6B64;&#x65F6;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x90FD;&#x662F;&#x5F00;&#x5934;&#x6CA1;&#x6709;&#x6570;&#x636E;&#x5305;&#x6807;&#x8BC6;&#x7B26;&#x7684;&#x3002;</p><p>&#x5F53;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001; StartupMessage &#x4E4B;&#x540E;&#xFF0C;&#x8FDB;&#x5165;&#x8BA4;&#x8BC1;&#x72B6;&#x6001;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x5305;&#x90FD;&#x662F;&#x5F00;&#x5934;&#x6709;&#x6807;&#x8BC6;&#x7B26;&#x7684;&#x3002;</p><p>&#x8BA4;&#x8BC1;&#x6210;&#x529F;&#x4EE5;&#x540E;&#x8FDB;&#x5165;&#x67E5;&#x8BE2;&#x72B6;&#x6001;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x624D;&#x5141;&#x8BB8;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x9001;&#x67E5;&#x8BE2;&#x547D;&#x4EE4;&#x3002;</p><p>&#x5F53;&#x8FDE;&#x63A5;&#x65AD;&#x5F00;&#x4EE5;&#x540E;&#xFF0C;&#x8FDB;&#x5165;&#x7EC8;&#x6B62;&#x72B6;&#x6001;&#xFF0C;&#x91CA;&#x653E;&#x8D44;&#x6E90;&#x3002;</p><p>&#x540E;&#x7EED;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x52A0;&#x5165;&#x66F4;&#x591A;&#x7684;&#x72B6;&#x6001;&#x3002;</p><p><strong>PostgreDecoder</strong></p><p>&#x5728; decode &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x5148;&#x5224;&#x65AD;&#x72B6;&#x6001;&#xFF0C;&#x7136;&#x540E;&#x6839;&#x636E;&#x72B6;&#x6001;&#x6765;&#x9009;&#x62E9;&#x6570;&#x636E;&#x5305;&#x7C7B;&#x578B;&#x3002;</p><pre><code class="language-kotlin">            val mType = if(session.state == Session.State.Startup) {
                val position = `in`.readerIndex()
                val length = `in`.readInt()
                val magicNumber = `in`.readInt()
                `in`.readerIndex(position)
                if(length == 8 &amp;&amp; magicNumber == 80877103) { // &#x8FD9;&#x662F;&#x4ED6;&#x4EEC;&#x89C4;&#x5B9A;&#x597D;&#x7684;
                    MessageType.SSLRequest
                } else {
                    MessageType.StartupMessage
                }
            } else {
                MessageType.getType(`in`.readByte())
            }</code></pre><p>&#x6839;&#x636E;&#x6570;&#x636E;&#x5305;&#x7C7B;&#x578B;&#xFF0C;&#x6784;&#x9020;&#x4E13;&#x95E8;&#x7684;&#x6570;&#x636E;&#x5305;&#x5BF9;&#x8C61;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x5269;&#x4E0B;&#x7684;&#x6570;&#x636E;&#x4EA4;&#x7ED9;&#x5BF9;&#x8C61;&#x5904;&#x7406;&#x3002;</p><pre><code class="language-kotlin">            fun parse(type: MessageType?, payload: ByteBuf): IncomingPacket? {
                return when(type) {
                    MessageType.SSLRequest -&gt; SSLRequest().parse(payload)
                    MessageType.StartupMessage -&gt; StartupMessage().parse(payload)
                    MessageType.Query -&gt; Query().parse(payload)
                    MessageType.Terminate -&gt; Terminate().parse(payload)
                    else -&gt; null
                }
            }</code></pre><p><strong>&#x6570;&#x636E;&#x5305;</strong></p><p>&#x6309;&#x7167;&#x6570;&#x636E;&#x7684;&#x4F20;&#x8F93;&#x65B9;&#x5411;&#xFF0C;MiniDB &#x628A;&#x6570;&#x636E;&#x5206;&#x6210;&#x4E86;&#x4E24;&#x4E2A;&#x7C7B;&#x578B;&#xFF1A;IncomingPacket &#x548C; OutgoingPacket&#xFF0C;&#x5206;&#x522B;&#x8868;&#x793A;&#x670D;&#x52A1;&#x7AEF;&#x4F1A;&#x6536;&#x5230;&#x7684;&#x6570;&#x636E;&#x5305;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#x4F1A;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x5305;&#x3002;</p><pre><code class="language-kotlin">interface PostgreSQLPacket {
}
interface OutgoingPacket: PostgreSQLPacket {
    fun write(buf: ByteBuf): OutgoingPacket
}
interface IncomingPacket: PostgreSQLPacket {
    fun parse(buf: ByteBuf): IncomingPacket
}</code></pre><p><code>IncomingPacket#parse</code> &#x65B9;&#x6CD5;&#x5C06;&#x4ECE;&#x6570;&#x636E;&#x6D41;&#x4E2D;&#x8BFB;&#x53D6;&#x6570;&#x636E;&#xFF0C;&#x590D;&#x5236;&#x5230;&#x81EA;&#x8EAB;&#x7684;&#x6210;&#x5458;&#x4E2D;&#xFF1B;</p><p><code>OutgoingPacket#write</code> &#x5C06;&#x6839;&#x636E;&#x81EA;&#x8EAB;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x7684;&#x503C;&#x5F80;&#x6570;&#x636E;&#x6D41;&#x4E2D;&#x5199;&#x5165;&#x6570;&#x636E;&#x3002;</p><p>&#x8FD9;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#x90FD;&#x662F;&#x5BF9;&#x8C61;&#x81EA;&#x8EAB;&#xFF0C;&#x65B9;&#x4FBF;&#x94FE;&#x5F0F;&#x8C03;&#x7528;&#xFF08;&#x5B8C;&#x5168;&#x662F;&#x4E2A;&#x4EBA;&#x559C;&#x597D;&#xFF09;&#x3002;</p><p>&#x4E00;&#x4E2A;&#x5177;&#x4F53;&#x7684;&#x7C7B;&#x5C31;&#x50CF;&#x4E0B;&#x9762;&#x8FD9;&#x6837;&#xFF1A;</p><pre><code class="language-kotlin">class ParameterStatus(private val key: String, private val value: String): OutgoingPacket {
    override fun write(buf: ByteBuf): OutgoingPacket {
        buf.writeCharSequence(key, StandardCharsets.UTF_8)
        buf.writeByte(0)
        buf.writeCharSequence(value, StandardCharsets.UTF_8)
        buf.writeByte(0)
        return this
    }
}</code></pre><p><strong>PostgreSQLEncoder</strong></p><p>&#x5728;&#x7F16;&#x7801;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x5148;&#x5C06;&#x6570;&#x636E;&#x5B58;&#x5165;&#x4E00;&#x4E2A;&#x7A7A;&#x7684;&#x6570;&#x636E;&#x6D41;&#x4E2D;&#xFF08;&#x4EC5;&#x4EC5;&#x662F;&#x4E3A;&#x4E86;&#x77E5;&#x9053;&#x5B83;&#x5230;&#x5E95;&#x6709;&#x591A;&#x957F;&#xFF09;&#x3002;</p><p>&#x7136;&#x540E;&#x6211;&#x4EEC;&#x6309;&#x7167;&#x5B98;&#x65B9;&#x6587;&#x6863;&#x4E2D;&#x63CF;&#x8FF0;&#x7684;&#x987A;&#x5E8F;&#x5F80;&#x8F93;&#x51FA;&#x6D41;&#x5199;&#x6570;&#x636E;&#x5C31;&#x884C;&#x4E86;&#x3002;</p><pre><code class="language-kotlin">    override fun encode(ctx: ChannelHandlerContext?, msg: OutgoingPacket?, out: ByteBuf?) {
        val mType = msg?.javaClass?.simpleName?.let { MessageType.valueOf(it) }

        val buf = Unpooled.buffer()
        msg?.write(buf)

        val type = mType?.type?.toInt() ?: &apos;?&apos;.code
        // &apos;?&apos; &#x4EE3;&#x8868;&#x672A;&#x77E5;&#x6807;&#x8BC6;&#x7B26;
        val len = buf.writerIndex() + 4
        println(&quot;&lt;- ${msg?.javaClass?.simpleName}(${type.toChar()}) len $len&quot;)

        out?.writeByte(type)
        out?.writeInt(len)
        out?.writeBytes(buf, buf.writerIndex())
    }</code></pre><p><strong>Handlers</strong></p><p>&#x8BF4;&#x5B8C;&#x4E86;&#x6570;&#x636E;&#x5305;&#x548C;&#x7F16;&#x89E3;&#x7801;&#x5668;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5C31;&#x5269;&#x4E0B;&#x5305;&#x5904;&#x7406;&#x5668;&#x4E86;&#x3002;</p><p>Netty &#x53EF;&#x4EE5;&#x5F88;&#x806A;&#x660E;&#x5730;&#x628A;&#x4E00;&#x4E9B;&#x5305;&#x53EA;&#x4EA4;&#x7ED9;&#x4E00;&#x4E9B;&#x7279;&#x5B9A;&#x7684;&#x5904;&#x7406;&#x5668;&#x6765;&#x5904;&#x7406;&#x3002;</p><p>&#x6211;&#x4EEC;&#x53EA;&#x8981;&#x6839;&#x636E;&#x5305;&#x7684;&#x7C7B;&#x578B;&#x6765;&#x4F5C;&#x51FA;&#x6B63;&#x786E;&#x7684;&#x53CD;&#x5E94;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x8BA9;&#x5BA2;&#x6237;&#x7AEF;&#x6210;&#x529F;&#x5730;&#x8FDE;&#x63A5;&#x4E0A;&#x6211;&#x4EEC;&#x3002;</p><p>&#x4E3E;&#x51E0;&#x4E2A;&#x4F8B;&#x5B50;&#x3002;</p><p>&#x5728;&#x521A;&#x5F00;&#x59CB;&#x63E1;&#x624B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x4F1A;&#x95EE;&#x6211;&#x4EEC;&#x8981;&#x4E0D;&#x8981; SSL &#x52A0;&#x5BC6;&#x3002;</p><p>&#x8FD9;&#x79CD;&#x4E8B;&#x60C5;&#x5BF9;&#x6211;&#x4EEC;&#x6765;&#x8BF4;&#x4E3A;&#x65F6;&#x5C1A;&#x65E9;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x679C;&#x65AD;&#x56DE; NO&#xFF01;</p><pre><code class="language-kotlin">class SSLRequestRejectHandler(private val session: Session) : SimpleChannelInboundHandler&lt;SSLRequest&gt;() {
    override fun channelRead0(ctx: ChannelHandlerContext?, msg: SSLRequest?) {
       // &#x54B1;&#x4EEC;&#x8FD9;&#x5E7C;&#x5C0F;&#x7684; MiniDB &#x53EF;&#x73A9;&#x4E0D;&#x6765; SSL &#x8FD9;&#x79CD;&#x4E1C;&#x897F;
        ctx?.writeAndFlush(Unpooled.copiedBuffer(&quot;N&quot;, StandardCharsets.UTF_8))?.sync()
    }

}</code></pre><p>&#x63A5;&#x4E0B;&#x6765;&#x5BA2;&#x6237;&#x7AEF;&#x4F1A;&#x7ED9;&#x6211;&#x4EEC;&#x53D1;&#x9001;&#x4E00;&#x4E2A; StartupMessage &#x7684;&#x6570;&#x636E;&#x5305;&#xFF0C;&#x91CC;&#x9762;&#x4F1A;&#x5305;&#x542B;&#x7528;&#x6237;&#x540D;&#x548C;&#x6570;&#x636E;&#x5E93;&#x540D;&#x3002;</p><p>&#x7406;&#x8BBA;&#x4E0A;&#xFF0C;&#x6211;&#x4EEC;&#x5E94;&#x8BE5;&#x8BA9;&#x5BA2;&#x6237;&#x7AEF;&#x8BC1;&#x660E;&#x4E00;&#x4E0B;&#x81EA;&#x5DF1;&#x80FD;&#x8BBF;&#x95EE;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x6211;&#x4EEC;&#x4F1A;&#x5207;&#x6362;&#x5230;&#x8BA4;&#x8BC1;&#x9636;&#x6BB5;&#xFF0C;&#x7ED9;&#x5B83;&#x53D1;&#x4E00;&#x4E2A;&#x8BA4;&#x8BC1;&#x65B9;&#x6CD5;&#xFF0C;&#x7136;&#x540E;&#x7B49;&#x5B83;&#x7684;&#x56DE;&#x590D;&#x3002;</p><p>&#x4E0D;&#x8FC7;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#x6BD4;&#x8F83;&#x590D;&#x6742;&#xFF0C;&#x6211;&#x4E0D;&#x60F3;&#x8BA9;&#x7E41;&#x7410;&#x7684;&#x8BA4;&#x8BC1;&#x6D41;&#x7A0B;&#x7834;&#x574F;&#x6211;&#x8BF1;&#x9A97;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x5174;&#x81F4;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x51B3;&#x5B9A;&#x5F88;&#x6577;&#x884D;&#x5730;&#x544A;&#x8BC9;&#x5B83;&#xFF1A;&#x884C;&#x4E86;&#x884C;&#x4E86;&#xFF0C;&#x4F60;&#x767B;&#x5F55;&#x6210;&#x529F;&#x4E86;&#x3002;</p><p>&#x5E76;&#x8FDB;&#x5165;&#x67E5;&#x8BE2;&#x9636;&#x6BB5;&#x3002;</p><pre><code class="language-kotlin">class StartupMessageHandler(private val session: Session) : SimpleChannelInboundHandler&lt;StartupMessage&gt;() {
    override fun channelRead0(ctx: ChannelHandlerContext?, msg: StartupMessage?) {
//        session.state = Session.State.Authenticating
//        ctx?.writeAndFlush(AuthenticationSASL(listOf(&quot;SCRAM-SHA256&quot;)))?.sync()
//        &#x6781;&#x5176;&#x6577;&#x884D;&#x544A;&#x8BC9;&#x5BA2;&#x6237;&#x7AEF;&#xFF1A;&#x4F60;&#x767B;&#x5F55;&#x6210;&#x529F;&#x4E86;
        ctx?.writeAndFlush(AuthenticationOk())?.sync()
        ctx?.writeAndFlush(ParameterStatus(&quot;client_encoding&quot;, &quot;UTF8&quot;))?.sync()
        ctx?.writeAndFlush(ParameterStatus(&quot;DataStyle&quot;, &quot;ISO, YMD&quot;))?.sync()
        ctx?.writeAndFlush(ParameterStatus(&quot;TimeZone&quot;, &quot;Asia/Shanghai&quot;))?.sync()
        ctx?.writeAndFlush(ParameterStatus(&quot;server_encoding&quot;, &quot;UTF8&quot;))?.sync()
        ctx?.writeAndFlush(ParameterStatus(&quot;server_version&quot;, &quot;14.5&quot;))?.sync()
        session.state = Session.State.Query
        ctx?.writeAndFlush(ReadyForQuery())?.sync()
    }
}
</code></pre><p><strong>QueryHandler</strong></p><p>&#x8FDB;&#x5165;&#x4E86;&#x67E5;&#x8BE2;&#x9636;&#x6BB5;&#x4E4B;&#x540E;&#xFF0C;&#x6211;&#x4EEC;&#x7684;MiniDB&#x5C31;&#x8981;&#x5904;&#x7406;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x8FC7;&#x6765;&#x7684; SQL &#x8BED;&#x53E5;&#x4E86;&#x3002;</p><p>SQL &#x8BED;&#x53E5;&#x7684;&#x89E3;&#x6790;&#x90E8;&#x5206;&#x7531;&#x6211;&#x7684;&#x961F;&#x53CB;&#x5B8C;&#x6210;&#x3002;&#x6211;&#x53EA;&#x8981;&#x8D1F;&#x8D23;&#x5C06; SQL &#x8BED;&#x53E5;&#x5582;&#x7ED9;&#x4ED6;&#x5199;&#x597D;&#x7684; SQL &#x89E3;&#x6790;&#x5668;&#xFF0C;&#x7136;&#x540E;&#x8BFB;&#x53D6;&#x5B83;&#x7684;&#x89E3;&#x6790;&#x7ED3;&#x679C;&#x5C31;&#x884C;&#x4E86;&#x3002;</p><p>&#x6309;&#x7167;&#x5B98;&#x65B9;&#x6587;&#x6863;&#x7684;&#x4ECB;&#x7ECD;&#xFF0C;&#x6211;&#x4EEC;&#x7684;&#x670D;&#x52A1;&#x7AEF;&#x6536;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7684; SQL &#x8BED;&#x53E5;&#x4E4B;&#x540E;&#x8981;&#x505A;&#x51FA;&#x53CD;&#x5E94;&#xFF0C;&#x5426;&#x5219;&#x5BA2;&#x6237;&#x7AEF;&#x4F1A;&#x4E00;&#x76F4;&#x50BB;&#x50BB;&#x5730;&#x7B49;&#x5F85;&#x3002;</p><p>&#x4F46;&#x7531;&#x4E8E;&#x6211;&#x4EEC;&#x7684;&#x5F15;&#x64CE;&#x90E8;&#x5206;&#x5565;&#x4E5F;&#x6CA1;&#x5199;&#xFF0C;&#x6240;&#x4EE5;&#x73B0;&#x5728;&#x5C31;&#x53EA;&#x80FD;&#x5047;&#x60FA;&#x60FA;&#x56DE;&#x4E24;&#x53E5;&#x5566;&#x3002;</p><pre><code class="language-kotlin">class QueryHandler(private val session: Session) : SimpleChannelInboundHandler&lt;Query&gt;() {
    private val REGEX_STMT_SET = Regex(&quot;set (.+) to (.+)&quot;);
    override fun channelRead0(ctx: ChannelHandlerContext?, msg: Query?) {
        try {

            var queryString = msg?.queryString

            // &#x5148;&#x628A;&#x67E5;&#x8BE2;&#x8BED;&#x53E5;&#x8F6C;&#x5316;&#x4E3A; MySQL &#x98CE;&#x683C;
            if(REGEX_STMT_SET.matches(queryString!!)) {
                queryString = queryString.replace(REGEX_STMT_SET, &quot;SET $1=$2&quot;)
            }

            // &#x4EA4;&#x7ED9;&#x8BCD;&#x6CD5;&#x89E3;&#x6790;&#x5668;
            val ast = SQLParserDelegate.parse(queryString)
            println(&quot;  Q(${ast.javaClass.simpleName}: $queryString&quot;)

            // &#x5206;&#x6790;&#x89E3;&#x6790;&#x540E;&#x7684; SQL &#x8BED;&#x53E5;&#xFF0C;&#x4F5C;&#x51FA;&#x4E0D;&#x540C;&#x7684;&#x53CD;&#x5E94;
            when(ast) {
                is DMLSelectStatement -&gt; {
                    // &#x8FD9;&#x662F;&#x4E00;&#x6761;&#x67E5;&#x8BE2;&#x8BED;&#x53E5;
                    ctx?.writeAndFlush(RowDescription())?.sync()
                    //  &#x67E5;&#x5230;&#x4E86; 0 &#x6761;&#x7ED3;&#x679C;&#x4E5F;&#x662F;&#x4E00;&#x79CD;&#x67E5;
                    ctx?.writeAndFlush(CommandComplete(&quot;SELECT 0&quot;))?.sync()
                }
                is DALSetStatement -&gt; {
                    // &#x8FD9;&#x662F;&#x4E00;&#x6761;&#x8BBE;&#x7F6E;&#x8BED;&#x53E5;
                    for (pair in ast.assignmentList) {
                        // &#x66F4;&#x65B0;&#x8BBE;&#x7F6E;
                        session.properties[(pair.key as SysVarPrimary).varText] =
                            pair.value.evaluation(emptyMap()).toString()

                        // &#x544A;&#x77E5;&#x5BA2;&#x6237;&#x7AEF;&#x8BBE;&#x7F6E;&#x6210;&#x529F;
                        ctx?.writeAndFlush(CommandComplete(&quot;SET&quot;))?.sync()
                        ctx?.writeAndFlush(ParameterStatus(
                            (pair.key as SysVarPrimary).varText,
                            session.properties[(pair.key as SysVarPrimary).varText]!!
                        ))?.sync()
                    }
                }
            }

        } catch (e: SQLSyntaxErrorException) {
            System.err.println(&quot; Q(Error): ${msg?.queryString}&quot;)
            e.printStackTrace()
            // &#x544A;&#x8BC9;&#x5BA2;&#x6237;&#x7AEF;&#x4F60;&#x53D1;&#x7684;&#x4E1C;&#x897F;&#x6709;&#x95EE;&#x9898;
            val err = ErrorResponse()
            err.message = e.message!!
            ctx?.writeAndFlush(err)?.sync()
        }
        // &#x7B49;&#x5F85;&#x4E0B;&#x4E00;&#x6761;&#x8BED;&#x53E5;
        ctx?.writeAndFlush(ReadyForQuery())?.sync()
    }

}
</code></pre><h2 id="0x03-%E6%B5%8B%E8%AF%95">0x03 &#x6D4B;&#x8BD5;</h2><p>&#x4F7F;&#x7528; Navicat &#x8FDE;&#x63A5;&#x6211;&#x4EEC;&#x7684; MiniDB&#xFF0C;&#x6CA1;&#x6709;&#x51FA;&#x73B0;&#x4EFB;&#x4F55;&#x62A5;&#x9519;&#x5C31;&#x7B97;&#x6210;&#x529F;&#xFF01;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2022/10/image-3.png" class="kg-image" alt loading="lazy" width="569" height="58"></figure><p>&#x4E0D;&#x8FC7;&#x5728;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x6211;&#x4EEC;&#x80FD;&#x770B;&#x89C1; MiniDB &#x548C; Navicat &#x804A;&#x5F97;&#x5F88;&#x5F00;&#x5FC3;&#xFF01;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/10/image-4.png" class="kg-image" alt loading="lazy" width="1145" height="865" srcset="https://blog.lss233.com/content/images/size/w600/2022/10/image-4.png 600w, https://blog.lss233.com/content/images/size/w1000/2022/10/image-4.png 1000w, https://blog.lss233.com/content/images/2022/10/image-4.png 1145w"></figure><p>&#x867D;&#x7136; Navicat &#x6CA1;&#x6709;&#x663E;&#x793A;&#x51FA;&#x4EFB;&#x4F55;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x4F46;&#x662F;&#x6839;&#x636E;&#x4ED6;&#x4FE9;&#x7684;&#x804A;&#x5929;&#x8BB0;&#x5F55;&#x6765;&#x770B;&#xFF0C; Navicat &#x8BFB;&#x53D6;&#x6570;&#x636E;&#x5E93;&#x5217;&#x8868;&#x5176;&#x5B9E;&#x662F;&#x901A;&#x8FC7;&#x4E00;&#x6761; <code>SELECT</code> &#x8BED;&#x53E5;&#x6765;&#x5B9E;&#x73B0;&#x7684;&#x3002;</p><p>&#x8FD9;&#x63D0;&#x793A;&#x6211;&#x4EEC;&#x5728;&#x5B9E;&#x73B0;&#x6570;&#x636E;&#x5E93;&#x5F15;&#x64CE;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x4EE5;&#x628A;&#x6570;&#x636E;&#x5E93;&#x4FE1;&#x606F;&#x5199;&#x5230;&#x4E00;&#x4E2A;&#x8868;&#x91CC;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x4E0D;&#x9700;&#x8981;&#x518D;&#x505A;&#x989D;&#x5916;&#x7684;&#x5DE5;&#x4F5C;&#x4E86;&#x3002;</p><h2 id="0x04-%E8%8A%B1%E7%B5%AE">0x04 &#x82B1;&#x7D6E;</h2><p>&#x5728;&#x5B9E;&#x9645;&#x7F16;&#x5199;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x6211;&#x53D1;&#x73B0;&#x5B9E;&#x9645;&#x4E2D;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x5668;&#x4F1A;&#x53D1;&#x4E00;&#x4E9B;&#x6587;&#x6863;&#x91CC;&#x6CA1;&#x63D0;&#x5230;&#x7684;&#x4FE1;&#x606F;&#xFF08;&#x6216;&#x8005;&#x8BF4;&#x6211;&#x6CA1;&#x7FFB;&#x5230;&#xFF09;&#xFF0C;&#x5BFC;&#x81F4;&#x6211;&#x5199;&#x7684;&#x670D;&#x52A1;&#x7AEF;&#x4E0D;&#x80FD;&#x88AB;&#x6B63;&#x5E38;&#x8FDE;&#x63A5;&#x3002;</p><p>&#x9047;&#x5230;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x65F6;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x642D;&#x5EFA;&#x4E00;&#x4E2A;&#x771F;&#x6B63;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x7136;&#x540E;&#x4F7F;&#x7528;&#x6293;&#x5305;&#x5DE5;&#x5177;&#x6765;&#x627E;&#x5230;&#x4E0D;&#x4E00;&#x6837;&#x7684;&#x6570;&#x636E;&#x5305;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/10/image-7.png" class="kg-image" alt loading="lazy" width="1337" height="777" srcset="https://blog.lss233.com/content/images/size/w600/2022/10/image-7.png 600w, https://blog.lss233.com/content/images/size/w1000/2022/10/image-7.png 1000w, https://blog.lss233.com/content/images/2022/10/image-7.png 1337w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x5728;&#x8FD9;&#x91CC;&#xFF0C;&#x6211;&#x4F7F;&#x7528;&#x7684;&#x662F; sokit &#x7684;&#x4E2D;&#x7EE7;&#x6A21;&#x5F0F;&#x3002;&#x4E0A;&#x56FE;&#x4E3A; Navicat &#x8FDE;&#x63A5; PostgreSQL &#x6570;&#x636E;&#x5E93;&#x65F6;&#x53CC;&#x65B9;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4E0B;&#x56FE;&#x662F; Navicat &#x8FDE;&#x63A5; MiniDB &#x65F6;&#x53CC;&#x65B9;&#x7684;&#x6570;&#x636E;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide"><img src="https://blog.lss233.com/content/images/2022/10/image-8.png" class="kg-image" alt loading="lazy" width="1397" height="776" srcset="https://blog.lss233.com/content/images/size/w600/2022/10/image-8.png 600w, https://blog.lss233.com/content/images/size/w1000/2022/10/image-8.png 1000w, https://blog.lss233.com/content/images/2022/10/image-8.png 1397w" sizes="(min-width: 1200px) 1200px"></figure><p>&#x81F3;&#x6B64;&#xFF0C; MiniDB &#x7684;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x90E8;&#x5206;&#x5148;&#x544A;&#x4E00;&#x6BB5;&#x843D;&#x4E86;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5C31;&#x8FDB;&#x5165;&#x6570;&#x636E;&#x5E93;&#x5F15;&#x64CE;&#x7684;&#x5F00;&#x53D1;&#xFF0C;&#x7136;&#x540E;&#x5B9E;&#x73B0;&#x771F;&#x6B63;&#x7684;&#x6570;&#x636E;&#x5E93;&#x4E86;&#x3002;</p>]]></content:encoded></item><item><title><![CDATA[MiniDB 开发手札1 - 概览]]></title><description><![CDATA[<p>&#x672C;&#x5B66;&#x671F;&#x4E00;&#x95E8;&#x53EB;&#x300A;&#x5E94;&#x7528;&#x8F6F;&#x4EF6;&#x5F00;&#x53D1;&#x300B;&#x7684;&#x8BFE;&#x7A0B;&#x8981;&#x6C42;&#x6211;&#x4EEC;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#xFF0C;&#x8981;&#x6C42;&#x80FD;&#x7D22;&#x5F15;&#x3001;&#x53EF;&#x6301;&#x7EED;&#x5316;&#x3001;&#x591A;&#x8868;&#x8FDE;&#x63A5;&#x67E5;&#x8BE2;&#x3001;&#x8FDC;</p>]]></description><link>https://blog.lss233.com/minidb-kai-fa-shou-zha-1-jia-gou/</link><guid isPermaLink="false">633ae494a446270829392dc6</guid><category><![CDATA[数据库]]></category><category><![CDATA[MiniDB开发手札]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Mon, 03 Oct 2022 13:41:28 GMT</pubDate><content:encoded><![CDATA[<p>&#x672C;&#x5B66;&#x671F;&#x4E00;&#x95E8;&#x53EB;&#x300A;&#x5E94;&#x7528;&#x8F6F;&#x4EF6;&#x5F00;&#x53D1;&#x300B;&#x7684;&#x8BFE;&#x7A0B;&#x8981;&#x6C42;&#x6211;&#x4EEC;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x7CFB;&#x7EDF;&#xFF0C;&#x8981;&#x6C42;&#x80FD;&#x7D22;&#x5F15;&#x3001;&#x53EF;&#x6301;&#x7EED;&#x5316;&#x3001;&#x591A;&#x8868;&#x8FDE;&#x63A5;&#x67E5;&#x8BE2;&#x3001;&#x8FDC;&#x7A0B;&#x8BBF;&#x95EE;&#x7B49;&#x529F;&#x80FD;&#x3002;</p><p>&#x7B80;&#x5355;&#x601D;&#x8003;&#x4E86;&#x4E00;&#x4E0B;&#xFF0C;&#x6211;&#x8BA4;&#x4E3A;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x5E94;&#x8BE5;&#x5206;&#x4E3A;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x90E8;&#x5206;&#xFF1A;</p><p>&#x770B;&#x8D77;&#x6765;&#x662F;&#x4E00;&#x4E2A;&#x633A;&#x590D;&#x6742;&#x7684;&#x5DE5;&#x7A0B;&#xFF0C;&#x4F46;&#x6162;&#x6162;&#x5B9E;&#x73B0;&#x4E00;&#x5B9A;&#x662F;&#x80FD;&#x6210;&#x529F;&#x7684;&#x3002;</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://blog.lss233.com/content/images/2022/10/image.png" class="kg-image" alt loading="lazy" width="1162" height="334" srcset="https://blog.lss233.com/content/images/size/w600/2022/10/image.png 600w, https://blog.lss233.com/content/images/size/w1000/2022/10/image.png 1000w, https://blog.lss233.com/content/images/2022/10/image.png 1162w"><figcaption>&#x7CFB;&#x7EDF;&#x7ED3;&#x6784;</figcaption></figure><p>&#x5BF9;&#x4E8E;&#x7F51;&#x7EDC;&#x901A;&#x4FE1;&#x8FD9;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x56E0;&#x4E3A;&#x81EA;&#x5DF1;&#x4E00;&#x76F4;&#x60F3;&#x8BD5;&#x8BD5; Netty &#x8FD9;&#x4E2A;&#x7F51;&#x7EDC;&#x6846;&#x67B6;&#xFF0C;&#x4F46;&#x662F;&#x53C8;&#x89C9;&#x5F97; Java &#x5199;&#x7740;&#x65E0;&#x804A;&#xFF0C;&#x4E8E;&#x662F;&#x4FBF;&#x9009;&#x62E9;&#x4E86; Kotlin &#x4F5C;&#x4E3A;&#x540E;&#x7AEF;&#x670D;&#x52A1;&#x5668;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#xFF0C;&#x987A;&#x4FBF;&#x5B66;&#x4E60;&#x4E00;&#x4E0B;&#x5B83;&#x7684;&#x4F7F;&#x7528;&#x65B9;&#x5F0F;&#x3002;</p><p>SQL &#x89E3;&#x6790;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; ANTRL &#x6765;&#x5B9E;&#x73B0;&#xFF0C; GitHub &#x4E0A;&#x4E5F;&#x6709;&#x5927;&#x91CF;&#x7684;&#x8D44;&#x6599;&#xFF0C;&#x5E94;&#x8BE5;&#x4E0D;&#x662F;&#x5F88;&#x5927;&#x7684;&#x95EE;&#x9898;&#x3002;</p><p>&#x6211;&#x5E0C;&#x671B;&#x8FD9;&#x6B3E;&#x6570;&#x636E;&#x5E93;&#x4E0D;&#x4EC5;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x50CF; MySQL &#x8FD9;&#x6837;&#x7684;&#x5206;&#x5E03;&#x5F0F;&#x6570;&#x636E;&#x5E93;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x50CF; SQLite &#x8FD9;&#x6837;&#x7684;&#x5185;&#x5D4C;&#x5F0F;&#x6570;&#x636E;&#x5E93;&#xFF0C;&#x56E0;&#x6B64;&#x8FD8;&#x51C6;&#x5907;&#x4E86;&#x4E00;&#x79CD;&#x6570;&#x636E;&#x5E93;&#x9A71;&#x52A8;&#x548C;&#x670D;&#x52A1;&#x7AEF;&#x4EE3;&#x7801;&#x4E00;&#x8D77;&#x6253;&#x5305;&#x5E76;&#x76F4;&#x63A5;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x4E0D;&#x8FC7;&#x8FD9;&#x4E2A;&#x4E8B;&#x60C5;&#x53EF;&#x4EE5;&#x540E;&#x9762;&#x518D;&#x8BF4;&#x3002;</p><p>&#x6570;&#x636E;&#x5E93;&#x5F15;&#x64CE;&#x5E94;&#x8BE5;&#x662F;&#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x6700;&#x5177;&#x6709;&#x6280;&#x672F;&#x542B;&#x91CF;&#x7684;&#x90E8;&#x5206;&#xFF0C;&#x7531;&#x4E8E;&#x6211;&#x6CA1;&#x6709;&#x7CFB;&#x7EDF;&#x5730;&#x5B66;&#x4E60;&#x8FC7;&#x4EFB;&#x4F55;&#x4E00;&#x6B3E;&#x6570;&#x636E;&#x5E93;&#x5F15;&#x64CE;&#x5B9E;&#x73B0;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x5BF9;&#x8FD9;&#x90E8;&#x5206;&#x5185;&#x5BB9;&#x662F;&#x5B8C;&#x5168;&#x6CA1;&#x6709;&#x4E00;&#x70B9;&#x5934;&#x7EEA;&#x2014;&#x2014;&#x90A3;&#x4E5F;&#x653E;&#x5230;&#x540E;&#x9762;&#x53BB;&#x5427;&#xFF01;</p><p>&#x6B64;&#x5916;&#xFF0C;&#x8FD9;&#x4E2A;&#x7CFB;&#x7EDF;&#x5C06;&#x7531;&#x6211;&#x548C;&#x53E6;&#x5916;&#x4E00;&#x4F4D;&#x961F;&#x53CB;&#x4E00;&#x8D77;&#x5B8C;&#x6210;&#xFF0C;&#x4E3A;&#x4E86;&#x786E;&#x4FDD;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5728;&#x5B8C;&#x6210;&#x8BFE;&#x7A0B;&#x8981;&#x6C42;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x82B1;&#x91CC;&#x80E1;&#x54E8;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x6211;&#x4EEC;&#x6253;&#x7B97;&#x5148;&#x4ECE;&#x7B80;&#x5355;&#x7684;&#x529F;&#x80FD;&#x5199;&#x8D77;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x8BA9;&#x5B83;&#x9010;&#x6E10;&#x53D8;&#x5F97;&#x590D;&#x6742;&#x3002;</p><p>&#x6211;&#x8BA4;&#x4E3A;&#x5B9E;&#x73B0;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x5E93;&#x7684;&#x8FC7;&#x7A0B;&#x4E5F;&#x5F88;&#x6709;&#x610F;&#x601D;&#xFF0C;&#x6240;&#x4EE5;&#x6253;&#x7B97;&#x5199;&#x4E00;&#x7CFB;&#x5217;&#x5F00;&#x53D1;&#x624B;&#x672D;&#xFF0C;&#x628A;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#x8BB0;&#x5F55;&#x4E0B;&#x6765;&#xFF0C;&#x5E0C;&#x671B;&#x53EF;&#x4EE5;&#x5E2E;&#x52A9;&#x5230;&#x5176;&#x4ED6;&#x4EBA;&#x53BB;&#x5199;&#x7C7B;&#x4F3C;&#x7684;&#x9879;&#x76EE;&#x3002;</p><p>&#x6700;&#x540E;&#xFF0C;&#x9644;&#x4E0A;&#x6211;&#x4EEC;&#x7684;&#x9879;&#x76EE;&#x5730;&#x5740;&#xFF1A;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/lss233/MiniDB"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - lss233/MiniDB</div><div class="kg-bookmark-description">Contribute to lss233/MiniDB development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.com/fluidicon.png" alt><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">lss233</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/73f237d12de61374b45447fe5cfc73bbd4b35dd78cd52064ad321b6065aa4c40/lss233/MiniDB" alt></div></a></figure>]]></content:encoded></item><item><title><![CDATA[HELLO: 2022]]></title><description><![CDATA[<p>&#x539F;&#x672C;&#x5E94;&#x8BE5;&#x5728;1&#x6708;1&#x65E5;&#x5199;&#x7684;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF0C;&#x7ED3;&#x679C;&#x5E76;&#x6CA1;&#x6709;&#x51C6;&#x65F6;&#x53D1;&#x51FA;&#x3002;</p><p>&#x4E0D;&#x8FC7;&#xFF0C;&#x8BE5;&#x6765;&#x7684;&#x8FD8;&#x662F;&#x8981;&#x6765;&#x3002;&#x6BCF;&#x5E74;&#x4E00;&#x6B21;&#x7684;&#x4F20;&#x7EDF;&#xFF0C;&#x54B1;&#x53EF;&#x4E0D;&#x80FD;&#x4E22;</p>]]></description><link>https://blog.lss233.com/hello-2022/</link><guid isPermaLink="false">61f7fb11b8b43291f1fc9a7f</guid><category><![CDATA[年末总结]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Mon, 31 Jan 2022 17:15:57 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1467810563316-b5476525c0f9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGV3JTIweWVhcnxlbnwwfHx8fDE2NDM2NDk0NDI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1467810563316-b5476525c0f9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MnwxMTc3M3wwfDF8c2VhcmNofDF8fGV3JTIweWVhcnxlbnwwfHx8fDE2NDM2NDk0NDI&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="HELLO: 2022"><p>&#x539F;&#x672C;&#x5E94;&#x8BE5;&#x5728;1&#x6708;1&#x65E5;&#x5199;&#x7684;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF0C;&#x7ED3;&#x679C;&#x5E76;&#x6CA1;&#x6709;&#x51C6;&#x65F6;&#x53D1;&#x51FA;&#x3002;</p><p>&#x4E0D;&#x8FC7;&#xFF0C;&#x8BE5;&#x6765;&#x7684;&#x8FD8;&#x662F;&#x8981;&#x6765;&#x3002;&#x6BCF;&#x5E74;&#x4E00;&#x6B21;&#x7684;&#x4F20;&#x7EDF;&#xFF0C;&#x54B1;&#x53EF;&#x4E0D;&#x80FD;&#x4E22;&#xFF01;</p><h2 id="%E8%BF%87%E5%8E%BB%E4%B8%80%E5%B9%B4%E9%87%8C%EF%BC%8C%E6%88%91%E5%81%9A%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F">&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x6211;&#x505A;&#x4E86;&#x4EC0;&#x4E48;&#xFF1F;</h2><p>&#x8FD9;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x53D1;&#x751F;&#x4E86;&#x5F88;&#x591A;&#x4E8B;&#x60C5;&#xFF0C;&#x5F88;&#x591A;&#x673A;&#x9047;&#xFF0C;&#x5F88;&#x591A;&#x6311;&#x6218;&#x2026;&#x2026;</p><p>&#x8FD9;&#x4E00;&#x5E74;&#xFF0C;&#x6211;&#x2026;&#x2026;</p><ul><li>&#x5199;&#x4E86; <code>1000+</code> &#x884C;&#x4EE3;&#x7801;&#x3002;</li><li>&#x535A;&#x5BA2;&#x53D1;&#x5E03;&#x4E86; 6 &#x7BC7;&#x6587;&#x7AE0;&#xFF0C;&#x5176;&#x4E2D; 1 &#x7BC7;&#x4E3A;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x3002;</li><li>&#x8FFD;&#x4E86; <code>0</code> &#x90E8;&#x756A;&#xFF0C; &#x770B;&#x4E86; <code>0</code> &#x90E8;&#x7F8E;&#x5267;&#x3002;</li></ul><h3 id="%E5%8D%9A%E5%AE%A2%E9%87%8D%E6%96%B0%E8%A3%85%E4%BF%AE">&#x535A;&#x5BA2;&#x91CD;&#x65B0;&#x88C5;&#x4FEE;</h3><p>&#x5728;&#x4E8C;&#x6708;&#x521D;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x7A81;&#x53D1;&#x5947;&#x60F3;&#xFF0C;&#x7ED9;&#x535A;&#x5BA2;&#x91CD;&#x65B0;&#x5199;&#x4E86;&#x4E00;&#x5957;&#x4E3B;&#x9898;&#x3002;</p><!--kg-card-begin: markdown--><p><a href="https://github.com/lss233/Ghost-Vanillia"><img src="https://gh-card.dev/repos/lss233/Ghost-Vanillia.svg" alt="HELLO: 2022" loading="lazy"></a></p>
<!--kg-card-end: markdown--><p>&#x8FD9;&#x4E00;&#x5957;&#x4E3B;&#x9898;&#x4E3B;&#x8981;&#x91C7;&#x7528;&#x4E86;&#x6BDB;&#x73BB;&#x7483;&#x7684;&#x80CC;&#x666F;&#x98CE;&#x683C;&#x3002; CSS &#x4E3B;&#x8981;&#x4F7F;&#x7528;&#x4E86; Tailwind &#x6846;&#x67B6;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x652F;&#x6301;&#x5C06;&#x56FE;&#x7247;&#x901A;&#x8FC7; CDN &#x52A0;&#x8F7D;&#x3002;&#x6BDB;&#x73BB;&#x7483;&#x6548;&#x679C;&#x5728; Chromium &#x901A;&#x8FC7; <code>backdrop-filter</code> &#x5B9E;&#x73B0;&#xFF0C; Firefox &#x901A;&#x8FC7; CDN &#x5B9E;&#x73B0;&#x3002;</p>
<!--kg-card-end: markdown--><p>&#x6211;&#x53D1;&#x73B0;&#xFF0C;&#x6211;&#x73B0;&#x5728;&#x5DF2;&#x7ECF;&#x53EF;&#x4EE5;&#x628A;&#x81EA;&#x5DF1;&#x7684;&#x60F3;&#x6CD5;&#x7528;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x51FA;&#x6765;&#x5566;&#xFF01;&#x8FD9;&#x7B97;&#x662F;&#x4E00;&#x4E2A;&#x5F88;&#x5927;&#x7684;&#x8FDB;&#x6B65;&#x5427;&#x3002;</p><h3 id="%E6%96%B0%E5%A2%9E%E5%B1%A5%E5%8E%86%EF%BC%9A-rmer">&#x65B0;&#x589E;&#x5C65;&#x5386;&#xFF1A; RMer</h3><p>&#x662F;&#x7684;&#x3002;&#x6211;&#x4E0D;&#x6253; ACM &#x5566;! </p><p>&#x56E0;&#x4E3A;&#x4E00;&#x6B21;&#x5076;&#x7136;&#x7684;&#x673A;&#x4F1A;&#xFF0C;&#x6211;&#x52A0;&#x5165;&#x4E86;&#x5B66;&#x6821;&#x7684; RoboMaster &#x6218;&#x961F;&#x91CC;&#xFF0C;&#x968F;&#x540E;&#x4FBF;&#x6210;&#x4E3A;&#x4E86;&#x89C6;&#x89C9;&#x7EC4;&#x7684;&#x4E3B;&#x529B;&#x6210;&#x5458;&#x3002;</p><blockquote>&#x5173;&#x4E8E; RoboMaster &#x6BD4;&#x8D5B;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x770B;&#x8FD9;&#x91CC;&#xFF1A; <a href="https://www.robomaster.com/zh-CN">https://robomaster.com</a></blockquote><p>&#x5728;&#x4E0D;&#x5230;&#x534A;&#x5E74;&#x7684;&#x65F6;&#x95F4;&#x91CC;&#xFF0C;&#x5728;&#x7EC4;&#x5185;&#x5B66;&#x957F;&#x7684;&#x534F;&#x52A9;&#x4E0B;&#xFF0C;&#x6211;&#x8BBE;&#x8BA1;&#x51FA;&#x4E86;&#x4E00;&#x6B3E;&#x57FA;&#x4E8E;&#x4F20;&#x7EDF; OpenCV &#x7684;&#x81EA;&#x7784;&#x7CFB;&#x7EDF;&#x3002;</p><p>&#x5907;&#x8D5B;&#x8FC7;&#x7A0B;&#x975E;&#x5E38;&#x8270;&#x8F9B;&#x3002;&#x6211;&#x5E38;&#x5E38;&#x548C;&#x5B9E;&#x9A8C;&#x5BA4;&#x91CC;&#x7684;&#x5176;&#x4ED6;&#x961F;&#x5458;&#x4E00;&#x8D77;&#x71AC;&#x591C;&#x5230;&#x5341;&#x4E8C;&#x70B9;&#x3002;</p><p>&#x7136;&#x540E;&#x6211;&#x8FD8;&#x5F97;&#x71AC;&#x7740;&#x51B7;&#x98CE;&#xFF0C;&#x9A91;&#x7740;&#x5C0F;&#x7535;&#x52A8;&#x4ECE;&#x5357;&#x6821;&#x533A;&#x56DE;&#x5230;&#x5317;&#x6821;&#x533A;&#x7761;&#x89C9;&#xFF0C;&#x7B2C;&#x4E8C;&#x5929;&#x4E0A;&#x8BFE;&#x3002;</p><p>&#x5728;&#x6700;&#x8270;&#x96BE;&#x7684;&#x65F6;&#x523B;&#xFF0C;&#x6211;&#x4E00;&#x4E2A;&#x4EBA;&#x8981;&#x8C03;&#x8BD5; 5 &#x4E2A;&#x673A;&#x5668;&#x4EBA;&#x3002;&#x7ECF;&#x5E38;&#x9047;&#x5230;&#x7684;&#x60C5;&#x51B5;&#x662F;&#xFF0C;&#x6211;&#x5728;&#x6392;&#x67E5;&#x67D0;&#x53F0;&#x673A;&#x5668;&#x4EBA;&#x7684;&#x95EE;&#x9898;&#x65F6;&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x53F0;&#x53C8;&#x51FA;&#x4E86;&#x95EE;&#x9898;&#xFF0C;&#x573A;&#x9762;&#x4E00;&#x5EA6;&#x975E;&#x5E38;&#x6DF7;&#x4E71;&#x2026;&#x2026;</p><p>&#x5728;&#x516B;&#x6708;&#x521D;&#xFF0C;&#x6211;&#x968F;&#x7740;&#x6218;&#x961F;&#x4E00;&#x8D77;&#x5230;&#x4E86;&#x6DF1;&#x5733;&#x53C2;&#x52A0;&#x6BD4;&#x8D5B;&#xFF0C;&#x4ECE;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#x7684;&#x770B;&#x6BD4;&#x8D5B;&#x56DE;&#x653E;&#xFF0C;&#x8F6C;&#x53D8;&#x4E3A;&#x4E86;&#x5728;&#x73B0;&#x573A;&#x3002;&#x867D;&#x7136;&#x5230;&#x6700;&#x540E;&#x56E0;&#x4E3A;&#x75AB;&#x60C5;&#x7684;&#x539F;&#x56E0;&#x5BFC;&#x81F4;&#x8D5B;&#x7A0B;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x6211;&#x4EEC;&#x4E5F;&#x6CA1;&#x6709;&#x5145;&#x5206;&#x51C6;&#x5907;&#xFF0C;&#x5931;&#x53BB;&#x4E86;&#x664B;&#x7EA7;&#x5168;&#x56FD;&#x8D5B;&#x7684;&#x673A;&#x4F1A;&#xFF0C;&#x4F46;&#x53BB;&#x4E86;&#x4E00;&#x8D9F;&#x6DF1;&#x5733;&#xFF0C;&#x6211;&#x8FD8;&#x662F;&#x5F88;&#x5F00;&#x5FC3;&#x7684;&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2022/01/IMG20210730110232.jpg" alt="HELLO: 2022" loading="lazy"><br>
<img src="https://blog.lss233.com/content/images/2022/01/IMG20210801152718.jpg" alt="HELLO: 2022" loading="lazy"></p>
<!--kg-card-end: markdown--><p></p><p>&#x6211;&#x975E;&#x5E38;&#x559C;&#x6B22; RoboMaster &#x8FD9;&#x4E2A;&#x6BD4;&#x8D5B;&#x3002; &#x4E0D;&#x4EC5;&#x4EC5;&#x662F;&#x56E0;&#x4E3A;&#x8FD9;&#x91CC;&#x7684;&#x6218;&#x961F;&#x6C1B;&#x56F4;&#x975E;&#x5E38;&#x597D;&#xFF0C;&#x6240;&#x6709;&#x4EBA;&#x90FD;&#x5728;&#x4E3A;&#x7740;&#x4E00;&#x4E2A;&#x76EE;&#x6807;&#x52AA;&#x529B;&#x7740;&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x6211;&#x8FD8;&#x89C9;&#x5F97;&#x8FD9;&#x662F;&#x4E2A;&#x953B;&#x70BC;&#x81EA;&#x6211;&#x3001;&#x5BFB;&#x6C42;&#x81EA;&#x6211;&#x7A81;&#x7834;&#x7684;&#x5730;&#x65B9;&#x3002;</p><p>&#x5F53;&#x6211;&#x7B2C;&#x4E00;&#x6B21;&#x770B;&#x89C1;&#x81EA;&#x5DF1;&#x5199;&#x7684;&#x7A0B;&#x5E8F;&#x8FD0;&#x4F5C;&#x8D77;&#x6765;&#xFF0C;&#x6839;&#x636E;&#x81EA;&#x5DF1;&#x7684;&#x60F3;&#x6CD5;&#x53BB;&#x5BFB;&#x627E;&#x548C;&#x653B;&#x51FB;&#x76EE;&#x6807;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x60F3;&#x5230;&#x7684;&#x8BCD;&#x662F;<strong>&#x667A;&#x68B0;&#x5371;&#x673A;&#xFF0C;</strong>&#x6211;&#x89C9;&#x5F97;&#x6B64;&#x523B;&#x7684;&#x6211;&#x65F6;&#x4EE3;&#x5386;&#x53F2;&#x7684;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x672A;&#x6765;&#x6B63;&#x5728;&#x88AB;&#x6162;&#x6162;&#x5B9E;&#x73B0;&#x2026;&#x2026;</p><h3 id="%E5%85%A5%E9%97%A8%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C">&#x5165;&#x95E8;&#x5377;&#x79EF;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;</h3><p>&#x968F;&#x7740;&#x5BF9;&#x89C6;&#x89C9;&#x8981;&#x6C42;&#x7684;&#x4E0D;&#x65AD;&#x63D0;&#x9AD8;&#xFF0C;&#x6211;&#x5F00;&#x59CB;&#x63A5;&#x89E6;&#x57FA;&#x4E8E;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x7684;&#x76EE;&#x6807;&#x8BC6;&#x522B;&#x7B97;&#x6CD5;&#x3002;</p><p>YOLO &#x7B97;&#x6CD5;&#x867D;&#x7136;&#x5F88;&#x597D;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x4F4E;&#x7AEF;&#x8BBE;&#x5907;&#x4E0A;&#x8FD0;&#x884C;&#x8FD8;&#x662F;&#x6709;&#x4E9B;&#x4E0D;&#x8DB3;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x6240;&#x4EE5;&#x9700;&#x8981;&#x4E0D;&#x65AD;&#x5730;&#x4FEE;&#x6539;&#xFF0C;&#x8FDB;&#x884C;&#x8C03;&#x6574;&#x3002;</p><p>&#x6240;&#x4EE5;&#xFF0C;&#x6211;&#x4ECE;&#x8FD0;&#x884C;&#x522B;&#x4EBA;&#x5199;&#x597D;&#x7684;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x9879;&#x76EE;&#xFF0C;&#x8FDB;&#x4E00;&#x6B65;&#x53D8;&#x4E3A;&#x4E86;&#x5165;&#x95E8;&#x5377;&#x79EF;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#xFF0C;&#x63ED;&#x5F00;&#x4E86;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x7684;&#x9762;&#x7EB1;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2022/01/--1.png" class="kg-image" alt="HELLO: 2022" loading="lazy" width="692" height="519" srcset="https://blog.lss233.com/content/images/size/w600/2022/01/--1.png 600w, https://blog.lss233.com/content/images/2022/01/--1.png 692w"></figure><h3 id="vuecreateapp">Vue.createApp()</h3><p>&#x5B66;&#x6821;&#x91CC;&#x6210;&#x7ACB;&#x4E86;&#x4E0E; Web &#x6280;&#x672F;&#x6709;&#x5173;&#x7684;&#x793E;&#x56E2;&#x3002; &#x5728;&#x62DB;&#x65B0;&#x9636;&#x6BB5;&#xFF0C;&#x6211;&#x5F88;&#x987A;&#x5229;&#x5730;&#x901A;&#x8FC7;&#x4E86;&#x9762;&#x8BD5;&#xFF0C;&#x4EE5;&#x5168;&#x6808;&#x7684;&#x76EE;&#x6807;&#x52A0;&#x5165;&#xFF0C;&#x7ED3;&#x679C;&#x88AB;&#x5206;&#x5230;&#x4E86;&#x524D;&#x7AEF;&#x7EC4;&#xFF08;&#x636E;&#x8BF4;&#x662F;&#x56E0;&#x4E3A;&#x524D;&#x7AEF;&#x4EBA;&#x5C11;&#xFF09;&#x3002;</p><p>&#x968F;&#x540E;&#x8FCE;&#x6765;&#x4E86;&#x4E24;&#x4E2A;&#x6708;&#x7684;&#x65B0;&#x751F;&#x57F9;&#x8BAD;&#x3002;&#x6211;&#x4EEC;&#x4F5C;&#x4E3A;&#x5B66;&#x957F;&#x7684;&#x8981;&#x6559;&#x5927;&#x4E00;&#x7684;&#x5B66;&#x751F; C &#x8BED;&#x8A00;&#x3002;</p><p>&#x76F4;&#x5230;&#x6700;&#x8FD1;&#xFF0C;&#x624D;&#x88AB;&#x5206;&#x914D;&#x4E86;&#x4E00;&#x4E2A;&#x524D;&#x540E;&#x7AEF;&#x5206;&#x79BB;&#x7684;&#x9879;&#x76EE;&#x3002;</p><p></p><h1 id="%E4%BB%8A%E5%B9%B4%E6%89%93%E7%AE%97%E5%81%9A%E4%BB%80%E4%B9%88%E5%91%A2%EF%BC%9F">&#x4ECA;&#x5E74;&#x6253;&#x7B97;&#x505A;&#x4EC0;&#x4E48;&#x5462;&#xFF1F;</h1><p>&#x6BCF;&#x5E74;&#x7684;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF0C;&#x90FD;&#x4F1A;&#x89C4;&#x5212;&#x4E00;&#x4E0B;&#x672A;&#x6765;&#x3002;&#x4E0D;&#x8FC7;&#x6211;&#x53D1;&#x73B0;&#xFF0C;&#x6BCF;&#x5E74;&#x6211;&#x5199;&#x4E0B;&#x7684;&#x4E1C;&#x897F;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x90FD;&#x6CA1;&#x6709;&#x5B9E;&#x73B0;&#xFF08;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x8BF4;&#x662F;&#x76F8;&#x53CD;&#x7684;&#xFF01;&#xFF09;</p><p>&#x4E0D;&#x8FC7;&#x8BE5;&#x5199;&#x7684;&#x8FD8;&#x662F;&#x8981;&#x5199;&#xFF0C;&#x5E0C;&#x671B;&#x4ECA;&#x5E74;&#x7684;&#x613F;&#x671B;&#x80FD;&#x597D;&#x597D;&#x5B9E;&#x73B0;&#x5427;&#x3002;</p><p>&#x8FD9;&#x4E00;&#x5E74;&#xFF0C;&#x6211;&#x6253;&#x7B97;&#x2026;&#x2026;</p><ul><li>&#x770B;&#x4E0A;&#x4E86; React&#xFF0C;&#x6216;&#x8BB8;&#x53EF;&#x4EE5;&#x7528; React &#x6765;&#x5199;&#x4E00;&#x4E2A;&#x4E1C;&#x897F;&#xFF1F;</li><li>RoboMaster &#x518D;&#x6218;&#x4E00;&#x5E74;&#xFF0C;&#x4EE5;&#x66F4;&#x597D;&#x7684;&#x72B6;&#x6001;&#xFF0C;&#x5F25;&#x8865;&#x53BB;&#x5E74;&#x7684;&#x9057;&#x61BE;&#x3002;</li></ul><h1 id="end">End</h1><p>&#x597D;&#x5427;&#xFF0C;&#x5C31;&#x5148;&#x5199;&#x5230;&#x8FD9;&#x91CC;&#x3002;</p><p>&#x5E0C;&#x671B;&#x65B0;&#x7684;&#x4E00;&#x5E74;&#xFF0C;&#x80FD;&#x591F;&#x6293;&#x4F4F;&#x66F4;&#x597D;&#x7684;&#x673A;&#x9047;&#xFF0C;&#x6210;&#x4E3A;&#x4E00;&#x4E2A;&#x66F4;&#x597D;&#x7684;&#x81EA;&#x5DF1;&#x3002;</p><p>&#x6700;&#x597D;&#x7684;&#x795D;&#x613F;&#x7ED9;2022&#x5E74;&#x7684;Lss233&#x3002;</p><!--kg-card-begin: html--><p align="right">--- Lss233,&#x4E8E;2022&#x5E74;&#x519C;&#x5386;&#x8DE8;&#x5E74;&#x4EA4;&#x9645;&#x4E4B;&#x65F6;</p><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[OpenVINO + YoloV5 目标视觉炼丹流程简述]]></title><description><![CDATA[本文将以 ultralytics 实现的 YOLOv5 神经网络算法识别 RoboMaster比赛中机器人的装甲板为例，简单介绍使用 Intel 的 OpenVINO 来进行视觉神经网络运算的应用的基本流程。]]></description><link>https://blog.lss233.com/openvino-lian-dan-cong-ru-men-dao-ru-tu/</link><guid isPermaLink="false">610f884fe7c3b5053afd6444</guid><category><![CDATA[深度学习]]></category><category><![CDATA[OpenVINO]]></category><category><![CDATA[Intel]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Mon, 09 Aug 2021 07:16:49 GMT</pubDate><content:encoded><![CDATA[<p>&#x57FA;&#x4E8E;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x7B97;&#x6CD5;&#x56E0;&#x4E3A;&#x5177;&#x6709;&#x8F83;&#x597D;&#x7684;&#x9C81;&#x68D2;&#x6027;&#x800C;&#x88AB;&#x5927;&#x5BB6;&#x6240;&#x559C;&#x7231;&#x3002;&#x672C;&#x6587;&#x5C06;&#x7B80;&#x5355;&#x4ECB;&#x7ECD;&#x4F7F;&#x7528; Intel &#x7684; OpenVINO &#x6765;&#x8FDB;&#x884C;&#x89C6;&#x89C9;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x8FD0;&#x7B97;&#x7684;&#x5E94;&#x7528;&#x3002;</p><p>OpenVINO &#x662F;&#x4E00;&#x5957;&#x6DF1;&#x5EA6;&#x5B66;&#x4E60;&#x5DE5;&#x5177;&#x5E93;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x5BF9;&#x4F60;&#x7684;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x6A21;&#x578B;&#x8FDB;&#x884C;&#x4F18;&#x5316;&#x3001;&#x4F7F;&#x7528;&#x4ED6;&#x4EEC;&#x7684;&#x63A8;&#x7406;&#x5F15;&#x64CE;&#x52A0;&#x901F;&#x8FD0;&#x7B97;&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://docs.openvinotoolkit.org/cn/latest/OpenVINO-diagram.png" alt="OpenVINO &#x6D41;&#x7A0B;&#x56FE;" loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x5728;&#x4F7F;&#x7528; OpenVINO &#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x5148;&#x6709;&#x4E00;&#x4E2A;&#x80FD;&#x7528;&#x7684;&#x6A21;&#x578B;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x672C;&#x6587;&#x7684;&#x524D;&#x534A;&#x90E8;&#x5206;&#x5C06;&#x8BB2;&#x8FF0;&#x666E;&#x901A;&#x7684;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x6A21;&#x578B;&#x7684;&#x5236;&#x4F5C;&#xFF0C;&#x540E;&#x534A;&#x90E8;&#x5206;&#x518D;&#x8BB2;&#x8FF0;&#x5982;&#x4F55;&#x628A;&#x5B83;&#x4E0E; OpenVINO&#xFF0C;&#x4EE5;&#x53CA;&#x6211;&#x4EEC;&#x7684;&#x9879;&#x76EE;&#x7ED3;&#x5408;&#x3002;</p><p>&#x672C;&#x6587;&#x5C06;&#x4EE5; ultralytics &#x5B9E;&#x73B0;&#x7684; YOLOv5 &#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x7B97;&#x6CD5;&#x8BC6;&#x522B; RoboMaster&#x6BD4;&#x8D5B;&#x4E2D;&#x673A;&#x5668;&#x4EBA;&#x7684;&#x88C5;&#x7532;&#x677F;&#x4E3A;&#x4F8B;&#x3002;</p><h1 id="0x01-">0x01 &#x7D20;&#x6750;&#x6574;&#x7406;</h1><h3 id="-">&#x8F6C;&#x7801;</h3><p>&#x6211;&#x4EEC;&#x7684;&#x7D20;&#x6750;&#x4E00;&#x822C;&#x7531;&#x5B89;&#x88C5;&#x5728;&#x673A;&#x5668;&#x4EBA;&#x4E0A;&#x7684;&#x5DE5;&#x4E1A;&#x76F8;&#x673A;&#x5F55;&#x5236;&#x3002;&#x7531;&#x4E8E;&#x7F16;&#x7801;&#x95EE;&#x9898;&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4;&#x5F55;&#x5236;&#x51FA;&#x6765;&#x7684;&#x6587;&#x4EF6;&#x6BD4;&#x8F83;&#x5927;&#xFF0C;&#x6D6A;&#x8D39;&#x786C;&#x76D8;&#x5B58;&#x50A8;&#x7A7A;&#x95F4;&#x3002;</p><p>&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <code>ffmpeg -i record_x.avi record_x.mp4</code> &#x8FD9;&#x6837;&#x7684;&#x547D;&#x4EE4;&#x5C06;&#x89C6;&#x9891;&#x8F6C;&#x4E3A; H.264 MP4 &#x89C6;&#x9891;&#xFF0C;&#x4E00;&#x822C;&#x60C5;&#x51B5;&#x4E0B;&#x80FD;&#x5728;&#x753B;&#x8D28;&#x4E0D;&#x4F1A;&#x964D;&#x4F4E;&#x5F88;&#x79BB;&#x8C31;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x8282;&#x7701; 95% &#x5DE6;&#x53F3;&#x7684;&#x7A7A;&#x95F4;&#x3002;</p><h3 id="--1">&#x5B58;&#x50A8;&#x4E0E;&#x5907;&#x4EFD;</h3><p>&#x8FD9;&#x4E00;&#x90E8;&#x5206;&#x653E;&#x5230;&#x524D;&#x9762;&#x6765;&#x8BF4;&#x3002;&#x5176;&#x5B9E;&#x4E0D;&#x4EC5;&#x4EC5;&#x5BF9;&#x4E8E;&#x7D20;&#x6750;&#xFF0C;&#x5305;&#x62EC;&#x6570;&#x636E;&#x96C6;&#x6587;&#x4EF6;&#x3001;&#x6A21;&#x578B;&#x7ED3;&#x679C;&#x548C;&#x6E90;&#x7801;&#xFF0C;&#x90FD;&#x9700;&#x8981;&#x7279;&#x522B;&#x6CE8;&#x610F;&#x3002;&#x6BCF;&#x4E2A;&#x6B65;&#x9AA4;&#x4EA7;&#x751F;&#x7684;&#x6587;&#x4EF6;&#x90FD;&#x4F1A;&#x82B1;&#x8D39;&#x4E00;&#x5B9A;&#x7684;&#x6210;&#x672C;&#xFF0C;&#x6709;&#x4E9B;&#x6587;&#x4EF6;&#x6D88;&#x5931;&#x4E86;&#x5C31;&#x6CA1;&#x6709;&#x673A;&#x4F1A;&#x91CD;&#x65B0;&#x627E;&#x56DE;&#x6765;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x5728;&#x4F60;&#x51B3;&#x5B9A;&#x4F7F;&#x7528;&#x67D0;&#x4E2A;&#x8D35;&#x91CD;&#x6587;&#x4EF6;&#x524D;&#xFF0C;&#x6700;&#x597D;&#x90FD;&#x5E94;&#x8BE5;<strong>&#x5148;&#x5907;&#x4EFD;&#xFF0C;&#x518D;&#x4F7F;&#x7528;</strong>&#x3002;</p><p>&#x4E00;&#x4E2A;&#x6BD4;&#x8F83;&#x59A5;&#x5584;&#x7684;&#x65B9;&#x6CD5;&#x662F;&#x672C;&#x5730;+&#x8FDC;&#x7A0B;&#x5907;&#x4EFD;&#x3002;&#x672C;&#x5730;&#x5907;&#x4EFD;&#x662F;&#x6307;&#x5C06;&#x6587;&#x4EF6;&#x62F7;&#x5230;U&#x76D8;&#x6216;&#x8005;&#x79FB;&#x52A8;&#x786C;&#x76D8;&#x4E0A;&#x3002;&#x4F46;&#x662F;&#x8F83;&#x5C0F;&#x7684;U&#x76D8;&#x53EF;&#x80FD;&#x4F1A;&#x56E0;&#x4E3A;&#x5404;&#x79CD;&#x539F;&#x56E0;&#x5931;&#x8E2A;&#xFF0C;&#x79FB;&#x52A8;&#x786C;&#x76D8;&#x6709;&#x53EF;&#x80FD;&#x4F1A;&#x56E0;&#x4E3A;&#x78B0;&#x649E;&#x800C;&#x635F;&#x574F;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x4F60;&#x6700;&#x597D;&#x518D;&#x628A;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x4E00;&#x4EFD;&#x5230;&#x8BF8;&#x5982;&#x767E;&#x5EA6;&#x4E91;&#x8FD9;&#x6837;&#x7684;&#x7F51;&#x76D8;&#x4E0A;&#x3002;&#x867D;&#x7136;&#x5B83;&#x4E0B;&#x8F7D;&#x901F;&#x5EA6;&#x4E0D;&#x5FEB;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4F60;&#x8BEF;&#x5220;&#x4E86;&#x6587;&#x4EF6;&#xFF0C;&#x81F3;&#x5C11;&#x6709;&#x4E2A;&#x529E;&#x6CD5;&#x53EF;&#x4EE5;&#x8BA9;&#x5B83;&#x56DE;&#x6765;&#x3002;</p><h3 id="--2">&#x526A;&#x8F91;</h3><p>&#x6211;&#x4EEC;&#x7684;&#x573A;&#x666F;&#x662F;&#x5BF9;&#x89C6;&#x9891;&#x8FDB;&#x884C;&#x6570;&#x636E;&#x6807;&#x6CE8;&#xFF0C;&#x4F46;&#x6211;&#x4EEC;&#x7684;&#x89C6;&#x9891;&#x91CC;&#x4E0E;&#x6211;&#x4EEC;&#x8981;&#x6807;&#x6CE8;&#x7684;&#x5185;&#x5BB9;&#x6709;&#x5173;&#x7684;&#x5E27;&#x5176;&#x5B9E;&#x4E0D;&#x662F;&#x5F88;&#x591A;&#x3002;&#x8FC7;&#x591A;&#x7684;&#x65E0;&#x5173;&#x5E27;&#x4F1A;&#x7ED9;&#x6211;&#x4EEC;&#x4E0B;&#x4E00;&#x6B65;&#x7684;&#x6807;&#x6CE8;&#x5E26;&#x6765;&#x9EBB;&#x70E6;&#xFF0C;&#x6240;&#x4EE5;&#x5728;&#x5F00;&#x59CB;&#x6807;&#x6CE8;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x5BF9;&#x89C6;&#x9891;&#x8FDB;&#x884C;&#x526A;&#x8F91;&#xFF0C;&#x53EA;&#x4FDD;&#x7559;&#x6211;&#x4EEC;&#x60F3;&#x8981;&#x7684;&#x90E8;&#x5206;&#x3002;</p><p>&#x5BF9;&#x4E8E;&#x526A;&#x8F91;&#x8FD9;&#x4E00;&#x5757;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E13;&#x4E1A;&#x7684; Adobe Premiere Pro&#xFF0C; &#x4E5F;&#x53EF;&#x4EE5;&#x627E;&#x4E00;&#x4E9B;&#x514D;&#x8D39;&#x5F00;&#x6E90;&#x7684;&#x8F6F;&#x4EF6;&#x3002;</p><p>&#x672C;&#x4EBA;&#x968F;&#x4FBF;&#x627E;&#x4E86;&#x4E2A;&#x53EB; <a href="https://www.openshot.org/download/">OpenShot Video Editor</a> &#x7684;&#x8F6F;&#x4EF6;&#x4E3E;&#x4E2A;&#x4F8B;&#x5B50;&#x3002;</p><p>&#x6253;&#x5F00;&#x8F6F;&#x4EF6;&#x540E;&#xFF0C;&#x628A;&#x4F60;&#x7684;&#x89C6;&#x9891;&#x62D6;&#x5230;&#x8F6F;&#x4EF6;&#x5E95;&#x90E8;&#x7684;<strong>&#x65F6;&#x95F4;&#x7EBF;</strong>&#x4E0A;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/08/image-13.png" class="kg-image" alt loading="lazy" width="590" height="211"></figure><p>&#x64AD;&#x653E;&#x89C6;&#x9891;&#xFF0C;&#x5728;&#x4F60;&#x60F3;&#x526A;&#x7684;&#x5730;&#x65B9;&#x70B9;&#x51FB;<strong>&#x6DFB;&#x52A0;&#x6807;&#x8BB0;</strong>&#x3002;</p><p>&#x5F53;&#x4F60;&#x89C9;&#x5F97;&#x6709;&#x6548;&#x7684;&#x5E27;&#x6570;&#x5DF2;&#x7ECF;&#x8DB3;&#x591F;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7528;<strong>&#x5206;&#x5272;&#x5DE5;&#x5177;</strong>&#x628A;&#x4E4B;&#x524D;&#x6807;&#x8BB0;&#x8FC7;&#x7684;&#x89C6;&#x9891;&#x6BB5;&#x526A;&#x5F00;&#xFF0C;&#x5220;&#x9664;&#x4E0D;&#x8981;&#x7684;&#x90E8;&#x5206;&#xFF0C;&#x628A;&#x89C6;&#x9891;&#x5728;&#x4E00;&#x8D77;&#x653E;&#x5230;&#x5F00;&#x5934;&#x3002;</p><p>&#x6700;&#x540E;&#x4E00;&#x6B65;&#x662F;&#x5BFC;&#x51FA;&#xFF0C;&#x8FD9;&#x4E2A;&#x8F6F;&#x4EF6;&#x7684;&#x5BFC;&#x51FA;&#x89C6;&#x9891;&#x529F;&#x80FD;&#x5728; <code>&#x6587;&#x4EF6; &gt; Export Project &gt; &#x5BFC;&#x51FA;&#x89C6;&#x9891;</code>&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/08/image-14.png" class="kg-image" alt loading="lazy" width="670" height="374" srcset="https://blog.lss233.com/content/images/size/w600/2021/08/image-14.png 600w, https://blog.lss233.com/content/images/2021/08/image-14.png 670w"></figure><p>&#x5BFC;&#x51FA;&#x65F6;&#x4E00;&#x822C;&#x9700;&#x8981;&#x8BBE;&#x7F6E;&#x4E00;&#x4E9B;&#x53C2;&#x6570;&#xFF0C;&#x6BD4;&#x5982;&#x8BF4;&#x5BFC;&#x51FA;&#x7684;&#x89C6;&#x9891;&#x7F16;&#x7801;&#xFF0C;&#x4EE5;&#x53CA;&#x89C6;&#x9891;&#x5C3A;&#x5BF8;&#xFF08;&#x914D;&#x7F6E;&#xFF09;&#x3002;</p><p>&#x8FD9;&#x91CC;&#x6211;&#x4EEC;&#x4F7F;&#x7528; MP4(h.264) &#x548C; 640x480 &#x5927;&#x5C0F;&#x7684;&#x5206;&#x8FA8;&#x7387;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x6837;&#x7684;&#x89C6;&#x9891;&#x65E2;&#x4E0D;&#x4F1A;&#x4E22;&#x5931;&#x6211;&#x4EEC;&#x60F3;&#x8981;&#x8BC6;&#x522B;&#x76EE;&#x6807;&#x7684;&#x7279;&#x5F81;&#xFF0C;&#x53C8;&#x53EF;&#x4EE5;&#x8BA9;&#x6587;&#x4EF6;&#x4F53;&#x79EF;&#x53D8;&#x5C0F;&#x3002; </p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/08/image-15.png" class="kg-image" alt loading="lazy" width="509" height="586"></figure><hr><h1 id="0x02-cvat">0x02 &#x6570;&#x636E;&#x6807;&#x6CE8;&#xFF1A;CVAT</h1><p>&#x4E3A;&#x4E86;&#x8BA9;&#x6211;&#x4EEC;&#x7684;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x80FD;&#x77E5;&#x9053;&#x4EC0;&#x4E48;&#x662F;&#x6211;&#x4EEC;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x4E1C;&#x897F;&#xFF0C;&#x5B83;&#x53EB;&#x4EC0;&#x4E48;&#x540D;&#x5B57;&#xFF0C;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x5148;&#x624B;&#x5DE5;&#x6807;&#x6CE8;&#x4E00;&#x4E9B;&#x6570;&#x636E;&#x7ED9;&#x5B83;&#xFF0C;&#x505A;&#x6210;&#x8BA9;&#x5B83;&#x5B66;&#x4E60;&#x7528;&#x7684;&#x6570;&#x636E;&#x96C6;&#x3002;</p><p>&#x6570;&#x636E;&#x96C6;&#x4E00;&#x822C;&#x7531;&#x6807;&#x7B7E;&#x548C;&#x56FE;&#x7247;&#x7EC4;&#x6210;&#x3002;&#x6807;&#x7B7E;&#x662F;&#x4E00;&#x6BB5;&#x6587;&#x672C;&#xFF0C;&#x7528;&#x6765;&#x544A;&#x8BC9;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x56FE;&#x7247;&#x4E2D;&#x7684;&#x4E1C;&#x897F;&#x53EB;&#x4EC0;&#x4E48;&#x540D;&#x5B57;&#x3002;</p><p>&#x6570;&#x636E;&#x6807;&#x6CE8;&#x662F;&#x6700;&#x8BA9;&#x4EBA;&#x75DB;&#x82E6;&#x7684;&#x73AF;&#x8282;&#xFF0C;&#x4F46;&#x4E5F;&#x662F;&#x6700;&#x91CD;&#x8981;&#x7684;&#x73AF;&#x8282;&#x3002;&#x8FD9;&#x4E2A;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x5728;&#x6211;&#x4EEC;&#x9879;&#x76EE;&#x4E2D;&#x80FD;&#x4E0D;&#x80FD;&#x8FBE;&#x5230;&#x8BBA;&#x6587;&#x5199;&#x7684;&#x9884;&#x671F;&#x6548;&#x679C;&#xFF0C;&#x548C;&#x4F60;&#x7684;&#x6570;&#x636E;&#x96C6;&#x6709;&#x7740;&#x975E;&#x5E38;&#x5927;&#x7684;&#x5173;&#x7CFB;&#x3002;&#x5982;&#x679C;&#x4F60;&#x7684;&#x6570;&#x636E;&#x96C6;&#x6577;&#x884D;&#x4E86;&#x4E8B;&#xFF0C;&#x90A3;&#x4E48;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x4EA7;&#x751F;&#x7684;&#x7ED3;&#x679C;&#x4E5F;&#x662F;&#x975E;&#x5E38;&#x6577;&#x884D;&#x7684;&#x3002;</p><!--kg-card-begin: markdown--><p>&#x5BF9;&#x4E8E; AI &#x9879;&#x76EE;&#x6765;&#x8BF4;&#xFF0C;&#x6210;&#x529F;&#x7684;&#x6700;&#x91CD;&#x8981;&#x7684;&#x5F71;&#x54CD;&#x56E0;&#x7D20;&#x4E4B;&#x4E00;&#x662F;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x7684;&#x201C;&#x4F18;&#x8D28;&#x6570;&#x636E;&#x201D;&#x7684;&#x6570;&#x91CF;&#x3002;<br>
&#x6240;&#x8C13;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#x89C6;&#x89C9;&#x5E94;&#x7528;&#x7684;&#x201C;&#x4F18;&#x8D28;&#x6570;&#x636E;&#x201D;&#x662F;&#x6307;:</p>
<ul>
<li>&#x6BCF;&#x4E2A;&#x56FE;&#x7247;/&#x6807;&#x6CE8;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x6070;&#x5F53;&#x7684;&#x6807;&#x7B7E;&#x3002;</li>
<li>&#x6BCF;&#x4E2A;&#x8FB9;&#x754C;&#x6846;&#x6216;&#x591A;&#x8FB9;&#x5F62;&#x90FD;&#x7D27;&#x81F4;&#x5730;&#x5305;&#x56F4;&#x7740;&#x8981;&#x8BAD;&#x7EC3;&#x7684;&#x7269;&#x4F53;&#x3002;</li>
</ul>
<!--kg-card-end: markdown--><p>&#x6570;&#x636E;&#x6807;&#x6CE8;&#x7684;&#x8F6F;&#x4EF6;&#x6709;&#x5F88;&#x591A;&#xFF0C;&#x4F60;&#x5728;<a href="https://www.infoq.cn/article/ooftcgknej1tjvw6u7fr">&#x8FD9;&#x91CC;</a>&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x89C1;&#x5F88;&#x591A;&#x3002;</p><p>&#x672C;&#x4EBA;&#x9009;&#x62E9;&#x7684;&#x662F; OpenVINO Toolkit &#x4E0B;&#x7684; CVAT&#x3002;&#x9009;&#x62E9;&#x5B83;&#x7684;&#x539F;&#x56E0;&#x662F;&#x5B83;&#x652F;&#x6301;&#x81EA;&#x52A8;&#x5316;&#x63D2;&#x503C;&#x3001;&#x591A;&#x4EBA;&#x540C;&#x65F6;&#x6807;&#x6CE8;&#x3001;&#x8DE8;&#x5E73;&#x53F0;&#xFF0C;&#x800C;&#x4E14;&#x5B83;&#x4E5F;&#x6CA1;&#x6709;&#x4F20;&#x8BF4;&#x4E2D;&#x7684;&#x90A3;&#x4E48;&#x96BE;&#x3002;&#x5F00;&#x59CB;&#x7684;&#x65F6;&#x5019;&#x4F60;&#x4F1A;&#x89C9;&#x5F97;&#x4E0D;&#x592A;&#x4E60;&#x60EF;&#xFF0C;&#x4F46;&#x6807;&#x6CE8;&#x5F97;&#x591A;&#x4E86;&#x4F60;&#x5C31;&#x80FD;&#x53D1;&#x73B0;&#x5B83;&#x7684;&#x4F7F;&#x7528;&#x6280;&#x5DE7;&#x3002;</p><p>CVAT &#x662F;&#x4E00;&#x4E2A; Web &#x7A0B;&#x5E8F;&#xFF0C;&#x6240;&#x4EE5;&#x4F60;&#x53EA;&#x9700;&#x8981;&#x6709;&#x4E00;&#x4E2A;&#x6D4F;&#x89C8;&#x5668;&#x5C31;&#x80FD;&#x7528;&#x3002;&#x4ED6;&#x4EEC;&#x6709;&#x4E00;&#x4E2A;&#x5B98;&#x65B9;&#x7684;&#x6F14;&#x793A;&#x578B;&#x7F51;&#x7AD9;&#xFF0C;&#x5728; <a href="https://cvat.org">cvat.org</a>&#x3002;&#x5982;&#x679C;&#x4F60;&#x5355;&#x7EAF;&#x60F3;&#x8BD5;&#x8BD5;&#xFF0C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x6253;&#x5F00;&#xFF0C;&#x6CE8;&#x518C;&#x4E00;&#x4E2A;&#x8D26;&#x53F7;&#x5C31;&#x80FD;&#x4F7F;&#x7528;&#x3002;</p><p>&#x5B98;&#x65B9;&#x624B;&#x518C;&#x5730;&#x5740;&#xFF1A;<a href="https://openvinotoolkit.github.io/cvat/docs/getting_started/">https://openvinotoolkit.github.io/cvat</a>/</p><h3 id="--3">&#x5B89;&#x88C5;</h3><p>&#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x56E2;&#x961F;&#x6765;&#x8BF4;&#xFF0C;&#x5B89;&#x88C5;&#x4E00;&#x4E2A; CVAT &#x5B9E;&#x4F8B;&#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;</p><!--kg-card-begin: markdown--><blockquote>
<p>&#x672C;&#x8282;&#x53C2;&#x8003;&#xFF1A;<a href="https://openvinotoolkit.github.io/cvat/docs/administration/basics/installation/">https://openvinotoolkit.github.io/cvat/docs/administration/basics/installation/</a></p>
</blockquote>
<!--kg-card-end: markdown--><p>CVAT &#x88AB;&#x5C01;&#x88C5;&#x5728;&#x4E86;&#x4E00;&#x4E2A; Docker &#x73AF;&#x5883;&#x91CC;&#xFF0C;&#x6240;&#x4EE5;&#x9996;&#x5148;&#x4F60;&#x8981;&#x5B89;&#x88C5; Docker&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x4F7F;&#x7528; Ubuntu&#xFF0C;&#x4F60;&#x7684; Ubuntu &#x7248;&#x672C;&#x81F3;&#x5C11;&#x5F97;&#x662F; 18.04&#x3002;</p><pre><code class="language-console">sudo apt-get update
sudo apt-get --no-install-recommends install -y \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
  &quot;deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) \
  stable&quot;
sudo apt-get update
sudo apt-get --no-install-recommends install -y docker-ce docker-ce-cli containerd.io
# &#x5B89;&#x88C5;&#x597D;&#x4E4B;&#x540E;&#xFF0C;&#x628A;&#x4F60;&#x7684;&#x7528;&#x6237;&#x6DFB;&#x52A0;&#x5230; docker &#x7EC4;&#x4E2D;&#xFF0C;&#x4EE5;&#x4FBF;&#x4F7F;&#x7528; docker &#x6709;&#x5173;&#x7684;&#x547D;&#x4EE4;
sudo groupadd docker
sudo usermod -aG docker $USER</code></pre><p>&#x7136;&#x540E;&#x4F60;&#x9700;&#x8981;&#x5B89;&#x88C5; docker-compose&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x7BA1;&#x7406; docker &#x5BB9;&#x5668;&#x4E4B;&#x95F4;&#x4E92;&#x76F8;&#x4EA4;&#x4E92;&#x7684;&#x7A0B;&#x5E8F;&#x3002;</p><!--kg-card-begin: markdown--><pre><code class="language-console">sudo apt-get --no-install-recommends install -y python3-pip python3-setuptools
sudo python3 -m pip install setuptools docker-compose
</code></pre>
<!--kg-card-end: markdown--><p>&#x5230;&#x8FD9;&#x91CC;&#x624D;&#x662F;&#x5B89;&#x88C5; CVAT &#x7684;&#x6B65;&#x9AA4;&#x3002;&#x9996;&#x5148;&#xFF0C;&#x641E;&#x5230;&#x6E90;&#x7801;&#x3002;</p><pre><code class="language-console">sudo apt-get --no-install-recommends install -y git
# &#x5982;&#x679C;&#x4F60;&#x7684;&#x7F51;&#x7EDC;&#x8BBF;&#x95EE; GitHub &#x6BD4;&#x8F83;&#x56F0;&#x96BE;&#xFF0C;&#x53EF;&#x4EE5;&#x7528;&#x6362;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;
# git clone https://hub.fastgit.org/opencv/cvat
git clone https://github.com/opencv/cvat
cd cvat</code></pre><p>&#x9996;&#x6B21;&#x542F;&#x52A8;&#x65F6;&#xFF0C;docker &#x4F1A;&#x4E0B;&#x8F7D;&#x5BB9;&#x5668;&#x955C;&#x50CF;&#xFF0C;&#x8FD9;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x6BD4;&#x8F83;&#x957F;&#x7684;&#x65F6;&#x95F4;&#x3002;</p><pre><code class="language-console">docker-compose up -d</code></pre><p>&#x4E0A;&#x9762;&#x90A3;&#x4E2A;&#x547D;&#x4EE4;&#x6267;&#x884C;&#x5B8C;&#x4E4B;&#x540E;&#xFF0C;&#x8BF4;&#x660E;&#x5BB9;&#x5668;&#x5DF2;&#x7ECF;&#x542F;&#x52A8;&#x4E86;&#xFF0C;&#x4F60;&#x7684; CVAT &#x4E5F;&#x4F1A;&#x5728;&#x51E0;&#x79D2;&#x4E4B;&#x540E;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x3002;&#x6253;&#x5F00; http://localhost:8080&#xFF0C;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x89C1;&#x4F60;&#x7684; CVAT&#x3002;&#x5148;&#x522B;&#x6025;&#x7740;&#x767B;&#x5F55;&#xFF0C;&#x5728;&#x9996;&#x6B21;&#x4F7F;&#x7528;&#x4E4B;&#x524D;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x6267;&#x884C;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x6765;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x7BA1;&#x7406;&#x5458;&#x7528;&#x6237;&#x3002;</p><pre><code class="language-sh">docker exec -it cvat bash -ic &apos;python3 ~/manage.py createsuperuser&apos;</code></pre><p>&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x53EF;&#x4EE5;&#x5E2E;&#x4F60;&#x5B89;&#x88C5;&#x597D; Chrome &#x6D4F;&#x89C8;&#x5668;&#x3002;</p><pre><code class="language-sh">curl https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c &apos;echo &quot;deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main&quot; &gt;&gt; /etc/apt/sources.list.d/google-chrome.list&apos;
sudo apt-get update
sudo apt-get --no-install-recommends install -y google-chrome-stable</code></pre><p>&#x5982;&#x679C;&#x4F60;&#x5E0C;&#x671B;&#x4F60;&#x7684; CVAT &#x53EF;&#x4EE5;&#x88AB;&#x5176;&#x4ED6;&#x7535;&#x8111;&#x8BBF;&#x95EE;&#x5230;&#xFF0C;&#x5728;&#x542F;&#x52A8; CVAT &#x4E4B;&#x524D;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x5148;&#x8BBE;&#x7F6E;&#x73AF;&#x5883;&#x53D8;&#x91CF; <code>CVAT_HOST</code> &#x4E3A;&#x8BBF;&#x95EE;&#x7684;&#x57DF;&#x540D;&#x6216;&#x8005; IP&#x3002;&#x4E0B;&#x9762;&#x51E0;&#x4E2A;&#x547D;&#x4EE4;&#x4E5F;&#x8BB8;&#x4F60;&#x4F1A;&#x7528;&#x5F97;&#x5230;&#xFF1A;</p><pre><code class="language-console"># &#x5728;&#x4F60;&#x7684; CVAT &#x76EE;&#x5F55;&#x4E0B;
docker-compose down # &#x5173;&#x6389; CVAT
export CVAT_HOST=192.168.1.3 # &#x7136;&#x540E;&#x5927;&#x5BB6;&#x5728;&#x5730;&#x5740;&#x680F;&#x8F93;&#x5165; 192.168.1.3:8080 &#x6765;&#x8BBF;&#x95EE;
docker-compose up -d # &#x542F;&#x52A8; CVAT</code></pre><p>CVAT &#x8FD8;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x516C;&#x7528;&#x4F4D;&#x7F6E;&#x6765;&#x8BFB;&#x53D6;&#x4F60;&#x7684;&#x7D20;&#x6750;&#x3002;</p><p>&#x4F60;&#x9700;&#x8981;&#x7F16;&#x8F91; <code>docker-compose.yaml</code>&#xFF0C;&#x6539;&#x6210;&#x8FD9;&#x6837;&#xFF1A;</p><pre><code class="language-yaml">version: &apos;3.3&apos;

services:
  cvat:
    environment:
      CVAT_SHARE_URL: &apos;Mounted from /mnt/share host directory&apos;
    volumes:
      - cvat_share:/home/django/share:ro

volumes:
  cvat_share:
    driver_opts:
      type: none
      device: /mnt/share # &#x5728;&#x8FD9;&#x53F0;&#x7535;&#x8111;&#x4E0A;&#x7684;&#x4F4D;&#x7F6E;
      o: bind</code></pre><p>&#x628A;&#x4F60;&#x7684;&#x7D20;&#x6750;&#x653E;&#x5230;&#x91CC;&#x9762;&#xFF0C; &#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x5728;&#x521B;&#x5EFA;&#x4EFB;&#x52A1;&#x7684;&#x65F6;&#x5019;&#x76F4;&#x63A5;&#x9009;&#x62E9;&#x90A3;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x800C;&#x4E0D;&#x7528;&#x624B;&#x52A8;&#x4E0A;&#x4F20;&#x3002;</p><h3 id="--4">&#x51C6;&#x5907;&#x6807;&#x6CE8;</h3><p>&#x767B;&#x5F55; CVAT &#x4E4B;&#x540E;&#xFF0C;&#x4F60;&#x4F1A;&#x53D1;&#x73B0;&#x5B83;&#x6709; Projects &#x548C; Tasks &#x4E24;&#x4E2A;&#x6807;&#x7B7E;&#x9875;&#x3002; &#x6211;&#x4EEC;&#x5148;&#x521B;&#x5EFA;&#x4E00;&#x4E2A; Project&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x7136;&#x540E;&#x53BB;&#x521B;&#x5EFA; Task &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x4EEC;&#x5C31;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4E4B;&#x524D;&#x90A3;&#x4E2A; Project&#x3002;</p><p>Subset &#x8FD9;&#x4E2A;&#x9879;&#x53EF;&#x4EE5;&#x9009;&#x62E9; <code>Train</code> &#x3001; <code>Test</code>&#x548C; <code>Validation</code>&#x3002;&#x8BF4;&#x660E;&#x8FD9;&#x4E2A;task&#x751F;&#x6210;&#x7684;&#x8BAD;&#x7EC3;&#x96C6;&#x662F;&#x505A;&#x4EC0;&#x4E48;&#x7528;&#x7684;&#x3002;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.lss233.com/content/images/2021/08/image-1.png" class="kg-image" alt loading="lazy" width="989" height="979" srcset="https://blog.lss233.com/content/images/size/w600/2021/08/image-1.png 600w, https://blog.lss233.com/content/images/2021/08/image-1.png 989w" sizes="(min-width: 720px) 720px"><figcaption>&#x521B;&#x5EFA;&#x4EFB;&#x52A1;</figcaption></figure><p>&#x6253;&#x5F00; <code>Advanced configuration</code>&#xFF0C;&#x4E0B;&#x9762;&#x4E5F;&#x6709;&#x4E00;&#x4E9B;&#x4E1C;&#x897F;&#x9700;&#x8981;&#x4F60;&#x6CE8;&#x610F;&#x3002;</p><ul><li><code>Copy data into CVAT</code> &#x5982;&#x679C;&#x4F60;&#x7684;&#x7D20;&#x6750;&#x6587;&#x4EF6;&#x5F85;&#x4F1A;&#x8981;&#x5220;&#x6389;&#x4E86;&#xFF0C;&#x6216;&#x8005;&#x5B83;&#x662F;&#x7F51;&#x7EDC;&#x6302;&#x8F7D;&#x7684;&#xFF08;&#x6BD4;&#x5982;&#x8BF4; rclone&#xFF09;&#xFF0C;&#x90A3;&#x4E48;&#x8BB0;&#x5F97;&#x52FE;&#x8FD9;&#x4E2A;&#x9009;&#x9879;&#x3002;</li><li><code>Image quality</code> &#x6CA1;&#x5FC5;&#x8981;&#x592A;&#x9AD8;&#x3002; CVAT &#x4F1A;&#x628A;&#x4F60;&#x7684;&#x89C6;&#x9891;&#x526A;&#x6210;&#x4E00;&#x5F20;&#x5F20;&#x56FE;&#x7247;&#x518D;&#x8FDB;&#x884C;&#x6807;&#x6CE8;&#x3002;&#x5982;&#x679C;&#x4F60;&#x7684;&#x56FE;&#x7247;&#x8D28;&#x91CF;&#x592A;&#x9AD8;&#xFF0C;&#x5230;&#x65F6;&#x5019;&#x4F1A;&#x5BFC;&#x51FA;&#x597D;&#x51E0; GB &#x7684;&#x6570;&#x636E;&#x96C6;&#x6587;&#x4EF6;&#x3002;&#x8FD9;&#x4F1A;&#x5BFC;&#x81F4;&#x2026;&#x2026; &#x4E0D;&#x65B9;&#x4FBF;&#x8F6C;&#x79FB;&#x3002;</li><li><code>Segment size</code> &#x4F1A;&#x628A;&#x4F60;&#x7684;&#x89C6;&#x9891;&#x6309;&#x90A3;&#x4E2A;&#x6570;&#x5B57;&#x5206;&#x6210;&#x4E0D;&#x540C;&#x7684; jobs&#x3002;&#x7136;&#x540E;&#x5927;&#x5BB6;&#x5C31;&#x53EF;&#x4EE5;&#x627E;&#x8FD8;&#x6CA1;&#x5B8C;&#x6210;&#x7684; jobs &#x53BB;&#x6807;&#x6CE8;&#x4E86;&#x3002;</li></ul><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-3.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x6700;&#x540E;&#x5B83;&#x5927;&#x6982;&#x662F;&#x8FD9;&#x6837;&#x7684;&#xFF1A;</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://blog.lss233.com/content/images/2021/08/image-2.png" class="kg-image" alt loading="lazy" width="909" height="1023" srcset="https://blog.lss233.com/content/images/size/w600/2021/08/image-2.png 600w, https://blog.lss233.com/content/images/2021/08/image-2.png 909w" sizes="(min-width: 720px) 720px"><figcaption>&#x4F60;&#x53EF;&#x4EE5;&#x8FD9;&#x4E48;&#x586B;</figcaption></figure><p>&#x4E4B;&#x540E;&#x70B9;&#x51FB; Submit &#x5C31;&#x53EF;&#x4EE5;&#x5566;&#xFF01;</p><h3 id="--5">&#x6807;&#x6CE8;</h3><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-4.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x5728;&#x8FD9;&#x4E00;&#x6B65;&#xFF0C;&#x4F60;&#x6700;&#x597D;&#x4E3B;&#x8981;&#x4E00;&#x4E0B;&#x8FD9;&#x4E9B;&#x4E8B;&#xFF1A;</p><ol><li>&#x5FEB;&#x6377;&#x952E;&#x5F88;&#x597D;&#x7528;&#x3002;CVAT &#x5F88;&#x8D34;&#x5FC3;&#x5730;&#x628A;&#x5FEB;&#x6377;&#x952E;&#x5199;&#x5728;&#x6BCF;&#x4E2A;&#x6309;&#x952E;&#x7684;&#x63D0;&#x793A;&#x4E0A;&#x4E86;&#x3002;&#x4F7F;&#x7528;&#x5FEB;&#x6377;&#x952E;&#x53EF;&#x4EE5;&#x52A0;&#x5FEB;&#x6807;&#x6CE8;&#x6D41;&#x7A0B;&#x3002;</li><li>&#x5BF9;&#x79FB;&#x52A8;&#x7684;&#x76EE;&#x6807;&#x4F7F;&#x7528; Track&#x3002; Track &#x548C; Shape &#x7684;&#x533A;&#x522B;&#x662F;&#xFF0C; Shape &#x7684;&#x6846;&#x5728;&#x4E0B;&#x4E00;&#x5E27;&#x4F1A;&#x6D88;&#x5931;&#xFF0C;&#x800C; Track &#x4E0D;&#x4F1A;&#x3002;&#x5982;&#x679C;&#x76EE;&#x6807;&#x5728;&#x56FE;&#x7247;&#x91CC;&#x662F;&#x8FDE;&#x7EED;&#x79FB;&#x52A8;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x53EF;&#x4EE5;<strong>&#x4E0D;&#x7528;</strong>&#x6BCF;&#x4E00;&#x5E27;&#x90FD;&#x8C03;&#x6574;&#x6846;&#x7684;&#x4F4D;&#x7F6E;&#xFF01;&#xFF01;&#x7EE7;&#x7EED;&#x5F80;&#x4E0B;&#x5207;&#x51E0;&#x5E27;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x8C03;&#x6574;&#x4F4D;&#x7F6E;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5F80;&#x56DE;&#x5207;&#xFF0C;&#x4F60;&#x4F1A;&#x53D1;&#x73B0;&#x4F60;&#x6CA1;&#x8C03;&#x6574;&#x7684;&#x5E27;&#x4E5F;&#x4F1A;&#x81EA;&#x52A8;&#x8DDF;&#x7740;&#x6539;&#x53D8;&#x3002;</li><li>&#x5982;&#x679C; Track &#x7684;&#x76EE;&#x6807;&#x6D88;&#x5931;&#x4E86;&#xFF0C;&#x70B9;&#x51FB; <code>Switch Outside Property</code>&#x3002;</li><li>&#x8BB0;&#x5F97;&#x968F;&#x624B;&#x4FDD;&#x5B58;&#x4E00;&#x4E0B;&#x3002;</li></ol><p>&#x5F53;&#x524D;&#x7684; job &#x5B8C;&#x6210;&#x4E4B;&#x540E;&#xFF0C;&#x70B9;&#x83DC;&#x5355;&#x7684; <code>Finish the job</code> &#x6765;&#x6807;&#x8BB0;&#x5B8C;&#x6210;&#x8FD9;&#x4E2A;job&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/08/image-5.png" class="kg-image" alt loading="lazy" width="284" height="483"></figure><p>&#x5982;&#x679C;&#x4F60;&#x627E;&#x4E86;&#x5DE5;&#x5177;&#x4EBA;&#x6765;&#x5E2E;&#x4F60;&#x6807;&#x6CE8;&#xFF0C;&#x800C;&#x4F60;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x4ED6;&#x7684;&#x8D28;&#x91CF;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x8BA9;&#x5B83;&#x9009;&#x62E9; <code>Request a review</code>&#xFF0C;&#x8FD9;&#x6837;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x518D;&#x8FC7;&#x4E00;&#x904D;&#xFF0C;&#x4EE5;&#x9632;&#x4E07;&#x4E00;&#x3002;&#x6570;&#x636E;&#x96C6;&#x91CC;&#x63BA;&#x5C4E;&#x662F;&#x4E00;&#x4EF6;&#x975E;&#x5E38;&#x75DB;&#x82E6;&#x7684;&#x4E8B;&#x60C5;&#x3002;</p><h3 id="--6">&#x5BFC;&#x51FA;</h3><p>&#x6807;&#x6CE8;&#x9875;&#x9762;&#x548C; Task &#x9875;&#x9762;&#x90FD;&#x53EF;&#x4EE5; Export as a dataset&#x3002;&#x5982;&#x679C;&#x4F60;&#x8981;&#x5BFC;&#x51FA;&#x6574;&#x4E2A; Task &#x7684;&#x6570;&#x636E;&#x96C6;&#xFF0C;&#x90A3;&#x5C31;&#x5728; Task &#x9875;&#x9762;&#x7684; Action &#x4E0B;&#x9009; Export as a dataset&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-6.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x4F60;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5BFC;&#x51FA;&#x7684;&#x683C;&#x5F0F;&#x3002;&#x5BF9;&#x4E8E; YOLOv5 &#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x4EEC;&#x9009; YOLO &#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;</p><h3 id="-roboflow">&#x9644; - &#x6570;&#x636E;&#x96C6;&#x683C;&#x5F0F;&#x8F6C;&#x6362;&#xFF1A;Roboflow</h3><p>&#x5982;&#x679C;&#x4F60;&#x624B;&#x4E0A;&#x6709;&#x4E00;&#x4EFD;&#x5176;&#x4ED6;&#x683C;&#x5F0F;&#x7684;&#x6570;&#x636E;&#x96C6;&#xFF0C;&#x8BA9;&#x4F60;&#x4E0D;&#x65B9;&#x4FBF;&#x4F7F;&#x7528;&#xFF0C;&#x90A3;&#x8981;&#x600E;&#x4E48;&#x5FEB;&#x901F;&#x8F6C;&#x6362;&#x6210;&#x4F60;&#x80FD;&#x7528;&#x7684;&#x683C;&#x5F0F;&#x5462;&#xFF1F;</p><p>&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; Roboflow &#x8FD9;&#x4E2A;&#x5E73;&#x53F0;&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-7.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x628A;&#x6570;&#x636E;&#x96C6;&#x91CC;&#x7684;&#x6807;&#x7B7E;&#x6587;&#x4EF6;&#x548C;&#x56FE;&#x7247;&#x6587;&#x4EF6;&#x653E;&#x8FDB;&#x53BB;&#xFF0C;&#x5B83;&#x5C31;&#x53EF;&#x4EE5;&#x81EA;&#x52A8;&#x8BFB;&#x53D6;&#x3002;&#x5728; Export &#x7684;&#x65F6;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4F60;&#x60F3;&#x8981;&#x7684;&#x683C;&#x5F0F;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/08/image-8.png" class="kg-image" alt loading="lazy" width="641" height="382" srcset="https://blog.lss233.com/content/images/size/w600/2021/08/image-8.png 600w, https://blog.lss233.com/content/images/2021/08/image-8.png 641w"></figure><p><code>show download code</code> &#x53EF;&#x4EE5;&#x751F;&#x6210;&#x8BA9; Jupyter Notebook &#x76F4;&#x63A5;&#x6267;&#x884C;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x8FD9;&#x5BF9;&#x4E8E;&#x4E0B;&#x4E00;&#x6B65;&#x5982;&#x679C;&#x4F7F;&#x7528; Google Colab &#x8FDB;&#x884C;&#x8BAD;&#x7EC3;&#x6765;&#x8BF4;&#x975E;&#x5E38;&#x65B9;&#x4FBF;&#x3002;</p><hr><h1 id="0x03-">0x03 &#x6A21;&#x578B;&#x8BAD;&#x7EC3;</h1><p>&#x5982;&#x679C;&#x8BF4;&#x6570;&#x636E;&#x6807;&#x6CE8;&#x8BA9;&#x4EBA;&#x75DB;&#x82E6;&#xFF0C;&#x90A3;&#x4E48;&#x6A21;&#x578B;&#x8BAD;&#x7EC3;&#x5C31;&#x662F;&#x8BA9;&#x673A;&#x5668;&#x75DB;&#x82E6;&#x3002;</p><p>&#x6A21;&#x578B;&#x8BAD;&#x7EC3;&#x662F;&#x4E00;&#x4E2A;&#x8017;&#x65F6;&#x5F88;&#x957F;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;&#x4F60;&#x6709;&#x53EF;&#x80FD;&#x4F1A;&#x9047;&#x5230;&#x7A0B;&#x5E8F;&#x7206;&#x70B8;&#x3001;&#x663E;&#x5B58;&#x7206;&#x70B8;&#x7B49;&#x5404;&#x79CD;&#x767D;&#x7ED9;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x5B83;&#x5BF9;&#x673A;&#x5668;&#x7684;&#x914D;&#x7F6E;&#x4E5F;&#x6709;&#x8981;&#x6C42;&#x3002;&#x4E00;&#x822C;&#x6765;&#x8BF4; GPU &#x8BAD;&#x7EC3;&#x7684;&#x901F;&#x5EA6;&#x4F1A;&#x6BD4; CPU &#x8BAD;&#x7EC3;&#x7684;&#x901F;&#x5EA6;&#x8981;&#x5FEB;&#x4E00;&#x4E9B;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x7684;&#x7535;&#x8111;&#x914D;&#x7F6E;&#x4E0D;&#x591F;&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x6709;&#x4E24;&#x4E2A;&#x9009;&#x62E9;&#xFF1A;</p><h3 id="-google-colab">&#x767D;&#x5AD6; Google Colab</h3><p>Google Colaboratory &#x662F; Google &#x63D0;&#x4F9B;&#x7684;&#x4E00;&#x4E2A;&#x5728;&#x7EBF;&#x7F16;&#x8F91;&#x6267;&#x884C;&#x73AF;&#x5883;&#x3002;&#x5B83;&#x662F;&#x4E00;&#x4E2A;&#x8FD0;&#x884C;&#x7740; <a href="https://jupyter.org/">Jupyter Notebook</a> &#x7684;&#x865A;&#x62DF;&#x673A;&#x3002;&#x5B83;&#x53EF;&#x4EE5;&#x8BA9;&#x4F60;&#x5728;&#x7F51;&#x9875;&#x91CC;&#x5199;&#x4EE3;&#x7801;&#xFF0C;&#x7136;&#x540E;&#x70B9;&#x51FB;&#x5C31;&#x53EF;&#x4EE5;&#x8FD0;&#x884C;&#x3002;&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#x548C;&#x4EE3;&#x7801;&#x3001;&#x8BF4;&#x660E;&#x7B49;&#x90FD;&#x4F1A;&#x4EE5; <code>.ipynb</code> &#x683C;&#x5F0F;&#x7684;&#x6587;&#x4EF6;&#x4FDD;&#x5B58;&#xFF0C;&#x53EB;&#x7B14;&#x8BB0;&#x672C;&#x3002;&#x522B;&#x4EBA;&#x6253;&#x5F00;&#x7684;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x770B;&#x89C1;&#x4F60;&#x7684;&#x8FD0;&#x884C;&#x7ED3;&#x679C;&#x3002;</p><p>&#x6700;&#x91CD;&#x8981;&#x7684;&#x662F;&#xFF0C; Colab &#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x514D;&#x8D39;&#x7684; GPU &#x670D;&#x52A1;&#x5668;&#x8BA9;&#x4F60;&#x5B9E;&#x9A8C;&#x4F60;&#x7684;&#x795E;&#x7ECF;&#x7F51;&#x7EDC;&#x9879;&#x76EE;&#x3002;</p><p>&#x9996;&#x5148;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x6709;&#x4E00;&#x4E2A; Google &#x8D26;&#x53F7;&#xFF0C;&#x7136;&#x540E;&#x6253;&#x5F00;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x94FE;&#x63A5;&#xFF1A;<a href="https://colab.research.google.com/drive/11LiUAPeFOlMwtp99aD8D9bOeVViuHDWu?usp=sharing">https://colab.research.google.com/drive/11LiUAPeFOlMwtp99aD8D9bOeVViuHDWu</a></p><p>&#x8FD9;&#x662F;&#x672C;&#x4EBA;&#x4E4B;&#x524D;&#x6D4B;&#x8BD5;&#x7528;&#x7684;&#x4E00;&#x4EFD;&#x7B14;&#x8BB0;&#x672C;&#xFF0C;&#x5B83;&#x662F;&#x4ECE; YOLOv5 &#x5B98;&#x65B9;&#x63D0;&#x4F9B;&#x7684;&#x90A3;&#x4EFD;&#x7B14;&#x8BB0;&#x672C;&#x7B80;&#x5316;&#x800C;&#x6765;&#x7684;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x628A;&#x4EE3;&#x7801;&#x4E2D;&#x8BFB;&#x53D6;&#x8BAD;&#x7EC3;&#x96C6;&#x7684;&#x90E8;&#x5206;&#x6362;&#x6210;&#x81EA;&#x5DF1;&#x7684;&#x94FE;&#x63A5;&#xFF0C;&#x5176;&#x4ED6;&#x5730;&#x65B9;&#x5E94;&#x8BE5;&#x4E0D;&#x7528;&#x4FEE;&#x6539;&#x592A;&#x591A;&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-9.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>Colab &#x53EF;&#x4EE5;&#x548C;&#x4F60;&#x7684; Google Drive &#x4F20;&#x8F93;&#x6587;&#x4EF6;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x70B9;&#x51FB;&#x5DE6;&#x8FB9;&#x83DC;&#x5355;&#x7684; <code>&#x88C5;&#x8F7D; Google &#x4E91;&#x7AEF;&#x786C;&#x76D8;</code>&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/08/image-12.png" class="kg-image" alt loading="lazy" width="434" height="288"></figure><p>&#x6839;&#x636E;&#x5B83;&#x7684;&#x63D0;&#x793A;&#x6765;&#x3002;</p><h3 id="-gpu-">&#x4E34;&#x65F6;&#x79DF;&#x7528; GPU &#x670D;&#x52A1;&#x5668;</h3><p>&#x77E9;&#x6C60;&#x4E91;&#x662F;&#x4E00;&#x4E2A;&#x53EF;&#x4EE5;&#x4F4E;&#x4EF7;&#x79DF;&#x5230; GPU &#x670D;&#x52A1;&#x5668;&#x7684;&#x5730;&#x65B9;&#x3002;&#x5B83;&#x63D0;&#x4F9B; SSH &#x548C; HTTP &#x4E24;&#x79CD;&#x8BBF;&#x95EE;&#x65B9;&#x5F0F;&#x3002;</p><p>&#x901A;&#x8FC7; SSH &#x8BBF;&#x95EE;&#xFF0C;&#x64CD;&#x4F5C;&#x5C31;&#x548C;&#x65E5;&#x5E38;&#x4F7F;&#x7528; Linux &#x7CFB;&#x7EDF;&#x5DEE;&#x4E0D;&#x591A;&#x3002;</p><p>&#x901A;&#x8FC7; HTTP &#x8BBF;&#x95EE;&#xFF0C;&#x5B83;&#x4F1A;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A; Jupyter Notebook&#xFF0C;&#x64CD;&#x4F5C;&#x5C31;&#x548C;&#x4E0A;&#x9762;&#x4F7F;&#x7528; Colab &#x5DEE;&#x4E0D;&#x591A;&#x3002;</p><p>&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x8FD9;&#x91CC;&#x5B66;&#x4E60;&#x5982;&#x4F55;&#x4F7F;&#x7528;&#x4ED6;&#x4EEC;&#x7684;&#x4EA7;&#x54C1;&#xFF1A;<a href="https://www.matpool.com/supports/doc-img-recognition-case/">https://www.matpool.com/supports/doc-img-recognition-case/</a></p><p>&#x5728;&#x8FD9;&#x91CC;&#x9009;&#x62E9;&#x670D;&#x52A1;&#x5668;&#xFF1A;<a href="https://www.matpool.com/host-market/gpu">https://www.matpool.com/host-market/gpu</a></p><p>&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x6211;&#x7684;&#x9080;&#x8BF7;&#x7801; <code>Y1LZPj7h6iO0AJB</code> &#xFF0C;&#x53EF;&#x4EE5;&#x5956;&#x52B1;&#x4EE3;&#x91D1;&#x5238;&#x3002;&#x3001;</p><p><strong>&#x4F7F;&#x7528;&#x653B;&#x7565;</strong></p><ol><li>&#x5982;&#x679C;&#x4F60;&#x662F;&#x5B66;&#x751F;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;<a href="https://www.matpool.com/user/student/certification">&#x8FD9;&#x91CC;</a>&#x7533;&#x8BF7;&#x5B66;&#x751F;&#x8BA4;&#x8BC1;&#x3002;&#x8BA4;&#x8BC1;&#x9700;&#x8981;1-2&#x4E2A;&#x5DE5;&#x4F5C;&#x65E5;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x901A;&#x8FC7;&#x4E4B;&#x540E;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#x4E00;&#x4E9B;&#x4F18;&#x60E0;&#x3002;</li><li>&#x9996;&#x6B21;&#x6CE8;&#x518C;&#x6210;&#x529F;&#x540E;&#x53BB;&#x5FAE;&#x4FE1;&#x516C;&#x4F17;&#x53F7;&#x7ED1;&#x5B9A;&#x4F60;&#x7684;&#x8D26;&#x53F7;&#xFF0C;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;5&#x5143;&#x4EE3;&#x91D1;&#x5238;&#x3002;</li><li>&#x5728;&#x9009;&#x62E9;&#x914D;&#x7F6E;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x7CFB;&#x7EDF;&#x955C;&#x50CF;&#x4E2D;&#x9009;&#x62E9;&#x4F60;&#x4F1A;&#x7528;&#x5230;&#x7684;&#x5E93;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x8282;&#x7701;&#x65F6;&#x95F4;&#x3002;</li><li>&#x5982;&#x679C;&#x4F60;&#x9009;&#x4E86;&#x7CFB;&#x7EDF;&#x955C;&#x50CF;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x52FE;&#x9009; Tmux&#xFF0C;&#x8FD9;&#x6837;&#x901A;&#x8FC7; ssh &#x767B;&#x5F55;&#x4E4B;&#x540E;&#x5C06;&#x4F1A;&#x81EA;&#x52A8;&#x8FDE;&#x63A5;&#x5230;&#x4E00;&#x4E2A; Tmux &#x4F1A;&#x8BDD;&#x4E2D;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x8BA9;&#x4F60;&#x7684;&#x4EFB;&#x52A1;&#x5728; ssh &#x65AD;&#x5F00;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x7EE7;&#x7EED;&#x6267;&#x884C;&#x3002;</li></ol><p>&#x4E0B;&#x5355;&#x4E4B;&#x540E;&#xFF0C;&#x7B49;&#x5F85;&#x7CFB;&#x7EDF;&#x542F;&#x52A8;&#x5B8C;&#x6210;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x8FD9;&#x6837;&#x7684;&#x753B;&#x9762;&#xFF1A;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-18.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x6B64;&#x65F6;&#x5C31;&#x53EF;&#x4EE5;&#x7528; ssh &#x6216;&#x8005; VSCode &#x8FDE;&#x63A5;&#x4E86;&#x3002;</p><p>&#x9996;&#x6B21;&#x767B;&#x5F55;&#x65F6;&#x522B;&#x5FD8;&#x4E86;&#x4F7F;&#x7528;&#x4ED6;&#x4EEC;&#x7684;&#x4E13;&#x6709;&#x5DE5;&#x5177;&#x6765;&#x66F4;&#x6362; apt &#x548C; pip &#x7684;&#x955C;&#x50CF;&#x6E90;&#xFF1A;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-20.png" alt loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x65E0;&#x8BBA;&#x662F;&#x4F7F;&#x7528; Colab &#x8FD8;&#x662F;&#x79DF;&#x7528; GPU &#x670D;&#x52A1;&#x5668;&#xFF0C;&#x4F60;&#x90FD;&#x53EF;&#x4EE5;&#x6267;&#x884C; <code>nvidia-smi</code> &#x6765;&#x67E5;&#x770B;&#x5F53;&#x524D;&#x670D;&#x52A1;&#x5668;&#x7684; GPU &#x72B6;&#x6001;&#x3002;</p><p></p><h3 id="--7">&#x8BAD;&#x7EC3;</h3><p>&#x6709;&#x5173;&#x6A21;&#x578B;&#x8BAD;&#x7EC3;&#x7684;&#x6B65;&#x9AA4;&#x6211;&#x5DF2;&#x7ECF;&#x5199;&#x5728;&#x4E86; Colab &#x7684;&#x90A3;&#x4E2A;&#x94FE;&#x63A5;&#x91CC;&#xFF0C;</p><p>&#x4E0B;&#x8F7D; YOLOv5&#x7684;&#x6E90;&#x7801;&#xFF0C;&#x8BFB;&#x53D6;&#x8BAD;&#x7EC3;&#x96C6;&#xFF0C;&#x8BAD;&#x7EC3;&#x3001;&#x9A8C;&#x8BC1;&#x3002;</p><p>&#x4F7F;&#x7528; Roboflow &#x5BFC;&#x51FA;&#x7684;&#x8BAD;&#x7EC3;&#x96C6;&#x538B;&#x7F29;&#x5305;&#x5305;&#x542B;&#x4E00;&#x4E2A; data.yaml &#x6587;&#x4EF6;&#xFF0C;&#x5B83;&#x7684;&#x5185;&#x5BB9;&#x5F88;&#x7B80;&#x5355;&#xFF1A;</p><pre><code class="language-yaml">train: ../train/images # &#x7528;&#x6765;&#x8BAD;&#x7EC3;&#x7684;&#x56FE;&#x7247;
val: ../valid/images   # &#x7528;&#x6765;&#x9A8C;&#x8BC1;&#x7684;&#x56FE;&#x7247; validation&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x7684;&#x8BDD;&#xFF0C;&#x5C31;&#x548C; train &#x4E00;&#x6837;&#x5427;

nc: 1                  # &#x6807;&#x7B7E;&#x7684;&#x4E2A;&#x6570;
names: [&apos;red_5&apos;]       # &#x6807;&#x7B7E;&#x540D;&#x5B57;</code></pre><p>&#x5982;&#x679C;&#x4F60;&#x4F7F;&#x7528; CVAT &#x5BFC;&#x51FA;&#x6570;&#x636E;&#x96C6;&#xFF0C;&#x53EF;&#x80FD;&#x8981;&#x81EA;&#x5DF1;&#x6765;&#x5199;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x4F60;&#x4E5F;&#x53EF;&#x4EE5;&#x5728; <code>yolov5/data</code> &#x4E0B;&#x9762;&#x627E;&#x5230;&#x4ED6;&#x4EEC;&#x63D0;&#x524D;&#x5199;&#x597D;&#x7684;&#x4E00;&#x4E9B;&#x6587;&#x4EF6;&#x3002;</p><p>&#x7559;&#x610F;&#x4E00;&#x4E0B; &#x8BAD;&#x7EC3;&#x4E4B;&#x540E;&#x7684;&#x8F93;&#x51FA;&#xFF1A;</p><pre><code>Optimizer stripped from runs/train/exp/weights/last.pt, 42.4MB
Optimizer stripped from runs/train/exp/weights/best.pt, 42.4MB</code></pre><p>&#x8FD9;&#x662F;&#x751F;&#x6210;&#x7684;&#x6743;&#x91CD;&#x6587;&#x4EF6;&#xFF0C;&#x4EBA;&#x7C7B;&#x77E5;&#x8BC6;&#x7684;&#x7ED3;&#x6676;&#x3002;<code>best.pt</code> &#x5C31;&#x662F;&#x8BAD;&#x7EC3;&#x6700;&#x597D;&#x7684;&#x4E00;&#x6B21;&#x6743;&#x91CD;&#xFF0C; <code>last.pt</code> &#x662F;&#x6700;&#x540E;&#x4E00;&#x6B21;&#x8BAD;&#x7EC3;&#x7684;&#x6743;&#x91CD;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x8981;&#x7528;&#x7684;&#x5C31;&#x662F;&#x8FD9;&#x4E2A;&#x4E1C;&#x897F;&#x3002;</p><p>&#x4F60;&#x8FD8;&#x5E94;&#x8BE5;&#x6CE8;&#x610F;&#x7684;&#x662F; <code>runs/train/exp/result.png</code> &#x91CC;&#x7684;&#x56FE;&#x6807;&#x3002; <code>precision</code> &#x548C; <code>recall</code> &#x662F;&#x6A21;&#x578B;&#x8BAD;&#x7EC3;&#x7ED3;&#x679C;&#x7684;&#x91CD;&#x8981;&#x6307;&#x6807;&#x3002;&#x5B83;&#x8D8A;&#x63A5;&#x8FD1; 1&#xFF0C; &#x4F60;&#x7684;&#x6A21;&#x578B;&#x8D8A;&#x51C6;&#x786E;&#x3002; </p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-16.png" alt="epochs &#x592A;&#x5C0F;&#xFF0C;&#x6CA1;&#x6709;&#x7ED3;&#x679C;" loading="lazy"></p>
<!--kg-card-end: markdown--><p>&#x5982;&#x679C;&#x4F60;&#x7684;&#x6A21;&#x578B;&#x770B;&#x8D77;&#x6765;&#x8BAD;&#x7EC3;&#x5F97;&#x5F88;&#x7CDF;&#x7CD5;&#xFF0C;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x6362;&#x4E00;&#x4E2A;&#x9884;&#x8BAD;&#x7EC3;&#x6A21;&#x578B;&#x3001;&#x589E;&#x52A0; epochs &#x7B49;&#x3002;</p><!--kg-card-begin: markdown--><p><img src="https://blog.lss233.com/content/images/2021/08/image-17.png" alt="epochs &#x589E;&#x5927;" loading="lazy"></p>
<!--kg-card-end: markdown--><hr><h1 id="0x04-">0x04 &#x6A21;&#x578B;&#x8F6C;&#x5316;</h1><p>&#x8BAD;&#x7EC3;&#x5F97;&#x5230;&#x7684;&#x6A21;&#x578B;&#x683C;&#x5F0F;&#x4E3A; <code>. pt</code> &#x683C;&#x5F0F;&#xFF0C;&#x4E3A;&#x4E86;&#x5B9E;&#x73B0; OpenVINO &#x90E8;&#x7F72;&#xFF0C;&#x9700;&#x8981;&#x9996;&#x5148;&#x8F6C;&#x6362;&#x4E3A; <code>. onnx</code> &#x7684;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#xFF0C;&#x4E4B;&#x540E;&#x518D;&#x8F6C;&#x5316;&#x4E3A; OpenVINO &#x9700;&#x8981;&#x7684; <code>. xml</code> &#x548C; <code>. bin</code> &#x7684;&#x6587;&#x4EF6;&#x683C;&#x5F0F;&#x3002;</p><h3 id="-pt-onnx">.pt &#x8F6C; .onnx</h3><p>&#x8FD9;&#x90E8;&#x5206;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x4F7F;&#x7528; Yolov5 &#x81EA;&#x5E26;&#x7684;&#x8F6C;&#x6362;&#x811A;&#x672C;&#xFF0C;&#x7531;&#x4E8E; OpenVINO2021.1 &#x8FD8;&#x4E3A;&#x672A;&#x652F;&#x6301; <code>opset=12</code>, &#x9700;&#x8981;&#x6307;&#x5B9A; <code>opset</code> &#x4E3A; <code>10</code>.</p><pre><code>python export.py --weights runs/train/exp/weights/best.pt --img 640 --batch 16 --opset 10  # export at 640x640 with batch size 16</code></pre><p>&#x7136;&#x540E;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x5728; <code>runs/train/exp/weights/best.onnx</code> &#x8FD9;&#x91CC;&#x627E;&#x5230;&#x751F;&#x6210;&#x7684;&#x6587;&#x4EF6;&#x3002;</p><h3 id="-onnx-openvino-">.onnx &#x8F6C; OpenVINO &#x683C;&#x5F0F;</h3><p>&#x9996;&#x5148;&#xFF0C; &#x4F60;&#x9700;&#x8981;&#x5B89;&#x88C5; OpenVINO&#xFF0C;&#x5B89;&#x88C5;&#x7684;&#x65B9;&#x5F0F;&#x53EF;&#x4EE5;&#x53C2;&#x8003;&#x8FD9;&#x91CC;&#xFF1A; <a href="https://docs.openvinotoolkit.org/2021.4/openvino_docs_install_guides_installing_openvino_images.html">https://docs.openvinotoolkit.org/2021.4/openvino_docs_install_guides_installing_openvino_images.html</a></p><p>&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x5B89;&#x88C5;&#x6A21;&#x578B;&#x8F6C;&#x5316;&#x5DE5;&#x5177;&#x7684;&#x4F9D;&#x8D56;&#x3002;</p><pre><code>sudo bash /opt/intel/openvino/deployment_tools/model_optimizer/install_prerequisites/install_prerequisites_onnx.sh</code></pre><p>&#x4E4B;&#x540E;&#xFF0C;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x7528;&#x4E0B;&#x9762;&#x7684;&#x547D;&#x4EE4;&#x6765;&#x8F6C;&#x6362;&#x4E0A;&#x4E00;&#x6B65;&#x751F;&#x6210;&#x597D;&#x7684; <code>.onnx</code> &#x6A21;&#x578B;&#x4E3A; OpenVINO &#x98DF;&#x7528;&#x7684; <code>.xml</code> &#x548C; &#xA0;<code>.bin</code> &#x683C;&#x5F0F;&#x6587;&#x4EF6;&#x3002;</p><pre><code class="language-console">python /opt/intel/openvino/deployment_tools/model_optimizer/mo_onnx.py --input_model .onnx&#x6587;&#x4EF6;&#x8DEF;&#x5F84;  --output_dir &#x8F6C;&#x6362;&#x540E;&#x7684;&#x8F93;&#x51FA;&#x8DEF;&#x5F84;</code></pre><hr><h1 id="0x05-">0x05 &#x6A21;&#x578B;&#x90E8;&#x7F72;</h1><p>&#x8BF7;&#x53C2;&#x8003;&#xFF1A;<a href="http://www.giantpandacv.com/%E9%83%A8%E7%BD%B2%E4%BC%98%E5%8C%96/AI%20%E9%83%A8%E7%BD%B2%E5%8F%8A%E5%85%B6%E5%AE%83%E4%BC%98%E5%8C%96%E7%AE%97%E6%B3%95/OpenVINO/c%2B%2B%E5%AE%9E%E7%8E%B0yolov5%E7%9A%84OpenVINO%E9%83%A8%E7%BD%B2/#openvino">http://www.giantpandacv.com/&#x90E8;&#x7F72;&#x4F18;&#x5316;/AI &#x90E8;&#x7F72;&#x53CA;&#x5176;&#x5B83;&#x4F18;&#x5316;&#x7B97;&#x6CD5;/OpenVINO/c%2B%2B&#x5B9E;&#x73B0;yolov5&#x7684;OpenVINO&#x90E8;&#x7F72;/#openvino</a></p>]]></content:encoded></item><item><title><![CDATA[使用 Tinc 组建虚拟内网，并接入 DN42]]></title><description><![CDATA[<p>DN<a href="https://dn42.net/howto/Getting-started">42</a> &#x662F;&#x4E00;&#x4E2A;&#x5927;&#x578B;&#x7684;&#x79C1;&#x6709;&#x4E92;&#x8054;&#x7F51;&#x7EDC;&#xFF0C;&#x4F17;&#x591A;&#x8282;&#x70B9;&#x901A;&#x8FC7; VPN &#x7684;&#x65B9;&#x5F0F;&#x4E92;&#x76F8;&#x8FDE;&#x63A5;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x901A;&#x8FC7; BGP &#x7B49;&#x534F;&#x8BAE;&#x76F8;&#x4E92;&#x4EA4;&#x6362;&#x81EA;&#x5DF1;&#x7684;&#x8DEF;&#x7531;&#xFF0C;&#x5E76;</p>]]></description><link>https://blog.lss233.com/shi-yong-tinc-zu-jian-xu-ni-nei-wang-bing-quan-bu-jie-ru-dn42/</link><guid isPermaLink="false">6028cb8481c0bcbcde7de9f6</guid><category><![CDATA[DN42]]></category><category><![CDATA[计算机网络]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Sun, 14 Feb 2021 12:14:36 GMT</pubDate><content:encoded><![CDATA[<p>DN<a href="https://dn42.net/howto/Getting-started">42</a> &#x662F;&#x4E00;&#x4E2A;&#x5927;&#x578B;&#x7684;&#x79C1;&#x6709;&#x4E92;&#x8054;&#x7F51;&#x7EDC;&#xFF0C;&#x4F17;&#x591A;&#x8282;&#x70B9;&#x901A;&#x8FC7; VPN &#x7684;&#x65B9;&#x5F0F;&#x4E92;&#x76F8;&#x8FDE;&#x63A5;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x901A;&#x8FC7; BGP &#x7B49;&#x534F;&#x8BAE;&#x76F8;&#x4E92;&#x4EA4;&#x6362;&#x81EA;&#x5DF1;&#x7684;&#x8DEF;&#x7531;&#xFF0C;&#x5E76;&#x63D0;&#x4F9B;&#x50CF; DNS&#xFF0C; IRC &#x8FD9;&#x6837;&#x7684;&#x57FA;&#x7840;&#x8BBE;&#x65BD;&#x3002;</p><p>&#x5F53;&#x6211;&#x5728;&#x81EA;&#x5DF1;&#x7684; vps &#x4E0A;&#x548C;&#x5176;&#x4ED6;&#x4EBA;&#x6210;&#x529F; peer &#x540E;&#xFF0C;&#x6211;&#x5C31;&#x5728;&#x60F3;&#x5E94;&#x8BE5;&#x5982;&#x4F55;&#x8BA9;&#x81EA;&#x5DF1;&#x7684;&#x5176;&#x4ED6;&#x8BA1;&#x7B97;&#x673A;&#x53EF;&#x4EE5;&#x5728;&#x4E0D;&#x4E0E;&#x5176;&#x4ED6;&#x4EBA; peer &#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x53EF;&#x4EE5;&#x968F;&#x610F;&#x5730;&#x8BBF;&#x95EE; DN42 &#x5185;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#xFF0C;&#x540C;&#x65F6;&#x8BA9; dn42 &#x5185;&#x7684;&#x5176;&#x4ED6;&#x8282;&#x70B9;&#x4E5F;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5230;&#x6211;&#x7684;&#x8BA1;&#x7B97;&#x673A;&#x3002;</p><p>&#x5982;&#x679C;&#x4F60;&#x60F3;&#x548C;&#x6211; peer, &#x8BF7;&#x70B9;&#x4E0B;&#x9762;&#x7684;&#x94FE;&#x63A5;&#xFF01;</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://blog.lss233.com/dn42/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">DN42</div><div class="kg-bookmark-description">Hi, I&#x2019;m AS4242421826, looking for peers on DN42 network now. If you are interested in peering with me, please send the following informationto i@lss233.com: * Your ASN * Your Clearnet IP * Your DN42 IP * Your Link-Local IP * Your WireGuard endpoint * Your WireGuard public key I prefer Mult&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://blog.lss233.com/favicon.ico" alt><span class="kg-bookmark-author">Lss233&apos;s.Blog()</span><span class="kg-bookmark-publisher">Lss233</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://blog.lss233.com/content/images/2021/02/20160725222959_JGMRc.thumb.700_0.jpeg" alt></div></a></figure><figure class="kg-card kg-image-card kg-width-full"><img src="https://blog.lss233.com/content/images/2021/02/image.png" class="kg-image" alt loading="lazy" width="2000" height="1189" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/image.png 600w, https://blog.lss233.com/content/images/size/w1000/2021/02/image.png 1000w, https://blog.lss233.com/content/images/size/w1600/2021/02/image.png 1600w, https://blog.lss233.com/content/images/2021/02/image.png 2278w"></figure><h2 id="-tinc">&#x5B89;&#x88C5; Tinc</h2><p>Tinc &#x662F;&#x4E00;&#x4E2A;&#x8F7B;&#x91CF;&#x7EA7;&#x7684;&#x8DE8;&#x5E73;&#x53F0; full-mesh VPN &#x8F6F;&#x4EF6;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x8BA9;&#x8282;&#x70B9;&#x4E4B;&#x95F4;&#x4E92;&#x76F8;&#x5EFA;&#x7ACB;&#x96A7;&#x9053;&#xFF0C;&#x4ECE;&#x800C;&#x8BA9;&#x6D41;&#x91CF;&#x76F4;&#x63A5;&#x5230;&#x8FBE;&#x76EE;&#x6807;&#x8BA1;&#x7B97;&#x673A;&#x3002;</p><p>&#x5404;&#x53D1;&#x884C;&#x7248;&#x8F6F;&#x4EF6;&#x4ED3;&#x5E93;&#x5E94;&#x8BE5;&#x90FD;&#x6709;&#x8FD9;&#x4E2A;&#x8F6F;&#x4EF6;&#xFF0C;&#x6240;&#x4EE5;&#x4F60;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5B89;&#x88C5;&#x7A33;&#x5B9A;&#x7248;&#xFF1A;</p><p><code>sudo apt install tinc</code></p><p>&#x5982;&#x679C;&#x4F60;&#x60F3;&#x5728; Ubuntu &#x4E0A;&#x4F7F;&#x7528;&#x6700;&#x65B0;&#x7684; 1.1 &#x9884;&#x89C8;&#x7248;&#xFF0C;&#x5EFA;&#x8BAE;&#x4ECE; GitHub &#x83B7;&#x53D6;&#x6E90;&#x7801;&#x624B;&#x52A8;&#x7F16;&#x8BD1;&#xFF1A;</p><pre><code class="language-console">sudo apt install -y autoconf textinfo
git clone https://github.com/gsliepen/tinc -b 1.1
cd tinc
autoreconf -fsi
./configure \
    --bindir=/usr/bin \
    --sbindir=/usr/sbin \
    --with-systemd \
    --enable-jumbograms \
    --disable-legacy-protocol \
    --datadir=/etc/tinc 
 make
 sudo make install</code></pre><p>&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C; Tinc 1.0.35 &#x4EE5;&#x524D;&#x548C; 1.1-pre17 &#x4EE5;&#x524D;&#x7684;&#x7248;&#x672C;&#x6709;&#x534F;&#x8BAE;&#x6F0F;&#x6D1E;&#xFF0C;&#x800C;&#x5728; tinc-vpn.org &#x4E0B;&#x8F7D;&#x7684; 1.1-pre17 &#x6E90;&#x7801;&#x4E0D;&#x652F;&#x6301; openssl1.1.1a &#x4EE5;&#x4E0A;&#x7684;&#x7248;&#x672C;&#xFF0C; </p><p>&#x5426;&#x5219;&#x7A0B;&#x5E8F;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x63D0;&#x793A; <code>Error while decrypting: error:060A7094:digital envelope routines:EVP_EncryptUpdate:invalid operation</code> &#x3002; &#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x5728; GitHub &#x4E0A;&#x5DF2;&#x7ECF;&#x88AB;&#x4FEE;&#x590D;&#xFF0C;&#x4F46;&#x662F;&#x5B98;&#x65B9;&#x8FD8;&#x6CA1;&#x6709;&#x653E;&#x51FA;&#x65B0;&#x7684; release&#xFF0C;&#x5177;&#x4F53;&#x60C5;&#x51B5;&#x662F;<a href="https://github.com/gsliepen/tinc/issues/223">&#x8FD9;&#x6837;</a>&#x7684;&#x3002;</p><h2 id="-">&#x51C6;&#x5907;</h2><p>&#x76EE;&#x524D;&#x6211;&#x6709; <code>172.20.143.48/28</code> &#x8FD9;&#x6BB5;IP&#xFF0C;&#x6211;&#x5C06;&#x62C6;&#x51FA;&#x4E00;&#x6BB5;IP <code>172.20.143.56/29</code> &#x5E76;&#x5206;&#x914D;&#x5230;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x8BBE;&#x5907;&#x4E0A;&#xFF1A;</p><pre><code class="language-csv">master   -  172.20.143.57 -     &#x7F51;&#x5173;&#xFF0C;&#x4E0E;&#x5176;&#x4ED6; DN42 &#x8282;&#x70B9;&#x901A;&#x8BAF;
lax2     -  172.20.143.58 -     &#x53E6;&#x5916;&#x4E00;&#x53F0; Ubuntu &#x670D;&#x52A1;&#x5668;
lap      -  172.20.143.59 -     &#x7535;&#x8111;
rpi      -  172.20.143.60 -     &#x6811;&#x8393;&#x6D3E;
and      -  172.20.143.61 -     &#x624B;&#x673A;</code></pre><p>master &#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5176;&#x4ED6; dn42 &#x8282;&#x70B9;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x4EE5;&#x8BA9;&#x5176;&#x4ED6;&#x8BBE;&#x5907;&#x901A;&#x8FC7; master &#x8BBF;&#x95EE; dn42 &#x7F51;&#x7EDC;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x901A;&#x8FC7; VPN &#x7EC4;&#x5EFA;&#x4E00;&#x4E2A;&#x865A;&#x62DF;&#x5185;&#x7F51;&#xFF0C;&#x5176;&#x4ED6;&#x8BBE;&#x5907;&#x628A; master &#x4F5C;&#x4E3A;&#x7F51;&#x5173;&#x5C31;&#x597D;&#x4E86;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/02/--.png" class="kg-image" alt loading="lazy" width="731" height="911" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/--.png 600w, https://blog.lss233.com/content/images/2021/02/--.png 731w" sizes="(min-width: 720px) 720px"></figure><h2 id="--1">&#x914D;&#x7F6E;</h2><p>&#x5BF9;&#x4E8E; Ubuntu&#x7CFB;&#x7EDF;&#xFF0C;&#x5728; <code>/etc/tinc</code> &#x4E0B;&#x65B0;&#x5EFA;&#x4E00;&#x4E2A;&#x76EE;&#x5F55;&#xFF0C;&#x53D6;&#x540D;&#x4E3A; <code>intern</code>&#x3002;&#x7136;&#x540E;&#x5728;&#x91CC;&#x9762;&#x5EFA;&#x7ACB; <code>hosts</code> &#x6587;&#x4EF6;&#x5939;&#x548C; <code>tinc.conf</code> &#xFF08;&#x5982;&#x679C;&#x4F60;&#x662F;&#x624B;&#x52A8;&#x7F16;&#x8BD1;&#x7684; tinc&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x53EF;&#x80FD;&#x8981;&#x627E;&#x7684;&#x662F; <code>/usr/local/etc/tinc</code>&#xFF09;</p><p>&#x5BF9;&#x4E8E; Windows &#x7CFB;&#x7EDF;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5728; Tinc &#x7684;&#x5B89;&#x88C5;&#x76EE;&#x5F55;&#x4E0B;&#x5EFA;&#x7ACB; <code>intern</code>&#x6587;&#x4EF6;&#x5939;&#x3002;</p><p>&#x5BF9;&#x4E8E; Android &#x7CFB;&#x7EDF;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <a href="https://tincapp.pacien.org/">Tinc App</a>&#x3002;</p><p>&#x5728;&#x672C;&#x4F8B;&#x4E2D;&#xFF0C;<code>intern</code> &#x662F;&#x4F60;&#x7684;&#x7F51;&#x7EDC;&#x540D;&#x5B57;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x6539;&#x6210;&#x522B;&#x7684;&#x3002;</p><h3 id="-master">&#x914D;&#x7F6E;&#x670D;&#x52A1;&#x7AEF; master</h3><p>&#x7F16;&#x8F91; <code>/etc/tinc/intern/tinc.conf</code>, &#x5199;&#x5165;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;&#xFF1A;</p><pre><code class="language-toml">Name = intern_master # &#x8282;&#x70B9;&#x7684;&#x540D;&#x79F0;
Mode = switch        # switch &#x6A21;&#x5F0F;
Interface = intern0  # &#x7F51;&#x5361;&#x540D;&#x79F0;</code></pre><p>&#x7136;&#x540E;&#x662F; <code>/etc/tinc/intern/hosts/intern_master</code>,</p><pre><code class="language-toml">Address = &#x670D;&#x52A1;&#x5668;&#x516C;&#x7F51;IP
Subnet = 172.20.143.57/32   # &#x8FD9;&#x91CC;&#x7684; 172.20.143.57 &#x5C31;&#x662F;&#x5728;&#x8FD9;&#x4E2A;&#x5185;&#x7F51;&#x4E2D; master &#x7684; IPv4 &#x5730;&#x5740;</code></pre><p>&#x63A5;&#x4E0B;&#x6765;&#x751F;&#x6210;&#x5BC6;&#x94A5;&#xFF1A;</p><pre><code class="language-console"># &#x5982;&#x679C;&#x662F; Tinc 1.0.x:
tincd -n intern -K
# &#x5982;&#x679C;&#x662F; Tinc 1.1+
tinc -n intern generate-ed22519-keys</code></pre><p>&#x4FDD;&#x6301;&#x9ED8;&#x8BA4;&#x8BBE;&#x7F6E;&#xFF0C;&#x4E00;&#x8DEF;&#x56DE;&#x8F66;&#x5C31;&#x597D;&#x4E86;&#x3002;</p><p>&#x7F16;&#x5199;&#x7F51;&#x5361;&#x521D;&#x59CB;&#x5316;&#x811A;&#x672C; <code>/etc/tinc/intern/tinc-up</code>:</p><pre><code class="language-bash">#!/bin/bash
ip link set up $INTERFACE
ip addr add 172.20.143.57/29 dev $INTERFACE</code></pre><p>&#x7F51;&#x5361;&#x5173;&#x95ED;&#x811A;&#x672C; <code>/etc/tinc/intern/tinc-down</code>&#xFF1A;</p><pre><code class="language-console">#!/bin/bash
ip addr del 172.20.143.57/29 dev $INTERFACE
ip link set $INTERFACE down</code></pre><p>&#x8BBE;&#x7F6E;&#x6267;&#x884C;&#x6743;&#x9650;&#xFF1A;</p><pre><code class="language-console">sudo chmod +x /etc/tinc/intern/tinc-up
sudo chmod +x /etc/tinc/intern/tinc-down</code></pre><h3 id="-linux-lax2">&#x914D;&#x7F6E; Linux &#x5BA2;&#x6237;&#x7AEF; - lax2</h3><p>&#x670D;&#x52A1;&#x7AEF;&#x548C;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x914D;&#x7F6E;&#x57FA;&#x672C;&#x4E0A;&#x76F8;&#x540C;&#xFF0C;&#x7F16;&#x8F91; <code>/etc/tinc/intern/tinc.conf</code>, &#x5199;&#x5165;&#x4EE5;&#x4E0B;&#x5185;&#x5BB9;&#xFF1A;</p><pre><code class="language-toml">Name = intern_lax2
Mode = switch
Interface = intern0
ConnectTo = intern_master</code></pre><p>&#x7136;&#x540E;&#x662F; <code>/etc/tinc/intern/hosts/intern_lax2</code> :</p><pre><code class="language-toml">Subnet = 172.20.143.58/32</code></pre><p>&#x5728;&#x7F51;&#x5361;&#x521D;&#x59CB;&#x5316;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x989D;&#x5916;&#x6DFB;&#x52A0;&#x4E00;&#x6761;&#x8DEF;&#x7531;&#x3002;</p><p><code>/etc/tinc/intern/tinc-up</code>:</p><pre><code class="language-bash">#!/bin/bash
ip link set up $INTERFACE
ip addr add 172.20.143.58/29 dev $INTERFACE
# &#x4E0E; dn42 &#x6709;&#x5173;&#x7684; IP &#x5168;&#x90E8;&#x8D70;&#x54B1; master &#x7F51;&#x5173;
ip route add 172.20.0.0/14 via 172.20.143.57 dev $INTERFACE</code></pre><p>&#x7136;&#x540E;&#x5728;&#x65AD;&#x5F00;&#x65F6;&#xFF0C;&#x628A;&#x8DEF;&#x7531;&#x4E5F;&#x5220;&#x6389;&#x3002;<code>/etc/tinc/intern/tinc-down</code>:</p><pre><code class="language-bash">#!/bin/bash
ip addr del 172.20.143.58/29 dev $INTERFACE
ip route del 172.20.0.0/14 via 172.20.143.57 dev $INTERFACE
ip link set down dev $INTERFACE</code></pre><p>&#x751F;&#x6210;&#x5BC6;&#x94A5;&#x3001;&#x8BBE;&#x7F6E;&#x811A;&#x672C;&#x6267;&#x884C;&#x6743;&#x9650;&#x4E0E;&#x4E0A;&#x4E00;&#x6B65;&#x76F8;&#x540C;&#x3002;</p><h3 id="-windows-lap">&#x914D;&#x7F6E; Windows &#x5BA2;&#x6237;&#x7AEF; - lap</h3><p>&#x5728;<a href="https://www.tinc-vpn.org/download/">&#x8FD9;&#x91CC;</a>&#x4E0B;&#x8F7D; Windows &#x7248;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x5B89;&#x88C5;&#x65F6;&#x4E09;&#x9879;&#x5168;&#x9009;&#x3002;&#x5B89;&#x88C5;&#x5B8C;&#x6210;&#x540E;&#xFF0C;&#x8FDB;&#x5165; tinc &#x5B89;&#x88C5;&#x76EE;&#x5F55;&#x3002;</p><p>&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x6B65;&#x9AA4;&#x548C;&#x4E0A;&#x9762; Linux &#x5BA2;&#x6237;&#x7AEF;&#x57FA;&#x672C;&#x4E0A;&#x4E00;&#x6837;&#xFF0C;&#x65E0;&#x975E;&#x662F;&#x521B;&#x5EFA;&#x76EE;&#x5F55;&#xFF0C;&#x7F16;&#x5199; <code>tinc.conf</code>&#xFF0C;&#x521B;&#x5EFA; <code>hosts</code> &#x548C; <code>intern_lap</code>&#xFF0C;&#x4EE5;&#x53CA;&#x751F;&#x6210;&#x5BC6;&#x94A5;&#x3002;</p><p>&#x4F46;&#x662F;&#x5BF9;&#x4E8E;&#x7F51;&#x5361;&#x7684;&#x914D;&#x7F6E;&#x6709;&#x4E00;&#x4E9B;&#x4E0D;&#x540C;&#x3002;&#x5728;&#x5B89;&#x88C5;&#x76EE;&#x5F55;&#x7684; <code>tap-win64</code> &#x6587;&#x4EF6;&#x5939;&#x4E0B;&#x6709;&#x4E00;&#x4E2A;&#x540D;&#x4E3A; <code>add-tap.bat</code> &#x7684;&#x6587;&#x4EF6;&#xFF0C;&#x53F3;&#x952E;&#x4EE5;&#x7BA1;&#x7406;&#x5458;&#x8EAB;&#x4EFD;&#x8FD0;&#x884C;&#xFF0C;&#x5373;&#x53EF;&#x6DFB;&#x52A0;&#x7F51;&#x5361;&#x3002;</p><p>&#x63A5;&#x4E0B;&#x6765;&#x5728;&#x63A7;&#x5236;&#x9762;&#x677F;&#x4E2D;&#x627E;&#x5230;&#x4E00;&#x4E2A;&#x5199;&#x7740; <code>TAP-Win32 Adapter V9</code> &#x7684;&#x7F51;&#x5361;&#xFF0C;&#x5C06;&#x5176;&#x91CD;&#x547D;&#x540D;&#x4E3A; <code>tinc.conf</code> &#x4E2D; <code>Interface</code>&#x7684;&#x503C;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;&#x662F; <code>intern0</code>&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/02/image-1.png" class="kg-image" alt loading="lazy" width="737" height="283" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/image-1.png 600w, https://blog.lss233.com/content/images/2021/02/image-1.png 737w" sizes="(min-width: 720px) 720px"></figure><p>&#x53F3;&#x952E;&#x5B83;&#xFF0C;&#x70B9;&#x5C5E;&#x6027;&#x8BBE;&#x7F6E; IPv4 &#x5730;&#x5740;&#xFF0C;&#x5C06; IP &#x5730;&#x5740;&#x548C;&#x5B50;&#x7F51;&#x63A9;&#x7801;&#x4FEE;&#x6539;&#x4E3A; <code>intern_lap</code> &#x4E2D;&#x7684; <code>Subnet</code>&#x7684;&#x503C;&#x3002; DNS&#x670D;&#x52A1;&#x5668;&#x4E5F;&#x53EF;&#x4EE5;&#x8BBE;&#x7F6E;&#x4E3A; dn42 &#x4E2D;&#x7684; dns &#x670D;&#x52A1;&#x5668; IP&#xFF0C;&#x8FD9;&#x6837;&#x4F60;&#x5C31;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x8BBF;&#x95EE; <code>.dn42</code> &#x7684;&#x57DF;&#x540D;&#x3002;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/02/image-2.png" class="kg-image" alt loading="lazy" width="812" height="1016" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/image-2.png 600w, https://blog.lss233.com/content/images/2021/02/image-2.png 812w" sizes="(min-width: 720px) 720px"></figure><p>&#x5BF9;&#x4E8E;&#x7F51;&#x5173;&#x7684;&#x8BBE;&#x7F6E;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5728;&#x8FD9;&#x4E2A;&#x7A97;&#x53E3;&#x4E2D;&#x586B;&#x5165;&#x7F51;&#x5173;&#x5730;&#x5740;&#xFF0C;&#x4F46;&#x4F1A;&#x9020;&#x6210;&#x4F60;&#x8BA1;&#x7B97;&#x673A;&#x4E0A;&#x975E; dn42 &#x7684;&#x6570;&#x636E;&#x5305;&#x4E5F;&#x4F1A;&#x88AB;&#x53D1;&#x5F80;&#x670D;&#x52A1;&#x5668;&#x3002;</p><p>&#x6216;&#x8005;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x624B;&#x52A8;&#x8BBE;&#x7F6E;&#x7F51;&#x5173;&#x7684;&#x8DEF;&#x7531;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x4EE5;&#x7BA1;&#x7406;&#x5458;&#x8EAB;&#x4EFD;&#x542F;&#x52A8; cmd&#xFF0C;&#x7136;&#x540E;&#x6267;&#x884C;</p><pre><code class="language-console">route -p add 172.20.0.0/14 172.20.143.57</code></pre><p>&#x8FD9;&#x91CC;&#x7684; <code>-p</code> &#x53C2;&#x6570;&#x4F1A;&#x8BA9;&#x8FD9;&#x6761;&#x8DEF;&#x7531;&#x8BBE;&#x7F6E;&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x91CD;&#x542F;&#x540E;&#x4ECD;&#x7136;&#x5B58;&#x5728;&#xFF08;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x4F60;&#x4E0D;&#x52A0;&#x5B83;&#xFF0C;&#x91CD;&#x542F;&#x540E;&#x5C31;&#x4F1A;&#x6D88;&#x5931;&#x3002;&#xFF09;</p><p>&#x5982;&#x679C;&#x4F60;&#x60F3;&#x5220;&#x9664;&#x8DEF;&#x7531;&#xFF0C;&#x53EF;&#x4EE5;&#x6267;&#x884C;</p><pre><code class="language-console">route delete 172.20.0.0/14 172.20.143.57</code></pre><p>&#x5728; Windows &#x4E0A;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x7C7B;&#x4F3C;&#x7684;&#x4F4D;&#x7F6E;&#x521B;&#x5EFA; <code>tinc-up.bat</code> &#x548C; <code>tinc-down.bat</code> &#x6765;&#x6267;&#x884C;&#x542F;&#x52A8;&#x548C;&#x5173;&#x95ED;&#x65F6;&#x7684;&#x811A;&#x672C;&#x3002;</p><h3 id="--2">&#x6D4B;&#x8BD5; &amp; &#x8FD0;&#x884C;</h3><p>&#x5728;&#x6B63;&#x5F0F;&#x542F;&#x52A8; tinc &#x4E4B;&#x524D;&#xFF0C;&#x4F60;&#x8FD8;&#x9700;&#x8981;&#x4EA4;&#x6362;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x7684;&#x914D;&#x7F6E;&#x6587;&#x4EF6;&#x3002;&#x5C06;&#x670D;&#x52A1;&#x7AEF; <code>hosts</code> &#x91CC;&#x7684;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x5230;&#x5404;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x91CC;&#xFF0C; &#x5BA2;&#x6237;&#x7AEF;&#x7684; <code>hosts</code> &#x91CC;&#x7684;&#x6587;&#x4EF6;&#x4E5F;&#x590D;&#x5236;&#x5230;&#x670D;&#x52A1;&#x7AEF;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x60F3;&#x8BA9;&#x5BA2;&#x6237;&#x7AEF;&#x4E4B;&#x95F4;&#x4E5F;&#x80FD;&#x8FDE;&#x63A5;&#xFF0C;&#x90A3;&#x4E48;&#x5BA2;&#x6237;&#x7AEF;&#x4E4B;&#x95F4;&#x4E5F;&#x9700;&#x8981;&#x6709;&#x5BF9;&#x65B9; <code>hosts</code> &#x91CC;&#x7684;&#x6587;&#x4EF6;&#x3002;</p><p>&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x6BCF;&#x4E2A;&#x8BA1;&#x7B97;&#x673A;&#x4E0A;&#x6267;&#x884C; <code>tincd -n intern -D -d3</code> &#x5728;&#x524D;&#x53F0;&#x4EE5;&#x8C03;&#x8BD5;&#x6A21;&#x5F0F;&#x542F;&#x52A8; tinc&#xFF0C;&#x5E76;&#x4E14;&#x89C2;&#x5BDF;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#x3002; &#x5982;&#x679C;&#x4F60;&#x89C9;&#x5F97;&#x4E0D;&#x9519;&#xFF0C;&#x4F7F;&#x7528; <code>Ctrl + \</code> &#x5173;&#x95ED;&#x7A0B;&#x5E8F;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x5B83;&#x6DFB;&#x52A0;&#x5230;&#x670D;&#x52A1;&#x4E2D;&#xFF1A;</p><pre><code class="language-console">sudo systemctl enable tinc@intern
sudo systemctl start tinc@intern</code></pre><p>&#x5BF9;&#x4E8E; Windows &#x7CFB;&#x7EDF;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x5728;&#x7BA1;&#x7406;&#x5458;&#x8EAB;&#x4EFD;&#x542F;&#x52A8;&#x7684; cmd &#x4E0B;&#x8FDB;&#x5165; tinc &#x5B89;&#x88C5;&#x76EE;&#x5F55;&#xFF0C; &#x7136;&#x540E;&#x6267;&#x884C; <code>tincd -n intern</code> &#xFF0C;&#x5982;&#x679C;&#x6210;&#x529F;&#x7684;&#x8BDD;&#x4F1A;&#x51FA;&#x73B0;&#x4E00;&#x4E2A;&#x5F00;&#x673A;&#x81EA;&#x52A8;&#x542F;&#x52A8;&#x7684;&#x670D;&#x52A1; <code>tinc.intern</code>&#x3002;</p><p>&#x5982;&#x679C;&#x4E00;&#x5207;&#x6B63;&#x5E38;&#x7684;&#x8BDD;&#xFF0C;&#x4F60;&#x73B0;&#x5728;&#x5C31;&#x80FD;&#x5728;&#x4EFB;&#x610F;&#x4E00;&#x53F0;&#x8BA1;&#x7B97;&#x673A;&#x4E0A;&#x8BBF;&#x95EE; dn42 &#x7684;&#x7F51;&#x7EDC;&#x4E86;&#x3002;</p><p>&#x5148;&#x8BD5;&#x8BD5;&#x6211;&#x4EEC;&#x7684;&#x865A;&#x62DF;&#x5185;&#x7F51;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/02/image-4.png" class="kg-image" alt loading="lazy" width="1053" height="427" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/image-4.png 600w, https://blog.lss233.com/content/images/size/w1000/2021/02/image-4.png 1000w, https://blog.lss233.com/content/images/2021/02/image-4.png 1053w" sizes="(min-width: 720px) 720px"></figure><p>(&#x5947;&#x602A;&#xFF0C;&#x600E;&#x4E48;&#x5EF6;&#x8FDF;&#x53D8;&#x4F4E;&#x4E86;&#xFF1F;)</p><p>&#x518D;&#x770B;&#x770B; dn42 &#x91CC;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/02/image-3.png" class="kg-image" alt loading="lazy" width="1338" height="463" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/image-3.png 600w, https://blog.lss233.com/content/images/size/w1000/2021/02/image-3.png 1000w, https://blog.lss233.com/content/images/2021/02/image-3.png 1338w" sizes="(min-width: 720px) 720px"></figure><!--kg-card-begin: markdown--><p><s>&#x77A7;&#x8FD9;&#x626D;&#x66F2;&#x7684;&#x8DEF;&#x7531;</s></p>
<!--kg-card-end: markdown--><p>&#x4E0D;&#x51FA;&#x610F;&#x5916;&#x7684;&#x8BDD;&#xFF0C;&#x5728; master &#x8282;&#x70B9;&#x4E0A;&#x4F7F;&#x7528; <code>tcpdump -I intern0</code> &#x4E5F;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4ECE;&#x90A3;&#x53F0;&#x8BA1;&#x7B97;&#x673A;&#x4E0A;&#x8DEF;&#x8FC7;&#x7684; ICMP &#x8BF7;&#x6C42;&#x3002;</p><p>&#x901A;&#x8FC7;&#x5176;&#x4ED6;&#x4EBA;&#x7684; Looking Glass&#xFF0C; &#x4E5F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8BBF;&#x95EE;&#x5230;&#x6211;&#x4EEC;&#x5185;&#x7F51;&#xFF1A;</p><figure class="kg-card kg-image-card"><img src="https://blog.lss233.com/content/images/2021/02/image-5.png" class="kg-image" alt loading="lazy" width="1111" height="156" srcset="https://blog.lss233.com/content/images/size/w600/2021/02/image-5.png 600w, https://blog.lss233.com/content/images/size/w1000/2021/02/image-5.png 1000w, https://blog.lss233.com/content/images/2021/02/image-5.png 1111w" sizes="(min-width: 720px) 720px"></figure><h2 id="--3">&#x5199;&#x5728;&#x6700;&#x540E;</h2><p>&#x4F60;&#x53EF;&#x4EE5;&#x7528;&#x8FD9;&#x6837;&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x8BA9;&#x81EA;&#x5DF1;&#x7684;&#x6240;&#x6709;&#x8BBE;&#x5907;&#x5168;&#x90E8;&#x52A0;&#x5165; DN42 &#x7F51;&#x7EDC;&#x3002;&#x8BBF;&#x95EE;&#x7684;&#x5EF6;&#x8FDF;&#x53D6;&#x51B3;&#x4E8E;&#x4F60;&#x548C;&#x7F51;&#x5173;&#x670D;&#x52A1;&#x5668;&#x7684;&#x5EF6;&#x8FDF;&#x3002;&#x4E0D;&#x8FC7;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x7684;&#x7F51;&#x7EDC;&#x5185;&#x6709;&#x5176;&#x4ED6;&#x5EF6;&#x8FDF;&#x66F4;&#x4F4E;&#x7684; BGP router&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x628A;&#x5B83;&#x4F5C;&#x4E3A;&#x7F51;&#x5173;&#x3002;</p><p>&#x628A;&#x81EA;&#x5DF1;&#x5BB6;&#x7684;&#x7535;&#x8111;&#x9001;&#x4E0A;&#x516C;&#x5171;&#x7F51;&#x7EDC;&#x662F;&#x4E0D;&#x5B89;&#x5168;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F60;&#x8981;&#x8BA9;&#x81EA;&#x5DF1;&#x7684;&#x7535;&#x8111;&#x6216;&#x8005;&#x624B;&#x673A;&#x52A0;&#x5165; DN42 &#x7F51;&#x7EDC;&#xFF0C;&#x6700;&#x597D;&#x8FD8;&#x662F;&#x628A;&#x9632;&#x706B;&#x5899;&#x7ED9;&#x8BBE;&#x7F6E;&#x597D;&#x3002;&#x6216;&#x8005;&#x901A;&#x8FC7; NAT &#x7684;&#x65B9;&#x5F0F;&#x4E0A;&#x7F51;&#x3002;</p><p></p>]]></content:encoded></item><item><title><![CDATA[TOJ 1175 - 线段树模板题]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id>&#x8FD9;&#x9898;&#x4E5F;&#x662F;&#x7EBF;&#x6BB5;&#x6811;</h2>
<p>&#x5355;&#x7EC4;&#x6570;&#x636E;&#xFF0C;&#x7B2C;&#x4E00;&#x884C;&#x4E00;&#x4E2A;&#x6B63;&#x6574;&#x6570;n&#x3002;&#xFF08;1&lt;=n&lt;=10^5)</p>
<p>&#x7B2C;&#x4E8C;&#x884C;n&#x4E2A;&#x6570; a1,a2...an&#x3002;&#xFF08;0&lt;= |a[i]| &lt;=10^7)</p>
<p>&#x7B2C;&#x4E09;&#x884C;</p>]]></description><link>https://blog.lss233.com/toj1175-segment-tree-template/</link><guid isPermaLink="false">6024d72081c0bcbcde7de98a</guid><category><![CDATA[算法]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Mon, 11 Jan 2021 02:59:00 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id>&#x8FD9;&#x9898;&#x4E5F;&#x662F;&#x7EBF;&#x6BB5;&#x6811;</h2>
<p>&#x5355;&#x7EC4;&#x6570;&#x636E;&#xFF0C;&#x7B2C;&#x4E00;&#x884C;&#x4E00;&#x4E2A;&#x6B63;&#x6574;&#x6570;n&#x3002;&#xFF08;1&lt;=n&lt;=10^5)</p>
<p>&#x7B2C;&#x4E8C;&#x884C;n&#x4E2A;&#x6570; a1,a2...an&#x3002;&#xFF08;0&lt;= |a[i]| &lt;=10^7)</p>
<p>&#x7B2C;&#x4E09;&#x884C;&#x4E00;&#x4E2A;&#x6574;&#x6570;m,&#x8868;&#x793A;m&#x4E2A;&#x64CD;&#x4F5C;&#x3002; &#xFF08;1&lt;=m&lt;=10^5)</p>
<p>&#x63A5;&#x4E0B;&#x6765;m&#x884C;&#xFF0C;&#x6BCF;&#x884C;&#x7B2C;&#x4E00;&#x4E2A;&#x6570;&#x8868;&#x793A;&#x64CD;&#x4F5C;&#x7C7B;&#x578B;&#xFF0C;&#x5176;&#x4F59;&#x6570;&#x8868;&#x793A;&#x64CD;&#x4F5C;&#x5BF9;&#x5E94;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x5BF9;&#x5E94;&#x9898;&#x9762;&#x3002; &#xFF08;1&lt;=l&lt;=r&lt;=n,0&lt;=|v|&lt;=10^7&#xFF09;</p>
<h3 id>&#x8F93;&#x5165;</h3>
<p>&#x5355;&#x7EC4;&#x6570;&#x636E;&#xFF0C;&#x7B2C;&#x4E00;&#x884C;&#x4E00;&#x4E2A;&#x6B63;&#x6574;&#x6570;n&#x3002;&#xFF08;1&lt;=n&lt;=10^5)</p>
<p>&#x7B2C;&#x4E8C;&#x884C;n&#x4E2A;&#x6570; a1,a2...an&#x3002;&#xFF08;0&lt;= |a[i]| &lt;=10^7)</p>
<p>&#x7B2C;&#x4E09;&#x884C;&#x4E00;&#x4E2A;&#x6574;&#x6570;m,&#x8868;&#x793A;m&#x4E2A;&#x64CD;&#x4F5C;&#x3002; &#xFF08;1&lt;=m&lt;=10^5)</p>
<p>&#x63A5;&#x4E0B;&#x6765;m&#x884C;&#xFF0C;&#x6BCF;&#x884C;&#x7B2C;&#x4E00;&#x4E2A;&#x6570;&#x8868;&#x793A;&#x64CD;&#x4F5C;&#x7C7B;&#x578B;&#xFF0C;&#x5176;&#x4F59;&#x6570;&#x8868;&#x793A;&#x64CD;&#x4F5C;&#x5BF9;&#x5E94;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x5BF9;&#x5E94;&#x9898;&#x9762;&#x3002; &#xFF08;1&lt;=l&lt;=r&lt;=n,0&lt;=|v|&lt;=10^7&#xFF09;</p>
<h3 id>&#x8F93;&#x51FA;</h3>
<p>&#x5BF9;&#x4E8E;&#x6BCF;&#x4E00;&#x4E2A;3&#x64CD;&#x4F5C;&#xFF0C;&#x8F93;&#x51FA;&#x4E00;&#x884C;&#x4E09;&#x4E2A;&#x6574;&#x6570;&#xFF0C;&#x8868;&#x793A;&#x533A;&#x95F4;&#x548C;&#xFF0C;&#x6700;&#x5927;&#x503C;&#xFF0C;&#x6700;&#x5C0F;&#x503C;&#x3002;</p>
<h3 id>&#x6837;&#x4F8B;&#x8F93;&#x5165;</h3>
<pre><code>5
1 2 3 4 5
7
1 1 1 -2
3 1 2
1 3 5 1
3 1 5
3 3 3
2 3 3 3
3 3 3
</code></pre>
<h3 id>&#x6837;&#x4F8B;&#x8F93;&#x51FA;</h3>
<pre><code>1 2 -1
16 6 -1
4 4 4
3 3 3
</code></pre>
<h2 id>&#x9898;&#x89E3;</h2>
<p>&#x8FD9;&#x9898;&#x5E94;&#x8BE5;&#x7B97;&#x662F;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x6A21;&#x677F;&#x9898;&#x4E86;&#x5427;&#x3002;&#x6700;&#x5927;&#x503C;&#x3001;&#x6700;&#x5C0F;&#x503C;&#x3001;&#x6C42;&#x548C;&#x3001;&#x533A;&#x95F4;&#x6539;&#x503C;&#x90FD;&#x6709;&#x4E86;&#x3002;<br>
&#x6240;&#x4EE5;&#x7279;&#x6B64;&#x8BB0;&#x5F55;&#x4E00;&#x4E0B;&#x3002;</p>
<h3 id>&#x4EE3;&#x7801;</h3>
<pre><code class="language-c++">#include &lt;bits/stdc++.h&gt;
#define L(x) (x &lt;&lt; 1)
#define R(x) (x &lt;&lt; 1 | 1)
typedef long long ll;
const int MAX_N = 2e5 + 10;
struct leaf
{
    ll max, min, sum;
    leaf()
    {
        max = 0, min = 0, sum = 0;
    }
} tree[MAX_N * 4];
ll data[MAX_N], lazy_add[MAX_N * 4], lazy_set[MAX_N * 4];
bool is_lazy_set[MAX_N * 4];
void push_up(int k)
{
    tree[k].sum = tree[L(k)].sum + tree[R(k)].sum;
    tree[k].max = std ::max(tree[L(k)].max, tree[R(k)].max);
    tree[k].min = std ::min(tree[L(k)].min, tree[R(k)].min);
}
void push_down(int k, int a, int b)
{
    int m = (a + b) &gt;&gt; 1;
    if(is_lazy_set[k]) {
        lazy_add[L(k)] = lazy_add[R(k)] = 0;
        lazy_set[L(k)] = lazy_set[R(k)] = lazy_set[k];
        is_lazy_set[L(k)] = is_lazy_set[R(k)] = is_lazy_set[k];
        tree[L(k)].sum = (m - a + 1) * lazy_set[k];
        tree[L(k)].max = lazy_set[k];
        tree[L(k)].min = lazy_set[k];

        tree[R(k)].sum = (b - m) * lazy_set[k];
        tree[R(k)].max = lazy_set[k];
        tree[R(k)].min = lazy_set[k];
        is_lazy_set[k] = false;
    }
    if(lazy_add[k]) {
        lazy_add[L(k)] += lazy_add[k];
        lazy_add[R(k)] += lazy_add[k];
        tree[L(k)].sum += (m - a + 1) * lazy_add[k];
        tree[L(k)].max += lazy_add[k];
        tree[L(k)].min += lazy_add[k];

        tree[R(k)].sum += (b - m) * lazy_add[k];
        tree[R(k)].max += lazy_add[k];
        tree[R(k)].min += lazy_add[k];
        lazy_add[k] = 0;
    }
}
void build(int k, int l, int r)
{
    if (l == r)
    {
        tree[k].max = tree[k].min = tree[k].sum = data[l];
        return;
    }
    int mid = (l + r) &gt;&gt; 1;
    build(L(k), l, mid);
    build(R(k), mid + 1, r);
    push_up(k);
}
void update(int k, int a, int b, int l, int r, int op, ll val)
{
    if (a &lt;= l &amp;&amp; r &lt;= b)
    {
        if (op == 1) // add
        {
            tree[k].max += val;
            tree[k].min += val;
            tree[k].sum += val * (r - l + 1);
            lazy_add[k] += val;
        }
        else if (op == 2) // set
        {
            tree[k].max = val;
            tree[k].min = val;
            tree[k].sum = val * (r - l + 1);
            lazy_set[k] = val;
            lazy_add[k] = 0;
            is_lazy_set[k] = true;
        }
        return;
    }
    int mid = (l + r) &gt;&gt; 1;
    push_down(k, l, r);
    if (a &lt;= mid)
    {
        update(L(k), a, b, l, mid, op, val);
    }
    if (mid &lt; b)
    {
        update(R(k), a, b, mid + 1, r, op, val);
    }
    push_up(k);
}
leaf query(int k, int a, int b, int l, int r)
{
    if (a &lt;= l &amp;&amp; r &lt;= b)
    {
        return tree[k];
    }
    push_down(k, l, r);
    int mid = (l + r) &gt;&gt; 1;
    leaf ans;
    if (a &lt;= mid &amp;&amp; mid &lt; b)
    {
        leaf resA = query(L(k), a, b, l, mid);
        leaf resB = query(R(k), a, b, mid + 1, r);
        ans.max = std ::max(resA.max, resB.max);
        ans.min = std ::min(resA.min, resB.min);
        ans.sum = resA.sum + resB.sum;
        return ans;
    }
    if (a &lt;= mid)
    {
        return query(L(k), a, b, l, mid);
    }
    if (mid &lt; b)
    {
        return query(R(k), a, b, mid + 1, r);
    }
    return ans;
}
int main()
{
    int n;
    scanf(&quot;%d&quot;, &amp;n);
    for (int i = 1; i &lt;= n; i++)
    {
        scanf(&quot;%lld&quot;, &amp;data[i]);
    }
    build(1, 1, n);
    int m;
    scanf(&quot;%d&quot;, &amp;m);
    while (m--)
    {
        int op, l, r;
        scanf(&quot;%d%d%d&quot;, &amp;op, &amp;l, &amp;r);
        if (op &lt; 3)
        {
            ll val;
            scanf(&quot;%lld&quot;, &amp;val);
            update(1, l, r, 1, n, op, val);
        }
        else
        {
            leaf res = query(1, l, r, 1, n);
            printf(&quot;%lld %lld %lld\n&quot;, res.sum, res.max, res.min);
        }
    }
}
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[HDU 1671 - Phone List]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let&#x2019;s say the phone catalogue listed these numbers:</p>
<ol>
<li>Emergency 911</li>
<li>Alice 97 625 999</li>
<li>Bob 91 12 54 26<br>
In this case, it&#x2019;s not</li></ol>]]></description><link>https://blog.lss233.com/hdu-1671-phone-list/</link><guid isPermaLink="false">6024d72081c0bcbcde7de98c</guid><category><![CDATA[算法]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Thu, 07 Jan 2021 10:01:15 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let&#x2019;s say the phone catalogue listed these numbers:</p>
<ol>
<li>Emergency 911</li>
<li>Alice 97 625 999</li>
<li>Bob 91 12 54 26<br>
In this case, it&#x2019;s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob&#x2019;s phone number. So this list would not be consistent.</li>
</ol>
<h3 id="input">Input</h3>
<p>The first line of input gives a single integer, 1 &lt;= t &lt;= 40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 &lt;= n &lt;= 10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.</p>
<h3 id="output">Output</h3>
<p>For each test case, output &#x201C;YES&#x201D; if the list is consistent, or &#x201C;NO&#x201D; otherwise.</p>
<h3 id="sampleinput">Sample Input</h3>
<pre><code>2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
</code></pre>
<h3 id="sampleoutput">Sample Output</h3>
<pre><code>NO
YES
</code></pre>
<h2 id>&#x9898;&#x89E3;</h2>
<p>&#x9898;&#x76EE;&#x4F1A;&#x8F93;&#x5165;&#x4E00;&#x7EC4;&#x6570;&#x5B57;&#x3002;&#x8981;&#x6C42;&#x4EFB;&#x610F;&#x4E00;&#x7EC4;&#x6570;&#x5B57;&#x4E0D;&#x5F97;&#x662F;&#x53E6;&#x5916;&#x4E00;&#x7EC4;&#x7684;&#x524D;&#x7F00;&#x3002;<br>
&#x6BD4;&#x5982;&#x8BF4;&#xFF1A;</p>
<pre><code>91125426
911
</code></pre>
<p>&#x6216;&#x8005;</p>
<pre><code>812345
8123456
</code></pre>
<p>&#x8FD9;&#x6837;&#x7684;&#x8BDD;&#x53EA;&#x9700;&#x8981;&#x7EBF;&#x6BB5;&#x6811;&#x5728;&#x63D2;&#x5165;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5224;&#x65AD;&#x7ECF;&#x8FC7;&#x7684;&#x8282;&#x70B9;&#x662F;&#x5426;&#x88AB;&#x6807;&#x8BB0;&#x4E3A; <code>end</code>&#xFF0C;<br>
&#x6216;&#x8005;&#x5728;&#x63D2;&#x5165;&#x7ED3;&#x675F;&#x540E;&#xFF0C;&#x5224;&#x65AD;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x8282;&#x70B9;&#x662F;&#x5426;&#x4E3A;&#x7B2C;&#x4E00;&#x6B21;&#x88AB;&#x63D2;&#x5165;&#x5C31;&#x597D;&#x4E86;&#x3002;</p>
<p>&#x53E6;&#x5916;&#xFF0C;&#x672C;&#x9898;&#x7684;&#x5185;&#x5B58;&#x9650;&#x5236;&#x6BD4;&#x8F83;&#x5C0F;&#xFF0C;<br>
&#x6240;&#x4EE5;&#x5728;&#x4E00;&#x7EC4;&#x6570;&#x636E;&#x7684;&#x7ED3;&#x675F;&#xFF0C;&#x9700;&#x8981;&#x91CA;&#x653E;&#x5185;&#x5B58;&#xFF08;&#x5C31;&#x7B97;&#x4F60;&#x4E0D;&#x8BF4;&#x6211;&#x4E5F;&#x4F1A;&#x8FD9;&#x4E48;&#x505A;&#x7684;&#xFF0C;&#x56E0;&#x4E3A;&#x4E00;&#x4E2A; <code>delete</code> &#x6E05;&#x7A7A;&#x5B57;&#x5178;&#x6811;&#x8D85;&#x65B9;&#x4FBF;&#x5440;&#xFF09;&#x3002;</p>
<pre><code class="language-c++">#include &lt;bits/stdc++.h&gt;
const int MAX_CHILDREN = 11;
struct node
{
    bool end;
    node *children[MAX_CHILDREN];
    int count = 0;
    ~node() {
        for (int i = MAX_CHILDREN - 1; i &gt;= 0; i--)
        {
            if(children[i]) {
                delete children[i];
            }
        }
    }
    node()
    {
        end = false;
        for (int i = 0; i &lt; MAX_CHILDREN; i++)
            children[i] = NULL;
    }
};
node *root;
bool yes = true;
/**
 * &#x63D2;&#x5165;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5B57;&#x7B26;&#x4E32;
 * @param str &#x5B57;&#x7B26;&#x4E32;&#x6570;&#x7EC4;
 * @param len &#x5B57;&#x7B26;&#x4E32;&#x957F;&#x5EA6;
 **/
void insert(char *str, int len)
{
    node *location = root;
    for (int i = 0; i &lt; len; i++)
    {
        if (!yes)
            return; // Thereisnoneed.
        if (str[i] == 0 || str[i] == &apos;\n&apos;)
            continue;
        int id = str[i] - &apos;0&apos;;
        if (location-&gt;children[id] == NULL)
        {
            location-&gt;children[id] = new node;
        }
        if (location-&gt;end)
        {
            yes = false;
            return;
        }
        location = location-&gt;children[id];
        location-&gt;count++;
    }
    location-&gt;end = true;
    if (yes)
    {
        yes = location-&gt;count == 1;
    }
}
char str[20];
int main()
{
    int T;
    scanf(&quot;%d&quot;, &amp;T);
    while (T--)
    {
        root = new node;
        yes = true;
        int n;
        scanf(&quot;%d&quot;, &amp;n);
        while (n--)
        {
            scanf(&quot;%s&quot;, str);
            int len = strlen(str);
            insert(str, len);
        }
        printf(&quot;%s\n&quot;, yes ? &quot;YES&quot; : &quot;NO&quot;);
        delete root;
    }
}
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[HDU 1257 - 统计难题]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Ignatius&#x6700;&#x8FD1;&#x9047;&#x5230;&#x4E00;&#x4E2A;&#x96BE;&#x9898;,&#x8001;&#x5E08;&#x4EA4;&#x7ED9;&#x4ED6;&#x5F88;&#x591A;&#x5355;&#x8BCD;(&#x53EA;&#x6709;&#x5C0F;&#x5199;&#x5B57;&#x6BCD;&#x7EC4;&#x6210;,&#x4E0D;&#x4F1A;&#x6709;&#x91CD;&#x590D;&#x7684;&#x5355;&#x8BCD;&#x51FA;&#x73B0;),&#x73B0;&#x5728;&#x8001;&#x5E08;&#x8981;&#x4ED6;&#x7EDF;&#x8BA1;&#x51FA;&#x4EE5;&#x67D0;&#x4E2A;&#x5B57;&#x7B26;</p>]]></description><link>https://blog.lss233.com/toj-1234-trie/</link><guid isPermaLink="false">6024d72081c0bcbcde7de98b</guid><category><![CDATA[算法]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Thu, 07 Jan 2021 03:11:12 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><p>Ignatius&#x6700;&#x8FD1;&#x9047;&#x5230;&#x4E00;&#x4E2A;&#x96BE;&#x9898;,&#x8001;&#x5E08;&#x4EA4;&#x7ED9;&#x4ED6;&#x5F88;&#x591A;&#x5355;&#x8BCD;(&#x53EA;&#x6709;&#x5C0F;&#x5199;&#x5B57;&#x6BCD;&#x7EC4;&#x6210;,&#x4E0D;&#x4F1A;&#x6709;&#x91CD;&#x590D;&#x7684;&#x5355;&#x8BCD;&#x51FA;&#x73B0;),&#x73B0;&#x5728;&#x8001;&#x5E08;&#x8981;&#x4ED6;&#x7EDF;&#x8BA1;&#x51FA;&#x4EE5;&#x67D0;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x4E3A;&#x524D;&#x7F00;&#x7684;&#x5355;&#x8BCD;&#x6570;&#x91CF;(&#x5355;&#x8BCD;&#x672C;&#x8EAB;&#x4E5F;&#x662F;&#x81EA;&#x5DF1;&#x7684;&#x524D;&#x7F00;).</p>
<h3 id>&#x8F93;&#x5165;</h3>
<p>&#x8F93;&#x5165;&#x6570;&#x636E;&#x7684;&#x7B2C;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x4E00;&#x5F20;&#x5355;&#x8BCD;&#x8868;,&#x6BCF;&#x884C;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;,&#x5355;&#x8BCD;&#x7684;&#x957F;&#x5EA6;&#x4E0D;&#x8D85;&#x8FC7;10,&#x5B83;&#x4EEC;&#x4EE3;&#x8868;&#x7684;&#x662F;&#x8001;&#x5E08;&#x4EA4;&#x7ED9;Ignatius&#x7EDF;&#x8BA1;&#x7684;&#x5355;&#x8BCD;,&#x4E00;&#x4E2A;&#x7A7A;&#x884C;&#x4EE3;&#x8868;&#x5355;&#x8BCD;&#x8868;&#x7684;&#x7ED3;&#x675F;.&#x7B2C;&#x4E8C;&#x90E8;&#x5206;&#x662F;&#x4E00;&#x8FDE;&#x4E32;&#x7684;&#x63D0;&#x95EE;,&#x6BCF;&#x884C;&#x4E00;&#x4E2A;&#x63D0;&#x95EE;,&#x6BCF;&#x4E2A;&#x63D0;&#x95EE;&#x90FD;&#x662F;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;.</p>
<p>&#x6CE8;&#x610F;:&#x672C;&#x9898;&#x53EA;&#x6709;&#x4E00;&#x7EC4;&#x6D4B;&#x8BD5;&#x6570;&#x636E;,&#x5904;&#x7406;&#x5230;&#x6587;&#x4EF6;&#x7ED3;&#x675F;.</p>
<h3 id>&#x8F93;&#x51FA;</h3>
<p>&#x5BF9;&#x4E8E;&#x6BCF;&#x4E2A;&#x63D0;&#x95EE;,&#x7ED9;&#x51FA;&#x4EE5;&#x8BE5;&#x5B57;&#x7B26;&#x4E32;&#x4E3A;&#x524D;&#x7F00;&#x7684;&#x5355;&#x8BCD;&#x7684;&#x6570;&#x91CF;.</p>
<h3 id>&#x6837;&#x4F8B;&#x8F93;&#x5165;</h3>
<pre><code>banana
band
bee
absolute
acm

ba
b
band
abc
</code></pre>
<h3 id>&#x6837;&#x4F8B;&#x8F93;&#x51FA;</h3>
<pre><code>2
3
1
0
</code></pre>
<h2 id>&#x9898;&#x89E3;</h2>
<p>&#x6240;&#x4EE5;&#xFF0C;&#x6240;&#x8C13;&#x7684;&#x5B57;&#x5178;&#x6811;&#x5C31;&#x662F;&#x628A;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x90FD;&#x5B58;&#x8FDB;&#x4E00;&#x68F5;&#x6811;&#xFF0C;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x90FD;&#x653E;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x81F3;&#x591A;&#x4F1A;&#x6709; <code>26</code>&#x4E2A;&#x5B50;&#x8282;&#x70B9;&#x3002;<br>
&#x7136;&#x540E;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x5728;&#x8282;&#x70B9;&#x4E0A;&#x5B58;&#x4E00;&#x70B9;&#x522B;&#x7684;&#x73A9;&#x610F;&#xFF0C;&#x6765;&#x6EE1;&#x8DB3;&#x9898;&#x76EE;&#x60F3;&#x8981;&#x7684;&#x6548;&#x679C;&#x3002;<br>
&#x6BD4;&#x5982;&#x8BF4;&#xFF0C; <code>end</code> &#x8868;&#x793A;&#x8FD9;&#x662F;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#xFF0C;&#x90A3;&#x4E48;&#x4ECE;&#x6839;&#x8282;&#x70B9;&#x5230;&#x8FD9;&#x4E2A;&#x8282;&#x70B9;&#x6240;&#x7ECF;&#x8FC7;&#x7684;&#x5B57;&#x7B26;&#x5C31;&#x6B63;&#x597D;&#x6784;&#x6210;&#x4E86;&#x8FD9;&#x4E2A;<br>
&#x8BCD;&#x3002;<br>
<code>count</code> &#x8868;&#x793A;&#x8FD9;&#x4E2A;&#x5B57;&#x7B26;&#x5728;&#x540C;&#x6837;&#x7684;&#x4F4D;&#x7F6E;&#x51FA;&#x73B0;&#x4E86;&#x591A;&#x5C11;&#x6B21;&#x3002;<br>
etc.</p>
<h3 id>&#x4EE3;&#x7801;</h3>
<pre><code class="language-c++">#include&lt;bits/stdc++.h&gt;
#include &lt;stdio.h&gt;
struct node {
    bool end;
    node * children[26];
    int count = 0;
    ~node() {
        for (int i = 25; i &gt;= 0; i--)
        {
            if(this-&gt;children[i] != NULL) {
                this-&gt;children[i]-&gt;~node();
                delete this-&gt;children[i];
            }
        }
    }
    node() {
        end = false;
        for(int i = 0; i &lt; 26; i++)
            children[i] = NULL;
    }
};
node * root;
/**
 * &#x63D2;&#x5165;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x5B57;&#x7B26;&#x4E32;
 * @param str &#x5B57;&#x7B26;&#x4E32;&#x6570;&#x7EC4;
 * @param len &#x5B57;&#x7B26;&#x4E32;&#x957F;&#x5EA6;
 **/
void insert(char* str, int len) {
    if(!root) {
        root = new node;
    }
    node *location = root;
    for(int i = 0; i &lt; len; i++) {
        if(str[i] == 0 || str[i] == &apos;\n&apos;) continue;
        int id = str[i] - &apos;a&apos;;
        if(location-&gt;children[id] == NULL) {
            location-&gt;children[id] = new node;
        }
        location = location-&gt;children[id];
        location-&gt;count++;
    }
    location-&gt;end = true;
}
/**
 * &#x67E5;&#x627E;&#x6307;&#x5B9A;&#x5B57;&#x7B26;&#x4E32;&#x5728;&#x6811;&#x4E2D;&#x7684;&#x957F;&#x5EA6;
 * @param str &#x5B57;&#x7B26;&#x4E32;&#x6570;&#x7EC4;
 * @param len &#x5B57;&#x7B26;&#x4E32;&#x957F;&#x5EA6;
 **/
int search(char * str, int len) {
    node * location = root;
    for (int i = 0; i &lt; len; i++)
    {
        int id = str[i] - &apos;a&apos;;
        if(location-&gt;children[id] == NULL)
            return 0;
        location = location-&gt;children[id];
    }
    return location-&gt;count;
}
char str[20];
int main() {
    while (1)
    {
        fgets(str, 15, stdin);
        int len = strlen(str);
        if(len == 1) {
            break;
        }
        insert(str, len);
    }
    while (~scanf(&quot;%s&quot;, str))
    {
        int len = strlen(str);
        if(len == 0) {
            break;
        }
        printf(&quot;%d\n&quot;, search(str, len));
    }
    
}
</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[于是乎，我就这样活过了2020：这是一篇年末总结]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x5F00;&#x59CB;&#x7B56;&#x5212;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EE5;&#x4E3A;&#x8FD9;&#x4F1A;&#x662F;&#x4E00;&#x7BC7;&#x8D1F;&#x80FD;&#x91CF;&#x6EE1;&#x6EE1;&#x7684;&#x6587;&#x7AE0;&#x3002;</p>
<p>&#x8FD9;&#x786E;&#x5B9E;&#x662F;<a href="https://zh.wikipedia.org/wiki/2020%E5%B9%B4">&#x4E0D;&#x597D;&#x8FC7;&#x7684;&#x4E00;&#x5E74;</a>&#xFF0C;&#x65E0;&#x8BBA;&#x662F;&#x5BF9;&#x4E8E;&#x6211;&#x8FD8;&#x662F;&#x5BF9;&#x4E8E;&#x8FD9;</p>]]></description><link>https://blog.lss233.com/hi-2021/</link><guid isPermaLink="false">6024d72081c0bcbcde7de989</guid><category><![CDATA[年末总结]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Thu, 31 Dec 2020 16:01:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1608903955950-ade266e1a7f2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDE5fHwyMDIxfGVufDB8fHw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1608903955950-ade266e1a7f2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=MXwxMTc3M3wwfDF8c2VhcmNofDE5fHwyMDIxfGVufDB8fHw&amp;ixlib=rb-1.2.1&amp;q=80&amp;w=2000" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;"><p>&#x5F00;&#x59CB;&#x7B56;&#x5212;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x4EE5;&#x4E3A;&#x8FD9;&#x4F1A;&#x662F;&#x4E00;&#x7BC7;&#x8D1F;&#x80FD;&#x91CF;&#x6EE1;&#x6EE1;&#x7684;&#x6587;&#x7AE0;&#x3002;</p>
<p>&#x8FD9;&#x786E;&#x5B9E;&#x662F;<a href="https://zh.wikipedia.org/wiki/2020%E5%B9%B4">&#x4E0D;&#x597D;&#x8FC7;&#x7684;&#x4E00;&#x5E74;</a>&#xFF0C;&#x65E0;&#x8BBA;&#x662F;&#x5BF9;&#x4E8E;&#x6211;&#x8FD8;&#x662F;&#x5BF9;&#x4E8E;&#x8FD9;&#x4E2A;&#x4E16;&#x754C;&#x3002;</p>
<p>&#x4E0D;&#x8FC7;&#x4E5F;&#x7B97;&#x6709;&#x597D;&#x4E8B;&#x53D1;&#x751F;&#x5566;&#x2026;&#x2026; &#x6BD4;&#x5982;&#x8BF4;&#x6211;&#x8FD8;&#x6D3B;&#x7740;&#x3002;</p>
<h1 id>&#x8FC7;&#x53BB;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x6211;&#x505A;&#x4E86;&#x4EC0;&#x4E48;&#xFF1F;</h1>
<p>&#x4EC0;&#x4E48;&#x4E5F;<strong>&#x6CA1;</strong>&#x505A;&#x3002;</p>
<p>&#x8FD9;&#x4E48;&#x8BF4;&#x770B;&#x8D77;&#x6765;&#x6709;&#x4E9B;&#x4E0D;&#x8D1F;&#x8D23;&#x4EFB;&#xFF0C;&#x4F46;&#x4E8B;&#x5B9E;&#x786E;&#x5B9E;&#x662F;&#x8FD9;&#x6837;&#x3002;&#x5728;&#x5199;&#x8FD9;&#x7BC7;&#x603B;&#x7ED3;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x6CA1;&#x6709;&#x4EFB;&#x4F55; TODO&#x3002;&#x8FD9;&#x4E0D;&#x662F;&#x8BF4;&#x6211;&#x5DF2;&#x7ECF;&#x628A;&#x6240;&#x6709;&#x7684; TODO &#x90FD;&#x5B8C;&#x6210;&#x4E86;&#xFF0C;&#x800C;&#x662F;&#x6211;&#x6839;&#x672C;&#x6CA1;&#x6709;&#x5F00;&#x8FC7;&#x4EFB;&#x4F55;&#x5751;&#x3002;</p>
<p>&#x6211;&#x627E;&#x4E0D;&#x5230;2018&#x5E74;&#x65F6;&#x7684;&#x6211;&#x5BF9;2019&#x5E74;&#x7684;&#x5C55;&#x671B;&#x548C;&#x89C4;&#x5212;&#xFF0C;&#x5927;&#x6982;&#x662F;&#x88AB;&#x67D0;&#x4E9B;&#x91CD;&#x5927;&#x4E8B;&#x9879;&#x7ED9;&#x803D;&#x8BEF;&#x4E86;&#x3002;</p>
<p>&#x6211;&#x540C;&#x6837;&#x6CA1;&#x6709;&#x627E;&#x5230;&#x90A3;&#x4E2A;&#x7279;&#x6B8A;&#x591C;&#x665A;&#x51C6;&#x5907;&#x5199;&#x7684;&#x6240;&#x8C13; <code>Lss233 v2.0 proposal</code>&#x3002;</p>
<p>&#x8FD9;&#x4E00;&#x5E74;&#xFF0C;&#x6211;&#x2026;&#x2026;</p>
<ul>
<li>&#x5199;&#x4E86; <code>1000+</code> &#x884C;&#x4EE3;&#x7801;&#xFF0C;&#x5916;&#x5305;&#x4E86; <code>15+</code> &#x4E2A;&#x9879;&#x76EE;&#x3002;</li>
<li>&#x535A;&#x5BA2;&#x53D1;&#x5E03;&#x4E86; 1 &#x7BC7;&#x6587;&#x7AE0;&#xFF0C;&#x5176;&#x4E2D; 1 &#x7BC7;&#x4E3A;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x3002;</li>
<li>&#x8FFD;&#x4E86; <code>0</code> &#x90E8;&#x756A;&#xFF0C; &#x770B;&#x4E86; <code>1</code> &#x90E8;&#x7F8E;&#x5267;&#x3002;</li>
</ul>
<h2 id="acmer">&#x65B0;&#x589E;&#x4EBA;&#x751F;&#x5C65;&#x5386;&#xFF1A;&#x5728;&#x5F79; ACMer</h2>
<p>&#x4ECE;&#x5C0F;&#x5230;&#x5927;&#x90FD;&#x6CA1;&#x6709;&#x771F;&#x6B63;&#x53C2;&#x52A0;&#x8FC7;&#x7B97;&#x6CD5;&#x7ADE;&#x8D5B;&#x3002;&#x5728;&#x77E5;&#x9053;&#x5927;&#x5B66;&#x4E5F;&#x6709;&#x7C7B;&#x4F3C;&#x7684;&#x7B97;&#x6CD5;&#x7ADE;&#x8D5B;&#x65F6;&#xFF0C;&#x5728;&#x586B;&#x5199;&#x5FD7;&#x613F;&#x65F6;&#x5C31;&#x51B3;&#x5B9A;&#x8981;&#x52A0;&#x5165; ACM &#x96C6;&#x8BAD;&#x961F;&#x4E86;&#x3002;</p>
<p>&#x4E0D;&#x9519;&#x7684;&#x662F;&#xFF0C;&#x6211;&#x6210;&#x529F;&#x5728; 2020&#x5E74;11&#x6708;11&#x65E5;&#x6EE1;&#x8DB3;&#x4E86;&#x96C6;&#x8BAD;&#x961F;&#x7684;&#x62DB;&#x65B0;&#x6807;&#x51C6;&#xFF0C;&#x6210;&#x4E3A;&#x4E86;&#x4E00;&#x540D;&#x5728;&#x5F79; ACMer&#x3002;</p>
<p><img src="https://blog.lss233.com/content/images/2020/12/image.png" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#x6211;&#x662F;&#x6700;&#x65E9;&#x5165;&#x961F;&#x7684;&#x65B0;&#x751F;&#xFF0C;&#x4F46;&#x6211;&#x6CA1;&#x60F3;&#x5230;&#x7684;&#x662F;&#x5728;&#x8FD9;&#x91CC;&#x5C45;&#x7136;&#x4E5F;&#x80FD;&#x9047;&#x5230; exOIer&#x3002;</p>
<p>&#x7528;&#x81EA;&#x5DF1;&#x7684;&#x9879;&#x76EE;&#x7ECF;&#x9A8C;&#x548C;&#x4ED6;&#x4EEC;&#x7684;&#x7B97;&#x6CD5;&#x7ECF;&#x9A8C;&#x6765;&#x6BD4;&#xFF0C;&#x786E;&#x5B9E;&#x6709;&#x4E9B;&#x529B;&#x4E0D;&#x4ECE;&#x5FC3;&#x2026;&#x2026;</p>
<p>&#x5F53;&#x7136;&#x4E86;&#xFF0C;&#x63D0;&#x9AD8;&#x81EA;&#x5DF1;&#x6700;&#x91CD;&#x8981;&#x561B;&#x3002;</p>
<h2 id>&#x65B0;&#x589E;&#x7528;&#x6237;&#x753B;&#x50CF;&#xFF1A;&#x97F3;&#x6E38;&#x73A9;&#x5BB6;</h2>
<p>&#x6700;&#x521D;&#x6210;&#x4E3A;&#x97F3;&#x6E38;&#x73A9;&#x5BB6;&#x662F;&#x56E0;&#x4E3A;&#x67D0;&#x65E5; <code>CytusII</code> &#x9650;&#x514D;&#xFF0C;&#x6211;&#x7A0D;&#x5FAE;&#x6E38;&#x73A9;&#x4E00;&#x756A;&#x540E;&#x88AB;&#x5267;&#x60C5;&#x8BBE;&#x5B9A;&#x6240;&#x5438;&#x5F15;&#xFF0C;&#x624D;&#x4E00;&#x53D1;&#x4E0D;&#x53EF;&#x6536;&#x5730;&#x5F00;&#x59CB;&#x73A9;&#x5404;&#x79CD;&#x97F3;&#x6E38;&#x7684;&#x3002;</p>
<p>&#x559C;&#x6B22; <code>CytusII</code> &#x5267;&#x60C5;&#x662F;&#x56E0;&#x4E3A;&#x5B83;&#x91C7;&#x7528;&#x7684;&#x662F; POV &#x7684;&#x53D9;&#x8FF0;&#x98CE;&#x683C;&#xFF0C;&#x6545;&#x4E8B;&#x80CC;&#x666F;&#x4E0E;&#x8BA1;&#x7B97;&#x673A;&#x76F8;&#x5173;&#xFF0C;&#x975E;&#x5E38;&#x79D1;&#x5E7B;&#xFF08;&#x4EE5;&#x53CA;&#x6211;&#x662F;&#x4E2A;otaku&#xFF09;&#x3002;</p>
<p><img src="https://blog.lss233.com/content/images/2020/12/image-1.png" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#x81F3;&#x4E8E;&#x6211;&#x81EA;&#x5DF1;&#x7684;&#x90A3;&#x90E8;&#x5C0F;&#x8BF4;&#x2026;&#x2026; &#x5927;&#x6982;&#x662F;&#x5F03;&#x5751;&#x4E86;&#x7F62;&#x3002;</p>
<h2 id="250smtpserverconnectionestablished">250 SMTP server connection established</h2>
<p>&#x7ED9;&#x81EA;&#x5DF1;&#x5BC4;&#x4E86;&#x4E00;&#x5F20;&#x660E;&#x4FE1;&#x7247;&#xFF0C;&#x7B97;&#x597D;&#x62B5;&#x8FBE;&#x65E5;&#x671F;&#x540E;&#x771F;&#x7684;&#x62FF;&#x5230;&#x4E86;&#x5B83;&#xFF01;&#x7B97;&#x662F;&#x6EE1;&#x8DB3;&#x4E86;&#x6211;&#x4F7F;&#x7528;&#x90AE;&#x4EF6;&#x901A;&#x8BAF;&#x7684;&#x613F;&#x671B;&#x5427;~</p>
<p><img src="https://blog.lss233.com/content/images/2021/01/image.png" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#xFF08;&#x539F;&#x6765;&#x90AE;&#x6233;&#x4E5F;&#x5C31;&#x8FD9;&#x6837;&#x561B;&#xFF09;</p>
<p>&#x901A;&#x8FC7;&#x660E;&#x4FE1;&#x7247;&#xFF0C;&#x5728;&#x4F20;&#x7EDF;&#x90AE;&#x4EF6;&#x901A;&#x8BAF;&#x4E2D;&#x5B9E;&#x73B0;  <a href="https://tools.ietf.org/html/rfc5321">RFC 5321 -  Simple Mail Transfer Protocol</a>&#xFF0C;<s>&#x8FD9;&#x5927;&#x6982;&#x5C31;&#x662F; IT &#x4EBA;&#x7684;&#x6D6A;&#x6F2B;&#xFF1F;</s></p>
<h2 id>&#x5199;&#x4EE3;&#x7801;&#xFF0C;&#x597D;&#x8F9B;&#x82E6;</h2>
<p>&#x5728;&#x7B49;&#x5F85;&#x5F00;&#x5B66;&#x7684;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x91CC;&#xFF0C;&#x6211;&#x7684;&#x4E00;&#x4E2A;&#x654F;&#x6377;&#x5F00;&#x53D1;&#x7684; Web &#x9879;&#x76EE;&#x624D;&#x7ED3;&#x675F;&#xFF0C;&#x8BD5;&#x7740;&#x63A5;&#x5355;&#x63D2;&#x4EF6;&#x5F00;&#x53D1;&#x4F11;&#x606F;&#x4E00;&#x4E0B;&#x3002;</p>
<p>&#x56DE;&#x5FC6;&#x8D77;&#x6765;&#xFF0C;&#x6700;&#x5F00;&#x59CB;&#x7684;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#x8FD8;&#x662F;&#x6BD4;&#x8F83;&#x6709;&#x65B0;&#x9C9C;&#x611F;&#x7684;&#xFF0C;&#x4F46;&#x540E;&#x6765;&#x5C31;&#x8D8A;&#x6765;&#x8D8A;&#x89C9;&#x5F97;&#x67AF;&#x71E5;&#x4E86;&#x3002;</p>
<p><img src="https://blog.lss233.com/content/images/2020/12/image-2.png" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#x6BCF;&#x5929;&#x65E9;&#x4E0A;&#x9192;&#x8FC7;&#x6765;&#x65E0;&#x975E;&#x662F;&#x63A5;&#x5230;&#x9879;&#x76EE;&#x9700;&#x6C42;&#xFF0C;&#x521B;&#x5EFA;&#x9879;&#x76EE;&#xFF0C;&#x5199;&#x4EE3;&#x7801;&#xFF0C;&#x8C03;&#x8BD5;&#xFF0C;&#x5199;&#x4EE3;&#x7801;&#xFF0C;&#x8C03;&#x8BD5;&#xFF0C;&#x5199;&#x4EE3;&#x7801;&#xFF0C;&#x8C03;&#x8BD5;&#xFF0C;&#x4EA4;&#x4ED8;&#x7248;&#x672C;1&#xFF0C;&#x8C03;&#x8BD5;&#xFF0C;&#x4EA4;&#x4ED8;&#x7248;&#x672C;2&#x2026;&#x2026;&#x6536;&#x94B1;&#x3002;</p>
<p>&#x5927;&#x6982;&#x6211;&#x5BF9;&#x5199;&#x4EE3;&#x7801;&#x7684;&#x538C;&#x6076;&#x611F;&#x4E5F;&#x662F;&#x4ECE;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x57F9;&#x517B;&#x8D77;&#x6765;&#x7684;&#x3002;&#x6709;&#x4E9B;&#x9879;&#x76EE;&#x9700;&#x6C42;&#x5927;&#x540C;&#x5C0F;&#x5F02;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4E5F;&#x5199;&#x4E86;&#x4E00;&#x4E24;&#x4E2A;&#x6846;&#x67B6;&#x51FA;&#x6765;&#x3002;</p>
<ul>
<li>MiniGame: <a href="https://github.com/lss233/MIniGame">https://github.com/lss233/MIniGame</a></li>
<li>SimplestGUI: <a href="https://github.com/lss233/SimplestGUI">https://github.com/lss233/SimplestGUI</a></li>
</ul>
<p>&#x8BA9;&#x6211;&#x6700;&#x75DB;&#x82E6;&#x7684;&#x662F;&#x96C6;&#x7FA4;&#x73AF;&#x5883;&#x4E0B;&#x7684;&#x6570;&#x636E;&#x5E93;&#x76F8;&#x5173;&#x63D2;&#x4EF6;&#x5F00;&#x53D1;&#x3002;&#x65E2;&#x8981;&#x8003;&#x8651;&#x5230;&#x51B2;&#x7A81;&#x95EE;&#x9898;&#xFF0C;&#x53C8;&#x8981;&#x8003;&#x8651;&#x540C;&#x6B65;&#x95EE;&#x9898;&#xFF0C;&#x4E5F;&#x8BB8;&#x9700;&#x8981;&#x597D;&#x597D;&#x5B66;&#x4E60;&#x4E00;&#x4E0B;&#x4E86;&#x3002;</p>
<p>&#x5728; Web &#x9879;&#x76EE;&#x4E0A;&#x5C1D;&#x8BD5;&#x4F7F;&#x7528;&#x4E86;&#x4E00;&#x4E0B; ElasticSearch&#xFF0C;&#x4F46;&#x4ECD;&#x7136;&#x6CA1;&#x6709;&#x600E;&#x4E48;&#x641E;&#x61C2;&#x3002;</p>
<p><img src="https://blog.lss233.com/content/images/2020/12/image-3.png" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;" loading="lazy"></p>
<p>&#x5BF9;&#x4E8E;&#x524D;&#x7AEF;&#xFF0C;&#x6700;&#x75DB;&#x82E6;&#x7684;&#x83AB;&#x8FC7;&#x4E8E;&#x9002;&#x914D;&#x5404;&#x79CD;&#x5206;&#x8FA8;&#x7387;&#x7684;&#x663E;&#x793A;&#x5C4F;&#x2026;&#x2026;</p>
<p>&#x8FD9;&#x6BB5;&#x671F;&#x95F4;&#x6700;&#x5927;&#x7684;&#x6536;&#x83B7;&#x6709;&#x4E24;&#x4E2A;&#xFF1A;</p>
<ol>
<li>SQL &#x8BED;&#x53E5;&#x4E2D;&#x5224;&#x65AD;&#x5B57;&#x6BB5;&#x4E3A; <code>NULL</code> &#x5E94;&#x8BE5;&#x7528; <code> IS NULL</code> &#x800C;&#x4E0D;&#x662F; <code>= NULL</code>&#x3002;</li>
<li>&#x5728;&#x9879;&#x76EE;&#x4E2D;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5B57;&#x6BB5;&#x5197;&#x4F59;&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x66F4;&#x5FEB;&#x5730;&#x4E3A;&#x7528;&#x6237;&#x5448;&#x73B0;&#x4FE1;&#x606F;&#x3002;&#x5176;&#x5B9E;&#x5728;&#x7B97;&#x6CD5;&#x4E2D;&#x4E5F;&#x6709;&#x901A;&#x8FC7;&#x727A;&#x7272;&#x7A7A;&#x95F4;&#x6765;&#x6362;&#x53D6;&#x6548;&#x7387;&#x7684;&#x4F8B;&#x5B50;&#x3002;&#x8FC7;&#x53BB;&#x8FC7;&#x4E8E;&#x6C89;&#x8FF7;&#x4E8E;&#x5173;&#x8054;&#x67E5;&#x8BE2;&#xFF0C;&#x4F46;&#x662F;&#x6548;&#x7387;&#x5B9E;&#x5728;&#x662F;&#x592A;&#x6162;&#x5566;&#xFF01;</li>
</ol>
<h2 id>&#x4E5F;&#x8BB8;&#x65E0;&#x7F18;&#x8BA1;&#x7B97;&#x673A;&#x4E86;&#x7F62;</h2>
<p>&#x4E00;&#x76F4;&#x5230;&#x586B;&#x62A5;&#x5FD7;&#x613F;&#x65F6;&#xFF0C;&#x6211;&#x8FD8;&#x662F;&#x6CA1;&#x60F3;&#x597D;&#x5230;&#x5E95;&#x9664;&#x4E86;&#x8BA1;&#x7B97;&#x673A;&#x4E4B;&#x5916;&#x8FD8;&#x6709;&#x4EC0;&#x4E48;&#x522B;&#x7684;&#x9009;&#x62E9;&#x3002;&#x6240;&#x4EE5;&#x6211;&#x7684;&#x7B2C;&#x4E00;&#x5FD7;&#x613F;&#x8FD8;&#x662F; <code>&#x8BA1;&#x7B97;&#x673A;&#x79D1;&#x5B66;&#x4E0E;&#x6280;&#x672F;</code> &#xFF0C;&#x66F4;&#x52A0;&#x6DF1;&#x5165;&#x5730;&#x4E86;&#x89E3;&#x8BA1;&#x7B97;&#x673A;&#x9B54;&#x6CD5;&#x3002;</p>
<p>&#x53EF;&#x8C01;&#x66FE;&#x60F3;&#x2026;&#x2026; &#x6211;&#x6700;&#x540E;&#x4EE5; 1 &#x5206;&#x4E4B;&#x5DEE;&#x7684;&#x7ED3;&#x5C40;&#x8FDB;&#x5165;&#x4E86; <code>&#x8F6F;&#x4EF6;&#x5DE5;&#x7A0B;</code> &#x4E13;&#x4E1A;&#x3002;</p>
<p>&#x5728;&#x6211;&#x770B;&#x6765;&#xFF0C; &#x8F6F;&#x4EF6;&#x5DE5;&#x7A0B;&#x4E13;&#x4E1A;&#x65E0;&#x975E;&#x662F;&#x5728;&#x6559;&#x4F60;&#x600E;&#x4E48;&#x628A;&#x79EF;&#x6728;&#x642D;&#x597D;&#xFF0C;&#x800C; <code>&#x8BA1;&#x7B97;&#x673A;&#x79D1;&#x5B66;&#x4E0E;&#x6280;&#x672F;</code> &#x624D;&#x80FD;&#x66F4;&#x6DF1;&#x5165;&#x7CFB;&#x7EDF;&#x5730;&#x4E86;&#x89E3;&#x8BA1;&#x7B97;&#x673A;&#xFF0C;&#x5B66;&#x4E60;&#x8BBE;&#x8BA1;&#x54F2;&#x5B66;&#xFF0C;&#x518D;&#x53CD;&#x54FA;&#xFF0C;&#x521B;&#x9020;&#x3002;</p>
<p><strong>&#x8FD9;&#x6839;&#x672C;&#x4E0D;&#x662F;&#x6211;&#x60F3;&#x8981;&#x7684;&#xFF01;</strong></p>
<p>&#x542C;&#x7740;&#x65E9;&#x5C31;&#x88AB;&#x81EA;&#x5DF1;&#x5F53;&#x4F5C;&#x5E38;&#x8BC6;&#x7684;&#x4E13;&#x4E1A;&#x8BFE;&#xFF0C;&#x5076;&#x5C14;&#x7ED9;&#x5B66;&#x59D0;&#x8F85;&#x5BFC;&#x4F5C;&#x4E1A;&#x2026;&#x2026; &#x6211;&#x66F4;&#x591A;&#x7684;&#x662F;&#x5BF9;&#x672A;&#x6765;&#x7684;&#x8FF7;&#x8292;&#x3002;</p>
<p>&#x5982;&#x4F55;&#x5229;&#x7528;&#x5DF2;&#x6709;&#x7684;&#x4F18;&#x52BF;&#x521B;&#x9020;&#x66F4;&#x591A;&#x7684;&#x4F18;&#x52BF;&#xFF1F;&#x6211;&#x4E0D;&#x77E5;&#x9053;&#x2026;&#x2026; &#x8BF7;&#x5E2E;&#x5E2E;&#x6211;&#xFF01;</p>
<h2 id="svg">&#x53D1;&#x73B0;&#x4E86; SVG &#x7684;&#x795E;&#x5947;&#x73A9;&#x6CD5;</h2>
<p>&#x4EE5;&#x524D;&#x5BF9;&#x4E8E; SVG &#x7684;&#x7406;&#x89E3;&#x4EC5;&#x5C40;&#x9650;&#x4E8E;&#x77E2;&#x91CF;&#x56FE;&#x3002;&#x4F46; GitHub &#x53EF;&#x4EE5;&#x81EA;&#x5B9A;&#x4E49; Profile Readme &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x6709;&#x4E86;&#x4E00;&#x4E2A;&#x5927;&#x80C6;&#x7684;&#x60F3;&#x6CD5;&#x2026;&#x2026;</p>
<img src="https://lss233-readme.vercel.app/api/readme" width="100%" alt="&#x4E8E;&#x662F;&#x4E4E;&#xFF0C;&#x6211;&#x5C31;&#x8FD9;&#x6837;&#x6D3B;&#x8FC7;&#x4E86;2020&#xFF1A;&#x8FD9;&#x662F;&#x4E00;&#x7BC7;&#x5E74;&#x672B;&#x603B;&#x7ED3;">
<p>&#x901A;&#x8FC7; SVG &#x6765;&#x5B9E;&#x73B0;&#x7684;&#x52A8;&#x6001;&#x56FE;&#x7247;&#x3002;&#x540E;&#x7AEF;&#x91C7;&#x7528; NodeJS &#x7F16;&#x5199;&#xFF0C;&#x56FE;&#x7247;&#x7EAF;XML&#x5B9E;&#x73B0;&#xFF0C;&#x5B8C;&#x5168;&#x4E0D;&#x7528;&#x53BB;&#x7814;&#x7A76;&#x90A3;&#x4E9B;&#x4EC0;&#x4E48;&#x8BA9;&#x4EBA;&#x5934;&#x75BC; GD Library&#xFF01;</p>
<p>&#x8FD8;&#x53EF;&#x4EE5;&#x52A0;&#x5165;&#x4EA4;&#x4E92;&#x6548;&#x679C;&#xFF08;GitHub &#x4E0D;&#x652F;&#x6301;&#xFF09;&#xFF0C; &#x662F;&#x4E0D;&#x662F;&#x5F88;&#x68D2;&#xFF01;</p>
<p>&#x6211;&#x8FD8;&#x7528;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x5236;&#x4F5C;&#x4E86; <code>Lss233&apos;s.Mirror();</code> &#x7684;&#x4F7F;&#x7528;&#x91CF;&#x7EDF;&#x8BA1;&#xFF0C;&#x548C;&#x4E4B;&#x524D;&#x4E0D;&#x7A33;&#x5B9A;&#x7684; GoAccess &#x6BD4;&#x8D77;&#x6765;&#x597D;&#x591A;&#x4E86;&#x3002;</p>
<p>&#x672C;&#x6765;&#x6253;&#x7B97;&#x5199;&#x4E00;&#x4E2A;&#x5B8C;&#x5584;&#x7684;&#x6559;&#x7A0B;&#xFF0C;&#x90A3;&#x4E48;&#x2026;&#x2026;&#x7559;&#x5728;&#x4ECA;&#x5E74;&#x5427;&#xFF01;</p>
<h1 id>&#x4ECA;&#x5E74;&#x6253;&#x7B97;&#x505A;&#x4E9B;&#x4EC0;&#x4E48;&#x5462;&#xFF1F;</h1>
<p>&#x5BF9;&#x4E8E;&#x8FD9;&#x4E2A;&#x73AF;&#x8282;&#xFF0C;&#x6211;&#x5176;&#x5B9E;&#x5DF2;&#x7ECF;&#x4E0D;&#x518D;&#x6709;&#x4EC0;&#x4E48;&#x671F;&#x5F85;&#x4E86;&#x3002;&#x6BCF;&#x6B21;&#x7684;&#x671F;&#x5F85;&#xFF0C;&#x5230;&#x6700;&#x540E;&#x4F3C;&#x4E4E;&#x90FD;&#x6CA1;&#x6709;&#x5B8C;&#x6210;&#x3002;</p>
<p>&#x8FD9;&#x4E00;&#x5E74;&#xFF0C;&#x6211;&#x6253;&#x7B97;&#x2026;&#x2026;</p>
<ul>
<li>&#x5165;&#x95E8;&#x300A;&#x7F16;&#x8BD1;&#x539F;&#x7406;&#x300B;&#x4E0E;&#x51FD;&#x6570;&#x5F0F;&#x7F16;&#x7A0B;&#xFF0C;&#x662F;&#x4E2A;&#x4E0D;&#x9519;&#x7684;&#x673A;&#x4F1A;&#x3002;</li>
<li>Rust</li>
<li>&#x8BA1;&#x7B97;&#x673A;&#x7F51;&#x7EDC;</li>
<li>&#x4E00;&#x4E2A;&#x672A;&#x5B8C;&#x6210;&#x7684;&#x5267;&#x60C5;&#x53D9;&#x8FF0;&#x578B;&#x6E38;&#x620F; <code>LollipopOS</code></li>
<li>&#x5982;&#x679C;&#x53EF;&#x4EE5;&#x7684;&#x8BDD;&#xFF0C;&#x518D;&#x5199;&#x4E00;&#x4E2A; Web &#x9879;&#x76EE;&#x5427;&#x3002;</li>
</ul>
<h1 id="end">End</h1>
<p>&#x603B;&#x7684;&#x6765;&#x8BF4;&#xFF0C;&#x8FD9;&#x5E76;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x8BA9;&#x6211;&#x6EE1;&#x610F;&#x7684;&#x4E00;&#x5E74;&#xFF0C;&#x4F46;&#x4E5F;&#x7B97;&#x6B63;&#x5E38;&#x3002;&#x6709;&#x9057;&#x61BE;&#xFF0C;&#x4E5F;&#x6709;&#x6536;&#x83B7;&#x3002;</p>
<p>2021&#xFF0C;&#x4F1A;&#x66F4;&#x597D;&#x5417;&#xFF1F;</p>
<p>&#x6700;&#x597D;&#x7684;&#x795D;&#x613F;&#x7ED9;2021&#x5E74;&#x7684;Lss233&#x3002;</p>
<p align="right">--- Lss233,&#x4E8E;2020&#x5E74;&#x4E0E;2021&#x5E74;&#x4EA4;&#x9645;&#x4E4B;&#x65F6;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[这个Lss233一事无成却敢写年末总结：2019，再见啦。]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x4F60;&#x662F;&#x6D3B;&#x4E86;365&#x5929;&#xFF0C;&#x628A;1&#x5929;&#x8FC7;&#x4E86;365&#x904D;&#xFF1F;<br>
&#x4E5F;&#x8BB8;&#x662F;&#x7F3A;&#x5C11;&#x4E86;&#x4E00;&#x4E9B;&#x4EEA;&#x5F0F;&#x611F;&#xFF0C;&#x6211;&#x53D1;&#x73B0;&#x8FD9;&#x4E00;&#x5E74;&#x8FC7;&#x5F97;&#x597D;&#x5FEB;&#x3002;</p>
<h1 id="lss233">&#x8FC7;&#x53BB;&#x7684;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;Lss233&#x505A;&#x4E86;&#x4E9B;&#x4EC0;</h1>]]></description><link>https://blog.lss233.com/hi-2020/</link><guid isPermaLink="false">6024d72081c0bcbcde7de987</guid><category><![CDATA[年末总结]]></category><category><![CDATA[无意义]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Wed, 01 Jan 2020 03:11:48 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1577634049427-6b5428113309?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1577634049427-6b5428113309?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="&#x8FD9;&#x4E2A;Lss233&#x4E00;&#x4E8B;&#x65E0;&#x6210;&#x5374;&#x6562;&#x5199;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF1A;2019&#xFF0C;&#x518D;&#x89C1;&#x5566;&#x3002;"><p>&#x4F60;&#x662F;&#x6D3B;&#x4E86;365&#x5929;&#xFF0C;&#x628A;1&#x5929;&#x8FC7;&#x4E86;365&#x904D;&#xFF1F;<br>
&#x4E5F;&#x8BB8;&#x662F;&#x7F3A;&#x5C11;&#x4E86;&#x4E00;&#x4E9B;&#x4EEA;&#x5F0F;&#x611F;&#xFF0C;&#x6211;&#x53D1;&#x73B0;&#x8FD9;&#x4E00;&#x5E74;&#x8FC7;&#x5F97;&#x597D;&#x5FEB;&#x3002;</p>
<h1 id="lss233">&#x8FC7;&#x53BB;&#x7684;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;Lss233&#x505A;&#x4E86;&#x4E9B;&#x4EC0;&#x4E48;&#xFF1F;</h1>
<p>&#x5728;&#x5199;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x54B1;&#x5148;&#x56DE;&#x987E;&#x4E86;&#x4E00;&#x4E0B;<a href="https://blog.lss233.com/hi-2019/">18&#x5E74;&#x5199;&#x7684;&#x5E74;&#x672B;&#x603B;&#x7ED3;</a>&#x3002;&#x5F88;&#x68D2;&#xFF0C;&#x6D88;&#x6781;&#x7684;&#x9884;&#x8A00;&#x90FD;&#x5B9E;&#x73B0;&#x4E86;&#xFF0C;&#x79EF;&#x6781;&#x7684;&#x9884;&#x8A00;&#x4E00;&#x4E2A;&#x4E5F;&#x6CA1;&#x6709;&#x3002;</p>
<h2 id="added">Added: &#x3053;&#x3093;&#x306B;&#x3061;&#x308F;</h2>
<p>&#x2018;&#x5B66;&#x4E60;&#x4E00;&#x95E8;&#x65B0;&#x7684;&#x5916;&#x8BED;&#x3002;&#x2019; &#x6211;&#x8BB0;&#x5F97;&#x5199;&#x8FD9;&#x53E5;&#x8BDD;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x5728;Duolinguo&#x81EA;&#x5B66;&#x6CD5;&#x8BED;&#x3002;&#x540E;&#x6765;&#x56E0;&#x4E3A;&#x67D0;&#x79CD;&#x539F;&#x56E0;&#x6CA1;&#x6709;&#x575A;&#x6301;&#x4E0B;&#x53BB;&#x4E86;&#x3002;&#x5F53;&#x521D;&#x7684;&#x60F3;&#x6CD5;&#x662F;&#x5148;&#x81EA;&#x5B66;&#x4E00;&#x4E9B;&#x62C9;&#x4E01;&#x8BED;&#x7CFB;&#x7684;&#x8BED;&#x8A00;&#xFF0C;&#x6700;&#x540E;&#x5B66;&#x65E5;&#x8BED;&#x3002;&#x7ED3;&#x679C;&#x2026;&#x2026;&#x6211;&#x73B0;&#x5728;&#x6253;&#x7B97;&#x4E3B;&#x653B;&#x65E5;&#x8BED;&#x5566;&#x3002;</p>
<h2 id="updated">Updated: &#x66F4;&#x65B0;&#x4E86;&#x4EBA;&#x751F;&#x89C4;&#x5212;&#xFF0C;&#x672A;&#x6765;&#x662F;&#x8FF7;&#x832B;&#x7684;</h2>
<p>&#x8BB0;&#x5F97;&#x6211;&#x6700;&#x521D;&#x7684;&#x4EBA;&#x751F;&#x89C4;&#x5212;&#x662F;&#xFF0C;&#x62A5;&#x8003;&#x8BA1;&#x7B97;&#x673A;&#x7CFB;&#xFF0C;&#x6BD5;&#x4E1A;&#x4E4B;&#x540E;&#x5728;&#x5927;&#x4F01;&#x5DE5;&#x4F5C;&#x3002;&#x4E0D;&#x8FC7;&#x6211;&#x8981;&#x653E;&#x5F03;&#x8FD9;&#x4E2A;&#x89C4;&#x5212;&#x4E86;&#xFF0C;19&#x5E74;&#x91CC;&#x770B;&#x89C1;&#x4E86;&#x4E0D;&#x5C11;&#x7A0B;&#x5E8F;&#x5458;&#x731D;&#x6B7B;&#x3001;&#x88AB;&#x516C;&#x53F8;&#x538B;&#x69A8;&#x7684;&#x62A5;&#x9053;&#x2026;&#x2026;<br>
&#x6211;&#x5E0C;&#x671B;&#x6211;&#x52AA;&#x529B;&#x594B;&#x6597;&#x7684;&#x7ED3;&#x679C;&#x6362;&#x6765;&#x7684;&#x662F;&#x6BD4;&#x73B0;&#x5728;&#x66F4;&#x8F7B;&#x677E;&#x7684;&#x751F;&#x6D3B;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x66F4;&#x8270;&#x96BE;&#x7684;&#x3002;</p>
<p>&#x2018;&#x5BFB;&#x627E;&#x65B0;&#x7684;&#x673A;&#x9047;&#x3002;&#x2019;&#x5F88;&#x6210;&#x529F;&#xFF0C;&#x73B0;&#x5728;&#x6211;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x60F3;&#x6CD5;&#x4E86;&#x3002;&#x5982;&#x679C;&#x8BA9;&#x6211;&#x81EA;&#x5DF1;&#x6765;&#x7684;&#x8BDD;&#xFF0C;&#x4E5F;&#x8BB8;&#x662F;&#x4E00;&#x4E2A;&#x66F4;&#x597D;&#x7684;&#x9009;&#x62E9;&#xFF1F;</p>
<p>&#x6211;&#x4E0D;&#x77E5;&#x9053;&#x3002;&#x8FD9;&#x662F;&#x4E24;&#x6761;&#x5B8C;&#x5168;&#x4E0D;&#x540C;&#x7684;&#x8DEF;&#x3002;&#x6211;&#x5BB3;&#x6015;&#x3002;</p>
<h2 id="added">Added: &#x5450;&#xFF0C;&#x54B1;&#x4E5F;&#x662F;&#x4E8C;&#x6B21;&#x5143;&#x4E86;</h2>
<p>&#x67D0;&#x65E5;&#x5728;&#x77E5;&#x4E4E;&#x4E0A;&#x770B;&#x5230;&#x6709;&#x4EBA;&#x63D0;&#x5230;*&#x300A;&#x5C0F;&#x6797;&#x5BB6;&#x7684;&#x9F99;&#x5973;&#x4EC6;&#x300B;*&#xFF0C;&#x770B;&#x5B8C;&#x4E4B;&#x540E;&#x4FBF;&#x4E00;&#x53D1;&#x4E0D;&#x53EF;&#x6536;&#xFF08;&#x62FE;&#xFF09;&#x3002;<br>
&#x6700;&#x559C;&#x6B22;&#x7684;&#x51FA;&#x7248;&#x793E;&#xFF1A;&#x82B3;&#x6587;&#x793E;&#xFF0C;&#x6700;&#x559C;&#x6B22;&#x7684;&#x7C7B;&#x578B;&#xFF1A;&#x65E5;&#x5E38;&#xFF0C;&#x767E;&#x5408;&#x3002;<br>
&#x6700;&#x559C;&#x6B22;&#x7684;&#x89D2;&#x8272;&#xFF1A;&#x6DBC;&#x98A8;&#x9752;&#x8449;&#xFF01;&#xFF01;!<br>
<img src="http://pic.lss233.com/images/2019/12/31/a386fc4f7959a22ebbbdd7ff6cc3610b.jpg" alt="&#x8FD9;&#x4E2A;Lss233&#x4E00;&#x4E8B;&#x65E0;&#x6210;&#x5374;&#x6562;&#x5199;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF1A;2019&#xFF0C;&#x518D;&#x89C1;&#x5566;&#x3002;" loading="lazy"></p>
<p>&#x65E5;&#x672C;&#x662F;&#x5E94;&#x8BE5;&#x662F;&#x4E16;&#x754C;&#x4E0A;&#x81EA;&#x6740;&#x7387;&#x6700;&#x9AD8;&#x7684;&#x56FD;&#x5BB6;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x756A;&#x5267;&#x91CC;&#x770B;&#x5230;&#x7684;&#x6EE1;&#x662F;&#x7406;&#x60F3;&#x5316;&#x7684;&#x7F8E;&#x597D;&#x4E16;&#x754C;&#x3002;&#x4E8C;&#x6B21;&#x5143;&#x662F;&#x4E00;&#x6279;&#x4EBA;&#x7684;&#x7CBE;&#x795E;&#x5BC4;&#x6258;&#x5427;&#x3002;<br>
<img src="http://pic.lss233.com/images/2020/01/01/f36824350ba7f63ef9de6158ef9b675e.jpg" alt="&#x8FD9;&#x4E2A;Lss233&#x4E00;&#x4E8B;&#x65E0;&#x6210;&#x5374;&#x6562;&#x5199;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#xFF1A;2019&#xFF0C;&#x518D;&#x89C1;&#x5566;&#x3002;" loading="lazy"></p>
<p>&#x6211;&#x5F88;&#x559C;&#x6B22;&#x50CF;&#x82B1;&#x706B;&#x5927;&#x4F1A;&#x90A3;&#x6837;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x65E5;&#x672C;&#x7684;&#x4F20;&#x7EDF;&#x6587;&#x5316;&#x6709;&#x4E0D;&#x5C11;&#x662F;&#x6765;&#x81EA;&#x4E8E;&#x53E4;&#x4EE3;&#x7684;&#x4E2D;&#x56FD;&#xFF0C;&#x9057;&#x61BE;&#x7684;&#x662F;&#x6211;&#x5728;&#x73B0;&#x5B9E;&#x4E16;&#x754C;&#x6CA1;&#x80FD;&#x53C2;&#x4E0E;&#x8FD9;&#x79CD;&#x6709;&#x4EEA;&#x5F0F;&#x611F;&#x7684;&#x6D3B;&#x52A8;&#x3002;&#x4E5F;&#x8BB8;&#x662F;&#x6CA1;&#x6709;&#x4FDD;&#x7559;&#x4E0B;&#x6765;&#xFF1F;&#x8FD9;&#x662F;&#x6211;&#x5BF9;&#x65E5;&#x672C;&#x597D;&#x5947;&#x7684;&#x539F;&#x56E0;&#x4E4B;&#x4E00;&#x3002;</p>
<p>&#xFF08;&#x8FD9;&#x91CC;&#x6CA1;&#x6709;&#x914D;&#x56FE;&#xFF09;</p>
<p>&#x53D7;&#x5230;&#x67D0;&#x4E9B;&#x756A;&#x7684;&#x5F71;&#x54CD;&#xFF0C;&#x54B1;&#x4E5F;&#x5F00;&#x59CB;&#x8BD5;&#x7740;&#x753B;&#x753B;&#x548C;&#x5199;&#x8F7B;&#x5C0F;&#x8BF4;&#x4E86;&#x3002;&#x56E0;&#x4E3A;&#x60F3;&#x770B;&#x540E;&#x7EED;&#x548C;&#x73A9;&#x76F8;&#x5173;&#x7684;&#x6E38;&#x620F;&#xFF0C;&#x6211;&#x5F00;&#x59CB;&#x5B66;&#x4E60;&#x65E5;&#x8BED;&#x3002;</p>
<p>&#x5728;Bilibili&#x4E0A;&#x6211;&#x8FFD;&#x4E86;47&#x90E8;&#x756A;&#xFF0C;&#x5728;Pixiv&#x4E0A;&#x6211;&#x53D1;&#x8868;&#x4E86;1&#x4E2A;&#x4F5C;&#x54C1;&#xFF0C;&#x8BA4;&#x8BC6;&#x4E86;1&#x4F4D;&#x65E5;&#x672C;&#x7F51;&#x53CB;&#x3002;</p>
<h2 id="added">Added: &#x5173;&#x4E8E;&#x6211;&#x7CBE;&#x795E;&#x72B6;&#x6001;&#x7684;&#x95EE;&#x9898;</h2>
<p>&#x4E8E;9&#x6708;28&#x65E5;&#x6211;&#x5728;Telegram&#x4E0A;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x540D;&#x4E3A; <em>Lss233.thoughts();</em> &#x7684;&#x9891;&#x9053;&#xFF0C;&#x672C;&#x60F3;&#x53D1;&#x8868;&#x4E00;&#x4E9B;&#x81EA;&#x5DF1;&#x7684;&#x89C2;&#x70B9;&#xFF0C;&#x4F46;&#x540E;&#x6765;&#x53D8;&#x6210;&#x4E86;&#x81EA;&#x5DF1;&#x5185;&#x5FC3;&#x7684;&#x7CBE;&#x5206;&#x5C0F;&#x5267;&#x573A;&#x3002;&#x6CA1;&#x5173;&#x7CFB;&#xFF0C;&#x53CD;&#x6B63;&#x6CA1;&#x4EBA;&#x770B;&#x7684;&#x5427;&#x3002;<br>
&#x6211;&#x53EF;&#x4EE5;&#x786E;&#x5B9A;&#x81EA;&#x5DF1;&#x5B58;&#x5728;&#x4E00;&#x4E9B;&#x7CBE;&#x795E;&#x4E0A;&#x6216;&#x8005;&#x5FC3;&#x7406;&#x4E0A;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x6240;&#x4EE5;&#x5982;&#x679C;&#x6211;&#x51FA;&#x4E86;&#x4EC0;&#x4E48;&#x4E8B;&#xFF0C;&#x8FD9;&#x91CC;&#x9762;&#x53D1;&#x5E03;&#x7684;&#x6D88;&#x606F;&#x5E94;&#x8BE5;&#x53EF;&#x4EE5;&#x63A8;&#x5BFC;&#x51FA;&#x6211;&#x81EA;&#x6740;&#x524D;&#x7684;&#x5FC3;&#x7406;&#x72B6;&#x6001;&#x3002;</p>
<p>&#x5728;&#x8FC7;&#x53BB;&#x7684;&#x4E00;&#x5E74;&#x91CC;&#xFF0C;&#x6211;&#x5171;&#x53D1;&#x8868;&#x4E86;168&#x6761;&#x6D88;&#x606F;&#x3002;</p>
<h2 id="removedminecraft">Removed: Minecraft&#x5708;&#x5B50;</h2>
<p>&#x4ECA;&#x5E74;&#x7A46;&#x5189;&#x9601;&#x6CA1;&#x6709;&#x5F00;&#x670D;&#x3002;&#x6211;&#x5DF2;&#x7ECF;&#x786E;&#x5B9A;&#x81EA;&#x5DF1;&#x4E0D;&#x518D;&#x6D3B;&#x8DC3;&#x4E8E;&#x8FD9;&#x4E2A;&#x5708;&#x5B50;&#x4E86;&#x3002;&#x5F53;&#x521D;&#x73A9;&#x8FD9;&#x4E2A;&#x6E38;&#x620F;&#x7684;&#x4EBA;&#x5DF2;&#x7ECF;&#x4E0D;&#x518D;&#x662F;&#x73B0;&#x5728;&#x73A9;&#x8FD9;&#x4E2A;&#x6E38;&#x620F;&#x7684;&#x4EBA;&#x3002;&#x6211;&#x5DF2;&#x7ECF;&#x627E;&#x4E0D;&#x5230;&#x5F53;&#x521D;&#x7684;&#x90A3;&#x79CD;&#x4E50;&#x8DA3;&#x4E86;&#x3002;</p>
<p>&#x6211;&#x5F88;&#x559C;&#x6B22;&#x5C0F;&#x4F17;&#x7684;&#x5708;&#x5B50;&#xFF0C;&#x4F46;&#x4E00;&#x65E6;&#x5B83;&#x5927;&#x4F17;&#x5316;&#x4E4B;&#x540E;&#x6211;&#x5C31;&#x4F1A;&#x53D8;&#x5F97;&#x538C;&#x6076;&#x3002;&#x8FDB;&#x6765;&#x7684;&#x4EBA;&#x53FD;&#x53FD;&#x55B3;&#x55B3;&#xFF0C;&#x8BA9;&#x6211;&#x627E;&#x4E0D;&#x5230;&#x539F;&#x6765;&#x7684;&#x548C;&#x8C10;&#x611F;&#xFF0C;&#x4E5F;&#x6539;&#x53D8;&#x4E86;&#x6211;&#x4EEC;&#x6700;&#x521D;&#x7684;&#x76EE;&#x7684;&#x3002;&#x6240;&#x4EE5;&#xFF0C;&#x6211;&#x8FD8;&#x662F;&#x9009;&#x62E9;&#x79BB;&#x5F00;&#x3002;</p>
<h2 id="removedcoding">Removed: coding</h2>
<p>&#x524D;&#x534A;&#x5E74;&#x4E0E;@Shawhoi&#x53C2;&#x4E0E;&#x4E86;PokeMarket&#x9879;&#x76EE;&#xFF0C;&#x83B7;&#x5F97;&#x4E86;&#x4E0D;&#x5C11;&#x6536;&#x76CA;&#xFF0C;&#x975E;&#x5E38;&#x611F;&#x8C22;&#x3002;<br>
&#x540E;&#x534A;&#x5E74;&#x53C2;&#x4E0E;&#x4E86;0&#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x5171;&#x53D1;&#x5E03;&#x4E86;0&#x4E2A;&#x4F5C;&#x54C1;&#xFF0C;&#x5199;&#x4E86;&#x7EA6;0&#x884C;&#x4EE3;&#x7801;&#x3002;</p>
<h1 id>&#x603B;&#x7ED3;</h1>
<p>&#x5982;&#x679C;&#x8BA9;18&#x5E74;&#x5199;&#x5E74;&#x672B;&#x603B;&#x7ED3;&#x7684;Lss233&#x6765;&#x8BC4;&#x4EF7;&#x8FD9;&#x4E00;&#x5E74;&#xFF0C;&#x5C55;&#x671B;&#x8FBE;&#x6210;&#x7387;67%&#x8FD8;&#x662F;&#x5F88;&#x4E0D;&#x9519;&#x7684;&#x3002;<br>
&#x4F46;&#x8BA9;&#x73B0;&#x5728;&#x7684;&#x6211;&#x8BC4;&#x4EF7;&#xFF0C;&#x8FD8;&#x662F;&#x6709;&#x4E00;&#x4E9B;&#x9057;&#x61BE;&#x3002;&#x660E;&#x660E;&#x53EF;&#x4EE5;&#x66F4;&#x52AA;&#x529B;&#xFF0C;&#x4F46;&#x662F;&#x5374;&#x6CA1;&#x6709;&#x3002;&#x53EA;&#x8981;&#x4E00;&#x9047;&#x5230;&#x9EBB;&#x70E6;&#xFF0C;&#x6211;&#x5C31;&#x4F1A;&#x7126;&#x8651;&#x2026;&#x2026;&#x6211;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD9;&#x4E48;&#x6CA1;&#x7528;&#xFF1F;&#x6211;&#x4E00;&#x76F4;&#x5728;&#x8BA9;&#x81EA;&#x5DF1;&#x53D8;&#x5F97;&#x66F4;&#x5408;&#x7FA4;&#xFF0C;&#x4F46;&#x4E5F;&#x4E00;&#x76F4;&#x5728;&#x758F;&#x8FDC;&#x5468;&#x56F4;&#x7684;&#x4EBA;&#x3002;&#x6211;&#x771F;&#x662F;&#x77DB;&#x76FE;&#x2026;&#x2026;</p>
<p>&#x4F46;&#x65E0;&#x8BBA;&#x5982;&#x4F55;&#xFF0C;&#x751F;&#x6D3B;&#x8FD8;&#x662F;&#x9700;&#x8981;&#x7EE7;&#x7EED;&#x7684;&#x3002;&#x7528;&#x51C9;&#x98CE;&#x9752;&#x53F6;&#x7684;&#x8BDD;&#x6765;&#x8BF4;&#xFF0C;&#x90A3;&#x5C31;&#x662F;&#x300C;&#x4ECA;&#x65E5;&#x3082;&#x4E00;&#x65E5;&#x304C;&#x3093;&#x3070;&#x308B;&#x305E;&#x3044;&#xFF01;&#x300D;&#x3002;</p>
<p>&#x6700;&#x597D;&#x7684;&#x795D;&#x613F;&#x7ED9;2020&#x5E74;&#x7684;Lss233&#x3002;</p>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><p style="text-aign: right;"> --- Lss233,&#x5199;&#x4E8E;2020&#x5E74;&#x7684;&#x7B2C;&#x4E00;&#x5929;&#x3002;</p><!--kg-card-end: html-->]]></content:encoded></item><item><title><![CDATA[噩梦24小时：记一次服务器迁移与宕机过程]]></title><description><![CDATA[<p>&#x6709;&#x53E5;&#x4FD7;&#x8BED;&#x53EB;&#xFF1A;<em>If it ain&apos;t broke, don&apos;t fix it. </em>&#x4ECA;&#x5929;&#x771F;&#x662F;&#x89C1;&#x8BC6;&#x5230;&#x4E86;&#x3002;</p><h2 id="0x0000-">0x0000 &#x8D77;&#x56E0;</h2><p>&#x5728;&#x6628;&#x5929;(2&#x6708;8&#x65E5;) 17&#x65F6;&#xFF0C;&#x672C;&#x4EBA;&#x6536;&#x5230;&#x4E86;Cloudcone&#x53D1;&#x6765;&#x7684;&#x6625;&#x8282;</p>]]></description><link>https://blog.lss233.com/e-meng-24xiao-shi-cloudconewei-hu-ren-yuan-de/</link><guid isPermaLink="false">6024d72081c0bcbcde7de982</guid><category><![CDATA[无意义]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Sat, 09 Feb 2019 08:36:18 GMT</pubDate><content:encoded><![CDATA[<p>&#x6709;&#x53E5;&#x4FD7;&#x8BED;&#x53EB;&#xFF1A;<em>If it ain&apos;t broke, don&apos;t fix it. </em>&#x4ECA;&#x5929;&#x771F;&#x662F;&#x89C1;&#x8BC6;&#x5230;&#x4E86;&#x3002;</p><h2 id="0x0000-">0x0000 &#x8D77;&#x56E0;</h2><p>&#x5728;&#x6628;&#x5929;(2&#x6708;8&#x65E5;) 17&#x65F6;&#xFF0C;&#x672C;&#x4EBA;&#x6536;&#x5230;&#x4E86;Cloudcone&#x53D1;&#x6765;&#x7684;&#x6625;&#x8282;&#x4F18;&#x60E0;&#x90AE;&#x4EF6;&#x3002;</p><p>&#x5728;&#x4E00;&#x756A;&#x6FC0;&#x70C8;&#x7684;&#x601D;&#x60F3;&#x6597;&#x4E89;&#x4E0B;&#xFF0C;&#x4E0B;&#x5355;&#x4E86;&#x4E00;&#x4E2A;&#x770B;&#x4E0A;&#x53BB;<a href="https://app.cloudcone.com/compute/419/create?ref=1626">&#x66F4;&#x4FBF;&#x5B9C;&#x7684;&#x5957;&#x9910;</a>&#x3002;&#x6253;&#x7B97;&#x628A;&#x670D;&#x52A1;&#x5668;&#x8FC1;&#x79FB;&#x8FC7;&#x53BB;&#x3002;</p><h2 id="0x0001-">0x0001 &#x5669;&#x68A6;</h2><p>&#x51E0;&#x5206;&#x949F;&#x540E;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x521B;&#x5EFA;&#x5B8C;&#x6BD5;&#x3002;</p><p>&#x53D1;&#x73B0;&#x63A7;&#x5236;&#x9762;&#x677F;&#x5C45;&#x7136;&#x6CA1;&#x6709;&#x50CF;&#x642C;&#x74E6;&#x5DE5;&#x90A3;&#x6837;&#x65B9;&#x4FBF;&#x7684;&#x670D;&#x52A1;&#x5668;&#x8FC1;&#x79FB;&#x83DC;&#x5355;&#xFF0C;&#x81EA;&#x5DF1;&#x53C8;&#x61D2;&#x5F97;&#x624B;&#x52A8;&#x8FC1;&#x79FB;&#xFF0C;&#x4E8E;&#x662F;&#x5C31;&#x53D1;&#x4E86;&#x4EFD;&#x5DE5;&#x5355;&#x7ED9;&#x5BA2;&#x670D;&#x8BE2;&#x95EE;&#x6709;&#x6CA1;&#x6709;&#x4EC0;&#x4E48;&#x529E;&#x6CD5;&#x3002;</p><h3 id="17-30">17:30</h3><p>&#x6280;&#x672F;&#x4EBA;&#x5458;&#x5C0F;&#x54E5;&#x5F00;&#x59CB;&#x5E2E;&#x6211;&#x8FC1;&#x79FB;&#x6570;&#x636E;&#x3002;</p><p>&#x4ED6;&#x7684;&#x64CD;&#x4F5C;&#x975E;&#x5E38;&#x7B80;&#x5355;&#x7C97;&#x66B4;&#xFF0C;&#x76F4;&#x63A5;&#x628A;&#x65E7;&#x670D;&#x52A1;&#x5668;&#x7684;&#x786C;&#x76D8;&#x6302;&#x8F7D;&#x5230;&#x65B0;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#xFF0C;&#x518D;&#x628A;&#x65B0;&#x670D;&#x52A1;&#x5668;&#x7684;&#x786C;&#x76D8;&#x6302;&#x8F7D;&#x5230;&#x65E7;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x3002;</p><p>&#x542C;&#x8D77;&#x6765;&#x662F;&#x6CA1;&#x4EC0;&#x4E48;&#x95EE;&#x9898;&#xFF0C;&#x90A3;&#x4F4D;&#x5C0F;&#x54E5;&#x4E5F;&#x6CA1;&#x7EE7;&#x7EED;&#x56DE;&#x590D;&#x6211;&#x3002;</p><p>&#x7136;&#x800C;&#x4ED6;&#x6CA1;&#x6709;&#x6599;&#x5230;&#xFF0C;&#x4E24;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x7684;IP&#x5730;&#x5740;&#x662F;&#x9759;&#x6001;&#x8BBE;&#x7F6E;&#x7684;&#xFF0C;&#x5199;&#x6B7B;&#x5728;`/etc/networks/interfaces`&#x91CC;&#xFF0C;&#x8FD9;&#x4F4D;&#x5C0F;&#x54E5;&#x6CA1;&#x6709;&#x7ED9;&#x6211;&#x6539;&#x8FC7;&#x6765;&#xFF0C;&#x8FD9;&#x5BFC;&#x81F4;&#x4E24;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x90FD;&#x4E0D;&#x80FD;&#x8BBF;&#x95EE;&#x7F51;&#x7EDC;&#x3002;</p><p>&#x65E0;&#x5948;&#x4E4B;&#x4E0B;&#xFF0C;&#x6211;&#x53EA;&#x597D;&#x56DE;&#x590D;&#x4ED6;&#xFF0C;&#x8BF7;&#x4ED6;&#x5E2E;&#x5FD9;&#x4FEE;&#x6539;&#x5730;&#x5740;&#xFF0C;&#x987A;&#x4FBF;&#x5E2E;&#x6211;&#x8C03;&#x6574;&#x597D;&#x786C;&#x76D8;&#x5927;&#x5C0F;&#x3002;</p><h3 id="-0-00">&#x6B21;&#x65E5;0:00</h3><p>&#x8DDD;&#x79BB;&#x6211;&#x7684;&#x56DE;&#x590D;&#x5DF2;&#x7ECF;&#x8FC7;&#x53BB;3&#x4E2A;&#x5C0F;&#x65F6;&#xFF0C;</p><p>&#x90A3;&#x4F4D;&#x6280;&#x672F;&#x4EBA;&#x5458;&#x5C0F;&#x54E5;<strong>&#x6CA1;&#x6709;&#x56DE;&#x590D;</strong>&#x3002;</p><p>&#x89C1;&#x9B3C;&#x4E86;&#xFF0C;&#x600E;&#x4E48;&#x529E;&#xFF1F;&#xFF01;</p><p>&#x6211;&#x6253;&#x5F00;&#x9762;&#x677F;&#xFF0C;&#x770B;&#x89C1;&#x6709;&#x4E00;&#x4E2A;&#x5F00;&#x542F;IPv6&#x7684;&#x9009;&#x9879;&#x3002; &#x5F00;&#x542F;IPv6&#x5E94;&#x8BE5;&#x4F1A;&#x91CD;&#x65B0;&#x914D;&#x7F6E;&#x7F51;&#x7EDC;&#xFF0C;&#x8BF4;&#x4E0D;&#x5B9A;&#x80FD;&#x628A;IP&#x95EE;&#x9898;&#x4FEE;&#x597D;&#x5462;&#xFF1F;</p><p>&#x62B1;&#x7740;&#x4FA5;&#x5E78;&#x7684;&#x5FC3;&#x7406;&#xFF0C;&#x6211;&#x70B9;&#x4E86;&#x3002;&#x670D;&#x52A1;&#x5668;&#x91CD;&#x65B0;&#x542F;&#x52A8;&#x3002;</p><p>&#x51E0;&#x5206;&#x949F;&#x540E;&#xFF0C;&#x6210;&#x529F;&#x4E86;&#x3002;&#x670D;&#x52A1;&#x5668;&#x53EF;&#x4EE5;&#x4E0A;&#x7F51;&#x4E86;&#xFF01;</p><p>&#x7136;&#x800C;&#xFF0C;&#x54B1;&#x53C8;&#x9047;&#x5230;&#x4E86;&#x65B0;&#x7684;&#x95EE;&#x9898;&#x3002;&#x8FD9;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#x7684;IP&#x5730;&#x5740;&#x6BD4;&#x8F83;&#x7279;&#x6B8A;&#xFF0C;&#x5B83;&#x5728;&#x56FD;&#x5185;&#x8BBF;&#x95EE;&#x4F1A;&#x663E;&#x793A;&#x8FDE;&#x63A5;&#x8D85;&#x65F6;&#xFF0C;&#x800C;&#x5728;&#x5176;&#x4ED6;&#x5730;&#x65B9;&#x5374;&#x6CA1;&#x6709;&#x95EE;&#x9898;&#x3002;&#x5F88;&#x660E;&#x663E;&#xFF0C;&#x8FD9;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#x7684;IP&#x88AB;[&#x6570;&#x636E;&#x5220;&#x9664;]&#x4E86;&#x3002;</p><h3 id="0-30">0:30</h3><p>&#x6211;&#x8FD8;&#x6CA1;&#x6709;&#x7761;&#x3002;&#x5728;&#x767E;&#x5EA6;&#x4E0A;&#x7A0D;&#x5FAE;&#x641C;&#x7D22;&#x4E86;&#x4E00;&#x4E0B;&#xFF0C;&#x5F97;&#x5230;&#x4E24;&#x79CD;&#x89E3;&#x51B3;&#x65B9;&#x6CD5;&#xFF1A;</p><ol><li>&#x5220;&#x9664;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x91CD;&#x65B0;&#x8D2D;&#x4E70;&#x3002;</li><li>&#x53D1;&#x5DE5;&#x5355;&#x7533;&#x8BF7;&#x66F4;&#x6362;IP,&#x4F46;&#x9700;&#x8981;$2&#x3002;</li></ol><p>&#x7531;&#x4E8E;&#x4E4B;&#x524D;&#x7684;&#x6280;&#x672F;&#x5C0F;&#x54E5;&#x5E2E;&#x6211;&#x628A;&#x786C;&#x76D8;&#x6302;&#x8F7D;&#x5728;&#x4E86;&#x65B0;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#xFF0C;&#x5982;&#x679C;&#x76F4;&#x63A5;&#x5220;&#x9664;&#xFF0C;&#x90A3;&#x4E48;&#x6570;&#x636E;&#x4E5F;&#x80AF;&#x5B9A;&#x8DDF;&#x7740;&#x4E00;&#x8D77;&#x6CA1;&#x6389;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x6392;&#x9664;&#x65B9;&#x6CD5;1&#x3002;</p><p>&#x6211;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;Urgent&#x5DE5;&#x5355;&#xFF0C;&#x7533;&#x8BF7;&#x66F4;&#x6362;IP&#xFF0C;&#x3002;</p><h3 id="-">&#x51E0;&#x5206;&#x949F;&#x540E;</h3><p>&#x5F88;&#x5FEB;&#xFF0C;&#x5C31;&#x6709;&#x4E00;&#x4E2A;&#x5DE5;&#x7A0B;&#x5E08;&#x56DE;&#x590D;&#x6211;&#x4E86;&#x3002;&#x4ED6;&#x662F;&#x8FD9;&#x6837;&#x8BF4;&#x7684;&#xFF1A;<em>Your request is sent to our network team, please allow some time while they get it processed for you.</em></p><p>&#x6211;&#x7684;&#x5185;&#x5FC3;&#xFF1A;&#x8BF6;&#xFF0C;&#x4E0D;&#x9519;&#x554A;&#x8FD9;&#x670D;&#x52A1;&#x6001;&#x5EA6;&#x3002;</p><p>&#x62B1;&#x7740;&#x4FA5;&#x5E78;&#x7684;&#x5FC3;&#x7406;&#xFF0C;&#x6211;&#x5728;&#x8FD9;&#x4E2A;&#x5DE5;&#x5355;&#x91CC;&#x95EE;&#x80FD;&#x4E0D;&#x80FD;&#x5E2E;&#x6211;&#x628A;&#x786C;&#x76D8;&#x5927;&#x5C0F;&#x7684;&#x95EE;&#x9898;&#x4E5F;&#x7ED9;&#x5904;&#x7406;&#x4E86;&#x3002;</p><p>&#x6211;&#x521A;&#x521A;&#x56DE;&#x590D;&#x5B8C;&#x3002;&#x5237;&#x65B0;&#x4E86;&#x4E00;&#x4E0B;&#x6D4F;&#x89C8;&#x5668;&#xFF0C;&#x5C31;&#x770B;&#x89C1;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x5DE5;&#x7A0B;&#x5E08;&#x56DE;&#x590D;&#x6211;&#xFF1A;<em>Your request is sent to our dev-ops team, please allow some time while they get it processed for you.</em></p><p>&#x6211;&#xFF1A;&#xFF1F;&#xFF1F;&#xFF1F; </p><p>&#x5B8C;&#x4E86;&#x3002;&#x8FD9;&#x4FE9;&#x4EBA;&#x662F;&#x673A;&#x5668;&#x4EBA;&#x6CA1;&#x8DD1;&#x4E86;&#x3002;</p><p>&#x770B;&#x81EA;&#x5DF1;&#x7684;&#x8D26;&#x6237;&#xFF0C;$2&#x4E5F;&#x6CA1;&#x6709;&#x6263;&#x6389;&#x3002;&#x5148;&#x7761;&#x89C9;&#x5427;&#xFF0C;&#x8BF4;&#x4E0D;&#x5B9A;&#x660E;&#x5929;&#x65E9;&#x4E0A;&#x5C31;&#x597D;&#x4E86;&#x5462;&#x3002;</p><p>&#x7761;&#x4E4B;&#x524D;&#x56DE;&#x590D;&#x4E86;&#x4E00;&#x53E5;&#xFF1A;<em>Thank you, please be quick. My service have been shutdown for over 8 hours, my users are complaining, please understand.</em></p><h3 id="10-00">10:00</h3><p>&#x6211;&#x5927;&#x6982;&#x662F;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x9192;&#x7684;&#x3002;&#x767B;&#x5F55;&#x7F51;&#x7AD9;&#x770B;&#x770B;&#x60C5;&#x51B5;&#x89E3;&#x51B3;&#x4E86;&#x6CA1;&#x6709;&#x3002;</p><p>&#x6700;&#x65E9;&#x5E2E;&#x6211;&#x8FC1;&#x79FB;&#x7684;&#x5C0F;&#x54E5;&#x8FD8;&#x662F;&#x6CA1;&#x6709;&#x56DE;&#x590D;&#x6211;&#x3002;&#x7B2C;&#x4E8C;&#x4E2A;&#x5DE5;&#x5355;&#x5728;&#x6211;&#x56DE;&#x590D;&#x6CA1;&#x591A;&#x4E45;&#x4E4B;&#x540E;&#x5C31;&#x56DE;&#x590D;&#x4E86;&#x4E00;&#x53E5;&#xFF1A;&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x6211;&#x4EEC;dev-ops&#x56DE;&#x590D;&#x4E4B;&#x524D;&#x7167;&#x5E38;&#x4F7F;&#x7528;&#x4F60;&#x7684;&#x670D;&#x52A1;&#x5668;&#x3002;</p><p>&#x7167;&#x5E38;&#x4E2A;&#x9B3C;&#x554A;&#xFF0C;&#x6839;&#x672C;&#x7528;&#x4E0D;&#x4E86;&#x554A;&#x3002;&#x8FD9;&#x90FD;&#x4EC0;&#x4E48;&#x9B3C;&#x56DE;&#x590D;&#x6A21;&#x677F;&#x3002;</p><h3 id="11-00">11:00</h3><p>&#x4E0D;&#x7B49;&#x4E86;&#xFF0C;&#x4F30;&#x8BA1;&#x4ED6;&#x4EEC;&#x662F;&#x6253;&#x7B97;&#x76F4;&#x63A5;&#x628A;&#x6211;&#x51C9;&#x7740;&#x4E86;&#x3002;</p><p>&#x73B0;&#x5728;&#x6211;&#x6709;&#x4E24;&#x53F0;&#x670D;&#x52A1;&#x5668;&#xFF1A;</p><ol><li>&#x672C;&#x6765;&#x5C31;&#x6709;&#x7684;&#x4E00;&#x53F0; chocolate&#xFF0C;&#x6302;&#x8F7D;&#x786C;&#x76D8;30GB&#xFF0C;&#x65E0;&#x6CD5;&#x8BBF;&#x95EE;&#x7F51;&#x7EDC;&#x3002;</li><li>&#x524D;&#x9762;&#x4E0B;&#x5355;&#x7684;&#x4E00;&#x53F0; darksky&#xFF0C;&#x6302;&#x8F7D;&#x786C;&#x76D8;25GB&#xFF0C;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x7F51;&#x7EDC;&#x3002;</li></ol><p>&#x60F3;&#x4E86;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x601D;&#x8DEF;:</p><ol><li>&#x91CD;&#x65B0;&#x5B89;&#x88C5;chocolate&#x4E0A;&#x7684;&#x7CFB;&#x7EDF;&#xFF0C;&#x817E;&#x51FA;&#x7A7A;&#x95F4;&#x3002;</li><li>&#x4F7F;&#x7528; ssh &#x548C; dd &#x628A; darksky&#x4E0A;&#x7684;&#x786C;&#x76D8;&#x590D;&#x5236;&#x5230; chocolate &#x4E0A;&#x3002;</li><li>&#x5220;&#x9664; darksky&#x3002;</li><li>&#x91CD;&#x65B0;&#x4E0B;&#x5355;&#x4E00;&#x53F0;&#x670D;&#x52A1;&#x5668;&#x3002;</li><li>&#x628A;&#x5728;chocolate&#x4E0A;&#x7684;&#x6570;&#x636E;&#x8FC1;&#x79FB;&#x5230;&#x65B0;&#x4E0B;&#x5355;&#x7684;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#x3002;</li></ol><p>&#x770B;&#x4E0A;&#x53BB;&#x633A;&#x7B80;&#x5355;&#x7684;&#xFF0C;&#x5C31;&#x50CF;&#x5199;&#x7A0B;&#x5E8F;&#x7684;&#x65F6;&#x5019;&#x4EA4;&#x6362;&#x4E24;&#x4E2A;&#x53D8;&#x91CF;&#x4E00;&#x6837;&#x3002;</p><h3 id="11-18">11:18</h3><p>&#x4E0B;&#x5355;&#x4E86;&#x65B0;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x7CFB;&#x7EDF;&#x5B89;&#x88C5;&#x597D;&#x4E4B;&#x540E;&#x60CA;&#x5446;&#x4E86;&#xFF0C;IP&#x5730;&#x5740;&#x548C;&#x4E4B;&#x524D;&#x7684;&#x5C45;&#x7136;&#x662F;&#x4E00;&#x6837;&#x7684;&#x3002;</p><p>&#x5220;&#x9664;&#xFF0C;&#x91CD;&#x65B0;&#x4E0B;&#x5355;&#x3002;</p><p>&#x53C8;&#x662F;&#x4E00;&#x6837;&#x7684;&#x3002;</p><p>&#x770B;&#x6765;&#x4ED6;&#x4EEC;&#x8FD8;&#x662F;&#x6309;&#x987A;&#x5E8F;&#x63D0;&#x4F9B;&#x5206;&#x914D;IP&#x7684;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x5FC5;&#x987B;&#x8981;&#x6709;&#x4E00;&#x4E2A;&#x5012;&#x9709;&#x9B3C;&#x4E0B;&#x5355;&#x5F97;&#x5230;&#x90A3;&#x4E2A;IP&#x4E4B;&#x540E;&#xFF0C;&#x6211;&#x4E0B;&#x5355;&#x624D;&#x4F1A;&#x5F97;&#x5230;&#x65B0;&#x7684;IP&#x3002;</p><p>&#x8FD9;&#x5927;&#x4E2D;&#x5348;&#x7684;&#xFF0C;&#x8C01;&#x4F1A;&#x4E70;&#x554A;&#x3002;</p><h3 id="11-22">11:22</h3><p>&#x6211;&#x60F3;&#x5230;&#x4E86;&#x4E00;&#x4E2A;&#x7EDD;&#x5999;&#x7684;&#x597D;&#x4E3B;&#x610F;&#x3002;</p><p>&#x5148;&#x4E0B;&#x5355;&#x4E00;&#x4E2A;&#x4EF7;&#x683C;&#x6700;&#x4F4E;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x5B83;&#x4F1A;&#x5206;&#x914D;&#x5230;&#x90A3;&#x4E2A;&#x4E0D;&#x80FD;&#x7528;&#x7684;IP&#x3002;&#x518D;&#x4E0B;&#x5355;&#x6211;&#x60F3;&#x8981;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x53EF;&#x4EE5;&#x5566;&#xFF01;</p><h2 id="0x0002-">0x0002 &#x7B2C;&#x4E8C;&#x4E2A;&#x5669;&#x68A6;</h2><p>&#x590D;&#x5236;&#x6570;&#x636E;&#x5F88;&#x7B80;&#x5355;&#x662F;&#x5427;&#xFF1F;&#x6211;&#x4E00;&#x5F00;&#x59CB;&#x4E5F;&#x662F;&#x8FD9;&#x6837;&#x60F3;&#x7684;&#x3002;</p><p>&#x5728;&#x767E;&#x5EA6;&#x4E0A;&#x641C;&#x7D22;&#x4E86;&#x4E00;&#x4E0B;&#xFF0C;&#x539F;&#x6765;&#x6709;&#x79CD;&#x4E1C;&#x897F;&#x53EB; <strong>SSHFS</strong>&#x3002; &#x5B83;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;SSH&#x534F;&#x8BAE;&#x628A;&#x8FDC;&#x7A0B;&#x7684;&#x670D;&#x52A1;&#x5668;&#x6302;&#x8F7D;&#x5230;&#x672C;&#x5730;&#x4E0A;&#x3002;</p><p>&#x4E8E;&#x662F;&#x6211;&#x7684;&#x505A;&#x6CD5;&#x662F;&#xFF1A;&#x628A;&#x786C;&#x76D8;&#x955C;&#x50CF;mount&#x5230;<em>chocolate</em>&#x7684; <code>/mnt</code>&#x4E0A;&#xFF0C;&#x518D;&#x901A;&#x8FC7;SSHFS&#x628A;<em>chocolate</em>&#x7684; <code>/mnt</code> &#x6302;&#x8F7D;&#x5230;&#x65B0;&#x670D;&#x52A1;&#x5668;&#x7684; <code>/mnt</code>&#x4E0A;&#x3002;</p><h3 id="11-52">11:52</h3><p>&#x91CD;&#x542F;&#x65B0;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x53D1;&#x73B0;&#x4F7F;&#x7528;&#x65E7;&#x7684;&#x7528;&#x6237;&#x540D;&#x548C;&#x5BC6;&#x7801;&#x53EF;&#x4EE5;&#x767B;&#x9646;&#x3002;</p><p>&#x592A;&#x68D2;&#x4E86;&#xFF01;</p><p>&#x8BE1;&#x5F02;&#x7684;&#x4E8B;&#x60C5;&#x6765;&#x4E86;&#xFF0C;&#x767B;&#x9646;&#x6210;&#x529F;&#x4E4B;&#x540E;&#xFF0C;&#x8FD8;&#x6CA1;&#x6709;&#x770B;&#x89C1;bash&#xFF0C;&#x5C31;&#x91CD;&#x65B0;&#x9000;&#x56DE;&#x5230;&#x767B;&#x9646;&#x754C;&#x9762;&#x4E86;&#x3002;&#x73B0;&#x5728;&#x60F3;&#x60F3;&#xFF0C;&#x5E94;&#x8BE5;&#x662F;&#x67D0;&#x4E2A;&#x652F;&#x6301;&#x5E93;&#x6CA1;&#x6709;&#x590D;&#x5236;&#x8FC7;&#x6765;&#xFF0C;&#x5BFC;&#x81F4;bash&#x65E0;&#x6CD5;&#x542F;&#x52A8;&#x3002;</p><p>&#x770B;&#x6765;SSHFS&#x8FD9;&#x6761;&#x9053;&#x4E0D;&#x884C;&#xFF0C;&#x91CD;&#x65B0;&#x5B89;&#x88C5;&#x3002; &#x5BF9;&#x4E86;&#xFF0C;&#x65B0;&#x7684;&#x670D;&#x52A1;&#x5668;&#x53EB;vanilla&#x3002;</p><p>&#x5F88;&#x4E45;&#x4EE5;&#x524D;&#x66FE;&#x7ECF;&#x7528;tar&#x914D;&#x5408;netcat&#x8FC1;&#x79FB;&#x8FC7;&#x6570;&#x636E;&#x3002;&#x901A;&#x8FC7;&#x7BA1;&#x9053;&#xFF0C;&#x5206;&#x522B;&#x5728;&#x53D1;&#x9001;&#x7AEF;&#x548C;&#x63A5;&#x6536;&#x7AEF;&#x6267;&#x884C;&#xFF1A;</p><!--kg-card-begin: markdown--><pre><code class="language-bash"># &#x63A5;&#x6536;&#x7AEF;
netcat -l -p 7000 | tar x
# &#x53D1;&#x9001;&#x7AEF;
tar cf - * | netcat &#x63A5;&#x6536;&#x670D;&#x52A1;&#x5668; 7000
</code></pre>
<!--kg-card-end: markdown--><p>&#x8BD5;&#x8BD5;&#x5427;&#x3002;</p><h3 id="14-46">14:46</h3><p>&#x6211;&#x628A;MobaXterm&#x81EA;&#x5E26;&#x7684;&#x5C0F;&#x6E38;&#x620F;&#x73A9;&#x4E86;&#x4E2A;&#x904D;&#x3002;&#x7EC8;&#x4E8E;&#x77E5;&#x9053;&#x4E3A;&#x4EC0;&#x4E48;&#x4E00;&#x4E2A;&#x597D;&#x597D;&#x7684;&#x7EC8;&#x7AEF;&#x8F6F;&#x4EF6;&#x5E26;&#x8FD9;&#x4E48;&#x591A;&#x6E38;&#x620F;&#x5E72;&#x4EC0;&#x4E48;&#x4E86;&#x3002;</p><p>&#x6211;&#x91CD;&#x8BD5;&#x4E86;&#x597D;&#x51E0;&#x6B21;&#xFF0C;&#x6BCF;&#x6B21;&#x90FD;&#x662F;&#x6267;&#x884C;&#x5230;&#x4E00;&#x534A;&#xFF0C;ssh&#x65AD;&#x5F00;&#x8FDE;&#x63A5;&#xFF0C;Vanilla&#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x65E0;&#x6CD5;&#x54CD;&#x5E94;&#x3002;</p><p>&#x770B;&#x6765;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x4E5F;&#x662F;&#x4E0D;&#x884C;&#x4E86;&#x3002;&#x5E94;&#x8BE5;&#x662F;&#x56E0;&#x4E3A;&#x5728;&#x8986;&#x76D6;&#x7684;&#x67D0;&#x4E2A;&#x91CD;&#x8981;lib&#x6587;&#x4EF6;&#x7684;&#x65F6;&#x5019;&#x6574;&#x4E2A;&#x7CFB;&#x7EDF;&#x5D29;&#x6E83;&#x3002;</p><p>&#x8FD9;&#x4E2A;&#x670D;&#x52A1;&#x5546;&#x63D0;&#x4F9B;&#x7684;&#x670D;&#x52A1;&#x5668;&#x90FD;&#x662F;KVM&#xFF0C;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;Recovery&#x6A21;&#x5F0F;&#xFF0C;&#x770B;&#x6765;&#x53EA;&#x80FD;&#x7528;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x4E86;&#x3002;</p><p>Recovery&#x6A21;&#x5F0F;&#x548C;Windows&#x7684;PE&#x7CFB;&#x7EDF;&#x5DEE;&#x4E0D;&#x591A;&#xFF0C;&#x662F;&#x6302;&#x8F7D;&#x5230;&#x5185;&#x5B58;&#x4E0A;&#x7684;&#x7CFB;&#x7EDF;&#x3002;&#x56E0;&#x6B64;&#x6211;&#x4EEC;&#x600E;&#x4E48;&#x4FEE;&#x6539;&#x786C;&#x76D8;&#x90FD;&#x548C;&#x5B83;&#x6CA1;&#x6709;&#x5173;&#x7CFB;&#x3002;</p><h3 id="16-00">16:00</h3><p>Recovery&#x7684;&#x7CFB;&#x7EDF;&#x53EF;&#x771F;&#x662F;&#x7B80;&#x6D01;&#x3002;&#x6CA1;&#x6709;apt&#xFF0C;&#x4E5F;&#x6CA1;&#x6709;gcc&#x3002;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x6211;&#x7528;&#x4E0D;&#x4E86;SSHFS&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x4E86;&#x3002;</p><p>&#x4E0D;&#x8FC7;ssh&#x548C;scp&#x5012;&#x662F;&#x80FD;&#x7528;&#x3002;&#x6211;&#x6302;&#x8F7D;&#x4E86;&#x672C;&#x5730;&#x786C;&#x76D8;&#xFF0C;&#x4F7F;&#x7528;scp&#x628A;&#x8FDC;&#x7A0B;&#x4E0A;&#x7684;&#x670D;&#x52A1;&#x5668;&#x590D;&#x5236;&#x5230;&#x672C;&#x5730;&#x3002;</p><p>&#x95EE;&#x9898;#1</p><p>SCP&#x590D;&#x5236;&#x7684;&#x65F6;&#x5019;&#x8FDB;&#x5EA6;&#x4E00;&#x76F4;&#x662F;0%,&#x800C;&#x4E14;&#x6700;&#x540E;&#x7684;&#x6587;&#x4EF6;&#x5927;&#x5C0F;&#x5C45;&#x7136;&#x8D85;&#x8FC7;&#x4E86;25GB!</p><p>&#x4E00;&#x770B;&#x624D;&#x53D1;&#x73B0;&#xFF0C;&#x6574;&#x4E2A;&#x7A0B;&#x5E8F;&#x5361;&#x5728;&#x590D;&#x5236;&#x865A;&#x62DF;&#x8BBE;&#x5907; <code>/dev/core</code> &#x4E0A;&#x3002;</p><p>&#x95EE;&#x9898;#2</p><p>&#x5386;&#x5C3D;&#x5343;&#x8F9B;&#x4E07;&#x82E6;&#x7EC8;&#x4E8E;&#x590D;&#x5236;&#x5B8C;&#x6570;&#x636E;&#xFF0C;&#x56DE;&#x5230;&#x9762;&#x677F;&#x628A;Recovery&#x6A21;&#x5F0F;&#x5173;&#x95ED;&#x3002;&#x8FD9;&#x4E2A;&#x6309;&#x94AE;&#x70B9;&#x4E86;&#x534A;&#x5929;&#x6CA1;&#x6709;&#x53CD;&#x5E94;&#x3002;&#x4ED6;&#x4EEC;&#x9762;&#x677F;&#x7684;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x6015;&#x4E0D;&#x662F;&#x5199;&#x4E86;&#x4E2A;&#x5047;&#x7684;&#x6309;&#x94AE;&#x5427;&#x3002;</p><p>&#x597D;&#x5728;&#x672C;&#x4EBA;&#x5BF9;Html&#x548C;JavaScript&#x4E5F;&#x7565;&#x77E5;&#x4E00;&#x4E8C;&#xFF0C;&#x6253;&#x5F00;F12&#x770B;&#x4E86;&#x4E00;&#x4E0B;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x8868;&#x5355;&#x3002;&#x624B;&#x52A8;&#x6267;&#x884C;&#x4E00;&#x4E0B;<em>submit();</em>&#x5B8C;&#x4E8B;&#x3002;</p><h3 id="16-15">16:15</h3><p>&#x6210;&#x529F;&#x8FDB;&#x5165;&#x7CFB;&#x7EDF;&#x4E86;&#xFF0C;&#x4F46;&#x662F;&#x53D1;&#x73B0;&#x597D;&#x50CF;&#x5C11;&#x4E86;&#x5F88;&#x591A;&#x4E1C;&#x897F;&#xFF0C;&#x548C;&#x6CA1;&#x6709;&#x590D;&#x5236;&#x51E0;&#x4E4E;&#x6CA1;&#x533A;&#x522B;&#x3002;</p><p>&#x4EC0;&#x4E48;&#x73A9;&#x610F;&#x554A;&#x3002;</p><p>&#x65E0;&#x5948;&#xFF0C;&#x8FD8;&#x662F;&#x53EA;&#x80FD;&#x8D70;SSHFS&#x7684;&#x65B9;&#x6CD5;&#x3002;</p><h2 id="0x0003-">0x0003 &#x91CD;&#x65B0;&#x4E0A;&#x7EBF;</h2><p>&#x529F;&#x592B;&#x4E0D;&#x8D1F;&#x6709;&#x5FC3;&#x4EBA;&#xFF0C;&#x5728;&#x8D70;&#x4E86;N&#x6B21;&#x5F2F;&#x8DEF;&#x4E4B;&#x540E;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x7EC8;&#x4E8E;&#x6062;&#x590D;&#x6B63;&#x5E38;&#x4E86;&#x3002;</p><h3 id="16-25">16:25</h3><p>&#x5728;&#x590D;&#x5236;lib&#x6587;&#x4EF6;&#x5939;&#x7684;&#x65F6;&#x5019;&#x3002;&#x7B2C;&#x4E00;&#x6B21;&#x628A;&#x6587;&#x4EF6;&#x590D;&#x5236;&#x9519;&#x4E86;&#x4F4D;&#x7F6E;&#x3002;&#x4ECE; <code>/mnt/usr/lib</code> &#x590D;&#x5236;&#x5230;&#x4E86; <code>/usr/lib/</code>&#x91CC;&#x3002;&#x7B2C;&#x4E8C;&#x6B21;&#x6267;&#x884C;&#x5230;&#x4E00;&#x534A;&#xFF0C;&#x53D1;&#x73B0;&#x5728;&#x8986;&#x76D6; <code>libglib</code>&#x7684;&#x65F6;&#x5019;&#xFF0C;SSHFS&#x5E9F;&#x4E86;&#x3002;</p><p>&#x5E86;&#x5E78;&#x81EA;&#x5DF1;&#x7B2C;&#x4E00;&#x6B21;&#x590D;&#x5236;&#x9519;&#x4E86;&#x6CA1;&#x6709;&#x5220;&#x9664;&#xFF0C;&#x4E3A;&#x4E86;&#x5B89;&#x5168;&#x8D77;&#x89C1;&#x6211;&#x5728;VNC&#x4E0B;&#x5B8C;&#x6210;&#x4E86;&#x8986;&#x76D6;&#x3002;</p><h3 id="18-09">18:09</h3><p>MySQL&#x4E0D;&#x77E5;&#x9053;&#x56E0;&#x4E3A;&#x4EC0;&#x4E48;&#x539F;&#x56E0;&#x65E0;&#x6CD5;&#x542F;&#x52A8;&#xFF0C;&#x65E5;&#x5FD7;&#x62A5;&#x9519;<em>Could notcreate unix socket lock file /var/run/mysqld/mysql.sock.lock&#x3002;</em></p><p>&#x5728;&#x5C1D;&#x8BD5;&#x4E86;&#x5404;&#x79CD;&#x65B9;&#x6CD5;&#x4E4B;&#x540E;&#xFF0C;&#x53D1;&#x73B0;&#x628A;socket&#x7684;&#x8DEF;&#x5F84;&#x6307;&#x5411; <code>/tmp</code> &#x91CC;&#x9762;&#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;</p><p><code>/tmp</code> &#x548C; <code>/var/run</code> &#x90FD;&#x6302;&#x8F7D;&#x5728;tmpfs&#x4E0B;&#x3002;&#x6211;&#x5728;&#x590D;&#x5236;&#x7684;&#x65F6;&#x5019;&#x6CA1;&#x6709;&#x6CE8;&#x610F;&#xFF0C;&#x8986;&#x76D6;&#x4E86; <code>/var/run</code>&#x3002;</p><p>&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#xFF0C;&#x91CD;&#x542F;&#x53EF;&#x4EE5;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#x3002;</p><h3 id="18-11">18:11</h3><p>&#x7F51;&#x7AD9;&#x6210;&#x529F;&#x4E0A;&#x7EBF;&#xFF01;</p><p></p><p>&#x622A;&#x6B62;&#x81F3;&#x7F51;&#x7AD9;&#x4E0A;&#x7EBF;&#xFF0C;&#x4E24;&#x4E2A;&#x5DE5;&#x5355;&#x8FD8;&#x662F;&#x6CA1;&#x6709;&#x4EBA;&#x56DE;&#x590D;&#xFF0C;&#x4E4B;&#x524D;&#x6362;IP&#x7684;&#x7533;&#x8BF7;&#x4E5F;&#x6CA1;&#x6709;&#x6263;&#x6B3E;&#x3002;</p><p>&#x867D;&#x7136;&#x7F51;&#x4E0A;&#x5F88;&#x591A;&#x4EBA;&#x8868;&#x793A;Cloudcone&#x7684;&#x5DE5;&#x5355;&#x90FD;&#x662F;&#x79D2;&#x56DE;&#xFF0C;&#x4F46;&#x8FD9;&#x6B21;&#x7684;&#x4E8B;&#x4EF6;&#x771F;&#x7684;&#x8BA9;&#x6211;&#x62C5;&#x5FC3;&#x65E5;&#x540E;&#x7684;&#x4F7F;&#x7528;&#x3002;</p><p>&#x5C31;&#x8FD9;&#x6837;&#x5427;&#x3002;</p><p>2019-2-9 20:34:19</p>]]></content:encoded></item><item><title><![CDATA[新技能学习：教你如何阅读Java字节码]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>Java&#x5B57;&#x8282;&#x7801;&#x662F;&#x7531; <code>.java</code> &#x6587;&#x4EF6;&#x901A;&#x8FC7;Java&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6210; <code>.class</code> &#x6587;&#x4EF6;&#x6240;&#x5305;&#x542B;&#x7684;&#x4EE3;&#x7801;,&#x6211;&#x4EEC;&#x901A;&#x5E38;&#x4F7F;&#x7528;&#x7684;Java&#x7A0B;&#x5E8F;&#x5C31;&#x662F;&#x901A;&#x8FC7;Java&#x865A;&#x62DF;&#x673A;&#x6267;&#x884C;Java&#x5B57;&#x8282;</p>]]></description><link>https://blog.lss233.com/xin-ji-neng-xue-xi-jiao-ni-ru-he-yan-kan-javazi-jie-ma/</link><guid isPermaLink="false">6024d72081c0bcbcde7de981</guid><category><![CDATA[技术]]></category><category><![CDATA[Java]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Sat, 09 Feb 2019 06:30:50 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1549546525-cce704e07a2c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1549546525-cce704e07a2c?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="&#x65B0;&#x6280;&#x80FD;&#x5B66;&#x4E60;&#xFF1A;&#x6559;&#x4F60;&#x5982;&#x4F55;&#x9605;&#x8BFB;Java&#x5B57;&#x8282;&#x7801;"><p>Java&#x5B57;&#x8282;&#x7801;&#x662F;&#x7531; <code>.java</code> &#x6587;&#x4EF6;&#x901A;&#x8FC7;Java&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x6210; <code>.class</code> &#x6587;&#x4EF6;&#x6240;&#x5305;&#x542B;&#x7684;&#x4EE3;&#x7801;,&#x6211;&#x4EEC;&#x901A;&#x5E38;&#x4F7F;&#x7528;&#x7684;Java&#x7A0B;&#x5E8F;&#x5C31;&#x662F;&#x901A;&#x8FC7;Java&#x865A;&#x62DF;&#x673A;&#x6267;&#x884C;Java&#x5B57;&#x8282;&#x7801;&#x6765;&#x5F97;&#x5230;&#x7684;&#x6548;&#x679C;&#x3002;<br>
&#x65E2;&#x7136;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x53E3;&#x7B97;MD5&#x3001;&#x624B;&#x7B97;&#x4E8C;&#x7EF4;&#x7801;&#xFF0C;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x5C31;&#x6765;&#x8BB2;&#x8BB2;&#x773C;&#x770B;Java&#x5B57;&#x8282;&#x7801;&#x5427;&#xFF01;</p>
<h1 id="0x0000">0x0000 - &#x51C6;&#x5907;&#x5DE5;&#x4F5C;</h1>
<p>&#x5728;&#x5F00;&#x59CB;&#x5B66;&#x4E60;&#x4E4B;&#x524D;&#xFF0C;&#x8BF7;&#x5148;&#x51C6;&#x5907;&#x597D;&#x4E0B;&#x5217;&#x5DE5;&#x5177;&#xFF1A;<br>
1. &#x4E00;&#x6B3E;&#x652F;&#x6301;HEX&#x683C;&#x5F0F;&#x7684;&#x7F16;&#x8F91;&#x5668;&#xFF0C;&#x5982; Sublime Text&#xFF08;&#x63A8;&#x8350;&#xFF09;&#x3001;Ultra Editor&#x7B49;&#x3002;<br>
2. &#x4E00;&#x4E2A;Java&#x73AF;&#x5883;&#x5F00;&#x53D1;&#x73AF;&#x5883;&#xFF0C;&#x7528;&#x6765;&#x7F16;&#x8BD1;&#x4E00;&#x4E2A;<code>.class</code>&#x6587;&#x4EF6;&#x3002;</p>
<p>&#x4F60;&#x9700;&#x8981;&#x77E5;&#x9053;&#x8FD9;&#x4E9B;&#x57FA;&#x672C;&#x77E5;&#x8BC6;&#xFF1A;</p>
<ul>
<li>HEX&#x5728;&#x8FD9;&#x91CC;&#x6307;&#x7684;&#x662F;<a href="https://baike.baidu.com/item/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6">&#x5341;&#x516D;&#x8FDB;&#x5236;</a>&#x3002;</li>
<li>&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x4E2D;&#xFF0C;1&#x4E2A;&#x5B57;&#x8282;&#x53EF;&#x4EE5;&#x8868;&#x793A;&#x6210;2&#x4E2A;&#x8FDE;&#x7EED;&#x7684;16&#x8FDB;&#x5236;&#x6570;&#x5B57;&#xFF0C;&#x5982; <code>00</code>&#x3001;<code>0A</code>&#x3001;<code>FF</code>&#x7B49;&#x3002;</li>
<li>C&#x8BED;&#x8A00;&#x3001;C++&#x3001;Shell&#x3001;Python&#x3001;Java&#x8BED;&#x8A00;&#x53CA;&#x5176;&#x4ED6;&#x76F8;&#x8FD1;&#x7684;&#x8BED;&#x8A00;&#x4F7F;&#x7528;&#x5B57;&#x9996;<code>0x</code>&#x8868;&#x793A;&#x4E00;&#x4E2A;16&#x8FDB;&#x5236;&#x6570;&#x5B57;&#x7684;&#x5F00;&#x59CB;&#xFF0C;&#x5982;<code>0x0000</code>&#x3002;</li>
<li>&#x4E86;&#x89E3;&#x5927;&#x7AEF;(<strong>Big-Endian</strong>)&#x6A21;&#x5F0F;&#x7684;&#x5B57;&#x8282;&#x5E8F;(<strong>Endian</strong>)&#xFF0C;&#x8BE6;&#x7EC6;&#x4ECB;&#x7ECD;&#x53EF;&#x4EE5;&#x770B;<a href="http://www.cppblog.com/tx7do/archive/2009/01/06/71276.html">&#x8FD9;&#x91CC;</a>&#x3002;</li>
</ul>
<p>&#x6CE8;&#xFF1A;&#x672C;&#x6587;&#x4E3B;&#x8981;&#x53C2;&#x8003;&#x8D44;&#x6599;&#x6765;&#x81EA;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html"><strong>Java Virtual Machine Specification</strong>(JVM&#x89C4;&#x8303;) &#x7B2C;4&#x7AE0;</a>&#xFF0C;&#x672C;&#x6587;&#x5185;&#x5BB9;&#x4EC5;&#x662F;&#x76AE;&#x6BDB;&#x3002;&#x4E3A;&#x4E86;&#x65B9;&#x4FBF;&#x8BFB;&#x8005;&#x81EA;&#x884C;&#x4E86;&#x89E3;&#xFF0C;&#x672C;&#x6587;&#x5C06;<strong>&#x4E0D;&#x4F1A;</strong>&#x7FFB;&#x8BD1;&#x4E00;&#x4E9B;&#x4E13;&#x6709;&#x540D;&#x8BCD;&#x3002;</p>
<!-- text -->
<p><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2934663494016690" data-ad-slot="7492783340" data-ad-format="auto" data-full-width-responsive="true"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<p>&#x63A5;&#x4E0B;&#x6765;&#xFF0C;&#x6211;&#x4EEC;&#x5148;&#x4ECE;&#x7B80;&#x5355;&#x7684;&#x5F00;&#x59CB;&#x3002;</p>
<h1 id="0x0001helloworldclass">0x0001 - HelloWorld.class</h1>
<p>&#x5199;&#x4E00;&#x4E2A;<code>HelloWorld.java</code>:</p>
<pre><code class="language-java">public class HelloWorld {
    public static void main(String[] args) {
        System.out.println(&quot;Hello World!&quot;);
    }
}

</code></pre>
<p>&#x7136;&#x540E;&#x7F16;&#x8BD1;&#x5F97;&#x5230; <code>HelloWorld.class</code>&#x6587;&#x4EF6;&#xFF0C;&#x6211;&#x4EEC;&#x4F7F;&#x7528;HEX&#x7F16;&#x8F91;&#x5668;&#x6253;&#x5F00;&#xFF0C;&#x4F60;&#x5927;&#x6982;&#x4F1A;&#x770B;&#x5230;&#x8FD9;&#x6837;&#x7684;&#x5185;&#x5BB9;:</p>
<pre><code class="language-hex">cafe babe 0000 0031 0022 0a00 0600 1409
0015 0016 0800 170a 0018 0019 0700 1a07
001b 0100 063c 696e 6974 3e01 0003 2829
5601 0004 436f 6465 0100 0f4c 696e 654e
756d 6265 7254 6162 6c65 0100 124c 6f63
616c 5661 7269 6162 6c65 5461 626c 6501
0004 7468 6973 0100 0c4c 4865 6c6c 6f57
6f72 6c64 3b01 0004 6d61 696e 0100 1628
5b4c 6a61 7661 2f6c 616e 672f 5374 7269
6e67 3b29 5601 0004 6172 6773 0100 135b
4c6a 6176 612f 6c61 6e67 2f53 7472 696e
673b 0100 0a53 6f75 7263 6546 696c 6501
000f 4865 6c6c 6f57 6f72 6c64 2e6a 6176
610c 0007 0008 0700 1c0c 001d 001e 0100
0b48 656c 6c6f 2057 6f72 6c64 0700 1f0c
0020 0021 0100 0a48 656c 6c6f 576f 726c
6401 0010 6a61 7661 2f6c 616e 672f 4f62
6a65 6374 0100 106a 6176 612f 6c61 6e67
2f53 7973 7465 6d01 0003 6f75 7401 0015
4c6a 6176 612f 696f 2f50 7269 6e74 5374
7265 616d 3b01 0013 6a61 7661 2f69 6f2f
5072 696e 7453 7472 6561 6d01 0007 7072
696e 746c 6e01 0015 284c 6a61 7661 2f6c
616e 672f 5374 7269 6e67 3b29 5600 2100
0500 0600 0000 0000 0200 0100 0700 0800
0100 0900 0000 2f00 0100 0100 0000 052a
b700 01b1 0000 0002 000a 0000 0006 0001
0000 0001 000b 0000 000c 0001 0000 0005
000c 000d 0000 0009 000e 000f 0001 0009
0000 0037 0002 0001 0000 0009 b200 0212
03b6 0004 b100 0000 0200 0a00 0000 0a00
0200 0000 0300 0800 0400 0b00 0000 0c00
0100 0000 0900 1000 1100 0000 0100 1200
0000 0200 13
</code></pre>
<p>&#x5982;&#x679C;&#x4F60;&#x5B8C;&#x5168;&#x4E0D;&#x4E86;&#x89E3;&#x5B57;&#x8282;&#x7801;&#xFF0C;&#x53EF;&#x80FD;&#x89C9;&#x5F97;&#x8FD9;&#x4E00;&#x56E2;&#x4E71;&#x4E03;&#x516B;&#x7CDF;&#x6BEB;&#x65E0;&#x5934;&#x7EEA;&#x3002;</p>
<blockquote>
<p>&#x63D0;&#x793A;: &#x7531;&#x4E8E;&#x672C;&#x4EBA;&#x4F7F;&#x7528;Maven&#x7F16;&#x8BD1;&#x751F;&#x6210;&#x7684;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#xFF0C;&#x5B83;&#x9ED8;&#x8BA4;&#x4F1A;&#x5C1D;&#x8BD5;&#x4F7F;&#x7528;&#x6BD4;&#x8F83;&#x4F4E;&#x7684;Java&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x3002;&#x56E0;&#x6B64;&#x5982;&#x679C;&#x4F60;&#x7684;&#x6587;&#x4EF6;&#x548C;&#x672C;&#x6587;&#x4E0D;&#x540C;&#xFF0C;&#x5728;&#x8FD9;&#x91CC;<a href="https://gist.github.com/lss233/1370e77dfa14c69c04df19d0e4668f64">&#x4E0B;&#x8F7D;</a>&#x6211;&#x7684;<strong>HelloWorld.class</strong>&#xFF0C;&#x6216;&#x8005;&#x4F7F;&#x7528;&#x548C;&#x672C;&#x4EBA;&#x4E00;&#x6837;&#x7684;Maven&#x914D;&#x7F6E;&#x6784;&#x5EFA;&#x3002;</p>
</blockquote>
<p>&#x522B;&#x6025;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x5148;&#x6765;&#x4E86;&#x89E3;&#x4E00;&#x4E0B;&#x5B83;&#x7684;&#x7ED3;&#x6784;&#x3002;</p>
<p>&#x5728;Java&#x4E2D;&#xFF0C;&#x4E00;&#x4E2A;<code>.class</code>&#x6587;&#x4EF6;&#x7684;&#x7ED3;&#x6784;&#x662F;&#x8FD9;&#x6837;&#x7684;&#xFF1A;</p>
<pre><code class="language-java">ClassFile {
    4&#x5B57;&#x8282;             Java&#x9B54;&#x503C;;
    4&#x5B57;&#x8282;             &#x7F16;&#x8BD1;&#x5668;&#x6B21;&#x8981;&#x7248;&#x672C;;
    2&#x5B57;&#x8282;             &#x7F16;&#x8BD1;&#x5668;&#x4E3B;&#x8981;&#x7248;&#x672C;;
    2&#x5B57;&#x8282;             &#x5E38;&#x91CF;&#x6C60;&#x6570;;
   &#x5F88;&#x591A;&#x5B57;&#x8282;        &#x5E38;&#x91CF;&#x6C60;;
    2&#x5B57;&#x8282;             &#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;;
    2&#x5B57;&#x8282;             &#x5F53;&#x524D;&#x7C7B;;
    2&#x5B57;&#x8282;             &#x7236;&#x7C7B;;
    2&#x5B57;&#x8282;             &#x63A5;&#x53E3;&#x6570;;
   &#x5F88;&#x591A;&#x5B57;&#x8282;        &#x63A5;&#x53E3;;
    2&#x5B57;&#x8282;             &#x5B57;&#x6BB5;&#x6570;;
   &#x5F88;&#x591A;&#x5B57;&#x8282;        &#x5B57;&#x6BB5;;
    2&#x5B57;&#x8282;             &#x65B9;&#x6CD5;&#x6570;;
   &#x5F88;&#x591A;&#x5B57;&#x8282;        &#x65B9;&#x6CD5;;
    2&#x5B57;&#x8282;             &#x5C5E;&#x6027;&#x6570;;
   &#x5F88;&#x591A;&#x5B57;&#x8282;        &#x5C5E;&#x6027;;
}
</code></pre>
<h2 id="java">Java&#x9B54;&#x503C;</h2>
<p>&#x9B54;&#x503C;(<strong>Magic Number</strong>)&#x662F;&#x4E00;&#x6BB5;&#x7279;&#x5B9A;&#x7684;&#x7528;&#x6765;&#x6807;&#x8BC6;&#x67D0;&#x79CD;&#x6587;&#x4EF6;&#x6216;&#x8005;&#x534F;&#x8BAE;&#x7684;&#x683C;&#x5F0F;&#x3002;<br>
Java&#x4F5C;&#x4E3A;<s>&#x4E00;&#x79CD;&#x5496;&#x5561;</s>&#xFF0C;&#x5B83;&#x7684;&#x9B54;&#x503C;&#x975E;&#x5E38;&#x5BB9;&#x6613;&#x8FA8;&#x8BA4; &#x2014;&#x2014; <code>CA FE BA BE</code>&#xFF0C;&#x6CA1;&#x9519;&#xFF0C;<code>Cafe Babe</code>&#x3002;<br>
&#x8FD9;4&#x4E2A;&#x5B57;&#x8282;&#x544A;&#x8BC9;&#x4F60;&#x5B83;&#x662F;&#x4E00;&#x4E2A;<code>Java &#x7C7B;&#x6587;&#x4EF6;</code>&#xFF0C;&#x6240;&#x6709;&#x7684;<code>.class</code>&#x6587;&#x4EF6;&#x90FD;&#x4F1A;&#x4EE5;&#x8FD9;4&#x4E2A;&#x5B57;&#x8282;&#x5F00;&#x59CB;&#x3002;<br>
&#x5173;&#x4E8E;&#x5B83;&#x7684;&#x7531;&#x6765;&#xFF0C;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x6709;&#x8DA3;&#x7684;&#x80CC;&#x666F;&#x6545;&#x4E8B;&#x3002;&#x5982;&#x679C;&#x4F60;&#x611F;&#x5174;&#x8DA3;&#xFF0C;&#x53EF;&#x4EE5;<a href="https://stackoverflow.com/questions/2808646/why-are-the-first-four-bytes-of-the-java-class-file-format-cafebabe">&#x70B9;&#x51FB;&#x8FD9;&#x91CC;</a>&#x3002;</p>
<!-- text -->
<p><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2934663494016690" data-ad-slot="7492783340" data-ad-format="auto" data-full-width-responsive="true"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<h2 id>&#x4E3B;&#x8981;&#x7248;&#x672C;&#x548C;&#x6B21;&#x8981;&#x7248;&#x672C;</h2>
<p>&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x56DB;&#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x662F;&#x4E24;&#x4E2A;&#x7531;2&#x5B57;&#x8282;&#x7EC4;&#x6210;&#x7684;&#x7F16;&#x8BD1;&#x5668;&#x7248;&#x672C;&#x53F7;&#x3002;<br>
&#x5728;&#x672C;&#x6587;&#x4E2D;&#xFF0C;&#x4ED6;&#x4EEC;&#x662F; <code>0000 0031</code>&#x3002;<br>
<code>0000</code>&#x8BF4;&#x660E;&#x6B21;&#x8981;&#x7248;&#x672C;&#x53F7;&#x4E3A;0&#xFF0C; <code>0031</code>&#x8F6C;&#x6210;&#x5341;&#x8FDB;&#x5236;&#x4E4B;&#x540E;&#x662F;49&#xFF0C;&#x8BF4;&#x660E;&#x8FD9;&#x4E2A;&#x7C7B;&#x6587;&#x4EF6;&#x7684;&#x7F16;&#x8BD1;&#x5668;&#x7248;&#x672C;&#x662F;<code>49.0</code>&#x3002;&#x5BF9;&#x5E94;&#x5230;Java&#x7248;&#x672C;&#x5219;&#x662F;<code>Java 5</code>&#x3002;<br>
&#x5173;&#x4E8E;&#x7248;&#x672C;&#x53F7;&#x7684;&#x5BF9;&#x5E94;&#xFF0C;&#x53EF;&#x4EE5;<a href="https://stackoverflow.com/questions/1293308/java-api-to-find-out-the-jdk-version-a-class-file-is-compiled-for">&#x53C2;&#x8003;&#x8FD9;&#x91CC;</a>&#x3002;</p>
<h2 id="constantpool">&#x5E38;&#x91CF;&#x6C60;(Constant Pool)</h2>
<p>&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x4E24;&#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x5E38;&#x91CF;&#x6C60;&#x6570;&#xFF0C;&#x662F;&#x6574;&#x4E2A;&#x7C7B;&#x6587;&#x4EF6;&#x4E2D;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x7684;&#x4E24;&#x4E2A;&#x5B57;&#x8282;&#x3002;&#x5B83;&#x4F1A;&#x544A;&#x8BC9;&#x6211;&#x4EEC;&#x5E38;&#x91CF;&#x6C60;&#x7684;&#x5927;&#x5C0F;&#x3002;</p>
<p>&#x5E38;&#x91CF;&#x6C60;(<strong>Constant Pool</strong>)&#x662F;&#x7C7B;&#x6587;&#x4EF6;&#x4E2D;&#x6700;&#x957F;&#xFF0C;&#x4E5F;&#x662F;&#x6700;&#x91CD;&#x8981;&#x7684;&#x90E8;&#x5206;&#x3002;&#x4F60;&#x7684;&#x7C7B;&#x540D;&#x3001;&#x5F15;&#x7528;&#x3001;&#x5B57;&#x7B26;&#x4E32;&#x7B49;&#x7B49;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x4E00;&#x4E2A;&#x7C7B;&#x91CC;&#x7684;&#x6240;&#x6709;&#x4E1C;&#x897F;&#x90FD;&#x5728;&#x8FD9;&#x91CC;&#x9762;&#x4E86;&#x3002;<br>
&#x503C;&#x5F97;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x7684;&#x5E38;&#x91CF;&#x7684;&#x7D22;&#x5F15;&#x662F;&#x4ECE;<strong>1</strong>&#x5F00;&#x59CB;&#x7684;&#xFF0C;&#x5B83;&#x7684;&#x6570;&#x91CF;&#x53EA;&#x6709;<strong>&#x5E38;&#x91CF;&#x6C60;&#x6570; - 1</strong>&#x90A3;&#x4E48;&#x591A;&#x3002;&#x5728;&#x6211;&#x4EEC;&#x8FD9;&#x4E2A;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x5E38;&#x91CF;&#x6C60;&#x6570;&#x662F;34&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x6709;33&#x4E2A;&#x5E38;&#x91CF;&#x3002;<br>
&#x5B57;&#x8282;&#x7801;&#x4E4B;&#x95F4;&#x4F1A;&#x901A;&#x8FC7;&#x76F4;&#x63A5;&#x8868;&#x793A;&#x7D22;&#x5F15;&#x7684;&#x65B9;&#x5F0F;&#x5F15;&#x7528;&#x67D0;&#x4E2A;&#x5E38;&#x91CF;&#x3002;<br>
&#x5E38;&#x91CF;&#x901A;&#x5E38;&#x7531;1&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x6807;&#x7B7E;&#x548C;&#x591A;&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x503C;&#x6765;&#x7EC4;&#x6210;&#x3002;</p>
<h3 id>&#x89E3;&#x8BFB;&#x5E38;&#x91CF;&#x6C60;</h3>
<p>&#x5E38;&#x91CF;&#x6C60;&#x5185;&#x5305;&#x542B;&#x7684;&#x4FE1;&#x606F;&#x91CF;&#x5DE8;&#x5927;&#x800C;&#x4E14;&#x590D;&#x6742;&#xFF0C;&#x7B2C;&#x4E00;&#x6B21;&#x89E3;&#x8BFB;&#x53EF;&#x80FD;&#x4F1A;&#x53D1;&#x751F;&#x56F0;&#x96BE;&#xFF0C;&#x6CA1;&#x5173;&#x7CFB;&#xFF0C;&#x6211;&#x4EEC;&#x4E00;&#x4E2A;&#x4E2A;&#x6765;&#x770B;&#x3002;</p>
<h4 id="1">#1</h4>
<p>&#x6211;&#x4EEC;&#x5148;&#x6765;&#x770B;&#x770B;&#x7B2C;1&#x4E2A;&#x5E38;&#x91CF;&#xFF1A;</p>
<pre><code class="language-hex">0a00 0600 14
</code></pre>
<ul>
<li><code>0a</code> &#x8868;&#x793A;&#x8FD9;&#x4E2A;&#x5E38;&#x91CF;&#x662F;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x5F15;&#x7528;(<strong>Methodref</strong>)</li>
<li><code>00 06</code> &#x8868;&#x793A;&#x5B83;&#x6240;&#x5728;&#x7684;&#x7C7B;&#x7D22;&#x5F15;</li>
<li><code>00 14</code> &#x5219;&#x6307;&#x5411;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x540D;&#x5B57;&#x4E0E;&#x8FD4;&#x56DE;&#x503C;&#x7C7B;<strong>NameAndType</strong>&#x3002;</li>
</ul>
<p>&#x540C;&#x6837;&#xFF0C;&#x4F7F;&#x7528;<code>09</code>&#x8868;&#x793A;&#x7684;&#x5B57;&#x6BB5;(<strong>Fieldref</strong>)&#xFF0C;<code>0b</code>&#x8868;&#x793A;&#x7684;&#x63A5;&#x53E3;&#x65B9;&#x6CD5;(<strong>InterfaceMethodref</strong>)&#x4E5F;&#x662F;&#x540C;&#x6837;&#x7684;&#x7ED3;&#x6784;&#x3002;</p>
<h4 id="2">#2</h4>
<p>&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x7EE7;&#x7EED;&#x770B;&#x4E0B;&#x4E00;&#x7EC4;&#xFF0C;</p>
<pre><code class="language-hex">09 0015 0016
</code></pre>
<p>&#x8868;&#x793A;&#x7684;&#x662F;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;&#x3002;</p>
<h4 id="3">#3</h4>
<p>&#x63A5;&#x4E0B;&#x6765;&#x4E00;&#x7EC4;</p>
<pre><code class="language-hex">0800 17
</code></pre>
<ul>
<li><code>08</code>&#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;<code>String</code>&#x5E38;&#x91CF;&#x3002;</li>
<li><code>00 17</code> &#x8868;&#x793A;&#x8FD9;&#x4E2A;<code>String</code>&#x7684;&#x6587;&#x672C;&#x7D22;&#x5F15;&#x3002;&#x8FD9;&#x4E2A;&#x7D22;&#x5F15;&#x5E94;&#x8BE5;&#x5BF9;&#x5E94;&#x7684;&#x662F;&#x4E00;&#x4E2A;<strong>Utf8</strong>&#x5E38;&#x91CF;&#x3002;</li>
</ul>
<h4 id="4">#4</h4>
<p>&#x4E0B;&#x4E00;&#x7EC4;</p>
<pre><code class="language-hex">0a 0018 0019
</code></pre>
<p>&#x548C;&#x524D;&#x9762;&#x7684;&#x5185;&#x5BB9;&#x4E00;&#x6837;&#xFF0C;&#x54B1;&#x5C31;&#x4E0D;&#x8BF4;&#x4E86;&#x3002;</p>
<h4 id="56">#5-6</h4>
<p>&#x63A5;&#x4E0B;&#x6765;&#x4E24;&#x7EC4;</p>
<pre><code class="language-hex">07 00 1a
07 00 1b
</code></pre>
<ul>
<li>07 &#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;<code>Class</code>&#x5E38;&#x91CF;&#x3002;</li>
<li><code>00 1a</code>&#x548C;00 1b`&#x5219;&#x662F;&#x4ED6;&#x4EEC;&#x540D;&#x5B57;&#x7684;&#x7D22;&#x5F15;&#x3002;&#x4ED6;&#x4EEC;&#x5E94;&#x8BE5;&#x6307;&#x5411;&#x7684;&#x90FD;&#x662F;<strong>Utf8</strong>&#x5E38;&#x91CF;&#x3002;<br>
&#x8FD8;&#x8BB0;&#x5F97; <strong>#1</strong> &#x5417;&#xFF1F;&#x5B83;&#x5C31;&#x6307;&#x5411;&#x4E86; <strong>#6</strong> &#x8FD9;&#x4E2A;&#x7C7B;&#x3002;<br>
&#x4F46;&#x662F;&#x6211;&#x4EEC;&#x76EE;&#x524D;&#x8FD8;&#x6CA1;&#x6709;&#x529E;&#x6CD5;&#x77E5;&#x9053;&#x8FD9;&#x5177;&#x4F53;&#x662F;&#x4E2A;&#x4EC0;&#x4E48;&#x7C7B;&#xFF0C;&#x7EE7;&#x7EED;&#x5F80;&#x4E0B;&#x770B;&#x5427;&#x3002;</li>
</ul>
<h4 id="719">#7-19</h4>
<p>&#x63A5;&#x4E0B;&#x6765;&#x51E0;&#x7EC4;&#x6BD4;&#x8F83;&#x957F;&#xFF1A;</p>
<pre><code class="language-hex">01 0006 3c69 6e69 743e
01 0003 2829 56
01 0004 436f 6465
01 000f 4c69 6e65 4e75 6d62 6572 5461 626c 65
01 0012 4c6f 6361 6c56 6172 6961 626c 6554 6162 6c65
01 0004 7468 6973 
01 000c 4c48 656c 6c6f 576f 726c 643b
01 0004 6d61 696e
01 0016 285b 4c6a 6176 612f 6c61 6e67 2f53 7472 696e 673b 2956 
01 0004 6172 6773 
01 0013 5b4c 6a61 7661 2f6c 616e 672f 5374 7269 6e67 3b
01 000a 536f 7572 6365 4669 6c65 
01 000f 4865 6c6c 6f57 6f72 6c64 2e6a 6176 61
</code></pre>
<ul>
<li>&#x7B2C;&#x4E00;&#x4E2A;&#x5B57;&#x8282;<code>01</code>&#x8868;&#x793A;&#x4ED6;&#x4EEC;&#x662F;<strong>Utf8</strong>&#x5E38;&#x91CF;&#x3002;&#x8FD9;&#x4E9B;&#x5E38;&#x91CF;&#x76F4;&#x63A5;&#x5B58;&#x653E;&#x6587;&#x672C;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x7528;&#x8BB0;&#x4E8B;&#x672C;&#x683C;&#x5F0F;&#x76F4;&#x63A5;&#x9605;&#x8BFB;&#x3002;<br>
&#x5907;&#x53D7;&#x597D;&#x8BC4;&#x7684; <strong>hhclass</strong> &#x6C49;&#x5316;&#x5DE5;&#x5177;&#x5C31;&#x662F;&#x901A;&#x8FC7;&#x4FEE;&#x6539;&#x8FD9;&#x4E9B;&#x5E38;&#x91CF;&#x5B9E;&#x73B0;&#x7684;&#x3002;</li>
<li>&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x7531;2&#x4E2A;&#x5B57;&#x8282;&#x7EC4;&#x6210;&#x7684;&#x4E00;&#x4E2A;&#x6570;&#xFF0C;&#x5B83;&#x8868;&#x793A;&#x6587;&#x672C;&#x7684;&#x957F;&#x5EA6;&#x3002;<br>
&#x62FF;&#x7B2C;&#x4E00;&#x4E2A;&#x6765;&#x8BF4;&#xFF0C;&#x5B83;&#x662F;<code>0006</code>&#xFF0C;&#x8868;&#x793A;&#x63A5;&#x4E0B;&#x6765;6&#x4E2A;&#x5B57;&#x8282;&#x90FD;&#x662F;&#x6587;&#x672C;&#x5185;&#x5BB9;&#x3002;</li>
<li>&#x5269;&#x4E0B;&#x7684;&#x5B57;&#x8282;&#x5168;&#x90E8;&#x90FD;&#x662F; <strong>Utf8</strong> &#x7F16;&#x7801;&#x7684;&#x6587;&#x672C;&#x3002;&#x4E00;&#x822C;&#x60C5;&#x51B5;&#x4E0B;&#x82F1;&#x6587;&#x5B57;&#x6BCD;&#x7531;1&#x4E2A;&#x5B57;&#x8282;&#x7EC4;&#x6210;&#xFF0C;&#x5176;&#x4ED6;&#x6587;&#x672C;&#x5982;&#x6C49;&#x5B57;&#x4F1A;&#x7528;&#x5230;2&#x4E2A;&#x5B57;&#x8282;&#x3002;<br>
&#x8FD8;&#x662F;&#x7B2C;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;&#xFF0C;<code>3c69 6e69 743e</code>&#x8868;&#x793A;&#x7684;&#x6587;&#x672C;&#x662F;<code>&lt;init&gt;</code>&#x3002;<br>
&#x5173;&#x4E8E;<strong>Utf8</strong>&#x8F6C;&#x6587;&#x672C;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;<a href="https://www.browserling.com/tools/utf8-decode">&#x5728;&#x7EBF;&#x5DE5;&#x5177;</a>&#xFF08;&#x56E0;&#x4E3A;&#x662F;&#x82F1;&#x6587;&#x5B57;&#x6BCD;&#xFF0C;&#x6240;&#x4EE5;&#x8BB0;&#x5F97;&#x5728;&#x6BCF;&#x4E2A;&#x5B57;&#x8282;&#x540E;&#x9762;&#x52A0;&#x4E0A;&#x7A7A;&#x683C;&#xFF09;&#xFF0C;&#x6216;&#x8005;&#x4F7F;&#x7528;HEX&#x7F16;&#x8F91;&#x5668;&#x65B0;&#x5EFA;&#x4E00;&#x4E2A;txt&#x6587;&#x6863;&#x7136;&#x540E;&#x7C98;&#x8D34;&#x8FDB;&#x53BB;&#xFF0C;&#x518D;&#x7528;&#x522B;&#x7684;&#x6587;&#x672C;&#x7F16;&#x8F91;&#x5668;&#x6253;&#x5F00;&#x5B83;&#x3002;<br>
<code>&lt;init&gt;</code>&#x662F;&#x4E00;&#x4E2A;&#x7C7B;&#x7684;&#x521D;&#x59CB;&#x5316;&#x65B9;&#x6CD5;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6784;&#x9020;&#x51FD;&#x6570;&#x5728;Java&#x5B57;&#x8282;&#x7801;&#x4E2D;&#x7684;&#x540D;&#x5B57;&#x3002;</li>
</ul>
<p>&#x8FD9;&#x4E9B;&#x6587;&#x672C;&#x901A;&#x5E38;&#x90FD;&#x4F1A;&#x88AB;&#x5176;&#x4ED6;&#x5B57;&#x8282;&#x7801;&#x5F15;&#x7528;&#xFF0C;&#x4E0D;&#x8FC7;&#x76EE;&#x524D;&#x8FD8;&#x6CA1;&#x6709;&#x9047;&#x5230;&#x3002;</p>
<!-- text -->
<p><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2934663494016690" data-ad-slot="7492783340" data-ad-format="auto" data-full-width-responsive="true"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<h4 id="20">#20</h4>
<pre><code class="language-hex">0c 0007 0008
</code></pre>
<ul>
<li><code>0c</code>&#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x4E2A; <strong>NameAndType</strong> &#x5E38;&#x91CF;&#xFF0C;&#x7528;&#x6765;&#x8868;&#x793A;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;&#x6216;&#x8005;&#x65B9;&#x6CD5;&#x3002;</li>
<li><code>0007</code>&#x662F;&#x5B83;&#x7684;&#x540D;&#x5B57;&#xFF0C;&#x5BF9;&#x5E94;&#x7D22;&#x5F15; <strong>#7</strong> &#xFF0C;&#x4E5F;&#x5C31;&#x662F;<code>&lt;init&gt;</code>&#x3002;</li>
<li><code>0008</code>&#x662F;&#x5B83;&#x7684;&#x63CF;&#x8FF0;&#xFF0C;&#x5BF9;&#x5E94;&#x7D22;&#x5F15; <strong>#8</strong> &#xFF0C;&#x662F;<code>()V</code>&#x3002;&#x5B83;&#x5305;&#x542B;&#x4E86;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x53C2;&#x6570;&#x3002;<code>V</code>&#x8868;&#x793A;<strong>void</strong>&#x3002;</li>
</ul>
<p>&#x8FD9;&#x4E2A;&#x5E38;&#x91CF;&#x88AB; <strong>#1</strong> &#x5F15;&#x7528;&#x4E86;&#xFF0C;&#x7ED3;&#x5408;&#x524D;&#x9762;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x6211;&#x4EEC;&#x5927;&#x81F4;&#x53EF;&#x4EE5;&#x63A8;&#x51FA;&#x8FD9;&#x4E48;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#xFF1A;</p>
<pre><code>void main();
</code></pre>
<h4 id="21">#21</h4>
<pre><code class="language-hex">0700 1c
</code></pre>
<p>&#x53C8;&#x4E00;&#x4E2A;&#x7C7B;&#x3002;</p>
<h4 id="22">#22</h4>
<pre><code class="language-hex">0c 001d 001e
</code></pre>
<p>&#x53C8;&#x4E00;&#x4E2A;<strong>NameAndType</strong>&#x3002;</p>
<h4 id="23">#23</h4>
<pre><code class="language-hex">01 000b 4865 6c6c 6f20 576f 726c 64
</code></pre>
<p>&#x53C8;&#x662F;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5;&#x3002;&#x5B83;&#x88AB; <strong>#3</strong> &#x5F15;&#x7528;&#x4E86;&#xFF0C;&#x8F6C;&#x6210;&#x6587;&#x672C;&#x662F;&#xFF1A;<code>Hello Word</code>&#x3002;&#x6CA1;&#x9519;&#xFF0C;&#x5C31;&#x662F;&#x6211;&#x4EEC;&#x5728;&#x4EE3;&#x7801;&#x91CC;&#x5199;&#x7684;&#x90A3;&#x4E2A;  <strong>String</strong> &#xFF01;</p>
<h4 id>&#x8F6E;&#x5230;&#x4F60;&#x4E86;</h4>
<p>&#x4E0D;&#x77E5;&#x4E0D;&#x89C9;&#xFF0C;&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x770B;&#x5B8C;&#x4E86;&#x4E00;&#x534A;&#x7684;&#x7C7B;&#x6587;&#x4EF6;&#x3002;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x5269;&#x4E0B;&#x7684;10&#x4E2A;&#x5E38;&#x91CF;&#xFF0C;&#x4F60;&#x81EA;&#x5DF1;&#x80FD;&#x9605;&#x8BFB;&#x4E0B;&#x6765;&#x4E86;&#x5417;&#xFF1F;<br>
&#x6839;&#x636E;JVM&#x89C4;&#x8303;&#xFF0C;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x6240;&#x6709;&#x7684;<strong>Tags</strong>&#x5B9A;&#x4E49;&#x5982;&#x4E0B;&#xFF1A;</p>
<table>
    <thead>
        <tr>
            <th>
                &#x5E38;&#x91CF;&#x7C7B;&#x578B;
            </th>
            <th>
                &#x6807;&#x8BC6;
            </th>
        </tr>
    </thead>
    <tbody>
        <tr><td>Utf8</td><td>1</td></tr>
        <tr><td>Integer</td><td>3</td></tr>
        <tr><td>Float</td><td>4</td></tr>
        <tr><td>Long</td><td>5</td></tr>
        <tr><td>Double</td><td>6</td></tr>
        <tr><td>Class</td><td>7</td></tr>
        <tr><td>String</td><td>8</td></tr>
        <tr><td>Fieldref</td><td>9</td></tr>
        <tr><td>Methodref</td><td>10</td></tr>
        <tr><td>InterfaceMethodref</td><td>11</td></tr>
        <tr><td>NameAndType</td><td>12</td></tr>
        <tr><td>MethodHandle</td><td>15</td></tr>
        <tr><td>InvokeDynamic</td><td>18</td></tr>
    </tbody>
</table>
<p>&#x5176;&#x4E2D;&#xFF0C;<strong>Utf8</strong> &#x3001; <strong>Class</strong> &#x3001; <strong>String</strong> &#x3001; <strong>Fieldref</strong> &#x3001; <strong>Methodref</strong> &#x3001; <strong>NameAndType</strong> &#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x4ECB;&#x7ECD;&#x8FC7;&#x4E86;&#x3002;&#x6765;&#x770B;&#x770B;&#x5269;&#x4E0B;&#x51E0;&#x79CD;&#x5E38;&#x91CF;&#x3002;</p>
<h5 id="integerfloat">Integer &#x548C; Float</h5>
<p>&#x8FD9;&#x4E24;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x5E38;&#x91CF;&#x4ECE;&#x5F00;&#x59CB;&#x5230;&#x7ED3;&#x675F;&#x5171;&#x6709; <strong>5</strong> &#x4E2A;&#x5B57;&#x8282;&#x3002;</p>
<ul>
<li>&#x7B2C;1&#x4F4D;&#x5B57;&#x8282;&#x8868;&#x793A; <strong>Tag</strong>&#xFF0C; <strong>Integer</strong> &#x662F; <strong>3</strong>&#xFF0C; <strong>Float</strong> &#x662F; <strong>4</strong> &#x3002;</li>
<li>&#x7B2C;2-5&#x4F4D;&#x5B57;&#x8282;&#x8868;&#x793A;&#x5B83;&#x7684;&#x503C;&#xFF0C;&#x8FD9;&#x4E9B;&#x503C;&#x4F7F;&#x7528; <strong>Big-Endian</strong> &#x7684;&#x683C;&#x5F0F;&#x5B58;&#x50A8;&#x3002;</li>
<li>
<ul>
<li><strong>Float</strong>&#x7684;&#x6570;&#x636E;&#x683C;&#x5F0F;&#x9075;&#x5FAA;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html#jvms-2.3.2">&#x8FD9;&#x4E00;&#x6807;&#x51C6;</a>&#x3002;</li>
</ul>
</li>
</ul>
<h5 id="longdouble">Long &#x548C; Double</h5>
<p>&#x8FD9;&#x4E24;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x5E38;&#x91CF;&#x4ECE;&#x5F00;&#x59CB;&#x5230;&#x7ED3;&#x675F;&#x5171;&#x6709; <strong>9</strong> &#x4E2A;&#x5B57;&#x8282;&#x3002;</p>
<ul>
<li>&#x7B2C;1&#x4F4D;&#x5B57;&#x8282;&#x8868;&#x793A; <strong>Tag</strong>&#xFF0C; <strong>Long</strong>&#x662F; <strong>5</strong>&#xFF0C; <strong>Double</strong> &#x662F; <strong>6</strong>&#x3002;</li>
<li>&#x7B2C;2-5&#x4F4D;&#x5B57;&#x8282;&#x8868;&#x793A;&#x9AD8;&#x4F4D;&#x5B57;&#x8282;(<strong>high_bytes</strong>)&#x3002;</li>
<li>&#x7B2C;6-9&#x4F4D;&#x5B57;&#x8282;&#x8868;&#x793A;&#x4F4E;&#x4F4D;&#x5B57;&#x8282;(<strong>low_bytes</strong>)&#x3002;</li>
</ul>
<p>&#x4ED6;&#x4EEC;&#x7684;&#x503C;&#x91C7;&#x7528;&#x8FD9;&#x6837;&#x7684;&#x7B97;&#x6CD5;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#xFF1A;</p>
<pre><code class="language-java">((long) high_bytes &lt;&lt; 32) + low_bytes
</code></pre>
<h5 id="methodhandle">MethodHandle</h5>
<p>&#x8FD9;&#x4E24;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x5E38;&#x91CF;&#x4ECE;&#x5F00;&#x59CB;&#x5230;&#x7ED3;&#x675F;&#x5171;&#x6709; <strong>4</strong> &#x4E2A;&#x5B57;&#x8282;&#x3002;</p>
<ul>
<li>&#x7B2C;1&#x4F4D;&#x5B57;&#x8282;&#x662F; <strong>15</strong> &#x3002;</li>
<li>&#x7B2C;2&#x4F4D;&#x5B57;&#x8282;&#x662F;&#x5F15;&#x7528;&#x7C7B;&#x578B;(<strong>reference_kind</strong>)&#xFF0C;&#x5B83;&#x7684;&#x503C;&#x901A;&#x5E38;&#x4E3A; <code>1-9</code>&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x3002;</li>
<li>&#x7B2C;3-4&#x4F4D;&#x5B57;&#x8282;&#x662F;&#x5F15;&#x7528;&#x76EE;&#x6807;&#x7684;&#x7D22;&#x5F15;(<strong>reference_index</strong>)&#x3002;</li>
</ul>
<p>MethodHandle&#x901A;&#x5E38;&#x4F1A;&#x7528;&#x6765;&#x8868;&#x793A;&#x5B57;&#x8282;&#x7801;&#x4E2D;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x884C;&#x4E3A;&#x3002;</p>
<h6 id>&#x5F15;&#x7528;&#x7C7B;&#x578B;&#x53C2;&#x8003;&#x8868;</h6>
<table>
    <thead>
        <tr>
            <th>&#x503C;</th>
            <th>&#x63CF;&#x8FF0;</th>
            <th>&#x76EE;&#x6807;&#x7C7B;&#x578B;</th>
        </tr>
    </thead>
    <tbody>
        <tr><td>1</td><td>REF_getField</td><td>Fieldref</td></tr>
        <tr><td>2</td><td>REF_getStatic</td><td>Fieldref</td></tr>
        <tr><td>3</td><td>REF_putField</td><td>Fieldref</td></tr>
        <tr><td>4</td><td>REF_putStatic</td><td>Fieldref</td></tr>
        <tr><td>5</td><td>REF_invokeVirtual</td><td>Methodref</td></tr>
        <tr><td>6</td><td>REF_invokeStatic</td><td>Methodref,InterfaceMethodref(5.20&#x53CA;&#x4EE5;&#x4E0A;)</td></tr>
        <tr><td>7</td><td>REF_invokeSpecial</td><td>Methodref,InterfaceMethodref(5.20&#x53CA;&#x4EE5;&#x4E0A;)</td></tr>
        <tr><td>8</td><td>REF_newInvokeSpecial</td><td>Methodref</td></tr>
        <tr><td>9</td><td>REF_invokeInterface</td><td>InterfaceMethodref</td></tr>
    </tbody>
</table>
<p>&#x5982;&#x679C;&#x60F3;&#x6DF1;&#x5165;&#x4E86;&#x89E3;&#xFF0C;&#x8BF7;&#x79FB;&#x6B65;&#x81F3;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html#jvms-5.4.3.5">JVM&#x89C4;&#x8303; &#x7B2C;5&#x7AE0;</a>&#x3002;</p>
<h5 id="invokedynamic">InvokeDynamic</h5>
<p>&#x8FD9;&#x4E24;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x5E38;&#x91CF;&#x4ECE;&#x5F00;&#x59CB;&#x5230;&#x7ED3;&#x675F;&#x5171;&#x6709; <strong>5</strong> &#x4E2A;&#x5B57;&#x8282;&#x3002;</p>
<ul>
<li>&#x7B2C;1&#x4F4D;&#x4E3A; <strong>18</strong>&#x3002;</li>
<li>&#x7B2C;2-3&#x4F4D;&#x4E3A;&#x542F;&#x52A8;&#x65B9;&#x6CD5;&#x5C5E;&#x6027;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.23"><strong>BootstrapMethods</strong></a>&#x3002;&#x5173;&#x4E8E;&#x5C5E;&#x6027;(<strong>Attribute</strong>)&#x7684;&#x4ECB;&#x7ECD;&#xFF0C;&#x7A0D;&#x540E;&#x4F1A;&#x63D0;&#x5230;&#x3002;</li>
<li>&#x7B2C;4-5&#x4F4D;&#x4E3A;<strong>NameAndType</strong>&#x3002;</li>
</ul>
<h3 id>&#x9A8C;&#x8BC1;&#x4F60;&#x7684;&#x7ED3;&#x679C;</h3>
<p>Java&#x81EA;&#x5E26;&#x4E00;&#x4E2A;Class&#x6587;&#x4EF6;&#x5206;&#x6790;&#x5DE5;&#x5177;<code>javap</code>&#x3002;&#x6267;&#x884C; <code>javap -verbose HelloWorld.class</code> &#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x8FD9;&#x4E2A;&#x7C7B;&#x7684;&#x5E38;&#x91CF;&#x6C60;&#x5185;&#x5BB9;&#xFF0C;&#x770B;&#x770B;&#x548C;&#x4F60;&#x8BFB;&#x7684;&#x662F;&#x4E0D;&#x662F;&#x4E00;&#x6837;&#x7684;&#x5427;&#x3002;</p>
<h2 id="accessflag">&#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;(Access Flag)</h2>
<p>&#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;&#x6307;&#x7684;&#x662F;:</p>
<table>
    <thead>
        <tr>
            <th>&#x540D;&#x79F0;</th><th>&#x503C;</th><th>&#x5BF9;&#x8C61;</th><th>&#x63CF;&#x8FF0;</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>ACC_PUBLIC</td><td>0x0001</td><td>&#x6240;&#x6709;&#x7C7B;&#x578B;</td><td>public</td>
        </tr>
        <tr>
            <td>ACC_FINAL</td><td>0x0010</td><td>&#x7C7B;</td><td>final,&#x4E0D;&#x5141;&#x8BB8;&#x6709;&#x5B50;&#x7C7B;</td>
        </tr>
        <tr>
            <td>ACC_SUPER</td><td>0x0020</td><td>&#x7C7B;&#x548C;&#x63A5;&#x53E3;</td><td>&#x4F7F;&#x7528;&#x65B0;&#x7684;invokespecial&#x8BED;&#x4E49;</td>
        </tr>
        <tr>
            <td>ACC_INTERFACE</td><td>0x0200</td><td>&#x63A5;&#x53E3;</td><td>interface</td>
        </tr>
        <tr>
            <td>ACC_ABSTRACT</td><td>0x0400</td><td>&#x7C7B;&#x548C;&#x63A5;&#x53E3;</td><td>abstract</td>
        </tr>
        <tr>
            <td>ACC_SYNTHETIC</td><td>0x1000</td><td>&#x6240;&#x6709;&#x7C7B;&#x578B;</td><td>&#x8BE5;&#x7C7B;&#x4E0D;&#x7531;&#x7528;&#x6237;&#x4EE3;&#x7801;&#x751F;&#x6210;</td>
        </tr>
        <tr>
            <td>ACC_ANNOTATION</td><td>0x2000</td><td>&#x6CE8;&#x89E3;&#x7C7B;&#x578B;</td><td>@interface</td>
        </tr>
        <tr>
            <td>ACC_ENUM</td><td>0x4000</td><td>&#x679A;&#x4E3E;&#x7C7B;&#x578B;</td><td>enum</td>
        </tr>
    </tbody>
 </table>
<p>&#x4E00;&#x4E2A;&#x7C7B;&#x578B;&#x53EF;&#x4EE5;&#x6709;&#x591A;&#x4E2A;&#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;&#xFF0C;&#x8FD9;&#x4E9B;&#x4FEE;&#x9970;&#x7B26;&#x7684;&#x503C;&#x51B3;&#x5B9A;&#x4E86;&#x4ED6;&#x4EEC;&#x76F8;&#x4E92;&#x4E4B;&#x95F4;&#x7684;&#x5E76;&#x5B58;&#x6027;&#x3002;<br>
&#x5728;&#x6211;&#x4EEC;&#x7684; <strong>HelloWorld.class</strong>&#x4E2D;&#xFF0C;&#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;&#x4E3A;<code>0021</code>&#xFF0C;&#x5B83;&#x7531;<code>0x0001</code> + <code>0x0020</code>&#x5F97;&#x5230;&#xFF0C;&#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x4E2A; <strong>Super Public</strong> &#x7C7B;&#x3002;</p>
<h2 id="this_classsuper_class">&#x5F53;&#x524D;&#x7C7B;(this_class)&#x548C;&#x7236;&#x7C7B;(super_class)</h2>
<p>&#x5F80;&#x4E0B;&#x8BFB;2&#x4E2A;&#x5B57;&#x8282;&#x662F;&#x5F53;&#x524D;&#x7C7B;&#x7684;&#x7D22;&#x5F15;,<code>0005</code> &#x6307;&#x5411; <strong>#5</strong>&#xFF0C;&#x540D;&#x5B57;&#x6307;&#x5411; <strong>#26</strong>,&#x662F; <code>HelloWorld</code>&#x3002;</p>
<p>&#x518D;&#x4E0B;2&#x4E2A;&#x5B57;&#x8282;&#x662F;&#x7236;&#x7C7B;&#x7684;&#x7D22;&#x5F15;&#x3002;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x662F;<code>0006</code>&#x3002;&#x5728;&#x5E38;&#x91CF;&#x6C60;&#x4E2D;&#x627E;&#x4E00;&#x4E0B;&#xFF0C;<strong>#6</strong> ,&#x53D1;&#x73B0;&#x5B83;&#x7684;&#x540D;&#x5B57;&#x5728; <strong>#27</strong>&#xFF0C;&#x8F6C;&#x6210;&#x6587;&#x672C;&#x5F97;&#x5230;:<code>java/lang/Object</code> &#x770B;&#x6765;&#x6CA1;&#x9519;&#x3002;<br>
&#x503C;&#x5F97;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x5728;&#x5B57;&#x8282;&#x7801;&#x4E2D;&#xFF0C;&#x7C7B;&#x7684;&#x540D;&#x5B57;&#x4E0D;&#x662F;<code>&#x5305;&#x540D;.&#x7C7B;&#x540D;</code>,&#x800C;&#x662F;<code>&#x5305;&#x540D;/&#x7C7B;&#x540D;</code>&#x3002;</p>
<!-- text -->
<p><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2934663494016690" data-ad-slot="7492783340" data-ad-format="auto" data-full-width-responsive="true"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
<h2 id="fieldinterfacemethod">&#x5B57;&#x6BB5;&#xFF08;Field)&#x3001;&#x63A5;&#x53E3;(Interface)&#x3001;&#x65B9;&#x6CD5;(Method)</h2>
<p>&#x4ECE;&#x8FD9;&#x91CC;&#x5F00;&#x59CB;&#x5230;&#x6587;&#x4EF6;&#x7ED3;&#x5C3E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x683C;&#x5F0F;&#x90FD;&#x662F;</p>
<ul>
<li>2&#x5B57;&#x8282;&#x7684;&#x7C7B;&#x578B;&#x6570;&#x91CF;</li>
<li>&#x591A;&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x503C;(&#x53D6;&#x51B3;&#x4E8E;&#x7C7B;&#x578B;&#x6570;&#x91CF;):</li>
<li>
<ul>
<li>2&#x5B57;&#x8282;&#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;(<strong>access_flag</strong>)</li>
</ul>
</li>
<li>
<ul>
<li>2&#x5B57;&#x8282;&#x540D;&#x79F0;&#x7D22;&#x5F15;(<strong>name_index</strong>)</li>
</ul>
</li>
<li>
<ul>
<li>2&#x5B57;&#x8282;&#x63CF;&#x8FF0;&#x7D22;&#x5F15;(<strong>descriptor_index</strong>)</li>
</ul>
</li>
<li>
<ul>
<li>2&#x5B57;&#x8282;&#x5C5E;&#x6027;&#x6570;&#x91CF;(<strong>attribute_count</strong>)</li>
</ul>
</li>
<li>
<ul>
<li>&#x591A;&#x4E2A;&#x5B57;&#x8282;&#x5C5E;&#x6027;&#x7684;&#x503C;(&#x53D6;&#x51B3;&#x4E8E;&#x5C5E;&#x6027;&#x6570;&#x91CF;):</li>
</ul>
</li>
<li>
<ul>
<li>
<ul>
<li>2&#x5B57;&#x8282;&#x5C5E;&#x6027;&#x540D;&#x79F0;&#x7D22;&#x5F15;(<strong>attribute_name_index</strong>)</li>
</ul>
</li>
</ul>
</li>
<li>
<ul>
<li>
<ul>
<li>4&#x5B57;&#x8282;&#x5C5E;&#x6027;&#x957F;&#x5EA6;(<strong>attribute_length</strong>)</li>
</ul>
</li>
</ul>
</li>
<li>
<ul>
<li>
<ul>
<li>&#x591A;&#x5B57;&#x8282;&#x5C5E;&#x6027;&#x7684;&#x503C;(&#x53D6;&#x51B3;&#x4E8E;&#x5C5E;&#x6027;&#x7684;&#x957F;&#x5EA6;)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>&#x6211;&#x4EEC;&#x7684; <strong>HelloWorld</strong> &#x6CA1;&#x6709;&#x5B57;&#x6BB5;&#x548C;&#x63A5;&#x53E3;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x89C1;&#x4E0B;4&#x4E2A;&#x5B57;&#x8282;&#x90FD;&#x662F;<code>0000</code>&#xFF0C;<code>0000</code>&#x3002;<br>
&#x8FD9;&#x8BF4;&#x660E;&#x5B57;&#x6BB5;&#x548C;&#x63A5;&#x53E3;&#x7684;&#x6570;&#x91CF;&#x90FD;&#x662F;0&#x3002;&#x5728;&#x5176;&#x4ED6;&#x7C7B;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x5B58;&#x5728;&#x5B57;&#x6BB5;&#x548C;&#x63A5;&#x53E3;&#xFF0C;&#x90A3;&#x4E48;&#x5728;2&#x4E2A;&#x5B57;&#x8282;&#x7684; <strong>&#x6570;&#x91CF;</strong> &#x4E4B;&#x540E;&#xFF0C;&#x5C31;&#x662F;&#x5173;&#x4E8E;&#x4ED6;&#x4EEC;&#x7684;&#x5B9A;&#x4E49;&#x3002;</p>
<p>&#x7EE7;&#x7EED;&#x5F80;&#x4E0B;&#x8BFB;2&#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x662F;&#x6211;&#x4EEC;&#x7684;&#x65B9;&#x6CD5;&#x6570;&#x3002; &#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x5B83;&#x662F;<code>0002</code>&#x3002;<br>
&#x6211;&#x4EEC;&#x7684; <strong>HelloWorld</strong> &#x4E2D;&#x6709; 1 &#x4E2A; <code>main</code>&#x65B9;&#x6CD5;&#xFF0C;&#x8FD8;&#x6709;&#x7C7B;&#x81EA;&#x8EAB;&#x5B58;&#x5728;&#x7684;&#x6784;&#x9020;&#x65B9;&#x6CD5; <code>&lt;init&gt;</code>&#x3002;<br>
&#x8BA9;&#x6211;&#x4EEC;&#x6765;&#x770B;&#x770B;&#x3002;</p>
<p>&#x9075;&#x5FAA;&#x524D;&#x9762;&#x7684;&#x89C4;&#x5F8B;&#xFF0C;&#x6211;&#x4EEC;&#x5F00;&#x59CB;&#x770B;&#x8FD9;&#x4E2A;&#x7C7B;&#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<ul>
<li>&#x63A5;&#x4E0B;&#x6765;&#x7684;2&#x4E2A;&#x5B57;&#x8282;&#x5C31;&#x662F;&#x7B2C;1&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x8BBF;&#x95EE;&#x4FEE;&#x9970;&#x7B26;: <code>0001</code>&#xFF0C;&#x542B;&#x4E49;&#x662F;<code>public</code>&#x3002;</li>
<li>2&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x540D;&#x79F0;&#x7D22;&#x5F15;&#xFF1A;<code>0007</code>&#x5373; <strong>#7</strong>, &#x542B;&#x4E49;&#x662F; <code>&lt;init&gt;</code>&#x3002;</li>
<li>2&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x63CF;&#x8FF0;&#x7D22;&#x5F15;&#xFF1A;<code>0008</code>&#x5373; <strong>#8</strong>, &#x542B;&#x4E49;&#x662F; <code>()V</code>&#x3002;</li>
<li>2&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x5C5E;&#x6027;&#x6570;&#x91CF;: <code>0001</code>&#xFF0C;&#x6709;1&#x4E2A;&#xFF1A;</li>
<li>
<ul>
<li>2&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x5C5E;&#x6027;&#x540D;&#x79F0;&#x7D22;&#x5F15;&#xFF1A;<code>0009</code>&#x5373; <strong>#9</strong>&#xFF0C;&#x542B;&#x4E49;&#x662F; <code>Code</code>&#x3002;</li>
</ul>
</li>
<li>
<ul>
<li>4&#x4E2A;&#x5B57;&#x8282;&#x7684;&#x5C5E;&#x6027;&#x957F;&#x5EA6;&#xFF1A; <code>0000 002f</code>&#x3002;&#x56E0;&#x4E3A;&#x6211;&#x4EEC;&#x6CA1;&#x6709;&#x5B9A;&#x4E49;&#x5B83;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x8FD9;&#x4E2A;&#x7C7B;&#x662F;&#x7F16;&#x8BD1;&#x5668;&#x81EA;&#x52A8;&#x751F;&#x6210;&#x7684;&#x3002;</li>
</ul>
</li>
</ul>
<h3 id="methoddescriptors">&#x65B9;&#x6CD5;&#x63CF;&#x8FF0;(Method Descriptors)</h3>
<p>&#x5B83;&#x53EF;&#x4EE5;&#x544A;&#x8BC9;&#x6211;&#x4EEC;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x53C2;&#x6570;&#x548C;&#x8FD4;&#x56DE;&#x503C;&#x3002;<br>
&#x5B83;&#x7684;&#x683C;&#x5F0F;&#x662F;</p>
<pre><code>( {&#x53C2;&#x6570;&#x503C;&#x63CF;&#x8FF0;} ) &#x8FD4;&#x56DE;&#x503C;&#x63CF;&#x8FF0;
</code></pre>
<p>&#x8FD9;&#x4E9B;&#x63CF;&#x8FF0;<strong>ParameterDescriptor</strong> &#x662F;&#x5B57;&#x6BB5;&#x7C7B;&#x578B;<strong>FieldType</strong>&#x3002;<br>
&#x8FD4;&#x56DE;&#x503C;&#x5982;&#x679C;&#x662F; <code>void</code>, &#x90A3;&#x4E48;&#x5B83;&#x7684;&#x503C;&#x662F;<code>V</code>&#x3002;<br>
&#x5B57;&#x6BB5;&#x7C7B;&#x578B;&#x662F;&#x8FD9;&#x6837;&#x5B9A;&#x4E49;&#x7684;:</p>
<table>
  <tr>
    <th>&#x503C;</th>
    <th>&#x7C7B;&#x578B;</th>
  </tr>
  <tr>
    <td>B</td>
    <td>byte</td>
  </tr>
  <tr>
    <td>C</td>
    <td>char</td>
  </tr>
  <tr>
    <td>D</td>
    <td>double</td>
  </tr>
  <tr>
    <td>F</td>
    <td>float</td>
  </tr>
  <tr>
    <td>I</td>
    <td>int</td>
  </tr>
  <tr>
    <td>J</td>
    <td>long</td>
  </tr>
</table>
<p>&#x4E3E;JVM&#x89C4;&#x8303;&#x4E2D;&#x7684;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.3.3">&#x4F8B;&#x5B50;</a>&#xFF0C;</p>
<pre><code class="language-java">(IDLjava/lang/Thread;)Ljava/lang/Object;
</code></pre>
<p>&#x76F8;&#x5F53;&#x4E8E;&#x6E90;&#x7801;&#x4E2D;&#x7684;</p>
<pre><code class="language-java">Object &#x65B9;&#x6CD5;&#x540D;(int &#x53C2;&#x6570;1, double &#x53C2;&#x6570;2, Thread &#x53C2;&#x6570;3){
/** &#x4EE3;&#x7801; **/
}
</code></pre>
<h3 id="methodattributes">&#x65B9;&#x6CD5;&#x5C5E;&#x6027;(Method Attributes)</h3>
<p>&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x901A;&#x5E38;&#x4F1A;&#x6709;&#x7684;&#x5C5E;&#x6027;&#x6709;<strong>Code</strong>&#x3002;<br>
<strong>Code</strong>&#x5C5E;&#x6027;&#x5305;&#x542B;&#x4E86;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x7684;&#x5B57;&#x8282;&#x64CD;&#x4F5C;&#xFF0C;&#x8FD9;&#x4E9B;&#x5185;&#x5BB9;&#x5728;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.9">JVM&#x89C4;&#x8303;&#x4E2D;&#x6709;&#x4E13;&#x95E8;&#x7684;&#x4E00;&#x8282;&#x4ECB;&#x7ECD;</a>&#x3002;<br>
&#x901A;&#x8FC7;&#x89E3;&#x8BFB;&#x8FD9;&#x4E9B;&#x5B57;&#x8282;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x8FD8;&#x539F;&#x51FA;&#x6574;&#x4E2A;&#x65B9;&#x6CD5;&#x5185;&#x7684;&#x6E90;&#x7801;&#x3002;</p>
<p><strong>Code</strong>&#x901A;&#x5E38;&#x8FD8;&#x4F1A;&#x5305;&#x542B;2&#x4E2A;&#x5C5E;&#x6027;&#xFF1A;<strong>LocalVariableTable</strong> &#x548C; <strong>LineNumberTable</strong>&#x3002;<br>
&#x5B83;&#x4EEC;&#x5206;&#x522B;&#x88AB;&#x7528;&#x6765;&#x6807;&#x8BB0;&#x67D0;&#x6BB5;&#x5B57;&#x8282;&#x64CD;&#x4F5C;&#x7684;&#x53D8;&#x91CF;&#x548C;&#x6240;&#x5728;&#x7684;&#x884C;&#x53F7;&#x3002;</p>
<h2 id="attribute">&#x5C5E;&#x6027;(Attribute)</h2>
<p>&#x5173;&#x4E8E;&#x5C5E;&#x6027;(Attribute)&#xFF0C;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7">&#x8FD9;&#x91CC;</a>&#x6709;&#x8BE6;&#x7EC6;&#x7684;&#x4ECB;&#x7ECD;&#x3002;<br>
&#x7531;&#x4E8E;&#x5185;&#x5BB9;&#x8F83;&#x957F;&#xFF0C;&#x672C;&#x6587;&#x4E0D;&#x6253;&#x7B97;&#x7EE7;&#x7EED;&#x5C55;&#x5F00;&#x8BB2;&#x89E3;&#x3002;<br>
&#x672C;&#x6587;&#x4E3B;&#x8981;&#x8D77;&#x5230;&#x629B;&#x7816;&#x5F15;&#x7389;&#x7684;&#x4F5C;&#x7528;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x611F;&#x5174;&#x8DA3;&#xFF0C;&#x53EF;&#x4EE5;&#x70B9;<a href="https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.5">&#x8FD9;&#x91CC;</a>&#x7EE7;&#x7EED;&#x4E86;&#x89E3;&#x3002;</p>
<h1 id="0xffffff">0xffffff - &#x603B;&#x7ED3;</h1>
<p>&#x5230;&#x76EE;&#x524D;&#x4E3A;&#x6B62;&#xFF0C;&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x5DEE;&#x4E0D;&#x591A;&#x628A;&#x8FD9;&#x4E2A;<code>.class</code>&#x6587;&#x4EF6;&#x89E3;&#x5256;&#x5E72;&#x51C0;&#x4E86;&#x3002;<br>
&#x6211;&#x4EEC;&#x628A;&#x5B57;&#x8282;&#x7801;&#x7A0D;&#x5FAE;&#x5F52;&#x7C7B;&#xFF0C;&#x6253;&#x4E0A;&#x6CE8;&#x91CA;&#xFF0C;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#x4E0B;&#x9762;&#x7684;&#x8FD9;&#x4E2A;&#x6837;&#x5B50;:</p>
<pre><code class="language-java">cafe babe              // Java Magic Number

0000 0031              // Java Compiler Version

0022                   // Constant Pool Size

                       // Constant Pool Begin
/* # 1 */ 0a 0006 0014
/* # 2 */ 09 0015 0016 
/* # 3 */ 08 0017
/* # 4 */ 0a 0018 0019
/* # 5 */ 07 001a
/* # 6 */ 07 001b
/* # 7 */ 01 0006 3c69 6e69 743e
/* # 8 */ 01 0003 2829 56
/* # 9 */ 01 0004 436f 6465
/* #10 */ 01 000f 4c69 6e65 4e75 6d62 6572 5461 626c 65
/* #11 */ 01 0012 4c6f 6361 6c56 6172 6961 626c 6554 6162 6c65 
/* #12 */ 01 0004 7468 6973 
/* #13 */ 01 000c 4c48 656c 6c6f 576f 726c 643b
/* #14 */ 01 0004 6d61 696e 
/* #15 */ 01 0016 285b 4c6a 6176 612f 6c61 6e67 2f53 7472 696e 673b 2956
/* #16 */ 01 0004 6172 6773 
/* #17 */ 01 0013 5b4c 6a61 7661 2f6c 616e 672f 5374 7269 6e67 3b 
/* #18 */ 01 000a 536f 7572 6365 4669 6c65
/* #19 */ 01 000f 4865 6c6c 6f57 6f72 6c64 2e6a 6176 610c 00
/* #20 */ 07 0008 
/* #21 */ 07 001c
/* #22 */ 0c 001d 001e 
/* #23 */ 01 000b 4865 6c6c 6f20 576f 726c 64
/* #24 */ 07 001f
/* #25 */ 0c 0020 0021 
/* #26 */ 01 000a 4865 6c6c 6f57 6f72 6c64
/* #27 */ 01 0010 6a61 7661 2f6c 616e 672f 4f62 6a65 6374 
/* #28 */ 01 0010 6a61 7661 2f6c 616e 672f 5379 7374 656d
/* #29 */ 01 0003 6f75 74
/* #30 */ 01 0015 4c6a 6176 612f 696f 2f50 7269 6e74 5374 7265 616d 3b
/* #31 */ 01 0013 6a61 7661 2f69 6f2f 5072 696e 7453 7472 6561 6d
/* #32 */ 01 0007 7072 696e 746c 6e
/* #33 */ 01 0015 284c 6a61 7661 2f6c 616e 672f 5374 7269 6e67 3b29 56
                       // Constant Pool End
                       
0021                   // Class Access Modifier: Super,Public
0005                   // This Class: HelloWorld
0006                   // Super Class: java/lang/Object

0000                   // Fields Count: 0
                       // Fields Begin
                       // Fields End
0000                   // Interfaces Count: 0
                       // Interfaces Begin
                       // Interfaces End
0002                   // Methods Count: 2
                       // Methods Begin
0001                   /// Method 1 Access Flag: Public
0007                   /// Method 1 Name: &lt;init&gt;
0008                   /// Method 1 Descriptor: ()V
                       /// Method 1 : public HelloWorld();
0001                   /// Method 1 Attribute Count: 1
                       /// Method 1 Attribute Begin
0009                   //// Method 1 Attribute 1 Name: Code
0000 002f              //// Method 1 Attribute 1 Length: 47
0001                   //// Method 1 Attribute 1 [Code] Max Stack: 1
0001                   //// Method 1 Attribute 1 [Code] Max Local Variables Count: 1
0000 0005              //// Method 1 Attribute 1 [Code] Code length: 5
                       //// Method 1 Attribute 1 [Code] Code Begin
2a
b7
00 
01
b1 
                       //// Method 1 Attribute 1 [Code] Code End
0000                   //// Method 1 Attribute 1 [Code] Exception Table Length: 0
                       //// Method 1 Attribute 1 [Code] Exception Table Begin
                       //// Method 1 Attribute 1 [Code] Exception Table End
0002                   //// Method 1 Attribute 1 [Code] Attribute Count: 2
                       //// Method 1 Attribute 1 [Code] Attribute Begin
000a                   ///// MA 1 Attribute 1 Name: LineNumberTable
0000 0006              ///// MA 1 Attribute 1 Length: 6
0001                   ///// MA 1 Attribute 1 [LNT] Line Number Table Length: 1
                       ///// MA 1 Attribute 1 [LNT] Line Number Table Begin
0000                   ////// MA 1 Attribute 1 [LNT] Code reference index: 0
0001                   ////// MA 1 Attribute 1 [LNT] Line Number: 1
                       ///// MA 1 Attribute 1 [LNT] Line Number Table End
                       
000b                   ///// MA 1 Attribute 2 Name: LocalVariableTable
0000 000c              ///// MA 1 Attribute 2 Length: 12
0001                   ///// MA 1 Attribute 2 [LVT] Local Variable Table Length: 1
                       ///// MA 1 Attribute 2 [LVT] Local Variable Table Begin
0000                   ////// MA 1 Attribute 2 [LVT] start_pc: 0
0005                   ////// MA 1 Attribute 2 [LVT] length: 5
000c                   ////// MA 1 Attribute 2 [LVT] Name: this
000d                   ////// MA 1 Attribute 2 [LVT] Descriptor: LHelloWorld;
0000                   ////// MA 1 Attribute 2 [LVT] Index: 0
                       /// Method 1 Attribute End
                       
0009                   /// Method 2 Access Flag: Public Static
000e                   /// Method 2 Name: main
000f                   /// Method 2 Descriptor: ([Ljava/lang/String;)V
                       /// Method 2 : public static void main(String[] &#x53D8;&#x91CF;1);
0001                   /// Method 2 Attribute Count: 1
                       /// Method 2 Attribute Begin
0009                   //// Method 2 Attribute 1 Name: Code
0000 0037              //// Method 2 Attribute 1 Length: 55
0002                   //// Method 2 Attribute 1 [Code] Max Stack: 2
0001                   //// Method 2 Attribute 1 [Code] Max Local Variables Count: 1
0000 0009              //// Method 2 Attribute 1 [Code] Code length: 9
                       //// Method 2 Attribute 1 [Code] Code Begin
b2
00
02
12
03
b6
00
04
b1
                       //// Method 2 Attribute 1 [Code] Code End
0000                   //// Method 2 Attribute 1 [Code] Exception Table Length: 0
                       //// Method 2 Attribute 1 [Code] Exception Table Begin
                       //// Method 2 Attribute 1 [Code] Exception Table End

0002                   //// Method 2 Attribute 1 [Code] Attribute Count: 2
                       //// Method 2 Attribute 1 [Code] Attribute Begin
000a                   ///// MA 2 Attribute 1 Name: LineNumberTable
0000 000a              ///// MA 2 Attribute 1 Length: 10
0002                   ///// MA 2 Attribute 1 [LNT] Line Number Table Length: 2
                       ///// MA 2 Attribute 1 [LNT] Line Number Table Begin
0000                   ////// MA 2 Attribute 1 [LNT] 1 Code reference index: 0
0003                   ////// MA 2 Attribute 1 [LNT] 1 Line Number: 3
0008                   ////// MA 2 Attribute 1 [LNT] 2 Code reference index: 8
0004                   ////// MA 2 Attribute 1 [LNT] 2 Line Number: 4
                       ///// MA 2 Attribute 1 [LNT] Line Number Table End
                       
000b                   ///// MA 2 Attribute 2 Name: LocalVariableTable
0000 000c              ///// MA 2 Attribute 2 Length: 12
0001                   ///// MA 2 Attribute 2 [LVT] Local Variable Table Length: 1
                       ///// MA 2 Attribute 2 [LVT] Local Variable Table Begin
0000                   ////// MA 2 Attribute 2 [LVT] start_pc: 0
0009                   ////// MA 2 Attribute 2 [LVT] length: 9
0010                   ////// MA 2 Attribute 2 [LVT] Name: args
0011                   ////// MA 2 Attribute 2 [LVT] Descriptor: [Ljava/lang/String;
0000                   ////// MA 2 Attribute 2 [LVT] Index: 0
                       /// Method 2 Attribute End
                       
0001                   // Class Attribute Count: 1
0012                   // Class Attribute Name: SourceFile
0000 0002              // Class Attribute Length: 2
0013                   // Class Attribute [SourceFile] Source File: HelloWorld.java
</code></pre>
<p>&#x606D;&#x559C;&#x4F60;&#xFF0C;&#x4F60;&#x73B0;&#x5728;&#x8DDD;&#x79BB;<s>&#x6210;&#x4E3A;&#x4E00;&#x53F0;JVM&#x865A;&#x62DF;&#x673A;</s>&#x66F4;&#x8FDB;&#x4E86;&#x4E00;&#x6B65;&#x4E86;&#xFF01;<br>
&#x73B0;&#x5728;&#x8BD5;&#x7740;&#x81EA;&#x5DF1;&#x9605;&#x8BFB;&#x4E00;&#x4E2A;&#x7C7B;&#x6587;&#x4EF6;&#x5427;&#x3002;</p>
<p>&#x672C;&#x6587;&#x9996;&#x53D1;&#x4E8E;<a href="https://blog.lss233.com/">Lss233&apos;s.Blog()</a>&#xFF0C;&#x672A;&#x7ECF;&#x4F5C;&#x8005;<a href="https://lss233.com">Lss233</a>&#x5141;&#x8BB8;&#x4E25;&#x7981;&#x8F6C;&#x8F7D;&#x3002;</p>
<!-- text -->
<p><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-2934663494016690" data-ad-slot="7492783340" data-ad-format="auto" data-full-width-responsive="true"></ins></p>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script><!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[让我们用PGP进行安全地交流吧！]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x5982;&#x4ECA;&#x7684;&#x4E92;&#x8054;&#x7F51;&#xFF0C;&#x7528;&#x6237;&#x5DF2;&#x7ECF;&#x6BEB;&#x65E0;&#x9690;&#x79C1;&#x53EF;&#x8A00;&#x3002;&#x54B1;&#x7ECF;&#x5E38;&#x90FD;&#x80FD;&#x770B;&#x89C1;&#x5404;&#x79CD;&#x4FE1;&#x606F;&#x6CC4;&#x9732;&#x7684;&#x65B0;&#x95FB;&#x3002;&#x8C01;&#x80FD;&#x4FDD;&#x8BC1;&#x54B1;&#x4F7F;&#x7528;&#x7684;&#x8F6F;&#x4EF6;&#x3001;&#x7F51;&#x7EDC;&#x751A;&#x81F3;</p>]]></description><link>https://blog.lss233.com/rang-wo-men-yong-pgp-jin-xing-an-quan-de-jiao-liu-ba/</link><guid isPermaLink="false">6024d72081c0bcbcde7de980</guid><category><![CDATA[技术]]></category><dc:creator><![CDATA[Lss233]]></dc:creator><pubDate>Sat, 19 Jan 2019 15:05:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1547853758-de7e2956ded8?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1547853758-de7e2956ded8?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=1080&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" alt="&#x8BA9;&#x6211;&#x4EEC;&#x7528;PGP&#x8FDB;&#x884C;&#x5B89;&#x5168;&#x5730;&#x4EA4;&#x6D41;&#x5427;&#xFF01;"><p>&#x5982;&#x4ECA;&#x7684;&#x4E92;&#x8054;&#x7F51;&#xFF0C;&#x7528;&#x6237;&#x5DF2;&#x7ECF;&#x6BEB;&#x65E0;&#x9690;&#x79C1;&#x53EF;&#x8A00;&#x3002;&#x54B1;&#x7ECF;&#x5E38;&#x90FD;&#x80FD;&#x770B;&#x89C1;&#x5404;&#x79CD;&#x4FE1;&#x606F;&#x6CC4;&#x9732;&#x7684;&#x65B0;&#x95FB;&#x3002;&#x8C01;&#x80FD;&#x4FDD;&#x8BC1;&#x54B1;&#x4F7F;&#x7528;&#x7684;&#x8F6F;&#x4EF6;&#x3001;&#x7F51;&#x7EDC;&#x751A;&#x81F3;&#x662F;&#x8BBE;&#x5907;&#x6CA1;&#x6709;&#x88AB;&#x4EC0;&#x4E48;&#x4EBA;&#x76D1;&#x89C6;&#x7740;&#x5462;&#xFF1F;<br>
&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;&#x9690;&#x79C1;&#x5B89;&#x5168;&#xFF0C;PGP&#x8BDE;&#x751F;&#x4E86;&#x3002;<br>
&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x5C06;&#x4F1A;&#x8BA9;&#x4F60;&#x4E86;&#x89E3;&#x5982;&#x4F55;&#x5728;&#x4F60;&#x7684;&#x8BBE;&#x5907;&#x4E0A;&#x914D;&#x7F6E;&#x4E0E;&#x4F7F;&#x7528;PGP&#x52A0;&#x5BC6;&#x90AE;&#x4EF6;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x5F00;&#x59CB;&#x5427;~</p>
<h2 id="0x00pgp">0x00 PGP&#x7684;&#x524D;&#x4E16;&#x4ECA;&#x751F;</h2>
<h3 id="pgp">&#x4EC0;&#x4E48;&#x662F; PGP ?</h3>
<blockquote>
<p>PGP&#xFF08;&#x82F1;&#x8BED;&#xFF1A;Pretty Good Privacy&#xFF0C;&#x4E2D;&#x6587;&#x7FFB;&#x8BD1;&#x201C;&#x4F18;&#x826F;&#x4FDD;&#x5BC6;&#x534F;&#x8BAE;&#x201D;&#xFF09;&#x662F;&#x4E00;&#x5957;&#x7528;&#x4E8E;&#x8BAF;&#x606F;&#x52A0;&#x5BC6;&#x3001;&#x9A8C;&#x8BC1;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF0C;&#x91C7;&#x7528;IDEA&#x7684;&#x6563;&#x5217;&#x7B97;&#x6CD5;&#x4F5C;&#x4E3A;&#x52A0;&#x5BC6;&#x548C;&#x9A8C;&#x8BC1;&#x4E4B;&#x7528;&#x3002;<br>
PGP&#x52A0;&#x5BC6;&#x7531;&#x4E00;&#x7CFB;&#x5217;&#x6563;&#x5217;&#x3001;&#x6570;&#x636E;&#x538B;&#x7F29;&#x3001;&#x5BF9;&#x79F0;&#x5BC6;&#x94A5;&#x52A0;&#x5BC6;&#xFF0C;&#x4EE5;&#x53CA;&#x516C;&#x94A5;&#x52A0;&#x5BC6;&#x7684;&#x7B97;&#x6CD5;&#x7EC4;&#x5408;&#x800C;&#x6210;&#x3002;&#x6BCF;&#x4E2A;&#x6B65;&#x9AA4;&#x5747;&#x652F;&#x6301;&#x51E0;&#x79CD;&#x7B97;&#x6CD5;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x4F7F;&#x7528;&#x3002;&#x6BCF;&#x4E2A;&#x516C;&#x94A5;&#x5747;&#x7ED1;&#x5B9A;&#x4E00;&#x4E2A;&#x7528;&#x6237;&#x540D;&#x548C;/&#x6216;&#x8005;E-mail&#x5730;&#x5740;&#x3002;<br>
PGP&#x7684;&#x4E3B;&#x8981;&#x5F00;&#x53D1;&#x8005;&#x662F;&#x83F2;&#x5C14;&#xB7;&#x9F50;&#x9ED8;&#x66FC;&#xFF08;Phil Zimmermann&#xFF09;&#x3002;&#x9F50;&#x9ED8;&#x66FC;&#x4E8E;1991&#x5E74;&#x5C06;PGP&#x5728;&#x4E92;&#x8054;&#x7F51;&#x4E0A;&#x514D;&#x8D39;&#x53D1;&#x5E03;&#x3002;PGP&#x672C;&#x8EAB;&#x662F;&#x5546;&#x4E1A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF1B;&#x5F00;&#x6E90;&#x5E76;&#x5177;&#x6709;&#x540C;&#x7C7B;&#x529F;&#x80FD;&#x7684;&#x5DE5;&#x5177;&#x540D;&#x4E3A;GnuPG&#xFF08;GPG&#xFF09;&#x3002;PGP&#x53CA;&#x5176;&#x540C;&#x7C7B;&#x4EA7;&#x54C1;&#x5747;&#x9075;&#x5B88;OpenPGP&#x6570;&#x636E;&#x52A0;&#x89E3;&#x5BC6;&#x6807;&#x51C6;&#xFF08;RFC 4880&#xFF09;&#x3002;<br>
&#x4EE5;&#x4E0A;&#x6587;&#x5B57;&#x548C;&#x56FE;&#x7247;&#x5F15;&#x7528;&#x81EA;<a href="https://zh.wikipedia.org/wiki/PGP">&#x7EF4;&#x57FA;&#x767E;&#x79D1;</a></p>
</blockquote>
<h2 id="openpgpgnupg">OpenPGP&#x3001;GnuPG&#x53C8;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;</h2>
<p>OpenPGP&#x662F;&#x7531;IETF(&#x4E92;&#x8054;&#x7F51;&#x5DE5;&#x7A0B;&#x4EFB;&#x52A1;&#x5C0F;&#x7EC4;)&#x6839;&#x636E;PGP&#xFF0C;&#x5236;&#x5B9A;&#x7684;&#x4E00;&#x9879;&#x516C;&#x5F00;&#x7684;&#x4E92;&#x8054;&#x7F51;&#x6807;&#x51C6;&#x3002;&#x4EFB;&#x4F55;&#x652F;&#x6301;&#x8FD9;&#x4E00;&#x6807;&#x51C6;&#x7684;&#x7A0B;&#x5E8F;&#x4E5F;&#x88AB;&#x5141;&#x8BB8;&#x79F0;&#x4E3A;OpenPGP&#x3002;<br>
GnuPG&#x5219;&#x662F;&#x4E00;&#x6B3E;&#x7531;GNU&#x7EC4;&#x7EC7;&#x4F9D;&#x7167;OpenPGP&#x6807;&#x51C6;&#x5F00;&#x53D1;&#x7684;&#x8F6F;&#x4EF6;&#xFF0C;&#x7528;&#x4E8E;&#x52A0;&#x5BC6;&#x3001;&#x6570;&#x5B57;&#x7B7E;&#x540D;&#x53CA;&#x4EA7;&#x751F;&#x975E;&#x5BF9;&#x79F0;&#x94A5;&#x5319;&#x5BF9;&#x3002;</p>
<!--kg-card-end: markdown--><h2 id="0x01-">0x01 &#x5B89;&#x88C5;&#x4E0E;&#x914D;&#x7F6E;</h2><p>&#x914D;&#x7F6E;PGP&#x7684;&#x65B9;&#x5F0F;&#x591A;&#x6837;&#xFF0C;&#x4E0B;&#x9762;&#x7B80;&#x5355;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B;&#x5E38;&#x89C1;&#x7684;&#x51E0;&#x79CD;&#x60C5;&#x51B5;&#x3002;</p><p>&#x5982;&#x679C;&#x4F60;&#x6B63;&#x5728;&#x4F7F;&#x7528;Linux&#x7CFB;&#x7EDF;&#xFF0C;&#x90A3;&#x4E48;&#x5E94;&#x8BE5;&#x4F1A;&#x81EA;&#x5E26;GnuPG&#x3002;&#x5728;&#x4F60;&#x7684;&#x7EC8;&#x7AEF;&#x4E0A;&#x8F93;&#x5165;`gpg --version`&#x6765;&#x9A8C;&#x8BC1;&#x662F;&#x5426;&#x5B89;&#x88C5;:</p><!--kg-card-begin: markdown--><pre><code class="language-bash">$  gpg --version
gpg (GnuPG) 2.2.4
libgcrypt 1.8.1
Copyright (C) 2017 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later &lt;https://gnu.org/licenses/gpl.html&gt;
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/lss233/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
</code></pre>
<!--kg-card-end: markdown--><p>&#x5982;&#x679C;&#x6CA1;&#x6709;&#xFF0C;&#x8BF7;&#x81EA;&#x884C;&#x6839;&#x636E;&#x4F60;&#x7684;&#x7CFB;&#x7EDF;&#x5B89;&#x88C5;GPG.</p><p>Windows&#x7528;&#x6237;&#x5EFA;&#x8BAE;&#x5B89;&#x88C5;<a href="https://www.gpg4win.org/">Gpg4win</a>&#x3002;</p><p>Android&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <strong>K-9 Mail </strong>&#x4F5C;&#x4E3A;&#x90AE;&#x7BB1;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x4F7F;&#x7528;OpenKeychain &#x7BA1;&#x7406;&#x5BC6;&#x94A5;&#xFF0C;&#x8FD9;&#x4E24;&#x6B3E;App&#x90FD;&#x6709;&#x5F88;&#x8BE6;&#x7EC6;&#x7684;&#x5F15;&#x5BFC;&#x8FC7;&#x7A0B;&#xFF0C;&#x672C;&#x6587;&#x4E0D;&#x5BF9;&#x6B64;&#x8FDB;&#x884C;&#x66F4;&#x8BE6;&#x7EC6;&#x7684;&#x8BF4;&#x660E;&#x3002;</p><h2 id="0x03-thunderbird-enigmail">0x03 ThunderBird + Enigmail</h2><p>Thunderbird&#x662F;&#x4E00;&#x53EA;&#x7531;Mozilla&#x5F00;&#x53D1;&#x7684;&#x90AE;&#x7BB1;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x652F;&#x6301;Linux&#x548C;Windows&#x7CFB;&#x7EDF;&#x3002;&#x4F60;&#x53EF;&#x4EE5;&#x5728;<a href="https://www.thunderbird.net/zh-CN/">&#x8FD9;&#x91CC;</a>&#x4E0B;&#x8F7D;&#x3002;</p><p>Enigmail&#x662F;&#x4E00;&#x6B3E;Thunderbird&#x7684;&#x63D2;&#x4EF6;&#xFF0C;&#x5B83;&#x63D0;&#x4F9B;&#x4E86;&#x5BF9;OpenPGP&#x7684;&#x652F;&#x6301;&#x3002;</p><p>&#x5F85;Thunderbird&#x5B89;&#x88C5;&#x597D;&#x4E4B;&#x540E;&#xFF0C;&#x914D;&#x7F6E;&#x4F60;&#x7684;&#x90AE;&#x7BB1;&#x3002;</p><p>&#x5728;&#x4E3B;&#x7A0B;&#x5E8F;&#x754C;&#x9762;&#xFF0C;&#x6253;&#x5F00;&#x83DC;&#x5355;&#xFF08;&#x83DC;&#x5355;&#x6309;&#x94AE;&#x4F4D;&#x4E8E;<strong>&#x641C;&#x7D22;&#x6846;</strong>&#x4E0E;<strong>Event&#x680F;</strong>&#x4E4B;&#x95F4;&#x7684;<strong>&#x2630;</strong>&#x56FE;&#x6807;&#xFF09;&#xFF0C;&#x70B9;&#x51FB;<strong>&#x9644;&#x52A0;&#x7EC4;&#x4EF6;</strong>&#x3002;</p><p>&#x5728;&#x65B0;&#x6253;&#x5F00;&#x6807;&#x7B7E;&#x9875;&#x7684;&#x641C;&#x7D22;&#x680F;&#x4E2D;&#x8F93;&#x5165;<em>Enigmail</em>&#x5E76;&#x56DE;&#x8F66;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x8FD9;&#x4E2A;&#x63D2;&#x4EF6;&#x7684;&#x5B89;&#x88C5;&#x6309;&#x94AE;&#xFF0C;&#x70B9;&#x51FB;&#x5B89;&#x88C5;&#x3002;</p><p>&#x5B89;&#x88C5;&#x6210;&#x529F;&#x4E4B;&#x540E;&#xFF0C;&#x91CD;&#x65B0;&#x542F;&#x52A8;Thunderbird&#x3002;&#x5728;&#x83DC;&#x5355;&#x680F;&#xFF0C;&#x54B1;&#x4F1A;&#x53D1;&#x73B0;&#x591A;&#x4E86;&#x4E00;&#x4E2A;<strong>Enigmail</strong>&#x83DC;&#x5355;&#x3002;&#x70B9;&#x51FB;<strong>&#x5B89;&#x88C5;&#x5411;&#x5BFC;</strong>&#xFF0C;&#x6839;&#x636E;&#x63D0;&#x793A;&#x5B8C;&#x6210;&#x540E;&#x7EED;&#x64CD;&#x4F5C;&#x3002;</p><h2 id="0x04-">0x04 &#x4EA4;&#x6362;&#x5BC6;&#x94A5;</h2><p>&#x5728;Enigmail&#x83DC;&#x5355;&#x4E2D;&#xFF0C;&#x6709;&#x4E00;&#x4E2A;&#x5BC6;&#x94A5;&#x7BA1;&#x7406;&#x9009;&#x9879;&#xFF0C;&#x70B9;&#x51FB;&#x5373;&#x53EF;&#x6253;&#x5F00;&#x5BC6;&#x94A5;&#x7BA1;&#x7406;&#x7A97;&#x53E3;&#x3002;</p><p>&#x53F3;&#x952E;&#x4F60;&#x7684;&#x5BC6;&#x94A5;&#xFF0C;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x628A;&#x4F60;&#x7684;&#x516C;&#x94A5;&#x901A;&#x8FC7;&#x4E00;&#x4E9B;&#x65B9;&#x5F0F;&#x5BFC;&#x51FA;&#x3002;&#x628A;&#x4F60;&#x7684;&#x516C;&#x94A5;&#x901A;&#x8FC7;&#x5B89;&#x5168;&#x7684;&#x65B9;&#x5F0F;&#x53D1;&#x7ED9;&#x4F60;&#x7684;&#x670B;&#x53CB;&#xFF0C;&#x4ED6;&#x4EEC;&#x5C31;&#x53EF;&#x4EE5;&#x5728;&#x516C;&#x94A5;&#x6709;&#x6548;&#x671F;&#x5185;&#x52A0;&#x5BC6;&#x6587;&#x672C;&#xFF0C;&#x518D;&#x7531;&#x4F60;&#x4F7F;&#x7528;&#x5BC6;&#x94A5;&#x89E3;&#x5BC6;&#x3002;</p><p>&#x4F60;&#x53EF;&#x4EE5;&#x5728;&#x6587;&#x4EF6;&#x9009;&#x9879;&#x5361;&#x4E2D;&#x9009;&#x62E9;&#x4ECE;&#x6587;&#x4EF6;&#x4E2D;&#x5BFC;&#x5165;&#x5BC6;&#x94A5;&#x3002;&#x5BFC;&#x5165;&#x7684;&#x5BC6;&#x94A5;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x52A0;&#x5BC6;&#x6587;&#x672C;&#xFF0C;&#x53EA;&#x6709;&#x62E5;&#x6709;&#x8FD9;&#x4E2A;&#x5BC6;&#x94A5;&#x7684;&#x79C1;&#x94A5;&#xFF0C;&#x624D;&#x80FD;&#x5C06;&#x6587;&#x672C;&#x89E3;&#x5BC6;&#x3002;</p><h2 id="0x05-">0x05 &#x6536;&#x53D1;&#x90AE;&#x4EF6;</h2><p>&#x5728;Thunderbird&#x7684;&#x65B0;&#x5EFA;&#x6D88;&#x606F;&#x7A97;&#x53E3;&#xFF0C;&#x70B9;&#x51FB;&#x53D1;&#x9001;&#x6309;&#x94AE;&#x65C1;&#x8FB9;&#x7684;&#x5C0F;&#x9501;&#x548C;&#x94A2;&#x7B14;&#x56FE;&#x6807;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x5F00;&#x542F;&#x52A0;&#x5BC6;&#x548C;&#x7B7E;&#x540D;&#x90AE;&#x4EF6;&#x3002;</p><p>&#x5728;&#x53D1;&#x9001;&#x90AE;&#x4EF6;&#x524D;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x5148;&#x62E5;&#x6709;&#x6536;&#x4EF6;&#x4EBA;&#x7684;PGP&#x516C;&#x94A5;&#x3002;</p><h2 id="0x06-">0x06 &#x7ED9;&#x6211;&#x53D1;&#x4E00;&#x5C01;&#x90AE;&#x4EF6;&#x5427;&#xFF01;</h2><p>&#x5230;&#x8FD9;&#x91CC;&#x4E3A;&#x6B62;&#xFF0C;&#x4F60;&#x5DF2;&#x7ECF;&#x53EF;&#x4EE5;&#x6210;&#x529F;&#x4F7F;&#x7528;PGP&#x8FDB;&#x884C;&#x5B89;&#x5168;&#x3001;&#x79C1;&#x5BC6;&#x5730;&#x901A;&#x8BAF;&#x4E86;&#x3002;</p><p>&#x6211;&#x7684;<strong>PGP&#x516C;&#x94A5;</strong>&#x4E0E;<strong>&#x90AE;&#x7BB1;&#x5730;&#x5740;</strong>&#x53EF;&#x4EE5;&#x5728;&#x8FD9;&#x4E2A;&#x535A;&#x5BA2;&#x7684;<a href="https://blog.lss233.com/about-me/">&#x5173;&#x4E8E;&#x6211;</a>&#x9875;&#x9762;&#x627E;&#x5230;&#xFF0C;&#x7ED9;&#x6211;&#x53D1;&#x4E00;&#x5C01;&#x90AE;&#x4EF6;&#x8BD5;&#x8BD5;&#x5427;&#xFF01;</p>]]></content:encoded></item></channel></rss>