<?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[Halfrost's Field | 冰霜之地]]></title><description><![CDATA[Explore in every moment of the hard thinking]]></description><link>https://halfrost.com/</link><image><url>https://halfrost.com/favicon.png</url><title>Halfrost&apos;s Field | 冰霜之地</title><link>https://halfrost.com/</link></image><generator>Ghost 5.19</generator><lastBuildDate>Sat, 04 Apr 2026 08:36:24 GMT</lastBuildDate><atom:link href="https://halfrost.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[后疫情时代下美国 CS Master 申请纪实]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>21fall &#x7533;&#x8BF7;&#x5B63;&#x683C;&#x5916;&#x4E0D;&#x540C;&#xFF0C;&#x56E0;&#x4E3A; 2020 &#x5E74; 1 &#x6708;&#x5168;&#x4E16;&#x754C;&#x7206;&#x53D1;&#x75AB;&#x60C5;&#x4EE5;&#x540E;&#xFF0C;&#x6821;&#x56ED;&#x5173;&#x95ED;&#xFF0C;&#x7559;&#x5B66;&#x751F;&#x6EDE;&#x7559;&#x56FD;&#x5185;&#x4E0A;&#x7F51;&#x8BFE;&#x3002;&#x52A0;&#x4E0A;&#x4E2D;&#x7F8E;&#x535A;&#x5F08;&#xFF0C;10043 &#x603B;</p>]]></description><link>https://halfrost.com/halfrost_2021/</link><guid isPermaLink="false">634360bbd892dc307476ccf0</guid><category><![CDATA[星霜荏苒]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Mon, 20 Dec 2021 07:33:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/05/1616507078394.jpeg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/05/1616507078394.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"><p>21fall &#x7533;&#x8BF7;&#x5B63;&#x683C;&#x5916;&#x4E0D;&#x540C;&#xFF0C;&#x56E0;&#x4E3A; 2020 &#x5E74; 1 &#x6708;&#x5168;&#x4E16;&#x754C;&#x7206;&#x53D1;&#x75AB;&#x60C5;&#x4EE5;&#x540E;&#xFF0C;&#x6821;&#x56ED;&#x5173;&#x95ED;&#xFF0C;&#x7559;&#x5B66;&#x751F;&#x6EDE;&#x7559;&#x56FD;&#x5185;&#x4E0A;&#x7F51;&#x8BFE;&#x3002;&#x52A0;&#x4E0A;&#x4E2D;&#x7F8E;&#x535A;&#x5F08;&#xFF0C;10043 &#x603B;&#x7EDF;&#x4EE4;&#xFF0C;&#x76F8;&#x4E92;&#x5173;&#x95ED;&#x603B;&#x9886;&#x9986;&#xFF0C;&#x505C;&#x6B62;&#x529E;&#x7406;&#x6240;&#x6709;&#x975E;&#x79FB;&#x6C11;&#x7B7E;&#x8BC1;&#xFF0C;&#x589E;&#x52A0; travel ban NIE(National Interest Exceptions) &#x9650;&#x5236;&#xFF0C;&#x4F7F;&#x5F97;&#x4E2D;&#x56FD;&#x5B66;&#x751F;&#x8D74;&#x7F8E;&#x7559;&#x5B66;&#x53D8;&#x5F97;&#x96BE;&#x4E0A;&#x52A0;&#x96BE;&#x3002;&#x867D;&#x7136;&#x56FD;&#x5185;&#x5F88;&#x5FEB;&#x63A7;&#x5236;&#x4F4F;&#x75AB;&#x60C5;&#xFF0C;&#x4F46;&#x662F;&#x7F8E;&#x56FD;&#x75AB;&#x60C5;&#x66F2;&#x7EBF;&#x5C45;&#x9AD8;&#x4E0D;&#x4E0B;&#xFF0C;&#x4F7F;&#x5F97;&#x51C6;&#x5907;&#x8D74;&#x7F8E;&#x7559;&#x5B66;&#x7684;&#x56FD;&#x5185;&#x5BB6;&#x957F;&#x5341;&#x5206;&#x62C5;&#x5FC3;&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x7279;&#x6B8A;&#x7684;&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#xFF0C;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x6709;&#x54EA;&#x4E9B;&#x56F0;&#x96BE;&#x5462;&#xFF1F;&#x7B14;&#x8005;&#x5B8C;&#x6574;&#x7684;&#x7ECF;&#x5386;&#x4E86;&#x4E00;&#x906D;&#xFF0C;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x6765;&#x8BE6;&#x7EC6;&#x804A;&#x804A;&#x3002;</p>
<p>&#x7B14;&#x8005;&#x7559;&#x5B66;&#x7684;&#x76EE;&#x7684;&#x4EE5;&#x53CA;&#x8D77;&#x6E90;&#x5728; 2019 &#x5E74;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x91CC;&#x9762;&#x8BE6;&#x8FF0;&#x4E86;&#xFF0C;&#x6BCF;&#x4E2A;&#x4EBA;&#x60C5;&#x51B5;&#x4E0D;&#x540C;&#xFF0C;&#x5E76;&#x4E14;&#x5145;&#x6EE1;&#x4E3B;&#x89C2;&#x56E0;&#x7D20;&#xFF0C;&#x4E0D;&#x5728;&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#x91CC;&#x8BA8;&#x8BBA;&#x4E86;&#x3002;&#x5173;&#x4E8E; TOEFL &#x548C; GRE &#x5907;&#x8003;&#x76F8;&#x5173;&#x7684;&#x4E8B;&#x60C5;&#x5199;&#x5728; 2020 &#x5E74;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x91CC;&#x4E86;&#xFF0C;&#x672C;&#x7BC7;&#x4E5F;&#x4E0D;&#x8D58;&#x8FF0;&#x4E86;&#x3002;&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#x5047;&#x8BBE;&#x4F60;&#x5DF2;&#x7ECF;&#x4E0B;&#x5B9A;&#x51B3;&#x5FC3;&#x8981;&#x53BB;&#x7F8E;&#x56FD;&#x8BFB; CS Master &#x4E14;&#x5DF2;&#x51C6;&#x5907;&#x597D; TOEFL &amp; GRE &#x6210;&#x7EE9;&#xFF0C;&#x9488;&#x5BF9;&#x7533;&#x8BF7;&#x5168;&#x8FC7;&#x7A0B;&#xFF0C;&#x7B14;&#x8005;&#x6240;&#x89C1;&#x6240;&#x95FB;&#x6240;&#x60F3;&#xFF0C;&#x4E0E;&#x541B;&#x5206;&#x4EAB;&#x5FC3;&#x5F97;&#x4E0E;&#x201C;&#x6536;&#x83B7;&#x201D;&#x3002;&#x5982;&#x679C;&#x8BFB;&#x8005;&#x6253;&#x7B97;&#x4ECA;&#x5E74;&#x7533;&#x8BF7;&#xFF0C;&#x90A3;&#x4E48;&#x8BF7;&#x9759;&#x4E0B;&#x5FC3;&#x6765;&#x8010;&#x5FC3;&#x8BFB;&#x5B8C;&#xFF0C;&#x4E00;&#x4E2A;&#x8FC7;&#x6765;&#x4EBA;&#x7684;&#x8E29;&#x5751;&#x7ECF;&#x5386;&#x4E00;&#x5B9A;&#x4F1A;&#x8BA9;&#x4F60;&#x6536;&#x83B7;&#x201C;&#x9887;&#x4E30;&#x201D;&#x3002;</p>
<h2 id="%E4%B8%80-why-usa-cs-master">&#x4E00;. Why USA CS Master</h2>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_30.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x7531;&#x4E8E; 10043 &#x603B;&#x7EDF;&#x4EE4;&#x7684;&#x9650;&#x5236;&#xFF0C;&#x4E03;&#x5B50;&#x548C;&#x5317;&#x90AE;&#x9650;&#x5236;&#x7B7E;&#x8BC1;&#xFF0C;&#x6240;&#x4EE5;&#x4E0D;&#x5C11;&#x4F18;&#x79C0;&#x7684;&#x5B66;&#x5B50;&#x6324;&#x5230;&#x6B27;&#x9646;&#x5B66;&#x6821;&#x4E86;&#x3002;&#x6B27;&#x9646;&#x6709;&#x4E0D;&#x5C11;&#x597D;&#x5B66;&#x6821;&#xFF0C;&#x9664;&#x53BB;&#x540D;&#x6C14;&#x5F88;&#x5927;&#x7684;&#x725B;&#x5251;&#xFF0C;&#x745E;&#x58EB;&#xFF0C;&#x5FB7;&#x56FD;&#x90FD;&#x6709;&#x9876;&#x5C16;&#x7684; CS &#x9AD8;&#x6821;&#x3002;&#x5177;&#x4F53;&#x6392;&#x540D;&#x53EF;&#x4EE5;&#x89C1; <a href="https://www.topuniversities.com/university-rankings/world-university-rankings/2021">QS World University Rankings</a>&#x3002;</p>
<blockquote>
<p>&#x5173;&#x4E8E;&#x6392;&#x884C;&#x699C;&#xFF0C;&#x6709; 2 &#x4E2A;&#x6743;&#x5A01;&#x6392;&#x884C;&#x699C;&#xFF0C;&#x4E00;&#x4E2A;&#x662F; <a href="https://www.topuniversities.com/">Qs</a>&#xFF0C;&#x4E00;&#x4E2A;&#x662F; <a href="https://www.usnews.com/">USNews</a>&#x3002;&#x5728; Qs &#x699C;&#x5355;&#x4E0A;&#xFF0C;&#x82F1;&#x56FD;&#x5927;&#x5B66;&#x6392;&#x540D;&#x504F;&#x9AD8;&#xFF0C;&#x5728; USNews &#x699C;&#x5355;&#x4E0A;&#xFF0C;&#x7F8E;&#x56FD;&#x5927;&#x5B66;&#x6392;&#x540D;&#x504F;&#x9AD8;&#x3002;</p>
</blockquote>
<p>&#x8BBA;&#x6392;&#x540D;&#xFF0C;&#x82F1;&#x7F8E;&#x5927;&#x5B66;&#x5728; TOP10 &#x4E0A;&#x4E0D;&#x5206;&#x4F2F;&#x4EF2;&#x3002;&#x4F46;&#x662F;&#x518D;&#x7EFC;&#x5408;&#x8003;&#x8651;&#x6BD5;&#x4E1A;&#x540E;&#x5C31;&#x4E1A;&#x73AF;&#x5883;&#xFF0C;&#x7F8E;&#x56FD;&#x5728; CS &#x8FD9;&#x65B9;&#x9762;&#x8FD8;&#x662F;&#x66F4;&#x80DC;&#x4E00;&#x7B79;&#xFF0C;&#x56E0;&#x4E3A;&#x6709;&#x7EBD;&#x7EA6;&#x548C;&#x7845;&#x8C37;&#x3002;&#x56DE;&#x5230;&#x62E9;&#x6821;&#x4E0A;&#xFF0C;&#x4E03;&#x5B50;&#x548C;&#x5317;&#x90AE;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x6B27;&#x9646;&#xFF0C;&#x52A0;&#x62FF;&#x5927;&#xFF0C;&#x65E5;&#x672C;&#xFF0C;&#x9999;&#x6E2F;&#xFF0C;&#x65B0;&#x52A0;&#x5761;&#x3002;&#x7B14;&#x8005;&#x5BF9;&#x5168;&#x7403;&#x7684;&#x5927;&#x5B66;&#x57FA;&#x672C;&#x90FD;&#x6709;&#x4E86;&#x89E3;&#xFF0C;&#x603B;&#x7ED3;&#x4E86;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x8868;&#x683C;&#xFF1A;</p>
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">&#x660E;&#x663E;&#x4F18;&#x70B9;</th>
<th style="text-align:center">&#x660E;&#x663E;&#x7F3A;&#x70B9;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">&#x7F8E;&#x56FD;</td>
<td style="text-align:center">GPA &#x4E0D;&#x533A;&#x5206; 985/211/&#x53CC;&#x975E;</td>
<td style="text-align:center">&#x82B1;&#x9500;&#x6700;&#x5927;</td>
</tr>
<tr>
<td style="text-align:center">&#x82F1;&#x56FD;</td>
<td style="text-align:center">&#x9879;&#x76EE;&#x4E00;&#x822C;&#x53EA;&#x6709;&#x4E00;&#x5E74;&#xFF0C;&#x82B1;&#x9500;&#x5C0F;</td>
<td style="text-align:center">GPA &#x533A;&#x5206; 985/211/&#x53CC;&#x975E;&#xFF0C;&#x770B;&#x91CD;&#x672C;&#x79D1;&#x51FA;&#x8EAB;</td>
</tr>
<tr>
<td style="text-align:center">&#x52A0;&#x62FF;&#x5927;</td>
<td style="text-align:center"></td>
<td style="text-align:center">CS TOP 100 &#x7684;&#x5B66;&#x6821;&#x5C11;&#xFF0C;UoT &#x4E00;&#x679D;&#x72EC;&#x79C0;</td>
</tr>
<tr>
<td style="text-align:center">&#x65E5;&#x672C;</td>
<td style="text-align:center"></td>
<td style="text-align:center">&#x9664;&#x53BB; TOEFL/IELTS&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x8003; N1</td>
</tr>
<tr>
<td style="text-align:center">&#x6B27;&#x9646;</td>
<td style="text-align:center"></td>
<td style="text-align:center">&#x9664;&#x53BB; TOEFL/IELTS&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x8003;&#x5C0F;&#x8BED;&#x79CD;&#x8003;&#x8BD5;</td>
</tr>
<tr>
<td style="text-align:center">&#x9999;&#x6E2F;</td>
<td style="text-align:center"></td>
<td style="text-align:center">GPA &#x533A;&#x5206; 985/211/&#x53CC;&#x975E;&#xFF0C;&#x770B;&#x91CD;&#x672C;&#x79D1;&#x51FA;&#x8EAB;</td>
</tr>
<tr>
<td style="text-align:center">&#x65B0;&#x52A0;&#x5761;</td>
<td style="text-align:center"></td>
<td style="text-align:center">CS &#x5C31;&#x4E1A;&#x73AF;&#x5883;&#x666E;&#x901A;</td>
</tr>
<tr>
<td style="text-align:center">&#x6FB3;&#x6D32;</td>
<td style="text-align:center"></td>
<td style="text-align:center">CS &#x5C31;&#x4E1A;&#x73AF;&#x5883;&#x666E;&#x901A;</td>
</tr>
</tbody>
</table>
<p>&#x5982;&#x679C;&#x4E0A;&#x9762;&#x660E;&#x663E;&#x7F3A;&#x70B9;&#x547D;&#x4E2D;&#x4E86;&#x4F60;&#x7684;&#x7F3A;&#x70B9;&#xFF0C;&#x5EFA;&#x8BAE;&#x4ED4;&#x7EC6;&#x659F;&#x914C;&#x3002;&#x4F8B;&#x5982;&#x8BED;&#x8A00;&#x5929;&#x8D4B;&#x4E0D;&#x5F3A;&#x7684;&#x4EBA;&#xFF0C;&#x8FD8;&#x8981;&#x53BB;&#x65E5;&#x672C;&#x6216;&#x8005;&#x6B27;&#x9646;&#x7559;&#x5B66;&#xFF0C;2 &#x95E8;&#x5916;&#x8BED;&#x8003;&#x8BD5;&#x5F88;&#x6298;&#x817E;&#x4EBA;&#xFF1B;&#x8D44;&#x91D1;&#x4E0D;&#x5145;&#x88D5;&#x5EFA;&#x8BAE;&#x8C28;&#x614E;&#x8003;&#x8651;&#x7F8E;&#x56FD;&#xFF0C;&#x7F8E;&#x56FD;&#x5F00;&#x9500;&#x662F;&#x6700;&#x5927;&#x7684;&#xFF1B;&#x5982;&#x679C;&#x4F60;&#x662F;&#x53CC;&#x975E;&#x51FA;&#x8EAB;&#xFF0C;&#x5EFA;&#x8BAE;&#x8C28;&#x614E;&#x8003;&#x8651;&#x82F1;&#x56FD;&#x548C;&#x9999;&#x6E2F;&#x3002;</p>
<p>&#x4EE5;&#x7B14;&#x8005;&#x4E3A;&#x4F8B;&#xFF0C;&#x7B14;&#x8005;&#x662F;&#x975E; 985&#xFF0C;&#x6240;&#x4EE5;&#x8C28;&#x614E;&#x8003;&#x8651;&#x82F1;&#x56FD;&#xFF0C;&#x9999;&#x6E2F;&#xFF0C;&#x6216;&#x8005;&#x4E0D;&#x8003;&#x8651;&#x3002;&#x56E0;&#x4E3A;&#x5728;&#x82F1;&#x56FD;&#x586B;&#x5199;&#x7F51;&#x7533;&#x7CFB;&#x7EDF;&#x65F6;&#xFF0C;GPA &#x6709;&#x533A;&#x522B;&#xFF1A;&#x5982;&#x679C;&#x662F; 985 &#x540D;&#x6821;&#x51FA;&#x8EAB;&#xFF0C;GPA 80 &#x5206; OK&#xFF0C;&#x5982;&#x679C;&#x662F; 211 &#x51FA;&#x8EAB;&#xFF0C;GPA 85 &#x5206; OK&#xFF0C;&#x5982;&#x679C;&#x662F;&#x53CC;&#x975E;&#x51FA;&#x8EAB;&#xFF0C;&#x53EF;&#x80FD; GPA 95 &#x5206;&#x4E5F;&#x4E0D; OK&#x3002;&#x56E0;&#x4E3A;&#x975E;&#x540D;&#x6821;&#x4F1A;&#x88AB;&#x653E;&#x8FDB;&#x5355;&#x72EC;&#x7684; pool &#x4E2D;&#x3002;&#x975E;&#x540D;&#x6821;&#x60F3;&#x5728;&#x82F1;&#x56FD;&#x7FFB;&#x8EAB;&#x7684;&#x673A;&#x4F1A;&#x5F88;&#x5C11;&#xFF0C;&#x9664;&#x53BB;&#x5F02;&#x5E38;&#x4F18;&#x79C0;&#x7684;&#x3002;&#x7B14;&#x8005;&#x8BED;&#x8A00;&#x5929;&#x8D4B;&#x4E00;&#x822C;&#xFF0C;&#x5B66;&#x82F1;&#x8BED;&#x90FD;&#x82B1;&#x4E86;&#x5F88;&#x591A;&#x65F6;&#x95F4;&#xFF0C;&#x6240;&#x4EE5;&#x76F4;&#x63A5;&#x6392;&#x9664;&#x65E5;&#x672C;&#x548C;&#x6B27;&#x9646;&#x3002;&#x7B14;&#x8005;&#x4E5F;&#x5F88;&#x770B;&#x91CD; CS &#x5C31;&#x4E1A;&#x73AF;&#x5883;&#xFF0C;&#x6240;&#x4EE5;&#x4E5F;&#x6392;&#x9664;&#x6FB3;&#x6D32;&#x548C;&#x65B0;&#x52A0;&#x5761;&#x3002;&#x8FD9;&#x6837;&#x6392;&#x9664;&#x4E0B;&#x6765;&#xFF0C;&#x6700;&#x7EC8;&#x7684;&#x9009;&#x62E9;&#x5E94;&#x8BE5;&#x662F;&#x7F8E;&#x56FD;&#x548C;&#x52A0;&#x62FF;&#x5927;&#x3002;&#x7F8E;&#x56FD;&#x7684;&#x5C31;&#x4E1A;&#x73AF;&#x5883;&#x6BD4;&#x52A0;&#x62FF;&#x5927;&#x66F4;&#x597D;&#xFF0C;&#x6240;&#x4EE5;&#x7B14;&#x8005;&#x66F4;&#x503E;&#x5411;&#x7F8E;&#x56FD;&#x3002;</p>
<blockquote>
<p>&#x4E0D;&#x8FC7;&#x7B14;&#x8005;&#x6700;&#x7EC8;&#x8FD8;&#x662F;&#x6295;&#x4E86;&#x4E00;&#x6240;&#x82F1;&#x56FD;&#x5927;&#x5B66;&#xFF0C;&#x4E00;&#x6240;&#x65B0;&#x52A0;&#x5761;&#x5927;&#x5B66;&#xFF0C;&#x4E00;&#x6240;&#x52A0;&#x62FF;&#x5927;&#x5927;&#x5B66;&#x548C; 14 &#x6240;&#x7F8E;&#x56FD;&#x5927;&#x5B66;&#x3002;&#x53EF;&#x80FD;&#x4F60;&#x4F1A;&#x597D;&#x5947;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x660E;&#x77E5;&#x7533;&#x4E0D;&#x4E0A;&#x8FD8;&#x8981;&#x5934;&#x94C1;&#x5F80;&#x4E0A;&#x51B2;&#xFF1F;&#x7B14;&#x8005;&#x662F;&#x4EB2;&#x8EAB;&#x5B9E;&#x8DF5;&#x4EE5;&#x540E;&#x53D1;&#x73B0;&#x4E0A;&#x8FF0;&#x89C4;&#x5F8B;&#x7684;&#x3002;&#x5982;&#x679C;&#x65F6;&#x95F4;&#x80FD;&#x5012;&#x6D41;&#xFF0C;&#x4E00;&#x5B9A;&#x4E0D;&#x4F1A;&#x5934;&#x94C1;&#x5F80;&#x4E0A;&#x51B2;&#x3002;</p>
</blockquote>
<p>&#x82F1;&#x56FD;/&#x7F8E;&#x56FD;/&#x65B0;&#x52A0;&#x5761;/&#x6FB3;&#x6D32;/&#x52A0;&#x62FF;&#x5927; CS Master &#x53C8;&#x53EF;&#x5206;&#x4E3A; 2 &#x79CD;&#x7C7B;&#x578B;&#xFF0C;Courser-base &#x548C; Research-based&#x3002;Courser-base &#x504F;&#x5C31;&#x4E1A;&#x5411;(&#x4F46;&#x4E0D;&#x662F;&#x7EDD;&#x5BF9;)&#xFF0C;Research-based &#x504F;&#x53EF;&#x8BFB; PhD &#x5411;(&#x4F46;&#x4E5F;&#x4E0D;&#x662F;&#x7EDD;&#x5BF9;)&#x3002;&#x5982;&#x679C;&#x8BFB;&#x8005;&#x5BF9; Research &#x611F;&#x5174;&#x8DA3;&#xFF0C;&#x7B14;&#x8005;&#x5EFA;&#x8BAE;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x7533; PhD&#xFF0C;&#x4FDD;&#x9669;&#x8D77;&#x89C1;&#x7684;&#x8BDD;&#xFF0C;MS/PhD Research &#x4E00;&#x8D77;&#x7533;&#x8BF7;&#x3002;Research-based &#x7684;&#x540D;&#x79F0;&#x90FD;&#x662F; Master of Science in Computer Science with thesis&#xFF0C;&#x53EA;&#x6709;&#x8FD9;&#x4E00;&#x79CD;&#x60C5;&#x51B5;&#xFF0C;&#x5373; MS &#x5F00;&#x5934;&#x7684;&#x3002;</p>
<p>&#x7B14;&#x8005;&#x5168;&#x90E8;&#x9879;&#x76EE;&#x90FD;&#x662F; Courser-base &#x7684;&#xFF0C;&#x5728; Courser-base &#x4E2D;&#x53C8;&#x53EF;&#x4EE5;&#x7EC6;&#x5206;&#x4E3A; Terminal &#x548C;&#x975E; Terminal &#x7684;&#x3002;Terminal &#x4EE3;&#x8868;&#x7EC8;&#x6B62;&#xFF0C;&#x8FD9;&#x4E2A;&#x9879;&#x76EE; 100% &#x4E0D;&#x80FD;&#x8BFB; PhD&#xFF0C;&#x6216;&#x8005;&#x8BF4;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x8BFB;&#x5B8C;&#x5BF9;&#x7533; PhD &#x65E0;&#x5E2E;&#x52A9;&#x3002;&#x4F8B;&#x5982;&#xFF1A;Master of Computer Science&#x3001;Master of Engineering&#x3001;Masters Program in Computer Science&#x3002;&#x66F4;&#x8BE6;&#x7EC6;&#x7684; MSC@<strong>UCI</strong>, MSC@<strong>RICE</strong>, MPCS@<strong>UChicago</strong>, Meng EECS@<strong>UCB</strong>, Meng CS@<strong>Cornell Tech</strong>, MSE@<strong>CMU SCS</strong>&#x3002;&#x975E; Terminal &#x7684;&#x4E00;&#x822C;&#x662F; Master of Science in Computer Science without thesis&#xFF0C;&#x5373;&#x7F29;&#x5199;&#x662F; MS &#x5F00;&#x5934;&#x7684;&#xFF0C;&#x4E2D;&#x6587;&#x7FFB;&#x8BD1;&#x662F;&#x7406;&#x5B66;&#x7855;&#x58EB;&#x3002;&#x8FD9;&#x4E00;&#x7C7B;&#x7684;&#x9879;&#x76EE;&#x662F;&#x53EF;&#x4EE5;&#x8BFB; PhD &#x7684;&#xFF0C;&#x6216;&#x8005;&#x7B2C;&#x4E00;&#x5E74;&#x7ED3;&#x675F;&#x540E;&#x53EF;&#x4EE5;&#x7533;&#x672C;&#x6821;&#x7684; PhD&#x3002;</p>
<p>&#x5982;&#x679C;&#x662F;&#x627E;&#x5DE5;&#x65B9;&#x5411;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x9879;&#x76EE;&#x4E2D;&#x662F;&#x5426;&#x5305;&#x542B;&#x5B9E;&#x4E60;&#x3002;&#x5982;&#x679C;&#x6709;&#x5B9E;&#x4E60;&#x671F;&#xFF0C;&#x5B66;&#x6821;&#x4F1A;&#x5728;&#x6691;&#x5047;&#x7ED9;&#x4F60; CPT&#xFF0C;&#x4F60;&#x4FBF;&#x53EF;&#x4EE5;&#x53BB;&#x5B9E;&#x4E60;&#x3002;&#x6709;&#x4E9B;&#x9879;&#x76EE;&#x65E0;&#x5B9E;&#x4E60;&#xFF0C;&#x5047;&#x671F;&#x53EF;&#x80FD;&#x4E0A;&#x8BFE;&#xFF0C;&#x4F8B;&#x5982; MSE@<strong>CMU SCS</strong>&#xFF0C;&#x5047;&#x671F;&#x4E0A;&#x8BFE;&#xFF0C;&#x4E0D;&#x7ED9; CPT&#x3002;&#x65E0; CPT &#x7684;&#x9879;&#x76EE;&#x4E5F;&#x80FD;&#x5728;&#x7F8E;&#x56FD;&#x627E;&#x5230;&#x5DE5;&#x4F5C;&#xFF0C;&#x6BD5;&#x4E1A;&#x540E; 90 &#x5929;&#x5185;&#x627E;&#x5230;&#x5DE5;&#x4F5C;&#x5373;&#x53EF;&#x5F00;&#x59CB;&#x4F7F;&#x7528; OPT&#x3002;&#x6709; CPT &#x7684;&#x9879;&#x76EE;&#x65E0;&#x975E;&#x662F;&#x591A;&#x4E86;&#x4E00;&#x6B21;&#x627E;&#x5DE5;&#x4E0A;&#x5CB8;&#x7684;&#x673A;&#x4F1A;&#xFF0C;&#x56E0;&#x4E3A; CPT &#x5B9E;&#x4E60;&#x671F;&#x95F4;&#xFF0C;&#x8868;&#x73B0;&#x826F;&#x597D;&#xFF0C;&#x5927;&#x6982;&#x7387;&#x53EF;&#x4EE5;&#x62FF;&#x5230; return offer&#x3002;&#x5982;&#x679C;&#x4F60;&#x60F3;&#x5728;&#x7F8E;&#x56FD;&#x627E;&#x5DE5;&#x4F5C;&#x7559;&#x4E0B;&#x6765;&#xFF0C;&#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x5E26; CPT &#x5B9E;&#x4E60;&#x7684;&#x9879;&#x76EE;&#x662F;&#x521A;&#x9700;&#x3002;&#x770B;&#x5230;&#x6B64;&#x5904;&#xFF0C;&#x4F60;&#x5E94;&#x8BE5;&#x5BF9;&#x9009;&#x54EA;&#x4E2A;&#x56FD;&#x5BB6;&#x7684;&#x5927;&#x5B66;&#xFF0C;&#x9009;&#x54EA;&#x79CD;&#x7C7B;&#x578B;&#x7684; master&#xFF0C;&#x662F;&#x5426;&#x8BFB; PhD&#xFF0C;&#x4EE5;&#x53CA;&#x662F;&#x5426;&#x9700;&#x8981;&#x5B9E;&#x4E60;&#xFF0C;&#x5FC3;&#x77E5;&#x809A;&#x660E;&#x4E86;&#x3002;</p>
<h2 id="%E4%BA%8C-%E7%94%B3%E8%AF%B7%E6%9D%90%E6%96%99">&#x4E8C;. &#x7533;&#x8BF7;&#x6750;&#x6599;</h2>
<p>&#x5982;&#x679C;&#x4F60;&#x8BA4;&#x8BC6;&#x7B14;&#x8005;&#xFF0C;&#x7B14;&#x8005;&#x4EC0;&#x4E48;&#x80CC;&#x666F;&#x4F60;&#x4E5F;&#x4E86;&#x89E3;&#x3002;&#x5982;&#x679C;&#x4E0D;&#x4E86;&#x89E3;&#x7B14;&#x8005;&#x80CC;&#x666F;&#xFF0C;&#x90A3;&#x4E5F;&#x4E0D;&#x7528;&#x4E86;&#x89E3;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x80CC;&#x666F;&#x5F88;&#x5DEE;&#xFF0C;&#x53CC;&#x975E;&#x51FA;&#x8EAB;&#xFF0C;TOEFL 98+&#xFF0C;GRE 320+3&#xFF0C;GPA 3.82/4.0&#xFF0C;Major 3.9/4.0&#x3002;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#x4E0D;&#x51FA;&#x4F17;&#xFF0C;&#x53EF;&#x80FD;&#x4E2D;&#x7B49;&#x504F;&#x4E0B;&#xFF1F;</p>
<h3 id="1-%E6%9C%AC%E7%A7%91%E8%83%8C%E6%99%AF">1. &#x672C;&#x79D1;&#x80CC;&#x666F;</h3>
<p>&#x5982;&#x679C;&#x4F60;&#x7684;&#x672C;&#x79D1;&#x80CC;&#x666F;&#x975E;&#x5E38;&#x597D;&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x6E05;&#x5317; TOP2 &#x51FA;&#x8EAB;&#xFF0C;&#x6216;&#x8005;&#x5357;&#x4EAC;&#x5927;&#x5B66;&#xFF0C;&#x4E0A;&#x6D77;&#x4EA4;&#x901A;&#x5927;&#x5B66;&#xFF0C;&#x6D59;&#x6C5F;&#x5927;&#x5B66;&#xFF0C;&#x590D;&#x65E6;&#x5927;&#x5B66;&#x51FA;&#x8EAB;&#xFF0C;&#x90A3;&#x4E48;&#x606D;&#x559C;&#x4F60;&#xFF0C;&#x5730;&#x7403;&#x4E0A;&#x5927;&#x90E8;&#x5206;&#x5927;&#x5B66;&#x4F60;&#x90FD;&#x53EF;&#x4EE5;&#x95ED;&#x7740;&#x773C;&#x775B;&#x7533;&#x8BF7;&#xFF0C;&#x6A2A;&#x7740;&#x4EFB;&#x6027;&#x7533;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_27.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x5982;&#x679C;&#x4F60;&#x7684;&#x5B66;&#x6821;&#x5728;&#x4E0A;&#x56FE;&#x4E2D;&#xFF0C;&#x82F1;&#x7F8E;&#x90FD;&#x53EF;&#x4EE5;&#x7533;&#x3002;&#x5982;&#x679C;&#x672C;&#x79D1;&#x5B66;&#x6821;&#x4E0D;&#x5728;&#x4E0A;&#x56FE;&#x4E2D;&#xFF0C;&#x5EFA;&#x8BAE;&#x522B;&#x8003;&#x8651;&#x82F1;&#x56FD;&#xFF0C;&#x56E0;&#x4E3A;&#x4F60;&#x7684;&#x51FA;&#x8EAB;&#x4E0D;&#x597D;&#x3002;&#x4E0A;&#x56FE;&#x662F;&#x9646;&#x672C;&#x7684;&#x6392;&#x540D;&#x3002;&#x5982;&#x679C;&#x4F60;&#x662F;&#x6D77;&#x672C;&#x51FA;&#x8EAB;&#xFF0C;&#x90A3;&#x6BD4;&#x9646;&#x672C;&#x5929;&#x751F;&#x9AD8;&#x4EBA;&#x4E00;&#x6863;&#x3002;&#x4E3E;&#x4E2A;&#x4F8B;&#x5B50;&#xFF0C;&#x4F8B;&#x5982; UCR &#x4E0D;&#x5982;&#x6E05;&#x5317;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x7533;&#x8BF7;&#x7F8E;&#x56FD; master &#x65F6;&#xFF0C;&#x5374;&#x66F4;&#x53D7;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x7684;&#x9752;&#x7750;&#x3002;&#x4E00;&#x662F;&#x56E0;&#x4E3A;&#x672C;&#x79D1;&#x63A5;&#x53D7;&#x4E86;&#x5168;&#x82F1;&#x6587;&#x7684;&#x8BFE;&#x7A0B;&#x6559;&#x80B2;&#xFF0C;&#x4E8C;&#x662F;&#x6D77;&#x672C;&#x7684; pool &#x4F18;&#x5148;&#x7EA7;&#x9AD8;&#x4E8E;&#x9646;&#x672C;&#x7684; pool&#x3002;&#x672C;&#x79D1;&#x662F; UCR &#x7684;&#x7533;&#x8BF7;&#x8005;&#x7533;&#x8BF7; UCLA&#xFF0C;UCB &#x6BD4;&#x672C;&#x79D1;&#x662F;&#x6E05;&#x5317;&#x7684;&#x7533;&#x8BF7;&#x8005;&#x7533;&#x8BF7; UCLA&#xFF0C;UCB &#x5BB9;&#x6613;&#x4E00;&#x4E9B;&#x3002;&#x518D;&#x6BD4;&#x5982; Stanford&#xFF0C;MIT&#xFF0C;Harvard &#x5728;&#x9646;&#x672C;&#x4E2D;&#x62DB;&#x751F;&#xFF0C;&#x53EA;&#x62DB;&#x6E05;&#x5317; + &#x534E;&#x4E94;&#xFF0C;&#x6709;&#x65F6;&#x5019;&#x751A;&#x81F3;&#x534E;&#x4E94;&#x90FD;&#x4E0D;&#x62DB;&#x3002;&#x4F46;&#x662F; Stanford&#xFF0C;MIT&#xFF0C;Harvard &#x62DB;&#x5F88;&#x591A;&#x6D77;&#x672C;&#x7684;&#x5B66;&#x751F;&#xFF0C;&#x5373;&#x4F7F;&#x5B66;&#x6821;&#x7EFC;&#x5408;&#x6392;&#x540D;&#x843D;&#x540E;&#x4E8E;&#x6E05;&#x5317;&#xFF1A;</p>
<p><strong>&#x6D77;&#x672C; &gt; &#x6E05;&#x5317; &gt; NJU + ZJU + SJTU &gt;&gt; &#x5176;&#x4ED6;&#x534E;&#x4E94; + &#x90E8;&#x5206;&#x8BA1;&#x7B97;&#x673A;&#x7279;&#x8272;&#x5B66;&#x6821;&#xFF08;&#x5982;&#x5317;&#x90AE;&#xFF0C;&#x534E;&#x79D1;&#xFF09;&gt; 211 &gt; &#x5176;&#x4ED6;&#x53CC;&#x975E;</strong></p>
<p>&#x5982;&#x679C;&#x4F60;&#x8FD8;&#x5728;&#x5927;&#x5B66;&#xFF0C;&#x672C;&#x79D1;&#x80CC;&#x666F;&#x4E5F;&#x53EF;&#x4EE5;&#x63D0;&#x5347;&#x3002;&#x53EF;&#x4EE5;&#x8003;&#x8651; Transfer&#xFF0C;&#x5927;&#x4E00;&#x5927;&#x4E8C;&#x5728;&#x56FD;&#x5185;&#x8BFB;&#xFF0C;&#x5927;&#x4E09;&#x5927;&#x56DB; Transfer &#x5230;&#x7F8E;&#x672C; TOP50 &#x7684;&#x5B66;&#x6821;&#x53BB;&#x3002;&#x672C;&#x79D1;&#x6BD5;&#x4E1A;&#x62FF;&#x5230;&#x7F8E;&#x672C;&#x7684;&#x5B66;&#x5386;&#xFF0C;&#x5BF9;&#x7533;&#x8BF7; Master &#x6765;&#x8BF4;&#xFF0C;&#x63D0;&#x5347;&#x4E86;&#x4E0D;&#x6B62;&#x4E00;&#x4E2A;&#x6863;&#x4E86;&#xFF0C;&#x6027;&#x4EF7;&#x6BD4;&#x5F88;&#x9AD8;&#x3002;&#x5927;&#x4E09;&#x5927;&#x56DB;&#x5728;&#x7F8E;&#x56FD;&#x8BFB;&#x4E66;&#x5927;&#x6982;&#x82B1;&#x8D39; 100W RMB &#x5DE6;&#x53F3;&#x3002;&#x8FD9;&#x6761;&#x8DEF;&#x62FF;&#x5230; TOP20 Master &#x5B66;&#x4F4D;&#x603B;&#x5171;&#x9700;&#x8981; 2 &#x5E74;&#xFF0C;&#x82B1;&#x8D39; 200W RMB &#x5DE6;&#x53F3;&#x3002;</p>
<p>&#x5982;&#x679C;&#x4F60;&#x5DF2;&#x7ECF;&#x6BD5;&#x4E1A;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x5BB6;&#x5EAD;&#x6761;&#x4EF6;&#x6709;&#x5F88;&#x591A;&#x94B1;&#x8D44;&#x52A9;&#x4F60;&#x8BFB;&#x4E66;&#xFF0C;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x8BFB;&#x7F8E;&#x56FD;&#x7684;&#x793E;&#x533A;&#x5927;&#x5B66;&#x3002;&#x76F8;&#x5F53;&#x4E8E;&#x91CD;&#x65B0;&#x518D;&#x8BFB;&#x4E00;&#x4E2A;&#x672C;&#x79D1;&#x3002;&#x7F8E;&#x56FD;&#x793E;&#x533A;&#x5927;&#x5B66;&#x5927;&#x4E09;&#x4E5F;&#x53EF;&#x4EE5;&#x8F6C;&#x5B66;&#xFF0C;&#x518D;&#x8F6C;&#x5230;&#x7F8E;&#x672C; TOP50 &#x5927;&#x5B66;&#x53BB;&#x3002;&#x4E00;&#x822C;&#x8D70;&#x8FD9;&#x6761;&#x8DEF;&#x7684;&#x4EBA;&#xFF0C;&#x90FD;&#x4F1A;&#x9009;&#x62E9;&#x8BFB;&#x52A0;&#x5DDE;&#x7684;&#x793E;&#x533A;&#x5927;&#x5B66;&#xFF0C;&#x7136;&#x540E;&#x8F6C;&#x5B66;&#x8F6C;&#x5230;&#x52A0;&#x5DDE;&#x7CFB;&#x7684;&#x5927;&#x5B66;&#x4E2D;&#x7684;&#x4EFB;&#x4E00;&#x6240;&#xFF0C;&#x5927;&#x56DB;&#x6BD5;&#x4E1A;&#x4EE5;&#x540E;&#x5373;&#x4E3A;&#x4EBA;&#x4E0A;&#x4EBA;&#x3002;&#x8FD9;&#x6761;&#x8DEF;&#x65F6;&#x95F4;&#x548C;&#x91D1;&#x94B1;&#x82B1;&#x8D39;&#x90FD;&#x5F88;&#x5927;&#xFF0C;&#x91CD;&#x8BFB;&#x4E00;&#x4E2A;&#x672C;&#x79D1;&#x9700;&#x8981;&#x82B1;&#x8D39; 4 &#x5E74;&#x5149;&#x9634;&#xFF0C;4 &#x5E74;&#x5728;&#x7F8E;&#x56FD;&#x7684;&#x82B1;&#x8D39;&#x4E5F;&#x81F3;&#x5C11;&#x5728; 200W RMB &#x5DE6;&#x53F3;&#x3002;200W &#x4EC5;&#x4EC5;&#x662F;&#x5F00;&#x59CB;&#xFF0C;&#x8FD9;&#x521A;&#x521A;&#x62FF;&#x5230;&#x5B66;&#x58EB;&#x5B66;&#x4F4D;&#xFF0C;&#x518D;&#x7533; Master &#x8BFB; 1-2 &#x5E74;&#x5927;&#x6982;&#x8FD8;&#x9700;&#x8981; 100-150W&#x3002;&#x8FD9;&#x6761;&#x8DEF;&#x62FF;&#x5230; TOP20 Master &#x5B66;&#x4F4D;&#x603B;&#x5171;&#x9700;&#x8981; 6 &#x5E74;&#xFF0C;&#x82B1;&#x8D39; 300-350W RMB &#x5DE6;&#x53F3;&#x3002;</p>
<h3 id="2-gpa">2. GPA</h3>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_31.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>GPA &#x4F5C;&#x4E3A;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#x4E2D;&#x91CD;&#x8981;&#x4E00;&#x73AF;&#xFF0C;&#x91CD;&#x8981;&#x6027;&#x4E0D;&#x5FC5;&#x591A;&#x8BF4;&#x3002;<strong>&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x5C24;&#x5176;&#x770B;&#x7740; GPA</strong>&#xFF0C;&#x4F8B;&#x5982; USC&#xFF0C;UoT&#xFF0C;&#x5B83;&#x4EEC;&#x6839;&#x636E;&#x7533;&#x8BF7;&#x8005;&#x7684; GPA &#x9AD8;&#x4F4E;&#x4ECE;&#x9AD8;&#x5F80;&#x4F4E;&#x6392;&#x5E8F;&#xFF0C;&#x7136;&#x540E;&#x6309;&#x7167;&#x4F18;&#x5148;&#x7EA7;&#x4ECE;&#x4E0A;&#x5F80;&#x4E0B;&#x53D1; offer&#x3002;&#x5982;&#x679C;&#x4F60;&#x8FD8;&#x5728;&#x5927;&#x4E00;&#xFF0C;&#x5927;&#x4E8C;&#x6216;&#x8005;&#x5927;&#x4E09;&#xFF0C;&#x8BF7;&#x4E00;&#x5B9A;&#x89C4;&#x5212;&#x597D;&#x65F6;&#x95F4;&#xFF0C;GPA &#x4E89;&#x53D6;&#x8D8A;&#x9AD8;&#x8D8A;&#x597D;&#x3002;&#x5982;&#x679C;&#x672C;&#x79D1;&#x5B66;&#x6821;&#x5141;&#x8BB8;&#x5237; GPA&#xFF0C;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x5927;&#x4E09;&#x4FEE;&#x5B8C;&#x6240;&#x6709;&#x8BFE;&#x7A0B;&#xFF0C;&#x5927;&#x56DB;&#x91CD;&#x9009;&#x5927;&#x4E00;&#x5927;&#x4E8C; GPA &#x4F4E;&#x7684;&#x8BFE;&#xFF0C;&#x91CD;&#x4FEE;&#x5237; GPA&#x3002;</p>
<p>&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x5B66;&#x4FE1;&#x7F51;&#x5B98;&#x65B9;&#x8BA4;&#x8BC1;&#x6210;&#x7EE9;&#x5355;&#xFF0C;&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x7F51;&#x7533;&#x9636;&#x6BB5;&#x5C31;&#x5FEB;&#x9012;&#x6210;&#x7EE9;&#x5355;&#x539F;&#x4EF6;&#x3002;&#x6240;&#x4EE5;&#x8FD9;&#x4E9B;&#x6750;&#x6599;&#x8BF7;&#x63D0;&#x524D;&#x51C6;&#x5907;&#x597D;&#x3002;&#x53BB;&#x5B66;&#x4F4D;&#x7F51;&#x4E0A;&#x8BA4;&#x8BC1;&#x6210;&#x7EE9;&#x5355;&#xFF0C;&#x7FFB;&#x8BD1;&#x4EF6;&#x4E5F;&#x9644;&#x5E26;&#x5F04;&#x4E00;&#x4EFD;&#xFF0C;&#x5177;&#x4F53;&#x64CD;&#x4F5C;&#x8BA4;&#x8BC1;&#x5B8C;&#x4EE5;&#x540E;&#xFF0C;&#x4ED8;&#x8D39;&#x518D;&#x4E70;&#x4E00;&#x4EFD;&#x82F1;&#x6587;&#x7248;&#x7684;&#x5373;&#x53EF;&#x3002;&#x8981;&#x6C42;&#x5B66;&#x4FE1;&#x7F51;&#x8BA4;&#x8BC1;&#x6210;&#x7EE9;&#x5355;&#x7684;&#x5B66;&#x6821;&#xFF0C;&#x4F8B;&#x5982; WUSTL&#xFF0C;&#x4F1A;&#x8981;&#x6C42;&#x4F60;&#x901A;&#x8FC7;&#x5B66;&#x4FE1;&#x7F51;&#x7ED9;&#x4ED6;&#x4EEC;&#x53D1;&#x9001;&#x672C;&#x79D1;&#x7684;&#x6750;&#x6599;&#xFF0C;&#x8BA4;&#x8BC1;&#x540E;&#x7684;&#x5B66;&#x4F4D;&#x8BC1;&#x4E66;(&#x4E2D;&#x82F1;&#x6587;)+&#x8BA4;&#x8BC1;&#x540E;&#x7684;&#x6210;&#x7EE9;&#x5355;(&#x4E2D;&#x82F1;&#x6587;)&#x3002;&#x8981;&#x6C42;&#x5BC4;&#x6210;&#x7EE9;&#x5355;&#x539F;&#x4EF6;&#x7684;&#x5B66;&#x6821;&#xFF0C;&#x4F8B;&#x5982; UMich&#xFF0C;NYU&#xFF0C;&#x9700;&#x8981;&#x4F60;&#x53BB;&#x672C;&#x79D1;&#x5B66;&#x6821;&#x8054;&#x7CFB;&#x8001;&#x5E08;&#x76D6;&#x597D;&#x6559;&#x52A1;&#x5904;&#x7684;&#x5370;&#x7AE0;&#xFF0C;&#x7528;&#x5B66;&#x6821;&#x7684;&#x4FE1;&#x5C01;&#x5C01;&#x597D;&#xFF0C;&#x518D;&#x5C01;&#x53E3;&#x5904;&#x518D;&#x6B21;&#x76D6;&#x7AE0;&#xFF0C;&#x4ECE;&#x5B66;&#x6821;&#x5BC4;&#x51FA;&#x3002;&#x591A;&#x6B21;&#x76D6;&#x7AE0;+&#x5B66;&#x6821;&#x5BC4;&#x51FA;&#x76EE;&#x7684;&#x662F;&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;&#x4E2D;&#x9014;&#x6CA1;&#x6709;&#x542F;&#x5C01;&#x5E76;&#x7BE1;&#x6539;&#x3002;</p>
<p>&#x5173;&#x4E8E; GPA &#x8FD8;&#x6709;&#x4E00;&#x4EF6;&#x4F60;&#x5FC5;&#x987B;&#x77E5;&#x9053;&#x7684;&#x4E8B;&#x3002;&#x7F8E;&#x56FD;&#x6709;&#x4E00;&#x4E2A; WES &#x6559;&#x80B2;&#x673A;&#x6784;&#xFF0C;&#x5B83;&#x4E13;&#x95E8;&#x505A; GPA &#x8BA4;&#x8BC1;&#x7684;&#x3002;&#x7ECF;&#x8FC7;&#x5B83;&#x8BA4;&#x8BC1;&#x4EE5;&#x540E;&#x7684; GPA&#xFF0C;&#x5927;&#x6982;&#x7387;&#x6BD4;&#x5B66;&#x6821;&#x6210;&#x7EE9;&#x5355;&#x4E0A;&#x7684;&#x9AD8;&#x3002;&#x56E0;&#x4E3A;&#x4ED6;&#x4EEC;&#x4E0D;&#x8BA4;&#x53EF;&#x56FD;&#x5185;&#x7684;&#x653F;&#x6CBB;&#x76F8;&#x5173;&#x7684;&#x8BFE;&#x7A0B;&#xFF0C;&#x4F8B;&#x5982;&#x300A;&#x9A6C;&#x514B;&#x601D;&#x4E3B;&#x4E49;&#x54F2;&#x5B66;&#x539F;&#x7406;&#x300B;&#x3001;&#x300A;&#x4E2D;&#x56FD;&#x8FD1;&#x73B0;&#x4EE3;&#x53F2;&#x7EB2;&#x8981;&#x300B;&#x3001;&#x300A;&#x601D;&#x60F3;&#x9053;&#x5FB7;&#x4E0E;&#x6CD5;&#x5F8B;&#x57FA;&#x7840;&#x300B;&#x3001;&#x300A;&#x6BDB;&#x6CFD;&#x4E1C;&#x601D;&#x60F3;&#x548C;&#x4E2D;&#x56FD;&#x7279;&#x8272;&#x793E;&#x4F1A;&#x4E3B;&#x4E49;&#x7406;&#x8BBA;&#x4F53;&#x7CFB;&#x6982;&#x8BBA;&#x300B;&#xFF0C;&#x8FD8;&#x6709;&#x56FD;&#x5185;&#x7684;&#x4F53;&#x80B2;&#x4E0E;&#x5065;&#x5EB7;&#x8BFE;&#x3002;&#x4ED6;&#x4EEC;&#x5728;&#x91CD;&#x65B0;&#x8BA1;&#x7B97; GPA &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4E0D;&#x4F1A;&#x8BA1;&#x7B97;&#x5B83;&#x4EEC;&#x3002;&#x8FD9;&#x6837;&#x7B97;&#x51FA;&#x6765;&#x7684; GPA &#x4F1A;&#x88AB;&#x5927;&#x5B66;&#x6210;&#x7EE9;&#x5355;&#x4E0A;&#x7684;&#x66F4;&#x9AD8;&#x4E00;&#x4E9B;&#x3002;&#x6240;&#x4EE5;&#x80FD;&#x63D0;&#x4EA4; WES &#x8BA4;&#x8BC1;&#x6210;&#x7EE9;&#x5355;&#x7684;&#x5B66;&#x6821;&#xFF0C;&#x5C3D;&#x91CF;&#x63D0;&#x4EA4; WES &#x8BA4;&#x8BC1;&#xFF0C;&#x53D8;&#x76F8;&#x63D0;&#x9AD8;&#x4E86;&#x81EA;&#x5DF1;&#x7684; GPA&#x3002;&#x867D;&#x7136;&#x652F;&#x6301; WES &#x8BA4;&#x8BC1;&#x6210;&#x7EE9;&#x5355;&#x7684;&#x5B66;&#x6821;&#x8D8A;&#x6765;&#x8D8A;&#x5C11;&#xFF0C;&#x4F46;&#x662F;&#x8FD8;&#x5B58;&#x5728;&#x3002;&#x4F8B;&#x5982; CMU &#x6709;&#x597D;&#x51E0;&#x4E2A;&#x9879;&#x76EE;&#x90FD;&#x8FD8;&#x652F;&#x6301; WES &#x8BA4;&#x8BC1;&#x3002;USC&#xFF0C;NYU &#x4E0D;&#x652F;&#x6301;&#xFF0C;&#x4ED6;&#x4EEC;&#x53EA;&#x63A5;&#x6536;&#x5927;&#x5B66;&#x6210;&#x7EE9;&#x5355;&#x4E0A;&#x539F;&#x59CB; GPA&#x3002;</p>
<h3 id="3-toefl-gre">3. TOEFL &amp; GRE</h3>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_32.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x8BED;&#x8A00;&#x6210;&#x7EE9;&#x4E0D;&#x5FC5;&#x591A;&#x8BF4;&#xFF0C;&#x4E09;&#x7EF4;&#x4E2D;&#x7684;&#x91CD;&#x4E2D;&#x4E4B;&#x91CD;&#x3002;&#x4E0D;&#x7BA1;&#x4F60;&#x662F;&#x81EA;&#x5B66;&#xFF0C;&#x62A5;&#x73ED;&#xFF0C;&#x4E00;&#x5B9A;&#x8BF7;&#x5C3D;&#x5FEB;&#x8003;&#x5230;&#x60F3;&#x8981;&#x7684;&#x5206;&#x6570;&#x3002;&#x56E0;&#x4E3A; GT &#x5206;&#x6570;&#x7684;&#x5EF6;&#x540E;&#xFF0C;&#x5BFC;&#x81F4;&#x7533;&#x8BF7;&#x5168;&#x7A0B;&#x8FC7;&#x7A0B;&#x62D6;&#x6C93;&#x5C31;&#x5F88;&#x4E0D;&#x503C;&#x5F97;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x82F1;&#x8BED;&#x4E5F;&#x4E0D;&#x5389;&#x5BB3;&#xFF0C;&#x5B66;&#x4E60;&#x65E0;&#x6377;&#x5F84;&#x3002;&#x6BCF;&#x4E2A;&#x4EBA;&#x7684;&#x65B9;&#x6CD5;&#x4E5F;&#x4E0D;&#x540C;&#x3002;&#x5927;&#x591A;&#x6570;&#x770B;&#x5230;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x8BFB;&#x8005;&#x8BED;&#x8A00;&#x5206;&#x53EF;&#x80FD;&#x65E9;&#x5DF2;&#x62FF;&#x5230;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x4E0D;&#x6D6A;&#x8D39;&#x7BC7;&#x5E45;&#x91CD;&#x70B9;&#x5206;&#x6790;&#x8BED;&#x8A00;&#x5B66;&#x4E60;&#x65B9;&#x9762;&#x7684;&#x7ECF;&#x9A8C;&#x4E86;&#x3002;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x7FFB;&#x4E00;&#x7FFB;&#x7B14;&#x8005; 2019 &#x5E74;&#x548C; 2020 &#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x3002;</p>
<h3 id="4-%E8%BD%AF%E8%83%8C%E6%99%AF">4. &#x8F6F;&#x80CC;&#x666F;</h3>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_28.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x8F6F;&#x80CC;&#x666F;&#x5305;&#x542B;&#x7684;&#x5185;&#x5BB9;&#x6BD4;&#x8F83;&#x591A;&#xFF0C;&#x6691;&#x7814;&#xFF0C;&#x9876;&#x4F1A;&#x671F;&#x520A;&#x8BBA;&#x6587;&#xFF0C;&#x5B66;&#x79D1;&#x7ADE;&#x8D5B;(ACM&#xFF0C;CTF&#xFF0C;MCM/ICM &#x7B49;&#x7B49;)&#xFF0C;&#x4EA4;&#x6362;&#x751F;&#xFF0C;FLAAGTM &#x591A;&#x6BB5;&#x5B9E;&#x4E60;&#xFF0C;&#x5176;&#x4ED6;&#x5168;&#x7403;&#x5956;&#x9879;(Apple Scholarship &#x7B49;&#x7B49;)</p>
<blockquote>
<p>FLAAGTM = Facebook, LinkedIn, Amazon, Apple, Google, Twitter, Microsoft</p>
</blockquote>
<p>&#x5173;&#x4E8E;&#x8F6F;&#x80CC;&#x666F;&#x7684;&#x63D0;&#x5347;&#xFF0C;&#x662F;&#x516B;&#x4ED9;&#x8FC7;&#x6D77;&#xFF0C;&#x5404;&#x663E;&#x795E;&#x901A;&#x3002;&#x5B9E;&#x529B;&#x5F3A;&#x52B2;&#x7684;&#x7533;&#x8BF7;&#x8005;&#x662F;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#x9876;&#x5C16;&#xFF0C;&#x8F6F;&#x80CC;&#x666F;&#x4E5F;&#x62C9;&#x6EE1;&#xFF1A;&#x591A;&#x6B21;&#x9876;&#x5C16;&#x540D;&#x6821; MIT, Stanford, CMU, UCB &#x6691;&#x7814;&#xFF0C;&#x9876;&#x4F1A;&#x8BBA;&#x6587;&#x82E5;&#x5E72;&#x7BC7;&#xFF0C;&#x8D8A;&#x591A;&#x8D8A;&#x597D;&#x3002;&#x5B66;&#x79D1;&#x7ADE;&#x8D5B;&#x91D1;&#x724C;&#x5168;&#x90E8;&#x62FF;&#x6EE1;&#xFF0C;&#x9876;&#x5C16;&#x540D;&#x6821; Stanford&#xFF0C;MIT&#xFF0C;Harvard &#x4EA4;&#x6362;&#x751F;&#xFF0C;FLAAGTM &#x591A;&#x6BB5;&#x5B9E;&#x4E60;&#x7ECF;&#x5386;&#x3002;&#x7531;&#x4E8E;&#x6BCF;&#x4E2A;&#x4EBA;&#x7CBE;&#x529B;&#x6709;&#x9650;&#xFF0C;&#x80FD;&#x529B;&#x6709;&#x9650;&#xFF0C;&#x5C3D;&#x81EA;&#x5DF1;&#x6240;&#x80FD;&#x4E89;&#x53D6;&#x62FF;&#x5230;&#x5168;&#x4E16;&#x754C;&#x542B;&#x91D1;&#x91CF;&#x6700;&#x9AD8;&#x7684;&#x5956;&#x9879;&#x6216;&#x8005;&#x8363;&#x8A89;&#x5427;&#x3002;</p>
<p>&#x5173;&#x4E8E;&#x6691;&#x7814;&#xFF0C;&#x7B14;&#x8005;&#x60F3;&#x5355;&#x72EC;&#x8BF4;&#x660E;&#x4E00;&#x4E0B;&#x3002;&#x6691;&#x7814;&#x5C5E;&#x4E8E;&#x201C;&#x5947;&#x5175;&#x201D;&#xFF0C;&#x867D;&#x7136;&#x4E0D;&#x662F;&#x51B3;&#x5B9A;&#x6027;&#x56E0;&#x7D20;&#xFF0C;&#x4F46;&#x662F;&#x5E38;&#x5E38;&#x6709;&#x51FA;&#x5947;&#x5236;&#x80DC;&#x7684;&#x5947;&#x6548;&#x3002;&#x5728;&#x7B14;&#x8005;&#x770B;&#x6765;&#xFF0C;&#x6691;&#x7814;&#x7684;&#x4E3B;&#x8981;&#x76EE;&#x7684;&#x5E76;&#x975E;&#x662F;&#x7814;&#x7A76;&#x51FA;&#x6210;&#x679C;&#xFF0C;&#x66F4;&#x591A;&#x7684;&#x662F;&#x5411;&#x540D;&#x6821;&#x7684; Professor &#x5C55;&#x793A;&#x81EA;&#x5DF1;&#x7684;&#x8FC7;&#x7A0B;&#x3002;&#x5728;&#x8FD9;&#x4E00;&#x6279;&#x6691;&#x7814;&#x7684;&#x5B66;&#x751F;&#x4E2D;&#xFF0C;&#x5982;&#x4F55;&#x8BA9;&#x81EA;&#x5DF1;&#x8131;&#x9896;&#x800C;&#x51FA;&#xFF0C;&#x51FA;&#x7C7B;&#x62D4;&#x8403;&#xFF0C;&#x53EF;&#x80FD;&#x66F4;&#x201C;&#x5173;&#x952E;&#x201D;&#x3002;&#x5982;&#x679C;&#x4F60;&#x8DB3;&#x591F;&#x4F18;&#x79C0;&#xFF0C;&#x6691;&#x7814;&#x671F;&#x95F4;&#x53EF;&#x4EE5;&#x5B8C;&#x6210; PhD &#x7684;&#x5957;&#x78C1;&#xFF0C;&#x53EF;&#x4EE5;&#x4E89;&#x53D6;&#x62FF;&#x5230; Professor &#x7684; Strong Recommend &#x63A8;&#x8350;&#x4FE1;&#x3002;&#x6709;&#x4E86;&#x8FD9;&#x5C01;&#x63A8;&#x8350;&#x4FE1;&#xFF0C;&#x7B49;&#x79CB;&#x5B63;&#x7F51;&#x7533;&#x7CFB;&#x7EDF;&#x5F00;&#x653E;&#xFF0C;&#x7B2C;&#x4E00;&#x65F6;&#x95F4;&#x7533;&#x8BF7;&#x8BE5;&#x6821;&#xFF0C;&#x63A8;&#x8350;&#x4FE1;&#x8FD9;&#x4E00;&#x9879;&#x80FD;&#x62C9;&#x5F00;&#x540C;&#x7C7B;&#x7ADE;&#x4E89;&#x8005;&#x5F88;&#x5927;&#x5DEE;&#x8DDD;&#x3002;</p>
<p>&#x6700;&#x540E;&#x8BF7;&#x8BFB;&#x8005;&#x6CE8;&#x610F;&#xFF0C;&#x5982;&#x679C;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#x5DF2;&#x6210;&#x201C;&#x5B9A;&#x5C40;&#x201D;&#xFF0C;GPA &#x5237;&#x4E0D;&#x52A8;&#x4E86;&#xFF0C;GT &#x6210;&#x7EE9;&#x4E5F;&#x5230;&#x74F6;&#x9888;&#x4E86;&#xFF0C;&#x65E0;&#x6CD5;&#x7A81;&#x7834; 110+/330+&#xFF0C;&#x90A3;&#x4E48;&#x8BF7;&#x591A;&#x82B1;&#x70B9;&#x65F6;&#x95F4;&#x63D0;&#x5347;&#x8F6F;&#x80CC;&#x666F;&#x5427;&#x3002;Master &#x7533;&#x8BF7;&#x5E76;&#x975E;&#x53EA;&#x770B;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#xFF0C;&#x5F55;&#x53D6;&#x662F;&#x8BC4;&#x4EF7;&#x7EFC;&#x5408;&#x5B9E;&#x529B;&#x7684;&#x7ED3;&#x679C;&#x3002;&#x786C;&#x80CC;&#x666F;&#x65E2;&#x7136;&#x5B9A;&#x578B;&#x4E86;&#xFF0C;&#x90A3;&#x4E48;&#x8F6F;&#x80CC;&#x666F;&#x591A;&#x52AA;&#x529B;&#x52AA;&#x529B;&#x5427;~&#x7B14;&#x8005;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#x53EF;&#x8C13;&#x201C;&#x7A00;&#x70C2;&#x201D;&#xFF0C;&#x9760;&#x4E00;&#x4E9B;&#x9A6C;&#x9A6C;&#x864E;&#x864E;&#x7684;&#x5DE5;&#x4F5C;&#x7ECF;&#x5386;&#x62C9;&#x201C;&#x6EE1;&#x201D;&#x4E86;&#x8F6F;&#x80CC;&#x666F;&#xFF0C;&#x6700;&#x7EC8;&#x4E5F;&#x88AB; CMU &#x5F55;&#x53D6;&#x4E86;&#x3002;</p>
<h3 id="5-cv%E3%80%81%E6%96%87%E4%B9%A6%E4%B8%8E%E6%8E%A8%E8%8D%90%E4%BF%A1">5. CV&#x3001;&#x6587;&#x4E66;&#x4E0E;&#x63A8;&#x8350;&#x4FE1;</h3>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_29.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>CV &#x5982;&#x5B9E;&#x5199;&#x5373;&#x53EF;&#x3002;&#x7A81;&#x51FA;&#x81EA;&#x5DF1;&#x591A;&#x65B9;&#x9762;&#x7684;&#x5B9E;&#x529B;&#xFF0C;&#x5B66;&#x5386;&#xFF0C;&#x4EA4;&#x6362;&#x751F;&#xFF0C;&#x5B9E;&#x4E60;&#xFF0C;&#x6691;&#x7814;&#xFF0C;&#x9876;&#x4F1A;&#x8BBA;&#x6587;&#xFF0C;&#x7ADE;&#x8D5B;&#x5956;&#x9879;&#xFF0C;&#x7B49;&#x7B49;&#x8F6F;&#x80CC;&#x666F;&#x3002;</p>
<p>PS &#x6587;&#x4E66;&#x9700;&#x8981;&#x6839;&#x636E;&#x6BCF;&#x4E2A;&#x5B66;&#x6821;&#x7684;&#x8981;&#x6C42;&#x6765;&#x5199;&#x3002;&#x4E0D;&#x540C;&#x5B66;&#x6821;&#x4E0D;&#x540C;&#x9879;&#x76EE;&#xFF0C;&#x4E0D;&#x540C;&#x9879;&#x76EE;&#x4E0B;&#x8FD8;&#x5206;&#x4E0D;&#x540C; track&#xFF0C;&#x5982;&#x4F55;&#x6839;&#x636E;&#x81EA;&#x8EAB;&#x7684;&#x7279;&#x70B9;&#x53BB;&#x5207;&#x5408;&#x9879;&#x76EE;&#x7684;&#x8981;&#x6C42;&#xFF0C;&#x662F;&#x5199;&#x6587;&#x4E66;&#x6700;&#x9700;&#x8981;&#x8003;&#x8651;&#x7684;&#x95EE;&#x9898;&#x3002;&#x6587;&#x4E66;&#x4E2D;&#x4E00;&#x822C;&#x4F1A;&#x5199;&#x81EA;&#x5DF1;&#x7684;&#x4EAE;&#x70B9;&#x7ECF;&#x5386;&#xFF0C;why school&#xFF0C;why program&#x3002;&#x6587;&#x4E66;&#x4E2D; why school&#x90E8;&#x5206;&#x6700;&#x80FD;&#x8003;&#x9A8C;&#x5B66;&#x751F;&#x5BF9;&#x8FD9;&#x6240;&#x5B66;&#x6821;&#x662F;&#x5426;&#x4E86;&#x89E3;&#x3002;&#x8FD9;&#x6D89;&#x53CA;&#x7684;&#x662F;&#x65B9;&#x65B9;&#x9762;&#x9762;&#x7684;&#xFF0C;&#x4F8B;&#x5982;&#x662F;&#x5426;&#x4E86;&#x89E3;&#x6821;&#x56ED;&#x6587;&#x5316;&#xFF0C;&#x662F;&#x5426;&#x4E86;&#x89E3;&#x5404;&#x4E2A;&#x5BFC;&#x5E08;&#x7814;&#x7A76;&#x8BFE;&#x9898;&#x7684;&#x65B9;&#x5411;&#xFF0C;&#x662F;&#x5426;&#x4E86;&#x89E3;&#x54EA;&#x4E9B;&#x611F;&#x5174;&#x8DA3;&#x7684; lab &#x548C; research group&#xFF0C;&#x662F;&#x5426;&#x4E86;&#x89E3;&#x5B66;&#x6821;&#x5728;&#x5F53;&#x5730;&#x7684;&#x540D;&#x58F0;&#x4E0E;&#x793E;&#x4F1A;&#x4EF7;&#x503C;&#xFF0C;&#x7B49;&#x7B49;&#x3002;&#x8FD9;&#x4E9B;&#x6DF1;&#x5C42;&#x6B21;&#x7684;&#x5185;&#x5BB9;&#x6709;&#x4E9B;&#x5728;&#x5B66;&#x6821;&#x7684;&#x4E3B;&#x9875;&#x4E0A;&#xFF0C;&#x6709;&#x4E9B;&#x5728;&#x5B66;&#x6821;&#x7684;&#x4ECB;&#x7ECD;&#x89C6;&#x9891;&#x4E2D;&#xFF0C;&#x6709;&#x4E9B;&#x5728;&#x6821;&#x56ED;&#x91C7;&#x8BBF;&#x4E2D;&#x3002;&#x5982;&#x679C;&#x6709;&#x5FC3;&#x89C2;&#x770B;&#x6536;&#x96C6;&#x7684;&#x8BDD;&#xFF0C;&#x81EA;&#x5DF1;&#x4E5F;&#x80FD;&#x627E;&#x5230;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x8FD9;&#x90E8;&#x5206;&#x8FD8;&#x662F;&#x975E;&#x5E38;&#x975E;&#x5E38;&#x975E;&#x5E38;&#x82B1;&#x65F6;&#x95F4;&#x7684;&#x3002;&#x7B14;&#x8005;&#x5728;&#x4E86;&#x89E3;&#x5404;&#x4E2A;&#x5B66;&#x6821;&#xFF0C;&#x5404;&#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x5404;&#x4E2A;&#x5B66;&#x6821;&#x5185;&#x5404;&#x4E2A;&#x5BFC;&#x5E08;&#x7684;&#x7814;&#x7A76;&#x504F;&#x597D;&#xFF0C;&#x82B1;&#x4E86;&#x7279;&#x522B;&#x591A;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x524D;&#x524D;&#x540E;&#x540E;&#x52A0;&#x8D77;&#x6765;&#x603B;&#x5171;&#x6709; 2 &#x5468;&#x65F6;&#x95F4;&#x3002;</p>
<p>&#x90E8;&#x5206;&#x9879;&#x76EE;&#x9664;&#x4E86;&#x5199; PS &#x4EE5;&#x5916;&#xFF0C;&#x8FD8;&#x8981;&#x6C42; Video Essay / Video Interview&#xFF0C;&#x8FD8;&#x6709; Diversity Essay&#x3002;&#x8FD9;&#x4E9B;&#x90E8;&#x5206;&#x4E5F;&#x540C;&#x6837;&#x5F88;&#x91CD;&#x8981;&#x3002;&#x7B2C;&#x4E00;&#x6B21;&#x5F55; Video Essay &#x6BD4;&#x8F83;&#x8FF7;&#x832B;&#xFF0C;&#x4E0D;&#x77E5;&#x9053;&#x5F55;&#x54EA;&#x4E9B;&#x5185;&#x5BB9;&#x3002;&#x81EA;&#x5DF1;&#x8EAB;&#x4E0A;&#x5927;&#x90E8;&#x5206;&#x7684;&#x4EAE;&#x70B9;&#x5728; CV &#x548C; PS &#x4E2D;&#x5DF2;&#x7ECF;&#x4F53;&#x73B0;&#x4E86;&#x3002;Essay &#x4E2D;&#x53C8;&#x4E0D;&#x5141;&#x8BB8;&#x91CD;&#x590D;&#x3002;Diversity Essay &#x4E5F;&#x5F88;&#x5934;&#x75BC;&#xFF0C;Diversity &#x7B97;&#x7F8E;&#x56FD;&#x6587;&#x5316;&#x72EC;&#x6709;&#x57FA;&#x56E0;&#x3002;&#x4F60;&#x8BF4;&#x4F60;&#x5B66;&#x672F;&#x80FD;&#x529B;&#x5F3A;&#xFF0C;&#x4E0A;&#x5341;&#x7BC7;&#x9876;&#x4F1A;&#x5B66;&#x672F;&#x8BBA;&#x6587;&#xFF0C;&#x5F88;&#x72EC;&#x7279;&#xFF1B;GPA/TOEFL/GRE &#x5206;&#x6570;&#x5F88;&#x9AD8;&#xFF0C;&#x5F88;&#x72EC;&#x7279;&#x3002;&#x8FD9;&#x4E9B;&#x90FD;&#x4E0D;&#x662F; Diversity&#x3002;Diversity Essay &#x540C;&#x6837;&#x4E0D;&#x80FD;&#x91CD;&#x590D; CV &#x548C; PS &#x4E2D;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x5E76;&#x4E14;&#x8981;&#x6C42;&#x5199; 1000 words&#x3002;&#x8FD9;&#x90E8;&#x5206;&#x8981;&#x6839;&#x636E;&#x5B66;&#x6821;&#x7684;&#x201C;&#x57FA;&#x56E0;&#x201D;&#x6765;&#x5199;&#xFF0C;&#x6709;&#x7684;&#x5B66;&#x6821;&#x670D;&#x52A1;&#x793E;&#x4F1A;&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x8FC7;&#x53BB;&#x7ECF;&#x5386;&#x4E2D;&#x662F;&#x5426;&#x6709;&#x793E;&#x533A;&#x670D;&#x52A1;&#x76F8;&#x5173;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x5982;&#x679C;&#x6709;&#xFF0C;&#x53EF;&#x4EE5;&#x5199;&#x4E0A;&#x53BB;&#x3002;&#x6709;&#x7684;&#x5B66;&#x6821;&#x5F15;&#x9886;&#x5F53;&#x5730;&#x7684;&#x79D1;&#x6280;&#xFF0C;&#x90A3;&#x4E48;&#x4F60;&#x7684;&#x8FC7;&#x53BB;&#x662F;&#x5426;&#x5B58;&#x5728;&#x4F53;&#x73B0;&#x81EA;&#x8EAB; leadership &#x7684;&#x6848;&#x4F8B;&#xFF0C;&#x5982;&#x679C;&#x6709;&#xFF0C;&#x53EF;&#x4EE5;&#x5199;&#x4E0A;&#x53BB;&#x3002;&#x603B;&#x7684;&#x6765;&#x8BF4;&#xFF0C;Diversity Essay &#x8FD8;&#x662F;&#x6BD4;&#x8F83;&#x96BE;&#x5199;&#x3002;</p>
<p>&#x6700;&#x540E;&#x662F;&#x63A8;&#x8350;&#x4FE1;&#xFF0C;&#x63A8;&#x8350;&#x4FE1;&#x57FA;&#x672C;&#x8981;&#x6C42; 3 &#x5C01;&#x3002;&#x6BD4;&#x8F83;&#x5408;&#x9002;&#x7684;&#x7EC4;&#x5408;&#x662F; 2 &#x5C01;&#x5B66;&#x672F;&#x6559;&#x6388;&#xFF0C;1 &#x5C01;&#x5B9E;&#x4E60; leader&#x3002;3 &#x5C01;&#x63A8;&#x8350;&#x4FE1;&#x5C3D;&#x91CF;&#x90FD;&#x8981;&#x62FF;&#x5230;&#x5F3A;&#x63A8;&#x4FE1;&#x3002;&#x5982;&#x679C;&#x6709;&#x6691;&#x7814;&#xFF0C;&#x5C3D;&#x91CF;&#x627E;&#x90A3;&#x6240;&#x5B66;&#x6821;&#x7684;&#x6559;&#x6388;&#x5E2E;&#x4F60;&#x5199;&#x63A8;&#x8350;&#x4FE1;&#xFF0C;&#x7533;&#x8BF7;&#x8FD9;&#x6240;&#x5B66;&#x6821;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD9;&#x5C01;&#x63A8;&#x8350;&#x4FE1;&#x4F1A;&#x5360;&#x4F18;&#x52BF;&#x3002;&#x5B66;&#x672F;&#x6559;&#x6388;&#x5C3D;&#x91CF;&#x9009;&#x62E9;&#x5B66;&#x672F;&#x8BBA;&#x6587;&#x5F71;&#x54CD;&#x529B;&#x5F88;&#x5927;&#x7684;&#x8001;&#x5E08;&#xFF0C;&#x5982;&#x679C;&#x6821;&#x5185;&#x6709;&#x548C;&#x4F60;&#x60F3;&#x8981;&#x7533;&#x8BF7;&#x5B66;&#x6821;&#x7684;&#x6559;&#x6388;&#x8054;&#x5408;&#x7814;&#x7A76;&#x53D1;&#x6587;&#x7684;&#x6559;&#x6388;&#xFF0C;&#x4F18;&#x5148;&#x9009;&#x8FD9;&#x4E2A;&#x6559;&#x6388;&#x5E2E;&#x5FD9;&#x5199;&#x63A8;&#x8350;&#x4FE1;&#x3002;&#x5B9E;&#x4E60;/&#x5DE5;&#x4F5C; &#x7684; mentor/leader &#x63A8;&#x8350;&#x4FE1;&#x540C;&#x6837;&#x7684;&#x9053;&#x7406;&#xFF0C;&#x4F18;&#x5148;&#x9009;&#x62E9;&#x6D77;&#x5916;&#x77E5;&#x540D;&#x7684;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#xFF0C;&#x5C3D;&#x91CF;&#x9009;&#x56FD;&#x5185;&#x77E5;&#x540D;&#x7684;&#x5927;&#x5382;&#x3002;</p>
<p><strong>&#x7533;&#x8BF7;&#x5B66;&#x6821;&#x7684;&#x6559;&#x6388;&#x5F3A;&#x63A8; &gt; &#x4E0E;&#x7533;&#x8BF7;&#x5B66;&#x6821;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x6216;&#x8005;&#x6559;&#x6388;&#x6709;&#x5408;&#x4F5C;&#x7684;&#x6559;&#x6388;&#x5F3A;&#x63A8; &gt; &#x6D77;&#x5916;&#x5B66;&#x672F;&#x754C;&#x77E5;&#x540D;&#x6559;&#x6388; &gt; &#x6D77;&#x5916;&#x5DE5;&#x4E1A;&#x754C;&#x77E5;&#x540D; leader &gt; &#x56FD;&#x5185;&#x5B66;&#x672F;&#x754C;&#x77E5;&#x540D;&#x6559;&#x6388; &gt; &#x56FD;&#x5185;&#x5DE5;&#x4E1A;&#x754C;&#x77E5;&#x540D; leader &gt; &#x5176;&#x4ED6;</strong></p>
<p>&#x63A8;&#x8350;&#x4FE1;&#x8FD9;&#x4E00;&#x5757;&#x5BF9;&#x4E8E;&#x9646;&#x672C;&#x7684;&#x5B66;&#x751F;&#x6765;&#x8BF4;&#x7B97;&#x201C;&#x4F18;&#x52BF;&#x201D;&#xFF0C;&#x63D0;&#x524D;&#x548C;&#x5173;&#x7CFB;&#x597D;&#x7684;&#x6559;&#x6388;&#x6253;&#x597D;&#x62DB;&#x547C;&#xFF0C;&#x7ED9;&#x7684;&#x63A8;&#x8350;&#x4FE1;&#x90FD;&#x662F;&#x5F3A;&#x63A8;&#x3002;&#x5BF9;&#x4E8E;&#x6D77;&#x672C;&#x7684;&#x5B66;&#x751F;&#x6765;&#x8BF4;&#xFF0C;&#x8FD9;&#x90E8;&#x5206;&#x6709;&#x5751;&#xFF01;&#x6D77;&#x5916;&#x4E0D;&#x5C11;&#x6559;&#x6388;&#x5634;&#x5DF4;&#x4E0A;&#x8BF4;&#x5F3A;&#x70C8;&#x63A8;&#x8350;&#xFF0C;&#x6709;&#x4E9B;&#x662F;&#x5BA2;&#x5957;&#x8BDD;&#xFF0C;&#x6700;&#x7EC8;&#x7ED9;&#x7684;&#x63A8;&#x8350;&#x4FE1;&#x53EF;&#x80FD;&#x662F;&#x5E73;&#x63A8;&#x751A;&#x81F3;&#x662F;&#x6BD2;&#x63A8;&#x3002;&#x6D77;&#x5916;&#x5F88;&#x591A;&#x6559;&#x6388;&#x6BD4;&#x8F83;&#x803F;&#x76F4;&#xFF0C;&#x6709;&#x5565;&#x5199;&#x5565;&#x3002;&#x5982;&#x679C;&#x628A;&#x4F60;&#x7F3A;&#x70B9;&#x66DD;&#x5149;&#x7684;&#x6BD4;&#x8F83;&#x591A;&#xFF0C;&#x53EF;&#x80FD;&#x5C31;&#x662F;&#x4E00;&#x5C01;&#x6BD2;&#x63A8;&#x4E86;&#x3002;&#x5F53;&#x7136;&#x5927;&#x90E8;&#x5206;&#x6559;&#x6388;&#x90FD;&#x633A;&#x597D;&#xFF0C;&#x7B14;&#x8005;&#x8FD9;&#x91CC;&#x53EA;&#x662F;&#x60F3;&#x8BA9;&#x5927;&#x5BB6;&#x7559;&#x4E2A;&#x5FC3;&#x773C;&#xFF0C;&#x5824;&#x9632;&#x6BD2;&#x63A8;&#x3002;</p>
<p>&#x9646;&#x672C;&#x7684;&#x5B66;&#x751F;&#x8FD8;&#x6709;&#x4E00;&#x70B9;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x201C;&#x9632;&#x4F5C;&#x5F0A;&#x201D;&#x3002;&#x8FD9;&#x4E2A;&#x6848;&#x4F8B;&#x662F;&#x7B14;&#x8005;&#x5728;&#x5730;&#x91CC;&#x770B;&#x5230;&#x7684;&#x3002;&#x4ECA;&#x5E74;&#x5F88;&#x591A;&#x5B66;&#x6821;&#x9488;&#x5BF9;&#x63A8;&#x8350;&#x4FE1;&#x8FD9;&#x5757;&#x589E;&#x52A0;&#x4E86;&#x53CD;&#x6B3A;&#x8BC8;&#x76D1;&#x6D4B;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x7533;&#x8BF7;&#x8005;&#x5305;&#x529E; 3 &#x540D;&#x63A8;&#x8350;&#x4EBA;&#xFF0C;&#x66FF;&#x4ED6;&#x4EEC;&#x5E2E;&#x81EA;&#x5DF1;&#x5199;&#x63A8;&#x8350;&#x4FE1;&#x3002;&#x63A8;&#x8350;&#x4FE1;&#x7684;&#x7F51;&#x9875;&#x4E0A;&#x4F1A;&#x8BB0;&#x5F55;&#x6B64;&#x6B21;&#x7684; IP&#xFF0C;&#x4E0A;&#x4F20;&#x6587;&#x4EF6;&#x7684;&#x672C;&#x5730;&#x8DEF;&#x5F84;&#x751A;&#x81F3;&#x4E3B;&#x673A;&#x540D;&#xFF0C;&#x63D0;&#x4EA4;&#x65F6;&#x95F4;&#x3002;&#x6839;&#x636E;&#x8FD9; 3 &#x8005;&#x53EF;&#x4EE5;&#x5224;&#x5B9A;&#x63A8;&#x8350;&#x4FE1;&#x662F;&#x5426;&#x662F;&#x540C;&#x4E00;&#x53F0;&#x673A;&#x5668;&#x4E0A;&#x4F20;&#x3002;&#x5982;&#x679C; 3 &#x5C01;&#x63A8;&#x8350;&#x4FE1;&#x5168;&#x90E8;&#x90FD;&#x7531;&#x4E00;&#x53F0;&#x673A;&#x5668;&#x4E0A;&#x4F20;&#x5B8C;&#x6210;&#xFF0C;&#x751A;&#x81F3;&#x662F;&#x540C;&#x4E00;&#x65F6;&#x523B;&#x6216;&#x8005;&#x5F88;&#x77ED;&#x65F6;&#x95F4;&#x5185;&#x4E0A;&#x4F20;&#x5B8C;&#x6210;&#xFF0C;&#x90A3;&#x4E48;&#x53EF;&#x4EE5;&#x65AD;&#x5B9A;&#x8FD9;&#x540D;&#x7533;&#x8BF7;&#x8005;&#x81EA;&#x5DF1;&#x5305;&#x529E;&#x4E86;&#x6240;&#x6709;&#x63A8;&#x8350;&#x4FE1;&#x3002;&#x6B63;&#x5E38;&#x7684;&#x8BDD;&#x6839;&#x672C;&#x4E0D;&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#xFF0C;&#x6B63;&#x5E38;&#x6D41;&#x7A0B;&#x5E94;&#x8BE5;&#x662F; 3 &#x53F0;&#x673A;&#x5668;&#x4E3B;&#x673A;&#x540D;&#x90FD;&#x4E0D;&#x540C;&#xFF0C;&#x4E0A;&#x4F20;&#x65F6;&#x95F4;&#x4E4B;&#x95F4;&#x76F8;&#x9694;&#x65E0;&#x89C4;&#x5F8B;&#xFF0C;IP &#x4E5F;&#x4E0D;&#x540C;&#x3002;&#x9664;&#x4E86;&#x8FD9;&#x79CD;&#x4E0A;&#x4F20;&#x65F6;&#x95F4;&#x548C;&#x4E0A;&#x4F20;&#x673A;&#x5668;&#x6709;&#x201C;&#x9632;&#x4F5C;&#x5F0A;&#x201D;&#x68C0;&#x67E5;&#xFF0C;pdf &#x548C; world &#x8F6F;&#x4EF6;&#x4E5F;&#x4F1A;&#x6709;&#x68C0;&#x67E5;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x7533;&#x8BF7;&#x8005;&#x5728;&#x81EA;&#x5DF1;&#x7684;&#x7535;&#x8111;&#x4E0A;&#x4E00;&#x624B;&#x5305;&#x529E;&#x4E86; 3 &#x540D;&#x63A8;&#x8350;&#x4EBA;&#x7684;&#x63A8;&#x8350;&#x4FE1;&#xFF0C;&#x5728;&#x81EA;&#x5DF1;&#x7535;&#x8111;&#x4E0A;&#x7528; world &#x6216;&#x8005; pdf &#x7F16;&#x5199;&#x7684;&#x3002;&#x5728; mac &#x7535;&#x8111;&#x6216;&#x8005; windows &#x7535;&#x8111;&#x4E0A;&#x4F7F;&#x7528; Microsoft office world 365&#xFF0C;&#x9700;&#x8981;&#x6FC0;&#x6D3B;&#x3002;&#x4E00;&#x65E6;&#x6FC0;&#x6D3B;&#x767B;&#x5F55;&#x4E86;&#x90AE;&#x7BB1;&#x8D26;&#x53F7;&#x4EE5;&#x540E;&#xFF0C;&#x7F16;&#x8F91;&#x8FC7;&#x7684; world &#x4F1A;&#x5728;&#x6587;&#x4EF6;&#x4FE1;&#x606F;&#x91CC;&#x9762;&#x5199;&#x5165;&#x201C;&#x6765;&#x6E90;&#x201D;&#xFF0C;&#x201C;&#x4F5C;&#x8005;&#x201D;&#xFF0C;&#x8FD9;&#x4E24;&#x4E2A;&#x4FE1;&#x606F;&#x3002;&#x5982;&#x679C;&#x5B66;&#x6821;&#x68C0;&#x67E5;&#x4E0A;&#x4F20; world &#x6216;&#x8005; pdf &#x7684;&#x6587;&#x4EF6;&#x4FE1;&#x606F;&#xFF0C;&#x53D1;&#x73B0;&#x4E09;&#x4E2A;&#x63A8;&#x8350;&#x4FE1;&#x6765;&#x81EA;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#xFF0C;&#x57FA;&#x672C;&#x53EF;&#x4EE5;&#x65AD;&#x5B9A;&#x662F;&#x540C;&#x4E00;&#x4E2A;&#x4EBA;&#x5199;&#x7684;&#x3002;&#x6B63;&#x5E38;&#x60C5;&#x51B5;&#x4E09;&#x4E2A;&#x63A8;&#x8350;&#x4FE1;&#x4E0D;&#x540C;&#x7535;&#x8111;&#x4E0A;&#x751F;&#x6210;&#x7684; world &#x548C; pdf &#x6587;&#x4EF6;&#x4FE1;&#x606F;&#x91CC;&#x9762;&#x7684; &#x201C;&#x4F5C;&#x8005;&#x201D; &#x5E94;&#x8BE5;&#x662F;&#x4E0D;&#x4E00;&#x6837;&#x7684;&#x3002;</p>
<p>&#x7B14;&#x8005;&#x4ECA;&#x5E74;&#x7533;&#x8BF7;&#x4E86; UoT&#xFF0C;&#x5728;&#x9762;&#x8BD5;&#x73AF;&#x8282;&#xFF0C;&#x6709;&#x4E13;&#x95E8;&#x9488;&#x5BF9;&#x63A8;&#x8350;&#x4FE1;&#x7684;&#x95EE;&#x7B54;&#x3002;&#x6709;&#x540C;&#x5B66;&#x88AB;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x95EE;&#x5230;&#xFF1A;&#x201C;&#x4ECE;&#x7CFB;&#x7EDF;&#x4E0A;&#x770B;&#xFF0C;&#x4F60;&#x7684;&#x8FD9; 3 &#x5C01;&#x63A8;&#x8350;&#x4FE1;&#x90FD;&#x5728;&#x540C;&#x4E00;&#x53F0;&#x7535;&#x8111;&#x4E0A;&#x4E0A;&#x4F20;&#x7684;&#xFF0C;&#x8BF7;&#x4F60;&#x89E3;&#x91CA;&#x4E3A;&#x4EC0;&#x4E48;&#xFF1F;&#x201D;&#x3002;&#x5F88;&#x660E;&#x663E;&#xFF0C;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x6000;&#x7591;&#x63A8;&#x8350;&#x4FE1;&#x7684;&#x771F;&#x5B9E;&#x6027;&#xFF0C;&#x6000;&#x7591;&#x53EF;&#x80FD;&#x662F;&#x8BE5;&#x5B66;&#x751F;&#x4E00;&#x624B;&#x5305;&#x529E;&#x7684;&#x3002;&#x9762;&#x8BD5;&#x73B0;&#x573A;&#x88AB;&#x95EE;&#x5230;&#x8FD9;&#x7C7B;&#x95EE;&#x9898;&#x7279;&#x522B;&#x7D27;&#x5F20;&#xFF0C;&#x6C14;&#x6C1B;&#x4E5F;&#x7279;&#x522B;&#x5C34;&#x5C2C;&#x3002;&#x7ECF;&#x5730;&#x91CC;&#x540C;&#x5B66;&#x81EA;&#x8FF0;&#xFF0C;&#x4ED6;&#x56DE;&#x7B54;&#x8BF4;&#x201C;&#x56E0;&#x4E3A;&#x8001;&#x5E08;&#x5F88;&#x5FD9;&#xFF0C;&#x6211;&#x62B1;&#x7740;&#x7535;&#x8111;&#x53BB;&#x529E;&#x516C;&#x5BA4;&#x627E;&#x4ED6;&#xFF0C;&#x50AC;&#x7740;&#x4ED6;&#x5728;&#x6211;&#x7535;&#x8111;&#x4E0A;&#x5B8C;&#x6210;&#x7684;&#x201D;&#x3002;&#x8FD9;&#x4E2A;&#x7B54;&#x6848;&#x770B;&#x4E0A;&#x53BB;&#x5C31;&#x4E0D;&#x592A;&#x597D;&#x3002;&#x7B14;&#x8005;&#x5C06;&#x8FD9;&#x4E2A;&#x770B;&#x5230;&#x7684;&#x771F;&#x5B9E;&#x6848;&#x4F8B;&#x5206;&#x4EAB;&#x7ED9;&#x5927;&#x5BB6;&#xFF0C;&#x8BFB;&#x8005;&#x770B;&#x5B8C;&#xFF0C;&#x4E00;&#x5B9A;&#x8981;&#x8C28;&#x8BB0;&#x7533;&#x8BF7;&#x6750;&#x6599;&#x7684;&#x771F;&#x5B9E;&#x6027;&#xFF0C;&#x5230;&#x5E95;&#x8BE5;&#x600E;&#x4E48;&#x505A;&#xFF0C;&#x4F60;&#x4E5F;&#x5E94;&#x8BE5;&#x660E;&#x767D;&#x4E86;&#x3002;</p>
<h2 id="%E4%B8%89-%E7%94%B3%E8%AF%B7%E6%B5%81%E7%A8%8B">&#x4E09;. &#x7533;&#x8BF7;&#x6D41;&#x7A0B;</h2>
<h3 id="1-%E9%80%89%E6%A0%A1%E4%B8%8E%E9%80%89%E9%A1%B9%E7%9B%AE">1. &#x9009;&#x6821;&#x4E0E;&#x9009;&#x9879;&#x76EE;</h3>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_33.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x4E00;&#x822C;&#x7F8E;&#x56FD; TOP50 &#x7684; CS &#x9662;&#x6821;&#xFF0C;&#x4E09;&#x7EF4;&#x4E2D; TOEFL &#x7EBF;&#x662F; 100 &#x5DE6;&#x53F3;&#xFF0C;GRE &#x7EBF;&#x662F; 320-325 &#x5DE6;&#x53F3;&#xFF0C;GPA 3.5+&#x3002;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#x51B3;&#x5B9A;&#x4E86;&#x9009;&#x6821; Level&#xFF0C;&#x6210;&#x7EE9;&#x8D8A;&#x9AD8;&#x8D8A;&#x597D;&#x3002;&#x7B14;&#x8005;&#x6210;&#x7EE9;&#x5F88;&#x4E00;&#x822C;&#xFF0C;&#x53C8;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x68A6;&#x6821;&#xFF0C;&#x9009;&#x6821;&#x8303;&#x56F4;&#x5F88;&#x5927;&#xFF0C;&#x4ECE; TOP 1 - TOP 70 &#x90FD;&#x9009;&#x4E86;&#x3002;&#x5206;&#x4E86; 4 &#x4E2A;&#x6863;&#xFF0C;&#x5F69;&#x7968;(TOP 10)&#xFF0C;&#x51B2;&#x523A;(TOP 10-20)&#xFF0C;&#x4E3B;&#x7533;(TOP 30 &#x5DE6;&#x53F3;)&#xFF0C;&#x4FDD;&#x5E95;(TOP 40-70)&#x3002;&#x5730;&#x91CC;&#x6709;&#x4EBA;&#x628A;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x96BE;&#x5EA6;&#x6392;&#x4E86;&#x4E00;&#x4E2A;&#x5E8F;&#xFF1A;</p>
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">Program</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">tier 0</td>
<td style="text-align:center">MSCS@<strong>Standford</strong>, MSCS@<strong>MIT</strong>, MSCS@<strong>CMU</strong>, MSCS@<strong>UCB</strong>, MSCS@<strong>Princeton</strong></td>
</tr>
<tr>
<td style="text-align:center">tier 1</td>
<td style="text-align:center">Meng@<strong>UCB</strong>, MSCS@<strong>UCLA</strong>, MSCS@<strong>UT Austin</strong>, Meng@<strong>Cornell Tech</strong>, MSCS@<strong>Wisconsin Madison</strong>, MSCS@<strong>Harvard</strong></td>
</tr>
<tr>
<td style="text-align:center">tier 1.5</td>
<td style="text-align:center">MSCS@<strong>UIUC</strong>, MSCS@<strong>GaTech</strong>, MSCS@<strong>UPenn</strong>, MSCS@<strong>UM Ann Arbor</strong></td>
</tr>
<tr>
<td style="text-align:center">tier 2</td>
<td style="text-align:center">MSCS@<strong>Columbia</strong>, MSCS@<strong>UCSD</strong>, MSCSE(COC)@<strong>GaTech</strong>, MSCS@<strong>Brown</strong>, MSCS@<strong>UMich</strong>, MSCS@<strong>Duke</strong>, MSCS@<strong>Dartmouth</strong>, MSCS@<strong>Yale</strong>, MSCS@<strong>Purdue</strong>, MSCS@<strong>Washington</strong></td>
</tr>
<tr>
<td style="text-align:center">tier 3</td>
<td style="text-align:center">MCS@<strong>Rice</strong>, MSCS28@<strong>USC</strong>, MSCS@<strong>NYU</strong>, MSCS@<strong>NWU</strong>, MSCS@<strong>UCD</strong>, MCS@<strong>UCI</strong>, MSCS@<strong>JHU</strong>, MPCS@<strong>UChicago</strong>, MSCS@<strong>Virginia</strong>, MSCS@<strong>UCSB</strong>, MSCS@<strong>Stony Brook</strong>, MSCS@<strong>Virginia Tech</strong></td>
</tr>
</tbody>
</table>
<p>tier 0 &#x662F;&#x6700;&#x96BE;&#x7533;&#x8BF7;&#x7684;&#x3002;&#x5317;&#x7F8E; 4 &#x5927; CS &#x5F3A;&#x6821;&#xFF0C;CMU&#xFF0C;MIT&#xFF0C;Stanford&#xFF0C;UC. Berkeley &#x5B9E;&#x529B;&#x662F;&#x6700;&#x9876;&#x7EA7;&#x7684;&#xFF0C;MSCS &#x771F;&#x7684;&#x5F88;&#x96BE;&#x7533;&#x8BF7;&#x3002;Princeton &#x4E3A;&#x4F55;&#x4E0E;&#x56DB;&#x5927;&#x540C;&#x5728; tier 0 &#x91CC;&#xFF1F;&#x56E0;&#x4E3A;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x5BF9;&#x53E3;&#x8BED;&#x8981;&#x6C42;&#x5F88;&#x9AD8;&#xFF0C;&#x53E3;&#x8BED; 25- &#x57FA;&#x672C;&#x90FD;&#x62D2;&#x4E86;&#x3002;&#x5B66;&#x672F;&#x80CC;&#x666F;&#x8981;&#x6C42;&#x4E5F;&#x5F88;&#x9AD8;&#xFF0C;&#x636E;&#x5730;&#x91CC;&#x7EDF;&#x8BA1;&#xFF0C;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x8FD1; 2 &#x5E74;&#x9646;&#x672C;&#x6CA1;&#x6709;&#x51E0;&#x4E2A;&#x4EBA;&#x88AB;&#x5F55;&#x53D6;&#x3002;</p>
<p>tier 0-3 &#x6DB5;&#x76D6;&#x4E86;&#x7F8E;&#x56FD; CS Master TOP40 &#x7684;&#x5B66;&#x6821;&#x3002;&#x4ECE;&#x7B14;&#x8005;&#x5F55;&#x53D6;&#x7ED3;&#x679C;&#x6765;&#x770B;&#xFF0C;&#x7B14;&#x8005;&#x7684;&#x6C34;&#x5E73;&#x53EA;&#x591F; tier3 &#x548C;&#x4E00;&#x4E9B;&#x4FDD;&#x5E95;&#x6821;&#x3002;&#x7B14;&#x8005;&#x4ECA;&#x5E74;&#x4E70;&#x7684; 3 &#x5F20;&#x68A6;&#x5E7B;&#x5F69;&#x7968;&#x662F;&#xFF0C;MSCS@<strong>CMU</strong>&#xFF0C;MCDS@<strong>CMU</strong>&#xFF0C;MSCS@<strong>Gatech</strong>&#xFF0C;&#x90FD;&#x88AB;&#x62D2;&#x4E86;&#x3002;&#x8FD9;&#x4E2A;&#x5929;&#x68AF;&#x5F80;&#x4E0A;&#x722C;&#x786E;&#x5B9E;&#x4E0D;&#x5BB9;&#x6613;&#xFF0C;&#x6BCF;&#x722C;&#x4E00;&#x5C42;&#x90FD;&#x4E0D;&#x5BB9;&#x6613;&#x3002;&#x5927;&#x5BB6;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x81EA;&#x8EAB;&#x7684;&#x5B9E;&#x529B;&#x5F80;&#x4E0A;&#x722C;&#x3002;</p>
<p>&#x9488;&#x5BF9; EE&#xFF0C;ECE&#xFF0C;&#x6587;&#x79D1;&#x4E13;&#x4E1A;&#x8F6C; CS &#x7684;&#x540C;&#x5B66;&#xFF0C;&#x4E00;&#x5B9A;&#x8981;&#x91CD;&#x70B9;&#x8003;&#x8651;&#x8F6C;&#x4E13;&#x4E1A;&#x53CB;&#x597D;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x4F8B;&#x5982; MPCS@<strong>UChicago</strong>, CS Align@<strong>NEU</strong>, CS37@<strong>USC</strong>&#x3002;&#x8FD9;&#x4E9B;&#x9879;&#x76EE;&#x662F;&#x4E13;&#x95E8;&#x4E3A;&#x8F6C;&#x4E13;&#x4E1A;&#x540C;&#x5B66;&#x5F00;&#x8BBE;&#x7684;&#x3002;</p>
<p>&#x5173;&#x4E8E;&#x62FF; 2 &#x4E2A; CS Master &#x5B66;&#x4F4D;&#x7684;&#x95EE;&#x9898;&#x3002;&#x5982;&#x679C;&#x4F60;&#x5DF2;&#x7ECF;&#x62FF;&#x5230;&#x4E86;&#x4E00;&#x4E2A; CS Master&#xFF0C;&#x518D;&#x6B21;&#x7533;&#x8BF7; CS Master&#xFF0C;&#x4F1A;&#x9047;&#x5230;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x9700;&#x8981;&#x4F60;&#x89E3;&#x91CA;&#x4E3A;&#x4F55;&#x8FD8;&#x8981;&#x62FF;&#x4E00;&#x4E2A; Master &#x5B66;&#x4F4D;&#x3002;&#x76EE;&#x524D;&#x7B14;&#x8005;&#x5728; LinkedIn &#x4E0A;&#x4E5F;&#x6CA1;&#x6709;&#x89C1;&#x8FC7;&#x62FF;&#x4E86; 2 &#x4E2A; CS Master &#x7684;&#x5927;&#x4F6C;&#x3002;&#x7B14;&#x8005;&#x4E0D;&#x8D1F;&#x8D23;&#x4EFB;&#x7684;&#x63E3;&#x6D4B;&#x4E00;&#x4E0B;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x7684;&#x5FC3;&#x7406;&#xFF1A;&#x53EF;&#x80FD;&#x4F1A;&#x4F18;&#x5148;&#x628A;&#x673A;&#x4F1A;&#x7559;&#x7ED9;&#x6CA1;&#x6709; CS Master &#x7684;&#x7533;&#x8BF7;&#x8005;&#x3002;</p>
<p>&#x81F3;&#x4E8E;&#x62FF;&#x591A;&#x4E2A; Master &#x5B66;&#x4F4D;&#x7684;&#x95EE;&#x9898;&#x4E0E;&#x672C;&#x6587;&#x65E0;&#x5173;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x4E5F;&#x53EF;&#x4EE5;&#x7B80;&#x5355;&#x63D0;&#x4E00;&#x63D0;&#x3002;&#x901A;&#x5E38;&#x8BFB;&#x5B8C; CS Master &#x4EE5;&#x540E;&#xFF0C;OPT 3 &#x5E74;&#x4F1A;&#x62BD;&#x7B7E; H1B&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x62BD;&#x4E2D;&#x5462;&#xFF1F;&#x53C8;&#x60F3;&#x7559;&#x5728;&#x7F8E;&#x56FD;&#xFF0C;&#x600E;&#x4E48;&#x529E;&#x5462;&#xFF1F;&#x7EE7;&#x7EED;&#x518D;&#x8BFB;&#x4E00;&#x4E2A; Master &#x6216;&#x8005;&#x7533; PhD&#x3002;&#x5982;&#x679C; PhD &#x7533;&#x8BF7;&#x4E0D;&#x5230;&#xFF0C;&#x5C31;&#x7EE7;&#x7EED;&#x8BFB;&#x4E00;&#x4E2A; Master&#x3002;&#x901A;&#x5E38;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x548C;&#x4E13;&#x4E1A;&#x76F8;&#x5173;&#x7684;&#xFF0C;&#x6BD4;&#x5982; CS &#x53EF;&#x4EE5;&#x9009;&#x62E9; DS&#x3002;&#x4E5F;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x548C;&#x4E13;&#x4E1A;&#x4E0D;&#x76F8;&#x5173;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x518D;&#x8BFB;&#x4E00;&#x4E2A; Music&#xFF0C;Laws&#x3002;&#x8FD8;&#x6709;&#x4E00;&#x7C7B; Master &#x51E0;&#x4E4E;&#x662F;&#x82B1;&#x94B1;&#x4E70; CPT&#x3002;&#x8FD9;&#x7C7B; Master &#x5165;&#x5B66;&#x5C31;&#x6709; CPT &#x53EF;&#x4EE5;&#x7528;&#xFF0C;&#x4E5F;&#x4FD7;&#x79F0; &#x201C;day 1 CPT&#x201D;&#xFF0C;&#x5165;&#x5B66;&#x5373;&#x53EF;&#x5B9E;&#x4E60;&#x3002;&#x5B9E;&#x4E60;&#x671F;&#x95F4;&#x5C31;&#x53EF;&#x4EE5;&#x62BD; H1B&#x3002;&#x6BCF;&#x5468;&#x5230;&#x6821;&#x51E0;&#x6B21;&#x5373;&#x53EF;&#x3002;&#x53CD;&#x6B63;&#x4F60;&#x6709;&#x94B1;&#xFF0C;&#x8BA9;&#x4F60;&#x82DF;&#x5728;&#x7F8E;&#x56FD;&#x7684;&#x65B9;&#x5F0F;&#x8FD8;&#x633A;&#x591A;&#x7684;&#x3002;&#x9898;&#x5916;&#x8BDD;&#x5230;&#x6B64;&#x4E3A;&#x6B62;&#xFF0C;&#x8A00;&#x5F52;&#x6B63;&#x4F20;&#x3002;</p>
<h3 id="2-%E7%BD%91%E7%94%B3">2. &#x7F51;&#x7533;</h3>
<p>&#x586B;&#x597D;&#x7F51;&#x7533;&#x6750;&#x6599;&#x4EE5;&#x540E;&#xFF0C;&#x4E00;&#x5B9A;&#x8BF7;&#x8BA4;&#x771F;&#x68C0;&#x67E5;&#x6BCF;&#x4E2A; section&#xFF0C;&#x907F;&#x514D;&#x51FA;&#x73B0;&#x4F4E;&#x7EA7;&#x9519;&#x8BEF;&#x3002;&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x7684; PS &#x8981;&#x6C42;&#x4E0D;&#x5728;&#x9879;&#x76EE;&#x4E3B;&#x9875;&#x91CC;&#xFF0C;&#x5728;&#x7F51;&#x7533;&#x7CFB;&#x7EDF;&#x91CC;&#x3002;&#x6240;&#x4EE5;&#x5C3D;&#x5FEB;&#x6CE8;&#x518C;&#x597D;&#x8D26;&#x53F7;&#xFF0C;&#x770B;&#x597D;&#x4ED6;&#x4EEC;&#x7684;&#x8981;&#x6C42;(&#x6BD4;&#x5982;&#x5B57;&#x4F53;&#x5927;&#x5C0F;&#xFF0C;&#x884C;&#x95F4;&#x8DDD;&#xFF0C;&#x5B57;&#x6570;&#x7B49;&#x7B49;)&#xFF0C;&#x7ED9;&#x81EA;&#x5DF1;&#x5408;&#x7406;&#x5B89;&#x6392;&#x65F6;&#x95F4;&#x3002;</p>
<p>&#x8FD9;&#x4E2A;&#x9636;&#x6BB5;&#x6BD4;&#x8F83;&#x5173;&#x952E;&#x3002;&#x4E00;&#x5B9A;&#x8981;&#x5B89;&#x6392;&#x597D; DDL &#x548C;&#x6295;&#x9012;&#x7B56;&#x7565;&#x3002;&#x6BCF;&#x4E2A;&#x5B66;&#x6821;&#x7684;&#x6295;&#x9012;&#x7A97;&#x53E3;&#x4E0D;&#x540C;&#xFF0C;&#x6709;&#x7684;&#x662F; rolling &#x7684;&#xFF0C;&#x6709;&#x7684;&#x662F; 2 &#x8F6E;&#x3002;&#x7F51;&#x7533;&#x6295;&#x9012;&#x7B56;&#x7565;&#x5341;&#x5206;&#x5F71;&#x54CD;&#x6700;&#x7EC8;&#x7ED3;&#x679C;&#xFF01;&#x5B66;&#x6821;&#x7B2C;&#x4E00;&#x8F6E;&#x666E;&#x904D;&#x62DB;&#x4EBA;&#x6BD4;&#x8F83;&#x591A;&#xFF0C;&#x6700;&#x60F3;&#x53BB;&#x7684;&#x9879;&#x76EE;&#x6216;&#x8005;&#x5F88;&#x6709;&#x628A;&#x63E1;&#x7684;&#x9879;&#x76EE;&#x90FD;&#x8981;&#x8D76;&#x7B2C;&#x4E00;&#x8F6E;&#x6295;&#x9012;&#x3002;&#x989D;&#x5916;&#x518D;&#x52A0;&#x51E0;&#x6240;&#x4FDD;&#x5E95;&#x6821;&#x4E5F;&#x7B2C;&#x4E00;&#x8F6E;&#x6295;&#x9012;&#x3002;&#x7B14;&#x8005;&#x5728; 21fall &#x7684;&#x7533;&#x8BF7;&#x4E2D;&#x5403;&#x4E86;&#x4E8F;&#x3002;NEU &#x7684; MSCS &#x5728;&#x7B2C;&#x4E00;&#x8F6E;&#x4E2D;&#x9009;&#x62D4;&#x4E2D;&#xFF0C;GPA 3.5/TOEFL 95/GRE 315 &#x88AB;&#x5F55;&#x53D6;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x4E09;&#x7EF4;&#x6BD4;&#x8FD9;&#x4E2A;&#x9AD8;&#xFF0C;&#x6309;&#x7406;&#x6765;&#x8BF4;&#x5F55;&#x53D6;&#x7A33;&#x4E86;&#xFF0C;&#x4F46;&#x662F;&#x6CA1;&#x6709;&#x5F55;&#x53D6;&#xFF0C;&#x529D;&#x8F6C; COE &#x4E86;&#xFF0C;&#x8F6C;&#x5B8C;&#x4EE5;&#x540E;&#x679C;&#x7136;&#x5F55;&#x4E86;&#x3002;&#x800C;&#x4E14;&#x5F53;&#x65F6; MSCS@<strong>NEU</strong> &#x4E5F;&#x975E;&#x5E38;&#x5947;&#x602A;&#xFF0C;&#x72B6;&#x6001;&#x53D8;&#x66F4;&#x6210; under review &#x7684;&#x5F53;&#x5929;&#xFF0C;&#x540C;&#x65F6; Rej &#x4E86;&#x3002;&#x7B14;&#x8005;&#x4E00;&#x5EA6;&#x6000;&#x7591;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x5E76;&#x6CA1;&#x6709;&#x770B;&#x6750;&#x6599;&#xFF0C;&#x76F4;&#x63A5;&#x62D2;&#x4E86;&#x3002;&#x540E;&#x6765;&#x7ECF;&#x8FC7;&#x5730;&#x91CC;&#x591A;&#x65B9;&#x9A8C;&#x8BC1;&#xFF0C;&#x8FD9;&#x79CD;&#x5F53;&#x5929; review &#x5F53;&#x5929;&#x79D2;&#x62D2;&#x7684;&#x884C;&#x4E3A;&#x5F88;&#x5927;&#x7A0B;&#x5EA6;&#x662F;&#x90A3;&#x4E00;&#x8F6E; rolling &#x62DB;&#x6EE1;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x6295; MSCS@<strong>NEU</strong> &#x662F; 2 &#x6708; 3 &#x53F7;&#xFF0C;Recommend Letter &#x662F; 2 &#x6708; 10 &#x53F7; Complete &#x7684;&#xFF0C;2 &#x6708; 13 &#x53F7;&#x53D8;&#x6210; under review&#xFF0C;&#x5F53;&#x5929; Rej&#x3002;NEU &#x7B2C;&#x4E00;&#x8F6E;&#x6295;&#x9012;&#x65F6;&#x95F4;&#x662F; 2020 &#x5E74; 11 &#x6708;&#x3002;&#x7B14;&#x8005;&#x7684;&#x7ECF;&#x5386;&#x544A;&#x8BC9;&#x4F60;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x60F3;&#x7533; NEU MSCS&#xFF0C;&#x5EFA;&#x8BAE;&#x7F51;&#x7533;&#x4E00;&#x5F00;&#x542F;&#x5C31;&#x628A;&#x5B83;&#x6295;&#x4E86;&#x3002;&#x5373;&#x4F7F;&#x662F;&#x4FDD;&#x5E95;&#xFF0C;&#x4E5F;&#x5148;&#x4FDD;&#x4F4F;&#x518D;&#x8BF4;&#x3002;&#x7531;&#x6B64;&#x53EF;&#x89C1;&#xFF0C;&#x6295;&#x9012;&#x7B56;&#x7565;&#x5F71;&#x54CD;&#x6295;&#x9012;&#x8F6E;&#x6B21;&#xFF0C;&#x8FDB;&#x800C;&#x5F71;&#x54CD;&#x662F;&#x5426;&#x80FD;&#x62FF;&#x5230; offer&#x3002;</p>
<p>&#x7B2C;&#x4E8C;&#x8F6E;&#x53EF;&#x4EE5;&#x6295;&#x4E00;&#x4E9B;&#x628A;&#x63E1;&#x6CA1;&#x6709;&#x90A3;&#x4E48;&#x5927;&#x7684;&#x5F69;&#x7968;&#x6821;&#x548C;&#x5C11;&#x91CF;&#x4E3B;&#x7533;&#x6821;&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x8BED;&#x8A00;&#x6210;&#x7EE9; 9 &#x6708;&#x524D;&#x5237;&#x597D;&#x4E86;&#xFF0C;9 &#x6708;&#x5168;&#x529B;&#x5199;&#x6BCF;&#x4E2A;&#x5B66;&#x6821;&#x7684;&#x6587;&#x4E66;&#xFF0C;10 &#x6708;&#x628A;&#x6240;&#x6709;&#x5B66;&#x6821;&#x90FD;&#x6295;&#x7B2C;&#x4E00;&#x8F6E;&#xFF0C;&#x4E5F;&#x662F;&#x975E;&#x5E38;&#x4E0D;&#x9519;&#x7684;&#x7B56;&#x7565;&#x3002;</p>
<blockquote>
<p>&#x53E6;&#x5916;&#x7F51;&#x7533;&#x63D0;&#x4EA4;&#x4E4B;&#x524D;&#xFF0C;&#x8BF7;&#x591A;&#x591A;&#x6CE8;&#x610F;&#x7533;&#x8BF7;&#x8D39; waive &#x7684;&#x95EE;&#x9898;&#x3002;&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x7533;&#x8BF7;&#x4E86;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x53EF;&#x4EE5;&#x518D;&#x9001;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x5373;&#x514D;&#x9664;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x7684; waive&#x3002;NEU &#x548C; USC &#x90FD;&#x6709; waive &#x7684;&#x9009;&#x9879;&#x3002;NEU &#x67D0;&#x4E9B;&#x5B66;&#x9662;&#x7684;&#x9879;&#x76EE;&#x4E4B;&#x95F4;&#x53EF;&#x4EE5; waive &#x7533;&#x8BF7;&#x8D39;&#x7684;&#x3002;&#x5177;&#x4F53;&#x60C5;&#x51B5;&#x8BF7;&#x770B;&#x5F53;&#x5E74;&#x62DB;&#x751F;&#x8BF4;&#x660E;&#x3002;USC &#x591A;&#x4E2A; CS &#x9879;&#x76EE;&#x4E4B;&#x95F4;&#xFF0C;&#x6700;&#x591A;&#x53EF;&#x4EE5; waive &#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x3002;&#x7B14;&#x8005;&#x6BD4;&#x8F83;&#x50BB;&#xFF0C;&#x5F53;&#x65F6;&#x867D;&#x7136;&#x77E5;&#x9053;&#x53EF;&#x4EE5; waive&#xFF0C;&#x4F46;&#x662F;&#x7F34;&#x8D39;&#x7684;&#x65F6;&#x5019; 3 &#x4E2A;&#x9879;&#x76EE;&#x5168;&#x90E8;&#x4EA4;&#x94B1;&#x4E86;&#x3002;&#x6B63;&#x786E;&#x7684;&#x64CD;&#x4F5C;&#x5E94;&#x8BE5;&#x662F;&#x5148;&#x63D0;&#x4EA4;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x7136;&#x540E;&#x8054;&#x7CFB;&#x5B66;&#x9662;&#x7ED9;&#x4E00;&#x4E2A;&#x4F18;&#x60E0;&#x7801;&#xFF0C;&#x8FD9;&#x6837;&#x518D;&#x63D0;&#x4EA4;&#x7B2C;&#x4E8C;&#x4E2A;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7528;&#x4F18;&#x60E0;&#x7801; waive &#x6389;&#x7533;&#x8BF7;&#x8D39;&#x3002;&#x7136;&#x540E;&#x518D;&#x63D0;&#x4EA4;&#x7B2C;&#x4E09;&#x4E2A;&#x9879;&#x76EE;&#x5E76;&#x4ED8;&#x8D39;&#x3002;USC &#x7533;&#x8BF7; 3 &#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A;&#x53EA;&#x9700;&#x8981;&#x82B1; 2 &#x4EFD;&#x7684;&#x7533;&#x8BF7;&#x8D39;&#x3002;&#x5E0C;&#x671B;&#x4F5C;&#x4E3A;&#x540E;&#x6765;&#x4EBA;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x80FD;&#x6C72;&#x53D6;&#x7B14;&#x8005;&#x7684;&#x6559;&#x8BAD;&#xFF0C;&#x5C11;&#x82B1;&#x4E00;&#x7B14;&#x7533;&#x8BF7;&#x8D39;&#x3002;</p>
</blockquote>
<h3 id="3-%E9%9D%A2%E8%AF%95">3. &#x9762;&#x8BD5;</h3>
<p>&#x4E0D;&#x5C11;&#x9879;&#x76EE;&#x6709;&#x9762;&#x8BD5;&#x73AF;&#x8282;&#x3002;&#x610F;&#x5473;&#x7740;&#x7533;&#x8BF7;&#x8005;&#x5728;&#x7533;&#x8BF7;&#x5B63;&#x671F;&#x95F4;&#x4E0D;&#x4EC5;&#x8981;&#x8D76; PS &#x6587;&#x4E66;&#xFF0C;&#x8FD8;&#x9700;&#x540C;&#x65F6;&#x51C6;&#x5907;&#x9762;&#x8BD5;&#x3002;&#x7B14;&#x8005;&#x4ECA;&#x5E74;&#x7533;&#x8BF7;&#x7684;&#x9879;&#x76EE;&#x4E2D;&#x6709;&#x597D;&#x51E0;&#x4E2A;&#x90FD;&#x6709;&#x9762;&#x8BD5;&#xFF1A;MEng CS@<strong>Cornell</strong>, MSCS@<strong>WUSTL</strong>, MSE@<strong>CMU</strong>, MITS@<strong>CMU</strong>, MSCS@<strong>Columbia</strong>, MScAC@<strong>UoT</strong>&#x3002;&#x9762;&#x8BD5;&#x5206;&#x4E3A;&#x51E0;&#x79CD;&#x7C7B;&#x578B;&#xFF0C;&#x4E00;&#x79CD;&#x662F; Skype &#x8BED;&#x97F3;&#x9762;&#x8BD5;&#xFF0C;&#x4E00;&#x79CD;&#x662F; Kira &#x7EA6;&#x9762;&#xFF0C;&#x4E00;&#x79CD;&#x662F; Zoom &#x9762;&#x5BF9;&#x9762;&#xFF0C;&#x8FD8;&#x6709;&#x4E00;&#x79CD; Coding Test&#x3002;Coding Test &#x7C7B;&#x4F3C; LeetCode&#xFF0C;1 &#x4E2A;&#x5C0F;&#x65F6; 4 &#x9053;&#x9898;&#xFF0C;&#x5199;&#x5B8C;&#x4EE3;&#x7801;&#x81EA;&#x5DF1;&#x6D4B;&#x8BD5;&#xFF0C;&#x4F46;&#x65E0; OJ &#x8BC4;&#x5224;&#x5BF9;&#x9519;&#xFF0C;&#x63D0;&#x4EA4;&#x4EE3;&#x7801;&#x540E;&#x4E0D;&#x53EF;&#x66F4;&#x6539;&#x3002;&#x6700;&#x7EC8;&#x6210;&#x7EE9;&#x6839;&#x636E;&#x5B8C;&#x6210;&#x65F6;&#x957F;&#xFF0C;&#x8DD1;&#x8FC7; test case &#x7EC4;&#x6570;&#x5171;&#x540C;&#x51B3;&#x5B9A;&#x3002;&#x8BED;&#x97F3;&#x6216;&#x89C6;&#x9891;&#x9762;&#x8BD5;&#x7684;&#x95EE;&#x9898;&#x591A;&#x79CD;&#x591A;&#x6837;&#xFF0C;&#x7B80;&#x5355;&#x7684;&#x95EE;&#x9898;&#x4F1A;&#x95EE; why school&#xFF0C;&#x8003;&#x5BDF;&#x4F60;&#x5BF9;&#x5B66;&#x6821;&#x7684;&#x4E86;&#x89E3;&#x7A0B;&#x5EA6;&#xFF0C;&#x559C;&#x7231;&#x7A0B;&#x5EA6;&#x662F;&#x5426;&#x5F3A;&#x70C8;&#x3002;&#x96BE;&#x4E00;&#x70B9;&#x7684;&#x4F1A;&#x6839;&#x636E; CV &#x95EE;&#x5DE5;&#x4F5C;/&#x5B9E;&#x4E60;&#x7ECF;&#x5386;&#xFF0C;&#x6691;&#x7814;&#x7ECF;&#x5386;&#xFF0C;&#x4EA4;&#x6362;&#x751F;&#x7ECF;&#x5386;&#xFF0C;&#x79D1;&#x7814;&#x7ECF;&#x5386;&#x3002;&#x66F4;&#x96BE;&#x4E00;&#x70B9;&#x7684;&#x4F1A;&#x95EE;&#x6280;&#x672F;&#xFF0C;&#x4F8B;&#x5982;&#x95EE;&#x4F60;&#x4E86;&#x89E3;&#x54EA;&#x4E9B;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#xFF0C;&#x6BCF;&#x4E2A;&#x8BBE;&#x8BA1;&#x6A21;&#x5F0F;&#x5206;&#x522B;&#x9002;&#x7528;&#x4E8E;&#x54EA;&#x4E9B;&#x573A;&#x666F;&#x3002;&#x672C;&#x79D1;&#x662F;&#x5426;&#x5B66;&#x4E60;&#x8FC7;&#x7B97;&#x6CD5;&#x8BFE;&#x7A0B;&#xFF0C;&#x5B66;&#x4E60;&#x8FC7;&#x54EA;&#x4E9B;&#x7B97;&#x6CD5;&#x3002;&#x662F;&#x5426;&#x5B66;&#x4E60;&#x8FC7;&#x7EBF;&#x6027;&#x4EE3;&#x6570;&#xFF0C;&#x6982;&#x7387;&#x8BBA;&#xFF0C;&#x5982;&#x679C;&#x5B66;&#x8FC7;&#xFF0C;&#x8BF7;&#x8BB2;&#x8BB2;&#x77E9;&#x9635;&#x7684;&#x79E9;&#xFF0C;&#x9006;&#x77E9;&#x9635;&#xFF0C;&#x57FA;&#x53D8;&#x6362;&#x7B49;&#x6982;&#x5FF5;&#xFF0C;&#x8D1D;&#x53F6;&#x65AF;&#x5B9A;&#x7406;&#x662F;&#x4EC0;&#x4E48;&#xFF0C;&#x6570;&#x5B66;&#x671F;&#x671B;&#xFF0C;&#x6CCA;&#x677E;&#x5206;&#x90E8;&#xFF0C;&#x9A6C;&#x5C14;&#x53EF;&#x592B;&#x94FE;&#x7684;&#x6982;&#x5FF5;&#x7B49;&#x7B49;&#x3002;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x4E2D;&#x7EA2;&#x9ED1;&#x6811;&#x662F;&#x5982;&#x4F55;&#x65CB;&#x8F6C;&#x8C03;&#x6574;&#x8282;&#x70B9;&#x7684;&#x2026;&#x2026;&#x95EE;&#x6280;&#x672F;&#x6216;&#x8005;&#x6570;&#x5B66;&#x65B9;&#x9762;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x7B14;&#x8005;&#x89C9;&#x5F97;&#x6700;&#x96BE;&#x7684;&#x5730;&#x65B9;&#x662F;&#x5982;&#x4F55;&#x7528;&#x82F1;&#x8BED;&#x8868;&#x8FBE;&#x51FA;&#x6765;&#xFF0C;&#x800C;&#x4E14;&#x80FD;&#x8BA9;&#x9762;&#x8BD5;&#x5B98;&#x542C;&#x61C2;&#x3002;&#x7B14;&#x8005;&#x88AB;&#x95EE;&#x5230;&#x4EC0;&#x4E48;&#x662F;&#x6865;&#x63A5;&#x6A21;&#x5F0F;&#xFF0C;&#x6865;&#x63A5;&#x6A21;&#x5F0F;&#x7684;&#x5B9A;&#x4E49;&#x662F;&#x4EC0;&#x4E48;&#xFF0C;&#x4EE5;&#x53CA;&#x54EA;&#x4E9B;&#x5730;&#x65B9;&#x4F1A;&#x7528;&#x5230;&#x6865;&#x63A5;&#x6A21;&#x5F0F;&#x3002;&#x7528;&#x4E2D;&#x6587;&#x80FD;&#x5B8C;&#x7F8E;&#x89E3;&#x91CA;&#xFF0C;&#x6362;&#x6210;&#x82F1;&#x6587;&#x5C31;&#x5F88;&#x201C;&#x574E;&#x5777;&#x201D;&#x4E86;&#x3002;</p>
<p>&#x8FD9;&#x5757;&#x548C;&#x5E73;&#x65F6;&#x770B;&#x7EAF;&#x82F1;&#x6587;&#x7684;&#x6280;&#x672F;&#x4E66;&#x770B;&#x5C11;&#x4E86;&#x6709;&#x5173;&#x7CFB;&#x3002;&#x5982;&#x679C;&#x65E5;&#x5E38;&#x9605;&#x8BFB;&#x6280;&#x672F;&#x6587;&#x7AE0;&#x662F;&#x82F1;&#x6587;&#xFF0C;&#x8033;&#x6FE1;&#x76EE;&#x67D3;&#xFF0C;&#x6280;&#x672F;&#x540D;&#x8BCD;&#x80AF;&#x5B9A;&#x90FD;&#x4F1A;&#x4E86;&#x3002;&#x9762;&#x8BD5;&#x56DE;&#x7B54;&#x95EE;&#x9898;&#x65F6;&#xFF0C;&#x9047;&#x5230;&#x4E0D;&#x77E5;&#x9053;&#x5982;&#x4F55;&#x63CF;&#x8FF0;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x4F1A;&#x6362;&#x79CD;&#x65B9;&#x5F0F;&#x63CF;&#x8FF0;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x4E0D;&#x5982;&#x4E00;&#x4E2A;&#x7CBE;&#x51C6;&#x7684;&#x5355;&#x8BCD;&#x6765;&#x7684;&#x4E13;&#x4E1A;&#x3002;&#x6709;&#x53EF;&#x80FD;&#x4F60;&#x8BF4;&#x4E86;&#x4E00;&#x5806;&#xFF0C;&#x4F46;&#x662F;&#x9762;&#x8BD5;&#x5B98;&#x63D0;&#x793A;&#x70B9;&#x51FA;&#x4E86;&#x5173;&#x952E;&#x7684;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;&#xFF0C;&#x4F60;&#x4F1A;&#x8C41;&#x7136;&#x5F00;&#x6717;&#xFF0C;&#x201C;&#x5BF9;&#x5BF9;&#x5BF9;&#xFF0C;&#x6211;&#x60F3;&#x8BF4;&#x7684;&#x5C31;&#x662F;&#x8FD9;&#x4E2A;&#x201D;&#x3002;&#x5BF9;&#x4E8E;&#x60F3;&#x5728;&#x6280;&#x672F;&#x9762;&#x8BD5;&#x4E2D;&#x51FA;&#x7C7B;&#x62D4;&#x8403;&#x7684;&#x540C;&#x5B66;&#x5E94;&#x8BE5;&#x77E5;&#x9053;&#x600E;&#x4E48;&#x505A;&#x4E86;&#x5427;&#xFF1F;&#x65E5;&#x5E38;&#x9605;&#x8BFB;&#x6280;&#x672F;&#x6587;&#x7AE0;&#x8BF7;&#x63A5;&#x89E6;&#x5927;&#x91CF;&#x82F1;&#x6587;&#x3002;</p>
<h3 id="4-%E6%8A%89%E6%8B%A9-offer">4. &#x6289;&#x62E9; offer</h3>
<p>&#x4E00;&#x822C;&#x53D1; offer &#x7684;&#x65F6;&#x95F4;&#x5728;&#x7F8E;&#x56FD;&#x5723;&#x8BDE;&#x8282;&#x4E4B;&#x540E;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x7B2C;&#x4E8C;&#x5E74;&#x7684; 1 &#x6708;&#x4E2D;&#x4E0B;&#x65EC;&#x4EE5;&#x540E;&#x3002;1 &#x6708;&#x4E0B;&#x65EC;&#x8FD9;&#x6CE2; offer &#x5BF9;&#x5E94; 11 &#x6708; 15 &#x53F7;&#x81F3; 11 &#x6708; 30 &#x53F7;&#x671F;&#x95F4;&#x6295;&#x9012;&#x7684;&#x7533;&#x8BF7;&#x3002;&#x5927;&#x6279;&#x91CF;&#x7684; offer &#x96C6;&#x4E2D;&#x5728; 2 &#x6708;&#x5E95;&#xFF0C;3 &#x6708;&#x521D;&#x3002;&#x63A5;&#x5230; offer &#x4EE5;&#x540E;&#x8BF7;&#x5148;&#x786E;&#x5B9A;&#x597D;&#x56DE;&#x590D;&#x7684;&#x65E5;&#x671F;&#xFF0C;&#x5728;&#x8FD9;&#x4E2A;&#x65E5;&#x671F;&#x524D;&#x5FC5;&#x987B;&#x505A;&#x51B3;&#x5B9A;&#xFF0C;&#x5426;&#x5219; offer &#x8FC7;&#x671F;&#x3002;&#x63A5; offer &#x4E4B;&#x540E;&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x8FD8;&#x6709; deposit &#x5360;&#x4F4D;&#x8D39;&#xFF0C;&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x5360;&#x4F4D;&#x8D39;&#x975E;&#x5E38;&#x9AD8;&#xFF0C;&#x6BD4;&#x5982; NEU $750&#xFF0C;Columbia $4800&#xFF0C;NYU $500&#x3002;&#x5360;&#x4F4D;&#x8D39;&#x662F;&#x62C9;&#x9AD8;&#x7533;&#x8BF7;&#x8005;&#x53CD;&#x6094;&#x8DF3;&#x8F66;&#x53BB;&#x5176;&#x4ED6;&#x5B66;&#x6821;&#x7684;&#x95E8;&#x69DB;&#x3002;&#x5982;&#x679C;&#x4F60;&#x63A5;&#x4E86; offer&#xFF0C;&#x540E;&#x671F;&#x53C8;&#x53CD;&#x6094;&#xFF0C;&#x5BF9;&#x5B66;&#x6821;&#x6765;&#x8BF4;&#x662F;&#x975E;&#x5E38;&#x6E23;&#x7537;&#x7684;&#x884C;&#x4E3A;&#x3002;&#x5B66;&#x6821;&#x4E3A;&#x4E86;&#x8BA9;&#x7533;&#x8BF7;&#x8005;&#x614E;&#x91CD;&#x505A;&#x51B3;&#x5B9A;&#xFF0C;&#x589E;&#x52A0;&#x9AD8;&#x989D;&#x5360;&#x4F4D;&#x8D39;&#xFF0C;&#x800C;&#x4E14;&#x4E5F;&#x7B97;&#x7ED9;&#x81EA;&#x8EAB;&#x589E;&#x52A0;&#x6536;&#x5165;&#x3002;&#x4F8B;&#x5982;&#x63A5;&#x4E86; Columbia &#x7684; offer&#xFF0C;&#x4F46;&#x662F;&#x4EA4;&#x5B8C;&#x5360;&#x4F4D;&#x8D39;&#x4E00;&#x4E2A;&#x6708;&#x540E;&#x4F60;&#x53C8;&#x6536;&#x5230;&#x4E86; Stanford &#x7684; offer&#xFF0C;&#x4E8E;&#x662F;&#x4F60;&#x8DF3;&#x8F66;&#x53BB;&#x4E86; Stanford&#x3002;&#x5B66;&#x6821;&#x589E;&#x52A0;&#x4E86;&#x5360;&#x4F4D;&#x8D39;&#x7684;&#x95E8;&#x69DB;&#xFF0C;&#x4F7F;&#x5F97;&#x4F60;&#x8DF3;&#x8F66;&#x8D70;&#x4E86;&#xFF0C;&#x5B66;&#x6821;&#x4E5F;&#x80FD;&#x767D;&#x767D;&#x8D5A;&#x8D70;&#x4E86;&#x4F60; $4800&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x75AB;&#x60C5;&#x671F;&#x95F4;&#x6709;&#x4E9B;&#x5B66;&#x6821;&#x56E0;&#x4E3A;&#x60F3;&#x5438;&#x5F15;&#x66F4;&#x591A;&#x7684;&#x5B66;&#x751F;&#x5165;&#x5B66;&#xFF0C;&#x53D6;&#x6D88;&#x4E86;&#x5360;&#x4F4D;&#x8D39;&#x3002;&#x5E0C;&#x671B;&#x5927;&#x5BB6;&#x53CC;&#x65B9;&#x90FD;&#x76F8;&#x4E92;&#x53CB;&#x5584;&#x5427;&#xFF0C;&#x7533;&#x8BF7;&#x8005;&#x4E0D;&#x8981;&#x6B3A;&#x8D1F;&#x8FD9;&#x79CD;&#x4E0D;&#x6536;&#x5360;&#x4F4D;&#x8D39;&#x7684;&#x5B66;&#x6821;&#xFF0C;&#x968F;&#x610F;&#x6495;&#x7968;&#x3002;&#x5B66;&#x6821;&#x4E5F;&#x4E0D;&#x8981;&#x6D77;&#x738B;&#xFF0C;&#x6B7B;&#x6D3B;&#x4E0D;&#x51FA;&#x7ED3;&#x679C;&#xFF0C;&#x8BA9;&#x7533;&#x8BF7;&#x8005;&#x65E0;&#x9650;&#x671F;&#x7684;&#x7B49;&#x5F85;&#x3002;</p>
<p>&#x4E00;&#x822C; offer &#x7684; ddl &#x4ECE; 2 &#x5468;&#x5230; 2 &#x4E2A;&#x6708;&#x4E0D;&#x7B49;&#x3002;&#x6536;&#x5230; offer &#x4EE5;&#x540E;&#x8BF7;&#x5C3D;&#x5FEB;&#x591A;&#x4E86;&#x89E3;&#x4E00;&#x4E9B;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x7684;&#x5751;&#x70B9;&#xFF0C;&#x53D6;&#x820D;&#x5B83;&#x662F;&#x5426;&#x6700;&#x9002;&#x5408;&#x81EA;&#x5DF1;&#x3002;&#x5728;&#x591A;&#x4E2A; offer &#x4E2D;&#x52A8;&#x6001;&#x627E;&#x5230;&#x6700;&#x9002;&#x5408;&#x81EA;&#x5DF1;&#x7684;&#x9879;&#x76EE;&#x3002;&#x77BB;&#x524D;&#x987E;&#x540E;&#x7684;&#x7126;&#x8651;&#x4F1A;&#x8BA9;&#x4EBA;&#x5FC3;&#x6001;&#x7206;&#x70B8;&#x3002;&#x8BF7;&#x8BB0;&#x4F4F;&#xFF0C;&#x4E16;&#x4E0A;&#x6CA1;&#x6709;&#x6700;&#x5B8C;&#x7F8E;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x53EA;&#x6709;&#x6700;&#x9002;&#x5408;&#x81EA;&#x5DF1;&#x7684;&#x9879;&#x76EE;&#x3002;&#x5982;&#x679C;&#x4E0D;&#x662F; MSCS@<strong>Stanford</strong> &#x7684; offer&#xFF0C;&#x5176;&#x4ED6;&#x9879;&#x76EE;&#x57FA;&#x672C;&#x90FD;&#x4F1A;&#x6709;&#x53D6;&#x820D;&#x3002;&#x5B66;&#x6821;&#x6392;&#x540D;&#xFF0C;&#x5730;&#x7406;&#x4F4D;&#x7F6E;&#xFF0C;&#x5929;&#x6C14;&#x6C14;&#x5019;&#xFF0C;&#x8BFE;&#x7A0B;&#x8BBE;&#x7F6E;&#xFF0C;&#x5C31;&#x4E1A;&#x6570;&#x636E;&#xFF0C;&#x6821;&#x53CB;&#x4EBA;&#x8109;&#xFF0C;&#x6559;&#x6388;&#x7814;&#x7A76;&#x65B9;&#x5411;&#x7B49;&#x7B49;&#x56E0;&#x7D20;&#x90FD;&#x8981;&#x8003;&#x8651;&#x3002;</p>
<h3 id="5-%E5%8A%9E%E7%90%86-i-20-%E6%9D%90%E6%96%99">5. &#x529E;&#x7406; I-20 &#x6750;&#x6599;</h3>
<p>&#x786E;&#x5B9A;&#x4E0B;&#x6700;&#x7EC8;&#x63A5;&#x54EA;&#x6240;&#x5B66;&#x6821;&#x7684; offer &#x4EE5;&#x540E;&#xFF0C;&#x4FBF;&#x8981;&#x5F00;&#x59CB;&#x529E;&#x7406; I-20 &#x6750;&#x6599;&#x3002;&#x8FD9;&#x4E2A;&#x6750;&#x6599;&#x5305;&#x62EC;&#x6838;&#x5BF9;&#x4E2A;&#x4EBA;&#x8EAB;&#x4EFD;&#x4FE1;&#x606F;&#xFF0C;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#xFF0C;&#x7F8E;&#x672C;&#x672C;&#x79D1;&#x5B66;&#x751F;&#x8EAB;&#x4EFD;&#x8F6C;&#x6362;&#x7B49;&#x7B49;&#x3002;&#x5BF9;&#x4E8E;&#x9646;&#x672C;&#x5B66;&#x751F;&#x6765;&#x8BF4;&#xFF0C;&#x4E3B;&#x8981;&#x662F;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x3002;&#x5B66;&#x6821;&#x4F1A;&#x7ED9;&#x6211;&#x9879;&#x76EE;&#x82B1;&#x8D39;&#x9884;&#x7B97;&#xFF0C;&#x9700;&#x8981;&#x4F60;&#x53BB;&#x94F6;&#x884C;&#x5F00;&#x51FA;&#x5927;&#x4E8E;&#x8FD9;&#x4E2A;&#x9884;&#x7B97;&#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x3002;I-20 &#x6750;&#x6599;&#x975E;&#x5E38;&#x91CD;&#x8981;&#xFF0C;&#x53EA;&#x6709;&#x62FF;&#x5230;&#x4E86; I-20 &#x624D;&#x80FD;&#x5F00;&#x59CB;&#x529E;&#x7406;&#x7F8E;&#x7B7E;&#x3002;&#x7F8E;&#x7B7E;&#x9762;&#x7B7E;&#x7533;&#x8BF7;&#x4E0A;&#x9700;&#x8981;&#x586B;&#x5199; I-20 Number&#x3002;&#x4E0D;&#x540C;&#x5B66;&#x6821;&#x529E;&#x7406;&#x901F;&#x5EA6;&#x4E0D;&#x540C;&#xFF0C;&#x5C3D;&#x5FEB;&#x63D0;&#x4EA4;&#x6750;&#x6599;&#xFF0C;I-20 &#x80FD;&#x65E9;&#x65E5;&#x5230;&#x624B;&#x3002;</p>
<p>&#x4EE5;&#x7B14;&#x8005; 21fall &#x6765;&#x8BF4;&#xFF0C;&#x7B14;&#x8005;&#x63A5;&#x7684; CMU offer&#xFF0C;&#x529E;&#x7406; I-20 &#x5728;&#x63D0;&#x4EA4;&#x6750;&#x6599;&#x4EE5;&#x540E;&#x8FD8;&#x9700;&#x8981; 4-6 &#x5468;&#x3002;&#x5176;&#x4ED6;&#x5B66;&#x6821;&#xFF0C;UIUC&#xFF0C;NYU&#xFF0C;Rice&#xFF0C;WUSTL&#xFF0C;Tufts&#xFF0C;UTD &#x8FD9;&#x4E9B;&#x5B66;&#x6821;&#x5728;&#x7533;&#x8BF7;&#x8005;&#x63D0;&#x4EA4;&#x597D; I-20 &#x6750;&#x6599;&#x4EE5;&#x540E;&#x7684;&#x4E00;&#x5468;&#x5185;&#xFF0C;&#x90FD;&#x80FD;&#x4E0B;&#x53D1; I-20&#x3002;&#x6240;&#x4EE5;&#x4E00;&#x5B9A;&#x8BF7;&#x5C3D;&#x65E9;&#x529E;&#x597D;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#xFF0C;&#x5C3D;&#x65E9;&#x63D0;&#x4EA4; I-20 &#x7533;&#x8BF7;&#x6240;&#x9700;&#x6750;&#x6599;&#xFF0C;&#x7B14;&#x8005;&#x5EFA;&#x8BAE;&#xFF0C;&#x6240;&#x6709;&#x5B66;&#x6821;&#x7684;&#x7F51;&#x7533;&#x7ED3;&#x675F;&#x4EE5;&#x540E;&#xFF0C;&#x4FBF;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x51C6;&#x5907;&#x81EA;&#x5DF1;&#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x4E86;&#xFF0C;&#x4E00;&#x822C; 16 &#x4E2A;&#x6708;&#x7684;&#x9879;&#x76EE;&#x51C6;&#x5907; 70-90W &#x4E00;&#x5B9A;&#x591F;&#x7528;&#x4E86;&#x3002;&#x8FD9;&#x6837; offer &#x4E00;&#x6765;&#xFF0C;&#x786E;&#x5B9A;&#x597D;&#x6700;&#x7EC8;&#x53BB;&#x54EA;&#x6240;&#x5B66;&#x6821;&#x4EE5;&#x540E;&#xFF0C;&#x5F53;&#x65E5;&#x4FBF;&#x53EF;&#x63D0;&#x4EA4;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x6750;&#x6599;&#xFF0C;&#x53C2;&#x52A0; I-20 &#x6392;&#x961F;&#x3002;&#x7B14;&#x8005;&#x6536;&#x5230; offer &#x4EE5;&#x540E;&#x624D;&#x5F00;&#x59CB;&#x51C6;&#x5907;&#x7684; I-20&#xFF0C;&#x53C8;&#x82B1;&#x4E86;&#x4E00;&#x5468;&#x3002;&#x6700;&#x7EC8;&#x6BD4;&#x6211;&#x65E9;&#x4E00;&#x5468;&#x63D0;&#x4EA4;&#x6750;&#x6599;&#x7684;&#x540C;&#x5B66;&#xFF0C;&#x6BD4;&#x7B14;&#x8005;&#x65E9; 10 &#x5929;&#x6536;&#x5230; I-20&#x3002;&#x7B14;&#x8005;&#x7B49;&#x4E86; 7 &#x5468;&#x591A;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x63A5;&#x8FD1; 2 &#x4E2A;&#x6708;&#x3002;&#x56E0;&#x4E3A;&#x4E2D;&#x95F4;&#x8FD8;&#x9047;&#x5230;&#x4E86;&#x5B66;&#x6821;&#x7684;&#x7EAA;&#x5FF5;&#x65E5;&#x653E;&#x5047;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x5C3D;&#x65E9;&#x51C6;&#x5907; I-20 &#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x6750;&#x6599;&#x624D;&#x662F;&#x6700;&#x6B63;&#x786E;&#x7684;&#x9009;&#x62E9;&#x3002;&#x5C3D;&#x65E9;&#x62FF;&#x5230; I-20 &#x4EE5;&#x540E;&#xFF0C;&#x529E;&#x7406;&#x9762;&#x7B7E;&#x90FD;&#x4E3B;&#x52A8;&#x5F88;&#x591A;&#x3002;</p>
<p>&#x5173;&#x4E8E;&#x8D22;&#x4EA7;&#x8BC1;&#x660E; funding &#x6765;&#x6E90;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5982;&#x679C;&#x5199; self-funding&#xFF0C;&#x771F;&#x7684;&#x662F;&#x201C;&#x5927;&#x5751;&#x201D;&#x3002;&#x5982;&#x679C;&#x6709;&#x91CD;&#x6765;&#x4E00;&#x6B21;&#x7684;&#x673A;&#x4F1A;&#xFF0C;&#x7B14;&#x8005;&#x4E00;&#x5B9A;&#x4E0D;&#x5199; self-funding&#xFF0C;&#x5199; parental sponsorship&#x3002;&#x7B14;&#x8005;&#x4E00;&#x5F00;&#x59CB;&#x89C9;&#x5F97;&#x5199;&#x4EC0;&#x4E48;&#x90FD;&#x65E0;&#x6240;&#x8C13;&#xFF0C;&#x4E8E;&#x662F;&#x628A;&#x94B1;&#x90FD;&#x8F6C;&#x5230;&#x4E86;&#x81EA;&#x5DF1;&#x540D;&#x4E0B;&#x7684;&#x5361;&#x91CC;&#xFF0C;&#x5E76;&#x4E14;&#x5168;&#x90E8;&#x8D44;&#x91D1;&#x90FD;&#x529E;&#x7406;&#x4E86;&#x51BB;&#x7ED3;&#x624B;&#x7EED;&#x3002;&#x63D0;&#x4EA4; I-20 &#x4EE5;&#x540E;&#xFF0C;&#x5B66;&#x6821;&#x5BA1;&#x6838;&#x4EE5;&#x540E;&#x4E0D;&#x901A;&#x8FC7;&#xFF0C;&#x7406;&#x7531;&#x662F;&#x201C;self-funding &#x9700;&#x8981;&#x63D0;&#x4F9B;&#x5168;&#x989D;&#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#xFF0C;&#x9700;&#x8981;&#x8865;&#x5145;&#x6750;&#x6599;&#x201D;&#x3002;I-20 &#x7533;&#x8BF7;&#x6750;&#x6599;&#x4E0A;&#x5199;&#x7684;&#x662F;&#x9700;&#x8981;&#x63D0;&#x4EA4;&#x7B2C;&#x4E00;&#x5E74;&#x6240;&#x6709;&#x82B1;&#x8D39;&#xFF08;&#x5B66;&#x8D39;+&#x751F;&#x6D3B;&#x8D39;+&#x79DF;&#x8D39;&#x6240;&#x6709;&#x8D39;&#x7528;&#xFF09;&#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x5373;&#x53EF;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x91CC;&#x5982;&#x679C;&#x662F; self-funding&#xFF0C;&#x9700;&#x8981;&#x63D0;&#x4F9B; 2 &#x5E74;&#x5168;&#x989D;&#x7684;&#x6240;&#x6709;&#x82B1;&#x8D39;&#xFF08;&#x5B66;&#x8D39;+&#x751F;&#x6D3B;&#x8D39;+&#x79DF;&#x8D39;&#x6240;&#x6709;&#x8D39;&#x7528;&#xFF09;&#xFF0C;&#x8FD9;&#x4E2A;&#x89C4;&#x5B9A;&#x5728;&#x5B66;&#x6821;&#x7684;&#x7F51;&#x7AD9;&#x4E0A;&#x5E76;&#x6CA1;&#x6709;&#x5199;&#xFF0C;&#x662F;&#x9690;&#x85CF;&#x89C4;&#x5B9A;&#xFF01;&#x5982;&#x679C;&#x5199;&#x4E86;&#xFF0C;&#x7B14;&#x8005;&#x4E5F;&#x4E0D;&#x4F1A;&#x9009;&#x62E9; self-funding&#xFF01;&#x9009;&#x62E9;&#x4E86; self-funding &#x5E26;&#x6765;&#x7684;&#x540E;&#x679C;&#x662F;&#xFF1A;</p>
<ol>
<li>&#x9700;&#x8981;&#x989D;&#x5916;&#x518D;&#x51C6;&#x5907;&#x7B2C;&#x4E8C;&#x5E74;&#x7684;&#x6750;&#x6599;&#x8BC1;&#x660E;&#xFF0C;&#x4F5C;&#x4E3A;&#x8865;&#x5145;&#x6750;&#x6599;&#x518D;&#x63D0;&#x4EA4;&#x4E00;&#x904D;&#x3002;</li>
<li>&#x63D0;&#x4EA4;&#x5B8C;&#x8865;&#x5145;&#x6750;&#x6599;&#x4EE5;&#x540E;&#xFF0C;&#x8FD8;&#x8981;&#x518D;&#x7B49;&#x5F85;&#x4E00;&#x5468;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x5B66;&#x6821;&#x5BA1;&#x6838;&#x8865;&#x5145;&#x6750;&#x6599;&#x3002;</li>
</ol>
<p>&#x8FD9; 2 &#x6761;&#x90FD;&#x5F88;&#x201C;&#x8981;&#x547D;&#x201D;&#x3002;&#x7B2C;&#x4E00;&#x6761;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x7684;&#x5B58;&#x6B3E;&#x4E0D;&#x591A;&#xFF0C;double &#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x53EF;&#x80FD;&#x4F1A;&#x8BA9;&#x4F60;&#x6709;&#x70B9;&#x5403;&#x4E0D;&#x6D88;&#xFF0C;150W &#x6216;&#x8005;&#x66F4;&#x591A;&#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x5BF9;&#x4E8E;&#x666E;&#x901A;&#x5BB6;&#x5EAD;&#x6765;&#x8BF4;&#xFF0C;&#x4E00;&#x53E3;&#x6C14;&#x62FF;&#x51FA;&#x6765;&#x975E;&#x5E38;&#x4E0D;&#x5BB9;&#x6613;&#xFF0C;&#x5C31;&#x7B97;&#x6709;&#x8FD9;&#x4E48;&#x4E00;&#x7B14;&#x94B1;&#xFF0C;&#x4E5F;&#x4E0D;&#x592A;&#x53EF;&#x80FD;&#x653E;&#x5728;&#x94F6;&#x884C;&#x6D3B;&#x671F;&#x8D26;&#x6237;&#x91CC;&#xFF0C;&#x4E5F;&#x4F1A;&#x5206;&#x6563;&#x5728;&#x5404;&#x4E2A;&#x6295;&#x8D44;&#x7406;&#x8D22;&#xFF0C;&#x57FA;&#x91D1;&#x80A1;&#x7968;&#x7684;&#x8D26;&#x6237;&#x4E2D;&#x3002;&#xFF08;&#x5F53;&#x7136;&#x4E5F;&#x6709;&#x8EAB;&#x4EF7;&#x4E0A;&#x5341;&#x4EBF;&#x7684;&#x5BB6;&#x5EAD;&#xFF0C;150W &#x73B0;&#x91D1;&#x76F4;&#x63A5;&#x653E;&#x5728;&#x5BB6;&#x91CC;&#x4F5C;&#x4E3A;&#x96F6;&#x82B1;&#x94B1;&#xFF0C;&#x8FD9;&#x79CD;&#x4EBA;&#x9664;&#x5916;&#xFF09;&#x4ECE;&#x5404;&#x79CD;&#x5206;&#x6563;&#x7684;&#x8D26;&#x6237;&#x4E2D;&#x53D6;&#x94B1;&#x63D0;&#x6B3E;&#xFF0C;&#x6765;&#x56DE;&#x4E5F;&#x9700;&#x8981;&#x82B1;&#x8D39;&#x51E0;&#x5929;&#x7684;&#x65F6;&#x95F4;&#x3002;</p>
<p>&#x7B2C;&#x4E8C;&#x6761;&#xFF0C;&#x5BF9;&#x4E8E; CMU &#x5BA1;&#x6838; I-20 &#x6750;&#x6599;&#x5F3A;&#x884C;&#x5361; 6 &#x5468;&#x7684;&#x5B66;&#x6821;&#x6765;&#x8BF4;&#xFF0C;&#x8865;&#x5145;&#x4E00;&#x6B21;&#x6750;&#x6599;&#x610F;&#x5473;&#x7740;&#x4F60;&#x7684; I-20 &#x6750;&#x6599;&#x6279;&#x4E0B;&#x6765;&#x7684;&#x65F6;&#x95F4;&#x66F4;&#x957F;&#x3002;&#x91CD;&#x65B0;&#x63D0;&#x4EA4;&#x6750;&#x6599;&#x4EE5;&#x540E;&#xFF0C;&#x5B66;&#x6821;&#x8FD8;&#x8981;&#x4E00;&#x5468;&#x65F6;&#x95F4;&#x5BA1;&#x6838;&#x4F60;&#x7684;&#x8865;&#x5145;&#x6750;&#x6599;&#x3002;&#x6700;&#x7EC8;&#x6750;&#x6599;&#x5BA1;&#x6279;&#x4E0B;&#x6765;&#x7684;&#x65F6;&#x95F4;&#x9700;&#x8981; 7 &#x5468;&#x534A;&#xFF0C;&#x63A5;&#x8FD1; 2 &#x4E2A;&#x6708; 8 &#x5468;&#x7684;&#x65F6;&#x95F4;&#x4E86;&#x3002;&#x7EFC;&#x4E0A;&#x539F;&#x56E0;&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x975E;&#x8981;&#x9009;&#x62E9; self-funding&#xFF0C;&#x8BF7;&#x4E00;&#x5B9A;&#x5728;&#x7B2C;&#x4E00;&#x6B21;&#x63D0;&#x4EA4;&#x6750;&#x6599;&#x65F6;&#x63D0;&#x524D;&#x51C6;&#x5907;&#x8DB3;&#x591F;&#x591A;&#x7684;&#x5B58;&#x6B3E;&#x8BC1;&#x660E;&#xFF0C;&#x4E0D;&#x8981;&#x4E2D;&#x95F4;&#x6765;&#x56DE;&#x6298;&#x817E;&#xFF01;</p>
<p>&#x5173;&#x4E8E;&#x5E94;&#x5C4A;&#x6BD5;&#x4E1A;&#x5927;&#x5B66;&#x751F;&#xFF0C;&#x6B63;&#x5E38;&#x7684;&#x5E94;&#x8BE5;&#x5199; parental sponsorship&#xFF0C;&#x5982;&#x679C;&#x5199; self-funding &#x53CD;&#x800C; F-1 &#x9762;&#x7B7E;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x88AB;&#x62D2;&#xFF0C;&#x9762;&#x7B7E;&#x5B98; OV &#x95EE;&#x4F60;&#xFF0C;&#x201C;&#x4F60;&#x521A;&#x521A;&#x6BD5;&#x4E1A;&#xFF0C;&#x8FD9; 150W &#x73B0;&#x91D1;&#x54EA;&#x91CC;&#x6765;&#x7684;&#xFF1F;&#x201D;&#xFF0C;&#x4E5F;&#x8BB8;&#x4F60;&#x53EF;&#x4EE5;&#x5F88;&#x597D;&#x7684;&#x89E3;&#x91CA;&#xFF08;&#x201C;&#x8FD9;&#x662F;&#x6211;&#x4E70;&#x5F69;&#x7968;&#x4E2D;&#x5927;&#x5956;&#x201D;&#xFF0C;&#x201C;&#x8FD9;&#x662F;&#x6211;&#x5927;&#x5B66;&#x521B;&#x4E1A;&#x8D5A;&#x7684;&#x7B2C;&#x4E00;&#x6876;&#x91D1;&#x201D;&#xFF0C;&#x201C;&#x8FD9;&#x662F;&#x6211;&#x7092;&#x80A1;&#x7968;&#x57FA;&#x91D1;&#x548C;&#x7535;&#x5B50;&#x8D27;&#x5E01;&#x8D5A;&#x6765;&#x7684;&#x201D;&#xFF09;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4F60;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x9762;&#x7B7E;&#xFF0C;&#x76F4;&#x63A5; Rej&#xFF0C;&#x5982;&#x679C;&#x5728;&#x56FD;&#x5185;&#x9762;&#x7B7E;&#xFF0C;&#x53EF;&#x80FD;&#x88AB; Check &#x8D44;&#x91D1;&#x6765;&#x6E90;&#x3002;&#x6240;&#x4EE5;&#x5E94;&#x5C4A;&#x6BD5;&#x4E1A;&#x5927;&#x5B66;&#x751F;&#x8BF7;&#x522B;&#x72B9;&#x8C6B;&#xFF0C;&#x52A1;&#x5FC5;&#x5199; parental sponsorship&#x3002;&#x81F3;&#x4E8E;&#x5DE5;&#x4F5C;&#x515A;&#xFF0C;&#x5199;&#x54EA;&#x4E2A;&#x90FD;&#x53EF;&#x4EE5;&#xFF0C;&#x4F46;&#x662F;&#x9700;&#x8981;&#x6CE8;&#x610F; &#x4E00;&#x65E6;&#x5199;&#x4E86; self-funding &#x9700;&#x8981;&#x63D0;&#x4F9B;&#x6574;&#x4E2A;&#x9879;&#x76EE;&#x5168;&#x989D;&#x7684;&#x8D22;&#x4EA7;&#x8BC1;&#x660E;&#x3002;</p>
<h3 id="6-f-1-%E9%9D%A2%E7%AD%BE">6. F-1 &#x9762;&#x7B7E;</h3>
<p>&#x8FD9;&#x662F;&#x53BB;&#x7F8E;&#x5E1D;&#x8BFB;&#x4E66;&#x524D;&#x7684;&#x6700;&#x540E;&#x4E00;&#x6B65;&#xFF0C;&#x62FF;&#x5230;&#x5B66;&#x6821;&#x53D1;&#x7ED9;&#x4F60;&#x7684; I-20 &#x6750;&#x6599;&#x4EE5;&#x540E;&#xFF0C;&#x5728;&#x7F8E;&#x56FD;&#x4F7F;&#x9986;&#x6CE8;&#x518C;&#x597D;&#x81EA;&#x5DF1;&#x7684;&#x8D26;&#x53F7;&#x5E76;&#x586B;&#x5199; DS-160 &#x4EE5;&#x540E;&#xFF0C;&#x4FBF;&#x53EF;&#x4EE5;&#x9884;&#x7EA6; F-1 &#x975E;&#x79FB;&#x6C11;&#x9762;&#x7B7E;&#x4E86;&#x3002;&#x9700;&#x8981;&#x51C6;&#x5907;&#x7684;&#x6750;&#x6599;&#x7B14;&#x8005;&#x6574;&#x7406;&#x4E86;&#x4E00;&#x4E0B;&#xFF0C;&#x5982;&#x4E0B;&#xFF1A;</p>
<table>
<thead>
<tr>
<th>&#x5E8F;&#x53F7;</th>
<th>&#x6240;&#x9700;&#x6750;&#x6599;</th>
<th>&#x6CE8;&#x610F;&#x4E8B;&#x9879;</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>&#x7B7E;&#x8BC1;&#x7167;&#x7247;</td>
<td>&#x8BF7;&#x81F3;&#x6B63;&#x89C4;&#x7167;&#x76F8;&#x9986;&#x62CD;&#x6444;&#xFF0C;&#x7535;&#x5B50;&#x7248;&#x5C3A;&#x5BF8;&#x4E3A; 51*51&#x3001;&#x767D;&#x5E95;&#xFF0C;&#x9732;&#x51FA;&#x53CC;&#x8033;&#xFF0C;&#x540C;&#x65F6;&#x6D17;&#x4E24;&#x5F20;&#x9762;&#x7B7E;&#x65F6;&#x643A;&#x5E26;</td>
</tr>
<tr>
<td>2</td>
<td>DS-160 &#x786E;&#x8BA4;&#x9875;</td>
<td>&#x8BF7;&#x586B;&#x5199;&#x4E2D;&#x6587;&#x8868;&#x683C;&#x53D1;&#x9001;&#x81F3; &#x540E;&#x671F;&#x987E;&#x95EE;&#x90AE;&#x7BB1;</td>
</tr>
<tr>
<td>3</td>
<td>&#x62A4;&#x7167;&#x539F;&#x4EF6;</td>
<td>&#x672C;&#x4EBA;&#x9700;&#x8981;&#x7B7E;&#x5B57;</td>
</tr>
<tr>
<td>4</td>
<td>&#x6237;&#x53E3;&#x672C;&#x539F;&#x4EF6;</td>
<td>&#x5982;&#x7533;&#x8BF7;&#x4EBA;&#x7684;&#x6237;&#x53E3;&#x4E0E;&#x7236;&#x6BCD;&#x4E0D;&#x5728;&#x4E00;&#x4E2A;&#x6237;&#x53E3;&#x672C;&#x4E0A;&#xFF0C;&#x5219;&#x4E24;&#x4E2A;&#x6237;&#x53E3;&#x672C;&#x90FD;&#x8981;&#x63D0;&#x4F9B;</td>
</tr>
<tr>
<td>5</td>
<td>&#x7B7E;&#x8BC1;&#x9884;&#x7EA6;&#x786E;&#x8BA4;&#x4FE1;&#x53CA;&#x7B7E;&#x8BC1;&#x8D39; 1008 &#x4EBA;&#x6C11;&#x5E01;</td>
<td>&#x53EF;&#x4F7F;&#x7528;&#x501F;&#x8BB0;&#x5361;&#x5728;&#x7EBF;&#x652F;&#x4ED8;&#xFF0C;&#x6216;&#x5B66;&#x751F;&#x672C;&#x4EBA;&#x643A;&#x5E26;&#x62A4;&#x7167;&#x548C;&#x9884;&#x7EA6;&#x7F16;&#x53F7;&#x5728;&#x4E2D;&#x4FE1;&#x94F6;&#x884C;&#x67DC;&#x53F0;&#x7F34;&#x7EB3;&#xFF0C;&#x4FDD;&#x7559;&#x597D;&#x6536;&#x636E;</td>
</tr>
<tr>
<td>6</td>
<td>200 &#x7F8E;&#x91D1; SEVIS &#x8D39;&#x6536;&#x636E;</td>
<td>&#x63D0;&#x4F9B;&#x53CC;&#x5E01;&#x4FE1;&#x7528;&#x5361;&#x4FE1;&#x606F;&#xFF0C;&#x4EA4;&#x8D39;&#x5355;&#x636E;&#x987B;&#x5728;&#x7EBF;&#x6253;&#x5370;&#xFF0C;&#x5E76;&#x4FDD;&#x7559;</td>
</tr>
<tr>
<td>7</td>
<td>&#x5F55;&#x53D6;&#x901A;&#x77E5;&#x4E66;</td>
<td>&#x5982;&#x5B66;&#x6821;&#x6CA1;&#x6709;&#x90AE;&#x5BC4;&#x901A;&#x77E5;&#x4E66;&#x539F;&#x4EF6;&#xFF0C;&#x53EF;&#x4F7F;&#x7528;&#x6253;&#x5370;&#x7248;</td>
</tr>
<tr>
<td>8</td>
<td>I-20 &#x8868;&#x539F;&#x4EF6;</td>
<td>&#x9700;&#x8981;&#x5B66;&#x751F;&#x672C;&#x4EBA;&#x7B7E;&#x540D;</td>
</tr>
<tr>
<td>9</td>
<td>&#x82F1;&#x8BED;&#x8003;&#x8BD5;&#x8BC1;&#x660E;&#x539F;&#x4EF6;</td>
<td>IELTS/TOEFL/GRE/GMAT&#x7B49;&#x6210;&#x7EE9;&#x5355;&#xFF08;&#x53EF;&#x5728;&#x7F51;&#x4E0A;&#x6253;&#x5370;&#xFF09;&#xFF0C;&#x82E5;&#x5DF2;&#x62A5;&#x540D;&#x8FD8;&#x672A;&#x8003;&#x8BD5;&#xFF0C;&#x53EF;&#x4EE5;&#x7F51;&#x4E0A;&#x6253;&#x5370;&#x62A5;&#x540D;&#x4FE1;&#x606F;</td>
</tr>
<tr>
<td>10</td>
<td>&#x5728;&#x8BFB;&#x8BC1;&#x660E;&#x539F;&#x4EF6;/&#x5B66;&#x751F;&#x8BC1;</td>
<td>&#x9002;&#x7528;&#x4E8E;&#x5728;&#x8BFB;&#x5B66;&#x751F;</td>
</tr>
<tr>
<td>11</td>
<td>&#x6BD5;&#x4E1A;&#x8BC1;/&#x5B66;&#x4F4D;&#x8BC1;&#x539F;&#x4EF6;</td>
<td>&#x9002;&#x7528;&#x4E8E;&#x6BD5;&#x4E1A;&#x5B66;&#x751F;</td>
</tr>
<tr>
<td>12</td>
<td>&#x6210;&#x7EE9;&#x5355;&#x539F;&#x4EF6;</td>
<td>&#x4E2D;&#x82F1;&#x6587;&#x539F;&#x4EF6;</td>
</tr>
<tr>
<td>13</td>
<td>&#x4E2A;&#x4EBA;&#x7B80;&#x5386;&#x548C;&#x5B66;&#x4E60;&#x8BA1;&#x5212;</td>
<td>&#x82F1;&#x6587;</td>
</tr>
<tr>
<td>14</td>
<td>&#x62C5;&#x4FDD;&#x4EBA;&#x6536;&#x5165;&#x8BC1;&#x660E;&#xFF08;&#x5982;&#x7236;&#x6BCD;&#x90FD;&#x5728;&#x804C;&#x5219;&#x9700;&#x8981;&#x63D0;&#x4F9B;&#x4E24;&#x4EBA;&#x7684;&#xFF09;</td>
<td>&#x6536;&#x5165;&#x8BC1;&#x660E;&#x6A21;&#x677F;&#x53E6;&#x884C;&#x53D1;&#x9001;&#x81F3;&#x5B66;&#x751F;&#x90AE;&#x7BB1;&#xFF1B;&#x6253;&#x5370;&#x5728;&#x6709;&#x5355;&#x4F4D;&#x62AC;&#x5934;&#x7684;&#x4FE1;&#x7EB8;&#x4E0A;&#xFF0C;&#x76D6;&#x516C;&#x7AE0;&#x6216;&#x8D22;&#x52A1;&#x7AE0;&#x3002;&#x7236;&#x6BCD;&#x53CC;&#x65B9;&#x7684;&#x5E74;&#x85AA;&#x5EFA;&#x8BAE;&#x5728; 20 &#x4E07;&#x4EBA;&#x6C11;&#x5E01;&#x4EE5;&#x4E0A;&#x3002;&#x6216;&#x4F9D;&#x636E;&#x81EA;&#x5DF1;&#x5355;&#x4F4D;&#x7684;&#x89C4;&#x5B9A;&#x548C;&#x683C;&#x5F0F;&#x5F00;&#x5177;&#xFF0C;&#x5185;&#x5BB9;&#x8981;&#x5305;&#x62EC;:&#x59D3;&#x540D;&#x3001;&#x804C;&#x52A1;&#x3001;&#x4EFB;&#x671F;&#xFF0C;&#x5E74;&#x603B;&#x6536;&#x5165;&#x53CA;&#x7EC4;&#x6210;&#x90E8;&#x5206;&#x3001;&#x8BC1;&#x660E;&#x4EBA;&#x7B49;&#x3002;</td>
</tr>
<tr>
<td>15</td>
<td>&#x5B58;&#x6B3E;&#x8BC1;&#x660E;&#x539F;&#x4EF6;</td>
<td>&#x5EFA;&#x8BAE; 40 &#x4E07;&#x4EBA;&#x6C11;&#x5E01;&#x4EE5;&#x4E0A;&#xFF0C;&#x4E0E;&#x5B58;&#x5355;&#x76F8;&#x7B26;&#xFF0C;&#x6709;&#x6548;&#x671F;&#x6216;&#x51BB;&#x7ED3;&#x671F;&#x9700;&#x8986;&#x76D6;&#x7B7E;&#x8BC1;&#x65E5;&#x671F;</td>
</tr>
<tr>
<td>16</td>
<td>&#x623F;&#x4EA7;&#x8BC1;&#x660E;&#x539F;&#x4EF6;</td>
<td>&#x4ECD;&#x5728;&#x8FD8;&#x8D37;&#x6B3E;&#x7684;&#x623F;&#x4EA7;&#x8BC1;&#x4E0D;&#x8981;&#x63D0;&#x4F9B;&#xFF1B;&#x6709;&#x591A;&#x5904;&#x623F;&#x4EA7;&#x53EF;&#x63D0;&#x4F9B;&#x591A;&#x4E2A;&#x8BC1;&#x660E;</td>
</tr>
<tr>
<td>17</td>
<td>&#x5B58;&#x5355;&#x6216;&#x5B58;&#x6298;&#x539F;&#x4EF6;</td>
<td>&#x5B58;&#x671F;&#x4E0D;&#x9650;&#xFF0C;&#x603B;&#x91D1;&#x989D;&#x5E94;&#x4E3A;&#x901A;&#x77E5;&#x4E66;&#x6216; I-20 &#x4E0A;&#x663E;&#x793A;&#x7684;&#x4E00;&#x5E74;&#x7684;&#x603B;&#x8D39;&#x7528;&#xFF0C;&#x5EFA;&#x8BAE; 40 &#x4E07;&#x4EBA;&#x6C11;&#x5E01;&#x4EE5;&#x4E0A;&#xFF0C;&#x8D8A;&#x591A;&#x8D8A;&#x597D;</td>
</tr>
<tr>
<td>18</td>
<td>&#x5229;&#x606F;&#x5355;&#x539F;&#x4EF6;</td>
<td>&#x6240;&#x63D0;&#x4F9B;&#x5B58;&#x5355;&#x5982;&#x6709;&#x8F6C;&#x5B58;&#x8BB0;&#x5F55;&#x6216;&#x5373;&#x5C06;&#x8F6C;&#x5B58;&#xFF0C;&#x8BF7;&#x4FDD;&#x7559;&#x539F;&#x6765;&#x7684;&#x53D6;&#x6B3E;&#x5229;&#x606F;&#x5355;&#x548C;&#x539F;&#x5B58;&#x5355;&#x590D;&#x5370;&#x4EF6;&#xFF0C;&#x5E76;&#x63D0;&#x4F9B;</td>
</tr>
<tr>
<td>19</td>
<td>&#x8F66;&#x4EA7;&#x8BC1;&#x660E;</td>
<td>&#x884C;&#x9A76;&#x8BC1;&#x590D;&#x5370;&#x4EF6;&#x3001;&#x8D2D;&#x8F66;&#x53D1;&#x7968;&#x539F;&#x4EF6;</td>
</tr>
<tr>
<td>20</td>
<td>&#x540D;&#x7247;</td>
<td>&#x5982;&#x6709;&#xFF0C;&#x53EF;&#x63D0;&#x4F9B;&#xFF0C;&#x6CE8;&#x610F;&#x6838;&#x5BF9;&#x540D;&#x7247;&#x4E0A;&#x804C;&#x52A1;&#x3001;&#x7535;&#x8BDD;&#x3001;&#x5730;&#x5740;&#x4E0E;&#x6536;&#x5165;&#x8BC1;&#x660E;&#x662F;&#x5426;&#x4E00;&#x81F4;</td>
</tr>
<tr>
<td>21</td>
<td>&#x623F;&#x5C4B;&#x51FA;&#x79DF;&#x5408;&#x540C;</td>
<td>&#x623F;&#x4EA7;&#x8BC1;&#x539F;&#x4EF6;&#x3001;&#x5408;&#x540C;&#x539F;&#x4EF6;&#x3001;&#x6536;&#x636E;&#xFF08;&#x5982;&#x623F;&#x5C4B;&#x79DF;&#x8D41;&#x6536;&#x5165;&#x5360;&#x5BB6;&#x5EAD;&#x603B;&#x6536;&#x5165;&#x8F83;&#x5927;&#x6BD4;&#x4F8B;&#xFF09;</td>
</tr>
<tr>
<td>22</td>
<td>&#x5168;&#x5BB6;&#x798F;</td>
<td>&#x8BC1;&#x660E;&#x7533;&#x8BF7;&#x4EBA;&#x548C;&#x62C5;&#x4FDD;&#x4EBA;&#x4E4B;&#x95F4;&#x5173;&#x7CFB;&#x7684;&#x8F85;&#x52A9;&#x6750;&#x6599;&#xFF1B;&#x6E05;&#x6670;&#x751F;&#x6D3B;&#x7167;&#x5373;&#x53EF;</td>
</tr>
<tr>
<td>23</td>
<td>&#x5176;&#x5B83;&#x6750;&#x6599;</td>
<td>&#x5176;&#x5B83;&#x4EFB;&#x4F55;&#x4F60;&#x8BA4;&#x4E3A;&#x5BF9;&#x8BC1;&#x660E;&#x5B66;&#x4E60;&#x80FD;&#x529B;&#x3001;&#x56FD;&#x5185;&#x7D27;&#x5BC6;&#x8054;&#x7CFB;&#x3001;&#x793E;&#x4F1A;&#x5730;&#x4F4D;&#x6709;&#x6240;&#x5E2E;&#x52A9;&#x7684;&#x6587;&#x4EF6;&#x3002;</td>
</tr>
<tr>
<td>&#x82E5;&#x62C5;&#x4FDD;&#x4EBA;&#x62E5;&#x6709;&#x4E2A;&#x4EBA;&#x516C;&#x53F8;&#xFF0C;&#x8FD8;&#x987B;&#x63D0;&#x4F9B;&#x4EE5;&#x4E0B;&#x8D44;&#x6599;</td>
<td></td>
<td></td>
</tr>
<tr>
<td>24</td>
<td>&#x8425;&#x4E1A;&#x6267;&#x7167;</td>
<td>&#x5982;&#x7533;&#x8BF7;&#x4EBA;&#x6216;&#x62C5;&#x4FDD;&#x4EBA;&#x662F;&#x516C;&#x53F8;&#x6CD5;&#x4EBA;</td>
</tr>
<tr>
<td>25</td>
<td>&#x9A8C;&#x8D44;&#x62A5;&#x544A;</td>
<td>&#x5982;&#x5360;&#x6709;&#x80A1;&#x4EFD;&#xFF0C;&#x9700;&#x8981;&#x63D0;&#x4F9B;</td>
</tr>
<tr>
<td>26</td>
<td>&#x627F;&#x5305;/&#x5408;&#x4F5C;&#x5408;&#x540C;</td>
<td>&#x5982;&#x679C;&#x516C;&#x53F8;&#x7ECF;&#x8425;&#x6A21;&#x5F0F;&#x662F;&#x6302;&#x9760;&#x6216;&#x5176;&#x4ED6;&#x5F62;&#x5F0F;&#xFF0C;&#x9700;&#x8981;&#x63D0;&#x4F9B;</td>
</tr>
<tr>
<td>27</td>
<td>&#x80A1;&#x4E1C;&#x8BC1;&#x660E;/&#x5206;&#x7EA2;&#x8BC1;&#x660E;</td>
<td>&#x82E5;&#x6709;&#xFF0C;&#x5E76;&#x4E14;&#x5360;&#x5BB6;&#x5EAD;&#x6536;&#x5165;&#x8F83;&#x5927;&#x6BD4;&#x4F8B;&#x53EF;&#x63D0;&#x4F9B;</td>
</tr>
<tr>
<td>28</td>
<td>&#x7A0E;&#x5355;</td>
<td>&#x8FD1;2&#x5E74;&#x5982;&#x6709;&#x5927;&#x989D;&#x7A0E;&#x5355;&#xFF0C;&#x53EF;&#x63D0;&#x4F9B;</td>
</tr>
</tbody>
</table>
<h3 id="7-%E8%B5%B4%E7%BE%8E%E5%87%86%E5%A4%87%E5%BC%80%E5%AD%A6">7. &#x8D74;&#x7F8E;&#x51C6;&#x5907;&#x5F00;&#x5B66;</h3>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_34.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x6210;&#x529F;&#x62FF;&#x5230; F-1 &#x7B7E;&#x8BC1;&#x540E;&#xFF0C;&#x53BB;&#x7F8E;&#x56FD;&#x4E4B;&#x524D;&#x53EF;&#x4EE5;&#x628A;&#x623F;&#x5B50;&#x5728;&#x7F51;&#x4E0A;&#x79DF;&#x597D;&#xFF0C;&#x5982;&#x679C;&#x5408;&#x79DF; 2b2b&#xFF0C;&#x63D0;&#x524D;&#x627E;&#x597D;&#x5BA4;&#x53CB;&#x3002;&#x5982;&#x679C;&#x9700;&#x8981;&#x4E70;&#x8F66;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x9884;&#x8BA2;&#x4E86;&#x3002;&#x4E00;&#x822C;&#x5B66;&#x6821;&#x5BF9;&#x5373;&#x5C06;&#x5230;&#x6821;&#x7684;&#x56FD;&#x9645;&#x751F;&#x4F1A;&#x6709;&#x4E00;&#x4E9B;&#x8981;&#x6C42;&#xFF0C;&#x6BD4;&#x5982;&#x75AB;&#x82D7;&#x65B9;&#x9762;&#x7684;&#xFF0C;&#x4F53;&#x68C0;&#x65B9;&#x9762;&#x7684;&#x3002;&#x6309;&#x7167;&#x5404;&#x4E2A;&#x5B66;&#x6821;&#x7684;&#x8981;&#x6C42;&#x529E;&#x597D;&#x624B;&#x7EED;&#x5373;&#x53EF;&#x3002;&#x4E00;&#x822C;&#x5927;&#x5B66;&#x7684; Orientation &#x5728; 8 &#x6708; 15 &#x65E5; - 25 &#x65E5;&#x671F;&#x95F4;&#x3002;&#x6240;&#x4EE5;&#x6700;&#x597D; 8 &#x6708;&#x4E0A;&#x65EC;&#x5230;&#x8FBE;&#x7F8E;&#x56FD;&#xFF0C;&#x7A0D;&#x5FAE;&#x9002;&#x5E94;&#x51E0;&#x5929;&#xFF0C;&#x4E70;&#x70B9;&#x65E5;&#x5E38;&#x7528;&#x54C1;&#xFF0C;&#x4FBF;&#x8981;&#x5F00;&#x59CB; Orientation &#x4E86;&#x3002;&#x5982;&#x679C;&#x9996;&#x6B21;&#x524D;&#x5F80;&#x7F8E;&#x56FD;&#xFF0C;F-1 &#x7B7E;&#x8BC1;&#x53EA;&#x80FD;&#x5728; I-20 &#x8868;&#x4E0A;&#x6CE8;&#x660E;&#x7684;&#x5165;&#x5B66;&#x65E5;&#x671F;&#x524D; 30 &#x5929;&#x5185;&#x5165;&#x5883;&#x3002;</p>
<h2 id="%E5%9B%9B-%E5%90%8E%E7%96%AB%E6%83%85%E6%97%B6%E4%BB%A3%E4%B8%8B%E7%9A%84%E5%8F%98%E5%8C%96">&#x56DB;. &#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7684;&#x53D8;&#x5316;</h2>
<p>&#x81EA; 2020 &#x5E74; 1 &#x6708;&#x6B66;&#x6C49;&#x7206;&#x53D1;&#x75AB;&#x60C5;&#x4EE5;&#x540E;&#xFF0C;&#x5168;&#x56FD; TOEFL / GRE &#x7EBF;&#x4E0B;&#x8003;&#x573A;&#x5173;&#x95ED;&#x3002;&#x76F4;&#x5230; 2020 &#x5E74; 7 &#x6708;&#x624D;&#x6062;&#x590D;&#x3002;&#x7B14;&#x8005;&#x662F; 8 &#x6708;&#x624D;&#x62A2;&#x5230;&#x8D85;&#x504F;&#x8FDC;&#x5730;&#x533A;&#x7684;&#x7A00;&#x6709;&#x8003;&#x4F4D;&#xFF0C;&#x771F;&#x7684;&#x592A;&#x96BE;&#x4E86;&#x3002;9 &#x6708;&#x548C; 10 &#x6708;&#x5728;&#x4E2D;&#x56FD;&#x504F;&#x8FDC;&#x57CE;&#x5E02;&#x6765;&#x56DE;&#x5F80;&#x8FD4;&#x8D76;&#x8003;&#x7EBF;&#x4E0B; TOEFL &#x548C; GRE &#x8003;&#x8BD5;&#x3002;&#x6240;&#x5E78;&#x5728; 11 &#x6708;&#x201C;&#x7ED3;&#x675F;&#x201D;&#x4E86;&#x6218;&#x6597;&#x3002;&#x5176;&#x5B9E;&#x7B14;&#x8005;&#x6700;&#x7EC8;&#x5206;&#x6570;&#x4E5F;&#x4E0D;&#x9AD8;&#xFF0C;&#x672C;&#x6765;&#x8FD8;&#x6253;&#x7B97;&#x518D;&#x8003; 4 &#x6B21;&#xFF0C;&#x5237;&#x5237;&#x5206;&#x3002;&#x56E0;&#x5404;&#x79CD;&#x8D76; DDL&#xFF0C;&#x538B;&#x7F29;&#x4E86;&#x4E0D;&#x5C11;&#x65F6;&#x95F4;&#xFF0C;&#x53C8;&#x591A;&#x8003;&#x4E86; 2 &#x6B21;&#xFF0C;&#x5206;&#x6570;&#x90FD;&#x4E0D;&#x9AD8;&#xFF0C;&#x6700;&#x540E; 2 &#x6B21;&#x6CA1;&#x6709;&#x7EE7;&#x7EED;&#x8003;&#x4E86;&#xFF0C;&#x53D6;&#x6D88;&#x8003;&#x8BD5;&#x3002;&#x5EFA;&#x8BAE;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x7684;&#x8BFB;&#x8005;&#x80FD;&#x5728; 9 &#x6708;&#x524D;&#x89E3;&#x51B3;&#x5B8C; TOEFL &#x548C; GRE &#x4E24;&#x95E8;&#x8003;&#x8BD5;&#xFF0C;&#x5206;&#x6570;&#x8FBE;&#x5230; 105+ &#x548C; 325+&#x3002;&#x7B14;&#x8005;&#x8BED;&#x8A00;&#x5206;&#x6570;&#x51FA;&#x5206;&#x592A;&#x62D6;&#x6C93;&#x4E86;&#xFF0C;&#x59D1;&#x4E14;&#x4E0D;&#x80FD;&#x602A;&#x75AB;&#x60C5;&#x5F71;&#x54CD;&#xFF0C;&#x53EA;&#x80FD;&#x602A;&#x81EA;&#x5DF1;&#x82F1;&#x8BED;&#x5B9E;&#x529B;&#x5783;&#x573E;&#xFF0C;&#x5982;&#x679C;&#x81EA;&#x5DF1;&#x5B9E;&#x529B;&#x5F3A;&#x52B2;&#xFF0C;9 &#x6708;&#x7B2C;&#x4E00;&#x573A;&#x7EBF;&#x4E0B;&#x8003;&#x8BD5;&#x5C31;&#x5E94;&#x8BE5;&#x51FA;&#x5206;&#x4E86;&#x3002;&#x90A3;&#x4E48;&#x4ECE;&#x7F51;&#x7533;&#x9636;&#x6BB5;&#x5F00;&#x59CB;&#xFF0C;&#x804A;&#x804A;&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x6709;&#x54EA;&#x4E9B;&#x53D8;&#x5316;&#x3002;</p>
<h3 id="1-%E7%94%B3%E8%AF%B7%E4%BA%BA%E6%95%B0%E6%9A%B4%E5%A2%9E%EF%BC%8C%E5%86%85%E5%8D%B7%E4%B8%8A%E5%A4%A9">1. &#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x66B4;&#x589E;&#xFF0C;&#x5185;&#x5377;&#x4E0A;&#x5929;</h3>
<p><strong>&#x5168;&#x7403;&#x75AB;&#x60C5;&#x597D;&#x8F6C;&#x662F;&#x5BFC;&#x81F4; 2021 &#x5E74;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x6570;&#x91CF;&#x66B4;&#x589E; 50% &#x7684;&#x4E3B;&#x56E0;</strong>&#xFF1A;2021&#x5E74;&#xFF0C;&#x6211;&#x56FD;&#x5B9E;&#x73B0;&#x4E86;&#x56FD;&#x5185;&#x75AB;&#x60C5;&#x7684;&#x5168;&#x9762;&#x63A7;&#x5236;&#xFF0C;&#x591A;&#x65E5;&#x5B9E;&#x73B0;&#x5168;&#x56FD;&#x96F6;&#x589E;&#x60C5;&#x51B5;&#xFF0C;&#x6BCF;&#x65E5;&#x65B0;&#x589E;&#x57FA;&#x672C;&#x4E3A;&#x5916;&#x6765;&#x8F93;&#x5165;&#x75C5;&#x4F8B;&#x3002;&#x56FD;&#x5185;&#x5B89;&#x5168;&#x8212;&#x9002;&#x7684;&#x81EA;&#x7531;&#x73AF;&#x5883;&#x7ED9;&#x4F17;&#x591A;&#x5B66;&#x8005;&#x9020;&#x6210;&#x4E86;&#x5168;&#x7403;&#x5B89;&#x5168;&#x7684;&#x6682;&#x65F6;&#x6027;&#x5047;&#x8C61;&#xFF0C;&#x8FD9;&#x4E5F;&#x91CD;&#x65B0;&#x70B9;&#x71C3;&#x4E86;&#x8BB8;&#x591A;&#x4EBA;&#x7684;&#x51FA;&#x56FD;&#x7559;&#x5B66;&#x68A6;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_2.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p><strong>&#x4FA5;&#x5E78;&#x5FC3;&#x7406;&#x5BFC;&#x81F4; 2021 &#x5E74;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x6570;&#x91CF;&#x66B4;&#x589E; 50% &#x7684;&#x8BF1;&#x56E0;</strong>&#xFF1A;&#x56FD;&#x9645;&#x7559;&#x5B66;&#x751F;&#x5B66;&#x8D39;&#x662F;&#x56FD;&#x5916;&#x5404;&#x5927;&#x9AD8;&#x6821;&#x7ECF;&#x8D39;&#x7684;&#x4E3B;&#x8981;&#x6765;&#x6E90;&#x4E4B;&#x4E00;&#x3002;&#x56E0;&#x6B64;&#xFF0C;2021 &#x5E74;&#x4E16;&#x754C;&#x5404;&#x5927;&#x9AD8;&#x6821;&#x9010;&#x6E10;&#x653E;&#x5BBD;&#x7559;&#x5B66;&#x751F;&#x5165;&#x5B66;&#x653F;&#x7B56;&#x6765;&#x5438;&#x5F15;&#x56FD;&#x9645;&#x7559;&#x5B66;&#x751F;&#xFF0C;&#x54C8;&#x4F5B;&#x3001;&#x9EBB;&#x7701;&#x3001;&#x65AF;&#x5766;&#x798F;&#x7B49;&#x7F8E;&#x56FD;&#x77E5;&#x540D;&#x9AD8;&#x6821;&#x5BA3;&#x5E03;&#x4E0D;&#x518D;&#x5F3A;&#x5236;&#x8981;&#x6C42;&#x63D0;&#x4EA4; SAT&#x3001;ACT&#x3001;GRE &#x7B49;&#x6807;&#x5316;&#x8003;&#x8BD5;&#x6210;&#x7EE9;&#xFF08;&#x5165;&#x5B66;&#x5FC5;&#x987B;&#x8003;&#x8BD5;&#xFF09;&#x3002;&#x9664;&#x6B64;&#x4E4B;&#x5916;&#xFF0C;&#x5F88;&#x591A;&#x4EBA;&#x5B58;&#x5728; 2021 &#x5E74;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x7ADE;&#x4E89;&#x4E0D;&#x5927;&#xFF0C;&#x8FDB;&#x5165;&#x4E16;&#x754C;&#x540D;&#x6821;&#x51E0;&#x7387;&#x589E;&#x52A0;&#x7684;&#x4FA5;&#x5E78;&#x5FC3;&#x7406;&#x3002;&#x5BF9;&#x4E8E;&#x4ECA;&#x5E74;&#x7684;&#x7533;&#x8BF7;&#x5B66;&#x751F;&#x800C;&#x8A00;&#xFF0C;<strong>&#x722C;&#x85E4;&#x4F1A;&#x53D8;&#x5F97;&#x66F4;&#x56F0;&#x96BE;</strong>&#x3002;&#x8FD9;&#x5C31;&#x5BFC;&#x81F4;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x66B4;&#x589E;&#xFF0C;&#x9662;&#x6821;&#x4E0D;&#x5F97;&#x4E0D;&#x63A8;&#x8FDF;&#x5F55;&#x53D6;&#x65F6;&#x95F4;&#x3002;</p>
<p>20fall &#x8FD9;&#x4E00;&#x5C4A;&#x7684;&#x7559;&#x5B66;&#x751F;&#x56E0;&#x4E3A;&#x75AB;&#x60C5;&#x6CA1;&#x6709;&#x51FA;&#x56FD;&#xFF0C;&#x4ECA;&#x5E74; 21fall &#x4ED6;&#x4EEC;&#x7EE7;&#x7EED;&#x7533;&#x8BF7;&#xFF0C;&#x5BFC;&#x81F4;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x589E;&#x52A0;&#xFF1B;20fall &#x7531;&#x4E8E;&#x624B;&#x63E1;&#x4E00;&#x4E2A; offer&#xFF0C;&#x518D;&#x6B21;&#x7533;&#x8BF7; 21fall &#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x5305;&#x88B1;&#xFF0C;&#x7533;&#x8BF7;&#x4E0D;&#x4E0A;&#x66F4;&#x597D;&#x7684;&#x5B66;&#x6821;&#xFF0C;&#x7EE7;&#x7EED;&#x8BFB;&#x5F53;&#x524D;&#x7684;&#x5B66;&#x6821;&#xFF0C;&#x5982;&#x679C;&#x80FD;&#x7533;&#x8BF7;&#x4E0A;&#x66F4;&#x597D;&#x7684;&#x5B66;&#x6821;&#xFF0C;21fall &#x5373;&#x5165;&#x5B66;&#x66F4;&#x597D;&#x7684;&#x5B66;&#x6821;&#x3002;&#x6240;&#x4EE5;&#x4F1A;&#x51FA;&#x73B0;&#x624B;&#x63E1; 20fall offer &#x7684;&#x5B66;&#x751F;&#x7EE7;&#x7EED;&#x7533;&#x8BF7; 21fall &#x66F4;&#x597D;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x5403;&#x7740;&#x7897;&#x91CC;&#xFF0C;&#x770B;&#x7740;&#x9505;&#x91CC;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x4E24;&#x5C4A;&#x6324;&#x4E00;&#x5C4A;&#x5BFC;&#x81F4;&#x6218;&#x51B5;&#x5F02;&#x5E38;&#x60E8;&#x70C8;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_3.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x5BBE;&#x5915;&#x6CD5;&#x5C3C;&#x4E9A;&#x5927;&#x5B66;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x8FBE;&#x5230; 55992 &#x4EBA;&#xFF0C;&#x6BD4;&#x4E0A;&#x5E74;&#x589E;&#x52A0;&#x4E86; 34%&#xFF01;&#x4F46;&#x5B66;&#x6821;&#x5E76;&#x4E0D;&#x6253;&#x7B97;&#x6269;&#x62DB;&#xFF0C;&#x8FD9;&#x5C06;&#x5BFC;&#x81F4;&#x5F55;&#x53D6;&#x7387;&#x76F4;&#x964D;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_4.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x666E;&#x6797;&#x65AF;&#x987F;&#x5927;&#x5B66;&#x7684;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x589E;&#x52A0;&#x4E86; 15%&#xFF0C;&#x54C8;&#x4F5B;&#x5927;&#x5B66;&#x6536;&#x5230;&#x4E86;&#x8D85;&#x8FC7; 57,000 &#x4EFD;&#x7533;&#x8BF7;&#xFF0C;&#x589E;&#x957F;&#x4E86; 42%&#xFF0C;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x8D85;&#x51FA;&#x65B0;&#x9AD8;&#x3002;&#x7EBD;&#x7EA6;&#x5927;&#x5B66; NYU &#x66F4;&#x662F;&#x521B;&#x4E0B;&#x4E86;&#x4EBA;&#x6570;&#x8D85;&#x5341;&#x4E07;&#x8FD9;&#x6837;&#x60CA;&#x4EBA;&#x7684;&#x672C;&#x79D1;&#x7533;&#x8BF7;&#x91CF;&#xFF0C;&#x5176;&#x4E2D; 22000 &#x6765;&#x81EA;&#x4E8E;&#x56FD;&#x9645;&#x5B66;&#x751F;&#xFF0C;&#x8F83;&#x53BB;&#x5E74;&#x589E;&#x52A0;&#x4E86; 22%&#xFF01;&#x8FD9;&#x662F;&#x7EBD;&#x7EA6;&#x5927;&#x5B66;&#x8FDE;&#x7EED; 14 &#x5E74;&#x6765;&#x521B;&#x7EAA;&#x5F55;&#x7684;&#x7533;&#x8BF7;&#x6570;&#x91CF;&#xFF0C;&#x5728;&#x6B64;&#x671F;&#x95F4;&#xFF0C;&#x7533;&#x8BF7;&#x6570;&#x91CF;&#x589E;&#x957F;&#x4E86;&#x4E00;&#x500D;&#x4EE5;&#x4E0A;&#xFF01;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_5.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_6.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x4E0D;&#x8FC7;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x6700;&#x9AD8;&#x7684;&#x8FD8;&#x8981;&#x6570; UCLA&#xFF0C;&#x603B;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x8FBE;&#x5230; 249855 &#x4EBA;&#xFF0C;&#x6BD4;&#x53BB;&#x5E74;&#x589E;&#x52A0;&#x4E86; 16.1%&#xFF0C;&#x56FD;&#x9645;&#x751F;&#x7533;&#x8BF7;&#x7387;&#x589E;&#x9AD8;&#x4E86; 10%&#x3002;&#x9762;&#x5BF9;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x7684;&#x66B4;&#x589E;&#xFF0C;&#x8D1F;&#x8D23;&#x62DB;&#x751F;&#x7684;&#x5DE5;&#x4F5C;&#x91CF;&#x4E5F;&#x968F;&#x4E4B;&#x589E;&#x591A;&#x3002;&#x54C8;&#x4F5B;&#x3001;&#x8036;&#x9C81;&#x3001;&#x54E5;&#x5927;&#x3001;&#x5E03;&#x6717;&#x3001;&#x5BBE;&#x5927;&#x3001;&#x5EB7;&#x5948;&#x5C14;&#x3001;&#x666E;&#x6797;&#x65AF;&#x987F;&#x7B49;&#x516B;&#x5927;&#x85E4;&#x6821;&#x4E0D;&#x5F97;&#x4E0D;&#x5C06;&#x5F55;&#x53D6;&#x7ED3;&#x679C;&#x63A8;&#x8FDF;&#x81F3; 4 &#x6708; 6 &#x65E5;&#xFF0C;&#x65AF;&#x5766;&#x798F;&#x63A8;&#x8FDF;&#x81F3; 4 &#x6708; 9 &#x65E5;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_7.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x8FD9;&#x8FD8;&#x53EA;&#x662F;&#x672C;&#x79D1;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x7684;&#x53D8;&#x5316;&#xFF0C;&#x7814;&#x7A76;&#x751F;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x589E;&#x957F;&#x53EF;&#x4EE5;&#x53C2;&#x8003;&#x4E00;&#x4EA9;&#x4E09;&#x5206;&#x5730;&#x7684;&#x6570;&#x636E;&#xFF1A;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_8.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_9.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x540C;&#x6837;&#x7684;&#x60C5;&#x51B5;&#x5728;&#x82F1;&#x56FD;&#x4E5F;&#x6709;&#x51FA;&#x73B0;&#x3002;&#x6839;&#x636E;&#x82F1;&#x56FD;&#x5927;&#x5B66;&#x4E0E;&#x5B66;&#x9662;&#x5165;&#x5B66;&#x670D;&#x52A1;&#x673A;&#x6784;(UCAS)&#x516C;&#x5E03;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x622A;&#x6B62; 2021 &#x5E74; 1 &#x6708; 15 &#x65E5;&#xFF0C;&#x5168;&#x7403;&#x5171;&#x6709; 568330 &#x4EBA;&#x9012;&#x4EA4;&#x4E86;&#x82F1;&#x56FD;&#x672C;&#x79D1;&#x5165;&#x5B66;&#x7533;&#x8BF7;&#xFF0C;&#x6765;&#x81EA;&#x6B27;&#x76DF;&#x4EE5;&#x5916;&#x7684;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x8FBE;&#x5230;&#x521B;&#x7EAA;&#x5F55;&#x7684; 73080 &#x4EBA;&#xFF0C;&#x6BD4; 2019 &#x5E74;&#x589E;&#x52A0; 14.7%&#xFF0C;&#x5176;&#x4E2D;&#x6765;&#x81EA;&#x4E2D;&#x56FD;&#x7684;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x589E;&#x52A0;&#x4E86; 33.8%&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_10.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x7684;&#x4E0A;&#x6DA8;&#x610F;&#x5473;&#x7740;&#x5F55;&#x53D6;&#x7387;&#x964D;&#x4F4E;&#xFF0C;&#x7ADE;&#x4E89;&#x538B;&#x529B;&#x53D8;&#x5927;&#x3002;&#x4E00;&#x9879;&#x8C03;&#x67E5;&#x7ED3;&#x679C;&#x663E;&#x793A;&#xFF0C;2020 &#x5E74;&#x79CB;&#x5B63;&#x7684;&#x56FD;&#x9645;&#x751F;&#x5165;&#x5B66;&#x4EBA;&#x6570;&#x4E0B;&#x964D;&#x4E86; 16%&#xFF0C;&#x5176;&#x4E2D;&#x6709;&#x8FD1; 4 &#x4E07;&#x540D;&#x56FD;&#x9645;&#x5B66;&#x751F;&#x5728; 2020 &#x5E74;&#x79CB;&#x5B63;&#x6682;&#x505C;&#x5165;&#x5B66;&#xFF0C;&#x5E76;&#x5C06;&#x5165;&#x5B66;&#x65E5;&#x671F;&#x63A8;&#x8FDF;&#x5230;&#x672A;&#x6765;&#x3002;&#x7F8E;&#x56FD;&#x7814;&#x7A76;&#x751F;&#x9662;&#x7406;&#x4E8B;&#x4F1A;&#x7684;&#x8C03;&#x67E5;&#x4E5F;&#x53D1;&#x73B0;,&#x5C3D;&#x7BA1; 2020 &#x5E74;&#x79CB;&#x5B63;&#x5165;&#x5B66;&#x8F83; 2019 &#x5E74;&#x7533;&#x8BF7;&#x603B;&#x4EBA;&#x6570;&#x589E;&#x52A0;&#x4E86; 3%&#xFF0C;&#x4F46;&#x56E0;&#x4E3A;&#x75AB;&#x60C5;&#x548C;&#x65C5;&#x884C;&#x7981;&#x4EE4;&#x5F71;&#x54CD;&#xFF0C;&#x7814;&#x7A76;&#x751F;&#x6CE8;&#x518C;&#x4EBA;&#x6570;&#x4E0B;&#x964D;&#x4E86; 43%&#xFF0C;&#x535A;&#x58EB;&#x4E0B;&#x964D;&#x4E86; 26%&#x3002;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x56FD;&#x9645;&#x751F;&#x7A7A;&#x7F3A;&#x6025;&#x9700;&#x5F25;&#x8865;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_11.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<p>&#x8F83;&#x4E4B;&#x540D;&#x6821;&#xFF0C;&#x56FD;&#x9645;&#x751F;&#x6CE8;&#x518C;&#x4EBA;&#x6570;&#x964D;&#x4F4E;&#x5BF9;&#x5176;&#x4ED6;&#x5927;&#x5B66;&#x800C;&#x8A00;&#x662F;&#x4E00;&#x6B21;&#x5DE8;&#x5927;&#x7684;&#x6311;&#x6218;&#x3002;&#x6CA1;&#x4E86;&#x5B66;&#x751F;&#xFF0C;&#x5B66;&#x6821;&#x4E27;&#x5931;&#x90E8;&#x5206;&#x7ECF;&#x6D4E;&#x6765;&#x6E90;&#xFF0C;&#x56E0;&#x6B64;&#x76F8;&#x8F83;&#x4E8E;&#x7ADE;&#x4E89;&#x6FC0;&#x70C8;&#x7684;&#x85E4;&#x6821;&#xFF0C;&#x666E;&#x901A;&#x9662;&#x6821;&#x53EF;&#x80FD;&#x4F1A;&#x8FDB;&#x4E00;&#x6B65;&#x6269;&#x62DB;&#x3002;</p>
<p><strong>&#x5185;&#x5377;&#x4E25;&#x91CD;</strong>&#xFF0C;<strong>&#x56FD;&#x5185;&#x5C31;&#x4E1A;&#x538B;&#x529B;&#x589E;&#x52A0;&#x662F;&#x5BFC;&#x81F4; 2021 &#x5E74;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x6570;&#x91CF;&#x66B4;&#x589E; 50% &#x7684;&#x6B21;&#x56E0;</strong>&#xFF1A;&#x4F34;&#x968F; 2020 &#x5E74;&#x5927;&#x91CF;&#x6D77;&#x5916;&#x9752;&#x6912;&#x56DE;&#x56FD;&#xFF0C;&#x56FD;&#x5185;&#x5C31;&#x4E1A;&#x538B;&#x7ADE;&#x4E89;&#x529B;&#x9AA4;&#x589E;&#xFF0C;&#x5185;&#x5377;&#x4E25;&#x91CD;&#xFF0C;&#x51FA;&#x73B0;&#x4E86;&#x56FD;&#x5185;&#x9AD8;&#x6821;&#x5E94;&#x5C4A;&#x535A;&#x58EB;&#x6BD5;&#x4E1A;&#x751F;&#x53EA;&#x80FD;&#x505A;&#x535A;&#x540E;&#x7684;&#x5883;&#x51B5;&#xFF0C;&#x8FD9;&#x4E5F;&#x5BFC;&#x81F4;&#x4E86;&#x5927;&#x91CF;&#x5E94;&#x5C4A;&#x6BD5;&#x4E1A;&#x751F;&#x9009;&#x62E9;&#x4E86;&#x51FA;&#x56FD;&#x518D;&#x9020;&#x7684;&#x73B0;&#x8C61;&#x3002;</p>
<p>&#x5185;&#x5377;&#x7A76;&#x7ADF;&#x6709;&#x591A;&#x5377;&#x5462;&#xFF1F;&#x7B14;&#x8005;&#x4E3E; 2 &#x4E2A;&#x5370;&#x8C61;&#x975E;&#x5E38;&#x6DF1;&#x523B;&#x7684;&#x771F;&#x5B9E;&#x4F8B;&#x5B50;&#xFF1A;</p>
<p>A &#x540C;&#x5B66;&#x672C;&#x79D1;&#x6BD5;&#x4E1A;&#x4E8E; UIUC CS&#xFF0C;GPA 4.0/4.0 &#x6EE1;&#x7EE9;&#x70B9;&#xFF0C;TOEFL waive&#xFF0C;GRE 339/340&#x3002;&#x9876;&#x4F1A;&#x8BBA;&#x6587;&#x82E5;&#x5E72;&#x3002;FLAANG &#x5B9E;&#x4E60;&#x3002;&#x8FD9;&#x4E09;&#x7EF4;&#x6210;&#x7EE9;&#xFF0C;&#x8F6F;&#x80CC;&#x666F;&#xFF0C;&#x4EE5;&#x53CA;&#x6D77;&#x672C; CS &#x9876;&#x5C16;&#x9662;&#x6821;&#xFF0C;&#x5E94;&#x8BE5;&#x662F; offer &#x6536;&#x5272;&#x673A;&#x672C;&#x673A;&#x4E86;&#x3002;&#x4F46;&#x662F;&#x5374;&#x201C;&#x6ED1;&#x94C1;&#x5362;&#x201D;&#x4E86;&#x3002;A &#x540C;&#x5B66;&#x7533;&#x8BF7; CMU MSCS&#xFF0C;&#x88AB;&#x62D2;&#x3002;&#x5B9E;&#x5728;&#x60F3;&#x4E0D;&#x901A;&#x4ECA;&#x5E74;&#x88AB; CMU SCS MSCS &#x5F55;&#x53D6;&#x7684;&#x7A76;&#x7ADF;&#x662F;&#x4EC0;&#x4E48;&#x795E;&#x4ED9;&#xFF1F;</p>
<p>B &#x540C;&#x5B66;&#x672C;&#x79D1;&#x6BD5;&#x4E1A;&#x4E8E; CMU CS&#xFF0C;GPA 3.9/4.0&#xFF0C;TOEFL 115&#xFF0C;GRE 330&#x3002;&#x8F6F;&#x80CC;&#x666F;&#x672A;&#x77E5;&#x3002;&#x7533;&#x8BF7; CMU MSCS &#x88AB;&#x62D2;&#x3002;&#x672C;&#x6821;&#x7533;&#x672C;&#x6821;&#x90FD;&#x88AB;&#x62D2;&#x3002;&#x4ECA;&#x5E74;&#x5230;&#x5E95;&#x662F;&#x591A;&#x4E48;&#x7684;&#x5185;&#x5377;&#xFF1F;&#xFF1F;&#xFF1F;&#x5DF2;&#x7ECF;&#x5377;&#x4E0A;&#x5929;&#x4E86;&#x3002;</p>
<h3 id="2-%E5%9C%A8%E5%AE%B6%E5%8A%9E%E5%85%AC%E6%95%88%E7%8E%87%E2%80%9C%E4%B8%8D%E9%AB%98%E2%80%9D">2. &#x5728;&#x5BB6;&#x529E;&#x516C;&#x6548;&#x7387;&#x201C;&#x4E0D;&#x9AD8;&#x201D;</h3>
<p>&#x56E0;&#x4E3A;&#x75AB;&#x60C5;&#xFF0C;&#x7F8E;&#x56FD;&#x5927;&#x5B66;&#x6821;&#x56ED;&#x5173;&#x95ED;&#xFF0C;&#x6240;&#x6709;&#x5927;&#x5B66;&#x90FD;&#x53D8;&#x6210;&#x4E86;&quot;&#x6602;&#x5170;&#x5927;&#x5B66;&quot;(Online University) &#xFF0C;&#x4E0A;&#x8BFE;&#x7528; Zoom&#xFF0C;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x4E5F;&#x5728;&#x5BB6;&#x529E;&#x516C;&#x3002;&#x5728;&#x5BB6;&#x529E;&#x516C;&#x5E26;&#x6765;&#x7684;&#x5F71;&#x54CD;&#x662F;&#x6548;&#x7387;&#x4E0D;&#x9AD8;&#x3002;&#x5982;&#x679C;&#x4F60;&#x5F88;&#x7740;&#x6025;&#x8054;&#x7CFB;&#x62DB;&#x751F;&#x529E;&#xFF0C;&#x4F8B;&#x5982;&#x5173;&#x8054;&#x5B9E;&#x4F53;&#x6210;&#x7EE9;&#x5355;&#x4E0E;&#x7F51;&#x7533;&#x7CFB;&#x7EDF;&#x7684; Application ID&#x3002;&#x5927;&#x6982;&#x7387;&#x4F60;&#x6253;&#x7535;&#x8BDD;&#x662F;&#x6CA1;&#x4EBA;&#x63A5;&#x7684;&#x3002;&#x56E0;&#x4E3A;&#x7535;&#x8BDD;&#x6253;&#x5230;&#x5B66;&#x6821;&#xFF0C;&#x800C;&#x8001;&#x5E08;&#x5728;&#x5BB6;&#x529E;&#x516C;&#x3002;&#x4F60;&#x65E0;&#x5948;&#x4E4B;&#x4E0B;&#x5199;&#x90AE;&#x4EF6;&#x8054;&#x7CFB;&#x62DB;&#x751F;&#x529E;&#x7684;&#x8001;&#x5E08;&#xFF0C;&#x4F46;&#x662F;&#x8001;&#x5E08;&#x56DE;&#x590D;&#x90AE;&#x4EF6;&#x4E5F;&#x5F88;&#x6162;&#x3002;&#x4E00;&#x5468; 5 &#x5929;&#x90FD;&#x4E0D;&#x7406;&#x4F60;&#x3002;&#x4E8E;&#x662F;&#x7B2C;&#x4E8C;&#x5468;&#x7EE7;&#x7EED;&#x5199;&#x90AE;&#x4EF6;&#x50AC;&#x8001;&#x5E08;&#x3002;&#x7B2C;&#x4E09;&#x5468;&#x8001;&#x5E08;&#x7A81;&#x7136;&#x56DE;&#x590D;&#x90AE;&#x4EF6;&#xFF0C;&#x6A21;&#x677F;&#x5F0F;&#x7684;&#x56DE;&#x590D;&#xFF0C;&#x201C;&#x4E0D;&#x8981;&#x50AC;&#xFF01;&#x73B0;&#x5728;&#x662F;&#x7533;&#x8BF7;&#x9AD8;&#x5CF0;&#x671F;&#xFF0C;&#x62DB;&#x751F;&#x529E;&#x5DF2;&#x7ECF;&#x6EE1;&#x8D1F;&#x8377;&#x5DE5;&#x4F5C;&#x4E2D;&#x4E86;&#x3002;&#x201D;&#x7B14;&#x8005;&#x6B64;&#x65F6;&#x5DF2;&#x65E0;&#x529B;&#x6323;&#x624E;&#xFF0C;&#x53EA;&#x80FD;&#x201C;&#x4F5B;&#x7CFB;&#x7B49;&#x5F85;&#x201D;&#xFF0C;&#x4E00;&#x4E2A;&#x6708;&#x4EE5;&#x540E;&#xFF0C;&#x7EC8;&#x4E8E;&#x5173;&#x8054;&#x4E0A;&#x4E86;&#x3002;&#x6709;&#x4E00;&#x8BF4;&#x4E00;&#xFF0C;&#x8FD9;&#x4E2A;&#x6548;&#x7387;&#x5982;&#x679C;&#x653E;&#x5728;&#x4E2D;&#x56FD;&#x7684;&#x516C;&#x5171;&#x670D;&#x52A1;&#x4F53;&#x7CFB;&#x91CC;&#xFF0C;&#x4E00;&#x5B9A;&#x4F1A;&#x88AB;&#x4EBA;&#x6295;&#x8BC9;&#x3002;&#x4F46;&#x662F;&#x6BD5;&#x7ADF;&#x4EBA;&#x5BB6;&#x662F;&#x7F8E;&#x5E1D;&#x7684;&#x5DE5;&#x4F5C;&#x4E60;&#x60EF;&#xFF0C;&#x4F60;&#x4E5F;&#x65E0;&#x6CD5;&#x62B1;&#x6028;&#xFF0C;&#x4E00;&#x5468;&#x53EA;&#x5DE5;&#x4F5C; 5 &#x5929;&#xFF0C;&#x5468;&#x672B;&#x94C1;&#x5B9A;&#x4E0D;&#x52A0;&#x73ED;&#xFF0C;&#x5DE5;&#x4F5C;&#x65E5;&#x665A;&#x4E0A;&#x5230;&#x70B9;&#x5C31;&#x4E0B;&#x73ED;&#xFF0C;&#x4E5F;&#x4E0D;&#x6E05;&#x695A;&#x75AB;&#x60C5;&#x4E4B;&#x524D;&#x4ED6;&#x4EEC;&#x6548;&#x7387;&#x662F;&#x600E;&#x4E48;&#x6837;&#x7684;&#x3002;&#xFF08;&#x6709;&#x65F6;&#x5019;&#x771F;&#x7684;&#x5F88;&#x60F3;&#x6709; DING &#x4E00;&#x4E0B;&#xFF0C;&#x593A;&#x547D;&#x8FDE;&#x73AF; Call&#x3002;&#x5F53;&#x7136;&#x8FD9;&#x53EA;&#x80FD;&#x662F;&#x60F3;&#x60F3;&#xFF0C;&#x5982;&#x679C;&#x628A;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x60F9;&#x70E6;&#x4E86;&#xFF0C;&#x8C01;&#x50AC;&#x5C31;&#x62D2;&#x8C01;&#x3002;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x5C31;&#x662F;&#x7237;&#xFF0C;&#x5F97;&#x4F9B;&#x7740;&#x3002;&#xFF09;</p>
<p>&#x5410;&#x69FD;&#x5F52;&#x5410;&#x69FD;&#xFF0C;&#x6807;&#x9898;&#x4E0A;&#x201C;&#x4E0D;&#x9AD8;&#x201D;&#x4E5F;&#x662F;&#x6253;&#x4E86;&#x5F15;&#x53F7;&#x3002;&#x7406;&#x6027;&#x7684;&#x601D;&#x8003;&#x8FD9;&#x4E2A;&#x73B0;&#x8C61;&#xFF0C;&#x80CC;&#x540E;&#x4E5F;&#x6709;&#x5B83;&#x7684;&#x9053;&#x7406;&#x3002;&#x9996;&#x5148;&#x7F8E;&#x56FD;&#x5927;&#x5B66;&#x5BA1;&#x6838;&#x7533;&#x8BF7;&#x4EBA;&#x6750;&#x6599;&#xFF0C;&#x6709;&#x4ED6;&#x4EEC;&#x4E00;&#x5957;&#x5F88;&#x4E25;&#x683C;&#x7684;&#x5BA1;&#x6838;&#x6D41;&#x7A0B;&#x3002;&#x62DB;&#x751F;&#x8001;&#x5E08;&#x4E25;&#x683C;&#x6309;&#x7167;&#x8FD9;&#x4E2A;&#x6D41;&#x7A0B;&#x6765;&#x529E;&#x4E8B;&#xFF0C;&#x4E00;&#x73AF;&#x53C8;&#x4E00;&#x73AF;&#xFF0C;&#x6B65;&#x9AA4;&#x975E;&#x5E38;&#x4E25;&#x8C28;&#x3002;&#x518D;&#x52A0;&#x4E0A;&#x7533;&#x8BF7;&#x4EBA;&#x6570;&#x66B4;&#x589E;&#x4E5F;&#x662F;&#x4E8B;&#x5B9E;&#xFF0C;&#x5728;&#x5BB6;&#x529E;&#x516C;&#x7684;&#x5F71;&#x54CD;&#xFF0C;&#x516C;&#x5E03;&#x5F55;&#x53D6;&#x699C;&#x5355;&#x7684;&#x65E5;&#x671F;&#x5F80;&#x540E;&#x5EF6;&#x8FDF; 1 &#x4E2A;&#x6708;&#x4E5F;&#x53EF;&#x4EE5;&#x7406;&#x89E3;&#x7684;&#x3002;</p>
<h3 id="3-%E5%86%B2%E5%9D%A1%E5%8A%9E%E7%BE%8E%E7%AD%BE">3. &#x51B2;&#x5761;&#x529E;&#x7F8E;&#x7B7E;</h3>
<blockquote>
<p>&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#x8D77;&#x7B14;&#x4E8E; 2021 &#x5E74; 4 &#x6708;&#xFF0C;&#x4E2D;&#x56FD;&#x5927;&#x9646;&#x7F8E;&#x56FD;&#x4F7F;&#x9986;&#x5E76;&#x672A;&#x5F00;&#x653E;&#x3002;&#x8BFB;&#x8005;&#x770B;&#x89C1;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x65F6;&#x5019;&#x53EF;&#x80FD;&#x4E2D;&#x56FD;&#x5927;&#x9646;&#x4F7F;&#x9986;&#x5DF2;&#x7ECF;&#x5F00;&#x653E;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x72B9;&#x8C6B;&#x4E4B;&#x4E0B;&#xFF0C;&#x8FD8;&#x662F;&#x51B3;&#x5B9A;&#x4FDD;&#x7559;&#x8FD9;&#x6BB5;&#xFF0C;&#x6BD5;&#x7ADF;&#x51B2;&#x5761;&#x529E;&#x7F8E;&#x7B7E;&#x662F; 20fall &#x548C; 21fall &#x8FD9;&#x8F88;&#x5B50;&#x90FD;&#x96BE;&#x5FD8;&#x7684;&#x4E00;&#x6BB5;&#x7ECF;&#x5386;&#x3002;</p>
</blockquote>
<p>&#x7531;&#x4E8E;&#x75AB;&#x60C5;&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x56FD;&#x5185;&#x4F7F;&#x9986;&#x505C;&#x6B62;&#x529E;&#x7F8E;&#x7B7E;&#x4E1A;&#x52A1;&#x3002;&#x52A0;&#x4E0A;&#x7F8E;&#x56FD; NIE &#x89C4;&#x5B9A;&#x9650;&#x5236;&#xFF0C;&#x7981;&#x6B62;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x4E4B;&#x524D; 14 &#x5929;&#x5165;&#x5883;&#x8FC7;&#x4E2D;&#x56FD;&#x7684;&#x65C5;&#x5BA2;&#x3002;&#x90A3;&#x4E48;&#x53BB;&#x7B2C;&#x4E09;&#x56FD;&#x529E;&#x7F8E;&#x7B7E; + &#x6D17;&#x767D;&#x6210;&#x4E3A;&#x4E86;&#x521A;&#x9700;&#x3002;20fall + 21fall &#x81F3;&#x5C11;&#x6709; 10W &#x7559;&#x5B66;&#x751F;&#x8981;&#x53BB;&#x65B0;&#x52A0;&#x5761;&#x529E;&#x7B7E;&#x8BC1;&#x3002;&#xFF08;&#x53D8;&#x76F8;&#x7E41;&#x8363;&#x4E86;&#x65B0;&#x52A0;&#x5761;&#x65C5;&#x6E38;&#x4E1A;&#xFF09;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/154_12.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;">
</p>
<h4 id="%E5%85%A5%E5%A2%83%E6%96%B0%E5%8A%A0%E5%9D%A1%E5%89%8D%E9%9C%80%E8%A6%81%E5%87%86%E5%A4%87%E7%9A%84%E6%9D%90%E6%96%99">&#x5165;&#x5883;&#x65B0;&#x52A0;&#x5761;&#x524D;&#x9700;&#x8981;&#x51C6;&#x5907;&#x7684;&#x6750;&#x6599;</h4>
<ol>
<li>&#x65B0;&#x52A0;&#x5761;&#x7B7E;&#x8BC1;<br>
&#x5728;&#x67D0;&#x5B9D;&#x6216;&#x67D0;&#x7A0B;&#x627E;&#x65C5;&#x884C;&#x793E;&#x529E;&#x7406;&#x65B0;&#x52A0;&#x5761;&#x4E2A;&#x4EBA;&#x65C5;&#x6E38;&#x7B7E;&#x8BC1;&#xFF0C;&#x65B0;&#x52A0;&#x5761;&#x65C5;&#x6E38;&#x7B7E;&#x8BC1;&#x7684;&#x6709;&#x6548;&#x671F;&#x4E00;&#x822C; 35 &#x5929;&#x81F3; 2 &#x5E74;&#x591A;&#x6B21;&#x4E0D;&#x7B49;&#xFF0C;&#x7B7E;&#x8BC1;&#x7684;&#x5177;&#x4F53;&#x6709;&#x6548;&#x671F;&#x4EE5;&#x5927;&#x4F7F;&#x9986;&#x5BA1;&#x6279;&#x7B7E;&#x53D1;&#x4E3A;&#x51C6;&#xFF0C;&#x7B7E;&#x8BC1;&#x62FF;&#x5230;&#x540E;&#x81EA;&#x884C;&#x6253;&#x5370;&#x51FA;&#x6765;&#xFF0C;&#x5165;&#x5883;&#x65F6;&#x643A;&#x5E26;&#x5373;&#x53EF;&#x3002;&#x65B0;&#x52A0;&#x5761;&#x77ED;&#x671F;&#x65C5;&#x6E38;&#x7B7E;&#x8BC1;&#x9ED8;&#x8BA4;&#x505C;&#x7559;&#x65F6;&#x95F4;&#x4E3A; 30 &#x5929;&#xFF08;&#x4E0E;&#x7B7E;&#x8BC1;&#x6709;&#x6548;&#x671F;&#x65E0;&#x5173;&#xFF09;&#xFF0C;&#x5982;&#x679C;&#x9700;&#x8981;&#x5F85;&#x8D85;&#x8FC7; 30 &#x5929;&#xFF0C;&#x9700;&#x8981;&#x5728;&#x5165;&#x5883;&#x540E;&#x505C;&#x7559;&#x65F6;&#x95F4;&#x5230;&#x671F;&#x524D;&#x901A;&#x8FC7; ICA &#x7F51;&#x7AD9;&#x7533;&#x8BF7;&#x5EF6;&#x671F;&#xFF0C;&#x5426;&#x5219;&#xFF0C;&#x89C6;&#x4E3A;&#x975E;&#x6CD5;&#x6EDE;&#x7559;&#x3002;</li>
<li>&#x62A4;&#x7167;&#xFF08;&#x6709;&#x6548;&#x671F; 6 &#x4E2A;&#x6708;&#x4EE5;&#x4E0A;&#xFF09;</li>
<li>&#x673A;&#x7968;&#xFF08;&#x5F80;&#x8FD4;&#x6216;&#x8054;&#x7A0B;&#x673A;&#x7968;&#xFF09;</li>
<li>Air Travel Pass&#xFF08;&#x822A;&#x7A7A;&#x901A;&#x884C;&#x8BC1;&#xFF09;<br>
&#x514D;&#x8D39;&#x7533;&#x8BF7;&#xFF0C;<a href="https://capels.caas.gov.sg/atp">&#x7533;&#x8BF7;&#x5730;&#x5740;</a>&#x3002;ATP&#x4E8C;&#x7EF4;&#x7801;&#xFF1A;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_13.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><br>
&#x7533;&#x8BF7; ATP &#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#x5FC5;&#x987B;&#x5728;&#x524D;&#x5F80;&#x65B0;&#x52A0;&#x5761;&#x524D;&#x7684;&#x6700;&#x540E; 14 &#x5929;&#x5185;&#x6CA1;&#x6709;&#x79BB;&#x5F00;&#x8FC7;&#x4E2D;&#x56FD;&#x5927;&#x9646;&#x5730;&#x533A;&#x624D;&#x53EF;&#x4EE5;&#x7533;&#x8BF7;&#x3002;&#x5165;&#x5883;&#x65B0;&#x52A0;&#x5761;&#x524D; 7-30 &#x5929;&#x90FD;&#x53EF;&#x4EE5;&#x7533;&#x8BF7;&#xFF0C;&#x5BA1;&#x6279;&#x65F6;&#x95F4;&#x5927;&#x6982; 3 &#x4E2A;&#x5DE5;&#x4F5C;&#x65E5;&#xFF0C;&#x7533;&#x8BF7;&#x6210;&#x529F;&#x540E;&#x7684;&#x6709;&#x6548;&#x671F;&#x4E3A; 7 &#x5929;&#xFF08;&#x4ECE;&#x9884;&#x8BA1;&#x5165;&#x5883;&#x65B0;&#x52A0;&#x5761;&#x65E5;&#x671F;&#x5F00;&#x59CB;&#x7B97;&#xFF09;&#x3002;&#x6BCF;&#x5F20; ATP &#x53EA;&#x80FD;&#x4F7F;&#x7528;&#x4E00;&#x6B21;&#xFF0C;&#x4F46;&#x7533;&#x8BF7;&#x6B21;&#x6570;&#x4E0D;&#x9650;&#x3002;</li>
<li>Covid-19 &#x65C5;&#x884C;&#x4FDD;&#x9669;&#xFF08;&#x4FDD;&#x989D;&#x4E0D;&#x4F4E;&#x4E8E; 3 &#x4E07;&#x65B0;&#x5143;&#xFF09;<br>
&#x81EA; 2021 &#x5E74; 1 &#x6708; 31 &#x65E5;&#x8D77;&#xFF0C;&#x901A;&#x8FC7;&#x901A;&#x8FC7;&#x822A;&#x7A7A;&#x901A;&#x884C;&#x8BC1;&#xFF08;Air Travel Pass&#xFF09;&#x548C;&#x201C;&#x5FEB;&#x6377;&#x901A;&#x9053;&#x201D;&#x5B89;&#x6392;&#x8FDB;&#x5165;&#x65B0;&#x52A0;&#x5761;&#x7684;&#x65C5;&#x5BA2;&#xFF0C;&#x987B;&#x63D0;&#x524D;&#x8D2D;&#x4E70;&#x4FDD;&#x989D;&#x4E0D;&#x4F4E;&#x4E8E; 3 &#x4E07;&#x65B0;&#x5E01;&#x7684;&#x65C5;&#x884C;&#x4FDD;&#x9669;&#xFF0C;&#x7528;&#x4E8E;&#x652F;&#x4ED8;&#x5728;&#x65B0;&#x671F;&#x95F4;&#x53EF;&#x80FD;&#x4EA7;&#x751F;&#x7684;&#x4E0E;&#x65B0;&#x51A0;&#x75C5;&#x6BD2;&#x76F8;&#x5173;&#x7684;&#x533B;&#x7597;&#x548C;&#x4F4F;&#x9662;&#x8D39;&#x7528;&#x3002;&#x65C5;&#x5BA2;&#x53EF;&#x81EA;&#x884C;&#x9009;&#x62E9;&#x8D2D;&#x4E70;&#x65B0;&#x52A0;&#x5761;&#x6216;&#x5176;&#x4ED6;&#x56FD;&#x5BB6;&#x7684;&#x76F8;&#x5173;&#x4FDD;&#x9669;&#xFF0C;&#x5E76;&#x6CE8;&#x610F;&#x968F;&#x8EAB;&#x643A;&#x5E26;&#x76F8;&#x5173;&#x4FDD;&#x9669;&#x6750;&#x6599;&#xFF08;&#x7535;&#x5B50;&#x7248;&#x6216;&#x7EB8;&#x8D28;&#x7248;&#xFF09;&#x5907;&#x67E5;&#x3002;&#x8BE6;&#x60C5;&#x53EF;&#x89C1;&#x65B0;&#x52A0;&#x5761;&#x79FB;&#x6C11;&#x5C40;&#x6709;&#x5173;<a href="https://safetravel.ica.gov.sg/health/travelinsurance">&#x7F51;&#x5740;</a>&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_14.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p></li>
<li>SG Arrival Card&#xFF08;&#x65B0;&#x52A0;&#x5761;&#x7535;&#x5B50;&#x5165;&#x5883;&#x5361;&#x9644;&#x52A0;&#x7535;&#x5B50;&#x5065;&#x5EB7;&#x7533;&#x62A5;&#xFF09;<br>
&#x9700;&#x8981;&#x5728;&#x62B5;&#x8FBE;&#x65B0;&#x52A0;&#x5761;&#x524D; 3 &#x5929;&#x63D0;&#x4EA4;&#x4E2A;&#x4EBA;&#x7684;&#x7535;&#x5B50;&#x5065;&#x5EB7;&#x7533;&#x62A5;&#xFF0C;&#x82E5;&#x822A;&#x73ED;&#x53D8;&#x52A8;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x63D0;&#x4EA4;&#x4E00;&#x6B21;&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_15.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p></li>
<li>TraceTogether App&#xFF08;&#x5408;&#x529B;&#x8FFD;&#x8E2A;&#xFF09;<br>
&#x5165;&#x5883;&#x65B0;&#x52A0;&#x5761;&#x524D;&#x5FC5;&#x987B;&#x4E0B;&#x8F7D;&#x5E76;&#x6FC0;&#x6D3B; TraceTogether App&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_16.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<ul>
<li>&#x82F9;&#x679C;&#x624B;&#x673A;&#x53EA;&#x8981;&#x901A;&#x8FC7; AppStore &#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x5C31;&#x53EF;&#x4EE5;&#x4E86;&#x3002;</li>
<li>&#x5B89;&#x5353;&#x624B;&#x673A;&#x9700;&#x8981;&#x901A;&#x8FC7; Google Play &#x624D;&#x80FD;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#xFF0C;&#x4F46;&#x534E;&#x4E3A;&#x624B;&#x673A;&#x4E0D;&#x80FD;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x3002;</li>
<li>&#x56FD;&#x5185;&#x767B;&#x673A;&#x524D;&#x53EA;&#x770B;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x4E86; TraceTogether, &#x5982;&#x679C;&#x5728;&#x56FD;&#x5185;&#x6FC0;&#x6D3B;&#x4E0D;&#x4E86;&#xFF0C;&#x53EF;&#x4EE5;&#x62B5;&#x8FBE;&#x6A1F;&#x5B9C;&#x673A;&#x573A;&#x5165;&#x5883;&#x524D;&#x7528;&#x65B0;&#x52A0;&#x5761;&#x624B;&#x673A;&#x53F7;&#x7801;&#x8FDB;&#x884C;&#x6FC0;&#x6D3B;&#xFF08;&#x7531;&#x4E8E; TraceTogether &#x7684;&#x7F51;&#x7EDC;&#x9650;&#x5236;&#x539F;&#x56E0;&#xFF0C;&#x79FB;&#x52A8;&#x3001;&#x8054;&#x901A;&#x3001;&#x7535;&#x4FE1;&#x90FD;&#x65E0;&#x6CD5;&#x63A5;&#x6536;&#x9A8C;&#x8BC1;&#x7801;&#xFF0C;&#x6240;&#x4EE5;&#x4E0B;&#x8F7D;&#x5B89;&#x88C5;&#x540E;&#x65E0;&#x6CD5;&#x6FC0;&#x6D3B;&#xFF09;</li>
<li>&#x6FC0;&#x6D3B; TraceTogether &#x7A0B;&#x5E8F;&#x540E;&#xFF0C;&#x6CE8;&#x610F;&#x624B;&#x673A;&#x4E0D;&#x80FD;&#x5173;&#x95ED;&#x84DD;&#x7259;&#xFF0C;&#x4E5F;&#x4E0D;&#x80FD;&#x624B;&#x673A;&#x5173;&#x673A;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x671F;&#x95F4;&#xFF0C;&#x5FC5;&#x987B;&#x5168;&#x7A0B;&#x5F00;&#x542F; TraceTogether&#xFF0C;&#x5728;&#x79BB;&#x5883;&#x540E;&#xFF0C;&#x4E5F;&#x5FC5;&#x987B;&#x5C06; App &#x5185;&#x7684;&#x4FE1;&#x606F;&#x4FDD;&#x5B58; 14 &#x5929;&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_17.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><br>
&#x8F93;&#x5165;&#x624B;&#x673A;&#x53F7;&#x7801;&#x6765;&#x83B7;&#x53D6;&#x9A8C;&#x8BC1;&#x7801;&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_18.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><br>
TraceTogether &#x6FC0;&#x6D3B;&#x6210;&#x529F;&#x3002;</li>
</ul>
</li>
<li>Covid-19 Arrival PCR test &#x9884;&#x7EA6;&#xFF08;&#x63D0;&#x524D;&#x9884;&#x7EA6;&#x673A;&#x573A;&#x6838;&#x9178;&#x68C0;&#x6D4B;&#x5E76;&#x63D0;&#x524D;&#x4ED8;&#x6B3E;&#xFF09;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_19.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><br>
&#x4ECE;&#x4E2D;&#x56FD;&#x524D;&#x5F80;&#x65B0;&#x52A0;&#x5761;&#x524D;&#x4E0D;&#x5F3A;&#x5236;&#x6838;&#x9178;&#x68C0;&#x6D4B;&#xFF0C;&#x843D;&#x5730;&#x6A1F;&#x5B9C;&#x673A;&#x573A;&#x540E;&#x9700;&#x8981;&#x6838;&#x9178;&#x68C0;&#x6D4B;&#xFF0C;&#x9700;&#x8981;&#x5728;&#x8FDB;&#x884C;<a href="https://safetravel.changiairport.com/">&#x9884;&#x7EA6;</a>&#x5E76;&#x652F;&#x4ED8;PCR&#x68C0;&#x6D4B;&#x8D39;&#x7528;&#xFF08;$196 SGD&#xFF09;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_20.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p></li>
<li>&#x9884;&#x7EA6;&#x7B26;&#x5408;&#x8981;&#x6C42;&#x7684;&#x9694;&#x79BB;&#x9152;&#x5E97;<br>
&#x6838;&#x9178;&#x7ED3;&#x679C;&#x51FA;&#x6765;&#x4E4B;&#x524D;&#xFF0C;&#x5FC5;&#x987B;&#x4F4F;&#x5728;&#x9694;&#x79BB;&#x9152;&#x5E97;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;<a href="https://sha.org.sg/">&#x65B0;&#x52A0;&#x5761;&#x9152;&#x5E97;&#x534F;&#x4F1A;</a>&#x83B7;&#x53D6;&#x76F8;&#x5173;&#x9152;&#x5E97;&#x5217;&#x8868;&#x9009;&#x62E9;&#x8981;&#x9884;&#x5B9A;&#x7684;&#x9152;&#x5E97;&#xFF0C;&#x63D0;&#x524D;&#x9884;&#x5B9A; 1-2 &#x665A;&#x3002;&#x7B49;&#x6838;&#x9178;&#x9634;&#x6027;&#x4E4B;&#x540E;&#xFF0C;&#x5C31;&#x53EF;&#x4EE5;&#x81EA;&#x7531;&#x884C;&#x52A8;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x66F4;&#x6362;&#x5C45;&#x4F4F;&#x7684;&#x9152;&#x5E97;&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_21.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p></li>
</ol>
<h4 id="%E5%9C%A8%E6%96%B0%E5%8A%A0%E5%9D%A1%E9%A2%84%E7%BA%A6%E9%9D%A2%E7%AD%BE%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C">&#x5728;&#x65B0;&#x52A0;&#x5761;&#x9884;&#x7EA6;&#x9762;&#x7B7E;&#x51C6;&#x5907;&#x5DE5;&#x4F5C;</h4>
<ol>
<li>&#x8F6C;&#x79FB;CGI&#x5E10;&#x53F7;&#x5230;&#x65B0;&#x52A0;&#x5761;<br>
&#x7531;&#x4E8E;&#x4E2D;&#x56FD;&#x5927;&#x9646;&#x548C;&#x65B0;&#x52A0;&#x5761;&#x7684;&#x7B7E;&#x8BC1;&#x9884;&#x7EA6;&#x7CFB;&#x7EDF;&#x90FD;&#x662F; CGI &#x9884;&#x7EA6;&#x7CFB;&#x7EDF;&#xFF0C;&#x4E0D;&#x80FD;&#x91CD;&#x590D;&#x6CE8;&#x518C;&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_22.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><br>
&#x6240;&#x4EE5;&#x5982;&#x679C;&#x56FD;&#x5185;&#x5DF2;&#x7ECF;&#x9884;&#x7EA6;&#x8FC7;&#x9762;&#x7B7E;&#x7684;&#x540C;&#x5B66;&#x9700;&#x8981;&#x628A;&#x56FD;&#x5185;&#x7684; CGI &#x5E10;&#x53F7;&#x8F6C;&#x79FB;&#x5230;&#x65B0;&#x52A0;&#x5761;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x90AE;&#x4EF6;&#x6216;&#x7535;&#x8BDD;&#x8054;&#x7CFB;&#x5927;&#x4F7F;&#x9986;&#x8FDB;&#x884C;&#x8F6C;&#x79FB;&#xFF1B;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x9884;&#x7EA6;&#x8FC7;&#x9762;&#x7B7E;&#x7684;&#x540C;&#x5B66;&#x53EF;&#x4EE5;&#x91CD;&#x65B0;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x6CE8;&#x518C; CGI &#x9884;&#x7EA6;&#x5E10;&#x53F7;&#x3002;</li>
<li>&#x586B;&#x5199; DS-160B &#x8868;</li>
<li>&#x5728;&#x65B0;&#x52A0;&#x5761;&#x652F;&#x4ED8;&#x7F8E;&#x7B7E;&#x8D39;&#x7528;<br>
&#x5728;&#x7F8E;&#x7B7E;&#x5B98;&#x7F51;&#x652F;&#x4ED8;&#x7B7E;&#x8BC1;&#x8D39;&#x7528;&#xFF0C;&#x65B0;&#x52A0;&#x5761;&#x7F8E;&#x7B7E;&#x8D39;&#x662F;&#x4E0D;&#x652F;&#x6301;&#x7EBF;&#x4E0A;&#x4FE1;&#x7528;&#x5361;&#x652F;&#x4ED8;&#xFF0C;&#x5FC5;&#x987B;&#x662F;&#x65B0;&#x52A0;&#x5761;&#x94F6;&#x884C;&#x5361;&#x6216;&#x5728;&#x5F53;&#x5730;&#x7528;&#x73B0;&#x91D1;&#x652F;&#x4ED8;&#x3002;<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_23.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_24.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p><br>
&#x5982;&#x679C;&#x6709;&#x65B0;&#x52A0;&#x5761;&#x670B;&#x53CB;&#xFF0C;&#x751F;&#x6210;&#x81EA;&#x5DF1;&#x7684; Personal CGI reference number &#x540E;&#x4FDD;&#x5B58; PDF &#x53D1;&#x7ED9;&#x65B0;&#x52A0;&#x5761;&#x670B;&#x53CB;&#x5E2E;&#x5FD9;&#x652F;&#x4ED8;&#xFF0C;&#x652F;&#x4ED8;&#x6210;&#x529F;&#x540E;&#x8BA9;&#x670B;&#x53CB;&#x628A;&#x7F34;&#x8D39;&#x6536;&#x636E;&#x53D1;&#x7ED9;&#x4F60;&#x3002;&#x5982;&#x679C;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x6CA1;&#x6709;&#x670B;&#x53CB;&#xFF0C;&#x751F;&#x6210;&#x81EA;&#x5DF1;&#x7684; Personal CGI reference number &#x540E;&#x6253;&#x5370;&#x6B64;&#x652F;&#x4ED8;&#x51ED;&#x6761;&#xFF0C;&#x5E76;&#x643A;&#x5E26;&#x524D;&#x5F80;&#x4EFB;&#x4F55;&#x4E00;&#x5BB6;&#x65B0;&#x52A0;&#x5761;&#x90AE;&#x653F;&#x90AE;&#x5C40;&#x8FDB;&#x884C;&#x73B0;&#x91D1;&#x7F34;&#x8D39;&#xFF0C;&#x5E76;&#x4FDD;&#x7559;&#x597D;&#x7F34;&#x8D39;&#x6536;&#x636E;&#x3002;</li>
<li>&#x9884;&#x7EA6;&#x9762;&#x7B7E;&#x65F6;&#x95F4;<br>
&#x652F;&#x4ED8;&#x7B7E;&#x8BC1;&#x8D39;&#x6210;&#x529F;&#x7B2C;&#x4E8C;&#x4E2A;&#x5DE5;&#x4F5C;&#x65E5;&#x540E;&#xFF0C;&#x7B7E;&#x8BC1;&#x8D39;&#x751F;&#x6548;&#x5C31;&#x53EF;&#x4EE5;&#x9884;&#x7EA6;&#x9762;&#x7B7E;&#x65F6;&#x95F4;&#xFF0C;&#x9884;&#x7EA6;&#x6210;&#x529F;&#x540E;&#x4F1A;&#x6536;&#x5230;&#x4E00;&#x4E2A; Appointment Confirmation &#x9884;&#x7EA6;&#x786E;&#x8BA4;&#x4FE1;&#xFF0C;&#x6253;&#x5370;&#x51FA;&#x6765;&#xFF0C;&#x643A;&#x5E26;&#x524D;&#x5F80;&#x9762;&#x7B7E;&#x3002;&#x91CD;&#x8981;&#xFF1A;&#x6839;&#x636E;&#x7F8E;&#x56FD;&#x9886;&#x4E8B;&#x9986;&#x7684; 14 &#x5929; travel ban&#xFF0C;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x6838;&#x9178;&#x6D4B;&#x8BD5;&#x9634;&#x6027;&#x4EE5;&#x53CA;&#x5728;&#x5F53;&#x5730;&#x9017;&#x7559;&#x6EE1; 14 &#x5929;&#x540E;&#x624D;&#x80FD;&#x524D;&#x5F80;&#x7F8E;&#x56FD;&#x9886;&#x4E8B;&#x9986;&#x529E;&#x7406;&#x7B7E;&#x8BC1;&#xFF0C;&#x5982;&#x679C;&#x843D;&#x5730;&#x65B0;&#x52A0;&#x5761;&#x4E3A;&#x7B2C; 0 &#x5929;&#xFF0C;&#x9762;&#x7B7E;&#x81F3;&#x5C11;&#x5FC5;&#x987B;&#x7EA6;&#x5728;&#x7B2C; 15 &#x5929;&#x3002;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x9762;&#x7B7E;&#x4EE5;&#x540E;&#xFF0C;&#x62A4;&#x7167;&#x4F1A;&#x4EA4;&#x8FD8;&#x7ED9;&#x7533;&#x8BF7;&#x8005;&#x3002;&#x4E00;&#x822C;&#x5728;&#x9762;&#x7B7E;&#x540E; 3-5 &#x4E2A;&#x5DE5;&#x4F5C;&#x65E5;&#x5185;&#x53EF;&#x6536;&#x5230;&#x7B7E;&#x8BC1;&#x4E2D;&#x5FC3;&#x53D1;&#x9001;&#x7684;&#x9886;&#x53D6;&#x901A;&#x77E5;&#x90AE;&#x4EF6;&#xFF0C;&#x81EA;&#x884C;&#x9009;&#x62E9;&#x9886;&#x53D6;&#x65B9;&#x5F0F;&#x53EF;&#x81EA;&#x53D6;&#x6216;&#x90AE;&#x5BC4;&#x3002;&#x6700;&#x540E;&#x5C31;&#x6839;&#x636E;&#x81EA;&#x5DF1;&#x7684;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x662F;&#x9009;&#x62E9;&#x76F4;&#x63A5;&#x4ECE;&#x65B0;&#x52A0;&#x5761;&#x524D;&#x5F80;&#x7F8E;&#x56FD;&#x6216;&#x8FD4;&#x56DE;&#x4E2D;&#x56FD;&#x3002;</li>
</ol>
<p><del>&#x7F8E;&#x56FD;&#x7684; 14 &#x5929;&#x65C5;&#x6E38;&#x7981;&#x4EE4;&#x4F9D;&#x7136;&#x751F;&#x6548;&#xFF0C;&#x6240;&#x4EE5;&#x4E2D;&#x56FD;&#x7559;&#x5B66;&#x751F;&#x524D;&#x5F80;&#x7F8E;&#x56FD;&#x8FD8;&#x662F;&#x9700;&#x8981;&#x5728;&#x7B2C;&#x4E09;&#x56FD;&#x505C;&#x7559; 14 &#x5929;&#x4EE5;&#x4E0A;&#x624D;&#x53EF;&#x4EE5;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x3002;</del></p>
<h3 id="4-%E6%94%BF%E7%AD%96%E5%8F%98%E5%8C%96%E6%97%A0%E5%B8%B8">4. &#x653F;&#x7B56;&#x53D8;&#x5316;&#x65E0;&#x5E38;</h3>
<p>&#x653F;&#x7B56;&#x7684;&#x53D8;&#x5316;&#x5F88;&#x5BB9;&#x6613;&#x6253;&#x4E71;&#x4E00;&#x4E2A;&#x4EBA;&#x539F;&#x6709;&#x7684;&#x5B89;&#x6392;&#x3002;&#x7531;&#x4E8E;&#x75AB;&#x60C5;&#x548C;&#x4E2D;&#x7F8E;&#x5173;&#x7CFB;&#x7684;&#x5F71;&#x54CD;&#xFF0C;&#x7559;&#x5B66;&#x7B7E;&#x8BC1;&#x4E0A;&#x7684;&#x653F;&#x7B56;&#x771F;&#x7684;&#x662F;&#x65F6;&#x523B;&#x5728;&#x53D8;&#x3002;&#x7B14;&#x8005;&#x6765;&#x76D8;&#x70B9;&#x8FD1;&#x51E0;&#x4E2A;&#x6708;&#x6765;&#x7684;&#x53D8;&#x5316;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_1.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>2 &#x6708;&#x7126;&#x6025;&#x7B49;&#x5F85;&#x3002;2021 &#x5E74; 2 &#x6708; 11 &#x53F7;&#x662F;&#x9664;&#x5915;&#xFF0C;&#x5728;&#x6B64;&#x4E4B;&#x524D;&#x7684;&#x51E0;&#x5929;&#xFF0C;&#x7B14;&#x8005;&#x6536;&#x5230;&#x4E86; Cornell &#x7684;&#x62D2;&#x4FE1;&#x3002;&#x6625;&#x8282;&#x671F;&#x95F4;&#x53C8;&#x63A5;&#x5230;&#x4E86; NEU &#x548C; CMU &#x7684;&#x62D2;&#x4FE1;&#x3002;3 &#x8FDE;&#x62D2;&#x4EA7;&#x751F;&#x4E86;&#x8F8D;&#x5B66;&#x8B66;&#x544A;&#x3002;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#x6BCF;&#x5929;&#x65E9;&#x4E0A;&#x4E00;&#x8D77;&#x5E8A;&#x8981;&#x5237;&#x65B0;&#x90AE;&#x7BB1;&#xFF0C;&#x5728;&#x5730;&#x91CC;&#x770B;&#x5F55;&#x53D6;&#x7ED3;&#x679C;&#x3002;&#x4E2D;&#x5348;&#x5348;&#x996D;&#x540E;&#x5237;&#x65B0;&#x90AE;&#x7BB1;&#xFF0C;&#x665A;&#x4E0A;&#x7761;&#x524D;&#x5237;&#x65B0;&#x90AE;&#x7BB1;&#x3002;&#x7F51;&#x4E0A;&#x6D41;&#x4F20;&#x4E86;&#x4E00;&#x4E2A;&#x65B0;&#x540D;&#x8BCD;&#xFF0C;&#x201C;&#x711A;&#x5237;&#x5320;&#x201D;&#xFF0C;&#x6307;&#x7684;&#x662F;&#x6BCF;&#x5929;&#x5FC3;&#x6025;&#x5982;&#x711A;&#xFF0C;&#x75AF;&#x72C2;&#x5237;&#x65B0;&#x90AE;&#x4EF6;&#x7684;&#x4EBA;&#x3002;&#x8FD9;&#x4E2A;&#x8BCD;&#x63CF;&#x8FF0;&#x8FD9;&#x4E2A;&#x6708;&#x7684;&#x6211;&#x592A;&#x5408;&#x9002;&#x4E0D;&#x8FC7;&#x4E86;&#x3002;</p>
<p>3 &#x6708;&#x5C0F;&#x6FC0;&#x52A8;&#x3002;&#x9646;&#x9646;&#x7EED;&#x7EED; CMU &#x5F00;&#x59CB;&#x653E;&#x699C;&#xFF0C;&#x7B14;&#x8005;&#x8FDE;&#x7EED;&#x6536;&#x5230;&#x4E86; 2 &#x4E2A; CMU offer &#x4E86;&#x3002;&#x6B64;&#x65F6;&#x5FC3;&#x6001;&#x5E73;&#x9759;&#x4E86;&#x5F88;&#x591A;&#xFF0C;&#x5F00;&#x59CB;&#x51C6;&#x5907;&#x627E;&#x65B0;&#x5DE5;&#x4F5C;&#x4E86;&#x3002;&#x8BA1;&#x5212;&#x4ECA;&#x5E74;&#x5728;&#x56FD;&#x5185;&#x5E72;&#x5230;&#x5E74;&#x5E95;&#xFF0C;&#x8D5A;&#x70B9;&#x94B1;&#xFF0C;&#x7136;&#x540E; 22spring &#x53BB;&#x7F8E;&#x56FD;&#x672C;&#x571F;&#x4E0A;&#x8BFE;&#x3002;&#x5982;&#x679C;&#x79CB;&#x5B63;&#x75AB;&#x60C5;&#x4E0D;&#x80FD;&#x597D;&#xFF0C;&#x8003;&#x8651;&#x5728;&#x56FD;&#x5185;&#x4E0A;&#x7F51;&#x8BFE;&#x3002;</p>
<p>4 &#x6708;&#x7126;&#x6025;&#x7B49;&#x5F85;&#x3002;CMU &#x7A81;&#x7136;&#x5BA3;&#x5E03; offer &#x4E0D;&#x80FD; defer &#x4E86;&#x3002;&#x5982;&#x679C; 9 &#x6708;&#x4E0D;&#x80FD;&#x6309;&#x65F6;&#x5230;&#x6821;&#xFF0C; offer &#x81EA;&#x52A8;&#x4F5C;&#x5E9F;&#x3002;&#x8FD9;&#x4E2A;&#x653F;&#x7B56;&#x4E00;&#x51FA;&#x6765;&#xFF0C;&#x626F;&#x5230;&#x4E86;&#x4E0D;&#x5C11;&#x7533;&#x8BF7;&#x4EBA;&#x7684;&#x795E;&#x7ECF;&#x3002;&#x7ACB;&#x5373;&#x63D0;&#x4EA4; I-20 &#x6750;&#x6599;&#xFF0C;&#x505A;&#x597D;&#x968F;&#x65F6;&#x98DE;&#x65B0;&#x52A0;&#x5761;&#x7684;&#x6253;&#x7B97;&#x3002;&#x7531;&#x4E8E; CMU &#x7684;&#x653F;&#x7B56;&#xFF0C;&#x5BFC;&#x81F4;&#x63A5;&#x4E0B;&#x6765;&#x51E0;&#x4E2A;&#x6708;&#x7684;&#x5DE5;&#x4F5C;&#x6027;&#x8D28;&#x5FC5;&#x987B;&#x662F;&#x8FDC;&#x7A0B;&#x7684;&#x3002;&#x8FD9;&#x4E5F;&#x6253;&#x65AD;&#x4E86;&#x6211;&#x53BB;&#x5B57;&#x8282;&#x8DF3;&#x52A8;&#x5165;&#x804C;&#x7684;&#x8BA1;&#x5212;&#x4E86;&#x3002;&#x6CA1;&#x6709; CMU &#x8FD9;&#x4E2A;&#x653F;&#x7B56;&#xFF0C;&#x7B14;&#x8005; 100% &#x5165;&#x804C;&#x5B57;&#x8282;&#x8DF3;&#x52A8;&#x4E86;&#x3002;&#x5403;&#x4E0D;&#x5230;&#x5B57;&#x8282;&#x8DF3;&#x52A8;&#x56FD;&#x5185;&#x7684;&#x8C6A;&#x534E;&#x98DF;&#x5802;&#x4E86;&#xFF0C;&#x6234;&#x4E0D;&#x4E86;&#x5B57;&#x8282;&#x7684;&#x7F51;&#x7EA2;&#x5DE5;&#x724C;&#x505A;&#x4EBA;&#x4E0A;&#x4EBA;&#x4E86;&#x3002;&#x8FD9;&#x4E2A;&#x68A6;&#x60F3;&#x53EA;&#x80FD;&#x53BB;&#x7F8E;&#x5E1D; Tiktok &#x5B9E;&#x73B0;&#x4E86;&#x3002;</p>
<p>5 &#x6708;&#x7EE7;&#x7EED;&#x7126;&#x6025;&#x7B49;&#x5F85;&#x3002;CMU &#x7684; I-20 &#x6750;&#x6599;&#x975E;&#x5E38;&#x6162;&#xFF0C;&#x9700;&#x8981;&#x7B49;&#x5F85; 4-6 &#x5468;&#xFF0C;&#x6309;&#x7167;&#x8FD9;&#x4E2A;&#x65F6;&#x95F4;&#x7EBF;&#xFF0C;&#x8981; 6 &#x6708;&#x624D;&#x80FD;&#x62FF;&#x5230;&#x3002;5 &#x6708;&#x56E0;&#x4E3A;&#x653F;&#x7B56;&#x53D8;&#x66F4;&#xFF0C;&#x4E2D;&#x56FD;&#x7559;&#x5B66;&#x751F;&#x8D74;&#x7F8E;&#x89E3;&#x5F00;&#x4E86; NIE &#x8C41;&#x514D;&#x3002;&#x5468;&#x8FB9;&#x4E0D;&#x5C11;&#x8BA2;&#x4E86;&#x65B0;&#x52A0;&#x5761;&#x673A;&#x7968;&#x7684;&#x4F19;&#x4F34;&#x4EEC;&#x7EB7;&#x7EB7;&#x89C9;&#x5F97;&#x64CD;&#x86CB;&#x3002;5 &#x6708; 4 &#x53F7;&#xFF0C;&#x4E2D;&#x56FD;&#x4F7F;&#x9986;&#x5317;&#x4EAC;&#xFF0C;&#x4E0A;&#x6D77;&#xFF0C;&#x5E7F;&#x5DDE;&#xFF0C;&#x6C88;&#x9633;&#x5F00;&#x59CB;&#x5904;&#x7406; F-1 &#x7559;&#x5B66;&#x7B7E;&#x8BC1;&#x3002;&#x518D;&#x4E00;&#x6B21;&#x7ED9;&#x8FD9;&#x4E00;&#x5C4A;&#x7684;&#x7559;&#x5B66;&#x751F;&#x4E0A;&#x4E86;&#x4E00;&#x8BFE;&#x3002;&#x672C;&#x6765;&#x5DF2;&#x7ECF;&#x6253;&#x7B97;&#x597D;&#x53BB;&#x65B0;&#x52A0;&#x5761;&#x7684;&#xFF0C;&#x65B0;&#x52A0;&#x5761;&#x65C5;&#x884C;&#x7B7E;&#xFF0C;&#x822A;&#x7A7A;&#x8C41;&#x514D;&#xFF0C;Airbnb &#x79DF;&#x623F;&#xFF0C;&#x7535;&#x8BDD;&#x5361;&#xFF0C;&#x673A;&#x7968;&#x5168;&#x90E8;&#x529E;&#x7406;&#x5B8C;&#x4E86;&#xFF0C;&#x7A81;&#x7136;&#x56FD;&#x5185;&#x5F00;&#x653E;&#x7B7E;&#x8BC1;&#x4E86;&#x3002;&#x8FD8;&#x6709;&#x4E0D;&#x5C11;&#x5728;&#x65B0;&#x52A0;&#x5761;&#x5DF2;&#x7ECF;&#x88AB; check &#x7684;&#x540C;&#x5B66;&#x54ED;&#x6655;&#x5728;&#x5395;&#x6240;&#x3002;&#x66F4;&#x6709;&#x751A;&#x8005;&#xFF0C;&#x51B2;&#x52A8;&#x81F3;&#x6781;&#x7684;&#x5B69;&#x5B50;&#xFF0C;I-20 &#x8FD8;&#x6CA1;&#x6709;&#x5230;&#x624B;&#xFF0C;&#x7F8E;&#x7B7E; CGI &#x5C31;&#x5148;&#x6CE8;&#x518C;&#x5230;&#x4E86;&#x65B0;&#x52A0;&#x5761;&#xFF0C;&#x586B;&#x597D; DS-160 &#x5E76;&#x7F34;&#x8D39;&#x3002;&#x65E0;&#x8111;&#x51B2;&#x5761;&#x7684;&#x4E0B;&#x573A;&#x662F;&#x635F;&#x5931;&#x4E86;&#x8FD9; 1000 RMB&#x3002;&#x6B64;&#x65F6;&#x5927;&#x6279;&#x7559;&#x5B66;&#x751F;&#x5F00;&#x59CB;&#x8F6C;&#x79FB;&#x7F8E;&#x7B7E; CGI &#x81F3;&#x56FD;&#x5185;&#x3002;&#x76F8;&#x5173;&#x7559;&#x5B66;&#x7B7E;&#x8BC1;&#x7FA4;&#xFF0C;&#x65B0;&#x52A0;&#x5761;&#x7B7E;&#x8BC1;&#x7FA4;&#x90A3;&#x51E0;&#x5929;&#x5168;&#x90E8;&#x7206;&#x70B8;&#xFF0C;&#x77ED;&#x77ED;&#x4E00;&#x4E2A;&#x5C0F;&#x65F6;&#x4E0D;&#x770B;&#x5FAE;&#x4FE1;&#x7FA4;&#xFF0C;&#x5C31;&#x80FD;&#x7D2F;&#x79EF; 2000 &#x6761;&#x6D88;&#x606F;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x4E5F;&#x662F;&#x65E0;&#x8111;&#x51B2;&#x5761;&#x7684;&#x4E00;&#x5458;&#xFF0C;&#x65E0;&#x5948;&#x4E4B;&#x4E0B;&#x4E5F;&#x88AB;&#x8FEB;&#x8F6C;&#x79FB; CGI&#x3002;&#x7ED9;&#x4F7F;&#x9986;&#x75AF;&#x72C2;&#x6253;&#x7535;&#x8BDD;&#x3002;</p>
<ul>
<li>&#x5317;&#x4EAC;&#x5927;&#x4F7F;&#x9986;: 010-5679-4700</li>
<li>&#x4E0A;&#x6D77;&#x9886;&#x4E8B;&#x9986;: 021-5191-5200</li>
<li>&#x5E7F;&#x5DDE;&#x9886;&#x4E8B;&#x9986;: 020-8390-9000</li>
<li>&#x6C88;&#x9633;&#x9886;&#x4E8B;&#x9986;: 024-3166-3400</li>
<li>&#x65B0;&#x52A0;&#x5761;&#x5927;&#x4F7F;&#x9986;: +6 531 585 400</li>
<li>&#x7F8E;&#x56FD;&#x5927;&#x4F7F;&#x9986;: +1 703 665 1986</li>
</ul>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_35.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x7ECF;&#x8FC7; 2 &#x5929;&#x714E;&#x71AC;&#x7684;&#x6253;&#x7535;&#x8BDD;&#xFF0C;&#x7EC8;&#x4E8E;&#x628A; CGI &#x8F6C;&#x56DE;&#x5230; China mainland &#x4E86;&#x3002;&#x56FD;&#x5185;&#x4E0A;&#x6D77;&#x7684;&#x7535;&#x8BDD;&#x8D85;&#x65F6;&#x4F1A;&#x81EA;&#x52A8;&#x65AD;&#x6389;&#x3002;&#x5927;&#x6982; 60 &#x5206;&#x949F;&#x65E0;&#x4EBA;&#x63A5;&#x542C;&#x81EA;&#x52A8;&#x4F1A;&#x65AD;&#xFF0C;&#x7B49;&#x5F85;&#x63D0;&#x793A;&#x97F3;&#x53CB;&#x597D;&#xFF0C;&#x9759;&#x97F3;&#x7565;&#x5E26;&#x7535;&#x6D41;&#x58F0;&#x3002;&#x5317;&#x4EAC;&#x7684;&#x7535;&#x8BDD;&#x4E0D;&#x4F1A;&#x65AD;&#xFF0C;&#x53EF;&#x4EE5;&#x65E0;&#x9650;&#x7B49;&#x5F85;&#xFF0C;&#x76F4;&#x5230;&#x6709;&#x4EBA;&#x63A5;&#x542C;&#xFF0C;&#x7B49;&#x5F85;&#x63D0;&#x793A;&#x97F3;&#x53CB;&#x597D;&#xFF0C;&#x6B63;&#x5E38;&#x7535;&#x8BDD;&#x561F;&#x561F;&#x58F0;&#x3002;&#x65B0;&#x52A0;&#x5761;&#x5927;&#x4F7F;&#x9986;&#x4E5F;&#x4E0D;&#x4F1A;&#x65AD;&#xFF0C;&#x53EF;&#x4EE5;&#x201C;&#x65E0;&#x9650;&#x7B49;&#x5F85;&#x201D;&#xFF0C;&#x76F4;&#x5230;&#x6709;&#x4EBA;&#x63A5;&#x542C;&#xFF0C;&#x7B49;&#x5F85;&#x63D0;&#x793A;&#x97F3;&#x4E0D;&#x53CB;&#x597D;&#xFF0C;&#x662F;&#x8D5B;&#x9A6C;&#x7684;&#x58F0;&#x97F3;&#x3002;&#x672C;&#x6765;&#x7B49;&#x5F85;&#x671F;&#x95F4;&#x5C31;&#x7126;&#x8651;&#xFF0C;&#x518D;&#x914D;&#x8D5B;&#x9A6C;&#x58F0;&#x97F3;&#xFF0C;&#x5F88;&#x641E;&#x5FC3;&#x6001;&#x3002;&#x7B14;&#x8005;&#x6CA1;&#x6709;&#x6D4B;&#x8BD5;&#x8FC7;&#x65B0;&#x52A0;&#x5761;&#x80FD;&#x5426;&#x65E0;&#x9650;&#x7B49;&#x5F85;&#xFF0C;&#x7B14;&#x8005;&#x7B49;&#x4E86; 30 &#x5206;&#x949F;&#x81EA;&#x52A8;&#x65AD;&#x4E86;&#xFF0C;&#x56E0;&#x4E3A;&#x8BDD;&#x8D39;&#x6253;&#x6CA1;&#x4E86;&#xFF0C;&#x7535;&#x8BDD;&#x505C;&#x673A;&#x3002;&#x65B0;&#x52A0;&#x5761;&#x7535;&#x8BDD;&#x5C5E;&#x4E8E;&#x56FD;&#x9645;&#x957F;&#x9014;&#xFF0C;&#x6253;&#x901A;&#x4EE5;&#x540E;&#x5C31;&#x5F00;&#x59CB;&#x6263;&#x8D39;&#xFF0C;&#x5373;&#x4F7F;&#x65E0;&#x4EBA;&#x63A5;&#x542C;&#xFF0C;&#x7B49;&#x5F85;&#x671F;&#x95F4;&#x4E5F;&#x6263;&#x94B1;&#xFF0C;&#x56E0;&#x4E3A;&#x4F60;&#x6253;&#x901A;&#x4E86;&#x8FD9;&#x4E2A;&#x7CFB;&#x7EDF;&#x3002;&#x7B14;&#x8005;&#x4E00;&#x5F00;&#x59CB;&#x4E0D;&#x77E5;&#x9053;&#x6263;&#x8D39;&#x89C4;&#x5219;&#xFF0C;&#x4E8E;&#x662F;&#x4ED8;&#x8D39;&#x542C;&#x4E86; 30 &#x5206;&#x949F;&#x8D5B;&#x9A6C;&#x58F0;&#xFF0C;&#x4E00;&#x5206;&#x949F;&#x4E00;&#x5757;&#x94B1;&#xFF0C;&#x771F;&#x7684;&#x8D35;&#x3002;&#x7B14;&#x8005;&#x6700;&#x7EC8;&#x6253;&#x901A;&#x4E86;&#x7F8E;&#x56FD;&#x4F7F;&#x9986;&#x7684;&#x7535;&#x8BDD;&#xFF0C;&#x8BED;&#x8A00;&#x9009;&#x62E9;&#x82F1;&#x6587;&#x3002;&#x4E2D;&#x95F4;&#x6709;&#x64AD;&#x62A5;&#x5F88;&#x591A;&#x82F1;&#x6587;&#xFF0C;&#x6709;&#x4E9B;&#x53EF;&#x80FD;&#x542C;&#x4E0D;&#x61C2;&#xFF0C;&#x4E0D;&#x8FC7;&#x6CA1;&#x6709;&#x5173;&#x7CFB;&#xFF0C;&#x8BB2;&#x7684;&#x5168;&#x662F;&#x7F8E;&#x7B7E;&#x653F;&#x7B56;&#x76F8;&#x5173;&#x7684;&#x4E1C;&#x897F;&#xFF0C;&#x542C;&#x4E0D;&#x592A;&#x61C2;&#x4E5F;&#x4E0D;&#x6240;&#x8C13;&#x3002;&#x5F53;&#x63D0;&#x793A;&#x4F60;&#x6309;&#x6570;&#x5B57;&#x952E;&#x9009;&#x62E9;&#x65F6;&#xFF0C;&#x4F9D;&#x6B21; 1-2-2-2-5 &#x8F6C;&#x4EBA;&#x5DE5;(&#x6CE8;&#x610F;&#x4E0D;&#x662F;&#x4E00;&#x6B21;&#x6309;&#x5B8C;&#xFF0C;&#x5206; 5 &#x6B21;&#x8F93;&#x51FA;&#xFF0C;&#x7535;&#x8BDD;&#x63D0;&#x793A;&#x97F3;&#x8BA9;&#x4F60;&#x8F93;&#x5165;&#x7684;&#x65F6;&#x5019;&#x518D;&#x8F93;&#x5165;)&#x3002;&#x7B49;&#x5F85; 10-20 &#x5206;&#x949F;&#x540E;&#xFF0C;&#x6709;&#x4EBA;&#x63A5;&#x542C;&#x7535;&#x8BDD;&#xFF0C;&quot;Could please help me to transfer my CGI from Singapore to China mainland?&quot;&#xFF0C;&#x201C;Sure, Of course.&#x201D;&#x3002;&#x4E4B;&#x540E;&#x4F1A;&#x8BA9;&#x4F60;&#x62A5;&#x51FA;&#x62A4;&#x7167;&#x53F7;&#xFF0C;&#x540D;&#x5B57;&#x4EE5;&#x53CA;&#x5B57;&#x6BCD;&#x62FC;&#x5199;&#xFF0C;&#x751F;&#x65E5;&#x7B49;&#x9A8C;&#x8BC1;&#x4FE1;&#x606F;&#x3002;&#x5927;&#x7EA6; 3 &#x5206;&#x949F;&#x4FBF;&#x64CD;&#x4F5C;&#x5B8C;&#x6210;&#x3002;</p>
<h3 id="5-%E4%B8%80%E7%AD%BE">5. &#x4E00;&#x7B7E;</h3>
<p>&#x7B14;&#x8005;&#x7684;&#x4E00;&#x7B7E;&#x88AB;&#x62D2;&#x7B7E;&#x4E86;&#x3002;&#x8BF7;&#x4E86; 2 &#x5929;&#x5047;&#x4ECE;&#x4E0A;&#x6D77;&#x98DE;&#x5230;&#x5317;&#x4EAC;&#x5B89;&#x5BB6;&#x697C;&#xFF0C;&#x672C;&#x4EE5;&#x4E3A;&#x53EF;&#x4EE5;&#x597D;&#x8FD0;&#xFF0C;&#x4F46;&#x662F;&#x7ED3;&#x679C;&#x5374;&#x6070;&#x6070;&#x76F8;&#x53CD;&#x3002;&#x8BA2;&#x7684;&#x9152;&#x5E97;&#x5F88;&#x4FBF;&#x5B9C;&#xFF0C;&#x5C31;&#x5728;&#x5317;&#x4EAC;&#x7F8E;&#x56FD;&#x5927;&#x4F7F;&#x9986;&#x65C1;&#x8FB9;&#x3002;&#x524D;&#x4E00;&#x5929;&#x665A;&#x4E0A;&#x98DE;&#x673A;&#x843D;&#x5730;&#x540E;&#xFF0C;&#x6DCB;&#x7740;&#x66B4;&#x96E8;&#x5165;&#x4F4F;&#x4E86;&#x9152;&#x5E97;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_44.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x5317;&#x4EAC;&#x7F8E;&#x56FD;&#x5927;&#x4F7F;&#x9986;&#x771F;&#x7684;&#x5F88;&#x5927;&#xFF0C;&#x50CF;&#x4E00;&#x4E2A;&#x8D85;&#x5927;&#x7684;&#x56DB;&#x5408;&#x9662;&#x3002;&#x8FD9;&#x662F;&#x5728;&#x5916;&#x9762;&#x770B;&#x7684;&#x6837;&#x5B50;&#x3002;&#x5185;&#x90E8;&#x4E0D;&#x51C6;&#x5E26;&#x624B;&#x673A;&#xFF0C;&#x6240;&#x4EE5;&#x6CA1;&#x6709;&#x7167;&#x7247;&#x80FD;&#x5C55;&#x793A;&#x7ED9;&#x5927;&#x5BB6;&#x3002;6 &#x6708; 17 &#x53F7;&#x662F;&#x7B14;&#x8005;&#x9762;&#x7B7E;&#x7684;&#x65E5;&#x5B50;&#x3002;&#x524D;&#x4E00;&#x5929;&#x66B4;&#x96E8;&#xFF0C;&#x7ED3;&#x679C;&#x7B2C;&#x4E8C;&#x5929;&#x65E9;&#x4E0A;&#x5C31;&#x5929;&#x6674;&#x4E86;&#x3002;&#x8FD8;&#x4EE5;&#x4E3A;&#x662F;&#x597D;&#x8FD0;&#x5462;&#x3002;&#x65E9;&#x4E0A;&#x5728;&#x9152;&#x5E97;&#x5403;&#x5B8C;&#x65E9;&#x9910;&#xFF0C;&#x5750;&#x7535;&#x68AF;&#x4E0B;&#x697C;&#xFF0C;&#x7535;&#x68AF;&#x91CC;&#x9762;&#x90FD;&#x662F;&#x5B66;&#x751F;&#xFF0C;&#x624B;&#x4E0A;&#x5939;&#x7740;&#x6587;&#x4EF6;&#x5939;&#x3002;&#x4E00;&#x770B;&#x5C31;&#x77E5;&#x9053;&#x662F;&#x6765;&#x9762;&#x7B7E;&#x7684;&#x5B66;&#x751F;&#x3002;&#x6211;&#x8DDF;&#x968F;&#x7740;&#x4EBA;&#x7FA4;&#xFF0C;&#x6765;&#x5230;&#x4E86;&#x7F8E;&#x9886;&#x9986;&#x3002;&#x4E0A;&#x56FE;&#x662F;&#x7F8E;&#x9886;&#x9986;&#x7684;&#x540E;&#x9762;&#xFF0C;&#x5B9E;&#x9645;&#x7B7E;&#x8BC1;&#x8981;&#x56F4;&#x7740;&#x8FD9;&#x4E2A;&#x5EFA;&#x7B51;&#x8F6C;&#x4E00;&#x5708;&#xFF0C;&#x8D70;&#x5230;&#x5B83;&#x7684;&#x6B63;&#x95E8;&#x3002;&#x6B63;&#x95E8;&#x90A3;&#x91CC;&#x6392;&#x961F;&#x7684;&#x5B66;&#x751F;&#x4E00;&#x5708;&#x53C8;&#x4E00;&#x5708;&#x3002;&#x7531;&#x4E8E; 2020 &#x5E74;&#x7684;&#x75AB;&#x60C5;&#xFF0C;20 fall &#x7684;&#x5B66;&#x751F;&#x90FD;&#x6CA1;&#x6709;&#x529E;&#x6CD5;&#x83B7;&#x5F97;&#x7B7E;&#x8BC1;&#xFF0C;&#x5728;&#x56FD;&#x5185;&#x4E0A;&#x4E86;&#x4E00;&#x5E74;&#x7684;&#x7F51;&#x8BFE;&#x3002;&#x5982;&#x4ECA;&#x4E2D;&#x56FD;&#x672C;&#x571F;&#x7B7E;&#x8BC1;&#x5F00;&#x653E;&#xFF0C;&#x7B97;&#x662F;&#x91CA;&#x653E;&#x4E86;&#x4ED6;&#x4EEC;&#x538B;&#x6291;&#x8BB8;&#x4E45;&#x7684;&#x5FC3;&#x60C5;&#x3002;&#x6211;&#x662F;&#x9884;&#x7EA6;&#x7684;&#x65E9;&#x4E0A; 7:45 &#x9762;&#x7B7E;&#x3002;7:30 &#x5230;&#x4F7F;&#x9986;&#x4E86;&#xFF0C;&#x95E8;&#x53E3;&#x7684;&#x4EBA;&#x5DF2;&#x7ECF;&#x6709; 1000 &#x591A;&#x4E2A;&#x5B66;&#x751F;&#x4E86;&#x3002;&#x6392;&#x961F;&#x662F;&#x86C7;&#x5F62;&#x7684;&#xFF0C;&#x800C;&#x4E14;&#x8FD8;&#x7ED5;&#x4E86; 3 &#x5927;&#x5708;&#x86C7;&#x5F62;&#x3002;20 &#x5C4A; + 21 &#x5C4A;&#x7684;&#x5B66;&#x751F;&#x5BF9;&#x7B7E;&#x8BC1;&#x7684;&#x9700;&#x6C42;&#x91CF;&#x5B9E;&#x5728;&#x592A;&#x5927;&#x4E86;&#x3002;&#x5317;&#x4EAC;&#x4F7F;&#x9986;&#x4E5F;&#x975E;&#x5E38;&#x4E89;&#x6C14;&#xFF0C;&#x706B;&#x529B;&#x5168;&#x5F00;&#x3002;2 &#x5C42;&#x697C;&#x603B;&#x5171; 48 &#x4E2A;&#x7A97;&#x53E3;&#x5168;&#x90E8;&#x5F00;&#x653E;&#x5B66;&#x751F;&#x7B7E;&#x8BC1;&#x670D;&#x52A1;&#x3002;&#x8FDB;&#x5927;&#x4F7F;&#x9986;&#x4E4B;&#x524D;&#x9700;&#x8981;&#x628A;&#x968F;&#x8EAB;&#x7684;&#x6C34;&#x74F6;&#xFF0C;&#x96E8;&#x4F1E;&#xFF0C;&#x7535;&#x5B50;&#x8BBE;&#x5907;&#x90FD;&#x5B58;&#x5230;&#x5BF9;&#x9762;&#x7684;&#x5B58;&#x5305;&#x5904;&#x3002;&#xFF08;&#x5B58;&#x5305;&#x5904;&#x9700;&#x8981;&#x6536;&#x8D39;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x5BB6;&#x957F;&#x966A;&#x540C;&#xFF0C;&#x53EF;&#x4EE5;&#x7701;&#x4E0B;&#x5B58;&#x5305;&#x7684;&#x94B1;&#xFF09;&#x8FDB;&#x5927;&#x4F7F;&#x9986;&#x53EA;&#x80FD;&#x5E26;&#x81EA;&#x5DF1;&#x7684;&#x9762;&#x7B7E;&#x6750;&#x6599;&#x3002;&#x8FDB;&#x95E8;&#x6709;&#x5B89;&#x68C0;&#xFF0C;&#x76AE;&#x5E26;&#x4E0A;&#x6709;&#x91D1;&#x5C5E;&#x7269;&#x4E5F;&#x4F1A;&#x88AB;&#x67E5;&#x3002;&#x8FDB;&#x53BB;&#x4EE5;&#x540E;&#x7B2C;&#x4E00;&#x9053;&#x5173;&#x662F;&#x9A8C; I-20 &#x6587;&#x4EF6;&#x548C;&#x62A4;&#x7167;&#x4FE1;&#x606F;&#x3002;&#x68C0;&#x67E5;&#x5B8C;&#x4EE5;&#x540E;&#x7EE7;&#x7EED;&#x6392;&#x961F;&#xFF0C;&#x6536;&#x96C6;&#x6307;&#x7EB9;&#xFF0C;&#x53CC;&#x624B;&#x5341;&#x4E2A;&#x6307;&#x5934;&#x90FD;&#x9700;&#x8981;&#x6309;&#x6307;&#x7EB9;&#x3002;&#x6536;&#x96C6;&#x6307;&#x7EB9;&#x7ED3;&#x675F;&#xFF0C;&#x5C31;&#x5230;&#x7B2C;&#x4E8C;&#x5173;&#xFF0C;&#x6392;&#x961F;&#x7B49;&#x5F85;&#x9762;&#x7B7E;&#x3002;&#x73B0;&#x5728;&#x6709;&#x573A;&#x63A7;&#xFF0C;&#x5B89;&#x6392;&#x4F60;&#x5230;&#x54EA;&#x4E2A;&#x7A97;&#x53E3;&#x53BB;&#x9762;&#x7B7E;&#xFF0C;&#x81EA;&#x5DF1;&#x65E0;&#x6CD5;&#x9009;&#x62E9;&#x3002;&#x5982;&#x679C;&#x4F60;&#x53D1;&#x73B0;&#x4F60;&#x65C1;&#x8FB9;&#x7A97;&#x53E3;&#x4E00;&#x76F4;&#x5728;&#x53D1;&#x62D2;&#x4FE1;&#xFF0C;&#x800C;&#x573A;&#x63A7;&#x53C8;&#x5B89;&#x6392;&#x4F60;&#x5230;&#x90A3;&#x4E2A;&#x7A97;&#x53E3;&#xFF0C;&#x53EA;&#x80FD;&#x81EA;&#x6C42;&#x591A;&#x798F;&#xFF0C;&#x6B32;&#x54ED;&#x65E0;&#x6CEA;&#x3002;&#x6211;&#x88AB;&#x5B89;&#x6392;&#x5230;&#x4E86;&#x4E00;&#x697C;&#x7684;&#x4E00;&#x4E2A;&#x9760;&#x5899;&#x8FB9;&#x7684;&#x7A97;&#x53E3;&#xFF0C;&#x9762;&#x7B7E;&#x5B98;&#x662F;&#x4E9A;&#x88D4;&#x7537;&#x3002;&#x7531;&#x4E8E;&#x662F;&#x5B66;&#x751F;&#x7B7E;&#x8BC1;&#xFF0C;&#x6240;&#x4EE5;&#x5168;&#x7A0B;&#x5FC5;&#x987B;&#x7528;&#x82F1;&#x6587;&#x56DE;&#x7B54;&#xFF0C;&#x68C0;&#x6D4B;&#x4F60;&#x662F;&#x5426;&#x5177;&#x6709;&#x53BB;&#x7F8E;&#x56FD;&#x8BFB;&#x4E66;&#x7684;&#x8D44;&#x683C;&#x3002;&#x9762;&#x7B7E;&#x5B98;&#x95EE;&#x4E86;&#x6211;&#x5F88;&#x591A;&#x95EE;&#x9898;&#x3002;&#x6211;&#x63A8;&#x6D4B;&#x6211;&#x88AB;&#x6302;&#x7684;&#x539F;&#x56E0;&#x662F;&#xFF0C;&#x4ED6;&#x95EE;&#x6211;&#x7559;&#x5B66;&#x8D44;&#x91D1;&#x662F;&#x8C01;&#x8D5E;&#x52A9;&#x7684;&#x3002;&#x6211;&#x56DE;&#x7B54;&#x8BF4;&#x6211;&#x81EA;&#x5DF1;&#x3002;&#x7136;&#x540E;&#x4ED6;&#x53C8;&#x95EE;&#x6211;&#x5DE5;&#x4F5C;&#x51E0;&#x5E74;&#x4E86;&#x3002;&#x6211;&#x8BF4;&#x5FEB;&#x4E94;&#x5E74;&#x4E86;&#x3002;&#x4E4B;&#x540E;&#x53C8;&#x8349;&#x8349;&#x95EE;&#x4E86;&#x4E00;&#x4E0B;&#x95EE;&#x9898;&#x3002;&#x8FD9;&#x91CC;&#x6211;&#x53EF;&#x80FD;&#x5C31;&#x5DF2;&#x7ECF;&#x6302;&#x4E86;&#x3002;&#x5DE5;&#x4F5C; 5 &#x5E74;&#xFF0C;&#x6709;&#x5DE5;&#x4F5C;&#x80FD;&#x529B;&#xFF0C;&#x5E76;&#x4E14;&#x6512;&#x4E86;&#x4E00;&#x5927;&#x7B14;&#x94B1;&#xFF0C;&#x8FD8;&#x643A;&#x5E26;&#x5BB6;&#x5C5E;&#x3002;&#x79FB;&#x6C11;&#x503E;&#x5411;&#x592A;&#x591A;&#x4E8E;&#x5F3A;&#x70C8;&#x4E86;&#xFF01;&#x76F4;&#x63A5;&#x62D2;&#x7B7E;&#xFF01;&#x5F53;&#x524D;&#x8FD9;&#x4E9B;&#x62D2;&#x7B7E;&#x7406;&#x7531;&#x90FD;&#x662F;&#x6211;&#x731C;&#x60F3;&#x7684;&#x3002;&#x62D2;&#x7B7E;&#x4E0D;&#x4F1A;&#x544A;&#x8BC9;&#x6211;&#x4EEC;&#x7406;&#x7531;&#x3002;&#x4E8E;&#x662F;&#x7ED9;&#x4E86;&#x6211;&#x4E0B;&#x56FE;&#x7684;&#x8FD9;&#x4E2A;&#x767D;&#x5355;&#x5B50;&#x5C31;&#x51FA;&#x6765;&#x4E86;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_50.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x62D2;&#x7B7E;&#x7406;&#x7531;&#x662F; 214b&#x3002;&#x8BF4;&#x6211;&#x65E0;&#x6CD5;&#x8BC1;&#x660E;&#x653E;&#x5F03;&#x5728;&#x7F8E;&#x56FD;&#x4E4B;&#x5916;&#x6709;&#x65E0;&#x6CD5;&#x653E;&#x5F03;&#x7684;&#x5C45;&#x4F4F;&#x6761;&#x4EF6;&#x3002;&#x56FD;&#x5185;&#x7F3A;&#x5C11;&#x7EA6;&#x675F;&#x529B;&#xFF1A;&#x804C;&#x4E1A;&#xFF0C;&#x5DE5;&#x4F5C;&#xFF0C;&#x5B66;&#x6821;&#xFF0C;&#x5BB6;&#x5EAD;&#x53CA;&#x793E;&#x4F1A;&#x5173;&#x7CFB;&#x3002;&#x62FF;&#x4E86;&#x8FD9;&#x4E2A;&#x767D;&#x7EB8;&#x4EE5;&#x540E;&#xFF0C;&#x6574;&#x4E2A;&#x4EBA;&#x90FD;&#x61F5;&#x4E86;&#x3002;&#x77AC;&#x95F4;&#x4E0D;&#x77E5;&#x9053;&#x600E;&#x4E48;&#x529E;&#x3002;&#x7559;&#x5B66;&#x4E4B;&#x8DEF;&#x5C31;&#x6B64;&#x65AD;&#x7EDD;&#x4E86;&#xFF1F;&#x8D70;&#x51FA;&#x4F7F;&#x9986;&#xFF0C;&#x9633;&#x5149;&#x5F88;&#x5927;&#x5F88;&#x7099;&#x70ED;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x7684;&#x5185;&#x5FC3;&#x5374;&#x4E0B;&#x8D77;&#x4E86;&#x503E;&#x76C6;&#x5927;&#x96E8;&#x96E8;&#x3002;&#x56DE;&#x5230;&#x9152;&#x5E97;&#x6E05;&#x7406;&#x884C;&#x674E;&#xFF0C;&#x7136;&#x540E;&#x62D6;&#x7740;&#x884C;&#x674E;&#x5230;&#x4E86;&#x9996;&#x90FD;&#x673A;&#x573A;&#x3002;&#x8FD9;&#x4E00;&#x8DEF;&#x90FD;&#x4E0D;&#x77E5;&#x9053;&#x662F;&#x600E;&#x4E48;&#x8D70;&#x8FC7;&#x53BB;&#x4E86;&#x3002;&#x8111;&#x888B;&#x4E00;&#x7247;&#x7A7A;&#x767D;&#xFF0C;&#x6CA1;&#x4E86;&#x8BB0;&#x5FC6;&#xFF0C;&#x5DF2;&#x7ECF;&#x6CA1;&#x4E86;&#x7075;&#x9B42;&#xFF0C;&#x8089;&#x4F53;&#x62D6;&#x7740;&#x5230;&#x4E86;&#x673A;&#x573A;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_45.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x78B0;&#x5DE7;&#x7684;&#x662F;&#xFF0C;&#x4ECA;&#x5929;&#x8FD8;&#x9047;&#x5230;&#x4E86;&#x795E;&#x821F;&#x5341;&#x4E8C;&#x53F7;&#x8F7D;&#x4EBA;&#x98DE;&#x8239;&#x53D1;&#x5C04;&#xFF0C;&#x5317;&#x4EAC;&#x65F6;&#x95F4; 2021 &#x5E74; 6 &#x6708; 17 &#x65E5;&#x3002;&#x98DE;&#x884C;&#x4E58;&#x7EC4;&#x7531;&#x822A;&#x5929;&#x5458;&#x8042;&#x6D77;&#x80DC;&#x3001;&#x5218;&#x4F2F;&#x660E;&#x548C;&#x6C64;&#x6D2A;&#x6CE2;&#x4E09;&#x4EBA;&#x7EC4;&#x6210;&#x3002;&#x7531;&#x4E8E;&#x795E;&#x5341;&#x4E8C;&#x7684;&#x53D1;&#x5C04;&#xFF0C;&#x9996;&#x90FD;&#x673A;&#x573A;&#x5B9E;&#x884C;&#x7A7A;&#x4E2D;&#x7BA1;&#x5236;&#x3002;&#x6240;&#x6709;&#x7684;&#x822A;&#x7A7A;&#x7EBF;&#x8DEF;&#x505C;&#x6B62;&#x5BA2;&#x8FD0;&#x98DE;&#x673A;&#x98DE;&#x884C;&#x3002;&#x65E9;&#x4E0A; 11 &#x70B9;&#x7684;&#x98DE;&#x673A;&#x3002;&#x4E00;&#x76F4;&#x7B49;&#x5230;&#x4E0B;&#x5348; 5 &#x70B9;&#x624D;&#x8D77;&#x98DE;&#x3002;&#x8FD9;&#x4E00;&#x5929;&#x662F;&#x5168;&#x56FD;&#x6B22;&#x5E86;&#x795E;&#x5DDE;&#x5341;&#x4E8C;&#x53F7;&#x6210;&#x529F;&#x53D1;&#x5C04;&#x7684;&#x65E5;&#x5B50;&#x3002;&#x4F46;&#x662F;&#x6211;&#x4E00;&#x4E2A;&#x4EBA;&#x4E00;&#x70B9;&#x90FD;&#x9AD8;&#x5174;&#x4E0D;&#x8D77;&#x6765;&#x3002;&#x5750;&#x5728;&#x673A;&#x573A;&#x9ED1;&#x6697;&#x7684;&#x5C0F;&#x89D2;&#x843D;&#xFF0C;&#x5FC3;&#x91CC;&#x9ED8;&#x9ED8;&#x6D41;&#x6CEA;&#x3002;</p>
<h3 id="6-%E4%BA%8C%E7%AD%BE">6. &#x4E8C;&#x7B7E;</h3>
<p>&#x7B14;&#x8005;&#x7531;&#x4E8E;&#x4E00;&#x7B7E;&#x7684;&#x5931;&#x8D25;&#x3002;&#x56DE;&#x5230;&#x4E0A;&#x6D77;&#x5F00;&#x59CB;&#x53CD;&#x601D;&#x4E8C;&#x7B7E;&#x600E;&#x4E48;&#x529E;&#x3002;&#x5DF2;&#x7ECF;&#x5FEB;&#x5230;&#x4E86; 7 &#x6708;&#x4E86;&#x3002;&#x8DDD;&#x79BB;&#x5F00;&#x5B66;&#x53EA;&#x5269; 8 &#x5468;&#x7684;&#x65F6;&#x95F4;&#x4E86;&#x3002;&#x5728;&#x5730;&#x91CC;&#x770B;&#x4E86;&#x5F88;&#x591A;&#x88AB;&#x62D2;&#x7B7E;&#x7684;&#x5E16;&#x5B50;&#xFF0C;&#x548C;&#x6211;&#x60C5;&#x51B5;&#x7C7B;&#x4F3C;&#x7684;&#x6BD4;&#x8F83;&#x5C11;&#x3002;&#x6211;&#x4E5F;&#x4E00;&#x76F4;&#x627E;&#x4E0D;&#x5230;&#x597D;&#x7684;&#x7A81;&#x7834;&#x70B9;&#x3002;&#x53EA;&#x8981;&#x60F3;&#x529E;&#x6CD5;&#x7834;&#x9664;&#x6389;&#x201C;&#x7F3A;&#x5C11;&#x7EA6;&#x675F;&#x529B;&#x201D;&#x8FD9;&#x4E2A;&#x6761;&#x4EF6;&#xFF0C;&#x4E8C;&#x7B7E;&#x624D;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x7B7E;&#x3002;&#x56E0;&#x4E3A;&#x4F60;&#x518D;&#x6B21;&#x7533;&#x8BF7;&#x9762;&#x7B7E;&#xFF0C;&#x7CFB;&#x7EDF;&#x4E2D;&#x4F1A;&#x8BA9;&#x4F60;&#x586B;&#x5199;&#xFF0C;&#x8FD9;&#x6B21;&#x7533;&#x8BF7;&#x548C;&#x4E0A;&#x6B21;&#x7533;&#x8BF7;&#x6709;&#x54EA;&#x4E9B;&#x4E0D;&#x540C;&#x7684;&#x5730;&#x65B9;&#x3002;&#x5982;&#x679C;&#x4F60;&#x628A;&#x4E0A;&#x6B21;&#x7684;&#x6750;&#x6599;&#x539F;&#x5C01;&#x4E0D;&#x52A8;&#x7684;&#x518D;&#x63D0;&#x4EA4;&#x4E0A;&#x53BB;&#xFF0C;&#x4E8C;&#x7B7E;&#x76F4;&#x63A5;&#x62D2;&#x7EDD;&#x4F60;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_47.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x8FD9;&#x6B21;&#x4E8C;&#x7B7E;&#x6211;&#x6CA1;&#x6709;&#x643A;&#x7B7E;&#xFF0C;&#x6CA1;&#x6709;&#x5E26;&#x6211;&#x59B9;&#x5B50;&#x4E00;&#x8D77;&#x53BB;&#x3002;&#x6253;&#x7B97;&#x4E00;&#x4E2A;&#x4EBA;&#x53BB;&#x7B7E;&#xFF0C;&#x8BA9;&#x6211;&#x59B9;&#x5B50;&#x4F5C;&#x4E3A;&#x6211;&#x5728;&#x56FD;&#x5185;&#x7684;&#x7EA6;&#x675F;&#x529B;&#x3002;&#x7559;&#x5B66;&#x5B58;&#x6B3E;&#x6211;&#x4E5F;&#x6539;&#x6210;&#x662F;&#x7236;&#x6BCD;&#x63D0;&#x4F9B;&#x3002;&#x8FD8;&#x597D;&#x6211;&#x8FD8;&#x7559;&#x6709; 4 &#x4E2A;&#x6708;&#x524D;&#x7684;&#x94F6;&#x884C;&#x8F6C;&#x8D26;&#x8BB0;&#x5F55;&#x3002;&#x8FD9;&#x4E00;&#x70B9;&#x7834;&#x9664;&#x6211;&#x643A;&#x5E26;&#x5927;&#x91CF;&#x4E2A;&#x4EBA;&#x8D44;&#x91D1;&#x51C6;&#x5907;&#x79FB;&#x6C11;&#x7684;&#x503E;&#x5411;&#x3002;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x7EA6;&#x675F;&#x529B;&#x662F;&#x72EC;&#x751F;&#x5B50;+&#x623F;&#x4EA7;&#x3002;&#x8BF4;&#x660E;&#x4E0A;&#x4E5F;&#x5199;&#x660E;&#x81EA;&#x5DF1;&#x8BFB;&#x5B8C;&#x4E66;&#x7ACB;&#x5373;&#x56DE;&#x56FD;&#x3002;&#xFF08;&#x597D;&#x50CF;&#x6BCF;&#x4E2A;&#x4EBA;&#x90FD;&#x4F1A;&#x8FD9;&#x4E48;&#x5199;&#x1F602;&#xFF09;&#x4E00;&#x7B7E;&#x6218;&#x8D25;&#x5B89;&#x5BB6;&#x697C;&#xFF0C;&#x4E8C;&#x7B7E;&#x518D;&#x6218;&#x6885;&#x9F99;&#x9547;&#x3002;&#x4E0A;&#x6D77;&#x7684;&#x4F7F;&#x9986;&#x5730;&#x70B9;&#x5728;&#x6885;&#x9647;&#x9547;&#x3002;&#x7B7E;&#x8BC1;&#x90A3;&#x5929;&#x6211;&#x59B9;&#x5B50;&#x966A;&#x7740;&#x6211;&#x4E00;&#x8D77;&#x5230;&#x4E86;&#x4F7F;&#x9986;&#x697C;&#x4E0B;&#x3002;&#x5979;&#x5E2E;&#x6211;&#x62FF;&#x4E86;&#x5305;&#x5305;&#xFF0C;&#x7701;&#x4E86;&#x5B58;&#x5305;&#x94B1;&#x3002;&#x6D41;&#x7A0B;&#x548C;&#x5728;&#x5317;&#x4EAC;&#x4F7F;&#x9986;&#x662F;&#x5B8C;&#x5168;&#x4E00;&#x6837;&#x7684;&#x3002;&#x9762;&#x7B7E;&#x6392;&#x961F;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x4E00;&#x76F4;&#x5728;&#x89C2;&#x5BDF;&#x65C1;&#x8FB9;&#x51E0;&#x4E2A;&#x7A97;&#x53E3;&#x7684;&#x51FA;&#x7B7E;&#x7387;&#x3002;&#x6211;&#x8FD9;&#x4E2A;&#x961F;&#x4F0D;&#x524D;&#x9762; 2 &#x4E2A;&#x4EBA;&#x90FD;&#x88AB; check &#x4E86;&#x3002;&#x4E00;&#x4E2A;&#x751F;&#x7269;&#x79D1;&#x5B66;&#x7684;&#x5973;&#x751F;&#x548C;&#x5386;&#x53F2;&#x5B66;&#x7684;&#x7537;&#x751F;&#x3002;&#x8F6E;&#x5230;&#x6211;&#x9762;&#x7B7E;&#x4E86;&#x3002;&#x5148;&#x7B80;&#x77ED;&#x4E86;&#x95EE;&#x4E86;&#x51E0;&#x4E2A;&#x4E2A;&#x4EBA;&#x4FE1;&#x606F;&#x7684;&#x95EE;&#x9898;&#x3002;&#x7136;&#x540E;&#x9762;&#x7B7E;&#x5B98;&#x5C31;&#x8BA9;&#x6211;&#x7B49;&#x7B49;&#x3002;&#x4ED6;&#x5728;&#x6D4F;&#x89C8;&#x6211;&#x4E0A;&#x6B21;&#x9762;&#x7B7E;&#x88AB;&#x62D2;&#x7B7E;&#x7684;&#x7406;&#x7531;&#x3002;&#x6D4F;&#x89C8;&#x4E86;&#x6709; 5 &#x5206;&#x591A;&#x949F;&#x3002;&#x770B;&#x6765;&#x4E0A;&#x4E2A;&#x9762;&#x7B7E;&#x5B98;&#x5199;&#x4E86;&#x5F88;&#x591A;&#x5173;&#x4E8E;&#x6211;&#x7684;&#x201C;&#x574F;&#x8BDD;&#x201D;&#x554A;&#x3002;&#x7B49;&#x5F85;&#x7684;&#x65F6;&#x95F4;&#x771F;&#x7684;&#x5F88;&#x714E;&#x71AC;&#x3002;&#x6211;&#x5DEE;&#x70B9;&#x4EE5;&#x4E3A;&#x6211;&#x8FD8;&#x6CA1;&#x9762;&#x5C31;&#x8981;&#x6302;&#x3002;&#x8FD9;&#x6B21;&#x7684;&#x9762;&#x7B7E;&#x5B98;&#x662F;&#x7F8E;&#x56FD;&#x4EBA;&#x3002;&#x4ED6;&#x770B;&#x5B8C;&#x6211;&#x7684;&#x201C;&#x574F;&#x8BDD;&#x201D;&#x4EE5;&#x540E;&#xFF0C;&#x5C31;&#x5F00;&#x59CB;&#x9762;&#x8BD5;&#x6211;&#x4E86;&#x3002;&#x95EE;&#x9898;&#x5168;&#x662F;&#x9488;&#x5BF9;&#x4E0A;&#x4E00;&#x4E2A;&#x9762;&#x7B7E;&#x5B98;&#x5199;&#x7684;&#x6211;&#x7684;&#x574F;&#x8BDD;&#x7684;&#x95EE;&#x9898;&#x3002;&#x6211;&#x5C0F;&#x5FC3;&#x7FFC;&#x7FFC;&#x7684;&#x56DE;&#x7B54;&#x7740;&#x3002;&#x95EE;&#x4E86;&#x6211;&#x4E3A;&#x4EC0;&#x4E48;&#x5C45;&#x4F4F;&#x5728;&#x4E0A;&#x6D77;&#x5374;&#x8DD1;&#x5230;&#x5317;&#x4EAC;&#x53BB;&#x7B7E;&#x8BC1;&#xFF1F;&#x4E3A;&#x4EC0;&#x4E48;&#x4E0A;&#x6B21;&#x662F; 2 &#x4E2A;&#x4EBA;&#xFF0C;&#x8FD9;&#x6B21;&#x5374;&#x662F;&#x4E00;&#x4E2A;&#x4EBA;&#x6765;&#x9762;&#x7B7E;&#xFF1F;&#x8D44;&#x91D1;&#x600E;&#x4E48;&#x8BC1;&#x660E;&#x4E0D;&#x662F;&#x6211;&#x81EA;&#x5DF1;&#x7684;&#xFF0C;&#x800C;&#x662F;&#x7236;&#x6BCD;&#x63D0;&#x4F9B;&#x7684;&#xFF1F;&#x524D;&#x524D;&#x540E;&#x540E;&#x76D8;&#x95EE;&#x4E86;&#x6574;&#x6574; 1 &#x4E2A;&#x5C0F;&#x65F6;&#x3002;&#x6211;&#x56DE;&#x7B54;&#x7684;&#x53E3;&#x5E72;&#x820C;&#x71E5;&#x3002;&#x6700;&#x540E;&#x7ED9;&#x6211;&#x7684;&#x7ED3;&#x679C;&#x662F;&#x4E00;&#x5F20;&#x9EC4;&#x8272;&#x7684;&#x7EB8;&#xFF0C;check&#xFF01;&#x8BA9;&#x6211;&#x56DE;&#x53BB;&#x7B49;&#x5F85;&#xFF0C;&#x4E0D;&#x9700;&#x8981;&#x8865;&#x6750;&#x6599;&#x3002;&#x6211;&#x770B;&#x6211;&#x53C8;&#x8981;&#x88AB;&#x62D2;&#x7B7E;&#x4E86;&#x3002;&#x5F53;&#x573A;&#x5FC3;&#x6001;&#x5C31;&#x5D29;&#x4E86;&#x3002;&#x6211;&#x4ECE;&#x9762;&#x7B7E;&#x7A97;&#x53E3;&#x8D70;&#x51FA;&#x6765;&#xFF0C;&#x6392;&#x5728;&#x6211;&#x540E;&#x9762;&#x7684;&#x90FD;&#x6CA1;&#x4EBA;&#x4E86;&#x3002;&#x56E0;&#x4E3A;&#x6211;&#x9762;&#x4E86;&#x592A;&#x957F;&#x65F6;&#x95F4;&#xFF0C;&#x573A;&#x63A7;&#x628A;&#x6392;&#x5728;&#x6211;&#x540E;&#x9762;&#x7684;&#x4EBA;&#x90FD;&#x5B89;&#x6392;&#x5230;&#x5176;&#x4ED6;&#x7A97;&#x53E3;&#x4E86;&#x3002;&#x6211;&#x62FF;&#x7740;&#x9EC4;&#x8272;&#x5355;&#x5B50;&#x4E0B;&#x4E86;&#x697C;&#x3002;&#x627E;&#x5230;&#x6211;&#x7684;&#x59B9;&#x5B50;&#x3002;&#x59B9;&#x5B50;&#x975E;&#x5E38;&#x7126;&#x6025;&#xFF0C;&#x95EE;&#x6211;&#x4E3A;&#x4EC0;&#x4E48;&#x9762;&#x4E86;&#x8FD9;&#x4E48;&#x4E45;&#xFF1F;&#x6211;&#x7EA6;&#x7684;&#x9762;&#x7B7E;&#x662F; 7:30 &#x5206;&#x7684;&#x3002;&#x5F53;&#x6211;&#x9762;&#x5B8C;&#x51FA;&#x6765;&#x5DF2;&#x7ECF; 9:30 &#x4E86;&#x3002;&#x5979;&#x4ECE;&#x6211;&#x7684;&#x8138;&#x8272;&#x4E2D;&#x770B;&#x5230;&#x4E86;&#x6211;&#x4E0D;&#x597D;&#x7684;&#x7ED3;&#x679C;&#x3002;check &#x8FD9;&#x4E2A;&#x7ED3;&#x679C;&#x5176;&#x5B9E;&#x662F;&#x975E;&#x5E38;&#x5DEE;&#x7684;&#x3002;&#x5982;&#x679C;&#x5F53;&#x573A;&#x518D;&#x6B21;&#x88AB;&#x62D2;&#xFF0C;&#x90A3;&#x4E48;&#x6211;&#x8FD8;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x7EA6;&#x4E09;&#x7B7E;&#x3002;&#x73B0;&#x5728; 7 &#x6708;&#x4E86;&#x3002;&#x88AB; check&#xFF0C;check &#x9700;&#x8981;&#x7B49; 8 &#x5468;&#x624D;&#x80FD;&#x51FA;&#x7ED3;&#x679C;&#x3002;&#x5982;&#x679C; 8 &#x5468;&#x4EE5;&#x540E;&#x6211;&#x88AB;&#x62D2;&#xFF0C;&#x90A3;&#x6211;&#x5DF2;&#x7ECF;&#x6CA1;&#x4E86;&#x4E09;&#x7B7E;&#x7684;&#x673A;&#x4F1A;&#x4E86;&#x3002;&#x90A3;&#x4E2A;&#x65F6;&#x5019;&#x5DF2;&#x7ECF;&#x5F00;&#x5B66;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x80FD;&#x5426;&#x53BB;&#x7F8E;&#x5E1D;&#x8BFB;&#x4E66;&#x5168;&#x90E8;&#x538B;&#x5728;&#x4E86;&#x8FD9;&#x6B21;&#x4E8C;&#x7B7E;&#x7ED3;&#x679C;&#x4E4B;&#x4E0A;&#x4E86;&#x3002;&#x5982;&#x679C;&#x6302;&#x4E86;&#xFF0C;&#x53EF;&#x80FD;&#x4E5F;&#x6CA1;&#x6709;&#x7B14;&#x8005;&#x8FD9;&#x7BC7;&#x7ECF;&#x9A8C;&#x5206;&#x4EAB;&#x4E86;&#x3002;&#x7B14;&#x8005; 6 &#x6708; 29 &#x65E5;&#x4E8C;&#x7B7E;&#x88AB; Check&#x3002;&#x76F4;&#x5230; 8 &#x6708; 12 &#x65E5;&#x624D; Administrative Processing&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_48.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_49.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x8FD0;&#x6C14;&#x6BD4;&#x8F83;&#x597D;&#x7684;&#x662F; 8 &#x6708; 13 &#x65E5;&#x7D27;&#x63A5;&#x7740; Issued &#x4E86;&#x3002;&#x7B49;&#x6211;&#x62FF;&#x5230;&#x7B7E;&#x8BC1;&#x62A4;&#x7167;&#x7684;&#x65F6;&#x5019;&#x5DF2;&#x7ECF;&#x662F; 8 &#x6708; 18 &#x65E5;&#x4E86;&#x3002;&#x90A3;&#x4E00;&#x5468;&#x7D27;&#x6025;&#x7684;&#x548C;&#x4E00;&#x4E9B;&#x597D;&#x53CB;&#x544A;&#x522B;&#xFF0C;&#x4E0B;&#x5468;&#x4E00; 23 &#x53F7;&#x5C31;&#x98DE;&#x5E7F;&#x5DDE; - &#x9996;&#x5C14; - &#x65E7;&#x91D1;&#x5C71;&#x4E86;&#x3002;&#x5982;&#x679C;&#x8BFB;&#x8005;&#x4E5F;&#x6709;&#x5728;&#x529E;&#x7406;&#x7F8E;&#x7B7E;&#x7B7E;&#x8BC1;&#x7684;&#x8BDD;&#xFF0C;&#x6211;&#x80FD;&#x7ED9;&#x7684;&#x5EFA;&#x8BAE;&#x662F;&#xFF0C;&#x795D;&#x597D;&#x8FD0;&#xFF01;&#x5982;&#x679C;&#x771F;&#x7684;&#x88AB;&#x62D2;&#x7B7E;&#xFF0C;&#x8BF7;&#x8010;&#x5FC3;&#xFF0C;&#x591A;&#x7B7E;&#x51E0;&#x6B21;&#xFF0C;&#x8FD8;&#x662F;&#x6709;&#x673A;&#x4F1A;&#x80FD;&#x8FC7;&#x7684;&#x3002;</p>
<h3 id="7-%E5%87%BA%E5%85%A5%E5%A2%83%E6%B5%B7%E5%85%B3%E4%BD%93%E6%A3%80%EF%BC%8C%E6%8A%A2%E9%A2%84%E7%BA%A6">7. &#x51FA;&#x5165;&#x5883;&#x6D77;&#x5173;&#x4F53;&#x68C0;&#xFF0C;&#x62A2;&#x9884;&#x7EA6;</h3>
<p>&#x5728;&#x505A;&#x98DE;&#x673A;&#x79BB;&#x5F00;&#x7956;&#x56FD;&#x4E4B;&#x524D;&#xFF0C;&#x9700;&#x8981;&#x5230;&#x51FA;&#x5165;&#x5883;&#x6D77;&#x5173;&#x529E;&#x7406;&#x56FD;&#x9645;&#x5065;&#x5EB7;&#x8BC1;&#x660E;&#x4E66;&#x3002;&#x4FD7;&#x79F0;&#xFF0C;&#x9EC4;&#x672C;&#x672C;&#x548C;&#x7EA2;&#x672C;&#x672C;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_46.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p>&#x56E0;&#x4E3A; 2020 &#x5E74;&#x75AB;&#x60C5;&#x6405;&#x4E71;&#x4E86;&#x5168;&#x4E16;&#x754C;&#x7684;&#x683C;&#x5C40;&#xFF0C;&#x5927;&#x5BB6;&#x5BF9; COVID-19 &#x75AB;&#x82D7;&#x63A5;&#x79CD;&#x5F02;&#x5E38;&#x654F;&#x611F;&#x3002;&#x4E0D;&#x63A5;&#x79CD;&#x75AB;&#x82D7;&#xFF0C;&#x6216;&#x8005;&#x65E0;&#x6838;&#x9178;&#x68C0;&#x6D4B;&#x9634;&#x6027;&#x8BC1;&#x660E;&#x90FD;&#x65E0;&#x6CD5;&#x4E0A;&#x98DE;&#x673A;&#x3002;&#x4E0A;&#x6D77;&#x6D77;&#x5173;&#x5165;&#x51FA;&#x5883;&#x4F53;&#x68C0;&#x5B9E;&#x5728;&#x592A;&#x96BE;&#x7EA6;&#x4E86;&#xFF01;&#x7B14;&#x8005; 7 &#x6708;&#x5E95;&#x60F3;&#x7740;&#x7EA6; 8 &#x6708;&#x7684;&#x4F53;&#x68C0;&#x3002;&#x6839;&#x672C;&#x7EA6;&#x4E0D;&#x4E0A;&#xFF0C;&#x5168;&#x90E8;&#x90FD;&#x6EE1;&#x4E86;&#x3002;&#x540E;&#x6765;&#x5728;&#x7FA4;&#x91CC;&#x4E86;&#x89E3;&#x624D;&#x5F97;&#x77E5;&#xFF0C;&#x5176;&#x4ED6;&#x540C;&#x5B66;&#x65E9;&#x5728; 4 &#x6708;&#x5C31;&#x63D0;&#x524D;&#x7EA6;&#x597D;&#x4E86;&#x3002;&#x6BD4;&#x6211;&#x63D0;&#x524D; 3 &#x4E2A;&#x6708;&#x3002;&#x96BE;&#x602A;&#x6211;&#x62A2;&#x4E0D;&#x5230;&#x53F7;&#xFF01;&#x6240;&#x4EE5;&#x5EFA;&#x8BAE;&#x8981;&#x7559;&#x5B66;&#x7684;&#x540C;&#x5B66;&#xFF0C;&#x8FD9;&#x4E2A;&#x4F53;&#x68C0;&#x4E00;&#x5B9A;&#x8981;&#x65E9;&#x70B9;&#x9884;&#x7EA6;&#xFF01;&#xFF01;&#x4E0D;&#x7136;&#x5C31;&#x53EF;&#x80FD;&#x7EA6;&#x4E0D;&#x5230;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x770B;&#x5230;&#x4E0A;&#x6D77;&#x7EA6;&#x4E0D;&#x5230;&#xFF0C;&#x5C31;&#x53BB;&#x5468;&#x8FB9;&#x57CE;&#x5E02;&#x4F53;&#x68C0;&#x3002;&#x5148;&#x770B;&#x4E86;&#x5357;&#x4EAC;&#x82CF;&#x5DDE;&#xFF0C;&#x4E0D;&#x5DE7;&#x7684;&#x662F;&#xFF0C;&#x7A81;&#x7136;&#x5357;&#x4EAC;&#x7A81;&#x53D1;&#x75AB;&#x60C5;&#x3002;&#x6211;&#x53BB;&#x5357;&#x4EAC;&#x4F53;&#x68C0;&#x5B8C;&#x53EF;&#x80FD;&#x5C31;&#x65E0;&#x6CD5;&#x56DE;&#x5230;&#x4E0A;&#x6D77;&#x4E86;&#x3002;&#x4E8E;&#x662F;&#x6211;&#x53C8;&#x770B;&#x676D;&#x5DDE;&#x7684;&#x51FA;&#x5165;&#x5883;&#x7BA1;&#x7406;&#x4E2D;&#x5FC3;&#x3002;&#x6210;&#x529F;&#x7EA6;&#x5230;&#x4E86;&#x676D;&#x5DDE;&#x7684;&#x51FA;&#x5165;&#x5883;&#x4F53;&#x68C0;&#x3002;&#x4F53;&#x68C0;&#x5206; 2 &#x90E8;&#x5206;&#x3002;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x57FA;&#x7840;&#x68C0;&#x67E5;&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x6253;&#x75AB;&#x82D7;&#x3002;&#x75AB;&#x82D7;&#x662F;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x6253;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x6253;&#x6D41;&#x8111;&#x75AB;&#x82D7;&#xFF0C;&#x6C34;&#x75D8;&#x75AB;&#x82D7;&#x7B49;&#x7B49;&#x3002;&#x6BCF;&#x4E2A;&#x5B66;&#x6821;&#x4E0D;&#x540C;&#xFF0C;&#x6253;&#x7684;&#x75AB;&#x82D7;&#x4E5F;&#x4E0D;&#x540C;&#x3002;&#x6709;&#x4E9B;&#x75AB;&#x82D7;&#x5728;&#x56FD;&#x5185;&#x8FD8;&#x6CA1;&#x6709;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x79CD;&#x75C5;&#x5728;&#x4E2D;&#x56FD;&#x5C31;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x53EA;&#x5B58;&#x5728;&#x4E8E;&#x7F8E;&#x56FD;&#x3002;&#x6240;&#x4EE5;&#x6709;&#x4E9B;&#x75AB;&#x82D7;&#x9700;&#x8981;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x4EE5;&#x540E;&#x518D;&#x6253;&#x3002;&#x5F53;&#x7136;&#x4E5F;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x5168;&#x90E8;&#x90FD;&#x5728;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x4EE5;&#x540E;&#x518D;&#x6253;&#x3002;&#x7B14;&#x8005;&#x5728;&#x56FD;&#x5185;&#x4F53;&#x68C0;&#x5B8C;&#xFF0C;&#x4E5F;&#x5728;&#x56FD;&#x5185;&#x6253;&#x4E86;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x7684;&#x75AB;&#x82D7;&#x3002;</p>
<blockquote>
<p>&#x5982;&#x679C;&#x4F60;&#x60F3;&#x7701;&#x94B1;&#xFF0C;&#x5EFA;&#x8BAE;&#x5728;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x4EE5;&#x540E;&#x518D;&#x6253;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x6253;&#x7684;&#x75AB;&#x82D7;&#x3002;&#x56E0;&#x4E3A;&#x6BCF;&#x4E2A;&#x5B66;&#x6821;&#x7684;&#x533B;&#x4FDD;&#x53EF;&#x4EE5;&#x5168;&#x989D;&#x62A5;&#x9500;&#x75AB;&#x82D7;&#x7684;&#x8FD9;&#x90E8;&#x5206;&#x5F00;&#x9500;&#x3002;&#x5728;&#x56FD;&#x5185;&#x6253;&#x75AB;&#x82D7;&#x5168;&#x90E8;&#x81EA;&#x8D39;&#x3002;</p>
</blockquote>
<h3 id="8-%E6%89%93%E6%96%B0%E5%86%A0%E7%96%AB%E8%8B%97">8. &#x6253;&#x65B0;&#x51A0;&#x75AB;&#x82D7;</h3>
<p>&#x65B0;&#x51A0;&#x75AB;&#x82D7;&#x4E2D;&#x56FD;&#x6253;&#x548C;&#x7F8E;&#x56FD;&#x6253;&#xFF0C;&#x90FD;&#x53EF;&#x4EE5;&#x3002;&#x6709;&#x4E0D;&#x5C11;&#x5B66;&#x751F;&#x4F1A;&#x62C5;&#x5FC3;&#xFF0C;&#x5982;&#x679C;&#x4E2D;&#x56FD;&#x6253;&#x4E86; 2 &#x9488;&#x75AB;&#x82D7;&#x3002;&#x5230;&#x4E86;&#x7F8E;&#x56FD;&#x518D;&#x6253;&#x7F8E;&#x56FD;&#x7684;&#x75AB;&#x82D7;&#xFF0C;&#x4F1A;&#x51B2;&#x7A81;&#x4E48;&#xFF1F;&#x7B14;&#x8005;&#x5DF2;&#x7ECF;&#x63A5;&#x79CD;&#x5B8C;&#x7F8E;&#x56FD;&#x8F89;&#x745E;&#x7684; 2 &#x9488;&#x75AB;&#x82D7;&#x3002;&#x4E5F;&#x63A5;&#x79CD;&#x5B8C;&#x4E2D;&#x56FD;&#x7684; 2 &#x9488;&#x75AB;&#x82D7;&#x3002;&#x76EE;&#x524D;&#x4E00;&#x5207;&#x6B63;&#x5E38;&#x3002;&#x7B14;&#x8005;&#x5728;&#x56FD;&#x5185;&#x6253;&#x7684;&#x662F;&#x79D1;&#x5174;&#x75AB;&#x82D7;&#xFF0C;&#x7B2C;&#x4E00;&#x9488;&#x662F; 4 &#x6708; 10 &#x53F7;&#x6253;&#x7684;&#xFF0C;&#x7B2C;&#x4E8C;&#x9488;&#x662F; 5 &#x6708; 15 &#x53F7;&#x3002;&#x9694;&#x4E86;&#x534A;&#x5E74;&#x4EE5;&#x540E;&#xFF0C;10 &#x6708;&#x5E95;&#x5728;&#x52A0;&#x5DDE;&#x6253;&#x4E86;&#x8F89;&#x745E;&#x7B2C;&#x4E00;&#x9488;&#xFF0C;11 &#x6708; 29 &#x7EE7;&#x7EED;&#x6253;&#x4E86;&#x7B2C;&#x4E8C;&#x9488;&#x3002;&#x76EE;&#x524D;&#x56DB;&#x9488;&#x90FD;&#x6253;&#x5B8C;&#x4E86;&#xFF0C;&#x8EAB;&#x4F53;&#x4E00;&#x5207;&#x6B63;&#x5E38;&#x3002;&#x81F3;&#x4E8E;&#x8FD8;&#x6709;&#x540C;&#x5B66;&#x72B9;&#x8C6B;&#x6253;&#x4E0D;&#x6253;&#x56FD;&#x5185;&#x7684;&#x75AB;&#x82D7;&#xFF0C;&#x662F;&#x5426;&#x80FD;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x4EE5;&#x540E;&#x7ACB;&#x5373;&#x63A5;&#x79CD;&#x7F8E;&#x56FD;&#x7684;&#x65B0;&#x51A0;&#x75AB;&#x82D7;&#xFF1F;&#x7B14;&#x8005;&#x7ED9;&#x7684;&#x7B54;&#x6848;&#x662F;&#xFF0C;&#x5EFA;&#x8BAE;&#x5148;&#x6253;&#x56FD;&#x5185;&#x7684;&#x75AB;&#x82D7;&#x3002;&#x56E0;&#x4E3A;&#x5728;&#x8DE8;&#x56FD;&#x8F6C;&#x673A;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x6709;&#x5F88;&#x591A;&#x611F;&#x67D3;&#x7684;&#x98CE;&#x9669;&#x3002;&#x6253;&#x4E0A;&#x75AB;&#x82D7;&#x4EE5;&#x540E;&#xFF0C;&#x7ED9;&#x81EA;&#x5DF1;&#x52A0;&#x4E00;&#x5C42;&#x4FDD;&#x969C;&#x3002;</p>
<h3 id="9-%E6%8B%94%E7%89%99%E9%85%8D%E7%9C%BC%E9%95%9C%E6%A0%B8%E9%85%B8%E6%A3%80%E6%B5%8B">9. &#x62D4;&#x7259;+&#x914D;&#x773C;&#x955C;+&#x6838;&#x9178;&#x68C0;&#x6D4B;</h3>
<p>&#x62D4;&#x7259;&#x8FD9;&#x4EF6;&#x4E8B;&#x4E5F;&#x5F88;&#x91CD;&#x8981;&#x3002;&#x9700;&#x8981;&#x62D4;&#x667A;&#x9F7F;&#x7684;&#x6700;&#x597D;&#x4E5F;&#x5728;&#x56FD;&#x5185;&#x62D4;&#x6389;&#x3002;&#x5728;&#x7F8E;&#x56FD;&#x62D4;&#x7259;&#x8981;&#x9884;&#x7EA6;&#xFF0C;&#x62D4;&#x7259;&#x5468;&#x671F;&#x5F88;&#x957F;&#xFF0C;&#x4E5F;&#x5F88;&#x82B1;&#x94B1;&#x3002;&#x7B14;&#x8005;&#x6709; 2 &#x9897;&#x667A;&#x9F7F;&#x6CA1;&#x6709;&#x62D4;&#x6389;&#x3002;&#x62D4;&#x667A;&#x9F7F;&#x9700;&#x8981;&#x7528;&#x5230;&#x5207;&#x9AA8;&#x5200;&#xFF0C;&#x8FD9;&#x4E2A;&#x5DE5;&#x5177;&#x5728;&#x5168;&#x4E0A;&#x6D77;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x533B;&#x9662;&#x624D;&#x6709;&#xFF0C;&#x9700;&#x8981;&#x9884;&#x7EA6;&#x3002;&#x62D4;&#x5B8C;&#x8FD8;&#x9700;&#x8981; 3 &#x5468;&#x56DE;&#x590D;&#xFF0C;&#x5E76;&#x4E14;&#x8FD9; 3 &#x5468;&#x5185;&#x4E0D;&#x80FD;&#x6253;&#x5176;&#x4ED6;&#x75AB;&#x82D7;&#x3002;&#x7B14;&#x8005;&#x60F3;&#x8D77;&#x6765;&#x62D4;&#x667A;&#x9F7F;&#x8FD9;&#x4EF6;&#x4E8B;&#x6709;&#x70B9;&#x665A;&#x3002;8 &#x6708;&#x624D;&#x60F3;&#x8D77;&#x6765;&#x3002;&#x90A3;&#x4E48;&#x6211;&#x8981;&#x4E48;&#x9009;&#x62E9;&#x62D4;&#x667A;&#x9F7F;&#xFF0C;&#x4E0D;&#x6253;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x6253;&#x7684;&#x75AB;&#x82D7;&#x3002;&#x8981;&#x4E48;&#x9009;&#x62E9;&#x6253;&#x5B66;&#x6821;&#x8981;&#x6C42;&#x6253;&#x7684;&#x75AB;&#x82D7;&#xFF0C;&#x4E0D;&#x62D4;&#x667A;&#x9F7F;&#x3002;&#x7B14;&#x8005;&#x9009;&#x62E9;&#x4E86;&#x540E;&#x8005;&#x3002;&#x56E0;&#x4E3A;&#x62D4;&#x667A;&#x9F7F;&#x4E5F;&#x8BB8; 3 &#x5468;&#x6062;&#x590D;&#x4E0D;&#x597D;&#xFF0C;&#x4E34;&#x8FD1;&#x5F00;&#x5B66;&#x8FD8;&#x662F;&#x4E0D;&#x6298;&#x817E;&#x4E86;&#x3002;&#x4ECE;&#x8FD9;&#x4EF6;&#x4E8B;&#x60C5;&#x4E5F;&#x8BF4;&#x660E;&#xFF0C;&#x62D4;&#x7259;&#x8981;&#x5C3D;&#x65E9;&#x89C4;&#x5212;&#xFF0C;3&#xFF0C;4 &#x6708;&#x7B49; offer &#x7684;&#x65F6;&#x5019;&#x5C31;&#x53BB;&#x628A;&#x7259;&#x9F7F;&#x6539;&#x62D4;&#x7684;&#x62D4;&#x6389;&#x5427;&#x3002;</p>
<p>&#x5982;&#x679C;&#x6709;&#x8FD1;&#x89C6;&#x773C;&#x7684;&#x540C;&#x5B66;&#xFF0C;&#x5EFA;&#x8BAE;&#x5728;&#x56FD;&#x5185;&#x914D;&#x4E00;&#x526F;&#x773C;&#x955C;&#x3002;&#x5728;&#x7F8E;&#x56FD;&#x914D;&#x773C;&#x955C;&#x9700;&#x8981;&#x5148;&#x9A8C;&#x5149;&#xFF0C;&#x518D;&#x914D;&#x773C;&#x955C;&#x3002;&#x6574;&#x4E2A;&#x6D41;&#x7A0B;&#x5F88;&#x957F;&#x3002;&#x8FD8;&#x662F;&#x4E56;&#x4E56;&#x7684;&#x5728;&#x56FD;&#x5185;&#x914D;&#x597D;&#x4E00;&#x526F;&#x65B0;&#x773C;&#x955C;&#x5E26;&#x6765;&#x5907;&#x7528;&#x5427;&#x3002;</p>
<p>&#x6838;&#x9178;&#x68C0;&#x6D4B;&#x8FD9;&#x4E2A;&#x4E0D;&#x7528;&#x8BF4;&#xFF0C;&#x98DE;&#x673A;&#x8D77;&#x6765;&#x524D; 2 &#x5929;&#x9884;&#x7EA6;&#x597D;&#x6838;&#x9178;&#x68C0;&#x6D4B;&#x3002;&#x5982;&#x679C;&#x4E2D;&#x95F4;&#x9700;&#x8981;&#x4E2D;&#x8F6C;&#x5176;&#x4ED6;&#x56FD;&#x5BB6;&#xFF0C;&#x4E3B;&#x8981;&#x770B;&#x597D;&#x6BCF;&#x4E2A;&#x56FD;&#x5BB6;&#x7684;&#x9632;&#x75AB;&#x653F;&#x7B56;&#x3002;&#x6709;&#x7684;&#x56FD;&#x5BB6;&#x53EA;&#x5141;&#x8BB8;&#x8FC7;&#x5883; 72 &#x5C0F;&#x65F6;&#xFF0C;&#x4F46;&#x662F;&#x4E0D;&#x51C6;&#x5165;&#x5173;&#x3002;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6362;&#x98DE;&#x673A;&#x53EA;&#x80FD;&#x76F4;&#x6302;&#xFF0C;&#x4E0D;&#x80FD;&#x5165;&#x5173;&#x6362;&#x6210;&#x98DE;&#x673A;&#x3002;&#x8FD9;&#x4E9B;&#x7EC6;&#x8282;&#x90FD;&#x8981;&#x81EA;&#x5DF1;&#x770B;&#x6E05;&#x695A;&#x3002;</p>
<h3 id="10-%E8%B5%B7%E9%A3%9E">10. &#x8D77;&#x98DE;</h3>
<p>&#x98DE;&#x673A;&#x8D77;&#x98DE;&#x6CA1;&#x4EC0;&#x4E48;&#x597D;&#x8BF4;&#x7684;&#x3002;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#x884C;&#x674E;&#x91CC;&#x9762;&#x7684;&#x7269;&#x54C1;&#x3002;&#x4E0D;&#x8981;&#x5E26;&#x7F8E;&#x56FD;&#x6D77;&#x5173;&#x8FDD;&#x7981;&#x7684;&#x7269;&#x54C1;&#xFF0C;&#x4ED4;&#x7EC6;&#x67E5;&#x67E5;&#x836F;&#x54C1;&#x662F;&#x5426;&#x662F;&#x5904;&#x65B9;&#x836F;&#x3002;&#x5F88;&#x591A;&#x5904;&#x65B9;&#x836F;&#x90FD;&#x4E0D;&#x5141;&#x8BB8;&#x5E26;&#x5165;&#x7F8E;&#x56FD;&#x5883;&#x5185;&#x3002;&#x6700;&#x540E;&#x5728;&#x5165;&#x5883;&#x7F8E;&#x56FD;&#x4E4B;&#x524D;&#x9700;&#x8981;&#x586B;&#x5199;&#x5165;&#x5883;&#x5355;&#xFF0C;&#x5982;&#x4E0B;&#x56FE;&#x3002;</p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_51.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<h2 id="%E4%BA%94-%E6%9C%80%E7%BB%88%E7%BB%93%E6%9E%9C">&#x4E94;. &#x6700;&#x7EC8;&#x7ED3;&#x679C;</h2>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_0_2.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<ul>
<li>Decision: MSSE@<strong>CMU ECE</strong></li>
<li>AD: MSSE@<strong>CMU ECE</strong>, MSE@<strong>CMU SCS</strong>, MSCS@<strong>Columbia</strong>, MPCS@<strong>UChicago</strong>, MSCS@<strong>USC</strong>, MSSE@<strong>USC</strong>, HPCS@<strong>USC</strong>, MCS@<strong>Rice</strong>, MSCS@<strong>WUSTL</strong>, MSSES@<strong>NEU COE</strong>, MSSSD@<strong>Tufts GSAS</strong>, MSCS@<strong>UTD</strong></li>
<li>Rej: MCDS@<strong>CMU SCS</strong>, MITS@<strong>CMU SCS</strong>, MECS@<strong>Cornell Teach</strong>, MSCS@<strong>Geogia Tech</strong>, MSCS@<strong>NEU KCCS</strong>, MSCS@<strong>NYU Tandon</strong>, MSCS@<strong>UCSD CSE</strong>, MSCS@<strong>Stanford</strong>, MScAC@<strong>UoT</strong>, MScCS@<strong>UoE</strong>, MCCS@<strong>NUS</strong></li>
</ul>
<p>&#x773C;&#x5C16;&#x7684;&#x8BFB;&#x8005;&#x4F1A;&#x53D1;&#x73B0;&#x5176;&#x4E2D;&#x6709;&#x82F1;&#x56FD;&#xFF0C;&#x52A0;&#x62FF;&#x5927;&#x548C;&#x65B0;&#x52A0;&#x5761;&#x7684;&#x5B66;&#x6821;&#x3002;&#x786E;&#x5B9E;&#xFF0C;&#x7B14;&#x8005;&#x4ECA;&#x5E74; 21fall &#x6DF7;&#x7533;&#x4E86;&#x3002;UoE &#x7231;&#x4E01;&#x5821;&#x5927;&#x5B66;&#xFF0C;&#x6211;&#x7684;&#x4E00;&#x4E2A;&#x6258;&#x798F;&#x8001;&#x5E08;&#x6BD5;&#x4E1A;&#x4E8E;&#x8FD9;&#x91CC;&#xFF0C;&#x5F3A;&#x70C8;&#x6211;&#x63A8;&#x8350;&#x7533;&#x8BF7;&#xFF0C;&#x4E3A;&#x4E86;&#x60C5;&#x9762;&#xFF0C;&#x6211;&#x4E0D;&#x5F97;&#x4E0D;&#x7533;&#x3002;UoT &#x591A;&#x4F26;&#x591A;&#x5927;&#x5B66;&#xFF0C;&#x4E00;&#x4E2A;&#x4E0E;&#x6211; 20 &#x5E74;&#x6CA1;&#x6709;&#x76F8;&#x89C1;&#x7684;&#x53D1;&#x5C0F;&#x5728;&#x6B64;&#x5DE5;&#x4F5C;&#x3002;&#x8BF4;&#x6765;&#x5F88;&#x5DE7;&#xFF0C;&#x7533;&#x8BF7;&#x5B63;&#x7A81;&#x7136;&#x8054;&#x7CFB;&#x4E0A;&#x4E86;&#xFF0C;&#x4E3A;&#x4E86;&#x8FD9;&#x4EFD;&#x611F;&#x60C5;&#xFF0C;&#x6211;&#x4E0D;&#x5F97;&#x4E0D;&#x7533;&#x3002;NUS &#x65B0;&#x52A0;&#x5761;&#x56FD;&#x7ACB;&#x5927;&#x5B66;&#xFF0C;&#x652F;&#x6301; go local&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x6B66;&#x6C49;&#x6821;&#x533A;&#x4E0A;&#x8BFE;&#xFF0C;&#x5982;&#x679C;&#x7F8E;&#x56FD;&#x75AB;&#x60C5;&#x65E0;&#x6CD5;&#x6536;&#x62FE;&#xFF0C;&#x5F7B;&#x5E95;&#x65E0;&#x6CD5;&#x51FA;&#x56FD;&#xFF0C;NUS &#x7B97;&#x6700;&#x6700;&#x6700;&#x6700;&#x7EC8;&#x515C;&#x5E95;&#x7684;&#x65B9;&#x6848;&#xFF0C;&#x53EF;&#x4EE5;&#x5446;&#x5728;&#x6B66;&#x6C49;&#x6821;&#x533A;&#x4E0A;&#x7F51;&#x8BFE;&#x3002;</p>
<p>&#x4EE5;&#x4E0A;&#x8FD9;&#x4E9B;&#x5B66;&#x6821;&#x7684;&#x7533;&#x8BF7;&#x8D39;&#x52A0;&#x8D77;&#x6765;&#x633A;&#x8D35;&#x7684;&#xFF0C;&#x5E73;&#x5747;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x662F; $90&#xFF0C;&#x989D;&#x5916;&#x7684;&#x53EF;&#x80FD;&#x8FD8;&#x6709; WES &#x8BA4;&#x8BC1;&#xFF0C;$30&#xFF0C;&#x6BCF;&#x4E2A;&#x9879;&#x76EE; TOEFL &#x9001;&#x5206;&#x662F; $20&#xFF0C;GRE &#x9001;&#x5206; $27&#x3002;&#x5E73;&#x5747;&#x4E00;&#x4E2A;&#x9879;&#x76EE;&#x662F; $90+20+27=$137&#xFF0C;&#x7B14;&#x8005;&#x603B;&#x5171; 23 &#x4E2A;&#x9879;&#x76EE;&#xFF0C;&#x5149;&#x7533;&#x8BF7;&#x8D39;&#x5C31;&#x5927;&#x7EA6;&#x82B1;&#x8D39; $3151&#x3002;</p>
<p>21fall &#x7533;&#x8BF7;&#x5B63;&#x4E5F;&#x6709;&#x4E0D;&#x5C11;&#x9057;&#x61BE;&#xFF0C;&#x6709; 4 &#x4E2A;&#x9879;&#x76EE;&#x88AB;&#x62D2;&#xFF0C;&#x7B14;&#x8005;&#x4E00;&#x76F4;&#x803F;&#x803F;&#x4E8E;&#x6000;&#x3002;MSCS@<strong>NEU KCCS</strong> &#x5982;&#x679C; 10 &#x6708;&#x5E95;&#x6216;&#x8005; 11 &#x6708;&#x7F51;&#x7533;&#x4E00;&#x5F00;&#x653E;&#xFF0C;&#x8D76;&#x7B2C;&#x4E00;&#x8F6E; rolling &#x7ACB;&#x5373;&#x5C31;&#x6295;&#xFF0C;&#x5E94;&#x8BE5;&#x80FD;&#x88AB;&#x5F55;&#x53D6;&#xFF0C;&#x8FD9;&#x4E2A;&#x9879;&#x76EE;&#x6CA1;&#x62FF;&#x5230; offer &#x7B97;&#x662F;&#x4ECA;&#x5E74;&#x7533;&#x8BF7;&#x5B63;&#x7684;&#x4E00;&#x4E2A;&#x201C;&#x4E8B;&#x6545;&#x201D;&#x3002;MSCS@<strong>NYU Tandon</strong> &#x662F;&#x7B14;&#x8005;&#x60F3;&#x4E86;&#x5F88;&#x4E45;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x4ECA;&#x5E74; bar &#x5377;&#x4E0A;&#x5929;&#x4E86;&#xFF0C;&#x5B9E;&#x5728;&#x65E0;&#x5948;&#x3002;MSCS@<strong>UCSD CSE</strong> &#x4E5F;&#x662F;&#x7B14;&#x8005;&#x60F3;&#x4E86;&#x5F88;&#x4E45;&#x7684;&#x9879;&#x76EE;&#xFF0C;&#x505A;&#x68A6;&#x90FD;&#x5728;&#x60F3;&#x662F;&#x5426;&#x80FD;&#x88AB;&#x5F55;&#x53D6;&#xFF0C;&#x53EF;&#x60DC;&#x6700;&#x540E;&#x8FD8;&#x662F;&#x88AB;&#x62D2;&#x3002;MScAC@<strong>UoT</strong> &#x4ECA;&#x5E74; GPA &#x7684; bar &#x592A;&#x9AD8;&#x4E86;&#xFF0C;GPA &lt; 3.9 &#x7684;&#x4E00;&#x5F8B;&#x62D2;&#xFF0C;&#x552F;&#x6709;&#x53F9;&#x606F;&#x3002;&#x5982;&#x679C;&#x80FD;&#x91CD;&#x6765;&#x7684;&#x8BDD;&#xFF0C;&#x7B14;&#x8005;&#x53EF;&#x80FD;&#x8FD8;&#x60F3;&#x8BD5;&#x8BD5;&#x8FD9;&#x4E9B;&#x9879;&#x76EE; MCS@<strong>UCI</strong>&#xFF0C;MSWE@<strong>UCI</strong>&#xFF0C;MSCS@<strong>NYU Courant</strong>&#xFF0C;MCS@<strong>TAMU</strong>&#xFF0C;MSCS@<strong>Duke</strong>&#xFF0C;MSE@<strong>JHU</strong>&#xFF0C;MSCS@<strong>NWU</strong>&#xFF0C;MSCS@<strong>Stony Brook University</strong>&#xFF0C;MENG@<strong>UCLA</strong>&#xFF0C;MENG@<strong>UCBerkley</strong>&#xFF08;&#x4E0D;&#x8FC7;&#x8FD9;&#x4E9B;&#x53EF;&#x80FD;&#x90FD;&#x4F1A;&#x88AB;&#x62D2;&#xFF0C;&#x7EAF;&#x5C5E;&#x6D6A;&#x8D39;&#x7533;&#x8BF7;&#x8D39;&#x4E86;&#xFF0C;&#x9879;&#x76EE;&#x4E5F;&#x4E0D;&#x7528;&#x7533;&#x8BF7;&#x592A;&#x591A;&#xFF0C;&#x80FD;&#x88AB;&#x68A6;&#x6821;&#x5F55;&#x53D6;&#x5373;&#x53EF;&#xFF09;&#x3002;</p>
<p>&#x6700;&#x540E;&#x6652;&#x4E00;&#x6652; TOP50 &#x7684;&#x5B66;&#x6821; offer &#x4F5C;&#x4E3A;&#x4ECA;&#x5E74; 21fall &#x7533;&#x8BF7;&#x5B63;&#x7684;&#x7ED3;&#x5C40;&#x5427;&#x3002;CMU &#x7684; 2 &#x4E2A;  offer &#x662F;&#x6B63;&#x5F0F; offer&#xFF0C;&#x5176;&#x4ED6;&#x51E0;&#x4E2A;&#x7531;&#x4E8E;&#x8981;&#x4EA4;&#x201C;&#x5DE8;&#x989D;&#x201D;&#x5360;&#x4F4D;&#x8D39;&#xFF0C;&#x6216;&#x8005;&#x4E0D;&#x6253;&#x7B97;&#x53BB;&#x7684;&#xFF0C;&#x6700;&#x7EC8; offer &#x90FD; decline &#x4E86;&#x3002;&#x5173;&#x4E8E;&#x4E0B;&#x9762;&#x7684; offer &#x90FD;&#x662F; PDF &#x7248;&#x622A;&#x56FE;&#x622A;&#x51FA;&#x6765;&#x7684;&#xFF0C;&#x7B14;&#x8005;&#x6709;&#x51E0;&#x70B9;&#x60F3;&#x8BF4;&#xFF1A;</p>
<ol>
<li>WUSTL &#x662F;&#x7B14;&#x8005;&#x4ECA;&#x5E74;&#x7533;&#x8BF7;&#x5B63;&#x552F;&#x4E00;&#x4E00;&#x4E2A;&#x4F5C;&#x4E3A; TOP50 &#x5B66;&#x6821;&#x6CA1;&#x6709;&#x5360;&#x4F4D;&#x8D39;&#x7684;&#x3002;</li>
<li>UChicago &#x7684; offer &#x4E0D;&#x8981;&#x5410;&#x69FD;&#x5B83;&#x7684; AVI &#x50CF;&#x7D20;&#xFF0C;PDF &#x4E0A; title &#x56FE;&#x7247;&#x786E;&#x5B9E;&#x5206;&#x8FA8;&#x7387;&#x5C31;&#x662F;&#x8FD9;&#x6837;&#x7684;&#x3002;&#x4E5F;&#x8BB8;&#xFF0C;&#x4E5F;&#x8BB8;&#x56FE;&#x7247;&#x52A0;&#x4E86;&#x4E2A;&#x4EBA;&#x8EAB;&#x4EFD;&#x4FE1;&#x606F;&#x7F16;&#x7801;&#x5462;&#x3002;UChicago &#x7684; offer &#x4E2D;&#x5C45;&#x7136;&#x8FD8;&#x660E;&#x6587;&#x5C55;&#x793A;&#x4E86;&#x7528;&#x6237; ID&#xFF0C;&#x7B14;&#x8005;&#x9690;&#x85CF;&#x4E86;&#x3002;</li>
<li>&#x6BCF;&#x4E2A; offer &#x7684;&#x5934;&#x56FE;&#x548C;&#x6B63;&#x6587;&#x4E4B;&#x95F4;&#x6709;&#x5927;&#x91CF;&#x7684;&#x7A7A;&#x767D;&#xFF0C;&#x61C2;&#x7684;&#x4EBA;&#x90FD;&#x61C2;&#xFF0C;&#x8FD9;&#x4E4B;&#x95F4;&#x6709;&#x5927;&#x91CF;&#x7684;&#x4E2A;&#x4EBA;&#x9690;&#x79C1;&#x4FE1;&#x606F;&#x548C;&#x4E2A;&#x4EBA;&#x59D3;&#x540D;&#x7B49;&#x4FE1;&#x606F;&#xFF0C;&#x53EF;&#x80FD;&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#x9605;&#x8BFB;&#x7684;&#x4EBA;&#x4F1A;&#x6BD4;&#x8F83;&#x591A;&#xFF0C;&#x6240;&#x4EE5;&#x9690;&#x53BB;&#x4E86;&#x8FD9;&#x4E9B;&#x79C1;&#x4EBA;&#x4FE1;&#x606F;&#x3002;</li>
</ol>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_0_1.jpeg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_25.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p> 
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_26_.png" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p> 
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_36_0.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p> 
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_38.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p> 
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_41_0.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_42.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_43.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_40.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_37_1.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p> 
<p align="center"><img src="https://img.halfrost.com/Blog/ArticleImage/154_39_.jpg" alt="&#x540E;&#x75AB;&#x60C5;&#x65F6;&#x4EE3;&#x4E0B;&#x7F8E;&#x56FD; CS Master &#x7533;&#x8BF7;&#x7EAA;&#x5B9E;"></p>
<h2 id="%E7%BB%93%E5%B0%BE">&#x7ED3;&#x5C3E;</h2>
<p>&#x6700;&#x540E;&#x8FD9;&#x6BB5;&#x662F;&#x989D;&#x5916;&#x52A0;&#x7684;&#x3002;&#x56E0;&#x4E3A;&#x5728;&#x5730;&#x91CC;&#x770B;&#x5230;&#x4E00;&#x4E2A;&#x5173;&#x4E8E;&#x51FA;&#x56FD;&#x7559;&#x5B66;&#x7684;&#x8BA8;&#x8BBA;&#xFF1A;</p>
<ol>
<li>&#x5927;&#x56DB;&#x51FA;&#x56FD;&#x7559;&#x5B66;&#x662F;&#x5E38;&#x89C4;&#x64CD;&#x4F5C;&#x3002;</li>
<li>(&#x672C;/&#x7855;/&#x535A;)&#x6BD5;&#x4E1A;&#x5DE5;&#x4F5C; 1-5 &#x5E74;&#x5185;&#xFF0C;&#x5982;&#x679C;&#x5728;&#x56FD;&#x5185;&#x5317;&#x4E0A;&#x5E7F;&#x6DF1;&#x4E00;&#x7EBF;&#x57CE;&#x5E02;&#x62FF;&#x5230;&#x6237;&#x53E3;&#xFF0C;&#x5E76;&#x4E14;&#x62E5;&#x6709;&#x4E00;&#x5957;&#x4EE5;&#x4E0A;&#x623F;&#x4EA7;&#xFF0C;&#x51FA;&#x56FD;&#x5DE5;&#x4F5C;/&#x7559;&#x5B66;&#x662F;&#x4EBA;&#x4E0A;&#x4EBA;&#xFF0C;&#x4EBA;&#x751F;&#x8D62;&#x5BB6;&#xFF0C;&#x4F53;&#x9A8C;&#x751F;&#x6D3B;&#x3002;</li>
<li>(&#x672C;/&#x7855;/&#x535A;)&#x6BD5;&#x4E1A;&#x5DE5;&#x4F5C; 1-5 &#x5E74;&#x5185;&#xFF0C;&#x5982;&#x679C;&#x5728;&#x56FD;&#x5185;&#x5317;&#x4E0A;&#x5E7F;&#x6DF1;&#x4E00;&#x7EBF;&#x57CE;&#x5E02;&#x65E0;&#x6237;&#x53E3;&#x65E0;&#x623F;&#x4EA7;&#xFF0C;&#x51FA;&#x56FD;&#x5DE5;&#x4F5C;/&#x7559;&#x5B66;&#x5C31;&#x662F; loser&#x3002;</li>
</ol>
<p>&#x6211;&#x5468;&#x56F4;&#x8FD8;&#x771F;&#x7684;&#x6709;&#x6EE1;&#x8DB3;&#x7B2C;&#x4E8C;&#x79CD;&#x60C5;&#x51B5;&#x7684;&#x4EBA;&#x3002;&#x7855;&#x58EB;&#x6BD5;&#x4E1A;&#x76F4;&#x63A5;&#x843D;&#x6237;&#x4E0A;&#x6D77;&#xFF0C;&#x5DE5;&#x4F5C; 3-5 &#x5E74;&#x540E;&#xFF0C;&#x7855;3-&#x7855;5&#xFF0C;&#x5728;&#x4E0A;&#x6D77;&#x5168;&#x989D;&#x4E70;&#x4E86;&#x4E00;&#x5957;&#x623F;&#x4EA7;&#x3002;&#x771F;&#x7684;&#x5F88;&#x5389;&#x5BB3;&#x3002;&#x6709;&#x8BFB;&#x8005;&#x53EF;&#x80FD;&#x7591;&#x95EE;&#xFF0C;&#x4E00;&#x5B9A;&#x8981;&#x5168;&#x989D;&#x4E70;&#x4E48;&#xFF1F;&#x5317;&#x4E0A;&#x5E7F;&#x7684;&#x623F;&#x4EF7;&#x592A;&#x9AD8;&#xFF0C;&#x5168;&#x989D;&#x4E70;&#x5FC5;&#x987B;&#x9760;&#x7236;&#x6BCD;&#x3002;&#x5730;&#x91CC;&#x7684;&#x8BA8;&#x8BBA;&#x5176;&#x5B9E;&#x4E5F;&#x5305;&#x62EC;&#x8D37;&#x6B3E;&#x4E70;&#x623F;&#x3002;&#x4F46;&#x662F;&#x5982;&#x679C;&#x4F60;&#x5728;&#x5317;&#x4EAC;&#x6216;&#x4E0A;&#x6D77;&#x4E70;&#x623F;&#x4EE5;&#x540E;&#xFF0C;&#x518D;&#x51FA;&#x56FD;&#x8BFB;&#x4E66;&#xFF0C;&#x8BFB;&#x4E66;&#x671F;&#x95F4;&#x4E0D;&#x80FD;&#x6253;&#x5DE5;&#xFF0C;&#x6BCF;&#x6708;&#x65E0;&#x6536;&#x5165;&#x8FDB;&#x8D26;&#xFF0C;&#x6BCF;&#x4E2A;&#x6708;&#x7684;&#x623F;&#x8D37;&#x53EA;&#x80FD;&#x9760;&#x4E4B;&#x524D;&#x81EA;&#x5DF1;&#x7684;&#x79EF;&#x84C4;&#x6216;&#x8005;&#x7236;&#x6BCD;&#x652F;&#x6491;&#xFF0C;&#x518D;&#x52A0;&#x4E0A;&#x7F8E;&#x56FD;&#x6BCF;&#x6708;&#x623F;&#x79DF;&#x548C;&#x5403;&#x559D;&#x7684;&#x5F00;&#x9500;&#x3002;&#x603B;&#x5F00;&#x9500;&#x4E0D;&#x5C0F;&#x3002;&#x80FD;&#x652F;&#x6491;&#x8D77;&#x8FD9;&#x79CD;&#x5F00;&#x9500;&#x7684;&#x4EBA;&#x6216;&#x8005;&#x5BB6;&#x5EAD;&#xFF0C;&#x5728;&#x56FD;&#x5185;&#x5DF2;&#x7ECF;&#x80FD;&#x7B97;&#x4EBA;&#x4E0A;&#x4EBA;&#x4E86;&#x3002;</p>
<p>&#x81F3;&#x4E8E;&#x6211;&#xFF0C;&#x5BF9;&#x53F7;&#x5165;&#x5EA7;&#xFF0C;&#x662F;&#x60C5;&#x51B5;&#x4E09;&#xFF0C;&#x6211;&#x5C31;&#x662F; loser&#x3002;</p>
<hr>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="https://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="https://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/halfrost_2021/">https://halfrost.com/halfrost_2021/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[下一个五年计划起航 ！]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="%E9%A2%98%E8%AE%B0">&#x9898;&#x8BB0;</h2>
<p>&#x8003;&#x8651;&#x5230;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x6709;&#x90E8;&#x5206;&#x65B0;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x6240;&#x4EE5;&#x5173;&#x4E8E;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x540D;&#x5B57;&#x7684;&#x8D77;&#x6E90;&#x5C31;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x4E86;&#xFF0C;&#x89C1;&#x8FD9;&#x91CC;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/TimeElapse/start.md">&#x300A;&quot;&#x661F;&#x971C;&#x834F;&#x82D2;&quot;&#x540D;</a></p>]]></description><link>https://halfrost.com/halfrost_2020/</link><guid isPermaLink="false">634360bbd892dc307476ccf2</guid><category><![CDATA[星霜荏苒]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Thu, 31 Dec 2020 07:57:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/12/151_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="%E9%A2%98%E8%AE%B0">&#x9898;&#x8BB0;</h2>
<img src="https://img.halfrost.com/2021/12/151_0.png" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;"><p>&#x8003;&#x8651;&#x5230;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x6709;&#x90E8;&#x5206;&#x65B0;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x6240;&#x4EE5;&#x5173;&#x4E8E;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x540D;&#x5B57;&#x7684;&#x8D77;&#x6E90;&#x5C31;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x4E86;&#xFF0C;&#x89C1;&#x8FD9;&#x91CC;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/TimeElapse/start.md">&#x300A;&quot;&#x661F;&#x971C;&#x834F;&#x82D2;&quot;&#x540D;&#x5B57;&#x8BDE;&#x751F;&#x8BB0;&#x300B;</a></p>
<p>&#x6CE8;&#x610F;&#x8FD9;&#x7BC7;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x662F; 2020 &#x5E74;&#x7684;&#xFF0C;&#x5E76;&#x975E;&#x662F; 2021 &#x5E74;&#x7684;&#x3002;&#x5F53;&#x4F60;&#x770B;&#x5230;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x80FD;&#x5230;&#x4E86; 2021 &#x5E74;&#x5E74;&#x5E95;&#x4E86;&#x3002;</p>
<hr>
<h2 id="%E7%96%AB%E6%83%85">&#x75AB;&#x60C5;</h2>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/151_1.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;">
</p>
<p>2020 &#x5E74;&#x4E00;&#x5B9A;&#x662F;&#x5C5E;&#x4E8E;&#x4EBA;&#x7C7B;&#x5386;&#x53F2;&#x4E0A;&#x6700;&#x5177;&#x6709;&#x5386;&#x53F2;&#x4E8B;&#x4EF6;&#x7684;&#x4E00;&#x5E74;&#x3002;&#x8FD9;&#x4E00;&#x5E74;&#x53D1;&#x751F;&#x4E86;&#x5168;&#x7403;&#x4E25;&#x91CD;&#x7684;&#x516C;&#x5171;&#x536B;&#x751F;&#x4E8B;&#x4EF6;&#x3002;&#x6B66;&#x6C49;&#x4F5C;&#x4E3A;&#x98CE;&#x66B4;&#x7684;&#x4E2D;&#x5FC3;&#xFF0C;&#x4E5F;&#x662F;&#x8206;&#x8BBA;&#x7684;&#x4E2D;&#x5FC3;&#x3002;&#x5404;&#x79CD;&#x9634;&#x8C0B;&#x8BBA;&#x9CDE;&#x6B21;&#x6809;&#x6BD4;&#x3002;&#x597D;&#x5728;&#x5728;&#x5171;&#x4EA7;&#x515A;&#x7684;&#x9886;&#x5BFC;&#x4E0B;&#xFF0C;&#x5927;&#x6982; 3 &#x4E2A;&#x591A;&#x6708;&#x5C31;&#x4F7F;&#x5F97;&#x6B66;&#x6C49;&#x539F;&#x6709;&#x7684;&#x786E;&#x8BCA;&#x75C5;&#x4F8B;&#x52A8;&#x6001;&#x6E05;&#x96F6;&#x4E86;&#x3002;&#x4E5F;&#x56E0;&#x4E3A;&#x8FD9; 3 &#x4E2A;&#x6708;&#x7684;&#x5C01;&#x57CE;&#xFF0C;&#x6B66;&#x6C49;&#x7684;&#x7ECF;&#x6D4E;&#x53D7;&#x5230;&#x201C;&#x91CD;&#x521B;&#x201D;&#x3002;&#x7236;&#x6BCD;&#x7684;&#x9910;&#x9986;&#x4E5F;&#x53D7;&#x5230;&#x6BC1;&#x706D;&#x6027;&#x7684;&#x6253;&#x51FB;&#xFF0C;&#x5173;&#x95E8;&#x5012;&#x95ED;&#x4E86;&#x3002;&#x5BB6;&#x4E2D;&#x7ECF;&#x6D4E;&#x4E5F;&#x56E0;&#x6B64;&#x53D7;&#x5230;&#x91CD;&#x521B;&#x3002;</p>
<p>&#x5728;&#x4ECA;&#x5E74; 1 &#x6708; 23 &#x53F7;&#xFF0C;&#x949F;&#x5357;&#x5C71;&#x7237;&#x7237;&#x5BA3;&#x5E03;&#x65B0;&#x51A0;&#x75C5;&#x6BD2;&#x4EBA;&#x4F20;&#x4EBA;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x5C31;&#x9000;&#x4E86;&#x9AD8;&#x94C1;&#x7968;&#x6CA1;&#x6709;&#x56DE;&#x5BB6;&#x3002;&#x867D;&#x7136;&#x4EBA;&#x5728;&#x4E0A;&#x6D77;&#xFF0C;&#x4F46;&#x662F;&#x57FA;&#x672C;&#x5FC3;&#x8FD8;&#x662F;&#x7275;&#x6302;&#x7740;&#x6B66;&#x6C49;&#x3002;&#x65B0;&#x95FB; app &#x6BCF;&#x9694;&#x51E0;&#x4E2A;&#x5C0F;&#x65F6;&#x7684;&#x75AB;&#x60C5;&#x60C5;&#x51B5;&#x63A8;&#x9001;&#xFF0C;&#x65F6;&#x523B;&#x90FD;&#x7275;&#x626F;&#x7740;&#x6211;&#x7684;&#x5FC3;&#x3002;&#x4ECA;&#x5929;&#x8FD9;&#x91CC;&#x65B0;&#x589E;&#x5341;&#x51E0;&#x4F8B;&#xFF0C;&#x660E;&#x5929;&#x90A3;&#x91CC;&#x65B0;&#x589E;&#x5341;&#x51E0;&#x4F8B;&#xFF0C;&#x5F04;&#x5F97;&#x4EBA;&#x80C6;&#x6218;&#x5FC3;&#x60CA;&#x3002;&#x8FD8;&#x8BB0;&#x5F97;&#x6211;&#x53BB;&#x836F;&#x5E97;&#x4E70;&#x53E3;&#x7F69;&#xFF0C;&#x5927;&#x96E8;&#x5929;&#x5927;&#x5BB6;&#x6392;&#x4E86;&#x5F88;&#x957F;&#x5F88;&#x957F;&#x7684;&#x961F;&#x4F0D;&#xFF0C;&#x6BCF;&#x4EBA;&#x6BCF;&#x65E5;&#x9650;&#x8D2D; 2 &#x4E2A; N95 &#x53E3;&#x7F69;&#x3002;&#x75AB;&#x60C5;&#x521A;&#x521A;&#x7206;&#x53D1;&#x7684;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x53E3;&#x7F69;&#x5C31;&#x5982;&#x540C;&#x547D;&#x4E00;&#x6837;&#xFF0C;&#x4E0D;&#x5E26;&#x53E3;&#x7F69;&#x5B8C;&#x5168;&#x4E0D;&#x6562;&#x51FA;&#x95E8;&#x3002;&#x800C;&#x4E14;&#x90A3;&#x4E2A;&#x65F6;&#x5019;&#x53E3;&#x7F69;&#x8FD8;&#x975E;&#x5E38;&#x77ED;&#x7F3A;&#xFF0C;&#x6BCF;&#x5929;&#x5728;&#x5BB6;&#x6570;&#x7740;&#x53E3;&#x7F69;&#x8FC7;&#x65E5;&#x5B50;&#x3002;&#x53E3;&#x7F69;&#x5FEB;&#x6CA1;&#x6709;&#x4E86;&#x9700;&#x8981;&#x8D76;&#x7D27;&#x51FA;&#x95E8;&#xFF0C;&#x8D70;&#x51E0;&#x6761;&#x8857;&#x53BB;&#x6392;&#x961F;&#x4E70;&#x53E3;&#x7F69;&#x3002;&#x7F51;&#x53CB;&#x4EEC;&#x5728;&#x7F51;&#x4E0A;&#x53D1;&#x7740;&#x6696;&#x5FC3;&#x7684;&#x6F2B;&#x753B;&#xFF0C;&#x6682;&#x65F6;&#x7F13;&#x89E3;&#x7740;&#x7D27;&#x5F20;&#x60C5;&#x7EEA;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/151_2.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;">
</p>
<p>&#x4E0A;&#x56FE;&#x662F;&#x5168;&#x56FD;&#x7684;&#x7F8E;&#x98DF;&#x90FD;&#x6765;&#x770B;&#x671B;&#x751F;&#x75C5;&#x7684;&#x70ED;&#x5E72;&#x9762;&#x4E86;&#x3002;&#x6B66;&#x6C49;&#x6BCF;&#x5E74; 4 &#x6708;&#x662F;&#x6B66;&#x6C49;&#x5927;&#x5B66;&#x770B;&#x6A31;&#x82B1;&#x1F338;&#x7684;&#x5B63;&#x8282;&#x3002;&#x56E0;&#x4E3A;&#x8FD9;&#x6B21;&#x75AB;&#x60C5;&#x7684;&#x5C01;&#x57CE;&#xFF0C;&#x5927;&#x591A;&#x6570;&#x4EBA;&#x90FD;&#x4E0D;&#x80FD;&#x6765;&#x770B;&#x6A31;&#x82B1;&#x4E86;&#x3002;&#x611F;&#x8C22;&#x533B;&#x52A1;&#x5DE5;&#x4F5C;&#x8005;&#x4EEC;&#x7684;&#x5927;&#x65E0;&#x754F;&#x7CBE;&#x795E;&#xFF0C;&#x62EF;&#x6551;&#x4E86;&#x6B66;&#x6C49;&#x8FD9;&#x5EA7;&#x57CE;&#x3002;&#x5F53;&#x75AB;&#x60C5;&#x8FC7;&#x53BB;&#x4E4B;&#x65F6;&#x5C31;&#x662F;&#x8BF7;&#x4F60;&#x4EEC;&#x6BCF;&#x4E2A;&#x4EBA;&#x6765;&#x6B66;&#x6C49;&#x770B;&#x6A31;&#x82B1;&#x4E4B;&#x65E5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/151_3.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x6BD4;&#x8F83;&#x6DF1;&#x523B;&#x7684;&#x662F;&#xFF0C;&#x4E2D;&#x56FD;&#x4EBA;&#x518D;&#x6B21;&#x9A8C;&#x8BC1;&#x4E86;&#x57FA;&#x5EFA;&#x72C2;&#x9B54;&#x7684;&#x79F0;&#x53F7;&#x3002;&#x4EC5;&#x4EC5;&#x7528;&#x51E0;&#x5929;&#x65F6;&#x95F4;&#x5C31;&#x5C06;&#x96F7;&#x795E;&#x5C71;&#xFF0C;&#x706B;&#x795E;&#x5C71;&#x4E24;&#x4E2A;&#x533B;&#x9662;&#x5EFA;&#x7ACB;&#x8D77;&#x6765;&#x4E86;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/151_6.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x5176;&#x5B9E;&#x706B;&#x795E;&#x548C;&#x96F7;&#x795E;&#x7684;&#x540D;&#x5B57;&#x662F;&#x6709;&#x6765;&#x6E90;&#x7684;&#x3002;&#x695A;&#x6587;&#x5316;&#x4F20;&#x8BF4;&#x4E2D;&#x7684;&#x6E56;&#x5317;&#x4E43;&#x53E4;&#x695A;&#x4E4B;&#x5730;&#xFF0C;&#x800C;&#x695A;&#x56FD;&#x4EBA;&#x88AB;&#x8BA4;&#x4E3A;&#x662F;&#x706B;&#x795E;&#x795D;&#x878D;&#x7684;&#x540E;&#x4EE3;&#xFF0C;&#x795D;&#x878D;&#xFF08;&#x5E1D;&#x55BE;&#xFF09;&#x5219;&#x662F;&#x9EC4;&#x5E1D;&#x7684;&#x5B50;&#x5B59;&#x3002;<strong>&#x4EBA;&#x7684;&#x80BA;&#x90E8;&#x4E94;&#x884C;&#x5C5E;&#x91D1;&#xFF0C;&#x706B;&#x514B;&#x91D1;</strong>&#x3002; &#x800C;&#x837C;&#x6BD2;&#x4EBA;&#x7C7B;&#x80BA;&#x90E8;&#x7684;&#x65B0;&#x578B;&#x51A0;&#x72B6;&#x75C5;&#x6BD2;&#x60E7;&#x6015;&#x9AD8;&#x6E29;&#xFF0C;&#x706B;&#x795E;&#x6B63;&#x597D;&#x80FD;&#x9A71;&#x761F;&#x795E;&#xFF0C;&#x4E8E;&#x662F;&#x201C;&#x706B;&#x795E;&#x5C71;&#x201D;&#x4E4B;&#x540D;&#x5E94;&#x8FD0;&#x800C;&#x751F;&#x3002;</p>
<p>&#x81F3;&#x4E8E;&#x96F7;&#x795E;&#x5C71;&#xFF0C;&#x4E5F;&#x662F;&#x5BF9;&#x5E94;&#x7740;&#x4E2D;&#x56FD;&#x6C11;&#x4FD7;&#x6587;&#x5316;&#x7684;&#x4F20;&#x8BF4;&#xFF1A;&#x96F7;&#x795E;&#x662F;&#x60E9;&#x7F5A;&#x7F6A;&#x6076;&#x4E4B;&#x795E;&#x3002;&#x51E1;&#x6709;&#x8FDD;&#x80CC;&#x4EBA;&#x4F26;&#x6CD5;&#x7406;&#x4E14;&#x72AF;&#x4E0B;&#x4E0D;&#x53EF;&#x9976;&#x6055;&#x7F6A;&#x8D23;&#x8005;&#xFF0C;&#x5219;&#x5C06;&#x906D;&#x53D7;&#x4E94;&#x96F7;&#x8F70;&#x9876;&#x800C;&#x6BD9;&#x4EA1;&#x3002;&#x8FD9;&#x4FBF;&#x662F;&#x201C;&#x96F7;&#x795E;&#x5C71;&#x201D;&#x4E00;&#x540D;&#x7684;&#x6765;&#x5386;&#x3002;&#x4ECA;&#x5929;&#x7684;&#x4E2D;&#x56FD;&#xFF0C;&#x4E3E;&#x56FD;&#x575A;&#x5B9A;&#x4FE1;&#x5FC3;&#x3001;&#x540C;&#x821F;&#x5171;&#x6D4E;&#x3001;&#x79D1;&#x5B66;&#x9632;&#x6CBB;&#x3001;&#x7CBE;&#x51C6;&#x65BD;&#x7B56;&#xFF0C;&#x4E00;&#x573A;&#x9632;&#x63A7;&#x963B;&#x51FB;&#x65B0;&#x578B;&#x51A0;&#x72B6;&#x75C5;&#x6BD2;&#x7684;&#x4EBA;&#x6C11;&#x6218;&#x4E89;&#x6B63;&#x5728;&#x53D6;&#x5F97;&#x80DC;&#x5229;&#xFF0C;&#x6B64;&#x523B;&#x6709;&#x706B;&#x795E;&#x5C71;&#x548C;&#x96F7;&#x795E;&#x5C71;&#x7684;&#x201C;&#x52A0;&#x76DF;&#x201D;&#xFF0C;&#x4EBA;&#x4EEC;&#x7684;&#x7CBE;&#x795E;&#x529B;&#x91CF;&#x66F4;&#x52A0;&#x5145;&#x5206;&#xFF01;</p>
<p>&#x7531;&#x4E2D;&#x5EFA;&#x4E09;&#x5C40;&#x7275;&#x5934;&#xFF0C;&#x6B66;&#x6C49;&#x5EFA;&#x5DE5;&#x3001;&#x6B66;&#x6C49;&#x5E02;&#x653F;&#x3001;&#x6C49;&#x9633;&#x5E02;&#x653F;&#x7B49; 3 &#x5BB6;&#x4F01;&#x4E1A;&#x53C2;&#x5EFA;&#x7684;&#x6B66;&#x6C49;&#x8521;&#x7538;&#x706B;&#x795E;&#x5C71;&#x533B;&#x9662;&#xFF0C;&#x5C06;&#x7528;&#x4E8E;&#x96C6;&#x4E2D;&#x6536;&#x6CBB;&#x65B0;&#x578B;&#x80BA;&#x708E;&#x60A3;&#x8005;&#xFF0C;&#x88AB;&#x79F0;&#x4F5C;&#x6B66;&#x6C49;&#x201C;&#x5C0F;&#x6C64;&#x5C71;&#x533B;&#x9662;&#x201D;&#xFF0C;&#x5728; 2 &#x6708; 3 &#x65E5;&#x524D;&#x5EFA;&#x6210;&#x3002;&#x9664;&#x5915;&#x591C;&#xFF0C;&#x706B;&#x795E;&#x5C71;&#x533B;&#x9662;&#x65BD;&#x5DE5;&#x73B0;&#x573A;&#x706F;&#x706B;&#x901A;&#x660E;&#xFF0C;&#x5404;&#x79CD;&#x673A;&#x68B0;&#x5F00;&#x8DB3;&#x9A6C;&#x529B;&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x573A;&#x653B;&#x575A;&#x6218;&#xFF0C;&#x5EFA;&#x8BBE;&#x8005;&#x4E89;&#x5206;&#x593A;&#x79D2;&#xFF0C;&#x529B;&#x4E89;&#x65E9;&#x65E5;&#x5B8C;&#x5DE5;&#x3002;&#x7F51;&#x53CB;&#x4EEC;&#x7EB7;&#x7EB7;&#x5F00;&#x542F;&#x4E91;&#x76D1;&#x5DE5;&#x6A21;&#x5F0F;&#x3002;5000 &#x591A;&#x4E07;&#x7F51;&#x53CB;&#x5728;&#x5BB6;&#x91CC;&#x770B;&#x7740;&#x706B;&#x795E;&#x5C71;&#x548C;&#x96F7;&#x795E;&#x5C71;&#x65BD;&#x5DE5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/151_5.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x7F51;&#x53CB;&#x4EEC;&#x8FD8;&#x5C06;&#x8FD9;&#x4E9B;&#x5DE5;&#x5730;&#x4E0A;&#x7684;&#x8F66;&#x5206;&#x522B;&#x53D6;&#x4E86;&#x5404;&#x81EA;&#x6709;&#x7231;&#x7684;&#x540D;&#x5B57;&#x3002;&#x540A;&#x8F66;&#x662F;&#x201C;&#x9001;&#x9AD8;&#x5B97;&#x201D;&#xFF0C;&#x5E26;&#x94A9;&#x5B50;&#x7684;&#x662F;&#x201C;&#x5C0F;&#x7EA2;&#x201D;&#xFF0C;&#x6316;&#x6398;&#x673A;&#x662F;&#x201C;&#x84DD;&#x5FD8;&#x673A;&#x201D;&#xFF0C;&#x8D27;&#x8F66;&#x662F;&#x201C;&#x7EA2;&#x725B;&#x54E5;&#x54E5;&#x201D;&#xFF0C;&#x53C9;&#x8F66;&#x662F;&#x201C;&#x53C9;&#x9171;&#x201D;&#xFF0C;&#x6C34;&#x6CE5;&#x6405;&#x62CC;&#x673A;&#x662F;&#x201C;&#x5455;&#x6CE5;&#x9171;&#x201D;&#xFF0C;&#x8FD8;&#x6709;&#x201C;&#x591A;&#x5C14;&#x886E;&#x201D;&#xFF0C;&#x201C;&#x767D;&#x5C45;&#x6613;&#x201D;&#xFF0C;&#x201C;&#x6444;&#x653F;&#x738B;&#x201D;&#xFF0C;&#x201C;&#x5149;&#x6B66;&#x5E1D;&#x201D;&#xFF0C;&#x201C;&#x9EC4;&#x592A;&#x6025;&#x201D;&#xFF0C;&#x201C;&#x5434;&#x4E09;&#x6842;&#x201D;&#xFF0C;&#x201C;&#x5C0F;&#x5C0F;&#x9EC4;&#x201D;&#xFF0C;&#x201C;&#x5C0F;&#x7EFF;&#x201D;&#x3002;&#x611F;&#x8C22;&#x7F51;&#x53CB;&#x4EEC;&#x98CE;&#x8DA3;&#x5E7D;&#x9ED8;&#x7684;&#x540D;&#x5B57;&#xFF0C;&#x77ED;&#x6682;&#x6CBB;&#x6108;&#x4E86;&#x6211;&#x7D27;&#x5F20;&#x7684;&#x795E;&#x7ECF;&#x3002;</p>
<p>&#x6700;&#x7EC8;&#xFF0C;&#x6B66;&#x6C49;&#x8FD9;&#x5EA7;&#x82F1;&#x96C4;&#x7684;&#x57CE;&#x5E02;&#xFF0C;&#x8FD8;&#x662F;&#x987A;&#x5229;&#x633A;&#x8FC7;&#x4E86;&#x96BE;&#x5173;&#xFF01;&#x5269;&#x4E0B;&#x7684;&#x4EB2;&#x4EBA;&#x79BB;&#x53BB;&#x7684;&#x4F24;&#x75DB;&#xFF0C;&#x7ECF;&#x6D4E;&#x5E26;&#x6765;&#x7684;&#x521B;&#x4F24;&#xFF0C;&#x90FD;&#x4EA4;&#x7ED9;&#x65F6;&#x95F4;&#x53BB;&#x6108;&#x5408;&#x5427;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/151_7.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;">
</p>
<h2 id="%E7%A6%BB%E8%81%8C%E4%B9%8B%E5%90%8E">&#x79BB;&#x804C;&#x4E4B;&#x540E;</h2>
<p>&#x7ECF;&#x8FC7; 2020 &#x5E74;&#x8FD9;&#x6B21;&#x75AB;&#x60C5;&#xFF0C;&#x8BA9;&#x6211;&#x7684;&#x4EBA;&#x751F;&#x8F68;&#x8FF9;&#x4E5F;&#x906D;&#x5230;&#x4E86;&#x4E0D;&#x53EF;&#x9006;&#x7684;&#x201C;&#x6253;&#x51FB;&#x201D;&#xFF0C;&#x5F88;&#x591A;&#x4E8B;&#x60C5;&#x90FD;&#x56DE;&#x4E0D;&#x5230;&#x8FC7;&#x53BB;&#x4E86;&#xFF0C;&#x4E5F;&#x4E0D;&#x53EF;&#x80FD;&#x56DE;&#x5230;&#x8FC7;&#x53BB;&#x4E86;&#x3002;&#x6211;&#x5728; 6 &#x6708;&#x62FF;&#x5B8C;&#x5E74;&#x7EC8;&#x5956;&#x4EE5;&#x540E;&#xFF0C;&#x9009;&#x62E9;&#x4E86;&#x8F9E;&#x804C;&#xFF0C;&#x53BB;&#x5E72;&#x4E00;&#x4E9B;&#x81EA;&#x5DF1;&#x7ACB;&#x5373;&#x60F3;&#x505A;&#x7684;&#x4E8B;&#x60C5;&#x3002;&#x79BB;&#x804C;&#x4E86;&#x4EE5;&#x540E;&#x4E5F;&#x6CA1;&#x5E72;&#x4EC0;&#x4E48;&#x60CA;&#x5929;&#x52A8;&#x5730;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;&#x5C31;&#x5168;&#x4E16;&#x754C;&#x5230;&#x5904;&#x8F6C;&#x8F6C;&#xFF0C;&#x653E;&#x677E;&#x653E;&#x677E;&#x3002;&#xFF08;&#x8FD9;&#x90E8;&#x5206;&#x7684;&#x6545;&#x4E8B;&#x5C31;&#x4E0D;&#x7EC6;&#x804A;&#x4E86;&#x3002;&#x56E0;&#x4E3A;&#x662F;&#x75AB;&#x60C5;&#x671F;&#x95F4;&#xFF0C;&#x804A;&#x65C5;&#x884C;&#x7684;&#x4E8B;&#x60C5;&#x6709;&#x70B9;&#x8FDD;&#x53CD;&#x4E2D;&#x56FD;&#x9632;&#x75AB;&#x7CBE;&#x795E;&#x2014;&#x2014; &#x975E;&#x5FC5;&#x8981;&#x4E0D;&#x65C5;&#x884C;&#x3002;&#xFF09;&#x91D1;&#x94B1;&#x786E;&#x5B9E;&#x5F88;&#x91CD;&#x8981;&#xFF0C;&#x4F46;&#x662F;&#x5982;&#x679C;&#x548C;&#x65F6;&#x95F4;&#x6BD4;&#x8D77;&#x6765;&#xFF0C;&#x663E;&#x5F97;&#x6CA1;&#x90A3;&#x4E48;&#x91CD;&#x8981;&#x4E86;&#x3002;&#x8BFB;&#x8005;&#x53EF;&#x80FD;&#x6709;&#x4EBA;&#x4E0D;&#x8D5E;&#x540C;&#x6211;&#x8FD9;&#x89C2;&#x70B9;&#xFF0C;&#x6CA1;&#x5173;&#x7CFB;&#xFF0C;&#x6BD5;&#x7ADF;&#x6BCF;&#x4E2A;&#x4EBA;&#x7684;&#x7ECF;&#x5386;&#x4E0D;&#x5C3D;&#x76F8;&#x540C;&#xFF0C;&#x5BF9;&#x4E00;&#x4E9B;&#x4E8B;&#x60C5;&#x7684;&#x8BA4;&#x8BC6;&#x4E5F;&#x4E0D;&#x540C;&#x3002;&#x75AB;&#x60C5;&#x4E5F;&#x8BA9;&#x6211;&#x5BF9;&#x4EE5;&#x4E0B;&#x4E00;&#x4E9B;&#x201C;&#x4EBA;&#x751F;&#x54F2;&#x7406;&#x201D;&#x6709;&#x4E86;&#x66F4;&#x6DF1;&#x7684;&#x8BA4;&#x8BC6;&#xFF1A;</p>
<ol>
<li>&#x4EBA;&#x8FD9;&#x8F88;&#x5B50;&#x94B1;&#x662F;&#x8D5A;&#x4E0D;&#x5B8C;&#x7684;&#x3002;&#x5F53;&#x4F60;&#x8D5A;&#x5B8C; 100W &#x4EE5;&#x540E;&#xFF0C;&#x9A6C;&#x4E0A;&#x5C31;&#x60F3;&#x7740;&#x8D5A; 500W&#x3002;&#x5F53;&#x8D5A;&#x5B8C;&#x4E86; 500W &#x4EE5;&#x540E;&#xFF0C;&#x5C31;&#x60F3;&#x7740;&#x8D5A; 1 &#x4E2A;&#x4EBF;&#xFF0C;10 &#x4E2A;&#x4EBF;&#x3002;&#x94B1;&#x8FD9;&#x4E2A;&#x4E1C;&#x897F;&#x5F53;&#x7136;&#x8D8A;&#x591A;&#x8D8A;&#x597D;&#x3002;&#x6240;&#x4EE5;&#x8D5A;&#x94B1;&#x7684;&#x8FD9;&#x6761;&#x8DEF;&#x4E0A;&#xFF0C;&#x6C38;&#x8FDC;&#x6CA1;&#x6709;&#x7EC8;&#x70B9;&#x3002;&#x90A3;&#x8D5A;&#x94B1;&#x7684;&#x76EE;&#x7684;&#x662F;&#x4E3A;&#x4E86;&#x4EC0;&#x4E48;&#x5462;&#xFF1F;</li>
<li>&#x8D5A;&#x94B1;&#x5BF9;&#x4E8E;&#x6211;&#x6765;&#x8BF4;&#xFF0C;&#x662F;&#x4E3A;&#x4E86;&#x8F85;&#x52A9;&#x6211;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x4EBA;&#x751F;&#x7406;&#x60F3;&#x3002;&#x6211;&#x6DF1;&#x77E5;&#x6211;&#x662F;&#x4E0D;&#x53EF;&#x80FD;&#x50CF;&#x4E54;&#x5E03;&#x65AF;&#x90A3;&#x6837;&#xFF0C;&#x751F;&#x6765;&#x5C31;&#x662F;&#x4E3A;&#x4E86;&#x6539;&#x53D8;&#x4E16;&#x754C;&#x3002;&#x6211;&#x7684;&#x751F;&#x6D3B;&#x7684;&#x7406;&#x60F3;&#x5C31;&#x662F;&#x7406;&#x60F3;&#x7684;&#x751F;&#x6D3B;&#x3002;&#x4E00;&#x822C;&#x666E;&#x901A;&#x4EBA;&#x8D5A;&#x94B1;&#x7684;&#x76EE;&#x7684;&#x90FD;&#x4E00;&#x6837;&#xFF0C;&#x4E3A;&#x4E86;&#x6539;&#x5584;&#x81EA;&#x5DF1;&#x7684;&#x751F;&#x6D3B;&#xFF0C;&#x7ED9;&#x81EA;&#x5DF1;&#x4E0B;&#x4E00;&#x4EE3;&#x66F4;&#x597D;&#x7684;&#x751F;&#x6D3B;&#xFF0C;&#x63D0;&#x9AD8;&#x7236;&#x6BCD;&#x7684;&#x751F;&#x6D3B;&#x8D28;&#x91CF;&#x7B49;&#x7B49;&#x3002;&#x7528;&#x66F4;&#x52A0;&#x9AD8;&#x5C1A;&#x7684;&#x8BF4;&#x6CD5;&#x8BF4;&#xFF0C;&#x5C31;&#x662F;&#x60F3;&#x63D0;&#x9AD8;&#x4E00;&#x4E0B;&#x81EA;&#x5DF1;&#x7684;&#x793E;&#x4F1A;&#x9636;&#x7EA7;&#x3002;&#x6211;&#x7238;&#x5988;&#x90A3;&#x4E00;&#x4EE3;&#x662F;&#x7ECF;&#x5386;&#x8FC7;&#x6587;&#x9769;&#x7684;&#x4E00;&#x4EE3;&#x4EBA;&#x3002;&#x90A3;&#x4E00;&#x4EE3;&#x4EBA;&#x5C31;&#x8FDE;&#x5B66;&#x4E60;&#x90FD;&#x662F;&#x5962;&#x671B;&#xFF0C;&#x6BCF;&#x5929;&#x90FD;&#x5728;&#x201C;&#x6597;&#x5730;&#x4E3B;&#x201D;&#x3002;(&#x9648;&#x666F;&#x6DA6;&#x6570;&#x5B66;&#x5BB6;&#x5B8C;&#x5168;&#x662F;&#x90A3;&#x4E2A;&#x65F6;&#x4EE3;&#x7684;&#x201C;&#x5947;&#x8469;&#x201D;) &#x6240;&#x4EE5;&#x6211;&#x7238;&#x5988;&#x8FD9;&#x4E00;&#x4EE3;&#x7684;&#x5386;&#x53F2;&#x4F7F;&#x547D;&#x662F;&#x8BA9;&#x81EA;&#x5DF1;&#x7684;&#x5B69;&#x5B50;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x6211;&#x8FD9;&#x4E00;&#x4EE3;&#xFF0C;&#x8BFB;&#x4E2A;&#x597D;&#x5927;&#x5B66;&#xFF0C;&#x8BFB;&#x4E66;&#x4E0D;&#x6101;&#x3002;&#x6211;&#x7238;&#x5988;&#x7B97;&#x662F;&#x5B8C;&#x6210;&#x4E86;&#x4ED6;&#x4EEC;&#x7684;&#x613F;&#x671B;&#xFF0C;&#x6211;&#x8BFB;&#x4E86;&#x4E00;&#x4E2A;&#x5927;&#x5B66;(&#x4E0D;&#x8FC7;&#x4E0D;&#x662F;&#x9876;&#x7EA7;&#x5927;&#x5B66;)&#x3002;&#x90A3;&#x6211;&#x8FD9;&#x4E00;&#x4EE3;&#x7684;&#x5386;&#x53F2;&#x4F7F;&#x547D;&#x662F;&#x4EC0;&#x4E48;&#x5462;&#xFF1F;&#x4E00;&#x4EE3;&#x80AF;&#x5B9A;&#x8981;&#x6BD4;&#x4E00;&#x4EE3;&#x5F3A;&#x3002;&#x6211;&#x7684;&#x4E0B;&#x4E00;&#x4EE3;&#x80AF;&#x5B9A;&#x81F3;&#x5C11;&#x8981;&#x7855;&#x58EB;&#xFF0C;&#x535A;&#x58EB;&#x4E86;&#x3002;(&#x5F00;&#x73A9;&#x7B11;&#x7684;) &#x4ECE;&#x793E;&#x4F1A;&#x9636;&#x7EA7;&#x7684;&#x5C42;&#x9762;&#x6765;&#x8BF4;&#xFF0C;&#x6211;&#x7238;&#x5988;&#x90A3;&#x4E00;&#x4EE3;&#xFF0C;&#x662F;&#x82E6;&#x8FC7;&#x6765;&#x7684;&#x4E00;&#x4EE3;&#xFF0C;&#x60F3;&#x8BFB;&#x4E66;&#x5374;&#x6CA1;&#x6709;&#x4E66;&#x53EF;&#x4EE5;&#x8BFB;&#xFF0C;&#x57FA;&#x672C;&#x90FD;&#x662F;&#x9AD8;&#x4E2D;&#x6587;&#x51ED;&#xFF0C;&#x4E4B;&#x540E;&#x968F;&#x7740;&#x56FD;&#x5BB6;&#x7684;&#x5927;&#x751F;&#x4EA7;&#x8FD0;&#x52A8;&#xFF0C;&#x632F;&#x5174;&#x5DE5;&#x4E1A;&#x3002;&#x6211;&#x7238;&#x5988;&#x90A3;&#x65F6;&#x8FD8;&#x4E0D;&#x7B97;&#x662F;&#x5C0F;&#x5EB7;&#x3002;&#x4ED6;&#x4EEC;&#x7684;&#x5386;&#x53F2;&#x4F7F;&#x547D;&#x662F;&#x628A;&#x6211;&#x8FD9;&#x4E00;&#x4EE3;&#x5411;&#x4E0A;&#x9001;&#x4E00;&#x4E2A;&#x9636;&#x7EA7;&#xFF0C;&#x4E2D;&#x4EA7;&#x9636;&#x7EA7;&#x3002;&#x90A3;&#x4E48;&#x6211;&#x8FD9;&#x4E00;&#x4EE3;&#x7684;&#x5386;&#x53F2;&#x4F7F;&#x547D;&#x81F3;&#x5C11;&#x80FD;&#x8BA9;&#x5B69;&#x5B50;&#x51FA;&#x751F;&#x5728;&#x4E2D;&#x4EA7;&#x9636;&#x7EA7;&#x4E2D;&#xFF0C;&#x7136;&#x540E;&#x5C3D;&#x6211;&#x6240;&#x80FD;&#x8BA9;&#x4ED6;&#x4EAB;&#x53D7;&#x66F4;&#x597D;&#x7684;&#x6559;&#x80B2;&#x548C;&#x533B;&#x7597;&#xFF0C;&#x52A9;&#x4ED6;&#x5B9E;&#x73B0;&#x4ED6;&#x7684;&#x4EBA;&#x751F;&#x7406;&#x60F3;&#x3002;&#x8BF4;&#x4E86;&#x8FD9;&#x4E48;&#x591A;&#xFF0C;&#x8D5A;&#x94B1;&#x7684;&#x76EE;&#x7684;&#x4E5F;&#x5C31;&#x51FA;&#x6765;&#x4E86;&#x3002;&#x6211;&#x8D5A;&#x94B1;&#x5C31;&#x662F;&#x4E3A;&#x4E86;&#x5B8C;&#x6210;&#x6211;&#x7684;&#x5386;&#x53F2;&#x4F7F;&#x547D;&#x7684;&#x3002;</li>
<li>&#x65E2;&#x7136;&#x8D5A;&#x94B1;&#x8FD9;&#x6761;&#x8DEF;&#x662F;&#x6C38;&#x65E0;&#x6B62;&#x5883;&#x7684;&#xFF0C;&#x90A3;&#x8FD9;&#x6761;&#x8DEF;&#x4E0A;&#x662F;&#x5426;&#x6709;&#x4E00;&#x4E9B;&#x8282;&#x70B9;&#x5462;&#xFF1F;&#x6BD4;&#x5982;&#x5148;&#x8D5A; 1 &#x4E2A;&#x4EBF;&#x4E3A;&#x76EE;&#x6807;&#xFF0C;&#x90A3;&#x4E48;&#x5148;&#x8D5A; 500W &#x662F;&#x5426;&#x53EF;&#x4EE5;&#x5F53;&#x505A;&#x4E00;&#x4E2A;&#x4EBA;&#x751F;&#x8282;&#x70B9;&#x5462;&#xFF1F;&#x6211;&#x89C9;&#x5F97;&#x662F;&#x53EF;&#x4EE5;&#x7684;&#x3002;&#x6BD4;&#x5982;&#x5148;&#x8D5A;&#x5230; 500W &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5148;&#x53BB;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x613F;&#x671B;&#x3002;&#x56E0;&#x4E3A;&#x65F6;&#x95F4;&#x662F;&#x4E0D;&#x7B49;&#x4EBA;&#x7684;&#x3002;&#x6709;&#x4E9B;&#x613F;&#x671B;&#x5728;&#x89C4;&#x5B9A;&#x65F6;&#x95F4;&#x5185;&#x5B9E;&#x73B0;&#x4E0D;&#x4E86;&#xFF0C;&#x53EF;&#x80FD;&#x8FD9;&#x8F88;&#x5B50;&#x4E5F;&#x5B9E;&#x73B0;&#x4E0D;&#x4E86;&#x3002;&#x6709;&#x4EBA;&#x53EF;&#x80FD;&#x8BFB;&#x5230;&#x8FD9;&#x91CC;&#x8FD8;&#x4E0D;&#x4FE1;&#x3002;&#x90A3;&#x6211;&#x5C31;&#x968F;&#x4FBF;&#x8BF4; 2 &#x4E2A;&#x4F8B;&#x5B50;&#x5427;&#x3002;&#x5982;&#x679C;&#x4E00;&#x4E2A;&#x4E2D;&#x4EA7;&#x9636;&#x7EA7; 30 &#x5C81;&#x4E4B;&#x524D;&#x6CA1;&#x6709;&#x73AF;&#x7403;&#x65C5;&#x884C;&#x4E00;&#x6B21;&#xFF0C;&#x90A3;&#x4E48;&#x8FD9;&#x8F88;&#x5B50;&#x4E4B;&#x540E;&#x518D;&#x73AF;&#x7403;&#x65C5;&#x884C;&#x7684;&#x51E0;&#x7387;&#x5C31;&#x4E0D;&#x662F;&#x5F88;&#x5927;&#x4E86;&#x3002;&#x5F88;&#x591A;&#x4EBA;&#x53EF;&#x80FD;&#x4F1A;&#x8BF4;&#xFF0C;&#x201C;&#x8FD9;&#x5E76;&#x4E0D;&#x662F;&#x6211;&#x7684;&#x4EBA;&#x751F;&#x7406;&#x60F3;&#xFF0C;&#x6211;&#x4E0D;&#x7528;&#x53BB;&#x5B9E;&#x73B0;&#x5B83;&#x201D;&#x3002;&#x597D;&#xFF0C;&#x90A3;&#x518D;&#x6362;&#x4E00;&#x4E2A;&#x3002;&#x5982;&#x679C;&#x5728;&#x7238;&#x5988; 50-60 &#x5C81;&#x4E4B;&#x524D;&#x6CA1;&#x80FD;&#x5B8C;&#x6210;&#x4ED6;&#x4EEC;&#x7684;&#x4E00;&#x4E9B;&#x613F;&#x671B;&#xFF0C;&#x53EF;&#x80FD;&#x4E4B;&#x540E;&#x5C31;&#x6CA1;&#x6CD5;&#x5B8C;&#x6210;&#x4E86;&#xFF0C;&#x53EA;&#x80FD;&#x53D8;&#x6210;&#x6C38;&#x6052;&#x7684;&#x9057;&#x61BE;&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#xFF0C;&#x65F6;&#x95F4;&#x5C31;&#x662F;&#x4E0D;&#x7B49;&#x4EBA;&#x7684;&#xFF0C;&#x5B83;&#x53EF;&#x4E0D;&#x7B49;&#x4F60;&#x6709;&#x6CA1;&#x6709;&#x8D5A;&#x5230; 1 &#x4E2A;&#x4EBF;&#xFF0C;&#x5230;&#x65F6;&#x95F4;&#x4E86;&#xFF0C;&#x5C31;&#x65E0;&#x60C5;&#x7684;&#x5265;&#x593A;&#x4F60;&#x5B9E;&#x73B0;&#x613F;&#x671B;&#x7684;&#x6743;&#x5229;&#x3002;&#x6BD4;&#x5982;&#x7238;&#x5988;&#x8FD9;&#x8F88;&#x5B50;&#x60F3;&#x53BB;&#x722C;&#x722C;&#x957F;&#x57CE;&#xFF0C;&#x60F3;&#x53BB;&#x5E03;&#x8FBE;&#x62C9;&#x5BAB;&#x770B;&#x770B;&#xFF0C;&#x7238;&#x5988;&#x5C81;&#x6570;&#x5927;&#x4E86;&#x4EE5;&#x540E;&#xFF0C;&#x5230;&#x65F6;&#x5019;&#x60F3;&#x53BB;&#x9AD8;&#x539F;&#x90FD;&#x53BB;&#x4E0D;&#x4E86;&#x4E86;&#xFF0C;&#x56E0;&#x4E3A;&#x8EAB;&#x4F53;&#x4E0D;&#x5141;&#x8BB8;&#x4E86;&#x3002;&#x90A3;&#x4E48;&#x8BE5;&#x600E;&#x4E48;&#x505A;&#x5462;&#xFF1F;&#x6211;&#x81EA;&#x5DF1;&#x9009;&#x62E9;&#x5728; 30 &#x5C81;&#x7684;&#x8FD9;&#x4E2A;&#x4EBA;&#x751F;&#x8282;&#x70B9;&#x5148;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x613F;&#x671B;&#x3002;&#x8FD9;&#x4E5F;&#x662F;&#x5927;&#x5BB6;&#x770B;&#x5230;&#x6211;&#x79BB;&#x804C;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x4EBA;&#x751F;&#x613F;&#x671B;&#x7684;&#x539F;&#x56E0;&#x4E86;&#x3002;30 &#x5C81;&#x4E4B;&#x524D;&#x662F;&#x4E00;&#x4E2A;&#x4EBA;&#x751F;&#x8282;&#x70B9;&#x3002;&#x56E0;&#x4E3A;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x6709;&#x4E00;&#x4E9B;&#x79EF;&#x84C4;&#xFF0C;&#x53EF;&#x80FD;&#x8FD8;&#x6CA1;&#x6709;&#x5B69;&#x5B50;&#xFF0C;&#x6CA1;&#x6709;&#x592A;&#x591A;&#x7684;&#x8D1F;&#x62C5;&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x5E26;&#x7238;&#x5988;&#x53BB;&#x53BB;&#x62C9;&#x8428;&#xFF0C;&#x6216;&#x8005;&#x53BB;&#x51B0;&#x5C9B;&#x770B;&#x6781;&#x5149;&#xFF0C;&#x56DE;&#x9988;&#x4ED6;&#x4EEC;&#x8FD9;&#x8F88;&#x5B50;&#x7684;&#x517B;&#x80B2;&#x4E4B;&#x6069;&#xFF0C;&#x4E5F;&#x53BB;&#x5B9E;&#x73B0;&#x4E00;&#x4E9B;&#x4ED6;&#x4EEC;&#x8BA4;&#x4E3A;&#x662F;&#x201C;&#x5962;&#x671B;&#x201D;&#x7684;&#x7406;&#x60F3;&#x3002;30 &#x5C81;&#x4E4B;&#x540E;&#xFF0C;&#x5C31;&#x6709;&#x5BB6;&#x5EAD;&#xFF0C;&#x6709;&#x4E86;&#x4E00;&#x4E9B;&#x4E8B;&#x4E1A;&#xFF0C;&#x53EF;&#x80FD;&#x4E00;&#x76F4;&#x5230; 40 &#x5C81;&#x4E4B;&#x524D;&#x90FD;&#x4F1A;&#x4E00;&#x76F4;&#x5728;&#x5F88;&#x5FD9;&#x788C;&#x4E2D;&#x5EA6;&#x8FC7;&#x3002;</li>
<li>&#x94B1;&#x65E2;&#x7136;&#x662F;&#x8D5A;&#x4E0D;&#x5B8C;&#x7684;&#xFF0C;&#x90A3;&#x4EC0;&#x4E48;&#x624D;&#x662F;&#x4F60;&#x8FD9;&#x8F88;&#x5B50;&#x6700;&#x503C;&#x94B1;&#x7684;&#x4E1C;&#x897F;&#x5462;&#xFF1F;&#x662F;&#x5065;&#x5EB7;&#x3002;&#x4E00;&#x4E2A;&#x5065;&#x5EB7;&#x7684;&#x8EAB;&#x4F53;&#x624D;&#x662F;&#x4F60;&#x65E0;&#x4EF7;&#x7684;&#x8D22;&#x5BCC;&#xFF01;&#x6211;&#x4E4B;&#x524D;&#x8FD8;&#x6CA1;&#x6709;&#x8FD9;&#x4E48;&#x6DF1;&#x523B;&#x7684;&#x8BA4;&#x8BC6;&#x5230;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x3002;&#x8D5A;&#x94B1;&#x662F;&#x5F88;&#x91CD;&#x8981;&#xFF0C;&#x4F46;&#x662F;&#x7231;&#x62A4;&#x81EA;&#x5DF1;&#xFF0C;&#x4FDD;&#x62A4;&#x597D;&#x81EA;&#x5DF1;&#x7684;&#x5065;&#x5EB7;&#x66F4;&#x52A0;&#x91CD;&#x8981;&#x3002;&#x5728;&#x8FD9;&#x6B21;&#x75AB;&#x60C5;&#x9762;&#x524D;&#xFF0C;&#x94B1;&#x662F;&#x90A3;&#x4E48;&#x7684;&#x65E0;&#x529B;&#x3002;&#x81F3;&#x5C11;&#x76EE;&#x524D;&#x7684;&#x79D1;&#x5B66;&#x6280;&#x672F;&#x6765;&#x770B;&#xFF0C;&#x94B1;&#x662F;&#x65E0;&#x6CD5;&#x4E70;&#x547D;&#x7684;&#x3002;&#x53E4;&#x6709;&#x79E6;&#x59CB;&#x7687;&#x7EC8;&#x5176;&#x4E00;&#x751F;&#x5BFB;&#x6C42;&#x957F;&#x751F;&#x4E0D;&#x8001;&#x4E4B;&#x836F;&#xFF0C;&#x4ECA;&#x6709;&#x5BCC;&#x8C6A;&#x4EEC;&#x7814;&#x7A76;&#x6C38;&#x751F;&#x7684;&#x79D8;&#x5BC6;&#x3002;&#x6709;&#x94B1;&#x4EBA;&#x90FD;&#x4F1A;&#x5E0C;&#x671B;&#x80FD;&#x6C38;&#x751F;&#xFF0C;&#x7838;&#x94B1;&#x7EED;&#x547D;&#x3002;&#x4F46;&#x662F;&#x8D77;&#x7801;&#x76EE;&#x524D;&#x770B;&#x6765;&#xFF0C;&#x94B1;&#x662F;&#x65E0;&#x6CD5;&#x4F7F;&#x4EBA;&#x6C38;&#x751F;&#x7684;&#x3002;&#x5373;&#x4F7F;&#x672A;&#x6765;&#x54EA;&#x5929;&#x5B9E;&#x73B0;&#x4E86;&#xFF0C;&#x4E5F;&#x4F1A;&#x5F88;&#x6602;&#x8D35;&#xFF0C;&#x4E5F;&#x4E0D;&#x662F;&#x4E00;&#x822C;&#x4E2D;&#x4EA7;&#x9636;&#x7EA7;&#x80FD;&#x53BB;&#x505A;&#x7684;&#x3002;&#x201C;&#x7A77;&#x4EBA;&#x201D;&#x9762;&#x5BF9;&#x751F;&#x6B7B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5982;&#x679C;&#x80FD;&#x62FF;&#x51FA;&#x5065;&#x5EB7;&#x8FD9;&#x4E00;&#x6CD5;&#x5B9D;&#xFF0C;&#x5065;&#x5EB7;&#x624D;&#x662F;&#x201C;&#x7A77;&#x4EBA;&#x201D;&#x7684;&#x6700;&#x65E0;&#x4EF7;&#x4E4B;&#x5B9D;&#x3002;</li>
</ol>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/151_11.jpeg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x4ECE; 2019 &#x5E74;&#x5F00;&#x59CB;&#xFF0C;&#x4E00;&#x76F4;&#x5230; 2020 &#x5E74; 12 &#x6708;&#xFF0C;&#x8FD9;&#x671F;&#x95F4;&#x5468;&#x56F4;&#x6709;&#x65E0;&#x6570;&#x7684;&#x670B;&#x53CB;&#x8DF3;&#x69FD;&#x6362;&#x5DE5;&#x4F5C;&#xFF0C;&#x56FD;&#x5185;&#x5916;&#x5927;&#x5382;&#xFF0C;&#x5927;&#x5927;&#x5C0F;&#x5C0F;&#x4EC0;&#x4E48;&#x516C;&#x53F8;&#x7684;&#x90FD;&#x6709;&#x3002;&#x6362;&#x4E86;&#x597D;&#x516C;&#x53F8;&#x4EE5;&#x540E;&#xFF0C;&#x670B;&#x53CB;&#x5C31;&#x4F1A;&#x5F00;&#x59CB;&#x5728;&#x670B;&#x53CB;&#x5708;&#x53D1;&#x65B0;&#x516C;&#x53F8;&#x7684;&#x62DB;&#x8058;&#xFF0C;&#x5BA3;&#x4F20;&#x5404;&#x79CD;&#x798F;&#x5229;&#xFF0C;&#x4E0B;&#x9762;&#x8BC4;&#x8BBA;&#x6E05;&#x4E00;&#x8272;&#x7684;&#x9178;&#x67E0;&#x6AAC;&#x1F34B;&#x3002;&#x4ED6;&#x4EEC;&#x4E5F;&#x4F1A;&#x79C1;&#x804A;&#x6211;&#x6216;&#x8005;&#x5728;&#x7FA4;&#x91CC; @ &#x6211;&#xFF0C;&#x95EE;&#x6211;&#x600E;&#x4E48;&#x8FD8;&#x4E0D;&#x6362;&#x5DE5;&#x4F5C;&#xFF0C;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x770B;&#x673A;&#x4F1A;&#x3002;&#x6211;&#x6BCF;&#x6B21;&#x90FD;&#x8C26;&#x865A;&#x7684;&#x56DE;&#x7B54;&#xFF0C;&#x201C;&#x6211;&#x6280;&#x672F;&#x8FD9;&#x4E48;&#x83DC;&#xFF0C;&#x9762;&#x4E0D;&#x4E0A;&#x8D35;&#x53F8;&#x554A;&#x201D;&#xFF0C;&#x201C;&#x6211;&#x8FD9;&#x4E48;&#x5783;&#x573E;&#xFF0C;&#x8D35;&#x53F8;&#x770B;&#x4E0D;&#x4E0A;&#x6211;&#x554A;~&#x201D;&#x3002;&#x5B9E;&#x9645;&#x4E0A;&#x6211;&#x53EA;&#x662F;&#x60F3;&#x63A9;&#x76D6;&#x4E00;&#x4E0B;&#x6211;&#x5C0F;&#x5C0F;&#x7684;&#x68A6;&#x60F3;&#x3002;&#x6709;&#x4E0D;&#x5C11;&#x730E;&#x5934;&#x627E;&#x6211;&#x8981;&#x6211;&#x770B;&#x673A;&#x4F1A;&#xFF0C;&#x5E74;&#x524D; 1 &#x6708;&#x8DF3;&#x69FD;&#x5B63;&#xFF0C;&#x5E74;&#x540E; 2&#xFF0C;3 &#x6708;&#x8DF3;&#x69FD;&#x5B63;&#xFF0C;&#x8D22;&#x5E74;&#x7ED3;&#x675F; 5 &#x6708;&#x8DF3;&#x69FD;&#x5B63;&#xFF0C;&#x79CB;&#x5B63; 9&#xFF0C;10 &#x6708;&#x8DF3;&#x69FD;&#x5B63;&#xFF0C;&#x5E74;&#x5E95; 11&#xFF0C;12 &#x6708;&#x8DF3;&#x69FD;&#x5B63;&#x3002;&#x4E00;&#x5E74;&#x4E0B;&#x6765;&#x53EA;&#x6709; 4&#xFF0C;7&#xFF0C;8 &#x8FD9;&#x4E09;&#x4E2A;&#x6708;&#x7535;&#x8BDD;&#x4F1A;&#x5C11;&#x4E00;&#x70B9;&#x3002;&#x6709;&#x730E;&#x5934;&#x5220;&#x6211;&#x597D;&#x53CB;&#x7684;&#xFF0C;&#x6709;&#x9A82;&#x6211;&#x50BB;&#x903C;&#x7684;&#xFF0C;&#x7EC4;&#x7EC7;&#x67B6;&#x6784;&#x8C03;&#x6574;&#x4E86;&#x8FD8;&#x4E0D;&#x79BB;&#x804C;&#x3002;&#x6709;&#x9A82;&#x6211;&#x6280;&#x672F;&#x5783;&#x573E;&#x7684;&#xFF0C;&#x4E24;&#x5E74; P6 &#x8FD9;&#x8F88;&#x5B50;&#x4F60;&#x6CA1;&#x6551;&#x4E86;&#x3002;&#x4F60;&#x4EEC;&#x8BF4;&#x7684;&#x6BCF;&#x4E00;&#x53E5;&#x8BDD;&#xFF0C;&#x6211;&#x90FD;&#x770B;&#x5728;&#x773C;&#x91CC;&#x7684;&#x3002;&#x6211;&#x4E5F;&#x5728;&#x5FC3;&#x91CC;&#x65E0;&#x6570;&#x6B21;&#x63D0;&#x9192;&#x81EA;&#x5DF1;&#xFF0C;&#x201C;&#x4F60;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x50BB;&#x903C;&#xFF0C;&#x4E3A;&#x4E86;&#x8FD9;&#x4E2A;&#x7559;&#x5B66;&#x7684;&#x76EE;&#x6807;&#x771F;&#x7684;&#x503C;&#x5F97;&#x4E48;&#xFF1F;&#x6267;&#x7740;&#x7684;&#x5927;&#x50BB;&#x903C;&#xFF01;&#x201D;&#x3002;&#x201C;&#x6211;&#x7684;&#x6280;&#x672F;&#x786E;&#x5B9E;&#x83DC;&#xFF0C;&#x524D;&#x7AEF;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x540E;&#x7AEF;&#x90FD;&#x53EA;&#x61C2;&#x76AE;&#x6BDB;&#xFF0C;&#x81F3;&#x4ECA;&#x5565;&#x90FD;&#x4E0D;&#x7CBE;&#x901A;&#x3002;&#x201D;</p>
<p>&#x522B;&#x4EBA;&#x5FAE;&#x4FE1;&#x91CC;&#x7684;&#x730E;&#x5934;&#x5E94;&#x8BE5;&#x90FD;&#x662F;&#x8FD9;&#x6837;&#x7684;&#x753B;&#x98CE;&#xFF1A;&#x201C;&#x4F60;&#x597D;&#x5389;&#x5BB3;&#x554A;&#xFF0C;&#x4F60;&#x7684;&#x6280;&#x672F;&#x5B9E;&#x529B;&#x80AF;&#x5B9A;&#x80FD;&#x9762;&#x4E0A;&#x963F;&#x91CC;&#x5DF4;&#x5DF4;&#x7684; P13/&#x767E;&#x5EA6; T11/&#x817E;&#x8BAF; 18 &#x7EA7;/&#x5B57;&#x8282; 5-3&#xFF0C;&#x6765;&#x8BD5;&#x8BD5;&#x5427;&#xFF0C;&#x6211;&#x5DF2;&#x7ECF;&#x5E2E;&#x4F60;&#x6295;&#x7B80;&#x5386;&#x4E86;&#x201D;&#xFF0C;&#x800C;&#x6211;&#x5FAE;&#x4FE1;&#x91CC;&#x7684;&#x730E;&#x5934;&#x7684;&#x753B;&#x98CE;&#x622A;&#x7136;&#x76F8;&#x53CD;&#xFF1A;&#x201C;&#x5927;&#x50BB;&#x903C;&#xFF0C;&#x8FD8;&#x4E0D;&#x8DF3;&#x69FD;&#xFF0C;&#x4F60;&#x4ECA;&#x5E74;&#x518D;&#x4E0D;&#x8DF3;&#x69FD;&#xFF0C;&#x8FD9;&#x8F88;&#x5B50;&#x4F60;&#x5C31;&#x5E9F;&#x4E86;&#xFF01;&#xFF01;&#x4F60;&#x5DF2;&#x7ECF;&#x5E9F;&#x4E86;~&#x201D;(&#x4E00;&#x70B9;&#x90FD;&#x6CA1;&#x5938;&#x5F20;&#xFF0C;&#x4F60;&#x4EEC;&#x522B;&#x8BF4;&#x4E0D;&#x53EF;&#x80FD;&#xFF0C;&#x53EA;&#x662F;&#x4F60;&#x4EEC;&#x6CA1;&#x9047;&#x5230;)&#xFF0C;&#x7136;&#x540E;&#x6211;&#x8F6C;&#x8EAB;&#x60F3;&#x89E3;&#x91CA;&#xFF0C;&#x4ED6;&#x5DF2;&#x7ECF;&#x628A;&#x6211;&#x5220;&#x4E86;&#x3002; &#x6211;&#x4EEC;&#x4E92;&#x4E0D;&#x76F8;&#x8BC6;&#xFF0C;&#x4E00;&#x4E0A;&#x6765;&#x6CA1;&#x804A;&#x51E0;&#x53E5;&#xFF0C;&#x6211;&#x7684;&#x4EBA;&#x751F;&#x600E;&#x4E48;&#x5C31;&#x5E9F;&#x4E86;&#xFF1F;&#xFF1F;&#xFF1F;&#x6211;&#x4E00;&#x76F4;&#x5728;&#x5FC3;&#x91CC;&#x9ED8;&#x9ED8;&#x7CBE;&#x5FC3;&#x89C4;&#x5212;&#x7740;&#x6211;&#x7684;&#x672A;&#x6765;&#xFF0C;5 &#x5E74;&#x89C4;&#x5212;&#xFF0C;10 &#x5E74;&#x89C4;&#x5212;&#xFF0C;&#x5C31;&#x56E0;&#x4E3A;&#x4E0D;&#x8DF3;&#x69FD;&#xFF0C;&#x5C31;&#x5E9F;&#x5566;&#xFF1F;&#xFF1F;&#xFF1F;&#x4E5F;&#x6709;&#x201C;&#x597D;&#x5FC3;&#x201D;&#x730E;&#x5934;&#x5E2E;&#x6211;&#x89C4;&#x5212;&#x7684;&#xFF0C;&#x201C;&#x4ECA;&#x5E74;&#x54B1;&#x4EEC;&#x8DF3;&#x5230;&#x5B57;&#x8282;&#xFF0C;&#x660E;&#x5E74;&#x54B1;&#x4EEC;&#x518D;&#x8DF3;&#x4E00;&#x4E0B;&#x817E;&#x8BAF;&#xFF0C;&#x540E;&#x5E74;&#x54B1;&#x4EEC;&#x518D;&#x8DF3;&#x4E00;&#x4E0B;&#x767E;&#x5EA6;&#xFF0C;&#x53EA;&#x9700;3 &#x5E74;&#xFF0C;&#x4F60;&#x7684;&#x804C;&#x4E1A;&#x5C31;&#x5230;&#x8FBE;&#x4E00;&#x5B9A;&#x9AD8;&#x5EA6;&#x4E86;&#xFF01;&#x201D;&#x3002;&#x8FD9;&#x4E2A;&#x89C4;&#x5212;&#x548C;&#x6211;&#x5185;&#x5FC3;&#x7684;&#x89C4;&#x5212;&#x6709;&#x5DEE;&#x8DDD;&#xFF0C;&#x6211;&#x8BF4;&#x201C;&#x6211;&#x6709;&#x6211;&#x81EA;&#x5DF1;&#x7684;&#x89C4;&#x5212;&#xFF0C;&#x4ECA;&#x5E74;&#x6682;&#x65F6;&#x4E0D;&#x8DF3;&#x69FD;&#x201D;&#xFF0C;&#x730E;&#x5934;&#x5C31;&#x4F1A;&#x95EE;&#xFF0C;&#x201C;&#x4F60;&#x7684;&#x89C4;&#x5212;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x201D;&#xFF0C;&#x6211;&#x8BF4;&#x4FDD;&#x5BC6;&#x3002;&#x730E;&#x5934;&#x5C31;&#x70B8;&#x4E86;&#xFF0C;&#x4E00;&#x987F;&#x72C2;&#x55B7;&#x6211;&#x865A;&#x4F2A;&#xFF0C;&#x201C;&#x6280;&#x672F;&#x592A;&#x5783;&#x573E;&#x8DF3;&#x4E0D;&#x52A8;&#x4E5F;&#x5C31;&#x7B97;&#x4E86;&#xFF0C;&#x504F;&#x504F;&#x627E;&#x4E2A;&#x7406;&#x7531;&#x8BF4;&#x4E0D;&#x8DF3;&#x69FD;&#xFF0C;&#x6211;&#x5BF9;&#x4F60;&#x8FD9;&#x4E48;&#x771F;&#x8BDA;&#xFF0C;&#x4F60;&#x8FD9;&#x4E2A;&#x4EBA;&#x600E;&#x4E48;&#x8FD9;&#x4E48;&#x865A;&#x4F2A;&#xFF1F;&#xFF1F;&#x4F60;&#x4EBA;&#x54C1;&#x6709;&#x95EE;&#x9898;&#x554A;&#xFF0C;&#x5783;&#x573E;~&#x201D;&#xFF0C;&#x6211;&#x5185;&#x5FC3;&#x4E00;&#x987F;&#x59D4;&#x5C48;&#x3002;&#x600E;&#x4E48;&#x8FD8;&#x9A82;&#x4EBA;&#x4E86;&#xFF1F;10 &#x5206;&#x949F;&#x4EE5;&#x540E;&#x5E73;&#x590D;&#x7684;&#x60C5;&#x7EEA;&#x4EE5;&#x540E;&#xFF0C;&#x60F3;&#x7ED9;&#x4ED6;&#x89E3;&#x91CA;&#x89E3;&#x91CA;&#x539F;&#x56E0;&#xFF0C;&#x5BF9;&#x65B9;&#x5DF2;&#x7ECF;&#x628A;&#x6211;&#x5220;&#x9664;&#x4E86;&#x3002;2020 &#x5E74;&#x6211;&#x5DF2;&#x7ECF;&#x88AB;&#x597D;&#x591A;&#x201C;&#x813E;&#x6C14;&#x6709;&#x70B9;&#x66B4;&#x8E81;&#x201D;&#x7684;&#x730E;&#x5934;&#x5220;&#x597D;&#x53CB;&#x4E86;&#xFF0C;&#x6211;&#x4E5F;&#x88AB;&#x4ED6;&#x4EEC;&#x83AB;&#x540D;&#x7684;&#x8D34;&#x4E0A;&#x4E86;&#x5404;&#x79CD;&#x6807;&#x7B7E;&#xFF0C;&#x201C;&#x50BB;&#x903C;&#x201D;&#xFF0C;&#x201C;&#x6CA1;&#x667A;&#x5546;&#x201D;&#xFF0C;&#x201C;&#x4EBA;&#x54C1;&#x5DEE;&#x201D;&#xFF0C;&#x201C;&#x865A;&#x4F2A;&#x201D;&#xFF0C;&#x201C;&#x6CA1;&#x89C4;&#x5212;&#x201D;&#xFF0C;&#x201C;&#x6280;&#x672F;&#x5783;&#x573E;&#x201D;&#xFF0C;&#x201C;&#x8FD9;&#x4EBA;&#x5E9F;&#x4E86;&#x201D;&#x2026;&#x2026;&#x770B;&#x7740;&#x4ED6;&#x4EEC;&#x8BF4;&#x7684;&#x8FD9;&#x4E9B;&#x8BDD;&#xFF0C;&#x6211;&#x771F;&#x7684;&#x975E;&#x5E38;&#x7A9D;&#x706B;&#xFF0C;&#x4ED6;&#x4EEC;&#x8BF4;&#x7684;&#x6CA1;&#x4E00;&#x53E5;&#x662F;&#x6B63;&#x786E;&#x7684;&#x3002;&#x7531;&#x4E8E;&#x5DF2;&#x7ECF;&#x88AB;&#x5220;&#x597D;&#x53CB;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4E5F;&#x6CA1;&#x6709;&#x89E3;&#x91CA;&#x7684;&#x6743;&#x5229;&#x548C;&#x673A;&#x4F1A;&#x4E86;&#x3002;&#x8FD9;&#x4E00;&#x6B21;&#x6B21;&#x7684;&#x88AB;&#x4EBA;&#x9A82;&#xFF0C;&#x90FD;&#x5728;&#x6211;&#x5FC3;&#x91CC;&#x9ED8;&#x9ED8;&#x6253;&#x6C14;&#xFF0C;&#x201C;&#x6211;&#x8981;&#x597D;&#x597D;&#x594B;&#x6597;&#xFF01;&#x4ECA;&#x5929;&#x6211;&#x662F;&#x4F60;&#x4EEC;&#x773C;&#x91CC;&#x7684;&#x5927;&#x50BB;&#x903C;&#xFF0C;&#x81ED;&#x5783;&#x573E;&#xFF0C;&#x88AB;&#x4F60;&#x4EEC;&#x553E;&#x5F03;&#x77A7;&#x4E0D;&#x8D77;&#x3002;&#x660E;&#x5929;&#x6211;&#x8981;&#x6210;&#x4E3A;&#x5176;&#x4ED6;&#x730E;&#x5934;&#x773C;&#x91CC;&#x7684;&#x9999;&#x997D;&#x997D;&#xFF0C;&#x6696;&#x5B9D;&#x5B9D;&#xFF0C;&#x8BA9;&#x4F60;&#x4EEC;&#x540E;&#x6094;&#x6765;&#x4E0D;&#x53CA;&#x201D;&#x3002;&#x5C31;&#x8FD9;&#x6837;&#xFF0C;&#x4E00;&#x53E3;&#x6C14;&#xFF0C;&#x652F;&#x6491;&#x4E86;&#x6211;&#x4E00;&#x6574;&#x5E74;&#x3002;</p>
<p>&#x4E00;&#x5F00;&#x59CB;&#x6211;&#x548C;&#x4E00;&#x4E9B;&#x8EAB;&#x8FB9;&#x7684;&#x670B;&#x53CB;&#x8BF4;&#x8FC7;&#x6211;&#x5728;&#x5B66;&#x82F1;&#x8BED;&#x3002;&#x6162;&#x6162;&#x7684;&#x4ED6;&#x4EEC;&#x4E5F;&#x5FD8;&#x8BB0;&#x4E86;&#x3002;&#x7ECF;&#x5E38;&#x4F1A;&#x6709;&#x4EBA;&#x95EE;&#x6211;&#xFF0C;&#x201C;&#x535A;&#x5BA2;&#x600E;&#x4E48;&#x4E0D;&#x66F4;&#x65B0;&#x4E86;&#xFF1F;&#x201D;&#x201C;&#x6700;&#x8FD1;&#x5728;&#x5FD9;&#x4EC0;&#x4E48;&#xFF1F;&#x201D;&#x3002;&#x6211;&#x5982;&#x679C;&#x5982;&#x5B9E;&#x56DE;&#x7B54;&#xFF0C;&#x7B54;&#x6848;&#x5C31;&#x662F;&#x201C;&#x6700;&#x8FD1;&#x5728;&#x7814;&#x7A76;&#x5929;&#x6587;&#x5B66;&#x548C;&#x5730;&#x7406;&#x201D;&#xFF0C;&#x201C;&#x6700;&#x8FD1;&#x5FD9;&#x7740;&#x5907;&#x8003;&#x6258;&#x798F;&#x201D;&#x3002;&#x4E00;&#x4E9B;&#x4EBA;&#x53C8;&#x4F1A;&#x5F00;&#x59CB;&#x95EE;&#x4E86;&#xFF0C;&#x201C;&#x5B66;&#x5929;&#x6587;&#x548C;&#x5730;&#x7406;&#x5E72;&#x561B;&#xFF1F;&#x201D;&#xFF0C;&#x201C;&#x4F60;&#x8003;&#x6258;&#x798F;&#x5E72;&#x561B;&#xFF1F;&#x8981;&#x51FA;&#x56FD;&#xFF1F;&#x8981;&#x7559;&#x5B66;&#xFF1F;&#x201D;&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x6211;&#x518D;&#x56DE;&#x7B54;&#x4EC0;&#x4E48;&#xFF0C;&#x90FD;&#x4F1A;&#x5BFC;&#x81F4;&#x540E;&#x9762;&#x7684;&#x5BF9;&#x8BDD;&#x5F02;&#x5E38;&#x5C34;&#x5C2C;&#x3002;&#x540C;&#x4E8B;&#x5982;&#x679C;&#x77E5;&#x9053;&#x4E86;&#xFF0C;&#x4F1A;&#x5077;&#x5077;&#x79C1;&#x4E0B;&#x4F20;&#x64AD;&#xFF0C;&#x201C;&#x971C;&#x795E;&#x8981;&#x51C6;&#x5907;&#x51FA;&#x56FD;&#x4E86;&#xFF0C;&#x4ED6;&#x80AF;&#x5B9A;&#x8981;&#x79BB;&#x804C;&#x4E86;&#xFF0C;&#x8FD9;&#x4E2A;&#x5B63;&#x5EA6;&#x7684; C &#x5C31;&#x7ED9;&#x4ED6;&#x5427;&#xFF0C;&#x53CD;&#x6B63;&#x4ED6;&#x8981;&#x6EDA;&#x86CB;&#x4E86;&#x3002;&#x201D;&#x3002;&#x5982;&#x679C; leader &#x77E5;&#x9053;&#x4E86;&#xFF0C;oneone &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F30;&#x8BA1;&#x5927;&#x6982;&#x7387;&#x8981;&#x6211;&#x80CC; 3.25 &#x3002;&#x730E;&#x5934;&#x77E5;&#x9053;&#x4E86;&#xFF0C;&#x5E94;&#x8BE5;&#x4E5F;&#x4E0D;&#x4F1A;&#x518D;&#x5E2E;&#x6211;&#x63A8;&#x8350;&#x597D;&#x673A;&#x4F1A;&#x4E86;&#x3002;&#x521A;&#x5F00;&#x59CB;&#x51C6;&#x5907;&#x6258;&#x798F;&#x7684;&#x524D;&#x51E0;&#x5468;&#xFF0C;&#x6211;&#x6068;&#x4E0D;&#x5F97;&#x8BA9;&#x7FA4;&#x53CB;&#x90FD;&#x77E5;&#x9053;&#x6211;&#x53BB;&#x5B66;&#x82F1;&#x8BED;&#x4E86;&#xFF0C;&#x6B22;&#x8FCE;&#x4E00;&#x8D77;&#x4EA4;&#x6D41;&#x3002;&#x4F46;&#x662F;&#x6211;&#x60F3;&#x901A;&#x8BF4;&#x51FA;&#x53BB;&#x7684;&#x540E;&#x679C;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x5C31;&#x95ED;&#x5634;&#x4E86;&#x3002;&#x4ECE;&#x90A3;&#x4EE5;&#x540E;&#xFF0C;&#x670B;&#x53CB;&#xFF0C;&#x540C;&#x4E8B;&#xFF0C;&#x730E;&#x5934;&#x95EE;&#x6211;&#xFF0C;&#x201C;&#x6700;&#x8FD1;&#x5FD9;&#x5565;&#x201D;&#xFF0C;&#x201C;&#x540E;&#x9762;&#x804C;&#x4E1A;&#x89C4;&#x5212;&#x662F;&#x5565;&#x201D;&#xFF0C;&#x201C;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x8DF3;&#x69FD;&#x201D;&#xFF0C;&#x7C7B;&#x4F3C;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x6211;&#x90FD;&#x6253;&#x9A6C;&#x864E;&#x773C;&#xFF0C;&#x201C;&#x554A;&#xFF1F;&#x54C8;&#x3002;&#x5440;&#xFF1F;&#x54E6;&#x3002;&#x3002;&#x54C8;&#x54C8;&#x54C8;&#x3002;&#x3002;&#x201D;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x53EF;&#x80FD;&#x6709;&#x8BFB;&#x8005;&#x95EE;&#x4E86;&#x3002;&#x4F60;&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x7792;&#x7740;&#x5168;&#x4E16;&#x754C;&#xFF1F;&#x4F60;&#x8BF4;&#x51FA;&#x81EA;&#x5DF1;&#x7684;&#x7559;&#x5B66;&#x89C4;&#x5212;&#x4E5F;&#x4E0D;&#x662F;&#x4E22;&#x4EBA;&#x7684;&#x4E8B;&#x60C5;&#x554A;&#x3002;&#x90A3;&#x6211;&#x53CD;&#x95EE;&#x4E00;&#x53E5;&#xFF0C;&#x4F60;&#x8DF3;&#x69FD;&#x524D;&#x4F1A;&#x8BA9;&#x540C;&#x4E8B;&#x548C; leader &#x77E5;&#x9053;&#x4E48;&#xFF1F;&#x80AF;&#x5B9A;&#x4E0D;&#x4F1A;&#x554A;&#xFF0C;&#x4ED6;&#x4EEC;&#x548C;&#x4F60;&#x5229;&#x76CA;&#x76F8;&#x5173;&#xFF0C;&#x5F88;&#x6709;&#x53EF;&#x80FD;&#x4F60; offer &#x6CA1;&#x62FF;&#x5230;&#xFF0C;&#x4ED6;&#x4EEC;&#x5C31;&#x77E5;&#x9053;&#x4E86;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x5728;&#x4F60;&#x8FD8;&#x6CA1;&#x6709;&#x627E;&#x5230;&#x4E0B;&#x5BB6;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x628A;&#x4F60;&#x5F00;&#x9664;&#x4E86;&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x4F60;&#x53EA;&#x80FD;&#x6B32;&#x54ED;&#x65E0;&#x6CEA;&#x4E86;&#x3002;&#x5728;&#x56FD;&#x5185;&#xFF0C;&#x4E0A;&#x73ED;&#x770B;&#x5F00;&#x6E90;&#x5E93;&#x7684;&#x6E90;&#x7801;&#x5B9E;&#x73B0;&#x90FD;&#x4F1A;&#x88AB;&#x4EBA;&#x6000;&#x7591;&#x8981;&#x8DF3;&#x69FD;&#xFF0C;&#x4ED4;&#x7EC6;&#x8BE2;&#x95EE;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x5C31;&#x4F1A;&#x6709;&#x4EBA;&#x6000;&#x7591;&#x4F60;&#x8981;&#x8DD1;&#x8DEF;&#x3002;&#x66F4;&#x4F55;&#x51B5;&#x4F60;&#x5728;&#x516C;&#x53F8;&#x770B;&#x6280;&#x672F;&#x4E66;&#xFF0C;&#x770B;&#x6280;&#x672F;&#x535A;&#x5BA2;&#xFF0C;&#x5B66;&#x4E60;&#xFF0C;&#x90A3;&#x80AF;&#x5B9A;&#x662F;&#x8DF3;&#x69FD;&#x5B9E;&#x9524;&#x4E86;&#x3002;&#x4E3A;&#x4EC0;&#x4E48;&#x81EA;&#x5DF1;&#x7684;&#x8BA1;&#x5212;&#x548C;&#x6253;&#x7B97;&#x8981;&#x548C;&#x6000;&#x7591;&#x4F60;&#x7684;&#x540C;&#x4E8B;&#x4E00;&#x4E00;&#x8FF0;&#x8BF4;&#x5462;&#xFF1F;&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x7ED9;&#x81EA;&#x5DF1;&#x5F92;&#x589E;&#x70E6;&#x607C;&#xFF1F;&#x7559;&#x5B66;&#x548C;&#x8DF3;&#x69FD;&#x7C7B;&#x4F3C;&#xFF0C;&#x5E76;&#x4E14;&#x8FD8;&#x9700;&#x8981;&#x518D;&#x7792;&#x4F4F;&#x670B;&#x53CB;&#x548C;&#x730E;&#x5934;&#xFF0C;&#x56E0;&#x4E3A;&#x4F60;&#x6709;&#x53EF;&#x80FD;&#x8FD8;&#x9700;&#x8981;&#x4ED6;&#x4EEC;&#x5E2E;&#x4F60;&#x5185;&#x63A8;&#x3002;&#x5982;&#x679C;&#x4F60;&#x90FD;&#x4EA4;&#x4EE3;&#x4E86;&#xFF0C;&#x4ED6;&#x4EEC;&#x53EF;&#x80FD;&#x5C31;&#x4E0D;&#x5E2E;&#x4F60;&#x5185;&#x63A8;&#x4E86;&#x3002;&#x53EF;&#x80FD;&#x53C8;&#x4F1A;&#x6709;&#x8BFB;&#x8005;&#x95EE;&#xFF0C;&#x4F60;&#x90FD;&#x8981;&#x7559;&#x5B66;&#x4E86;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD8;&#x5728;&#x610F;&#x627E;&#x5DE5;&#x4F5C;&#x5185;&#x63A8;&#x7684;&#x4E8B;&#x60C5;&#xFF1F;&#x8FD9;&#x5C31;&#x548C;&#x4F60;&#x4EEC;&#x4E0D;&#x4E86;&#x89E3;&#x8003;&#x7814;&#x548C;&#x7559;&#x5B66;&#x6709;&#x5173;&#xFF0C;&#x65E2;&#x7136;&#x8BF4;&#x5230;&#x8FD9;&#x91CC;&#xFF0C;&#x90A3;&#x6211;&#x5C31;&#x4E00;&#x53E3;&#x6C14;&#x8BF4;&#x900F;&#x5427;&#x3002;&#x4E0D;&#x7BA1;&#x662F;&#x8003;&#x7814;&#x8FD8;&#x662F;&#x7559;&#x5B66;&#xFF0C;&#x77E5;&#x9053;&#x6700;&#x7EC8;&#x662F;&#x5426;&#x88AB;&#x5F55;&#x53D6;&#x7684;&#x65F6;&#x95F4;&#x90FD;&#x662F;&#x5728;&#x7B2C;&#x4E8C;&#x5E74;&#x7684;&#x6625;&#x5929;&#xFF0C;&#x8003;&#x7814;&#x590D;&#x8BD5;&#x516C;&#x5E03;&#x6700;&#x7EC8;&#x5F55;&#x53D6;&#x540D;&#x5355;&#x7684;&#x65F6;&#x95F4;&#x662F; 4 &#x6708;&#xFF0C;&#x7559;&#x5B66;&#x53D1;&#x653E; offer &#x7684;&#x65F6;&#x95F4;&#x662F; 2-4 &#x6708;&#x3002;&#x8003;&#x7814;&#x662F;&#x6BCF;&#x5E74;&#x7684; 12 &#x6708;&#xFF0C;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x7684; deadline &#x4E00;&#x822C;&#x90FD;&#x5728; 12-1 &#x6708;&#xFF0C;&#x8003;&#x7814;&#x8003;&#x5B8C;&#x8BD5;&#xFF0C;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x5B8C;&#xFF0C;&#x5230;&#x77E5;&#x9053;&#x6700;&#x7EC8;&#x662F;&#x5426;&#x88AB;&#x5F55;&#x53D6;&#x4E4B;&#x95F4;&#x7684;&#x8FD9;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x4F60;&#x662F;&#x4E0D;&#x662F;&#x8FD8;&#x8981;&#x7EE7;&#x7EED;&#x5DE5;&#x4F5C;&#xFF1F;&#x4F60;&#x4E0D;&#x7528;&#x5DE5;&#x4F5C;&#xFF0C;&#x5C31;&#x5728;&#x5BB6;&#x91CC;&#x73A9;&#xFF0C;&#x5543;&#x8001;&#xFF1F;&#x90A3;&#x4F60;&#x662F;&#x6709;&#x94B1;&#x4EBA;&#x5BB6;&#x7684;&#x5B69;&#x5B50;&#x3002;&#x6211;&#x662F;&#x7A77;&#x4EBA;&#x5BB6;&#x7684;&#x5B69;&#x5B50;&#xFF0C;&#x6BCF;&#x4E2A;&#x6708;&#x8FD8;&#x6709;&#x623F;&#x8D37;&#xFF0C;&#x4FE1;&#x7528;&#x5361;&#xFF0C;&#x82B1;&#x5457;&#x5404;&#x79CD;&#x8D26;&#x5355;&#x7B49;&#x6211;&#x53BB;&#x8FD8;&#x6B3E;&#x3002;&#x8003;&#x7814; 12 &#x6708;&#x8003;&#x5B8C;&#xFF0C;&#x7B2C;&#x4E8C;&#x5E74; 1 &#x6708;&#x5230; 9 &#x6708;&#x5165;&#x5B66;&#x524D;&#xFF0C;&#x8FD9;&#x6709; 8 &#x4E2A;&#x6708;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x80AF;&#x5B9A;&#x8981;&#x7EE7;&#x7EED;&#x5DE5;&#x4F5C;&#x8D5A;&#x94B1;&#x554A;&#x3002;&#x7559;&#x5B66;&#x7533;&#x8BF7; 1 &#x6708;&#x7ED3;&#x675F;&#xFF0C;&#x5230; 8 &#x6708;&#x5165;&#x5B66;&#xFF0C;&#x4E2D;&#x95F4;&#x4E5F;&#x6709; 7 &#x4E2A;&#x6708;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x4E5F;&#x8981;&#x7EE7;&#x7EED;&#x52AA;&#x529B;&#x5DE5;&#x4F5C;&#x8D5A;&#x94B1;&#x3002;<strong>&#x800C;&#x4E14;&#x4F60;&#x4E5F;&#x4E0D;&#x77E5;&#x9053;&#x4F60;&#x80FD;&#x4E0D;&#x80FD;&#x7533;&#x8BF7;&#x5230;&#x5982;&#x610F;&#x7684;&#x5B66;&#x6821;&#x3002;&#x4E07;&#x4E00;&#x6CA1;&#x4EBA;&#x8981;&#x4F60;&#x5462;&#xFF1F;&#x4F60;&#x8FD8;&#x662F;&#x8981;&#x7EE7;&#x7EED;&#x5DE5;&#x4F5C;&#x8D5A;&#x94B1;</strong>&#x3002;&#x6709;&#x4EBA;&#x8BF4; 7 &#x4E2A;&#x6708;&#x4E5F;&#x8981;&#x8D5A;&#x94B1;&#xFF1F;&#x8FD9; 7 &#x4E2A;&#x6708;&#x53EF;&#x4EE5;&#x8D5A;&#x5C0F; 50W &#x554A;&#xFF0C;&#x53EF;&#x4EE5;&#x62B5;&#x6389;&#x7559;&#x5B66;&#x7B2C;&#x4E00;&#x5E74;&#x7684;&#x5B66;&#x8D39;&#xFF0C;&#x4E0D;&#x9999;&#x4E48;&#xFF1F;50W &#x8BF4;&#x4E0D;&#x8981;&#x5C31;&#x4E0D;&#x8981;&#x4E86;&#xFF1F;&#x5982;&#x679C;&#x4F60;&#x8BF4;&#x51FA;&#x4F60;&#x7684;&#x7559;&#x5B66;&#x610F;&#x613F;&#x4EE5;&#x540E;&#xFF0C;&#x540C;&#x4E8B;&#xFF0C;leader&#xFF0C;&#x670B;&#x53CB;&#xFF0C;&#x730E;&#x5934;&#x5168;&#x90E8;&#x90FD;&#x77E5;&#x9053;&#x4E86;&#xFF0C;&#x8BD5;&#x60F3;&#x4F60;&#x8BE5;&#x5982;&#x4F55;&#x7EE7;&#x7EED;&#x627E;&#x5DE5;&#x4F5C;&#xFF1F;&#x6211;&#x7684;&#x670B;&#x53CB;&#x5708;&#x6709;&#x4E00;&#x70B9;&#x5E7F;&#xFF0C;&#x5C31;&#x7B97;&#x4E0B;&#x4E00;&#x5BB6;&#x7684; HR &#x4E0D;&#x77E5;&#x9053;&#xFF0C; &#x4F46;&#x662F;&#x80FD;&#x7792;&#x5F97;&#x8FC7;&#x51E0;&#x5929;&#x5462;&#xFF1F;&#x4E1A;&#x754C;&#x4E00;&#x4F20;&#x64AD;&#xFF0C;&#x51E0;&#x5929;&#x4EE5;&#x540E;&#x5168;&#x4E16;&#x754C;&#x5C31;&#x90FD;&#x77E5;&#x9053;&#x4E86;&#xFF0C;HR &#x77E5;&#x9053;&#x4E86;&#x4F1A;&#x600E;&#x4E48;&#x60F3;&#xFF1F;&#x201C;&#x90FD;&#x8981;&#x7559;&#x5B66;&#x4E86;&#xFF0C;&#x8FD8;&#x6765;&#x6211;&#x8FD9;&#x91CC;&#x8E6D;&#xFF1F;&#x8BD5;&#x7528;&#x671F;&#x5C31;&#x5F00;&#x9664;&#x4ED6;&#x201D;&#x3002;&#x522B;&#x7B11;&#xFF0C;&#x4EBA;&#x5FC3;&#x9694;&#x628A;&#x5200;&#xFF0C;&#x6211;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x522B;&#x4EBA;&#x4E0D;&#x8FD9;&#x4E48;&#x60F3;&#x3002;&#x4F46;&#x662F;&#x6211;&#x80FD;&#x4FDD;&#x8BC1;&#x6211;&#x4E0D;&#x8BF4;&#x3002;&#x6211;&#x53EA;&#x8981;&#x4E0D;&#x8BF4;&#xFF0C;&#x5C31;&#x80FD;&#x675C;&#x7EDD;&#x6240;&#x6709;&#x53EF;&#x80FD;&#x53D1;&#x751F;&#x7684;&#x574F;&#x60C5;&#x51B5;&#x3002;&#x6240;&#x4EE5;&#x8FD9;&#x4E5F;&#x5C31;&#x662F;&#x4E3A;&#x4EC0;&#x4E48; 2021 &#x5E74;&#x4E86;&#xFF0C;&#x4F60;&#x624D;&#x770B;&#x5230;&#x6211;&#x7684; 2019 &#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x3002;2019 &#x5E74;&#x6211;&#x5F00;&#x59CB;&#x51C6;&#x5907;&#x6258;&#x798F;&#xFF0C;&#x7533;&#x8BF7;&#x7559;&#x5B66;&#x9636;&#x6BB5;&#x662F;&#x5728; 2020 &#x5E74;&#x51AC;&#x5B63;&#x3002;&#x6211;&#x63D0;&#x524D;&#x628A; 2019 &#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x53D1;&#x5E03;&#x51FA;&#x6765;&#xFF0C;&#x5927;&#x5BB6;&#x4E00;&#x770B;&#x6211;&#x5728;&#x51C6;&#x5907;&#x6258;&#x798F;&#x8003;&#x8BD5;&#xFF0C;&#x5168;&#x5929;&#x4E0B;&#x4EBA;&#x90FD;&#x4F1A;&#x6000;&#x7591;&#x6211;&#x8981;&#x51FA;&#x56FD;&#x4E86;&#xFF0C;&#x6211;&#x6709;&#x53E3;&#x4E5F;&#x72E1;&#x8FA9;&#x4E0D;&#x6E05;&#x4E86;&#x3002;&#x5728;&#x62FF;&#x5230;&#x6700;&#x7EC8; offer &#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x80AF;&#x5B9A;&#x4EC0;&#x4E48;&#x90FD;&#x4E0D;&#x80FD;&#x8BF4;&#xFF0C;&#x800C;&#x4E14;&#x4E2D;&#x7F8E;&#x5173;&#x7CFB;&#x6076;&#x5316;&#xFF0C;&#x6211;&#x5C31;&#x7B97;&#x62FF;&#x5230;&#x4E86;&#x7F8E;&#x56FD;&#x5927;&#x5B66;&#x7684; offer&#xFF0C;&#x7F8E;&#x7B7E;&#x80FD;&#x4E0D;&#x80FD;&#x987A;&#x5229;&#x4E0B;&#x7B7E;&#x4E5F;&#x662F;&#x4E00;&#x4E2A;&#x5934;&#x75BC;&#x7684;&#x65F6;&#x5019;&#x3002;&#x6211;&#x5F53;&#x65F6;&#x5C31;&#x4E0B;&#x5B9A;&#x51B3;&#x5FC3;&#xFF0C;&#x7B49;&#x6211;&#x8E0F;&#x4E0A;&#x7F8E;&#x56FD;&#x56FD;&#x571F;&#x7684;&#x90A3;&#x4E00;&#x523B;&#xFF0C;&#x6211;&#x518D;&#x5411;&#x5927;&#x5BB6;&#x516C;&#x5E03;&#x8FD9;&#x4E00;&#x5207;&#xFF0C;2019 &#x5E74;&#x548C; 2020 &#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x90FD;&#x53D1;&#x5E03;&#x51FA;&#x6765;&#x3002;<strong>&#x4EE5;&#x4E0A;&#x5C31;&#x662F;&#x6211;&#x9690;&#x8EAB; 2 &#x5E74;&#x7684;&#x539F;&#x56E0;&#x3002;&#x6211;&#x5BF9;&#x6211;&#x4FDD;&#x5B88;&#x7684;&#x7ED3;&#x679C;&#x975E;&#x5E38;&#x6EE1;&#x610F;&#x3002;&#x6211;&#x7684;&#x6240;&#x6709;&#x76EE;&#x6807;&#x57FA;&#x672C;&#x5B8C;&#x6210;&#xFF0C;&#x65E0;&#x4EBA;&#x5E72;&#x6270;&#x3002;</strong></p>
<p>&#x53E6;&#x5916;&#xFF0C;&#x6211;&#x4E2A;&#x4EBA;&#x662F;&#x4FDD;&#x5B88;&#x6027;&#x683C;&#xFF0C;&#x5728;&#x7ED3;&#x679C;&#x672A; 100% &#x786E;&#x5B9A;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x90FD;&#x4E0D;&#x60F3;&#x900F;&#x9732;&#x8FC7;&#x7A0B;&#x3002;&#x5982;&#x679C;&#x660E;&#x5E74; (2021 &#x5E74;) 1 &#x6708;&#x5728;&#x6211;&#x6295;&#x9012;&#x5B8C;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x5C31;&#x5F00;&#x59CB;&#x627E;&#x65B0;&#x5DE5;&#x4F5C;&#x4E86;&#x3002;&#x5230; 4 &#x6708;&#x51FA;&#x7ED3;&#x679C;&#x671F;&#x95F4;&#xFF0C;&#x6211;&#x4E00;&#x76F4;&#x4F1A;&#x52AA;&#x529B;&#x5DE5;&#x4F5C;&#xFF0C;&#x5F53;&#x505A;&#x4EC0;&#x4E48;&#x90FD;&#x6CA1;&#x53D1;&#x751F;&#x3002;&#x5982;&#x679C; 4 &#x6708;&#x62FF;&#x5230;&#x597D;&#x7ED3;&#x679C;&#xFF0C;&#x90A3;&#x5C31; 6 &#x6708;&#x4EFD;&#x63D0;&#x79BB;&#x804C;&#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x62FF;&#x5230;&#x597D;&#x7ED3;&#x679C;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x7EE7;&#x7EED;&#x518D;&#x5E72;&#x7740;&#x3002;&#x8BD5;&#x60F3;&#xFF0C;&#x5728;&#x4F60;&#x51C6;&#x5907;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#x5C31;&#x5168;&#x5929;&#x4E0B;&#x7684;&#x5BA3;&#x4F20;&#xFF0C;&#x201C;&#x8001;&#x5B50;&#x8981;&#x51FA;&#x56FD;&#x7559;&#x5B66;&#x4E86;&#xFF01;&#x201D;&#xFF0C;&#x7136;&#x540E;&#x7B49;&#x5230;&#x4F60;&#x7533;&#x8BF7;&#x7ED3;&#x675F;&#xFF0C;&#x4EC0;&#x4E48; offer &#x4E5F;&#x6CA1;&#x6709;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x662F;&#x591A;&#x4E48;&#x7684;&#x5C34;&#x5C2C;&#xFF1F;<strong>&#x5634;&#x5DF4;&#x4E0A;&#x5929;&#x5929;&#x558A;&#x7740;&#x5F88;&#x9AD8;&#x8C03;&#x7684;&#x4EBA;&#x5927;&#x591A;&#x6570;&#x90FD;&#x6CA1;&#x6210;&#x529F;&#xFF0C;&#x6C89;&#x9ED8;&#x4E0D;&#x8BED;&#x4F4E;&#x5934;&#x505A;&#x4E8B;&#x7684;&#x4EBA;&#x5927;&#x591A;&#x6570;&#x90FD;&#x6210;&#x529F;&#x4E86;</strong>&#x3002;<strong>&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x6781;&#x5EA6;&#x770B;&#x91CD;&#x7ED3;&#x679C;&#x7684;&#x793E;&#x4F1A;&#xFF0C;&#x6CA1;&#x6709;&#x4F18;&#x79C0;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x8C01;&#x4F1A;&#x5173;&#x6CE8;&#x4F60;&#x7684;&#x8FC7;&#x7A0B;</strong>?&#x77E5;&#x4E4E;&#x4E0A;&#x4F60;&#x8BF4;&#x4F60; 1 &#x5929;&#x6258;&#x798F;&#x8003;&#x5230; 118 &#x5206;&#xFF0C;&#x4F1A;&#x6709;&#x5927;&#x6279;&#x4EBA;&#x6765;&#x56F4;&#x89C2;&#x3002;&#x5982;&#x679C;&#x4F60;&#x8BF4;&#x4F60;&#x82B1;&#x4E86; 10 &#x5E74;&#x628A;&#x6258;&#x798F;&#x8003;&#x5230; 100 &#x5206;&#xFF0C;&#x80AF;&#x5B9A;&#x6CA1;&#x4EBA;&#x5173;&#x6CE8;&#xFF0C;&#x4F60;&#x7684;&#x7ECF;&#x5386;&#x662F; total &#x5931;&#x8D25;&#x7684;&#x7ECF;&#x5386;&#xFF0C;&#x6BEB;&#x65E0;&#x53C2;&#x8003;&#x4EF7;&#x503C;&#x3002;&#x4F60;&#x6211;&#x90FD;&#x662F;&#x4E0D;&#x540C;&#x4EBA;&#x773C;&#x4E2D;&#x7684;&#x5DE5;&#x5177;&#x4EBA;&#xFF0C;&#x4ED6;&#x4EBA;&#x60F3;&#x4ECE;&#x4F60;&#x8FD9;&#x91CC;&#x5B66;&#x5230;&#x6210;&#x529F;&#x7684;&#x7ECF;&#x9A8C;&#x3002;&#x5728;&#x8FD9;&#x4E2A;&#x6210;&#x738B;&#x8D25;&#x5BC7;&#xFF0C;&#x8FDE;&#x7B2C;&#x4E8C;&#x540D;&#x90FD;&#x4F1A;&#x88AB;&#x9057;&#x5FD8;&#x7684;&#x5E74;&#x4EE3;&#xFF0C;<strong>&#x65E0;&#x7ED3;&#x679C;&#x7684;&#x52AA;&#x529B;&#x6700;&#x7EC8;&#x53EA;&#x662F;&#x611F;&#x52A8;&#x4E86;&#x81EA;&#x5DF1;</strong>&#x3002;&#x6211;&#x7684;&#x6027;&#x683C;&#x5C31;&#x662F;&#x8FD9;&#x6837;&#xFF0C;&#x8003;&#x8651;&#x5468;&#x5168;&#xFF0C;&#x4F4E;&#x8C03;&#x7684;&#x51C6;&#x5907;&#x5B8C;&#x6240;&#x6709;&#x8003;&#x8BD5;&#xFF0C;&#x7136;&#x540E;&#x62FF;&#x5230;&#x6700;&#x597D;&#x7684;&#x7ED3;&#x679C;&#x4EE5;&#x540E;&#xFF0C;&#x518D;&#x6765;&#x51FA;&#x6765;&#x5206;&#x4EAB;&#x7ED3;&#x679C;&#xFF0C;&#x4E22;&#x51FA;&#x8FD9;&#x4E00;&#x6CE2;&#x738B;&#x70B8;&#x3002;&#x7EFC;&#x4E0A;&#xFF0C;&#x6240;&#x4EE5;&#x4ECE; 2019 &#x5E74;&#x6211;&#x5C31;&#x5F00;&#x59CB;&#x95ED;&#x5634;&#x4E86;&#x3002;&#x5927;&#x5BB6;&#x4E5F;&#x90FD;&#x4E0D;&#x77E5;&#x9053;&#x6211;&#x5FD9;&#x5565;&#x53BB;&#x4E86;&#x3002;&#x5468;&#x56F4;&#x670B;&#x53CB;&#x8DF3;&#x69FD;&#x7684;&#x8DF3;&#x69FD;&#xFF0C;&#x5220;&#x6211;&#x597D;&#x53CB;&#x7684;&#x5220;&#x6211;&#x597D;&#x53CB;&#x3002;&#x6211;&#x4F4E;&#x5934;&#x62FF;&#x7740;&#x5DE5;&#x8D44;&#xFF0C;&#x8D5A;&#x7740;&#x5956;&#x91D1;&#xFF0C;&#x62FF;&#x7740;&#x6700;&#x597D;&#x7684; offer&#xFF0C;&#x6700;&#x540E;&#x8FD8;&#x65E0;&#x7F1D;&#x5BF9;&#x63A5;&#x53BB;&#x7F8E;&#x56FD;&#x8BFB;&#x4E66;&#xFF0C;&#x96BE;&#x9053;&#x4E0D;&#x9999;&#x4E48;&#xFF1F;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x4EBA;&#x80FD;&#x7834;&#x574F;&#xFF0C;&#x4E5F;&#x4E0D;&#x4F1A;&#x7ED9;&#x673A;&#x4F1A;&#x8BA9;&#x522B;&#x4EBA;&#x7834;&#x574F;&#x6211;&#x7CBE;&#x5FC3;&#x57CB;&#x85CF;&#x5475;&#x62A4;&#x7684;&#x201C;&#x5B8C;&#x7F8E;&#x201D;&#x8BA1;&#x5212;&#x3002;&#x8FD9;&#x5E94;&#x8BE5;&#x5C31;&#x662F;&#x201C;&#x95F7;&#x58F0;&#x8D5A;&#x5927;&#x94B1;&#x201D;&#x7684;&#x771F;&#x8C1B;&#x5427;&#xFF1F;&#xFF08;&#x624B;&#x52A8; <strong>@&#x5927;&#x5DE6;</strong>&#xFF09;&#x3002;</p>
<p><strong>Don&#x2019;t tell anybody what your next move is. Just do it and shock them. And after shocking them, stay silent and plan your next move. And make it happen. Just keep shocking. Keep Enjoying. Keep Repeating it.</strong></p>
<h2 id="%E7%95%99%E5%AD%A6%E5%87%86%E5%A4%87">&#x7559;&#x5B66;&#x51C6;&#x5907;</h2>
<p>&#x4ECA;&#x5E74;&#x4E5F;&#x8BB8;&#x8FD8;&#x662F;&#x6709;&#x5F88;&#x591A;&#x4EBA;&#x4E0D;&#x660E;&#x767D;&#x6211;&#x4E3A;&#x4EC0;&#x4E48;&#x7A81;&#x7136;&#x8981;&#x79BB;&#x804C;&#xFF0C;&#x7A81;&#x7136;&#x4E2D;&#x65AD;&#x81EA;&#x5DF1;&#x7684;&#x201C;&#x5149;&#x660E;&#x201D;&#x7684;&#x804C;&#x4E1A;&#x751F;&#x6DAF;&#xFF0C;&#x9009;&#x62E9;&#x7559;&#x5B66;&#x3002;&#x4E0B;&#x8FD9;&#x4E2A;&#x51B3;&#x5B9A;&#x7684;&#x5FC3;&#x8DEF;&#x5386;&#x7A0B;&#x5728; 2019 &#x5E74;&#x5DF2;&#x7ECF;&#x60F3;&#x6E05;&#x695A;&#x4E86;&#x3002;&#x53BB;&#x5E74;&#x5C31;&#x786E;&#x5B9A;&#x4E86;&#x8D70;&#x8FD9;&#x6761;&#x8DEF;&#x4E86;&#x3002;&#x4F46;&#x662F;&#x8D70;&#x8FD9;&#x6761;&#x8DEF;&#x7684;&#x76EE;&#x7684;&#x6CA1;&#x6709;&#x548C;&#x8BFB;&#x8005;&#x4EEC;&#x8BF4;&#x7684;&#x5F88;&#x660E;&#x767D;&#x3002;&#x90A3;&#x4E48;&#x5728;&#x8FD9;&#x91CC;&#xFF0C;&#x6211;&#x53D1;&#x81EA;&#x5185;&#x5FC3;&#x7684;&#x7ED9;&#x51FA;&#x7B54;&#x6848;&#xFF1A;</p>
<ol>
<li>
<p>&#x5B9E;&#x73B0;&#x804C;&#x4E1A;&#x76EE;&#x6807;</p>
</li>
<li>
<p>&#x6EE1;&#x8DB3;&#x81EA;&#x5DF1;&#x7684;&#x597D;&#x5947;&#x5FC3;&#xFF0C;&#x60F3;&#x770B;&#x770B;&#x5168;&#x4E16;&#x754C;&#x6700;&#x9876;&#x7EA7;&#x7684;&#x5DE5;&#x7A0B;&#x5E08;&#x5E73;&#x65F6;&#x5DE5;&#x4F5C;&#x662F;&#x600E;&#x4E48;&#x6837;&#x7684;&#xFF1F;</p>
</li>
<li>
<p>&#x81EA;&#x6211;&#x53D1;&#x5C55;</p>
</li>
<li>
<p>&#x4F53;&#x9A8C;&#x5168;&#x65B0;&#x7684;&#x5F02;&#x56FD;&#x6587;&#x5316;&#x6216;&#x751F;&#x6D3B;&#x65B9;&#x5F0F;</p>
</li>
<li>
<p>&#x83B7;&#x5F97;&#x66F4;&#x9AD8;&#x7684;&#x6559;&#x5B66;&#x8D28;&#x91CF;</p>
</li>
<li>
<p>&#x83B7;&#x5F97;&#x4E00;&#x6B21;&#x5192;&#x9669;&#x7ECF;&#x5386;</p>
</li>
<li>
<p>&#x7ED3;&#x4EA4;&#x65B0;&#x670B;&#x53CB;&#x6216;&#x6269;&#x5927;&#x4E13;&#x4E1A;&#x793E;&#x4EA4;&#x5708;</p>
</li>
<li>
<p>&#x5B66;&#x4E60;&#x4E00;&#x95E8;&#x65B0;&#x8BED;&#x8A00;(&#x975E;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;)</p>
</li>
</ol>
<p>&#x4E16;&#x754C;&#x90A3;&#x4E48;&#x5927;&#xFF0C;&#x751F;&#x800C;&#x4E3A;&#x4EBA;&#xFF0C;&#x591A;&#x51FA;&#x53BB;&#x770B;&#x770B;&#x5916;&#x9762;&#x7684;&#x4E16;&#x754C;&#x3002;&#x4E3A;&#x81EA;&#x5DF1;&#x771F;&#x6B63;&#x60F3;&#x8981;&#x7684;&#x751F;&#x6D3B;&#x548C;&#x5E78;&#x798F;&#x594B;&#x6597;&#x5427;&#x3002;&#x5F53;&#x4F60;&#x6269;&#x5927;&#x4E86;&#x81EA;&#x5DF1;&#x7684;&#x683C;&#x5C40;&#x4EE5;&#x540E;&#xFF0C;&#x4F60;&#x771F;&#x7684;&#x4F1A;&#x53D1;&#x73B0;&#xFF0C;&#x4F18;&#x79C0;&#x7684;&#x4EBA;&#x771F;&#x7684;&#x5F88;&#x591A;&#xFF0C;&#x81EA;&#x5DF1;&#x6E3A;&#x5C0F;&#x5982;&#x4E00;&#x7C92;&#x6C99;&#x3002;&#x4F60;&#x771F;&#x7684;&#x4F1A;&#x53D1;&#x73B0;&#x671B;&#x5C18;&#x83AB;&#x53CA;&#x7684;&#x4E8B;&#x60C5;&#x5F88;&#x591A;&#xFF0C;&#x4F60;&#x9700;&#x8981;&#x4E00;&#x76F4;&#x4E0D;&#x65AD;&#x52AA;&#x529B;&#x3002;&#x4F60;&#x4F1A;&#x53D1;&#x73B0;&#x751F;&#x6D3B;&#x4E0D;&#x6B62;&#x4E0E;&#x773C;&#x524D;&#xFF0C;You only live once.</p>
<p>2019 &#x5E74; 8 &#x6708;&#x5C31;&#x5F00;&#x59CB;&#x51C6;&#x5907;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x4E86;&#x3002;&#x5F88;&#x4E0D;&#x5E78;&#x7684;&#x662F;&#xFF0C;&#x5230;&#x5E74;&#x5E95;&#x4E5F;&#x6CA1;&#x6709;&#x51C6;&#x5907;&#x597D;&#x3002;&#x88F8;&#x8003;&#x4E86;&#x4E00;&#x6B21;&#x624D; 80 &#x5206;&#x3002;&#x5206;&#x6570;&#x5F88;&#x4E0D;&#x7406;&#x60F3;&#x3002;&#x4E8E;&#x662F;&#x4ECA;&#x5E74;&#x7EE7;&#x7EED;&#x51C6;&#x5907;&#x6258;&#x798F;&#x5237;&#x5206;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/151_9.jpeg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x4ECA;&#x5E74;&#x7B14;&#x8005;&#x4E00;&#x76F4;&#x5728;&#x51C6;&#x5907;&#x6258;&#x798F;&#x548C; GRE &#x4E24;&#x4E2A;&#x8003;&#x8BD5;&#x3002;&#x4F46;&#x662F;&#x56E0;&#x4E3A;&#x75AB;&#x60C5;&#xFF0C;&#x7EBF;&#x4E0B;&#x8003;&#x573A;&#x5168;&#x90E8;&#x5173;&#x95ED;&#xFF0C;&#x76F4;&#x5230; 8 &#x6708;&#x624D;&#x5F00;&#x653E;&#x3002;&#x4E2D;&#x95F4;&#x8FD9; 7 &#x4E2A;&#x6708;&#x4E00;&#x76F4;&#x90FD;&#x6CA1;&#x6709;&#x8003;&#x8BD5;&#x3002;&#x539F;&#x4EE5;&#x4E3A; 1&#xFF0C;2 &#x6708;&#x590D;&#x4E60;&#x597D;&#x6258;&#x798F;&#x5C31;&#x53EF;&#x4EE5;&#x8003;&#x8BD5;&#x3002;&#x54EA;&#x77E5;&#x9053;&#x7A81;&#x53D1;&#x75AB;&#x60C5;&#xFF0C;&#x7EBF;&#x4E0B;&#x8003;&#x573A;&#x5173;&#x95ED;&#x3002;&#x4E00;&#x8F6C;&#x773C;&#x5C31;&#x6643;&#x5230;&#x4E86; 8 &#x6708;&#x3002;&#x5BB6;&#x91CC;&#x4EBA;&#x4E00;&#x76F4;&#x7763;&#x4FC3;&#x6211;&#x63D0;&#x524D;&#x590D;&#x4E60;&#x597D;&#x6258;&#x798F;&#x3002;&#x7B49;&#x8003;&#x573A;&#x4E00;&#x5F00;&#x653E;&#x7ACB;&#x5373;&#x201C;&#x79D2;&#x6740;&#x201D;&#x8003;&#x8BD5;&#x3002;&#x4F46;&#x662F;&#x7B14;&#x8005;&#x8FD8;&#x662F;&#x61D2;&#xFF0C;deadline &#x8FD8;&#x662F;&#x7B2C;&#x4E00;&#x751F;&#x4EA7;&#x529B;&#x3002;&#x6CA1;&#x6709;&#x5177;&#x4F53;&#x8003;&#x8BD5;&#x65E5;&#x671F;&#x7684;&#x7EA6;&#x675F;&#xFF0C;&#x590D;&#x4E60;&#x6548;&#x7387;&#x4E00;&#x76F4;&#x4E0D;&#x9AD8;&#x3002;&#x4E00;&#x822C;&#x5927;&#x5BB6;&#x8003;&#x524D;&#x4E00;&#x5468;&#x7684;&#x590D;&#x4E60;&#x6548;&#x7387;&#x662F;&#x6700;&#x9AD8;&#x7684;&#x3002;&#x56E0;&#x4E3A;&#x77E5;&#x9053;&#x4E00;&#x5468;&#x540E;&#x81EA;&#x5DF1;&#x8981;&#x4E0A;&#x8003;&#x573A;&#x4E86;&#xFF0C;&#x4E34;&#x65F6;&#x62B1;&#x4F5B;&#x811A;&#x4E5F;&#x662F;&#x6700;&#x8BA4;&#x771F;&#x7684;&#x3002;&#x7B14;&#x8005;&#x76F4;&#x5230; 8 &#x6708; 15 &#x53F7;&#x624D;&#x7EA6;&#x5230;&#x7B2C;&#x4E8C;&#x6B21;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x3002;&#x8003;&#x5B8C;&#x8FD9;&#x6B21;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x4EE5;&#x540E;&#x4FBF;&#x5F00;&#x59CB;&#x4E86; GRE &#x7684;&#x590D;&#x4E60;&#x5907;&#x8003;&#x3002;</p>
<blockquote>
<p>&#x5B9E;&#x4E0D;&#x76F8;&#x7792;&#xFF0C;&#x611F;&#x89C9; 2020 &#x5E74;&#x8FC7;&#x7684;&#x592A;&#x5FEB;&#x4E86;&#x3002;&#x4E00;&#x8F6C;&#x773C;&#x5C31;&#x8FC7;&#x53BB;&#x4E86;&#x3002;&#x6BCF;&#x5929;&#x770B;&#x7740;&#x5168;&#x7403;&#x5404;&#x5730;&#x8FD9;&#x91CC;&#x90A3;&#x91CC;&#x7684;&#x75AB;&#x60C5;&#x64AD;&#x62A5;&#xFF0C;&#x4E00;&#x5E74;&#x56DB;&#x5B63;&#x90FD;&#x5E26;&#x7740;&#x53E3;&#x7F69;&#x3002;&#x4EC0;&#x4E48;&#x4E8B;&#x90FD;&#x6CA1;&#x6709;&#x5E72;&#xFF0C;&#x4E00;&#x5E74;&#x5C31;&#x8FC7;&#x53BB;&#x4E86;&#x3002;</p>
</blockquote>
<p>&#x5173;&#x4E8E; GRE &#x8003;&#x8BD5;&#x7684;&#x590D;&#x4E60;&#x5907;&#x8003;&#x3002;&#x7B14;&#x8005;&#x6CA1;&#x6709;&#x592A;&#x591A;&#x7684;&#x6210;&#x529F;&#x7ECF;&#x9A8C;&#x5206;&#x4EAB;&#x3002;&#x7B14;&#x8005;&#x6700;&#x7EC8;&#x7684;&#x5206;&#x6570;&#x4E5F;&#x6CA1;&#x6709;&#x5237;&#x5230; 325 &#x5206;&#x3002;&#x4E00;&#x822C;&#x6258;&#x798F;&#x8003;&#x5230; 100 &#x5206;&#x5DE6;&#x53F3;&#x3002;GRE &#x88F8;&#x8003;&#x5C31;&#x6709; 315 &#x5206;&#x4E86;&#x3002;&#x5F53;&#x7136;&#x8FD9;&#x4E2A;&#x5206;&#x6570;&#x662F;&#x5B8C;&#x5168;&#x4E0D;&#x591F;&#x7684;&#x3002;GRE &#x5BF9;&#x6211;&#x6765;&#x8BF4;&#x6700;&#x96BE;&#x7684;&#x9898;&#x76EE;&#x5C31;&#x662F; Verbal &#x586B;&#x7A7A;&#x9898;&#x4E86;&#x3002;&#x8FD9;&#x9053;&#x9898;&#x5BF9;&#x8BCD;&#x6C47;&#x91CF;&#x7684;&#x8981;&#x6C42;&#x592A;&#x9AD8;&#x4E86;&#x3002;&#x6709;&#x5F88;&#x591A; GRE &#x7684;&#x5355;&#x8BCD;&#x662F;&#x4ECE;&#x5C0F;&#x5230;&#x5927;&#x4E00;&#x76F4;&#x80CC;&#x5355;&#x8BCD;&#x7684;&#x6211;&#x4EEC;&#xFF0C;&#x4E00;&#x70B9;&#x90FD;&#x6CA1;&#x89C1;&#x8FC7;&#x7684;&#x5355;&#x8BCD;&#x3002;&#x56E0;&#x4E3A;&#x8FD9;&#x4E2A;&#x8003;&#x8BD5;&#x7684;&#x76EE;&#x7684;&#x662F;&#x7528;&#x6765;&#x8003;&#x82F1;&#x8BED;&#x4E3A;&#x6BCD;&#x8BED;&#x7684;&#x4EBA;&#x7684;&#x3002;&#x800C;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x662F;&#x7528;&#x6765;&#x8003;&#x975E;&#x82F1;&#x8BED;&#x4E3A;&#x6BCD;&#x8BED;&#x7684;&#x4EBA;&#x7684;&#x3002;GRE &#x7684;&#x9605;&#x8BFB;&#x548C;&#x6258;&#x798F;&#x9605;&#x8BFB;&#x6709;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x76F8;&#x4F3C;&#x7684;&#x3002;GRE &#x6570;&#x5B66;&#x8981;&#x597D;&#x597D;&#x5237;&#x51E0;&#x5957;&#x6A21;&#x62DF;&#x9898;&#x3002;&#x4E0D;&#x7136;&#x5E94;&#x7528;&#x9898;&#x4F1A;&#x5751;&#x6B7B;&#x4F60;&#xFF0C;&#x91CC;&#x9762;&#x6709;&#x5F88;&#x591A;&#x9690;&#x85CF;&#x6761;&#x4EF6;&#x5982;&#x679C;&#x770B;&#x4E0D;&#x51FA;&#x6765;&#xFF0C;&#x90A3;&#x4E48;&#x90A3;&#x9053;&#x9898;&#x5FC5;&#x9519;&#x3002;GRE &#x6570;&#x5B66;&#x4E2D;&#x8FD8;&#x8981;&#x6CE8;&#x610F;&#x4E00;&#x70B9;&#xFF0C;&#x6709;&#x4E9B;&#x9898;&#x5982;&#x679C;&#x7ED9;&#x7684;&#x6761;&#x4EF6;&#x4E0D;&#x591F;&#xFF0C;&#x4E0D;&#x80FD;&#x81EA;&#x5DF1;&#x8111;&#x8865;&#x6761;&#x4EF6;&#x3002;&#x6BD4;&#x5982;&#x6CA1;&#x6709;&#x544A;&#x8BC9;&#x7537;&#x5973;&#x6BD4;&#x4F8B;&#x662F; 1&#xFF1A;1&#xFF0C;&#x90A3;&#x4E48;&#x6D89;&#x53CA;&#x5230;&#x7537;&#x5973;&#x6BD4;&#x4F8B;&#x76F8;&#x5173;&#x7684;&#x9898;&#x76EE;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5E94;&#x8BE5;&#x5927;&#x80C6;&#x7684;&#x9009;&#x62E9;&#x201C;&#x6B64;&#x9898;&#x65E0;&#x89E3;&#x201D;&#x3002;&#x6B64;&#x9898;&#x65E0;&#x89E3;&#x8FD9;&#x4E2A;&#x9009;&#x9879;&#x975E;&#x5E38;&#x5177;&#x6709;&#x8FF7;&#x60D1;&#x6027;&#x3002;&#x56E0;&#x4E3A;&#x4F60;&#x4E0D;&#x77E5;&#x9053;&#x662F;&#x56E0;&#x4E3A;&#x4F60;&#x7684;&#x539F;&#x56E0;&#x5BFC;&#x81F4;&#x8FD9;&#x9053;&#x9898;&#x89E3;&#x4E0D;&#x51FA;&#x6765;&#xFF0C;&#x8FD8;&#x662F;&#x56E0;&#x4E3A;&#x9898;&#x76EE;&#x6761;&#x4EF6;&#x7F3A;&#x5931;&#x5BFC;&#x81F4;&#x3002;&#x7531;&#x4E8E;&#x7B14;&#x8005;&#x4E13;&#x4E1A;&#x5BF9; GRE &#x5199;&#x4F5C;&#x8981;&#x6C42;&#x4E0D;&#x592A;&#x9AD8;&#xFF0C;3 &#x5206;&#x6216;&#x8005; 3.5 &#x5206;&#x90FD;&#x53EF;&#x4EE5;&#x63A5;&#x53D7;&#x3002;&#x6240;&#x4EE5;&#x7B14;&#x8005; GRE &#x5199;&#x4F5C;&#x6CA1;&#x6709;&#x6295;&#x5165;&#x592A;&#x591A;&#x7684;&#x65F6;&#x95F4;&#x3002;&#x7528;&#x6258;&#x798F;&#x5199;&#x4F5C;&#x7684;&#x5B9E;&#x529B;&#x53BB;&#x5199;&#xFF0C;&#x9A6C;&#x9A6C;&#x864E;&#x864E;&#x5C31; 3 &#x5206;&#x3002;&#x6240;&#x4EE5; GRE &#x603B;&#x7684;&#x6765;&#x8BF4;&#xFF0C;&#x60F3;&#x8003;&#x9AD8;&#x5206;&#xFF0C;&#x6570;&#x5B66;&#x8981;&#x5C3D;&#x91CF;&#x6EE1;&#x5206;&#x3002;&#x586B;&#x7A7A;&#x8981;&#x5C3D;&#x91CF;&#x62FF;&#x9AD8;&#x5206;&#x3002;GRE &#x6EE1;&#x5206; 340 &#x5206;&#x3002;&#x6570;&#x5B66; 170&#xFF0C;&#x5269;&#x4E0B;&#x7684;&#x8BED;&#x6587;&#x4E5F;&#x662F; 170 &#x5206;&#x3002;&#x8BED;&#x6587;&#x60F3;&#x62FF;&#x5230; 160 &#x5206;&#x4EE5;&#x4E0A;&#x5C31;&#x975E;&#x5E38;&#x96BE;&#x4E86;&#x3002;&#x4E00;&#x822C;&#x80FD;&#x4E0A; 150 &#x5206;&#x7684;&#x8BDD;&#xFF0C;&#x90A3; 325 &#x5C31;&#x5F88;&#x6709;&#x620F;&#x4E86;&#x3002;GRE &#x7684;&#x6210;&#x8D25;&#x5C31;&#x5728;&#x8BED;&#x6587;&#x7684; Verbal &#x4E0A;&#x4E86;&#x3002;</p>
<blockquote>
<p>GRE &#x548C;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x76F8;&#x540C;&#x70B9;&#x662F;&#xFF0C;&#x90FD;&#x4F1A;&#x52A0;&#x8BD5; section&#x3002;&#x8003;&#x8BD5;&#x8005;&#x4E0D;&#x77E5;&#x9053;&#x54EA;&#x4E2A;&#x662F;&#x52A0;&#x8BD5;&#x7684; section&#xFF0C;&#x52A0;&#x8BD5;&#x7684; section &#x4E0D;&#x7B97;&#x5206;&#xFF0C;&#x7531;&#x4E8E;&#x4E0D;&#x77E5;&#x9053;&#x54EA;&#x4E2A;&#x662F;&#x52A0;&#x8BD5;&#xFF0C;&#x6240;&#x4EE5;&#x6BCF;&#x4E2A; section &#x4F9D;&#x65E7;&#x8981;&#x8BA4;&#x771F;&#x5BF9;&#x5F85;&#x3002;GRE &#x548C;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x4E0D;&#x540C;&#x70B9;&#x662F;&#xFF0C;GRE &#x7684;&#x8003;&#x8BD5;&#x96BE;&#x5EA6;&#x4F1A;&#x6839;&#x636E;&#x8003;&#x8BD5;&#x8005;&#x505A;&#x9898;&#x60C5;&#x51B5;&#xFF0C;&#x52A8;&#x6001;&#x53D8;&#x5316;&#x3002;&#x4F8B;&#x5982;&#x8003;&#x751F;&#x7B2C;&#x4E00;&#x4E2A; section &#x505A;&#x7684;&#x7279;&#x522B;&#x5DEE;&#xFF0C;&#x90A3;&#x4E48;&#x7B2C;&#x4E8C;&#x4E2A; section &#x5C31;&#x4F1A;&#x53D8;&#x5F97;&#x5F88;&#x7B80;&#x5355;&#x3002;&#x4F46;&#x662F;&#x6BCF;&#x9053;&#x9898;&#x7684;&#x5206;&#x6570;&#x4E5F;&#x52A8;&#x6001;&#x7684;&#x53D8;&#x5C11;&#x4E86;&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5373;&#x4F7F;&#x6574;&#x4E2A; section &#x5168;&#x5BF9;&#xFF0C;&#x5206;&#x6570;&#x4F9D;&#x65E7;&#x4E0D;&#x662F; 170 &#x5206;&#x3002;&#x53EA;&#x6709;&#x5728; hard &#x6A21;&#x5F0F;&#x4E0B;&#x5168;&#x5BF9;&#xFF0C;&#x5206;&#x6570;&#x624D;&#x80FD;&#x662F; 170 &#x5206;&#x6EE1;&#x5206;&#x3002;&#x5982;&#x679C;&#x8003;&#x751F;&#x7B2C;&#x4E00;&#x4E2A; section &#x72B6;&#x6001;&#x7279;&#x522B;&#x597D;&#xFF0C;&#x505A;&#x4E86;&#x5168;&#x5BF9;&#x3002;&#x90A3;&#x4E48;&#x7B2C;&#x4E8C;&#x4E2A; section &#x4F1A;&#x53D8;&#x96BE;&#x3002;&#x5F53;&#x4F60;&#x660E;&#x663E;&#x611F;&#x89C9;&#x5230;&#x96BE;&#x5EA6;&#x53D8;&#x96BE;&#x4E86;&#xFF0C;&#x90A3;&#x4E48;&#x606D;&#x559C;&#x4F60;&#xFF0C;&#x4F60;&#x5F00;&#x542F;&#x4E86;&#x9AD8;&#x5206;&#x56F0;&#x96BE;&#x6A21;&#x5F0F;&#x3002;&#x867D;&#x7136;&#x4F60;&#x505A;&#x5BF9;&#x7684;&#x51E0;&#x7387;&#x53D8;&#x5C0F;&#x4E86;&#x3002;&#x4F46;&#x662F;&#x5982;&#x679C;&#x8499;&#x5BF9;&#x4E00;&#x9898;&#x7684;&#x5206;&#x503C;&#x4E5F;&#x53D8;&#x591A;&#x4E86;&#x3002;</p>
</blockquote>
<blockquote>
<p>&#x7B14;&#x8005;&#x5F88;&#x5E78;&#x8FD0;&#xFF0C;&#x88AB;&#x52A0;&#x8BD5;&#x7684;&#x662F;&#x6570;&#x5B66;&#x3002;&#x6570;&#x5B66;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#x3002;&#x7B14;&#x8005;&#x6700;&#x7EC8;&#x5F97;&#x5206;&#x662F; 169 &#x5206;&#xFF0C;&#x8FD8;&#x662F;&#x88AB;&#x6263;&#x4E86;&#x4E00;&#x5206;&#x3002;&#xFF08;&#x77E5;&#x4E4E;&#x4E0A;&#x8BF4; GRE &#x6570;&#x5B66;&#x505A;&#x4E0D;&#x5230;&#x6EE1;&#x5206;&#x1F4AF;&#x5C31;&#x4E0D;&#x662F;&#x4E2D;&#x56FD;&#x4EBA;&#xFF0C;&#x1F62D;&#x6211;&#x4E0D;&#x662F;&#x4E2D;&#x56FD;&#x4EBA;&#xFF09;</p>
</blockquote>
<p>GRE &#x7684;&#x5355;&#x8BCD;&#x53EA;&#x80FD;&#x9760;&#x81EA;&#x5DF1;&#x591A;&#x80CC;&#x4E86;&#x3002;&#x300A;&#x8981;&#x4F60;&#x547D; 3000&#x300B;&#x8FD9;&#x4E2A;&#x5355;&#x8BCD;&#x4E66;&#x5148;&#x80CC;&#x4E2A; 5 &#x904D;&#x3002;&#x4E0D;&#x7136;&#x4E0A;&#x8003;&#x573A;&#x80AF;&#x5B9A;&#x4E00;&#x8138;&#x61F5;&#xFF0C;&#x57FA;&#x672C;&#x5168;&#x9760;&#x8499;&#x4E86;&#x3002;&#x8FD9;&#x672C;&#x4E66;&#x80CC; 5 &#x904D;&#x4EE5;&#x4E0B;&#x662F;&#x88F8;&#x6CF3;&#xFF0C;10 &#x904D;&#x662F;&#x6BD4;&#x57FA;&#x5C3C;&#xFF0C;15-20 &#x904D;&#x624D;&#x662F;&#x4E0A;&#x5CB8;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/151_10.png" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;">
</p>
<p>&#x6570;&#x5B66;&#x4E5F;&#x6709;&#x5C11;&#x91CF;&#x8981;&#x80CC;&#x7684;&#x5355;&#x8BCD;&#x3002;&#x7B14;&#x8005;&#x80CC;&#x7684;&#x662F;&#x8003;&#x6EE1;&#x5206; GRE &#x5355;&#x8BCD; app&#x3002;&#x6570;&#x5B66;&#x5FC5;&#x5907;&#x53EA;&#x6709; 360 &#x8BCD;&#x3002;&#x80CC;&#x5B8C;&#x8FD9;&#x4E9B;&#x5B8C;&#x5168;&#x591F;&#x7528;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x628A;&#x5B83;&#x4EEC; GRE &#x7684;&#x5355;&#x8BCD;&#x4E5F;&#x5237;&#x4E86;&#x4E00;&#x904D;&#x3002;&#x6B63;&#x5E8F;&#xFF0C;&#x9006;&#x5E8F;&#x90FD;&#x5237;&#x4E86;&#x3002;app &#x4E0A;&#x5237;&#x5355;&#x8BCD;&#x7684;&#x597D;&#x5904;&#x662F;&#x8D70;&#x5230;&#x54EA;&#x91CC;&#x90FD;&#x53EF;&#x4EE5;&#x5237;&#xFF0C;&#x6BD4;&#x4E66;&#x672C;&#x65B9;&#x4FBF;&#x5F88;&#x591A;&#x3002;&#x7B49;&#x516C;&#x4EA4;&#x8F66;&#xFF0C;&#x6392;&#x961F;&#x7B49;&#x5730;&#x94C1;&#xFF0C;&#x4E2D;&#x5348;&#x5403;&#x996D;&#x6392;&#x961F;&#x7B49;&#x7B49;&#x788E;&#x7247;&#x65F6;&#x95F4;&#xFF0C;&#x53EA;&#x8981;&#x62FF;&#x51FA;&#x624B;&#x673A;&#x5C31;&#x53EF;&#x4EE5;&#x5237;&#x51E0;&#x904D;&#x3002;&#x5220;&#x6389;&#x5A31;&#x4E50; app &#x548C;&#x6E38;&#x620F; app &#x4EE5;&#x540E;&#xFF0C;&#x5237;&#x5355;&#x8BCD;&#x7684;&#x65F6;&#x95F4;&#x771F;&#x7684;&#x975E;&#x5E38;&#x591A;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_36_.png" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x6700;&#x540E;&#xFF0C;&#x8BB0;&#x5355;&#x8BCD;&#x8FD9;&#x4E2A;&#x4F53;&#x529B;+&#x8111;&#x529B;&#x6D3B;&#xFF0C;&#x9700;&#x8981;&#x6BCF;&#x5929;&#x90FD;&#x63A5;&#x53D7;&#x6298;&#x78E8;&#x3002;&#x5982;&#x679C;&#x4E2D;&#x65AD;&#x4E00;&#x4E24;&#x5929;&#xFF0C;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x4E00;&#x5468;&#x624D;&#x80FD;&#x6361;&#x8D77;&#x6765;&#x4E4B;&#x524D;&#x8FDE;&#x7EED;&#x7D2F;&#x79EF;&#x7684;&#x8BB0;&#x5FC6;&#x529B;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/151_8.jpeg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;" loading="lazy"></p>
<p>&#x5173;&#x4E8E; GRE &#x5907;&#x8003;&#x3002;&#x4F5C;&#x4E3A;&#x8FC7;&#x6765;&#x4EBA;&#xFF0C;&#x6211;&#x53EF;&#x4EE5;&#x8BF4;&#x51E0;&#x53E5;&#x5173;&#x4E8E;&#x5FC3;&#x6001;&#x4E0A;&#x7684;&#x9F13;&#x52B1;&#x7684;&#x8BDD;&#xFF0C;&#x6211;&#x4E5F;&#x662F;&#x8FD9;&#x6837;&#x8D70;&#x8FC7;&#x6765;&#x7684;&#x3002;&#x76F8;&#x4FE1;&#x540E;&#x6765;&#x4EBA;&#x4E5F;&#x6709;&#x53EF;&#x80FD;&#x9047;&#x5230;&#x76F8;&#x540C;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x5907;&#x8003; GRE &#x4E5F;&#x662F;&#x975E;&#x5E38;&#x75DB;&#x82E6;&#x7684;&#x4E00;&#x4EF6;&#x4E8B;&#x60C5;&#x3002;GREer &#x7684;&#x82E6;&#x5C31;&#x662F;&#x4F60;&#x4ED8;&#x51FA;&#x4E4B;&#x540E;&#xFF0C;&#x4F60;&#x53EF;&#x80FD;&#x5728;&#x4E00;&#x4E2A;&#x4E3A;&#x6B62;&#x7684;&#x65F6;&#x95F4;&#x6BB5;&#x5F53;&#x4E2D;&#xFF0C;&#x4F60;&#x770B;&#x4E0D;&#x5230;&#x56DE;&#x62A5;&#x3002;&#x4F46;&#x662F;&#x6210;&#x529F;&#x548C;&#x5931;&#x8D25;&#x4E4B;&#x95F4;&#x5C31;&#x662F;&#x4F60;&#x662F;&#x5426;&#x80FD;&#x591F;&#x633A;&#x8FC7;&#x8FD9;&#x6BB5;&#x8DEF;&#x3002;&#x65E0;&#x6570;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x7684;&#x5B69;&#x5B50;&#xFF0C;&#x90FD;&#x8D70;&#x8FC7;&#x4E86;&#x8FD9;&#x6BB5;&#x8DEF;&#x3002;&#x5F88;&#x591A;&#x4EBA;&#x53EF;&#x80FD;&#x590D;&#x4E60;&#x4E86;&#x597D;&#x51E0;&#x4E2A;&#x6708;&#xFF0C;&#x4E0A;&#x8003;&#x573A;&#x4E4B;&#x540E;&#x8FD8;&#x662F;&#x53D1;&#x73B0;&#x6CA1;&#x6709;&#x4E00;&#x70B9;&#x8FDB;&#x6B65;&#xFF0C;&#x5FC3;&#x6001;&#x6FD2;&#x4E34;&#x5D29;&#x6E83;&#xFF0C;&#x8FD9;&#x4E9B;&#x90FD;&#x662F;&#x6B63;&#x5E38;&#x7684;&#x3002;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x4EFF;&#x4F5B;&#x7F6E;&#x8EAB;&#x5728;&#x4E00;&#x4E2A;&#x9ED1;&#x6697;&#x7684;&#x96A7;&#x9053;&#x4E2D;&#xFF0C;&#x6CA1;&#x6709;&#x4E00;&#x70B9;&#x5149;&#x4EAE;&#xFF0C;&#x975E;&#x5E38;&#x59D4;&#x5C48;&#xFF0C;&#x975E;&#x5E38;&#x5B64;&#x72EC;&#xFF0C;&#x751A;&#x81F3;&#x7EDD;&#x671B;&#x3002;&#x6709;&#x65F6;&#x5019;&#x8FD8;&#x60F3;&#x653E;&#x5F03;&#x3002;&#x4F46;&#x662F;&#x8BF7;&#x4F60;&#x8BB0;&#x4F4F;&#xFF0C;&#x8FD9;&#x6BB5;&#x8DEF;&#x8DEA;&#x7740;&#x8D70;&#x5B8C;&#xFF0C;&#x5B83;&#x4F1A;&#x5E26;&#x7ED9;&#x4F60;&#x4EBA;&#x751F;&#x4E2D;&#x6700;&#x4E3A;&#x5B9D;&#x8D35;&#x7684;&#x8D22;&#x5BCC;&#xFF0C;&#x8FD9;&#x7B14;&#x8D22;&#x5BCC;&#x79F0;&#x4E4B;&#x4E3A;&#xFF0C;&#x6210;&#x957F;&#x3002;&#x8FD9;&#x6BB5;&#x8DEF;&#x5F53;&#x4F60;&#x771F;&#x6B63;&#x8D70;&#x5230;&#x5C3D;&#x5934;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8D70;&#x51FA;&#x9ED1;&#x6697;&#x7684;&#x96A7;&#x9053;&#xFF0C;&#x5F53;&#x9633;&#x5149;&#x6D12;&#x5230;&#x4F60;&#x8138;&#x4E0A;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F60;&#x7684;&#x5634;&#x89D2;&#x624D;&#x80FD;&#x626C;&#x8D77;&#x7559;&#x5B66;&#x8003;&#x8BD5;&#x80DC;&#x5229;&#xFF0C;&#x624D;&#x6709;&#x7684;&#x90A3;&#x4EFD;&#x9A84;&#x50B2;&#x3002;&#x90A3;&#x4E00;&#x523B;&#x4F60;&#x4F1A;&#x5BF9;&#x81EA;&#x5DF1;&#x8BF4;&#xFF0C;&#x7559;&#x5B66;&#x65E0;&#x6094;&#xFF0C;&#x9752;&#x6625;&#x4E0D;&#x673D;&#xFF01;</p>
<p>&#x81F3;&#x4E8E;&#x7B14;&#x8005;&#x7559;&#x5B66;&#x7533;&#x8BF7;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x4ECA;&#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x91CC;&#x9762;&#x65E0;&#x6CD5;&#x544A;&#x77E5;&#xFF0C;&#x660E;&#x5E74; 4&#xFF0C;5 &#x6708;&#x624D;&#x4F1A;&#x51FA;&#x7ED3;&#x679C;&#x3002;&#x660E;&#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x5C31;&#x603B;&#x7ED3;&#x4E00;&#x4E0B;&#x6574;&#x4E2A;&#x7559;&#x5B66;&#x5B63;&#x7533;&#x8BF7;&#x7684;&#x79CD;&#x79CD;&#x5427;&#x3002;</p>
<h2 id="%E6%9C%80%E5%90%8E">&#x6700;&#x540E;</h2>
<p>&#x7B14;&#x8005;&#x7684;&#x804C;&#x4E1A;&#x751F;&#x6DAF;&#x7684;&#x7B2C;&#x4E00;&#x4E2A; 5 &#x5E74;&#x7ED3;&#x675F;&#x4E86;&#xFF0C;&#x5168;&#x90E8;&#x662F;&#x5728;&#x4E0A;&#x6D77;&#x594B;&#x6597;&#x7684;&#x65F6;&#x5149;&#x3002;&#x6309;&#x7167;&#x6211;&#x7684;&#x89C4;&#x5212;&#xFF0C;&#x672A;&#x6765;&#x7684; 5 &#x5E74;&#x662F;&#x5728;&#x5168;&#x7403;&#x594B;&#x6597;&#x7684;&#x65F6;&#x5149;&#x3002;&#x5C06;&#x4F1A;&#x89E3;&#x9501;&#x5168;&#x7403;&#x7684;&#x201C;&#x5DE5;&#x4F5C;&#x4E0E;&#x5B66;&#x4E60;&#x7684;&#x5730;&#x65B9;&#x201D;&#x3002;&#x5173;&#x4E8E;&#x7B2C;&#x4E8C;&#x4E2A; 5 &#x5E74;&#x89C4;&#x5212;&#xFF0C;&#x662F;&#x7EE7;&#x7EED;&#x8BFB; PhD &#x5462;&#xFF1F;&#x8FD8;&#x662F;&#x5DE5;&#x4F5C;&#x4EE5;&#x540E;&#x518D;&#x7533;&#x4E00;&#x4E2A; MBA &#x5462;&#xFF1F;&#x6E05;&#x534E;&#x5927;&#x5B66;&#x82CF;&#x4E16;&#x6C11;&#x5B66;&#x9662;&#xFF0C;UIUC MBA &#x9879;&#x76EE;&#x7B49;&#x7B49;&#x770B;&#x4E0A;&#x53BB;&#x90FD;&#x662F;&#x4E0D;&#x9519;&#x7684;&#x9009;&#x62E9;&#x3002;&#x4E5F;&#x6709;&#x53EF;&#x80FD;&#x62B5;&#x6321;&#x4E0D;&#x4F4F;&#x91D1;&#x94B1;&#x7684;&#x8BF1;&#x60D1;&#xFF0C;&#x5148;&#x81F4;&#x5BCC;&#xFF0C;&#x8D22;&#x5BCC;&#x81EA;&#x7531;&#x4EE5;&#x540E;&#x7EE7;&#x7EED;&#x65C5;&#x5C45;&#x5168;&#x7403;&#x3002;&#x7B14;&#x8005;&#x5148;&#x4E0D;&#x7ACB; flag &#x4E86;&#xFF0C;&#x8FD8;&#x662F;&#x7B49;&#x5B9E;&#x73B0;&#x4E86;&#x4EE5;&#x540E;&#x518D;&#x516C;&#x5E03;&#x3002;</p>
<p>&#x6700;&#x540E;&#xFF0C;&#x8001;&#x89C4;&#x77E9;&#xFF0C;&#x4F9D;&#x65E7;&#x662F;&#x4E00;&#x4E9B;&#x201C;&#x53EA;&#x8A00;&#x7247;&#x8BED;&#x201D;&#x7684;&#x611F;&#x53D7;&#x5206;&#x4EAB;&#x4E00;&#x4E0B;&#x4F5C;&#x4E3A;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x7684;&#x7ED3;&#x5C3E;&#x5427;&#x3002;</p>
<ol>
<li>&#x751F;&#x6D3B;&#xFF0C;&#x672C;&#x5C31;&#x662F;&#x4E00;&#x573A;&#x6E21;&#x52AB;&#xFF0C;&#x8FC7;&#x7A0B;&#x96BE;&#x514D;&#x7A98;&#x8FEB;&#x72FC;&#x72C8;&#xFF0C;&#x4F46;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x6210;&#x5E74;&#x4EBA;&#xFF0C;&#x4E0D;&#x7BA1;&#x8EAB;&#x4E0A;&#x6D41;&#x8840;&#x6D41;&#x6C57;&#xFF0C;&#x53EA;&#x8981;&#x4E0D;&#x4E0B;&#x573A;&#xFF0C;&#x54EA;&#x6015;&#x9047;&#x5230;&#x5927;&#x707E;&#x5927;&#x96BE;&#xFF0C;&#x672A;&#x6765;&#x4E00;&#x5207;&#x7686;&#x6709;&#x53EF;&#x80FD;&#x3002;</li>
<li>&#x61D2;&#x7B49;&#x4E8E;&#x7A77;&#xFF0C;&#x5C31;&#x662F;&#x8FD9;&#x4E48;&#x76F4;&#x63A5;&#x3002;20 &#x4E0D;&#x52E4;&#xFF0C;30 &#x4E0D;&#x7ACB;&#xFF0C;40 &#x4E0D;&#x5BCC;&#xFF0C;50 &#x800C;&#x8870;&#x9760;&#x5B50;&#x52A9;&#x3002;<strong>&#x7236;&#x6BCD;&#x7ED9;&#x7684;&#x53EB;&#x80CC;&#x666F;&#xFF0C;&#x81EA;&#x5DF1;&#x6253;&#x7684;&#x53EB;&#x6C5F;&#x5C71;&#xFF0C;&#x4E0D;&#x8981;&#x5047;&#x88C5;&#x5F88;&#x52AA;&#x529B;&#xFF0C;&#x7ED3;&#x679C;&#x4E0D;&#x4F1A;&#x966A;&#x4F60;&#x4E00;&#x8D77;&#x6F14;&#x620F;&#x3002;</strong></li>
<li>&#x4EBA;&#x751F;&#x6709;&#x4E24;&#x79CD;&#x82E6;&#xFF0C;&#x4E00;&#x79CD;&#x82E6;&#x662F;&#x81EA;&#x5F8B;&#x7684;&#x82E6;&#xFF0C;&#x4E00;&#x79CD;&#x82E6;&#x662F;&#x540E;&#x6094;&#x7684;&#x82E6;&#x3002;&#x81EA;&#x5F8B;&#x7684;&#x82E6;&#x8F7B;&#x5982;&#x9E3F;&#x6BDB;&#xFF0C;&#x540E;&#x6094;&#x7684;&#x82E6;&#x91CD;&#x5982;&#x6CF0;&#x5C71;&#x3002;</li>
<li>&#x4EBA;&#x4E0E;&#x4EBA;&#x4E4B;&#x95F4;&#x7684;&#x7ADE;&#x4E89;&#x8868;&#x9762;&#x4E0A;&#x662F;&#x8F66;&#x5B50;&#x623F;&#x5B50;&#x9762;&#x5B50;&#x3002;&#x6838;&#x5FC3;&#x662F;&#x80FD;&#x529B;&#x8D44;&#x6E90;&#x4EBA;&#x8109;&#xFF01;&#x672C;&#x8D28;&#x662F;&#x8BA4;&#x77E5;&#x601D;&#x7EF4;&#x4EF7;&#x503C;&#x4EBA;&#x54C1;&#xFF01;</li>
<li>&#x4E0D;&#x8981;&#x7740;&#x6025;&#xFF0C;&#x4E00;&#x5B9A;&#x4E0D;&#x8981;&#x653E;&#x5F03;&#xFF01;&#x7E41;&#x82B1;&#x9526;&#x7C07;&#xFF0C;&#x7855;&#x679C;&#x7D2F;&#x7D2F;&#xFF0C;&#x9700;&#x8981;&#x8FC7;&#x7A0B;&#x3002;</li>
</ol>
<p>&#x597D;&#x4E86;&#xFF0C;2020 &#x5E74;&#x7684;&#x3010;&#x661F;&#x971C;&#x834F;&#x82D2;&#x3011;&#x5C31;&#x5230;&#x8FD9;&#x91CC;&#x4E86;&#x3002;&#x5982;&#x6709;&#x4EFB;&#x4F55;&#x5F02;&#x8BAE;&#x6216;&#x8005;&#x60F3;&#x8BA8;&#x8BBA;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x6B22;&#x8FCE;&#x548C;&#x6211;&#x4EA4;&#x6D41;&#x3002;</p>
<p align="center">
<img src="https://img.halfrost.com/Blog/ArticleImage/151_4.jpg" alt="&#x4E0B;&#x4E00;&#x4E2A;&#x4E94;&#x5E74;&#x8BA1;&#x5212;&#x8D77;&#x822A; &#xFF01;">
</p>
<p>2020 &#x5E74; 7 &#x6708; 1 &#x65E5;&#xFF0C;&#x4E8E;&#x6B66;&#x6C49; Wuhan&#x3002;&#x501F;&#x7528;&#x5C0F;&#x798F;&#x541B;&#x7684;&#x4E00;&#x5E45;&#x63D2;&#x753B;&#xFF0C;&#x795D;&#x798F;&#x5168;&#x4E16;&#x754C;&#x7684;&#x4EBA;&#x4EEC;&#x90FD;&#x80FD;&#x5BCC;&#x8D35;&#x6C38;&#x9A7B;&#xFF0C;&#x91D1;&#x521A;&#x62A4;&#x4F53;&#xFF0C;&#x767E;&#x6BD2;&#x4E0D;&#x4FB5;&#xFF0C;&#x5929;&#x4E0B;&#x592A;&#x5E73;&#x3002;</p>
<hr>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="https://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="https://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/halfrost_2020/">https://halfrost.com/halfrost_2020/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[面试中 LRU / LFU 的青铜与王者]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x5DF2;&#x7ECF; 0202 &#x5E74;&#x4E86;&#xFF0C;&#x5927;&#x5382;&#x9762;&#x8BD5;&#x624B;&#x64B8;&#x7B97;&#x6CD5;&#x9898;&#x5DF2;&#x7ECF;&#x662F;&#x6807;&#x914D;&#x3002;&#x7B2C;&#x4E00;&#x8F6E;&#x5C31;&#x9047;&#x5230;&#x624B;&#x64B8; LRU / LFU &#x7684;&#x51E0;&#x7387;&#x8FD8;&#x662F;&#x633A;&#x5927;&#x7684;&#x3002;LeetCode &#x4E0A;<a href="https://leetcode.com/problems/lru-cache/">146. LRU Cache</a> &#x548C; <a href="https://leetcode.com/problems/lfu-cache/">460. LFU Cache</a>&#xFF0C;</p>]]></description><link>https://halfrost.com/lru_lfu_interview/</link><guid isPermaLink="false">634360bbd892dc307476ccf3</guid><category><![CDATA[Golang]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Tue, 30 Jun 2020 08:05:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/12/146_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/12/146_0.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;"><p>&#x5DF2;&#x7ECF; 0202 &#x5E74;&#x4E86;&#xFF0C;&#x5927;&#x5382;&#x9762;&#x8BD5;&#x624B;&#x64B8;&#x7B97;&#x6CD5;&#x9898;&#x5DF2;&#x7ECF;&#x662F;&#x6807;&#x914D;&#x3002;&#x7B2C;&#x4E00;&#x8F6E;&#x5C31;&#x9047;&#x5230;&#x624B;&#x64B8; LRU / LFU &#x7684;&#x51E0;&#x7387;&#x8FD8;&#x662F;&#x633A;&#x5927;&#x7684;&#x3002;LeetCode &#x4E0A;<a href="https://leetcode.com/problems/lru-cache/">146. LRU Cache</a> &#x548C; <a href="https://leetcode.com/problems/lfu-cache/">460. LFU Cache</a>&#xFF0C;LRU &#x662F; Medium &#x96BE;&#x5EA6;&#xFF0C;LFU &#x662F; Hard &#x96BE;&#x5EA6;&#xFF0C;&#x9762;&#x8BD5;&#x5B98;&#x773C;&#x91CC;&#x8BA4;&#x4E3A;&#x8FD9; 2 &#x4E2A;&#x95EE;&#x9898;&#x662F;&#x6700;&#x6700;&#x6700;&#x57FA;&#x7840;&#x7684;&#x3002;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x5C31;&#x6765;&#x804A;&#x804A;&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;&#x3002;</p>
<blockquote>
<p>&#x7F13;&#x5B58;&#x6DD8;&#x6C70;&#x7B97;&#x6CD5;&#x4E0D;&#x4EC5;&#x4EC5;&#x53EA;&#x6709; LRU / LFU &#x8FD9;&#x4E24;&#x79CD;&#xFF0C;&#x8FD8;&#x6709;&#x5F88;&#x591A;&#x79CD;&#xFF0C;<strong>TLRU</strong> (Time aware least recently used)&#xFF0C;<strong>PLRU</strong> (Pseudo-LRU)&#xFF0C;<strong>SLRU</strong> (Segmented LRU)&#xFF0C;<strong>LFRU</strong> (Least frequent recently used)&#xFF0C;<strong>LFUDA</strong> (LFU with dynamic aging)&#xFF0C;<strong>LIRS</strong> (Low inter-reference recency set)&#xFF0C;<strong>ARC</strong> (Adaptive Replacement Cache)&#xFF0C;<strong>FIFO</strong> (First In First Out)&#xFF0C;<strong>MRU</strong> (Most recently used)&#xFF0C;<strong>LIFO</strong> (Last in first out)&#xFF0C;<strong>FILO</strong> (First in last out)&#xFF0C;<strong>CAR</strong> (Clock with adaptive replacement) &#x7B49;&#x7B49;&#x3002;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x540C;&#x5B66;&#x53EF;&#x4EE5;&#x628A;&#x8FD9;&#x6BCF;&#x4E00;&#x79CD;&#x90FD;&#x7528;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x4E00;&#x904D;&#x3002;</p>
</blockquote>
<h2 id="%E5%80%94%E5%BC%BA%E9%9D%92%E9%93%9C">&#x5014;&#x5F3A;&#x9752;&#x94DC;</h2>
<p>&#x9762;&#x8BD5;&#x5B98;&#x53EF;&#x80FD;&#x5C31;&#x76F4;&#x63A5;&#x62FF;&#x51FA; LeetCode &#x4E0A;&#x8FD9; 2 &#x9053;&#x9898;&#x8BA9;&#x4F60;&#x6765;&#x505A;&#x7684;&#x3002;&#x5728;&#x7B14;&#x8005;&#x62FF;&#x51FA;&#x6807;&#x51C6;&#x7B54;&#x6848;&#x4E4B;&#x524D;&#xFF0C;&#x5148;&#x7B80;&#x5355;&#x4ECB;&#x7ECD;&#x4E00;&#x4E0B; LRU &#x548C; LFU &#x7684;&#x6982;&#x5FF5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_1_.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>LRU &#x662F; Least Recently Used &#x7684;&#x7F29;&#x5199;&#xFF0C;&#x5373;&#x6700;&#x8FD1;&#x6700;&#x5C11;&#x4F7F;&#x7528;&#xFF0C;&#x662F;&#x4E00;&#x79CD;&#x5E38;&#x7528;&#x7684;&#x9875;&#x9762;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;&#xFF0C;&#x9009;&#x62E9;&#x6700;&#x8FD1;&#x6700;&#x4E45;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x9875;&#x9762;&#x4E88;&#x4EE5;&#x6DD8;&#x6C70;&#x3002;&#x5982;&#x4E0A;&#x56FE;&#xFF0C;&#x8981;&#x63D2;&#x5165; F &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6B64;&#x65F6;&#x9700;&#x8981;&#x6DD8;&#x6C70;&#x6389;&#x539F;&#x6765;&#x7684;&#x4E00;&#x4E2A;&#x9875;&#x9762;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_2_0.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x6839;&#x636E; LRU &#x7684;&#x7B56;&#x7565;&#xFF0C;&#x6BCF;&#x6B21;&#x90FD;&#x6DD8;&#x6C70;&#x6700;&#x8FD1;&#x6700;&#x4E45;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x9875;&#x9762;&#xFF0C;&#x6240;&#x4EE5;&#x5148;&#x6DD8;&#x6C70; A &#x9875;&#x9762;&#x3002;&#x518D;&#x63D2;&#x5165; C &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53D1;&#x73B0;&#x7F13;&#x5B58;&#x4E2D;&#x6709; C &#x9875;&#x9762;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x9700;&#x8981;&#x628A; C &#x9875;&#x9762;&#x653E;&#x5230;&#x9996;&#x4F4D;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x88AB;&#x4F7F;&#x7528;&#x4E86;&#x3002;&#x4EE5;&#x6B64;&#x7C7B;&#x63A8;&#xFF0C;&#x63D2;&#x5165; G &#x9875;&#x9762;&#xFF0C;G &#x9875;&#x9762;&#x662F;&#x65B0;&#x9875;&#x9762;&#xFF0C;&#x4E0D;&#x5728;&#x7F13;&#x5B58;&#x4E2D;&#xFF0C;&#x6240;&#x4EE5;&#x6DD8;&#x6C70;&#x6389; B &#x9875;&#x9762;&#x3002;&#x63D2;&#x5165; H &#x9875;&#x9762;&#xFF0C;H &#x9875;&#x9762;&#x662F;&#x65B0;&#x9875;&#x9762;&#xFF0C;&#x4E0D;&#x5728;&#x7F13;&#x5B58;&#x4E2D;&#xFF0C;&#x6240;&#x4EE5;&#x6DD8;&#x6C70;&#x6389; D &#x9875;&#x9762;&#x3002;&#x63D2;&#x5165; E &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53D1;&#x73B0;&#x7F13;&#x5B58;&#x4E2D;&#x6709; E &#x9875;&#x9762;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x9700;&#x8981;&#x628A; E &#x9875;&#x9762;&#x653E;&#x5230;&#x9996;&#x4F4D;&#x3002;&#x63D2;&#x5165; I &#x9875;&#x9762;&#xFF0C;I &#x9875;&#x9762;&#x662F;&#x65B0;&#x9875;&#x9762;&#xFF0C;&#x4E0D;&#x5728;&#x7F13;&#x5B58;&#x4E2D;&#xFF0C;&#x6240;&#x4EE5;&#x6DD8;&#x6C70;&#x6389; F &#x9875;&#x9762;&#x3002;</p>
<p>&#x53EF;&#x4EE5;&#x53D1;&#x73B0;&#xFF0C;<strong>LRU &#x66F4;&#x65B0;&#x548C;&#x63D2;&#x5165;&#x65B0;&#x9875;&#x9762;&#x90FD;&#x53D1;&#x751F;&#x5728;&#x94FE;&#x8868;&#x9996;&#xFF0C;&#x5220;&#x9664;&#x9875;&#x9762;&#x90FD;&#x53D1;&#x751F;&#x5728;&#x94FE;&#x8868;&#x5C3E;</strong>&#x3002;</p>
<p>LRU &#x8981;&#x6C42;&#x67E5;&#x8BE2;&#x5C3D;&#x91CF;&#x9AD8;&#x6548;&#xFF0C;O(1) &#x5185;&#x67E5;&#x8BE2;&#x3002;&#x90A3;&#x80AF;&#x5B9A;&#x9009;&#x7528; map &#x67E5;&#x8BE2;&#x3002;&#x4FEE;&#x6539;&#xFF0C;&#x5220;&#x9664;&#x4E5F;&#x8981;&#x5C3D;&#x91CF; O(1) &#x5B8C;&#x6210;&#x3002;&#x641C;&#x5BFB;&#x5E38;&#x89C1;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x94FE;&#x8868;&#xFF0C;&#x6808;&#xFF0C;&#x961F;&#x5217;&#xFF0C;&#x6811;&#xFF0C;&#x56FE;&#x3002;&#x6811;&#x548C;&#x56FE;&#x6392;&#x9664;&#xFF0C;&#x6808;&#x548C;&#x961F;&#x5217;&#x65E0;&#x6CD5;&#x4EFB;&#x610F;&#x67E5;&#x8BE2;&#x4E2D;&#x95F4;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x4E5F;&#x6392;&#x9664;&#x3002;&#x6240;&#x4EE5;&#x9009;&#x7528;&#x94FE;&#x8868;&#x6765;&#x5B9E;&#x73B0;&#x3002;&#x4F46;&#x662F;&#x5982;&#x679C;&#x9009;&#x7528;&#x5355;&#x94FE;&#x8868;&#xFF0C;&#x5220;&#x9664;&#x8FD9;&#x4E2A;&#x7ED3;&#x70B9;&#xFF0C;&#x9700;&#x8981; O(n) &#x904D;&#x5386;&#x4E00;&#x904D;&#x627E;&#x5230;&#x524D;&#x9A71;&#x7ED3;&#x70B9;&#x3002;&#x6240;&#x4EE5;&#x9009;&#x7528;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;&#x5728;&#x5220;&#x9664;&#x7684;&#x65F6;&#x5019;&#x4E5F;&#x80FD; O(1) &#x5B8C;&#x6210;&#x3002;</p>
<p>&#x7531;&#x4E8E; Go &#x7684; container &#x5305;&#x4E2D;&#x7684; list &#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x662F;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x590D;&#x7528;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x5B9A;&#x4E49; LRUCache &#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">import &quot;container/list&quot;

type LRUCache struct {
    Cap  int
    Keys map[int]*list.Element
    List *list.List
}

type pair struct {
    K, V int
}

func Constructor(capacity int) LRUCache {
    return LRUCache{
        Cap: capacity,
        Keys: make(map[int]*list.Element),
        List: list.New(),
    }
}

</code></pre>
<p>&#x8FD9;&#x91CC;&#x9700;&#x8981;&#x89E3;&#x91CA; 2 &#x4E2A;&#x95EE;&#x9898;&#xFF0C;list &#x4E2D;&#x7684;&#x503C;&#x5B58;&#x7684;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;pair &#x8FD9;&#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x6709;&#x4EC0;&#x4E48;&#x7528;&#xFF1F;</p>
<pre><code class="language-go">type Element struct {
	// Next and previous pointers in the doubly-linked list of elements.
	// To simplify the implementation, internally a list l is implemented
	// as a ring, such that &amp;l.root is both the next element of the last
	// list element (l.Back()) and the previous element of the first list
	// element (l.Front()).
	next, prev *Element

	// The list to which this element belongs.
	list *List

	// The value stored with this element.
	Value interface{}
}
</code></pre>
<p>&#x5728; container/list &#x4E2D;&#xFF0C;&#x8FD9;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x6BCF;&#x4E2A;&#x7ED3;&#x70B9;&#x7684;&#x7C7B;&#x578B;&#x662F; Element&#x3002;Element &#x4E2D;&#x5B58;&#x4E86; 4 &#x4E2A;&#x503C;&#xFF0C;&#x524D;&#x9A71;&#x548C;&#x540E;&#x7EE7;&#x7ED3;&#x70B9;&#xFF0C;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x5934;&#x7ED3;&#x70B9;&#xFF0C;value &#x503C;&#x3002;&#x8FD9;&#x91CC;&#x7684; value &#x662F; interface &#x7C7B;&#x578B;&#x3002;&#x7B14;&#x8005;&#x5728;&#x8FD9;&#x4E2A; value &#x91CC;&#x9762;&#x5B58;&#x4E86; pair &#x8FD9;&#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x3002;&#x8FD9;&#x5C31;&#x89E3;&#x91CA;&#x4E86; list &#x91CC;&#x9762;&#x5B58;&#x7684;&#x662F;&#x4EC0;&#x4E48;&#x6570;&#x636E;&#x3002;</p>
<p>&#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x5B58; pair &#x5462;&#xFF1F;&#x5355;&#x5355;&#x6307;&#x5B58; v &#x4E0D;&#x884C;&#x4E48;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD8;&#x8981;&#x5B58;&#x4E00;&#x4EFD; key &#xFF1F;&#x539F;&#x56E0;&#x662F;&#x5728; LRUCache &#x6267;&#x884C;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x7EF4;&#x62A4; 2 &#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x4E00;&#x4E2A;&#x662F; map&#xFF0C;&#x4E00;&#x4E2A;&#x662F;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x3002;&#x5728;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x5220;&#x9664;&#x6DD8;&#x6C70;&#x51FA;&#x53BB;&#x7684; value&#xFF0C;&#x5728; map &#x4E2D;&#x5220;&#x9664;&#x6DD8;&#x6C70;&#x51FA;&#x53BB; value &#x5BF9;&#x5E94;&#x7684; key&#x3002;&#x5982;&#x679C;&#x5728;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684; value &#x4E2D;&#x4E0D;&#x5B58;&#x50A8; key&#xFF0C;&#x90A3;&#x4E48;&#x518D;&#x5220;&#x9664; map &#x4E2D;&#x7684; key &#x7684;&#x65F6;&#x5019;&#x6709;&#x70B9;&#x9EBB;&#x70E6;&#x3002;&#x5982;&#x679C;&#x786C;&#x8981;&#x5B9E;&#x73B0;&#xFF0C;&#x9700;&#x8981;&#x5148;&#x83B7;&#x53D6;&#x5230;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x8FD9;&#x4E2A;&#x7ED3;&#x70B9; Element &#x7684;&#x5730;&#x5740;&#x3002;&#x7136;&#x540E;&#x904D;&#x5386; map&#xFF0C;&#x5728; map &#x4E2D;&#x627E;&#x5230;&#x5B58;&#x6709;&#x8FD9;&#x4E2A; Element &#x5143;&#x7D20;&#x5730;&#x5740;&#x5BF9;&#x5E94;&#x7684; key&#xFF0C;&#x518D;&#x5220;&#x9664;&#x3002;&#x8FD9;&#x6837;&#x505A;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x662F; O(n)&#xFF0C;&#x505A;&#x4E0D;&#x5230; O(1)&#x3002;&#x6240;&#x4EE5;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x7684; Value &#x9700;&#x8981;&#x5B58;&#x50A8;&#x8FD9;&#x4E2A; pair&#x3002;</p>
<p>LRUCache &#x7684; Get &#x64CD;&#x4F5C;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5728; map &#x4E2D;&#x76F4;&#x63A5;&#x8BFB;&#x53D6;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x7ED3;&#x70B9;&#x3002;&#x5982;&#x679C; map &#x4E2D;&#x5B58;&#x5728;&#xFF0C;&#x5C06;&#x5B83;&#x79FB;&#x52A8;&#x5230;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x8868;&#x5934;&#xFF0C;&#x5E76;&#x8FD4;&#x56DE;&#x5B83;&#x7684; value &#x503C;&#xFF0C;&#x5982;&#x679C; map &#x4E2D;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x8FD4;&#x56DE; -1&#x3002;</p>
<pre><code class="language-go">func (c *LRUCache) Get(key int) int {
	if el, ok := c.Keys[key]; ok {
		c.List.MoveToFront(el)
		return el.Value.(pair).V
	}
	return -1
}
</code></pre>
<p>LRUCache &#x7684; Put &#x64CD;&#x4F5C;&#x4E5F;&#x4E0D;&#x96BE;&#x3002;&#x5148;&#x67E5;&#x8BE2; map &#x4E2D;&#x662F;&#x5426;&#x5B58;&#x5728; key&#xFF0C;&#x5982;&#x679C;&#x5B58;&#x5728;&#xFF0C;&#x66F4;&#x65B0;&#x5B83;&#x7684; value&#xFF0C;&#x5E76;&#x4E14;&#x628A;&#x8BE5;&#x7ED3;&#x70B9;&#x79FB;&#x5230;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x8868;&#x5934;&#x3002;&#x5982;&#x679C; map &#x4E2D;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x65B0;&#x5EFA;&#x8FD9;&#x4E2A;&#x7ED3;&#x70B9;&#x52A0;&#x5165;&#x5230;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x548C; map &#x4E2D;&#x3002;&#x6700;&#x540E;&#x522B;&#x5FD8;&#x8BB0;&#x8FD8;&#x9700;&#x8981;&#x7EF4;&#x62A4;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684; cap&#xFF0C;&#x5982;&#x679C;&#x8D85;&#x8FC7; cap&#xFF0C;&#x9700;&#x8981;&#x6DD8;&#x6C70;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x7ED3;&#x70B9;&#xFF0C;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x5220;&#x9664;&#x8FD9;&#x4E2A;&#x7ED3;&#x70B9;&#xFF0C;map &#x4E2D;&#x5220;&#x6389;&#x8FD9;&#x4E2A;&#x7ED3;&#x70B9;&#x5BF9;&#x5E94;&#x7684; key&#x3002;</p>
<pre><code class="language-go">func (c *LRUCache) Put(key int, value int) {
	if el, ok := c.Keys[key]; ok {
		el.Value = pair{K: key, V: value}
		c.List.MoveToFront(el)
	} else {
		el := c.List.PushFront(pair{K: key, V: value})
		c.Keys[key] = el
	}
	if c.List.Len() &gt; c.Cap {
		el := c.List.Back()
		c.List.Remove(el)
		delete(c.Keys, el.Value.(pair).K)
	}
}

</code></pre>
<p>&#x603B;&#x7ED3;&#xFF0C;LRU &#x662F;&#x7531;&#x4E00;&#x4E2A; map &#x548C;&#x4E00;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7EC4;&#x6210;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;map &#x4E2D; key &#x5BF9;&#x5E94;&#x7684; value &#x662F;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x7ED3;&#x70B9;&#x3002;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x5B58;&#x50A8; key-value &#x7684; pair&#x3002;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x8868;&#x9996;&#x66F4;&#x65B0;&#x7F13;&#x5B58;&#xFF0C;&#x8868;&#x5C3E;&#x6DD8;&#x6C70;&#x7F13;&#x5B58;&#x3002;&#x5982;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_9.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x63D0;&#x4EA4;&#x4EE3;&#x7801;&#x4EE5;&#x540E;&#xFF0C;&#x6210;&#x529F;&#x901A;&#x8FC7;&#x6240;&#x6709;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_4_.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>LFU &#x662F; Least Frequently Used &#x7684;&#x7F29;&#x5199;&#xFF0C;&#x5373;&#x6700;&#x4E0D;&#x7ECF;&#x5E38;&#x6700;&#x5C11;&#x4F7F;&#x7528;&#xFF0C;&#x4E5F;&#x662F;&#x4E00;&#x79CD;&#x5E38;&#x7528;&#x7684;&#x9875;&#x9762;&#x7F6E;&#x6362;&#x7B97;&#x6CD5;&#xFF0C;&#x9009;&#x62E9;&#x8BBF;&#x95EE;&#x8BA1;&#x6570;&#x5668;&#x6700;&#x5C0F;&#x7684;&#x9875;&#x9762;&#x4E88;&#x4EE5;&#x6DD8;&#x6C70;&#x3002;&#x5982;&#x4E0B;&#x56FE;&#xFF0C;&#x7F13;&#x5B58;&#x4E2D;&#x6BCF;&#x4E2A;&#x9875;&#x9762;&#x5E26;&#x4E00;&#x4E2A;&#x8BBF;&#x95EE;&#x8BA1;&#x6570;&#x5668;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_3.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x6839;&#x636E; LFU &#x7684;&#x7B56;&#x7565;&#xFF0C;&#x6BCF;&#x8BBF;&#x95EE;&#x4E00;&#x6B21;&#x90FD;&#x8981;&#x66F4;&#x65B0;&#x8BBF;&#x95EE;&#x8BA1;&#x6570;&#x5668;&#x3002;&#x5F53;&#x63D2;&#x5165; B &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53D1;&#x73B0;&#x7F13;&#x5B58;&#x4E2D;&#x6709; B&#xFF0C;&#x6240;&#x4EE5;&#x589E;&#x52A0;&#x8BBF;&#x95EE;&#x8BA1;&#x6570;&#x5668;&#x7684;&#x8BA1;&#x6570;&#xFF0C;&#x5E76;&#x628A; B &#x79FB;&#x52A8;&#x5230;&#x8BBF;&#x95EE;&#x8BA1;&#x6570;&#x5668;&#x4ECE;&#x5927;&#x5230;&#x5C0F;&#x6392;&#x5E8F;&#x7684;&#x5730;&#x65B9;&#x3002;&#x518D;&#x63D2;&#x5165; D&#xFF0C;&#x540C;&#x7406;&#x5148;&#x66F4;&#x65B0;&#x8BA1;&#x6570;&#x5668;&#xFF0C;&#x518D;&#x79FB;&#x52A8;&#x5230;&#x5B83;&#x6392;&#x5E8F;&#x4EE5;&#x540E;&#x7684;&#x4F4D;&#x7F6E;&#x3002;&#x5F53;&#x63D2;&#x5165; F &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7F13;&#x5B58;&#x4E2D;&#x4E0D;&#x5B58;&#x5728; F&#xFF0C;&#x6240;&#x4EE5;&#x6DD8;&#x6C70;&#x8BA1;&#x6570;&#x5668;&#x6700;&#x5C0F;&#x7684;&#x9875;&#x9762;&#x7684;&#x9875;&#x9762;&#xFF0C;&#x6240;&#x4EE5;&#x6DD8;&#x6C70; A &#x9875;&#x9762;&#x3002;&#x6B64;&#x65F6; F &#x6392;&#x5728;&#x6700;&#x4E0B;&#x9762;&#xFF0C;&#x8BA1;&#x6570;&#x4E3A; 1&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_8_.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x8FD9;&#x91CC;&#x6709;&#x4E00;&#x4E2A;&#x6BD4; LRU &#x7279;&#x522B;&#x7684;&#x5730;&#x65B9;&#x3002;&#x5982;&#x679C;&#x6DD8;&#x6C70;&#x7684;&#x9875;&#x9762;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x6709;&#x591A;&#x4E2A;&#x76F8;&#x540C;&#x7684;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#xFF0C;&#x9009;&#x62E9;&#x6700;&#x9760;&#x5C3E;&#x90E8;&#x7684;&#x3002;&#x5982;&#x4E0A;&#x56FE;&#x4E2D;&#xFF0C;A&#x3001;B&#x3001;C &#x4E09;&#x8005;&#x7684;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x76F8;&#x540C;&#xFF0C;&#x90FD;&#x662F; 1 &#x6B21;&#x3002;&#x8981;&#x63D2;&#x5165; F&#xFF0C;F &#x4E0D;&#x5728;&#x7F13;&#x5B58;&#x4E2D;&#xFF0C;&#x6B64;&#x65F6;&#x8981;&#x6DD8;&#x6C70; A &#x9875;&#x9762;&#x3002;F &#x662F;&#x65B0;&#x63D2;&#x5165;&#x7684;&#x9875;&#x9762;&#xFF0C;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x4E3A; 1&#xFF0C;&#x6392;&#x5728; C &#x7684;&#x524D;&#x9762;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x76F8;&#x540C;&#x7684;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#xFF0C;&#x6309;&#x7167;&#x65B0;&#x65E7;&#x987A;&#x5E8F;&#x6392;&#x5217;&#xFF0C;&#x6DD8;&#x6C70;&#x6389;&#x6700;&#x65E7;&#x7684;&#x9875;&#x9762;&#x3002;&#x8FD9;&#x4E00;&#x70B9;&#x662F;&#x548C; LRU &#x6700;&#x5927;&#x7684;&#x4E0D;&#x540C;&#x7684;&#x5730;&#x65B9;&#x3002;</p>
<p>&#x53EF;&#x4EE5;&#x53D1;&#x73B0;&#xFF0C;<strong>LFU &#x66F4;&#x65B0;&#x548C;&#x63D2;&#x5165;&#x65B0;&#x9875;&#x9762;&#x53EF;&#x4EE5;&#x53D1;&#x751F;&#x5728;&#x94FE;&#x8868;&#x4E2D;&#x4EFB;&#x610F;&#x4F4D;&#x7F6E;&#xFF0C;&#x5220;&#x9664;&#x9875;&#x9762;&#x90FD;&#x53D1;&#x751F;&#x5728;&#x8868;&#x5C3E;</strong>&#x3002;</p>
<p>LFU &#x540C;&#x6837;&#x8981;&#x6C42;&#x67E5;&#x8BE2;&#x5C3D;&#x91CF;&#x9AD8;&#x6548;&#xFF0C;O(1) &#x5185;&#x67E5;&#x8BE2;&#x3002;&#x4F9D;&#x65E7;&#x9009;&#x7528; map &#x67E5;&#x8BE2;&#x3002;&#x4FEE;&#x6539;&#x548C;&#x5220;&#x9664;&#x4E5F;&#x9700;&#x8981; O(1) &#x5B8C;&#x6210;&#xFF0C;&#x4F9D;&#x65E7;&#x9009;&#x7528;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;&#x7EE7;&#x7EED;&#x590D;&#x7528; container &#x5305;&#x4E2D;&#x7684; list &#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;LFU &#x9700;&#x8981;&#x8BB0;&#x5F55;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#xFF0C;&#x6240;&#x4EE5;&#x6BCF;&#x4E2A;&#x7ED3;&#x70B9;&#x9664;&#x4E86;&#x5B58;&#x50A8; key&#xFF0C;value&#xFF0C;&#x9700;&#x8981;&#x518D;&#x591A;&#x5B58;&#x50A8; frequency &#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x3002;</p>
<p>&#x8FD8;&#x6709; 1 &#x4E2A;&#x95EE;&#x9898;&#x9700;&#x8981;&#x8003;&#x8651;&#xFF0C;&#x4E00;&#x4E2A;&#x662F;&#x5982;&#x4F55;&#x6309;&#x9891;&#x6B21;&#x6392;&#x5E8F;&#xFF1F;&#x76F8;&#x540C;&#x9891;&#x6B21;&#xFF0C;&#x6309;&#x7167;&#x5148;&#x540E;&#x987A;&#x5E8F;&#x6392;&#x5E8F;&#x3002;&#x5982;&#x679C;&#x4F60;&#x5F00;&#x59CB;&#x8003;&#x8651;&#x6392;&#x5E8F;&#x7B97;&#x6CD5;&#x7684;&#x8BDD;&#xFF0C;&#x601D;&#x8003;&#x65B9;&#x5411;&#x5C31;&#x504F;&#x79BB;&#x6700;&#x4F73;&#x7B54;&#x6848;&#x4E86;&#x3002;&#x6392;&#x5E8F;&#x81F3;&#x5C11; O(nlogn)&#x3002;&#x91CD;&#x65B0;&#x56DE;&#x770B; LFU &#x7684;&#x5DE5;&#x4F5C;&#x539F;&#x7406;&#xFF0C;&#x4F1A;&#x53D1;&#x73B0;&#x5B83;&#x53EA;&#x5173;&#x5FC3;&#x6700;&#x5C0F;&#x9891;&#x6B21;&#x3002;&#x5176;&#x4ED6;&#x9891;&#x6B21;&#x4E4B;&#x95F4;&#x7684;&#x987A;&#x5E8F;&#x5E76;&#x4E0D;&#x5173;&#x5FC3;&#x3002;&#x6240;&#x4EE5;&#x4E0D;&#x9700;&#x8981;&#x6392;&#x5E8F;&#x3002;&#x7528;&#x4E00;&#x4E2A; min &#x53D8;&#x91CF;&#x4FDD;&#x5B58;&#x6700;&#x5C0F;&#x9891;&#x6B21;&#xFF0C;&#x6DD8;&#x6C70;&#x65F6;&#x8BFB;&#x53D6;&#x8FD9;&#x4E2A;&#x6700;&#x5C0F;&#x503C;&#x80FD;&#x627E;&#x5230;&#x8981;&#x5220;&#x9664;&#x7684;&#x7ED3;&#x70B9;&#x3002;&#x76F8;&#x540C;&#x9891;&#x6B21;&#x6309;&#x7167;&#x5148;&#x540E;&#x987A;&#x5E8F;&#x6392;&#x5217;&#xFF0C;&#x8FD9;&#x4E2A;&#x9700;&#x6C42;&#x8FD8;&#x662F;&#x7528;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x5B9E;&#x73B0;&#xFF0C;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x63D2;&#x5165;&#x7684;&#x987A;&#x5E8F;&#x4F53;&#x73B0;&#x4E86;&#x7ED3;&#x70B9;&#x7684;&#x5148;&#x540E;&#x987A;&#x5E8F;&#x3002;&#x76F8;&#x540C;&#x9891;&#x6B21;&#x5BF9;&#x5E94;&#x4E00;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x4E2A;&#x76F8;&#x540C;&#x9891;&#x6B21;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x80FD;&#x6709;&#x591A;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x3002;&#x7528;&#x4E00;&#x4E2A; map &#x7EF4;&#x62A4;&#x8BBF;&#x95EE;&#x9891;&#x6B21;&#x548C;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x5BF9;&#x5E94;&#x5173;&#x7CFB;&#x3002;&#x5220;&#x9664;&#x6700;&#x5C0F;&#x9891;&#x6B21;&#x65F6;&#xFF0C;&#x901A;&#x8FC7; min &#x627E;&#x5230;&#x6700;&#x5C0F;&#x9891;&#x6B21;&#xFF0C;&#x7136;&#x540E;&#x518D;&#x8FD9;&#x4E2A; map &#x4E2D;&#x627E;&#x5230;&#x8FD9;&#x4E2A;&#x9891;&#x6B21;&#x5BF9;&#x5E94;&#x7684;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;&#x5728;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x627E;&#x5230;&#x6700;&#x65E7;&#x7684;&#x90A3;&#x4E2A;&#x7ED3;&#x70B9;&#x5220;&#x9664;&#x3002;&#x8FD9;&#x5C31;&#x89E3;&#x51B3;&#x4E86; LFU &#x5220;&#x9664;&#x64CD;&#x4F5C;&#x3002;</p>
<p>LFU &#x7684;&#x66F4;&#x65B0;&#x64CD;&#x4F5C;&#x548C; LRU &#x7C7B;&#x4F3C;&#xFF0C;&#x4E5F;&#x9700;&#x8981;&#x7528;&#x4E00;&#x4E2A; map &#x4FDD;&#x5B58; key &#x548C;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7ED3;&#x70B9;&#x7684;&#x6620;&#x5C04;&#x5173;&#x7CFB;&#x3002;&#x8FD9;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7ED3;&#x70B9;&#x4E2D;&#x5B58;&#x50A8;&#x7684;&#x662F; key-value-frequency &#x4E09;&#x4E2A;&#x5143;&#x7D20;&#x7684;&#x5143;&#x7EC4;&#x3002;&#x8FD9;&#x6837;&#x901A;&#x8FC7;&#x7ED3;&#x70B9;&#x4E2D;&#x7684; key &#x548C; frequency &#x53EF;&#x4EE5;&#x53CD;&#x8FC7;&#x6765;&#x5220;&#x9664; map &#x4E2D;&#x7684; key&#x3002;</p>
<p>&#x5B9A;&#x4E49; LFUCache &#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">
import &quot;container/list&quot;

type LFUCache struct {
	nodes    map[int]*list.Element
	lists    map[int]*list.List
	capacity int
	min      int
}

type node struct {
	key       int
	value     int
	frequency int
}

func Constructor(capacity int) LFUCache {
	return LFUCache{nodes: make(map[int]*list.Element),
		lists:    make(map[int]*list.List),
		capacity: capacity,
		min:      0,
	}
}

</code></pre>
<p>LFUCache &#x7684; Get &#x64CD;&#x4F5C;&#x6D89;&#x53CA;&#x66F4;&#x65B0; frequency &#x503C;&#x548C; 2 &#x4E2A; map&#x3002;&#x5728; nodes map &#x4E2D;&#x901A;&#x8FC7; key &#x83B7;&#x53D6;&#x5230;&#x7ED3;&#x70B9;&#x4FE1;&#x606F;&#x3002;&#x5728; lists &#x5220;&#x9664;&#x7ED3;&#x70B9;&#x5F53;&#x524D; frequency &#x7ED3;&#x70B9;&#x3002;&#x5220;&#x5B8C;&#x4EE5;&#x540E; frequency ++&#x3002;&#x65B0;&#x7684; frequency &#x5982;&#x679C;&#x5728; lists &#x4E2D;&#x5B58;&#x5728;&#xFF0C;&#x6DFB;&#x52A0;&#x5230;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x8868;&#x9996;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x9700;&#x8981;&#x65B0;&#x5EFA;&#x4E00;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x5E76;&#x628A;&#x5F53;&#x524D;&#x7ED3;&#x70B9;&#x52A0;&#x5230;&#x8868;&#x9996;&#x3002;&#x518D;&#x66F4;&#x65B0;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7ED3;&#x70B9;&#x4F5C;&#x4E3A; value &#x7684; map&#x3002;&#x6700;&#x540E;&#x66F4;&#x65B0; min &#x503C;&#xFF0C;&#x5224;&#x65AD;&#x8001;&#x7684; frequency &#x5BF9;&#x5E94;&#x7684;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x4E3A;&#x7A7A;&#xFF0C;&#x5982;&#x679C;&#x7A7A;&#x4E86;&#xFF0C;min++&#x3002;</p>
<pre><code class="language-go">func (this *LFUCache) Get(key int) int {
	value, ok := this.nodes[key]
	if !ok {
		return -1
	}
	currentNode := value.Value.(*node)
	this.lists[currentNode.frequency].Remove(value)
	currentNode.frequency++
	if _, ok := this.lists[currentNode.frequency]; !ok {
		this.lists[currentNode.frequency] = list.New()
	}
	newList := this.lists[currentNode.frequency]
	newNode := newList.PushFront(currentNode)
	this.nodes[key] = newNode
	if currentNode.frequency-1 == this.min &amp;&amp; this.lists[currentNode.frequency-1].Len() == 0 {
		this.min++
	}
	return currentNode.value
}

</code></pre>
<p>LFU &#x7684; Put &#x64CD;&#x4F5C;&#x903B;&#x8F91;&#x7A0D;&#x5FAE;&#x591A;&#x4E00;&#x70B9;&#x3002;&#x5148;&#x5728; nodes map &#x4E2D;&#x67E5;&#x8BE2; key &#x662F;&#x5426;&#x5B58;&#x5728;&#xFF0C;&#x5982;&#x679C;&#x5B58;&#x5728;&#xFF0C;&#x83B7;&#x53D6;&#x8FD9;&#x4E2A;&#x7ED3;&#x70B9;&#xFF0C;&#x66F4;&#x65B0;&#x5B83;&#x7684; value &#x503C;&#xFF0C;&#x7136;&#x540E;&#x624B;&#x52A8;&#x8C03;&#x7528;&#x4E00;&#x6B21; Get &#x64CD;&#x4F5C;&#xFF0C;&#x56E0;&#x4E3A;&#x4E0B;&#x9762;&#x7684;&#x66F4;&#x65B0;&#x903B;&#x8F91;&#x548C; Get &#x64CD;&#x4F5C;&#x4E00;&#x81F4;&#x3002;&#x5982;&#x679C; map &#x4E2D;&#x4E0D;&#x5B58;&#x5728;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x8FDB;&#x884C;&#x63D2;&#x5165;&#x6216;&#x8005;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#x3002;&#x5224;&#x65AD; capacity &#x662F;&#x5426;&#x88C5;&#x6EE1;&#xFF0C;&#x5982;&#x679C;&#x88C5;&#x6EE1;&#xFF0C;&#x6267;&#x884C;&#x5220;&#x9664;&#x64CD;&#x4F5C;&#x3002;&#x5728; min &#x5BF9;&#x5E94;&#x7684;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x4E2D;&#x5220;&#x9664;&#x8868;&#x5C3E;&#x7684;&#x7ED3;&#x70B9;&#xFF0C;&#x5BF9;&#x5E94;&#x7684;&#x4E5F;&#x8981;&#x5220;&#x9664; nodes map &#x4E2D;&#x7684;&#x952E;&#x503C;&#x3002;</p>
<p>&#x7531;&#x4E8E;&#x65B0;&#x63D2;&#x5165;&#x7684;&#x9875;&#x9762;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x4E00;&#x5B9A;&#x4E3A; 1&#xFF0C;&#x6240;&#x4EE5; min &#x6B64;&#x65F6;&#x7F6E;&#x4E3A; 1&#x3002;&#x65B0;&#x5EFA;&#x7ED3;&#x70B9;&#xFF0C;&#x63D2;&#x5165;&#x5230; 2 &#x4E2A; map &#x4E2D;&#x3002;</p>
<pre><code class="language-go">
func (this *LFUCache) Put(key int, value int) {
	if this.capacity == 0 {
		return
	}
	// &#x5982;&#x679C;&#x5B58;&#x5728;&#xFF0C;&#x66F4;&#x65B0;&#x8BBF;&#x95EE;&#x6B21;&#x6570;
	if currentValue, ok := this.nodes[key]; ok {
		currentNode := currentValue.Value.(*node)
		currentNode.value = value
		this.Get(key)
		return
	}
	// &#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x4E14;&#x7F13;&#x5B58;&#x6EE1;&#x4E86;&#xFF0C;&#x9700;&#x8981;&#x5220;&#x9664;
	if this.capacity == len(this.nodes) {
		currentList := this.lists[this.min]
		backNode := currentList.Back()
		delete(this.nodes, backNode.Value.(*node).key)
		currentList.Remove(backNode)
	}
	// &#x65B0;&#x5EFA;&#x7ED3;&#x70B9;&#xFF0C;&#x63D2;&#x5165;&#x5230; 2 &#x4E2A; map &#x4E2D;
	this.min = 1
	currentNode := &amp;node{
		key:       key,
		value:     value,
		frequency: 1,
	}
	if _, ok := this.lists[1]; !ok {
		this.lists[1] = list.New()
	}
	newList := this.lists[1]
	newNode := newList.PushFront(currentNode)
	this.nodes[key] = newNode
}

</code></pre>
<p>&#x603B;&#x7ED3;&#xFF0C;LFU &#x662F;&#x7531;&#x4E24;&#x4E2A; map &#x548C;&#x4E00;&#x4E2A; min &#x6307;&#x9488;&#x7EC4;&#x6210;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x4E00;&#x4E2A; map &#x4E2D; key &#x5B58;&#x7684;&#x662F;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#xFF0C;&#x5BF9;&#x5E94;&#x7684; value &#x662F;&#x4E00;&#x4E2A;&#x4E2A;&#x7684;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;&#x6B64;&#x5904;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x4F5C;&#x7528;&#x662F;&#x5728;&#x76F8;&#x540C;&#x9891;&#x6B21;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6DD8;&#x6C70;&#x8868;&#x5C3E;&#x6700;&#x65E7;&#x7684;&#x90A3;&#x4E2A;&#x9875;&#x9762;&#x3002;&#x53E6;&#x4E00;&#x4E2A; map &#x4E2D; key &#x5BF9;&#x5E94;&#x7684; value &#x662F;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x7ED3;&#x70B9;&#xFF0C;&#x7ED3;&#x70B9;&#x4E2D;&#x6BD4; LRU &#x591A;&#x5B58;&#x50A8;&#x4E86;&#x4E00;&#x4E2A;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x7684;&#x503C;&#xFF0C;&#x5373;&#x7ED3;&#x70B9;&#x4E2D;&#x5B58;&#x50A8; key-value-frequency &#x7684;&#x5143;&#x7EC4;&#x3002;&#x6B64;&#x5904;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7684;&#x4F5C;&#x7528;&#x548C; LRU &#x662F;&#x7C7B;&#x4F3C;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x6839;&#x636E; map &#x4E2D;&#x7684; key &#x66F4;&#x65B0;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7ED3;&#x70B9;&#x4E2D;&#x7684; value &#x548C; frequency &#x7684;&#x503C;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x6839;&#x636E;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x7ED3;&#x70B9;&#x4E2D;&#x7684; key &#x548C; frequency &#x53CD;&#x5411;&#x66F4;&#x65B0; map &#x4E2D;&#x7684;&#x5BF9;&#x5E94;&#x5173;&#x7CFB;&#x3002;&#x5982;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_10_1.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x63D0;&#x4EA4;&#x4EE3;&#x7801;&#x4EE5;&#x540E;&#xFF0C;&#x6210;&#x529F;&#x901A;&#x8FC7;&#x6240;&#x6709;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_5.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<h2 id="%E8%8D%A3%E8%80%80%E9%BB%84%E9%87%91">&#x8363;&#x8000;&#x9EC4;&#x91D1;</h2>
<p>&#x9762;&#x8BD5;&#x4E2D;&#x5982;&#x679C;&#x7ED9;&#x51FA;&#x4E86;&#x4E0A;&#x9762;&#x9752;&#x94DC;&#x7684;&#x7B54;&#x6848;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x88AB;&#x8FFD;&#x95EE;&#xFF0C;&#x201C;&#x8FD8;&#x6709;&#x6CA1;&#x6709;&#x5176;&#x4ED6;&#x89E3;&#x6CD5;&#xFF1F;&#x201D; &#x867D;&#x7136;&#x76EE;&#x524D;&#x9752;&#x94DC;&#x7684;&#x7B54;&#x6848;&#x5DF2;&#x7ECF;&#x662F;&#x6700;&#x4F18;&#x89E3;&#x4E86;&#xFF0C;&#x4F46;&#x662F;&#x9762;&#x8BD5;&#x5B98;&#x8FD8;&#x60F3;&#x8003;&#x5BDF;&#x591A;&#x89E3;&#x3002;</p>
<p>&#x5148;&#x8003;&#x8651; LRU&#x3002;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x4E0A;&#x60F3;&#x4E0D;&#x5230;&#x5176;&#x4ED6;&#x89E3;&#x6CD5;&#x4E86;&#xFF0C;&#x4F46;&#x4ECE;&#x6253;&#x8D25;&#x7684;&#x767E;&#x5206;&#x6BD4;&#x4E0A;&#xFF0C;&#x770B;&#x4F3C;&#x8FD8;&#x6709;&#x5E38;&#x6570;&#x7684;&#x4F18;&#x5316;&#x7A7A;&#x95F4;&#x3002;&#x7B14;&#x8005;&#x53CD;&#x590D;&#x601D;&#x8003;&#xFF0C;&#x89C9;&#x5F97;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x8FD0;&#x884C;&#x65F6;&#x95F4;&#x53D8;&#x957F;&#x7684;&#x5730;&#x65B9;&#x662F;&#x5728; interface{} &#x7C7B;&#x578B;&#x63A8;&#x65AD;&#xFF0C;&#x5176;&#x4ED6;&#x5730;&#x65B9;&#x5DF2;&#x65E0;&#x4F18;&#x5316;&#x7684;&#x7A7A;&#x95F4;&#x3002;&#x624B;&#x5199;&#x4E00;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x63D0;&#x4EA4;&#x8BD5;&#x8BD5;&#xFF0C;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">
type LRUCache struct {
	head, tail *Node
	keys       map[int]*Node
	capacity   int
}

type Node struct {
	key, val   int
	prev, next *Node
}

func ConstructorLRU(capacity int) LRUCache {
	return LRUCache{keys: make(map[int]*Node), capacity: capacity}
}

func (this *LRUCache) Get(key int) int {
	if node, ok := this.keys[key]; ok {
		this.Remove(node)
		this.Add(node)
		return node.val
	}
	return -1
}

func (this *LRUCache) Put(key int, value int) {
	if node, ok := this.keys[key]; ok {
		node.val = value
		this.Remove(node)
		this.Add(node)
		return
	} else {
		node = &amp;Node{key: key, val: value}
		this.keys[key] = node
		this.Add(node)
	}
	if len(this.keys) &gt; this.capacity {
		delete(this.keys, this.tail.key)
		this.Remove(this.tail)
	}
}

func (this *LRUCache) Add(node *Node) {
	node.prev = nil
	node.next = this.head
	if this.head != nil {
		this.head.prev = node
	}
	this.head = node
	if this.tail == nil {
		this.tail = node
		this.tail.next = nil
	}
}

func (this *LRUCache) Remove(node *Node) {
	if node == this.head {
		this.head = node.next
		if node.next != nil {
			node.next.prev = nil
		}
		node.next = nil
		return
	}
	if node == this.tail {
		this.tail = node.prev
		node.prev.next = nil
		node.prev = nil
		return
	}
	node.prev.next = node.next
	node.next.prev = node.prev
}

</code></pre>
<p>&#x63D0;&#x4EA4;&#x4EE5;&#x540E;&#x8FD8;&#x771F;&#x7684; 100% &#x4E86;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_6.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x7684; LRU &#x672C;&#x8D28;&#x5E76;&#x6CA1;&#x6709;&#x4F18;&#x5316;&#xFF0C;&#x53EA;&#x662F;&#x6362;&#x4E86;&#x4E00;&#x4E2A;&#x5199;&#x6CD5;&#xFF0C;&#x6CA1;&#x6709;&#x7528; container &#x5305;&#x800C;&#x5DF2;&#x3002;</p>
<p>LFU &#x7684;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x601D;&#x8DEF;&#x662F;&#x5229;&#x7528; <a href="https://algs4.cs.princeton.edu/24pq/">Index Priority Queue</a> &#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x522B;&#x88AB;&#x540D;&#x5B57;&#x5413;&#x5230;&#xFF0C;Index Priority Queue = map + Priority Queue&#xFF0C;&#x4EC5;&#x6B64;&#x800C;&#x5DF2;&#x3002;</p>
<p>&#x5229;&#x7528; Priority Queue &#x7EF4;&#x62A4;&#x4E00;&#x4E2A;&#x6700;&#x5C0F;&#x5806;&#xFF0C;&#x5806;&#x9876;&#x662F;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x6700;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#x3002;map &#x4E2D;&#x7684; value &#x5B58;&#x50A8;&#x7684;&#x662F;&#x4F18;&#x5148;&#x961F;&#x5217;&#x4E2D;&#x7ED3;&#x70B9;&#x3002;</p>
<pre><code class="language-go">import &quot;container/heap&quot;

type LFUCache struct {
	capacity int
	pq       PriorityQueue
	hash     map[int]*Item
	counter  int
}

func Constructor(capacity int) LFUCache {
	lfu := LFUCache{
		pq:       PriorityQueue{},
		hash:     make(map[int]*Item, capacity),
		capacity: capacity,
	}
	return lfu
}

</code></pre>
<p>Get &#x548C; Put &#x64CD;&#x4F5C;&#x8981;&#x5C3D;&#x91CF;&#x7684;&#x5FEB;&#xFF0C;&#x6709; 2 &#x4E2A;&#x95EE;&#x9898;&#x9700;&#x8981;&#x89E3;&#x51B3;&#x3002;&#x5F53;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x76F8;&#x540C;&#x65F6;&#xFF0C;&#x5982;&#x4F55;&#x5220;&#x9664;&#x6389;&#x6700;&#x4E45;&#x7684;&#x5143;&#x7D20;&#xFF1F;&#x5F53;&#x5143;&#x7D20;&#x7684;&#x8BBF;&#x95EE;&#x6B21;&#x6570;&#x53D1;&#x751F;&#x53D8;&#x5316;&#x65F6;&#xFF0C;&#x5982;&#x4F55;&#x5FEB;&#x901F;&#x8C03;&#x6574;&#x5806;&#xFF1F;&#x4E3A;&#x4E86;&#x89E3;&#x51B3;&#x8FD9; 2 &#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x5B9A;&#x4E49;&#x5982;&#x4E0B;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF1A;</p>
<pre><code class="language-go">// An Item is something we manage in a priority queue.
type Item struct {
	value     int // The value of the item; arbitrary.
	key       int
	frequency int // The priority of the item in the queue.
	count     int // use for evicting the oldest element
	// The index is needed by update and is maintained by the heap.Interface methods.
	index int // The index of the item in the heap.
}

</code></pre>
<p>&#x5806;&#x4E2D;&#x7684;&#x7ED3;&#x70B9;&#x5B58;&#x50A8;&#x8FD9; 5 &#x4E2A;&#x503C;&#x3002;count &#x503C;&#x7528;&#x6765;&#x51B3;&#x5B9A;&#x54EA;&#x4E2A;&#x662F;&#x6700;&#x8001;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x7C7B;&#x4F3C;&#x4E00;&#x4E2A;&#x64CD;&#x4F5C;&#x65F6;&#x95F4;&#x6233;&#x3002;index &#x503C;&#x7528;&#x6765; re-heapify &#x8C03;&#x6574;&#x5806;&#x7684;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5B9E;&#x73B0; PriorityQueue &#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<pre><code class="language-go">// A PriorityQueue implements heap.Interface and holds Items.
type PriorityQueue []*Item

func (pq PriorityQueue) Len() int { return len(pq) }

func (pq PriorityQueue) Less(i, j int) bool {
	// We want Pop to give us the highest, not lowest, priority so we use greater than here.
	if pq[i].frequency == pq[j].frequency {
		return pq[i].count &lt; pq[j].count
	}
	return pq[i].frequency &lt; pq[j].frequency
}

func (pq PriorityQueue) Swap(i, j int) {
	pq[i], pq[j] = pq[j], pq[i]
	pq[i].index = i
	pq[j].index = j
}

func (pq *PriorityQueue) Push(x interface{}) {
	n := len(*pq)
	item := x.(*Item)
	item.index = n
	*pq = append(*pq, item)
}

func (pq *PriorityQueue) Pop() interface{} {
	old := *pq
	n := len(old)
	item := old[n-1]
	old[n-1] = nil  // avoid memory leak
	item.index = -1 // for safety
	*pq = old[0 : n-1]
	return item
}

// update modifies the priority and value of an Item in the queue.
func (pq *PriorityQueue) update(item *Item, value int, frequency int, count int) {
	item.value = value
	item.count = count
	item.frequency = frequency
	heap.Fix(pq, item.index)
}
</code></pre>
<p>&#x5728; Less() &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;frequency &#x4ECE;&#x5C0F;&#x5230;&#x5927;&#x6392;&#x5E8F;&#xFF0C;frequency &#x76F8;&#x540C;&#x7684;&#xFF0C;&#x6309; count &#x4ECE;&#x5C0F;&#x5230;&#x5927;&#x6392;&#x5E8F;&#x3002;&#x6309;&#x7167;&#x4F18;&#x5148;&#x961F;&#x5217;&#x5EFA;&#x5806;&#x89C4;&#x5219;&#xFF0C;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#xFF0C;frequency &#x6700;&#x5C0F;&#x7684;&#x5728;&#x5806;&#x9876;&#xFF0C;&#x76F8;&#x540C;&#x7684; frequency&#xFF0C;count &#x6700;&#x5C0F;&#x7684;&#x8D8A;&#x9760;&#x8FD1;&#x5806;&#x9876;&#x3002;</p>
<p>&#x5728; Swap() &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x8BB0;&#x5F97;&#x8981;&#x66F4;&#x65B0; index &#x503C;&#x3002;&#x5728; Push() &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;&#x63D2;&#x5165;&#x65F6;&#x961F;&#x5217;&#x7684;&#x957F;&#x5EA6;&#x5373;&#x662F;&#x8BE5;&#x5143;&#x7D20;&#x7684; index &#x503C;&#xFF0C;&#x6B64;&#x5904;&#x4E5F;&#x8981;&#x8BB0;&#x5F97;&#x66F4;&#x65B0; index &#x503C;&#x3002;update() &#x65B9;&#x6CD5;&#x8C03;&#x7528; Fix() &#x51FD;&#x6570;&#x3002;Fix() &#x51FD;&#x6570;&#x6BD4;&#x5148; Remove() &#x518D; Push() &#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x503C;&#xFF0C;&#x82B1;&#x9500;&#x8981;&#x5C0F;&#x3002;&#x6240;&#x4EE5;&#x6B64;&#x5904;&#x8C03;&#x7528; Fix() &#x51FD;&#x6570;&#xFF0C;&#x8FD9;&#x4E2A;&#x64CD;&#x4F5C;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x662F; O(log n)&#x3002;</p>
<p>&#x8FD9;&#x6837;&#x5C31;&#x7EF4;&#x62A4;&#x4E86;&#x6700;&#x5C0F; Index Priority Queue&#x3002;Get &#x64CD;&#x4F5C;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF1A;</p>
<pre><code class="language-go">func (this *LFUCache) Get(key int) int {
	if this.capacity == 0 {
		return -1
	}
	if item, ok := this.hash[key]; ok {
		this.counter++
		this.pq.update(item, item.value, item.frequency+1, this.counter)
		return item.value
	}
	return -1
}

</code></pre>
<p>&#x5728; hashmap &#x4E2D;&#x67E5;&#x8BE2; key&#xFF0C;&#x5982;&#x679C;&#x5B58;&#x5728;&#xFF0C;counter &#x65F6;&#x95F4;&#x6233;&#x7D2F;&#x52A0;&#xFF0C;&#x8C03;&#x7528; Priority Queue &#x7684; update &#x65B9;&#x6CD5;&#xFF0C;&#x8C03;&#x6574;&#x5806;&#x3002;</p>
<pre><code class="language-go">func (this *LFUCache) Put(key int, value int) {
	if this.capacity == 0 {
		return
	}
	this.counter++
	// &#x5982;&#x679C;&#x5B58;&#x5728;&#xFF0C;&#x589E;&#x52A0; frequency&#xFF0C;&#x518D;&#x8C03;&#x6574;&#x5806;
	if item, ok := this.hash[key]; ok {
		this.pq.update(item, value, item.frequency+1, this.counter)
		return
	}
	// &#x5982;&#x679C;&#x4E0D;&#x5B58;&#x5728;&#x4E14;&#x7F13;&#x5B58;&#x6EE1;&#x4E86;&#xFF0C;&#x9700;&#x8981;&#x5220;&#x9664;&#x3002;&#x5728; hashmap &#x548C; pq &#x4E2D;&#x5220;&#x9664;&#x3002;
	if len(this.pq) == this.capacity {
		item := heap.Pop(&amp;this.pq).(*Item)
		delete(this.hash, item.key)
	}
	// &#x65B0;&#x5EFA;&#x7ED3;&#x70B9;&#xFF0C;&#x5728; hashmap &#x548C; pq &#x4E2D;&#x6DFB;&#x52A0;&#x3002;
	item := &amp;Item{
		value: value,
		key:   key,
		count: this.counter,
	}
	heap.Push(&amp;this.pq, item)
	this.hash[key] = item
}
</code></pre>
<p>&#x7528;&#x6700;&#x5C0F;&#x5806;&#x5B9E;&#x73B0;&#x7684; LFU&#xFF0C;Put &#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x662F; O(capacity)&#xFF0C;Get &#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x662F; O(capacity)&#xFF0C;&#x4E0D;&#x53CA; 2 &#x4E2A; map &#x5B9E;&#x73B0;&#x7684;&#x7248;&#x672C;&#x3002;&#x5DE7;&#x7684;&#x662F;&#x6700;&#x5C0F;&#x5806;&#x7684;&#x7248;&#x672C;&#x5C45;&#x7136;&#x6253;&#x8D25;&#x4E86; 100%&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_7.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x63D0;&#x4EA4;&#x4EE5;&#x540E;&#xFF0C;LRU &#x548C; LFU &#x90FD;&#x6253;&#x8D25;&#x4E86; 100%&#x3002;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x90FD;&#x5C01;&#x88C5;&#x597D;&#x4E86;&#xFF0C;<a href="https://github.com/halfrost/LeetCode-Go/tree/master/template">&#x5B8C;&#x6574;&#x4EE3;&#x7801;</a>&#x5728; LeetCode-Go &#x4E2D;&#xFF0C;&#x8BB2;&#x89E3;&#x4E5F;&#x66F4;&#x65B0;&#x5230;&#x4E86; &#x300A;LeetCode Cookbook&#x300B;&#x7B2C;&#x4E09;&#x7AE0;&#x7684;<a href="https://books.halfrost.com/leetcode/ChapterThree/LRUCache/">&#x7B2C;&#x4E09;&#x8282; LRUCache</a>&#x548C;<a href="https://books.halfrost.com/leetcode/ChapterThree/LFUCache/">&#x7B2C;&#x56DB;&#x8282; LFUCache</a>&#x4E2D;&#x3002;LRU &#x7684;&#x6700;&#x4F18;&#x89E3;&#x662F; map + &#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF0C;LFU &#x7684;&#x6700;&#x4F18;&#x89E3;&#x662F; 2 &#x4E2A; map + &#x591A;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#x3002;&#x5176;&#x5B9E;&#x70ED;&#x8EAB;&#x521A;&#x521A;&#x7ED3;&#x675F;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x624D;&#x662F;&#x672C;&#x6587;&#x7684;<strong>&#x91CD;&#x70B9;</strong>&#x3002;</p>
<h2 id="%E6%9C%80%E5%BC%BA%E7%8E%8B%E8%80%85">&#x6700;&#x5F3A;&#x738B;&#x8005;</h2>
<p>&#x5728;&#x9762;&#x8BD5;&#x8005;&#x56DE;&#x7B54;&#x51FA;&#x9EC4;&#x91D1;&#x7EA7;&#x7684;&#x95EE;&#x9898;&#x4E86;&#x4EE5;&#x540E;&#xFF0C;&#x9762;&#x8BD5;&#x5B98;&#x53EF;&#x80FD;&#x4F1A;&#x7EE7;&#x7EED;&#x8FFD;&#x95EE;&#x4E00;&#x4E2A;&#x66F4;&#x9AD8;&#x7EA7;&#x7684;&#x95EE;&#x9898;&#x3002;&#x201C;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x4E00;&#x4E2A;&#x9AD8;&#x5E76;&#x53D1;&#x4E14;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x7684; LRU &#x5462;&#xFF1F;&#x201D;&#x3002;&#x9047;&#x5230;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x4E0A;&#x6587;&#x8BA8;&#x8BBA;&#x7684;&#x4EE3;&#x7801;&#x6A21;&#x677F;&#x5C31;&#x5931;&#x6548;&#x4E86;&#x3002;&#x8981;&#x60F3;&#x505A;&#x5230;&#x9AD8;&#x5E76;&#x53D1;&#xFF0C;&#x9700;&#x8981;&#x8003;&#x8651; 2 &#x70B9;&#xFF0C;&#x7B2C;&#x4E00;&#x70B9;&#x5185;&#x5B58;&#x5206;&#x914D;&#x4E0E;&#x56DE;&#x6536; GC &#x4E00;&#x5B9A;&#x8981;&#x5FEB;&#xFF0C;&#x6700;&#x597D;&#x662F; Zero GC &#x5F00;&#x9500;&#xFF0C;&#x7B2C;&#x4E8C;&#x70B9;&#x6267;&#x884C;&#x64CD;&#x4F5C;&#x8017;&#x65F6;&#x6700;&#x5C11;&#x3002;&#x8BE6;&#x7EC6;&#x7684;&#xFF0C;&#x7531;&#x4E8E;&#x8981;&#x505A;&#x5230;&#x9AD8;&#x5E76;&#x53D1;&#xFF0C;&#x77AC;&#x95F4;&#x7684; TPS &#x53EF;&#x80FD;&#x4F1A;&#x5F88;&#x5927;&#xFF0C;&#x6240;&#x4EE5;&#x8981;&#x6700;&#x5FEB;&#x7684;&#x5206;&#x914D;&#x5185;&#x5B58;&#xFF0C;&#x5F00;&#x8F9F;&#x65B0;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x3002;&#x5783;&#x573E;&#x56DE;&#x6536;&#x4E5F;&#x4E0D;&#x80FD;&#x6162;&#xFF0C;&#x5426;&#x5219;&#x5185;&#x5B58;&#x4F1A;&#x66B4;&#x6DA8;&#x3002;&#x9488;&#x5BF9; LRU / LFU &#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x6267;&#x884C;&#x7684;&#x64CD;&#x4F5C;&#x662F; get &#x548C; set&#xFF0C;&#x8017;&#x65F6;&#x9700;&#x8981;&#x6700;&#x5C11;&#x3002;&#x8017;&#x65F6;&#x9AD8;&#x4E86;&#xFF0C;&#x7CFB;&#x7EDF;&#x541E;&#x5410;&#x7387;&#x4F1A;&#x53D7;&#x5230;&#x4E25;&#x91CD;&#x5F71;&#x54CD;&#xFF0C;TPS &#x4E0A;&#x4E0D;&#x53BB;&#x4E86;&#x3002;&#x518D;&#x8005;&#xFF0C;&#x5728;&#x9AD8;&#x5E76;&#x53D1;&#x7684;&#x573A;&#x666F;&#x4E2D;&#xFF0C;&#x4E00;&#x5B9A;&#x4F1A;&#x4FDD;&#x8BC1;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x3002;&#x8FD9;&#x91CC;&#x5C31;&#x9700;&#x8981;&#x7528;&#x5230;&#x9501;&#x3002;&#x6700;&#x7B80;&#x5355;&#x7684;&#x9009;&#x7528;&#x8BFB;&#x5199;&#x9501;&#x3002;&#x4EE5;&#x4E0B;&#x4E3E;&#x4F8B;&#x4EE5; LRUCache &#x4E3A;&#x4F8B;&#x3002;LFUCache &#x539F;&#x7406;&#x7C7B;&#x4F3C;&#x3002;&#xFF08;&#x4EE5;&#x4E0B;&#x4EE3;&#x7801;&#x5148;&#x7ED9;&#x51FA;&#x6539;&#x9020;&#x65B0;&#x589E;&#x7684;&#x90E8;&#x5206;&#xFF0C;&#x6700;&#x540E;&#x518D;&#x7ED9;&#x51FA;&#x5B8C;&#x6574;&#x7248;&#xFF09;</p>
<pre><code class="language-go">type LRUCache struct {
    sync.RWMutex
}

func (c *LRUCache) Get(key int) int {
	c.RLock()
	defer c.RUnlock()
	
	&#x2026;&#x2026;
}

func (c *LRUCache) Put(key int, value int) {
	c.Lock()
  	defer c.Unlock()
  	
	&#x2026;&#x2026;
}

</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x867D;&#x7136;&#x80FD;&#x4FDD;&#x8BC1;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF0C;&#x4F46;&#x662F;&#x5E76;&#x53D1;&#x91CF;&#x5E76;&#x4E0D;&#x9AD8;&#x3002;&#x56E0;&#x4E3A;&#x5728; Put &#x64CD;&#x4F5C;&#x4E2D;&#xFF0C;&#x5199;&#x9501;&#x4F1A;&#x963B;&#x788D;&#x8BFB;&#x9501;&#xFF0C;&#x8FD9;&#x91CC;&#x4F1A;&#x9501;&#x4F4F;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x4F18;&#x5316;&#x601D;&#x8DEF;&#x5F88;&#x6E05;&#x6670;&#xFF0C;&#x62C6;&#x5206;&#x5927;&#x9501;&#xFF0C;&#x8BA9;&#x5199;&#x9501;&#x5C3D;&#x53EF;&#x80FD;&#x7684;&#x5C11;&#x963B;&#x788D;&#x8BFB;&#x9501;&#x3002;&#x4E00;&#x53E5;&#x8BDD;&#x5C31;&#x662F;&#x5C06;&#x9501;&#x9897;&#x7C92;&#x5316;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_27.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5982;&#x4E0A;&#x56FE;&#xFF0C;&#x5C06;&#x4E00;&#x4E2A;&#x5927;&#x7684;&#x4E34;&#x754C;&#x533A;&#x62C6;&#x5206;&#x6210;&#x4E00;&#x4E2A;&#x4E2A;&#x5C0F;&#x7684;&#x4E34;&#x754C;&#x533A;&#x3002;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">
type LRUCache struct {
    sync.RWMutex
    shards map[int]*LRUCacheShard
}

type LRUCacheShard struct {
  	Cap  int
	Keys map[int]*list.Element
	List *list.List
	sync.RWMutex
}

func (c *LRUCache) Get(key int) int {
	shard, ok := c.GetShard(key, false)
	if ok == false {
		return -1
	}
	shard.RLock()
	defer shard.RUnlock()
	
	&#x2026;&#x2026;
}

func (c *LRUCache) Put(key int, value int) {
  	shard, _ := c.GetShard(key, true)
	shard.Lock()
	defer shard.Unlock()
	
	&#x2026;&#x2026;
}

func (c *LRUCache) GetShard(key int, create bool) (shard *LRUCacheShard, ok bool) {
	hasher := sha1.New()
	hasher.Write([]byte(key))
	shardKey := fmt.Sprintf(&quot;%x&quot;, hasher.Sum(nil))[0:2]

	c.lock.RLock()
	shard, ok = c.shards[shardKey]
	c.lock.RUnlock()

	if ok || !create {
		return
	}

	//only time we need to write lock
	c.lock.Lock()
	defer c.lock.Unlock()
	//check again in case the group was created in this short time
	shard, ok = c.shards[shardKey]
	if ok {
		return
	}

	shard = &amp;LRUCacheShard{
		Keys: make(map[int]*list.Element),
		List: list.New(),
	}
	c.shards[shardKey] = shard
	ok = true
	return
}

</code></pre>
<p>&#x901A;&#x8FC7;&#x4E0A;&#x8FF0;&#x7684;&#x6539;&#x9020;&#xFF0C;&#x5229;&#x7528;&#x54C8;&#x5E0C;&#x628A;&#x539F;&#x6765;&#x7684; LRUCache &#x5206;&#x4E3A;&#x4E86; 256 &#x4E2A;&#x5206;&#x7247;(2^8)&#x3002;&#x5E76;&#x4E14;&#x5199;&#x9501;&#x9501;&#x4F4F;&#x53EA;&#x53D1;&#x751F;&#x5728;&#x5206;&#x7247;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x65F6;&#x5019;&#x3002;&#x4E00;&#x65E6;&#x5206;&#x7247;&#x88AB;&#x521B;&#x5EFA;&#x4E86;&#xFF0C;&#x4E4B;&#x540E;&#x90FD;&#x662F;&#x8BFB;&#x9501;&#x3002;&#x8FD9;&#x91CC;&#x4F9D;&#x65E7;&#x662F;&#x5C0F;&#x74F6;&#x9888;&#xFF0C;&#x7EE7;&#x7EED;&#x4F18;&#x5316;&#xFF0C;&#x6D88;&#x9664;&#x6389;&#x8FD9;&#x91CC;&#x7684;&#x5199;&#x9501;&#x3002;&#x4F18;&#x5316;&#x4EE3;&#x7801;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5728;&#x521B;&#x5EFA;&#x7684;&#x65F6;&#x5019;&#x521B;&#x5EFA;&#x6240;&#x6709;&#x5206;&#x7247;&#x3002;</p>
<pre><code class="language-go">
func New(capacity int) LRUCache {
	shards := make(map[string]*LRUCacheShard, 256)
	for i := 0; i &lt; 256; i++ {
		shards[fmt.Sprintf(&quot;%02x&quot;, i)] = &amp;LRUCacheShard{
			Cap:  capacity,
			Keys: make(map[int]*list.Element),
			List: list.New(),
		}
	}
	return LRUCache{
		shards: shards,
	}
}

func (c *LRUCache) Get(key int) int {
	shard := c.GetShard(key)
	shard.RLock()
	defer shard.RUnlock()
	
	&#x2026;&#x2026;
}

func (c *LRUCache) Put(key int, value int) {
  	shard := c.GetShard(key)
	shard.Lock()
	defer shard.Unlock()
	
	&#x2026;&#x2026;
}

func (c *LRUCache) GetShard(key int) (shard *LRUCacheShard) {
  hasher := sha1.New()
  hasher.Write([]byte(key))
  shardKey :=  fmt.Sprintf(&quot;%x&quot;, hasher.Sum(nil))[0:2]
  return c.shards[shardKey]
}

</code></pre>
<p>&#x5230;&#x8FD9;&#x91CC;&#xFF0C;&#x5927;&#x7684;&#x4E34;&#x754C;&#x533A;&#x5DF2;&#x7ECF;&#x88AB;&#x62C6;&#x5206;&#x6210;&#x7EC6;&#x9897;&#x7C92;&#x5EA6;&#x4E86;&#x3002;&#x5728;&#x7EC6;&#x7C92;&#x5EA6;&#x7684;&#x9501;&#x5185;&#x90E8;&#xFF0C;&#x8FD8;&#x5305;&#x542B;&#x53CC;&#x94FE;&#x8868;&#x7ED3;&#x70B9;&#x7684;&#x64CD;&#x4F5C;&#xFF0C;&#x5BF9;&#x7ED3;&#x70B9;&#x7684;&#x64CD;&#x4F5C;&#x6D89;&#x53CA;&#x5230;&#x9501;&#x7ADE;&#x4E89;&#x3002;&#x6210;&#x719F;&#x7684;&#x7F13;&#x5B58;&#x7CFB;&#x7EDF;&#x5982; memcached&#xFF0C;&#x4F7F;&#x7528;&#x7684;&#x662F;&#x5168;&#x5C40;&#x7684; LRU &#x94FE;&#x8868;&#x9501;&#xFF0C;&#x800C; Redis &#x662F;&#x5355;&#x7EBF;&#x7A0B;&#x7684;&#x6240;&#x4EE5;&#x4E0D;&#x9700;&#x8981;&#x8003;&#x8651;&#x5E76;&#x53D1;&#x7684;&#x95EE;&#x9898;&#x3002;&#x56DE;&#x5230; LRU&#xFF0C;&#x6BCF;&#x4E2A; Get &#x64CD;&#x4F5C;&#x9700;&#x8981;&#x8BFB;&#x53D6; key &#x503C;&#x5BF9;&#x5E94;&#x7684; value&#xFF0C;&#x9700;&#x8981;&#x8BFB;&#x9501;&#x3002;&#x4E0E;&#x6B64;&#x540C;&#x65F6;&#xFF0C;Get &#x64CD;&#x4F5C;&#x4E5F;&#x6D89;&#x53CA;&#x5230;&#x79FB;&#x52A8;&#x6700;&#x8FD1;&#x6700;&#x5E38;&#x4F7F;&#x7528;&#x7684;&#x7ED3;&#x70B9;&#xFF0C;&#x9700;&#x8981;&#x5199;&#x9501;&#x3002;Set &#x64CD;&#x4F5C;&#x53EA;&#x6D89;&#x53CA;&#x5199;&#x9501;&#x3002;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x4E00;&#x70B9;&#xFF0C;Get &#x548C; Set &#x5148;&#x540E;&#x6267;&#x884C;&#x987A;&#x5E8F;&#x975E;&#x5E38;&#x5173;&#x952E;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5148; get &#x4E00;&#x4E2A;&#x4E0D;&#x5B58;&#x5728;&#x7684; key&#xFF0C;&#x8FD4;&#x56DE; nil&#xFF0C;&#x518D; set &#x8FD9;&#x4E2A; key&#x3002;&#x5982;&#x679C;&#x5148; set &#x8FD9;&#x4E2A; key&#xFF0C;&#x518D; get &#x8FD9;&#x4E2A;key&#xFF0C;&#x8FD4;&#x56DE;&#x7684;&#x5C31;&#x662F;&#x4E0D;&#x662F; nil&#xFF0C;&#x800C;&#x662F;&#x5BF9;&#x5E94;&#x7684; value&#x3002;&#x6240;&#x4EE5;&#x5728;&#x4FDD;&#x8BC1;&#x9501;&#x5B89;&#x5168;(&#x4E0D;&#x53D1;&#x751F;&#x6B7B;&#x9501;)&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x4FDD;&#x8BC1;&#x6BCF;&#x4E2A;&#x64CD;&#x4F5C;&#x65F6;&#x5E8F;&#x7684;&#x6B63;&#x786E;&#x6027;&#x3002;&#x80FD;&#x540C;&#x65F6;&#x6EE1;&#x8DB3;&#x8FD9; 2 &#x4E2A;&#x6761;&#x4EF6;&#x7684;&#x975E;&#x5E26;&#x7F13;&#x51B2;&#x7684; channel &#x83AB;&#x5C5E;&#x3002;&#x5148;&#x6765;&#x770B;&#x770B;&#x6D88;&#x8D39; channel &#x901A;&#x9053;&#x91CC;&#x9762;&#x6570;&#x636E;&#x7684;&#x5904;&#x7406;&#x903B;&#x8F91;&#xFF1A;</p>
<pre><code class="language-go">func (c *CLRUCache) doMove(el *list.Element) bool {
	if el.Value.(Pair).cmd == MoveToFront {
		c.list.MoveToFront(el)
		return false
	}
	newel := c.list.PushFront(el.Value.(Pair))
	c.bucket(el.Value.(Pair).key).update(el.Value.(Pair).key, newel)
	return true
}
</code></pre>
<p>&#x8FD8;&#x503C;&#x5F97;&#x4E00;&#x63D0;&#x7684;&#x662F;&#xFF0C;get &#x548C; set &#x7684;&#x5199;&#x64CD;&#x4F5C;&#x6709; 2 &#x79CD;&#x7C7B;&#x578B;&#xFF0C;&#x4E00;&#x79CD;&#x662F; MoveToFront&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x79CD;&#x662F;&#x5F53;&#x7ED3;&#x70B9;&#x4E0D;&#x5B58;&#x5728;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x5148;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x7ED3;&#x70B9;&#xFF0C;&#x5E76;&#x79FB;&#x52A8;&#x5230;&#x5934;&#x90E8;&#x3002;&#x8FD9;&#x4E2A;&#x64CD;&#x4F5C;&#x5373; PushFront&#x3002;&#x7B14;&#x8005;&#x8FD9;&#x91CC;&#x5728;&#x7ED3;&#x70B9;&#x4E2D;&#x52A0;&#x5165;&#x4E86; cmd &#x6807;&#x8BC6;&#xFF0C;&#x9ED8;&#x8BA4;&#x503C;&#x662F; MoveToFront&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_26.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x76EE;&#x524D;&#x4E3A;&#x6B62;&#xFF0C;&#x4E0B;&#x4E00;&#x6B65;&#x7684;&#x4F18;&#x5316;&#x601D;&#x8DEF;&#x786E;&#x5B9A;&#x4F7F;&#x7528;&#x5E26;&#x7F13;&#x51B2;&#x7684; channel &#x4E86;&#x3002;&#x7528;&#x51E0;&#x4E2A;&#x5462;&#xFF1F;&#x7B54;&#x6848;&#x662F;&#x7528; 2 &#x4E2A;&#x3002;&#x9664;&#x53BB;&#x4E0A;&#x9762;&#x8BA8;&#x8BBA;&#x7684;&#x5199;&#x5165;&#x64CD;&#x4F5C;&#xFF0C;&#x8FD8;&#x8981;&#x7BA1;&#x7406; remove &#x64CD;&#x4F5C;&#x3002;&#x7531;&#x4E8E; LRU &#x903B;&#x8F91;&#x7684;&#x7279;&#x6B8A;&#x6027;&#xFF0C;&#x5B83;&#x4FDD;&#x8BC1;&#x4E86;&#x79FB;&#x52A8;&#x7ED3;&#x70B9;&#x548C;&#x79FB;&#x9664;&#x7ED3;&#x70B9;&#x4E00;&#x5B9A;&#x5206;&#x5F00;&#x5728;&#x53CC;&#x94FE;&#x8868;&#x4E24;&#x7AEF;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x5728;&#x53CC;&#x94FE;&#x8868;&#x4E24;&#x8FB9;&#x540C;&#x65F6;&#x64CD;&#x4F5C;&#xFF0C;&#x76F8;&#x4E92;&#x4E0D;&#x5F71;&#x54CD;&#x3002;&#x53CC;&#x94FE;&#x8868;&#x7684;&#x4E34;&#x754C;&#x533A;&#x8303;&#x56F4;&#x53EF;&#x4EE5;&#x8FDB;&#x4E00;&#x6B65;&#x7684;&#x7F29;&#x5C0F;&#xFF0C;&#x53EF;&#x4EE5;&#x7F29;&#x5C0F;&#x5230;&#x7ED3;&#x70B9;&#x7EA7;&#x3002;&#x6700;&#x7EC8;&#x65B9;&#x6848;&#x5C31;&#x5B9A;&#x4E0B;&#x6765;&#x4E86;&#x3002;&#x7528; 2 &#x4E2A;&#x5E26;&#x7F13;&#x51B2;&#x7684; channel&#xFF0C;&#x5206;&#x522B;&#x5904;&#x7406;&#x79FB;&#x52A8;&#x7ED3;&#x70B9;&#x548C;&#x5220;&#x9664;&#x7ED3;&#x70B9;&#xFF0C;&#x8FD9;&#x4E24;&#x4E2A; channel &#x53EF;&#x4EE5;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x534F;&#x7A0B;&#x4E2D;&#x4E00;&#x8D77;&#x5904;&#x7406;&#xFF0C;&#x4E92;&#x4E0D;&#x5F71;&#x54CD;&#x3002;</p>
<pre><code class="language-go">func (c *CLRUCache) worker() {
	defer close(c.control)
	for {
		select {
		case el, ok := &lt;-c.movePairs:
			if ok == false {
				goto clean
			}
			if c.doMove(el) &amp;&amp; c.list.Len() &gt; c.cap {
				el := c.list.Back()
				c.list.Remove(el)
				c.bucket(el.Value.(Pair).key).delete(el.Value.(Pair).key)
			}
		case el := &lt;-c.deletePairs:
			c.list.Remove(el)
		case control := &lt;-c.control:
			switch msg := control.(type) {
			case clear:
				for _, bucket := range c.buckets {
					bucket.clear()
				}
				c.list = list.New()
				msg.done &lt;- struct{}{}
			}
		}
	}
clean:
	for {
		select {
		case el := &lt;-c.deletePairs:
			c.list.Remove(el)
		default:
			close(c.deletePairs)
			return
		}
	}
}
</code></pre>
<p>&#x6700;&#x7EC8;&#x5B8C;&#x6574;&#x7684;&#x4EE3;&#x7801;&#x653E;&#x5728;<a href="https://github.com/halfrost/LeetCode-Go/blob/master/template/CLRUCache.go">&#x8FD9;&#x91CC;</a>&#x4E86;&#x3002;&#x6700;&#x540E;&#x7B80;&#x5355;&#x7684;&#x8DD1;&#x4E00;&#x4E0B; Benchmark &#x770B;&#x770B;&#x6027;&#x80FD;&#x5982;&#x4F55;&#x3002;</p>
<blockquote>
<p>&#x4EE5;&#x4E0B;&#x6027;&#x80FD;&#x6D4B;&#x8BD5;&#x90E8;&#x5206;&#x662F;&#x9762;&#x8BD5;&#x7ED3;&#x675F;&#x540E;&#xFF0C;&#x7B14;&#x8005;&#x6D4B;&#x8BD5;&#x7684;&#x3002;&#x9762;&#x8BD5;&#x65F6;&#x5199;&#x5B8C;&#x4EE3;&#x7801;&#xFF0C;&#x5E76;&#x6CA1;&#x6709;&#x5F53;&#x573A; Benchmark&#x3002;</p>
</blockquote>
<pre><code class="language-go">go test -bench BenchmarkGetAndPut1 -run none -benchmem -cpuprofile cpuprofile.out -memprofile memprofile.out -cpu=8goos: darwin
goarch: amd64
pkg: github.com/halfrost/LeetCode-Go/template
BenchmarkGetAndPut1-8            368578              2474 ns/op             530 B/op         14 allocs/op
PASS
ok      github.com/halfrost/LeetCode-Go/template        1.022s

</code></pre>
<p>BenchmarkGetAndPut2 &#x53EA;&#x662F;&#x7B80;&#x5355;&#x7684;&#x5168;&#x5C40;&#x52A0;&#x9501;&#xFF0C;&#x4F1A;&#x6709;&#x6B7B;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x65B9;&#x6848;&#x4E00;&#x7684;&#x6027;&#x80FD;&#x8FD8;&#x884C;&#xFF0C;368578 &#x6B21;&#x5FAA;&#x73AF;&#x5E73;&#x5747;&#x51FA;&#x6765;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x5E73;&#x5747;&#x4E00;&#x6B21; Get/Set &#x9700;&#x8981; 2474 ns&#xFF0C;&#x90A3;&#x4E48; TPS &#x5927;&#x7EA6;&#x662F; 300K/s&#xFF0C;&#x53EF;&#x4EE5;&#x6EE1;&#x8DB3;&#x4E00;&#x822C;&#x9AD8;&#x5E76;&#x53D1;&#x7684;&#x9700;&#x6C42;&#x3002;</p>
<p>&#x6700;&#x540E;&#x770B;&#x770B;&#x8FD9;&#x4E2A;&#x7248;&#x672C;&#x4E0B;&#x7684; CPU &#x6D88;&#x8017;&#x60C5;&#x51B5;&#xFF0C;&#x7B26;&#x5408;&#x9884;&#x671F;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_11_0.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5185;&#x5B58;&#x5206;&#x914D;&#x60C5;&#x51B5;&#xFF0C;&#x4E5F;&#x7B26;&#x5408;&#x9884;&#x671F;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_12_0.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x81F3;&#x6B64;&#xFF0C;&#x4F60;&#x5DF2;&#x7ECF;&#x662F;&#x738B;&#x8005;&#x4E86;&#x3002;</p>
<h2 id="%E8%8D%A3%E8%80%80%E7%8E%8B%E8%80%85">&#x8363;&#x8000;&#x738B;&#x8005;</h2>
<p>&#x8FD9;&#x91CC;&#x662F;&#x9644;&#x52A0;&#x9898;&#x90E8;&#x5206;&#x3002;&#x9762;&#x8BD5;&#x5B98;&#x95EE;&#x5230;&#x8FD9;&#x91CC;&#x5C31;&#x548C; LRU/LFU &#x76F4;&#x63A5;&#x5173;&#x7CFB;&#x4E0D;&#x5927;&#x4E86;&#xFF0C;&#x66F4;&#x591A;&#x7684;&#x8003;&#x5BDF;&#x7684;&#x662F;&#x5982;&#x4F55;&#x8BBE;&#x8BA1;&#x4E00;&#x4E2A;&#x9AD8;&#x5E76;&#x53D1;&#x7684; Cache&#x3002;&#x7B14;&#x8005;&#x4E4B;&#x6240;&#x4EE5;&#x5728;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x6700;&#x540E;&#x63D0;&#x4E00;&#x7B14;&#xFF0C;&#x662F;&#x60F3;&#x7ED9;&#x8BFB;&#x8005;&#x6269;&#x5C55;&#x601D;&#x7EF4;&#x3002;&#x9762;&#x8BD5;&#x5B98;&#x4F1A;&#x9488;&#x5BF9;&#x4F60;&#x7ED9;&#x51FA;&#x7684;&#x9AD8;&#x5E76;&#x53D1;&#x7248;&#x7684; LRU &#x7EE7;&#x7EED;&#x95EE;&#xFF0C;&#x201C;&#x4F60;&#x89C9;&#x5F97;&#x4F60;&#x5199;&#x7684;&#x8FD9;&#x4E2A;&#x7248;&#x672C;&#x7F3A;&#x70B9;&#x5728;&#x54EA;&#x91CC;&#xFF1F;&#x548C;&#x771F;&#x6B63;&#x7684; Cache &#x6BD4;&#xFF0C;&#x8FD8;&#x6709;&#x54EA;&#x4E9B;&#x6B20;&#x7F3A;&#xFF1F;&#x201D;</p>
<p>&#x5728;&#x4E0A;&#x4E00;&#x8282;&#x201C;&#x6700;&#x5F3A;&#x738B;&#x8005;&#x201D;&#x4E2D;&#xFF0C;&#x7C97;&#x7565;&#x7684;&#x5B9E;&#x73B0;&#x4E86;&#x4E00;&#x4E2A;&#x9AD8;&#x5E76;&#x53D1;&#x7684; LRU&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x4E2A;&#x65B9;&#x6848;&#x8FD8;&#x4E0D;&#x662F;&#x6700;&#x5B8C;&#x7F8E;&#x7684;&#x3002;&#x5F53;&#x9AD8;&#x5E76;&#x53D1;&#x9AD8;&#x5230;&#x4E00;&#x4E2A;&#x4E34;&#x754C;&#x503C;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5373; Get &#x8BF7;&#x6C42;&#x7684;&#x901F;&#x5EA6;&#x8FBE;&#x5230; Go &#x5185;&#x5B58;&#x56DE;&#x6536;&#x901F;&#x5EA6;&#x7684;&#x51E0;&#x767E;&#x500D;&#xFF0C;&#x51E0;&#x4E07;&#x500D;&#x7684;&#x65F6;&#x5019;&#x3002;bucket &#x5206;&#x7247;&#x88AB;&#x6E05;&#x7A7A;&#xFF0C;&#x8BD5;&#x56FE;&#x8BBF;&#x95EE;&#x8BE5;&#x5206;&#x7247;&#x4E2D;&#x7684; key &#x7684; goroutine &#x5F00;&#x59CB;&#x5206;&#x914D;&#x5185;&#x5B58;&#xFF0C;&#x800C;&#x5148;&#x524D;&#x7684;&#x5185;&#x5B58;&#x4ECD;&#x672A;&#x5B8C;&#x5168;&#x91CA;&#x653E;&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4;&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x91CF;&#x6FC0;&#x589E;&#x548C; OOM &#x5D29;&#x6E83;&#x3002;&#x6240;&#x4EE5;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x7684;&#x6027;&#x80FD;&#x4E0D;&#x80FD;&#x968F;&#x5185;&#x6838;&#x6570;&#x91CF;&#x5F88;&#x597D;&#x5730;&#x6269;&#x5C55;&#x3002;</p>
<p>&#x53E6;&#x5916;&#x8FD9;&#x79CD;&#x7C97;&#x7565;&#x7684;&#x65B9;&#x5F0F;&#x662F;&#x4EE5;&#x7F13;&#x5B58;&#x6570;&#x76EE;&#x4F5C;&#x4E3A; Cap &#x7684;&#xFF0C;&#x6CA1;&#x6709;&#x8003;&#x8651;&#x6BCF;&#x4E2A; value &#x7684;&#x5927;&#x5C0F;&#x3002;&#x4EE5;&#x7F13;&#x5B58;&#x6570;&#x76EE;&#x4F5C;&#x4E3A;&#x57FA;&#x51C6;&#xFF0C;&#x662F;&#x6CA1;&#x6CD5;&#x9650;&#x5236;&#x4F4F;&#x5185;&#x5B58;&#x5927;&#x5C0F;&#x7684;&#x3002;&#x5982;&#x679C;&#x9AD8;&#x8D1F;&#x8F7D;&#x7684;&#x4E1A;&#x52A1;&#xFF0C;&#x8BBE;&#x7F6E;&#x5927;&#x7684; Cap&#xFF0C;&#x6781;&#x7AEF;&#x7684;&#x8BB2;&#xFF0C;&#x6BCF;&#x4E2A; value &#x90FD;&#x975E;&#x5E38;&#x5927;&#xFF0C;&#x51E0;&#x5341;&#x4E2A; MB&#xFF0C;&#x6574;&#x4F53;&#x5185;&#x5B58;&#x6D88;&#x8017;&#x53EF;&#x80FD;&#x4E0A;&#x767E; GB&#x3002;&#x5982;&#x679C;&#x662F;&#x4F4E;&#x8D1F;&#x8F7D;&#x7684;&#x4E1A;&#x52A1;&#xFF0C;&#x8BBE;&#x7F6E;&#x5F88;&#x5C0F;&#x7684; Cap&#xFF0C;&#x6781;&#x7AEF;&#x60C5;&#x51B5;&#xFF0C;&#x6BCF;&#x4E2A; value &#x7279;&#x522B;&#x5C0F;&#x3002;&#x603B;&#x5185;&#x5B58;&#x5927;&#x5C0F;&#x53EF;&#x80FD;&#x5728; 1KB&#x3002;&#x8FD9;&#x6837;&#x770B;&#xFF0C;&#x5185;&#x5B58;&#x4E0A;&#x9650;&#x548C;&#x4E0B;&#x9650;&#x6D6E;&#x52A8;&#x592A;&#x5927;&#x4E86;&#xFF0C;&#x65E0;&#x6CD5;&#x6298;&#x4E2D;&#x9650;&#x5236;&#x3002;</p>
<p>&#x6B20;&#x7F3A;&#x7684;&#x5206;&#x4E3A; 2 &#x90E8;&#x5206;&#xFF0C;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x529F;&#x80FD;&#x6027;&#xFF0C;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x6027;&#x80FD;&#x3002;&#x529F;&#x80FD;&#x6027;&#x65B9;&#x9762;&#x6B20;&#x7F3A; TTL&#xFF0C;&#x6301;&#x4E45;&#x5316;&#x3002;TTL &#x662F;&#x8FC7;&#x671F;&#x65F6;&#x95F4;&#xFF0C;&#x5230;&#x65F6;&#x95F4;&#x9700;&#x8981;&#x5220;&#x9664; key&#x3002;&#x6301;&#x4E45;&#x5316;&#x662F;&#x5C06;&#x7F13;&#x5B58;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x4FDD;&#x5B58;&#x81F3;&#x6587;&#x4EF6;&#x4E2D;&#xFF0C;&#x6216;&#x8005;&#x542F;&#x52A8;&#x7684;&#x65F6;&#x5019;&#x4ECE;&#x6587;&#x4EF6;&#x4E2D;&#x8BFB;&#x53D6;&#x3002;</p>
<p>&#x6027;&#x80FD;&#x65B9;&#x9762;&#x6B20;&#x7F3A;&#x7684;&#x662F;&#x9AD8;&#x6548;&#x7684; hash &#x7B97;&#x6CD5;&#xFF0C;&#x9AD8;&#x547D;&#x4E2D;&#x7387;&#xFF0C;&#x5185;&#x5B58;&#x9650;&#x5236;&#xFF0C;&#x53EF;&#x4F38;&#x7F29;&#x6027;&#x3002;</p>
<p>&#x9AD8;&#x6548;&#x7684; hash &#x7B97;&#x6CD5;&#x6307;&#x7684;&#x662F;&#x7C7B;&#x4F3C; AES Hash&#xFF0C;&#x9488;&#x5BF9; CPU &#x662F;&#x5426;&#x652F;&#x6301; AES &#x6307;&#x4EE4;&#x96C6;&#x8FDB;&#x884C;&#x4E86;&#x5224;&#x65AD;&#xFF0C;&#x5F53; CPU &#x652F;&#x6301; AES &#x6307;&#x4EE4;&#x96C6;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B83;&#x4F1A;&#x9009;&#x7528; AES Hash &#x7B97;&#x6CD5;&#x3002;&#x4E00;&#x4E9B;&#x9AD8;&#x6548;&#x7684; hash &#x7B97;&#x6CD5;&#x7528;&#x6C47;&#x7F16;&#x8BED;&#x8A00;&#x5B9E;&#x73B0;&#x7684;&#x3002;</p>
<p>&#x9AD8;&#x547D;&#x4E2D;&#x7387;&#x65B9;&#x9762;&#xFF0C;&#x53EF;&#x4EE5;&#x53C2;&#x8003; <a href="https://dgraph.io/blog/refs/bp_wrapper.pdf">BP-Wrapper: A System Framework Making Any<br>
Replacement Algorithms (Almost) Lock Contention Free</a> &#x8FD9;&#x7BC7;&#x8BBA;&#x6587;&#xFF0C;&#x5728;&#x8FD9;&#x7BC7;&#x8BBA;&#x6587;&#x91CC;&#x9762;&#x63D0;&#x51FA;&#x4E86; 2 &#x79CD;&#x65B9;&#x5F0F;&#xFF1A;prefetching &#x548C; batching&#x3002;&#x7B80;&#x5355;&#x8BF4;&#x4E00;&#x4E0B; batching &#x7684;&#x65B9;&#x5F0F;&#x3002;&#x5728;&#x7B49;&#x5F85;&#x4E34;&#x754C;&#x533A;&#x4E4B;&#x524D;&#xFF0C;&#x5148;&#x586B;&#x6EE1; ring buffer&#x3002;&#x5982;&#x8BE5;&#x8BBA;&#x6587;&#x6240;&#x8FF0;&#xFF0C;&#x501F;&#x7528; ring buffer &#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#xFF0C;&#x51E0;&#x4E4E;&#x6CA1;&#x6709;&#x5F00;&#x9500;&#xFF0C;&#x4ECE;&#x800C;&#x5927;&#x5927;&#x964D;&#x4F4E;&#x4E86;&#x7ADE;&#x4E89;&#x3002;&#x5B9E;&#x73B0; ring buffer &#x53EF;&#x4EE5;&#x8003;&#x8651;&#x4F7F;&#x7528; sync.Pool &#x800C;&#x4E0D;&#x662F;&#x5176;&#x4ED6;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF08;&#x5207;&#x7247;&#xFF0C;&#x5E26;&#x533A;&#x4E92;&#x65A5;&#x9501;&#x7B49;&#xFF09;&#xFF0C;&#x539F;&#x56E0;&#x662F;&#x6027;&#x80FD;&#x4F18;&#x52BF;&#x4E3B;&#x8981;&#x662F;&#x7531;&#x4E8E;&#x7EBF;&#x7A0B;&#x672C;&#x5730;&#x5B58;&#x50A8;&#x7684;&#x5185;&#x90E8;&#x4F7F;&#x7528;&#xFF0C;&#x800C;&#x5176;&#x4ED6;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x6CA1;&#x6709;&#x8FD9;&#x76F8;&#x5173;&#x7684; API&#x3002;</p>
<p>&#x5185;&#x5B58;&#x9650;&#x5236;&#x3002;&#x65E0;&#x9650;&#x5927;&#x7684;&#x7F13;&#x5B58;&#x5B9E;&#x9645;&#x4E0A;&#x662F;&#x4E0D;&#x53EF;&#x80FD;&#x7684;&#x3002;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x5FC5;&#x987B;&#x6709;&#x5927;&#x5C0F;&#x9650;&#x5236;&#x3002;&#x5982;&#x4F55;&#x5236;&#x5B9A;&#x4E00;&#x5957;&#x9AD8;&#x6548;&#x7684;&#x6DD8;&#x6C70;&#x7684;&#x7B56;&#x7565;&#x5C31;&#x53D8;&#x7684;&#x5F88;&#x5173;&#x952E;&#x3002;LRU &#x8FD9;&#x4E2A;&#x6DD8;&#x6C70;&#x7B56;&#x7565;&#x597D;&#x4E48;&#xFF1F;&#x9488;&#x5BF9;&#x4E0D;&#x540C;&#x7684;&#x4F7F;&#x7528;&#x573A;&#x666F;&#xFF0C;LRU &#x5E76;&#x4E0D;&#x662F;&#x6700;&#x597D;&#x7684;&#xFF0C;&#x6709;&#x4E9B;&#x573A;&#x666F;&#x4E0B; LFU &#x66F4;&#x52A0;&#x9002;&#x5408;&#x3002;&#x8FD9;&#x91CC;&#x6709;&#x4E00;&#x7BC7;&#x8BBA;&#x6587; <a href="https://dgraph.io/blog/refs/TinyLFU%20-%20A%20Highly%20Efficient%20Cache%20Admission%20Policy.pdf">TinyLFU: A Highly Efficient Cache Admission Policy</a>&#xFF0C;&#x8FD9;&#x7BC7;&#x8BBA;&#x6587;&#x4E2D;&#x8BA8;&#x8BBA;&#x4E86;&#x4E00;&#x79CD;&#x9AD8;&#x6548;&#x7F13;&#x5B58;&#x51C6;&#x5165;&#x7B56;&#x7565;&#x3002;TinyLFU &#x662F;&#x4E00;&#x79CD;&#x4E0E;&#x6DD8;&#x6C70;&#x65E0;&#x5173;&#x7684;&#x51C6;&#x5165;&#x7B56;&#x7565;&#xFF0C;&#x76EE;&#x7684;&#x662F;&#x5728;&#x4EE5;&#x5F88;&#x5C11;&#x7684;&#x5185;&#x5B58;&#x5F00;&#x9500;&#x6765;&#x63D0;&#x9AD8;&#x547D;&#x4E2D;&#x7387;&#x3002;&#x4E3B;&#x8981;&#x601D;&#x60F3;&#x662F;&#x4EC5;&#x5728;&#x65B0;&#x7684; key &#x7684;&#x4F30;&#x8BA1;&#x503C;&#x9AD8;&#x4E8E;&#x6B63;&#x8981;&#x88AB;&#x9010;&#x51FA;&#x7684; key &#x7684;&#x4F30;&#x8BA1;&#x503C;&#x65F6;&#x624D;&#x5141;&#x8BB8;&#x8FDB;&#x5165; Cache&#x3002;&#x5F53;&#x7F13;&#x5B58;&#x8FBE;&#x5230;&#x5BB9;&#x91CF;&#x65F6;&#xFF0C;&#x6BCF;&#x4E2A;&#x65B0;&#x7684; key &#x90FD;&#x5E94;&#x66FF;&#x6362;&#x7F13;&#x5B58;&#x4E2D;&#x5B58;&#x5728;&#x7684;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x5BC6;&#x94A5;&#x3002;&#x5E76;&#x4E14;&#xFF0C;&#x4F20;&#x5165; key &#x7684;&#x4F30;&#x503C;&#x5E94;&#x8BE5;&#x6BD4;&#x88AB;&#x6DD8;&#x6C70;&#x51FA;&#x53BB;&#x7684; key &#x4F30;&#x503C;&#x9AD8;&#x3002;&#x5426;&#x5219;&#x65B0;&#x7684; key &#x7981;&#x6B62;&#x8FDB;&#x5165;&#x7F13;&#x5B58;&#x4E2D;&#x3002;&#x8FD9;&#x6837;&#x505A;&#x4E5F;&#x4E3A;&#x4E86;&#x4FDD;&#x8BC1;&#x9AD8;&#x547D;&#x4E2D;&#x7387;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_25_0.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5728;&#x5C06;&#x65B0; key &#x653E;&#x5165; TinyLFU &#x4E2D;&#x4E4B;&#x524D;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; bloom &#x8FC7;&#x6EE4;&#x5668;&#x9996;&#x5148;&#x68C0;&#x67E5;&#x8BE5;&#x5BC6;&#x94A5;&#x662F;&#x5426;&#x4E4B;&#x524D;&#x5DF2;&#x88AB;&#x67E5;&#x770B;&#x8FC7;&#x3002;&#x4EC5;&#x5F53; key &#x5728;&#x5E03;&#x9686;&#x8FC7;&#x6EE4;&#x5668;&#x4E2D;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x65F6;&#xFF0C;&#x624D;&#x5C06;&#x5176;&#x63D2;&#x5165; TinyLFU&#x3002;&#x8FD9;&#x662F;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x957F;&#x65F6;&#x95F4;&#x4E0D;&#x88AB;&#x770B;&#x5230;&#x7684;&#x957F;&#x5C3E;&#x952E;&#x6C61;&#x67D3; TinyLFU&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_23.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5173;&#x4E8E;&#x5230;&#x5E95;&#x9009;&#x62E9; LRU &#x8FD8;&#x662F; LFU &#x8FD8;&#x662F; LRU + LFU &#xFF0C;&#x8FD9;&#x4E2A;&#x8BDD;&#x9898;&#x6BD4;&#x8F83;&#x5927;&#xFF0C;&#x5C55;&#x5F00;&#x8BA8;&#x8BBA;&#x53C8;&#x53EF;&#x4EE5;&#x5199;&#x597D;&#x51E0;&#x7BC7;&#x65B0;&#x6587;&#x7AE0;&#x4E86;&#x3002;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x770B;&#x770B;&#x8FD9;&#x7BC7;&#x8BBA;&#x6587;&#xFF0C;<a href="https://dgraph.io/blog/refs/Adaptive%20Software%20Cache%20Management.pdf">Adaptive Software Cache Management</a> &#xFF0C;&#x4ECE;&#x6807;&#x9898;&#x4E0A;&#x770B;&#xFF0C;&#x81EA;&#x9002;&#x5E94;&#x7684;&#x8F6F;&#x4EF6;&#x7F13;&#x5B58;&#x7BA1;&#x7406;&#xFF0C;&#x5C31;&#x80FD;&#x770B;&#x51FA;&#x5B83;&#x5728;&#x63A2;&#x8BA8;&#x4E86;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x3002;&#x8BBA;&#x6587;&#x7684;&#x57FA;&#x672C;&#x601D;&#x60F3;&#x662F;&#x5728;&#x4E3B;&#x7F13;&#x5B58;&#x6BB5;&#x4E4B;&#x524D;&#x653E;&#x7F6E;&#x4E00;&#x4E2A; LRU &#x201C;&#x7A97;&#x53E3;&#x201D;&#xFF0C;&#x5E76;&#x4F7F;&#x7528;&#x722C;&#x5C71;&#x6280;&#x672F;&#x81EA;&#x9002;&#x5E94;&#x5730;&#x8C03;&#x6574;&#x7A97;&#x53E3;&#x5927;&#x5C0F;&#x4EE5;&#x6700;&#x5927;&#x5316;&#x547D;&#x4E2D;&#x7387;&#x3002;<a href="https://github.com/ben-manes/caffeine">A high performance caching library for Java 8 &#x2014; Caffeine</a> &#x5DF2;&#x7ECF;&#x53D6;&#x5F97;&#x4E86;&#x5F88;&#x597D;&#x7684;&#x6548;&#x679C;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_22.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x53EF;&#x4F38;&#x7F29;&#x6027;&#x65B9;&#x9762;&#xFF0C;&#x9009;&#x62E9;&#x5408;&#x9002;&#x7684;&#x7F13;&#x5B58;&#x5927;&#x5C0F;&#xFF0C;&#x53EF;&#x4EE5;&#x907F;&#x514D; <a href="https://dzone.com/articles/false-sharing">False Sharing</a>&#xFF0C;&#x5728;&#x591A;&#x6838;&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;&#x5176;&#x4E2D;&#x4E0D;&#x540C;&#x7684;&#x539F;&#x5B50;&#x8BA1;&#x6570;&#x5668;&#xFF08;&#x6BCF;&#x4E2A;8&#x5B57;&#x8282;&#xFF09;&#x4F4D;&#x4E8E;&#x540C;&#x4E00;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x884C;&#xFF08;&#x901A;&#x5E38;&#x4E3A;64&#x5B57;&#x8282;&#xFF09;&#x4E2D;&#x3002;&#x5BF9;&#x8FD9;&#x4E9B;&#x8BA1;&#x6570;&#x5668;&#x4E4B;&#x4E00;&#x8FDB;&#x884C;&#x7684;&#x4EFB;&#x4F55;&#x66F4;&#x65B0;&#x90FD;&#x4F1A;&#x5BFC;&#x81F4;&#x5176;&#x4ED6;&#x8BA1;&#x6570;&#x5668;&#x88AB;&#x6807;&#x8BB0;&#x4E3A;&#x65E0;&#x6548;&#x3002;&#x8FD9;&#x5C06;&#x5F3A;&#x5236;&#x4E3A;&#x62E5;&#x6709;&#x8BE5;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x7684;&#x6240;&#x6709;&#x5176;&#x4ED6;&#x6838;&#x5FC3;&#x91CD;&#x65B0;&#x52A0;&#x8F7D;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#xFF0C;&#x4ECE;&#x800C;&#x5728;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x884C;&#x4E0A;&#x521B;&#x5EFA;&#x5199;&#x4E89;&#x7528;&#x3002;&#x4E3A;&#x4E86;&#x5B9E;&#x73B0;&#x53EF;&#x4F38;&#x7F29;&#x6027;&#xFF0C;&#x5E94;&#x8BE5;&#x786E;&#x4FDD;&#x6BCF;&#x4E2A;&#x539F;&#x5B50;&#x8BA1;&#x6570;&#x5668;&#x5B8C;&#x5168;&#x5360;&#x7528;&#x5B8C;&#x6574;&#x7684;&#x7F13;&#x5B58;&#x884C;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x6BCF;&#x4E2A;&#x5185;&#x6838;&#x90FD;&#x5728;&#x4E0D;&#x540C;&#x7684;&#x7F13;&#x5B58;&#x884C;&#x4E0A;&#x5DE5;&#x4F5C;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_24.png" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x6700;&#x540E;&#x770B;&#x770B; Go &#x5B9E;&#x73B0;&#x7684;&#x51E0;&#x4E2A;&#x5F00;&#x6E90; Cache &#x5E93;&#x3002;&#x5173;&#x4E8E;&#x8FD9;&#x4E9B; Cache &#x7684;&#x6E90;&#x7801;&#x5206;&#x6790;&#xFF0C;&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#x5C31;&#x4E0D;&#x5C55;&#x5F00;&#x4E86;&#x3002;(&#x6709;&#x65F6;&#x95F4;&#x53EF;&#x80FD;&#x4F1A;&#x5355;&#x72EC;&#x518D;&#x5F00;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x8BE6;&#x89E3;)&#x3002;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x67E5;&#x9605;&#x6E90;&#x7801;&#x3002;</p>
<p><a href="https://github.com/allegro/bigcache">bigcache</a>&#xFF0C;BigCache &#x6839;&#x636E; key &#x7684;&#x54C8;&#x5E0C;&#x5C06;&#x6570;&#x636E;&#x5206;&#x4E3A; shards&#x3002;&#x6BCF;&#x4E2A;&#x5206;&#x7247;&#x90FD;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x6620;&#x5C04;&#x548C;&#x4E00;&#x4E2A; ring buffer&#x3002;&#x6BCF;&#x5F53;&#x8BBE;&#x7F6E;&#x65B0;&#x5143;&#x7D20;&#x65F6;&#xFF0C;&#x5B83;&#x90FD;&#x4F1A;&#x5C06;&#x8BE5;&#x5143;&#x7D20;&#x8FFD;&#x52A0;&#x5230;&#x76F8;&#x5E94;&#x5206;&#x7247;&#x7684; ring buffer &#x4E2D;&#xFF0C;&#x5E76;&#x4E14;&#x7F13;&#x51B2;&#x533A;&#x4E2D;&#x7684;&#x504F;&#x79FB;&#x91CF;&#x5C06;&#x5B58;&#x50A8;&#x5728; map &#x4E2D;&#x3002;&#x5982;&#x679C;&#x540C;&#x4E00;&#x5143;&#x7D20;&#x88AB; Set &#x591A;&#x6B21;&#xFF0C;&#x5219;&#x7F13;&#x51B2;&#x533A;&#x4E2D;&#x7684;&#x5148;&#x524D;&#x6761;&#x76EE;&#x5C06;&#x6807;&#x8BB0;&#x4E3A;&#x65E0;&#x6548;&#x3002;&#x5982;&#x679C;&#x7F13;&#x51B2;&#x533A;&#x592A;&#x5C0F;&#xFF0C;&#x5219;&#x5C06;&#x5176;&#x6269;&#x5C55;&#x76F4;&#x5230;&#x8FBE;&#x5230;&#x6700;&#x5927;&#x5BB9;&#x91CF;&#x3002;&#x6BCF;&#x4E2A; map &#x4E2D;&#x7684; key &#x90FD;&#x662F;&#x4E00;&#x4E2A; uint32 hash&#xFF0C;&#x5176;&#x503C;&#x662F;&#x4E00;&#x4E2A; uint32 &#x6307;&#x9488;&#xFF0C;&#x6307;&#x5411;&#x8BE5;&#x503C;&#x4E0E;&#x5143;&#x6570;&#x636E;&#x4FE1;&#x606F;&#x4E00;&#x8D77;&#x5B58;&#x50A8;&#x7684;&#x7F13;&#x51B2;&#x533A;&#x4E2D;&#x7684;&#x504F;&#x79FB;&#x91CF;&#x3002;&#x5982;&#x679C;&#x5B58;&#x5728;&#x54C8;&#x5E0C;&#x51B2;&#x7A81;&#xFF0C;&#x5219; BigCache &#x4F1A;&#x5FFD;&#x7565;&#x524D;&#x4E00;&#x4E2A;&#x952E;&#x5E76;&#x5C06;&#x5F53;&#x524D;&#x952E;&#x5B58;&#x50A8;&#x5230;&#x6620;&#x5C04;&#x4E2D;&#x3002;&#x9884;&#x5148;&#x5206;&#x914D;&#x8F83;&#x5C11;&#xFF0C;&#x8F83;&#x5927;&#x7684;&#x7F13;&#x51B2;&#x533A;&#x5E76;&#x4F7F;&#x7528; map[uint32]uint32 &#x662F;&#x907F;&#x514D;&#x627F;&#x62C5; GC &#x626B;&#x63CF;&#x6210;&#x672C;&#x7684;&#x597D;&#x65B9;&#x6CD5;&#x3002;</p>
<p><a href="https://github.com/coocood/freecache">freecache</a>&#xFF0C;FreeCache &#x901A;&#x8FC7;&#x51CF;&#x5C11;&#x6307;&#x9488;&#x6570;&#x91CF;&#x907F;&#x514D;&#x4E86; GC &#x5F00;&#x9500;&#x3002; &#x65E0;&#x8BBA;&#x5176;&#x4E2D;&#x5B58;&#x50A8;&#x4E86;&#x591A;&#x5C11;&#x6761;&#x76EE;&#xFF0C;&#x90FD;&#x53EA;&#x6709; 512 &#x4E2A;&#x6307;&#x9488;&#x3002;&#x901A;&#x8FC7; key &#x7684;&#x54C8;&#x5E0C;&#x503C;&#x5C06;&#x6570;&#x636E;&#x96C6;&#x5206;&#x5272;&#x4E3A; 256 &#x4E2A;&#x6BB5;&#x3002;&#x5C06;&#x65B0; key &#x6DFB;&#x52A0;&#x5230;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x65F6;&#xFF0C;&#x5C06;&#x4F7F;&#x7528; key &#x54C8;&#x5E0C;&#x503C;&#x7684;&#x4F4E;&#x516B;&#x4F4D;&#x6765;&#x6807;&#x8BC6;&#x6BB5; ID&#x3002;&#x6BCF;&#x4E2A;&#x6BB5;&#x53EA;&#x6709;&#x4E24;&#x4E2A;&#x6307;&#x9488;&#xFF0C;&#x4E00;&#x4E2A;&#x662F;&#x5B58;&#x50A8; key &#x548C; value &#x7684; ring buffer&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x662F;&#x7528;&#x4E8E;&#x67E5;&#x627E;&#x6761;&#x76EE;&#x7684;&#x7D22;&#x5F15; slice&#x3002;&#x6570;&#x636E;&#x9644;&#x52A0;&#x5230; ring buffer &#x4E2D;&#xFF0C;&#x504F;&#x79FB;&#x91CF;&#x5B58;&#x50A8;&#x5230;&#x6392;&#x5E8F; slice &#x4E2D;&#x3002;&#x5982;&#x679C; ring buffer &#x6CA1;&#x6709;&#x8DB3;&#x591F;&#x7684;&#x7A7A;&#x95F4;&#xFF0C;&#x5219;&#x4F7F;&#x7528;&#x4FEE;&#x6539;&#x540E;&#x7684; LRU &#x7B56;&#x7565;&#x4ECE; ring buffer &#x7684;&#x5F00;&#x5934;&#x5F00;&#x59CB;&#xFF0C;&#x5728;&#x8BE5;&#x6BB5;&#x4E2D;&#x6DD8;&#x6C70; key&#x3002;&#x5982;&#x679C;&#x6761;&#x76EE;&#x7684;&#x6700;&#x540E;&#x8BBF;&#x95EE;&#x65F6;&#x95F4;&#x5C0F;&#x4E8E;&#x6BB5;&#x7684;&#x5E73;&#x5747;&#x8BBF;&#x95EE;&#x65F6;&#x95F4;&#xFF0C;&#x5219;&#x4ECE; ring buffer &#x4E2D;&#x5220;&#x9664;&#x8BE5;&#x6761;&#x76EE;&#x3002;&#x8981;&#x5728; Get &#x7684;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x4E2D;&#x67E5;&#x627E;&#x6761;&#x76EE;&#xFF0C;&#x8BF7;&#x5728;&#x76F8;&#x5E94;&#x63D2;&#x69FD; slot &#x4E2D;&#x7684;&#x6392;&#x5E8F;&#x6570;&#x7EC4;&#x4E2D;&#x6267;&#x884C;&#x4E8C;&#x8FDB;&#x5236;&#x641C;&#x7D22;&#x3002;&#x6B64;&#x5916;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x52A0;&#x901F;&#x7684;&#x4F18;&#x5316;&#xFF0C;&#x4F7F;&#x7528; key &#x7684;&#x54C8;&#x5E0C;&#x7684; LSB 9-16 &#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x63D2;&#x69FD; slot&#x3002;&#x5C06;&#x6570;&#x636E;&#x5212;&#x5206;&#x4E3A;&#x591A;&#x4E2A;&#x63D2;&#x69FD; slot &#x6709;&#x52A9;&#x4E8E;&#x51CF;&#x5C11;&#x5728;&#x7F13;&#x5B58;&#x4E2D;&#x67E5;&#x627E;&#x952E;&#x65F6;&#x7684;&#x641C;&#x7D22;&#x7A7A;&#x95F4;&#x3002;&#x6BCF;&#x4E2A;&#x6BB5;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x9501;&#xFF0C;&#x56E0;&#x6B64;&#x5B83;&#x652F;&#x6301;&#x9AD8;&#x5E76;&#x53D1;&#x8BBF;&#x95EE;&#x3002;</p>
<p><a href="https://github.com/golang/groupcache">groupCache</a>&#xFF0C;groupcache &#x662F;&#x200B;&#x200B;&#x4E00;&#x4E2A;&#x5206;&#x5E03;&#x5F0F;&#x7684;&#x7F13;&#x5B58;&#x548C;&#x7F13;&#x5B58;&#x586B;&#x5145;&#x5E93;&#xFF0C;&#x5728;&#x8BB8;&#x591A;&#x60C5;&#x51B5;&#x4E0B;&#x53EF;&#x4EE5;&#x66FF;&#x4EE3; memcached&#x3002;&#x5728;&#x8BB8;&#x591A;&#x60C5;&#x51B5;&#x4E0B;&#x751A;&#x81F3;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x66FF;&#x4EE3;&#x5185;&#x5B58;&#x7F13;&#x5B58;&#x8282;&#x70B9;&#x6C60;&#x3002;groupcache &#x5B9E;&#x73B0;&#x539F;&#x7406;&#x548C;&#x672C;&#x6587;&#x5728;&#x4E0A;&#x4E00;&#x7AE0;&#x8282;&#x4E2D;&#x5B9E;&#x73B0;&#x7684;&#x65B9;&#x5F0F;&#x662F;&#x4E00;&#x6478;&#x4E00;&#x6837;&#x7684;&#x3002;</p>
<p><a href="https://github.com/VictoriaMetrics/fastcache">fastcache</a>&#xFF0C;fastcache &#x5E76;&#x6CA1;&#x6709;&#x7F13;&#x5B58;&#x8FC7;&#x671F;&#x7684;&#x6982;&#x5FF5;&#x3002;&#x4EC5;&#x5728;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x5927;&#x5C0F;&#x6EA2;&#x51FA;&#x65F6;&#x624D;&#x4ECE;&#x9AD8;&#x901F;&#x7F13;&#x5B58;&#x4E2D;&#x6DD8;&#x6C70; key &#x503C;&#x3002;key &#x7684;&#x622A;&#x6B62;&#x671F;&#x9650;&#x53EF;&#x4EE5;&#x5B58;&#x50A8;&#x5728;&#x8BE5;&#x503C;&#x5185;&#xFF0C;&#x4EE5;&#x5B9E;&#x73B0;&#x7F13;&#x5B58;&#x8FC7;&#x671F;&#x3002;fastcache &#x7F13;&#x5B58;&#x7531;&#x8BB8;&#x591A; buckets &#x7EC4;&#x6210;&#xFF0C;&#x6BCF;&#x4E2A; buckets &#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x9501;&#x3002;&#x8FD9;&#x6709;&#x52A9;&#x4E8E;&#x6269;&#x5C55;&#x591A;&#x6838; CPU &#x7684;&#x6027;&#x80FD;&#xFF0C;&#x56E0;&#x4E3A;&#x591A;&#x4E2A; CPU &#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x8BBF;&#x95EE;&#x4E0D;&#x540C;&#x7684; buckets&#x3002;&#x6BCF;&#x4E2A; buckets &#x5747;&#x7531;&#x4E00;&#x4E2A; hash&#xFF08;key&#xFF09;-&gt;&#xFF08;key&#xFF0C;value&#xFF09;&#x7684;&#x6620;&#x5C04;&#x548C; 64KB &#x5927;&#x5C0F;&#x7684;&#x5B57;&#x8282; slice&#xFF08;&#x5757;&#xFF09;&#x7EC4;&#x6210;&#xFF0C;&#x8FD9;&#x4E9B;&#x5B57;&#x8282; slice &#x5B58;&#x50A8;&#x5DF2;&#x7F16;&#x7801;&#x7684;&#xFF08;key&#xFF0C;value&#xFF09;&#x3002;&#x6BCF;&#x4E2A; buckets &#x4EC5;&#x5305;&#x542B; chunksCount &#x4E2A;&#x6307;&#x9488;&#x3002;&#x4F8B;&#x5982;&#xFF0C;64GB &#x7F13;&#x5B58;&#x5C06;&#x5305;&#x542B;&#x5927;&#x7EA6; 1M &#x6307;&#x9488;&#xFF0C;&#x800C;&#x5927;&#x5C0F;&#x76F8;&#x4F3C;&#x7684; map[string][]byte &#x5C06;&#x5305;&#x542B; 1B&#x6307;&#x9488;&#xFF0C;&#x7528;&#x4E8E;&#x5C0F;&#x7684; key &#x548C; value&#x3002;&#x8FD9;&#x6837;&#x505A;&#x53EF;&#x4EE5;&#x8282;&#x7EA6;&#x5DE8;&#x5927;&#x7684; GC &#x5F00;&#x9500;&#x3002;&#x4E0E;&#x6BCF;&#x4E2A; bucket &#x4E2D;&#x7684;&#x5355;&#x4E2A; chunk &#x76F8;&#x6BD4;&#xFF0C;64KB &#x5927;&#x5C0F;&#x7684; chunk &#x5757;&#x51CF;&#x5C11;&#x4E86;&#x5185;&#x5B58;&#x788E;&#x7247;&#x548C;&#x603B;&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x91CF;&#x3002;&#x5982;&#x679C;&#x53EF;&#x80FD;&#xFF0C;&#x5C06;&#x5927; chunk &#x5757;&#x5206;&#x914D;&#x5728;&#x5806;&#x5916;&#x3002;&#x8FD9;&#x6837;&#x505A;&#x53EF;&#x4EE5;&#x51CF;&#x5C11;&#x4E86;&#x603B;&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x91CF;&#xFF0C;&#x56E0;&#x4E3A; GC &#x65E0;&#x9700;&#x8981; GOGC &#x8C03;&#x6574;&#x5373;&#x53EF;&#x4EE5;&#x66F4;&#x9891;&#x7E41;&#x5730;&#x6536;&#x96C6;&#x672A;&#x4F7F;&#x7528;&#x7684;&#x5185;&#x5B58;&#x3002;</p>
<p><a href="https://github.com/dgraph-io/ristretto">ristretto</a>&#xFF0C;ristretto &#x62E5;&#x6709;&#x975E;&#x5E38;&#x4F18;&#x79C0;&#x7684;&#x7F13;&#x5B58;&#x547D;&#x4E2D;&#x7387;&#x3002;&#x6DD8;&#x6C70;&#x7B56;&#x7565;&#x91C7;&#x7528;&#x7B80;&#x5355;&#x7684; LFU&#xFF0C;&#x6027;&#x80FD;&#x4E0E; LRU &#x76F8;&#x5F53;&#xFF0C;&#x5E76;&#x4E14;&#x5728;&#x641C;&#x7D22;&#x548C;&#x6570;&#x636E;&#x5E93;&#x8DDF;&#x8E2A;&#x4E0A;&#x5177;&#x6709;&#x66F4;&#x597D;&#x7684;&#x6027;&#x80FD;&#x3002;&#x5B58;&#x5165;&#x7B56;&#x7565;&#x91C7;&#x7528; TinyLFU &#x7B56;&#x7565;&#xFF0C;&#x5B83;&#x51E0;&#x4E4E;&#x6CA1;&#x6709;&#x5185;&#x5B58;&#x5F00;&#x9500;&#xFF08;&#x6BCF;&#x4E2A;&#x8BA1;&#x6570;&#x5668; 12 &#x4F4D;&#xFF09;&#x3002;&#x6DD8;&#x6C70;&#x7B56;&#x7565;&#x6839;&#x636E;&#x4EE3;&#x4EF7;&#x503C;&#x5224;&#x65AD;&#xFF0C;&#x4EFB;&#x4F55;&#x4EE3;&#x4EF7;&#x503C;&#x5927;&#x7684; key &#x90FD;&#x53EF;&#x4EE5;&#x6DD8;&#x6C70;&#x591A;&#x4E2A;&#x4EE3;&#x4EF7;&#x503C;&#x8F83;&#x5C0F;&#x7684; key&#xFF08;&#x4EE3;&#x4EF7;&#x503C;&#x53EF;&#x4EE5;&#x662F;&#x81EA;&#x5B9A;&#x4E49;&#x7684;&#x8861;&#x91CF;&#x6807;&#x51C6;&#xFF09;&#x3002;</p>
<p>&#x4EE5;&#x4E0B;&#x662F;&#x8FD9;&#x51E0;&#x4E2A;&#x5E93;&#x7684;&#x6027;&#x80FD;&#x66F2;&#x7EBF;&#x56FE;&#xFF1A;</p>
<p>&#x5728;&#x4E00;&#x5C0F;&#x65F6;&#x5185;&#x5BF9; CODASYL &#x6570;&#x636E;&#x5E93;&#x7684;&#x5F15;&#x7528;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_15.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5728;&#x5546;&#x4E1A;&#x7AD9;&#x70B9;&#x4E0A;&#x8FD0;&#x884C;&#x7684;&#x6570;&#x636E;&#x5E93;&#x670D;&#x52A1;&#x5668;&#xFF0C;&#x8BE5;&#x670D;&#x52A1;&#x5668;&#x5728;&#x5546;&#x4E1A;&#x6570;&#x636E;&#x5E93;&#x4E4B;&#x4E0A;&#x8FD0;&#x884C; ERP &#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_16.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5FAA;&#x73AF;&#x8BBF;&#x95EE;&#x6A21;&#x5F0F;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_17.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x5927;&#x578B;&#x5546;&#x4E1A;&#x641C;&#x7D22;&#x5F15;&#x64CE;&#x54CD;&#x5E94;&#x5404;&#x79CD; Web &#x641C;&#x7D22;&#x8BF7;&#x6C42;&#x800C;&#x542F;&#x52A8;&#x7684;&#x78C1;&#x76D8;&#x8BFB;&#x53D6;&#x8BBF;&#x95EE;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_18.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p>&#x541E;&#x5410;&#x91CF;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_19.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_20.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/146_21.svg" alt="&#x9762;&#x8BD5;&#x4E2D; LRU / LFU &#x7684;&#x9752;&#x94DC;&#x4E0E;&#x738B;&#x8005;" loading="lazy"></p>
<h2 id="%E6%8E%A8%E8%8D%90%E9%98%85%E8%AF%BB">&#x63A8;&#x8350;&#x9605;&#x8BFB;</h2>
<p><a href="https://dgraph.io/blog/refs/bp_wrapper.pdf">BP-Wrapper: A System Framework Making Any<br>
Replacement Algorithms (Almost) Lock Contention Free</a><br>
<a href="https://dgraph.io/blog/refs/Adaptive%20Software%20Cache%20Management.pdf">Adaptive Software Cache Management</a><br>
<a href="https://dgraph.io/blog/refs/TinyLFU%20-%20A%20Highly%20Efficient%20Cache%20Admission%20Policy.pdf">TinyLFU: A Highly Efficient Cache Admission Policy</a><br>
<a href="http://web.cse.ohio-state.edu/hpcs/WWW/HTML/publications/papers/TR-02-6.pdf">LIRS: An Efficient Low Inter-reference Recency Set Replacement Policy to Improve Buffer Cache Performance</a><br>
<a href="https://www.usenix.org/event/fast03/tech/full_papers/megiddo/megiddo.pdf">ARC: A Self-Tuning, Low Overhead Replacement Cache</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[不甘当学渣，努力作学霸，最终是学民]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="%E9%A2%98%E8%AE%B0">&#x9898;&#x8BB0;</h2>
<p>&#x8003;&#x8651;&#x5230;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x6709;&#x90E8;&#x5206;&#x65B0;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x6240;&#x4EE5;&#x5173;&#x4E8E;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x540D;&#x5B57;&#x7684;&#x8D77;&#x6E90;&#x5C31;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x4E86;&#xFF0C;&#x89C1;&#x8FD9;&#x91CC;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/TimeElapse/start.md">&#x300A;&quot;&#x661F;&#x971C;&#x834F;&#x82D2;&quot;&#x540D;</a></p>]]></description><link>https://halfrost.com/halfrost_2019/</link><guid isPermaLink="false">634360bbd892dc307476ccf1</guid><category><![CDATA[星霜荏苒]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Tue, 31 Dec 2019 05:20:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/12/150_0_.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="%E9%A2%98%E8%AE%B0">&#x9898;&#x8BB0;</h2>
<img src="https://img.halfrost.com/2021/12/150_0_.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;"><p>&#x8003;&#x8651;&#x5230;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x6709;&#x90E8;&#x5206;&#x65B0;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x6240;&#x4EE5;&#x5173;&#x4E8E;&#x672C;&#x7CFB;&#x5217;&#x6587;&#x7AE0;&#x540D;&#x5B57;&#x7684;&#x8D77;&#x6E90;&#x5C31;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x4E86;&#xFF0C;&#x89C1;&#x8FD9;&#x91CC;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/TimeElapse/start.md">&#x300A;&quot;&#x661F;&#x971C;&#x834F;&#x82D2;&quot;&#x540D;&#x5B57;&#x8BDE;&#x751F;&#x8BB0;&#x300B;</a></p>
<p>&#x5F53;&#x4F60;&#x770B;&#x5230;&#x8FD9;&#x7BC7;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8DDD;&#x79BB;&#x6211;&#x4E0A;&#x4E00;&#x7BC7;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x6574;&#x6574;&#x8FC7;&#x53BB;&#x4E86; 500 &#x591A;&#x5929;&#x3002;&#x4F60;&#x4E00;&#x5B9A;&#x5F88;&#x597D;&#x5947;&#x8FD9; 500 &#x5929;&#x6211;&#x5E72;&#x4E86;&#x54EA;&#x4E9B;&#x4E8B;&#x60C5;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x6807;&#x9898;&#x53EB;&#x8FD9;&#x4E2A;&#x540D;&#x5B57;&#xFF1F;</p>
<hr>
<h2 id="%E5%AD%A6%E7%94%9F%E7%AD%89%E7%BA%A7">&#x5B66;&#x751F;&#x7B49;&#x7EA7;</h2>
<p>&#x4E3A;&#x4E86;&#x89E3;&#x91CA;&#x6587;&#x7AE0;&#x6807;&#x9898;&#xFF0C;&#x5C31;&#x8981;&#x5148;&#x89E3;&#x91CA; 10 &#x4E2A;&#x8BCD;&#x8BED;&#x3002;&#x7B14;&#x8005;&#x5C06;&#x5B66;&#x751F;&#x7B49;&#x7EA7;&#x4ECE;&#x9AD8;&#x5230;&#x4F4E;&#x6392;&#x5E8F;&#x662F;&#xFF1A;</p>
<table>
<thead>
<tr>
<th style="text-align:center">&#x7B49;&#x7EA7;</th>
<th style="text-align:center">&#x540D;&#x8BCD;</th>
<th style="text-align:left">&#x89E3;&#x91CA;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">&#x5B66;&#x9B54;</td>
<td style="text-align:left">&#x5BF9;&#x5B66;&#x4E60;&#x8D70;&#x706B;&#x5165;&#x9B54;&#xFF0C;&#x766B;&#x72C2;&#x72B6;&#x6001;&#xFF0C;&#x4E0D;&#x505A;&#x9898;&#x4F1A;&#x6B7B;&#x6389;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">&#x5B66;&#x9738;</td>
<td style="text-align:left">&#x9690;&#x533F;&#x5728;&#x4EBA;&#x95F4;&#x6709;&#x5934;&#x8111;&#x7684;&#x9AD8;&#x667A;&#x5546;&#x4EBA;&#x7269;&#xFF0C;&#x793E;&#x4EA4;&#x8303;&#x56F4;&#x5E7F;&#x6CDB;&#xFF0C;&#x878D;&#x5408;&#x5951;&#x5408;&#x5EA6;&#x9AD8;&#xFF0C;&#x7434;&#x68CB;&#x4E66;&#x753B;&#x6837;&#x6837;&#x7CBE;&#x901A;&#xFF0C;&#x9AD8;&#x7AEF;&#x5927;&#x6C14;&#x4E0A;&#x6863;&#x6B21;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">&#x5B66;&#x795E;&#xFF08;&#x5B66;&#x5E1D;&#x3001;&#x5B66;&#x4ED9;&#x3001;&#x5B66;&#x5723;&#xFF09;</td>
<td style="text-align:left">&#x9AD8;&#x5927;&#x5E05;&#x6C14;&#xFF0C;&#x9752;&#x6625;&#x9753;&#x4E3D;&#xFF0C;&#x4E0D;&#x98DF;&#x4EBA;&#x95F4;&#x70DF;&#x706B;&#xFF0C;&#x5929;&#x5929;&#x6E38;&#x8D70;&#x5728;&#x9AD8;&#x96BE;&#x5EA6;&#x7684;&#x7EC3;&#x4E60;&#x518C;&#x5F53;&#x4E2D;&#x5374;&#x4F9D;&#x7136;&#x98CE;&#x534E;&#x6B63;&#x8302;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">&#x5B66;&#x75DE;</td>
<td style="text-align:left">&#x4ED6;&#x4EEC;&#x4E0A;&#x8BFE;&#x7761;&#x89C9;&#xFF0C;&#x4E0B;&#x8BFE;&#x73A9;&#x95F9;&#xFF0C;&#x4F46;&#x4ED6;&#x4EEC;&#x7684;&#x6210;&#x7EE9;&#x4ECD;&#x7136;&#x5F88;&#x597D;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:center">&#x5B66;&#x5A4A;</td>
<td style="text-align:left">&#x6BCF;&#x5929;&#x90FD;&#x5728;&#x73A9;&#xFF0C;&#x51E0;&#x4E4E;&#x4E0D;&#x5B66;&#x4E60;&#xFF0C;&#x6BCF;&#x573A;&#x8003;&#x8BD5;&#x7ED3;&#x675F;&#x540E;&#x7B2C;&#x4E00;&#x65F6;&#x95F4;&#x5BA3;&#x5E03;&#x81EA;&#x5DF1;&#x8981;&#x6302;&#x79D1;&#x4E86;&#x3002;&#x4F46;&#x662F;&#x8003;&#x8BD5;&#x6210;&#x7EE9;&#x51FA;&#x6765;&#x540E;&#xFF0C;&#x95E8;&#x95E8;&#x90FD;&#x62FF;&#x7B2C;&#x4E00;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">6</td>
<td style="text-align:center">&#x5B66;&#x6C11;</td>
<td style="text-align:left">&#x667A;&#x5546;&#x5747;&#x8861;&#xFF0C;&#x819C;&#x62DC;&#x5B66;&#x9738;&#xFF0C;&#x5374;&#x77A7;&#x4E0D;&#x8D77;&#x5B66;&#x6E23;&#x7B49;&#x4EBA;&#x7269;&#x3002;&#x4ED6;&#x4EEC;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x4FE1;&#x5FF5;&#xFF0C;&#x603B;&#x6709;&#x4E00;&#x5929;&#x8D85;&#x8D8A;&#x5B66;&#x9738;&#xFF0C;&#x56E0;&#x6B64;&#x8270;&#x82E6;&#x594B;&#x6597;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">7</td>
<td style="text-align:center">&#x5B66;&#x5F31;</td>
<td style="text-align:left">&#x4ED6;&#x4EEC;&#x56E0;&#x4E3A;&#x6CA1;&#x65E5;&#x6CA1;&#x591C;&#x5730;&#x71AC;&#x6CB9;&#x70B9;&#x706F;&#xFF0C;&#x5DF2;&#x7ECF;&#x8EAB;&#x4F53;&#x865A;&#x5F31;&#xFF0C;&#x4E0D;&#x582A;&#x91CD;&#x8D1F;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">8</td>
<td style="text-align:center">&#x5B66;&#x6E23;&#xFF08;&#x5B66;&#x7070;&#xFF09;</td>
<td style="text-align:left">&#x667A;&#x5546;&#x5904;&#x4E8E;&#x534A;&#x75AF;&#x766B;&#x72B6;&#x6001;&#xFF0C;&#x5162;&#x5162;&#x4E1A;&#x4E1A;&#xFF0C;&#x523B;&#x82E6;&#x5B66;&#x4E60;&#xFF0C;&#x5374;&#x603B;&#x662F;&#x4E0D;&#x5F97;&#x5FD7;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">9</td>
<td style="text-align:center">&#x5B66;&#x6B8B;</td>
<td style="text-align:left">&#x667A;&#x5546;&#x5904;&#x4E8E;&#x5168;&#x75AF;&#x766B;&#x72B6;&#x6001;&#x3002;&#x4ED6;&#x4EEC;&#x5DF2;&#x7ECF;&#x88AB;&#x5B66;&#x4E60;&#x6298;&#x78E8;&#x5F97;&#x75DB;&#x82E6;&#x4E0D;&#x582A;&#xFF0C;&#x6CA1;&#x6709;&#x4EBA;&#x6837;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:center">&#x5B66;&#x6CAB;</td>
<td style="text-align:left">&#x667A;&#x5546;&#x4E0D;&#x591F;&#x7528;&#xFF0C;&#x5374;&#x4E5F;&#x4E0D;&#x662F;&#x5F88;&#x52AA;&#x529B;&#xFF0C;&#x6BCF;&#x5929;&#x5728;&#x6DF7;&#x7740;&#x65E5;&#x5B50;&#x3002;&#x603B;&#x662F;&#x89C9;&#x5F97;&#x80FD;&#x591F;&#x4E0D;&#x52B3;&#x800C;&#x83B7;&#x3002;</td>
</tr>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:center">&#x5B66;&#x6C34;</td>
<td style="text-align:left">&#x5DF2;&#x7ECF;&#x4E0D;&#x80FD;&#x7528;&#x667A;&#x5546;&#x4E0E;&#x52AA;&#x529B;&#x6765;&#x8BC4;&#x5224;&#x4ED6;&#x4EEC;&#x4E86;&#xFF0C;&#x4ED6;&#x4EEC;&#x5DF2;&#x7ECF;&#x81EA;&#x7518;&#x5815;&#x843D;&#xFF0C;&#x81EA;&#x66B4;&#x81EA;&#x5F03;&#x597D;&#x591A;&#x5E74;&#x3002;</td>
</tr>
</tbody>
</table>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_13.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x7B14;&#x8005;&#x8FD9;&#x4E00;&#x5E74;&#x548C;&#x5B66;&#x9B54;&#xFF0C;&#x5B66;&#x9738;&#x4E00;&#x8D77;&#x5B66;&#x4E60;&#xFF0C;&#x7ECF;&#x8FC7;&#x591A;&#x6B21;&#x8003;&#x8BD5;&#x7684;&#x9524;&#x70BC;&#xFF0C;&#x6700;&#x7EC8;&#x8BA4;&#x5B9A;&#x81EA;&#x5DF1;&#x662F;&#x5B66;&#x6C11;&#x3002;&#x6709;&#x65F6;&#x5019;&#x4EBA;&#x4E0E;&#x4EBA;&#x4E4B;&#x95F4;&#x5B66;&#x4E60;&#x80FD;&#x529B;&#x7684;&#x5DEE;&#x8DDD;&#xFF0C;&#x4F60;&#x4E0D;&#x5F97;&#x4E0D;&#x8BA4;&#x3002;&#x7B14;&#x8005;&#x7ED9;&#x81EA;&#x5DF1;&#x7684;&#x5B9A;&#x4E49;&#x662F;&#xFF0C;&#x8BA4;&#x771F;&#x5B66;&#x4E60;&#x4F46;&#x4E5F;&#x975E;&#x523B;&#x82E6;&#x7684;&#x7A0B;&#x5EA6;&#x3002;&#x5206;&#x6570;&#x4E0D;&#x4F4E;&#x4F46;&#x4E5F;&#x4E0D;&#x662F;&#x9AD8;&#x5206;&#x3002;</p>
<hr>
<p>&#x597D;&#x4E86;&#xFF0C;&#x81F3;&#x6B64;&#x6211;&#x5173;&#x4E8E;&#x6807;&#x9898;&#x7684;&#x89E3;&#x91CA;&#x90FD;&#x8FF0;&#x8BF4;&#x5B8C;&#x4E86;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x804A;&#x804A;&#x4ECA;&#x5E74;&#x5B66;&#x4E60;&#x548C;&#x751F;&#x6D3B;&#x4E2D;&#x9047;&#x5230;&#x7684;&#x4E00;&#x4E9B;&#x6240;&#x89C1;&#x6240;&#x60F3;&#x3002;&#x8FD8;&#x6709;&#x8BFB;&#x8005;&#x597D;&#x5947;&#x7684;&#x6211;&#x8FD9;&#x4E00;&#x5E74;&#x5728;&#x5FD9;&#x4EC0;&#x4E48;&#x3002;&#x672C;&#x6587;&#x90FD;&#x4F1A;&#x4E00;&#x4E00;&#x8BB2;&#x6E05;&#x3002;&#x81F3;&#x4E8E;&#x6BCF;&#x4E2A;&#x4EBA;&#x5BF9;&#x81EA;&#x5DF1;&#x7684;&#x4EBA;&#x751F;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x9009;&#x62E9;&#xFF0C;&#x7B14;&#x8005;&#x7684;&#x9009;&#x62E9;&#x4E0D;&#x4E00;&#x5B9A;&#x5BF9;&#x3002;&#x5728;&#x5F3A;&#x8005;&#x9762;&#x524D;&#xFF0C;&#x6211;&#x7684;&#x9009;&#x62E9;&#x53EF;&#x80FD;&#x5C31;&#x5982;&#x5C0F;&#x4E11;&#x8868;&#x6F14;&#x4E00;&#x822C;&#xFF0C;&#x6ED1;&#x7A3D;&#x800C;&#x53EF;&#x7B11;&#x3002;&#x90A3;&#x672C;&#x6587;&#x5C31;&#x732E;&#x4E11;&#x4E86;&#x3002;</p>
<h2 id="%E5%B7%A5%E4%BD%9C%E7%9A%84%E5%8F%98%E5%8C%96">&#x5DE5;&#x4F5C;&#x7684;&#x53D8;&#x5316;</h2>
<p>&#x4ECA;&#x5E74;&#x7EC4;&#x91CC;&#x4E00;&#x4E2A;&#x5927;&#x4F6C;&#x79BB;&#x804C;&#x4E86;&#x3002;&#x4E8E;&#x662F;&#x6211;&#x6709;&#x673A;&#x4F1A;&#x5E26;&#x9886; 5-6 &#x540D;&#x5DE5;&#x7A0B;&#x5E08;&#x4E00;&#x8D77;&#x5411;&#x524D;&#x51B2;&#x3002;&#x5F53;&#x771F;&#x6B63; owner &#x4E00;&#x4E2A;&#x8D85;&#x5927;&#x9879;&#x76EE;&#x4EE5;&#x540E;&#x624D;&#x80FD;&#x611F;&#x53D7;&#x5230;&#x7687;&#x51A0;&#x7684;&#x91CD;&#x3002;&#x5404;&#x79CD;&#x4E8B;&#x60C5;&#x90FD;&#x9700;&#x8981;&#x4EB2;&#x529B;&#x4EB2;&#x4E3A;&#x7684;&#x5F00;&#x4F1A;&#xFF0C;&#x6C9F;&#x901A;&#xFF0C;&#x62FF;&#x51B3;&#x7B56;&#x3002;&#x6BCF;&#x4E2A;&#x7EC4;&#x90FD;&#x6709;&#x5404;&#x81EA;&#x7684;&#x5229;&#x76CA;&#xFF0C;&#x4F1A;&#x8BAE;&#x684C;&#x4E0A;&#x5404;&#x81EA;&#x90FD;&#x6000;&#x7740;&#x81EA;&#x5DF1;&#x7684;&#x76EE;&#x7684;&#xFF0C;&#x6240;&#x6709;&#x4EBA;&#x90FD;&#x60F3;&#x8981;&#x81EA;&#x5DF1;&#x7684;&#x5229;&#x76CA;&#x6700;&#x5927;&#x5316;&#x3002;&#x5982;&#x679C;&#x662F;&#x56E0;&#x4E3A;&#x6211;&#x7684;&#x201C;&#x8C08;&#x5224;&#x201D;&#x5931;&#x8BEF;&#xFF0C;&#x5BFC;&#x81F4;&#x5F71;&#x54CD;&#x5230;&#x4E86;&#x7EC4;&#x91CC;&#x5168;&#x5E74;&#x7684;&#x7EE9;&#x6548;&#xFF0C;&#x6211;&#x4F1A;&#x975E;&#x5E38;&#x81EA;&#x8D23;&#x3002;&#x4E0D;&#x8FC7;&#x7ED3;&#x679C;&#x6765;&#x770B;&#xFF0C;&#x9A6C;&#x9A6C;&#x864E;&#x864E;&#x3002;&#x6211;&#x4EEC;&#x5403;&#x6389;&#x4E86;&#x597D;&#x51E0;&#x4E2A;&#x7EC4;&#x7684;&#x4E1A;&#x52A1;&#x3002;&#x56DE;&#x6536;&#x4E86;&#x4ED6;&#x4EEC;&#x90E8;&#x5206; KPI &#x7EE9;&#x6548;&#xFF0C;&#x4E5F;&#x6210;&#x529F;&#x62FF;&#x5230;&#x4E86;&#x4ED6;&#x4EEC;&#x7684;&#x673A;&#x5668;&#x8D44;&#x6E90;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x6253;&#x7B97;&#x5206;&#x4EAB;&#x51E0;&#x4EF6;&#x4E2A;&#x4EBA;&#x89C9;&#x5F97;&#x6BD4;&#x8F83;&#x6210;&#x529F;&#x7684;&#x6848;&#x4F8B;&#xFF1A;</p>
<p>&#xFF08;&#x8FD9;&#x90E8;&#x5206;&#x7684;&#x5206;&#x4EAB;&#x672C;&#x6765;&#x6709; 3000 &#x5B57;&#x5DE6;&#x53F3;&#xFF0C;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x8BFB;&#x8005;&#x770B;&#x5230;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5DF2;&#x7ECF;&#x662F;&#x8FC7;&#x53BB;&#x5FEB; 2 &#x5E74;&#x7684;&#x4E8B;&#x60C5;&#x4E86;&#xFF0C;&#x6709;&#x65E7;&#x4E8B;&#x91CD;&#x63D0;&#x201C;&#x70AB;&#x8000;&#x201D;&#x7684;&#x5ACC;&#x7591;&#xFF0C;&#x52A0;&#x4E0A;&#x7B14;&#x8005;&#x540E;&#x6765;&#x4E5F;&#x4ECE;&#x8FD9;&#x5BB6;&#x516C;&#x53F8;&#x79BB;&#x804C;&#x4E86;&#x3002;&#x6545;&#x7B14;&#x8005;&#x628A;&#x8FD9;&#x6BB5;&#x5220;&#x9664;&#x4E86;&#x3002;&#xFF09;</p>
<h2 id="%E8%81%8C%E4%B8%9A%E7%94%9F%E6%B6%AF%E7%9A%84%E6%80%9D%E8%80%83">&#x804C;&#x4E1A;&#x751F;&#x6DAF;&#x7684;&#x601D;&#x8003;</h2>
<p>&#x53BB;&#x6B27;&#x6D32;&#x65C5;&#x884C;&#xFF0C;&#x9047;&#x5230;&#x5FB7;&#x56FD;&#x4EBA;&#x8BB2;&#x82F1;&#x8BED;&#xFF0C;&#x6211;&#x5B9E;&#x5728;&#x4E0D;&#x4E60;&#x60EF;&#x4ED6;&#x4EEC;&#x7684;&#x53E3;&#x97F3;&#xFF0C;&#x57FA;&#x672C;&#x90FD;&#x542C;&#x4E0D;&#x61C2;&#x3002;&#x53CC;&#x65B9;&#x65E0;&#x6CD5;&#x4EA4;&#x6D41;&#x3002;&#x7279;&#x522B;&#x5C34;&#x5C2C;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x6B21;&#x6211;&#x8FD8;&#x81EA;&#x5DF1;&#x7ED9;&#x81EA;&#x5DF1;&#x627E;&#x7406;&#x7531;&#xFF0C;&#x6BD5;&#x7ADF;&#x662F;&#x6709;&#x5FB7;&#x56FD;&#x53E3;&#x97F3;&#xFF0C;&#x542C;&#x4E0D;&#x61C2;&#x4E5F;&#x6B63;&#x5E38;&#x3002;&#x56DE;&#x56FD;&#x4EE5;&#x540E;&#x6211;&#x4E5F;&#x5FD8;&#x8BB0;&#x4E86;&#x8FD9;&#x6BB5;&#x5C34;&#x5C2C;&#x3002;</p>
<p>&#x53BB;&#x6FB3;&#x6D32;&#x65C5;&#x884C;&#xFF0C;&#x9047;&#x5230;&#x610F;&#x5927;&#x5229;&#x4EBA;&#x8BF4;&#x82F1;&#x8BED;&#xFF0C;&#x80FD;&#x542C;&#x61C2;&#x4ED6;&#x8BF4;&#x4EC0;&#x4E48;&#xFF0C;&#x4F46;&#x662F;&#x5F53;&#x5BF9;&#x65B9;&#x7B11;&#x8D77;&#x6765;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x5E76;&#x4E0D;&#x660E;&#x767D;&#x4ED6;&#x7684;&#x7B11;&#x70B9;&#x6897;&#x5728;&#x54EA;&#x91CC;&#x3002;&#x8FD9;&#x4E00;&#x6B21;&#x6211;&#x53C8;&#x5B89;&#x6170;&#x81EA;&#x5DF1;&#xFF0C;&#x6587;&#x5316;&#x5DEE;&#x5F02;&#x5BFC;&#x81F4;&#x6211;&#x4EEC;&#x65E0;&#x6CD5;&#x4EA4;&#x6D41;&#x3002;&#x56DE;&#x56FD;&#x4EE5;&#x540E;&#x6211;&#x6709;&#x610F;&#x8BC6;&#x7684;&#x53BB;&#x4E86;&#x89E3;&#x4E86;&#x4E00;&#x4E0B;&#x5F53;&#x5730;&#x7684;&#x98CE;&#x4FD7;&#x6587;&#x5316;&#xFF0C;&#x4E0D;&#x8FC7;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x53C8;&#x5FD8;&#x8BB0;&#x4E86;&#x8FD9;&#x6BB5;&#x201C;&#x75DB;&#x201D;&#x3002;</p>
<p>&#x53BB;&#x8FEA;&#x62DC;&#x65C5;&#x884C;&#xFF0C;&#x548C;&#x4E2D;&#x4E1C;&#x4EBA;&#x804A;&#x5929;&#x96F6;&#x661F;&#x542C;&#x5F97;&#x61C2;&#xFF0C;&#x4F46;&#x662F;&#x81EA;&#x5DF1;&#x8BF4;&#x8BDD;&#x5BF9;&#x65B9;&#x542C;&#x4E0D;&#x61C2;&#xFF0C;&#x51B2;&#x6C99;&#x9879;&#x76EE;&#x4E2D;&#x6709;&#x4E00;&#x4E2A;&#x4EBA;&#x82F1;&#x8BED;&#x53EF;&#x4EE5;&#x548C;&#x5BF9;&#x65B9;&#x4EA4;&#x6D41;&#xFF0C;&#x4E8E;&#x662F;&#x5979;&#x6210;&#x4E3A;&#x4E86;&#x56E2;&#x961F;&#x7684;&#x4E2D;&#x5FC3;&#x3002;&#x6211;&#x5FC3;&#x91CC;&#x6697;&#x6697;&#x8BB0;&#x4F4F;&#xFF0C;&#x6211;&#x4E5F;&#x8981;&#x6210;&#x4E3A;&#x961F;&#x4F0D;&#x7684;&#x4E2D;&#x5FC3;&#xFF0C;&#x8FD9;&#x6B21;&#x7ECF;&#x5386;&#x5F7B;&#x5E95;&#x51FB;&#x788E;&#x6211;&#x7684;&#x5E95;&#x7EBF;&#x3002;&#x5B66;&#x4E60;&#x82F1;&#x8BED;&#x8FEB;&#x5728;&#x7709;&#x776B;&#x3002;&#x56DE;&#x56FD;&#x4EE5;&#x540E;&#x4FBF;&#x5F00;&#x59CB;&#x5236;&#x5B9A;&#x5B66;&#x4E60;&#x8BA1;&#x5212;&#x3002;&#x4E0D;&#x7136;&#x4E0B;&#x6B21;&#x65C5;&#x884C;&#x8FD8;&#x4F1A;&#x88AB;&#x82F1;&#x8BED;&#x5361;&#x3002;</p>
<p>&#x804C;&#x4E1A;&#x751F;&#x6DAF;&#x5982;&#x679C;&#x4EE5; 5 &#x5E74;&#x4E3A;&#x754C;&#x9650;&#xFF0C;&#x7B14;&#x8005;&#x5373;&#x5C06;&#x5230;&#x8FBE;&#x7B2C;&#x4E00;&#x4E2A; 5 &#x5E74;&#x4E86;&#x3002;&#x90A3;&#x4E48;&#x7B2C;&#x4E00;&#x4E2A; 5 &#x5E74;&#x505A;&#x4E86;&#x54EA;&#x4E9B;&#x6210;&#x5C31;&#x5462;&#xFF1F;&#x8FD9; 5 &#x5E74;&#x6211;&#x5BF9;&#x6211;&#x4EA4;&#x51FA;&#x7684;&#x7B54;&#x5377;&#x5E76;&#x4E0D;&#x6EE1;&#x610F;&#x3002;&#x515C;&#x515C;&#x8F6C;&#x8F6C;&#x628A;&#x5BA2;&#x6237;&#x7AEF;&#xFF0C;&#x524D;&#x7AEF;&#xFF0C;&#x540E;&#x7AEF;&#x90FD;&#x6478;&#x4E86;&#x4E00;&#x904D;&#x3002;&#x5982;&#x679C; 5 &#x5E74;&#x90FD;&#x4E13;&#x6CE8;&#x4E00;&#x4E2A;&#x9886;&#x57DF;&#xFF0C;&#x53EF;&#x80FD;&#x65E9;&#x5C31;&#x53EF;&#x4EE5;&#x5347;&#x5230;&#x67D0;&#x4E2A;&#x9886;&#x57DF;&#x7684;&#x6280;&#x672F;&#x4E13;&#x5BB6;&#x4E86;&#x3002;&#x65E2;&#x7136;&#x5F00;&#x5C40;&#x7A00;&#x70C2;&#x4E86;&#xFF0C;&#x90A3;&#x7B2C;&#x4E8C;&#x4E2A; 5 &#x5E74;&#x5FC5;&#x987B;&#x505A;&#x51FA;&#x4E00;&#x70B9;&#x6539;&#x53D8;&#xFF0C;&#x201C;&#x626D;&#x8F6C;&#x4E7E;&#x5764;&#x201D;&#x3002;</p>
<p>&#x5728;&#x4E2D;&#x56FD;&#x6539;&#x9769;&#x5F00;&#x653E;&#x7684;&#x5927;&#x73AF;&#x5883;&#x4E0B;&#xFF0C;&#x4E2D;&#x56FD;&#x7684;&#x5E02;&#x573A;&#x6D8C;&#x5165;&#x4E86;&#x5927;&#x91CF;&#x7684;&#x5916;&#x4F01;&#xFF0C;&#x7ED9;&#x5E02;&#x573A;&#x6CE8;&#x5165;&#x4E86;&#x5F88;&#x591A;&#x65B0;&#x7684;&#x601D;&#x60F3;&#x3002;&#x5728;&#x8FD9;&#x4E2A;&#x5730;&#x7403;&#x6751;&#x7684;&#x65F6;&#x4EE3;&#xFF0C;&#x5168;&#x7403;&#x65C5;&#x884C;&#x4E0D;&#x518D;&#x662F;&#x68A6;&#x60F3;&#x3002;&#x6211;&#x5DF2;&#x7ECF;&#x6253;&#x7834;&#x4E86;&#x65C5;&#x6E38;&#x7684;&#x5730;&#x7406;&#x9650;&#x5236;&#xFF0C;&#x6211;&#x5DF2;&#x7ECF;&#x8D70;&#x904D;&#x4E86; 30 &#x591A;&#x4E2A;&#x56FD;&#x5BB6;&#xFF0C;5 &#x5927;&#x6D32;&#x904D;&#x5E03;&#x4E86;&#x6211;&#x7684;&#x8DB3;&#x8FF9;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x6211;&#x5728;&#x8003;&#x8651;&#xFF0C;&#x6211;&#x80FD;&#x5426;&#x6253;&#x7834;&#x5DE5;&#x4F5C;&#x4E0A;&#x7684;&#x5730;&#x7406;&#x9650;&#x5236;&#x5462;&#xFF1F;&#x6BD4;&#x5982;&#x6211;&#x80FD;&#x5426;&#x5728;&#x5168;&#x7403;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;&#x56FD;&#x5BB6;&#xFF0C;&#x901A;&#x8FC7;&#x6211;&#x7684;&#x672C;&#x9886;&#x627E;&#x5230;&#x4E00;&#x4EFD;&#x80FD;&#x8D5A;&#x94B1;&#x517B;&#x6D3B;&#x81EA;&#x5DF1;&#x7684;&#x5DE5;&#x4F5C;&#xFF1F;&#x8BED;&#x8A00;&#x662F;&#x5FC5;&#x987B;&#x4F18;&#x5148;&#x89E3;&#x51B3;&#x7684;&#x3002;&#x5DE5;&#x4F5C;&#x4E2D;&#x6C9F;&#x901A;&#x4EA4;&#x6D41;&#x5FC5;&#x4E0D;&#x53EF;&#x5C11;&#x3002;&#x5728;&#x6211;&#x8111;&#x6D77;&#x4E2D;&#x8FD9;&#x4E2A;&#x60F3;&#x6CD5;&#x8FD8;&#x6CA1;&#x6709;&#x6210;&#x578B;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7A81;&#x7136;&#x67D0;&#x4E00;&#x5929;&#x770B;&#x5230;&#x8109;&#x8109;&#x4E0A;&#x53CC;&#x975E;&#x672C;&#x79D1;&#x6BD5;&#x4E1A;&#x751F;&#x6652; Google &#x7684;&#x5DE5;&#x4F5C;&#x65E5;&#x5E38;&#x3002;&#x786E;&#x8BA4;&#x8FC7;&#x4FE1;&#x606F;&#x771F;&#x5B9E;&#x6027;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x4E5F;&#x6709;&#x4E86;&#x53BB;&#x7845;&#x8C37;&#x6253;&#x62FC;&#x51E0;&#x5E74;&#x7684;&#x60F3;&#x6CD5;&#xFF0C;&#x6211;&#x8981;&#x6253;&#x7834;&#x5DE5;&#x4F5C;&#x4E0A;&#x7684;&#x5730;&#x7406;&#x9650;&#x5236;&#x3002;&#x6211;&#x4E0D;&#x662F; 985 &#x6BD5;&#x4E1A;&#xFF0C;&#x4F46;&#x662F;&#x4F9D;&#x65E7;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x68A6;&#x60F3;&#x3002;&#x81EA;&#x5DF1;&#x5B9E;&#x529B;&#x5F88;&#x83DC;&#xFF0C;&#x53BB;&#x4E0D;&#x4E86; Google&#xFF0C;&#x53BB;&#x4E00;&#x4E2A; startup &#x5E94;&#x8BE5;&#x8FD8;&#x53EF;&#x4EE5;&#x3002;<strong>&#x4E8E;&#x662F;&#x6211;&#x840C;&#x751F;&#x4E86;&#x53BB;&#x6D77;&#x5916;&#x5DE5;&#x4F5C;&#x7684;&#x60F3;&#x6CD5;</strong>&#x3002;&#x4F46;&#x662F;&#x6B64;&#x65F6;&#x8FD9;&#x4E2A;&#x60F3;&#x6CD5;&#x4E0D;&#x662F;&#x5F88;&#x5F3A;&#x70C8;&#xFF0C;&#x8FD8;&#x5728;&#x5F98;&#x5F8A;&#x4E2D;&#x3002;</p>
<p>&#x6162;&#x6162;&#x7684;&#xFF0C;&#x6211;&#x53C8;&#x7ECF;&#x5386;&#x4E86;&#x4E00;&#x4E9B;&#x4E8B;&#x60C5;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_14.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x4EBA;&#x662F;&#x4E00;&#x4E2A;&#x793E;&#x4F1A;&#x5C5E;&#x6027;&#x7684;&#x751F;&#x7269;&#xFF0C;&#x4ED6;&#x7684;&#x4E00;&#x4E9B;&#x51B3;&#x5B9A;&#x662F;&#x53C2;&#x8003;&#x4E86;&#x793E;&#x4F1A;&#x56E0;&#x7D20;&#x7684;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5BB6;&#x957F;&#x4EEC;&#x5728;&#x4E00;&#x8D77;&#x804A;&#x5929;&#xFF0C;A &#x5BB6;&#x957F;&#x5BF9;&#x4F60;&#x7238;&#x5988;&#x8BF4;&#xFF0C;&#x201C;&#x4F60;&#x770B;&#x4F60;&#x4EEC;&#x5BB6;&#x7684;&#x5B69;&#x5B50;&#x8FD9;&#x4E48;&#x6CA1;&#x51FA;&#x606F;&#xFF0C;&#x4F60;&#x4EEC;&#x600E;&#x4E48;&#x6559;&#x80B2;&#x7684;&#xFF1F;&#x201D;&#xFF0C;&#x6216;&#x8005;&#x201C;&#x4F60;&#x770B;&#x6211;&#x4EEC;&#x5BB6;&#x5B69;&#x5B50;&#xFF0C;&#x5E74;&#x85AA; 5000 &#x591A;W&#xFF0C;&#x4F60;&#x4EEC;&#x5BB6;&#x5B69;&#x5B50;&#x5E74;&#x85AA;&#x624D; 10W&#xFF0C;&#x5E72;&#x4E00;&#x5E74;&#x9876;&#x4F60;&#x4EEC;&#x5BB6;&#x5B69;&#x5B50;&#x5E72; 500 &#x5E74;&#x3002;&#x201D;&#x4E00;&#x822C;&#x8FD9;&#x4E9B;&#x8BDD;&#x7238;&#x5988;&#x542C;&#x4E86;&#xFF0C;&#x8138;&#x9762;&#x4E0A;&#x901A;&#x5E38;&#x4F1A;&#x4E00;&#x7B11;&#x800C;&#x8FC7;&#xFF0C;&#x4E5F;&#x8BB8;&#x4E0D;&#x4F1A;&#x548C;&#x4F60;&#x8BF4;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x8BDD;&#x8981;&#x662F;&#x81EA;&#x5DF1;&#x542C;&#x5230;&#x4E86;&#xFF0C;&#x80AF;&#x5B9A;&#x4E0D;&#x662F;&#x6ECB;&#x5473;&#x3002;&#x7531;&#x4E8E;&#x81EA;&#x5DF1;&#x7684;&#x4E0D;&#x52AA;&#x529B;&#xFF0C;&#x6216;&#x8005;&#x4E0D;&#x591F;&#x6210;&#x529F;&#xFF0C;&#x5BFC;&#x81F4;&#x4E86;&#x81EA;&#x5DF1;&#x7684;&#x7236;&#x6BCD;&#x5728;&#x5916;&#x9762;&#x88AB;&#x5176;&#x4ED6;&#x5BB6;&#x957F;&#x201C;&#x8E29;&#x201D;&#x3002;&#x51E1;&#x662F;&#x6709;&#x4E0A;&#x8FDB;&#x5FC3;&#x7684;&#x4EBA;&#xFF0C;&#x4E00;&#x5B9A;&#x4F1A;&#x91C7;&#x53D6;&#x4E00;&#x4E9B;&#x201C;&#x7EDD;&#x5730;&#x53CD;&#x51FB;&#x201D;&#x7684;&#x63AA;&#x65BD;&#x5427;&#x3002;&#x201C;&#x6211;&#x662F;&#x5168;&#x6751;&#x7684;&#x5E0C;&#x671B;&#x201D;&#xFF0C;&#x8FD9;&#x53E5;&#x8BDD;&#x770B;&#x4E0A;&#x53BB;&#x90A3;&#x4E48;&#x7684;&#x9A84;&#x50B2;&#xFF0C;&#x80CC;&#x540E;&#x5176;&#x5B9E;&#x53CD;&#x6620;&#x4E86;&#x4E00;&#x79CD;&#x81EA;&#x8C6A;&#xFF0C;&#x4E00;&#x79CD;&#x52AA;&#x529B;&#xFF0C;&#x4E0D;&#x6127;&#x5BF9;&#x7236;&#x6BCD;&#x7684;&#x517B;&#x80B2;&#xFF0C;&#x81EA;&#x5DF1;&#x7684;&#x6210;&#x529F;&#xFF0C;&#x81EA;&#x5DF1;&#x7684;&#x51FA;&#x7C7B;&#x62D4;&#x8403;&#xFF0C;&#x4E5F;&#x8BA9;&#x7236;&#x6BCD;&#x5728;&#x522B;&#x4EBA;&#x9762;&#x524D;&#x51FA;&#x4EBA;&#x5934;&#x5730;&#x3002;&#x5F53;&#x7136;&#x4E0D;&#x5C11;&#x7236;&#x6BCD;&#x4E5F;&#x662F;&#x4F4E;&#x8C03;&#x7684;&#xFF0C;&#x81EA;&#x5DF1;&#x5B69;&#x5B50;&#x591A;&#x4E48;&#x6210;&#x529F;&#x4E5F;&#x4E0D;&#x4F1A;&#x5728;&#x5916;&#x4EBA;&#x9762;&#x524D;&#x5439;&#x3002;&#x4F46;&#x81F3;&#x5C11;&#xFF0C;&#x8FD9;&#x4E2A;&#x5B69;&#x5B50;&#x7684;&#x6210;&#x529F;&#x6CA1;&#x6709;&#x7ED9;&#x5176;&#x4ED6;&#x5BB6;&#x957F;&#x201C;&#x8E29;&#x201D;&#x81EA;&#x5DF1;&#x7238;&#x5988;&#x7684;&#x673A;&#x4F1A;&#xFF01;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_15.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x6211;&#x901A;&#x5E38;&#x5728;&#x540C;&#x884C;&#x9762;&#x524D;&#x90FD;&#x4F1A;&#x8BF4;&#x81EA;&#x5DF1;&#x662F;&#x83DC;&#x9E1F;&#x3002;&#x4E45;&#x800C;&#x4E45;&#x4E4B;&#xFF0C;&#x5927;&#x5BB6;&#x89C9;&#x5F97;&#x6211;&#x5E26;&#x574F;&#x4E86;&#x4E00;&#x4E9B;&#x98CE;&#x6C14;&#xFF0C;&#x88C5;&#x5F31;&#x3002;&#x6709;&#x4E9B;&#x4EBA;&#x4E5F;&#x4F1A;&#x89C9;&#x5F97;&#x6211;&#x662F;&#x8C26;&#x865A;&#x3002;&#x6211;&#x7684;&#x82B1;&#x540D;&#x662F;&#xFF0C;&#x971C;&#x83DC;&#xFF0C;&#x63D0;&#x4EA4;&#x7CFB;&#x7EDF;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x8D4B;&#x4E88;&#x4E86;&#x8FD9;&#x4E2A;&#x82B1;&#x540D;&#x4E00;&#x4E2A;&#x542B;&#x4E49;&#xFF0C;&#x83DC;&#x7684;&#x542B;&#x4E49;&#x662F;&#xFF0C;&#x8C26;&#x900A;&#x4E3A;&#x4EBA;&#xFF0C;&#x4F4E;&#x8C03;&#x505A;&#x4E8B;&#xFF0C;&#x5C71;&#x5916;&#x6709;&#x5C71;&#xFF0C;&#x4EBA;&#x5916;&#x6709;&#x4EBA;&#x3002;<strong>&#x8BFB;&#x4E66;&#x8BFB;&#x7684;&#x8D8A;&#x591A;&#xFF0C;&#x5C31;&#x4F1A;&#x53D1;&#x73B0;&#x8EAB;&#x8FB9;&#x7684;&#x540C;&#x5B66;&#x90FD;&#x662F;&#x4F18;&#x79C0;&#x4E14;&#x4E0D;&#x5E26;&#x4F18;&#x8D8A;&#x611F;&#x7684;&#x4EBA;&#xFF0C;&#x4ED6;&#x4EEC;&#x660E;&#x4EAE;&#x4E0D;&#x523A;&#x773C;&#xFF0C;&#x81EA;&#x4FE1;&#x53C8;&#x61C2;&#x5F97;&#x6536;&#x655B;&#xFF0C;&#x8BA9;&#x4F60;&#x4EF0;&#x6155;&#x7684;&#x540C;&#x65F6;&#x53C8;&#x80FD;&#x7ED9;&#x4F60;&#x80FD;&#x91CF;</strong>&#x3002;&#x4ED4;&#x7EC6;&#x53CD;&#x601D;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x81EA;&#x5DF1;&#x4E5F;&#x8BB8;&#x6839;&#x4E0A;&#x5E76;&#x4E0D;&#x662F;&#x8C26;&#x865A;&#xFF0C;&#x66F4;&#x591A;&#x7684;&#x53EF;&#x80FD;&#x662F;&#x81EA;&#x5351;&#x3002;&#x5927;&#x5B66;&#x6BD5;&#x4E1A;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x56E0;&#x4E3A;&#x4E0D;&#x662F; 985 &#x7684;&#x5B66;&#x5386;&#xFF0C;&#x88AB;&#x67D0;&#x4E9B;&#x72EC;&#x89D2;&#x517D;&#x516C;&#x53F8;&#x6254;&#x7B80;&#x5386;&#x5230;&#x4E86;&#x5783;&#x573E;&#x6876;&#xFF0C;&#x6CA1;&#x6709;&#x7ED9;&#x9762;&#x8BD5;&#x673A;&#x4F1A;&#xFF1B;&#x56E0;&#x4E3A;&#x4E0D;&#x662F; 985 &#x7684;&#x5B66;&#x5386;&#xFF0C;&#x88AB;&#x725B;&#x4EBA;&#x9119;&#x89C6;&#x662F;&#x5783;&#x573E;&#x3002;&#x8003;&#x7814;&#x62A5;&#x8003;&#x4E86; 985 &#x5B66;&#x6821;&#xFF0C;&#x4E5F;&#x56E0;&#x4E3A;&#x79CD;&#x79CD;&#x539F;&#x56E0;&#x6700;&#x7EC8;&#x5931;&#x8D25;&#x3002;&#x793E;&#x4F1A;&#x4E00;&#x6B21;&#x6B21;&#x7684;&#x5B9E;&#x6253;&#x5B9E;&#x7684;&#x632B;&#x8D25;&#x7740;&#x6211;&#xFF0C;985 &#x5DF2;&#x7136;&#x6210;&#x4E3A;&#x4E86;&#x6211;&#x5FC3;&#x5934;&#x4E0A;&#x4E00;&#x9053;&#x6DF1;&#x6DF1;&#x7684;&#x4F24;&#x75A4;&#x3002;&#x8FD9;&#x9053;&#x4F24;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x4F1A;&#x63ED;&#x6389;&#xFF0C;&#x6211;&#x4E0D;&#x77E5;&#x9053;&#xFF0C;&#x8FD9;&#x9053;&#x6C9F;&#x58D1;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x4F1A;&#x7FFB;&#x7BC7;&#xFF0C;&#x6211;&#x4E5F;&#x4E0D;&#x77E5;&#x9053;&#xFF0C;&#x6211;&#x552F;&#x4E00;&#x660E;&#x767D;&#x7684;&#x662F;&#xFF0C;&#x6211;&#x4FEF;&#x4E0B;&#x8EAB;&#x5B50;&#xFF0C;&#x5728;&#x5730;&#x4E0A;&#x722C;&#xFF0C;&#x4E0D;&#x60F3;&#x8BA9;&#x5927;&#x5BB6;&#x770B;&#x89C1;&#x6211;&#x7834;&#x635F;&#x4E0D;&#x582A;&#x7684;&#x5FC3;&#x7075;&#xFF0C;&#x65E2;&#x7136;&#x662F;&#x5783;&#x573E;&#x4E86;&#xFF0C;&#x8FD8;&#x6709;&#x4EC0;&#x4E48;&#x8D44;&#x683C;&#x5E73;&#x8D77;&#x5E73;&#x5750;&#x6216;&#x8005;&#x9AD8;&#x4EBA;&#x4E00;&#x7B49;&#xFF1F;</p>
<p>&#x6211;&#x9047;&#x5230;&#x4E86;&#x4E00;&#x4E2A; 985 &#x5927;&#x4F6C;&#x6765;&#x81EA;&#x5B66;&#x5386;&#x7684;&#x201C;&#x9119;&#x89C6;&#x201D;&#xFF0C;&#x6211;&#x4ED4;&#x7EC6;&#x53CD;&#x7701;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x5FC5;&#x987B;&#x8BC1;&#x660E;&#x4E00;&#x4E0B;&#x81EA;&#x5DF1;&#xFF0C;&#x6253;&#x8D25;&#x5185;&#x5FC3;&#x4E0D;&#x81EA;&#x4FE1;&#x7684;&#x201C;&#x5FC3;&#x9B54;&#x201D;&#x3002;&#x8FD9;&#x4E2A;&#x5FC3;&#x9B54;&#x7B97;&#x662F;&#x6211;&#x804C;&#x4E1A;&#x751F;&#x6DAF;&#x7B2C;&#x4E00;&#x4E2A; 5 &#x5E74;&#x6700;&#x540E;&#x7684;&#x4E00;&#x4E2A;&#x5927; boss&#xFF0C;&#x4E5F;&#x662F;&#x804C;&#x4E1A;&#x751F;&#x6DAF;&#x7B2C;&#x4E8C;&#x4E2A; 5 &#x5E74;&#x7684;&#x7B2C;&#x4E00;&#x4E2A; boss&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x4E0B;&#x5B9A;&#x51B3;&#x5FC3;&#x5FC5;&#x987B;&#x8FC7;&#x4E86;&#x8FD9;&#x4E00;&#x5173;&#x3002;&#x60F3;&#x8BC1;&#x660E;&#x81EA;&#x5DF1;&#x4E0D;&#x8F93;&#x4E8E; 985 &#x5B66;&#x751F;&#xFF0C;&#x60F3;&#x8BC1;&#x660E;&#x81EA;&#x5DF1;&#x7684;&#x5B9E;&#x529B;&#xFF0C;&#x9700;&#x8981;&#x4ECE;&#x67D0;&#x4E9B;&#x65B9;&#x9762;&#x6765;&#x8BC1;&#x660E;&#x3002;&#x6B63;&#x597D;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#x770B;&#x89C1;&#x4E86;&#x4E00;&#x6BB5;&#x8BDD;&#xFF0C;&#x201C;&#x770B;&#x7A0B;&#x5E8F;&#x5458;&#x662F;&#x5426;&#x52E4;&#x594B;&#x5C31;&#x770B;&#x4ED6;&#x7684;&#x82F1;&#x8BED;&#x597D;&#x4E0D;&#x597D;&#xFF0C;&#x667A;&#x5546;&#x9AD8;&#x4E0D;&#x9AD8;&#x5C31;&#x770B;&#x4ED6;&#x7B97;&#x6CD5;&#x597D;&#x4E0D;&#x597D;&#x201D;&#x3002;&#x90A3;&#x4E48;&#x6211;&#x5C31;&#x89C9;&#x5F97;&#x5728;&#x8FD9; 2 &#x65B9;&#x9762;&#x4E0A;&#x8BC1;&#x660E;&#x81EA;&#x5DF1;&#x7684;&#x5B9E;&#x529B;&#x3002;&#x5FC3;&#x91CC;&#x9ED8;&#x9ED8;&#x4E0B;&#x5B9A;&#x51B3;&#x5FC3;&#xFF1A;&#x7B49;&#x6211;&#x4E0B;&#x6B21;&#x9762;&#x8BD5;&#xFF0C;&#x6211;&#x4E00;&#x5B9A;&#x4E5F;&#x8981;&#x53BB;&#x9762;&#x201C;&#x9119;&#x89C6;&#x201D;&#x6211;&#x7684;&#x90A3;&#x4F4D; 985 &#x5927;&#x4F6C;&#x6240;&#x5728;&#x7684;&#x5382;&#xFF0C;&#x5F53;&#x6211;&#x4F5C;&#x4E3A;&#x4ED6;&#x7684;&#x540C;&#x4E8B;&#xFF0C;&#x804C;&#x7EA7;&#x8FD8;&#x8981;&#x548C;&#x4ED6;&#x5E73;&#x8D77;&#x5E73;&#x5750;&#x3002;&#x5E0C;&#x671B;&#x5230;&#x4E86;&#x90A3;&#x4E2A;&#x65F6;&#x5019;&#xFF0C;&#x4ED6;&#x80FD;&#x4E0D;&#x9119;&#x89C6;&#x6211;&#x975E; 985 &#x7684;&#x5B66;&#x5386;&#x3002;&#x4EBA;&#x6D3B;&#x7740;&#x6709;&#x65F6;&#x5019;&#x5C31;&#x662F;&#x4E3A;&#x4E86;&#x4E00;&#x53E3;&#x6C14;&#xFF0C;&#x4F60;&#x82E5;&#x4E0D;&#x8BA4;&#x8F93;&#xFF0C;&#x4E0D;&#x670D;&#x8F93;&#xFF0C;&#x4E0D;&#x613F;&#x610F;&#x627F;&#x8BA4;&#x81EA;&#x5DF1;&#x662F; loser&#xFF0C;&#x4E0D;&#x613F;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x90A3;&#x5C31;&#x7528;&#x884C;&#x52A8;&#x8BC1;&#x660E;&#x7ED9;&#x5632;&#x7B11;&#x8FC7;&#x4F60;&#x7684;&#x4EBA;&#x770B;&#xFF0C;&#x53BB;&#x8BC1;&#x660E;&#x4F60;&#x4E5F;&#x6709;&#x201C;&#x8FC7;&#x4EBA;&#x4E4B;&#x5904;&#x201D;~&#x6211;&#x5C31;&#x60F3;&#x7528;&#x6210;&#x7EE9;&#x6765;&#x8BC1;&#x660E;&#x7ED9;&#x5929;&#x4E0B;&#x4EBA;&#x770B;&#xFF0C;&#x201C;&#x867D;&#x7136;&#x6211;&#x4E0D;&#x662F;&#x5B66;&#x9738;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x51B3;&#x4E0D;&#x662F;&#x5B66;&#x6E23;&#xFF01;&#x201D;&#xFF0C;&#x6211;&#x60F3;&#x6495;&#x6389;&#x5FC3;&#x7075;&#x4E0A;&#x5B66;&#x6E23;&#x7684;&#x8FD9;&#x5757;&#x75A4;&#x3002;</p>
<p>&#x4EE5;&#x4E0A;&#x5C31;&#x662F;&#x6211;&#x4ECE;&#x8FEA;&#x62DC;&#x56DE;&#x6765;&#x5230; 7 &#x6708;&#x4EFD;&#x8FD9;&#x671F;&#x95F4;&#x7684;&#x4E00;&#x4E9B;&#x5FC3;&#x8DEF;&#x5386;&#x7A0B;&#x3002;&#x4ECE;&#x840C;&#x751F;&#x53BB;&#x6D77;&#x5916;&#x5DE5;&#x4F5C;&#x7684;&#x60F3;&#x6CD5;&#xFF0C;&#x5230;&#x81EA;&#x6211;&#x53CD;&#x7701;&#xFF0C;&#x81EA;&#x6211;&#x8BA4;&#x77E5;&#xFF0C;&#x6700;&#x540E;&#x5230;&#x4E0B;&#x5B9A;&#x51B3;&#x5FC3;&#x8BC1;&#x660E;&#x81EA;&#x5DF1;&#x3002;<strong>&#x6240;&#x4EE5;&#x4ECE; 7 &#x6708;&#x5F00;&#x59CB;&#xFF0C;&#x6211;&#x51B3;&#x5B9A;&#x5F00;&#x59CB;&#x4E86;&#x82F1;&#x8BED;&#x96C5;&#x601D;&#x548C;&#x6258;&#x798F;&#x7684;&#x5907;&#x8003;&#x3002;&#x4ECE;&#x4ECA;&#x5E74; 3 &#x6708; 18 &#x65E5;&#x5F00;&#x59CB;&#xFF0C;&#x6211;&#x5F00;&#x59CB;&#x5237; LeetCode&#x3002;&#x82F1;&#x8BED; + &#x7B97;&#x6CD5;&#x4E24;&#x624B;&#x6293;&#x3002;</strong></p>
<p>&#x5728;&#x82F1;&#x8BED;&#x5907;&#x8003;&#x671F;&#x95F4;&#x4E5F;&#x6709;&#x6765;&#x81EA;&#x5404;&#x4E2A;&#x5927;&#x5382;&#x5927;&#x4F6C;&#x7684;&#x9762;&#x8BD5;&#x9080;&#x8BF7;&#xFF0C;&#x6709;&#x6765;&#x81EA;&#x6EF4;&#x6EF4;&#xFF0C;&#x817E;&#x8BAF;&#xFF0C;&#x5934;&#x6761;&#xFF0C;&#x963F;&#x91CC;&#x5DF4;&#x5DF4;&#xFF0C;&#x767E;&#x5EA6;&#xFF0C;&#x62FC;&#x591A;&#x591A;&#xFF0C;&#x7F8E;&#x56E2;&#x7B49;&#x7B49;&#x5927;&#x5382;&#x7684;&#x9762;&#x8BD5;&#x9080;&#x8BF7;&#x3002;&#xFF08;&#x6B64;&#x5904;&#x5BF9; <strong>@&#x5B59;&#x6E90;</strong> &#x5927;&#x4F6C;&#x8BF4;&#x58F0;&#x5BF9;&#x4E0D;&#x8D77;&#x1F64F;&#x1F3FB;&#xFF0C;&#x9080;&#x8BF7;&#x4E86;&#x6211;&#x597D;&#x51E0;&#x6B21;&#xFF0C;&#x6211;&#x90FD;&#x6CA1;&#x6709;&#x8BF4;&#x660E;&#x539F;&#x56E0;&#xFF0C;&#x6709;&#x4E9B;&#x8BDD;&#x5F53;&#x65F6;&#x5B9E;&#x5728;&#x4E0D;&#x65B9;&#x4FBF;&#x8BF4;&#x51FA;&#x6765;&#xFF0C;&#x73B0;&#x5728;&#x5982;&#x679C;&#x4F60;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#xFF0C;&#x8FD8;&#x8BF7;&#x8C05;&#x89E3;&#x6211;&#x554A;&#xFF09;&#x4E5F;&#x6709;&#x6765;&#x81EA;&#x5927;&#x5382; HR &#x7684;&#x9762;&#x8BD5;&#x9080;&#x8BF7;&#x3002;&#x6211;&#x5728;&#x8FD9;&#x91CC;&#x548C;&#x4F60;&#x4EEC;&#x8BF4;&#x4E00;&#x58F0;&#x5BF9;&#x4E0D;&#x8D77;&#x4E86;&#xFF0C;&#x5F53;&#x65F6;&#x56DE;&#x590D;&#x4F60;&#x4EEC;&#x7684;&#x90FD;&#x662F;&#x201C;&#x6211;&#x6709;&#x6211;&#x81EA;&#x5DF1;&#x7684;&#x5B89;&#x6392;&#xFF0C;&#x5BF9;&#x4E0D;&#x8D77;&#x201D;&#x3002;&#x5176;&#x5B9E;&#x6211;&#x662F;&#x60F3;&#x53BB;&#x6D77;&#x5916;&#x5927;&#x5382;&#x5E72;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x591A;&#x6210;&#x957F;&#x6210;&#x957F;&#xFF0C;&#x548C;&#x4E16;&#x754C;&#x4E0A;&#x6700;&#x4F18;&#x79C0;&#x7684;&#x5DE5;&#x7A0B;&#x5E08;&#x5207;&#x78CB;&#x5207;&#x78CB;&#xFF0C;&#x518D;&#x4EE5;&#x6700;&#x597D;&#x7684;&#x72B6;&#x6001;&#x5165;&#x804C;&#x5927;&#x5382;&#x3002;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#xFF0C;&#x5C31;&#x662F;&#x6211;&#x4E00;&#x76F4;&#x9690;&#x85CF;&#x7740;&#x7684;&#x7B54;&#x6848;&#x3002;</p>
<p>&#x6B64;&#x5904;&#x4E5F;&#x9700;&#x8981; <strong>@&#x5B50;&#x5947;</strong> &#x548C; <strong>@&#x8427;&#x7389;</strong>&#xFF0C;&#x8FD9;&#x4E24;&#x4E2A;&#x5927;&#x4F6C;&#x4E5F;&#x9080;&#x8BF7;&#x6211;&#x9762;&#x8BD5;&#x5F88;&#x4E45;&#x4E86;&#x3002;&#x6211;&#x4E00;&#x76F4;&#x59D4;&#x5A49;&#x62D2;&#x7EDD;&#xFF0C;&#x53EF;&#x80FD;&#x7531;&#x4E8E;&#x548C;&#x4F60;&#x4EEC;&#x592A;&#x719F;&#x4E86;&#xFF0C;&#x5BFC;&#x81F4;&#x6211;&#x6CA1;&#x6CD5;&#x53BB;&#x4F60;&#x4EEC;&#x90A3;&#x5165;&#x804C;&#x3002;&#x1F64F;&#x1F3FB;&#x8FD8;&#x8BF7; 2 &#x4F4D;&#x5927;&#x4F6C;&#x539F;&#x8C05;&#x6211;&#x7684;&#x5F53;&#x521D;&#x7684;&#x62D2;&#x7EDD;&#x3002;&#x8FD8;&#x6709; @&#x963F;&#x91CC;&#x4E91;&#x5927;&#x4F6C;&#xFF0C;<strong>@&#x6DD8;&#x654F;</strong>&#xFF0C;@&#x95F2;&#x9C7C;&#x5927;&#x4F6C;&#xFF0C;<strong>@&#x5B97;&#x5FC3;</strong>&#x7684;&#x9762;&#x8BD5;&#x9080;&#x8BF7;&#xFF0C;&#x6211;&#x5B9E;&#x5728;&#x975E;&#x5E38;&#x4E0D;&#x597D;&#x610F;&#x601D;&#x3002;&#x8FD8;&#x6709;&#x5F88;&#x591A;&#x5927;&#x4F6C;&#x4E5F;&#x79C1;&#x4FE1;&#x9080;&#x8BF7;&#x8FC7;&#x6211;&#xFF0C;&#x6B64;&#x5904;&#x6CA1;&#x6CD5;&#x4E00;&#x4E00;@&#xFF0C;&#x5982;&#x679C;&#x4F60;&#x4EEC;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x4E86;&#xFF0C;&#x5C31;&#x8BF7;&#x539F;&#x8C05;&#x5C0F;&#x5F1F;&#x6211;&#x5427;&#x3002;&#x6709;&#x4E0D;&#x5C11;&#x4EBA;&#x8BF4;&#x6211;&#x8D70;&#x4E86;&#x4E00;&#x6B65;&#x9519;&#x68CB;&#xFF0C;&#x56E0;&#x4E3A;&#x6CA1;&#x6709;&#x52A0;&#x5165;&#x4F60;&#x4EEC;&#x7684;&#x56E2;&#x961F;&#x3002;&#x5728;&#x6B64;&#x6211;&#x4E5F;&#x4E00;&#x5E76;&#x8BF4;&#x58F0;&#x62B1;&#x6B49;&#x5427;&#xFF0C;&#x5C0F;&#x5F1F;&#x4E0D;&#x52A0;&#x5165;&#x53EA;&#x56E0;&#x4E3A;&#x6211;&#x89C9;&#x5F97;<strong>&#x6211;&#x8FD8;&#x4E0D;&#x914D;&#x52A0;&#x5165;&#x4F60;&#x4EEC;</strong>&#xFF0C;&#x4F60;&#x4EEC;&#x90FD;&#x975E;&#x5E38;&#x4F18;&#x79C0;&#xFF0C;&#x6211;&#x8FD8;&#x592A;&#x83DC;&#x4E86;&#x3002;&#x4EBA;&#x751F;&#x8FD8;&#x957F;&#xFF0C;&#x5F53;&#x6211;&#x4FEE;&#x70BC;&#x597D;&#x81EA;&#x5DF1;&#x4EE5;&#x540E;&#xFF0C;&#x672A;&#x6765;&#x518D;&#x52A0;&#x5165;&#x4F60;&#x4EEC;&#x7684;&#x673A;&#x4F1A;&#x5F88;&#x591A;&#xFF01;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_16.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x5728;&#x63D0;&#x5347;&#x82F1;&#x8BED;&#x7684;&#x671F;&#x95F4;&#xFF0C;&#x4E5F;&#x6709;&#x592A;&#x591A;&#x7684;&#x201C;&#x8BF1;&#x60D1;&#x201D;&#xFF0C;&#x6709;&#x6765;&#x81EA;&#x730E;&#x5934;&#x7684;&#x201C;&#x5632;&#x8BBD;&#x201D;&#xFF1A;&#x5927;&#x6982; 19 &#x5E74; 7 &#x6708;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6709;&#x4E00;&#x4E2A;&#x730E;&#x5934;&#x52A0;&#x6211;&#xFF0C;&#x8BF4;&#x6211;&#x5DE5;&#x4F5C;&#x5FEB; 5 &#x5E74;&#x4E86;&#xFF0C;&#x8FD8;&#x6CA1;&#x6709;&#x5230; P7&#xFF0C;&#x6280;&#x672F;&#x6709;&#x70B9;&#x5783;&#x573E; &#xFF0C;&#x5728;&#x963F;&#x91CC;&#x4E5F;&#x5446;&#x4E86; 2 &#x5E74;&#x4E86;&#xFF0C;&#x53EF;&#x4EE5;&#x51FA;&#x53BB;&#x770B;&#x770B;&#x673A;&#x4F1A;&#x3002;&#x6211;&#x5F53;&#x65F6;&#x5FC3;&#x91CC;&#x597D;&#x201C;&#x618B;&#x5C48;&#x201D;&#xFF0C;&#x6211;&#x5F53;&#x65F6;&#x5C31;&#x60F3;&#x8BC1;&#x660E;&#x4E00;&#x4E0B;&#x81EA;&#x5DF1;&#x7684;&#x5B9E;&#x529B;&#x3002;&#x4E0D;&#x8FC7;&#x6709;&#x201C;&#x5FC3;&#x9B54;&#x201D;&#x7684;&#x6211;&#xFF0C;&#x5F53;&#x65F6;&#x4E5F;&#x53EA;&#x80FD;&#x5FCD;&#x4E86;&#xFF0C;&#x5B9B;&#x62D2;&#x4E86;&#xFF0C;&#x201C;&#x6211;&#x7684;&#x6280;&#x672F;&#x5B9E;&#x529B;&#x8FD8;&#x4E0D;&#x884C;&#xFF0C;&#x9762;&#x4E0D;&#x4E0A;&#x5934;&#x6761;&#xFF0C;&#x6211;&#x8FD8;&#x9700;&#x8981;&#x5728;&#x8FD9;&#x91CC;&#x518D;&#x78E8;&#x70BC;&#x51E0;&#x5E74;&#x201D;&#x3002;&#x670B;&#x53CB;&#x5708;&#x4E5F;&#x6709;&#x6765;&#x81EA;&#x65C5;&#x53CB;&#x7684;&#x7F8E;&#x666F;&#x7167;&#x7247;&#xFF0C;&#x6709;&#x6765;&#x81EA;&#x65E5;&#x672C;&#x65C5;&#x53CB;&#x7684;&#x65C5;&#x884C;&#x9080;&#x8BF7;&#xFF0C;&#x6709;&#x6765;&#x81EA;&#x6B27;&#x6D32;&#x65C5;&#x53CB;&#x7684;&#x65C5;&#x884C;&#x9080;&#x8BF7;&#x3002;&#x6709;&#x6765;&#x81EA;&#x7F8E;&#x6D32;&#x670B;&#x53CB;&#x7684;&#x65C5;&#x884C;&#x9080;&#x8BF7;&#x3002;&#x5728;&#x6CA1;&#x6709;&#x6218;&#x80DC;&#x6211;&#x5185;&#x5FC3;&#x5FC3;&#x9B54;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B9E;&#x5728;&#x6CA1;&#x5FC3;&#x601D;&#x53BB;&#x73A9;&#xFF0C;&#x4F46;&#x662F;&#x6BCF;&#x5929;&#x5237;&#x5230;&#x7F8E;&#x666F;&#x7167;&#x7247;&#xFF0C;&#x5FC3;&#x91CC;&#x5B9E;&#x5728;&#x75D2;&#x75D2;&#x3002;&#x4E8E;&#x662F;&#xFF0C;&#x6211;&#x8FD8;&#x662F;&#x9009;&#x62E9;&#x5173;&#x95ED;&#x670B;&#x53CB;&#x5708;&#xFF0C;&#x51CF;&#x5C11;&#x8BF1;&#x60D1;&#x3002;&#x4F46;&#x662F;&#x53C8;&#x53D1;&#x73B0;&#x65C5;&#x6E38;&#x7FA4;&#x91CC;&#x9762;&#x8FD8;&#x6709;&#x8BF1;&#x60D1;&#xFF0C;&#x4E8E;&#x662F;&#x5C4F;&#x853D;&#x7FA4;&#x6D88;&#x606F;&#xFF0C;&#x53C8;&#x53D1;&#x73B0;&#x8FD8;&#x4F1A;&#x6709;&#x4E00;&#x4E9B;&#x79C1;&#x804A;&#x7684;&#x8BF1;&#x60D1;&#xFF0C;&#x6700;&#x7EC8;&#x9009;&#x62E9;&#x5173;&#x95ED;&#x5FAE;&#x4FE1;&#x4E86;&#x3002;&#x8FD9;&#x548C;&#x67D0;&#x5B66;&#x4E60; app &#x6BCF;&#x65E5;&#x63A8;&#x9001;&#x8BF4;&#x7684;&#x4E00;&#x6837;&#x3002;&#x201C;&#x5FAE;&#x4FE1;&#x4E0D;&#x5FC5;&#x6BCF;&#x6761;&#x90FD;&#x770B;&#xFF0C;&#x4F46;&#x662F;&#x5355;&#x8BCD;&#x4E0D;&#x80FD;&#x4E00;&#x65E5;&#x4E0D;&#x80CC;&#x201D;&#x3002;&#xFF08;&#x4E0D;&#x8FC7;&#x597D;&#x50CF;&#x4E0D;&#x7528;&#x5FAE;&#x4FE1;&#xFF0C;&#x5BF9;&#x751F;&#x6D3B;&#x597D;&#x50CF;&#x5F71;&#x54CD;&#x4E0D;&#x592A;&#x5927;&#xFF0C;&#x5DE5;&#x4F5C;&#x4E2D;&#x91CD;&#x8981;&#x7684;&#x6D88;&#x606F;&#x90FD;&#x5728;&#x9489;&#x9489;&#x4E0A;&#xFF0C;&#x548C;&#x5BB6;&#x4EBA;&#x804A;&#x5929;&#x90FD;&#x7528;&#x7684; iMessage&#xFF0C;&#x9022;&#x5E74;&#x8FC7;&#x8282;&#x4E0A;&#x5FAE;&#x4FE1;&#x548C;&#x670B;&#x53CB;&#x95EE;&#x5019;&#x4E00;&#x4E0B;&#xFF0C;&#x53D1;&#x53D1;&#x7EA2;&#x5305;&#x9001;&#x795D;&#x798F;&#xFF09;</p>
<p>&#x6211;&#x4E00;&#x5EA6;&#x5220;&#x6389;&#x4E86;&#x5FAE;&#x4FE1;&#x597D;&#x51E0;&#x4E2A;&#x6708;&#xFF0C;&#x5C4F;&#x853D;&#x4E86;&#x6240;&#x6709;&#x5916;&#x90E8;&#x6D88;&#x606F;&#x3002;&#x8FD9;&#x4E5F;&#x662F;&#x4E3A;&#x4EC0;&#x4E48;&#x597D;&#x591A;&#x4EBA;&#x53D1;&#x6211;&#x6D88;&#x606F;&#xFF0C;&#x6211;&#x90FD;&#x6CA1;&#x56DE;&#x590D;&#x7684;&#x539F;&#x56E0;&#x3002;&#x5E76;&#x4E0D;&#x662F;&#x56E0;&#x4E3A;&#x5FD9;&#xFF0C;&#x5E76;&#x4E0D;&#x662F;&#x56E0;&#x4E3A;&#x4E0D;&#x60F3;&#x56DE;&#xFF0C;&#x800C;&#x662F;&#x56E0;&#x4E3A;&#x6211;&#x6CA1;&#x7528;&#x5FAE;&#x4FE1;&#x4E86;&#x3002;&#x5FAE;&#x4FE1;&#x4E0A;&#x8BF1;&#x60D1;&#x592A;&#x591A;&#xFF0C;&#x52A0;&#x4E0A;&#x6211;&#x81EA;&#x5DF1;&#x5FC3;&#x7406;&#x8C03;&#x8282;&#x80FD;&#x529B;&#x5F31;&#xFF0C;&#x6211;&#x76F4;&#x63A5;&#x65AD;&#x820D;&#x79BB;&#x3002;&#x5FAE;&#x4FE1;&#x7FA4;&#x91CC;&#x7ECF;&#x5E38;&#x4F1A;&#x6709;&#x4EBA;&#x6652;&#x767E;&#x4E07;&#x9AD8;&#x85AA;&#xFF0C;&#x6652;&#x5343;&#x4E07;&#x8DD1;&#x8F66;&#xFF0C;&#x6652;&#x4E07;&#x4EBF;&#x8C6A;&#x5B85;&#xFF0C;&#x770B;&#x4E86;&#x4EE5;&#x540E;&#x8981;&#x4E48;&#x81EA;&#x5DF1;&#x4F1A;&#x9178;&#x67E0;&#x6AAC;&#xFF0C;&#x8981;&#x4E48;&#x5C31;&#x6068;&#x81EA;&#x5DF1;&#x6709;&#x591A;&#x6CA1;&#x51FA;&#x606F;&#x3002;&#x591A;&#x591A;&#x5C11;&#x5C11;&#x5FC3;&#x7406;&#x4E0A;&#x4F1A;&#x6709;&#x4E00;&#x4E9B;&#x6CE2;&#x52A8;&#x3002;&#x8FD9;&#x4E9B;&#x5FC3;&#x7406;&#x6CE2;&#x52A8;&#x5BF9;&#x5907;&#x8003;&#x65F6;&#x671F;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x597D;&#x5904;&#xFF0C;&#x81F3;&#x5C11;&#x5BF9;&#x6211;&#x6765;&#x8BF4;&#x3002;&#x5220;&#x6389;&#x5FAE;&#x4FE1;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x6BCF;&#x5929;&#x53EA;&#x60F3;&#x6211;&#x81EA;&#x5DF1;&#x7684;&#x4E8B;&#x60C5;&#x3002;&#x5FC3;&#x7406;&#x4E0A;&#x81F3;&#x5C11;&#x505A;&#x5230;&#x4E86;&#x4E0D;&#x4EE5;&#x7269;&#x559C;&#x4E0D;&#x4EE5;&#x5DF1;&#x60B2;&#x7684;&#x5883;&#x754C;&#x3002;&#xFF08;&#x6BCF;&#x4E2A;&#x4EBA;&#x5907;&#x8003;&#x72B6;&#x6001;&#x548C;&#x81EA;&#x6211;&#x8C03;&#x8282;&#x80FD;&#x529B;&#x4E0D;&#x540C;&#xFF0C;&#x6211;&#x7684;&#x5FC3;&#x8DEF;&#x5386;&#x7A0B;&#x4E5F;&#x8BB8;&#x4E0D;&#x80FD;&#x590D;&#x5236;&#xFF0C;&#x53EA;&#x662F;&#x5199;&#x51FA;&#x6765;&#x7ED9;&#x5927;&#x5BB6;&#x53C2;&#x8003;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x5F53;&#x505A;&#x662F;&#x201C;&#x7B11;&#x6599;&#x201D;&#xFF0C;&#x7ED9;&#x5927;&#x5BB6;&#x7B11;&#x7B11;&#x3002;&#xFF09;</p>
<p><strong>&#x4EBA;&#x9700;&#x8981;&#x6C89;&#x6DC0;&#xFF0C;&#x9700;&#x8981;&#x201C;&#x9759;&#x517B;&#x201D;&#xFF0C;&#x5F39;&#x7C27;&#x7684;&#x59FF;&#x6001;&#x538B;&#x7684;&#x8D8A;&#x4F4E;&#xFF0C;&#x4E4B;&#x540E;&#x5F39;&#x7684;&#x8D8A;&#x9AD8;</strong>&#x3002;&#x6709;&#x4E9B;&#x4EBA;&#x8BF4;&#x6211;&#x662F;&#x4E00;&#x4E2A;&#x5F88;&#x81EA;&#x5F8B;&#x7684;&#x4EBA;&#x3002;&#x4E0D;&#x8FC7;&#x6070;&#x6070;&#x76F8;&#x53CD;&#xFF0C;&#x6211;&#x81EA;&#x5DF1;&#x8BA4;&#x4E3A;&#x6211;&#x662F;&#x4E00;&#x4E2A;&#x4E0D;&#x592A;&#x81EA;&#x5F8B;&#x7684;&#x4EBA;&#x3002;&#x4E00;&#x4E2A;&#x5927;&#x5E08;&#x548C;&#x8BF4;&#x4E86;&#x4E09;&#x4E2A;&#x5B57;&#xFF0C;&#x89E3;&#x51B3;&#x6211;&#x4E0D;&#x81EA;&#x5F8B;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x201C;&#x6212;&#xFF0C;&#x5B9A;&#xFF0C;&#x6167;&#x201D;&#x3002;&#x8BA9;&#x6211;&#x6212;&#x6389;&#x4E00;&#x4E9B;&#x4E1C;&#x897F;&#xFF0C;&#x8282;&#x7EA6;&#x65F6;&#x95F4;&#xFF0C;&#x5FC3;&#x5B9A;&#x4E0B;&#x6765;&#xFF0C;&#x4EA7;&#x751F;&#x4E00;&#x4E9B;&#x5B66;&#x4E60;&#x7684;&#x5B9A;&#x529B;&#xFF0C;&#x6700;&#x7EC8;&#x4F1A;&#x4EA7;&#x751F;&#x667A;&#x6167;&#x3002;&#x5728;&#x7FA4;&#x91CC;&#x804A;&#x5929;&#x6211;&#x4F1A;&#x5F88;&#x4E0D;&#x81EA;&#x5F8B;&#x5462;&#x3002;&#x7FA4;&#x53CB;&#x7684;&#x95EE;&#x9898;&#x6211;&#x770B;&#x7740;&#x5C31;&#x60F3;&#x56DE;&#x7B54;&#x3002;&#x4E5F;&#x53EF;&#x80FD;&#x5DE5;&#x4F5C; 5 &#x5206;&#x949F;&#xFF0C;&#x804A;&#x5929; 3 &#x5C0F;&#x65F6;&#x1F602;&#x1F64F;&#x6240;&#x4EE5;&#x6211;&#x51B3;&#x5B9A;&#x514B;&#x5236;&#x4E00;&#x4E0B;&#x3002;</p>
<p>&#x5C31;&#x8FD9;&#x6837;&#xFF0C;&#x6211;&#x671D;&#x7740;&#x53BB;&#x6D77;&#x5916;&#x5DE5;&#x4F5C;&#x7684;&#x76EE;&#x6807;&#x72C2;&#x5954;&#x7740;&#x3002;</p>
<h2 id="%E5%86%B3%E5%AE%9A%E7%95%99%E5%AD%A6">&#x51B3;&#x5B9A;&#x7559;&#x5B66;</h2>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_18.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x5728;&#x51C6;&#x5907;&#x5B66;&#x82F1;&#x8BED;&#x4E4B;&#x524D;&#xFF0C;&#x6211;&#x53BB;&#x67D0;&#x82F1;&#x8BED;&#x57F9;&#x8BAD;&#x673A;&#x6784;&#x88F8;&#x6D4B;&#x4E86;&#x4E00;&#x6B21;&#x96C5;&#x601D;&#x6C34;&#x5E73;&#xFF0C;&#x5C45;&#x7136;&#x624D; 5.5 &#x5206;&#x3002;&#x624E;&#x5FC3;&#x7684;&#x662F;&#xFF0C;&#x8001;&#x5E08;&#x8FD8;&#x5B89;&#x6170;&#x6211;&#xFF0C;&#x201C;&#x4F60;&#x5FEB;&#x5DE5;&#x4F5C; 5 &#x5E74;&#x4E86;&#xFF0C;&#x53EF;&#x80FD;&#x5E73;&#x65F6;&#x7528;&#x82F1;&#x8BED;&#x4E0D;&#x591A;&#x5427;&#xFF0C;&#x6765;&#x4E0A;&#x6211;&#x4EEC;&#x7684;&#x8BFE;&#xFF0C;&#x5E26;&#x4F60;&#x63D0;&#x9AD8;&#x82F1;&#x8BED;&#x6C34;&#x5E73;&#x201D;&#x3002;&#x6211;&#x5E73;&#x65F6;&#x5DE5;&#x4F5C;&#x4E0A;&#x6BCF;&#x5929;&#x6253;&#x4EE3;&#x7801;&#x90FD;&#x662F;&#x82F1;&#x8BED;&#x554A;&#xFF0C;&#x8FD9;&#x5FC3;&#x91CC;&#x843D;&#x5DEE;&#x628A;&#x6211;&#x6253;&#x81F3;&#x8C37;&#x5E95;&#x3002;&#x73B0;&#x5728;&#x56DE;&#x5934;&#x60F3;&#x60F3;&#xFF0C;&#x8FD9;&#x4E2A;&#x82F1;&#x8BED;&#x57F9;&#x8BAD;&#x673A;&#x6784;&#x7ED9;&#x6211;&#x7684;&#x8BC4;&#x5206;&#x662F;&#x771F;&#x5B9E;&#x7684;&#x4E48;&#xFF1F;&#x4F1A;&#x4E0D;&#x4F1A;&#x6545;&#x610F;&#x6253;&#x4F4E;&#x5206;&#xFF0C;&#x201C;&#x9A97;&#x201D;&#x6211;&#x62A5;&#x73ED;&#x7684;&#x5957;&#x8DEF;&#xFF1F;&#x6BD5;&#x7ADF;&#x6211;&#x6CA1;&#x6709;&#x53C2;&#x52A0;&#x8FC7;&#x4E00;&#x6B21;&#x771F;&#x5B9E;&#x7684;&#x96C5;&#x601D;&#x8003;&#x8BD5;&#x3002;&#x518D;&#x540E;&#x6765;&#x6211;&#x5C31;&#x62A5;&#x73ED;&#x4E86;&#x3002;&#x62A5;&#x4E86;&#x6258;&#x798F;&#x7684;&#x57F9;&#x8BAD;&#x73ED;&#x3002;&#x1F602;&#x7531;&#x4E8E;&#x96C5;&#x601D;&#x88F8;&#x6D4B; 5.5 &#x5206;&#xFF0C;&#x8001;&#x5E08;&#x5728;&#x8BFE;&#x4E0A;&#x53EB;&#x6211;&#x4E94;&#x5206;&#x9009;&#x624B;&#xFF0C;&#xFF08;&#x96BE;&#x9053;&#x56DB;&#x820D;&#x4E94;&#x5165;&#x4E0D;&#x5E94;&#x8BE5;&#x53EB;&#x6211;&#x516D;&#x5206;&#x9009;&#x624B;&#x4E48;&#xFF1F;&#xFF09;&#x6211;&#x7ECF;&#x8FC7;&#x4E00;&#x5E74;&#x7684;&#x52AA;&#x529B;&#xFF0C;&#x6211;&#x5DF2;&#x7ECF;&#x6210;&#x529F;&#x53D8;&#x6210;&#x4E86;&#x516B;&#x5206;&#x9009;&#x624B;&#x3002;&#x4E3A;&#x4E86;&#x81EA;&#x5632;&#x81EA;&#x5DF1;&#x7684;&#x8D85;&#x4F4E;&#x6C34;&#x51C6;&#x4EE5;&#x53CA;&#x63D0;&#x9192;&#x81EA;&#x5DF1;&#x8BB0;&#x4F4F;&#x8FD9;&#x6BB5;&#x75DB;&#x82E6;&#x594B;&#x6597;&#x7684;&#x65E5;&#x5B50;&#xFF0C;&#x6211;&#x73B0;&#x5728;&#x4ECD;&#x7136;&#x81EA;&#x79F0;&#x81EA;&#x5DF1;&#x662F;&#x4E94;&#x5206;&#x9009;&#x624B;&#x3002;&#xFF08;&#x8FD9;&#x4E5F;&#x662F;&#x516C;&#x4F17;&#x53F7;&#x540D;&#x5B57;&#x7684;&#x6765;&#x6E90;&#xFF09;</p>
<p>&#x4E5F;&#x56E0;&#x4E3A;&#x96C5;&#x601D;&#x8003;&#x7684;&#x5206;&#x6570;&#x4E0D;&#x9AD8;&#xFF0C;&#x4F7F;&#x5F97;&#x6211;&#x201C;&#x6012;&#x8F6C;&#x201D;&#x590D;&#x4E60;&#x5907;&#x8003;&#x6258;&#x798F;&#x3002;&#x6258;&#x798F;&#x7684;&#x53E3;&#x8BED;&#x662F;&#x4EBA;&#x673A;&#x5BF9;&#x8BDD;&#x3002;&#x4F60;&#x9762;&#x5BF9;&#x7684;&#x662F;&#x6CA1;&#x6709;&#x611F;&#x60C5;&#x7684;&#x673A;&#x5668;&#xFF0C;&#x5B83;&#x4E0D;&#x4F1A;&#x56E0;&#x4E3A;&#x4F60;&#x8BF4;&#x9519;&#x800C;&#x4EA7;&#x751F;&#x5C34;&#x5C2C;&#x6C14;&#x6C1B;&#x3002;&#x96C5;&#x601D;&#x662F;&#x4EBA;&#x4EBA;&#x5BF9;&#x8BDD;&#xFF0C;&#x548C;&#x771F;&#x4EBA;&#x5BF9;&#x8BDD;&#x65F6;&#x95F4;&#xFF0C;&#x4F60;&#x8BF4;&#x7684;&#x5982;&#x679C;&#x5BF9;&#x65B9;&#x542C;&#x4E0D;&#x61C2;&#xFF0C;&#x90A3;&#x4F1A;&#x975E;&#x5E38;&#x7684;&#x5C34;&#x5C2C;&#x3002;&#x800C;&#x4E14;&#x96C5;&#x601D;&#x542C;&#x529B;&#x91CC;&#x9762;&#x4E5F;&#x6709;&#x6211;&#x4E0D;&#x64C5;&#x957F;&#x7684;&#x542C;&#x6570;&#x5B57;&#xFF0C;&#x586B;&#x7A7A;&#x7B49;&#x7B49;&#x9898;&#x76EE;&#x5F62;&#x5F0F;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_17.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x8FD9;&#x65F6;&#x5019;&#x6211;&#x4E5F;&#x53D1;&#x73B0;&#xFF0C;&#x4E00;&#x6B65;&#x51FA;&#x56FD;&#x5DE5;&#x4F5C;&#x53EF;&#x80FD;&#x6709;&#x70B9;&#x96BE;&#xFF0C;&#x53EF;&#x4EE5;&#x5206;&#x4E3A;&#x4E24;&#x6B65;&#x8D70;&#x3002;&#x5148;&#x5728;&#x56FD;&#x5185;&#x7684;&#x5916;&#x4F01;&#x5DE5;&#x4F5C;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x518D;&#x8F6C;&#x53BB;&#x5916;&#x56FD;&#x672C;&#x571F;&#x5DE5;&#x4F5C;&#x3002;&#x56FD;&#x5185;&#x7684;&#x6709;&#x540D;&#x6C14;&#x7684;&#x5916;&#x4F01;&#x6709; FLAG&#xFF0C;&#x5F00;&#x59CB;&#x6295;&#x7B80;&#x5386;&#x54AF;&#x3002;&#x6211;&#x5F00;&#x59CB;&#x5237;&#x9898;&#xFF0C;&#x51C6;&#x5907;&#x82F1;&#x6587;&#x7B80;&#x5386;&#xFF0C;&#x51B2;&#x51FB;&#x5916;&#x4F01;&#x3002;&#x73B0;&#x5B9E;&#x7ED9;&#x6211;&#x6CFC;&#x4E86;&#x5F88;&#x5927;&#x4E00;&#x8EAB;&#x51C9;&#x6C34;&#x3002;&#x6536;&#x5230;&#x4E86; HR &#x7ED9;&#x6211;&#x7684;&#x53CD;&#x9988;&#xFF0C;&#x201C;&#x540C;&#x5B66;&#xFF0C;&#x5BF9;&#x4E0D;&#x8D77;&#xFF0C;&#x8FD9;&#x4E2A;&#x5C97;&#x4F4D;&#x4F60;&#x7684;&#x5B66;&#x5386;&#x80CC;&#x666F;&#x5DEE;&#x4E86;&#x4E00;&#x70B9;&#xFF0C;&#x6211;&#x4EEC;&#x7684;&#x5019;&#x9009;&#x4EBA;&#x76EE;&#x524D;&#x90FD;&#x662F;&#x6E05;&#x5317;&#x4EA4;&#x590D;&#x7684;&#x7855;&#x58EB;&#x535A;&#x58EB;&#x3002;&#x5E0C;&#x671B;&#x672A;&#x6765;&#x4F60;&#x8FD8;&#x6709;&#x673A;&#x4F1A;&#x52A0;&#x5165;&#x6211;&#x4EEC;&#xFF0C;&#x8C22;&#x8C22;&#x201D;&#x3002;&#x6211;&#x4E0D;&#x4F1A;&#x5728;&#x8FD9;&#x91CC;&#x516C;&#x5F00;&#x8FD9;&#x662F;&#x54EA;&#x5BB6;&#x4F01;&#x4E1A;&#xFF0C;&#x9762;&#x8BD5;&#x5C97;&#x4F4D;&#x4E0D;&#x662F; leader &#x5C97;&#xFF0C;&#x53EA;&#x662F;&#x9AD8;&#x7EA7; SDE &#x5C97;&#x4F4D;&#x800C;&#x5DF2;&#x3002;&#x6211;&#x63A5;&#x5230;&#x8FD9;&#x4E2A;&#x56DE;&#x590D;&#x4EE5;&#x540E;&#xFF0C;&#x8111;&#x888B;&#x98DE;&#x901F;&#x8FD0;&#x8F6C;&#xFF0C;&#x201C;&#x53EF;&#x80FD;&#x662F;&#x6211;&#x7684;&#x6280;&#x672F;&#x5B9E;&#x529B;&#x4E0D;&#x884C;&#xFF0C;&#x7528;&#x5B66;&#x5386;&#x5DEE;&#x4E86;&#x8FD9;&#x4E2A;&#x7406;&#x7531;&#x5A49;&#x62D2;&#x6211;&#x201D;&#x201C;&#x6709;&#x53EF;&#x80FD;&#x771F;&#x7684;&#x662F;&#x5B66;&#x5386;&#x4E0D;&#x5B9A;&#xFF0C;&#x770B; HR &#x7684;&#x8BED;&#x6C14;&#xFF0C;&#x8981;&#x62DB;&#x7855;&#x58EB;&#x8D77;&#x6B65;&#x7684;&#x4EBA;&#x624D;&#x201D;&#x3002;&#x4E0D;&#x7BA1;&#x662F;&#x54EA;&#x4E2A;&#x539F;&#x56E0;&#xFF0C;&#x6211;&#x7684;&#x4E16;&#x754C;&#x90FD;&#x4E4C;&#x4E91;&#x5BC6;&#x5E03;&#x3002;&#x65E2;&#x7136;&#x5148;&#x5728;&#x56FD;&#x5185;&#x5916;&#x4F01;&#x5DE5;&#x4F5C;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x518D;&#x529E;&#x7B7E;&#x8BC1;&#x53BB;&#x6D77;&#x5916;&#x7684;&#x8FD9;&#x6761;&#x8DEF;&#x5DF2;&#x7ECF;&#x4E0D;&#x901A;&#x4E86;&#x3002;&#x90A3;&#x4E48;&#x53EA;&#x5269;&#x4E0B;&#x901A;&#x8FC7;&#x7559;&#x5B66;&#x8FD9;&#x6761;&#x8DEF;&#x53BB;&#x6D77;&#x5916;&#x4E86;&#x3002;<strong>&#x5230;&#x6B64;&#x65F6;&#xFF0C;&#x7B14;&#x8005;&#x624D;&#x786E;&#x5B9A;&#x4E86;&#x7559;&#x5B66;&#x7684;&#x8FD9;&#x6761;&#x8DEF;&#x4E86;&#x3002;</strong></p>
<p>&#x4ECA;&#x5E74; 7 &#x6708; 13 &#x53F7;&#xFF0C;&#x6ED1;&#x6ED1;&#x9E21;&#x5373;&#x5C06;&#x524D;&#x5F80; CMU &#x8BFB; Master &#x4E86;&#x3002;&#x6211;&#x548C;&#x74DC;&#x795E;&#x4E00;&#x8D77;&#x548C;&#x4ED6;&#x5403;&#x4E86;&#x81EA;&#x52A9;&#x9910;&#xFF0C;&#x9001;&#x4ED6;&#x53BB;&#x7F8E;&#x56FD;&#x3002;&#x9910;&#x684C;&#x4E0A;&#x4ED6;&#x5411;&#x6211;&#x4F20;&#x6388;&#x4E86;&#x6258;&#x798F;&#x88F8;&#x8003; 108 &#x5206;&#x7684;&#x7ECF;&#x9A8C;&#x3002;&#x8FD9;&#x6B21;&#x5403;&#x996D;&#x662F;&#x7ECF;&#x5178;&#x7684;&#x201C;&#x897F;&#x74DC;&#x971C;&#x201D;&#x805A;&#x9910;&#x3002;&#x6ED1;&#x6ED1;&#x9E21;&#x7684;&#x540D;&#x5B57;&#x4E2D;&#x5E26;&#x6709;&#x201C;&#x897F;&#x201D;&#x7684;&#x540C;&#x97F3;&#x5B57;&#xFF0C;&#x74DC;&#x795E;&#x5C31;&#x662F;&#x201C;&#x74DC;&#x201D;&#xFF0C;&#x800C;&#x6211;&#x7684;&#x540D;&#x5B57;&#x4E2D;&#x5E26;&#x6709;&#x201C;&#x971C;&#x201D;&#x3002;&#x9910;&#x684C;&#x4E0A;&#x6211;&#x4E5F;&#x8BB8;&#x4E0B;&#x4E86;&#x8BFA;&#x8A00;&#xFF0C;2020 &#x5E74;&#x4F1A;&#x53BB;&#x7F8E;&#x56FD;&#x627E;&#x6ED1;&#x6ED1;&#x9E21;&#x4E00;&#x8D77;&#x5403;&#x996D;&#x3002;&#x5982;&#x679C;&#x6709;&#x7F18;&#x7684;&#x8BDD;&#xFF0C;&#x66F4;&#x5E0C;&#x671B;&#x80FD;&#x6210;&#x4E3A; CMU &#x6821;&#x53CB;&#x3002;&#x5E0C;&#x671B;&#x6211;&#x80FD;&#x65E9;&#x65E5;&#x5151;&#x73B0;&#x7537;&#x4EBA;&#x7684;&#x627F;&#x8BFA;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_34.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<h2 id="%E5%86%99%E4%B9%A6">&#x5199;&#x4E66;</h2>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/2019_leetcode.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x5F88;&#x591A;&#x4EBA;&#x53D1;&#x73B0;&#x6211;&#x4ECE; 2019 &#x5E74;&#x5C31;&#x5F00;&#x59CB;&#x5237; LeetCode&#xFF0C;&#x5176;&#x4E2D;&#x6709;&#x4E00;&#x5C0F;&#x90E8;&#x5206;&#x4EBA;&#x6000;&#x7591;&#x6211;&#x8981;&#x8DF3;&#x69FD;&#xFF0C;&#x6211;&#x7684;&#x540C;&#x4E8B;&#x8D77;&#x521D;&#x4E5F;&#x6000;&#x7591;&#x8FC7;&#x6211;&#x8981;&#x79BB;&#x804C;&#xFF0C;&#x4F46;&#x662F;&#x770B;&#x5230;&#x6211;&#x5237;&#x4E86;&#x534A;&#x5E74;&#x4EE5;&#x540E;&#x90FD;&#x6CA1;&#x52A8;&#x9759;&#xFF0C;&#x4E5F;&#x5C31;&#x6162;&#x6162;&#x76F8;&#x4FE1;&#x6211;&#x5237;&#x9898;&#x662F;&#x56E0;&#x4E3A;&#x7231;&#x3002;&#x8FD9;&#x4E00;&#x5C0F;&#x90E8;&#x5206;&#x4EBA;&#x731C;&#x5BF9;&#x4E86;&#x771F;&#x76F8;&#xFF0C;&#x4E0D;&#x8FC7;&#x6211;&#x7B11;&#x800C;&#x4E0D;&#x8BED;&#x3002;&#x540C;&#x4E8B;&#x4E5F;&#x90FD;&#x4E0D;&#x660E;&#x771F;&#x76F8;&#xFF0C;&#x771F;&#x5B9E;&#x60C5;&#x51B5;&#x662F;&#x56E0;&#x4E3A;&#x6211;&#x6CA1;&#x6709;&#x901A;&#x8FC7;&#x9762;&#x8BD5;&#xFF0C;&#x4E3A;&#x4E86;&#x201C;&#x63A9;&#x76D6;&#x201D;&#x8FD9;&#x4E2A;&#x4E8B;&#x5B9E;&#xFF0C;&#x6211;&#x5E72;&#x8106;&#x4E00;&#x4E0D;&#x505A;&#x4E8C;&#x4E0D;&#x4F11;&#x7EE7;&#x7EED;&#x5237;&#x3002;&#x5237;&#x6EE1;&#x4E00;&#x5E74;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x5C31;&#x6CA1;&#x6709;&#x65E5;&#x65E5;&#x4E0D;&#x95F4;&#x65AD;&#x4E86;&#x3002;&#x73B0;&#x5728;&#x6211;&#x8FD8;&#x9694;&#x4E09;&#x5DEE;&#x4E94;&#x7684;&#x5237; LeetCode &#x771F;&#x7684;&#x662F;&#x7528;&#x7231;&#x53D1;&#x7535;&#x3002;<strong>&#x5237;&#x7B97;&#x6CD5;&#x662F;&#x70ED;&#x7231;&#xFF0C;&#x5237;&#x5230;&#x4E16;&#x754C;&#x5145;&#x6EE1;&#x7231;&#xFF01;</strong></p>
<p>&#x6211;&#x5199;&#x4E66;&#x4E5F;&#x662F;&#x53D7;&#x5230;&#x4E86; <strong>@&#x6B27;&#x957F;&#x5764;</strong> &#x5927;&#x4F6C;&#x7684;&#x5F71;&#x54CD;&#xFF0C;&#x4ED6;&#x7684;&#x4E24;&#x672C;&#x7ECF;&#x5178;&#x5F00;&#x6E90;&#x4E66;&#x4EE4;&#x6211;&#x6536;&#x83B7;&#x9887;&#x4E30;&#x3002;&#x4E8E;&#x662F;&#x6211;&#x4E5F;&#x60F3;&#x5199;&#x70B9;&#x5F00;&#x6E90;&#x4E66;&#xFF0C;&#x56DE;&#x9988;&#x793E;&#x533A;&#x6216;&#x8005;&#x5355;&#x7EAF;&#x5206;&#x4EAB;&#x77E5;&#x8BC6;&#x3002;&#x7531;&#x4E8E;&#x4ECA;&#x5E74;&#x5168;&#x5E74;&#x6211;&#x90FD;&#x5728;&#x590D;&#x4E60;&#x82F1;&#x8BED;&#x548C;&#x5237; LeetCode&#xFF0C;&#x4E8E;&#x662F;&#x51B3;&#x5B9A;&#x5199;&#x8FD9;&#x4E24;&#x672C;&#x4E66;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_19.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x8FD9;&#x4E24;&#x4E2A;&#x672C;&#x4E66;&#x6211;&#x90FD;&#x653E;&#x5728; github &#x4E0A;&#x8FED;&#x4EE3;&#x66F4;&#x65B0;&#x3002;&#x81F3;&#x4E8E;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x4F1A;&#x5370;&#x5236;&#x6210;&#x7EB8;&#x8D28;&#x5B9E;&#x4F53;&#x4E66;&#xFF0C;&#x8FD8;&#x4E0D;&#x786E;&#x5B9A;&#x3002;&#x4F17;&#x6240;&#x5468;&#x77E5;&#x6211;&#x76EE;&#x524D;&#x8FD8;&#x662F;&#x4E00;&#x4E2A; gopher&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x4E24;&#x672C;&#x4E66;&#x7684;&#x7F51;&#x7AD9;&#x5FC5;&#x7136;&#x8981;&#x7528; hugo &#x642D;&#x5EFA;&#x3002;&#x7B2C;&#x4E00;&#x672C;&#x4E66;&#x6211;&#x7528;&#x7684;&#x662F; wowchemy &#x4E3B;&#x9898;&#xFF0C;&#x7B2C;&#x4E8C;&#x672C;&#x4E66;&#x6211;&#x7528;&#x7684;&#x662F; hugo-book &#x81EA;&#x5B9A;&#x4E49;&#x4E3B;&#x9898;&#x3002;&#x9879;&#x76EE;&#x4EE3;&#x7801;&#x4E5F;&#x90FD;&#x5F00;&#x6E90;&#x5728; github &#x4E0A;&#x4E86;&#x3002;</p>
<p>&#x5199;&#x5F00;&#x6E90;&#x4E66;&#xFF08;&#x8BA9;&#x6211;&#x59D1;&#x4E14;&#x79F0;&#x5B83;&#x4E3A;&#x4E66;&#xFF09;&#x771F;&#x7684;&#x975E;&#x5E38;&#x82B1;&#x65F6;&#x95F4;&#xFF0C;&#x4E66;&#x548C;&#x4E00;&#x7BC7;&#x535A;&#x5BA2;&#x4E0D;&#x540C;&#xFF0C;&#x535A;&#x5BA2;&#x7684;&#x76EE;&#x5F55;&#x53EA;&#x662F;&#x5355;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x4E3B;&#x7EBF;&#xFF0C;&#x4F46;&#x662F;&#x4E66;&#x7684;&#x76EE;&#x5F55;&#x5C31;&#x4E0D;&#x540C;&#x4E86;&#xFF0C;&#x5B83;&#x662F;&#x6574;&#x4E2A;&#x77E5;&#x8BC6;&#x4F53;&#x7CFB;&#x7684;&#x4E3B;&#x7EBF;&#x3002;&#x7B14;&#x8005;&#x65F6;&#x5E38;&#x5199;&#x5230;&#x67D0;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7A81;&#x7136;&#x60F3;&#x5230;&#x53E6;&#x5916;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x6709;&#x95EE;&#x9898;&#xFF0C;&#x53C8;&#x53BB;&#x8C03;&#x6574;&#x524D;&#x9762;&#x5199;&#x7684;&#x597D;&#x51E0;&#x7BC7;&#x6587;&#x7AE0;&#x3002;&#x4E3A;&#x4E86;&#x6BCF;&#x5929;&#x80FD;&#x8BB0;&#x4F4F; 200-300 &#x4E2A;&#x5355;&#x8BCD;&#xFF0C;&#x6211;&#x9009;&#x62E9;&#x6BCF;&#x5929;&#x65E9;&#x4E0A; 6 &#x70B9;&#x65E9;&#x8D77;&#xFF0C;&#x5148;&#x628A; LeetCode &#x6BCF;&#x65E5;&#x4E00;&#x9898;&#x5199;&#x5B8C;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x89E3;&#x9898;&#x601D;&#x8DEF;&#xFF0C;&#x4EE3;&#x7801;&#xFF0C;&#x6D4B;&#x8BD5;&#x6587;&#x4EF6; push &#x5230; github&#x3002;&#x5982;&#x679C;&#x5FEB;&#x7684;&#x8BDD;&#xFF0C;6 &#x70B9; 30 &#x5206;&#x5DE6;&#x53F3;&#x90FD;&#x80FD;&#x641E;&#x5B8C;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5403;&#x65E9;&#x9910;&#xFF0C;7 &#x70B9;&#x5230; 9 &#x70B9;&#x662F;&#x5237;&#x6258;&#x798F; TPO &#x548C;&#x80CC;&#x5355;&#x8BCD;&#x7684;&#x65F6;&#x95F4;&#x3002;&#x6211;&#x4F1A;&#x628A;&#x9605;&#x8BFB;&#x7684;&#x6587;&#x7AE0;&#x7FFB;&#x8BD1;&#x4E00;&#x904D;&#xFF0C;&#x8BB0;&#x5F55;&#x548C;&#x5206;&#x6790;&#x9519;&#x9898;&#xFF0C;&#x7CBE;&#x542C;&#x542C;&#x529B;&#x6587;&#x7AE0;&#x7B49;&#x7B49;&#x3002;&#x505A;&#x5B8C;&#x7EC3;&#x4E60;&#x518D;&#x628A;&#x5FC3;&#x5F97;&#x548C;&#x65B9;&#x6CD5;&#x7B49;&#x7B49;&#x5185;&#x5BB9; push &#x5230; github&#x3002;9 &#x70B9;&#x534A;&#x5DE6;&#x53F3;&#x51FA;&#x95E8;&#x53BB;&#x516C;&#x53F8;&#x4E0A;&#x73ED;&#x3002;</p>
<p>&#x5E38;&#x770B; O&#x2019;Reilly &#x52A8;&#x7269;&#x4E66;&#x7684;&#x540C;&#x5B66;&#x4E00;&#x770B;&#x8FD9;&#x4E2A;&#x5C01;&#x9762;&#x5C31;&#x77E5;&#x9053;&#x662F;&#x5411;&#x4ED6;&#x4EEC;&#x81F4;&#x656C;&#x3002;&#x786E;&#x5B9E;&#x662F;&#x8FD9;&#x4E2A;&#x76EE;&#x7684;&#x3002;O&#x2019;Reilly &#x7684;&#x5C01;&#x9762;&#x52A8;&#x7269;&#x90FD;&#x662F;&#x7A00;&#x7F3A;&#x52A8;&#x7269;&#xFF0C;&#x5E76;&#x4E14;&#x753B;&#x98CE;&#x90FD;&#x662F;&#x9ED1;&#x767D;&#x7D20;&#x63CF;&#x98CE;&#x3002;&#x7B2C;&#x4E00;&#x672C;&#x4E66;&#x7684;&#x5C01;&#x9762;&#x4E0A;&#x7684;&#x52A8;&#x7269;&#x662F; Coyote&#x3002;&#x7ECF;&#x5E38;&#x542C;&#x6258;&#x798F;&#x542C;&#x529B;&#x7684;&#x540C;&#x5B66;&#x4E00;&#x770B;&#x5230;&#x8FD9;&#x4E2A;&#x5355;&#x8BCD;&#x5C31;&#x4F1A;&#x89C9;&#x5F97;&#x7279;&#x522B;&#x4EB2;&#x5207;&#x4E86;&#x3002;&#x4E4B;&#x6240;&#x4EE5;&#x9009;&#x8FD9;&#x4E2A;&#x52A8;&#x7269;&#x4F5C;&#x4E3A;&#x5C01;&#x9762;&#x4E5F;&#x662F;&#x8FD9;&#x4E2A;&#x539F;&#x56E0;&#x3002;Coyote &#x5728;&#x6258;&#x798F;&#x542C;&#x529B;&#x751F;&#x7269;&#x7C7B;&#x4E2D;&#x51FA;&#x73B0;&#x7684;&#x9891;&#x7387;&#x6BD4;&#x8F83;&#x9AD8;&#x3002;&#x65E2;&#x7136;&#x6B64;&#x4E66;&#x662F;&#x52A8;&#x7269;&#x4E66;&#xFF0C;&#x53C8;&#x548C;&#x6258;&#x798F;&#x6709;&#x5173;&#xFF0C;&#x90A3;&#x4E48;&#x9009; Coyote &#x662F;&#x7406;&#x6240;&#x5E94;&#x5F53;&#x4E86;&#x3002;</p>
<p>Coyote &#x7FFB;&#x8BD1;&#x8FC7;&#x6765;&#x662F;&#x571F;&#x72FC;&#xFF0C;&#x6216;&#x8005;&#x90CA;&#x72FC;&#x3002;&#x90CA;&#x72FC;&#xFF08;&#x5B66;&#x540D;&#xFF1A;Canis latrans&#xFF09;&#xFF0C;&#x4E5F;&#x53EB;&#x8349;&#x539F;&#x72FC;&#x3001;&#x4E1B;&#x6797;&#x72FC;&#x3001;&#x5317;&#x7F8E;&#x5C0F;&#x72FC;&#xFF0C;&#x662F;&#x72AC;&#x79D1;&#x72AC;&#x5C5E;&#x7684;&#x4E00;&#x79CD;&#xFF0C;&#x4E0E;&#x72FC;&#x662F;&#x8FD1;&#x4EB2;&#x3002;&#x90CA;&#x72FC;&#x4EA7;&#x4E8E;&#x5317;&#x7F8E;&#x5927;&#x9646;&#x7684;&#x5E7F;&#x5927;&#x5730;&#x533A;&#xFF0C;&#x5317;&#x8D77;&#x963F;&#x62C9;&#x65AF;&#x52A0;&#x3001;&#x5357;&#x5230;&#x5DF4;&#x62FF;&#x9A6C;&#x3002;&#x6B27;&#x6D32;&#x63A2;&#x9669;&#x5BB6;&#x6700;&#x521D;&#x662F;&#x5728;&#x7F8E;&#x56FD;&#x897F;&#x5357;&#x90E8;&#x53D1;&#x73B0;&#x8FD9;&#x79CD;&#x52A8;&#x7269;&#x3002;&#x90CA;&#x72FC;&#x4E00;&#x822C;&#x5355;&#x72EC;&#x730E;&#x98DF;&#xFF0C;&#x5076;&#x5C14;&#x4E5F;&#x4F1A;&#x7EC4;&#x6210;&#x5C0F;&#x578B;&#x7684;&#x7FA4;&#x4F53;&#x3002;&#x5E73;&#x5747;&#x5BFF;&#x547D;&#x4E3A; 6-10 &#x5E74;&#x3002;&#x90CA;&#x72FC;&#x5728;&#x5176;&#x5927;&#x5C0F;&#x3001;&#x989C;&#x8272;&#x548C;&#x5934;&#x90E8;&#x5F62;&#x72B6;&#x90FD;&#x5341;&#x5206;&#x76F8;&#x4F3C;&#x6FD2;&#x5371;&#x7684;&#x7EA2;&#x72FC;&#x3002; &#x5176;&#x82F1;&#x6587; coyote &#x4E00;&#x8BCD;&#x6765;&#x81EA;&#x4E2D;&#x7F8E;&#x6D32;&#x963F;&#x5179;&#x7279;&#x514B;&#x7B49;&#x90E8;&#x65CF;&#x6240;&#x7528;&#x7684;&#x7EB3;&#x74E6;&#x7279;&#x5C14;&#x8BED;&#x5355;&#x8BCD; coy&#x14D;tl&#xFF0C;&#x540E;&#x7ECF;&#x897F;&#x73ED;&#x7259;&#x8BED;&#x4F20;&#x5165;&#x5230;&#x82F1;&#x8BED;&#x3002;</p>
<p>&#x7B2C;&#x4E8C;&#x672C; LeetCode &#x8FD9;&#x672C;&#x4E66;&#x7684;&#x5C01;&#x9762;&#x52A8;&#x7269;&#x662F;&#x5B54;&#x96C0;&#x3002;&#x5B54;&#x96C0;&#x5F00;&#x5C4F;&#x7684;&#x610F;&#x4E49;&#x662F;&#x5E0C;&#x671B;&#x5927;&#x5BB6;&#x5237;&#x5B8C; LeetCode &#x4EE5;&#x540E;&#xFF0C;&#x63D0;&#x9AD8;&#x4E86;&#x81EA;&#x8EAB;&#x7684;&#x7B97;&#x6CD5;&#x80FD;&#x529B;&#xFF0C;&#x5728;&#x4EBA;&#x751F;&#x7684;&#x821E;&#x53F0;&#x4E0A;&#x5F00;&#x51FA;&#x81EA;&#x5DF1;&#x7684;&#x201C;&#x5C4F;&#x201D;&#x3002;&#x5168;&#x4E66;&#x914D;&#x8272;&#x4E5F;&#x90FD;&#x662F;&#x7EFF;&#x8272;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x662F; AC &#x7684;&#x989C;&#x8272;&#x3002;</p>
<p>&#x8FD9;&#x4E24;&#x672C;&#x4E66;&#x6211;&#x4F1A;&#x4E00;&#x76F4;&#x4FDD;&#x6301;&#x66F4;&#x65B0;&#xFF0C;&#x76F4;&#x5230;&#x6211;&#x7684;&#x6258;&#x798F;&#x8003;&#x5230;&#x4E00;&#x4E2A;&#x7406;&#x60F3;&#x7684;&#x5206;&#x6570;&#xFF0C;LeetCode &#x5237;&#x5230; 500 &#x9898;&#x3002;&#x5F53;&#x6EE1;&#x8DB3;&#x8FD9;&#x4E24;&#x4E2A;&#x6761;&#x4EF6;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4FBF;&#x662F;&#x4F60;&#x770B;&#x5230;&#x4E66;&#x7684;&#x65F6;&#x523B;&#x4E86;&#x3002;</p>
<blockquote>
<p>&#x5F53;&#x4F60;&#x5728;&#x8BFB;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7B2C;&#x4E8C;&#x672C;&#x4E66;&#x5E94;&#x8BE5;&#x5DF2;&#x7ECF;&#x5F00;&#x6E90;&#x4E86;&#xFF0C;&#x6240;&#x6709;&#x4EE3;&#x7801;&#x90FD;&#x5728; github repo &#x4E2D;&#xFF0C;&#x5E76;&#x4E14;&#x4E5F;&#x662F; public &#x7684;&#x3002;&#x4F46;&#x662F;&#x7B2C;&#x4E00;&#x672C;&#x4E66;&#x53EF;&#x80FD;&#x96BE;&#x4EA7;&#x4E86;&#x3002;&#x5E76;&#x975E;&#x7B14;&#x8005;&#x4E0D;&#x60F3;&#x5F00;&#x6E90;&#x5206;&#x4EAB;&#xFF0C;&#x800C;&#x662F;&#x7B14;&#x8005;&#x7684;&#x6258;&#x798F;&#x5206;&#x6570;&#x6CA1;&#x6709;&#x8003;&#x5230;&#x6EE1;&#x5206;&#x3002;&#x6709;&#x4E00;&#x5929;&#x53BB;&#x77E5;&#x4E4E;&#x4E0A;&#x770B;&#x4E86;&#x4E00;&#x773C;&#xFF0C;&#x4E2A;&#x4E2A;&#x90FD;&#x662F;&#x6258;&#x798F; 120 &#x5206;&#x6EE1;&#x5206;&#x9009;&#x624B;&#x3002;&#x6211;&#x8FD9;&#x79CD;&#x82F1;&#x8BED;&#x5783;&#x573E;&#x9009;&#x624B;&#x8FD8;&#x662F;&#x4F4E;&#x8C03;&#x7684;&#x627E;&#x4E2A;&#x5730;&#x7F1D;&#x85CF;&#x8D77;&#x6765;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x7B14;&#x8005;&#x8FD9;&#x8F88;&#x5B50;&#x90FD;&#x4E0D;&#x6253;&#x7B97;&#x5F00;&#x6E90;&#x7B2C;&#x4E00;&#x672C;&#x4E66;&#x4E86;&#x3002;</p>
</blockquote>
<p>&#x65E2;&#x7136;&#x7B2C;&#x4E00;&#x672C;&#x4E66;&#x4E0D;&#x6253;&#x7B97;&#x516C;&#x5F00;&#x4E86;&#x3002;&#x90A3;&#x5728;&#x8FD9;&#x91CC;&#x653E;&#x4E00;&#x4E9B;&#x5B83;&#x7684;&#x622A;&#x56FE;&#x5427;&#x3002;&#x8BB0;&#x5F55;&#x4E00;&#x4E0B;&#x4ECA;&#x5E74;&#x6211;&#x7684;&#x4E00;&#x4E9B;&#x52AA;&#x529B;&#x65F6;&#x5149;&#x3002;&#x4E0B;&#x56FE;&#x662F; github private repo&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_20.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x63A5;&#x4E0B;&#x6765;&#x51E0;&#x5F20;&#x56FE;&#x662F;&#x7528; wowchemy &#x4E3B;&#x9898;&#x505A;&#x7684;&#x8FD9;&#x672C;&#x4E66;&#x914D;&#x5957;&#x7684;&#x7F51;&#x7AD9;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_21.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_22.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_23.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_24.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_25.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<h2 id="%E8%89%B0%E8%BE%9B%E7%9A%84%E6%89%98%E7%A6%8F%E5%A4%87%E8%80%83">&#x8270;&#x8F9B;&#x7684;&#x6258;&#x798F;&#x5907;&#x8003;</h2>
<p>&#x5B9E;&#x8BDD;&#x8BF4;&#xFF0C;&#x5907;&#x6218;&#x6258;&#x798F;&#x5BF9;&#x6211;&#x6765;&#x8BF4;&#xFF0C;&#x662F;&#x6BD4;&#x8F83;&#x82B1;&#x65F6;&#x95F4;&#x7684;&#x3002;&#x6211;&#x59B9;&#x5B50;&#x5168;&#x7A0B;&#x76EE;&#x7779;&#x4E86;&#x6211;&#x201C;&#x65E0;&#x6BD4;&#x8270;&#x96BE;&#x201D;&#x7684;&#x5907;&#x8003;&#x8FC7;&#x7A0B;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x5728;&#x804C;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x5907;&#x8003;&#x592A;&#x8270;&#x96BE;&#x4E86;&#xFF0C;&#x52A0;&#x73ED;&#x5230;&#x534A;&#x591C;&#x5230;&#x5BB6;&#x4EE5;&#x540E;&#x8FD8;&#x8981;&#x5F00;&#x59CB;&#x8BFB;&#x82F1;&#x8BED;&#xFF0C;&#x7761;&#x89C9;&#x90FD;&#x662F;&#x542C;&#x7740; TPO &#x7761;&#x7684;&#x3002;&#x90A3;&#x6BB5;&#x65F6;&#x95F4;&#x6211;&#x8FD8;&#x7ECF;&#x5E38;&#x88AB;&#x516C;&#x53F8;&#x5B89;&#x6392; on call&#xFF0C;&#x5F88;&#x591A;&#x6B21;&#x90FD;&#x6709;&#x79BB;&#x804C;&#x7684;&#x51B2;&#x52A8;&#xFF0C;&#x6362;&#x4E00;&#x4E2A;&#x95F2;&#x4E00;&#x70B9;&#x7684;&#x516C;&#x53F8;&#x3002;&#xFF08;&#x6700;&#x540E;&#x8FD8;&#x662F;&#x54AC;&#x7259;&#x575A;&#x6301;&#x628A;&#x4E00;&#x5E74;&#x5E72;&#x5B8C;&#xFF0C;&#x62FF;&#x5B8C;&#x5E74;&#x7EC8;&#x5956;&#x8D70;&#x4EBA;&#x4E86;&#x3002;&#xFF09;&#x6211;&#x59B9;&#x5B50;&#x4E5F;&#x4ECE;&#x6765;&#x4E0D;&#x9F13;&#x52B1;&#x6211;&#xFF0C;&#x53CD;&#x800C;&#x5979;&#x4E00;&#x76F4;&#x90FD;&#x5728;&#x529D;&#x6211;&#x653E;&#x5F03;&#xFF0C;&#xFF08;&#x8FD9;&#x96BE;&#x9053;&#x662F;&#x53CD;&#x5411;&#x64CD;&#x4F5C;&#x7684;&#x9F13;&#x52B1;&#xFF1F;&#xFF09;&#xFF0C;&#x5979;&#x7ECF;&#x5E38;&#x8BF4;&#xFF1A;&#x201C;&#x4F60;&#x770B;&#x770B;&#x4EBA;&#x5BB6;&#x6ED1;&#x6ED1;&#x9E21;&#xFF0C;&#x4E0D;&#x5230; 6 &#x4E2A;&#x6708;&#x89E3;&#x51B3; GT 2 &#x95E8;&#xFF0C;&#x8FD8;&#x90FD;&#x662F;&#x9AD8;&#x5206;&#xFF0C;&#x4F60;&#x5462;&#xFF1F;6 &#x4E2A;&#x6708; GT &#x8FD8;&#x6CA1;&#x8003;&#x5230;&#x4EBA;&#x5BB6;&#x5206;&#x6570;&#x7684; 80%&#xFF0C;&#x8FD8;&#x52AA;&#x529B;&#x5565;&#xFF1F;&#x575A;&#x6301;&#x5565;&#xFF1F;&#x201D;&#xFF0C;&#x6211;&#x786E;&#x5B9E;&#x6709;&#x8FC7;&#x653E;&#x5F03;&#x7684;&#x5FF5;&#x5934;&#xFF0C;&#x4F46;&#x662F;&#x4E00;&#x770B;&#x6211;&#x7684;&#x5B66;&#x6258;&#x798F;&#x5B66;&#x96C5;&#x601D;&#x7684;&#x65F6;&#x95F4;&#x6295;&#x5165;&#xFF0C;&#x6211;&#x5C31;&#x4E0D;&#x80FD;&#x653E;&#x5F03;&#x4E86;&#x3002;&#x8D70;&#x8DEF;&#x90FD;&#x8D70;&#x4E00;&#x534A;&#x4E86;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x653E;&#x5F03;&#xFF0C;&#x8FC7;&#x53BB;&#x7684;&#x597D;&#x51E0;&#x5343;&#x5C0F;&#x65F6;&#x5C82;&#x4E0D;&#x662F;&#x767D;&#x8D39;&#x4E86;&#xFF1F;&#x5927;&#x5BB6;&#x90FD;&#x8BF4;&#xFF0C;&#x51E1;&#x4E8B;&#x8981;&#x4EAB;&#x53D7;&#x8FC7;&#x7A0B;&#xFF0C;&#x4E0D;&#x8981;&#x5728;&#x4E4E;&#x7ED3;&#x679C;&#x3002;&#x201C;&#x529F;&#x5229;&#x201D;&#x7684;&#x6211;&#x504F;&#x504F;&#x975E;&#x5E38;&#x5728;&#x610F;&#x7ED3;&#x679C;&#xFF0C;&#x4EBA;&#x4E00;&#x8F88;&#x5B50;&#x7684;&#x65F6;&#x95F4;&#x662F;&#x77ED;&#x6682;&#x7684;&#xFF0C;&#x6295;&#x5165;&#x4EA7;&#x51FA;&#x6BD4;&#x4E0D;&#x9AD8;&#x7684;&#x4E8B;&#x60C5;&#xFF0C;&#x4F18;&#x5148;&#x7EA7;&#x53EF;&#x4EE5;&#x964D;&#x4F4E;&#x3002;&#x4E8E;&#x662F;&#x6211;&#x8FD9;&#x4E2A;&#x5783;&#x573E;&#x9760;&#x7740;&#x4E0D;&#x80FD;&#x653E;&#x5F03;&#x5B9D;&#x8D35;&#x65F6;&#x95F4;&#x7684;&#x524D;&#x671F;&#x6295;&#x5165;&#xFF0C;&#x4E00;&#x76F4;&#x54AC;&#x7259;&#x575A;&#x6301;&#x3002;</p>
<p>&#x5F00;&#x59CB;&#x6211;&#x8FD8;&#x4E0D;&#x627F;&#x8BA4;&#x6211;&#x662F;&#x5B66;&#x6E23;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x81EA;&#x5DF1;&#x8FD8;&#x7B97;&#x52AA;&#x529B;&#xFF0C;&#x7B97;&#x5B66;&#x5F31;&#x5E94;&#x8BE5;&#x4E0D;&#x4E3A;&#x8FC7;&#xFF08;&#x5B66;&#x5F31;&#xFF1A;&#x5B66;&#x4E60;&#x5F88;&#x52AA;&#x529B;&#xFF0C;&#x4F46;&#x662F;&#x5206;&#x6570;&#x5F88;&#x4F4E;&#xFF09;&#x3002;&#x7ECF;&#x8FC7;&#x51E0;&#x6B21; GT &#x8003;&#x8BD5;&#x7684;&#x6467;&#x6B8B;&#x4EE5;&#x540E;&#xFF0C;&#x6211;&#x81EA;&#x89C9;&#x7684;&#x628A;&#x81EA;&#x5DF1;&#x7684;&#x8EAB;&#x6BB5;&#x4ECE;&#x5B66;&#x5F31;&#x653E;&#x56DE;&#x4E86;&#x5B66;&#x6E23;&#x3002;&#x5728;&#x6211;&#x59B9;&#x5B50;&#x773C;&#x91CC;&#xFF0C;&#x6ED1;&#x6ED1;&#x9E21;&#x5C31;&#x662F;100%&#x51C6;&#x5B66;&#x9738;&#x3002;&#x8FD9;&#x70B9;&#x6211;&#x4E5F;&#x5FC3;&#x670D;&#x53E3;&#x670D;&#x3002;&#x5728;&#x88AB;&#x6258;&#x798F;&#x548C; GRE &#x8003;&#x8BD5;&#x65E0;&#x60C5;&#x6467;&#x6B8B;&#x4E86; 4 &#x4E2A;&#x6708;&#x4EE5;&#x4E0A;&#x65F6;&#x95F4;&#x7684;&#x6211;&#xFF0C;&#x6BCF;&#x6B21;&#x770B;&#x5230;&#x6ED1;&#x6ED1;&#x9E21;&#x7684;&#x670B;&#x53CB;&#x5708;&#xFF0C;&#x6216;&#x8005;&#x548C;&#x4ED6;&#x5FAE;&#x4FE1;&#x804A;&#x5929;&#xFF0C;&#x6211;&#x5185;&#x5FC3;&#x771F;&#x7684;&#x5145;&#x6EE1;&#x4E86;&#x5BF9;&#x5B66;&#x9738;&#x7684;&#x656C;&#x4F69;&#x3002;&#xFF08;&#x5982;&#x679C;&#x6709;&#x4E0D;&#x670D;&#x6C14;&#x7684;&#xFF0C;&#x53EF;&#x4EE5;&#x7ACB;&#x5373;&#x62A5;&#x8003;&#x6258;&#x798F;&#x548C; GRE&#xFF0C;3 &#x4E2A;&#x6708;&#x5185;&#x80FD;&#x8FBE;&#x5230;&#x6258;&#x798F; 110+&#xFF0C;GRE 330+ &#x90FD;&#x662F;&#x5B66;&#x9738;&#x3002;&#xFF09;&#x6ED1;&#x6ED1;&#x9E21;&#x8FD9;&#x79CD;&#x5B66;&#x9738;&#x578B;&#xFF0C;&#x81EA;&#x5DF1;&#x9AD8;&#x5206;&#x6740; G &#x780D; T&#xFF0C;&#x671F;&#x95F4;&#x8FD8;&#x6709;&#x989D;&#x5916;&#x7CBE;&#x529B;&#x53BB;&#x5B9E;&#x4E60;&#x8D5A;&#x94B1;&#xFF0C;&#x5237; GPA&#xFF0C;&#x56DB;&#x7EBF;&#x64CD;&#x4F5C;&#x5207;&#x6362;&#x81EA;&#x5982;&#x3002;&#x4E0D;&#x4EC5;&#x65E0;&#x5F00;&#x9500;&#xFF0C;&#x8FD8;&#x8D5A;&#x4E86;&#x51E0;&#x5341;&#x4E07;&#x3002;&#x6709;&#x65F6;&#x5019;&#x6211;&#x4E00;&#x4E2A;&#x4EBA;&#x5728;&#x5BB6;&#x5907;&#x8003;&#x7684;&#x4E0B;&#x5348;&#xFF0C;&#x6211;&#x5C31;&#x4F1A;&#x7FFB;&#x7FFB;&#x81EA;&#x5DF1;&#x7684;&#x7559;&#x5B66;&#x65F6;&#x95F4;&#x7EBF;&#x548C;&#x82B1;&#x9500;&#x8BB0;&#x5F55;&#x5C0F;&#x672C;&#x672C;&#xFF0C;&#x6211;&#x548C;&#x4ED6;&#x7684;&#x5DEE;&#x8DDD;&#x5DF2;&#x7ECF;&#x4E0D;&#x662F;&#x5B66;&#x6E23;&#x548C;&#x5B66;&#x9738;&#x8FD9;&#x4E24;&#x7EA7;&#x7684;&#x5DEE;&#x8DDD;&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x8BF4;&#x6211;&#x4EEC;&#x76F8;&#x5DEE;&#x56DB;&#x7EA7;&#x90FD;&#x4E0D;&#x4E3A;&#x8FC7;&#x1F62D;&#x8FD9;&#x53EF;&#x80FD;&#x5C31;&#x662F;&#x53CC;&#x975E;&#x5927;&#x5B66;&#x6BD5;&#x4E1A;&#x7684;&#x5B66;&#x6E23;&#x4E2D;&#x7684;&#x5B66;&#x6E23;&#x548C;&#x9876;&#x7EA7; 985 &#x6BD5;&#x4E1A;&#x7684;&#x5B66;&#x9738;&#x4E2D;&#x7684;&#x5B66;&#x9738;&#x7684;&#x5DE8;&#x5927;&#x5DEE;&#x8DDD;&#x5427;&#x3002;&#x5728;&#x6258;&#x798F;&#x548C; GRE &#x8FD9;&#x4E24;&#x95E8;&#x8003;&#x8BD5;&#x4E0A;&#xFF0C;&#x6211;&#x662F;&#x8F93;&#x7684;&#x5FC3;&#x670D;&#x53E3;&#x670D;&#xFF0C;&#x6211;&#x88AB;&#x8650;&#x7684;&#x4F53;&#x65E0;&#x5B8C;&#x80A4;&#xFF0C;&#x6BEB;&#x65E0;&#x813E;&#x6C14;&#x3002;</p>
<p>&#x5927;&#x5BB6;&#x4E5F;&#x90FD;&#x522B;&#x53C2;&#x8003;&#x6211;&#xFF0C;&#x6211;&#x82F1;&#x8BED;&#x592A;&#x5783;&#x573E;&#xFF0C;&#x5B66;&#x4E60;&#x80FD;&#x529B;&#x4E5F;&#x5F88;&#x5DEE;&#x3002;&#x5728;&#x804C;&#x7684;&#x65F6;&#x5019;&#x516C;&#x53F8;&#x52A0;&#x73ED;&#x6BD4;&#x8F83;&#x5FD9;&#xFF0C;&#x6BCF;&#x5929;&#x4E0B;&#x73ED;&#x4EE5;&#x540E;&#x8FD8;&#x8981;&#x5237; LeetCode&#xFF0C;&#x5199;&#x535A;&#x5BA2;&#xFF0C;&#x5199;&#x4E66;&#xFF0C;&#x80CC; 500 &#x4E2A;&#x6258;&#x798F;&#x5355;&#x8BCD;&#xFF0C;&#x5237;&#x6258;&#x798F; TPO&#xFF0C;&#x80CC; GRE &#x5355;&#x8BCD;&#xFF0C;&#x5237; GRE &#x9898;&#x76EE;&#x3002;&#x6211;&#x5B9E;&#x5728;&#x662F; hold &#x4E0D;&#x4F4F;&#x4E86;&#x3002;&#x5982;&#x679C;&#x6BCF;&#x5929;&#x90FD;&#x8981;&#x5B8C;&#x6210;&#x8FD9;&#x4E9B;&#x4EFB;&#x52A1;&#xFF0C;&#x6BCF;&#x5929;&#x6211;&#x7684;&#x7761;&#x7720;&#x65F6;&#x95F4;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x5C0F;&#x65F6;&#x3002;&#x6700;&#x540E;&#x51B3;&#x5B9A;&#x6258;&#x798F; + GRE + LeetCode &#x662F;&#x6BCF;&#x5929;&#x5FC5;&#x987B;&#x5B8C;&#x6210;&#xFF0C;&#x5199;&#x535A;&#x5BA2;&#x548C;&#x5199;&#x4E66;&#x653E;&#x5728;&#x5468;&#x672B;&#x5B8C;&#x6210;&#x3002;&#x7531;&#x4E8E;&#x5728;&#x804C;&#x590D;&#x4E60;&#x548C;&#x5B66;&#x4E60;&#x8FDB;&#x5EA6;&#x6709;&#x70B9;&#x6162;&#xFF0C;&#x6240;&#x4EE5;&#x6211;&#x5230;&#x4ECA;&#x5E74;&#x5E74;&#x5E95;&#x4E5F;&#x6CA1;&#x6709;&#x63D0;&#x4EA4;&#x7533;&#x8BF7;&#x5B66;&#x6821;&#x7684;&#x7533;&#x8BF7;&#x3002;</p>
<p>&#x867D;&#x7136;&#x6211;&#x7684;&#x6258;&#x798F;&#x6CA1;&#x6709;&#x8003;&#x5230;&#x6EE1;&#x5206;&#xFF0C;&#x4F46;&#x662F;&#x4F9D;&#x65E7;&#x53EF;&#x4EE5;&#x6709;&#x4E00;&#x4E9B;&#x7ECF;&#x9A8C;&#x53EF;&#x4EE5;&#x548C;&#x8BFB;&#x8005;&#x5206;&#x4EAB;&#x3002;</p>
<h3 id="%E8%80%83%E8%AF%95%E5%BF%83%E6%80%81">&#x8003;&#x8BD5;&#x5FC3;&#x6001;</h3>
<p>&#x6258;&#x798F;&#x8003;&#x8BD5;&#x662F;&#x4E00;&#x79CD;&#x80FD;&#x529B;&#x7684;&#x6D4B;&#x8BD5;&#xFF0C;&#x4E0D;&#x662F;&#x60F3;&#x529E;&#x6CD5;&#x51FA;&#x96BE;&#x9898;&#x5201;&#x9898;&#xFF08;TPO&#x53EA;&#x9047;&#x5230;&#x8FC7;&#x4E00;&#x6B21;&#xFF09;&#x4E3A;&#x96BE;&#x5927;&#x5BB6;&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x8003;&#x8BD5;&#x4E5F;&#x6CA1;&#x6709;&#x5927;&#x5BB6;&#x60F3;&#x8C61;&#x7684;&#x90A3;&#x4E48;&#x96BE;&#xFF0C;&#x6211;&#x548C;&#x8003;&#x53CB;&#x7684;&#x4EA4;&#x6D41;&#x53D1;&#x73B0;&#xFF0C;&#x8003;&#x8BD5;&#x6539;&#x9769;&#x4EE5;&#x540E;&#xFF0C;&#x5BB9;&#x9519;&#x7387;&#x4ECD;&#x7136;&#x662F;&#x633A;&#x9AD8;&#x7684;&#x3002;&#x6240;&#x4EE5;&#x5927;&#x5BB6;&#x5728;&#x5BF9;&#x5F85;&#x8003;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4E0D;&#x8981;&#x5BF9;&#x5B83;&#x4EA7;&#x751F;&#x60E7;&#x6015;&#x5FC3;&#x7406;&#xFF0C;&#x8981;&#x85D0;&#x89C6;&#x5B83;&#xFF0C;&#x76F8;&#x4FE1;&#x81EA;&#x5DF1;&#x7684;&#x4ED8;&#x51FA;&#x4E00;&#x5B9A;&#x80FD;&#x5F97;&#x5230;&#x76F8;&#x5E94;&#x7684;&#x5206;&#x6570;&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x662F;&#x8003;&#x8BD5;&#x5C31;&#x6709;&#x5E94;&#x8BD5;&#x7684;&#x6280;&#x5DE7;&#xFF0C;&#x65E0;&#x8BBA;&#x662F;&#x62A5;&#x8BFE;&#x7A0B;&#xFF0C;&#x5927;&#x5BB6;&#x7684;&#x653B;&#x7565;&#xFF0C;&#x8FD8;&#x662F;&#x6BCF;&#x4E2A;&#x4EBA;&#x81EA;&#x5DF1;&#x590D;&#x4E60;&#x65F6;&#x5019;&#x7684;&#x5FC3;&#x5F97;&#xFF0C;&#x90FD;&#x662F;&#x5927;&#x5BB6;&#x627E;&#x5230;&#x8003;&#x8BD5;&#x8BC0;&#x7A8D;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x4E00;&#x5B9A;&#x8981;&#x5BF9;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x6709;&#x4E00;&#x79CD;&#x719F;&#x6089;&#x611F;&#xFF0C;&#x4E00;&#x79CD;&#x6211;&#x77E5;&#x9053;&#x4F60;&#x60F3;&#x51FA;&#x4EC0;&#x4E48;&#x9898;&#x76EE;&#xFF0C;&#x4F60;&#x5728;&#x54EA;&#x91CC;&#x51FA;&#x9898;&#x7684;&#x719F;&#x6089;&#x611F;&#xFF0C;&#x9884;&#x5224;&#x51FA;&#x9898;&#x8005;&#x7684;&#x9884;&#x5224;&#x3002;&#x8FD9;&#x9700;&#x8981;&#x590D;&#x4E60;&#x7684;&#x65F6;&#x5019;&#x6709;&#x4E00;&#x9897;&#x70ED;&#x8BDA;&#x7684;&#x5FC3;&#xFF0C;&#x8981;&#x50CF;&#x5BF9;&#x5F85;&#x5973;&#x5B69;&#x5B50;&#x4E00;&#x6837;&#x4E86;&#x89E3;&#x5979;&#xFF0C;&#x5B66;&#x4F1A;&#x53BB;&#x9884;&#x5224;&#x5979;&#x7684;&#x60F3;&#x6CD5;&#xFF0C;&#x505A;&#x5979;&#x5E0C;&#x671B;&#x4F60;&#x7684;&#x4E8B;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6D6A;&#x8D39;&#x7CBE;&#x529B;&#x505A;&#x65E0;&#x5173;&#x7684;&#x4E8B;&#xFF0C;&#x6216;&#x8005;&#x4F5C;&#x6B7B;&#x3002;&#x6240;&#x4EE5;&#x8BF7;&#x5927;&#x5BB6;&#x590D;&#x4E60;&#x7684;&#x65F6;&#x5019;&#x8981;&#x6709;&#x5B89;&#x6392;&#xFF0C;&#x6709;&#x6280;&#x5DE7;&#xFF0C;&#x628A;&#x7CBE;&#x529B;&#x653E;&#x5728;&#x6700;&#x5BB9;&#x6613;&#x6709;&#x6548;&#x679C;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x591A;&#x62FF;&#x4E00;&#x5206;&#x662F;&#x4E00;&#x5206;&#x3002;</p>
<p>&#x6258;&#x798F;&#x8003;&#x8BD5;&#x5206;&#x56DB;&#x4E2A;&#x79D1;&#x76EE;&#xFF0C;&#x8BFB;&#x542C;&#x8BF4;&#x5199;&#x56DB;&#x4E2A;&#x65B9;&#x5411;&#xFF0C;&#x5176;&#x5B9E;&#x6BCF;&#x4E00;&#x4E2A;&#x65B9;&#x5411;&#x90FD;&#x6709;&#x4E00;&#x4E2A;&#x5171;&#x540C;&#x7684;&#x57FA;&#x7840;&#xFF0C;&#x90A3;&#x5C31;&#x662F;&#x8BCD;&#x6C47;&#x3002;&#x8BCD;&#x6C47;&#x4E0D;&#x8FC7;&#x5173;&#xFF0C;100 &#x5206;&#x5C31;&#x662F;&#x865A;&#x65E0;&#x7F25;&#x7F08;&#x7684;&#x5E7B;&#x60F3;&#x3002;&#x6240;&#x4EE5;&#x7B2C;&#x4E00;&#x4E2A;&#x6708;&#x4E00;&#x5B9A;&#x8981;&#x6C89;&#x4E0B;&#x5FC3;&#x6765;&#x597D;&#x597D;&#x80CC;&#x5355;&#x8BCD;&#x3002;&#x5355;&#x8BCD;&#x5C31;&#x7528; KMF &#x8BCD;&#x6C47; app &#x548C;&#x9ED8;&#x9ED8;&#x80CC;&#x5355;&#x8BCD;&#xFF0C;&#x6211;&#x662F;&#x5DE5;&#x4F5C;&#x515A;&#xFF0C;&#x5229;&#x7528;&#x95F2;&#x6687;&#x65F6;&#x5149;&#xFF0C;&#x76EE;&#x6807;&#x662F;&#x4E00;&#x5929; 300 &#x4E2A;&#x5355;&#x8BCD;&#xFF0C;&#x767D;&#x5929;&#x4E89;&#x53D6;&#x5728;&#x5348;&#x4F11;&#x548C;&#x5403;&#x996D;&#x7684;&#x65F6;&#x5019;&#x80CC;&#x597D;&#xFF0C;&#x4E0D;&#x6C42;&#x80CC;&#x4E86;&#x5C31;&#x6C38;&#x8FDC;&#x4E0D;&#x5FD8;&#xFF0C;&#x56E0;&#x4E3A;&#x4F60;&#x4F1A;&#x8981;&#x80CC; 3-4 &#x904D;&#x3002;&#x80CC;&#x5355;&#x8BCD;&#x5176;&#x5B9E;&#x662F;&#x4E00;&#x79CD;&#x52A0;&#x901F;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5230;&#x540E;&#x9762;&#x51E0;&#x904D;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x80CC;&#x7684;&#x5355;&#x8BCD;&#x91CF;&#x4E5F;&#x5C31;&#x4E00;&#x534A;&#x4E0D;&#x5230;&#xFF0C;&#x6240;&#x4EE5;&#x4E0D;&#x7528;&#x62C5;&#x5FC3;&#x3002;</p>
<p>&#x800C;&#x542C;&#x529B;&#x662F;&#x4ECE; 80 &#x5206;&#x5230; 100 &#x5206;&#x7684;&#x6700;&#x7EC8;&#x52A9;&#x529B;&#xFF0C;&#x5176;&#x5B9E;&#x9664;&#x4E86;&#x9605;&#x8BFB;&#xFF0C;&#x6BCF;&#x4E2A;&#x79D1;&#x76EE;&#x90FD;&#x548C;&#x542C;&#x529B;&#x606F;&#x606F;&#x76F8;&#x5173;&#xFF0C;&#x6BCF;&#x95E8;&#x8BFE;&#x90FD;&#x8981;&#x62FF;&#x5230;&#x9AD8;&#x5206;&#xFF0C;&#x90A3;&#x9700;&#x8981;&#x80FD;&#x591F;&#x7CBE;&#x51C6;&#x7684;&#x53CD;&#x6620;&#x51FA;&#x542C;&#x529B;&#x7684;&#x4FE1;&#x606F;&#x3002;&#x6211;&#x9996;&#x8003; 74&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x5F88;&#x5927;&#x7684;&#x539F;&#x56E0;&#xFF0C;&#x9664;&#x4E86;&#x7B2C;&#x4E00;&#x6B21;&#x8003;&#x8BD5;&#x7D27;&#x5F20;&#x548C;&#x4E00;&#x4E9B;&#x7A81;&#x53D1;&#x610F;&#x5916;&#xFF0C;&#x6700;&#x91CD;&#x8981;&#x7684;&#x5C31;&#x662F;&#x6CA1;&#x6709;&#x91CD;&#x89C6;&#x542C;&#x529B;&#xFF0C;&#x6CA1;&#x6709;&#x505A;&#x597D;&#x4ED4;&#x7EC6;&#x542C;&#x7684;&#x5FC3;&#x7406;&#x51C6;&#x5907;&#xFF0C;&#x5230;&#x65F6;&#x53E3;&#x8BED;&#x548C;&#x5199;&#x4F5C;&#x7EFC;&#x5408;&#x9898;&#x6CA1;&#x6709;&#x8E29;&#x5230;&#x6240;&#x6709;&#x7684;&#x5F97;&#x5206;&#x70B9;&#xFF0C;&#x56E0;&#x6B64;&#xFF0C;&#x5927;&#x5BB6;&#x4E00;&#x5B9A;&#x8981;&#x5FC3;&#x7406;&#x4E0A;&#x8981;&#x91CD;&#x89C6;&#x542C;&#x529B;&#xFF0C;&#x8003;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#x63D0;&#x9192;&#x81EA;&#x5DF1;&#x4FDD;&#x6301;&#x542C;&#x529B;&#x6CE8;&#x610F;&#x529B;&#x3002;&#x65E0;&#x65F6;&#x65E0;&#x523B;&#x4FDD;&#x6301;&#x8B66;&#x60D5;&#x611F;&#xFF0C;&#x53BB;&#x627E;&#x5230;&#x51FA;&#x9898;&#x7684;&#x70B9;&#x3002;</p>
<h3 id="%E5%8D%95%E8%AF%8D">&#x5355;&#x8BCD;</h3>
<p>&#x6211;&#x80CC;&#x5355;&#x8BCD;&#x90FD;&#x662F;&#x7528;&#x96F6;&#x788E;&#x65F6;&#x95F4;&#x80CC;&#x7684;&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x4E0A;&#x4E0B;&#x73ED;&#x7B49;&#x8F66;&#xFF0C;&#x5750;&#x5730;&#x94C1;&#xFF0C;&#x5348;&#x996D;&#x540E;&#x6563;&#x6B65;&#xFF0C;&#x665A;&#x996D;&#x540E;&#x95F2;&#x901B;&#x3002;&#x8FD9;&#x4E9B;&#x96F6;&#x788E;&#x65F6;&#x95F4;&#x90FD;&#x53EF;&#x4EE5;&#x7528;&#x6765;&#x80CC;&#x5355;&#x8BCD;&#x3002;&#x80CC;&#x5355;&#x8BCD;&#x4E0D;&#x8981;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;&#x8BB0; 5 &#x5206;&#x949F;&#x3002;&#x6B63;&#x786E;&#x7684;&#x505A;&#x6CD5;&#x5E94;&#x8BE5;&#x662F;&#x591A;&#x91CD;&#x590D;&#x3002;&#x4E00;&#x4E2A;&#x5355;&#x8BCD;&#x770B; 20 &#x79D2;&#x5C31;&#x8FC7;&#xFF0C;&#x4E00;&#x5929;&#x591A;&#x91CD;&#x590D; 3-4 &#x6B21;&#x3002;&#x91CD;&#x590D;&#x6B21;&#x6570;&#x8D8A;&#x591A;&#x8BB0;&#x7684;&#x8D8A;&#x7262;&#x3002;&#x8BD5;&#x60F3;&#xFF0C;&#x60C5;&#x666F;&#x4E00;&#xFF0C;&#x4E00;&#x4E2A;&#x964C;&#x751F;&#x4EBA;&#x548C;&#x4F60;&#x6253;&#x4E2A;&#x62DB;&#x547C;&#x804A;&#x5929; 10 &#x5206;&#x949F;&#xFF0C;&#x4E00;&#x5E74;&#x4EE5;&#x540E;&#x4F60;&#x8FD8;&#x80FD;&#x8BB0;&#x4F4F;&#x4ED6;&#x4E48;&#xFF1F;&#x60C5;&#x666F;&#x4E8C;&#xFF0C;&#x4E00;&#x4E2A;&#x964C;&#x751F;&#x4EBA;&#x548C;&#x4F60;&#x6253;&#x62DB;&#x547C;&#xFF0C;&#x6BCF;&#x5929;&#x90FD;&#x804A; 1 &#x79D2;&#x949F;&#xFF0C;&#x8FDE;&#x7EED; 365 &#x5929;&#x5929;&#x5929;&#x548C;&#x4F60;&#x76F8;&#x89C1;&#xFF0C;&#x4E00;&#x5E74;&#x4EE5;&#x540E;&#x4F60;&#x8FD8;&#x80FD;&#x8BB0;&#x4F4F;&#x4ED6;&#x4E48;&#xFF1F;&#x5F88;&#x660E;&#x663E;&#xFF0C;&#x6BCF;&#x5929;&#x90FD;&#x91CD;&#x590D;&#x4E00;&#x5B9A;&#x4F1A;&#x8BA9;&#x4F60;&#x8BB0;&#x4F4F;&#x4ED6;&#x3002;&#x4EE5;&#x4E0B;&#x662F;&#x6211;&#x7684;&#x5355;&#x8BCD; app &#x7684;&#x5237;&#x8BCD;&#x8BB0;&#x5F55;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_35_.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x662F;&#x7B14;&#x8005;&#x91CD;&#x65B0;&#x66F4;&#x65B0;&#x7684;&#x622A;&#x56FE;&#x3002;&#x5230; 2019 &#x5E74;&#x5E74;&#x5E95;&#xFF0C;&#x8FDE;&#x7EED;&#x6253;&#x5361;&#x5929;&#x6570;&#x53EA;&#x6709; 190 &#x5929;&#x5DE6;&#x53F3;&#x3002;&#x7B14;&#x8005;&#x5148;&#x7528;&#x8003;&#x6EE1;&#x5206;&#x5355;&#x8BCD; app &#x5237;&#x5B8C;&#x6240;&#x6709;&#x6258;&#x798F;&#x8BCD;&#x6C47;&#xFF0C;&#x5E76;&#x5F00;&#x542F;&#x7B2C;&#x4E8C;&#x904D;&#x5237;&#x5355;&#x8BCD;&#xFF0C;&#x5DEE;&#x4E0D;&#x591A; 10 &#x6708;&#x4EFD;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5F00;&#x59CB;&#x7528;&#x5C0F;&#x7AD9;&#x5355;&#x8BCD; app &#x5F00;&#x59CB;&#x5237;&#x5B83;&#x3002;&#x5F53;&#x6211;&#x628A;&#x5C0F;&#x7AD9; app &#x6240;&#x6709;&#x5355;&#x8BCD;&#x90FD;&#x5237;&#x5B8C;&#x4E00;&#x904D;&#xFF0C;&#x6211;&#x53C8;&#x5F00;&#x59CB;&#x7528;&#x9ED8;&#x9ED8;&#x80CC;&#x5355;&#x8BCD;&#x4E86;&#x3002;&#x5982;&#x679C;&#x4F60;&#x95EE;&#x6211;&#x54EA;&#x4E2A; app &#x6700;&#x597D;&#x7528;&#xFF1F;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x6211;&#x5176;&#x5B9E;&#x56DE;&#x7B54;&#x4E0D;&#x4E0A;&#x6765;&#x3002;&#x56E0;&#x4E3A;&#x6211;&#x6240;&#x6709;&#x90FD;&#x7528;&#x8FC7;&#xFF0C;&#x8BB0;&#x5FC6;&#x5355;&#x8BCD;&#x6709;&#x7D2F;&#x52A0;&#x6548;&#x679C;&#xFF0C;&#x5E76;&#x975E;&#x67D0;&#x5355;&#x4E00; app &#x4FC3;&#x4F7F;&#x6211;&#x8BB0;&#x4F4F;&#x6240;&#x6709;&#x5355;&#x8BCD;&#x3002;&#x5176;&#x5B9E;&#x8FD9;&#x4E9B;&#x5355;&#x8BCD; app &#x90FD;&#x5DEE;&#x4E0D;&#x591A;&#x7684;&#x3002;&#x5EFA;&#x8BAE;&#x8BFB;&#x8005;&#x90FD;&#x8BD5;&#x8BD5;&#xFF0C;&#x627E;&#x4E00;&#x4E2A;&#x9002;&#x5408;&#x81EA;&#x5DF1;&#x7684;&#xFF0C;&#x5237;&#x8D77;&#x6765;&#x5427;&#x3002;</p>
<h3 id="%E6%97%B6%E9%97%B4%E8%A7%84%E5%88%92">&#x65F6;&#x95F4;&#x89C4;&#x5212;</h3>
<p>&#x6258;&#x798F;&#x5907;&#x8003;&#x6700;&#x597D;&#x80FD;&#x901F;&#x6218;&#x901F;&#x51B3;&#xFF0C;&#x62D6;&#x7684;&#x65F6;&#x95F4;&#x8D8A;&#x957F;&#xFF0C;&#x5907;&#x8003;&#x6548;&#x7387;&#x4E5F;&#x4E0D;&#x9AD8;&#x3002;&#x4E00;&#x822C;&#x4EE5; 3-4 &#x4E2A;&#x6708;&#x4E3A;&#x5468;&#x671F;&#x6700;&#x4F73;&#x3002;</p>
<ul>
<li>&#x7B2C;&#x4E00;&#x4E2A;&#x6708;&#xFF1A;&#x592F;&#x5B9E;&#x57FA;&#x7840;&#x9636;&#x6BB5;&#x3002;</li>
</ul>
<p>&#x8FD9;&#x4E2A;&#x9636;&#x6BB5;&#x662F;&#x4E00;&#x4E2A;&#x51C6;&#x5907;&#x671F;&#xFF0C;&#x5C31;&#x662F;&#x80CC;&#x5355;&#x8BCD;&#xFF0C;&#x6BCF;&#x5929;&#x4E89;&#x53D6; 300 &#x4E2A;&#x8BCD;&#x3002;&#x80CC;&#x5355;&#x8BCD;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x53EF;&#x4EE5;&#x5F00;&#x59CB;&#x505A;&#x9605;&#x8BFB; TPO &#x4E86;&#xFF0C;&#x4E00;&#x5929;&#x4E00;&#x5957;&#x7684;&#x7EC3;&#x4E60;&#x3002;</p>
<ul>
<li>&#x7B2C;&#x4E8C;&#x4E2A;&#x6708;&#x662F;&#x590D;&#x4E60;&#x9AD8;&#x5CF0;&#x9636;&#x6BB5;&#x3002;</li>
</ul>
<p>&#x9664;&#x4E86;&#x5199;&#x4F5C;&#x548C;&#x53E3;&#x8BED;&#x7EFC;&#x5408;&#x9898;&#x4EE5;&#x5916;&#xFF0C;&#x6240;&#x6709;&#x79D1;&#x76EE;&#x90FD;&#x8981;&#x6BCF;&#x5929;&#x5206;&#x914D;&#x4E00;&#x5B9A;&#x7684;&#x65F6;&#x95F4;&#x53BB;&#x5B8C;&#x6210;&#x6BCF;&#x65E5;&#x76EE;&#x6807;&#xFF0C;&#x5355;&#x8BCD;&#x7EE7;&#x7EED; 300 &#x4E00;&#x5929;&#xFF0C;&#x9605;&#x8BFB;&#x4E00;&#x5929;&#x4E00;&#x4E2A; TPO&#xFF0C;&#x542C;&#x529B;&#x4E00;&#x5929;&#x4E00;&#x4E2A; TPO&#xFF0C;&#x53E3;&#x8BED;&#x72EC;&#x7ACB;&#x4E00;&#x5929;&#x4E00;&#x9898;&#x3002;&#x8FD9;&#x6BB5;&#x65F6;&#x95F4;&#x662F;&#x6700;&#x75DB;&#x82E6;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x56E0;&#x4E3A;&#x7A0B;&#x5E8F;&#x5458;&#x5DE5;&#x4F5C;&#x6BD4;&#x8F83;&#x5FD9;&#xFF0C;&#x5927;&#x5BB6;&#x4E00;&#x822C;&#x90FD; 23 &#x70B9;&#x5DE6;&#x53F3;&#xFF0C;&#x5982;&#x679C;&#x52A0;&#x73ED;&#xFF0C;&#x5230;&#x5BB6;&#x5C31; 1-2 &#x70B9;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x7761;&#x524D;&#x4E00;&#x5B9A;&#x8981;&#x5408;&#x7406;&#x5B89;&#x6392;&#x597D;&#x5DE5;&#x4F5C;&#x751F;&#x6D3B;&#x4E0E;&#x5B66;&#x4E60;&#x3002;&#x6BCF;&#x5929;&#x770B;&#x7740;&#x65F6;&#x95F4;&#x6D41;&#x901D;&#xFF0C;&#x8FD8;&#x662F;&#x5F88;&#x6293;&#x72C2;&#x7684;&#xFF0C;&#x4F46;&#x662F;&#x5927;&#x5BB6;&#x4E00;&#x5B9A;&#x8981;&#x575A;&#x6301;&#x4E0B;&#x6765;&#xFF0C;&#x800C;&#x5BF9;&#x4E8E;&#x5B66;&#x751F;&#x515A;&#xFF0C;&#x8FD9;&#x4E9B;&#x5DE5;&#x4F5C;&#x91CF;&#x5E94;&#x8BE5;&#x662F;&#x5F88;&#x8F7B;&#x677E;&#x80FD;&#x5B8C;&#x6210;&#x7684;&#x3002;</p>
<ul>
<li>&#x7B2C;&#x4E09;&#x4E2A;&#x6708;&#x662F;&#x51B2;&#x523A;&#x9636;&#x6BB5;&#x3002;</li>
</ul>
<p>&#x5168;&#x9898;&#x578B;&#x90FD;&#x9700;&#x8981;&#x51B2;&#x523A;&#x7684;&#x9636;&#x6BB5;&#xFF0C;&#x91CD;&#x70B9;&#x53EF;&#x80FD;&#x4F1A;&#x653E;&#x5230;&#x53E3;&#x8BED;&#x7EFC;&#x5408;&#x9898;&#x548C;&#x5199;&#x4F5C;&#x4E0A;&#x9762;&#xFF0C;&#x4E00;&#x5929;&#x7684;&#x65F6;&#x95F4;&#x5355;&#x8BCD;&#x7EE7;&#x7EED; 250 &#x4E00;&#x5929;&#xFF0C;&#x9605;&#x8BFB;&#x4E00;&#x5929;&#x4E00;&#x4E2A; TPO&#xFF0C;&#x542C;&#x529B;&#x4E00;&#x5929;&#x4E00;&#x4E2A; TPO&#xFF0C;&#x53E3;&#x8BED;&#x72EC;&#x7ACB;&#x4E00;&#x5929;&#x4E00;&#x9898;&#xFF0C;&#x53E3;&#x8BED;&#x7EFC;&#x5408;&#x9898;&#x4E89;&#x53D6;&#x4E00;&#x5929;&#x4E00;&#x5957;&#xFF08;&#x6211;&#x7684;&#x5B9E;&#x9645;&#x60C5;&#x51B5;&#x662F;&#x8003;&#x524D;&#x5927;&#x6982;&#x505A;&#x4E86; 30 &#x5957;&#x53E3;&#x8BED;&#xFF09;&#xFF0C;&#x5199;&#x4F5C;&#x4E24;&#x5929;&#x4E00;&#x5957;&#xFF08;&#x8003;&#x524D;&#x505A;&#x4E86; 5 &#x5957;&#xFF09;&#x3002;&#x81F3;&#x4E8E;&#x6BCF;&#x5929;&#x7684;&#x5177;&#x4F53;&#x65F6;&#x95F4;&#x5B89;&#x6392;&#xFF0C;&#x56E0;&#x4EBA;&#x800C;&#x5F02;&#xFF0C;&#x6211;&#x53EF;&#x4EE5;&#x8BF4;&#x8BF4;&#x6211;&#x7684;&#x5468;&#x672B;&#x5B89;&#x6392;&#x3002;</p>
<p>&#x200B;		&#x4E0A;&#x5348;&#x65E0;&#x8BBA;&#x51E0;&#x70B9;&#x8D77;&#x5E8A;&#xFF0C;&#x4E00;&#x5957;&#x9605;&#x8BFB;&#x4E00;&#x5957;&#x542C;&#x529B;&#x7684; TPO &#x7684;&#x6A21;&#x8003;&#x548C;&#x9519;&#x9898;&#x56DE;&#x987E;&#x3002;</p>
<p>&#x200B;		&#x4E0B;&#x5348;&#x5348;&#x4F11;&#xFF0C;&#x9192;&#x6765;&#x540E;&#x4E00;&#x5957;&#x5199;&#x4F5C;&#x3002;</p>
<p>&#x200B;		&#x7761;&#x524D;&#x5B8C;&#x6210;&#x53E3;&#x8BED; TPO &#x4E00;&#x5957;&#x3002;</p>
<p>&#x200B;		&#x5176;&#x4E2D;&#x627E;&#x65F6;&#x95F4;&#x7A7F;&#x63D2;&#x80CC;&#x4E00;&#x80CC;&#x5355;&#x8BCD;&#x548C;&#x80CC;&#x4E00;&#x4E0B;&#x8BED;&#x6599;&#xFF08;&#x53E3;&#x8BED;&#x548C;&#x5199;&#x4F5C;&#x901A;&#x7528;&#xFF09;&#x3002;</p>
<p>&#x6709;&#x4EBA;&#x89C9;&#x5F97;&#x4E00;&#x5929;&#x9700;&#x8981;&#x505A;&#x4E24;&#x5957; TPO&#xFF0C;&#x6211;&#x89C9;&#x5F97;&#x5F88;&#x96BE;&#x5B9E;&#x73B0;&#xFF0C;&#x6BD5;&#x7ADF;&#x505A;&#x9519;&#x9898;&#x8FD8;&#x8981;&#x68C0;&#x67E5;&#x4E3A;&#x4EC0;&#x4E48;&#x9519;&#xFF0C;&#x57FA;&#x672C;&#x4E0A;&#x4E00;&#x5929;&#x4E00;&#x5957; TPO &#x5DEE;&#x4E0D;&#x591A;&#x4E86;&#xFF0C;&#x4F55;&#x51B5; TPO &#x8D44;&#x6E90;&#x6709;&#x9650;&#xFF0C;&#x4E0D;&#x80FD;&#x6D6A;&#x8D39;&#xFF0C;&#x5FC5;&#x987B;&#x505A;&#x4E00;&#x5957;&#x53CD;&#x601D;&#x4E00;&#x5957;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5355;&#x72EC;&#x8BF4;&#x8BF4; 4 &#x79D1;&#x7684;&#x590D;&#x4E60;&#x65B9;&#x6CD5;&#x3002;</p>
<h3 id="%E9%98%85%E8%AF%BB">&#x9605;&#x8BFB;</h3>
<p>&#x9605;&#x8BFB;&#x662F;&#x62FF;&#x5206;&#x91CD;&#x70B9;&#xFF0C;&#x8BCD;&#x6C47;&#x662F;&#x57FA;&#x7840;&#xFF0C;&#x6240;&#x4EE5;&#x5355;&#x8BCD;&#x4E00;&#x5B9A;&#x8981;&#x80CC;&#x51E0;&#x904D;&#x3002;</p>
<p>&#x590D;&#x4E60;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5B66;&#x4F1A;&#x53BB;&#x627E;&#x540C;&#x4E49;&#x8F6C;&#x6362;&#xFF0C;&#x8981;&#x76F8;&#x4FE1;&#x8003;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7EDD;&#x5927;&#x591A;&#x6570;&#x9898;&#x76EE;&#x8FD8;&#x662F;&#x5728;&#x505A;&#x539F;&#x6587;&#x7684;&#x540C;&#x4E49;&#x8F6C;&#x6362;&#xFF0C;&#x5FEB;&#x901F;&#x5B9A;&#x4F4D;&#x5173;&#x952E;&#x8BCD; KEYWORD&#xFF0C;&#x5C06;&#x539F;&#x6587;&#x548C;&#x9898;&#x76EE;&#x9009;&#x9879;&#x5BF9;&#x7167;&#xFF0C;&#x6240;&#x6709;&#x9898;&#x90FD;&#x505A;&#x6392;&#x9664;&#x6CD5;&#xFF0C;&#x57FA;&#x672C;&#x80FD;&#x4FDD;&#x8BC1;&#x5F88;&#x9AD8;&#x7684;&#x5206;&#x6570;&#x3002;&#x6211;&#x6709;&#x4E24;&#x6B21;&#x8003;&#x8BD5;&#xFF0C;&#x6700;&#x540E;&#x4E09;&#x9898;&#x5269;&#x7684;&#x65F6;&#x95F4;&#x90FD;&#x4E0D;&#x591A;&#xFF0C;&#x6700;&#x540E;&#x5206;&#x6570; 28&#xFF0C;&#x4E00;&#x65B9;&#x9762;&#x8BF4;&#x660E;&#x540C;&#x4E49;&#x8F6C;&#x6362;&#x7684;&#x6B63;&#x786E;&#x5B9A;&#xFF0C;&#x4E5F;&#x8BF4;&#x660E;&#x4E86;&#x8003;&#x8BD5;&#x7684;&#x5BB9;&#x9519;&#x7387;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_26.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x6BCF;&#x7BC7; TPO &#x9605;&#x8BFB;&#x505A;&#x5B8C;&#x4EE5;&#x540E;&#x53EF;&#x4EE5;&#x5199;&#x4E00;&#x5199;&#x53CD;&#x601D;&#x3002;&#x9519;&#x9898;&#x9519;&#x5728;&#x54EA;&#x91CC;&#x4E86;&#x3002;&#x7136;&#x540E;&#x7CBE;&#x8BFB;&#x4E00;&#x4E0B;&#x6587;&#x7AE0;&#xFF0C;&#x628A;&#x957F;&#x96BE;&#x53E5;&#x548C;&#x4E0D;&#x61C2;&#x7684;&#x5355;&#x8BCD;&#x67E5;&#x4E00;&#x67E5;&#x3002;&#x7B14;&#x8005;&#x5927;&#x6982;&#x7CBE;&#x8BFB;&#x4E86; 30 &#x7BC7;&#x5DE6;&#x53F3;&#x3002;&#x8003;&#x524D; TPO &#x9605;&#x8BFB;&#x90FD;&#x505A;&#x5B8C;&#xFF0C;&#x56E0;&#x4E3A;&#x6709;&#x53EF;&#x80FD;&#x51FA;&#x73B0;&#x9605;&#x8BFB;&#x9898;&#x76EE;&#x53D8;&#x6210;&#x542C;&#x529B;&#x9898;&#x76EE;&#xFF0C;&#x6240;&#x4EE5; TPO &#x5237;&#x5B8C;&#xFF0C;&#x6700;&#x540E;&#x95EE;&#x9898;&#x4E0D;&#x5927;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_28.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_29.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<h3 id="%E5%90%AC%E5%8A%9B">&#x542C;&#x529B;</h3>
<p>&#x542C;&#x529B;&#x662F;&#x4ECE; 80 &#x5206;&#x5230; 100 &#x5206;&#x6700;&#x91CD;&#x8981;&#x7684;&#x52A9;&#x529B;&#x3002;&#x542C;&#x529B;&#x9898;&#x662F;&#x6709;&#x5BB9;&#x9519;&#x7387;&#x7684;&#x3002;&#x62FF;&#x6211;&#x7684;&#x8003;&#x8BD5;&#x7ECF;&#x9A8C;&#x770B;&#xFF0C;&#x6BCF;&#x6B21;&#x5230;&#x65F6;&#x4F1A;&#x9047;&#x5230;&#x4E03;&#x516B;&#x9898;&#x9700;&#x8981;&#x601D;&#x8003;&#x4E00;&#x4E0B;&#x4E8C;&#x9009;&#x4E00;&#xFF0C;&#x4E24;&#x6B21;&#x8003;&#x8BD5;&#x5206;&#x6570;&#x90FD;&#x662F; 23 &#x5206;&#xFF0C;&#x6BD4;&#x81EA;&#x5DF1;&#x9884;&#x60F3;&#x7684;&#x8981;&#x9AD8;&#x3002;&#x542C;&#x529B;&#x590D;&#x4E60;&#x6700;&#x91CD;&#x8981;&#x7684;&#x662F;&#x591A;&#x542C;&#x3002;</p>
<ol>
<li>&#x901A;&#x8FC7;&#x591A;&#x542C;&#xFF0C;&#x57F9;&#x517B;&#x82F1;&#x8BED;&#x7684;&#x58F0;&#x97F3;&#x7ED3;&#x6784;&#x3002;</li>
</ol>
<p>&#x542C;&#x529B;&#x4E0D;&#x662F;&#x4E00;&#x4E2A;&#x4E2A;&#x5355;&#x8BCD;&#x542C;&#xFF0C;&#x6BCF;&#x53E5;&#x8BDD;&#x90FD;&#x6709;&#x81EA;&#x5DF1;&#x7684;&#x4E3B;&#x8C13;&#x5BBE;&#xFF0C;&#x8003;&#x8BD5;&#x8003;&#x70B9;&#x65E0;&#x975E;&#x5C31;&#x662F;&#x8003;&#x5BDF;&#x4E3B;&#x8BED;&#x6216;&#x8005;&#x5BBE;&#x8BED;&#x4F60;&#x6709;&#x6CA1;&#x6709;&#x542C;&#x5230;&#xFF0C;&#x5C11;&#x91CF;&#x9898;&#x76EE;&#x662F;&#x5BF9;&#x6574;&#x4F53;&#x6216;&#x8005;&#x6BB5;&#x843D;&#x7684;&#x6001;&#x5EA6;&#x7406;&#x89E3;&#x3002;</p>
<ol start="2">
<li>&#x901A;&#x8FC7;&#x591A;&#x542C;&#xFF0C;&#x719F;&#x6089;&#x6BB5;&#x843D;&#x7ED3;&#x6784;&#xFF0C;&#x517B;&#x6210;&#x5BF9;&#x51FA;&#x9898;&#x70B9;&#xFF0C;&#x95EE;&#x9898;&#xFF0C;&#x8BED;&#x6C14;&#x8BCD;&#xFF0C;&#x8F6C;&#x6298;&#x8BCD;&#x7684;&#x654F;&#x611F;&#x6027;&#xFF0C;&#x5728;&#x8003;&#x8BD5;&#x4E2D;&#x52A9;&#x529B;&#x81EA;&#x5DF1;&#x80FD;&#x5728;&#x51FA;&#x9898;&#x70B9;&#x524D;&#x63D0;&#x9AD8;&#x81EA;&#x5DF1;&#x7684;&#x8033;&#x6735;&#x6CE8;&#x610F;&#x529B;&#x3002;</li>
</ol>
<p>&#x6BCF;&#x5929;&#x4E00;&#x5957; TPO&#xFF0C;&#x52A0;&#x8003;&#x540E;&#x7CBE;&#x542C;&#xFF0C;&#x7CBE;&#x542C;&#x662F;&#x8FB9;&#x542C;&#x8FB9;&#x601D;&#x8003;&#x4E0A;&#x9762;&#x7684;&#x4E24;&#x4E2A;&#x8981;&#x70B9;&#xFF0C;&#x4E00;&#x904D;&#x901A;&#x8FC7;&#x3002;&#x9760;&#x524D;&#x4E24;&#x5468;&#xFF0C;&#x505A;&#x5230; 1.2 &#x500D;&#x901F;&#x5EA6;&#x505A;&#x9898;&#x6CA1;&#x95EE;&#x9898;&#xFF0C;&#x590D;&#x4E60;&#x5E73;&#x5747;&#x5206;&#x57FA;&#x672C;&#x5C31;&#x662F;&#x8003;&#x8BD5;&#x5206;&#x6570;&#x3002;&#x505A;&#x9898;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x575A;&#x6301;&#x5230;&#x5E95;&#xFF0C;&#x4E0D;&#x8981;&#x56E0;&#x4E3A;&#x4E00;&#x53E5;&#x6216;&#x8005;&#x4E00;&#x6BB5;&#x6CA1;&#x542C;&#x6E05;&#x695A;&#x5C31;&#x653E;&#x5F03;&#xFF0C;&#x5F88;&#x591A;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x542C;&#x529B;&#x9898;&#x76EE;&#x5728;&#x4E0D;&#x7406;&#x89E3;&#x542C;&#x529B;&#x7D20;&#x6750;&#x7684;&#x6761;&#x4EF6;&#x4E0B;&#x4E5F;&#x80FD;&#x56DE;&#x7B54;&#x3002;&#x4F46;&#x662F;&#x8981;&#x505A;&#x5230;&#x6709;&#x8FDE;&#x7EED;&#x542C;&#x516D;&#x9898;&#x7684;&#x5FCD;&#x8010;&#x529B;&#x548C;&#x6CE8;&#x610F;&#x529B;&#x3002;TPO &#x9898;&#x76EE;&#x73B0;&#x5728;&#x6709;&#x53EF;&#x80FD;&#x6210;&#x4E3A;&#x4F60;&#x9605;&#x8BFB;&#x7684;&#x9898;&#x76EE;&#xFF0C;&#x6240;&#x4EE5;&#x5927;&#x5BB6;&#x4E00;&#x5B9A;&#x8981;&#x505A;&#x5B8C;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_27.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x5173;&#x4E8E;&#x7B14;&#x8BB0;&#xFF0C;&#x6211;&#x7684;&#x5386;&#x7A0B;&#x662F;&#x4E00;&#x6587;&#x7AE0;&#x4E94;&#x516D;&#x4E2A;&#x8BCD;&#xFF0C;&#x5230;&#x4E00;&#x6587;&#x7AE0;&#x8BB0;&#x5F97;&#x5BC6;&#x5BC6;&#x9EBB;&#x9EBB;&#xFF0C;&#x5230;&#x6700;&#x540E;&#x8003;&#x8BD5;&#x524D;&#x4E00;&#x6587;&#x7AE0;&#x4E0D;&#x8D85;&#x8FC7; 10 &#x4E2A;&#x8BCD;&#xFF0C;&#x5176;&#x5B9E;&#x6700;&#x91CD;&#x8981;&#x7684;&#x5185;&#x5BB9;&#x662F;&#x8BB0;&#x4E0B;&#x6587;&#x7AE0;&#x89C2;&#x70B9;&#x548C;&#x903B;&#x8F91;&#x3002;&#x5173;&#x952E;&#x8BCD;&#xFF0C;&#x672F;&#x8BED;&#xFF0C;&#x4E0D;&#x91CD;&#x8981;&#x3002;&#x8003;&#x524D;&#x542C;&#x529B; TPO &#x90FD;&#x505A;&#x5B8C;&#xFF0C;&#x95EE;&#x9898;&#x4E0D;&#x5927;&#x3002;&#x5206;&#x4EAB;&#x51E0;&#x4E2A;&#x542C;&#x529B;&#x7684;&#x7B14;&#x8BB0;&#x3002;&#x6709;&#x4E9B;&#x540C;&#x5B66;&#x4E0D;&#x505A;&#x7B14;&#x8BB0;&#x4E5F;&#x53EF;&#x4EE5;&#x62FF;&#x5230;&#x9AD8;&#x5206;&#xFF0C;&#x6240;&#x4EE5;&#x7B14;&#x8BB0;&#x5E76;&#x4E0D;&#x662F;&#x5FC5;&#x987B;&#x7684;&#xFF0C;&#x56E0;&#x4EBA;&#x800C;&#x5F02;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_30.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_31.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_32.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_33.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<h3 id="%E5%8F%A3%E8%AF%AD">&#x53E3;&#x8BED;</h3>
<p>&#x8003;&#x524D;&#x4E00;&#x4E2A;&#x6708;&#x65F6;&#x95F4;&#x51C6;&#x5907;&#x53E3;&#x8BED;&#x3002;&#x5982;&#x679C;&#x4F60;&#x7684;&#x53E3;&#x8BED;&#x771F;&#x7684;&#x8BF4;&#x7684;&#x4E0D;&#x6E9C;&#xFF0C;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x62A5;&#x4E2A;&#x53E3;&#x8BED;&#x73ED;&#xFF0C;&#x591A;&#x7EC3;&#x7EC3;&#xFF0C;&#x6211;&#x53EA;&#x80FD;&#x8BF4;&#xFF0C;&#x8BED;&#x6599;&#x662F;&#x771F;&#x7684;&#x597D;&#x7528;&#xFF0C;2 &#x4E2A;&#x6708;&#x7684;&#x8003;&#x8BD5;&#xFF0C;&#x72EC;&#x7ACB;&#x53E3;&#x8BED;&#x4F1A;&#x547D;&#x4E2D;&#x76F8;&#x4F3C;&#x7684;&#x8BED;&#x6599;&#x3002;&#x73ED;&#x4E0A;&#x5BF9;&#x6BCF;&#x79CD;&#x9898;&#x578B;&#x7684;&#x7406;&#x89E3;&#x4E5F;&#x6BD4;&#x8F83;&#x6E05;&#x6670;&#xFF0C;&#x4E5F;&#x63D0;&#x4F9B;&#x4E86;&#x7B54;&#x9898;&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x7ED3;&#x6784;&#x548C;&#x6A21;&#x7248;&#xFF0C;&#x633A;&#x597D;&#x7528;&#x3002;</p>
<p>&#x5177;&#x4F53;&#x590D;&#x4E60;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x53E3;&#x8BED;&#x53EA;&#x80FD;&#x9760;&#x81EA;&#x5DF1;&#x591A;&#x8BF4;&#x4E86;&#xFF0C;&#x800C;&#x4E14;&#x8981;&#x539A;&#x7740;&#x8138;&#x76AE;&#x8BF4;&#xFF0C;&#x56E0;&#x4E3A;&#x8003;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x81EA;&#x4FE1;&#x5FC3;&#x975E;&#x5E38;&#x91CD;&#x8981;&#xFF0C;&#x4F60;&#x8EAB;&#x8FB9;&#x53EF;&#x80FD;&#x6709;&#x6BD4;&#x4F60;&#x8BF4;&#x7684;&#x4E0D;&#x597D;&#x7684;&#xFF0C;&#x53EF;&#x80FD;&#x8BF4;&#x5F97;&#x548C;&#x8001;&#x5916;&#x4E00;&#x6837;&#x597D;&#xFF0C;&#x8FD9;&#x65F6;&#x5019;&#x4F60;&#x5982;&#x679C;&#x5FC3;&#x6001;&#x75B2;&#x8F6F;&#xFF0C;&#x4F1A;&#x51FA;&#x73B0;&#x7B54;&#x9898;&#x95EE;&#x9898;&#xFF0C;&#x8D8A;&#x8BF4;&#x8D8A;&#x4E0D;&#x81EA;&#x4FE1;&#xFF0C;&#x8D8A;&#x8BF4;&#x58F0;&#x97F3;&#x8D8A;&#x5C0F;&#xFF0C;&#x8D8A;&#x8BF4;&#x8BED;&#x8A00;&#x8D8A;&#x67AF;&#x71E5;&#x3002;</p>
<p>&#x72EC;&#x7ACB;&#x53E3;&#x8BED;&#x5C31;&#x662F;&#x8BED;&#x6599;&#x7684;&#x79EF;&#x7D2F;&#xFF0C;&#x6211;&#x4E3A;&#x81EA;&#x5DF1;&#x51C6;&#x5907;&#x4E86;&#x591A;&#x79CD;&#x8BED;&#x6599;&#xFF0C;&#x80FD;&#x9762;&#x5BF9;&#x4EA4;&#x6D41;&#xFF0C;&#x6587;&#x5316;&#xFF0C;&#x79D1;&#x6280;&#xFF0C;&#x73AF;&#x4FDD;&#x7B49;&#x5185;&#x5BB9;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6709;&#x8BDD;&#x53EF;&#x8BF4;&#x3002;&#x540C;&#x65F6;&#x79EF;&#x7D2F;&#x903B;&#x8F91;&#x8BCD;&#xFF0C;&#x56E0;&#x679C;&#x5173;&#x7CFB;&#xFF0C;&#x9012;&#x8FDB;&#x5173;&#x7CFB;&#xFF0C;&#x8F6C;&#x6298;&#x5173;&#x7CFB;&#x6BCF;&#x79CD;&#x5173;&#x7CFB;&#x51C6;&#x5907;&#x4E24;&#x4E09;&#x4E2A;&#x8BCD;&#xFF0C;&#x901A;&#x8FC7;&#x7ED3;&#x6784;&#x548C;&#x8BED;&#x6599;&#xFF0C;&#x5171;&#x540C;&#x642D;&#x5EFA;&#x8D77;&#x81EA;&#x5DF1;&#x4E00;&#x5206;&#x949F;&#x7684;&#x8BED;&#x8A00;&#x8F70;&#x70B8;&#x3002;&#x8003;&#x8BD5;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4FDD;&#x8BC1;&#x81EA;&#x5DF1;&#x80FD;&#x8BF4;&#x5B8C;&#x6574;&#x5B8C;&#x4E00;&#x4E2A;&#x89C2;&#x70B9;&#xFF0C;&#x5305;&#x542B;&#x6001;&#x5EA6;&#xFF0C;&#x539F;&#x56E0;&#xFF0C;&#x4E3E;&#x4F8B;&#xFF0C;&#x53CD;&#x65B9;&#xFF0C;&#x603B;&#x7ED3;&#x3002;</p>
<p>&#x7EFC;&#x5408;&#x53E3;&#x8BED;&#x66F4;&#x91CD;&#x8981;&#x7684;&#x5176;&#x5B9E;&#x662F;&#x542C;&#x529B;&#xFF0C;&#x80FD;&#x628A;&#x8003;&#x70B9;&#x90FD;&#x8BB0;&#x4E0B;&#x6765;&#x3002;&#x6240;&#x4EE5;&#x8FD9;&#x79CD;&#x9898;&#x578B;&#x76F8;&#x5BF9;&#x7B80;&#x5355;&#xFF0C;&#x8003;&#x9898;&#x7ED3;&#x6784;&#x4E5F;&#x6BD4;&#x8F83;&#x7A33;&#x5B9A;&#xFF0C;&#x6BD4;&#x542C;&#x529B;&#x9898;&#x7B80;&#x5355;&#x70B9;&#x3002;&#x6700;&#x540E;&#x901A;&#x8FC7;&#x6A21;&#x7248;&#x6216;&#x8005;&#x81EA;&#x5DF1;&#x51C6;&#x5907;&#x7684;&#x903B;&#x8F91;&#x8BCD;&#x628A;&#x91CD;&#x8981;&#x8003;&#x70B9;&#x8BF4;&#x51FA;&#x6765;&#x5C31;&#x53EF;&#x4EE5;&#x3002;</p>
<p>&#x5173;&#x4E8E;&#x53D1;&#x97F3;&#x7EC3;&#x4E60;&#xFF0C;&#x7B14;&#x8005;&#x8FD9;&#x91CC;&#x63A8;&#x8350;&#x4E00;&#x4E2A;&#x514D;&#x8D39;&#x8BFE;&#x7A0B;&#xFF0C;<a href="https://www.bilibili.com/video/av33089221">lisa&#x7F8E;&#x8BED;&#x97F3;&#x6807;&#x53D1;&#x97F3;&#x6559;&#x7A0B;&#x4E2D;&#x6587;&#x5B57;&#x5E55;&#xFF08;4.0&#x9AD8;&#x7EA7;&#x6280;&#x5DE7;&#xFF09;</a></p>
<h3 id="%E5%86%99%E4%BD%9C">&#x5199;&#x4F5C;</h3>
<p>&#x5199;&#x4F5C;&#x6211;&#x4E5F;&#x4E0D;&#x77E5;&#x9053;&#x8981;&#x4E0D;&#x8981;&#x5EFA;&#x8BAE;&#x5927;&#x5BB6;&#x51C6;&#x5907;&#x6A21;&#x7248;&#xFF0C;&#x56E0;&#x4E3A;&#x6211;&#x7B2C;&#x4E00;&#x6B21;&#x7528;&#x4E86;&#x6A21;&#x7248;&#x662F; 21&#xFF0C;&#x7B2C;&#x4E8C;&#x6B21;&#x6CA1;&#x7528;&#x6A21;&#x7248;&#x662F; 24&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x8FD9;&#x4E5F;&#x662F;&#x56E0;&#x4E3A;&#x6211;&#x7EFC;&#x5408;&#x5199;&#x4F5C;&#x542C;&#x529B;&#x6709;&#x4E00;&#x5B9A;&#x4E13;&#x95E8;&#x7684;&#x8BAD;&#x7EC3;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x80FD;&#x662F;&#x7EFC;&#x5408;&#x5199;&#x4F5C;&#x5206;&#x6570;&#x5F80;&#x4E0A;&#x63D0;&#x5347;&#x3002;</p>
<p>&#x6709;&#x6A21;&#x7248;&#xFF0C;&#x5199;&#x8D77;&#x6765;&#x4F1A;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x5B57;&#x6570;&#xFF0C;&#x9AD8;&#x7EA7;&#x8BCD;&#x6C47;&#x4E5F;&#x4F1A;&#x6709;&#x4E00;&#x70B9;&#x3002;</p>
<p>&#x4E0D;&#x7528;&#x6A21;&#x7248;&#xFF0C;&#x4E5F;&#x4E0D;&#x662F;&#x4E0D;&#x884C;&#xFF0C;&#x56E0;&#x4E3A;&#x8003;&#x8BD5;&#x6700;&#x91CD;&#x8981;&#x7684;&#x662F;&#x770B;&#x4F60;&#x7684;&#x5927;&#x903B;&#x8F91;&#x548C;&#x63D0;&#x4F9B;&#x7684;&#x8BBA;&#x70B9;&#x662F;&#x5426;&#x5207;&#x9898;&#xFF0C;&#x662F;&#x5426;&#x7B26;&#x5408;&#x4F60;&#x7684;&#x6001;&#x5EA6;&#x3002;</p>
<p>&#x53E6;&#x4E00;&#x4E2A;&#x5173;&#x4E8E;&#x6253;&#x5B57;&#x6570;&#x5EA6;&#xFF0C;&#x6211;&#x53EF;&#x4EE5;&#x7ED9;&#x5927;&#x5BB6;&#x4E00;&#x4E2A;&#x53C2;&#x8003;&#xFF0C;&#x72EC;&#x7ACB;&#x5199;&#x4F5C; 380 &#x5B57;&#xFF0C;&#x7EFC;&#x5408;&#x5199;&#x4F5C; 220 &#x5B57;&#xFF0C;&#x5206;&#x6570;&#x4E5F;&#x662F;&#x80FD;&#x62FF;&#x5230; 24 &#x4E86;&#x3002;&#x6709;&#x4E9B;&#x5927;&#x795E;&#x5C31; 600 &#x8D77;&#x6B65;&#x7684;&#xFF0C;&#x6700;&#x731B;&#x7684;&#x6709;&#x6253;&#x5230; 700 &#x5B57;&#x7684;&#xFF0C;&#xFF08;&#x8FD9;&#x624B;&#x901F;&#x8981;&#x591A;&#x5FEB;&#xFF1F;&#xFF09;&#x6211;&#x771F;&#x7684;&#x5F88;&#x4F69;&#x670D;&#xFF0C;&#x4ED6;&#x4EEC;&#x62FF; 30 &#x5206;&#x5408;&#x7406;&#x3002;</p>
<p>&#x5173;&#x4E8E;&#x62FC;&#x5199;&#xFF0C;&#x6211;&#x611F;&#x89C9;&#x8FD9;&#x4E2A;&#x5BF9;&#x5206;&#x6570;&#x5F71;&#x54CD;&#x662F;&#x5F88;&#x5927;&#x7684;&#xFF0C;&#x8003;&#x524D;&#x8981;&#x505A;&#x5230;&#x4E0D;&#x8D85;&#x8FC7; 5 &#x4E2A;&#x62FC;&#x5199;&#x9519;&#x8BEF;&#x3002;&#x5E73;&#x65F6;&#x4E0D;&#x8981;&#x7528;&#x5E26;&#x62FC;&#x5199;&#x68C0;&#x67E5;&#x7684;&#x8F6F;&#x4EF6;&#x7EC3;&#x4E60;&#x5199;&#x4F5C;&#xFF01;&#x8BED;&#x6599;&#x540C;&#x53E3;&#x8BED;&#x4E00;&#x8D77;&#x51C6;&#x5907;&#xFF0C;&#x8003;&#x524D;&#x4E24;&#x5468;&#xFF0C;&#x505A;&#x5230;&#x4E24;&#x5929;&#x4E00;&#x5957; TPO&#xFF0C;&#x4FDD;&#x8BC1;&#x81EA;&#x5DF1;&#x5199;&#x4F5C;&#x8BC4;&#x5206;&#x80FD;&#x5728; 4 &#x5206;&#x7A33;&#x5B9A;&#xFF0C;&#x95EE;&#x9898;&#x4E0D;&#x5927;&#x3002;&#x5199;&#x5728;&#x6700;&#x540E;&#xFF0C;&#x9996;&#x8003;&#x7684;&#x540C;&#x5B66;&#x8981;&#x505A;&#x597D;&#x5FC3;&#x7406;&#x5EFA;&#x8BBE;&#x5DE5;&#x4F5C;&#xFF0C;&#x56E0;&#x4E3A;&#x771F;&#x5B9E;&#x8003;&#x8BD5;&#x548C;&#x6A21;&#x8003;&#x662F;&#x4F1A;&#x6709;&#x4E0D;&#x540C;&#x7684;&#x3002;&#x542C;&#x529B;&#x6709;&#x65F6;&#x4F1A;&#x51FA;&#x73B0;&#x82F1;&#x5F0F;&#x82F1;&#x8BED;&#xFF0C;&#x53E3;&#x8BED;&#x7B2C;&#x4E00;&#x9898;&#x4F1A;&#x6709;&#x4E00;&#x79CD;&#x7A81;&#x7136;&#x5F00;&#x59CB;&#x7684;&#x611F;&#x89C9;&#x3002;</p>
<p>&#x6700;&#x540E;&#xFF0C;&#x590D;&#x4E60;&#x5230;&#x4ECA;&#x5E74;&#x5E74;&#x5E95;&#xFF0C;&#x7B14;&#x8005;&#x8EAB;&#x8FB9;&#x5F88;&#x591A;&#x540C;&#x5B66;&#x8BF4;&#x81EA;&#x5DF1;&#x6491;&#x4E0D;&#x4F4F;&#x4E86;&#xFF0C;&#x662F;&#x7684;&#xFF0C;&#x8FD9;&#x786E;&#x5B9E;&#x662F;&#x5907;&#x8003;&#x6258;&#x798F;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x6700;&#x96BE;&#x71AC;&#x7684;&#x4E00;&#x6BB5;&#x65F6;&#x5149;&#xFF0C;&#x5C31;&#x50CF;&#x5728;&#x4E00;&#x6761;&#xFF0C;&#x72ED;&#x7A84;&#x7684;&#x96A7;&#x9053;&#x4E2D;&#xFF0C;&#x524D;&#x9762;&#x53EA;&#x6709;&#x4E00;&#x4E1D;&#x5149;&#x4EAE;&#x3002;&#x800C;&#x540E;&#x9762;&#xFF0C;&#x6F06;&#x9ED1;&#x4E00;&#x7247;&#xFF0C;&#x65E9;&#x5DF2;&#x6CA1;&#x6709;&#x4E86;&#x9000;&#x8DEF;&#x3002;&#x653E;&#x5F03;&#x662F;&#x4E0D;&#x53EF;&#x80FD;&#x4E86;&#x3002;&#x4F46;&#x60F3;&#x62FC;&#x5374;&#x53C8;&#x89C9;&#x5F97;&#x5C31;&#x90A3;&#x70B9;&#x5149;&#x4EAE;&#xFF0C;&#x503C;&#x5F97;&#x4E48;&#xFF1F;&#x4F60;&#x4F1A;&#x89C9;&#x5F97;&#x522B;&#x4EBA;&#x90FD;&#x662F;&#x5728;&#x9633;&#x5149;&#x4E0B;&#x5954;&#x8DD1;&#xFF0C;&#x5341;&#x8DB3;&#x7684;&#x80DC;&#x7B97;&#xFF0C;&#x4F60;&#x7684;&#x62FC;&#x640F;&#xFF0C;&#x90FD;&#x53D8;&#x5F97;&#x5351;&#x5FAE;&#xFF0C;&#x4E8E;&#x662F;&#x4F60;&#x5F00;&#x59CB;&#x72B9;&#x8C6B;&#xFF0C;&#x4F60;&#x6BCF;&#x5929;&#x4E5F;&#x5728;&#x770B;&#x4E66;&#xFF0C;&#x4F46;&#x662F;&#x5374;&#x6CA1;&#x6709;&#x4E86;&#x5BF9;&#x4E8E;&#x7F8E;&#x597D;&#x672A;&#x6765;&#x7684;&#x4E00;&#x4E1D;&#x61A7;&#x61AC;&#xFF0C;&#x4F60;&#x53EA;&#x662F;&#x5728;&#x60F3;&#x8FD9;&#x6BB5;&#x8DEF;&#xFF0C;&#x65E9;&#x70B9;&#x7ED3;&#x675F;&#x5427;&#x3002;&#x201C;&#x653E;&#x6211;&#x51FA;&#x53BB;&#x201D;&#xFF0C;&#x662F;&#x4F60;&#x552F;&#x4E00;&#x7684;&#x671F;&#x5F85;&#x3002;&#x4F46;&#x662F;&#x4F60;&#x5374;&#x5FD8;&#x4E86;&#xFF0C;&#x8FD9;&#x4E16;&#x754C;&#x4E0A;&#x6CA1;&#x6709;&#x4EBA;&#x662F;&#x5BB9;&#x6613;&#x7684;&#x3002;&#x54EA;&#x6709;&#x4EC0;&#x4E48;&#x9633;&#x5149;&#x4E0B;&#x7684;&#x5954;&#x8DD1;&#xFF0C;&#x90FD;&#x662F;&#x5728;&#x8FD9;&#x6761;&#x96A7;&#x9053;&#x4E2D;&#xFF0C;&#x8270;&#x96BE;&#x524D;&#x884C;&#x3002;&#x672A;&#x6765;&#x6709;&#x4E00;&#x5929;&#xFF0C;&#x90A3;&#x4E9B;&#x6240;&#x8C13;&#x6210;&#x529F;&#x7684;&#x4EBA;&#xFF0C;&#x56DE;&#x5FC6;&#x8D70;&#x8FC7;&#x7684;&#x8DEF;&#x65F6;&#xFF0C;&#x4ED6;&#x4EEC;&#x4E00;&#x5B9A;&#x4F1A;&#x63D0;&#x5230;&#xFF0C;&#x5F53;&#x5E74;&#x4ED6;&#x4EEC;&#x4E5F;&#x5728;&#x4E00;&#x6761;&#x96A7;&#x9053;&#x91CC;&#xFF0C;&#x8270;&#x96BE;&#x5730;&#x62FC;&#x640F;&#x3002;&#x4F60;&#x624D;&#x7A81;&#x7136;&#x60F3;&#x8D77;&#xFF0C;&#x8FD9;&#x4E2A;&#x5730;&#x65B9;&#x6211;&#x4E5F;&#x53BB;&#x8FC7;&#x554A;&#xFF0C;&#x72ED;&#x8DEF;&#x76F8;&#x9022;&#x52C7;&#x8005;&#x80DC;&#xFF0C;&#x4E0D;&#x8981;&#x5984;&#x81EA;&#x83F2;&#x8584;&#xFF0C;&#x672A;&#x6765;&#x6210;&#x529F;&#x6295;&#x5C04;&#x5230;&#x5F53;&#x4E0B;&#xFF0C;&#x53EA;&#x4F1A;&#x662F;&#x4E00;&#x4E1D;&#x5149;&#x4EAE;&#xFF0C;&#x6BCF;&#x4E2A;&#x4EBA;&#x90FD;&#x4E00;&#x6837;&#xFF0C;&#x6CA1;&#x6709;&#x9633;&#x5149;&#x660E;&#x5A9A;&#xFF0C;&#x53EA;&#x6709;&#x5FAE;&#x5149;&#x4E00;&#x70B9;&#xFF0C;&#x4F46;&#x4F60;&#x7684;&#x52AA;&#x529B;&#xFF0C;&#x672C;&#x5C31;&#x5149;&#x8292;&#x4E07;&#x4E08;&#xFF0C;&#x4F60;&#x5FD8;&#x8BB0;&#x4E86;&#xFF0C;&#x8FD9;&#x4E00;&#x8DEF;&#x8D70;&#x6765;&#xFF0C;&#x4E0D;&#x662F;&#x672A;&#x6765;&#x7ED9;&#x4E86;&#x4F60;&#x5E0C;&#x671B;&#xFF0C;&#x800C;&#x662F;&#x4F60;&#x4E00;&#x76F4;&#x5728;&#x7ED9;&#x81EA;&#x5DF1;&#x529B;&#x91CF;&#xFF0C;&#x4F60;&#x8981;&#x53BB;&#x62E5;&#x62B1;&#x7684;&#xFF0C;&#x4E0D;&#x662F;&#x4EC0;&#x4E48;&#x72D7;&#x5C41;&#x6210;&#x529F;&#xFF0C;&#x6210;&#x529F;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x8D31;&#x4EBA;&#xFF0C;&#x4ED6;&#x53EA;&#x4F1A;&#x4F9D;&#x9644;&#x4E8E;&#x5F3A;&#x5927;&#x7684;&#x4EBA;&#xFF0C;&#x4F60;&#x8981;&#x53BB;&#x9047;&#x89C1;&#x7684;&#x662F;&#x90A3;&#x4E2A;&#x66F4;&#x597D;&#x7684;&#x81EA;&#x5DF1;&#xFF0C;&#x90A3;&#x4E2A;&#x7EDD;&#x4E0D;&#x670D;&#x8F93;&#xFF0C;&#x51B3;&#x4E0D;&#x653E;&#x5F03;&#x7684;&#x66F4;&#x5F3A;&#x5927;&#x7684;&#x81EA;&#x5DF1;&#x3002;&#x5176;&#x5B9E;&#xFF0C;&#x4F60;&#x770B;&#x5230;&#x7684;&#x90A3;&#x4E00;&#x70B9;&#x5149;&#x4EAE;&#xFF0C;&#x4E5F;&#x662F;&#x90A3;&#x4E2A;&#x81EA;&#x5DF1;&#x7ED9;&#x4F60;&#x7684;&#xFF0C;&#x4E0D;&#x8981;&#x8BA9;&#x5728;&#x96A7;&#x9053;&#x5C3D;&#x5934;&#x7B49;&#x7740;&#x4F60;&#x7684;&#x90A3;&#x4E2A;&#x81EA;&#x5DF1;&#x5931;&#x671B;&#xFF0C;&#x56E0;&#x4E3A;&#x4F60;&#x8981;&#x662F;&#x653E;&#x5F03;&#x4E86;&#xFF0C;&#x5979;&#x5C31;&#x7B49;&#x4E0D;&#x5230;&#x4F60;&#x4E86;&#xFF0C;&#x800C;&#x6210;&#x529F;&#x8FD9;&#x4E2A;&#x5C0F;&#x4EBA;&#xFF0C;&#x4E5F;&#x4F1A;&#x79BB;&#x5979;&#x800C;&#x53BB;&#xFF0C;&#x62FC;&#x640F;&#x5427;&#xFF01;&#x71C3;&#x70E7;&#x5427;&#xFF01;&#x53BB;&#x770B;&#x89C1;&#xFF0C;&#x53BB;&#x9047;&#x89C1;&#xFF0C;&#x53BB;&#x62E5;&#x62B1;&#xFF0C;&#x7136;&#x540E;&#x6709;&#x4E00;&#x5929;&#x4F60;&#x5E26;&#x7740;&#x6210;&#x529F;&#x4E00;&#x8D77;&#x8BB2;&#x8FF0;&#xFF0C;&#x4F60;&#x5C31;&#x662F;&#x4ECE;&#x96A7;&#x9053;&#x91CC;&#x5BFB;&#x7740;&#x4E00;&#x675F;&#x5149;&#xFF0C;&#x627E;&#x5230;&#x5979;&#x7684;&#x3002;&#x7136;&#x540E;&#x7EC8;&#x6709;&#x4E00;&#x5929;&#xFF0C;&#x4F60;&#x53EF;&#x4EE5;&#x7B11;&#x7740;&#x53BB;&#x8BB2;&#x8FF0;&#x90A3;&#x4E9B;&#x66FE;&#x7ECF;&#x8BA9;&#x4F60;&#x54ED;&#x7684;&#x77AC;&#x95F4;&#x3002;&#x1F4AA;</p>
<h2 id="%E5%85%B3%E4%BA%8E%E6%97%85%E8%A1%8C">&#x5173;&#x4E8E;&#x65C5;&#x884C;</h2>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_1_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x76F8;&#x6BD4; 2018 &#x5E74;&#x53BB;&#x4E86; 5 &#x4E2A;&#x56FD;&#x5BB6;&#x6765;&#x8BF4;&#xFF0C;&#x4ECA;&#x5E74;&#x5927;&#x5E45;&#x51CF;&#x5C11;&#x4E86;&#x3002;&#x5229;&#x7528;&#x4E94;&#x4E00;&#x5047;&#x671F;&#x53BB;&#x4E86;&#x8FEA;&#x62DC;&#xFF0C;&#x672C;&#x6765;&#x5341;&#x4E00;&#x6253;&#x7B97;&#x53BB;&#x7F8E;&#x56FD;&#x5E38;&#x9752;&#x85E4;&#x5B66;&#x6821;&#x770B;&#x770B;&#xFF0C;&#x4F46;&#x662F;&#x7531;&#x4E8E;&#x7B14;&#x8005;&#x6258;&#x798F;&#x5907;&#x8003;&#x8FDB;&#x5EA6;&#x6162;&#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x5341;&#x4E00;&#x6CA1;&#x6709;&#x51FA;&#x53BB;&#xFF0C;&#x65C5;&#x884C;&#x7684;&#x65F6;&#x95F4;&#x90FD;&#x7528;&#x6765;&#x4E0A;&#x590D;&#x4E60;&#x6258;&#x798F;&#x8003;&#x8BD5;&#x4E86;&#x3002;&#x8FD9;&#x662F; 2018 &#x5E74;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x91CC;&#x9762;&#x5199;&#x7684;&#x65B0;&#x5E74;&#x613F;&#x671B;&#xFF0C;&#x73B0;&#x5728;&#x770B;&#x770B;&#xFF0C;&#x53EA;&#x5B8C;&#x6210;&#x4E86;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x4EE5;&#x540E;&#x8FD8;&#x662F;&#x5C11;&#x7ACB; flag&#xFF0C;&#x8BA1;&#x5212;&#x8D76;&#x4E0D;&#x4E0A;&#x53D8;&#x5316;&#xFF0C;&#x8138;&#x75BC;&#x3002;</p>
<blockquote>
<p>2019 &#x5E74;&#x7684;&#x68A6;&#x60F3;&#x662F;&#x53BB;&#x8FEA;&#x62DC;&#x5B8C;&#x6210; 15000 &#x7C73;&#x8DF3;&#x4F1E;&#xFF0C;&#x53BB;&#x6C99;&#x6F20;&#x5750;&#x9A86;&#x9A7C;&#x3002;2019 &#x5E74;&#x65C5;&#x884C;&#x8BA1;&#x5212;&#x4E3B;&#x8981;&#x5C31;&#x662F;&#x8FEA;&#x62DC;&#xFF0C;&#x6B27;&#x6D32;&#x548C;&#x7F8E;&#x56FD;&#xFF0C;&#x53BB;&#x5FB7;&#x6CD5;&#x610F;&#x745E;&#xFF0C;&#x770B;&#x770B;&#x6B27;&#x6D32;&#x5217;&#x5F3A;&#x4EEC;&#x5982;&#x4ECA;&#x8FC7;&#x7684;&#x8FD8;&#x597D;&#x4E48;&#xFF1B;&#x53BB;&#x7F8E;&#x56FD;&#x4F53;&#x9A8C;&#x4F53;&#x9A8C;&#x5E38;&#x9752;&#x85E4;&#x5B66;&#x6821;&#x6D53;&#x539A;&#x7684;&#x5B66;&#x672F;&#x6C1B;&#x56F4;&#xFF1B;&#x53BB;&#x8FEA;&#x62DC;&#x770B;&#x770B;&#x767D;&#x888D;&#x4EEC;&#x6709;&#x591A;&#x4E48;&#x5962;&#x4F88;&#x7684;&#x751F;&#x6D3B;&#xFF0C;&#x6361;&#x4E00;&#x6361;&#x4E22;&#x5728;&#x9A6C;&#x8DEF;&#x8FB9;&#x7684;&#x201C;&#x5783;&#x573E;&#x201D;&#xFF0C;&#x5170;&#x535A;&#x57FA;&#x5C3C;&#xFF0C;&#x4F4F;&#x4E00;&#x4F4F;&#x4E03;&#x661F;&#x7EA7;&#x9152;&#x5E97;&#x3002;</p>
</blockquote>
<p>&#x4E00;&#x5207;&#x6E90;&#x4E8E;&#x5E74;&#x521D;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x6211;&#x5728;&#x4E16;&#x754C;&#x5730;&#x56FE;&#x4E0A;&#x9009;&#x62E9;&#x4E86; 9 &#x5904;&#x6BD4;&#x8F83;&#x6D6A;&#x6F2B;&#x7684;&#x5730;&#x65B9;&#x4F5C;&#x4E3A;&#x4ECA;&#x5E74;&#x5973;&#x53CB; 18 &#x5C81;&#x7684;&#x751F;&#x65E5;&#x793C;&#x7269;&#xFF0C;&#x6253;&#x7B97; 2-3 &#x5E74;&#x5185;&#x5B8C;&#x6210;&#x8FD9; 9 &#x5904;&#x7684;&#x6253;&#x5361;&#x3002;&#x6211;&#x662F;&#x4E00;&#x4E2A;&#x4E0D;&#x61C2;&#x6D6A;&#x6F2B;&#x7684;&#x7A77;&#x4EBA;&#x5BB6;&#x7684;&#x5B69;&#x5B50;&#xFF0C;&#x9001;&#x4E0D;&#x8D77;&#x623F;&#x5B50;&#xFF0C;&#x9001;&#x4E0D;&#x8D77;&#x8F66;&#xFF0C;&#x53EA;&#x80FD;&#x9001;&#x56DE;&#x5FC6;&#x4E86;&#x3002;&#x65E2;&#x7136;&#x4F5C;&#x4E3A; 18 &#x5C81;&#x751F;&#x65E5;&#x7684;&#x793C;&#x7269;&#xFF0C;&#x90A3;&#x4E3B;&#x9898;&#x5C31;&#x53EB; &#x201C;&#x52C7;&#x6562;&#x8005;&#x7684;&#x6E38;&#x620F;&#x201D;&#x5427;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_2_.png" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x6700;&#x7EC8;&#x5B9A;&#x4E0B;&#x6765;&#x662F;&#x53BB;&#x8FEA;&#x62DC;&#xFF0C;&#x5B8C;&#x6210;&#x68D5;&#x6988;&#x5C9B; 15000 &#x7C73;&#x8DF3;&#x4F1E;&#x548C;&#x6C99;&#x8FE6;&#x6C99;&#x6F20;&#x6DF1;&#x5904;&#x51B2;&#x6C99;&#x3002;&#x5F3A;&#x70C8;&#x63A8;&#x8350;&#x8DF3;&#x4F1E;&#x9879;&#x76EE;&#xFF0C;&#x771F;&#x7684;&#x592A;&#x597D;&#x73A9;&#x4E86;&#x3002;&#x7B14;&#x8005;&#x8DF3;&#x4F1E;&#x7684;&#x957F;&#x89C6;&#x9891;&#x53D1;&#x5728; @ halfrost &#x6296;&#x97F3;&#x53F7;&#x4E0A;&#x4E86;&#xFF0C;&#x6B22;&#x8FCE;&#x8BFB;&#x8005;&#x53BB;&#x89C2;&#x770B;&#x3002;&#x5173;&#x4E8E;&#x8FEA;&#x62DC;&#x7684;&#x9152;&#x5E97;&#xFF0C;&#x5F3A;&#x70C8;&#x63A8;&#x8350;&#x5168;&#x4E16;&#x754C;&#x552F;&#x4E00;&#x7684;&#x4E03;&#x661F;&#x7EA7;&#x9152;&#x5E97;&#x5E06;&#x8239;&#x9152;&#x5E97; Burj Al Arab&#xFF0C;&#x548C;&#x516D;&#x661F;&#x7EA7;&#x9152;&#x5E97;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF; Atlantis The Palm&#xFF0C;&#x5F53;&#x7136;&#x8FD8;&#x63A8;&#x8350;&#x5168;&#x4E16;&#x754C;&#x552F;&#x4E00;&#x7684;&#x516B;&#x661F;&#x7EA7;&#x9152;&#x5E97;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x4E0D;&#x5728;&#x8FEA;&#x62DC;&#xFF0C;&#x5728;&#x963F;&#x5E03;&#x624E;&#x6BD4;&#xFF0C;&#x963F;&#x5E03;&#x624E;&#x6BD4;&#x7687;&#x5BAB;&#x9152;&#x5E97;(Emirates Palace)&#x3002;&#x4E0B;&#x9762; 2 &#x5F20;&#x56FE;&#x5206;&#x522B;&#x662F;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x548C;&#x5E06;&#x8239;&#x9152;&#x5E97;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_3_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_4_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x53EF;&#x80FD;&#x6709;&#x8BFB;&#x8005;&#x4F1A;&#x95EE;&#x4E0A;&#x9762;&#x4E24;&#x4E2A;&#x56FE;&#x7684;&#x62CD;&#x6444;&#x89D2;&#x5EA6;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD9;&#x4E48;&#x7279;&#x6B8A;&#x3002;&#x7B14;&#x8005;&#x662F;&#x5728;&#x76F4;&#x5347;&#x673A;&#x4E0A;&#x62CD;&#x7684;&#x3002;&#x5728;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x9152;&#x5E97;&#x65C1;&#x8FB9;&#x6709;&#x4E00;&#x4E2A;&#x76F4;&#x5347;&#x673A;&#x573A;&#xFF0C;&#x53EF;&#x4EE5;&#x4E70;&#x4E00;&#x5F20;&#x7968;&#xFF0C;&#x7B14;&#x8005;&#x4E70;&#x7684;&#x662F; 25 &#x5206;&#x949F;&#x7684;&#x7968;&#xFF0C;&#x76F4;&#x5347;&#x673A;&#x4F1A;&#x5E26;&#x4F60;&#x98DE;&#x5230;&#x5E02;&#x4E2D;&#x5FC3;&#x8F6C;&#x4E00;&#x5708;&#x518D;&#x98DE;&#x56DE;&#x6765;&#x3002;&#x6CBF;&#x9014;&#x4F1A;&#x7ECF;&#x8FC7;&#x5E06;&#x8239;&#x9152;&#x5E97;&#xFF0C;&#x9EC4;&#x91D1;&#x76F8;&#x6846;&#xFF0C;&#x4E16;&#x754C;&#x5C9B;&#xFF0C;&#x54C8;&#x5229;&#x6CD5;&#x5854;&#xFF0C;&#x6240;&#x6709;&#x7ECF;&#x5178;&#x666F;&#x89C2;&#x90FD;&#x4F1A;&#x8BA9;&#x4F60;&#x4ECE;&#x4E0A;&#x7A7A;&#x770B;&#x4E00;&#x904D;&#x3002;&#x6700;&#x540E;&#x56F4;&#x7ED5;&#x68D5;&#x6988;&#x5C9B;&#x534A;&#x5708;&#xFF0C;&#x56DE;&#x5230;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x65C1;&#x8FB9;&#x7684;&#x505C;&#x673A;&#x576A;&#x3002;</p>
<p>&#x8FEA;&#x62DC;&#x7684;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x9152;&#x5E97;&#x53EF;&#x4EE5;&#x53BB;&#x73A9;&#x5B83;&#x7684;&#x6C34;&#x4E0A;&#x516C;&#x56ED;&#x3002;&#x662F;&#x514D;&#x8D39;&#x7684;&#x3002;&#x5B83;&#x7684;&#x6C34;&#x4E0A;&#x516C;&#x56ED;&#x771F;&#x7684;&#x975E;&#x5E38;&#x597D;&#x73A9;&#x3002;&#x4F4F;&#x5728;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x7684;&#x8BDD;&#xFF0C;&#x65C1;&#x8FB9;&#x4E5F;&#x6CA1;&#x6709;&#x4EC0;&#x4E48;&#x5C0F;&#x5E97;&#x53EF;&#x4EE5;&#x5403;&#x996D;&#xFF0C;&#x5403;&#x559D;&#x90FD;&#x5728;&#x9152;&#x5E97;&#x91CC;&#x9762;&#x4E86;&#x3002;&#xFF08;&#x4F4F;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x7684;&#x4EBA;&#x8FD8;&#x8003;&#x8651;&#x6D88;&#x8D39;&#x4E48;&#xFF1F;&#x82B1;&#x94B1;&#x5C31;&#x662F;&#x5FEB;&#x4E50;&#xFF09;&#x4E9A;&#x7279;&#x5170;&#x8482;&#x65AF;&#x91CC;&#x9762;&#x5F88;&#x591A;&#x81EA;&#x52A9;&#x9910;&#x5385;&#xFF0C;&#x81F3;&#x4E8E;&#x4EF7;&#x4F4D;&#x561B;&#xFF0C;&#x6D88;&#x8D39;&#x4E0A;&#x4E0D;&#x5C01;&#x9876;&#x3002;&#x5E26;&#x591A;&#x5C11;&#x94B1;&#x90FD;&#x80FD;&#x5728;&#x8FD9;&#x91CC;&#x6325;&#x970D;&#x5B8C;&#x3002;&#x7B14;&#x8005;&#x975E;&#x5E38;&#x201C;&#x7701;&#x5403;&#x4FED;&#x7528;&#x201D;&#x7684;&#x5728;&#x8FD9;&#x91CC;&#x4F4F;&#x4E86;&#x51E0;&#x5929;&#x3002;</p>
<p>&#x5E06;&#x8239;&#x9152;&#x5E97;&#x5C31;&#x4E0D;&#x7528;&#x8BF4;&#x4E86;&#x3002;&#x7EAF;&#x91D1;&#x7684;&#x9A6C;&#x6876;&#xFF0C;&#x6BCF;&#x665A; 13-20W &#x7684;&#x9AD8;&#x7EA7;&#x5957;&#x623F;&#xFF0C;&#x7231;&#x9A6C;&#x4ED5;&#x9999;&#x7682;&#x3002;&#x4E00;&#x5207;&#x90FD;&#x662F;&#x5962;&#x534E;&#x7684;&#x9876;&#x914D;&#x3002;&#x51FA;&#x95E8;&#x53EF;&#x4EE5;&#x9884;&#x7EA6;&#x52B3;&#x65AF;&#x83B1;&#x65AF;&#x5E7B;&#x5F71;&#x3002;&#x5E06;&#x8239;&#x9152;&#x5E97;&#x7684;&#x623F;&#x95F4;&#x91CC;&#x9762;&#x7684;&#x79C1;&#x4EBA;&#x7BA1;&#x5BB6;&#x670D;&#x52A1;&#x5468;&#x5230;&#xFF0C;&#x53EA;&#x8981;&#x4F60;&#x6709;&#x94B1;&#xFF0C;&#x4E0D;&#x592A;&#x8FC7;&#x5206;&#x7684;&#x8981;&#x6C42;&#x90FD;&#x80FD;&#x5C3D;&#x91CF;&#x6EE1;&#x8DB3;&#x3002;&#x6BD4;&#x5982;&#x4F60;&#x60F3;&#x628A; F1 &#x8D5B;&#x8F66;&#x8FD0;&#x5230;&#x5E06;&#x8239;&#x9152;&#x5E97;&#x7684;&#x9876;&#x697C;&#x76F4;&#x5347;&#x673A;&#x505C;&#x673A;&#x576A;&#xFF0C;&#x73A9;&#x6F02;&#x79FB;&#xFF0C;&#x90FD;&#x662F;&#x53EF;&#x4EE5;&#x7684;&#x3002;&#xFF08;&#x5E76;&#x975E;&#x73A9;&#x7B11;&#xFF0C;&#x662F;&#x771F;&#x7684;&#x53EF;&#x4EE5;&#xFF09;</p>
<p>&#x6BD4;&#x5E06;&#x8239;&#x9152;&#x5E97;&#x8FD8;&#x8981;&#x518D;&#x9AD8;&#x4E00;&#x661F;&#x7EA7;&#x7684;&#x7687;&#x5BAB;&#x9152;&#x5E97;&#xFF0C;&#x7B14;&#x8005;&#x6CA1;&#x6709;&#x4F53;&#x9A8C;&#xFF0C;&#x53EA;&#x53BB;&#x5403;&#x4E86;&#x81EA;&#x52A9;&#x9910;&#x3002;&#x7687;&#x5BAB;&#x9152;&#x5E97;&#x5728;&#x963F;&#x5E03;&#x624E;&#x6BD4;&#xFF0C;&#x5B83;&#x7684;&#x5185;&#x90E8;&#x4E0D;&#x4E00;&#x5B9A;&#x6709;&#x5E06;&#x8239;&#x9152;&#x5E97;&#x5962;&#x534E;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x7684;&#x793E;&#x4F1A;&#x5730;&#x4F4D;&#x6BD4;&#x5E06;&#x8239;&#x9152;&#x5E97;&#x9AD8;&#x3002;&#x5B83;&#x672C;&#x6765;&#x662F;&#x4E13;&#x95E8;&#x62DB;&#x5F85;&#x5404;&#x56FD;&#x9876;&#x7EA7;&#x9886;&#x5BFC;&#x4EBA;&#x7684;&#x3002;&#x5F53;&#x9886;&#x5BFC;&#x4EBA;&#x6765;&#x8BBF;&#x95EE;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x662F;&#x4E0D;&#x5F00;&#x653E;&#x7ED9;&#x666E;&#x901A;&#x6E38;&#x5BA2;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F60;&#x4E0D;&#x4F4F;&#x5728;&#x7687;&#x5BAB;&#x9152;&#x5E97;&#xFF0C;&#x8FD8;&#x662F;&#x53EF;&#x4EE5;&#x5355;&#x72EC;&#x7EA6;&#x8FD9;&#x91CC;&#x7684;&#x81EA;&#x52A9;&#x9910;&#x7684;&#x3002;&#x81EA;&#x52A9;&#x9910;&#x5168;&#x90E8;&#x90FD;&#x662F;&#x7C73;&#x5176;&#x6797;&#x661F;&#x7EA7;&#x53A8;&#x5E08;&#x7EAF;&#x624B;&#x5DE5;&#x5236;&#x4F5C;&#x3002;&#x6240;&#x4EE5;&#x4E2D;&#x5348;&#x5403;&#x4E00;&#x4E2A;&#x81EA;&#x52A9;&#x9910;&#xFF0C;&#x5403; 2-3 &#x5C0F;&#x65F6;&#x662F;&#x5F88;&#x6B63;&#x5E38;&#x7684;&#x3002;</p>
<p>&#x8FEA;&#x62DC;&#x5176;&#x4ED6;&#x7684;&#x6253;&#x5361;&#x5730;&#x6709;&#xFF0C;&#x6C11;&#x4FD7;&#x6751;&#xFF0C;&#x8FD0;&#x6CB3;&#xFF0C;&#x535A;&#x7269;&#x9986;&#xFF0C;&#x9EC4;&#x91D1;&#x76F8;&#x6846;&#x7B49;&#x7B49;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_5_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x662F;&#x8FEA;&#x62DC;&#x7684;&#x6C11;&#x4FD7;&#x6751;&#xFF0C;&#x662F;&#x8FEA;&#x62DC;&#x6700;&#x8001;&#x7684;&#x5F53;&#x5730;&#x4EBA;&#x4F4F;&#x7684;&#x5730;&#x65B9;&#x3002;&#x623F;&#x95F4;&#x4E0A;&#x9762;&#x90A3;&#x4E9B;&#x6A2A;&#x7740;&#x7684;&#x67F1;&#x5B50;&#x548C;&#x98CE;&#x6D1E;&#xFF0C;&#x662F;&#x7528;&#x6765;&#x8C03;&#x8282;&#x623F;&#x95F4;&#x6E29;&#x5EA6;&#x7684;&#xFF0C;&#x662F;&#x4E00;&#x4E2A;&#x5929;&#x7136;&#x7A7A;&#x8C03;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_6_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x662F;&#x9EC4;&#x91D1;&#x76F8;&#x6846;&#xFF0C;&#x4E2A;&#x4EBA;&#x89C9;&#x5F97;&#x8FD8;&#x662F;&#x5728;&#x76F4;&#x5347;&#x673A;&#x4E0A;&#x770B;&#x8FD9;&#x4E2A;&#x76F8;&#x6846;&#x66F4;&#x6709;&#x611F;&#x89C9;&#x3002;&#x7AD9;&#x5728;&#x5B83;&#x7684;&#x9762;&#x524D;&#xFF0C;&#x4F60;&#x80FD;&#x770B;&#x5230;&#x76F8;&#x6846;&#x91CC;&#x9762;&#x7684;&#x666F;&#x8272;&#x5C31;&#x53EA;&#x6709;&#x5929;&#x7A7A;&#x4E86;&#x3002;</p>
<p>&#x8FEA;&#x62DC;&#x7684;&#x6731;&#x7F8E;&#x62C9;&#x6E05;&#x771F;&#x5BFA;&#xFF08;Jumeirah Mosque&#xFF09;&#x662F;&#x4E0D;&#x5F97;&#x4E0D;&#x63D0;&#x7684;&#x6253;&#x5361;&#x5730;&#x3002;&#x7B14;&#x8005;&#x662F;&#x4E94;&#x4E00;&#x53BB;&#x73A9;&#x7684;&#xFF0C;&#x6B63;&#x597D;&#x9047;&#x5230;&#x658B;&#x6212;&#x671F;&#x3002;&#x53BB;&#x6E05;&#x771F;&#x5BFA;&#x4E00;&#x5B9A;&#x8981;&#x7B26;&#x5408;&#x5B97;&#x6559;&#x7684;&#x670D;&#x88C5;&#x8981;&#x6C42;&#xFF0C;&#x7537;&#x5973;&#x670D;&#x88C5;&#x90FD;&#x6709;&#x8981;&#x6C42;&#x3002;&#x7537;&#x58EB;&#x548C;&#x5973;&#x58EB;&#x9700;&#x7A7F;&#x7740;&#x4FDD;&#x5B88;&#x3001;&#x5BBD;&#x677E;&#x3001;&#x4E0D;&#x900F;&#x660E;&#x7684;&#x8863;&#x670D;&#xFF0C;&#x6700;&#x597D;&#x9009;&#x62E9;&#x957F;&#x8896; (&#x8155;&#x957F;)&#xFF0C;&#x957F;&#x88D9;&#x5B50; (&#x811A;&#x8E1D;&#x957F;&#x5EA6;) &#x6216;&#x88E4;&#x5B50;&#xFF0C;&#x8FDB;&#x5165;&#x6E05;&#x771F;&#x5BFA;&#x524D;&#xFF0C;&#x6709;&#x4E00;&#x4E2A;&#x5546;&#x5E97;&#x53EF;&#x4EE5;&#x79DF;&#x8FD9;&#x4E9B;&#x8863;&#x670D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_7_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_8_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x6E05;&#x771F;&#x5BFA;&#x5EFA;&#x7B51;&#x7FA4;&#x7684;&#x5185;&#x5916;&#x5899;&#x58C1;&#x7528;&#x6765;&#x81EA;&#x5E0C;&#x814A;&#x548C;&#x9A6C;&#x5176;&#x987F;&#x7684;&#x6C49;&#x767D;&#x7389;&#x5305;&#x88F9;&#x800C;&#x6210;&#xFF0C;&#x5185;&#x90E8;&#x88C5;&#x9970;&#x91D1;&#x78A7;&#x8F89;&#x714C;&#xFF0C;&#x9519;&#x7EFC;&#x590D;&#x6742;&#x7684;&#x96D5;&#x523B;&#x548C;&#x58C1;&#x753B;&#x4EE4;&#x4EBA;&#x8D5E;&#x53F9;&#xFF01;&#x96EA;&#x767D;&#x7684;&#x5927;&#x7406;&#x77F3;&#x5706;&#x9876;&#x53CA;&#x5899;&#x9762;&#xFF0C;&#x5728;&#x9633;&#x5149;&#x4E0B;&#x9690;&#x9690;&#x53D1;&#x4EAE;&#xFF0C;&#x6E05;&#x771F;&#x5BFA;&#x524D;&#x6E5B;&#x84DD;&#x7684;&#x4E00;&#x6C60;&#x6E05;&#x6C34;&#xFF0C;&#x4E0D;&#x7981;&#x88AB;&#x8FD9;&#x7247;&#x5723;&#x6D01;&#x4E4B;&#x5730;&#x6240;&#x5438;&#x5F15;&#x3002;&#x9EC4;&#x91D1;&#x67F1;&#x5934;&#xFF0C;&#x7B80;&#x6D01;&#x7684;&#x67F1;&#x5B50;&#x5E95;&#x5EA7;&#xFF0C;&#x5927;&#x6709;&#x5F69;&#x8272;&#x56FE;&#x817E;&#x82B1;&#x7EB9;&#x7684;&#x67F1;&#x8EAB;&#xFF0C;&#x52A0;&#x4E0A;&#x5177;&#x6709;&#x6807;&#x5FD7;&#x6027;&#x7684;&#x62F1;&#x5F62;&#x6D1E;&#x53E3;&#xFF0C;&#x6574;&#x4E2A;&#x8272;&#x8C03;&#x7684;&#x628A;&#x63E1;&#xFF0C;&#x628A;&#x963F;&#x62C9;&#x4F2F;&#x6587;&#x5316;&#x6DCB;&#x6F13;&#x5C3D;&#x81F4;&#x6F14;&#x7ECE;&#x5230;&#x5EFA;&#x7B51;&#x4E4B;&#x4E2D;&#xFF0C;&#x6574;&#x4E2A;&#x6E05;&#x771F;&#x5BFA;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x5962;&#x534E;&#x827A;&#x672F;&#x54C1;&#xFF01;&#x5728;&#x8FD9;&#x91CC;&#xFF0C;&#x4F60;&#x8FD8;&#x53EF;&#x4EE5;&#x4EB2;&#x773C;&#x76EE;&#x7779;&#x4E16;&#x754C;&#x4E0A;&#x6700;&#x5927;&#x7684;&#x5927;&#x7406;&#x77F3;&#x9A6C;&#x8D5B;&#x514B;&#x88C5;&#x9970;&#x548C;&#x7EAF;&#x624B;&#x5DE5;&#x5730;&#x6BEF;&#xFF0C;&#x7ED9;&#x4F60;&#x524D;&#x6240;&#x672A;&#x6709;&#x7684;&#x89C6;&#x89C9;&#x9707;&#x64BC;&#x3002;&#x4E0A;&#x4E24;&#x5F20;&#x56FE;&#x53EA;&#x6709;&#x4F60;&#x4EB2;&#x4E34;&#x73B0;&#x573A;&#xFF0C;&#x624D;&#x80FD;&#x88AB;&#x5F7B;&#x5E95;&#x7684;&#x9707;&#x64BC;&#x5230;&#x3002;&#x76F8;&#x5173;&#x7684;&#x89C6;&#x9891;&#x4E5F;&#x8BB0;&#x5F55;&#x5728;&#x7B14;&#x8005;&#x7684;&#x6296;&#x97F3;&#x91CC;&#x9762;&#x4E86;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_10_0.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x662F;&#x5728;&#x76F4;&#x5347;&#x673A;&#x4E0A;&#x62CD;&#x7684;&#x68D5;&#x6988;&#x5C9B;&#xFF0C;&#x8FD9;&#x4E2A;&#x5C31;&#x4E0D;&#x7528;&#x8BF4;&#x4E86;&#xFF0C;&#x4E16;&#x4EBA;&#x90FD;&#x77E5;&#x9053;&#x3002;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x6CA1;&#x6709;&#x5B8C;&#x5DE5;&#x7684;&#x4E16;&#x754C;&#x5C9B;&#xFF0C;&#x662F;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x4EBA;&#x9020;&#x5C9B;&#x3002;&#x7B14;&#x8005;&#x5728;&#x76F4;&#x5347;&#x673A;&#x4E0A;&#x6CA1;&#x6709;&#x62CD;&#x5230;&#xFF0C;&#x5F53;&#x98DE;&#x884C;&#x5458;&#x89E3;&#x8BF4;&#x5230;&#x4E16;&#x754C;&#x5C9B;&#x4E86;&#xFF0C;&#x6211;&#x770B;&#x4E86;&#x534A;&#x5929;&#x624D;&#x610F;&#x8BC6;&#x5230;&#x54EA;&#x91CC;&#x662F;&#x4E16;&#x754C;&#x5C9B;&#xFF0C;&#x6700;&#x7EC8;&#x9519;&#x8FC7;&#x62CD;&#x7167;&#x4E86;&#x3002;</p>
<p>&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x6253;&#x5361;&#x5730;&#x5C31;&#x662F;&#x4E16;&#x754C;&#x6700;&#x9AD8;&#x7684;&#x5854;&#xFF0C;&#x54C8;&#x5229;&#x6CD5;&#x5854;&#x3002;&#x53EF;&#x4EE5;&#x53BB; 128 &#x5C42;&#x7684;&#x89C2;&#x5149;&#x5C42;&#x5F80;&#x4E0B;&#x770B;&#x98CE;&#x666F;&#xFF0C;&#x6709;&#x8FEA;&#x62DC;&#x57CE;&#x5E02;&#x7684;&#x5168;&#x8C8C;&#x3002;&#x7B14;&#x8005;&#x5EFA;&#x8BAE;&#x4E0B;&#x5348; 3-4 &#x70B9;&#x53BB;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x4E00;&#x76F4;&#x5446;&#x5230; 6 &#x70B9;&#x65E5;&#x843D;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x548C;&#x5FC3;&#x7231;&#x7684;&#x4EBA;&#x5728;&#x4E16;&#x754C;&#x4E4B;&#x5DC5;&#x4E00;&#x8D77;&#x770B;&#x65E5;&#x843D;&#x3002;&#x503C;&#x5F97;&#x4E00;&#x63D0;&#x7684;&#x662F;&#x54C8;&#x5229;&#x6CD5;&#x5854;&#x7684;&#x7535;&#x68AF;&#x4E5F;&#x662F;&#x4E16;&#x754C;&#x6700;&#x5FEB;&#x7684;&#x3002;&#x7B14;&#x8005;&#x62CD;&#x6444;&#x4E86;&#x5B83;&#x4E0A;&#x5347;&#x7684;&#x901F;&#x5EA6;&#xFF0C;&#x975E;&#x5E38;&#x9707;&#x64BC;&#xFF0C;&#x89C6;&#x9891;&#x90FD;&#x5728;&#x6296;&#x97F3;&#x53F7;&#x4E0A;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_11_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>&#x5176;&#x4ED6;&#x7684;&#x6D3B;&#x52A8;&#x5C31;&#x662F;&#x6D88;&#x8D39;&#x6D3B;&#x52A8;&#x54AF;&#x3002;The Dubai Mall &#x80AF;&#x5B9A;&#x662F;&#x5FC5;&#x53BB;&#x7684;&#x3002;&#x5B83;&#x7531; 10 &#x5230; 15 &#x4E2A; Mall &#x4E2D; Mall &#x7EC4;&#x6210;&#xFF0C;&#x4E00;&#x5171;&#x5C06;&#x6709;&#x5927;&#x7EA6; 1200 &#x4E2A;&#x5546;&#x5E97;&#xFF0C;&#x6709; 16000 &#x4E2A;&#x505C;&#x8F66;&#x4F4D;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x5B83;&#x8FD8;&#x5C06;&#x6709;&#x4E16;&#x754C;&#x6700;&#x5927;&#x7684;&#x6C34;&#x65CF;&#x9986;&#xFF0C;&#x6700;&#x5927;&#x7684;&#x9EC4;&#x91D1;&#x5E02;&#x573A;&#xFF0C;&#x5965;&#x8FD0;&#x6BD4;&#x8D5B;&#x89C4;&#x6A21;&#x7684;&#x51B0;&#x573A;&#xFF0C;6 &#x5C42;&#x697C;&#x9AD8;&#x7684;&#x5DE8;&#x5E45;&#x5C4F;&#x5E55;&#x5F71;&#x9662;&#xFF0C;&#x63A2;&#x9669;&#x516C;&#x56ED;&#xFF0C;&#x6C99;&#x6F20;&#x55B7;&#x6CC9;&#x7B49;&#x7B49;&#x3002;</p>
<p>&#x8FEA;&#x62DC;&#x8D2D;&#x7269;&#x4E2D;&#x5FC3;&#x5355;&#x72EC;&#x5360;&#x5730; 500 &#x4E07;&#x5E73;&#x65B9;&#x82F1;&#x5C3A;&#xFF08;&#x7EA6; 46 &#x4E07; 5000 &#x5E73;&#x65B9;&#x7C73;&#xFF09;&#xFF0C;&#x76F8;&#x5F53;&#x4E8E; 56 &#x4E2A;&#x8DB3;&#x7403;&#x573A;&#x7684;&#x9762;&#x79EF;&#xFF0C;&#x8FDE;&#x540C;&#x5176;&#x6240;&#x6709;&#x8F85;&#x52A9;&#x8BBE;&#x65BD;&#x3001;&#x9644;&#x5C5E;&#x5EFA;&#x7B51;&#x5728;&#x5185;&#x3001;&#x603B;&#x5171;&#x5360;&#x5730; 900 &#x4E07;&#x5E73;&#x65B9;&#x82F1;&#x5C3A;&#xFF08;&#x7EA6; 83 &#x4E07; 6000 &#x5E73;&#x65B9;&#x7C73;&#xFF09;&#xFF0C;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#x90FD;&#x5237;&#x65B0;&#x4E86;&#x4E16;&#x754C;&#x7EAA;&#x5F55;&#xFF0C;&#x8D85;&#x8FC7;&#x4E86;&#x52A0;&#x62FF;&#x5927;&#x57C3;&#x5FB7;&#x8499;&#x591A;&#x5E02;&#x7684;&#x5F97;&#x897F;&#x57C3;&#x5546;&#x4E1A;&#x4E2D;&#x5FC3;&#x548C;&#x7F8E;&#x56FD;&#x660E;&#x5C3C;&#x82CF;&#x8FBE;&#x5DDE;&#x5E03;&#x5362;&#x660E;&#x987F;&#x5E02;&#x7684;&#x7F8E;&#x56FD;&#x8D2D;&#x7269;&#x4E2D;&#x5FC3;&#x3002;&#x4E5F;&#x8BB8;&#x4F60;&#x5BF9;&#x8FD9;&#x4E9B;&#x6570;&#x5B57;&#x6CA1;&#x6709;&#x611F;&#x53D7;&#xFF0C;&#x90A3;&#x7B14;&#x8005;&#x8FD9;&#x6837;&#x63CF;&#x8FF0;&#x5427;&#x3002;&#x4ECE;&#x65E9;&#x4E0A;&#x5546;&#x573A;&#x5F00;&#x95E8;&#xFF0C;&#x4E00;&#x76F4;&#x901B;&#x5230;&#x665A;&#x4E0A;&#x5546;&#x573A;&#x5173;&#x95E8;&#xFF0C;&#x901B;&#x6574;&#x6574;&#x4E00;&#x5929;&#xFF0C;&#x53EA;&#x80FD;&#x901B;&#x5B8C;&#x5176;&#x4E2D;&#x4E00;&#x5C42;&#xFF0C;&#x8FDE;&#x7EED;&#x901B;&#x4E00;&#x5468;&#x624D;&#x80FD;&#x628A;&#x6574;&#x4E2A;&#x8D2D;&#x7269;&#x4E2D;&#x5FC3;&#x901B;&#x5B8C;&#x3002;</p>
<p>&#x8FEA;&#x62DC;&#x7684;&#x8336;&#x4F59;&#x996D;&#x540E;&#x7684;&#x5A31;&#x4E50;&#x6D3B;&#x52A8;&#x975E;&#x5E38;&#x532E;&#x4E4F;&#xFF0C;&#x6CA1;&#x6709;&#x4E2D;&#x56FD;&#x7684;&#x68CB;&#x724C;&#xFF0C;&#x9EBB;&#x5C06;&#xFF0C;&#x5E7F;&#x573A;&#x821E;&#x7B49;&#x7B49;&#x6D3B;&#x52A8;&#x3002;&#x5973;&#x6027;&#x552F;&#x4E00;&#x7684;&#x5A31;&#x4E50;&#x6D3B;&#x52A8;&#x5C31;&#x662F;&#x901B;&#x5546;&#x573A;&#xFF0C;&#x6D88;&#x8D39;&#x3002;&#x6240;&#x4EE5; The Dubai Mall &#x62E5;&#x6709;&#x5168;&#x4E16;&#x754C;&#x6700;&#x65B0;&#x6B3E;&#x7684; LV &#x5305;&#x5305;&#xFF0C;&#x62E5;&#x6709;&#x5168;&#x4E16;&#x754C;&#x6700;&#x65B0;&#x6B3E;&#x548C;&#x6700;&#x8D35;&#x7684;&#x5962;&#x4F88;&#x54C1;&#x3002;&#x53EA;&#x6709;&#x8FD9;&#x6837;&#x624D;&#x80FD;&#x6EE1;&#x8DB3;&#x8FEA;&#x62DC;&#x5973;&#x6027;&#x996D;&#x540E;&#x7684;&#x5A31;&#x4E50;&#x9700;&#x6C42;&#x3002;&#xFF08;&#x8FD9;&#x6BB5;&#x4E0D;&#x662F;&#x5F00;&#x73A9;&#x7B11;&#xFF0C;&#x8BF4;&#x7684;&#x662F;&#x771F;&#x5B9E;&#x7684;&#xFF09;&#x6240;&#x4EE5;&#x5F53;&#x4F60;&#x5728;&#x8D2D;&#x7269;&#x4E2D;&#x5FC3;&#x770B;&#x89C1;&#x4E00;&#x4E2A;&#x767D;&#x888D;&#x9886;&#x7740;&#x4ED6;&#x7684;&#x8001;&#x5A46;&#x4EEC;&#x4E00;&#x987F;&#x4E70;&#x4E70;&#x4E70;&#xFF0C;&#x4E00;&#x53E3;&#x6C14;&#x4E70; 16 &#x4E2A; LV&#xFF0C;4 &#x8F86;&#x52B3;&#x65AF;&#x83B1;&#x65AF;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x522B;&#x8BA4;&#x4E3A;&#x662F;&#x4EBA;&#x5BB6;&#x8D25;&#x5BB6;&#xFF0C;&#x5176;&#x5B9E;&#x4EBA;&#x5BB6;&#x662F;&#x5728;&#x5A31;&#x4E50;&#x5462;&#x3002;&#xFF08;4 &#x4E2A;&#x8001;&#x5A46;&#xFF0C;&#x6BCF;&#x4E2A;&#x8001;&#x5A46;&#x4E00;&#x8F86;&#x52B3;&#x65AF;&#x83B1;&#x65AF;&#xFF0C;&#x4E00;&#x5E74;&#x56DB;&#x5B63;&#xFF0C;&#x6BCF;&#x4E2A;&#x5B63;&#x8282;&#x90FD;&#x8981;&#x4E00;&#x4E2A; LV &#x5305;&#x5305;&#x3002;&#x6240;&#x4EE5;&#x9700;&#x8981; 16 &#x4E2A; LV&#xFF0C;4 &#x8F86;&#x52B3;&#x65AF;&#x83B1;&#x65AF;&#xFF09;&#x5728;&#x8FEA;&#x62DC;&#x5141;&#x8BB8;&#x4E00;&#x592B;&#x591A;&#x59BB;&#xFF0C;&#x4F46;&#x662F;&#x5FC5;&#x987B;&#x5BF9;&#x6BCF;&#x4E2A;&#x8001;&#x5A46;&#x90FD;&#x516C;&#x5E73;&#x5BF9;&#x5F85;&#xFF0C;&#x4F60;&#x7684;&#x7231;&#x8981;&#x5E73;&#x5747;&#x5206;&#x7ED9;&#x6BCF;&#x4E2A;&#x4EBA;&#x3002;</p>
<p>&#x597D;&#x4E86;&#xFF0C;&#x4ECA;&#x5E74;&#x7684;&#x65C5;&#x884C;&#x5C31;&#x8BF4;&#x5230;&#x8FD9;&#x91CC;&#x4E86;&#xFF0C;&#x5927;&#x591A;&#x6570;&#x8FEA;&#x62DC;&#x7684;&#x65C5;&#x884C;&#x89C6;&#x9891;&#x90FD;&#x5728; @halfrost &#x7684;&#x6296;&#x97F3;&#x53F7;&#x4E0A;&#x3002;&#x8BFB;&#x8005;&#x6709;&#x7A7A;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BDD;&#x53EF;&#x4EE5;&#x53BB;&#x770B;&#x770B;&#x3002;&#x5E0C;&#x671B;&#x660E;&#x5E74;&#x7B14;&#x8005;&#x7684;&#x6258;&#x798F;&#x548C; GRE &#x53EF;&#x4EE5;&#x8003;&#x5230;&#x6EE1;&#x610F;&#x7684;&#x5206;&#x6570;&#x3002;&#x8003;&#x5B8C;&#x4E86;&#x60F3;&#x53BB;&#x5357;&#x7F8E;&#x6216;&#x8005;&#x51B0;&#x5C9B;&#x8F6C;&#x4E00;&#x8F6C;&#x3002;&#xFF08;&#x7ACB; flag &#x8981;&#x6253;&#x8138;&#xFF09;</p>
<h2 id="%E6%9C%80%E5%90%8E">&#x6700;&#x540E;</h2>
<p>&#x4E00;&#x4F4D;&#x5927;&#x4F6C;&#x670B;&#x53CB;&#x5708;&#x5199;&#x9053;&#xFF1A;&#x770B;&#x7A0B;&#x5E8F;&#x5458;&#x662F;&#x5426;&#x52E4;&#x594B;&#x5C31;&#x770B;&#x4ED6;&#x7684;&#x82F1;&#x8BED;&#x597D;&#x4E0D;&#x597D;&#xFF0C;&#x667A;&#x5546;&#x9AD8;&#x4E0D;&#x9AD8;&#x5C31;&#x770B;&#x4ED6;&#x7B97;&#x6CD5;&#x597D;&#x4E0D;&#x597D;&#x3002;&#x8FD9;&#x53E5;&#x8BDD;&#x6211;&#x5F53;&#x65F6;&#x770B;&#x5230;&#x4E86;&#x5F88;&#x89E6;&#x52A8;&#xFF0C;&#x9ED8;&#x9ED8;&#x7684;&#x8BB0;&#x5728;&#x4E86;&#x5FC3;&#x5E95;&#x3002;2019 &#x5E74;&#x4E00;&#x5E74;&#x6211;&#x5C31;&#x53EA;&#x505A;&#x4E86; 2 &#x4EF6;&#x4E8B;&#x60C5;&#xFF0C;&#x5237;&#x7B97;&#x6CD5;&#xFF0C;&#x5B66;&#x82F1;&#x8BED;&#x3002;&#x6211;&#x73B0;&#x5728;&#x8FD8;&#x4E0D;&#x6562;&#x8BF4;&#x6211;&#x662F;&#x4F18;&#x79C0;&#x7684;&#x7A0B;&#x5E8F;&#x5458;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x81F3;&#x5C11;&#x52AA;&#x529B;&#x8FC7;&#x3002;&#x4E0D;&#x8F9C;&#x8D1F;&#x65F6;&#x5149;&#xFF0C;&#x65E0;&#x6127;&#x4E8E;&#x81EA;&#x5DF1;&#x3002;&#x4EE5;&#x4E0A;&#x5C31;&#x662F;&#x4F60;&#x4EEC;&#x60F3;&#x8981;&#x7684;&#x7B54;&#x6848;&#xFF0C;&#x8FD9;&#x5C31;&#x662F;&#x6211; 2019 &#x5E74;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#xFF0C;&#x91CC;&#x9762;&#x63ED;&#x79D8;&#x4E86; 98% &#x7684;&#x4EBA;&#x90FD;&#x4E0D;&#x4E86;&#x89E3;&#x7684;&#x4E8B;&#x60C5;&#x3002;&#x5F88;&#x591A;&#x730E;&#x5934;&#x8FF7;&#x60D1;&#x7684;&#x5185;&#x5BB9;&#x4E5F;&#x90FD;&#x5728;&#x91CC;&#x9762;&#x4E86;&#x3002;&#x611F;&#x8C22;&#x5468;&#x56F4;&#x4EB2;&#x621A;&#x670B;&#x53CB;&#x7684;&#x8FD9; 2 &#x5E74;&#x7684;&#x5173;&#x5FC3;&#x3002;&#x8FD9;&#x7BC7;&#x603B;&#x7ED3;&#x4E0D;&#x662F;&#x539F;&#x5B50;&#x5F39;&#x1F4A5;&#x522B;&#x592A;&#x60CA;&#x8BB6;&#x3002;</p>
<p>&#x56DE;&#x8FC7;&#x5934;&#x6765;&#x770B;&#xFF0C;&#x597D;&#x50CF;&#x4E5F;&#x6CA1;&#x6709;&#x505A;&#x51FA;&#x4EC0;&#x4E48;&#x725B;&#x903C;&#x7684;&#x4E8B;&#x60C5;&#x3002;&#x5C31;&#x662F;&#x4E0B;&#x4E86;&#x4E00;&#x6B65;&#x5C0F;&#x68CB;&#xFF0C;&#x5E03;&#x4E86;&#x4E00;&#x4E2A;&#x5C0F;&#x5C40;&#x3002;&#x4E5F;&#x4E0D;&#x662F;&#x4EC0;&#x4E48;&#x4F20;&#x5947;&#x7ECF;&#x5386;&#xFF0C;&#x65E0;&#x975E;&#x662F;&#x594B;&#x6597;&#x8DEF;&#x4E0A;&#x7ACB; flag&#xFF0C;&#x8FBE;&#x5230; flag&#xFF0C;&#x518D;&#x7ACB; flag &#x7684;&#x4E00;&#x6EF4;&#x6EF4;&#x6C57;&#x6C34;&#x7F62;&#x4E86;&#x3002;&#x8FC7;&#x53BB; 2 &#x5E74;&#xFF0C;&#x6211;&#x4E00;&#x76F4;&#x9690;&#x8EAB;&#x4E8E;&#x7F51;&#x7EDC;&#xFF0C;&#x4E5F;&#x6CA1;&#x4EBA;&#x77E5;&#x9053;&#x6211;&#x7ACB;&#x7684;&#x8FD9;&#x4E9B; flag&#x3002;&#x5927;&#x5BB6;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x90FD;&#x662F;&#x5BF9;&#x81EA;&#x5DF1;&#x4ECA;&#x5E74; flag &#x5B8C;&#x6210;&#x5EA6;&#x7684;&#x590D;&#x76D8;&#xFF0C;&#x800C;&#x6211;&#x6CA1;&#x6709;&#x52C7;&#x6C14;&#x53BB;&#x76F4;&#x9762;&#x88AB;&#x4EBA;&#x5632;&#x7B11;&#x7684;&#x68A6;&#x60F3;&#xFF0C;<strong>&#x5982;&#x679C;&#x6700;&#x7EC8;&#x68A6;&#x60F3;&#x6CA1;&#x6709;&#x5B9E;&#x73B0;&#xFF0C;flag &#x65E0;&#x975E;&#x5C31;&#x662F;&#x4EBA;&#x4EEC;&#x996D;&#x540E;&#x7684;&#x8C08;&#x8D44;&#xFF0C;&#x6253;&#x80BF;&#x6211;&#x8138;&#x7684;&#x7B11;&#x67C4;</strong>&#x3002;&#x8FD9;&#x4E5F;&#x662F;&#x8FD1; 2 &#x5E74;&#x90FD;&#x6CA1;&#x6709;&#x770B;&#x5230;&#x6211;&#x7684;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x516C;&#x5F00;&#x51FA;&#x6765;&#x7684;&#x539F;&#x56E0;&#x3002;&#x6700;&#x7EC8;&#x7684;&#x68A6;&#x60F3;&#x603B;&#x7B97;&#x5B8C;&#x6210;&#x4E86;&#xFF0C;&#x4E5F;&#x662F;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x628A;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x516C;&#x5F00;&#x51FA;&#x6765;&#x4E86;&#xFF0C;&#x7ED9;&#x5173;&#x5FC3;&#x6211;&#x7684;&#x8BFB;&#x8005;&#x548C;&#x670B;&#x53CB;&#x4E00;&#x4E9B;&#x4EA4;&#x4EE3;&#x4E86;&#x3002;&#xFF08;&#x672C;&#x6587;&#x5199;&#x4E8E; 2019 &#x5E74;&#x5E74;&#x672B;&#xFF0C;&#x6700;&#x540E;&#x8FD9;&#x4E00;&#x6BB5;&#x4FEE;&#x6539;&#x4E8E; 2021&#x5E74; 3 &#x6708;&#xFF09;</p>
<p>&#x6700;&#x540E;&#x4E00;&#x4E9B;&#x201C;&#x53EA;&#x8A00;&#x7247;&#x8BED;&#x201D;&#x7684;&#x611F;&#x53D7;&#x5206;&#x4EAB;&#x4E00;&#x4E0B;&#x4F5C;&#x4E3A;&#x5E74;&#x7EC8;&#x603B;&#x7ED3;&#x7684;&#x7ED3;&#x5C3E;&#x5427;&#x3002;</p>
<ol>
<li>&#x4E0D;&#x8981;&#x5411;&#x4EFB;&#x4F55;&#x4EBA;&#x8BC9;&#x82E6;&#x3002;&#x56E0;&#x4E3A; 20% &#x7684;&#x4EBA;&#x4E0D;&#x5173;&#x5FC3;&#xFF0C;&#x5269;&#x4E0B; 80% &#x7684;&#x4EBA;&#x542C;&#x4E86;&#x4F1A;&#x5F00;&#x5FC3;&#x3002;</li>
<li>&#x72EE;&#x5B50;&#x4ECE;&#x6765;&#x4E0D;&#x4F1A;&#x5173;&#x5FC3;&#x4E00;&#x53EA;&#x7F8A;&#x7684;&#x770B;&#x6CD5;&#xFF0C;&#x4E0D;&#x8981;&#x5728;&#x610F;&#x522B;&#x4EBA;&#x600E;&#x4E48;&#x770B;&#x4F60;&#xFF0C;&#x4F60;&#x5E94;&#x8BE5;&#x52AA;&#x529B;&#x5F3A;&#x5927;&#x6210;&#x4E3A;&#x4E00;&#x53EA;&#x72EE;&#x5B50;&#x3002;</li>
<li>&#x8981;&#x5B66;&#x4F1A;&#x62D2;&#x7EDD;&#xFF0C;&#x6CA1;&#x6709;&#x4EBA;&#x4F1A;&#x611F;&#x6FC0;&#x4F60;&#x7684;&#x5584;&#x826F;&#xFF0C;&#x5F88;&#x591A;&#x4EBA;&#x53EA;&#x4F1A;&#x5F97;&#x5BF8;&#x8FDB;&#x5C3A;&#x3002;</li>
<li>&#x4E0D;&#x9700;&#x8981;&#x89E3;&#x91CA;&#x7684;&#x4E0D;&#x8981;&#x89E3;&#x91CA;&#xFF0C;&#x4ECE;&#x4F60;&#x5F20;&#x5634;&#x7684;&#x90A3;&#x4E00;&#x523B;&#x4F60;&#x5C31;&#x5DF2;&#x7ECF;&#x8F93;&#x4E86;&#x3002;</li>
<li>&#x5F53;&#x6709;&#x4EBA;&#x4FAE;&#x8FB1;&#x4F60;&#x7684;&#x65F6;&#x5019;&#x4F60;&#x8981;&#x8BB0;&#x4F4F;&#xFF0C;&#x72EE;&#x5B50;&#x4E0D;&#x4F1A;&#x56E0;&#x4E3A;&#x72D7;&#x53EB;&#x800C;&#x56DE;&#x5934;&#x3002;</li>
</ol>
<p>&#x597D;&#x4E86;&#xFF0C;2019 &#x5E74;&#x7684;&#x3010;&#x661F;&#x971C;&#x834F;&#x82D2;&#x3011;&#x5C31;&#x5230;&#x8FD9;&#x91CC;&#x4E86;&#x3002;&#x5982;&#x6709;&#x4EFB;&#x4F55;&#x5F02;&#x8BAE;&#x6216;&#x8005;&#x60F3;&#x8BA8;&#x8BBA;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x6B22;&#x8FCE;&#x548C;&#x6211;&#x4EA4;&#x6D41;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/150_12_.jpg" alt="&#x4E0D;&#x7518;&#x5F53;&#x5B66;&#x6E23;&#xFF0C;&#x52AA;&#x529B;&#x4F5C;&#x5B66;&#x9738;&#xFF0C;&#x6700;&#x7EC8;&#x662F;&#x5B66;&#x6C11;" loading="lazy"></p>
<p>2019 &#x5E74; 5 &#x6708; 5 &#x65E5;&#xFF0C;&#x4E8E;&#x8FEA;&#x62DC; Dubai</p>
<hr>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="https://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="https://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/halfrost_2019/">https://halfrost.com/halfrost_2019/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[深入 Go 并发原语 — Channel 底层实现]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x4F5C;&#x4E3A; Go &#x5E76;&#x53D1;&#x539F;&#x8BED;&#x7684;&#x7B2C;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#xFF0C;&#x4E00;&#x5B9A;&#x7ED5;&#x4E0D;&#x5F00; Go &#x7684;&#x5E76;&#x53D1;&#x54F2;&#x5B66;&#x3002;&#x4ECE; Tony Hoare &#x5199;&#x7684; Communicating Sequential Processes &#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x8BF4;&#x8D77;&#xFF0C;&#x8FD9;&#x7BC7;&#x7ECF;&#x5178;&#x8BBA;&#x6587;&#x7B97;&#x662F; Go</p>]]></description><link>https://halfrost.com/go_channel/</link><guid isPermaLink="false">634360bbd892dc307476cced</guid><category><![CDATA[Golang]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 20 Oct 2019 02:30:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/04/149_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/04/149_0.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;"><p>&#x4F5C;&#x4E3A; Go &#x5E76;&#x53D1;&#x539F;&#x8BED;&#x7684;&#x7B2C;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#xFF0C;&#x4E00;&#x5B9A;&#x7ED5;&#x4E0D;&#x5F00; Go &#x7684;&#x5E76;&#x53D1;&#x54F2;&#x5B66;&#x3002;&#x4ECE; Tony Hoare &#x5199;&#x7684; Communicating Sequential Processes &#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x8BF4;&#x8D77;&#xFF0C;&#x8FD9;&#x7BC7;&#x7ECF;&#x5178;&#x8BBA;&#x6587;&#x7B97;&#x662F; Go &#x8BED;&#x8A00;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#x7684;&#x6839;&#x57FA;&#x3002;</p>
<h2 id="%E4%B8%80-what-is-csp">&#x4E00;. What is CSP</h2>
<p>CSP &#x7684;&#x5168;&#x7A0B;&#x662F; Communicating Sequential Processes&#xFF0C;&#x76F4;&#x8BD1;&#xFF0C;&#x901A;&#x4FE1;&#x987A;&#x5E8F;&#x8FDB;&#x7A0B;&#x3002;&#x8FD9;&#x4E00;&#x6982;&#x5FF5;&#x8D77;&#x6E90;&#x81EA; 1978 &#x5E74; ACM &#x671F;&#x520A;&#x4E2D; Charles Antony Richard Hoare &#x5199;&#x7684;&#x7ECF;&#x5178;&#x540C;&#x540D;&#x8BBA;&#x6587;&#x3002;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x770B; Reference &#x4E2D;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x94FE;&#x63A5;&#x770B;&#x539F;&#x6587;&#x3002;&#x5728;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#xFF0C;Hoare &#x5728;&#x6587;&#x4E2D;&#x7528; CSP &#x6765;&#x63CF;&#x8FF0;&#x901A;&#x4FE1;&#x987A;&#x5E8F;&#x8FDB;&#x7A0B;&#x80FD;&#x529B;&#xFF0C;&#x59D1;&#x4E14;&#x8BA4;&#x4E3A;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x865A;&#x6784;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x3002;&#x8BE5;&#x8BED;&#x8A00;&#x63CF;&#x8FF0;&#x4E86;&#x5E76;&#x53D1;&#x8FC7;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x4EA4;&#x4E92;&#x4F5C;&#x7528;&#x3002;&#x4ECE;&#x5386;&#x53F2;&#x4E0A;&#x770B;&#xFF0C;&#x8F6F;&#x4EF6;&#x7684;&#x8FDB;&#x6B65;&#x4E3B;&#x8981;&#x4F9D;&#x9760;&#x786C;&#x4EF6;&#x7684;&#x6539;&#x8FDB;&#xFF0C;&#x8FD9;&#x4E9B;&#x6539;&#x8FDB;&#x53EF;&#x4EE5;&#x4F7F; CPU &#x66F4;&#x5FEB;&#xFF0C;&#x5185;&#x5B58;&#x66F4;&#x5927;&#x3002;Hoare &#x8BA4;&#x8BC6;&#x5230;&#xFF0C;&#x60F3;&#x901A;&#x8FC7;&#x786C;&#x4EF6;&#x63D0;&#x9AD8;&#x4F7F;&#x5F97;&#x4EE3;&#x7801;&#x8FD0;&#x884C;&#x901F;&#x5EA6;&#x5FEB; 10 &#x500D;&#xFF0C;&#x9700;&#x8981;&#x4ED8;&#x51FA; 10 &#x500D;&#x4EE5;&#x4E0A;&#x7684;&#x673A;&#x5668;&#x8D44;&#x6E90;&#x3002;&#x8FD9;&#x5E76;&#x6CA1;&#x6709;&#x4ECE;&#x6839;&#x672C;&#x6539;&#x5584;&#x95EE;&#x9898;&#x3002;</p>
<h3 id="1-%E6%9C%AF%E8%AF%AD%E5%92%8C%E4%B8%80%E4%BA%9B%E4%BE%8B%E5%AD%90">1. &#x672F;&#x8BED;&#x548C;&#x4E00;&#x4E9B;&#x4F8B;&#x5B50;</h3>
<p>&#x5C3D;&#x7BA1;&#x5E76;&#x53D1;&#x76F8;&#x5BF9;&#x4E8E;&#x4F20;&#x7EDF;&#x7684;&#x987A;&#x5E8F;&#x7F16;&#x7A0B;&#x5177;&#x6709;&#x8BB8;&#x591A;&#x4F18;&#x52BF;&#xFF0C;&#x4F46;&#x7531;&#x4E8E;&#x5176;&#x4F1A;&#x51FA;&#x9519;&#x7684;&#x6027;&#x8D28;&#xFF0C;&#x5B83;&#x672A;&#x80FD;&#x83B7;&#x5F97;&#x5E7F;&#x6CDB;&#x7684;&#x6B22;&#x8FCE;&#x3002;Hoare &#x501F;&#x52A9; CSP &#x5F15;&#x5165;&#x4E86;&#x4E00;&#x79CD;&#x7CBE;&#x786E;&#x7684;&#x7406;&#x8BBA;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x6570;&#x5B66;&#x4E0A;&#x4FDD;&#x8BC1;&#x7A0B;&#x5E8F;&#x6446;&#x8131;&#x5E76;&#x53D1;&#x7684;&#x5E38;&#x89C1;&#x95EE;&#x9898;&#x3002;Hoare &#x5728;&#x4ED6;&#x7684; Learning CSP&#xFF08;&#x8FD9;&#x662F;&#x8BA1;&#x7B97;&#x673A;&#x79D1;&#x5B66;&#x4E2D;&#x5F15;&#x7528;&#x7B2C;&#x4E09;&#x591A;&#x7684;&#x795E;&#x4E66;&#xFF01;&#xFF09;&#x4E00;&#x4E66;&#x4E2D;&#xFF0C;&#x4F7F;&#x7528;&#x201C;&#x8FDB;&#x7A0B;&#x5FAE;&#x79EF;&#x5206;&#x201D;&#x6765;&#x8868;&#x660E;&#x53EF;&#x4EE5;&#x5904;&#x7406;&#x6B7B;&#x9501;&#x548C;&#x4E0D;&#x786E;&#x5B9A;&#x6027;&#xFF0C;&#x5C31;&#x50CF;&#x5B83;&#x4EEC;&#x662F;&#x666E;&#x901A;&#x8FDB;&#x7A0B;&#x4E2D;&#x7684;&#x6700;&#x7EC8;&#x4E8B;&#x4EF6;&#x4E00;&#x6837;&#x3002;&#x8FDB;&#x7A0B;&#x5FAE;&#x79EF;&#x5206;&#x662F;&#x4E00;&#x79CD;&#x5BF9;&#x5E76;&#x53D1;&#x7CFB;&#x7EDF;&#x8FDB;&#x884C;&#x6570;&#x5B66;&#x5316;&#x5EFA;&#x6A21;&#x7684;&#x65B9;&#x5F0F;&#xFF0C;&#x5E76;&#x4E14;&#x63D0;&#x4F9B;&#x4E86;&#x4EE3;&#x6570;&#x6CD5;&#x5219;&#x6765;&#x8FDB;&#x884C;&#x8FD9;&#x4E9B;&#x7CFB;&#x7EDF;&#x7684;&#x53D8;&#x6362;&#x6765;&#x5206;&#x6790;&#x5B83;&#x4EEC;&#x7684;&#x4E0D;&#x540C;&#x5C5E;&#x6027;&#xFF0C;&#x5E76;&#x53D1;&#x548C;&#x6548;&#x7387;&#x3002;</p>
<p>&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x6570;&#x636E;&#x88AB;&#x591A;&#x7EBF;&#x7A0B;&#x7834;&#x574F;&#xFF0C;Hoare &#x63D0;&#x51FA;&#x4E86;&#x4E34;&#x754C;&#x533A;&#x7684;&#x6982;&#x5FF5;&#x3002;&#x8FDB;&#x7A0B;&#x8FDB;&#x5165;&#x4E34;&#x754C;&#x533A;&#x540E;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x5BF9;&#x5171;&#x4EAB;&#x6570;&#x636E;&#x7684;&#x8BBF;&#x95EE;&#x3002;&#x5728;&#x8FDB;&#x5165;&#x4E34;&#x754C;&#x533A;&#x4E4B;&#x524D;&#xFF0C;&#x6240;&#x6709;&#x5176;&#x4ED6;&#x7684;&#x8FDB;&#x7A0B;&#x5FC5;&#x987B;&#x9A8C;&#x8BC1;&#x548C;&#x66F4;&#x65B0;&#x8FD9;&#x4E00;&#x5171;&#x4EAB;&#x53D8;&#x91CF;&#x7684;&#x503C;&#x3002;&#x9000;&#x51FA;&#x4E34;&#x754C;&#x533A;&#x65F6;&#xFF0C;&#x8FDB;&#x7A0B;&#x5FC5;&#x987B;&#x518D;&#x6B21;&#x9A8C;&#x8BC1;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#x5177;&#x6709;&#x76F8;&#x540C;&#x7684;&#x503C;&#x3002;</p>
<p>&#x4FDD;&#x6301;&#x6570;&#x636E;&#x5B8C;&#x6574;&#x6027;&#x7684;&#x53E6;&#x4E00;&#x79CD;&#x6280;&#x672F;&#x662F;&#x901A;&#x8FC7;&#x4F7F;&#x7528;&#x4E92;&#x65A5;&#x4FE1;&#x53F7;&#x91CF;&#x6216;&#x4E92;&#x65A5;&#x91CF;&#x3002;&#x4E92;&#x65A5;&#x9501;&#x662F;&#x4FE1;&#x53F7;&#x91CF;&#x7684;&#x7279;&#x5B9A;&#x5B50;&#x7C7B;&#xFF0C;&#x5B83;&#x4EC5;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4E00;&#x6B21;&#x8BBF;&#x95EE;&#x8BE5;&#x53D8;&#x91CF;&#x3002;&#x4FE1;&#x53F7;&#x91CF;&#x662F;&#x4E00;&#x4E2A;&#x53D7;&#x9650;&#x5236;&#x7684;&#x8BBF;&#x95EE;&#x53D8;&#x91CF;&#xFF0C;&#x5B83;&#x662F;&#x9632;&#x6B62;&#x5E76;&#x53D1;&#x4E2D;&#x7ADE;&#x4E89;&#x7684;&#x7ECF;&#x5178;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x3002;&#x5176;&#x4ED6;&#x5C1D;&#x8BD5;&#x8BBF;&#x95EE;&#x8BE5;&#x4E92;&#x65A5;&#x9501;&#x7684;&#x8FDB;&#x7A0B;&#x5C06;&#x88AB;&#x963B;&#x6B62;&#xFF0C;&#x5E76;&#x4E14;&#x5FC5;&#x987B;&#x7B49;&#x5F85;&#x76F4;&#x5230;&#x5F53;&#x524D;&#x8FDB;&#x7A0B;&#x91CA;&#x653E;&#x8BE5;&#x4E92;&#x65A5;&#x9501;&#x3002;&#x91CA;&#x653E;&#x4E92;&#x65A5;&#x9501;&#x540E;&#xFF0C;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x7B49;&#x5F85;&#x7684;&#x8FDB;&#x7A0B;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x8BE5;&#x53D8;&#x91CF;&#xFF0C;&#x6240;&#x6709;&#x5176;&#x4ED6;&#x8FDB;&#x7A0B;&#x7EE7;&#x7EED;&#x7B49;&#x5F85;&#x3002;</p>
<p>1970&#x5E74;&#x4EE3;&#x521D;&#x671F;&#xFF0C;Hoare &#x57FA;&#x4E8E;&#x4E92;&#x65A5;&#x91CF;&#x7684;&#x6982;&#x5FF5;&#x5F00;&#x53D1;&#x4E86;&#x4E00;&#x79CD;&#x79F0;&#x4E3A;&#x76D1;&#x89C6;&#x5668;&#x7684;&#x6982;&#x5FF5;&#x3002;&#x6839;&#x636E; IBM &#x7F16;&#x5199;&#x7684; Java &#x7F16;&#x7A0B;&#x8BED;&#x8A00; CSP &#x6559;&#x7A0B;&#xFF1A;</p>
<blockquote>
<p>&#x201C;A monitor is a body of code whose access is guarded by a mutex. Any process wishing to execute this code must acquire the associated mutex at the top of the code block and release it at the bottom. Because only one thread can own a mutex at a given time, this effectively ensures that only the owing thread can execute a monitor block of code.&#x201D;</p>
</blockquote>
<p>monitor &#x53EF;&#x4EE5;&#x5E2E;&#x52A9;&#x9632;&#x6B62;&#x6570;&#x636E;&#x88AB;&#x7834;&#x574F;&#x548C;&#x7EBF;&#x7A0B;&#x6B7B;&#x9501;&#x3002;&#x5728; CSP &#x8BBA;&#x6587;&#x4E2D;&#x4E3A;&#x4E86;&#x8BF4;&#x660E;&#x6E05;&#x695A;&#x8FDB;&#x7A0B;&#x4E4B;&#x95F4;&#x7684;&#x901A;&#x4FE1;&#xFF0C;Hoare &#x5229;&#x7528; &#xFF1F;&#x548C; &#xFF01;&#x53F7;&#x4EE3;&#x8868;&#x4E86;&#x8F93;&#x5165;&#x548C;&#x8F93;&#x51FA;&#x3002;&#xFF01;&#x4EE3;&#x8868;&#x53D1;&#x9001;&#x8F93;&#x5165;&#x5230;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#xFF0C;&#xFF1F;&#x53F7;&#x4EE3;&#x8868;&#x8BFB;&#x53D6;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;&#x8F93;&#x51FA;&#x3002;&#x6BCF;&#x4E2A;&#x6307;&#x4EE4;&#x9700;&#x8981;&#x6307;&#x5B9A;&#x5177;&#x4F53;&#x662F;&#x4E00;&#x4E2A;&#x8F93;&#x51FA;&#x53D8;&#x91CF;(&#x4ECE;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x4E2D;&#x8BFB;&#x53D6;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x60C5;&#x51B5;)&#xFF0C;&#x8FD8;&#x662F;&#x76EE;&#x7684;&#x5730;(&#x5C06;&#x8F93;&#x5165;&#x53D1;&#x9001;&#x5230;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;&#x60C5;&#x51B5;)&#x3002;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;&#x8F93;&#x51FA;&#x5E94;&#x8BE5;&#x76F4;&#x63A5;&#x6D41;&#x5411;&#x53E6;&#x4E00;&#x4E2A;&#x8FDB;&#x7A0B;&#x7684;&#x8F93;&#x5165;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_3.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x662F;&#x4ECE; CSP &#x6587;&#x7AE0;&#x4E2D;&#x622A;&#x56FE;&#x7684;&#x4E00;&#x4E9B;&#x4F8B;&#x5B50;&#xFF0C;Hoare &#x7B80;&#x5355;&#x7684;&#x4E3E;&#x4E86;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x4F8B;&#x5B50;&#xFF1A;</p>
<pre><code class="language-go">[c:character; west?c ~ east!c] 
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x7684;&#x610F;&#x601D;&#x662F;&#x8BFB;&#x53D6; west &#x8F93;&#x51FA;&#x7684;&#x6240;&#x6709;&#x5B57;&#x7B26;&#xFF0C;&#x7136;&#x540E;&#x628A;&#x5B83;&#x4EEC;&#x4E00;&#x4E2A;&#x4E2A;&#x7684;&#x8F93;&#x51FA;&#x5230; east &#x4E2D;&#x3002;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#x4E0D;&#x65AD;&#x7684;&#x91CD;&#x590D;&#xFF0C;&#x76F4;&#x5230; west &#x7EC8;&#x6B62;&#x3002;&#x4ECE;&#x63CF;&#x8FF0;&#x4E0A;&#x770B;&#xFF0C;&#x8FD9;&#x4E00;&#x7279;&#x6027;&#x5B8C;&#x5B8C;&#x5168;&#x5168;&#x662F; channel &#x7684;&#x96CF;&#x5F62;&#x3002;</p>
<h3 id="2-%E5%93%B2%E5%AD%A6%E5%AE%B6%E9%97%AE%E9%A2%98">2. &#x54F2;&#x5B66;&#x5BB6;&#x95EE;&#x9898;</h3>
<p>&#x6587;&#x7AE0;&#x7684;&#x6700;&#x540E;&#xFF0C;&#x56DE;&#x5230;&#x4E86;&#x7ECF;&#x5178;&#x7684;&#x54F2;&#x5B66;&#x5BB6;&#x95EE;&#x9898;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_2.jpeg" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x5728;&#x54F2;&#x5B66;&#x5BB6;&#x95EE;&#x9898;&#x4E2D;&#xFF0C;Hoare &#x5C06; philosopher &#x7684;&#x884C;&#x4E3A;&#x63CF;&#x8FF0;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">PHIL = *[... during ith lifetime ... ---&gt;,
THINK;
room!enter( );
fork(0!pickup( ); fork((/+ 1) rood 5)!pickup( );
EAT;
fork(i)!putdown( ); fork((/+ 1) mod 5)!putdown( );
room!exit( )
]
</code></pre>
<p>&#x6BCF;&#x4E2A;&#x53C9;&#x5B50;&#x7531;&#x5750;&#x5728;&#x4E24;&#x8FB9;&#x7684;&#x54F2;&#x5B66;&#x5BB6;&#x4F7F;&#x7528;&#x6216;&#x8005;&#x653E;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">FORK =
*[phil(0?pickup( )--* phil(0?putdown( )
0phil((i - 1)rood 5)?pickup( ) --* phil((/- l) raod 5)?putdown( )
]
</code></pre>
<p>&#x6574;&#x4E2A;&#x54F2;&#x5B66;&#x5BB6;&#x5728;&#x623F;&#x95F4;&#x4E2D;&#x7684;&#x884C;&#x4E3A;&#x53EF;&#x4EE5;&#x63CF;&#x8FF0;&#x4E3A;&#xFF1A;</p>
<pre><code class="language-go">ROOM = occupancy:integer; occupancy .--- 0;
,[(i:0..4)phil(0?enter ( ) --* occupancy .--- occupancy + l
11(i:0..4)phil(0?exit ( ) --~ occupancy .--- occupancy - l
] 
</code></pre>
<p>&#x51B3;&#x5B9A;&#x5982;&#x4F55;&#x5411;&#x7B49;&#x5F85;&#x7684;&#x8FDB;&#x7A0B;&#x5206;&#x914D;&#x8D44;&#x6E90;&#x7684;&#x4EFB;&#x52A1;&#x79F0;&#x4E3A;&#x8C03;&#x5EA6;&#x3002;Hoare &#x5C06;&#x8C03;&#x5EA6;&#x5206;&#x4E3A;&#x4E24;&#x4E2A;&#x4E8B;&#x4EF6;&#xFF1A;</p>
<ul>
<li>processes &#x8BF7;&#x6C42;&#x8D44;&#x6E90;</li>
<li>&#x5C06;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x7ED9; processes</li>
</ul>
<p>&#x90A3;&#x4E48;&#x8FD9;&#x4E2A;&#x54F2;&#x5B66;&#x5BB6;&#x95EE;&#x9898;&#x53EF;&#x4EE5;&#x8F6C;&#x6362;&#x6210; PHIL &#x548C; FORK &#x8FD9;&#x4E24;&#x4E2A;&#x7EC4;&#x4EF6;&#x5E76;&#x53D1;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-go">[room::ROOM I [fork( i:0..4)::FORK I Iphil( i:0..4)::PHIL]. 
</code></pre>
<p>&#x4ECE;&#x8BF7;&#x6C42;&#x5230;&#x6388;&#x4E88;&#x8D44;&#x6E90;&#x7684;&#x65F6;&#x95F4;&#x5C31;&#x662F;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x3002;&#x5728; CSP &#x4E2D;&#xFF0C;&#x6709;&#x51E0;&#x79CD;&#x6280;&#x672F;&#x53EF;&#x4EE5;&#x9632;&#x6B62;&#x65E0;&#x9650;&#x7684;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x3002;</p>
<ul>
<li>&#x9650;&#x5236;&#x8D44;&#x6E90;&#x4F7F;&#x7528;&#x5E76;&#x63D0;&#x9AD8;&#x8D44;&#x6E90;&#x53EF;&#x7528;&#x6027;&#x3002;</li>
<li>&#x5148;&#x8FDB;&#x5148;&#x51FA;(FIFO)&#x5C06;&#x8D44;&#x6E90;&#x5206;&#x914D;&#x7ED9;&#x7B49;&#x5F85;&#x65F6;&#x95F4;&#x6700;&#x957F;&#x7684;&#x8FDB;&#x7A0B;&#x3002;</li>
<li>&#x9762;&#x5305;&#x5E97;&#x7B97;&#x6CD5;<a href="https://www.cs.cmu.edu/~410-s14/lectures/L08b_Synch.pdf">Carnegie Melon. Bakery Algorithm</a></li>
</ul>
<h3 id="3-%E7%BC%BA%E9%99%B7">3. &#x7F3A;&#x9677;</h3>
<p>&#x5728;&#x786E;&#x5B9A;&#x6027;&#x7A0B;&#x5E8F;&#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x73AF;&#x5883;&#x6052;&#x5B9A;&#xFF0C;&#x7ED3;&#x679C;&#x5C06;&#x662F;&#x76F8;&#x540C;&#x7684;&#x3002; &#x7531;&#x4E8E;&#x5E76;&#x53D1;&#x57FA;&#x4E8E;&#x975E;&#x786E;&#x5B9A;&#x6027;&#xFF0C;&#x56E0;&#x6B64;&#x73AF;&#x5883;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD;&#x7A0B;&#x5E8F;&#x3002;&#x7ED9;&#x5B9A;&#x6240;&#x9009;&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x7A0B;&#x5E8F;&#x5219;&#x53EF;&#x4EE5;&#x8FD0;&#x884C;&#x51E0;&#x6B21;&#x5E76;&#x6536;&#x5230;&#x4E0D;&#x540C;&#x7684;&#x7ED3;&#x679C;&#x3002;&#x4E3A;&#x4E86;&#x786E;&#x4FDD;&#x5E76;&#x53D1;&#x7A0B;&#x5E8F;&#x7684;&#x51C6;&#x786E;&#x6027;&#xFF0C;&#x7A0B;&#x5E8F;&#x5458;&#x5FC5;&#x987B;&#x80FD;&#x591F;&#x5728;&#x6574;&#x4F53;&#x6C34;&#x5E73;&#x4E0A;&#x8003;&#x8651;&#x5176;&#x7A0B;&#x5E8F;&#x7684;&#x6267;&#x884C;&#x3002;</p>
<p>&#x4F46;&#x662F;&#xFF0C;&#x5C3D;&#x7BA1; Hoare &#x5F15;&#x5165;&#x4E86;&#x6B63;&#x5F0F;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x4F46;&#x4ECD;&#x7136;&#x7F3A;&#x5C11;&#x4EFB;&#x4F55;&#x9A8C;&#x8BC1;&#x6B63;&#x786E;&#x7A0B;&#x5E8F;&#x7684;&#x8BC1;&#x660E;&#x65B9;&#x6CD5;&#x3002;CSP &#x53EA;&#x80FD;&#x53D1;&#x73B0;&#x5DF2;&#x77E5;&#x95EE;&#x9898;&#xFF0C;&#x800C;&#x4E0D;&#x80FD;&#x53D1;&#x73B0;&#x672A;&#x77E5;&#x95EE;&#x9898;&#x3002;&#x867D;&#x7136;&#x57FA;&#x4E8E; CSP &#x7684;&#x5546;&#x4E1A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF08;&#x4F8B;&#x5982;ConAn&#xFF09;&#x53EF;&#x4EE5;&#x68C0;&#x6D4B;&#x5230;&#x9519;&#x8BEF;&#x7684;&#x5B58;&#x5728;&#xFF0C;&#x4F46;&#x662F;&#x4E0D;&#x80FD;&#x68C0;&#x6D4B;&#x6CA1;&#x6709;&#x9519;&#x8BEF;&#x7684;&#x60C5;&#x51B5;&#xFF0C;(&#x65E0;&#x6CD5;&#x9A8C;&#x8BC1;&#x6B63;&#x786E;&#x6027;)&#x3002;&#x5C3D;&#x7BA1; CSP &#x4E3A;&#x6211;&#x4EEC;&#x63D0;&#x4F9B;&#x4E86;&#x7F16;&#x5199;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x5E38;&#x89C1;&#x5E76;&#x53D1;&#x9519;&#x8BEF;&#x7684;&#x7A0B;&#x5E8F;&#x7684;&#x5DE5;&#x5177;&#xFF0C;&#x4F46;&#x662F;&#x6B63;&#x786E;&#x7A0B;&#x5E8F;&#x7684;&#x8BC1;&#x660E;&#x4ECD;&#x7136;&#x662F; CSP &#x4E2D;&#x5C1A;&#x672A;&#x89E3;&#x51B3;&#x7684;&#x9886;&#x57DF;&#x3002;</p>
<h3 id="4-%E6%9C%AA%E6%9D%A5">4. &#x672A;&#x6765;</h3>
<p>CSP &#x5728;&#x751F;&#x7269;&#x5B66;&#x548C;&#x5316;&#x5B66;&#x9886;&#x57DF;&#x5177;&#x6709;&#x5DE8;&#x5927;&#x7684;&#x6F5C;&#x529B;&#xFF0C;&#x53EF;&#x4EE5;&#x5BF9;&#x81EA;&#x7136;&#x754C;&#x4E2D;&#x7684;&#x590D;&#x6742;&#x7CFB;&#x7EDF;&#x8FDB;&#x884C;&#x5EFA;&#x6A21;&#x3002; &#x7531;&#x4E8E;&#x8BE5;&#x884C;&#x4E1A;&#x9762;&#x4E34;&#x8BB8;&#x591A;&#x73B0;&#x5B58;&#x7684;&#x903B;&#x8F91;&#x95EE;&#x9898;&#xFF0C;&#x56E0;&#x6B64;&#x5C1A;&#x672A;&#x5728;&#x884C;&#x4E1A;&#x4E2D;&#x5E7F;&#x6CDB;&#x4F7F;&#x7528;&#x3002;&#x5728;&#x5173;&#x4E8E; CSP &#x5F00;&#x53D1; 25 &#x5468;&#x5E74;&#x7684;&#x4F1A;&#x8BAE;&#x4E0A;&#xFF0C;Hoare &#x6307;&#x51FA;&#xFF0C;&#x5C3D;&#x7BA1;&#x6709;&#x8BB8;&#x591A;&#x7531; Microsoft &#x8D44;&#x52A9;&#x7684;&#x7814;&#x7A76;&#x9879;&#x76EE;&#xFF0C;&#x4F46;&#x6BD4;&#x5C14;&#xB7;&#x76D6;&#x8328;&#xFF08;Bill Gates&#xFF09;&#x5FFD;&#x7565;&#x4E86; Microsoft &#x4F55;&#x65F6;&#x80FD;&#x591F;&#x5C06; CSP &#x7684;&#x7814;&#x7A76;&#x6210;&#x679C;&#x5546;&#x4E1A;&#x5316;&#x7684;<a href="https://sites.google.com/site/jpbowen/">&#x95EE;&#x9898;</a>&#x3002;</p>
<p>Hoare &#x63D0;&#x9192;&#x4ED6;&#x7684;&#x542C;&#x4F17;&#xFF0C;&#x52A8;&#x6001;&#x8FC7;&#x7A0B;&#x9886;&#x57DF;&#x4ECD;&#x7136;&#x9700;&#x8981;&#x66F4;&#x591A;&#x7684;&#x7814;&#x7A76;&#x3002;&#x5F53;&#x524D;&#xFF0C;&#x8BA1;&#x7B97;&#x673A;&#x79D1;&#x5B66;&#x754C;&#x9677;&#x5165;&#x4E86;&#x987A;&#x5E8F;&#x601D;&#x7EF4;&#x7684;&#x8303;&#x5F0F;&#x3002;&#x968F;&#x7740; Hoare &#x5EFA;&#x7ACB;&#x6B63;&#x5F0F;&#x7684;&#x5E76;&#x53D1;&#x65B9;&#x6CD5;&#x7684;&#x57FA;&#x7840;&#xFF0C;&#x79D1;&#x5B66;&#x754C;&#x5DF2;&#x505A;&#x597D;&#x51C6;&#x5907;&#x6210;&#x4E3A;&#x5E76;&#x884C;&#x7F16;&#x7A0B;&#x7684;&#x4E0B;&#x4E00;&#x4E2A;&#x9769;&#x547D;&#x3002;</p>
<h3 id="5-go-%E5%B9%B6%E5%8F%91%E5%93%B2%E5%AD%A6">5. Go &#x5E76;&#x53D1;&#x54F2;&#x5B66;</h3>
<p>&#x5728; Go &#x8BED;&#x8A00;&#x53D1;&#x5E03;&#x4E4B;&#x524D;&#xFF0C;&#x5F88;&#x5C11;&#x6709;&#x8BED;&#x8A00;&#x4ECE;&#x5E95;&#x5C42;&#x4E3A;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#x63D0;&#x4F9B;&#x652F;&#x6301;&#x3002;&#x5927;&#x591A;&#x6570;&#x8BED;&#x8A00;&#x8FD8;&#x662F;&#x652F;&#x6301;&#x5171;&#x4EAB;&#x548C;&#x5185;&#x5B58;&#x8BBF;&#x95EE;&#x540C;&#x6B65;&#x5230; CSP &#x7684;&#x6D88;&#x606F;&#x4F20;&#x9012;&#x65B9;&#x6CD5;&#x3002;Go &#x8BED;&#x8A00;&#x7B97;&#x662F;&#x6700;&#x65E9;&#x5C06; CSP &#x539F;&#x5219;&#x7EB3;&#x5165;&#x5176;&#x6838;&#x5FC3;&#x7684;&#x8BED;&#x8A00;&#x4E4B;&#x4E00;&#x3002;&#x5185;&#x5B58;&#x8BBF;&#x95EE;&#x540C;&#x6B65;&#x7684;&#x65B9;&#x5F0F;&#x5E76;&#x4E0D;&#x662F;&#x4E0D;&#x597D;&#xFF0C;&#x53EA;&#x662F;&#x5728;&#x9AD8;&#x5E76;&#x53D1;&#x7684;&#x573A;&#x666F;&#x4E0B;&#x6709;&#x65F6;&#x5019;&#x96BE;&#x4EE5;&#x6B63;&#x786E;&#x7684;&#x4F7F;&#x7528;&#xFF0C;&#x7279;&#x522B;&#x662F;&#x5728;&#x8D85;&#x5927;&#x578B;&#xFF0C;&#x5DE8;&#x578B;&#x7684;&#x7A0B;&#x5E8F;&#x4E2D;&#x3002;&#x57FA;&#x4E8E;&#x6B64;&#xFF0C;&#x5E76;&#x53D1;&#x80FD;&#x529B;&#x88AB;&#x8BA4;&#x4E3A;&#x662F; Go &#x8BED;&#x8A00;&#x5929;&#x751F;&#x4F18;&#x52BF;&#x4E4B;&#x4E00;&#x3002;&#x8FFD;&#x5176;&#x6839;&#x672C;&#xFF0C;&#x8FD8;&#x662F;&#x56E0;&#x4E3A; Go &#x57FA;&#x4E8E; CSP &#x521B;&#x9020;&#x51FA;&#x6765;&#x7684;&#x4E00;&#x7CFB;&#x5217;&#x6613;&#x8BFB;&#xFF0C;&#x65B9;&#x4FBF;&#x7F16;&#x5199;&#x7684;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#x3002;</p>
<p>Go &#x8BED;&#x8A00;&#x9664;&#x4E86; CSP &#x5E76;&#x53D1;&#x539F;&#x8BED;&#x4EE5;&#x5916;&#xFF0C;&#x8FD8;&#x652F;&#x6301;&#x901A;&#x8FC7;&#x5185;&#x5B58;&#x8BBF;&#x95EE;&#x540C;&#x6B65;&#x3002;sync &#x4E0E;&#x5176;&#x4ED6;&#x5305;&#x4E2D;&#x7684;&#x7ED3;&#x6784;&#x4F53;&#x4E0E;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x8BA9;&#x5F00;&#x53D1;&#x8005;&#x521B;&#x5EFA; WaitGroup&#xFF0C;&#x4E92;&#x65A5;&#x9501;&#x548C;&#x8BFB;&#x5199;&#x9501;&#xFF0C;cond&#xFF0C;once&#xFF0C;sync.Pool&#x3002;&#x5728; Go &#x8BED;&#x8A00;&#x7684;&#x5B98;&#x65B9; FAQ &#x4E2D;&#xFF0C;&#x63CF;&#x8FF0;&#x4E86;&#x5982;&#x4F55;&#x9009;&#x62E9;&#x8FD9;&#x4E9B;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#xFF1A;</p>
<blockquote>
<p>&#x4E3A;&#x4E86;&#x5C0A;&#x91CD; mutex&#xFF0C;sync &#x5305;&#x5B9E;&#x73B0;&#x4E86; mutex&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x4EEC;&#x5E0C;&#x671B; Go &#x8BED;&#x8A00;&#x7684;&#x7F16;&#x7A0B;&#x98CE;&#x683C;&#x5C06;&#x4F1A;&#x6FC0;&#x52B1;&#x4EBA;&#x4EEC;&#x5C1D;&#x8BD5;&#x66F4;&#x9AD8;&#x7B49;&#x7EA7;&#x7684;&#x6280;&#x5DE7;&#x3002;&#x5C24;&#x5176;&#x662F;&#x8003;&#x8651;&#x6784;&#x5EFA;&#x4F60;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x4EE5;&#x4FBF;&#x4E00;&#x6B21;&#x53EA;&#x6709;&#x4E00;&#x4E2A; goroutine &#x8D1F;&#x8D23;&#x67D0;&#x4E2A;&#x7279;&#x5B9A;&#x7684;&#x6570;&#x636E;&#x3002;</p>
</blockquote>
<p><strong>&#x4E0D;&#x8981;&#x901A;&#x8FC7;&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x8FDB;&#x884C;&#x901A;&#x4FE1;</strong>&#x3002;<strong>&#x5EFA;&#x8BAE;</strong>&#xFF0C;<strong>&#x901A;&#x8FC7;&#x901A;&#x4FE1;&#x6765;&#x5171;&#x4EAB;&#x5185;&#x5B58;</strong>&#x3002;&#xFF08;<strong>Do not communicate by sharing memory; instead, share memory by communicating</strong>&#xFF09;&#x8FD9;&#x662F; Go &#x8BED;&#x8A00;&#x5E76;&#x53D1;&#x7684;&#x54F2;&#x5B66;&#x5EA7;&#x53F3;&#x94ED;&#x3002;&#x76F8;&#x5BF9;&#x4E8E;&#x4F7F;&#x7528; sync.Mutex &#x8FD9;&#x6837;&#x7684;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#x3002;&#x867D;&#x7136;&#x5927;&#x591A;&#x6570;&#x9501;&#x7684;&#x95EE;&#x9898;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; channel &#x6216;&#x8005;&#x4F20;&#x7EDF;&#x7684;&#x9501;&#x4E24;&#x79CD;&#x65B9;&#x5F0F;&#x4E4B;&#x4E00;&#x89E3;&#x51B3;&#xFF0C;&#x4F46;&#x662F; Go &#x8BED;&#x8A00;&#x6838;&#x5FC3;&#x56E2;&#x961F;&#x66F4;&#x52A0;&#x63A8;&#x8350;&#x4F7F;&#x7528; CSP &#x7684;&#x65B9;&#x5F0F;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_4.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x5173;&#x4E8E;&#x5982;&#x4F55;&#x9009;&#x62E9;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x672C;&#x6587;&#x4F5C;&#x4E3A;&#x7B2C;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x5FC5;&#x7136;&#x9700;&#x8981;&#x89E3;&#x91CA;&#x6E05;&#x695A;&#x3002;Go &#x4E2D;&#x7684;&#x5E76;&#x53D1;&#x539F;&#x8BED;&#x4E3B;&#x8981;&#x5206;&#x4E3A; 2 &#x5927;&#x7C7B;&#xFF0C;&#x4E00;&#x4E2A;&#x662F; sync &#x5305;&#x91CC;&#x9762;&#x7684;&#xFF0C;&#x53E6;&#x4E00;&#x4E2A;&#x662F; channel&#x3002;sync &#x5305;&#x91CC;&#x9762;&#x4E3B;&#x8981;&#x662F; WaitGroup&#xFF0C;&#x4E92;&#x65A5;&#x9501;&#x548C;&#x8BFB;&#x5199;&#x9501;&#xFF0C;cond&#xFF0C;once&#xFF0C;sync.Pool &#x8FD9;&#x4E00;&#x7C7B;&#x3002;&#x5728; 2 &#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#x63A8;&#x8350;&#x4F7F;&#x7528; sync &#x5305;&#xFF1A;</p>
<ul>
<li>&#x5BF9;&#x6027;&#x80FD;&#x8981;&#x6C42;&#x6781;&#x9AD8;&#x7684;&#x4E34;&#x754C;&#x533A;</li>
<li>&#x4FDD;&#x62A4;&#x67D0;&#x4E2A;&#x7ED3;&#x6784;&#x5185;&#x90E8;&#x72B6;&#x6001;&#x548C;&#x5B8C;&#x6574;&#x6027;</li>
</ul>
<p>&#x5173;&#x4E8E;&#x4FDD;&#x62A4;&#x67D0;&#x4E2A;&#x7ED3;&#x6784;&#x5185;&#x90E8;&#x7684;&#x72B6;&#x6001;&#x548C;&#x5B8C;&#x6574;&#x6027;&#x3002;&#x4F8B;&#x5982; Go &#x6E90;&#x7801;&#x4E2D;&#x5982;&#x4E0B;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">var sum struct {
	sync.Mutex
	i int
}

//export Add
func Add(x int) {
	defer func() {
		recover()
	}()
	sum.Lock()
	sum.i += x
	sum.Unlock()
	var p *int
	*p = 2
}
</code></pre>
<p>sum &#x8FD9;&#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x4E0D;&#x60F3;&#x5C06;&#x5185;&#x90E8;&#x7684;&#x53D8;&#x91CF;&#x66B4;&#x9732;&#x5728;&#x7ED3;&#x6784;&#x4F53;&#x4E4B;&#x5916;&#xFF0C;&#x6240;&#x4EE5;&#x4F7F;&#x7528; sync.Mutex &#x6765;&#x4FDD;&#x62A4;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x3002;</p>
<p>&#x76F8;&#x5BF9;&#x4E8E; sync &#x5305;&#xFF0C;channel &#x4E5F;&#x6709; 2 &#x79CD;&#x60C5;&#x51B5;&#xFF1A;</p>
<ul>
<li>&#x8F93;&#x51FA;&#x6570;&#x636E;&#x7ED9;&#x5176;&#x4ED6;&#x4F7F;&#x7528;&#x65B9;</li>
<li>&#x7EC4;&#x5408;&#x591A;&#x4E2A;&#x903B;&#x8F91;</li>
</ul>
<p>&#x8F93;&#x51FA;&#x6570;&#x636E;&#x7ED9;&#x5176;&#x4ED6;&#x4F7F;&#x7528;&#x65B9;&#x7684;&#x76EE;&#x7684;&#x662F;&#x8F6C;&#x79FB;&#x6570;&#x636E;&#x7684;&#x4F7F;&#x7528;&#x6743;&#x3002;&#x5E76;&#x53D1;&#x5B89;&#x5168;&#x7684;&#x5B9E;&#x8D28;&#x662F;&#x4FDD;&#x8BC1;&#x540C;&#x65F6;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x5E76;&#x53D1;&#x4E0A;&#x4E0B;&#x6587;&#x62E5;&#x6709;&#x6570;&#x636E;&#x7684;&#x6240;&#x6709;&#x6743;&#x3002;channel &#x53EF;&#x4EE5;&#x5F88;&#x65B9;&#x4FBF;&#x7684;&#x5C06;&#x6570;&#x636E;&#x6240;&#x6709;&#x6743;&#x8F6C;&#x7ED9;&#x5176;&#x4ED6;&#x4F7F;&#x7528;&#x65B9;&#x3002;&#x53E6;&#x4E00;&#x4E2A;&#x4F18;&#x52BF;&#x662F;&#x7EC4;&#x5408;&#x578B;&#x3002;&#x5982;&#x679C;&#x4F7F;&#x7528; sync &#x91CC;&#x9762;&#x7684;&#x9501;&#xFF0C;&#x60F3;&#x5B9E;&#x73B0;&#x7EC4;&#x5408;&#x591A;&#x4E2A;&#x903B;&#x8F91;&#x5E76;&#x4E14;&#x4FDD;&#x8BC1;&#x5E76;&#x53D1;&#x5B89;&#x5168;&#xFF0C;&#x662F;&#x6BD4;&#x8F83;&#x56F0;&#x96BE;&#x7684;&#x3002;&#x4F46;&#x662F;&#x4F7F;&#x7528; channel + select &#x5B9E;&#x73B0;&#x7EC4;&#x5408;&#x903B;&#x8F91;&#x5B9E;&#x5728;&#x592A;&#x65B9;&#x4FBF;&#x4E86;&#x3002;&#x4EE5;&#x4E0A;&#x5C31;&#x662F; CSP &#x7684;&#x57FA;&#x672C;&#x6982;&#x5FF5;&#x548C;&#x4F55;&#x65F6;&#x9009;&#x62E9; channel &#x7684;&#x65F6;&#x673A;&#x3002;&#x4E0B;&#x4E00;&#x7AE0;&#x4ECE; channel &#x57FA;&#x672C;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5F00;&#x59CB;&#x8BE6;&#x7EC6;&#x5206;&#x6790; channel &#x5E95;&#x5C42;&#x6E90;&#x7801;&#x5B9E;&#x73B0;&#x3002;</p>
<blockquote>
<p>&#x4EE5;&#x4E0B;&#x4EE3;&#x7801;&#x57FA;&#x4E8E; Go 1.16</p>
</blockquote>
<h2 id="%E4%BA%8C-%E5%9F%BA%E6%9C%AC%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84">&#x4E8C;. &#x57FA;&#x672C;&#x6570;&#x636E;&#x7ED3;&#x6784;</h2>
<p>channel &#x7684;&#x5E95;&#x5C42;&#x6E90;&#x7801;&#x548C;&#x76F8;&#x5173;&#x5B9E;&#x73B0;&#x5728; src/runtime/chan.go &#x4E2D;&#x3002;</p>
<pre><code class="language-go">type hchan struct {
	qcount   uint           // &#x961F;&#x5217;&#x4E2D;&#x6240;&#x6709;&#x6570;&#x636E;&#x603B;&#x6570;
	dataqsiz uint           // &#x73AF;&#x5F62;&#x961F;&#x5217;&#x7684; size
	buf      unsafe.Pointer // &#x6307;&#x5411; dataqsiz &#x957F;&#x5EA6;&#x7684;&#x6570;&#x7EC4;
	elemsize uint16         // &#x5143;&#x7D20;&#x5927;&#x5C0F;
	closed   uint32
	elemtype *_type         // &#x5143;&#x7D20;&#x7C7B;&#x578B;
	sendx    uint           // &#x5DF2;&#x53D1;&#x9001;&#x7684;&#x5143;&#x7D20;&#x5728;&#x73AF;&#x5F62;&#x961F;&#x5217;&#x4E2D;&#x7684;&#x4F4D;&#x7F6E;
	recvx    uint           // &#x5DF2;&#x63A5;&#x6536;&#x7684;&#x5143;&#x7D20;&#x5728;&#x73AF;&#x5F62;&#x961F;&#x5217;&#x4E2D;&#x7684;&#x4F4D;&#x7F6E;
	recvq    waitq          // &#x63A5;&#x6536;&#x8005;&#x7684;&#x7B49;&#x5F85;&#x961F;&#x5217;
	sendq    waitq          // &#x53D1;&#x9001;&#x8005;&#x7684;&#x7B49;&#x5F85;&#x961F;&#x5217;

	lock mutex
}
</code></pre>
<p>lock &#x9501;&#x4FDD;&#x62A4; hchan &#x4E2D;&#x7684;&#x6240;&#x6709;&#x5B57;&#x6BB5;&#xFF0C;&#x4EE5;&#x53CA;&#x6B64;&#x901A;&#x9053;&#x4E0A;&#x88AB;&#x963B;&#x585E;&#x7684; sudogs &#x4E2D;&#x7684;&#x591A;&#x4E2A;&#x5B57;&#x6BB5;&#x3002;&#x6301;&#x6709; lock &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7981;&#x6B62;&#x66F4;&#x6539;&#x53E6;&#x4E00;&#x4E2A; G &#x7684;&#x72B6;&#x6001;&#xFF08;&#x7279;&#x522B;&#x662F;&#x4E0D;&#x8981;&#x4F7F; G &#x72B6;&#x6001;&#x53D8;&#x6210;ready&#xFF09;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x4F1A;&#x56E0;&#x4E3A;&#x5806;&#x6808; shrinking &#x800C;&#x53D1;&#x751F;&#x6B7B;&#x9501;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_5_.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>recvq &#x548C; sendq &#x662F;&#x7B49;&#x5F85;&#x961F;&#x5217;&#xFF0C;waitq &#x662F;&#x4E00;&#x4E2A;&#x53CC;&#x5411;&#x94FE;&#x8868;&#xFF1A;</p>
<pre><code class="language-go">type waitq struct {
	first *sudog
	last  *sudog
}
</code></pre>
<p>channel &#x6700;&#x6838;&#x5FC3;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x662F; sudog&#x3002;sudog &#x4EE3;&#x8868;&#x4E86;&#x4E00;&#x4E2A;&#x5728;&#x7B49;&#x5F85;&#x961F;&#x5217;&#x4E2D;&#x7684; g&#x3002;sudog &#x662F; Go &#x4E2D;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x56E0;&#x4E3A; g &#x4E0E;&#x540C;&#x6B65;&#x5BF9;&#x8C61;&#x5173;&#x7CFB;&#x662F;&#x591A;&#x5BF9;&#x591A;&#x7684;&#x3002;&#x4E00;&#x4E2A; g &#x53EF;&#x4EE5;&#x51FA;&#x73B0;&#x5728;&#x8BB8;&#x591A;&#x7B49;&#x5F85;&#x961F;&#x5217;&#x4E0A;&#xFF0C;&#x56E0;&#x6B64;&#x4E00;&#x4E2A; g &#x53EF;&#x80FD;&#x6709;&#x5F88;&#x591A;sudog&#x3002;&#x5E76;&#x4E14;&#x591A;&#x4E2A; g &#x53EF;&#x80FD;&#x6B63;&#x5728;&#x7B49;&#x5F85;&#x540C;&#x4E00;&#x4E2A;&#x540C;&#x6B65;&#x5BF9;&#x8C61;&#xFF0C;&#x56E0;&#x6B64;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x53EF;&#x80FD;&#x6709;&#x8BB8;&#x591A; sudog&#x3002;sudog &#x662F;&#x4ECE;&#x7279;&#x6B8A;&#x6C60;&#x4E2D;&#x5206;&#x914D;&#x51FA;&#x6765;&#x7684;&#x3002;&#x4F7F;&#x7528; acquireSudog &#x548C; releaseSudog &#x5206;&#x914D;&#x548C;&#x91CA;&#x653E;&#x5B83;&#x4EEC;&#x3002;</p>
<pre><code class="language-go">type sudog struct {

	g *g

	next *sudog
	prev *sudog
	elem unsafe.Pointer // &#x6307;&#x5411;&#x6570;&#x636E; (&#x53EF;&#x80FD;&#x6307;&#x5411;&#x6808;)

	acquiretime int64
	releasetime int64
	ticket      uint32

	isSelect bool
	success bool

	parent   *sudog     // semaRoot &#x4E8C;&#x53C9;&#x6811;
	waitlink *sudog     // g.waiting &#x5217;&#x8868;&#x6216;&#x8005; semaRoot
	waittail *sudog     // semaRoot
	c        *hchan     // channel
}
</code></pre>
<p>sudog &#x4E2D;&#x6240;&#x6709;&#x5B57;&#x6BB5;&#x90FD;&#x53D7; hchan.lock &#x4FDD;&#x62A4;&#x3002;acquiretime&#x3001;releasetime&#x3001;ticket &#x8FD9;&#x4E09;&#x4E2A;&#x5B57;&#x6BB5;&#x6C38;&#x8FDC;&#x4E0D;&#x4F1A;&#x88AB;&#x540C;&#x65F6;&#x8BBF;&#x95EE;&#x3002;&#x5BF9; channel &#x6765;&#x8BF4;&#xFF0C;waitlink &#x53EA;&#x7531; g &#x4F7F;&#x7528;&#x3002;&#x5BF9; semaphores &#x6765;&#x8BF4;&#xFF0C;&#x53EA;&#x6709;&#x5728;&#x6301;&#x6709; semaRoot &#x9501;&#x7684;&#x65F6;&#x5019;&#x624D;&#x80FD;&#x8BBF;&#x95EE;&#x8FD9;&#x4E09;&#x4E2A;&#x5B57;&#x6BB5;&#x3002;isSelect &#x8868;&#x793A; g &#x662F;&#x5426;&#x88AB;&#x9009;&#x62E9;&#xFF0C;g.selectDone &#x5FC5;&#x987B;&#x8FDB;&#x884C; CAS &#x624D;&#x80FD;&#x5728;&#x88AB;&#x5524;&#x9192;&#x7684;&#x7ADE;&#x4E89;&#x4E2D;&#x80DC;&#x51FA;&#x3002;success &#x8868;&#x793A; channel c &#x4E0A;&#x7684;&#x901A;&#x4FE1;&#x662F;&#x5426;&#x6210;&#x529F;&#x3002;&#x5982;&#x679C; goroutine &#x5728; channel c &#x4E0A;&#x4F20;&#x4E86;&#x4E00;&#x4E2A;&#x503C;&#x800C;&#x88AB;&#x5524;&#x9192;&#xFF0C;&#x5219;&#x4E3A; true&#xFF1B;&#x5982;&#x679C;&#x56E0;&#x4E3A; c &#x5173;&#x95ED;&#x800C;&#x88AB;&#x5524;&#x9192;&#xFF0C;&#x5219;&#x4E3A; false&#x3002;</p>
<h2 id="%E4%B8%89-%E5%88%9B%E5%BB%BA-channel">&#x4E09;. &#x521B;&#x5EFA; Channel</h2>
<p>&#x521B;&#x5EFA; channel &#x5E38;&#x89C1;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">ch := make(chan int)
</code></pre>
<p>&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#xFF0C;&#x5728;&#x68C0;&#x67E5; ir &#x8282;&#x70B9;&#x65F6;&#xFF0C;&#x6839;&#x636E;&#x8282;&#x70B9; op &#x4E0D;&#x540C;&#x7C7B;&#x578B;&#xFF0C;&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x4E0B;&#x6E90;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">func walkExpr1(n ir.Node, init *ir.Nodes) ir.Node {
	switch n.Op() {
	default:
		ir.Dump(&quot;walk&quot;, n)
		base.Fatalf(&quot;walkExpr: switch 1 unknown op %+v&quot;, n.Op())
		panic(&quot;unreachable&quot;)

	case ir.OMAKECHAN:
		n := n.(*ir.MakeExpr)
		return walkMakeChan(n, init)

	......
}
</code></pre>
<p>&#x7F16;&#x8BD1;&#x5668;&#x4F1A;&#x68C0;&#x67E5;&#x6BCF;&#x4E00;&#x79CD;&#x7C7B;&#x578B;&#xFF0C;walkExpr1() &#x7684;&#x5B9E;&#x73B0;&#x5C31;&#x662F;&#x4E00;&#x4E2A; switch-case&#xFF0C;&#x51FD;&#x6570;&#x672B;&#x5C3E;&#x6CA1;&#x6709; return&#xFF0C;&#x56E0;&#x4E3A;&#x6BCF;&#x4E00;&#x4E2A; case &#x90FD;&#x4F1A; return &#x6216;&#x8005;&#x8FD4;&#x56DE; panic&#x3002;&#x8FD9;&#x6837;&#x505A;&#x662F;&#x4E3A;&#x4E86;&#x4E0E;&#x5B58;&#x5728;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x7684;&#x60C5;&#x51B5;&#x4E2D;&#x8FD4;&#x56DE;&#x7684;&#x5185;&#x5BB9;&#x505A;&#x533A;&#x5206;&#x3002;walk &#x5177;&#x4F53;&#x5904;&#x7406; OMAKECHAN &#x7C7B;&#x578B;&#x8282;&#x70B9;&#x7684;&#x903B;&#x8F91;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func walkMakeChan(n *ir.MakeExpr, init *ir.Nodes) ir.Node {
	size := n.Len
	fnname := &quot;makechan64&quot;
	argtype := types.Types[types.TINT64]

	if size.Type().IsKind(types.TIDEAL) || size.Type().Size() &lt;= types.Types[types.TUINT].Size() {
		fnname = &quot;makechan&quot;
		argtype = types.Types[types.TINT]
	}

	return mkcall1(chanfn(fnname, 1, n.Type()), n.Type(), init, reflectdata.TypePtr(n.Type()), typecheck.Conv(size, argtype))
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x9ED8;&#x8BA4;&#x8C03;&#x7528; makechan64() &#x51FD;&#x6570;&#x3002;&#x7C7B;&#x578B;&#x68C0;&#x67E5;&#x65F6;&#x5982;&#x679C; TIDEAL &#x5927;&#x5C0F;&#x5728; int &#x8303;&#x56F4;&#x5185;&#x3002;&#x5C06; TUINT &#x6216; TUINTPTR &#x8F6C;&#x6362;&#x4E3A; TINT &#x65F6;&#x51FA;&#x73B0;&#x5927;&#x5C0F;&#x6EA2;&#x51FA;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5C06;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x5728; makechan &#x4E2D;&#x8FDB;&#x884C;&#x68C0;&#x67E5;&#x3002;&#x5982;&#x679C;&#x5728; make &#x51FD;&#x6570;&#x4E2D;&#x4F20;&#x5165;&#x7684; channel size &#x5927;&#x5C0F;&#x5728; int &#x8303;&#x56F4;&#x5185;&#xFF0C;&#x63A8;&#x8350;&#x4F7F;&#x7528; makechan()&#x3002;&#x56E0;&#x4E3A; makechan() &#x5728; 32 &#x4F4D;&#x7684;&#x5E73;&#x53F0;&#x4E0A;&#x66F4;&#x5FEB;&#xFF0C;&#x7528;&#x7684;&#x5185;&#x5B58;&#x66F4;&#x5C11;&#x3002;</p>
<p>makechan64() &#x548C; makechan() &#x51FD;&#x6570;&#x65B9;&#x6CD5;&#x539F;&#x578B;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func makechan64(chanType *byte, size int64) (hchan chan any)
func makechan(chanType *byte, size int) (hchan chan any)
</code></pre>
<p>makechan64() &#x65B9;&#x6CD5;&#x53EA;&#x662F;&#x5224;&#x65AD;&#x4E00;&#x4E0B;&#x4F20;&#x5165;&#x7684;&#x5165;&#x53C2; size &#x662F;&#x5426;&#x8FD8;&#x5728; int &#x8303;&#x56F4;&#x4E4B;&#x5185;&#xFF1A;</p>
<pre><code class="language-go">func makechan64(t *chantype, size int64) *hchan {
	if int64(int(size)) != size {
		panic(plainError(&quot;makechan: size out of range&quot;))
	}

	return makechan(t, int(size))
}
</code></pre>
<p>&#x521B;&#x5EFA; channel &#x7684;&#x4E3B;&#x8981;&#x5B9E;&#x73B0;&#x5728; makechan() &#x51FD;&#x6570;&#x4E2D;&#xFF1A;</p>
<pre><code class="language-go">func makechan(t *chantype, size int) *hchan {
	elem := t.elem

	// &#x7F16;&#x8BD1;&#x5668;&#x68C0;&#x67E5;&#x6570;&#x636E;&#x9879;&#x5927;&#x5C0F;&#x4E0D;&#x80FD;&#x8D85;&#x8FC7; 64KB
	if elem.size &gt;= 1&lt;&lt;16 {
		throw(&quot;makechan: invalid channel element type&quot;)
	}
	// &#x68C0;&#x67E5;&#x5BF9;&#x9F50;&#x662F;&#x5426;&#x6B63;&#x786E;
	if hchanSize%maxAlign != 0 || elem.align &gt; maxAlign {
		throw(&quot;makechan: bad alignment&quot;)
	}
    // &#x7F13;&#x51B2;&#x533A;&#x5927;&#x5C0F;&#x68C0;&#x67E5;&#xFF0C;&#x5224;&#x65AD;&#x662F;&#x5426;&#x6EA2;&#x51FA;
	mem, overflow := math.MulUintptr(elem.size, uintptr(size))
	if overflow || mem &gt; maxAlloc-hchanSize || size &lt; 0 {
		panic(plainError(&quot;makechan: size out of range&quot;))
	}

	var c *hchan
	switch {
	case mem == 0:
		// &#x961F;&#x5217;&#x6216;&#x8005;&#x5143;&#x7D20;&#x5927;&#x5C0F;&#x4E3A; zero &#x65F6;
		c = (*hchan)(mallocgc(hchanSize, nil, true))
		// Race &#x7ADE;&#x4E89;&#x68C0;&#x67E5;&#x5229;&#x7528;&#x8FD9;&#x4E2A;&#x5730;&#x5740;&#x6765;&#x8FDB;&#x884C;&#x540C;&#x6B65;&#x64CD;&#x4F5C;
		c.buf = c.raceaddr()
	case elem.ptrdata == 0:
		// &#x5143;&#x7D20;&#x4E0D;&#x5305;&#x542B;&#x6307;&#x9488;&#x65F6;&#x3002;&#x4E00;&#x6B21;&#x5206;&#x914D; hchan &#x548C; buf &#x7684;&#x5185;&#x5B58;&#x3002;
		c = (*hchan)(mallocgc(hchanSize+mem, nil, true))
		c.buf = add(unsafe.Pointer(c), hchanSize)
	default:
		// &#x5143;&#x7D20;&#x5305;&#x542B;&#x6307;&#x9488;&#x65F6;
		c = new(hchan)
		c.buf = mallocgc(mem, elem, true)
	}

    // &#x8BBE;&#x7F6E;&#x5C5E;&#x6027;
	c.elemsize = uint16(elem.size)
	c.elemtype = elem
	c.dataqsiz = uint(size)
	lockInit(&amp;c.lock, lockRankHchan)

	if debugChan {
		print(&quot;makechan: chan=&quot;, c, &quot;; elemsize=&quot;, elem.size, &quot;; dataqsiz=&quot;, size, &quot;\n&quot;)
	}
	return c
}
</code></pre>
<p>&#x4E0A;&#x9762;&#x8FD9;&#x6BB5; makechan() &#x4EE3;&#x7801;&#x4E3B;&#x8981;&#x76EE;&#x7684;&#x662F;&#x751F;&#x6210; *hchan &#x5BF9;&#x8C61;&#x3002;&#x91CD;&#x70B9;&#x5173;&#x6CE8; switch-case &#x4E2D;&#x7684; 3 &#x79CD;&#x60C5;&#x51B5;&#xFF1A;</p>
<ul>
<li>&#x5F53;&#x961F;&#x5217;&#x6216;&#x8005;&#x5143;&#x7D20;&#x5927;&#x5C0F;&#x4E3A; 0 &#x65F6;&#xFF0C;&#x8C03;&#x7528; mallocgc() &#x5728;&#x5806;&#x4E0A;&#x4E3A; channel &#x5F00;&#x8F9F;&#x4E00;&#x6BB5;&#x5927;&#x5C0F;&#x4E3A; hchanSize &#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x3002;</li>
<li>&#x5F53;&#x5143;&#x7D20;&#x7C7B;&#x578B;&#x4E0D;&#x662F;&#x6307;&#x9488;&#x7C7B;&#x578B;&#x65F6;&#xFF0C;&#x8C03;&#x7528; mallocgc() &#x5728;&#x5806;&#x4E0A;&#x5F00;&#x8F9F;&#x4E3A; channel &#x548C;&#x5E95;&#x5C42; buf &#x7F13;&#x51B2;&#x533A;&#x6570;&#x7EC4;&#x5F00;&#x8F9F;&#x4E00;&#x6BB5;&#x5927;&#x5C0F;&#x4E3A; hchanSize + mem &#x8FDE;&#x7EED;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#x3002;</li>
<li>&#x9ED8;&#x8BA4;&#x60C5;&#x51B5;&#x5143;&#x7D20;&#x7C7B;&#x578B;&#x4E2D;&#x6709;&#x6307;&#x9488;&#x7C7B;&#x578B;&#xFF0C;&#x8C03;&#x7528; mallocgc() &#x5728;&#x5806;&#x4E0A;&#x5206;&#x522B;&#x4E3A; channel &#x548C; buf &#x7F13;&#x51B2;&#x533A;&#x5206;&#x914D;&#x5185;&#x5B58;&#x3002;</li>
</ul>
<p>&#x5B8C;&#x6210;&#x7B2C;&#x4E00;&#x6B65;&#x7684;&#x5185;&#x5B58;&#x5206;&#x914D;&#x4E4B;&#x540E;&#xFF0C;&#x518D;&#x5C31;&#x662F; hchan &#x6570;&#x636E;&#x7ED3;&#x6784;&#x5176;&#x4ED6;&#x5B57;&#x6BB5;&#x7684;&#x521D;&#x59CB;&#x5316;&#x548C; lock &#x7684;&#x521D;&#x59CB;&#x5316;&#x3002;&#x503C;&#x5F97;&#x8BF4;&#x660E;&#x7684;&#x4E00;&#x70B9;&#x662F;&#xFF0C;&#x5F53;&#x5B58;&#x50A8;&#x5728; buf &#x4E2D;&#x7684;&#x5143;&#x7D20;&#x4E0D;&#x5305;&#x542B;&#x6307;&#x9488;&#x65F6;&#xFF0C;Hchan &#x4E2D;&#x4E5F;&#x4E0D;&#x5305;&#x542B; GC &#x5173;&#x5FC3;&#x7684;&#x6307;&#x9488;&#x3002;buf &#x6307;&#x5411;&#x4E00;&#x6BB5;&#x76F8;&#x540C;&#x5143;&#x7D20;&#x7C7B;&#x578B;&#x7684;&#x5185;&#x5B58;&#xFF0C;elemtype &#x56FA;&#x5B9A;&#x4E0D;&#x53D8;&#x3002;SudoG &#x662F;&#x4ECE;&#x5B83;&#x4EEC;&#x81EA;&#x5DF1;&#x7684;&#x7EBF;&#x7A0B;&#x4E2D;&#x5F15;&#x7528;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x5783;&#x573E;&#x56DE;&#x6536;&#x7684;&#x65F6;&#x5019;&#x65E0;&#x6CD5;&#x56DE;&#x6536;&#x5B83;&#x4EEC;&#x3002;&#x53D7;&#x5230;&#x5783;&#x573E;&#x56DE;&#x6536;&#x5668;&#x7684;&#x9650;&#x5236;&#xFF0C;&#x6307;&#x9488;&#x7C7B;&#x578B;&#x7684;&#x7F13;&#x51B2; buf &#x9700;&#x8981;&#x5355;&#x72EC;&#x5206;&#x914D;&#x5185;&#x5B58;&#x3002;&#x5B98;&#x65B9;&#x5728;&#x8FD9;&#x91CC;&#x52A0;&#x4E86;&#x4E00;&#x4E2A; TODO&#xFF0C;&#x5783;&#x573E;&#x56DE;&#x6536;&#x7684;&#x65F6;&#x5019;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x8003;&#x8651;&#x3002;</p>
<blockquote>
<p>&#x5C31;&#x662F;&#x56E0;&#x4E3A; channel &#x7684;&#x521B;&#x5EFA;&#x5168;&#x90E8;&#x8C03;&#x7528;&#x7684; mallocgc()&#xFF0C;&#x5728;&#x5806;&#x4E0A;&#x5F00;&#x8F9F;&#x7684;&#x5185;&#x5B58;&#x7A7A;&#x95F4;&#xFF0C;channel &#x672C;&#x8EAB;&#x4F1A;&#x88AB; GC &#x81EA;&#x52A8;&#x56DE;&#x6536;&#x3002;&#x6709;&#x4E86;&#x8FD9;&#x4E00;&#x6027;&#x8D28;&#xFF0C;&#x6240;&#x4EE5;&#x624D;&#x6709;&#x4E86;&#x4E0B;&#x6587;&#x5173;&#x95ED; channel &#x4E2D;&#x4F18;&#x96C5;&#x5173;&#x95ED;&#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
</blockquote>
<h2 id="%E5%9B%9B-%E5%8F%91%E9%80%81%E6%95%B0%E6%8D%AE">&#x56DB;. &#x53D1;&#x9001;&#x6570;&#x636E;</h2>
<p>&#x5411; channel &#x4E2D;&#x53D1;&#x9001;&#x6570;&#x636E;&#x5E38;&#x89C1;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">ch &lt;- 1
</code></pre>
<p>&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#xFF0C;&#x5728;&#x68C0;&#x67E5; ir &#x8282;&#x70B9;&#x65F6;&#xFF0C;&#x6839;&#x636E;&#x8282;&#x70B9; op &#x4E0D;&#x540C;&#x7C7B;&#x578B;&#xFF0C;&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x4E0B;&#x6E90;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">func walkExpr1(n ir.Node, init *ir.Nodes) ir.Node {
	switch n.Op() {
	default:
		ir.Dump(&quot;walk&quot;, n)
		base.Fatalf(&quot;walkExpr: switch 1 unknown op %+v&quot;, n.Op())
		panic(&quot;unreachable&quot;)

	case ir.OSEND:
		n := n.(*ir.SendStmt)
		return walkSend(n, init)

	......
}
</code></pre>
<p>walkExpr1() &#x51FD;&#x6570;&#x5728;&#x521B;&#x5EFA; channel &#x63D0;&#x5230;&#x4E86;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;&#x64CD;&#x4F5C;&#x7C7B;&#x578B;&#x662F; OSEND&#xFF0C;&#x5BF9;&#x5E94;&#x8C03;&#x7528; walkSend() &#x51FD;&#x6570;&#xFF1A;</p>
<pre><code class="language-go">func walkSend(n *ir.SendStmt, init *ir.Nodes) ir.Node {
	n1 := n.Value
	n1 = typecheck.AssignConv(n1, n.Chan.Type().Elem(), &quot;chan send&quot;)
	n1 = walkExpr(n1, init)
	n1 = typecheck.NodAddr(n1)
	return mkcall1(chanfn(&quot;chansend1&quot;, 2, n.Chan.Type()), nil, init, n.Chan, n1)
}

// entry point for c &lt;- x from compiled code
//go:nosplit
func chansend1(c *hchan, elem unsafe.Pointer) {
	chansend(c, elem, true, getcallerpc())
}
</code></pre>
<p>walkSend() &#x51FD;&#x6570;&#x4E2D;&#x4E3B;&#x8981;&#x903B;&#x8F91;&#x8C03;&#x7528;&#x4E86; chansend1()&#xFF0C;&#x800C; chansend1() &#x53EA;&#x662F; chansend() &#x7684;&#x201C;&#x5916;&#x58F3;&#x201D;&#x3002;&#x6240;&#x4EE5; channel &#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;&#x6838;&#x5FC3;&#x5B9E;&#x73B0;&#x5728; chansend() &#x4E2D;&#x3002;&#x6839;&#x636E; channel &#x7684;&#x963B;&#x585E;&#x548C;&#x5524;&#x9192;&#xFF0C;&#x53C8;&#x53EF;&#x4EE5;&#x5206;&#x4E3A; 2 &#x90E8;&#x5206;&#x903B;&#x8F91;&#x4EE3;&#x7801;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x7B14;&#x8005;&#x8BB2; chansend() &#x4EE3;&#x7801;&#x62C6;&#x6210; 4 &#x90E8;&#x5206;&#x8BE6;&#x7EC6;&#x5206;&#x6790;&#x3002;</p>
<h3 id="1-%E5%BC%82%E5%B8%B8%E6%A3%80%E6%9F%A5">1. &#x5F02;&#x5E38;&#x68C0;&#x67E5;</h3>
<p>chansend() &#x51FD;&#x6570;&#x4E00;&#x5F00;&#x59CB;&#x5148;&#x8FDB;&#x884C;&#x5F02;&#x5E38;&#x68C0;&#x67E5;&#xFF1A;</p>
<pre><code class="language-go">func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool {
    // &#x5224;&#x65AD; channel &#x662F;&#x5426;&#x4E3A; nil
	if c == nil {
		if !block {
			return false
		}
		gopark(nil, nil, waitReasonChanSendNilChan, traceEvGoStop, 2)
		throw(&quot;unreachable&quot;)
	}

	if debugChan {
		print(&quot;chansend: chan=&quot;, c, &quot;\n&quot;)
	}

	if raceenabled {
		racereadpc(c.raceaddr(), callerpc, funcPC(chansend))
	}

	// &#x7B80;&#x6613;&#x5FEB;&#x901F;&#x7684;&#x68C0;&#x67E5;
	if !block &amp;&amp; c.closed == 0 &amp;&amp; full(c) {
		return false
	}
......
}
</code></pre>
<p>chansend() &#x4E00;&#x4E0A;&#x6765;&#x5BF9; channel &#x8FDB;&#x884C;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x679C;&#x88AB; GC &#x56DE;&#x6536;&#x4E86;&#x4F1A;&#x53D8;&#x4E3A; nil&#x3002;&#x671D;&#x4E00;&#x4E2A;&#x4E3A; nil &#x7684; channel &#x53D1;&#x9001;&#x6570;&#x636E;&#x4F1A;&#x53D1;&#x751F;&#x963B;&#x585E;&#x3002;gopark &#x4F1A;&#x5F15;&#x53D1;&#x4EE5; waitReasonChanSendNilChan &#x4E3A;&#x539F;&#x56E0;&#x7684;&#x4F11;&#x7720;&#xFF0C;&#x5E76;&#x629B;&#x51FA; unreachable &#x7684; fatal error&#x3002;&#x5F53; channel &#x4E0D;&#x4E3A; nil&#xFF0C;&#x518D;&#x5F00;&#x59CB;&#x68C0;&#x67E5;&#x5728;&#x6CA1;&#x6709;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4F1A;&#x5BFC;&#x81F4;&#x53D1;&#x9001;&#x5931;&#x8D25;&#x7684;&#x975E;&#x963B;&#x585E;&#x64CD;&#x4F5C;&#x3002;</p>
<p>&#x5F53; channel &#x4E0D;&#x4E3A; nil&#xFF0C;&#x5E76;&#x4E14; channel &#x6CA1;&#x6709; close &#x65F6;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x68C0;&#x67E5;&#x6B64;&#x65F6; channel &#x662F;&#x5426;&#x505A;&#x597D;&#x53D1;&#x9001;&#x7684;&#x51C6;&#x5907;&#xFF0C;&#x5373;&#x5224;&#x65AD; full(c)</p>
<pre><code class="language-go">func full(c *hchan) bool {
	if c.dataqsiz == 0 {
		// &#x5047;&#x8BBE;&#x6307;&#x9488;&#x8BFB;&#x53D6;&#x662F;&#x8FD1;&#x4F3C;&#x539F;&#x5B50;&#x6027;&#x7684;
		return c.recvq.first == nil
	}
	// &#x5047;&#x8BBE;&#x8BFB;&#x53D6; uint &#x662F;&#x8FD1;&#x4F3C;&#x539F;&#x5B50;&#x6027;&#x7684;
	return c.qcount == c.dataqsiz
}
</code></pre>
<p>full() &#x65B9;&#x6CD5;&#x4F5C;&#x7528;&#x662F;&#x5224;&#x65AD;&#x5728; channel &#x4E0A;&#x53D1;&#x9001;&#x662F;&#x5426;&#x4F1A;&#x963B;&#x585E;&#xFF08;&#x5373;&#x901A;&#x9053;&#x5DF2;&#x6EE1;&#xFF09;&#x3002;&#x5B83;&#x8BFB;&#x53D6;&#x5355;&#x4E2A;&#x5B57;&#x8282;&#x5927;&#x5C0F;&#x7684;&#x53EF;&#x53D8;&#x72B6;&#x6001;(recvq.first &#x548C; qcount)&#xFF0C;&#x5C3D;&#x7BA1;&#x7B54;&#x6848;&#x53EF;&#x80FD;&#x5728;&#x4E00;&#x77AC;&#x95F4;&#x662F; true&#xFF0C;&#x4F46;&#x5728;&#x8C03;&#x7528;&#x51FD;&#x6570;&#x6536;&#x5230;&#x8FD4;&#x56DE;&#x503C;&#x65F6;&#xFF0C;&#x6B63;&#x786E;&#x7684;&#x7ED3;&#x679C;&#x53EF;&#x80FD;&#x53D1;&#x751F;&#x4E86;&#x66F4;&#x6539;&#x3002;&#x503C;&#x5F97;&#x6CE8;&#x610F;&#x7684;&#x662F; dataqsiz &#x5B57;&#x6BB5;&#xFF0C;&#x5B83;&#x5728;&#x521B;&#x5EFA;&#x5B8C; channel &#x4EE5;&#x540E;&#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x7684;&#xFF0C;&#x56E0;&#x6B64;&#x5B83;&#x53EF;&#x4EE5;&#x5B89;&#x5168;&#x7684;&#x5728;&#x4EFB;&#x610F;&#x65F6;&#x523B;&#x8BFB;&#x53D6;&#x3002;</p>
<p>&#x56DE;&#x5230; chansend() &#x5F02;&#x5E38;&#x68C0;&#x67E5;&#x4E2D;&#x3002;&#x4E00;&#x4E2A;&#x5DF2;&#x7ECF; close &#x7684; channel &#x662F;&#x4E0D;&#x53EF;&#x80FD;&#x4ECE;&#x201C;&#x51C6;&#x5907;&#x53D1;&#x9001;&#x201D;&#x7684;&#x72B6;&#x6001;&#x53D8;&#x4E3A;&#x201C;&#x672A;&#x51C6;&#x5907;&#x597D;&#x53D1;&#x9001;&#x201D;&#x7684;&#x72B6;&#x6001;&#x3002;&#x6240;&#x4EE5;&#x5728;&#x68C0;&#x67E5;&#x5B8C; channel &#x662F;&#x5426; close &#x4EE5;&#x540E;&#xFF0C;&#x5C31;&#x7B97; channel close &#x4E86;&#xFF0C;&#x4E5F;&#x4E0D;&#x5F71;&#x54CD;&#x6B64;&#x5904;&#x68C0;&#x67E5;&#x7684;&#x7ED3;&#x679C;&#x3002;&#x53EF;&#x80FD;&#x6709;&#x8BFB;&#x8005;&#x7591;&#x60D1;&#xFF0C;&#x201C;&#x80FD;&#x4E0D;&#x80FD;&#x628A;&#x68C0;&#x67E5;&#x987A;&#x5E8F;&#x5012;&#x4E00;&#x5012;&#xFF1F;&#x5148;&#x68C0;&#x67E5;&#x662F;&#x5426; full()&#xFF0C;&#x518D;&#x68C0;&#x67E5;&#x662F;&#x5426; close&#xFF1F;&#x201D;&#x3002;&#x8FD9;&#x6837;&#x5012;&#x8FC7;&#x6765;&#x786E;&#x5B9E;&#x80FD;&#x4FDD;&#x8BC1;&#x68C0;&#x67E5; full() &#x7684;&#x65F6;&#x5019;&#xFF0C;channel &#x6CA1;&#x6709; close&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x79CD;&#x505A;&#x6CD5;&#x4E5F;&#x6CA1;&#x6709;&#x5B9E;&#x8D28;&#x6027;&#x7684;&#x6539;&#x53D8;&#x3002;channel &#x4F9D;&#x65E7;&#x53EF;&#x4EE5;&#x5728;&#x68C0;&#x67E5;&#x5B8C; close &#x4EE5;&#x540E;&#x518D;&#x5173;&#x95ED;&#x3002;&#x5176;&#x5B9E;&#x6211;&#x4EEC;&#x4F9D;&#x8D56;&#x7684;&#x662F; chanrecv() &#x548C; closechan() &#x8FD9;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;&#x5728;&#x9501;&#x91CA;&#x653E;&#x540E;&#xFF0C;&#x5B83;&#x4EEC;&#x66F4;&#x65B0;&#x8FD9;&#x4E2A;&#x7EBF;&#x7A0B; c.close &#x548C; full() &#x7684;&#x7ED3;&#x679C;&#x89C6;&#x56FE;&#x3002;</p>
<h3 id="2-%E5%90%8C%E6%AD%A5%E5%8F%91%E9%80%81">2. &#x540C;&#x6B65;&#x53D1;&#x9001;</h3>
<p>channel &#x5F02;&#x5E38;&#x72B6;&#x6001;&#x68C0;&#x67E5;&#x4EE5;&#x540E;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x4EE3;&#x7801;&#x662F;&#x53D1;&#x9001;&#x7684;&#x903B;&#x8F91;&#x3002;</p>
<pre><code class="language-go">func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool {
......

	lock(&amp;c.lock)

	if c.closed != 0 {
		unlock(&amp;c.lock)
		panic(plainError(&quot;send on closed channel&quot;))
	}

	if sg := c.recvq.dequeue(); sg != nil {
		send(c, sg, ep, func() { unlock(&amp;c.lock) }, 3)
		return true
	}

......

}
</code></pre>
<p>&#x5728;&#x53D1;&#x9001;&#x4E4B;&#x524D;&#xFF0C;&#x5148;&#x4E0A;&#x9501;&#xFF0C;&#x4FDD;&#x8BC1;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#x3002;&#x5E76;&#x518D;&#x4E00;&#x6B21;&#x68C0;&#x67E5; channel &#x662F;&#x5426;&#x5173;&#x95ED;&#x3002;&#x5982;&#x679C;&#x5173;&#x95ED;&#x5219;&#x629B;&#x51FA; panic&#x3002;&#x52A0;&#x9501;&#x6210;&#x529F;&#x5E76;&#x4E14; channel &#x672A;&#x5173;&#x95ED;&#xFF0C;&#x5F00;&#x59CB;&#x53D1;&#x9001;&#x3002;&#x5982;&#x679C;&#x6709;&#x6B63;&#x5728;&#x963B;&#x585E;&#x7B49;&#x5F85;&#x7684;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x901A;&#x8FC7; dequeue() &#x53D6;&#x51FA;&#x5934;&#x90E8;&#x7B2C;&#x4E00;&#x4E2A;&#x975E;&#x7A7A;&#x7684; sudog&#xFF0C;&#x8C03;&#x7528; send() &#x51FD;&#x6570;&#xFF1A;</p>
<pre><code class="language-go">func send(c *hchan, sg *sudog, ep unsafe.Pointer, unlockf func(), skip int) {
	if sg.elem != nil {
		sendDirect(c.elemtype, sg, ep)
		sg.elem = nil
	}
	gp := sg.g
	unlockf()
	gp.param = unsafe.Pointer(sg)
	sg.success = true
	if sg.releasetime != 0 {
		sg.releasetime = cputicks()
	}
	goready(gp, skip+1)
}
</code></pre>
<p>send() &#x51FD;&#x6570;&#x4E3B;&#x8981;&#x5B8C;&#x6210;&#x4E86; 2 &#x4EF6;&#x4E8B;&#xFF1A;</p>
<ul>
<li>
<ol>
<li>&#x8C03;&#x7528; sendDirect() &#x51FD;&#x6570;&#x5C06;&#x6570;&#x636E;&#x62F7;&#x8D1D;&#x5230;&#x4E86;&#x63A5;&#x6536;&#x53D8;&#x91CF;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#x4E0A;</li>
</ol>
</li>
<li>
<ol start="2">
<li>&#x8C03;&#x7528; goready() &#x5C06;&#x7B49;&#x5F85;&#x63A5;&#x6536;&#x7684;&#x963B;&#x585E; goroutine &#x7684;&#x72B6;&#x6001;&#x4ECE; Gwaiting &#x6216;&#x8005; Gscanwaiting &#x6539;&#x53D8;&#x6210; Grunnable&#x3002;&#x4E0B;&#x4E00;&#x8F6E;&#x8C03;&#x5EA6;&#x65F6;&#x4F1A;&#x5524;&#x9192;&#x8FD9;&#x4E2A;&#x63A5;&#x6536;&#x7684; goroutine&#x3002;</li>
</ol>
</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_6_1.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x8FD9;&#x91CC;&#x91CD;&#x70B9;&#x8BF4;&#x8BF4; goready() &#x7684;&#x5B9E;&#x73B0;&#x3002;&#x7406;&#x89E3;&#x4E86;&#x5B83;&#x7684;&#x6E90;&#x7801;&#xFF0C;&#x5C31;&#x80FD;&#x660E;&#x767D;&#x4E3A;&#x4EC0;&#x4E48;&#x5F80; channel &#x4E2D;&#x53D1;&#x9001;&#x6570;&#x636E;&#x5E76;&#x975E;&#x7ACB;&#x5373;&#x53EF;&#x4EE5;&#x4ECE;&#x63A5;&#x6536;&#x65B9;&#x83B7;&#x53D6;&#x5230;&#x3002;</p>
<pre><code class="language-go">func goready(gp *g, traceskip int) {
	systemstack(func() {
		ready(gp, traceskip, true)
	})
}

func ready(gp *g, traceskip int, next bool) {
......

	casgstatus(gp, _Gwaiting, _Grunnable)
	runqput(_g_.m.p.ptr(), gp, next)
	wakep()
	releasem(mp)
}
</code></pre>
<p>&#x5728; runqput() &#x51FD;&#x6570;&#x7684;&#x4F5C;&#x7528;&#x662F;&#x628A; g &#x7ED1;&#x5B9A;&#x5230;&#x672C;&#x5730;&#x53EF;&#x8FD0;&#x884C;&#x7684;&#x961F;&#x5217;&#x4E2D;&#x3002;&#x6B64;&#x5904; next &#x4F20;&#x5165;&#x7684;&#x662F; true&#xFF0C;&#x5C06; g &#x63D2;&#x5165;&#x5230; runnext &#x63D2;&#x69FD;&#x4E2D;&#xFF0C;&#x7B49;&#x5F85;&#x4E0B;&#x6B21;&#x8C03;&#x5EA6;&#x4FBF;&#x7ACB;&#x5373;&#x8FD0;&#x884C;&#x3002;&#x56E0;&#x4E3A;&#x8FD9;&#x4E00;&#x70B9;&#x5BFC;&#x81F4;&#x4E86;&#x867D;&#x7136; goroutine &#x4FDD;&#x8BC1;&#x4E86;&#x7EBF;&#x7A0B;&#x5B89;&#x5168;&#xFF0C;&#x4F46;&#x662F;&#x5728;&#x8BFB;&#x53D6;&#x6570;&#x636E;&#x65B9;&#x9762;&#x6BD4;&#x6570;&#x7EC4;&#x6162;&#x4E86;&#x51E0;&#x767E;&#x7EB3;&#x79D2;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:center">Read</th>
<th style="text-align:center">Channel</th>
<th style="text-align:center">Slice</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">Time</td>
<td style="text-align:center">x * 100 * nanosecond</td>
<td style="text-align:center">0</td>
</tr>
<tr>
<td style="text-align:center">Thread safe</td>
<td style="text-align:center">Yes</td>
<td style="text-align:center">No</td>
</tr>
</tbody>
</table>
<p>&#x6240;&#x4EE5;&#x5728;&#x5199;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x7684;&#x67D0;&#x4E9B;&#x65F6;&#x5019;&#xFF0C;&#x9700;&#x8981;&#x8003;&#x8651;&#x5230;&#x8FD9;&#x4E2A;&#x5FAE;&#x5F31;&#x7684;&#x5EF6;&#x8FDF;&#xFF0C;&#x53EF;&#x4EE5;&#x9002;&#x5F53;&#x52A0; sleep()&#x3002;&#x518D;&#x6BD4;&#x5982;&#x5237; LeetCode &#x9898;&#x76EE;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5E76;&#x975E;&#x65E0;&#x8111;&#x4F7F;&#x7528; goroutine &#x5C31;&#x80FD;&#x5E26;&#x6765; runtime &#x7684;&#x63D0;&#x5347;&#xFF0C;&#x4F8B;&#x5982; <a href="https://leetcode.com/problems/fibonacci-number/">509. Fibonacci Number</a>&#xFF0C;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x540C;&#x5B66;&#x53EF;&#x4EE5;&#x7528; goroutine &#x6765;&#x5199;&#x4E00;&#x5199;&#x8FD9;&#x9053;&#x9898;&#xFF0C;&#x7B14;&#x8005;&#x8FD9;&#x91CC;&#x5B9E;&#x73B0;&#x4E86;<a href="https://books.halfrost.com/leetcode/ChapterFour/0500~0599/0509.Fibonacci-Number/">goroutine &#x89E3;&#x6CD5;</a>&#xFF0C;&#x6027;&#x80FD;&#x65B9;&#x9762;&#x5B8C;&#x5168;&#x4E0D;&#x5982;&#x6570;&#x7EC4;&#x7684;&#x89E3;&#x6CD5;&#x3002;</p>
<h3 id="3-%E5%BC%82%E6%AD%A5%E5%8F%91%E9%80%81">3. &#x5F02;&#x6B65;&#x53D1;&#x9001;</h3>
<p>&#x5982;&#x679C;&#x521D;&#x59CB;&#x5316; channel &#x65F6;&#x521B;&#x5EFA;&#x7684;&#x5E26;&#x7F13;&#x51B2;&#x533A;&#x7684;&#x5F02;&#x6B65; Channel&#xFF0C;&#x5F53;&#x63A5;&#x6536;&#x8005;&#x961F;&#x5217;&#x4E3A;&#x7A7A;&#x65F6;&#xFF0C;&#x8FD9;&#x662F;&#x4F1A;&#x8FDB;&#x5165;&#x5230;&#x5F02;&#x6B65;&#x53D1;&#x9001;&#x903B;&#x8F91;&#xFF1A;</p>
<pre><code class="language-go">func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool {
......

	if c.qcount &lt; c.dataqsiz {
		qp := chanbuf(c, c.sendx)
		if raceenabled {
			racenotify(c, c.sendx, nil)
		}
		typedmemmove(c.elemtype, qp, ep)
		c.sendx++
		if c.sendx == c.dataqsiz {
			c.sendx = 0
		}
		c.qcount++
		unlock(&amp;c.lock)
		return true
	}
	
......
}
</code></pre>
<p>&#x5982;&#x679C; qcount &#x8FD8;&#x6CA1;&#x6709;&#x6EE1;&#xFF0C;&#x5219;&#x8C03;&#x7528; chanbuf() &#x83B7;&#x53D6; sendx &#x7D22;&#x5F15;&#x7684;&#x5143;&#x7D20;&#x6307;&#x9488;&#x503C;&#x3002;&#x8C03;&#x7528; typedmemmove() &#x65B9;&#x6CD5;&#x5C06;&#x53D1;&#x9001;&#x7684;&#x503C;&#x62F7;&#x8D1D;&#x5230;&#x7F13;&#x51B2;&#x533A; buf &#x4E2D;&#x3002;&#x62F7;&#x8D1D;&#x5B8C;&#x6210;&#xFF0C;&#x9700;&#x8981;&#x7EF4;&#x62A4; sendx &#x7D22;&#x5F15;&#x4E0B;&#x6807;&#x503C;&#x548C; qcount &#x4E2A;&#x6570;&#x3002;&#x8FD9;&#x91CC;&#x5C06; buf &#x7F13;&#x51B2;&#x533A;&#x8BBE;&#x8BA1;&#x6210;&#x73AF;&#x5F62;&#x7684;&#xFF0C;&#x7D22;&#x5F15;&#x503C;&#x5982;&#x679C;&#x5230;&#x4E86;&#x961F;&#x5C3E;&#xFF0C;&#x4E0B;&#x4E00;&#x4E2A;&#x4F4D;&#x7F6E;&#x91CD;&#x65B0;&#x56DE;&#x5230;&#x961F;&#x5934;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_7_.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x81F3;&#x6B64;&#xFF0C;&#x4E24;&#x79CD;&#x76F4;&#x63A5;&#x53D1;&#x9001;&#x7684;&#x903B;&#x8F91;&#x5206;&#x6790;&#x5B8C;&#x4E86;&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x53D1;&#x9001;&#x65F6; channel &#x963B;&#x585E;&#x7684;&#x60C5;&#x51B5;&#x3002;</p>
<h3 id="4-%E9%98%BB%E5%A1%9E%E5%8F%91%E9%80%81">4. &#x963B;&#x585E;&#x53D1;&#x9001;</h3>
<p>&#x5F53; channel &#x5904;&#x4E8E;&#x6253;&#x5F00;&#x72B6;&#x6001;&#xFF0C;&#x4F46;&#x662F;&#x6CA1;&#x6709;&#x63A5;&#x6536;&#x8005;&#xFF0C;&#x5E76;&#x4E14;&#x6CA1;&#x6709; buf &#x7F13;&#x51B2;&#x961F;&#x5217;&#x6216;&#x8005; buf &#x961F;&#x5217;&#x5DF2;&#x6EE1;&#xFF0C;&#x8FD9;&#x65F6; channel &#x4F1A;&#x8FDB;&#x5165;&#x963B;&#x585E;&#x53D1;&#x9001;&#x3002;</p>
<pre><code class="language-go">func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool {
......

	if !block {
		unlock(&amp;c.lock)
		return false
	}
	
	gp := getg()
	mysg := acquireSudog()
	mysg.releasetime = 0
	if t0 != 0 {
		mysg.releasetime = -1
	}
	mysg.elem = ep
	mysg.waitlink = nil
	mysg.g = gp
	mysg.isSelect = false
	mysg.c = c
	gp.waiting = mysg
	gp.param = nil
	c.sendq.enqueue(mysg)
	atomic.Store8(&amp;gp.parkingOnChan, 1)
	gopark(chanparkcommit, unsafe.Pointer(&amp;c.lock), waitReasonChanSend, traceEvGoBlockSend, 2)
	KeepAlive(ep)
......
}
</code></pre>
<ul>
<li>&#x8C03;&#x7528; getg() &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x5F53;&#x524D; goroutine &#x7684;&#x6307;&#x9488;&#xFF0C;&#x7528;&#x4E8E;&#x7ED1;&#x5B9A;&#x7ED9;&#x4E00;&#x4E2A; sudog&#x3002;</li>
<li>&#x8C03;&#x7528; acquireSudog() &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x4E00;&#x4E2A; sudog&#xFF0C;&#x53EF;&#x80FD;&#x662F;&#x65B0;&#x5EFA;&#x7684; sudog&#xFF0C;&#x4E5F;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x4ECE;&#x7F13;&#x5B58;&#x4E2D;&#x83B7;&#x53D6;&#x7684;&#x3002;&#x8BBE;&#x7F6E;&#x597D; sudog &#x8981;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x548C;&#x72B6;&#x6001;&#x3002;&#x6BD4;&#x5982;&#x53D1;&#x9001;&#x7684; Channel&#x3001;&#x662F;&#x5426;&#x5728; select &#x4E2D;&#x548C;&#x5F85;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#x7B49;&#x7B49;&#x3002;</li>
<li>&#x8C03;&#x7528; c.sendq.enqueue &#x65B9;&#x6CD5;&#x5C06;&#x914D;&#x7F6E;&#x597D;&#x7684; sudog &#x52A0;&#x5165;&#x5F85;&#x53D1;&#x9001;&#x7684;&#x7B49;&#x5F85;&#x961F;&#x5217;&#x3002;</li>
<li>&#x8BBE;&#x7F6E;&#x539F;&#x5B50;&#x4FE1;&#x53F7;&#x3002;&#x5F53;&#x6808;&#x8981; shrink &#x6536;&#x7F29;&#x65F6;&#xFF0C;&#x8FD9;&#x4E2A;&#x6807;&#x8BB0;&#x4EE3;&#x8868;&#x5F53;&#x524D; goroutine &#x8FD8; parking &#x505C;&#x5728;&#x67D0;&#x4E2A; channel &#x4E2D;&#x3002;&#x5728; g &#x72B6;&#x6001;&#x53D8;&#x66F4;&#x4E0E;&#x8BBE;&#x7F6E; activeStackChans &#x72B6;&#x6001;&#x8FD9;&#x4E24;&#x4E2A;&#x65F6;&#x95F4;&#x70B9;&#x4E4B;&#x95F4;&#x7684;&#x65F6;&#x95F4;&#x7A97;&#x53E3;&#x8FDB;&#x884C;&#x6808; shrink &#x6536;&#x7F29;&#x662F;&#x4E0D;&#x5B89;&#x5168;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x9700;&#x8981;&#x8BBE;&#x7F6E;&#x8FD9;&#x4E2A;&#x539F;&#x5B50;&#x4FE1;&#x53F7;&#x3002;</li>
<li>&#x8C03;&#x7528; gopark &#x65B9;&#x6CD5;&#x6302;&#x8D77;&#x5F53;&#x524D; goroutine&#xFF0C;&#x72B6;&#x6001;&#x4E3A; waitReasonChanSend&#xFF0C;&#x963B;&#x585E;&#x7B49;&#x5F85; channel&#x3002;</li>
<li>&#x6700;&#x540E;&#xFF0C;KeepAlive() &#x786E;&#x4FDD;&#x53D1;&#x9001;&#x7684;&#x503C;&#x4FDD;&#x6301;&#x6D3B;&#x52A8;&#x72B6;&#x6001;&#xFF0C;&#x76F4;&#x5230;&#x63A5;&#x6536;&#x8005;&#x5C06;&#x5176;&#x590D;&#x5236;&#x51FA;&#x6765;&#x3002; sudog &#x5177;&#x6709;&#x6307;&#x5411;&#x5806;&#x6808;&#x5BF9;&#x8C61;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x4F46; sudog &#x4E0D;&#x80FD;&#x88AB;&#x5F53;&#x505A;&#x5806;&#x6808;&#x8DDF;&#x8E2A;&#x5668;&#x7684; root&#x3002;&#x53D1;&#x9001;&#x7684;&#x6570;&#x503C;&#x662F;&#x5206;&#x914D;&#x5728;&#x5806;&#x4E0A;&#xFF0C;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x907F;&#x514D;&#x88AB; GC &#x56DE;&#x6536;&#x3002;</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_12.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x8FD9;&#x91CC;&#x63D0;&#x4E00;&#x4E0B; sudog &#x7684;&#x4E8C;&#x7EA7;&#x7F13;&#x5B58;&#x590D;&#x7528;&#x4F53;&#x7CFB;&#x3002;&#x5728; acquireSudog() &#x65B9;&#x6CD5;&#x4E2D;&#xFF1A;</p>
<pre><code class="language-go">func acquireSudog() *sudog {
	mp := acquirem()
	pp := mp.p.ptr()
	// &#x5982;&#x679C;&#x672C;&#x5730;&#x7F13;&#x5B58;&#x4E3A;&#x7A7A;
	if len(pp.sudogcache) == 0 {
		lock(&amp;sched.sudoglock)
		// &#x9996;&#x5148;&#x5C1D;&#x8BD5;&#x5C06;&#x5168;&#x5C40;&#x4E2D;&#x592E;&#x7F13;&#x5B58;&#x5B58;&#x4E00;&#x90E8;&#x5206;&#x5230;&#x672C;&#x5730;
		for len(pp.sudogcache) &lt; cap(pp.sudogcache)/2 &amp;&amp; sched.sudogcache != nil {
			s := sched.sudogcache
			sched.sudogcache = s.next
			s.next = nil
			pp.sudogcache = append(pp.sudogcache, s)
		}
		unlock(&amp;sched.sudoglock)
		// &#x5982;&#x679C;&#x5168;&#x5C40;&#x4E2D;&#x592E;&#x7F13;&#x5B58;&#x662F;&#x7A7A;&#x7684;&#xFF0C;&#x5219; allocate &#x4E00;&#x4E2A;&#x65B0;&#x7684;
		if len(pp.sudogcache) == 0 {
			pp.sudogcache = append(pp.sudogcache, new(sudog))
		}
	}
	// &#x4ECE;&#x5C3E;&#x90E8;&#x63D0;&#x53D6;&#xFF0C;&#x5E76;&#x8C03;&#x6574;&#x672C;&#x5730;&#x7F13;&#x5B58;
	n := len(pp.sudogcache)
	s := pp.sudogcache[n-1]
	pp.sudogcache[n-1] = nil
	pp.sudogcache = pp.sudogcache[:n-1]
	if s.elem != nil {
		throw(&quot;acquireSudog: found s.elem != nil in cache&quot;)
	}
	releasem(mp)
	return s
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x6D89;&#x53CA;&#x5230; 2 &#x4E2A;&#x65B0;&#x7684;&#x91CD;&#x8981;&#x7684;&#x7ED3;&#x6784;&#x4F53;&#xFF0C;&#x7531;&#x4E8E;&#x8FD9; 2 &#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x7279;&#x522B;&#x590D;&#x6742;&#xFF0C;&#x6682;&#x65F6;&#x6B64;&#x5904;&#x53EA;&#x5C55;&#x793A;&#x548C; acquireSudog() &#x6709;&#x5173;&#x7684;&#x90E8;&#x5206;&#xFF1A;</p>
<pre><code class="language-go">type p struct {
......
	sudogcache []*sudog
	sudogbuf   [128]*sudog
......
}

type schedt struct {
......
	sudoglock  mutex
	sudogcache *sudog
......
}
</code></pre>
<p>sched.sudogcache &#x662F;&#x5168;&#x5C40;&#x4E2D;&#x592E;&#x7F13;&#x5B58;&#xFF0C;&#x53EF;&#x4EE5;&#x8BA4;&#x4E3A;&#x5B83;&#x662F;&#x201C;&#x4E00;&#x7EA7;&#x7F13;&#x5B58;&#x201D;&#xFF0C;&#x5B83;&#x4F1A;&#x5728; GC &#x5783;&#x573E;&#x56DE;&#x6536;&#x6267;&#x884C; clearpools &#x88AB;&#x6E05;&#x7406;&#x3002;p.sudogcache &#x53EF;&#x4EE5;&#x8BA4;&#x4E3A;&#x5B83;&#x662F;&#x201C;&#x4E8C;&#x7EA7;&#x7F13;&#x5B58;&#x201D;&#xFF0C;&#x662F;&#x672C;&#x5730;&#x7F13;&#x5B58;&#x4E0D;&#x4F1A;&#x88AB; GC &#x6E05;&#x7406;&#x6389;&#x3002;</p>
<p>chansend &#x6700;&#x540E;&#x7684;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x662F;&#x5F53; goroutine &#x5524;&#x9192;&#x4EE5;&#x540E;&#xFF0C;&#x89E3;&#x9664;&#x963B;&#x585E;&#x7684;&#x72B6;&#x6001;&#xFF1A;</p>
<pre><code class="language-go">func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool {
......

	if mysg != gp.waiting {
		throw(&quot;G waiting list is corrupted&quot;)
	}
	gp.waiting = nil
	gp.activeStackChans = false
	closed := !mysg.success
	gp.param = nil
	if mysg.releasetime &gt; 0 {
		blockevent(mysg.releasetime-t0, 2)
	}
	mysg.c = nil
	releaseSudog(mysg)
	if closed {
		if c.closed == 0 {
			throw(&quot;chansend: spurious wakeup&quot;)
		}
		panic(plainError(&quot;send on closed channel&quot;))
	}
	return true
}
</code></pre>
<p>sudog &#x7B97;&#x662F;&#x5BF9; g &#x7684;&#x4E00;&#x79CD;&#x5C01;&#x88C5;&#xFF0C;&#x91CC;&#x9762;&#x5305;&#x542B;&#x4E86; g&#xFF0C;&#x8981;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x4EE5;&#x53CA;&#x76F8;&#x5173;&#x7684;&#x72B6;&#x6001;&#x3002;goroutine &#x88AB;&#x5524;&#x9192;&#x540E;&#x4F1A;&#x5B8C;&#x6210; channel &#x7684;&#x963B;&#x585E;&#x6570;&#x636E;&#x53D1;&#x9001;&#x3002;&#x53D1;&#x9001;&#x5B8C;&#x6700;&#x540E;&#x8FDB;&#x884C;&#x57FA;&#x672C;&#x7684;&#x53C2;&#x6570;&#x68C0;&#x67E5;&#xFF0C;&#x89E3;&#x9664; channel &#x7684;&#x7ED1;&#x5B9A;&#x5E76;&#x91CA;&#x653E; sudog&#x3002;</p>
<pre><code class="language-go">func releaseSudog(s *sudog) {
	if s.elem != nil {
		throw(&quot;runtime: sudog with non-nil elem&quot;)
	}
	if s.isSelect {
		throw(&quot;runtime: sudog with non-false isSelect&quot;)
	}
	if s.next != nil {
		throw(&quot;runtime: sudog with non-nil next&quot;)
	}
	if s.prev != nil {
		throw(&quot;runtime: sudog with non-nil prev&quot;)
	}
	if s.waitlink != nil {
		throw(&quot;runtime: sudog with non-nil waitlink&quot;)
	}
	if s.c != nil {
		throw(&quot;runtime: sudog with non-nil c&quot;)
	}
	gp := getg()
	if gp.param != nil {
		throw(&quot;runtime: releaseSudog with non-nil gp.param&quot;)
	}
	// &#x9632;&#x6B62; rescheduling &#x5230;&#x4E86;&#x5176;&#x4ED6;&#x7684; P
	mp := acquirem() 
	pp := mp.p.ptr()
	// &#x5982;&#x679C;&#x672C;&#x5730;&#x7F13;&#x5B58;&#x5DF2;&#x6EE1;
	if len(pp.sudogcache) == cap(pp.sudogcache) {
		// &#x8F6C;&#x79FB;&#x4E00;&#x534A;&#x672C;&#x5730;&#x7F13;&#x5B58;&#x5230;&#x5168;&#x5C40;&#x4E2D;&#x592E;&#x7F13;&#x5B58;&#x4E2D;
		var first, last *sudog
		for len(pp.sudogcache) &gt; cap(pp.sudogcache)/2 {
			n := len(pp.sudogcache)
			p := pp.sudogcache[n-1]
			pp.sudogcache[n-1] = nil
			pp.sudogcache = pp.sudogcache[:n-1]
			if first == nil {
				first = p
			} else {
				last.next = p
			}
			last = p
		}
		lock(&amp;sched.sudoglock)
		// &#x5C06;&#x63D0;&#x53D6;&#x7684;&#x94FE;&#x8868;&#x6302;&#x8F7D;&#x5230;&#x5168;&#x5C40;&#x4E2D;&#x592E;&#x7F13;&#x5B58;&#x4E2D;
		last.next = sched.sudogcache
		sched.sudogcache = first
		unlock(&amp;sched.sudoglock)
	}
	pp.sudogcache = append(pp.sudogcache, s)
	releasem(mp)
}
</code></pre>
<p>releaseSudog() &#x867D;&#x7136;&#x91CA;&#x653E;&#x4E86; sudog &#x7684;&#x5185;&#x5B58;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x4F1A;&#x88AB; p.sudogcache &#x8FD9;&#x4E2A;&#x201C;&#x4E8C;&#x7EA7;&#x7F13;&#x5B58;&#x201D;&#x7F13;&#x5B58;&#x8D77;&#x6765;&#x3002;</p>
<p>chansend() &#x51FD;&#x6570;&#x6700;&#x540E;&#x8FD4;&#x56DE; true &#x8868;&#x793A;&#x6210;&#x529F;&#x5411; Channel &#x53D1;&#x9001;&#x4E86;&#x6570;&#x636E;&#x3002;</p>
<h3 id="5-%E5%B0%8F%E7%BB%93">5. &#x5C0F;&#x7ED3;</h3>
<p>&#x5173;&#x4E8E; channel &#x53D1;&#x9001;&#x7684;&#x6E90;&#x7801;&#x5B9E;&#x73B0;&#x5DF2;&#x7ECF;&#x5206;&#x6790;&#x5B8C;&#x4E86;&#xFF0C;&#x9488;&#x5BF9; channel &#x5404;&#x4E2A;&#x72B6;&#x6001;&#x505A;&#x4E00;&#x4E2A;&#x5C0F;&#x7ED3;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">Channel Status</th>
<th style="text-align:center">Result</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">Write</td>
<td style="text-align:center">nil</td>
<td style="text-align:center">&#x963B;&#x585E;</td>
</tr>
<tr>
<td style="text-align:center">Write</td>
<td style="text-align:center">&#x6253;&#x5F00;&#x4F46;&#x586B;&#x6EE1;</td>
<td style="text-align:center">&#x963B;&#x585E;</td>
</tr>
<tr>
<td style="text-align:center">Write</td>
<td style="text-align:center">&#x6253;&#x5F00;&#x4F46;&#x672A;&#x6EE1;</td>
<td style="text-align:center">&#x6210;&#x529F;&#x5199;&#x5165;&#x503C;</td>
</tr>
<tr>
<td style="text-align:center">Write</td>
<td style="text-align:center">&#x5173;&#x95ED;</td>
<td style="text-align:center"><strong>panic</strong></td>
</tr>
<tr>
<td style="text-align:center">Write</td>
<td style="text-align:center">&#x53EA;&#x8BFB;</td>
<td style="text-align:center">Compile Error</td>
</tr>
</tbody>
</table>
<p>channel &#x53D1;&#x9001;&#x8FC7;&#x7A0B;&#x4E2D;&#x5305;&#x542B; 2 &#x6B21;&#x6709;&#x5173; goroutine &#x8C03;&#x5EA6;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<ul>
<li>
<ol>
<li>&#x5F53;&#x63A5;&#x6536;&#x961F;&#x5217;&#x4E2D;&#x5B58;&#x5728; sudog &#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x53D1;&#x9001;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x6267;&#x884C; <code>goready()</code>&#x5C06; g &#x63D2;&#x5165; runnext &#x63D2;&#x69FD;&#x4E2D;&#xFF0C;&#x72B6;&#x6001;&#x4ECE; Gwaiting &#x6216;&#x8005; Gscanwaiting &#x6539;&#x53D8;&#x6210; Grunnable&#xFF0C;&#x7B49;&#x5F85;&#x4E0B;&#x6B21;&#x8C03;&#x5EA6;&#x4FBF;&#x7ACB;&#x5373;&#x8FD0;&#x884C;&#x3002;</li>
</ol>
</li>
<li>
<ol start="2">
<li>&#x5F53; channel &#x963B;&#x585E;&#x65F6;&#xFF0C;&#x6267;&#x884C; <code>gopark()</code> &#x5C06; g &#x963B;&#x585E;&#xFF0C;&#x8BA9;&#x51FA; cpu &#x7684;&#x4F7F;&#x7528;&#x6743;&#x3002;</li>
</ol>
</li>
</ul>
<p>&#x9700;&#x8981;&#x5F3A;&#x8C03;&#x7684;&#x662F;&#xFF0C;&#x901A;&#x9053;&#x5E76;&#x4E0D;&#x63D0;&#x4F9B;&#x8DE8; goroutine &#x7684;&#x6570;&#x636E;&#x8BBF;&#x95EE;&#x4FDD;&#x62A4;&#x673A;&#x5236;&#x3002;&#x5982;&#x679C;&#x901A;&#x8FC7;&#x901A;&#x9053;&#x4F20;&#x8F93;&#x6570;&#x636E;&#x7684;&#x4E00;&#x4EFD;&#x526F;&#x672C;&#xFF0C;&#x90A3;&#x4E48;&#x6BCF;&#x4E2A; goroutine &#x90FD;&#x6301;&#x6709;&#x4E00;&#x4EFD;&#x526F;&#x672C;&#xFF0C;&#x5404;&#x81EA;&#x5BF9;&#x81EA;&#x5DF1;&#x7684;&#x526F;&#x672C;&#x505A;&#x4FEE;&#x6539;&#x662F;&#x5B89;&#x5168;&#x7684;&#x3002;&#x5F53;&#x4F20;&#x8F93;&#x7684;&#x662F;&#x6307;&#x5411;&#x6570;&#x636E;&#x7684;&#x6307;&#x9488;&#x65F6;&#xFF0C;&#x5982;&#x679C;&#x8BFB;&#x548C;&#x5199;&#x662F;&#x7531;&#x4E0D;&#x540C;&#x7684; goroutine &#x5B8C;&#x6210;&#x7684;&#xFF0C;&#x90A3;&#x4E48;&#x6BCF;&#x4E2A; goroutine &#x4F9D;&#x65E7;&#x9700;&#x8981;&#x989D;&#x5916;&#x7684;&#x540C;&#x6B65;&#x64CD;&#x4F5C;&#x3002;</p>
<h2 id="%E4%BA%94-%E6%8E%A5%E6%94%B6%E6%95%B0%E6%8D%AE">&#x4E94;. &#x63A5;&#x6536;&#x6570;&#x636E;</h2>
<p>&#x4ECE; channel &#x4E2D;&#x63A5;&#x6536;&#x6570;&#x636E;&#x5E38;&#x89C1;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">tmp := &lt;-ch
tmp, ok := &lt;-ch
</code></pre>
<p>&#x5148;&#x770B;&#x7B49;&#x53F7;&#x5DE6;&#x8FB9;&#x8D4B;&#x503C;&#x4E00;&#x4E2A;&#x503C;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x7F16;&#x8BD1;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#xFF0C;&#x5728;&#x68C0;&#x67E5; ir &#x8282;&#x70B9;&#x65F6;&#xFF0C;&#x6839;&#x636E;&#x8282;&#x70B9; op &#x4E0D;&#x540C;&#x7C7B;&#x578B;&#xFF0C;&#x8FDB;&#x884C;&#x4E0D;&#x540C;&#x7684;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x4E0B;&#x6E90;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">// walkAssign walks an OAS (AssignExpr) or OASOP (AssignOpExpr) node.
func walkAssign(init *ir.Nodes, n ir.Node) ir.Node {
......

	switch as.Y.Op() {
	default:
		as.Y = walkExpr(as.Y, init)

	case ir.ORECV:
		// x = &lt;-c; as.Left is x, as.Right.Left is c.
		// order.stmt made sure x is addressable.
		recv := as.Y.(*ir.UnaryExpr)
		recv.X = walkExpr(recv.X, init)

		n1 := typecheck.NodAddr(as.X)
		r := recv.X // the channel
		return mkcall1(chanfn(&quot;chanrecv1&quot;, 2, r.Type()), nil, init, r, n1)
		
......
}
</code></pre>
<p>as &#x662F;&#x5165;&#x53C2; ir &#x8282;&#x70B9;&#x5F3A;&#x5236;&#x8F6C;&#x5316;&#x6210; AssignStmt &#x7C7B;&#x578B;&#x3002;AssignStmt &#x8FD9;&#x4E2A;&#x7C7B;&#x578B;&#x662F;&#x8D4B;&#x503C;&#x7684;&#x4E00;&#x4E2A;&#x8BF4;&#x660E;&#xFF1A;</p>
<pre><code class="language-go">type AssignStmt struct {
	miniStmt
	X   Node
	Def bool
	Y   Node
}
</code></pre>
<p>Y &#x662F;&#x7B49;&#x53F7;&#x53F3;&#x8FB9;&#x7684;&#x503C;&#xFF0C;&#x5B83;&#x662F; Node &#x7C7B;&#x578B;&#xFF0C;&#x91CC;&#x9762;&#x5305;&#x542B; op &#x7C7B;&#x578B;&#x3002;walkAssign &#x662F;&#x68C0;&#x67E5;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#xFF0C;&#x5982;&#x679C; Y.Op() &#x662F; ir.ORECV &#x7C7B;&#x578B;&#xFF0C;&#x8BF4;&#x660E;&#x662F; channel &#x63A5;&#x6536;&#x7684;&#x8FC7;&#x7A0B;&#x3002;&#x8C03;&#x7528; chanrecv1() &#x51FD;&#x6570;&#x3002;as.X &#x662F;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x5DE6;&#x8FB9;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x5B83;&#x662F;&#x63A5;&#x6536; channel &#x4E2D;&#x7684;&#x503C;&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x5FC5;&#x987B;&#x662F;&#x53EF;&#x5BFB;&#x5740;&#x7684;&#x3002;</p>
<p>&#x5F53;&#x4ECE; channel &#x4E2D;&#x8BFB;&#x53D6;&#x6570;&#x636E;&#x7B49;&#x53F7;&#x5DE6;&#x8FB9;&#x662F; 2 &#x4E2A;&#x503C;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x5728; walkExpr1 &#x4E2D;&#x68C0;&#x67E5;&#x8FD9;&#x4E2A;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#xFF1A;</p>
<pre><code class="language-go">func walkExpr1(n ir.Node, init *ir.Nodes) ir.Node {
	switch n.Op() {
	default:
		ir.Dump(&quot;walk&quot;, n)
		base.Fatalf(&quot;walkExpr: switch 1 unknown op %+v&quot;, n.Op())
		panic(&quot;unreachable&quot;)
......

	case ir.OAS2RECV:
		n := n.(*ir.AssignListStmt)
		return walkAssignRecv(init, n)
		
......
}
</code></pre>
<p>n.Op() &#x662F; ir.OAS2RECV &#x7C7B;&#x578B;&#xFF0C;&#x5C06; n &#x5F3A;&#x8F6C;&#x6210; AssignListStmt &#x7C7B;&#x578B;&#xFF1A;</p>
<pre><code class="language-go">type AssignListStmt struct {
	miniStmt
	Lhs Nodes
	Def bool
	Rhs Nodes
}
</code></pre>
<p>AssignListStmt &#x548C; AssignStmt &#x4F5C;&#x7528;&#x4E00;&#x6837;&#xFF0C;&#x53EA;&#x662F; AssignListStmt &#x8868;&#x793A;&#x7B49;&#x53F7;&#x4E24;&#x8FB9;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x4E0D;&#x518D;&#x662F;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#xFF0C;&#x800C;&#x662F;&#x591A;&#x4E2A;&#x3002;&#x56DE;&#x5230; walkExpr1() &#x4E2D;&#xFF0C;&#x5982;&#x679C;&#x662F; ir.OAS2RECV &#x7C7B;&#x578B;&#xFF0C;&#x8C03;&#x7528; walkAssignRecv() &#x7EE7;&#x7EED;&#x68C0;&#x67E5;&#x3002;</p>
<pre><code class="language-go">func walkAssignRecv(init *ir.Nodes, n *ir.AssignListStmt) ir.Node {
	init.Append(ir.TakeInit(n)...)
	r := n.Rhs[0].(*ir.UnaryExpr) // recv
	walkExprListSafe(n.Lhs, init)
	r.X = walkExpr(r.X, init)
	var n1 ir.Node
	if ir.IsBlank(n.Lhs[0]) {
		n1 = typecheck.NodNil()
	} else {
		n1 = typecheck.NodAddr(n.Lhs[0])
	}
	fn := chanfn(&quot;chanrecv2&quot;, 2, r.X.Type())
	ok := n.Lhs[1]
	call := mkcall1(fn, types.Types[types.TBOOL], init, r.X, n1)
	return typecheck.Stmt(ir.NewAssignStmt(base.Pos, ok, call))
}
</code></pre>
<p>Lhs[0] &#x662F;&#x5B9E;&#x9645;&#x63A5;&#x6536; channel &#x503C;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;Lhs[1] &#x662F;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x5DE6;&#x8FB9;&#x7B2C;&#x4E8C;&#x4E2A; bool &#x503C;&#x3002;&#x8D4B;&#x503C;&#x8BED;&#x53E5;&#x53F3;&#x8FB9;&#x7531;&#x4E8E;&#x53EA;&#x6709;&#x4E00;&#x4E2A; channel&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x91CC; Rhs &#x4E5F;&#x53EA;&#x7528;&#x5230;&#x4E86; Rhs[0]&#x3002;</p>
<pre><code class="language-go">//go:nosplit
func chanrecv1(c *hchan, elem unsafe.Pointer) {
	chanrecv(c, elem, true)
}

//go:nosplit
func chanrecv2(c *hchan, elem unsafe.Pointer) (received bool) {
	_, received = chanrecv(c, elem, true)
	return
}
</code></pre>
<p>&#x7EFC;&#x5408;&#x4E0A;&#x8FF0;&#x7684;&#x5206;&#x6790;&#xFF0C;2 &#x79CD;&#x4E0D;&#x540C;&#x7684; channel &#x63A5;&#x6536;&#x65B9;&#x5F0F;&#x4F1A;&#x8F6C;&#x6362;&#x6210; runtime.chanrecv1 &#x548C; runtime.chanrecv2 &#x4E24;&#x79CD;&#x4E0D;&#x540C;&#x51FD;&#x6570;&#x7684;&#x8C03;&#x7528;&#xFF0C;&#x4F46;&#x662F;&#x6700;&#x7EC8;&#x6838;&#x5FC3;&#x903B;&#x8F91;&#x8FD8;&#x662F;&#x5728; runtime.chanrecv &#x4E2D;&#x3002;</p>
<h3 id="1-%E5%BC%82%E5%B8%B8%E6%A3%80%E6%9F%A5">1. &#x5F02;&#x5E38;&#x68C0;&#x67E5;</h3>
<p>chanrecv() &#x51FD;&#x6570;&#x4E00;&#x5F00;&#x59CB;&#x5148;&#x8FDB;&#x884C;&#x5F02;&#x5E38;&#x68C0;&#x67E5;&#xFF1A;</p>
<pre><code class="language-go">func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) {
	if debugChan {
		print(&quot;chanrecv: chan=&quot;, c, &quot;\n&quot;)
	}

	if c == nil {
		if !block {
			return
		}
		gopark(nil, nil, waitReasonChanReceiveNilChan, traceEvGoStop, 2)
		throw(&quot;unreachable&quot;)
	}

	// &#x7B80;&#x6613;&#x5FEB;&#x901F;&#x7684;&#x68C0;&#x67E5;
	if !block &amp;&amp; empty(c) {
		if atomic.Load(&amp;c.closed) == 0 {
			return
		}
		if empty(c) {
			// channel &#x4E0D;&#x53EF;&#x9006;&#x7684;&#x5173;&#x95ED;&#x4E86;&#x4E14;&#x4E3A;&#x7A7A;
			if raceenabled {
				raceacquire(c.raceaddr())
			}
			if ep != nil {
				typedmemclr(c.elemtype, ep)
			}
			return true, false
		}
	}
</code></pre>
<p>chanrecv() &#x4E00;&#x4E0A;&#x6765;&#x5BF9; channel &#x8FDB;&#x884C;&#x68C0;&#x67E5;&#xFF0C;&#x5982;&#x679C;&#x88AB; GC &#x56DE;&#x6536;&#x4E86;&#x4F1A;&#x53D8;&#x4E3A; nil&#x3002;&#x4ECE;&#x4E00;&#x4E2A;&#x4E3A; nil &#x7684; channel &#x4E2D;&#x63A5;&#x6536;&#x6570;&#x636E;&#x4F1A;&#x53D1;&#x751F;&#x963B;&#x585E;&#x3002;gopark &#x4F1A;&#x5F15;&#x53D1;&#x4EE5; waitReasonChanReceiveNilChan &#x4E3A;&#x539F;&#x56E0;&#x7684;&#x4F11;&#x7720;&#xFF0C;&#x5E76;&#x629B;&#x51FA; unreachable &#x7684; fatal error&#x3002;&#x5F53; channel &#x4E0D;&#x4E3A; nil&#xFF0C;&#x518D;&#x5F00;&#x59CB;&#x68C0;&#x67E5;&#x5728;&#x6CA1;&#x6709;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4F1A;&#x5BFC;&#x81F4;&#x63A5;&#x6536;&#x5931;&#x8D25;&#x7684;&#x975E;&#x963B;&#x585E;&#x64CD;&#x4F5C;&#x3002;</p>
<p>&#x8FD9;&#x91CC;&#x8FDB;&#x884C;&#x7684;&#x7B80;&#x6613;&#x5FEB;&#x901F;&#x7684;&#x68C0;&#x67E5;&#xFF0C;&#x68C0;&#x67E5;&#x4E2D;&#x72B6;&#x6001;&#x4E0D;&#x80FD;&#x53D1;&#x751F;&#x53D8;&#x5316;&#x3002;&#x8FD9;&#x4E00;&#x70B9;&#x548C; chansend() &#x51FD;&#x6570;&#x6709;&#x533A;&#x522B;&#x3002;&#x5728; chansend() &#x7B80;&#x6613;&#x5FEB;&#x901F;&#x7684;&#x68C0;&#x67E5;&#x4E2D;&#xFF0C;&#x6539;&#x53D8;&#x987A;&#x5E8F;&#x5BF9;&#x68C0;&#x67E5;&#x7ED3;&#x679C;&#x65E0;&#x592A;&#x5927;&#x5F71;&#x54CD;&#xFF0C;&#x4F46;&#x662F;&#x6B64;&#x5904;&#x5982;&#x679C;&#x68C0;&#x67E5;&#x8FC7;&#x7A0B;&#x4E2D;&#x72B6;&#x6001;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x5982;&#x679C;&#x53D1;&#x751F;&#x4E86; racing&#xFF0C;&#x68C0;&#x67E5;&#x7ED3;&#x679C;&#x4F1A;&#x51FA;&#x73B0;&#x5B8C;&#x5168;&#x76F8;&#x53CD;&#x7684;&#x9519;&#x8BEF;&#x7684;&#x7ED3;&#x679C;&#x3002;&#x4F8B;&#x5982;&#x4EE5;&#x4E0B;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#xFF1A;channel &#x5728;&#x7B2C;&#x4E00;&#x4E2A;&#x548C;&#x7B2C;&#x4E8C;&#x4E2A; if &#x68C0;&#x67E5;&#x65F6;&#x662F;&#x6253;&#x5F00;&#x7684;&#x4E14;&#x975E;&#x7A7A;&#xFF0C;&#x4E8E;&#x662F;&#x5728;&#x7B2C;&#x4E8C;&#x4E2A; if &#x91CC;&#x9762; return&#x3002;&#x4F46;&#x662F; return &#x7684;&#x77AC;&#x95F4;&#xFF0C; channel &#x5173;&#x95ED;&#x4E14;&#x7A7A;&#x3002;&#x8FD9;&#x6837;&#x5224;&#x65AD;&#x51FA;&#x6765;&#x8BA4;&#x4E3A; channel &#x662F;&#x6253;&#x5F00;&#x7684;&#x4E14;&#x975E;&#x7A7A;&#x3002;&#x660E;&#x663E;&#x662F;&#x9519;&#x8BEF;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x5B9E;&#x9645;&#x4E0A; channel &#x662F;&#x5173;&#x95ED;&#x4E14;&#x7A7A;&#x7684;&#x3002;&#x540C;&#x7406;&#x68C0;&#x67E5;&#x662F;&#x5426;&#x4E3A;&#x7A7A;&#x7684;&#x65F6;&#x5019;&#x4E5F;&#x4F1A;&#x53D1;&#x751F;&#x72B6;&#x6001;&#x53CD;&#x8F6C;&#x3002;&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x9519;&#x8BEF;&#x7684;&#x68C0;&#x67E5;&#x7ED3;&#x679C;&#xFF0C;c.closed &#x548C; empty() &#x90FD;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x539F;&#x5B50;&#x68C0;&#x67E5;&#x3002;</p>
<pre><code class="language-go">func empty(c *hchan) bool {
	// c.dataqsiz &#x662F;&#x4E0D;&#x53EF;&#x53D8;&#x7684;
	if c.dataqsiz == 0 {
		return atomic.Loadp(unsafe.Pointer(&amp;c.sendq.first)) == nil
	}
	return atomic.Loaduint(&amp;c.qcount) == 0
}
</code></pre>
<p>&#x8FD9;&#x91CC;&#x603B;&#x5171;&#x68C0;&#x67E5;&#x4E86; 2 &#x6B21; empty()&#xFF0C;&#x56E0;&#x4E3A;&#x7B2C;&#x4E00;&#x6B21;&#x68C0;&#x67E5;&#x65F6;&#xFF0C; channel &#x53EF;&#x80FD;&#x8FD8;&#x6CA1;&#x6709;&#x5173;&#x95ED;&#xFF0C;&#x4F46;&#x662F;&#x7B2C;&#x4E8C;&#x6B21;&#x68C0;&#x67E5;&#x7684;&#x65F6;&#x5019;&#x5173;&#x95ED;&#x4E86;&#xFF0C;&#x5728; 2 &#x6B21;&#x68C0;&#x67E5;&#x4E4B;&#x95F4;&#x53EF;&#x80FD;&#x6709;&#x5F85;&#x63A5;&#x6536;&#x7684;&#x6570;&#x636E;&#x5230;&#x8FBE;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x9700;&#x8981; 2 &#x6B21; empty() &#x68C0;&#x67E5;&#x3002;</p>
<p>&#x4E0D;&#x8FC7;&#x5C31;&#x7B97;&#x6309;&#x7167;&#x4E0A;&#x8FF0;&#x6E90;&#x7801;&#x68C0;&#x67E5;&#xFF0C;&#x7EC6;&#x5FC3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x80FD;&#x8FD8;&#x4F1A;&#x4E3E;&#x51FA;&#x4E00;&#x4E2A;&#x53CD;&#x4F8B;&#xFF0C;&#x4F8B;&#x5982;&#xFF0C;&#x5173;&#x95ED;&#x4E00;&#x4E2A;&#x5DF2;&#x7ECF;&#x963B;&#x585E;&#x7684;&#x540C;&#x6B65;&#x7684; channel&#xFF0C;&#x6700;&#x5F00;&#x59CB;&#x7684; !block &amp;&amp; empty(c) &#x4E3A; false&#xFF0C;&#x4F1A;&#x8DF3;&#x8FC7;&#x8FD9;&#x4E2A;&#x68C0;&#x67E5;&#x3002;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0D;&#x80FD;&#x7B97;&#x5728;&#x6B63;&#x5E38; chanrecv() &#x91CC;&#x9762;&#x3002;&#x4E0A;&#x8FF0;&#x662F;&#x4E0D;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x68C0;&#x67E5;&#x4F1A;&#x63A5;&#x6536;&#x5931;&#x8D25;&#x7684;&#x60C5;&#x51B5;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5728;&#x83B7;&#x53D6;&#x9501;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x518D;&#x6B21;&#x68C0;&#x67E5;&#x4E00;&#x904D;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#x3002;</p>
<pre><code class="language-go">func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) {
......
	lock(&amp;c.lock)

	if c.closed != 0 &amp;&amp; c.qcount == 0 {
		if raceenabled {
			raceacquire(c.raceaddr())
		}
		unlock(&amp;c.lock)
		if ep != nil {
			typedmemclr(c.elemtype, ep)
		}
		return true, false
	}
......
</code></pre>
<p>&#x5982;&#x679C; channel &#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#x4E14;&#x4E0D;&#x5B58;&#x5728;&#x7F13;&#x5B58;&#x6570;&#x636E;&#x4E86;&#xFF0C;&#x5219;&#x6E05;&#x7406; ep &#x6307;&#x9488;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x5E76;&#x8FD4;&#x56DE;&#x3002;&#x8FD9;&#x91CC;&#x4E5F;&#x662F;&#x4ECE;&#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#x7684; channel &#x4E2D;&#x8BFB;&#x6570;&#x636E;&#xFF0C;&#x8BFB;&#x51FA;&#x6765;&#x7684;&#x662F;&#x8BE5;&#x7C7B;&#x578B;&#x96F6;&#x503C;&#x7684;&#x539F;&#x56E0;&#x3002;</p>
<h3 id="2-%E5%90%8C%E6%AD%A5%E6%8E%A5%E6%94%B6">2. &#x540C;&#x6B65;&#x63A5;&#x6536;</h3>
<p>&#x540C; chansend &#x903B;&#x8F91;&#x7C7B;&#x4F3C;&#xFF0C;&#x68C0;&#x67E5;&#x5B8C;&#x5F02;&#x5E38;&#x60C5;&#x51B5;&#xFF0C;&#x7D27;&#x63A5;&#x7740;&#x662F;&#x540C;&#x6B65;&#x63A5;&#x6536;&#x3002;</p>
<pre><code class="language-go">func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) {
......

	if sg := c.sendq.dequeue(); sg != nil {
		recv(c, sg, ep, func() { unlock(&amp;c.lock) }, 3)
		return true, true
	}
......
</code></pre>
<p>&#x5728; channel &#x7684;&#x53D1;&#x9001;&#x961F;&#x5217;&#x4E2D;&#x627E;&#x5230;&#x4E86;&#x7B49;&#x5F85;&#x53D1;&#x9001;&#x7684; goroutine&#x3002;&#x53D6;&#x51FA;&#x961F;&#x5934;&#x7B49;&#x5F85;&#x7684; goroutine&#x3002;&#x5982;&#x679C;&#x7F13;&#x51B2;&#x533A;&#x7684;&#x5927;&#x5C0F;&#x4E3A; 0&#xFF0C;&#x5219;&#x76F4;&#x63A5;&#x4ECE;&#x53D1;&#x9001;&#x65B9;&#x63A5;&#x6536;&#x503C;&#x3002;&#x5426;&#x5219;&#xFF0C;&#x5BF9;&#x5E94;&#x7F13;&#x51B2;&#x533A;&#x6EE1;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x4ECE;&#x961F;&#x5217;&#x7684;&#x5934;&#x90E8;&#x63A5;&#x6536;&#x6570;&#x636E;&#xFF0C;&#x53D1;&#x9001;&#x8005;&#x7684;&#x503C;&#x6DFB;&#x52A0;&#x5230;&#x961F;&#x5217;&#x7684;&#x672B;&#x5C3E;&#xFF08;&#x6B64;&#x65F6;&#x961F;&#x5217;&#x5DF2;&#x6EE1;&#xFF0C;&#x56E0;&#x6B64;&#x4E24;&#x8005;&#x90FD;&#x6620;&#x5C04;&#x5230;&#x7F13;&#x51B2;&#x533A;&#x4E2D;&#x7684;&#x540C;&#x4E00;&#x4E2A;&#x4E0B;&#x6807;&#xFF09;&#x3002;&#x540C;&#x6B65;&#x63A5;&#x6536;&#x7684;&#x6838;&#x5FC3;&#x903B;&#x8F91;&#x89C1;&#x4E0B;&#x9762; recv() &#x51FD;&#x6570;&#xFF1A;</p>
<pre><code class="language-go">func recv(c *hchan, sg *sudog, ep unsafe.Pointer, unlockf func(), skip int) {
	if c.dataqsiz == 0 {
		if raceenabled {
			racesync(c, sg)
		}
		if ep != nil {
			// &#x4ECE; sender &#x91CC;&#x9762;&#x62F7;&#x8D1D;&#x6570;&#x636E;
			recvDirect(c.elemtype, sg, ep)
		}
	} else {
	    // &#x8FD9;&#x91CC;&#x5BF9;&#x5E94; buf &#x6EE1;&#x7684;&#x60C5;&#x51B5;
		qp := chanbuf(c, c.recvx)
		if raceenabled {
			racenotify(c, c.recvx, nil)
			racenotify(c, c.recvx, sg)
		}
		// &#x5C06;&#x6570;&#x636E;&#x4ECE; buf &#x4E2D;&#x62F7;&#x8D1D;&#x5230;&#x63A5;&#x6536;&#x8005;&#x5185;&#x5B58;&#x5730;&#x5740;&#x4E2D;
		if ep != nil {
			typedmemmove(c.elemtype, ep, qp)
		}
		// &#x5C06;&#x6570;&#x636E;&#x4ECE; sender &#x4E2D;&#x62F7;&#x8D1D;&#x5230; buf &#x4E2D;
		typedmemmove(c.elemtype, qp, sg.elem)
		c.recvx++
		if c.recvx == c.dataqsiz {
			c.recvx = 0
		}
		c.sendx = c.recvx // c.sendx = (c.sendx+1) % c.dataqsiz
	}
	sg.elem = nil
	gp := sg.g
	unlockf()
	gp.param = unsafe.Pointer(sg)
	sg.success = true
	if sg.releasetime != 0 {
		sg.releasetime = cputicks()
	}
	goready(gp, skip+1)
}
</code></pre>
<p>&#x9700;&#x8981;&#x6CE8;&#x610F;&#x7684;&#x662F;&#x7531;&#x4E8E;&#x6709;&#x53D1;&#x9001;&#x8005;&#x5728;&#x7B49;&#x5F85;&#xFF0C;&#x6240;&#x4EE5;<strong>&#x5982;&#x679C;&#x5B58;&#x5728;&#x7F13;&#x51B2;&#x533A;&#xFF0C;&#x90A3;&#x4E48;&#x7F13;&#x51B2;&#x533A;&#x4E00;&#x5B9A;&#x662F;&#x6EE1;&#x7684;</strong>&#x3002;&#x8FD9;&#x4E2A;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x53D1;&#x9001;&#x9636;&#x6BB5;&#x963B;&#x585E;&#x53D1;&#x9001;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5982;&#x679C;&#x7F13;&#x51B2;&#x533A;&#x8FD8;&#x6709;&#x7A7A;&#x4F4D;&#xFF0C;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x76F4;&#x63A5;&#x653E;&#x5165;&#x7F13;&#x51B2;&#x533A;&#xFF0C;&#x53EA;&#x6709;&#x5F53;&#x7F13;&#x51B2;&#x533A;&#x6EE1;&#x4E86;&#xFF0C;&#x624D;&#x4F1A;&#x6253;&#x5305;&#x6210; sudog&#xFF0C;&#x63D2;&#x5165;&#x5230; sendq &#x961F;&#x5217;&#x4E2D;&#x7B49;&#x5F85;&#x8C03;&#x5EA6;&#x3002;&#x6CE8;&#x610F;&#x7406;&#x89E3;&#x8FD9;&#x4E00;&#x60C5;&#x51B5;&#x3002;</p>
<p>&#x63A5;&#x6536;&#x65F6;&#x4E3B;&#x8981;&#x5206;&#x4E3A; 2 &#x79CD;&#x60C5;&#x51B5;&#xFF0C;&#x6709;&#x7F13;&#x51B2;&#x4E14; buf &#x6EE1;&#x548C;&#x65E0;&#x7F13;&#x51B2;&#x7684;&#x60C5;&#x51B5;&#xFF1A;</p>
<ul>
<li>&#x65E0;&#x7F13;&#x51B2;&#x3002;ep &#x53D1;&#x9001;&#x6570;&#x636E;&#x4E0D;&#x4E3A; nil&#xFF0C;&#x8C03;&#x7528; recvDirect() &#x5C06;&#x53D1;&#x9001;&#x961F;&#x5217;&#x4E2D; sudog &#x5B58;&#x50A8;&#x7684; ep &#x6570;&#x636E;&#x76F4;&#x63A5;&#x62F7;&#x8D1D;&#x5230;&#x63A5;&#x6536;&#x8005;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#x4E2D;&#x3002;</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_10.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<ul>
<li>
<p>&#x6709;&#x7F13;&#x51B2;&#x5E76;&#x4E14; buf &#x6EE1;&#x3002;&#x6709; 2 &#x6B21; copy &#x64CD;&#x4F5C;&#xFF0C;&#x5148;&#x5C06;&#x961F;&#x5217;&#x4E2D; recvx &#x7D22;&#x5F15;&#x4E0B;&#x6807;&#x7684;&#x6570;&#x636E;&#x62F7;&#x8D1D;&#x5230;&#x63A5;&#x6536;&#x65B9;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#xFF0C;&#x518D;&#x5C06;&#x53D1;&#x9001;&#x961F;&#x5217;&#x5934;&#x7684;&#x6570;&#x636E;&#x62F7;&#x8D1D;&#x5230;&#x7F13;&#x51B2;&#x533A;&#x4E2D;&#xFF0C;&#x91CA;&#x653E;&#x4E00;&#x4E2A; sudog &#x963B;&#x585E;&#x7684; goroutine&#x3002;</p>
<p>&#x6709;&#x7F13;&#x51B2;&#x4E14; buf &#x6EE1;&#x7684;&#x60C5;&#x51B5;&#x9700;&#x8981;&#x6CE8;&#x610F;&#xFF0C;&#x53D6;&#x6570;&#x636E;&#x4ECE;&#x7F13;&#x51B2;&#x961F;&#x5217;&#x5934;&#x53D6;&#x51FA;&#xFF0C;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x653E;&#x5728;&#x961F;&#x5217;&#x5C3E;&#x90E8;&#xFF0C;&#x7531;&#x4E8E; buf &#x88C5;&#x6EE1;&#xFF0C;&#x53D6;&#x51FA;&#x7684; recvx &#x6307;&#x9488;&#x548C;&#x53D1;&#x9001;&#x7684; sendx &#x6307;&#x9488;&#x6307;&#x5411;&#x76F8;&#x540C;&#x7684;&#x4E0B;&#x6807;&#x3002;</p>
</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_9.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x6700;&#x540E;&#x8C03;&#x7528; goready() &#x5C06;&#x7B49;&#x5F85;&#x63A5;&#x6536;&#x7684;&#x963B;&#x585E; goroutine &#x7684;&#x72B6;&#x6001;&#x4ECE; Gwaiting &#x6216;&#x8005; Gscanwaiting &#x6539;&#x53D8;&#x6210; Grunnable&#x3002;&#x4E0B;&#x4E00;&#x8F6E;&#x8C03;&#x5EA6;&#x65F6;&#x4F1A;&#x5524;&#x9192;&#x8FD9;&#x4E2A;&#x53D1;&#x9001;&#x7684; goroutine&#x3002;&#x8FD9;&#x90E8;&#x5206;&#x903B;&#x8F91;&#x548C;&#x540C;&#x6B65;&#x53D1;&#x9001;&#x4E2D;&#x4E00;&#x81F4;&#xFF0C;&#x5173;&#x4E8E; goready() &#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x7684;&#x4EE3;&#x7801;&#x4E0D;&#x5728;&#x8D58;&#x8FF0;&#x3002;</p>
<h3 id="3-%E5%BC%82%E6%AD%A5%E6%8E%A5%E6%94%B6">3. &#x5F02;&#x6B65;&#x63A5;&#x6536;</h3>
<p>&#x5982;&#x679C; Channel &#x7684;&#x7F13;&#x51B2;&#x533A;&#x4E2D;&#x5305;&#x542B;&#x4E00;&#x4E9B;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x4ECE; Channel &#x4E2D;&#x63A5;&#x6536;&#x6570;&#x636E;&#x4F1A;&#x76F4;&#x63A5;&#x4ECE;&#x7F13;&#x51B2;&#x533A;&#x4E2D; recvx &#x7684;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;&#x4E2D;&#x53D6;&#x51FA;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x5904;&#x7406;&#xFF1A;</p>
<pre><code class="language-go">func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) {
......

	if c.qcount &gt; 0 {
		// &#x76F4;&#x63A5;&#x4ECE;&#x961F;&#x5217;&#x4E2D;&#x63A5;&#x6536;
		qp := chanbuf(c, c.recvx)
		if raceenabled {
			racenotify(c, c.recvx, nil)
		}
		if ep != nil {
			typedmemmove(c.elemtype, ep, qp)
		}
		typedmemclr(c.elemtype, qp)
		c.recvx++
		if c.recvx == c.dataqsiz {
			c.recvx = 0
		}
		c.qcount--
		unlock(&amp;c.lock)
		return true, true
	}

	if !block {
		unlock(&amp;c.lock)
		return false, false
	}
......
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#xFF0C;&#x5982;&#x679C;&#x63A5;&#x6536;&#x6570;&#x636E;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740; ep &#x4E0D;&#x4E3A;&#x7A7A;&#xFF0C;&#x5219;&#x8C03;&#x7528; runtime.typedmemmove() &#x5C06;&#x7F13;&#x51B2;&#x533A;&#x5185;&#x7684;&#x6570;&#x636E;&#x62F7;&#x8D1D;&#x5230;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x5E76;&#x901A;&#x8FC7; typedmemclr() &#x6E05;&#x9664;&#x961F;&#x5217;&#x4E2D;&#x7684;&#x6570;&#x636E;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_11.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x7EF4;&#x62A4; recvx &#x4E0B;&#x6807;&#xFF0C;&#x5982;&#x679C;&#x79FB;&#x52A8;&#x5230;&#x4E86;&#x73AF;&#x5F62;&#x961F;&#x5217;&#x7684;&#x961F;&#x5C3E;&#xFF0C;&#x4E0B;&#x6807;&#x9700;&#x8981;&#x56DE;&#x5230;&#x961F;&#x5934;&#x3002;&#x6700;&#x540E;&#x51CF;&#x5C11; qcount &#x8BA1;&#x6570;&#x5668;&#x5E76;&#x91CA;&#x653E;&#x6301;&#x6709; Channel &#x7684;&#x9501;&#x3002;</p>
<h3 id="4-%E9%98%BB%E5%A1%9E%E6%8E%A5%E6%94%B6">4. &#x963B;&#x585E;&#x63A5;&#x6536;</h3>
<p>&#x5982;&#x679C; channel &#x53D1;&#x9001;&#x961F;&#x5217;&#x4E0A;&#x6CA1;&#x6709;&#x5F85;&#x53D1;&#x9001;&#x7684; goroutine&#xFF0C;&#x5E76;&#x4E14;&#x7F13;&#x51B2;&#x533A;&#x4E5F;&#x6CA1;&#x6709;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x5C06;&#x4F1A;&#x8FDB;&#x5165;&#x5230;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x9636;&#x6BB5;&#x963B;&#x585E;&#x63A5;&#x6536;&#xFF1A;</p>
<pre><code class="language-go">func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) {
......

	gp := getg()
	mysg := acquireSudog()
	mysg.releasetime = 0
	if t0 != 0 {
		mysg.releasetime = -1
	}
	mysg.elem = ep
	mysg.waitlink = nil
	gp.waiting = mysg
	mysg.g = gp
	mysg.isSelect = false
	mysg.c = c
	gp.param = nil
	c.recvq.enqueue(mysg)
	atomic.Store8(&amp;gp.parkingOnChan, 1)
	gopark(chanparkcommit, unsafe.Pointer(&amp;c.lock), waitReasonChanReceive, traceEvGoBlockRecv, 2)
......
</code></pre>
<ul>
<li>&#x8C03;&#x7528; getg() &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x5F53;&#x524D; goroutine &#x7684;&#x6307;&#x9488;&#xFF0C;&#x7528;&#x4E8E;&#x7ED1;&#x5B9A;&#x7ED9;&#x4E00;&#x4E2A; sudog&#x3002;</li>
<li>&#x8C03;&#x7528; acquireSudog() &#x65B9;&#x6CD5;&#x83B7;&#x53D6;&#x4E00;&#x4E2A; sudog&#xFF0C;&#x53EF;&#x80FD;&#x662F;&#x65B0;&#x5EFA;&#x7684; sudog&#xFF0C;&#x4E5F;&#x6709;&#x53EF;&#x80FD;&#x662F;&#x4ECE;&#x7F13;&#x5B58;&#x4E2D;&#x83B7;&#x53D6;&#x7684;&#x3002;&#x8BBE;&#x7F6E;&#x597D; sudog &#x8981;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x548C;&#x72B6;&#x6001;&#x3002;&#x6BD4;&#x5982;&#x53D1;&#x9001;&#x7684; Channel&#x3001;&#x662F;&#x5426;&#x5728; select &#x4E2D;&#x548C;&#x5F85;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#x7B49;&#x7B49;&#x3002;</li>
<li>&#x8C03;&#x7528; c.recvq.enqueue &#x65B9;&#x6CD5;&#x5C06;&#x914D;&#x7F6E;&#x597D;&#x7684; sudog &#x52A0;&#x5165;&#x5F85;&#x53D1;&#x9001;&#x7684;&#x7B49;&#x5F85;&#x961F;&#x5217;&#x3002;</li>
<li>&#x8BBE;&#x7F6E;&#x539F;&#x5B50;&#x4FE1;&#x53F7;&#x3002;&#x5F53;&#x6808;&#x8981; shrink &#x6536;&#x7F29;&#x65F6;&#xFF0C;&#x8FD9;&#x4E2A;&#x6807;&#x8BB0;&#x4EE3;&#x8868;&#x5F53;&#x524D; goroutine &#x8FD8; parking &#x505C;&#x5728;&#x67D0;&#x4E2A; channel &#x4E2D;&#x3002;&#x5728; g &#x72B6;&#x6001;&#x53D8;&#x66F4;&#x4E0E;&#x8BBE;&#x7F6E; activeStackChans &#x72B6;&#x6001;&#x8FD9;&#x4E24;&#x4E2A;&#x65F6;&#x95F4;&#x70B9;&#x4E4B;&#x95F4;&#x7684;&#x65F6;&#x95F4;&#x7A97;&#x53E3;&#x8FDB;&#x884C;&#x6808; shrink &#x6536;&#x7F29;&#x662F;&#x4E0D;&#x5B89;&#x5168;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x9700;&#x8981;&#x8BBE;&#x7F6E;&#x8FD9;&#x4E2A;&#x539F;&#x5B50;&#x4FE1;&#x53F7;&#x3002;</li>
<li>&#x8C03;&#x7528; gopark &#x65B9;&#x6CD5;&#x6302;&#x8D77;&#x5F53;&#x524D; goroutine&#xFF0C;&#x72B6;&#x6001;&#x4E3A; waitReasonChanReceive&#xFF0C;&#x963B;&#x585E;&#x7B49;&#x5F85; channel&#x3002;</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_8_0.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x4E0A;&#x9762;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x4E0E; chansend() &#x4E2D;&#x963B;&#x585E;&#x53D1;&#x9001;&#x51E0;&#x4E4E;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#xFF0C;&#x533A;&#x522B;&#x5728;&#x4E8E;&#x6700;&#x540E;&#x4E00;&#x6B65;&#x6CA1;&#x6709; KeepAlive(ep)&#x3002;</p>
<pre><code class="language-go">func chanrecv(c *hchan, ep unsafe.Pointer, block bool) (selected, received bool) {
......

	// &#x88AB;&#x5524;&#x9192;
	if mysg != gp.waiting {
		throw(&quot;G waiting list is corrupted&quot;)
	}
	gp.waiting = nil
	gp.activeStackChans = false
	if mysg.releasetime &gt; 0 {
		blockevent(mysg.releasetime-t0, 2)
	}
	success := mysg.success
	gp.param = nil
	mysg.c = nil
	releaseSudog(mysg)
	return true, success
}
</code></pre>
<p>goroutine &#x88AB;&#x5524;&#x9192;&#x540E;&#x4F1A;&#x5B8C;&#x6210; channel &#x7684;&#x963B;&#x585E;&#x6570;&#x636E;&#x63A5;&#x6536;&#x3002;&#x63A5;&#x6536;&#x5B8C;&#x6700;&#x540E;&#x8FDB;&#x884C;&#x57FA;&#x672C;&#x7684;&#x53C2;&#x6570;&#x68C0;&#x67E5;&#xFF0C;&#x89E3;&#x9664; channel &#x7684;&#x7ED1;&#x5B9A;&#x5E76;&#x91CA;&#x653E; sudog&#x3002;</p>
<h3 id="5-%E5%B0%8F%E7%BB%93">5. &#x5C0F;&#x7ED3;</h3>
<p>&#x5173;&#x4E8E; channel &#x63A5;&#x6536;&#x7684;&#x6E90;&#x7801;&#x5B9E;&#x73B0;&#x5DF2;&#x7ECF;&#x5206;&#x6790;&#x5B8C;&#x4E86;&#xFF0C;&#x9488;&#x5BF9; channel &#x5404;&#x4E2A;&#x72B6;&#x6001;&#x505A;&#x4E00;&#x4E2A;&#x5C0F;&#x7ED3;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">Channel status</th>
<th style="text-align:center">Result</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">Read</td>
<td style="text-align:center">nil</td>
<td style="text-align:center">&#x963B;&#x585E;</td>
</tr>
<tr>
<td style="text-align:center">Read</td>
<td style="text-align:center">&#x6253;&#x5F00;&#x4E14;&#x975E;&#x7A7A;</td>
<td style="text-align:center">&#x8BFB;&#x53D6;&#x5230;&#x503C;</td>
</tr>
<tr>
<td style="text-align:center">Read</td>
<td style="text-align:center">&#x6253;&#x5F00;&#x4F46;&#x4E3A;&#x7A7A;</td>
<td style="text-align:center">&#x963B;&#x585E;</td>
</tr>
<tr>
<td style="text-align:center">Read</td>
<td style="text-align:center">&#x5173;&#x95ED;</td>
<td style="text-align:center">&lt;&#x9ED8;&#x8BA4;&#x503C;&gt;, false</td>
</tr>
<tr>
<td style="text-align:center">Read</td>
<td style="text-align:center">&#x53EA;&#x8BFB;</td>
<td style="text-align:center">Compile Error</td>
</tr>
</tbody>
</table>
<p>chanrecv &#x7684;&#x8FD4;&#x56DE;&#x503C;&#x6709;&#x51E0;&#x79CD;&#x60C5;&#x51B5;&#xFF1A;</p>
<pre><code class="language-go">tmp, ok := &lt;-ch
</code></pre>
<table>
<thead>
<tr>
<th style="text-align:center">Channel status</th>
<th style="text-align:center">Selected</th>
<th style="text-align:center">Received</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">nil</td>
<td style="text-align:center">false</td>
<td style="text-align:center">false</td>
</tr>
<tr>
<td style="text-align:center">&#x6253;&#x5F00;&#x4E14;&#x975E;&#x7A7A;</td>
<td style="text-align:center">true</td>
<td style="text-align:center">true</td>
</tr>
<tr>
<td style="text-align:center">&#x6253;&#x5F00;&#x4F46;&#x4E3A;&#x7A7A;</td>
<td style="text-align:center">false</td>
<td style="text-align:center">false</td>
</tr>
<tr>
<td style="text-align:center">&#x5173;&#x95ED;&#x4E14;&#x8FD4;&#x56DE;&#x503C;&#x662F;&#x96F6;&#x503C;</td>
<td style="text-align:center">true</td>
<td style="text-align:center">false</td>
</tr>
</tbody>
</table>
<p>received &#x503C;&#x4F1A;&#x4F20;&#x9012;&#x7ED9;&#x8BFB;&#x53D6; channel &#x5916;&#x90E8;&#x7684; bool &#x503C; ok&#xFF0C;selected &#x503C;&#x4E0D;&#x4F1A;&#x88AB;&#x5916;&#x90E8;&#x4F7F;&#x7528;&#x3002;</p>
<p>channel &#x63A5;&#x6536;&#x8FC7;&#x7A0B;&#x4E2D;&#x5305;&#x542B; 2 &#x6B21;&#x6709;&#x5173; goroutine &#x8C03;&#x5EA6;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<ol>
<li>&#x5F53; channel &#x4E3A; nil &#x65F6;&#xFF0C;&#x6267;&#x884C; gopark() &#x6302;&#x8D77;&#x5F53;&#x524D;&#x7684; goroutine&#x3002;</li>
<li>&#x5F53;&#x53D1;&#x9001;&#x961F;&#x5217;&#x4E2D;&#x5B58;&#x5728; sudog &#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x63A5;&#x6536;&#x6570;&#x636E;&#x65F6;&#xFF0C;&#x6267;&#x884C; goready()&#x5C06; g &#x63D2;&#x5165; runnext &#x63D2;&#x69FD;&#x4E2D;&#xFF0C;&#x72B6;&#x6001;&#x4ECE; Gwaiting &#x6216;&#x8005; Gscanwaiting &#x6539;&#x53D8;&#x6210; Grunnable&#xFF0C;&#x7B49;&#x5F85;&#x4E0B;&#x6B21;&#x8C03;&#x5EA6;&#x4FBF;&#x7ACB;&#x5373;&#x8FD0;&#x884C;&#x3002;</li>
<li>&#x5F53; channel &#x7F13;&#x51B2;&#x533A;&#x4E3A;&#x7A7A;&#xFF0C;&#x4E14;&#x6CA1;&#x6709;&#x53D1;&#x9001;&#x8005;&#x65F6;&#xFF0C;&#x8FD9;&#x65F6; channel &#x963B;&#x585E;&#xFF0C;&#x6267;&#x884C; gopark() &#x5C06; g &#x963B;&#x585E;&#xFF0C;&#x8BA9;&#x51FA; cpu &#x7684;&#x4F7F;&#x7528;&#x6743;&#x5E76;&#x7B49;&#x5F85;&#x8C03;&#x5EA6;&#x5668;&#x7684;&#x8C03;&#x5EA6;&#x3002;</li>
</ol>
<h2 id="%E5%85%AD-%E5%85%B3%E9%97%AD-channel">&#x516D;. &#x5173;&#x95ED; Channel</h2>
<p>&#x5173;&#x4E8E; channel &#x5E38;&#x89C1;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">close(ch)
</code></pre>
<p>&#x7F16;&#x8BD1;&#x5668;&#x4F1A;&#x5C06;&#x5176;&#x8F6C;&#x6362;&#x4E3A; runtime.closechan() &#x65B9;&#x6CD5;&#x3002;</p>
<h3 id="1-%E5%BC%82%E5%B8%B8%E6%A3%80%E6%9F%A5">1. &#x5F02;&#x5E38;&#x68C0;&#x67E5;</h3>
<pre><code class="language-go">func closechan(c *hchan) {
	if c == nil {
		panic(plainError(&quot;close of nil channel&quot;))
	}

	lock(&amp;c.lock)
	if c.closed != 0 {
		unlock(&amp;c.lock)
		panic(plainError(&quot;close of closed channel&quot;))
	}

	if raceenabled {
		callerpc := getcallerpc()
		racewritepc(c.raceaddr(), callerpc, funcPC(closechan))
		racerelease(c.raceaddr())
	}
	
	c.closed = 1
......
}
</code></pre>
<p>&#x5173;&#x95ED;&#x4E00;&#x4E2A; channel &#x6709; 2 &#x70B9;&#x9700;&#x8981;&#x6CE8;&#x610F;&#xFF0C;&#x5F53; Channel &#x662F;&#x4E00;&#x4E2A; nil &#x7A7A;&#x6307;&#x9488;&#x6216;&#x8005;&#x5173;&#x95ED;&#x4E00;&#x4E2A;&#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#x7684; channel &#x65F6;&#xFF0C;Go &#x8BED;&#x8A00;&#x8FD0;&#x884C;&#x65F6;&#x90FD;&#x4F1A;&#x76F4;&#x63A5; panic&#x3002;&#x4E0A;&#x8FF0; 2 &#x79CD;&#x60C5;&#x51B5;&#x90FD;&#x4E0D;&#x5B58;&#x5728;&#x65F6;&#xFF0C;&#x6807;&#x8BB0; channel &#x72B6;&#x6001;&#x4E3A; close&#x3002;</p>
<h3 id="2-%E9%87%8A%E6%94%BE%E6%89%80%E6%9C%89-readers-%E5%92%8C-writers">2. &#x91CA;&#x653E;&#x6240;&#x6709; readers &#x548C; writers</h3>
<p>&#x5173;&#x95ED; channel &#x7684;&#x4E3B;&#x8981;&#x5DE5;&#x4F5C;&#x662F;&#x91CA;&#x653E;&#x6240;&#x6709;&#x7684; readers &#x548C; writers&#x3002;</p>
<pre><code class="language-go">func closechan(c *hchan) {
......
	var glist gList

	for {
		sg := c.recvq.dequeue()
		if sg == nil {
			break
		}
		if sg.elem != nil {
			typedmemclr(c.elemtype, sg.elem)
			sg.elem = nil
		}
		if sg.releasetime != 0 {
			sg.releasetime = cputicks()
		}
		gp := sg.g
		gp.param = unsafe.Pointer(sg)
		sg.success = false
		if raceenabled {
			raceacquireg(gp, c.raceaddr())
		}
		glist.push(gp)
	}
......
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x662F;&#x56DE;&#x6536;&#x63A5;&#x6536;&#x8005;&#x7684; sudog&#x3002;&#x5C06;&#x6240;&#x6709;&#x7684;&#x63A5;&#x6536;&#x8005; readers &#x7684; sudog &#x7B49;&#x5F85;&#x961F;&#x5217;&#xFF08;recvq&#xFF09;&#x52A0;&#x5165;&#x5230;&#x5F85;&#x6E05;&#x9664;&#x961F;&#x5217; glist &#x4E2D;&#x3002;&#x6CE8;&#x610F;&#x8FD9;&#x91CC;&#x662F;&#x5148;&#x56DE;&#x6536;&#x63A5;&#x6536;&#x8005;&#x3002;&#x5C31;&#x7B97;&#x4ECE;&#x4E00;&#x4E2A; close &#x7684; channel &#x4E2D;&#x8BFB;&#x53D6;&#x503C;&#xFF0C;&#x4E0D;&#x4F1A;&#x53D1;&#x751F; panic&#xFF0C;&#x9876;&#x591A;&#x8BFB;&#x5230;&#x4E00;&#x4E2A;&#x9ED8;&#x8BA4;&#x96F6;&#x503C;&#x3002;</p>
<pre><code class="language-go">func closechan(c *hchan) {
......

	for {
		sg := c.sendq.dequeue()
		if sg == nil {
			break
		}
		sg.elem = nil
		if sg.releasetime != 0 {
			sg.releasetime = cputicks()
		}
		gp := sg.g
		gp.param = unsafe.Pointer(sg)
		sg.success = false
		if raceenabled {
			raceacquireg(gp, c.raceaddr())
		}
		glist.push(gp)
	}
	unlock(&amp;c.lock)
......
}
</code></pre>
<p>&#x518D;&#x56DE;&#x6536;&#x53D1;&#x9001;&#x8005; writers&#x3002;&#x56DE;&#x6536;&#x6B65;&#x9AA4;&#x548C;&#x56DE;&#x6536;&#x63A5;&#x6536;&#x8005;&#x662F;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#x7684;&#xFF0C;&#x5C06;&#x53D1;&#x9001;&#x8005;&#x7684;&#x7B49;&#x5F85;&#x961F;&#x5217; sendq &#x4E2D;&#x7684; sudog &#x653E;&#x5165;&#x5F85;&#x6E05;&#x9664;&#x961F;&#x5217; glist &#x4E2D;&#x3002;&#x6CE8;&#x610F;&#x8FD9;&#x91CC;&#x53EF;&#x80FD;&#x4F1A;&#x4EA7;&#x751F; panic&#x3002;&#x5728;&#x7B2C;&#x56DB;&#x7AE0;&#x53D1;&#x9001;&#x6570;&#x636E;&#x4E2D;&#x5206;&#x6790;&#x8FC7;&#xFF0C;&#x5F80;&#x4E00;&#x4E2A; close &#x7684; channel &#x4E2D;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x4F1A;&#x4EA7;&#x751F; panic&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_13.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<h3 id="3-%E5%8D%8F%E7%A8%8B%E8%B0%83%E5%BA%A6">3. &#x534F;&#x7A0B;&#x8C03;&#x5EA6;</h3>
<p>&#x6700;&#x540E;&#x4E00;&#x6B65;&#x66F4;&#x6539; goroutine &#x7684;&#x72B6;&#x6001;&#x3002;</p>
<pre><code class="language-go">func closechan(c *hchan) {
......
	for !glist.empty() {
		gp := glist.pop()
		gp.schedlink = 0
		goready(gp, 3)
	}
......
}
</code></pre>
<p>&#x6700;&#x540E;&#x4F1A;&#x4E3A;&#x6240;&#x6709;&#x88AB;&#x963B;&#x585E;&#x7684; goroutine &#x8C03;&#x7528; goready &#x89E6;&#x53D1;&#x8C03;&#x5EA6;&#x3002;&#x5C06;&#x6240;&#x6709; glist &#x4E2D;&#x7684; goroutine &#x72B6;&#x6001;&#x4ECE; _Gwaiting &#x8BBE;&#x7F6E;&#x4E3A; _Grunnable &#x72B6;&#x6001;&#xFF0C;&#x7B49;&#x5F85;&#x8C03;&#x5EA6;&#x5668;&#x7684;&#x8C03;&#x5EA6;&#x3002;</p>
<h3 id="4-%E4%BC%98%E9%9B%85%E5%85%B3%E9%97%AD">4. &#x4F18;&#x96C5;&#x5173;&#x95ED;</h3>
<p>&#x201C;Channel &#x6709;&#x51E0;&#x79CD;&#x4F18;&#x96C5;&#x7684;&#x5173;&#x95ED;&#x65B9;&#x6CD5;&#xFF1F;&#x201D; &#x8FD9;&#x79CD;&#x95EE;&#x9898;&#x5E38;&#x5E38;&#x51FA;&#x73B0;&#x5728;&#x9762;&#x8BD5;&#x9898;&#x4E2D;&#xFF0C;&#x7A76;&#x5176;&#x539F;&#x56E0;&#x662F;&#x56E0;&#x4E3A; Channel &#x521B;&#x5EFA;&#x5BB9;&#x6613;&#xFF0C;&#x4F46;&#x662F;&#x5173;&#x95ED;&#x201C;&#x4E0D;&#x6613;&#x201D;&#xFF1A;</p>
<ul>
<li>&#x5728;&#x4E0D;&#x6539;&#x53D8; Channel &#x81EA;&#x8EAB;&#x72B6;&#x6001;&#x7684;&#x6761;&#x4EF6;&#x4E0B;&#xFF0C;&#x65E0;&#x6CD5;&#x77E5;&#x9053;&#x5B83;&#x662F;&#x5426;&#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#x3002;&#x201C;&#x4E0D;&#x6613;&#x201D;&#x4E4B;&#x4E00;&#xFF0C;&#x5173;&#x95ED;&#x65F6;&#x673A;&#x672A;&#x77E5;&#x3002;</li>
<li>&#x5982;&#x679C;&#x4E00;&#x4E2A; Channel &#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#xFF0C;&#x91CD;&#x590D;&#x5173;&#x95ED; Channel &#x4F1A;&#x5BFC;&#x81F4; panic&#x3002;&#x201C;&#x4E0D;&#x6613;&#x201D;&#x4E4B;&#x4E8C;&#xFF0C;&#x4E0D;&#x80FD;&#x65E0;&#x8111;&#x5173;&#x95ED;&#x3002;</li>
<li>&#x5F80;&#x4E00;&#x4E2A; close &#x7684; Channel &#x5185;&#x5199;&#x6570;&#x636E;&#xFF0C;&#x4E5F;&#x4F1A;&#x5BFC;&#x81F4; panic&#x3002;&#x201C;&#x4E0D;&#x6613;&#x201D;&#x4E4B;&#x4E09;&#xFF0C;&#x5199;&#x6570;&#x636E;&#x4E4B;&#x524D;&#x4E5F;&#x9700;&#x8981;&#x5173;&#x6CE8;&#x662F;&#x5426; close &#x7684;&#x72B6;&#x6001;&#x3002;</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align:center"></th>
<th style="text-align:center">Channel Status</th>
<th style="text-align:center">Result</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">close</td>
<td style="text-align:center">nil</td>
<td style="text-align:center"><strong>panic</strong></td>
</tr>
<tr>
<td style="text-align:center">close</td>
<td style="text-align:center">&#x6253;&#x5F00;&#x4E14;&#x975E;&#x7A7A;</td>
<td style="text-align:center">&#x5173;&#x95ED; Channel&#xFF1B;&#x8BFB;&#x53D6;&#x6210;&#x529F;&#xFF0C;&#x76F4;&#x5230; Channel &#x8017;&#x5C3D;&#x6570;&#x636E;&#xFF0C;&#x7136;&#x540E;&#x8BFB;&#x53D6;&#x4EA7;&#x751F;&#x503C;&#x7684;&#x9ED8;&#x8BA4;&#x503C;</td>
</tr>
<tr>
<td style="text-align:center">close</td>
<td style="text-align:center">&#x6253;&#x5F00;&#x4F46;&#x4E3A;&#x7A7A;</td>
<td style="text-align:center">&#x5173;&#x95ED; Channel&#xFF1B;&#x8BFB;&#x5230;&#x751F;&#x4EA7;&#x8005;&#x7684;&#x9ED8;&#x8BA4;&#x503C;</td>
</tr>
<tr>
<td style="text-align:center">close</td>
<td style="text-align:center">&#x5173;&#x95ED;</td>
<td style="text-align:center"><strong>panic</strong></td>
</tr>
<tr>
<td style="text-align:center">close</td>
<td style="text-align:center">&#x53EA;&#x8BFB;</td>
<td style="text-align:center">Compile Error</td>
</tr>
</tbody>
</table>
<p>&#x90A3;&#x7A76;&#x7ADF;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x5173;&#x95ED; Channel &#x5462;&#xFF1F;&#x7531;&#x4E0A;&#x9762;&#x4E09;&#x4E2A;&#x201C;&#x4E0D;&#x6613;&#x201D;&#xFF0C;&#x53EF;&#x4EE5;&#x6D53;&#x7F29;&#x4E3A; 2 &#x70B9;&#xFF1A;</p>
<ul>
<li>&#x4E0D;&#x80FD;&#x7B80;&#x5355;&#x7684;&#x4ECE;&#x6D88;&#x8D39;&#x8005;&#x4FA7;&#x5173;&#x95ED; Channel&#x3002;</li>
<li>&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A;&#x751F;&#x4EA7;&#x8005;&#xFF0C;&#x5B83;&#x4EEC;&#x4E0D;&#x80FD;&#x5173;&#x95ED; Channel&#x3002;</li>
</ul>
<p>&#x89E3;&#x91CA;&#x4E00;&#x4E0B;&#x8FD9; 2 &#x4E2A;&#x95EE;&#x9898;&#x3002;&#x7B2C;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x6D88;&#x8D39;&#x8005;&#x4E0D;&#x77E5;&#x9053; Channel &#x4F55;&#x65F6;&#x8BE5;&#x5173;&#x95ED;&#x3002;&#x5982;&#x679C;&#x5173;&#x95ED;&#x4E86;&#x5DF2;&#x7ECF;&#x5173;&#x95ED;&#x7684; Channel &#x4F1A;&#x5BFC;&#x81F4; panic&#x3002;&#x800C;&#x4E14;&#x5206;&#x5E03;&#x5F0F;&#x5E94;&#x7528;&#x901A;&#x5E38;&#x6709;&#x591A;&#x4E2A;&#x6D88;&#x8D39;&#x8005;&#xFF0C;&#x6BCF;&#x4E2A;&#x6D88;&#x8D39;&#x8005;&#x7684;&#x884C;&#x4E3A;&#x4E00;&#x81F4;&#xFF0C;&#x8FD9;&#x4E48;&#x591A;&#x6D88;&#x8D39;&#x8005;&#x90FD;&#x5C1D;&#x8BD5;&#x5173;&#x95ED; Channel &#x5FC5;&#x7136;&#x4F1A;&#x5BFC;&#x81F4; panic&#x3002;&#x7B2C;&#x4E8C;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x5982;&#x679C;&#x6709;&#x591A;&#x4E2A;&#x751F;&#x4EA7;&#x8005;&#x5F80; Channel &#x5185;&#x5199;&#x5165;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x4E9B;&#x751F;&#x4EA7;&#x8005;&#x7684;&#x884C;&#x4E3A;&#x903B;&#x8F91;&#x4E5F;&#x90FD;&#x4E00;&#x81F4;&#xFF0C;&#x5982;&#x679C;&#x5176;&#x4E2D;&#x4E00;&#x4E2A;&#x751F;&#x4EA7;&#x8005;&#x5173;&#x95ED;&#x4E86; Channel&#xFF0C;&#x5176;&#x4ED6;&#x7684;&#x751F;&#x4EA7;&#x8005;&#x8FD8;&#x5728;&#x5F80;&#x91CC;&#x5199;&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x5019;&#x4F1A; panic&#x3002;&#x6240;&#x4EE5;&#x4E3A;&#x4E86;&#x9632;&#x6B62; panic&#xFF0C;&#x5FC5;&#x987B;&#x89E3;&#x51B3;&#x4E0A;&#x9762;&#x8FD9; 2 &#x4E2A;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x5173;&#x95ED; Channel &#x7684;&#x65B9;&#x5F0F;&#x5C31; 2 &#x79CD;&#xFF1A;</p>
<ul>
<li>Context</li>
<li>done channel</li>
</ul>
<p>Context &#x7684;&#x65B9;&#x5F0F;&#x5728;&#x672C;&#x7BC7;&#x6587;&#x7AE0;&#x4E0D;&#x8BE6;&#x7EC6;&#x5C55;&#x5F00;&#xFF0C;&#x8BE6;&#x7EC6;&#x7684;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x7B14;&#x8005; Context &#x7684;&#x90A3;&#x7BC7;&#x6587;&#x7AE0;&#x3002;&#x672C;&#x8282;&#x804A;&#x804A; done channel &#x7684;&#x505A;&#x6CD5;&#x3002;&#x5047;&#x8BBE;&#x6709;&#x591A;&#x4E2A;&#x751F;&#x4EA7;&#x8005;&#xFF0C;&#x6709;&#x591A;&#x4E2A;&#x6D88;&#x8D39;&#x8005;&#x3002;&#x5728;&#x751F;&#x4EA7;&#x8005;&#x548C;&#x6D88;&#x8D39;&#x8005;&#x4E4B;&#x95F4;&#x589E;&#x52A0;&#x4E00;&#x4E2A;&#x989D;&#x5916;&#x7684;&#x8F85;&#x52A9;&#x63A7;&#x5236; channel&#xFF0C;&#x7528;&#x6765;&#x4F20;&#x9012;&#x5173;&#x95ED;&#x4FE1;&#x53F7;&#x3002;</p>
<pre><code class="language-go">type session struct {
	done     chan struct{}
	doneOnce sync.Once
	data     chan int
}

func (sess *session) Serve() {
	go sess.loopRead()
	sess.loopWrite()
}

func (sess *session) loopRead() {
	defer func() {
		if err := recover(); err != nil {
			sess.doneOnce.Do(func() { close(sess.done) })
		}
	}()

	var err error
	for {
		select {
		case &lt;-sess.done:
			return
		default:
		}

		if err == io.ErrUnexpectedEOF || err == io.EOF {
			goto failed
		}
	}
failed:
	sess.doneOnce.Do(func() { close(sess.done) })
}

func (sess *session) loopWrite() {
	defer func() {
		if err := recover(); err != nil {
			sess.doneOnce.Do(func() { close(sess.done) })
		}
	}()

	var err error
	for {
		select {
		case &lt;-sess.done:
			return
		case sess.data &lt;- rand.Intn(100):
		}
		
		if err != nil {
			goto done
		}
	}
done:
	if err != nil {
		log(&quot;sess: loop write failed: %v, %s&quot;, err, sess)
	}
}

func (sess *session) ForceClose() {
	sess.doneOnce.Do(func() { close(sess.done) })
}
</code></pre>
<p>&#x6D88;&#x8D39;&#x8005;&#x4FA7;&#x53D1;&#x9001;&#x5173;&#x95ED; done channel&#xFF0C;&#x7531;&#x4E8E;&#x6D88;&#x8D39;&#x8005;&#x6709;&#x591A;&#x4E2A;&#xFF0C;&#x5982;&#x679C;&#x6BCF;&#x4E00;&#x4E2A;&#x90FD;&#x5173;&#x95ED; done channel&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4; panic&#x3002;&#x6240;&#x4EE5;&#x8FD9;&#x91CC;&#x7528; doneOnce.Do() &#x4FDD;&#x8BC1;&#x53EA;&#x4F1A;&#x5173;&#x95ED; done channel &#x4E00;&#x6B21;&#x3002;&#x8FD9;&#x89E3;&#x51B3;&#x4E86;&#x7B2C;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#x3002;&#x751F;&#x4EA7;&#x8005;&#x6536;&#x5230; done channel &#x7684;&#x4FE1;&#x53F7;&#x4EE5;&#x540E;&#x81EA;&#x52A8;&#x9000;&#x51FA;&#x3002;&#x591A;&#x4E2A;&#x751F;&#x4EA7;&#x8005;&#x9000;&#x51FA;&#x65F6;&#x95F4;&#x4E0D;&#x540C;&#xFF0C;&#x4F46;&#x662F;&#x6700;&#x7EC8;&#x80AF;&#x5B9A;&#x90FD;&#x4F1A;&#x9000;&#x51FA;&#x3002;&#x5F53;&#x751F;&#x4EA7;&#x8005;&#x5168;&#x90E8;&#x9000;&#x51FA;&#x4EE5;&#x540E;&#xFF0C;data channel &#x6700;&#x7EC8;&#x6CA1;&#x6709;&#x5F15;&#x7528;&#xFF0C;&#x4F1A;&#x88AB; gc &#x56DE;&#x6536;&#x3002;&#x8FD9;&#x4E5F;&#x89E3;&#x51B3;&#x4E86;&#x7B2C;&#x4E8C;&#x4E2A;&#x95EE;&#x9898;&#xFF0C;&#x751F;&#x4EA7;&#x8005;&#x4E0D;&#x4F1A;&#x53BB;&#x5173;&#x95ED; data channel&#xFF0C;&#x9632;&#x6B62;&#x51FA;&#x73B0; panic&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/149_1.png" alt="&#x6DF1;&#x5165; Go &#x5E76;&#x53D1;&#x539F;&#x8BED; &#x2014; Channel &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x603B;&#x7ED3;&#x4E00;&#x4E0B; done channel &#x7684;&#x505A;&#x6CD5;&#xFF1A;&#x6D88;&#x8D39;&#x8005;&#x5229;&#x7528;&#x8F85;&#x52A9;&#x7684; done channel &#x53D1;&#x9001;&#x4FE1;&#x53F7;&#xFF0C;&#x5E76;&#x5148;&#x5F00;&#x59CB;&#x9000;&#x51FA;&#x534F;&#x7A0B;&#x3002;&#x751F;&#x4EA7;&#x8005;&#x63A5;&#x6536;&#x5230; done channel &#x7684;&#x4FE1;&#x53F7;&#xFF0C;&#x4E5F;&#x5F00;&#x59CB;&#x9000;&#x51FA;&#x534F;&#x7A0B;&#x3002;&#x6700;&#x7EC8; data channel &#x65E0;&#x4EBA;&#x6301;&#x6709;&#xFF0C;&#x88AB; gc &#x56DE;&#x6536;&#x5173;&#x95ED;&#x3002;</p>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://dl.acm.org/doi/10.1145/359576.359585">ACM Communicating sequential processes</a><br>
<a href="https://cs.stanford.edu/people/eroberts/courses/soco/projects/2008-09/tony-hoare/csp.html">Stanford project about csp</a></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Go reflection 三定律与最佳实践]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x5B66;&#x4E2D;&#xFF0C;&#x53CD;&#x5C04;&#x5F0F;&#x7F16;&#x7A0B; reflective programming &#x6216;&#x53CD;&#x5C04; reflection&#xFF0C;&#x662F;&#x6307;&#x8BA1;&#x7B97;&#x673A;&#x7A0B;&#x5E8F;&#x5728;&#x8FD0;&#x884C;&#x65F6; runtime &#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x3001;&#x68C0;&#x6D4B;&#x548C;&#x4FEE;&#x6539;&#x5B83;&#x672C;&#x8EAB;&#x72B6;&#x6001;&#x6216;&#x884C;&#x4E3A;&#x7684;</p>]]></description><link>https://halfrost.com/go_reflection/</link><guid isPermaLink="false">634360bbd892dc307476ccec</guid><category><![CDATA[Golang]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 13 Oct 2019 07:12:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/03/148_0_.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/03/148_0_.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;"><p>&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x5B66;&#x4E2D;&#xFF0C;&#x53CD;&#x5C04;&#x5F0F;&#x7F16;&#x7A0B; reflective programming &#x6216;&#x53CD;&#x5C04; reflection&#xFF0C;&#x662F;&#x6307;&#x8BA1;&#x7B97;&#x673A;&#x7A0B;&#x5E8F;&#x5728;&#x8FD0;&#x884C;&#x65F6; runtime &#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x3001;&#x68C0;&#x6D4B;&#x548C;&#x4FEE;&#x6539;&#x5B83;&#x672C;&#x8EAB;&#x72B6;&#x6001;&#x6216;&#x884C;&#x4E3A;&#x7684;&#x4E00;&#x79CD;&#x80FD;&#x529B;&#x3002;&#x7528;&#x6BD4;&#x55BB;&#x6765;&#x8BF4;&#xFF0C;&#x53CD;&#x5C04;&#x5C31;&#x662F;&#x7A0B;&#x5E8F;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x65F6;&#x5019;&#x80FD;&#x591F;&#x201C;&#x89C2;&#x5BDF;&#x201D;&#x5E76;&#x4E14;&#x4FEE;&#x6539;&#x81EA;&#x5DF1;&#x7684;&#x884C;&#x4E3A;&#x3002;</p>
<blockquote>
<p>Wikipedia: In computer science, reflective programming or reflection is the ability of a process to examine, introspect, and modify its own structure and behavior.</p>
</blockquote>
<p>&#x201C;&#x53CD;&#x5C04;&#x201D;&#x548C;&#x201C;&#x5185;&#x7701;&#x201D;&#xFF08;type introspection&#xFF09;&#x5728;&#x6982;&#x5FF5;&#x4E0A;&#x6709;&#x533A;&#x522B;&#x3002;&#x5185;&#x7701;&#xFF08;&#x6216;&#x79F0;&#x201C;&#x81EA;&#x7701;&#x201D;&#xFF09;&#x673A;&#x5236;&#x4EC5;&#x6307;&#x7A0B;&#x5E8F;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x5BF9;&#x81EA;&#x8EAB;&#x4FE1;&#x606F;&#xFF08;&#x79F0;&#x4E3A;&#x5143;&#x6570;&#x636E;&#xFF09;&#x7684;&#x68C0;&#x6D4B;&#xFF1B;&#x53CD;&#x5C04;&#x673A;&#x5236;&#x4E0D;&#x4EC5;&#x5305;&#x62EC;&#x8981;&#x80FD;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x5BF9;&#x7A0B;&#x5E8F;&#x81EA;&#x8EAB;&#x4FE1;&#x606F;&#x8FDB;&#x884C;&#x68C0;&#x6D4B;&#xFF0C;&#x8FD8;&#x8981;&#x6C42;&#x7A0B;&#x5E8F;&#x80FD;&#x8FDB;&#x4E00;&#x6B65;&#x6839;&#x636E;&#x8FD9;&#x4E9B;&#x4FE1;&#x606F;&#x6539;&#x53D8;&#x7A0B;&#x5E8F;&#x72B6;&#x6001;&#x6216;&#x7ED3;&#x6784;&#x3002;&#x6240;&#x4EE5;&#x53CD;&#x5C04;&#x7684;&#x6982;&#x5FF5;&#x8303;&#x7574;&#x8981;&#x5927;&#x4E8E;&#x5185;&#x7701;&#x3002;</p>
<p>&#x5728;&#x7C7B;&#x578B;&#x68C0;&#x6D4B;&#x4E25;&#x683C;&#x7684;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x7684;&#x7F16;&#x7A0B;&#x8BED;&#x8A00;&#x5982; Java &#x4E2D;&#xFF0C;&#x4E00;&#x822C;&#x9700;&#x8981;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x95F4;&#x5BF9;&#x7A0B;&#x5E8F;&#x4E2D;&#x9700;&#x8981;&#x8C03;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x7684;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x3001;&#x63A5;&#x53E3;&#xFF08;interface&#xFF09;&#x3001;&#x5B57;&#x6BB5;&#xFF08;fields&#xFF09;&#x548C;&#x65B9;&#x6CD5;&#x7684;&#x5408;&#x6CD5;&#x6027;&#x8FDB;&#x884C;&#x68C0;&#x67E5;&#x3002;&#x53CD;&#x5C04;&#x6280;&#x672F;&#x5219;&#x5141;&#x8BB8;&#x5C06;&#x5BF9;&#x9700;&#x8981;&#x8C03;&#x7528;&#x7684;&#x5BF9;&#x8C61;&#x7684;&#x6D88;&#x606F;&#x68C0;&#x67E5;&#x5DE5;&#x4F5C;&#x4ECE;&#x7F16;&#x8BD1;&#x671F;&#x95F4;&#x63A8;&#x8FDF;&#x5230;&#x8FD0;&#x884C;&#x671F;&#x95F4;&#x518D;&#x73B0;&#x573A;&#x6267;&#x884C;&#x3002;&#x8FD9;&#x6837;&#x4E00;&#x6765;&#xFF0C;&#x53EF;&#x4EE5;&#x5728;&#x7F16;&#x8BD1;&#x671F;&#x95F4;&#x5148;&#x4E0D;&#x660E;&#x786E;&#x76EE;&#x6807;&#x5BF9;&#x8C61;&#x7684;&#x63A5;&#x53E3;&#xFF08;interface&#xFF09;&#x540D;&#x79F0;&#x3001;&#x5B57;&#x6BB5;&#xFF08;fields&#xFF09;&#xFF0C;&#x5373;&#x5BF9;&#x8C61;&#x7684;&#x6210;&#x5458;&#x53D8;&#x91CF;&#x3001;&#x53EF;&#x7528;&#x65B9;&#x6CD5;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x8FD0;&#x884C;&#x6839;&#x636E;&#x76EE;&#x6807;&#x5BF9;&#x8C61;&#x81EA;&#x8EAB;&#x7684;&#x6D88;&#x606F;&#x51B3;&#x5B9A;&#x5982;&#x4F55;&#x5904;&#x7406;&#x3002;&#x5B83;&#x8FD8;&#x5141;&#x8BB8;&#x6839;&#x636E;&#x5224;&#x65AD;&#x7ED3;&#x679C;&#x8FDB;&#x884C;&#x5B9E;&#x4F8B;&#x5316;&#x65B0;&#x5BF9;&#x8C61;&#x548C;&#x76F8;&#x5173;&#x65B9;&#x6CD5;&#x7684;&#x8C03;&#x7528;&#x3002;</p>
<p>&#x53CD;&#x5C04;&#x4E3B;&#x8981;&#x7528;&#x9014;&#x5C31;&#x662F;&#x4F7F;&#x7ED9;&#x5B9A;&#x7684;&#x7A0B;&#x5E8F;&#xFF0C;&#x52A8;&#x6001;&#x5730;&#x9002;&#x5E94;&#x4E0D;&#x540C;&#x7684;&#x8FD0;&#x884C;&#x60C5;&#x51B5;&#x3002;&#x5229;&#x7528;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x5EFA;&#x6A21;&#x4E2D;&#x7684;&#x591A;&#x6001;&#xFF08;&#x591A;&#x6001;&#x6027;&#xFF09;&#x4E5F;&#x53EF;&#x4EE5;&#x7B80;&#x5316;&#x7F16;&#x5199;&#x5206;&#x522B;&#x9002;&#x7528;&#x4E8E;&#x591A;&#x79CD;&#x4E0D;&#x540C;&#x60C5;&#x5F62;&#x7684;&#x529F;&#x80FD;&#x4EE3;&#x7801;&#xFF0C;&#x4F46;&#x662F;&#x53CD;&#x5C04;&#x53EF;&#x4EE5;&#x89E3;&#x51B3;&#x591A;&#x6001;&#xFF08;&#x591A;&#x6001;&#x6027;&#xFF09;&#x5E76;&#x4E0D;&#x9002;&#x7528;&#x7684;&#x66F4;&#x666E;&#x904D;&#x60C5;&#x5F62;&#xFF0C;&#x4ECE;&#x800C;&#x66F4;&#x5927;&#x7A0B;&#x5EA6;&#x5730;&#x907F;&#x514D;&#x786C;&#x7F16;&#x7801;&#xFF08;&#x5373;&#x628A;&#x4EE3;&#x7801;&#x7684;&#x7EC6;&#x8282;&#x201C;&#x5199;&#x6B7B;&#x201D;&#xFF0C;&#x7F3A;&#x4E4F;&#x7075;&#x6D3B;&#x6027;&#xFF09;&#x7684;&#x4EE3;&#x7801;&#x98CE;&#x683C;&#x3002;</p>
<p><strong>&#x53CD;&#x5C04;&#x4E5F;&#x662F;&#x5143;&#x7F16;&#x7A0B;&#x7684;&#x4E00;&#x4E2A;&#x5173;&#x952E;&#x7B56;&#x7565;</strong>&#x3002;</p>
<p>&#x6700;&#x5E38;&#x89C1;&#x7684;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">import &quot;reflect&quot;

func main() {
	// Without reflection
	f := Foo{}
	f.Hello()

	// With reflection
	fT := reflect.TypeOf(Foo{})
	fV := reflect.New(fT)

	m := fV.MethodByName(&quot;Hello&quot;)
	if m.IsValid() {
		m.Call(nil)
	}
}
</code></pre>
<p>&#x53CD;&#x5C04;&#x770B;&#x4F3C;&#x4EE3;&#x7801;&#x66F4;&#x52A0;&#x590D;&#x6742;&#xFF0C;&#x4F46;&#x662F;&#x80FD;&#x5B9E;&#x73B0;&#x7684;&#x529F;&#x80FD;&#x66F4;&#x52A0;&#x7075;&#x6D3B;&#x4E86;&#x3002;&#x7A76;&#x7ADF;&#x4EC0;&#x4E48;&#x65F6;&#x5019;&#x7528;&#x53CD;&#x5C04;&#xFF1F;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x597D;&#x597D;&#x8BA8;&#x8BBA;&#x4E00;&#x4E0B;&#x3002;</p>
<h2 id>&#x4E00;. &#x57FA;&#x672C;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x548C;&#x65B9;&#x6CD5;</h2>
<p>&#x5728;&#x4E0A;&#x4E00;&#x7BC7; Go interface &#x4E2D;&#xFF0C;&#x53EF;&#x4EE5;&#x4E86;&#x89E3;&#x5230;&#x666E;&#x901A;&#x5BF9;&#x8C61;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x5B58;&#x5728;&#x5F62;&#x5F0F;&#xFF0C;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x503C;&#x5F97;&#x6211;&#x4EEC;&#x5173;&#x6CE8;&#x7684;&#x65E0;&#x975E;&#x662F;&#x4E24;&#x90E8;&#x5206;&#xFF0C;&#x4E00;&#x4E2A;&#x662F;&#x7C7B;&#x578B;&#xFF0C;&#x4E00;&#x4E2A;&#x662F;&#x5B83;&#x5B58;&#x7684;&#x503C;&#x3002;&#x53D8;&#x91CF;&#x7684;&#x7C7B;&#x578B;&#x51B3;&#x5B9A;&#x4E86;&#x5E95;&#x5C42; tpye &#x662F;&#x4EC0;&#x4E48;&#xFF0C;&#x652F;&#x6301;&#x54EA;&#x4E9B;&#x65B9;&#x6CD5;&#x96C6;&#x3002;&#x503C;&#x65E0;&#x975E;&#x5C31;&#x662F;&#x8BFB;&#x548C;&#x5199;&#x3002;&#x53BB;&#x5185;&#x5B58;&#x91CC;&#x9762;&#x54EA;&#x91CC;&#x8BFB;&#xFF0C;&#x628A; 0101 &#x5199;&#x5230;&#x5185;&#x5B58;&#x7684;&#x54EA;&#x91CC;&#xFF0C;&#x90FD;&#x662F;&#x7531;&#x7C7B;&#x578B;&#x51B3;&#x5B9A;&#x7684;&#x3002;&#x8FD9;&#x4E00;&#x70B9;&#x5728;&#x89E3;&#x6790;&#x4E0D;&#x540C; Json &#x6570;&#x636E;&#x7ED3;&#x6784;&#x7684;&#x65F6;&#x5019;&#x6DF1;&#x6709;&#x4F53;&#x4F1A;&#xFF0C;&#x5982;&#x679C;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x7528;&#x9519;&#x4E86;&#xFF0C;&#x89E3;&#x6790;&#x51FA;&#x6765;&#x5F97;&#x5230;&#x7684;&#x53D8;&#x91CF;&#x7684;&#x503C;&#x662F;&#x4E71;&#x7801;&#x3002;Go &#x63D0;&#x4F9B;&#x53CD;&#x5C04;&#x7684;&#x529F;&#x80FD;&#xFF0C;&#x662F;&#x4E3A;&#x4E86;&#x652F;&#x6301;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x52A8;&#x6001;&#x8BBF;&#x95EE;&#x53D8;&#x91CF;&#x7684;&#x7C7B;&#x578B;&#x548C;&#x503C;&#x3002;</p>
<p>&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x60F3;&#x8981;&#x52A8;&#x6001;&#x8BBF;&#x95EE;&#x7C7B;&#x578B;&#x7684;&#x503C;&#xFF0C;&#x5FC5;&#x7136;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5B58;&#x50A8;&#x4E86;&#x6240;&#x6709;&#x7528;&#x5230;&#x7684;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#x3002;&quot;reflect&quot; &#x5E93;&#x63D0;&#x4F9B;&#x4E86;&#x4E00;&#x5957;&#x4F9B;&#x5F00;&#x53D1;&#x8005;&#x4F7F;&#x7528;&#x7684;&#x8BBF;&#x95EE;&#x63A5;&#x53E3;&#x3002;Go &#x4E2D;&#x53CD;&#x5C04;&#x7684;&#x57FA;&#x7840;&#x662F;&#x63A5;&#x53E3;&#x548C;&#x7C7B;&#x578B;&#xFF0C;Go &#x5F88;&#x5DE7;&#x5999;&#x7684;&#x501F;&#x52A9;&#x4E86;&#x5BF9;&#x8C61;&#x5230;&#x63A5;&#x53E3;&#x7684;&#x8F6C;&#x6362;&#x65F6;&#x4F7F;&#x7528;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x5148;&#x5C06;&#x5BF9;&#x8C61;&#x4F20;&#x9012;&#x7ED9;&#x5185;&#x90E8;&#x7684;&#x7A7A;&#x63A5;&#x53E3;&#xFF0C;&#x5373;&#x5C06;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x6210;&#x7A7A;&#x63A5;&#x53E3; emptyInterface(&#x6570;&#x636E;&#x7ED3;&#x6784;&#x540C; eface &#x4E00;&#x81F4;)&#x3002;&#x7136;&#x540E;&#x53CD;&#x5C04;&#x518D;&#x57FA;&#x4E8E;&#x8FD9;&#x4E2A; emptyInterface &#x6765;&#x8BBF;&#x95EE;&#x548C;&#x64CD;&#x4F5C;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x7684;&#x503C;&#x548C;&#x7C7B;&#x578B;&#x3002;</p>
<p>&#x90A3;&#x4E48;&#x7B14;&#x8005;&#x5C31;&#x4ECE;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5F00;&#x59CB;&#x68B3;&#x7406; Go &#x662F;&#x5982;&#x4F55;&#x5B9E;&#x73B0;&#x53CD;&#x5C04;&#x7684;&#x3002;&#x5728; reflect &#x5305;&#x4E2D;&#xFF0C;&#x6709;&#x4E00;&#x4E2A;&#x63CF;&#x8FF0;&#x7C7B;&#x578B;&#x516C;&#x5171;&#x4FE1;&#x606F;&#x7684;&#x901A;&#x7528;&#x6570;&#x636E;&#x7ED3;&#x6784; rtype&#x3002;&#x4ECE;&#x6E90;&#x7801;&#x7684;&#x6CE8;&#x91CA;&#x4E0A;&#x770B;&#xFF0C;&#x5B83;&#x548C; interface &#x91CC;&#x9762;&#x7684; _type &#x662F;&#x540C;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x5B83;&#x4EEC;&#x4FE9;&#x53EA;&#x662F;&#x56E0;&#x4E3A;&#x5305;&#x9694;&#x79BB;&#xFF0C;&#x52A0;&#x4E0A;&#x4E3A;&#x4E86;&#x907F;&#x514D;&#x5FAA;&#x73AF;&#x5F15;&#x7528;&#xFF0C;&#x6240;&#x4EE5;&#x5728;&#x8FD9;&#x8FB9;&#x53C8;&#x590D;&#x5236;&#x4E86;&#x4E00;&#x904D;&#x3002;</p>
<pre><code class="language-go">// rtype is the common implementation of most values.
// It is embedded in other struct types.
//
// rtype must be kept in sync with ../runtime/type.go:/^type._type.
type rtype struct {
	size       uintptr // &#x7C7B;&#x578B;&#x5360;&#x7528;&#x5185;&#x5B58;&#x5927;&#x5C0F;
	ptrdata    uintptr // &#x5305;&#x542B;&#x6240;&#x6709;&#x6307;&#x9488;&#x7684;&#x5185;&#x5B58;&#x524D;&#x7F00;&#x5927;&#x5C0F;
	hash       uint32  // &#x7C7B;&#x578B; hash
	tflag      tflag   // &#x6807;&#x8BB0;&#x4F4D;&#xFF0C;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x53CD;&#x5C04;
	align      uint8   // &#x5BF9;&#x9F50;&#x5B57;&#x8282;&#x4FE1;&#x606F;
	fieldAlign uint8   // &#x5F53;&#x524D;&#x7ED3;&#x6784;&#x5B57;&#x6BB5;&#x7684;&#x5BF9;&#x9F50;&#x5B57;&#x8282;&#x6570;
	kind       uint8   // &#x57FA;&#x7840;&#x7C7B;&#x578B;&#x679A;&#x4E3E;&#x503C;
	equal func(unsafe.Pointer, unsafe.Pointer) bool // &#x6BD4;&#x8F83;&#x4E24;&#x4E2A;&#x5F62;&#x53C2;&#x5BF9;&#x5E94;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;&#x662F;&#x5426;&#x76F8;&#x7B49;
	gcdata    *byte    // GC &#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;
	str       nameOff  // &#x7C7B;&#x578B;&#x540D;&#x79F0;&#x5B57;&#x7B26;&#x4E32;&#x5728;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x6BB5;&#x4E2D;&#x7684;&#x504F;&#x79FB;&#x91CF;
	ptrToThis typeOff  // &#x7C7B;&#x578B;&#x5143;&#x4FE1;&#x606F;&#x6307;&#x9488;&#x5728;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x6BB5;&#x4E2D;&#x7684;&#x504F;&#x79FB;&#x91CF;
}
</code></pre>
<p>&#x76F8;&#x540C;&#x7684;&#xFF0C;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x4E5F;&#x90FD;&#x590D;&#x5236;&#x4E86;&#x4E00;&#x904D;&#xFF1A;</p>
<pre><code class="language-go">type arraytype struct {
	typ   _type
	elem  *_type
	slice *_type
	len   uintptr
}

type chantype struct {
	typ  _type
	elem *_type
	dir  uintptr
}
</code></pre>
<p>&#x6240;&#x6709;&#x57FA;&#x7840;&#x7C7B;&#x578B;&#x90FD;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#xFF0C;&#x8BE6;&#x60C5;&#x53EF;&#x89C1;&#x4E0A;&#x4E00;&#x7BC7;&#x300A;&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x300B;&#x3002;&#x4E0B;&#x9762;&#x6765;&#x770B;&#x770B; Type interface &#x7A76;&#x7ADF;&#x6DB5;&#x76D6;&#x4E86;&#x54EA;&#x4E9B;&#x6709;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#xFF1A;</p>
<h3 id="1reflecttype">1. reflect.Type &#x901A;&#x7528;&#x65B9;&#x6CD5;</h3>
<p>&#x4EE5;&#x4E0B;&#x8FD9;&#x4E9B;&#x65B9;&#x6CD5;&#x662F;&#x901A;&#x7528;&#x65B9;&#x6CD5;&#xFF0C;&#x53EF;&#x4EE5;&#x9002;&#x7528;&#x4E8E;&#x4EFB;&#x4F55;&#x7C7B;&#x578B;&#x3002;</p>
<pre><code class="language-go">// Type &#x662F; Go &#x7C7B;&#x578B;&#x7684;&#x8868;&#x793A;&#x3002;
//
// &#x5E76;&#x975E;&#x6240;&#x6709;&#x65B9;&#x6CD5;&#x90FD;&#x9002;&#x7528;&#x4E8E;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x3002;
// &#x5728;&#x8C03;&#x7528; kind &#x5177;&#x4F53;&#x65B9;&#x6CD5;&#x4E4B;&#x524D;&#xFF0C;&#x5148;&#x4F7F;&#x7528; Kind &#x65B9;&#x6CD5;&#x627E;&#x51FA;&#x7C7B;&#x578B;&#x7684;&#x79CD;&#x7C7B;&#x3002;&#x56E0;&#x4E3A;&#x8C03;&#x7528;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x5982;&#x679C;&#x7C7B;&#x578B;&#x4E0D;&#x5339;&#x914D;&#x4F1A;&#x5BFC;&#x81F4; panic
//
// Type &#x7C7B;&#x578B;&#x503C;&#x662F;&#x53EF;&#x4EE5;&#x6BD4;&#x8F83;&#x7684;&#xFF0C;&#x6BD4;&#x5982;&#x7528; == &#x64CD;&#x4F5C;&#x7B26;&#x3002;&#x6240;&#x4EE5;&#x5B83;&#x53EF;&#x4EE5;&#x7528;&#x505A; map &#x7684; key
// &#x5982;&#x679C;&#x4E24;&#x4E2A; Type &#x503C;&#x4EE3;&#x8868;&#x76F8;&#x540C;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x90A3;&#x4E48;&#x5B83;&#x4EEC;&#x4E00;&#x5B9A;&#x662F;&#x76F8;&#x7B49;&#x7684;&#x3002;
type Type interface {
	
	// Align &#x8FD4;&#x56DE;&#x8BE5;&#x7C7B;&#x578B;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x5206;&#x914D;&#x65F6;&#xFF0C;&#x4EE5;&#x5B57;&#x8282;&#x6570;&#x4E3A;&#x5355;&#x4F4D;&#x7684;&#x5B57;&#x8282;&#x6570;
	Align() int
	
	// FieldAlign &#x8FD4;&#x56DE;&#x8BE5;&#x7C7B;&#x578B;&#x5728;&#x7ED3;&#x6784;&#x4E2D;&#x4F5C;&#x4E3A;&#x5B57;&#x6BB5;&#x4F7F;&#x7528;&#x65F6;&#xFF0C;&#x4EE5;&#x5B57;&#x8282;&#x6570;&#x4E3A;&#x5355;&#x4F4D;&#x7684;&#x5B57;&#x8282;&#x6570;
	FieldAlign() int
	
	// Method &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x7C7B;&#x578B;&#x65B9;&#x6CD5;&#x96C6;&#x4E2D;&#x7684;&#x7B2C; i &#x4E2A;&#x65B9;&#x6CD5;&#x3002;
	// &#x5982;&#x679C; i &#x4E0D;&#x5728;[0, NumMethod()]&#x8303;&#x56F4;&#x5185;&#xFF0C;&#x5C31;&#x4F1A; panic&#x3002;
	// &#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x975E;&#x63A5;&#x53E3;&#x7C7B;&#x578B; T &#x6216; *T&#xFF0C;&#x8FD4;&#x56DE;&#x7684; Method &#x7684; Type &#x548C; Func&#x3002;
	// fields &#x5B57;&#x6BB5;&#x63CF;&#x8FF0;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#xFF0C;&#x5B83;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x63A5;&#x6536;&#x65B9;&#xFF0C;&#x800C;&#x4E14;&#x53EA;&#x6709;&#x5BFC;&#x51FA;&#x7684;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x3002;
	// &#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#xFF0C;&#x8FD4;&#x56DE;&#x7684; Method &#x7684; Type &#x5B57;&#x6BB5;&#x7ED9;&#x51FA;&#x7684;&#x662F;&#x65B9;&#x6CD5;&#x7B7E;&#x540D;&#xFF0C;&#x6CA1;&#x6709;&#x63A5;&#x6536;&#x8005;&#xFF0C;Func&#x5B57;&#x6BB5;&#x4E3A;nil&#x3002;
	// &#x65B9;&#x6CD5;&#x662F;&#x6309;&#x5B57;&#x5178;&#x5E8F;&#x987A;&#x5E8F;&#x6392;&#x5217;&#x7684;&#x3002;
	Method(int) Method
	
	// MethodByName &#x8FD4;&#x56DE;&#x7C7B;&#x578B;&#x4E2D;&#x5E26;&#x6709;&#x8BE5;&#x540D;&#x79F0;&#x7684;&#x65B9;&#x6CD5;&#x3002;
	// &#x65B9;&#x6CD5;&#x96C6;&#x548C;&#x4E00;&#x4E2A;&#x8868;&#x793A;&#x662F;&#x5426;&#x627E;&#x5230;&#x8BE5;&#x65B9;&#x6CD5;&#x7684;&#x5E03;&#x5C14;&#x503C;&#x3002;
	// &#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x975E;&#x63A5;&#x53E3;&#x7C7B;&#x578B; T &#x6216; *T&#xFF0C;&#x8FD4;&#x56DE;&#x7684; Method &#x7684; Type &#x548C; Func&#x3002;
	// fields &#x5B57;&#x6BB5;&#x63CF;&#x8FF0;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#xFF0C;&#x5176;&#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x662F;&#x63A5;&#x6536;&#x65B9;&#x3002;
	// &#x5BF9;&#x4E8E;&#x4E00;&#x4E2A;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#xFF0C;&#x8FD4;&#x56DE;&#x7684; Method &#x7684; Type &#x5B57;&#x6BB5;&#x7ED9;&#x51FA;&#x7684;&#x662F;&#x65B9;&#x6CD5;&#x7B7E;&#x540D;&#xFF0C;&#x6CA1;&#x6709;&#x63A5;&#x6536;&#x8005;&#xFF0C;Func&#x5B57;&#x6BB5;&#x4E3A;nil&#x3002;
	MethodByName(string) (Method, bool)

	// NumMethod &#x8FD4;&#x56DE;&#x4F7F;&#x7528; Method &#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x7684;&#x65B9;&#x6CD5;&#x6570;&#x91CF;&#x3002;
	// &#x8BF7;&#x6CE8;&#x610F;&#xFF0C;NumMethod &#x53EA;&#x5728;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#x7684;&#x8C03;&#x7528;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x5BF9;&#x672A;&#x5BFC;&#x51FA;&#x65B9;&#x6CD5;&#x8FDB;&#x884C;&#x8BA1;&#x6570;&#x3002;
	NumMethod() int

	// &#x5BF9;&#x4E8E;&#x5B9A;&#x4E49;&#x7684;&#x7C7B;&#x578B;&#xFF0C;Name &#x8FD4;&#x56DE;&#x5176;&#x5305;&#x4E2D;&#x7684;&#x7C7B;&#x578B;&#x540D;&#x79F0;&#x3002;
	// &#x5BF9;&#x4E8E;&#x5176;&#x4ED6;(&#x975E;&#x5B9A;&#x4E49;&#x7684;)&#x7C7B;&#x578B;&#xFF0C;&#x5B83;&#x8FD4;&#x56DE;&#x7A7A;&#x5B57;&#x7B26;&#x4E32;&#x3002;
	Name() string

	// PkgPath &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x5B9A;&#x4E49;&#x7C7B;&#x578B;&#x7684;&#x5305;&#x7684;&#x8DEF;&#x5F84;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x5BFC;&#x5165;&#x8DEF;&#x5F84;&#xFF0C;&#x5BFC;&#x5165;&#x8DEF;&#x5F84;&#x662F;&#x552F;&#x4E00;&#x6807;&#x8BC6;&#x5305;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x5982; &quot;encoding/base64&quot;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x662F;&#x9884;&#x5148;&#x58F0;&#x660E;&#x7684;(string, error)&#x6216;&#x8005;&#x6CA1;&#x6709;&#x5B9A;&#x4E49;(*T, struct{}, []int&#xFF0C;&#x6216; A&#xFF0C;&#x5176;&#x4E2D; A &#x662F;&#x4E00;&#x4E2A;&#x975E;&#x5B9A;&#x4E49;&#x7C7B;&#x578B;&#x7684;&#x522B;&#x540D;&#xFF09;&#xFF0C;&#x5305;&#x7684;&#x8DEF;&#x5F84;&#x5C06;&#x662F;&#x7A7A;&#x5B57;&#x7B26;&#x4E32;&#x3002;
	PkgPath() string

	// Size &#x8FD4;&#x56DE;&#x5B58;&#x50A8;&#x7ED9;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x503C;&#x6240;&#x9700;&#x7684;&#x5B57;&#x8282;&#x6570;&#x3002;&#x5B83;&#x7C7B;&#x4F3C;&#x4E8E; unsafe.Sizeof.
	Size() uintptr

	// String &#x8FD4;&#x56DE;&#x8BE5;&#x7C7B;&#x578B;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x8868;&#x793A;&#x3002;
	// &#x5B57;&#x7B26;&#x4E32;&#x8868;&#x793A;&#x6CD5;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x7F29;&#x77ED;&#x7684;&#x5305;&#x540D;&#x3002;
	// (&#x4F8B;&#x5982;&#xFF0C;&#x4F7F;&#x7528; base64 &#x800C;&#x4E0D;&#x662F; &quot;encoding/base64&quot;)&#x5E76;&#x4E14;&#x5B83;&#x5E76;&#x4E0D;&#x80FD;&#x4FDD;&#x8BC1;&#x7C7B;&#x578B;&#x4E4B;&#x95F4;&#x662F;&#x552F;&#x4E00;&#x7684;&#x3002;&#x5982;&#x679C;&#x662F;&#x4E3A;&#x4E86;&#x6D4B;&#x8BD5;&#x7C7B;&#x578B;&#x6807;&#x8BC6;&#xFF0C;&#x5E94;&#x8BE5;&#x76F4;&#x63A5;&#x6BD4;&#x8F83;&#x7C7B;&#x578B; Type&#x3002;
	String() string

	// Kind &#x8FD4;&#x56DE;&#x8BE5;&#x7C7B;&#x578B;&#x7684;&#x5177;&#x4F53;&#x79CD;&#x7C7B;&#x3002;
	Kind() Kind

	// Implements &#x8868;&#x793A;&#x8BE5;&#x7C7B;&#x578B;&#x662F;&#x5426;&#x5B9E;&#x73B0;&#x4E86;&#x63A5;&#x53E3;&#x7C7B;&#x578B; u&#x3002;
	Implements(u Type) bool

	// AssignableTo &#x8868;&#x793A;&#x8BE5;&#x7C7B;&#x578B;&#x7684;&#x503C;&#x662F;&#x5426;&#x53EF;&#x4EE5;&#x5206;&#x914D;&#x7ED9;&#x7C7B;&#x578B; u&#x3002;
	AssignableTo(u Type) bool

	// ConvertibleTo &#x8868;&#x793A;&#x8BE5;&#x7C7B;&#x578B;&#x7684;&#x503C;&#x662F;&#x5426;&#x53EF;&#x8F6C;&#x6362;&#x4E3A; u &#x7C7B;&#x578B;&#x3002;
	ConvertibleTo(u Type) bool

	// Comparable &#x8868;&#x793A;&#x8BE5;&#x7C7B;&#x578B;&#x7684;&#x503C;&#x662F;&#x5426;&#x5177;&#x6709;&#x53EF;&#x6BD4;&#x6027;&#x3002;
	Comparable() bool
}
</code></pre>
<h3 id="2reflecttype">2. reflect.Type &#x4E13;&#x6709;&#x65B9;&#x6CD5;</h3>
<p>&#x4EE5;&#x4E0B;&#x8FD9;&#x4E9B;&#x65B9;&#x6CD5;&#x662F;&#x67D0;&#x4E9B;&#x7C7B;&#x578B;&#x4E13;&#x6709;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x5982;&#x679C;&#x7C7B;&#x578B;&#x4E0D;&#x5339;&#x914D;&#x4F1A;&#x53D1;&#x751F; panic&#x3002;&#x5728;&#x4E0D;&#x786E;&#x5B9A;&#x7C7B;&#x578B;&#x4E4B;&#x524D;&#x6700;&#x597D;&#x5148;&#x8C03;&#x7528; Kind() &#x65B9;&#x6CD5;&#x786E;&#x5B9A;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x518D;&#x8C03;&#x7528;&#x7C7B;&#x578B;&#x7684;&#x4E13;&#x6709;&#x65B9;&#x6CD5;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:left">Kind</th>
<th style="text-align:left">Methods applicable</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Int*</td>
<td style="text-align:left">Bits</td>
</tr>
<tr>
<td style="text-align:left">Uint*</td>
<td style="text-align:left">Bits</td>
</tr>
<tr>
<td style="text-align:left">Float*</td>
<td style="text-align:left">Bits</td>
</tr>
<tr>
<td style="text-align:left">Complex*</td>
<td style="text-align:left">Bits</td>
</tr>
<tr>
<td style="text-align:left">Array</td>
<td style="text-align:left">Elem, Len</td>
</tr>
<tr>
<td style="text-align:left">Chan</td>
<td style="text-align:left">ChanDir, Elem</td>
</tr>
<tr>
<td style="text-align:left">Func</td>
<td style="text-align:left">In, NumIn, Out, NumOut, IsVariadic</td>
</tr>
<tr>
<td style="text-align:left">Map</td>
<td style="text-align:left">Key, Elem</td>
</tr>
<tr>
<td style="text-align:left">Ptr</td>
<td style="text-align:left">Elem</td>
</tr>
<tr>
<td style="text-align:left">Slice</td>
<td style="text-align:left">Elem</td>
</tr>
<tr>
<td style="text-align:left">Struct</td>
<td style="text-align:left">Field, FieldByIndex, FieldByName,FieldByNameFunc, NumField</td>
</tr>
</tbody>
</table>
<p>&#x5BF9;&#x4E13;&#x6709;&#x65B9;&#x6CD5;&#x7684;&#x8BF4;&#x660E;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">type Type interface {

	// Bits &#x4EE5; bits &#x4E3A;&#x5355;&#x4F4D;&#x8FD4;&#x56DE;&#x7C7B;&#x578B;&#x7684;&#x5927;&#x5C0F;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x5C5E;&#x4E8E;&#xFF1A;sized &#x6216;&#x8005; unsized Int, Uint, Float, &#x6216;&#x8005; Complex&#xFF0C;&#x4F1A; panic&#x3002;
	//&#x5927;&#x5C0F;&#x4E0D;&#x4E00;&#x7684;Int&#x3001;Uint&#x3001;Float&#x6216;Complex&#x7C7B;&#x578B;&#x3002;
	Bits() int

	// ChanDir &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x901A;&#x9053;&#x7C7B;&#x578B;&#x7684;&#x65B9;&#x5411;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Chan&#xFF0C;&#x4F1A; panic&#x3002;
	ChanDir() ChanDir


	// IsVariadic &#x8868;&#x793A;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x7C7B;&#x578B;&#x7684;&#x6700;&#x7EC8;&#x8F93;&#x5165;&#x53C2;&#x6570;&#x662F;&#x5426;&#x4E3A;&#x4E00;&#x4E2A; &quot;...&quot; &#x53EF;&#x53D8;&#x53C2;&#x6570;&#x3002;&#x5982;&#x679C;&#x662F;&#xFF0C;t.In(t.NumIn() - 1) &#x8FD4;&#x56DE;&#x53C2;&#x6570;&#x7684;&#x9690;&#x5F0F;&#x5B9E;&#x9645;&#x7C7B;&#x578B; []T.
	// &#x66F4;&#x5177;&#x4F53;&#x7684;&#xFF0C;&#x5982;&#x679C; t &#x4EE3;&#x8868; func(x int, y ... float64)&#xFF0C;&#x90A3;&#x4E48;&#xFF1A;
	// t.NumIn() == 2
	// t.In(0)&#x662F; &quot;int&quot; &#x7684; reflect.Type &#x53CD;&#x5C04;&#x7C7B;&#x578B;&#x3002;
	// t.In(1)&#x662F; &quot;[]float64&quot; &#x7684; reflect.Type &#x53CD;&#x5C04;&#x7C7B;&#x578B;&#x3002;
	// t.IsVariadic() == true
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Func.IsVariadic&#xFF0C;IsVariadic &#x4F1A; panic
	IsVariadic() bool

	// Elem &#x8FD4;&#x56DE;&#x4E00;&#x4E2A; type &#x7684;&#x5143;&#x7D20;&#x7C7B;&#x578B;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Array&#x3001;Chan&#x3001;Map&#x3001;Ptr &#x6216; Slice&#xFF0C;&#x5C31;&#x4F1A; panic
	Elem() Type

	// Field &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x7ED3;&#x6784;&#x7C7B;&#x578B;&#x7684;&#x7B2C; i &#x4E2A;&#x5B57;&#x6BB5;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Struct&#xFF0C;&#x5C31;&#x4F1A; panic&#x3002;
	// &#x5982;&#x679C; i &#x4E0D;&#x5728; [0, NumField()] &#x8303;&#x56F4;&#x5185;&#xFF0C;&#x4E5F;&#x4F1A; panic&#x3002;
	Field(i int) StructField

	// FieldByIndex &#x8FD4;&#x56DE;&#x7D22;&#x5F15;&#x5E8F;&#x5217;&#x5BF9;&#x5E94;&#x7684;&#x5D4C;&#x5957;&#x5B57;&#x6BB5;&#x3002;&#x5B83;&#x76F8;&#x5F53;&#x4E8E;&#x5BF9;&#x6BCF;&#x4E00;&#x4E2A; index &#x8C03;&#x7528; Field&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Struct&#xFF0C;&#x5C31;&#x4F1A; panic&#x3002;
	FieldByIndex(index []int) StructField

	// FieldByName &#x8FD4;&#x56DE;&#x7ED9;&#x5B9A;&#x540D;&#x79F0;&#x7684;&#x7ED3;&#x6784;&#x5B57;&#x6BB5;&#x548C;&#x4E00;&#x4E2A;&#x8868;&#x793A;&#x662F;&#x5426;&#x627E;&#x5230;&#x8BE5;&#x5B57;&#x6BB5;&#x7684;&#x5E03;&#x5C14;&#x503C;&#x3002;
	FieldByName(name string) (StructField, bool)

	// FieldByNameFunc &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x80FD;&#x6EE1;&#x8DB3; match &#x51FD;&#x6570;&#x7684;&#x5E26;&#x6709;&#x540D;&#x79F0;&#x7684; field &#x5B57;&#x6BB5;&#x3002;&#x5E03;&#x5C14;&#x503C;&#x8868;&#x793A;&#x662F;&#x5426;&#x627E;&#x5230;&#x3002;
	// FieldByNameFunc &#x5148;&#x5728;&#x81EA;&#x5DF1;&#x7684;&#x7ED3;&#x6784;&#x4F53;&#x7684;&#x5B57;&#x6BB5;&#x91CC;&#x9762;&#x67E5;&#x627E;&#xFF0C;&#x7136;&#x540E;&#x5728;&#x4EFB;&#x4F55;&#x5D4C;&#x5165;&#x7ED3;&#x6784;&#x4E2D;&#x7684;&#x5B57;&#x6BB5;&#x4E2D;&#x67E5;&#x627E;&#xFF0C;&#x6309;&#x5E7F;&#x5EA6;&#x7B2C;&#x4E00;&#x987A;&#x5E8F;&#x641C;&#x7D22;&#x3002;&#x6700;&#x7EC8;&#x505C;&#x6B62;&#x5728;&#x542B;&#x6709;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x80FD;&#x6EE1;&#x8DB3; match &#x51FD;&#x6570;&#x7684;&#x7ED3;&#x6784;&#x4F53;&#x4E2D;&#x3002;&#x5982;&#x679C;&#x5728;&#x8BE5;&#x6DF1;&#x5EA6;&#x4E0A;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x7684;&#x6709;&#x591A;&#x4E2A;&#x5B57;&#x6BB5;&#xFF0C;&#x8FD9;&#x4E9B;&#x5B57;&#x6BB5;&#x76F8;&#x4E92;&#x53D6;&#x6D88;&#xFF0C;&#x5E76;&#x4E14; FieldByNameFunc &#x8FD4;&#x56DE;&#x6CA1;&#x6709;&#x5339;&#x914D;&#x3002;
	// &#x8FD9;&#x79CD;&#x884C;&#x4E3A;&#x53CD;&#x6620;&#x4E86; Go &#x5728;&#x5305;&#x542B;&#x5D4C;&#x5165;&#x5F0F;&#x5B57;&#x6BB5;&#x7684;&#x7ED3;&#x6784;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5BF9;&#x540D;&#x79F0;&#x67E5;&#x627E;&#x7684;&#x5904;&#x7406;&#x65B9;&#x5F0F;
	FieldByNameFunc(match func(string) bool) (StructField, bool)

	// In &#x8FD4;&#x56DE;&#x51FD;&#x6570;&#x7C7B;&#x578B;&#x7684;&#x7B2C; i &#x4E2A;&#x8F93;&#x5165;&#x53C2;&#x6570;&#x7684;&#x7C7B;&#x578B;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Func &#x7C7B;&#x578B;&#x4F1A; panic&#x3002;
	// &#x5982;&#x679C; i &#x4E0D;&#x5728; [0, NumIn()) &#x7684;&#x8303;&#x56F4;&#x5185;&#xFF0C;&#x4F1A; panic&#x3002;
	In(i int) Type

	// Key &#x8FD4;&#x56DE;&#x4E00;&#x4E2A; map &#x7C7B;&#x578B;&#x7684; key &#x7C7B;&#x578B;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Map&#xFF0C;&#x4F1A; panic&#x3002;
	Key() Type

	// Len &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x6570;&#x7EC4;&#x7C7B;&#x578B;&#x7684;&#x957F;&#x5EA6;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Array&#xFF0C;&#x4F1A; panic&#x3002;
	Len() int

	// NumField &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x7ED3;&#x6784;&#x7C7B;&#x578B;&#x7684;&#x5B57;&#x6BB5;&#x6570;&#x76EE;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Struct&#xFF0C;&#x4F1A; panic&#x3002;
	NumField() int

	// NumIn &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x7C7B;&#x578B;&#x7684;&#x8F93;&#x5165;&#x53C2;&#x6570;&#x6570;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F;Func.NumIn()&#xFF0C;&#x4F1A; panic&#x3002;
	NumIn() int

	// NumOut &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x7C7B;&#x578B;&#x7684;&#x8F93;&#x51FA;&#x53C2;&#x6570;&#x6570;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684; Kind &#x4E0D;&#x662F; Func.NumOut()&#xFF0C;&#x4F1A; panic&#x3002;
	NumOut() int

	// Out &#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x7C7B;&#x578B;&#x7684;&#x7B2C; i &#x4E2A;&#x8F93;&#x51FA;&#x53C2;&#x6570;&#x7684;&#x7C7B;&#x578B;&#x3002;
	// &#x5982;&#x679C;&#x7C7B;&#x578B;&#x7684;&#x7C7B;&#x578B;&#x4E0D;&#x662F; Func.Out&#xFF0C;&#x4F1A; panic&#x3002;
	// &#x5982;&#x679C; i &#x4E0D;&#x5728; [0, NumOut()) &#x7684;&#x8303;&#x56F4;&#x5185;&#xFF0C;&#x4F1A; panic&#x3002;
	Out(i int) Type

	common() *rtype
	uncommon() *uncommonType
}
</code></pre>
<h3 id="3reflectvalue">3. reflect.Value &#x6570;&#x636E;&#x7ED3;&#x6784;</h3>
<p>&#x5728; reflect &#x5305;&#x4E2D;&#xFF0C;&#x5E76;&#x975E;&#x6240;&#x6709;&#x7684;&#x65B9;&#x6CD5;&#x90FD;&#x9002;&#x7528;&#x4E8E;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x7684;&#x503C;&#x3002;&#x5177;&#x4F53;&#x7684;&#x9650;&#x5236;&#x5728;&#x65B9;&#x6CD5;&#x8BF4;&#x660E;&#x6CE8;&#x91CA;&#x91CC;&#x9762;&#x6709;&#x5199;&#x3002;&#x5728;&#x8C03;&#x7528;&#x7279;&#x5B9A;&#x79CD;&#x7C7B;&#x7684;&#x65B9;&#x6CD5;&#x4E4B;&#x524D;&#xFF0C;&#x6700;&#x597D;&#x4F7F;&#x7528; Kind &#x65B9;&#x6CD5;&#x627E;&#x51FA; Value &#x7684;&#x79CD;&#x7C7B;&#x3002;&#x548C; reflect.Type &#x4E00;&#x6837;&#xFF0C;&#x8C03;&#x7528;&#x7C7B;&#x578B;&#x4E0D;&#x5339;&#x914D;&#x7684;&#x65B9;&#x6CD5;&#x4F1A;&#x5BFC;&#x81F4; panic&#x3002;&#x9700;&#x8981;&#x7279;&#x6B8A;&#x8BF4;&#x660E;&#x7684;&#x662F; zero Value&#xFF0C;zero Value &#x4EE3;&#x8868;&#x6CA1;&#x6709;&#x503C;&#x3002;&#x5B83;&#x7684; IsValid() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE; false&#xFF0C;Kind() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE; Invalid&#xFF0C;String() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE; &#x201C;<invalid value>&#x201D;&#xFF0C;&#x800C;&#x5269;&#x4E0B;&#x7684;&#x6240;&#x6709;&#x5176;&#x4ED6;&#x65B9;&#x6CD5;&#x5747;&#x4F1A; panic&#x3002;&#x5927;&#x591A;&#x6570;&#x51FD;&#x6570;&#x548C;&#x65B9;&#x6CD5;&#x4ECE;&#x4E0D;&#x8FD4;&#x56DE; invalid value&#x3002;&#x5982;&#x679C;&#x786E;&#x5B9E;&#x8FD4;&#x56DE;&#x4E86; invalid value&#xFF0C;&#x5219;&#x5176;&#x6587;&#x6863;&#x4F1A;&#x660E;&#x786E;&#x8BF4;&#x660E;&#x7279;&#x6B8A;&#x6761;&#x4EF6;&#x3002;</invalid></p>
<p>&#x4E00;&#x4E2A; Value &#x53EF;&#x4EE5;&#x7531;&#x591A;&#x4E2A; goroutine &#x5E76;&#x53D1;&#x4F7F;&#x7528;&#xFF0C;&#x524D;&#x63D0;&#x662F;&#x5E95;&#x5C42;&#x7684; Go &#x503C;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x7528;&#x4E8E;&#x7B49;&#x6548;&#x7684;&#x76F4;&#x63A5;&#x64CD;&#x4F5C;&#x3002; &#x8981;&#x6BD4;&#x8F83;&#x4E24;&#x4E2A; Value&#xFF0C;&#x8BF7;&#x6BD4;&#x8F83; Interface &#x76F8;&#x5173;&#x65B9;&#x6CD5;&#x7684;&#x7ED3;&#x679C;&#x3002; &#x5728;&#x4E24;&#x4E2A; Value &#x4E0A;&#x4F7F;&#x7528; ==&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x6BD4;&#x8F83;&#x5B83;&#x4EEC;&#x8868;&#x793A;&#x7684;&#x5E95;&#x5C42;&#x7684;&#x503C;&#x3002;</p>
<p>reflect &#x5305;&#x91CC;&#x7684; Value &#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">type Value struct {
	// typ &#x5305;&#x542B;&#x7531;&#x503C;&#x8868;&#x793A;&#x7684;&#x503C;&#x7684;&#x7C7B;&#x578B;&#x3002;
	typ *rtype

	// &#x6307;&#x5411;&#x503C;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x5982;&#x679C;&#x8BBE;&#x7F6E;&#x4E86; flagIndir&#xFF0C;&#x5219;&#x662F;&#x6307;&#x5411;&#x6570;&#x636E;&#x7684;&#x6307;&#x9488;&#x3002;&#x53EA;&#x6709;&#x5F53;&#x8BBE;&#x7F6E;&#x4E86; flagIndir &#x6216; typ.pointers&#xFF08;&#xFF09;&#x4E3A; true &#x65F6;&#x6709;&#x6548;&#x3002;
	ptr unsafe.Pointer

	// flag &#x4FDD;&#x5B58;&#x6709;&#x5173;&#x8BE5;&#x503C;&#x7684;&#x5143;&#x6570;&#x636E;&#x3002;&#x6700;&#x4F4E;&#x4F4D;&#x662F;&#x6807;&#x5FD7;&#x4F4D;&#xFF1A;
	//	- flagStickyRO: &#x901A;&#x8FC7;&#x672A;&#x5BFC;&#x51FA;&#x7684;&#x672A;&#x5D4C;&#x5165;&#x5B57;&#x6BB5;&#x83B7;&#x53D6;&#xFF0C;&#x56E0;&#x6B64;&#x4E3A;&#x53EA;&#x8BFB;
	//	- flagEmbedRO:  &#x901A;&#x8FC7;&#x672A;&#x5BFC;&#x51FA;&#x7684;&#x5D4C;&#x5165;&#x5F0F;&#x5B57;&#x6BB5;&#x83B7;&#x53D6;&#xFF0C;&#x56E0;&#x6B64;&#x4E3A;&#x53EA;&#x8BFB;
	//	- flagIndir:    val&#x4FDD;&#x5B58;&#x6307;&#x5411;&#x6570;&#x636E;&#x7684;&#x6307;&#x9488;
	//	- flagAddr:     v.CanAddr &#x4E3A; true (&#x8868;&#x793A; flagIndir)
	//	- flagMethod:   v &#x662F;&#x65B9;&#x6CD5;&#x503C;&#x3002;
    // &#x63A5;&#x4E0B;&#x6765;&#x7684; 5 &#x4E2A; bits &#x7ED9;&#x51FA; Value &#x7684; Kind &#x79CD;&#x7C7B;&#xFF0C;&#x9664;&#x4E86;&#x65B9;&#x6CD5; values &#x4EE5;&#x5916;&#xFF0C;&#x5B83;&#x4F1A;&#x91CD;&#x590D; typ.Kind&#xFF08;&#xFF09;&#x3002;&#x5176;&#x4F59; 23 &#x4F4D;&#x4EE5;&#x4E0A;&#x7ED9;&#x51FA;&#x65B9;&#x6CD5; values &#x7684;&#x65B9;&#x6CD5;&#x7F16;&#x53F7;&#x3002;&#x5982;&#x679C; flag.kind&#xFF08;&#xFF09;!= Func&#xFF0C;&#x4EE3;&#x7801;&#x53EF;&#x4EE5;&#x5047;&#x5B9A; flagMethod &#x6CA1;&#x6709;&#x8BBE;&#x7F6E;&#x3002;&#x5982;&#x679C; ifaceIndir(typ)&#xFF0C;&#x4EE3;&#x7801;&#x53EF;&#x4EE5;&#x5047;&#x5B9A;&#x8BBE;&#x7F6E;&#x4E86; flagIndir&#x3002;
	flag
}
</code></pre>
<p>&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x7684; Value &#x8868;&#x793A;&#x4E00;&#x4E2A;&#x76F8;&#x5173;&#x65B9;&#x6CD5;&#x7684;&#x8C03;&#x7528;&#xFF0C;&#x5C31;&#x50CF;&#x4E00;&#x4E9B;&#x65B9;&#x6CD5;&#x63A5;&#x6536;&#x8005; r &#x8C03;&#x7528; r.Read&#x3002;typ + val + flag bits &#x4F4D;&#x63CF;&#x8FF0;&#x4E86;&#x63A5;&#x6536;&#x8005;r&#xFF0C;&#x4F46;&#x662F; Kind &#x6807;&#x8BB0;&#x4F4D;&#x8868;&#x793A; Func&#xFF08;&#x65B9;&#x6CD5;&#x662F;&#x51FD;&#x6570;&#xFF09;&#xFF0C;&#x5E76;&#x4E14;&#x8BE5;&#x6807;&#x5FD7;&#x7684;&#x9AD8;&#x4F4D;&#x7ED9;&#x51FA; r &#x7684;&#x7C7B;&#x578B;&#x7684;&#x65B9;&#x6CD5;&#x96C6;&#x4E2D;&#x7684;&#x65B9;&#x6CD5;&#x7F16;&#x53F7;&#x3002;</p>
<h2 id>&#x4E8C;. &#x53CD;&#x5C04;&#x7684;&#x5185;&#x90E8;&#x5B9E;&#x73B0;</h2>
<p>&#x8FD9;&#x4E00;&#x7AE0;&#x4EE5; reflect.TypeOf() &#x548C; reflect.ValueOf() &#x8FD9;&#x4E24;&#x4E2A;&#x57FA;&#x672C;&#x7684;&#x65B9;&#x6CD5;&#x4E3A;&#x4F8B;&#xFF0C;&#x770B;&#x770B;&#x5E95;&#x5C42;&#x6E90;&#x7801;&#x7A76;&#x7ADF;&#x662F;&#x600E;&#x4E48;&#x5B9E;&#x73B0;&#x7684;&#x3002;&#x6E90;&#x7801;&#x9762;&#x524D;&#x4E00;&#x5207;&#x7686;&#x65E0;&#x79D8;&#x5BC6;&#x3002;</p>
<h3 id="1reflecttypeof">1. reflect.TypeOf() &#x5E95;&#x5C42;&#x5B9E;&#x73B0;</h3>
<p>&#x5728; reflect &#x5305;&#x4E2D;&#x6709;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x65B9;&#x6CD5; TypeOf()&#xFF0C;&#x5229;&#x7528;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x83B7;&#x5F97;&#x4E00;&#x4E2A; Type &#x7684; interface&#x3002;&#x901A;&#x8FC7; Type interface &#x53EF;&#x4EE5;&#x83B7;&#x53D6;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#x3002;</p>
<pre><code class="language-go">// TypeOf() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x7684; i &#x8FD9;&#x4E2A;&#x52A8;&#x6001;&#x7C7B;&#x578B;&#x7684; Type&#x3002;&#x5982;&#x679C; i &#x662F;&#x4E00;&#x4E2A; nil interface value, TypeOf &#x8FD4;&#x56DE; nil.
func TypeOf(i interface{}) Type {
	eface := *(*emptyInterface)(unsafe.Pointer(&amp;i))
	return toType(eface.typ)
}

func toType(t *rtype) Type {
	if t == nil {
		return nil
	}
	return t
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;&#x975E;&#x5E38;&#x7B80;&#x5355;&#xFF0C;&#x5C31;&#x662F;&#x5C06;&#x5F62;&#x53C2;&#x8F6C;&#x6362;&#x6210; Type interface&#x3002;TypeOf() &#x65B9;&#x6CD5;&#x7B2C;&#x4E00;&#x884C;&#x6709;&#x4E00;&#x4E2A;&#x5F3A;&#x5236;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#xFF0C;&#x628A; unsafe.Pointer &#x8F6C;&#x6362;&#x6210;&#x4E86; emptyInterface&#x3002;emptyInterface &#x6570;&#x636E;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">// emptyInterface is the header for an interface{} value.
type emptyInterface struct {
	typ  *rtype
	word unsafe.Pointer
}
</code></pre>
<p>&#x4ECE;&#x4E0A;&#x9762;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;emptyInterface &#x5176;&#x5B9E;&#x5C31;&#x662F; reflect &#x7248;&#x7684; eface&#xFF0C;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#xFF0C;&#x6240;&#x4EE5;&#x6B64;&#x5904;&#x5F3A;&#x5236;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x6CA1;&#x6709;&#x95EE;&#x9898;&#x3002;&#x5173;&#x4E8E; eface &#x66F4;&#x8BE6;&#x7EC6;&#x7684;&#x8BB2;&#x89E3;&#x89C1;&#x4E0A;&#x4E00;&#x7BC7; interface &#x5E95;&#x5C42;&#x5206;&#x6790;&#x7684;&#x6587;&#x7AE0;&#x3002;&#x53E6;&#x5916; TypeOf() &#x65B9;&#x6CD5;&#x8BBE;&#x8BA1;&#x6210;&#x8FD4;&#x56DE; interface &#x800C;&#x4E0D;&#x662F;&#x8FD4;&#x56DE; rtype &#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x662F;&#x6709;&#x8BB2;&#x7A76;&#x7684;&#x3002;&#x4E00;&#x662F;&#x8BBE;&#x8BA1;&#x8005;&#x4E0D;&#x5E0C;&#x671B;&#x8C03;&#x7528;&#x8005;&#x62FF;&#x5230; rtype &#x6EE5;&#x7528;&#x3002;&#x6BD5;&#x7ADF;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#x8FD9;&#x4E9B;&#x90FD;&#x662F;&#x53EA;&#x8BFB;&#x7684;&#xFF0C;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x88AB;&#x4EFB;&#x610F;&#x7BE1;&#x6539;&#x592A;&#x4E0D;&#x5B89;&#x5168;&#x4E86;&#x3002;&#x4E8C;&#x662F;&#x8BBE;&#x8BA1;&#x8005;&#x5C06;&#x8C03;&#x7528;&#x8005;&#x7684;&#x9700;&#x6C42;&#x7684;&#x6240;&#x6709;&#x9700;&#x6C42;&#x7528; interface &#x8FD9;&#x4E00;&#x5C42;&#x5C4F;&#x853D;&#x4E86;&#xFF0C;Type interface &#x4E0B;&#x5C42;&#x53EF;&#x4EE5;&#x5BF9;&#x5E94;&#x5F88;&#x591A;&#x79CD;&#x7C7B;&#x578B;&#xFF0C;&#x5229;&#x7528;&#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x7EDF;&#x4E00;&#x62BD;&#x8C61;&#x6210;&#x4E00;&#x5C42;&#x3002;</p>
<p>&#x503C;&#x5F97;&#x8BF4;&#x660E;&#x7684;&#x4E00;&#x70B9;&#x662F; TypeOf() &#x5165;&#x53C2;&#xFF0C;&#x5165;&#x53C2;&#x7C7B;&#x578B;&#x662F; i interface{}&#xFF0C;&#x53EF;&#x4EE5;&#x662F; 2 &#x79CD;&#x7C7B;&#x578B;&#xFF0C;&#x4E00;&#x79CD;&#x662F; interface &#x53D8;&#x91CF;&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x79CD;&#x662F;&#x5177;&#x4F53;&#x7684;&#x7C7B;&#x578B;&#x53D8;&#x91CF;&#x3002;&#x5982;&#x679C; i &#x662F;&#x5177;&#x4F53;&#x7684;&#x7C7B;&#x578B;&#x53D8;&#x91CF;&#xFF0C;TypeOf() &#x8FD4;&#x56DE;&#x7684;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#xFF1B;&#x5982;&#x679C; i &#x662F; interface &#x53D8;&#x91CF;&#xFF0C;&#x5E76;&#x4E14;&#x7ED1;&#x5B9A;&#x4E86;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x5BF9;&#x8C61;&#x5B9E;&#x4F8B;&#xFF0C;&#x8FD4;&#x56DE;&#x7684;&#x662F; i &#x7ED1;&#x5B9A;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x7684;&#x52A8;&#x6001;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#xFF1B;&#x5982;&#x679C; i &#x6CA1;&#x6709;&#x7ED1;&#x5B9A;&#x4EFB;&#x4F55;&#x5177;&#x4F53;&#x7684;&#x7C7B;&#x578B;&#x5BF9;&#x8C61;&#x5B9E;&#x4F8B;&#xFF0C;&#x8FD4;&#x56DE;&#x7684;&#x662F;&#x63A5;&#x53E3;&#x81EA;&#x8EAB;&#x7684;&#x9759;&#x6001;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#x3002;&#x4F8B;&#x5982;&#x4E0B;&#x9762;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">import (
	&quot;fmt&quot;
	&quot;reflect&quot;
)

func main() {
	ifa := new(Person)
	var ifb Person = Student{name: &quot;halfrost&quot;}
    // &#x672A;&#x7ED1;&#x5B9A;&#x5177;&#x4F53;&#x53D8;&#x91CF;&#x7684;&#x63A5;&#x53E3;&#x7C7B;&#x578B; 
	fmt.Println(reflect.TypeOf(ifa).Elem().Name())
	fmt.Println(reflect.TypeOf(ifa).Elem().Kind().String())
    // &#x7ED1;&#x5B9A;&#x5177;&#x4F53;&#x53D8;&#x91CF;&#x7684;&#x63A5;&#x53E3;&#x7C7B;&#x578B; 
	fmt.Println(reflect.TypeOf(ifb).Name())
	fmt.Println(reflect.TypeOf(ifb).Kind().String())
}
</code></pre>
<p>&#x5728;&#x7B2C;&#x4E00;&#x7EC4;&#x8F93;&#x51FA;&#x4E2D;&#xFF0C;reflect.TypeOf() &#x5165;&#x53C2;&#x672A;&#x7ED1;&#x5B9A;&#x5177;&#x4F53;&#x53D8;&#x91CF;&#x7684;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#xFF0C;&#x6240;&#x4EE5;&#x8FD4;&#x56DE;&#x7684;&#x662F;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#x672C;&#x8EAB; Person&#x3002;&#x5BF9;&#x5E94;&#x7684; Kind &#x662F; interface&#x3002;&#x5728;&#x7B2C;&#x4E8C;&#x7EC4;&#x8F93;&#x51FA;&#x4E2D;&#xFF0C;reflect.TypeOf() &#x5165;&#x53C2;&#x7ED1;&#x5B9A;&#x4E86;&#x5177;&#x4F53;&#x53D8;&#x91CF;&#x7684;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#xFF0C;&#x6240;&#x4EE5;&#x8FD4;&#x56DE;&#x7684;&#x662F;&#x7ED1;&#x5B9A;&#x7684;&#x5177;&#x4F53;&#x7C7B;&#x578B; Student&#x3002;&#x5BF9;&#x5E94;&#x7684; Kind &#x662F; struct&#x3002;</p>
<pre><code class="language-go">Person
interface

Student
struct
</code></pre>
<p>toType() &#x65B9;&#x6CD5;&#x4E2D;&#x53EA;&#x662F;&#x5355;&#x72EC;&#x5224;&#x65AD;&#x4E86;&#x4E00;&#x6B21;&#x662F;&#x5426;&#x4E3A; nil&#x3002;&#x56E0;&#x4E3A;&#x5728; gc &#x4E2D;&#xFF0C;&#x552F;&#x4E00;&#x5173;&#x5FC3;&#x7684;&#x662F; nil &#x7684; *rtype &#x5FC5;&#x987B;&#x8F6C;&#x6362;&#x6210; nil Type&#x3002;&#x4F46;&#x662F;&#x5728; gccgo &#x4E2D;&#xFF0C;&#x8FD9;&#x4E2A;&#x51FD;&#x6570;&#x9700;&#x8981;&#x786E;&#x4FDD;&#x540C;&#x4E00;&#x7C7B;&#x578B;&#x7684;&#x591A;&#x4E2A; *rtype &#x5408;&#x5E76;&#x6210;&#x5355;&#x4E2A; Type&#x3002;</p>
<h3 id="2reflectvalueof">2. reflect.ValueOf() &#x5E95;&#x5C42;&#x5B9E;&#x73B0;</h3>
<p>ValueOf() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A;&#x65B0;&#x7684; Value&#xFF0C;&#x6839;&#x636E; interface i &#x8FD9;&#x4E2A;&#x5165;&#x53C2;&#x7684;&#x5177;&#x4F53;&#x503C;&#x8FDB;&#x884C;&#x521D;&#x59CB;&#x5316;&#x3002;ValueOf(nil) &#x8FD4;&#x56DE;&#x96F6;&#x503C;&#x3002;</p>
<pre><code class="language-go">func ValueOf(i interface{}) Value {
	if i == nil {
		return Value{}
	}
	escapes(i)
	return unpackEface(i)
}
</code></pre>
<p>ValueOf() &#x7684;&#x6240;&#x6709;&#x903B;&#x8F91;&#x53EA;&#x5728; escapes() &#x548C; unpackEface() &#x8FD9;&#x4E24;&#x4E2A;&#x65B9;&#x6CD5;&#x4E0A;&#x3002;&#x5148;&#x6765;&#x770B; escapes() &#x7684;&#x5B9E;&#x73B0;&#x3002;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x76EE;&#x524D;&#x6CE8;&#x91CA;&#x8FD8;&#x662F; TODO &#x7684;&#x72B6;&#x6001;&#xFF0C;&#x4ECE;&#x540D;&#x5B57;&#x4E0A;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#xFF0C;&#x5B83;&#x662F;&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x53D8;&#x91CF;&#x9003;&#x9038;&#xFF0C;&#x628A; Value &#x7684;&#x5185;&#x5BB9;&#x5B58;&#x5230;&#x6808;&#x4E0A;&#x3002;&#x76EE;&#x524D;&#x6240;&#x6709;&#x7684;&#x5185;&#x5BB9;&#x8FD8;&#x662F;&#x5B58;&#x5728;&#x5806;&#x4E2D;&#x3002;&#x653E;&#x5728;&#x5806;&#x4E2D;&#x4E5F;&#x6709;&#x597D;&#x5904;&#xFF0C;&#x5177;&#x4F53;&#x597D;&#x5904;&#x53EF;&#x4EE5;&#x89C1; chanrecv/mapassign &#x4E2D;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x7EC6;&#x81F4;&#x5C55;&#x5F00;&#x3002;escapes() &#x6E90;&#x7801;&#x5B9E;&#x73B0;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func escapes(x interface{}) {
	if dummy.b {
		dummy.x = x
	}
}

var dummy struct {
	b bool
	x interface{}
}
</code></pre>
<p>dummy &#x53D8;&#x91CF;&#x5C31;&#x662F;&#x4E00;&#x4E2A;&#x865A;&#x62DF;&#x6807;&#x6CE8;&#xFF0C;&#x6807;&#x8BB0;&#x5165;&#x53C2; x &#x9003;&#x9038;&#x4E86;&#x3002;&#x8FD9;&#x6837;&#x6807;&#x8BB0;&#x662F;&#x4E3A;&#x4E86;&#x9632;&#x6B62;&#x53CD;&#x5C04;&#x4EE3;&#x7801;&#x5199;&#x7684;&#x8FC7;&#x4E8E;&#x9AD8;&#x7EA7;&#xFF0C;&#x4EE5;&#x81F3;&#x4E8E;&#x7F16;&#x8BD1;&#x5668;&#x8DDF;&#x4E0D;&#x4E0A;&#x4E86;&#x3002;ValueOf() &#x7684;&#x4E3B;&#x8981;&#x903B;&#x8F91;&#x5728; unpackEface() &#x65B9;&#x6CD5;&#x4E2D;&#xFF1A;</p>
<pre><code class="language-go">func ifaceIndir(t *rtype) bool {
	return t.kind&amp;kindDirectIface == 0
}

func unpackEface(i interface{}) Value {
	e := (*emptyInterface)(unsafe.Pointer(&amp;i))
	// NOTE: don&apos;t read e.word until we know whether it is really a pointer or not.
	t := e.typ
	if t == nil {
		return Value{}
	}
	f := flag(t.Kind())
	if ifaceIndir(t) {
		f |= flagIndir
	}
	return Value{t, e.word, f}
}
</code></pre>
<p>ifaceIndir() &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x53EA;&#x662F;&#x5229;&#x7528;&#x4F4D;&#x8FD0;&#x7B97;&#x53D6;&#x51FA;&#x7279;&#x5F81;&#x6807;&#x8BB0;&#x4F4D;&#xFF0C;&#x8868;&#x793A; t &#x662F;&#x5426;&#x95F4;&#x63A5;&#x5B58;&#x50A8;&#x5728; &#x4E00;&#x4E2A; interface value &#x4E2D;&#x3002;unpackEface() &#x4ECE;&#x540D;&#x5B57;&#x4E0A;&#x80FD;&#x770B;&#x51FA;&#x5B83;&#x7684;&#x76EE;&#x7684;&#xFF0C;&#x5C06; emptyInterface &#x8F6C;&#x6362;&#x6210; Value&#x3002;&#x5B9E;&#x73B0;&#x5206;&#x4E3A; 3 &#x6B65;&#xFF0C;&#x5148;&#x5C06;&#x5165;&#x53C2; interface &#x5F3A;&#x8F6C;&#x6210; emptyInterface&#xFF0C;&#x7136;&#x540E;&#x5224;&#x65AD; emptyInterface.typ &#x662F;&#x5426;&#x4E3A;&#x7A7A;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x4E3A;&#x7A7A;&#x624D;&#x80FD;&#x8BFB;&#x53D6; emptyInterface.word&#x3002;&#x6700;&#x540E;&#x62FC;&#x88C5; Value &#x6570;&#x636E;&#x7ED3;&#x6784;&#x4E2D;&#x7684;&#x4E09;&#x4E2A;&#x5B57;&#x6BB5;&#xFF0C;*rtype&#xFF0C;unsafe.Pointer&#xFF0C;flag&#x3002;</p>
<h2 id>&#x4E09;. &#x53CD;&#x5C04;&#x4E09;&#x5B9A;&#x5F8B;</h2>
<p>&#x8457;&#x540D;&#x7684; <a href="https://blog.golang.org/laws-of-reflection">&#x300A;The laws of Reflection&#x300B;</a> &#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x91CC;&#x9762;&#x5F52;&#x7EB3;&#x4E86;&#x53CD;&#x5C04;&#x7684;&#x4E09;&#x5B9A;&#x5F8B;&#x3002;</p>
<h3 id="1">1. &#x53CD;&#x5C04;&#x53EF;&#x4EE5;&#x4ECE;&#x63A5;&#x53E3;&#x503C;&#x4E2D;&#x5F97;&#x5230;&#x53CD;&#x5C04;&#x5BF9;&#x8C61;</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/148_1.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;" loading="lazy"></p>
<ul>
<li>&#x901A;&#x8FC7;&#x5B9E;&#x4F8B;&#x83B7;&#x53D6; Value &#x5BF9;&#x8C61;&#xFF0C;&#x4F7F;&#x7528; reflect.ValueOf() &#x51FD;&#x6570;&#x3002;</li>
</ul>
<pre><code class="language-go">// ValueOf returns a new Value initialized to the concrete value
// stored in the interface i. ValueOf(nil) returns the zero Value.
func ValueOf(i interface{}) Value {
	if i == nil {
		return Value{}
	}
	// TODO: Maybe allow contents of a Value to live on the stack.
	// For now we make the contents always escape to the heap. It
	// makes life easier in a few places (see chanrecv/mapassign
	// comment below).
	escapes(i)

	return unpackEface(i)
}
</code></pre>
<ul>
<li>&#x901A;&#x8FC7;&#x5B9E;&#x4F8B;&#x83B7;&#x53D6;&#x53CD;&#x5C04;&#x5BF9;&#x8C61; Type&#xFF0C;&#x4F7F;&#x7528; reflect.TypeOf() &#x51FD;&#x6570;&#x3002;</li>
</ul>
<pre><code class="language-go">// TypeOf returns the reflection Type that represents the dynamic type of i.
// If i is a nil interface value, TypeOf returns nil.
func TypeOf(i interface{}) Type {
	eface := *(*emptyInterface)(unsafe.Pointer(&amp;i))
	return toType(eface.typ)
}
</code></pre>
<h3 id="2">2. &#x53CD;&#x5C04;&#x53EF;&#x4EE5;&#x4ECE;&#x53CD;&#x5C04;&#x5BF9;&#x8C61;&#x4E2D;&#x83B7;&#x5F97;&#x63A5;&#x53E3;&#x503C;</h3>
<p>&#x4ECE; reflect.Value &#x6570;&#x636E;&#x7ED3;&#x6784;&#x53EF;&#x77E5;&#xFF0C;&#x5B83;&#x5305;&#x542B;&#x4E86;&#x7C7B;&#x578B;&#x548C;&#x503C;&#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x6240;&#x4EE5;&#x5C06; Value &#x8F6C;&#x6362;&#x6210;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x5F88;&#x5BB9;&#x6613;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/148_2.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;" loading="lazy"></p>
<ul>
<li>&#x5C06; Value &#x8F6C;&#x6362;&#x6210;&#x7A7A;&#x7684; interface&#xFF0C;&#x5185;&#x90E8;&#x5B58;&#x653E;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x5B9E;&#x4F8B;&#x3002;&#x4F7F;&#x7528; interface() &#x51FD;&#x6570;&#x3002;</li>
</ul>
<pre><code class="language-go">// Interface returns v&apos;s current value as an interface{}.
// It is equivalent to:
//	var i interface{} = (v&apos;s underlying value)
// It panics if the Value was obtained by accessing
// unexported struct fields.
func (v Value) Interface() (i interface{}) {
	return valueInterface(v, true)
}
</code></pre>
<ul>
<li>Value &#x4E5F;&#x5305;&#x542B;&#x5F88;&#x591A;&#x6210;&#x5458;&#x65B9;&#x6CD5;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06; Value &#x8F6C;&#x6362;&#x6210;&#x7B80;&#x5355;&#x7C7B;&#x578B;&#x5B9E;&#x4F8B;&#xFF0C;&#x6CE8;&#x610F;&#x5982;&#x679C;&#x7C7B;&#x578B;&#x4E0D;&#x5339;&#x914D;&#x4F1A; panic&#x3002;</li>
</ul>
<pre><code class="language-go">// Int returns v&apos;s underlying value, as an int64.
// It panics if v&apos;s Kind is not Int, Int8, Int16, Int32, or Int64.
func (v Value) Int() int64 {
	k := v.kind()
	p := v.ptr
	switch k {
	case Int:
		return int64(*(*int)(p))
	case Int8:
		return int64(*(*int8)(p))
	case Int16:
		return int64(*(*int16)(p))
	case Int32:
		return int64(*(*int32)(p))
	case Int64:
		return *(*int64)(p)
	}
	panic(&amp;ValueError{&quot;reflect.Value.Int&quot;, v.kind()})
}

// Uint returns v&apos;s underlying value, as a uint64.
// It panics if v&apos;s Kind is not Uint, Uintptr, Uint8, Uint16, Uint32, or Uint64.
func (v Value) Uint() uint64 {
	k := v.kind()
	p := v.ptr
	switch k {
	case Uint:
		return uint64(*(*uint)(p))
	case Uint8:
		return uint64(*(*uint8)(p))
	case Uint16:
		return uint64(*(*uint16)(p))
	case Uint32:
		return uint64(*(*uint32)(p))
	case Uint64:
		return *(*uint64)(p)
	case Uintptr:
		return uint64(*(*uintptr)(p))
	}
	panic(&amp;ValueError{&quot;reflect.Value.Uint&quot;, v.kind()})
}

// Bool returns v&apos;s underlying value.
// It panics if v&apos;s kind is not Bool.
func (v Value) Bool() bool {
	v.mustBe(Bool)
	return *(*bool)(v.ptr)
}

// Float returns v&apos;s underlying value, as a float64.
// It panics if v&apos;s Kind is not Float32 or Float64
func (v Value) Float() float64 {
	k := v.kind()
	switch k {
	case Float32:
		return float64(*(*float32)(v.ptr))
	case Float64:
		return *(*float64)(v.ptr)
	}
	panic(&amp;ValueError{&quot;reflect.Value.Float&quot;, v.kind()})
}
</code></pre>
<h3 id="3">3. &#x82E5;&#x8981;&#x4FEE;&#x6539;&#x53CD;&#x5C04;&#x5BF9;&#x8C61;&#xFF0C;&#x503C;&#x5FC5;&#x987B;&#x53EF;&#x4FEE;&#x6539;</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/148_3.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;" loading="lazy"></p>
<ul>
<li>&#x6307;&#x9488;&#x7C7B;&#x578B; Type &#x8F6C;&#x6210;&#x503C;&#x7C7B;&#x578B; Type&#x3002;&#x6307;&#x9488;&#x7C7B;&#x578B;&#x5FC5;&#x987B;&#x662F; *Array&#x3001;*Slice&#x3001;*Pointer&#x3001;*Map&#x3001;*Chan &#x7C7B;&#x578B;&#xFF0C;&#x5426;&#x5219;&#x4F1A;&#x53D1;&#x751F; panic&#x3002;Type &#x8FD4;&#x56DE;&#x7684;&#x662F;&#x5185;&#x90E8;&#x5143;&#x7D20;&#x7684; Type&#x3002;</li>
</ul>
<pre><code class="language-go">// Elem returns element type of array a.
func (a *Array) Elem() Type { return a.elem }

// Elem returns the element type of slice s.
func (s *Slice) Elem() Type { return s.elem }

// Elem returns the element type for the given pointer p.
func (p *Pointer) Elem() Type { return p.base }

// Elem returns the element type of map m.
func (m *Map) Elem() Type { return m.elem }

// Elem returns the element type of channel c.
func (c *Chan) Elem() Type { return c.elem }
</code></pre>
<ul>
<li>&#x503C;&#x7C7B;&#x578B; Type &#x8F6C;&#x6210;&#x6307;&#x9488;&#x7C7B;&#x578B; Type&#x3002;PtrTo &#x8FD4;&#x56DE;&#x7684;&#x662F;&#x6307;&#x5411; t &#x7684;&#x6307;&#x9488;&#x7C7B;&#x578B; Type&#x3002;</li>
</ul>
<pre><code class="language-go">// PtrTo returns the pointer type with element t.
// For example, if t represents type Foo, PtrTo(t) represents *Foo.
func PtrTo(t Type) Type {
	return t.(*rtype).ptrTo()
}
</code></pre>
<p>&#x9488;&#x5BF9;&#x53CD;&#x5C04;&#x4E09;&#x5B9A;&#x5F8B;&#x7684;&#x8FD9;&#x4E2A;&#x7B2C;&#x4E09;&#x6761;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x7279;&#x6B8A;&#x8BF4;&#x660E;&#x7684;&#x662F;&#xFF1A;Value &#x503C;&#x7684;&#x53EF;&#x4FEE;&#x6539;&#x6027;&#x662F;&#x4EC0;&#x4E48;&#x610F;&#x601D;&#x3002;&#x4E3E;&#x4F8B;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var x float64 = 3.4
	v := reflect.ValueOf(x)
	v.SetFloat(7.1) // Error: will panic.
}
</code></pre>
<p>&#x5982;&#x4E0A;&#x9762;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#xFF0C;&#x8FD0;&#x884C;&#x4EE5;&#x540E;&#x4F1A;&#x5D29;&#x6E83;&#xFF0C;&#x5D29;&#x6E83;&#x4FE1;&#x606F;&#x662F; <code>panic: reflect: reflect.Value.SetFloat using unaddressable value</code>&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x8FD9;&#x91CC; SetFloat() &#x4F1A; panic &#x5462;&#xFF1F;&#x8FD9;&#x91CC;&#x7ED9;&#x7684;&#x63D0;&#x793A;&#x4FE1;&#x606F;&#x662F;&#x4F7F;&#x7528;&#x4E86;&#x4E0D;&#x53EF;&#x5BFB;&#x5740;&#x7684; Value&#x3002;&#x5728;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x4E2D;&#xFF0C;&#x8C03;&#x7528; reflect.ValueOf &#x4F20;&#x8FDB;&#x53BB;&#x7684;&#x662F;&#x4E00;&#x4E2A;&#x503C;&#x7C7B;&#x578B;&#x7684;&#x53D8;&#x91CF;&#xFF0C;&#x83B7;&#x5F97;&#x7684; Value &#x5176;&#x5B9E;&#x662F;&#x5B8C;&#x5168;&#x7684;&#x503C;&#x62F7;&#x8D1D;&#xFF0C;&#x8FD9;&#x4E2A; Value &#x662F;&#x4E0D;&#x80FD;&#x88AB;&#x4FEE;&#x6539;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F20;&#x8FDB;&#x53BB;&#x662F;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#xFF0C;&#x83B7;&#x5F97;&#x7684; Value &#x662F;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#x526F;&#x672C;&#xFF0C;&#x4F46;&#x662F;&#x8FD9;&#x4E2A;&#x6307;&#x9488;&#x6307;&#x5411;&#x7684;&#x5730;&#x5740;&#x7684;&#x5BF9;&#x8C61;&#x662F;&#x53EF;&#x4EE5;&#x6539;&#x53D8;&#x7684;&#x3002;&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x6539;&#x6210;&#x8FD9;&#x6837;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var x float64 = 3.4
	p := reflect.ValueOf(&amp;x)
	fmt.Println(&quot;type of p:&quot;, p.Type())
	fmt.Println(&quot;settability of p:&quot;, p.CanSet())

	v := p.Elem()
	v.SetFloat(7.1)
	fmt.Println(v.Interface()) // 7.1
	fmt.Println(x)             // 7.1
}
</code></pre>
<p>&#x5728;&#x8C03;&#x7528; reflect.ValueOf() &#x65B9;&#x6CD5;&#x7684;&#x65F6;&#x5019;&#x4F20;&#x5165;&#x4E00;&#x4E2A;&#x6307;&#x9488;&#xFF0C;&#x8FD9;&#x6837;&#x5C31;&#x4E0D;&#x4F1A;&#x5D29;&#x6E83;&#x4E86;&#x3002;&#x8F93;&#x51FA;&#x7B26;&#x5408;&#x903B;&#x8F91;&#xFF1A;</p>
<pre><code class="language-go">type of p: *float64
settability of p: false
7.1
7.1
</code></pre>
<h3 id="4typevalue">4. Type &#x548C; Value &#x76F8;&#x4E92;&#x8F6C;&#x6362;</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/148_4.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;" loading="lazy"></p>
<ul>
<li>&#x7531;&#x4E8E; Type &#x4E2D;&#x53EA;&#x6709;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#xFF0C;&#x6240;&#x4EE5;&#x65E0;&#x6CD5;&#x76F4;&#x63A5;&#x901A;&#x8FC7; Type &#x83B7;&#x53D6;&#x5B9E;&#x4F8B;&#x5BF9;&#x8C61;&#x7684; Value&#xFF0C;&#x4F46;&#x662F;&#x53EF;&#x4EE5;&#x901A;&#x8FC7; New() &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x5F97;&#x5230;&#x4E00;&#x4E2A;&#x6307;&#x5411; type &#x7C7B;&#x578B;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x503C;&#x662F;&#x96F6;&#x503C;&#x3002;MakeMap() &#x65B9;&#x6CD5;&#x548C; New() &#x65B9;&#x6CD5;&#x7C7B;&#x4F3C;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x662F;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A; Map&#x3002;</li>
</ul>
<pre><code class="language-go">// New returns a Value representing a pointer to a new zero value
// for the specified type. That is, the returned Value&apos;s Type is PtrTo(typ).
func New(typ Type) Value {
	if typ == nil {
		panic(&quot;reflect: New(nil)&quot;)
	}
	t := typ.(*rtype)
	ptr := unsafe_New(t)
	fl := flag(Ptr)
	return Value{t.ptrTo(), ptr, fl}
}

// MakeMap creates a new map with the specified type.
func MakeMap(typ Type) Value {
	return MakeMapWithSize(typ, 0)
}
</code></pre>
<ul>
<li>&#x9700;&#x8981;&#x7279;&#x6B8A;&#x8BF4;&#x660E;&#x7684;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x662F; Zero()&#xFF0C;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x6307;&#x5B9A;&#x7C7B;&#x578B;&#x7684;&#x96F6;&#x503C;&#x3002;&#x8FD9;&#x4E2A;&#x96F6;&#x503C;&#x4E0E; Value &#x7ED3;&#x6784;&#x7684; zero value &#x4E0D;&#x540C;&#xFF0C;&#x5B83;&#x6839;&#x672C;&#x4E0D;&#x4EE3;&#x8868;&#x4EFB;&#x4F55;&#x503C;&#x3002;&#x4F8B;&#x5982;&#xFF0C;Zero(TypeOf(42)) &#x8FD4;&#x56DE;&#x5E26;&#x6709; Kind Int &#x4E14;&#x503C;&#x4E3A; 0 &#x7684;&#x503C;&#x3002;&#x8FD4;&#x56DE;&#x7684;&#x503C;&#x65E2;&#x4E0D;&#x53EF;&#x5BFB;&#x5740;&#xFF0C;&#x4E5F;&#x4E0D;&#x53EF;&#x6539;&#x53D8;&#x3002;</li>
</ul>
<pre><code class="language-go">// Zero returns a Value representing the zero value for the specified type.
// The result is different from the zero value of the Value struct,
// which represents no value at all.
// For example, Zero(TypeOf(42)) returns a Value with Kind Int and value 0.
// The returned value is neither addressable nor settable.
func Zero(typ Type) Value {
	if typ == nil {
		panic(&quot;reflect: Zero(nil)&quot;)
	}
	t := typ.(*rtype)
	fl := flag(t.Kind())
	if ifaceIndir(t) {
		var p unsafe.Pointer
		if t.size &lt;= maxZero {
			p = unsafe.Pointer(&amp;zeroVal[0])
		} else {
			p = unsafe_New(t)
		}
		return Value{t, p, fl | flagIndir}
	}
	return Value{t, nil, fl}
}
</code></pre>
<ul>
<li>&#x7531;&#x4E8E;&#x53CD;&#x5C04;&#x5BF9;&#x8C61; Value &#x4E2D;&#x672C;&#x6765;&#x5C31;&#x5B58;&#x6709; Tpye &#x7684;&#x4FE1;&#x606F;&#xFF0C;&#x6240;&#x4EE5; Value &#x5411; Type &#x8F6C;&#x6362;&#x6BD4;&#x8F83;&#x7B80;&#x5355;&#x3002;</li>
</ul>
<pre><code class="language-go">// Type returns v&apos;s type.
func (v Value) Type() Type {
	f := v.flag
	if f == 0 {
		panic(&amp;ValueError{&quot;reflect.Value.Type&quot;, Invalid})
	}
	if f&amp;flagMethod == 0 {
		// Easy case
		return v.typ
	}

	// Method value.
	// v.typ describes the receiver, not the method type.
	i := int(v.flag) &gt;&gt; flagMethodShift
	if v.typ.Kind() == Interface {
		// Method on interface.
		tt := (*interfaceType)(unsafe.Pointer(v.typ))
		if uint(i) &gt;= uint(len(tt.methods)) {
			panic(&quot;reflect: internal error: invalid method index&quot;)
		}
		m := &amp;tt.methods[i]
		return v.typ.typeOff(m.typ)
	}
	// Method on concrete type.
	ms := v.typ.exportedMethods()
	if uint(i) &gt;= uint(len(ms)) {
		panic(&quot;reflect: internal error: invalid method index&quot;)
	}
	m := ms[i]
	return v.typ.typeOff(m.mtyp)
}
</code></pre>
<h3 id="5value">5. Value &#x6307;&#x9488;&#x8F6C;&#x6362;&#x6210;&#x503C;</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/148_5_.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;" loading="lazy"></p>
<ul>
<li>&#x628A;&#x6307;&#x9488;&#x7684; Value &#x8F6C;&#x6362;&#x6210;&#x503C; Value &#x6709; 2 &#x4E2A;&#x65B9;&#x6CD5; Indirect() &#x548C; Elem()&#x3002;</li>
</ul>
<pre><code class="language-go">// Indirect returns the value that v points to.
// If v is a nil pointer, Indirect returns a zero Value.
// If v is not a pointer, Indirect returns v.
func Indirect(v Value) Value {
	if v.Kind() != Ptr {
		return v
	}
	return v.Elem()
}

// Elem returns the value that the interface v contains
// or that the pointer v points to.
// It panics if v&apos;s Kind is not Interface or Ptr.
// It returns the zero Value if v is nil.
func (v Value) Elem() Value {
	k := v.kind()
	switch k {
	case Interface:
		var eface interface{}
		if v.typ.NumMethod() == 0 {
			eface = *(*interface{})(v.ptr)
		} else {
			eface = (interface{})(*(*interface {
				M()
			})(v.ptr))
		}
		x := unpackEface(eface)
		if x.flag != 0 {
			x.flag |= v.flag.ro()
		}
		return x
	case Ptr:
		ptr := v.ptr
		if v.flag&amp;flagIndir != 0 {
			ptr = *(*unsafe.Pointer)(ptr)
		}
		// The returned value&apos;s address is v&apos;s value.
		if ptr == nil {
			return Value{}
		}
		tt := (*ptrType)(unsafe.Pointer(v.typ))
		typ := tt.elem
		fl := v.flag&amp;flagRO | flagIndir | flagAddr
		fl |= flag(typ.Kind())
		return Value{typ, ptr, fl}
	}
	panic(&amp;ValueError{&quot;reflectlite.Value.Elem&quot;, v.kind()})
}
</code></pre>
<p>&#x4ECE;&#x6E90;&#x7801;&#x5B9E;&#x73B0;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x5165;&#x53C2;&#x662F;&#x6307;&#x9488;&#x6216;&#x8005;&#x662F; interface &#x4F1A;&#x5F71;&#x54CD;&#x8F93;&#x51FA;&#x7684;&#x7ED3;&#x679C;&#x3002;</p>
<ul>
<li>&#x5C06;&#x503C; Value &#x8F6C;&#x6362;&#x6210;&#x6307;&#x9488;&#x7684; Value &#x53EA;&#x6709; Addr() &#x8FD9;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x3002;</li>
</ul>
<pre><code class="language-go">// Addr returns a pointer value representing the address of v.
// It panics if CanAddr() returns false.
// Addr is typically used to obtain a pointer to a struct field
// or slice element in order to call a method that requires a
// pointer receiver.
func (v Value) Addr() Value {
	if v.flag&amp;flagAddr == 0 {
		panic(&quot;reflect.Value.Addr of unaddressable value&quot;)
	}
	// Preserve flagRO instead of using v.flag.ro() so that
	// v.Addr().Elem() is equivalent to v (#32772)
	fl := v.flag &amp; flagRO
	return Value{v.typ.ptrTo(), v.ptr, fl | flag(Ptr)}
}
</code></pre>
<h3 id="6">6. &#x603B;&#x7ED3;</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/148_6_0.png" alt="Go reflection &#x4E09;&#x5B9A;&#x5F8B;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;" loading="lazy"></p>
<p>&#x8FD9;&#x4E00;&#x7AE0;&#x901A;&#x8FC7;&#x53CD;&#x5C04;&#x4E09;&#x5B9A;&#x5F8B;&#x5F15;&#x51FA;&#x4E86;&#x53CD;&#x5C04;&#x5BF9;&#x8C61;&#xFF0C;Type&#x3001;Vale &#x4E09;&#x8005;&#x7684;&#x5173;&#x7CFB;&#x3002;&#x7B14;&#x8005;&#x5C06;&#x5176;&#x4E4B;&#x95F4;&#x7684;&#x5173;&#x7CFB;&#x6269;&#x5C55;&#x6210;&#x4E86;&#x4E0A;&#x56FE;&#x3002;&#x5728;&#x4E0A;&#x56FE;&#x4E2D;&#x9664;&#x4E86; Tpye &#x548C; interface &#x662F;&#x5355;&#x5411;&#x7684;&#xFF0C;&#x5176;&#x4F59;&#x7684;&#x8F6C;&#x6362;&#x90FD;&#x662F;&#x53CC;&#x5411;&#x7684;&#x3002;&#x53EF;&#x80FD;&#x6709;&#x8BFB;&#x8005;&#x6709;&#x7591;&#x95EE;&#xFF0C;Type &#x771F;&#x7684;&#x5C31;&#x4E0D;&#x80FD;&#x8F6C;&#x6362;&#x6210; interface &#x4E86;&#x4E48;&#xFF1F;&#x8FD9;&#x91CC;&#x8C08;&#x7684;&#x662F;&#x901A;&#x8FC7;&#x4E00;&#x4E2A;&#x65B9;&#x6CD5;&#x5355;&#x6B21;&#x662F;&#x65E0;&#x6CD5;&#x8F6C;&#x6362;&#x7684;&#x3002;&#x5728;&#x4E0A;&#x7BC7; interface &#x6587;&#x7AE0;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x77E5;&#x9053; interface &#x5305;&#x542B;&#x7C7B;&#x578B;&#x548C;&#x503C;&#x4E24;&#x90E8;&#x5206;&#xFF0C;Type &#x53EA;&#x6709;&#x7C7B;&#x578B;&#x90E8;&#x5206;&#xFF0C;&#x786E;&#x5B9E;&#x503C;&#x7684;&#x90E8;&#x5206;&#xFF0C;&#x6240;&#x4EE5;&#x548C; interface &#x662F;&#x4E0D;&#x80FD;&#x4E92;&#x8F6C;&#x7684;&#x3002;&#x90A3;&#x5982;&#x679C;&#x5C31;&#x662F;&#x60F3;&#x901A;&#x8FC7; Type &#x5F97;&#x5230; interface &#x600E;&#x4E48;&#x529E;&#x5462;&#xFF1F;&#x4ED4;&#x7EC6;&#x770B;&#x4E0A;&#x56FE;&#xFF0C;&#x53EF;&#x4EE5;&#x5148;&#x901A;&#x8FC7; New() &#x65B9;&#x6CD5;&#x5F97;&#x5230; Value&#xFF0C;&#x518D;&#x8C03;&#x7528; interface() &#x65B9;&#x6CD5;&#x5F97;&#x5230; interface&#x3002;&#x501F;&#x52A9; interface &#x548C; Value &#x4E92;&#x8F6C;&#x7684;&#x6027;&#x8D28;&#xFF0C;&#x53EF;&#x4EE5;&#x5F97;&#x5230;&#x7531; Type &#x751F;&#x6210; interface &#x7684;&#x76EE;&#x7684;&#x3002;</p>
<h2 id>&#x56DB;. &#x4F18;&#x7F3A;&#x70B9;&#x4E0E;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;</h2>
<p>&#x6700;&#x540E;&#x804A;&#x804A;&#x5728; Go &#x4E2D;&#x4F7F;&#x7528;&#x53CD;&#x5C04;&#x7684;&#x4F18;&#x7F3A;&#x70B9;&#x548C;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;&#x3002;</p>
<h3 id="1">1. &#x4F18;&#x70B9;</h3>
<ul>
<li>&#x53EF;&#x4EE5;&#x5728;&#x4E00;&#x5B9A;&#x7A0B;&#x5EA6;&#x4E0A;&#x907F;&#x514D;&#x786C;&#x7F16;&#x7801;&#xFF0C;&#x63D0;&#x4F9B;&#x7075;&#x6D3B;&#x6027;&#x548C;&#x901A;&#x7528;&#x6027;&#x3002;</li>
<li>&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x4E00;&#x4E2A;&#x7B2C;&#x4E00;&#x7C7B;&#x5BF9;&#x8C61;&#x53D1;&#x73B0;&#x5E76;&#x4FEE;&#x6539;&#x6E90;&#x4EE3;&#x7801;&#x7684;&#x7ED3;&#x6784;&#xFF08;&#x5982;&#x4EE3;&#x7801;&#x5757;&#x3001;&#x7C7B;&#x3001;&#x65B9;&#x6CD5;&#x3001;&#x534F;&#x8BAE;&#x7B49;&#xFF09;&#x3002;</li>
<li>&#x53EF;&#x4EE5;&#x5728;&#x8FD0;&#x884C;&#x65F6;&#x50CF;&#x5BF9;&#x5F85;&#x6E90;&#x4EE3;&#x7801;&#x8BED;&#x53E5;&#x4E00;&#x6837;&#x52A8;&#x6001;&#x89E3;&#x6790;&#x5B57;&#x7B26;&#x4E32;&#x4E2D;&#x53EF;&#x6267;&#x884C;&#x7684;&#x4EE3;&#x7801;&#xFF08;&#x7C7B;&#x4F3C; JavaScript &#x7684; eval() &#x51FD;&#x6570;&#xFF09;&#xFF0C;&#x8FDB;&#x800C;&#x53EF;&#x5C06;&#x8DDF; class &#x6216; function &#x5339;&#x914D;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x8F6C;&#x6362;&#x6210; class &#x6216; function &#x7684;&#x8C03;&#x7528;&#x6216;&#x5F15;&#x7528;&#x3002;</li>
<li>&#x53EF;&#x4EE5;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x8BED;&#x8A00;&#x5B57;&#x8282;&#x7801;&#x89E3;&#x91CA;&#x5668;&#x6765;&#x7ED9;&#x7F16;&#x7A0B;&#x7ED3;&#x6784;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x610F;&#x4E49;&#x6216;&#x7528;&#x9014;&#x3002;</li>
</ul>
<h3 id="2">2. &#x7F3A;&#x70B9;</h3>
<ul>
<li>&#x6B64;&#x6280;&#x672F;&#x7684;&#x5B66;&#x4E60;&#x6210;&#x672C;&#x9AD8;&#x3002;&#x9762;&#x5411;&#x53CD;&#x5C04;&#x7684;&#x7F16;&#x7A0B;&#x9700;&#x8981;&#x8F83;&#x591A;&#x7684;&#x9AD8;&#x7EA7;&#x77E5;&#x8BC6;&#xFF0C;&#x5305;&#x62EC;&#x6846;&#x67B6;&#x3001;&#x5173;&#x7CFB;&#x6620;&#x5C04;&#x548C;&#x5BF9;&#x8C61;&#x4EA4;&#x4E92;&#xFF0C;&#x4EE5;&#x5B9E;&#x73B0;&#x66F4;&#x901A;&#x7528;&#x7684;&#x4EE3;&#x7801;&#x6267;&#x884C;&#x3002;</li>
<li>&#x540C;&#x6837;&#x56E0;&#x4E3A;&#x53CD;&#x5C04;&#x7684;&#x6982;&#x5FF5;&#x548C;&#x8BED;&#x6CD5;&#x90FD;&#x6BD4;&#x8F83;&#x62BD;&#x8C61;&#xFF0C;&#x8FC7;&#x591A;&#x5730;&#x6EE5;&#x7528;&#x53CD;&#x5C04;&#x6280;&#x672F;&#x4F1A;&#x4F7F;&#x5F97;&#x4EE3;&#x7801;&#x96BE;&#x4EE5;&#x88AB;&#x5176;&#x4ED6;&#x4EBA;&#x8BFB;&#x61C2;&#xFF0C;&#x4E0D;&#x5229;&#x4E8E;&#x5408;&#x4F5C;&#x4E0E;&#x4EA4;&#x6D41;&#x3002;</li>
<li>&#x7531;&#x4E8E;&#x5C06;&#x90E8;&#x5206;&#x4FE1;&#x606F;&#x68C0;&#x67E5;&#x5DE5;&#x4F5C;&#x4ECE;&#x7F16;&#x8BD1;&#x671F;&#x63A8;&#x8FDF;&#x5230;&#x4E86;&#x8FD0;&#x884C;&#x671F;&#xFF0C;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x548C;&#x5F15;&#x7528;&#x5BF9;&#x8C61;&#x5E76;&#x975E;&#x76F4;&#x63A5;&#x7684;&#x5730;&#x5740;&#x5F15;&#x7528;&#xFF0C;&#x800C;&#x662F;&#x901A;&#x8FC7; reflect &#x5305;&#x63D0;&#x4F9B;&#x7684;&#x4E00;&#x4E2A;&#x62BD;&#x8C61;&#x5C42;&#x95F4;&#x63A5;&#x8BBF;&#x95EE;&#x3002;&#x6B64;&#x4E3E;&#x5728;&#x63D0;&#x9AD8;&#x4E86;&#x4EE3;&#x7801;&#x7075;&#x6D3B;&#x6027;&#x7684;&#x540C;&#x65F6;&#xFF0C;&#x727A;&#x7272;&#x4E86;&#x4E00;&#x70B9;&#x70B9;&#x8FD0;&#x884C;&#x6548;&#x7387;&#x3002;&#x5728;&#x9879;&#x76EE;&#x6027;&#x80FD;&#x8981;&#x6C42;&#x8F83;&#x9AD8;&#x7684;&#x5730;&#x65B9;&#xFF0C;&#x4E00;&#x5B9A;&#x8981;&#x614E;&#x91CD;&#x8003;&#x8651;&#x4F7F;&#x7528;&#x53CD;&#x5C04;&#x3002;</li>
<li>&#x7531;&#x4E8E;&#x9003;&#x907F;&#x4E86;&#x7F16;&#x8BD1;&#x5668;&#x7684;&#x4E25;&#x683C;&#x68C0;&#x67E5;&#xFF0C;&#x6240;&#x4EE5;&#x4E00;&#x4E9B;&#x4E0D;&#x6B63;&#x786E;&#x7684;&#x4FEE;&#x6539;&#x4F1A;&#x5BFC;&#x81F4;&#x7A0B;&#x5E8F; panic&#x3002;</li>
</ul>
<p>&#x901A;&#x8FC7;&#x6DF1;&#x5165;&#x5B66;&#x4E60;&#x53CD;&#x5C04;&#x7684;&#x7279;&#x6027;&#x548C;&#x6280;&#x5DE7;&#xFF0C;&#x7F3A;&#x70B9;&#x53EF;&#x4EE5;&#x5C3D;&#x91CF;&#x907F;&#x514D;&#xFF0C;&#x4F46;&#x8FD9;&#x9700;&#x8981;&#x975E;&#x5E38;&#x591A;&#x7684;&#x65F6;&#x95F4;&#x548C;&#x7ECF;&#x9A8C;&#x7684;&#x79EF;&#x7D2F;&#x3002;</p>
<h3 id="3">3. &#x6700;&#x4F73;&#x5B9E;&#x8DF5;</h3>
<ul>
<li>&#x5728;&#x5E93;&#x548C;&#x6846;&#x67B6;&#x5185;&#x90E8;&#x9002;&#x5F53;&#x4F7F;&#x7528;&#x53CD;&#x5C04;&#x7279;&#x6027;&#xFF0C;&#x5C06;&#x590D;&#x6742;&#x7684;&#x903B;&#x8F91;&#x5C01;&#x88C5;&#x5728;&#x5185;&#x90E8;&#xFF0C;&#x590D;&#x6742;&#x7559;&#x7ED9;&#x81EA;&#x5DF1;&#xFF0C;&#x66B4;&#x9732;&#x7ED9;&#x4F7F;&#x7528;&#x8005;&#x7684;&#x63A5;&#x53E3;&#x90FD;&#x662F;&#x7B80;&#x5355;&#x7684;&#x3002;</li>
<li>&#x9664;&#x53BB;&#x5E93;&#x548C;&#x6846;&#x67B6;&#x4EE5;&#x5916;&#x7684;&#x4E1A;&#x52A1;&#x903B;&#x8F91;&#x4EE3;&#x7801;&#x6CA1;&#x6709;&#x5FC5;&#x8981;&#x4F7F;&#x7528;&#x53CD;&#x5C04;&#x3002;&#x7F3A;&#x70B9;&#x5728;&#x4E0A;&#x9762;&#x5DF2;&#x7ECF;&#x8BF4;&#x8FC7;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;</li>
<li>&#x5982;&#x679C;&#x4E0A;&#x8FF0; 2 &#x6761;&#x4F9D;&#x65E7;&#x6CA1;&#x6709;&#x8986;&#x76D6;&#x5230;&#x7684;&#x573A;&#x666F;&#xFF0C;&#x4E0D;&#x5230;&#x4E07;&#x4E0D;&#x5F97;&#x5DF2;&#xFF0C;&#x4E0D;&#x628A;&#x53CD;&#x5C04;&#x4F5C;&#x4E3A;&#x7B2C;&#x4E00;&#x89E3;&#x51B3;&#x65B9;&#x6CD5;&#x3002;</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[深入研究 Go interface 底层实现]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x63A5;&#x53E3;&#x662F;&#x9AD8;&#x7EA7;&#x8BED;&#x8A00;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x89C4;&#x7EA6;&#xFF0C;&#x662F;&#x4E00;&#x7EC4;&#x65B9;&#x6CD5;&#x7B7E;&#x540D;&#x7684;&#x96C6;&#x5408;&#x3002;Go &#x7684; interface &#x662F;&#x975E;&#x4FB5;&#x5165;&#x5F0F;&#x7684;&#xFF0C;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x5B9E;&#x73B0; interface &#x4E0D;&#x9700;&#x8981;&#x5728;&#x8BED;&#x6CD5;&#x4E0A;&#x663E;</p>]]></description><link>https://halfrost.com/go_interface/</link><guid isPermaLink="false">634360bbd892dc307476cceb</guid><category><![CDATA[Golang]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sat, 21 Sep 2019 16:00:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/02/147_0.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/02/147_0.jpg" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;"><p>&#x63A5;&#x53E3;&#x662F;&#x9AD8;&#x7EA7;&#x8BED;&#x8A00;&#x4E2D;&#x7684;&#x4E00;&#x4E2A;&#x89C4;&#x7EA6;&#xFF0C;&#x662F;&#x4E00;&#x7EC4;&#x65B9;&#x6CD5;&#x7B7E;&#x540D;&#x7684;&#x96C6;&#x5408;&#x3002;Go &#x7684; interface &#x662F;&#x975E;&#x4FB5;&#x5165;&#x5F0F;&#x7684;&#xFF0C;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x5B9E;&#x73B0; interface &#x4E0D;&#x9700;&#x8981;&#x5728;&#x8BED;&#x6CD5;&#x4E0A;&#x663E;&#x5F0F;&#x7684;&#x58F0;&#x660E;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x7684;&#x65B9;&#x6CD5;&#x96C6;&#x5408;&#x662F; interface &#x65B9;&#x6CD5;&#x96C6;&#x5408;&#x7684;&#x8D85;&#x96C6;&#xFF0C;&#x5C31;&#x8868;&#x793A;&#x8BE5;&#x7C7B;&#x5B9E;&#x73B0;&#x4E86;&#x8FD9;&#x4E00; interface&#x3002;&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x7F16;&#x8BD1;&#x65F6;&#x4F1A;&#x8FDB;&#x884C; interface &#x6821;&#x9A8C;&#x3002;interface &#x548C;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x4E0D;&#x540C;&#xFF0C;&#x5B83;&#x4E0D;&#x80FD;&#x5B9E;&#x73B0;&#x5177;&#x4F53;&#x903B;&#x8F91;&#xFF0C;&#x4E5F;&#x4E0D;&#x80FD;&#x5B9A;&#x4E49;&#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x5728; Go &#x8BED;&#x8A00;&#x4E2D;&#xFF0C;interface &#x548C;&#x51FD;&#x6570;&#x4E00;&#x6837;&#xFF0C;&#x90FD;&#x662F;&#x201C;&#x7B2C;&#x4E00;&#x516C;&#x6C11;&#x201D;&#x3002;interface &#x53EF;&#x4EE5;&#x7528;&#x5728;&#x4EFB;&#x4F55;&#x4F7F;&#x7528;&#x53D8;&#x91CF;&#x7684;&#x5730;&#x65B9;&#x3002;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x7ED3;&#x6784;&#x4F53;&#x5185;&#x7684;&#x5B57;&#x6BB5;&#xFF0C;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x51FD;&#x6570;&#x7684;&#x5F62;&#x53C2;&#x548C;&#x8FD4;&#x56DE;&#x503C;&#xFF0C;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x5176;&#x4ED6; interface &#x5B9A;&#x4E49;&#x7684;&#x5185;&#x5D4C;&#x5B57;&#x6BB5;&#x3002;interface &#x5728;&#x5927;&#x578B;&#x9879;&#x76EE;&#x4E2D;&#x5E38;&#x5E38;&#x7528;&#x6765;&#x89E3;&#x8026;&#x3002;&#x5728;&#x5C42;&#x4E0E;&#x5C42;&#x4E4B;&#x95F4;&#x7528; interface &#x8FDB;&#x884C;&#x62BD;&#x8C61;&#x548C;&#x89E3;&#x8026;&#x3002;&#x7531;&#x4E8E; Go interface &#x975E;&#x4FB5;&#x5165;&#x7684;&#x8BBE;&#x8BA1;&#xFF0C;&#x4F7F;&#x5F97;&#x62BD;&#x8C61;&#x51FA;&#x6765;&#x7684;&#x4EE3;&#x7801;&#x7279;&#x522B;&#x7B80;&#x6D01;&#xFF0C;&#x8FD9;&#x4E5F;&#x7B26;&#x5408; Go &#x8BED;&#x8A00;&#x8BBE;&#x8BA1;&#x4E4B;&#x521D;&#x7684;&#x54F2;&#x5B66;&#x3002;&#x9664;&#x4E86;&#x89E3;&#x8026;&#x4EE5;&#x5916;&#xFF0C;&#x8FD8;&#x6709;&#x4E00;&#x4E2A;&#x975E;&#x5E38;&#x91CD;&#x8981;&#x7684;&#x5E94;&#x7528;&#xFF0C;&#x5C31;&#x662F;&#x5229;&#x7528; interface &#x5B9E;&#x73B0;&#x4F2A;&#x6CDB;&#x578B;&#x3002;&#x5229;&#x7528;&#x7A7A;&#x7684; interface &#x4F5C;&#x4E3A;&#x51FD;&#x6570;&#x6216;&#x8005;&#x65B9;&#x6CD5;&#x53C2;&#x6570;&#x80FD;&#x591F;&#x7528;&#x5728;&#x9700;&#x8981;&#x6CDB;&#x578B;&#x7684;&#x573A;&#x666F;&#x91CC;&#x3002;</p>
<p>interface &#x4F5C;&#x4E3A; Go &#x8BED;&#x8A00;&#x7C7B;&#x578B;&#x7CFB;&#x7EDF;&#x7684;&#x7075;&#x9B42;&#xFF0C;Go &#x8BED;&#x8A00;&#x5B9E;&#x73B0;&#x591A;&#x6001;&#x548C;&#x53CD;&#x5C04;&#x7684;&#x57FA;&#x7840;&#x3002;&#x65B0;&#x624B;&#x5BF9;&#x5176;&#x7406;&#x89E3;&#x4E0D;&#x6DF1;&#x523B;&#x7684;&#x8BDD;&#xFF0C;&#x5E38;&#x5E38;&#x4F1A;&#x72AF;&#x4E0B;&#x9762;&#x8FD9;&#x4E2A;&#x9519;&#x8BEF;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var x interface{} = nil
	var y *int = nil
	interfaceIsNil(x)
	interfaceIsNil(y)
}

func interfaceIsNil(x interface{}) {
	if x == nil {
		fmt.Println(&quot;empty interface&quot;)
		return
	}
	fmt.Println(&quot;non-empty interface&quot;)
}
</code></pre>
<p>&#x7B14;&#x8005;&#x7B2C;&#x4E00;&#x6B21;&#x63A5;&#x89E6;&#x5230;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x662F;&#x5F3A;&#x8F6C;&#x4E86; gRPC &#x91CC;&#x9762;&#x7684;&#x4E00;&#x4E2A; interface&#xFF0C;&#x7136;&#x540E;&#x5728;&#x5916;&#x9762;&#x5224;&#x65AD;&#x5B83;&#x662F;&#x5426;&#x4E3A; nil&#x3002;&#x7ED3;&#x679C;&#x51FA; bug &#x4E86;&#x3002;&#x5F53;&#x521D;&#x5982;&#x679C;&#x4E86;&#x89E3;&#x5BF9;&#x8C61;&#x5F3A;&#x5236;&#x8F6C;&#x6362;&#x6210; interface &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4E0D;&#x4EC5;&#x4EC5;&#x542B;&#x6709;&#x539F;&#x6765;&#x7684;&#x5BF9;&#x8C61;&#xFF0C;&#x8FD8;&#x4F1A;&#x5305;&#x542B;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#xFF0C;&#x4E5F;&#x5C31;&#x4E0D;&#x4F1A;&#x51FA; bug &#x4E86;&#x3002;</p>
<p>&#x672C;&#x6587;&#x5C06;&#x4F1A;&#x8BE6;&#x7EC6;&#x5206;&#x89E3; interface &#x6240;&#x6709;&#x5E95;&#x5C42;&#x5B9E;&#x73B0;&#x3002;</p>
<blockquote>
<p>&#x4EE5;&#x4E0B;&#x4EE3;&#x7801;&#x57FA;&#x4E8E; Go 1.16</p>
</blockquote>
<h2 id>&#x4E00;. &#x6570;&#x636E;&#x7ED3;&#x6784;</h2>
<h3 id="1interface">1. &#x975E;&#x7A7A; interface &#x6570;&#x636E;&#x7ED3;&#x6784;</h3>
<p>&#x975E;&#x7A7A;&#x7684; interface &#x521D;&#x59CB;&#x5316;&#x7684;&#x5E95;&#x5C42;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x662F; iface&#xFF0C;&#x7A0D;&#x540E;&#x5728;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4E2D;&#x80FD;&#x9A8C;&#x8BC1;&#x8FD9;&#x4E00;&#x70B9;&#x3002;</p>
<pre><code class="language-go">type iface struct {
	tab  *itab
	data unsafe.Pointer
}
</code></pre>
<p>tab &#x4E2D;&#x5B58;&#x653E;&#x7684;&#x662F;&#x7C7B;&#x578B;&#x3001;&#x65B9;&#x6CD5;&#x7B49;&#x4FE1;&#x606F;&#x3002;data &#x6307;&#x9488;&#x6307;&#x5411;&#x7684; iface &#x7ED1;&#x5B9A;&#x5BF9;&#x8C61;&#x7684;&#x539F;&#x59CB;&#x6570;&#x636E;&#x7684;&#x526F;&#x672C;&#x3002;&#x8FD9;&#x91CC;&#x540C;&#x6837;&#x9075;&#x5FAA; Go &#x7684;&#x7EDF;&#x4E00;&#x89C4;&#x5219;&#xFF0C;&#x503C;&#x4F20;&#x9012;&#x3002;tab &#x662F; itab &#x7C7B;&#x578B;&#x7684;&#x6307;&#x9488;&#x3002;</p>
<pre><code class="language-go">// layout of Itab known to compilers
// allocated in non-garbage-collected memory
// Needs to be in sync with
// ../cmd/compile/internal/gc/reflect.go:/^func.WriteTabs.
type itab struct {
	inter *interfacetype
	_type *_type
	hash  uint32 // copy of _type.hash. Used for type switches.
	_     [4]byte
	fun   [1]uintptr // variable sized. fun[0]==0 means _type does not implement inter.
}
</code></pre>
<p>itab &#x4E2D;&#x5305;&#x542B; 5 &#x4E2A;&#x5B57;&#x6BB5;&#x3002;inner &#x5B58;&#x7684;&#x662F; interface &#x81EA;&#x5DF1;&#x7684;&#x9759;&#x6001;&#x7C7B;&#x578B;&#x3002;_type &#x5B58;&#x7684;&#x662F; interface &#x5BF9;&#x5E94;&#x5177;&#x4F53;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;&#x3002;itab &#x4E2D;&#x7684; _type &#x548C; iface &#x4E2D;&#x7684; data &#x80FD;&#x7B80;&#x8981;&#x63CF;&#x8FF0;&#x4E00;&#x4E2A;&#x53D8;&#x91CF;&#x3002;_type &#x662F;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#x5BF9;&#x5E94;&#x7684;&#x7C7B;&#x578B;&#xFF0C;data &#x662F;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x503C;&#x3002;&#x8FD9;&#x91CC;&#x7684; hash &#x5B57;&#x6BB5;&#x548C; _type &#x4E2D;&#x5B58;&#x7684; hash &#x5B57;&#x6BB5;&#x662F;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#x7684;&#xFF0C;&#x8FD9;&#x4E48;&#x505A;&#x7684;&#x76EE;&#x7684;&#x662F;&#x4E3A;&#x4E86;&#x7C7B;&#x578B;&#x65AD;&#x8A00;(&#x4E0B;&#x6587;&#x4F1A;&#x63D0;&#x5230;)&#x3002;fun &#x662F;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x6307;&#x9488;&#xFF0C;&#x5B83;&#x6307;&#x5411;&#x7684;&#x662F;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x7684;&#x51FD;&#x6570;&#x65B9;&#x6CD5;&#x3002;&#x867D;&#x7136;&#x8FD9;&#x91CC;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x6307;&#x9488;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x53EF;&#x4EE5;&#x8C03;&#x7528;&#x5F88;&#x591A;&#x65B9;&#x6CD5;&#x3002;&#x5728;&#x8FD9;&#x4E2A;&#x6307;&#x9488;&#x5BF9;&#x5E94;&#x5185;&#x5B58;&#x5730;&#x5740;&#x7684;&#x540E;&#x9762;&#x4F9D;&#x6B21;&#x5B58;&#x50A8;&#x4E86;&#x591A;&#x4E2A;&#x65B9;&#x6CD5;&#xFF0C;&#x5229;&#x7528;&#x6307;&#x9488;&#x504F;&#x79FB;&#x4FBF;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x5B83;&#x4EEC;&#x3002;</p>
<p>&#x7531;&#x4E8E; Go &#x8BED;&#x8A00;&#x662F;&#x5F3A;&#x7C7B;&#x578B;&#x8BED;&#x8A00;&#xFF0C;&#x7F16;&#x8BD1;&#x65F6;&#x5BF9;&#x6BCF;&#x4E2A;&#x53D8;&#x91CF;&#x7684;&#x7C7B;&#x578B;&#x4FE1;&#x606F;&#x505A;&#x5F3A;&#x6821;&#x9A8C;&#xFF0C;&#x6240;&#x4EE5;&#x6BCF;&#x4E2A;&#x7C7B;&#x578B;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x8981;&#x7528;&#x4E00;&#x4E2A;&#x7ED3;&#x6784;&#x4F53;&#x63CF;&#x8FF0;&#x3002;&#x518D;&#x8005; Go &#x7684;&#x53CD;&#x5C04;&#x4E5F;&#x662F;&#x57FA;&#x4E8E;&#x7C7B;&#x578B;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x5B9E;&#x73B0;&#x7684;&#x3002;_type &#x5C31;&#x662F;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x6700;&#x539F;&#x59CB;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x3002;</p>
<pre><code class="language-go">// Needs to be in sync with ../cmd/link/internal/ld/decodesym.go:/^func.commonsize,
// ../cmd/compile/internal/gc/reflect.go:/^func.dcommontype and
// ../reflect/type.go:/^type.rtype.
// ../internal/reflectlite/type.go:/^type.rtype.
type _type struct {
	size       uintptr // &#x7C7B;&#x578B;&#x5360;&#x7528;&#x5185;&#x5B58;&#x5927;&#x5C0F;
	ptrdata    uintptr // &#x5305;&#x542B;&#x6240;&#x6709;&#x6307;&#x9488;&#x7684;&#x5185;&#x5B58;&#x524D;&#x7F00;&#x5927;&#x5C0F;
	hash       uint32  // &#x7C7B;&#x578B; hash
	tflag      tflag   // &#x6807;&#x8BB0;&#x4F4D;&#xFF0C;&#x4E3B;&#x8981;&#x7528;&#x4E8E;&#x53CD;&#x5C04;
	align      uint8   // &#x5BF9;&#x9F50;&#x5B57;&#x8282;&#x4FE1;&#x606F;
	fieldAlign uint8   // &#x5F53;&#x524D;&#x7ED3;&#x6784;&#x5B57;&#x6BB5;&#x7684;&#x5BF9;&#x9F50;&#x5B57;&#x8282;&#x6570;
	kind       uint8   // &#x57FA;&#x7840;&#x7C7B;&#x578B;&#x679A;&#x4E3E;&#x503C;
	equal func(unsafe.Pointer, unsafe.Pointer) bool // &#x6BD4;&#x8F83;&#x4E24;&#x4E2A;&#x5F62;&#x53C2;&#x5BF9;&#x5E94;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;&#x662F;&#x5426;&#x76F8;&#x7B49;
	gcdata    *byte    // GC &#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;
	str       nameOff  // &#x7C7B;&#x578B;&#x540D;&#x79F0;&#x5B57;&#x7B26;&#x4E32;&#x5728;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x6BB5;&#x4E2D;&#x7684;&#x504F;&#x79FB;&#x91CF;
	ptrToThis typeOff  // &#x7C7B;&#x578B;&#x5143;&#x4FE1;&#x606F;&#x6307;&#x9488;&#x5728;&#x4E8C;&#x8FDB;&#x5236;&#x6587;&#x4EF6;&#x6BB5;&#x4E2D;&#x7684;&#x504F;&#x79FB;&#x91CF;
}
</code></pre>
<p>&#x6709; 3 &#x4E2A;&#x5B57;&#x6BB5;&#x9700;&#x8981;&#x89E3;&#x91CA;&#x4E00;&#x4E0B;&#xFF1A;</p>
<ul>
<li>kind&#xFF0C;&#x8FD9;&#x4E2A;&#x5B57;&#x6BB5;&#x63CF;&#x8FF0;&#x7684;&#x662F;&#x5982;&#x4F55;&#x89E3;&#x6790;&#x57FA;&#x7840;&#x7C7B;&#x578B;&#x3002;&#x5728; Go &#x8BED;&#x8A00;&#x4E2D;&#xFF0C;&#x57FA;&#x7840;&#x7C7B;&#x578B;&#x662F;&#x4E00;&#x4E2A;&#x679A;&#x4E3E;&#x5E38;&#x91CF;&#xFF0C;&#x6709; 26 &#x4E2A;&#x57FA;&#x7840;&#x7C7B;&#x578B;&#xFF0C;&#x5982;&#x4E0B;&#x3002;&#x679A;&#x4E3E;&#x503C;&#x901A;&#x8FC7; kindMask &#x53D6;&#x51FA;&#x7279;&#x6B8A;&#x6807;&#x8BB0;&#x4F4D;&#x3002;</li>
</ul>
<pre><code class="language-go">const (
	kindBool = 1 + iota
	kindInt
	kindInt8
	kindInt16
	kindInt32
	kindInt64
	kindUint
	kindUint8
	kindUint16
	kindUint32
	kindUint64
	kindUintptr
	kindFloat32
	kindFloat64
	kindComplex64
	kindComplex128
	kindArray
	kindChan
	kindFunc
	kindInterface
	kindMap
	kindPtr
	kindSlice
	kindString
	kindStruct
	kindUnsafePointer

	kindDirectIface = 1 &lt;&lt; 5
	kindGCProg      = 1 &lt;&lt; 6
	kindMask        = (1 &lt;&lt; 5) - 1
)
</code></pre>
<ul>
<li>str &#x548C; ptrToThis&#xFF0C;&#x5BF9;&#x5E94;&#x7684;&#x7C7B;&#x578B;&#x662F; nameoff &#x548C; typeOff&#x3002;&#x8FD9;&#x4E24;&#x4E2A;&#x5B57;&#x6BB5;&#x7684;&#x503C;&#x662F;&#x5728;&#x94FE;&#x63A5;&#x5668;&#x6BB5;&#x5408;&#x5E76;&#x548C;&#x7B26;&#x53F7;&#x91CD;&#x5B9A;&#x5411;&#x7684;&#x65F6;&#x5019;&#x8D4B;&#x503C;&#x7684;&#x3002;<br>
<img src="https://img.halfrost.com/Blog/ArticleImage/147_1.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"><br>
&#x94FE;&#x63A5;&#x5668;&#x5C06;&#x5404;&#x4E2A; .o &#x6587;&#x4EF6;&#x4E2D;&#x7684;&#x6BB5;&#x5408;&#x5E76;&#x5230;&#x8F93;&#x51FA;&#x6587;&#x4EF6;&#xFF0C;&#x4F1A;&#x8FDB;&#x884C;&#x6BB5;&#x5408;&#x5E76;&#xFF0C;&#x6709;&#x7684;&#x653E;&#x5165; .text &#x6BB5;&#xFF0C;&#x6709;&#x7684;&#x653E;&#x5165; .data &#x6BB5;&#xFF0C;&#x6709;&#x7684;&#x653E;&#x5165; .bss &#x6BB5;&#x3002;name &#x548C; type &#x9488;&#x5BF9;&#x6700;&#x7EC8;&#x8F93;&#x51FA;&#x6587;&#x4EF6;&#x6240;&#x5728;&#x6BB5;&#x5185;&#x7684;&#x504F;&#x79FB;&#x91CF; offset &#x662F;&#x7531; resolveNameOff &#x548C; resolveTypeOff &#x51FD;&#x6570;&#x8BA1;&#x7B97;&#x51FA;&#x6765;&#x7684;&#xFF0C;&#x7136;&#x540E;&#x94FE;&#x63A5;&#x5668;&#x628A;&#x7ED3;&#x679C;&#x4FDD;&#x5B58;&#x5728; str &#x548C; ptrToThis &#x4E2D;&#x3002;&#x5177;&#x4F53;&#x903B;&#x8F91;&#x53EF;&#x4EE5;&#x89C1;&#x6E90;&#x7801;&#x4E2D;&#x4E0B;&#x9762; 2 &#x4E2A;&#x51FD;&#x6570;:</li>
</ul>
<pre><code class="language-go">func resolveNameOff(ptrInModule unsafe.Pointer, off nameOff) name {}  
func resolveTypeOff(ptrInModule unsafe.Pointer, off typeOff) *_type {}
</code></pre>
<p>&#x56DE;&#x5230; _type &#x7C7B;&#x578B;&#x3002;&#x4E0A;&#x6587;&#x8C08;&#x5230; _type &#x662F;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x539F;&#x59CB;&#x4FE1;&#x606F;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x3002;&#x4F8B;&#x5982;&#xFF1A;</p>
<pre><code class="language-go">type arraytype struct {
	typ   _type
	elem  *_type
	slice *_type
	len   uintptr
}

type chantype struct {
	typ  _type
	elem *_type
	dir  uintptr
}
</code></pre>
<p>&#x5728; arraytype &#x548C; chantype &#x4E2D;&#x4FDD;&#x5B58;&#x7C7B;&#x578B;&#x7684;&#x5143;&#x4FE1;&#x606F;&#x5C31;&#x662F;&#x9760; _type&#x3002;&#x540C;&#x6837; interface &#x4E5F;&#x6709;&#x7C7B;&#x4F3C;&#x7684;&#x7C7B;&#x578B;&#x5B9A;&#x4E49;&#xFF1A;</p>
<pre><code class="language-go">type imethod struct {
	name nameOff
	ityp typeOff
}

type interfacetype struct {
	typ     _type     // &#x7C7B;&#x578B;&#x5143;&#x4FE1;&#x606F;
	pkgpath name      // &#x5305;&#x8DEF;&#x5F84;&#x548C;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;&#x7B49;&#x7B49;
	mhdr    []imethod // &#x65B9;&#x6CD5;
}
</code></pre>
<p>&#x56E0;&#x4E3A; Go &#x8BED;&#x8A00;&#x4E2D;&#x51FD;&#x6570;&#x65B9;&#x6CD5;&#x662F;&#x4EE5;&#x5305;&#x4E3A;&#x5355;&#x4F4D;&#x9694;&#x79BB;&#x7684;&#x3002;&#x6240;&#x4EE5; interfacetype &#x9664;&#x4E86;&#x4FDD;&#x5B58; _type &#x8FD8;&#x9700;&#x8981;&#x4FDD;&#x5B58;&#x5305;&#x8DEF;&#x5F84;&#x7B49;&#x63CF;&#x8FF0;&#x4FE1;&#x606F;&#x3002;mhdr &#x5B58;&#x7684;&#x662F;&#x5404;&#x4E2A; interface &#x51FD;&#x6570;&#x65B9;&#x6CD5;&#x5728;&#x6BB5;&#x5185;&#x7684;&#x504F;&#x79FB;&#x503C; offset&#xFF0C;&#x77E5;&#x9053;&#x504F;&#x79FB;&#x503C;&#x4EE5;&#x540E;&#x624D;&#x65B9;&#x4FBF;&#x8C03;&#x7528;&#x3002;</p>
<h3 id="2interface">2. &#x7A7A; interface &#x6570;&#x636E;&#x7ED3;&#x6784;</h3>
<p>&#x7A7A;&#x7684; inferface{} &#x662F;&#x6CA1;&#x6709;&#x65B9;&#x6CD5;&#x96C6;&#x7684;&#x63A5;&#x53E3;&#x3002;&#x6240;&#x4EE5;&#x4E0D;&#x9700;&#x8981; itab &#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x5B83;&#x53EA;&#x9700;&#x8981;&#x5B58;&#x7C7B;&#x578B;&#x548C;&#x7C7B;&#x578B;&#x5BF9;&#x5E94;&#x7684;&#x503C;&#x5373;&#x53EF;&#x3002;&#x5BF9;&#x5E94;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">type eface struct {
	_type *_type
	data  unsafe.Pointer
}
</code></pre>
<p>&#x4ECE;&#x8FD9;&#x4E2A;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;&#x53EA;&#x6709;&#x5F53; 2 &#x4E2A;&#x5B57;&#x6BB5;&#x90FD;&#x4E3A; nil&#xFF0C;&#x7A7A;&#x63A5;&#x53E3;&#x624D;&#x4E3A; nil&#x3002;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x4E3B;&#x8981;&#x76EE;&#x7684;&#x6709; 2 &#x4E2A;&#xFF0C;&#x4E00;&#x662F;&#x5B9E;&#x73B0;&#x201C;&#x6CDB;&#x578B;&#x201D;&#xFF0C;&#x4E8C;&#x662F;&#x4F7F;&#x7528;&#x53CD;&#x5C04;&#x3002;</p>
<h2 id>&#x4E8C;. &#x7C7B;&#x578B;&#x8F6C;&#x6362;</h2>
<p>&#x4E3E;&#x4E2A;&#x5177;&#x4F53;&#x7684;&#x4F8B;&#x5B50;&#x6765;&#x8BF4;&#x660E; interface &#x662F;&#x5982;&#x4F55;&#x8FDB;&#x884C;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x7684;&#x3002;&#x5148;&#x6765;&#x770B;&#x6307;&#x9488;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x3002;</p>
<h3 id="1">1. &#x6307;&#x9488;&#x7C7B;&#x578B;</h3>
<pre><code class="language-go">package main

import &quot;fmt&quot;

func main() {
	var s Person = &amp;Student{name: &quot;halfrost&quot;}
	s.sayHello(&quot;everyone&quot;)
}

type Person interface {
	sayHello(name string) string
	sayGoodbye(name string) string
}

type Student struct {
	name string
}

//go:noinline
func (s *Student) sayHello(name string) string {
	return fmt.Sprintf(&quot;%v: Hello %v, nice to meet you.\n&quot;, s.name, name)
}

//go:noinline
func (s *Student) sayGoodbye(name string) string {
	return fmt.Sprintf(&quot;%v: Hi %v, see you next time.\n&quot;, s.name, name)
}

</code></pre>
<p>&#x5229;&#x7528; go build &#x548C; go tool &#x547D;&#x4EE4;&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x53D8;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">$ go tool compile -S -N -l main.go &gt;main.s1 2&gt;&amp;1
</code></pre>
<p>main &#x65B9;&#x6CD5;&#x4E2D;&#x6709; 3 &#x4E2A;&#x64CD;&#x4F5C;&#xFF0C;&#x91CD;&#x70B9;&#x5173;&#x6CE8;&#x540E; 2 &#x4E2A;&#x6D89;&#x53CA;&#x5230; interface &#x7684;&#x64CD;&#x4F5C;&#xFF1A;</p>
<ol>
<li>&#x521D;&#x59CB;&#x5316; Student &#x5BF9;&#x8C61;&#x6307;&#x9488;</li>
<li>&#x5C06; Student &#x5BF9;&#x8C61;&#x6307;&#x9488;&#x8F6C;&#x6362;&#x6210; interface</li>
<li>&#x8C03;&#x7528; interface &#x7684;&#x65B9;&#x6CD5;</li>
</ol>
<blockquote>
<p>Plan9 &#x6C47;&#x7F16;&#x5E38;&#x89C1;&#x5BC4;&#x5B58;&#x5668;&#x542B;&#x4E49;&#xFF1A;<br>
BP: &#x6808;&#x57FA;&#xFF0C;&#x6808;&#x5E27;&#xFF08;&#x51FD;&#x6570;&#x7684;&#x6808;&#x53EB;&#x6808;&#x5E27;&#xFF09;&#x7684;&#x5F00;&#x59CB;&#x4F4D;&#x7F6E;&#x3002;<br>
SP: &#x6808;&#x9876;&#xFF0C;&#x6808;&#x5E27;&#x7684;&#x7ED3;&#x675F;&#x4F4D;&#x7F6E;&#x3002;<br>
PC: &#x5C31;&#x662F;IP&#x5BC4;&#x5B58;&#x5668;&#xFF0C;&#x5B58;&#x653E;CPU&#x4E0B;&#x4E00;&#x4E2A;&#x6267;&#x884C;&#x6307;&#x4EE4;&#x7684;&#x4F4D;&#x7F6E;&#x5730;&#x5740;&#x3002;<br>
TLS: &#x865A;&#x62DF;&#x5BC4;&#x5B58;&#x5668;&#x3002;&#x8868;&#x793A;&#x7684;&#x662F; thread-local storage&#xFF0C;Golang &#x4E2D;&#x5B58;&#x653E;&#x4E86;&#x5F53;&#x524D;&#x6B63;&#x5728;&#x6267;&#x884C;&#x7684;g&#x7684;&#x7ED3;&#x6784;&#x4F53;&#x3002;</p>
</blockquote>
<p>&#x5148;&#x6765;&#x770B; Student &#x521D;&#x59CB;&#x5316;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">
0x0021 00033 (main.go:6)	LEAQ	type.&quot;&quot;.Student(SB), AX      // &#x5C06; type.&quot;&quot;.Student &#x5730;&#x5740;&#x653E;&#x5165; AX &#x4E2D;
0x0028 00040 (main.go:6)	MOVQ	AX, (SP)                     // &#x5C06; AX &#x4E2D;&#x7684;&#x503C;&#x5B58;&#x50A8;&#x5728; SP &#x4E2D;
0x002c 00044 (main.go:6)	PCDATA	$1, $0
0x002c 00044 (main.go:6)	CALL	runtime.newobject(SB)        // &#x8C03;&#x7528; runtime.newobject() &#x65B9;&#x6CD5;&#xFF0C;&#x751F;&#x6210; Student &#x5BF9;&#x8C61;&#x5B58;&#x5165; SB &#x4E2D;
0x0031 00049 (main.go:6)	MOVQ	8(SP), DI                    // &#x5C06;&#x751F;&#x6210;&#x7684; Student &#x5BF9;&#x8C61;&#x653E;&#x5165; DI &#x4E2D;
0x0036 00054 (main.go:6)	MOVQ	DI, &quot;&quot;..autotmp_2+40(SP)     // &#x7F16;&#x8BD1;&#x5668;&#x8BA4;&#x4E3A; Student &#x662F;&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#xFF0C;&#x6240;&#x4EE5;&#x5C06; DI &#x653E;&#x5728;&#x6808;&#x4E0A;
0x003b 00059 (main.go:6)	MOVQ	$8, 8(DI)                    // (DI.Name).Len = 8
0x0043 00067 (main.go:6)	PCDATA	$0, $-2
0x0043 00067 (main.go:6)	CMPL	runtime.writeBarrier(SB), $0
0x004a 00074 (main.go:6)	JEQ	78
0x004c 00076 (main.go:6)	JMP	172
0x004e 00078 (main.go:6)	LEAQ	go.string.&quot;halfrost&quot;(SB), AX  // &#x5C06; &quot;halfrost&quot; &#x5B57;&#x7B26;&#x4E32;&#x7684;&#x5730;&#x5740;&#x653E;&#x5165; AX &#x4E2D;
0x0055 00085 (main.go:6)	MOVQ	AX, (DI)                      // (DI.Name).Data = &amp;&quot;halfrost&quot;
0x0058 00088 (main.go:6)	JMP	90
0x005a 00090 (main.go:6)	PCDATA	$0, $-1
</code></pre>
<p>&#x5148;&#x5C06; *_type &#x653E;&#x5728; (SP) &#x6808;&#x9876;&#x3002;&#x7136;&#x540E;&#x8C03;&#x7528; runtime.newobject() &#x751F;&#x6210; Student &#x5BF9;&#x8C61;&#x3002;(SP) &#x6808;&#x9876;&#x7684;&#x503C;&#x5373;&#x662F; newobject() &#x65B9;&#x6CD5;&#x7684;&#x5165;&#x53C2;&#x3002;</p>
<pre><code class="language-go">func newobject(typ *_type) unsafe.Pointer {
	return mallocgc(typ.size, typ, true)
}
</code></pre>
<p>PCDATA &#x7528;&#x4E8E;&#x751F;&#x6210; PC &#x8868;&#x683C;&#xFF0C;PCDATA &#x7684;&#x6307;&#x4EE4;&#x7528;&#x6CD5;&#x4E3A;&#xFF1A;PCDATA tableid, tableoffset&#x3002;PCDATA&#x6709;&#x4E2A;&#x4E24;&#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x53C2;&#x6570;&#x4E3A;&#x8868;&#x683C;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x662F;&#x8868;&#x683C;&#x7684;&#x5730;&#x5740;&#x3002;runtime.writeBarrier() &#x662F; GC &#x76F8;&#x5173;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x53EF;&#x4EE5;&#x7814;&#x7A76;&#x5B83;&#x7684;&#x6E90;&#x7801;&#x3002;&#x4EE5;&#x4E0B;&#x662F; Student &#x5BF9;&#x8C61;&#x4E34;&#x65F6;&#x5BF9;&#x8C61; GC &#x7684;&#x4E00;&#x4E9B;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#xFF0C;&#x7531;&#x4E8E;&#x6709; JMP &#x547D;&#x4EE4;&#xFF0C;&#x4EE3;&#x7801;&#x662F;&#x5206;&#x5F00;&#x7684;&#xFF0C;&#x7B14;&#x8005;&#x5728;&#x8FD9;&#x91CC;&#x5C06;&#x5B83;&#x4EEC;&#x6C47;&#x96C6;&#x5728;&#x4E00;&#x8D77;&#x3002;</p>
<pre><code class="language-go">
0x0043 00067 (main.go:6)    PCDATA  $0, $-2
0x0043 00067 (main.go:6)    CMPL    runtime.writeBarrier(SB), $0
0x004a 00074 (main.go:6)    JEQ 78
0x004c 00076 (main.go:6)    JMP 172
......
0x00ac 00172 (main.go:6)	PCDATA	$0, $-2
0x00ac 00172 (main.go:6)	LEAQ	go.string.&quot;halfrost&quot;(SB), AX
0x00b3 00179 (main.go:6)	CALL	runtime.gcWriteBarrier(SB)
0x00b8 00184 (main.go:6)	JMP	90
0x00ba 00186 (main.go:6)	NOP
</code></pre>
<p>78 &#x5BF9;&#x5E94;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x662F; 0x004e&#xFF0C;172 &#x5BF9;&#x5E94;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x662F; 0x00ac&#x3002;&#x5148;&#x5BF9;&#x6BD4; runtime.writeBarrier(SB) &#x548C; $0 &#x5B58;&#x7684;&#x662F;&#x5426;&#x4E00;&#x81F4;&#xFF0C;&#x5982;&#x679C;&#x76F8;&#x540C;&#x5219; JMP &#x5230; 0x004e &#x884C;&#xFF0C;&#x5982;&#x679C;&#x4E0D;&#x540C;&#x5219; JMP &#x5230; 0x00ac &#x884C;&#x3002;0x004e &#x884C;&#x548C; 0x00ac &#x884C;&#x4EE3;&#x7801;&#x5B8C;&#x5168;&#x76F8;&#x540C;&#xFF0C;&#x90FD;&#x662F;&#x5C06;&#x5B57;&#x7B26;&#x4E32; &quot;halfrost&quot; &#x7684;&#x5730;&#x5740;&#x653E;&#x5165; AX &#x4E2D;&#xFF0C;&#x4E0D;&#x8FC7; 0x00ac &#x884C;&#x6267;&#x884C;&#x5B8C;&#x4F1A;&#x7D27;&#x63A5;&#x7740;&#x8C03;&#x7528; runtime.gcWriteBarrier(SB)&#x3002;&#x6267;&#x884C;&#x5B8C;&#x6210;&#x4EE5;&#x540E;&#x518D;&#x56DE;&#x5230; 0x005a &#x884C;&#x3002;</p>
<p>&#x7B2C;&#x4E00;&#x6B65;&#x7ED3;&#x675F;&#x4EE5;&#x540E;&#xFF0C;&#x5185;&#x5B58;&#x4E2D;&#x5B58;&#x4E86; 3 &#x4E2A;&#x503C;&#x3002;&#x4E34;&#x65F6;&#x53D8;&#x91CF; .autotmp_2 &#x653E;&#x5728; +40(SP) &#x7684;&#x5730;&#x5740;&#x5904;&#xFF0C;&#x5B83;&#x4E5F;&#x5C31;&#x662F;&#x4E34;&#x65F6; Student &#x5BF9;&#x8C61;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_2_1.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x7B2C;&#x4E8C;&#x6B65;&#xFF0C;&#x5C06; Student &#x5BF9;&#x8C61;&#x8F6C;&#x6362;&#x6210; interface&#x3002;</p>
<pre><code class="language-go">
0x005a 00090 (main.go:6)	MOVQ	&quot;&quot;..autotmp_2+40(SP), AX
0x005f 00095 (main.go:6)	MOVQ	AX, &quot;&quot;..autotmp_1+48(SP)
0x0064 00100 (main.go:6)	LEAQ	go.itab.*&quot;&quot;.Student,&quot;&quot;.Person(SB), CX
0x006b 00107 (main.go:6)	MOVQ	CX, &quot;&quot;.s+56(SP)
0x0070 00112 (main.go:6)	MOVQ	AX, &quot;&quot;.s+64(SP)
</code></pre>
<p>&#x7ECF;&#x8FC7;&#x4E0A;&#x9762;&#x51E0;&#x884C;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF0C;&#x6210;&#x529F;&#x7684;&#x6784;&#x9020;&#x51FA;&#x4E86; itab &#x7ED3;&#x6784;&#x4F53;&#x3002;&#x5728;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4E2D;&#x53EF;&#x4EE5;&#x627E;&#x5230; itab &#x7684;&#x5185;&#x5B58;&#x5E03;&#x5C40;&#xFF1A;</p>
<pre><code class="language-go">go.itab.*&quot;&quot;.Student,&quot;&quot;.Person SRODATA dupok size=40
	0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0x0010 0c 31 79 12 00 00 00 00 00 00 00 00 00 00 00 00  .1y.............
	0x0020 00 00 00 00 00 00 00 00                          ........
	rel 0+8 t=1 type.&quot;&quot;.Person+0
	rel 8+8 t=1 type.*&quot;&quot;.Student+0
	rel 24+8 t=1 &quot;&quot;.(*Student).sayGoodbye+0
	rel 32+8 t=1 &quot;&quot;.(*Student).sayHello+0
</code></pre>
<p>itab &#x7ED3;&#x6784;&#x4F53;&#x7684;&#x9996;&#x5B57;&#x8282;&#x91CC;&#x9762;&#x5B58;&#x7684;&#x662F; inter *interfacetype&#xFF0C;&#x6B64;&#x5904;&#x5373; Person interface&#x3002;&#x7B2C;&#x4E8C;&#x4E2A;&#x5B57;&#x8282;&#x4E2D;&#x5B58;&#x7684;&#x662F; *_type&#xFF0C;&#x8FD9;&#x91CC;&#x662F;&#x7B2C;&#x4E00;&#x6B65;&#x751F;&#x6210;&#x7684;&#xFF0C;&#x653E;&#x5728; (SP) &#x5730;&#x5740;&#x5904;&#x7684;&#x5730;&#x5740;&#x3002;&#x7B2C;&#x56DB;&#x4E2A;&#x5B57;&#x8282;&#x4E2D;&#x5B58;&#x7684;&#x662F; fun [1]uintptr&#xFF0C;&#x5BF9;&#x5E94; sayGoodbye &#x65B9;&#x6CD5;&#x7684;&#x9996;&#x5730;&#x5740;&#x3002;&#x7B2C;&#x4E94;&#x4E2A;&#x5B57;&#x8282;&#x4E2D;&#x5B58;&#x7684;&#x4E5F;&#x662F; fun [1]uintptr&#xFF0C;&#x5BF9;&#x5E94; sayHello &#x65B9;&#x6CD5;&#x7684;&#x9996;&#x5730;&#x5740;&#x3002;&#x56DE;&#x987E;&#x4E0A;&#x4E00;&#x7AE0;&#x8282;&#x91CC;&#x9762;&#x7684; itab &#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF1A;</p>
<pre><code class="language-go">type itab struct {
    inter *interfacetype // 8 &#x5B57;&#x8282;
    _type *_type         // 8 &#x5B57;&#x8282;
    hash  uint32 		 // 4 &#x5B57;&#x8282;&#xFF0C;&#x586B;&#x5145;&#x4F7F;&#x5F97;&#x5185;&#x5B58;&#x5BF9;&#x9F50;
    _     [4]byte        // 4 &#x5B57;&#x8282;
    fun   [1]uintptr     // 8 &#x5B57;&#x8282;
}
</code></pre>
<p>&#x73B0;&#x5728;&#x5C31;&#x5F88;&#x660E;&#x786E;&#x4E86;&#x4E3A;&#x4EC0;&#x4E48; fun &#x53EA;&#x9700;&#x8981;&#x5B58;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x6307;&#x9488;&#x3002;&#x6BCF;&#x4E2A;&#x51FD;&#x6570;&#x6307;&#x9488;&#x90FD;&#x662F; 8 &#x4E2A;&#x5B57;&#x8282;&#xFF0C;&#x5982;&#x679C; interface &#x91CC;&#x9762;&#x5305;&#x542B;&#x591A;&#x4E2A;&#x51FD;&#x6570;&#xFF0C;&#x53EA;&#x9700;&#x8981; fun &#x5F80;&#x540E;&#x987A;&#x5E8F;&#x504F;&#x79FB;&#x591A;&#x4E2A;&#x5B57;&#x8282;&#x5373;&#x53EF;&#x3002;&#x7B2C;&#x4E8C;&#x6B65;&#x7ED3;&#x675F;&#x4EE5;&#x540E;&#xFF0C;&#x5185;&#x5B58;&#x4E2D;&#x5B58;&#x50A8;&#x4E86;&#x4EE5;&#x4E0B;&#x8FD9;&#x4E9B;&#x503C;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_3_2.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x5728;&#x7B2C;&#x4E8C;&#x6B65;&#x4E2D;&#x65B0;&#x5EFA;&#x4E86;&#x4E00;&#x4E2A;&#x4E34;&#x65F6;&#x53D8;&#x91CF; .autotmp_1 &#x653E;&#x5728; +48(SP) &#x5730;&#x5740;&#x5904;&#x3002;&#x5E76;&#x4E14;&#x5229;&#x7528;&#x7B2C;&#x4E00;&#x6B65;&#x4E2D;&#x751F;&#x6210;&#x7684; Student &#x4E34;&#x65F6;&#x53D8;&#x91CF;&#x6784;&#x9020;&#x51FA;&#x4E86; *itab&#x3002;&#x503C;&#x5F97;&#x8BF4;&#x660E;&#x7684;&#x662F;&#xFF0C;&#x867D;&#x7136;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x5E76;&#x6CA1;&#x6709;&#x663E;&#x793A;&#x8C03;&#x7528;&#x51FD;&#x6570;&#x751F;&#x6210; iface&#xFF0C;&#x4F46;&#x662F;&#x6B64;&#x65F6;&#x5DF2;&#x7ECF;&#x751F;&#x6210;&#x4E86; iface&#x3002;</p>
<pre><code class="language-go">type iface struct {
    tab  *itab
    data unsafe.Pointer
}
</code></pre>
<p>&#x5982;&#x4E0A;&#x56FE;&#xFF0C;+56(SP) &#x5904;&#x5B58;&#x7684;&#x662F; *itab&#xFF0C;+64(SP) &#x5904;&#x5B58;&#x7684;&#x662F; unsafe.Pointer&#xFF0C;&#x8FD9;&#x91CC;&#x7684;&#x6307;&#x9488;&#x548C; +8(SP) &#x7684;&#x6307;&#x9488;&#x662F;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#x7684;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x5C31;&#x662F;&#x6700;&#x540E;&#x4E00;&#x6B65;&#xFF0C;&#x8C03;&#x7528; interface &#x7684;&#x65B9;&#x6CD5;&#x3002;</p>
<pre><code class="language-go">
0x0075 00117 (main.go:7)	MOVQ	&quot;&quot;.s+56(SP), AX
0x007a 00122 (main.go:7)	TESTB	AL, (AX)
0x007c 00124 (main.go:7)	MOVQ	32(AX), AX
0x0080 00128 (main.go:7)	MOVQ	&quot;&quot;.s+64(SP), CX
0x0085 00133 (main.go:7)	MOVQ	CX, (SP)
0x0089 00137 (main.go:7)	LEAQ	go.string.&quot;everyone&quot;(SB), CX
0x0090 00144 (main.go:7)	MOVQ	CX, 8(SP)
0x0095 00149 (main.go:7)	MOVQ	$8, 16(SP)
0x009e 00158 (main.go:7)	NOP
0x00a0 00160 (main.go:7)	CALL	AX
</code></pre>
<p>&#x5148;&#x53D6;&#x51FA;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x7684;&#x771F;&#x6B63;&#x5BF9;&#x8C61;&#xFF0C;&#x653E;&#x5165; (SP) &#x4E2D;&#xFF0C;&#x518D;&#x4F9D;&#x6B21;&#x5C06;&#x65B9;&#x6CD5;&#x4E2D;&#x7684;&#x5165;&#x53C2;&#x6309;&#x7167;&#x987A;&#x5E8F;&#x653E;&#x5728; +8(SP) &#x4E4B;&#x540E;&#x3002;&#x7136;&#x540E;&#x8C03;&#x7528;&#x51FD;&#x6570;&#x6307;&#x9488;&#x5BF9;&#x5E94;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x4ECE;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;AX &#x76F4;&#x63A5;&#x4ECE;&#x53D6;&#x51FA;&#x4E86; *itab &#x6307;&#x9488;&#x5B58;&#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#xFF0C;&#x7136;&#x540E;&#x504F;&#x79FB;&#x5230;&#x4E86; +32 &#x7684;&#x4F4D;&#x7F6E;&#xFF0C;&#x8FD9;&#x91CC;&#x662F;&#x8981;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x6CD5; sayHello &#x7684;&#x5185;&#x5B58;&#x5730;&#x5740;&#x3002;&#x6700;&#x540E;&#x4ECE;&#x6808;&#x9876;&#x4F9D;&#x6B21;&#x53D6;&#x51FA;&#x9700;&#x8981;&#x7684;&#x53C2;&#x6570;&#xFF0C;&#x5373;&#x7B97;&#x5B8C;&#x6210; iterface &#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x3002;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x524D;&#x4E00;&#x523B;&#xFF0C;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x72B6;&#x6001;&#x5982;&#x4E0B;&#xFF0C;&#x4E3B;&#x8981;&#x5173;&#x6CE8; AX &#x7684;&#x5730;&#x5740;&#x4EE5;&#x53CA;&#x6808;&#x9876;&#x7684;&#x6240;&#x6709;&#x53C2;&#x6570;&#x4FE1;&#x606F;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_4_1.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x6808;&#x9876;&#x4F9D;&#x6B21;&#x5B58;&#x653E;&#x7684;&#x662F;&#x65B9;&#x6CD5;&#x7684;&#x8C03;&#x7528;&#x8005;&#xFF0C;&#x53C2;&#x6570;&#x3002;&#x8C03;&#x7528;&#x683C;&#x5F0F;&#x53EF;&#x4EE5;&#x8868;&#x793A;&#x4E3A; func(reciver, param1)&#x3002;</p>
<h3 id="2">2. &#x7ED3;&#x6784;&#x4F53;&#x7C7B;&#x578B;</h3>
<p>&#x6307;&#x9488;&#x7C7B;&#x578B;&#x548C;&#x7ED3;&#x6784;&#x4F53;&#x7C7B;&#x578B;&#x5728;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E2D;&#x4F1A;&#x6709;&#x54EA;&#x4E9B;&#x533A;&#x522B;&#xFF1F;&#x8FD9;&#x4E00;&#x8282;&#x597D;&#x597D;&#x5206;&#x6790;&#x5BF9;&#x6BD4;&#x4E00;&#x4E0B;&#x3002;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x548C;&#x6307;&#x9488;&#x7C7B;&#x578B;&#x5927;&#x4F53;&#x4E00;&#x81F4;&#xFF0C;&#x53EA;&#x662F;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x7684;&#x65F6;&#x5019;&#x6362;&#x6210;&#x4E86;&#x7ED3;&#x6784;&#x4F53;&#xFF0C;&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;&#x4E5F;&#x6362;&#x6210;&#x4E86;&#x7ED3;&#x6784;&#x4F53;&#xFF0C;&#x5176;&#x4ED6;&#x90FD;&#x6CA1;&#x6709;&#x53D8;&#x3002;</p>
<pre><code class="language-go">package main

import &quot;fmt&quot;

func main() {
	var s Person = Student{name: &quot;halfrost&quot;}
	s.sayHello(&quot;everyone&quot;)
}

type Person interface {
	sayHello(name string) string
	sayGoodbye(name string) string
}

type Student struct {
	name string
}

//go:noinline
func (s Student) sayHello(name string) string {
	return fmt.Sprintf(&quot;%v: Hello %v, nice to meet you.\n&quot;, s.name, name)
}

//go:noinline
func (s Student) sayGoodbye(name string) string {
	return fmt.Sprintf(&quot;%v: Hi %v, see you next time.\n&quot;, s.name, name)
}
</code></pre>
<p>&#x7528;&#x540C;&#x6837;&#x7684;&#x547D;&#x4EE4;&#x751F;&#x6210;&#x5BF9;&#x5E94;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">$ go tool compile -S -N -l main.go &gt;main.s2 2&gt;&amp;1
</code></pre>
<p>&#x5BF9;&#x6BD4;&#x76F8;&#x540C;&#x7684; 3 &#x4E2A;&#x73AF;&#x8282;&#xFF1A;</p>
<ol>
<li>&#x521D;&#x59CB;&#x5316; Student &#x5BF9;&#x8C61;</li>
<li>&#x5C06; Student &#x5BF9;&#x8C61;&#x8F6C;&#x6362;&#x6210; interface</li>
<li>&#x8C03;&#x7528; interface &#x7684;&#x65B9;&#x6CD5;</li>
</ol>
<pre><code class="language-go">
0x0021 00033 (main.go:6)	XORPS	X0, X0                       // X0 &#x7F6E; 0
0x0024 00036 (main.go:6)	MOVUPS	X0, &quot;&quot;..autotmp_1+64(SP)     // &#x6E05;&#x7A7A; +64(SP)
0x0029 00041 (main.go:6)	LEAQ	go.string.&quot;halfrost&quot;(SB), AX
0x0030 00048 (main.go:6)	MOVQ	AX, &quot;&quot;..autotmp_1+64(SP)
0x0035 00053 (main.go:6)	MOVQ	$8, &quot;&quot;..autotmp_1+72(SP)
0x003e 00062 (main.go:6)	MOVQ	AX, (SP)
0x0042 00066 (main.go:6)	MOVQ	$8, 8(SP)
0x004b 00075 (main.go:6)	PCDATA	$1, $0
</code></pre>
<p>&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5C06; &quot;halfrost&quot; &#x653E;&#x5165;&#x5185;&#x5B58;&#x76F8;&#x5E94;&#x7684;&#x4F4D;&#x7F6E;&#x3002;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801; 1-8 &#x884C;&#xFF0C;&#x5C06;&#x5B57;&#x7B26;&#x4E32; &quot;halfrost&quot; &#x5730;&#x5740;&#x548C;&#x957F;&#x5EA6; 8 &#x62F7;&#x8D1D;&#x5230; +0(SP)&#xFF0C;+8(SP) &#x548C; +64(SP)&#xFF0C;+72(SP) &#x4E2D;&#x3002;&#x4ECE;&#x8FD9;&#x91CC;&#x53EF;&#x4EE5;&#x4E86;&#x89E3;&#x5230;&#x666E;&#x901A;&#x7684;&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x5E03;&#x5C40;&#x662F;&#x600E;&#x4E48;&#x6837;&#x7684;&#x3002;&#x4ECE;&#x4E0A;&#x8FF0;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x53D1;&#x73B0;&#x8FD9;&#x4E2A;&#x53D8;&#x91CF;&#x53EA;&#x662F;&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#xFF0C;&#x90FD;&#x6CA1;&#x6709;&#x8C03;&#x7528; runtime.newobject()&#xFF0C;&#x4EC5;&#x4EC5;&#x662F;&#x5C06;&#x5B83;&#x7684;&#x6BCF;&#x4E2A;&#x57FA;&#x672C;&#x7C7B;&#x578B;&#x7684;&#x5B57;&#x6BB5;&#x751F;&#x6210;&#x597D;&#x653E;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_6_.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<pre><code class="language-go">
0x004b 00075 (main.go:6)	CALL	runtime.convTstring(SB)
0x0050 00080 (main.go:6)	MOVQ	16(SP), AX
0x0055 00085 (main.go:6)	MOVQ	AX, &quot;&quot;..autotmp_2+40(SP)
0x005a 00090 (main.go:6)	LEAQ	go.itab.&quot;&quot;.Student,&quot;&quot;.Person(SB), CX
0x0061 00097 (main.go:6)	MOVQ	CX, &quot;&quot;.s+48(SP)
0x0066 00102 (main.go:6)	MOVQ	AX, &quot;&quot;.s+56(SP)
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x751F;&#x6210;&#x4E86; interface&#x3002;&#x7B2C; 1 &#x884C;&#x8C03;&#x7528;&#x4E86; runtime.convTstring()&#x3002;</p>
<pre><code class="language-go">func convTstring(val string) (x unsafe.Pointer) {
	if val == &quot;&quot; {
		x = unsafe.Pointer(&amp;zeroVal[0])
	} else {
		x = mallocgc(unsafe.Sizeof(val), stringType, true)
		*(*string)(x) = val
	}
	return
}
</code></pre>
<p>runtime.convTstring() &#x4F1A;&#x4ECE;&#x6808;&#x9876; +0(SP) &#x53D6;&#x51FA;&#x5165;&#x53C2; &quot;halfrost&quot; &#x548C;&#x957F;&#x5EA6; 8&#x3002;&#x5728;&#x6808;&#x4E0A;&#x751F;&#x6210;&#x4E86;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x53D8;&#x91CF;&#xFF0C;&#x8FD4;&#x56DE;&#x4E86;&#x5B83;&#x7684;&#x6307;&#x9488;&#x653E;&#x5728; +16(SP) &#x4E2D;&#xFF0C;&#x5E76;&#x62F7;&#x8D1D;&#x5230; +40(SP) &#x91CC;&#x3002;&#x7B2C; 4 &#x884C;&#x751F;&#x6210;&#x4E86; itab &#x7684;&#x6307;&#x9488;&#xFF0C;&#x8FD9;&#x91CC;&#x548C;&#x4E0A;&#x4E00;&#x7AE0;&#x91CC;&#x9762;&#x4E00;&#x81F4;&#xFF0C;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;&#x81F3;&#x6B64;&#xFF0C;iface &#x751F;&#x6210;&#x4E86;&#xFF0C;*itab &#x548C; unsafe.Pointer &#x5206;&#x522B;&#x5B58;&#x5728; +48(SP) &#x548C; +56(SP) &#x4E2D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_5_1.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<pre><code class="language-go">
0x006b 00107 (main.go:7)	MOVQ	&quot;&quot;.s+48(SP), AX
0x0070 00112 (main.go:7)	TESTB	AL, (AX)
0x0072 00114 (main.go:7)	MOVQ	32(AX), AX
0x0076 00118 (main.go:7)	MOVQ	&quot;&quot;.s+56(SP), CX
0x007b 00123 (main.go:7)	MOVQ	CX, (SP)
0x007f 00127 (main.go:7)	LEAQ	go.string.&quot;everyone&quot;(SB), CX
0x0086 00134 (main.go:7)	MOVQ	CX, 8(SP)
0x008b 00139 (main.go:7)	MOVQ	$8, 16(SP)
0x0094 00148 (main.go:7)	CALL	AX
</code></pre>
<p>&#x6700;&#x540E;&#x4E00;&#x6B65;&#x662F;&#x8C03;&#x7528; interface &#x65B9;&#x6CD5;&#x3002;&#x8FD9;&#x4E00;&#x6B65;&#x548C;&#x4E0A;&#x4E00;&#x8282;&#x4E2D;&#x7684;&#x6D41;&#x7A0B;&#x57FA;&#x672C;&#x4E00;&#x81F4;&#x3002;&#x5148;&#x901A;&#x8FC7; itab  &#x6307;&#x9488;&#x627E;&#x5230;&#x51FD;&#x6570;&#x6307;&#x9488;&#x3002;&#x7136;&#x540E;&#x5C06;&#x8981;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#x7684;&#x5165;&#x53C2;&#x90FD;&#x653E;&#x5728;&#x6808;&#x9876;&#x3002;&#x6700;&#x540E;&#x8C03;&#x7528;&#x5373;&#x53EF;&#x3002;&#x6B64;&#x65F6;&#x5185;&#x5B58;&#x5E03;&#x5C40;&#x5982;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_7_0.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x53EF;&#x80FD;&#x6709;&#x8BFB;&#x8005;&#x597D;&#x5947;&#xFF0C;&#x4E3A;&#x4EC0;&#x4E48;&#x7ED3;&#x6784;&#x4F53;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x91CC;&#x9762;&#x4E5F;&#x6CA1;&#x6709; runtime.convT2I() &#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x5462;&#xFF1F;&#x7B14;&#x8005;&#x8BA4;&#x4E3A;&#x8FD9;&#x91CC;&#x662F;&#x7F16;&#x8BD1;&#x5668;&#x7684;&#x4E00;&#x4E9B;&#x4F18;&#x5316;&#x5BFC;&#x81F4;&#x7684;&#x3002;</p>
<pre><code class="language-go">func convT2I(tab *itab, elem unsafe.Pointer) (i iface) {
	t := tab._type
	if raceenabled {
		raceReadObjectPC(t, elem, getcallerpc(), funcPC(convT2I))
	}
	if msanenabled {
		msanread(elem, t.size)
	}
	x := mallocgc(t.size, t, true)
	typedmemmove(t, x, elem)
	i.tab = tab
	i.data = x
	return
}
</code></pre>
<p>runtime.convT2I() &#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x4F1A;&#x751F;&#x6210;&#x4E00;&#x4E2A; iface&#xFF0C;&#x5728;&#x5806;&#x4E0A;&#x751F;&#x6210; iface.data&#xFF0C;&#x5E76;&#x4E14;&#x4F1A; typedmemmove()&#x3002;&#x7B14;&#x8005;&#x627E;&#x4E86; 2 &#x4E2A;&#x76F8;&#x5173;&#x7684; PR&#xFF0C;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x53EF;&#x4EE5;&#x770B;&#x770B;&#x3002;<a href="https://go-review.googlesource.com/c/go/+/20901/9">optimize convT2I as a two-word copy when T is pointer-shaped</a>&#xFF0C;<a href="https://go-review.googlesource.com/c/go/+/20902">cmd/compile: optimize remaining convT2I calls</a>&#x3002;&#x8FD9;&#x91CC;&#x4EC5;&#x4EC5;&#x6D89;&#x53CA;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#xFF0C;&#x6240;&#x4EE5;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x6784;&#x9020;&#x51FA; *itab &#x548C; unsafe.Pointer &#x5C31;&#x591F;&#x7528;&#x4E86;&#x3002;&#x7F16;&#x8BD1;&#x5668;&#x89C9;&#x5F97;&#x6CA1;&#x6709;&#x5FC5;&#x8981;&#x8C03;&#x7528; runtime.convT2I() &#x518D;&#x6784;&#x9020;&#x51FA; iface &#x591A;&#x6B64;&#x4E00;&#x4E3E;&#x3002;</p>
<h3 id="3">3. &#x9690;&#x5F0F;&#x7C7B;&#x578B;&#x8F6C;&#x6362;</h3>
<p>&#x65E5;&#x5E38;&#x5F00;&#x53D1;&#x4E2D;&#x8981;&#x6CE8;&#x610F;&#x9690;&#x5F0F;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#xFF0C;&#x4E00;&#x4E0D;&#x5C0F;&#x5FC3;&#x4F1A;&#x5E26;&#x6765; bug&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x81EA;&#x5B9A;&#x4E49;&#x7684; error &#x7C7B;&#x578B;&#x4F1A;&#x56E0;&#x4E3A;&#x9690;&#x85CF;&#x7684;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x53D8;&#x4E3A;&#x975E; nil&#x3002;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">package main

import &quot;fmt&quot;

type GrpcError struct{}

func (e GrpcError) Error() string {
	return &quot;GrpcError&quot;
}

func main() {
	err := cal()
	fmt.Println(err)            // &#x6253;&#x5370;&#xFF1A;&lt;nil&gt;
	fmt.Println(err == nil)     // &#x6253;&#x5370;&#xFF1A;false
}

func cal() error {
	var err *GrpcError = nil
	return err
}
</code></pre>
<p>&#x9879;&#x76EE;&#x4E2D;&#x53EF;&#x80FD;&#x4F1A;&#x628A; gRPC &#x6846;&#x67B6;&#x629B;&#x51FA;&#x6765;&#x7684;&#x9519;&#x8BEF;&#x518D;&#x5C01;&#x88C5;&#x4E00;&#x5C42;&#xFF0C;&#x5C06;&#x8FD4;&#x56DE;&#x7684;&#x9519;&#x8BEF;&#x4FE1;&#x606F;&#x53EF;&#x8BFB;&#x6027;&#x53D8;&#x5F97;&#x66F4;&#x5F3A;&#x3002;&#x6B8A;&#x4E0D;&#x77E5;&#x4E00;&#x4E0D;&#x5C0F;&#x5FC3;&#x4F1A;&#x5E26;&#x6765; bug&#x3002;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x5728; main &#x4E2D;&#x5224;&#x65AD; err &#x662F;&#x5426;&#x4E3A; nil&#xFF0C;&#x7B54;&#x6848;&#x662F; false&#x3002;error &#x662F;&#x4E00;&#x4E2A;&#x975E;&#x7A7A; interface&#xFF0C;&#x5E95;&#x5C42;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x662F; iface&#xFF0C;&#x5C3D;&#x7BA1; data &#x662F; nil&#xFF0C;&#x4F46;&#x662F; *itab &#x5E76;&#x4E0D;&#x4E3A;&#x7A7A;&#xFF0C;&#x6240;&#x4EE5; err == nil &#x7B54;&#x6848;&#x4E3A; false&#x3002;</p>
<p>&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x53EF;&#x80FD;&#x5C31;&#x6709;&#x8BFB;&#x8005;&#x60F3;&#x95EE;&#xFF0C;&#x8FD9;&#x79CD;&#x9690;&#x5F0F;&#x8F6C;&#x6362;&#x6709;&#x4EC0;&#x4E48;&#x7528;&#x3002;&#x8FD9;&#x4E2A;&#x8F6C;&#x6362;&#x6070;&#x6070;&#x662F;&#x4E00;&#x4E2A;&#x7CBE;&#x5999;&#x7684;&#x8BBE;&#x8BA1;&#x3002;&#x7531;&#x672C;&#x8282;&#x524D; 2 &#x8282;&#x7684;&#x5185;&#x5BB9;&#xFF0C;&#x6211;&#x4EEC;&#x77E5;&#x9053;&#x5C06;&#x4E00;&#x4E2A;&#x5BF9;&#x8C61;&#x4F20;&#x9012;&#x7ED9; interface{} &#x7C7B;&#x578B;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x81EA;&#x52A8;&#x4F1A;&#x5C06;&#x5B83;&#x8F6C;&#x6362;&#x6210;&#x76F8;&#x5173;&#x7C7B;&#x578B;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x5982;&#x679C;&#x4E0D;&#x8FD9;&#x6837;&#x8BBE;&#x8BA1;&#xFF0C;Go &#x8BED;&#x8A00;&#x8BBE;&#x8BA1;&#x8005;&#x8FD8;&#x9700;&#x8981;&#x518D;&#x4E3A;&#x5B83;&#x5355;&#x72EC;&#x8BBE;&#x8BA1;&#x4E00;&#x5957;&#x7C7B;&#x578B;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x6765;&#x652F;&#x6301;&#x53CD;&#x5C04;&#x7279;&#x6027;&#x3002;Go &#x8BED;&#x8A00;&#x8BBE;&#x8BA1;&#x8005;&#x770B;&#x5230;&#x4E86; interface &#x7684;&#x7279;&#x70B9;&#xFF0C;&#x57FA;&#x4E8E;&#x5B83;&#x7684;&#x52A8;&#x6001;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x5B9E;&#x73B0;&#x4E86;&#x53CD;&#x5C04;&#x7279;&#x6027;&#xFF0C;&#x4E8B;&#x534A;&#x529F;&#x500D;&#x3002;</p>
<h2 id="typeassertion">&#x4E09;. &#x7C7B;&#x578B;&#x65AD;&#x8A00; Type Assertion</h2>
<p>&#x4F5C;&#x4E3A; interface &#x53E6;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x5E94;&#x7528;&#x5C31;&#x662F;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x3002;&#x9488;&#x5BF9;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x548C;&#x7A7A;&#x63A5;&#x53E3;&#xFF0C;&#x5206;&#x522B;&#x6765;&#x770B;&#x770B;&#x5E95;&#x5C42;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x662F;&#x5982;&#x4F55;&#x5904;&#x7406;&#x7684;&#x3002;</p>
<h3 id="1">1. &#x975E;&#x7A7A;&#x63A5;&#x53E3;</h3>
<p>&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var s Person = &amp;Student{name: &quot;halfrost&quot;}
	v, ok := s.(Person)
	if !ok {
		fmt.Printf(&quot;%v\n&quot;, v)
	}
}
</code></pre>
<p>&#x5229;&#x7528;&#x76F8;&#x540C;&#x7684;&#x547D;&#x4EE4;&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x3002;</p>
<pre><code class="language-go">go tool compile -S -N -l main.go &gt;main.s3 2&gt;&amp;1
</code></pre>
<p>main &#x51FD;&#x6570;&#x7B2C;&#x4E00;&#x884C;&#x751F;&#x6210; Student &#x5BF9;&#x8C61;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x5E76;&#x5C06;&#x5B83;&#x8D4B;&#x503C;&#x7ED9; Person &#x63A5;&#x53E3;&#xFF0C;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5728;&#x4E0A;&#x4E00;&#x7AE0;&#x4E2D;&#x51FA;&#x73B0;&#x591A;&#x6B21;&#xFF0C;&#x5BF9;&#x5E94;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4E5F;&#x6CA1;&#x6709;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF1A;</p>
<pre><code class="language-go">
0x002f 00047 (main.go:8)	LEAQ	type.&quot;&quot;.Student(SB), AX
0x0036 00054 (main.go:8)	MOVQ	AX, (SP)
0x003a 00058 (main.go:8)	PCDATA	$1, $0
0x003a 00058 (main.go:8)	CALL	runtime.newobject(SB)
0x003f 00063 (main.go:8)	MOVQ	8(SP), DI
0x0044 00068 (main.go:8)	MOVQ	DI, &quot;&quot;..autotmp_7+80(SP)
0x0049 00073 (main.go:8)	MOVQ	$8, 8(DI)
0x0051 00081 (main.go:8)	PCDATA	$0, $-2
0x0051 00081 (main.go:8)	CMPL	runtime.writeBarrier(SB), $0
0x0058 00088 (main.go:8)	JEQ	95
0x005a 00090 (main.go:8)	JMP	529
0x005f 00095 (main.go:8)	LEAQ	go.string.&quot;halfrost&quot;(SB), AX
0x0066 00102 (main.go:8)	MOVQ	AX, (DI)
0x0069 00105 (main.go:8)	JMP	107
0x006b 00107 (main.go:8)	PCDATA	$0, $-1
0x006b 00107 (main.go:8)	MOVQ	&quot;&quot;..autotmp_7+80(SP), AX
0x0070 00112 (main.go:8)	MOVQ	AX, &quot;&quot;..autotmp_3+88(SP)
0x0075 00117 (main.go:8)	LEAQ	go.itab.*&quot;&quot;.Student,&quot;&quot;.Person(SB), CX
0x007c 00124 (main.go:8)	MOVQ	CX, &quot;&quot;.s+120(SP)
0x0081 00129 (main.go:8)	MOVQ	AX, &quot;&quot;.s+128(SP)
</code></pre>
<p>&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x5BF9;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x5206;&#x6790;&#xFF0C;&#x8BE6;&#x7EC6;&#x7684;&#x89C1;&#x4E0A;&#x4E00;&#x7AE0;&#x3002;iface &#x7ED3;&#x6784;&#x4F53;&#x4E5F;&#x751F;&#x6210;&#x4E86;&#xFF0C;&#x5728; +120(SP) ~ +128(SP) &#x5904;&#x3002;&#x5230;&#x6B64;&#x5185;&#x5B58;&#x5E03;&#x5C40;&#x60C5;&#x51B5;&#x5982;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_8_0.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x4EE3;&#x7801;&#x662F;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x7684;&#x5173;&#x952E;&#x4EE3;&#x7801;&#x3002;&#x7531;&#x4E8E;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x8FC7;&#x957F;&#xFF0C;&#x7B14;&#x8005;&#x5C06;&#x5B83;&#x62C6;&#x6210; 2 &#x90E8;&#x5206;&#x3002;&#x7B2C;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x7684;&#x5173;&#x952E;&#x90E8;&#x5206;&#x3002;</p>
<pre><code class="language-go">
0x0089 00137 (main.go:9)	XORPS	X0, X0
0x008c 00140 (main.go:9)	MOVUPS	X0, &quot;&quot;..autotmp_4+152(SP)
0x0094 00148 (main.go:9)	MOVQ	&quot;&quot;.s+120(SP), AX
0x0099 00153 (main.go:9)	MOVQ	&quot;&quot;.s+128(SP), CX
0x00a1 00161 (main.go:9)	LEAQ	type.&quot;&quot;.Person(SB), DX
0x00a8 00168 (main.go:9)	MOVQ	DX, (SP)
0x00ac 00172 (main.go:9)	MOVQ	AX, 8(SP)
0x00b1 00177 (main.go:9)	MOVQ	CX, 16(SP)
0x00b6 00182 (main.go:9)	CALL	runtime.assertI2I2(SB)
</code></pre>
<p>&#x5728;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x4E2D;&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x4E3A;&#x4E86;&#x8C03;&#x7528; runtime.assertI2I2() &#x65B9;&#x6CD5;&#xFF0C;&#x8FDE;&#x7EED;&#x5728;&#x6808;&#x9876;&#x653E;&#x5165;&#x4E86; 3 &#x4E2A;&#x53C2;&#x6570;&#x3002;&#x5206;&#x522B;&#x662F; *interfacetype&#xFF0C;*itab &#x548C; unsafe.Pointer&#x3002;&#x5BF9;&#x5E94; runtime.assertI2I2() &#x6E90;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">func assertI2I2(inter *interfacetype, i iface) (r iface, b bool) {
	tab := i.tab
	if tab == nil {
		return
	}
	if tab.inter != inter {
		tab = getitab(inter, tab._type, true)
		if tab == nil {
			return
		}
	}
	r.tab = tab
	r.data = i.data
	b = true
	return
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x4E2D;&#x5165;&#x53C2;&#x867D;&#x7136;&#x662F; 2 &#x4E2A;&#xFF0C;&#x4F46;&#x662F; iface &#x53EF;&#x4EE5;&#x62C6;&#x6210; 2 &#x4E2A;&#xFF0C;&#x5373; *itab &#x548C; unsafe.Pointer&#x3002;&#x6240;&#x4EE5;&#x6808;&#x9876;&#x8FDE;&#x7EED;&#x7684; +0(SP)&#xFF0C;+8(SP)&#xFF0C;+16(SP) &#x6EE1;&#x8DB3;&#x4E86;&#x51FD;&#x6570;&#x5165;&#x53C2;&#x7684;&#x9700;&#x6C42;&#x3002;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5982;&#x679C; iface &#x4E2D;&#x7684; itab.inter &#x548C;&#x7B2C;&#x4E00;&#x4E2A;&#x5165;&#x53C2; *interfacetype &#x76F8;&#x540C;&#xFF0C;&#x8BF4;&#x660E;&#x7C7B;&#x578B;&#x76F8;&#x540C;&#xFF0C;&#x76F4;&#x63A5;&#x8FD4;&#x56DE;&#x5165;&#x53C2; iface &#x7684;&#x76F8;&#x540C;&#x7C7B;&#x578B;&#xFF0C;&#x5E03;&#x5C14;&#x503C;&#x4E3A; true&#xFF1B;&#x5982;&#x679C; iface &#x4E2D;&#x7684; itab.inter &#x548C;&#x7B2C;&#x4E00;&#x4E2A;&#x5165;&#x53C2; *interfacetype &#x4E0D;&#x76F8;&#x540C;&#xFF0C;&#x5219;&#x91CD;&#x65B0;&#x6839;&#x636E; *interfacetype &#x548C; iface.tab &#x53BB;&#x6784;&#x9020; tab&#x3002;&#x6784;&#x9020;&#x7684;&#x8FC7;&#x7A0B;&#x4F1A;&#x67E5;&#x627E;  itabTable&#x3002;&#x5982;&#x679C;&#x7C7B;&#x578B;&#x4E0D;&#x5339;&#x914D;&#xFF0C;&#x6216;&#x8005;&#x4E0D;&#x662F;&#x5C5E;&#x4E8E;&#x540C;&#x4E00;&#x4E2A; interface &#x7C7B;&#x578B;&#xFF0C;&#x90FD;&#x4F1A;&#x5931;&#x8D25;&#x3002;getitab() &#x65B9;&#x6CD5;&#x7B2C;&#x4E09;&#x4E2A;&#x53C2;&#x6570;&#x662F; canfail&#xFF0C;&#x8FD9;&#x91CC;&#x4F20;&#x5165;&#x4E86; true&#xFF0C;&#x8868;&#x793A;&#x6784;&#x5EFA; *itab &#x5141;&#x8BB8;&#x5931;&#x8D25;&#xFF0C;&#x5931;&#x8D25;&#x4EE5;&#x540E;&#x8FD4;&#x56DE; nil&#x3002;&#x56DE;&#x5230; runtime.assertI2I2() &#x65B9;&#x6CD5;&#x4E2D;&#xFF0C;tab &#x6784;&#x5EFA;&#x5931;&#x8D25;&#x4EE5;&#x540E;&#x4E3A; nil&#xFF0C;&#x76F4;&#x63A5; return&#xFF0C;&#x5BFC;&#x81F4;&#x5916;&#x90E8;&#x63A5;&#x6536;&#x5230;&#x7684; iface &#x662F; nil&#xFF0C;bool &#x4E5F;&#x4E3A; false&#x3002;</p>
<p>&#x7B2C;&#x4E8C;&#x90E8;&#x5206;&#x65E0;&#x975E;&#x662F;&#x8D4B;&#x503C;&#x90E8;&#x5206;&#xFF0C;&#x6CA1;&#x6709;&#x96BE;&#x5EA6;&#x3002;</p>
<pre><code class="language-go">
0x00bb 00187 (main.go:9)	MOVQ	24(SP), AX
0x00c0 00192 (main.go:9)	MOVQ	32(SP), CX
0x00c5 00197 (main.go:9)	MOVBLZX	40(SP), DX
0x00ca 00202 (main.go:9)	MOVQ	AX, &quot;&quot;..autotmp_4+152(SP)
0x00d2 00210 (main.go:9)	MOVQ	CX, &quot;&quot;..autotmp_4+160(SP)
0x00da 00218 (main.go:9)	MOVB	DL, &quot;&quot;..autotmp_5+71(SP)
0x00de 00222 (main.go:9)	MOVQ	&quot;&quot;..autotmp_4+152(SP), AX
0x00e6 00230 (main.go:9)	MOVQ	&quot;&quot;..autotmp_4+160(SP), CX
0x00ee 00238 (main.go:9)	MOVQ	AX, &quot;&quot;.v+104(SP)
0x00f3 00243 (main.go:9)	MOVQ	CX, &quot;&quot;.v+112(SP)
0x00f8 00248 (main.go:9)	MOVBLZX	&quot;&quot;..autotmp_5+71(SP), AX
0x00fd 00253 (main.go:9)	MOVB	AL, &quot;&quot;.ok+70(SP)
</code></pre>
<p>runtime.assertI2I2() &#x65B9;&#x6CD5;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#x653E;&#x5728; +24(SP)&#x3001;+32(SP)&#x3001;+40(SP) &#x4E2D;&#x3002;&#x8FD4;&#x56DE;&#x503C;&#x662F; 3 &#x4E2A;&#x503C;&#xFF0C;&#x56E0;&#x4E3A;&#x628A; iface &#x62C6;&#x6210;&#x4E86; 2 &#x4E2A;&#x503C;&#x3002;&#x6CE8;&#x610F;&#x8FD9;&#x91CC; +40(SP) &#x7528;&#x7684;&#x662F; MOVBLZX &#x547D;&#x4EE4;&#xFF0C;&#x56E0;&#x4E3A; bool &#x662F; uint8&#xFF0C;&#x4E4B;&#x540E;&#x5728;&#x79FB;&#x52A8;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;&#x4E5F;&#x53EA;&#x7528;&#x5230;&#x4E86;&#x4F4E; 8 &#x4F4D;&#xFF0C;&#x6240;&#x4EE5;&#x4E0D;&#x662F;&#x7528;&#x7684; DX &#x800C;&#x662F; DL&#x3002;&#x7ECF;&#x8FC7;&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#x7684;&#x8F6C;&#x79FB;&#xFF0C;&#x6700;&#x7EC8;&#x8FD4;&#x56DE;&#x503C;&#x653E;&#x5728;&#x4E86;&#x53D8;&#x91CF; v &#x548C; ok &#x4E2D;&#x3002;v &#x5728;&#x5185;&#x5B58;&#x91CC; +104(SP) ~ +112(SP)&#xFF0C;ok &#x5728;&#x5185;&#x5B58;&#x91CC; +70(SP)&#x3002;</p>
<p>&#x8FD9;&#x91CC;&#x518D;&#x63D0;&#x4E00;&#x70B9;&#x7684;&#x662F;&#xFF0C;&#x5982;&#x679C;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x662F;&#x4E00;&#x4E2A;&#x5177;&#x4F53;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x4F1A;&#x76F4;&#x63A5;&#x6784;&#x9020;&#x51FA; iface&#xFF0C;&#x800C;&#x4E0D;&#x4F1A;&#x8C03;&#x7528; runtime.assertI2I2() &#x6784;&#x9020; iface&#x3002;&#x4F8B;&#x5982;&#x4E0B;&#x9762;&#x7684;&#x4EE3;&#x7801;&#xFF0C;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x5904;&#x5199;&#x7684;&#x662F;&#x5177;&#x4F53;&#x7684;&#x4E00;&#x4E2A;&#x7C7B;&#x578B;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var s Person = &amp;Student{name: &quot;halfrost&quot;}
	v, ok := s.(*Student)
	if !ok {
		fmt.Printf(&quot;%v\n&quot;, v)
	}
}
</code></pre>
<p>&#x7F16;&#x8BD1;&#x5668;&#x5728;&#x5904;&#x7406;&#x8F6C;&#x6362;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x4F1A;&#x505A;&#x4F18;&#x5316;&#xFF0C;&#x4E0D;&#x4F1A;&#x518D;&#x8C03;&#x7528; runtime.assertI2I2() &#x67E5;&#x627E; itabTable&#x3002;&#x5177;&#x4F53;&#x5904;&#x7406;&#x903B;&#x8F91;&#x89C1;&#x4E0B;&#x9762;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x3002;</p>
<pre><code class="language-go">
0x0075 00117 (main.go:8)	LEAQ	go.itab.*&quot;&quot;.Student,&quot;&quot;.Person(SB), CX
0x007c 00124 (main.go:8)	MOVQ	CX, &quot;&quot;.s+104(SP)
0x0081 00129 (main.go:8)	MOVQ	AX, &quot;&quot;.s+112(SP)
0x0086 00134 (main.go:9)	MOVQ	$0, &quot;&quot;..autotmp_3+96(SP)
0x008f 00143 (main.go:9)	MOVQ	&quot;&quot;.s+112(SP), AX
0x0094 00148 (main.go:9)	LEAQ	go.itab.*&quot;&quot;.Student,&quot;&quot;.Person(SB), CX
0x009b 00155 (main.go:9)	NOP
0x00a0 00160 (main.go:9)	CMPQ	&quot;&quot;.s+104(SP), CX
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x4E2D;&#xFF0C;&#x5148;&#x6784;&#x9020;&#x51FA; iface&#xFF0C;&#x5176;&#x4E2D; *itab &#x5B58;&#x5728;&#x5185;&#x5B58; +104(SP) &#x4E2D;&#xFF0C;unsafe.Pointer &#x5B58;&#x5728; +112(SP) &#x4E2D;&#x3002;&#x7136;&#x540E;&#x5728;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x7684;&#x65F6;&#x5019;&#x53C8;&#x91CD;&#x65B0;&#x6784;&#x9020;&#x4E86;&#x4E00;&#x904D; *itab&#xFF0C;&#x6700;&#x540E;&#x5C06;&#x65B0;&#x7684; *itab &#x548C;&#x524D;&#x4E00;&#x6B21; +104(SP) &#x91CC;&#x7684; *itab &#x8FDB;&#x884C;&#x5BF9;&#x6BD4;&#x3002;</p>
<p>&#x5C0F;&#x7ED3;&#xFF1A;<strong>&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x7684;&#x5B9E;&#x8D28;&#x662F; iface &#x4E2D; *itab &#x7684;&#x5BF9;&#x6BD4;</strong>&#x3002;*itab &#x5339;&#x914D;&#x6210;&#x529F;&#x4F1A;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7EC4;&#x88C5;&#x8FD4;&#x56DE;&#x503C;&#x3002;&#x5339;&#x914D;&#x5931;&#x8D25;&#x76F4;&#x63A5;&#x6E05;&#x7A7A;&#x5BC4;&#x5B58;&#x5668;&#xFF0C;&#x8FD4;&#x56DE;&#x9ED8;&#x8BA4;&#x503C;&#x3002;</p>
<h3 id="2">2. &#x7A7A;&#x63A5;&#x53E3;</h3>
<p>&#x5728;&#x6765;&#x770B;&#x770B;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x5E95;&#x5C42;&#x662F;&#x600E;&#x4E48;&#x6837;&#x7684;&#x3002;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var s interface{} = &amp;Student{name: &quot;halfrost&quot;}
	v, ok := s.(int)
	if !ok {
		fmt.Printf(&quot;%v\n&quot;, v)
	}
}
</code></pre>
<p>&#x5229;&#x7528;&#x76F8;&#x540C;&#x7684;&#x547D;&#x4EE4;&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x3002;</p>
<pre><code class="language-go">go tool compile -S -N -l main.go &gt;main.s4 2&gt;&amp;1
</code></pre>
<p>main &#x51FD;&#x6570;&#x7B2C;&#x4E00;&#x884C;&#x751F;&#x6210; Student &#x5BF9;&#x8C61;&#x7684;&#x6307;&#x9488;&#xFF0C;&#x5E76;&#x5C06;&#x5B83;&#x8D4B;&#x503C;&#x7ED9;&#x7A7A;&#x63A5;&#x53E3;&#xFF0C;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5728;&#x4E0A;&#x4E00;&#x7AE0;&#x4E2D;&#x51FA;&#x73B0;&#x591A;&#x6B21;&#xFF0C;&#x5BF9;&#x5E94;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4E5F;&#x6CA1;&#x6709;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF1A;</p>
<pre><code class="language-go">
0x002f 00047 (main.go:8)	XORPS	X0, X0
0x0032 00050 (main.go:8)	MOVUPS	X0, &quot;&quot;..autotmp_8+136(SP)
0x003a 00058 (main.go:8)	LEAQ	&quot;&quot;..autotmp_8+136(SP), AX
0x0042 00066 (main.go:8)	MOVQ	AX, &quot;&quot;..autotmp_7+88(SP)
0x0047 00071 (main.go:8)	TESTB	AL, (AX)
0x0049 00073 (main.go:8)	MOVQ	$8, &quot;&quot;..autotmp_8+144(SP)
0x0055 00085 (main.go:8)	LEAQ	go.string.&quot;halfrost&quot;(SB), CX
0x005c 00092 (main.go:8)	MOVQ	CX, &quot;&quot;..autotmp_8+136(SP)
0x0064 00100 (main.go:8)	MOVQ	AX, &quot;&quot;..autotmp_3+96(SP)
0x0069 00105 (main.go:8)	LEAQ	type.*&quot;&quot;.Student(SB), CX
0x0070 00112 (main.go:8)	MOVQ	CX, &quot;&quot;.s+120(SP)
0x0075 00117 (main.go:8)	MOVQ	AX, &quot;&quot;.s+128(SP)
</code></pre>
<p>&#x8D4B;&#x503C;&#x7ED9;&#x7A7A;&#x63A5;&#x53E3;&#xFF0C;&#x5E76;&#x4E0D;&#x4F1A;&#x65B0;&#x5EFA;&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#xFF0C;&#x6570;&#x636E;&#x90FD;&#x5B58;&#x5728;&#x6808;&#x4E0A;&#x3002;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x6267;&#x884C;&#x5B8C;&#xFF0C;&#x5C31;&#x662F;&#x7EC4;&#x88C5;&#x4E86;&#x4E00;&#x4E2A; eface &#x5728;&#x5185;&#x5B58;&#x4E2D;&#xFF0C;&#x5185;&#x5B58;&#x5E03;&#x5C40;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_9_0.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x5728;&#x7B2C;&#x4E8C;&#x7AE0;&#x4E2D;&#xFF0C;&#x6211;&#x4EEC;&#x77E5;&#x9053; eface &#x662F;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;&#x5B83;&#x5305;&#x542B; 2 &#x4E2A;&#x5B57;&#x6BB5;&#xFF1A;</p>
<pre><code class="language-go">type eface struct {
    _type *_type
    data  unsafe.Pointer
}
</code></pre>
<p>&#x4ECE;&#x5185;&#x5B58;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x5230; eface &#x7684; *_type &#x5B58;&#x5728;&#x5185;&#x5B58;&#x7684; +120(SP) &#x5904;&#xFF0C;unsafe.Pointer &#x5B58;&#x5728;&#x4E86; +128(SP) &#x5904;&#x3002;&#x6CE8;&#x610F;&#x4E0A;&#x56FE;&#x4E2D;&#xFF0C;&#x6709;&#x591A;&#x5904;&#x7684;&#x503C;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;+88(SP)&#xFF0C;+96(SP)&#xFF0C;+128(SP)&#xFF0C;&#x8FD9; 3 &#x4E2A;&#x5730;&#x5740;&#x4E0B;&#x7684;&#x503C;&#x548C; AX &#x5BC4;&#x5B58;&#x5668;&#x4E2D;&#x5B58;&#x7684;&#x503C;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x5B58;&#x7684;&#x90FD;&#x662F; +136(SP) &#x7684;&#x5730;&#x5740;&#x503C;&#x3002;&#x518D;&#x6765;&#x770B;&#x770B;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x6C47;&#x7F16;&#x5B9E;&#x73B0;&#xFF1A;</p>
<pre><code class="language-go">
0x007d 00125 (main.go:9)	MOVQ	&quot;&quot;.s+120(SP), AX
0x0082 00130 (main.go:9)	MOVQ	&quot;&quot;.s+128(SP), CX
0x008a 00138 (main.go:9)	LEAQ	type.int(SB), DX
0x0091 00145 (main.go:9)	CMPQ	DX, AX
0x0094 00148 (main.go:9)	JEQ	155
0x0096 00150 (main.go:9)	JMP	423
</code></pre>
<p>&#x4ECE;&#x4E0A;&#x9762;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x91CC;&#x9762;&#x53EF;&#x4EE5;&#x770B;&#x51FA;&#x6765;&#xFF0C;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x5F88;&#x7B80;&#x5355;&#xFF0C;&#x5C31;&#x662F; eface &#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x5B57;&#x6BB5; *_type &#x548C;&#x8981;&#x6BD4;&#x8F83;&#x7C7B;&#x578B;&#x7684; *_type &#x8FDB;&#x884C;&#x5BF9;&#x6BD4;&#xFF0C;&#x5982;&#x679C;&#x76F8;&#x540C;&#x5C31;&#x51C6;&#x5907;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x8FD4;&#x56DE;&#x503C;&#x3002;</p>
<pre><code class="language-go">
0x009b 00155 (main.go:9)	MOVQ	(CX), AX
0x009e 00158 (main.go:9)	MOVL	$1, CX
0x00a3 00163 (main.go:9)	JMP	165
0x00a5 00165 (main.go:9)	MOVQ	AX, &quot;&quot;..autotmp_4+80(SP)
0x00aa 00170 (main.go:9)	MOVB	CL, &quot;&quot;..autotmp_5+71(SP)
0x00ae 00174 (main.go:9)	MOVQ	&quot;&quot;..autotmp_4+80(SP), AX
0x00b3 00179 (main.go:9)	MOVQ	AX, &quot;&quot;.v+72(SP)
0x00b8 00184 (main.go:9)	MOVBLZX	&quot;&quot;..autotmp_5+71(SP), AX
0x00bd 00189 (main.go:9)	MOVB	AL, &quot;&quot;.ok+70(SP)
</code></pre>
<p>&#x5982;&#x679C;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x63A8;&#x65AD;&#x6B63;&#x786E;&#xFF0C;&#x5C31;&#x51C6;&#x5907;&#x8FD4;&#x56DE;&#x503C;&#xFF0C;&#x7ECF;&#x8FC7;&#x4E2D;&#x95F4;&#x4E00;&#x4E9B;&#x4E34;&#x65F6;&#x53D8;&#x91CF;&#x7684;&#x4F20;&#x9012;&#xFF0C;&#x6700;&#x7EC8; v &#x4FDD;&#x5B58;&#x5728;&#x5185;&#x5B58;&#x4E2D; +72(SP) &#x5904;&#x3002;ok &#x4FDD;&#x5B58;&#x5728;&#x5185;&#x5B58; +70(SP) &#x5904;&#x3002;&#x6700;&#x7EC8;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x72B6;&#x6001;&#x5982;&#x4E0B;&#x6240;&#x793A;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_10_.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<pre><code class="language-go">
0x01a7 00423 (main.go:11)	XORL	AX, AX
0x01a9 00425 (main.go:11)	XORL	CX, CX
0x01ab 00427 (main.go:9)	JMP	165
0x01b0 00432 (main.go:9)	NOP
</code></pre>
<p>&#x5982;&#x679C;&#x65AD;&#x8A00;&#x5931;&#x8D25;&#xFF0C;&#x6E05;&#x7A7A; AX &#x548C; CX &#x5BC4;&#x5B58;&#x5668;&#x3002;AX &#x548C; CX &#x4E2D;&#x5B58;&#x7684;&#x662F; eface &#x7ED3;&#x6784;&#x4F53;&#x91CC;&#x9762;&#x7684; 2 &#x4E2A;&#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x5C0F;&#x7ED3;&#xFF1A;<strong>&#x7A7A;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x7684;&#x5B9E;&#x8D28;&#x662F; eface &#x4E2D; *_type &#x7684;&#x5BF9;&#x6BD4;</strong>&#x3002;*_type &#x5339;&#x914D;&#x6210;&#x529F;&#x4F1A;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x7EC4;&#x88C5;&#x8FD4;&#x56DE;&#x503C;&#x3002;&#x5339;&#x914D;&#x5931;&#x8D25;&#x76F4;&#x63A5;&#x6E05;&#x7A7A;&#x5BC4;&#x5B58;&#x5668;&#xFF0C;&#x8FD4;&#x56DE;&#x9ED8;&#x8BA4;&#x503C;&#x3002;</p>
<h2 id="typeswitches">&#x56DB;. &#x7C7B;&#x578B;&#x67E5;&#x8BE2; Type Switches</h2>
<p>&#x7C7B;&#x578B;&#x67E5;&#x8BE2;&#x4E5F;&#x662F;&#x63A5;&#x53E3;&#x8FD0;&#x7B97;&#x7684;&#x4E00;&#x79CD;&#x3002;&#x8FD9;&#x4E00;&#x8282;&#x8BE6;&#x7EC6;&#x5206;&#x6790;&#x4E00;&#x4E0B;&#x7C7B;&#x578B;&#x67E5;&#x8BE2;&#x7684;&#x5E95;&#x5C42;&#x539F;&#x7406;&#x3002;&#x9996;&#x5148;&#x9700;&#x8981;&#x89E3;&#x91CA;&#x7684;&#x4E00;&#x70B9;&#x662F;&#xFF0C;&#x7C7B;&#x578B;&#x67E5;&#x8BE2;&#x7684;&#x5BF9;&#x8C61;&#x5FC5;&#x987B;&#x662F;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#xFF0C;&#x56E0;&#x4E3A;&#x4E00;&#x4E2A;&#x5177;&#x4F53;&#x7684;&#x7C7B;&#x578B;&#x662F;&#x56FA;&#x5B9A;&#x7684;&#xFF0C;&#x58F0;&#x660E;&#x4EE5;&#x540E;&#x5C31;&#x4E0D;&#x4F1A;&#x53D8;&#x5316;&#xFF0C;&#x6240;&#x4EE5;&#x5177;&#x4F53;&#x7C7B;&#x578B;&#x7684;&#x53D8;&#x91CF;&#x90FD;&#x4E0D;&#x5B58;&#x5728;&#x7C7B;&#x578B;&#x67E5;&#x8BE2;&#x7684;&#x8FD0;&#x7B97;&#x3002;</p>
<p>&#x5148;&#x505A;&#x4E00;&#x4E2A;&#x7EA6;&#x5B9A;&#xFF0C;main &#x51FD;&#x6570;&#x7684;&#x7B2C;&#x4E00;&#x884C;&#xFF0C;&#x4E0D;&#x7BA1;&#x662F;&#x751F;&#x6210; Student &#x8FD8;&#x662F;&#x751F;&#x6210; *Student &#x5BF9;&#x672C;&#x8282;&#x90FD;&#x6CA1;&#x6709;&#x5F71;&#x54CD;&#x3002;</p>
<pre><code class="language-go">	var s Person = &amp;Student{name: &quot;halfrost&quot;}
	var s Person = Student{name: &quot;halfrost&quot;}
</code></pre>
<p>&#x4E0A;&#x9762;&#x8FD9; 2 &#x884C;&#x90FD;&#x4F1A;&#x751F;&#x6210; Person &#x8FD9;&#x6837;&#x7684; interface &#x7C7B;&#x578B;&#xFF0C;&#x751F;&#x6210;&#x8FC7;&#x7A0B;&#x4E2D;&#x7684;&#x533A;&#x522B;&#x5728;&#x7B2C;&#x4E8C;&#x7AE0;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E2D;&#x8BE6;&#x7EC6;&#x8BB2;&#x89E3;&#x4E86;&#xFF0C;&#x8FD9;&#x4E00;&#x7AE0;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;&#x672C;&#x7AE0;&#x91CD;&#x70B9;&#x8BB2;&#x89E3;&#x7684;&#x662F;&#x4E0B;&#x9762; switch-case &#x7684;&#x5185;&#x5BB9;&#x3002;</p>
<h3 id="1">1. &#x975E;&#x7A7A;&#x63A5;&#x53E3;</h3>
<p>&#x672C;&#x8282;&#x4E2D;&#x5C06;&#x4F1A;&#x7528;&#x5982;&#x4E0B;&#x7684;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x6DF1;&#x5165;&#x7814;&#x7A76;&#x3002;</p>
<pre><code class="language-go">func main() {
	var s Person = &amp;Student{name: &quot;halfrost&quot;}
	switch s.(type) {
	case Person:
		person := s.(Person)
		person.sayHello(&quot;everyone&quot;)
	case *Student:
		student := s.(*Student)
		student.sayHello(&quot;everyone&quot;)
	case Student:
		student := s.(Student)
		student.sayHello(&quot;everyone&quot;)
	}
}
</code></pre>
<p>&#x9488;&#x5BF9; Type Switches &#x8FD8;&#x6709;&#x4E00;&#x70B9;&#x9700;&#x8981;&#x8BF4;&#x660E;&#x7684;&#x3002;case &#x540E;&#x9762;&#x53EF;&#x4EE5;&#x8DDF;&#x975E;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x540D;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x8DDF;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#x540D;&#x3002;&#x5982;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#xFF0C;case &#x540E;&#x9762;&#x53EF;&#x4EE5;&#x8DDF; Person &#x8FD9;&#x4E2A;&#x63A5;&#x53E3;&#x540D;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x8DDF; Student &#x8FD9;&#x6837;&#x975E;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x540D;&#x3002;&#x63A5;&#x53E3;&#x53D8;&#x91CF;&#x548C;&#x54EA;&#x4E2A;&#x7C7B;&#x578B;&#x5148;&#x5339;&#x914D;&#x4E0A;&#x4E86;&#xFF0C;&#x5C31;&#x662F;&#x54EA;&#x4E2A;&#x7C7B;&#x578B;&#x4E86;&#x3002;&#x4F8B;&#x5982;&#x5148;&#x548C; Person &#x5339;&#x914D;&#x4E0A;&#x4E86;&#xFF0C;&#x90A3;&#x4E48; s &#x5C31;&#x662F; Person &#x7C7B;&#x578B;&#xFF0C;&#x4E0D;&#x4F1A;&#x7EE7;&#x7EED;&#x5F80;&#x4E0B;&#x5339;&#x914D;&#x4E86;&#x3002;<strong>fallthrough &#x8BED;&#x53E5;&#x4E0D;&#x80FD;&#x5728; Type Switches &#x4E2D;&#x4F7F;&#x7528;</strong>&#x3002;&#x5F3A;&#x884C;&#x4F7F;&#x7528;&#xFF0C;&#x7F16;&#x8BD1;&#x5668;&#x4F1A;&#x62A5;&#x9519;&#xFF0C;<code>fallthrough statement out of placecompiler</code>&#x3002;&#x8FD9;&#x4E5F;&#x7B26;&#x5408;&#x5E38;&#x7406;&#xFF0C;&#x4E0D;&#x4F1A;&#x6709;&#x4E00;&#x79CD;&#x7C7B;&#x578B;&#x80FD;&#x7B26;&#x5408;&#x6240;&#x6709;&#x7C7B;&#x578B;&#x3002;&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">$ go tool compile -S -N -l main.go &gt;main.s5 2&gt;&amp;1
</code></pre>
<p>&#x751F;&#x6210;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x751F;&#x6210; Person &#x7C7B;&#x578B;&#x7684;&#x4EE3;&#x7801;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#xFF0C;&#x76F4;&#x63A5;&#x4ECE; switch &#x5F00;&#x59CB;&#x5206;&#x6790;&#x3002;&#x8FD9;&#x91CC;&#x6709; 3 &#x4E2A; case&#xFF0C;&#x5C31;&#x5206; 3 &#x90E8;&#x5206;&#x5206;&#x522B;&#x5206;&#x6790;&#x3002;&#x9996;&#x5148;&#x662F;&#x7B2C;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x5339;&#x914D; Person &#x7C7B;&#x578B;&#x3002;&#x4E0B;&#x56FE;&#x662F;&#x6B64;&#x65F6;&#x5185;&#x5B58;&#x4E2D;&#x7684;&#x60C5;&#x51B5;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_11_1.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<pre><code class="language-go">
0x0086 00134 (main.go:9)	MOVQ	&quot;&quot;.s+96(SP), AX
0x008b 00139 (main.go:9)	MOVQ	&quot;&quot;.s+104(SP), CX
0x0090 00144 (main.go:9)	MOVQ	AX, &quot;&quot;..autotmp_8+128(SP)
0x0098 00152 (main.go:9)	MOVQ	CX, &quot;&quot;..autotmp_8+136(SP)
0x00a0 00160 (main.go:9)	TESTQ	AX, AX
0x00a3 00163 (main.go:9)	JNE	170
0x00a5 00165 (main.go:9)	JMP	750
0x00aa 00170 (main.go:9)	MOVL	16(AX), AX
0x00ad 00173 (main.go:9)	MOVL	AX, &quot;&quot;..autotmp_10+52(SP)
</code></pre>
<p>&#x751F;&#x6210; Person &#x7684; iface &#x5728;&#x5185;&#x5B58;&#x7684; +128(SP) ~ +136(SP) &#x4E2D;&#x3002;(16)AX &#x53D6;&#x51FA;&#x7684;&#x662F; *itab &#x4E2D;&#x7684; hash &#x503C;&#x3002;&#x7136;&#x540E;&#x5B58;&#x5165; +52(SP) &#x4E2D;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x5339;&#x914D; case Person &#x7684;&#x4EE3;&#x7801;&#x4E86;&#x3002;</p>
<pre><code class="language-go">
0x00b1 00177 (main.go:10)	MOVQ	&quot;&quot;..autotmp_8+128(SP), AX
0x00b9 00185 (main.go:10)	MOVQ	&quot;&quot;..autotmp_8+136(SP), CX
0x00c1 00193 (main.go:10)	LEAQ	type.&quot;&quot;.Person(SB), DX
0x00c8 00200 (main.go:10)	MOVQ	DX, (SP)
0x00cc 00204 (main.go:10)	MOVQ	AX, 8(SP)
0x00d1 00209 (main.go:10)	MOVQ	CX, 16(SP)
0x00d6 00214 (main.go:10)	PCDATA	$1, $1
0x00d6 00214 (main.go:10)	CALL	runtime.assertI2I2(SB)
0x00db 00219 (main.go:10)	MOVBLZX	40(SP), AX
0x00e0 00224 (main.go:10)	MOVB	AL, &quot;&quot;..autotmp_9+51(SP)
0x00e4 00228 (main.go:10)	TESTB	AL, AL
0x00e6 00230 (main.go:10)	JNE	237
0x00e8 00232 (main.go:10)	JMP	383
0x00ed 00237 (main.go:10)	PCDATA	$1, $-1
0x00ed 00237 (main.go:10)	JMP	239
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x4E3B;&#x8981;&#x662F;&#x8C03;&#x7528; runtime.assertI2I2()&#xFF0C;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x6E90;&#x7801;&#x7B2C;&#x4E09;&#x7AE0;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#x91CC;&#x9762;&#x5206;&#x6790;&#x8FC7;&#x4E86;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x9700;&#x8981; 2 &#x4E2A;&#x5165;&#x53C2;&#xFF0C;&#x5206;&#x522B;&#x662F; *interfacetype, iface&#xFF0C;DX &#x4E2D;&#x653E;&#x7684;&#x662F; type(Person) &#x7684;&#x5730;&#x5740;&#xFF0C;&#x5373; *interfacetype&#xFF0C;AX &#x548C; CX &#x5206;&#x522B;&#x5B58;&#x7684;&#x662F; *Student &#x7684; iface.*itab &#x548C; iface.unsafe.Pointer&#xFF0C;&#x5982;&#x679C;&#x5339;&#x914D;&#x4E0A;&#x4E86;&#xFF0C;&#x8FD4;&#x56DE; bool &#x653E;&#x5728; AX &#x4E2D;&#x3002;&#x5982;&#x679C;&#x4E3A; true&#xFF0C;&#x5219;&#x8868;&#x793A; TESTB &#x4E0D;&#x7B49;&#xFF0C;&#x90A3;&#x4E48;&#x6267;&#x884C; JNE 237&#x3002;&#x5982;&#x679C;&#x4E3A; false&#xFF0C;&#x4EE3;&#x8868;&#x4E0E; Person &#x5339;&#x914D;&#x5931;&#x8D25;&#xFF0C;&#x5219;&#x8868;&#x793A; TESTB &#x76F8;&#x7B49;&#xFF0C;&#x90A3;&#x4E48;&#x6267;&#x884C; JMP 383&#x3002;&#x5148;&#x770B;&#x5339;&#x914D;&#x6210;&#x529F;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5373; TESTB &#x4E0D;&#x7B49;&#xFF1A;</p>
<pre><code class="language-go">
0x00ed 00237 (main.go:10)	PCDATA	$1, $-1
0x00ed 00237 (main.go:10)	JMP	239
0x00ef 00239 (main.go:11)	XORPS	X0, X0
0x00f2 00242 (main.go:11)	MOVUPS	X0, &quot;&quot;..autotmp_5+160(SP)
0x00fa 00250 (main.go:11)	MOVQ	&quot;&quot;.s+96(SP), AX
0x00ff 00255 (main.go:11)	MOVQ	&quot;&quot;.s+104(SP), CX
0x0104 00260 (main.go:11)	LEAQ	type.&quot;&quot;.Person(SB), DX
0x010b 00267 (main.go:11)	MOVQ	DX, (SP)
0x010f 00271 (main.go:11)	MOVQ	AX, 8(SP)
0x0114 00276 (main.go:11)	MOVQ	CX, 16(SP)
0x0119 00281 (main.go:11)	PCDATA	$1, $0
0x0119 00281 (main.go:11)	CALL	runtime.assertI2I(SB)
0x011e 00286 (main.go:11)	MOVQ	24(SP), AX
0x0123 00291 (main.go:11)	MOVQ	32(SP), CX
0x0128 00296 (main.go:11)	MOVQ	AX, &quot;&quot;..autotmp_5+160(SP)
0x0130 00304 (main.go:11)	MOVQ	CX, &quot;&quot;..autotmp_5+168(SP)
0x0138 00312 (main.go:11)	MOVQ	AX, &quot;&quot;.person+112(SP)
0x013d 00317 (main.go:11)	MOVQ	CX, &quot;&quot;.person+120(SP)
</code></pre>
<p>&#x5728;&#x8C03;&#x7528; Type Switches &#x4E4B;&#x524D;&#xFF0C;&#x4ECE;&#x5185;&#x5B58;&#x56FE;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x5230; +96(SP) &#x5B58;&#x7684;&#x662F; *itab&#xFF0C;+104(SP) &#x5B58;&#x7684;&#x662F; unsafe.Pointer&#x3002;&#x5728;&#x8C03;&#x7528; runtime.assertI2I() &#x65B9;&#x6CD5;&#x4E4B;&#x524D;&#x5148;&#x628A; 3 &#x4E2A;&#x5165;&#x53C2;&#x90FD;&#x653E;&#x5728;&#x6808;&#x9876;&#x3002;(SP)&#x3001;+8(SP)&#x3001;+16(SP) &#x5206;&#x522B;&#x653E;&#x7684;&#x662F; *interfacetype&#xFF0C;*itab &#x548C; unsafe.Pointer&#x3002;runtime.assertI2I() &#x6E90;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func assertI2I(inter *interfacetype, i iface) (r iface) {
	tab := i.tab
	if tab == nil {
		// explicit conversions require non-nil interface value.
		panic(&amp;TypeAssertionError{nil, nil, &amp;inter.typ, &quot;&quot;})
	}
	if tab.inter == inter {
		r.tab = tab
		r.data = i.data
		return
	}
	r.tab = getitab(inter, tab._type, false)
	r.data = i.data
	return
}
</code></pre>
<p>assertI2I() &#x65B9;&#x6CD5;&#x6BD4; assertI2I2() &#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x503C;&#x5C11;&#x4E86;&#x4E00;&#x4E2A; bool &#x53D8;&#x91CF;&#x3002;&#x6240;&#x4EE5;&#x51FD;&#x6570;&#x540D;&#x4E5F;&#x5C11;&#x4E86;&#x4E00;&#x4E2A; 2&#x3002;assertI2I() &#x65B9;&#x6CD5;&#x6BD4; assertI2I2() &#x65B9;&#x6CD5;&#x66F4;&#x52A0;&#x5371;&#x9669;&#xFF0C;&#x56E0;&#x4E3A;&#x53EF;&#x80FD;&#x51FA;&#x73B0; panic&#x3002;&#x5982;&#x679C;&#x5339;&#x914D;&#x4E0A;&#x4E86;&#xFF0C;&#x8FD4;&#x56DE;&#x4E00;&#x4E2A; iface&#xFF0C;&#x8FD9;&#x4E2A; iface &#x548C;&#x5165;&#x53C2;&#x7684; iface &#x91CC;&#x9762;&#x7684;&#x503C;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x590D;&#x5236;&#x4E86;&#x4E00;&#x4E2A;&#x3002;&#x8FD4;&#x56DE;&#x7684; iface.*itab &#x653E;&#x5728; +112(SP) &#x4E2D;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x7684;&#x4EE3;&#x7801;&#x3002;</p>
<pre><code class="language-go">
0x0142 00322 (main.go:12)	MOVQ	&quot;&quot;.person+112(SP), AX
0x0147 00327 (main.go:12)	TESTB	AL, (AX)
0x0149 00329 (main.go:12)	MOVQ	32(AX), AX
0x014d 00333 (main.go:12)	MOVQ	&quot;&quot;.person+120(SP), CX
0x0152 00338 (main.go:12)	MOVQ	CX, (SP)
0x0156 00342 (main.go:12)	LEAQ	go.string.&quot;everyone&quot;(SB), CX
0x015d 00349 (main.go:12)	MOVQ	CX, 8(SP)
0x0162 00354 (main.go:12)	MOVQ	$8, 16(SP)
0x016b 00363 (main.go:12)	CALL	AX
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x5728;&#x7B2C;&#x4E8C;&#x7AE0;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x4E2D;&#x51FA;&#x73B0;&#x4E86;&#x591A;&#x6B21;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x4E86;&#x3002;&#x4E3B;&#x8981;&#x662F;&#x627E;&#x5230;&#x51FD;&#x6570;&#x6307;&#x9488;&#xFF0C;&#x7136;&#x540E;&#x5C06;&#x51FD;&#x6570;&#x9700;&#x8981;&#x7684;&#x5165;&#x53C2;&#x653E;&#x5728;&#x6808;&#x9876;&#xFF0C;&#x6700;&#x540E;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x5373;&#x53EF;&#x3002;&#x56DE;&#x5230; runtime.assertI2I2() &#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x4E4B;&#x540E;&#xFF0C;&#x5982;&#x679C;&#x4E3A; bool &#x4E3A; false&#xFF0C;&#x4EE3;&#x8868;&#x4E0E; Person &#x5339;&#x914D;&#x5931;&#x8D25;&#xFF0C;&#x5219;&#x8868;&#x793A; TESTB &#x76F8;&#x7B49;&#xFF0C;&#x90A3;&#x4E48;&#x6267;&#x884C; JMP 383&#x3002;</p>
<pre><code class="language-go">
0x017f 00383 (main.go:9)	CMPL	&quot;&quot;..autotmp_10+52(SP), $309932300
0x0187 00391 (main.go:10)	JEQ	398
0x0189 00393 (main.go:10)	JMP	546
</code></pre>
<p>&#x6BD4;&#x8F83; +52(SP) &#x548C; 309932300&#xFF0C;+52(SP) &#x662F;&#x4E4B;&#x524D;&#x5B58;&#x7684; hash &#x503C;&#x3002;&#x5982;&#x679C;&#x76F8;&#x7B49;&#x5219;&#x8DF3;&#x8F6C;&#x5230; 398&#x3002;309932300 &#x5BF9;&#x5E94;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x662F; 0x1279310c&#xFF0C;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x67E5;&#x627E;&#x8FD9;&#x4E2A;&#x503C;&#xFF0C;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x662F; *Student &#x7C7B;&#x578B;&#x4E2D; *itab &#x91CC;&#x9762;&#x7684;&#x7684; hash &#x503C;&#x3002;</p>
<pre><code class="language-go">go.itab.*&quot;&quot;.Student,&quot;&quot;.Person SRODATA dupok size=40
	0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0x0010 0c 31 79 12 00 00 00 00 00 00 00 00 00 00 00 00  .1y.............
	0x0020 00 00 00 00 00 00 00 00                          ........
</code></pre>
<p>&#x5982;&#x4E0A;&#x56FE;&#xFF0C;&#x5185;&#x5B58;&#x4E2D;&#x524D; 16 &#x5B57;&#x8282;&#x5206;&#x522B;&#x662F; &#xFF0C;&#x4ECE; 24 &#x5B57;&#x8282;&#x4F4E; 4 &#x4E2A;&#x5B57;&#x8282;&#x5F00;&#x59CB;&#x662F; hash &#x503C;&#xFF0C;&#x9AD8; 4 &#x4E2A;&#x5B57;&#x8282;&#x662F;&#x586B;&#x5145;&#x4F4D;&#xFF0C;&#x4E3A;&#x4E86;&#x5185;&#x5B58;&#x5BF9;&#x9F50;&#x7684;&#xFF0C;&#x8FD9;&#x91CC;&#x5168;&#x90E8;&#x586B;&#x5145;&#x4E86; 0&#x3002;&#x5982;&#x679C; hash &#x503C;&#x76F8;&#x540C;&#xFF0C;&#x4EE3;&#x8868;&#x5339;&#x914D;&#x4E0A;&#x4E86;&#xFF0C;&#x90A3;&#x4E48; JEQ 398 &#x3002;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5339;&#x914D;&#x4E0A;&#x5219; JMP	546&#x3002;&#x5148;&#x770B;&#x5339;&#x914D;&#x4E0A;&#x7684;&#x60C5;&#x51B5;&#xFF1A;</p>
<pre><code class="language-go">
0x018e 00398 (main.go:13)	LEAQ	go.itab.*&quot;&quot;.Student,&quot;&quot;.Person(SB), AX
0x0195 00405 (main.go:13)	CMPQ	&quot;&quot;..autotmp_8+128(SP), AX
0x019d 00413 (main.go:13)	JEQ	418
</code></pre>
<p>hash &#x5339;&#x914D;&#x4E0A;&#x4E86;&#x53EA;&#x662F;&#x7B2C;&#x4E00;&#x6B65;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x518D;&#x5339;&#x914D; *itab &#x662F;&#x5426;&#x76F8;&#x540C;&#x3002;hash &#x548C; *itab &#x4E24;&#x8005;&#x90FD;&#x5339;&#x914D;&#x5B8C;&#x6210;&#xFF0C;&#x624D;&#x7B97;&#x662F;&#x8D70;&#x5230;&#x4E86;&#x8FD9;&#x4E2A;&#x5BF9;&#x5E94;&#x7684; case &#x4E2D;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x662F;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x7684;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-go">
0x01b5 00437 (main.go:14)	MOVQ	&quot;&quot;.s+104(SP), AX
0x01ba 00442 (main.go:14)	MOVQ	&quot;&quot;.s+96(SP), CX
0x01bf 00447 (main.go:14)	LEAQ	go.itab.*&quot;&quot;.Student,&quot;&quot;.Person(SB), DX
0x01c6 00454 (main.go:14)	CMPQ	CX, DX
0x01c9 00457 (main.go:14)	JEQ	464
0x01cb 00459 (main.go:14)	JMP	806
0x01d0 00464 (main.go:14)	MOVQ	AX, &quot;&quot;.student+56(SP)
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x5BF9;&#x5E94;&#x7684;&#x662F; main &#x51FD;&#x6570;&#x4E2D;&#x7684;&#x7B2C; 7 &#x884C;&#x3002;</p>
<pre><code class="language-go">student := s.(*Student)
</code></pre>
<p>&#x8FD9;&#x91CC;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x8FD8;&#x505A;&#x4E86;&#x4E00;&#x6B21; *itab &#x7684;&#x5BF9;&#x6BD4;&#xFF0C;&#x5982;&#x679C;&#x4E00;&#x81F4;&#xFF0C;&#x5219;&#x63A5;&#x4E0B;&#x6765;&#x8FDB;&#x884C;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x524D;&#x7684;&#x5165;&#x53C2;&#x51C6;&#x5907;&#x5DE5;&#x4F5C;&#xFF0C;&#x628A;&#x6240;&#x6709;&#x7684;&#x5165;&#x53C2;&#x90FD;&#x653E;&#x5165;&#x6808;&#x9876;&#x3002;</p>
<pre><code class="language-go">
0x01d5 00469 (main.go:15)	TESTB	AL, (AX)
0x01d7 00471 (main.go:15)	MOVQ	(AX), CX
0x01da 00474 (main.go:15)	MOVQ	8(AX), AX
0x01de 00478 (main.go:15)	MOVQ	CX, &quot;&quot;..autotmp_11+176(SP)
0x01e6 00486 (main.go:15)	MOVQ	AX, &quot;&quot;..autotmp_11+184(SP)
0x01ee 00494 (main.go:15)	MOVQ	CX, (SP)
0x01f2 00498 (main.go:15)	MOVQ	AX, 8(SP)
0x01f7 00503 (main.go:15)	LEAQ	go.string.&quot;everyone&quot;(SB), AX
0x01fe 00510 (main.go:15)	MOVQ	AX, 16(SP)
0x0203 00515 (main.go:15)	MOVQ	$8, 24(SP)
0x020c 00524 (main.go:15)	PCDATA	$1, $0
0x020c 00524 (main.go:15)	CALL	&quot;&quot;.Student.sayHello(SB)
</code></pre>
<p>&#x7528; *Student &#x6307;&#x9488;&#x8C03;&#x7528; sayHello() &#x65B9;&#x6CD5;&#x4E00;&#x5171;&#x9700;&#x8981; 4 &#x4E2A;&#x53C2;&#x6570;&#xFF0C;&#x5206;&#x522B;&#x653E;&#x5728;&#x4E86;&#x5185;&#x5B58; (SP)&#x3001;+8(SP)&#x3001;+16(SP)&#x3001;+24(SP) &#x7684;&#x4F4D;&#x7F6E;&#x3002;&#x4F9D;&#x6B21;&#x653E;&#x7684;&#x5185;&#x5BB9;&#x662F; *(&quot;halfrost&quot;)&#x3001;8&#x3001;*(everyone)&#x3001;8 &#x3002;&#x6700;&#x540E;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x7684;&#x65F6;&#x5019;&#x4ECE;&#x6808;&#x9876;&#x53D6;&#x8D70;&#x8FD9; 4 &#x4E2A;&#x5165;&#x53C2;&#x5373;&#x5B8C;&#x6210;&#x8C03;&#x7528;&#x3002;</p>
<p>&#x56DE;&#x5230; case &#x5224;&#x65AD;&#xFF0C;&#x5982;&#x679C;&#x6CA1;&#x6709;&#x5339;&#x914D;&#x4E0A;&#xFF0C;&#x5219;&#x4F1A; JMP 546&#xFF1A;</p>
<pre><code class="language-go">
0x0222 00546 (main.go:9)	CMPL	&quot;&quot;..autotmp_10+52(SP), $-736059430
0x022a 00554 (main.go:10)	JEQ	561
</code></pre>
<p>&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x53C8;&#x662F;&#x5224;&#x65AD; hash &#x503C;&#x3002;&#x8BF4;&#x660E;&#x7B2C;&#x4E8C;&#x4E2A; case &#x6CA1;&#x6709;&#x5339;&#x914D;&#x4E0A;&#x5C31;&#x5F00;&#x59CB;&#x5339;&#x914D;&#x7B2C;&#x4E09;&#x4E2A; case&#x3002;&#x6CE8;&#x610F;&#x5230;&#x8FD9;&#x91CC;&#x6253;&#x5370;&#x51FA;&#x6765;&#x7684;&#x662F;&#x6709;&#x7B26;&#x53F7;&#x7684;&#x5341;&#x8FDB;&#x5236;&#x6570;&#xFF0C;&#x5728;&#x8BA1;&#x7B97; hash &#x7684;&#x65F6;&#x5019;&#x8981;&#x6362;&#x6210;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x3002;&#x5341;&#x8FDB;&#x5236; -736059430 &#x6362;&#x6210;&#x4E8C;&#x8FDB;&#x5236;&#x662F; 10101011110111110110000000100110&#xFF0C;&#x8D1F;&#x6570;&#x7684;&#x53CD;&#x7801;&#x662F;&#x7B26;&#x53F7;&#x4F4D;&#x4E0D;&#x53D8;&#xFF0C;&#x5176;&#x4ED6;&#x6BCF;&#x4E00;&#x4F4D;&#x53D6;&#x53CD;&#xFF0C;&#x53D6;&#x53CD;&#x5219;&#x4E3A; 11010100001000001001111111011001&#xFF0C;&#x8D1F;&#x6570;&#x7684;&#x8865;&#x7801;&#x662F;&#x53CD;&#x7801; + 1&#xFF0C;&#x5219;&#x8865;&#x7801;&#x662F; 11010100001000001001111111011010&#xFF0C;&#x8F6C;&#x6362;&#x6210; 16 &#x8FDB;&#x5236;&#x5373;&#x4E3A; 0xd4209fda&#x3002;&#x5728;&#x5185;&#x5B58;&#x4E2D;&#x641C;&#x7D22; 0xd4209fda&#xFF0C;&#x53EF;&#x4EE5;&#x627E;&#x5230;&#x4E0B;&#x9762;&#x7684;&#x5185;&#x5B58;&#x5E03;&#x5C40;&#xFF1A;</p>
<pre><code class="language-go">go.itab.&quot;&quot;.Student,&quot;&quot;.Person SRODATA dupok size=40
	0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
	0x0010 da 9f 20 d4 00 00 00 00 00 00 00 00 00 00 00 00  .. .............
	0x0020 00 00 00 00 00 00 00 00                          ........
</code></pre>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230; 0xd4209fda &#x6B63;&#x597D;&#x662F; Student &#x7C7B;&#x578B;&#x5BF9;&#x5E94; *itab &#x7684; hash &#x503C;&#x3002; &#x63A5;&#x4E0B;&#x6765;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x548C;&#x7B2C;&#x4E8C;&#x4E2A; case &#x7684;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D34;&#x51FA;&#x5B8C;&#x6574;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x3002;hash &#x503C;&#x5339;&#x914D;&#x4E0A;&#x4E86;&#x4EE5;&#x540E;&#xFF0C;&#x518D;&#x8FDB;&#x884C; *itab &#x7684;&#x5339;&#x914D;&#xFF0C;&#x4E24;&#x8005;&#x90FD;&#x5339;&#x914D;&#x6210;&#x529F;&#xFF0C;&#x4FBF;&#x4F1A;&#x8FDB;&#x5165; case &#x91CC;&#x9762;&#xFF0C;&#x8FDB;&#x884C;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#xFF0C;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x8FD8;&#x4F1A;&#x518D;&#x8FDB;&#x884C;&#x4E00;&#x6B21; *itab &#x7684;&#x5BF9;&#x6BD4;&#xFF0C;&#x5982;&#x679C;&#x5BF9;&#x6BD4;&#x76F8;&#x540C;&#xFF0C;&#x5219;&#x4F1A;&#x8FDB;&#x884C;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x524D;&#x7684;&#x53C2;&#x6570;&#x51C6;&#x5907;&#x3002;&#x5C06;&#x6240;&#x6709;&#x5165;&#x53C2;&#x653E;&#x5165;&#x6808;&#x9876;&#xFF0C;&#x6700;&#x540E;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x3002;</p>
<p>&#x5982;&#x679C;&#x4E0A;&#x9762;&#x6BCF;&#x4E2A; case &#x90FD;&#x5339;&#x914D;&#x5931;&#x8D25;&#x4E86;&#xFF0C;&#x4F1A; JMP 367&#xFF0C;&#x9000;&#x51FA; Type Switches&#x3002;</p>
<pre><code class="language-go">
0x016f 00367 (main.go:9)	PCDATA	$1, $-1
0x016f 00367 (main.go:9)	MOVQ	192(SP), BP
0x0177 00375 (main.go:9)	ADDQ	$200, SP
0x017e 00382 (main.go:9)	RET
</code></pre>
<p>&#x9000;&#x51FA;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x6CA1;&#x6709;&#x4EC0;&#x4E48;&#x5904;&#x7406;&#x903B;&#x8F91;&#xFF0C;&#x5C31;&#x662F;&#x6E05;&#x7406;&#x73B0;&#x573A;&#xFF0C;&#x8FD4;&#x56DE;&#x3002;&#x5C0F;&#x7ED3;&#xFF1A;</p>
<ul>
<li>Type Switches case &#x5982;&#x679C;&#x8DDF;&#x7684;&#x662F;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x540D;&#xFF0C;&#x5219;&#x4F1A;&#x8C03;&#x7528; runtime.assertI2I2() &#x5224;&#x65AD; case &#x662F;&#x5426;&#x5339;&#x914D;&#xFF0C;&#x5982;&#x679C;&#x5339;&#x914D;&#x6210;&#x529F;&#xFF0C;&#x8FDB;&#x5165; case &#x5185;&#x90E8;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x4F1A;&#x518D;&#x8C03;&#x7528; runtime.assertI2I() &#x62FF;&#x5230; iface&#x3002;</li>
<li>Type Switches case &#x5982;&#x679C;&#x8DDF;&#x7684;&#x662F;&#x975E;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x540D;&#xFF0C;&#x5219;&#x5148;&#x6839;&#x636E; hash &#x503C;&#x5339;&#x914D;&#x7C7B;&#x578B;&#xFF0C;hash &#x5339;&#x914D;&#x6210;&#x529F;&#x518D;&#x5339;&#x914D; *itab&#xFF0C;&#x4E24;&#x4E2A;&#x90FD;&#x5339;&#x914D;&#x6210;&#x529F;&#x624D;&#x80FD;&#x8FDB;&#x5165; case &#x5185;&#x90E8;&#x3002;&#x8FDB;&#x5165;&#x4EE5;&#x540E;&#x7684;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x8FD8;&#x4F1A;&#x518D;&#x5224;&#x65AD;&#x4E00;&#x6B21; *itab &#x662F;&#x5426;&#x4E00;&#x81F4;&#x3002;</li>
</ul>
<h3 id="2">2. &#x7A7A;&#x63A5;&#x53E3;</h3>
<p>&#x518D;&#x6765;&#x770B;&#x770B;&#x7A7A;&#x63A5;&#x53E3;&#x3002;&#x672C;&#x8282;&#x4E2D;&#x5C06;&#x4F1A;&#x7528;&#x5982;&#x4E0B;&#x7684;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x6DF1;&#x5165;&#x7814;&#x7A76;&#x3002;</p>
<pre><code class="language-go">func main() {
	var s interface{} = &amp;Student{name: &quot;halfrost&quot;}
	switch s.(type) {
	case Person:
		person := s.(Person)
		person.sayHello(&quot;everyone&quot;)
	case *Student:
		student := s.(*Student)
		student.sayHello(&quot;everyone&quot;)
	case Student:
		student := s.(Student)
		student.sayHello(&quot;everyone&quot;)
	}
}
</code></pre>
<p>&#x7528;&#x76F8;&#x540C;&#x7684;&#x547D;&#x4EE4;&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">$ go tool compile -S -N -l main.go &gt;main.s6 2&gt;&amp;1
</code></pre>
<p>&#x7531;&#x4E8E;&#x6709;&#x5927;&#x91CF;&#x903B;&#x8F91;&#x548C;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;&#x6240;&#x4EE5;&#x8FD9;&#x91CC;&#x91CD;&#x70B9;&#x5206;&#x6790;&#x4E0D;&#x540C;&#x7684;&#x5730;&#x65B9;&#x3002;main &#x51FD;&#x6570;&#x7B2C;&#x4E00;&#x884C;&#x751F;&#x6210; Student &#x7684;&#x6307;&#x9488;&#x5E76;&#x4E14;&#x7C7B;&#x578B;&#x8F6C;&#x6362;&#x6210; interface{} &#x7C7B;&#x578B;&#xFF0C;&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x5728;&#x7B2C;&#x4E8C;&#x7AE0;&#x4E2D;&#x51FA;&#x73B0;&#x4E86;&#xFF0C;&#x8FD9;&#x91CC;&#x4E0D;&#x518D;&#x8D58;&#x8FF0;&#x3002;&#x5148;&#x6765;&#x770B; main &#x51FD;&#x6570;&#x7B2C;&#x4E8C;&#x884C;&#xFF1A;</p>
<pre><code class="language-go">
0x00b1 00177 (main.go:10)	MOVQ	&quot;&quot;..autotmp_8+128(SP), AX
0x00b9 00185 (main.go:10)	MOVQ	&quot;&quot;..autotmp_8+136(SP), CX
0x00c1 00193 (main.go:10)	LEAQ	type.&quot;&quot;.Person(SB), DX
0x00c8 00200 (main.go:10)	MOVQ	DX, (SP)
0x00cc 00204 (main.go:10)	MOVQ	AX, 8(SP)
0x00d1 00209 (main.go:10)	MOVQ	CX, 16(SP)
0x00d6 00214 (main.go:10)	PCDATA	$1, $1
0x00d6 00214 (main.go:10)	CALL	runtime.assertE2I2(SB)
</code></pre>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4E0A;&#x8FF0;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x548C;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x903B;&#x8F91;&#x57FA;&#x672C;&#x4E00;&#x81F4;&#xFF0C;&#x53EA;&#x662F;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#x4E0D;&#x540C;&#x3002;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x8C03;&#x7528;&#x7684;&#x662F; runtime.assertI2I2()&#xFF0C;&#x800C;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x8FD9;&#x91CC;&#x8C03;&#x7528;&#x7684;&#x662F; runtime.assertE2I2()&#x3002;&#x5B83;&#x7684;&#x6E90;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">func assertE2I2(inter *interfacetype, e eface) (r iface, b bool) {
	t := e._type
	if t == nil {
		return
	}
	tab := getitab(inter, t, true)
	if tab == nil {
		return
	}
	r.tab = tab
	r.data = e.data
	b = true
	return
}
</code></pre>
<p>&#x8FD9;&#x6BB5;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x548C; assertI2I2() &#x5927;&#x4F53;&#x4E00;&#x81F4;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x8FD9;&#x91CC;&#x662F;&#x628A; eface &#x8F6C;&#x6362;&#x6210; iface&#x3002;&#x901A;&#x8FC7;&#x8C03;&#x7528; getitab() &#x65B9;&#x6CD5;&#xFF0C;&#x628A; eface &#x4E2D;&#x7684; _type &#x7EC4;&#x88C5;&#x6210; *itab&#xFF0C;&#x518D;&#x62FC;&#x4E0A; eface &#x7684; data&#xFF0C;&#x5373;&#x6784;&#x6210;&#x4E86; iface &#x4E86;&#x3002;&#x6210;&#x529F;&#x5339;&#x914D;&#x8FDB;&#x5165; case &#x4EE5;&#x540E;&#xFF0C;&#x8FDB;&#x884C;&#x7C7B;&#x578B;&#x63A8;&#x65AD;&#xFF1A;</p>
<pre><code class="language-go">
0x00fa 00250 (main.go:11)	MOVQ	&quot;&quot;.s+96(SP), AX
0x00ff 00255 (main.go:11)	MOVQ	&quot;&quot;.s+104(SP), CX
0x0104 00260 (main.go:11)	LEAQ	type.&quot;&quot;.Person(SB), DX
0x010b 00267 (main.go:11)	MOVQ	DX, (SP)
0x010f 00271 (main.go:11)	MOVQ	AX, 8(SP)
0x0114 00276 (main.go:11)	MOVQ	CX, 16(SP)
0x0119 00281 (main.go:11)	PCDATA	$1, $0
0x0119 00281 (main.go:11)	CALL	runtime.assertE2I(SB)
</code></pre>
<p>&#x6B64;&#x5904;&#x4EE3;&#x7801;&#x903B;&#x8F91;&#x548C;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x4E5F;&#x662F;&#x4E00;&#x81F4;&#x7684;&#xFF0C;&#x53EA;&#x662F;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#x4E0D;&#x540C;&#x3002;&#x8FD9;&#x91CC;&#x8C03;&#x7528;&#x7684;&#x662F; runtime.assertE2I() &#x65B9;&#x6CD5;&#xFF1A;</p>
<pre><code class="language-go">func assertE2I(inter *interfacetype, e eface) (r iface) {
	t := e._type
	if t == nil {
		// explicit conversions require non-nil interface value.
		panic(&amp;TypeAssertionError{nil, nil, &amp;inter.typ, &quot;&quot;})
	}
	r.tab = getitab(inter, t, false)
	r.data = e.data
	return
}
</code></pre>
<p>runtime.assertE2I() &#x540C; runtime.assertI2I() &#x4E00;&#x6837;&#x90FD;&#x662F;&#x201C;&#x5371;&#x9669;&#x201D;&#x65B9;&#x6CD5;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x53D1;&#x751F; panic&#x3002;&#x65B9;&#x6CD5;&#x8FD4;&#x56DE; iface&#x3002;&#x518D;&#x5F80;&#x4E0B;&#x5C31;&#x662F;&#x8C03;&#x7528; sayHello() &#x65B9;&#x6CD5;&#xFF0C;&#x903B;&#x8F91;&#x548C;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#xFF0C;&#x5269;&#x4E0B;&#x7684; 2 &#x4E2A; case &#x5339;&#x914D;&#x8FC7;&#x7A0B;&#x4E5F;&#x548C;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#xFF0C;&#x8FD9;&#x91CC;&#x5C31;&#x4E0D;&#x5206;&#x6790;&#x4E86;&#x3002;</p>
<p>&#x503C;&#x5F97;&#x4E00;&#x63D0;&#x7684;&#x662F;&#xFF0C;&#x5728;&#x5339;&#x914D;&#x975E;&#x63A5;&#x53E3;&#x7C7B;&#x578B;&#x7684; hash &#x503C;&#x65F6;&#xFF0C;hash &#x503C;&#x53EA;&#x548C;&#x5B57;&#x6BB5;&#x548C;&#x65B9;&#x6CD5;&#x6709;&#x5173;&#xFF0C;&#x548C;&#x5B57;&#x6BB5;&#x5185;&#x5177;&#x4F53;&#x7684;&#x503C;&#x65E0;&#x5173;&#x3002;&#x4E5F;&#x5C31;&#x662F;&#x8BF4;&#x975E;&#x7A7A;&#x63A5;&#x53E3;&#x548C;&#x7A7A;&#x63A5;&#x53E3;&#x8FD9; 2 &#x6B21;&#x5339;&#x914D; *Student &#x548C; Student &#x7C7B;&#x578B; hash &#x503C;&#xFF0C;&#x90FD;&#x662F;&#x4E00;&#x6837;&#x7684;&#xFF0C;0x1279310c &#x548C; 0xd4209fda&#x3002;&#x8FD9;&#x662F;&#x7B26;&#x5408;&#x5E38;&#x7406;&#x7684;&#xFF0C;&#x5BF9;&#x8C61;&#x5B58;&#x50A8;&#x7684;&#x5B57;&#x6BB5;&#x503C;&#x4E0D;&#x540C;&#xFF0C;&#x5E76;&#x4E0D;&#x6539;&#x53D8;&#x5BF9;&#x8C61;&#x7684;&#x7C7B;&#x578B;&#xFF0C;&#x53EA;&#x8981;&#x7C7B;&#x578B;&#x5B8C;&#x5168;&#x4E00;&#x81F4;&#xFF0C;hash &#x503C;&#x5C31;&#x76F8;&#x540C;&#x3002;&#x5C0F;&#x7ED3;&#xFF1A;</p>
<ul>
<li>Type Switches case &#x5982;&#x679C;&#x8DDF;&#x7684;&#x662F;&#x7A7A;&#x63A5;&#x53E3;&#x7684;&#x7C7B;&#x578B;&#x540D;&#xFF0C;&#x5219;&#x4F1A;&#x8C03;&#x7528; runtime.assertE2I2() &#x5224;&#x65AD; case &#x662F;&#x5426;&#x5339;&#x914D;&#xFF0C;&#x5982;&#x679C;&#x5339;&#x914D;&#x6210;&#x529F;&#xFF0C;&#x8FDB;&#x5165; case &#x5185;&#x90E8;&#x7C7B;&#x578B;&#x65AD;&#x8A00;&#x4F1A;&#x518D;&#x8C03;&#x7528; runtime.assertE2I() &#x62FF;&#x5230; iface&#x3002;</li>
</ul>
<h2 id>&#x4E94;. &#x52A8;&#x6001;&#x6D3E;&#x53D1;</h2>
<p>&#x867D;&#x7136; Go &#x5E76;&#x4E0D;&#x662F;&#x4E25;&#x683C;&#x610F;&#x4E49;&#x7684;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x8BED;&#x8A00;&#xFF0C;&#x4F46;&#x662F; Go &#x4E2D; interface &#x53EF;&#x4EE5;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x65B9;&#x6CD5;&#xFF0C;&#x5B9E;&#x73B0;&#x7C7B;&#x4F3C;&#x9762;&#x5411;&#x5BF9;&#x8C61;&#x8BED;&#x8A00;&#x4E2D;&#x7684;&#x591A;&#x6001;&#x7684;&#x7279;&#x6027;&#x3002;</p>
<p>&#x591A;&#x6001;&#x662F;&#x4E00;&#x79CD;&#x8FD0;&#x884C;&#x671F;&#x7684;&#x884C;&#x4E3A;&#xFF0C;&#x5B83;&#x6709;&#x4EE5;&#x4E0B;&#x51E0;&#x4E2A;&#x7279;&#x70B9;&#xFF1A;</p>
<ul>
<li>&#x4E00;&#x79CD;&#x7C7B;&#x578B;&#x5177;&#x6709;&#x591A;&#x79CD;&#x7C7B;&#x578B;&#x7684;&#x80FD;&#x529B;</li>
<li>&#x5141;&#x8BB8;&#x4E0D;&#x540C;&#x7684;&#x5BF9;&#x8C61;&#x5BF9;&#x540C;&#x4E00;&#x6D88;&#x606F;&#x505A;&#x51FA;&#x7075;&#x6D3B;&#x7684;&#x53CD;&#x5E94;</li>
<li>&#x4EE5;&#x4E00;&#x79CD;&#x901A;&#x7528;&#x7684;&#x65B9;&#x5F0F;&#x5BF9;&#x5F85;&#x4E2A;&#x4F7F;&#x7528;&#x7684;&#x5BF9;&#x8C61;</li>
<li>&#x975E;&#x52A8;&#x6001;&#x8BED;&#x8A00;&#x5FC5;&#x987B;&#x901A;&#x8FC7;&#x7EE7;&#x627F;&#x548C;&#x63A5;&#x53E3;&#x7684;&#x65B9;&#x5F0F;&#x6765;&#x5B9E;&#x73B0;</li>
</ul>
<p>&#x672C;&#x8282;&#x4E2D;&#x7684;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x5728;&#x524D;&#x51E0;&#x7AE0;&#x5DF2;&#x7ECF;&#x51FA;&#x73B0;&#x8FC7;&#xFF0C;&#x53EA;&#x662F;&#x4E3A;&#x5355;&#x72EC;&#x6311;&#x51FA;&#x6765;&#x63D0;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x7684;&#x6982;&#x5FF5;&#x3002;</p>
<pre><code class="language-go">func main() {
	var s Person = &amp;Student{name: &quot;halfrost&quot;}
	s.sayHello(&quot;everyone&quot;)
}
</code></pre>
<p>&#x5C06;&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x8F6C;&#x6362;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4EE5;&#x540E;&#xFF0C;&#x6839;&#x636E;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x753B;&#x51FA;&#x5185;&#x5B58;&#x5E03;&#x5C40;&#x56FE;&#xFF0C;&#x5982;&#x4E0B;&#x56FE;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/147_4_1.png" alt="&#x6DF1;&#x5165;&#x7814;&#x7A76; Go interface &#x5E95;&#x5C42;&#x5B9E;&#x73B0;" loading="lazy"></p>
<p>&#x627E;&#x5230;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x7684;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">
0x0075 00117 (main.go:7)    MOVQ    &quot;&quot;.s+56(SP), AX
0x007a 00122 (main.go:7)    TESTB   AL, (AX)
0x007c 00124 (main.go:7)    MOVQ    32(AX), AX
0x0080 00128 (main.go:7)    MOVQ    &quot;&quot;.s+64(SP), CX
0x0085 00133 (main.go:7)    MOVQ    CX, (SP)
0x0089 00137 (main.go:7)    LEAQ    go.string.&quot;everyone&quot;(SB), CX
0x0090 00144 (main.go:7)    MOVQ    CX, 8(SP)
0x0095 00149 (main.go:7)    MOVQ    $8, 16(SP)
0x00a0 00160 (main.go:7)    CALL    AX
</code></pre>
<p>&#x5728;&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x4E3A;&#x4E86;&#x8C03;&#x7528;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;AX &#x5BC4;&#x5B58;&#x5668;&#x6839;&#x636E; *itab &#x91CC;&#x9762;&#x5B58;&#x7684; func &#x6307;&#x9488;&#xFF0C;&#x505A;&#x4E86;&#x4E00;&#x6B21;&#x5BFB;&#x5740;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;32(AX) &#x627E;&#x5230;&#x4E86;&#x8981;&#x6D3E;&#x53D1;&#x7684;&#x65B9;&#x6CD5;&#x7684;&#x5730;&#x5740;&#x3002;&#x7136;&#x540E;&#x5C06;&#x65B9;&#x6CD5;&#x9700;&#x8981;&#x7684;&#x5165;&#x53C2;&#x90FD;&#x653E;&#x5165;&#x6808;&#x9876;&#x3002;&#x5982;&#x679C;&#x6B64;&#x5904;&#x4E0D;&#x505A;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#xFF0C;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4F1A;&#x6709;&#x4EC0;&#x4E48;&#x4E0D;&#x540C;&#x7684;&#x5904;&#x7406;&#x903B;&#x8F91;&#x5462;&#xFF1F;&#x628A;&#x4EE3;&#x7801;&#x6539;&#x6210;&#x4E0B;&#x9762;&#x8FD9;&#x6837;&#xFF1A;</p>
<pre><code class="language-go">func main() {
	var s *Student = &amp;Student{name: &quot;halfrost&quot;}
	s.sayHello(&quot;everyone&quot;)
}
</code></pre>
<p>&#x8F6C;&#x6210;&#x6C47;&#x7F16;&#x4EE3;&#x7801;&#x4EE5;&#x540E;&#x53D6;&#x51FA;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x90A3;&#x4E00;&#x884C;&#x7684;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">
0x004b 00075 (main.go:20)	MOVQ	AX, (SP)
0x004f 00079 (main.go:20)	LEAQ	go.string.&quot;everyone&quot;(SB), AX
0x0056 00086 (main.go:20)	MOVQ	AX, 8(SP)
0x005b 00091 (main.go:20)	MOVQ	$8, 16(SP)
0x0064 00100 (main.go:20)	PCDATA	$1, $0
0x0064 00100 (main.go:20)	CALL	&quot;&quot;.(*Student).sayHello(SB)
</code></pre>
<p>&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x4EE3;&#x7801;&#x5C11;&#x4E86;&#x65B9;&#x6CD5;&#x5BFB;&#x5740;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x8FD9;&#x91CC;&#x76F4;&#x63A5;&#x5C06;&#x5165;&#x53C2;&#x653E;&#x5165;&#x6808;&#x9876;&#xFF0C;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x3002;</p>
<p>&#x603B;&#x7ED3;&#xFF1A;fun &#x6307;&#x9488;&#x4FDD;&#x5B58;&#x7684;&#x662F;&#x5B9E;&#x4F53;&#x7C7B;&#x578B;&#x5B9E;&#x73B0;&#x7684;&#x51FD;&#x6570;&#x5217;&#x8868;&#x9996;&#x5730;&#x5740;&#xFF0C;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5BFB;&#x5740;&#x627E;&#x5230;&#x8981;&#x8C03;&#x7528;&#x7684;&#x65B9;&#x6CD5;&#x3002;&#x5F53;&#x51FD;&#x6570;&#x4F20;&#x5165;&#x4E0D;&#x540C;&#x7684;&#x5B9E;&#x4F53;&#x7C7B;&#x578B;&#x65F6;&#xFF0C;&#x8C03;&#x7528;&#x7684;&#x5B9E;&#x9645;&#x4E0A;&#x662F;&#x4E0D;&#x540C;&#x7684;&#x51FD;&#x6570;&#x5B9E;&#x73B0;&#xFF0C;&#x4ECE;&#x800C;&#x5B9E;&#x73B0;&#x591A;&#x6001;&#x3002;</p>
<p>&#x5173;&#x4E8E;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5176;&#x5B9E;&#x6709; 2 &#x90E8;&#x5206;&#x7684;&#x6027;&#x80FD;&#x635F;&#x5931;&#xFF0C;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x4E0A;&#x9762;&#x63D0;&#x5230;&#x7684;&#xFF0C;&#x52A8;&#x6001;&#x8C03;&#x7528;&#x65B9;&#x6CD5;&#x3002;&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x6307;&#x9488;&#x7684;&#x95F4;&#x63A5;&#x8C03;&#x7528;&#xFF0C;&#x8FD8;&#x8981;&#x7ECF;&#x8FC7;&#x5730;&#x5740;&#x504F;&#x79FB;&#x52A8;&#x6001;&#x8BA1;&#x7B97;&#x4EE5;&#x540E;&#x7684;&#x8DF3;&#x8F6C;&#x3002;&#x8FD8;&#x6709;&#x4E00;&#x90E8;&#x5206;&#x662F;&#x6784;&#x9020; iface &#x7684;&#x8FC7;&#x7A0B;&#x3002;&#x5728;&#x7B2C;&#x4E00;&#x79CD;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x7684;&#x4EE3;&#x7801;&#x4E2D;&#xFF0C;&#x5185;&#x5B58;&#x4E2D;&#x6784;&#x9020;&#x4E86;&#x4E00;&#x4E2A;&#x5B8C;&#x6574;&#x7684; iface&#x3002;&#x800C;&#x5728;&#x7B2C;&#x4E8C;&#x79CD;&#x76F4;&#x63A5;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x7684;&#x4EE3;&#x7801;&#x4E2D;&#xFF0C;&#x5E76;&#x6CA1;&#x6709;&#x6784;&#x9020; iface&#xFF0C;&#x76F4;&#x63A5;&#x628A;&#x5165;&#x53C2;&#x653E;&#x5165;&#x6808;&#x9876;&#xFF0C;&#x76F4;&#x63A5;&#x8C03;&#x7528;&#x90A3;&#x4E2A;&#x65B9;&#x6CD5;&#x3002;&#x9488;&#x5BF9;&#x8FD9; 2 &#x90E8;&#x5206;&#x7684;&#x6027;&#x80FD;&#x635F;&#x5931;&#xFF0C;&#x53EF;&#x80FD;&#x6709;&#x8BFB;&#x8005;&#x4F1A;&#x62C5;&#x5FC3;&#x635F;&#x8017;&#x5F88;&#x5927;&#x3002;&#x5728; Github &#x4E0A;&#x6709;&#x4E0D;&#x5C11;&#x4EBA;&#x516C;&#x5E03;&#x4E86;&#x5173;&#x4E8E;&#x8FD9;&#x91CC;&#x7684;&#x6027;&#x80FD;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x3002;&#x7B14;&#x8005;&#x4E0D;&#x8D34;&#x5B8C;&#x6574;&#x6D4B;&#x8BD5;&#x4EE3;&#x7801;&#x4E86;&#x3002;&#x76F4;&#x63A5;&#x8BF4;&#x7ED3;&#x8BBA;&#xFF1A;</p>
<ul>
<li>&#x6307;&#x9488;&#x5B9E;&#x73B0;&#x7684;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x9020;&#x6210;&#x7684;&#x6027;&#x80FD;&#x635F;&#x5931;&#x975E;&#x5E38;&#x5C0F;&#xFF0C;&#x76F8;&#x5BF9;&#x4E8E;&#x4E00;&#x4E9B;&#x590D;&#x6742;&#x903B;&#x8F91;&#x7684;&#x5904;&#x7406;&#x51FD;&#x6570;&#xFF0C;&#x8FD9;&#x70B9;&#x6027;&#x80FD;&#x635F;&#x5931;&#x51E0;&#x4E4E;&#x53EF;&#x4EE5;&#x5FFD;&#x7565;&#x4E0D;&#x8BA1;&#x3002;</li>
<li>&#x7ED3;&#x6784;&#x4F53;&#x5B9E;&#x73B0;&#x7684;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x6027;&#x80FD;&#x635F;&#x8017;&#x6BD4;&#x8F83;&#x5927;&#x3002;&#x7ED3;&#x6784;&#x4F53;&#x5728;&#x65B9;&#x6CD5;&#x8C03;&#x7528;&#x7684;&#x65F6;&#x5019;&#x9700;&#x8981;&#x4F20;&#x503C;&#xFF0C;&#x62F7;&#x8D1D;&#x53C2;&#x6570;&#xFF0C;&#x8FD9;&#x91CC;&#x5BFC;&#x81F4;&#x6027;&#x80FD;&#x635F;&#x5931;&#x6BD4;&#x8F83;&#x5927;&#x3002;</li>
</ul>
<p>&#x6240;&#x4EE5;&#x5728;&#x5F00;&#x53D1;&#x4E2D;&#xFF0C;&#x6240;&#x6709;&#x52A8;&#x6001;&#x6D3E;&#x53D1;&#x7684;&#x4EE3;&#x7801;&#x7528;&#x6307;&#x9488;&#x6765;&#x5B9E;&#x73B0;&#x3002;</p>
<p>&#x81F3;&#x6B64;&#xFF0C;&#x6240;&#x6709;&#x5173;&#x4E8E; interface &#x5E95;&#x5C42;&#x539F;&#x7406;&#x7684;&#x90E8;&#x5206;&#x90FD;&#x8BB2;&#x89E3;&#x5B8C;&#x4E86;&#x3002;interface &#x7684;&#x5E94;&#x7528;&#x5C06;&#x653E;&#x5728;&#x53CD;&#x5C04;&#x7684;&#x6587;&#x7AE0;&#x91CC;&#x9762;&#x8BB2;&#x89E3;&#x3002;</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[聊聊树状数组 Binary Indexed Tree]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6216;&#x4E8C;&#x53C9;&#x7D22;&#x5F15;&#x6811;&#xFF08;Binary Indexed Tree&#xFF09;&#xFF0C;&#x53C8;&#x4EE5;&#x5176;&#x53D1;&#x660E;&#x8005;&#x547D;&#x540D;&#x4E3A; Fenwick &#x6811;&#xFF0C;&#x6700;&#x65E9;&#x7531; Peter M. Fenwick &#x4E8E; 1994 &#x5E74;&#x4EE5; A New Data Structure for Cumulative Frequency Tables &#x4E3A;&#x9898;&#x53D1;&#x8868;</p>]]></description><link>https://halfrost.com/binary_indexed_tree/</link><guid isPermaLink="false">634360bbd892dc307476ccee</guid><category><![CDATA[Algorithm]]></category><category><![CDATA[Binary Indexed Tree]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sat, 14 Sep 2019 17:22:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/04/Blog-99.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/04/Blog-99.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree"><p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6216;&#x4E8C;&#x53C9;&#x7D22;&#x5F15;&#x6811;&#xFF08;Binary Indexed Tree&#xFF09;&#xFF0C;&#x53C8;&#x4EE5;&#x5176;&#x53D1;&#x660E;&#x8005;&#x547D;&#x540D;&#x4E3A; Fenwick &#x6811;&#xFF0C;&#x6700;&#x65E9;&#x7531; Peter M. Fenwick &#x4E8E; 1994 &#x5E74;&#x4EE5; A New Data Structure for Cumulative Frequency Tables &#x4E3A;&#x9898;&#x53D1;&#x8868;&#x5728; SOFTWARE PRACTICE AND EXPERIENCE &#x4E0A;&#x3002;&#x5176;&#x521D;&#x8877;&#x662F;&#x89E3;&#x51B3;&#x6570;&#x636E;&#x538B;&#x7F29;&#x91CC;&#x7684;&#x7D2F;&#x79EF;&#x9891;&#x7387;&#xFF08;Cumulative Frequency&#xFF09;&#x7684;&#x8BA1;&#x7B97;&#x95EE;&#x9898;&#xFF0C;&#x73B0;&#x591A;&#x7528;&#x4E8E;&#x9AD8;&#x6548;&#x8BA1;&#x7B97;&#x6570;&#x5217;&#x7684;&#x524D;&#x7F00;&#x548C;&#xFF0C;&#x533A;&#x95F4;&#x548C;&#x3002;&#x9488;&#x5BF9;&#x533A;&#x95F4;&#x95EE;&#x9898;&#xFF0C;&#x9664;&#x4E86;&#x5E38;&#x89C1;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#x89E3;&#x6CD5;&#xFF0C;&#x8FD8;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x3002;&#x5B83;&#x53EF;&#x4EE5;&#x4EE5; O(log n) &#x7684;&#x65F6;&#x95F4;&#x5F97;&#x5230;&#x4EFB;&#x610F;&#x524D;&#x7F00;&#x548C; $ \sum_{i=1}^{j}A[i],1&lt;=j&lt;=N  $&#xFF0C;&#x5E76;&#x540C;&#x65F6;&#x652F;&#x6301;&#x5728; O(log n)&#x65F6;&#x95F4;&#x5185;&#x652F;&#x6301;&#x52A8;&#x6001;&#x5355;&#x70B9;&#x503C;&#x7684;&#x4FEE;&#x6539;(&#x589E;&#x52A0;&#x6216;&#x8005;&#x51CF;&#x5C11;)&#x3002;&#x7A7A;&#x95F4;&#x590D;&#x6742;&#x5EA6; O(n)&#x3002;</p>
<blockquote>
<p>&#x5229;&#x7528;&#x6570;&#x7EC4;&#x5B9E;&#x73B0;&#x524D;&#x7F00;&#x548C;&#xFF0C;&#x67E5;&#x8BE2;&#x672C;&#x6765;&#x662F; O(1)&#xFF0C;&#x4F46;&#x662F;&#x5BF9;&#x4E8E;&#x9891;&#x7E41;&#x66F4;&#x65B0;&#x7684;&#x6570;&#x7EC4;&#xFF0C;&#x6BCF;&#x6B21;&#x91CD;&#x65B0;&#x8BA1;&#x7B97;&#x524D;&#x7F00;&#x548C;&#xFF0C;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6; O(n)&#x3002;&#x6B64;&#x65F6;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x4F18;&#x52BF;&#x4FBF;&#x7ACB;&#x5373;&#x663E;&#x73B0;&#x3002;</p>
</blockquote>
<h2 id="%E4%B8%80-%E4%B8%80%E7%BB%B4%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84%E6%A6%82%E5%BF%B5">&#x4E00;. &#x4E00;&#x7EF4;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6982;&#x5FF5;</h2>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/152_0.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree" loading="lazy"></p>
<p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x540D;&#x5B57;&#x867D;&#x7136;&#x53C8;&#x6709;&#x6811;&#xFF0C;&#x53C8;&#x6709;&#x6570;&#x7EC4;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x5B9E;&#x9645;&#x4E0A;&#x7269;&#x7406;&#x5F62;&#x5F0F;&#x8FD8;&#x662F;&#x6570;&#x7EC4;&#xFF0C;&#x4E0D;&#x8FC7;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x7684;&#x542B;&#x4E49;&#x662F;&#x6811;&#x7684;&#x5173;&#x7CFB;&#xFF0C;&#x5982;&#x4E0A;&#x56FE;&#x3002;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#x7236;&#x5B50;&#x8282;&#x70B9;&#x4E0B;&#x6807;&#x5173;&#x7CFB;&#x662F;  $parent = son + 2^{k} $&#xFF0C;&#x5176;&#x4E2D; k &#x662F;&#x5B50;&#x8282;&#x70B9;&#x4E0B;&#x6807;&#x5BF9;&#x5E94;&#x4E8C;&#x8FDB;&#x5236;&#x672B;&#x5C3E; 0 &#x7684;&#x4E2A;&#x6570;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#x4E0A;&#x56FE;&#x4E2D; A &#x548C; B &#x90FD;&#x662F;&#x6570;&#x7EC4;&#x3002;A &#x6570;&#x7EC4;&#x6B63;&#x5E38;&#x5B58;&#x50A8;&#x6570;&#x636E;&#xFF0C;B &#x6570;&#x7EC4;&#x662F;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x3002;B4&#xFF0C;B6&#xFF0C;B7 &#x662F; B8 &#x7684;&#x5B50;&#x8282;&#x70B9;&#x3002;4 &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x662F; 100&#xFF0C;4 +  $2^{2} $ = 8&#xFF0C;&#x6240;&#x4EE5; 8 &#x662F; 4 &#x7684;&#x7236;&#x8282;&#x70B9;&#x3002;&#x540C;&#x7406;&#xFF0C;7 &#x7684;&#x4E8C;&#x8FDB;&#x5236; 111&#xFF0C;7 +  $2^{0} $ = 8&#xFF0C;8 &#x4E5F;&#x662F; 7 &#x7684;&#x7236;&#x8282;&#x70B9;&#x3002;</p>
<h3 id="1-%E8%8A%82%E7%82%B9%E6%84%8F%E4%B9%89">1. &#x8282;&#x70B9;&#x610F;&#x4E49;</h3>
<p>&#x5728;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#xFF0C;&#x6240;&#x6709;&#x7684;&#x5947;&#x6570;&#x4E0B;&#x6807;&#x7684;&#x8282;&#x70B9;&#x7684;&#x542B;&#x4E49;&#x662F;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#xFF0C;&#x8868;&#x793A;&#x5355;&#x70B9;&#xFF0C;&#x5B83;&#x5B58;&#x7684;&#x503C;&#x662F;&#x539F;&#x6570;&#x7EC4;&#x76F8;&#x540C;&#x4E0B;&#x6807;&#x5B58;&#x7684;&#x503C;&#x3002;&#x4F8B;&#x5982;&#x4E0A;&#x56FE;&#x4E2D; B1&#xFF0C;B3&#xFF0C;B5&#xFF0C;B7 &#x5206;&#x522B;&#x5B58;&#x7684;&#x503C;&#x662F; A1&#xFF0C;A3&#xFF0C;A5&#xFF0C;A7&#x3002;&#x6240;&#x6709;&#x7684;&#x5076;&#x6570;&#x4E0B;&#x6807;&#x7684;&#x8282;&#x70B9;&#x5747;&#x662F;&#x7236;&#x8282;&#x70B9;&#x3002;&#x7236;&#x8282;&#x70B9;&#x5185;&#x5B58;&#x7684;&#x662F;&#x533A;&#x95F4;&#x548C;&#x3002;&#x4F8B;&#x5982; B4 &#x5185;&#x5B58;&#x7684;&#x662F; B1 + B2 + B3 + A4 = A1 + A2 + A3 + A4&#x3002;&#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x7684;&#x5DE6;&#x8FB9;&#x754C;&#x662F;&#x8BE5;&#x7236;&#x8282;&#x70B9;&#x6700;&#x5DE6;&#x8FB9;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x5BF9;&#x5E94;&#x7684;&#x4E0B;&#x6807;&#xFF0C;&#x53F3;&#x8FB9;&#x754C;&#x5C31;&#x662F;&#x81EA;&#x5DF1;&#x7684;&#x4E0B;&#x6807;&#x3002;&#x4F8B;&#x5982; B8 &#x8868;&#x793A;&#x7684;&#x533A;&#x95F4;&#x5DE6;&#x8FB9;&#x754C;&#x662F; B1&#xFF0C;&#x53F3;&#x8FB9;&#x754C;&#x662F; B8&#xFF0C;&#x6240;&#x4EE5;&#x5B83;&#x8868;&#x793A;&#x7684;&#x533A;&#x95F4;&#x548C;&#x662F; A1 + A2 + &#x2026;&#x2026; + A8&#x3002;</p>
<div>
$$
\begin{aligned}
B_{1} &amp;= A_{1} \\
B_{2} &amp;= B_{1} + A_{2} = A_{1} + A_{2} \\
B_{3} &amp;= A_{3} \\
B_{4} &amp;= B_{2} + B_{3} + A_{4} = A_{1} + A_{2} + A_{3} + A_{4} \\
B_{5} &amp;= A_{5} \\
B_{6} &amp;= B_{5} + A_{6} = A_{5} + A_{6} \\
B_{7} &amp;= A_{7} \\
B_{8} &amp;= B_{4} + B_{6} + B_{7} + A_{8} = A_{1} + A_{2} + A_{3} + A_{4} + A_{5} + A_{6} + A_{7} + A_{8} \\
\end{aligned}
$$
</div>
<p>&#x7531;&#x6570;&#x5B66;&#x5F52;&#x7EB3;&#x6CD5;&#x53EF;&#x4EE5;&#x5F97;&#x51FA;&#xFF0C;&#x5DE6;&#x8FB9;&#x754C;&#x7684;&#x4E0B;&#x6807;&#x4E00;&#x5B9A;&#x662F;  $i - 2^{k} + 1 $&#xFF0C;&#x5176;&#x4E2D; i &#x4E3A;&#x7236;&#x8282;&#x70B9;&#x7684;&#x4E0B;&#x6807;&#xFF0C;k &#x4E3A; i &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x4E2D;&#x672B;&#x5C3E; 0 &#x7684;&#x4E2A;&#x6570;&#x3002;&#x7528;&#x6570;&#x5B66;&#x65B9;&#x5F0F;&#x8868;&#x8FBE;&#x5076;&#x6570;&#x8282;&#x70B9;&#x7684;&#x533A;&#x95F4;&#x548C;&#xFF1A;</p>
<p>$$B_{i} = \sum_{j = i - 2^{k} + 1}^{i} A_{j}$$</p>
<p>&#x521D;&#x59CB;&#x5316;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">// BinaryIndexedTree define
type BinaryIndexedTree struct {
	tree     []int
	capacity int
}

// Init define
func (bit *BinaryIndexedTree) Init(nums []int) {
	bit.tree, bit.capacity = make([]int, len(nums)+1), len(nums)+1
	for i := 1; i &lt;= len(nums); i++ {
		bit.tree[i] += nums[i-1]
		for j := i - 2; j &gt;= i-lowbit(i); j-- {
			bit.tree[i] += nums[j]
		}
	}
}
</code></pre>
<p>lowbit(i) &#x51FD;&#x6570;&#x8FD4;&#x56DE; i &#x8F6C;&#x6362;&#x6210;&#x4E8C;&#x8FDB;&#x5236;&#x4EE5;&#x540E;&#xFF0C;&#x672B;&#x5C3E;&#x6700;&#x540E;&#x4E00;&#x4E2A; 1 &#x4EE3;&#x8868;&#x7684;&#x6570;&#x503C;&#xFF0C;&#x5373;  $2^{k} $&#xFF0C;k &#x4E3A; i &#x672B;&#x5C3E; 0 &#x7684;&#x4E2A;&#x6570;&#x3002;&#x6211;&#x4EEC;&#x90FD;&#x77E5;&#x9053;&#xFF0C;&#x5728;&#x8BA1;&#x7B97;&#x673A;&#x7CFB;&#x7EDF;&#x4E2D;&#xFF0C;&#x6570;&#x503C;&#x4E00;&#x5F8B;&#x7528;&#x8865;&#x7801;&#x6765;&#x8868;&#x793A;&#x548C;&#x5B58;&#x50A8;&#x3002;&#x539F;&#x56E0;&#x5728;&#x4E8E;&#xFF0C;&#x4F7F;&#x7528;&#x8865;&#x7801;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x7B26;&#x53F7;&#x4F4D;&#x548C;&#x6570;&#x503C;&#x57DF;&#x7EDF;&#x4E00;&#x5904;&#x7406;&#xFF1B;&#x540C;&#x65F6;&#xFF0C;&#x52A0;&#x6CD5;&#x548C;&#x51CF;&#x6CD5;&#x4E5F;&#x53EF;&#x4EE5;&#x7EDF;&#x4E00;&#x5904;&#x7406;&#x3002;&#x5229;&#x7528;&#x8865;&#x7801;&#xFF0C;&#x53EF;&#x4EE5; O(1) &#x7B97;&#x51FA; lowbit(i)&#x3002;&#x8D1F;&#x6570;&#x7684;&#x8865;&#x7801;&#x7B49;&#x4E8E;&#x6B63;&#x6570;&#x7684;&#x539F;&#x7801;&#x6BCF;&#x4F4D;&#x53D6;&#x53CD;&#x518D; + 1&#xFF0C;&#x52A0;&#x4E00;&#x4F1A;&#x4F7F;&#x5F97;&#x8D1F;&#x6570;&#x7684;&#x8865;&#x7801;&#x672B;&#x5C3E;&#x7684; 0 &#x548C;&#x6B63;&#x6570;&#x539F;&#x7801;&#x672B;&#x5C3E;&#x7684; 0 &#x4E00;&#x6837;&#x3002;&#x8FD9;&#x4E24;&#x4E2A;&#x6570;&#x8FDB;&#x884C; &amp; &#x8FD0;&#x7B97;&#x4EE5;&#x540E;&#xFF0C;&#x7ED3;&#x679C;&#x5373;&#x4E3A; lowbit(i)&#xFF1A;</p>
<pre><code class="language-go">func lowbit(x int) int {
	return x &amp; -x
}
</code></pre>
<p>&#x5982;&#x679C;&#x8FD8;&#x60F3;&#x4E0D;&#x901A;&#x7684;&#x8BFB;&#x8005;&#xFF0C;&#x53EF;&#x4EE5;&#x770B;&#x8FD9;&#x4E2A;&#x4F8B;&#x5B50;&#xFF0C;34 &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x662F;  $(0010 0010)_{2}$&#xFF0C;&#x5B83;&#x7684;&#x8865;&#x7801;&#x662F; $(1101 1110)_{2}$&#x3002;</p>
<div>
$$
(0010 0010)_{2} \&amp; (1101 1110)_{2} = (0000 0010)_{2}
$$
</div>
<p>lowbit(34) &#x7ED3;&#x679C;&#x662F;  $2^{k} = 2^{1} = 2$</p>
<h3 id="2-%E6%8F%92%E5%85%A5%E6%93%8D%E4%BD%9C">2. &#x63D2;&#x5165;&#x64CD;&#x4F5C;</h3>
<p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E0A;&#x7684;&#x7236;&#x5B50;&#x7684;&#x4E0B;&#x6807;&#x6EE1;&#x8DB3;  $parent = son + 2^{k} $ &#x5173;&#x7CFB;&#xFF0C;&#x6240;&#x4EE5;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x8FD9;&#x4E2A;&#x516C;&#x5F0F;&#x4ECE;&#x53F6;&#x5B50;&#x7ED3;&#x70B9;&#x4E0D;&#x65AD;&#x5F80;&#x4E0A;&#x9012;&#x5F52;&#xFF0C;&#x76F4;&#x5230;&#x8BBF;&#x95EE;&#x5230;&#x6700;&#x5927;&#x8282;&#x70B9;&#x503C;&#x4E3A;&#x6B62;&#xFF0C;&#x7956;&#x5148;&#x7ED3;&#x70B9;&#x6700;&#x591A;&#x4E3A; logn &#x4E2A;&#x3002;&#x63D2;&#x5165;&#x64CD;&#x4F5C;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x8282;&#x70B9;&#x503C;&#x7684;&#x589E;&#x52A0;&#x6216;&#x8005;&#x51CF;&#x5C11;&#xFF0C;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">// Add define
func (bit *BinaryIndexedTree) Add(index int, val int) {
	for index &lt;= bit.capacity {
		bit.tree[index] += val
		index += lowbit(index)
	}
}
</code></pre>
<h3 id="3-%E6%9F%A5%E8%AF%A2%E6%93%8D%E4%BD%9C">3. &#x67E5;&#x8BE2;&#x64CD;&#x4F5C;</h3>
<p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#x67E5;&#x8BE2; [1, i] &#x533A;&#x95F4;&#x5185;&#x7684;&#x548C;&#x3002;&#x6309;&#x7167;&#x8282;&#x70B9;&#x7684;&#x542B;&#x4E49;&#xFF0C;&#x53EF;&#x4EE5;&#x5F97;&#x51FA;&#x4E0B;&#x9762;&#x7684;&#x5173;&#x7CFB;&#xFF1A;</p>
<div>
$$
\begin{aligned}
Query(i) &amp;= A_{1} + A_{2} + ...... + A_{i} \\
&amp;= A_{1} + A_{2} + A_{i-2^{k}} + A_{i-2^{k}+1} + ...... + A_{i} \\
&amp;= A_{1} + A_{2} + A_{i-2^{k}} + B_{i} \\
&amp;= Query(i-2^{k}) + B_{i} \\
&amp;= Query(i-lowbit(i)) + B_{i} \\
\end{aligned}
$$
</div>
<p>$B_{i} $ &#x662F;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5B58;&#x7684;&#x503C;&#x3002;Query &#x64CD;&#x4F5C;&#x5B9E;&#x9645;&#x662F;&#x4E00;&#x4E2A;&#x9012;&#x5F52;&#x7684;&#x8FC7;&#x7A0B;&#x3002;lowbit(i) &#x8868;&#x793A;  $2^{k} $&#xFF0C;&#x5176;&#x4E2D; k &#x662F; i &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x8868;&#x793A;&#x4E2D;&#x672B;&#x5C3E; 0 &#x7684;&#x4E2A;&#x6570;&#x3002;i - lowbit(i) &#x5C06; i &#x7684;&#x4E8C;&#x8FDB;&#x5236;&#x4E2D;&#x672B;&#x5C3E;&#x7684; 1 &#x53BB;&#x6389;&#xFF0C;&#x6700;&#x591A;&#x6709;  $log(i) $ &#x4E2A; 1&#xFF0C;&#x6240;&#x4EE5;&#x67E5;&#x8BE2;&#x64CD;&#x4F5C;&#x6700;&#x574F;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x662F; O(log n)&#x3002;&#x67E5;&#x8BE2;&#x64CD;&#x4F5C;&#x5B9E;&#x73B0;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">// Query define
func (bit *BinaryIndexedTree) Query(index int) int {
	sum := 0
	for index &gt;= 1 {
		sum += bit.tree[index]
		index -= lowbit(index)
	}
	return sum
}
</code></pre>
<h2 id="%E4%BA%8C-%E4%B8%8D%E5%90%8C%E5%9C%BA%E6%99%AF%E4%B8%8B%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84%E7%9A%84%E5%8A%9F%E8%83%BD">&#x4E8C;. &#x4E0D;&#x540C;&#x573A;&#x666F;&#x4E0B;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x529F;&#x80FD;</h2>
<p>&#x6839;&#x636E;&#x8282;&#x70B9;&#x7EF4;&#x62A4;&#x7684;&#x6570;&#x636E;&#x542B;&#x4E49;&#x4E0D;&#x540C;&#xFF0C;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x4E0D;&#x540C;&#x7684;&#x529F;&#x80FD;&#x6765;&#x6EE1;&#x8DB3;&#x5404;&#x79CD;&#x5404;&#x6837;&#x7684;&#x533A;&#x95F4;&#x573A;&#x666F;&#x3002;&#x4E0B;&#x9762;&#x6211;&#x4EEC;&#x5148;&#x4EE5;&#x4E0A;&#x4F8B;&#x4E2D;&#x8BB2;&#x8FF0;&#x7684;&#x533A;&#x95F4;&#x548C;&#x4E3A;&#x4F8B;&#xFF0C;&#x8FDB;&#x800C;&#x5F15;&#x51FA; RMQ &#x7684;&#x4F7F;&#x7528;&#x573A;&#x666F;&#x3002;</p>
<h3 id="1-%E5%8D%95%E7%82%B9%E5%A2%9E%E5%87%8F-%E5%8C%BA%E9%97%B4%E6%B1%82%E5%92%8C">1. &#x5355;&#x70B9;&#x589E;&#x51CF; + &#x533A;&#x95F4;&#x6C42;&#x548C;</h3>
<p>&#x8FD9;&#x79CD;&#x573A;&#x666F;&#x662F;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6700;&#x7ECF;&#x5178;&#x7684;&#x573A;&#x666F;&#x3002;&#x5355;&#x70B9;&#x589E;&#x51CF;&#x5206;&#x522B;&#x8C03;&#x7528; add(i,v) &#x548C; add(i,-v)&#x3002;&#x533A;&#x95F4;&#x6C42;&#x548C;&#xFF0C;&#x5229;&#x7528;&#x524D;&#x7F00;&#x548C;&#x7684;&#x601D;&#x60F3;&#xFF0C;&#x6C42; [m,n] &#x533A;&#x95F4;&#x548C;&#xFF0C;&#x5373; query(n) - query(m-1)&#x3002;query(n) &#x4EE3;&#x8868; [1,n] &#x533A;&#x95F4;&#x5185;&#x7684;&#x548C;&#xFF0C;query(m-1) &#x4EE3;&#x8868; [1,m-1] &#x533A;&#x95F4;&#x5185;&#x7684;&#x548C;&#xFF0C;&#x4E24;&#x8005;&#x76F8;&#x51CF;&#xFF0C;&#x5373; [m,n] &#x533A;&#x95F4;&#x5185;&#x7684;&#x548C;&#x3002;</p>
<blockquote>
<p>LeetCode &#x5BF9;&#x5E94;&#x9898;&#x76EE;&#x662F; <a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0307.Range-Sum-Query-Mutable/">307. Range Sum Query - Mutable</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0327.Count-of-Range-Sum/">327. Count of Range Sum</a></p>
</blockquote>
<h3 id="2-%E5%8C%BA%E9%97%B4%E5%A2%9E%E5%87%8F-%E5%8D%95%E7%82%B9%E6%9F%A5%E8%AF%A2">2. &#x533A;&#x95F4;&#x589E;&#x51CF; + &#x5355;&#x70B9;&#x67E5;&#x8BE2;</h3>
<p>&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x9700;&#x8981;&#x505A;&#x4E00;&#x4E0B;&#x8F6C;&#x5316;&#x3002;&#x5B9A;&#x4E49;&#x5DEE;&#x5206;&#x6570;&#x7EC4;  $C_{i} $ &#x4EE3;&#x8868;  $C_{i} = A_{i} - A_{i-1} $&#x3002;&#x90A3;&#x4E48;&#xFF1A;</p>
<div>
$$
\begin{aligned}
C_{0} &amp;= A_{0} \\
C_{1} &amp;= A_{1} - A_{0}\\
C_{2} &amp;= A_{2} - A_{1}\\
......\\
C_{n} &amp;= A_{n} - A_{n-1}\\
\sum_{j=1}^{n}C_{j} &amp;= A_{n}\\
\end{aligned}
$$
</div>
<p>&#x533A;&#x95F4;&#x589E;&#x51CF;&#xFF1A;&#x5728; [m,n] &#x533A;&#x95F4;&#x5185;&#x6BCF;&#x4E00;&#x4E2A;&#x6570;&#x90FD;&#x589E;&#x52A0; v&#xFF0C;&#x53EA;&#x5F71;&#x54CD; 2 &#x4E2A;&#x5355;&#x70B9;&#x7684;&#x503C;&#xFF1A;</p>
<div>
$$
\begin{aligned}
C_{m} &amp;= (A_{m} + v) - A_{m-1}\\
C_{m+1} &amp;= (A_{m+1} + v) - (A_{m} + v)\\
C_{m+2} &amp;= (A_{m+2} + v) - (A_{m+1} + v)\\
......\\
C_{n} &amp;= (A_{n} + v) - (A_{n-1} + v)\\
C_{n+1} &amp;= A_{n+1} - (A_{n} + v)\\
\end{aligned}
$$
</div>
<p>&#x53EF;&#x4EE5;&#x89C2;&#x5BDF;&#x770B;&#xFF0C; $C_{m+1}, C_{m+2}, ......, C_{n} $ &#x503C;&#x90FD;&#x4E0D;&#x53D8;&#xFF0C;&#x53D8;&#x5316;&#x7684;&#x662F;  $C_{m}, C_{n+1} $&#x3002;&#x6240;&#x4EE5;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x533A;&#x95F4;&#x589E;&#x52A0;&#x53EA;&#x9700;&#x8981;&#x6267;&#x884C; add(m,v) &#x548C; add(n+1,-v) &#x5373;&#x53EF;&#x3002;</p>
<p>&#x5355;&#x70B9;&#x67E5;&#x8BE2;&#x8FD9;&#x65F6;&#x5C31;&#x662F;&#x6C42;&#x524D;&#x7F00;&#x548C;&#x4E86;&#xFF0C; $A_{n} = \sum_{j=1}^{n}C_{j} $&#xFF0C;&#x5373; query(n)&#x3002;</p>
<h3 id="3-%E5%8C%BA%E9%97%B4%E5%A2%9E%E5%87%8F-%E5%8C%BA%E9%97%B4%E6%B1%82%E5%92%8C">3. &#x533A;&#x95F4;&#x589E;&#x51CF; + &#x533A;&#x95F4;&#x6C42;&#x548C;</h3>
<p>&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x662F;&#x4E0A;&#x9762;&#x4E00;&#x79CD;&#x60C5;&#x51B5;&#x7684;&#x589E;&#x5F3A;&#x7248;&#x3002;&#x533A;&#x95F4;&#x589E;&#x51CF;&#x7684;&#x505A;&#x6CD5;&#x548C;&#x4E0A;&#x9762;&#x505A;&#x6CD5;&#x4E00;&#x81F4;&#xFF0C;&#x6784;&#x9020;&#x5DEE;&#x5206;&#x6570;&#x7EC4;&#x3002;&#x8FD9;&#x91CC;&#x4E3B;&#x8981;&#x8BF4;&#x660E;&#x533A;&#x95F4;&#x67E5;&#x8BE2;&#x600E;&#x4E48;&#x505A;&#x3002;&#x5148;&#x6765;&#x770B; [1,n] &#x533A;&#x95F4;&#x548C;&#x5982;&#x4F55;&#x6C42;&#xFF1A;</p>
<div>
$$
A_{1} + A_{2} + A_{3} + ...... + A_{n}\\
\begin{aligned}
 &amp;= (C_{1}) + (C_{1} + C_{2}) + (C_{1} + C_{2} + C_{3}) + ...... + \sum_{1}^{n}C_{n}\\
&amp;= n * C_{1} + (n-1) * C_{2} + ...... + C_{n}\\
&amp;= n * (C_{1} + C_{2} + C_{3} + ...... + C_{n}) - (0 * C_{1} + 1 * C_{2} + 2 * C_{3} + ...... + (n - 1) * C_{n})\\
&amp;= n * \sum_{1}^{n}C_{n} - (D_{1} + D_{2} + D_{3} + ...... + D_{n})\\
&amp;= n * \sum_{1}^{n}C_{n} - \sum_{1}^{n}D_{n}\\
\end{aligned}
$$
</div>
<p>&#x5176;&#x4E2D;  $D_{n} = (n - 1) * C_{n} $</p>
<p>&#x6240;&#x4EE5;&#x6C42;&#x533A;&#x95F4;&#x548C;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x518D;&#x6784;&#x9020;&#x4E00;&#x4E2A;  $D_{n} $ &#x5373;&#x53EF;&#x3002;</p>
<div>
$$
\begin{aligned}
\sum_{1}^{n}A_{n} &amp;= A_{1} + A_{2} + A_{3} + ...... + A_{n} \\
&amp;= n * \sum_{1}^{n}C_{n} - \sum_{1}^{n}D_{n}\\
\end{aligned}
$$
</div>
<p>&#x4EE5;&#x6B64;&#x7C7B;&#x63A8;&#xFF0C;&#x63A8;&#x5230;&#x66F4;&#x4E00;&#x822C;&#x7684;&#x60C5;&#x51B5;&#xFF1A;</p>
<div>
$$
\begin{aligned}
\sum_{m}^{n}A_{n} &amp;= A_{m} + A_{m+1} + A_{m+2} + ...... + A_{n} \\
&amp;= \sum_{1}^{n}A_{n} - \sum_{1}^{m-1}A_{n}\\
&amp;= (n * \sum_{1}^{n}C_{n} - \sum_{1}^{n}D_{n}) - ((m-1) * \sum_{1}^{m-1}C_{m-1} - \sum_{1}^{m-1}D_{m-1})\\
\end{aligned}
$$
</div>
<p>&#x81F3;&#x6B64;&#x533A;&#x95F4;&#x67E5;&#x8BE2;&#x95EE;&#x9898;&#x5F97;&#x89E3;&#x3002;</p>
<h3 id="4-%E5%8D%95%E7%82%B9%E5%A2%9E%E5%87%8F-%E5%8C%BA%E9%97%B4%E6%9C%80%E5%80%BC">4. &#x5355;&#x70B9;&#x589E;&#x51CF; + &#x533A;&#x95F4;&#x6700;&#x503C;</h3>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x6700;&#x57FA;&#x7840;&#x7684;&#x8FD0;&#x7528;&#x662F;&#x533A;&#x95F4;&#x6C42;&#x548C;&#xFF0C;&#x4F46;&#x662F;&#x5C06; sum &#x64CD;&#x4F5C;&#x6362;&#x6210; max &#x64CD;&#x4F5C;&#x4EE5;&#x540E;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x6C42;&#x533A;&#x95F4;&#x6700;&#x503C;&#xFF0C;&#x5E76;&#x4E14;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x5B8C;&#x5168;&#x6CA1;&#x6709;&#x53D8;&#x3002;&#x90A3;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5462;&#xFF1F;&#x4E5F;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#x76F8;&#x540C;&#x7684;&#x529F;&#x80FD;&#x4E48;&#xFF1F;&#x7B54;&#x6848;&#x662F;&#x53EF;&#x4EE5;&#x7684;&#xFF0C;&#x4E0D;&#x8FC7;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4F1A;&#x4E0B;&#x964D;&#x4E00;&#x70B9;&#x3002;</p>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x6C42;&#x533A;&#x95F4;&#x548C;&#xFF0C;&#x628A;&#x6BCF;&#x4E2A;&#x5C0F;&#x533A;&#x95F4;&#x7684;&#x548C;&#x8BA1;&#x7B97;&#x597D;&#xFF0C;&#x7136;&#x540E;&#x4F9D;&#x6B21; pushUp&#xFF0C;&#x5F80;&#x4E0A;&#x66F4;&#x65B0;&#x3002;&#x628A; sum &#x6362;&#x6210; max &#x64CD;&#x4F5C;&#xFF0C;&#x542B;&#x4E49;&#x5B8C;&#x5168;&#x76F8;&#x540C;&#xFF1A;&#x53D6;&#x51FA;&#x5C0F;&#x533A;&#x95F4;&#x7684;&#x6700;&#x5927;&#x503C;&#xFF0C;&#x7136;&#x540E;&#x4F9D;&#x6B21; pushUp &#x5F97;&#x5230;&#x6574;&#x4E2A;&#x533A;&#x95F4;&#x7684;&#x6700;&#x5927;&#x503C;&#x3002;</p>
<p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6C42;&#x533A;&#x95F4;&#x548C;&#xFF0C;&#x662F;&#x5C06;&#x5355;&#x70B9;&#x589E;&#x51CF;&#x7684;&#x589E;&#x91CF;&#x5F71;&#x54CD;&#x66F4;&#x65B0;&#x5230;&#x56FA;&#x5B9A;&#x533A;&#x95F4;  $[i-2^{k}+1, i] $&#x3002;&#x4F46;&#x662F;&#x628A; sum &#x6362;&#x6210; max &#x64CD;&#x4F5C;&#xFF0C;&#x542B;&#x4E49;&#x5C31;&#x53D8;&#x4E86;&#x3002;&#x6B64;&#x65F6;&#x5355;&#x70B9;&#x7684;&#x589E;&#x91CF;&#x548C;&#x533A;&#x95F4; max &#x503C;&#x5E76;&#x65E0;&#x76F4;&#x63A5;&#x8054;&#x7CFB;&#x3002;&#x66B4;&#x529B;&#x7684;&#x65B9;&#x5F0F;&#x662F;&#x5C06;&#x8BE5;&#x70B9;&#x4E0E;&#x533A;&#x95F4;&#x5185;&#x6240;&#x6709;&#x503C;&#x6BD4;&#x8F83;&#x5927;&#x5C0F;&#xFF0C;&#x53D6;&#x51FA;&#x6700;&#x5927;&#x503C;&#xFF0C;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6; O(n * log n)&#x3002;&#x4ED4;&#x7EC6;&#x89C2;&#x5BDF;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x7ED3;&#x6784;&#xFF0C;&#x53EF;&#x4EE5;&#x53D1;&#x73B0;&#x4E0D;&#x5FC5;&#x679A;&#x4E3E;&#x6240;&#x6709;&#x533A;&#x95F4;&#x3002;&#x4F8B;&#x5982;&#x66F4;&#x65B0;  $A_{i} $ &#x7684;&#x503C;&#xFF0C;&#x90A3;&#x4E48;&#x53D7;&#x5230;&#x5F71;&#x54CD;&#x7684;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E0B;&#x6807;&#x4E3A;  $i-2^{0}, i-2^{1}, i-2^{2}, i-2^{3}, ......, i-2^{k} $&#xFF0C;&#x5176;&#x4E2D;  $2^{k} &lt; lowbit(i) \leqslant 2^{k+1} $&#x3002;&#x9700;&#x8981;&#x66F4;&#x65B0;&#x81F3;&#x591A; k &#x4E2A;&#x4E0B;&#x6807;&#xFF0C;&#x5916;&#x5C42;&#x5FAA;&#x73AF;&#x7531; O(n) &#x964D;&#x4E3A;&#x4E86; O(log n)&#x3002;&#x533A;&#x95F4;&#x5185;&#x90E8;&#x6BCF;&#x6B21;&#x90FD;&#x9700;&#x8981;&#x91CD;&#x65B0;&#x6BD4;&#x8F83;&#xFF0C;&#x9700;&#x8981; O(log n) &#x7684;&#x590D;&#x6742;&#x5EA6;&#xFF0C;&#x603B;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A;  $(O(log n))^2  $&#x3002;</p>
<pre><code class="language-go">func (bit *BinaryIndexedTree) Add(index int, val int) {
	for index &lt;= bit.capacity {
		bit.tree[index] = val
		for i := 1; i &lt; lowbit(index); i = i &lt;&lt; 1 {
			bit.tree[index] = max(bit.tree[index], bit.tree[index-i])
		}
		index += lowbit(index)
	}
}
</code></pre>
<p>&#x4E0A;&#x9762;&#x89E3;&#x51B3;&#x4E86;&#x5355;&#x70B9;&#x66F4;&#x65B0;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x518D;&#x6765;&#x770B;&#x533A;&#x95F4;&#x6700;&#x503C;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x5212;&#x5206;&#x533A;&#x95F4;&#x662F;&#x5747;&#x5206;&#xFF0C;&#x5BF9;&#x534A;&#x5206;&#xFF0C;&#x800C;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E0D;&#x662F;&#x5747;&#x5206;&#x3002;&#x5728;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;  $B_{i}  $ &#x8868;&#x793A;&#x7684;&#x533A;&#x95F4;&#x662F;  $[i-2^{k}+1, i] $&#xFF0C;&#x636E;&#x6B64;&#x5212;&#x5206;&#x201C;&#x4E0D;&#x89C4;&#x5219;&#x533A;&#x95F4;&#x201D;&#x3002;&#x5BF9;&#x4E8E;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6C42; [m,n] &#x533A;&#x95F4;&#x5185;&#x6700;&#x503C;&#xFF0C;</p>
<ul>
<li>&#x5982;&#x679C;  $ m &lt; n - 2^{k}  $&#xFF0C;&#x90A3;&#x4E48;  $ query(m,n) = max(query(m,n-2^{k}), B_{n}) $</li>
<li>&#x5982;&#x679C;  $ m &gt;= n - 2^{k}  $&#xFF0C;&#x90A3;&#x4E48;  $ query(m,n) = max(query(m,n-1), A_{n}) $</li>
</ul>
<pre><code class="language-go">func (bit *BinaryIndexedTree) Query(m, n int) int {
	res := 0
	for n &gt;= m {
		res = max(nums[n], res)
		n--
		for ; n-lowbit(n) &gt;= m; n -= lowbit(n) {
			res = max(bit.tree[n], res)
		}
	}
	return res
}
</code></pre>
<p>n &#x6700;&#x591A;&#x7ECF;&#x8FC7;  $(O(log n))^2  $ &#x53D8;&#x5316;&#xFF0C;&#x6700;&#x7EC8; n &lt; m&#x3002;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A;  $(O(log n))^2  $&#x3002;</p>
<p>&#x9488;&#x5BF9;&#x8FD9;&#x7C7B;&#x95EE;&#x9898;&#x653E;&#x4E00;&#x9053;&#x7ECF;&#x5178;&#x4F8B;&#x9898;<a href="http://acm.hdu.edu.cn/showproblem.php?pid=1754">&#x300A;HDU 1754 I Hate It&#x300B;</a>&#xFF1A;</p>
<p>Problem Description<br>
&#x5F88;&#x591A;&#x5B66;&#x6821;&#x6D41;&#x884C;&#x4E00;&#x79CD;&#x6BD4;&#x8F83;&#x7684;&#x4E60;&#x60EF;&#x3002;&#x8001;&#x5E08;&#x4EEC;&#x5F88;&#x559C;&#x6B22;&#x8BE2;&#x95EE;&#xFF0C;&#x4ECE;&#x67D0;&#x67D0;&#x5230;&#x67D0;&#x67D0;&#x5F53;&#x4E2D;&#xFF0C;&#x5206;&#x6570;&#x6700;&#x9AD8;&#x7684;&#x662F;&#x591A;&#x5C11;&#x3002;&#x8FD9;&#x8BA9;&#x5F88;&#x591A;&#x5B66;&#x751F;&#x5F88;&#x53CD;&#x611F;&#x3002;&#x4E0D;&#x7BA1;&#x4F60;&#x559C;&#x4E0D;&#x559C;&#x6B22;&#xFF0C;&#x73B0;&#x5728;&#x9700;&#x8981;&#x4F60;&#x505A;&#x7684;&#x662F;&#xFF0C;&#x5C31;&#x662F;&#x6309;&#x7167;&#x8001;&#x5E08;&#x7684;&#x8981;&#x6C42;&#xFF0C;&#x5199;&#x4E00;&#x4E2A;&#x7A0B;&#x5E8F;&#xFF0C;&#x6A21;&#x62DF;&#x8001;&#x5E08;&#x7684;&#x8BE2;&#x95EE;&#x3002;&#x5F53;&#x7136;&#xFF0C;&#x8001;&#x5E08;&#x6709;&#x65F6;&#x5019;&#x9700;&#x8981;&#x66F4;&#x65B0;&#x67D0;&#x4F4D;&#x540C;&#x5B66;&#x7684;&#x6210;&#x7EE9;&#x3002;</p>
<p>Input<br>
&#x672C;&#x9898;&#x76EE;&#x5305;&#x542B;&#x591A;&#x7EC4;&#x6D4B;&#x8BD5;&#xFF0C;&#x8BF7;&#x5904;&#x7406;&#x5230;&#x6587;&#x4EF6;&#x7ED3;&#x675F;&#x3002;<br>
&#x5728;&#x6BCF;&#x4E2A;&#x6D4B;&#x8BD5;&#x7684;&#x7B2C;&#x4E00;&#x884C;&#xFF0C;&#x6709;&#x4E24;&#x4E2A;&#x6B63;&#x6574;&#x6570; N &#x548C; M ( 0&lt;N&lt;=200000,0&lt;M&lt;5000 )&#xFF0C;&#x5206;&#x522B;&#x4EE3;&#x8868;&#x5B66;&#x751F;&#x7684;&#x6570;&#x76EE;&#x548C;&#x64CD;&#x4F5C;&#x7684;&#x6570;&#x76EE;&#x3002;&#x5B66;&#x751F; ID &#x7F16;&#x53F7;&#x5206;&#x522B;&#x4ECE; 1 &#x7F16;&#x5230; N&#x3002;&#x7B2C;&#x4E8C;&#x884C;&#x5305;&#x542B; N &#x4E2A;&#x6574;&#x6570;&#xFF0C;&#x4EE3;&#x8868;&#x8FD9; N &#x4E2A;&#x5B66;&#x751F;&#x7684;&#x521D;&#x59CB;&#x6210;&#x7EE9;&#xFF0C;&#x5176;&#x4E2D;&#x7B2C; i &#x4E2A;&#x6570;&#x4EE3;&#x8868; ID &#x4E3A; i &#x7684;&#x5B66;&#x751F;&#x7684;&#x6210;&#x7EE9;&#x3002;&#x63A5;&#x4E0B;&#x6765;&#x6709; M &#x884C;&#x3002;&#x6BCF;&#x4E00;&#x884C;&#x6709;&#x4E00;&#x4E2A;&#x5B57;&#x7B26; C (&#x53EA;&#x53D6;&apos;Q&apos;&#x6216;&apos;U&apos;) &#xFF0C;&#x548C;&#x4E24;&#x4E2A;&#x6B63;&#x6574;&#x6570; A&#xFF0C;B&#x3002;&#x5F53; C &#x4E3A; &apos;Q&apos; &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x6761;&#x8BE2;&#x95EE;&#x64CD;&#x4F5C;&#xFF0C;&#x5B83;&#x8BE2;&#x95EE; ID &#x4ECE; A &#x5230; B(&#x5305;&#x62EC; A,B)&#x7684;&#x5B66;&#x751F;&#x5F53;&#x4E2D;&#xFF0C;&#x6210;&#x7EE9;&#x6700;&#x9AD8;&#x7684;&#x662F;&#x591A;&#x5C11;&#x3002;&#x5F53; C &#x4E3A; &apos;U&apos; &#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8868;&#x793A;&#x8FD9;&#x662F;&#x4E00;&#x6761;&#x66F4;&#x65B0;&#x64CD;&#x4F5C;&#xFF0C;&#x8981;&#x6C42;&#x628A; ID &#x4E3A; A &#x7684;&#x5B66;&#x751F;&#x7684;&#x6210;&#x7EE9;&#x66F4;&#x6539;&#x4E3A; B&#x3002;</p>
<p>Output<br>
&#x5BF9;&#x4E8E;&#x6BCF;&#x4E00;&#x6B21;&#x8BE2;&#x95EE;&#x64CD;&#x4F5C;&#xFF0C;&#x5728;&#x4E00;&#x884C;&#x91CC;&#x9762;&#x8F93;&#x51FA;&#x6700;&#x9AD8;&#x6210;&#x7EE9;&#x3002;</p>
<pre><code class="language-c">
Sample Input
5 6
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 2 9
Q 1 5

Sample Output
5
6
5
9
</code></pre>
<p>&#x8BFB;&#x5B8C;&#x9898;&#x53EF;&#x4EE5;&#x5F88;&#x5FEB;&#x53CD;&#x5E94;&#x662F;&#x5355;&#x70B9;&#x589E;&#x51CF; + &#x533A;&#x95F4;&#x6700;&#x5927;&#x503C;&#x7684;&#x9898;&#x3002;&#x5229;&#x7528;&#x4E0A;&#x9762;&#x8BB2;&#x89E3;&#x7684;&#x601D;&#x60F3;&#x5199;&#x51FA;&#x4EE3;&#x7801;&#xFF1A;</p>
<blockquote>
<p>&#x7531;&#x4E8E; OJ &#x4E0D;&#x652F;&#x6301; Go&#xFF0C;&#x6240;&#x4EE5;&#x6B64;&#x5904;&#x7528; C &#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x3002;&#x8FD9;&#x91CC;&#x8FD8;&#x6709;&#x4E00;&#x4E2A; Hint&#xFF0C;&#x5BF9;&#x4E8E;&#x8D85;&#x5927;&#x91CF;&#x7684;&#x8F93;&#x5165;&#xFF0C;scanf() &#x7684;&#x6027;&#x80FD;&#x660E;&#x663E;&#x4F18;&#x4E8E; cin&#x3002;</p>
</blockquote>
<pre><code class="language-c">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
using namespace std;
 
const int MAXN = 3e5;
int a[MAXN], h[MAXN];
int n, m;
 
int lowbit(int x)
{
	return x &amp; (-x);
}
void updata(int x)
{
	int lx, i;
	while (x &lt;= n)
	{
		h[x] = a[x];
		lx = lowbit(x);
		for (i=1; i&lt;lx; i&lt;&lt;=1)
			h[x] = max(h[x], h[x-i]);
		x += lowbit(x);
	}		
}
int query(int x, int y)
{
	int ans = 0;
	while (y &gt;= x)
	{
		ans = max(a[y], ans);
		y --;
		for (; y-lowbit(y) &gt;= x; y -= lowbit(y))
			ans = max(h[y], ans);
	}
	return ans;
}
int main()
{
	int i, j, x, y, ans;
	char c;
	while (scanf(&quot;%d%d&quot;,&amp;n,&amp;m)!=EOF)
	{
		for (i=1; i&lt;=n; i++)
			h[i] = 0;
		for (i=1; i&lt;=n; i++)
		{
			scanf(&quot;%d&quot;,&amp;a[i]);
			updata(i);
		}
		for (i=1; i&lt;=m; i++)
		{
			scanf(&quot;%c&quot;,&amp;c);
			scanf(&quot;%c&quot;,&amp;c);
			if (c == &apos;Q&apos;)
			{
				scanf(&quot;%d%d&quot;,&amp;x,&amp;y);
				ans = query(x, y);
				printf(&quot;%d\n&quot;,ans);
			}
			else if (c == &apos;U&apos;)
			{
				scanf(&quot;%d%d&quot;,&amp;x,&amp;y);
				a[x] = y;
				updata(x);
			}
		}
	}
	return 0;
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x5DF2; AC&#x3002;&#x611F;&#x5174;&#x8DA3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x4EE5;&#x81EA;&#x5DF1;&#x505A;&#x4E00;&#x505A;&#x8FD9;&#x9053; ACM &#x7684;&#x7B80;&#x5355;&#x9898;&#x3002;</p>
<h3 id="5-%E5%8C%BA%E9%97%B4%E5%8F%A0%E5%8A%A0-%E5%8D%95%E7%82%B9%E6%9C%80%E5%80%BC">5. &#x533A;&#x95F4;&#x53E0;&#x52A0; + &#x5355;&#x70B9;&#x6700;&#x503C;</h3>
<p>&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x53EF;&#x80FD;&#x6709;&#x7EC6;&#x5FC3;&#x7684;&#x8BFB;&#x8005;&#x7591;&#x60D1;&#xFF0C;&#x8FD9;&#x4E00;&#x7C7B;&#x9898;&#x4E0D;&#x5C31;&#x662F;&#x7B2C;&#x4E8C;&#x7C7B;&#x201C;&#x533A;&#x95F4;&#x589E;&#x51CF; + &#x5355;&#x70B9;&#x67E5;&#x8BE2;&#x201D;&#x7C7B;&#x4F3C;&#x4E48;&#xFF1F;&#x53EF;&#x4EE5;&#x8003;&#x8651;&#x7528;&#x7B2C;&#x4E8C;&#x7C7B;&#x9898;&#x7684;&#x601D;&#x8DEF;&#x89E3;&#x51B3;&#x8FD9;&#x4E00;&#x7C7B;&#x9898;&#x3002;&#x4E0D;&#x8FC7;&#x9EBB;&#x70E6;&#x70B9;&#x5728;&#x4E8E;&#xFF0C;&#x533A;&#x95F4;&#x53E0;&#x52A0;&#x4EE5;&#x540E;&#xFF0C;&#x6BCF;&#x4E2A;&#x5355;&#x70B9;&#x7684;&#x66F4;&#x65B0;&#x4E0D;&#x662F;&#x76F4;&#x63A5;&#x544A;&#x8BC9;&#x589E;&#x51CF;&#x53D8;&#x5316;&#xFF0C;&#x800C;&#x662F;&#x9700;&#x8981;&#x6211;&#x4EEC;&#x81EA;&#x5DF1;&#x7EF4;&#x62A4;&#x4E00;&#x4E2A;&#x6700;&#x503C;&#x3002;&#x4F8B;&#x5982;&#x5728; [5,7] &#x533A;&#x95F4;&#x5F53;&#x524D;&#x503C;&#x662F; 7&#xFF0C;&#x63A5;&#x4E0B;&#x6765;&#x533A;&#x95F4; [1,9] &#x533A;&#x95F4;&#x5185;&#x589E;&#x52A0;&#x4E86;&#x4E00;&#x4E2A; 2 &#x7684;&#x503C;&#x3002;&#x6B63;&#x786E;&#x7684;&#x505A;&#x6CD5;&#x662F;&#x628A; [1,4] &#x533A;&#x95F4;&#x5185;&#x589E;&#x52A0; 2&#xFF0C;[8,9] &#x533A;&#x95F4;&#x589E;&#x52A0; 2&#xFF0C;[5,7] &#x533A;&#x95F4;&#x7EF4;&#x6301;&#x4E0D;&#x53D8;&#xFF0C;&#x56E0;&#x4E3A; 7 &gt; 2&#x3002;&#x8FD9;&#x4EC5;&#x4EC5;&#x662F; 2 &#x4E2A;&#x533A;&#x95F4;&#x53E0;&#x52A0;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x5982;&#x679C;&#x533A;&#x95F4;&#x53E0;&#x52A0;&#x7684;&#x8D8A;&#x591A;&#xFF0C;&#x9700;&#x8981;&#x62C6;&#x5206;&#x7684;&#x533A;&#x95F4;&#x4E5F;&#x8D8A;&#x591A;&#x4E86;&#x3002;&#x770B;&#x5230;&#x8FD9;&#x91CC;&#x6709;&#x4E9B;&#x8BFB;&#x8005;&#x53EF;&#x80FD;&#x4F1A;&#x8003;&#x8651;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x89E3;&#x6CD5;&#x4E86;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x786E;&#x5B9E;&#x662F;&#x89E3;&#x51B3;&#x533A;&#x95F4;&#x53E0;&#x52A0;&#x95EE;&#x9898;&#x7684;&#x5229;&#x5668;&#x3002;&#x7B14;&#x8005;&#x8FD9;&#x91CC;&#x53EA;&#x8BA8;&#x8BBA;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x89E3;&#x6CD5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Leetcode/leetcode_218_0.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree" loading="lazy"></p>
<p>&#x5F53;&#x524D; LeetCode &#x6709; 1836 &#x9898;&#xFF0C;Binary Indexed Tree tag &#x4E0B;&#x9762;&#x53EA;&#x6709; 7 &#x9898;&#xFF0C;<a href="https://leetcode.com/problems/the-skyline-problem/">218. The Skyline Problem</a> &#x8FD9;&#x4E00;&#x9898;&#x7B97;&#x662F; 7 &#x9053; BIT &#x91CC;&#x9762;&#x6700;&#x201C;&#x96BE;&#x201D;&#x7684;&#x3002;&#x8FD9;&#x9053;&#x5929;&#x9645;&#x7EBF;&#x7684;&#x9898;&#x5C31;&#x5C5E;&#x4E8E;&#x533A;&#x95F4;&#x53E0;&#x52A0; + &#x5355;&#x70B9;&#x6700;&#x503C;&#x7684;&#x9898;&#x3002;&#x7B14;&#x8005;&#x4EE5;&#x8FD9;&#x9053;&#x9898;&#x4E3A;&#x4F8B;&#xFF0C;&#x8BB2;&#x8BB2;&#x6B64;&#x7C7B;&#x9898;&#x7684;&#x5E38;&#x7528;&#x89E3;&#x6CD5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Leetcode/leetcode_218_1.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree" loading="lazy"></p>
<p>&#x8981;&#x6C42;&#x5929;&#x9645;&#x7EBF;&#xFF0C;&#x5373;&#x627E;&#x5230;&#x697C;&#x4E0E;&#x697C;&#x91CD;&#x53E0;&#x533A;&#x95F4;&#x5916;&#x8FB9;&#x7F18;&#x7684;&#x7EBF;&#xFF0C;&#x8BF4;&#x767D;&#x4E86;&#x662F;&#x7EF4;&#x62A4;&#x5404;&#x4E2A;&#x533A;&#x95F4;&#x5185;&#x7684;&#x6700;&#x503C;&#x3002;&#x8FD9;&#x6709; 2 &#x4E2A;&#x9700;&#x8981;&#x89E3;&#x51B3;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<ol>
<li>&#x5982;&#x4F55;&#x7EF4;&#x62A4;&#x6700;&#x503C;&#x3002;&#x5F53;&#x4E00;&#x4E2A;&#x9AD8;&#x697C;&#x7684;&#x53F3;&#x8FB9;&#x754C;&#x6D88;&#x5931;&#xFF0C;&#x5269;&#x4E0B;&#x7684;&#x5404;&#x4E2A;&#x5C0F;&#x697C;&#x95F4;&#x8FD8;&#x9700;&#x8981;&#x9009;&#x51FA;&#x6700;&#x5927;&#x503C;&#x4F5C;&#x4E3A;&#x5929;&#x9645;&#x7EBF;&#x3002;&#x5269;&#x4E0B;&#x91CD;&#x91CD;&#x53E0;&#x53E0;&#x7684;&#x5C0F;&#x697C;&#x5F88;&#x591A;&#xFF0C;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5982;&#x4F55;&#x7EF4;&#x62A4;&#x533A;&#x95F4;&#x6700;&#x503C;&#x662F;&#x89E3;&#x51B3;&#x6B64;&#x7C7B;&#x9898;&#x7684;&#x5173;&#x952E;&#x3002;</li>
<li>&#x5982;&#x4F55;&#x7EF4;&#x62A4;&#x5929;&#x9645;&#x7EBF;&#x7684;&#x8F6C;&#x6298;&#x70B9;&#x3002;&#x6709;&#x4E9B;&#x697C;&#x4E0E;&#x697C;&#x5E76;&#x975E;&#x5B8C;&#x5168;&#x91CD;&#x53E0;&#xFF0C;&#x91CD;&#x53E0;&#x4E00;&#x534A;&#x7684;&#x60C5;&#x51B5;&#x5BFC;&#x81F4;&#x5929;&#x9645;&#x7EBF;&#x51FA;&#x73B0;&#x8F6C;&#x6298;&#x70B9;&#x3002;&#x5982;&#x4E0A;&#x56FE;&#x4E2D;&#x6807;&#x8BB0;&#x7684;&#x7EA2;&#x8272;&#x8F6C;&#x6298;&#x70B9;&#x3002;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5982;&#x4F55;&#x7EF4;&#x62A4;&#x8FD9;&#x4E9B;&#x70B9;&#x5462;&#xFF1F;</li>
</ol>
<p>&#x5148;&#x89E3;&#x51B3;&#x7B2C;&#x4E00;&#x4E2A;&#x95EE;&#x9898;(&#x7EF4;&#x62A4;&#x6700;&#x503C;)&#x3002;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x53EA;&#x6709; 2 &#x4E2A;&#x64CD;&#x4F5C;&#xFF0C;&#x4E00;&#x4E2A;&#x662F; Add() &#x4E00;&#x4E2A;&#x662F; Query()&#x3002;&#x4ECE;&#x4E0A;&#x9762;&#x5173;&#x4E8E;&#x8FD9; 2 &#x4E2A;&#x64CD;&#x4F5C;&#x7684;&#x8BB2;&#x89E3;&#x4E2D;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#x8FD9; 2 &#x4E2A;&#x64CD;&#x4F5C;&#x90FD;&#x4E0D;&#x80FD;&#x6EE1;&#x8DB3;&#x6211;&#x4EEC;&#x7684;&#x9700;&#x6C42;&#x3002;Add() &#x64CD;&#x4F5C;&#x53EF;&#x4EE5;&#x6539;&#x6210;&#x7EF4;&#x62A4;&#x533A;&#x95F4;&#x5185; max() &#x7684;&#x64CD;&#x4F5C;&#x3002;&#x4F46;&#x662F; max() &#x5BB9;&#x6613;&#x83B7;&#x5F97;&#x5374;&#x5F88;&#x96BE;&#x201C;&#x53BB;&#x9664;&#x201D;&#x3002;&#x5982;&#x4E0A;&#x56FE; [3,7] &#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x5185;&#x7684;&#x6700;&#x5927;&#x503C;&#x662F; 15&#x3002;&#x6839;&#x636E;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x5B9A;&#x4E49;&#xFF0C;[3,12] &#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x5185;&#x6700;&#x503C;&#x8FD8;&#x662F; 15&#x3002;&#x89C2;&#x5BDF;&#x4E0A;&#x56FE;&#x53EF;&#x4EE5;&#x770B;&#x5230; [5,12] &#x533A;&#x95F4;&#x5185;&#x6700;&#x503C;&#x5176;&#x5B9E;&#x662F; 12&#x3002;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5982;&#x4F55;&#x7EF4;&#x62A4;&#x8FD9;&#x79CD;&#x6700;&#x503C;&#x5462;&#xFF1F;&#x6700;&#x5927;&#x503C;&#x65E2;&#x7136;&#x96BE;&#x4EE5;&#x201C;&#x53BB;&#x9664;&#x201D;&#xFF0C;&#x90A3;&#x4E48;&#x9700;&#x8981;&#x8003;&#x8651;&#x5982;&#x4F55;&#x8BA9;&#x6700;&#x5927;&#x503C;&#x201C;&#x6765;&#x7684;&#x665A;&#x4E00;&#x70B9;&#x201D;&#x3002;&#x89E3;&#x51B3;&#x529E;&#x6CD5;&#x662F;&#x5C06; Query() &#x64CD;&#x4F5C;&#x542B;&#x4E49;&#x4ECE;&#x524D;&#x7F00;&#x542B;&#x4E49;&#x6539;&#x6210;&#x540E;&#x7F00;&#x542B;&#x4E49;&#x3002;Query(i) &#x67E5;&#x8BE2;&#x533A;&#x95F4;&#x662F; [1,i]&#xFF0C;&#x73B0;&#x5728;&#x67E5;&#x8BE2;&#x533A;&#x95F4;&#x53D8;&#x6210;  $[i,+\infty) $&#x3002;&#x4F8B;&#x5982;&#xFF1A;[i,j] &#x533A;&#x95F4;&#x5185;&#x6700;&#x503C;&#x662F;  $max_{i...j} $&#xFF0C;Query(j+1) &#x7684;&#x7ED3;&#x679C;&#x4E0D;&#x4F1A;&#x5305;&#x542B;  $max_{i...j} $&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x67E5;&#x8BE2;&#x7684;&#x533A;&#x95F4;&#x662F;  $[j+1,+\infty) $&#x3002;&#x8FD9;&#x6837;&#x66F4;&#x6539;&#x4EE5;&#x540E;&#xFF0C;&#x53EF;&#x4EE5;&#x6709;&#x6548;&#x907F;&#x514D;&#x524D;&#x9A71;&#x9AD8;&#x697C;&#x5BF9;&#x540E;&#x9762;&#x697C;&#x7684;&#x7D2F;&#x79EF; max() &#x6700;&#x503C;&#x7684;&#x5F71;&#x54CD;&#x3002;</p>
<p>&#x5177;&#x4F53;&#x505A;&#x6CD5;&#xFF0C;&#x5C06; x &#x8F74;&#x4E0A;&#x7684;&#x5404;&#x4E2A;&#x533A;&#x95F4;&#x6392;&#x5E8F;&#xFF0C;&#x6309;&#x7167; x &#x503C;&#x5927;&#x5C0F;&#x4ECE;&#x5C0F;&#x5230;&#x5927;&#x6392;&#x5E8F;&#x3002;&#x4ECE;&#x5DE6;&#x5F80;&#x53F3;&#x4F9D;&#x6B21;&#x904D;&#x5386;&#x5404;&#x4E2A;&#x533A;&#x95F4;&#x3002;Add() &#x64CD;&#x4F5C;&#x542B;&#x4E49;&#x662F;&#x52A0;&#x5165;&#x6BCF;&#x4E2A;&#x533A;&#x95F4;&#x53F3;&#x8FB9;&#x754C;&#x4EE3;&#x8868;&#x540E;&#x7F00;&#x533A;&#x95F4;&#x7684;&#x6700;&#x503C;&#x3002;&#x8FD9;&#x6837;&#x4E0D;&#x9700;&#x8981;&#x8003;&#x8651;&#x201C;&#x79FB;&#x9664;&#x201D;&#x6700;&#x503C;&#x7684;&#x95EE;&#x9898;&#x4E86;&#x3002;&#x7EC6;&#x5FC3;&#x7684;&#x8BFB;&#x8005;&#x53EF;&#x80FD;&#x53C8;&#x6709;&#x7591;&#x95EE;&#x4E86;&#xFF1A;&#x80FD;&#x5426;&#x4ECE;&#x53F3;&#x5F80;&#x5DE6;&#x904D;&#x5386;&#x533A;&#x95F4;&#xFF0C;Query() &#x7684;&#x542B;&#x4E49;&#x7EE7;&#x7EED;&#x5EF6;&#x7EED;&#x524D;&#x7F00;&#x533A;&#x95F4;&#xFF1F;&#x8FD9;&#x6837;&#x505A;&#x662F;&#x53EF;&#x884C;&#x7684;&#xFF0C;&#x89E3;&#x51B3;&#x7B2C;&#x4E00;&#x4E2A;&#x95EE;&#x9898;(&#x7EF4;&#x62A4;&#x6700;&#x503C;)&#x662F;&#x53EF;&#x4EE5;&#x7684;&#x3002;&#x4F46;&#x662F;&#x8FD9;&#x79CD;&#x5904;&#x7406;&#x529E;&#x6CD5;&#x89E3;&#x51B3;&#x7B2C;&#x4E8C;&#x4E2A;&#x95EE;&#x9898;(&#x7EF4;&#x62A4;&#x8F6C;&#x6298;&#x70B9;)&#x4F1A;&#x9047;&#x5230;&#x9EBB;&#x70E6;&#x3002;</p>
<p>&#x518D;&#x89E3;&#x51B3;&#x7B2C;&#x4E8C;&#x4E2A;&#x95EE;&#x9898;(&#x7EF4;&#x62A4;&#x8F6C;&#x6298;&#x70B9;)&#x3002;&#x5982;&#x679C;&#x7528;&#x524D;&#x7F00;&#x542B;&#x4E49;&#x7684; Query()&#xFF0C;&#x5728;&#x5355;&#x70B9; i &#x4E0A;&#x9664;&#x4E86;&#x8003;&#x8651;&#x4EE5;&#x8FD9;&#x4E2A;&#x70B9;&#x4E3A;&#x7ED3;&#x675F;&#x70B9;&#x7684;&#x533A;&#x95F4;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x8003;&#x8651;&#x4EE5;&#x8FD9;&#x4E2A;&#x5355;&#x70B9; i &#x4E3A;&#x8D77;&#x70B9;&#x7684;&#x533A;&#x95F4;&#x3002;&#x5982;&#x679C;&#x662F;&#x540E;&#x7F00;&#x542B;&#x4E49;&#x7684; Query() &#x5C31;&#x6CA1;&#x6709;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x4E86;&#xFF0C; $[i+1,+\infty) $ &#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x5185;&#x4E0D;&#x7528;&#x8003;&#x8651;&#x4EE5;&#x5355;&#x70B9; i &#x4E3A;&#x7ED3;&#x675F;&#x70B9;&#x7684;&#x533A;&#x95F4;&#x3002;&#x6B64;&#x9898;&#x7528;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4EE3;&#x7801;&#x5B9E;&#x73B0;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">
const LEFTSIDE = 1
const RIGHTSIDE = 2

type Point struct {
	xAxis int
	side  int
	index int
}

func getSkyline3(buildings [][]int) [][]int {
	res := [][]int{}
	if len(buildings) == 0 {
		return res
	}
	allPoints, bit := make([]Point, 0), BinaryIndexedTree{}
	// [x-axis (value), [1 (left) | 2 (right)], index (building number)]
	for i, b := range buildings {
		allPoints = append(allPoints, Point{xAxis: b[0], side: LEFTSIDE, index: i})
		allPoints = append(allPoints, Point{xAxis: b[1], side: RIGHTSIDE, index: i})
	}
	sort.Slice(allPoints, func(i, j int) bool {
		if allPoints[i].xAxis == allPoints[j].xAxis {
			return allPoints[i].side &lt; allPoints[j].side
		}
		return allPoints[i].xAxis &lt; allPoints[j].xAxis
	})
	bit.Init(len(allPoints))
	kth := make(map[Point]int)
	for i := 0; i &lt; len(allPoints); i++ {
		kth[allPoints[i]] = i
	}
	for i := 0; i &lt; len(allPoints); i++ {
		pt := allPoints[i]
		if pt.side == LEFTSIDE {
			bit.Add(kth[Point{xAxis: buildings[pt.index][1], side: RIGHTSIDE, index: pt.index}], buildings[pt.index][2])
		}
		currHeight := bit.Query(kth[pt] + 1)
		if len(res) == 0 || res[len(res)-1][1] != currHeight {
			if len(res) &gt; 0 &amp;&amp; res[len(res)-1][0] == pt.xAxis {
				res[len(res)-1][1] = currHeight
			} else {
				res = append(res, []int{pt.xAxis, currHeight})
			}
		}
	}
	return res
}

type BinaryIndexedTree struct {
	tree     []int
	capacity int
}

// Init define
func (bit *BinaryIndexedTree) Init(capacity int) {
	bit.tree, bit.capacity = make([]int, capacity+1), capacity
}

// Add define
func (bit *BinaryIndexedTree) Add(index int, val int) {
	for ; index &gt; 0; index -= index &amp; -index {
		bit.tree[index] = max(bit.tree[index], val)
	}
}

// Query define
func (bit *BinaryIndexedTree) Query(index int) int {
	sum := 0
	for ; index &lt;= bit.capacity; index += index &amp; -index {
		sum = max(sum, bit.tree[index])
	}
	return sum
}

</code></pre>
<blockquote>
<p>&#x6B64;&#x9898;&#x8FD8;&#x53EF;&#x4EE5;&#x7528;&#x7EBF;&#x6BB5;&#x6811;&#x548C;&#x626B;&#x63CF;&#x7EBF;&#x89E3;&#x7B54;&#x3002;&#x626B;&#x63CF;&#x7EBF;&#x548C;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x89E3;&#x7B54;&#x6B64;&#x9898;&#xFF0C;&#x975E;&#x5E38;&#x5FEB;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x7A0D;&#x5FAE;&#x6162;&#x4E00;&#x4E9B;&#x3002;</p>
</blockquote>
<h2 id="%E4%B8%89-%E5%B8%B8%E8%A7%81%E5%BA%94%E7%94%A8">&#x4E09;. &#x5E38;&#x89C1;&#x5E94;&#x7528;</h2>
<p>&#x8FD9;&#x4E00;&#x7AE0;&#x8282;&#x6765;&#x8C08;&#x8C08;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x5E38;&#x89C1;&#x5E94;&#x7528;&#x3002;</p>
<h3 id="1-%E6%B1%82%E9%80%86%E5%BA%8F%E5%AF%B9">1. &#x6C42;&#x9006;&#x5E8F;&#x5BF9;</h3>
<p>&#x7ED9;&#x5B9A;  $ n  $ &#x4E2A;&#x6570;  $ A[n] \in [1,n]   $ &#x7684;&#x6392;&#x5217; P&#xFF0C;&#x6C42;&#x6EE1;&#x8DB3;  $i &lt; j  $ &#x4E14;  $ A[i] &gt; A[j]  $ &#x7684;&#x6570;&#x5BF9;  $ (i,j)  $ &#x7684;&#x4E2A;&#x6570;&#x3002;</p>
<p>&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x5C31;&#x662F;&#x7ECF;&#x5178;&#x7684;&#x9006;&#x5E8F;&#x6570;&#x95EE;&#x9898;&#xFF0C;&#x5982;&#x679C;&#x91C7;&#x7528;&#x6734;&#x7D20;&#x7B97;&#x6CD5;&#xFF0C;&#x5C31;&#x662F;&#x679A;&#x4E3E; i &#x548C; j&#xFF0C;&#x5E76;&#x4E14;&#x5224;&#x65AD;   A[i] &#x548C; A[j] &#x7684;&#x503C;&#x8FDB;&#x884C;&#x6570;&#x503C;&#x7EDF;&#x8BA1;&#xFF0C;&#x5982;&#x679C; A[i] &gt; A[j] &#x5219;&#x8BA1;&#x6570;&#x5668;&#x52A0;&#x4E00;&#xFF0C;&#x7EDF;&#x8BA1;&#x5B8C;&#x540E;&#x8BA1;&#x6570;&#x5668;&#x7684;&#x503C;&#x5C31;&#x662F;&#x7B54;&#x6848;&#x3002;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A;  $ O(n^{2})  $&#xFF0C;&#x8FD9;&#x4E2A;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x592A;&#x9AD8;&#xFF0C;&#x662F;&#x5426;&#x5B58;&#x5728;  $ O(log n)  $ &#x7684;&#x89E3;&#x6CD5;&#x5462;&#xFF1F;</p>
<blockquote>
<p>&#x5982;&#x679C;&#x9898;&#x76EE;&#x6362;&#x6210;  $ A[n] \in [1,10^{10}]   $&#xFF0C;&#x89E3;&#x9898;&#x601D;&#x8DEF;&#x4E0D;&#x53D8;&#xFF0C;&#x53EA;&#x4E0D;&#x8FC7;&#x4E00;&#x5F00;&#x59CB;&#x518D;&#x591A;&#x52A0;&#x4E00;&#x6B65;&#xFF0C;&#x79BB;&#x6563;&#x5316;&#x7684;&#x64CD;&#x4F5C;&#x3002;</p>
</blockquote>
<p>&#x5047;&#x8BBE;&#x7B2C;&#x4E00;&#x6B65;&#x9700;&#x8981;&#x79BB;&#x6563;&#x5316;&#x3002;&#x5148;&#x628A;&#x6570;&#x5217;&#x4E2D;&#x7684;&#x6570;&#x6309;&#x5927;&#x5C0F;&#x987A;&#x5E8F;&#x8F6C;&#x5316;&#x6210; 1 &#x5230; n &#x7684;&#x6574;&#x6570;&#xFF0C;&#x5C06;&#x91CD;&#x590D;&#x7684;&#x6570;&#x636E;&#x7F16;&#x76F8;&#x540C;&#x7684;&#x53F7;&#xFF0C;&#x5C06;&#x7A7A;&#x7F3A;&#x7684;&#x6570;&#x636E;&#x7F16;&#x4E0A;&#x8FDE;&#x7EED;&#x7684;&#x53F7;&#x3002;&#x4F7F;&#x5F97;&#x539F;&#x6570;&#x5217;&#x6620;&#x5C04;&#x6210;&#x4E3A;&#x4E00;&#x4E2A; 1,2,...,n &#x7684;&#x6570;&#x7EC4; B&#x3002;&#x6CE8;&#x610F;&#xFF0C;&#x6570;&#x7EC4; B &#x4E2D;&#x5B58;&#x7684;&#x5143;&#x7D20;&#x4E5F;&#x662F;&#x4E71;&#x5E8F;&#x7684;&#xFF0C;&#x662F;&#x6839;&#x636E;&#x539F;&#x6570;&#x7EC4;&#x6620;&#x5C04;&#x800C;&#x6765;&#x7684;&#x3002;&#x4F8B;&#x5982;&#x539F;&#x6570;&#x7EC4;&#x662F; int[9,8,5,4,6,2,3,8,7,0]&#xFF0C;&#x6570;&#x7EC4;&#x4E2D; 8 &#x662F;&#x91CD;&#x590D;&#x7684;&#xFF0C;&#x4E14;&#x5C11;&#x4E86;&#x6570;&#x5B57; 1&#xFF0C;&#x5C06;&#x8FD9;&#x4E2A;&#x6570;&#x7EC4;&#x6620;&#x5C04;&#x5230; [1,9] &#x533A;&#x95F4;&#x5185;&#xFF0C;&#x8C03;&#x6574;&#x540E;&#x7684;&#x6570;&#x7EC4; B &#x4E3A; int[9,8,5,4,6,2,3,8,7,1]&#x3002;</p>
<p>&#x518D;&#x521B;&#x5EFA;&#x4E00;&#x4E2A;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#xFF0C;&#x7528;&#x6765;&#x8BB0;&#x5F55;&#x8FD9;&#x6837;&#x4E00;&#x4E2A;&#x6570;&#x7EC4; C&#xFF08;&#x4E0B;&#x6807;&#x4ECE;1&#x7B97;&#x8D77;&#xFF09;&#x7684;&#x524D;&#x7F00;&#x548C;&#xFF1A;&#x82E5; [1, N] &#x8FD9;&#x4E2A;&#x6392;&#x5217;&#x4E2D;&#x7684;&#x6570; i &#x5F53;&#x524D;&#x5DF2;&#x7ECF;&#x51FA;&#x73B0;&#xFF0C;&#x5219; C[i] &#x7684;&#x503C;&#x4E3A; 1 &#xFF0C;&#x5426;&#x5219;&#x4E3A; 0&#x3002;&#x521D;&#x59CB;&#x65F6;&#x6570;&#x7EC4; C &#x7684;&#x503C;&#x5747;&#x4E3A; 0&#x3002;&#x4ECE;&#x6570;&#x7EC4; B &#x7B2C;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x5F00;&#x59CB;&#x904D;&#x5386;&#xFF0C;&#x5BF9;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x6267;&#x884C;&#x4FEE;&#x6539;&#x6570;&#x7EC4; C &#x7684;&#x7B2C; B[j] &#x4E2A;&#x6570;&#x503C;&#x52A0; 1 &#x7684;&#x64CD;&#x4F5C;&#x3002;&#x518D;&#x5728;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#x67E5;&#x8BE2;&#x6709;&#x591A;&#x5C11;&#x4E2A;&#x6570;&#x5C0F;&#x4E8E;&#x7B49;&#x4E8E;&#x5F53;&#x524D;&#x7684;&#x6570; B[j]&#xFF08;&#x5373;&#x7528;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x67E5;&#x8BE2;&#x6570;&#x7EC4; C &#x4E2D;&#x7684; [1,B[j]] &#x533A;&#x95F4;&#x524D;&#x7F00;&#x548C;&#xFF09;&#xFF0C;&#x5F53;&#x524D;&#x63D2;&#x5165;&#x603B;&#x6570; i &#x51CF;&#x53BB;&#x5C0F;&#x4E8E;&#x7B49;&#x4E8E; B[j] &#x5143;&#x7D20;&#x603B;&#x6570;&#xFF0C;&#x5DEE;&#x503C;&#x5373;&#x4E3A;&#x5927;&#x4E8E; B[j] &#x5143;&#x7D20;&#x7684;&#x4E2A;&#x6570;&#xFF0C;&#x5E76;&#x52A0;&#x5165;&#x8BA1;&#x6570;&#x5668;&#x3002;</p>
<pre><code class="language-go">func reversePairs(nums []int) int {
	if len(nums) &lt;= 1 {
		return 0
	}
	arr, newPermutation, bit, res := make([]Element, len(nums)), make([]int, len(nums)), template.BinaryIndexedTree{}, 0
	for i := 0; i &lt; len(nums); i++ {
		arr[i].data = nums[i]
		arr[i].pos = i
	}
	sort.Slice(arr, func(i, j int) bool {
		if arr[i].data == arr[j].data {
			if arr[i].pos &lt; arr[j].pos {
				return true
			} else {
				return false
			}
		}
		return arr[i].data &lt; arr[j].data
	})
	id := 1
	newPermutation[arr[0].pos] = 1
	for i := 1; i &lt; len(arr); i++ {
		if arr[i].data == arr[i-1].data {
			newPermutation[arr[i].pos] = id
		} else {
			id++
			newPermutation[arr[i].pos] = id
		}
	}
	bit.Init(id)
	for i := 0; i &lt; len(newPermutation); i++ {
		bit.Add(newPermutation[i], 1)
		res += (i + 1) - bit.Query(newPermutation[i])
	}
	return res
}
</code></pre>
<p>&#x4E0A;&#x8FF0;&#x4EE3;&#x7801;&#x4E2D;&#x7684; newPermutation &#x5C31;&#x662F;&#x6620;&#x5C04;&#x8C03;&#x6574;&#x540E;&#x7684;&#x6570;&#x7EC4; B&#x3002;&#x904D;&#x5386;&#x6570;&#x7EC4; B&#xFF0C;&#x6309;&#x987A;&#x5E8F;&#x628A;&#x5143;&#x7D20;&#x63D2;&#x5165;&#x5230;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#x3002;&#x4F8B;&#x5982;&#x6570;&#x7EC4; B &#x662F; int[9,8,5,4,6,2,3,8,7,1]&#xFF0C;&#x73B0;&#x5728;&#x5F80;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#x63D2;&#x5165; 6&#xFF0C;&#x4EE3;&#x8868; 6 &#x8FD9;&#x4E2A;&#x5143;&#x7D20;&#x51FA;&#x73B0;&#x4E86;&#x3002;query() &#x67E5;&#x8BE2; [1,6] &#x533A;&#x95F4;&#x5185;&#x662F;&#x5426;&#x6709;&#x5143;&#x7D20;&#x51FA;&#x73B0;&#xFF0C;&#x533A;&#x95F4;&#x524D;&#x7F00;&#x548C;&#x4EE3;&#x8868;&#x533A;&#x95F4;&#x5185;&#x5143;&#x7D20;&#x51FA;&#x73B0;&#x6B21;&#x6570;&#x548C;&#x3002;&#x5982;&#x679C;&#x6709; k &#x4E2A;&#x5143;&#x7D20;&#x51FA;&#x73B0;&#xFF0C;&#x4E14;&#x5F53;&#x524D;&#x63D2;&#x5165;&#x4E86; 5 &#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x90A3;&#x4E48; 5-k &#x7684;&#x5DEE;&#x503C;&#x5373;&#x662F;&#x9006;&#x5E8F;&#x7684;&#x5143;&#x7D20;&#x4E2A;&#x6570;&#xFF0C;&#x8FD9;&#x4E9B;&#x5143;&#x7D20;&#x4E00;&#x5B9A;&#x6BD4; 6 &#x5927;&#x3002;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x662F;&#x6B63;&#x5E8F;&#x6784;&#x9020;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x3002;</p>
<p>&#x8FD8;&#x6709;&#x4E00;&#x79CD;&#x65B9;&#x6CD5;&#x662F;&#x5012;&#x5E8F;&#x6784;&#x9020;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x3002;&#x4F8B;&#x5982;&#x4E0B;&#x9762;&#x4EE3;&#x7801;&#xFF1A;</p>
<pre><code class="language-go">	for i := len(s) - 1; i &gt; 0; i-- {
		bit.Add(newPermutation[i], 1)
		res += bit.Query(newPermutation[i] - 1)
	}
</code></pre>
<p>&#x7531;&#x4E8E;&#x662F;&#x5012;&#x5E8F;&#x63D2;&#x5165;&#xFF0C;&#x6BCF;&#x6B21; Query &#x4E4B;&#x524D;&#x7684;&#x5143;&#x7D20;&#x4E0B;&#x6807;&#x4E00;&#x5B9A;&#x6BD4;&#x5F53;&#x524D; i &#x8981;&#x5927;&#x3002;&#x4E0B;&#x6807;&#x6BD4; i &#x5927;&#xFF0C;&#x5143;&#x7D20;&#x503C;&#x6BD4; A[i] &#x5C0F;&#xFF0C;&#x8FD9;&#x6837;&#x7684;&#x5143;&#x7D20;&#x548C; i &#x53EF;&#x4EE5;&#x6784;&#x6210;&#x9006;&#x5E8F;&#x5BF9;&#x3002;Query &#x67E5;&#x627E; [1, B[j]] &#x533A;&#x95F4;&#x5185;&#x5143;&#x7D20;&#x603B;&#x4E2A;&#x6570;&#xFF0C;&#x5373;&#x4E3A;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x603B;&#x6570;&#x3002;</p>
<blockquote>
<p>&#x6CE8;&#x610F;&#xFF0C;&#x8BA1;&#x7B97;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x65F6;&#x5019;&#x4E0D;&#x8981;&#x7B97;&#x91CD;&#x590D;&#x4E86;&#x3002;&#x6BD4;&#x5982;&#xFF0C;&#x8BA1;&#x7B97;&#x5F53;&#x524D; j &#x4E0B;&#x6807;&#x524D;&#x9762;&#x6BD4; B[j] &#x503C;&#x5927;&#x7684;&#x6570;&#xFF0C;&#x53C8;&#x7B97;&#x4E0A; j &#x4E0B;&#x6807;&#x540E;&#x9762;&#x6BD4; B[j] &#x503C;&#x5C0F;&#x7684;&#x6570;&#x3002;&#x8FD9;&#x6837;&#x8BA1;&#x7B97;&#x51FA;&#x73B0;&#x4E86;&#x5F88;&#x591A;&#x91CD;&#x590D;&#x3002;&#x56E0;&#x4E3A; j &#x4E0B;&#x6807;&#x524D;&#x9762;&#x7684;&#x4E0B;&#x6807; k&#xFF0C;&#x4E5F;&#x4F1A;&#x5BFB;&#x627E; k &#x4E0B;&#x6807;&#x540E;&#x9762;&#x6BD4; B[k] &#x503C;&#x5C0F;&#x7684;&#x6570;&#xFF0C;&#x91CD;&#x590D;&#x8BA1;&#x7B97;&#x4E86;&#x3002;&#x90A3;&#x4E48;&#x7EDF;&#x4E00;&#x627E;&#x6BD4;&#x81EA;&#x5DF1;&#x4E0B;&#x6807;&#x5C0F;&#xFF0C;&#x4F46;&#x662F;&#x503C;&#x5927;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x90A3;&#x4E48;&#x7EDF;&#x4E00;&#x627E;&#x6BD4;&#x81EA;&#x5DF1;&#x4E0B;&#x6807;&#x5927;&#xFF0C;&#x4F46;&#x662F;&#x503C;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#x3002;&#x5207;&#x52FF;&#x4EA4;&#x53C9;&#x8BA1;&#x7B97;&#x3002;</p>
</blockquote>
<blockquote>
<p>LeetCode &#x5BF9;&#x5E94;&#x9898;&#x76EE;&#x662F; <a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0315.Count-of-Smaller-Numbers-After-Self/">315. Count of Smaller Numbers After Self</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/0400~0499/0493.Reverse-Pairs/">493. Reverse Pairs</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/1600~1699/1649.Create-Sorted-Array-through-Instructions/">1649. Create Sorted Array through Instructions</a></p>
</blockquote>
<h3 id="2-%E6%B1%82%E5%8C%BA%E9%97%B4%E9%80%86%E5%BA%8F%E5%AF%B9">2. &#x6C42;&#x533A;&#x95F4;&#x9006;&#x5E8F;&#x5BF9;</h3>
<p>&#x7ED9;&#x5B9A;  $ n  $ &#x4E2A;&#x6570;&#x7684;&#x5E8F;&#x5217;  $ A[n] \in [1,2^{31}-1]  $&#xFF0C;&#x7136;&#x540E;&#x7ED9;&#x51FA;  $ n \in [1,10^{5}]  $ &#x6B21;&#x8BE2;&#x95EE;  $ [L,R]  $&#xFF0C;&#x6BCF;&#x6B21;&#x8BE2;&#x95EE;&#x533A;&#x95F4;  $ [L,R]  $ &#x4E2D;&#x6EE1;&#x8DB3;  $ L \leqslant i &lt; j \leqslant R  $ &#x4E14;  $ A[i] &gt; A[j]  $ &#x7684;&#x4E0B;&#x6807;  $ (i,j)  $ &#x7684;&#x5BF9;&#x6570;&#x3002;</p>
<p>&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x6BD4;&#x4E0A;&#x4E00;&#x9898;&#x591A;&#x4E86;&#x4E00;&#x4E2A;&#x533A;&#x95F4;&#x9650;&#x5236;&#x3002;&#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x7684;&#x9650;&#x5236;&#x5F71;&#x54CD;&#x5BF9;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x9009;&#x62E9;&#x3002;&#x4F8B;&#x5982;&#xFF1A;[1,3,5,2,1,1,8,9,8,6,5,3,7,7,2]&#xFF0C;&#x6C42;&#x5728; [3,7] &#x533A;&#x95F4;&#x5185;&#x7684;&#x9006;&#x5E8F;&#x6570;&#x3002;&#x5143;&#x7D20; 2 &#x5728;&#x533A;&#x95F4;&#x5185;&#xFF0C;&#x6BD4;&#x5143;&#x7D20; 2 &#x5927;&#x7684;&#x5143;&#x7D20;&#x53EA;&#x6709; 2 &#x4E2A;&#x3002;&#x5143;&#x7D20; 3 &#x548C; 5 &#x5728;&#x533A;&#x95F4;&#x5916;&#xFF0C;&#x6240;&#x4EE5; 3 &#x548C; 5 &#x4E0D;&#x80FD;&#x53C2;&#x4E0E;&#x9006;&#x5E8F;&#x6570;&#x7684;&#x7EDF;&#x8BA1;&#x3002;&#x6BD4;&#x5143;&#x7D20; 2 &#x5C0F;&#x7684;&#x5143;&#x7D20;&#x4E5F;&#x53EA;&#x6709; 2 &#x4E2A;&#xFF0C;&#x9EC4;&#x8272;&#x6807;&#x8BC6;&#x7684; 3 &#x4E2A; 1 &#x90FD;&#x6BD4; 2 &#x5C0F;&#xFF0C;&#x4F46;&#x662F;&#x7B2C;&#x4E00;&#x4E2A; 1 &#x4E0D;&#x80FD;&#x7B97;&#x5728;&#x5185;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x5728;&#x533A;&#x95F4;&#x5916;&#x3002;</p>
<p>&#x5148;&#x5C06;&#x6240;&#x6709;&#x67E5;&#x8BE2;&#x533A;&#x95F4;&#x6309;&#x7167;&#x53F3;&#x7AEF;&#x70B9;&#x5355;&#x8C03;&#x4E0D;&#x51CF;&#x6392;&#x5E8F;&#xFF0C;&#x5982;&#x4E0B;&#x56FE;&#x6240;&#x793A;&#x3002;</p>
<blockquote>
<p>&#x8FD9;&#x91CC;&#x4E5F;&#x53EF;&#x4EE5;&#x6309;&#x7167;&#x67E5;&#x8BE2;&#x533A;&#x95F4;&#x5DE6;&#x7AEF;&#x70B9;&#x5355;&#x8C03;&#x4E0D;&#x589E;&#x6392;&#x5E8F;&#x3002;&#x5982;&#x679C;&#x8FD9;&#x6837;&#x6392;&#x5E8F;&#xFF0C;&#x4E0B;&#x9762;&#x6784;&#x5EFA;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x9700;&#x8981;&#x5012;&#x5E8F;&#x63D2;&#x5165;&#x3002;&#x5E76;&#x4E14;&#x67E5;&#x627E;&#x7684;&#x662F;&#x4E0B;&#x6807;&#x9760;&#x540E;&#x4F46;&#x662F;&#x5143;&#x7D20;&#x503C;&#x5C0F;&#x7684;&#x9006;&#x5E8F;&#x5BF9;&#x3002;&#x4E24;&#x8005;&#x65B9;&#x6CD5;&#x90FD;&#x53EF;&#x4EE5;&#x5B9E;&#x73B0;&#xFF0C;&#x8FD9;&#x91CC;&#x8BB2;&#x89E3;&#x9009;&#x5176;&#x4E2D;&#x4E00;&#x79CD;&#x3002;</p>
</blockquote>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/152_1_0.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree" loading="lazy"></p>
<p>&#x603B;&#x7684;&#x533A;&#x95F4;&#x8986;&#x76D6;&#x7684;&#x8303;&#x56F4;&#x51B3;&#x5B9A;&#x4E86;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5F85;&#x63D2;&#x5165;&#x6570;&#x5B57;&#x7684;&#x8303;&#x56F4;&#x3002;&#x5982;&#x4E0A;&#x56FE;&#xFF0C;&#x603B;&#x7684;&#x533A;&#x95F4;&#x4F4D;&#x4E8E; [1,12]&#xFF0C;&#x90A3;&#x4E48;&#x4E0B;&#x6807;&#x4E3A; 0&#xFF0C;13&#xFF0C;14 &#x7684;&#x5143;&#x7D20;&#x4E0D;&#x9700;&#x8981;&#x7406;&#x4F1A;&#xFF0C;&#x5B83;&#x4EEC;&#x4E0D;&#x4F1A;&#x88AB;&#x7528;&#x5230;&#xFF0C;&#x6240;&#x4EE5;&#x4E5F;&#x4E0D;&#x7528;&#x63D2;&#x5165;&#x5230;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#x3002;</p>
<p>&#x6C42;&#x533A;&#x95F4;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x8FC7;&#x7A0B;&#x4E2D;&#x8FD8;&#x9700;&#x8981;&#x5229;&#x7528;&#x5230;&#x4E00;&#x4E2A;&#x8F85;&#x52A9;&#x6570;&#x7EC4; C[k]&#xFF0C;&#x8FD9;&#x4E2A;&#x6570;&#x7EC4;&#x7684;&#x542B;&#x4E49;&#x662F;&#x4E0B;&#x6807;&#x4E3A; k &#x7684;&#x5143;&#x7D20;&#xFF0C;&#x5728;&#x63D2;&#x5165;&#x5230;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E4B;&#x524D;&#xFF0C;&#x6BD4; A[k] &#x503C;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#x6709;&#x51E0;&#x4E2A;&#x3002;&#x4E3E;&#x4E2A;&#x4F8B;&#x5B50;&#xFF0C;&#x4F8B;&#x5982;&#x4E0B;&#x6807;&#x4E3A;  7 &#x7684;&#x5143;&#x7D20;&#x503C;&#x4E3A; 9 &#x3002;C[7] = 6&#xFF0C;&#x56E0;&#x4E3A;&#x5F53;&#x524D;&#x6BD4; 9 &#x5C0F;&#x7684;&#x5143;&#x7D20;&#x662F; 3&#xFF0C;5&#xFF0C;2&#xFF0C;1&#xFF0C;1&#xFF0C;8&#x3002;&#x8FD9;&#x4E2A;&#x8F85;&#x52A9;&#x6570;&#x7EC4; C[k] &#x7684;&#x610F;&#x4E49;&#x662F;&#x627E;&#x5230;&#x4E0B;&#x6807;&#x6BD4;&#x5B83;&#x5C0F;&#xFF0C;&#x4E14;&#x5143;&#x7D20;&#x503C;&#x4E5F;&#x6BD4;&#x5B83;&#x5C0F;&#x7684;&#x5143;&#x7D20;&#x4E2A;&#x6570;&#x3002;</p>
<p>&#x7531;&#x4E8E;&#x8FD9;&#x91CC;&#x9009;&#x62E9;&#x533A;&#x95F4;&#x53F3;&#x533A;&#x95F4;&#x6392;&#x5E8F;&#xFF0C;&#x6240;&#x4EE5;&#x6784;&#x9020;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x63D2;&#x5165;&#x662F;&#x987A;&#x5E8F;&#x63D2;&#x5165;&#x3002;&#x8FD9;&#x6837;&#x533A;&#x95F4;&#x4ECE;&#x5DE6;&#x6709;&#x53F3;&#x7684;&#x67E5;&#x8BE2;&#x53EF;&#x4EE5;&#x4F9D;&#x6B21;&#x5F97;&#x5230;&#x7ED3;&#x679C;&#x3002;&#x5982;&#x4E0A;&#x56FE;&#x4E2D;&#x6700;&#x4E0B;&#x4E00;&#x884C;&#x7684;&#x56FE;&#x793A;&#xFF0C;&#x5047;&#x8BBE;&#x5F53;&#x524D;&#x67E5;&#x8BE2;&#x5230;&#x4E86;&#x7B2C; 4 &#x4E2A;&#x533A;&#x95F4;&#x3002;&#x7B2C; 4 &#x4E2A;&#x533A;&#x95F4;&#x5305;&#x542B;&#x5143;&#x7D20;&#x503C; 1,8,9,8,6,5 &#x3002;&#x5F53;&#x524D;&#x4ECE;&#x5DE6;&#x5F80;&#x53F3;&#x63D2;&#x5165;&#x6784;&#x9020;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#xFF0C;&#x5DF2;&#x7ECF;&#x63D2;&#x5165;&#x4E86;&#x4E0B;&#x6807;&#x4E3A; [1,10] &#x533A;&#x95F4;&#x7684;&#x5143;&#x7D20;&#x503C;&#xFF0C;&#x5373;&#x5982;&#x56FE;&#x663E;&#x793A;&#x63D2;&#x5165;&#x7684;&#x6570;&#x503C;&#x3002;&#x73B0;&#x5728;&#x904D;&#x5386;&#x67E5;&#x8BE2;&#x533A;&#x95F4;&#x5185;&#x6240;&#x6709;&#x5143;&#x7D20;&#xFF0C;Query(A[i] - 1) - C[i] &#x5373;&#x4E3A;&#x4E0B;&#x6807; i &#x5728;&#x5F53;&#x524D;&#x67E5;&#x8BE2;&#x533A;&#x95F4;&#x5185;&#x7684;&#x9006;&#x5E8F;&#x5BF9;&#x603B;&#x4E2A;&#x6570;&#x3002;&#x4F8B;&#x5982;&#x5143;&#x7D20; 9&#xFF1A;</p>
<div>
$$
\begin{aligned}
Query(A[i] - 1) - C[i] &amp;=  Query(A[7] - 1) - C[7]  \\
&amp;= Query(9 - 1) - C[7] = Query(8) - C[7]\\
&amp;= 9 - 6 = 3\\
\end{aligned}
$$
</div>
<p>&#x63D2;&#x5165; A[i] &#x5143;&#x7D20;&#x6784;&#x9020;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x5728;&#x5148;&#xFF0C;Query() &#x67E5;&#x8BE2;&#x9488;&#x5BF9;&#x5F53;&#x524D;&#x5168;&#x5C40;&#x60C5;&#x51B5;&#xFF0C;&#x5373;&#x67E5;&#x8BE2;&#x4E0B;&#x6807; [1,10] &#x533A;&#x95F4;&#x5185;&#x6240;&#x6709;&#x6BD4;&#x5143;&#x7D20; 9 &#x5C0F;&#x7684;&#x5143;&#x7D20;&#x603B;&#x6570;&#xFF0C;&#x4E0D;&#x96BE;&#x53D1;&#x73B0;&#x6240;&#x6709;&#x5143;&#x7D20;&#x90FD;&#x6BD4;&#x5143;&#x7D20; 9 &#x5C0F;&#xFF0C;&#x90A3;&#x4E48; Query(A[i] - 1) &#x5F97;&#x5230;&#x7684;&#x7ED3;&#x679C;&#x662F; 9&#x3002;C[7] &#x662F;&#x5143;&#x7D20; 9 &#x63D2;&#x5165;&#x5230;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E4B;&#x524D;&#x6BD4;&#x5143;&#x7D20; 9 &#x5C0F;&#x7684;&#x5143;&#x7D20;&#x603B;&#x6570;&#xFF0C;&#x662F; 6&#x3002;&#x4E24;&#x8005;&#x76F8;&#x51CF;&#xFF0C;&#x6700;&#x7EC8;&#x7ED3;&#x679C;&#x662F; 9 - 6 = 3&#x3002;&#x770B;&#x4E0A;&#x56FE;&#x4E5F;&#x5F88;&#x5BB9;&#x6613;&#x770B;&#x51FA;&#x6765;&#x7ED3;&#x679C;&#x662F;&#x6B63;&#x786E;&#x7684;&#xFF0C;&#x5728;&#x533A;&#x95F4;&#x5185;&#x6BD4; 9 &#x4E0B;&#x6807;&#x503C;&#x5927;&#x4E14;&#x5143;&#x7D20;&#x503C;&#x6BD4; 9 &#x5C0F;&#x7684;&#x53EA;&#x6709; 3 &#x4E2A;&#xFF0C;&#x5206;&#x522B;&#x5BF9;&#x5E94;&#x7684;&#x4E0B;&#x6807;&#x662F; 8&#xFF0C;9&#xFF0C;10&#xFF0C;&#x5BF9;&#x5E94;&#x7684;&#x5143;&#x7D20;&#x503C;&#x662F; 8&#xFF0C;6&#xFF0C;5&#x3002;</p>
<p>&#x603B;&#x7ED3;&#xFF1A;</p>
<ol>
<li>&#x79BB;&#x6563;&#x5316;&#x6570;&#x7EC4; A[i]</li>
<li>&#x5BF9;&#x6240;&#x6709;&#x533A;&#x95F4;&#x6309;&#x7167;&#x53F3;&#x7AEF;&#x70B9;&#x5355;&#x8C03;&#x4E0D;&#x51CF;&#x6392;&#x5E8F;</li>
<li>&#x6309;&#x7167;&#x533A;&#x95F4;&#x6392;&#x5E8F;&#x540E;&#x7684;&#x7ED3;&#x679C;&#xFF0C;&#x4ECE;&#x5DE6;&#x5F80;&#x53F3;&#x4F9D;&#x6B21;&#x904D;&#x5386;&#x6BCF;&#x4E2A;&#x533A;&#x95F4;&#x3002;&#x4F9D;&#x7167;&#x4ECE;&#x5DE6;&#x5F80;&#x53F3;&#x7684;&#x533A;&#x95F4;&#x8986;&#x76D6;&#x5143;&#x7D20;&#x8303;&#x56F4;&#xFF0C;&#x4ECE;&#x5DE6;&#x5F80;&#x53F3;&#x5C06; A[i] &#x63D2;&#x5165;&#x81F3;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x4E2D;&#xFF0C;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x63D2;&#x5165;&#x4E4B;&#x524D;&#x8BA1;&#x7B97;&#x8F85;&#x52A9;&#x6570;&#x7EC4; C[i]&#x3002;</li>
<li>&#x4F9D;&#x6B21;&#x904D;&#x5386;&#x6BCF;&#x4E2A;&#x533A;&#x95F4;&#x5185;&#x7684;&#x6240;&#x6709;&#x5143;&#x7D20;&#xFF0C;&#x5BF9;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x8BA1;&#x7B97; Query(A[i] - 1) - C[i]&#xFF0C;&#x7D2F;&#x52A0;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x7ED3;&#x679C;&#x5373;&#x662F;&#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x6240;&#x6709;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x603B;&#x6570;&#x3002;</li>
</ol>
<h3 id="3-%E6%B1%82%E6%A0%91%E4%B8%8A%E9%80%86%E5%BA%8F%E5%AF%B9">3. &#x6C42;&#x6811;&#x4E0A;&#x9006;&#x5E8F;&#x5BF9;</h3>
<p>&#x7ED9;&#x5B9A;  $ n \in [0,10^{5}]  $ &#x4E2A;&#x7ED3;&#x70B9;&#x7684;&#x6811;&#xFF0C;&#x6C42;&#x6BCF;&#x4E2A;&#x7ED3;&#x70B9;&#x7684;&#x5B50;&#x6811;&#x4E2D;&#x7ED3;&#x70B9;&#x7F16;&#x53F7;&#x6BD4;&#x5B83;&#x5C0F;&#x7684;&#x6570;&#x7684;&#x4E2A;&#x6570;&#x3002;</p>
<p>&#x6811;&#x4E0A;&#x9006;&#x5E8F;&#x5BF9;&#x7684;&#x95EE;&#x9898;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x6811;&#x7684;&#x5148;&#x5E8F;&#x904D;&#x5386;&#x53EF;&#x4EE5;&#x5C06;&#x6811;&#x8F6C;&#x6362;&#x6210;&#x6570;&#x7EC4;&#xFF0C;&#x4EE4;&#x6811;&#x4E0A;&#x7684;&#x67D0;&#x4E2A;&#x7ED3;&#x70B9; i&#xFF0C;&#x5148;&#x5E8F;&#x904D;&#x5386;&#x5230;&#x7684;&#x987A;&#x5E8F;&#x4E3A; pre[i]&#xFF0C;i &#x7684;&#x5B50;&#x7ED3;&#x70B9;&#x4E2A;&#x6570;&#x4E3A; a[i]&#xFF0C;&#x5219;&#x8F6C;&#x6362;&#x6210;&#x6570;&#x7EC4;&#x540E; i &#x7BA1;&#x7406;&#x7684;&#x533A;&#x95F4;&#x4E3A; [pre[i], pre[i] + a[i] - 1]&#xFF0C;&#x7136;&#x540E;&#x5C31;&#x53EF;&#x4EE5;&#x8F6C;&#x6362;&#x6210;&#x533A;&#x95F4;&#x9006;&#x5E8F;&#x5BF9;&#x95EE;&#x9898;&#x8FDB;&#x884C;&#x6C42;&#x89E3;&#x4E86;&#x3002;</p>
<h2 id="%E5%9B%9B-%E4%BA%8C%E7%BB%B4%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84">&#x56DB;. &#x4E8C;&#x7EF4;&#x6811;&#x72B6;&#x6570;&#x7EC4;</h2>
<p>&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x53EF;&#x4EE5;&#x6269;&#x5C55;&#x5230;&#x4E8C;&#x7EF4;&#x3001;&#x4E09;&#x7EF4;&#x6216;&#x8005;&#x66F4;&#x9AD8;&#x7EF4;&#x3002;&#x4E8C;&#x7EF4;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x53EF;&#x4EE5;&#x89E3;&#x51B3;&#x79BB;&#x6563;&#x5E73;&#x9762;&#x4E0A;&#x7684;&#x7EDF;&#x8BA1;&#x95EE;&#x9898;&#x3002;</p>
<pre><code class="language-go">// BinaryIndexedTree2D define
type BinaryIndexedTree2D struct {
	tree [][]int
	row  int
	col  int
}

// Add define
func (bit2 *BinaryIndexedTree2D) Add(i, j int, val int) {
	for i &lt;= bit2.row {
		k := j
		for k &lt;= bit2.col {
			bit2.tree[i][k] += val
			k += lowbit(k)
		}
		i += lowbit(i)
	}
}

// Query define
func (bit2 *BinaryIndexedTree2D) Query(i, j int) int {
	sum := 0
	for i &gt;= 1 {
		k := j
		for k &gt;= 1 {
			sum += bit2.tree[i][k]
			k -= lowbit(k)
		}
		i -= lowbit(i)
	}
	return sum
}
</code></pre>
<p>&#x5982;&#x679C;&#x628A;&#x4E00;&#x7EF4;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7EF4;&#x62A4;&#x7684;&#x662F;&#x6570;&#x8F74;&#x4E0A;&#x7684;&#x7EDF;&#x8BA1;&#x95EE;&#x9898;&#xFF0C;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/152_2.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree" loading="lazy"></p>
<p>&#x90A3;&#x4E48;&#x4E8C;&#x7EF4;&#x6570;&#x7EC4;&#x7EF4;&#x62A4;&#x7684;&#x662F;&#x4E8C;&#x7EF4;&#x5750;&#x6807;&#x7CFB;&#x4E0B;&#x7684;&#x7EDF;&#x8BA1;&#x95EE;&#x9898;&#x3002;X &#x548C; Y &#x5206;&#x522B;&#x90FD;&#x6EE1;&#x8DB3;&#x4E00;&#x7EF4;&#x6811;&#x72B6;&#x6570;&#x7EC4;&#x7684;&#x6027;&#x8D28;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/152_3.png" alt="&#x804A;&#x804A;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree" loading="lazy"></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[线段树 Segment Tree 实战]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x7EBF;&#x6BB5;&#x6811; Segment tree &#x662F;&#x4E00;&#x79CD;&#x4E8C;&#x53C9;&#x6811;&#x5F62;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;1977&#x5E74;&#x7531; Jon Louis Bentley &#x53D1;&#x660E;&#xFF0C;&#x7528;&#x4EE5;&#x5B58;&#x50A8;&#x533A;&#x95F4;&#x6216;&#x7EBF;&#x6BB5;&#xFF0C;&#x5E76;&#x4E14;&#x5141;&#x8BB8;&#x5FEB;&#x901F;&#x67E5;&#x8BE2;&#x7ED3;&#x6784;&#x5185;&#x5305;&#x542B;&#x67D0;</p>]]></description><link>https://halfrost.com/segment_tree/</link><guid isPermaLink="false">634360bbd892dc307476ccef</guid><category><![CDATA[Algorithm]]></category><category><![CDATA[Segment Tree]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 18 Aug 2019 04:06:00 GMT</pubDate><media:content url="https://img.halfrost.com/2021/04/153_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/2021/04/153_0.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;"><p>&#x7EBF;&#x6BB5;&#x6811; Segment tree &#x662F;&#x4E00;&#x79CD;&#x4E8C;&#x53C9;&#x6811;&#x5F62;&#x6570;&#x636E;&#x7ED3;&#x6784;&#xFF0C;1977&#x5E74;&#x7531; Jon Louis Bentley &#x53D1;&#x660E;&#xFF0C;&#x7528;&#x4EE5;&#x5B58;&#x50A8;&#x533A;&#x95F4;&#x6216;&#x7EBF;&#x6BB5;&#xFF0C;&#x5E76;&#x4E14;&#x5141;&#x8BB8;&#x5FEB;&#x901F;&#x67E5;&#x8BE2;&#x7ED3;&#x6784;&#x5185;&#x5305;&#x542B;&#x67D0;&#x4E00;&#x70B9;&#x7684;&#x6240;&#x6709;&#x533A;&#x95F4;&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x5305;&#x542B; $ n $  &#x4E2A;&#x533A;&#x95F4;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#xFF0C;&#x7A7A;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A; $  O(n) $ &#xFF0C;&#x67E5;&#x8BE2;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x5219;&#x4E3A;$ O(log n+k) $ &#xFF0C;&#x5176;&#x4E2D; $  k $  &#x662F;&#x7B26;&#x5408;&#x6761;&#x4EF6;&#x7684;&#x533A;&#x95F4;&#x6570;&#x91CF;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x4E5F;&#x53EF;&#x63A8;&#x5E7F;&#x5230;&#x9AD8;&#x7EF4;&#x5EA6;&#x3002;</p>
<h2 id="%E4%B8%80-%E4%BB%80%E4%B9%88%E6%98%AF%E7%BA%BF%E6%AE%B5%E6%A0%91">&#x4E00;. &#x4EC0;&#x4E48;&#x662F;&#x7EBF;&#x6BB5;&#x6811;</h2>
<p>&#x4EE5;&#x4E00;&#x7EF4;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#x4E3A;&#x4F8B;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_1.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x4EE4; S &#x662F;&#x4E00;&#x7EF4;&#x7EBF;&#x6BB5;&#x7684;&#x96C6;&#x5408;&#x3002;&#x5C06;&#x8FD9;&#x4E9B;&#x7EBF;&#x6BB5;&#x7684;&#x7AEF;&#x70B9;&#x5750;&#x6807;&#x7531;&#x5C0F;&#x5230;&#x5927;&#x6392;&#x5E8F;&#xFF0C;&#x4EE4;&#x5176;&#x4E3A;$ x_{1},x_{2},\cdots ,x_{m} $ &#x3002;&#x6211;&#x4EEC;&#x5C06;&#x88AB;&#x8FD9;&#x4E9B;&#x7AEF;&#x70B9;&#x5207;&#x5206;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x533A;&#x95F4;&#x79F0;&#x4E3A;&#x201C;&#x5355;&#x4F4D;&#x533A;&#x95F4;&#x201D;&#xFF08;&#x6BCF;&#x4E2A;&#x7AEF;&#x70B9;&#x6240;&#x5728;&#x7684;&#x4F4D;&#x7F6E;&#x4F1A;&#x5355;&#x72EC;&#x6210;&#x4E3A;&#x4E00;&#x4E2A;&#x5355;&#x4F4D;&#x533A;&#x95F4;&#xFF09;&#xFF0C;&#x4ECE;&#x5DE6;&#x5230;&#x53F3;&#x5305;&#x542B;&#xFF1A;</p>
<p>$$<br>
(-\infty ,x_{1}),[x_{1},x_{1}],(x_{1},x_{2}),[x_{2},x_{2}],...,(x_{m-1},x_{m}),[x_{m},x_{m}],(x_{m},+\infty )<br>
$$</p>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x7ED3;&#x6784;&#x4E3A;&#x4E00;&#x4E2A;&#x4E8C;&#x53C9;&#x6811;&#xFF0C;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x90FD;&#x4EE3;&#x8868;&#x4E00;&#x4E2A;&#x5750;&#x6807;&#x533A;&#x95F4;&#xFF0C;&#x8282;&#x70B9; N &#x6240;&#x4EE3;&#x8868;&#x7684;&#x533A;&#x95F4;&#x8BB0;&#x4E3A; Int(N)&#xFF0C;&#x5219;&#x5176;&#x9700;&#x7B26;&#x5408;&#x4EE5;&#x4E0B;&#x6761;&#x4EF6;&#xFF1A;</p>
<ul>
<li>&#x5176;&#x6BCF;&#x4E00;&#x4E2A;&#x53F6;&#x8282;&#x70B9;&#xFF0C;&#x4ECE;&#x5DE6;&#x5230;&#x53F3;&#x4EE3;&#x8868;&#x6BCF;&#x4E2A;&#x5355;&#x4F4D;&#x533A;&#x95F4;&#x3002;</li>
<li>&#x5176;&#x5185;&#x90E8;&#x8282;&#x70B9;&#x4EE3;&#x8868;&#x7684;&#x533A;&#x95F4;&#x662F;&#x5176;&#x4E24;&#x4E2A;&#x513F;&#x5B50;&#x4EE3;&#x8868;&#x7684;&#x533A;&#x95F4;&#x4E4B;&#x5E76;&#x96C6;&#x3002;</li>
<li>&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#xFF08;&#x5305;&#x542B;&#x53F6;&#x5B50;&#xFF09;&#x4E2D;&#x6709;&#x4E00;&#x4E2A;&#x5B58;&#x50A8;&#x7EBF;&#x6BB5;&#x7684;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x3002;&#x82E5;&#x4E00;&#x4E2A;&#x7EBF;&#x6BB5; S &#x7684;&#x5750;&#x6807;&#x533A;&#x95F4;&#x5305;&#x542B; Int(N) &#x4F46;&#x4E0D;&#x5305;&#x542B; Int(parent(N))&#xFF0C;&#x5219;&#x8282;&#x70B9; N &#x4E2D;&#x4F1A;&#x5B58;&#x50A8;&#x7EBF;&#x6BB5; S&#x3002;</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_2.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x662F;&#x4E8C;&#x53C9;&#x6811;&#xFF0C;&#x5176;&#x4E2D;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x4EE3;&#x8868;&#x4E00;&#x4E2A;&#x533A;&#x95F4;&#x3002;&#x901A;&#x5E38;&#xFF0C;&#x4E00;&#x4E2A;&#x8282;&#x70B9;&#x5C06;&#x5B58;&#x50A8;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x5408;&#x5E76;&#x7684;&#x533A;&#x95F4;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x4EE5;&#x4FBF;&#x53EF;&#x4EE5;&#x6267;&#x884C;&#x67E5;&#x8BE2;&#x64CD;&#x4F5C;&#x3002;</p>
<h2 id="%E4%BA%8C-%E4%B8%BA%E4%BB%80%E4%B9%88%E9%9C%80%E8%A6%81%E8%BF%99%E7%A7%8D%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84">&#x4E8C;. &#x4E3A;&#x4EC0;&#x4E48;&#x9700;&#x8981;&#x8FD9;&#x79CD;&#x6570;&#x636E;&#x7ED3;&#x6784;</h2>
<p>&#x8BB8;&#x591A;&#x95EE;&#x9898;&#x8981;&#x6C42;&#x6211;&#x4EEC;&#x57FA;&#x4E8E;&#x5BF9;&#x53EF;&#x7528;&#x6570;&#x636E;&#x8303;&#x56F4;&#x6216;&#x533A;&#x95F4;&#x7684;&#x67E5;&#x8BE2;&#x6765;&#x7ED9;&#x51FA;&#x7ED3;&#x679C;&#x3002;&#x8FD9;&#x53EF;&#x80FD;&#x662F;&#x4E00;&#x4E2A;&#x7E41;&#x7410;&#x800C;&#x7F13;&#x6162;&#x7684;&#x8FC7;&#x7A0B;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x5728;&#x67E5;&#x8BE2;&#x6570;&#x91CF;&#x4F17;&#x591A;&#x4E14;&#x91CD;&#x590D;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x8BA9;&#x6211;&#x4EEC;&#x4EE5;&#x5BF9;&#x6570;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x6709;&#x6548;&#x5730;&#x5904;&#x7406;&#x6B64;&#x7C7B;&#x67E5;&#x8BE2;&#x3002;</p>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x53EF;&#x7528;&#x4E8E;&#x8BA1;&#x7B97;&#x51E0;&#x4F55;&#x548C;<a href="https://en.wikipedia.org/wiki/Geographic_information_systems">&#x5730;&#x7406;&#x4FE1;&#x606F;&#x7CFB;&#x7EDF;&#x9886;&#x57DF;</a>&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x8DDD;&#x4E2D;&#x5FC3;&#x53C2;&#x8003;&#x70B9;/&#x539F;&#x70B9;&#x4E00;&#x5B9A;&#x8DDD;&#x79BB;&#x7684;&#x7A7A;&#x95F4;&#x4E2D;&#x53EF;&#x80FD;&#x4F1A;&#x6709;&#x5927;&#x91CF;&#x70B9;&#x3002;&#x5047;&#x8BBE;&#x6211;&#x4EEC;&#x8981;&#x67E5;&#x627E;&#x8DDD;&#x539F;&#x70B9;&#x4E00;&#x5B9A;&#x8DDD;&#x79BB;&#x8303;&#x56F4;&#x5185;&#x7684;&#x70B9;&#x3002;&#x4E00;&#x4E2A;&#x666E;&#x901A;&#x7684;&#x67E5;&#x627E;&#x8868;&#x5C06;&#x9700;&#x8981;&#x5BF9;&#x6240;&#x6709;&#x53EF;&#x80FD;&#x7684;&#x70B9;&#x6216;&#x6240;&#x6709;&#x53EF;&#x80FD;&#x7684;&#x8DDD;&#x79BB;&#x8FDB;&#x884C;&#x7EBF;&#x6027;&#x626B;&#x63CF;&#xFF08;&#x5047;&#x8BBE;&#x662F;&#x6563;&#x5217;&#x56FE;&#xFF09;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x4F7F;&#x6211;&#x4EEC;&#x80FD;&#x591F;&#x4EE5;&#x5BF9;&#x6570;&#x65F6;&#x95F4;&#x5B9E;&#x73B0;&#x8FD9;&#x4E00;&#x9700;&#x6C42;&#xFF0C;&#x800C;&#x6240;&#x9700;&#x7A7A;&#x95F4;&#x5374;&#x5C11;&#x5F97;&#x591A;&#x3002;&#x8FD9;&#x6837;&#x7684;&#x95EE;&#x9898;&#x79F0;&#x4E3A;<a href="https://en.wikipedia.org/wiki/Range_searching">&#x5E73;&#x9762;&#x8303;&#x56F4;&#x641C;&#x7D22;</a>&#x3002;&#x6709;&#x6548;&#x5730;&#x89E3;&#x51B3;&#x6B64;&#x7C7B;&#x95EE;&#x9898;&#x81F3;&#x5173;&#x91CD;&#x8981;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x5728;&#x5904;&#x7406;&#x52A8;&#x6001;&#x6570;&#x636E;&#x4E14;&#x77AC;&#x606F;&#x4E07;&#x53D8;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF08;&#x4F8B;&#x5982;&#xFF0C;&#x7528;&#x4E8E;&#x7A7A;&#x4E2D;&#x4EA4;&#x901A;&#x7684;&#x96F7;&#x8FBE;&#x7CFB;&#x7EDF;&#xFF09;&#x3002;&#x4E0B;&#x6587;&#x4F1A;&#x4EE5;&#x7EBF;&#x6BB5;&#x6811;&#x89E3;&#x51B3; Range Sum Query problem &#x4E3A;&#x4F8B;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_3.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x5373;&#x4F5C;&#x4E3A;&#x8303;&#x56F4;&#x67E5;&#x8BE2;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#x3002;</p>
<h2 id="%E4%B8%89-%E6%9E%84%E9%80%A0%E7%BA%BF%E6%AE%B5%E6%A0%91">&#x4E09;. &#x6784;&#x9020;&#x7EBF;&#x6BB5;&#x6811;</h2>
<p>&#x5047;&#x8BBE;&#x6570;&#x636E;&#x5B58;&#x5728; size &#x4E3A; n &#x7684; arr[] &#x4E2D;&#x3002;</p>
<ol>
<li>&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x6839;&#x901A;&#x5E38;&#x4EE3;&#x8868;&#x6574;&#x4E2A;&#x6570;&#x636E;&#x533A;&#x95F4;&#x3002;&#x8FD9;&#x91CC;&#x662F; arr[0&#xFF1A;n-1]&#x3002;</li>
<li>&#x6811;&#x7684;&#x6BCF;&#x4E2A;&#x53F6;&#x5B50;&#x4EE3;&#x8868;&#x4E00;&#x4E2A;&#x8303;&#x56F4;&#xFF0C;&#x5176;&#x4E2D;&#x4EC5;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x3002; &#x56E0;&#x6B64;&#xFF0C;&#x53F6;&#x5B50;&#x4EE3;&#x8868; arr[0]&#xFF0C;arr[1] &#x7B49;&#x7B49;&#xFF0C;&#x76F4;&#x5230; arr[n-1]&#x3002;</li>
<li>&#x6811;&#x7684;&#x5185;&#x90E8;&#x8282;&#x70B9;&#x5C06;&#x4EE3;&#x8868;&#x5176;&#x5B50;&#x8282;&#x70B9;&#x7684;&#x5408;&#x5E76;&#x6216;&#x5E76;&#x96C6;&#x7ED3;&#x679C;&#x3002;</li>
<li>&#x6BCF;&#x4E2A;&#x5B50;&#x8282;&#x70B9;&#x53EF;&#x4EE3;&#x8868;&#x5176;&#x7236;&#x8282;&#x70B9;&#x6240;&#x4EE3;&#x8868;&#x8303;&#x56F4;&#x7684;&#x5927;&#x7EA6;&#x4E00;&#x534A;&#x3002;(&#x4E8C;&#x5206;&#x7684;&#x601D;&#x60F3;)</li>
</ol>
<p>&#x4F7F;&#x7528;&#x5927;&#x5C0F;&#x4E3A; $ \approx 4 \ast n $  &#x7684;&#x6570;&#x7EC4;&#x53EF;&#x4EE5;&#x8F7B;&#x677E;&#x8868;&#x793A; n &#x4E2A;&#x5143;&#x7D20;&#x8303;&#x56F4;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#x3002;&#xFF08;<a href="http://stackoverflow.com/q/28470692/2844164">Stack Overflow</a> &#x5BF9;&#x539F;&#x56E0;&#x8FDB;&#x884C;&#x4E86;&#x5F88;&#x597D;&#x7684;&#x8BA8;&#x8BBA;&#x3002;&#x5982;&#x679C;&#x4F60;&#x8FD8;&#x4E0D;&#x786E;&#x5B9A;&#xFF0C;&#x8BF7;&#x4E0D;&#x8981;&#x62C5;&#x5FC3;&#x3002;&#x672C;&#x6587;&#x5C06;&#x5728;&#x7A0D;&#x540E;&#x8FDB;&#x884C;&#x8BA8;&#x8BBA;&#x3002;&#xFF09;</p>
<p>&#x4E0B;&#x6807;&#x4E3A; i &#x7684;&#x8282;&#x70B9;&#x6709;&#x4E24;&#x4E2A;&#x8282;&#x70B9;&#xFF0C;&#x4E0B;&#x6807;&#x5206;&#x522B;&#x4E3A; $ (2 \ast i + 1) $ &#x548C; $ (2 \ast i + 2)$ &#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_4.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x770B;&#x4E0A;&#x53BB;&#x5F88;&#x76F4;&#x89C2;&#x5E76;&#x4E14;&#x975E;&#x5E38;&#x9002;&#x5408;&#x9012;&#x5F52;&#x6784;&#x9020;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x5C06;&#x4F7F;&#x7528;&#x6570;&#x7EC4; tree[] &#x6765;&#x5B58;&#x50A8;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x8282;&#x70B9;&#xFF08;&#x521D;&#x59CB;&#x5316;&#x4E3A;&#x5168;&#x96F6;&#xFF09;&#x3002; &#x4E0B;&#x6807;&#x4ECE; 0 &#x5F00;&#x59CB;&#x3002;</p>
<ul>
<li>&#x6811;&#x7684;&#x8282;&#x70B9;&#x5728;&#x4E0B;&#x6807; 0 &#x5904;&#x3002;&#x56E0;&#x6B64; tree[0] &#x662F;&#x6811;&#x7684;&#x6839;&#x3002;</li>
<li>tree[i] &#x7684;&#x5B69;&#x5B50;&#x5B58;&#x5728; tree[2 * i + 1] &#x548C; tree[2 * i + 2] &#x4E2D;&#x3002;</li>
<li>&#x7528;&#x989D;&#x5916;&#x7684; 0 &#x6216; null &#x503C;&#x586B;&#x5145; arr[]&#xFF0C;&#x4F7F;&#x5F97; $ n = 2^{k} $ &#xFF08;&#x5176;&#x4E2D; n &#x662F; arr[] &#x7684;&#x603B;&#x957F;&#x5EA6;&#xFF0C;&#x800C; k &#x662F;&#x975E;&#x8D1F;&#x6574;&#x6570;&#x3002;&#xFF09;</li>
<li>&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x7684;&#x4E0B;&#x6807;&#x53D6;&#x503C;&#x8303;&#x56F4;&#x5728; $  \in [2^{k}-1, 2^{k+1}-2]$</li>
</ul>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_5.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x6784;&#x9020;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">// SegmentTree define
type SegmentTree struct {
	data, tree, lazy []int
	left, right      int
	merge            func(i, j int) int
}

// Init define
func (st *SegmentTree) Init(nums []int, oper func(i, j int) int) {
	st.merge = oper
	data, tree, lazy := make([]int, len(nums)), make([]int, 4*len(nums)), make([]int, 4*len(nums))
	for i := 0; i &lt; len(nums); i++ {
		data[i] = nums[i]
	}
	st.data, st.tree, st.lazy = data, tree, lazy
	if len(nums) &gt; 0 {
		st.buildSegmentTree(0, 0, len(nums)-1)
	}
}

// &#x5728; treeIndex &#x7684;&#x4F4D;&#x7F6E;&#x521B;&#x5EFA; [left....right] &#x533A;&#x95F4;&#x7684;&#x7EBF;&#x6BB5;&#x6811;
func (st *SegmentTree) buildSegmentTree(treeIndex, left, right int) {
	if left == right {
		st.tree[treeIndex] = st.data[left]
		return
	}
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	st.buildSegmentTree(leftTreeIndex, left, midTreeIndex)
	st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right)
	st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex])
}

func (st *SegmentTree) leftChild(index int) int {
	return 2*index + 1
}

func (st *SegmentTree) rightChild(index int) int {
	return 2*index + 2
}
</code></pre>
<p>&#x7B14;&#x8005;&#x5C06;&#x7EBF;&#x6BB5;&#x6811;&#x5408;&#x5E76;&#x7684;&#x64CD;&#x4F5C;&#x53D8;&#x6210;&#x4E86;&#x4E00;&#x4E2A;&#x51FD;&#x6570;&#x3002;&#x5408;&#x5E76;&#x64CD;&#x4F5C;&#x6839;&#x636E;&#x9898;&#x610F;&#x53D8;&#x5316;&#xFF0C;&#x5E38;&#x89C1;&#x7684;&#x6709;&#x52A0;&#x6CD5;&#xFF0C;&#x53D6; max&#xFF0C;min &#x7B49;&#x7B49;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x4EE5; arr[] = [18, 17, 13, 19, 15, 11, 20, 12, 33, 25 ] &#x4E3A;&#x4F8B;&#x6784;&#x9020;&#x7EBF;&#x6BB5;&#x6811;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_6.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x6784;&#x9020;&#x597D;&#x4EE5;&#x540E;&#xFF0C;&#x6570;&#x7EC4;&#x91CC;&#x9762;&#x7684;&#x6570;&#x636E;&#x662F;&#xFF1A;</p>
<pre><code class="language-c">tree[] = [ 183, 82, 101, 48, 34, 43, 58, 35, 13, 19, 15, 31, 12, 33, 25, 18, 17, 0, 0, 0, 0, 0, 0, 11, 20, 0, 0, 0, 0, 0, 0 ]
</code></pre>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x7528; 0 &#x586B;&#x5145;&#x5230; 4*n &#x4E2A;&#x5143;&#x7D20;&#x3002;</p>
<blockquote>
<p>LeetCode &#x5BF9;&#x5E94;&#x9898;&#x76EE;&#x662F; <a href="https://books.halfrost.com/leetcode/ChapterFour/0200~0299/0218.The-Skyline-Problem/">218. The Skyline Problem</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0303.Range-Sum-Query-Immutable/">303. Range Sum Query - Immutable</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0307.Range-Sum-Query-Mutable/">307. Range Sum Query - Mutable</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/0600~0699/0699.Falling-Squares/">699. Falling Squares</a></p>
</blockquote>
<h2 id="%E5%9B%9B-%E7%BA%BF%E6%AE%B5%E6%A0%91%E7%9A%84%E6%9F%A5%E8%AF%A2">&#x56DB;. &#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x67E5;&#x8BE2;</h2>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x67E5;&#x8BE2;&#x65B9;&#x6CD5;&#x6709;&#x4E24;&#x79CD;&#xFF0C;&#x4E00;&#x79CD;&#x662F;&#x76F4;&#x63A5;&#x67E5;&#x8BE2;&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x79CD;&#x662F;&#x61D2;&#x67E5;&#x8BE2;&#x3002;</p>
<h3 id="1-%E7%9B%B4%E6%8E%A5%E6%9F%A5%E8%AF%A2">1. &#x76F4;&#x63A5;&#x67E5;&#x8BE2;</h3>
<p>&#x5F53;&#x67E5;&#x8BE2;&#x8303;&#x56F4;&#x4E0E;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x8868;&#x793A;&#x7684;&#x8303;&#x56F4;&#x5B8C;&#x5168;&#x5339;&#x914D;&#x65F6;&#xFF0C;&#x8BE5;&#x65B9;&#x6CD5;&#x8FD4;&#x56DE;&#x7ED3;&#x679C;&#x3002;&#x5426;&#x5219;&#xFF0C;&#x5B83;&#x4F1A;&#x66F4;&#x6DF1;&#x5165;&#x5730;&#x904D;&#x5386;&#x7EBF;&#x6BB5;&#x6811;&#x6811;&#xFF0C;&#x4EE5;&#x627E;&#x5230;&#x4E0E;&#x8282;&#x70B9;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x5B8C;&#x5168;&#x5339;&#x914D;&#x7684;&#x8282;&#x70B9;&#x3002;</p>
<pre><code class="language-go">// &#x67E5;&#x8BE2; [left....right] &#x533A;&#x95F4;&#x5185;&#x7684;&#x503C;

// Query define
func (st *SegmentTree) Query(left, right int) int {
	if len(st.data) &gt; 0 {
		return st.queryInTree(0, 0, len(st.data)-1, left, right)
	}
	return 0
}

// &#x5728;&#x4EE5; treeIndex &#x4E3A;&#x6839;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#x4E2D; [left...right] &#x7684;&#x8303;&#x56F4;&#x91CC;&#xFF0C;&#x641C;&#x7D22;&#x533A;&#x95F4; [queryLeft...queryRight] &#x7684;&#x503C;
func (st *SegmentTree) queryInTree(treeIndex, left, right, queryLeft, queryRight int) int {
	if left == queryLeft &amp;&amp; right == queryRight {
		return st.tree[treeIndex]
	}
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	if queryLeft &gt; midTreeIndex {
		return st.queryInTree(rightTreeIndex, midTreeIndex+1, right, queryLeft, queryRight)
	} else if queryRight &lt;= midTreeIndex {
		return st.queryInTree(leftTreeIndex, left, midTreeIndex, queryLeft, queryRight)
	}
	return st.merge(st.queryInTree(leftTreeIndex, left, midTreeIndex, queryLeft, midTreeIndex),
		st.queryInTree(rightTreeIndex, midTreeIndex+1, right, midTreeIndex+1, queryRight))
}
</code></pre>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_7.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x5728;&#x4E0A;&#x9762;&#x7684;&#x793A;&#x4F8B;&#x4E2D;&#xFF0C;&#x67E5;&#x8BE2;&#x7684;&#x533A;&#x95F4;&#x8303;&#x56F4;&#x4E3A;[2&#xFF0C;8] &#x7684;&#x5143;&#x7D20;&#x4E4B;&#x548C;&#x3002;&#x6CA1;&#x6709;&#x4EFB;&#x4F55;&#x7EBF;&#x6BB5;&#x53EF;&#x4EE5;&#x5B8C;&#x5168;&#x4EE3;&#x8868;[2&#xFF0C;8] &#x8303;&#x56F4;&#x3002;&#x4F46;&#x662F;&#x53EF;&#x4EE5;&#x89C2;&#x5BDF;&#x5230;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x8303;&#x56F4; [2&#xFF0C;2]&#xFF0C;[3&#xFF0C;4]&#xFF0C;[5&#xFF0C;7]&#xFF0C;[8&#xFF0C;8] &#x8FD9; 4 &#x4E2A;&#x533A;&#x95F4;&#x6784;&#x6210; [8&#xFF0C;8]&#x3002;&#x5FEB;&#x901F;&#x9A8C;&#x8BC1; [2,8] &#x5904;&#x7684;&#x8F93;&#x5165;&#x5143;&#x7D20;&#x4E4B;&#x548C;&#x4E3A; 13 + 19 + 15 + 11 + 20 + 12 + 33 = 123&#x3002;[2&#xFF0C;2]&#xFF0C;[3&#xFF0C;4]&#xFF0C;[5&#xFF0C;7] &#x548C; [8&#xFF0C;8] &#x7684;&#x8282;&#x70B9;&#x603B;&#x548C;&#x662F; 13 + 34 + 43 + 33 = 123&#x3002;&#x7B54;&#x6848;&#x6B63;&#x786E;&#x3002;</p>
<h3 id="2-%E6%87%92%E6%9F%A5%E8%AF%A2">2. &#x61D2;&#x67E5;&#x8BE2;</h3>
<p>&#x61D2;&#x67E5;&#x8BE2;&#x5BF9;&#x5E94;&#x61D2;&#x66F4;&#x65B0;&#xFF0C;&#x4E24;&#x8005;&#x662F;&#x914D;&#x5957;&#x64CD;&#x4F5C;&#x3002;&#x5728;&#x533A;&#x95F4;&#x66F4;&#x65B0;&#x65F6;&#xFF0C;&#x5E76;&#x4E0D;&#x76F4;&#x63A5;&#x66F4;&#x65B0;&#x533A;&#x95F4;&#x5185;&#x6240;&#x6709;&#x8282;&#x70B9;&#xFF0C;&#x800C;&#x662F;&#x628A;&#x533A;&#x95F4;&#x5185;&#x8282;&#x70B9;&#x589E;&#x51CF;&#x53D8;&#x5316;&#x7684;&#x503C;&#x5B58;&#x5728; lazy &#x6570;&#x7EC4;&#x4E2D;&#x3002;&#x7B49;&#x5230;&#x4E0B;&#x6B21;&#x67E5;&#x8BE2;&#x7684;&#x65F6;&#x5019;&#x518D;&#x628A;&#x589E;&#x51CF;&#x5E94;&#x7528;&#x5230;&#x5177;&#x4F53;&#x7684;&#x8282;&#x70B9;&#x4E0A;&#x3002;&#x8FD9;&#x6837;&#x505A;&#x4E5F;&#x662F;&#x4E3A;&#x4E86;&#x5206;&#x644A;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#xFF0C;&#x4FDD;&#x8BC1;&#x67E5;&#x8BE2;&#x548C;&#x66F4;&#x65B0;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x5728; O(log n) &#x7EA7;&#x522B;&#xFF0C;&#x4E0D;&#x4F1A;&#x9000;&#x5316;&#x6210; O(n) &#x7EA7;&#x522B;&#x3002;</p>
<p>&#x61D2;&#x67E5;&#x8BE2;&#x8282;&#x70B9;&#x7684;&#x6B65;&#x9AA4;&#xFF1A;</p>
<ol>
<li>&#x5148;&#x5224;&#x65AD;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x662F;&#x5426;&#x662F;&#x61D2;&#x8282;&#x70B9;&#x3002;&#x901A;&#x8FC7;&#x67E5;&#x8BE2; lazy[i] &#x662F;&#x5426;&#x4E3A; 0 &#x5224;&#x65AD;&#x3002;&#x5982;&#x679C;&#x662F;&#x61D2;&#x8282;&#x70B9;&#xFF0C;&#x5C06;&#x5B83;&#x7684;&#x589E;&#x51CF;&#x53D8;&#x5316;&#x5E94;&#x7528;&#x5230;&#x8BE5;&#x8282;&#x70B9;&#x4E0A;&#x3002;&#x5E76;&#x4E14;&#x66F4;&#x65B0;&#x5B83;&#x7684;&#x5B69;&#x5B50;&#x8282;&#x70B9;&#x3002;&#x8FD9;&#x4E00;&#x6B65;&#x548C;&#x66F4;&#x65B0;&#x64CD;&#x4F5C;&#x7684;&#x7B2C;&#x4E00;&#x6B65;&#x5B8C;&#x5168;&#x4E00;&#x6837;&#x3002;</li>
<li>&#x9012;&#x5F52;&#x67E5;&#x8BE2;&#x5B50;&#x8282;&#x70B9;&#xFF0C;&#x4EE5;&#x627E;&#x5230;&#x9002;&#x5408;&#x7684;&#x67E5;&#x8BE2;&#x8282;&#x70B9;&#x3002;</li>
</ol>
<p>&#x5177;&#x4F53;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">// &#x67E5;&#x8BE2; [left....right] &#x533A;&#x95F4;&#x5185;&#x7684;&#x503C;

// QueryLazy define
func (st *SegmentTree) QueryLazy(left, right int) int {
	if len(st.data) &gt; 0 {
		return st.queryLazyInTree(0, 0, len(st.data)-1, left, right)
	}
	return 0
}

func (st *SegmentTree) queryLazyInTree(treeIndex, left, right, queryLeft, queryRight int) int {
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	if left &gt; queryRight || right &lt; queryLeft { // segment completely outside range
		return 0 // represents a null node
	}
	if st.lazy[treeIndex] != 0 { // this node is lazy
		for i := 0; i &lt; right-left+1; i++ {
			st.tree[treeIndex] = st.merge(st.tree[treeIndex], st.lazy[treeIndex])
			// st.tree[treeIndex] += (right - left + 1) * st.lazy[treeIndex] // normalize current node by removing lazinesss
		}
		if left != right { // update lazy[] for children nodes
			st.lazy[leftTreeIndex] = st.merge(st.lazy[leftTreeIndex], st.lazy[treeIndex])
			st.lazy[rightTreeIndex] = st.merge(st.lazy[rightTreeIndex], st.lazy[treeIndex])
			// st.lazy[leftTreeIndex] += st.lazy[treeIndex]
			// st.lazy[rightTreeIndex] += st.lazy[treeIndex]
		}
		st.lazy[treeIndex] = 0 // current node processed. No longer lazy
	}
	if queryLeft &lt;= left &amp;&amp; queryRight &gt;= right { // segment completely inside range
		return st.tree[treeIndex]
	}
	if queryLeft &gt; midTreeIndex {
		return st.queryLazyInTree(rightTreeIndex, midTreeIndex+1, right, queryLeft, queryRight)
	} else if queryRight &lt;= midTreeIndex {
		return st.queryLazyInTree(leftTreeIndex, left, midTreeIndex, queryLeft, queryRight)
	}
	// merge query results
	return st.merge(st.queryLazyInTree(leftTreeIndex, left, midTreeIndex, queryLeft, midTreeIndex),
		st.queryLazyInTree(rightTreeIndex, midTreeIndex+1, right, midTreeIndex+1, queryRight))
}
</code></pre>
<h2 id="%E4%BA%94-%E7%BA%BF%E6%AE%B5%E6%A0%91%E7%9A%84%E6%9B%B4%E6%96%B0">&#x4E94;. &#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x66F4;&#x65B0;</h2>
<h3 id="1-%E5%8D%95%E7%82%B9%E6%9B%B4%E6%96%B0">1. &#x5355;&#x70B9;&#x66F4;&#x65B0;</h3>
<p>&#x5355;&#x70B9;&#x66F4;&#x65B0;&#x7C7B;&#x4F3C;&#x4E8E; <code>buildSegTree</code>&#x3002;&#x66F4;&#x65B0;&#x6811;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x7684;&#x503C;&#xFF0C;&#x8BE5;&#x503C;&#x4E0E;&#x66F4;&#x65B0;&#x540E;&#x7684;&#x5143;&#x7D20;&#x76F8;&#x5BF9;&#x5E94;&#x3002;&#x8FD9;&#x4E9B;&#x66F4;&#x65B0;&#x7684;&#x503C;&#x4F1A;&#x901A;&#x8FC7;&#x6811;&#x7684;&#x4E0A;&#x5C42;&#x8282;&#x70B9;&#x628A;&#x5F71;&#x54CD;&#x4F20;&#x64AD;&#x5230;&#x6839;&#x3002;</p>
<pre><code class="language-go">// &#x66F4;&#x65B0; index &#x4F4D;&#x7F6E;&#x7684;&#x503C;

// Update define
func (st *SegmentTree) Update(index, val int) {
	if len(st.data) &gt; 0 {
		st.updateInTree(0, 0, len(st.data)-1, index, val)
	}
}

// &#x4EE5; treeIndex &#x4E3A;&#x6839;&#xFF0C;&#x66F4;&#x65B0; index &#x4F4D;&#x7F6E;&#x4E0A;&#x7684;&#x503C;&#x4E3A; val
func (st *SegmentTree) updateInTree(treeIndex, left, right, index, val int) {
	if left == right {
		st.tree[treeIndex] = val
		return
	}
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	if index &gt; midTreeIndex {
		st.updateInTree(rightTreeIndex, midTreeIndex+1, right, index, val)
	} else {
		st.updateInTree(leftTreeIndex, left, midTreeIndex, index, val)
	}
	st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex])
}
</code></pre>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_8.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x5728;&#x6B64;&#x793A;&#x4F8B;&#x4E2D;&#xFF0C;&#x4E0B;&#x6807;&#x4E3A;&#xFF08;&#x5728;&#x539F;&#x59CB;&#x8F93;&#x5165;&#x6570;&#x636E;&#x4E2D;&#xFF09;1&#x3001;3 &#x548C; 6 &#x5904;&#x7684;&#x5143;&#x7D20;&#x5206;&#x522B;&#x589E;&#x52A0;&#x4E86; +3&#xFF0C;-1 &#x548C; +2&#x3002;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x66F4;&#x6539;&#x5982;&#x4F55;&#x6CBF;&#x6811;&#x4F20;&#x64AD;&#xFF0C;&#x4E00;&#x76F4;&#x5230;&#x6839;&#x3002;</p>
<h3 id="2-%E5%8C%BA%E9%97%B4%E6%9B%B4%E6%96%B0">2. &#x533A;&#x95F4;&#x66F4;&#x65B0;</h3>
<p>&#x7EBF;&#x6BB5;&#x6811;&#x4EC5;&#x66F4;&#x65B0;&#x5355;&#x4E2A;&#x5143;&#x7D20;&#xFF0C;&#x975E;&#x5E38;&#x6709;&#x6548;&#xFF0C;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6; O(log n)&#x3002; &#x4F46;&#x662F;&#xFF0C;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x8981;&#x66F4;&#x65B0;&#x4E00;&#x7CFB;&#x5217;&#x5143;&#x7D20;&#x600E;&#x4E48;&#x529E;&#xFF1F;&#x6309;&#x7167;&#x5F53;&#x524D;&#x7684;&#x65B9;&#x6CD5;&#xFF0C;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x90FD;&#x5FC5;&#x987B;&#x72EC;&#x7ACB;&#x66F4;&#x65B0;&#xFF0C;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#x90FD;&#x4F1A;&#x82B1;&#x8D39;&#x4E00;&#x4E9B;&#x65F6;&#x95F4;&#x3002;&#x5206;&#x522B;&#x66F4;&#x65B0;&#x6BCF;&#x4E00;&#x4E2A;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x610F;&#x5473;&#x7740;&#x8981;&#x591A;&#x6B21;&#x5904;&#x7406;&#x5B83;&#x4EEC;&#x7684;&#x5171;&#x540C;&#x7956;&#x5148;&#x3002;&#x7956;&#x5148;&#x8282;&#x70B9;&#x53EF;&#x80FD;&#x88AB;&#x66F4;&#x65B0;&#x591A;&#x6B21;&#x3002;&#x5982;&#x679C;&#x60F3;&#x8981;&#x51CF;&#x5C11;&#x8FD9;&#x79CD;&#x91CD;&#x590D;&#x8BA1;&#x7B97;&#xFF0C;&#x8BE5;&#x600E;&#x4E48;&#x529E;&#xFF1F;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_11.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>&#x5728;&#x4E0A;&#x9762;&#x7684;&#x793A;&#x4F8B;&#x4E2D;&#xFF0C;&#x6839;&#x8282;&#x70B9;&#x88AB;&#x66F4;&#x65B0;&#x4E86;&#x4E09;&#x6B21;&#xFF0C;&#x800C;&#x7F16;&#x53F7;&#x4E3A; 82 &#x7684;&#x8282;&#x70B9;&#x88AB;&#x66F4;&#x65B0;&#x4E86;&#x4E24;&#x6B21;&#x3002;&#x8FD9;&#x662F;&#x56E0;&#x4E3A;&#x66F4;&#x65B0;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x5BF9;&#x4E0A;&#x5C42;&#x7236;&#x4EB2;&#x8282;&#x70B9;&#x6709;&#x5F71;&#x54CD;&#x3002;&#x6700;&#x5DEE;&#x7684;&#x60C5;&#x51B5;&#xFF0C;&#x67E5;&#x8BE2;&#x7684;&#x533A;&#x95F4;&#x5185;&#x4E0D;&#x5305;&#x542B;&#x9891;&#x7E41;&#x66F4;&#x65B0;&#x7684;&#x5143;&#x7D20;&#xFF0C;&#x4E8E;&#x662F;&#x9700;&#x8981;&#x82B1;&#x8D39;&#x5F88;&#x591A;&#x65F6;&#x95F4;&#x66F4;&#x65B0;&#x4E0D;&#x600E;&#x4E48;&#x8BBF;&#x95EE;&#x7684;&#x8282;&#x70B9;&#x3002;&#x589E;&#x52A0;&#x989D;&#x5916;&#x7684; lazy &#x6570;&#x7EC4;&#xFF0C;&#x53EF;&#x4EE5;&#x51CF;&#x5C11;&#x4E0D;&#x5FC5;&#x8981;&#x7684;&#x8BA1;&#x7B97;&#xFF0C;&#x5E76;&#x4E14;&#x80FD;&#x6309;&#x9700;&#x5904;&#x7406;&#x8282;&#x70B9;&#x3002;</p>
<p>&#x4F7F;&#x7528;&#x53E6;&#x4E00;&#x4E2A;&#x6570;&#x7EC4; lazy[]&#xFF0C;&#x5B83;&#x7684;&#x5927;&#x5C0F;&#x4E0E;&#x6211;&#x4EEC;&#x7684;&#x7EBF;&#x6BB5;&#x6811; array tree[] &#x5B8C;&#x5168;&#x76F8;&#x540C;&#xFF0C;&#x4EE3;&#x8868;&#x4E00;&#x4E2A;&#x60F0;&#x6027;&#x8282;&#x70B9;&#x3002;&#x5F53;&#x8BBF;&#x95EE;&#x6216;&#x67E5;&#x8BE2;&#x8BE5;&#x8282;&#x70B9;&#x65F6;&#xFF0C;lazy[i] &#x4E2D;&#x4FDD;&#x7559;&#x9700;&#x8981;&#x589E;&#x52A0;&#x6216;&#x8005;&#x51CF;&#x5C11;&#x8BE5;&#x8282;&#x70B9; tree[i] &#x7684;&#x6570;&#x91CF;&#x3002; &#x5F53; lazy[i] &#x4E3A; 0 &#x65F6;&#xFF0C;&#x8868;&#x793A; tree[i] &#x8BE5;&#x8282;&#x70B9;&#x4E0D;&#x662F;&#x60F0;&#x6027;&#x7684;&#xFF0C;&#x5E76;&#x4E14;&#x6CA1;&#x6709;&#x7F13;&#x5B58;&#x7684;&#x66F4;&#x65B0;&#x3002;</p>
<p>&#x66F4;&#x65B0;&#x533A;&#x95F4;&#x5185;&#x8282;&#x70B9;&#x7684;&#x6B65;&#x9AA4;&#xFF1A;</p>
<ol>
<li>&#x5148;&#x5224;&#x65AD;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x662F;&#x5426;&#x662F;&#x61D2;&#x8282;&#x70B9;&#x3002;&#x901A;&#x8FC7;&#x67E5;&#x8BE2; lazy[i] &#x662F;&#x5426;&#x4E3A; 0 &#x5224;&#x65AD;&#x3002;&#x5982;&#x679C;&#x662F;&#x61D2;&#x8282;&#x70B9;&#xFF0C;&#x5C06;&#x5B83;&#x7684;&#x589E;&#x51CF;&#x53D8;&#x5316;&#x5E94;&#x7528;&#x5230;&#x8BE5;&#x8282;&#x70B9;&#x4E0A;&#x3002;&#x5E76;&#x4E14;&#x66F4;&#x65B0;&#x5B83;&#x7684;&#x5B69;&#x5B50;&#x8282;&#x70B9;&#x3002;</li>
<li>&#x5982;&#x679C;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x4EE3;&#x8868;&#x7684;&#x533A;&#x95F4;&#x4F4D;&#x4E8E;&#x66F4;&#x65B0;&#x8303;&#x56F4;&#x5185;&#xFF0C;&#x5219;&#x5C06;&#x5F53;&#x524D;&#x66F4;&#x65B0;&#x64CD;&#x4F5C;&#x5E94;&#x7528;&#x4E8E;&#x5F53;&#x524D;&#x8282;&#x70B9;&#x3002;</li>
<li>&#x9012;&#x5F52;&#x66F4;&#x65B0;&#x5B50;&#x8282;&#x70B9;&#x3002;</li>
</ol>
<p>&#x5177;&#x4F53;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-go">
// &#x66F4;&#x65B0; [updateLeft....updateRight] &#x4F4D;&#x7F6E;&#x7684;&#x503C;
// &#x6CE8;&#x610F;&#x8FD9;&#x91CC;&#x7684;&#x66F4;&#x65B0;&#x503C;&#x662F;&#x5728;&#x539F;&#x6765;&#x503C;&#x7684;&#x57FA;&#x7840;&#x4E0A;&#x589E;&#x52A0;&#x6216;&#x8005;&#x51CF;&#x5C11;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x628A;&#x8FD9;&#x4E2A;&#x533A;&#x95F4;&#x5185;&#x7684;&#x503C;&#x90FD;&#x8D4B;&#x503C;&#x4E3A; x&#xFF0C;&#x533A;&#x95F4;&#x66F4;&#x65B0;&#x548C;&#x5355;&#x70B9;&#x66F4;&#x65B0;&#x4E0D;&#x540C;
// &#x8FD9;&#x91CC;&#x7684;&#x533A;&#x95F4;&#x66F4;&#x65B0;&#x5173;&#x6CE8;&#x7684;&#x662F;&#x53D8;&#x5316;&#xFF0C;&#x5355;&#x70B9;&#x66F4;&#x65B0;&#x5173;&#x6CE8;&#x7684;&#x662F;&#x5B9A;&#x503C;
// &#x5F53;&#x7136;&#x533A;&#x95F4;&#x66F4;&#x65B0;&#x4E5F;&#x53EF;&#x4EE5;&#x90FD;&#x66F4;&#x65B0;&#x6210;&#x5B9A;&#x503C;&#xFF0C;&#x5982;&#x679C;&#x53EA;&#x533A;&#x95F4;&#x66F4;&#x65B0;&#x6210;&#x5B9A;&#x503C;&#xFF0C;&#x90A3;&#x4E48; lazy &#x66F4;&#x65B0;&#x7B56;&#x7565;&#x9700;&#x8981;&#x53D8;&#x5316;&#xFF0C;merge &#x7B56;&#x7565;&#x4E5F;&#x9700;&#x8981;&#x53D8;&#x5316;&#xFF0C;&#x8FD9;&#x91CC;&#x6682;&#x4E0D;&#x8BE6;&#x7EC6;&#x8BA8;&#x8BBA;

// UpdateLazy define
func (st *SegmentTree) UpdateLazy(updateLeft, updateRight, val int) {
	if len(st.data) &gt; 0 {
		st.updateLazyInTree(0, 0, len(st.data)-1, updateLeft, updateRight, val)
	}
}

func (st *SegmentTree) updateLazyInTree(treeIndex, left, right, updateLeft, updateRight, val int) {
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	if st.lazy[treeIndex] != 0 { // this node is lazy
		for i := 0; i &lt; right-left+1; i++ {
			st.tree[treeIndex] = st.merge(st.tree[treeIndex], st.lazy[treeIndex])
			//st.tree[treeIndex] += (right - left + 1) * st.lazy[treeIndex] // normalize current node by removing laziness
		}
		if left != right { // update lazy[] for children nodes
			st.lazy[leftTreeIndex] = st.merge(st.lazy[leftTreeIndex], st.lazy[treeIndex])
			st.lazy[rightTreeIndex] = st.merge(st.lazy[rightTreeIndex], st.lazy[treeIndex])
			// st.lazy[leftTreeIndex] += st.lazy[treeIndex]
			// st.lazy[rightTreeIndex] += st.lazy[treeIndex]
		}
		st.lazy[treeIndex] = 0 // current node processed. No longer lazy
	}

	if left &gt; right || left &gt; updateRight || right &lt; updateLeft {
		return // out of range. escape.
	}

	if updateLeft &lt;= left &amp;&amp; right &lt;= updateRight { // segment is fully within update range
		for i := 0; i &lt; right-left+1; i++ {
			st.tree[treeIndex] = st.merge(st.tree[treeIndex], val)
			//st.tree[treeIndex] += (right - left + 1) * val // update segment
		}
		if left != right { // update lazy[] for children
			st.lazy[leftTreeIndex] = st.merge(st.lazy[leftTreeIndex], val)
			st.lazy[rightTreeIndex] = st.merge(st.lazy[rightTreeIndex], val)
			// st.lazy[leftTreeIndex] += val
			// st.lazy[rightTreeIndex] += val
		}
		return
	}
	st.updateLazyInTree(leftTreeIndex, left, midTreeIndex, updateLeft, updateRight, val)
	st.updateLazyInTree(rightTreeIndex, midTreeIndex+1, right, updateLeft, updateRight, val)
	// merge updates
	st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex])
}

</code></pre>
<blockquote>
<p>LeetCode &#x5BF9;&#x5E94;&#x9898;&#x76EE;&#x662F; <a href="https://books.halfrost.com/leetcode/ChapterFour/0200~0299/0218.The-Skyline-Problem/">218. The Skyline Problem</a>&#x3001;<a href="https://books.halfrost.com/leetcode/ChapterFour/0600~0699/0699.Falling-Squares/">699. Falling Squares</a></p>
</blockquote>
<h2 id="%E5%85%AD-%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%E5%88%86%E6%9E%90">&#x516D;. &#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x5206;&#x6790;</h2>
<p>&#x8BA9;&#x6211;&#x4EEC;&#x770B;&#x4E00;&#x4E0B;&#x6784;&#x5EFA;&#x8FC7;&#x7A0B;&#x3002;&#x6211;&#x4EEC;&#x8BBF;&#x95EE;&#x4E86;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x6BCF;&#x4E2A;&#x53F6;&#x5B50;&#xFF08;&#x5BF9;&#x5E94;&#x4E8E;&#x6570;&#x7EC4; arr[] &#x4E2D;&#x7684;&#x6BCF;&#x4E2A;&#x5143;&#x7D20;&#xFF09;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x5904;&#x7406;&#x5927;&#x7EA6; 2 * n &#x4E2A;&#x8282;&#x70B9;&#x3002;&#x8FD9;&#x4F7F;&#x6784;&#x5EFA;&#x8FC7;&#x7A0B;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x4E3A; O(n)&#x3002;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E2A;&#x9012;&#x5F52;&#x66F4;&#x65B0;&#x7684;&#x8FC7;&#x7A0B;&#x90FD;&#x5C06;&#x4E22;&#x5F03;&#x533A;&#x95F4;&#x8303;&#x56F4;&#x7684;&#x4E00;&#x534A;&#xFF0C;&#x4EE5;&#x5230;&#x8FBE;&#x6811;&#x4E2D;&#x7684;&#x53F6;&#x5B50;&#x8282;&#x70B9;&#x3002;&#x8FD9;&#x7C7B;&#x4F3C;&#x4E8E;&#x4E8C;&#x5206;&#x641C;&#x7D22;&#xFF0C;&#x53EA;&#x9700;&#x8981;&#x5BF9;&#x6570;&#x65F6;&#x95F4;&#x3002;&#x66F4;&#x65B0;&#x53F6;&#x5B50;&#x540E;&#xFF0C;&#x5C06;&#x66F4;&#x65B0;&#x6811;&#x7684;&#x6BCF;&#x4E2A;&#x7EA7;&#x522B;&#x4E0A;&#x7684;&#x76F4;&#x63A5;&#x7956;&#x5148;&#x3002;&#x8FD9;&#x82B1;&#x8D39;&#x65F6;&#x95F4;&#x4E0E;&#x6811;&#x7684;&#x9AD8;&#x5EA6;&#x6210;&#x7EBF;&#x6027;&#x5173;&#x7CFB;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_9.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>4*n &#x4E2A;&#x8282;&#x70B9;&#x53EF;&#x4EE5;&#x786E;&#x4FDD;&#x5C06;&#x7EBF;&#x6BB5;&#x6811;&#x6784;&#x5EFA;&#x4E3A;&#x5B8C;&#x6574;&#x7684;&#x4E8C;&#x53C9;&#x6811;&#xFF0C;&#x4ECE;&#x800C;&#x6811;&#x7684;&#x9AD8;&#x5EA6;&#x4E3A; log(4*n + 1) &#x5411;&#x4E0A;&#x53D6;&#x6574;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x8BFB;&#x53D6;&#x548C;&#x66F4;&#x65B0;&#x7684;&#x65F6;&#x95F4;&#x590D;&#x6742;&#x5EA6;&#x90FD;&#x4E3A; O(log n)&#x3002;</p>
<h2 id="%E4%B8%83-%E5%B8%B8%E8%A7%81%E9%A2%98%E5%9E%8B">&#x4E03;. &#x5E38;&#x89C1;&#x9898;&#x578B;</h2>
<h3 id="1-range-sum-queries">1. Range Sum Queries</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/153_10.png" alt="&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x5B9E;&#x6218;" loading="lazy"></p>
<p>Range Sum Queries &#x662F; <a href="https://en.wikipedia.org/wiki/Range_query_(data_structures)">Range Queries</a> &#x95EE;&#x9898;&#x7684;&#x5B50;&#x96C6;&#x3002;&#x7ED9;&#x5B9A;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5143;&#x7D20;&#x6570;&#x7EC4;&#x6216;&#x5E8F;&#x5217;&#xFF0C;&#x9700;&#x8981;&#x5904;&#x7406;&#x7531;&#x5143;&#x7D20;&#x8303;&#x56F4;&#x7EC4;&#x6210;&#x7684;&#x8BFB;&#x53D6;&#x548C;&#x66F4;&#x65B0;&#x67E5;&#x8BE2;&#x3002;&#x7EBF;&#x6BB5;&#x6811; Segment Tree &#x548C;&#x6811;&#x72B6;&#x6570;&#x7EC4; Binary Indexed Tree (a.k.a. Fenwick Tree)) &#x90FD;&#x80FD;&#x5F88;&#x5FEB;&#x7684;&#x89E3;&#x51B3;&#x8FD9;&#x7C7B;&#x95EE;&#x9898;&#x3002;</p>
<p>Range Sum Query &#x95EE;&#x9898;&#x4E13;&#x95E8;&#x5904;&#x7406;&#x67E5;&#x8BE2;&#x8303;&#x56F4;&#x5185;&#x7684;&#x5143;&#x7D20;&#x603B;&#x548C;&#x3002;&#x8FD9;&#x4E2A;&#x95EE;&#x9898;&#x5B58;&#x5728;&#x8BB8;&#x591A;&#x53D8;&#x4F53;&#xFF0C;&#x5305;&#x62EC;<a href="https://leetcode.com/problems/range-sum-query-immutable/">&#x4E0D;&#x53EF;&#x53D8;&#x6570;&#x636E;</a>&#xFF0C;<a href="https://leetcode.com/problems/range-sum-query-mutable/">&#x53EF;&#x53D8;&#x6570;&#x636E;</a>&#xFF0C;<a href="https://leetcode.com/problems/range-addition/">&#x591A;&#x6B21;&#x66F4;&#x65B0;&#xFF0C;&#x5355;&#x6B21;&#x67E5;&#x8BE2;</a> &#x548C; <a href="https://leetcode.com/problems/range-sum-query-2d-mutable/">&#x591A;&#x6B21;&#x66F4;&#x65B0;&#xFF0C;&#x591A;&#x6B21;&#x67E5;&#x8BE2;</a>&#x3002;</p>
<h3 id="2-%E5%8D%95%E7%82%B9%E6%9B%B4%E6%96%B0">2. &#x5355;&#x70B9;&#x66F4;&#x65B0;</h3>
<ul>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1166">HDU 1166 &#x654C;&#x5175;&#x5E03;&#x9635;</a> update:&#x5355;&#x70B9;&#x589E;&#x51CF; query:&#x533A;&#x95F4;&#x6C42;&#x548C;</li>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1754">HDU 1754 I Hate It</a> update:&#x5355;&#x70B9;&#x66FF;&#x6362; query:&#x533A;&#x95F4;&#x6700;&#x503C;</li>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1394">HDU 1394 Minimum Inversion Number</a> update:&#x5355;&#x70B9;&#x589E;&#x51CF; query:&#x533A;&#x95F4;&#x6C42;&#x548C;</li>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=2795">HDU 2795 Billboard</a> query:&#x533A;&#x95F4;&#x6C42;&#x6700;&#x5927;&#x503C;&#x7684;&#x4F4D;&#x5B50;(&#x76F4;&#x63A5;&#x628A;update&#x7684;&#x64CD;&#x4F5C;&#x5728;query&#x91CC;&#x505A;&#x4E86;)</li>
</ul>
<h3 id="3-%E5%8C%BA%E9%97%B4%E6%9B%B4%E6%96%B0">3. &#x533A;&#x95F4;&#x66F4;&#x65B0;</h3>
<ul>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1698">HDU 1698 Just a Hook</a> update:&#x6210;&#x6BB5;&#x66FF;&#x6362; (&#x7531;&#x4E8E;&#x53EA;query&#x4E00;&#x6B21;&#x603B;&#x533A;&#x95F4;,&#x6240;&#x4EE5;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x8F93;&#x51FA; 1 &#x7ED3;&#x70B9;&#x7684;&#x4FE1;&#x606F;)</li>
<li><a href="http://poj.org/problem?id=3468">POJ 3468 A Simple Problem with Integers</a> update:&#x6210;&#x6BB5;&#x589E;&#x51CF; query:&#x533A;&#x95F4;&#x6C42;&#x548C;</li>
<li><a href="http://poj.org/problem?id=2528">POJ 2528 Mayor&#x2019;s posters</a> &#x79BB;&#x6563;&#x5316; + update:&#x6210;&#x6BB5;&#x66FF;&#x6362; query:&#x7B80;&#x5355;hash</li>
<li><a href="http://poj.org/problem?id=3225">POJ 3225 Help with Intervals</a> update:&#x6210;&#x6BB5;&#x66FF;&#x6362;,&#x533A;&#x95F4;&#x5F02;&#x6216; query:&#x7B80;&#x5355;hash</li>
</ul>
<h3 id="4-%E5%8C%BA%E9%97%B4%E5%90%88%E5%B9%B6">4. &#x533A;&#x95F4;&#x5408;&#x5E76;</h3>
<p>&#x8FD9;&#x7C7B;&#x9898;&#x76EE;&#x4F1A;&#x8BE2;&#x95EE;&#x533A;&#x95F4;&#x4E2D;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x7684;&#x8FDE;&#x7EED;&#x6700;&#x957F;&#x533A;&#x95F4;,&#x6240;&#x4EE5;PushUp&#x7684;&#x65F6;&#x5019;&#x9700;&#x8981;&#x5BF9;&#x5DE6;&#x53F3;&#x513F;&#x5B50;&#x7684;&#x533A;&#x95F4;&#x8FDB;&#x884C;&#x5408;&#x5E76;</p>
<ul>
<li><a href="http://poj.org/problem?id=3667">POJ 3667 Hotel</a> update:&#x533A;&#x95F4;&#x66FF;&#x6362; query:&#x8BE2;&#x95EE;&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x7684;&#x6700;&#x5DE6;&#x7AEF;&#x70B9;</li>
</ul>
<h3 id="5-%E6%89%AB%E6%8F%8F%E7%BA%BF">5. &#x626B;&#x63CF;&#x7EBF;</h3>
<p>&#x8FD9;&#x7C7B;&#x9898;&#x76EE;&#x9700;&#x8981;&#x5C06;&#x4E00;&#x4E9B;&#x64CD;&#x4F5C;&#x6392;&#x5E8F;,&#x7136;&#x540E;&#x4ECE;&#x5DE6;&#x5230;&#x53F3;&#x7528;&#x4E00;&#x6839;&#x626B;&#x63CF;&#x7EBF;&#x626B;&#x8FC7;&#x53BB;&#x6700;&#x5178;&#x578B;&#x7684;&#x5C31;&#x662F;&#x77E9;&#x5F62;&#x9762;&#x79EF;&#x5E76;,&#x5468;&#x957F;&#x5E76;&#x7B49;&#x9898;</p>
<ul>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1542">HDU 1542 Atlantis</a> update:&#x533A;&#x95F4;&#x589E;&#x51CF; query:&#x76F4;&#x63A5;&#x53D6;&#x6839;&#x8282;&#x70B9;&#x7684;&#x503C;</li>
<li><a href="http://acm.hdu.edu.cn/showproblem.php?pid=1828">HDU 1828 Picture</a> update:&#x533A;&#x95F4;&#x589E;&#x51CF; query:&#x76F4;&#x63A5;&#x53D6;&#x6839;&#x8282;&#x70B9;&#x7684;&#x503C;</li>
</ul>
<h3 id="6-%E8%AE%A1%E6%95%B0%E9%97%AE%E9%A2%98">6. &#x8BA1;&#x6570;&#x95EE;&#x9898;</h3>
<p>&#x5728; LeetCode &#x4E2D;&#x8FD8;&#x6709;&#x4E00;&#x7C7B;&#x95EE;&#x9898;&#x6D89;&#x53CA;&#x5230;&#x8BA1;&#x6570;&#x7684;&#x3002;<a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0315.Count-of-Smaller-Numbers-After-Self/">315. Count of Smaller Numbers After Self</a>&#xFF0C;<a href="https://books.halfrost.com/leetcode/ChapterFour/0300~0399/0327.Count-of-Range-Sum/">327. Count of Range Sum</a>&#xFF0C;<a href="https://books.halfrost.com/leetcode/ChapterFour/0400~0499/0493.Reverse-Pairs/">493. Reverse Pairs</a> &#x8FD9;&#x7C7B;&#x95EE;&#x9898;&#x53EF;&#x4EE5;&#x7528;&#x4E0B;&#x9762;&#x7684;&#x5957;&#x8DEF;&#x89E3;&#x51B3;&#x3002;&#x7EBF;&#x6BB5;&#x6811;&#x7684;&#x6BCF;&#x4E2A;&#x8282;&#x70B9;&#x5B58;&#x7684;&#x662F;&#x533A;&#x95F4;&#x8BA1;&#x6570;&#x3002;</p>
<pre><code class="language-go">// SegmentCountTree define
type SegmentCountTree struct {
	data, tree  []int
	left, right int
	merge       func(i, j int) int
}

// Init define
func (st *SegmentCountTree) Init(nums []int, oper func(i, j int) int) {
	st.merge = oper

	data, tree := make([]int, len(nums)), make([]int, 4*len(nums))
	for i := 0; i &lt; len(nums); i++ {
		data[i] = nums[i]
	}
	st.data, st.tree = data, tree
}

// &#x5728; treeIndex &#x7684;&#x4F4D;&#x7F6E;&#x521B;&#x5EFA; [left....right] &#x533A;&#x95F4;&#x7684;&#x7EBF;&#x6BB5;&#x6811;
func (st *SegmentCountTree) buildSegmentTree(treeIndex, left, right int) {
	if left == right {
		st.tree[treeIndex] = st.data[left]
		return
	}
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	st.buildSegmentTree(leftTreeIndex, left, midTreeIndex)
	st.buildSegmentTree(rightTreeIndex, midTreeIndex+1, right)
	st.tree[treeIndex] = st.merge(st.tree[leftTreeIndex], st.tree[rightTreeIndex])
}

func (st *SegmentCountTree) leftChild(index int) int {
	return 2*index + 1
}

func (st *SegmentCountTree) rightChild(index int) int {
	return 2*index + 2
}

// &#x67E5;&#x8BE2; [left....right] &#x533A;&#x95F4;&#x5185;&#x7684;&#x503C;

// Query define
func (st *SegmentCountTree) Query(left, right int) int {
	if len(st.data) &gt; 0 {
		return st.queryInTree(0, 0, len(st.data)-1, left, right)
	}
	return 0
}

// &#x5728;&#x4EE5; treeIndex &#x4E3A;&#x6839;&#x7684;&#x7EBF;&#x6BB5;&#x6811;&#x4E2D; [left...right] &#x7684;&#x8303;&#x56F4;&#x91CC;&#xFF0C;&#x641C;&#x7D22;&#x533A;&#x95F4; [queryLeft...queryRight] &#x7684;&#x503C;&#xFF0C;&#x503C;&#x662F;&#x8BA1;&#x6570;&#x503C;
func (st *SegmentCountTree) queryInTree(treeIndex, left, right, queryLeft, queryRight int) int {
	if queryRight &lt; st.data[left] || queryLeft &gt; st.data[right] {
		return 0
	}
	if queryLeft &lt;= st.data[left] &amp;&amp; queryRight &gt;= st.data[right] || left == right {
		return st.tree[treeIndex]
	}
	midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
	return st.queryInTree(rightTreeIndex, midTreeIndex+1, right, queryLeft, queryRight) +
		st.queryInTree(leftTreeIndex, left, midTreeIndex, queryLeft, queryRight)
}

// &#x66F4;&#x65B0;&#x8BA1;&#x6570;

// UpdateCount define
func (st *SegmentCountTree) UpdateCount(val int) {
	if len(st.data) &gt; 0 {
		st.updateCountInTree(0, 0, len(st.data)-1, val)
	}
}

// &#x4EE5; treeIndex &#x4E3A;&#x6839;&#xFF0C;&#x66F4;&#x65B0; [left...right] &#x533A;&#x95F4;&#x5185;&#x7684;&#x8BA1;&#x6570;
func (st *SegmentCountTree) updateCountInTree(treeIndex, left, right, val int) {
	if val &gt;= st.data[left] &amp;&amp; val &lt;= st.data[right] {
		st.tree[treeIndex]++
		if left == right {
			return
		}
		midTreeIndex, leftTreeIndex, rightTreeIndex := left+(right-left)&gt;&gt;1, st.leftChild(treeIndex), st.rightChild(treeIndex)
		st.updateCountInTree(rightTreeIndex, midTreeIndex+1, right, val)
		st.updateCountInTree(leftTreeIndex, left, midTreeIndex, val)
	}
}

</code></pre>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[TLS Application-Layer Protocol Negotiation Extension]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x6211;&#x4EEC;&#x4E3B;&#x8981;&#x6765;&#x8BA8;&#x8BBA;&#x8BA8;&#x8BBA; Transport Layer Security (TLS) &#x63E1;&#x624B;&#x4E2D;&#x7684; Application-Layer Protocol Negotiation &#x6269;&#x5C55;&#x3002;&#x5BF9;&#x4E8E;&#x5728;&#x540C;&#x4E00; TCP &#x6216; UDP &#x7AEF;&#x53E3;&#x4E0A;&#x652F;&#x6301;&#x591A;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x534F;&#x8BAE;&#x7684;&#x5B9E;</p>]]></description><link>https://halfrost.com/tls_alpn/</link><guid isPermaLink="false">634360bbd892dc307476ccde</guid><category><![CDATA[Protocol]]></category><category><![CDATA[HTTP]]></category><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 11 Aug 2019 15:43:00 GMT</pubDate><media:content url="https://img.halfrost.com/Blog/ArticleTitleImage/135_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/Blog/ArticleTitleImage/135_0.png" alt="TLS Application-Layer Protocol Negotiation Extension"><p>&#x8FD9;&#x7BC7;&#x6587;&#x7AE0;&#x6211;&#x4EEC;&#x4E3B;&#x8981;&#x6765;&#x8BA8;&#x8BBA;&#x8BA8;&#x8BBA; Transport Layer Security (TLS) &#x63E1;&#x624B;&#x4E2D;&#x7684; Application-Layer Protocol Negotiation &#x6269;&#x5C55;&#x3002;&#x5BF9;&#x4E8E;&#x5728;&#x540C;&#x4E00; TCP &#x6216; UDP &#x7AEF;&#x53E3;&#x4E0A;&#x652F;&#x6301;&#x591A;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x534F;&#x8BAE;&#x7684;&#x5B9E;&#x4F8B;&#xFF0C;&#x6B64;&#x6269;&#x5C55;&#x5141;&#x8BB8;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5C42;&#x53BB;&#x534F;&#x5546;&#x5C06;&#x5728; TLS &#x8FDE;&#x63A5;&#x4E2D;&#x4F7F;&#x7528;&#x54EA;&#x4E2A;&#x534F;&#x8BAE;&#x3002;</p>
<h2 id="introduction">&#x4E00;. Introduction</h2>
<p>&#x5E94;&#x7528;&#x5C42;&#x534F;&#x8BAE;&#x8D8A;&#x6765;&#x8D8A;&#x591A;&#x5730;&#x5C01;&#x88C5;&#x5728; TLS &#x534F;&#x8BAE; <a href="https://tools.ietf.org/html/rfc5246">[RFC5246]</a> &#x4E2D;&#x3002;&#x8FD9;&#x79CD;&#x5C01;&#x88C5;&#x4F7F;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x51E0;&#x4E4E;&#x6574;&#x4E2A;&#x5168;&#x7403; IP &#x57FA;&#x7840;&#x7ED3;&#x6784;&#x4E2D;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x7684;&#x73B0;&#x6709;&#x5B89;&#x5168;&#x901A;&#x4FE1;&#x94FE;&#x8DEF;&#x7684; 443 &#x7AEF;&#x53E3;&#x3002;</p>
<p>&#x5F53;&#x5355;&#x4E2A;&#x670D;&#x52A1;&#x5668;&#x7AEF;&#x7AEF;&#x53E3;&#x53F7;&#xFF08;&#x4F8B;&#x5982;&#x7AEF;&#x53E3; 443&#xFF09;&#x4E0A;&#x652F;&#x6301;&#x591A;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x534F;&#x8BAE;&#x65F6;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x5668;&#x9700;&#x8981;&#x534F;&#x5546;&#x7528;&#x4E8E;&#x6BCF;&#x4E2A;&#x8FDE;&#x63A5;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x534F;&#x8BAE;&#x3002;&#x5E0C;&#x671B;&#x5728;&#x4E0D;&#x589E;&#x52A0;&#x5BA2;&#x6237;&#x7AEF;&#x548C;&#x670D;&#x52A1;&#x5668;&#x4E4B;&#x95F4;&#x7684;&#x7F51;&#x7EDC;&#x5F80;&#x8FD4;&#x6B21;&#x6570;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5B8C;&#x6210;&#x6B64;&#x534F;&#x5546;&#xFF0C;&#x56E0;&#x4E3A;&#x6BCF;&#x6B21;&#x5F80;&#x8FD4;&#x90FD;&#x4F1A;&#x964D;&#x4F4E;&#x6700;&#x7EC8;&#x7528;&#x6237;&#x7684;&#x4F53;&#x9A8C;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x5141;&#x8BB8;&#x57FA;&#x4E8E;&#x534F;&#x5546;&#x7684;&#x5E94;&#x7528;&#x534F;&#x8BAE;&#x6765;&#x9009;&#x62E9;&#x8BC1;&#x4E66;&#x5C06;&#x662F;&#x6709;&#x5229;&#x7684;&#x3002;</p>
<p>&#x672C;&#x6587;&#x6307;&#x5B9A;&#x4E86; TLS &#x6269;&#x5C55;&#xFF0C;&#x8BE5;&#x6269;&#x5C55;&#x5141;&#x8BB8;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5C42;&#x5728; TLS &#x63E1;&#x624B;&#x4E2D;&#x534F;&#x5546;&#x534F;&#x8BAE;&#x7684;&#x9009;&#x62E9;&#x3002;HTTPbis WG &#x8981;&#x6C42;&#x8FDB;&#x884C;&#x8FD9;&#x9879;&#x5DE5;&#x4F5C;&#xFF0C;&#x4EE5;&#x89E3;&#x51B3;&#x901A;&#x8FC7; TLS &#x8FDB;&#x884C; HTTP/2&#xFF08;<a href="https://tools.ietf.org/html/rfc7301#ref-HTTP2">[HTTP2]</a>&#xFF09;&#x7684;&#x534F;&#x5546;&#x3002;&#x4F46;&#x662F;&#xFF0C;ALPN &#x6709;&#x52A9;&#x4E8E;&#x534F;&#x5546;&#x4EFB;&#x610F;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5C42;&#x534F;&#x8BAE;&#x3002;</p>
<p>&#x501F;&#x52A9; ALPN&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x4F1A;&#x5C06;&#x652F;&#x6301;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x534F;&#x8BAE;&#x5217;&#x8868;&#x4F5C;&#x4E3A; TLS ClientHello &#x6D88;&#x606F;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x53D1;&#x9001;&#x3002;&#x670D;&#x52A1;&#x5668;&#x9009;&#x62E9;&#x4E00;&#x4E2A;&#x534F;&#x8BAE;&#xFF0C;&#x5E76;&#x5C06;&#x6240;&#x9009;&#x534F;&#x8BAE;&#x4F5C;&#x4E3A; TLS ServerHello &#x6D88;&#x606F;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x53D1;&#x9001;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x53EF;&#x4EE5;&#x5728; TLS &#x63E1;&#x624B;&#x4E2D;&#x5B8C;&#x6210;&#x5E94;&#x7528;&#x534F;&#x8BAE;&#x534F;&#x5546;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x6DFB;&#x52A0;&#x7F51;&#x7EDC;&#x5F80;&#x8FD4;&#xFF0C;&#x5E76;&#x4E14;&#x5141;&#x8BB8;&#x670D;&#x52A1;&#x5668;&#x6839;&#x636E;&#x9700;&#x8981;&#xFF0C;&#x5C06;&#x4E0D;&#x540C;&#x7684;&#x8BC1;&#x4E66;&#x4E0E;&#x6BCF;&#x4E2A;&#x5E94;&#x7528;&#x534F;&#x8BAE;&#x76F8;&#x5173;&#x8054;&#x3002;</p>
<h2 id="applicationlayerprotocolnegotiation">&#x4E8C;. Application-Layer Protocol Negotiation</h2>
<h3 id="1theapplicationlayerprotocolnegotiationextension">1. The Application-Layer Protocol Negotiation Extension</h3>
<p>&#x5B9A;&#x4E49;&#x4E86;&#x4E00;&#x4E2A;&#x65B0;&#x7684;&#x6269;&#x5C55;&#x7C7B;&#x578B;(&quot;application_layer_protocol_negotiation(16)&quot;)&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x53EF;&#x4EE5;&#x5728;&#x5176; &#x201C;ClientHello&#x201D; &#x6D88;&#x606F;&#x4E2D;&#x5305;&#x542B;&#x8BE5;&#x6269;&#x5C55;&#x7C7B;&#x578B;&#x3002;</p>
<pre><code class="language-c">   enum {
       application_layer_protocol_negotiation(16), (65535)
   } ExtensionType;
</code></pre>
<p>(&quot;application_layer_protocol_negotiation(16)&quot;) &#x6269;&#x5C55;&#x540D;&#x7684; &quot;extension_data&quot; &#x5B57;&#x6BB5;&#x5E94;&#x5305;&#x542B; &quot;ProtocolNameList&quot; &#x503C;&#x3002;</p>
<pre><code class="language-c">   opaque ProtocolName&lt;1..2^8-1&gt;;

   struct {
       ProtocolName protocol_name_list&lt;2..2^16-1&gt;
   } ProtocolNameList;
</code></pre>
<p>&quot;ProtocolNameList&quot; &#x6309;&#x4F18;&#x5148;&#x7EA7;&#x4ECE;&#x9AD8;&#x5230;&#x4F4E;&#x5305;&#x542B;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x5E03;&#x7684;&#x534F;&#x8BAE;&#x5217;&#x8868;&#x3002; &#x534F;&#x8BAE;&#x662F;&#x7531; IANA &#x6CE8;&#x518C;&#x7684;&#x4E0D;&#x900F;&#x660E;&#x975E;&#x7A7A;&#x5B57;&#x8282;&#x4E32;&#x547D;&#x540D;&#x7684;&#xFF0C;&#x5982;&#x672C;&#x6587;&#x6863;&#x7B2C; 6 &#x8282;(&quot;IANA &#x6CE8;&#x610F;&#x4E8B;&#x9879;&quot;)&#x4E2D;&#x6240;&#x8FF0;&#x3002;&#x4E0D;&#x80FD;&#x5305;&#x542B;&#x7A7A;&#x5B57;&#x7B26;&#x4E32;&#xFF0C;&#x5E76;&#x4E14;&#x4E0D;&#x80FD;&#x622A;&#x65AD;&#x5B57;&#x8282;&#x5B57;&#x7B26;&#x4E32;&#x3002;</p>
<p>&#x63A5;&#x6536;&#x5230;&#x5305;&#x542B; &quot;application_layer_protocol_negotiation&quot; &#x6269;&#x5C55;&#x540D;&#x7684; ClientHello &#x7684;&#x670D;&#x52A1;&#x5668;&#x53EF;&#x4EE5;&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x8FD4;&#x56DE;&#x5408;&#x9002;&#x7684;&#x534F;&#x8BAE;&#x9009;&#x62E9;&#x4F5C;&#x4E3A;&#x54CD;&#x5E94;&#x3002;&#x670D;&#x52A1;&#x5668;&#x5C06;&#x5FFD;&#x7565;&#x5B83;&#x65E0;&#x6CD5;&#x8BC6;&#x522B;&#x7684;&#x4EFB;&#x4F55;&#x534F;&#x8BAE;&#x540D;&#x79F0;&#x3002;&#x4E00;&#x4E2A;&#x65B0;&#x7684; ServerHello &#x6269;&#x5C55;&#x7C7B;&#x578B;(&quot;application_layer_protocol_negotiation(16)&quot;) &#x53EF;&#x4EE5;&#x5728; ServerHello &#x6D88;&#x606F;&#x6269;&#x5C55;&#x4E2D;&#x8FD4;&#x56DE;&#x7ED9;&#x5BA2;&#x6237;&#x7AEF;&#x3002;(&quot;application_layer_protocol_negotiation(16)&quot;) &#x6269;&#x5C55;&#x540D;&#x7684; &quot;extension_data&quot; &#x5B57;&#x6BB5;&#x7684;&#x7ED3;&#x6784;&#x4E0E;&#x4E0A;&#x8FF0;&#x9488;&#x5BF9;&#x5BA2;&#x6237;&#x7AEF; &quot;extension_data&quot; &#x7684;&#x63CF;&#x8FF0;&#x76F8;&#x540C;&#xFF0C;&#x53EA;&#x662F; &quot;ProtocolNameList&quot; &#x5FC5;&#x987B;&#x5305;&#x542B;&#x4E00;&#x4E2A; &quot;ProtocolName&quot;&#x3002;</p>
<p>&#x56E0;&#x6B64;&#xFF0C;ClientHello &#x548C; ServerHello &#x6D88;&#x606F;&#x4E2D;&#x5E26;&#x6709;&quot; application_layer_protocol_negotiation&quot; &#x6269;&#x5C55;&#x540D;&#x7684;&#x5B8C;&#x6574;&#x63E1;&#x624B;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x6D41;&#x7A0B;&#xFF08;&#x4E0E; <a href="https://tools.ietf.org/html/rfc5246#section-7.3">[RFC5246]&#x7684; 7.3 &#x8282;</a>&#x76F8;&#x6BD4;&#xFF09;&#xFF1A;</p>
<pre><code class="language-c">   Client                                              Server

   ClientHello                     --------&gt;       ServerHello
     (ALPN extension &amp;                               (ALPN extension &amp;
      list of protocols)                              selected protocol)
                                                   Certificate*
                                                   ServerKeyExchange*
                                                   CertificateRequest*
                                   &lt;--------       ServerHelloDone
   Certificate*
   ClientKeyExchange
   CertificateVerify*
   [ChangeCipherSpec]
   Finished                        --------&gt;
                                                   [ChangeCipherSpec]
                                   &lt;--------       Finished
   Application Data                &lt;-------&gt;       Application Data

                                 Figure 1

   * Indicates optional or situation-dependent messages that are not always sent.
</code></pre>
<p>&#x5E26;&#x6709; &quot;application_layer_protocol_negotiation&quot; &#x6269;&#x5C55;&#x540D;&#x7684;&#x7B80;&#x77ED;&#x63E1;&#x624B;&#x5177;&#x6709;&#x4EE5;&#x4E0B;&#x6D41;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   Client                                              Server

   ClientHello                     --------&gt;       ServerHello
     (ALPN extension &amp;                               (ALPN extension &amp;
      list of protocols)                              selected protocol)
                                                   [ChangeCipherSpec]
                                   &lt;--------       Finished
   [ChangeCipherSpec]
   Finished                        --------&gt;
   Application Data                &lt;-------&gt;       Application Data
</code></pre>
<p>&#x4E0E;&#x8BB8;&#x591A;&#x5176;&#x4ED6; TLS &#x6269;&#x5C55;&#x4E0D;&#x540C;&#xFF0C;&#x6B64;&#x6269;&#x5C55;&#x4E0D;&#x5EFA;&#x7ACB;&#x4F1A;&#x8BDD;&#x7684;&#x5C5E;&#x6027;&#xFF0C;&#x4EC5;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x7684;&#x5C5E;&#x6027;&#x3002;&#x5F53;&#x4F7F;&#x7528;&#x4F1A;&#x8BDD;&#x6062;&#x590D;&#x6216;&#x4F1A;&#x8BDD;&#x7968;&#x8BC1; <a href="https://tools.ietf.org/html/rfc5077">[RFC5077]</a> &#x65F6;&#xFF0C;&#x6B64;&#x6269;&#x5C55;&#x7684;&#x5148;&#x524D;&#x5185;&#x5BB9;&#x65E0;&#x5173;&#x7D27;&#x8981;&#xFF0C;&#x5E76;&#x4E14;&#x53EA;&#x7528;&#x8003;&#x8651;&#x65B0;&#x63E1;&#x624B;&#x6D88;&#x606F;&#x4E2D;&#x7684;&#x503C;&#x3002;</p>
<h3 id="2protocolselection">2. Protocol Selection</h3>
<p>&#x671F;&#x671B;&#x670D;&#x52A1;&#x5668;&#x5C06;&#x5177;&#x6709;&#x4F18;&#x5148;&#x7EA7;&#x652F;&#x6301;&#x7684;&#x534F;&#x8BAE;&#x5217;&#x8868;&#xFF0C;&#x5E76;&#x4E14;&#x4EC5;&#x5728;&#x5BA2;&#x6237;&#x7AEF;&#x652F;&#x6301;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x624D;&#x9009;&#x62E9;&#x534F;&#x8BAE;&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x5E94;&#x8BE5;&#x9009;&#x62E9;&#x5B83;&#x6240;&#x652F;&#x6301;&#x7684;&#xFF0C;&#x5E76;&#x4E14;&#x4E5F;&#x662F;&#x7531;&#x5BA2;&#x6237;&#x7AEF;&#x53D1;&#x5E03;&#x7684;&#x6700;&#x4F18;&#x5148;&#x7684;&#x534F;&#x8BAE;&#x3002;&#x5982;&#x679C;&#x670D;&#x52A1;&#x5668;&#x4E0D;&#x652F;&#x6301;&#x5BA2;&#x6237;&#x7AEF;&#x4F20;&#x8FC7;&#x6765;&#x7684;&#x534F;&#x8BAE;&#xFF0C;&#x5219;&#x670D;&#x52A1;&#x5668;&#x5E94;&#x4EE5; &quot;no_application_protocol&quot; alert &#x9519;&#x8BEF;&#x56DE;&#x5E94;&#x3002;</p>
<pre><code class="language-c">   enum {
       no_application_protocol(120),
       (255)
   } AlertDescription;
</code></pre>
<p>&#x5728;&#x91CD;&#x65B0;&#x534F;&#x5546;&#x4E4B;&#x524D;&#xFF0C;ServerHello &#x7684; &quot;application_layer_protocol_negotiation&quot; &#x6269;&#x5C55;&#x7C7B;&#x578B;&#x4E2D;&#x6807;&#x8BC6;&#x7684;&#x534F;&#x8BAE;&#x5C06;&#x6B64;&#x8FDE;&#x63A5;&#x662F;&#x786E;&#x5B9A;&#x7684;&#x3002;&#x670D;&#x52A1;&#x5668;&#x4E0D;&#x4F1A;&#x54CD;&#x5E94;&#x6240;&#x9009;&#x534F;&#x8BAE;&#xFF0C;&#x5E76;&#x968F;&#x540E;&#x4F7F;&#x7528;&#x5176;&#x4ED6;&#x534F;&#x8BAE;&#x8FDB;&#x884C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6570;&#x636E;&#x4EA4;&#x6362;&#x3002;</p>
<h2 id="designconsiderations">&#x4E09;. Design Considerations</h2>
<p>ALPN &#x6269;&#x5C55;&#x65E8;&#x5728;&#x9075;&#x5FAA; TLS &#x534F;&#x8BAE;&#x6269;&#x5C55;&#x7684;&#x5178;&#x578B;&#x8BBE;&#x8BA1;&#x3002;&#x5177;&#x4F53;&#x800C;&#x8A00;&#xFF0C;&#x6839;&#x636E;&#x5DF2;&#x5EFA;&#x7ACB;&#x7684; TLS &#x4F53;&#x7CFB;&#x7ED3;&#x6784;&#xFF0C;&#x534F;&#x5546;&#x5B8C;&#x5168;&#x5728; client/server hello &#x4EA4;&#x6362;&#x4E2D;&#x6267;&#x884C;&#x3002; ServerHello &#x7684;&#x6269;&#x5C55; &quot;application_layer_protocol_negotiation&quot; &#x65E8;&#x5728;&#x786E;&#x5B9A;&#x8FDE;&#x63A5;&#x4E2D;&#x9009;&#x62E9;&#x7684;&#x534F;&#x8BAE;(&#x76F4;&#x5230;&#x91CD;&#x65B0;&#x534F;&#x5546;&#x8FDE;&#x63A5;)&#xFF0C;&#x5E76;&#x4EE5;&#x7EAF;&#x6587;&#x672C;&#x5F62;&#x5F0F;&#x53D1;&#x9001;&#xFF0C;&#x4EE5;&#x5141;&#x8BB8;&#x7F51;&#x7EDC;&#x5143;&#x7D20;&#x5728;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x8FD8;&#x6CA1;&#x786E;&#x5B9A;&#x5E94;&#x7528;&#x5C42;&#x534F;&#x8BAE;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5BFC;&#x81F4;&#x7684; TCP &#x6216; UDP &#x7AEF;&#x53E3;&#x53F7;&#x4E0D;&#x786E;&#x5B9A;&#x65F6;&#xFF0C;&#x4E3A;&#x8FDE;&#x63A5;&#x63D0;&#x4F9B;&#x5DEE;&#x5F02;&#x5316;&#x200B;&#x200B;&#x670D;&#x52A1;&#x3002;&#x901A;&#x8FC7;&#x5C06;&#x534F;&#x8BAE;&#x9009;&#x62E9;&#x7684;&#x6240;&#x6709;&#x6743;&#x653E;&#x5728;&#x670D;&#x52A1;&#x5668;&#x4E0A;&#xFF0C; ALPN &#x4FC3;&#x8FDB;&#x4EE5;&#x4E0B;&#x573A;&#x666F;&#xFF1A;&#x8BC1;&#x4E66;&#x9009;&#x62E9;&#x6216;&#x8FDE;&#x63A5;&#x91CD;&#x65B0;&#x8DEF;&#x7531;&#xFF0C;&#x8FD9;&#x4E24;&#x8005;&#x53EF;&#x80FD;&#x4F1A;&#x57FA;&#x4E8E;&#x534F;&#x5546;&#x7684;&#x534F;&#x8BAE;&#x3002;</p>
<p>&#x6700;&#x7EC8;&#xFF0C;&#x901A;&#x8FC7;&#x5728;&#x63E1;&#x624B;&#x8FC7;&#x7A0B;&#x4E2D;&#x4EE5;&#x660E;&#x6587;&#x65B9;&#x5F0F;&#x7BA1;&#x7406;&#x534F;&#x8BAE;&#x9009;&#x62E9;&#xFF0C;ALPN &#x907F;&#x514D;&#x4E86;&#x5728;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x4E4B;&#x524D;&#x5C31;&#x9690;&#x85CF;&#x534F;&#x5546;&#x534F;&#x8BAE;&#x800C;&#x5F15;&#x5165;&#x9519;&#x8BEF;&#x3002;&#x5982;&#x679C;&#x9700;&#x8981;&#x9690;&#x85CF;&#x534F;&#x8BAE;&#xFF0C;&#x5219;&#x5728;&#x5EFA;&#x7ACB;&#x8FDE;&#x63A5;&#x540E;&#x8FDB;&#x884C;&#x91CD;&#x65B0;&#x534F;&#x5546;&#xFF08;&#x8FD9;&#x5C06;&#x63D0;&#x4F9B;&#x771F;&#x6B63;&#x7684; TLS &#x5B89;&#x5168;&#x4FDD;&#x8BC1;&#xFF09;&#x5C06;&#x662F;&#x9996;&#x9009;&#x65B9;&#x6CD5;&#x3002;</p>
<h2 id="securityconsiderations">&#x56DB;. Security Considerations</h2>
<p>ALPN &#x6269;&#x5C55;&#x4E0D;&#x4F1A;&#x5F71;&#x54CD; TLS &#x4F1A;&#x8BDD;&#x5EFA;&#x7ACB;&#x6216;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6570;&#x636E;&#x4EA4;&#x6362;&#x7684;&#x5B89;&#x5168;&#x6027;&#x3002;ALPN &#x7528;&#x4E8E;&#x4E3A;&#x4E0E; TLS &#x8FDE;&#x63A5;&#x5173;&#x8054;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5C42;&#x534F;&#x8BAE;&#x63D0;&#x4F9B;&#x4E00;&#x4E2A;&#x5916;&#x90E8;&#x53EF;&#x89C1;&#x7684;&#x6807;&#x8BB0;&#x3002;&#x4ECE;&#x5386;&#x53F2;&#x4E0A;&#x770B;&#xFF0C;&#x53EF;&#x4EE5;&#x4ECE;&#x4F7F;&#x7528;&#x4E2D;&#x7684; TCP &#x6216; UDP &#x7AEF;&#x53E3;&#x53F7;&#x786E;&#x5B9A;&#x4E0E;&#x8FDE;&#x63A5;&#x5173;&#x8054;&#x7684;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5C42;&#x534F;&#x8BAE;&#x3002;</p>
<p>&#x6253;&#x7B97;&#x901A;&#x8FC7;&#x6DFB;&#x52A0;&#x65B0;&#x534F;&#x8BAE;&#x6807;&#x8BC6;&#x7B26;&#x6765;&#x6269;&#x5C55;&#x534F;&#x8BAE;&#x6807;&#x8BC6;&#x7B26;&#x6CE8;&#x518C;&#x8868;&#x7684;&#x5B9E;&#x73B0;&#x65B9;&#x548C;&#x6587;&#x6863;&#x7F16;&#x8F91;&#x8005;&#xFF0C;&#x5E94;&#x8003;&#x8651;&#x5230;&#x5728; TLS &#x7248;&#x672C; 1.2 &#x53CA;&#x4EE5;&#x4E0B;&#x7248;&#x672C;&#x4E2D;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x4EE5;&#x660E;&#x6587;&#x5F62;&#x5F0F;&#x53D1;&#x9001;&#x8FD9;&#x4E9B;&#x6807;&#x8BC6;&#x7B26;&#x3002;&#x4ED6;&#x4EEC;&#x8FD8;&#x5E94;&#x8BE5;&#x8003;&#x8651;&#x5230;&#xFF0C;&#x81F3;&#x5C11;&#x5728;&#x63A5;&#x4E0B;&#x6765;&#x7684;&#x5341;&#x5E74;&#x4E2D;&#xFF0C;&#x9884;&#x8BA1;&#x6D4F;&#x89C8;&#x5668;&#x901A;&#x5E38;&#x4F1A;&#x5728;&#x521D;&#x59CB; ClientHello &#x4E2D;&#x4F7F;&#x7528;&#x8FD9;&#x4E9B;&#x65E9;&#x671F;&#x7248;&#x672C;&#x7684; TLS&#x3002;</p>
<p>&#x5F53;&#x6B64;&#x7C7B;&#x6807;&#x8BC6;&#x7B26;&#x53EF;&#x80FD;&#x6CC4;&#x9732;&#x4E2A;&#x4EBA;&#x53EF;&#x8BC6;&#x522B;&#x4FE1;&#x606F;&#x65F6;&#xFF0C;&#x6216;&#x5F53;&#x6B64;&#x7C7B;&#x6CC4;&#x9732;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x6982;&#x8981;&#x5206;&#x6790;&#x6216;&#x6CC4;&#x9732;&#x654F;&#x611F;&#x4FE1;&#x606F;&#x65F6;&#xFF0C;&#x5FC5;&#x987B;&#x683C;&#x5916;&#x5C0F;&#x5FC3;&#x3002;&#x5982;&#x679C;&#x8FD9;&#x4E9B;&#x6807;&#x8BC6;&#x7B26;&#x4E2D;&#x7684;&#x4EFB;&#x4F55;&#x4E00;&#x4E2A;&#x9002;&#x7528;&#x4E8E;&#x6B64;&#x65B0;&#x534F;&#x8BAE;&#x6807;&#x8BC6;&#x7B26;&#xFF0C;&#x5219;&#x8BE5;&#x6807;&#x8BC6;&#x7B26;&#x4E0D;&#x5E94;&#x5728;&#x6E05;&#x6670;&#x53EF;&#x89C1;&#x7684; TLS &#x914D;&#x7F6E;&#x4E2D;&#x4F7F;&#x7528;&#xFF0C;&#x5E76;&#x4E14;&#x6307;&#x5B9A;&#x6B64;&#x7C7B;&#x534F;&#x8BAE;&#x6807;&#x8BC6;&#x7B26;&#x7684;&#x6587;&#x6863;&#x5E94;&#x5EFA;&#x8BAE;&#x907F;&#x514D;&#x8FD9;&#x79CD;&#x4E0D;&#x5B89;&#x5168;&#x4F7F;&#x7528;&#x3002;</p>
<h2 id="ianaconsiderations">&#x4E94;. IANA Considerations</h2>
<p>IANA &#x5DF2;&#x66F4;&#x65B0;&#x5176; &quot;ExtensionType &#x503C;&quot; &#x6CE8;&#x518C;&#x8868;&#xFF0C;&#x4EE5;&#x5305;&#x62EC;&#x4EE5;&#x4E0B;&#x6761;&#x76EE;&#xFF1A;</p>
<pre><code class="language-c">      16 application_layer_protocol_negotiation
</code></pre>
<p>&#x672C;&#x6587;&#x5728;&#x73B0;&#x6709;&#x7684; &quot;&#x4F20;&#x8F93;&#x5C42;&#x5B89;&#x5168;&#x6027;&#xFF08;TLS&#xFF09;&#x6269;&#x5C55;&quot; &#x6807;&#x9898;&#x4E0B;&#x4E3A;&#x6807;&#x9898;&#x4E3A;&#x201C;&#x5E94;&#x7528;&#x5C42;&#x534F;&#x8BAE;&#x534F;&#x5546;&#xFF08;ALPN&#xFF09;&#x534F;&#x8BAE; ID&#x201D;&#x7684;&#x534F;&#x8BAE;&#x6807;&#x8BC6;&#x7B26;&#x5EFA;&#x7ACB;&#x4E86;&#x6CE8;&#x518C;&#x8868;&#x3002;</p>
<p>&#x6B64;&#x6CE8;&#x518C;&#x8868;&#x4E2D;&#x7684;&#x6761;&#x76EE;&#x9700;&#x8981;&#x4EE5;&#x4E0B;&#x5B57;&#x6BB5;&#xFF1A;</p>
<ul>
<li>Protocol&#xFF1A;&#x534F;&#x8BAE;&#x540D;&#x79F0;&#x3002;</li>
<li>Identification Sequence&#xFF1A;&#x6807;&#x8BC6;&#x534F;&#x8BAE;&#x7684;&#x4E00;&#x7EC4;&#x7CBE;&#x786E;&#x7684;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x503C;&#x3002;&#x8FD9;&#x53EF;&#x4EE5;&#x662F;&#x534F;&#x8BAE;&#x540D;&#x79F0;&#x7684; UTF-8 &#x7F16;&#x7801; <a href="https://tools.ietf.org/html/rfc3629">[RFC3629]</a>&#x3002;</li>
<li>Reference&#xFF1A;&#x5BF9;&#x5B9A;&#x4E49;&#x534F;&#x8BAE;&#x7684;&#x89C4;&#x8303;&#x7684;&#x53C2;&#x8003;&#x3002;</li>
</ul>
<p>&#x8BE5;&#x6CE8;&#x518C;&#x8868;&#x5728; <a href="https://tools.ietf.org/html/rfc5226">[RFC5226]</a> &#x4E2D;&#x5B9A;&#x4E49;&#x7684; &quot;Expert Review&quot; &#x7B56;&#x7565;&#x4E0B;&#x8FD0;&#x884C;&#x3002;&#x5EFA;&#x8BAE;&#x6307;&#x5B9A;&#x7684;&#x4E13;&#x5BB6;&#x9F13;&#x52B1;&#x52A0;&#x5165;&#x5BF9;&#x6C38;&#x4E45;&#x6027;&#x548C;&#x6613;&#x4E8E;&#x83B7;&#x5F97;&#x7684;&#x89C4;&#x8303;&#x7684;&#x5F15;&#x7528;&#xFF0C;&#x8BE5;&#x89C4;&#x8303;&#x80FD;&#x591F;&#x521B;&#x5EFA;&#x6240;&#x6807;&#x8BC6;&#x534F;&#x8BAE;&#x7684;&#x53EF;&#x4E92;&#x64CD;&#x4F5C;&#x7684;&#x5B9E;&#x73B0;&#x3002;</p>
<p>&#x6B64;&#x6CE8;&#x518C;&#x8868;&#x7684;&#x521D;&#x59CB;&#x6CE8;&#x518C;&#x96C6;&#x5982;&#x4E0B;&#xFF1A;</p>
<p>Protocol:  HTTP/1.1<br>
Identification Sequence:<br>
0x68 0x74 0x74 0x70 0x2f 0x31 0x2e 0x31 (&quot;http/1.1&quot;)<br>
Reference:  <a href="https://tools.ietf.org/html/rfc7230">[RFC7230]</a></p>
<p>Protocol:  SPDY/1<br>
Identification Sequence:<br>
0x73 0x70 0x64 0x79 0x2f 0x31 (&quot;spdy/1&quot;)<br>
Reference:<br>
<a href="http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft1">http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft1</a></p>
<p>Protocol:  SPDY/2<br>
Identification Sequence:<br>
0x73 0x70 0x64 0x79 0x2f 0x32 (&quot;spdy/2&quot;)<br>
Reference:<br>
<a href="http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2">http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2</a></p>
<p>Protocol:  SPDY/3<br>
Identification Sequence:<br>
0x73 0x70 0x64 0x79 0x2f 0x33 (&quot;spdy/3&quot;)<br>
Reference:<br>
<a href="http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3">http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3</a></p>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://tools.ietf.org/html/rfc7301">RFC 7301</a></p>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="HTTPS://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="HTTPS://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/tls_alpn/">https://halfrost.com/tls_alpn/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[HPACK: Header Compression for HTTP/2]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="tableofcontents">Table of Contents</h2>
<h2 id="1introduction">1. Introduction</h2>
<ul>
<li>1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E6%80%BB%E8%A7%88">Overview</a></li>
<li>1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E7%BA%A6%E5%AE%9A">Conventions</a></li>
<li>1.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E6%9C%AF%E8%AF%AD">Terminology</a></li>
</ul>
<h2 id="2compressionprocessoverview">2. Compression Process Overview</h2>
<ul>
<li>2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-header-list-ordering">Header List Ordering</a></li>
<li>2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-encoding-and-decoding-contexts">Encoding and Decoding Contexts</a></li>
<li>2.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-indexing-tables">Indexing Tables</a></li>
<li>2.3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%9D%99%E6%80%81%E8%A1%A8">Static Table</a></li>
<li>2.3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%8A%A8%E6%80%81%E8%A1%A8">Dynamic Table</a></li>
<li>2.3.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E7%B4%A2%E5%BC%95%E5%9C%B0%E5%9D%80%E7%A9%BA%E9%97%B4">Index Address Space</a></li>
<li>2.</li></ul>]]></description><link>https://halfrost.com/http2_rfc7541/</link><guid isPermaLink="false">634360bbd892dc307476ccdd</guid><category><![CDATA[Protocol]]></category><category><![CDATA[HTTP]]></category><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 21 Jul 2019 15:41:00 GMT</pubDate><media:content url="https://img.halfrost.com/Blog/ArticleTitleImage/134_0.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="tableofcontents">Table of Contents</h2>
<h2 id="1introduction">1. Introduction</h2>
<ul>
<li>1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E6%80%BB%E8%A7%88">Overview</a></li>
<li>1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E7%BA%A6%E5%AE%9A">Conventions</a></li>
<li>1.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E6%9C%AF%E8%AF%AD">Terminology</a></li>
</ul>
<h2 id="2compressionprocessoverview">2. Compression Process Overview</h2>
<ul>
<li>2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-header-list-ordering">Header List Ordering</a></li>
<li>2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-encoding-and-decoding-contexts">Encoding and Decoding Contexts</a></li>
<li>2.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-indexing-tables">Indexing Tables</a></li>
<li>2.3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%9D%99%E6%80%81%E8%A1%A8">Static Table</a></li>
<li>2.3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%8A%A8%E6%80%81%E8%A1%A8">Dynamic Table</a></li>
<li>2.3.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E7%B4%A2%E5%BC%95%E5%9C%B0%E5%9D%80%E7%A9%BA%E9%97%B4">Index Address Space</a></li>
<li>2.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#4-header-field-representation">Header Field Representation</a></li>
</ul>
<h2 id="3headerblockdecoding">3. Header Block Decoding</h2>
<ul>
<li>3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-header-block-processing">Header Block Processing</a></li>
<li>3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-header-field-representation-processing">Header Field Representation Processing</a></li>
</ul>
<h2 id="4dynamictablemanagement">4. Dynamic Table Management</h2>
<ul>
<li>4.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-calculating-table-size">Calculating Table Size</a></li>
<li>4.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-maximum-table-size">Maximum Table Size</a></li>
<li>4.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-entry-eviction-when-dynamic-table-size-changes">Entry Eviction When Dynamic Table Size Changes</a></li>
<li>4.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#4-entry-eviction-when-adding-new-entries">Entry Eviction When Adding New Entries</a></li>
</ul>
<h2 id="5primitivetyperepresentations">5. Primitive Type Representations</h2>
<ul>
<li>5.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">Integer Representation</a></li>
<li>5.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">String Literal Representation</a></li>
</ul>
<h2 id="6binaryformat">6. Binary Format</h2>
<ul>
<li>6.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E7%B4%A2%E5%BC%95-header-%E5%AD%97%E6%AE%B5%E8%A1%A8%E7%A4%BA">Indexed Header Field Representation</a></li>
<li>6.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5%E6%A0%87%E8%AF%86">Literal Header Field Representation</a></li>
<li>6.2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E5%B8%A6%E5%A2%9E%E9%87%8F%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">Literal Header Field with Incremental Indexing</a></li>
<li>6.2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E4%B8%8D%E5%B8%A6%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">Literal Header Field without Indexing</a></li>
<li>6.2.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E4%BB%8E%E4%B8%8D%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">Literal Header Field Never Indexed</a></li>
<li>6.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%A7%E5%B0%8F%E6%9B%B4%E6%96%B0">Dynamic Table Size Update</a></li>
</ul>
<h2 id="7securityconsiderations">7. Security Considerations</h2>
<ul>
<li>7.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E6%8E%A2%E6%B5%8B%E5%8A%A8%E6%80%81%E8%A1%A8%E7%8A%B6%E6%80%81">Probing Dynamic Table State</a></li>
<li>7.1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%80%82%E7%94%A8%E4%BA%8E-hpack-%E5%92%8C-http">Applicability to HPACK and HTTP</a></li>
<li>7.1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%87%8F%E8%BD%BB">Mitigation</a></li>
<li>7.1.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E6%B0%B8%E4%B8%8D%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2">Never-Indexed Literals</a></li>
<li>7.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E9%9D%99%E6%80%81%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81">Static Huffman Encoding</a></li>
<li>7.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E5%86%85%E5%AD%98%E7%AE%A1%E7%90%86">Memory Consumption</a></li>
<li>7.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#4-%E5%AE%9E%E7%8E%B0%E6%96%B9%E7%9A%84%E9%99%90%E5%88%B6">Implementation Limits</a></li>
</ul>
<h2 id="8references">8. References</h2>
<blockquote>
<img src="https://img.halfrost.com/Blog/ArticleTitleImage/134_0.jpg" alt="HPACK: Header Compression for HTTP/2"><p>&#x8FD9;&#x4E00;&#x7AE0;&#x90FD;&#x662F;&#x5F15;&#x7528;&#x7684;&#x8BBA;&#x6587;&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x4E0D;&#x7FFB;&#x8BD1;&#x4E86;&#x3002;</p>
</blockquote>
<ul>
<li>8.1. Normative References</li>
<li>8.2. Informative References</li>
</ul>
<h2 id="appendixastatictabledefinition"><a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#%E4%B8%80-%E9%9D%99%E6%80%81%E8%A1%A8%E5%AE%9A%E4%B9%89">Appendix A. Static Table Definition</a></h2>
<h2 id="appendixbhuffmancode"><a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#%E4%BA%8C-%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81">Appendix B. Huffman Code</a></h2>
<h2 id="appendixcexamples">Appendix C. Examples</h2>
<ul>
<li>C.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E6%95%B4%E6%95%B0%E8%A1%A8%E7%A4%BA%E7%9A%84%E7%A4%BA%E4%BE%8B">Integer Representation Examples</a></li>
<li>C.1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E4%BD%BF%E7%94%A8-5-%E4%BD%8D%E5%89%8D%E7%BC%80%E5%AF%B9-10-%E8%BF%9B%E8%A1%8C%E7%BC%96%E7%A0%81">Example 1: Encoding 10 Using a 5-Bit Prefix</a></li>
<li>C.1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-%E4%BD%BF%E7%94%A8-5-%E4%BD%8D%E5%89%8D%E7%BC%80%E5%AF%B9-1337-%E8%BF%9B%E8%A1%8C%E7%BC%96%E7%A0%81">Example 2: Encoding 1337 Using a 5-Bit Prefix</a></li>
<li>C.1.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E4%BB%8E%E5%85%AB%E4%BD%8D%E5%AD%97%E8%8A%82%E8%BE%B9%E7%95%8C%E5%BC%80%E5%A7%8B%E5%AF%B9-42-%E8%BF%9B%E8%A1%8C%E7%BC%96%E7%A0%81">Example 3: Encoding 42 Starting at an Octet Boundary</a></li>
<li>C.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-header-%E5%AD%97%E6%AE%B5%E8%A1%A8%E7%A4%BA%E7%9A%84%E7%A4%BA%E4%BE%8B">Header Field Representation Examples</a></li>
<li>C.2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E5%B8%A6%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">Literal Header Field with Indexing</a></li>
<li>C.2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-%E6%B2%A1%E6%9C%89%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">Literal Header Field without Indexing</a></li>
<li>C.2.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E4%BB%8E%E4%B8%8D%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">Literal Header Field Never Indexed</a></li>
<li>C.2.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#4-%E7%B4%A2%E5%BC%95%E7%9A%84-header-%E5%AD%97%E6%AE%B5">Indexed Header Field</a></li>
<li>C.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E6%B2%A1%E6%9C%89%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81%E8%AF%B7%E6%B1%82%E7%9A%84%E7%A4%BA%E4%BE%8B">Request Examples without Huffman Coding</a></li>
<li>C.3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%AF%B7%E6%B1%82">First Request</a></li>
<li>C.3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%AF%B7%E6%B1%82">Second Request</a></li>
<li>C.3.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E7%AC%AC%E4%B8%89%E4%B8%AA%E8%AF%B7%E6%B1%82">Third Request</a></li>
<li>C.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#4-%E6%9C%89%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81%E8%AF%B7%E6%B1%82%E7%9A%84%E7%A4%BA%E4%BE%8B">Request Examples with Huffman Coding</a></li>
<li>C.4.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E8%AF%B7%E6%B1%82-1">First Request</a></li>
<li>C.4.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-%E7%AC%AC%E4%BA%8C%E4%B8%AA%E8%AF%B7%E6%B1%82-1">Second Request</a></li>
<li>C.4.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E7%AC%AC%E4%B8%89%E4%B8%AA%E8%AF%B7%E6%B1%82-1">Third Request</a></li>
<li>C.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#5-%E6%B2%A1%E6%9C%89%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81%E5%93%8D%E5%BA%94%E7%9A%84%E7%A4%BA%E4%BE%8B">Response Examples without Huffman Coding</a></li>
<li>C.5.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%93%8D%E5%BA%94">First Response</a></li>
<li>C.5.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-%E7%AC%AC%E4%BA%8C%E4%B8%AA%E5%93%8D%E5%BA%94">Second Response</a></li>
<li>C.5.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%93%8D%E5%BA%94">Third Response</a></li>
<li>C.6. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#6-%E6%9C%89%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81%E5%93%8D%E5%BA%94%E7%9A%84%E7%A4%BA%E4%BE%8B">Response Examples with Huffman Coding</a></li>
<li>C.6.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%93%8D%E5%BA%94-1">First Response</a></li>
<li>C.6.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#2-%E7%AC%AC%E4%BA%8C%E4%B8%AA%E5%93%8D%E5%BA%94-1">Second Response</a></li>
<li>C.6.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#3-%E7%AC%AC%E4%B8%89%E4%B8%AA%E5%93%8D%E5%BA%94-1">Third Response</a></li>
</ul>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://tools.ietf.org/html/rfc7541">RFC 7541</a></p>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="HTTPS://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="HTTPS://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/http2_rfc7541/">https://halfrost.com/http2_rfc7541/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[HTTP/2 HPACK 实际应用举例]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x5728;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#xFF0C;&#x5177;&#x4F53;&#x8BF4;&#x660E;&#x4E86; HPACK &#x7B97;&#x6CD5;&#x4E2D;&#x7684; 8 &#x79CD;&#x573A;&#x666F;(7 &#x79CD; Name-value &#x7684;&#x573A;&#x666F; + 1 &#x79CD;&#x52A8;&#x6001;&#x8868;&#x66F4;&#x65B0;&#x573A;&#x666F;)&#x3002;</p>
<blockquote>
<p>&#x52A8;&#x6001;&#x8868;&#x5927;&#x5C0F;&#x66F4;&#x65B0;&#x6709;&#x4E24;&#x79CD;&#x65B9;&#x5F0F;&#xFF0C;</p></blockquote>]]></description><link>https://halfrost.com/http2-hpack-example/</link><guid isPermaLink="false">634360bbd892dc307476ccdc</guid><category><![CDATA[Protocol]]></category><category><![CDATA[HTTP]]></category><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 14 Jul 2019 15:37:00 GMT</pubDate><media:content url="https://img.halfrost.com/Blog/ArticleTitleImage/133_0.jpeg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/Blog/ArticleTitleImage/133_0.jpeg" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;"><p>&#x5728;&#x4E0A;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#xFF0C;&#x5177;&#x4F53;&#x8BF4;&#x660E;&#x4E86; HPACK &#x7B97;&#x6CD5;&#x4E2D;&#x7684; 8 &#x79CD;&#x573A;&#x666F;(7 &#x79CD; Name-value &#x7684;&#x573A;&#x666F; + 1 &#x79CD;&#x52A8;&#x6001;&#x8868;&#x66F4;&#x65B0;&#x573A;&#x666F;)&#x3002;</p>
<blockquote>
<p>&#x52A8;&#x6001;&#x8868;&#x5927;&#x5C0F;&#x66F4;&#x65B0;&#x6709;&#x4E24;&#x79CD;&#x65B9;&#x5F0F;&#xFF0C;&#x4E00;&#x79CD;&#x662F;&#x5728; HEADERS &#x5E27;&#x4E2D;&#x76F4;&#x63A5;&#x4FEE;&#x6539;(&#x201C;001&#x201D; 3 &#x4F4D;&#x6A21;&#x5F0F;&#x5F00;&#x59CB;)&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#x662F;&#x901A;&#x8FC7; SETTINGS &#x5E27;&#x4E2D;&#x7684; SETTINGS_HEADER_TABLE_SIZE &#x4E2D;&#x8BBE;&#x7F6E;&#x7684;&#x3002;</p>
</blockquote>
<p>&#x5728;&#x4ECB;&#x7ECD; HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E4B;&#x524D;&#xFF0C;&#x9700;&#x8981;&#x5148;&#x6765;&#x770B;&#x770B;&#x9759;&#x6001;&#x8868;&#x7684;&#x5B9A;&#x4E49;&#x548C; HTTP/2 &#x4E2D;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x5B9A;&#x4E49;&#x3002;</p>
<h2 id>&#x4E00;. &#x9759;&#x6001;&#x8868;&#x5B9A;&#x4E49;</h2>
<p>&#x9759;&#x6001;&#x8868;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%9D%99%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.1 &#x8282;</a>&#xFF09;&#x5305;&#x542B;&#x4E00;&#x4E2A;&#x9884;&#x5B9A;&#x4E49;&#x4E14;&#x4E0D;&#x53EF;&#x66F4;&#x6539;&#x7684; header &#x5B57;&#x6BB5;&#x5217;&#x8868;&#x3002;</p>
<p>&#x9759;&#x6001;&#x8868;&#x662F;&#x6839;&#x636E;&#x6D41;&#x884C;&#x7F51;&#x7AD9;&#x4F7F;&#x7528;&#x7684;&#x6700;&#x9891;&#x7E41;&#x7684; header &#x5B57;&#x6BB5;&#x521B;&#x5EFA;&#x7684;&#xFF0C;&#x5E76;&#x6DFB;&#x52A0;&#x4E86; HTTP/2 &#x7279;&#x5B9A;&#x7684;&#x4F2A; header &#x5B57;&#x6BB5;&#xFF08;&#x8BF7;&#x53C2;&#x89C1; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#2-http-header-fields">[HTTP2]&#x7684; 8.1.2.1 &#x8282;</a>&#xFF09;&#x3002;&#x5BF9;&#x4E8E;&#x5177;&#x6709;&#x4E00;&#x4E9B;&#x9891;&#x7E41;&#x503C;&#x7684; header &#x5B57;&#x6BB5;&#xFF0C;&#x4E3A;&#x6BCF;&#x4E2A;&#x8FD9;&#x4E9B;&#x9891;&#x7E41;&#x503C;&#x6DFB;&#x52A0;&#x4E86;&#x4E00;&#x4E2A;&#x6761;&#x76EE;&#x3002;&#x5BF9;&#x4E8E;&#x5176;&#x4ED6;&#x6807;&#x9898;&#x5B57;&#x6BB5;&#xFF0C;&#x6DFB;&#x52A0;&#x4E86;&#x5E26;&#x6709;&#x7A7A;&#x503C;&#x7684;&#x6761;&#x76EE;&#x3002;</p>
<p>&#x8868; 1 &#x5217;&#x51FA;&#x4E86;&#x6784;&#x6210;&#x9759;&#x6001;&#x8868;&#x7684;&#x9884;&#x5B9A;&#x4E49; header &#x5B57;&#x6BB5;&#xFF0C;&#x5E76;&#x63D0;&#x4F9B;&#x4E86;&#x6BCF;&#x4E2A;&#x6761;&#x76EE;&#x7684;&#x7D22;&#x5F15;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:center">Index</th>
<th style="text-align:center">Header Name</th>
<th style="text-align:center">Header Value</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">:authority</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">:method</td>
<td style="text-align:center">GET</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">:method</td>
<td style="text-align:center">POST</td>
</tr>
<tr>
<td style="text-align:center">4</td>
<td style="text-align:center">:path</td>
<td style="text-align:center">/</td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:center">:path</td>
<td style="text-align:center">/index.html</td>
</tr>
<tr>
<td style="text-align:center">6</td>
<td style="text-align:center">:scheme</td>
<td style="text-align:center">http</td>
</tr>
<tr>
<td style="text-align:center">7</td>
<td style="text-align:center">:scheme</td>
<td style="text-align:center">https</td>
</tr>
<tr>
<td style="text-align:center">8</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">200</td>
</tr>
<tr>
<td style="text-align:center">9</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">204</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">206</td>
</tr>
<tr>
<td style="text-align:center">11</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">304</td>
</tr>
<tr>
<td style="text-align:center">12</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">400</td>
</tr>
<tr>
<td style="text-align:center">13</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">404</td>
</tr>
<tr>
<td style="text-align:center">14</td>
<td style="text-align:center">:status</td>
<td style="text-align:center">500</td>
</tr>
<tr>
<td style="text-align:center">15</td>
<td style="text-align:center">accept-charset</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">16</td>
<td style="text-align:center">accept-encoding</td>
<td style="text-align:center">gzip, deflate</td>
</tr>
<tr>
<td style="text-align:center">17</td>
<td style="text-align:center">accept-language</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">18</td>
<td style="text-align:center">accept-ranges</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">19</td>
<td style="text-align:center">accept</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">20</td>
<td style="text-align:center">access-control-allow-origin</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">21</td>
<td style="text-align:center">age</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">22</td>
<td style="text-align:center">allow</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">23</td>
<td style="text-align:center">authorization</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">24</td>
<td style="text-align:center">cache-control</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">25</td>
<td style="text-align:center">content-disposition</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">26</td>
<td style="text-align:center">content-encoding</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">27</td>
<td style="text-align:center">content-language</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">28</td>
<td style="text-align:center">content-length</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">29</td>
<td style="text-align:center">content-location</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">30</td>
<td style="text-align:center">content-range</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">31</td>
<td style="text-align:center">content-type</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">32</td>
<td style="text-align:center">cookie</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">33</td>
<td style="text-align:center">date</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">34</td>
<td style="text-align:center">etag</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">35</td>
<td style="text-align:center">expect</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">36</td>
<td style="text-align:center">expires</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">37</td>
<td style="text-align:center">from</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">38</td>
<td style="text-align:center">host</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">39</td>
<td style="text-align:center">if-match</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">40</td>
<td style="text-align:center">if-modified-since</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">41</td>
<td style="text-align:center">if-none-match</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">42</td>
<td style="text-align:center">if-range</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">43</td>
<td style="text-align:center">if-unmodified-since</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">44</td>
<td style="text-align:center">last-modified</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">45</td>
<td style="text-align:center">link</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">46</td>
<td style="text-align:center">location</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">47</td>
<td style="text-align:center">max-forwards</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">48</td>
<td style="text-align:center">proxy-authenticate</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">49</td>
<td style="text-align:center">proxy-authorization</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">50</td>
<td style="text-align:center">range</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">51</td>
<td style="text-align:center">referer</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">52</td>
<td style="text-align:center">refresh</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">53</td>
<td style="text-align:center">retry-after</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">54</td>
<td style="text-align:center">server</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">55</td>
<td style="text-align:center">set-cookie</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">56</td>
<td style="text-align:center">strict-transport-security</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">57</td>
<td style="text-align:center">transfer-encoding</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">58</td>
<td style="text-align:center">user-agent</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">59</td>
<td style="text-align:center">vary</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">60</td>
<td style="text-align:center">via</td>
<td style="text-align:center"></td>
</tr>
<tr>
<td style="text-align:center">61</td>
<td style="text-align:center">www-authenticate</td>
<td style="text-align:center"></td>
</tr>
</tbody>
</table>
<h2 id>&#x4E8C;. &#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;</h2>
<h3 id="1">1. &#x970D;&#x592B;&#x66FC;&#x7B97;&#x6CD5;</h3>
<p>&#x5982;&#x679C;&#x6BCF;&#x4E2A;&#x5B57;&#x7B26;&#x90FD;&#x662F;&#x7B49;&#x957F;&#x7684;&#x7F16;&#x7801;&#x5F62;&#x5F0F;&#xFF0C;&#x662F;&#x5426;&#x6709;&#x4E00;&#x79CD;&#x7B97;&#x6CD5;&#x80FD;&#x4FDD;&#x8BC1;&#x5927;&#x5E45;&#x538B;&#x7F29;&#x8FD9;&#x4E9B;&#x6570;&#x636E;&#xFF1F;&#x7B49;&#x957F;&#x7684;&#x7F16;&#x7801;&#x5F62;&#x5F0F;&#x9996;&#x5148;&#x9762;&#x4E34;&#x7684;&#x4E00;&#x4E2A;&#x95EE;&#x9898;&#x662F;&#x5982;&#x4F55;&#x907F;&#x514D;&#x89E3;&#x538B;&#x7684;&#x65F6;&#x5019;&#x51FA;&#x73B0;&#x6B67;&#x4E49;&#x8BEF;&#x8BFB;&#x3002;</p>
<p>&#x970D;&#x592B;&#x66FC;&#x5728; 1952 &#x5E74;&#x53D1;&#x73B0;&#x4E86;&#x6700;&#x4F18;&#x524D;&#x7F00;&#x7801;&#x7684;&#x7B97;&#x6CD5;&#xFF0C;&#x7B97;&#x6CD5;&#x7684;&#x6838;&#x5FC3;&#x601D;&#x60F3;&#x662F;&#xFF1A;&#x51FA;&#x73B0;&#x6982;&#x7387;&#x6BD4;&#x8F83;&#x5927;&#x7684;&#x7B26;&#x53F7;&#x91C7;&#x7528;&#x8F83;&#x77ED;&#x7684;&#x7F16;&#x7801;&#xFF0C;&#x6982;&#x7387;&#x8F83;&#x5C0F;&#x7684;&#x7B26;&#x53F7;&#x91C7;&#x7528;&#x8F83;&#x957F;&#x7684;&#x7F16;&#x7801;&#x3002;</p>
<p>&#x4E3E;&#x4E2A;&#x4F8B;&#x5B50;&#xFF0C;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x4E2D;&#x6709;&#x5F88;&#x591A;&#x5355;&#x8BCD;&#xFF0C;&#x6211;&#x4EEC;&#x8BB2;&#x6240;&#x6709;&#x5B57;&#x6BCD;&#x51FA;&#x73B0;&#x7684;&#x9891;&#x7387;&#x90FD;&#x7EDF;&#x8BA1;&#x51FA;&#x6765;&#xFF0C;&#x4EE5; a&#x3001;b&#x3001;c&#x3001;d&#x3001;e&#x3001;f &#x8FD9; 6 &#x4E2A;&#x5B57;&#x6BCD;&#x4E3A;&#x4F8B;&#xFF0C;&#x5B83;&#x4EEC;&#x7684;&#x51FA;&#x73B0;&#x9891;&#x7387;&#x5206;&#x522B;&#x5982;&#x4E0B;&#xFF1A;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_1.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x7B2C;&#x4E00;&#x6B65;&#x5148;&#x4ECE;&#x8FD9;&#x4E9B;&#x9891;&#x7387;&#x4E2D;&#x9009;&#x53D6;&#x9891;&#x7387;&#x6700;&#x5C0F;&#x7684; 2 &#x4E2A;&#xFF0C;&#x8FDB;&#x884C;&#x5408;&#x5E76;&#x3002;&#x5DE6;&#x5B50;&#x6811;&#x5C0F;&#xFF0C;&#x53F3;&#x5B50;&#x6811;&#x5927;&#x3002;&#x5408;&#x5E76;&#x6210;&#x65B0;&#x7684;&#x8282;&#x70B9;&#x4EE5;&#x540E;&#xFF0C;&#x518D;&#x653E;&#x56DE;&#x539F;&#x6709;&#x7684;&#x8282;&#x70B9;&#x4E2D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_2.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x91CD;&#x590D;&#x7B2C;&#x4E00;&#x6B65;&#xFF0C;&#x76F4;&#x5230;&#x6240;&#x6709;&#x8282;&#x70B9;&#x90FD;&#x5408;&#x5E76;&#x5230;&#x4E00;&#x68F5;&#x6811;&#x4E0A;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_3.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x6700;&#x540E;&#x7ED9;&#x6BCF;&#x4E2A;&#x5DE6;&#x5B50;&#x6811;&#x7684;&#x6307;&#x9488;&#x4E0A;&#x7F16;&#x7801;&#x4E3A; 0&#xFF0C;&#x53F3;&#x5B50;&#x6811;&#x7684;&#x6307;&#x9488;&#x4E0A;&#x7F16;&#x7801;&#x4E3A; 1&#x3002;&#x4EE5;&#x4E0A; 6 &#x4E2A;&#x5B57;&#x6BCD;&#x7684;&#x6700;&#x7EC8;&#x7F16;&#x7801;&#x662F; a = 0, b = 101, c = 100, d = 111, e = 1101, f = 1100 &#x3002;</p>
<h3 id="2http2">2. &#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x5728; HTTP/2 &#x4E2D;&#x7684;&#x5B9A;&#x4E49;</h3>
<p>&#x5F53;&#x4F7F;&#x7528;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x5BF9;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#x65F6;&#xFF0C;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x970D;&#x592B;&#x66FC;&#x4EE3;&#x7801;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x6B64;&#x970D;&#x592B;&#x66FC;&#x4EE3;&#x7801;&#x662F;&#x4ECE;&#x5927;&#x91CF; HTTP header &#x6837;&#x672C;&#x83B7;&#x5F97;&#x7684;&#x7EDF;&#x8BA1;&#x4FE1;&#x606F;&#x4E2D;&#x751F;&#x6210;&#x7684;&#x3002;&#x8FD9;&#x662F;&#x89C4;&#x8303;&#x7684;&#x970D;&#x592B;&#x66FC;&#x4EE3;&#x7801;&#xFF08;&#x8BF7;&#x53C2;&#x89C1; <a href="https://tools.ietf.org/html/rfc7541#ref-CANONICAL">[CANONICAL]</a>&#xFF09;&#xFF0C;&#x9700;&#x8981;&#x8FDB;&#x884C;&#x4E00;&#x4E9B;&#x8C03;&#x6574;&#x4EE5;&#x786E;&#x4FDD;&#x6CA1;&#x6709;&#x7B26;&#x53F7;&#x5177;&#x6709;&#x552F;&#x4E00;&#x7684;&#x4EE3;&#x7801;&#x957F;&#x5EA6;&#x3002;</p>
<p>&#x8868;&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x884C;&#x5747;&#x5B9A;&#x4E49;&#x7528;&#x4E8E;&#x8868;&#x793A;&#x7B26;&#x53F7;&#x7684;&#x4EE3;&#x7801;&#xFF1A;</p>
<p>sym&#xFF1A;&#x8981;&#x8868;&#x793A;&#x7684;&#x7B26;&#x53F7;&#x3002;&#x5B83;&#x662F;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x5341;&#x8FDB;&#x5236;&#x503C;&#xFF0C;&#x53EF;&#x80FD;&#x4EE5;ASCII&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x4E3A;&#x524D;&#x7F00;&#x3002;&#x7279;&#x5B9A;&#x7684;&#x7B26;&#x53F7; &#x201C;EOS&#x201D; &#x7528;&#x4E8E;&#x6307;&#x793A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684;&#x7ED3;&#x5C3E;&#x3002;</p>
<p>code as bits&#xFF1A;&#x7B26;&#x53F7;&#x7684;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#xFF0C;&#x8868;&#x793A;&#x4E3A;&#x4EE5;2&#x4E3A;&#x57FA;&#x7684;&#x6574;&#x6570;&#xFF0C;&#x5728;&#x6700;&#x9AD8;&#x6709;&#x6548;&#x4F4D;&#xFF08;MSB&#xFF09;&#x4E0A;&#x5BF9;&#x9F50;&#x3002;</p>
<p>code as hex&#xFF1A;&#x7B26;&#x53F7;&#x7684;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#xFF0C;&#x4EE5;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x6574;&#x6570;&#x8868;&#x793A;&#xFF0C;&#x5728;&#x6700;&#x4F4E;&#x6709;&#x6548;&#x4F4D;&#xFF08;LSB&#xFF09;&#x4E0A;&#x5BF9;&#x9F50;&#x3002;</p>
<p>len&#xFF1A;&#x4EE3;&#x8868;&#x7B26;&#x53F7;&#x7684;&#x4EE3;&#x7801;&#x7684;&#x4F4D;&#x6570;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x7B26;&#x53F7; 47 &#x7684;&#x4EE3;&#x7801;&#xFF08;&#x5BF9;&#x5E94;&#x4E8E; ASCII &#x5B57;&#x7B26; &#x201C;/&#x201D;&#xFF09;&#x7531; 6 &#x4F4D; &#x201C;0&#x201D;&#xFF0C;&#x201C;1&#x201D;&#xFF0C;&#x201C;1&#x201D;&#xFF0C;&#x201C;0&#x201D;&#xFF0C;&#x201C;0&#x201D;&#xFF0C;&#x201C;0&#x201D;&#x7EC4;&#x6210;&#x3002;&#x8FD9;&#x5BF9;&#x5E94;&#x4E8E;&#x4EE5; 6 &#x4F4D;&#x7F16;&#x7801;&#x7684;&#x503C; 0x18&#xFF08;&#x4EE5;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF09;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:right">sym</th>
<th style="text-align:left">code as bits<br>aligned to MSB</th>
<th style="text-align:right">code as hex<br> aligned to LSB</th>
<th style="text-align:center">len in bits</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right">(  0)</td>
<td style="text-align:left">|11111111|11000</td>
<td style="text-align:right">1ff8</td>
<td style="text-align:center">[13]</td>
</tr>
<tr>
<td style="text-align:right">(  1)</td>
<td style="text-align:left">|11111111|11111111|1011000</td>
<td style="text-align:right">7fffd8</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(  2)</td>
<td style="text-align:left">|11111111|11111111|11111110|0010</td>
<td style="text-align:right">fffffe2</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  3)</td>
<td style="text-align:left">|11111111|11111111|11111110|0011</td>
<td style="text-align:right">fffffe3</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  4)</td>
<td style="text-align:left">|11111111|11111111|11111110|0100</td>
<td style="text-align:right">fffffe4</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  5)</td>
<td style="text-align:left">|11111111|11111111|11111110|0101</td>
<td style="text-align:right">fffffe5</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  6)</td>
<td style="text-align:left">|11111111|11111111|11111110|0110</td>
<td style="text-align:right">fffffe6</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  7)</td>
<td style="text-align:left">|11111111|11111111|11111110|0111</td>
<td style="text-align:right">fffffe7</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  8)</td>
<td style="text-align:left">|11111111|11111111|11111110|1000</td>
<td style="text-align:right">fffffe8</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(  9)</td>
<td style="text-align:left">|11111111|11111111|11101010</td>
<td style="text-align:right">ffffea</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">( 10)</td>
<td style="text-align:left">|11111111|11111111|11111111|111100</td>
<td style="text-align:right">3ffffffc</td>
<td style="text-align:center">[30]</td>
</tr>
<tr>
<td style="text-align:right">( 11)</td>
<td style="text-align:left">|11111111|11111111|11111110|1001</td>
<td style="text-align:right">fffffe9</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 12)</td>
<td style="text-align:left">|11111111|11111111|11111110|1010</td>
<td style="text-align:right">fffffea</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 13)</td>
<td style="text-align:left">|11111111|11111111|11111111|111101</td>
<td style="text-align:right">3ffffffd</td>
<td style="text-align:center">[30]</td>
</tr>
<tr>
<td style="text-align:right">( 14)</td>
<td style="text-align:left">|11111111|11111111|11111110|1011</td>
<td style="text-align:right">fffffeb</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 15)</td>
<td style="text-align:left">|11111111|11111111|11111110|1100</td>
<td style="text-align:right">fffffec</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 16)</td>
<td style="text-align:left">|11111111|11111111|11111110|1101</td>
<td style="text-align:right">fffffed</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 17)</td>
<td style="text-align:left">|11111111|11111111|11111110|1110</td>
<td style="text-align:right">fffffee</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 18)</td>
<td style="text-align:left">|11111111|11111111|11111110|1111</td>
<td style="text-align:right">fffffef</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 19)</td>
<td style="text-align:left">|11111111|11111111|11111111|0000</td>
<td style="text-align:right">ffffff0</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 20)</td>
<td style="text-align:left">|11111111|11111111|11111111|0001</td>
<td style="text-align:right">ffffff1</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 21)</td>
<td style="text-align:left">|11111111|11111111|11111111|0010</td>
<td style="text-align:right">ffffff2</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 22)</td>
<td style="text-align:left">|11111111|11111111|11111111|111110</td>
<td style="text-align:right">3ffffffe</td>
<td style="text-align:center">[30]</td>
</tr>
<tr>
<td style="text-align:right">( 23)</td>
<td style="text-align:left">|11111111|11111111|11111111|0011</td>
<td style="text-align:right">ffffff3</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 24)</td>
<td style="text-align:left">|11111111|11111111|11111111|0100</td>
<td style="text-align:right">ffffff4</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 25)</td>
<td style="text-align:left">|11111111|11111111|11111111|0101</td>
<td style="text-align:right">ffffff5</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 26)</td>
<td style="text-align:left">|11111111|11111111|11111111|0110</td>
<td style="text-align:right">ffffff6</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 27)</td>
<td style="text-align:left">|11111111|11111111|11111111|0111</td>
<td style="text-align:right">ffffff7</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 28)</td>
<td style="text-align:left">|11111111|11111111|11111111|1000</td>
<td style="text-align:right">ffffff8</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 29)</td>
<td style="text-align:left">|11111111|11111111|11111111|1001</td>
<td style="text-align:right">ffffff9</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 30)</td>
<td style="text-align:left">|11111111|11111111|11111111|1010</td>
<td style="text-align:right">ffffffa</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">( 31)</td>
<td style="text-align:left">|11111111|11111111|11111111|1011</td>
<td style="text-align:right">ffffffb</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">&apos; &apos; ( 32)</td>
<td style="text-align:left">|010100</td>
<td style="text-align:right">14</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;!&apos; ( 33)</td>
<td style="text-align:left">|11111110|00</td>
<td style="text-align:right">3f8</td>
<td style="text-align:center">[10]</td>
</tr>
<tr>
<td style="text-align:right">&apos;&quot;&apos; ( 34)</td>
<td style="text-align:left">|11111110|01</td>
<td style="text-align:right">3f9</td>
<td style="text-align:center">[10]</td>
</tr>
<tr>
<td style="text-align:right">&apos;#&apos; ( 35)</td>
<td style="text-align:left">|11111111|1010</td>
<td style="text-align:right">ffa</td>
<td style="text-align:center">[12]</td>
</tr>
<tr>
<td style="text-align:right">&apos;$&apos; ( 36)</td>
<td style="text-align:left">|11111111|11001</td>
<td style="text-align:right">1ff9</td>
<td style="text-align:center">[13]</td>
</tr>
<tr>
<td style="text-align:right">&apos;%&apos; ( 37)</td>
<td style="text-align:left">|010101</td>
<td style="text-align:right">15</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;&amp;&apos; ( 38)</td>
<td style="text-align:left">|11111000</td>
<td style="text-align:right">f8</td>
<td style="text-align:center">[ 8]</td>
</tr>
<tr>
<td style="text-align:right">&apos;&apos;&apos; ( 39)</td>
<td style="text-align:left">|11111111|010</td>
<td style="text-align:right">7fa</td>
<td style="text-align:center">[11]</td>
</tr>
<tr>
<td style="text-align:right">&apos;(&apos; ( 40)</td>
<td style="text-align:left">|11111110|10</td>
<td style="text-align:right">3fa</td>
<td style="text-align:center">[10]</td>
</tr>
<tr>
<td style="text-align:right">&apos;)&apos; ( 41)</td>
<td style="text-align:left">|11111110|11</td>
<td style="text-align:right">3fb</td>
<td style="text-align:center">[10]</td>
</tr>
<tr>
<td style="text-align:right">&apos;*&apos; ( 42)</td>
<td style="text-align:left">|11111001</td>
<td style="text-align:right">f9</td>
<td style="text-align:center">[ 8]</td>
</tr>
<tr>
<td style="text-align:right">&apos;+&apos; ( 43)</td>
<td style="text-align:left">|11111111|011</td>
<td style="text-align:right">7fb</td>
<td style="text-align:center">[11]</td>
</tr>
<tr>
<td style="text-align:right">&apos;,&apos; ( 44)</td>
<td style="text-align:left">|11111010</td>
<td style="text-align:right">fa</td>
<td style="text-align:center">[ 8]</td>
</tr>
<tr>
<td style="text-align:right">&apos;-&apos; ( 45)</td>
<td style="text-align:left">|010110</td>
<td style="text-align:right">16</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;.&apos; ( 46)</td>
<td style="text-align:left">|010111</td>
<td style="text-align:right">17</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;/&apos; ( 47)</td>
<td style="text-align:left">|011000</td>
<td style="text-align:right">18</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;0&apos; ( 48)</td>
<td style="text-align:left">|00000</td>
<td style="text-align:right">0</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;1&apos; ( 49)</td>
<td style="text-align:left">|00001</td>
<td style="text-align:right">1</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;2&apos; ( 50)</td>
<td style="text-align:left">|00010</td>
<td style="text-align:right">2</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;3&apos; ( 51)</td>
<td style="text-align:left">|011001</td>
<td style="text-align:right">19</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;4&apos; ( 52)</td>
<td style="text-align:left">|011010</td>
<td style="text-align:right">1a</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;5&apos; ( 53)</td>
<td style="text-align:left">|011011</td>
<td style="text-align:right">1b</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;6&apos; ( 54)</td>
<td style="text-align:left">|011100</td>
<td style="text-align:right">1c</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;7&apos; ( 55)</td>
<td style="text-align:left">|011101</td>
<td style="text-align:right">1d</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;8&apos; ( 56)</td>
<td style="text-align:left">|011110</td>
<td style="text-align:right">1e</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;9&apos; ( 57)</td>
<td style="text-align:left">|011111</td>
<td style="text-align:right">1f</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;:&apos; ( 58)</td>
<td style="text-align:left">|1011100</td>
<td style="text-align:right">5c</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;;&apos; ( 59)</td>
<td style="text-align:left">|11111011</td>
<td style="text-align:right">fb</td>
<td style="text-align:center">[ 8]</td>
</tr>
<tr>
<td style="text-align:right">&apos;&lt;&apos; ( 60)</td>
<td style="text-align:left">|11111111|1111100</td>
<td style="text-align:right">7ffc</td>
<td style="text-align:center">[15]</td>
</tr>
<tr>
<td style="text-align:right">&apos;=&apos; ( 61)</td>
<td style="text-align:left">|100000</td>
<td style="text-align:right">20</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;&gt;&apos; ( 62)</td>
<td style="text-align:left">|11111111|1011</td>
<td style="text-align:right">ffb</td>
<td style="text-align:center">[12]</td>
</tr>
<tr>
<td style="text-align:right">&apos;?&apos; ( 63)</td>
<td style="text-align:left">|11111111|00</td>
<td style="text-align:right">3fc</td>
<td style="text-align:center">[10]</td>
</tr>
<tr>
<td style="text-align:right">&apos;@&apos; ( 64)</td>
<td style="text-align:left">|11111111|11010</td>
<td style="text-align:right">1ffa</td>
<td style="text-align:center">[13]</td>
</tr>
<tr>
<td style="text-align:right">&apos;A&apos; ( 65)</td>
<td style="text-align:left">|100001</td>
<td style="text-align:right">21</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;B&apos; ( 66)</td>
<td style="text-align:left">|1011101</td>
<td style="text-align:right">5d</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;C&apos; ( 67)</td>
<td style="text-align:left">|1011110</td>
<td style="text-align:right">5e</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;D&apos; ( 68)</td>
<td style="text-align:left">|1011111</td>
<td style="text-align:right">5f</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;E&apos; ( 69)</td>
<td style="text-align:left">|1100000</td>
<td style="text-align:right">60</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;F&apos; ( 70)</td>
<td style="text-align:left">|1100001</td>
<td style="text-align:right">61</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;G&apos; ( 71)</td>
<td style="text-align:left">|1100010</td>
<td style="text-align:right">62</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;H&apos; ( 72)</td>
<td style="text-align:left">|1100011</td>
<td style="text-align:right">63</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;I&apos; ( 73)</td>
<td style="text-align:left">|1100100</td>
<td style="text-align:right">64</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;J&apos; ( 74)</td>
<td style="text-align:left">|1100101</td>
<td style="text-align:right">65</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;K&apos; ( 75)</td>
<td style="text-align:left">|1100110</td>
<td style="text-align:right">66</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;L&apos; ( 76)</td>
<td style="text-align:left">|1100111</td>
<td style="text-align:right">67</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;M&apos; ( 77)</td>
<td style="text-align:left">|1101000</td>
<td style="text-align:right">68</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;N&apos; ( 78)</td>
<td style="text-align:left">|1101001</td>
<td style="text-align:right">69</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;O&apos; ( 79)</td>
<td style="text-align:left">|1101010</td>
<td style="text-align:right">6a</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;P&apos; ( 80)</td>
<td style="text-align:left">|1101011</td>
<td style="text-align:right">6b</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;Q&apos; ( 81)</td>
<td style="text-align:left">|1101100</td>
<td style="text-align:right">6c</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;R&apos; ( 82)</td>
<td style="text-align:left">|1101101</td>
<td style="text-align:right">6d</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;S&apos; ( 83)</td>
<td style="text-align:left">|1101110</td>
<td style="text-align:right">6e</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;T&apos; ( 84)</td>
<td style="text-align:left">|1101111</td>
<td style="text-align:right">6f</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;U&apos; ( 85)</td>
<td style="text-align:left">|1110000</td>
<td style="text-align:right">70</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;V&apos; ( 86)</td>
<td style="text-align:left">|1110001</td>
<td style="text-align:right">71</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;W&apos; ( 87)</td>
<td style="text-align:left">|1110010</td>
<td style="text-align:right">72</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;X&apos; ( 88)</td>
<td style="text-align:left">|11111100</td>
<td style="text-align:right">fc</td>
<td style="text-align:center">[ 8]</td>
</tr>
<tr>
<td style="text-align:right">&apos;Y&apos; ( 89)</td>
<td style="text-align:left">|1110011</td>
<td style="text-align:right">73</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;Z&apos; ( 90)</td>
<td style="text-align:left">|11111101</td>
<td style="text-align:right">fd</td>
<td style="text-align:center">[ 8]</td>
</tr>
<tr>
<td style="text-align:right">&apos;[&apos; ( 91)</td>
<td style="text-align:left">|11111111|11011</td>
<td style="text-align:right">1ffb</td>
<td style="text-align:center">[13]</td>
</tr>
<tr>
<td style="text-align:right">&apos;&apos; ( 92)</td>
<td style="text-align:left">|11111111|11111110|000</td>
<td style="text-align:right">7fff0</td>
<td style="text-align:center">[19]</td>
</tr>
<tr>
<td style="text-align:right">&apos;]&apos; ( 93)</td>
<td style="text-align:left">|11111111|11100</td>
<td style="text-align:right">1ffc</td>
<td style="text-align:center">[13]</td>
</tr>
<tr>
<td style="text-align:right">&apos;^&apos; ( 94)</td>
<td style="text-align:left">|11111111|111100</td>
<td style="text-align:right">3ffc</td>
<td style="text-align:center">[14]</td>
</tr>
<tr>
<td style="text-align:right">&apos;_&apos; ( 95)</td>
<td style="text-align:left">|100010</td>
<td style="text-align:right">22</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;`&apos; ( 96)</td>
<td style="text-align:left">|11111111|1111101</td>
<td style="text-align:right">7ffd</td>
<td style="text-align:center">[15]</td>
</tr>
<tr>
<td style="text-align:right">&apos;a&apos; ( 97)</td>
<td style="text-align:left">|00011</td>
<td style="text-align:right">3</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;b&apos; ( 98)</td>
<td style="text-align:left">|100011</td>
<td style="text-align:right">23</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;c&apos; ( 99)</td>
<td style="text-align:left">|00100</td>
<td style="text-align:right">4</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;d&apos; (100)</td>
<td style="text-align:left">|100100</td>
<td style="text-align:right">24</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;e&apos; (101)</td>
<td style="text-align:left">|00101</td>
<td style="text-align:right">5</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;f&apos; (102)</td>
<td style="text-align:left">|100101</td>
<td style="text-align:right">25</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;g&apos; (103)</td>
<td style="text-align:left">|100110</td>
<td style="text-align:right">26</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;h&apos; (104)</td>
<td style="text-align:left">|100111</td>
<td style="text-align:right">27</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;i&apos; (105)</td>
<td style="text-align:left">|00110</td>
<td style="text-align:right">6</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;j&apos; (106)</td>
<td style="text-align:left">|1110100</td>
<td style="text-align:right">74</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;k&apos; (107)</td>
<td style="text-align:left">|1110101</td>
<td style="text-align:right">75</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;l&apos; (108)</td>
<td style="text-align:left">|101000</td>
<td style="text-align:right">28</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;m&apos; (109)</td>
<td style="text-align:left">|101001</td>
<td style="text-align:right">29</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;n&apos; (110)</td>
<td style="text-align:left">|101010</td>
<td style="text-align:right">2a</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;o&apos; (111)</td>
<td style="text-align:left">|00111</td>
<td style="text-align:right">7</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;p&apos; (112)</td>
<td style="text-align:left">|101011</td>
<td style="text-align:right">2b</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;q&apos; (113)</td>
<td style="text-align:left">|1110110</td>
<td style="text-align:right">76</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;r&apos; (114)</td>
<td style="text-align:left">|101100</td>
<td style="text-align:right">2c</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;s&apos; (115)</td>
<td style="text-align:left">|01000</td>
<td style="text-align:right">8</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;t&apos; (116)</td>
<td style="text-align:left">|01001</td>
<td style="text-align:right">9</td>
<td style="text-align:center">[ 5]</td>
</tr>
<tr>
<td style="text-align:right">&apos;u&apos; (117)</td>
<td style="text-align:left">|101101</td>
<td style="text-align:right">2d</td>
<td style="text-align:center">[ 6]</td>
</tr>
<tr>
<td style="text-align:right">&apos;v&apos; (118)</td>
<td style="text-align:left">|1110111</td>
<td style="text-align:right">77</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;w&apos; (119)</td>
<td style="text-align:left">|1111000</td>
<td style="text-align:right">78</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;x&apos; (120)</td>
<td style="text-align:left">|1111001</td>
<td style="text-align:right">79</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;y&apos; (121)</td>
<td style="text-align:left">|1111010</td>
<td style="text-align:right">7a</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;z&apos; (122)</td>
<td style="text-align:left">|1111011</td>
<td style="text-align:right">7b</td>
<td style="text-align:center">[ 7]</td>
</tr>
<tr>
<td style="text-align:right">&apos;{&apos; (123)</td>
<td style="text-align:left">|11111111|1111110</td>
<td style="text-align:right">7ffe</td>
<td style="text-align:center">[15]</td>
</tr>
<tr>
<td style="text-align:right">&apos;</td>
<td style="text-align:left">&apos; (124)</td>
<td style="text-align:right">|11111111|100</td>
<td style="text-align:center">7fc</td>
</tr>
<tr>
<td style="text-align:right">&apos;}&apos; (125)</td>
<td style="text-align:left">|11111111|111101</td>
<td style="text-align:right">3ffd</td>
<td style="text-align:center">[14]</td>
</tr>
<tr>
<td style="text-align:right">&apos;~&apos; (126)</td>
<td style="text-align:left">|11111111|11101</td>
<td style="text-align:right">1ffd</td>
<td style="text-align:center">[13]</td>
</tr>
<tr>
<td style="text-align:right">(127)</td>
<td style="text-align:left">|11111111|11111111|11111111|1100</td>
<td style="text-align:right">ffffffc</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(128)</td>
<td style="text-align:left">|11111111|11111110|0110</td>
<td style="text-align:right">fffe6</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(129)</td>
<td style="text-align:left">|11111111|11111111|010010</td>
<td style="text-align:right">3fffd2</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(130)</td>
<td style="text-align:left">|11111111|11111110|0111</td>
<td style="text-align:right">fffe7</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(131)</td>
<td style="text-align:left">|11111111|11111110|1000</td>
<td style="text-align:right">fffe8</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(132)</td>
<td style="text-align:left">|11111111|11111111|010011</td>
<td style="text-align:right">3fffd3</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(133)</td>
<td style="text-align:left">|11111111|11111111|010100</td>
<td style="text-align:right">3fffd4</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(134)</td>
<td style="text-align:left">|11111111|11111111|010101</td>
<td style="text-align:right">3fffd5</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(135)</td>
<td style="text-align:left">|11111111|11111111|1011001</td>
<td style="text-align:right">7fffd9</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(136)</td>
<td style="text-align:left">|11111111|11111111|010110</td>
<td style="text-align:right">3fffd6</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(137)</td>
<td style="text-align:left">|11111111|11111111|1011010</td>
<td style="text-align:right">7fffda</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(138)</td>
<td style="text-align:left">|11111111|11111111|1011011</td>
<td style="text-align:right">7fffdb</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(139)</td>
<td style="text-align:left">|11111111|11111111|1011100</td>
<td style="text-align:right">7fffdc</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(140)</td>
<td style="text-align:left">|11111111|11111111|1011101</td>
<td style="text-align:right">7fffdd</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(141)</td>
<td style="text-align:left">|11111111|11111111|1011110</td>
<td style="text-align:right">7fffde</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(142)</td>
<td style="text-align:left">|11111111|11111111|11101011</td>
<td style="text-align:right">ffffeb</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(143)</td>
<td style="text-align:left">|11111111|11111111|1011111</td>
<td style="text-align:right">7fffdf</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(144)</td>
<td style="text-align:left">|11111111|11111111|11101100</td>
<td style="text-align:right">ffffec</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(145)</td>
<td style="text-align:left">|11111111|11111111|11101101</td>
<td style="text-align:right">ffffed</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(146)</td>
<td style="text-align:left">|11111111|11111111|010111</td>
<td style="text-align:right">3fffd7</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(147)</td>
<td style="text-align:left">|11111111|11111111|1100000</td>
<td style="text-align:right">7fffe0</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(148)</td>
<td style="text-align:left">|11111111|11111111|11101110</td>
<td style="text-align:right">ffffee</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(149)</td>
<td style="text-align:left">|11111111|11111111|1100001</td>
<td style="text-align:right">7fffe1</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(150)</td>
<td style="text-align:left">|11111111|11111111|1100010</td>
<td style="text-align:right">7fffe2</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(151)</td>
<td style="text-align:left">|11111111|11111111|1100011</td>
<td style="text-align:right">7fffe3</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(152)</td>
<td style="text-align:left">|11111111|11111111|1100100</td>
<td style="text-align:right">7fffe4</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(153)</td>
<td style="text-align:left">|11111111|11111110|11100</td>
<td style="text-align:right">1fffdc</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(154)</td>
<td style="text-align:left">|11111111|11111111|011000</td>
<td style="text-align:right">3fffd8</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(155)</td>
<td style="text-align:left">|11111111|11111111|1100101</td>
<td style="text-align:right">7fffe5</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(156)</td>
<td style="text-align:left">|11111111|11111111|011001</td>
<td style="text-align:right">3fffd9</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(157)</td>
<td style="text-align:left">|11111111|11111111|1100110</td>
<td style="text-align:right">7fffe6</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(158)</td>
<td style="text-align:left">|11111111|11111111|1100111</td>
<td style="text-align:right">7fffe7</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(159)</td>
<td style="text-align:left">|11111111|11111111|11101111</td>
<td style="text-align:right">ffffef</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(160)</td>
<td style="text-align:left">|11111111|11111111|011010</td>
<td style="text-align:right">3fffda</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(161)</td>
<td style="text-align:left">|11111111|11111110|11101</td>
<td style="text-align:right">1fffdd</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(162)</td>
<td style="text-align:left">|11111111|11111110|1001</td>
<td style="text-align:right">fffe9</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(163)</td>
<td style="text-align:left">|11111111|11111111|011011</td>
<td style="text-align:right">3fffdb</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(164)</td>
<td style="text-align:left">|11111111|11111111|011100</td>
<td style="text-align:right">3fffdc</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(165)</td>
<td style="text-align:left">|11111111|11111111|1101000</td>
<td style="text-align:right">7fffe8</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(166)</td>
<td style="text-align:left">|11111111|11111111|1101001</td>
<td style="text-align:right">7fffe9</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(167)</td>
<td style="text-align:left">|11111111|11111110|11110</td>
<td style="text-align:right">1fffde</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(168)</td>
<td style="text-align:left">|11111111|11111111|1101010</td>
<td style="text-align:right">7fffea</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(169)</td>
<td style="text-align:left">|11111111|11111111|011101</td>
<td style="text-align:right">3fffdd</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(170)</td>
<td style="text-align:left">|11111111|11111111|011110</td>
<td style="text-align:right">3fffde</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(171)</td>
<td style="text-align:left">|11111111|11111111|11110000</td>
<td style="text-align:right">fffff0</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(172)</td>
<td style="text-align:left">|11111111|11111110|11111</td>
<td style="text-align:right">1fffdf</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(173)</td>
<td style="text-align:left">|11111111|11111111|011111</td>
<td style="text-align:right">3fffdf</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(174)</td>
<td style="text-align:left">|11111111|11111111|1101011</td>
<td style="text-align:right">7fffeb</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(175)</td>
<td style="text-align:left">|11111111|11111111|1101100</td>
<td style="text-align:right">7fffec</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(176)</td>
<td style="text-align:left">|11111111|11111111|00000</td>
<td style="text-align:right">1fffe0</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(177)</td>
<td style="text-align:left">|11111111|11111111|00001</td>
<td style="text-align:right">1fffe1</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(178)</td>
<td style="text-align:left">|11111111|11111111|100000</td>
<td style="text-align:right">3fffe0</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(179)</td>
<td style="text-align:left">|11111111|11111111|00010</td>
<td style="text-align:right">1fffe2</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(180)</td>
<td style="text-align:left">|11111111|11111111|1101101</td>
<td style="text-align:right">7fffed</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(181)</td>
<td style="text-align:left">|11111111|11111111|100001</td>
<td style="text-align:right">3fffe1</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(182)</td>
<td style="text-align:left">|11111111|11111111|1101110</td>
<td style="text-align:right">7fffee</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(183)</td>
<td style="text-align:left">|11111111|11111111|1101111</td>
<td style="text-align:right">7fffef</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(184)</td>
<td style="text-align:left">|11111111|11111110|1010</td>
<td style="text-align:right">fffea</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(185)</td>
<td style="text-align:left">|11111111|11111111|100010</td>
<td style="text-align:right">3fffe2</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(186)</td>
<td style="text-align:left">|11111111|11111111|100011</td>
<td style="text-align:right">3fffe3</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(187)</td>
<td style="text-align:left">|11111111|11111111|100100</td>
<td style="text-align:right">3fffe4</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(188)</td>
<td style="text-align:left">|11111111|11111111|1110000</td>
<td style="text-align:right">7ffff0</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(189)</td>
<td style="text-align:left">|11111111|11111111|100101</td>
<td style="text-align:right">3fffe5</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(190)</td>
<td style="text-align:left">|11111111|11111111|100110</td>
<td style="text-align:right">3fffe6</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(191)</td>
<td style="text-align:left">|11111111|11111111|1110001</td>
<td style="text-align:right">7ffff1</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(192)</td>
<td style="text-align:left">|11111111|11111111|11111000|00</td>
<td style="text-align:right">3ffffe0</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(193)</td>
<td style="text-align:left">|11111111|11111111|11111000|01</td>
<td style="text-align:right">3ffffe1</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(194)</td>
<td style="text-align:left">|11111111|11111110|1011</td>
<td style="text-align:right">fffeb</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(195)</td>
<td style="text-align:left">|11111111|11111110|001</td>
<td style="text-align:right">7fff1</td>
<td style="text-align:center">[19]</td>
</tr>
<tr>
<td style="text-align:right">(196)</td>
<td style="text-align:left">|11111111|11111111|100111</td>
<td style="text-align:right">3fffe7</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(197)</td>
<td style="text-align:left">|11111111|11111111|1110010</td>
<td style="text-align:right">7ffff2</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(198)</td>
<td style="text-align:left">|11111111|11111111|101000</td>
<td style="text-align:right">3fffe8</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(199)</td>
<td style="text-align:left">|11111111|11111111|11110110|0</td>
<td style="text-align:right">1ffffec</td>
<td style="text-align:center">[25]</td>
</tr>
<tr>
<td style="text-align:right">(200)</td>
<td style="text-align:left">|11111111|11111111|11111000|10</td>
<td style="text-align:right">3ffffe2</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(201)</td>
<td style="text-align:left">|11111111|11111111|11111000|11</td>
<td style="text-align:right">3ffffe3</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(202)</td>
<td style="text-align:left">|11111111|11111111|11111001|00</td>
<td style="text-align:right">3ffffe4</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(203)</td>
<td style="text-align:left">|11111111|11111111|11111011|110</td>
<td style="text-align:right">7ffffde</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(204)</td>
<td style="text-align:left">|11111111|11111111|11111011|111</td>
<td style="text-align:right">7ffffdf</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(205)</td>
<td style="text-align:left">|11111111|11111111|11111001|01</td>
<td style="text-align:right">3ffffe5</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(206)</td>
<td style="text-align:left">|11111111|11111111|11110001</td>
<td style="text-align:right">fffff1</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(207)</td>
<td style="text-align:left">|11111111|11111111|11110110|1</td>
<td style="text-align:right">1ffffed</td>
<td style="text-align:center">[25]</td>
</tr>
<tr>
<td style="text-align:right">(208)</td>
<td style="text-align:left">|11111111|11111110|010</td>
<td style="text-align:right">7fff2</td>
<td style="text-align:center">[19]</td>
</tr>
<tr>
<td style="text-align:right">(209)</td>
<td style="text-align:left">|11111111|11111111|00011</td>
<td style="text-align:right">1fffe3</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(210)</td>
<td style="text-align:left">|11111111|11111111|11111001|10</td>
<td style="text-align:right">3ffffe6</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(211)</td>
<td style="text-align:left">|11111111|11111111|11111100|000</td>
<td style="text-align:right">7ffffe0</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(212)</td>
<td style="text-align:left">|11111111|11111111|11111100|001</td>
<td style="text-align:right">7ffffe1</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(213)</td>
<td style="text-align:left">|11111111|11111111|11111001|11</td>
<td style="text-align:right">3ffffe7</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(214)</td>
<td style="text-align:left">|11111111|11111111|11111100|010</td>
<td style="text-align:right">7ffffe2</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(215)</td>
<td style="text-align:left">|11111111|11111111|11110010</td>
<td style="text-align:right">fffff2</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(216)</td>
<td style="text-align:left">|11111111|11111111|00100</td>
<td style="text-align:right">1fffe4</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(217)</td>
<td style="text-align:left">|11111111|11111111|00101</td>
<td style="text-align:right">1fffe5</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(218)</td>
<td style="text-align:left">|11111111|11111111|11111010|00</td>
<td style="text-align:right">3ffffe8</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(219)</td>
<td style="text-align:left">|11111111|11111111|11111010|01</td>
<td style="text-align:right">3ffffe9</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(220)</td>
<td style="text-align:left">|11111111|11111111|11111111|1101</td>
<td style="text-align:right">ffffffd</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(221)</td>
<td style="text-align:left">|11111111|11111111|11111100|011</td>
<td style="text-align:right">7ffffe3</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(222)</td>
<td style="text-align:left">|11111111|11111111|11111100|100</td>
<td style="text-align:right">7ffffe4</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(223)</td>
<td style="text-align:left">|11111111|11111111|11111100|101</td>
<td style="text-align:right">7ffffe5</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(224)</td>
<td style="text-align:left">|11111111|11111110|1100</td>
<td style="text-align:right">fffec</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(225)</td>
<td style="text-align:left">|11111111|11111111|11110011</td>
<td style="text-align:right">fffff3</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(226)</td>
<td style="text-align:left">|11111111|11111110|1101</td>
<td style="text-align:right">fffed</td>
<td style="text-align:center">[20]</td>
</tr>
<tr>
<td style="text-align:right">(227)</td>
<td style="text-align:left">|11111111|11111111|00110</td>
<td style="text-align:right">1fffe6</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(228)</td>
<td style="text-align:left">|11111111|11111111|101001</td>
<td style="text-align:right">3fffe9</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(229)</td>
<td style="text-align:left">|11111111|11111111|00111</td>
<td style="text-align:right">1fffe7</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(230)</td>
<td style="text-align:left">|11111111|11111111|01000</td>
<td style="text-align:right">1fffe8</td>
<td style="text-align:center">[21]</td>
</tr>
<tr>
<td style="text-align:right">(231)</td>
<td style="text-align:left">|11111111|11111111|1110011</td>
<td style="text-align:right">7ffff3</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(232)</td>
<td style="text-align:left">|11111111|11111111|101010</td>
<td style="text-align:right">3fffea</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(233)</td>
<td style="text-align:left">|11111111|11111111|101011</td>
<td style="text-align:right">3fffeb</td>
<td style="text-align:center">[22]</td>
</tr>
<tr>
<td style="text-align:right">(234)</td>
<td style="text-align:left">|11111111|11111111|11110111|0</td>
<td style="text-align:right">1ffffee</td>
<td style="text-align:center">[25]</td>
</tr>
<tr>
<td style="text-align:right">(235)</td>
<td style="text-align:left">|11111111|11111111|11110111|1</td>
<td style="text-align:right">1ffffef</td>
<td style="text-align:center">[25]</td>
</tr>
<tr>
<td style="text-align:right">(236)</td>
<td style="text-align:left">|11111111|11111111|11110100\</td>
<td style="text-align:right">fffff4</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(237)</td>
<td style="text-align:left">|11111111|11111111|11110101\</td>
<td style="text-align:right">fffff5</td>
<td style="text-align:center">[24]</td>
</tr>
<tr>
<td style="text-align:right">(238)</td>
<td style="text-align:left">|11111111|11111111|11111010|10</td>
<td style="text-align:right">3ffffea</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(239)</td>
<td style="text-align:left">|11111111|11111111|1110100 \</td>
<td style="text-align:right">7ffff4</td>
<td style="text-align:center">[23]</td>
</tr>
<tr>
<td style="text-align:right">(240)</td>
<td style="text-align:left">|11111111|11111111|11111010|11</td>
<td style="text-align:right">3ffffeb</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(241)</td>
<td style="text-align:left">|11111111|11111111|11111100|110</td>
<td style="text-align:right">7ffffe6</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(242)</td>
<td style="text-align:left">|11111111|11111111|11111011|00</td>
<td style="text-align:right">3ffffec</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(243)</td>
<td style="text-align:left">|11111111|11111111|11111011|01</td>
<td style="text-align:right">3ffffed</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">(244)</td>
<td style="text-align:left">|11111111|11111111|11111100|111</td>
<td style="text-align:right">7ffffe7</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(245)</td>
<td style="text-align:left">|11111111|11111111|11111101|000</td>
<td style="text-align:right">7ffffe8</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(246)</td>
<td style="text-align:left">|11111111|11111111|11111101|001</td>
<td style="text-align:right">7ffffe9</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(247)</td>
<td style="text-align:left">|11111111|11111111|11111101|010</td>
<td style="text-align:right">7ffffea</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(248)</td>
<td style="text-align:left">|11111111|11111111|11111101|011</td>
<td style="text-align:right">7ffffeb</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(249)</td>
<td style="text-align:left">|11111111|11111111|11111111|1110</td>
<td style="text-align:right">ffffffe</td>
<td style="text-align:center">[28]</td>
</tr>
<tr>
<td style="text-align:right">(250)</td>
<td style="text-align:left">|11111111|11111111|11111101|100</td>
<td style="text-align:right">7ffffec</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(251)</td>
<td style="text-align:left">|11111111|11111111|11111101|101</td>
<td style="text-align:right">7ffffed</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(252)</td>
<td style="text-align:left">|11111111|11111111|11111101|110</td>
<td style="text-align:right">7ffffee</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(253)</td>
<td style="text-align:left">|11111111|11111111|11111101|111</td>
<td style="text-align:right">7ffffef</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(254)</td>
<td style="text-align:left">|11111111|11111111|11111110|000</td>
<td style="text-align:right">7fffff0</td>
<td style="text-align:center">[27]</td>
</tr>
<tr>
<td style="text-align:right">(255)</td>
<td style="text-align:left">|11111111|11111111|11111011|10</td>
<td style="text-align:right">3ffffee</td>
<td style="text-align:center">[26]</td>
</tr>
<tr>
<td style="text-align:right">EOS (256)</td>
<td style="text-align:left">|11111111|11111111|11111111|111111</td>
<td style="text-align:right">3fffffff</td>
<td style="text-align:center">[30]</td>
</tr>
</tbody>
</table>
<h2 id>&#x4E09;. &#x4F8B;&#x5B50;</h2>
<p>&#x672C;&#x7AE0;&#x8282;&#x5305;&#x542B;&#x4E00;&#x4E9B;&#x793A;&#x4F8B;&#xFF0C;&#x8FD9;&#x4E9B;&#x793A;&#x4F8B;&#x6DB5;&#x76D6;&#x6574;&#x6570;&#x7F16;&#x7801;&#xFF0C;header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4EE5;&#x53CA;&#x4F7F;&#x7528;&#x548C;&#x4E0D;&#x4F7F;&#x7528;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x8BF7;&#x6C42;&#x548C;&#x54CD;&#x5E94;&#x7684; header &#x5B57;&#x6BB5;&#x7684;&#x6574;&#x4E2A;&#x5217;&#x8868;&#x7684;&#x7F16;&#x7801;&#x3002;</p>
<h3 id="1">1. &#x6574;&#x6570;&#x8868;&#x793A;&#x7684;&#x793A;&#x4F8B;</h3>
<p>&#x672C;&#x8282;&#x8BE6;&#x7EC6;&#x663E;&#x793A;&#x4E86;&#x6574;&#x6570;&#x503C;&#x7684;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;</p>
<h3 id="1510">(1). &#x4F7F;&#x7528; 5 &#x4F4D;&#x524D;&#x7F00;&#x5BF9; 10 &#x8FDB;&#x884C;&#x7F16;&#x7801;</h3>
<p>10 &#x5C0F;&#x4E8E; 31&#xFF08;2^5-1&#xFF09;&#xFF0C;&#x5E76;&#x4F7F;&#x7528; 5 &#x4F4D;&#x524D;&#x7F00;&#x8868;&#x793A;&#x3002;</p>
<pre><code class="language-c">     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | X | X | X | 0 | 1 | 0 | 1 | 0 |   10 stored on 5 bits
   +---+---+---+---+---+---+---+---+
</code></pre>
<h3 id="251337">(2). &#x4F7F;&#x7528; 5 &#x4F4D;&#x524D;&#x7F00;&#x5BF9; 1337 &#x8FDB;&#x884C;&#x7F16;&#x7801;</h3>
<p>1337 &#x5927;&#x4E8E; 31&#xFF08;2^5-1&#xFF09;&#xFF0C;&#x5E76;&#x4F7F;&#x7528; 5 &#x4F4D;&#x524D;&#x7F00;&#x8868;&#x793A;&#x3002;5 &#x4F4D;&#x524D;&#x7F00;&#x4F7F;&#x7528;&#x5176;&#x6700;&#x5927;&#x503C;&#xFF08;31&#xFF09;&#x586B;&#x5145;&#x3002;</p>
<p>I = 1337 - (2^5 - 1) = 1306&#x3002;I (1306) &#x5927;&#x4E8E;&#x7B49;&#x4E8E; 128&#x3002;I % 128 == 26&#xFF0C;26 + 128 == 154&#xFF0C;154 &#x7528; 8 &#x4F4D;&#x8868;&#x793A;&#x4E3A;: 10011010&#x3002;I &#x73B0;&#x5728;&#x662F; 10&#xFF0C;(1306 / 128 == 10)&#xFF0C;&#x7528; 8 &#x4F4D;&#x8868;&#x793A;&#x4E3A;: 00001010&#x3002;</p>
<pre><code class="language-c">     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | X | X | X | 1 | 1 | 1 | 1 | 1 |  Prefix = 31, I = 1306
   | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 |  1306&gt;=128, encode(154), I=1306/128
   | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |  10&lt;128, encode(10), done
   +---+---+---+---+---+---+---+---+
</code></pre>
<h3 id="342">(3). &#x4ECE;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x8FB9;&#x754C;&#x5F00;&#x59CB;&#x5BF9; 42 &#x8FDB;&#x884C;&#x7F16;&#x7801;</h3>
<p>42 &#x5C0F;&#x4E8E; 255 (2^8 - 1) &#x7528; 8 &#x4F4D;&#x524D;&#x7F00;&#x8868;&#x793A;&#x3002;</p>
<pre><code class="language-c">     0   1   2   3   4   5   6   7
   +---+---+---+---+---+---+---+---+
   | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |   42 stored on 8 bits
   +---+---+---+---+---+---+---+---+
</code></pre>
<h3 id="2header">2. header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x7684;&#x793A;&#x4F8B;</h3>
<p>&#x672C;&#x8282;&#x663E;&#x793A;&#x4E86;&#x51E0;&#x4E2A;&#x72EC;&#x7ACB;&#x7684;&#x8868;&#x793A;&#x793A;&#x4F8B;&#x3002;</p>
<h3 id="1header">(1). &#x5E26;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;</h3>
<p>header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4F7F;&#x7528;&#x5B57;&#x9762;&#x540D;&#x79F0; name &#x548C;&#x5B57;&#x9762;&#x503C; value&#x3002;header &#x5B57;&#x6BB5;&#x5C06;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">custom-key: custom-header
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   400a 6375 7374 6f6d 2d6b 6579 0d63 7573 | @.custom-key.cus
   746f 6d2d 6865 6164 6572                | tom-header
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   40                                      | == Literal indexed ==
   0a                                      |   Literal name (len = 10)
   6375 7374 6f6d 2d6b 6579                | custom-key
   0d                                      |   Literal value (len = 13)
   6375 7374 6f6d 2d68 6561 6465 72        | custom-header
                                           | -&gt; custom-key:
                                           |   custom-header
</code></pre>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_4.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x7531;&#x4E8E; H &#x4F4D;&#x4F20;&#x4E86; 0&#xFF0C;&#x6240;&#x4EE5;&#x540E;&#x9762;&#x5B57;&#x7B26;&#x4E32;&#x7528;&#x7684;&#x5B57;&#x9762;&#x5F62;&#x5F0F;&#x8868;&#x793A;&#xFF0C;&#x5373; ASCII &#x7801;&#x8868;&#x793A;&#xFF0C;&#x901A;&#x8FC7;&#x67E5;&#x8868;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#xFF0C;6375 7374 6f6d 2d6b 6579 &#x8868;&#x793A;&#x7684;&#x503C;&#x662F; custom-key&#xFF0C;6375 7374 6f6d 2d68 6561 6465 72 &#x8868;&#x793A;&#x7684;&#x503C;&#x662F; custom-header&#x3002;</p>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  55) custom-key: custom-header
         Table size:  55
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">custom-key: custom-header
</code></pre>
<h3 id="2header">(2). &#x6CA1;&#x6709;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;</h3>
<p>header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#x540D;&#x79F0; name &#x548C;&#x5B57;&#x9762;&#x503C; value&#x3002;header &#x5B57;&#x6BB5;&#x672A;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :path: /sample/path
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   040c 2f73 616d 706c 652f 7061 7468      | ../sample/path
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   04                                      | == Literal not indexed ==
                                           |   Indexed name (idx = 4)
                                           |     :path
   0c                                      |   Literal value (len = 12)
   2f73 616d 706c 652f 7061 7468           | /sample/path
                                           | -&gt; :path: /sample/path
</code></pre>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_5_.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x7531;&#x4E8E; H &#x4F4D;&#x4F20;&#x4E86; 0&#xFF0C;&#x6240;&#x4EE5;&#x540E;&#x9762;&#x5B57;&#x7B26;&#x4E32;&#x7528;&#x7684;&#x5B57;&#x9762;&#x5F62;&#x5F0F;&#x8868;&#x793A;&#xFF0C;&#x5373; ASCII &#x7801;&#x8868;&#x793A;&#xFF0C;&#x901A;&#x8FC7;&#x67E5;&#x8868;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#xFF0C;2f73 616d 706c 652f 7061 7468 &#x8868;&#x793A;&#x7684;&#x503C;&#x662F; /sample/path&#x3002;&#x7531;&#x4E8E; :path &#x5B58;&#x5728;&#x4E8E;&#x9759;&#x6001;&#x8868;&#x4E2D;&#xFF0C;&#x6240;&#x4EE5;&#x53EA;&#x9700;&#x8981;&#x4F20; index = 4 &#x5373;&#x53EF;&#x3002;</p>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">&#x7A7A;
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :path: /sample/path
</code></pre>
<h3 id="3header">(3). &#x4ECE;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;</h3>
<p>header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4F7F;&#x7528;&#x5B57;&#x9762;&#x540D;&#x79F0; name &#x548C;&#x5B57;&#x9762;&#x503C; value&#x3002;header &#x5B57;&#x6BB5;&#x4E0D;&#x4F1A;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#xFF0C;&#x5E76;&#x4E14;&#x5982;&#x679C;&#x7531;&#x4E2D;&#x95F4;&#x4EF6;&#x91CD;&#x65B0;&#x7F16;&#x7801;&#xFF0C;&#x5219;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x76F8;&#x540C;&#x7684;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   password: secret
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   1008 7061 7373 776f 7264 0673 6563 7265 | ..password.secre
   74                                      | t
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   10                                      | == Literal never indexed ==
   08                                      |   Literal name (len = 8)
   7061 7373 776f 7264                     | password
   06                                      |   Literal value (len = 6)
   7365 6372 6574                          | secret
                                           | -&gt; password: secret
</code></pre>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_6.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x7531;&#x4E8E; H &#x4F4D;&#x4F20;&#x4E86; 0&#xFF0C;&#x6240;&#x4EE5;&#x540E;&#x9762;&#x5B57;&#x7B26;&#x4E32;&#x7528;&#x7684;&#x5B57;&#x9762;&#x5F62;&#x5F0F;&#x8868;&#x793A;&#xFF0C;&#x5373; ASCII &#x7801;&#x8868;&#x793A;&#xFF0C;&#x901A;&#x8FC7;&#x67E5;&#x8868;&#x53EF;&#x4EE5;&#x77E5;&#x9053;&#xFF0C;7061 7373 776f 7264  &#x8868;&#x793A;&#x7684;&#x503C;&#x662F; password&#x3002;7365 6372 6574 &#x8868;&#x793A;&#x7684;&#x503C;&#x662F; secret&#x3002;</p>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">&#x7A7A;
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   password: secret
</code></pre>
<h3 id="4header">(4). &#x7D22;&#x5F15;&#x7684; header &#x5B57;&#x6BB5;</h3>
<p>header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4F7F;&#x7528;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x7D22;&#x5F15; header &#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | .
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
</code></pre>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_7.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x7531;&#x4E8E; :method &#x548C; GET &#x90FD;&#x5728;&#x9759;&#x6001;&#x8868;&#x4E2D;&#xFF0C;&#x6240;&#x4EE5;&#x7528;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684; index &#x5373;&#x53EF;&#x3002;</p>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">&#x7A7A;
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
</code></pre>
<h3 id="3">3. &#x6CA1;&#x6709;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x8BF7;&#x6C42;&#x7684;&#x793A;&#x4F8B;</h3>
<p>&#x672C;&#x8282;&#x663E;&#x793A;&#x4E86;&#x540C;&#x4E00;&#x8FDE;&#x63A5;&#x4E0A;&#x4E0E; HTTP &#x8BF7;&#x6C42;&#x76F8;&#x5BF9;&#x5E94;&#x7684;&#x51E0;&#x4E2A;&#x8FDE;&#x7EED;&#x7684; header &#x5217;&#x8868;&#x3002;</p>
<h3 id="1">(1). &#x7B2C;&#x4E00;&#x4E2A;&#x8BF7;&#x6C42;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   8286 8441 0f77 7777 2e65 7861 6d70 6c65 | ...A.www.example
   2e63 6f6d                               | .com
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
   86                                      | == Indexed - Add ==
                                           |   idx = 6
                                           | -&gt; :scheme: http
   84                                      | == Indexed - Add ==
                                           |   idx = 4
                                           | -&gt; :path: /
   41                                      | == Literal indexed ==
                                           |   Indexed name (idx = 1)
                                           |     :authority
   0f                                      |   Literal value (len = 15)
   7777 772e 6578 616d 706c 652e 636f 6d   | www.example.com
                                           | -&gt; :authority:
                                           |   www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  57) :authority: www.example.com
         Table size:  57
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
</code></pre>
<h3 id="2">(2). &#x7B2C;&#x4E8C;&#x4E2A;&#x8BF7;&#x6C42;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
   cache-control: no-cache
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   8286 84be 5808 6e6f 2d63 6163 6865      | ....X.no-cache
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
   86                                      | == Indexed - Add ==
                                           |   idx = 6
                                           | -&gt; :scheme: http
   84                                      | == Indexed - Add ==
                                           |   idx = 4
                                           | -&gt; :path: /
   be                                      | == Indexed - Add ==
                                           |   idx = 62
                                           | -&gt; :authority:
                                           |   www.example.com
   58                                      | == Literal indexed ==
                                           |   Indexed name (idx = 24)
                                           |     cache-control
   08                                      |   Literal value (len = 8)
   6e6f 2d63 6163 6865                     | no-cache
                                           | -&gt; cache-control: no-cache
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  53) cache-control: no-cache
   [  2] (s =  57) :authority: www.example.com
         Table size: 110
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
   cache-control: no-cache
</code></pre>
<h3 id="3">(3). &#x7B2C;&#x4E09;&#x4E2A;&#x8BF7;&#x6C42;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: https
   :path: /index.html
   :authority: www.example.com
   custom-key: custom-value
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   8287 85bf 400a 6375 7374 6f6d 2d6b 6579 | ....@.custom-key
   0c63 7573 746f 6d2d 7661 6c75 65        | .custom-value
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
   87                                      | == Indexed - Add ==
                                           |   idx = 7
                                           | -&gt; :scheme: https
   85                                      | == Indexed - Add ==
                                           |   idx = 5
                                           | -&gt; :path: /index.html
   bf                                      | == Indexed - Add ==
                                           |   idx = 63
                                           | -&gt; :authority:
                                           |   www.example.com
   40                                      | == Literal indexed ==
   0a                                      |   Literal name (len = 10)
   6375 7374 6f6d 2d6b 6579                | custom-key
   0c                                      |   Literal value (len = 12)
   6375 7374 6f6d 2d76 616c 7565           | custom-value
                                           | -&gt; custom-key:
                                           |   custom-value
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  54) custom-key: custom-value
   [  2] (s =  53) cache-control: no-cache
   [  3] (s =  57) :authority: www.example.com
         Table size: 164
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: https
   :path: /index.html
   :authority: www.example.com
   custom-key: custom-value
</code></pre>
<h3 id="4">4. &#x6709;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x8BF7;&#x6C42;&#x7684;&#x793A;&#x4F8B;</h3>
<p>&#x672C;&#x8282;&#x663E;&#x793A;&#x4E0E;&#x4E0A;&#x4E00;&#x8282;&#x76F8;&#x540C;&#x7684;&#x793A;&#x4F8B;&#xFF0C;&#x4F46;&#x5BF9;&#x5B57;&#x9762;&#x503C; value &#x4F7F;&#x7528;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x3002;</p>
<h3 id="1">(1). &#x7B2C;&#x4E00;&#x4E2A;&#x8BF7;&#x6C42;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   8286 8441 8cf1 e3c2 e5f2 3a6b a0ab 90f4 | ...A......:k....
   ff                                      | .
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
   86                                      | == Indexed - Add ==
                                           |   idx = 6
                                           | -&gt; :scheme: http
   84                                      | == Indexed - Add ==
                                           |   idx = 4
                                           | -&gt; :path: /
   41                                      | == Literal indexed ==
                                           |   Indexed name (idx = 1)
                                           |     :authority
   8c                                      |   Literal value (len = 12)
                                           |     Huffman encoded:
   f1e3 c2e5 f23a 6ba0 ab90 f4ff           | .....:k.....
                                           |     Decoded:
                                           | www.example.com
                                           | -&gt; :authority:
                                           |   www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  57) :authority: www.example.com
         Table size:  57
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
</code></pre>
<h3 id="2">(2). &#x7B2C;&#x4E8C;&#x4E2A;&#x8BF7;&#x6C42;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
   cache-control: no-cache
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   8286 84be 5886 a8eb 1064 9cbf           | ....X....d..
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
   86                                      | == Indexed - Add ==
                                           |   idx = 6
                                           | -&gt; :scheme: http
   84                                      | == Indexed - Add ==
                                           |   idx = 4
                                           | -&gt; :path: /
   be                                      | == Indexed - Add ==
                                           |   idx = 62
                                           | -&gt; :authority:
                                           |   www.example.com
   58                                      | == Literal indexed ==
                                           |   Indexed name (idx = 24)
                                           |     cache-control
   86                                      |   Literal value (len = 6)
                                           |     Huffman encoded:
   a8eb 1064 9cbf                          | ...d..
                                           |     Decoded:
                                           | no-cache
                                           | -&gt; cache-control: no-cache
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  53) cache-control: no-cache
   [  2] (s =  57) :authority: www.example.com
         Table size: 110
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: http
   :path: /
   :authority: www.example.com
   cache-control: no-cache
</code></pre>
<h3 id="3">(3). &#x7B2C;&#x4E09;&#x4E2A;&#x8BF7;&#x6C42;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: https
   :path: /index.html
   :authority: www.example.com
   custom-key: custom-value
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   8287 85bf 4088 25a8 49e9 5ba9 7d7f 8925 | ....@.%.I.[.}..%
   a849 e95b b8e8 b4bf                     | .I.[....
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   82                                      | == Indexed - Add ==
                                           |   idx = 2
                                           | -&gt; :method: GET
   87                                      | == Indexed - Add ==
                                           |   idx = 7
                                           | -&gt; :scheme: https
   85                                      | == Indexed - Add ==
                                           |   idx = 5
                                           | -&gt; :path: /index.html
   bf                                      | == Indexed - Add ==
                                           |   idx = 63
                                           | -&gt; :authority:
                                           |   www.example.com
   40                                      | == Literal indexed ==
   88                                      |   Literal name (len = 8)
                                           |     Huffman encoded:
   25a8 49e9 5ba9 7d7f                     | %.I.[.}.
                                           |     Decoded:
                                           | custom-key
   89                                      |   Literal value (len = 9)
                                           |     Huffman encoded:
   25a8 49e9 5bb8 e8b4 bf                  | %.I.[....
                                           |     Decoded:
                                           | custom-value
                                           | -&gt; custom-key:
                                           |   custom-value
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  54) custom-key: custom-value
   [  2] (s =  53) cache-control: no-cache
   [  3] (s =  57) :authority: www.example.com
         Table size: 164
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :method: GET
   :scheme: https
   :path: /index.html
   :authority: www.example.com
   custom-key: custom-value
</code></pre>
<h3 id="5">5. &#x6CA1;&#x6709;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x54CD;&#x5E94;&#x7684;&#x793A;&#x4F8B;</h3>
<p>&#x672C;&#x8282;&#x663E;&#x793A;&#x4E86;&#x540C;&#x4E00;&#x8FDE;&#x63A5;&#x4E0A;&#x5BF9;&#x5E94;&#x4E8E; HTTP &#x54CD;&#x5E94;&#x7684;&#x51E0;&#x4E2A;&#x8FDE;&#x7EED;&#x7684; header &#x5217;&#x8868;&#x3002; HTTP/2 &#x8BBE;&#x7F6E;&#x53C2;&#x6570; SETTINGS_HEADER_TABLE_SIZE &#x8BBE;&#x7F6E;&#x4E3A; 256 &#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x503C;&#xFF0C;&#x5BFC;&#x81F4;&#x67D0;&#x4E9B;&#x9A71;&#x9010;&#x6761;&#x76EE;&#x53D1;&#x751F;&#x3002;</p>
<h3 id="1">(1). &#x7B2C;&#x4E00;&#x4E2A;&#x54CD;&#x5E94;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 302
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   4803 3330 3258 0770 7269 7661 7465 611d | H.302X.privatea.
   4d6f 6e2c 2032 3120 4f63 7420 3230 3133 | Mon, 21 Oct 2013
   2032 303a 3133 3a32 3120 474d 546e 1768 |  20:13:21 GMTn.h
   7474 7073 3a2f 2f77 7777 2e65 7861 6d70 | ttps://www.examp
   6c65 2e63 6f6d                          | le.com
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   48                                      | == Literal indexed ==
                                           |   Indexed name (idx = 8)
                                           |     :status
   03                                      |   Literal value (len = 3)
   3330 32                                 | 302
                                           | -&gt; :status: 302
   58                                      | == Literal indexed ==
                                           |   Indexed name (idx = 24)
                                           |     cache-control
   07                                      |   Literal value (len = 7)
   7072 6976 6174 65                       | private
                                           | -&gt; cache-control: private
   61                                      | == Literal indexed ==
                                           |   Indexed name (idx = 33)
                                           |     date
   1d                                      |   Literal value (len = 29)
   4d6f 6e2c 2032 3120 4f63 7420 3230 3133 | Mon, 21 Oct 2013
   2032 303a 3133 3a32 3120 474d 54        |  20:13:21 GMT
                                           | -&gt; date: Mon, 21 Oct 2013
                                           |   20:13:21 GMT
   6e                                      | == Literal indexed ==
                                           |   Indexed name (idx = 46)
   17                                      |   Literal value (len = 23)
   6874 7470 733a 2f2f 7777 772e 6578 616d | https://www.exam
   706c 652e 636f 6d                       | ple.com
                                           | -&gt; location:
                                           |   https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  63) location: https://www.example.com
   [  2] (s =  65) date: Mon, 21 Oct 2013 20:13:21 GMT
   [  3] (s =  52) cache-control: private
   [  4] (s =  42) :status: 302
         Table size: 222
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 302
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<h3 id="2">(2). &#x7B2C;&#x4E8C;&#x4E2A;&#x54CD;&#x5E94;</h3>
<p>&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5C06;&#xFF08;&#x201C;:status&#x201D;&#xFF0C;&#x201C;302&#x201D;&#xFF09;header &#x5B57;&#x6BB5;&#x9A71;&#x9010;&#x51FA;&#x53EF;&#x7528;&#x7A7A;&#x95F4;&#xFF0C;&#x4EE5;&#x5141;&#x8BB8;&#x6DFB;&#x52A0;&#xFF08;&#x201C;:status&#x201D;&#xFF0C;&#x201C;307&#x201D;&#xFF09;header &#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 307
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   4803 3330 37c1 c0bf                     | H.307...
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   48                                      | == Literal indexed ==
                                           |   Indexed name (idx = 8)
                                           |     :status
   03                                      |   Literal value (len = 3)
   3330 37                                 | 307
                                           | - evict: :status: 302
                                           | -&gt; :status: 307
   c1                                      | == Indexed - Add ==
                                           |   idx = 65
                                           | -&gt; cache-control: private
   c0                                      | == Indexed - Add ==
                                           |   idx = 64
                                           | -&gt; date: Mon, 21 Oct 2013
                                           |   20:13:21 GMT
   bf                                      | == Indexed - Add ==
                                           |   idx = 63
                                           | -&gt; location:
                                           |   https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  42) :status: 307
   [  2] (s =  63) location: https://www.example.com
   [  3] (s =  65) date: Mon, 21 Oct 2013 20:13:21 GMT
   [  4] (s =  52) cache-control: private
         Table size: 222
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 307
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<h3 id="3">(3). &#x7B2C;&#x4E09;&#x4E2A;&#x54CD;&#x5E94;</h3>
<p>&#x5728;&#x5904;&#x7406;&#x6B64; header &#x5217;&#x8868;&#x671F;&#x95F4;&#xFF0C;&#x4F1A;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x9010;&#x51FA;&#x51E0;&#x4E2A; header &#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 200
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:22 GMT
   location: https://www.example.com
   content-encoding: gzip
   set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   88c1 611d 4d6f 6e2c 2032 3120 4f63 7420 | ..a.Mon, 21 Oct
   3230 3133 2032 303a 3133 3a32 3220 474d | 2013 20:13:22 GM
   54c0 5a04 677a 6970 7738 666f 6f3d 4153 | T.Z.gzipw8foo=AS
   444a 4b48 514b 425a 584f 5157 454f 5049 | DJKHQKBZXOQWEOPI
   5541 5851 5745 4f49 553b 206d 6178 2d61 | UAXQWEOIU; max-a
   6765 3d33 3630 303b 2076 6572 7369 6f6e | ge=3600; version
   3d31                                    | =1
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   88                                      | == Indexed - Add ==
                                           |   idx = 8
                                           | -&gt; :status: 200
   c1                                      | == Indexed - Add ==
                                           |   idx = 65
                                           | -&gt; cache-control: private
   61                                      | == Literal indexed ==
                                           |   Indexed name (idx = 33)
                                           |     date
   1d                                      |   Literal value (len = 29)
   4d6f 6e2c 2032 3120 4f63 7420 3230 3133 | Mon, 21 Oct 2013
   2032 303a 3133 3a32 3220 474d 54        |  20:13:22 GMT
                                           | - evict: cache-control:
                                           |   private
                                           | -&gt; date: Mon, 21 Oct 2013
                                           |   20:13:22 GMT
   c0                                      | == Indexed - Add ==
                                           |   idx = 64
                                           | -&gt; location:
                                           |   https://www.example.com
   5a                                      | == Literal indexed ==
                                           |   Indexed name (idx = 26)
                                           |     content-encoding
   04                                      |   Literal value (len = 4)
   677a 6970                               | gzip
                                           | - evict: date: Mon, 21 Oct
                                           |    2013 20:13:21 GMT
                                           | -&gt; content-encoding: gzip
   77                                      | == Literal indexed ==
                                           |   Indexed name (idx = 55)
                                           |     set-cookie
   38                                      |   Literal value (len = 56)
   666f 6f3d 4153 444a 4b48 514b 425a 584f | foo=ASDJKHQKBZXO
   5157 454f 5049 5541 5851 5745 4f49 553b | QWEOPIUAXQWEOIU;
   206d 6178 2d61 6765 3d33 3630 303b 2076 |  max-age=3600; v
   6572 7369 6f6e 3d31                     | ersion=1
                                           | - evict: location:
                                           |   https://www.example.com
                                           | - evict: :status: 307
                                           | -&gt; set-cookie: foo=ASDJKHQ
                                           |   KBZXOQWEOPIUAXQWEOIU; ma
                                           |   x-age=3600; version=1
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  98) set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU;
                    max-age=3600; version=1
   [  2] (s =  52) content-encoding: gzip
   [  3] (s =  65) date: Mon, 21 Oct 2013 20:13:22 GMT
         Table size: 215
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 200
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:22 GMT
   location: https://www.example.com
   content-encoding: gzip
   set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1
</code></pre>
<h3 id="6">6. &#x6709;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x54CD;&#x5E94;&#x7684;&#x793A;&#x4F8B;</h3>
<p>&#x672C;&#x8282;&#x663E;&#x793A;&#x4E0E;&#x4E0A;&#x4E00;&#x8282;&#x76F8;&#x540C;&#x7684;&#x793A;&#x4F8B;&#xFF0C;&#x4F46;&#x5BF9;&#x5B57;&#x9762;&#x503C;&#x4F7F;&#x7528;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x3002;HTTP/2 &#x8BBE;&#x7F6E;&#x53C2;&#x6570; SETTINGS_HEADER_TABLE_SIZE &#x8BBE;&#x7F6E;&#x4E3A; 256 &#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x503C;&#xFF0C;&#x5BFC;&#x81F4;&#x67D0;&#x4E9B;&#x9A71;&#x9010;&#x4E8B;&#x4EF6;&#x53D1;&#x751F;&#x3002;&#x9A71;&#x9010;&#x673A;&#x5236;&#x4F7F;&#x7528;&#x5DF2;&#x89E3;&#x7801;&#x5B57;&#x9762;&#x503C;&#x7684;&#x957F;&#x5EA6;&#xFF0C;&#x56E0;&#x6B64;&#x53D1;&#x751F;&#x4E0E;&#x4E0A;&#x4E00;&#x8282;&#x76F8;&#x540C;&#x7684;&#x9A71;&#x9010;&#x3002;</p>
<h3 id="1">(1). &#x7B2C;&#x4E00;&#x4E2A;&#x54CD;&#x5E94;</h3>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 302
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   4882 6402 5885 aec3 771a 4b61 96d0 7abe | H.d.X...w.Ka..z.
   9410 54d4 44a8 2005 9504 0b81 66e0 82a6 | ..T.D. .....f...
   2d1b ff6e 919d 29ad 1718 63c7 8f0b 97c8 | -..n..)...c.....
   e9ae 82ae 43d3                          | ....C.
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   48                                      | == Literal indexed ==
                                           |   Indexed name (idx = 8)
                                           |     :status
   82                                      |   Literal value (len = 2)
                                           |     Huffman encoded:
   6402                                    | d.
                                           |     Decoded:
                                           | 302
                                           | -&gt; :status: 302
   58                                      | == Literal indexed ==
                                           |   Indexed name (idx = 24)
                                           |     cache-control
   85                                      |   Literal value (len = 5)
                                           |     Huffman encoded:
   aec3 771a 4b                            | ..w.K
                                           |     Decoded:
                                           | private
                                           | -&gt; cache-control: private
   61                                      | == Literal indexed ==
                                           |   Indexed name (idx = 33)
                                           |     date
   96                                      |   Literal value (len = 22)
                                           |     Huffman encoded:
   d07a be94 1054 d444 a820 0595 040b 8166 | .z...T.D. .....f
   e082 a62d 1bff                          | ...-..
                                           |     Decoded:
                                           | Mon, 21 Oct 2013 20:13:21
                                           | GMT
                                           | -&gt; date: Mon, 21 Oct 2013
                                           |   20:13:21 GMT
   6e                                      | == Literal indexed ==
                                           |   Indexed name (idx = 46)
                                           |     location
   91                                      |   Literal value (len = 17)
                                           |     Huffman encoded:
   9d29 ad17 1863 c78f 0b97 c8e9 ae82 ae43 | .)...c.........C
   d3                                      | .
                                           |     Decoded:
                                           | https://www.example.com
                                           | -&gt; location:
                                           |   https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  63) location: https://www.example.com
   [  2] (s =  65) date: Mon, 21 Oct 2013 20:13:21 GMT
   [  3] (s =  52) cache-control: private
   [  4] (s =  42) :status: 302
         Table size: 222
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 302
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<h3 id="2">(2). &#x7B2C;&#x4E8C;&#x4E2A;&#x54CD;&#x5E94;</h3>
<p>&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5C06;&#xFF08;&#x201C;:status&#x201D;&#xFF0C;&#x201C;302&#x201D;&#xFF09;&#x5934;&#x5B57;&#x6BB5;&#x9A71;&#x9010;&#x51FA;&#x53EF;&#x7528;&#x7A7A;&#x95F4;&#xFF0C;&#x4EE5;&#x5141;&#x8BB8;&#x6DFB;&#x52A0;&#xFF08;&#x201C;:status&#x201D;&#xFF0C;&#x201C;307&#x201D;&#xFF09;header &#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 307
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   4883 640e ffc1 c0bf                     | H.d.....
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   48                                      | == Literal indexed ==
                                           |   Indexed name (idx = 8)
                                           |     :status
   83                                      |   Literal value (len = 3)
                                           |     Huffman encoded:
   640e ff                                 | d..
                                           |     Decoded:
                                           | 307
                                           | - evict: :status: 302
                                           | -&gt; :status: 307
   c1                                      | == Indexed - Add ==
                                           |   idx = 65
                                           | -&gt; cache-control: private
   c0                                      | == Indexed - Add ==
                                           |   idx = 64
                                           | -&gt; date: Mon, 21 Oct 2013
                                           |   20:13:21 GMT
   bf                                      | == Indexed - Add ==
                                           |   idx = 63
                                           | -&gt; location:
                                           |   https://www.example.com
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  42) :status: 307
   [  2] (s =  63) location: https://www.example.com
   [  3] (s =  65) date: Mon, 21 Oct 2013 20:13:21 GMT
   [  4] (s =  52) cache-control: private
         Table size: 222
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 307
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:21 GMT
   location: https://www.example.com
</code></pre>
<h3 id="3">(3). &#x7B2C;&#x4E09;&#x4E2A;&#x54CD;&#x5E94;</h3>
<p>&#x5728;&#x5904;&#x7406;&#x6B64; header &#x5217;&#x8868;&#x671F;&#x95F4;&#xFF0C;&#x4F1A;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x9010;&#x51FA;&#x51E0;&#x4E2A; header &#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x9700;&#x8981;&#x7F16;&#x7801;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 200
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:22 GMT
   location: https://www.example.com
   content-encoding: gzip
   set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1
</code></pre>
<p>&#x7F16;&#x7801;&#x6570;&#x636E;&#x7684;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">   88c1 6196 d07a be94 1054 d444 a820 0595 | ..a..z...T.D. ..
   040b 8166 e084 a62d 1bff c05a 839b d9ab | ...f...-...Z....
   77ad 94e7 821d d7f2 e6c7 b335 dfdf cd5b | w..........5...[
   3960 d5af 2708 7f36 72c1 ab27 0fb5 291f | 9`..&apos;..6r..&apos;..).
   9587 3160 65c0 03ed 4ee5 b106 3d50 07   | ..1`e...N...=P.
</code></pre>
<p>&#x89E3;&#x7801;&#x8FC7;&#x7A0B;&#xFF1A;</p>
<pre><code class="language-c">   88                                      | == Indexed - Add ==
                                           |   idx = 8
                                           | -&gt; :status: 200
   c1                                      | == Indexed - Add ==
                                           |   idx = 65
                                           | -&gt; cache-control: private
   61                                      | == Literal indexed ==
                                           |   Indexed name (idx = 33)
                                           |     date
   96                                      |   Literal value (len = 22)
                                           |     Huffman encoded:
   d07a be94 1054 d444 a820 0595 040b 8166 | .z...T.D. .....f
   e084 a62d 1bff                          | ...-..
                                           |     Decoded:
                                           | Mon, 21 Oct 2013 20:13:22
                                           | GMT
                                           | - evict: cache-control:
                                           |   private
                                           | -&gt; date: Mon, 21 Oct 2013
                                           |   20:13:22 GMT
   c0                                      | == Indexed - Add ==
                                           |   idx = 64
                                           | -&gt; location:
                                           |   https://www.example.com
   5a                                      | == Literal indexed ==
                                           |   Indexed name (idx = 26)
                                           |     content-encoding
   83                                      |   Literal value (len = 3)
                                           |     Huffman encoded:
   9bd9 ab                                 | ...
                                           |     Decoded:
                                           | gzip
                                           | - evict: date: Mon, 21 Oct
                                           |    2013 20:13:21 GMT
                                           | -&gt; content-encoding: gzip
   77                                      | == Literal indexed ==
                                           |   Indexed name (idx = 55)
                                           |     set-cookie
   ad                                      |   Literal value (len = 45)
                                           |     Huffman encoded:
   94e7 821d d7f2 e6c7 b335 dfdf cd5b 3960 | .........5...[9`
   d5af 2708 7f36 72c1 ab27 0fb5 291f 9587 | ..&apos;..6r..&apos;..)...
   3160 65c0 03ed 4ee5 b106 3d50 07        | 1`e...N...=P.
                                           |     Decoded:
                                           | foo=ASDJKHQKBZXOQWEOPIUAXQ
                                           | WEOIU; max-age=3600; versi
                                           | on=1
                                           | - evict: location:
                                           |   https://www.example.com
                                           | - evict: :status: 307
                                           | -&gt; set-cookie: foo=ASDJKHQ
                                           |   KBZXOQWEOPIUAXQWEOIU; ma
                                           |   x-age=3600; version=1
</code></pre>
<p>&#x7F16;&#x7801;&#x540E;&#x7684;&#x52A8;&#x6001;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   [  1] (s =  98) set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU;
                    max-age=3600; version=1
   [  2] (s =  52) content-encoding: gzip
   [  3] (s =  65) date: Mon, 21 Oct 2013 20:13:22 GMT
         Table size: 215
</code></pre>
<p>&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#xFF1A;</p>
<pre><code class="language-c">   :status: 200
   cache-control: private
   date: Mon, 21 Oct 2013 20:13:22 GMT
   location: https://www.example.com
   content-encoding: gzip
   set-cookie: foo=ASDJKHQKBZXOQWEOPIUAXQWEOIU; max-age=3600; version=1
</code></pre>
<h3 id="7">7. &#x4E00;&#x4E9B;&#x6293;&#x5305;&#x7684;&#x4F8B;&#x5B50;</h3>
<p>&#x5148;&#x6765;&#x770B;&#x770B;&#x9996;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D; HPACK &#x662F;&#x5982;&#x4F55;&#x538B;&#x7F29; HEADERS &#x5E27;&#x4E2D;&#x7684;&#x9996;&#x90E8;&#x5B57;&#x6BB5;&#x7684;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_8.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>:method:GET &#x5728;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x7B2C; 2 &#x9879;&#x3002;Name &#x548C; Value &#x90FD;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x76F4;&#x63A5;&#x7528; 2 &#x5373;&#x53EF;&#x8868;&#x793A;&#x8FD9;&#x4E00;&#x9879;&#x5934;&#x90E8;&#x5B57;&#x6BB5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_9.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x76F8;&#x540C;&#x7684;&#xFF0C;:path:/ &#x5728;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x7B2C; 4 &#x9879;&#x3002;Name &#x548C; Value &#x90FD;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&#x4E86;&#x3002;&#x6240;&#x4EE5;&#x76F4;&#x63A5;&#x7528; 4 &#x5373;&#x53EF;&#x8868;&#x793A;&#x8FD9;&#x4E00;&#x9879;&#x5934;&#x90E8;&#x5B57;&#x6BB5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_10.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x518D;&#x6765;&#x770B;&#x770B;&#x7B2C;&#x4E8C;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D;&#xFF0C;&#x540C;&#x6837;&#x662F; :method:GET&#xFF0C;&#x548C;&#x7B2C;&#x4E00;&#x6B21;&#x8BF7;&#x6C42;&#x4E00;&#x6837;&#xFF0C;&#x76F4;&#x63A5;&#x7528; 2 &#x5373;&#x53EF;&#x8868;&#x793A;&#x8FD9;&#x4E00;&#x9879;&#x5934;&#x90E8;&#x5B57;&#x6BB5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_11.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x56DE;&#x5230;&#x9996;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D;&#xFF0C;if-none-match &#x9996;&#x90E8;&#x5B57;&#x6BB5;&#xFF0C;&#x5728;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x7B2C; 41 &#x9879;&#xFF0C;&#x4F46;&#x662F;&#x9759;&#x6001;&#x8868;&#x91CC;&#x9762;&#x6CA1;&#x6709;&#x503C;&#x3002;&#x6839;&#x636E;&#x524D;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x8BB2;&#x89E3;&#x7684; HPACK &#x7B97;&#x6CD5;&#xFF0C;&#x538B;&#x7F29;&#x4E32;&#x4EE5; 01 &#x5F00;&#x5934;&#xFF0C;101001 &#x662F; 41&#xFF0C;10011110&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A; 1 &#x4EE3;&#x8868;&#x662F;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#xFF0C;0011110 &#x4EE3;&#x8868; 30&#xFF0C;&#x8868;&#x660E; value &#x662F;&#x7D27;&#x63A5;&#x7740;&#x7684; 30 &#x4E2A;&#x5B57;&#x8282;&#x91CC;&#x9762;&#x7684;&#x5185;&#x5BB9;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_12.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x8FD8;&#x662F;&#x9996;&#x6B21;&#x8BF7;&#x6C42;&#xFF0C;user-agent &#x9996;&#x90E8;&#x5B57;&#x6BB5;&#xFF0C;&#x5728;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x7B2C; 58 &#x9879;&#xFF0C;&#x4F46;&#x662F;&#x9759;&#x6001;&#x8868;&#x91CC;&#x9762;&#x6CA1;&#x6709;&#x503C;&#x3002;&#x6839;&#x636E;&#x524D;&#x4E00;&#x7BC7;&#x6587;&#x7AE0;&#x8BB2;&#x89E3;&#x7684; HPACK &#x7B97;&#x6CD5;&#xFF0C;&#x538B;&#x7F29;&#x4E32;&#x4EE5; 01 &#x5F00;&#x5934;&#xFF0C;111010 &#x662F; 58&#xFF0C;11011011&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A; 1 &#x4EE3;&#x8868;&#x662F;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#xFF0C;1011011 &#x4EE3;&#x8868; 91&#xFF0C;&#x8868;&#x660E; value &#x662F;&#x7D27;&#x63A5;&#x7740;&#x7684; 91 &#x4E2A;&#x5B57;&#x8282;&#x91CC;&#x9762;&#x7684;&#x5185;&#x5BB9;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_13.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x5230;&#x4E86;&#x7B2C;&#x4E8C;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D;&#xFF0C;user-agent &#x9996;&#x90E8;&#x5B57;&#x6BB5;&#x5728;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5DF2;&#x7ECF;&#x5B58;&#x50A8;&#x4E86; name &#x548C; value &#x4E86;&#xFF0C;&#x6240;&#x4EE5;&#x76F4;&#x63A5;&#x547D;&#x4E2D;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7B2C; 86 &#x9879;&#x3002;1010110 &#x4EE3;&#x8868;&#x7684;&#x5C31;&#x662F; 86&#x3002;&#x8FD9;&#x4E2A;&#x4F8B;&#x5B50;&#x53EF;&#x4EE5;&#x5F88;&#x660E;&#x663E;&#x7684;&#x770B;&#x5230;&#xFF0C;&#x52A8;&#x6001;&#x8868;&#x5927;&#x5E45;&#x7F29;&#x51CF;&#x4E86; header &#x5927;&#x5C0F;&#x3002;</p>
<p>&#x5BF9;&#x6BD4;&#x540C;&#x4E00;&#x4E2A; HTTP/2 &#x8FDE;&#x63A5;&#x4E2D;&#x7684; 2 &#x6B21;&#x76F8;&#x540C;&#x7684;&#x8BF7;&#x6C42;&#x3002;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#x9996;&#x90E8;&#x5927;&#x5C0F;&#x5DF2;&#x7ECF;&#x5927;&#x5E45;&#x51CF;&#x5C11;&#x4E86;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_14.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x5728;&#x9996;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D;&#xFF0C;HAPCK &#x4F7F;&#x5F97;&#x539F;&#x6709;&#x7684;&#x5934;&#x90E8;&#x51CF;&#x5C11;&#x4E86; 44%&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_15.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x5728;&#x7B2C;&#x4E8C;&#x6B21;&#x8BF7;&#x6C42;&#x4E2D;&#xFF0C;&#x7531;&#x4E8E;&#x8865;&#x5145;&#x4E86;&#x52A8;&#x6001;&#x8868;&#xFF0C;HAPCK &#x4F7F;&#x5F97;&#x539F;&#x6709;&#x7684;&#x5934;&#x90E8;&#x51CF;&#x5C11;&#x4E86; 97%&#x3002;</p>
<h3 id="8hpack">8. HPACK &#x4F18;&#x5316;&#x6548;&#x679C;</h3>
<p>&#x6700;&#x540E;&#xFF0C;&#x8BA9;&#x6211;&#x4EEC;&#x7528;&#x5DE5;&#x5177;&#x5177;&#x4F53;&#x6D4B;&#x8BD5;&#x4E00;&#x4E0B; HPACK &#x7684;&#x201C;&#x5A01;&#x529B;&#x201D;&#x3002;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; <a href="https://nghttp2.org/documentation/h2load-howto.html">h2load &#x5DE5;&#x5177;&#x6D4B;&#x8BD5;</a>&#x3002;</p>
<p>&#x4EE5;&#x4E0B;&#x5206;&#x522B;&#x662F; 3 &#x4E2A;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#xFF0C;&#x7B2C;&#x4E00;&#x4E2A;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x53EA;&#x8BF7;&#x6C42;&#x4E00;&#x6B21;&#xFF0C;&#x7B2C;&#x4E8C;&#x4E2A;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x8BF7;&#x6C42;&#x4E8C;&#x6B21;&#xFF0C;&#x7B2C;&#x4E09;&#x4E2A;&#x6D4B;&#x8BD5;&#x7528;&#x4F8B;&#x8BF7;&#x6C42;&#x4E09;&#x6B21;&#xFF0C;&#x770B;&#x6BCF;&#x6B21;&#x6D4B;&#x8BD5;&#x7528;&#x6765;&#x80FD;&#x7F29;&#x5C0F;&#x5934;&#x90E8;&#x5B57;&#x6BB5;&#x5F00;&#x9500;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/133_16_.png" alt="HTTP/2 HPACK &#x5B9E;&#x9645;&#x5E94;&#x7528;&#x4E3E;&#x4F8B;" loading="lazy"></p>
<p>&#x4ECE;&#x4E0A;&#x56FE;&#x4E2D;&#x53EF;&#x4EE5;&#x770B;&#x5230;&#xFF0C;&#x8BF7;&#x6C42;&#x8D8A;&#x591A;&#xFF0C;&#x5934;&#x90E8;&#x5B57;&#x6BB5;&#x8D8A;&#x6765;&#x8D8A;&#x5C0F;&#x3002;</p>
<table>
<thead>
<tr>
<th style="text-align:center">&#x8BF7;&#x6C42;&#x6B21;&#x6570;</th>
<th style="text-align:center">&#x9996;&#x90E8;&#x5B57;&#x6BB5;&#x5360;&#x6BD4;</th>
<th style="text-align:center">&#x8282;&#x7EA6;&#x767E;&#x5206;&#x6BD4;</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">1</td>
<td style="text-align:center">1.002%</td>
<td style="text-align:center">29.89%</td>
</tr>
<tr>
<td style="text-align:center">2</td>
<td style="text-align:center">0.521%</td>
<td style="text-align:center">63.75%</td>
</tr>
<tr>
<td style="text-align:center">3</td>
<td style="text-align:center">0.359%</td>
<td style="text-align:center">75.04%</td>
</tr>
<tr>
<td style="text-align:center">5</td>
<td style="text-align:center">0.241%</td>
<td style="text-align:center">83.28%</td>
</tr>
<tr>
<td style="text-align:center">10</td>
<td style="text-align:center">0.137%</td>
<td style="text-align:center">90.48%</td>
</tr>
<tr>
<td style="text-align:center">20</td>
<td style="text-align:center">0.092%</td>
<td style="text-align:center">93.65%</td>
</tr>
<tr>
<td style="text-align:center">30</td>
<td style="text-align:center">0.074%</td>
<td style="text-align:center">94.85%</td>
</tr>
<tr>
<td style="text-align:center">50</td>
<td style="text-align:center">0.061%</td>
<td style="text-align:center">95.75%</td>
</tr>
<tr>
<td style="text-align:center">100</td>
<td style="text-align:center">0.052%</td>
<td style="text-align:center">96.39%</td>
</tr>
</tbody>
</table>
<p>&#x7531;&#x6B64;&#x53EF;&#x4EE5;&#x770B;&#x51FA; HTTP/2 &#x4E2D;&#x7684; HPACK &#x7B97;&#x6CD5;&#x5BF9; header &#x6574;&#x4F53;&#x7684;&#x538B;&#x7F29;&#x7387;&#x8FD8;&#x662F;&#x975E;&#x5E38;&#x4E0D;&#x9519;&#x7684;&#x3002;</p>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://tools.ietf.org/html/rfc7541">RFC 7541</a></p>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="HTTPS://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="HTTPS://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/http2-hpack-example/"><strong>GHOST_URL</strong>/http2-hpack-example/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[详解 HTTP/2 头压缩算法 —— HPACK]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id>&#x4E00;. &#x7B80;&#x4ECB;</h2>
<p>&#x5728; HTTP/1.1&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://tools.ietf.org/html/rfc7230">[RFC7230]</a>&#xFF09;&#x4E2D;&#xFF0C;header &#x5B57;&#x6BB5;&#x672A;&#x88AB;&#x538B;&#x7F29;&#x3002;&#x968F;&#x7740;&#x7F51;&#x9875;&#x5185;&#x7684;&#x8BF7;&#x6C42;&#x6570;&#x589E;&#x957F;&#x5230;&#x9700;&#x8981;&#x6570;&#x5341;&#x5230;&#x6570;&#x767E;&#x4E2A;&#x8BF7;&#x6C42;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD9;</p>]]></description><link>https://halfrost.com/http2-header-compression/</link><guid isPermaLink="false">634360bbd892dc307476ccdb</guid><category><![CDATA[Protocol]]></category><category><![CDATA[HTTP]]></category><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 16 Jun 2019 15:31:00 GMT</pubDate><media:content url="https://img.halfrost.com/Blog/ArticleTitleImage/132_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id>&#x4E00;. &#x7B80;&#x4ECB;</h2>
<img src="https://img.halfrost.com/Blog/ArticleTitleImage/132_0.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK"><p>&#x5728; HTTP/1.1&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://tools.ietf.org/html/rfc7230">[RFC7230]</a>&#xFF09;&#x4E2D;&#xFF0C;header &#x5B57;&#x6BB5;&#x672A;&#x88AB;&#x538B;&#x7F29;&#x3002;&#x968F;&#x7740;&#x7F51;&#x9875;&#x5185;&#x7684;&#x8BF7;&#x6C42;&#x6570;&#x589E;&#x957F;&#x5230;&#x9700;&#x8981;&#x6570;&#x5341;&#x5230;&#x6570;&#x767E;&#x4E2A;&#x8BF7;&#x6C42;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x8FD9;&#x4E9B;&#x8BF7;&#x6C42;&#x4E2D;&#x7684;&#x5197;&#x4F59; header &#x5B57;&#x6BB5;&#x4E0D;&#x5FC5;&#x8981;&#x5730;&#x6D88;&#x8017;&#x4E86;&#x5E26;&#x5BBD;&#xFF0C;&#x4ECE;&#x800C;&#x663E;&#x7740;&#x589E;&#x52A0;&#x4E86;&#x5EF6;&#x8FDF;&#x3002;</p>
<p>SPDY <a href="https://tools.ietf.org/html/rfc7541#ref-SPDY">[SPDY]</a> &#x6700;&#x521D;&#x901A;&#x8FC7;&#x4F7F;&#x7528; DEFLATE <a href="https://tools.ietf.org/html/rfc7541#ref-DEFLATE">[DEFLATE]</a> &#x683C;&#x5F0F;&#x538B;&#x7F29; header &#x5B57;&#x6BB5;&#x6765;&#x89E3;&#x51B3;&#x6B64;&#x5197;&#x4F59;&#x95EE;&#x9898;&#xFF0C;&#x4E8B;&#x5B9E;&#x8BC1;&#x660E;&#xFF0C;&#x8FD9;&#x79CD;&#x683C;&#x5F0F;&#x975E;&#x5E38;&#x6709;&#x6548;&#x5730;&#x8868;&#x793A;&#x4E86;&#x5197;&#x4F59; header &#x5B57;&#x6BB5;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x6CD5;&#x66B4;&#x9732;&#x4E86;&#x5B89;&#x5168;&#x98CE;&#x9669;&#xFF0C;&#x5982; CRIME&#xFF08;&#x8F7B;&#x677E;&#x5B9E;&#x73B0;&#x538B;&#x7F29;&#x7387;&#x4FE1;&#x606F;&#x6CC4;&#x6F0F;&#xFF09;&#x653B;&#x51FB;&#x6240;&#x8BC1;&#x660E;&#x7684;&#x5B89;&#x5168;&#x98CE;&#x9669;&#xFF08;&#x8BF7;&#x53C2;&#x9605; <a href="https://tools.ietf.org/html/rfc7541#ref-CRIME">[CRIME]</a>&#xFF09;&#x3002;</p>
<p>&#x672C;&#x89C4;&#x8303;&#x5B9A;&#x4E49;&#x4E86; HPACK&#xFF0C;&#x8FD9;&#x662F;&#x4E00;&#x79CD;&#x65B0;&#x7684;&#x538B;&#x7F29;&#x65B9;&#x6CD5;&#xFF0C;&#x5B83;&#x6D88;&#x9664;&#x4E86;&#x591A;&#x4F59;&#x7684; header &#x5B57;&#x6BB5;&#xFF0C;&#x5C06;&#x6F0F;&#x6D1E;&#x9650;&#x5236;&#x5230;&#x5DF2;&#x77E5;&#x7684;&#x5B89;&#x5168;&#x653B;&#x51FB;&#xFF0C;&#x5E76;&#x4E14;&#x5728;&#x53D7;&#x9650;&#x7684;&#x73AF;&#x5883;&#x4E2D;&#x5177;&#x6709;&#x6709;&#x9650;&#x7684;&#x5185;&#x5B58;&#x9700;&#x6C42;&#x3002;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E6%8E%A2%E6%B5%8B%E5%8A%A8%E6%80%81%E8%A1%A8%E7%8A%B6%E6%80%81">&#x7B2C; 7 &#x8282;</a>&#x4ECB;&#x7ECD;&#x4E86; HPACK &#x7684;&#x6F5C;&#x5728;&#x5B89;&#x5168;&#x95EE;&#x9898;&#x3002;</p>
<p>HPACK &#x683C;&#x5F0F;&#x7279;&#x610F;&#x88AB;&#x8BBE;&#x8BA1;&#x6210;&#x7B80;&#x5355;&#x4E14;&#x4E0D;&#x7075;&#x6D3B;&#x7684;&#x5F62;&#x5F0F;&#x3002;&#x4E24;&#x79CD;&#x7279;&#x6027;&#x90FD;&#x964D;&#x4F4E;&#x4E86;&#x7531;&#x4E8E;&#x5B9E;&#x73B0;&#x9519;&#x8BEF;&#x800C;&#x5F15;&#x8D77;&#x7684;&#x4E92;&#x64CD;&#x4F5C;&#x6027;&#x6216;&#x5B89;&#x5168;&#x6027;&#x95EE;&#x9898;&#x7684;&#x98CE;&#x9669;&#x3002;&#x6CA1;&#x6709;&#x5B9A;&#x4E49;&#x6269;&#x5C55;&#x673A;&#x5236;&#xFF1B;&#x53EA;&#x80FD;&#x901A;&#x8FC7;&#x5B9A;&#x4E49;&#x5B8C;&#x6574;&#x7684;&#x66FF;&#x6362;&#x6765;&#x66F4;&#x6539;&#x683C;&#x5F0F;&#x3002;</p>
<h3 id="1">1. &#x603B;&#x89C8;</h3>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_1.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p>&#x672C;&#x89C4;&#x8303;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x683C;&#x5F0F;&#x5C06; header &#x5B57;&#x6BB5;&#x5217;&#x8868;&#x89C6;&#x4E3A; name-value &#x5BF9;&#x7684;&#x6709;&#x5E8F;&#x96C6;&#x5408;&#xFF0C;&#x5176;&#x4E2D;&#x53EF;&#x4EE5;&#x5305;&#x62EC;&#x91CD;&#x590D;&#x7684;&#x5BF9;&#x3002;&#x540D;&#x79F0;&#x548C;&#x503C;&#x88AB;&#x8BA4;&#x4E3A;&#x662F;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x4E0D;&#x900F;&#x660E;&#x5E8F;&#x5217;&#xFF0C;&#x5E76;&#x4E14; header &#x5B57;&#x6BB5;&#x7684;&#x987A;&#x5E8F;&#x5728;&#x538B;&#x7F29;&#x548C;&#x89E3;&#x538B;&#x7F29;&#x540E;&#x4FDD;&#x6301;&#x4E0D;&#x53D8;&#x3002;</p>
<p>header &#x5B57;&#x6BB5;&#x8868;&#x5C06; header &#x5B57;&#x6BB5;&#x6620;&#x5C04;&#x5230;&#x7D22;&#x5F15;&#x503C;&#xFF0C;&#x4ECE;&#x800C;&#x5F97;&#x5230;&#x7F16;&#x7801;&#x3002;&#x8FD9;&#x4E9B; header &#x5B57;&#x6BB5;&#x8868;&#x53EF;&#x4EE5;&#x5728;&#x7F16;&#x7801;&#x6216;&#x89E3;&#x7801;&#x65B0; header &#x5B57;&#x6BB5;&#x65F6;&#x8FDB;&#x884C;&#x589E;&#x91CF;&#x66F4;&#x65B0;&#x3002;</p>
<p>&#x5728;&#x7F16;&#x7801;&#x5F62;&#x5F0F;&#x4E2D;&#xFF0C;header &#x5B57;&#x6BB5;&#x4EE5;&#x5B57;&#x9762;&#x5F62;&#x5F0F;&#x8868;&#x793A;&#x6216;&#x4F5C;&#x4E3A;&#x5BF9; header &#x5B57;&#x6BB5;&#x8868;&#x4E2D;&#x7684;&#x4E00;&#x4E2A; header &#x5B57;&#x6BB5;&#x7684;&#x5F15;&#x7528;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5F15;&#x7528;&#x548C;&#x5B57;&#x9762;&#x503C;&#x7684;&#x6DF7;&#x5408;&#x6765;&#x7F16;&#x7801; header &#x5B57;&#x6BB5;&#x7684;&#x5217;&#x8868;&#x3002;</p>
<p>&#x5B57;&#x9762;&#x503C;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x7F16;&#x7801;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x9759;&#x6001;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;(&#x6700;&#x9AD8;&#x538B;&#x7F29;&#x6BD4; 8:5)&#x3002;</p>
<p>&#x7F16;&#x7801;&#x5668;&#x8D1F;&#x8D23;&#x51B3;&#x5B9A;&#x5C06;&#x54EA;&#x4E9B; header &#x5B57;&#x6BB5;&#x4F5C;&#x4E3A;&#x65B0;&#x6761;&#x76EE;&#x63D2;&#x5165; header &#x5B57;&#x6BB5;&#x8868;&#x4E2D;&#x3002;&#x89E3;&#x7801;&#x5668;&#x6267;&#x884C;&#x5BF9;&#x7F16;&#x7801;&#x5668;&#x6307;&#x5B9A;&#x7684; header &#x5B57;&#x6BB5;&#x8868;&#x7684;&#x4FEE;&#x6539;&#xFF0C;&#x4ECE;&#x800C;&#x5728;&#x6B64;&#x8FC7;&#x7A0B;&#x4E2D;&#x91CD;&#x5EFA; header &#x5B57;&#x6BB5;&#x7684;&#x5217;&#x8868;&#x3002;&#x8FD9;&#x4F7F;&#x89E3;&#x7801;&#x5668;&#x4FDD;&#x6301;&#x7B80;&#x5355;&#x5E76;&#x53EF;&#x4EE5;&#x4E0E;&#x591A;&#x79CD;&#x7F16;&#x7801;&#x5668;&#x4E92;&#x64CD;&#x4F5C;&#x3002;</p>
<p><a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E6%95%B4%E6%95%B0%E8%A1%A8%E7%A4%BA%E7%9A%84%E7%A4%BA%E4%BE%8B">&#x9644;&#x5F55;C</a> &#x4E2D;&#x63D0;&#x4F9B;&#x4E86;&#x4F7F;&#x7528;&#x8FD9;&#x4E9B;&#x4E0D;&#x540C;&#x7684;&#x673A;&#x5236;&#x8868;&#x793A; header &#x5B57;&#x6BB5;&#x7684;&#x793A;&#x4F8B;&#x3002;</p>
<blockquote>
<p>&#x6CE8;&#xFF1A;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x8BF7;&#x6C42;&#x548C;&#x54CD;&#x5E94;&#x6807;&#x5934;&#x5B57;&#x6BB5;&#x7684;&#x5B9A;&#x4E49;&#x4FDD;&#x6301;&#x4E0D;&#x53D8;&#xFF0C;&#x4EC5;&#x6709;&#x4E00;&#x4E9B;&#x5FAE;&#x5C0F;&#x7684;&#x5DEE;&#x5F02;&#xFF1A;&#x6240;&#x6709;&#x6807;&#x5934;&#x5B57;&#x6BB5;&#x540D;&#x79F0;&#x5747;&#x4E3A;&#x5C0F;&#x5199;&#xFF0C;&#x8BF7;&#x6C42;&#x884C;&#x73B0;&#x5728;&#x62C6;&#x5206;&#x6210;&#x5404;&#x4E2A; :method&#x3001;:scheme&#x3001;:authority &#x548C; :path &#x4F2A;&#x6807;&#x5934;&#x5B57;&#x6BB5;&#x3002;</p>
</blockquote>
<h3 id="2">2. &#x7EA6;&#x5B9A;</h3>
<p>&#x672C;&#x6587;&#x6863;&#x4E2D;&#x7684;&#x5173;&#x952E;&#x5B57; &#x201C;&#x5FC5;&#x987B;&#x201D;&#xFF0C;&#x201C;&#x4E0D;&#x5F97;&#x201D;&#xFF0C;&#x201C;&#x5FC5;&#x987B;&#x201D;&#xFF0C;&#x201C;&#x5E94;&#x201D;&#xFF0C;&#x201C;&#x5E94;&#x7981;&#x6B62;&#x201D;&#xFF0C;&#x201C;&#x5E94;&#x201D;&#xFF0C;&#x201C;&#x4E0D;&#x5E94;&#x201D;&#xFF0C;&#x201C;&#x5EFA;&#x8BAE;&#x201D;&#xFF0C;&#x201C;&#x53EF;&#x4EE5;&#x201D;&#x548C;&#x201C;&#x53EF;&#x9009;&#x201D;&#x662F; RFC 2119 <a href="https://tools.ietf.org/html/rfc2119">[RFC2119]</a> &#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x3002;</p>
<p>&#x6240;&#x6709;&#x6570;&#x503C;&#x5747;&#x4EE5;&#x7F51;&#x7EDC;&#x5B57;&#x8282;&#x987A;&#x5E8F;&#x6392;&#x5217;&#x3002; &#x9664;&#x975E;&#x53E6;&#x6709;&#x8BF4;&#x660E;&#xFF0C;&#x5426;&#x5219;&#x503C;&#x662F;&#x65E0;&#x7B26;&#x53F7;&#x7684;&#x3002;&#x9002;&#x5F53;&#x65F6;&#x4EE5;&#x5341;&#x8FDB;&#x5236;&#x6216;&#x5341;&#x516D;&#x8FDB;&#x5236;&#x63D0;&#x4F9B;&#x5B57;&#x9762;&#x503C;&#x3002;</p>
<h3 id="3">3. &#x672F;&#x8BED;</h3>
<p>&#x672C;&#x6587;&#x4F7F;&#x7528;&#x4EE5;&#x4E0B;&#x672F;&#x8BED;&#xFF1A;</p>
<p>Header Field&#xFF1A;&#x4E00;&#x4E2A;&#x540D;&#x79F0;/&#x503C; name-value &#x5BF9;&#x3002;&#x540D;&#x79F0;&#x548C;&#x503C;&#x90FD;&#x88AB;&#x89C6;&#x4E3A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x4E0D;&#x900F;&#x660E;&#x5E8F;&#x5217;&#x3002;</p>
<p>Dynamic Table&#xFF1A;&#x52A8;&#x6001;&#x8868;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%8A%A8%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.2 &#x8282;</a>&#xFF09;&#x662F;&#x5C06;&#x5B58;&#x50A8;&#x7684; header &#x5B57;&#x6BB5;&#x4E0E;&#x7D22;&#x5F15;&#x503C;&#x76F8;&#x5173;&#x8054;&#x7684;&#x8868;&#x3002;&#x8BE5;&#x8868;&#x662F;&#x52A8;&#x6001;&#x7684;&#xFF0C;&#x5E76;&#x4E14;&#x7279;&#x5B9A;&#x4E8E;&#x7F16;&#x7801;&#x6216;&#x89E3;&#x7801;&#x4E0A;&#x4E0B;&#x6587;&#x3002;</p>
<p>Static Table&#xFF1A;&#x9759;&#x6001;&#x8868;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%9D%99%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.1 &#x8282;</a>&#xFF09;&#x662F;&#x5C06;&#x7ECF;&#x5E38;&#x51FA;&#x73B0;&#x7684; header &#x5B57;&#x6BB5;&#x4E0E;&#x7D22;&#x5F15;&#x503C;&#x9759;&#x6001;&#x5173;&#x8054;&#x7684;&#x8868;&#x3002;&#x8BE5;&#x8868;&#x662F;&#x6709;&#x5E8F;&#x7684;&#xFF0C;&#x53EA;&#x8BFB;&#x7684;&#xFF0C;&#x59CB;&#x7EC8;&#x53EF;&#x8BBF;&#x95EE;&#x7684;&#xFF0C;&#x5E76;&#x4E14;&#x53EF;&#x4EE5;&#x5728;&#x6240;&#x6709;&#x7F16;&#x7801;&#x6216;&#x89E3;&#x7801;&#x4E0A;&#x4E0B;&#x6587;&#x4E4B;&#x95F4;&#x5171;&#x4EAB;&#x3002;</p>
<p>Header List&#xFF1A;header &#x5217;&#x8868;&#x662F; header &#x5B57;&#x6BB5;&#x7684;&#x6709;&#x5E8F;&#x96C6;&#x5408;&#xFF0C;&#x8FD9;&#x4E9B; header &#x5B57;&#x6BB5;&#x7ECF;&#x8FC7;&#x8054;&#x5408;&#x7F16;&#x7801;&#xFF0C;&#x53EF;&#x4EE5;&#x5305;&#x542B;&#x91CD;&#x590D;&#x7684; header &#x5B57;&#x6BB5;&#x3002;HTTP/2 header &#x5757;&#x4E2D;&#x5305;&#x542B;&#x7684; header &#x5B57;&#x6BB5;&#x7684;&#x5B8C;&#x6574;&#x5217;&#x8868;&#x662F; header &#x5217;&#x8868;&#x3002;</p>
<p>Header Field Representation&#xFF1A;header &#x5B57;&#x6BB5;&#x53EF;&#x4EE5;&#x7F16;&#x7801;&#x5F62;&#x5F0F;&#x8868;&#x793A;&#x4E3A;&#x5B57;&#x9762;&#x6216;&#x7D22;&#x5F15;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#4-header-field-representation">&#x7B2C; 2.4 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>Header Block&#xFF1A;header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x6709;&#x5E8F;&#x5217;&#x8868;&#xFF0C;&#x89E3;&#x7801;&#x540E;&#x4F1A;&#x4EA7;&#x751F;&#x5B8C;&#x6574;&#x7684; header &#x5217;&#x8868;&#x3002;</p>
<h2 id>&#x4E8C;. &#x538B;&#x7F29;&#x8FC7;&#x7A0B;&#x6982;&#x8FF0;</h2>
<p>&#x672C;&#x89C4;&#x8303;&#x672A;&#x63CF;&#x8FF0;&#x7F16;&#x7801;&#x5668;&#x7684;&#x5177;&#x4F53;&#x7B97;&#x6CD5;&#x3002;&#x76F8;&#x53CD;&#xFF0C;&#x5B83;&#x7CBE;&#x786E;&#x5B9A;&#x4E49;&#x4E86;&#x89E3;&#x7801;&#x5668;&#x7684;&#x9884;&#x671F;&#x5DE5;&#x4F5C;&#x65B9;&#x5F0F;&#xFF0C;&#x4ECE;&#x800C;&#x5141;&#x8BB8;&#x7F16;&#x7801;&#x5668;&#x4EA7;&#x751F;&#x6B64;&#x5B9A;&#x4E49;&#x5141;&#x8BB8;&#x7684;&#x4EFB;&#x4F55;&#x7F16;&#x7801;&#x3002;</p>
<h3 id="1headerlistordering">1. Header List Ordering</h3>
<p>HPACK &#x4FDD;&#x7559; header &#x5217;&#x8868;&#x5185; header &#x5B57;&#x6BB5;&#x7684;&#x987A;&#x5E8F;&#x3002;&#x7F16;&#x7801;&#x5668;&#x5FC5;&#x987B;&#x6839;&#x636E;&#x5176;&#x5728;&#x539F;&#x59CB; header &#x5217;&#x8868;&#x4E2D;&#x7684;&#x987A;&#x5E8F;&#x5BF9; header &#x5757;&#x4E2D;&#x7684; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#x3002;&#x89E3;&#x7801;&#x5668;&#x5FC5;&#x987B;&#x6839;&#x636E;&#x5176;&#x5728; header &#x5757;&#x4E2D;&#x7684;&#x987A;&#x5E8F;&#x5BF9;&#x5DF2;&#x89E3;&#x7801; header &#x5217;&#x8868;&#x4E2D;&#x7684; header &#x5B57;&#x6BB5;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#x3002;</p>
<h3 id="2encodinganddecodingcontexts">2. Encoding and Decoding Contexts</h3>
<p>&#x4E3A;&#x4E86;&#x89E3;&#x538B;&#x7F29; header &#x5757;&#xFF0C;&#x89E3;&#x7801;&#x5668;&#x53EA;&#x9700;&#x8981;&#x7EF4;&#x62A4;&#x4E00;&#x4E2A;&#x52A8;&#x6001;&#x8868;&#xFF08;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%8A%A8%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.2 &#x8282;</a>&#xFF09;&#x4F5C;&#x4E3A;&#x89E3;&#x7801;&#x4E0A;&#x4E0B;&#x6587;&#x3002;&#x4E0D;&#x9700;&#x8981;&#x5176;&#x4ED6;&#x52A8;&#x6001;&#x72B6;&#x6001;&#x3002;</p>
<p>&#x5F53;&#x7528;&#x4E8E;&#x53CC;&#x5411;&#x901A;&#x4FE1;&#x65F6;&#xFF08;&#x4F8B;&#x5982;&#x5728; HTT P&#x4E2D;&#xFF09;&#xFF0C;&#x7531;&#x7AEF;&#x70B9;&#x7EF4;&#x62A4;&#x7684;&#x7F16;&#x7801;&#x548C;&#x89E3;&#x7801;&#x52A8;&#x6001;&#x8868;&#x662F;&#x5B8C;&#x5168;&#x72EC;&#x7ACB;&#x7684;&#xFF0C;&#x5373;&#x8BF7;&#x6C42;&#x548C;&#x54CD;&#x5E94;&#x52A8;&#x6001;&#x8868;&#x662F;&#x5206;&#x5F00;&#x7684;&#x3002;</p>
<h3 id="3indexingtables">3. Indexing Tables</h3>
<p>HPACK &#x4F7F;&#x7528;&#x4E24;&#x4E2A;&#x8868;&#x5C06; header &#x5B57;&#x6BB5;&#x4E0E;&#x7D22;&#x5F15;&#x76F8;&#x5173;&#x8054;&#x3002;&#x9759;&#x6001;&#x8868;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%9D%99%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.1 &#x8282;</a>&#xFF09;&#x662F;&#x9884;&#x5B9A;&#x4E49;&#x7684;&#xFF0C;&#x5E76;&#x5305;&#x542B;&#x516C;&#x5171; header &#x5B57;&#x6BB5;&#xFF08;&#x5176;&#x4E2D;&#x5927;&#x591A;&#x6570;&#x5E26;&#x6709;&#x7A7A;&#x503C;&#xFF09;&#x3002;&#x52A8;&#x6001;&#x8868;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%8A%A8%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.2 &#x8282;</a>&#xFF09;&#x662F;&#x52A8;&#x6001;&#x7684;&#xFF0C;&#x7F16;&#x7801;&#x5668;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5B83;&#x6765;&#x7D22;&#x5F15;&#x5DF2;&#x7F16;&#x7801; header &#x5217;&#x8868;&#x4E2D;&#x91CD;&#x590D;&#x7684; header &#x5B57;&#x6BB5;&#x3002;</p>
<p>&#x8FD9;&#x4E24;&#x4E2A;&#x8868;&#x88AB;&#x5408;&#x5E76;&#x5230;&#x4E00;&#x4E2A;&#x7528;&#x4E8E;&#x5B9A;&#x4E49;&#x7D22;&#x5F15;&#x503C;&#x7684;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#x4E2D;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E7%B4%A2%E5%BC%95%E5%9C%B0%E5%9D%80%E7%A9%BA%E9%97%B4">&#x7B2C; 2.3.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<h3 id="1">(1) &#x9759;&#x6001;&#x8868;</h3>
<p>&#x9759;&#x6001;&#x8868;&#x7531; header &#x5B57;&#x6BB5;&#x7684;&#x9884;&#x5B9A;&#x4E49;&#x9759;&#x6001;&#x5217;&#x8868;&#x7EC4;&#x6210;&#x3002;&#x5176;&#x6761;&#x76EE;&#x5728;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#%E4%B8%80-%E9%9D%99%E6%80%81%E8%A1%A8%E5%AE%9A%E4%B9%89">&#x9644;&#x5F55; A</a> &#x4E2D;&#x5B9A;&#x4E49;&#x3002;</p>
<h3 id="2">(2) &#x52A8;&#x6001;&#x8868;</h3>
<p>&#x52A8;&#x6001;&#x8868;&#x5305;&#x542B;&#x4EE5;<strong>&#x5148;&#x8FDB;&#x5148;&#x51FA;</strong>&#x7684;&#x987A;&#x5E8F;&#x7EF4;&#x62A4;&#x7684; header &#x5B57;&#x6BB5;&#x5217;&#x8868;&#x3002;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x7B2C;&#x4E00;&#x4E2A;&#x6761;&#x76EE;&#x548C;&#x6700;&#x65B0;&#x6761;&#x76EE;&#x5728;&#x6700;&#x4F4E;&#x7D22;&#x5F15;&#x5904;&#xFF0C;&#x800C;&#x52A8;&#x6001;&#x8868;&#x7684;&#x6700;&#x65E7;&#x6761;&#x76EE;&#x5728;&#x6700;&#x9AD8;&#x7D22;&#x5F15;&#x5904;&#x3002;</p>
<p>&#x52A8;&#x6001;&#x8868;&#x6700;&#x521D;&#x662F;&#x7A7A;&#x7684;&#x3002;&#x5F53;&#x6BCF;&#x4E2A; header &#x5757;&#x88AB;&#x89E3;&#x538B;&#x7F29;&#x65F6;&#xFF0C;&#x5C06;&#x6DFB;&#x52A0;&#x6761;&#x76EE;&#x3002;&#x52A8;&#x6001;&#x8868;&#x53EF;&#x4EE5;&#x5305;&#x542B;&#x91CD;&#x590D;&#x7684;&#x6761;&#x76EE;&#xFF08;&#x5373;&#xFF0C;&#x5177;&#x6709;&#x76F8;&#x540C;&#x540D;&#x79F0;&#x548C;&#x76F8;&#x540C;&#x503C;&#x7684;&#x6761;&#x76EE;&#xFF09;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x89E3;&#x7801;&#x5668;&#x4E0D;&#x5F97;&#x5C06;&#x91CD;&#x590D;&#x7684;&#x6761;&#x76EE;&#x89C6;&#x4E3A;&#x9519;&#x8BEF;&#x3002;</p>
<p>&#x7F16;&#x7801;&#x5668;&#x51B3;&#x5B9A;&#x5982;&#x4F55;&#x66F4;&#x65B0;&#x52A8;&#x6001;&#x8868;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x63A7;&#x5236;&#x52A8;&#x6001;&#x8868;&#x4F7F;&#x7528;&#x591A;&#x5C11;&#x5185;&#x5B58;&#x3002;&#x4E3A;&#x4E86;&#x9650;&#x5236;&#x89E3;&#x7801;&#x5668;&#x7684;&#x5B58;&#x50A8;&#x9700;&#x6C42;&#xFF0C;&#x52A8;&#x6001;&#x8868;&#x7684; size &#x53D7;&#x5230;&#x4E25;&#x683C;&#x9650;&#x5236;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-maximum-table-size">&#x7B2C; 4.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x89E3;&#x7801;&#x5668;&#x5728;&#x5904;&#x7406; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5217;&#x8868;&#x65F6;&#x66F4;&#x65B0;&#x52A8;&#x6001;&#x8868;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-header-field-representation-processing">&#x7B2C; 3.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<h3 id="3">(3) &#x7D22;&#x5F15;&#x5730;&#x5740;&#x7A7A;&#x95F4;</h3>
<p>&#x9759;&#x6001;&#x8868;&#x548C;&#x52A8;&#x6001;&#x8868;&#x88AB;&#x7EC4;&#x5408;&#x5230;&#x5355;&#x4E2A;&#x7D22;&#x5F15;&#x5730;&#x5740;&#x7A7A;&#x95F4;&#x4E2D;&#x3002;</p>
<p>&#x5728; 1 &#x548C;&#x9759;&#x6001;&#x8868;&#x7684;&#x957F;&#x5EA6;&#xFF08;&#x5305;&#x62EC;&#x5728;&#x5185;&#xFF09;&#x4E4B;&#x95F4;&#x7684;&#x7D22;&#x5F15;&#x662F;&#x6307;&#x9759;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E9%9D%99%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.1 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x4E25;&#x683C;&#x5927;&#x4E8E;&#x9759;&#x6001;&#x8868;&#x957F;&#x5EA6;&#x7684;&#x7D22;&#x5F15;&#x662F;&#x6307;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E5%8A%A8%E6%80%81%E8%A1%A8">&#x7B2C; 2.3.2 &#x8282;</a>&#xFF09;&#x3002; &#x51CF;&#x53BB;&#x9759;&#x6001;&#x8868;&#x7684;&#x957F;&#x5EA6;&#x5373;&#x53EF;&#x627E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x7684;&#x7D22;&#x5F15;&#x3002;</p>
<p>&#x4E25;&#x683C;&#x5927;&#x4E8E;&#x4E24;&#x4E2A;&#x8868;&#x7684;&#x957F;&#x5EA6;&#x4E4B;&#x548C;&#x7684;&#x7D22;&#x5F15;&#x5FC5;&#x987B;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;</p>
<p>&#x5BF9;&#x4E8E; s &#x7684;&#x9759;&#x6001;&#x8868; size &#x548C; k &#x7684;&#x52A8;&#x6001;&#x8868; size &#xFF0C;&#x4E0B;&#x56FE;&#x663E;&#x793A;&#x4E86;&#x6574;&#x4E2A;&#x6709;&#x6548;&#x7D22;&#x5F15;&#x5730;&#x5740;&#x7A7A;&#x95F4;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_3_.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<h3 id="4headerfieldrepresentation">4. Header Field Representation</h3>
<p>&#x7F16;&#x7801;&#x7684; header &#x5B57;&#x6BB5;&#x53EF;&#x4EE5;&#x8868;&#x793A;&#x4E3A;&#x7D22;&#x5F15;&#x6216;&#x5B57;&#x9762;&#x3002;</p>
<p>&#x6709;&#x7D22;&#x5F15;&#x7684;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x5B9A;&#x4E49;&#x4E86;&#x4E00;&#x4E2A; header &#x5B57;&#x6BB5;&#xFF0C;&#x4F5C;&#x4E3A;&#x5BF9;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x6761;&#x76EE;&#x7684;&#x5F15;&#x7528;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E7%B4%A2%E5%BC%95-header-%E5%AD%97%E6%AE%B5%E8%A1%A8%E7%A4%BA">&#x7B2C; 6.1 &#x8282;</a>&#xFF09;&#xFF1B;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x901A;&#x8FC7;&#x6307;&#x5B9A;&#x5176; name &#x548C; value &#x6765;&#x5B9A;&#x4E49; header &#x5B57;&#x6BB5;&#x3002;header &#x5B57;&#x6BB5; name &#x53EF;&#x4EE5;&#x7528;&#x5B57;&#x9762;&#x5F62;&#x5F0F;&#x8868;&#x793A;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x4F5C;&#x4E3A;&#x5BF9;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x6761;&#x76EE;&#x7684;&#x5F15;&#x7528;&#x3002;header &#x5B57;&#x6BB5; value &#x6309;&#x5B57;&#x9762;&#x8868;&#x793A;&#x3002;&#x5B9A;&#x4E49;&#x4E86;&#x4E09;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#xFF1A;</p>
<ul>
<li>
<p>&#x5728;&#x52A8;&#x6001;&#x8868;&#x7684;&#x5F00;&#x5934;&#x6DFB;&#x52A0; header &#x5B57;&#x6BB5;&#x4F5C;&#x4E3A;&#x65B0;&#x6761;&#x76EE;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E5%B8%A6%E5%A2%9E%E9%87%8F%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">&#x7B2C; 6.2.1 &#x8282;</a>&#xFF09;&#x3002;</p>
</li>
<li>
<p>&#x4E0D;&#x5C06; header &#x5B57;&#x6BB5;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E4%B8%8D%E5%B8%A6%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">&#x7B2C; 6.2.2 &#x8282;</a>&#xFF09;&#x3002;</p>
</li>
<li>
<p>&#x4E0D;&#x5C06; header &#x5B57;&#x6BB5;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#xFF0C;&#x53E6;&#x5916;&#x89C4;&#x5B9A;&#x8BE5; header &#x5B57;&#x6BB5;&#x59CB;&#x7EC8;&#x4F7F;&#x7528;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x5728;&#x7531;&#x4E2D;&#x4ECB;&#x7A0B;&#x5E8F;&#x91CD;&#x65B0;&#x7F16;&#x7801;&#x65F6;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E4%BB%8E%E4%B8%8D%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">&#x7B2C; 6.2.3 &#x8282;</a>&#xFF09;&#x3002;&#x6B64;&#x8868;&#x793A;&#x65E8;&#x5728;&#x4FDD;&#x62A4; header &#x5B57;&#x6BB5;&#x503C;&#xFF0C;&#x8FD9;&#x4E9B; header &#x5B57;&#x6BB5;&#x503C;&#x901A;&#x8FC7;&#x538B;&#x7F29;&#x4EE5;&#x540E;&#x5C31;&#x4E0D;&#x4F1A;&#x53D7;&#x5230;&#x5A01;&#x80C1;&#xFF08;&#x6709;&#x5173;&#x66F4;&#x591A;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E6%B0%B8%E4%B8%8D%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2">&#x7B2C; 7.1.3 &#x8282;</a>&#xFF09;&#x3002;</p>
</li>
</ul>
<p>&#x4E3A;&#x4E86;&#x4FDD;&#x62A4;&#x654F;&#x611F;&#x7684; header &#x5B57;&#x6BB5;&#x503C;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E6%8E%A2%E6%B5%8B%E5%8A%A8%E6%80%81%E8%A1%A8%E7%8A%B6%E6%80%81">&#x7B2C; 7.1 &#x8282;</a>&#xFF09;&#xFF0C;&#x53EF;&#x4EE5;&#x4ECE;&#x5B89;&#x5168;&#x8003;&#x8651;&#x51FA;&#x53D1;&#x9009;&#x62E9;&#x8FD9;&#x4E9B;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x4E4B;&#x4E00;&#x3002;</p>
<p>header &#x5B57;&#x6BB5; name &#x6216; header &#x5B57;&#x6BB5; value &#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x53EF;&#x4EE5;&#x76F4;&#x63A5;&#x6216;&#x4F7F;&#x7528;&#x9759;&#x6001;&#x970D;&#x592B;&#x66FC;&#x4EE3;&#x7801;&#x5BF9;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x5E8F;&#x5217;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;</p>
<h2 id="header">&#x4E09;. header &#x5757;&#x7684;&#x89E3;&#x7801;</h2>
<h3 id="1headerblockprocessing">1. Header Block Processing</h3>
<p>&#x89E3;&#x7801;&#x5668;&#x987A;&#x5E8F;&#x5904;&#x7406; header &#x5757;&#x4EE5;&#x91CD;&#x5EFA;&#x539F;&#x59CB; header &#x5217;&#x8868;&#x3002;</p>
<p>header &#x5757;&#x662F; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x4E32;&#x8054;&#x3002;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E7%B4%A2%E5%BC%95-header-%E5%AD%97%E6%AE%B5%E8%A1%A8%E7%A4%BA">&#x7B2C; 6 &#x8282;</a>&#x4E2D;&#x4ECB;&#x7ECD;&#x4E86;&#x4E0D;&#x540C;&#x7684;&#x53EF;&#x80FD;&#x7684; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x3002;</p>
<p>&#x4E00;&#x65E6; header &#x5B57;&#x6BB5;&#x88AB;&#x89E3;&#x7801;&#x5E76;&#x6DFB;&#x52A0;&#x5230;&#x91CD;&#x5EFA;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#xFF0C;&#x5C31;&#x4E0D;&#x80FD;&#x5220;&#x9664; header &#x5B57;&#x6BB5;&#x3002;&#x6DFB;&#x52A0;&#x5230; header &#x5217;&#x8868;&#x7684; header &#x5B57;&#x6BB5;&#x53EF;&#x4EE5;&#x5B89;&#x5168;&#x5730;&#x4F20;&#x9012;&#x5230;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x3002;</p>
<p>&#x901A;&#x8FC7;&#x5C06;&#x7ED3;&#x679C; header &#x5B57;&#x6BB5;&#x4F20;&#x9012;&#x7ED9;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#xFF0C;&#x9664;&#x4E86;&#x52A8;&#x6001;&#x8868;&#x6240;&#x9700;&#x7684;&#x5185;&#x5B58;&#x5916;&#xFF0C;&#x8FD8;&#x9700;&#x8981;&#x4F7F;&#x7528;&#x6700;&#x5C11;&#x7684;&#x4E34;&#x65F6;&#x5185;&#x5B58;&#x6765;&#x5B9E;&#x73B0;&#x89E3;&#x7801;&#x5668;&#x3002;</p>
<h3 id="2headerfieldrepresentationprocessing">2. Header Field Representation Processing</h3>
<p>&#x5728;&#x672C;&#x8282;&#x4E2D;&#x5B9A;&#x4E49;&#x4E86;&#x5BF9; header &#x5757;&#x8FDB;&#x884C;&#x5904;&#x7406;&#x4EE5;&#x83B7;&#x5F97; header &#x5217;&#x8868;&#x7684;&#x8FC7;&#x7A0B;&#x3002;&#x4E3A;&#x4E86;&#x786E;&#x4FDD;&#x89E3;&#x7801;&#x5C06;&#x6210;&#x529F;&#x4EA7;&#x751F; header &#x5217;&#x8868;&#xFF0C;&#x89E3;&#x7801;&#x5668;&#x5FC5;&#x987B;&#x9075;&#x5B88;&#x4EE5;&#x4E0B;&#x89C4;&#x5219;&#x3002;</p>
<p>header &#x5757;&#x4E2D;&#x5305;&#x542B;&#x7684;&#x6240;&#x6709; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x5C06;&#x6309;&#x7167;&#x5B83;&#x4EEC;&#x51FA;&#x73B0;&#x7684;&#x987A;&#x5E8F;&#x8FDB;&#x884C;&#x5904;&#x7406;&#xFF0C;&#x5982;&#x4E0B;&#x6240;&#x793A;&#x3002;&#x6709;&#x5173;&#x5404;&#x79CD; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x683C;&#x5F0F;&#x7684;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#x4EE5;&#x53CA;&#x4E00;&#x4E9B;&#x5176;&#x4ED6;&#x5904;&#x7406;&#x6307;&#x4EE4;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E7%B4%A2%E5%BC%95-header-%E5%AD%97%E6%AE%B5%E8%A1%A8%E7%A4%BA">&#x7B2C; 6 &#x8282;</a>&#x3002;</p>
<p>_indexed representation_&#x9700;&#x8981;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x64CD;&#x4F5C;&#xFF1A;</p>
<ul>
<li>&#x4E0E;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x88AB;&#x5F15;&#x7528;&#x6761;&#x76EE;&#x76F8;&#x5BF9;&#x5E94;&#x7684; header &#x5B57;&#x6BB5;&#x88AB;&#x9644;&#x52A0;&#x5230;&#x89E3;&#x7801;&#x540E;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#x3002;</li>
</ul>
<p>&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x672A;&#x6DFB;&#x52A0;&#x7684; &#x201C;_literal representation_&#x201D; &#x9700;&#x8981;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x64CD;&#x4F5C;&#xFF1A;</p>
<ul>
<li>header &#x5B57;&#x6BB5;&#x88AB;&#x9644;&#x52A0;&#x5230;&#x89E3;&#x7801;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#x3002;</li>
</ul>
<p>&#x5728;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x6DFB;&#x52A0;&#x4E86; &#x201C;_literal representation_&#x201D; &#x9700;&#x8981;&#x6267;&#x884C;&#x4EE5;&#x4E0B;&#x64CD;&#x4F5C;&#xFF1A;</p>
<ul>
<li>header &#x5B57;&#x6BB5;&#x88AB;&#x9644;&#x52A0;&#x5230;&#x89E3;&#x7801;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#x3002;</li>
<li>header &#x5B57;&#x6BB5;&#x63D2;&#x5165;&#x5728;&#x52A8;&#x6001;&#x8868;&#x7684;&#x5F00;&#x5934;&#x3002;&#x8FD9;&#x79CD;&#x63D2;&#x5165;&#x53EF;&#x80FD;&#x5BFC;&#x81F4;&#x9A71;&#x9010;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x5148;&#x524D;&#x6761;&#x76EE;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#4-entry-eviction-when-adding-new-entries">&#x7B2C; 4.4 &#x8282;</a>&#xFF09;&#x3002;</li>
</ul>
<h2 id>&#x56DB;. &#x52A8;&#x6001;&#x8868;&#x7BA1;&#x7406;</h2>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_2.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p>&#x4E3A;&#x4E86;&#x9650;&#x5236;&#x89E3;&#x7801;&#x5668;&#x7AEF;&#x7684;&#x5B58;&#x50A8;&#x8981;&#x6C42;&#xFF0C;&#x52A8;&#x6001;&#x8868;&#x7684; size &#x53D7;&#x5230;&#x9650;&#x5236;&#x3002;</p>
<blockquote>
<p>&#x52A8;&#x6001;&#x5B57;&#x5178;&#x4E0A;&#x4E0B;&#x6587;&#x6709;&#x5173;&#xFF0C;&#x9700;&#x8981;&#x4E3A;&#x6BCF;&#x4E2A; HTTP/2 &#x8FDE;&#x63A5;&#x7EF4;&#x62A4;&#x4E0D;&#x540C;&#x7684;&#x5B57;&#x5178;&#x3002;</p>
</blockquote>
<h3 id="1calculatingtablesize">1. Calculating Table Size</h3>
<p>&#x52A8;&#x6001;&#x8868;&#x7684; size &#x662F;&#x5176;&#x8868;&#x9879; size &#x7684;&#x603B;&#x548C;&#x3002;&#x6761;&#x76EE;&#x7684; size &#x662F;&#x5176; name &#x7684;&#x957F;&#x5EA6;&#xFF08;&#x4EE5;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x4E3A;&#x5355;&#x4F4D;&#xFF09;&#xFF08;&#x5982;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#x4E2D;&#x6240;&#x5B9A;&#x4E49;&#xFF09;&#xFF0C;value &#x7684;&#x957F;&#x5EA6;&#xFF08;&#x4EE5;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x4E3A;&#x5355;&#x4F4D;&#xFF09;&#x548C; 32 &#x7684;&#x603B;&#x548C;&#x3002;&#x6761;&#x76EE;&#x7684; size &#x662F;&#x4F7F;&#x7528;&#x5176; name &#x548C; value &#x7684;&#x957F;&#x5EA6;&#x6765;&#x8BA1;&#x7B97;&#x7684;&#xFF0C;&#x800C;&#x65E0;&#x9700;&#x5E94;&#x7528;&#x4EFB;&#x4F55;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x3002;</p>
<blockquote>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x989D;&#x5916;&#x7684; 32 &#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x8BF4;&#x660E;&#x4E86;&#x4E0E;&#x6761;&#x76EE;&#x76F8;&#x5173;&#x7684;&#x4F30;&#x8BA1;&#x5F00;&#x9500;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x4F7F;&#x7528;&#x4E24;&#x4E2A; 64 &#x4F4D;&#x6307;&#x9488;&#x5F15;&#x7528;&#x6761;&#x76EE;&#x7684; name &#x548C; value &#x4EE5;&#x53CA;&#x4F7F;&#x7528;&#x4E24;&#x4E2A; 64 &#x4F4D;&#x6574;&#x6570;&#x6765;&#x8BA1;&#x6570;&#x5BF9;&#x8BE5; name &#x548C; value &#x7684;&#x5F15;&#x7528;&#x6B21;&#x6570;&#x7684;&#x6761;&#x76EE;&#x7ED3;&#x6784;&#xFF0C;&#x8BE5;&#x6570;&#x636E;&#x7ED3;&#x6784;&#x5C06;&#x5177;&#x6709; 32 &#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x5F00;&#x9500;&#x3002;(64*2*2/8=32 &#x5B57;&#x8282;)</p>
</blockquote>
<h3 id="2maximumtablesize">2. Maximum Table Size</h3>
<p>&#x4F7F;&#x7528; HPACK &#x7684;&#x534F;&#x8BAE;&#x786E;&#x5B9A;&#x5141;&#x8BB8;&#x7F16;&#x7801;&#x5668;&#x7528;&#x4E8E;&#x52A8;&#x6001;&#x8868;&#x7684;&#x6700;&#x5927; size &#x3002;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x6B64;&#x503C;&#x7531; SETTINGS_HEADER_TABLE_SIZE &#x8BBE;&#x7F6E;&#x6765;&#x786E;&#x5B9A;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#2-defined-settings-parameters">[HTTP2]&#x7684; 6.5.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x7F16;&#x7801;&#x5668;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4F7F;&#x7528;&#x5C0F;&#x4E8E;&#x6B64;&#x6700;&#x5927; size &#x7684;&#x5BB9;&#x91CF;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%A7%E5%B0%8F%E6%9B%B4%E6%96%B0">&#x7B2C; 6.3 &#x8282;</a>&#xFF09;&#xFF0C;&#x4F46;&#x662F;&#x6240;&#x9009; size &#x5FC5;&#x987B;&#x4FDD;&#x6301;&#x5C0F;&#x4E8E;&#x6216;&#x7B49;&#x4E8E;&#x534F;&#x8BAE;&#x8BBE;&#x7F6E;&#x7684;&#x6700;&#x5927;&#x5BB9;&#x91CF;&#x3002;</p>
<p>&#x52A8;&#x6001;&#x8868;&#x6700;&#x5927; size &#x7684;&#x53D8;&#x5316;&#x662F;&#x56E0;&#x4E3A;&#x52A8;&#x6001;&#x8868; size &#x7684;&#x66F4;&#x65B0;&#x5F15;&#x8D77;&#x7684;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%A7%E5%B0%8F%E6%9B%B4%E6%96%B0">&#x7B2C; 6.3 &#x8282;</a>&#xFF09;&#x3002;&#x52A8;&#x6001;&#x8868; size &#x66F4;&#x65B0;&#x5FC5;&#x987B;&#x5728;&#x66F4;&#x6539;&#x52A8;&#x6001;&#x8868; size &#x4E4B;&#x540E;&#x7684;&#x7B2C;&#x4E00;&#x4E2A; header &#x5757;&#x7684;&#x5F00;&#x5934;&#x8FDB;&#x884C;&#x3002;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x8FD9;&#x9075;&#x5FAA; settings &#x7684;&#x786E;&#x8BA4;&#xFF08;&#x8BF7;&#x53C2;&#x9605; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#3-settings-synchronization">[HTTP2]&#x7684; 6.5.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x5728;&#x4F20;&#x8F93;&#x4E24;&#x4E2A; header &#x5757;&#x4E4B;&#x95F4;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x53D1;&#x751F;&#x591A;&#x6B21;&#x6700;&#x5927;&#x8868; size &#x7684;&#x66F4;&#x65B0;&#x3002;&#x5982;&#x679C;&#x5728;&#x6B64;&#x95F4;&#x9694;&#x4E2D;&#xFF0C;&#x8FD9;&#x4E2A; size &#x66F4;&#x6539;&#x4E00;&#x6B21;&#x4EE5;&#x4E0A;&#x7684;&#x8BDD;&#xFF0C;&#x90A3;&#x4E48;&#x5C31;&#x5FC5;&#x987B;&#x5728;&#x52A8;&#x6001;&#x8868; size &#x66F4;&#x65B0;&#x4E2D;&#xFF0C;&#x7528;&#x4FE1;&#x53F7;&#x901A;&#x77E5;&#x5728;&#x8BE5;&#x95F4;&#x9694;&#x4E2D;&#x51FA;&#x73B0;&#x7684;&#xFF0C;&#x6700;&#x5C0F;&#x7684;&#x6700;&#x5927;&#x8868; size &#x3002;&#x4E00;&#x5B9A;&#x4F1A;&#x53D1;&#x51FA;&#x6700;&#x7EC8;&#x6700;&#x5927; size &#x7684;&#x4FE1;&#x53F7;&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4;&#x6700;&#x591A;&#x4E24;&#x4E2A;&#x52A8;&#x6001;&#x8868; size &#x7684;&#x66F4;&#x65B0;&#x3002;&#x8FD9;&#x6837;&#x53EF;&#x786E;&#x4FDD;&#x89E3;&#x7801;&#x5668;&#x80FD;&#x591F;&#x57FA;&#x4E8E;&#x52A8;&#x6001;&#x8868; size &#x7684;&#x51CF;&#x5C0F;&#x6267;&#x884C;&#x9010;&#x51FA;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-entry-eviction-when-dynamic-table-size-changes">&#x7B2C; 4.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x4F7F;&#x7528;&#x6B64;&#x673A;&#x5236;&#x901A;&#x8FC7;&#x5C06;&#x6700;&#x5927; size &#x8BBE;&#x7F6E;&#x4E3A; 0&#xFF0C;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5B8C;&#x5168;&#x6E05;&#x9664;&#x6761;&#x76EE;&#xFF0C;&#x7136;&#x540E;&#x53EF;&#x4EE5;&#x5C06;&#x5176;&#x6062;&#x590D;&#x3002;</p>
<blockquote>
<p>HTTP/2 &#x63D0;&#x5021;&#x4F7F;&#x7528;&#x5C3D;&#x53EF;&#x80FD;&#x5C11;&#x7684;&#x8FDE;&#x63A5;&#x6570;&#xFF0C;&#x5934;&#x90E8;&#x538B;&#x7F29;&#x662F;&#x5176;&#x4E2D;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x539F;&#x56E0;&#xFF1A;&#x5728;&#x540C;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#x4E0A;&#x4EA7;&#x751F;&#x7684;&#x8BF7;&#x6C42;&#x548C;&#x54CD;&#x5E94;&#x8D8A;&#x591A;&#xFF0C;&#x52A8;&#x6001;&#x5B57;&#x5178;&#x7D2F;&#x79EF;&#x7684;&#x8D8A;&#x5168;&#xFF0C;&#x5934;&#x90E8;&#x538B;&#x7F29;&#x7684;&#x6548;&#x679C;&#x5C31;&#x8D8A;&#x597D;&#x3002;</p>
</blockquote>
<h3 id="3entryevictionwhendynamictablesizechanges">3. Entry Eviction When Dynamic Table Size Changes</h3>
<p>&#x53EA;&#x8981;&#x51CF;&#x5C0F;&#x4E86;&#x52A8;&#x6001;&#x8868;&#x7684;&#x6700;&#x5927; size&#xFF0C;&#x5C31;&#x4F1A;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x7684;&#x672B;&#x5C3E;&#x9010;&#x51FA;&#x6761;&#x76EE;&#xFF0C;&#x76F4;&#x5230;&#x52A8;&#x6001;&#x8868;&#x7684; size &#x5C0F;&#x4E8E;&#x6216;&#x7B49;&#x4E8E;&#x6700;&#x5927; size &#x4E3A;&#x6B62;&#x3002;</p>
<h3 id="4entryevictionwhenaddingnewentries">4. Entry Eviction When Adding New Entries</h3>
<p>&#x5728;&#x5C06;&#x65B0;&#x6761;&#x76EE;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E4B;&#x524D;&#xFF0C;&#x5C06;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x7684;&#x672B;&#x5C3E;&#x9010;&#x51FA;&#x6761;&#x76EE;&#xFF0C;&#x76F4;&#x5230;&#x52A8;&#x6001;&#x8868;&#x7684; size &#x5C0F;&#x4E8E;&#x6216;&#x7B49;&#x4E8E;&#xFF08;&#x6700;&#x5927; size -&#x65B0;&#x6761;&#x76EE;&#x5927;&#x5C0F;&#xFF09;&#x6216;&#x76F4;&#x5230;&#x8868;&#x4E3A;&#x7A7A;&#x3002;</p>
<p>&#x5982;&#x679C;&#x65B0;&#x6761;&#x76EE;&#x7684; size &#x5C0F;&#x4E8E;&#x6216;&#x7B49;&#x4E8E;&#x6700;&#x5927; size&#xFF0C;&#x5219;&#x4F1A;&#x5C06;&#x8BE5;&#x6761;&#x76EE;&#x6DFB;&#x52A0;&#x5230;&#x8868;&#x4E2D;&#x3002; &#x5C1D;&#x8BD5;&#x6DFB;&#x52A0;&#x5927;&#x4E8E;&#x6700;&#x5927; size &#x7684;&#x6761;&#x76EE;&#x4E0D;&#x662F;&#x9519;&#x8BEF;&#xFF1B;&#x5C1D;&#x8BD5;&#x6DFB;&#x52A0;&#x5927;&#x4E8E;&#x6700;&#x5927; size &#x7684;&#x6761;&#x76EE;&#x4F1A;&#x5BFC;&#x81F4;&#x8BE5;&#x8868;&#x6E05;&#x7A7A;&#x6240;&#x6709;&#x73B0;&#x6709;&#x6761;&#x76EE;&#xFF0C;&#x5E76;&#x5BFC;&#x81F4;&#x8868;&#x4E3A;&#x7A7A;&#x3002;</p>
<p>&#x65B0;&#x6761;&#x76EE;&#x53EF;&#x4EE5;&#x5F15;&#x7528;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x6761;&#x76EE; A &#x7684; name&#xFF0C;&#x5F53;&#x5C06;&#x8BE5;&#x65B0;&#x6761;&#x76EE;&#x6DFB;&#x52A0;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x65F6;&#xFF0C;&#x8BE5;&#x6761;&#x76EE; A &#x5C06;&#x88AB;&#x9010;&#x51FA;&#x3002;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x5982;&#x679C;&#x5728;&#x63D2;&#x5165;&#x65B0;&#x6761;&#x76EE;&#x4E4B;&#x524D;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5220;&#x9664;&#x4E86;&#x5F15;&#x7528;&#x6761;&#x76EE;&#xFF0C;&#x5219;&#x5E94;&#x907F;&#x514D;&#x5220;&#x9664;&#x5F15;&#x7528; name&#x3002;</p>
<h2 id>&#x4E94;. &#x57FA;&#x672C;&#x7C7B;&#x578B;&#x8868;&#x793A;</h2>
<p>HPACK &#x7F16;&#x7801;&#x4F7F;&#x7528;&#x4E24;&#x79CD;&#x539F;&#x59CB;&#x7C7B;&#x578B;&#xFF1A;&#x65E0;&#x7B26;&#x53F7;&#x7684;&#x53EF;&#x53D8;&#x957F;&#x5EA6;&#x6574;&#x6570;&#x548C;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x4E32;&#x3002;</p>
<h3 id="1integerrepresentation">1. Integer Representation</h3>
<p>&#x6574;&#x6570;&#x7528;&#x4E8E;&#x8868;&#x793A; name &#x7D22;&#x5F15;&#xFF0C;header &#x5B57;&#x6BB5;&#x7D22;&#x5F15;&#x6216;&#x5B57;&#x7B26;&#x4E32;&#x957F;&#x5EA6;&#x3002;&#x6574;&#x6570;&#x8868;&#x793A;&#x53EF;&#x4EE5;&#x5728;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x5185;&#x7684;&#x4EFB;&#x4F55;&#x4F4D;&#x7F6E;&#x5F00;&#x59CB;&#x3002;&#x4E3A;&#x4E86;&#x4F18;&#x5316;&#x5904;&#x7406;&#xFF0C;&#x6574;&#x6570;&#x8868;&#x793A;&#x603B;&#x662F;&#x5728;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x672B;&#x5C3E;&#x7ED3;&#x675F;&#x3002;</p>
<p>&#x6574;&#x6570;&#x5206;&#x4E3A;&#x4E24;&#x90E8;&#x5206;&#xFF1A;&#x586B;&#x5145;&#x5F53;&#x524D;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x524D;&#x7F00;&#x548C;&#x53EF;&#x9009;&#x7684;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x5217;&#x8868;&#xFF0C;&#x5982;&#x679C;&#x6574;&#x6570;&#x503C;&#x4E0D;&#x9002;&#x5408;&#x8BE5;&#x524D;&#x7F00;&#xFF0C;&#x5219;&#x4F7F;&#x7528;&#x8FD9;&#x4E9B;&#x53EF;&#x9009;&#x7684;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x3002;&#x524D;&#x7F00;&#x7684;&#x4F4D;&#x6570;&#xFF08;&#x79F0;&#x4E3A; N&#xFF09;&#x662F;&#x6574;&#x6570;&#x8868;&#x793A;&#x7684;&#x53C2;&#x6570;&#x3002;</p>
<p>&#x5982;&#x679C;&#x6574;&#x6570;&#x503C;&#x8DB3;&#x591F;&#x5C0F;&#xFF0C;&#x5373;&#x4E25;&#x683C;&#x5C0F;&#x4E8E; 2^N-1&#xFF0C;&#x5219;&#x5C06;&#x5176;&#x7F16;&#x7801;&#x5728; N &#x4F4D;&#x524D;&#x7F00;&#x4E2D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_4.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p>&#x4E0A;&#x56FE;&#x7684;&#x4F8B;&#x5B50;&#x4E2D;&#xFF0C;N = 5&#xFF0C;&#x6240;&#x4EE5;&#x80FD;&#x8868;&#x793A;&#x7684;&#x6700;&#x5927;&#x7684;&#x6574;&#x6570;&#x662F; 2^5-1 = 31</p>
<p>&#x5982;&#x679C;&#x6574;&#x6570;&#x6570;&#x503C;&#x5927;&#x4E8E; 2^N-1&#xFF0C;&#x5219;&#x5C06;&#x524D;&#x7F00;&#x7684;&#x6240;&#x6709;&#x4F4D;&#x8BBE;&#x7F6E;&#x4E3A; 1&#xFF0C;&#x5E76;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x6216;&#x591A;&#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x5217;&#x8868;&#x5BF9;&#x51CF;&#x5C11;&#x4E86; 2^N-1 &#x7684;&#x503C;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#x3002;&#x6BCF;&#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x6700;&#x9AD8;&#x6709;&#x6548;&#x4F4D;&#x7528;&#x4F5C;&#x8FDE;&#x7EED;&#x6807;&#x5FD7;&#xFF1A;&#x9664;&#x4E86;&#x5217;&#x8868;&#x4E2D;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#xFF0C;&#x5176;&#x503C;&#x5747;&#x8BBE;&#x7F6E;&#x4E3A; 1&#x3002;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x5176;&#x4F59;&#x4F4D;&#x7528;&#x4E8E;&#x5BF9;&#x51CF;&#x5C0F;&#x7684;&#x503C;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_5_.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p>&#x4ECE;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x5217;&#x8868;&#x4E2D;&#x89E3;&#x7801;&#x6574;&#x6570;&#x503C;&#x662F;&#x901A;&#x8FC7;&#x53CD;&#x8F6C;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x5728;&#x5217;&#x8868;&#x4E2D;&#x7684;&#x987A;&#x5E8F;&#x5F00;&#x59CB;&#x7684;&#x3002; &#x7136;&#x540E;&#xFF0C;&#x5BF9;&#x4E8E;&#x6BCF;&#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#xFF0C;&#x5C06;&#x5176;&#x6700;&#x9AD8;&#x6709;&#x6548;&#x4F4D;&#x5220;&#x9664;&#x3002;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x5176;&#x4F59;&#x4F4D;&#x88AB;&#x7EA7;&#x8054;&#x8D77;&#x6765;&#xFF0C;&#x7ED3;&#x679C;&#x503C;&#x589E;&#x52A0; 2^N-1 &#x4EE5;&#x83B7;&#x5F97;&#x6574;&#x6570;&#x503C;&#x3002;</p>
<p>&#x524D;&#x7F00; size N &#x59CB;&#x7EC8;&#x5728; 1 &#x5230; 8 &#x4F4D;&#x4E4B;&#x95F4;&#x3002;&#x4ECE;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x8FB9;&#x754C;&#x5F00;&#x59CB;&#x7684;&#x6574;&#x6570;&#x5C06;&#x5177;&#x6709; 8 &#x4F4D;&#x524D;&#x7F00;&#x3002;</p>
<p>&#x8868;&#x793A;&#x6574;&#x6570; I &#x7684;&#x4F2A;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-c">   if I &lt; 2^N - 1, encode I on N bits
   else
       encode (2^N - 1) on N bits
       I = I - (2^N - 1)
       while I &gt;= 128
            encode (I % 128 + 128) on 8 bits
            I = I / 128
       encode I on 8 bits
</code></pre>
<p>&#x7528;&#x4E8E;&#x89E3;&#x7801;&#x6574;&#x6570; I &#x7684;&#x4F2A;&#x4EE3;&#x7801;&#x5982;&#x4E0B;&#xFF1A;</p>
<pre><code class="language-c">   decode I from the next N bits
   if I &lt; 2^N - 1, return I
   else
       M = 0
       repeat
           B = next octet
           I = I + (B &amp; 127) * 2^M
           M = M + 7
       while B &amp; 128 == 128
       return I
</code></pre>
<p><a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#1-%E6%95%B4%E6%95%B0%E8%A1%A8%E7%A4%BA%E7%9A%84%E7%A4%BA%E4%BE%8B">&#x9644;&#x5F55; C.1</a> &#x4E2D;&#x63D0;&#x4F9B;&#x4E86;&#x8BF4;&#x660E;&#x6574;&#x6570;&#x7F16;&#x7801;&#x7684;&#x793A;&#x4F8B;&#x3002;</p>
<p>&#x6574;&#x6570;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x5141;&#x8BB8;&#x4F7F;&#x7528;&#x4E0D;&#x786E;&#x5B9A;&#x5927;&#x5C0F;&#x7684;&#x503C;&#x3002;&#x7F16;&#x7801;&#x5668;&#x4E5F;&#x53EF;&#x80FD;&#x53D1;&#x9001;&#x5927;&#x91CF;&#x7684;&#x96F6;&#x503C;&#xFF0C;&#x8FD9;&#x53EF;&#x80FD;&#x6D6A;&#x8D39;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#xFF0C;&#x5E76;&#x53EF;&#x80FD;&#x4F7F;&#x6574;&#x6570;&#x503C;&#x6EA2;&#x51FA;&#x3002;&#x8D85;&#x51FA;&#x5B9E;&#x73B0;&#x9650;&#x5236;&#x7684;&#x6574;&#x6570;&#x7F16;&#x7801;(&#x503C;&#x6216;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x957F;&#x5EA6;)&#x5FC5;&#x987B;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;&#x57FA;&#x4E8E;&#x5B9E;&#x73B0;&#x65B9;&#x7684;&#x7EA6;&#x675F;&#xFF0C;&#x53EF;&#x4EE5;&#x4E3A;&#x6574;&#x6570;&#x7684;&#x6BCF;&#x79CD;&#x4E0D;&#x540C;&#x7528;&#x9014;&#x8BBE;&#x7F6E;&#x4E0D;&#x540C;&#x7684;&#x9650;&#x5236;&#x3002;</p>
<h3 id="2stringliteralrepresentation">2. String Literal Representation</h3>
<p>header &#x5B57;&#x6BB5; name &#x548C; header &#x5B57;&#x6BB5; value &#x53EF;&#x4EE5;&#x8868;&#x793A;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x91CF;&#x3002;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x76F4;&#x63A5;&#x7F16;&#x7801;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x6216;&#x4F7F;&#x7528;&#x970D;&#x592B;&#x66FC;&#x4EE3;&#x7801;&#x5C06;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7F16;&#x7801;&#x4E3A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x5E8F;&#x5217;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://tools.ietf.org/html/rfc7541#ref-HUFFMAN">[HUFFMAN]</a>&#xFF09;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_6.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p>&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x5305;&#x542B;&#x4EE5;&#x4E0B;&#x5B57;&#x6BB5;&#xFF1A;</p>
<ul>
<li>
<p>H&#xFF1A;<br>
&#x4E00;&#x4F4D;&#x6807;&#x5FD7; H&#xFF0C;&#x6307;&#x793A;&#x5B57;&#x7B26;&#x4E32;&#x7684;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x662F;&#x5426;&#x7ECF;&#x8FC7;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x3002;</p>
</li>
<li>
<p>String Length&#xFF1A;<br>
&#x7528;&#x4E8E;&#x7F16;&#x7801;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x6570;&#xFF0C;&#x7F16;&#x7801;&#x4E3A;&#x5E26;&#x6709; 7 &#x4F4D;&#x524D;&#x7F00;&#x7684;&#x6574;&#x6570;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;</p>
</li>
<li>
<p>String Data&#xFF1A;<br>
&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684;&#x7F16;&#x7801;&#x6570;&#x636E;&#x3002;&#x5982;&#x679C; H &#x4E3A;&apos;0&apos;&#xFF0C;&#x5219;&#x7F16;&#x7801;&#x540E;&#x7684;&#x6570;&#x636E;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x91CF;&#x7684;&#x539F;&#x59CB;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x3002;&#x5982;&#x679C; H &#x4E3A;&apos;1&apos;&#xFF0C;&#x5219;&#x7F16;&#x7801;&#x6570;&#x636E;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x91CF;&#x7684;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x3002;</p>
</li>
</ul>
<p>&#x4F7F;&#x7528;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x91CF;&#x4F7F;&#x7528; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#%E4%BA%8C-%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81">&#x9644;&#x5F55; B</a> &#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x970D;&#x592B;&#x66FC;&#x4EE3;&#x7801;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#xFF08;&#x6709;&#x5173;&#x793A;&#x4F8B;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#4-%E6%9C%89%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81%E8%AF%B7%E6%B1%82%E7%9A%84%E7%A4%BA%E4%BE%8B">&#x9644;&#x5F55; C.4</a> &#x4E2D;&#x7684;&#x793A;&#x4F8B;&#x4EE5;&#x53CA; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_HPACK-Example.md#6-%E6%9C%89%E9%9C%8D%E5%A4%AB%E6%9B%BC%E7%BC%96%E7%A0%81%E5%93%8D%E5%BA%94%E7%9A%84%E7%A4%BA%E4%BE%8B">&#x9644;&#x5F55; C.6</a> &#x4E2D;&#x7684;&#x54CD;&#x5E94;&#x793A;&#x4F8B;&#xFF09;&#x3002;&#x7F16;&#x7801;&#x7684;&#x6570;&#x636E;&#x662F;&#x4E0E;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684;&#x6BCF;&#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x76F8;&#x5BF9;&#x5E94;&#x7684;&#x4EE3;&#x7801;&#x7684;&#x6309;&#x4F4D;&#x7EA7;&#x8054;&#x3002;</p>
<p>&#x7531;&#x4E8E;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x6570;&#x636E;&#x5E76;&#x4E0D;&#x603B;&#x662F;&#x5728;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x8FB9;&#x754C;&#x5904;&#x7ED3;&#x675F;&#xFF0C;&#x56E0;&#x6B64;&#x5728;&#x5176;&#x540E;&#x63D2;&#x5165;&#x586B;&#x5145;&#xFF0C;&#x76F4;&#x5230;&#x4E0B;&#x4E00;&#x4E2A;&#x516B;&#x4F4D;&#x5B57;&#x8282;&#x7684;&#x8FB9;&#x754C;&#x3002;&#x4E3A;&#x907F;&#x514D;&#x5C06;&#x6B64;&#x586B;&#x5145;&#x8BEF;&#x89E3;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684;&#x4E00;&#x90E8;&#x5206;&#xFF0C;&#x4F7F;&#x7528;&#x4E86;&#x4E0E; EOS&#xFF08;end-of-string&#xFF09;&#x7B26;&#x53F7;&#x76F8;&#x5BF9;&#x5E94;&#x7684;&#x4EE3;&#x7801;&#x7684;&#x6700;&#x9AD8;&#x6709;&#x6548;&#x4F4D;&#x3002;</p>
<p>&#x5728;&#x89E3;&#x7801;&#x65F6;&#xFF0C;&#x7F16;&#x7801;&#x6570;&#x636E;&#x672B;&#x5C3E;&#x7684;&#x4E0D;&#x5B8C;&#x6574;&#x4EE3;&#x7801;&#x5C06;&#x88AB;&#x89C6;&#x4E3A;&#x586B;&#x5145;&#x548C;&#x4E22;&#x5F03;&#x3002;&#x4E25;&#x683C;&#x957F;&#x4E8E; 7 &#x4F4D;&#x7684;&#x586B;&#x5145;&#x5FC5;&#x987B;&#x88AB;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;&#x4E0E; EOS &#x7B26;&#x53F7;&#x7684;&#x4EE3;&#x7801;&#x7684;&#x6700;&#x9AD8;&#x6709;&#x6548;&#x4F4D;&#x4E0D;&#x5BF9;&#x5E94;&#x7684;&#x586B;&#x5145;&#x5FC5;&#x987B;&#x88AB;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;&#x5305;&#x542B; EOS &#x7B26;&#x53F7;&#x7684;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x5FC5;&#x987B;&#x88AB;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;</p>
<h2 id>&#x516D;. &#x4E8C;&#x8FDB;&#x5236;&#x683C;&#x5F0F;</h2>
<p>&#x672C;&#x8282;&#x63CF;&#x8FF0;&#x6BCF;&#x79CD;&#x4E0D;&#x540C;&#x7684; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x8BE6;&#x7EC6;&#x683C;&#x5F0F;&#x4EE5;&#x53CA;&#x52A8;&#x6001;&#x8868;&#x5927;&#x5C0F;&#x66F4;&#x65B0;&#x6307;&#x4EE4;&#x3002;</p>
<h3 id="1header">1. &#x7D22;&#x5F15; header &#x5B57;&#x6BB5;&#x8868;&#x793A;</h3>
<p>&#x7D22;&#x5F15; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x53EF;&#x6807;&#x8BC6;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x6761;&#x76EE;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-indexing-tables">&#x7B2C; 2.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x7D22;&#x5F15;&#x7684; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4F1A;&#x5C06; header &#x5B57;&#x6BB5;&#x6DFB;&#x52A0;&#x5230;&#x5DF2;&#x89E3;&#x7801;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#xFF0C;&#x5982;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-header-field-representation-processing">&#x7B2C; 3.2 &#x8282;</a>&#x6240;&#x8FF0;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_7_.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x548C; Value &#x90FD;&#x5728;&#x7D22;&#x5F15;&#x8868;(&#x5305;&#x62EC;&#x9759;&#x6001;&#x8868;&#x548C;&#x52A8;&#x6001;&#x8868;)&#x4E2D;</strong>&#x3002;</p>
<p>&#x7D22;&#x5F15; header &#x5B57;&#x6BB5;&#x4EE5; 1 &#x4F4D;&#x6A21;&#x5F0F; &#x201C;1&#x201D; &#x5F00;&#x5934;&#xFF0C;&#x540E;&#x8DDF;&#x5339;&#x914D; header &#x5B57;&#x6BB5;&#x7684;&#x7D22;&#x5F15;&#xFF0C;&#x4EE5; 7 &#x4F4D;&#x524D;&#x7F00;&#x7684;&#x6574;&#x6570;&#x8868;&#x793A;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x4E0D;&#x4F7F;&#x7528;&#x7D22;&#x5F15;&#x503C; 0&#x3002;&#x5982;&#x679C;&#x5728;&#x7D22;&#x5F15; header &#x57DF;&#x8868;&#x793A;&#x4E2D;&#x53D1;&#x73B0;&#x4E86;&#x7D22;&#x5F15;&#x503C; 0&#xFF0C;&#x5219;&#x5FC5;&#x987B;&#x5C06;&#x5176;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;</p>
<h3 id="2header">2. &#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x6807;&#x8BC6;</h3>
<p>header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x5305;&#x542B;&#x5B57;&#x9762; header &#x5B57;&#x6BB5; value&#x3002;header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x4EE5;&#x5B57;&#x9762;&#x5F62;&#x5F0F;&#x63D0;&#x4F9B;&#xFF0C;&#x4E5F;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5F15;&#x7528;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x73B0;&#x6709;&#x8868;&#x6761;&#x76EE;&#x6765;&#x63D0;&#x4F9B;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-indexing-tables">&#x7B2C; 2.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x672C;&#x89C4;&#x8303;&#x5B9A;&#x4E49;&#x4E86;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x4E09;&#x79CD;&#x5F62;&#x5F0F;&#xFF1A;&#x5E26;&#x7D22;&#x5F15;&#xFF0C;&#x4E0D;&#x5E26;&#x7D22;&#x5F15;&#x4EE5;&#x53CA;&#x4ECE;&#x4E0D;&#x7D22;&#x5F15;&#x3002;</p>
<h3 id="1header">(1). &#x5E26;&#x589E;&#x91CF;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;</h3>
<p>&#x5177;&#x6709;&#x589E;&#x91CF;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x4F1A;&#x5C06; header &#x5B57;&#x6BB5;&#x9644;&#x52A0;&#x5230;&#x5DF2;&#x89E3;&#x7801;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#xFF0C;&#x5E76;&#x5C06;&#x5176;&#x4F5C;&#x4E3A;&#x65B0;&#x6761;&#x76EE;&#x63D2;&#x5165;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_9.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x5728;&#x7D22;&#x5F15;&#x8868;(&#x5305;&#x62EC;&#x9759;&#x6001;&#x8868;&#x548C;&#x52A8;&#x6001;&#x8868;)&#x4E2D;&#xFF0C;Value &#x9700;&#x8981;&#x7F16;&#x7801;&#x4F20;&#x9012;&#xFF0C;&#x5E76;&#x540C;&#x65F6;&#x65B0;&#x589E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;</strong>&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_10.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x548C; Value &#x90FD;&#x9700;&#x8981;&#x7F16;&#x7801;&#x4F20;&#x9012;&#xFF0C;&#x5E76;&#x540C;&#x65F6;&#x65B0;&#x589E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;</strong>&#x3002;</p>
<p>&#x5177;&#x6709;&#x589E;&#x91CF;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x4EE5; &#x201C;01&#x201D; 2 &#x4F4D;&#x6A21;&#x5F0F;&#x5F00;&#x5934;&#x3002;</p>
<p>&#x5982;&#x679C; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x4E0E;&#x5B58;&#x50A8;&#x5728;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x6761;&#x76EE;&#x7684; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x5339;&#x914D;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x8BE5;&#x6761;&#x76EE;&#x7684;&#x7D22;&#x5F15;&#x8868;&#x793A; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6761;&#x76EE;&#x7684;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x4E3A;&#x5E26;&#x6709; 6 &#x4F4D;&#x524D;&#x7F00;&#x7684;&#x6574;&#x6570;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;&#x6B64;&#x503C;&#x4E00;&#x822C;&#x4E3A;&#x975E;&#x96F6;&#x503C;&#x3002;</p>
<p>&#x5426;&#x5219;&#xFF0C;header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x8868;&#x793A;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;&#x3002;&#x4F7F;&#x7528;&#x503C; 0 &#x4EE3;&#x66FF; 6 &#x4F4D;&#x7D22;&#x5F15;&#xFF0C;&#x540E;&#x8DDF; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name&#x3002;</p>
<p>&#x4E24;&#x79CD;&#x5F62;&#x5F0F;&#x7684; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x8868;&#x793A;&#x5F62;&#x5F0F;&#x4E4B;&#x540E;&#x8DDF;&#x7740;&#x7684;&#x662F;&#x4EE5;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x8868;&#x793A;&#x7684; header &#x5B57;&#x6BB5;&#x503C; value&#xFF08;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<h3 id="2header">(2). &#x4E0D;&#x5E26;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;</h3>
<p>&#x6CA1;&#x6709;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x4F1A;&#x4F7F;&#x5728;&#x4E0D;&#x66F4;&#x6539;&#x52A8;&#x6001;&#x8868;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5C06; header &#x5B57;&#x6BB5;&#x9644;&#x52A0;&#x5230;&#x5DF2;&#x89E3;&#x7801;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_11.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x5728;&#x7D22;&#x5F15;&#x8868;(&#x5305;&#x62EC;&#x9759;&#x6001;&#x8868;&#x548C;&#x52A8;&#x6001;&#x8868;)&#x4E2D;&#xFF0C;Value &#x9700;&#x8981;&#x7F16;&#x7801;&#x4F20;&#x9012;&#xFF0C;&#x5E76;&#x4E0D;&#x65B0;&#x589E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;</strong>&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_12.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x548C; Value &#x9700;&#x8981;&#x7F16;&#x7801;&#x4F20;&#x9012;&#xFF0C;&#x5E76;&#x4E0D;&#x65B0;&#x589E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;</strong>&#x3002;</p>
<p>&#x6CA1;&#x6709;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x4EE5; &#x201C;0000&#x201D; 4 &#x4F4D;&#x6A21;&#x5F0F;&#x5F00;&#x5934;&#x3002;</p>
<p>&#x5982;&#x679C; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x4E0E;&#x5B58;&#x50A8;&#x5728;&#x9759;&#x6001;&#x8868;&#x6216;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x6761;&#x76EE;&#x7684; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x5339;&#x914D;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x8BE5;&#x6761;&#x76EE;&#x7684;&#x7D22;&#x5F15;&#x8868;&#x793A; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x6761;&#x76EE;&#x7684;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x4E3A;&#x5E26;&#x6709; 4 &#x4F4D;&#x524D;&#x7F00;&#x7684;&#x6574;&#x6570;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;&#x6B64;&#x503C;&#x4E00;&#x822C;&#x4E3A;&#x975E;&#x96F6;&#x503C;&#x3002;</p>
<p>&#x5426;&#x5219;&#xFF0C;header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x8868;&#x793A;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;&#x3002;&#x4F7F;&#x7528;&#x503C; 0 &#x4EE3;&#x66FF; 4 &#x4F4D;&#x7D22;&#x5F15;&#xFF0C;&#x540E;&#x8DDF; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name&#x3002;</p>
<p>&#x4E24;&#x79CD;&#x5F62;&#x5F0F;&#x7684; header &#x5B57;&#x6BB5;&#x540D;&#x79F0; name &#x8868;&#x793A;&#x5F62;&#x5F0F;&#x4E4B;&#x540E;&#x8DDF;&#x7740;&#x7684;&#x662F;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x7684; header &#x5B57;&#x6BB5;&#x503C; value&#xFF08;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<h3 id="3header">(3). &#x4ECE;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;</h3>
<p>&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x4F1A;&#x4F7F;&#x5F97;&#x5728;&#x4E0D;&#x66F4;&#x6539;&#x52A8;&#x6001;&#x8868;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5C06; header &#x5B57;&#x6BB5;&#x9644;&#x52A0;&#x5230;&#x5DF2;&#x89E3;&#x7801;&#x7684; header &#x5217;&#x8868;&#x4E2D;&#x3002;&#x4E2D;&#x95F4;&#x4EF6;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x76F8;&#x540C;&#x7684;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x6765;&#x7F16;&#x7801;&#x8BE5; header &#x5B57;&#x6BB5;&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_13.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x5728;&#x7D22;&#x5F15;&#x8868;(&#x5305;&#x62EC;&#x9759;&#x6001;&#x8868;&#x548C;&#x52A8;&#x6001;&#x8868;)&#x4E2D;&#xFF0C;Value &#x9700;&#x8981;&#x7F16;&#x7801;&#x4F20;&#x9012;&#xFF0C;&#x5E76;&#x6C38;&#x8FDC;&#x4E0D;&#x65B0;&#x589E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;</strong>&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_14.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p><strong>&#x4E0A;&#x9762;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x5BF9;&#x5E94;&#x7684;&#x662F; Name &#x548C; Value &#x9700;&#x8981;&#x7F16;&#x7801;&#x4F20;&#x9012;&#xFF0C;&#x5E76;&#x6C38;&#x8FDC;&#x4E0D;&#x65B0;&#x589E;&#x5230;&#x52A8;&#x6001;&#x8868;&#x4E2D;</strong>&#x3002;</p>
<p>&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x4EE5; &#x201C;0001&#x201D; 4 &#x4F4D;&#x6A21;&#x5F0F;&#x5F00;&#x5934;&#x3002;</p>
<p>&#x5F53; header &#x5B57;&#x6BB5;&#x8868;&#x793A;&#x4E3A;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x65F6;&#xFF0C;&#x52A1;&#x5FC5;&#x4F7F;&#x7528;&#x6B64;&#x7279;&#x5B9A;&#x5B57;&#x9762;&#x8868;&#x793A;&#x8FDB;&#x884C;&#x7F16;&#x7801;&#x3002;&#x7279;&#x522B;&#x5730;&#xFF0C;&#x5F53;&#x4E00;&#x4E2A;&#x5BF9;&#x7AEF;&#x53D1;&#x9001;&#x4E86;&#x4E00;&#x4E2A;&#x63A5;&#x6536;&#x5230;&#x7684; header &#x57DF;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x5E76;&#x4E14;&#x63A5;&#x6536;&#x5230;&#x7684; header &#x8868;&#x793A;&#x4E3A;&#x4ECE;&#x672A;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x57DF;&#x65F6;&#xFF0C;&#x5B83;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x76F8;&#x540C;&#x7684;&#x8868;&#x793A;&#x6765;&#x8F6C;&#x53D1;&#x8BE5; header &#x57DF;&#x3002;</p>
<p>&#x6B64;&#x8868;&#x793A;&#x76EE;&#x7684;&#x662F;&#x4E3A;&#x4E86;&#x4FDD;&#x62A4; header &#x5B57;&#x6BB5;&#x503C; value&#xFF0C;&#x901A;&#x8FC7;&#x538B;&#x7F29;&#x6765;&#x4FDD;&#x62A4;&#x5B83;&#x4EEC;&#x4E0D;&#x4F1A;&#x88AB;&#x7F6E;&#x4E8E;&#x98CE;&#x9669;&#x4E4B;&#x4E2D;&#xFF08;&#x6709;&#x5173;&#x66F4;&#x591A;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-%E6%8E%A2%E6%B5%8B%E5%8A%A8%E6%80%81%E8%A1%A8%E7%8A%B6%E6%80%81">&#x7B2C; 7.1 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x8BE5;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x7F16;&#x7801;&#x4E0E;&#x4E0D;&#x5E26;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762; header &#x5B57;&#x6BB5;&#x76F8;&#x540C;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-%E4%B8%8D%E5%B8%A6%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">&#x7B2C; 6.2.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<h3 id="3">3. &#x52A8;&#x6001;&#x8868;&#x5927;&#x5C0F;&#x66F4;&#x65B0;</h3>
<p>&#x52A8;&#x6001;&#x8868; size &#x66F4;&#x65B0;&#x4EE3;&#x8868;&#x66F4;&#x6539;&#x52A8;&#x6001;&#x8868; size&#x3002;</p>
<p><img src="https://img.halfrost.com/Blog/ArticleImage/132_8.png" alt="&#x8BE6;&#x89E3; HTTP/2 &#x5934;&#x538B;&#x7F29;&#x7B97;&#x6CD5; &#x2014;&#x2014; HPACK" loading="lazy"></p>
<p>&#x52A8;&#x6001;&#x8868; size &#x66F4;&#x65B0;&#x4ECE; &#x201C;001&#x201D; 3 &#x4F4D;&#x6A21;&#x5F0F;&#x5F00;&#x59CB;&#xFF0C;&#x7136;&#x540E;&#x662F;&#x65B0;&#x7684;&#x6700;&#x5927; size&#xFF0C;&#x4EE5; 5 &#x4F4D;&#x524D;&#x7F00;&#x7684;&#x6574;&#x6570;&#x8868;&#x793A;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x65B0;&#x7684;&#x6700;&#x5927; size &#x5FC5;&#x987B;&#x5C0F;&#x4E8E;&#x6216;&#x7B49;&#x4E8E;&#x534F;&#x8BAE;&#x4F7F;&#x7528; HPACK &#x786E;&#x5B9A;&#x7684;&#x9650;&#x5236;&#x3002;&#x8D85;&#x8FC7;&#x6B64;&#x9650;&#x5236;&#x7684;&#x503C;&#x5FC5;&#x987B;&#x89C6;&#x4E3A;&#x89E3;&#x7801;&#x9519;&#x8BEF;&#x3002;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x6B64;&#x9650;&#x5236;&#x662F;&#x4ECE;&#x89E3;&#x7801;&#x5668;&#x63A5;&#x6536;&#x5E76;&#x7531;&#x7F16;&#x7801;&#x5668;&#xFF08;&#x8BF7;&#x53C2;&#x89C1; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#3-settings-synchronization">[HTTP2]&#x7684; 6.5.3 &#x8282;</a>&#xFF09;&#x786E;&#x8BA4;&#x7684; SETTINGS_HEADER_TABLE_SIZE &#xFF08;&#x8BF7;&#x53C2;&#x89C1; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#2-defined-settings-parameters">[HTTP2]&#x7684; 6.5.2 &#x8282;</a>&#xFF09;&#x53C2;&#x6570;&#x7684;&#x6700;&#x540E;&#x4E00;&#x4E2A;&#x503C;&#x3002;</p>
<p>&#x51CF;&#x5C0F;&#x52A8;&#x6001;&#x8868;&#x7684;&#x6700;&#x5927; size &#x4F1A;&#x5BFC;&#x81F4;&#x9A71;&#x9010;&#x6761;&#x76EE;(&#x5148;&#x8FDB;&#x5148;&#x51FA;)&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-entry-eviction-when-dynamic-table-size-changes">&#x7B2C; 4.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<blockquote>
<p>&#x52A8;&#x6001;&#x8868;&#x5927;&#x5C0F;&#x66F4;&#x65B0;&#x6709;&#x4E0A;&#x8FF0;&#x8FD9;&#x4E24;&#x79CD;&#x65B9;&#x5F0F;&#xFF0C;&#x4E00;&#x79CD;&#x662F;&#x5728; HEADERS &#x5E27;&#x4E2D;&#x76F4;&#x63A5;&#x4FEE;&#x6539;(&#x201C;001&#x201D; 3 &#x4F4D;&#x6A21;&#x5F0F;&#x5F00;&#x59CB;)&#xFF0C;&#x53E6;&#x5916;&#x4E00;&#x79CD;&#x65B9;&#x5F0F;&#x662F;&#x901A;&#x8FC7; SETTINGS &#x5E27;&#x4E2D;&#x7684; SETTINGS_HEADER_TABLE_SIZE &#x4E2D;&#x8BBE;&#x7F6E;&#x7684;&#x3002;</p>
</blockquote>
<h2 id>&#x4E03;. &#x5B89;&#x5168;&#x6CE8;&#x610F;&#x4E8B;&#x9879;</h2>
<p>&#x672C;&#x8282;&#x4ECB;&#x7ECD;&#x4E86; HPACK &#x7684;&#x6F5C;&#x5728;&#x5B89;&#x5168;&#x9690;&#x60A3;&#xFF1A;</p>
<ul>
<li>
<p>&#x5C06;&#x538B;&#x7F29;&#x7528;&#x4F5C;&#x57FA;&#x4E8E;&#x957F;&#x5EA6;&#x7684;&#x9884;&#x6D4B;&#xFF0C;&#x4EE5;&#x9A8C;&#x8BC1;&#x6709;&#x5173;&#x88AB;&#x538B;&#x7F29;&#x5230;&#x5171;&#x4EAB;&#x538B;&#x7F29;&#x4E0A;&#x4E0B;&#x6587;&#x4E2D;&#x7684;&#x52A0;&#x5BC6;&#x7684;&#x731C;&#x60F3;&#x3002;</p>
</li>
<li>
<p>&#x7531;&#x4E8E;&#x8017;&#x5C3D;&#x89E3;&#x7801;&#x5668;&#x7684;&#x5904;&#x7406;&#x6216;&#x5B58;&#x50A8;&#x5BB9;&#x91CF;&#x800C;&#x5BFC;&#x81F4;&#x7684;&#x62D2;&#x7EDD;&#x670D;&#x52A1;&#x3002;</p>
</li>
</ul>
<h3 id="1">1. &#x63A2;&#x6D4B;&#x52A8;&#x6001;&#x8868;&#x72B6;&#x6001;</h3>
<p>HPACK &#x901A;&#x8FC7;&#x5229;&#x7528; HTTP &#x7B49;&#x534F;&#x8BAE;&#x56FA;&#x6709;&#x7684;&#x5197;&#x4F59;&#x6027;&#x6765;&#x51CF;&#x5C11; header &#x5B57;&#x6BB5;&#x7F16;&#x7801;&#x7684;&#x957F;&#x5EA6;&#x3002;&#x8FD9;&#x6837;&#x505A;&#x7684;&#x6700;&#x7EC8;&#x76EE;&#x7684;&#x662F;&#x51CF;&#x5C11;&#x53D1;&#x9001; HTTP &#x8BF7;&#x6C42;&#x6216;&#x54CD;&#x5E94;&#x6240;&#x9700;&#x7684;&#x6570;&#x636E;&#x91CF;&#x3002;</p>
<p>&#x653B;&#x51FB;&#x8005;&#x53EF;&#x4EE5;&#x63A2;&#x6D4B;&#x7528;&#x4E8E;&#x7F16;&#x7801; header &#x5B57;&#x6BB5;&#x7684;&#x538B;&#x7F29;&#x4E0A;&#x4E0B;&#x6587;&#xFF0C;&#x653B;&#x51FB;&#x8005;&#x4E5F;&#x53EF;&#x4EE5;&#x5B9A;&#x4E49;&#x8981;&#x7F16;&#x7801;&#x548C;&#x4F20;&#x8F93;&#x7684; header &#x5B57;&#x6BB5;&#xFF0C;&#x5E76;&#x5728;&#x7F16;&#x7801;&#x540E;&#x89C2;&#x5BDF;&#x8FD9;&#x4E9B;&#x5B57;&#x6BB5;&#x7684;&#x957F;&#x5EA6;&#x3002;&#x5F53;&#x653B;&#x51FB;&#x8005;&#x53EF;&#x4EE5;&#x540C;&#x65F6;&#x6267;&#x884C;&#x8FD9;&#x4E24;&#x79CD;&#x64CD;&#x4F5C;&#x65F6;&#xFF0C;&#x4ED6;&#x4EEC;&#x53EF;&#x4EE5;&#x81EA;&#x9002;&#x5E94;&#x5730;&#x4FEE;&#x6539;&#x8BF7;&#x6C42;&#xFF0C;&#x4EE5;&#x786E;&#x8BA4;&#x6709;&#x5173;&#x52A8;&#x6001;&#x8868;&#x72B6;&#x6001;&#x7684;&#x731C;&#x60F3;&#x3002;&#x5982;&#x679C;&#x5C06;&#x731C;&#x60F3;&#x538B;&#x7F29;&#x5230;&#x8F83;&#x77ED;&#x7684;&#x957F;&#x5EA6;&#xFF0C;&#x5219;&#x653B;&#x51FB;&#x8005;&#x53EF;&#x4EE5;&#x89C2;&#x5BDF;&#x7F16;&#x7801;&#x7684;&#x957F;&#x5EA6;&#x5E76;&#x63A8;&#x65AD;&#x51FA;&#x731C;&#x6D4B;&#x662F;&#x6B63;&#x786E;&#x7684;&#x3002;</p>
<p>&#x5373;&#x4F7F;&#x901A;&#x8FC7;&#x4F20;&#x8F93;&#x5C42;&#x5B89;&#x5168;&#x6027;&#xFF08;TLS&#xFF09;&#x534F;&#x8BAE;&#xFF08;&#x8BF7;&#x53C2;&#x9605; <a href="https://tools.ietf.org/html/rfc7541#ref-TLS12">[TLS12]</a>&#xFF09;&#xFF0C;&#x8FD9;&#x4E5F;&#x662F;&#x6709;&#x53EF;&#x80FD;&#x88AB;&#x653B;&#x51FB;&#x7684;&#xFF0C;&#x56E0;&#x4E3A; TLS &#x4E3A;&#x5185;&#x5BB9;&#x63D0;&#x4F9B;&#x52A0;&#x5BC6;&#x4FDD;&#x62A4;&#xFF0C;&#x4F46;&#x4EC5;&#x63D0;&#x4F9B;&#x6709;&#x9650;&#x7684;&#x5185;&#x5BB9;&#x957F;&#x5EA6;&#x4FDD;&#x62A4;&#x3002;</p>
<blockquote>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x586B;&#x5145;&#x65B9;&#x6848;&#x53EA;&#x80FD;&#x5BF9;&#x5177;&#x6709;&#x8FD9;&#x4E9B;&#x529F;&#x80FD;&#x7684;&#x653B;&#x51FB;&#x8005;&#x63D0;&#x4F9B;&#x6709;&#x9650;&#x7684;&#x4FDD;&#x62A4;&#x80FD;&#x529B;&#xFF0C;&#x53EF;&#x80FD;&#x5BF9;&#x653B;&#x51FB;&#x8005;&#x7684;&#x5F71;&#x54CD;&#x4EC5;&#x4EC5;&#x53EA;&#x662F;&#x8FEB;&#x4F7F;&#x4ED6;&#x589E;&#x52A0;&#x731C;&#x6D4B;&#x7684;&#x6B21;&#x6570;&#xFF0C;&#x6765;&#x63A8;&#x6D4B;&#x4E0E;&#x7ED9;&#x5B9A;&#x731C;&#x6D4B;&#x76F8;&#x5173;&#x7684;&#x957F;&#x5EA6;&#x3002;&#x586B;&#x5145;&#x65B9;&#x6848;&#x8FD8;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x589E;&#x52A0;&#x4F20;&#x8F93;&#x7684;&#x4F4D;&#x6570;&#x76F4;&#x63A5;&#x62B5;&#x6297;&#x538B;&#x7F29;&#x3002;</p>
</blockquote>
<p>&#x8BF8;&#x5982; CRIME <a href="https://tools.ietf.org/html/rfc7541#ref-CRIME">[CRIME]</a> &#x4E4B;&#x7C7B;&#x7684;&#x653B;&#x51FB;&#x8BC1;&#x660E;&#x4E86;&#x8FD9;&#x4E9B;&#x653B;&#x51FB;&#x8005;&#x7684;&#x5B58;&#x5728;&#x3002;&#x7279;&#x5B9A;&#x653B;&#x51FB;&#x5229;&#x7528;&#x4E86; DEFLATE <a href="https://tools.ietf.org/html/rfc7541#ref-DEFLATE">[DEFLATE]</a> &#x5220;&#x9664;&#x57FA;&#x4E8E;&#x524D;&#x7F00;&#x5339;&#x914D;&#x7684;&#x5197;&#x4F59;&#x8FD9;&#x4E00;&#x4E8B;&#x5B9E;&#x3002;&#x8FD9;&#x4F7F;&#x653B;&#x51FB;&#x8005;&#x4E00;&#x6B21;&#x53EF;&#x4EE5;&#x786E;&#x5B9A;&#x4E00;&#x4E2A;&#x5B57;&#x7B26;&#xFF0C;&#x4ECE;&#x800C;&#x5C06;&#x6307;&#x6570;&#x65F6;&#x95F4;&#x7684; &#x653B;&#x51FB;&#x51CF;&#x5C11;&#x4E3A;&#x7EBF;&#x6027;&#x65F6;&#x95F4;&#x7684;&#x653B;&#x51FB;&#x3002;</p>
<h3 id="1hpackhttp">(1). &#x9002;&#x7528;&#x4E8E; HPACK &#x548C; HTTP</h3>
<p>HPACK &#x901A;&#x8FC7;&#x5F3A;&#x5236;&#x731C;&#x6D4B;&#x4EE5;&#x5339;&#x914D;&#x6574;&#x4E2A; header &#x5B57;&#x6BB5;&#x503C;&#x800C;&#x4E0D;&#x662F;&#x5355;&#x4E2A;&#x5B57;&#x7B26;&#xFF0C;&#x6765;&#x7F13;&#x89E3;&#x4F46;&#x4E0D;&#x80FD;&#x5B8C;&#x5168;&#x963B;&#x6B62;&#x4EE5;CRIME <a href="https://tools.ietf.org/html/rfc7541#ref-CRIME">[CRIME]</a> &#x4E3A;&#x6A21;&#x578B;&#x7684;&#x653B;&#x51FB;&#x3002;&#x653B;&#x51FB;&#x8005;&#x53EA;&#x80FD;&#x4E86;&#x89E3;&#x731C;&#x6D4B;&#x662F;&#x5426;&#x6B63;&#x786E;&#xFF0C;&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x5C06;&#x653B;&#x51FB;&#x624B;&#x6BB5;&#x5176;&#x7B80;&#x5316;&#x4E3A;&#x9488;&#x5BF9; header &#x5B57;&#x6BB5;&#x503C;&#x7684;&#x86EE;&#x529B;&#x731C;&#x6D4B;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x6062;&#x590D;&#x7279;&#x5B9A; header &#x5B57;&#x6BB5;&#x503C;&#x7684;&#x53EF;&#x884C;&#x6027;&#x53D6;&#x51B3;&#x4E8E;&#x503C;&#x7684;&#x71B5;&#x3002;&#x7ED3;&#x679C;&#x662F;&#xFF0C;&#x5177;&#x6709;&#x9AD8;&#x71B5;&#x7684;&#x503C;&#x4E0D;&#x592A;&#x53EF;&#x80FD;&#x6210;&#x529F;&#x6062;&#x590D;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x4F4E;&#x71B5;&#x503C;&#x4ECD;&#x7136;&#x5BB9;&#x6613;&#x53D7;&#x5230;&#x653B;&#x51FB;&#x3002;</p>
<p>&#x6BCF;&#x5F53;&#x4E24;&#x4E2A;&#x4E92;&#x4E0D;&#x4FE1;&#x4EFB;&#x7684;&#x5B9E;&#x4F53;&#x5728;&#x5355;&#x4E2A; HTTP/2 &#x8FDE;&#x63A5;&#x4E0A;&#x7684;&#x63A5;&#x6536;&#x548C;&#x53D1;&#x9001;&#x8BF7;&#x6C42;&#x6216;&#x54CD;&#x5E94;&#x65F6;&#xFF0C;&#x5C31;&#x53EF;&#x80FD;&#x53D1;&#x751F;&#x8FD9;&#x79CD;&#x6027;&#x8D28;&#x7684;&#x653B;&#x51FB;&#x3002;&#x5982;&#x679C;&#x5171;&#x4EAB;&#x7684; HPACK &#x538B;&#x7F29;&#x5668;&#x5141;&#x8BB8;&#x4E00;&#x4E2A;&#x5B9E;&#x4F53;&#x5411;&#x52A8;&#x6001;&#x8868;&#x6DFB;&#x52A0;&#x6761;&#x76EE;&#xFF0C;&#x800C;&#x53E6;&#x4E00;&#x5B9E;&#x4F53;&#x8BBF;&#x95EE;&#x8FD9;&#x4E9B;&#x6761;&#x76EE;&#xFF0C;&#x5219;&#x53EF;&#x4EE5;&#x4E86;&#x89E3;&#x5230;&#x8868;&#x7684;&#x72B6;&#x6001;&#x3002;</p>
<p>&#x5F53;&#x4E2D;&#x95F4;&#x4EF6;&#x53D1;&#x751F;&#x4EE5;&#x4E0B;&#x60C5;&#x51B5;&#x65F6;&#xFF0C;&#x5C31;&#x4F1A;&#x51FA;&#x73B0;&#x6765;&#x81EA;&#x4E92;&#x4E0D;&#x4FE1;&#x4EFB;&#x5B9E;&#x4F53;&#x7684;&#x8BF7;&#x6C42;&#x6216;&#x54CD;&#x5E94;&#xFF1A;</p>
<ul>
<li>
<p>&#x4ECE;&#x5355;&#x4E2A;&#x8FDE;&#x63A5;&#x4E0A;&#x7684;&#x591A;&#x4E2A;&#x5BA2;&#x6237;&#x7AEF;&#x5411;&#x539F;&#x59CB;&#x670D;&#x52A1;&#x5668;&#x53D1;&#x9001;&#x8BF7;&#x6C42;&#x3002;</p>
</li>
<li>
<p>&#x4ECE;&#x591A;&#x4E2A;&#x539F;&#x59CB;&#x670D;&#x52A1;&#x5668;&#x83B7;&#x53D6;&#x54CD;&#x5E94;&#xFF0C;&#x5E76;&#x5C06;&#x5176;&#x5728;&#x4E0E;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x5171;&#x4EAB;&#x8FDE;&#x63A5;&#x4E0A;&#x53D1;&#x9001;&#x54CD;&#x5E94;&#x3002;</p>
</li>
</ul>
<p>Web &#x6D4F;&#x89C8;&#x5668;&#x8FD8;&#x9700;&#x8981;&#x5047;&#x8BBE;&#x4E0D;&#x540C; Web &#x6765;&#x6E90; <a href="https://tools.ietf.org/html/rfc7541#ref-ORIGIN">[ORIGIN]</a> &#x5728;&#x540C;&#x4E00;&#x8FDE;&#x63A5;&#x4E0A;&#x53D1;&#x51FA;&#x7684;&#x8BF7;&#x6C42;&#x662F;&#x7531;&#x4E92;&#x4E0D;&#x4FE1;&#x4EFB;&#x7684;&#x5B9E;&#x4F53;&#x53D1;&#x51FA;&#x7684;&#x3002;</p>
<h3 id="2">(2). &#x51CF;&#x8F7B;</h3>
<p>&#x8981;&#x6C42; header &#x5B57;&#x6BB5;&#x5177;&#x6709;&#x52A0;&#x5BC6;&#x6027;&#x7684; HTTP &#x7528;&#x6237;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x5177;&#x6709;&#x8DB3;&#x4EE5;&#x4F7F;&#x731C;&#x6D4B;&#x4E0D;&#x53EF;&#x884C;&#x7684;&#x71B5;&#x7684;&#x503C;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x8FD9;&#x4F5C;&#x4E3A;&#x901A;&#x7528;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x662F;&#x4E0D;&#x5207;&#x5B9E;&#x9645;&#x7684;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x4F1A;&#x5F3A;&#x5236; HTTP &#x7684;&#x6240;&#x6709;&#x7528;&#x6237;&#x91C7;&#x53D6;&#x63AA;&#x65BD;&#x51CF;&#x8F7B;&#x653B;&#x51FB;&#x3002;&#x5B83;&#x5C06;&#x5BF9;&#x4F7F;&#x7528; HTTP &#x7684;&#x65B9;&#x5F0F;&#x65BD;&#x52A0;&#x65B0;&#x7684;&#x9650;&#x5236;&#x3002;</p>
<p>HPACK &#x7684;&#x5B9E;&#x73B0;&#x4E0D;&#x662F;&#x5728; HTTP &#x7528;&#x6237;&#x4E0A;&#x65BD;&#x52A0;&#x7EA6;&#x675F;&#xFF0C;&#x800C;&#x662F;&#x53EF;&#x4EE5;&#x7EA6;&#x675F;&#x538B;&#x7F29;&#x7684;&#x5E94;&#x7528;&#x65B9;&#x5F0F;&#xFF0C;&#x4EE5;&#x9650;&#x5236;&#x52A8;&#x6001;&#x8868;&#x63A2;&#x6D4B;&#x7684;&#x6F5C;&#x529B;&#x3002;</p>
<p>&#x7406;&#x60F3;&#x7684;&#x89E3;&#x51B3;&#x65B9;&#x6848;&#x57FA;&#x4E8E;&#x6B63;&#x5728;&#x6784;&#x9020; header &#x5B57;&#x6BB5;&#x7684;&#x5B9E;&#x4F53;&#x6765;&#x9694;&#x79BB;&#x5BF9;&#x52A8;&#x6001;&#x8868;&#x7684;&#x8BBF;&#x95EE;&#x3002;&#x6DFB;&#x52A0;&#x5230;&#x8868;&#x4E2D;&#x7684; header &#x5B57;&#x6BB5;&#x503C;&#x5C06;&#x5F52;&#x56E0;&#x4E8E;&#x4E00;&#x4E2A;&#x5B9E;&#x4F53;&#xFF0C;&#x53EA;&#x6709;&#x521B;&#x5EFA;&#x7279;&#x5B9A;&#x503C;&#x7684;&#x5B9E;&#x4F53;&#x624D;&#x80FD;&#x63D0;&#x53D6;&#x8BE5;&#x503C;&#x3002;</p>
<p>&#x4E3A;&#x4E86;&#x63D0;&#x9AD8;&#x6B64;&#x9009;&#x9879;&#x7684;&#x538B;&#x7F29;&#x6027;&#x80FD;&#xFF0C;&#x53EF;&#x4EE5;&#x5C06;&#x67D0;&#x4E9B;&#x6761;&#x76EE;&#x6807;&#x8BB0;&#x4E3A;&#x516C;&#x5171;&#x3002;&#x4F8B;&#x5982;&#xFF0C;Web &#x6D4F;&#x89C8;&#x5668;&#x53EF;&#x80FD;&#x4F7F; Accept-Encoding header &#x5B57;&#x6BB5;&#x7684;&#x503C;&#x5728;&#x6240;&#x6709;&#x8BF7;&#x6C42;&#x4E2D;&#x90FD;&#x53EF;&#x7528;&#x3002;</p>
<p>&#x4E0D;&#x592A;&#x4E86;&#x89E3; header &#x5B57;&#x6BB5;&#x51FA;&#x5904;&#x7684;&#x7F16;&#x7801;&#x5668;&#x53EF;&#x80FD;&#x4F1A;&#x5BF9;&#x5177;&#x6709;&#x8BB8;&#x591A;&#x4E0D;&#x540C;&#x503C;&#x7684; header &#x5B57;&#x6BB5;&#x5F15;&#x5165;&#x60E9;&#x7F5A;&#x673A;&#x5236;&#xFF0C;&#x5982;&#x679C;&#x653B;&#x51FB;&#x8005;&#x5927;&#x91CF;&#x5C1D;&#x8BD5;&#x53BB;&#x731C;&#x6D4B; header &#x5B57;&#x6BB5;&#x503C;&#xFF0C;&#x89E6;&#x53D1;&#x60E9;&#x7F5A;&#x673A;&#x5236;&#xFF0C;&#x4F1A;&#x5BFC;&#x81F4; header &#x5B57;&#x6BB5;&#x5728;&#x5C06;&#x6765;&#x7684;&#x6D88;&#x606F;&#x4E2D;&#x4E0D;&#x518D;&#x4E0E;&#x52A8;&#x6001;&#x8868;&#x5B9E;&#x4F53;&#x8FDB;&#x884C;&#x6BD4;&#x8F83;&#x3002;&#x8FD9;&#x6837;&#x53EF;&#x4EE5;&#x6709;&#x6548;&#x5730;&#x9632;&#x6B62;&#x4E86;&#x8FDB;&#x4E00;&#x6B65;&#x7684;&#x731C;&#x6D4B;&#x3002;</p>
<blockquote>
<p>&#x6CE8;&#x610F;&#xFF1A;&#x5982;&#x679C;&#x653B;&#x51FB;&#x8005;&#x6709;&#x4E00;&#x4E2A;&#x53EF;&#x9760;&#x7684;&#x65B9;&#x6CD5;&#x6765;&#x91CD;&#x65B0;&#x5B89;&#x88C5;&#x503C;&#xFF0C;&#x53EA;&#x662F;&#x4ECE;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5220;&#x9664;&#x4E0E; header &#x5B57;&#x6BB5;&#x76F8;&#x5BF9;&#x5E94;&#x7684;&#x6761;&#x76EE;&#x53EF;&#x80FD;&#x662F;&#x65E0;&#x6548;&#x7684;&#x653B;&#x51FB;&#x3002;&#x4F8B;&#x5982;&#xFF0C;&#x5728;&#x7F51;&#x7EDC;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#x52A0;&#x8F7D;&#x56FE;&#x50CF;&#x7684;&#x8BF7;&#x6C42;&#x901A;&#x5E38;&#x5305;&#x542B; Cookie header &#x5B57;&#x6BB5;&#xFF08;&#x6B64;&#x7C7B;&#x653B;&#x51FB;&#x7684;&#x6F5C;&#x5728;&#x4EF7;&#x503C;&#x5F88;&#x9AD8;&#x7684;&#x76EE;&#x6807;&#xFF09;&#xFF0C;&#x5E76;&#x4E14;&#x7F51;&#x7AD9;&#x53EF;&#x4EE5;&#x8F7B;&#x677E;&#x5730;&#x5F3A;&#x5236;&#x52A0;&#x8F7D;&#x56FE;&#x50CF;&#xFF0C;&#x4ECE;&#x800C;&#x5237;&#x65B0;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x7684;&#x6761;&#x76EE;&#x3002;</p>
</blockquote>
<p>&#x8BE5;&#x54CD;&#x5E94;&#x53EF;&#x80FD;&#x4E0E; header &#x5B57;&#x6BB5;&#x503C;&#x7684;&#x957F;&#x5EA6;&#x6210;&#x53CD;&#x6BD4;&#x3002;&#x4E0E;&#x66F4;&#x77ED;&#x7684;&#x503C;&#x76F8;&#x6BD4;&#xFF0C;&#x66F4;&#x77ED;&#x7684;&#x503C;&#x66F4;&#x53EF;&#x80FD;&#x4EE5;&#x66F4;&#x5FEB;&#x7684;&#x901F;&#x5EA6;&#x6216;&#x66F4;&#x9AD8;&#x7684;&#x6982;&#x7387;&#x5C06; header &#x5B57;&#x6BB5;&#x6807;&#x8BB0;&#x4E3A;&#x4E0D;&#x518D;&#x4F7F;&#x7528;&#x7684;&#x52A8;&#x6001;&#x8868;&#x3002;</p>
<h3 id="3">(3). &#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762;</h3>
<p>&#x5B9E;&#x73B0;&#x65B9;&#x4E5F;&#x53EF;&#x4EE5;&#x9009;&#x62E9;&#x4E0D;&#x5BF9;&#x654F;&#x611F; header &#x5B57;&#x6BB5;&#x8FDB;&#x884C;&#x538B;&#x7F29;&#xFF0C;&#x800C;&#x662F;&#x5C06;&#x5176;&#x503C;&#x7F16;&#x7801;&#x4E3A;&#x5B57;&#x9762;&#xFF0C;&#x4ECE;&#x800C;&#x4FDD;&#x62A4;&#x5B83;&#x4EEC;&#x3002;</p>
<p>&#x4EC5;&#x4EC5;&#x53EA;&#x5728;&#x907F;&#x514D;&#x5728;&#x6240;&#x6709;&#x8DC3;&#x70B9;&#x4E0A;&#x90FD;&#x8FDB;&#x884C;&#x538B;&#x7F29;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x62D2;&#x7EDD;&#x751F;&#x6210; header &#x5B57;&#x6BB5;&#x7684;&#x7D22;&#x5F15;&#x8868;&#x793A;&#x624D;&#x6709;&#x6548;&#x3002;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E4%BB%8E%E4%B8%8D%E7%B4%A2%E5%BC%95%E7%9A%84%E5%AD%97%E9%9D%A2-header-%E5%AD%97%E6%AE%B5">&#x7B2C; 6.2.3 &#x8282;</a>&#xFF09;&#x53EF;&#x7528;&#x4E8E;&#x5411;&#x4E2D;&#x95F4;&#x4EF6;&#x53D1;&#x51FA;&#x4FE1;&#x53F7;&#xFF0C;&#x6307;&#x793A;&#x6709;&#x610F;&#x5C06;&#x7279;&#x5B9A;&#x503C;&#x4F5C;&#x4E3A;&#x5B57;&#x9762;&#x53D1;&#x9001;&#x3002;</p>
<p>&#x4E2D;&#x95F4;&#x4EF6;&#x4E0D;&#x5F97;&#x5C06;&#x4F7F;&#x7528;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x503C;&#x4E0E;&#x5C06;&#x5BF9;&#x5176;&#x8FDB;&#x884C;&#x7D22;&#x5F15;&#x7684;&#x53E6;&#x4E00;&#x4E2A;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x91CD;&#x65B0;&#x7F16;&#x7801;&#x3002;&#x5982;&#x679C;&#x4F7F;&#x7528; HPACK &#x8FDB;&#x884C;&#x91CD;&#x65B0;&#x7F16;&#x7801;&#xFF0C;&#x5219;&#x5FC5;&#x987B;&#x4F7F;&#x7528;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x3002;</p>
<p>&#x5BF9;&#x4E8E; header &#x5B57;&#x6BB5;&#x4F7F;&#x7528;&#x4ECE;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x9009;&#x62E9;&#x53D6;&#x51B3;&#x4E8E;&#x591A;&#x4E2A;&#x56E0;&#x7D20;&#x3002;&#x7531;&#x4E8E; HPACK &#x4E0D;&#x80FD;&#x9632;&#x6B62;&#x731C;&#x6D4B;&#x6574;&#x4E2A; header &#x5B57;&#x6BB5;&#x503C;&#xFF0C;&#x56E0;&#x6B64;&#x653B;&#x51FB;&#x8005;&#x66F4;&#x5BB9;&#x6613;&#x6062;&#x590D;&#x77ED;&#x7684;&#x6216;&#x4F4E;&#x71B5;&#x7684;&#x503C;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x7F16;&#x7801;&#x5668;&#x53EF;&#x80FD;&#x9009;&#x62E9;&#x4E0D;&#x7D22;&#x5F15;&#x5177;&#x6709;&#x4F4E;&#x71B5;&#x7684;&#x503C;&#x3002;</p>
<p>&#x7F16;&#x7801;&#x5668;&#x8FD8;&#x53EF;&#x80FD;&#x9009;&#x62E9;&#x4E0D;&#x4E3A;&#x88AB;&#x8BA4;&#x4E3A;&#x5177;&#x6709;&#x5F88;&#x9AD8;&#x4EF7;&#x503C;&#x6216;&#x5BF9;&#x6062;&#x590D;&#x654F;&#x611F;&#x7684; header &#x5B57;&#x6BB5;&#xFF08;&#x4F8B;&#x5982; Cookie &#x6216;&#x6388;&#x6743; header &#x5B57;&#x6BB5;&#xFF09;&#x7684;&#x503C;&#x589E;&#x52A0;&#x7D22;&#x5F15;&#x3002;</p>
<p>&#x76F8;&#x53CD;&#xFF0C;&#x5982;&#x679C;&#x503C;&#x88AB;&#x516C;&#x5F00;&#x4E86;&#xFF0C;&#x5219;&#x7F16;&#x7801;&#x5668;&#x53EF;&#x80FD;&#x66F4;&#x559C;&#x6B22;&#x7D22;&#x5F15;&#x503C;&#x5F88;&#x5C0F;&#x6216;&#x6CA1;&#x6709;&#x503C;&#x7684; header &#x5B57;&#x6BB5;&#x7684;&#x7D22;&#x5F15;&#x503C;&#x3002;&#x4F8B;&#x5982;&#xFF0C;User-Agent header &#x5B57;&#x6BB5;&#x5728;&#x8BF7;&#x6C42;&#x4E4B;&#x95F4;&#x901A;&#x5E38;&#x4E0D;&#x4F1A;&#x53D1;&#x751F;&#x53D8;&#x5316;&#xFF0C;&#x800C;&#x662F;&#x53D1;&#x9001;&#x5230;&#x4EFB;&#x4F55;&#x670D;&#x52A1;&#x5668;&#x3002;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x786E;&#x8BA4;&#x5DF2;&#x4F7F;&#x7528;&#x7279;&#x5B9A;&#x7684; User-Agent &#x503C;&#x63D0;&#x4F9B;&#x7684;&#x4EF7;&#x503C;&#x5F88;&#x5C0F;&#x3002;</p>
<p>&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x968F;&#x7740;&#x65B0;&#x7684;&#x653B;&#x51FB;&#x4E0D;&#x65AD;&#x88AB;&#x53D1;&#x73B0;&#xFF0C;&#x8FD9;&#x4E9B;&#x51B3;&#x5B9A;&#x4F7F;&#x7528;&#x6C38;&#x4E0D;&#x7D22;&#x5F15;&#x7684;&#x5B57;&#x9762;&#x8868;&#x793A;&#x5F62;&#x5F0F;&#x7684;&#x6807;&#x51C6;&#x5C06;&#x968F;&#x7740;&#x65F6;&#x95F4;&#x7684;&#x63A8;&#x79FB;&#x800C;&#x6F14;&#x53D8;&#x3002;</p>
<h3 id="2">2. &#x9759;&#x6001;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;</h3>
<p>&#x76EE;&#x524D;&#x8FD8;&#x6CA1;&#x6709;&#x9488;&#x5BF9;&#x9759;&#x6001;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x653B;&#x51FB;&#x3002;&#x4E00;&#x9879;&#x7814;&#x7A76;&#x8868;&#x660E;&#xFF0C;&#x4F7F;&#x7528;&#x9759;&#x6001;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x8868;&#x4F1A;&#x9020;&#x6210;&#x4FE1;&#x606F;&#x6CC4;&#x6F0F;&#xFF1B; &#x4F46;&#x662F;&#xFF0C;&#x540C;&#x4E00;&#x9879;&#x7814;&#x7A76;&#x5F97;&#x51FA;&#x7684;&#x7ED3;&#x8BBA;&#x662F;&#xFF0C;&#x653B;&#x51FB;&#x8005;&#x65E0;&#x6CD5;&#x5229;&#x7528;&#x6B64;&#x4FE1;&#x606F;&#x6CC4;&#x6F0F;&#x6765;&#x6062;&#x590D;&#x4EFB;&#x4F55;&#x6709;&#x610F;&#x4E49;&#x7684;&#x4FE1;&#x606F;&#x91CF;&#xFF08;&#x8BF7;&#x53C2;&#x9605; <a href="https://tools.ietf.org/html/rfc7541#ref-PETAL">[PETAL]</a>&#xFF09;</p>
<blockquote>
<p>&#x52A8;&#x6001;&#x7684;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x5BB9;&#x6613;&#x53D7;&#x5230;&#x653B;&#x51FB;&#xFF01;</p>
</blockquote>
<h3 id="3">3. &#x5185;&#x5B58;&#x7BA1;&#x7406;</h3>
<p>&#x653B;&#x51FB;&#x8005;&#x53EF;&#x4EE5;&#x5C1D;&#x8BD5;&#x4F7F;&#x7AEF;&#x70B9;&#x8017;&#x5C3D;&#x5176;&#x5185;&#x5B58;&#x3002;HPACK &#x65E8;&#x5728;&#x9650;&#x5236;&#x7AEF;&#x70B9;&#x5206;&#x914D;&#x7684;&#x5185;&#x5B58;&#x5CF0;&#x503C;&#x548C;&#x72B6;&#x6001;&#x91CF;&#x3002;</p>
<p>&#x538B;&#x7F29;&#x7A0B;&#x5E8F;&#x4F7F;&#x7528;&#x7684;&#x5185;&#x5B58;&#x91CF;&#x53D7;&#x5230;&#x9075;&#x5FAA; HPACK &#x534F;&#x8BAE;&#x7684;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5B9A;&#x4E49;&#x7684;&#x6700;&#x5927; size &#x9650;&#x5236;&#x3002;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x6B64;&#x503C;&#x7531;&#x89E3;&#x7801;&#x5668;&#x901A;&#x8FC7;&#x8BBE;&#x7F6E;&#x53C2;&#x6570; SETTINGS_HEADER_TABLE_SIZE &#x6765;&#x63A7;&#x5236;&#x7684;&#xFF08;&#x8BF7;&#x53C2;&#x89C1; <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#2-defined-settings-parameters">[HTTP2]&#x7684; 6.5.2 &#x8282;</a>&#xFF09;&#x3002;&#x6B64;&#x9650;&#x5236;&#x65E2;&#x8003;&#x8651;&#x4E86;&#x52A8;&#x6001;&#x8868;&#x4E2D;&#x5B58;&#x50A8;&#x7684;&#x6570;&#x636E;&#x5927;&#x5C0F;&#xFF0C;&#x53C8;&#x8003;&#x8651;&#x4E86;&#x5C11;&#x91CF;&#x7684;&#x5F00;&#x9500;&#x3002;</p>
<p>&#x89E3;&#x7801;&#x5668;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x4E3A;&#x52A8;&#x6001;&#x8868;&#x7684;&#x6700;&#x5927; size &#x8BBE;&#x7F6E;&#x9002;&#x5F53;&#x7684;&#x503C;&#x6765;&#x9650;&#x5236;&#x72B6;&#x6001;&#x5B58;&#x50A8;&#x5668;&#x7684;&#x4F7F;&#x7528;&#x91CF;&#x3002;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x8FD9;&#x662F;&#x901A;&#x8FC7;&#x4E3A; SETTINGS_HEADER_TABLE_SIZE &#x53C2;&#x6570;&#x8BBE;&#x7F6E;&#x9002;&#x5F53;&#x7684;&#x503C;&#x6765;&#x5B9E;&#x73B0;&#x7684;&#x3002;&#x7F16;&#x7801;&#x5668;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x53D1;&#x4FE1;&#x53F7;&#x901A;&#x77E5;&#x52A8;&#x6001;&#x8868; size &#x5C0F;&#x4E8E;&#x89E3;&#x7801;&#x5668;&#x5141;&#x8BB8;&#x7684;&#x72B6;&#x6001;&#x6765;&#x9650;&#x5236;&#x5176;&#x4F7F;&#x7528;&#x7684;&#x72B6;&#x6001;&#x5B58;&#x50A8;&#x5668;&#x7684;&#x6570;&#x91CF;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#3-%E5%8A%A8%E6%80%81%E8%A1%A8%E5%A4%A7%E5%B0%8F%E6%9B%B4%E6%96%B0">&#x7B2C; 6.3 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x7F16;&#x7801;&#x5668;&#x6216;&#x89E3;&#x7801;&#x5668;&#x6D88;&#x8017;&#x7684;&#x4E34;&#x65F6;&#x5185;&#x5B58;&#x91CF;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x987A;&#x5E8F;&#x5904;&#x7406; header &#x5B57;&#x6BB5;&#x6765;&#x9650;&#x5236;&#x3002;&#x5B9E;&#x73B0;&#x65B9;&#x4E0D;&#x9700;&#x8981;&#x4FDD;&#x7559; header &#x5B57;&#x6BB5;&#x7684;&#x5B8C;&#x6574;&#x5217;&#x8868;&#x3002;&#x4F46;&#x662F;&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x7531;&#x4E8E;&#x5176;&#x4ED6;&#x539F;&#x56E0;&#xFF0C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x53EF;&#x80FD;&#x6709;&#x5FC5;&#x8981;&#x4FDD;&#x7559;&#x5B8C;&#x6574;&#x7684; header &#x5217;&#x8868;&#x3002;&#x5373;&#x4F7F; HPACK &#x4E0D;&#x4F1A;&#x5F3A;&#x8FEB;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x53D1;&#x751F;&#xFF0C;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x7EA6;&#x675F;&#x4E5F;&#x53EF;&#x80FD;&#x4F7F;&#x5F97;&#x5B83;&#x53D8;&#x5F97;&#x6709;&#x5FC5;&#x8981;&#x3002;</p>
<h3 id="4">4. &#x5B9E;&#x73B0;&#x65B9;&#x7684;&#x9650;&#x5236;</h3>
<p>HPACK &#x7684;&#x5B9E;&#x73B0;&#x65B9;&#x9700;&#x8981;&#x786E;&#x4FDD;&#x6574;&#x6570;&#x7684;&#x5927;&#x503C;&#xFF0C;&#x6574;&#x6570;&#x7684;&#x957F;&#x7F16;&#x7801;&#x6216;&#x957F;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x4E0D;&#x4F1A;&#x9020;&#x6210;&#x5B89;&#x5168;&#x6F0F;&#x6D1E;&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x5B9E;&#x73B0;&#x5FC5;&#x987B;&#x4E3A;&#x5B83;&#x63A5;&#x53D7;&#x7684;&#x6574;&#x6570;&#x503C;&#x548C;&#x7F16;&#x7801;&#x957F;&#x5EA6;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x9650;&#x5236;&#xFF08;&#x8BF7;&#x53C2;&#x9605;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#1-integer-representation">&#x7B2C; 5.1 &#x8282;</a>&#xFF09;&#x3002;&#x540C;&#x6837;&#xFF0C;&#x5B83;&#x5FC5;&#x987B;&#x4E3A;&#x5B57;&#x7B26;&#x4E32;&#x5B57;&#x9762;&#x8BBE;&#x7F6E;&#x4E00;&#x4E2A;&#x9650;&#x5236;&#x957F;&#x5EA6;&#xFF08;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2_Header-Compression.md#2-string-literal-representation">&#x7B2C; 5.2 &#x8282;</a>&#xFF09;&#x3002;</p>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://tools.ietf.org/html/rfc7541">RFC 7541</a></p>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="HTTPS://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="HTTPS://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/http2-header-compression/"><strong>GHOST_URL</strong>/http2-header-compression/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Hypertext Transfer Protocol Version 2 (HTTP/2)]]></title><description><![CDATA[<!--kg-card-begin: markdown--><h2 id="tableofcontents">Table of Contents</h2>
<h2 id="1introduction">1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#%E8%A7%A3%E5%BC%80-http2-%E7%9A%84%E9%9D%A2%E7%BA%B1http2-%E6%98%AF%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%E7%9A%84">Introduction</a></h2>
<h2 id="2http2protocoloverview">2. HTTP/2 Protocol Overview</h2>
<ul>
<li>2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#%E4%B8%80-http2-protocol-overview">Document Organization</a></li>
<li>2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#%E4%B8%80-http2-protocol-overview">Conventions and Terminology</a></li>
</ul>
<h2 id="3startinghttp2">3. Starting HTTP/2</h2>
<ul>
<li>3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#1-http2-version-identification">HTTP/2 Version Identification</a></li>
<li>3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#2-starting-http2-for-http-uris">Starting HTTP/2 for &quot;http&quot; URIs</a></li>
<li>3.2.1 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#3-http2-settings-header-field">HTTP2-Settings Header Field</a></li>
<li>3.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#4-starting-http2-for-https-uris">Starting HTTP/2</a></li></ul>]]></description><link>https://halfrost.com/http2_rfc7540/</link><guid isPermaLink="false">634360bbd892dc307476ccda</guid><category><![CDATA[Protocol]]></category><category><![CDATA[HTTP]]></category><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 09 Jun 2019 15:28:00 GMT</pubDate><media:content url="https://img.halfrost.com/Blog/ArticleTitleImage/129_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="tableofcontents">Table of Contents</h2>
<h2 id="1introduction">1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#%E8%A7%A3%E5%BC%80-http2-%E7%9A%84%E9%9D%A2%E7%BA%B1http2-%E6%98%AF%E5%A6%82%E4%BD%95%E5%BB%BA%E7%AB%8B%E8%BF%9E%E6%8E%A5%E7%9A%84">Introduction</a></h2>
<h2 id="2http2protocoloverview">2. HTTP/2 Protocol Overview</h2>
<ul>
<li>2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#%E4%B8%80-http2-protocol-overview">Document Organization</a></li>
<li>2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#%E4%B8%80-http2-protocol-overview">Conventions and Terminology</a></li>
</ul>
<h2 id="3startinghttp2">3. Starting HTTP/2</h2>
<ul>
<li>3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#1-http2-version-identification">HTTP/2 Version Identification</a></li>
<li>3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#2-starting-http2-for-http-uris">Starting HTTP/2 for &quot;http&quot; URIs</a></li>
<li>3.2.1 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#3-http2-settings-header-field">HTTP2-Settings Header Field</a></li>
<li>3.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#4-starting-http2-for-https-uris">Starting HTTP/2 for &quot;https&quot; URIs</a></li>
<li>3.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#5-starting-http2-with-prior-knowledge">Starting HTTP/2 with Prior Knowledge</a></li>
<li>3.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-begin.md#6-http2-connection-preface">HTTP/2 Connection Preface</a></li>
</ul>
<h2 id="4httpframes">4. HTTP Frames</h2>
<ul>
<li>4.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E4%B8%80-frame-format-%E5%B8%A7%E6%A0%BC%E5%BC%8F">Frame Format</a></li>
<li>4.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E4%BA%8C-frame-size-%E5%B8%A7%E5%A4%A7%E5%B0%8F">Frame Size</a></li>
<li>4.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E4%B8%89-header-compression-and-decompression">Header Compression and Decompression</a></li>
</ul>
<h2 id="5streamsandmultiplexing">5. Streams and Multiplexing</h2>
<ul>
<li>5.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E5%9B%9B-stream-%E6%B5%81%E7%8A%B6%E6%80%81%E6%9C%BA">Stream States</a></li>
<li>5.1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#1-stream-%E6%A0%87%E8%AF%86%E7%AC%A6">Stream Identifiers</a></li>
<li>5.1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#2-stream-%E5%B9%B6%E5%8F%91">Stream Concurrency</a></li>
<li>5.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E4%BA%94-%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6">Flow Control</a></li>
<li>5.2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#1-%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E5%8E%9F%E5%88%99">Flow-Control Principles</a></li>
<li>5.2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#2-%E9%80%82%E5%BD%93%E7%9A%84%E4%BD%BF%E7%94%A8%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6">Appropriate Use of Flow Control</a></li>
<li>5.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E5%85%AD-stream-%E4%BC%98%E5%85%88%E7%BA%A7">Stream Priority</a></li>
<li>5.3.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#1-stream-%E4%BE%9D%E8%B5%96">Stream Dependencies</a></li>
<li>5.3.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#2-%E4%BE%9D%E8%B5%96%E6%9D%83%E9%87%8D">Dependency Weighting</a></li>
<li>5.3.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#3-%E4%BC%98%E5%85%88%E7%BA%A7%E8%B0%83%E6%95%B4">Reprioritization</a></li>
<li>5.3.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#4-%E4%BC%98%E5%85%88%E7%BA%A7%E7%9A%84%E7%8A%B6%E6%80%81%E7%AE%A1%E7%90%86">Prioritization State Management</a></li>
<li>5.3.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#5-%E9%BB%98%E8%AE%A4%E4%BC%98%E5%85%88%E7%BA%A7">Default Priorities</a></li>
<li>5.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E4%B8%83-%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86">Error Handling</a></li>
<li>5.4.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#1-%E8%BF%9E%E6%8E%A5%E9%94%99%E8%AF%AF%E7%9A%84%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86">Connection Error Handling</a></li>
<li>5.4.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#2-%E6%B5%81%E9%94%99%E8%AF%AF%E7%9A%84%E9%94%99%E8%AF%AF%E5%A4%84%E7%90%86">Stream Error Handling</a></li>
<li>5.4.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#3-%E8%BF%9E%E6%8E%A5%E7%BB%88%E6%AD%A2">Connection Termination</a></li>
<li>5.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames.md#%E5%85%AB-http2-%E4%B8%AD%E7%9A%84%E6%89%A9%E5%B1%95">Extending HTTP/2</a></li>
</ul>
<h2 id="6framedefinitions">6. Frame Definitions</h2>
<ul>
<li>6.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E4%B8%80-data-%E5%B8%A7">DATA</a></li>
<li>6.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E4%BA%8C-headers-%E5%B8%A7">HEADERS</a></li>
<li>6.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E4%B8%89-priority-%E5%B8%A7">PRIORITY</a></li>
<li>6.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E5%9B%9B-rst_stream-%E5%B8%A7">RST_STREAM</a></li>
<li>6.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E4%BA%94-settings-%E5%B8%A7">SETTINGS</a></li>
<li>6.5.1 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#1-settings-format">SETTINGS Format</a></li>
<li>6.5.2 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#2-defined-settings-parameters">Defined SETTINGS Parameters</a></li>
<li>6.5.3 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#3-settings-synchronization">Settings Synchronization</a></li>
<li>6.6. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E5%85%AD-push_promise-%E5%B8%A7">PUSH_PROMISE</a></li>
<li>6.7. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E4%B8%83-ping-%E5%B8%A7">PING</a></li>
<li>6.8. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E5%85%AB-goaway-%E5%B8%A7">GOAWAY</a></li>
<li>6.9. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E4%B9%9D-window_update-%E5%B8%A7">WINDOW_UPDATE</a></li>
<li>6.9.1 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#1-the-flow-control-window">The Flow-Control Window</a></li>
<li>6.9.2 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#2-initial-flow-control-window-size">Initial Flow-Control Window Size</a></li>
<li>6.9.3 <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#3-reducing-the-stream-window-size">Reducing the Stream Window Size</a></li>
<li>6.10. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E5%8D%81-continuation-%E5%B8%A7">CONTINUATION</a></li>
</ul>
<h2 id="7errorcodes">7. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Frames-Definitions.md#%E5%8D%81%E4%B8%80-error-codes">Error Codes</a></h2>
<h2 id="8httpmessageexchanges">8. HTTP Message Exchanges</h2>
<ul>
<li>8.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#%E4%B8%80-http-requestresponse-exchange">HTTP Request/Response Exchange</a></li>
<li>8.1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#1-upgrading-from-http2">Upgrading from HTTP/2</a></li>
<li>8.1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#2-http-header-fields">HTTP Header Fields</a></li>
<li>8.1.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#3-examples">Examples</a></li>
<li>8.1.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#4-request-reliability-mechanisms-in-http2">Request Reliability Mechanisms in HTTP/2</a></li>
<li>8.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#%E4%BA%8C-server-push">Server Push</a></li>
<li>8.2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#1-push-requests">Push Requests</a></li>
<li>8.2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#2-push-responses">Push Responses</a></li>
<li>8.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-HTTP-Semantics.md#%E4%B8%89-the-connect-method">The CONNECT Method</a></li>
</ul>
<h2 id="9additionalhttprequirementsconsiderations">9. Additional HTTP Requirements/Considerations</h2>
<ul>
<li>9.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#1-%E8%BF%9E%E6%8E%A5%E7%AE%A1%E7%90%86">Connection Management</a></li>
<li>9.1.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#1-%E8%BF%9E%E6%8E%A5%E9%87%8D%E7%94%A8">Connection Reuse</a></li>
<li>9.1.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#2-421-%E7%8A%B6%E6%80%81%E7%A0%81">The 421 (Misdirected Request) Status Code</a></li>
<li>9.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#2-%E4%BD%BF%E7%94%A8-tls-%E7%89%B9%E6%80%A7">Use of TLS Features</a></li>
<li>9.2.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#1-tls-12-%E7%89%B9%E6%80%A7">TLS 1.2 Features</a></li>
<li>9.2.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#2-tls-12-%E5%8A%A0%E5%AF%86%E5%A5%97%E4%BB%B6">TLS 1.2 Cipher Suites</a></li>
</ul>
<h2 id="10securityconsiderations">10. Security Considerations</h2>
<ul>
<li>10.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#1-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9D%83%E9%99%90">Server Authority</a></li>
<li>10.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#2-%E8%B7%A8%E5%8D%8F%E8%AE%AE%E6%94%BB%E5%87%BB">Cross-Protocol Attacks</a></li>
<li>10.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#3-%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%B0%81%E8%A3%85%E6%94%BB%E5%87%BB">Intermediary Encapsulation Attacks</a></li>
<li>10.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#4-%E6%8E%A8%E9%80%81%E5%93%8D%E5%BA%94%E7%9A%84%E5%8F%AF%E7%BC%93%E5%AD%98%E6%80%A7">Cacheability of Pushed Responses</a></li>
<li>10.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#5-%E5%85%B3%E4%BA%8E%E6%8B%92%E7%BB%9D%E6%9C%8D%E5%8A%A1">Denial-of-Service Considerations</a></li>
<li>10.5.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#1-%E9%99%90%E5%88%B6%E5%A4%B4%E5%9D%97%E5%A4%A7%E5%B0%8F">Limits on Header Block Size</a></li>
<li>10.5.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#2-%E8%BF%9E%E6%8E%A5%E9%97%AE%E9%A2%98">CONNECT Issues</a></li>
<li>10.6. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#6-%E4%BD%BF%E7%94%A8%E5%8E%8B%E7%BC%A9">Use of Compression</a></li>
<li>10.7. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#7-%E4%BD%BF%E7%94%A8%E5%A1%AB%E5%85%85">Use of Padding</a></li>
<li>10.8. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#8-%E5%85%B3%E4%BA%8E%E9%9A%90%E7%A7%81%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9">Privacy Considerations</a></li>
</ul>
<h2 id="11ianaconsiderations">11. IANA Considerations</h2>
<ul>
<li>11.1. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#1-http2-%E6%A0%87%E8%AF%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%B3%A8%E5%86%8C">Registration of HTTP/2 Identification Strings</a></li>
<li>11.2. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#2-%E5%B8%A7%E7%B1%BB%E5%9E%8B%E6%B3%A8%E5%86%8C">Frame Type Registry</a></li>
<li>11.3. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#3-settings-%E6%B3%A8%E5%86%8C">Settings Registry</a></li>
<li>11.4. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#4-%E9%94%99%E8%AF%AF%E7%A0%81%E6%B3%A8%E5%86%8C">Error Code Registry</a></li>
<li>11.5. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#5-http2-settings-%E5%A4%B4%E5%AD%97%E6%AE%B5%E6%B3%A8%E5%86%8C">HTTP2-Settings Header Field Registration</a></li>
<li>11.6. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#6-pri-%E6%96%B9%E6%B3%95%E6%B3%A8%E5%86%8C">PRI Method Registration</a></li>
<li>11.7. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#7-421-http-%E7%8A%B6%E6%80%81%E7%A0%81">The 421 (Misdirected Request) HTTP Status Code</a></li>
<li>11.8. <a href="https://github.com/halfrost/Halfrost-Field/blob/master/contents/Protocol/HTTP:2-Considerations.md#8-%E5%85%B3%E4%BA%8E-h2c-%E5%8D%87%E7%BA%A7-token">The h2c Upgrade Token</a></li>
</ul>
<h2 id="12references">12. References</h2>
<blockquote>
<img src="https://img.halfrost.com/Blog/ArticleTitleImage/129_0.png" alt="Hypertext Transfer Protocol Version 2 (HTTP/2)"><p>&#x8FD9;&#x4E00;&#x7AE0;&#x90FD;&#x662F;&#x5F15;&#x7528;&#x7684;&#x8BBA;&#x6587;&#xFF0C;&#x6240;&#x4EE5;&#x5C31;&#x4E0D;&#x7FFB;&#x8BD1;&#x4E86;&#x3002;</p>
</blockquote>
<ul>
<li>12.1. Normative References</li>
<li>12.2. Informative References</li>
</ul>
<h2 id="appendixatls12ciphersuiteblacklist">Appendix A. TLS 1.2 Cipher Suite Black List</h2>
<blockquote>
<p>&#x8FD9;&#x4E00;&#x7AE0;&#x662F; TLS 1.2 &#x4E2D;&#x52A0;&#x5165;&#x9ED1;&#x540D;&#x5355;&#x7684;&#x52A0;&#x5BC6;&#x5957;&#x4EF6;</p>
</blockquote>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a></p>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="HTTPS://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="HTTPS://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/http2_rfc7540/">https://halfrost.com/http2_rfc7540/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[HTTP/2 中的常见问题]]></title><description><![CDATA[<!--kg-card-begin: markdown--><p>&#x4EE5;&#x4E0B;&#x662F;&#x6709;&#x5173; HTTP/2 &#x7684;&#x5E38;&#x89C1;&#x95EE;&#x9898;&#x3002;</p>
<h2 id>&#x4E00;. &#x4E00;&#x822C;&#x7684;&#x95EE;&#x9898;</h2>
<h3 id="1http">1. &#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x4FEE;&#x6539; HTTP&#xFF1F;</h3>
<p>HTTP/1.1 &#x5728; Web &#x4E0A;&#x5DF2;&#x7ECF;&#x670D;&#x52A1;&#x4E86; 15 &#x5E74;&#x4EE5;&#x4E0A;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x7684;&#x7F3A;&#x70B9;</p>]]></description><link>https://halfrost.com/http2-frequently-asked-questions/</link><guid isPermaLink="false">634360bbd892dc307476ccd9</guid><category><![CDATA[Protocol]]></category><category><![CDATA[HTTP]]></category><category><![CDATA[HTTP/2]]></category><dc:creator><![CDATA[一缕殇流化隐半边冰霜]]></dc:creator><pubDate>Sun, 26 May 2019 15:25:00 GMT</pubDate><media:content url="https://img.halfrost.com/Blog/ArticleTitleImage/131_0.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://img.halfrost.com/Blog/ArticleTitleImage/131_0.png" alt="HTTP/2 &#x4E2D;&#x7684;&#x5E38;&#x89C1;&#x95EE;&#x9898;"><p>&#x4EE5;&#x4E0B;&#x662F;&#x6709;&#x5173; HTTP/2 &#x7684;&#x5E38;&#x89C1;&#x95EE;&#x9898;&#x3002;</p>
<h2 id>&#x4E00;. &#x4E00;&#x822C;&#x7684;&#x95EE;&#x9898;</h2>
<h3 id="1http">1. &#x4E3A;&#x4EC0;&#x4E48;&#x8981;&#x4FEE;&#x6539; HTTP&#xFF1F;</h3>
<p>HTTP/1.1 &#x5728; Web &#x4E0A;&#x5DF2;&#x7ECF;&#x670D;&#x52A1;&#x4E86; 15 &#x5E74;&#x4EE5;&#x4E0A;&#xFF0C;&#x4F46;&#x662F;&#x5B83;&#x7684;&#x7F3A;&#x70B9;&#x6B63;&#x5728;&#x5F00;&#x59CB;&#x663E;&#x73B0;&#x3002;&#x52A0;&#x8F7D;&#x7F51;&#x9875;&#x6BD4;&#x4EE5;&#x5F80;&#x4EFB;&#x4F55;&#x65F6;&#x5019;&#x90FD;&#x9700;&#x8981;&#x66F4;&#x591A;&#x8D44;&#x6E90;(&#x8BF7;&#x53C2;&#x9605;<a href="http://httparchive.org/trends.php#bytesTotal&amp;reqTotal">HTTP Archive&#x2019;s page size statistics</a>)&#xFF0C;&#x5E76;&#x4E14;&#x8981;&#x9AD8;&#x6548;&#x5730;&#x52A0;&#x8F7D;&#x6240;&#x6709;&#x8FD9;&#x4E9B;&#x8D44;&#x6E90;&#x975E;&#x5E38;&#x56F0;&#x96BE;&#xFF0C;&#x56E0;&#x4E3A;&#x4E8B;&#x5B9E;&#x4E0A;&#xFF0C;HTTP &#x53EA;&#x5141;&#x8BB8;&#x6BCF;&#x4E2A; TCP &#x8FDE;&#x63A5;&#x6709;&#x4E00;&#x4E2A;&#x672A;&#x5B8C;&#x6210;&#x7684;&#x8BF7;&#x6C42;&#x3002;</p>
<p>&#x8FC7;&#x53BB;&#xFF0C;&#x6D4F;&#x89C8;&#x5668;&#x4F7F;&#x7528;&#x591A;&#x4E2A; TCP &#x8FDE;&#x63A5;&#x6765;&#x53D1;&#x51FA;&#x5E76;&#x884C;&#x8BF7;&#x6C42;&#x3002;&#x4F46;&#x662F;&#xFF0C;&#x8FD9;&#x662F;&#x6709;&#x5C40;&#x9650;&#x6027;&#x7684;&#x3002;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x7684;&#x8FDE;&#x63A5;&#x8FC7;&#x591A;&#xFF0C;&#x5219;&#x5C06;&#x9002;&#x5F97;&#x5176;&#x53CD;(TCP &#x62E5;&#x585E;&#x63A7;&#x5236;&#x5C06;&#x88AB;&#x65E0;&#x6548;&#x5316;&#xFF0C;&#x5BFC;&#x81F4;&#x7684;&#x7528;&#x585E;&#x4E8B;&#x4EF6;&#x5C06;&#x4F1A;&#x635F;&#x5BB3;&#x6027;&#x80FD;&#x548C;&#x7F51;&#x7EDC;)&#xFF0C;&#x5E76;&#x4E14;&#x4ECE;&#x6839;&#x672C;&#x4E0A;&#x8BB2;&#x662F;&#x4E0D;&#x516C;&#x5E73;&#x7684;(&#x56E0;&#x4E3A;&#x6D4F;&#x89C8;&#x5668;&#x4F1A;&#x5360;&#x7528;&#x8BB8;&#x591A;&#x672C;&#x4E0D;&#x8BE5;&#x5C5E;&#x4E8E;&#x5B83;&#x7684;&#x8D44;&#x6E90;)&#x3002;&#x540C;&#x65F6;&#xFF0C;&#x5927;&#x91CF;&#x8BF7;&#x6C42;&#x610F;&#x5473;&#x7740;&#x201C;&#x5728;&#x7EBF;&#x201D;&#x4E0A;&#x6709;&#x5927;&#x91CF;&#x91CD;&#x590D;&#x6570;&#x636E;&#x3002;</p>
<p>&#x8FD9;&#x4E24;&#x4E2A;&#x56E0;&#x7D20;&#x90FD;&#x610F;&#x5473;&#x7740; HTTP/1.1 &#x8BF7;&#x6C42;&#x6709;&#x5F88;&#x591A;&#x4E0E;&#x4E4B;&#x76F8;&#x5173;&#x7684;&#x5F00;&#x9500;&#x3002;&#x5982;&#x679C;&#x8BF7;&#x6C42;&#x8FC7;&#x591A;&#xFF0C;&#x5219;&#x4F1A;&#x5F71;&#x54CD;&#x6027;&#x80FD;&#x3002;</p>
<p>&#x8FD9;&#x4F7F;&#x5F97;&#x4E1A;&#x754C;&#x8BEF;&#x89E3;&#x4E86;&#x201C;&#x6700;&#x4F73;&#x5B9E;&#x8DF5;&#x201D;&#xFF0C;&#x8FDB;&#x884C;&#x8BF8;&#x5982; spriting &#x56FE;&#x7247;&#x5408;&#x5E76;&#xFF0C;data: inlining &#x5185;&#x8054;&#x6570;&#x636E;&#xFF0C;Domain Sharding &#x57DF;&#x540D;&#x5206;&#x7247;&#x548C; Concatenation &#x6587;&#x4EF6;&#x5408;&#x5E76;&#x4E4B;&#x7C7B;&#x7684;&#x4E8B;&#x60C5;&#x3002;&#x8FD9;&#x4E9B; hack &#x884C;&#x4E3A;&#x8868;&#x660E;&#x534F;&#x8BAE;&#x672C;&#x8EAB;&#x5B58;&#x5728;&#x6F5C;&#x5728;&#x95EE;&#x9898;&#xFF0C;&#x5728;&#x4F7F;&#x7528;&#x7684;&#x65F6;&#x5019;&#x4F1A;&#x51FA;&#x73B0;&#x5F88;&#x591A;&#x95EE;&#x9898;&#x3002;</p>
<h3 id="2http2">2. &#x8C01;&#x5236;&#x5B9A;&#x4E86; HTTP/2&#xFF1F;</h3>
<p>HTTP/2 &#x662F;&#x7531; <a href="http://www.ietf.org/">IETF</a> &#x7684; <a href="https://httpwg.github.io/">HTTP &#x5DE5;&#x4F5C;&#x7EC4;</a>&#x5F00;&#x53D1;&#x7684;&#xFF0C;&#x8BE5;&#x5DE5;&#x4F5C;&#x7EC4;&#x7EF4;&#x62A4; HTTP &#x534F;&#x8BAE;&#x3002;&#x5B83;&#x7531;&#x8BB8;&#x591A; HTTP &#x5B9E;&#x73B0;&#x8005;&#xFF0C;&#x7528;&#x6237;&#xFF0C;&#x7F51;&#x7EDC;&#x8FD0;&#x8425;&#x5546;&#x548C; HTTP &#x4E13;&#x5BB6;&#x7EC4;&#x6210;&#x3002;</p>
<p>&#x8BF7;&#x6CE8;&#x610F;&#xFF0C;&#x867D;&#x7136;&#x6211;&#x4EEC;&#x7684;<a href="http://lists.w3.org/Archives/Public/ietf-http-wg/">&#x90AE;&#x4EF6;&#x5217;&#x8868;</a>&#x6258;&#x7BA1;&#x5728; W3C &#x7F51;&#x7AD9;&#x4E0A;&#xFF0C;&#x4F46;&#x8FD9;&#x5E76;&#x4E0D;&#x662F; W3C &#x7684;&#x52AA;&#x529B;&#x3002;&#x4F46;&#x662F;&#xFF0C;Tim Berners-Lee &#x548C; W3C TAG &#x4E0E; WG &#x7684;&#x5DE5;&#x4F5C;&#x8FDB;&#x5EA6;&#x4FDD;&#x6301;&#x540C;&#x6B65;&#x3002;</p>
<p>&#x5927;&#x91CF;&#x7684;&#x4EBA;&#x4E3A;&#x8FD9;&#x9879;&#x5DE5;&#x4F5C;&#x505A;&#x51FA;&#x4E86;&#x8D21;&#x732E;&#xFF0C;&#x6700;&#x6D3B;&#x8DC3;&#x7684;&#x53C2;&#x4E0E;&#x8005;&#x5305;&#x62EC;&#x6765;&#x81EA;&#x8BF8;&#x5982; Firefox&#xFF0C;Chrome&#xFF0C;Twitter&#xFF0C;Microsoft &#x7684; HTTP stack&#xFF0C;Curl &#x548C; Akamai &#x7B49;&#x201C;&#x5927;&#x578B;&#x201D;&#x9879;&#x76EE;&#x7684;&#x5DE5;&#x7A0B;&#x5E08;&#xFF0C;&#x4EE5;&#x53CA;&#x8BB8;&#x591A;&#x8BF8;&#x5982; Python&#x3001;Ruby &#x548C; NodeJS &#x4E4B;&#x7C7B;&#x7684; HTTP &#x5B9E;&#x73B0;&#x8005;&#x3002;</p>
<p>&#x8981;&#x4E86;&#x89E3;&#x6709;&#x5173; IETF &#x7684;&#x66F4;&#x591A;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="http://www.ietf.org/tao.html">Tao of the IETF</a>&#x3002;&#x60A8;&#x8FD8;&#x53EF;&#x4EE5;&#x5728; Github &#x7684;&#x8D21;&#x732E;&#x8005;&#x56FE;&#x4E2D;&#x4E86;&#x89E3;&#x8C01;&#x4E3A;&#x89C4;&#x8303;&#x505A;&#x51FA;&#x4E86;&#x8D21;&#x732E;&#xFF0C;&#x4EE5;&#x53CA;&#x8C01;&#x5728;&#x6211;&#x4EEC;&#x7684;<a href="https://github.com/http2/http2-spec/wiki/Implementations">&#x5B9E;&#x73B0;&#x5217;&#x8868;</a>&#x4E2D;&#x53C2;&#x4E0E;&#x8BE5;&#x9879;&#x76EE;&#x3002;</p>
<h3 id="3http2spdy">3. HTTP/2 &#x4E0E; SPDY &#x6709;&#x4EC0;&#x4E48;&#x5173;&#x7CFB;&#xFF1F;</h3>
<p>HTTP/2 &#x7B2C;&#x4E00;&#x6B21;&#x51FA;&#x73B0;&#x5E76;&#x88AB;&#x8BA8;&#x8BBA;&#x7684;&#x65F6;&#x5019;&#xFF0C;SPDY &#x6B63;&#x9010;&#x6E10;&#x53D7;&#x5230;&#x5B9E;&#x73B0;&#x8005;(&#x4F8B;&#x5982; Mozilla &#x548C; nginx)&#x7684;&#x9752;&#x7750;&#x65F6;&#xFF0C;&#x5E76;&#x4E14;&#x88AB;&#x5F53;&#x6210;&#x5BF9; HTTP/1.x &#x7684;&#x91CD;&#x5927;&#x6539;&#x8FDB;&#x3002;</p>
<p>&#x5728;&#x5F81;&#x6C42;&#x63D0;&#x6848;&#x548C;&#x8FDB;&#x884C;&#x9009;&#x62E9;&#x8FC7;&#x7A0B;&#x4E4B;&#x540E;&#xFF0C;&#x9009;&#x62E9; <a href="http://tools.ietf.org/html/draft-mbelshe-httpbis-spdy-00">SPDY/2</a> &#x4F5C;&#x4E3A; HTTP/2 &#x7684;&#x57FA;&#x7840;&#x3002;&#x6B64;&#x540E;&#xFF0C;&#x6839;&#x636E;&#x5DE5;&#x4F5C;&#x7EC4;&#x7684;&#x8BA8;&#x8BBA;&#x548C;&#x5B9E;&#x73B0;&#x8005;&#x7684;&#x53CD;&#x9988;&#xFF0C;&#x8FDB;&#x884C;&#x4E86;&#x8BB8;&#x591A;&#x66F4;&#x6539;&#x3002;&#x5728;&#x6574;&#x4E2A;&#x8FC7;&#x7A0B;&#x4E2D;&#xFF0C;SPDY &#x7684;&#x6838;&#x5FC3;&#x5F00;&#x53D1;&#x4EBA;&#x5458;&#x90FD;&#x53C2;&#x4E0E;&#x4E86; HTTP/2 &#x7684;&#x5F00;&#x53D1;&#xFF0C;&#x5305;&#x62EC; Mike Belshe &#x548C; Roberto Peon&#x3002;2015 &#x5E74; 2 &#x6708;&#xFF0C;Google &#x5BA3;&#x5E03;&#x4E86;&#x5176;&#x8BA1;&#x5212;&#x5220;&#x9664;&#x5BF9; SPDY &#x7684;&#x652F;&#x6301;&#xFF0C;&#x8F6C;&#x800C;&#x652F;&#x6301; HTTP/2&#x3002;</p>
<h3 id="4http20http2">4. &#x662F; HTTP/2.0 &#x8FD8;&#x662F; HTTP/2&#xFF1F;</h3>
<p>&#x5DE5;&#x4F5C;&#x7EC4;&#x51B3;&#x5B9A;&#x5220;&#x9664;&#x6B21;&#x7248;&#x672C;&#xFF08;&#x201C;.0&#x201D;&#xFF09;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x5728; HTTP/1.x &#x4E2D;&#x5F15;&#x8D77;&#x4E86;&#x5F88;&#x591A;&#x6DF7;&#x4E71;&#x3002;&#x6362;&#x53E5;&#x8BDD;&#x8BF4;&#xFF0C;HTTP &#x7248;&#x672C;&#x4EC5;&#x8868;&#x793A;&#x7F51;&#x7EDC;&#x517C;&#x5BB9;&#x6027;&#xFF0C;&#x800C;&#x4E0D;&#x8868;&#x793A;&#x529F;&#x80FD;&#x96C6;&#x6216;&#x201C;&#x4EAE;&#x70B9;&#x201D;&#x3002;</p>
<h3 id="5http2http1x">5. HTTP/2 &#x548C; HTTP/1.x &#x7684;&#x4E3B;&#x8981;&#x533A;&#x522B;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;</h3>
<p>&#x5728;&#x9AD8;&#x7248;&#x672C;&#x7684; HTTP/2 &#x4E2D;&#xFF1A;</p>
<ul>
<li>&#x662F;&#x4E8C;&#x8FDB;&#x5236;&#x7684;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6587;&#x672C;&#x7684;</li>
<li>&#x5B8C;&#x5168;&#x591A;&#x8DEF;&#x590D;&#x7528;&#xFF0C;&#x800C;&#x4E0D;&#x662F;&#x6709;&#x5E8F;&#x548C;&#x963B;&#x585E;</li>
<li>&#x56E0;&#x6B64;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#x8FDB;&#x884C;&#x5E76;&#x884C;&#x5904;&#x7406;</li>
<li>&#x4F7F;&#x7528;&#x5934;&#x538B;&#x7F29;&#x200B;&#x200B;&#x6765;&#x51CF;&#x5C11;&#x5F00;&#x9500;</li>
<li>&#x5141;&#x8BB8;&#x670D;&#x52A1;&#x5668;&#x4E3B;&#x52A8;&#x5C06;&#x54CD;&#x5E94;&quot;&#x63A8;&#x9001;&quot;&#x5230;&#x5BA2;&#x6237;&#x7AEF;&#x7F13;&#x5B58;&#x4E2D;</li>
</ul>
<h3 id="6http2">6. &#x4E3A;&#x4EC0;&#x4E48; HTTP/2 &#x662F;&#x4E8C;&#x8FDB;&#x5236;&#x7684;&#xFF1F;</h3>
<p>&#x4E0E;&#x8BF8;&#x5982; HTTP/1.x &#x4E4B;&#x7C7B;&#x7684;&#x6587;&#x672C;&#x534F;&#x8BAE;&#x76F8;&#x6BD4;&#xFF0C;&#x4E8C;&#x8FDB;&#x5236;&#x534F;&#x8BAE;&#x89E3;&#x6790;&#x8D77;&#x6765;&#x66F4;&#x9AD8;&#x6548;&#xFF0C;&#x66F4;&#x201C;&#x7D27;&#x51D1;&#x201D;&#xFF0C;&#x5E76;&#x4E14;&#x6700;&#x91CD;&#x8981;&#x7684;&#x662F;&#xFF0C;&#x5B83;&#x4EEC;&#x6BD4;&#x4E8C;&#x8FDB;&#x5236;&#x534F;&#x8BAE;&#x66F4;&#x4E0D;&#x5BB9;&#x6613;&#x51FA;&#x9519;&#xFF0C;&#x56E0;&#x4E3A;&#x5B83;&#x4EEC;&#x5BF9;&#x7A7A;&#x683C;&#x5904;&#x7406;&#xFF0C;&#x5927;&#x5199;&#xFF0C;&#x884C;&#x5C3E;&#xFF0C;&#x7A7A;&#x767D;&#x884C;&#x7B49;&#x7684;&#x5904;&#x7406;&#x5F88;&#x6709;&#x5E2E;&#x52A9;&#x3002;&#x4F8B;&#x5982;&#xFF0C;HTTP/1.1 &#x5B9A;&#x4E49;&#x4E86;<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4">&#x56DB;&#x79CD;&#x4E0D;&#x540C;&#x7684;&#x89E3;&#x6790;&#x6D88;&#x606F;&#x7684;&#x65B9;&#x5F0F;</a>&#x3002;&#x5728; HTTP/2 &#x4E2D;&#xFF0C;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x4EE3;&#x7801;&#x8DEF;&#x5F84;&#x3002;</p>
<p>HTTP/2 &#x5728; telnet &#x4E2D;&#x4E0D;&#x53EF;&#x7528;&#xFF0C;&#x4F46;&#x662F;&#x6211;&#x4EEC;&#x5DF2;&#x7ECF;&#x6709;&#x4E86;&#x4E00;&#x4E9B;&#x5DE5;&#x5177;&#x652F;&#x6301;&#xFF0C;&#x4F8B;&#x5982; <a href="https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9042">Wireshark &#x63D2;&#x4EF6;</a>&#x3002;</p>
<h3 id="7http2">7. &#x4E3A;&#x4EC0;&#x4E48; HTTP/2 &#x9700;&#x8981;&#x591A;&#x8DEF;&#x590D;&#x7528;&#xFF1F;</h3>
<p>HTTP/1.x &#x5B58;&#x5728;&#x4E00;&#x4E2A;&#x79F0;&#x4E3A;&#x201C;&#x961F;&#x5934;&#x963B;&#x585E;&#x201D;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x6307;&#x7684;&#x662F;&#x4E00;&#x6B21;&#x8FDE;&#x63A5;&#xFF08;connection&#xFF09;&#x4E2D;&#xFF0C;&#x53EA;&#x63D0;&#x4EA4;&#x4E00;&#x4E2A;&#x8BF7;&#x6C42;&#x7684;&#x6548;&#x7387;&#x6BD4;&#x8F83;&#x9AD8;&#xFF0C;&#x591A;&#x4E86;&#x5C31;&#x4F1A;&#x53D8;&#x6162;&#x3002;</p>
<p>HTTP/1.1 &#x8BD5;&#x56FE;&#x901A;&#x8FC7;&#x7BA1;&#x9053;&#x4FEE;&#x590D;&#x6B64;&#x95EE;&#x9898;&#xFF0C;&#x4F46;&#x662F;&#x5E76;&#x4E0D;&#x80FD;&#x5B8C;&#x5168;&#x89E3;&#x51B3;&#x95EE;&#x9898;&#xFF08;&#x8F83;&#x5927;&#x6216;&#x8F83;&#x6162;&#x7684;&#x54CD;&#x5E94;&#x4ECD;&#x4F1A;&#x963B;&#x6B62;&#x5176;&#x4ED6;&#x95EE;&#x9898;&#xFF09;&#x3002;&#x6B64;&#x5916;&#xFF0C;&#x7531;&#x4E8E;&#x8BB8;&#x591A;&#x4E2D;&#x95F4;&#x4EF6;&#x548C;&#x670D;&#x52A1;&#x5668;&#x672A;&#x6B63;&#x786E;&#x5904;&#x7406;&#x7BA1;&#x7EBF;&#x5316;&#xFF0C;&#x56E0;&#x6B64;&#x5F88;&#x96BE;&#x90E8;&#x7F72;&#x5B83;&#x3002;</p>
<p>&#x8FD9;&#x8FEB;&#x4F7F;&#x5BA2;&#x6237;&#x4F7F;&#x7528;&#x591A;&#x79CD;&#x8BD5;&#x63A2;&#x6CD5;&#xFF08;&#x901A;&#x5E38;&#x662F;&#x731C;&#x6D4B;&#x6CD5;&#xFF09;&#x6765;&#x51B3;&#x5B9A;&#x901A;&#x8FC7;&#x54EA;&#x4E9B;&#x8FDE;&#x63A5;&#x63D0;&#x4EA4;&#x54EA;&#x4E9B;&#x8BF7;&#x6C42;&#xFF1B;&#x7531;&#x4E8E;&#x9875;&#x9762;&#x52A0;&#x8F7D;&#x7684;&#x6570;&#x636E;&#x91CF;&#x901A;&#x5E38;&#x662F;&#x53EF;&#x7528;&#x8FDE;&#x63A5;&#x6570;&#x7684; 10 &#x500D;&#xFF08;&#x6216;&#x66F4;&#x591A;&#xFF09;&#xFF0C;&#x56E0;&#x6B64;&#x4F1A;&#x4E25;&#x91CD;&#x5F71;&#x54CD;&#x6027;&#x80FD;&#xFF0C;&#x901A;&#x5E38;&#x4F1A;&#x5BFC;&#x81F4;&#x88AB;&#x963B;&#x6B62;&#x7684;&#x8BF7;&#x6C42;&#x201C;&#x6CDB;&#x6EE5;&#x201D;&#x3002;</p>
<p>&#x591A;&#x8DEF;&#x590D;&#x7528;&#x901A;&#x8FC7;&#x5141;&#x8BB8;&#x540C;&#x65F6;&#x53D1;&#x9001;&#x591A;&#x4E2A;&#x8BF7;&#x6C42;&#x548C;&#x54CD;&#x5E94;&#x6D88;&#x606F;&#x6765;&#x89E3;&#x51B3;&#x8FD9;&#x4E9B;&#x95EE;&#x9898;&#x3002;&#x751A;&#x81F3;&#x6709;&#x53EF;&#x80FD;&#x5C06;&#x4E00;&#x6761;&#x6D88;&#x606F;&#x7684;&#x4E00;&#x90E8;&#x5206;&#x4E0E;&#x53E6;&#x4E00;&#x6761;&#x6D88;&#x606F;&#x6DF7;&#x5408;&#x5728;&#x4E00;&#x8D77;&#x3002;&#x6240;&#x4EE5;&#x5728;&#x8FD9;&#x79CD;&#x60C5;&#x51B5;&#x4E0B;&#xFF0C;&#x5BA2;&#x6237;&#x7AEF;&#x53EA;&#x9700;&#x8981;&#x4E00;&#x4E2A;&#x8FDE;&#x63A5;&#x5C31;&#x80FD;&#x52A0;&#x8F7D;&#x4E00;&#x4E2A;&#x9875;&#x9762;&#x3002;</p>
<h3 id="8tcp">8. &#x4E3A;&#x4EC0;&#x4E48;&#x53EA;&#x6709;&#x4E00;&#x4E2A; TCP &#x8FDE;&#x63A5;&#xFF1F;</h3>
<p>&#x4F7F;&#x7528; HTTP/1&#xFF0C;&#x6D4F;&#x89C8;&#x5668;&#x6253;&#x5F00;&#x6BCF;&#x4E2A;&#x7AD9;&#x70B9;&#x9700;&#x8981; 4 &#x4E2A;&#x5230; 8 &#x4E2A;&#x8FDE;&#x63A5;&#x3002;&#x73B0;&#x5728;&#x5F88;&#x591A;&#x7F51;&#x7AD9;&#x90FD;&#x4F7F;&#x7528;&#x591A;&#x70B9;&#x4F20;&#x8F93;&#xFF0C;&#x56E0;&#x6B64;&#x8FD9;&#x53EF;&#x80FD;&#x610F;&#x5473;&#x7740;&#x5355;&#x4E2A;&#x9875;&#x9762;&#x52A0;&#x8F7D;&#x4F1A;&#x6253;&#x5F00; 30 &#x591A;&#x4E2A;&#x8FDE;&#x63A5;&#x3002;</p>
<p>&#x4E00;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6253;&#x5F00;&#x5982;&#x6B64;&#x591A;&#x7684;&#x8FDE;&#x63A5;&#xFF0C;&#x5DF2;&#x7ECF;&#x8FDC;&#x8FDC;&#x8D85;&#x51FA;&#x4E86;&#x5F53;&#x521D;&#x8BBE;&#x8BA1; TCP &#x65F6;&#x7684;&#x9884;&#x60F3;&#x3002;&#x7531;&#x4E8E;&#x6BCF;&#x4E2A;&#x8FDE;&#x63A5;&#x90FD;&#x4F1A;&#x54CD;&#x5E94;&#x5927;&#x91CF;&#x7684;&#x6570;&#x636E;&#xFF0C;&#x8FD9;&#x4F1A;&#x9020;&#x6210;&#x4E2D;&#x95F4;&#x7F51;&#x7EDC;&#x4E2D;&#x7684;&#x7F13;&#x51B2;&#x533A;&#x6EA2;&#x51FA;&#x7684;&#x98CE;&#x9669;&#xFF0C;&#x4ECE;&#x800C;&#x5BFC;&#x81F4;&#x7F51;&#x7EDC;&#x62E5;&#x585E;&#x4E8B;&#x4EF6;&#x5E76;&#x91CD;&#x65B0;&#x4F20;&#x8F93;&#x3002;</p>
<p>&#x6B64;&#x5916;&#xFF0C;&#x4F7F;&#x7528;&#x8FD9;&#x4E48;&#x591A;&#x8FDE;&#x63A5;&#x8FD8;&#x4F1A;&#x5F3A;&#x5360;&#x8BB8;&#x591A;&#x7F51;&#x7EDC;&#x8D44;&#x6E90;&#x3002;&#x8FD9;&#x4E9B;&#x8D44;&#x6E90;&#x90FD;&#x662F;&#x4ECE;&#x90A3;&#x4E9B;&#x201C;&#x9075;&#x7EAA;&#x5B88;&#x6CD5;&#x201D;&#x7684;&#x5E94;&#x7528;&#x90A3;&#x201C;&#x5077;&#x201D;&#x7684;&#xFF08;VoIP  &#x5C31;&#x662F;&#x4E2A;&#x5F88;&#x597D;&#x7684;&#x4F8B;&#x5B50;&#xFF09;&#x3002;</p>
<h3 id="9">9. &#x670D;&#x52A1;&#x5668;&#x63A8;&#x9001;&#x7684;&#x597D;&#x5904;&#x662F;&#x4EC0;&#x4E48;&#xFF1F;</h3>
<p>&#x5F53;&#x6D4F;&#x89C8;&#x5668;&#x8BF7;&#x6C42;&#x9875;&#x9762;&#x65F6;&#xFF0C;&#x670D;&#x52A1;&#x5668;&#x5C06;&#x5728;&#x54CD;&#x5E94;&#x4E2D;&#x53D1;&#x9001; HTML&#xFF0C;&#x7136;&#x540E;&#x9700;&#x8981;&#x7B49;&#x5F85;&#x6D4F;&#x89C8;&#x5668;&#x89E3;&#x6790; HTML &#x5E76;&#x53D1;&#x51FA;&#x5BF9;&#x6240;&#x6709;&#x5D4C;&#x5165;&#x8D44;&#x6E90;&#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x7136;&#x540E;&#x624D;&#x80FD;&#x5F00;&#x59CB;&#x53D1;&#x9001; JavaScript&#xFF0C;&#x56FE;&#x50CF;&#x548C; CSS&#x3002;</p>
<p>&#x670D;&#x52A1;&#x5668;&#x63A8;&#x9001;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x201C;&#x63A8;&#x9001;&#x201D;&#x5B83;&#x8BA4;&#x4E3A;&#x5BA2;&#x6237;&#x7AEF;&#x9700;&#x8981;&#x7684;&#x54CD;&#x5E94;&#x5230;&#x5176;&#x7F13;&#x5B58;&#x4E2D;&#xFF0C;&#x6765;&#x907F;&#x514D;&#x670D;&#x52A1;&#x5668;&#x7684;&#x8FD9;&#x79CD;&#x5F80;&#x8FD4;&#x5EF6;&#x8FDF;&#x3002;</p>
<p>&#x4F46;&#x662F;&#xFF0C;&#x201C;&#x63A8;&#x9001;&#x201D;&#x54CD;&#x5E94;&#x4E0D;&#x662F;&#x201C;&#x795E;&#x5947;&#x7684;&#x201D;&#x2014;&#x2014;&#x5982;&#x679C;&#x4F7F;&#x7528;&#x4E0D;&#x6B63;&#x786E;&#xFF0C;&#x53EF;&#x80FD;&#x4F1A;&#x635F;&#x5BB3;&#x6027;&#x80FD;&#x3002;&#x6B63;&#x786E;&#x4F7F;&#x7528; Server Push &#x662F;&#x6B63;&#x5728;&#x8FDB;&#x884C;&#x7684;&#x5B9E;&#x9A8C;&#x548C;&#x7814;&#x7A76;&#x9886;&#x57DF;&#x3002;</p>
<h3 id="10">10. &#x4E3A;&#x4EC0;&#x4E48;&#x6211;&#x4EEC;&#x9700;&#x8981;&#x5934;&#x538B;&#x7F29;&#xFF1F;</h3>
<p>Mozilla &#x7684; Patrick McManus &#x901A;&#x8FC7;&#x8BA1;&#x7B97;&#x5E73;&#x5747;&#x9875;&#x9762;&#x52A0;&#x8F7D;&#x6D88;&#x606F;&#x5934;&#x7684;&#x6548;&#x679C;&#xFF0C;&#x751F;&#x52A8;&#x5730;&#x5C55;&#x793A;&#x4E86;&#x8FD9;&#x4E00;&#x70B9;&#x3002;</p>
<p>&#x5047;&#x8BBE;&#x4E00;&#x4E2A;&#x9875;&#x9762;&#x5305;&#x542B;&#x5927;&#x7EA6; 80 &#x4E2A;&#x8D44;&#x6E90;&#x9700;&#x8981;&#x52A0;&#x8F7D;&#xFF08;&#x5728;&#x5F53;&#x4ECA;&#x7684; Web &#x4E2D;&#x662F;&#x4FDD;&#x5B88;&#x7684;&#xFF09;&#xFF0C;&#x5E76;&#x4E14;&#x6BCF;&#x4E2A;&#x8BF7;&#x6C42;&#x5177;&#x6709; 1400 &#x5B57;&#x8282;&#x7684;&#x6D88;&#x606F;&#x5934;&#xFF08;&#x8FD9;&#x5E76;&#x4E0D;&#x7F55;&#x89C1;&#xFF0C;&#x8FD9;&#x8981;&#x5F52;&#x529F;&#x4E8E; Cookie&#xFF0C;Referer &#x7B49;&#xFF09;&#xFF0C;&#x81F3;&#x5C11;&#x8981; 7 &#x5230; 8 &#x4E2A;&#x6765;&#x56DE;&#x53BB;&#x201C;&#x5728;&#x7EBF;&#x201D;&#x83B7;&#x5F97;&#x8FD9;&#x4E9B;&#x6D88;&#x606F;&#x5934;&#x3002;&#x8FD9;&#x8FD8;&#x4E0D;&#x5305;&#x62EC;&#x54CD;&#x5E94;&#x65F6;&#x95F4;&#x2014;&#x2014;&#x90A3;&#x53EA;&#x662F;&#x4ECE;&#x5BA2;&#x6237;&#x7AEF;&#x90A3;&#x91CC;&#x83B7;&#x53D6;&#x5230;&#x5B83;&#x4EEC;&#x6240;&#x82B1;&#x7684;&#x65F6;&#x95F4;&#x800C;&#x5DF2;&#x3002;</p>
<p>&#x8FD9;&#x662F;&#x56E0;&#x4E3A; TCP &#x7684;&#x6162;&#x542F;&#x52A8;&#x673A;&#x5236;&#x9020;&#x6210;&#x7684;&#xFF0C;&#x6839;&#x636E;&#x5DF2;&#x786E;&#x8BA4;&#x7684;&#x6570;&#x636E;&#x5305;&#x6570;&#x91CF;&#xFF0C;&#x4ECE;&#x800C;&#x5BF9;&#x65B0;&#x8FDE;&#x63A5;&#x4E0A;&#x53D1;&#x9001;&#x6570;&#x636E;&#x7684;&#x8FDB;&#x884C;&#x9650;&#x5236;&#x2014;&#x2014;&#x6709;&#x6548;&#x5730;&#x9650;&#x5236;&#x4E86;&#x6700;&#x521D;&#x7684;&#x51E0;&#x6B21;&#x6765;&#x56DE;&#x53EF;&#x4EE5;&#x53D1;&#x9001;&#x7684;&#x6570;&#x636E;&#x5305;&#x6570;&#x91CF;&#x3002;</p>
<p>&#x76F8;&#x6BD4;&#x4E4B;&#x4E0B;&#xFF0C;&#x5373;&#x4F7F;&#x5BF9;&#x62A5;&#x5934;&#x8FDB;&#x884C;&#x8F7B;&#x5FAE;&#x7684;&#x538B;&#x7F29;&#xFF0C;&#x8FD9;&#x4E9B;&#x8BF7;&#x6C42;&#x4E5F;&#x53EF;&#x4EE5;&#x5728;&#x4E00;&#x6B21;&#x5F80;&#x8FD4;&#xFF08;&#x751A;&#x81F3;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5305;&#xFF09;&#x5185;&#x641E;&#x5B9A;&#x3002;</p>
<p>&#x8FD9;&#x79CD;&#x989D;&#x5916;&#x5F00;&#x9500;&#x662F;&#x76F8;&#x5F53;&#x5927;&#x7684;&#xFF0C;&#x5C24;&#x5176;&#x662F;&#x8003;&#x8651;&#x5230;&#x5BF9;&#x79FB;&#x52A8;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x5F71;&#x54CD;&#x65F6;&#xFF0C;&#x5373;&#x4F7F;&#x5728;&#x7F51;&#x7EDC;&#x72B6;&#x51B5;&#x826F;&#x597D;&#x7684;&#x6761;&#x4EF6;&#x4E0B;&#xFF0C;&#x79FB;&#x52A8;&#x5BA2;&#x6237;&#x7AEF;&#x7684;&#x5F80;&#x8FD4;&#x5EF6;&#x8FDF;&#x901A;&#x5E38;&#x4E5F;&#x8981;&#x51E0;&#x767E;&#x6BEB;&#x79D2;&#x3002;</p>
<h3 id="11hpack">11. &#x4E3A;&#x4EC0;&#x4E48;&#x9009;&#x62E9; HPACK&#xFF1F;</h3>
<p>SPDY/2 &#x5EFA;&#x8BAE;&#x6BCF;&#x4E2A;&#x65B9;&#x90FD;&#x4F7F;&#x7528;&#x5355;&#x72EC;&#x7684; GZIP &#x4E0A;&#x4E0B;&#x6587;&#x8FDB;&#x884C;&#x6D88;&#x606F;&#x5934;&#x538B;&#x7F29;&#xFF0C;&#x8BE5;&#x65B9;&#x6CD5;&#x6613;&#x4E8E;&#x5B9E;&#x73B0;&#x4E14;&#x6548;&#x7387;&#x5F88;&#x9AD8;&#x3002;</p>
<p>&#x4ECE;&#x90A3;&#x65F6;&#x8D77;&#xFF0C;&#x4E00;&#x4E2A;&#x91CD;&#x8981;&#x7684;&#x653B;&#x51FB;&#x65B9;&#x5F0F; <a href="http://en.wikipedia.org/wiki/CRIME">CRIME</a> &#x8BDE;&#x751F;&#x4E86;&#xFF0C;&#x8FD9;&#x79CD;&#x65B9;&#x5F0F;&#x53EF;&#x4EE5;&#x653B;&#x51FB;&#x52A0;&#x5BC6;&#x6587;&#x4EF6;&#x5185;&#x90E8;&#x7684;&#x6240;&#x4F7F;&#x7528;&#x7684;&#x538B;&#x7F29;&#x6D41;&#xFF08;&#x5982; GZIP&#xFF09;&#x3002;</p>
<p>&#x4F7F;&#x7528; CRIME&#xFF0C;&#x653B;&#x51FB;&#x8005;&#x6709;&#x80FD;&#x529B;&#x5C06;&#x6570;&#x636E;&#x6CE8;&#x5165;&#x52A0;&#x5BC6;&#x6D41;&#x4E2D;&#xFF0C;&#x5E76;&#x53EF;&#x4EE5;&#x201C;&#x63A2;&#x6D4B;&#x201D;&#x660E;&#x6587;&#x5E76;&#x6062;&#x590D;&#x5B83;&#x3002;&#x7531;&#x4E8E;&#x8FD9;&#x662F; Web&#xFF0C;&#x56E0;&#x6B64; JavaScript &#x4F7F;&#x8FD9;&#x6210;&#x4E3A;&#x53EF;&#x80FD;&#xFF0C;&#x800C;&#x4E14;&#x5DF2;&#x7ECF;&#x6709;&#x4E86;&#x901A;&#x8FC7;&#x5BF9;&#x53D7;&#x5230; TLS &#x4FDD;&#x62A4;&#x7684; HTTP &#x8D44;&#x6E90;&#x7684;&#x4F7F;&#x7528;CRIME&#x6765;&#x8FD8;&#x539F;&#x51FA; cookies &#x548C;&#x8BA4;&#x8BC1;&#x4EE4;&#x724C;&#xFF08;Toekn&#xFF09;&#x7684;&#x6848;&#x4F8B;&#x3002;</p>
<p>&#x7ED3;&#x679C;&#xFF0C;&#x6211;&#x4EEC;&#x65E0;&#x6CD5;&#x4F7F;&#x7528; GZIP &#x538B;&#x7F29;&#x3002;&#x6CA1;&#x6709;&#x627E;&#x5230;&#x9002;&#x5408;&#x8BE5;&#x7528;&#x4F8B;&#x5E76;&#x4E14;&#x53EF;&#x4EE5;&#x5B89;&#x5168;&#x4F7F;&#x7528;&#x7684;&#x5176;&#x4ED6;&#x7B97;&#x6CD5;&#xFF0C;&#x6211;&#x4EEC;&#x521B;&#x5EFA;&#x4E86;&#x4E00;&#x79CD;&#x65B0;&#x7684;&#xFF0C;&#x4E13;&#x95E8;&#x9488;&#x5BF9;&#x62A5;&#x5934;&#x7684;&#x538B;&#x7F29;&#x65B9;&#x6848;&#xFF0C;&#x8BE5;&#x65B9;&#x6848;&#x4EE5;&#x7C97;&#x7C92;&#x5EA6;&#x538B;&#x7F29;&#x6A21;&#x5F0F;&#x8FD0;&#x884C;&#xFF1B;&#x7531;&#x4E8E; HTTP &#x6807;&#x5934;&#x901A;&#x5E38;&#x5728;&#x6D88;&#x606F;&#x4E4B;&#x95F4;&#x4E0D;&#x6539;&#x53D8;&#xFF0C;&#x56E0;&#x6B64;&#x4ECD;&#x7136;&#x53EF;&#x4EE5;&#x63D0;&#x4F9B;&#x5408;&#x7406;&#x7684;&#x538B;&#x7F29;&#x6548;&#x7387;&#xFF0C;&#x5E76;&#x4E14;&#x66F4;&#x52A0;&#x5B89;&#x5168;&#x3002;</p>
<h3 id="12http2cookie">12. HTTP/2 &#x53EF;&#x4EE5;&#x4F7F; Cookie(&#x6216;&#x5176;&#x4ED6;&#x5934;&#x5B57;&#x6BB5;)&#x53D8;&#x5F97;&#x66F4;&#x597D;&#x5417;&#xFF1F;</h3>
<p>&#x8FD9;&#x4E00;&#x52AA;&#x529B;&#x88AB;&#x8BB8;&#x53EF;&#x5728;&#x7F51;&#x7EDC;&#x534F;&#x8BAE;&#x7684;&#x4E00;&#x4E2A;&#x4FEE;&#x8BA2;&#x7248;&#x672C;&#x4E0A;&#x8FD0;&#x884C; &#x2014;&#x2014; &#x4F8B;&#x5982;&#xFF0C;HTTP &#x6D88;&#x606F;&#x5934;&#x3001;&#x65B9;&#x6CD5;&#x7B49;&#x7B49;&#x5982;&#x4F55;&#x624D;&#x80FD;&#x5728;&#x4E0D;&#x6539;&#x53D8; HTTP &#x8BED;&#x4E49;&#x7684;&#x524D;&#x63D0;&#x4E0B;&#x653E;&#x5230;&#x201C;&#x7F51;&#x7EDC;&#x4E0A;&#x201D;&#x3002;</p>
<p>&#x8FD9;&#x662F;&#x56E0;&#x4E3A; HTTP &#x88AB;&#x5E7F;&#x6CDB;&#x4F7F;&#x7528;&#x3002;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x4F7F;&#x7528;&#x6B64;&#x7248;&#x672C;&#x7684; HTTP &#x5F15;&#x5165;&#x4E00;&#x79CD;&#x65B0;&#x7684;&#x72B6;&#x6001;&#x673A;&#x5236;&#xFF08;&#x4F8B;&#x5982;&#x4E4B;&#x524D;&#x8BA8;&#x8BBA;&#x8FC7;&#x7684;&#x4F8B;&#x5B50;&#xFF09;&#x6216;&#x66F4;&#x6539;&#x4E86;&#x6838;&#x5FC3;&#x65B9;&#x6CD5;&#xFF08;&#x503C;&#x5F97;&#x5E86;&#x5E78;&#x7684;&#x662F;&#xFF0C;&#x5C1A;&#x672A;&#x63D0;&#x51FA;&#x8BE5;&#x65B9;&#x6CD5;&#xFF09;&#xFF0C;&#x5219;&#x610F;&#x5473;&#x7740;&#x65B0;&#x534F;&#x8BAE;&#x4E0E;&#x73B0;&#x6709; Web &#x4E0D;&#x517C;&#x5BB9;&#x3002;</p>
<p>&#x7279;&#x522B;&#x662F;&#xFF0C;&#x6211;&#x4EEC;&#x5E0C;&#x671B;&#x80FD;&#x591F;&#x5728;&#x4E0D;&#x635F;&#x5931;&#x4EFB;&#x4F55;&#x4FE1;&#x606F;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x4ECE; HTTP/1 &#x8F6C;&#x6362;&#x4E3A; HTTP/2&#x3002;&#x5982;&#x679C;&#x6211;&#x4EEC;&#x5F00;&#x59CB;&#x201C;&#x6E05;&#x7406;&#x201D;&#x62A5;&#x5934;&#xFF08;&#x5E76;&#x4E14;&#x5927;&#x591A;&#x6570;&#x4EBA;&#x4F1A;&#x540C;&#x610F;&#xFF0C;&#x56E0;&#x4E3A; HTTP &#x62A5;&#x5934;&#x5F88;&#x4E71;&#xFF09;&#xFF0C;&#x5C06;&#x4F1A;&#x51FA;&#x73B0;&#x5F88;&#x591A;&#x4E0E;&#x73B0;&#x6709; Web &#x4E92;&#x64CD;&#x4F5C;&#x6027;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x8FD9;&#x6837;&#x505A;&#x53EA;&#x4F1A;&#x5BF9;&#x65B0;&#x534F;&#x8BAE;&#x7684;&#x666E;&#x53CA;&#x9020;&#x6210;&#x9EBB;&#x70E6;&#x3002;</p>
<p>&#x7EFC;&#x4E0A;&#x6240;&#x8FF0;&#xFF0C;HTTP &#x5DE5;&#x4F5C;&#x7EC4;&#x8D1F;&#x8D23;&#x6240;&#x6709; HTTP&#xFF0C;&#x800C;&#x4E0D;&#x4EC5;&#x4EC5;&#x662F; HTTP/2&#x3002;&#x8FD9;&#x6837;&#xFF0C;&#x6211;&#x4EEC;&#x53EF;&#x4EE5;&#x7814;&#x7A76;&#x4E0E;&#x7248;&#x672C;&#x65E0;&#x5173;&#x7684;&#x65B0;&#x673A;&#x5236;&#xFF0C;&#x53EA;&#x8981;&#x5B83;&#x4EEC;&#x4E0E;&#x73B0;&#x6709; Web &#x5411;&#x540E;&#x517C;&#x5BB9;&#x5373;&#x53EF;&#x3002;</p>
<h3 id="13http">13. &#x975E;&#x6D4F;&#x89C8;&#x5668;&#x7684; HTTP &#x7528;&#x6237;&#x5462;&#xFF1F;</h3>
<p>&#x5982;&#x679C;&#x975E;&#x6D4F;&#x89C8;&#x5668;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5DF2;&#x7ECF;&#x5728;&#x4F7F;&#x7528; HTTP&#xFF0C;&#x5219;&#x5B83;&#x4EEC;&#x4E5F;&#x5E94;&#x8BE5;&#x80FD;&#x591F;&#x4F7F;&#x7528; HTTP/2&#x3002;</p>
<p>&#x5148;&#x524D;&#x6536;&#x5230;&#x8FC7; HTTP &#x201C;APIs&#x201D; &#x5728; HTTP/2 &#x4E2D;&#x5177;&#x6709;&#x826F;&#x597D;&#x6027;&#x80FD;&#x7B49;&#x7279;&#x70B9;&#x8FD9;&#x6837;&#x7684;&#x53CD;&#x9988;&#xFF0C;&#x90A3;&#x662F;&#x56E0;&#x4E3A; API &#x4E0D;&#x9700;&#x8981;&#x5728;&#x8BBE;&#x8BA1;&#x4E2D;&#x8003;&#x8651;&#x8BF8;&#x5982;&#x8BF7;&#x6C42;&#x5F00;&#x9500;&#x4E4B;&#x7C7B;&#x7684;&#x95EE;&#x9898;&#x3002;</p>
<p>&#x8BDD;&#x867D;&#x5982;&#x6B64;&#xFF0C;&#x6211;&#x4EEC;&#x6B63;&#x5728;&#x8003;&#x8651;&#x7684;&#x6539;&#x8FDB;&#x7684;&#x4E3B;&#x8981;&#x7126;&#x70B9;&#x662F;&#x5178;&#x578B;&#x7684;&#x6D4F;&#x89C8;&#x7528;&#x4F8B;&#xFF0C;&#x56E0;&#x4E3A;&#x8FD9;&#x662F;&#x8BE5;&#x534F;&#x8BAE;&#x7684;&#x6838;&#x5FC3;&#x7528;&#x4F8B;&#x3002;</p>
<p>&#x6211;&#x4EEC;&#x7684;&#x7AE0;&#x7A0B;&#x5BF9;&#x6B64;&#x8868;&#x793A;&#xFF1A;</p>
<pre><code class="language-c">The resulting specification(s) are expected to meet these goals for common existing deployments of HTTP; in particular, Web browsing (desktop and mobile), non-browsers (&quot;HTTP APIs&quot;), Web serving (at a variety of scales), and intermediation (by proxies, corporate firewalls, &quot;reverse&quot; proxies and Content Delivery Networks). Likewise, current and future semantic extensions to HTTP/1.x (e.g., headers, methods, status codes, cache directives) should be supported in the new protocol.

&#x6B63;&#x5728;&#x5236;&#x5B9A;&#x7684;&#x89C4;&#x8303;&#x9700;&#x8981;&#x6EE1;&#x8DB3;&#x73B0;&#x5728;&#x5DF2;&#x7ECF;&#x666E;&#x904D;&#x90E8;&#x7F72;&#x4E86;&#x7684; HTTP &#x7684;&#x529F;&#x80FD;&#x8981;&#x6C42;&#xFF1B;&#x5177;&#x4F53;&#x6765;&#x8BF4;&#x4E3B;&#x8981;&#x5305;&#x62EC;&#xFF0C;Web &#x6D4F;&#x89C8;&#xFF08;&#x684C;&#x9762;&#x7AEF;&#x548C;&#x79FB;&#x52A8;&#x7AEF;&#xFF09;&#xFF0C;&#x975E;&#x6D4F;&#x89C8;&#x5668;&#xFF08;&#x201C;HTTP APIs&#x201D; &#x5F62;&#x5F0F;&#x7684;&#xFF09;&#xFF0C;Web &#x670D;&#x52A1;&#xFF08;&#x5927;&#x8303;&#x56F4;&#x7684;&#xFF09;&#xFF0C;&#x8FD8;&#x6709;&#x5404;&#x79CD;&#x7F51;&#x7EDC;&#x4E2D;&#x4ECB;&#xFF08;&#x501F;&#x52A9;&#x4EE3;&#x7406;&#xFF0C;&#x4F01;&#x4E1A;&#x9632;&#x706B;&#x5899;&#xFF0C;&#x53CD;&#x5411;&#x4EE3;&#x7406;&#x4EE5;&#x53CA;&#x5185;&#x5BB9;&#x5206;&#x53D1;&#x7F51;&#x7EDC;&#x5B9E;&#x73B0;&#x7684;&#xFF09;&#x3002;&#x540C;&#x6837;&#x7684;&#xFF0C;&#x5BF9; HTTP/1.x &#x5F53;&#x524D;&#x548C;&#x672A;&#x6765;&#x7684;&#x8BED;&#x4E49;&#x6269;&#x5C55; (&#x4F8B;&#x5982;&#xFF0C;&#x6D88;&#x606F;&#x5934;&#xFF0C;&#x65B9;&#x6CD5;&#xFF0C;&#x72B6;&#x6001;&#x7801;&#xFF0C;&#x7F13;&#x5B58;&#x6307;&#x4EE4;) &#x90FD;&#x5E94;&#x8BE5;&#x5728;&#x65B0;&#x7684;&#x534F;&#x8BAE;&#x4E2D;&#x652F;&#x6301;&#x3002;


Note that this does not include uses of HTTP where non-specified behaviours are relied upon (e.g., connection state such as timeouts or client affinity,and &quot;interception&quot; proxies); these uses may or may not be enabled by the final product.

&#x503C;&#x5F97;&#x6CE8;&#x610F;&#x7684;&#x662F;&#xFF0C;&#x8FD9;&#x91CC;&#x6CA1;&#x6709;&#x5305;&#x62EC;&#x5C06; HTTP &#x7528;&#x4E8E;&#x975E;&#x7279;&#x5B9A;&#x884C;&#x4E3A;&#x6240;&#x4F9D;&#x8D56;&#x7684;&#x573A;&#x666F;&#x4E2D;&#xFF08;&#x4F8B;&#x5982;&#x8D85;&#x65F6;&#xFF0C;&#x8FDE;&#x63A5;&#x72B6;&#x6001;&#x4EE5;&#x53CA;&#x62E6;&#x622A;&#x4EE3;&#x7406;&#xFF09;&#x3002;&#x8FD9;&#x4E9B;&#x53EF;&#x80FD;&#x5E76;&#x4E0D;&#x4F1A;&#x88AB;&#x6700;&#x7EC8;&#x7684;&#x4EA7;&#x54C1;&#x542F;&#x7528;&#x3002;

</code></pre>
<h3 id="14http2">14. HTTP/2 &#x662F;&#x5426;&#x9700;&#x8981;&#x52A0;&#x5BC6;&#xFF1F;</h3>
<p>&#x5426;&#x3002;&#x7ECF;&#x8FC7;&#x5E7F;&#x6CDB;&#x8BA8;&#x8BBA;&#xFF0C;&#x5DE5;&#x4F5C;&#x7EC4;&#x5C1A;&#x672A;&#x5BF9;&#x65B0;&#x534F;&#x8BAE;&#x5FC5;&#x987B;&#x8981;&#x4F7F;&#x7528;&#x52A0;&#x5BC6;&#xFF08;&#x4F8B;&#x5982; TLS&#xFF09;&#x8FBE;&#x6210;&#x5171;&#x8BC6;&#xFF0C;&#x3002;</p>
<p>&#x4F46;&#x662F;&#xFF0C;&#x4E00;&#x4E9B;&#x5B9E;&#x73B0;&#x5DF2;&#x58F0;&#x660E;&#x5B83;&#x4EEC;&#x4EC5;&#x5728;&#x901A;&#x8FC7;&#x52A0;&#x5BC6;&#x8FDE;&#x63A5;&#x4F7F;&#x7528; HTTP/2 &#x65F6;&#x624D;&#x652F;&#x6301; HTTP/2&#xFF0C;&#x5E76;&#x4E14;&#x5F53;&#x524D;&#x6CA1;&#x6709;&#x6D4F;&#x89C8;&#x5668;&#x652F;&#x6301;&#x672A;&#x52A0;&#x5BC6;&#x7684; HTTP/2&#x3002;</p>
<h3 id="15http2">15. HTTP/2 &#x5982;&#x4F55;&#x63D0;&#x9AD8;&#x5B89;&#x5168;&#x6027;&#xFF1F;</h3>
<p>HTTP/2 &#x5B9A;&#x4E49;&#x4E86;&#x5FC5;&#x9700;&#x7684; TLS &#x914D;&#x7F6E;&#x6587;&#x4EF6;&#xFF1B;&#x8FD9;&#x5305;&#x62EC;&#x4E86;&#x7248;&#x672C;&#xFF0C;&#x5BC6;&#x7801;&#x5957;&#x4EF6;&#x9ED1;&#x540D;&#x5355;&#x548C;&#x4F7F;&#x7528;&#x7684;&#x6269;&#x5C55;&#x3002;</p>
<p>&#x6709;&#x5173;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="http://http2.github.io/http2-spec/#TLSUsage">&#x89C4;&#x8303;</a>&#x3002;</p>
<p>&#x8FD8;&#x8BA8;&#x8BBA;&#x4E86;&#x5176;&#x4ED6;&#x673A;&#x5236;&#xFF0C;&#x4F8B;&#x5982;&#x5BF9; HTTP:// URL &#x4F7F;&#x7528; TLS&#xFF08;&#x6240;&#x8C13;&#x7684;&#x201C;&#x673A;&#x4F1A;&#x4E3B;&#x4E49;&#x52A0;&#x5BC6;&#x201D;&#xFF09;&#xFF1B;&#x53C2;&#x89C1; <a href="https://tools.ietf.org/html/rfc8164">RFC 8164</a>&#x3002;</p>
<h3 id="16http2">16. &#x6211;&#x73B0;&#x5728;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; HTTP/2 &#x5417;&#xFF1F;</h3>
<p>&#x5728;&#x6D4F;&#x89C8;&#x5668;&#x4E2D;&#xFF0C;Edge&#xFF0C;Safari&#xFF0C;Firefox &#x548C; Chrome &#x7684;&#x6700;&#x65B0;&#x7248;&#x672C;&#x90FD;&#x652F;&#x6301; HTTP/2&#x3002;&#x5176;&#x4ED6;&#x57FA;&#x4E8E; Blink &#x7684;&#x6D4F;&#x89C8;&#x5668;&#x4E5F;&#x5C06;&#x652F;&#x6301; HTTP/2&#xFF08;&#x4F8B;&#x5982; Opera &#x548C; Yandex Browser&#xFF09;&#x3002;&#x6709;&#x5173;&#x66F4;&#x591A;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="http://caniuse.com/#feat=http2">&#x8FD9;&#x91CC;</a>&#x3002;</p>
<p>&#x8FD8;&#x6709;&#x51E0;&#x79CD;&#x53EF;&#x7528;&#x7684;&#x670D;&#x52A1;&#x5668;&#xFF08;&#x5305;&#x62EC; <a href="https://http2.akamai.com/">Akamai</a>&#xFF0C;<a href="https://google.com/">Google</a> &#x548C; <a href="https://twitter.com/">Twitter</a> &#x7684;&#x4E3B;&#x8981;&#x7AD9;&#x70B9;&#x63D0;&#x4F9B;&#x7684; beta &#x652F;&#x6301;&#xFF09;&#xFF0C;&#x4EE5;&#x53CA;&#x8BB8;&#x591A;&#x53EF;&#x4EE5;&#x90E8;&#x7F72;&#x548C;&#x6D4B;&#x8BD5;&#x7684;&#x5F00;&#x6E90;&#x5B9E;&#x73B0;&#x3002;</p>
<p>&#x6709;&#x5173;&#x66F4;&#x591A;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;&#xFF0C;&#x8BF7;&#x53C2;&#x89C1;<a href="https://github.com/http2/http2-spec/wiki/Implementations">&#x5B9E;&#x73B0;&#x5217;&#x8868;</a>&#x3002;</p>
<h3 id="17http2http1x">17. HTTP/2 &#x4F1A;&#x53D6;&#x4EE3; HTTP/1.x &#x5417;&#xFF1F;</h3>
<p>&#x5DE5;&#x4F5C;&#x7EC4;&#x7684;&#x76EE;&#x7684;&#x662F;&#x8BA9;&#x90A3;&#x4E9B;&#x4F7F;&#x7528; HTTP/1.x &#x7684;&#x4EBA;&#x4E5F;&#x53EF;&#x4EE5;&#x4F7F;&#x7528; HTTP/2&#xFF0C;&#x5E76;&#x80FD;&#x83B7;&#x5F97; HTTP/2 &#x6240;&#x5E26;&#x6765;&#x7684;&#x597D;&#x5904;&#x3002;&#x4ED6;&#x4EEC;&#x8BF4;&#x8FC7;&#xFF0C;&#x7531;&#x4E8E;&#x4EBA;&#x4EEC;&#x90E8;&#x7F72;&#x4EE3;&#x7406;&#x548C;&#x670D;&#x52A1;&#x5668;&#x7684;&#x65B9;&#x5F0F;&#x4E0D;&#x540C;&#xFF0C;&#x6211;&#x4EEC;&#x4E0D;&#x80FD;&#x5F3A;&#x8FEB;&#x6574;&#x4E2A;&#x4E16;&#x754C;&#x8FDB;&#x884C;&#x8FC1;&#x79FB;&#xFF0C;&#x6240;&#x4EE5; HTTP/1.x &#x4ECD;&#x6709;&#x53EF;&#x80FD;&#x8981;&#x4F7F;&#x7528;&#x4E86;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#x3002;</p>
<h3 id="18http3">18. &#x4F1A;&#x6709; HTTP/3 &#x5417;&#xFF1F;</h3>
<p>&#x5982;&#x679C;&#x901A;&#x8FC7; HTTP/2 &#x5F15;&#x5165;&#x7684;&#x534F;&#x5546;&#x673A;&#x5236;&#x8FD0;&#x884C;&#x826F;&#x597D;&#xFF0C;&#x652F;&#x6301;&#x65B0;&#x7248;&#x672C;&#x7684; HTTP &#x5C31;&#x4F1A;&#x6BD4;&#x8FC7;&#x53BB;&#x66F4;&#x52A0;&#x5BB9;&#x6613;&#x3002;</p>
<h2 id>&#x4E8C;. &#x5B9E;&#x73B0;&#x76F8;&#x5173;&#x7684;&#x95EE;&#x9898;</h2>
<h3 id="1headersframecontinuation">1. &#x4E3A;&#x4EC0;&#x4E48;&#x89C4;&#x5219;&#x4F1A;&#x56F4;&#x7ED5; HEADERS frame &#x7684; Continuation&#xFF1F;</h3>
<p>&#x5B58;&#x5728;&#x8FDE;&#x7EED;&#x6027;&#x662F;&#x56E0;&#x4E3A;&#x5355;&#x4E2A;&#x503C;&#xFF08;&#x4F8B;&#x5982; Set-Cookie&#xFF09;&#x53EF;&#x80FD;&#x8D85;&#x8FC7; 16KiB-1&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x5B83;&#x65E0;&#x6CD5;&#x653E;&#x5165;&#x5355;&#x4E2A;&#x5E27;&#x4E2D;&#x3002;&#x51B3;&#x5B9A;&#x5904;&#x7406;&#x8BE5;&#x95EE;&#x9898;&#x7684;&#x6700;&#x4E0D;&#x5BB9;&#x6613;&#x51FA;&#x9519;&#x7684;&#x65B9;&#x6CD5;&#x662F;&#x8981;&#x6C42;&#x6240;&#x6709;&#x6D88;&#x606F;&#x5934;&#x6570;&#x636E;&#x90FD;&#x4EE5;&#x4E00;&#x4E2A;&#x63A5;&#x4E00;&#x4E2A;&#x5E27;&#x7684;&#x65B9;&#x5F0F;&#x4F20;&#x9012;&#xFF0C;&#x8FD9;&#x4F7F;&#x5F97;&#x89E3;&#x7801;&#x548C;&#x7F13;&#x51B2;&#x533A;&#x7BA1;&#x7406;&#x4E5F;&#x53D8;&#x5F97;&#x66F4;&#x52A0;&#x5BB9;&#x6613;&#x3002;</p>
<h3 id="2hpack">2. HPACK &#x72B6;&#x6001;&#x7684;&#x6700;&#x5C0F;&#x6216;&#x6700;&#x5927;&#x5927;&#x5C0F;&#x662F;&#x591A;&#x5C11;&#xFF1F;</h3>
<p>&#x63A5;&#x6536;&#x65B9;&#x59CB;&#x7EC8;&#x63A7;&#x5236; HPACK &#x4E2D;&#x4F7F;&#x7528;&#x7684;&#x5185;&#x5B58;&#x91CF;&#xFF0C;&#x5E76;&#x4E14;&#x53EF;&#x4EE5;&#x5C06;&#x5176;&#x6700;&#x5C0F;&#x8BBE;&#x7F6E;&#x4E3A; 0&#xFF0C;&#x6700;&#x5927;&#x503C;&#x4E0E; SETTINGS &#x5E27;&#x4E2D;&#x7684;&#x6700;&#x5927;&#x53EF;&#x8868;&#x793A;&#x6574;&#x6570;&#xFF08;&#x5F53;&#x524D;&#x4E3A; 2^32-1&#xFF09;&#x6709;&#x5173;&#x3002;</p>
<h3 id="3hpack">3. &#x5982;&#x4F55;&#x907F;&#x514D;&#x4FDD;&#x6301; HPACK &#x72B6;&#x6001;&#xFF1F;</h3>
<p>&#x53D1;&#x9001;&#x4E00;&#x4E2A; SETTINGS &#x5E27;&#xFF0C;&#x5C06;&#x72B6;&#x6001;&#x5C3A;&#x5BF8;&#xFF08;SETTINGS_HEADER_TABLE_SIZE&#xFF09;&#x8BBE;&#x7F6E;&#x5230; 0&#xFF0C;&#x7136;&#x540E; RST &#x6240;&#x6709;&#x7684;&#x6D41;&#xFF0C;&#x76F4;&#x5230;&#x4E00;&#x4E2A;&#x5E26;&#x6709; ACT &#x8BBE;&#x7F6E;&#x4F4D;&#x7684; SETTINGS &#x5E27;&#x88AB;&#x63A5;&#x6536;&#x3002;</p>
<h3 id="4">4. &#x4E3A;&#x4EC0;&#x4E48;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x538B;&#x7F29;/&#x6D41;&#x63A7;&#x5236;&#x4E0A;&#x4E0B;&#x6587;&#xFF1F;</h3>
<p>&#x7B80;&#x5355;&#x7684;&#x8BF4;&#x4E00;&#x4E0B;&#x3002;</p>
<p>&#x6700;&#x521D;&#x7684;&#x63D0;&#x8BAE;&#x91CC;&#x6709;&#x6D41;&#x5206;&#x7EC4;&#x7684;&#x6982;&#x5FF5;&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x5171;&#x4EAB;&#x4E0A;&#x4E0B;&#x6587;&#xFF0C;&#x6D41;&#x91CF;&#x63A7;&#x5236;&#x7B49;&#x3002;&#x867D;&#x7136;&#x8FD9;&#x5C06;&#x4F7F;&#x4EE3;&#x7406;&#x53D7;&#x76CA;&#xFF08;&#x4EE5;&#x53CA;&#x4EE3;&#x7406;&#x7528;&#x6237;&#x7684;&#x4F53;&#x9A8C;&#xFF09;&#xFF0C;&#x4F46;&#x8FD9;&#x6837;&#x505A;&#x5374;&#x589E;&#x52A0;&#x4E86;&#x76F8;&#x5F53;&#x591A;&#x7684;&#x590D;&#x6742;&#x6027;&#x3002;&#x6240;&#x4EE5;&#x6211;&#x4EEC;&#x5C31;&#x51B3;&#x5B9A;&#x5148;&#x4EE5;&#x4E00;&#x4E2A;&#x7B80;&#x5355;&#x7684;&#x4E1C;&#x897F;&#x5F00;&#x59CB;&#xFF0C;&#x770B;&#x770B;&#x5B83;&#x4F1A;&#x6709;&#x591A;&#x7CDF;&#x7CD5;&#x7684;&#x95EE;&#x9898;&#xFF0C;&#x5E76;&#x4E14;&#x5728;&#x672A;&#x6765;&#x7684;&#x534F;&#x8BAE;&#x7248;&#x672C;&#x4E2D;&#x89E3;&#x51B3;&#x8FD9;&#x4E9B;&#x95EE;&#x9898;&#xFF08;&#x5982;&#x679C;&#x6709;&#x7684;&#x8BDD;&#xFF09;&#x3002;</p>
<h3 id="5hpackeos">5. &#x4E3A;&#x4EC0;&#x4E48; HPACK &#x4E2D;&#x6709; EOS &#x7B26;&#x53F7;&#xFF1F;</h3>
<p>HPACK &#x7684;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#xFF0C;&#x51FA;&#x4E8E; CPU &#x6548;&#x7387;&#x548C;&#x5B89;&#x5168;&#x6027;&#x7684;&#x8003;&#x8651;&#xFF0C;&#x5C06;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x586B;&#x5145;&#x5230;&#x4E0B;&#x4E00;&#x4E2A;&#x5B57;&#x8282;&#x8FB9;&#x754C;&#xFF1B;&#x4EFB;&#x4F55;&#x7279;&#x5B9A;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x53EF;&#x80FD;&#x9700;&#x8981; 0-7 &#x4F4D;&#x4E4B;&#x95F4;&#x7684;&#x586B;&#x5145;&#x3002;</p>
<p>&#x5982;&#x679C;&#x5355;&#x72EC;&#x8003;&#x8651;&#x970D;&#x592B;&#x66FC;&#x89E3;&#x7801;&#xFF0C;&#x90A3;&#x4E48;&#x4EFB;&#x4F55;&#x6BD4;&#x6240;&#x9700;&#x586B;&#x5145;&#x957F;&#x7684;&#x7B26;&#x53F7;&#x90FD;&#x53EF;&#x4EE5;&#x5DE5;&#x4F5C;&#xFF1B;&#x4F46;&#x662F;&#xFF0C;HPACK &#x7684;&#x8BBE;&#x8BA1;&#x5141;&#x8BB8;&#x6309;&#x5B57;&#x8282;&#x6BD4;&#x8F83;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x3002;&#x901A;&#x8FC7;&#x8981;&#x6C42;&#x5C06; EOS &#x7B26;&#x53F7;&#x7684;&#x4F4D;&#x7528;&#x4E8E;&#x586B;&#x5145;&#xFF0C;&#x6211;&#x4EEC;&#x786E;&#x4FDD;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x5BF9;&#x970D;&#x592B;&#x66FC;&#x7F16;&#x7801;&#x7684;&#x5B57;&#x7B26;&#x4E32;&#x8FDB;&#x884C;&#x5B57;&#x8282;&#x6BD4;&#x8F83;&#xFF0C;&#x4EE5;&#x786E;&#x5B9A;&#x662F;&#x5426;&#x76F8;&#x7B49;&#x3002;&#x53CD;&#x8FC7;&#x6765;&#xFF0C;&#x8FD9;&#x610F;&#x5473;&#x7740;&#x8BB8;&#x591A; headers &#x53EF;&#x4EE5;&#x5728;&#x4E0D;&#x9700;&#x8981;&#x970D;&#x592B;&#x66FC;&#x89E3;&#x7801;&#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x88AB;&#x89E3;&#x6790;&#x3002;</p>
<h3 id="6http11http2">6. &#x662F;&#x5426;&#x53EF;&#x4EE5;&#x5728;&#x4E0D;&#x5B9E;&#x73B0; HTTP/1.1 &#x7684;&#x60C5;&#x51B5;&#x4E0B;&#x5B9E;&#x73B0; HTTP/2&#xFF1F;</h3>
<p>&#x662F;&#x7684;&#xFF0C;&#x5927;&#x90E8;&#x5206;&#x60C5;&#x51B5;&#x90FD;&#x53EF;&#x4EE5;&#x3002;</p>
<p>&#x5BF9;&#x4E8E; TLS&#xFF08;h2&#xFF09;&#x4E0A;&#x7684; HTTP/2 &#xFF0C;&#x5982;&#x679C;&#x60A8;&#x672A;&#x5B9E;&#x73B0; http1.1 ALPN &#x6807;&#x8BC6;&#x7B26;&#xFF0C;&#x5219;&#x65E0;&#x9700;&#x652F;&#x6301;&#x4EFB;&#x4F55; HTTP/1.1 &#x529F;&#x80FD;&#x3002;</p>
<p>&#x5BF9;&#x4E8E;&#x57FA;&#x4E8E; TCP&#xFF08;h2c&#xFF09;&#x7684; HTTP/2 &#xFF0C;&#x60A8;&#x9700;&#x8981;&#x5B9E;&#x73B0;&#x521D;&#x59CB; Upgrade &#x5347;&#x7EA7;&#x8BF7;&#x6C42;&#x3002;</p>
<p>&#x53EA;&#x652F;&#x6301; h2c &#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x9700;&#x8981;&#x751F;&#x6210;&#x4E00;&#x4E2A;&#x9488;&#x5BF9; OPTIONS &#x7684;&#x8BF7;&#x6C42;&#xFF0C;&#x56E0;&#x4E3A; &#x201C;*&#x201D; &#x6216;&#x8005;&#x4E00;&#x4E2A;&#x9488;&#x5BF9; &#x201C;/&#x201D; &#x7684; HEAD &#x8BF7;&#x6C42;&#xFF0C;&#x5B83;&#x4EEC;&#x76F8;&#x5F53;&#x5B89;&#x5168;&#x4E14;&#x6613;&#x4E8E;&#x6784;&#x9020;&#x3002;&#x5E0C;&#x671B;&#x4EC5;&#x5B9E;&#x73B0; HTTP/2 &#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x5C06;&#x9700;&#x8981;&#x5C06;&#x6CA1;&#x6709; 101 &#x72B6;&#x6001;&#x7801;&#x7684; HTTP/1.1 &#x54CD;&#x5E94;&#x89C6;&#x4E3A;&#x9519;&#x8BEF;&#x3002;</p>
<p>&#x53EA;&#x652F;&#x6301; h2c &#x7684;&#x670D;&#x52A1;&#x5668;&#x53EF;&#x4EE5;&#x4F7F;&#x7528;&#x4E00;&#x4E2A;&#x56FA;&#x5B9A;&#x7684; 101 &#x54CD;&#x5E94;&#x6765;&#x63A5;&#x6536;&#x4E00;&#x4E2A;&#x5305;&#x542B;&#x5347;&#x7EA7;&#xFF08;Upgrade&#xFF09;&#x6D88;&#x606F;&#x5934;&#x5B57;&#x6BB5;&#x7684;&#x8BF7;&#x6C42;&#x3002;&#x6CA1;&#x6709; h2c &#x5347;&#x7EA7;&#x4EE4;&#x724C;&#x7684;&#x8BF7;&#x6C42;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x5305;&#x542B; Upgrade &#x5934;&#x5B57;&#x6BB5;&#x7684; 505&#xFF08;&#x4E0D;&#x652F;&#x6301; HTTP &#x7248;&#x672C;&#xFF09;&#x72B6;&#x6001;&#x7801;&#x62D2;&#x7EDD;&#x3002;&#x4E0D;&#x5E0C;&#x671B;&#x5904;&#x7406; HTTP/1.1 &#x54CD;&#x5E94;&#x7684;&#x670D;&#x52A1;&#x5668;&#x5E94;&#x5728;&#x53D1;&#x9001;&#x8FDE;&#x63A5;&#x5E8F;&#x8A00;&#x540E;&#xFF0C;&#x5E94;&#x8BE5;&#x7ACB;&#x5373;&#x7528; REFUSED_STREAM &#x9519;&#x8BEF;&#x7801;&#x62D2;&#x7EDD; stream 1&#xFF0C;&#x4EE5;&#x9F13;&#x52B1;&#x5BA2;&#x6237;&#x7AEF;&#x901A;&#x8FC7; upgraded &#x7684; HTTP/2 &#x8FDE;&#x63A5;&#x91CD;&#x8BD5;&#x8BF7;&#x6C42;&#x3002;</p>
<h3 id="7532">7. &#x7B2C; 5.3.2 &#x8282;&#x4E2D;&#x7684;&#x4F18;&#x5148;&#x7EA7;&#x793A;&#x4F8B;&#x4E0D;&#x6B63;&#x786E;&#x5417;&#xFF1F;</h3>
<p>&#x662F;&#x6B63;&#x786E;&#x7684;&#x3002;&#x6D41; B &#x7684;&#x6743;&#x91CD;&#x4E3A; 4&#xFF0C;&#x6D41; C &#x7684;&#x6743;&#x91CD;&#x4E3A; 12&#x3002;&#x8981;&#x786E;&#x5B9A;&#x8FD9;&#x4E9B;&#x6D41;&#x4E2D;&#x7684;&#x6BCF;&#x4E00;&#x4E2A;&#x63A5;&#x6536;&#x7684;&#x53EF;&#x7528;&#x8D44;&#x6E90;&#x7684;&#x6BD4;&#x4F8B;&#xFF0C;&#x8BF7;&#x5C06;&#x6240;&#x6709;&#x6743;&#x91CD;&#x76F8;&#x52A0;&#xFF08;16&#xFF09;&#xFF0C;&#x7136;&#x540E;&#x5C06;&#x6BCF;&#x4E2A;&#x6D41;&#x7684;&#x6743;&#x91CD;&#x9664;&#x4EE5;&#x603B;&#x6743;&#x91CD;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x6D41; B &#x83B7;&#x5F97;&#x4E86;&#x56DB;&#x5206;&#x4E4B;&#x4E00;&#x7684;&#x53EF;&#x7528;&#x8D44;&#x6E90;&#xFF0C;&#x6D41;C&#x83B7;&#x5F97;&#x4E86;&#x56DB;&#x5206;&#x4E4B;&#x4E09;&#x3002;&#x56E0;&#x6B64;&#xFF0C;&#x5982;&#x89C4;&#x8303;&#x6240;&#x8FF0;&#xFF1A;<a href="http://http2.github.io/http2-spec/#rfc.section.5.3.2">&#x6D41; B &#x7406;&#x60F3;&#x5730;&#x63A5;&#x6536;&#x5206;&#x914D;&#x7ED9;&#x6D41; C &#x7684;&#x8D44;&#x6E90;&#x7684;&#x4E09;&#x5206;&#x4E4B;&#x4E00;</a>&#x3002;</p>
<h3 id="8http2tcp_nodelay">8. HTTP/2 &#x8FDE;&#x63A5;&#x9700;&#x8981; TCP_NODELAY &#x4E48;&#xFF1F;</h3>
<p>&#x6709;&#x53EF;&#x80FD;&#x9700;&#x8981;&#x3002;&#x5373;&#x4F7F;&#x5BF9;&#x4E8E;&#x4EC5;&#x4F7F;&#x7528;&#x5355;&#x4E2A;&#x6D41;&#x4E0B;&#x8F7D;&#x5927;&#x91CF;&#x6570;&#x636E;&#x7684;&#x5BA2;&#x6237;&#x7AEF;&#x5B9E;&#x73B0;&#xFF0C;&#x4ECD;&#x5C06;&#x6709;&#x5FC5;&#x8981;&#x5411;&#x76F8;&#x53CD;&#x65B9;&#x5411;&#x53D1;&#x9001;&#x4E00;&#x4E9B;&#x6570;&#x636E;&#x5305;&#x4EE5;&#x5B9E;&#x73B0;&#x6700;&#x5927;&#x4F20;&#x8F93;&#x901F;&#x5EA6;&#x3002;&#x5982;&#x679C;&#x672A;&#x8BBE;&#x7F6E; TCP_NODELAY&#xFF08;&#x4ECD;&#x5141;&#x8BB8; Nagle &#x7B97;&#x6CD5;&#xFF09;&#xFF0C;&#x5219;&#x4F20;&#x51FA;&#x6570;&#x636E;&#x5305;&#x53EF;&#x80FD;&#x4F1A;&#x4FDD;&#x7559;&#x4E00;&#x6BB5;&#x65F6;&#x95F4;&#xFF0C;&#x4EE5;&#x5141;&#x8BB8;&#x5B83;&#x4EEC;&#x4E0E;&#x540E;&#x7EED;&#x6570;&#x636E;&#x5305;&#x5408;&#x5E76;&#x3002;</p>
<p>&#x4F8B;&#x5982;&#xFF0C;&#x5982;&#x679C;&#x8FD9;&#x6837;&#x4E00;&#x4E2A;&#x6570;&#x636E;&#x5305;&#x544A;&#x8BC9;&#x5BF9;&#x7B49;&#x7AEF;&#x6709;&#x66F4;&#x591A;&#x53EF;&#x7528;&#x7684;&#x7A97;&#x53E3;&#x6765;&#x53D1;&#x9001;&#x6570;&#x636E;&#xFF0C;&#x90A3;&#x4E48;&#x5C06;&#x5176;&#x53D1;&#x9001;&#x5EF6;&#x8FDF;&#x6570;&#x6BEB;&#x79D2;&#xFF08;&#x6216;&#x66F4;&#x957F;&#x65F6;&#x95F4;&#xFF09;&#x4F1A;&#x5BF9;&#x9AD8;&#x901F;&#x8FDE;&#x63A5;&#x9020;&#x6210;&#x4E25;&#x91CD;&#x5F71;&#x54CD;&#x3002;</p>
<h2 id>&#x4E09;. &#x90E8;&#x7F72;&#x95EE;&#x9898;</h2>
<h3 id="1http2">1. &#x5982;&#x679C; HTTP/2 &#x662F;&#x52A0;&#x5BC6;&#x7684;&#xFF0C;&#x6211;&#x8BE5;&#x5982;&#x4F55;&#x8C03;&#x8BD5;&#xFF1F;</h3>
<p>&#x6709;&#x5F88;&#x591A;&#x65B9;&#x6CD5;&#x53EF;&#x4EE5;&#x8BBF;&#x95EE;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x6570;&#x636E;&#xFF0C;&#x4F46;&#x6700;&#x7B80;&#x5355;&#x7684;&#x65B9;&#x6CD5;&#x662F; <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format">NSS keylogging</a> &#x4E0E; Wireshark &#x63D2;&#x4EF6;&#xFF08;&#x5305;&#x542B;&#x5728;&#x6700;&#x65B0;&#x5F00;&#x53D1;&#x7248;&#x672C;&#x4E2D;&#xFF09;&#x7ED3;&#x5408;&#x4F7F;&#x7528;&#x3002;&#x8FD9;&#x4E2A;&#x65B9;&#x6CD5;&#x5BF9; Firefox &#x548C; Chrome &#x5747;&#x53EF;&#x9002;&#x7528;&#x3002;</p>
<h3 id="2http2">2. &#x5982;&#x4F55;&#x4F7F;&#x7528; HTTP/2 &#x670D;&#x52A1;&#x5668;&#x63A8;&#x9001;</h3>
<p>HTTP/2 &#x670D;&#x52A1;&#x5668;&#x63A8;&#x9001;&#x5141;&#x8BB8;&#x670D;&#x52A1;&#x5668;&#x65E0;&#x9700;&#x7B49;&#x5F85;&#x8BF7;&#x6C42;&#x5373;&#x53EF;&#x5411;&#x5BA2;&#x6237;&#x7AEF;&#x63D0;&#x4F9B;&#x5185;&#x5BB9;&#x3002;&#x8FD9;&#x53EF;&#x4EE5;&#x6539;&#x5584;&#x68C0;&#x7D22;&#x8D44;&#x6E90;&#x7684;&#x65F6;&#x95F4;&#xFF0C;&#x7279;&#x522B;&#x662F;&#x5BF9;&#x4E8E;&#x5177;&#x6709;<a href="https://en.wikipedia.org/wiki/Bandwidth-delay_product">&#x5927;&#x5E26;&#x5BBD;&#x5EF6;&#x8FDF;&#x4EA7;&#x54C1;</a>&#x7684;&#x8FDE;&#x63A5;&#xFF0C;&#x5176;&#x4E2D;&#x7F51;&#x7EDC;&#x5F80;&#x8FD4;&#x65F6;&#x95F4;&#x5360;&#x4E86;&#x5728;&#x8D44;&#x6E90;&#x4E0A;&#x82B1;&#x8D39;&#x7684;&#x5927;&#x90E8;&#x5206;&#x65F6;&#x95F4;&#x3002;</p>
<p>&#x63A8;&#x9001;&#x57FA;&#x4E8E;&#x8BF7;&#x6C42;&#x5185;&#x5BB9;&#x800C;&#x53D8;&#x5316;&#x7684;&#x8D44;&#x6E90;&#x53EF;&#x80FD;&#x662F;&#x4E0D;&#x660E;&#x667A;&#x7684;&#x3002;&#x76EE;&#x524D;&#xFF0C;&#x6D4F;&#x89C8;&#x5668;&#x53EA;&#x4F1A;&#x63A8;&#x9001;&#x8BF7;&#x6C42;&#xFF0C;&#x5982;&#x679C;&#x4ED6;&#x4EEC;&#x4E0D;&#x8FD9;&#x6837;&#x505A;&#xFF0C;&#x5C31;&#x4F1A;&#x63D0;&#x51FA;&#x5339;&#x914D;&#x7684;&#x8BF7;&#x6C42;&#xFF08;&#x8BF7;&#x53C2;&#x9605; <a href="https://tools.ietf.org/html/rfc7234#section-4">RFC 7234 &#x7684;&#x7B2C; 4 &#x8282;</a>&#xFF09;&#x3002;</p>
<p>&#x67D0;&#x4E9B;&#x7F13;&#x5B58;&#x4E0D;&#x8003;&#x8651;&#x6240;&#x6709;&#x8BF7;&#x6C42;&#x5934;&#x5B57;&#x6BB5;&#x4E2D;&#x7684;&#x53D8;&#x5316;&#xFF0C;&#x5373;&#x4F7F;&#x5B83;&#x4EEC;&#x5728; Vary &#x5934;&#x5B57;&#x6BB5;&#x4E2D;&#x3002;&#x4E3A;&#x4E86;&#x4F7F;&#x63A8;&#x9001;&#x8D44;&#x6E90;&#x88AB;&#x63A5;&#x6536;&#x7684;&#x53EF;&#x80FD;&#x6027;&#x6700;&#x5927;&#x5316;&#xFF0C;&#x5185;&#x5BB9;&#x534F;&#x5546;&#x662F;&#x6700;&#x597D;&#x7684;&#x9009;&#x62E9;&#x3002;&#x57FA;&#x4E8E; accept-encoding &#x62A5;&#x5934;&#x5B57;&#x6BB5;&#x7684;&#x5185;&#x5BB9;&#x534F;&#x5546;&#x53D7;&#x5230;&#x7F13;&#x5B58;&#x7684;&#x5E7F;&#x6CDB;&#x5C0A;&#x91CD;&#xFF0C;&#x4F46;&#x662F;&#x53EF;&#x80FD;&#x65E0;&#x6CD5;&#x5F88;&#x597D;&#x5730;&#x652F;&#x6301;&#x5176;&#x4ED6;&#x5934;&#x5B57;&#x6BB5;&#x3002;</p>
<hr>
<p>Reference&#xFF1A;</p>
<p><a href="https://http2.github.io/faq/">HTTP/2 Frequently Asked Questions</a></p>
<blockquote>
<p>GitHub Repo&#xFF1A;<a href="https://github.com/halfrost/Halfrost-Field">Halfrost-Field</a></p>
<p>Follow: <a href="https://github.com/halfrost">halfrost &#xB7; GitHub</a></p>
<p>Source: <a href="https://halfrost.com/http2-frequently-asked-questions/"><strong>GHOST_URL</strong>/http2-frequently-asked-questions/</a></p>
</blockquote>
<!--kg-card-end: markdown-->]]></content:encoded></item></channel></rss>