{"id":401,"date":"2026-07-06T17:33:03","date_gmt":"2026-07-06T09:33:03","guid":{"rendered":"https:\/\/www.kirasu.cn\/index.php\/2026\/07\/05\/java%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e7%82%b9%e6%89%ab%e7%9b%b2\/"},"modified":"2026-07-06T17:33:03","modified_gmt":"2026-07-06T09:33:03","slug":"java%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e7%82%b9%e6%89%ab%e7%9b%b2","status":"publish","type":"post","link":"https:\/\/www.kirasu.cn\/index.php\/2026\/07\/06\/java%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86%e7%82%b9%e6%89%ab%e7%9b%b2\/","title":{"rendered":"Java\u57fa\u7840\u77e5\u8bc6\u70b9\u626b\u76f2"},"content":{"rendered":"<p><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/player.bilibili.com\/player.html?bvid=BV1Jp4y1t7yG&amp;page=1&amp;high_quality=1&amp;danmaku=0\" title=\"Bilibili video player\" frameborder=\"0\" allowfullscreen=\"\"><\/iframe><\/p>\n<hr \/>\n<h2>01-\u9762\u5411\u5bf9\u8c61<\/h2>\n<h3>\u4e00\u3001\u9762\u5411\u5bf9\u8c61 vs \u9762\u5411\u8fc7\u7a0b<\/h3>\n<ol>\n<li>\u9762\u5411\u8fc7\u7a0b\u5c06\u4efb\u52a1\u62c6\u89e3\u6210\u4e00\u7cfb\u5217\u6b65\u9aa4\uff0c\u6bcf\u4e2a\u6b65\u9aa4\u5bf9\u5e94\u4e00\u4e2a\u51fd\u6570\uff0c\u6309\u987a\u5e8f\u6267\u884c\u3002<\/li>\n<li>\u9762\u5411\u5bf9\u8c61\u5219\u5148\u5206\u6790\u9700\u6c42\u4e2d\u6709\u54ea\u4e9b\u53c2\u4e0e\u8005\uff08\u5bf9\u8c61\uff09\uff0c\u518d\u660e\u786e\u6bcf\u4e2a\u5bf9\u8c61\u5404\u81ea\u9700\u8981\u505a\u4ec0\u4e48\u3002<\/li>\n<li>\u9762\u5411\u8fc7\u7a0b\u66f4\u6ce8\u91cd\u4e8b\u60c5\u7684\u6b65\u9aa4\u548c\u987a\u5e8f\uff0c\u9762\u5411\u5bf9\u8c61\u66f4\u6ce8\u91cd\u9700\u6c42\u4e2d\u7684\u5bf9\u8c61\u53ca\u5176\u804c\u8d23\u5212\u5206\u3002<\/li>\n<li>\u9762\u5411\u8fc7\u7a0b\u76f4\u63a5\u9ad8\u6548\uff0c\u60f3\u5230\u4ec0\u4e48\u5c31\u505a\u4ec0\u4e48\uff1b\u9762\u5411\u5bf9\u8c61\u9700\u8981\u5148\u5206\u6790\u518d\u8bbe\u8ba1\uff0c\u6709\u4e00\u4e2a\u5206\u6790\u8fc7\u7a0b\u3002<\/li>\n<li>\u9762\u5411\u5bf9\u8c61\u66f4\u6613\u4e8e\u590d\u7528\u3001\u6269\u5c55\u548c\u7ef4\u62a4\uff0c\u800c\u9762\u5411\u8fc7\u7a0b\u5728\u6027\u80fd\u65b9\u9762\u66f4\u6709\u4f18\u52bf\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5c01\u88c5<\/h3>\n<ol start=\"6\">\n<li>\u5c01\u88c5\u7684\u610f\u4e49\u5728\u4e8e\u660e\u786e\u6807\u8bc6\u51fa\u5141\u8bb8\u5916\u90e8\u4f7f\u7528\u7684\u6210\u5458\uff0c\u5185\u90e8\u7ec6\u8282\u5bf9\u5916\u90e8\u8c03\u7528\u8005\u900f\u660e\u3002<\/li>\n<li>\u5c01\u88c5\u8ba9\u5916\u90e8\u8c03\u7528\u8005\u53ea\u9700\u77e5\u9053\u65b9\u6cd5\u600e\u4e48\u8c03\u7528\uff0c\u65e0\u9700\u5173\u5fc3\u5185\u90e8\u5177\u4f53\u5b9e\u73b0\u3002<\/li>\n<li>Java \u4e2d\u5c01\u88c5\u7684\u7ecf\u5178\u573a\u666f\u4e4b\u4e00\uff1aJavaBean \u5c06\u5c5e\u6027\u79c1\u6709\u5316\uff0c\u901a\u8fc7 get\/set \u65b9\u6cd5\u5bf9\u5916\u63d0\u4f9b\u8bbf\u95ee\u5165\u53e3\u3002<\/li>\n<li>JavaBean \u5c01\u88c5\u53ef\u4fdd\u8bc1\u5c5e\u6027\u7684\u8d4b\u503c\u548c\u83b7\u53d6\u903b\u8f91\uff08\u5982\u547d\u540d\u89c4\u5219\uff09\u7531\u7c7b\u672c\u8eab\u63a7\u5236\uff0c\u9632\u6b62\u5916\u90e8\u968f\u610f\u4fee\u6539\u3002<\/li>\n<li>\u5c01\u88c5\u7684\u7ecf\u5178\u573a\u666f\u4e4b\u4e8c\uff1a\u4f7f\u7528 ORM \u6846\u67b6\uff08\u5982 MyBatis\uff09\u65f6\uff0c\u65e0\u9700\u5173\u5fc3\u8fde\u63a5\u5efa\u7acb\u3001SQL \u6267\u884c\u7b49\u7ec6\u8282\uff0c\u76f4\u63a5\u8c03\u7528\u65b9\u6cd5\u5373\u53ef\uff0c\u6846\u67b6\u5c01\u88c5\u4e86\u5e95\u5c42\u64cd\u4f5c\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u7ee7\u627f<\/h3>\n<ol start=\"11\">\n<li>\u7ee7\u627f\u662f\u6307\u5b50\u7c7b\u901a\u8fc7 extends \u5173\u952e\u5b57\u7ee7\u627f\u7236\u7c7b\uff0c\u590d\u7528\u7236\u7c7b\u7684\u65b9\u6cd5\u5e76\u53ef\u4ee5\u505a\u51fa\u81ea\u5df1\u7684\u6539\u53d8\u6216\u6269\u5c55\u3002<\/li>\n<li>\u7ee7\u627f\u5c06\u591a\u4e2a\u5b50\u7c7b\u7684\u5171\u6027\u5185\u5bb9\u62bd\u53d6\u5230\u7236\u7c7b\u4e2d\uff0c\u5b50\u7c7b\u53ea\u9700\u5173\u6ce8\u81ea\u5df1\u4e2a\u6027\u5316\u7684\u90e8\u5206\uff0c\u8fbe\u5230\u4ee3\u7801\u590d\u7528\u3001\u51cf\u5c11\u5197\u4f59\u7684\u76ee\u7684\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u591a\u6001<\/h3>\n<ol start=\"13\">\n<li>\u591a\u6001\u7684\u4e09\u4e2a\u6761\u4ef6\uff1a\u5b58\u5728\u7ee7\u627f\u5173\u7cfb\u3001\u5b50\u7c7b\u91cd\u5199\u7236\u7c7b\u65b9\u6cd5\u3001\u7236\u7c7b\u5f15\u7528\u6307\u5411\u5b50\u7c7b\u5bf9\u8c61\u3002<\/li>\n<li>\u591a\u6001\u7684\u542b\u4e49\uff1a\u57fa\u4e8e\u5bf9\u8c61\u6240\u5c5e\u7c7b\u7684\u4e0d\u540c\uff0c\u5916\u90e8\u5bf9\u540c\u4e00\u4e2a\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u5b9e\u9645\u6267\u884c\u7684\u903b\u8f91\u4e0d\u540c\u3002<\/li>\n<li>\u591a\u6001\u7684\u597d\u5904\uff1a\u66f4\u6362\u5b50\u7c7b\u5b9e\u73b0\u65f6\uff0c\u53ea\u9700\u4fee\u6539 new \u7684\u5bf9\u8c61\uff0c\u8c03\u7528\u65b9\u7684\u4ee3\u7801\u65e0\u9700\u6539\u52a8\uff0c\u5229\u4e8e\u7a0b\u5e8f\u7ef4\u62a4\u548c\u6269\u5c55\u3002<\/li>\n<li>\u591a\u6001\u7684\u5f0a\u7aef\uff1a\u65e0\u6cd5\u8c03\u7528\u5b50\u7c7b\u7279\u6709\u7684\u3001\u975e\u91cd\u5199\u7236\u7c7b\u7684\u65b9\u6cd5\uff0c\u56e0\u4e3a\u8c03\u7528\u7684\u65b9\u6cd5\u5fc5\u987b\u5728\u7236\u7c7b\u4e2d\u6709\u5b9a\u4e49\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u9762\u8bd5\u56de\u7b54\u8981\u70b9<\/h3>\n<ol start=\"17\">\n<li>\u56de\u7b54\u201c\u4ec0\u4e48\u662f\u9762\u5411\u5bf9\u8c61\u201d\u65f6\uff0c\u65e2\u8981\u8bb2\u6e05\u9762\u5411\u5bf9\u8c61\u4e0e\u9762\u5411\u8fc7\u7a0b\u7684\u533a\u522b\uff0c\u4e5f\u8981\u6db5\u76d6\u5c01\u88c5\u3001\u7ee7\u627f\u3001\u591a\u6001\u4e09\u5927\u7279\u6027\uff0c\u5426\u5219\u53ea\u7b97\u7b54\u5bf9\u4e86\u4e00\u5c0f\u534a\u3002<\/li>\n<\/ol>\n<h2>02-JDK\u3001JRE\u3001JVM\u533a\u522b\u548c\u8054\u7cfb<\/h2>\n<hr \/>\n<ol>\n<li>JDK \u5168\u79f0\u662f Java Development Kit\uff08Java \u5f00\u53d1\u5de5\u5177\u5305\uff09\uff0c\u662f\u63d0\u4f9b\u7ed9\u5f00\u53d1\u4eba\u5458\u4f7f\u7528\u7684\u3002<\/li>\n<li>JRE \u5168\u79f0\u662f Java Runtime Environment\uff08Java \u8fd0\u884c\u65f6\u73af\u5883\uff09\uff0c\u662f\u63d0\u4f9b\u7ed9\u4ec5\u9700\u8fd0\u884c Java \u7a0b\u5e8f\u7684\u666e\u901a\u7528\u6237\u4f7f\u7528\u7684\u3002<\/li>\n<li>JVM \u662f Java \u865a\u62df\u673a\uff0c\u7528\u4e8e\u5c06 .class \u6587\u4ef6\u89e3\u91ca\u6210\u673a\u5668\u7801\uff0c\u4f9b\u64cd\u4f5c\u7cfb\u7edf\u6267\u884c\u3002<\/li>\n<li>JDK \u5b89\u88c5\u5305\u4e2d\u5b9e\u9645\u4e0a\u5df2\u7ecf\u5305\u542b\u4e86\u5b8c\u6574\u7684 JRE\u3002<\/li>\n<li>JRE \u7684\u6838\u5fc3\u5305\u542b\u4e24\u4e2a\u76ee\u5f55\uff1abin \u76ee\u5f55\uff08\u5373 JVM\uff09\u548c lib \u76ee\u5f55\uff08\u5b58\u653e Java \u6838\u5fc3\u7c7b\u5e93\uff0c\u5982 rt.jar\uff09\u3002<\/li>\n<li>JDK = JRE + \u5f00\u53d1\u5de5\u5177\uff08\u5982 javac\u3001java\u3001jconsole\u3001jdb \u7b49\uff09\u3002<\/li>\n<li>\u4e09\u8005\u7684\u5305\u542b\u5173\u7cfb\u4e3a\uff1aJDK \u5305\u542b JRE\uff0cJRE \u5305\u542b JVM\u3002<\/li>\n<li>Java \u6e90\u6587\u4ef6\uff08.java\uff09\u5148\u7531 javac \u7f16\u8bd1\u6210 .class \u5b57\u8282\u7801\u6587\u4ef6\uff0c\u518d\u7531 JVM \u89e3\u91ca\u6267\u884c\u3002<\/li>\n<li>JVM \u62e5\u6709 Windows\u3001Linux \u7b49\u591a\u4e2a\u64cd\u4f5c\u7cfb\u7edf\u7248\u672c\uff0c\u8fd9\u662f Java \u5b9e\u73b0&#8221;\u4e00\u6b21\u7f16\u8bd1\uff0c\u5230\u5904\u8fd0\u884c&#8221;\u7684\u6839\u672c\u539f\u56e0\u3002<\/li>\n<li>&#8220;\u4e00\u6b21\u7f16\u8bd1\uff0c\u5230\u5904\u8fd0\u884c&#8221;\u6307\u7684\u662f\u540c\u4e00\u4efd .class \u6587\u4ef6\u53ef\u4ee5\u5728\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u7684 JVM \u4e0a\u8fd0\u884c\uff0c\u800c\u4e0d\u662f JVM \u672c\u8eab\u53ef\u4ee5\u5230\u5904\u8fd0\u884c\u3002<\/li>\n<li>JVM \u5728\u89e3\u91ca .class \u6587\u4ef6\u65f6\uff0c\u4f1a\u501f\u52a9 lib \u76ee\u5f55\u4e2d\u7684\u6838\u5fc3\u7c7b\u5e93\u5c06\u5b57\u8282\u7801\u7ffb\u8bd1\u6210\u673a\u5668\u7801\uff0c\u518d\u6620\u5c04\u5e76\u8c03\u7528\u64cd\u4f5c\u7cfb\u7edf\u63a5\u53e3\uff0c\u6700\u7ec8\u8ba9\u7a0b\u5e8f\u8fd0\u884c\u8d77\u6765<\/li>\n<\/ol>\n<h2>03-==\u548cequals<\/h2>\n<hr \/>\n<ol>\n<li><code>==<\/code> \u7528\u4e8e\u57fa\u672c\u6570\u636e\u7c7b\u578b\u65f6\uff0c\u6bd4\u8f83\u7684\u662f\u53d8\u91cf\u503c\uff1b\u7528\u4e8e\u5f15\u7528\u7c7b\u578b\u65f6\uff0c\u6bd4\u8f83\u7684\u662f\u5f15\u7528\u5730\u5740\uff08\u5373\u5806\u4e2d\u5bf9\u8c61\u7684\u5730\u5740\uff09\u3002<\/li>\n<li>Java \u4e2d\u57fa\u672c\u6570\u636e\u7c7b\u578b\u7684\u53d8\u91cf\u76f4\u63a5\u5728\u6808\u4e2d\u5206\u914d\u5185\u5b58\u3002<\/li>\n<li>\u5f15\u7528\u7c7b\u578b\u7684\u53d8\u91cf\uff08\u5982 <code>String<\/code>\uff09\u5728\u6808\u4e2d\u5b58\u50a8\u7684\u662f\u6307\u5411\u5806\u4e2d\u5bf9\u8c61\u7684\u5f15\u7528\u5730\u5740\u3002<\/li>\n<li>\u7528 <code>new String()<\/code> \u521b\u5efa\u5b57\u7b26\u4e32\u65f6\uff0c\u5bf9\u8c61\u5728\u5806\u4e2d\u5206\u914d\u5185\u5b58\uff0c\u6bcf\u6b21 <code>new<\/code> \u90fd\u4f1a\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u5185\u5b58\u5730\u5740\u3002<\/li>\n<li><code>equals()<\/code> \u65b9\u6cd5\u5728 <code>Object<\/code> \u7c7b\u4e2d\u7684\u9ed8\u8ba4\u5b9e\u73b0\uff0c\u672c\u8d28\u4e0a\u4e5f\u662f\u4f7f\u7528 <code>==<\/code> \u6bd4\u8f83\u5f15\u7528\u5730\u5740\u3002<\/li>\n<li><code>equals()<\/code> \u65b9\u6cd5\u53ef\u4ee5\u88ab\u91cd\u5199\uff0c\u5b9e\u9645\u5f00\u53d1\u4e2d\u901a\u5e38\u90fd\u4f1a\u91cd\u5199\u4ee5\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u6bd4\u8f83\u903b\u8f91\u3002<\/li>\n<li><code>String<\/code> \u7c7b\u5df2\u7ecf\u91cd\u5199\u4e86 <code>equals()<\/code> \u65b9\u6cd5\uff0c\u6bd4\u8f83\u7684\u662f\u5b57\u7b26\u4e32\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5b57\u7b26\u662f\u5426\u5b8c\u5168\u76f8\u7b49\u3002<\/li>\n<li>\u901a\u8fc7\u5b57\u9762\u91cf\u65b9\u5f0f\uff08<code>String s = \"hello\"<\/code>\uff09\u5b9a\u4e49\u7684\u5b57\u7b26\u4e32\uff0c\u4f1a\u5728\u5e38\u91cf\u6c60\u4e2d\u5206\u914d\u5185\u5b58\u3002<\/li>\n<li>\u901a\u8fc7 <code>new String(\"hello\")<\/code> \u65b9\u5f0f\u5b9a\u4e49\u7684\u5b57\u7b26\u4e32\uff0c\u5219\u5728\u5806\u4e2d\u5206\u914d\u5185\u5b58\u3002<\/li>\n<li>\u7531\u5df2\u6709\u5b57\u7b26\u4e32\u53d8\u91cf\u76f4\u63a5\u8d4b\u503c\uff08<code>String s3 = s2<\/code>\uff09\u4f20\u9012\u7684\u662f\u5f15\u7528\u5730\u5740\uff0c\u6240\u4ee5\u4e24\u4e2a\u53d8\u91cf\u6307\u5411\u540c\u4e00\u5757\u5185\u5b58\u3002<\/li>\n<li>\u7528 <code>==<\/code> \u6bd4\u8f83\u5b57\u9762\u91cf\u5b57\u7b26\u4e32\u548c <code>new<\/code> \u51fa\u6765\u7684\u5b57\u7b26\u4e32\u65f6\uff0c\u56e0\u4e3a\u4e00\u4e2a\u5728\u5e38\u91cf\u6c60\u3001\u4e00\u4e2a\u5728\u5806\u4e2d\uff0c\u5730\u5740\u4e0d\u540c\uff0c\u7ed3\u679c\u4e3a <code>false<\/code>\u3002<\/li>\n<li>\u7528 <code>==<\/code> \u6bd4\u8f83\u4e24\u4e2a <code>new<\/code> \u51fa\u6765\u7684\u5b57\u7b26\u4e32\uff0c\u56e0\u5730\u5740\u4e0d\u540c\uff0c\u7ed3\u679c\u4e5f\u4e3a <code>false<\/code>\u3002<\/li>\n<li>\u56e0\u4e3a <code>String<\/code> \u91cd\u5199\u4e86 <code>equals()<\/code>\uff0c\u6240\u4ee5\u53ea\u8981\u5b57\u7b26\u4e32\u5185\u5bb9\u76f8\u540c\uff0c<code>equals()<\/code> \u6bd4\u8f83\u7ed3\u679c\u4e00\u5b9a\u4e3a <code>true<\/code>\uff0c\u4e0d\u53d7\u521b\u5efa\u65b9\u5f0f\u5f71\u54cd\u3002<\/li>\n<\/ol>\n<h2>04-final<\/h2>\n<hr \/>\n<h3>\u4e00\u3001final \u7684\u4f5c\u7528<\/h3>\n<ol>\n<li><code>final<\/code> \u5173\u952e\u5b57\u5728 Java \u4e2d\u7684\u542b\u4e49\u662f&#8221;\u6700\u7ec8\u7684&#8221;\uff0c\u53ef\u4ee5\u7528\u6765\u4fee\u9970\u7c7b\u3001\u65b9\u6cd5\u548c\u53d8\u91cf\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u7c7b\u65f6\uff0c\u8be5\u7c7b\u4e0d\u80fd\u88ab\u7ee7\u627f\uff08\u5373\u4e0d\u80fd\u6709\u5b50\u7c7b\uff09\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u65b9\u6cd5\u65f6\uff0c\u8be5\u65b9\u6cd5\u4e0d\u80fd\u88ab\u5b50\u7c7b\u91cd\u5199\uff08\u8986\u76d6\uff09\uff0c\u4f46\u53ef\u4ee5\u5b58\u5728\u91cd\u8f7d\uff08\u53c2\u6570\u5217\u8868\u4e0d\u540c\uff09\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u53d8\u91cf\u65f6\uff0c\u8be5\u53d8\u91cf\u4e00\u65e6\u88ab\u8d4b\u503c\u5c31\u4e0d\u80fd\u518d\u66f4\u6539\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u666e\u901a\u6210\u5458\u53d8\u91cf\u65f6\uff0c\u5fc5\u987b\u5728\u58f0\u660e\u65f6\u3001\u666e\u901a\u4ee3\u7801\u5757\u4e2d\u6216\u6784\u9020\u5668\u4e2d\u5b8c\u6210\u521d\u59cb\u5316\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u9759\u6001\u6210\u5458\u53d8\u91cf\uff08\u7c7b\u53d8\u91cf\uff09\u65f6\uff0c\u5fc5\u987b\u5728\u58f0\u660e\u65f6\u6216\u9759\u6001\u4ee3\u7801\u5757\u4e2d\u5b8c\u6210\u521d\u59cb\u5316\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u5c40\u90e8\u53d8\u91cf\u65f6\uff0c\u7cfb\u7edf\u4e0d\u4f1a\u4e3a\u5176\u9ed8\u8ba4\u521d\u59cb\u5316\uff0c\u5fc5\u987b\u7531\u7a0b\u5e8f\u5458\u663e\u5f0f\u8d4b\u503c\uff0c\u4e14\u5728\u4f7f\u7528\u524d\u5fc5\u987b\u5b8c\u6210\u8d4b\u503c\uff08\u4e0d\u8981\u6c42\u58f0\u660e\u65f6\u7acb\u5373\u8d4b\u503c\uff09\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u57fa\u672c\u7c7b\u578b\u53d8\u91cf\u65f6\uff0c\u8be5\u53d8\u91cf\u7684\u6570\u503c\u4e00\u65e6\u521d\u59cb\u5316\u540e\u4e0d\u80fd\u518d\u4fee\u6539\u3002<\/li>\n<li><code>final<\/code> \u4fee\u9970\u5f15\u7528\u7c7b\u578b\u53d8\u91cf\u65f6\uff0c\u8be5\u53d8\u91cf\u521d\u59cb\u5316\u540e\u4e0d\u80fd\u518d\u6307\u5411\u53e6\u4e00\u4e2a\u5bf9\u8c61\uff08<code>=<\/code> \u4e0d\u80fd\u518d\u4f7f\u7528\uff09\uff0c\u4f46\u5bf9\u8c61\u5185\u90e8\u7684\u5c5e\u6027\u503c\u53ef\u4ee5\u4fee\u6539\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u4e3a\u4ec0\u4e48\u5c40\u90e8\u5185\u90e8\u7c7b\u548c\u533f\u540d\u5185\u90e8\u7c7b\u53ea\u80fd\u8bbf\u95ee final \u7684\u5c40\u90e8\u53d8\u91cf<\/h3>\n<ol start=\"10\">\n<li>\u5c40\u90e8\u5185\u90e8\u7c7b\u548c\u533f\u540d\u5185\u90e8\u7c7b\u7f16\u8bd1\u540e\u4f1a\u751f\u6210\u72ec\u7acb\u7684 class \u6587\u4ef6\uff08\u5982\u5916\u90e8\u7c7b\u540d$1.class\uff09\uff0c\u4e0e\u5916\u90e8\u7c7b\u5c5e\u540c\u4e00\u7ea7\u522b\uff0c\u4e0d\u4f1a\u968f\u5916\u90e8\u65b9\u6cd5\u6267\u884c\u7ed3\u675f\u800c\u88ab\u9500\u6bc1\u3002<\/li>\n<li>\u5916\u90e8\u65b9\u6cd5\u6267\u884c\u7ed3\u675f\u540e\uff0c\u5176\u5c40\u90e8\u53d8\u91cf\u672c\u5e94\u88ab\u56de\u6536\uff0c\u4f46\u5185\u90e8\u7c7b\u53ef\u80fd\u4ecd\u5728\u8fd0\u884c\uff08\u5982\u5185\u90e8\u7c7b\u4e2d\u542f\u52a8\u4e86\u7ebf\u7a0b\uff09\uff0c\u6b64\u65f6\u5185\u90e8\u7c7b\u9700\u8981\u7ee7\u7eed\u8bbf\u95ee\u8be5\u53d8\u91cf\u3002<\/li>\n<li>\u4e3a\u4e86\u89e3\u51b3\u4e0a\u8ff0\u77db\u76fe\uff0cJVM \u4f1a\u5c06\u5c40\u90e8\u53d8\u91cf\u7684\u503c\u590d\u5236\u4e00\u4efd\uff0c\u4f5c\u4e3a\u5185\u90e8\u7c7b\u7684\u6210\u5458\u53d8\u91cf\u4fdd\u5b58\uff0c\u76f8\u5f53\u4e8e\u5ef6\u957f\u4e86\u5c40\u90e8\u53d8\u91cf\u7684\u751f\u547d\u5468\u671f\u3002<\/li>\n<li>\u4f46\u5982\u679c\u5c40\u90e8\u53d8\u91cf\u5141\u8bb8\u88ab\u4fee\u6539\uff0c\u90a3\u4e48\u5916\u90e8\u53d8\u91cf\u7684\u503c\u548c\u5185\u90e8\u7c7b\u4e2d\u590d\u5236\u7684\u503c\u53ef\u80fd\u4e0d\u4e00\u81f4\uff0c\u5bfc\u81f4\u7a0b\u5e8f\u903b\u8f91\u9519\u8bef\u3002<\/li>\n<li>\u4e3a\u4fdd\u8bc1\u5916\u90e8\u5c40\u90e8\u53d8\u91cf\u4e0e\u5185\u90e8\u7c7b\u4e2d\u590d\u5236\u7684\u62f7\u8d1d\u503c\u59cb\u7ec8\u4e00\u81f4\uff0c\u5fc5\u987b\u7ed9\u8be5\u5c40\u90e8\u53d8\u91cf\u52a0\u4e0a <code>final<\/code> \u4fee\u9970\uff0c\u4f7f\u5176\u503c\u4e0d\u53ef\u53d8\u3002<\/li>\n<li>\u52a0 <code>final<\/code> \u662f\u4e00\u79cd\u59a5\u534f\u65b9\u6848\uff1a\u901a\u8fc7\u7981\u6b62\u4fee\u6539\u5c40\u90e8\u53d8\u91cf\uff0c\u786e\u4fdd\u5185\u90e8\u7c7b\u4e2d\u4fdd\u5b58\u7684\u62f7\u8d1d\u4e0e\u539f\u59cb\u503c\u6c38\u8fdc\u4fdd\u6301\u4e00\u81f4\uff0c\u4ece\u800c\u89e3\u51b3\u751f\u547d\u5468\u671f\u4e0d\u4e00\u81f4\u5e26\u6765\u7684\u95ee\u9898\u3002<\/li>\n<\/ol>\n<h2>05-String\u3001StringBuffer\u3001 StringBuilder\u533a\u522b\u53ca\u4f7f\u7528\u573a\u666f<\/h2>\n<hr \/>\n<ol>\n<li><code>String<\/code> \u7531 <code>final<\/code> \u4fee\u9970\uff0c\u662f\u4e0d\u53ef\u53d8\u7c7b\uff0c\u6bcf\u6b21\u5bf9\u5b57\u7b26\u4e32\u8fdb\u884c\u64cd\u4f5c\uff08\u5982\u62fc\u63a5\uff09\u90fd\u4f1a\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u5bf9\u8c61\u3002<\/li>\n<li><code>StringBuffer<\/code> \u548c <code>StringBuilder<\/code> \u90fd\u662f\u5728\u539f\u5bf9\u8c61\u4e0a\u8fdb\u884c\u64cd\u4f5c\uff0c\u4e0d\u4f1a\u751f\u6210\u65b0\u7684\u5bf9\u8c61\u3002<\/li>\n<li>\u5982\u679c\u7ecf\u5e38\u9700\u8981\u6539\u53d8\u5b57\u7b26\u4e32\u5185\u5bb9\uff0c\u5e94\u4f18\u5148\u4f7f\u7528 <code>StringBuffer<\/code> \u6216 <code>StringBuilder<\/code>\uff0c\u907f\u514d <code>String<\/code> \u9891\u7e41\u521b\u5efa\u5bf9\u8c61\u5bfc\u81f4\u5185\u5b58\u6d6a\u8d39\u3002<\/li>\n<li><code>StringBuffer<\/code> \u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u56e0\u4e3a\u5176\u6bcf\u4e2a\u65b9\u6cd5\u90fd\u52a0\u4e86 <code>synchronized<\/code> \u4fee\u9970\u3002<\/li>\n<li><code>StringBuilder<\/code> \u662f\u7ebf\u7a0b\u4e0d\u5b89\u5168\u7684\uff0c\u5176\u65b9\u6cd5\u6ca1\u6709\u52a0 <code>synchronized<\/code>\u3002<\/li>\n<li>\u7ebf\u7a0b\u5b89\u5168\u4e0e\u5426\uff0c\u9700\u8981\u540c\u65f6\u6ee1\u8db3\u4e09\u4e2a\u6761\u4ef6\uff1a\u591a\u7ebf\u7a0b\u73af\u5883\u3001\u5171\u4eab\u53d8\u91cf\u3001\u7ed3\u679c\u4e0d\u53d7\u5e76\u53d1\u5f71\u54cd\u3002<\/li>\n<li><code>StringBuilder<\/code> \u56e0\u4e3a\u4e0d\u9700\u8981\u52a0\u9501\uff0c\u6027\u80fd\u6bd4 <code>StringBuffer<\/code> \u66f4\u597d\u3002<\/li>\n<li><code>String<\/code> \u56e0\u4e3a\u6bcf\u6b21\u64cd\u4f5c\u90fd\u521b\u5efa\u65b0\u5bf9\u8c61\uff0c\u6027\u80fd\u5728\u4e09\u8005\u4e2d\u6700\u5dee\u3002<\/li>\n<li>\u56de\u7b54\u4f7f\u7528\u573a\u666f\u65f6\uff0c\u4e0d\u5e94\u8bf4&#8221;\u4e0d\u8003\u8651\u7ebf\u7a0b\u5b89\u5168\u5c31\u7528 <code>StringBuilder<\/code>\uff0c\u8003\u8651\u7ebf\u7a0b\u5b89\u5168\u5c31\u7528 <code>StringBuffer<\/code>&#8220;\uff0c\u56e0\u4e3a\u5b9e\u9645\u5f00\u53d1\u4e2d\u4e0d\u53ef\u80fd\u4e0d\u8003\u8651\u5b89\u5168\u548c\u6027\u80fd\u3002<\/li>\n<li>\u6b63\u786e\u56de\u7b54\uff1a\u6240\u6709\u573a\u666f\u4e2d\u5e94<strong>\u4f18\u5148\u4f7f\u7528 <code>StringBuilder<\/code><\/strong>\uff0c\u53ea\u6709\u5f53\u53d8\u91cf\u662f\u5171\u4eab\u53d8\u91cf\u4e14\u5904\u4e8e\u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\u3001\u9700\u8981\u4fdd\u8bc1\u7ed3\u679c\u6b63\u786e\u65f6\uff0c\u624d\u4f7f\u7528 <code>StringBuffer<\/code>\u3002<\/li>\n<li>\u5982\u679c\u5b57\u7b26\u4e32\u4e0d\u9700\u8981\u9891\u7e41\u4fee\u6539\uff0c\u76f4\u63a5\u4f7f\u7528 <code>String<\/code> \u5373\u53ef\u3002<\/li>\n<\/ol>\n<h2>06-\u91cd\u8f7d\u548c\u91cd\u5199\u7684\u533a\u522b<\/h2>\n<hr \/>\n<ol>\n<li>\u91cd\u8f7d\uff08Overload\uff09\u53d1\u751f\u5728\u540c\u4e00\u4e2a\u7c7b\u4e2d\uff0c\u91cd\u5199\uff08Override\uff09\u53d1\u751f\u5728\u7236\u5b50\u7c7b\u4e4b\u95f4\u3002<\/li>\n<li>\u91cd\u8f7d\u8981\u6c42\u65b9\u6cd5\u540d\u76f8\u540c\uff0c\u53c2\u6570\u5217\u8868\u4e0d\u540c\uff08\u5305\u62ec\u53c2\u6570\u4e2a\u6570\u3001\u7c7b\u578b\u6216\u987a\u5e8f\u4e0d\u540c\uff09\u3002<\/li>\n<li>\u91cd\u8f7d\u5bf9\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u548c\u8bbf\u95ee\u4fee\u9970\u7b26\u6ca1\u6709\u8981\u6c42\uff0c\u53ef\u4ee5\u4e0d\u540c\u3002<\/li>\n<li>\u4ec5\u8fd4\u56de\u503c\u4e0d\u540c\u800c\u53c2\u6570\u5217\u8868\u76f8\u540c\u7684\u65b9\u6cd5\uff0c\u4e0d\u662f\u91cd\u8f7d\uff0c\u7f16\u8bd1\u4f1a\u76f4\u63a5\u62a5\u9519\u3002<\/li>\n<li>\u91cd\u5199\u8981\u6c42\u5b50\u7c7b\u65b9\u6cd5\u4e0e\u7236\u7c7b\u65b9\u6cd5\u7684\u65b9\u6cd5\u540d\u548c\u53c2\u6570\u5217\u8868\u5fc5\u987b\u5b8c\u5168\u4e00\u81f4\u3002<\/li>\n<li>\u91cd\u5199\u65f6\uff0c\u5b50\u7c7b\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u8303\u56f4\u53ef\u4ee5\u5c0f\u4e8e\u7b49\u4e8e\u7236\u7c7b\u65b9\u6cd5\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u3002<\/li>\n<li>\u91cd\u5199\u65f6\uff0c\u5b50\u7c7b\u65b9\u6cd5\u629b\u51fa\u7684\u5f02\u5e38\u8303\u56f4\u53ef\u4ee5\u5c0f\u4e8e\u7b49\u4e8e\u7236\u7c7b\u65b9\u6cd5\u629b\u51fa\u7684\u5f02\u5e38\u8303\u56f4\u3002<\/li>\n<li>\u91cd\u5199\u65f6\uff0c\u5b50\u7c7b\u65b9\u6cd5\u7684\u8bbf\u95ee\u4fee\u9970\u7b26\u8303\u56f4\u5fc5\u987b\u5927\u4e8e\u7b49\u4e8e\u7236\u7c7b\u65b9\u6cd5\u7684\u8bbf\u95ee\u4fee\u9970\u7b26\u8303\u56f4\u3002<\/li>\n<li>\u7236\u7c7b\u4e2d <code>private<\/code> \u4fee\u9970\u7684\u65b9\u6cd5\uff0c\u5b50\u7c7b\u65e0\u6cd5\u91cd\u5199\uff08\u56e0\u4e3a\u4e0d\u53ef\u89c1\uff0c\u7981\u6b62\u91cd\u5199\uff09\u3002<\/li>\n<li>\u56de\u7b54\u91cd\u8f7d\u4e0e\u91cd\u5199\u7684\u533a\u522b\u65f6\uff0c\u9664\u4e86\u57fa\u672c\u5b9a\u4e49\uff0c\u8fd8\u5e94\u6db5\u76d6\u8fd4\u56de\u503c\u3001\u5f02\u5e38\u3001\u8bbf\u95ee\u4fee\u9970\u7b26\u7b49\u7ec6\u8282\uff0c\u624d\u80fd\u7b54\u5f97\u5b8c\u5584\u3002<\/li>\n<\/ol>\n<h2>07-\u63a5\u53e3\u548c\u62bd\u8c61\u7c7b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u57fa\u7840\u8bed\u6cd5\u5c42\u9762\uff08\u521d\u7ea7\u7a0b\u5e8f\u5458\u56de\u7b54\uff09<\/h3>\n<ol>\n<li>\u62bd\u8c61\u7c7b\u4e2d\u9664\u4e86\u62bd\u8c61\u65b9\u6cd5\u5916\uff0c\u8fd8\u53ef\u4ee5\u6709\u5177\u4f53\u5b9e\u73b0\u7684\u65b9\u6cd5\uff08\u666e\u901a\u6210\u5458\u51fd\u6570\uff09\uff1b\u800c\u63a5\u53e3\u4e2d\u7684\u65b9\u6cd5\u5728 JDK 8 \u4e4b\u524d\u5fc5\u987b\u5168\u90e8\u662f\u62bd\u8c61\u7684\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u53ea\u80fd\u5355\u7ee7\u627f\uff0c\u63a5\u53e3\u53ef\u4ee5\u591a\u5b9e\u73b0\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u4e2d\u7684\u6210\u5458\u53d8\u91cf\u53ef\u4ee5\u662f\u4efb\u610f\u7c7b\u578b\uff1b\u63a5\u53e3\u4e2d\u7684\u6210\u5458\u53d8\u91cf\u9ed8\u8ba4\u4e14\u53ea\u80fd\u662f <code>public static final<\/code> \u7684\u5e38\u91cf\uff08\u5199\u4e0d\u5199\u4fee\u9970\u7b26\u90fd\u4e00\u6837\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u8bbe\u8ba1\u76ee\u7684\u5c42\u9762\uff08\u4e2d\u9ad8\u7ea7\u7a0b\u5e8f\u5458\u56de\u7b54\uff09<\/h3>\n<ol start=\"4\">\n<li>\u63a5\u53e3\u7684\u8bbe\u8ba1\u76ee\u7684\u662f\u5bf9\u7c7b\u7684<strong>\u884c\u4e3a\u8fdb\u884c\u7ea6\u675f<\/strong>\uff0c\u53ea\u89c4\u5b9a\u7c7b&#8221;\u80fd\u505a\u4ec0\u4e48&#8221;\uff08\u6709\u54ea\u4e9b\u65b9\u6cd5\uff09\uff0c\u4e0d\u5173\u5fc3\u5177\u4f53\u5982\u4f55\u5b9e\u73b0\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u7684\u8bbe\u8ba1\u76ee\u7684\u662f<strong>\u4ee3\u7801\u590d\u7528<\/strong>\uff0c\u5c06\u591a\u4e2a\u5b50\u7c7b\u7684\u5171\u6027\u5185\u5bb9\u62bd\u53d6\u51fa\u6765\u5f62\u6210\u7236\u7c7b\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u7684\u5b58\u5728\u903b\u8f91\u662f&#8221;\u5148\u6709\u5b50\u7c7b\uff0c\u518d\u6709\u7236\u7c7b&#8221;\u2014\u2014\u5148\u6709\u591a\u4e2a\u5b50\u7c7b\uff0c\u518d\u5c06\u5171\u6027\u62bd\u53d6\u6210\u62bd\u8c61\u7236\u7c7b\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u4e0d\u5141\u8bb8\u5b9e\u4f8b\u5316\uff0c\u56e0\u4e3a\u5176\u4e2d\u53ef\u80fd\u5b58\u5728\u672a\u5b9e\u73b0\u7684\u65b9\u6cd5\uff0c\u8c03\u7528\u65f6\u65e0\u6cd5\u6267\u884c\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u8868\u8fbe\u7684\u662f <strong>&#8220;is-a&#8221;\uff08\u662f\u4ec0\u4e48\uff09<\/strong> \u7684\u5173\u7cfb\uff0c\u5982&#8221;\u5b9d\u9a6c\u662f\u4e00\u53f0\u8f66&#8221;\uff08BMW is a Car\uff09\u3002<\/li>\n<li>\u63a5\u53e3\u8868\u8fbe\u7684\u662f <strong>&#8220;like-a&#8221;\uff08\u50cf\u4ec0\u4e48\uff09<\/strong> \u7684\u5173\u7cfb\uff0c\u5982&#8221;\u9e1f\u50cf\u4e00\u4e2a\u98de\u884c\u5668&#8221;\uff08Bird is like a Aircraft\uff09\uff0c\u4f46\u9e1f\u672c\u8eab\u4e0d\u662f\u98de\u884c\u5668\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u662f\u5bf9\u4e8b\u7269<strong>\u672c\u8d28<\/strong>\u7684\u62bd\u8c61\uff0c\u63a5\u53e3\u662f\u5bf9\u4e8b\u7269<strong>\u884c\u4e3a<\/strong>\u7684\u7ea6\u675f\u3002<\/li>\n<li>\u5f53\u5173\u6ce8\u4e00\u4e2a\u4e8b\u7269\u7684\u672c\u8d28\u65f6\uff0c\u4f7f\u7528\u62bd\u8c61\u7c7b\uff1b\u5f53\u53ea\u5173\u6ce8\u67d0\u4e2a\u7c7b\u80fd\u505a\u4ec0\u4e48\uff08\u67d0\u4e2a\u65b9\u6cd5\u7684\u529f\u80fd\uff09\u65f6\uff0c\u4f7f\u7528\u63a5\u53e3\u3002<\/li>\n<li>\u62bd\u8c61\u7c7b\u7684\u529f\u80fd\u6bd4\u63a5\u53e3\u66f4\u5f3a\u5927\uff08\u53ef\u4ee5\u6709\u5b9e\u73b0\u65b9\u6cd5\uff09\uff0c\u4f46\u5b9a\u4e49\u62bd\u8c61\u7c7b\u7684\u4ee3\u4ef7\u66f4\u9ad8\uff0c\u56e0\u4e3a\u53ea\u80fd\u5355\u7ee7\u627f\uff0c\u9700\u5c06\u6240\u6709\u5b50\u7c7b\u7684\u5171\u6027\u90fd\u7f16\u5199\u5728\u4e00\u4e2a\u7ee7\u627f\u4f53\u7cfb\u4e2d\u3002<\/li>\n<li>\u63a5\u53e3\u5728\u8bbe\u8ba1\u9636\u6bb5\u66f4\u5bb9\u6613\u4f7f\u7528\uff08\u591a\u5b9e\u73b0\u3001\u4f4e\u8026\u5408\uff09\uff0c\u6709\u52a9\u4e8e\u964d\u4f4e\u8bbe\u8ba1\u96be\u5ea6\uff1b\u62bd\u8c61\u7c7b\u7684\u8bbe\u8ba1\u96be\u5ea6\u76f8\u5bf9\u66f4\u9ad8\u3002<\/li>\n<\/ol>\n<h2>08-List\u548cSet<\/h2>\n<hr \/>\n<ol>\n<li><code>List<\/code> \u662f\u6709\u5e8f\u7684\uff0c\u6309\u5bf9\u8c61\u8fdb\u5165\u7684\u987a\u5e8f\u4fdd\u5b58\u5143\u7d20\uff1b<code>Set<\/code> \u662f\u65e0\u5e8f\u7684\uff08\u4e0d\u4fdd\u8bc1\u63d2\u5165\u987a\u5e8f\uff0c\u90e8\u5206\u5b9e\u73b0\u5982 <code>LinkedHashSet<\/code> \u53ef\u7ef4\u62a4\u987a\u5e8f\uff09\u3002<\/li>\n<li><code>List<\/code> \u5141\u8bb8\u91cd\u590d\u5143\u7d20\uff1b<code>Set<\/code> \u4e0d\u5141\u8bb8\u91cd\u590d\u5143\u7d20\u3002<\/li>\n<li><code>List<\/code> \u5141\u8bb8\u5b58\u653e\u591a\u4e2a <code>null<\/code> \u5143\u7d20\uff1b<code>Set<\/code> \u53ea\u5141\u8bb8\u5b58\u653e\u4e00\u4e2a <code>null<\/code> \u5143\u7d20\u3002<\/li>\n<li><code>List<\/code> \u9664\u4e86\u4f7f\u7528\u8fed\u4ee3\u5668\u904d\u5386\u5916\uff0c\u8fd8\u53ef\u4ee5\u901a\u8fc7 <code>get(int index)<\/code> \u65b9\u6cd5\u8fdb\u884c\u4e0b\u6807\u8bbf\u95ee\uff08\u968f\u673a\u8bbf\u95ee\uff09\u3002<\/li>\n<li><code>Set<\/code> \u6ca1\u6709\u63d0\u4f9b\u4e0b\u6807\u8bbf\u95ee\u7684\u65b9\u6cd5\uff0c\u53ea\u80fd\u4f7f\u7528\u8fed\u4ee3\u5668\u9010\u4e2a\u904d\u5386\u6240\u6709\u5143\u7d20\u3002<\/li>\n<li>\u56de\u7b54\u8be5\u95ee\u9898\u65f6\uff0c\u9664\u4e86&#8221;\u6709\u5e8f\/\u65e0\u5e8f\u3001\u53ef\u91cd\u590d\/\u4e0d\u53ef\u91cd\u590d&#8221;\u5916\uff0c\u8fd8\u5e94\u8865\u5145 <code>null<\/code> \u5143\u7d20\u6570\u91cf\u548c\u904d\u5386\u65b9\u5f0f\u7684\u5dee\u5f02\uff0c\u624d\u80fd\u7b54\u5f97\u5168\u9762\u3002<\/li>\n<\/ol>\n<h2>09-hashcode\u548cequals<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u57fa\u672c\u6982\u5ff5<\/h3>\n<ol>\n<li><code>equals()<\/code> \u662f Java \u63d0\u4f9b\u7ed9\u7a0b\u5e8f\u5458\u7528\u6765\u5b9a\u4e49\u4e24\u4e2a\u5bf9\u8c61&#8221;\u4f55\u65f6\u76f8\u7b49&#8221;\u7684\u5bf9\u6bd4\u89c4\u5219\uff0c\u53ef\u4ee5\u88ab\u91cd\u5199\u3002<\/li>\n<li><code>equals()<\/code> \u5982\u679c\u4e0d\u505a\u91cd\u5199\uff0c\u9ed8\u8ba4\u4f7f\u7528 <code>Object<\/code> \u4e2d\u7684\u5b9e\u73b0\uff0c\u672c\u8d28\u5c31\u662f <code>==<\/code>\uff0c\u6bd4\u8f83\u7684\u662f\u6808\u4e2d\u7684\u5f15\u7528\u5730\u5740\u3002<\/li>\n<li><code>hashCode()<\/code> \u662f\u7528\u4e8e\u83b7\u53d6\u5bf9\u8c61\u7684\u54c8\u5e0c\u7801\uff08\u6563\u5217\u7801\uff09\uff0c\u5b9a\u4e49\u5728 <code>Object<\/code> \u4e2d\uff0c\u662f\u4e00\u4e2a <code>native<\/code> \u65b9\u6cd5\uff0c\u8fd4\u56de\u4e00\u4e2a <code>int<\/code> \u578b\u6574\u6570\u3002<\/li>\n<li>\u54c8\u5e0c\u7801\u7684\u4f5c\u7528\u662f\u4f5c\u4e3a\u54c8\u5e0c\u8868\u4e2d\u7684\u7d22\u5f15\uff0c\u901a\u8fc7\u7d22\u5f15\u53ef\u4ee5\u5feb\u901f\u5b9a\u4f4d\u5bf9\u8c61\u5728\u5806\u4e2d\u7684\u5b58\u50a8\u4f4d\u7f6e\uff0c\u5b9e\u73b0\u5feb\u901f\u68c0\u7d22\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001HashSet \u5982\u4f55\u68c0\u67e5\u91cd\u590d\uff08hashCode \u4e0e equals \u7684\u534f\u4f5c\u673a\u5236\uff09<\/h3>\n<ol start=\"5\">\n<li>\u5411 <code>HashSet<\/code> \u6dfb\u52a0\u5143\u7d20\u65f6\uff0c\u5148\u6839\u636e <code>hashCode()<\/code> \u8ba1\u7b97\u51fa\u54c8\u5e0c\u503c\uff0c\u5b9a\u4f4d\u5230\u54c8\u5e0c\u8868\u4e2d\u5bf9\u5e94\u7684\u7d22\u5f15\u4f4d\u7f6e\u3002<\/li>\n<li>\u5982\u679c\u8be5\u4f4d\u7f6e\u4e3a\u7a7a\uff0c\u8bf4\u660e\u6ca1\u6709\u91cd\u590d\u5143\u7d20\uff0c\u76f4\u63a5\u653e\u5165\u3002<\/li>\n<li>\u5982\u679c\u8be5\u4f4d\u7f6e\u5df2\u6709\u5143\u7d20\uff0c\u8bf4\u660e\u53d1\u751f\u4e86\u54c8\u5e0c\u51b2\u7a81\uff0c\u6b64\u65f6\u518d\u8c03\u7528 <code>equals()<\/code> \u5224\u65ad\u4e24\u4e2a\u5bf9\u8c61\u662f\u5426\u771f\u6b63\u76f8\u7b49\u3002<\/li>\n<li>\u4e0d\u540c\u7684\u5bf9\u8c61\u6709\u53ef\u80fd\u8ba1\u7b97\u51fa\u76f8\u540c\u7684 <code>hashCode<\/code>\uff0c\u8fd9\u662f\u6563\u5217\u7b97\u6cd5\u672c\u8eab\u7684\u7279\u6027\u51b3\u5b9a\u7684\u3002<\/li>\n<li>\u5982\u679c <code>hashCode<\/code> \u76f8\u540c\u4f46 <code>equals()<\/code> \u5224\u65ad\u4e3a\u4e0d\u76f8\u7b49\uff0c\u5219\u4f1a\u901a\u8fc7\u91cd\u65b0\u6563\u5217\uff08\u5982\u52a0\u76d0\uff09\u8ba1\u7b97\u65b0\u4f4d\u7f6e\uff0c\u786e\u4fdd\u5143\u7d20\u4e0d\u91cd\u590d\u3002<\/li>\n<li>\u5982\u679c <code>hashCode<\/code> \u4e0d\u540c\uff0c\u5219\u76f4\u63a5\u653e\u5165\uff0c\u65e0\u9700\u8c03\u7528 <code>equals()<\/code>\uff0c\u5927\u5927\u51cf\u5c11\u4e86 <code>equals()<\/code> \u7684\u6267\u884c\u6b21\u6570\u3002<\/li>\n<li><code>hashCode()<\/code> \u7684\u6563\u5217\u7b97\u6cd5\u6027\u80fd\u8fdc\u9ad8\u4e8e <code>equals()<\/code> \u7684\u5185\u5b58\u5730\u5740\u5bf9\u6bd4\uff0c\u56e0\u6b64\u8fd9\u5957\u673a\u5236\u80fd\u5927\u5e45\u63d0\u5347\u7a0b\u5e8f\u6267\u884c\u901f\u5ea6\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5fc5\u987b\u9075\u5b88\u7684\u7ea6\u5b9a\uff08\u9762\u8bd5\u56de\u7b54\u8981\u70b9\uff09<\/h3>\n<ol start=\"12\">\n<li>\u5982\u679c\u4e24\u4e2a\u5bf9\u8c61\u76f8\u7b49\uff08<code>equals()<\/code> \u8fd4\u56de <code>true<\/code>\uff09\uff0c\u5219\u5b83\u4eec\u7684 <code>hashCode()<\/code> \u5fc5\u987b\u76f8\u540c\u3002<\/li>\n<li>\u4e24\u4e2a\u5bf9\u8c61 <code>equals()<\/code> \u76f8\u7b49\uff0c\u5206\u522b\u8c03\u7528 <code>equals()<\/code> \u5fc5\u7136\u8fd4\u56de <code>true<\/code>\u3002<\/li>\n<li>\u4e24\u4e2a\u5bf9\u8c61\u6709\u76f8\u540c\u7684 <code>hashCode<\/code>\uff0c\u5b83\u4eec\u4e0d\u4e00\u5b9a\u76f8\u7b49\uff08\u54c8\u5e0c\u51b2\u7a81\uff09\u3002<\/li>\n<li>\u5982\u679c\u91cd\u5199\u4e86 <code>equals()<\/code>\uff0c\u5219\u5fc5\u987b\u91cd\u5199 <code>hashCode()<\/code>\uff0c\u5426\u5219\u5728 <code>HashSet<\/code>\u3001<code>HashMap<\/code> \u7b49\u6563\u5217\u96c6\u5408\u4e2d\u4f1a\u51fa\u73b0\u903b\u8f91\u9519\u8bef\u3002<\/li>\n<li>\u5982\u679c\u6ca1\u6709\u91cd\u5199 <code>hashCode()<\/code>\uff0c<code>Object<\/code> \u9ed8\u8ba4\u5b9e\u73b0\u4f1a\u4e3a\u6bcf\u4e2a\u5bf9\u8c61\u751f\u6210\u72ec\u7279\u7684\u7d22\u5f15\u503c\uff0c\u5373\u4f7f\u4e24\u4e2a\u5bf9\u8c61\u7684\u6210\u5458\u6570\u636e\u5b8c\u5168\u76f8\u540c\uff0c\u5b83\u4eec\u4e5f\u4e0d\u4f1a\u88ab\u8ba4\u4e3a\u76f8\u7b49\u3002<\/li>\n<li>\u5982\u679c\u5e0c\u671b\u4e24\u4e2a\u5bf9\u8c61\u5728\u6210\u5458\u6570\u636e\u76f8\u540c\u65f6\u88ab\u89c6\u4e3a\u76f8\u7b49\uff0c\u5c31\u5fc5\u987b\u540c\u65f6\u91cd\u5199 <code>hashCode()<\/code> \u548c <code>equals()<\/code>\u3002<\/li>\n<\/ol>\n<h2>10-ArrayList\u548cLinkedList\u533a\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5e95\u5c42\u6570\u636e\u7ed3\u6784<\/h3>\n<ol>\n<li><code>ArrayList<\/code> \u5e95\u5c42\u662f\u57fa\u4e8e\u52a8\u6001\u6570\u7ec4\u5b9e\u73b0\u7684\uff08\u672c\u8d28\u662f\u7531\u666e\u901a\u6570\u7ec4\u6f14\u5316\u800c\u6765\uff09\uff0c<code>LinkedList<\/code> \u5e95\u5c42\u662f\u57fa\u4e8e\u53cc\u5411\u94fe\u8868\u5b9e\u73b0\u7684\u3002<\/li>\n<li>\u6570\u7ec4\u5728\u5185\u5b58\u4e2d\u662f\u8fde\u7eed\u5b58\u50a8\u7684\uff0c\u56e0\u6b64\u7533\u8bf7\u5185\u5b58\u65f6\u5fc5\u987b\u6709\u4e00\u5757\u8fde\u7eed\u7684\u7a7a\u95f4\uff1b\u94fe\u8868\u5728\u5185\u5b58\u4e2d\u662f\u5206\u6563\u5b58\u50a8\u7684\uff0c\u53ef\u4ee5\u5229\u7528\u788e\u7247\u7a7a\u95f4\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u8bbf\u95ee\u6027\u80fd\u5dee\u5f02<\/h3>\n<ol start=\"3\">\n<li><code>ArrayList<\/code> \u9002\u5408\u4e0b\u6807\u8bbf\u95ee\uff08\u968f\u673a\u8bbf\u95ee\uff09\uff0c\u56e0\u4e3a\u6570\u7ec4\u662f\u8fde\u7eed\u5b58\u50a8\u4e14\u5143\u7d20\u7c7b\u578b\u4e00\u81f4\uff0c\u901a\u8fc7&#8221;\u5143\u7d20\u957f\u5ea6 \u00d7 \u4e0b\u6807&#8221;\u5373\u53ef\u5feb\u901f\u5b9a\u4f4d\u3002<\/li>\n<li><code>LinkedList<\/code> \u6ca1\u6709\u4e0b\u6807\u8bbf\u95ee\u4f18\u52bf\uff0c\u9700\u8981\u6839\u636e\u6307\u9488\u9010\u4e2a\u8282\u70b9\u904d\u5386\u624d\u80fd\u627e\u5230\u76ee\u6807\u5143\u7d20\uff0c\u56e0\u6b64\u904d\u5386\u6548\u7387\u8f83\u4f4e\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u63d2\u5165\u4e0e\u5220\u9664\u6027\u80fd\u7684\u771f\u6b63\u5206\u6790<\/h3>\n<ol start=\"5\">\n<li>\u94fe\u8868\u63d2\u5165\/\u5220\u9664\u53ea\u9700\u65ad\u5f00\u5e76\u91cd\u65b0\u5efa\u7acb\u94fe\u8def\uff0c\u4e0d\u9700\u8981\u79fb\u52a8\u5143\u7d20\uff0c\u56e0\u6b64\u64cd\u4f5c\u672c\u8eab\u5f88\u5feb\u3002<\/li>\n<li>\u6570\u7ec4\u63d2\u5165\/\u5220\u9664\uff08\u975e\u5c3e\u90e8\uff09\u9700\u8981\u5c06\u540e\u7eed\u5143\u7d20\u6574\u4f53\u62f7\u8d1d\u79fb\u52a8\uff0c\u5143\u7d20\u8d8a\u591a\u6027\u80fd\u8d8a\u4f4e\u3002<\/li>\n<li>\u6570\u7ec4\u5c3e\u90e8\u63d2\u5165\uff08\u5c3e\u63d2\u6cd5\uff09\u4e0d\u9700\u8981\u79fb\u52a8\u5143\u7d20\uff0c\u6027\u80fd\u5f88\u9ad8\u3002<\/li>\n<li><code>ArrayList<\/code> \u7684\u6269\u5bb9\u673a\u5236\uff1a\u5f53\u5bb9\u91cf\u4e0d\u8db3\u65f6\uff0c\u4f1a\u65b0\u5efa\u4e00\u4e2a\u5bb9\u91cf\u66f4\u5927\u7684\u6570\u7ec4\uff0c\u5c06\u8001\u6570\u7ec4\u6570\u636e\u62f7\u8d1d\u5230\u65b0\u6570\u7ec4\uff0c\u518d\u6dfb\u52a0\u65b0\u5143\u7d20\uff0c\u8001\u6570\u7ec4\u88ab\u56de\u6536\u3002<\/li>\n<li><code>ArrayList<\/code> \u53ef\u4ee5\u901a\u8fc7\u6784\u9020\u5668\u6307\u5b9a\u521d\u59cb\u5bb9\u91cf\u6765\u51cf\u5c11\u6269\u5bb9\u6b21\u6570\uff0c\u907f\u514d\u4e0d\u5fc5\u8981\u7684\u6027\u80fd\u5f00\u9500\u3002<\/li>\n<li>\u5982\u679c <code>ArrayList<\/code> \u6307\u5b9a\u4e86\u5408\u9002\u7684\u521d\u59cb\u5bb9\u91cf\u5e76\u91c7\u7528\u5c3e\u63d2\u6cd5\uff0c\u5176\u63d2\u5165\u6027\u80fd\u751a\u81f3\u53ef\u80fd\u8d85\u8fc7 <code>LinkedList<\/code>\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001LinkedList \u7684\u989d\u5916\u6027\u80fd\u6d88\u8017<\/h3>\n<ol start=\"11\">\n<li><code>LinkedList<\/code> \u6bcf\u63d2\u5165\u4e00\u4e2a\u5143\u7d20\u90fd\u4f1a\u521b\u5efa\u4e00\u4e2a <code>Node<\/code> \u5bf9\u8c61\u6765\u7ef4\u62a4\u8be5\u5143\u7d20\uff0c\u5927\u91cf\u63d2\u5165\u65f6\u5bf9\u8c61\u521b\u5efa\u6d88\u8017\u5f88\u5927\u3002<\/li>\n<li><code>ArrayList<\/code> \u76f4\u63a5\u5b58\u50a8\u5143\u7d20\u672c\u8eab\uff0c\u4e0d\u9700\u8981\u989d\u5916\u521b\u5efa\u8282\u70b9\u5bf9\u8c61\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001LinkedList \u7684\u4f7f\u7528\u6ce8\u610f\u70b9<\/h3>\n<ol start=\"13\">\n<li>\u904d\u5386 <code>LinkedList<\/code> \u65f6\u5e94\u4f7f\u7528\u8fed\u4ee3\u5668\uff08<code>iterator<\/code>\uff09\uff0c\u4e0d\u5e94\u4f7f\u7528 <code>for<\/code> \u5faa\u73af\u914d\u5408 <code>get(i)<\/code>\uff0c\u56e0\u4e3a <code>get(i)<\/code> \u662f\u4e0b\u6807\u8bbf\u95ee\uff0c\u94fe\u8868\u9700\u8981\u9010\u4e2a\u904d\u5386\uff0c\u6548\u7387\u6781\u4f4e\u3002<\/li>\n<li>\u4f7f\u7528 <code>LinkedList<\/code> \u7684 <code>indexOf()<\/code> \u65b9\u6cd5\u65f6\uff0c\u5982\u679c\u5143\u7d20\u4e0d\u5b58\u5728\uff0c\u4f1a\u904d\u5386\u6574\u4e2a\u5217\u8868\u540e\u624d\u8fd4\u56de -1\uff0c\u6027\u80fd\u6d88\u8017\u5927\u3002<\/li>\n<li>\u5927\u90e8\u5206\u573a\u666f\u4e0b\u4f18\u5148\u63a8\u8350\u4f7f\u7528 <code>ArrayList<\/code>\uff0c<code>LinkedList<\/code> \u6709\u5f88\u591a\u4f7f\u7528\u4e0a\u7684\u4e0d\u4fbf\u4e4b\u5904\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u9762\u8bd5\u56de\u7b54\u603b\u7ed3<\/h3>\n<ol start=\"16\">\n<li>\u56de\u7b54\u8be5\u9898\u65f6\uff0c\u9664\u4e86&#8221;\u6570\u7ec4\u67e5\u8be2\u5feb\u63d2\u5165\u6162\u3001\u94fe\u8868\u63d2\u5165\u5feb\u67e5\u8be2\u6162&#8221;\u7684\u5e38\u8bc6\u5916\uff0c\u8fd8\u5e94\u6db5\u76d6\u5185\u5b58\u7ed3\u6784\u3001\u6269\u5bb9\u673a\u5236\u3001\u5bf9\u8c61\u521b\u5efa\u6d88\u8017\u3001\u904d\u5386\u65b9\u5f0f\u5dee\u5f02\u7b49\u7ec6\u8282\uff0c\u624d\u80fd\u4f53\u73b0\u624e\u5b9e\u7684 Java \u57fa\u7840\u3002<\/li>\n<\/ol>\n<h2>11-HashMap\u548cHashTable\u7684\u533a\u522b\u53ca\u5e95\u5c42\u5b9e\u73b0<\/h2>\n<hr \/>\n<h3>\u4e00\u3001HashMap \u4e0e HashTable \u7684\u533a\u522b<\/h3>\n<ol>\n<li><code>HashTable<\/code> \u4e2d\u7684\u6bcf\u4e2a\u65b9\u6cd5\u90fd\u52a0\u4e86 <code>synchronized<\/code> \u4fee\u9970\uff0c\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff1b<code>HashMap<\/code> \u6ca1\u6709\u52a0\u9501\uff0c\u662f\u7ebf\u7a0b\u4e0d\u5b89\u5168\u7684\u3002<\/li>\n<li><code>HashTable<\/code> \u56e0\u5168\u90e8\u65b9\u6cd5\u52a0\u9501\uff0c\u6548\u7387\u8f83\u4f4e\uff0c\u76ee\u524d\u5df2\u4e0d\u63a8\u8350\u4f7f\u7528\uff0c\u53d6\u800c\u4ee3\u4e4b\u7684\u662f <code>ConcurrentHashMap<\/code>\u3002<\/li>\n<li><code>HashMap<\/code> \u5141\u8bb8 <code>key<\/code> \u548c <code>value<\/code> \u4e3a <code>null<\/code>\uff0c<code>HashTable<\/code> \u4e0d\u5141\u8bb8 <code>key<\/code> \u6216 <code>value<\/code> \u4e3a <code>null<\/code>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001HashMap \u7684\u5e95\u5c42\u6570\u636e\u7ed3\u6784\uff08JDK 1.8\uff09<\/h3>\n<ol start=\"4\">\n<li><code>HashMap<\/code> \u5e95\u5c42\u91c7\u7528<strong>\u6570\u7ec4 + \u94fe\u8868<\/strong>\uff08\u6216\u7ea2\u9ed1\u6811\uff09\u5b9e\u73b0\uff0c\u5185\u90e8\u5143\u7d20\u4ee5 <code>Node<\/code> \u8282\u70b9\u5f62\u5f0f\u5b58\u5728\u3002<\/li>\n<li>\u5f53\u94fe\u8868\u957f\u5ea6\u8fbe\u5230 8 \u4e14\u6570\u7ec4\u957f\u5ea6\u8d85\u8fc7 64 \u65f6\uff0c\u94fe\u8868\u4f1a\u8f6c\u5316\u4e3a\u7ea2\u9ed1\u6811\uff0c\u4ee5\u63d0\u5347\u67e5\u8be2\u6548\u7387\u3002<\/li>\n<li>\u5f53\u7ea2\u9ed1\u6811\u8282\u70b9\u6570\u91cf\u51cf\u5c11\u5230\u4f4e\u4e8e 6 \u65f6\uff0c\u7ea2\u9ed1\u6811\u4f1a\u9000\u5316\u4e3a\u94fe\u8868\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001HashMap \u7684\u5b58\u6570\u636e\uff08put\uff09\u6d41\u7a0b<\/h3>\n<ol start=\"7\">\n<li>\u5b58\u5165\u5143\u7d20\u65f6\uff0c\u5148\u8ba1\u7b97 <code>key<\/code> \u7684 <code>hashCode<\/code>\uff0c\u518d\u7ecf\u8fc7\u4e8c\u6b21\u54c8\u5e0c\uff0c\u6700\u540e\u5bf9\u6570\u7ec4\u957f\u5ea6\u53d6\u6a21\uff0c\u5f97\u5230\u6570\u7ec4\u4e0b\u6807\u3002<\/li>\n<li>\u5982\u679c\u8be5\u6570\u7ec4\u4e0b\u6807\u4f4d\u7f6e\u4e3a\u7a7a\uff0c\u76f4\u63a5\u653e\u5165\u8be5\u4f4d\u7f6e\uff08\u6b64\u65f6\u65e0\u94fe\u8868\uff09\u3002<\/li>\n<li>\u5982\u679c\u8be5\u4f4d\u7f6e\u5df2\u6709\u5143\u7d20\uff08\u54c8\u5e0c\u51b2\u7a81\uff09\uff0c\u5219\u8c03\u7528 <code>equals()<\/code> \u5224\u65ad\u4e24\u4e2a key \u662f\u5426\u76f8\u7b49\uff1a\u76f8\u7b49\u5219\u8986\u76d6\u65e7\u503c\uff0c\u4e0d\u7b49\u5219\u5f62\u6210\u94fe\u8868\u6302\u5728\u6570\u7ec4\u8be5\u4f4d\u7f6e\u4e0b\u3002<\/li>\n<li>\u5982\u679c <code>key<\/code> \u4e3a <code>null<\/code>\uff0c\u76f4\u63a5\u5b58\u653e\u5230\u6570\u7ec4\u4e0b\u6807\u4e3a 0 \u7684\u4f4d\u7f6e\uff08\u56e0\u4e3a <code>null<\/code> \u65e0\u6cd5\u8fdb\u884c\u54c8\u5e0c\u8ba1\u7b97\uff09\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001HashMap \u7684\u53d6\u6570\u636e\uff08get\uff09\u6d41\u7a0b<\/h3>\n<ol start=\"11\">\n<li>\u6839\u636e <code>key<\/code> \u8ba1\u7b97\u54c8\u5e0c\u503c\u5b9a\u4f4d\u5230\u6570\u7ec4\u4e0b\u6807\uff0c\u82e5\u8be5\u4f4d\u7f6e\u662f\u94fe\u8868\uff0c\u5219\u9010\u4e2a\u904d\u5386\u8282\u70b9\uff0c\u901a\u8fc7 <code>equals()<\/code> \u6bd4\u8f83\u627e\u5230\u5bf9\u5e94\u7684 key \u5e76\u8fd4\u56de\u5176 value\u3002<\/li>\n<li>\u94fe\u8868\u8fc7\u957f\u65f6\u67e5\u8be2\u6548\u7387\u4f4e\uff08\u7ebf\u6027\u904d\u5386\uff09\uff0c\u8fd9\u662f JDK 8 \u5f15\u5165\u7ea2\u9ed1\u6811\u8fdb\u884c\u4f18\u5316\u7684\u539f\u56e0\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001HashMap \u7684\u6269\u5bb9\u673a\u5236<\/h3>\n<ol start=\"13\">\n<li><code>HashMap<\/code> \u5e95\u5c42\u6570\u7ec4\u662f\u9759\u6001\u6570\u7ec4\uff0c\u957f\u5ea6\u56fa\u5b9a\uff0c\u5f53\u5143\u7d20\u6570\u91cf\u8d85\u8fc7\u9608\u503c\u65f6\u4f1a\u89e6\u53d1\u6269\u5bb9\u3002<\/li>\n<li>\u6269\u5bb9\u65f6\u65b0\u5efa\u4e00\u4e2a\u5bb9\u91cf\u66f4\u5927\u7684\u6570\u7ec4\uff0c\u5c06\u8001\u6570\u7ec4\u4e2d\u7684\u6570\u636e\u91cd\u65b0\u8ba1\u7b97\u4f4d\u7f6e\u5e76\u8fc1\u79fb\u5230\u65b0\u6570\u7ec4\uff0c\u518d\u5c06\u65b0\u5143\u7d20\u653e\u5165\u3002<\/li>\n<li>\u6269\u5bb9\u56e0\u5b50\u7684\u4f5c\u7528\uff1a\u6839\u636e\u5f53\u524d\u5bb9\u91cf\u548c\u8d1f\u8f7d\u56e0\u5b50\u8ba1\u7b97\u6269\u5bb9\u9608\u503c\uff0c\u63a7\u5236\u6269\u5bb9\u65f6\u673a\u4ee5\u5e73\u8861\u7a7a\u95f4\u548c\u6027\u80fd\u3002<\/li>\n<\/ol>\n<h2>12-ConcurrentHashMap\u539f\u7406\u7b80\u8ff0,jdk7\u548cjdk8<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ConcurrentHashMap \u6574\u4f53\u6982\u8ff0<\/h3>\n<ol>\n<li><code>ConcurrentHashMap<\/code> \u662f\u7ebf\u7a0b\u5b89\u5168\u7248\u672c\u7684 <code>HashMap<\/code>\uff0c\u6bd4 <code>HashTable<\/code> \u6548\u7387\u66f4\u9ad8\uff0c\u56e0\u6b64\u5b9e\u9645\u5f00\u53d1\u4e2d\u4f18\u5148\u4f7f\u7528\u5b83\u6765\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u3002<\/li>\n<li><code>HashTable<\/code> \u4f7f\u7528\u5168\u5c40\u9501\uff08\u6240\u6709\u65b9\u6cd5\u52a0 <code>synchronized<\/code>\uff09\uff0c\u800c <code>ConcurrentHashMap<\/code> \u91c7\u7528\u66f4\u7ec6\u7c92\u5ea6\u7684\u9501\u673a\u5236\u6765\u63d0\u5347\u5e76\u53d1\u6027\u80fd\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001JDK 1.7 \u4e2d\u7684 ConcurrentHashMap \u539f\u7406<\/h3>\n<ol start=\"3\">\n<li>JDK 1.7 \u4e2d\u5e95\u5c42\u91c7\u7528 <strong>Segment + HashEntry<\/strong> \u7684\u7ed3\u6784\uff0c<code>Segment<\/code> \u7ee7\u627f\u81ea <code>ReentrantLock<\/code>\uff0c\u4e00\u4e2a <code>Segment<\/code> \u5305\u542b\u4e00\u4e2a <code>HashEntry<\/code> \u6570\u7ec4\uff0c\u6bcf\u4e2a <code>HashEntry<\/code> \u53c8\u662f\u4e00\u4e2a\u94fe\u8868\uff08\u6570\u7ec4\u52a0\u94fe\u8868\uff09\u3002<\/li>\n<li><code>ConcurrentHashMap<\/code> \u4e2d\u7ef4\u62a4\u4e86\u591a\u4e2a <code>Segment<\/code>\uff08\u6bb5\uff09\uff0c\u6bcf\u4e2a <code>Segment<\/code> \u72ec\u7acb\u52a0\u9501\uff0c\u8fd9\u5c31\u662f<strong>\u5206\u6bb5\u9501<\/strong>\u673a\u5236\u3002<\/li>\n<li>\u5206\u6bb5\u9501\u7684\u6838\u5fc3\u601d\u60f3\uff1a\u6839\u636e <code>key<\/code> \u5b9a\u4f4d\u5230\u5bf9\u5e94\u7684 <code>Segment<\/code>\uff0c\u53ea\u9501\u5b9a\u8be5 <code>Segment<\/code>\uff0c\u5176\u4ed6 <code>Segment<\/code> \u4e0d\u53d7\u5f71\u54cd\uff0c\u53ef\u6b63\u5e38\u5e76\u53d1\u8bbf\u95ee\u3002<\/li>\n<li>\u5e76\u53d1\u5ea6\u5373\u4e3a <code>Segment<\/code> \u7684\u6570\u91cf\uff0c\u51b3\u5b9a\u4e86\u53ef\u4ee5\u540c\u65f6\u652f\u6301\u591a\u5c11\u4e2a\u7ebf\u7a0b\u5e76\u53d1\u64cd\u4f5c\u3002<\/li>\n<li>\u6570\u7ec4\u6269\u5bb9\u65f6\u53ea\u5f71\u54cd\u5f53\u524d <code>Segment<\/code>\uff0c\u5176\u4ed6 <code>Segment<\/code> \u4e0d\u53d7\u5f71\u54cd\uff0c\u53ef\u6b63\u5e38\u8bfb\u5199\uff0c\u63d0\u5347\u4e86\u6574\u4f53\u6027\u80fd\u3002<\/li>\n<li>\u5143\u7d20\u67e5\u8be2\u9700\u8981\u4e24\u6b21\u54c8\u5e0c\uff1a\u7b2c\u4e00\u6b21\u54c8\u5e0c\u5b9a\u4f4d\u5230 <code>Segment<\/code>\uff0c\u7b2c\u4e8c\u6b21\u54c8\u5e0c\u5b9a\u4f4d\u5230\u8be5 <code>Segment<\/code> \u4e2d\u6570\u7ec4\u7684\u4e0b\u6807\uff08\u94fe\u8868\u5934\u90e8\uff09\u3002<\/li>\n<li><code>get()<\/code> \u8bfb\u53d6\u64cd\u4f5c\u65e0\u9700\u52a0\u9501\uff0c\u901a\u8fc7 <code>volatile<\/code> \u4fdd\u8bc1\u53ef\u89c1\u6027\uff0c\u4e0d\u4f1a\u8bfb\u5230\u810f\u6570\u636e\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001JDK 1.8 \u4e2d\u7684 ConcurrentHashMap \u539f\u7406<\/h3>\n<ol start=\"10\">\n<li>JDK 1.8 \u4e2d\u4e0d\u518d\u4f7f\u7528 <code>Segment<\/code> \u548c <code>ReentrantLock<\/code>\uff0c\u6539\u7528 <strong>synchronized + CAS<\/strong> \u7684\u7ec4\u5408\u6765\u5b9e\u73b0\u7ebf\u7a0b\u5b89\u5168\u3002<\/li>\n<li>\u6570\u636e\u7ed3\u6784\u53d8\u4e3a <strong>\u6570\u7ec4 + \u94fe\u8868 + \u7ea2\u9ed1\u6811<\/strong>\uff08\u4e0e JDK 1.8 \u7684 <code>HashMap<\/code> \u4e00\u81f4\uff09\uff0c\u94fe\u8868\u8fc7\u957f\u65f6\u8f6c\u5316\u4e3a\u7ea2\u9ed1\u6811\u4ee5\u4f18\u5316\u67e5\u8be2\u6548\u7387\u3002<\/li>\n<li>\u9501\u7684\u7c92\u5ea6\u66f4\u7ec6\uff1a\u53ea\u9501\u5b9a\u94fe\u8868\u6216\u7ea2\u9ed1\u6811\u7684<strong>\u5934\u8282\u70b9<\/strong>\uff08head node\uff09\uff0c\u4e0d\u5f71\u54cd\u5176\u4ed6\u8282\u70b9\u7684\u8bfb\u5199\u3002<\/li>\n<li>\u67e5\u627e\u3001\u66ff\u6362\u3001\u8d4b\u503c\u7b49\u64cd\u4f5c\u4f18\u5148\u4f7f\u7528 <strong>CAS\uff08\u4e50\u89c2\u9501\uff09<\/strong>\uff0c\u6027\u80fd\u8fdc\u9ad8\u4e8e <code>synchronized<\/code> \u548c <code>ReentrantLock<\/code>\u3002<\/li>\n<li>\u5728\u6269\u5bb9\u3001\u54c8\u5e0c\u51b2\u7a81\u7b49 CAS \u65e0\u6cd5\u4fdd\u8bc1\u5b89\u5168\u7684\u573a\u666f\u4e0b\uff0c\u624d\u4f7f\u7528 <code>synchronized<\/code> \u52a0\u9501\u3002<\/li>\n<li><code>get()<\/code> \u8bfb\u53d6\u64cd\u4f5c\u540c\u6837\u65e0\u9501\uff0c\u901a\u8fc7 <code>volatile<\/code> \u4fee\u9970 <code>value<\/code> \u548c <code>next<\/code> \u7b49\u5b57\u6bb5\u4fdd\u8bc1\u53ef\u89c1\u6027\uff0c\u786e\u4fdd\u4e0d\u4f1a\u8bfb\u5230\u810f\u6570\u636e\u3002<\/li>\n<li>\u6570\u7ec4\u672c\u8eab\u4e5f\u4f7f\u7528 <code>volatile<\/code> \u4fee\u9970\uff0c\u6269\u5bb9\u65f6\u80fd\u8ba9\u8bfb\u7ebf\u7a0b\u53ca\u65f6\u611f\u77e5\uff0c\u907f\u514d\u8bfb\u5230\u810f\u6570\u636e\u3002<\/li>\n<li>\u6269\u5bb9\u65f6\u4f1a\u963b\u585e\u6240\u6709\u8bfb\u5199\u64cd\u4f5c\uff0c\u4f46\u6269\u5bb9\u672c\u8eab\u662f\u5e76\u53d1\u8fdb\u884c\u7684\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001JDK 1.7 \u4e0e JDK 1.8 \u7684\u4e3b\u8981\u533a\u522b\u603b\u7ed3<\/h3>\n<ol start=\"18\">\n<li>\u9501\u673a\u5236\u4e0d\u540c\uff1aJDK 1.7 \u4f7f\u7528 <code>ReentrantLock<\/code>\uff08\u5206\u6bb5\u9501\uff09\uff0cJDK 1.8 \u4f7f\u7528 <code>synchronized + CAS<\/code>\u3002<\/li>\n<li>\u6570\u636e\u7ed3\u6784\u4e0d\u540c\uff1aJDK 1.7 \u4e3a Segment + HashEntry \u6570\u7ec4 + \u94fe\u8868\uff0cJDK 1.8 \u4e3a Node \u6570\u7ec4 + \u94fe\u8868 + \u7ea2\u9ed1\u6811\u3002<\/li>\n<li>\u9501\u7c92\u5ea6\u4e0d\u540c\uff1aJDK 1.7 \u9501\u7684\u662f\u6574\u4e2a <code>Segment<\/code>\uff08\u4e00\u4e2a\u6bb5\u5305\u542b\u591a\u4e2a\u94fe\u8868\uff09\uff0cJDK 1.8 \u9501\u7684\u662f\u5355\u4e2a\u94fe\u8868\u6216\u7ea2\u9ed1\u6811\u7684\u5934\u8282\u70b9\uff0c\u9501\u7c92\u5ea6\u66f4\u7ec6\uff0c\u5e76\u53d1\u5ea6\u66f4\u9ad8\u3002<\/li>\n<li>JDK 1.8 \u91c7\u7528 CAS \u4e50\u89c2\u9501\uff0c\u5728\u5e76\u53d1\u4e0d\u6fc0\u70c8\u65f6\u6027\u80fd\u8fdc\u4f18\u4e8e <code>ReentrantLock<\/code> \u548c <code>synchronized<\/code>\u3002<\/li>\n<\/ol>\n<h2>13-\u5982\u4f55\u5b9e\u73b0\u4e00\u4e2aIOC\u5bb9\u5668<\/h2>\n<hr \/>\n<ol>\n<li>\u9762\u8bd5\u95ee\u201c\u5982\u4f55\u5b9e\u73b0\u4e00\u4e2a IOC \u5bb9\u5668\u201d\uff0c\u5b9e\u9645\u662f\u8003\u5bdf\u5bf9 Spring \u4e2d IOC \u5bb9\u5668\u539f\u7406\u7684\u7406\u89e3\uff0c\u53ea\u9700\u8bf4\u51fa\u5927\u4f53\u601d\u8def\u5373\u53ef\uff0c\u4e0d\u9700\u8981\u9762\u9762\u4ff1\u5230\u3002<\/li>\n<li>\u7b2c\u4e00\u6b65\uff1a\u7f16\u5199\u4e00\u4e2a\u914d\u7f6e\u6587\u4ef6\uff0c\u5728\u914d\u7f6e\u6587\u4ef6\u4e2d\u6307\u5b9a\u5305\u626b\u63cf\u8def\u5f84\u3002<\/li>\n<li>\u7b2c\u4e8c\u6b65\uff1a\u6839\u636e\u5305\u626b\u63cf\u8def\u5f84\uff0c\u9012\u5f52\u8bfb\u53d6\u8be5\u8def\u5f84\u4e0b\u6240\u6709\u7684 <code>.class<\/code> \u6587\u4ef6\u3002<\/li>\n<li>\u7b2c\u4e09\u6b65\uff1a\u901a\u8fc7\u53cd\u5c04\u89e3\u6790\u8fd9\u4e9b <code>.class<\/code> \u6587\u4ef6\uff0c\u627e\u51fa\u9700\u8981\u4ea4\u7ed9 IOC \u5bb9\u5668\u7ba1\u7406\u7684\u7c7b\uff08\u6839\u636e\u81ea\u5b9a\u4e49\u6ce8\u89e3\u5982 <code>@Controller<\/code>\u3001<code>@Service<\/code>\u3001<code>@Repository<\/code> \u7b49\u6765\u8bc6\u522b\uff09\u3002<\/li>\n<li>\u7b2c\u56db\u6b65\uff1a\u5b9a\u4e49\u4e00\u4e2a <code>Map<\/code> \u4f5c\u4e3a IOC \u5bb9\u5668\uff0c\u5c06\u7b26\u5408\u6761\u4ef6\u7684\u7c7b\u5b9e\u4f8b\u5316\u540e\u5b58\u5165\u8be5 <code>Map<\/code> \u4e2d\uff08key \u4e3a\u7c7b\u540d\u6216 bean \u540d\u79f0\uff0cvalue \u4e3a\u5b9e\u4f8b\u5bf9\u8c61\uff09\u3002<\/li>\n<li>\u7b2c\u4e94\u6b65\uff1a\u904d\u5386 IOC \u5bb9\u5668\u4e2d\u7684\u5b9e\u4f8b\uff0c\u68c0\u67e5\u6bcf\u4e2a\u5b9e\u4f8b\u662f\u5426\u4f9d\u8d56\u5176\u4ed6\u7c7b\u7684\u5b9e\u4f8b\uff0c\u5982\u679c\u6709\u5219\u8fdb\u884c\u9012\u5f52\u7684\u4f9d\u8d56\u6ce8\u5165\u3002<\/li>\n<li>\u66f4\u8be6\u7ec6\u7684\u63cf\u8ff0\u53ef\u4ee5\u5305\u62ec\uff1a\u5b9a\u4e49\u81ea\u5b9a\u4e49\u6ce8\u89e3\uff08\u5982 <code>@Autowired<\/code> \u7528\u4e8e\u4f9d\u8d56\u6ce8\u5165\u3001<code>@Value<\/code> \u7528\u4e8e\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\u7b49\uff09\u3002<\/li>\n<li>\u66f4\u590d\u6742\u7684\u5b9e\u73b0\u8fd8\u4f1a\u6d89\u53ca\u5faa\u73af\u4f9d\u8d56\u7684\u5904\u7406\u3001\u63a5\u53e3\u6ce8\u5165\u7b49\u95ee\u9898\uff0c\u4f46\u9762\u8bd5\u65f6\u7b80\u5355\u56de\u7b54\u4e0a\u8ff0\u51e0\u6b65\u5373\u53ef\uff0c\u907f\u514d\u7ed9\u81ea\u5df1\u6316\u5751\u3002<\/li>\n<\/ol>\n<h2>14-\u4ec0\u4e48\u662f\u5b57\u8282\u7801\uff0c\u4f5c\u7528\u662f\u4ec0\u4e48<\/h2>\n<hr \/>\n<ol>\n<li>Java \u7a0b\u5e8f\u5e76\u4e0d\u662f\u76f4\u63a5\u8fd0\u884c\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u7684\uff0c\u800c\u662f\u8fd0\u884c\u5728 JVM\uff08Java \u865a\u62df\u673a\uff09\u4e4b\u4e0a\uff0c\u56e0\u6b64\u5fc5\u987b\u5148\u5b89\u88c5 JDK\/JRE \u624d\u80fd\u8fd0\u884c Java \u7a0b\u5e8f\u3002<\/li>\n<li>\u5b57\u8282\u7801\uff08Bytecode\uff09\u5c31\u662f JVM \u80fd\u591f\u7406\u89e3\u7684\u4ee3\u7801\uff0c\u5373 <code>.class<\/code> \u6587\u4ef6\uff0c\u5b83\u4e0d\u9762\u5411\u4efb\u4f55\u7279\u5b9a\u7684\u5904\u7406\u5668\u6216\u64cd\u4f5c\u7cfb\u7edf\uff0c\u53ea\u9762\u5411\u865a\u62df\u673a\u3002<\/li>\n<li>Java \u6e90\u6587\u4ef6\uff08<code>.java<\/code>\uff09\u5148\u901a\u8fc7 <code>javac<\/code> \u7f16\u8bd1\u5668\u7f16\u8bd1\u6210\u5b57\u8282\u7801\uff08<code>.class<\/code> \u6587\u4ef6\uff09\uff0c\u518d\u7531 JVM \u4e2d\u7684\u89e3\u91ca\u5668\u5c06\u5b57\u8282\u7801\u7ffb\u8bd1\u6210\u7279\u5b9a\u7cfb\u7edf\u7684\u673a\u5668\u7801\u5e76\u6267\u884c\u3002<\/li>\n<li>\u4e0d\u540c\u64cd\u4f5c\u7cfb\u7edf\u7684\u89e3\u91ca\u5668\u5b9e\u73b0\u4e0d\u540c\uff08Windows \u7248\u3001Linux \u7248\uff09\uff0c\u4f46 JVM \u5bf9\u5916\u63d0\u4f9b\u7684\u63a5\u53e3\u662f\u4e00\u81f4\u7684\uff0c\u56e0\u6b64\u540c\u4e00\u4efd\u5b57\u8282\u7801\u53ef\u4ee5\u5728\u4e0d\u540c\u5e73\u53f0\u4e0a\u8fd0\u884c\u3002<\/li>\n<li>\u5b57\u8282\u7801\u5e26\u6765\u7684\u6700\u5927\u597d\u5904\u662f<strong>\u8de8\u5e73\u53f0<\/strong>\uff08\u4e00\u6b21\u7f16\u8bd1\uff0c\u5230\u5904\u8fd0\u884c\uff09\uff1a\u5b57\u8282\u7801\u65e0\u9700\u91cd\u65b0\u7f16\u8bd1\u5373\u53ef\u5728\u4e0d\u540c\u5e73\u53f0\u7684 JVM \u4e0a\u8fd0\u884c\u3002<\/li>\n<li>\u5b57\u8282\u7801\u7684\u53e6\u4e00\u4e2a\u597d\u5904\u662f<strong>\u63d0\u5347\u6267\u884c\u6548\u7387<\/strong>\uff1a\u4f20\u7edf\u7684\u89e3\u91ca\u578b\u8bed\u8a00\u662f&#8221;\u89e3\u91ca\u4e00\u53e5\u6267\u884c\u4e00\u53e5&#8221;\uff0c\u7f16\u8bd1\u8fc7\u7a0b\u5360\u7528\u8fd0\u884c\u65f6\u95f4\uff1b\u800c Java \u5c06\u7f16\u8bd1\u548c\u89e3\u91ca\u62c6\u6210\u4e24\u6b65\uff0c\u7f16\u8bd1\u5728\u5f00\u53d1\u9636\u6bb5\u63d0\u524d\u5b8c\u6210\uff0c\u4e0d\u5360\u7528\u7a0b\u5e8f\u8fd0\u884c\u65f6\u95f4\uff0c\u6267\u884c\u6548\u7387\u66f4\u9ad8\u3002<\/li>\n<li>Java \u65e2\u4e0d\u662f\u7eaf\u7f16\u8bd1\u578b\u8bed\u8a00\uff0c\u4e5f\u4e0d\u662f\u7eaf\u89e3\u91ca\u578b\u8bed\u8a00\uff0c\u800c\u662f<strong>\u7f16\u8bd1\u4e0e\u89e3\u91ca\u5e76\u5b58<\/strong>\u7684\u8bed\u8a00\u3002<\/li>\n<\/ol>\n<h2>15-java\u7c7b\u52a0\u8f7d\u5668\u6709\u54ea\u4e9b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001JDK \u81ea\u5e26\u7684\u4e09\u4e2a\u7c7b\u52a0\u8f7d\u5668<\/h3>\n<ol>\n<li>JDK \u81ea\u5e26\u4e09\u4e2a\u7c7b\u52a0\u8f7d\u5668\uff1a<code>Bootstrap ClassLoader<\/code>\uff08\u542f\u52a8\u7c7b\u52a0\u8f7d\u5668\uff09\u3001<code>Extension ClassLoader<\/code>\uff08\u6269\u5c55\u7c7b\u52a0\u8f7d\u5668\uff09\u3001<code>Application ClassLoader<\/code>\uff08\u5e94\u7528\u7a0b\u5e8f\u7c7b\u52a0\u8f7d\u5668\uff0c\u4e5f\u79f0\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\uff09\u3002<\/li>\n<li><code>Bootstrap ClassLoader<\/code> \u662f\u9876\u5c42\u7c7b\u52a0\u8f7d\u5668\uff0c\u8d1f\u8d23\u52a0\u8f7d <code>JAVA_HOME\/lib<\/code> \u76ee\u5f55\u4e0b\u7684\u6838\u5fc3\u7c7b\u5e93\uff08\u5982 <code>rt.jar<\/code>\uff09\u3002<\/li>\n<li><code>Extension ClassLoader<\/code> \u8d1f\u8d23\u52a0\u8f7d <code>JAVA_HOME\/lib\/ext<\/code> \u76ee\u5f55\u4e0b\u7684\u6269\u5c55\u7c7b\u5e93\u3002<\/li>\n<li><code>Application ClassLoader<\/code> \u8d1f\u8d23\u52a0\u8f7d <code>classpath<\/code> \u8def\u5f84\u4e0b\u7684\u7c7b\u6587\u4ef6\uff0c\u5305\u62ec\u7a0b\u5e8f\u5458\u81ea\u5df1\u5199\u7684\u4ee3\u7801\u548c\u5f15\u5165\u7684\u7b2c\u4e09\u65b9\u4f9d\u8d56 jar \u5305\u3002<\/li>\n<li><code>Application ClassLoader<\/code> \u662f\u9ed8\u8ba4\u7684\u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668\uff0c\u53ef\u901a\u8fc7 <code>ClassLoader.getSystemClassLoader()<\/code> \u83b7\u53d6\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u7c7b\u52a0\u8f7d\u5668\u4e4b\u95f4\u7684\u5173\u7cfb<\/h3>\n<ol start=\"6\">\n<li>\u7c7b\u52a0\u8f7d\u5668\u4e4b\u95f4\u7684&#8221;\u7236\u7c7b&#8221;\u5173\u7cfb<strong>\u4e0d\u662f\u7ee7\u627f\u5173\u7cfb<\/strong>\uff0c\u800c\u662f\u901a\u8fc7\u6bcf\u4e2a\u7c7b\u52a0\u8f7d\u5668\u5185\u90e8\u7684 <code>parent<\/code> \u5c5e\u6027\u7ef4\u62a4\u7684\u3002<\/li>\n<li><code>Bootstrap ClassLoader<\/code> \u662f <code>Extension ClassLoader<\/code> \u7684\u7236\u7c7b\u52a0\u8f7d\u5668\uff0c<code>Extension ClassLoader<\/code> \u662f <code>Application ClassLoader<\/code> \u7684\u7236\u7c7b\u52a0\u8f7d\u5668\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668<\/h3>\n<ol start=\"8\">\n<li>\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u9700\u8981\u7ee7\u627f <code>ClassLoader<\/code> \u7c7b\uff0c\u5e76\u91cd\u5199\u76f8\u5173\u65b9\u6cd5\u3002<\/li>\n<li>\u5982\u679c\u9700\u8981\u7b26\u5408 Java \u672c\u8eab\u7684\u53cc\u4eb2\u59d4\u6d3e\u673a\u5236\uff0c\u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\u5e94\u5c06 <code>parent<\/code> \u6307\u5b9a\u4e3a <code>Application ClassLoader<\/code>\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7c7b\u52a0\u8f7d\u5668<\/h3>\n<ol start=\"10\">\n<li><code>Application ClassLoader<\/code> \u540c\u65f6\u4e5f\u662f\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7c7b\u52a0\u8f7d\u5668\uff0c\u5b83\u8d2f\u7a7f\u4e8e\u4e09\u5c42\u7c7b\u52a0\u8f7d\u5668\u4e4b\u95f4\uff0c\u6bcf\u4e00\u5c42\u90fd\u53ef\u4ee5\u8bbf\u95ee\u5b83\u3002<\/li>\n<\/ol>\n<h2>16-\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u7684\u6838\u5fc3\u6d41\u7a0b<\/h3>\n<ol>\n<li>\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u5305\u542b\u4e24\u4e2a\u65b9\u5411\u7684\u52a8\u4f5c\uff1a<strong>\u5411\u4e0a\u59d4\u6d3e<\/strong>\uff08\u67e5\u627e\u7f13\u5b58\uff09\u548c<strong>\u5411\u4e0b\u67e5\u627e<\/strong>\uff08\u67e5\u627e\u52a0\u8f7d\u8def\u5f84\uff09\u3002<\/li>\n<li>\u5f53\u4e00\u4e2a\u7c7b\u52a0\u8f7d\u5668\u6536\u5230\u7c7b\u52a0\u8f7d\u8bf7\u6c42\u65f6\uff0c\u4e0d\u4f1a\u7acb\u5373\u81ea\u5df1\u53bb\u52a0\u8f7d\uff0c\u800c\u662f\u5148\u5411\u4e0a\u59d4\u6d3e\u7ed9\u7236\u7c7b\u52a0\u8f7d\u5668\u53bb\u67e5\u627e\u7f13\u5b58\u3002<\/li>\n<li>\u5411\u4e0a\u59d4\u6d3e\u4f1a\u4e00\u76f4\u6301\u7eed\u5230\u9876\u5c42\u7684 <code>Bootstrap ClassLoader<\/code>\uff0c\u9010\u7ea7\u67e5\u627e\u5404\u81ea\u7f13\u5b58\u4e2d\u662f\u5426\u5df2\u52a0\u8f7d\u8fc7\u8be5\u7c7b\u3002<\/li>\n<li>\u5982\u679c\u7f13\u5b58\u4e2d\u627e\u5230\u8be5\u7c7b\uff0c\u76f4\u63a5\u8fd4\u56de\uff0c\u4e0d\u518d\u91cd\u590d\u52a0\u8f7d\u3002<\/li>\n<li>\u5982\u679c\u9876\u5c42 <code>Bootstrap ClassLoader<\/code> \u7684\u7f13\u5b58\u548c\u52a0\u8f7d\u8def\u5f84\u4e2d\u90fd\u6ca1\u6709\u627e\u5230\u8be5\u7c7b\uff0c\u5219\u5f00\u59cb\u5411\u4e0b\u67e5\u627e\uff0c\u9010\u7ea7\u5230\u5404\u4e2a\u52a0\u8f7d\u5668\u7684\u52a0\u8f7d\u8def\u5f84\u4e2d\u67e5\u627e\u3002<\/li>\n<li>\u5411\u4e0b\u67e5\u627e\u4f1a\u4e00\u76f4\u6301\u7eed\u5230\u6700\u521d\u53d1\u8d77\u52a0\u8f7d\u8bf7\u6c42\u7684\u7c7b\u52a0\u8f7d\u5668\u4e3a\u6b62\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b\u7684\u597d\u5904<\/h3>\n<ol start=\"7\">\n<li><strong>\u4fdd\u8bc1\u5b89\u5168\u6027<\/strong>\uff1a\u9632\u6b62\u6838\u5fc3\u7c7b\u5e93\u88ab\u6076\u610f\u66ff\u6362\u3002\u4f8b\u5982\uff0c\u7528\u6237\u81ea\u5b9a\u4e49\u7684 <code>java.lang.String<\/code> \u7c7b\u4e0d\u4f1a\u88ab\u52a0\u8f7d\uff0c\u56e0\u4e3a\u5411\u4e0a\u59d4\u6d3e\u5230\u9876\u5c42\u65f6\u53d1\u73b0\u8be5\u7c7b\u5df2\u5728 <code>rt.jar<\/code> \u4e2d\u52a0\u8f7d\u8fc7\u3002<\/li>\n<li>\u5728 Java \u4e2d\uff0c\u6240\u6709\u4ee5 <code>java.<\/code> \u5f00\u5934\u7684\u81ea\u5b9a\u4e49\u7c7b\u90fd\u4e0d\u5141\u8bb8\u88ab\u52a0\u8f7d\uff0c\u8fd9\u662f JDK \u6e90\u7801\u4e2d\u5199\u6b7b\u7684\u5b89\u5168\u9650\u5236\u3002<\/li>\n<li><strong>\u907f\u514d\u7c7b\u7684\u91cd\u590d\u52a0\u8f7d<\/strong>\uff1a\u901a\u8fc7\u5411\u4e0a\u59d4\u6d3e\u673a\u5236\uff0c\u786e\u4fdd\u540c\u4e00\u4e2a\u7c7b\u5728\u6574\u4e2a JVM \u4e2d\u53ea\u88ab\u52a0\u8f7d\u4e00\u6b21\u3002<\/li>\n<li>JVM \u4e2d\u552f\u4e00\u786e\u5b9a\u4e00\u4e2a\u7c7b\u7684\u65b9\u5f0f\u662f <strong>&#8220;\u7c7b\u7684\u5168\u9650\u5b9a\u7c7b\u540d + \u52a0\u8f7d\u8be5\u7c7b\u7684\u7c7b\u52a0\u8f7d\u5668&#8221;<\/strong>\uff0c\u4e24\u8005\u5171\u540c\u4f5c\u4e3a\u552f\u4e00\u6807\u8bc6\u3002<\/li>\n<li>\u5373\u4f7f\u540c\u4e00\u4e2a <code>.class<\/code> \u6587\u4ef6\uff0c\u88ab\u4e0d\u540c\u7684\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\uff0c\u5728 JVM \u4e2d\u4e5f\u4f1a\u88ab\u89c6\u4e3a\u4e24\u4e2a\u4e0d\u540c\u7684\u7c7b\u3002<\/li>\n<\/ol>\n<h2>17-java\u4e2d\u7684\u5f02\u5e38\u4f53\u7cfb<\/h2>\n<hr \/>\n<ol>\n<li>Java \u4e2d\u6240\u6709\u5f02\u5e38\u7c7b\u7684\u9876\u7ea7\u7236\u7c7b\u662f <code>Throwable<\/code>\u3002<\/li>\n<li><code>Throwable<\/code> \u6709\u4e24\u4e2a\u76f4\u63a5\u5b50\u7c7b\uff1a<code>Exception<\/code> \u548c <code>Error<\/code>\u3002<\/li>\n<li><code>Error<\/code> \u662f\u7a0b\u5e8f\u65e0\u6cd5\u5904\u7406\u7684\u9519\u8bef\uff08\u5982 <code>OutOfMemoryError<\/code>\uff09\uff0c\u4e00\u65e6\u51fa\u73b0\u7a0b\u5e8f\u5fc5\u7136\u5d29\u6e83\u7ec8\u6b62\u3002<\/li>\n<li><code>Exception<\/code> \u662f\u7a0b\u5e8f\u5458\u53ef\u4ee5\u5904\u7406\u3001\u53ef\u4ee5\u907f\u514d\u7684\u9519\u8bef\uff0c\u4e0d\u4f1a\u5bfc\u81f4\u6574\u4e2a\u7a0b\u5e8f\u7ec8\u6b62\uff0c\u53ea\u4f1a\u5bfc\u81f4\u5f53\u524d\u7ebf\u7a0b\u6267\u884c\u5931\u8d25\u3002<\/li>\n<li><code>Exception<\/code> \u53c8\u5206\u4e3a\u4e24\u5927\u7c7b\uff1a<code>RuntimeException<\/code>\uff08\u8fd0\u884c\u65f6\u5f02\u5e38\uff09\u548c <code>CheckedException<\/code>\uff08\u68c0\u67e5\u5f02\u5e38\uff0c\u4e5f\u79f0\u7f16\u8bd1\u65f6\u5f02\u5e38\uff09\u3002<\/li>\n<li><code>CheckedException<\/code> \u5728\u7f16\u8bd1\u9636\u6bb5\u5c31\u4f1a\u88ab\u7f16\u8bd1\u5668\u68c0\u6d4b\u5230\uff0c\u5bfc\u81f4\u7f16\u8bd1\u4e0d\u901a\u8fc7\uff08\u5982\u8bed\u6cd5\u9519\u8bef\u3001\u7c7b\u578b\u8d4b\u503c\u9519\u8bef\uff09\uff0c\u73b0\u4ee3 IDE \u901a\u5e38\u4f1a\u5728\u7f16\u7801\u65f6\u76f4\u63a5\u63d0\u793a\u3002<\/li>\n<li><code>RuntimeException<\/code> \u53d1\u751f\u5728\u7a0b\u5e8f\u8fd0\u884c\u8fc7\u7a0b\u4e2d\uff08\u5982\u7a7a\u6307\u9488\u5f02\u5e38\u3001\u6570\u7ec4\u4e0b\u6807\u8d8a\u754c\uff09\uff0c\u53ea\u4f1a\u5bfc\u81f4\u5f53\u524d\u7ebf\u7a0b\u6267\u884c\u5931\u8d25\uff0c\u4e0d\u5f71\u54cd\u5176\u4ed6\u7ebf\u7a0b\u3002<\/li>\n<li>\u8fd0\u884c\u65f6\u5f02\u5e38\u662f\u7a0b\u5e8f\u5458\u9700\u8981\u4e3b\u52a8\u53bb\u5904\u7406\u548c\u907f\u514d\u7684\uff08\u5982\u901a\u8fc7 <code>try-catch<\/code> \u6216\u4ee3\u7801\u903b\u8f91\u9884\u9632\uff09\u3002<\/li>\n<li>\u7a0b\u5e8f\u5458\u63a5\u89e6\u6700\u591a\u7684\u662f <code>RuntimeException<\/code>\uff0c\u81ea\u5b9a\u4e49\u5f02\u5e38\u65f6\u901a\u5e38\u4e5f\u9009\u62e9\u7ee7\u627f <code>RuntimeException<\/code>\u3002<\/li>\n<\/ol>\n<h2>18-GC\u5982\u4f55\u5224\u65ad\u5bf9\u8c61\u53ef\u4ee5\u88ab\u56de\u6536<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5224\u65ad\u5bf9\u8c61\u53ef\u56de\u6536\u7684\u4e24\u79cd\u7b97\u6cd5<\/h3>\n<ol>\n<li><strong>\u5f15\u7528\u8ba1\u6570\u6cd5<\/strong>\uff1a\u6bcf\u4e2a\u5bf9\u8c61\u7ef4\u62a4\u4e00\u4e2a\u5f15\u7528\u8ba1\u6570\u5668\uff0c\u65b0\u589e\u5f15\u7528\u65f6\u52a0\u4e00\uff0c\u91ca\u653e\u5f15\u7528\u65f6\u51cf\u4e00\uff0c\u8ba1\u6570\u4e3a\u96f6\u65f6\u8868\u793a\u53ef\u88ab\u56de\u6536\u3002<\/li>\n<li>\u5f15\u7528\u8ba1\u6570\u6cd5\u5b58\u5728<strong>\u5faa\u73af\u5f15\u7528<\/strong>\u7f3a\u9677\uff08\u5982 A \u5f15\u7528 B\u3001B \u5f15\u7528 A\uff09\uff0c\u5bfc\u81f4\u4e24\u4e2a\u5bf9\u8c61\u8ba1\u6570\u5668\u6c38\u8fdc\u4e0d\u4e3a\u96f6\uff0c\u65e0\u6cd5\u88ab\u56de\u6536\u3002<\/li>\n<li>\u5f15\u7528\u8ba1\u6570\u6cd5\u7684\u4f18\u70b9\u662f\u6548\u7387\u9ad8\uff0c\u53ea\u9700\u7b80\u5355\u64cd\u4f5c\u8ba1\u6570\u5668\u5373\u53ef\u5224\u65ad\uff0c\u4f46 Java \u5e76\u672a\u91c7\u7528\u6b64\u65b9\u6cd5\u3002<\/li>\n<li>Java \u91c7\u7528<strong>\u53ef\u8fbe\u6027\u5206\u6790<\/strong>\u6765\u5224\u65ad\u5bf9\u8c61\u662f\u5426\u53ef\u56de\u6536\uff1a\u4ece <code>GC Root<\/code> \u5bf9\u8c61\u5411\u4e0b\u641c\u7d22\uff0c\u80fd\u641c\u7d22\u5230\u7684\u5bf9\u8c61\u5b58\u6d3b\uff0c\u641c\u7d22\u4e0d\u5230\u7684\u5bf9\u8c61\u53ef\u88ab\u56de\u6536\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001GC Root \u7684\u5bf9\u8c61\u7c7b\u578b<\/h3>\n<ol start=\"5\">\n<li><strong>\u865a\u62df\u673a\u6808\uff08\u6808\u5e27\u4e2d\u7684\u672c\u5730\u53d8\u91cf\u8868\uff09\u4e2d\u5f15\u7528\u7684\u5bf9\u8c61<\/strong>\uff0c\u5982\u65b9\u6cd5\u4e2d <code>new<\/code> \u51fa\u6765\u7684\u5c40\u90e8\u53d8\u91cf\uff0c\u5f53\u65b9\u6cd5\u5904\u4e8e\u6d3b\u52a8\u6808\u5e27\u65f6\u8be5\u5bf9\u8c61\u5373\u4e3a <code>GC Root<\/code>\u3002<\/li>\n<li><strong>\u65b9\u6cd5\u533a\u4e2d\u7c7b\u7684\u9759\u6001\u5c5e\u6027\uff08<code>static<\/code> \u4fee\u9970\u7684\u7c7b\u5c5e\u6027\uff09\u5f15\u7528\u7684\u5bf9\u8c61<\/strong>\u3002<\/li>\n<li><strong>\u65b9\u6cd5\u533a\u4e2d\u7684\u5e38\u91cf\uff08<code>static final<\/code> \u4fee\u9970\u7684\u5e38\u91cf\uff09\u5f15\u7528\u7684\u5bf9\u8c61<\/strong>\u3002<\/li>\n<li><strong>\u672c\u5730\u65b9\u6cd5\u6808\u4e2d JNI\uff08Native \u65b9\u6cd5\uff09\u5f15\u7528\u7684\u5bf9\u8c61<\/strong>\uff0c\u7531 JVM \u81ea\u52a8\u8c03\u7528\uff0c\u4e0d\u53ef\u88ab\u56de\u6536\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u53ef\u8fbe\u6027\u5206\u6790\u7684\u4e24\u8f6e\u6807\u8bb0\u4e0e finalize() \u673a\u5236<\/h3>\n<ol start=\"9\">\n<li>\u53ef\u8fbe\u6027\u5206\u6790\u5e76\u975e\u4e00\u6b21\u5c31\u56de\u6536\u5bf9\u8c61\uff0c\u800c\u662f\u7ecf\u8fc7<strong>\u4e24\u6b21\u6807\u8bb0<\/strong>\u3002<\/li>\n<li><strong>\u7b2c\u4e00\u6b21\u6807\u8bb0<\/strong>\uff1a\u53ef\u8fbe\u6027\u5206\u6790\u53d1\u73b0\u5bf9\u8c61\u5230 <code>GC Root<\/code> \u4e0d\u53ef\u8fbe\u65f6\uff0c\u8fdb\u884c\u7b2c\u4e00\u6b21\u6807\u8bb0\u3002<\/li>\n<li><strong>\u7b2c\u4e8c\u6b21\u6807\u8bb0<\/strong>\uff1a\u865a\u62df\u673a\u5c06\u5bf9\u8c61\u653e\u5165 <code>F-Queue<\/code> \u961f\u5217\uff0c\u5224\u65ad\u8be5\u5bf9\u8c61\u662f\u5426\u8986\u76d6\u4e86 <code>finalize()<\/code> \u65b9\u6cd5\u3002<\/li>\n<li>\u5982\u679c\u5bf9\u8c61<strong>\u6ca1\u6709\u8986\u76d6<\/strong> <code>finalize()<\/code> \u65b9\u6cd5\uff0c\u7b2c\u4e8c\u6b21\u6807\u8bb0\u540e\u76f4\u63a5\u56de\u6536\u3002<\/li>\n<li>\u5982\u679c\u5bf9\u8c61<strong>\u8986\u76d6\u4e86<\/strong> <code>finalize()<\/code> \u65b9\u6cd5\u4e14\u8be5\u65b9\u6cd5\u5c1a\u672a\u6267\u884c\uff0c\u5219\u4f1a\u6267\u884c <code>finalize()<\/code> \u65b9\u6cd5\uff08\u4e14 <code>finalize()<\/code> \u53ea\u4f1a\u6267\u884c\u4e00\u6b21\uff09\u3002<\/li>\n<li>\u5728 <code>finalize()<\/code> \u65b9\u6cd5\u4e2d\uff0c\u5982\u679c\u5bf9\u8c61\u91cd\u65b0\u4e0e <code>GC Root<\/code> \u5efa\u7acb\u5f15\u7528\u5173\u7cfb\uff0c\u5219\u5bf9\u8c61<strong>\u590d\u6d3b<\/strong>\uff0c\u4e0d\u4f1a\u88ab\u56de\u6536\uff1b\u5426\u5219\u6700\u7ec8\u88ab\u56de\u6536\u3002<\/li>\n<li><code>finalize()<\/code> \u65b9\u6cd5\u8fd0\u884c\u4ee3\u4ef7\u9ad8\u4e14\u4e0d\u63a8\u8350\u4f7f\u7528\uff0c\u5b9e\u9645\u5f00\u53d1\u4e2d\u57fa\u672c\u4e0d\u4f1a\u8986\u76d6\u5b83\u3002<\/li>\n<\/ol>\n<h2>19-\u7ebf\u7a0b\u7684\u751f\u547d\u5468\u671f\u53ca\u72b6\u6001<\/h2>\n<hr \/>\n<ol>\n<li>\u7ebf\u7a0b\u7684\u751f\u547d\u5468\u671f\u548c\u7ebf\u7a0b\u72b6\u6001\u672c\u8d28\u4e0a\u662f\u540c\u4e00\u4e2a\u95ee\u9898\uff0c\u56de\u7b54\u65f6\u9700\u5c06\u72b6\u6001\u4e0e\u751f\u547d\u5468\u671f\u9636\u6bb5\u5bf9\u5e94\u8d77\u6765\u3002<\/li>\n<li>Java \u7ebf\u7a0b\u901a\u5e38\u5206\u4e3a\u4e94\u79cd\u72b6\u6001\uff1a<strong>\u65b0\u5efa\uff08New\uff09\u3001\u5c31\u7eea\uff08Runnable\uff09\u3001\u8fd0\u884c\uff08Running\uff09\u3001\u963b\u585e\uff08Blocked\uff09\u3001\u6b7b\u4ea1\uff08Terminated\uff09<\/strong>\u3002<\/li>\n<li><strong>\u65b0\u5efa\u72b6\u6001<\/strong>\uff1a\u4f7f\u7528 <code>new<\/code> \u5173\u952e\u5b57\u521b\u5efa\u4e86\u4e00\u4e2a\u7ebf\u7a0b\u5bf9\u8c61\uff0c\u4f46\u5c1a\u672a\u8c03\u7528 <code>start()<\/code> \u65b9\u6cd5\u3002<\/li>\n<li><strong>\u5c31\u7eea\u72b6\u6001<\/strong>\uff1a\u8c03\u7528\u4e86\u7ebf\u7a0b\u7684 <code>start()<\/code> \u65b9\u6cd5\u540e\uff0c\u7ebf\u7a0b\u8fdb\u5165\u53ef\u8fd0\u884c\u72b6\u6001\uff0c\u7b49\u5f85 CPU \u5206\u914d\u65f6\u95f4\u7247\u3002<\/li>\n<li><strong>\u8fd0\u884c\u72b6\u6001<\/strong>\uff1a\u7ebf\u7a0b\u83b7\u5f97\u4e86 CPU \u65f6\u95f4\u7247\uff0c\u6b63\u5728\u6267\u884c <code>run()<\/code> \u65b9\u6cd5\u4e2d\u7684\u7a0b\u5e8f\u4ee3\u7801\u3002<\/li>\n<li><strong>\u6b7b\u4ea1\u72b6\u6001<\/strong>\uff1a\u7ebf\u7a0b\u7684 <code>run()<\/code> \u65b9\u6cd5\u6267\u884c\u5b8c\u6bd5\uff0c\u6216\u56e0\u5f02\u5e38\u9000\u51fa\uff0c\u7ebf\u7a0b\u751f\u547d\u5468\u671f\u7ed3\u675f\u3002<\/li>\n<li><strong>\u963b\u585e\u72b6\u6001<\/strong>\uff1a\u7ebf\u7a0b\u56e0\u67d0\u79cd\u539f\u56e0\u653e\u5f03\u4e86 CPU \u4f7f\u7528\u6743\uff0c\u6682\u65f6\u505c\u6b62\u8fd0\u884c\uff0c\u5f85\u6761\u4ef6\u6ee1\u8db3\u540e\u91cd\u65b0\u8fdb\u5165\u5c31\u7eea\u72b6\u6001\u3002<\/li>\n<li><strong>\u7b49\u5f85\u963b\u585e<\/strong>\uff1a\u7ebf\u7a0b\u6267\u884c\u4e86 <code>Object.wait()<\/code> \u65b9\u6cd5\uff0c\u91ca\u653e\u6240\u6709\u5360\u7528\u7684\u8d44\u6e90\uff08\u5305\u62ec\u9501\uff09\uff0c\u8fdb\u5165\u7b49\u5f85\u6c60\uff0c\u9700\u5176\u4ed6\u7ebf\u7a0b\u8c03\u7528 <code>notify()<\/code> \u6216 <code>notifyAll()<\/code> \u624d\u80fd\u5524\u9192\u3002<\/li>\n<li><strong>\u540c\u6b65\u963b\u585e<\/strong>\uff1a\u7ebf\u7a0b\u5728\u7ade\u4e89 <code>synchronized<\/code> \u9501\u65f6\u672a\u80fd\u62a2\u5230\u9501\uff0c\u88ab JVM \u653e\u5165\u9501\u6c60\u4e2d\u7b49\u5f85\u3002<\/li>\n<li><strong>\u5176\u4ed6\u963b\u585e<\/strong>\uff1a\u7ebf\u7a0b\u6267\u884c <code>Thread.sleep()<\/code>\u3001<code>Thread.join()<\/code> \u6216\u53d1\u8d77 I\/O \u8bf7\u6c42\u65f6\u8fdb\u5165\u963b\u585e\u72b6\u6001\uff0c\u5f85 sleep \u8d85\u65f6\u3001join \u7ebf\u7a0b\u7ec8\u6b62\u6216 I\/O \u5b8c\u6210\u540e\u91cd\u65b0\u8f6c\u5165\u5c31\u7eea\u72b6\u6001\u3002<\/li>\n<li>\u6ce8\u610f\uff1a<code>wait()<\/code> \u662f <code>Object<\/code> \u7c7b\u7684\u65b9\u6cd5\uff0c<code>sleep()<\/code> \u662f <code>Thread<\/code> \u7c7b\u7684\u65b9\u6cd5\uff0c\u4e24\u8005\u6240\u5c5e\u7c7b\u4e0d\u540c\u3002<\/li>\n<\/ol>\n<h2>20-sleep\u3001 wait\u3001join\u3001 yield<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u524d\u7f6e\u6982\u5ff5\uff1a\u9501\u6c60\u4e0e\u7b49\u5f85\u6c60<\/h3>\n<ol>\n<li><strong>\u9501\u6c60<\/strong>\uff1a\u6240\u6709\u9700\u8981\u7ade\u4e89\u540c\u6b65\u9501\u7684\u7ebf\u7a0b\uff0c\u5982\u679c\u6ca1\u62a2\u5230\u9501\uff0c\u5c31\u4f1a\u88ab JVM \u653e\u5165\u9501\u6c60\u4e2d\u7b49\u5f85\u3002<\/li>\n<li><strong>\u7b49\u5f85\u6c60<\/strong>\uff1a\u7ebf\u7a0b\u5728\u6267\u884c <code>synchronized<\/code> \u540c\u6b65\u4ee3\u7801\u5757\u65f6\u8c03\u7528\u4e86 <code>wait()<\/code>\uff0c\u4f1a\u91ca\u653e\u9501\u5e76\u8fdb\u5165\u7b49\u5f85\u6c60\uff0c\u7b49\u5f85\u6c60\u4e2d\u7684\u7ebf\u7a0b\u4e0d\u4f1a\u53bb\u7ade\u4e89\u9501\u3002<\/li>\n<li><code>notify()<\/code> \u4f1a\u4ece\u7b49\u5f85\u6c60\u4e2d\u968f\u673a\u9009\u4e00\u4e2a\u7ebf\u7a0b\u79fb\u5230\u9501\u6c60\u4e2d\uff0c<code>notifyAll()<\/code> \u4f1a\u5c06\u7b49\u5f85\u6c60\u4e2d\u6240\u6709\u7ebf\u7a0b\u79fb\u5230\u9501\u6c60\u4e2d\uff0c\u4f7f\u5176\u91cd\u65b0\u53c2\u4e0e\u9501\u7ade\u4e89\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001sleep() \u4e0e wait() \u7684\u516d\u70b9\u533a\u522b<\/h3>\n<ol start=\"4\">\n<li><strong>\u6240\u5c5e\u7c7b\u4e0d\u540c<\/strong>\uff1a<code>sleep()<\/code> \u662f <code>Thread<\/code> \u7c7b\u7684\u9759\u6001\u672c\u5730\u65b9\u6cd5\uff0c<code>wait()<\/code> \u662f <code>Object<\/code> \u7c7b\u7684\u672c\u5730\u65b9\u6cd5\u3002<\/li>\n<li><strong>\u662f\u5426\u91ca\u653e\u9501\u4e0d\u540c<\/strong>\uff1a<code>sleep()<\/code> <strong>\u4e0d\u4f1a\u91ca\u653e\u9501<\/strong>\uff0c\u5e26\u7740\u9501\u8fdb\u5165\u51bb\u7ed3\u72b6\u6001\uff1b<code>wait()<\/code> <strong>\u4f1a\u91ca\u653e\u9501<\/strong>\uff0c\u5e76\u8fdb\u5165\u7b49\u5f85\u6c60\u3002<\/li>\n<li><strong>\u662f\u5426\u4f9d\u8d56\u540c\u6b65\u5668\u4e0d\u540c<\/strong>\uff1a<code>sleep()<\/code> \u4e0d\u4f9d\u8d56 <code>synchronized<\/code>\uff0c\u53ef\u5728\u4efb\u4f55\u5730\u65b9\u8c03\u7528\uff1b<code>wait()<\/code> \u5fc5\u987b\u4e0e <code>synchronized<\/code> \u914d\u5957\u4f7f\u7528\u3002<\/li>\n<li><strong>\u662f\u5426\u9700\u8981\u5524\u9192\u4e0d\u540c<\/strong>\uff1a<code>sleep()<\/code> \u8d85\u65f6\u540e\u81ea\u52a8\u5524\u9192\uff1b\u65e0\u53c2 <code>wait()<\/code> \u9700\u8981\u88ab <code>notify()<\/code> \u6216 <code>notifyAll()<\/code> \u5524\u9192\u3002<\/li>\n<li><strong>\u4f7f\u7528\u76ee\u7684\u4e0d\u540c<\/strong>\uff1a<code>sleep()<\/code> \u7528\u4e8e\u5f53\u524d\u7ebf\u7a0b\u4f11\u7720\u6216\u8f6e\u8be2\u6682\u505c\uff1b<code>wait()<\/code> \u7528\u4e8e\u591a\u7ebf\u7a0b\u4e4b\u95f4\u7684\u901a\u4fe1\u3002<\/li>\n<li><strong>\u4e0a\u4e0b\u6587\u5207\u6362\u4e0d\u540c<\/strong>\uff1a<code>sleep()<\/code> <strong>\u4e00\u5b9a\u4f1a<\/strong>\u8ba9\u51fa CPU \u5e76\u5f3a\u5236\u5207\u6362\u4e0a\u4e0b\u6587\uff1b<code>wait()<\/code> <strong>\u4e0d\u4e00\u5b9a\u4f1a<\/strong>\u5207\u6362\u4e0a\u4e0b\u6587\uff0c\u56e0\u4e3a\u53ef\u80fd\u9a6c\u4e0a\u88ab\u5524\u9192\u5e76\u91cd\u65b0\u83b7\u53d6 CPU\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001yield() \u7684\u7406\u89e3<\/h3>\n<ol start=\"10\">\n<li><code>yield()<\/code> \u6267\u884c\u540e\uff0c\u7ebf\u7a0b\u4ece\u8fd0\u884c\u72b6\u6001<strong>\u8fdb\u5165\u5c31\u7eea\u72b6\u6001<\/strong>\uff08\u4e0d\u662f\u963b\u585e\u72b6\u6001\uff09\uff0c\u91ca\u653e CPU \u6267\u884c\u6743\u4f46\u4fdd\u7559\u6267\u884c\u8d44\u683c\uff0c\u4e0b\u6b21 CPU \u8c03\u5ea6\u65f6\u53ef\u80fd\u7ee7\u7eed\u8fd0\u884c\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001join() \u7684\u7406\u89e3<\/h3>\n<ol start=\"11\">\n<li><code>join()<\/code> \u662f\u8ba9\u5f53\u524d\u7ebf\u7a0b\u8fdb\u5165<strong>\u963b\u585e\u72b6\u6001<\/strong>\uff0c\u7b49\u5f85\u88ab\u8c03\u7528\u7684\u7ebf\u7a0b\u6267\u884c\u5b8c\u6bd5\u540e\u518d\u7ee7\u7eed\u6267\u884c\u5f53\u524d\u7ebf\u7a0b\u3002<\/li>\n<li><code>join()<\/code> \u7684\u5178\u578b\u7528\u6cd5\uff1a\u5728 B \u7ebf\u7a0b\u4e2d\u8c03\u7528 A \u7ebf\u7a0b\u7684 <code>join()<\/code>\uff0c\u5219 <strong>B \u7ebf\u7a0b\u963b\u585e<\/strong>\uff0c\u76f4\u5230 A \u7ebf\u7a0b\u6267\u884c\u5b8c\uff0cB \u624d\u7ee7\u7eed\u6267\u884c\u3002<\/li>\n<li>\u4f7f\u7528 <code>join()<\/code> \u524d\u5fc5\u987b\u5148\u8c03\u7528 <code>start()<\/code> \u542f\u52a8\u7ebf\u7a0b\uff0c\u5426\u5219\u65e0\u6548\u3002<\/li>\n<li>\u793a\u4f8b\uff1a\u5728 <code>main<\/code> \u7ebf\u7a0b\u4e2d\u8c03\u7528 <code>t1.join()<\/code>\uff0c\u5219 <code>main<\/code> \u7ebf\u7a0b\u4f1a\u963b\u585e\uff0c\u76f4\u5230 <code>t1<\/code> \u6267\u884c\u5b8c\u624d\u4f1a\u6253\u5370 <code>main<\/code> \u7684\u5185\u5bb9\u3002<\/li>\n<\/ol>\n<h2>21-\u5bf9\u7ebf\u7a0b\u5b89\u5168\u7684\u7406\u89e3<\/h2>\n<hr \/>\n<ol>\n<li>\u6240\u8c13\u7684&#8221;\u7ebf\u7a0b\u5b89\u5168&#8221;\uff0c\u672c\u8d28\u4e0a\u6307\u7684\u662f<strong>\u5185\u5b58\u5b89\u5168<\/strong>\uff0c\u56e0\u4e3a\u7ebf\u7a0b\u672c\u8eab\u6ca1\u6709\u5b89\u4e0d\u5b89\u5168\u4e4b\u8bf4\uff0c\u5b89\u5168\u4e0e\u5426\u53d6\u51b3\u4e8e\u5185\u5b58\u662f\u5426\u88ab\u6b63\u786e\u8bbf\u95ee\u3002<\/li>\n<li>\u7ebf\u7a0b\u5b89\u5168\u7684\u4e13\u4e1a\u5b9a\u4e49\uff1a\u5f53\u591a\u4e2a\u7ebf\u7a0b\u8bbf\u95ee\u540c\u4e00\u4e2a\u5bf9\u8c61\uff08\u5806\u4e2d\u7684\u5171\u4eab\u5185\u5b58\uff09\uff0c\u65e0\u9700\u989d\u5916\u7684\u540c\u6b65\u63a7\u5236\u5c31\u80fd\u83b7\u5f97\u6b63\u786e\u7684\u7ed3\u679c\uff0c\u5219\u8be5\u5bf9\u8c61\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\u3002<\/li>\n<li>&#8220;\u6b63\u786e\u7684\u7ed3\u679c&#8221;\u6307\u7684\u662f\u591a\u7ebf\u7a0b\u6267\u884c\u7684\u7ed3\u679c\u4e0e\u5355\u7ebf\u7a0b\u6267\u884c\u7684\u7ed3\u679c\u4e00\u81f4\uff0c\u5373\u8fbe\u5230\u9884\u671f\u6548\u679c\u3002<\/li>\n<li><strong>\u5806\uff08Heap\uff09<\/strong> \u662f JVM \u7ba1\u7406\u7684\u5185\u5b58\u4e2d\u6700\u5927\u7684\u4e00\u5757\uff0c\u5728\u865a\u62df\u673a\u542f\u52a8\u65f6\u521b\u5efa\uff0c\u88ab\u6240\u6709\u7ebf\u7a0b\u5171\u4eab\uff0c\u6240\u6709\u5bf9\u8c61\u5b9e\u4f8b\u548c\u6570\u7ec4\u90fd\u5728\u5806\u4e2d\u5206\u914d\u3002<\/li>\n<li>\u5728\u64cd\u4f5c\u7cfb\u7edf\u5c42\u9762\uff0c\u5806\u662f\u8fdb\u7a0b\u521d\u59cb\u5316\u65f6\u5206\u914d\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u8fdb\u7a0b\u5185\u7684\u6240\u6709\u7ebf\u7a0b\u5171\u4eab\u8be5\u5806\u3002<\/li>\n<li>\u6b63\u662f\u56e0\u4e3a\u5806\u662f\u591a\u4e2a\u7ebf\u7a0b\u5171\u4eab\u7684\u5185\u5b58\u533a\u57df\uff0c\u5f53\u591a\u7ebf\u7a0b\u5e76\u53d1\u64cd\u4f5c\u5806\u4e2d\u7684\u540c\u4e00\u5bf9\u8c61\u65f6\uff0c\u5c31\u53ef\u80fd\u51fa\u73b0\u7ed3\u679c\u4e0d\u4e00\u81f4\u7684\u95ee\u9898\uff0c\u8fd9\u5c31\u662f\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\u7684\u6839\u6e90\u3002<\/li>\n<li><strong>\u6808\uff08Stack\uff09<\/strong> \u662f\u6bcf\u4e2a\u7ebf\u7a0b\u72ec\u6709\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u4fdd\u5b58\u7ebf\u7a0b\u7684\u8fd0\u884c\u72b6\u6001\u548c\u5c40\u90e8\u53d8\u91cf\uff0c\u5728\u7ebf\u7a0b\u542f\u52a8\u65f6\u521d\u59cb\u5316\u3002<\/li>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u7684\u6808\u4e92\u76f8\u72ec\u7acb\uff0c\u56e0\u6b64\u6808\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff0c\u4e0d\u5b58\u5728\u591a\u7ebf\u7a0b\u5e76\u53d1\u8bbf\u95ee\u7684\u95ee\u9898\u3002<\/li>\n<li>\u64cd\u4f5c\u7cfb\u7edf\u5728\u5207\u6362\u7ebf\u7a0b\u65f6\u4f1a\u81ea\u52a8\u5207\u6362\u5bf9\u5e94\u7684\u6808\u7a7a\u95f4\uff0c\u6808\u7684\u5206\u914d\u548c\u91ca\u653e\u65e0\u9700\u7a0b\u5e8f\u5458\u663e\u5f0f\u64cd\u4f5c\uff0c\u65b9\u6cd5\u6267\u884c\u5b8c\u6bd5\u6808\u5e27\u81ea\u52a8\u5f39\u51fa\u5e76\u56de\u6536\u3002<\/li>\n<li>\u4e3b\u6d41\u64cd\u4f5c\u7cfb\u7edf\u90fd\u662f\u591a\u4efb\u52a1\u7684\uff0c\u6bcf\u4e2a\u8fdb\u7a0b\u53ea\u80fd\u8bbf\u95ee\u5206\u914d\u7ed9\u81ea\u5df1\u7684\u5185\u5b58\u7a7a\u95f4\uff0c\u8fd9\u662f\u64cd\u4f5c\u7cfb\u7edf\u81ea\u8eab\u4fdd\u8bc1\u7684\u5b89\u5168\u9694\u79bb\u3002<\/li>\n<\/ol>\n<h2>22-Thread\u548cRunnable<\/h2>\n<hr \/>\n<ol>\n<li><code>Thread<\/code> \u662f\u4e00\u4e2a\u7c7b\uff0c<code>Runnable<\/code> \u662f\u4e00\u4e2a\u63a5\u53e3\uff0c<code>Thread<\/code> \u672c\u8eab\u5b9e\u73b0\u4e86 <code>Runnable<\/code> \u63a5\u53e3\u3002<\/li>\n<li>\u4e24\u8005\u7684\u6838\u5fc3\u533a\u522b\u662f\uff1aJava \u53ea\u80fd\u5355\u7ee7\u627f\u4f46\u53ef\u4ee5\u591a\u5b9e\u73b0\uff0c\u56e0\u6b64\u7528 <code>Runnable<\/code> \u66f4\u7075\u6d3b\uff0c\u800c <code>Thread<\/code> \u53d7\u9650\u4e8e\u5355\u7ee7\u627f\u3002<\/li>\n<li>\u7f51\u7edc\u4e0a\u6d41\u4f20\u7684&#8221;<code>Thread<\/code> \u5bf9\u5171\u4eab\u53d8\u91cf\u64cd\u4f5c\u4e0d\u53cb\u597d\uff0c<code>Runnable<\/code> \u66f4\u53cb\u597d&#8221;\u7684\u8bf4\u6cd5\u662f<strong>\u9519\u8bef<\/strong>\u7684\uff0c\u4e24\u8005\u5bf9\u5171\u4eab\u8d44\u6e90\u7684\u64cd\u4f5c\u80fd\u529b\u6ca1\u6709\u672c\u8d28\u533a\u522b\uff0c\u95ee\u9898\u5728\u4e8e\u4f7f\u7528\u65b9\u5f0f\u3002<\/li>\n<li>\u9519\u8bef\u793a\u4f8b\uff1a\u7528\u4e24\u4e2a\u72ec\u7acb\u7684 <code>Thread<\/code> \u5b9e\u4f8b\u5404\u6301\u6709\u4e00\u4e2a\u72ec\u7acb\u7684 <code>ticket<\/code> \u53d8\u91cf\uff08\u975e static\uff09\uff0c\u6bcf\u4e2a\u5b9e\u4f8b\u5404\u6709 5 \u5f20\u7968\uff0c\u7ed3\u679c\u81ea\u7136\u4f1a\u5356\u51fa\u4e24\u500d\u7968\u6570\u3002<\/li>\n<li>\u6b63\u786e\u793a\u4f8b\uff1a\u5982\u679c\u8ba9\u591a\u4e2a <code>Thread<\/code> \u5171\u7528\u540c\u4e00\u4e2a <code>Runnable<\/code> \u5b9e\u4f8b\uff0c\u5219\u6240\u6709\u7ebf\u7a0b\u5171\u4eab\u540c\u4e00\u4e2a <code>ticket<\/code> \u53d8\u91cf\uff0c\u7ed3\u679c\u624d\u6b63\u786e\u3002<\/li>\n<li>\u771f\u6b63\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u7684\u65b9\u5f0f\u662f\u4f7f\u7528 <code>static<\/code> \u53d8\u91cf\u52a0 <code>synchronized<\/code> \u9501\uff0c\u800c\u4e0d\u662f\u4f9d\u8d56\u9009\u62e9 <code>Thread<\/code> \u8fd8\u662f <code>Runnable<\/code>\u3002<\/li>\n<li>\u4f7f\u7528\u4e0a\u7684\u5efa\u8bae\uff1a\u5982\u679c\u53ea\u662f\u7b80\u5355\u5730\u6267\u884c\u4e00\u4e2a\u4efb\u52a1\uff0c\u7528 <code>Runnable<\/code> \u66f4\u7b80\u5355\u8f7b\u91cf\uff1b\u5982\u679c\u9700\u8981\u590d\u6742\u7684\u7ebf\u7a0b\u64cd\u4f5c\uff08\u5982\u4e30\u5bcc\u7684 API \u529f\u80fd\uff09\uff0c\u7528 <code>Thread<\/code> \u66f4\u5408\u9002\u3002<\/li>\n<li>\u65e0\u8bba\u7528\u54ea\u79cd\u65b9\u5f0f\uff0c\u6700\u7ec8\u90fd\u5fc5\u987b\u5c06 <code>Runnable<\/code> \u5b9e\u4f8b\u4f20\u7ed9 <code>Thread<\/code> \u5bf9\u8c61\u624d\u80fd\u542f\u52a8\u7ebf\u7a0b\u3002<\/li>\n<\/ol>\n<h2>23-\u8bf4\u8bf4\u4f60\u5bf9\u5b88\u62a4\u7ebf\u7a0b\u7684\u7406\u89e3<\/h2>\n<hr \/>\n<ol>\n<li>Java \u4e2d\u53ea\u6709\u4e24\u79cd\u7ebf\u7a0b\uff1a<strong>\u5b88\u62a4\u7ebf\u7a0b\uff08Daemon Thread\uff09<\/strong>\u548c<strong>\u7528\u6237\u7ebf\u7a0b\uff08User Thread\uff0c\u4e5f\u79f0\u975e\u5b88\u62a4\u7ebf\u7a0b\uff09<\/strong>\u3002<\/li>\n<li>\u5b88\u62a4\u7ebf\u7a0b\u662f\u4e3a\u6240\u6709\u7684\u975e\u5b88\u62a4\u7ebf\u7a0b\uff08\u7528\u6237\u7ebf\u7a0b\uff09\u63d0\u4f9b\u670d\u52a1\u7684\uff0c\u5b83\u662f\u6574\u4e2a JVM \u4e2d\u6240\u6709\u7528\u6237\u7ebf\u7a0b\u7684&#8221;\u4fdd\u59c6&#8221;\uff0c\u800c\u4e0d\u662f\u4e13\u5c5e\u4e8e\u67d0\u4e00\u4e2a\u7ebf\u7a0b\u3002<\/li>\n<li>\u5b88\u62a4\u7ebf\u7a0b\u7684\u751f\u6b7b\u65e0\u5173\u7d27\u8981\uff1a\u5f53\u6240\u6709\u7528\u6237\u7ebf\u7a0b\u5168\u90e8\u7ed3\u675f\u65f6\uff0cJVM \u4f1a\u76f4\u63a5\u7ec8\u6b62\u5b88\u62a4\u7ebf\u7a0b\uff0c\u4e0d\u7ba1\u5b83\u662f\u5426\u6267\u884c\u5b8c\u6bd5\u3002<\/li>\n<li>\u5b88\u62a4\u7ebf\u7a0b\u4e0d\u80fd\u7528\u4e8e\u6267\u884c\u91cd\u8981\u7684\u4e1a\u52a1\u903b\u8f91\uff08\u5982\u6587\u4ef6\u64cd\u4f5c\u3001\u6570\u636e\u5e93\u66f4\u65b0\u3001IO \u8bfb\u5199\u7b49\uff09\uff0c\u56e0\u4e3a\u5b83\u968f\u65f6\u53ef\u80fd\u88ab\u4e2d\u65ad\uff0c\u5bfc\u81f4\u64cd\u4f5c\u4e0d\u5b8c\u6574\u3002<\/li>\n<li>\u5b88\u62a4\u7ebf\u7a0b\u7684\u5178\u578b\u5e94\u7528\u573a\u666f\u662f<strong>\u5783\u573e\u56de\u6536\uff08GC\uff09\u7ebf\u7a0b<\/strong>\uff0c\u5f53\u6240\u6709\u7528\u6237\u7ebf\u7a0b\u9000\u51fa\u3001\u4e0d\u518d\u4ea7\u751f\u5783\u573e\u65f6\uff0cGC \u7ebf\u7a0b\u4e5f\u4f1a\u81ea\u52a8\u7ec8\u6b62\u3002<\/li>\n<li>\u5b88\u62a4\u7ebf\u7a0b\u9002\u5408\u7528\u4e8e\u9700\u8981\u5728\u7a0b\u5e8f\u7ed3\u675f\u65f6\u80fd\u591f\u7acb\u523b\u5173\u95ed\u7684\u540e\u53f0\u652f\u6301\u670d\u52a1\u3002<\/li>\n<li>\u8bbe\u7f6e\u5b88\u62a4\u7ebf\u7a0b\u7684\u65b9\u6cd5\uff1a\u8c03\u7528 <code>thread.setDaemon(true)<\/code>\uff0c\u4f46<strong>\u5fc5\u987b\u5728 <code>start()<\/code> \u65b9\u6cd5\u4e4b\u524d\u8c03\u7528<\/strong>\uff0c\u5426\u5219\u4f1a\u629b\u51fa <code>IllegalThreadStateException<\/code>\u3002<\/li>\n<li>\u5b88\u62a4\u7ebf\u7a0b\u4e2d\u521b\u5efa\u7684\u5b50\u7ebf\u7a0b\u9ed8\u8ba4\u4e5f\u662f\u5b88\u62a4\u7ebf\u7a0b\u3002<\/li>\n<li>Java \u81ea\u5e26\u7684\u7ebf\u7a0b\u6c60\uff08\u5982 <code>ThreadPoolExecutor<\/code>\uff09\u4f1a\u5c06\u4f20\u5165\u7684\u5b88\u62a4\u7ebf\u7a0b\u8f6c\u6362\u4e3a\u7528\u6237\u7ebf\u7a0b\uff0c\u56e0\u6b64\u4f7f\u7528\u7ebf\u7a0b\u6c60\u65f6\u65e0\u6cd5\u901a\u8fc7\u8bbe\u7f6e\u5b88\u62a4\u7ebf\u7a0b\u6765\u5b9e\u73b0\u540e\u53f0\u8fd0\u884c\u3002<\/li>\n<\/ol>\n<h2>24-ThreadLocal\u7684\u539f\u7406\u7684\u4f7f\u7528\u573a\u666f<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ThreadLocal \u7684\u6570\u636e\u7ed3\u6784<\/h3>\n<ol>\n<li>\u6bcf\u4e2a <code>Thread<\/code> \u5bf9\u8c61\u5185\u90e8\u90fd\u6709\u4e00\u4e2a <code>ThreadLocalMap<\/code> \u7c7b\u578b\u7684\u6210\u5458\u53d8\u91cf\uff08\u540d\u4e3a <code>threadLocals<\/code>\uff09\uff0c\u7528\u4e8e\u5b58\u50a8\u8be5\u7ebf\u7a0b\u6240\u6709\u7684 <code>ThreadLocal<\/code> \u6570\u636e\u3002<\/li>\n<li><code>ThreadLocalMap<\/code> \u662f <code>ThreadLocal<\/code> \u7684\u5185\u90e8\u7c7b\uff0c\u5176\u672c\u8d28\u662f\u4e00\u4e2a\u7c7b\u4f3c\u4e8e HashMap \u7684\u5bb9\u5668\u3002<\/li>\n<li><code>ThreadLocalMap<\/code> \u4e2d\u5b58\u50a8\u7684\u662f <code>Entry<\/code>\uff08\u952e\u503c\u5bf9\uff09\uff0c\u5176\u4e2d <strong>key \u662f <code>ThreadLocal<\/code> \u5bf9\u8c61\u672c\u8eab<\/strong>\uff0c<strong>value \u662f\u6211\u4eec\u8981\u5b58\u50a8\u7684\u7ebf\u7a0b\u53d8\u91cf\u503c<\/strong>\u3002<\/li>\n<li><code>Entry<\/code> \u7ee7\u627f\u81ea <code>WeakReference<\/code>\uff08\u5f31\u5f15\u7528\uff09\uff0ckey\uff08\u5373 <code>ThreadLocal<\/code> \u5bf9\u8c61\uff09\u662f\u5f31\u5f15\u7528\u7684\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001ThreadLocal \u7684 set() \u548c get() \u539f\u7406<\/h3>\n<ol start=\"5\">\n<li>\u6267\u884c <code>set()<\/code> \u65b9\u6cd5\u65f6\uff0c\u5148\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u5bf9\u8c61\uff0c\u518d\u4ece\u5f53\u524d\u7ebf\u7a0b\u4e2d\u53d6\u51fa <code>ThreadLocalMap<\/code>\uff0c\u7136\u540e\u4ee5\u5f53\u524d <code>ThreadLocal<\/code> \u5bf9\u8c61\u4e3a key\uff0c\u5c06\u503c\u5b58\u5165 Map \u4e2d\u3002<\/li>\n<li>\u6267\u884c <code>get()<\/code> \u65b9\u6cd5\u65f6\uff0c\u540c\u6837\u5148\u83b7\u53d6\u5f53\u524d\u7ebf\u7a0b\u5bf9\u8c61\uff0c\u53d6\u51fa <code>ThreadLocalMap<\/code>\uff0c\u518d\u4ee5\u5f53\u524d <code>ThreadLocal<\/code> \u5bf9\u8c61\u4e3a key \u83b7\u53d6\u5bf9\u5e94\u7684\u503c\u3002<\/li>\n<li>\u6bcf\u4e2a\u7ebf\u7a0b\u90fd\u6709\u81ea\u5df1\u7684 <code>ThreadLocalMap<\/code>\uff0c\u7ebf\u7a0b\u4e4b\u95f4\u4e92\u4e0d\u5f71\u54cd\uff0c\u56e0\u6b64 <strong><code>ThreadLocal<\/code> \u5929\u7136\u662f\u7ebf\u7a0b\u5b89\u5168\u7684<\/strong>\uff0c\u65e0\u9700\u540c\u6b65\u673a\u5236\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001ThreadLocal \u7684\u5f31\u5f15\u7528\u4e0e\u5185\u5b58\u6cc4\u6f0f<\/h3>\n<ol start=\"8\">\n<li><code>Entry<\/code> \u4e2d\u7684 key \u662f\u5f31\u5f15\u7528\uff0c\u5f53 <code>ThreadLocal<\/code> \u5bf9\u8c61\u6ca1\u6709\u5f3a\u5f15\u7528\u6307\u5411\u5b83\u65f6\uff0c\u4f1a\u88ab\u5783\u573e\u56de\u6536\u5668\u56de\u6536\uff0c\u6b64\u65f6 key \u53d8\u4e3a <code>null<\/code>\u3002<\/li>\n<li>\u4f46\u5982\u679c\u7ebf\u7a0b\u4e00\u76f4\u5b58\u6d3b\uff08\u5982\u7ebf\u7a0b\u6c60\u4e2d\u7684\u7ebf\u7a0b\uff09\uff0ckey \u4e3a <code>null<\/code> \u7684 <code>Entry<\/code> \u65e0\u6cd5\u88ab\u81ea\u52a8\u6e05\u9664\uff0c\u53ef\u80fd\u5bfc\u81f4<strong>\u5185\u5b58\u6cc4\u6f0f<\/strong>\uff0c\u56e0\u6b64\u4f7f\u7528\u5b8c <code>ThreadLocal<\/code> \u540e\u5e94\u4e3b\u52a8\u8c03\u7528 <code>remove()<\/code> \u65b9\u6cd5\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001ThreadLocal \u7684\u4f7f\u7528\u573a\u666f<\/h3>\n<ol start=\"10\">\n<li><strong>\u8de8\u5c42\u4f20\u9012\u53c2\u6570<\/strong>\uff1a\u5728 Controller \u2192 Service \u2192 DAO \u7b49\u591a\u5c42\u4e4b\u95f4\u4f20\u9012\u53c2\u6570\u65f6\uff0c\u4f7f\u7528 <code>ThreadLocal<\/code> \u53ef\u4ee5\u907f\u514d\u6bcf\u4e2a\u65b9\u6cd5\u90fd\u663e\u5f0f\u52a0\u5f62\u53c2\uff0c\u7b80\u5316\u4ee3\u7801\u3002<\/li>\n<li><strong>\u7ebf\u7a0b\u95f4\u6570\u636e\u9694\u79bb<\/strong>\uff1a\u53ea\u6709\u5f53\u524d\u7ebf\u7a0b\u80fd\u8bbf\u95ee\u81ea\u5df1 <code>ThreadLocalMap<\/code> \u4e2d\u7684\u6570\u636e\uff0c\u5176\u4ed6\u7ebf\u7a0b\u65e0\u6cd5\u8bbf\u95ee\uff0c\u5b9e\u73b0\u6570\u636e\u9694\u79bb\u3002<\/li>\n<li><strong>\u4e8b\u52a1\u7ba1\u7406<\/strong>\uff1aSpring \u6846\u67b6\u5c06\u6570\u636e\u5e93\u8fde\u63a5\uff08JDBC Connection\uff09\u548c\u4e8b\u52a1\u4fe1\u606f\u5b58\u50a8\u5728 <code>ThreadLocal<\/code> \u4e2d\uff0c\u56e0\u4e3a\u4e8b\u52a1\u662f\u4e0e\u5f53\u524d\u7ebf\u7a0b\u7ed1\u5b9a\u7684\uff0c\u540c\u4e00\u7ebf\u7a0b\u4e2d\u7684\u5404\u4e2a\u65b9\u6cd5\u90fd\u53ef\u4ee5\u65b9\u4fbf\u5730\u83b7\u53d6\u8fde\u63a5\u3002<\/li>\n<li>\u7c7b\u4f3c\u573a\u666f\u8fd8\u5305\u62ec\uff1a\u6570\u636e\u5e93\u8fde\u63a5\u3001Session \u4f1a\u8bdd\u7b49\u7ebf\u7a0b\u7ea7\u522b\u7684\u8d44\u6e90\uff0c\u90fd\u9002\u5408\u653e\u5728 <code>ThreadLocal<\/code> \u4e2d\u7ba1\u7406\u3002<\/li>\n<\/ol>\n<h2>25-ThreadLocal\u5185\u5b58\u6cc4\u9732\u95ee\u9898\uff0c\u5982\u4f55\u907f\u514d<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5185\u5b58\u6cc4\u6f0f\u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>\u5185\u5b58\u6cc4\u6f0f<\/strong>\uff1a\u4e0d\u518d\u88ab\u4f7f\u7528\u7684\u5bf9\u8c61\u5360\u7528\u7684\u5185\u5b58\u65e0\u6cd5\u88ab JVM \u56de\u6536\uff0c\u8fd9\u79cd\u73b0\u8c61\u79f0\u4e3a\u5185\u5b58\u6cc4\u6f0f\u3002<\/li>\n<li>\u5355\u6b21\u5185\u5b58\u6cc4\u6f0f\u5f71\u54cd\u4e0d\u5927\uff0c\u4f46\u6301\u7eed\u7d2f\u79ef\u6700\u7ec8\u4f1a\u5bfc\u81f4 <strong>OOM\uff08\u5185\u5b58\u6ea2\u51fa\uff09<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5f3a\u5f15\u7528\u4e0e\u5f31\u5f15\u7528\u7684\u533a\u522b<\/h3>\n<ol start=\"3\">\n<li><strong>\u5f3a\u5f15\u7528<\/strong>\uff1a\u901a\u8fc7 <code>new<\/code> \u5173\u952e\u5b57\u521b\u5efa\u7684\u5bf9\u8c61\u90fd\u662f\u5f3a\u5f15\u7528\uff0cJVM \u5b81\u613f\u629b\u51fa OOM \u4e5f\u4e0d\u4f1a\u56de\u6536\u5f3a\u5f15\u7528\u5bf9\u8c61\uff0c\u9664\u975e\u624b\u52a8\u5c06\u5bf9\u8c61\u8d4b\u503c\u4e3a <code>null<\/code>\u3002<\/li>\n<li><strong>\u5f31\u5f15\u7528<\/strong>\uff1a\u901a\u8fc7 <code>WeakReference<\/code> \u521b\u5efa\u7684\u5bf9\u8c61\u4e3a\u5f31\u5f15\u7528\uff0c\u53ea\u8981 GC \u6267\u884c\uff0c\u65e0\u8bba\u5185\u5b58\u662f\u5426\u5145\u8db3\uff0c\u5f31\u5f15\u7528\u5bf9\u8c61\u90fd\u4f1a\u88ab\u56de\u6536\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001ThreadLocal \u5185\u5b58\u6cc4\u6f0f\u7684\u539f\u56e0<\/h3>\n<ol start=\"5\">\n<li><code>ThreadLocalMap<\/code> \u4e2d\u7684 <code>Entry<\/code> \u7684 <strong>key\uff08\u5373 <code>ThreadLocal<\/code> \u5bf9\u8c61\uff09\u662f\u5f31\u5f15\u7528<\/strong>\uff0cvalue \u662f\u5f3a\u5f15\u7528\u3002<\/li>\n<li>\u5f53\u5916\u90e8\u5bf9 <code>ThreadLocal<\/code> \u5bf9\u8c61\u7684\u5f3a\u5f15\u7528\u88ab\u7f6e\u4e3a <code>null<\/code> \u540e\uff0cGC \u4f1a\u56de\u6536 key\uff08\u5f31\u5f15\u7528\uff09\uff0c\u6b64\u65f6 key \u53d8\u4e3a <code>null<\/code>\uff0c\u4f46 value \u4ecd\u7136\u4ee5\u5f3a\u5f15\u7528\u65b9\u5f0f\u5b58\u5728\u4e8e <code>Entry<\/code> \u4e2d\u3002<\/li>\n<li>\u5f53 key \u4e3a <code>null<\/code> \u65f6\uff0cvalue \u65e0\u6cd5\u88ab\u8bbf\u95ee\u5230\uff0c\u4f46\u5982\u679c\u5f53\u524d\u7ebf\u7a0b\u4e00\u76f4\u5b58\u6d3b\uff08\u5982\u7ebf\u7a0b\u6c60\u4e2d\u7684\u7ebf\u7a0b\uff09\uff0cvalue \u7684\u5f3a\u5f15\u7528\u94fe\u5c31\u4e00\u76f4\u5b58\u5728\uff0c\u5bfc\u81f4\u65e0\u6cd5\u56de\u6536\uff0c\u8fd9\u5c31\u662f <code>ThreadLocal<\/code> \u5185\u5b58\u6cc4\u6f0f\u7684\u6839\u6e90\u3002<\/li>\n<li>\u53ea\u8981\u7ebf\u7a0b\u4e0d\u7ed3\u675f\uff0c<code>ThreadLocalMap<\/code> \u5c31\u4f1a\u4e00\u76f4\u5b58\u6d3b\uff0c\u5176\u5185\u90e8\u7684 <code>null<\/code> key \u5bf9\u5e94\u7684 value \u5c31\u65e0\u6cd5\u88ab\u56de\u6536\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4e3a\u4ec0\u4e48 key \u8bbe\u8ba1\u4e3a\u5f31\u5f15\u7528<\/h3>\n<ol start=\"9\">\n<li>\u5982\u679c key \u8bbe\u8ba1\u4e3a\u5f3a\u5f15\u7528\uff0c\u5373\u4f7f\u5916\u90e8\u5c06 <code>ThreadLocal<\/code> \u7f6e\u4e3a <code>null<\/code>\uff0c<code>ThreadLocalMap<\/code> \u4ecd\u7136\u5f3a\u5f15\u7528\u7740\u5b83\uff0c<code>ThreadLocal<\/code> \u6c38\u8fdc\u65e0\u6cd5\u56de\u6536\uff0c\u5185\u5b58\u6cc4\u6f0f\u66f4\u4e25\u91cd\u3002<\/li>\n<li>\u4f7f\u7528\u5f31\u5f15\u7528\u540e\uff0ckey \u53ef\u4ee5\u88ab GC \u56de\u6536\u53d8\u4e3a <code>null<\/code>\uff0c\u53ea\u8981\u540e\u7eed\u8c03\u7528 <code>set()<\/code>\u3001<code>get()<\/code> \u6216 <code>remove()<\/code> \u65b9\u6cd5\uff0c<code>ThreadLocalMap<\/code> \u4f1a\u81ea\u52a8\u6e05\u7406 <code>null<\/code> key \u5bf9\u5e94\u7684 value\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u5982\u4f55\u907f\u514d ThreadLocal \u5185\u5b58\u6cc4\u6f0f<\/h3>\n<ol start=\"11\">\n<li><strong>\u6bcf\u6b21\u4f7f\u7528\u5b8c <code>ThreadLocal<\/code> \u540e\u5fc5\u987b\u624b\u52a8\u8c03\u7528 <code>remove()<\/code> \u65b9\u6cd5<\/strong>\uff0c\u6e05\u9664\u5f53\u524d\u7ebf\u7a0b\u4e2d\u7684 <code>ThreadLocalMap<\/code> \u6570\u636e\uff0c\u8fd9\u662f\u6700\u6838\u5fc3\u7684\u907f\u514d\u65b9\u5f0f\u3002<\/li>\n<li>\u5c06 <code>ThreadLocal<\/code> \u53d8\u91cf\u5b9a\u4e49\u4e3a <code>private static<\/code>\uff0c\u4f7f\u5176\u6301\u6709\u5f3a\u5f15\u7528\uff0c\u4e0d\u4f1a\u8f7b\u6613\u88ab GC \u56de\u6536\uff0c\u53ef\u4ee5\u968f\u65f6\u901a\u8fc7\u5b83\u8bbf\u95ee\u5e76\u6e05\u7406\u5bf9\u5e94\u7684 value\u3002<\/li>\n<li>\u7efc\u5408\u4ee5\u4e0a\u4e24\u70b9\uff1a\u5c06 <code>ThreadLocal<\/code> \u5b9a\u4e49\u4e3a <code>private static<\/code>\uff0c\u5e76\u5728\u6bcf\u6b21\u4f7f\u7528\u540e\u4e3b\u52a8\u8c03\u7528 <code>remove()<\/code> \u65b9\u6cd5\uff0c\u5373\u53ef\u6709\u6548\u907f\u514d\u5185\u5b58\u6cc4\u6f0f\u3002<\/li>\n<\/ol>\n<h2>26-\u5e76\u53d1\u3001\u5e76\u884c\u3001\u4e32\u884c<\/h2>\n<hr \/>\n<ol>\n<li><strong>\u4e32\u884c<\/strong>\uff1a\u591a\u4e2a\u4efb\u52a1\u6309\u987a\u5e8f\u4e00\u4e2a\u63a5\u4e00\u4e2a\u6267\u884c\uff0c\u524d\u4e00\u4e2a\u4efb\u52a1\u672a\u5b8c\u6210\uff0c\u540e\u4e00\u4e2a\u4efb\u52a1\u53ea\u80fd\u7b49\u5f85\u3002<\/li>\n<li><strong>\u5e76\u884c<\/strong>\uff1a\u591a\u4e2a\u4efb\u52a1\u5728\u540c\u4e00\u65f6\u95f4\u70b9\u540c\u65f6\u6267\u884c\uff0c\u4e92\u4e0d\u5e72\u6270\uff08\u901a\u5e38\u4f9d\u8d56\u4e8e\u591a\u6838 CPU\uff09\u3002<\/li>\n<li><strong>\u5e76\u53d1<\/strong>\uff1a\u591a\u4e2a\u4efb\u52a1\u4ea4\u66ff\u6267\u884c\uff0c\u4efb\u52a1\u4e4b\u95f4\u53ef\u4ee5\u76f8\u4e92\u7a7f\u63d2\uff0c\u4f46\u5728\u540c\u4e00\u65f6\u95f4\u70b9\u4e0a\u53ea\u6709\u4e00\u4e2a\u4efb\u52a1\u5728\u8fd0\u884c\u3002<\/li>\n<li>\u5e76\u53d1\u4e0e\u4e32\u884c\u7684\u533a\u522b\uff1a\u4e32\u884c\u662f\u4e00\u4e2a\u4efb\u52a1\u5f7b\u5e95\u6267\u884c\u5b8c\u624d\u6267\u884c\u4e0b\u4e00\u4e2a\uff1b\u5e76\u53d1\u662f\u4efb\u52a1\u4ea4\u66ff\u6267\u884c\uff0c\u6267\u884c\u5230\u4e00\u534a\u53ef\u4ee5\u5207\u6362\u5230\u53e6\u4e00\u4e2a\u4efb\u52a1\u518d\u5207\u56de\u6765\u3002<\/li>\n<li>\u5bf9\u4e8e\u5355\u6838 CPU \u800c\u8a00\uff0c\u5e76\u53d1\u672c\u8d28\u4e0a\u662f\u4e32\u884c\u6267\u884c\uff0c\u53ea\u662f\u901a\u8fc7\u65f6\u95f4\u7247\u8f6e\u8f6c\u5b9e\u73b0\u4e86\u4ea4\u66ff\u8fd0\u884c\u3002<\/li>\n<\/ol>\n<h2>27-\u5e76\u53d1\u4e09\u5927\u7279\u6027<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u539f\u5b50\u6027\uff08Atomicity\uff09<\/h3>\n<ol>\n<li><strong>\u539f\u5b50\u6027<\/strong>\uff1a\u4e00\u4e2a\u64cd\u4f5c\u6216\u591a\u4e2a\u64cd\u4f5c\u8981\u4e48\u5168\u90e8\u6267\u884c\u4e14\u6267\u884c\u8fc7\u7a0b\u4e0d\u88ab\u4e2d\u65ad\uff0c\u8981\u4e48\u5168\u90e8\u4e0d\u6267\u884c\uff0c\u662f\u4e0d\u53ef\u5206\u5272\u7684\u6574\u4f53\u3002<\/li>\n<li>\u4ee5 <code>i++<\/code> \u4e3a\u4f8b\uff0c\u5b83\u5b9e\u9645\u5bf9\u5e94\u56db\u6b65\u64cd\u4f5c\uff1a\u2460\u4ece\u4e3b\u5b58\u8bfb\u53d6 i \u5230\u5de5\u4f5c\u5185\u5b58 \u2192 \u2461CPU \u6267\u884c i+1 \u8fd0\u7b97 \u2192 \u2462\u5c06\u7ed3\u679c\u5199\u56de\u5de5\u4f5c\u5185\u5b58 \u2192 \u2463\u5c06\u5de5\u4f5c\u5185\u5b58\u7684\u503c\u5237\u56de\u4e3b\u5b58\uff08\u7b2c\u2463\u6b65\u7531\u64cd\u4f5c\u7cfb\u7edf\u51b3\u5b9a\u65f6\u673a\uff09\u3002<\/li>\n<li>\u5982\u679c\u4e0d\u4fdd\u8bc1\u539f\u5b50\u6027\uff0cCPU \u53ef\u80fd\u5728\u6267\u884c <code>i++<\/code> \u7684\u4e2d\u95f4\u6b65\u9aa4\u65f6\u53d1\u751f\u7ebf\u7a0b\u5207\u6362\uff0c\u5bfc\u81f4\u591a\u4e2a\u7ebf\u7a0b\u5404\u81ea\u8bfb\u5230\u76f8\u540c\u7684\u521d\u59cb\u503c\uff0c\u6700\u7ec8\u7ed3\u679c\u9519\u8bef\uff08\u5982\u4e24\u4e2a\u7ebf\u7a0b\u5404\u52a0\u4e00\u6b21\uff0c\u7ed3\u679c\u5374\u53ea\u52a0\u4e86\u4e00\u6b21\uff09\u3002<\/li>\n<li>\u4fdd\u8bc1\u539f\u5b50\u6027\u610f\u5473\u7740\u6267\u884c <code>i++<\/code> \u7684\u524d\u4e09\u6b65\u64cd\u4f5c\u65f6\uff0cCPU \u4e0d\u4f1a\u53d1\u751f\u7ebf\u7a0b\u5207\u6362\uff0c\u5fc5\u987b\u5168\u90e8\u6267\u884c\u5b8c\u624d\u5141\u8bb8\u5207\u6362\u3002<\/li>\n<li><code>i++<\/code> \u5728\u5e76\u53d1\u4e0b\u7ebf\u7a0b\u4e0d\u5b89\u5168\uff0c\u5c31\u662f\u56e0\u4e3a\u5176\u64cd\u4f5c\u5206\u591a\u6b65\u6267\u884c\uff0c\u65e0\u6cd5\u4fdd\u8bc1\u539f\u5b50\u6027\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u53ef\u89c1\u6027\uff08Visibility\uff09<\/h3>\n<ol start=\"6\">\n<li><strong>\u53ef\u89c1\u6027<\/strong>\uff1a\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u4fee\u6539\u4e86\u5171\u4eab\u53d8\u91cf\u7684\u503c\uff0c\u5176\u4ed6\u7ebf\u7a0b\u80fd\u591f\u7acb\u5373\u770b\u5230\u4fee\u6539\u540e\u7684\u6700\u65b0\u503c\uff0c\u800c\u4e0d\u662f\u8bfb\u5230\u8fc7\u671f\u7684\u7f13\u5b58\u526f\u672c\u3002<\/li>\n<li>\u64cd\u4f5c\u7cfb\u7edf\u5e95\u5c42\u901a\u8fc7<strong>\u603b\u7ebf\u9501\u5b9a<\/strong>\u548c<strong>MESI\uff08\u7f13\u5b58\u4e00\u81f4\u6027\u534f\u8bae\uff09<\/strong> \u6765\u4fdd\u8bc1\u53ef\u89c1\u6027\u3002<\/li>\n<li>\u7f13\u5b58\u4e00\u81f4\u6027\u534f\u8bae\u4fdd\u8bc1\uff1a\u5f53\u4e00\u4e2a\u7ebf\u7a0b\u5c06\u4fee\u6539\u540e\u7684\u503c\u5199\u56de\u5de5\u4f5c\u5185\u5b58\u548c\u4e3b\u5b58\u65f6\uff0c\u5176\u4ed6\u7ebf\u7a0b\u5de5\u4f5c\u5185\u5b58\u4e2d\u7684\u5bf9\u5e94\u7f13\u5b58\u884c\u4f1a\u7acb\u5373\u5931\u6548\u3002<\/li>\n<li>\u4ec5\u4fdd\u8bc1\u53ef\u89c1\u6027\u4ecd\u4e0d\u80fd\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\uff1a\u56e0\u4e3a\u5176\u4ed6\u7ebf\u7a0b\u867d\u7136\u80fd\u770b\u5230\u53d8\u91cf\u5df2\u88ab\u4fee\u6539\uff0c\u4f46\u53ef\u80fd\u5df2\u7ecf\u5728\u81ea\u5df1\u7684\u7f13\u5b58\u4e2d\u5b8c\u6210\u4e86\u65e7\u503c\u7684\u8fd0\u7b97\uff0c\u7ed3\u679c\u4ecd\u53ef\u80fd\u9519\u8bef\u3002<\/li>\n<li>\u5728 <code>i++<\/code> \u573a\u666f\u4e2d\uff0c\u5fc5\u987b<strong>\u540c\u65f6\u4fdd\u8bc1\u539f\u5b50\u6027\u548c\u53ef\u89c1\u6027<\/strong>\uff08\u5373\u628a\u56db\u6b65\u64cd\u4f5c\u5408\u5e76\u4e3a\u4e00\u4e2a\u4e0d\u53ef\u4e2d\u65ad\u7684\u6574\u4f53\uff09\uff0c\u624d\u80fd\u5b9e\u73b0\u7ebf\u7a0b\u5b89\u5168\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u539f\u5b50\u6027 + \u53ef\u89c1\u6027\u7684\u5b9e\u8df5\u4f53\u73b0<\/h3>\n<ol start=\"11\">\n<li><code>AtomicInteger<\/code> \u7c7b\u901a\u8fc7 <strong><code>volatile<\/code>\uff08\u4fdd\u8bc1\u53ef\u89c1\u6027\u548c\u6709\u5e8f\u6027\uff09+ CAS\uff08\u4fdd\u8bc1\u539f\u5b50\u6027\uff09<\/strong> \u7684\u7ec4\u5408\uff0c\u5b9e\u73b0\u4e86 <code>i++<\/code> \u7684\u7ebf\u7a0b\u5b89\u5168\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u6709\u5e8f\u6027\uff08Ordering\uff09<\/h3>\n<ol start=\"12\">\n<li><strong>\u6709\u5e8f\u6027<\/strong>\uff1a\u6307\u7a0b\u5e8f\u6267\u884c\u987a\u5e8f\u53ef\u80fd\u548c\u4ee3\u7801\u7f16\u5199\u987a\u5e8f\u4e0d\u4e00\u81f4\uff0cJVM \u548c CPU \u4e3a\u4e86\u4f18\u5316\u6027\u80fd\u4f1a\u5bf9\u6307\u4ee4\u8fdb\u884c<strong>\u6307\u4ee4\u91cd\u6392<\/strong>\u3002<\/li>\n<li>\u6307\u4ee4\u91cd\u6392\u7684\u539f\u5219\uff1a\u5728<strong>\u5355\u7ebf\u7a0b<\/strong>\u73af\u5883\u4e0b\uff0c\u91cd\u6392\u540e\u4e0d\u4f1a\u6539\u53d8\u7a0b\u5e8f\u7684\u6267\u884c\u7ed3\u679c\uff08\u5373 as-if-serial \u8bed\u4e49\uff09\u3002<\/li>\n<li>\u6307\u4ee4\u91cd\u6392\u5728\u5355\u7ebf\u7a0b\u4e0b\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u5728\u591a\u7ebf\u7a0b\u4e0b\u53ef\u80fd\u4ea7\u751f\u95ee\u9898\uff1a\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c\u4e86\u90e8\u5206\u64cd\u4f5c\uff08\u5982\u5c06 flag \u8bbe\u4e3a true\uff09\uff0c\u53e6\u4e00\u4e2a\u7ebf\u7a0b\u7acb\u5373\u8bfb\u53d6\u8be5 flag \u5e76\u7ee7\u7eed\u6267\u884c\uff0c\u4f46\u524d\u4e00\u4e2a\u7ebf\u7a0b\u7684\u540e\u7eed\u64cd\u4f5c\uff08\u5982 a=2\uff09\u5c1a\u672a\u5b8c\u6210\uff0c\u5bfc\u81f4\u8bfb\u53d6\u5230\u9519\u8bef\u7684\u6570\u636e\u3002<\/li>\n<li>\u4fdd\u8bc1\u6709\u5e8f\u6027\u7684\u65b9\u5f0f\uff1a\u4f7f\u7528 <strong><code>synchronized<\/code> \u9501<\/strong>\uff08\u53ef\u540c\u65f6\u4fdd\u8bc1\u4e09\u5927\u7279\u6027\uff09\uff0c\u6216\u4f7f\u7528 <strong><code>volatile<\/code> \u5173\u952e\u5b57<\/strong>\u7981\u6b62\u6307\u4ee4\u91cd\u6392\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u4e09\u5927\u7279\u6027\u603b\u7ed3<\/h3>\n<ol start=\"16\">\n<li><code>synchronized<\/code> \u53ef\u4ee5\u540c\u65f6\u4fdd\u8bc1\u539f\u5b50\u6027\u3001\u53ef\u89c1\u6027\u548c\u6709\u5e8f\u6027\u4e09\u5927\u7279\u6027\u3002<\/li>\n<li><code>volatile<\/code> \u53ef\u4ee5\u4fdd\u8bc1\u53ef\u89c1\u6027\u548c\u6709\u5e8f\u6027\uff0c\u4f46<strong>\u4e0d\u80fd\u4fdd\u8bc1\u539f\u5b50\u6027<\/strong>\u3002<\/li>\n<li><code>final<\/code> \u5173\u952e\u5b57\u4e5f\u80fd\u4fdd\u8bc1\u53ef\u89c1\u6027\uff08\u4e00\u65e6\u8d4b\u503c\u540e\u6240\u6709\u7ebf\u7a0b\u53ef\u89c1\uff09\u3002<\/li>\n<\/ol>\n<h2>28-\u4e3a\u4ec0\u4e48\u4f7f\u7528\u7ebf\u7a0b\u6c60\uff0c\u53c2\u6570\u89e3\u91ca<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u4e3a\u4ec0\u4e48\u8981\u4f7f\u7528\u7ebf\u7a0b\u6c60<\/h3>\n<ol>\n<li><strong>\u964d\u4f4e\u8d44\u6e90\u6d88\u8017<\/strong>\uff1a\u7ebf\u7a0b\u7684\u521b\u5efa\u548c\u9500\u6bc1\u90fd\u662f\u8017\u65f6\u7684\u64cd\u4f5c\uff0c\u7ebf\u7a0b\u6c60\u590d\u7528\u5df2\u521b\u5efa\u7684\u7ebf\u7a0b\uff0c\u907f\u514d\u53cd\u590d\u521b\u5efa\u548c\u9500\u6bc1\u3002<\/li>\n<li><strong>\u63d0\u9ad8\u54cd\u5e94\u901f\u5ea6<\/strong>\uff1a\u4efb\u52a1\u5230\u8fbe\u65f6\u65e0\u9700\u7b49\u5f85\u7ebf\u7a0b\u521b\u5efa\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\u6c60\u4e2d\u5df2\u6709\u7ebf\u7a0b\u7acb\u5373\u6267\u884c\u3002<\/li>\n<li><strong>\u63d0\u9ad8\u7ebf\u7a0b\u7684\u53ef\u7ba1\u7406\u6027<\/strong>\uff1a\u7ebf\u7a0b\u662f\u7a00\u7f3a\u8d44\u6e90\uff0c\u7ebf\u7a0b\u6c60\u80fd\u7edf\u4e00\u7ba1\u7406\u3001\u76d1\u63a7\u548c\u8c03\u4f18\u7ebf\u7a0b\uff0c\u907f\u514d\u65e0\u9650\u5236\u5730 <code>new<\/code> \u7ebf\u7a0b\u5bfc\u81f4\u7cfb\u7edf\u8d44\u6e90\u8017\u5c3d\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u7ebf\u7a0b\u6c60\u7684\u6838\u5fc3\u53c2\u6570<\/h3>\n<ol start=\"4\">\n<li><strong>corePoolSize\uff08\u6838\u5fc3\u7ebf\u7a0b\u6570\uff09<\/strong>\uff1a\u7ebf\u7a0b\u6c60\u4e2d\u5e38\u9a7b\u7684\u7ebf\u7a0b\u6570\u91cf\uff0c\u6838\u5fc3\u7ebf\u7a0b\u4e00\u7ecf\u521b\u5efa\u4e0d\u4f1a\u4e3b\u52a8\u9500\u6bc1\uff0c\u968f\u7ebf\u7a0b\u6c60\u751f\u547d\u5468\u671f\u5b58\u5728\u3002<\/li>\n<li><strong>maximumPoolSize\uff08\u6700\u5927\u7ebf\u7a0b\u6570\uff09<\/strong>\uff1a\u7ebf\u7a0b\u6c60\u5141\u8bb8\u521b\u5efa\u7684\u6700\u5927\u7ebf\u7a0b\u6570\u91cf\uff0c\u662f\u7ebf\u7a0b\u603b\u6570\u7684\u4e0a\u9650\u3002<\/li>\n<li><strong>keepAliveTime\uff08\u7a7a\u95f2\u5b58\u6d3b\u65f6\u95f4\uff09<\/strong>\uff1a\u5f53\u7ebf\u7a0b\u6570\u8d85\u8fc7\u6838\u5fc3\u7ebf\u7a0b\u6570\u65f6\uff0c\u591a\u4f59\u7ebf\u7a0b\u7a7a\u95f2\u65f6\u95f4\u8d85\u8fc7\u8be5\u503c\u4f1a\u88ab\u56de\u6536\uff0c\u4f7f\u7ebf\u7a0b\u6570\u56de\u843d\u5230\u6838\u5fc3\u7ebf\u7a0b\u6570\u3002<\/li>\n<li><strong>unit\uff08\u65f6\u95f4\u5355\u4f4d\uff09<\/strong>\uff1a<code>keepAliveTime<\/code> \u7684\u65f6\u95f4\u5355\u4f4d\uff08\u5982\u79d2\u3001\u6beb\u79d2\u7b49\uff09\u3002<\/li>\n<li><strong>workQueue\uff08\u4efb\u52a1\u961f\u5217\uff09<\/strong>\uff1a\u7528\u4e8e\u5b58\u653e\u7b49\u5f85\u6267\u884c\u7684\u4efb\u52a1\u3002\u5f53\u6838\u5fc3\u7ebf\u7a0b\u90fd\u5728\u5fd9\u65f6\uff0c\u65b0\u4efb\u52a1\u4f1a\u5148\u8fdb\u5165\u961f\u5217\u6392\u961f\uff0c\u800c\u4e0d\u662f\u7acb\u5373\u521b\u5efa\u65b0\u7ebf\u7a0b\u3002<\/li>\n<li>\u7ebf\u7a0b\u6c60\u7684\u521b\u5efa\u903b\u8f91\uff1a\u5f53\u4efb\u52a1\u5230\u8fbe\u65f6\uff0c\u5148\u7531\u6838\u5fc3\u7ebf\u7a0b\u5904\u7406\uff1b\u6838\u5fc3\u7ebf\u7a0b\u6ee1\u540e\uff0c\u4efb\u52a1\u8fdb\u5165\u961f\u5217\uff1b\u961f\u5217\u6ee1\u540e\uff0c\u624d\u521b\u5efa\u65b0\u7ebf\u7a0b\u76f4\u5230\u8fbe\u5230\u6700\u5927\u7ebf\u7a0b\u6570\u3002<\/li>\n<li><strong>threadFactory\uff08\u7ebf\u7a0b\u5de5\u5382\uff09<\/strong>\uff1a\u7528\u4e8e\u521b\u5efa\u7ebf\u7a0b\u7684\u5de5\u5382\u63a5\u53e3\uff0c\u53ef\u4ee5\u81ea\u5b9a\u4e49\u7ebf\u7a0b\u540d\u79f0\u3001\u4f18\u5148\u7ea7\u3001\u662f\u5426\u4e3a\u5b88\u62a4\u7ebf\u7a0b\u7b49\u5c5e\u6027\u3002<\/li>\n<li>\u9ed8\u8ba4\u7684\u7ebf\u7a0b\u5de5\u5382\u521b\u5efa\u7684\u7ebf\u7a0b\u5c5e\u4e8e\u540c\u4e00\u4e2a\u7ebf\u7a0b\u7ec4\u3001\u62e5\u6709\u76f8\u540c\u7684\u4f18\u5148\u7ea7\uff0c\u4e14\u90fd\u4e0d\u662f\u5b88\u62a4\u7ebf\u7a0b\u3002<\/li>\n<li><strong>RejectedExecutionHandler\uff08\u62d2\u7edd\u7b56\u7565\uff09<\/strong>\uff1a\u5f53\u7ebf\u7a0b\u6c60\u5df2\u5173\u95ed\u6216\u7ebf\u7a0b\u6570\u5df2\u8fbe\u6700\u5927\u503c\u4e14\u961f\u5217\u5df2\u6ee1\u65f6\uff0c\u65b0\u4efb\u52a1\u4f1a\u88ab\u62d2\u7edd\u6267\u884c\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u89e6\u53d1\u62d2\u7edd\u7b56\u7565\u7684\u4e24\u79cd\u60c5\u51b5<\/h3>\n<ol start=\"13\">\n<li>\u7ebf\u7a0b\u6c60\u5df2\u5173\u95ed\uff08\u8c03\u7528\u4e86 <code>shutdown()<\/code> \u7b49\u65b9\u6cd5\uff09\u540e\uff0c\u7ee7\u7eed\u63d0\u4ea4\u4efb\u52a1\u4f1a\u88ab\u62d2\u7edd\u3002<\/li>\n<li>\u7ebf\u7a0b\u6570\u5df2\u8fbe\u5230\u6700\u5927\u7ebf\u7a0b\u6570\u4e14\u4efb\u52a1\u961f\u5217\u4e5f\u5df2\u6ee1\uff0c\u65e0\u6cd5\u518d\u5904\u7406\u65b0\u4efb\u52a1\u65f6\uff0c\u65b0\u4efb\u52a1\u4f1a\u88ab\u62d2\u7edd\u3002<\/li>\n<\/ol>\n<h2>29-\u7ebf\u7a0b\u6c60\u5904\u7406\u6d41\u7a0b<\/h2>\n<hr \/>\n<ol>\n<li>\u7ebf\u7a0b\u6c60\u63a5\u6536\u4e00\u4e2a\u4efb\u52a1\u540e\uff0c\u9996\u5148\u5224\u65ad<strong>\u6838\u5fc3\u7ebf\u7a0b\u6570\uff08corePoolSize\uff09\u662f\u5426\u5df2\u6ee1<\/strong>\u3002<\/li>\n<li>\u5982\u679c\u6838\u5fc3\u7ebf\u7a0b\u6570\u672a\u6ee1\uff0c\u5219\u76f4\u63a5\u521b\u5efa\u4e00\u4e2a<strong>\u6838\u5fc3\u7ebf\u7a0b<\/strong>\u6765\u6267\u884c\u8be5\u4efb\u52a1\u3002<\/li>\n<li>\u5982\u679c\u6838\u5fc3\u7ebf\u7a0b\u6570\u5df2\u6ee1\uff0c\u5219\u5224\u65ad<strong>\u4efb\u52a1\u961f\u5217\uff08workQueue\uff09\u662f\u5426\u5df2\u6ee1<\/strong>\u3002<\/li>\n<li>\u5982\u679c\u4efb\u52a1\u961f\u5217\u672a\u6ee1\uff0c\u5219\u5c06\u4efb\u52a1\u653e\u5165\u961f\u5217\u4e2d\u7b49\u5f85\uff0c\u7531\u6838\u5fc3\u7ebf\u7a0b\u7a7a\u95f2\u65f6\u4ece\u961f\u5217\u4e2d\u53d6\u4efb\u52a1\u6267\u884c\u3002<\/li>\n<li>\u5982\u679c\u4efb\u52a1\u961f\u5217\u5df2\u6ee1\uff0c\u5219\u5224\u65ad<strong>\u6700\u5927\u7ebf\u7a0b\u6570\uff08maximumPoolSize\uff09\u662f\u5426\u5df2\u8fbe\u5230<\/strong>\u3002<\/li>\n<li>\u5982\u679c\u6700\u5927\u7ebf\u7a0b\u6570\u672a\u8fbe\u5230\uff0c\u5219\u521b\u5efa\u4e00\u4e2a<strong>\u4e34\u65f6\u7ebf\u7a0b<\/strong>\u6765\u6267\u884c\u8be5\u4efb\u52a1\uff08\u6ce8\u610f\uff1a\u8fd9\u662f\u4e34\u65f6\u7ebf\u7a0b\uff0c\u800c\u975e\u6838\u5fc3\u7ebf\u7a0b\uff09\u3002<\/li>\n<li>\u4e34\u65f6\u7ebf\u7a0b\u6267\u884c\u5b8c\u4efb\u52a1\u540e\uff0c\u5982\u679c\u7a7a\u95f2\u65f6\u95f4\u8d85\u8fc7\u4e86 <code>keepAliveTime<\/code>\uff08\u7a7a\u95f2\u5b58\u6d3b\u65f6\u95f4\uff09\uff0c\u5219\u4f1a\u88ab\u56de\u6536\u9500\u6bc1\u3002<\/li>\n<li>\u5982\u679c\u4efb\u52a1\u961f\u5217\u5df2\u6ee1\u4e14\u6700\u5927\u7ebf\u7a0b\u6570\u4e5f\u5df2\u8fbe\u5230\uff0c\u5219\u89e6\u53d1<strong>\u62d2\u7edd\u7b56\u7565<\/strong>\uff08\u5982\u629b\u51fa\u5f02\u5e38\u6216\u4e22\u5f03\u4efb\u52a1\uff09\u3002<\/li>\n<li>\u6574\u4e2a\u5904\u7406\u6d41\u7a0b\u53ef\u4ee5\u6982\u62ec\u4e3a\uff1a<strong>\u6838\u5fc3\u7ebf\u7a0b \u2192 \u4efb\u52a1\u961f\u5217 \u2192 \u4e34\u65f6\u7ebf\u7a0b\uff08\u6700\u5927\u7ebf\u7a0b\uff09 \u2192 \u62d2\u7edd\u7b56\u7565<\/strong>\uff0c\u6309\u987a\u5e8f\u9010\u7ea7\u5224\u65ad\u3002<\/li>\n<\/ol>\n<h2>30-\u7ebf\u7a0b\u6c60\u4e2d\u963b\u585e\u961f\u5217\u7684\u4f5c\u7528?\u4e3a\u4ec0\u4e48\u662f\u5148\u6dfb\u52a0\u5217\u961f\u800c\u4e0d\u662f\u5148\u521b\u5efa\u6700\u5927\u7ebf\u7a0b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u963b\u585e\u961f\u5217\u7684\u4f5c\u7528<\/h3>\n<ol>\n<li>\u666e\u901a\u961f\u5217\u53ea\u80fd\u4f5c\u4e3a\u6709\u9650\u957f\u5ea6\u7684\u7f13\u51b2\u5bb9\u5668\uff0c\u5f53\u961f\u5217\u6ee1\u4e86\u65f6\uff0c\u65b0\u4efb\u52a1\u65e0\u6cd5\u653e\u5165\u4e14\u4f1a\u4e22\u5931\u3002<\/li>\n<li>\u963b\u585e\u961f\u5217\u5728\u961f\u5217\u6ee1\u4e86\u65f6\uff0c\u65b0\u4efb\u52a1\u4f1a<strong>\u963b\u585e\u7b49\u5f85<\/strong>\uff0c\u800c\u4e0d\u662f\u76f4\u63a5\u4e22\u5931\uff0c\u76f4\u5230\u961f\u5217\u6709\u7a7a\u95f4\u4e3a\u6b62\u3002<\/li>\n<li>\u963b\u585e\u961f\u5217\u53ef\u4ee5\u5e2e\u52a9\u7ebf\u7a0b\u6c60<strong>\u81ea\u52a8\u963b\u585e\u548c\u5524\u9192\u7ebf\u7a0b<\/strong>\uff1a\u5f53\u961f\u5217\u4e2d\u6ca1\u6709\u4efb\u52a1\u65f6\uff0c\u6838\u5fc3\u7ebf\u7a0b\u4f1a\u88ab\u963b\u585e\u5e76\u91ca\u653e CPU \u8d44\u6e90\uff1b\u5f53\u6709\u65b0\u4efb\u52a1\u5165\u961f\u65f6\uff0c\u7ebf\u7a0b\u4f1a\u88ab\u81ea\u52a8\u5524\u9192\u53bb\u6267\u884c\u4efb\u52a1\u3002<\/li>\n<li>\u4f7f\u7528\u963b\u585e\u961f\u5217\uff0c\u7a0b\u5e8f\u5458\u65e0\u9700\u624b\u52a8\u8c03\u7528 <code>sleep()<\/code> \u6216 <code>wait()<\/code> \u6765\u63a7\u5236\u7ebf\u7a0b\u7684\u963b\u585e\u548c\u5524\u9192\uff0c\u963b\u585e\u961f\u5217\u672c\u8eab\u5df2\u5c01\u88c5\u597d\u8fd9\u4e9b\u529f\u80fd\u3002<\/li>\n<li>\u963b\u585e\u961f\u5217\u7684\u6838\u5fc3\u4f5c\u7528\u6982\u62ec\u4e3a\uff1a<strong>\u4fdd\u5b58\u4efb\u52a1 + \u81ea\u52a8\u963b\u585e\/\u5524\u9192\u7ebf\u7a0b<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u4e3a\u4ec0\u4e48\u5148\u653e\u5165\u961f\u5217\uff0c\u800c\u4e0d\u662f\u5148\u521b\u5efa\u6700\u5927\u7ebf\u7a0b<\/h3>\n<ol start=\"6\">\n<li>\u521b\u5efa\u7ebf\u7a0b\u662f\u4e00\u4e2a<strong>\u91cd\u91cf\u7ea7\u64cd\u4f5c<\/strong>\uff0c\u9700\u8981\u83b7\u53d6\u5168\u5c40\u9501\uff0c\u4f1a\u963b\u585e\u5176\u4ed6\u7ebf\u7a0b\uff0c\u5f71\u54cd\u6574\u4f53\u6027\u80fd\u3002<\/li>\n<li>\u7ebf\u7a0b\u6c60\u7684\u8bbe\u8ba1\u521d\u8877\u5c31\u662f<strong>\u907f\u514d\u9891\u7e41\u521b\u5efa\u548c\u9500\u6bc1\u7ebf\u7a0b<\/strong>\uff0c\u5982\u679c\u6bcf\u6765\u4e00\u4e2a\u4efb\u52a1\u5c31\u521b\u5efa\u65b0\u7ebf\u7a0b\uff0c\u5904\u7406\u5b8c\u53c8\u9500\u6bc1\uff0c\u5c31\u8fdd\u80cc\u4e86\u8fd9\u4e00\u521d\u8877\u3002<\/li>\n<li>\u6700\u5927\u7ebf\u7a0b\u6570\u5b58\u5728\u7684\u610f\u4e49\u662f\u5e94\u5bf9<strong>\u4e1a\u52a1\u9ad8\u5cf0\u671f\uff08\u5cf0\u503c\u6d41\u91cf\uff09<\/strong>\uff0c\u800c\u4e0d\u662f\u5904\u7406\u5e38\u89c4\u6d41\u91cf\u3002<\/li>\n<li>\u5c06\u4efb\u52a1\u5148\u653e\u5165\u961f\u5217\uff0c\u8ba9\u6838\u5fc3\u7ebf\u7a0b\u6162\u6162\u5904\u7406\uff0c\u53ef\u4ee5\u907f\u514d\u5728\u975e\u9ad8\u5cf0\u671f\u9891\u7e41\u521b\u5efa\u548c\u56de\u6536\u4e34\u65f6\u7ebf\u7a0b\uff0c\u964d\u4f4e\u8d44\u6e90\u6d88\u8017\u3002<\/li>\n<li>\u7c7b\u6bd4\u4f01\u4e1a\u7528\u5de5\uff1a\u5148\u6709\u6b63\u5f0f\u5458\u5de5\uff08\u6838\u5fc3\u7ebf\u7a0b\uff09\u5904\u7406\u5e38\u89c4\u4efb\u52a1\uff0c\u4efb\u52a1\u79ef\u538b\u65f6\u5148\u6392\u961f\u7b49\u5f85\uff08\u4efb\u52a1\u961f\u5217\uff09\uff0c\u53ea\u6709\u79ef\u538b\u5230\u8d85\u51fa\u627f\u53d7\u6781\u9650\u65f6\u624d\u62db\u5916\u5305\uff08\u521b\u5efa\u4e34\u65f6\u7ebf\u7a0b\uff09\uff0c\u9ad8\u5cf0\u671f\u8fc7\u540e\u5916\u5305\u81ea\u7136\u6dd8\u6c70\uff08\u4e34\u65f6\u7ebf\u7a0b\u56de\u6536\uff09\u3002<\/li>\n<li>\u5148\u653e\u961f\u5217\u800c\u4e0d\u662f\u5148\u521b\u5efa\u6700\u5927\u7ebf\u7a0b\uff0c\u6838\u5fc3\u903b\u8f91\u662f\uff1a<strong>\u961f\u5217\u64cd\u4f5c\u4ee3\u4ef7\u5c0f\uff0c\u7ebf\u7a0b\u521b\u5efa\u4ee3\u4ef7\u5927<\/strong>\uff0c\u7528\u4f4e\u6210\u672c\u7684\u65b9\u5f0f\u5e94\u5bf9\u5e38\u89c4\u79ef\u538b\uff0c\u7528\u9ad8\u6210\u672c\u7684\u65b9\u5f0f\u5e94\u5bf9\u5cf0\u503c\u538b\u529b\u3002<\/li>\n<\/ol>\n<h2>31-\u7ebf\u7a0b\u6c60\u7ebf\u7a0b\u590d\u7528\u7684\u539f\u7406<\/h2>\n<hr \/>\n<ol>\n<li>\u7ebf\u7a0b\u6c60\u5b9e\u73b0\u4e86<strong>\u7ebf\u7a0b\u4e0e\u4efb\u52a1\u7684\u89e3\u8026<\/strong>\uff0c\u7ebf\u7a0b\u4e0d\u518d\u4e0e\u7279\u5b9a\u4efb\u52a1\u7ed1\u5b9a\uff0c\u540c\u4e00\u4e2a\u7ebf\u7a0b\u53ef\u4ee5\u6267\u884c\u4e0d\u540c\u7684\u4efb\u52a1\u3002<\/li>\n<li>\u4f20\u7edf\u65b9\u5f0f\u4e2d\uff0c\u6bcf\u4e2a <code>Thread<\/code> \u5bf9\u8c61\u521b\u5efa\u65f6\u5c31\u7ed1\u5b9a\u4e86\u4e00\u4e2a <code>Runnable<\/code> \u4efb\u52a1\uff0c\u7ebf\u7a0b\u4e0e\u4efb\u52a1\u662f\u4e00\u4e00\u5bf9\u5e94\u7684\u5173\u7cfb\u3002<\/li>\n<li>\u7ebf\u7a0b\u6c60\u590d\u7528\u7684\u6838\u5fc3\u539f\u7406\u662f\uff1a\u7ebf\u7a0b\u6c60\u5bf9 <code>Thread<\/code> \u8fdb\u884c\u4e86\u5c01\u88c5\uff0c\u8ba9\u6bcf\u4e2a\u5de5\u4f5c\u7ebf\u7a0b\u6267\u884c\u4e00\u4e2a<strong>\u5faa\u73af\u4efb\u52a1\uff08\u4e0d\u65ad\u5faa\u73af\u68c0\u67e5\uff09<\/strong>\u3002<\/li>\n<li>\u5728\u8fd9\u4e2a\u5faa\u73af\u4e2d\uff0c\u5de5\u4f5c\u7ebf\u7a0b\u4e0d\u65ad\u5730\u4ece\u963b\u585e\u961f\u5217\u4e2d\u83b7\u53d6\u65b0\u4efb\u52a1\uff0c\u5982\u679c\u6709\u4efb\u52a1\u5219\u6267\u884c\uff0c\u6ca1\u6709\u5219\u963b\u585e\u7b49\u5f85\u3002<\/li>\n<li>\u7ebf\u7a0b\u6c60\u6267\u884c\u4efb\u52a1\u65f6\uff0c\u8c03\u7528\u7684\u4e0d\u662f <code>Thread.start()<\/code>\uff08\u5f00\u542f\u65b0\u7ebf\u7a0b\u5f02\u6b65\u6267\u884c\uff09\uff0c\u800c\u662f<strong>\u76f4\u63a5\u8c03\u7528\u4efb\u52a1\u7684 <code>run()<\/code> \u65b9\u6cd5<\/strong>\uff08\u4f5c\u4e3a\u666e\u901a\u65b9\u6cd5\u540c\u6b65\u6267\u884c\uff09\u3002<\/li>\n<li>\u5982\u679c\u8c03\u7528 <code>start()<\/code>\uff0c\u76f8\u5f53\u4e8e\u5728\u7ebf\u7a0b\u6c60\u7684\u7ebf\u7a0b\u5185\u90e8\u53c8\u521b\u5efa\u4e86\u5b50\u7ebf\u7a0b\uff0c\u8fdd\u80cc\u4e86\u7ebf\u7a0b\u6c60\u590d\u7528\u7ebf\u7a0b\u7684\u521d\u8877\u3002<\/li>\n<li>\u901a\u8fc7\u76f4\u63a5\u8c03\u7528 <code>run()<\/code> \u65b9\u6cd5\uff0c\u56fa\u5b9a\u6570\u91cf\u7684\u5de5\u4f5c\u7ebf\u7a0b\u53ef\u4ee5\u4e0d\u65ad\u6267\u884c\u4e0d\u540c\u4efb\u52a1\u7684 <code>run()<\/code> \u65b9\u6cd5\uff0c\u4ece\u800c\u5b9e\u73b0\u7ebf\u7a0b\u590d\u7528\u3002<\/li>\n<li>\u7ebf\u7a0b\u6c60\u4e2d\u7684\u5de5\u4f5c\u7ebf\u7a0b\u672c\u8eab\u4e0e\u4e1a\u52a1\u4efb\u52a1\u65e0\u5173\uff0c\u5b83\u4eec\u53ea\u8d1f\u8d23\u4ece\u961f\u5217\u4e2d\u53d6\u4efb\u52a1\u5e76\u8c03\u7528\u5176 <code>run()<\/code> \u65b9\u6cd5\uff0c\u8fd9\u5c31\u662f\u7ebf\u7a0b\u590d\u7528\u7684\u672c\u8d28\u3002<\/li>\n<\/ol>\n<h2>32-spring\u662f\u4ec0\u4e48<\/h2>\n<hr \/>\n<ol>\n<li>Spring \u662f\u4e00\u4e2a<strong>\u8f7b\u91cf\u7ea7\u3001\u5f00\u6e90\u7684\u4f01\u4e1a\u7ea7\u5e94\u7528\u6846\u67b6<\/strong>\uff0c\u672c\u8d28\u4e0a\u662f\u4e00\u4e2a<strong>\u5bb9\u5668\u6846\u67b6<\/strong>\uff0c\u7528\u4e8e\u88c5 Java Bean\uff08\u7ba1\u7406\u5bf9\u8c61\u7684\u751f\u547d\u5468\u671f\uff09\u3002<\/li>\n<li>Spring \u7684\u6838\u5fc3\u662f <strong>IoC\uff08\u63a7\u5236\u53cd\u8f6c\uff09+ AOP\uff08\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff09<\/strong>\uff0c\u8fd9\u4e5f\u662f\u5927\u591a\u6570\u4eba\u5fc3\u4e2d\u5bf9 Spring \u7684\u672c\u8d28\u8ba4\u77e5\u3002<\/li>\n<li>\u4ece\u5927\u5c0f\u548c\u5f00\u9500\u4e24\u65b9\u9762\u6765\u770b\uff0cSpring \u90fd\u662f\u8f7b\u91cf\u7ea7\u7684\uff0c\u5bf9\u4ee3\u7801\u7684<strong>\u4fb5\u5165\u6027\u6781\u4f4e<\/strong>\uff0c\u5bf9\u6bd4\u65e9\u671f\u7684 EJB \u91cd\u91cf\u7ea7\u6846\u67b6\u4f18\u52bf\u660e\u663e\u3002<\/li>\n<li>Spring \u901a\u8fc7 <strong>IoC\uff08\u63a7\u5236\u53cd\u8f6c\uff09<\/strong> \u5b9e\u73b0\u5bf9\u8c61\u4e4b\u95f4\u7684\u677e\u8026\u5408\uff0c\u964d\u4f4e\u4e86\u4ee3\u7801\u7684\u8026\u5408\u5ea6\u3002<\/li>\n<li>Spring \u901a\u8fc7 <strong>AOP\uff08\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff09<\/strong> \u5b9e\u73b0\u4e1a\u52a1\u903b\u8f91\u4e0e\u7cfb\u7edf\u7ea7\u670d\u52a1\uff08\u5982\u65e5\u5fd7\u3001\u4e8b\u52a1\uff09\u7684\u5206\u79bb\uff0c\u652f\u6301\u5185\u805a\u6027\u5f00\u53d1\u3002<\/li>\n<li>Spring \u4f5c\u4e3a\u5bb9\u5668\uff0c<strong>\u7edf\u4e00\u7ba1\u7406\u5bf9\u8c61\u7684\u6574\u4e2a\u751f\u547d\u5468\u671f<\/strong>\uff08\u4ece\u521b\u5efa\u5230\u9500\u6bc1\uff09\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u624b\u52a8 <code>new<\/code> \u5bf9\u8c61\u548c\u8d4b\u503c\u3002<\/li>\n<li>Spring \u88ab\u8a89\u4e3a <strong>&#8220;\u4e07\u80fd\u80f6&#8221;<\/strong>\uff0c\u53ef\u4ee5\u8f7b\u677e\u6574\u5408\u5176\u4ed6\u6846\u67b6\uff08\u5982 MyBatis\u3001Redis\u3001Struts \u7b49\uff09\uff0c\u8ba9\u4f01\u4e1a\u5e94\u7528\u5f00\u53d1\u66f4\u5feb\u66f4\u7b80\u6d01\u3002<\/li>\n<\/ol>\n<h2>33-\u5bf9Aop\u7684\u7406\u89e3<\/h2>\n<hr \/>\n<ol>\n<li>\u5728\u4f20\u7edf\u5f00\u53d1\u4e2d\uff0c\u6bcf\u4e2a\u4e1a\u52a1\u63a5\u53e3\u9664\u4e86\u5b9e\u73b0\u81ea\u8eab\u6838\u5fc3\u529f\u80fd\uff08\u5982\u67e5\u8be2\u8ba2\u5355\uff09\u5916\uff0c\u8fd8\u9700\u8981\u91cd\u590d\u7f16\u5199\u65e5\u5fd7\u3001\u5f02\u5e38\u5904\u7406\u3001\u4e8b\u52a1\u7ba1\u7406\u7b49<strong>\u975e\u6838\u5fc3\u4f46\u5fc5\u987b\u7684\u4ee3\u7801<\/strong>\uff0c\u5bfc\u81f4\u5927\u91cf\u4ee3\u7801\u5197\u4f59\u3002<\/li>\n<li>OOP\uff08\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff09\u5904\u7406\u9700\u6c42\u65f6\uff0c\u9700\u8981\u5206\u6790\u6709\u54ea\u4e9b\u53c2\u4e0e\u8005\uff08\u5bf9\u8c61\uff09\u4ee5\u53ca\u6bcf\u4e2a\u5bf9\u8c61\u6709\u54ea\u4e9b\u65b9\u6cd5\u548c\u804c\u8d23\u3002<\/li>\n<li>\u5982\u679c\u5b8c\u5168\u6309 OOP \u65b9\u5f0f\u5904\u7406\uff0c\u65e5\u5fd7\u4ee3\u7801\u4f1a\u5206\u6563\u5728\u5404\u4e2a\u4e1a\u52a1\u6a21\u5757\u4e2d\uff08\u8ba2\u5355\u63a5\u53e3\u5199\u4e00\u4efd\u3001\u652f\u4ed8\u63a5\u53e3\u5199\u4e00\u4efd\uff09\uff0c\u4e0d\u5229\u4e8e\u4ee3\u7801\u590d\u7528\u3002<\/li>\n<li><strong>AOP\uff08\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff09<\/strong> \u5c06\u65e5\u5fd7\u3001\u4e8b\u52a1\u3001\u5b89\u5168\u7b49<strong>\u4ea4\u53c9\u4e1a\u52a1\u903b\u8f91<\/strong>\u5c01\u88c5\u6210\u4e00\u4e2a<strong>\u5207\u9762<\/strong>\uff0c\u7136\u540e\u5c06\u5207\u9762\u81ea\u52a8\u6ce8\u5165\u5230\u76ee\u6807\u4e1a\u52a1\u5bf9\u8c61\u4e2d\u3002<\/li>\n<li>\u4f7f\u7528 AOP \u540e\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u5b9a\u4e49\u597d\u5207\u9762\uff0c\u7b26\u5408\u5207\u9762\u89c4\u5219\u7684\u4e1a\u52a1\u65b9\u6cd5\u5c31\u4f1a<strong>\u81ea\u52a8\u88ab\u589e\u5f3a<\/strong>\uff08\u5728\u65b9\u6cd5\u6267\u884c\u524d\u540e\u989d\u5916\u589e\u52a0\u65e5\u5fd7\u3001\u4e8b\u52a1\u7b49\u884c\u4e3a\uff09\uff0c\u65e0\u9700\u5728\u6bcf\u4e2a\u63a5\u53e3\u4e2d\u624b\u52a8\u91cd\u590d\u7f16\u5199\u3002<\/li>\n<li>AOP \u7684\u672c\u8d28\u662f\u5bf9\u67d0\u4e2a\u5bf9\u8c61\u6216\u65b9\u6cd5\u7684\u529f\u80fd\u8fdb\u884c<strong>\u589e\u5f3a<\/strong>\uff0c\u5728\u4e0d\u4fee\u6539\u539f\u6709\u4ee3\u7801\u7684\u60c5\u51b5\u4e0b\uff0c\u5728\u65b9\u6cd5\u6267\u884c\u524d\u540e\u989d\u5916\u6dfb\u52a0\u64cd\u4f5c\u3002<\/li>\n<li>AOP \u89e3\u51b3\u4e86 OOP \u4e2d\u6a2a\u5207\u6027\u5173\u6ce8\u70b9\uff08\u5982\u65e5\u5fd7\u3001\u4e8b\u52a1\uff09\u91cd\u590d\u4ee3\u7801\u7684\u95ee\u9898\uff0c\u5b9e\u73b0\u4e86\u5173\u6ce8\u70b9\u7684\u6a21\u5757\u5316\u548c\u4ee3\u7801\u590d\u7528\u3002<\/li>\n<\/ol>\n<h2>34-\u5bf9IOC\u7684\u7406\u89e3<\/h2>\n<hr \/>\n<h3>\u4e00\u3001IoC \u7684\u672c\u8d28\u662f\u5bb9\u5668<\/h3>\n<ol>\n<li><strong>IoC\uff08\u63a7\u5236\u53cd\u8f6c\uff09<\/strong> \u672c\u8d28\u4e0a\u662f\u4e00\u4e2a<strong>\u5bb9\u5668<\/strong>\uff0c\u901a\u5e38\u53ef\u4ee5\u7406\u89e3\u4e3a\u4e00\u4e2a <code>Map<\/code>\uff0c\u7528\u4e8e\u5b58\u653e\u5404\u79cd Java \u5bf9\u8c61\uff08Bean\uff09\u3002<\/li>\n<li>\u9879\u76ee\u542f\u52a8\u65f6\uff0cSpring \u4f1a\u8bfb\u53d6\u914d\u7f6e\u6587\u4ef6\uff08XML\uff09\u6216\u626b\u63cf\u6ce8\u89e3\uff0c\u5c06\u9700\u8981\u7ba1\u7406\u7684\u7c7b\u5b9e\u4f8b\u5316\u5e76\u5b58\u5165 IoC \u5bb9\u5668\u4e2d\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u63a7\u5236\u53cd\u8f6c\uff08IoC \u7684\u6838\u5fc3\u6982\u5ff5\uff09<\/h3>\n<ol start=\"3\">\n<li>\u5728\u6ca1\u6709 IoC \u5bb9\u5668\u65f6\uff0c\u5982\u679c\u5bf9\u8c61 A \u4f9d\u8d56\u5bf9\u8c61 B\uff0cA \u9700\u8981\u81ea\u5df1\u4e3b\u52a8\u53bb <code>new<\/code> \u6216\u83b7\u53d6 B \u7684\u5b9e\u4f8b\uff0c\u63a7\u5236\u6743\u5728 A \u81ea\u5df1\u624b\u4e2d\u3002<\/li>\n<li>\u5f15\u5165 IoC \u5bb9\u5668\u540e\uff0c\u5bf9\u8c61 A \u548c\u5bf9\u8c61 B \u4e0d\u518d\u76f4\u63a5\u5173\u8054\uff0c\u800c\u662f\u90fd\u4f9d\u8d56\u4e8e IoC \u5bb9\u5668\uff0cA \u4e0d\u518d\u4e3b\u52a8\u521b\u5efa B\u3002<\/li>\n<li>\u5f53 A \u9700\u8981 B \u65f6\uff0cIoC \u5bb9\u5668\u4f1a\u4e3b\u52a8\u521b\u5efa\uff08\u6216\u83b7\u53d6\uff09B \u7684\u5b9e\u4f8b\u5e76\u6ce8\u5165\u7ed9 A\uff0cA \u83b7\u53d6\u4f9d\u8d56\u5bf9\u8c61\u7684\u8fc7\u7a0b\u7531<strong>\u4e3b\u52a8\u53d8\u6210\u88ab\u52a8<\/strong>\u3002<\/li>\n<li>\u5bf9\u8c61\u83b7\u53d6\u4f9d\u8d56\u7684\u63a7\u5236\u6743\u4ece\u7a0b\u5e8f\u81ea\u8eab\u8f6c\u79fb\u5230\u4e86 IoC \u5bb9\u5668\uff0c\u8fd9\u5c31\u662f&#8221;\u63a7\u5236\u53cd\u8f6c&#8221;\u7684\u542b\u4e49\u2014\u2014\u63a7\u5236\u6743\u98a0\u5012\u8fc7\u6765\u4e86\u3002<\/li>\n<li>IoC \u5bb9\u5668\u6210\u4e3a\u7cfb\u7edf\u7684\u6838\u5fc3\uff0c\u6240\u6709\u9700\u8981\u7ba1\u7406\u7684\u5bf9\u8c61\u90fd\u653e\u5165\u5176\u4e2d\uff0c\u5bf9\u8c61\u4e0e\u5bf9\u8c61\u4e4b\u95f4\u901a\u8fc7\u5bb9\u5668\u95f4\u63a5\u5173\u8054\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4f9d\u8d56\u6ce8\u5165\uff08DI\uff09\u2014\u2014\u5b9e\u73b0 IoC \u7684\u65b9\u6cd5<\/h3>\n<ol start=\"8\">\n<li><strong>\u4f9d\u8d56\u6ce8\u5165\uff08DI\uff09<\/strong> \u662f\u5b9e\u73b0 IoC \u7684\u5177\u4f53\u624b\u6bb5\uff0c\u5728\u5bb9\u5668\u8fd0\u884c\u671f\u95f4\u52a8\u6001\u5730\u5c06\u4f9d\u8d56\u5173\u7cfb\u6ce8\u5165\u5230\u5bf9\u8c61\u4e2d\u3002<\/li>\n<li>\u4f9d\u8d56\u6ce8\u5165\u7684\u672c\u8d28\uff1a\u83b7\u5f97\u4f9d\u8d56\u5bf9\u8c61\u7684\u8fc7\u7a0b\u4ece\u5bf9\u8c61\u81ea\u8eab\u7ba1\u7406\u53d8\u4e3a\u7531 IoC \u5bb9\u5668\u4e3b\u52a8\u6ce8\u5165\u3002<\/li>\n<li>\u7406\u89e3 IoC \u9700\u8981\u4ece\u4e09\u4e2a\u89d2\u5ea6\u628a\u63e1\uff1a<strong>\u5bb9\u5668\u6982\u5ff5<\/strong>\uff08IoC \u662f\u4ec0\u4e48\uff09\u3001<strong>\u63a7\u5236\u53cd\u8f6c<\/strong>\uff08\u4e3a\u4ec0\u4e48\u53eb\u53cd\u8f6c\uff09\u3001<strong>\u4f9d\u8d56\u6ce8\u5165<\/strong>\uff08\u5982\u4f55\u5b9e\u73b0\u53cd\u8f6c\uff09\uff0c\u4e09\u8005\u7f3a\u4e00\u4e0d\u53ef\u3002<\/li>\n<\/ol>\n<h2>35-BeanFactory\u548cApplicationContext\u6709\u4e48\u533a\u522b<\/h2>\n<hr \/>\n<ol>\n<li><code>ApplicationContext<\/code> \u662f <code>BeanFactory<\/code> \u7684<strong>\u5b50\u63a5\u53e3<\/strong>\uff0c\u7ee7\u627f\u81ea <code>BeanFactory<\/code> \u5e76\u8fdb\u884c\u4e86\u529f\u80fd\u6269\u5c55\u3002<\/li>\n<li><code>ApplicationContext<\/code> \u6bd4 <code>BeanFactory<\/code> \u591a\u51fa\u7684\u529f\u80fd\u5305\u62ec\uff1a<strong>\u652f\u6301\u56fd\u9645\u5316<\/strong>\uff08\u7ee7\u627f <code>MessageSource<\/code>\uff09\u3001<strong>\u7edf\u4e00\u8d44\u6e90\u6587\u4ef6\u8bbf\u95ee\u65b9\u5f0f<\/strong>\uff08<code>Resource<\/code> \u63a5\u53e3\uff09\u3001<strong>\u652f\u6301\u5728\u76d1\u542c\u5668\u4e2d\u6ce8\u518c Bean \u4e8b\u4ef6<\/strong>\u3001<strong>\u652f\u6301\u540c\u65f6\u52a0\u8f7d\u591a\u4e2a\u914d\u7f6e\u6587\u4ef6<\/strong>\u3001<strong>\u652f\u6301\u591a\u4e2a\u4e0a\u4e0b\u6587\u5c42\u6b21\u7ed3\u6784<\/strong>\uff08\u5982\u7236\u5b50\u5bb9\u5668\uff09\u3002<\/li>\n<li><code>BeanFactory<\/code> \u91c7\u7528<strong>\u5ef6\u8fdf\u52a0\u8f7d\uff08\u61d2\u52a0\u8f7d\uff09<\/strong>\u65b9\u5f0f\uff1a\u53ea\u6709\u5728\u8c03\u7528 <code>getBean()<\/code> \u65f6\u624d\u4f1a\u5b9e\u4f8b\u5316\u5bf9\u5e94\u7684 Bean\u3002<\/li>\n<li><code>BeanFactory<\/code> \u7684\u5ef6\u8fdf\u52a0\u8f7d\u5bfc\u81f4\u914d\u7f6e\u9519\u8bef\u53ea\u80fd\u5728<strong>\u8fd0\u884c\u65f6<\/strong>\u88ab\u53d1\u73b0\uff0c\u4e0d\u5229\u4e8e\u542f\u52a8\u65f6\u7684\u5f02\u5e38\u68c0\u6d4b\u3002<\/li>\n<li><code>ApplicationContext<\/code> \u5728\u5bb9\u5668\u542f\u52a8\u65f6<strong>\u4e00\u6b21\u6027\u521b\u5efa\u6240\u6709 Bean<\/strong>\uff08\u9884\u52a0\u8f7d\uff09\uff0c\u56e0\u6b64\u542f\u52a8\u65f6\u5c31\u80fd\u53d1\u73b0\u914d\u7f6e\u9519\u8bef\uff0c\u6709\u5229\u4e8e\u63d0\u524d\u6392\u67e5\u95ee\u9898\u3002<\/li>\n<li><code>ApplicationContext<\/code> \u7684\u7f3a\u70b9\u662f<strong>\u542f\u52a8\u8f83\u6162\u3001\u5360\u7528\u5185\u5b58\u8f83\u591a<\/strong>\uff08\u56e0\u4e3a\u63d0\u524d\u521b\u5efa\u4e86\u6240\u6709 Bean\uff09\uff0c\u4f46\u8fd0\u884c\u65f6\u901f\u5ea6\u66f4\u5feb\u3002<\/li>\n<li><code>BeanFactory<\/code> \u901a\u5e38\u4ee5<strong>\u7f16\u7a0b\u65b9\u5f0f<\/strong>\u521b\u5efa\uff08\u5728\u4ee3\u7801\u4e2d\u624b\u52a8\u521b\u5efa\uff09\uff0c\u800c <code>ApplicationContext<\/code> \u8fd8\u652f\u6301\u4ee5<strong>\u58f0\u660e\u5f0f\u65b9\u5f0f<\/strong>\u521b\u5efa\uff08\u5982\u4f7f\u7528 <code>ClassPathXmlApplicationContext<\/code> \u7b49\uff09\u3002<\/li>\n<li>\u4e24\u8005\u90fd\u652f\u6301 <code>BeanPostProcessor<\/code> \u548c <code>BeanFactoryPostProcessor<\/code>\uff08\u540e\u7f6e\u5904\u7406\u5668\uff09\uff0c\u4f46 <code>BeanFactory<\/code> \u9700\u8981<strong>\u624b\u52a8\u6ce8\u518c<\/strong>\uff0c\u800c <code>ApplicationContext<\/code> \u4f1a<strong>\u81ea\u52a8\u6ce8\u518c<\/strong>\u3002<\/li>\n<\/ol>\n<h2>36-\u7b80\u8ff0spring bean\u7684\u751f\u547d\u5468\u671f<\/h2>\n<hr \/>\n<ol>\n<li>Spring Bean \u7684\u751f\u547d\u5468\u671f\u7b2c\u4e00\u6b65\u662f<strong>\u89e3\u6790\u7c7b<\/strong>\uff0c\u626b\u63cf\u5305\u8def\u5f84\uff08\u5982 <code>@ComponentScan<\/code>\uff09\u5f97\u5230 <code>BeanDefinition<\/code>\uff08Bean \u7684\u5b9a\u4e49\u4fe1\u606f\uff09\u3002<\/li>\n<li>\u5982\u679c Bean \u6709\u591a\u4e2a\u6784\u9020\u65b9\u6cd5\uff0cSpring \u4f1a\u8fdb\u884c<strong>\u63a8\u65ad\u6784\u9020\u65b9\u6cd5<\/strong>\uff0c\u786e\u5b9a\u4f7f\u7528\u54ea\u4e2a\u6784\u9020\u5668\u6765\u5b9e\u4f8b\u5316\u5bf9\u8c61\u3002<\/li>\n<li>\u786e\u5b9a\u6784\u9020\u65b9\u6cd5\u540e\uff0cSpring \u901a\u8fc7\u53cd\u5c04<strong>\u5b9e\u4f8b\u5316<\/strong>\u5f97\u5230\u4e00\u4e2a Bean \u5bf9\u8c61\uff08\u6b64\u65f6\u5bf9\u8c61\u5df2\u521b\u5efa\uff0c\u4f46\u5c5e\u6027\u672a\u586b\u5145\uff09\u3002<\/li>\n<li>\u5b9e\u4f8b\u5316\u5b8c\u6210\u540e\uff0cSpring \u8fdb\u884c<strong>\u5c5e\u6027\u586b\u5145\uff08\u4f9d\u8d56\u6ce8\u5165\uff09<\/strong>\uff0c\u89e3\u6790 <code>@Autowired<\/code> \u7b49\u6ce8\u89e3\uff0c\u5c06\u4f9d\u8d56\u7684\u5c5e\u6027\u6ce8\u5165\u5230 Bean \u4e2d\u3002<\/li>\n<li>\u5c5e\u6027\u586b\u5145\u5b8c\u6210\u540e\uff0cSpring \u4f1a<strong>\u56de\u8c03 <code>Aware<\/code> \u63a5\u53e3<\/strong>\uff08\u5982 <code>BeanNameAware<\/code>\u3001<code>BeanFactoryAware<\/code> \u7b49\uff09\uff0c\u8fd9\u662f Spring \u63d0\u4f9b\u7684\u4e00\u4e2a\u91cd\u8981\u6269\u5c55\u70b9\u3002<\/li>\n<li>\u63a5\u7740\u8c03\u7528 <strong><code>BeanPostProcessor<\/code> \u7684\u521d\u59cb\u5316\u524d\u65b9\u6cd5<\/strong>\uff08<code>postProcessBeforeInitialization<\/code>\uff09\u3002<\/li>\n<li>\u7136\u540e\u8c03\u7528 Bean \u7684<strong>\u521d\u59cb\u5316\u65b9\u6cd5<\/strong>\uff08\u5982 <code>@PostConstruct<\/code> \u6216\u5b9e\u73b0 <code>InitializingBean<\/code> \u63a5\u53e3\u7684 <code>afterPropertiesSet()<\/code> \u65b9\u6cd5\uff09\u3002<\/li>\n<li>\u521d\u59cb\u5316\u65b9\u6cd5\u6267\u884c\u540e\uff0c\u8c03\u7528 <strong><code>BeanPostProcessor<\/code> \u7684\u521d\u59cb\u5316\u540e\u65b9\u6cd5<\/strong>\uff08<code>postProcessAfterInitialization<\/code>\uff09\uff0c\u5728\u6b64\u9636\u6bb5 Spring \u4f1a\u5b8c\u6210 <strong>AOP \u52a8\u6001\u4ee3\u7406<\/strong>\u7684\u521b\u5efa\u3002<\/li>\n<li>\u5982\u679c Bean \u662f\u5355\u4f8b\u7684\uff0cSpring \u4f1a\u5c06\u5176\u653e\u5165<strong>\u5355\u4f8b\u6c60\uff08Singleton Pool\uff09<\/strong>\u4e2d\uff0c\u4f9b\u540e\u7eed\u4f7f\u7528\u3002<\/li>\n<li>Bean \u653e\u5165\u5355\u4f8b\u6c60\u540e\uff0c\u8fdb\u5165<strong>\u4f7f\u7528\u9636\u6bb5<\/strong>\uff0c\u5373\u7a0b\u5e8f\u8fd0\u884c\u671f\u6b63\u5e38\u4f7f\u7528\u8be5 Bean\u3002<\/li>\n<li>\u5f53\u5bb9\u5668\u5173\u95ed\u65f6\uff0cSpring \u4f1a\u8c03\u7528 Bean \u7684<strong>\u9500\u6bc1\u65b9\u6cd5<\/strong>\uff08\u5982 <code>@PreDestroy<\/code> \u6216\u5b9e\u73b0 <code>DisposableBean<\/code> \u63a5\u53e3\u7684 <code>destroy()<\/code> \u65b9\u6cd5\uff09\u3002<\/li>\n<li>\u6574\u4e2a\u751f\u547d\u5468\u671f\u7684\u7b80\u8981\u6d41\u7a0b\u53ef\u6982\u62ec\u4e3a\uff1a<strong>\u89e3\u6790\u7c7b \u2192 \u5b9e\u4f8b\u5316 \u2192 \u5c5e\u6027\u586b\u5145 \u2192 Aware \u56de\u8c03 \u2192 \u521d\u59cb\u5316\u524d\u5904\u7406 \u2192 \u521d\u59cb\u5316 \u2192 \u521d\u59cb\u5316\u540e\u5904\u7406\uff08AOP\uff09\u2192 \u653e\u5165\u5355\u4f8b\u6c60 \u2192 \u4f7f\u7528 \u2192 \u9500\u6bc1<\/strong>\u3002<\/li>\n<\/ol>\n<h2>37-spring\u652f\u6301\u7684bean\u4f5c\u7528\u57df<\/h2>\n<hr \/>\n<ol>\n<li><code>singleton<\/code>\uff08\u9ed8\u8ba4\uff09\uff1a\u6bcf\u4e2a Spring \u5bb9\u5668\u4e2d\u53ea\u6709\u4e00\u4e2a Bean \u5b9e\u4f8b\uff0c\u751f\u547d\u5468\u671f\u4e0e IoC \u5bb9\u5668\u4e00\u81f4\uff0c\u5728\u7b2c\u4e00\u6b21\u88ab\u6ce8\u5165\u65f6\u521b\u5efa\u3002<\/li>\n<li><code>prototype<\/code>\uff08\u539f\u578b\uff09\uff1a\u6bcf\u6b21\u83b7\u53d6\uff08<code>getBean()<\/code>\uff09\u6216\u6ce8\u5165\u90fd\u4f1a\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5b9e\u4f8b\uff0c\u5bb9\u5668\u4e2d\u53ef\u4ee5\u6709\u591a\u4e2a\u5b9e\u4f8b\u3002<\/li>\n<li><code>request<\/code>\uff1a\u6bcf\u4e2a HTTP \u8bf7\u6c42\u4f1a\u521b\u5efa\u4e00\u4e2a Bean \u5b9e\u4f8b\uff0c\u8bf7\u6c42\u7ed3\u675f\u540e\u8be5\u5b9e\u4f8b\u88ab\u56de\u6536\uff0c\u4ec5\u5728 Web \u5e94\u7528\u4e2d\u6709\u6548\u3002<\/li>\n<li><code>session<\/code>\uff1a\u6bcf\u4e2a HTTP Session \u4e2d\u6709\u4e00\u4e2a Bean \u5b9e\u4f8b\uff0cSession \u5931\u6548\u65f6\u5b9e\u4f8b\u968f\u4e4b\u9500\u6bc1\uff0c\u4ec5\u5728 Web \u5e94\u7528\u4e2d\u6709\u6548\u3002<\/li>\n<li><code>application<\/code>\uff1aBean \u5b9a\u4e49\u5728 <code>ServletContext<\/code> \u4e2d\uff0c\u5728\u6574\u4e2a Web \u5e94\u7528\u751f\u547d\u5468\u671f\u5185\u53ea\u6709\u4e00\u4e2a\u5355\u4f8b\u5b9e\u4f8b\uff0c\u53ef\u4ee5\u8de8\u591a\u4e2a Spring \u5bb9\u5668\u5171\u4eab\u3002<\/li>\n<li><code>websocket<\/code>\uff1aBean \u5b9a\u4e49\u5728 WebSocket \u7684\u751f\u547d\u5468\u671f\u4e2d\uff0c\u5728\u6574\u4e2a WebSocket \u4f1a\u8bdd\u671f\u95f4\u53ea\u6709\u4e00\u4e2a\u5355\u4f8b\u5b9e\u4f8b\u3002<\/li>\n<li><code>globalSession<\/code>\uff1a\u5168\u5c40 Session \u4f5c\u7528\u57df\uff0c\u4ec5\u4e0e Portlet \u5e94\u7528\u76f8\u5173\uff0c\u76ee\u524d\u57fa\u672c\u5df2\u4e0d\u518d\u4f7f\u7528\uff0c\u4e86\u89e3\u5373\u53ef\u3002<\/li>\n<\/ol>\n<h2>38-Spring\u6846\u67b6\u4e2d\u7684\u5355\u4f8bBean\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\u4e48<\/h2>\n<hr \/>\n<ol>\n<li>Spring \u6846\u67b6\u4e2d\u7684\u5355\u4f8b Bean <strong>\u9ed8\u8ba4\u4e0d\u662f\u7ebf\u7a0b\u5b89\u5168\u7684<\/strong>\uff0cSpring \u672c\u8eab\u5e76\u672a\u5bf9\u5355\u4f8b Bean \u8fdb\u884c\u591a\u7ebf\u7a0b\u5b89\u5168\u5c01\u88c5\u5904\u7406\u3002<\/li>\n<li>\u5355\u4f8b Bean \u662f\u5426\u7ebf\u7a0b\u5b89\u5168\uff0c\u53d6\u51b3\u4e8e\u5b83<strong>\u662f\u5426\u6709\u72b6\u6001<\/strong>\uff08\u5373\u662f\u5426\u5b58\u50a8\u4e86\u53ef\u53d8\u6570\u636e\uff09\u3002<\/li>\n<li><strong>\u65e0\u72b6\u6001 Bean<\/strong>\uff08\u5982\u53ea\u4f9d\u8d56\u5176\u4ed6 Service \u6216 DAO\uff0c\u4e0d\u5b58\u50a8\u6570\u636e\uff09\u662f\u5b89\u5168\u7684\uff0c\u4e0d\u5b58\u5728\u7ebf\u7a0b\u5b89\u5168\u95ee\u9898\u3002<\/li>\n<li><strong>\u6709\u72b6\u6001 Bean<\/strong>\uff08\u5982\u7c7b\u4e2d\u5b9a\u4e49\u4e86\u5168\u5c40\u53d8\u91cf\u5b58\u50a8\u6570\u636e\uff0c\u4f8b\u5982 <code>count<\/code> \u8ba1\u6570\u5668\uff09\u662f<strong>\u7ebf\u7a0b\u4e0d\u5b89\u5168\u7684<\/strong>\uff0c\u591a\u7ebf\u7a0b\u8bbf\u95ee\u65f6\u4f1a\u51fa\u73b0\u5e76\u53d1\u95ee\u9898\u3002<\/li>\n<li>Spring \u8bbe\u8ba1\u4e4b\u521d\u9ed8\u8ba4 Controller\u3001Service\u3001DAO \u5e94\u8be5\u662f<strong>\u65e0\u72b6\u6001\u7684<\/strong>\uff0c\u4e0d\u5e94\u8be5\u5728\u5176\u4e2d\u5b58\u50a8\u53ef\u53d8\u7684\u5171\u4eab\u6570\u636e\u3002<\/li>\n<li>\u5982\u679c\u9700\u8981\u5b58\u50a8\u7ebf\u7a0b\u7ea7\u522b\u7684\u6570\u636e\uff0c\u53ef\u4ee5\u4f7f\u7528 <strong><code>ThreadLocal<\/code><\/strong> \u6765\u5b9e\u73b0\u7ebf\u7a0b\u95f4\u6570\u636e\u9694\u79bb\uff08\u5982 Spring \u4e8b\u52a1\u7ba1\u7406\u5668\u7528 <code>ThreadLocal<\/code> \u7ba1\u7406\u6570\u636e\u5e93\u8fde\u63a5\uff09\u3002<\/li>\n<li>\u5982\u679c\u786e\u5b9e\u9700\u8981\u5168\u5c40\u5171\u4eab\u53d8\u91cf\uff08\u5982 <code>static<\/code> \u53d8\u91cf\uff09\uff0c\u5f00\u53d1\u8005<strong>\u5fc5\u987b\u81ea\u884c\u52a0\u9501<\/strong>\uff08\u5982 <code>synchronized<\/code> \u6216 CAS\uff09\u6765\u4fdd\u8bc1\u7ebf\u7a0b\u5b89\u5168\u3002<\/li>\n<li>\u603b\u7ed3\u7ed3\u8bba\uff1aSpring \u5355\u4f8b Bean \u672c\u8eab\u4e0d\u5b89\u5168\uff0c\u7ebf\u7a0b\u5b89\u5168\u9700\u8981\u5f00\u53d1\u8005<strong>\u81ea\u884c\u4fdd\u8bc1<\/strong>\uff0c\u4e0d\u8981\u4f9d\u8d56 Spring \u6846\u67b6\u3002<\/li>\n<\/ol>\n<h2>39-spring\u6846\u67b6\u4e2d\u4f7f\u7528\u4e86\u54ea\u4e9b\u8bbe\u8ba1\u6a21\u5f0f\u53ca\u5e94\u7528\u573a\u666f<\/h2>\n<hr \/>\n<ol>\n<li><strong>\u7b80\u5355\u5de5\u5382\u6a21\u5f0f<\/strong>\uff1a<code>BeanFactory<\/code> \u6839\u636e\u4f20\u5165\u7684\u552f\u4e00\u6807\u8bc6\uff08\u5982 <code>getBean(\"beanName\")<\/code>\uff09\u52a8\u6001\u51b3\u5b9a\u521b\u5efa\u5e76\u8fd4\u56de\u54ea\u4e2a\u4ea7\u54c1\u7c7b\u5b9e\u4f8b\u3002<\/li>\n<li><strong>\u5de5\u5382\u65b9\u6cd5\u6a21\u5f0f<\/strong>\uff1a\u5b9e\u73b0 <code>FactoryBean<\/code> \u63a5\u53e3\u7684 Bean\uff0c\u901a\u8fc7\u91cd\u5199 <code>getObject()<\/code> \u65b9\u6cd5\u81ea\u5b9a\u4e49\u8fd4\u56de\u7684\u5bf9\u8c61\uff0c\u8fd4\u56de\u7684\u53ef\u4ee5\u4e0d\u662f\u8be5\u7c7b\u7684\u5b9e\u4f8b\u3002<\/li>\n<li><strong>\u5355\u4f8b\u6a21\u5f0f<\/strong>\uff1aSpring \u4e2d\u9ed8\u8ba4\u521b\u5efa\u7684 Bean \u90fd\u662f\u5355\u4f8b\u7684\uff0c\u6bcf\u4e2a\u5bb9\u5668\u4e2d\u53ea\u6709\u4e00\u4e2a\u5b9e\u4f8b\u3002<\/li>\n<li><strong>\u9002\u914d\u5668\u6a21\u5f0f<\/strong>\uff1aSpring MVC \u4e2d\u7684 <code>HandlerAdapter<\/code> \u9488\u5bf9\u4e0d\u540c\u7c7b\u578b\u7684 Controller\uff08\u5982\u5b9e\u73b0 Controller \u63a5\u53e3\u3001\u4f7f\u7528 <code>@Controller<\/code> \u6ce8\u89e3\u3001Servlet \u7b49\uff09\u63d0\u4f9b\u5bf9\u5e94\u7684\u9002\u914d\u5668\uff0c\u7edf\u4e00\u8c03\u7528\u65b9\u5f0f\u3002<\/li>\n<li><strong>\u88c5\u9970\u5668\u6a21\u5f0f<\/strong>\uff1aSpring \u4e2d\u7c7b\u540d\u5e26\u6709 <code>Wrapper<\/code> \u6216 <code>Decorator<\/code> \u540e\u7f00\u7684\u7c7b\uff0c\u5747\u4f7f\u7528\u4e86\u88c5\u9970\u5668\u6a21\u5f0f\uff08\u5982 <code>BeanWrapper<\/code>\uff09\u3002<\/li>\n<li><strong>\u52a8\u6001\u4ee3\u7406\u6a21\u5f0f<\/strong>\uff1aSpring AOP \u5e95\u5c42\u901a\u8fc7\u52a8\u6001\u4ee3\u7406\u5b9e\u73b0\uff0c\u4e3a\u76ee\u6807\u5bf9\u8c61\u751f\u6210\u4ee3\u7406\u5bf9\u8c61\u4ee5\u589e\u5f3a\u529f\u80fd\u3002<\/li>\n<li><strong>\u89c2\u5bdf\u8005\u6a21\u5f0f<\/strong>\uff1aSpring \u7684\u4e8b\u4ef6\u9a71\u52a8\u6a21\u578b\uff08ApplicationListener\u3001ApplicationEvent\uff09\u4f7f\u7528\u4e86\u89c2\u5bdf\u8005\u6a21\u5f0f\uff0c\u5b9e\u73b0\u4e8b\u4ef6\u53d1\u5e03\u4e0e\u76d1\u542c\u3002<\/li>\n<li><strong>\u7b56\u7565\u6a21\u5f0f<\/strong>\uff1aSpring \u7684 <code>Resource<\/code> \u63a5\u53e3\u9488\u5bf9\u4e0d\u540c\u7c7b\u578b\u7684\u8d44\u6e90\u6587\u4ef6\uff08\u5982 <code>ClassPathResource<\/code>\u3001<code>FileSystemResource<\/code>\uff09\u91c7\u7528\u4e0d\u540c\u7684\u8bbf\u95ee\u7b56\u7565\u3002<\/li>\n<\/ol>\n<h2>40-spring\u4e8b\u52a1\u7684\u5b9e\u73b0\u65b9\u5f0f\u539f\u7406\u4ee5\u53ca\u9694\u79bb\u7ea7\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Spring \u4e8b\u52a1\u7684\u4e24\u79cd\u5b9e\u73b0\u65b9\u5f0f<\/h3>\n<ol>\n<li><strong>\u7f16\u7a0b\u5f0f\u4e8b\u52a1<\/strong>\uff1a\u7a0b\u5e8f\u5458\u5728\u4ee3\u7801\u4e2d\u624b\u52a8\u8c03\u7528 Spring \u63d0\u4f9b\u7684 API \u6765\u63a7\u5236\u4e8b\u52a1\u7684\u5f00\u542f\uff08begin\uff09\u3001\u63d0\u4ea4\uff08commit\uff09\u548c\u56de\u6eda\uff08rollback\uff09\u3002<\/li>\n<li><strong>\u58f0\u660e\u5f0f\u4e8b\u52a1\uff08<code>@Transactional<\/code>\uff09<\/strong>\uff1a\u901a\u8fc7\u6ce8\u89e3\u65b9\u5f0f\u5b9e\u73b0\u4e8b\u52a1\u7ba1\u7406\uff0cSpring \u4f1a\u4e3a\u52a0\u4e86\u8be5\u6ce8\u89e3\u7684\u7c7b\u751f\u6210\u4ee3\u7406\u5bf9\u8c61\u5e76\u653e\u5165 IoC \u5bb9\u5668\uff0c\u7531\u4ee3\u7406\u5bf9\u8c61\u63a7\u5236\u4e8b\u52a1\u3002<\/li>\n<li>\u58f0\u660e\u5f0f\u4e8b\u52a1\u7684\u5e95\u5c42\u539f\u7406\uff1a\u4ee3\u7406\u5bf9\u8c61\u5728\u6267\u884c\u76ee\u6807\u65b9\u6cd5\u524d\uff0c\u5c06\u6570\u636e\u5e93\u7684\u81ea\u52a8\u63d0\u4ea4\uff08<code>autoCommit<\/code>\uff09\u8bbe\u7f6e\u4e3a <code>false<\/code>\uff08\u6539\u4e3a\u624b\u52a8\u63d0\u4ea4\uff09\uff0c\u7136\u540e\u6267\u884c\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n<li>\u5982\u679c\u4e1a\u52a1\u903b\u8f91\u6b63\u5e38\u6267\u884c\u5b8c\u6bd5\uff0c\u4ee3\u7406\u5bf9\u8c61\u63d0\u4ea4\u4e8b\u52a1\uff1b\u5982\u679c\u629b\u51fa\u5f02\u5e38\uff0c\u5219\u56de\u6eda\u4e8b\u52a1\u3002<\/li>\n<li>\u5f02\u5e38\u56de\u6eda\u7684\u524d\u63d0\u662f\u5f02\u5e38\u5fc5\u987b<strong>\u629b\u51fa<\/strong>\uff0c\u4e0d\u80fd <code>catch<\/code> \u540e\u541e\u6389\uff0c\u5426\u5219\u4ee3\u7406\u5bf9\u8c61\u611f\u77e5\u4e0d\u5230\u5f02\u5e38\uff0c\u4e0d\u4f1a\u56de\u6eda\u3002<\/li>\n<li>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff08\u4e0d\u914d\u7f6e <code>rollbackFor<\/code>\uff09\uff0cSpring \u53ea\u4f1a\u5bf9 <code>RuntimeException<\/code> \u548c <code>Error<\/code> \u8fdb\u884c\u56de\u6eda\uff0c\u53d7\u68c0\u5f02\u5e38\uff08<code>Exception<\/code>\uff09\u9ed8\u8ba4\u4e0d\u56de\u6eda\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Spring \u4e8b\u52a1\u7684\u9694\u79bb\u7ea7\u522b<\/h3>\n<ol start=\"7\">\n<li>Spring \u7684\u4e8b\u52a1\u9694\u79bb\u7ea7\u522b\u672c\u8d28\u4e0a\u5c31\u662f\u6570\u636e\u5e93\u7684\u9694\u79bb\u7ea7\u522b\uff0cSpring \u5728\u6570\u636e\u5e93\u57fa\u7840\u4e0a\u589e\u52a0\u4e86\u4e00\u4e2a&#8221;\u9ed8\u8ba4\u7ea7\u522b&#8221;\u3002<\/li>\n<li>\u56db\u79cd\u7ecf\u5178\u9694\u79bb\u7ea7\u522b\uff08\u4ece\u4f4e\u5230\u9ad8\uff09\uff1a<strong>READ_UNCOMMITTED\uff08\u672a\u63d0\u4ea4\u8bfb\uff09<\/strong>\u3001<strong>READ_COMMITTED\uff08\u63d0\u4ea4\u8bfb\uff0cRC\uff09<\/strong>\u3001<strong>REPEATABLE_READ\uff08\u53ef\u91cd\u590d\u8bfb\uff0cRR\uff09<\/strong>\u3001<strong>SERIALIZABLE\uff08\u53ef\u4e32\u884c\u5316\uff09<\/strong>\u3002<\/li>\n<li>\u9694\u79bb\u7ea7\u522b\u8d8a\u9ad8\uff0c\u6570\u636e\u4e00\u81f4\u6027\u8d8a\u597d\uff0c\u4f46\u5e76\u53d1\u6027\u80fd\u8d8a\u4f4e\uff1b\u9694\u79bb\u7ea7\u522b\u8d8a\u4f4e\uff0c\u5e76\u53d1\u6027\u80fd\u8d8a\u9ad8\u3002<\/li>\n<li>\u5982\u679c\u540c\u65f6\u914d\u7f6e\u4e86\u6570\u636e\u5e93\u9694\u79bb\u7ea7\u522b\u548c Spring \u9694\u79bb\u7ea7\u522b\uff0c<strong>\u4ee5 Spring \u914d\u7f6e\u7684\u4e3a\u51c6<\/strong>\uff0c\u5b83\u4f1a\u8986\u76d6\u6570\u636e\u5e93\u7684\u9ed8\u8ba4\u9694\u79bb\u7ea7\u522b\u3002<\/li>\n<li>\u5982\u679c Spring \u914d\u7f6e\u7684\u9694\u79bb\u7ea7\u522b\u6570\u636e\u5e93\u4e0d\u652f\u6301\uff0c\u6700\u7ec8\u6548\u679c\u53d6\u51b3\u4e8e\u5177\u4f53\u4f7f\u7528\u7684\u6570\u636e\u5e93\uff08\u4e0d\u540c\u6570\u636e\u5e93\u5904\u7406\u65b9\u5f0f\u4e0d\u540c\uff09\u3002<\/li>\n<li>Oracle \u7684\u9ed8\u8ba4\u9694\u79bb\u7ea7\u522b\u662f <code>READ_COMMITTED<\/code>\uff08RC\uff09\uff0cMySQL \u7684\u9ed8\u8ba4\u9694\u79bb\u7ea7\u522b\u662f <code>REPEATABLE_READ<\/code>\uff08RR\uff09\u3002<\/li>\n<\/ol>\n<h2>41-spring\u7684\u4e8b\u52a1\u4f20\u64ad\u673a\u5236<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u4e8b\u52a1\u4f20\u64ad\u673a\u5236\u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>\u4e8b\u52a1\u4f20\u64ad\u673a\u5236<\/strong>\u5b9a\u4e49\u4e86\u591a\u4e2a\u4e8b\u52a1\u65b9\u6cd5\u76f8\u4e92\u8c03\u7528\u65f6\uff0c\u4e8b\u52a1\u5982\u4f55\u5728\u65b9\u6cd5\u95f4\u4f20\u64ad\u548c\u534f\u8c03\u3002<\/li>\n<li>\u4f8b\u5982\u65b9\u6cd5 A \u8c03\u7528\u65b9\u6cd5 B\uff0c\u4e24\u8005\u5404\u81ea\u53ef\u80fd\u6709\u4e8b\u52a1\uff0c\u4e8b\u52a1\u4f20\u64ad\u673a\u5236\u51b3\u5b9a\u4e86 A \u548c B \u7684\u4e8b\u52a1\u662f\u5408\u5e76\u4e3a\u4e00\u4e2a\u3001\u5404\u81ea\u72ec\u7acb\u3001\u8fd8\u662f\u5d4c\u5957\u7b49\u5173\u7cfb\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u4e03\u79cd\u4e8b\u52a1\u4f20\u64ad\u884c\u4e3a<\/h3>\n<ol start=\"3\">\n<li><strong><code>REQUIRED<\/code>\uff08\u9ed8\u8ba4\uff09<\/strong>\uff1a\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u52a0\u5165\u8be5\u4e8b\u52a1\uff1b\u5982\u679c\u5f53\u524d\u6ca1\u6709\u4e8b\u52a1\uff0c\u5219\u65b0\u5efa\u4e00\u4e2a\u4e8b\u52a1\u3002A \u6709\u4e8b\u52a1\u5219 B \u52a0\u5165 A\uff0cA \u65e0\u4e8b\u52a1\u5219 B \u65b0\u5efa\u3002<\/li>\n<li><strong><code>SUPPORTS<\/code><\/strong>\uff1a\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u52a0\u5165\u8be5\u4e8b\u52a1\uff1b\u5982\u679c\u5f53\u524d\u6ca1\u6709\u4e8b\u52a1\uff0c\u5219\u4ee5\u975e\u4e8b\u52a1\u65b9\u5f0f\u8fd0\u884c\u3002<\/li>\n<li><strong><code>MANDATORY<\/code><\/strong>\uff1a\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u52a0\u5165\u8be5\u4e8b\u52a1\uff1b\u5982\u679c\u5f53\u524d\u6ca1\u6709\u4e8b\u52a1\uff0c\u5219\u629b\u51fa\u5f02\u5e38\uff08\u5fc5\u987b\u4ee5\u4e8b\u52a1\u65b9\u5f0f\u8fd0\u884c\uff09\u3002<\/li>\n<li><strong><code>REQUIRES_NEW<\/code><\/strong>\uff1a\u59cb\u7ec8\u65b0\u5efa\u4e00\u4e2a\u72ec\u7acb\u4e8b\u52a1\u3002\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u5c06\u5f53\u524d\u4e8b\u52a1<strong>\u6302\u8d77<\/strong>\uff0cA \u548c B \u5404\u81ea\u62e5\u6709\u72ec\u7acb\u7684\u4e8b\u52a1\uff0c\u4e92\u4e0d\u5f71\u54cd\u3002<\/li>\n<li><strong><code>NOT_SUPPORTED<\/code><\/strong>\uff1a\u59cb\u7ec8\u4ee5\u975e\u4e8b\u52a1\u65b9\u5f0f\u8fd0\u884c\u3002\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u6302\u8d77\u8be5\u4e8b\u52a1\uff0cB \u4e0d\u4ee5\u4e8b\u52a1\u65b9\u5f0f\u6267\u884c\u3002<\/li>\n<li><strong><code>NEVER<\/code><\/strong>\uff1a\u5fc5\u987b\u4ee5\u975e\u4e8b\u52a1\u65b9\u5f0f\u8fd0\u884c\u3002\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u629b\u51fa\u5f02\u5e38\uff08\u4e0d\u5141\u8bb8\u5b58\u5728\u4e8b\u52a1\uff09\u3002<\/li>\n<li><strong><code>NESTED<\/code>\uff08\u5d4c\u5957\u4e8b\u52a1\uff09<\/strong>\uff1a\u5982\u679c\u5f53\u524d\u5b58\u5728\u4e8b\u52a1\uff0c\u5219\u5f00\u542f\u4e00\u4e2a\u5d4c\u5957\u4e8b\u52a1\uff08\u5b50\u4e8b\u52a1\uff09\uff1b\u5982\u679c\u5f53\u524d\u6ca1\u6709\u4e8b\u52a1\uff0c\u5219\u65b0\u5efa\u4e00\u4e2a\u4e8b\u52a1\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5d4c\u5957\u4e8b\u52a1\uff08NESTED\uff09\u4e0e REQUIRES_NEW\u3001REQUIRED \u7684\u533a\u522b<\/h3>\n<ol start=\"10\">\n<li><code>REQUIRES_NEW<\/code> \u4e0e\u539f\u6709\u4e8b\u52a1\u65e0\u5173\uff0c\u5404\u81ea\u5f00\u542f\u72ec\u7acb\u4e8b\u52a1\uff1b\u800c <code>NESTED<\/code> \u662f\u5d4c\u5957\u5728\u539f\u6709\u4e8b\u52a1\u4e2d\u7684\u5b50\u4e8b\u52a1\uff0c\u4e0e\u7236\u4e8b\u52a1\u6709\u5173\u8054\u3002<\/li>\n<li><code>NESTED<\/code> \u4e2d\uff1a<strong>\u7236\u4e8b\u52a1\u56de\u6eda\u65f6\uff0c\u5b50\u4e8b\u52a1\u4e5f\u4f1a\u8ddf\u7740\u56de\u6eda<\/strong>\uff08\u7236\u5f71\u54cd\u5b50\uff09\u3002<\/li>\n<li><code>NESTED<\/code> \u4e2d\uff1a<strong>\u5b50\u4e8b\u52a1\u56de\u6eda\u65f6\uff0c\u7236\u4e8b\u52a1\u4e0d\u4e00\u5b9a\u56de\u6eda<\/strong>\uff0c\u53d6\u51b3\u4e8e\u7236\u4e8b\u52a1\u662f\u5426\u6355\u83b7\u5e76\u5904\u7406\u4e86\u5b50\u4e8b\u52a1\u7684\u5f02\u5e38\uff08\u5982\u679c <code>catch<\/code> \u5403\u6389\u5f02\u5e38\uff0c\u7236\u4e8b\u52a1\u4e0d\u53d7\u5f71\u54cd\uff09\u3002<\/li>\n<li><code>REQUIRED<\/code> \u4e2d A \u548c B \u662f\u540c\u4e00\u4e2a\u4e8b\u52a1\uff0cB \u56de\u6eda\u65f6 A \u5fc5\u7136\u56de\u6eda\uff1b<code>NESTED<\/code> \u4e2d B \u56de\u6eda\u65f6 A \u4e0d\u4e00\u5b9a\u56de\u6eda\uff0c\u7ed9\u4e86\u7236\u4e8b\u52a1\u66f4\u591a\u63a7\u5236\u6743\u3002<\/li>\n<\/ol>\n<h2>42-spring\u4e8b\u52a1\u4ec0\u4e48\u65f6\u5019\u4f1a\u5931\u6548<\/h2>\n<hr \/>\n<ol>\n<li><strong>\u81ea\u8c03\u7528\uff08\u5185\u90e8\u8c03\u7528\uff09<\/strong>\uff1a\u5728\u540c\u4e00\u4e2a\u7c7b\u4e2d\uff0c\u901a\u8fc7 <code>this<\/code>\uff08\u5bf9\u8c61\u672c\u8eab\uff09\u8c03\u7528\u88ab <code>@Transactional<\/code> \u4fee\u9970\u7684\u65b9\u6cd5\u65f6\uff0c\u4e0d\u4f1a\u8d70\u4ee3\u7406\u5bf9\u8c61\uff0c\u4e8b\u52a1\u5931\u6548\uff08\u89e3\u51b3\u65b9\u6cd5\uff1a\u6539\u7528\u6ce8\u5165\u7684\u4ee3\u7406\u5bf9\u8c61\u6765\u8c03\u7528\uff09\u3002<\/li>\n<li><strong>\u65b9\u6cd5\u4e0d\u662f <code>public<\/code> \u7684<\/strong>\uff1aSpring \u58f0\u660e\u5f0f\u4e8b\u52a1\u9ed8\u8ba4\u53ea\u652f\u6301 <code>public<\/code> \u65b9\u6cd5\uff0c\u5982\u679c\u7528\u5728 <code>private<\/code>\u3001<code>protected<\/code> \u6216\u9ed8\u8ba4\u8bbf\u95ee\u4fee\u9970\u7b26\u7684\u65b9\u6cd5\u4e0a\uff0c\u4e8b\u52a1\u5931\u6548\uff08\u9664\u975e\u5f00\u542f <code>aspectj<\/code> \u4ee3\u7406\u6a21\u5f0f\uff09\u3002<\/li>\n<li><strong>\u6570\u636e\u5e93\u4e0d\u652f\u6301\u4e8b\u52a1<\/strong>\uff1aSpring \u4e8b\u52a1\u672c\u8d28\u4e0a\u662f\u6570\u636e\u5e93\u4e8b\u52a1\u7684\u5c01\u88c5\uff0c\u5982\u679c\u6570\u636e\u5e93\u5f15\u64ce\u4e0d\u652f\u6301\u4e8b\u52a1\uff08\u5982 MySQL \u7684 MyISAM \u5f15\u64ce\uff09\uff0c\u4e8b\u52a1\u5fc5\u7136\u5931\u6548\u3002<\/li>\n<li><strong>\u7c7b\u672a\u88ab Spring \u7ba1\u7406<\/strong>\uff1a\u7c7b\u4e0a\u6ca1\u6709 <code>@Service<\/code>\u3001<code>@Component<\/code> \u7b49\u6ce8\u89e3\uff0c\u672a\u88ab\u626b\u63cf\u5e76\u653e\u5165 IoC \u5bb9\u5668\uff0c\u4ec5\u52a0 <code>@Transactional<\/code> \u65e0\u6548\u3002<\/li>\n<li><strong>\u5f02\u5e38\u88ab\u541e\u6389\uff08catch \u540e\u672a\u629b\u51fa\uff09<\/strong>\uff1a\u4e8b\u52a1\u56de\u6eda\u4f9d\u8d56\u4e8e\u5f02\u5e38\u88ab\u629b\u51fa\uff0c\u5982\u679c\u4e1a\u52a1\u4ee3\u7801\u4e2d <code>catch<\/code> \u4e86\u5f02\u5e38\u5374\u6ca1\u6709\u91cd\u65b0\u629b\u51fa\uff0c\u4e8b\u52a1\u611f\u77e5\u4e0d\u5230\u5f02\u5e38\uff0c\u4e0d\u4f1a\u56de\u6eda\u3002<\/li>\n<\/ol>\n<h2>43-\u4ec0\u4e48\u7684\u662fbean\u7684\u81ea\u52a8\u88c5\u914d\uff0c\u6709\u54ea\u4e9b\u65b9\u5f0f<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u624b\u52a8\u88c5\u914d vs \u81ea\u52a8\u88c5\u914d<\/h3>\n<ol>\n<li><strong>\u624b\u52a8\u88c5\u914d<\/strong>\uff1a\u5728 XML \u914d\u7f6e\u4e2d\u901a\u8fc7 <code>&lt;property&gt;<\/code> \u7684 <code>ref<\/code> \u5c5e\u6027\u6216 <code>value<\/code> \u5c5e\u6027\uff0c\u624b\u52a8\u4e3a Bean \u7684\u5c5e\u6027\u8d4b\u503c\u6216\u6ce8\u5165\u4f9d\u8d56\u3002<\/li>\n<li><strong>\u81ea\u52a8\u88c5\u914d<\/strong>\uff1a\u5728 XML \u4e2d\u901a\u8fc7 <code>&lt;bean&gt;<\/code> \u6807\u7b7e\u7684 <code>autowire<\/code> \u5c5e\u6027\u6307\u5b9a\u88c5\u914d\u6a21\u5f0f\uff0cSpring \u4f1a\u81ea\u52a8\u5b8c\u6210\u4f9d\u8d56\u6ce8\u5165\uff0c\u65e0\u9700\u624b\u52a8\u5199 <code>ref<\/code>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Spring XML \u914d\u7f6e\u4e2d\u7684\u56db\u79cd\u81ea\u52a8\u88c5\u914d\u65b9\u5f0f<\/h3>\n<ol start=\"3\">\n<li><strong><code>byName<\/code><\/strong>\uff1aSpring \u6839\u636e\u5c5e\u6027\u540d\uff08\u5982 <code>position<\/code>\uff09\u5230 IoC \u5bb9\u5668\u4e2d\u67e5\u627e id \u4e0e\u8be5\u5c5e\u6027\u540d\u76f8\u540c\u7684 Bean\uff0c\u901a\u8fc7 setter \u65b9\u6cd5\u6ce8\u5165\u3002<\/li>\n<li><strong><code>byType<\/code><\/strong>\uff1aSpring \u6839\u636e\u5c5e\u6027\u7684\u7c7b\u578b\u5230 IoC \u5bb9\u5668\u4e2d\u67e5\u627e\u5339\u914d\u7684 Bean\uff0c\u901a\u8fc7 setter \u65b9\u6cd5\u6ce8\u5165\uff1b\u5982\u679c\u8be5\u7c7b\u578b\u6709\u591a\u4e2a Bean\uff0c\u9ed8\u8ba4\u62a5\u9519\uff0c\u53ef\u7528 <code>@Qualifier<\/code> \u6307\u5b9a\u5177\u4f53\u54ea\u4e00\u4e2a\u3002<\/li>\n<li><strong><code>constructor<\/code><\/strong>\uff1a\u7c7b\u4f3c\u4e8e <code>byType<\/code>\uff0c\u4f46\u5e94\u7528\u4e8e\u6784\u9020\u5668\u7684\u53c2\u6570\u6ce8\u5165\uff0cSpring \u6839\u636e\u6784\u9020\u5668\u53c2\u6570\u7c7b\u578b\u5339\u914d\u5e76\u6ce8\u5165\u5bf9\u5e94\u7684 Bean\u3002<\/li>\n<li><strong><code>autodetect<\/code><\/strong>\uff1aSpring \u81ea\u52a8\u68c0\u6d4b\u2014\u2014\u5982\u679c\u7c7b\u6709\u9ed8\u8ba4\u6784\u9020\u5668\u4e14\u6784\u9020\u5668\u53ef\u6ce8\u5165\uff0c\u5219\u91c7\u7528 <code>constructor<\/code> \u65b9\u5f0f\uff1b\u5426\u5219\u91c7\u7528 <code>byType<\/code> \u65b9\u5f0f\uff08\u5b9e\u9645\u662f\u524d\u4e24\u79cd\u7684\u7ec4\u5408\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u6ce8\u89e3\u65b9\u5f0f\u81ea\u52a8\u88c5\u914d<\/h3>\n<ol start=\"7\">\n<li><strong><code>@Autowired<\/code><\/strong>\uff1a\u6ce8\u89e3\u65b9\u5f0f\u5b9e\u73b0\u81ea\u52a8\u88c5\u914d\uff0c\u53ef\u4ee5\u5728\u5b57\u6bb5\u3001setter \u65b9\u6cd5\u6216\u6784\u9020\u5668\u4e0a\u4f7f\u7528\uff0c\u662f Spring \u73b0\u5728\u4e3b\u6d41\u7684\u88c5\u914d\u65b9\u5f0f\u3002<\/li>\n<\/ol>\n<h2>44-spring\u3001springmvc\u3001 springboot\u533a\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Spring \u662f\u4ec0\u4e48<\/h3>\n<ol>\n<li><strong>Spring<\/strong> \u662f\u4e00\u4e2a <strong>IoC \u5bb9\u5668<\/strong>\uff0c\u7528\u4e8e\u7ba1\u7406 Bean\uff0c\u901a\u8fc7\u4f9d\u8d56\u6ce8\u5165\uff08DI\uff09\u5b9e\u73b0\u63a7\u5236\u53cd\u8f6c\uff08IoC\uff09\uff0c\u964d\u4f4e\u4ee3\u7801\u8026\u5408\u5ea6\u3002<\/li>\n<li>Spring \u63d0\u4f9b\u4e86 <strong>AOP\uff08\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff09<\/strong> \u673a\u5236\uff0c\u5c06\u65e5\u5fd7\u3001\u5f02\u5e38\u7b49\u91cd\u590d\u6027\u6a2a\u5207\u903b\u8f91\u5c01\u88c5\u6210\u5207\u9762\uff0c\u81ea\u52a8\u6ce8\u5165\u5230\u4e1a\u52a1\u65b9\u6cd5\u4e2d\uff0c\u5f25\u8865\u4e86 OOP \u7684\u4ee3\u7801\u91cd\u590d\u95ee\u9898\u3002<\/li>\n<li>Spring \u53ef\u4ee5\u65b9\u4fbf\u5730\u6574\u5408\u5404\u79cd\u6846\u67b6\uff08\u5982 MyBatis\u3001Redis \u7b49\uff09\uff0c\u88ab\u8a89\u4e3a&#8221;\u4e07\u80fd\u80f6&#8221;\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Spring MVC \u662f\u4ec0\u4e48<\/h3>\n<ol start=\"4\">\n<li><strong>Spring MVC<\/strong> \u662f Spring \u63d0\u4f9b\u7684\u4e00\u4e2a <strong>Web \u6846\u67b6<\/strong>\uff0c\u7528\u4e8e\u63a5\u6536\u548c\u5904\u7406 HTTP \u8bf7\u6c42\uff0c\u662f Spring \u6846\u67b6\u7684\u4e00\u90e8\u5206\u3002<\/li>\n<li>Spring MVC \u7684\u6838\u5fc3\u662f <strong><code>DispatcherServlet<\/code>\uff08\u524d\u7aef\u63a7\u5236\u5668\uff09<\/strong>\uff0c\u8d1f\u8d23\u7edf\u4e00\u63a5\u6536\u8bf7\u6c42\u3002<\/li>\n<li>Spring MVC \u5b9a\u4e49\u4e86\u5b8c\u6574\u7684\u8def\u7531\u7b56\u7565\uff08URL \u5230\u5904\u7406\u5668\u7684\u6620\u5c04\uff09\u4ee5\u53ca\u9002\u914d\u5668\u673a\u5236\uff08<code>HandlerAdapter<\/code>\uff09\u6765\u6267\u884c\u4e0d\u540c\u7684\u5904\u7406\u5668\uff0c\u5e76\u5c06\u7ed3\u679c\u901a\u8fc7\u89c6\u56fe\u89e3\u6790\u5668\u6e32\u67d3\u6210\u89c6\u56fe\u8fd4\u56de\u7ed9\u524d\u7aef\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Spring Boot \u662f\u4ec0\u4e48<\/h3>\n<ol start=\"7\">\n<li><strong>Spring Boot<\/strong> \u662f Spring \u5bb6\u65cf\u63d0\u4f9b\u7684<strong>\u5feb\u901f\u5f00\u53d1\u5de5\u5177\u5305<\/strong>\uff0c\u672c\u8d28\u4e0a\u5c31\u662f <strong>Spring + Spring MVC<\/strong>\uff0c\u5e76\u6ca1\u6709\u5f15\u5165\u5168\u65b0\u7684\u529f\u80fd\u3002<\/li>\n<li>Spring Boot \u7684\u6838\u5fc3\u7406\u5ff5\u662f<strong>\u7ea6\u5b9a\u5927\u4e8e\u914d\u7f6e<\/strong>\uff1a\u91c7\u7528\u5927\u91cf\u9ed8\u8ba4\u914d\u7f6e\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u8986\u76d6\u9700\u8981\u81ea\u5b9a\u4e49\u7684\u90e8\u5206\uff0c\u4ece\u800c\u5927\u5e45\u7b80\u5316\u914d\u7f6e\u3002<\/li>\n<li>Spring Boot \u63d0\u4f9b\u4e86 <strong>Starter\uff08\u8d77\u6b65\u4f9d\u8d56\uff09<\/strong> \u673a\u5236\uff0c\u6574\u5408 MyBatis\u3001Redis \u7b49\u7ec4\u4ef6\u65f6\u53ea\u9700\u5f15\u5165\u5bf9\u5e94\u7684 Starter \u5305\u5373\u53ef&#8221;\u5f00\u7bb1\u5373\u7528&#8221;\uff0c\u65e0\u9700\u624b\u52a8\u914d\u7f6e Bean\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4e09\u8005\u7684\u6838\u5fc3\u533a\u522b\u603b\u7ed3<\/h3>\n<ol start=\"10\">\n<li><strong>Spring<\/strong> \u662f<strong>\u5bb9\u5668\u6846\u67b6<\/strong>\uff08IoC + AOP\uff09\uff1b<strong>Spring MVC<\/strong> \u662f Spring \u7684<strong>Web \u6846\u67b6<\/strong>\uff1b<strong>Spring Boot<\/strong> \u662f\u57fa\u4e8e Spring \u548c Spring MVC \u7684<strong>\u5feb\u901f\u5f00\u53d1\u5de5\u5177\u5305<\/strong>\uff0c\u7b80\u5316\u4e86\u914d\u7f6e\u548c\u6574\u5408\u6d41\u7a0b\u3002<\/li>\n<\/ol>\n<h2>45-springmvc\u5de5\u4f5c\u6d41\u7a0b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Spring MVC \u5de5\u4f5c\u6d41\u7a0b\uff08\u6b65\u9aa4\uff09<\/h3>\n<ol>\n<li><strong>\u7528\u6237\u53d1\u9001\u8bf7\u6c42<\/strong>\u5230\u524d\u7aef\u63a7\u5236\u5668 <code>DispatcherServlet<\/code>\uff08\u672c\u8d28\u662f\u4e00\u4e2a Servlet\uff0c\u8d1f\u8d23\u7edf\u4e00\u63a5\u6536\u8bf7\u6c42\uff09\u3002<\/li>\n<li><code>DispatcherServlet<\/code> \u8c03\u7528 <strong><code>HandlerMapping<\/code>\uff08\u5904\u7406\u5668\u6620\u5c04\u5668\uff09<\/strong>\uff0c\u6839\u636e URL \u67e5\u627e\u5bf9\u5e94\u7684\u5904\u7406\u5668\uff08<code>Handler<\/code>\uff09\u3002<\/li>\n<li><code>HandlerMapping<\/code> \u7ef4\u62a4 URL \u5230\u5904\u7406\u5668\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u904d\u5386\u6240\u6709\u6620\u5c04\u5668\u627e\u5230\u5339\u914d\u7684\u5904\u7406\u5668\u540e\u8fd4\u56de\u7ed9 <code>DispatcherServlet<\/code>\u3002<\/li>\n<li><code>DispatcherServlet<\/code> \u8c03\u7528 <strong><code>HandlerAdapter<\/code>\uff08\u5904\u7406\u5668\u9002\u914d\u5668\uff09<\/strong>\uff0c\u901a\u8fc7\u9002\u914d\u5668\u6a21\u5f0f\u6267\u884c\u5177\u4f53\u7684\u5904\u7406\u5668\u3002<\/li>\n<li>\u4e0d\u540c\u7684\u5904\u7406\u5668\u7c7b\u578b\uff08\u5982\u5b9e\u73b0 <code>Controller<\/code> \u63a5\u53e3\u3001\u4f7f\u7528 <code>@RequestMapping<\/code> \u6ce8\u89e3\u3001Servlet \u7b49\uff09\u5bf9\u5e94\u4e0d\u540c\u7684\u9002\u914d\u5668\uff0c\u9002\u914d\u5668\u901a\u8fc7 <code>support()<\/code> \u65b9\u6cd5\u5224\u65ad\u662f\u5426\u652f\u6301\u8be5\u5904\u7406\u5668\uff0c\u7136\u540e\u8c03\u7528 <code>handle()<\/code> \u6267\u884c\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n<li>\u5904\u7406\u5668\u6267\u884c\u4e1a\u52a1\u903b\u8f91\u540e\uff0c\u8fd4\u56de\u4e00\u4e2a <strong><code>ModelAndView<\/code><\/strong> \u5bf9\u8c61\u7ed9 <code>DispatcherServlet<\/code>\u3002<\/li>\n<li><code>DispatcherServlet<\/code> \u5c06 <code>ModelAndView<\/code> \u4f20\u7ed9 <strong><code>ViewResolver<\/code>\uff08\u89c6\u56fe\u89e3\u6790\u5668\uff09<\/strong>\uff0c\u89e3\u6790\u6210\u5177\u4f53\u7684\u89c6\u56fe\uff08\u5982 JSP\uff09\u3002<\/li>\n<li>\u89e3\u6790\u51fa\u89c6\u56fe\u540e\uff0c<code>DispatcherServlet<\/code> \u8fdb\u884c<strong>\u89c6\u56fe\u6e32\u67d3<\/strong>\uff08\u5982\u4f7f\u7528 JSP \u5f15\u64ce\uff09\uff0c\u6700\u7ec8\u5c06\u6e32\u67d3\u7ed3\u679c\u54cd\u5e94\u7ed9\u524d\u7aef\u7528\u6237\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5173\u952e\u7ec4\u4ef6\u603b\u7ed3<\/h3>\n<ol start=\"9\">\n<li><strong><code>HandlerMapping<\/code>\uff08\u5904\u7406\u5668\u6620\u5c04\u5668\uff09<\/strong>\uff1a\u8d1f\u8d23\u7ef4\u62a4 URL \u5230\u5904\u7406\u5668\u7684\u6620\u5c04\u5173\u7cfb\uff0c\u652f\u6301\u591a\u79cd\u5b9e\u73b0\u65b9\u5f0f\uff08XML \u914d\u7f6e\u3001\u6ce8\u89e3 <code>@RequestMapping<\/code> \u7b49\uff09\u3002<\/li>\n<li><strong><code>HandlerAdapter<\/code>\uff08\u5904\u7406\u5668\u9002\u914d\u5668\uff09<\/strong>\uff1a\u91c7\u7528<strong>\u9002\u914d\u5668\u6a21\u5f0f<\/strong>\uff0c\u5c4f\u853d\u4e0d\u540c\u5904\u7406\u5668\u7c7b\u578b\u7684\u6267\u884c\u5dee\u5f02\uff0c\u7edf\u4e00\u8c03\u7528\u65b9\u5f0f\u3002<\/li>\n<li><strong><code>ViewResolver<\/code>\uff08\u89c6\u56fe\u89e3\u6790\u5668\uff09<\/strong>\uff1a\u8d1f\u8d23\u5c06 <code>ModelAndView<\/code> \u89e3\u6790\u4e3a\u5177\u4f53\u7684\u89c6\u56fe\uff08\u5982 JSP\u3001JSON \u7b49\uff09\uff0c\u5e76\u5b8c\u6210\u89c6\u56fe\u6e32\u67d3\u3002<\/li>\n<li>Spring MVC \u7684\u6838\u5fc3\u8bbe\u8ba1\u6a21\u5f0f\uff1a<strong>\u524d\u7aef\u63a7\u5236\u5668\u6a21\u5f0f<\/strong>\uff08<code>DispatcherServlet<\/code>\uff09+ <strong>\u9002\u914d\u5668\u6a21\u5f0f<\/strong>\uff08<code>HandlerAdapter<\/code>\uff09\u3002<\/li>\n<\/ol>\n<h2>46-springmvc\u7684\u4e5d\u5927\u7ec4\u4ef6<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u6982\u5ff5\u6f84\u6e05<\/h3>\n<ol>\n<li>Spring MVC \u4e2d\u7684\u4e5d\u5927\u7ec4\u4ef6\u6307\u7684\u662f <code>DispatcherServlet<\/code> \u4e2d\u5b9a\u4e49\u7684\u4e5d\u4e2a\u6838\u5fc3\u7ec4\u4ef6\uff0c\u4e0d\u5305\u62ec <code>DispatcherServlet<\/code> \u672c\u8eab\uff08\u5b83\u662f\u524d\u7aef\u63a7\u5236\u5668\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u4e5d\u5927\u7ec4\u4ef6\u8be6\u89e3<\/h3>\n<ol start=\"2\">\n<li><strong><code>HandlerMapping<\/code>\uff08\u5904\u7406\u5668\u6620\u5c04\u5668\uff09<\/strong>\uff1a\u7ef4\u62a4 URL \u5230\u5904\u7406\u5668\u7684\u6620\u5c04\u5173\u7cfb\uff08\u7c7b\u4f3c\u4e8e\u4e00\u4e2a Map\uff09\uff0c\u6839\u636e\u8bf7\u6c42 URL \u627e\u5230\u5bf9\u5e94\u7684 <code>Handler<\/code>\uff08\u5904\u7406\u5668\uff09\u3002<\/li>\n<li><strong><code>HandlerAdapter<\/code>\uff08\u5904\u7406\u5668\u9002\u914d\u5668\uff09<\/strong>\uff1a\u91c7\u7528\u9002\u914d\u5668\u6a21\u5f0f\uff0c\u4e3a\u4e0d\u540c\u7c7b\u578b\u7684\u5904\u7406\u5668\uff08\u5b9e\u73b0 <code>Controller<\/code> \u63a5\u53e3\u3001<code>@RequestMapping<\/code> \u6ce8\u89e3\u65b9\u6cd5\u3001Servlet \u7b49\uff09\u63d0\u4f9b\u7edf\u4e00\u7684\u6267\u884c\u65b9\u5f0f\u3002<\/li>\n<li>\u9002\u914d\u5668\u901a\u8fc7 <code>support()<\/code> \u65b9\u6cd5\u5224\u65ad\u662f\u5426\u652f\u6301\u5f53\u524d\u5904\u7406\u5668\u7c7b\u578b\uff0c\u7136\u540e\u901a\u8fc7 <code>handle()<\/code> \u65b9\u6cd5\u6267\u884c\u5177\u4f53\u7684\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n<li><strong><code>ViewResolver<\/code>\uff08\u89c6\u56fe\u89e3\u6790\u5668\uff09<\/strong>\uff1a\u5c06\u5904\u7406\u5668\u8fd4\u56de\u7684 <code>ModelAndView<\/code> \u89e3\u6790\u4e3a\u5177\u4f53\u7684\u89c6\u56fe\uff08\u5982 JSP\uff09\uff0c\u5e76\u5b8c\u6210\u89c6\u56fe\u6e32\u67d3\u3002<\/li>\n<li><strong><code>RequestToViewNameTranslator<\/code>\uff08\u8bf7\u6c42\u5230\u89c6\u56fe\u540d\u79f0\u8f6c\u6362\u5668\uff09<\/strong>\uff1a\u5f53\u5904\u7406\u5668\u6ca1\u6709\u8fd4\u56de <code>ModelAndView<\/code>\uff08\u5982 <code>void<\/code> \u8fd4\u56de\u503c\uff09\u65f6\uff0c\u4ece\u8bf7\u6c42\u4e2d\u63d0\u53d6\u89c6\u56fe\u540d\u79f0\u8fdb\u884c\u6e32\u67d3\u3002<\/li>\n<li><strong><code>LocaleResolver<\/code>\uff08\u56fd\u9645\u5316\u89e3\u6790\u5668\uff09<\/strong>\uff1a\u7528\u4e8e\u5904\u7406\u56fd\u9645\u5316\uff0c\u5728\u89c6\u56fe\u6e32\u67d3\u65f6\u6839\u636e\u4e0d\u540c\u7684\u8bed\u8a00\u73af\u5883\uff08\u5982\u4e2d\u6587\u3001\u82f1\u6587\uff09\u52a0\u8f7d\u5bf9\u5e94\u7684\u56fd\u9645\u5316\u8d44\u6e90\u3002<\/li>\n<li><strong><code>ThemeResolver<\/code>\uff08\u4e3b\u9898\u89e3\u6790\u5668\uff09<\/strong>\uff1a\u7528\u4e8e\u5904\u7406\u4e3b\u9898\u6837\u5f0f\uff0c\u5728\u89c6\u56fe\u6e32\u67d3\u65f6\u6839\u636e\u4e0d\u540c\u7684\u4e3b\u9898\uff08\u5982 CSS\u3001\u56fe\u7247\uff09\u52a0\u8f7d\u5bf9\u5e94\u7684\u98ce\u683c\u8d44\u6e90\u3002<\/li>\n<li><strong><code>MultipartResolver<\/code>\uff08\u6587\u4ef6\u4e0a\u4f20\u89e3\u6790\u5668\uff09<\/strong>\uff1a\u7528\u4e8e\u5904\u7406\u6587\u4ef6\u4e0a\u4f20\u8bf7\u6c42\uff0c\u5c06\u4e0a\u4f20\u7684\u6587\u4ef6\u5c01\u88c5\u6210 <code>MultipartFile<\/code> \u5bf9\u8c61\u4f9b\u5f00\u53d1\u8005\u4f7f\u7528\u3002<\/li>\n<li><strong><code>FlashMapManager<\/code>\uff08Flash \u5c5e\u6027\u7ba1\u7406\u5668\uff09<\/strong>\uff1a\u7528\u4e8e\u5728\u91cd\u5b9a\u5411\uff08Redirect\uff09\u573a\u666f\u4e0b\u4f20\u9012\u53c2\u6570\uff0c\u5b58\u50a8\u4e34\u65f6\u7684 Flash \u5c5e\u6027\u6570\u636e\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u91cd\u70b9\u628a\u63e1<\/h3>\n<ol start=\"11\">\n<li>\u4e5d\u5927\u7ec4\u4ef6\u4e2d\u6700\u6838\u5fc3\u7684\u662f\u524d\u4e24\u4e2a\uff1a<strong><code>HandlerMapping<\/code> \u548c <code>HandlerAdapter<\/code><\/strong>\uff0c\u662f\u9762\u8bd5\u4e2d\u7684\u91cd\u70b9\uff1b\u5176\u4f59\u7ec4\u4ef6\u5728\u73b0\u4ee3\u524d\u540e\u7aef\u5206\u79bb\u9879\u76ee\u4e2d\u5df2\u8f83\u5c11\u6d89\u53ca\u3002<\/li>\n<\/ol>\n<h2>47-springboot\u81ea\u52a8\u914d\u7f6e\u539f\u7406<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Spring Boot \u81ea\u52a8\u914d\u7f6e\u7684\u5165\u53e3<\/h3>\n<ol>\n<li>Spring Boot \u81ea\u52a8\u914d\u7f6e\u7684\u6838\u5fc3\u5165\u53e3\u662f <strong><code>@SpringBootApplication<\/code><\/strong> \u6ce8\u89e3\uff0c\u5b83\u662f\u4e00\u4e2a\u590d\u5408\u6ce8\u89e3\uff0c\u5305\u542b\u4e86\u4e09\u4e2a\u6838\u5fc3\u6ce8\u89e3\uff1a<code>@SpringBootConfiguration<\/code>\u3001<code>@EnableAutoConfiguration<\/code>\u3001<code>@ComponentScan<\/code>\u3002<\/li>\n<li><code>@SpringBootConfiguration<\/code> \u7b49\u540c\u4e8e <code>@Configuration<\/code>\uff0c\u6807\u8bc6\u8be5\u7c7b\u4e3a\u914d\u7f6e\u7c7b\u3002<\/li>\n<li><code>@ComponentScan<\/code> \u7528\u4e8e\u5b9a\u4e49\u5305\u626b\u63cf\u8def\u5f84\uff0c\u626b\u63cf\u5e76\u6ce8\u518c Bean\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u81ea\u52a8\u914d\u7f6e\u7684\u6838\u5fc3\uff1a@EnableAutoConfiguration<\/h3>\n<ol start=\"4\">\n<li><code>@EnableAutoConfiguration<\/code> \u662f\u81ea\u52a8\u914d\u7f6e\u6700\u6838\u5fc3\u7684\u6ce8\u89e3\uff0c\u5b83\u901a\u8fc7 <code>@Import<\/code> \u5bfc\u5165\u4e86\u4e00\u4e2a\u5173\u952e\u7c7b\uff1a<strong><code>AutoConfigurationImportSelector<\/code><\/strong>\u3002<\/li>\n<li><code>AutoConfigurationImportSelector<\/code> \u4e2d\u7684 <code>selectImports()<\/code> \u65b9\u6cd5\u8fd4\u56de\u4e00\u4e2a\u5b57\u7b26\u4e32\u6570\u7ec4\uff0c\u6570\u7ec4\u4e2d\u5b58\u653e\u7684\u662f\u9700\u8981\u52a0\u8f7d\u5230 IoC \u5bb9\u5668\u4e2d\u7684\u914d\u7f6e\u7c7b\u7684\u5168\u9650\u5b9a\u7c7b\u540d\u3002<\/li>\n<li>\u8fd9\u4e9b\u914d\u7f6e\u7c7b\u7684\u5168\u9650\u5b9a\u7c7b\u540d\u6765\u6e90\u4e8e <strong><code>META-INF\/spring.factories<\/code><\/strong> \u6587\u4ef6\uff0c\u8bfb\u53d6\u5176\u4e2d\u7684 <code>EnableAutoConfiguration<\/code> \u952e\uff08key\uff09\u5bf9\u5e94\u7684\u6240\u6709\u503c\uff08\u914d\u7f6e\u7c7b\u5168\u8def\u5f84\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001SPI \u673a\u5236\u4e0e\u81ea\u52a8\u52a0\u8f7d<\/h3>\n<ol start=\"7\">\n<li>Spring Boot \u901a\u8fc7 <strong>Spring SPI \u673a\u5236<\/strong>\uff08<code>SpringFactoriesLoader.loadFactoryNames()<\/code>\uff09\u8bfb\u53d6 <code>spring.factories<\/code> \u6587\u4ef6\u4e2d\u7684\u914d\u7f6e\u7c7b\uff0c\u5c06\u5176\u52a0\u8f7d\u4e3a Bean\u3002<\/li>\n<li>\u8fd9\u4e9b\u88ab\u52a0\u8f7d\u7684\u914d\u7f6e\u7c7b\u901a\u5e38\u4f7f\u7528 <code>@Configuration<\/code> \u52a0 <code>@Bean<\/code> \u5b9a\u4e49\u4e86\u5404\u79cd\u9700\u8981\u81ea\u52a8\u88c5\u914d\u7684 Bean\uff08\u5982 MyBatis\u3001Redis \u7b49\u6846\u67b6\u7684\u6574\u5408\u914d\u7f6e\uff09\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001@AutoConfigurationPackage \u7684\u4f5c\u7528<\/h3>\n<ol start=\"9\">\n<li><code>@EnableAutoConfiguration<\/code> \u8fd8\u901a\u8fc7 <code>@AutoConfigurationPackage<\/code> \u5bfc\u5165 <code>AutoConfigurationPackages.Registrar<\/code>\uff0c\u7528\u4e8e<strong>\u4fdd\u5b58\u5305\u626b\u63cf\u8def\u5f84<\/strong>\uff0c\u4f9b\u6846\u67b6\u5185\u90e8\u5176\u4ed6\u7ec4\u4ef6\uff08\u5982 JPA\uff09\u67e5\u8be2\u4f7f\u7528\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u6574\u4f53\u6d41\u7a0b\u5f52\u7eb3<\/h3>\n<ol start=\"10\">\n<li>\u6574\u4e2a\u81ea\u52a8\u914d\u7f6e\u6d41\u7a0b\u4e3a\uff1a<strong><code>@SpringBootApplication<\/code> \u2192 <code>@EnableAutoConfiguration<\/code> \u2192 <code>@Import(AutoConfigurationImportSelector)<\/code> \u2192 \u8bfb\u53d6 <code>spring.factories<\/code> \u4e2d\u7684\u914d\u7f6e\u7c7b \u2192 \u52a0\u8f7d\u5230 IoC \u5bb9\u5668 \u2192 \u5b8c\u6210\u81ea\u52a8\u88c5\u914d<\/strong>\u3002<\/li>\n<li>\u5404\u4e2a Starter\uff08\u5982 MyBatis\u3001Redis\uff09\u5728\u81ea\u5df1\u7684 jar \u5305\u4e2d\u63d0\u4f9b <code>META-INF\/spring.factories<\/code> \u6587\u4ef6\uff0c\u5e76\u5b9a\u4e49 <code>@Configuration<\/code> + <code>@Bean<\/code> \u7684\u914d\u7f6e\u7c7b\uff0cSpring Boot \u542f\u52a8\u65f6\u81ea\u52a8\u52a0\u8f7d\uff0c\u5b9e\u73b0&#8221;\u5f00\u7bb1\u5373\u7528&#8221;\u3002<\/li>\n<\/ol>\n<h2>48-\u5982\u4f55\u7406\u89e3springboot\u7684starter<\/h2>\n<hr \/>\n<ol>\n<li>Starter \u662f Spring Boot \u4e2d\u7684<strong>\u4e00\u7ad9\u5f0f\u4f9d\u8d56\u5305<\/strong>\uff0c\u5c01\u88c5\u4e86\u67d0\u4e2a\u6846\u67b6\uff08\u5982 MyBatis\u3001Redis\uff09\u6240\u9700\u7684\u6240\u6709\u4f9d\u8d56\u548c\u81ea\u52a8\u914d\u7f6e\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u5f15\u5165\u4e00\u4e2a Starter \u5373\u53ef\u4f7f\u7528\u3002<\/li>\n<li>\u5728\u4f20\u7edf Spring + Spring MVC \u4e2d\uff0c\u5f15\u5165 MyBatis \u9700\u8981\u624b\u52a8\u5728 XML \u4e2d\u914d\u7f6e <code>SqlSessionFactory<\/code>\u3001<code>DataSource<\/code> \u7b49\u591a\u4e2a Bean\uff0c\u914d\u7f6e\u7e41\u7410\u3002<\/li>\n<li>\u4f7f\u7528 Starter \u540e\uff0c\u8fd9\u4e9b Bean \u7684\u5b9a\u4e49\u7531\u6846\u67b6\u672c\u8eab\u5b8c\u6210\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u518d\u624b\u52a8\u7f16\u5199 XML \u914d\u7f6e\u3002<\/li>\n<li>Starter \u7684\u5b9e\u73b0\u65b9\u5f0f\uff1a\u5728 Starter \u5305\u4e2d\u7f16\u5199\u4e00\u4e2a <strong><code>@Configuration<\/code> \u914d\u7f6e\u7c7b<\/strong>\uff0c\u5728\u7c7b\u4e2d\u4f7f\u7528 <code>@Bean<\/code> \u5b9a\u4e49\u6240\u6709\u9700\u8981\u88c5\u914d\u7684 Bean\u3002<\/li>\n<li>\u914d\u7f6e\u7c7b\u9ed8\u8ba4\u4e0d\u5728\u4e1a\u52a1\u4ee3\u7801\u7684\u626b\u63cf\u8def\u5f84\u4e0b\uff0c\u9700\u8981\u901a\u8fc7 Spring SPI \u673a\u5236\u4f7f\u5176\u751f\u6548\u3002<\/li>\n<li>\u914d\u7f6e\u7c7b\u7684\u5168\u9650\u5b9a\u7c7b\u540d\u88ab\u653e\u5165 <strong><code>META-INF\/spring.factories<\/code><\/strong> \u6587\u4ef6\u4e2d\uff0cSpring Boot \u542f\u52a8\u65f6\u4f1a\u81ea\u52a8\u8bfb\u53d6\u8be5\u6587\u4ef6\u5e76\u52a0\u8f7d\u914d\u7f6e\u7c7b\u5230 IoC \u5bb9\u5668\u3002<\/li>\n<li>Spring Boot \u901a\u8fc7 <strong>Spring SPI \u673a\u5236<\/strong>\uff08<code>SpringFactoriesLoader<\/code>\uff09\u52a0\u8f7d <code>spring.factories<\/code> \u4e2d\u7684\u914d\u7f6e\u7c7b\uff0c\u8fd9\u662f Starter \u751f\u6548\u7684\u6838\u5fc3\u539f\u7406\u3002<\/li>\n<li>Starter \u9664\u4e86\u5c01\u88c5\u914d\u7f6e\u7c7b\u5916\uff0c\u8fd8\u4f1a\u5728\u81ea\u8eab\u7684 <code>pom.xml<\/code> \u4e2d\u7ba1\u7406\u4f20\u9012\u4f9d\u8d56\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u5f15\u5165\u4e00\u4e2a Starter \u5305\uff0c\u65e0\u9700\u5173\u5fc3\u5176\u4ed6\u95f4\u63a5\u4f9d\u8d56\u3002<\/li>\n<li>\u5f00\u53d1\u8005\u5f15\u5165 Starter \u540e\uff0c\u53ea\u9700\u5728 <code>application.properties<\/code> \u6216 <code>application.yml<\/code> \u4e2d\u914d\u7f6e\u5fc5\u8981\u7684\u4e2a\u6027\u5316\u53c2\u6570\uff08\u5982\u6570\u636e\u5e93 URL\uff09\uff0c\u5176\u4ed6\u4f7f\u7528\u9ed8\u8ba4\u503c\u5373\u53ef\u3002<\/li>\n<li>Starter \u673a\u5236\u7b80\u5316\u4e86\u6846\u67b6\u6574\u5408\uff0c\u8ba9\u5f00\u53d1\u8005\u4e13\u6ce8\u4e8e\u4e1a\u52a1\u4ee3\u7801\uff0c\u6781\u5927\u63d0\u5347\u4e86\u5f00\u53d1\u6548\u7387\u3002<\/li>\n<\/ol>\n<h2>49-\u4ec0\u4e48\u662f\u5d4c\u5165\u5f0f\u670d\u52a1\u5668\uff0c\u4e3a\u4ec0\u4e48\u4f7f\u7528\u5d4c\u5165\u5f0f\u670d\u52a1\u5668<\/h2>\n<hr \/>\n<ol>\n<li><strong>\u5d4c\u5165\u5f0f\u670d\u52a1\u5668<\/strong>\u662f\u6307\u5c06 Web \u670d\u52a1\u5668\uff08\u5982 Tomcat\u3001Jetty\uff09\u4ee5 jar \u5305\u5f62\u5f0f\u5185\u5d4c\u5728\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u65e0\u9700\u5355\u72ec\u4e0b\u8f7d\u548c\u90e8\u7f72\u3002<\/li>\n<li>\u5728\u4f20\u7edf Spring + Spring MVC \u5f00\u53d1\u4e2d\uff0c\u9700\u8981\u5355\u72ec\u4e0b\u8f7d Tomcat \u4e2d\u95f4\u4ef6\uff0c\u5c06\u5e94\u7528\u6253\u6210 war \u5305\u90e8\u7f72\u5230 Tomcat \u7684 <code>webapps<\/code> \u76ee\u5f55\u4e0b\uff0c\u5e76\u624b\u52a8\u542f\u52a8\u670d\u52a1\u5668\u3002<\/li>\n<li>\u4f7f\u7528 Spring Boot \u540e\uff0cTomcat \u4ee5 jar \u5305\u4f9d\u8d56\u7684\u5f62\u5f0f\u5b58\u5728\u4e8e\u9879\u76ee\u4e2d\uff0c\u65e0\u9700\u5355\u72ec\u90e8\u7f72\uff0c\u5e94\u7528\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u53ef\u6267\u884c\u7684 jar \u5305\u3002<\/li>\n<li>\u4f7f\u7528\u5d4c\u5165\u5f0f\u670d\u52a1\u5668\u65f6\uff0c\u53ea\u9700\u5728\u64cd\u4f5c\u7cfb\u7edf\u4e0a\u5b89\u88c5 JVM\uff0c\u6267\u884c <code>java -jar<\/code> \u547d\u4ee4\u5373\u53ef\u76f4\u63a5\u8fd0\u884c\u5e94\u7528\uff0c\u65e0\u9700\u989d\u5916\u5b89\u88c5 Web \u670d\u52a1\u5668\u3002<\/li>\n<li>Spring Boot \u7684 <code>@SpringBootApplication<\/code> \u4e2d\u7684 main \u65b9\u6cd5\u542f\u52a8\u65f6\uff0c\u4f1a\u81ea\u52a8\u542f\u52a8\u5185\u5d4c\u7684 Tomcat\uff0c\u5e76\u52a0\u8f7d Spring MVC \u5bb9\u5668\uff0c\u4f7f\u5e94\u7528\u6b63\u5e38\u8fd0\u884c\u5e76\u63a5\u6536\u8bf7\u6c42\u3002<\/li>\n<li>\u5d4c\u5165\u5f0f\u670d\u52a1\u5668\u7684\u4f18\u52bf\uff1a<strong>\u7b80\u5316\u90e8\u7f72\u6d41\u7a0b<\/strong>\uff0c\u4ece&#8221;\u4e0b\u8f7d Tomcat \u2192 \u6253 war \u5305 \u2192 \u90e8\u7f72 \u2192 \u542f\u52a8\u670d\u52a1\u5668&#8221;\u53d8\u4e3a&#8221;\u6253 jar \u5305 \u2192 <code>java -jar<\/code> \u76f4\u63a5\u8fd0\u884c&#8221;\u3002<\/li>\n<\/ol>\n<h2>50-mybatis\u7684\u4f18\u7f3a\u70b9<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MyBatis \u7684\u4f18\u70b9<\/h3>\n<ol>\n<li><strong>\u57fa\u4e8e SQL \u7f16\u7a0b\uff0c\u7075\u6d3b\u6027\u5f3a<\/strong>\uff1aSQL \u8bed\u53e5\u7531\u5f00\u53d1\u8005\u81ea\u5b9a\u4e49\uff0c\u4e0d\u4f1a\u5bf9\u5e94\u7528\u7a0b\u5e8f\u548c\u6570\u636e\u5e93\u73b0\u6709\u8bbe\u8ba1\u9020\u6210\u4efb\u4f55\u5f71\u54cd\u3002<\/li>\n<li><strong>SQL \u4e0e\u4ee3\u7801\u89e3\u8026<\/strong>\uff1aSQL \u8bed\u53e5\u5199\u5728 XML \u6587\u4ef6\u4e2d\uff0c\u4e0e Java \u4ee3\u7801\u5206\u79bb\uff0c\u4fbf\u4e8e\u7ef4\u62a4\u548c\u590d\u7528\u3002<\/li>\n<li><strong>\u5927\u5e45\u51cf\u5c11\u4ee3\u7801\u91cf<\/strong>\uff1a\u4e0e\u4f20\u7edf JDBC \u76f8\u6bd4\uff0c\u6d88\u9664\u4e86\u521b\u5efa\u8fde\u63a5\u3001\u91ca\u653e\u8fde\u63a5\u7b49\u5927\u91cf\u5197\u4f59\u4ee3\u7801\uff0c\u4ee3\u7801\u91cf\u81f3\u5c11\u51cf\u5c11 50% \u4ee5\u4e0a\u3002<\/li>\n<li><strong>\u6570\u636e\u5e93\u517c\u5bb9\u6027\u597d<\/strong>\uff1aMyBatis \u5e95\u5c42\u57fa\u4e8e JDBC\uff0c\u53ea\u8981\u6570\u636e\u5e93\u652f\u6301 JDBC\uff0cMyBatis \u5c31\u80fd\u652f\u6301\u3002<\/li>\n<li><strong>\u4e0e Spring \u96c6\u6210\u826f\u597d<\/strong>\uff1aMyBatis \u63d0\u4f9b\u4e86\u4e0e Spring \u7684\u517c\u5bb9\u5305\uff0c\u5bf9 Spring \u6846\u67b6\u76f8\u5f53\u53cb\u597d\u3002<\/li>\n<li><strong>\u63d0\u4f9b\u5bf9\u8c61\u5173\u7cfb\u6620\u5c04\u6807\u7b7e<\/strong>\uff1a\u652f\u6301\u5bf9\u8c61\u5c5e\u6027\u4e0e\u6570\u636e\u5e93\u5b57\u6bb5\u4e4b\u95f4\u7684\u6620\u5c04\u5173\u7cfb\u914d\u7f6e\uff0c\u65b9\u4fbf\u7ef4\u62a4 ORM \u5173\u7cfb\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001MyBatis \u7684\u7f3a\u70b9<\/h3>\n<ol start=\"7\">\n<li><strong>SQL \u7f16\u5199\u5de5\u4f5c\u91cf\u5927<\/strong>\uff1a\u5f53\u5b57\u6bb5\u8f83\u591a\u6216\u5173\u8054\u8868\u8f83\u591a\u65f6\uff0cSQL \u8bed\u53e5\u4f1a\u53d8\u5f97\u5f88\u957f\uff0c\u6620\u5c04\u5b57\u6bb5\u914d\u7f6e\u7e41\u7410\u3002<\/li>\n<li><strong>\u5bf9\u7a0b\u5e8f\u5458 SQL \u6c34\u5e73\u8981\u6c42\u9ad8<\/strong>\uff1a\u9700\u8981\u5199\u51fa\u9ad8\u6027\u80fd SQL\uff0c\u5bf9\u5f00\u53d1\u8005\u7684 SQL \u80fd\u529b\u6709\u4e00\u5b9a\u95e8\u69db\u3002<\/li>\n<li><strong>\u6570\u636e\u5e93\u8fc1\u79fb\u6210\u672c\u9ad8<\/strong>\uff1aSQL \u8bed\u53e5\u672c\u8eab\u4f9d\u8d56\u4e8e\u5177\u4f53\u6570\u636e\u5e93\uff08\u5982 Oracle \u548c MySQL \u7684\u51fd\u6570\u5199\u6cd5\u4e0d\u540c\uff09\uff0c\u5207\u6362\u6570\u636e\u5e93\u65f6\u9700\u8981\u4fee\u6539\u5927\u91cf SQL \u8bed\u53e5\uff0c\u6570\u636e\u5e93\u4e00\u81f4\u6027\u8f83\u5dee\u3002<\/li>\n<\/ol>\n<h2>51-mybatis\u548chibernate\u7684\u5bf9\u6bd4<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u6838\u5fc3\u6982\u5ff5\u5b9a\u4f4d<\/h3>\n<ol>\n<li><strong>Hibernate \u662f\u5178\u578b\u7684 ORM\uff08\u5bf9\u8c61\u5173\u7cfb\u6620\u5c04\uff09\u6846\u67b6<\/strong>\uff0c\u901a\u8fc7\u64cd\u4f5c Java \u5bf9\u8c61\u6765\u64cd\u4f5c\u6570\u636e\u5e93\uff0c\u81ea\u52a8\u751f\u6210 SQL\u3002<\/li>\n<li><strong>MyBatis \u4e0d\u662f\u5b8c\u6574\u7684 ORM \u6846\u67b6<\/strong>\uff0c\u5b83\u662f\u4e00\u4e2a SQL \u6620\u5c04\u6846\u67b6\uff0c\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u7f16\u5199 SQL \u8bed\u53e5\u3002<\/li>\n<li>\u56fd\u5185\uff08\u5305\u62ec\u4e2d\u56fd\u3001\u97e9\u56fd\u3001\u65e5\u672c\uff09MyBatis \u4f7f\u7528\u7387\u9ad8\u4e8e Hibernate\uff0c\u800c\u6b27\u7f8e\u56fd\u5bb6 Hibernate \u5360\u636e\u7edf\u6cbb\u5730\u4f4d\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u56fd\u5185\u5916\u9009\u62e9\u5dee\u5f02\u7684\u539f\u56e0<\/h3>\n<ol start=\"4\">\n<li>\u56fd\u5185\u5f00\u53d1\u666e\u904d\u91c7\u7528<strong>\u9762\u5411\u8868\u7ed3\u6784\u7f16\u7a0b<\/strong>\uff08\u5148\u8bbe\u8ba1\u8868\uff0c\u518d\u6839\u636e\u8868\u7ed3\u6784\u5199\u589e\u5220\u6539\u67e5\uff09\uff0c\u800c\u975e\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\uff0c\u56e0\u6b64 MyBatis \u66f4\u7b26\u5408\u8fd9\u79cd\u5f00\u53d1\u6a21\u5f0f\u3002<\/li>\n<li>\u56fd\u5916\u66f4\u6ce8\u91cd<strong>\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b<\/strong>\uff0c\u8bbe\u8ba1\u65f6\u4ece\u5bf9\u8c61\u89d2\u5ea6\u51fa\u53d1\uff0c\u8868\u8bbe\u8ba1\u670d\u52a1\u4e8e\u5bf9\u8c61\u6a21\u578b\uff0c\u56e0\u6b64 Hibernate \u66f4\u53d7\u9752\u7750\u3002<\/li>\n<li>\u56fd\u5185\u4e92\u8054\u7f51\u4e1a\u52a1\u53d8\u66f4\u9891\u7e41\u3001\u8fed\u4ee3\u5feb\u901f\uff0c\u9762\u5411\u8868\u7ed3\u6784\u7f16\u7a0b\u7075\u6d3b\u6027\u66f4\u9ad8\u3001\u5f00\u53d1\u901f\u5ea6\u66f4\u5feb\uff0c\u8fd9\u4e5f\u662f MyBatis \u5728\u56fd\u5185\u6d41\u884c\u7684\u539f\u56e0\u4e4b\u4e00\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5f00\u53d1\u901f\u5ea6\u4e0e\u5b66\u4e60\u6210\u672c\u5bf9\u6bd4<\/h3>\n<ol start=\"7\">\n<li><strong>\u5b66\u4e60\u6210\u672c<\/strong>\uff1aMyBatis \u5165\u95e8\u66f4\u7b80\u5355\uff0cHibernate \u5b66\u4e60\u96be\u5ea6\u66f4\u5927\uff0c\u638c\u63e1\u6210\u672c\u66f4\u9ad8\u3002<\/li>\n<li><strong>\u5f00\u53d1\u901f\u5ea6\uff08\u7b80\u5355\u573a\u666f\uff09<\/strong>\uff1a\u5982\u679c\u9879\u76ee\u4ee5\u7b80\u5355\u589e\u5220\u6539\u67e5\u4e3a\u4e3b\uff0cHibernate \u5f00\u53d1\u6548\u7387\u66f4\u5feb\uff08\u57fa\u672c SQL \u5df2\u5c01\u88c5\u597d\uff0c\u65e0\u9700\u624b\u5199\uff09\u3002<\/li>\n<li><strong>\u5f00\u53d1\u901f\u5ea6\uff08\u590d\u6742\u573a\u666f\uff09<\/strong>\uff1a\u5982\u679c\u9879\u76ee\u5305\u542b\u5927\u91cf\u590d\u6742\u67e5\u8be2\u3001\u6279\u91cf\u64cd\u4f5c\u3001\u591a\u8868\u5173\u8054\uff0cMyBatis \u66f4\u7075\u6d3b\uff0c\u5f00\u53d1\u6548\u7387\u66f4\u9ad8\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4ee3\u7801\u5de5\u4f5c\u91cf\u5bf9\u6bd4<\/h3>\n<ol start=\"10\">\n<li><strong>\u7b80\u5355 SQL \u573a\u666f<\/strong>\uff1aHibernate \u4ee3\u7801\u91cf\u66f4\u5c11\uff1b<strong>\u590d\u6742 SQL \u573a\u666f<\/strong>\uff1aMyBatis \u9700\u8981\u624b\u5199 XML\u3001\u63a5\u53e3\u3001ResultMap \u7b49\uff0c\u4ee3\u7801\u91cf\u8f83\u591a\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001SQL \u4f18\u5316\u80fd\u529b<\/h3>\n<ol start=\"11\">\n<li><strong>SQL \u4f18\u5316<\/strong>\uff1aMyBatis \u4f18\u52bf\u66f4\u5927\uff0c\u56e0\u4e3a SQL \u7531\u5f00\u53d1\u8005\u624b\u5199\uff0c\u53ef\u63a7\u6027\u5f3a\uff1bHibernate \u81ea\u52a8\u751f\u6210\u7684 SQL \u4e0d\u7075\u6d3b\uff0c\u4f18\u5316\u96be\u5ea6\u9ad8\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u5bf9\u8c61\u7ba1\u7406\u80fd\u529b<\/h3>\n<ol start=\"12\">\n<li><strong>\u5bf9\u8c61\u7ba1\u7406<\/strong>\uff1aHibernate \u66f4\u5b8c\u5584\uff0c\u63d0\u4f9b\u4e86\u5bf9\u8c61\u72b6\u6001\u7ba1\u7406\u529f\u80fd\uff08\u5982\u6e38\u79bb\u6001\u3001\u6301\u4e45\u6001\u7b49\uff09\uff1bMyBatis \u672c\u8eab\u4e0d\u63d0\u4f9b\u5bf9\u8c61\u7ba1\u7406\u673a\u5236\u3002<\/li>\n<\/ol>\n<h3>\u4e03\u3001\u7f13\u5b58\u673a\u5236\u5bf9\u6bd4<\/h3>\n<ol start=\"13\">\n<li>\u4e24\u8005\u90fd\u652f\u6301<strong>\u4e00\u7ea7\u7f13\u5b58\u548c\u4e8c\u7ea7\u7f13\u5b58<\/strong>\uff0c\u90fd\u53ef\u4ee5\u4f7f\u7528\u7b2c\u4e09\u65b9\u7f13\u5b58\u6216\u81ea\u5b9a\u4e49\u7f13\u5b58\u5b9e\u73b0\u3002<\/li>\n<li>Hibernate \u7684\u7f13\u5b58\u673a\u5236\u66f4\u5f3a\u5927\uff0c\u5bf9\u810f\u6570\u636e\u6709\u63d0\u793a\uff1bMyBatis \u7684\u4e8c\u7ea7\u7f13\u5b58\u4f7f\u7528\u8981\u6c42\u8f83\u9ad8\uff0c\u5bb9\u6613\u51fa\u9519\uff0c\u5b9e\u9645\u5f00\u53d1\u4e2d\u8f83\u5c11\u4f7f\u7528\u3002<\/li>\n<\/ol>\n<h3>\u516b\u3001\u5176\u4ed6\u5dee\u5f02<\/h3>\n<ol start=\"15\">\n<li><strong>\u6570\u636e\u5e93\u65e0\u5173\u6027<\/strong>\uff1aHibernate \u66f4\u597d\uff0c\u5207\u6362\u6570\u636e\u5e93\u65f6\u65e0\u9700\u4fee\u6539\u4ee3\u7801\uff1bMyBatis \u9700\u8981\u9488\u5bf9\u4e0d\u540c\u6570\u636e\u5e93\u7f16\u5199\u4e0d\u540c\u7684 SQL \u8bed\u53e5\u3002<\/li>\n<li><strong>\u6846\u67b6\u91cd\u91cf<\/strong>\uff1aHibernate \u529f\u80fd\u5f3a\u5927\u4f46<strong>\u8f83\u91cd<\/strong>\uff1bMyBatis \u529f\u80fd\u76f8\u5bf9\u7b80\u5355\u4f46<strong>\u8f7b\u91cf<\/strong>\u3002<\/li>\n<\/ol>\n<h2>52-#{}\u548c${}\u7684\u533a\u522b<\/h2>\n<hr \/>\n<ol>\n<li><code>#{}<\/code> \u662f<strong>\u5360\u4f4d\u7b26<\/strong>\uff08\u9884\u7f16\u8bd1\uff09\uff0c<code>${}<\/code> \u662f<strong>\u5b57\u7b26\u4e32\u66ff\u6362<\/strong>\uff08\u62fc\u63a5\u7b26\uff09\uff0c\u4e24\u8005\u7684\u4f5c\u7528\u5b8c\u5168\u4e0d\u540c\u3002<\/li>\n<li><code>#{}<\/code> \u4f1a\u4f7f\u7528\u9884\u7f16\u8bd1\u65b9\u5f0f\uff08<code>PreparedStatement<\/code>\uff09\uff0c\u5c06\u4f20\u5165\u7684\u503c\u4f5c\u4e3a\u53c2\u6570\u66ff\u6362\uff0c\u5e76<strong>\u81ea\u52a8\u6dfb\u52a0\u5355\u5f15\u53f7<\/strong>\u5305\u88f9\u3002<\/li>\n<li><code>#{}<\/code> \u7684\u9884\u7f16\u8bd1\u673a\u5236\u80fd\u6709\u6548<strong>\u9632\u6b62 SQL \u6ce8\u5165<\/strong>\uff0c\u63d0\u5347\u7cfb\u7edf\u5b89\u5168\u6027\u3002<\/li>\n<li><code>${}<\/code> \u662f\u7eaf\u7cb9\u7684\u5b57\u7b26\u4e32\u62fc\u63a5\uff0c\u5c06\u4f20\u5165\u7684\u503c<strong>\u76f4\u63a5\u66ff\u6362<\/strong>\u5230 SQL \u4e2d\uff0c\u4e0d\u4f1a\u6dfb\u52a0\u5355\u5f15\u53f7\uff0c\u4e5f\u4e0d\u4f1a\u9884\u7f16\u8bd1\u3002<\/li>\n<li><code>${}<\/code> \u5b58\u5728<strong>SQL \u6ce8\u5165\u98ce\u9669<\/strong>\uff0c\u5e94\u5f53\u8c28\u614e\u4f7f\u7528\uff0c\u901a\u5e38\u4ec5\u5728\u9700\u8981\u52a8\u6001\u4f20\u5165\u8868\u540d\u3001\u5217\u540d\u7b49\u573a\u666f\u4e0b\u4f7f\u7528\u3002<\/li>\n<\/ol>\n<h2>53-mybatis\u63d2\u4ef6\u8fd0\u884c\u539f\u7406\u53ca\u5f00\u53d1\u6d41\u7a0b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MyBatis \u63d2\u4ef6\u7684\u672c\u8d28<\/h3>\n<ol>\n<li>MyBatis \u7684\u63d2\u4ef6\u672c\u8d28\u4e0a\u5c31\u662f<strong>\u62e6\u622a\u5668\uff08Interceptor\uff09<\/strong>\uff0c\u57fa\u4e8e <strong>JDK \u52a8\u6001\u4ee3\u7406<\/strong>\u5b9e\u73b0\u65b9\u6cd5\u589e\u5f3a\uff08\u5728\u76ee\u6807\u65b9\u6cd5\u6267\u884c\u524d\u540e\u63d2\u5165\u81ea\u5b9a\u4e49\u903b\u8f91\uff09\u3002<\/li>\n<li>MyBatis \u7684\u62e6\u622a\u5668<strong>\u53ea\u80fd\u62e6\u622a\u56db\u4e2a\u6838\u5fc3\u63a5\u53e3<\/strong>\u7684\u65b9\u6cd5\uff0c\u7075\u6d3b\u6027\u6709\u9650\uff0c\u4e0d\u50cf Spring \u7684\u62e6\u622a\u5668\u53ef\u4ee5\u62e6\u622a\u4efb\u610f\u65b9\u6cd5\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u53ef\u62e6\u622a\u7684\u56db\u4e2a\u6838\u5fc3\u63a5\u53e3<\/h3>\n<ol start=\"3\">\n<li><strong><code>ParameterHandler<\/code><\/strong>\uff1a\u8d1f\u8d23\u5c06 Java \u7c7b\u578b\u53c2\u6570\u8f6c\u6362\u4e3a\u6570\u636e\u5e93\u652f\u6301\u7684 JDBC \u7c7b\u578b\uff0c\u5904\u7406 SQL \u4e2d\u7684\u53c2\u6570\u3002<\/li>\n<li><strong><code>ResultSetHandler<\/code><\/strong>\uff1a\u8d1f\u8d23\u5904\u7406 JDBC \u7ed3\u679c\u96c6\uff08<code>ResultSet<\/code>\uff09\uff0c\u5c06\u6570\u636e\u5e93\u67e5\u8be2\u7ed3\u679c\u6620\u5c04\u4e3a Java \u5bf9\u8c61\u3002<\/li>\n<li><strong><code>StatementHandler<\/code><\/strong>\uff1a\u8d1f\u8d23\u8bbe\u7f6e SQL \u53c2\u6570\uff0c\u5e76\u5c06\u7ed3\u679c\u96c6\u901a\u8fc7 <code>ResultSetHandler<\/code> \u8fdb\u884c\u6620\u5c04\u8f6c\u6362\u3002<\/li>\n<li><strong><code>Executor<\/code><\/strong>\uff1aMyBatis \u7684\u8c03\u5ea6\u6838\u5fc3\uff0c\u8d1f\u8d23\u751f\u6210 SQL \u8bed\u53e5\u3001\u7ba1\u7406\u67e5\u8be2\u7f13\u5b58\uff0c\u662f\u6700\u91cd\u8981\u7684\u62e6\u622a\u76ee\u6807\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u63d2\u4ef6\u8fd0\u884c\u539f\u7406<\/h3>\n<ol start=\"7\">\n<li>MyBatis \u63d2\u4ef6\u901a\u8fc7 <strong>JDK \u52a8\u6001\u4ee3\u7406<\/strong>\u4e3a\u76ee\u6807\u63a5\u53e3\uff08\u4e0a\u8ff0\u56db\u4e2a\u63a5\u53e3\u4e4b\u4e00\uff09\u751f\u6210\u4ee3\u7406\u5bf9\u8c61\uff0c\u5728\u8c03\u7528\u76ee\u6807\u65b9\u6cd5\u65f6\u89e6\u53d1\u62e6\u622a\u903b\u8f91\u3002<\/li>\n<li>\u62e6\u622a\u5668\u7684\u6838\u5fc3\u65b9\u6cd5\u662f <strong><code>intercept()<\/code><\/strong>\uff0c\u901a\u8fc7 <code>Invocation<\/code> \u53c2\u6570\u53ef\u4ee5\u83b7\u53d6\u76ee\u6807\u5bf9\u8c61\u3001\u76ee\u6807\u65b9\u6cd5\u53ca\u53c2\u6570\u3002<\/li>\n<li>\u901a\u8fc7 <code>invocation.proceed()<\/code> \u65b9\u6cd5\u533a\u5206<strong>\u524d\u62e6\u622a<\/strong>\uff08\u5728 <code>proceed()<\/code> \u524d\u5199\u903b\u8f91\uff09\u548c<strong>\u540e\u62e6\u622a<\/strong>\uff08\u5728 <code>proceed()<\/code> \u540e\u5199\u903b\u8f91\uff09\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u5982\u4f55\u7f16\u5199\u4e00\u4e2a MyBatis \u63d2\u4ef6<\/h3>\n<ol start=\"10\">\n<li>\u7f16\u5199\u4e00\u4e2a\u7c7b\u5b9e\u73b0 <strong><code>Interceptor<\/code> \u63a5\u53e3<\/strong>\uff0c\u91cd\u5199 <code>intercept()<\/code> \u65b9\u6cd5\u7f16\u5199\u81ea\u5b9a\u4e49\u62e6\u622a\u903b\u8f91\u3002<\/li>\n<li>\u5728\u7c7b\u4e0a\u6dfb\u52a0 <strong><code>@Intercepts<\/code> \u6ce8\u89e3<\/strong>\uff0c\u5e76\u901a\u8fc7 <code>@Signature<\/code> \u6307\u5b9a\u8981\u62e6\u622a\u7684\u63a5\u53e3\u3001\u65b9\u6cd5\u540d\u548c\u53c2\u6570\u7c7b\u578b\uff08\u56e0\u4e3a\u65b9\u6cd5\u6709\u91cd\u8f7d\uff0c\u9700\u901a\u8fc7\u53c2\u6570\u5217\u8868\u552f\u4e00\u786e\u5b9a\uff09\u3002<\/li>\n<li>\u5982\u679c\u9700\u8981\u4e0e Spring \u6574\u5408\uff0c\u5728\u7c7b\u4e0a\u6dfb\u52a0 <strong><code>@Component<\/code> \u6ce8\u89e3<\/strong>\u5c06\u62e6\u622a\u5668\u653e\u5165 IoC \u5bb9\u5668\uff0c\u6216\u901a\u8fc7 MyBatis \u914d\u7f6e\u6587\u4ef6\u624b\u52a8\u914d\u7f6e\u3002<\/li>\n<\/ol>\n<h2>54-\u7d22\u5f15\u7684\u57fa\u672c\u539f\u7406<\/h2>\n<hr \/>\n<ol>\n<li><strong>\u7d22\u5f15\u7684\u7528\u9014<\/strong>\uff1a\u5feb\u901f\u67e5\u627e\u5177\u6709\u7279\u5b9a\u503c\u7684\u8bb0\u5f55\uff0c\u907f\u514d\u5168\u8868\u626b\u63cf\uff08\u5c31\u50cf\u5b57\u5178\u7684\u62fc\u97f3\u6216\u7b14\u753b\u68c0\u7d22\u5e2e\u52a9\u5feb\u901f\u627e\u5230\u67d0\u4e2a\u5b57\uff09\u3002<\/li>\n<li>\u7d22\u5f15\u7684\u6838\u5fc3\u539f\u7406\u662f<strong>\u5c06\u65e0\u5e8f\u7684\u6570\u636e\u53d8\u4e3a\u6709\u5e8f\u7684\u67e5\u8be2\u7ed3\u6784<\/strong>\uff0c\u539f\u59cb\u6570\u636e\u5728\u5185\u5b58\u6216\u78c1\u76d8\u4e2d\u662f\u65e0\u5e8f\u5b58\u653e\u7684\uff0c\u7d22\u5f15\u4e3a\u5176\u5efa\u7acb\u6709\u5e8f\u7684\u67e5\u627e\u8def\u5f84\u3002<\/li>\n<li>\u54c8\u5e0c\u7d22\u5f15\u7684\u539f\u7406\uff1a\u5bf9\u67e5\u8be2\u6761\u4ef6\uff08\u5982 ID\uff09\u8fdb\u884c\u54c8\u5e0c\u7b97\u6cd5\u5f97\u5230\u4e00\u4e2a\u54c8\u5e0c\u503c\uff0c\u5728\u54c8\u5e0c\u8868\u4e2d\u627e\u5230\u5bf9\u5e94\u7684\u5185\u5b58\u5730\u5740\uff0c\u76f4\u63a5\u5b9a\u4f4d\u6570\u636e\uff0c\u65f6\u95f4\u590d\u6742\u5ea6\u63a5\u8fd1 O(1)\u3002<\/li>\n<li>B-Tree\/B+Tree \u7d22\u5f15\u7684\u539f\u7406\uff1a\u5c06\u6570\u636e\u7ec4\u7ec7\u6210\u4e00\u68f5\u5e73\u8861\u6811\u7ed3\u6784\uff0c\u901a\u8fc7\u6811\u5f62\u67e5\u627e\u5feb\u901f\u5b9a\u4f4d\u6570\u636e\uff0c\u662f\u5173\u7cfb\u578b\u6570\u636e\u5e93\u4e2d\u6700\u5e38\u7528\u7684\u7d22\u5f15\u7ed3\u6784\u3002<\/li>\n<li>\u7d22\u5f15\u7684\u5e95\u5c42\u5b9e\u73b0\u672c\u8d28\u4e0a\u662f\u4e00\u5f20<strong>\u5012\u6392\u8868<\/strong>\uff08\u6216\u79f0\u7d22\u5f15\u8868\uff09\uff0c\u5b58\u50a8\u4e86\u6392\u5e8f\u540e\u7684\u5173\u952e\u5b57\u53ca\u5176\u5bf9\u5e94\u7684\u6570\u636e\u5730\u5740\uff08\u5730\u5740\u94fe\uff09\u3002<\/li>\n<li>\u67e5\u8be2\u65f6\uff0c\u5148\u5728\u7d22\u5f15\u8868\u4e2d\u67e5\u627e\u76ee\u6807\u5173\u952e\u5b57\uff0c\u83b7\u53d6\u5bf9\u5e94\u7684\u6570\u636e\u5730\u5740\uff08\u5730\u5740\u94fe\uff09\uff0c\u518d\u901a\u8fc7\u5730\u5740\u76f4\u63a5\u53d6\u51fa\u6570\u636e\uff0c\u907f\u514d\u5168\u8868\u626b\u63cf\u3002<\/li>\n<li>\u65e0\u8bba\u54ea\u79cd\u6570\u636e\u7ed3\u6784\u7684\u7d22\u5f15\uff08\u54c8\u5e0c\u7d22\u5f15\u3001B-Tree \u7d22\u5f15\u7b49\uff09\uff0c\u5176\u6700\u7ec8\u76ee\u7684\u548c\u57fa\u672c\u539f\u7406\u90fd\u662f\u4e00\u81f4\u7684\uff1a<strong>\u7528\u6709\u5e8f\u7ed3\u6784\u52a0\u901f\u65e0\u5e8f\u6570\u636e\u7684\u67e5\u627e<\/strong>\u3002<\/li>\n<\/ol>\n<h2>55-mysql\u805a\u7c07\u548c\u975e\u805a\u7c07\u7d22\u5f15\u7684\u533a\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u57fa\u672c\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>\u805a\u96c6\u7d22\u5f15\uff08Clustered Index\uff09<\/strong>\uff1a\u7d22\u5f15\u548c\u6570\u636e\u5b58\u50a8\u5728\u4e00\u8d77\uff0c\u6570\u636e\u884c\u7684\u7269\u7406\u5b58\u653e\u987a\u5e8f\u4e0e\u7d22\u5f15\u987a\u5e8f\u4e00\u81f4\uff0c\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u7684\u662f\u5b8c\u6574\u7684\u6570\u636e\u884c\u3002<\/li>\n<li><strong>\u975e\u805a\u96c6\u7d22\u5f15\uff08Non-Clustered Index\uff09<\/strong>\uff1a\u7d22\u5f15\u548c\u6570\u636e\u5206\u5f00\u5b58\u50a8\uff0c\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u7684\u662f\u6307\u5411\u6570\u636e\u884c\u7684\u5730\u5740\uff08\u6216\u4e3b\u952e\u503c\uff09\uff0c\u800c\u975e\u6570\u636e\u672c\u8eab\u3002<\/li>\n<li><strong>InnoDB \u4e2d\u7684\u805a\u96c6\u7d22\u5f15\u548c\u975e\u805a\u96c6\u7d22\u5f15\u5e95\u5c42\u90fd\u4f7f\u7528 B+Tree \u6570\u636e\u7ed3\u6784<\/strong>\uff0c\u4f46\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u7684\u5185\u5bb9\u4e0d\u540c\u3002<\/li>\n<li><strong>InnoDB \u8868\u4e00\u5b9a\u6709\u805a\u96c6\u7d22\u5f15<\/strong>\uff1a\u9ed8\u8ba4\u4ee5\u4e3b\u952e\u4f5c\u4e3a\u805a\u96c6\u7d22\u5f15\uff1b\u5982\u679c\u6ca1\u6709\u4e3b\u952e\uff0c\u5219\u4f7f\u7528\u7b2c\u4e00\u4e2a\u552f\u4e00\u7d22\u5f15\uff1b\u5982\u679c\u4e5f\u6ca1\u6709\u552f\u4e00\u7d22\u5f15\uff0c\u5219\u4f7f\u7528\u6570\u636e\u5e93\u5185\u90e8\u9690\u85cf\u7684\u884c ID\u3002<\/li>\n<li><strong>MyISAM \u5b58\u50a8\u5f15\u64ce\u6ca1\u6709\u805a\u96c6\u7d22\u5f15<\/strong>\uff0c\u6240\u6709\u7d22\u5f15\u90fd\u662f\u975e\u805a\u96c6\u7d22\u5f15\uff0c\u7d22\u5f15\u548c\u6570\u636e\u5b8c\u5168\u5206\u79bb\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u805a\u96c6\u7d22\u5f15\u7684\u4f18\u52bf\u4e0e\u52a3\u52bf<\/h3>\n<ol start=\"6\">\n<li><strong>\u4f18\u52bf\u4e00\uff1a\u67e5\u8be2\u6548\u7387\u9ad8<\/strong>\uff0c\u901a\u8fc7\u805a\u96c6\u7d22\u5f15\u67e5\u8be2\u53ef\u76f4\u63a5\u83b7\u53d6\u6570\u636e\u884c\uff0c\u65e0\u9700\u56de\u8868\uff08\u76f8\u6bd4\u975e\u805a\u96c6\u7d22\u5f15\u9700\u4e8c\u6b21\u67e5\u627e\uff09\u3002<\/li>\n<li><strong>\u4f18\u52bf\u4e8c\uff1a\u8303\u56f4\u67e5\u8be2\u6548\u7387\u9ad8<\/strong>\uff0c\u56e0\u4e3a\u6570\u636e\u6309\u987a\u5e8f\u7ec4\u7ec7\uff0c\u7d22\u5f15\u76f8\u90bb\u7684\u6570\u636e\u5728\u7269\u7406\u4e0a\u4e5f\u76f8\u90bb\uff0c\u9002\u5408\u8303\u56f4\u67e5\u8be2\u548c\u6392\u5e8f\u3002<\/li>\n<li><strong>\u52a3\u52bf\u4e00\uff1a\u7ef4\u62a4\u4ee3\u4ef7\u9ad8<\/strong>\uff0c\u63d2\u5165\u65b0\u6570\u636e\u6216\u66f4\u65b0\u4e3b\u952e\u65f6\uff0c\u4e3a\u4fdd\u8bc1\u987a\u5e8f\u53ef\u80fd\u9700\u8981\u79fb\u52a8\u6570\u636e\uff0c\u5bfc\u81f4\u9875\u5206\u88c2\u3001\u4ea7\u751f\u788e\u7247\uff0c\u6027\u80fd\u5f00\u9500\u5927\u3002<\/li>\n<li><strong>\u52a3\u52bf\u4e8c\uff1a\u4e0d\u9002\u7528\u4e8e\u65e0\u5e8f\u4e3b\u952e<\/strong>\uff0c\u82e5\u4f7f\u7528 UUID \u6216\u968f\u673a ID \u4f5c\u4e3a\u4e3b\u952e\uff0c\u6bcf\u6b21\u63d2\u5165\u6570\u636e\u4f4d\u7f6e\u968f\u673a\uff0c\u9891\u7e41\u5bfc\u81f4\u7d22\u5f15\u79fb\u52a8\uff0c\u67e5\u8be2\u6548\u7387\u751a\u81f3\u53ef\u80fd\u4f4e\u4e8e\u5168\u8868\u626b\u63cf\u3002<\/li>\n<li><strong>\u52a3\u52bf\u4e09\uff1a\u4e3b\u952e\u8fc7\u5927\u4f1a\u5bfc\u81f4\u8f85\u52a9\u7d22\u5f15\u81a8\u80c0<\/strong>\uff0c\u56e0\u4e3a InnoDB \u7684\u8f85\u52a9\u7d22\u5f15\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u7684\u662f\u4e3b\u952e\u503c\uff0c\u4e3b\u952e\u8d8a\u5927\uff0c\u6240\u6709\u8f85\u52a9\u7d22\u5f15\u5360\u7528\u7684\u7a7a\u95f4\u4e5f\u8d8a\u5927\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u975e\u805a\u96c6\u7d22\u5f15\uff08\u8f85\u52a9\u7d22\u5f15\uff09\u7684\u7279\u70b9<\/h3>\n<ol start=\"11\">\n<li><strong>\u8f85\u52a9\u7d22\u5f15<\/strong>\u662f\u5728\u805a\u96c6\u7d22\u5f15\u4e4b\u4e0a\u521b\u5efa\u7684\u7d22\u5f15\uff0c\u5728 InnoDB \u4e2d\uff0c\u8f85\u52a9\u7d22\u5f15\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u7684\u662f<strong>\u4e3b\u952e\u503c<\/strong>\uff0c\u800c\u975e\u6570\u636e\u5730\u5740\uff0c\u67e5\u8be2\u65f6\u9700\u8981\u5148\u67e5\u8f85\u52a9\u7d22\u5f15\u627e\u5230\u4e3b\u952e\uff0c\u518d\u56de\u805a\u96c6\u7d22\u5f15\u67e5\u6570\u636e\uff08\u56de\u8868\uff09\u3002<\/li>\n<li><strong>\u8986\u76d6\u7d22\u5f15<\/strong>\uff1a\u5982\u679c\u67e5\u8be2\u53ea\u9700\u8981\u7d22\u5f15\u5217\u672c\u8eab\uff08\u4e0d\u9700\u8981\u5176\u4ed6\u5b57\u6bb5\uff09\uff0c\u5219\u65e0\u9700\u56de\u8868\uff0c\u53ef\u76f4\u63a5\u4ece\u8f85\u52a9\u7d22\u5f15\u4e2d\u83b7\u53d6\u6570\u636e\uff0c\u6548\u7387\u8f83\u9ad8\u3002<\/li>\n<li><strong>\u975e\u805a\u96c6\u7d22\u5f15\u7684\u52a3\u52bf<\/strong>\uff1a\u67e5\u8be2\u65f6\u901a\u5e38\u9700\u8981\u4e8c\u6b21\u67e5\u627e\uff08\u5148\u627e\u7d22\u5f15\uff0c\u518d\u6839\u636e\u4e3b\u952e\u6216\u5730\u5740\u627e\u6570\u636e\uff09\uff0c\u76f8\u5bf9\u4e8e\u805a\u96c6\u7d22\u5f15\u6548\u7387\u7565\u4f4e\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001InnoDB vs MyISAM \u5728\u7d22\u5f15\u65b9\u9762\u7684\u5dee\u5f02<\/h3>\n<ol start=\"14\">\n<li><strong>InnoDB<\/strong> \u4f7f\u7528\u805a\u96c6\u7d22\u5f15\uff08\u6570\u636e\u4e0e\u7d22\u5f15\u5728\u4e00\u8d77\uff09\uff0c\u8868\u7a7a\u95f4\u8f83\u5927\uff1b<strong>MyISAM<\/strong> \u4f7f\u7528\u975e\u805a\u96c6\u7d22\u5f15\uff08\u7d22\u5f15\u4e0e\u6570\u636e\u5206\u79bb\uff09\uff0c\u7d22\u5f15\u548c\u6570\u636e\u7684\u8868\u7a7a\u95f4\u90fd\u76f8\u5bf9\u8f83\u5c0f\u3002<\/li>\n<li><strong>\u5168\u8868\u626b\u63cf<\/strong>\uff1aMyISAM \u8868\u8f83\u5c0f\uff0c\u5168\u8868\u626b\u63cf\u6bd4 InnoDB \u6709\u4f18\u52bf\uff1b<strong>COUNT(*)<\/strong>\uff1aMyISAM \u4e13\u95e8\u7ef4\u62a4\u4e86\u884c\u6570\u8ba1\u6570\u5668\uff0c\u4e0d\u5e26\u6761\u4ef6\u7684 <code>COUNT(*)<\/code> \u6bd4 InnoDB \u66f4\u5feb\uff08InnoDB \u9700\u8981\u9010\u884c\u7edf\u8ba1\uff09\u3002<\/li>\n<\/ol>\n<h2>56-mysql\u7d22\u5f15\u7ed3\u6784\uff0c\u5404\u81ea\u7684\u4f18\u52a3<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MySQL \u4e2d\u7d22\u5f15\u7684\u4e24\u79cd\u4e3b\u8981\u6570\u636e\u7ed3\u6784<\/h3>\n<ol>\n<li>MySQL \u4e2d\u5e38\u89c1\u7684\u7d22\u5f15\u6570\u636e\u7ed3\u6784\u6709 <strong>B+Tree\uff08B+\u6811\uff09<\/strong> \u548c <strong>Hash\uff08\u54c8\u5e0c\u8868\uff09<\/strong>\uff0c\u5177\u4f53\u4f7f\u7528\u54ea\u79cd\u4e0e\u5b58\u50a8\u5f15\u64ce\u6709\u5173\u3002<\/li>\n<li>InnoDB \u9ed8\u8ba4\u4f7f\u7528 <strong>B+Tree \u7d22\u5f15<\/strong>\uff0c\u8fd9\u4e5f\u662f MySQL \u4e2d\u6700\u5e7f\u6cdb\u4f7f\u7528\u7684\u7d22\u5f15\u7ed3\u6784\u3002<\/li>\n<li><strong>Hash \u7d22\u5f15<\/strong>\u5e95\u5c42\u662f\u4e00\u5f20\u54c8\u5e0c\u8868\uff0c\u4ec5\u9002\u5408<strong>\u7b49\u503c\u67e5\u8be2\uff08\u5355\u6761\u8bb0\u5f55\u67e5\u8be2\uff0c\u5982 <code>id = ?<\/code>\uff09<\/strong>\uff0c\u5728\u7b49\u503c\u67e5\u8be2\u573a\u666f\u4e0b\u6027\u80fd\u6781\u9ad8\uff08\u53ea\u9700\u4e00\u6b21\u54c8\u5e0c\u8ba1\u7b97\u5373\u53ef\u5b9a\u4f4d\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001B+Tree \u7d22\u5f15\u7684\u7279\u70b9<\/h3>\n<ol start=\"4\">\n<li>B+Tree \u662f\u4e00\u68f5<strong>\u5e73\u8861\u7684\u591a\u53c9\u6811<\/strong>\uff0c\u4ece\u6839\u8282\u70b9\u5230\u6bcf\u4e2a\u53f6\u5b50\u8282\u70b9\u7684\u9ad8\u5ea6\u5dee\u4e0d\u8d85\u8fc7 1\uff0c\u68c0\u7d22\u6548\u7387\u7a33\u5b9a\uff0c\u4e0d\u4f1a\u51fa\u73b0\u5927\u5e45\u6ce2\u52a8\u3002<\/li>\n<li>B+Tree \u7684<strong>\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u4e86\u5b8c\u6574\u6570\u636e\u884c\uff08\u805a\u96c6\u7d22\u5f15\uff09\u6216\u6570\u636e\u5730\u5740\uff08\u975e\u805a\u96c6\u7d22\u5f15\uff09<\/strong>\uff0c\u4e14\u53f6\u5b50\u8282\u70b9\u4e4b\u95f4\u901a\u8fc7<strong>\u53cc\u5411\u6307\u9488<\/strong>\u76f8\u4e92\u8fde\u63a5\uff0c\u5f62\u6210\u6709\u5e8f\u94fe\u8868\u3002<\/li>\n<li>\u53f6\u5b50\u8282\u70b9\u6309\u7167\u7d22\u5f15\u503c\u4ece\u5c0f\u5230\u5927\u4f9d\u6b21\u6392\u5217\uff0c\u975e\u5e38\u9002\u5408<strong>\u8303\u56f4\u67e5\u8be2<\/strong>\uff08\u5982 <code>BETWEEN<\/code>\u3001<code>&gt;<\/code>\u3001<code>&lt;<\/code>\uff09\u548c<strong>\u6392\u5e8f<\/strong>\u3002<\/li>\n<li>\u7531\u4e8e\u53f6\u5b50\u8282\u70b9\u95f4\u6709\u6307\u9488\u8fde\u63a5\uff0c\u8fdb\u884c\u8303\u56f4\u67e5\u8be2\u65f6\u53ef\u4ee5\u5de6\u53f3\u5feb\u901f\u79fb\u52a8\uff0c\u65e0\u9700\u56de\u6eaf\u5230\u7236\u8282\u70b9\uff0c\u6548\u7387\u6781\u9ad8\u3002<\/li>\n<li>B+Tree \u7684\u68c0\u7d22\u6027\u80fd<strong>\u5e73\u5747\u4e14\u7a33\u5b9a<\/strong>\uff0c\u4e0d\u50cf\u666e\u901a B-Tree \u90a3\u6837\u6ce2\u52a8\u8f83\u5927\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Hash \u7d22\u5f15\u7684\u7279\u70b9\u4e0e\u9650\u5236<\/h3>\n<ol start=\"9\">\n<li>Hash \u7d22\u5f15\u901a\u8fc7\u4e00\u6b21\u54c8\u5e0c\u7b97\u6cd5\u5c06 key \u6620\u5c04\u4e3a\u54c8\u5e0c\u503c\uff0c\u76f4\u63a5\u5b9a\u4f4d\u5230\u6570\u636e\u5730\u5740\uff0c<strong>\u5355\u6761\u7b49\u503c\u67e5\u8be2\u901f\u5ea6\u6781\u5feb<\/strong>\uff0c\u4f18\u4e8e B+Tree\u3002<\/li>\n<li>Hash \u7d22\u5f15<strong>\u4e0d\u652f\u6301\u8303\u56f4\u67e5\u8be2<\/strong>\uff0c\u56e0\u4e3a\u54c8\u5e0c\u540e\u7684\u503c\u662f\u65e0\u5e8f\u7684\uff0c\u65e0\u6cd5\u5229\u7528\u987a\u5e8f\u8fdb\u884c\u8303\u56f4\u5b9a\u4f4d\u3002<\/li>\n<li>Hash \u7d22\u5f15<strong>\u65e0\u6cd5\u5229\u7528\u7d22\u5f15\u5b8c\u6210\u6392\u5e8f<\/strong>\uff0c\u56e0\u4e3a\u54c8\u5e0c\u8868\u672c\u8eab\u6ca1\u6709\u987a\u5e8f\u7ed3\u6784\u3002<\/li>\n<li>Hash \u7d22\u5f15<strong>\u4e0d\u652f\u6301\u8054\u5408\u7d22\u5f15\u7684\u6700\u5de6\u5339\u914d\u539f\u5219<\/strong>\uff0c\u56e0\u4e3a\u8054\u5408\u7d22\u5f15\u591a\u4e2a\u5b57\u6bb5\u4f1a\u88ab\u6620\u5c04\u4e3a\u540c\u4e00\u4e2a\u54c8\u5e0c\u503c\uff0c\u65e0\u6cd5\u62c6\u5206\u3002<\/li>\n<li>Hash \u7d22\u5f15<strong>\u4e0d\u9002\u5408 <code>LIKE<\/code> \u6a21\u7cca\u67e5\u8be2<\/strong>\uff0c\u56e0\u4e3a\u6a21\u7cca\u67e5\u8be2\u672c\u8d28\u4e0a\u4f9d\u8d56\u4e8e\u987a\u5e8f\u5339\u914d\u3002<\/li>\n<li>\u5f53\u6709\u5927\u91cf\u91cd\u590d\u952e\u503c\u5bfc\u81f4<strong>\u54c8\u5e0c\u51b2\u7a81\uff08\u54c8\u5e0c\u78b0\u649e\uff09<\/strong>\u65f6\uff0cHash \u7d22\u5f15\u9700\u8981\u904d\u5386\u51b2\u7a81\u94fe\u8868\uff0c\u6548\u7387\u4f1a\u5927\u5e45\u4e0b\u964d\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4f7f\u7528\u573a\u666f\u603b\u7ed3<\/h3>\n<ol start=\"15\">\n<li><strong>Hash \u7d22\u5f15\u9002\u7528\u573a\u666f<\/strong>\uff1a\u4ec5\u9002\u5408<strong>\u5355\u6761\u7b49\u503c\u67e5\u8be2<\/strong>\uff0c\u573a\u666f\u9650\u5236\u4e25\u683c\u3002<\/li>\n<li><strong>B+Tree \u7d22\u5f15\u9002\u7528\u573a\u666f<\/strong>\uff1a\u8986\u76d6\u8303\u56f4\u67e5\u8be2\u3001\u6392\u5e8f\u3001\u8054\u5408\u7d22\u5f15\u3001\u6a21\u7cca\u67e5\u8be2\u7b49\u7edd\u5927\u90e8\u5206\u573a\u666f\uff0c\u662f MySQL \u7d22\u5f15\u7684<strong>\u901a\u7528\u9009\u62e9<\/strong>\u3002<\/li>\n<\/ol>\n<h2>57-\u7d22\u5f15\u7684\u8bbe\u8ba1\u539f\u5219<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u7d22\u5f15\u8bbe\u8ba1\u7684\u6838\u5fc3\u539f\u5219<\/h3>\n<ol>\n<li>\u7d22\u5f15\u8bbe\u8ba1\u7684\u6839\u672c\u76ee\u6807\uff1a<strong>\u8ba9\u67e5\u8be2\u66f4\u5feb\u3001\u5360\u7528\u7a7a\u95f4\u66f4\u5c0f<\/strong>\uff0c\u6240\u6709\u5177\u4f53\u89c4\u5219\u90fd\u5e94\u670d\u52a1\u4e8e\u8fd9\u4e24\u70b9\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u9002\u5408\u5efa\u7d22\u5f15\u7684\u573a\u666f\uff088\u6761\uff09<\/h3>\n<ol start=\"2\">\n<li><strong>\u7d22\u5f15\u5217\u5fc5\u987b\u51fa\u73b0\u5728\u67e5\u8be2\u6761\u4ef6\u4e2d<\/strong>\uff1a\u7d22\u5f15\u5217\u5e94\u51fa\u73b0\u5728 <code>WHERE<\/code> \u5b50\u53e5\u6216\u8fde\u63a5\u6761\u4ef6\uff08<code>ON<\/code>\uff09\u4e2d\uff0c\u5426\u5219\u7d22\u5f15\u65e0\u610f\u4e49\u3002<\/li>\n<li><strong>\u6570\u636e\u91cf\u8f83\u5c0f\u7684\u8868\u4e0d\u9700\u8981\u5efa\u7d22\u5f15<\/strong>\uff1a\u8868\u6570\u636e\u672c\u8eab\u4e0d\u591a\u65f6\uff0c\u989d\u5916\u7ef4\u62a4\u7d22\u5f15\u53cd\u800c\u589e\u52a0\u5f00\u9500\uff0c\u6ca1\u6709\u6536\u76ca\u3002<\/li>\n<li><strong>\u4f18\u5148\u4f7f\u7528\u77ed\u7d22\u5f15<\/strong>\uff1a\u7d22\u5f15\u5b57\u6bb5\u8d8a\u77ed\uff0c\u5360\u7528\u7684\u7d22\u5f15\u7a7a\u95f4\u8d8a\u5c0f\u3002\u5bf9\u4e8e\u957f\u5b57\u7b26\u4e32\uff0c\u53ef\u4f7f\u7528<strong>\u524d\u7f00\u7d22\u5f15<\/strong>\uff08\u622a\u53d6\u524d\u51e0\u4e2a\u5b57\u7b26\u4f5c\u4e3a\u7d22\u5f15\uff09\u5728\u7a7a\u95f4\u548c\u6548\u7387\u95f4\u6298\u4e2d\u3002<\/li>\n<li><strong>\u4e0d\u8981\u8fc7\u5ea6\u7d22\u5f15<\/strong>\uff1a\u7d22\u5f15\u5e76\u975e\u8d8a\u591a\u8d8a\u597d\uff0c\u6bcf\u4e2a\u7d22\u5f15\u90fd\u4f1a\u5360\u7528\u78c1\u76d8\u7a7a\u95f4\u5e76\u964d\u4f4e\u5199\u64cd\u4f5c\uff08\u63d2\u5165\u3001\u66f4\u65b0\u3001\u5220\u9664\uff09\u7684\u6027\u80fd\u3002<\/li>\n<li><strong>\u6709\u5916\u952e\u7684\u5b57\u6bb5\u5fc5\u987b\u5efa\u7acb\u7d22\u5f15<\/strong>\uff1a\u5916\u952e\u5217\u5728\u5173\u8054\u67e5\u8be2\u4e2d\u9891\u7e41\u4f7f\u7528\uff0c\u5efa\u7acb\u7d22\u5f15\u53ef\u63d0\u5347\u8fde\u63a5\u67e5\u8be2\u6548\u7387\u3002<\/li>\n<li><strong>\u5c3d\u91cf\u6269\u5c55\u5df2\u6709\u7d22\u5f15\u800c\u975e\u65b0\u5efa<\/strong>\uff1a\u5982\u679c\u5df2\u6709\u7d22\u5f15\uff0c\u53ef\u901a\u8fc7\u5efa\u7acb<strong>\u8054\u5408\u7d22\u5f15<\/strong>\u6765\u8986\u76d6\u66f4\u591a\u5b57\u6bb5\uff0c\u907f\u514d\u91cd\u590d\u521b\u5efa\u3002<\/li>\n<li><strong>\u533a\u5206\u5ea6\u9ad8\u7684\u5217\u9002\u5408\u5efa\u7d22\u5f15<\/strong>\uff1a\u7d22\u5f15\u503c\u80fd\u67e5\u5230\u7684\u6570\u636e\u91cf\u8d8a\u5c11\u8d8a\u597d\uff0c\u533a\u5206\u5ea6\u9ad8\uff08\u5982\u552f\u4e00\u6027\u5b57\u6bb5\uff09\u7684\u5217\u7d22\u5f15\u6548\u679c\u66f4\u597d\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4e0d\u9002\u5408\u5efa\u7d22\u5f15\u7684\u573a\u666f\uff084\u6761\uff09<\/h3>\n<ol start=\"9\">\n<li><strong>\u9891\u7e41\u66f4\u65b0\u7684\u5b57\u6bb5\u4e0d\u9002\u5408\u5efa\u7d22\u5f15<\/strong>\uff1a\u66f4\u65b0\u5b57\u6bb5\u65f6\u9700\u8981\u540c\u6b65\u7ef4\u62a4\u7d22\u5f15\u8868\uff0c\u589e\u52a0\u989d\u5916\u5f00\u9500\uff0c\u5f71\u54cd\u5199\u6027\u80fd\u3002<\/li>\n<li><strong>\u533a\u5206\u5ea6\u4f4e\uff08\u91cd\u590d\u503c\u591a\uff09\u7684\u5217\u4e0d\u9002\u5408\u5efa\u7d22\u5f15<\/strong>\uff1a\u5982\u6027\u522b\u5b57\u6bb5\uff08\u53ea\u6709\u7537\/\u5973\uff09\uff0c\u67e5\u8be2\u4f1a\u8fd4\u56de\u5927\u91cf\u6570\u636e\uff0c\u7d22\u5f15\u6548\u679c\u5dee\u3002<\/li>\n<li><strong>\u67e5\u8be2\u4e2d\u5f88\u5c11\u6d89\u53ca\u7684\u5217\u4e0d\u9002\u5408\u5efa\u7d22\u5f15<\/strong>\uff1a\u4e0d\u5e38\u5728 <code>WHERE<\/code> \u6216\u8fde\u63a5\u6761\u4ef6\u4e2d\u51fa\u73b0\u7684\u5217\uff0c\u5efa\u7d22\u5f15\u65e0\u610f\u4e49\u3002<\/li>\n<li><strong><code>TEXT<\/code>\u3001<code>IMAGE<\/code>\u3001<code>BIT<\/code> \u7b49\u5927\u5b57\u6bb5\u7c7b\u578b\u4e0d\u9002\u5408\u5efa\u7d22\u5f15<\/strong>\uff1a\u8fd9\u4e9b\u6570\u636e\u7c7b\u578b\u5bf9\u7d22\u5f15\u4e0d\u53cb\u597d\uff08<code>TEXT<\/code> \u7684\u5168\u6587\u7d22\u5f15\u662f\u53e6\u4e00\u6982\u5ff5\uff09\u3002<\/li>\n<\/ol>\n<h2>58-mysql\u9501\u7684\u7c7b\u578b\u6709\u54ea\u4e9b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MySQL \u9501\u7684\u5206\u7c7b\u7ef4\u5ea6<\/h3>\n<ol>\n<li>MySQL \u4e2d\u7684\u9501\u53ef\u4ee5\u4ece\u4e09\u4e2a\u7ef4\u5ea6\u5206\u7c7b\uff1a<strong>\u6309\u9501\u7684\u5c5e\u6027<\/strong>\uff08\u5171\u4eab\u9501\/\u6392\u4ed6\u9501\uff09\u3001<strong>\u6309\u9501\u7684\u7c92\u5ea6<\/strong>\uff08\u884c\u9501\/\u8868\u9501\/\u9875\u9501\u7b49\uff09\u3001<strong>\u6309\u9501\u7684\u72b6\u6001<\/strong>\uff08\u610f\u5411\u5171\u4eab\u9501\/\u610f\u5411\u6392\u4ed6\u9501\uff09\uff0c\u540c\u4e00\u628a\u9501\u53ef\u4ee5\u540c\u65f6\u5c5e\u4e8e\u591a\u4e2a\u7ef4\u5ea6\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6309\u9501\u7684\u5c5e\u6027\u5206\u7c7b<\/h3>\n<ol start=\"2\">\n<li><strong>\u5171\u4eab\u9501\uff08S \u9501\uff0c\u8bfb\u9501\uff09<\/strong>\uff1a\u52a0\u4e86\u5171\u4eab\u9501\u7684\u6570\u636e\uff0c\u5176\u4ed6\u4e8b\u52a1\u53ea\u80fd\u518d\u52a0\u5171\u4eab\u9501\uff0c\u4e0d\u80fd\u52a0\u6392\u4ed6\u9501\uff0c\u7528\u4e8e\u652f\u6301\u5e76\u53d1\u8bfb\u53d6\u3002<\/li>\n<li><strong>\u6392\u4ed6\u9501\uff08X \u9501\uff0c\u5199\u9501\uff09<\/strong>\uff1a\u52a0\u4e86\u6392\u4ed6\u9501\u7684\u6570\u636e\uff0c\u5176\u4ed6\u4e8b\u52a1\u65e2\u4e0d\u80fd\u52a0\u5171\u4eab\u9501\u4e5f\u4e0d\u80fd\u52a0\u6392\u4ed6\u9501\uff0c\u53ea\u80fd\u7b49\u9501\u91ca\u653e\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u6309\u9501\u7684\u7c92\u5ea6\u5206\u7c7b<\/h3>\n<ol start=\"4\">\n<li><strong>\u8868\u9501<\/strong>\uff1a\u9501\u5b9a\u6574\u5f20\u8868\uff0c\u52a0\u9501\u7b80\u5355\u4f46\u51b2\u7a81\u6982\u7387\u9ad8\uff0c\u5e76\u53d1\u5ea6\u4f4e\u3002<\/li>\n<li><strong>\u884c\u9501<\/strong>\uff1a\u9501\u5b9a\u4e00\u884c\u6216\u591a\u884c\u8bb0\u5f55\uff0c\u52a0\u9501\u8f83\u590d\u6742\u4f46\u51b2\u7a81\u6982\u7387\u4f4e\uff0c\u5e76\u53d1\u5ea6\u9ad8\u3002<\/li>\n<li><strong>\u8bb0\u5f55\u9501\uff08Record Lock\uff09<\/strong>\uff1a\u884c\u9501\u7684\u4e00\u79cd\uff0c\u7cbe\u51c6\u9501\u5b9a<strong>\u67d0\u4e00\u6761\u8bb0\u5f55<\/strong>\uff0c\u53ea\u4f1a\u5728\u547d\u4e2d<strong>\u552f\u4e00\u7d22\u5f15<\/strong>\u65f6\u89e6\u53d1\u3002<\/li>\n<li><strong>\u9875\u9501\uff08Page Lock\uff09<\/strong>\uff1a\u7c92\u5ea6\u4ecb\u4e8e\u884c\u9501\u548c\u8868\u9501\u4e4b\u95f4\uff0c\u9501\u5b9a\u76f8\u90bb\u7684\u4e00\u7ec4\u8bb0\u5f55\uff0c\u52a0\u9501\u6548\u7387\u548c\u51b2\u7a81\u6982\u7387\u4ecb\u4e8e\u4e24\u8005\u4e4b\u95f4\u3002<\/li>\n<li><strong>\u95f4\u9699\u9501\uff08Gap Lock\uff09<\/strong>\uff1a\u884c\u9501\u7684\u4e00\u79cd\uff0c\u9501\u5b9a\u4e00\u4e2a<strong>\u533a\u95f4<\/strong>\uff08\u5982\u9501\u4f4f ID \u4e3a 2 \u548c 3 \u7684\u95f4\u9699\uff09\uff0c\u4e0d\u9501\u5b9a\u5177\u4f53\u8bb0\u5f55\uff0c\u7528\u4e8e\u9632\u6b62\u5e7b\u8bfb\u3002<\/li>\n<li><strong>\u4e34\u952e\u9501\uff08Next-Key Lock\uff09<\/strong>\uff1a\u884c\u9501\u7684\u4e00\u79cd\uff0c\u662f<strong>\u8bb0\u5f55\u9501 + \u95f4\u9699\u9501\u7684\u7ec4\u5408<\/strong>\uff0c\u9501\u5b9a\u8bb0\u5f55\u672c\u8eab\u4ee5\u53ca\u8bb0\u5f55\u524d\u7684\u95f4\u9699\uff08\u5de6\u95ed\u53f3\u95ed\u533a\u95f4\uff09\uff0c\u662f InnoDB \u9ed8\u8ba4\u7684\u884c\u9501\u5b9e\u73b0\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u6309\u9501\u7684\u72b6\u6001\u5206\u7c7b\uff08\u610f\u5411\u9501\uff09<\/h3>\n<ol start=\"10\">\n<li><strong>\u610f\u5411\u5171\u4eab\u9501\uff08IS \u9501\uff09<\/strong>\uff1a\u4e8b\u52a1\u51c6\u5907\u5bf9\u67d0\u884c\u52a0\u5171\u4eab\u9501\u65f6\uff0c\u5148\u5728\u8868\u7ea7\u522b\u52a0\u610f\u5411\u5171\u4eab\u9501\uff0c\u8868\u793a&#8221;\u6709\u4eba\u8981\u8bfb\u67d0\u4e9b\u884c&#8221;\u3002<\/li>\n<li><strong>\u610f\u5411\u6392\u4ed6\u9501\uff08IX \u9501\uff09<\/strong>\uff1a\u4e8b\u52a1\u51c6\u5907\u5bf9\u67d0\u884c\u52a0\u6392\u4ed6\u9501\u65f6\uff0c\u5148\u5728\u8868\u7ea7\u522b\u52a0\u610f\u5411\u6392\u4ed6\u9501\uff0c\u8868\u793a&#8221;\u6709\u4eba\u8981\u5199\u67d0\u4e9b\u884c&#8221;\u3002<\/li>\n<li>\u610f\u5411\u9501\u7684\u4f5c\u7528\u662f<strong>\u63d0\u9ad8\u52a0\u9501\u6548\u7387<\/strong>\uff1a\u5f53\u4e8b\u52a1\u8981\u5bf9\u6574\u5f20\u8868\u52a0\u8868\u9501\u65f6\uff0c\u53ea\u9700\u68c0\u67e5\u8868\u4e0a\u662f\u5426\u6709\u610f\u5411\u9501\uff0c\u65e0\u9700\u9010\u884c\u904d\u5386\u68c0\u67e5\u662f\u5426\u6709\u884c\u9501\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u8865\u5145\u8bf4\u660e<\/h3>\n<ol start=\"13\">\n<li>\u4e0d\u540c\u5b58\u50a8\u5f15\u64ce\u9ed8\u8ba4\u4f7f\u7528\u7684\u9501\u7c92\u5ea6\u4e0d\u540c\uff1a<strong>InnoDB \u9ed8\u8ba4\u884c\u9501\uff0cMyISAM \u9ed8\u8ba4\u8868\u9501<\/strong>\u3002<\/li>\n<li>\u9501\u7684\u52a0\u9501\u884c\u4e3a\u5bf9\u5f00\u53d1\u8005\u901a\u5e38\u662f<strong>\u900f\u660e\u7684<\/strong>\uff08\u7531\u5b58\u50a8\u5f15\u64ce\u81ea\u52a8\u51b3\u5b9a\uff09\uff0c\u4f46 MySQL \u4e5f\u63d0\u4f9b\u4e86\u663e\u5f0f\u52a0\u9501\u7684\u8bed\u6cd5\u3002<\/li>\n<\/ol>\n<h2>59-mysql\u6267\u884c\u8ba1\u5212\u600e\u4e48\u770b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u6267\u884c\u8ba1\u5212\u7684\u6982\u5ff5\u4e0e\u67e5\u770b\u65b9\u5f0f<\/h3>\n<ol>\n<li><strong>\u6267\u884c\u8ba1\u5212<\/strong>\u662f MySQL \u544a\u8bc9\u4f60\u5b83\u4f1a\u5982\u4f55\u6267\u884c\u4f60\u7684 SQL \u8bed\u53e5\uff08\u5305\u62ec\u67e5\u8be2\u987a\u5e8f\u3001\u7d22\u5f15\u4f7f\u7528\u65b9\u5f0f\u3001\u9884\u4f30\u7ed3\u679c\u884c\u6570\u7b49\uff09\uff0c\u662f SQL \u4f18\u5316\u7684\u6838\u5fc3\u4f9d\u636e\u3002<\/li>\n<li>\u67e5\u770b\u6267\u884c\u8ba1\u5212\u7684\u65b9\u5f0f\uff1a\u5728 SQL \u8bed\u53e5\u524d\u52a0\u4e0a <strong><code>EXPLAIN<\/code><\/strong> \u5173\u952e\u5b57\u5373\u53ef\u6253\u5370\u6267\u884c\u8ba1\u5212\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6267\u884c\u8ba1\u5212\u5404\u5b57\u6bb5\u542b\u4e49<\/h3>\n<ol start=\"3\">\n<li><strong><code>id<\/code><\/strong>\uff1a\u4ee3\u8868\u6bcf\u4e00\u4e2a <code>SELECT<\/code> \u67e5\u8be2\u7684\u7f16\u53f7\uff0cid \u503c\u8d8a\u5927\uff0c\u8be5\u67e5\u8be2\u8d8a\u4f18\u5148\u6267\u884c\u3002<\/li>\n<li><strong><code>select_type<\/code><\/strong>\uff1a\u8868\u793a\u67e5\u8be2\u7684\u7c7b\u578b\uff08\u7b80\u5355\u67e5\u8be2\u3001\u5b50\u67e5\u8be2\u3001\u5173\u8054\u67e5\u8be2\u7b49\uff09\u3002<\/li>\n<li><strong><code>table<\/code><\/strong>\uff1a\u5f53\u524d\u67e5\u8be2\u6240\u5bf9\u5e94\u7684\u8868\u540d\u3002<\/li>\n<li><strong><code>partitions<\/code><\/strong>\uff1a\u5982\u679c\u4f7f\u7528\u4e86\u5206\u533a\u8868\uff0c\u663e\u793a\u5206\u533a\u4fe1\u606f\u3002<\/li>\n<li><strong><code>possible_keys<\/code><\/strong>\uff1a\u67e5\u8be2\u65f6<strong>\u53ef\u80fd\u4f7f\u7528<\/strong>\u7684\u7d22\u5f15\u5217\u8868\uff08\u4e0d\u4ee3\u8868\u4e00\u5b9a\u4f1a\u7528\uff09\u3002<\/li>\n<li><strong><code>key<\/code><\/strong>\uff1a\u67e5\u8be2\u65f6<strong>\u5b9e\u9645\u4f7f\u7528<\/strong>\u7684\u7d22\u5f15\u540d\u79f0\uff08\u8fd9\u662f\u91cd\u70b9\u5173\u6ce8\u7684\u5b57\u6bb5\uff09\u3002<\/li>\n<li><strong><code>key_len<\/code><\/strong>\uff1a\u8054\u5408\u7d22\u5f15\u4e2d\u5b9e\u9645\u547d\u4e2d\u7684\u7d22\u5f15\u957f\u5ea6\uff0c\u7528\u4e8e\u5224\u65ad\u8054\u5408\u7d22\u5f15\u4e2d\u547d\u4e2d\u4e86\u51e0\u4e2a\u5b57\u6bb5\u3002<\/li>\n<li><strong><code>ref<\/code><\/strong>\uff1a\u663e\u793a\u7d22\u5f15\u7684\u54ea\u4e00\u5217\u88ab\u4f7f\u7528\u4e86\uff0c\u5982\u679c\u662f\u5e38\u91cf\u7b49\u503c\u67e5\u8be2\uff08\u5982 <code>id = 1<\/code>\uff09\uff0c\u663e\u793a\u4e3a <code>const<\/code>\u3002<\/li>\n<li><strong><code>rows<\/code><\/strong>\uff1a\u9884\u4f30\u9700\u8981\u626b\u63cf\u7684\u6570\u636e\u884c\u6570\uff0c<strong>\u626b\u63cf\u884c\u6570\u8d8a\u5c11\uff0c\u6267\u884c\u8ba1\u5212\u8d8a\u4f18<\/strong>\u3002<\/li>\n<li><strong><code>filtered<\/code><\/strong>\uff08\u767e\u5206\u6bd4\uff09\uff1a<code>rows \u00d7 filtered<\/code> \u8868\u793a\u6700\u7ec8\u8fd4\u56de\u7684\u884c\u6570\uff0c\u8be5\u503c\u8d8a\u9ad8\u8d8a\u597d\uff08\u626b\u63cf\u7684\u884c\u8d8a\u6709\u6548\uff09\u3002<\/li>\n<li><strong><code>Extra<\/code><\/strong>\uff1a\u989d\u5916\u4fe1\u606f\uff0c\u5982 <code>Using index<\/code>\uff08\u8986\u76d6\u7d22\u5f15\uff09\u3001<code>Using filesort<\/code>\uff08\u6587\u4ef6\u6392\u5e8f\uff09\u3001<code>Using temporary<\/code>\uff08\u4e34\u65f6\u8868\uff09\u7b49\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001<code>Extra<\/code> \u5b57\u6bb5\u7684\u5173\u952e\u503c<\/h3>\n<ol start=\"14\">\n<li><strong><code>Using index<\/code>\uff08\u8986\u76d6\u7d22\u5f15\uff09<\/strong>\uff1a\u67e5\u8be2\u6240\u9700\u6570\u636e\u5168\u90e8\u4ece\u7d22\u5f15\u4e2d\u83b7\u53d6\uff0c\u65e0\u9700\u56de\u8868\uff0c\u6027\u80fd\u9ad8\u3002<\/li>\n<li><strong><code>Using filesort<\/code><\/strong>\uff1a\u6392\u5e8f\u672a\u8d70\u7d22\u5f15\uff0c\u9700\u8981\u989d\u5916\u6392\u5e8f\uff0c\u6027\u80fd\u5dee\uff0c\u5e94\u5c3d\u91cf\u907f\u514d\u3002<\/li>\n<li><strong><code>Using temporary<\/code><\/strong>\uff1a\u4f7f\u7528\u4e86\u4e34\u65f6\u8868\uff08\u5e38\u89c1\u4e8e\u6392\u5e8f\u6216\u5206\u7ec4\uff09\uff0c\u6027\u80fd\u5dee\uff0c\u5e94\u5c3d\u91cf\u907f\u514d\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001<code>type<\/code> \u5b57\u6bb5\u2014\u2014\u6267\u884c\u8ba1\u5212\u6700\u6838\u5fc3\u7684\u6307\u6807<\/h3>\n<ol start=\"17\">\n<li><code>type<\/code> \u5b57\u6bb5\u8868\u793a\u7d22\u5f15\u7684\u8bbf\u95ee\u7c7b\u578b\uff0c\u662f\u8861\u91cf SQL \u6027\u80fd\u7684\u6700\u6838\u5fc3\u6307\u6807\uff0c<strong>\u6027\u80fd\u4ece\u9ad8\u5230\u4f4e\u6392\u5e8f<\/strong>\u4e3a\uff1a<strong><code>system<\/code> &gt; <code>const<\/code> &gt; <code>eq_ref<\/code> &gt; <code>ref<\/code> &gt; <code>range<\/code> &gt; <code>index<\/code> &gt; <code>ALL<\/code><\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u5404 <code>type<\/code> \u503c\u7684\u542b\u4e49<\/h3>\n<ol start=\"18\">\n<li><strong><code>const<\/code><\/strong>\uff1a\u901a\u8fc7\u7d22\u5f15\u4e00\u6b21\u547d\u4e2d\uff0c\u5339\u914d\u4e00\u884c\u6570\u636e\uff08\u5982 <code>id = 1<\/code> \u7b49\u503c\u67e5\u8be2\u4e3b\u952e\/\u552f\u4e00\u7d22\u5f15\uff09\uff0c\u6027\u80fd\u6781\u9ad8\u3002<\/li>\n<li><strong><code>system<\/code><\/strong>\uff1a<code>const<\/code> \u7684\u7279\u6b8a\u60c5\u51b5\uff0c\u8868\u4e2d\u53ea\u6709\u4e00\u884c\u8bb0\u5f55\uff08\u5982\u7cfb\u7edf\u8868\uff09\uff0c\u6027\u80fd\u6700\u9ad8\u3002<\/li>\n<li><strong><code>eq_ref<\/code><\/strong>\uff1a\u4f7f\u7528\u4e86<strong>\u552f\u4e00\u7d22\u5f15<\/strong>\u8fdb\u884c\u5173\u8054\u67e5\u8be2\uff0c\u6bcf\u4e2a\u7d22\u5f15\u503c\u53ea\u5339\u914d\u4e00\u6761\u8bb0\u5f55\uff0c\u6027\u80fd\u9ad8\u3002<\/li>\n<li><strong><code>ref<\/code><\/strong>\uff1a\u4f7f\u7528\u4e86<strong>\u975e\u552f\u4e00\u7d22\u5f15<\/strong>\u8fdb\u884c\u67e5\u8be2\uff0c\u53ef\u80fd\u5339\u914d\u591a\u6761\u8bb0\u5f55\uff0c\u6027\u80fd\u4e2d\u7b49\u3002<\/li>\n<li><strong><code>range<\/code><\/strong>\uff1a\u8303\u56f4\u67e5\u8be2\uff08\u5982 <code>BETWEEN<\/code>\u3001<code>&gt;<\/code>\u3001<code>&lt;<\/code>\uff09\uff0c\u626b\u63cf\u591a\u4e2a\u7d22\u5f15\u503c\uff0c\u6027\u80fd\u4e00\u822c\u3002<\/li>\n<li><strong><code>index<\/code><\/strong>\uff1a\u904d\u5386\u6574\u4e2a\u7d22\u5f15\u6811\uff08\u5168\u7d22\u5f15\u626b\u63cf\uff09\uff0c\u6bd4\u5168\u8868\u626b\u63cf\u597d\u4e00\u70b9\uff0c\u4f46\u4ecd\u8f83\u4f4e\u6548\u3002<\/li>\n<li><strong><code>ALL<\/code><\/strong>\uff1a\u5168\u8868\u626b\u63cf\uff0c\u672a\u8d70\u4efb\u4f55\u7d22\u5f15\uff0c\u6027\u80fd\u6700\u5dee\uff0c\u5e94\u5c3d\u91cf\u907f\u514d\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u603b\u7ed3<\/h3>\n<ol start=\"25\">\n<li>\u67e5\u770b\u6267\u884c\u8ba1\u5212\u7684\u4f18\u5316\u601d\u8def\uff1a<strong>\u4f18\u5148\u5173\u6ce8 <code>type<\/code> \u662f\u5426\u8fbe\u5230 <code>ref<\/code> \u6216\u4ee5\u4e0a\uff0c\u907f\u514d <code>ALL<\/code> \u548c <code>index<\/code>\uff1b\u5173\u6ce8 <code>Extra<\/code> \u4e2d\u662f\u5426\u6709 <code>Using filesort<\/code> \u6216 <code>Using temporary<\/code>\uff1b\u5173\u6ce8 <code>rows<\/code> \u626b\u63cf\u884c\u6570\u662f\u5426\u8fc7\u5927<\/strong>\uff0c\u7efc\u5408\u5224\u65ad SQL \u662f\u5426\u9700\u8981\u4f18\u5316\u3002<\/li>\n<\/ol>\n<h2>61-\u600e\u4e48\u5904\u7406\u6162\u67e5\u8be2<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u6162\u67e5\u8be2\u7684\u6392\u67e5\u4e0e\u5206\u6790<\/h3>\n<ol>\n<li>\u4f7f\u7528\u4e3b\u952e\u8fdb\u884c\u7b80\u5355\u67e5\u8be2\u901a\u5e38\u4e0d\u4f1a\u51fa\u73b0\u6162\u67e5\u8be2\uff0c\u5982\u679c\u4ecd\u7136\u6162\uff0c\u8bf4\u660e\u6570\u636e\u91cf\u8fc7\u5927\uff0cSQL \u672c\u8eab\u5df2\u65e0\u4f18\u5316\u7a7a\u95f4\u3002<\/li>\n<li>\u590d\u6742\u67e5\u8be2\uff08\u591a\u8868\u5173\u8054\u3001\u5d4c\u5957\u5b50\u67e5\u8be2\u7b49\uff09\u9700\u8981\u5728\u6d4b\u8bd5\u73af\u5883\u4e2d\u5148\u6d4b\u8bd5\u8017\u65f6\u5e76\u67e5\u770b\u6267\u884c\u8ba1\u5212\uff0c\u5b9a\u4f4d\u6027\u80fd\u74f6\u9888\u3002<\/li>\n<li>\u5728\u751f\u4ea7\u73af\u5883\u4e2d\uff0c\u6162\u67e5\u8be2\u901a\u5e38\u7531 DBA\uff08\u6570\u636e\u5e93\u7ba1\u7406\u5458\uff09\u76d1\u63a7\u53d1\u73b0\u5e76\u53cd\u9988\u7ed9\u5f00\u53d1\u4eba\u5458\u5904\u7406\uff08\u5c0f\u516c\u53f8\u53ef\u80fd\u7531\u5f00\u53d1\u81ea\u5df1\u8d1f\u8d23\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6162\u67e5\u8be2\u7684\u4e09\u79cd\u5e38\u89c1\u539f\u56e0<\/h3>\n<ol start=\"4\">\n<li><strong>\u539f\u56e0\u4e00\uff1a\u7d22\u5f15\u672a\u547d\u4e2d<\/strong>\u2014\u2014\u5b57\u6bb5\u4e0a\u867d\u7136\u6709\u7d22\u5f15\uff0c\u4f46\u67e5\u8be2\u8bed\u53e5\u5199\u6cd5\u5bfc\u81f4\u7d22\u5f15\u5931\u6548\uff08\u5982\u4f7f\u7528\u4e86\u51fd\u6570\u3001\u9690\u5f0f\u7c7b\u578b\u8f6c\u6362\u3001<code>LIKE '%xxx'<\/code> \u7b49\uff09\u3002<\/li>\n<li><strong>\u539f\u56e0\u4e8c\uff1a\u67e5\u8be2\u4e86\u4e0d\u9700\u8981\u7684\u5217<\/strong>\u2014\u2014\u5982\u4f7f\u7528 <code>SELECT *<\/code> \u67e5\u8be2\u4e86\u5168\u90e8\u5217\uff0c\u800c\u5b9e\u9645\u53ea\u9700\u8981\u5176\u4e2d\u51e0\u5217\uff0c\u589e\u52a0\u4e86 I\/O \u5f00\u9500\u3002<\/li>\n<li><strong>\u539f\u56e0\u4e09\uff1a\u6570\u636e\u91cf\u8fc7\u5927<\/strong>\u2014\u2014\u8868\u672c\u8eab\u6570\u636e\u91cf\u5de8\u5927\uff0c\u5373\u4f7f\u8d70\u7d22\u5f15\u4e5f\u65e0\u6cd5\u6ee1\u8db3\u6027\u80fd\u8981\u6c42\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u9488\u5bf9\u4e0d\u540c\u539f\u56e0\u7684\u4f18\u5316\u7b56\u7565<\/h3>\n<ol start=\"7\">\n<li><strong>\u9488\u5bf9\u539f\u56e0\u4e8c<\/strong>\uff1a\u4ece\u4e1a\u52a1\u89d2\u5ea6\u5206\u6790\uff0c\u53bb\u6389 <code>SELECT *<\/code> \u7b49\u591a\u4f59\u5217\uff0c\u53ea\u67e5\u8be2\u5fc5\u8981\u7684\u5b57\u6bb5\u3002<\/li>\n<li><strong>\u9488\u5bf9\u539f\u56e0\u4e00<\/strong>\uff1a\u901a\u8fc7 <code>EXPLAIN<\/code> \u5206\u6790\u6267\u884c\u8ba1\u5212\uff0c\u67e5\u770b <code>type<\/code>\u3001<code>key<\/code> \u7b49\u5b57\u6bb5\uff0c\u786e\u8ba4\u7d22\u5f15\u662f\u5426\u547d\u4e2d\u4ee5\u53ca\u662f\u5426\u4f7f\u7528\u4e86\u6548\u7387\u8f83\u9ad8\u7684\u7d22\u5f15\u7c7b\u578b\u3002<\/li>\n<li><strong>\u9488\u5bf9\u539f\u56e0\u4e09<\/strong>\uff1a\u5f53 SQL \u672c\u8eab\u5df2\u65e0\u4f18\u5316\u7a7a\u95f4\u4e14\u6570\u636e\u91cf\u8fc7\u5927\u65f6\uff0c\u9700\u8981\u8003\u8651<strong>\u5206\u5e93\u5206\u8868<\/strong>\uff08\u6c34\u5e73\u62c6\u5206\u6216\u5782\u76f4\u62c6\u5206\uff09\u6765\u5206\u6563\u6570\u636e\u538b\u529b\u3002<\/li>\n<\/ol>\n<h2>62-ACID\u9760\u4ec0\u4e48\u4fdd\u8bc1\u7684<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ACID \u4e0e\u65e5\u5fd7\u7684\u5bf9\u5e94\u5173\u7cfb<\/h3>\n<ol>\n<li><strong>\u539f\u5b50\u6027\uff08Atomicity\uff09<\/strong>\uff1a\u7531 <strong><code>undo log<\/code>\uff08\u56de\u6eda\u65e5\u5fd7\uff09<\/strong> \u4fdd\u8bc1\uff0c\u8bb0\u5f55\u4e86\u9700\u8981\u56de\u6eda\u7684\u65e5\u5fd7\u4fe1\u606f\uff0c\u4e8b\u52a1\u56de\u6eda\u65f6\u6839\u636e <code>undo log<\/code> \u64a4\u9500\u5df2\u6267\u884c\u6210\u529f\u7684 SQL \u64cd\u4f5c\u3002<\/li>\n<li><strong>\u4e00\u81f4\u6027\uff08Consistency\uff09<\/strong>\uff1a\u7531<strong>\u5176\u4ed6\u4e09\u5927\u7279\u6027\uff08\u539f\u5b50\u6027\u3001\u9694\u79bb\u6027\u3001\u6301\u4e45\u6027\uff09<\/strong> \u5171\u540c\u4fdd\u8bc1\uff0c\u540c\u65f6\u8fd8\u9700\u8981<strong>\u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u672c\u8eab<\/strong>\u6765\u4fdd\u8bc1\u4e1a\u52a1\u6570\u636e\u7684\u4e00\u81f4\u6027\uff08\u5982\u8d26\u6237\u4f59\u989d\u4e0d\u8db3\u65f6\u4e0d\u5141\u8bb8\u8f6c\u8d26\uff09\u3002<\/li>\n<li><strong>\u9694\u79bb\u6027\uff08Isolation\uff09<\/strong>\uff1a\u7531 <strong><code>MVCC<\/code>\uff08\u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\uff09<\/strong> \u4fdd\u8bc1\uff0c\u901a\u8fc7\u4e0d\u540c\u7248\u672c\u7684\u6570\u636e\u6765\u5b9e\u73b0\u4e8b\u52a1\u9694\u79bb\u3002<\/li>\n<li><strong>\u6301\u4e45\u6027\uff08Durability\uff09<\/strong>\uff1a\u7531 <strong><code>redo log<\/code>\uff08\u91cd\u505a\u65e5\u5fd7\uff09 + \u5185\u5b58<\/strong> \u4fdd\u8bc1\uff0c\u6570\u636e\u4fee\u6539\u65f6\u540c\u65f6\u5199\u5165\u5185\u5b58\u548c <code>redo log<\/code>\uff0c\u5b95\u673a\u540e\u53ef\u901a\u8fc7 <code>redo log<\/code> \u6062\u590d\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001InnoDB \u7684\u4e24\u79cd\u5173\u952e\u65e5\u5fd7<\/h3>\n<ol start=\"5\">\n<li><strong><code>redo log<\/code><\/strong>\uff1a\u8bb0\u5f55\u4e86\u6570\u636e\u4fee\u6539\u540e\u7684\u72b6\u6001\uff08\u7269\u7406\u65e5\u5fd7\uff09\uff0c\u7528\u4e8e\u4fdd\u8bc1\u6301\u4e45\u6027\uff0c\u5b95\u673a\u65f6\u53ef\u901a\u8fc7\u5b83\u6062\u590d\u5df2\u63d0\u4ea4\u4f46\u672a\u5199\u5165\u78c1\u76d8\u7684\u6570\u636e\u3002<\/li>\n<li><strong><code>undo log<\/code><\/strong>\uff1a\u8bb0\u5f55\u4e86\u4e8b\u52a1\u56de\u6eda\u6240\u9700\u7684\u4fe1\u606f\uff08\u903b\u8f91\u65e5\u5fd7\uff0c\u5373\u53cd\u5411\u64cd\u4f5c\u7684 SQL\uff09\uff0c\u7528\u4e8e\u4fdd\u8bc1\u539f\u5b50\u6027\uff0c\u4e8b\u52a1\u56de\u6eda\u65f6\u64a4\u9500\u5df2\u6267\u884c\u7684\u64cd\u4f5c\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001<code>redo log<\/code> \u4e0e <code>binlog<\/code> \u7684\u534f\u540c\u673a\u5236<\/h3>\n<ol start=\"7\">\n<li><strong><code>binlog<\/code>\uff08\u5f52\u6863\u65e5\u5fd7\uff09<\/strong> \u662f MySQL Server \u7ea7\u522b\u7684\u65e5\u5fd7\uff0c\u7528\u4e8e\u4e3b\u4ece\u590d\u5236\u548c\u6570\u636e\u6062\u590d\uff0c\u4ece\u5e93\u901a\u8fc7\u6267\u884c <code>binlog<\/code> \u4e2d\u7684 SQL \u6765\u540c\u6b65\u4e3b\u5e93\u6570\u636e\u3002<\/li>\n<li>InnoDB \u4e8b\u52a1\u63d0\u4ea4\u7684\u6d41\u7a0b\uff1a\u5148\u5199 <code>redo log<\/code>\uff08\u8fdb\u5165 <code>prepare<\/code> \u72b6\u6001\uff09\u2192 \u518d\u5199 <code>binlog<\/code> \u5e76\u6301\u4e45\u5316 \u2192 \u6700\u540e\u5728 <code>redo log<\/code> \u4e2d\u5199\u5165 <code>commit<\/code> \u6807\u8bb0\uff0c\u4e8b\u52a1\u624d\u7b97\u771f\u6b63\u63d0\u4ea4\u6210\u529f\u3002<\/li>\n<li>\u4e00\u4e2a\u4e8b\u52a1\u662f\u5426\u771f\u6b63\u63d0\u4ea4\u6210\u529f\uff0c\u53d6\u51b3\u4e8e <strong><code>redo log<\/code> \u4e2d\u662f\u5426\u6709 <code>commit<\/code> \u6807\u8bb0<\/strong>\uff0c\u4ee5\u6b64\u4fdd\u8bc1 <code>redo log<\/code> \u548c <code>binlog<\/code> \u7684\u6570\u636e\u4e00\u81f4\u6027\u3002<\/li>\n<li><code>redo log<\/code> \u6700\u7ec8\u5237\u76d8\uff08\u5199\u5165\u78c1\u76d8\uff09\u662f\u5728<strong>\u64cd\u4f5c\u7cfb\u7edf\u7a7a\u95f2\u65f6<\/strong>\u5f02\u6b65\u8fdb\u884c\u7684\uff0c\u5e76\u975e\u5199\u5b8c\u7acb\u5373\u5237\u76d8\u3002<\/li>\n<\/ol>\n<h2>63-\u4ec0\u4e48\u662fMVCC<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MVCC \u7684\u57fa\u672c\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>MVCC\uff08\u591a\u7248\u672c\u5e76\u53d1\u63a7\u5236\uff09<\/strong> \u662f\u4e00\u79cd\u901a\u8fc7\u4fdd\u5b58\u6570\u636e\u7684\u591a\u4e2a\u7248\u672c\u6765\u5b9e\u73b0\u8bfb\u5199\u4e0d\u51b2\u7a81\u7684\u673a\u5236\uff0c\u4e0d\u540c\u4e8b\u52a1\u53ef\u4ee5\u770b\u5230\u81ea\u5df1\u7279\u5b9a\u7248\u672c\u7684\u6570\u636e\u3002<\/li>\n<li>MySQL \u4e2d MVCC <strong>\u4ec5\u5728 <code>READ COMMITTED<\/code>\uff08RC\uff0c\u5df2\u63d0\u4ea4\u8bfb\uff09\u548c <code>REPEATABLE READ<\/code>\uff08RR\uff0c\u53ef\u91cd\u590d\u8bfb\uff09\u4e24\u79cd\u9694\u79bb\u7ea7\u522b\u4e0b\u751f\u6548<\/strong>\uff0c<code>READ UNCOMMITTED<\/code> \u548c <code>SERIALIZABLE<\/code> \u4e0d\u517c\u5bb9 MVCC\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001MVCC \u7684\u4e24\u5927\u6838\u5fc3\u7ec4\u4ef6<\/h3>\n<ol start=\"3\">\n<li><strong>\u7248\u672c\u94fe\uff08Version Chain\uff09<\/strong>\uff1a\u7531 <code>undo log<\/code> \u7ef4\u62a4\uff0c\u6bcf\u6b21\u4fee\u6539\u6570\u636e\u65f6\uff0c\u65e7\u7248\u672c\u5b58\u5165 <code>undo log<\/code>\uff0c\u5e76\u901a\u8fc7 <code>roll_ptr<\/code>\uff08\u56de\u6eda\u6307\u9488\uff09\u4e32\u8054\u6210\u94fe\uff0c\u65b0\u7248\u672c\u6307\u5411\u65e7\u7248\u672c\u3002<\/li>\n<li><strong><code>read view<\/code>\uff08\u8bfb\u89c6\u56fe\uff09<\/strong>\uff1a\u4e8b\u52a1\u6267\u884c\u67e5\u8be2\u65f6\u751f\u6210\u7684\u4e00\u4e2a\u5feb\u7167\uff0c\u7ef4\u62a4\u4e86\u5f53\u524d\u7cfb\u7edf\u4e2d<strong>\u6240\u6709\u672a\u63d0\u4ea4\u7684\u6d3b\u52a8\u4e8b\u52a1 ID \u5217\u8868<\/strong>\uff08\u6309\u5927\u5c0f\u6392\u5e8f\u7684\u6570\u7ec4\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001InnoDB \u805a\u96c6\u7d22\u5f15\u4e2d\u7684\u4e24\u4e2a\u9690\u85cf\u5217<\/h3>\n<ol start=\"5\">\n<li><strong><code>trx_id<\/code>\uff08\u4e8b\u52a1 ID\uff09<\/strong>\uff1a\u8bb0\u5f55\u6700\u8fd1\u4e00\u6b21\u4fee\u6539\u8be5\u7d22\u5f15\u8bb0\u5f55\u7684\u4e8b\u52a1 ID\uff0cMySQL \u5168\u5c40\u9012\u589e\u5206\u914d\u3002<\/li>\n<li><strong><code>roll_ptr<\/code>\uff08\u56de\u6eda\u6307\u9488\uff09<\/strong>\uff1a\u6307\u5411 <code>undo log<\/code> \u4e2d\u8be5\u8bb0\u5f55\u7684\u4e0a\u4e00\u4e2a\u65e7\u7248\u672c\uff0c\u7528\u4e8e\u6784\u5efa\u7248\u672c\u94fe\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001<code>read view<\/code> \u7684\u53ef\u89c1\u6027\u5224\u65ad\u89c4\u5219<\/h3>\n<ol start=\"7\">\n<li>\u67e5\u8be2\u6570\u636e\u65f6\uff0c\u5148\u83b7\u53d6\u5f53\u524d\u8bb0\u5f55\u7248\u672c\u4e2d\u7684 <code>trx_id<\/code>\uff0c\u7136\u540e\u4e0e <code>read view<\/code> \u4e2d\u7684\u6d3b\u52a8\u4e8b\u52a1 ID \u6570\u7ec4\u8fdb\u884c\u6bd4\u8f83\uff0c\u5224\u65ad\u8be5\u7248\u672c\u662f\u5426\u53ef\u89c1\u3002<\/li>\n<li><strong>\u89c4\u5219\u4e00<\/strong>\uff1a\u5982\u679c\u8bb0\u5f55\u7684 <code>trx_id<\/code> \u5c0f\u4e8e <code>read view<\/code> \u4e2d\u7684\u6700\u5c0f ID\uff08\u5728\u5de6\u4fa7\uff09\uff0c\u8bf4\u660e\u8be5\u4e8b\u52a1\u5df2\u63d0\u4ea4\uff0c<strong>\u8be5\u7248\u672c\u53ef\u89c1<\/strong>\u3002<\/li>\n<li><strong>\u89c4\u5219\u4e8c<\/strong>\uff1a\u5982\u679c\u8bb0\u5f55\u7684 <code>trx_id<\/code> \u5927\u4e8e <code>read view<\/code> \u4e2d\u7684\u6700\u5927 ID\uff08\u5728\u53f3\u4fa7\uff09\uff0c\u8bf4\u660e\u8be5\u4e8b\u52a1\u5728 <code>read view<\/code> \u751f\u6210\u4e4b\u540e\u624d\u5f00\u542f\uff0c<strong>\u8be5\u7248\u672c\u4e0d\u53ef\u89c1<\/strong>\u3002<\/li>\n<li><strong>\u89c4\u5219\u4e09<\/strong>\uff1a\u5982\u679c\u8bb0\u5f55\u7684 <code>trx_id<\/code> \u6070\u597d\u843d\u5728 <code>read view<\/code> \u7684\u6d3b\u52a8\u4e8b\u52a1 ID \u6570\u7ec4\u4e2d\uff08\u5728\u4e2d\u95f4\uff09\uff0c\u8bf4\u660e\u8be5\u4e8b\u52a1\u5c1a\u672a\u63d0\u4ea4\uff0c<strong>\u8be5\u7248\u672c\u4e0d\u53ef\u89c1<\/strong>\u3002<\/li>\n<li>\u5982\u679c\u5f53\u524d\u7248\u672c\u4e0d\u53ef\u89c1\uff0c\u5219\u901a\u8fc7 <code>roll_ptr<\/code> \u6cbf\u7248\u672c\u94fe\u56de\u6eaf\u5230\u4e0a\u4e00\u4e2a\u7248\u672c\uff0c\u91cd\u590d\u4e0a\u8ff0\u5224\u65ad\uff0c\u76f4\u5230\u627e\u5230\u53ef\u89c1\u7684\u7248\u672c\u6216\u7248\u672c\u94fe\u7ed3\u675f\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001RC \u4e0e RR \u9694\u79bb\u7ea7\u522b\u4e0b MVCC \u7684\u533a\u522b<\/h3>\n<ol start=\"12\">\n<li><strong>RC\uff08\u5df2\u63d0\u4ea4\u8bfb\uff09<\/strong>\uff1a<strong>\u6bcf\u6b21\u67e5\u8be2<\/strong>\u90fd\u91cd\u65b0\u751f\u6210\u4e00\u4e2a\u72ec\u7acb\u7684 <code>read view<\/code>\uff0c\u56e0\u6b64\u524d\u540e\u4e24\u6b21\u67e5\u8be2\u53ef\u80fd\u8bfb\u5230\u4e0d\u540c\u7684\u6570\u636e\uff08\u4e0d\u53ef\u91cd\u590d\u8bfb\uff09\u3002<\/li>\n<li><strong>RR\uff08\u53ef\u91cd\u590d\u8bfb\uff09<\/strong>\uff1a<strong>\u53ea\u751f\u6210\u4e00\u6b21 <code>read view<\/code><\/strong>\uff0c\u540e\u7eed\u67e5\u8be2\u590d\u7528\u8be5 <code>read view<\/code>\uff0c\u56e0\u6b64\u524d\u540e\u4e24\u6b21\u67e5\u8be2\u8bfb\u5230\u7684\u6570\u636e\u4e00\u81f4\uff08\u53ef\u91cd\u590d\u8bfb\uff09\u3002<\/li>\n<li>RR \u7ea7\u522b\u590d\u7528 <code>read view<\/code> \u51cf\u5c11\u4e86\u91cd\u590d\u751f\u6210\u7684\u6027\u80fd\u5f00\u9500\uff0c\u8fd9\u4e5f\u662f MySQL \u9ed8\u8ba4\u4f7f\u7528 RR \u9694\u79bb\u7ea7\u522b\uff08\u800c\u975e Oracle \u7684 RC\uff09\u7684\u539f\u56e0\u4e4b\u4e00\u3002<\/li>\n<\/ol>\n<h2>60-\u4e8b\u52a1\u7684\u57fa\u672c\u7279\u6027\u548c\u9694\u79bb\u7ea7\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ACID \u56db\u5927\u7279\u6027<\/h3>\n<ol>\n<li><strong>\u539f\u5b50\u6027\uff08Atomicity\uff09<\/strong>\uff1a\u4e8b\u52a1\u4e2d\u7684\u6240\u6709\u64cd\u4f5c\u8981\u4e48\u5168\u90e8\u6210\u529f\u63d0\u4ea4\uff0c\u8981\u4e48\u5168\u90e8\u5931\u8d25\u56de\u6eda\uff0c\u4e0d\u53ef\u5206\u5272\uff08\u5982\u8f6c\u8d26\u4e2d A \u51cf\u94b1\u548c B \u52a0\u94b1\u5fc5\u987b\u540c\u65f6\u5b8c\u6210\u6216\u540c\u65f6\u64a4\u9500\uff09\u3002<\/li>\n<li><strong>\u4e00\u81f4\u6027\uff08Consistency\uff09<\/strong>\uff1a\u4e8b\u52a1\u7684\u6700\u7ec8\u76ee\u6807\uff0c\u6570\u636e\u5fc5\u987b\u4ece\u4e00\u4e2a\u4e00\u81f4\u72b6\u6001\u8f6c\u53d8\u4e3a\u53e6\u4e00\u4e2a\u4e00\u81f4\u72b6\u6001\uff08\u5982\u8f6c\u8d26\u540e\u603b\u91d1\u989d\u4e0d\u53d8\uff09\uff0c\u9700\u8981\u6570\u636e\u5e93\u7ea6\u675f + \u5e94\u7528\u7a0b\u5e8f\u4ee3\u7801\u5171\u540c\u4fdd\u8bc1\u3002<\/li>\n<li><strong>\u9694\u79bb\u6027\uff08Isolation\uff09<\/strong>\uff1a\u591a\u4e2a\u4e8b\u52a1\u5e76\u53d1\u6267\u884c\u65f6\uff0c\u5f7c\u6b64\u4e92\u4e0d\u5e72\u6270\uff0c\u4e00\u4e2a\u4e8b\u52a1\u7684\u6267\u884c\u4e0d\u5e94\u53d7\u5176\u4ed6\u4e8b\u52a1\u7684\u5f71\u54cd\uff0c\u7531\u9501\u548c MVCC \u5171\u540c\u5b9e\u73b0\u3002<\/li>\n<li><strong>\u6301\u4e45\u6027\uff08Durability\uff09<\/strong>\uff1a\u4e8b\u52a1\u4e00\u65e6\u63d0\u4ea4\uff0c\u5176\u6240\u505a\u7684\u4fee\u6539\u5fc5\u987b\u6c38\u4e45\u4fdd\u5b58\u5230\u6570\u636e\u5e93\u4e2d\uff0c\u5373\u4f7f\u7cfb\u7edf\u5d29\u6e83\u4e5f\u4e0d\u4f1a\u4e22\u5931\uff08\u901a\u8fc7 <code>redo log<\/code> \u4fdd\u8bc1\uff09\u3002<\/li>\n<li>\u4e00\u81f4\u6027\u662f\u6700\u7ec8\u76ee\u7684\uff0c\u539f\u5b50\u6027\u3001\u9694\u79bb\u6027\u3001\u6301\u4e45\u6027\u662f\u624b\u6bb5\u2014\u2014<strong>\u901a\u8fc7\u4fdd\u8bc1\u5176\u4ed6\u4e09\u5927\u7279\u6027\u6765\u8fbe\u6210\u4e00\u81f4\u6027<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u4e8b\u52a1\u7684\u56db\u5927\u9694\u79bb\u7ea7\u522b<\/h3>\n<ol start=\"6\">\n<li><strong>\u8bfb\u672a\u63d0\u4ea4\uff08READ UNCOMMITTED\uff0cRU\uff09<\/strong>\uff1a\u4e00\u4e2a\u4e8b\u52a1\u53ef\u4ee5\u8bfb\u53d6\u53e6\u4e00\u4e2a\u4e8b\u52a1\u5c1a\u672a\u63d0\u4ea4\u7684\u4fee\u6539\uff0c\u4f1a\u51fa\u73b0<strong>\u810f\u8bfb<\/strong>\u95ee\u9898\uff0c\u51e0\u4e4e\u4e0d\u88ab\u4f7f\u7528\u3002<\/li>\n<li><strong>\u810f\u8bfb<\/strong>\uff1a\u8bfb\u5230\u5176\u4ed6\u4e8b\u52a1\u5c1a\u672a\u63d0\u4ea4\u7684\u6570\u636e\uff0c\u8be5\u6570\u636e\u53ef\u80fd\u88ab\u56de\u6eda\uff0c\u8bfb\u5230\u7684\u5176\u5b9e\u662f&#8221;\u4e0d\u5b58\u5728&#8221;\u7684\u9519\u8bef\u6570\u636e\u3002<\/li>\n<li><strong>\u8bfb\u5df2\u63d0\u4ea4\uff08READ COMMITTED\uff0cRC\uff09<\/strong>\uff1a\u4e00\u4e2a\u4e8b\u52a1\u53ea\u80fd\u8bfb\u53d6\u5176\u4ed6\u4e8b\u52a1\u5df2\u63d0\u4ea4\u7684\u6570\u636e\uff0c\u89e3\u51b3\u4e86\u810f\u8bfb\uff0c\u4f46\u4f1a\u51fa\u73b0<strong>\u4e0d\u53ef\u91cd\u590d\u8bfb<\/strong>\u95ee\u9898\u3002<\/li>\n<li><strong>\u4e0d\u53ef\u91cd\u590d\u8bfb<\/strong>\uff1a\u540c\u4e00\u4e8b\u52a1\u4e2d\uff0c\u524d\u540e\u4e24\u6b21\u67e5\u8be2\u540c\u4e00\u6570\u636e\uff0c\u5f97\u5230\u7684\u7ed3\u679c\u4e0d\u4e00\u81f4\uff08\u56e0\u5176\u4ed6\u4e8b\u52a1\u5df2\u63d0\u4ea4\u4e86\u4fee\u6539\uff09\uff0cOracle \u9ed8\u8ba4\u91c7\u7528\u6b64\u7ea7\u522b\u3002<\/li>\n<li><strong>\u53ef\u91cd\u590d\u8bfb\uff08REPEATABLE READ\uff0cRR\uff09<\/strong>\uff1a\u540c\u4e00\u4e8b\u52a1\u4e2d\uff0c\u524d\u540e\u591a\u6b21\u67e5\u8be2\u540c\u4e00\u6570\u636e\uff0c\u7ed3\u679c\u59cb\u7ec8\u4e00\u81f4\uff0c\u89e3\u51b3\u4e86\u4e0d\u53ef\u91cd\u590d\u8bfb\uff0c\u4f46\u4f1a\u51fa\u73b0<strong>\u5e7b\u8bfb<\/strong>\u95ee\u9898\uff0cMySQL \u9ed8\u8ba4\u91c7\u7528\u6b64\u7ea7\u522b\u3002<\/li>\n<li><strong>\u5e7b\u8bfb<\/strong>\uff1a\u4e8b\u52a1\u4e2d\u524d\u540e\u4e24\u6b21\u67e5\u8be2\u540c\u4e00\u8303\u56f4\u7684\u6570\u636e\uff0c\u7b2c\u4e8c\u6b21\u67e5\u8be2\u591a\u51fa\u4e86\u4e4b\u524d\u4e0d\u5b58\u5728\u7684\u884c\uff08\u56e0\u5176\u4ed6\u4e8b\u52a1\u63d2\u5165\u4e86\u65b0\u6570\u636e\uff09\u3002<\/li>\n<li><strong>\u4e32\u884c\u5316\uff08SERIALIZABLE\uff09<\/strong>\uff1a\u6700\u9ad8\u7684\u9694\u79bb\u7ea7\u522b\uff0c\u5f3a\u5236\u4e8b\u52a1\u4e32\u884c\u6267\u884c\uff0c\u5bf9\u8bfb\u53d6\u7684\u6bcf\u4e00\u884c\u6570\u636e\u90fd\u52a0\u9501\uff0c\u89e3\u51b3\u4e86\u810f\u8bfb\u3001\u4e0d\u53ef\u91cd\u590d\u8bfb\u3001\u5e7b\u8bfb\u6240\u6709\u95ee\u9898\uff0c\u4f46\u5e76\u53d1\u6027\u80fd\u6700\u5dee\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5404\u9694\u79bb\u7ea7\u522b\u7684\u95ee\u9898\u4e0e\u4fdd\u8bc1<\/h3>\n<ol start=\"13\">\n<li><strong>\u8bfb\u672a\u63d0\u4ea4<\/strong>\uff1a\u672a\u89e3\u51b3\u4efb\u4f55\u5e76\u53d1\u95ee\u9898\uff0c\u5141\u8bb8\u810f\u8bfb\u3001\u4e0d\u53ef\u91cd\u590d\u8bfb\u3001\u5e7b\u8bfb\u3002<\/li>\n<li><strong>\u8bfb\u5df2\u63d0\u4ea4<\/strong>\uff1a\u89e3\u51b3\u810f\u8bfb\uff0c\u4ecd\u5b58\u5728\u4e0d\u53ef\u91cd\u590d\u8bfb\u548c\u5e7b\u8bfb\u3002<\/li>\n<li><strong>\u53ef\u91cd\u590d\u8bfb<\/strong>\uff1a\u89e3\u51b3\u810f\u8bfb\u548c\u4e0d\u53ef\u91cd\u590d\u8bfb\uff0c\u4ecd\u5b58\u5728\u5e7b\u8bfb\uff08MySQL \u53ef\u901a\u8fc7\u95f4\u9699\u9501\u90e8\u5206\u89e3\u51b3\uff09\u3002<\/li>\n<li><strong>\u4e32\u884c\u5316<\/strong>\uff1a\u89e3\u51b3\u810f\u8bfb\u3001\u4e0d\u53ef\u91cd\u590d\u8bfb\u3001\u5e7b\u8bfb\uff0c\u4f46\u6027\u80fd\u6700\u4f4e\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u9694\u79bb\u7ea7\u522b\u4e0e MVCC \u7684\u5173\u7cfb<\/h3>\n<ol start=\"17\">\n<li>RC \u7ea7\u522b\u4e0b\uff0c\u6bcf\u6b21\u67e5\u8be2\u90fd\u91cd\u65b0\u751f\u6210 <code>read view<\/code>\uff0c\u56e0\u6b64\u80fd\u8bfb\u5230\u5176\u4ed6\u4e8b\u52a1\u5df2\u63d0\u4ea4\u7684\u6700\u65b0\u6570\u636e\uff0c\u4f46\u5bfc\u81f4\u4e0d\u53ef\u91cd\u590d\u8bfb\u3002<\/li>\n<li>RR \u7ea7\u522b\u4e0b\uff0c\u4e8b\u52a1\u5f00\u59cb\u65f6\u53ea\u751f\u6210\u4e00\u6b21 <code>read view<\/code>\uff0c\u540e\u7eed\u67e5\u8be2\u590d\u7528\u8be5 <code>read view<\/code>\uff0c\u56e0\u6b64\u8bfb\u5230\u7684\u6570\u636e\u59cb\u7ec8\u4e00\u81f4\u3002<\/li>\n<li>\u5e7b\u8bfb\u7684\u4ea7\u751f\u539f\u56e0\uff1a<code>read view<\/code> \u5bf9\u67e5\u8be2\u64cd\u4f5c\u6709\u6548\uff0c\u4f46\u65b0\u589e\u7684\u63d2\u5165\u6570\u636e\u4e0d\u53d7 <code>read view<\/code> \u9650\u5236\uff0c\u53ef\u80fd\u5bfc\u81f4\u540c\u4e00\u8303\u56f4\u67e5\u8be2\u7ed3\u679c\u884c\u6570\u53d8\u5316\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u5982\u4f55\u5904\u7406\u9694\u79bb\u7ea7\u522b\u4e0d\u9002\u7528\u7684\u95ee\u9898<\/h3>\n<ol start=\"20\">\n<li>\u5982\u679c\u5f53\u524d\u9694\u79bb\u7ea7\u522b\u4e0d\u9002\u5408\u4e1a\u52a1\u573a\u666f\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u901a\u8fc7<strong>\u624b\u52a8\u52a0\u9501<\/strong>\uff08\u5982 <code>SELECT ... FOR UPDATE<\/code> \u6216 <code>LOCK IN SHARE MODE<\/code>\uff09\u5728\u5e94\u7528\u7a0b\u5e8f\u4e2d\u81ea\u884c\u63a7\u5236\u5e76\u53d1\u884c\u4e3a\uff0c\u6216\u8c03\u6574\u6570\u636e\u5e93\u7684\u9694\u79bb\u7ea7\u522b\u914d\u7f6e\u3002<\/li>\n<\/ol>\n<h2>64-mysql\u4e3b\u4ece\u540c\u6b65\u539f\u7406<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MySQL \u4e3b\u4ece\u540c\u6b65\u7684\u4e09\u4e2a\u6838\u5fc3\u7ebf\u7a0b<\/h3>\n<ol>\n<li>MySQL \u4e3b\u4ece\u540c\u6b65\u6d89\u53ca<strong>\u4e09\u4e2a\u7ebf\u7a0b<\/strong>\uff1a\u4e3b\u5e93\u4e0a\u7684 <strong><code>Log Dump<\/code> \u7ebf\u7a0b<\/strong>\uff0c\u4ece\u5e93\u4e0a\u7684 <strong><code>I\/O<\/code> \u7ebf\u7a0b<\/strong>\u548c <strong><code>SQL<\/code> \u7ebf\u7a0b<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u4e3b\u4ece\u540c\u6b65\u7684\u57fa\u672c\u6d41\u7a0b<\/h3>\n<ol start=\"2\">\n<li><strong><code>binlog<\/code>\uff08\u4e8c\u8fdb\u5236\u65e5\u5fd7\uff09<\/strong> \u662f\u4e3b\u4ece\u590d\u5236\u7684\u57fa\u7840\uff0c\u4e3b\u5e93\u7684\u6240\u6709\u6570\u636e\u53d8\u66f4\uff08\u7ed3\u6784\u4fee\u6539 + \u6570\u636e\u66f4\u65b0\uff09\u90fd\u4f1a\u8bb0\u5f55\u5230 <code>binlog<\/code> \u4e2d\u3002<\/li>\n<li>\u5f53 <code>binlog<\/code> \u6709\u53d8\u52a8\u65f6\uff0c\u4e3b\u5e93\u7684 <strong><code>Log Dump<\/code> \u7ebf\u7a0b<\/strong>\u4f1a\u8bfb\u53d6 <code>binlog<\/code> \u5185\u5bb9\u5e76\u53d1\u9001\u7ed9\u4ece\u5e93\u3002<\/li>\n<li>\u4ece\u5e93\u7684 <strong><code>I\/O<\/code> \u7ebf\u7a0b<\/strong>\u63a5\u6536\u4e3b\u5e93\u53d1\u6765\u7684 <code>binlog<\/code> \u5185\u5bb9\uff0c\u5e76\u5c06\u5176\u5199\u5165\u4ece\u5e93\u672c\u5730\u7684 <strong><code>relay log<\/code>\uff08\u4e2d\u7ee7\u65e5\u5fd7\uff09<\/strong> \u4e2d\u3002<\/li>\n<li>\u4ece\u5e93\u7684 <strong><code>SQL<\/code> \u7ebf\u7a0b<\/strong>\u8bfb\u53d6 <code>relay log<\/code> \u4e2d\u7684\u5185\u5bb9\uff0c\u5e76\u5728\u4ece\u5e93\u4e2d\u91cd\u653e\u6267\u884c\uff0c\u6700\u7ec8\u5b9e\u73b0\u4e3b\u4ece\u6570\u636e\u4e00\u81f4\u3002<\/li>\n<li>\u4e3b\u4ece\u540c\u6b65\u91c7\u7528<strong>\u589e\u91cf\u540c\u6b65<\/strong>\u65b9\u5f0f\uff0c\u901a\u8fc7 <code>binlog<\/code> \u6587\u4ef6\u540d + \u504f\u79fb\u91cf\uff08<code>position<\/code>\uff09\u8bb0\u5f55\u540c\u6b65\u8fdb\u5ea6\uff0c\u6bcf\u6b21\u53ea\u540c\u6b65\u589e\u91cf\u90e8\u5206\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4e3b\u4ece\u540c\u6b65\u7684\u4e09\u79cd\u590d\u5236\u65b9\u5f0f<\/h3>\n<ol start=\"7\">\n<li><strong>\u5f02\u6b65\u590d\u5236\uff08\u9ed8\u8ba4\uff09<\/strong>\uff1a\u4e3b\u5e93\u5199\u5b8c <code>binlog<\/code> \u540e\u76f4\u63a5\u8fd4\u56de\u5ba2\u6237\u7aef\u6210\u529f\uff0c\u4e0d\u7b49\u5f85\u4ece\u5e93\u786e\u8ba4\uff0c\u6027\u80fd\u6700\u9ad8\uff0c\u4f46\u4e3b\u5e93\u5b95\u673a\u65f6\u53ef\u80fd\u4e22\u5931\u672a\u540c\u6b65\u7684\u6570\u636e\u3002<\/li>\n<li><strong>\u5168\u540c\u6b65\u590d\u5236<\/strong>\uff1a\u4e3b\u5e93\u7b49\u5f85<strong>\u6240\u6709\u4ece\u5e93<\/strong>\u90fd\u5b8c\u6210 <code>relay log<\/code> \u7684\u6267\u884c\u540e\u624d\u8fd4\u56de\u5ba2\u6237\u7aef\uff0c\u6570\u636e\u6700\u5b89\u5168\uff0c\u4f46\u6027\u80fd\u6700\u4f4e\u3002<\/li>\n<li><strong>\u534a\u540c\u6b65\u590d\u5236<\/strong>\uff1a\u4e3b\u5e93\u7b49\u5f85<strong>\u81f3\u5c11\u4e00\u4e2a\u4ece\u5e93<\/strong>\u786e\u8ba4\u6536\u5230\u5e76\u5199\u5165 <code>relay log<\/code> \u540e\u5373\u53ef\u8fd4\u56de\uff0c\u662f\u5168\u540c\u6b65\u548c\u5f02\u6b65\u4e4b\u95f4\u7684\u6298\u4e2d\u65b9\u6848\uff0c\u5728\u6027\u80fd\u548c\u6570\u636e\u5b89\u5168\u95f4\u53d6\u5f97\u5e73\u8861\u3002<\/li>\n<\/ol>\n<h2>65-\u7b80\u8ff0MyISAM\u548cInnoDB\u7684\u533a\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u4e8b\u52a1\u652f\u6301<\/h3>\n<ol>\n<li><strong>MyISAM<\/strong> \u4e0d\u652f\u6301\u4e8b\u52a1\uff0c\u6bcf\u6b21\u67e5\u8be2\u90fd\u662f\u539f\u5b50\u64cd\u4f5c\uff1b<strong>InnoDB<\/strong> \u652f\u6301\u4e8b\u52a1\uff0c\u5e76\u63d0\u4f9b ACID \u56db\u5927\u7279\u6027\u53ca\u56db\u79cd\u9694\u79bb\u7ea7\u522b\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u9501\u7c92\u5ea6<\/h3>\n<ol start=\"2\">\n<li><strong>MyISAM<\/strong> \u652f\u6301<strong>\u8868\u7ea7\u9501<\/strong>\uff08\u8868\u9501\uff09\uff0c\u6bcf\u6b21\u64cd\u4f5c\u90fd\u4f1a\u9501\u5b9a\u6574\u5f20\u8868\uff0c\u5e76\u53d1\u5199\u5165\u6027\u80fd\u5dee\u3002<\/li>\n<li><strong>InnoDB<\/strong> \u652f\u6301<strong>\u884c\u7ea7\u9501<\/strong>\uff08\u884c\u9501\uff09\uff0c\u9501\u5b9a\u7c92\u5ea6\u66f4\u7ec6\uff0c\u652f\u6301\u5e76\u53d1\u5199\u64cd\u4f5c\uff0c\u5e76\u53d1\u6027\u80fd\u66f4\u9ad8\u3002<\/li>\n<li><strong>MyISAM<\/strong> \u7684\u8868\u9501\u673a\u5236\u5bfc\u81f4\u8bfb\u5199\u76f8\u4e92\u963b\u585e\uff0c<strong>InnoDB<\/strong> \u7684\u884c\u9501\u673a\u5236\u652f\u6301\u66f4\u9ad8\u7684\u5e76\u53d1\u5ea6\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5916\u952e\u7ea6\u675f<\/h3>\n<ol start=\"5\">\n<li><strong>MyISAM<\/strong> \u4e0d\u652f\u6301\u5916\u952e\u7ea6\u675f\uff1b<strong>InnoDB<\/strong> \u652f\u6301\u5916\u952e\u7ea6\u675f\uff0c\u9002\u5408\u9700\u8981\u6570\u636e\u5b8c\u6574\u6027\u7ea6\u675f\u7684\u573a\u666f\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001<code>COUNT(*)<\/code> \u6027\u80fd<\/h3>\n<ol start=\"6\">\n<li><strong>MyISAM<\/strong> \u5355\u72ec\u7ef4\u62a4\u4e86\u8868\u7684\u603b\u884c\u6570\u53d8\u91cf\uff0c\u6267\u884c <code>SELECT COUNT(*) FROM table<\/code> \u65f6\u76f4\u63a5\u8fd4\u56de\uff0c\u901f\u5ea6\u6781\u5feb\u3002<\/li>\n<li><strong>InnoDB<\/strong> \u6ca1\u6709\u7ef4\u62a4\u603b\u884c\u6570\uff0c\u6267\u884c <code>COUNT(*)<\/code> \u9700\u8981\u5168\u8868\u626b\u63cf\u9010\u884c\u7edf\u8ba1\uff0c\u6548\u7387\u8f83\u4f4e\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u6587\u4ef6\u5b58\u50a8\u7ed3\u6784<\/h3>\n<ol start=\"8\">\n<li><strong>MyISAM<\/strong> \u4e00\u4e2a\u8868\u5bf9\u5e94<strong>\u4e09\u4e2a\u6587\u4ef6<\/strong>\uff1a<code>.frm<\/code>\uff08\u8868\u7ed3\u6784\uff09\u3001<code>.MYD<\/code>\uff08\u6570\u636e\u6587\u4ef6\uff09\u3001<code>.MYI<\/code>\uff08\u7d22\u5f15\u6587\u4ef6\uff09\uff0c\u7d22\u5f15\u548c\u6570\u636e\u5206\u79bb\u5b58\u50a8\u3002<\/li>\n<li><strong>InnoDB<\/strong> \u91c7\u7528<strong>\u805a\u96c6\u7d22\u5f15<\/strong>\uff08\u4e3b\u952e\u7d22\u5f15\u7684\u53f6\u5b50\u8282\u70b9\u76f4\u63a5\u5b58\u50a8\u5b8c\u6574\u6570\u636e\u884c\uff09\uff0c\u6570\u636e\u548c\u7d22\u5f15\u5b58\u50a8\u5728\u4e00\u8d77\uff1b\u8f85\u52a9\u7d22\u5f15\u7684\u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u4e3b\u952e\u503c\uff0c\u67e5\u8be2\u65f6\u9700\u56de\u8868\u3002<\/li>\n<li><strong>MyISAM<\/strong> \u7684\u7d22\u5f15\u6587\u4ef6\u5b58\u50a8\u7684\u662f\u6570\u636e\u884c\u7684\u5730\u5740\uff08\u6307\u9488\uff09\uff0c\u67e5\u8be2\u65f6\u9700\u8981\u5148\u67e5\u7d22\u5f15\u6587\u4ef6\u518d\u6839\u636e\u5730\u5740\u53bb\u6570\u636e\u6587\u4ef6\u4e2d\u627e\u6570\u636e\uff0c\u6d89\u53ca\u4e24\u6b21 I\/O \u64cd\u4f5c\u3002<\/li>\n<li><strong>MyISAM<\/strong> \u7684\u4e3b\u7d22\u5f15\u548c\u8f85\u52a9\u7d22\u5f15\u7ed3\u6784\u76f8\u540c\uff0c\u6ca1\u6709\u672c\u8d28\u533a\u522b\uff1b<strong>InnoDB<\/strong> \u7684\u8f85\u52a9\u7d22\u5f15\u9700\u8981\u5148\u67e5\u4e3b\u952e ID\uff0c\u518d\u56de\u805a\u96c6\u7d22\u5f15\u67e5\u6570\u636e\uff08\u56de\u8868\uff09\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u8868\u7a7a\u95f4\u7ba1\u7406<\/h3>\n<ol start=\"12\">\n<li><strong>MyISAM<\/strong> \u6bcf\u4e2a\u8868\u7684\u6587\u4ef6\u72ec\u7acb\uff0c\u8868\u5927\u5c0f\u53d7\u64cd\u4f5c\u7cfb\u7edf\u6587\u4ef6\u5927\u5c0f\u9650\u5236\u3002<\/li>\n<li><strong>InnoDB<\/strong> \u9ed8\u8ba4\u4f7f\u7528\u5171\u4eab\u8868\u7a7a\u95f4\uff08\u4e00\u4e2a\u6216\u591a\u4e2a\u6587\u4ef6\uff09\uff0c\u4e5f\u53ef\u4ee5\u914d\u7f6e\u4e3a\u72ec\u7acb\u8868\u7a7a\u95f4\uff08\u6bcf\u4e2a\u8868\u4e00\u4e2a\u6587\u4ef6\uff09\uff0c\u8868\u5927\u5c0f\u53d7\u64cd\u4f5c\u7cfb\u7edf\u9650\u5236\uff08\u901a\u5e38\u7ea6 2GB \u6216\u66f4\u5927\uff0c\u53d6\u51b3\u4e8e\u914d\u7f6e\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e03\u3001\u4e3b\u952e\u8bbe\u8ba1\u5efa\u8bae<\/h3>\n<ol start=\"14\">\n<li><strong>InnoDB<\/strong> \u5efa\u8bae\u4f7f\u7528<strong>\u81ea\u589e\u4e3b\u952e\uff08AUTO_INCREMENT\uff09<\/strong>\uff0c\u56e0\u4e3a\u805a\u96c6\u7d22\u5f15\u6309\u4e3b\u952e\u987a\u5e8f\u5b58\u50a8\u6570\u636e\uff0c\u81ea\u589e\u4e3b\u952e\u80fd\u907f\u514d\u9875\u5206\u88c2\uff0c\u63d0\u5347\u63d2\u5165\u6027\u80fd\u3002<\/li>\n<\/ol>\n<h3>\u516b\u3001\u5178\u578b\u5e94\u7528\u573a\u666f<\/h3>\n<ol start=\"15\">\n<li><strong>MyISAM<\/strong> \u9002\u5408<strong>\u8bfb\u591a\u5199\u5c11<\/strong>\u3001\u5bf9\u4e8b\u52a1\u8981\u6c42\u4e0d\u9ad8\u7684\u67e5\u8be2\u5bc6\u96c6\u578b\u573a\u666f\uff08\u5982\u6570\u636e\u4ed3\u5e93\u3001\u7edf\u8ba1\u62a5\u8868\uff09\u3002<\/li>\n<li><strong>InnoDB<\/strong> \u9002\u5408<strong>\u5199\u64cd\u4f5c\u9891\u7e41<\/strong>\u3001\u9700\u8981\u4e8b\u52a1\u652f\u6301\u548c\u6570\u636e\u5b8c\u6574\u6027\u7684 OLTP \u573a\u666f\uff08\u5982\u7535\u5546\u8ba2\u5355\u3001\u91d1\u878d\u7cfb\u7edf\uff09\uff0c\u662f\u73b0\u5728 MySQL \u7684\u4e3b\u6d41\u9ed8\u8ba4\u5f15\u64ce\u3002<\/li>\n<\/ol>\n<h2>66-\u7b80\u8ff0mysql\u4e2d\u7d22\u5f15\u7c7b\u578b\u53ca\u5bf9\u6570\u636e\u5e93\u7684\u6027\u80fd\u7684\u5f71\u54cd<\/h2>\n<hr \/>\n<h3>\u4e00\u3001MySQL \u4e2d\u7684\u7d22\u5f15\u7c7b\u578b<\/h3>\n<ol>\n<li><strong>\u666e\u901a\u7d22\u5f15\uff08INDEX\uff09<\/strong>\uff1a\u6700\u57fa\u672c\u7684\u7d22\u5f15\u7c7b\u578b\uff0c\u5141\u8bb8\u7d22\u5f15\u5217\u5305\u542b\u91cd\u590d\u503c\u3002<\/li>\n<li><strong>\u552f\u4e00\u7d22\u5f15\uff08UNIQUE INDEX\uff09<\/strong>\uff1a\u4e0d\u5141\u8bb8\u7d22\u5f15\u5217\u6709\u91cd\u590d\u503c\uff0c\u6bcf\u884c\u503c\u5fc5\u987b\u552f\u4e00\u3002<\/li>\n<li><strong>\u4e3b\u952e\u7d22\u5f15\uff08PRIMARY KEY\uff09<\/strong>\uff1a\u7279\u6b8a\u7684\u552f\u4e00\u7d22\u5f15\uff0c\u6bcf\u5f20\u8868\u53ea\u80fd\u6709\u4e00\u4e2a\u4e3b\u952e\u3002\u5728 InnoDB \u4e2d\uff0c\u4e3b\u952e\u7d22\u5f15\u662f\u805a\u96c6\u7d22\u5f15\uff08\u6570\u636e\u548c\u7d22\u5f15\u5b58\u50a8\u5728\u4e00\u8d77\uff09\uff1b\u5728 MyISAM \u4e2d\uff0c\u4e3b\u952e\u7d22\u5f15\u4e0e\u666e\u901a\u552f\u4e00\u7d22\u5f15\u5b58\u50a8\u7ed3\u6784\u76f8\u540c\uff08\u7d22\u5f15\u548c\u6570\u636e\u5206\u79bb\uff09\u3002<\/li>\n<li><strong>\u8054\u5408\u7d22\u5f15<\/strong>\uff1a\u57fa\u4e8e\u591a\u4e2a\u5b57\u6bb5\u7ec4\u5408\u521b\u5efa\u7684\u7d22\u5f15\uff08\u5982 <code>INDEX(a, b)<\/code>\uff09\uff0c\u8986\u76d6\u591a\u5217\u67e5\u8be2\u573a\u666f\u3002<\/li>\n<li><strong>\u5168\u6587\u7d22\u5f15\uff08FULLTEXT\uff09<\/strong>\uff1a\u4e3b\u8981\u7528\u4e8e\u6587\u672c\u68c0\u7d22\uff0c\u5e94\u5bf9 <code>LIKE<\/code> \u6a21\u7cca\u67e5\u8be2\u6548\u7387\u4f4e\u4e0b\u7684\u95ee\u9898\uff0c\u4f46 MySQL \u7684\u5168\u6587\u7d22\u5f15\u529f\u80fd\u76f8\u5bf9\u9e21\u808b\uff0c\u751f\u4ea7\u73af\u5883\u4e2d\u901a\u5e38\u4f7f\u7528 Elasticsearch\uff08ES\uff09\u7b49\u4e13\u4e1a\u641c\u7d22\u5f15\u64ce\u66ff\u4ee3\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u7d22\u5f15\u5bf9\u6570\u636e\u5e93\u6027\u80fd\u7684\u6b63\u9762\u5f71\u54cd<\/h3>\n<ol start=\"6\">\n<li>\u7d22\u5f15\u80fd<strong>\u5927\u5e45\u63d0\u9ad8\u67e5\u8be2\u6548\u7387<\/strong>\uff0c\u901a\u8fc7\u7d22\u5f15\u5feb\u901f\u5b9a\u4f4d\u6570\u636e\u884c\uff0c\u907f\u514d\u5168\u8868\u626b\u63cf\u3002<\/li>\n<li>\u7d22\u5f15\u80fd\u914d\u5408 MySQL \u7684<strong>\u4f18\u5316\u5668\uff08Optimizer\uff09<\/strong> \u751f\u6210\u66f4\u4f18\u7684\u6267\u884c\u8ba1\u5212\uff0c\u8fdb\u4e00\u6b65\u63d0\u5347\u7cfb\u7edf\u6027\u80fd\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u7d22\u5f15\u5bf9\u6570\u636e\u5e93\u6027\u80fd\u7684\u8d1f\u9762\u5f71\u54cd\uff08\u4e3a\u4ec0\u4e48\u4e0d\u80fd\u6ee5\u7528\uff09<\/h3>\n<ol start=\"8\">\n<li><strong>\u964d\u4f4e\u5199\u5165\u6027\u80fd<\/strong>\uff1a\u63d2\u5165\u3001\u66f4\u65b0\u3001\u5220\u9664\u6570\u636e\u65f6\uff0c\u4e0d\u4ec5\u8981\u64cd\u4f5c\u6570\u636e\u6587\u4ef6\uff0c\u8fd8\u8981\u540c\u6b65\u7ef4\u62a4\u6240\u6709\u7d22\u5f15\u6587\u4ef6\uff08\u5982 B+Tree \u7684\u8282\u70b9\u8c03\u6574\uff09\uff0c\u589e\u52a0\u989d\u5916\u5f00\u9500\u3002<\/li>\n<li><strong>\u5360\u7528\u989d\u5916\u5b58\u50a8\u7a7a\u95f4<\/strong>\uff1a\u6bcf\u4e2a\u7d22\u5f15\u90fd\u9700\u8981\u72ec\u7acb\u7684\u7269\u7406\u7a7a\u95f4\u5b58\u50a8\uff0c\u7279\u522b\u662f InnoDB \u7684\u975e\u805a\u96c6\u7d22\u5f15\uff08\u8f85\u52a9\u7d22\u5f15\uff09\uff0c\u6bcf\u5efa\u4e00\u4e2a\u7d22\u5f15\u5c31\u591a\u4e00\u68f5 B+Tree\u3002<\/li>\n<li><strong>\u805a\u96c6\u7d22\u5f15\u53d8\u66f4\u6210\u672c\u9ad8<\/strong>\uff1a\u5982\u679c\u4e3b\u952e\uff08\u805a\u96c6\u7d22\u5f15\uff09\u53d1\u751f\u53d8\u66f4\uff0c\u6240\u6709\u8f85\u52a9\u7d22\u5f15\u4e2d\u5b58\u50a8\u7684\u4e3b\u952e\u503c\u90fd\u9700\u8981\u540c\u6b65\u66f4\u65b0\uff0c\u7ef4\u62a4\u4ee3\u4ef7\u6602\u8d35\u3002<\/li>\n<li>\u56e0\u6b64\uff0c<strong>\u7d22\u5f15\u5e76\u975e\u8d8a\u591a\u8d8a\u597d<\/strong>\uff0c\u9700\u8981\u6839\u636e\u5b9e\u9645\u67e5\u8be2\u573a\u666f\u5408\u7406\u8bbe\u8ba1\uff0c\u5728\u67e5\u8be2\u6548\u7387\u548c\u5199\u5165\/\u5b58\u50a8\u6210\u672c\u4e4b\u95f4\u53d6\u5f97\u5e73\u8861\u3002<\/li>\n<\/ol>\n<h2>67-RDB\u548cAOF\u673a\u5236<\/h2>\n<hr \/>\n<h3>\u4e00\u3001RDB\uff08Redis DataBase\uff09\u6301\u4e45\u5316<\/h3>\n<ol>\n<li><strong>RDB<\/strong> \u662f\u5728\u6307\u5b9a\u7684\u65f6\u95f4\u95f4\u9694\u5185\uff0c\u5c06\u5185\u5b58\u4e2d\u7684\u6570\u636e\u96c6\u4ee5<strong>\u5feb\u7167\uff08Snapshot\uff09<\/strong> \u65b9\u5f0f\u5199\u5165\u78c1\u76d8\uff0c\u751f\u6210\u4e00\u4e2a <code>.rdb<\/code> \u6587\u4ef6\u3002<\/li>\n<li>RDB \u901a\u8fc7 <strong><code>fork()<\/code> \u5b50\u8fdb\u7a0b<\/strong>\u6765\u5b8c\u6210\u5feb\u7167\u5199\u5165\uff0c\u4e3b\u8fdb\u7a0b\u7ee7\u7eed\u5904\u7406 Redis \u547d\u4ee4\uff0c\u907f\u514d I\/O \u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u5b9e\u73b0\u6027\u80fd\u6700\u5927\u5316\u3002<\/li>\n<li>RDB \u6587\u4ef6\u662f<strong>\u4e8c\u8fdb\u5236\u7684\u538b\u7f29\u6587\u4ef6<\/strong>\uff0c\u53ea\u6709\u4e00\u4e2a <code>.rdb<\/code> \u6587\u4ef6\uff0c\u5907\u4efd\u548c\u5bb9\u707e\u975e\u5e38\u65b9\u4fbf\u3002<\/li>\n<li>RDB \u7684<strong>\u4f18\u70b9<\/strong>\uff1a\u6587\u4ef6\u7d27\u51d1\u3001\u6062\u590d\u901f\u5ea6\u5feb\uff08\u76f4\u63a5\u52a0\u8f7d\u5feb\u7167\u6587\u4ef6\uff09\u3001\u6027\u80fd\u9ad8\uff08\u4e3b\u8fdb\u7a0b\u4e0d\u53c2\u4e0e I\/O\uff09\u3002<\/li>\n<li>RDB \u7684<strong>\u7f3a\u70b9\u4e00\uff1a\u6570\u636e\u5b89\u5168\u6027\u4f4e<\/strong>\uff0c\u56e0\u4e3a\u662f\u5b9a\u65f6\u5feb\u7167\uff0c\u4e24\u6b21\u5feb\u7167\u4e4b\u95f4\u5b95\u673a\u4f1a\u4e22\u5931\u8fd9\u6bb5\u65f6\u95f4\u7684\u6240\u6709\u6570\u636e\u3002<\/li>\n<li>RDB \u7684<strong>\u7f3a\u70b9\u4e8c<\/strong>\uff1a\u5f53\u6570\u636e\u96c6\u5f88\u5927\u65f6\uff0c<code>fork()<\/code> \u5b50\u8fdb\u7a0b\u53ef\u80fd\u957f\u65f6\u95f4\u5360\u7528 CPU\uff0c\u5bfc\u81f4\u670d\u52a1\u5668\u77ed\u6682\u505c\u6b62\u670d\u52a1\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001AOF\uff08Append Only File\uff09\u6301\u4e45\u5316<\/h3>\n<ol start=\"7\">\n<li><strong>AOF<\/strong> \u4ee5\u65e5\u5fd7\u5f62\u5f0f\u8bb0\u5f55\u670d\u52a1\u5668\u5904\u7406\u7684<strong>\u6bcf\u4e00\u4e2a\u5199\/\u5220\u9664\u64cd\u4f5c<\/strong>\uff08\u67e5\u8be2\u4e0d\u8bb0\u5f55\uff09\uff0c\u4ee5\u6587\u672c\u65b9\u5f0f\u5b58\u50a8\uff0c\u7c7b\u4f3c MySQL \u7684 <code>binlog<\/code>\u3002<\/li>\n<li>AOF \u63d0\u4f9b\u4e86\u4e09\u79cd<strong>\u540c\u6b65\u7b56\u7565<\/strong>\uff1a<strong>\u6bcf\u79d2\u540c\u6b65\uff08everysec\uff09<\/strong>\u3001<strong>\u6bcf\u4fee\u6539\u540c\u6b65\uff08always\uff09<\/strong>\u3001<strong>\u4e0d\u540c\u6b65\uff08no\uff09<\/strong>\uff0c\u5b89\u5168\u6027\u4ece\u9ad8\u5230\u4f4e\uff0c\u6027\u80fd\u4ece\u4f4e\u5230\u9ad8\u3002<\/li>\n<li>AOF \u7684<strong>\u4f18\u70b9\u4e00\uff1a\u6570\u636e\u5b89\u5168\u6027\u9ad8<\/strong>\uff0c\u5c24\u5176\u662f <code>always<\/code> \u7b56\u7565\u80fd\u4fdd\u8bc1\u6bcf\u4e2a\u64cd\u4f5c\u90fd\u540c\u6b65\u5230\u78c1\u76d8\uff0c\u6700\u591a\u4e22\u5931\u4e00\u6761\u547d\u4ee4\u3002<\/li>\n<li>AOF \u7684<strong>\u4f18\u70b9\u4e8c<\/strong>\uff1a\u4f7f\u7528 <code>append<\/code> \u6a21\u5f0f\u8ffd\u52a0\u5199\u5165\uff0c\u5373\u4f7f\u5b95\u673a\u4e5f\u4e0d\u4f1a\u5f71\u54cd\u5df2\u5199\u5165\u7684\u5185\u5bb9\uff0c\u4e14\u63d0\u4f9b\u4e86 <code>redis-check-aof<\/code> \u5de5\u5177\u4fee\u590d\u635f\u574f\u7684\u6587\u4ef6\u3002<\/li>\n<li>AOF \u901a\u8fc7 <strong><code>rewrite<\/code>\uff08\u91cd\u5199\uff09\u673a\u5236<\/strong>\u5408\u5e76\u5197\u4f59\u547d\u4ee4\uff0c\u538b\u7f29 AOF \u6587\u4ef6\u5927\u5c0f\uff0c\u907f\u514d\u6587\u4ef6\u65e0\u9650\u81a8\u80c0\u3002<\/li>\n<li>AOF \u7684<strong>\u7f3a\u70b9\u4e00\uff1a\u6587\u4ef6\u4f53\u79ef\u5927<\/strong>\uff0c\u8bb0\u5f55\u4e86\u5927\u91cf\u64cd\u4f5c\u547d\u4ee4\uff0c\u5360\u7528\u78c1\u76d8\u7a7a\u95f4\u5927\u3002<\/li>\n<li>AOF \u7684<strong>\u7f3a\u70b9\u4e8c\uff1a\u6062\u590d\u901f\u5ea6\u6162<\/strong>\uff0c\u56e0\u4e3a\u9700\u8981\u91cd\u65b0\u6267\u884c\u6240\u6709\u64cd\u4f5c\u547d\u4ee4\uff0c\u800c\u975e\u76f4\u63a5\u52a0\u8f7d\u5feb\u7167\u3002<\/li>\n<li>AOF \u7684<strong>\u7f3a\u70b9\u4e09\uff1a\u8fd0\u884c\u6548\u7387\u4f4e\u4e8e RDB<\/strong>\uff0c\u56e0\u4e3a\u6bcf\u6b21\u5199\u64cd\u4f5c\u90fd\u8981\u8bb0\u5f55\u65e5\u5fd7\uff08\u5373\u4f7f\u5f02\u6b65\uff0c\u4ecd\u6709\u4e00\u5b9a\u5f00\u9500\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001RDB \u4e0e AOF \u7684\u5bf9\u6bd4\u603b\u7ed3<\/h3>\n<ol start=\"15\">\n<li><strong>RDB \u4fa7\u91cd\u6027\u80fd\uff0cAOF \u4fa7\u91cd\u6570\u636e\u5b89\u5168<\/strong>\uff1aRDB \u6027\u80fd\u9ad8\u4f46\u53ef\u80fd\u4e22\u6570\u636e\uff0cAOF \u6570\u636e\u66f4\u5b89\u5168\u4f46\u6027\u80fd\u5f00\u9500\u5927\u3002<\/li>\n<li>\u4e24\u79cd\u6301\u4e45\u5316\u65b9\u5f0f\u53ef\u4ee5<strong>\u540c\u65f6\u5f00\u542f<\/strong>\uff0c\u5982\u679c\u540c\u65f6\u5f00\u542f\uff0cRedis \u5728\u91cd\u542f\u6062\u590d\u6570\u636e\u65f6<strong>\u4f18\u5148\u52a0\u8f7d AOF \u6587\u4ef6<\/strong>\uff08\u56e0\u4e3a AOF \u6570\u636e\u66f4\u5b8c\u6574\uff09\u3002<\/li>\n<\/ol>\n<h2>68-Redis\u7684\u8fc7\u671f\u952e\u7684\u5220\u9664\u7b56\u7565<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u4e09\u79cd\u5e38\u89c1\u7684\u8fc7\u671f\u952e\u5220\u9664\u7b56\u7565<\/h3>\n<ol>\n<li><strong>\u5b9a\u65f6\u5220\u9664<\/strong>\uff1a\u4e3a\u6bcf\u4e2a\u8bbe\u7f6e\u4e86\u8fc7\u671f\u65f6\u95f4\u7684 key \u521b\u5efa\u4e00\u4e2a\u5b9a\u65f6\u5668\uff0c\u65f6\u95f4\u5230\u4e86\u7acb\u5373\u5220\u9664\uff0c\u5185\u5b58\u6700\u53cb\u597d\u4f46 CPU \u5f00\u9500\u6700\u5927\uff08Redis \u672a\u91c7\u7528\uff09\u3002<\/li>\n<li><strong>\u60f0\u6027\u5220\u9664<\/strong>\uff1a\u8bbf\u95ee key \u65f6\u624d\u5224\u65ad\u662f\u5426\u8fc7\u671f\uff0c\u8fc7\u671f\u5219\u5220\u9664\uff0cCPU \u6700\u53cb\u597d\u4f46\u5185\u5b58\u6700\u4e0d\u53cb\u597d\uff08\u8fc7\u671f key \u4f1a\u4e00\u76f4\u5360\u7528\u5185\u5b58\u76f4\u5230\u88ab\u8bbf\u95ee\uff09\u3002<\/li>\n<li><strong>\u5b9a\u671f\u5220\u9664<\/strong>\uff1a\u6bcf\u9694\u56fa\u5b9a\u65f6\u95f4\u626b\u63cf\u4e00\u5b9a\u6570\u91cf\u7684 key\uff0c\u6e05\u9664\u5176\u4e2d\u5df2\u8fc7\u671f\u7684 key\uff0c\u662f\u5b9a\u65f6\u5220\u9664\u548c\u60f0\u6027\u5220\u9664\u7684<strong>\u6298\u4e2d\u65b9\u6848<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Redis \u5b9e\u9645\u91c7\u7528\u7684\u7b56\u7565<\/h3>\n<ol start=\"4\">\n<li>Redis \u540c\u65f6\u91c7\u7528\u4e86 <strong>\u60f0\u6027\u5220\u9664 + \u5b9a\u671f\u5220\u9664<\/strong> \u4e24\u79cd\u7b56\u7565\uff0c\u4e24\u8005\u914d\u5408\u4f7f\u7528\uff0c\u517c\u987e CPU \u548c\u5185\u5b58\u3002<\/li>\n<li>Redis \u7684\u5b9a\u671f\u5220\u9664\u5e76\u975e\u4e00\u6b21\u6027\u626b\u63cf\u6240\u6709 key\uff0c\u800c\u662f<strong>\u6bcf\u6b21\u626b\u63cf\u4e00\u5b9a\u6570\u91cf\u7684 key<\/strong>\uff0c\u5e76\u901a\u8fc7\u8c03\u6574\u626b\u63cf\u65f6\u95f4\u95f4\u9694\u548c\u6570\u91cf\uff0c\u5728 CPU \u548c\u5185\u5b58\u4e4b\u95f4\u53d6\u5f97\u5e73\u8861\u3002<\/li>\n<li>\u7531\u4e8e Redis \u540c\u65f6\u4f7f\u7528\u4e24\u79cd\u7b56\u7565\uff0c\u8fc7\u671f key \u4e0d\u4e00\u5b9a\u4f1a\u88ab\u7acb\u5373\u5220\u9664\uff0c\u5728\u4e0b\u6b21\u5b9a\u671f\u626b\u63cf\u6216\u88ab\u8bbf\u95ee\u4e4b\u524d\u4ecd\u53ef\u80fd\u5360\u7528\u5185\u5b58\u3002<\/li>\n<\/ol>\n<h2>69-Redis\u7ebf\u7a0b\u6a21\u578b\uff0c\u5355\u7ebf\u7a0b\u4e3a\u4ec0\u4e48\u5feb<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Redis \u7684\u7ebf\u7a0b\u6a21\u578b<\/h3>\n<ol>\n<li>Redis \u7684\u7ebf\u7a0b\u6a21\u578b\u57fa\u4e8e <strong>Reactor \u6a21\u5f0f<\/strong>\uff08\u54cd\u5e94\u5f0f\u6a21\u5f0f\uff09\uff0c\u5b9e\u73b0\u4e86\u4e00\u4e2a<strong>\u6587\u4ef6\u4e8b\u4ef6\u5904\u7406\u5668\uff08File Event Handler\uff09<\/strong>\uff0c\u8be5\u5904\u7406\u5668\u662f\u5355\u7ebf\u7a0b\u7684\u3002<\/li>\n<li>\u6587\u4ef6\u4e8b\u4ef6\u5904\u7406\u5668\u5305\u542b\u56db\u4e2a\u6838\u5fc3\u90e8\u5206\uff1a<strong>\u591a\u4e2a Socket<\/strong>\u3001<strong>I\/O \u591a\u8def\u590d\u7528\u5668\uff08I\/O Multiplexing\uff09<\/strong>\u3001<strong>\u6587\u4ef6\u4e8b\u4ef6\u5206\u6d3e\u5668\uff08Dispatcher\uff09<\/strong>\u3001<strong>\u4e8b\u4ef6\u5904\u7406\u5668<\/strong>\u3002<\/li>\n<li>I\/O \u591a\u8def\u590d\u7528\u5668\u8d1f\u8d23\u76d1\u542c\u591a\u4e2a Socket \u4e0a\u7684\u4e8b\u4ef6\uff08\u8fde\u63a5\u4e8b\u4ef6\u3001\u8bfb\u4e8b\u4ef6\u3001\u5199\u4e8b\u4ef6\u7b49\uff09\uff0c\u5e76\u5c06\u4ea7\u751f\u4e8b\u4ef6\u7684 Socket \u653e\u5165\u4e00\u4e2a\u961f\u5217\u4e2d\u6392\u961f\u3002<\/li>\n<li>\u6587\u4ef6\u4e8b\u4ef6\u5206\u6d3e\u5668\u4ece\u961f\u5217\u4e2d\u4f9d\u6b21\u53d6\u51fa Socket\uff0c\u5c06\u5176\u5206\u6d3e\u7ed9\u5bf9\u5e94\u7684\u4e8b\u4ef6\u5904\u7406\u5668\u8fdb\u884c\u5904\u7406\u3002<\/li>\n<li>\u4e00\u4e2a Socket \u7684\u4e8b\u4ef6\u5904\u7406\u5b8c\u6210\u540e\uff0cI\/O \u591a\u8def\u590d\u7528\u5668\u624d\u4f1a\u5904\u7406\u961f\u5217\u4e2d\u7684\u4e0b\u4e00\u4e2a Socket \u4e8b\u4ef6\uff0c<strong>\u6574\u4e2a\u6d41\u7a0b\u662f\u4e32\u884c\u6267\u884c\u7684<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Redis \u5355\u7ebf\u7a0b\u4e3a\u4ec0\u4e48\u8fd9\u4e48\u5feb<\/h3>\n<ol start=\"6\">\n<li><strong>\u7eaf\u5185\u5b58\u64cd\u4f5c<\/strong>\uff1aRedis \u7684\u6240\u6709\u6570\u636e\u64cd\u4f5c\u90fd\u5728\u5185\u5b58\u4e2d\u5b8c\u6210\uff0c\u5185\u5b58\u8bfb\u5199\u901f\u5ea6\u6781\u5feb\uff0c\u662f Redis \u9ad8\u6027\u80fd\u7684\u6839\u672c\u539f\u56e0\u3002<\/li>\n<li><strong>I\/O \u591a\u8def\u590d\u7528\u673a\u5236<\/strong>\uff1a\u5355\u7ebf\u7a0b\u901a\u8fc7 I\/O \u591a\u8def\u590d\u7528\u540c\u65f6\u76d1\u542c\u591a\u4e2a Socket \u4e8b\u4ef6\uff0c\u5b9e\u73b0\u4e86<strong>\u975e\u963b\u585e I\/O<\/strong>\uff0c\u4e00\u4e2a\u7ebf\u7a0b\u5373\u53ef\u5904\u7406\u5927\u91cf\u5e76\u53d1\u8fde\u63a5\u3002<\/li>\n<li><strong>\u4e3b\u8fdb\u7a0b\u4e0d\u8fdb\u884c\u78c1\u76d8 I\/O<\/strong>\uff1aRedis \u7684\u6301\u4e45\u5316\uff08RDB\/AOF\uff09\u901a\u8fc7 <code>fork()<\/code> \u5b50\u8fdb\u7a0b\u8fdb\u884c\uff0c\u4e3b\u8fdb\u7a0b\u53ea\u5904\u7406\u547d\u4ee4\uff0c\u4e0d\u53c2\u4e0e\u78c1\u76d8 I\/O\uff0c\u907f\u514d\u963b\u585e\u3002<\/li>\n<li><strong>\u907f\u514d\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u5207\u6362\u5f00\u9500<\/strong>\uff1a\u5355\u7ebf\u7a0b\u65e0\u9700\u50cf\u591a\u7ebf\u7a0b\u90a3\u6837\u9891\u7e41\u5207\u6362 CPU \u4e0a\u4e0b\u6587\uff0c\u8282\u7701\u4e86\u7ebf\u7a0b\u8c03\u5ea6\u548c\u6808\u5207\u6362\u7684\u6027\u80fd\u6d88\u8017\u3002<\/li>\n<li>\u5355\u7ebf\u7a0b\u9002\u5408<strong>\u6bcf\u4e2a\u8bf7\u6c42\u5904\u7406\u65f6\u95f4\u6781\u77ed\u3001\u8bf7\u6c42\u91cf\u6781\u5927<\/strong>\u7684\u573a\u666f\uff08Redis \u64cd\u4f5c\u5c31\u662f\u7b80\u5355\u7684\u8bfb\u5199 key-value\uff0c\u65e0\u590d\u6742\u4e1a\u52a1\u903b\u8f91\uff09\uff0c\u7c7b\u4f3c Nginx \u7684\u4e8b\u4ef6\u9a71\u52a8\u6a21\u578b\u3002<\/li>\n<\/ol>\n<h2>70-\u7f13\u5b58\u96ea\u5d29\u3001\u7f13\u5b58\u7a7f\u900f\u3001\u7f13\u5b58\u51fb\u7a7f<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u7f13\u5b58\u96ea\u5d29<\/h3>\n<ol>\n<li><strong>\u7f13\u5b58\u96ea\u5d29<\/strong>\uff1a\u7f13\u5b58\u4e2d\u5927\u91cf\u6570\u636e\u5728\u540c\u4e00\u65f6\u95f4\u70b9\u96c6\u4f53\u5931\u6548\uff08\u6216\u7f13\u5b58\u670d\u52a1\u91cd\u542f\uff09\uff0c\u5bfc\u81f4\u5927\u91cf\u8bf7\u6c42\u76f4\u63a5\u843d\u5230\u6570\u636e\u5e93\uff0c\u9020\u6210\u6570\u636e\u5e93\u538b\u529b\u9aa4\u589e\u751a\u81f3\u5b95\u673a\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e00<\/strong>\uff1a\u8bbe\u7f6e\u7f13\u5b58\u8fc7\u671f\u65f6\u95f4\u65f6\u6dfb\u52a0<strong>\u968f\u673a\u503c<\/strong>\uff0c\u8ba9\u8fc7\u671f\u65f6\u95f4\u5206\u6563\uff0c\u907f\u514d\u5927\u9762\u79ef\u540c\u65f6\u5931\u6548\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e8c<\/strong>\uff1a\u4e3a\u7f13\u5b58\u6570\u636e\u589e\u52a0<strong>\u7f13\u5b58\u6807\u8bb0<\/strong>\uff0c\u5931\u6548\u65f6\u7acb\u5373\u4e3b\u52a8\u66f4\u65b0\uff0c\u5feb\u901f\u91cd\u5efa\u7f13\u5b58\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e09<\/strong>\uff1a\u7cfb\u7edf\u542f\u52a8\u524d\u8fdb\u884c<strong>\u7f13\u5b58\u9884\u70ed<\/strong>\uff0c\u5148\u5c06\u70ed\u70b9\u6570\u636e\u52a0\u8f7d\u5230\u7f13\u5b58\u4e2d\u518d\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u56db<\/strong>\uff1a\u4f7f\u7528<strong>\u4e92\u65a5\u9501\uff08\u5206\u5e03\u5f0f\u9501\uff09<\/strong> \uff0c\u5f53\u7f13\u5b58\u5931\u6548\u65f6\u53ea\u5141\u8bb8\u4e00\u4e2a\u7ebf\u7a0b\u53bb\u67e5\u6570\u636e\u5e93\u5e76\u91cd\u5efa\u7f13\u5b58\uff0c\u5176\u4ed6\u7ebf\u7a0b\u7b49\u5f85\u6216\u81ea\u65cb\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u7f13\u5b58\u7a7f\u900f<\/h3>\n<ol start=\"6\">\n<li><strong>\u7f13\u5b58\u7a7f\u900f<\/strong>\uff1a\u8bf7\u6c42\u67e5\u8be2\u7684\u6570\u636e<strong>\u5728\u7f13\u5b58\u548c\u6570\u636e\u5e93\u4e2d\u90fd\u4e0d\u5b58\u5728<\/strong>\uff08\u5982\u6076\u610f\u653b\u51fb\u67e5\u8be2\u4e0d\u5b58\u5728\u7684 ID\uff09\uff0c\u6bcf\u6b21\u8bf7\u6c42\u90fd\u4f1a\u7a7f\u900f\u7f13\u5b58\u76f4\u63a5\u8bbf\u95ee\u6570\u636e\u5e93\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e00<\/strong>\uff1a\u5728<strong>\u63a5\u53e3\u5c42\u589e\u52a0\u53c2\u6570\u6821\u9a8c<\/strong>\uff0c\u5bf9\u660e\u663e\u4e0d\u5b58\u5728\u7684\u8bf7\u6c42\uff08\u5982\u65e0\u6548 ID\u3001\u975e\u6cd5\u683c\u5f0f\uff09\u76f4\u63a5\u62e6\u622a\uff0c\u4e0d\u8bbf\u95ee\u6570\u636e\u5e93\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e8c<\/strong>\uff1a<strong>\u7f13\u5b58\u7a7a\u503c\uff08\u7f13\u5b58 <code>null<\/code>\uff09<\/strong>\uff1a\u5f53\u6570\u636e\u5e93\u4e2d\u4e5f\u67e5\u4e0d\u5230\u65f6\uff0c\u5c06\u4e00\u4e2a\u7a7a\u503c\u6216\u5360\u4f4d\u7b26\u7f13\u5b58\u8d77\u6765\uff08\u8bbe\u7f6e\u8f83\u77ed\u8fc7\u671f\u65f6\u95f4\uff09\uff0c\u540e\u7eed\u76f8\u540c key \u7684\u8bf7\u6c42\u88ab\u7f13\u5b58\u62e6\u622a\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e09<\/strong>\uff1a\u4f7f\u7528<strong>\u5e03\u9686\u8fc7\u6ee4\u5668\uff08Bloom Filter\uff09<\/strong>\uff0c\u5c06\u6240\u6709\u53ef\u80fd\u5b58\u5728\u7684\u6570\u636e key \u5b58\u5165\u5e03\u9686\u8fc7\u6ee4\u5668\uff0c\u4e00\u5b9a\u4e0d\u5b58\u5728\u7684\u6570\u636e\u5728\u8fc7\u6ee4\u5668\u5c42\u5c31\u88ab\u62e6\u622a\uff0c\u5b58\u5728\u7684\u6570\u636e\u624d\u5141\u8bb8\u67e5\u8be2\u7f13\u5b58\u548c\u6570\u636e\u5e93\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u7f13\u5b58\u51fb\u7a7f<\/h3>\n<ol start=\"10\">\n<li><strong>\u7f13\u5b58\u51fb\u7a7f<\/strong>\uff1a\u67d0\u4e2a<strong>\u70ed\u70b9 key<\/strong> \u7684\u7f13\u5b58\u6070\u597d\u5931\u6548\uff08\u6216\u8fc7\u671f\uff09\uff0c\u800c\u5bf9\u8be5 key \u7684\u5e76\u53d1\u8bf7\u6c42\u91cf\u6781\u5927\uff0c\u6240\u6709\u8bf7\u6c42\u77ac\u95f4\u5168\u90e8\u843d\u5230\u6570\u636e\u5e93\u4e0a\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e00<\/strong>\uff1a\u5bf9\u70ed\u70b9 key \u8bbe\u7f6e<strong>\u6c38\u4e0d\u8fc7\u671f<\/strong>\uff08\u4e0d\u8bbe\u8fc7\u671f\u65f6\u95f4\uff09\uff0c\u7531\u540e\u53f0\u7a0b\u5e8f\u5f02\u6b65\u66f4\u65b0\u7f13\u5b58\u5185\u5bb9\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u4e8c<\/strong>\uff1a<strong>\u52a0\u4e92\u65a5\u9501\uff08\u5206\u5e03\u5f0f\u9501\uff09<\/strong>\uff0c\u5f53\u7f13\u5b58\u5931\u6548\u65f6\u53ea\u5141\u8bb8\u4e00\u4e2a\u7ebf\u7a0b\u53bb\u67e5\u6570\u636e\u5e93\u5e76\u91cd\u5efa\u7f13\u5b58\uff0c\u5176\u4ed6\u7ebf\u7a0b\u81ea\u65cb\u7b49\u5f85\u6216\u8fd4\u56de\u65e7\u503c\uff0c\u907f\u514d\u5927\u91cf\u8bf7\u6c42\u540c\u65f6\u7a7f\u900f\u5230\u6570\u636e\u5e93\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4e09\u8005\u5bf9\u6bd4\u603b\u7ed3<\/h3>\n<ol start=\"13\">\n<li><strong>\u7f13\u5b58\u96ea\u5d29<\/strong>\uff1a<strong>\u5927\u91cf key \u540c\u65f6\u5931\u6548<\/strong>\uff0c\u538b\u529b\u5206\u6563\u4f46\u91cf\u5927\uff1b<strong>\u7f13\u5b58\u7a7f\u900f<\/strong>\uff1a<strong>\u67e5\u8be2\u4e0d\u5b58\u5728\u7684\u6570\u636e<\/strong>\uff0c\u8bf7\u6c42\u76f4\u7a7f\u6570\u636e\u5e93\uff1b<strong>\u7f13\u5b58\u51fb\u7a7f<\/strong>\uff1a<strong>\u5355\u4e2a\u70ed\u70b9 key \u5931\u6548<\/strong>\uff0c\u538b\u529b\u96c6\u4e2d\u4f46\u4ec5\u9488\u5bf9\u4e00\u4e2a key\u3002\u4e09\u8005\u6982\u5ff5\u3001\u539f\u56e0\u548c\u89e3\u51b3\u65b9\u6848\u5404\u4e0d\u76f8\u540c\u3002<\/li>\n<\/ol>\n<h2>71-\u7b80\u8ff0redis\u4e8b\u52a1\u5b9e\u73b0<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Redis \u4e8b\u52a1\u4e0e MySQL \u4e8b\u52a1\u7684\u6838\u5fc3\u533a\u522b<\/h3>\n<ol>\n<li>Redis \u4e8b\u52a1<strong>\u4e0d\u652f\u6301\u56de\u6eda\uff08rollback\uff09<\/strong>\uff0c\u8fd9\u4e0e MySQL \u4e8b\u52a1\u4e0d\u540c\uff0c\u4f46 Redis \u901a\u8fc7&#8221;\u547d\u4ee4\u8981\u4e48\u5168\u90e8\u6267\u884c\u8981\u4e48\u5168\u90e8\u4e0d\u6267\u884c&#8221;\u6765\u4fdd\u8bc1\u539f\u5b50\u6027\u8bed\u4e49\u3002<\/li>\n<li>Redis \u4e8b\u52a1\u540c\u6837\u53ef\u4ee5\u4fdd\u8bc1 ACID \u56db\u5927\u7279\u6027\uff1a\u539f\u5b50\u6027\u3001\u4e00\u81f4\u6027\u3001\u9694\u79bb\u6027\u3001\u6301\u4e45\u6027\uff08\u901a\u8fc7 RDB\/AOF \u4fdd\u8bc1\u6301\u4e45\u6027\uff09\u3002<\/li>\n<li>Redis \u7684<strong>\u9694\u79bb\u6027<\/strong>\u5929\u7136\u5b9e\u73b0\uff1a\u7531\u4e8e Redis \u662f\u5355\u7ebf\u7a0b\u6a21\u578b\uff0c\u4e8b\u52a1\u6267\u884c\u65f6\u4e0d\u5b58\u5728\u5e76\u53d1\u4e8b\u52a1\u5e72\u6270\u95ee\u9898\u3002<\/li>\n<li>Redis \u63d0\u4f9b\u4e86 <strong><code>WATCH<\/code> \u547d\u4ee4<\/strong>\uff08\u4e50\u89c2\u9501\u673a\u5236\uff09\u6765\u76d1\u63a7\u4e8b\u52a1\u4e2d\u7684 key\uff0c\u82e5 key \u5728\u4e8b\u52a1\u6267\u884c\u524d\u88ab\u4fee\u6539\uff0c\u4e8b\u52a1\u4f1a\u88ab\u53d6\u6d88\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Redis \u4e8b\u52a1\u7684\u4e09\u4e2a\u6267\u884c\u9636\u6bb5<\/h3>\n<ol start=\"5\">\n<li><strong>\u7b2c\u4e00\u9636\u6bb5\uff1a\u4e8b\u52a1\u5f00\u59cb\uff08<code>MULTI<\/code>\uff09<\/strong>\uff1a\u6267\u884c <code>MULTI<\/code> \u547d\u4ee4\uff0cRedis \u5c06\u8be5\u5ba2\u6237\u7aef\u7684\u6807\u5fd7\u4f4d\u8bbe\u4e3a <code>REDIS_MULTI<\/code>\uff0c\u8868\u793a\u8fdb\u5165\u4e8b\u52a1\u6a21\u5f0f\u3002<\/li>\n<li><strong>\u7b2c\u4e8c\u9636\u6bb5\uff1a\u547d\u4ee4\u5165\u961f<\/strong>\uff1a\u5728 <code>MULTI<\/code> \u4e4b\u540e\u3001<code>EXEC<\/code> \u4e4b\u524d\u8f93\u5165\u7684\u547d\u4ee4\uff08\u9664 <code>MULTI<\/code>\u3001<code>EXEC<\/code>\u3001<code>WATCH<\/code>\u3001<code>DISCARD<\/code> \u5916\uff09\u4e0d\u4f1a\u7acb\u5373\u6267\u884c\uff0c\u800c\u662f\u8fdb\u5165\u4e00\u4e2a\u5148\u8fdb\u5148\u51fa\uff08FIFO\uff09\u7684\u961f\u5217\u4e2d\u6392\u961f\u3002<\/li>\n<li><strong>\u7b2c\u4e09\u9636\u6bb5\uff1a\u4e8b\u52a1\u6267\u884c\uff08<code>EXEC<\/code>\uff09<\/strong>\uff1a\u6267\u884c <code>EXEC<\/code> \u547d\u4ee4\uff0cRedis \u68c0\u67e5\u4e8b\u52a1\u6807\u5fd7\u662f\u5426\u6709\u6548\uff0c\u82e5\u6709\u6548\u5219\u4f9d\u6b21\u6267\u884c\u961f\u5217\u4e2d\u7684\u6240\u6709\u547d\u4ee4\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Redis \u4e8b\u52a1\u7684\u9519\u8bef\u5904\u7406\u673a\u5236<\/h3>\n<ol start=\"8\">\n<li><strong>\u8bed\u6cd5\u9519\u8bef\uff08\u547d\u4ee4\u672c\u8eab\u9519\u8bef\uff09<\/strong>\uff1aRedis \u4f1a\u68c0\u6d4b\u5230\u5e76<strong>\u5173\u95ed\u4e8b\u52a1\u6807\u5fd7<\/strong>\uff0c\u5bfc\u81f4\u6574\u4e2a\u4e8b\u52a1\u88ab\u53d6\u6d88\uff0c\u6240\u6709\u547d\u4ee4\u90fd\u4e0d\u6267\u884c\u3002<\/li>\n<li><strong>\u6267\u884c\u65f6\u9519\u8bef\uff08\u903b\u8f91\u9519\u8bef\uff0c\u5982\u5bf9\u5b57\u7b26\u4e32\u6267\u884c\u54c8\u5e0c\u64cd\u4f5c\uff09<\/strong>\uff1aRedis <strong>\u4e0d\u4f1a\u56de\u6eda<\/strong>\uff0c\u4f1a\u7ee7\u7eed\u6267\u884c\u961f\u5217\u4e2d\u5269\u4f59\u7684\u547d\u4ee4\uff0c\u7531\u7a0b\u5e8f\u5458\u8d1f\u8d23\u907f\u514d\u6b64\u7c7b\u9519\u8bef\u3002<\/li>\n<li>Redis \u4ec5\u68c0\u67e5\u547d\u4ee4\u7684<strong>\u8bed\u6cd5\u6b63\u786e\u6027<\/strong>\uff0c\u4e0d\u68c0\u67e5\u547d\u4ee4\u6267\u884c\u65f6\u7684\u903b\u8f91\u6b63\u786e\u6027\uff0c\u8fd9\u662f\u4e3a\u4e86<strong>\u4fdd\u6301\u9ad8\u6027\u80fd<\/strong>\u800c\u505a\u51fa\u7684\u8bbe\u8ba1\u53d6\u820d\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001Redis \u4e8b\u52a1\u76f8\u5173\u547d\u4ee4<\/h3>\n<ol start=\"11\">\n<li><strong><code>WATCH key [key ...]<\/code><\/strong>\uff1a\u4e50\u89c2\u9501\uff0c\u76d1\u63a7\u6307\u5b9a\u7684 key\uff0c\u82e5\u4e8b\u52a1\u6267\u884c\u524d\u8fd9\u4e9b key \u88ab\u5176\u4ed6\u5ba2\u6237\u7aef\u4fee\u6539\uff0c\u4e8b\u52a1\u4f1a\u88ab\u53d6\u6d88\u3002<\/li>\n<li><strong><code>MULTI<\/code><\/strong>\uff1a\u5f00\u542f\u4e00\u4e2a\u4e8b\u52a1\uff0c\u5ba2\u6237\u7aef\u8fdb\u5165\u4e8b\u52a1\u6a21\u5f0f\u3002<\/li>\n<li><strong><code>EXEC<\/code><\/strong>\uff1a\u6267\u884c\u4e8b\u52a1\u961f\u5217\u4e2d\u7684\u6240\u6709\u547d\u4ee4\uff0c\u6267\u884c\u5b8c\u6bd5\u540e\u9000\u51fa\u4e8b\u52a1\u6a21\u5f0f\u3002<\/li>\n<li><strong><code>DISCARD<\/code><\/strong>\uff1a\u6e05\u7a7a\u4e8b\u52a1\u961f\u5217\uff0c\u653e\u5f03\u4e8b\u52a1\u6267\u884c\uff0c\u9000\u51fa\u4e8b\u52a1\u6a21\u5f0f\u3002<\/li>\n<li><strong><code>UNWATCH<\/code><\/strong>\uff1a\u53d6\u6d88\u5bf9\u6240\u6709 key \u7684\u76d1\u63a7\u3002<\/li>\n<\/ol>\n<h2>72-redis\u96c6\u7fa4\u65b9\u6848<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Redis \u96c6\u7fa4\u7684\u4e09\u79cd\u4e3b\u6d41\u65b9\u6848<\/h3>\n<ol>\n<li>Redis \u96c6\u7fa4\u4e3b\u8981\u6709\u4e09\u79cd\u65b9\u6848\uff1a<strong>\u54e8\u5175\u6a21\u5f0f\uff08Sentinel\uff09<\/strong>\u3001<strong>Redis Cluster\uff08\u670d\u52a1\u7aef\u5206\u7247\uff09<\/strong>\u3001<strong>\u5ba2\u6237\u7aef\u5206\u7247\uff08Client Sharding\uff09<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u54e8\u5175\u6a21\u5f0f\uff08Sentinel\uff09<\/h3>\n<ol start=\"2\">\n<li><strong>\u54e8\u5175\u6a21\u5f0f<\/strong>\u57fa\u4e8e\u4e3b\u4ece\u590d\u5236\u67b6\u6784\uff0c\u662f\u4e3b\u4ece\u6a21\u5f0f\u7684\u5347\u7ea7\uff0c\u7528\u4e8e\u5b9e\u73b0 Redis \u7684\u9ad8\u53ef\u7528\uff08HA\uff09\u3002<\/li>\n<li>\u54e8\u5175\u7684\u6838\u5fc3\u529f\u80fd\uff1a<strong>\u96c6\u7fa4\u76d1\u63a7<\/strong>\uff08\u76d1\u63a7\u4e3b\u4ece\u8282\u70b9\u662f\u5426\u6b63\u5e38\uff09\u3001<strong>\u6d88\u606f\u901a\u77e5<\/strong>\uff08\u6545\u969c\u65f6\u901a\u77e5\u7ba1\u7406\u5458\uff09\u3001<strong>\u6545\u969c\u8f6c\u79fb<\/strong>\uff08\u4e3b\u8282\u70b9\u5b95\u673a\u65f6\u81ea\u52a8\u5b8c\u6210\u4e3b\u4ece\u5207\u6362\uff09\u3001<strong>\u914d\u7f6e\u4e2d\u5fc3<\/strong>\uff08\u5207\u6362\u540e\u901a\u77e5\u5ba2\u6237\u7aef\u65b0\u7684\u4e3b\u8282\u70b9\u5730\u5740\uff09\u3002<\/li>\n<li>\u54e8\u5175\u672c\u8eab\u4e5f\u662f\u5206\u5e03\u5f0f\u7684\uff0c\u652f\u6301\u96c6\u7fa4\u90e8\u7f72\uff08\u901a\u5e38\u81f3\u5c11\u90e8\u7f72 3 \u4e2a\u5b9e\u4f8b\uff09\uff0c\u907f\u514d\u54e8\u5175\u81ea\u8eab\u5355\u70b9\u6545\u969c\u3002<\/li>\n<li>\u54e8\u5175\u5224\u65ad\u4e3b\u8282\u70b9\u662f\u5426\u4e0b\u7ebf\u5206\u4e3a<strong>\u4e3b\u89c2\u4e0b\u7ebf<\/strong>\u548c<strong>\u5ba2\u89c2\u4e0b\u7ebf<\/strong>\uff0c\u9700\u8981\u591a\u6570\u54e8\u5175\u540c\u610f\u624d\u89e6\u53d1\u6545\u969c\u8f6c\u79fb\u3002<\/li>\n<li>\u54e8\u5175\u6a21\u5f0f<strong>\u4e0d\u80fd\u4fdd\u8bc1\u6570\u636e\u96f6\u4e22\u5931<\/strong>\uff08\u4e3b\u4ece\u540c\u6b65\u662f\u5f02\u6b65\u7684\uff09\uff0c\u53ea\u80fd\u4fdd\u8bc1\u9ad8\u53ef\u7528\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Redis Cluster\uff08\u670d\u52a1\u7aef\u5206\u7247\uff09<\/h3>\n<ol start=\"7\">\n<li><strong>Redis Cluster<\/strong> \u662f Redis 3.0 \u7248\u672c\u5f00\u59cb\u63d0\u4f9b\u7684\u670d\u52a1\u7aef\u5206\u7247\u65b9\u6848\uff0c\u91c7\u7528<strong>\u54c8\u5e0c\u69fd\uff08Slot\uff09<\/strong> \u6982\u5ff5\uff0c\u603b\u5171 16384 \u4e2a\u69fd\u4f4d\uff0c\u5747\u5300\u5206\u5e03\u5728\u96c6\u7fa4\u5404\u8282\u70b9\u4e0a\u3002<\/li>\n<li>\u6570\u636e\u5206\u7247\u903b\u8f91\u7531\u670d\u52a1\u7aef\u51b3\u5b9a\uff1a\u5bf9 key \u8fdb\u884c\u54c8\u5e0c\u8ba1\u7b97\u540e\u5bf9 16384 \u53d6\u6a21\uff0c\u786e\u5b9a\u8be5 key \u843d\u5728\u54ea\u4e2a\u69fd\u4f4d\uff0c\u518d\u7531\u69fd\u4f4d\u6240\u5728\u7684\u8282\u70b9\u63d0\u4f9b\u670d\u52a1\u3002<\/li>\n<li>\u96c6\u7fa4\u8282\u70b9<strong>\u4e92\u4e3a\u4e3b\u4ece<\/strong>\uff1a\u6bcf\u4e2a\u8282\u70b9\u65e2\u662f\u67d0\u4e9b\u69fd\u4f4d\u7684\u4e3b\u8282\u70b9\uff0c\u53c8\u662f\u53e6\u4e00\u4e9b\u69fd\u4f4d\u6240\u5c5e\u4e3b\u8282\u70b9\u7684\u4ece\u8282\u70b9\uff0c\u6570\u636e\u540c\u6b65\u662f\u4e3b\u4ece\u5f02\u6b65\u590d\u5236\uff0c<strong>\u4e0d\u4fdd\u8bc1\u5f3a\u4e00\u81f4\u6027<\/strong>\u3002<\/li>\n<li>\u5ba2\u6237\u7aef\u53ea\u9700\u8fde\u63a5\u96c6\u7fa4\u4e2d<strong>\u4efb\u610f\u4e00\u4e2a\u53ef\u7528\u8282\u70b9<\/strong>\uff0c\u8be5\u8282\u70b9\u4f1a\u5c06\u8bf7\u6c42\u81ea\u52a8\u8f6c\u53d1\u5230\u6b63\u786e\u7684\u8282\u70b9\u3002<\/li>\n<li>\u6269\u7f29\u5bb9\u65f6\uff0c\u53ea\u9700\u5728\u8282\u70b9\u95f4<strong>\u8fc1\u79fb\u69fd\u4f4d<\/strong>\u5373\u53ef\u5b9e\u73b0\u52a8\u6001\u6269\u5bb9\/\u7f29\u5bb9\uff0c\u5bf9\u4e1a\u52a1\u900f\u660e\u3002<\/li>\n<li>\u6bcf\u4e2a Redis Cluster \u8282\u70b9\u9700\u8981\u5f00\u653e<strong>\u4e24\u4e2a\u7aef\u53e3<\/strong>\uff1a\u4e00\u4e2a\u4f9b\u5ba2\u6237\u7aef\u8bbf\u95ee\uff08\u5982 6379\uff09\uff0c\u53e6\u4e00\u4e2a\uff08\u7aef\u53e3\u53f7 + 10000\uff0c\u5982 16379\uff09\u7528\u4e8e<strong>\u96c6\u7fa4\u603b\u7ebf\uff08Cluster Bus\uff09<\/strong> \u901a\u4fe1\uff08\u8282\u70b9\u95f4\u5fc3\u8df3\u3001\u6545\u969c\u68c0\u6d4b\u3001\u914d\u7f6e\u66f4\u65b0\u7b49\uff09\u3002<\/li>\n<li>\u96c6\u7fa4\u603b\u7ebf\u91c7\u7528<strong>\u4e8c\u8fdb\u5236\u534f\u8bae\uff08Gossip \u534f\u8bae\uff09<\/strong>\uff0c\u901a\u4fe1\u6548\u7387\u9ad8\u3001\u5360\u7528\u5e26\u5bbd\u5c11\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u65e0\u4e2d\u5fc3\u5316\u67b6\u6784\uff08\u591a\u4e3b\u591a\u4ece\uff09\u3001\u652f\u6301\u52a8\u6001\u6269\u5bb9\u3001\u5ba2\u6237\u7aef\u65e0\u9700\u8fde\u63a5\u6240\u6709\u8282\u70b9\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u53ea\u80fd\u4f7f\u7528 <code>db 0<\/code>\uff08\u4e0d\u652f\u6301\u591a\u5e93\uff09\u3001\u4e0d\u652f\u6301\u6279\u91cf\u64cd\u4f5c\u3001\u8282\u70b9\u95f4\u9700\u8981\u8fc1\u79fb\u69fd\u4f4d\u64cd\u4f5c\u8f83\u590d\u6742\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u5ba2\u6237\u7aef\u5206\u7247\uff08Client Sharding\uff09<\/h3>\n<ol start=\"16\">\n<li><strong>\u5ba2\u6237\u7aef\u5206\u7247<\/strong>\uff1a\u7531\u5ba2\u6237\u7aef\u901a\u8fc7\u54c8\u5e0c\u7b97\u6cd5\u81ea\u884c\u51b3\u5b9a key \u5b58\u50a8\u5230\u54ea\u4e2a Redis \u8282\u70b9\uff0c\u8282\u70b9\u4e4b\u95f4\u4e92\u4e0d\u611f\u77e5\u3001\u76f8\u4e92\u72ec\u7acb\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u6bcf\u4e2a\u8282\u70b9\u72ec\u7acb\u8fd0\u884c\uff0c\u6269\u5c55\u7075\u6d3b\uff08\u52a0\u8282\u70b9\u65e0\u9700\u8282\u70b9\u95f4\u6570\u636e\u8fc1\u79fb\uff09\uff0c\u8fd0\u7ef4\u7b80\u5355\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a<strong>\u4e0d\u652f\u6301\u52a8\u6001\u589e\u5220\u8282\u70b9<\/strong>\uff08\u5ba2\u6237\u7aef\u9700\u611f\u77e5\u8282\u70b9\u5217\u8868\u53d8\u5316\u5e76\u66f4\u65b0\u914d\u7f6e\uff09\u3001\u8fde\u63a5\u4e0d\u80fd\u5171\u4eab\uff08\u4e0d\u540c\u8282\u70b9\u72ec\u7acb\u8fde\u63a5\uff0c\u8d44\u6e90\u5360\u7528\u5927\uff09\u3001\u670d\u52a1\u7aef\u62d3\u6251\u53d8\u5316\u65f6\u6bcf\u4e2a\u5ba2\u6237\u7aef\u90fd\u9700\u8981\u8c03\u6574\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u4e09\u79cd\u65b9\u6848\u7684\u5bf9\u6bd4\u603b\u7ed3<\/h3>\n<ol start=\"19\">\n<li><strong>\u54e8\u5175\u6a21\u5f0f<\/strong>\uff1a\u4e3b\u4ece + \u9ad8\u53ef\u7528\uff0c\u9002\u5408\u4e2d\u5c0f\u89c4\u6a21\uff0c\u4e0d\u652f\u6301\u5206\u7247\u6269\u5c55\u3002<\/li>\n<li><strong>Redis Cluster<\/strong>\uff1a\u670d\u52a1\u7aef\u5206\u7247\uff0c\u9002\u5408\u5927\u89c4\u6a21\u6570\u636e\uff0c\u52a8\u6001\u6269\u7f29\u5bb9\uff0c\u662f\u5b98\u65b9\u63a8\u8350\u65b9\u6848\u3002<\/li>\n<li><strong>\u5ba2\u6237\u7aef\u5206\u7247<\/strong>\uff1a\u5ba2\u6237\u7aef\u63a7\u5236\u6570\u636e\u5206\u5e03\uff0c\u9002\u5408\u5bf9\u7075\u6d3b\u6027\u8981\u6c42\u9ad8\u7684\u573a\u666f\uff0c\u4f46\u8fd0\u7ef4\u6210\u672c\u8f83\u9ad8\u3002<\/li>\n<\/ol>\n<h2>73-redis\u4e3b\u4ece\u590d\u5236\u7684\u6838\u5fc3\u539f\u7406<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u4e3b\u4ece\u590d\u5236\u7684\u4e24\u79cd\u57fa\u672c\u7c7b\u578b<\/h3>\n<ol>\n<li><strong>\u5168\u91cf\u590d\u5236<\/strong>\uff1a\u5c06\u4e3b\u8282\u70b9\u7684\u5168\u90e8\u6570\u636e\uff08RDB \u5feb\u7167\u6587\u4ef6\uff09\u5b8c\u6574\u62f7\u8d1d\u5230\u4ece\u8282\u70b9\uff0c\u901a\u5e38\u5728\u7b2c\u4e00\u6b21\u5efa\u7acb\u4e3b\u4ece\u5173\u7cfb\u6216\u90e8\u5206\u590d\u5236\u65e0\u6cd5\u8fdb\u884c\u65f6\u89e6\u53d1\u3002<\/li>\n<li><strong>\u589e\u91cf\u590d\u5236\uff08\u90e8\u5206\u590d\u5236\uff09<\/strong>\uff1a\u4ec5\u540c\u6b65\u4e3b\u8282\u70b9\u4e0a\u4ece\u4e0a\u6b21\u65ad\u5f00\u540e\u65b0\u589e\u7684\u6570\u636e\uff0c\u901a\u8fc7\u7f51\u7edc\u4f20\u8f93\u590d\u5236\u79ef\u538b\u7f13\u51b2\u533a\u4e2d\u7684\u589e\u91cf\u6570\u636e\uff0c\u6548\u7387\u8fdc\u9ad8\u4e8e\u5168\u91cf\u590d\u5236\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5168\u91cf\u590d\u5236\u7684\u6267\u884c\u8fc7\u7a0b<\/h3>\n<ol start=\"3\">\n<li>\u4e3b\u8282\u70b9\u6267\u884c <code>bgsave<\/code> \u547d\u4ee4\uff0c<strong>fork \u4e00\u4e2a\u5b50\u8fdb\u7a0b<\/strong>\u751f\u6210 RDB \u5feb\u7167\u6587\u4ef6\uff08\u5168\u91cf\u6570\u636e\u5feb\u7167\uff09\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u6d88\u8017 CPU \u548c\u78c1\u76d8 I\/O\u3002<\/li>\n<li>\u4e3b\u8282\u70b9\u901a\u8fc7\u7f51\u7edc\u5c06 RDB \u6587\u4ef6\u53d1\u9001\u7ed9\u4ece\u8282\u70b9\uff0c\u6d88\u8017\u7f51\u7edc\u5e26\u5bbd\u3002<\/li>\n<li>\u4ece\u8282\u70b9\u6536\u5230 RDB \u6587\u4ef6\u540e\uff0c<strong>\u6e05\u7a7a\u81ea\u8eab\u6240\u6709\u65e7\u6570\u636e<\/strong>\uff0c\u7136\u540e\u52a0\u8f7d\u65b0\u7684 RDB \u6587\u4ef6\uff0c\u52a0\u8f7d\u8fc7\u7a0b\u4f1a\u963b\u585e\u4ece\u8282\u70b9\uff0c\u65e0\u6cd5\u54cd\u5e94\u5ba2\u6237\u7aef\u8bf7\u6c42\u3002<\/li>\n<li>\u5982\u679c\u4ece\u8282\u70b9\u5f00\u542f\u4e86 AOF \u6301\u4e45\u5316\uff0c\u52a0\u8f7d RDB \u540e\u8fd8\u9700\u6267\u884c <code>bgrewriteaof<\/code> \u91cd\u5199 AOF \u6587\u4ef6\uff0c\u5e26\u6765\u989d\u5916\u5f00\u9500\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u589e\u91cf\u590d\u5236\u7684\u4e09\u4e2a\u6838\u5fc3\u6982\u5ff5<\/h3>\n<ol start=\"7\">\n<li><strong>\u590d\u5236\u504f\u79fb\u91cf\uff08Replication Offset\uff09<\/strong>\uff1a\u4e3b\u4ece\u8282\u70b9\u5404\u81ea\u7ef4\u62a4\u7684\u540c\u6b65\u8fdb\u5ea6\u6807\u8bb0\uff08\u5b57\u8282\u504f\u79fb\u91cf\uff09\uff0c\u7528\u4e8e\u6807\u8bc6\u6570\u636e\u540c\u6b65\u7684\u4f4d\u7f6e\uff0c\u4e3b\u4ece\u504f\u79fb\u91cf\u4e0d\u4e00\u81f4\u65f6\u9700\u589e\u91cf\u6216\u5168\u91cf\u540c\u6b65\u3002<\/li>\n<li><strong>\u590d\u5236\u79ef\u538b\u7f13\u51b2\u533a\uff08Replication Backlog\uff09<\/strong>\uff1a\u4e3b\u8282\u70b9\u5728\u5185\u5b58\u4e2d\u7ef4\u62a4\u7684\u4e00\u4e2a<strong>\u56fa\u5b9a\u957f\u5ea6\u3001\u5148\u8fdb\u5148\u51fa\uff08FIFO\uff09\u7684\u961f\u5217<\/strong>\uff0c\u7f13\u5b58\u6700\u8fd1\u5199\u5165\u7684\u6570\u636e\uff0c\u7528\u4e8e\u589e\u91cf\u590d\u5236\u65f6\u63d0\u4f9b\u7ed9\u4ece\u8282\u70b9\u3002<\/li>\n<li><strong>\u670d\u52a1\u5668\u8fd0\u884c ID\uff08Run ID\uff09<\/strong>\uff1a\u6bcf\u4e2a Redis \u8282\u70b9\u542f\u52a8\u65f6\u751f\u6210\u7684<strong>\u552f\u4e00\u6807\u8bc6\u7b26<\/strong>\uff0c\u7528\u4e8e\u4e3b\u4ece\u8282\u70b9\u95f4\u7684\u8eab\u4efd\u8bc6\u522b\u548c\u6821\u9a8c\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u589e\u91cf\u590d\u5236\u7684\u89e6\u53d1\u6761\u4ef6\u4e0e\u5224\u65ad\u903b\u8f91<\/h3>\n<ol start=\"10\">\n<li>\u4ece\u8282\u70b9\u5411\u4e3b\u8282\u70b9\u53d1\u9001 <code>PSYNC<\/code> \u547d\u4ee4\u65f6\uff0c\u9644\u5e26\u81ea\u5df1\u4fdd\u5b58\u7684<strong>\u4e3b\u8282\u70b9 Run ID<\/strong> \u548c<strong>\u590d\u5236\u504f\u79fb\u91cf\uff08offset\uff09<\/strong>\u3002<\/li>\n<li>\u4e3b\u8282\u70b9\u6536\u5230 <code>PSYNC<\/code> \u540e\uff0c\u5148\u5224\u65ad\u4ece\u8282\u70b9\u4e0a\u62a5\u7684 Run ID \u662f\u5426\u4e0e\u81ea\u5df1\u7684 Run ID \u4e00\u81f4\uff1a\n<ul>\n<li><strong>\u4e00\u81f4<\/strong>\uff1a\u8bf4\u660e\u4e4b\u524d\u540c\u6b65\u8fc7\uff0c\u7ee7\u7eed\u5224\u65ad offset \u662f\u5426\u5728\u590d\u5236\u79ef\u538b\u7f13\u51b2\u533a\u8303\u56f4\u5185\uff0c\u82e5\u5728\u5219\u8fdb\u884c<strong>\u589e\u91cf\u590d\u5236<\/strong>\u3002<\/li>\n<li><strong>\u4e0d\u4e00\u81f4<\/strong>\uff1a\u8bf4\u660e\u4e3b\u8282\u70b9\u5df2\u53d8\u66f4\uff08\u5982\u53d1\u751f\u4e86\u6545\u969c\u5207\u6362\uff09\uff0c\u53ea\u80fd\u8fdb\u884c<strong>\u5168\u91cf\u590d\u5236<\/strong>\u3002<\/li>\n<\/ul>\n<\/li>\n<li>\u5373\u4f7f Run ID \u4e00\u81f4\uff0c\u5982\u679c\u4ece\u8282\u70b9\u7684 offset \u5df2\u7ecf\u8d85\u51fa\u4e86\u590d\u5236\u79ef\u538b\u7f13\u51b2\u533a\u7684\u8303\u56f4\uff08\u7f13\u51b2\u533a\u6ea2\u51fa\u5bfc\u81f4\u6570\u636e\u88ab\u6324\u6389\uff09\uff0c\u4e5f\u53ea\u80fd\u8fdb\u884c<strong>\u5168\u91cf\u590d\u5236<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001PSYNC \u547d\u4ee4\u7684\u4e24\u79cd\u573a\u666f<\/h3>\n<ol start=\"13\">\n<li><strong>\u7b2c\u4e00\u6b21\u590d\u5236<\/strong>\uff1a\u4ece\u8282\u70b9\u53d1\u9001 <code>PSYNC ? -1<\/code>\uff08\u65e0 Run ID\u3001offset \u4e3a -1\uff09\uff0c\u4e3b\u8282\u70b9\u76f4\u63a5\u8fd4\u56de <code>FULLRESYNC<\/code>\uff0c\u89e6\u53d1<strong>\u5168\u91cf\u590d\u5236<\/strong>\u3002<\/li>\n<li><strong>\u975e\u7b2c\u4e00\u6b21\u590d\u5236<\/strong>\uff1a\u4ece\u8282\u70b9\u53d1\u9001 <code>PSYNC &lt;runid&gt; &lt;offset&gt;<\/code>\uff0c\u4e3b\u8282\u70b9\u6839\u636e Run ID \u548c offset \u5224\u65ad\u540e\u51b3\u5b9a\u6267\u884c<strong>\u589e\u91cf\u590d\u5236<\/strong>\u6216<strong>\u5168\u91cf\u590d\u5236<\/strong>\u3002<\/li>\n<\/ol>\n<h2>74-CAP\u7406\u8bba\uff0cBASE\u7406\u8bba<\/h2>\n<hr \/>\n<h3>\u4e00\u3001CAP \u7406\u8bba\u6982\u8ff0<\/h3>\n<ol>\n<li><strong>CAP \u7406\u8bba<\/strong>\u662f\u5206\u5e03\u5f0f\u7cfb\u7edf\u7684\u7406\u8bba\u57fa\u7840\uff0c\u5b9a\u4e49\u4e86\u5206\u5e03\u5f0f\u7cfb\u7edf\u5728\u9762\u4e34\u7f51\u7edc\u5206\u533a\u65f6\u5fc5\u987b\u505a\u51fa\u7684\u6743\u8861\u3002<\/li>\n<li>CAP \u5206\u522b\u4ee3\u8868\u4e09\u4e2a\u6838\u5fc3\u7279\u6027\uff1a<strong>C\uff08Consistency\uff0c\u4e00\u81f4\u6027\uff09<\/strong>\u3001<strong>A\uff08Availability\uff0c\u53ef\u7528\u6027\uff09<\/strong>\u3001<strong>P\uff08Partition Tolerance\uff0c\u5206\u533a\u5bb9\u9519\u6027\uff09<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001CAP \u4e09\u8005\u7684\u542b\u4e49<\/h3>\n<ol start=\"3\">\n<li><strong>\u4e00\u81f4\u6027\uff08C\uff09<\/strong>\uff1a\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u6240\u6709\u8282\u70b9\u5728\u540c\u4e00\u65f6\u95f4\u7684\u6570\u636e\u5b8c\u5168\u4e00\u81f4\uff0c\u5373\u5f3a\u4e00\u81f4\u6027\u2014\u2014\u5ba2\u6237\u7aef\u5728\u4efb\u4f55\u8282\u70b9\u90fd\u80fd\u8bfb\u5230\u6700\u65b0\u5199\u5165\u7684\u6570\u636e\u3002<\/li>\n<li>\u4e00\u81f4\u6027\u4ece\u4e24\u4e2a\u89d2\u5ea6\u770b\uff1a<strong>\u5ba2\u6237\u7aef<\/strong>\u6307\u5e76\u53d1\u8bbf\u95ee\u65f6\u5982\u4f55\u83b7\u53d6\u6700\u65b0\u6570\u636e\uff1b<strong>\u670d\u52a1\u7aef<\/strong>\u6307\u6570\u636e\u66f4\u65b0\u540e\u5982\u4f55\u590d\u5236\u5230\u6240\u6709\u8282\u70b9\u3002<\/li>\n<li><strong>\u53ef\u7528\u6027\uff08A\uff09<\/strong>\uff1a\u6574\u4e2a\u96c6\u7fa4\u5728\u4efb\u4f55\u65f6\u5019\u90fd\u80fd\u6b63\u5e38\u54cd\u5e94\u5ba2\u6237\u7aef\u8bf7\u6c42\uff0c\u4e0d\u80fd\u51fa\u73b0\u8d85\u65f6\u6216\u64cd\u4f5c\u5931\u8d25\uff0c\u5373\u4f7f\u90e8\u5206\u8282\u70b9\u53d1\u751f\u6545\u969c\u3002<\/li>\n<li><strong>\u5206\u533a\u5bb9\u9519\u6027\uff08P\uff09<\/strong>\uff1a\u5f53\u7f51\u7edc\u4e2d\u65ad\u3001\u8282\u70b9\u95f4\u901a\u4fe1\u5931\u8d25\uff08\u7f51\u7edc\u5206\u533a\uff09\u65f6\uff0c\u6574\u4e2a\u96c6\u7fa4\u4ecd\u7136\u80fd\u591f\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002<\/li>\n<li>\u5206\u533a\u5bb9\u9519\u6027\u662f\u5206\u5e03\u5f0f\u7cfb\u7edf\u7684<strong>\u5fc5\u5907\u80fd\u529b<\/strong>\uff0c\u56e0\u4e3a\u7f51\u7edc\u6545\u969c\u5728\u5206\u5e03\u5f0f\u73af\u5883\u4e2d\u4e0d\u53ef\u907f\u514d\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001CAP \u7684\u53d6\u820d\uff1aP \u662f\u5fc5\u9009\u9879\uff0cC \u548c A \u4e8c\u9009\u4e00<\/h3>\n<ol start=\"8\">\n<li>CAP \u7406\u8bba\u7684\u6838\u5fc3\u7ed3\u8bba\uff1a<strong>\u5f53\u53d1\u751f\u7f51\u7edc\u5206\u533a\uff08P\uff09\u65f6\uff0c\u5fc5\u987b\u5728\u4e00\u81f4\u6027\uff08C\uff09\u548c\u53ef\u7528\u6027\uff08A\uff09\u4e4b\u95f4\u4e8c\u9009\u4e00<\/strong>\uff0c\u65e0\u6cd5\u540c\u65f6\u4fdd\u8bc1\u4e09\u8005\u3002<\/li>\n<li><strong>\u9009\u62e9 CP\uff08\u653e\u5f03\u53ef\u7528\u6027\uff09<\/strong>\uff1a\u53d1\u751f\u7f51\u7edc\u5206\u533a\u65f6\u6682\u505c\u5bf9\u5916\u670d\u52a1\uff0c\u7b49\u5f85\u6570\u636e\u6062\u590d\u4e00\u81f4\u540e\u518d\u63d0\u4f9b\u670d\u52a1\uff0c\u4fdd\u8bc1\u5f3a\u4e00\u81f4\u6027\u4f46\u727a\u7272\u53ef\u7528\u6027\u3002<\/li>\n<li><strong>\u9009\u62e9 AP\uff08\u653e\u5f03\u5f3a\u4e00\u81f4\u6027\uff09<\/strong>\uff1a\u53d1\u751f\u7f51\u7edc\u5206\u533a\u65f6\u7ee7\u7eed\u5bf9\u5916\u63d0\u4f9b\u53ef\u7528\u670d\u52a1\uff0c\u4f46\u5141\u8bb8\u5404\u8282\u70b9\u6570\u636e\u4e0d\u4e00\u81f4\uff0c\u4fdd\u8bc1\u53ef\u7528\u6027\u4f46\u727a\u7272\u5f3a\u4e00\u81f4\u6027\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001BASE \u7406\u8bba\u2014\u2014CAP \u7684\u59a5\u534f\u65b9\u6848<\/h3>\n<ol start=\"11\">\n<li><strong>BASE \u7406\u8bba<\/strong>\u662f\u5bf9 CAP \u7406\u8bba\u7684\u4e00\u79cd\u59a5\u534f\u548c\u6269\u5c55\uff0c\u5728\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5b9e\u8df5\u4e2d\u666e\u904d\u91c7\u7528\u3002<\/li>\n<li><strong>\u57fa\u672c\u53ef\u7528\uff08Basically Available\uff09<\/strong>\uff1a\u7cfb\u7edf\u51fa\u73b0\u6545\u969c\u65f6\uff0c\u5141\u8bb8\u54cd\u5e94\u65f6\u95f4\u5ef6\u957f\uff08\u5982 0.5 \u79d2\u53d8 3 \u79d2\uff09\u6216\u90e8\u5206\u975e\u6838\u5fc3\u529f\u80fd\u964d\u7ea7\uff0c\u4f46\u6574\u4f53\u670d\u52a1\u4f9d\u7136\u53ef\u7528\u3002<\/li>\n<li><strong>\u8f6f\u72b6\u6001\uff08Soft State\uff09<\/strong>\uff1a\u5141\u8bb8\u7cfb\u7edf\u5728\u6570\u636e\u540c\u6b65\u8fc7\u7a0b\u4e2d\u5b58\u5728\u4e2d\u95f4\u72b6\u6001\uff0c\u5373\u4e0d\u540c\u8282\u70b9\u95f4\u7684\u6570\u636e\u77ed\u65f6\u95f4\u5185\u53ef\u4ee5\u4e0d\u4e00\u81f4\u3002<\/li>\n<li><strong>\u6700\u7ec8\u4e00\u81f4\u6027\uff08Eventually Consistent\uff09<\/strong>\uff1a\u7cfb\u7edf\u4e0d\u8981\u6c42\u6570\u636e\u5b9e\u65f6\u4e00\u81f4\uff0c\u4f46\u4fdd\u8bc1\u7ecf\u8fc7\u4e00\u6bb5\u65f6\u95f4\u540e\u6240\u6709\u8282\u70b9\u6570\u636e\u6700\u7ec8\u4f1a\u8fbe\u5230\u4e00\u81f4\u72b6\u6001\u3002<\/li>\n<li>BASE \u7406\u8bba\u672c\u8d28\u4e0a\u662f\u5bf9 CAP \u4e2d<strong>\u4e00\u81f4\u6027\uff08C\uff09\u7684\u5f31\u5316<\/strong>\uff0c\u4ece&#8221;\u5f3a\u4e00\u81f4\u6027&#8221;\u964d\u4e3a&#8221;\u6700\u7ec8\u4e00\u81f4\u6027&#8221;\uff0c\u4ee5\u6362\u53d6\u66f4\u9ad8\u7684\u53ef\u7528\u6027\uff0c\u662f\u5b9e\u9645\u5de5\u7a0b\u4e2d\u5206\u5e03\u5f0f\u7cfb\u7edf\u7684\u4e3b\u6d41\u8bbe\u8ba1\u601d\u8def\u3002<\/li>\n<\/ol>\n<h2>75-\u8d1f\u8f7d\u5747\u8861\u7b97\u6cd5\u3001\u7c7b\u578b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5e38\u89c1\u7684\u8d1f\u8f7d\u5747\u8861\u7b97\u6cd5\uff086\u79cd\uff09<\/h3>\n<ol>\n<li><strong>\u8f6e\u8be2\u6cd5\uff08Round Robin\uff09<\/strong>\uff1a\u8bf7\u6c42\u6309\u987a\u5e8f\u4f9d\u6b21\u5206\u914d\u7ed9\u96c6\u7fa4\u4e2d\u7684\u6bcf\u53f0\u670d\u52a1\u5668\uff0c\u5faa\u73af\u5f80\u590d\uff0c\u5b9e\u73b0\u5747\u5300\u5206\u53d1\u3002<\/li>\n<li><strong>\u968f\u673a\u6cd5\uff08Random\uff09<\/strong>\uff1a\u901a\u8fc7\u968f\u673a\u7b97\u6cd5\u5c06\u8bf7\u6c42\u968f\u673a\u5206\u914d\u5230\u67d0\u4e00\u53f0\u670d\u52a1\u5668\u4e0a\u3002<\/li>\n<li><strong>\u6e90\u5730\u5740\u54c8\u5e0c\u6cd5\uff08IP Hash\uff09<\/strong>\uff1a\u6839\u636e\u5ba2\u6237\u7aef IP \u5730\u5740\u8fdb\u884c\u54c8\u5e0c\u8ba1\u7b97\uff0c\u518d\u5bf9\u670d\u52a1\u5668\u6570\u91cf\u53d6\u6a21\uff0c\u5c06\u540c\u4e00 IP \u7684\u8bf7\u6c42\u56fa\u5b9a\u5206\u914d\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\uff08\u5e38\u7528\u4e8e\u4f1a\u8bdd\u4fdd\u6301\uff09\u3002<\/li>\n<li><strong>\u52a0\u6743\u8f6e\u8be2\u6cd5\uff08Weighted Round Robin\uff09<\/strong>\uff1a\u5728\u8f6e\u8be2\u57fa\u7840\u4e0a\u4e3a\u4e0d\u540c\u670d\u52a1\u5668\u8bbe\u7f6e\u6743\u91cd\uff0c\u6027\u80fd\u9ad8\u7684\u670d\u52a1\u5668\u6743\u91cd\u66f4\u5927\uff0c\u5206\u5230\u66f4\u591a\u8bf7\u6c42\u3002<\/li>\n<li><strong>\u52a0\u6743\u968f\u673a\u6cd5\uff08Weighted Random\uff09<\/strong>\uff1a\u5728\u968f\u673a\u5206\u53d1\u57fa\u7840\u4e0a\u4e3a\u670d\u52a1\u5668\u8bbe\u7f6e\u6743\u91cd\uff0c\u6743\u91cd\u9ad8\u7684\u670d\u52a1\u5668\u88ab\u968f\u673a\u5206\u914d\u5230\u7684\u6982\u7387\u66f4\u5927\u3002<\/li>\n<li><strong>\u6700\u5c0f\u8fde\u63a5\u6570\u6cd5\uff08Least Connections\uff09<\/strong>\uff1a\u5c06\u65b0\u8bf7\u6c42\u5206\u914d\u7ed9\u5f53\u524d<strong>\u6d3b\u8dc3\u8fde\u63a5\u6570\u6700\u5c11<\/strong>\u7684\u670d\u52a1\u5668\uff0c\u80fd\u66f4\u5747\u8861\u5730\u5229\u7528\u8d44\u6e90\uff0c\u907f\u514d\u67d0\u4e9b\u8282\u70b9\u8fc7\u8f7d\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u8d1f\u8f7d\u5747\u8861\u7684\u4e09\u79cd\u7c7b\u578b<\/h3>\n<ol start=\"7\">\n<li><strong>DNS \u8d1f\u8f7d\u5747\u8861<\/strong>\uff1a\u901a\u8fc7 DNS \u89e3\u6790\u5c06\u540c\u4e00\u4e2a\u57df\u540d\u89e3\u6790\u5230\u4e0d\u540c\u7684 IP \u5730\u5740\uff0c\u5b9e\u73b0\u6700\u57fa\u672c\u7684\u8d1f\u8f7d\u5206\u53d1\uff0c\u6548\u7387\u6781\u9ad8\u4e14\u5bf9\u8bf7\u6c42\u94fe\u8def\u51e0\u4e4e\u6ca1\u6709\u6027\u80fd\u635f\u8017\u3002<\/li>\n<li><strong>\u786c\u4ef6\u8d1f\u8f7d\u5747\u8861<\/strong>\uff1a\u901a\u8fc7\u4e13\u7528\u786c\u4ef6\u8bbe\u5907\uff08\u5982 F5\u3001A10\uff09\u5b9e\u73b0\u8d1f\u8f7d\u5747\u8861\uff0c\u6027\u80fd\u9ad8\u4f46\u6210\u672c\u6602\u8d35\uff0c\u4e00\u822c\u7528\u4e8e\u5927\u578b\u4f01\u4e1a\u3002<\/li>\n<li><strong>\u8f6f\u4ef6\u8d1f\u8f7d\u5747\u8861<\/strong>\uff1a\u901a\u8fc7\u8f6f\u4ef6\u5b9e\u73b0\u8d1f\u8f7d\u5747\u8861\uff0c\u5e38\u89c1\u7684\u6709 <strong>Nginx<\/strong>\u3001<strong>HAProxy<\/strong>\u3001<strong>LVS<\/strong>\uff0c\u662f\u5f00\u53d1\u4eba\u5458\u548c\u8fd0\u7ef4\u4eba\u5458\u6700\u5e38\u63a5\u89e6\u7684\u7c7b\u578b\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u56db\u5c42\u8d1f\u8f7d\u5747\u8861\uff08LVS\uff09\u4e0e\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\uff08Nginx\/HAProxy\uff09\u7684\u533a\u522b<\/h3>\n<ol start=\"10\">\n<li><strong>\u56db\u5c42\u8d1f\u8f7d\u5747\u8861\uff08\u5982 LVS\uff09<\/strong> \u5de5\u4f5c\u5728<strong>\u4f20\u8f93\u5c42\uff08TCP\/UDP\uff09<\/strong>\uff0c\u53ea\u6839\u636e\u76ee\u6807 IP \u548c\u7aef\u53e3\u8fdb\u884c\u8f6c\u53d1\uff0c\u4e0d\u5173\u5fc3\u8bf7\u6c42\u5185\u5bb9\uff0c\u4fee\u6539\u76ee\u6807 IP \u540e\u76f4\u63a5\u8f6c\u53d1\uff0c\u6027\u80fd\u6781\u9ad8\u3002<\/li>\n<li><strong>\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\uff08\u5982 Nginx\u3001HAProxy\uff09<\/strong> \u5de5\u4f5c\u5728<strong>\u5e94\u7528\u5c42\uff08HTTP\/HTTPS\uff09<\/strong>\uff0c\u9700\u8981\u89e3\u6790 URL\u3001HTTP \u5934\u7b49\u8bf7\u6c42\u5185\u5bb9\uff0c\u6839\u636e\u4e1a\u52a1\u89c4\u5219\uff08\u5982 URL \u8def\u5f84\uff09\u8fdb\u884c\u8def\u7531\u5206\u53d1\u3002<\/li>\n<li>\u4e03\u5c42\u8d1f\u8f7d\u5747\u8861\u9700\u8981\u4e0e\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef<strong>\u5206\u522b\u7ef4\u62a4\u957f\u8fde\u63a5<\/strong>\uff0c\u8fd8\u8981\u89e3\u6790 HTTP \u62a5\u6587\uff0c\u56e0\u6b64\u6027\u80fd\u4f4e\u4e8e\u56db\u5c42\u8d1f\u8f7d\u5747\u8861\uff0c\u4f46\u529f\u80fd\u66f4\u5f3a\u5927\uff08\u652f\u6301 URL \u8def\u7531\u3001\u4f1a\u8bdd\u4fdd\u6301\u3001\u5185\u5bb9\u7f13\u5b58\u7b49\uff09\u3002<\/li>\n<\/ol>\n<h2>76-\u5206\u5e03\u5f0f\u67b6\u6784\u4e0b\uff0cSession\u5171\u4eab\u6709\u4ec0\u4e48\u65b9\u6848<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Session \u5171\u4eab\u95ee\u9898\u7684\u4ea7\u751f\u80cc\u666f<\/h3>\n<ol>\n<li>\u5728\u5355\u4f53\u5e94\u7528\u4e2d\uff0cSession \u5b58\u50a8\u5728\u670d\u52a1\u5668\u672c\u5730\u5185\u5b58\u4e2d\uff0c\u6bcf\u4e2a HTTP \u8bf7\u6c42\u643a\u5e26 Cookie \u4e2d\u7684 <code>SessionID<\/code> \u5373\u53ef\u5173\u8054\u670d\u52a1\u7aef Session \u6570\u636e\u3002<\/li>\n<li>\u5728\u5206\u5e03\u5f0f\u96c6\u7fa4\u73af\u5883\u4e0b\uff0c\u7528\u6237\u9996\u6b21\u8bf7\u6c42\u843d\u5728\u8282\u70b9 A\uff08\u767b\u5f55\u4fe1\u606f\u5b58\u4e8e A \u7684\u672c\u5730\u5185\u5b58\uff09\uff0c\u7b2c\u4e8c\u6b21\u8bf7\u6c42\u88ab\u8d1f\u8f7d\u5747\u8861\u5230\u8282\u70b9 B\uff0cB \u7684\u672c\u5730\u5185\u5b58\u4e2d\u6ca1\u6709\u8be5 Session\uff0c\u5bfc\u81f4\u7528\u6237\u88ab\u8981\u6c42\u91cd\u65b0\u767b\u5f55\u2014\u2014\u8fd9\u5c31\u662f <strong>Session \u5171\u4eab\u95ee\u9898<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Session \u5171\u4eab\u7684 5 \u79cd\u89e3\u51b3\u65b9\u6848<\/h3>\n<ol start=\"3\">\n<li><strong>\u65b9\u6848\u4e00\uff1a\u65e0\u72b6\u6001\u670d\u52a1\uff08\u629b\u5f03 Session\uff09<\/strong>\uff1a\u4e0d\u4f7f\u7528\u670d\u52a1\u7aef Session\uff0c\u91c7\u7528 <strong>JWT\uff08JSON Web Token\uff09<\/strong> \u6216 <strong>Token \u673a\u5236<\/strong>\uff0c\u5c06\u7528\u6237\u72b6\u6001\u4fe1\u606f\u5b58\u50a8\u5728\u5ba2\u6237\u7aef\uff0c\u670d\u52a1\u7aef\u4e0d\u4fdd\u5b58\u72b6\u6001\uff0c\u5929\u7136\u652f\u6301\u5206\u5e03\u5f0f\u3002<\/li>\n<li><strong>\u65b9\u6848\u4e8c\uff1a\u5b58\u5165 Cookie\uff08\u5ba2\u6237\u7aef\u5b58\u50a8\uff09<\/strong>\uff1a\u5c06 Session \u6570\u636e\u76f4\u63a5\u5b58\u5230\u5ba2\u6237\u7aef Cookie \u4e2d\uff0c\u670d\u52a1\u7aef\u4e0d\u5b58\u72b6\u6001\uff0c\u8bf7\u6c42\u81ea\u5e26\u6570\u636e\uff0c\u4f46\u5b58\u5728\u5b89\u5168\u98ce\u9669\uff08\u6570\u636e\u66b4\u9732\u5728\u5ba2\u6237\u7aef\uff09\u3002<\/li>\n<li><strong>\u65b9\u6848\u4e09\uff1a\u670d\u52a1\u5668\u95f4 Session \u540c\u6b65<\/strong>\uff1a\u5404\u8282\u70b9\u4e4b\u95f4\u901a\u8fc7\u540c\u6b65\u673a\u5236\u5c06 Session \u6570\u636e\u590d\u5236\u5230\u6240\u6709\u670d\u52a1\u5668\uff0c\u6bcf\u53f0\u670d\u52a1\u5668\u90fd\u4fdd\u5b58\u5168\u91cf Session \u4fe1\u606f\uff0c\u4f46\u5360\u7528\u8d44\u6e90\u591a\u4e14\u5b58\u5728\u540c\u6b65\u5ef6\u8fdf\/\u5931\u8d25\u95ee\u9898\u3002<\/li>\n<li><strong>\u65b9\u6848\u56db\uff1aIP \u7ed1\u5b9a\u7b56\u7565\uff08\u4f1a\u8bdd\u7c98\u6ede\uff09<\/strong>\uff1a\u5728\u8d1f\u8f7d\u5747\u8861\u5c42\uff08\u5982 Nginx\uff09\u6839\u636e\u5ba2\u6237\u7aef IP \u8fdb\u884c\u54c8\u5e0c\uff0c\u5c06\u540c\u4e00 IP \u7684\u8bf7\u6c42\u59cb\u7ec8\u8def\u7531\u5230\u540c\u4e00\u53f0\u670d\u52a1\u5668\uff08\u5982 <code>ip_hash<\/code>\uff09\uff0c\u7ed5\u5f00\u5171\u4eab\u95ee\u9898\uff0c\u4f46<strong>\u727a\u7272\u4e86\u8d1f\u8f7d\u5747\u8861\u7684\u5747\u5300\u6027<\/strong>\uff0c\u4e14\u8282\u70b9\u5b95\u673a\u4f1a\u4e22\u5931\u8be5\u8282\u70b9\u4e0a\u7684\u6240\u6709 Session\u3002<\/li>\n<li><strong>\u65b9\u6848\u4e94\uff1a\u4f7f\u7528\u4e2d\u95f4\u4ef6\u96c6\u4e2d\u5b58\u50a8\uff08\u63a8\u8350\uff09<\/strong>\uff1a\u5c06 Session \u7edf\u4e00\u5b58\u50a8\u5230<strong>Redis<\/strong>\u3001<strong>Memcached<\/strong> \u7b49\u5916\u90e8\u7f13\u5b58\/\u6570\u636e\u5e93\u4e2d\uff0c\u6240\u6709\u670d\u52a1\u8282\u70b9\u8bfb\u5199\u540c\u4e00\u4e2a\u4e2d\u95f4\u4ef6\uff0c\u5b9e\u73b0 Session \u5171\u4eab\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4e2d\u95f4\u4ef6\u5b58\u50a8\u65b9\u6848\u7684\u4f18\u52bf<\/h3>\n<ol start=\"8\">\n<li><strong>\u6269\u5c55\u6027\u597d<\/strong>\uff1aRedis \u7b49\u4e2d\u95f4\u4ef6\u652f\u6301\u6c34\u5e73\u6269\u5c55\uff08\u96c6\u7fa4\uff09\uff0c\u6269\u5bb9\u65b9\u4fbf\u3002<\/li>\n<li><strong>\u670d\u52a1\u91cd\u542f\u4e0d\u4e22\u5931 Session<\/strong>\uff1a\u4e2d\u95f4\u4ef6\u6709\u6301\u4e45\u5316\u673a\u5236\uff08\u5982 Redis \u7684 RDB\/AOF\uff09\uff0c\u670d\u52a1\u8282\u70b9\u91cd\u542f\u4e0d\u5f71\u54cd Session \u6570\u636e\u3002<\/li>\n<li><strong>\u8de8\u5e73\u53f0\u8de8\u8bed\u8a00<\/strong>\uff1a\u4e0d\u540c\u8bed\u8a00\uff08Java\u3001Python\u3001Node.js \u7b49\uff09\u90fd\u53ef\u4ee5\u8bbf\u95ee\u540c\u4e00\u4e2a Redis\uff0c\u89e3\u51b3\u4e86\u591a\u8bed\u8a00\u5f02\u6784\u7cfb\u7edf\u7684 Session \u5171\u4eab\u95ee\u9898\u3002<\/li>\n<li><strong>\u8de8\u7aef\u517c\u5bb9<\/strong>\uff1aPC \u7aef\u3001\u624b\u673a App \u7aef\u53ef\u4ee5\u901a\u8fc7\u540c\u4e00\u4e2a\u4e2d\u95f4\u4ef6\u5171\u4eab\u7528\u6237\u767b\u5f55\u72b6\u6001\u3002<\/li>\n<\/ol>\n<h2>77-\u7b80\u8ff0\u4f60\u5bf9RPC\u3001RMI\u7684\u7406\u89e3<\/h2>\n<hr \/>\n<h3>\u4e00\u3001RPC\uff08\u8fdc\u7a0b\u8fc7\u7a0b\u8c03\u7528\uff09\u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>RPC\uff08Remote Procedure Call\uff0c\u8fdc\u7a0b\u8fc7\u7a0b\u8c03\u7528\uff09<\/strong>\uff1a\u8ba9\u5f00\u53d1\u8005\u50cf\u8c03\u7528\u672c\u5730\u65b9\u6cd5\u4e00\u6837\u8c03\u7528\u8fdc\u7a0b\u670d\u52a1\u5668\u4e0a\u7684\u51fd\u6570\u6216\u65b9\u6cd5\uff0c\u5c4f\u853d\u5e95\u5c42\u7684\u7f51\u7edc\u901a\u4fe1\u7ec6\u8282\u3002<\/li>\n<li>RPC \u53ef\u4ee5\u57fa\u4e8e\u4e0d\u540c\u534f\u8bae\u5b9e\u73b0\uff0c\u5982\u57fa\u4e8e HTTP\uff08\u5e94\u7528\u5c42\u534f\u8bae\uff0c\u5982 <code>HttpClient<\/code>\uff09\u6216\u57fa\u4e8e TCP\/UDP\uff08\u4f20\u8f93\u5c42\u534f\u8bae\uff0c\u5982 Dubbo \u7684 RPC \u534f\u8bae\uff09\uff0c\u57fa\u4e8e TCP \u7684\u6027\u80fd\u901a\u5e38\u9ad8\u4e8e\u57fa\u4e8e HTTP\u3002<\/li>\n<li>RPC \u672c\u8eab<strong>\u4e0e\u8bed\u8a00\u65e0\u5173<\/strong>\uff0c\u8c03\u7528\u65b9\u548c\u88ab\u8c03\u7528\u65b9\u53ef\u4ee5\u7528\u4e0d\u540c\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001RMI\uff08Java \u8fdc\u7a0b\u65b9\u6cd5\u8c03\u7528\uff09\u7684\u6982\u5ff5<\/h3>\n<ol start=\"4\">\n<li><strong>RMI\uff08Remote Method Invocation\uff09<\/strong> \u662f Java \u5bf9 RPC \u7684\u4e00\u79cd<strong>\u4e13\u6709\u5b9e\u73b0<\/strong>\uff0c\u8981\u6c42\u8c03\u7528\u65b9\u548c\u88ab\u8c03\u7528\u65b9<strong>\u90fd\u5fc5\u987b\u8fd0\u884c\u5728 JVM \u4e0a<\/strong>\uff08\u5373\u53cc\u65b9\u90fd\u5fc5\u987b\u662f Java \u5e94\u7528\uff09\u3002<\/li>\n<li>RMI \u7684\u6838\u5fc3\u89c4\u8303\u8981\u6c42\uff1a\u8fdc\u7a0b\u5bf9\u8c61\u5fc5\u987b\u5b9e\u73b0 <strong><code>java.rmi.Remote<\/code><\/strong> \u63a5\u53e3\uff08\u6807\u8bb0\u63a5\u53e3\uff09\uff0c\u5e76\u7ee7\u627f <strong><code>java.rmi.server.UnicastRemoteObject<\/code><\/strong> \u7c7b\uff0c\u624d\u80fd\u88ab\u8fdc\u7a0b\u8c03\u7528\u3002<\/li>\n<li>RMI \u901a\u8fc7 <strong>JVM \u6ce8\u518c\u8868\uff08Registry\uff09<\/strong> \u8fdb\u884c\u670d\u52a1\u6ce8\u518c\u4e0e\u53d1\u73b0\uff0c\u670d\u52a1\u7aef\u5c06\u8fdc\u7a0b\u5bf9\u8c61\u7ed1\u5b9a\u5230\u6ce8\u518c\u8868\uff0c\u5ba2\u6237\u7aef\u4ece\u6ce8\u518c\u8868\u67e5\u627e\u5e76\u83b7\u53d6\u8fdc\u7a0b\u5bf9\u8c61\u7684\u5b58\u6839\uff08Stub\uff09\u3002<\/li>\n<li>RMI \u5e95\u5c42\u901a\u8fc7 <strong>Socket + \u4ee3\u7406\uff08Proxy\uff09<\/strong> \u5b9e\u73b0\u7f51\u7edc\u901a\u4fe1\uff0c\u5ba2\u6237\u7aef\u83b7\u53d6\u7684\u5b9e\u9645\u4e0a\u662f\u8fdc\u7a0b\u5bf9\u8c61\u7684<strong>\u4ee3\u7406\u5bf9\u8c61\uff08\u5b58\u6839 Stub\uff09<\/strong>\uff0c\u8c03\u7528\u4ee3\u7406\u5bf9\u8c61\u65b9\u6cd5\u65f6\uff0c\u5e95\u5c42\u81ea\u52a8\u5b8c\u6210\u7f51\u7edc\u8bf7\u6c42\u548c\u670d\u52a1\u7aef\u65b9\u6cd5\u8c03\u7528\u3002<\/li>\n<li>\u4f7f\u7528 RMI \u524d\uff0c\u9700\u8981\u542f\u52a8 JVM \u81ea\u5e26\u7684\u6ce8\u518c\u8868\u670d\u52a1\uff08<code>rmiregistry<\/code> \u547d\u4ee4\uff09\uff0c\u670d\u52a1\u7aef\u5411\u6ce8\u518c\u8868\u6ce8\u518c\u670d\u52a1\uff0c\u5ba2\u6237\u7aef\u4ece\u6ce8\u518c\u8868\u67e5\u627e\u670d\u52a1\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001RPC \u4e0e RMI \u7684\u5173\u7cfb\u603b\u7ed3<\/h3>\n<ol start=\"9\">\n<li><strong>RPC \u662f\u6982\u5ff5\/\u89c4\u8303<\/strong>\uff0cRMI \u662f Java \u5bf9\u8fd9\u4e00\u6982\u5ff5\u7684\u4e00\u79cd\u5177\u4f53\u5b9e\u73b0\uff1bRMI \u4e5f\u53ef\u4ee5\u88ab\u7406\u89e3\u4e3a<strong>Java \u7684 RPC \u5b9e\u73b0\u7248\u672c<\/strong>\u3002<\/li>\n<li>RMI \u4e0e\u901a\u7528 RPC \u7684\u6700\u5927\u533a\u522b\uff1a<strong>RMI \u4e0e Java \u8bed\u8a00\u5f3a\u7ed1\u5b9a<\/strong>\uff0c\u8981\u6c42\u4e24\u7aef\u90fd\u662f Java \u73af\u5883\uff1b\u800c RPC \u662f\u8bed\u8a00\u65e0\u5173\u7684\uff08\u5982 gRPC\u3001Thrift \u652f\u6301\u591a\u8bed\u8a00\uff09\u3002<\/li>\n<\/ol>\n<h2>78-\u5206\u5e03\u5f0fid\u751f\u6210\u65b9\u6848<\/h2>\n<hr \/>\n<h3>\u4e00\u3001UUID<\/h3>\n<ol>\n<li><strong>UUID\uff08\u901a\u7528\u552f\u4e00\u6807\u8bc6\u7b26\uff09<\/strong>\uff1a\u7531\u65f6\u95f4\u6233 + \u65f6\u949f\u5e8f\u5217\uff08\u8ba1\u6570\u5668\uff09+ \u673a\u5668\u8bc6\u522b\u7801\uff08\u5982 MAC \u5730\u5740\uff09\u4e09\u90e8\u5206\u7efc\u5408\u751f\u6210\uff0c\u4fdd\u8bc1\u5168\u5c40\u552f\u4e00\u6027\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u751f\u6210\u6027\u80fd\u6781\u9ad8\uff08\u672c\u5730\u751f\u6210\uff0c\u65e0\u7f51\u7edc\u6d88\u8017\uff09\u3001\u4f7f\u7528\u7b80\u5355\uff08JDK \u81ea\u5e26 API\uff09\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u65e0\u5e8f\uff08\u4e0d\u9002\u5408\u6570\u636e\u5e93\u805a\u96c6\u7d22\u5f15\uff09\u3001\u5b57\u7b26\u4e32\u5b58\u50a8\u7a7a\u95f4\u5927\u3001ID \u65e0\u4e1a\u52a1\u542b\u4e49\u3001\u53ef\u80fd\u6cc4\u9732\u673a\u5668\u4fe1\u606f\uff08\u5982 MAC \u5730\u5740\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6570\u636e\u5e93\u81ea\u589e ID<\/h3>\n<ol start=\"4\">\n<li><strong>\u6570\u636e\u5e93\u81ea\u589e ID<\/strong>\uff1a\u5229\u7528\u6570\u636e\u5e93\u7684 <code>AUTO_INCREMENT<\/code> \u4f5c\u4e3a\u5206\u5e03\u5f0f ID \u751f\u6210\u6e90\uff0c\u5355\u70b9\u6570\u636e\u5e93\u53ef\u4fdd\u8bc1\u552f\u4e00\u6027\u3002<\/li>\n<li><strong>\u5355\u70b9\u98ce\u9669<\/strong>\uff1a\u53ef\u901a\u8fc7\u6570\u636e\u5e93\u4e3b\u4ece\/\u591a\u4e3b\u96c6\u7fa4\u89e3\u51b3\uff0c\u4f46\u591a\u4e3b\u90e8\u7f72\u65f6\u9700\u4e3a\u6bcf\u4e2a\u8282\u70b9\u8bbe\u7f6e\u4e0d\u540c\u7684\u8d77\u59cb\u503c\u548c\u76f8\u540c\u7684\u6b65\u957f\uff08\u6b65\u957f\u5fc5\u987b\u5927\u4e8e\u8282\u70b9\u6570\uff09\uff0c\u5426\u5219\u4f1a\u751f\u6210\u91cd\u590d ID\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u7cfb\u7edf\u6269\u5bb9\u56f0\u96be\uff08\u8c03\u6574\u6b65\u957f\u590d\u6742\uff09\u3001\u6570\u636e\u5e93\u6613\u6210\u6027\u80fd\u74f6\u9888\u3001ID \u751f\u6210\u8bf7\u6c42\u9891\u7e41\u65f6\u6570\u636e\u5e93\u538b\u529b\u5927\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u53f7\u6bb5\u6a21\u5f0f\uff08\u7f8e\u56e2 Leaf Segment\uff09<\/h3>\n<ol start=\"7\">\n<li><strong>\u53f7\u6bb5\u6a21\u5f0f\uff08Segment\uff09<\/strong>\uff1a\u4e00\u6b21\u4ece\u6570\u636e\u5e93\u83b7\u53d6\u4e00\u6279 ID\uff08\u5982 100 \u4e2a\uff09\u7f13\u5b58\u5728\u672c\u5730\uff0c\u7528\u5b8c\u518d\u53d6\u4e0b\u4e00\u6279\uff0c\u5927\u5e45\u964d\u4f4e\u6570\u636e\u5e93\u8bbf\u95ee\u9891\u7387\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u6269\u5c55\u7075\u6d3b\uff08\u652f\u6301\u6309\u4e1a\u52a1\u5b57\u6bb5\u72ec\u7acb\u5206\u914d\u53f7\u6bb5\uff09\u3001\u964d\u4f4e\u4e86\u6570\u636e\u5e93\u5e76\u53d1\u538b\u529b\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u591a\u4e2a\u8282\u70b9\u540c\u65f6\u7533\u8bf7\u53f7\u6bb5\u65f6\u4ecd\u4f1a\u7ed9\u6570\u636e\u5e93\u5e26\u6765\u538b\u529b\u3001\u53f7\u6bb5\u957f\u5ea6\u56fa\u5b9a\uff08\u4e1a\u52a1\u91cf\u7a81\u589e\u65f6\u9700\u4eba\u5de5\u8c03\u6574\uff09\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u53cc Buffer \u53f7\u6bb5\u6a21\u5f0f\uff08\u7f8e\u56e2 Leaf \u4f18\u5316\u7248\uff09<\/h3>\n<ol start=\"10\">\n<li><strong>\u53cc Buffer \u4f18\u5316<\/strong>\uff1a\u7ef4\u62a4\u5f53\u524d\u53f7\u6bb5\u548c\u4e0b\u4e00\u4e2a\u9884\u7f13\u5b58\u53f7\u6bb5\u4e24\u4e2a Buffer\uff0c\u5f53\u524d\u53f7\u6bb5\u6d88\u8017\u5230 10% \u65f6\u5f02\u6b65\u51c6\u5907\u4e0b\u4e00\u4e2a\u53f7\u6bb5\uff0c\u5f53\u524d\u53f7\u6bb5\u7528\u5b8c\u540e\u65e0\u7f1d\u5207\u6362\uff0c<strong>\u5c06\u6570\u636e\u5e93\u8bf7\u6c42\u4e0e ID \u6d88\u8d39\u89e3\u8026<\/strong>\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u51cf\u5c11\u6570\u636e\u5e93\u67e5\u8be2\u6b21\u6570\u3001\u964d\u4f4e\u5bf9\u6570\u636e\u5e93\u7684\u4f9d\u8d56\u3001\u5e73\u6ed1\u5e94\u5bf9\u9ad8\u5e76\u53d1\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u53f7\u6bb5\u957f\u5ea6\u56fa\u5b9a\uff08\u9700\u53ef\u914d\u7f6e\uff09\u3001\u5f53\u53f7\u6bb5\u8de8\u5ea6\u8f83\u5927\u4e14\u672a\u6d88\u8d39\u5b8c\u65f6\u8282\u70b9\u5b95\u673a\u4f1a\u9020\u6210 ID \u7a7a\u6d1e\uff08\u6d6a\u8d39\u90e8\u5206 ID\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001Redis \/ MongoDB \u751f\u6210 ID<\/h3>\n<ol start=\"13\">\n<li>\u4f7f\u7528 Redis\uff08<code>INCR<\/code> \u547d\u4ee4\uff09\u6216 MongoDB \u7b49\u4e2d\u95f4\u4ef6\u66ff\u4ee3\u6570\u636e\u5e93\u751f\u6210 ID\uff0c\u5229\u7528\u5176\u9ad8\u541e\u5410\u91cf\u7279\u6027\u7f13\u89e3\u6027\u80fd\u74f6\u9888\uff0c\u5b9e\u73b0\u65b9\u5f0f\u4e0e\u6570\u636e\u5e93\u81ea\u589e\u7c7b\u4f3c\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u96ea\u82b1\u7b97\u6cd5\uff08Snowflake\uff09<\/h3>\n<ol start=\"14\">\n<li><strong>\u96ea\u82b1\u7b97\u6cd5<\/strong>\u751f\u6210\u4e00\u4e2a 64 \u4f4d\u7684 Long \u578b ID\uff0c\u4f4d\u5206\u914d\u4e3a\uff1a<strong>1 \u4f4d\u7b26\u53f7\u4f4d\uff08\u56fa\u5b9a 0\uff09+ 41 \u4f4d\u65f6\u95f4\u6233 + 10 \u4f4d\u673a\u5668 ID\uff08Worker ID\uff09+ 12 \u4f4d\u5e8f\u5217\u53f7<\/strong>\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u8d8b\u52bf\u9012\u589e\uff08\u65f6\u95f4\u6233\u5728\u9ad8\u4f4d\uff0c\u6574\u4f53\u6709\u5e8f\uff09\u3001\u6027\u80fd\u6781\u9ad8\uff08\u672c\u5730\u751f\u6210\uff0c\u65e0\u7f51\u7edc\u5f00\u9500\uff09\u3001\u4f4d\u6570\u53ef\u7075\u6d3b\u8c03\u6574\u4ee5\u9002\u5e94\u4e0d\u540c\u573a\u666f\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u5b58\u5728<strong>\u65f6\u949f\u56de\u62e8<\/strong>\u95ee\u9898\uff08\u673a\u5668\u65f6\u95f4\u88ab\u4eba\u4e3a\u56de\u8c03\u65f6\u53ef\u80fd\u751f\u6210\u91cd\u590d ID\uff09\u3002<\/li>\n<li>\u96ea\u82b1\u7b97\u6cd5\u7684\u5bb9\u91cf\u53d7\u9650\u4e8e<strong>\u5e8f\u5217\u53f7\u4f4d\u6570<\/strong>\uff0812 \u4f4d = \u6bcf\u6beb\u79d2\u6bcf\u53f0\u673a\u5668\u6700\u591a 4096 \u4e2a ID\uff09\uff0c\u800c\u975e\u65f6\u95f4\u6233\u4f4d\u6570\u3002<\/li>\n<li>\u96ea\u82b1\u7b97\u6cd5\u751f\u6210\u7684\u662f<strong>\u8d8b\u52bf\u9012\u589e<\/strong>\uff08\u6309\u65f6\u95f4\u5927\u81f4\u9012\u589e\uff09\uff0c\u800c\u975e\u6570\u636e\u5e93\u81ea\u589e\u90a3\u6837\u7684<strong>\u8fde\u7eed\u9012\u589e<\/strong>\uff081,2,3,4&#8230;\uff09\u3002<\/li>\n<\/ol>\n<h2>79-\u5206\u5e03\u5f0f\u9501\u89e3\u51b3\u65b9\u6848<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5206\u5e03\u5f0f\u9501\u7684\u6838\u5fc3\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>\u5206\u5e03\u5f0f\u9501\u89e3\u51b3\u7684\u95ee\u9898\u4e0e\u672c\u5730\u9501\uff08\u5982 <code>synchronized<\/code>\uff09\u672c\u8d28\u76f8\u540c<\/strong>\uff1a\u4fdd\u8bc1\u4e00\u6bb5\u4ee3\u7801\u5728\u540c\u4e00\u65f6\u95f4\u53ea\u88ab\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c\uff0c\u4f46\u5206\u5e03\u5f0f\u9501\u9700\u8981\u5728\u591a\u4e2a\u72ec\u7acb\u8282\u70b9\u95f4\u534f\u8c03\uff0c\u5fc5\u987b\u4f9d\u8d56<strong>\u7b2c\u4e09\u65b9\u4e2d\u95f4\u4ef6<\/strong>\u6765\u5b9e\u73b0\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u65b9\u6848\u4e00\uff1a\u57fa\u4e8e\u6570\u636e\u5e93\u5b9e\u73b0\u5206\u5e03\u5f0f\u9501<\/h3>\n<ol start=\"2\">\n<li><strong>\u5229\u7528\u6570\u636e\u5e93\u7684\u552f\u4e00\u7ea6\u675f\uff08\u4e3b\u952e\u6216\u552f\u4e00\u7d22\u5f15\uff09<\/strong>\uff1a\u591a\u4e2a\u8282\u70b9\u5c1d\u8bd5\u63d2\u5165\u540c\u4e00\u6761\u8bb0\u5f55\uff0c\u63d2\u5165\u6210\u529f\u7684\u8282\u70b9\u83b7\u5f97\u9501\uff0c\u63d2\u5165\u5931\u8d25\u7684\u5219\u672a\u83b7\u5f97\u9501\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u5b9e\u73b0\u7b80\u5355\uff0c\u65e0\u9700\u989d\u5916\u5f15\u5165\u4e2d\u95f4\u4ef6\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a<strong>\u975e\u963b\u585e<\/strong>\uff08\u5931\u8d25\u540e\u4e0d\u4f1a\u81ea\u52a8\u7b49\u5f85\uff0c\u9700\u624b\u52a8\u81ea\u65cb\u5faa\u73af\uff09\uff1b<strong>\u4e0d\u53ef\u91cd\u5165<\/strong>\uff08\u540c\u4e00\u7ebf\u7a0b\u9012\u5f52\u83b7\u53d6\u9501\u4f1a\u56e0\u63d2\u5165\u5931\u8d25\u800c\u963b\u585e\uff09\uff1b<strong>\u5b58\u5728\u6b7b\u9501\u98ce\u9669<\/strong>\uff08\u6301\u6709\u9501\u7684\u8282\u70b9\u5b95\u673a\u540e\u8bb0\u5f55\u6b8b\u7559\uff0c\u9700\u624b\u52a8\u6e05\u7406\uff09\uff1b<strong>\u4e0d\u652f\u6301\u81ea\u52a8\u8fc7\u671f<\/strong>\uff08\u9700\u81ea\u5df1\u5199\u5b9a\u65f6\u4efb\u52a1\u6e05\u7406\u8fc7\u671f\u8bb0\u5f55\uff09\uff1b\u6570\u636e\u5e93\u6613\u6210\u6027\u80fd\u74f6\u9888\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u65b9\u6848\u4e8c\uff1a\u57fa\u4e8e ZooKeeper \u5b9e\u73b0\u5206\u5e03\u5f0f\u9501<\/h3>\n<ol start=\"5\">\n<li>ZooKeeper \u5229\u7528<strong>\u4e34\u65f6\u987a\u5e8f\u8282\u70b9<\/strong>\u5b9e\u73b0\u5206\u5e03\u5f0f\u9501\uff1a\u591a\u4e2a\u5ba2\u6237\u7aef\u5728\u76f8\u540c\u8def\u5f84\u4e0b\u521b\u5efa\u4e34\u65f6\u987a\u5e8f\u8282\u70b9\uff0c\u5e8f\u53f7\u6700\u5c0f\u7684\u8282\u70b9\u83b7\u5f97\u9501\u3002<\/li>\n<li><strong>\u4f18\u70b9<\/strong>\uff1a\u5ba2\u6237\u7aef\u5b95\u673a\u65f6\u4e34\u65f6\u8282\u70b9\u81ea\u52a8\u5220\u9664\uff08<strong>\u65e0\u6b7b\u9501\u95ee\u9898<\/strong>\uff09\uff1b\u901a\u8fc7 Watcher \u673a\u5236\u76d1\u542c\u524d\u4e00\u4e2a\u8282\u70b9\uff0c\u5b9e\u73b0<strong>\u987a\u5e8f\u5524\u9192\uff0c\u907f\u514d\u7f8a\u7fa4\u6548\u5e94<\/strong>\u3002<\/li>\n<li><strong>\u7f3a\u70b9<\/strong>\uff1a\u5f15\u5165 ZK \u7ec4\u4ef6\u589e\u52a0\u8fd0\u7ef4\u590d\u6742\u5ea6\uff0c\u6027\u80fd\u6bd4 Redis \u7565\u4f4e\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u65b9\u6848\u4e09\uff1a\u57fa\u4e8e Redis \u5b9e\u73b0\u5206\u5e03\u5f0f\u9501\uff08\u6700\u5e38\u7528\uff09<\/h3>\n<ol start=\"8\">\n<li>Redis \u901a\u8fc7 <strong><code>SETNX<\/code> \u547d\u4ee4\uff08SET if Not eXists\uff09<\/strong> \u5b9e\u73b0\u5206\u5e03\u5f0f\u9501\uff1akey \u4e0d\u5b58\u5728\u65f6\u8bbe\u7f6e\u6210\u529f\u83b7\u5f97\u9501\uff0c\u5b58\u5728\u5219\u83b7\u53d6\u5931\u8d25\u3002<\/li>\n<li>Redis \u5929\u751f\u9002\u5408\u505a\u5206\u5e03\u5f0f\u9501\uff0c\u56e0\u4e3a\u5176\u5904\u7406\u7f51\u7edc\u8bf7\u6c42\u662f<strong>\u5355\u7ebf\u7a0b<\/strong>\u7684\uff0c\u5929\u7136\u4fdd\u8bc1\u539f\u5b50\u6027\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001Redis \u5206\u5e03\u5f0f\u9501\u7684\u5173\u952e\u95ee\u9898\u4e0e\u6f14\u8fdb<\/h3>\n<ol start=\"10\">\n<li><strong>\u65e9\u671f\u7248\u672c\u95ee\u9898<\/strong>\uff1a<code>SETNX<\/code> \u548c <code>EXPIRE<\/code>\uff08\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\uff09\u662f\u4e24\u4e2a\u72ec\u7acb\u547d\u4ee4\uff0c\u975e\u539f\u5b50\u64cd\u4f5c\uff0c\u53ef\u80fd\u5bfc\u81f4\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\u5931\u8d25\u800c\u9020\u6210\u6b7b\u9501\u3002<\/li>\n<li><strong>\u9ad8\u7248\u672c\u6539\u8fdb<\/strong>\uff1a\u4f7f\u7528 <strong><code>SET key value NX EX timeout<\/code><\/strong> \u5c06\u52a0\u9501\u548c\u8bbe\u7f6e\u8fc7\u671f\u65f6\u95f4\u5408\u5e76\u4e3a\u4e00\u4e2a\u539f\u5b50\u547d\u4ee4\u3002<\/li>\n<li><strong>\u9501\u8d85\u65f6\u4e0e\u8bef\u5220\u95ee\u9898<\/strong>\uff1a\u4efb\u52a1\u6267\u884c\u65f6\u95f4\u8d85\u8fc7\u9501\u8fc7\u671f\u65f6\u95f4\u65f6\uff0c\u9501\u88ab\u81ea\u52a8\u91ca\u653e\uff0c\u5176\u4ed6\u7ebf\u7a0b\u83b7\u5f97\u9501\uff0c\u539f\u7ebf\u7a0b\u6267\u884c\u5b8c\u540e\u53ef\u80fd\u8bef\u5220\u522b\u4eba\u7684\u9501\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\uff08\u9632\u8bef\u5220\uff09<\/strong>\uff1a\u5728 value \u4e2d\u5b58\u5165<strong>\u7ebf\u7a0b\u552f\u4e00\u6807\u8bc6\uff08\u5982 UUID \u6216\u7ebf\u7a0b ID\uff09<\/strong>\uff0c\u91ca\u653e\u9501\u65f6\u5148\u9a8c\u8bc1 value \u662f\u5426\u4e3a\u81ea\u5df1\uff0c\u5339\u914d\u624d\u5220\u9664\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001Redis \u5206\u5e03\u5f0f\u9501\u7684\u9ad8\u7ea7\u95ee\u9898<\/h3>\n<ol start=\"14\">\n<li><strong>\u9501\u7eed\u671f\u95ee\u9898<\/strong>\uff1a\u4efb\u52a1\u672a\u5b8c\u6210\u4f46\u9501\u5df2\u8fc7\u671f\uff0c\u9700\u8981\u81ea\u52a8\u7eed\u671f\u3002\u53ef\u901a\u8fc7 <code>Redisson<\/code> \u5ba2\u6237\u7aef\u7684 Watch Dog \u673a\u5236\u5b9e\u73b0\uff0c\u5b9a\u671f\u68c0\u67e5\u5e76\u5ef6\u957f\u9501\u8fc7\u671f\u65f6\u95f4\u3002<\/li>\n<li><strong>\u53ef\u91cd\u5165\u9501<\/strong>\uff1a\u9700\u8981\u7c7b\u4f3c Java <code>AQS<\/code> \u7684\u5b9e\u73b0\uff0c\u5728 value \u4e2d\u5b58\u50a8\u7ebf\u7a0b\u6807\u8bc6\u548c\u8ba1\u6570\u5668\uff08count\uff09\uff0c\u6bcf\u6b21\u91cd\u5165 count+1\uff0c\u91ca\u653e\u65f6 count-1 \u81f3 0 \u624d\u771f\u6b63\u91ca\u653e\u3002<\/li>\n<li><strong>\u96c6\u7fa4\u6570\u636e\u4e00\u81f4\u6027\u95ee\u9898<\/strong>\uff1aRedis \u4e3b\u4ece\u5f02\u6b65\u590d\u5236\u65f6\uff0c\u82e5\u9501\u5728\u4e3b\u8282\u70b9\u5199\u5165\u6210\u529f\u4f46\u5c1a\u672a\u540c\u6b65\u5230\u4ece\u8282\u70b9\u65f6\u4e3b\u8282\u70b9\u5b95\u673a\uff0c\u9501\u4f1a\u4e22\u5931\u3002<\/li>\n<\/ol>\n<h3>\u4e03\u3001RedLock\uff08\u7ea2\u9501\uff09\u65b9\u6848<\/h3>\n<ol start=\"17\">\n<li><strong>RedLock \u7b97\u6cd5<\/strong>\uff1a\u5728\u591a\u4e2a Redis \u72ec\u7acb\u8282\u70b9\uff08\u975e\u4e3b\u4ece\uff0c\u901a\u5e38 &gt;= 3 \u4e2a\uff09\u4e0a\u540c\u65f6\u7533\u8bf7\u9501\uff0c\u5f53<strong>\u534a\u6570\u4ee5\u4e0a\u8282\u70b9\uff08N\/2+1\uff09\u8fd4\u56de\u6210\u529f<\/strong>\u65f6\u624d\u7b97\u83b7\u5f97\u9501\uff0c\u89e3\u51b3\u4e86 Redis \u4e3b\u4ece\u5f02\u6b65\u590d\u5236\u5bfc\u81f4\u9501\u4e22\u5931\u7684\u95ee\u9898\u3002<\/li>\n<li>RedLock \u662f\u4e00\u79cd\u601d\u60f3\/\u7b97\u6cd5\uff0c<code>Redisson<\/code> \u5ba2\u6237\u7aef\u5df2\u63d0\u4f9b\u4e86\u5b8c\u6574\u5b9e\u73b0\uff0c\u65e0\u9700\u5f00\u53d1\u8005\u81ea\u884c\u7f16\u7801\u3002<\/li>\n<\/ol>\n<h2>80-\u5206\u5e03\u5f0f\u4e8b\u52a1\u89e3\u51b3\u65b9\u6848<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5206\u5e03\u5f0f\u4e8b\u52a1\u7684\u4ea7\u751f\u573a\u666f<\/h3>\n<ol>\n<li>\u5206\u5e03\u5f0f\u4e8b\u52a1\u6709\u4e24\u79cd\u4ea7\u751f\u573a\u666f\uff1a<strong>\u540c\u4e00\u5e94\u7528\u5185\u64cd\u4f5c\u591a\u4e2a\u6570\u636e\u6e90<\/strong>\uff08\u5982\u4e00\u4e2a Service \u4e2d\u64cd\u4f5c\u4e24\u4e2a\u4e0d\u540c\u6570\u636e\u5e93\uff09\u548c<strong>\u8de8\u5e94\u7528\/\u8de8\u8282\u70b9\u8c03\u7528<\/strong>\uff08\u5982\u670d\u52a1 A \u8c03\u7528\u670d\u52a1 B\uff0c\u5206\u522b\u64cd\u4f5c\u5404\u81ea\u7684\u6570\u636e\u5e93\uff09\u3002<\/li>\n<li>\u672c\u5730\u4e8b\u52a1\uff08\u5982 <code>@Transactional<\/code>\uff09\u53ea\u80fd\u4fdd\u8bc1\u5355\u4e2a\u6570\u636e\u5e93\u7684\u4e8b\u52a1\uff0c\u65e0\u6cd5\u4fdd\u8bc1\u8de8\u6570\u636e\u6e90\u6216\u8de8\u670d\u52a1\u7684\u539f\u5b50\u6027\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001XA \u89c4\u8303\u4e0e XA \u4e8b\u52a1\u6a21\u578b<\/h3>\n<ol start=\"3\">\n<li><strong>XA \u89c4\u8303<\/strong>\u662f\u5206\u5e03\u5f0f\u4e8b\u52a1\u7684\u884c\u4e1a\u6807\u51c6\uff0c\u8981\u6c42\u6570\u636e\u5e93\u5b9e\u73b0\u8be5\u89c4\u8303\u624d\u80fd\u53c2\u4e0e\u5206\u5e03\u5f0f\u4e8b\u52a1\uff08MySQL \u7684 InnoDB \u652f\u6301 XA\uff09\u3002<\/li>\n<li>XA \u4e8b\u52a1\u6a21\u578b\u4e2d\u5305\u542b\u56db\u4e2a\u89d2\u8272\uff1a<strong>TM\uff08\u4e8b\u52a1\u7ba1\u7406\u5668\uff0c\u534f\u8c03\u8005\uff09<\/strong>\u3001<strong>RM\uff08\u8d44\u6e90\u7ba1\u7406\u5668\uff0c\u5373\u6570\u636e\u5e93\uff09<\/strong>\u3001<strong>AP\uff08\u5e94\u7528\u7a0b\u5e8f\uff0c\u53d1\u8d77\u4e8b\u52a1\u7684\u5ba2\u6237\u7aef\uff09<\/strong>\u3002<\/li>\n<li>TM \u4e3a\u6bcf\u4e2a\u5206\u5e03\u5f0f\u4e8b\u52a1\u5206\u914d\u5168\u5c40\u552f\u4e00\u7684 <strong>TX ID\uff08\u4e8b\u52a1 ID\uff09<\/strong>\uff0c\u6240\u6709\u53c2\u4e0e\u8005\u901a\u8fc7\u8be5 ID \u8bc6\u522b\u540c\u4e00\u4e2a\u4e8b\u52a1\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4e24\u9636\u6bb5\u63d0\u4ea4\uff082PC\uff09<\/h3>\n<ol start=\"6\">\n<li><strong>\u4e24\u9636\u6bb5\u63d0\u4ea4\uff082PC\uff09<\/strong> \u662f XA \u89c4\u8303\u9ed8\u8ba4\u7684\u5206\u5e03\u5f0f\u4e8b\u52a1\u534f\u8bae\uff0c\u5206\u4e24\u4e2a\u9636\u6bb5\uff1a<strong>\u51c6\u5907\u9636\u6bb5<\/strong>\u548c<strong>\u63d0\u4ea4\/\u56de\u6eda\u9636\u6bb5<\/strong>\u3002<\/li>\n<li><strong>\u7b2c\u4e00\u9636\u6bb5\uff08\u51c6\u5907\u9636\u6bb5\uff09<\/strong>\uff1a\u6240\u6709\u53c2\u4e0e\u8005\u5404\u81ea\u6267\u884c\u672c\u5730\u4e8b\u52a1\u4f46\u4e0d\u63d0\u4ea4\uff0c\u7136\u540e\u5411 TM \u6c47\u62a5\u51c6\u5907\u72b6\u6001\uff08<code>OK<\/code> \u6216 <code>FAIL<\/code>\uff09\u3002<\/li>\n<li><strong>\u7b2c\u4e8c\u9636\u6bb5\uff08\u63d0\u4ea4\/\u56de\u6eda\u9636\u6bb5\uff09<\/strong>\uff1aTM \u6839\u636e\u6240\u6709\u53c2\u4e0e\u8005\u7684\u72b6\u6001\u7edf\u4e00\u51b3\u7b56\u2014\u2014\u5168\u90e8\u8fd4\u56de <code>OK<\/code> \u5219\u53d1\u9001 <code>COMMIT<\/code>\uff0c\u4efb\u4e00\u8fd4\u56de <code>FAIL<\/code> \u5219\u53d1\u9001 <code>ROLLBACK<\/code>\u3002<\/li>\n<li>2PC \u7684<strong>\u7f3a\u70b9<\/strong>\uff1aTM \u5b58\u5728<strong>\u5355\u70b9\u6545\u969c<\/strong>\uff08TM \u5b95\u673a\u540e\u6240\u6709\u53c2\u4e0e\u8005\u9677\u5165\u963b\u585e\u7b49\u5f85\uff09\uff1b<strong>\u540c\u6b65\u963b\u585e<\/strong>\uff08\u53c2\u4e0e\u8005\u6301\u6709\u9501\u7b49\u5f85 TM \u51b3\u7b56\uff0c\u54cd\u5e94\u65f6\u95f4\u957f\uff09\uff1b\u7f51\u7edc\u5f02\u5e38\u65f6\u53ef\u80fd\u51fa\u73b0\u90e8\u5206\u8282\u70b9\u5df2\u63d0\u4ea4\u3001\u90e8\u5206\u672a\u63d0\u4ea4\u7684<strong>\u4e0d\u4e00\u81f4<\/strong>\u60c5\u51b5\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4e09\u9636\u6bb5\u63d0\u4ea4\uff083PC\uff09<\/h3>\n<ol start=\"10\">\n<li><strong>\u4e09\u9636\u6bb5\u63d0\u4ea4\uff083PC\uff09<\/strong> \u662f 2PC \u7684\u4f18\u5316\u7248\u672c\uff0c\u5c06 2PC \u7684\u7b2c\u4e00\u9636\u6bb5\u62c6\u5206\u4e3a\u4e24\u6b65\uff1a<strong><code>CanCommit<\/code>\uff08\u8be2\u95ee\u80fd\u5426\u63d0\u4ea4\uff09<\/strong> \u2192 <strong><code>PreCommit<\/code>\uff08\u9884\u63d0\u4ea4\uff0c\u6267\u884c\u4e8b\u52a1\uff09<\/strong> \u2192 <strong><code>DoCommit<\/code>\uff08\u6b63\u5f0f\u63d0\u4ea4\/\u56de\u6eda\uff09<\/strong>\u3002<\/li>\n<li>3PC \u5f15\u5165\u4e86\u53c2\u4e0e\u8005\u7684<strong>\u8d85\u65f6\u673a\u5236<\/strong>\uff0cTM \u5b95\u673a\u540e\u53c2\u4e0e\u8005\u8d85\u65f6\u81ea\u52a8\u63d0\u4ea4\uff0c\u907f\u514d\u65e0\u9650\u963b\u585e\uff0c\u63d0\u9ad8\u4e86\u53ef\u7528\u6027\u3002<\/li>\n<li>3PC <strong>\u4ecd\u65e0\u6cd5\u6839\u672c\u89e3\u51b3\u4e00\u81f4\u6027\u95ee\u9898<\/strong>\uff0c\u7f51\u7edc\u5f02\u5e38\u65f6\u4ecd\u53ef\u80fd\u51fa\u73b0\u90e8\u5206\u8282\u70b9\u63d0\u4ea4\u3001\u90e8\u5206\u672a\u63d0\u4ea4\u7684\u4e0d\u4e00\u81f4\u60c5\u51b5\uff0c\u4e14\u54cd\u5e94\u65f6\u95f4\u957f\u7684\u6027\u80fd\u95ee\u9898\u4f9d\u7136\u5b58\u5728\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001TCC\uff08\u8865\u507f\u4e8b\u52a1\uff09<\/h3>\n<ol start=\"13\">\n<li><strong>TCC\uff08Try-Confirm-Cancel\uff09<\/strong> \u662f\u4e00\u79cd<strong>\u4e1a\u52a1\u5c42\u9762\u7684\u8865\u507f\u4e8b\u52a1<\/strong>\u65b9\u6848\uff0c\u4e0d\u4f9d\u8d56\u6570\u636e\u5e93\u7684\u63d0\u4ea4\/\u56de\u6eda\u673a\u5236\uff0c\u6240\u6709\u56de\u6eda\u903b\u8f91\u7531\u5f00\u53d1\u8005\u901a\u8fc7\u4ee3\u7801\u5b9e\u73b0\u3002<\/li>\n<li>TCC \u4e09\u4e2a\u65b9\u6cd5\uff1a<strong>Try\uff08\u9884\u7559\/\u68c0\u67e5\u8d44\u6e90\uff09<\/strong>\u3001<strong>Confirm\uff08\u786e\u8ba4\u63d0\u4ea4\uff0c\u771f\u6b63\u6267\u884c\u4e1a\u52a1\uff09<\/strong>\u3001<strong>Cancel\uff08\u8865\u507f\u56de\u6eda\uff0c\u53cd\u5411\u64cd\u4f5c\uff09<\/strong>\u3002<\/li>\n<li>TCC \u4e0e 2PC\/3PC \u7684\u672c\u8d28\u533a\u522b\uff1a2PC\/3PC \u4f9d\u8d56\u6570\u636e\u5e93\u7684 <code>COMMIT<\/code>\/<code>ROLLBACK<\/code>\uff0c\u800c TCC \u662f<strong>\u4e1a\u52a1\u4ee3\u7801\u5c42\u9762\u7684\u8865\u507f<\/strong>\uff0c\u6570\u636e\u5e93\u4e8b\u52a1\u6b63\u5e38\u63d0\u4ea4\uff0c\u56de\u6eda\u901a\u8fc7\u53cd\u5411\u4e1a\u52a1\u64cd\u4f5c\u5b9e\u73b0\u3002<\/li>\n<li>TCC \u7684\u7f3a\u70b9\uff1a\u5f00\u53d1\u8005\u9700\u8981\u4e3a\u6bcf\u4e2a\u4e1a\u52a1\u64cd\u4f5c\u7f16\u5199 Try\u3001Confirm\u3001Cancel \u4e09\u4e2a\u5b9e\u73b0\uff0c\u4ee3\u7801\u91cf\u5927\uff0c\u4e1a\u52a1\u4fb5\u5165\u6027\u5f3a\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u4e8b\u52a1\u6d88\u606f\uff08MQ \u6700\u7ec8\u4e00\u81f4\u6027\uff09<\/h3>\n<ol start=\"17\">\n<li><strong>\u4e8b\u52a1\u6d88\u606f\u65b9\u6848<\/strong>\u901a\u8fc7\u6d88\u606f\u961f\u5217\uff08RocketMQ \u7b49\u652f\u6301\uff09\u5b9e\u73b0\u5206\u5e03\u5f0f\u4e8b\u52a1\u7684\u6700\u7ec8\u4e00\u81f4\u6027\uff1a\u53d1\u9001\u65b9\u5c06\u4e8b\u52a1\u6d88\u606f\u53d1\u9001\u5230 MQ\uff08\u5bf9\u6d88\u8d39\u8005\u4e0d\u53ef\u89c1\uff09\u2192 \u6267\u884c\u672c\u5730\u4e8b\u52a1 \u2192 \u6839\u636e\u672c\u5730\u4e8b\u52a1\u7ed3\u679c\u63d0\u4ea4\u6216\u56de\u6eda\u6d88\u606f\u3002<\/li>\n<li>\u82e5\u672c\u5730\u4e8b\u52a1\u6210\u529f\uff0c\u53d1\u9001\u65b9\u5c06\u6d88\u606f\u53d8\u4e3a<strong>\u53ef\u89c1<\/strong>\uff0c\u6d88\u8d39\u8005\u6d88\u8d39\u6d88\u606f\u6267\u884c\u81ea\u8eab\u4e1a\u52a1\uff1b\u82e5\u6d88\u8d39\u8005\u5904\u7406\u5931\u8d25\uff0c\u53ef\u901a\u8fc7<strong>\u91cd\u8bd5\u673a\u5236<\/strong>\u4fdd\u8bc1\u6700\u7ec8\u6210\u529f\u3002<\/li>\n<li>\u82e5\u672c\u5730\u4e8b\u52a1\u5931\u8d25\uff0c\u53d1\u9001\u65b9\u56de\u6eda\u6d88\u606f\uff08\u5220\u9664\/\u53d6\u6d88\uff09\uff0c\u6d88\u8d39\u8005\u4e0d\u4f1a\u6d88\u8d39\u8be5\u6d88\u606f\u3002<\/li>\n<li>\u4e8b\u52a1\u6d88\u606f\u7684\u6838\u5fc3\u601d\u60f3\u662f<strong>\u6700\u7ec8\u4e00\u81f4\u6027<\/strong>\uff0c\u800c\u975e\u5f3a\u4e00\u81f4\u6027\uff0c\u901a\u8fc7\u6d88\u606f\u91cd\u8bd5\u548c\u8865\u507f\u673a\u5236\u4fdd\u8bc1\u4e8b\u52a1\u6700\u7ec8\u6210\u529f\u3002<\/li>\n<\/ol>\n<h2>81-\u5982\u4f55\u5b9e\u73b0\u63a5\u53e3\u52df\u7b49\u6027<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5e42\u7b49\u6027\u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>\u63a5\u53e3\u5e42\u7b49\u6027<\/strong>\uff1a\u540c\u4e00\u4e2a\u63a5\u53e3\u4f7f\u7528\u76f8\u540c\u7684\u53c2\u6570\u591a\u6b21\u8c03\u7528\uff0c\u4ea7\u751f\u7684\u6700\u7ec8\u7ed3\u679c\u4e0e\u8c03\u7528\u4e00\u6b21\u7684\u7ed3\u679c\u4e00\u81f4\uff0c\u4e0d\u4f1a\u5bf9\u6570\u636e\u4ea7\u751f\u989d\u5916\u7684\u526f\u4f5c\u7528\u3002<\/li>\n<li>\u67e5\u8be2\u64cd\u4f5c\u5929\u7136\u662f\u5e42\u7b49\u7684\uff08<code>SELECT<\/code> \u591a\u6b21\u6267\u884c\u7ed3\u679c\u4e00\u81f4\uff09\uff0c\u5e42\u7b49\u6027\u4e3b\u8981\u9488\u5bf9<strong>\u5199\u64cd\u4f5c<\/strong>\uff08<code>INSERT<\/code>\u3001<code>UPDATE<\/code>\u3001<code>DELETE<\/code>\uff09\u5728\u9ad8\u5e76\u53d1\u6216\u91cd\u590d\u8bf7\u6c42\u573a\u666f\u4e0b\u7684\u95ee\u9898\u3002<\/li>\n<li>\u5e42\u7b49\u6027\u8981\u89e3\u51b3\u7684\u95ee\u9898\uff1a\u9632\u6b62\u56e0\u7f51\u7edc\u91cd\u8bd5\u3001\u524d\u7aef\u91cd\u590d\u70b9\u51fb\u3001\u6d88\u606f\u91cd\u590d\u6d88\u8d39\u7b49\u5bfc\u81f4\u7684\u6570\u636e\u91cd\u590d\u63d2\u5165\u6216\u72b6\u6001\u5f02\u5e38\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5e42\u7b49\u6027\u7684\u5e38\u89c1\u5b9e\u73b0\u65b9\u6848<\/h3>\n<ol start=\"4\">\n<li><strong>\u65b9\u6848\u4e00\uff1a\u6570\u636e\u5e93\u552f\u4e00\u7ea6\u675f\uff08\u552f\u4e00ID\/\u552f\u4e00\u7d22\u5f15\uff09<\/strong>\uff1a\u5728\u6570\u636e\u5e93\u8868\u4e2d\u4e3a\u4e1a\u52a1\u552f\u4e00\u5b57\u6bb5\uff08\u5982\u624b\u673a\u53f7\u3001\u8ba2\u5355\u53f7\uff09\u8bbe\u7f6e\u552f\u4e00\u7ea6\u675f\uff0c\u91cd\u590d\u63d2\u5165\u65f6\u6570\u636e\u5e93\u62a5\u9519\u62d2\u7edd\uff0c\u4fdd\u8bc1\u540c\u4e00\u6761\u6570\u636e\u53ea\u4f1a\u88ab\u63d2\u5165\u4e00\u6b21\u3002<\/li>\n<li><strong>\u65b9\u6848\u4e8c\uff1a\u670d\u52a1\u7aef Token \u673a\u5236<\/strong>\uff1a\u670d\u52a1\u7aef\u5148\u5411\u524d\u7aef\u53d1\u653e\u4e00\u4e2a\u552f\u4e00 Token\uff08\u8bbe\u7f6e\u6709\u6548\u671f\uff09\uff0c\u524d\u7aef\u8bf7\u6c42\u65f6\u643a\u5e26 Token\uff0c\u670d\u52a1\u7aef\u6821\u9a8c Token \u662f\u5426\u5b58\u5728\u4e14\u6709\u6548\uff08\u6821\u9a8c\u540e\u7acb\u5373\u5220\u9664\uff09\uff0c\u540c\u4e00\u8bf7\u6c42\u53ea\u80fd\u6210\u529f\u5904\u7406\u4e00\u6b21\uff0c\u540e\u7eed\u91cd\u590d\u8bf7\u6c42\u88ab\u62d2\u7edd\u3002<\/li>\n<li><strong>\u65b9\u6848\u4e09\uff1a\u53bb\u91cd\u8868<\/strong>\uff1a\u4e13\u95e8\u5efa\u4e00\u5f20\u53bb\u91cd\u8868\uff0c\u5c06\u8bf7\u6c42\u7684\u552f\u4e00\u6807\u8bc6\uff08\u5982\u4e1a\u52a1 ID + \u63a5\u53e3\u540d\uff09\u5b58\u5165\u53bb\u91cd\u8868\u5e76\u8bbe\u7f6e\u552f\u4e00\u7ea6\u675f\uff0c\u6bcf\u6b21\u8bf7\u6c42\u5148\u68c0\u67e5\u53bb\u91cd\u8868\uff0c\u5df2\u5b58\u5728\u5219\u62d2\u7edd\uff0c\u4e0d\u5b58\u5728\u5219\u5141\u8bb8\u6267\u884c\u5e76\u8bb0\u5f55\u3002<\/li>\n<li><strong>\u65b9\u6848\u56db\uff1a\u4e50\u89c2\u9501\uff08\u7248\u672c\u53f7\u63a7\u5236\uff09<\/strong>\uff1a\u5728\u6570\u636e\u8868\u4e2d\u589e\u52a0 <code>version<\/code> \u5b57\u6bb5\uff0c\u66f4\u65b0\u65f6 <code>WHERE version = \u65e7\u7248\u672c\u53f7<\/code>\uff0c\u540c\u65f6\u5c06 <code>version<\/code> \u52a0 1\uff0c\u53ea\u6709\u7248\u672c\u53f7\u5339\u914d\u65f6\u66f4\u65b0\u624d\u6210\u529f\uff0c\u540e\u7eed\u91cd\u590d\u8bf7\u6c42\u56e0\u7248\u672c\u53f7\u5df2\u53d8\u800c\u5931\u8d25\u3002<\/li>\n<li><strong>\u65b9\u6848\u4e94\uff1a\u72b6\u6001\u673a\uff08\u72b6\u6001\u524d\u7f6e\u6821\u9a8c\uff09<\/strong>\uff1a\u4e3a\u4e1a\u52a1\u6570\u636e\u5b9a\u4e49\u6709\u9650\u72b6\u6001\uff08\u5982\u8ba2\u5355\uff1a\u5f85\u652f\u4ed8\u2192\u5df2\u652f\u4ed8\u2192\u5df2\u53d1\u8d27\uff09\uff0c\u6bcf\u4e2a\u72b6\u6001\u53ea\u80fd\u7531\u7279\u5b9a\u524d\u7f6e\u72b6\u6001\u8f6c\u79fb\u800c\u6765\uff0c\u91cd\u590d\u8bf7\u6c42\u56e0\u72b6\u6001\u5df2\u53d8\u66f4\u800c\u65e0\u6cd5\u518d\u6b21\u6267\u884c\u76f8\u540c\u64cd\u4f5c\u3002<\/li>\n<\/ol>\n<h2>82-\u7b80\u8ff0ZAB\u534f\u8bae<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ZAB \u534f\u8bae\u6982\u8ff0<\/h3>\n<ol>\n<li><strong>ZAB \u534f\u8bae<\/strong>\u662f ZooKeeper \u4e13\u5c5e\u7684<strong>\u539f\u5b50\u5e7f\u64ad\u534f\u8bae<\/strong>\uff0c\u5168\u79f0 ZooKeeper Atomic Broadcast\uff0c\u7528\u4e8e\u5b9e\u73b0\u5206\u5e03\u5f0f\u6570\u636e\u7684\u4e00\u81f4\u6027\uff0c\u652f\u6301\u5d29\u6e83\u6062\u590d\u3002<\/li>\n<li>ZAB \u534f\u8bae\u5305\u542b\u4e24\u79cd\u57fa\u672c\u6a21\u5f0f\uff1a<strong>\u6d88\u606f\u5e7f\u64ad\uff08\u6b63\u5e38\u72b6\u6001\uff09<\/strong>\u548c<strong>\u5d29\u6e83\u6062\u590d\uff08\u5f02\u5e38\u72b6\u6001\uff09<\/strong>\uff0cZooKeeper \u96c6\u7fa4\u59cb\u7ec8\u5904\u4e8e\u8fd9\u4e24\u79cd\u6a21\u5f0f\u4e4b\u4e00\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6d88\u606f\u5e7f\u64ad\u6a21\u5f0f<\/h3>\n<ol start=\"3\">\n<li>\u6240\u6709<strong>\u5199\u64cd\u4f5c<\/strong>\u90fd\u7531 Leader \u8282\u70b9\u5904\u7406\uff1a\u5ba2\u6237\u7aef\u8fde\u63a5 Follower \u65f6\uff0cFollower \u4f1a\u5c06\u5199\u8bf7\u6c42\u8def\u7531\u5230 Leader\u3002<\/li>\n<li>Leader \u5c06\u5ba2\u6237\u7aef\u7684\u5199\u8bf7\u6c42\u5c01\u88c5\u4e3a\u4e00\u4e2a<strong>\u4e8b\u52a1\uff08Proposal\uff09<\/strong>\uff0c\u5e7f\u64ad\u7ed9\u96c6\u7fa4\u4e2d\u6240\u6709 Follower \u8282\u70b9\u3002<\/li>\n<li>Leader \u7b49\u5f85 Follower \u7684\u53cd\u9988\uff0c\u5f53\u6536\u5230<strong>\u534a\u6570\u4ee5\u4e0a\uff08\u8fc7\u534a\u6570\uff09Follower \u7684\u786e\u8ba4<\/strong>\u540e\uff0c\u624d\u5c06\u4e8b\u52a1\u771f\u6b63\u63d0\u4ea4\u5e76\u5199\u5165 ZooKeeper \u7684\u6570\u636e\u6811\u4e2d\u3002<\/li>\n<li>\u6d88\u606f\u5e7f\u64ad\u6a21\u5f0f\u7c7b\u4f3c\u4e8e <strong>2PC\uff08\u4e24\u9636\u6bb5\u63d0\u4ea4\uff09<\/strong>\uff1a\u5148\u5e7f\u64ad\u4e8b\u52a1\uff0c\u5f85\u8fc7\u534a\u786e\u8ba4\u540e\u518d\u5e7f\u64ad\u63d0\u4ea4\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5d29\u6e83\u6062\u590d\u6a21\u5f0f<\/h3>\n<ol start=\"7\">\n<li>\u5728\u4ee5\u4e0b\u4e09\u79cd\u60c5\u51b5\u4e0b\u8fdb\u5165\u5d29\u6e83\u6062\u590d\u6a21\u5f0f\uff1a<strong>\u96c6\u7fa4\u521d\u59cb\u5316\u542f\u52a8\u65f6<\/strong>\u3001<strong>Leader \u5d29\u6e83\u6216\u5b95\u673a<\/strong>\u3001<strong>Leader \u4e0e\u8d85\u8fc7\u534a\u6570\u8282\u70b9\u65ad\u8054<\/strong>\u3002<\/li>\n<li>\u5d29\u6e83\u6062\u590d\u6a21\u5f0f\u4e0b\uff0c\u96c6\u7fa4<strong>\u65e0\u6cd5\u63d0\u4f9b\u5199\u64cd\u4f5c<\/strong>\uff0cZooKeeper \u8fdb\u5165\u9009\u4e3e\u72b6\u6001\uff08\u65e0\u4e3b\u72b6\u6001\uff09\uff0c\u91cd\u65b0\u9009\u4e3e\u65b0\u7684 Leader\u3002<\/li>\n<li>\u65b0 Leader \u9009\u4e3e\u4ea7\u751f\u540e\uff0c\u5148\u4e0e\u96c6\u7fa4\u4e2d\u8fc7\u534a\u6570 Follower \u8fdb\u884c\u6570\u636e\u540c\u6b65\uff0c\u4f7f\u6570\u636e\u8fbe\u5230\u4e00\u81f4\uff0c\u7136\u540e\u9000\u51fa\u6062\u590d\u6a21\u5f0f\uff0c\u8fdb\u5165\u6d88\u606f\u5e7f\u64ad\u6a21\u5f0f\u3002<\/li>\n<li>\u5d29\u6e83\u6062\u590d\u673a\u5236\u4fdd\u8bc1\u4e86 ZooKeeper \u7684<strong>\u5f3a\u4e00\u81f4\u6027\uff08CP \u7279\u6027\uff09<\/strong>\uff0c\u4f46\u727a\u7272\u4e86\u53ef\u7528\u6027\uff08A\uff09\uff0c\u56e0\u4e3a\u5728\u6062\u590d\u671f\u95f4\u96c6\u7fa4\u4e0d\u53ef\u5199\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001ZAB \u534f\u8bae\u7684\u4e09\u4e2a\u6838\u5fc3\u6982\u5ff5<\/h3>\n<ol start=\"11\">\n<li><strong>\u4e09\u79cd\u8282\u70b9\u72b6\u6001<\/strong>\uff1a<code>FOLLOWING<\/code>\uff08\u4ece\u8282\u70b9\uff0c\u53ea\u8bfb\u548c\u670d\u4ece Leader\uff09\u3001<code>LEADING<\/code>\uff08\u4e3b\u8282\u70b9\uff0c\u534f\u8c03\u4e8b\u52a1\uff09\u3001<code>ELECTION\/LOOKING<\/code>\uff08\u9009\u4e3e\u72b6\u6001\uff0c\u96c6\u7fa4\u65e0\u4e3b\uff09\u3002<\/li>\n<li><strong><code>zxid<\/code>\uff08\u4e8b\u52a1 ID\uff09<\/strong>\uff1aZAB \u534f\u8bae\u4e2d\u7684 64 \u4f4d\u4e8b\u52a1\u7f16\u53f7\uff0c\u9ad8 32 \u4f4d\u4e3a<strong>\u7eaa\u5143\uff08epoch\uff09<\/strong>\uff0c\u4f4e 32 \u4f4d\u4e3a<strong>\u5355\u8c03\u9012\u589e\u8ba1\u6570\u5668<\/strong>\uff0c\u6bcf\u5904\u7406\u4e00\u4e2a\u5ba2\u6237\u7aef\u4e8b\u52a1\u8bf7\u6c42\u8ba1\u6570\u5668\u52a0 1\u3002<\/li>\n<li><code>zxid<\/code> \u7684\u4f5c\u7528\uff1a\u6bcf\u4e2a\u4e8b\u52a1\uff08\u5305\u62ec\u6bcf\u4e00\u6b21 Leader \u9009\u4e3e\uff09\u90fd\u6709\u552f\u4e00\u7f16\u53f7\uff0c\u4f4e 32 \u4f4d\u53ef\u5224\u65ad\u4e8b\u52a1\u5904\u7406\u987a\u5e8f\uff0c\u9ad8 32 \u4f4d\u6807\u8bc6 Leader \u4efb\u671f\u3002<\/li>\n<li>\u6bcf\u6b21\u65b0 Leader \u9009\u4e3e\u4ea7\u751f\u540e\uff0c\u65b0 Leader \u4f1a\u8bfb\u53d6\u672c\u5730\u65e5\u5fd7\u4e2d\u6700\u5927\u7684 <code>zxid<\/code>\uff0c\u5c06\u5176\u9ad8 32 \u4f4d\uff08epoch\uff09+1 \u4f5c\u4e3a\u65b0\u7eaa\u5143\uff0c\u4f4e 32 \u4f4d\u5f52\u96f6\u91cd\u65b0\u9012\u589e\u3002<\/li>\n<\/ol>\n<h2>83-zk\u7684\u6570\u636e\u6a21\u578b\u548c\u8282\u70b9\u7c7b\u578b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ZooKeeper \u7684\u6570\u636e\u6a21\u578b\uff08ZNode\uff09<\/h3>\n<ol>\n<li>ZooKeeper \u7684\u6570\u636e\u6a21\u578b\u662f\u4e00\u4e2a<strong>\u6811\u5f62\u7ed3\u6784\uff08\u591a\u53c9\u6811\uff09<\/strong>\uff0c\u7c7b\u4f3c\u4e8e Windows \u6587\u4ef6\u7cfb\u7edf\u7684\u76ee\u5f55\u7ed3\u6784\uff0c\u6bcf\u4e2a\u8282\u70b9\u79f0\u4e3a <strong>ZNode<\/strong>\u3002<\/li>\n<li>ZNode \u517c\u5177<strong>\u6587\u4ef6\u548c\u76ee\u5f55\u4e24\u79cd\u7279\u6027<\/strong>\uff1a\u53ef\u4ee5\u4f5c\u4e3a\u8def\u5f84\u6807\u8bc6\uff08\u7c7b\u4f3c\u76ee\u5f55\uff09\uff0c\u4e5f\u53ef\u4ee5\u5b58\u50a8\u6570\u636e\uff08\u7c7b\u4f3c\u6587\u4ef6\uff09\uff0c\u4f46\u6bcf\u4e2a\u8282\u70b9\u5b58\u50a8\u7684\u6570\u636e\u5927\u5c0f<strong>\u9650\u5236\u4e3a 1MB<\/strong>\u3002<\/li>\n<li>ZNode \u7684<strong>\u552f\u4e00\u6807\u8bc6\u662f\u5168\u8def\u5f84<\/strong>\uff08\u5982 <code>\/app\/user\/123<\/code>\uff09\uff0c\u8def\u5f84\u5fc5\u987b\u4ee5 <code>\/<\/code> \u5f00\u5934\uff0c\u4e14<strong>\u6ca1\u6709\u76f8\u5bf9\u8def\u5f84<\/strong>\u7684\u6982\u5ff5\u3002<\/li>\n<li>ZNode \u652f\u6301\u539f\u5b50\u6027\u8bfb\u5199\uff1a\u8bfb\u64cd\u4f5c\u4e00\u6b21\u83b7\u53d6\u8be5\u8282\u70b9\u6240\u6709\u6570\u636e\u548c\u5143\u4fe1\u606f\uff0c\u5199\u64cd\u4f5c\u4e00\u6b21\u66ff\u6362\u8be5\u8282\u70b9\u6240\u6709\u6570\u636e\u3002<\/li>\n<li>\u6bcf\u4e2a ZNode \u90fd\u6709\u81ea\u5df1\u7684 <strong>ACL\uff08\u8bbf\u95ee\u63a7\u5236\u5217\u8868\uff09<\/strong>\uff0c\u7528\u4e8e\u63a7\u5236\u4e0d\u540c\u7528\u6237\u5bf9\u8282\u70b9\u7684\u589e\u5220\u6539\u67e5\u6743\u9650\u3002<\/li>\n<li>ZooKeeper \u7684\u6570\u636e\u4f1a\u901a\u8fc7<strong>\u65e5\u5fd7\u6587\u4ef6\u548c\u5feb\u7167\u6587\u4ef6<\/strong>\u6301\u4e45\u5316\u5230\u78c1\u76d8\uff0c\u4fdd\u8bc1\u5b95\u673a\u540e\u53ef\u6062\u590d\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001ZNode \u7684\u8282\u70b9\u7c7b\u578b<\/h3>\n<ol start=\"7\">\n<li><strong>\u6301\u4e45\u8282\u70b9\uff08Persistent\uff09<\/strong>\uff1a\u521b\u5efa\u540e\u4e00\u76f4\u5b58\u5728\uff0c\u5373\u4f7f\u521b\u5efa\u5b83\u7684\u5ba2\u6237\u7aef\u4e0e ZK \u670d\u52a1\u5668\u65ad\u5f00\u8fde\u63a5\uff0c\u8282\u70b9\u4e5f\u4e0d\u4f1a\u88ab\u5220\u9664\uff0c\u6570\u636e\u4f1a\u6301\u4e45\u5316\u5230\u78c1\u76d8\u3002<\/li>\n<li><strong>\u4e34\u65f6\u8282\u70b9\uff08Ephemeral\uff09<\/strong>\uff1a\u8282\u70b9\u7684\u751f\u547d\u5468\u671f\u4e0e\u521b\u5efa\u5b83\u7684\u5ba2\u6237\u7aef\u4f1a\u8bdd\u7ed1\u5b9a\uff0c<strong>\u5ba2\u6237\u7aef\u4f1a\u8bdd\u65ad\u5f00\u540e\u8282\u70b9\u4f1a\u88ab ZK \u670d\u52a1\u5668\u81ea\u52a8\u5220\u9664<\/strong>\uff08\u7528\u4e8e\u5b9e\u73b0\u5206\u5e03\u5f0f\u9501\uff09\u3002<\/li>\n<li><strong>\u6709\u5e8f\u8282\u70b9\uff08Sequential\uff09<\/strong>\uff1a\u4e0d\u662f\u4e00\u79cd\u72ec\u7acb\u8282\u70b9\u7c7b\u578b\uff0c\u800c\u662f\u5728\u6301\u4e45\u6216\u4e34\u65f6\u8282\u70b9\u57fa\u7840\u4e0a\u589e\u52a0<strong>\u987a\u5e8f\u7279\u6027<\/strong>\uff0cZK \u4f1a\u81ea\u52a8\u5728\u8282\u70b9\u540d\u540e\u8ffd\u52a0\u4e00\u4e2a\u5355\u8c03\u9012\u589e\u7684\u5e8f\u53f7\uff08\u5982 <code>\/node-0000000001<\/code>\uff09\u3002<\/li>\n<li>\u56e0\u6b64 ZNode \u5171\u6709\u56db\u79cd\u7c7b\u578b\uff1a<strong>\u6301\u4e45\u8282\u70b9\u3001\u6301\u4e45\u6709\u5e8f\u8282\u70b9\u3001\u4e34\u65f6\u8282\u70b9\u3001\u4e34\u65f6\u6709\u5e8f\u8282\u70b9<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4e34\u65f6\u8282\u70b9\u5728\u5206\u5e03\u5f0f\u9501\u4e2d\u7684\u5e94\u7528<\/h3>\n<ol start=\"11\">\n<li>\u4e34\u65f6\u8282\u70b9\u5929\u7136\u89e3\u51b3\u4e86<strong>\u6b7b\u9501\u95ee\u9898<\/strong>\uff1a\u5ba2\u6237\u7aef\u521b\u5efa\u4e34\u65f6\u8282\u70b9\u83b7\u5f97\u9501\uff0c\u82e5\u5ba2\u6237\u7aef\u5d29\u6e83\uff0c\u4f1a\u8bdd\u65ad\u5f00\uff0cZK \u81ea\u52a8\u5220\u9664\u8be5\u4e34\u65f6\u8282\u70b9\uff0c\u9501\u81ea\u52a8\u91ca\u653e\uff0c\u5176\u4ed6\u5ba2\u6237\u7aef\u53ef\u7ee7\u7eed\u7ade\u4e89\u3002<\/li>\n<\/ol>\n<h2>84-\u7b80\u8ff0zk\u7684\u547d\u540d\u670d\u52a1\u3001\u914d\u7f6e\u7ba1\u7406\u3001\u96c6\u7fa4\u7ba1\u7406<\/h2>\n<hr \/>\n<h3>\u4e00\u3001ZooKeeper \u7684\u4e09\u5927\u6838\u5fc3\u529f\u80fd\u6982\u8ff0<\/h3>\n<ol>\n<li>ZooKeeper \u7684\u4e09\u79cd\u4e3b\u8981\u4f7f\u7528\u573a\u666f\u662f\uff1a<strong>\u547d\u540d\u670d\u52a1\uff08Name Service\uff09<\/strong>\u3001<strong>\u914d\u7f6e\u7ba1\u7406\uff08Configuration Management\uff09<\/strong> \u548c <strong>\u96c6\u7fa4\u7ba1\u7406\uff08Cluster Management\uff09<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u547d\u540d\u670d\u52a1<\/h3>\n<ol start=\"2\">\n<li><strong>\u547d\u540d\u670d\u52a1<\/strong>\uff1a\u901a\u8fc7\u4e00\u4e2a\u903b\u8f91\u540d\u79f0\uff08\u670d\u52a1\u540d\uff09\u83b7\u53d6\u5bf9\u5e94\u7684\u8d44\u6e90\u5730\u5740\uff08\u5982 IP + \u7aef\u53e3\uff09\uff0c\u7c7b\u4f3c\u4e8e\u6ce8\u518c\u4e2d\u5fc3\u7684\u670d\u52a1\u53d1\u73b0\u529f\u80fd\u3002<\/li>\n<li>ZooKeeper \u5229\u7528 ZNode \u8def\u5f84\u7684<strong>\u5168\u5c40\u552f\u4e00\u6027<\/strong>\uff0c\u5c06\u670d\u52a1\u540d\u4f5c\u4e3a\u8282\u70b9\u8def\u5f84\uff0c\u5c06\u670d\u52a1\u5730\u5740\uff08URL\uff09\u4f5c\u4e3a\u8282\u70b9\u6570\u636e\u5b58\u50a8\uff0c\u5ba2\u6237\u7aef\u901a\u8fc7\u670d\u52a1\u540d\u5373\u53ef\u83b7\u53d6\u5730\u5740\u8fdb\u884c\u8c03\u7528\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u914d\u7f6e\u7ba1\u7406<\/h3>\n<ol start=\"4\">\n<li><strong>\u914d\u7f6e\u7ba1\u7406<\/strong>\uff1a\u5c06\u5206\u5e03\u5f0f\u7cfb\u7edf\u4e2d\u5404\u8282\u70b9\u7684\u914d\u7f6e\u4fe1\u606f\uff08\u5982\u6570\u636e\u5e93\u8fde\u63a5\u3001FTP \u5730\u5740\u3001\u7aef\u53e3\u7b49\uff09\u96c6\u4e2d\u5b58\u50a8\u5728 ZooKeeper \u7684\u67d0\u4e2a ZNode \u4e2d\uff0c\u5b9e\u73b0\u914d\u7f6e\u7684\u7edf\u4e00\u7ba1\u7406\u3002<\/li>\n<li>\u914d\u7f6e\u53d8\u66f4\u65f6\uff0c\u53ea\u9700\u4fee\u6539 ZooKeeper \u4e2d\u5bf9\u5e94\u8282\u70b9\u7684\u6570\u636e\uff0cZooKeeper \u901a\u8fc7 <strong>Watcher \u76d1\u542c\u673a\u5236<\/strong> \u81ea\u52a8\u901a\u77e5\u6240\u6709\u8ba2\u9605\u8be5\u8282\u70b9\u7684\u5ba2\u6237\u7aef\uff0c\u5ba2\u6237\u7aef\u6536\u5230\u901a\u77e5\u540e\u62c9\u53d6\u6700\u65b0\u914d\u7f6e\uff0c\u65e0\u9700\u9010\u4e2a\u8282\u70b9\u624b\u52a8\u4fee\u6539\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u96c6\u7fa4\u7ba1\u7406<\/h3>\n<ol start=\"6\">\n<li><strong>\u96c6\u7fa4\u7ba1\u7406<\/strong>\uff1a\u5305\u62ec<strong>\u96c6\u7fa4\u76d1\u63a7<\/strong>\uff08\u76d1\u63a7\u96c6\u7fa4\u4e2d\u673a\u5668\u662f\u5426\u5728\u7ebf\uff09\u548c<strong>\u96c6\u7fa4\u63a7\u5236<\/strong>\uff08\u52a8\u6001\u589e\u5220\u96c6\u7fa4\u8282\u70b9\uff09\u3002<\/li>\n<li>\u96c6\u7fa4\u7ba1\u7406\u5229\u7528 ZooKeeper \u7684<strong>\u4e34\u65f6\u8282\u70b9\uff08Ephemeral Node\uff09<\/strong> \u7279\u6027\uff1a\u6bcf\u53f0\u673a\u5668\u5728 ZooKeeper \u4e2d\u521b\u5efa\u4e00\u4e2a\u4e34\u65f6\u8282\u70b9\u8868\u793a\u5176\u5728\u7ebf\u72b6\u6001\uff0c\u82e5\u673a\u5668\u5b95\u673a\u6216\u65ad\u8fde\uff0c\u4f1a\u8bdd\u5931\u6548\uff0c\u4e34\u65f6\u8282\u70b9\u88ab\u81ea\u52a8\u5220\u9664\uff0c\u5b9e\u73b0<strong>\u81ea\u52a8\u4e0b\u7ebf<\/strong>\u3002<\/li>\n<li>\u96c6\u7fa4\u76d1\u63a7\u901a\u8fc7 Watcher \u673a\u5236\u76d1\u542c\u8fd9\u4e9b\u4e34\u65f6\u8282\u70b9\u7684\u53d8\u5316\uff0c\u8282\u70b9\u65b0\u589e\u6216\u5220\u9664\u65f6\uff0c\u6240\u6709\u8ba2\u9605\u8005\u4f1a\u6536\u5230\u901a\u77e5\uff0c\u4ece\u800c\u5b9e\u73b0\u96c6\u7fa4\u6210\u5458\u7684\u5b9e\u65f6\u611f\u77e5\u3002<\/li>\n<\/ol>\n<h2>85-\u8bb2\u4e0bZookeeper watch\u673a\u5236<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Watch \u673a\u5236\u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>Watch \u673a\u5236<\/strong>\u662f ZooKeeper \u7684\u4e00\u79cd<strong>\u4e8b\u4ef6\u76d1\u542c\u673a\u5236<\/strong>\uff1a\u5ba2\u6237\u7aef\u53ef\u4ee5\u5728\u67d0\u4e2a ZNode \u4e0a\u6ce8\u518c\u4e00\u4e2a Watcher\uff08\u76d1\u542c\u5668\uff09\uff0c\u5f53\u8be5 ZNode \u53d1\u751f\u521b\u5efa\u3001\u4fee\u6539\u3001\u5220\u9664\u7b49\u53d8\u5316\u65f6\uff0cZooKeeper \u670d\u52a1\u7aef\u4f1a\u901a\u77e5\u5ba2\u6237\u7aef\u3002<\/li>\n<li>\u5ba2\u6237\u7aef\u6536\u5230\u901a\u77e5\u540e\uff0c\u53ea\u77e5\u9053\u8be5\u8282\u70b9\u6709\u4e8b\u4ef6\u53d1\u751f\uff0c\u4f46<strong>\u4e0d\u77e5\u9053\u5177\u4f53\u4e8b\u4ef6\u5185\u5bb9<\/strong>\uff0c\u9700\u8981\u5ba2\u6237\u7aef<strong>\u4e3b\u52a8\u91cd\u65b0\u67e5\u8be2<\/strong>\u670d\u52a1\u7aef\u83b7\u53d6\u6700\u65b0\u6570\u636e\u6216\u4e8b\u4ef6\u8be6\u60c5\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Watch \u7684\u4e24\u5927\u7279\u6027<\/h3>\n<ol start=\"3\">\n<li><strong>\u4e00\u6b21\u6027\uff08One-time Trigger\uff09<\/strong>\uff1aWatcher \u88ab\u89e6\u53d1\u540e\u4f1a\u81ea\u52a8\u4ece\u670d\u52a1\u7aef\u79fb\u9664\uff0c\u5ba2\u6237\u7aef\u82e5\u9700\u7ee7\u7eed\u76d1\u542c\uff0c\u5fc5\u987b<strong>\u91cd\u65b0\u6ce8\u518c<\/strong>\u3002\u8bbe\u8ba1\u4e3a\u4e00\u6b21\u6027\u7684\u76ee\u7684\u662f<strong>\u51cf\u8f7b\u670d\u52a1\u7aef\u538b\u529b<\/strong>\uff0c\u907f\u514d\u65e0\u6548\u901a\u77e5\u3002<\/li>\n<li><strong>\u8f7b\u91cf\u7ea7\uff08Lightweight\uff09<\/strong>\uff1aWatcher \u901a\u77e5\u53ea\u544a\u77e5\u5ba2\u6237\u7aef&#8221;\u8282\u70b9\u53d1\u751f\u4e86\u53d8\u5316&#8221;\uff0c<strong>\u4e0d\u643a\u5e26\u53d8\u5316\u7684\u5177\u4f53\u5185\u5bb9\u6216\u6570\u636e<\/strong>\uff0c\u5ba2\u6237\u7aef\u9700\u81ea\u884c\u67e5\u8be2\uff0c\u76ee\u7684\u662f<strong>\u8282\u7701\u5e26\u5bbd\u548c\u670d\u52a1\u7aef\u8d44\u6e90<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Watch \u673a\u5236\u4e2d\u7684\u89d2\u8272\u4e0e\u6d41\u7a0b<\/h3>\n<ol start=\"5\">\n<li>Watch \u6d89\u53ca\u4e09\u4e2a\u89d2\u8272\uff1a<strong>\u5ba2\u6237\u7aef\u4e3b\u7ebf\u7a0b<\/strong>\u3001<strong>\u5ba2\u6237\u7aef Watcher Manager\uff08\u76d1\u542c\u7ba1\u7406\u5668\uff09<\/strong>\u3001<strong>ZooKeeper \u670d\u52a1\u7aef<\/strong>\u3002<\/li>\n<li><strong>\u5ba2\u6237\u7aef\u6ce8\u518c Watcher<\/strong>\uff1a\u5ba2\u6237\u7aef\u8bbe\u7f6e Watch \u65f6\uff0c\u4f1a\u5c06 Watcher \u4fe1\u606f\u5b58\u50a8\u5728\u5ba2\u6237\u7aef\u7684 <strong>Watcher Manager<\/strong> \u4e2d\uff0c\u540c\u65f6\u5728\u670d\u52a1\u7aef\u6ce8\u518c\uff08\u670d\u52a1\u7aef\u7ef4\u62a4 ZNode \u5230\u5ba2\u6237\u7aef\u8fde\u63a5\u4fe1\u606f\u7684\u6620\u5c04\uff09\u3002<\/li>\n<li><strong>\u670d\u52a1\u7aef\u89e6\u53d1\u901a\u77e5<\/strong>\uff1a\u5f53 ZNode \u53d1\u751f\u53d8\u5316\u65f6\uff0c\u670d\u52a1\u7aef\u751f\u6210\u4e00\u4e2a\u4e8b\u4ef6\uff08Event\uff09\uff0c\u901a\u8fc7\u4e4b\u524d\u4fdd\u5b58\u7684 Socket \u8fde\u63a5\u4fe1\u606f\uff0c\u5c06\u4e8b\u4ef6\u53d1\u9001\u7ed9\u6240\u6709\u6ce8\u518c\u4e86\u8be5\u8282\u70b9 Watcher \u7684\u5ba2\u6237\u7aef\u3002<\/li>\n<li><strong>\u5ba2\u6237\u7aef\u56de\u8c03\u5904\u7406<\/strong>\uff1a\u5ba2\u6237\u7aef\u6536\u5230\u901a\u77e5\u540e\uff0cWatcher Manager \u4f1a\u89e6\u53d1\u5bf9\u5e94\u7684\u56de\u8c03\u65b9\u6cd5\uff0c<strong>\u56de\u8c03\u662f\u4e32\u884c\u540c\u6b65\u7684<\/strong>\uff0c\u4fdd\u8bc1\u540c\u4e00\u5ba2\u6237\u7aef\u7684\u4e8b\u4ef6\u6309\u987a\u5e8f\u4f9d\u6b21\u5904\u7406\uff0c\u4e0d\u4f1a\u5e76\u53d1\u4e71\u5e8f\u3002<\/li>\n<\/ol>\n<h2>86-zk\u548ceureka\u7684\u533a\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001CAP \u7406\u8bba\u89c6\u89d2\u4e0b\u7684\u6838\u5fc3\u533a\u522b<\/h3>\n<ol>\n<li><strong>ZooKeeper \u9075\u5faa CP \u539f\u5219<\/strong>\uff1a\u4fdd\u8bc1<strong>\u5f3a\u4e00\u81f4\u6027\uff08Consistency\uff09<\/strong> \u548c\u5206\u533a\u5bb9\u9519\u6027\uff08Partition Tolerance\uff09\uff0c\u4f46\u5728\u5d29\u6e83\u6062\u590d\u671f\u95f4<strong>\u6682\u65f6\u727a\u7272\u53ef\u7528\u6027\uff08Availability\uff09<\/strong>\u3002<\/li>\n<li><strong>Eureka \u9075\u5faa AP \u539f\u5219<\/strong>\uff1a\u4fdd\u8bc1<strong>\u9ad8\u53ef\u7528\u6027\uff08Availability\uff09<\/strong> \u548c\u5206\u533a\u5bb9\u9519\u6027\uff08Partition Tolerance\uff09\uff0c\u4f46<strong>\u653e\u5f03\u5f3a\u4e00\u81f4\u6027<\/strong>\uff0c\u5141\u8bb8\u4e0d\u540c\u8282\u70b9\u95f4\u7684\u6570\u636e\u6682\u65f6\u4e0d\u4e00\u81f4\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001ZooKeeper \u7684 CP \u7279\u6027<\/h3>\n<ol start=\"3\">\n<li>ZooKeeper \u91c7\u7528<strong>\u4e3b\u4ece\u67b6\u6784<\/strong>\uff1aLeader \u8d1f\u8d23\u6240\u6709\u5199\u8bf7\u6c42\uff0cFollower \u8d1f\u8d23\u8bfb\u8bf7\u6c42\uff0c\u5199\u8bf7\u6c42\u7edf\u4e00\u8def\u7531\u5230 Leader\uff0c\u4fdd\u8bc1\u5168\u5c40\u5f3a\u4e00\u81f4\u6027\u3002<\/li>\n<li>ZK \u5728\u7f51\u7edc\u5206\u533a\u6216 Leader \u5b95\u673a\u65f6\u4f1a\u8fdb\u5165<strong>\u5d29\u6e83\u6062\u590d\u6a21\u5f0f<\/strong>\u8fdb\u884c Leader \u9009\u4e3e\uff0c\u671f\u95f4<strong>\u6574\u4e2a\u96c6\u7fa4\u4e0d\u53ef\u5199<\/strong>\uff08\u4e0d\u53ef\u7528\uff09\uff0c\u4f53\u73b0\u4e86 CP \u7684\u8bbe\u8ba1\u9009\u62e9\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Eureka \u7684 AP \u7279\u6027<\/h3>\n<ol start=\"5\">\n<li>Eureka \u91c7\u7528<strong>\u5bf9\u7b49\uff08Peer-to-Peer\uff09\u67b6\u6784<\/strong>\uff1a\u6240\u6709\u8282\u70b9\u5e73\u7b49\uff0c\u6ca1\u6709\u4e3b\u4ece\u4e4b\u5206\uff0c\u4efb\u4e00\u8282\u70b9\u6302\u6389\u4e0d\u5f71\u54cd\u5176\u4ed6\u8282\u70b9\u6b63\u5e38\u5de5\u4f5c\u3002<\/li>\n<li>\u5ba2\u6237\u7aef\u5411\u67d0\u53f0 Eureka \u8282\u70b9\u6ce8\u518c\u5931\u8d25\u65f6\u4f1a<strong>\u81ea\u52a8\u5207\u6362\u5230\u5176\u4ed6\u53ef\u7528\u8282\u70b9<\/strong>\uff0c\u53ea\u8981\u6709\u81f3\u5c11\u4e00\u53f0 Eureka \u5b58\u6d3b\uff0c\u6ce8\u518c\u670d\u52a1\u5c31\u80fd\u7ee7\u7eed\u5bf9\u5916\u63d0\u4f9b\u670d\u52a1\u3002<\/li>\n<li>Eureka \u4e0d\u4fdd\u8bc1\u5f3a\u4e00\u81f4\u6027\uff1a\u7f51\u7edc\u5206\u533a\u65f6\uff0c\u4e0d\u540c\u8282\u70b9\u95f4\u7684\u670d\u52a1\u5217\u8868\u53ef\u80fd\u4e0d\u4e00\u81f4\uff0c\u5ba2\u6237\u7aef\u53ef\u80fd\u4ece\u4e0d\u540c\u8282\u70b9\u8bfb\u5230\u4e0d\u540c\u7684\u670d\u52a1\u5730\u5740\u3002<\/li>\n<li>Eureka \u7684\u81ea\u6211\u4fdd\u62a4\u673a\u5236\uff1a\u5f53\u67d0\u8282\u70b9\u68c0\u6d4b\u5230 85% \u4ee5\u4e0a\u7684\u670d\u52a1\u5fc3\u8df3\u4e22\u5931\u65f6\uff0c\u4f1a\u8ba4\u4e3a\u662f\u81ea\u5df1\u7f51\u7edc\u6709\u95ee\u9898\uff0c<strong>\u4e0d\u4f1a\u4e3b\u52a8\u5254\u9664\u8fd9\u4e9b\u670d\u52a1<\/strong>\uff0c\u9632\u6b62\u8bef\u5220\u5927\u91cf\u6b63\u5e38\u670d\u52a1\u3002<\/li>\n<li>Eureka \u5ba2\u6237\u7aef\u4f1a<strong>\u7f13\u5b58\u672c\u5730\u670d\u52a1\u5217\u8868<\/strong>\uff0c\u5373\u4f7f\u6240\u6709 Eureka \u670d\u52a1\u7aef\u5168\u90e8\u5b95\u673a\uff0c\u5ba2\u6237\u7aef\u4ecd\u53ef\u7ee7\u7eed\u4f7f\u7528\u672c\u5730\u7f13\u5b58\u8fdb\u884c\u670d\u52a1\u8c03\u7528\uff0c\u4e3a\u96c6\u7fa4\u6062\u590d\u4e89\u53d6\u65f6\u95f4\u3002<\/li>\n<\/ol>\n<h2>87-Spring Cloud\u548cDubbo\u7684\u533a\u522b<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u5e95\u5c42\u534f\u8bae\u4e0d\u540c<\/h3>\n<ol>\n<li><strong>Spring Cloud<\/strong> \u9ed8\u8ba4\u57fa\u4e8e <strong>HTTP \u534f\u8bae\uff08\u5e94\u7528\u5c42\uff09<\/strong>\uff0c\u63a5\u53e3\u4e3a RESTful API \u98ce\u683c\u3002<\/li>\n<li><strong>Dubbo<\/strong> \u9ed8\u8ba4\u57fa\u4e8e <strong>TCP \u534f\u8bae\uff08\u4f20\u8f93\u5c42\uff09<\/strong>\uff0c\u5b9e\u73b0 RPC \u8c03\u7528\uff0c\u7531\u4e8e TCP \u5c42\u6bd4 HTTP \u5c42\u66f4\u5e95\u5c42\uff0cDubbo \u7684\u6027\u80fd\u901a\u5e38\u9ad8\u4e8e Spring Cloud\u3002<\/li>\n<li>Spring Cloud \u4e5f\u53ef\u4ee5\u5207\u6362\u4e3a gRPC \u7b49\u534f\u8bae\uff0c\u4f46\u9ed8\u8ba4\u573a\u666f\u4e0b Dubbo \u7684\u7f51\u7edc\u4f20\u8f93\u6548\u7387\u66f4\u9ad8\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6ce8\u518c\u4e2d\u5fc3\u9009\u62e9\u4e0d\u540c\uff08CAP \u503e\u5411\u4e0d\u540c\uff09<\/h3>\n<ol start=\"4\">\n<li><strong>Spring Cloud<\/strong> \u9ed8\u8ba4\u4f7f\u7528 <strong>Eureka<\/strong> \u4f5c\u4e3a\u6ce8\u518c\u4e2d\u5fc3\uff08\u9075\u5faa <strong>AP<\/strong>\uff1a\u9ad8\u53ef\u7528\uff0c\u5f31\u4e00\u81f4\u6027\uff09\uff0c\u96c6\u7fa4\u4e2d\u53ea\u8981\u6709\u4e00\u4e2a\u8282\u70b9\u5b58\u6d3b\uff0c\u6ce8\u518c\u670d\u52a1\u5c31\u80fd\u7ee7\u7eed\u5de5\u4f5c\u3002<\/li>\n<li><strong>Dubbo<\/strong> \u9ed8\u8ba4\u4f7f\u7528 <strong>ZooKeeper<\/strong> \u4f5c\u4e3a\u6ce8\u518c\u4e2d\u5fc3\uff08\u9075\u5faa <strong>CP<\/strong>\uff1a\u5f3a\u4e00\u81f4\u6027\uff0c\u5f31\u53ef\u7528\uff09\uff0c\u7f51\u7edc\u5206\u533a\u6216 Leader \u9009\u4e3e\u671f\u95f4\u96c6\u7fa4\u4e0d\u53ef\u7528\u3002<\/li>\n<li>Eureka \u63d0\u4f9b\u5ba2\u6237\u7aef\u7f13\u5b58\u673a\u5236\uff0c\u5373\u4f7f\u6240\u6709 Eureka \u8282\u70b9\u5b95\u673a\uff0c\u5ba2\u6237\u7aef\u4ecd\u53ef\u7ee7\u7eed\u4f7f\u7528\u672c\u5730\u7f13\u5b58\u670d\u52a1\u5217\u8868\uff1bZooKeeper \u5219\u5728\u5d29\u6e83\u6062\u590d\u671f\u95f4\u4e0d\u53ef\u5199\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u670d\u52a1\u6a21\u578b\u5b9a\u4e49\u4e0d\u540c<\/h3>\n<ol start=\"7\">\n<li><strong>Dubbo<\/strong> \u5c06<strong>\u4e00\u4e2a\u63a5\u53e3<\/strong>\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u670d\u52a1\uff08\u670d\u52a1\u7c92\u5ea6\u8f83\u7ec6\uff09\uff0c\u4e00\u4e2a\u5e94\u7528\u5185\u53ef\u5305\u542b\u591a\u4e2a\u670d\u52a1\u63a5\u53e3\u3002<\/li>\n<li><strong>Spring Cloud<\/strong> \u5c06<strong>\u4e00\u4e2a\u5e94\u7528<\/strong>\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u670d\u52a1\uff08\u670d\u52a1\u7c92\u5ea6\u8f83\u7c97\uff09\uff0c\u6bcf\u4e2a\u5fae\u670d\u52a1\u662f\u4e00\u4e2a\u72ec\u7acb\u7684\u5e94\u7528\u3002<\/li>\n<li>\u7531\u4e8e\u670d\u52a1\u7c92\u5ea6\u4e0d\u540c\uff0cDubbo \u66f4\u5e38\u88ab\u79f0\u4e3a&#8221;\u5206\u5e03\u5f0f\u670d\u52a1\u6846\u67b6&#8221;\uff0c\u800c Spring Cloud \u66f4\u7b26\u5408&#8221;\u5fae\u670d\u52a1\u67b6\u6784&#8221;\u7684\u5b9a\u4f4d\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u529f\u80fd\u5b9a\u4f4d\u4e0d\u540c<\/h3>\n<ol start=\"10\">\n<li><strong>Spring Cloud \u662f\u4e00\u4e2a\u5b8c\u6574\u7684\u5fae\u670d\u52a1\u751f\u6001<\/strong>\uff0c\u63d0\u4f9b\u4e86\u5fae\u670d\u52a1\u67b6\u6784\u7684\u6574\u5957\u89e3\u51b3\u65b9\u6848\uff08\u670d\u52a1\u53d1\u73b0\u3001\u914d\u7f6e\u7ba1\u7406\u3001\u7194\u65ad\u964d\u7ea7\u3001\u7f51\u5173\u3001\u94fe\u8def\u8ffd\u8e2a\u7b49\uff09\uff0c\u5f00\u7bb1\u5373\u7528\u3002<\/li>\n<li><strong>Dubbo \u4e13\u6ce8\u4e8e\u670d\u52a1\u6cbb\u7406\u548c\u670d\u52a1\u8c03\u7528<\/strong>\uff0c\u4ec5\u89e3\u51b3\u4e86\u5fae\u670d\u52a1\u67b6\u6784\u4e2d\u7684&#8221;\u670d\u52a1\u95f4\u901a\u4fe1&#8221;\u8fd9\u4e00\u4e2a\u73af\u8282\uff0c\u5176\u4ed6\u529f\u80fd\uff08\u5982\u7194\u65ad\uff09\u9700\u81ea\u884c\u96c6\u6210\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u3002<\/li>\n<li>\u5728 Spring Cloud \u4e2d\u96c6\u6210 Hystrix \u7b49\u670d\u52a1\u7194\u65ad\u7ec4\u4ef6\u975e\u5e38\u7b80\u5355\uff08\u5f15\u5165\u4f9d\u8d56\u5373\u53ef\uff09\uff0c\u800c\u5728 Dubbo \u4e2d\u96c6\u6210\u76f8\u540c\u529f\u80fd\u9700\u8981\u66f4\u591a\u7684\u7f16\u7801\u548c\u914d\u7f6e\u5de5\u4f5c\u3002<\/li>\n<\/ol>\n<h2>88-\u4ec0\u4e48\u662fHystrix?\u7b80\u8ff0\u5b9e\u73b0\u673a\u5236<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Hystrix \u7684\u6982\u5ff5\u4e0e\u4f5c\u7528<\/h3>\n<ol>\n<li><strong>Hystrix<\/strong> \u662f Spring Cloud \u4e2d\u7684<strong>\u5206\u5e03\u5f0f\u5bb9\u9519\u6846\u67b6<\/strong>\uff0c\u6838\u5fc3\u4f5c\u7528\u662f<strong>\u963b\u6b62\u6545\u969c\u7684\u8fde\u9501\u53cd\u5e94\uff08\u670d\u52a1\u96ea\u5d29\uff09<\/strong>\uff0c\u5b9e\u73b0<strong>\u7194\u65ad<\/strong>\u3001<strong>\u964d\u7ea7<\/strong>\u548c<strong>\u8d44\u6e90\u9694\u79bb<\/strong>\u3002<\/li>\n<li>\u5728\u5fae\u670d\u52a1\u94fe\u5f0f\u8c03\u7528\u4e2d\uff08\u5982 A \u2192 B \u2192 C\uff09\uff0c\u82e5\u67d0\u4e2a\u670d\u52a1\u538b\u529b\u66b4\u589e\u6216\u6545\u969c\uff0cHystrix \u53ef\u901a\u8fc7\u7194\u65ad\u5feb\u901f\u5207\u65ad\u6545\u969c\u94fe\u8def\uff0c\u9632\u6b62\u6574\u4e2a\u7cfb\u7edf\u88ab\u62d6\u57ae\u3002<\/li>\n<li><strong>\u5feb\u901f\u5931\u8d25\uff08Fail Fast\uff09<\/strong>\uff1a\u5f53\u975e\u6838\u5fc3\u670d\u52a1\u6267\u884c\u65f6\u95f4\u957f\u6216\u8d44\u6e90\u5360\u7528\u9ad8\u65f6\uff0c\u76f4\u63a5\u8fd4\u56de\u9884\u5b9a\u4e49\u7684 Fallback\uff08\u964d\u7ea7\u54cd\u5e94\uff09\uff0c\u800c\u4e0d\u771f\u6b63\u6267\u884c\u4e1a\u52a1\u903b\u8f91\uff0c\u5b9e\u73b0<strong>\u4f18\u96c5\u964d\u7ea7<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Hystrix \u7684\u4e24\u79cd\u8d44\u6e90\u9694\u79bb\u673a\u5236<\/h3>\n<ol start=\"4\">\n<li><strong>\u7ebf\u7a0b\u6c60\u9694\u79bb\uff08Thread Isolation\uff09<\/strong>\uff1a\u6bcf\u4e2a\u88ab\u8c03\u7528\u7684\u4f9d\u8d56\u670d\u52a1\u5206\u914d\u4e00\u4e2a<strong>\u72ec\u7acb\u7684\u7ebf\u7a0b\u6c60<\/strong>\uff0cA \u670d\u52a1\u8c03\u7528 B \u4f7f\u7528\u7ebf\u7a0b\u6c60 1\uff0c\u8c03\u7528 C \u4f7f\u7528\u7ebf\u7a0b\u6c60 2\uff0c\u7ebf\u7a0b\u6c60 1 \u6ee1\u4e86\u4e5f\u4e0d\u4f1a\u5f71\u54cd\u7ebf\u7a0b\u6c60 2 \u7684\u8bf7\u6c42\uff0c\u9694\u79bb\u6548\u679c\u597d\u4f46<strong>\u6d88\u8017\u8f83\u591a\u7ebf\u7a0b\u8d44\u6e90<\/strong>\u3002<\/li>\n<li><strong>\u4fe1\u53f7\u91cf\u9694\u79bb\uff08Semaphore Isolation\uff09<\/strong>\uff1a\u901a\u8fc7\u4fe1\u53f7\u91cf\uff08\u5e76\u53d1\u8ba1\u6570\u5668\uff09\u63a7\u5236\u5e76\u53d1\u8bf7\u6c42\u6570\uff0c\u8bf7\u6c42\u9700\u5148\u83b7\u53d6\u4fe1\u53f7\u91cf\u624d\u80fd\u53d1\u8d77\u8c03\u7528\uff0c\u8d85\u8fc7\u4fe1\u53f7\u91cf\u9608\u503c\u7684\u8bf7\u6c42\u76f4\u63a5\u8fdb\u5165 Fallback \u964d\u7ea7\u903b\u8f91\uff0c<strong>\u8d44\u6e90\u6d88\u8017\u5c0f<\/strong>\u4f46\u9694\u79bb\u6027\u4e0d\u5982\u7ebf\u7a0b\u6c60\u9694\u79bb\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u7194\u65ad\u4e0e\u964d\u7ea7\u7684\u5b9e\u73b0\u673a\u5236<\/h3>\n<ol start=\"6\">\n<li>\u4f7f\u7528 Hystrix \u65f6\uff0c\u9700<strong>\u7ee7\u627f <code>HystrixCommand<\/code><\/strong> \u7c7b\uff0c\u5c06\u5bf9\u5916\u90e8\u7cfb\u7edf\u7684\u8c03\u7528\u7ec6\u8282\u5c01\u88c5\u5728\u547d\u4ee4\u4e2d\uff08\u5178\u578b\u7684<strong>\u547d\u4ee4\u6a21\u5f0f<\/strong>\uff09\uff0c\u6bcf\u4e2a\u547d\u4ee4\u8fd0\u884c\u5728\u72ec\u7acb\u7684\u7ebf\u7a0b\u6c60\u4e2d\u3002<\/li>\n<li>Hystrix \u4f1a<strong>\u7edf\u8ba1\u6bcf\u4e2a\u4f9d\u8d56\u8c03\u7528\u7684\u6210\u529f\u3001\u5931\u8d25\u3001\u8d85\u65f6\u3001\u62d2\u7edd\u6b21\u6570<\/strong>\uff0c\u5f53<strong>\u9519\u8bef\u6bd4\u4f8b\u6216\u8bf7\u6c42\u91cf\u8fbe\u5230\u914d\u7f6e\u7684\u9608\u503c<\/strong>\u65f6\uff0c\u65ad\u8def\u5668\uff08Circuit Breaker\uff09<strong>\u6253\u5f00\uff08Open\uff09<\/strong>\uff0c\u540e\u7eed\u6240\u6709\u8bf7\u6c42\u76f4\u63a5\u8fdb\u5165 Fallback \u964d\u7ea7\u903b\u8f91\uff0c\u4e0d\u518d\u771f\u6b63\u8c03\u7528\u76ee\u6807\u670d\u52a1\u3002<\/li>\n<li>\u65ad\u8def\u5668\u6253\u5f00\u540e\uff0c\u7ecf\u8fc7\u914d\u7f6e\u7684\u65f6\u95f4\u7a97\u53e3\uff0cHystrix \u4f1a<strong>\u5141\u8bb8\u5c11\u91cf\u8bf7\u6c42\u901a\u8fc7\uff08\u534a\u5f00\u72b6\u6001\uff09<\/strong>\uff0c\u82e5\u8bf7\u6c42\u6210\u529f\u5219\u5173\u95ed\u65ad\u8def\u5668\u6062\u590d\u6b63\u5e38\uff0c\u82e5\u4ecd\u5931\u8d25\u5219\u7ee7\u7eed\u4fdd\u6301\u6253\u5f00\u72b6\u6001\u3002<\/li>\n<li><strong>\u7194\u65ad<\/strong>\u662f\u5bf9\u6545\u969c\u670d\u52a1\u7684\u5feb\u901f\u5207\u65ad\uff0c<strong>\u964d\u7ea7<\/strong>\u662f\u7194\u65ad\u540e\u8fd4\u56de\u9884\u8bbe\u7684\u53cb\u597d\u54cd\u5e94\uff08Fallback\uff09\uff0c\u4e24\u8005\u914d\u5408\u5b9e\u73b0\u670d\u52a1\u81ea\u6211\u4fdd\u62a4\u3002<\/li>\n<\/ol>\n<h2>89-springcloud\u6838\u5fc3\u7ec4\u4ef6\u53ca\u5176\u4f5c\u7528<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u670d\u52a1\u6ce8\u518c\u4e0e\u53d1\u73b0\uff08Eureka\uff09<\/h3>\n<ol>\n<li><strong>Eureka<\/strong> \u662f Spring Cloud \u4e2d\u7684\u670d\u52a1\u6ce8\u518c\u4e0e\u53d1\u73b0\u7ec4\u4ef6\uff0c\u6240\u6709\u5fae\u670d\u52a1\u8282\u70b9\u542f\u52a8\u65f6\u5411 Eureka Server \u6ce8\u518c\u81ea\u5df1\u7684 IP\u3001\u7aef\u53e3\u3001\u670d\u52a1\u540d\u7b49\u4fe1\u606f\u3002<\/li>\n<li>Eureka Server \u7ef4\u62a4\u4e00\u4e2a<strong>\u53cc\u5c42 Map<\/strong>\uff1a\u7b2c\u4e00\u5c42 key \u4e3a\u670d\u52a1\u540d\uff0c\u7b2c\u4e8c\u5c42 key \u4e3a\u5b9e\u4f8b ID\uff0cvalue \u4e3a\u8be5\u5b9e\u4f8b\u7684\u5730\u5740\u4fe1\u606f\u3002<\/li>\n<li>\u670d\u52a1\u8c03\u7528\u65b9\u901a\u8fc7<strong>\u670d\u52a1\u540d<\/strong>\u800c\u975e IP+\u7aef\u53e3\u8c03\u7528\u76ee\u6807\u670d\u52a1\uff0cEureka Client \u81ea\u52a8\u4ece\u6ce8\u518c\u4e2d\u5fc3\u83b7\u53d6\u76ee\u6807\u670d\u52a1\u7684\u5b9e\u9645\u5730\u5740\u3002<\/li>\n<li>Eureka Client \u4f1a<strong>\u672c\u5730\u7f13\u5b58<\/strong>\u670d\u52a1\u5217\u8868\uff0c\u5373\u4f7f Eureka Server \u5168\u90e8\u5b95\u673a\uff0c\u4ecd\u53ef\u4f7f\u7528\u672c\u5730\u7f13\u5b58\u7ee7\u7eed\u8c03\u7528\u3002<\/li>\n<li>Eureka Server \u5404\u8282\u70b9<strong>\u76f8\u4e92\u6ce8\u518c<\/strong>\uff0c\u53ea\u8981\u96c6\u7fa4\u4e2d\u81f3\u5c11\u6709\u4e00\u4e2a\u8282\u70b9\u5b58\u6d3b\uff0c\u6574\u4e2a\u96c6\u7fa4\u5c31\u80fd\u7ee7\u7eed\u63d0\u4f9b\u670d\u52a1\uff08<strong>AP \u8bbe\u8ba1\uff0c\u9ad8\u53ef\u7528\u4f18\u5148<\/strong>\uff09\u3002<\/li>\n<li>Eureka \u901a\u8fc7<strong>\u5fc3\u8df3\u673a\u5236<\/strong>\u76d1\u63a7\u670d\u52a1\u5065\u5eb7\u72b6\u6001\uff0c\u8d85\u65f6\u672a\u6536\u5230\u5fc3\u8df3\u7684\u670d\u52a1\u4f1a\u88ab\u81ea\u52a8\u4ece\u6ce8\u518c\u8868\u4e2d\u5254\u9664\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5ba2\u6237\u7aef\u8d1f\u8f7d\u5747\u8861\uff08Ribbon\uff09<\/h3>\n<ol start=\"7\">\n<li><strong>Ribbon<\/strong> \u662f Spring Cloud \u4e2d\u7684\u5ba2\u6237\u7aef\u8d1f\u8f7d\u5747\u8861\u7ec4\u4ef6\uff0c\u5f53\u8c03\u7528\u65b9\u4ece Eureka \u83b7\u53d6\u5230\u67d0\u670d\u52a1\u7684\u591a\u4e2a\u5b9e\u4f8b\u5730\u5740\u65f6\uff0cRibbon \u8d1f\u8d23\u4ece\u4e2d<strong>\u9009\u62e9\u4e00\u53f0<\/strong>\u53d1\u8d77\u8bf7\u6c42\u3002<\/li>\n<li>Ribbon \u652f\u6301\u591a\u79cd\u8d1f\u8f7d\u5747\u8861\u7b56\u7565\uff08\u8f6e\u8be2\u3001\u968f\u673a\u3001\u6743\u91cd\u7b49\uff09\uff0c\u4e14\u65e0\u9700\u5728\u4ee3\u7801\u4e2d\u786c\u7f16\u7801 IP \u548c\u7aef\u53e3\uff0c\u901a\u8fc7\u670d\u52a1\u540d\u8c03\u7528\u5373\u53ef\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u58f0\u660e\u5f0f\u670d\u52a1\u8c03\u7528\uff08Feign\uff09<\/h3>\n<ol start=\"9\">\n<li><strong>Feign<\/strong> \u662f\u57fa\u4e8e<strong>\u52a8\u6001\u4ee3\u7406<\/strong>\u7684\u58f0\u660e\u5f0f HTTP \u5ba2\u6237\u7aef\uff0c\u5f00\u53d1\u8005\u53ea\u9700\u5b9a\u4e49\u4e00\u4e2a\u63a5\u53e3\u5e76\u52a0\u4e0a <code>@FeignClient<\/code> \u6ce8\u89e3\uff0c\u5373\u53ef\u50cf\u8c03\u7528\u672c\u5730\u65b9\u6cd5\u4e00\u6837\u8c03\u7528\u8fdc\u7a0b\u670d\u52a1\u3002<\/li>\n<li>Feign \u5e95\u5c42\u5c01\u88c5\u4e86 Ribbon \u7684\u8d1f\u8f7d\u5747\u8861\u903b\u8f91\u548c HTTP \u8bf7\u6c42\u7ec6\u8282\uff0c\u5f00\u53d1\u8005\u65e0\u9700\u624b\u52a8\u7f16\u5199 <code>RestTemplate<\/code> \u8c03\u7528\u4ee3\u7801\uff0c\u5927\u5e45\u7b80\u5316\u670d\u52a1\u95f4\u8c03\u7528\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u65ad\u8def\u5668\uff08Hystrix\uff09<\/h3>\n<ol start=\"11\">\n<li><strong>Hystrix<\/strong> \u662f Spring Cloud \u4e2d\u7684\u65ad\u8def\u5668\u7ec4\u4ef6\uff0c\u7528\u4e8e\u5b9e\u73b0<strong>\u7194\u65ad<\/strong>\u3001<strong>\u964d\u7ea7<\/strong>\u548c<strong>\u8d44\u6e90\u9694\u79bb<\/strong>\uff0c\u9632\u6b62\u5fae\u670d\u52a1\u8c03\u7528\u94fe\u4e2d\u7684\u5355\u70b9\u6545\u969c\u5f15\u53d1<strong>\u670d\u52a1\u96ea\u5d29<\/strong>\u3002<\/li>\n<li>\u6bcf\u4e2a Hystrix Command \u8fd0\u884c\u5728<strong>\u72ec\u7acb\u7684\u7ebf\u7a0b\u6c60<\/strong>\u4e2d\uff08\u7ebf\u7a0b\u9694\u79bb\uff09\uff0c\u7edf\u8ba1\u63a5\u53e3\u7684\u8d85\u65f6\u3001\u5931\u8d25\u6b21\u6570\uff0c\u8fbe\u5230\u9608\u503c\u540e\u81ea\u52a8<strong>\u6253\u5f00\u65ad\u8def\u5668<\/strong>\uff0c\u540e\u7eed\u8bf7\u6c42\u76f4\u63a5\u8fdb\u5165 Fallback \u964d\u7ea7\u903b\u8f91\u3002<\/li>\n<li>\u964d\u7ea7\uff08Fallback\uff09\u53ef\u8fd4\u56de\u53cb\u597d\u7684\u63d0\u793a\u4fe1\u606f\uff0c\u6216\u5c06\u8bf7\u6c42\u8bb0\u5f55\u5230\u65e5\u5fd7\/MQ \u8fdb\u884c\u5f02\u6b65\u5904\u7406\uff0c\u5b9e\u73b0<strong>\u4f18\u96c5\u964d\u7ea7<\/strong>\uff0c\u907f\u514d\u76f4\u63a5\u62a5\u9519\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u670d\u52a1\u7f51\u5173\uff08Gateway \/ Zuul\uff09<\/h3>\n<ol start=\"14\">\n<li><strong>\u670d\u52a1\u7f51\u5173<\/strong>\u662f Spring Cloud \u4e2d\u7684\u7edf\u4e00\u5165\u53e3\u7ec4\u4ef6\uff0c\u6240\u6709\u5916\u90e8\u8bf7\u6c42\uff08\u5982\u524d\u7aef\u3001App\uff09\u901a\u8fc7\u7f51\u5173\u8fdb\u5165\u5fae\u670d\u52a1\u7cfb\u7edf\u3002<\/li>\n<li>\u7f51\u5173\u672c\u8eab\u4e5f\u4f5c\u4e3a<strong>\u4e00\u4e2a\u5fae\u670d\u52a1\u8282\u70b9\u6ce8\u518c\u5230 Eureka<\/strong>\uff0c\u56e0\u6b64\u5916\u90e8\u8bf7\u6c42\u8fdb\u5165\u7f51\u5173\u540e\uff0c\u7f51\u5173\u53ef\u4ee5\u8d70 Ribbon + Feign + Hystrix \u7b49\u5b8c\u6574\u7684\u5fae\u670d\u52a1\u8c03\u7528\u94fe\u8def\u3002<\/li>\n<li>\u7f51\u5173\u89e3\u51b3\u4e86<strong>\u975e\u5fae\u670d\u52a1\u8282\u70b9\uff08\u5982\u524d\u7aef\u5e94\u7528\uff09\u65e0\u6cd5\u76f4\u63a5\u4f7f\u7528 Spring Cloud \u670d\u52a1\u6cbb\u7406\u80fd\u529b<\/strong>\u7684\u95ee\u9898\uff0c\u7edf\u4e00\u4e86\u5185\u5916\u8bf7\u6c42\u7684\u8def\u7531\u4e0e\u7ba1\u7406\u3002<\/li>\n<\/ol>\n<h2>90-Dubbo\u7684\u6574\u4f53\u67b6\u6784\u8bbe\u8ba1\u53ca\u5206\u5c42<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Dubbo \u7684\u4e94\u4e2a\u6838\u5fc3\u89d2\u8272<\/h3>\n<ol>\n<li><strong>\u6ce8\u518c\u4e2d\u5fc3\uff08Registry\uff09<\/strong>\uff1a\u6240\u6709\u670d\u52a1\u63d0\u4f9b\u8005\u548c\u6d88\u8d39\u8005\u5728\u6b64\u6ce8\u518c\u548c\u53d1\u73b0\u670d\u52a1\u5730\u5740\uff08\u901a\u5e38\u4f7f\u7528 ZooKeeper\uff09\u3002<\/li>\n<li><strong>\u670d\u52a1\u63d0\u4f9b\u8005\uff08Provider\uff09<\/strong>\uff1a\u66b4\u9732\u670d\u52a1\u7684\u8282\u70b9\uff0c\u542f\u52a8\u65f6\u5c06\u81ea\u5df1\u7684\u63a5\u53e3\u4fe1\u606f\uff08\u670d\u52a1\u540d\u3001IP\u3001\u7aef\u53e3\u7b49\uff09\u6ce8\u518c\u5230\u6ce8\u518c\u4e2d\u5fc3\u3002<\/li>\n<li><strong>\u670d\u52a1\u6d88\u8d39\u8005\uff08Consumer\uff09<\/strong>\uff1a\u8c03\u7528\u8fdc\u7a0b\u670d\u52a1\u7684\u8282\u70b9\uff0c\u542f\u52a8\u65f6\u4ece\u6ce8\u518c\u4e2d\u5fc3\u62c9\u53d6\u670d\u52a1\u5217\u8868\uff0c\u53d1\u8d77\u8fdc\u7a0b\u8c03\u7528\u3002<\/li>\n<li><strong>\u76d1\u63a7\u4e2d\u5fc3\uff08Monitor\uff09<\/strong>\uff1a\u7edf\u8ba1\u670d\u52a1\u7684\u8c03\u7528\u6b21\u6570\u548c\u8c03\u7528\u65f6\u95f4\uff0c\u7528\u4e8e\u76d1\u63a7\u548c\u544a\u8b66\u3002<\/li>\n<li><strong>\u5bb9\u5668\uff08Container\uff09<\/strong>\uff1a\u670d\u52a1\u8fd0\u884c\u7684\u5bb9\u5668\uff0c\u8d1f\u8d23\u52a0\u8f7d\u548c\u542f\u52a8\u670d\u52a1\u63d0\u4f9b\u8005\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Dubbo \u7684\u8c03\u7528\u6d41\u7a0b<\/h3>\n<ol start=\"6\">\n<li><strong>\u542f\u52a8\u9636\u6bb5<\/strong>\uff1a\u5bb9\u5668\u542f\u52a8\u5e76\u52a0\u8f7d Provider\uff0cProvider \u542f\u52a8\u540e\u5411\u6ce8\u518c\u4e2d\u5fc3\u6ce8\u518c\u81ea\u5df1\u63d0\u4f9b\u7684\u670d\u52a1\uff08\u4ee5<strong>\u63a5\u53e3<\/strong>\u4e3a\u670d\u52a1\u7ef4\u5ea6\uff09\u3002<\/li>\n<li><strong>\u670d\u52a1\u53d1\u73b0<\/strong>\uff1aConsumer \u542f\u52a8\u65f6\u5411\u6ce8\u518c\u4e2d\u5fc3\u62c9\u53d6\u670d\u52a1\u5217\u8868\uff0c\u83b7\u53d6 Provider \u7684\u5730\u5740\u4fe1\u606f\u3002<\/li>\n<li><strong>\u5fc3\u8df3\u4e0e\u53d8\u66f4\u901a\u77e5<\/strong>\uff1aProvider \u4e0e\u6ce8\u518c\u4e2d\u5fc3\u4e4b\u95f4\u7ef4\u6301<strong>\u957f\u8fde\u63a5\u5fc3\u8df3<\/strong>\uff0c\u8d85\u65f6\u672a\u54cd\u5e94\u5219 Provider \u88ab\u5254\u9664\uff1b\u6ce8\u518c\u4e2d\u5fc3\u901a\u8fc7\u957f\u8fde\u63a5\u5c06\u670d\u52a1\u5217\u8868\u53d8\u66f4\uff08\u65b0\u589e\/\u4e0b\u7ebf\uff09\u5b9e\u65f6\u63a8\u9001\u7ed9 Consumer\u3002<\/li>\n<li><strong>\u8d1f\u8f7d\u5747\u8861\u8c03\u7528<\/strong>\uff1aConsumer \u4ece\u6ce8\u518c\u4e2d\u5fc3\u83b7\u53d6\u67d0\u670d\u52a1\u7684\u591a\u4e2a\u5b9e\u4f8b\u540e\uff0c\u901a\u8fc7<strong>\u8d1f\u8f7d\u5747\u8861\u7b97\u6cd5<\/strong>\uff08\u8f6e\u8be2\u3001\u52a0\u6743\u8f6e\u8be2\u7b49\uff09\u9009\u62e9\u5176\u4e2d\u4e00\u4e2a\u5b9e\u4f8b\u53d1\u8d77 RPC \u8c03\u7528\u3002<\/li>\n<li><strong>\u76d1\u63a7\u4e0a\u62a5<\/strong>\uff1aConsumer \u5c06\u6bcf\u6b21\u8c03\u7528\u7684\u6b21\u6570\u548c\u8017\u65f6\u4fe1\u606f\u4e0a\u62a5\u7ed9 Monitor \u76d1\u63a7\u4e2d\u5fc3\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Dubbo \u7684\u5206\u5c42\u67b6\u6784\uff0810\u5c42\uff09<\/h3>\n<ol start=\"11\">\n<li><strong>\u63a5\u53e3\u670d\u52a1\u5c42\uff08Service\uff09<\/strong>\uff1a\u9762\u5411\u5f00\u53d1\u8005\u7684\u4e1a\u52a1\u63a5\u53e3\u548c\u5b9e\u73b0\u5c42\uff08\u5373\u4e1a\u52a1\u4ee3\u7801\uff09\u3002<\/li>\n<li><strong>\u914d\u7f6e\u5c42\uff08Config\uff09<\/strong>\uff1a\u4ee5 <code>ServiceConfig<\/code> \u548c <code>ReferenceConfig<\/code> \u4e3a\u6838\u5fc3\uff0c\u7ba1\u7406 Dubbo \u7684\u914d\u7f6e\u4fe1\u606f\uff0c\u53ef\u901a\u8fc7 ZooKeeper \u5b9e\u73b0\u914d\u7f6e\u4e2d\u5fc3\u529f\u80fd\u3002<\/li>\n<li><strong>\u670d\u52a1\u4ee3\u7406\u5c42\uff08Proxy\uff09<\/strong>\uff1a\u4e3a\u670d\u52a1\u63d0\u4f9b\u8005\u548c\u6d88\u8d39\u8005\u751f\u6210<strong>\u52a8\u6001\u4ee3\u7406\u5bf9\u8c61<\/strong>\uff0c\u5c01\u88c5 RPC \u8c03\u7528\u7ec6\u8282\uff0c\u8ba9\u8fdc\u7a0b\u8c03\u7528\u50cf\u672c\u5730\u8c03\u7528\u4e00\u6837\u900f\u660e\u3002<\/li>\n<li><strong>\u670d\u52a1\u6ce8\u518c\u5c42\uff08Registry\uff09<\/strong>\uff1a\u8d1f\u8d23\u670d\u52a1\u7684\u6ce8\u518c\u4e0e\u53d1\u73b0\uff08\u5bf9\u5e94\u6ce8\u518c\u4e2d\u5fc3\u89d2\u8272\uff09\u3002<\/li>\n<li><strong>\u8def\u7531\u5c42\uff08Cluster\/Router\uff09<\/strong>\uff1a\u8d1f\u8d23\u8d1f\u8f7d\u5747\u8861\uff0c\u4ece\u6ce8\u518c\u4e2d\u5fc3\u83b7\u53d6\u670d\u52a1\u5217\u8868\u540e\uff0c\u6839\u636e\u7b97\u6cd5\u9009\u62e9\u76ee\u6807\u5b9e\u4f8b\u3002<\/li>\n<li><strong>\u76d1\u63a7\u5c42\uff08Monitor\uff09<\/strong>\uff1a\u7edf\u8ba1\u548c\u4e0a\u62a5 RPC \u8c03\u7528\u6b21\u6570\u53ca\u8017\u65f6\uff08\u5bf9\u5e94\u76d1\u63a7\u4e2d\u5fc3\u89d2\u8272\uff09\u3002<\/li>\n<li><strong>\u8fdc\u7a0b\u8c03\u7528\u5c42\uff08Protocol\uff09<\/strong>\uff1a\u5c01\u88c5 RPC \u534f\u8bae\u7684\u8c03\u7528\u7ec6\u8282\uff0cDubbo \u9ed8\u8ba4\u57fa\u4e8e TCP \u534f\u8bae\u5b9e\u73b0\u3002<\/li>\n<li><strong>\u4fe1\u606f\u4ea4\u6362\u5c42\uff08Exchange\uff09<\/strong>\uff1a\u5c01\u88c5\u8bf7\u6c42-\u54cd\u5e94\u6a21\u5f0f\uff0c\u652f\u6301\u540c\u6b65\u8f6c\u5f02\u6b65\uff0c\u8d1f\u8d23\u4fe1\u606f\u7684\u5b9e\u9645\u4ea4\u6362\u3002<\/li>\n<li><strong>\u7f51\u7edc\u4f20\u8f93\u5c42\uff08Transport\uff09<\/strong>\uff1a\u62bd\u8c61\u4e86 Netty \u548c Mina \u7b49\u7f51\u7edc\u901a\u4fe1\u6846\u67b6\uff0c\u5bf9\u4e0a\u5c42\u63d0\u4f9b\u7edf\u4e00\u63a5\u53e3\uff0c\u4e0a\u5c42\u4ee3\u7801\u65e0\u611f\u77e5\u3002<\/li>\n<li><strong>\u6570\u636e\u5e8f\u5217\u5316\u5c42\uff08Serialize\uff09<\/strong>\uff1a\u5c06 Java \u5bf9\u8c61\u5e8f\u5217\u5316\u4e3a\u4f20\u8f93\u683c\u5f0f\uff08\u5982 JSON\u3001Hessian \u7b49\uff09\uff0c\u53ef\u7075\u6d3b\u5207\u6362\uff0c\u5bf9\u4e0a\u5c42\u900f\u660e\u3002<\/li>\n<\/ol>\n<h2>91-\u7b80\u8ff0RabbitMQ\u7684\u67b6\u6784\u8bbe\u8ba1<\/h2>\n<hr \/>\n<h3>\u4e00\u3001RabbitMQ \u7684\u6838\u5fc3\u89d2\u8272<\/h3>\n<ol>\n<li><strong>Broker<\/strong>\uff1aRabbitMQ \u7684\u670d\u52a1\u8282\u70b9\uff08\u6d88\u606f\u4e2d\u95f4\u4ef6\u670d\u52a1\u5668\uff09\uff0c\u8d1f\u8d23\u63a5\u6536\u3001\u5b58\u50a8\u548c\u8f6c\u53d1\u6d88\u606f\u3002<\/li>\n<li><strong>Producer\uff08\u751f\u4ea7\u8005\uff09<\/strong>\uff1a\u6d88\u606f\u7684\u53d1\u9001\u65b9\uff0c\u5c06\u6d88\u606f\u53d1\u9001\u5230\u4ea4\u6362\u673a\uff08Exchange\uff09\uff0c\u800c\u975e\u76f4\u63a5\u53d1\u9001\u5230\u961f\u5217\u3002<\/li>\n<li><strong>Consumer\uff08\u6d88\u8d39\u8005\uff09<\/strong>\uff1a\u6d88\u606f\u7684\u63a5\u6536\u65b9\uff0c\u4ece\u961f\u5217\u4e2d\u8ba2\u9605\u5e76\u6d88\u8d39\u6d88\u606f\u3002<\/li>\n<li><strong>Queue\uff08\u961f\u5217\uff09<\/strong>\uff1aRabbitMQ \u5185\u90e8\u7528\u4e8e<strong>\u5b58\u50a8\u6d88\u606f<\/strong>\u7684\u5bf9\u8c61\uff0c\u7531\u751f\u4ea7\u8005\u6216\u7ba1\u7406\u5458\u521b\u5efa\uff0c\u591a\u4e2a\u6d88\u8d39\u8005\u53ef\u4ee5\u8ba2\u9605\u540c\u4e00\u4e2a\u961f\u5217\u3002<\/li>\n<li><strong>Exchange\uff08\u4ea4\u6362\u673a\uff09<\/strong>\uff1a\u6d88\u606f\u8def\u7531\u7684\u6838\u5fc3\u7ec4\u4ef6\uff0c\u751f\u4ea7\u8005\u5c06\u6d88\u606f\u53d1\u9001\u5230\u4ea4\u6362\u673a\uff0c\u4ea4\u6362\u673a\u6839\u636e\u8def\u7531\u89c4\u5219\u5c06\u6d88\u606f\u5206\u53d1\u5230\u4e00\u4e2a\u6216\u591a\u4e2a\u961f\u5217\u3002<\/li>\n<li><strong>Binding\uff08\u7ed1\u5b9a\uff09<\/strong>\uff1aExchange \u548c Queue \u4e4b\u95f4\u7684\u5173\u8054\u5173\u7cfb\uff08\u591a\u5bf9\u591a\uff09\uff0c\u901a\u8fc7 <strong>Binding Key<\/strong> \u5efa\u7acb\u6620\u5c04\u3002<\/li>\n<li><strong>Routing Key\uff08\u8def\u7531\u952e\uff09<\/strong>\uff1a\u751f\u4ea7\u8005\u5728\u53d1\u9001\u6d88\u606f\u65f6\u6307\u5b9a\u7684\u4e00\u4e2a\u5b57\u7b26\u4e32\uff0cExchange \u6839\u636e Routing Key \u4e0e Binding Key \u7684\u5339\u914d\u89c4\u5219\u51b3\u5b9a\u5c06\u6d88\u606f\u8def\u7531\u5230\u54ea\u4e9b\u961f\u5217\u3002<\/li>\n<li><strong>Channel\uff08\u4fe1\u9053\uff09<\/strong>\uff1a\u5728 TCP \u957f\u8fde\u63a5\u4e2d\u590d\u7528\u7684\u865a\u62df\u8fde\u63a5\uff08\u7c7b\u4f3c\u5149\u7f06\u4e2d\u7684\u5149\u7ea4\uff09\uff0c\u4e00\u4e2a TCP \u8fde\u63a5\u53ef\u5305\u542b\u591a\u4e2a Channel\uff0cChannel \u4e4b\u95f4\u4e92\u76f8\u9694\u79bb\uff0c\u51cf\u5c11\u9891\u7e41\u5efa\u7acb TCP \u8fde\u63a5\u7684\u5f00\u9500\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001RabbitMQ \u7684\u6d88\u606f\u6d41\u8f6c\u6d41\u7a0b<\/h3>\n<ol start=\"9\">\n<li>\u751f\u4ea7\u8005\u5c06\u6d88\u606f\u53d1\u9001\u5230 Exchange\uff0c\u5e76\u6307\u5b9a Routing Key\uff1bExchange \u6839\u636e\u81ea\u8eab\u7c7b\u578b\u548c Routing Key \u5339\u914d Binding Key\uff0c\u5c06\u6d88\u606f\u8def\u7531\u5230\u4e00\u4e2a\u6216\u591a\u4e2a Queue\uff1b\u6d88\u8d39\u8005\u4ece Queue \u4e2d\u62c9\u53d6\u5e76\u6d88\u8d39\u6d88\u606f\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u56db\u79cd\u4ea4\u6362\u673a\u7c7b\u578b\u53ca\u8def\u7531\u89c4\u5219<\/h3>\n<ol start=\"10\">\n<li><strong>Fanout\uff08\u6247\u5f62\u4ea4\u6362\u673a\uff09<\/strong>\uff1a<strong>\u5ffd\u7565 Routing Key<\/strong>\uff0c\u5c06\u6d88\u606f\u5e7f\u64ad\u5230\u6240\u6709\u4e0e\u8be5 Exchange \u7ed1\u5b9a\u7684 Queue\uff08\u4e00\u5bf9\u591a\u5e7f\u64ad\uff09\u3002<\/li>\n<li><strong>Direct\uff08\u76f4\u8fde\u4ea4\u6362\u673a\uff09<\/strong>\uff1aRouting Key \u5fc5\u987b\u4e0e Binding Key <strong>\u5b8c\u5168\u5339\u914d<\/strong>\uff0c\u6d88\u606f\u88ab\u8def\u7531\u5230\u552f\u4e00\u5339\u914d\u7684 Queue\uff08\u70b9\u5bf9\u70b9\uff09\u3002<\/li>\n<li><strong>Topic\uff08\u4e3b\u9898\u4ea4\u6362\u673a\uff09<\/strong>\uff1a\u652f\u6301\u901a\u914d\u7b26\u5339\u914d\uff08<code>*<\/code> \u5339\u914d\u4e00\u4e2a\u5355\u8bcd\uff0c<code>#<\/code> \u5339\u914d\u96f6\u6216\u591a\u4e2a\u5355\u8bcd\uff09\uff0c\u4e00\u4e2a Routing Key \u53ef\u5339\u914d\u591a\u4e2a Binding Key\uff0c\u5b9e\u73b0<strong>\u4e00\u5bf9\u591a\u6a21\u5f0f\u5339\u914d\u5e7f\u64ad<\/strong>\u3002<\/li>\n<li><strong>Headers\uff08\u5934\u4ea4\u6362\u673a\uff09<\/strong>\uff1a\u6839\u636e\u6d88\u606f\u7684\u5934\u90e8\u5c5e\u6027\uff08Headers\uff09\u800c\u975e Routing Key \u8fdb\u884c\u5339\u914d\uff0c\u6027\u80fd\u8f83\u5dee\uff0c\u4f7f\u7528\u8f83\u5c11\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u5173\u952e\u7279\u6027\u603b\u7ed3<\/h3>\n<ol start=\"14\">\n<li><strong>\u961f\u5217\u6d88\u606f\u5206\u53d1<\/strong>\uff1a\u591a\u4e2a\u6d88\u8d39\u8005\u8ba2\u9605\u540c\u4e00\u4e2a Queue \u65f6\uff0c\u6d88\u606f\u91c7\u7528<strong>\u8f6e\u8be2\uff08\u8d1f\u8f7d\u5747\u8861\uff09<\/strong>\u65b9\u5f0f\u5206\u53d1\u7ed9\u5176\u4e2d\u4e00\u4e2a\u6d88\u8d39\u8005\uff0c\u4e0d\u4f1a\u5e7f\u64ad\u7ed9\u6240\u6709\u6d88\u8d39\u8005\uff08\u70b9\u5bf9\u70b9\u6d88\u8d39\u6a21\u5f0f\uff09\u3002<\/li>\n<li><strong>\u5e7f\u64ad\u5b9e\u73b0<\/strong>\uff1a\u8981\u5b9e\u73b0\u6d88\u606f\u5e7f\u64ad\u7ed9\u591a\u4e2a\u6d88\u8d39\u8005\uff0c\u9700\u901a\u8fc7 Exchange \u5c06\u540c\u4e00\u6761\u6d88\u606f\u8def\u7531\u5230<strong>\u591a\u4e2a\u4e0d\u540c Queue<\/strong>\uff0c\u6bcf\u4e2a\u6d88\u8d39\u8005\u76d1\u542c\u4e0d\u540c\u7684 Queue\u3002<\/li>\n<li>RabbitMQ \u57fa\u4e8e <strong>AMQP \u534f\u8bae\uff08\u9ad8\u7ea7\u6d88\u606f\u961f\u5217\u534f\u8bae\uff09<\/strong> \u5b9e\u73b0\uff0cExchange\u3001Queue\u3001Binding\u3001Channel \u7b49\u90fd\u662f AMQP \u534f\u8bae\u5b9a\u4e49\u7684\u6807\u51c6\u6982\u5ff5\u3002<\/li>\n<\/ol>\n<h2>92-RabbitMQ\u5982\u4f55\u786e\u4fdd\u6d88\u606f\u53d1\u9001? \u6d88\u606f\u63a5\u6536?<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u53d1\u9001\u65b9\u786e\u8ba4\u673a\u5236\uff08Producer Confirm\uff09<\/h3>\n<ol>\n<li>\u751f\u4ea7\u8005\u5c06<strong>\u4fe1\u9053\uff08Channel\uff09\u8bbe\u7f6e\u4e3a <code>confirm<\/code> \u6a21\u5f0f<\/strong>\u540e\uff0c\u8be5\u4fe1\u9053\u4e0a\u53d1\u5e03\u7684\u6bcf\u6761\u6d88\u606f\u90fd\u4f1a\u88ab\u5206\u914d\u4e00\u4e2a<strong>\u552f\u4e00 ID<\/strong>\u3002<\/li>\n<li>\u6d88\u606f\u6210\u529f\u88ab\u6295\u9012\u5230\u961f\u5217\uff08\u82e5\u4e3a\u6301\u4e45\u5316\u6d88\u606f\u8fd8\u9700\u5199\u5165\u78c1\u76d8\uff09\u540e\uff0cRabbitMQ \u4f1a\u901a\u8fc7\u56de\u8c03 <strong><code>ConfirmCallback<\/code> \u63a5\u53e3<\/strong> \u7684 <code>confirm()<\/code> \u65b9\u6cd5\uff0c\u5411\u751f\u4ea7\u8005\u53d1\u9001\u786e\u8ba4\uff08ACK\uff09\uff0c\u5e76\u643a\u5e26\u8be5\u6d88\u606f\u7684\u552f\u4e00 ID\u3002<\/li>\n<li>\u82e5\u6d88\u606f\u56e0\u5185\u90e8\u9519\u8bef\u3001\u8def\u7531\u5931\u8d25\u7b49\u539f\u56e0\u672a\u80fd\u6210\u529f\u6295\u9012\uff0cRabbitMQ \u4f1a\u901a\u8fc7\u56de\u8c03 <strong><code>ReturnCallback<\/code> \u63a5\u53e3<\/strong> \u53d1\u9001\u672a\u786e\u8ba4\uff08NACK\uff09\u901a\u77e5\u7ed9\u751f\u4ea7\u8005\u3002<\/li>\n<li>\u751f\u4ea7\u8005\u7684\u786e\u8ba4\u673a\u5236\u662f<strong>\u5f02\u6b65<\/strong>\u7684\uff1a\u751f\u4ea7\u8005\u53d1\u9001\u6d88\u606f\u540e\u65e0\u9700\u7b49\u5f85\u786e\u8ba4\u5373\u53ef\u7ee7\u7eed\u53d1\u9001\u4e0b\u4e00\u6761\u6d88\u606f\uff0cACK\/NACK \u56de\u8c03\u5728\u540e\u7eed\u5f02\u6b65\u89e6\u53d1\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u6d88\u8d39\u65b9\u786e\u8ba4\u673a\u5236\uff08Consumer Ack\uff09<\/h3>\n<ol start=\"5\">\n<li>\u6d88\u8d39\u8005\u901a\u8fc7\u58f0\u660e\u961f\u5217\u65f6\u8bbe\u7f6e <strong><code>autoAck<\/code>\uff08\u81ea\u52a8\u786e\u8ba4\uff09<\/strong> \u53c2\u6570\u63a7\u5236\u786e\u8ba4\u884c\u4e3a\uff1a<code>autoAck=true<\/code> \u8868\u793a\u6d88\u606f\u6295\u9012\u7ed9\u6d88\u8d39\u8005\u540e<strong>\u7acb\u5373\u81ea\u52a8\u786e\u8ba4\u5e76\u5220\u9664<\/strong>\uff1b<code>autoAck=false<\/code> \u8868\u793a<strong>\u624b\u52a8\u786e\u8ba4<\/strong>\uff0c\u6d88\u8d39\u8005\u9700\u663e\u5f0f\u8fd4\u56de ACK \u540e RabbitMQ \u624d\u4f1a\u5220\u9664\u6d88\u606f\u3002<\/li>\n<li>\u624b\u52a8\u786e\u8ba4\u6a21\u5f0f\u4e0b\uff0c\u82e5\u6d88\u8d39\u8005\u4e0d\u8fd4\u56de ACK\uff0cRabbitMQ <strong>\u4e0d\u4f1a\u7ee7\u7eed\u6295\u9012\u4e0b\u4e00\u6761\u6d88\u606f<\/strong>\u7ed9\u8be5\u6d88\u8d39\u8005\uff08\u76f8\u5f53\u4e8e\u5b9e\u73b0\u4e86<strong>\u6d88\u8d39\u7aef\u9650\u6d41<\/strong>\uff09\uff0c\u4e14 RabbitMQ \u5bf9\u6b64\u6ca1\u6709\u8d85\u65f6\u673a\u5236\u3002<\/li>\n<li>\u624b\u52a8\u786e\u8ba4\u6a21\u5f0f\u9002\u7528\u4e8e\u9700\u8981\u4fdd\u8bc1\u4e1a\u52a1\u6700\u7ec8\u4e00\u81f4\u6027\u7684\u573a\u666f\uff08\u5982\u7ed3\u5408 Spring \u4e8b\u52a1\uff09\uff1a\u82e5\u4e1a\u52a1\u903b\u8f91\u6267\u884c\u5931\u8d25\u5e76\u56de\u6eda\uff0c\u6d88\u606f\u4e0d\u5e94\u88ab\u786e\u8ba4\u5220\u9664\uff0c\u9700\u4fdd\u8bc1\u4e8b\u52a1\u4e0e ACK \u7684\u4e00\u81f4\u6027\u3002<\/li>\n<li>\u82e5\u6d88\u8d39\u8005\u672a\u8fd4\u56de ACK \u4f46<strong>\u8fde\u63a5\u65ad\u5f00<\/strong>\uff0cRabbitMQ \u4f1a\u8ba4\u4e3a\u8be5\u6d88\u8d39\u8005\u5df2\u5b95\u673a\uff0c\u5c06\u6d88\u606f<strong>\u91cd\u65b0\u6295\u9012\u7ed9\u5176\u4ed6\u6d88\u8d39\u8005<\/strong>\uff0c\u6b64\u65f6\u53ef\u80fd\u4ea7\u751f<strong>\u91cd\u590d\u6d88\u8d39<\/strong>\u3002<\/li>\n<li>\u91cd\u590d\u6d88\u8d39\u573a\u666f\u4e0b\uff0cRabbitMQ \u672c\u8eab\u65e0\u6cd5\u4fdd\u8bc1\u6570\u636e\u6700\u7ec8\u4e00\u81f4\u6027\uff0c\u9700\u7531<strong>\u4e1a\u52a1\u65b9\u901a\u8fc7\u5e42\u7b49\u6027\u8bbe\u8ba1<\/strong>\uff08\u5982\u6839\u636e\u6d88\u606f ID \u53bb\u91cd\uff09\u6765\u4fdd\u8bc1\u6570\u636e\u6700\u7ec8\u4e00\u81f4\u3002<\/li>\n<\/ol>\n<h2>93-Rabbitmq\u4e8b\u52a1\u6d88\u606f<\/h2>\n<hr \/>\n<h3>\u4e00\u3001RabbitMQ \u4e8b\u52a1\u6d88\u606f\u7684\u6982\u5ff5\u4e0e\u9002\u7528\u573a\u666f<\/h3>\n<ol>\n<li>RabbitMQ \u7684\u4e8b\u52a1\u6d88\u606f\uff08\u901a\u8fc7 <code>txSelect()<\/code>\u3001<code>txCommit()<\/code>\u3001<code>txRollback()<\/code> \u5b9e\u73b0\uff09\u53ef\u4fdd\u8bc1<strong>\u6d88\u606f\u53d1\u9001\u4e0e\u751f\u4ea7\u8005\u672c\u5730\u4e1a\u52a1\u903b\u8f91\u5728\u540c\u4e00\u4e2a\u4e8b\u52a1\u4e2d<\/strong>\uff1a\u82e5\u672c\u5730\u903b\u8f91\u5931\u8d25\u56de\u6eda\uff0c\u5df2\u53d1\u9001\u7684\u6d88\u606f\u4e5f\u53ef\u88ab\u56de\u6eda\u64a4\u56de\u3002<\/li>\n<li>\u4e8b\u52a1\u6d88\u606f\u786e\u4fdd\u4e86\u751f\u4ea7\u8005\u7aef\u7684<strong>\u539f\u5b50\u6027<\/strong>\uff1a\u6d88\u606f\u53d1\u9001\u6210\u529f\u4e0e\u5426\u4e0e\u672c\u5730\u4e1a\u52a1\u6267\u884c\u7ed3\u679c\u4fdd\u6301\u4e00\u81f4\uff0c\u9002\u7528\u4e8e\u9700\u8981\u4e25\u683c ACID \u4fdd\u8bc1\u7684\u573a\u666f\uff08\u5982\u6d88\u606f\u53d1\u51fa\u540e\u6d88\u8d39\u8005\u53ef\u80fd\u7acb\u5373\u56de\u8c03\u67e5\u8be2\u751f\u4ea7\u8005\u6570\u636e\uff0c\u5fc5\u987b\u4fdd\u8bc1\u6570\u636e\u4e00\u81f4\u6027\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001RabbitMQ \u4e8b\u52a1\u6d88\u606f\u7684\u5b9e\u73b0\u539f\u7406<\/h3>\n<ol start=\"3\">\n<li>\u5f00\u542f\u4e8b\u52a1\u540e\uff0c\u751f\u4ea7\u8005\u53d1\u9001\u7684\u6d88\u606f<strong>\u4e0d\u4f1a\u76f4\u63a5\u8fdb\u5165\u76ee\u6807\u961f\u5217<\/strong>\uff0c\u800c\u662f\u5148\u5b58\u5165\u4e00\u4e2a<strong>\u4e34\u65f6\u961f\u5217<\/strong>\uff08\u4e8b\u52a1\u961f\u5217\uff09\uff0c\u6d88\u8d39\u8005\u6b64\u65f6\u65e0\u6cd5\u6d88\u8d39\u5230\u8fd9\u4e9b\u6d88\u606f\u3002<\/li>\n<li>\u53ea\u6709\u6267\u884c <code>txCommit()<\/code> \u63d0\u4ea4\u4e8b\u52a1\u540e\uff0cRabbitMQ \u624d\u4f1a\u5c06\u6d88\u606f\u4ece\u4e34\u65f6\u961f\u5217<strong>\u771f\u6b63\u79fb\u52a8\u5230\u76ee\u6807\u961f\u5217<\/strong>\uff0c\u6d88\u8d39\u8005\u624d\u80fd\u6d88\u8d39\u5230\u8be5\u6d88\u606f\u3002<\/li>\n<li>\u82e5\u6267\u884c <code>txRollback()<\/code> \u56de\u6eda\u4e8b\u52a1\uff0c\u4e34\u65f6\u961f\u5217\u4e2d\u7684\u6d88\u606f\u88ab\u4e22\u5f03\uff0c\u76ee\u6807\u961f\u5217\u4e2d\u4e0d\u4f1a\u51fa\u73b0\u8be5\u6d88\u606f\uff0c\u5b9e\u73b0\u4e86\u6d88\u606f\u7684&#8221;\u64a4\u56de&#8221;\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u4e8b\u52a1\u6d88\u606f vs Confirm \u786e\u8ba4\u673a\u5236\uff08\u6027\u80fd\u5bf9\u6bd4\uff09<\/h3>\n<ol start=\"6\">\n<li><strong>Confirm \u6a21\u5f0f\uff08\u5f02\u6b65\u786e\u8ba4\uff09<\/strong>\uff1a\u6d88\u606f\u53d1\u9001\u540e\u751f\u4ea7\u8005\u65e0\u9700\u7b49\u5f85\u786e\u8ba4\u5373\u53ef\u7ee7\u7eed\u53d1\u9001\uff0cRabbitMQ \u5f02\u6b65\u56de\u8c03\u901a\u77e5\u7ed3\u679c\uff0c\u6027\u80fd\u8fdc\u9ad8\u4e8e\u4e8b\u52a1\u6d88\u606f\u3002<\/li>\n<li><strong>\u4e8b\u52a1\u6d88\u606f<\/strong>\uff1a\u6bcf\u6b21\u5f00\u542f\u4e8b\u52a1\u3001\u53d1\u9001\u6d88\u606f\u3001\u63d0\u4ea4\/\u56de\u6eda\u90fd\u9700\u8981\u4e0e\u670d\u52a1\u7aef\u901a\u4fe1\uff0c<strong>\u8fde\u63a5\u6b21\u6570\u591a\u3001\u6027\u80fd\u6781\u4f4e<\/strong>\uff0c\u541e\u5410\u91cf\u53ef\u80fd\u4e0b\u964d\u6570\u500d\u751a\u81f3\u6570\u5341\u500d\u3002<\/li>\n<li>\u5728\u4e24\u8005\u90fd\u53ef\u6ee1\u8db3\u4e1a\u52a1\u9700\u6c42\u7684\u573a\u666f\u4e0b\uff0c\u5e94<strong>\u4f18\u5148\u9009\u62e9 Confirm \u6a21\u5f0f<\/strong>\uff08\u9ad8\u6027\u80fd\uff09\u800c\u975e\u4e8b\u52a1\u6d88\u606f\uff08\u4f4e\u6027\u80fd\uff09\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u4e8b\u52a1\u6d88\u606f\u4e0e\u6d88\u8d39\u7aef\u624b\u52a8 ACK \u7684\u7ed3\u5408<\/h3>\n<ol start=\"9\">\n<li>\u6d88\u8d39\u7aef\u8bbe\u7f6e <code>autoAck=false<\/code>\uff08\u624b\u52a8\u786e\u8ba4\uff09\u65f6\uff0c\u53ef\u4ee5\u5728\u4e1a\u52a1\u903b\u8f91\u4e2d\u540c\u65f6\u5f00\u542f\u672c\u5730\u4e8b\u52a1\uff0c\u53ea\u6709\u5f53<strong>\u4e8b\u52a1\u63d0\u4ea4\u6210\u529f<\/strong>\u540e\uff0cRabbitMQ \u624d\u4f1a\u771f\u6b63\u786e\u8ba4\u5e76\u5220\u9664\u6d88\u606f\u3002<\/li>\n<li>\u82e5\u6d88\u8d39\u7aef\u4e8b\u52a1\u56de\u6eda\uff0c\u5373\u4f7f\u4ee3\u7801\u4e2d\u8c03\u7528\u4e86 <code>basicAck()<\/code>\uff0cRabbitMQ \u4e5f\u4e0d\u4f1a\u5220\u9664\u6d88\u606f\uff0c\u6d88\u606f\u4ecd\u4f1a\u7559\u5728\u961f\u5217\u4e2d\uff08\u4ee5\u4e8b\u52a1\u63d0\u4ea4\u4e3a\u51c6\uff0c\u800c\u975e ACK \u8c03\u7528\u4e3a\u51c6\uff09\u3002<\/li>\n<li>\u82e5\u6d88\u8d39\u7aef\u4f7f\u7528 <code>autoAck=true<\/code>\uff08\u81ea\u52a8\u786e\u8ba4\uff09\uff0c\u5219<strong>\u4e0d\u652f\u6301\u4e8b\u52a1<\/strong>\uff0c\u6d88\u606f\u6295\u9012\u540e\u7acb\u5373\u88ab\u786e\u8ba4\u5220\u9664\uff0c\u540e\u7eed\u4e1a\u52a1\u56de\u6eda\u65e0\u6cd5\u64a4\u56de\u5df2\u6d88\u8d39\u7684\u6d88\u606f\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u4e8b\u52a1\u6d88\u606f\u7684\u9519\u8bef\u5904\u7406<\/h3>\n<ol start=\"12\">\n<li>\u4e8b\u52a1\u63d0\u4ea4\u524d\u82e5\u53d1\u751f\u5f02\u5e38\uff0cRabbitMQ \u4f1a\u629b\u51fa <code>IOException<\/code>\uff0c\u751f\u4ea7\u8005\u53ef\u901a\u8fc7 <code>try-catch<\/code> \u6355\u83b7\u5f02\u5e38\u5e76\u8c03\u7528 <code>txRollback()<\/code> \u8fdb\u884c\u56de\u6eda\uff0c\u6216\u51b3\u5b9a\u662f\u5426\u91cd\u53d1\u6d88\u606f\u3002****<\/li>\n<\/ol>\n<h2>94-RabbitMQ\u6b7b\u4fe1\u961f\u5217\u3001\u5ef6\u65f6\u961f\u5217<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u6b7b\u4fe1\u961f\u5217\uff08Dead Letter Queue, DLQ\uff09\u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>\u6b7b\u4fe1\u961f\u5217<\/strong>\u662f\u7528\u4e8e\u5b58\u653e&#8221;\u6b7b\u4fe1\u6d88\u606f&#8221;\u7684\u666e\u901a\u961f\u5217\uff0c\u672c\u8d28\u662f\u4e00\u4e2a\u666e\u901a\u961f\u5217\uff0c\u4f46\u88ab\u914d\u7f6e\u4e3a\u63a5\u6536\u5f02\u5e38\u6d88\u606f\uff08\u5982\u8d85\u65f6\u3001\u88ab\u62d2\u7edd\u3001\u961f\u5217\u6ea2\u51fa\uff09\u3002<\/li>\n<li>\u6d88\u606f\u53d8\u4e3a\u6b7b\u4fe1\u7684\u4e09\u79cd\u60c5\u51b5\uff1a\u2460\u6d88\u8d39\u8005\u8fd4\u56de <code>basic.nack<\/code> \u6216 <code>basic.reject<\/code> \u4e14 <code>requeue=false<\/code>\uff08\u4e0d\u91cd\u65b0\u5165\u961f\uff09\uff1b\u2461\u6d88\u606f\u5728\u961f\u5217\u4e2d\u7684\u5b58\u6d3b\u65f6\u95f4\u8d85\u8fc7\u8bbe\u7f6e\u7684 TTL\uff08\u8fc7\u671f\uff09\uff1b\u2462\u961f\u5217\u957f\u5ea6\u8fbe\u5230\u4e0a\u9650\uff0c\u65b0\u6d88\u606f\u65e0\u6cd5\u5165\u961f\u3002<\/li>\n<li>\u6b7b\u4fe1\u961f\u5217\u901a\u8fc7\u4e3a\u666e\u901a\u961f\u5217\u914d\u7f6e <strong><code>x-dead-letter-exchange<\/code>\uff08\u6b7b\u4fe1\u4ea4\u6362\u673a\uff09<\/strong> \u5c5e\u6027\u6765\u6307\u5b9a\uff0c\u5f53\u6d88\u606f\u53d8\u4e3a\u6b7b\u4fe1\u65f6\uff0cRabbitMQ \u4f1a\u81ea\u52a8\u5c06\u5176\u8def\u7531\u5230\u8be5\u4ea4\u6362\u673a\uff0c\u8fdb\u800c\u8fdb\u5165\u5bf9\u5e94\u7684\u6b7b\u4fe1\u961f\u5217\u3002<\/li>\n<li>\u6b7b\u4fe1\u4ea4\u6362\u673a\u662f<strong>\u666e\u901a\u4ea4\u6362\u673a<\/strong>\uff08\u53ef\u4ee5\u662f Direct\u3001Fanout\u3001Topic \u7b49\u7c7b\u578b\uff09\uff0c\u591a\u4e2a\u4e1a\u52a1\u961f\u5217\u53ef\u5171\u7528\u540c\u4e00\u4e2a\u6b7b\u4fe1\u4ea4\u6362\u673a\uff0c\u901a\u8fc7\u4e0d\u540c\u7684 Routing Key \u533a\u5206\u8def\u7531\u5230\u4e0d\u540c\u7684\u6b7b\u4fe1\u961f\u5217\u3002<\/li>\n<li>\u6b7b\u4fe1\u961f\u5217\u7684\u4f5c\u7528\u662f\u5bf9\u5f02\u5e38\u6d88\u606f\u505a<strong>\u8865\u507f\u5904\u7406<\/strong>\uff08\u5982\u8bb0\u5f55\u65e5\u5fd7\u3001\u4eba\u5de5\u5e72\u9884\u3001\u91cd\u65b0\u8def\u7531\u7b49\uff09\uff0c\u907f\u514d\u6d88\u606f\u88ab\u76f4\u63a5\u4e22\u5f03\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u5ef6\u65f6\u961f\u5217\uff08Delayed Queue\uff09\u7684\u6982\u5ff5<\/h3>\n<ol start=\"6\">\n<li><strong>\u5ef6\u65f6\u961f\u5217<\/strong>\u662f\u6307\u6d88\u606f\u53d1\u9001\u540e\u4e0d\u7acb\u5373\u88ab\u6d88\u8d39\u8005\u6d88\u8d39\uff0c\u800c\u662f\u7b49\u5f85\u6307\u5b9a\u7684\u65f6\u95f4\u540e\u624d\u88ab\u6d88\u8d39\u7684\u961f\u5217\u3002<\/li>\n<li>RabbitMQ \u81ea\u8eab\u4e0d\u76f4\u63a5\u63d0\u4f9b\u5ef6\u65f6\u961f\u5217\u529f\u80fd\uff0c\u4f46\u53ef\u901a\u8fc7 <strong>TTL\uff08\u6d88\u606f\u8fc7\u671f\u65f6\u95f4\uff09+ \u6b7b\u4fe1\u961f\u5217<\/strong> \u7684\u7ec4\u5408\u6765\u5b9e\u73b0\u5ef6\u65f6\u961f\u5217\u3002<\/li>\n<li>\u5b9e\u73b0\u539f\u7406\uff1a\u6d88\u606f\u5148\u53d1\u9001\u5230\u8bbe\u7f6e\u4e86 TTL \u7684\u666e\u901a\u961f\u5217\uff08\u6d88\u8d39\u8005\u4e0d\u76d1\u542c\u8be5\u961f\u5217\uff09\uff0cTTL \u5230\u671f\u540e\u6d88\u606f\u53d8\u4e3a\u6b7b\u4fe1\uff0c\u81ea\u52a8\u8fdb\u5165\u7ed1\u5b9a\u7684\u6b7b\u4fe1\u961f\u5217\uff0c\u6d88\u8d39\u8005<strong>\u76d1\u542c\u6b7b\u4fe1\u961f\u5217<\/strong>\u5373\u53ef\u6d88\u8d39\u5230\u5ef6\u65f6\u5230\u671f\u7684\u6d88\u606f\u3002<\/li>\n<li>TTL \u53ef\u8bbe\u7f6e\u5728<strong>\u6d88\u606f<\/strong>\u672c\u8eab\uff08\u6bcf\u6761\u6d88\u606f\u72ec\u7acb\uff09\u6216<strong>\u961f\u5217<\/strong>\u4e0a\uff08\u8be5\u961f\u5217\u6240\u6709\u6d88\u606f\u7edf\u4e00 TTL\uff09\uff0c\u82e5\u4e24\u8005\u540c\u65f6\u8bbe\u7f6e\uff0c\u4ee5<strong>\u8f83\u5c0f\u7684\u503c<\/strong>\u4e3a\u51c6\uff08\u5148\u5230\u5148\u8fc7\u671f\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001\u5ef6\u65f6\u961f\u5217\u7684\u5b9e\u73b0\u6d41\u7a0b<\/h3>\n<ol start=\"10\">\n<li>\u5b9e\u9645\u6d88\u8d39\u6d41\u7a0b\uff1a\u751f\u4ea7\u8005\u53d1\u9001\u6d88\u606f\u5230\u666e\u901a\u961f\u5217\uff08TTL\u961f\u5217\uff09\u2192 \u6d88\u606f\u5728\u8be5\u961f\u5217\u7b49\u5f85 TTL \u8d85\u65f6 \u2192 \u8d85\u65f6\u540e\u6d88\u606f\u88ab\u6295\u9012\u5230\u6b7b\u4fe1\u961f\u5217 \u2192 \u6d88\u8d39\u8005\u76d1\u542c\u6b7b\u4fe1\u961f\u5217\u5e76\u6d88\u8d39\u6d88\u606f\uff0c\u4ece\u800c\u5b9e\u73b0\u5ef6\u65f6\u6d88\u8d39\u7684\u6548\u679c\u3002<\/li>\n<\/ol>\n<h2>95-\u7b80\u8ff0kafka\u67b6\u6784\u8bbe\u8ba1<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Kafka \u7684\u6838\u5fc3\u89d2\u8272<\/h3>\n<ol>\n<li><strong>Broker<\/strong>\uff1aKafka \u7684\u670d\u52a1\u7aef\u8282\u70b9\uff08\u4e00\u4e2a Broker \u5373\u4e3a\u4e00\u4e2a Kafka \u670d\u52a1\u5668\uff09\uff0c\u591a\u4e2a Broker \u7ec4\u6210 Kafka \u96c6\u7fa4\u3002<\/li>\n<li><strong>Producer\uff08\u751f\u4ea7\u8005\uff09<\/strong>\uff1a\u6d88\u606f\u53d1\u9001\u65b9\uff0c\u5c06\u6d88\u606f\u53d1\u9001\u5230\u6307\u5b9a\u7684 Topic\u3002<\/li>\n<li><strong>Consumer\uff08\u6d88\u8d39\u8005\uff09<\/strong>\uff1a\u6d88\u606f\u6d88\u8d39\u65b9\uff0c\u4ece Topic \u4e2d\u62c9\u53d6\u6d88\u606f\u8fdb\u884c\u6d88\u8d39\u3002<\/li>\n<li><strong>Consumer Group\uff08\u6d88\u8d39\u8005\u7ec4\uff09<\/strong>\uff1a\u591a\u4e2a\u6d88\u8d39\u8005\u53ef\u4ee5\u7ec4\u6210\u4e00\u4e2a\u7ec4\uff0c\u7ec4\u5185\u6bcf\u4e2a\u6d88\u8d39\u8005\u8d1f\u8d23\u6d88\u8d39\u4e0d\u540c\u7684 Partition\uff0c\u540c\u4e00\u4e2a Partition \u4e2d\u7684\u6d88\u606f\u53ea\u4f1a\u53d1\u7ed9\u8be5\u7ec4\u4e2d\u7684\u4e00\u4e2a\u6d88\u8d39\u8005\uff08\u7ec4\u5185\u8d1f\u8f7d\u5747\u8861\uff09\u3002<\/li>\n<li><strong>Topic\uff08\u4e3b\u9898\uff09<\/strong>\uff1a\u6d88\u606f\u7684\u903b\u8f91\u5206\u7c7b\uff08\u7c7b\u4f3c\u4e8e\u961f\u5217\uff09\uff0c\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u9762\u5411\u540c\u4e00\u4e2a Topic \u8fdb\u884c\u751f\u4ea7\u548c\u6d88\u8d39\u3002<\/li>\n<li><strong>Partition\uff08\u5206\u533a\uff09<\/strong>\uff1aTopic \u7684\u7269\u7406\u62c6\u5206\u5355\u5143\uff0c\u4e00\u4e2a Topic \u53ef\u5206\u6210\u591a\u4e2a Partition\uff0c\u5206\u5e03\u5728\u4e0d\u540c\u7684 Broker \u4e0a\uff0c\u662f\u5b9e\u73b0 Kafka \u9ad8\u541e\u5410\u91cf\u7684\u6838\u5fc3\u8bbe\u8ba1\u3002<\/li>\n<li><strong>\u526f\u672c\uff08Replica\uff09<\/strong>\uff1a\u6bcf\u4e2a Partition \u53ef\u4ee5\u6709\u591a\u4e2a\u526f\u672c\uff08\u4e3b\u4ece\u67b6\u6784\uff09\uff0cLeader \u8d1f\u8d23\u8bfb\u5199\uff0cFollower \u4ec5\u4ece Leader \u540c\u6b65\u6570\u636e\uff0cLeader \u6545\u969c\u65f6\u81ea\u52a8\u9009\u4e3e\u65b0 Leader\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Partition \u7684\u8bbe\u8ba1\u4f18\u52bf<\/h3>\n<ol start=\"8\">\n<li>\u4e00\u4e2a Topic \u88ab\u62c6\u5206\u4e3a\u591a\u4e2a Partition \u5e76\u5206\u5e03\u5728\u4e0d\u540c Broker \u4e0a\uff0c\u901a\u8fc7\u5e76\u884c\u8bfb\u5199\u6781\u5927\u5730\u63d0\u9ad8\u4e86\u541e\u5410\u91cf\uff0c\u6d88\u8d39\u8005\u7ec4\u4e2d\u7684\u591a\u4e2a\u6d88\u8d39\u8005\u53ef\u5206\u522b\u6d88\u8d39\u4e0d\u540c\u7684 Partition\uff0c\u6d88\u8d39\u80fd\u529b\u968f Partition \u6570\u91cf\u7ebf\u6027\u6269\u5c55\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001ZooKeeper \u5728 Kafka \u4e2d\u7684\u4f5c\u7528<\/h3>\n<ol start=\"9\">\n<li><strong>Broker \u6ce8\u518c<\/strong>\uff1a\u6bcf\u4e2a Broker \u542f\u52a8\u65f6\u5728 ZooKeeper \u4e0a\u521b\u5efa\u4e00\u4e2a\u4e34\u65f6\u8282\u70b9\uff0c\u82e5 Broker \u5b95\u673a\uff0c\u4e34\u65f6\u8282\u70b9\u88ab\u5220\u9664\uff0c\u751f\u4ea7\u8005\u53ef\u611f\u77e5\u5230\u8be5\u8282\u70b9\u4e0b\u7ebf\u3002<\/li>\n<li><strong>Topic \u4e0e Partition \u5173\u7cfb\u7ef4\u62a4<\/strong>\uff1aTopic \u4e0e Partition \u7684\u5bf9\u5e94\u5173\u7cfb\u4ee5\u53ca Partition \u5206\u5e03\u5728\u54ea\u4e9b Broker \u4e0a\uff0c\u5747\u7531 ZooKeeper \u7ef4\u62a4\u3002<\/li>\n<li><strong>\u6d88\u8d39\u8005\u4e0e Partition \u7684\u5206\u914d<\/strong>\uff1a\u6d88\u8d39\u8005\u7ec4\u4e2d\u6bcf\u4e2a\u6d88\u8d39\u8005\u6d88\u8d39\u54ea\u4e2a Partition \u7684\u5206\u914d\u5173\u7cfb\u7531 ZooKeeper \u534f\u8c03\uff0c\u6d88\u8d39\u8005\u5b95\u673a\u65f6 ZK \u8d1f\u8d23\u91cd\u65b0\u5206\u914d\u3002<\/li>\n<li><strong>Leader \u9009\u4e3e<\/strong>\uff1a\u5f53 Partition \u7684 Leader \u526f\u672c\u5b95\u673a\u65f6\uff0cZooKeeper \u8d1f\u8d23\u4ece Follower \u4e2d\u91cd\u65b0\u9009\u4e3e\u65b0\u7684 Leader\u3002<\/li>\n<li><strong>\u6d88\u8d39\u504f\u79fb\u91cf\uff08Offset\uff09\u5b58\u50a8<\/strong>\uff1a\u6bcf\u4e2a\u6d88\u8d39\u8005\u7684\u6d88\u8d39\u8fdb\u5ea6\uff08Offset\uff09\u5b58\u50a8\u5728 ZooKeeper \u4e2d\uff08\u65e9\u671f\u7248\u672c\uff09\uff0c\u6d88\u8d39\u8005\u91cd\u542f\u540e\u53ef\u4ece\u4e2d\u83b7\u53d6\u4e0a\u6b21\u6d88\u8d39\u4f4d\u7f6e\uff0c\u7ee7\u7eed\u6d88\u8d39\u3002<\/li>\n<\/ol>\n<h2>96-Kafka\u6d88\u606f\u4e22\u5931\u7684\u573a\u666f\u53ca\u89e3\u51b3\u65b9\u6848<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Kafka \u6d88\u606f\u4e22\u5931\u7684\u4e09\u5927\u573a\u666f<\/h3>\n<ol>\n<li>Kafka \u6d88\u606f\u53ef\u80fd\u4e22\u5931\u7684\u573a\u666f\u5206\u4e3a\u4e09\u90e8\u5206\uff1a<strong>\u751f\u4ea7\u8005\u7aef\uff08\u53d1\u9001\uff09<\/strong>\u3001<strong>Broker \u7aef\uff08\u5b58\u50a8\uff09<\/strong>\u3001<strong>\u6d88\u8d39\u8005\u7aef\uff08\u6d88\u8d39\uff09<\/strong>\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u751f\u4ea7\u8005\u7aef\u6d88\u606f\u4e22\u5931\u4e0e\u89e3\u51b3\u65b9\u6848<\/h3>\n<ol start=\"2\">\n<li><strong><code>acks=0<\/code><\/strong>\uff1a\u751f\u4ea7\u8005\u53d1\u9001\u6d88\u606f\u540e\u4e0d\u7b49\u5f85 Broker \u4efb\u4f55\u786e\u8ba4\uff0c\u6027\u80fd\u6700\u9ad8\uff0c\u4f46\u82e5\u53d1\u9001\u5931\u8d25\u6d88\u606f\u76f4\u63a5\u4e22\u5931\u3002<\/li>\n<li><strong><code>acks=1<\/code><\/strong>\uff1aLeader \u5199\u5165\u6210\u529f\u540e\u5373\u8fd4\u56de\u786e\u8ba4\uff0c\u82e5\u6d88\u606f\u5c1a\u672a\u540c\u6b65\u5230 Follower \u65f6 Leader \u5b95\u673a\uff0c\u9009\u4e3e\u540e\u65b0 Leader \u65e0\u6b64\u6d88\u606f\uff0c\u4ecd\u4f1a\u4e22\u5931\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a\u8bbe\u7f6e <code>acks=all<\/code>\uff08\u6216 <code>-1<\/code>\uff09\uff0c\u8981\u6c42 ISR\uff08In-Sync Replica\uff0c\u4e0e Leader \u4fdd\u6301\u540c\u6b65\u7684\u526f\u672c\u5217\u8868\uff09\u4e2d<strong>\u6240\u6709\u526f\u672c\u90fd\u786e\u8ba4\u5199\u5165<\/strong>\u540e\u624d\u7b97\u6210\u529f\uff0c\u907f\u514d Leader \u5355\u70b9\u6545\u969c\u5bfc\u81f4\u6570\u636e\u4e22\u5931\u3002<\/li>\n<li><strong><code>min.insync.replicas<\/code>\uff08\u6700\u5c0f\u540c\u6b65\u526f\u672c\u6570\uff09<\/strong>\uff1a\u914d\u5408 <code>acks=all<\/code> \u4f7f\u7528\uff0c\u6307\u5b9a ISR \u4e2d\u6700\u5c11\u8981\u6709\u591a\u5c11\u4e2a\u526f\u672c\u786e\u8ba4\u5199\u5165\uff0c\u5efa\u8bae\u8bbe\u7f6e\u4e3a 2\uff0c\u786e\u4fdd\u81f3\u5c11\u4e00\u4e2a Follower \u540c\u6b65\u6210\u529f\uff0c\u8be5\u53c2\u6570\u4ec5\u5728 <code>acks=all<\/code> \u65f6\u751f\u6548\u3002<\/li>\n<li><strong><code>unclean.leader.election.enable=false<\/code><\/strong>\uff1a\u7981\u6b62\u4ece ISR \u4e4b\u5916\u7684 Follower\uff08OSR\uff0cOut-of-Sync Replica\uff0c\u6570\u636e\u843d\u540e\u7684\u526f\u672c\uff09\u4e2d\u9009\u4e3e Leader\uff0c\u9632\u6b62\u9009\u4e3e\u51fa\u6570\u636e\u4e0d\u5b8c\u6574\u7684 Leader \u5bfc\u81f4\u5df2\u786e\u8ba4\u6d88\u606f\u4e22\u5931\u3002<\/li>\n<li>\u751f\u4ea7\u8005\u7aef\u8fd8\u9700\u914d\u7f6e<strong>\u91cd\u8bd5\u673a\u5236\uff08<code>retries &gt; 1<\/code>\uff09<\/strong>\uff0c\u53d1\u9001\u5931\u8d25\u65f6\u81ea\u52a8\u91cd\u8bd5\uff0c\u6355\u83b7\u5f02\u5e38\u540e\u81ea\u884c\u5904\u7406\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Broker \u7aef\u6d88\u606f\u4e22\u5931\u4e0e\u89e3\u51b3\u65b9\u6848<\/h3>\n<ol start=\"8\">\n<li>\u6d88\u606f\u5199\u5165 Broker \u65f6\u5148\u7f13\u5b58\u5728<strong>\u64cd\u4f5c\u7cfb\u7edf\u7684 Page Cache\uff08\u9875\u7f13\u5b58\uff09<\/strong>\u4e2d\uff0c\u5c1a\u672a\u5237\u76d8\uff08flush\uff09\u65f6\u82e5\u673a\u5668\u5b95\u673a\uff0c\u7f13\u5b58\u6570\u636e\u4e22\u5931\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a\u51cf\u5c0f\u5237\u76d8\u95f4\u9694\uff08<code>flush.messages<\/code> \u548c <code>flush.ms<\/code> \u53c2\u6570\uff09\uff0c\u6216\u4f9d\u8d56\u526f\u672c\u540c\u6b65\u673a\u5236\u2014\u2014\u5373\u4f7f\u5355\u8282\u70b9\u5237\u76d8\u5931\u8d25\uff0c\u53ea\u8981 ISR \u4e2d\u6709\u5176\u4ed6\u526f\u672c\u5df2\u540c\u6b65\uff0c\u6570\u636e\u4ecd\u4e0d\u4e22\u5931\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001\u6d88\u8d39\u8005\u7aef\u6d88\u606f\u4e22\u5931\u4e0e\u89e3\u51b3\u65b9\u6848<\/h3>\n<ol start=\"10\">\n<li><strong>\u5148\u63d0\u4ea4 Offset\uff0c\u518d\u5904\u7406\u4e1a\u52a1\u903b\u8f91<\/strong>\uff1a\u82e5\u63d0\u4ea4 Offset \u540e\u4e1a\u52a1\u5904\u7406\u5931\u8d25\uff0c\u8be5\u6d88\u606f\u5df2\u6807\u8bb0\u4e3a\u5df2\u6d88\u8d39\uff0c\u540e\u7eed\u65e0\u6cd5\u518d\u6b21\u6d88\u8d39\uff0c\u5bfc\u81f4\u6d88\u606f\u4e22\u5931\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a\u91c7\u7528<strong>\u5148\u5904\u7406\u4e1a\u52a1\u903b\u8f91\uff0c\u540e\u63d0\u4ea4 Offset<\/strong> \u7684\u987a\u5e8f\uff0c\u786e\u4fdd\u4e1a\u52a1\u6210\u529f\u540e\u518d\u63d0\u4ea4\u6d88\u8d39\u8fdb\u5ea6\uff0c\u9632\u6b62\u4e1a\u52a1\u5931\u8d25\u65f6\u6d88\u606f\u88ab\u8bef\u8ba4\u4e3a\u5df2\u6d88\u8d39\u3002<\/li>\n<li><strong>\u5148\u5904\u7406\u540e\u63d0\u4ea4\u7684\u526f\u4f5c\u7528<\/strong>\uff1a\u53ef\u80fd\u5bfc\u81f4<strong>\u91cd\u590d\u6d88\u8d39<\/strong>\uff08\u4e1a\u52a1\u5904\u7406\u5b8c\u6210\u540e\u63d0\u4ea4 Offset \u524d\u6d88\u8d39\u8005\u5b95\u673a\uff09\uff0c\u9700\u901a\u8fc7<strong>\u63a5\u53e3\u5e42\u7b49\u6027\u8bbe\u8ba1<\/strong>\uff08\u5982\u6d88\u606f ID \u53bb\u91cd\uff09\u6765\u4fdd\u8bc1\u4e1a\u52a1\u6700\u7ec8\u4e00\u81f4\u6027\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u603b\u7ed3\uff1a\u6027\u80fd\u4e0e\u53ef\u9760\u6027\u7684\u6743\u8861<\/h3>\n<ol start=\"13\">\n<li>\u4ee5\u4e0a\u4fdd\u8bc1\u6d88\u606f\u4e0d\u4e22\u5931\u7684\u914d\u7f6e\uff08<code>acks=all<\/code>\u3001<code>min.insync.replicas=2<\/code>\u3001\u7981\u6b62\u4ece OSR \u9009\u4e3e\u7b49\uff09<strong>\u4f1a\u663e\u8457\u964d\u4f4e Kafka \u7684\u541e\u5410\u91cf<\/strong>\uff0c\u9700\u8981\u5728<strong>\u9ad8\u6027\u80fd\u4e0e\u9ad8\u53ef\u9760\u6027<\/strong>\u4e4b\u95f4\u6839\u636e\u4e1a\u52a1\u573a\u666f\u505a\u53d6\u820d\u3002<\/li>\n<\/ol>\n<h2>97-Kafka\u662fpull\uff1fpush\uff1f\u4f18\u52a3\u52bf\u5206\u6790<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Kafka \u91c7\u7528 Pull \u6a21\u5f0f<\/h3>\n<ol>\n<li>Kafka \u6d88\u8d39\u8005\u91c7\u7528 <strong>Pull\uff08\u62c9\u53d6\uff09\u6a21\u5f0f<\/strong>\uff0c\u5373\u6d88\u8d39\u8005\u4e3b\u52a8\u5411 Broker \u62c9\u53d6\u6d88\u606f\uff0c\u800c\u975e Broker \u4e3b\u52a8\u63a8\u9001\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Pull \u6a21\u5f0f\u7684\u4f18\u70b9<\/h3>\n<ol start=\"2\">\n<li><strong>\u6d88\u8d39\u8005\u81ea\u4e3b\u63a7\u5236\u6d88\u8d39\u901f\u7387<\/strong>\uff1aPull \u6a21\u5f0f\u53ef\u6839\u636e\u6d88\u8d39\u8005\u7684\u5904\u7406\u80fd\u529b\u51b3\u5b9a\u62c9\u53d6\u901f\u5ea6\u548c\u6279\u91cf\u5927\u5c0f\uff08\u4e00\u6b21\u62c9 1 \u6761\u6216\u591a\u6761\uff09\uff0c\u907f\u514d\u6d88\u8d39\u7aef\u8fc7\u8f7d\u3002<\/li>\n<li><strong>\u652f\u6301\u7075\u6d3b\u7684\u63d0\u4ea4\u65b9\u5f0f<\/strong>\uff1a\u6d88\u8d39\u8005\u53ef\u624b\u52a8\u63d0\u4ea4 Offset\uff0c\u5b9e\u73b0\u4e0d\u540c\u7684\u4f20\u8f93\u8bed\u4e49\uff08\u81f3\u5c11\u4e00\u6b21\u3001\u6700\u591a\u4e00\u6b21\u3001\u7cbe\u51c6\u4e00\u6b21\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Pull \u6a21\u5f0f\u7684\u7f3a\u70b9\u4e0e\u89e3\u51b3\u65b9\u6848<\/h3>\n<ol start=\"4\">\n<li><strong>\u7a7a\u8f6e\u8be2\u95ee\u9898<\/strong>\uff1a\u5f53 Broker \u4e2d\u6ca1\u6709\u65b0\u6d88\u606f\u65f6\uff0c\u6d88\u8d39\u8005\u4ecd\u4f1a\u4e0d\u65ad\u53d1\u8d77\u62c9\u53d6\u8bf7\u6c42\uff0c\u5f62\u6210<strong>\u7a7a\u8f6e\u8be2\uff08\u5fd9\u7b49\u5f85\uff09<\/strong>\uff0c\u6d88\u8017 CPU \u8d44\u6e90\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848<\/strong>\uff1a\u8bbe\u7f6e\u62c9\u53d6\u8d85\u65f6\u53c2\u6570\uff08\u5982 <code>fetch.max.wait.ms<\/code>\uff09\uff0c\u82e5\u961f\u5217\u4e3a\u7a7a\u5219\u8ba9\u6d88\u8d39\u8005\u963b\u585e\u7b49\u5f85\uff0c\u91ca\u653e CPU\uff0c\u6216\u8bbe\u7f6e\u6700\u5c0f\u62c9\u53d6\u6761\u6570\uff08\u5982 <code>fetch.min.bytes<\/code>\uff09\uff0c\u6570\u636e\u91cf\u4e0d\u8db3\u65f6\u963b\u585e\u7b49\u5f85\u81f3\u6ee1\u8db3\u6761\u4ef6\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001Push \u6a21\u5f0f\u7684\u7279\u70b9\u4e0e\u5bf9\u6bd4<\/h3>\n<ol start=\"6\">\n<li><strong>Push\uff08\u63a8\u9001\uff09\u6a21\u5f0f<\/strong>\u7531 Broker \u4e3b\u52a8\u5c06\u6d88\u606f\u63a8\u9001\u7ed9\u6d88\u8d39\u8005\uff0cBroker \u53ef\u611f\u77e5\u662f\u5426\u6709\u6d88\u606f\uff0c\u56e0\u6b64\u4e0d\u4f1a\u9020\u6210\u6d88\u8d39\u8005\u7684\u7a7a\u8f6e\u8be2\u3002<\/li>\n<li>Push \u6a21\u5f0f\u7684\u7f3a\u9677\uff1aBroker <strong>\u4e0d\u4e86\u89e3\u6d88\u8d39\u8005\u7684\u5904\u7406\u80fd\u529b<\/strong>\uff0c\u6301\u7eed\u63a8\u9001\u53ef\u80fd\u5bfc\u81f4\u6d88\u8d39\u7aef\u79ef\u538b\u3001\u8d85\u65f6\u3001\u7f51\u7edc\u62e5\u585e\uff0c\u751a\u81f3\u89e6\u53d1\u62d2\u7edd\u670d\u52a1\u3002<\/li>\n<\/ol>\n<h2>98-Kafka\u4e2dzk\u7684\u4f5c\u7528<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Broker \u7ba1\u7406\u4e0e\u6ce8\u518c<\/h3>\n<ol>\n<li><code>\/brokers\/ids<\/code> \u8282\u70b9\uff08\u4e34\u65f6\u8282\u70b9\uff09\uff1a\u5b58\u50a8\u96c6\u7fa4\u4e2d\u6240\u6709 Broker \u7684 ID\uff0c\u6bcf\u4e2a Broker \u542f\u52a8\u65f6\u6ce8\u518c\u81ea\u5df1\u7684\u8282\u70b9\uff0cBroker \u5b95\u673a\u540e\u4e34\u65f6\u8282\u70b9\u81ea\u52a8\u5220\u9664\uff0c\u751f\u4ea7\u8005\u53ef\u901a\u8fc7\u8be5\u8282\u70b9\u611f\u77e5\u96c6\u7fa4\u8282\u70b9\u72b6\u6001\u3002<\/li>\n<li>\u6bcf\u4e2a Broker ID \u8282\u70b9\u4e0b\u5b58\u50a8\u8be5 Broker \u7684\u7269\u7406\u5730\u5740\uff08IP + \u7aef\u53e3\uff09\u3001\u7248\u672c\u3001\u542f\u52a8\u65f6\u95f4\u7b49\u5143\u6570\u636e\u4fe1\u606f\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001Topic \u4e0e Partition \u5173\u7cfb\u7ef4\u62a4<\/h3>\n<ol start=\"3\">\n<li><code>\/brokers\/topics<\/code> \u8282\u70b9\uff1a\u5b58\u50a8\u96c6\u7fa4\u4e2d\u6240\u6709 Topic \u4fe1\u606f\uff0c\u6bcf\u4e2a Topic \u8282\u70b9\u4e0b\u4fdd\u5b58\u8be5 Topic \u7684\u6240\u6709 Partition \u4fe1\u606f\uff0c\u7528\u4e8e\u7ef4\u62a4 Topic \u4e0e Partition \u7684\u5bf9\u5e94\u5173\u7cfb\u53ca Partition \u5206\u5e03\u5728\u54ea\u4e9b Broker \u4e0a\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Partition \u7684 Leader \u4e0e ISR \u7ef4\u62a4<\/h3>\n<ol start=\"4\">\n<li>\u6bcf\u4e2a Partition \u8282\u70b9\u4e0b\u6709\u4e00\u4e2a <strong><code>\/state<\/code> \u8282\u70b9<\/strong>\uff08\u4e34\u65f6\u8282\u70b9\uff09\uff0c\u5b58\u50a8\u5f53\u524d Partition \u7684 <strong>Leader \u526f\u672c\u7684 Broker ID<\/strong>\uff0cLeader \u53d8\u66f4\u65f6\u8be5\u8282\u70b9\u5185\u5bb9\u540c\u6b65\u66f4\u65b0\u3002<\/li>\n<li><code>\/state<\/code> \u8282\u70b9\u4e2d\u8fd8\u7ef4\u62a4\u8be5 Partition \u7684 <strong>ISR\uff08In-Sync Replica\uff0c\u53ef\u9760\u526f\u672c\u5217\u8868\uff09<\/strong>\uff0cISR \u4e2d\u7684\u526f\u672c\u4e0e Leader \u6570\u636e\u5b8c\u5168\u540c\u6b65\uff0c\u7528\u4e8e Leader \u9009\u4e3e\u548c <code>acks=all<\/code> \u65f6\u7684\u786e\u8ba4\u673a\u5236\u3002<\/li>\n<li>\u5f53 Leader \u5b95\u673a\u65f6\uff0cZooKeeper \u4ece\u8be5 Partition \u7684 ISR \u5217\u8868\u4e2d\u9009\u53d6\u4e00\u4e2a Follower \u63d0\u5347\u4e3a\u65b0 Leader\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001Consumer Group \u7ba1\u7406\u4e0e Offset \u5b58\u50a8<\/h3>\n<ol start=\"7\">\n<li>ZooKeeper \u4e2d\u7ef4\u62a4 <strong>Consumer Group \u4e0e Partition \u7684\u5206\u914d\u5173\u7cfb<\/strong>\uff1a\u8bb0\u5f55\u6bcf\u4e2a\u6d88\u8d39\u8005\u7ec4\u4e2d\u54ea\u4e2a Consumer \u6b63\u5728\u6d88\u8d39\u54ea\u4e2a Partition\uff0c\u6d88\u8d39\u8005\u5b95\u673a\u65f6\u89e6\u53d1 Rebalance\uff0cZooKeeper \u53c2\u4e0e\u534f\u8c03\u91cd\u65b0\u5206\u914d\u3002<\/li>\n<li><strong>\u6d88\u8d39\u8fdb\u5ea6\uff08Offset\uff09\u5b58\u50a8\uff08\u8001\u7248\u672c\uff09<\/strong>\uff1a\u6bcf\u4e2a Consumer \u6d88\u8d39\u5230\u7684 Offset \u4f4d\u7f6e\u5b58\u50a8\u5728 ZooKeeper \u4e2d\uff0c\u6d88\u8d39\u8005\u91cd\u542f\u540e\u53ef\u4ece\u4e2d\u8bfb\u53d6\u4e0a\u6b21\u6d88\u8d39\u4f4d\u7f6e\u7ee7\u7eed\u6d88\u8d39\uff08\u65b0\u7248\u672c\u4e2d Offset \u5df2\u6539\u5b58\u5230 Kafka \u5185\u90e8\u7684 <code>__consumer_offsets<\/code> Topic \u4e2d\uff09\u3002<\/li>\n<\/ol>\n<h3>\u4e94\u3001\u5ba2\u6237\u7aef\u5982\u4f55\u83b7\u53d6 ZooKeeper \u5143\u6570\u636e<\/h3>\n<ol start=\"9\">\n<li>\u5ba2\u6237\u7aef\u914d\u7f6e\u7684\u662f <strong>Broker \u5730\u5740\u800c\u975e ZooKeeper \u5730\u5740<\/strong>\uff0c\u5ba2\u6237\u7aef\u4e0d\u76f4\u63a5\u8fde\u63a5 ZooKeeper\uff0c\u800c\u662f\u901a\u8fc7\u8fde\u63a5\u7684 Broker \u83b7\u53d6\u96c6\u7fa4\u5143\u6570\u636e\uff0cBroker \u518d\u4e0e ZooKeeper \u4ea4\u4e92\u3002<\/li>\n<\/ol>\n<h3>\u516d\u3001\u7248\u672c\u8bf4\u660e<\/h3>\n<ol start=\"10\">\n<li>\u4ee5\u4e0a\u529f\u80fd\u57fa\u4e8e<strong>\u65e7\u7248\u672c Kafka<\/strong>\uff0c\u9ad8\u7248\u672c\uff08Kafka 2.8+\uff09\u5df2\u9010\u6e10<strong>\u5c06 ZooKeeper \u79fb\u9664<\/strong>\uff0c\u6539\u4e3a\u4f7f\u7528 Kafka Raft \u534f\u8bae\uff08KRaft\uff09\u81ea\u7ba1\u7406\u5143\u6570\u636e\uff0c\u9762\u8bd5\u65f6\u53ef\u63d0\u6b64\u70b9\u5c55\u793a\u6280\u672f\u654f\u611f\u5ea6\u3002<\/li>\n<\/ol>\n<h2>99-Kafka\u4e2d\u9ad8\u6027\u80fd\u7684\u539f\u56e0\u5206\u6790<\/h2>\n<hr \/>\n<h3>\u4e00\u3001\u987a\u5e8f\u8bfb\u5199\uff08Sequential I\/O\uff09<\/h3>\n<ol>\n<li>Kafka \u91c7\u7528<strong>\u987a\u5e8f\u8ffd\u52a0\u5199\u5165<\/strong>\uff08Append-Only\uff09\u7684\u65b9\u5f0f\uff0c\u6d88\u606f\u76f4\u63a5\u5199\u5165\u78c1\u76d8\u6587\u4ef6\uff0c\u78c1\u5934\u65e0\u9700\u9891\u7e41\u5bfb\u9053\uff0c\u987a\u5e8f\u8bfb\u5199\u901f\u5ea6\u53ef\u63a5\u8fd1\u5185\u5b58\u968f\u673a\u8bbf\u95ee\u3002<\/li>\n<li>Kafka \u5c06\u6570\u636e\u76f4\u63a5\u5199\u5165\u78c1\u76d8\uff08\u901a\u8fc7 Page Cache\uff0c\u800c\u975e\u5148\u5b58\u5185\u5b58\u518d\u5f02\u6b65\u5237\u76d8\uff09\uff0c\u56e0\u6b64<strong>\u6d88\u606f\u5806\u79ef\u80fd\u529b\u8fdc\u5f3a\u4e8e\u57fa\u4e8e\u5185\u5b58\u7684 MQ<\/strong>\uff08\u78c1\u76d8\u5bb9\u91cf\u8fdc\u5927\u4e8e\u5185\u5b58\uff09\u3002<\/li>\n<li>Kafka \u5bf9\u6d88\u606f\u7684\u6d88\u8d39\u548c\u5220\u9664\u4e5f\u57fa\u4e8e\u987a\u5e8f\u64cd\u4f5c\uff1a\u6d88\u8d39\u65f6\u987a\u5e8f\u8bfb\u53d6\uff0c\u5220\u9664\u65f6\u4ee5 <strong>Segment\uff08\u5206\u6bb5\u6587\u4ef6\uff09<\/strong> \u4e3a\u5355\u4f4d\u6574\u4f53\u5220\u9664\uff0c\u907f\u514d\u9010\u6761\u5220\u9664\u4ea7\u751f\u788e\u7247\uff0c\u63d0\u9ad8\u5220\u9664\u6548\u7387\u3002<\/li>\n<li>Partition \u662f\u903b\u8f91\u6982\u5ff5\uff0c\u7269\u7406\u5b58\u50a8\u4e0a\u7531\u591a\u4e2a <strong>Segment \u6587\u4ef6<\/strong>\u7ec4\u6210\uff0c\u6bcf\u4e2a Partition \u5bf9\u5e94\u78c1\u76d8\u4e0a\u7684\u591a\u4e2a\u6587\u4ef6\u6bb5\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u96f6\u62f7\u8d1d\uff08Zero Copy\uff09<\/h3>\n<ol start=\"5\">\n<li><strong>\u4f20\u7edf\u6570\u636e\u8bfb\u53d6\u6d41\u7a0b<\/strong>\uff1a\u78c1\u76d8 \u2192 \u5185\u6838\u7f13\u51b2\u533a \u2192 \u7528\u6237\u7f13\u51b2\u533a \u2192 Socket \u7f13\u51b2\u533a \u2192 \u7f51\u5361\uff0c\u7ecf\u5386<strong>4 \u6b21\u6570\u636e\u62f7\u8d1d\u548c\u591a\u6b21 CPU \u4e0a\u4e0b\u6587\u5207\u6362<\/strong>\uff0c\u6027\u80fd\u5f00\u9500\u5927\u3002<\/li>\n<li><strong>\u96f6\u62f7\u8d1d\u6280\u672f<\/strong>\uff1a\u64cd\u4f5c\u7cfb\u7edf\u76f4\u63a5\u5c06\u6570\u636e\u4ece<strong>\u78c1\u76d8\u6587\u4ef6\u53d1\u9001\u5230\u7f51\u5361\uff08Socket\uff09<\/strong>\uff0c\u8df3\u8fc7\u7528\u6237\u6001\u7f13\u51b2\u533a\uff0c\u7701\u53bb\u5185\u6838\u6001\u4e0e\u7528\u6237\u6001\u4e4b\u95f4\u7684\u6570\u636e\u62f7\u8d1d\u53ca\u4e0a\u4e0b\u6587\u5207\u6362\uff0c\u5927\u5e45\u63d0\u5347 I\/O \u6027\u80fd\u3002<\/li>\n<li>Kafka \u5229\u7528\u64cd\u4f5c\u7cfb\u7edf\u63d0\u4f9b\u7684\u96f6\u62f7\u8d1d\uff08<code>sendfile<\/code> \u7cfb\u7edf\u8c03\u7528\uff09\u673a\u5236\uff0c\u5b9e\u73b0\u6570\u636e\u4ece\u78c1\u76d8\u5230\u7f51\u5361\u7684\u76f4\u63a5\u4f20\u8f93\uff0c\u8fd9\u662f Kafka \u9ad8\u541e\u5410\u91cf\u7684\u5173\u952e\u6280\u672f\u4e4b\u4e00\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Page Cache\uff08\u9875\u7f13\u5b58\uff09\u673a\u5236<\/h3>\n<ol start=\"8\">\n<li>Kafka \u5199\u5165\u6570\u636e\u65f6\uff0c\u5148\u5199\u5165\u64cd\u4f5c\u7cfb\u7edf\u7684 <strong>Page Cache\uff08\u9875\u7f13\u5b58\uff09<\/strong>\uff0c\u800c\u975e\u76f4\u63a5\u5199\u5165\u78c1\u76d8\uff0c\u7531\u64cd\u4f5c\u7cfb\u7edf\u51b3\u5b9a\u4f55\u65f6\u5f02\u6b65\u5237\u76d8\uff08flush\uff09\u3002<\/li>\n<li>Kafka \u6570\u636e\u8bfb\u5199\u4e3b\u8981\u4f9d\u8d56 Page Cache\uff0c<strong>\u4e0d\u4f9d\u8d56 JVM \u5806\u5185\u5b58<\/strong>\u5b58\u50a8\u6d88\u606f\uff0c\u907f\u514d\u4e86 GC\uff08\u5783\u573e\u56de\u6536\uff09\u5e26\u6765\u7684\u6027\u80fd\u5f71\u54cd\uff0c\u540c\u65f6\u53ef\u5229\u7528\u64cd\u4f5c\u7cfb\u7edf\u7ea7\u522b\u7684\u7f13\u5b58\u7ba1\u7406\u80fd\u529b\u3002<\/li>\n<li>\u5f53\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u7684\u901f\u7387\u76f8\u5339\u914d\u65f6\uff0c\u6d88\u606f\u53ef\u80fd\u5728 <strong>Page Cache \u4e2d\u76f4\u63a5\u4ea4\u6362\u6570\u636e<\/strong>\uff0c\u5b8c\u5168\u65e0\u9700\u78c1\u76d8 I\/O\uff0c\u8bfb\u5199\u6027\u80fd\u8fdb\u4e00\u6b65\u63d0\u5347\u3002<\/li>\n<\/ol>\n<h2>100-\u7b80\u8ff0kafka\u7684rebalance\u673a\u5236<\/h2>\n<hr \/>\n<h3>\u4e00\u3001Rebalance \u7684\u6982\u5ff5<\/h3>\n<ol>\n<li><strong>Rebalance\uff08\u518d\u5e73\u8861\uff09<\/strong> \u662f Kafka \u6d88\u8d39\u8005\u7ec4\u5c06 <strong>Partition \u4e0e Consumer<\/strong> \u7684\u5206\u914d\u5173\u7cfb\u8fdb\u884c\u91cd\u65b0\u8c03\u6574\u7684\u8fc7\u7a0b\uff0c\u53d1\u751f\u65f6 Partition \u7684\u8bfb\u5199\u4f1a\u88ab\u963b\u585e\u76f4\u5230 Rebalance \u5b8c\u6210\u3002<\/li>\n<li>Rebalance \u7684\u76ee\u7684\u662f\u5728\u6d88\u8d39\u8005\u7ec4\u6210\u5458\u53d8\u5316\u6216\u8ba2\u9605\u7684 Topic\/Partition \u53d8\u5316\u65f6\uff0c\u91cd\u65b0\u5206\u914d Partition\uff0c\u4fdd\u8bc1\u6bcf\u4e2a Partition \u88ab\u7ec4\u5185\u67d0\u4e2a Consumer \u6d88\u8d39\u3002<\/li>\n<\/ol>\n<h3>\u4e8c\u3001\u89e6\u53d1 Rebalance \u7684\u56db\u79cd\u573a\u666f<\/h3>\n<ol start=\"3\">\n<li><strong>\u6d88\u8d39\u8005\u7ec4\u6210\u5458\u6570\u91cf\u53d8\u5316<\/strong>\uff1a\u7ec4\u5185\u6709 Consumer \u52a0\u5165\u6216\u9000\u51fa\uff08\u4e3b\u52a8\u79bb\u5f00\u6216\u5b95\u673a\uff09\u3002<\/li>\n<li><strong>\u6d88\u8d39\u8005\u6d88\u8d39\u8d85\u65f6<\/strong>\uff1aConsumer \u5904\u7406\u6d88\u606f\u65f6\u95f4\u8fc7\u957f\uff0c\u672a\u53ca\u65f6\u63d0\u4ea4 Offset\uff0c\u534f\u8c03\u8005\u8ba4\u4e3a\u5176\u5df2\u5931\u6d3b\u3002<\/li>\n<li><strong>\u8ba2\u9605\u7684 Topic \u6570\u91cf\u53d8\u5316<\/strong>\uff1aConsumer Group \u65b0\u589e\u6216\u53d6\u6d88\u8ba2\u9605\u4e86\u67d0\u4e2a Topic\u3002<\/li>\n<li><strong>\u8ba2\u9605\u7684 Topic \u7684 Partition \u6570\u91cf\u53d8\u5316<\/strong>\uff1aTopic \u7684\u5206\u533a\u6570\u88ab\u624b\u52a8\u589e\u52a0\u6216\u51cf\u5c11\u3002<\/li>\n<\/ol>\n<h3>\u4e09\u3001Rebalance \u7684\u6267\u884c\u6d41\u7a0b<\/h3>\n<ol start=\"7\">\n<li><strong>\u534f\u8c03\u8005\uff08Coordinator\uff09<\/strong>\uff1a\u6bcf\u4e2a Consumer Group \u5bf9\u5e94\u4e00\u4e2a Coordinator\uff08\u901a\u5e38\u662f Group \u5185\u67d0\u4e2a Partition \u7684 Leader \u526f\u672c\u6240\u5728\u7684 Broker\uff09\uff0c\u8d1f\u8d23\u76d1\u63a7\u7ec4\u5185\u6d88\u8d39\u8005\u7684\u5fc3\u8df3\u548c\u6d88\u8d39\u8d85\u65f6\u3002<\/li>\n<li><strong>\u89e6\u53d1\u9636\u6bb5<\/strong>\uff1aCoordinator \u901a\u8fc7\u5fc3\u8df3\u54cd\u5e94\u7684\u65b9\u5f0f\u901a\u77e5\u6240\u6709 Consumer \u8fdb\u5165 Rebalance \u72b6\u6001\uff0cConsumer \u6536\u5230\u901a\u77e5\u540e\u505c\u6b62\u6d88\u8d39\u5e76\u91cd\u65b0\u5411 Coordinator \u8bf7\u6c42\u52a0\u5165 Consumer Group\u3002<\/li>\n<li><strong>\u5206\u914d\u9636\u6bb5<\/strong>\uff1aCoordinator \u6536\u96c6\u6240\u6709\u5b58\u6d3b\u6d88\u8d39\u8005\uff0c\u4ece\u4e2d<strong>\u9009\u4e3e\u4e00\u4e2a Leader Consumer<\/strong>\uff08\u4e0d\u662f Broker\uff09\uff0c\u7531\u8be5 Leader \u8d1f\u8d23\u5236\u5b9a Partition \u5206\u914d\u65b9\u6848\u3002<\/li>\n<li><strong>\u540c\u6b65\u9636\u6bb5<\/strong>\uff1aLeader Consumer \u5c06\u5206\u914d\u65b9\u6848\u5c01\u88c5\u6210 <code>SyncGroup<\/code> \u8bf7\u6c42\u53d1\u9001\u7ed9 Coordinator\uff0cCoordinator \u901a\u8fc7\u5fc3\u8df3\u54cd\u5e94\u5c06\u5206\u914d\u65b9\u6848\u4e0b\u53d1\u7ed9\u7ec4\u5185\u6240\u6709 Consumer\uff0c\u5404 Consumer \u6309\u65b9\u6848\u5f00\u59cb\u6d88\u8d39\u6307\u5b9a Partition\u3002<\/li>\n<\/ol>\n<h3>\u56db\u3001Rebalance \u5bfc\u81f4\u7684\u95ee\u9898\u4e0e Generation \u673a\u5236<\/h3>\n<ol start=\"11\">\n<li><strong>Rebalance \u5e26\u6765\u7684\u95ee\u9898<\/strong>\uff1a\u8d85\u65f6\u6d88\u8d39\u8005\u5728 Rebalance \u5b8c\u6210\u540e\u53ef\u80fd\u91cd\u65b0\u63d0\u4ea4 Offset\uff0c\u5bfc\u81f4\u6d88\u606f\u88ab\u91cd\u590d\u63d0\u4ea4\u6216\u6d88\u8d39\u8fdb\u5ea6\u6df7\u4e71\u3002<\/li>\n<li><strong>\u89e3\u51b3\u65b9\u6848\u2014\u2014Generation\uff08\u4ee3\u9645\uff09\u673a\u5236<\/strong>\uff1a\u6bcf\u6b21 Rebalance \u65f6 Coordinator \u751f\u6210\u4e00\u4e2a<strong>\u9012\u589e\u7684 Generation ID<\/strong>\uff0cConsumer \u63d0\u4ea4 Offset \u65f6\u5fc5\u987b\u9644\u5e26\u5f53\u524d\u7684 Generation ID\uff0cCoordinator \u53ea\u63a5\u53d7\u6700\u65b0\u7684 Generation ID \u7684 Offset \u63d0\u4ea4\uff0c\u62d2\u7edd\u65e7 Generation \u7684\u63d0\u4ea4\uff0c\u907f\u514d\u91cd\u590d\u6d88\u8d39\u6216\u8fdb\u5ea6\u9519\u4e71\u3002<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>01-\u9762\u5411\u5bf9\u8c61 \u4e00\u3001\u9762\u5411\u5bf9\u8c61 vs \u9762\u5411\u8fc7\u7a0b \u9762\u5411\u8fc7\u7a0b\u5c06\u4efb\u52a1\u62c6\u89e3\u6210\u4e00\u7cfb\u5217\u6b65\u9aa4\uff0c\u6bcf\u4e2a\u6b65\u9aa4\u5bf9\u5e94\u4e00\u4e2a\u51fd\u6570\uff0c\u6309\u987a\u5e8f\u6267\u884c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[17],"class_list":["post-401","post","type-post","status-publish","format-standard","hentry","category-java","tag-java"],"_links":{"self":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts\/401","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/comments?post=401"}],"version-history":[{"count":1,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts\/401\/revisions"}],"predecessor-version":[{"id":402,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/posts\/401\/revisions\/402"}],"wp:attachment":[{"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/media?parent=401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/categories?post=401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kirasu.cn\/index.php\/wp-json\/wp\/v2\/tags?post=401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}