{"id":193,"date":"2026-03-02T17:58:28","date_gmt":"2026-03-02T09:58:28","guid":{"rendered":"https:\/\/wp.988978.xyz\/?p=193"},"modified":"2026-03-02T17:58:29","modified_gmt":"2026-03-02T09:58:29","slug":"java%e9%9d%a2%e8%af%95","status":"publish","type":"post","link":"https:\/\/wp.988978.xyz\/?p=193","title":{"rendered":"java\u9762\u8bd5"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\ud83d\udcda&nbsp;<strong>Java\u57fa\u7840\u9762\u8bd5\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>\u9762\u5411\u5bf9\u8c61\u7279\u6027<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u5c01\u88c5<\/strong>\uff1a\u9690\u85cf\u5185\u90e8\u5b9e\u73b0\uff0c\u63d0\u4f9b\u516c\u5171\u8bbf\u95ee\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u7ee7\u627f<\/strong>\uff1a\u5b50\u7c7b\u7ee7\u627f\u7236\u7c7b\u7684\u5c5e\u6027\u548c\u65b9\u6cd5<\/li>\n\n\n\n<li><strong>\u591a\u6001<\/strong>\uff1a\u540c\u4e00\u64cd\u4f5c\u4f5c\u7528\u4e8e\u4e0d\u540c\u5bf9\u8c61\u4ea7\u751f\u4e0d\u540c\u6267\u884c\u7ed3\u679c<\/li>\n\n\n\n<li><strong>\u62bd\u8c61<\/strong>\uff1a\u9690\u85cf\u590d\u6742\u5b9e\u73b0\u7ec6\u8282\uff0c\u53ea\u5c55\u793a\u529f\u80fd\u5b9a\u4e49<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>String\u3001StringBuffer\u3001StringBuilder\u533a\u522b<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">String str = \"hello\"; <em>\/\/ \u4e0d\u53ef\u53d8\uff0c\u6bcf\u6b21\u4fee\u6539\u521b\u5efa\u65b0\u5bf9\u8c61<\/em>\nStringBuffer sb = new StringBuffer(); <em>\/\/ \u7ebf\u7a0b\u5b89\u5168\uff0c\u6548\u7387\u8f83\u4f4e<\/em>\nStringBuilder sbd = new StringBuilder(); <em>\/\/ \u7ebf\u7a0b\u4e0d\u5b89\u5168\uff0c\u6548\u7387\u6700\u9ad8<\/em><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>== \u548c equals() \u533a\u522b<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>==<\/strong>\uff1a\u6bd4\u8f83\u57fa\u672c\u7c7b\u578b\u503c\uff0c\u6216\u5f15\u7528\u7c7b\u578b\u7684\u5185\u5b58\u5730\u5740<\/li>\n\n\n\n<li><strong>equals()<\/strong>\uff1a\u9ed8\u8ba4\u6bd4\u8f83\u5730\u5740\uff0c\u53ef\u91cd\u5199\u4e3a\u6bd4\u8f83\u5185\u5bb9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4.&nbsp;<strong>Java\u96c6\u5408\u6846\u67b6<\/strong><\/h3>\n\n\n\n<p>text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Collection\n\u251c\u2500\u2500 List (\u6709\u5e8f\u53ef\u91cd\u590d)\n\u2502   \u251c\u2500\u2500 ArrayList (\u6570\u7ec4\u7ed3\u6784)\n\u2502   \u251c\u2500\u2500 LinkedList (\u53cc\u5411\u94fe\u8868)\n\u2502   \u2514\u2500\u2500 Vector (\u7ebf\u7a0b\u5b89\u5168)\n\u251c\u2500\u2500 Set (\u65e0\u5e8f\u552f\u4e00)\n\u2502   \u251c\u2500\u2500 HashSet (\u54c8\u5e0c\u8868)\n\u2502   \u2514\u2500\u2500 TreeSet (\u7ea2\u9ed1\u6811)\n\u2514\u2500\u2500 Queue (\u961f\u5217)\nMap\n\u251c\u2500\u2500 HashMap (\u975e\u7ebf\u7a0b\u5b89\u5168)\n\u251c\u2500\u2500 Hashtable (\u7ebf\u7a0b\u5b89\u5168)\n\u2514\u2500\u2500 ConcurrentHashMap (\u5206\u6bb5\u9501)<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80&nbsp;<strong>JVM\u9762\u8bd5\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>JVM\u5185\u5b58\u533a\u57df<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7a0b\u5e8f\u8ba1\u6570\u5668<\/strong>\uff1a\u7ebf\u7a0b\u79c1\u6709\uff0c\u8bb0\u5f55\u5f53\u524d\u7ebf\u7a0b\u6267\u884c\u4f4d\u7f6e<\/li>\n\n\n\n<li><strong>\u865a\u62df\u673a\u6808<\/strong>\uff1a\u5b58\u50a8\u5c40\u90e8\u53d8\u91cf\u8868\u3001\u64cd\u4f5c\u6570\u6808\u7b49<\/li>\n\n\n\n<li><strong>\u672c\u5730\u65b9\u6cd5\u6808<\/strong>\uff1a\u4e3aNative\u65b9\u6cd5\u670d\u52a1<\/li>\n\n\n\n<li><strong>\u5806<\/strong>\uff1a\u6240\u6709\u7ebf\u7a0b\u5171\u4eab\uff0c\u5b58\u50a8\u5bf9\u8c61\u5b9e\u4f8b<\/li>\n\n\n\n<li><strong>\u65b9\u6cd5\u533a<\/strong>\uff1a\u5b58\u50a8\u7c7b\u4fe1\u606f\u3001\u5e38\u91cf\u3001\u9759\u6001\u53d8\u91cf\u7b49<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>\u5783\u573e\u56de\u6536\u7b97\u6cd5<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6807\u8bb0-\u6e05\u9664<\/strong>\uff1a\u5148\u6807\u8bb0\u540e\u6e05\u9664\uff0c\u4ea7\u751f\u788e\u7247<\/li>\n\n\n\n<li><strong>\u590d\u5236\u7b97\u6cd5<\/strong>\uff1a\u5185\u5b58\u5bf9\u534a\u5206\uff0c\u9002\u5408\u65b0\u751f\u4ee3<\/li>\n\n\n\n<li><strong>\u6807\u8bb0-\u6574\u7406<\/strong>\uff1a\u6807\u8bb0\u540e\u6574\u7406\uff0c\u9002\u5408\u8001\u5e74\u4ee3<\/li>\n\n\n\n<li><strong>\u5206\u4ee3\u6536\u96c6<\/strong>\uff1a\u65b0\u751f\u4ee3\u590d\u5236\uff0c\u8001\u5e74\u4ee3\u6807\u8bb0\u6574\u7406<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>\u7c7b\u52a0\u8f7d\u673a\u5236<\/strong><\/h3>\n\n\n\n<p>text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u52a0\u8f7d \u2192 \u9a8c\u8bc1 \u2192 \u51c6\u5907 \u2192 \u89e3\u6790 \u2192 \u521d\u59cb\u5316 \u2192 \u4f7f\u7528 \u2192 \u5378\u8f7d<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u26a1&nbsp;<strong>\u5e76\u53d1\u7f16\u7a0b\u9762\u8bd5\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>\u7ebf\u7a0b\u521b\u5efa\u65b9\u5f0f<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>\/\/ \u65b9\u5f0f1\uff1a\u7ee7\u627fThread<\/em>\nclass MyThread extends Thread {\n    public void run() {}\n}\n\n<em>\/\/ \u65b9\u5f0f2\uff1a\u5b9e\u73b0Runnable<\/em>\nclass MyRunnable implements Runnable {\n    public void run() {}\n}\n\n<em>\/\/ \u65b9\u5f0f3\uff1a\u5b9e\u73b0Callable<\/em>\nclass MyCallable implements Callable&lt;String&gt; {\n    public String call() {}\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>synchronized \u548c Lock \u533a\u522b<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7279\u6027<\/th><th class=\"has-text-align-left\" data-align=\"left\">synchronized<\/th><th class=\"has-text-align-left\" data-align=\"left\">Lock<\/th><\/tr><\/thead><tbody><tr><td>\u4f7f\u7528\u65b9\u5f0f<\/td><td>\u5173\u952e\u5b57<\/td><td>\u63a5\u53e3<\/td><\/tr><tr><td>\u9501\u91ca\u653e<\/td><td>\u81ea\u52a8<\/td><td>\u624b\u52a8<\/td><\/tr><tr><td>\u4e2d\u65ad\u54cd\u5e94<\/td><td>\u4e0d\u652f\u6301<\/td><td>\u652f\u6301<\/td><\/tr><tr><td>\u516c\u5e73\u6027<\/td><td>\u975e\u516c\u5e73<\/td><td>\u53ef\u8bbe\u7f6e<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>volatile \u5173\u952e\u5b57<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u4fdd\u8bc1\u53ef\u89c1\u6027<\/li>\n\n\n\n<li>\u7981\u6b62\u6307\u4ee4\u91cd\u6392\u5e8f<\/li>\n\n\n\n<li>\u4e0d\u4fdd\u8bc1\u539f\u5b50\u6027<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfd7\ufe0f&nbsp;<strong>Spring\u6846\u67b6\u9762\u8bd5\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>IOC\u548cAOP<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>IOC<\/strong>\uff1a\u63a7\u5236\u53cd\u8f6c\uff0c\u5c06\u5bf9\u8c61\u521b\u5efa\u6743\u4ea4\u7ed9\u5bb9\u5668<\/li>\n\n\n\n<li><strong>DI<\/strong>\uff1a\u4f9d\u8d56\u6ce8\u5165\uff0c\u8fd0\u884c\u65f6\u52a8\u6001\u6ce8\u5165\u4f9d\u8d56<\/li>\n\n\n\n<li><strong>AOP<\/strong>\uff1a\u9762\u5411\u5207\u9762\u7f16\u7a0b\uff0c\u5b9e\u73b0\u6a2a\u5207\u5173\u6ce8\u70b9<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>Bean\u751f\u547d\u5468\u671f<\/strong><\/h3>\n\n\n\n<p>text<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u5b9e\u4f8b\u5316 \u2192 \u5c5e\u6027\u8d4b\u503c \u2192 \u521d\u59cb\u5316 \u2192 \u4f7f\u7528 \u2192 \u9500\u6bc1<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>Spring Boot \u81ea\u52a8\u914d\u7f6e<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@SpringBootApplication\n\u5305\u542b\u4e86\uff1a\n- @Configuration\uff1a\u6807\u8bb0\u914d\u7f6e\u7c7b\n- @EnableAutoConfiguration\uff1a\u542f\u7528\u81ea\u52a8\u914d\u7f6e\n- @ComponentScan\uff1a\u7ec4\u4ef6\u626b\u63cf<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\uddc3\ufe0f&nbsp;<strong>\u6570\u636e\u5e93\u9762\u8bd5\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>MySQL\u7d22\u5f15<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>B+\u6811\u7d22\u5f15<\/strong>\uff1a\u6700\u5e38\u7528\uff0c\u652f\u6301\u8303\u56f4\u67e5\u8be2<\/li>\n\n\n\n<li><strong>\u54c8\u5e0c\u7d22\u5f15<\/strong>\uff1a\u7cbe\u786e\u67e5\u8be2\u5feb\uff0c\u4e0d\u652f\u6301\u8303\u56f4<\/li>\n\n\n\n<li><strong>\u5168\u6587\u7d22\u5f15<\/strong>\uff1a\u6587\u672c\u641c\u7d22<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>\u4e8b\u52a1\u7279\u6027\uff08ACID\uff09<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u539f\u5b50\u6027<\/strong>\uff1a\u8981\u4e48\u5168\u6210\u529f\uff0c\u8981\u4e48\u5168\u5931\u8d25<\/li>\n\n\n\n<li><strong>\u4e00\u81f4\u6027<\/strong>\uff1a\u4e8b\u52a1\u524d\u540e\u6570\u636e\u5b8c\u6574<\/li>\n\n\n\n<li><strong>\u9694\u79bb\u6027<\/strong>\uff1a\u4e8b\u52a1\u95f4\u4e92\u4e0d\u5e72\u6270<\/li>\n\n\n\n<li><strong>\u6301\u4e45\u6027<\/strong>\uff1a\u63d0\u4ea4\u540e\u6c38\u4e45\u4fdd\u5b58<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>\u9694\u79bb\u7ea7\u522b<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u7ea7\u522b<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u810f\u8bfb<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u4e0d\u53ef\u91cd\u590d\u8bfb<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u5e7b\u8bfb<\/th><\/tr><\/thead><tbody><tr><td>\u8bfb\u672a\u63d0\u4ea4<\/td><td>\u2705<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>\u8bfb\u5df2\u63d0\u4ea4<\/td><td>\u274c<\/td><td>\u2705<\/td><td>\u2705<\/td><\/tr><tr><td>\u53ef\u91cd\u590d\u8bfb<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u2705<\/td><\/tr><tr><td>\u4e32\u884c\u5316<\/td><td>\u274c<\/td><td>\u274c<\/td><td>\u274c<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>\u5e38\u7528\u6846\u67b6\u9762\u8bd5\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>MyBatis<\/strong><\/h3>\n\n\n\n<p>xml<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>&lt;!-- #{} \u548c ${} \u533a\u522b --&gt;<\/em>\n#{}: \u9884\u7f16\u8bd1\uff0c\u9632\u6b62SQL\u6ce8\u5165\n${}: \u76f4\u63a5\u62fc\u63a5\uff0c\u6709SQL\u6ce8\u5165\u98ce\u9669<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>Redis<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6570\u636e\u7c7b\u578b<\/strong>\uff1aString\u3001Hash\u3001List\u3001Set\u3001ZSet<\/li>\n\n\n\n<li><strong>\u6301\u4e45\u5316<\/strong>\uff1aRDB\uff08\u5feb\u7167\uff09\u3001AOF\uff08\u65e5\u5fd7\uff09<\/li>\n\n\n\n<li><strong>\u7f13\u5b58\u95ee\u9898<\/strong>\uff1a\u7a7f\u900f\u3001\u51fb\u7a7f\u3001\u96ea\u5d29<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcdd&nbsp;<strong>\u9ad8\u9891\u573a\u666f\u9898<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>\u5355\u4f8b\u6a21\u5f0f\u5b9e\u73b0<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class Singleton {\n    private static volatile Singleton instance;\n    \n    private Singleton() {}\n    \n    public static Singleton getInstance() {\n        if (instance == null) {\n            synchronized (Singleton.class) {\n                if (instance == null) {\n                    instance = new Singleton();\n                }\n            }\n        }\n        return instance;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>HashMap\u5b9e\u73b0\u539f\u7406<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6570\u7ec4+\u94fe\u8868+\u7ea2\u9ed1\u6811<\/li>\n\n\n\n<li>\u6270\u52a8\u51fd\u6570\u51cf\u5c11\u78b0\u649e<\/li>\n\n\n\n<li>\u6269\u5bb9\u673a\u5236\uff1a2\u7684\u5e42\u6b21<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udca1&nbsp;<strong>\u9762\u8bd5\u6280\u5de7<\/strong><\/h2>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li><strong>STAR\u539f\u5219<\/strong>\u56de\u7b54\u95ee\u9898\n<ul class=\"wp-block-list\">\n<li>Situation\uff1a\u80cc\u666f<\/li>\n\n\n\n<li>Task\uff1a\u4efb\u52a1<\/li>\n\n\n\n<li>Action\uff1a\u884c\u52a8<\/li>\n\n\n\n<li>Result\uff1a\u7ed3\u679c<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4ee3\u7801\u89c4\u8303<\/strong>\u4f53\u73b0\u4e13\u4e1a\u6027\n<ul class=\"wp-block-list\">\n<li>\u547d\u540d\u89c4\u8303<\/li>\n\n\n\n<li>\u5f02\u5e38\u5904\u7406<\/li>\n\n\n\n<li>\u6ce8\u91ca\u6e05\u6670<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u4e3b\u52a8\u5c55\u793a<\/strong>\u4eae\u70b9\n<ul class=\"wp-block-list\">\n<li>\u6027\u80fd\u4f18\u5316\u7ecf\u9a8c<\/li>\n\n\n\n<li>\u95ee\u9898\u89e3\u51b3\u6848\u4f8b<\/li>\n\n\n\n<li>\u6280\u672f\u94bb\u7814\u6df1\u5ea6<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>\u9700\u8981\u6211\u8be6\u7ec6\u5c55\u5f00\u67d0\u4e2a\u90e8\u5206\u5417\uff1f\u6216\u8005\u4f60\u6709\u7279\u5b9a\u7684\u9762\u8bd5\u76ee\u6807\uff08\u5982\u521d\u7ea7\u3001\u4e2d\u7ea7\u3001\u9ad8\u7ea7\uff09\uff1f<\/strong><\/p>\n\n\n\n<p>\u90fd\u5c55\u5f00\u8bf4\u4e00\u4e0b\uff0c\u6211\u6700\u8fd1\u8981\u9762\u8bd5\u9700\u8981\u590d\u4e60<\/p>\n\n\n\n<p>\u597d\u7684\uff0c\u6211\u6765\u8be6\u7ec6\u5c55\u5f00\u6bcf\u4e2a\u90e8\u5206\uff0c\u5e2e\u52a9\u4f60\u5168\u9762\u590d\u4e60Java\u9762\u8bd5\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcda&nbsp;<strong>\u4e00\u3001Java\u57fa\u7840\uff08\u6df1\u5ea6\u5c55\u5f00\uff09<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>\u9762\u5411\u5bf9\u8c61\u4e09\u5927\u7279\u6027\u8be6\u89e3<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u5c01\u88c5<\/strong><\/h4>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class User {\n    <em>\/\/ \u79c1\u6709\u5c5e\u6027\uff0c\u9690\u85cf\u5185\u90e8\u72b6\u6001<\/em>\n    private String name;\n    private int age;\n    private List&lt;String&gt; permissions;\n    \n    <em>\/\/ \u63d0\u4f9b\u516c\u5171\u8bbf\u95ee\u65b9\u6cd5<\/em>\n    public String getName() {\n        return name;\n    }\n    \n    <em>\/\/ \u53ef\u4ee5\u5728setter\u4e2d\u6dfb\u52a0\u6821\u9a8c\u903b\u8f91<\/em>\n    public void setAge(int age) {\n        if (age &lt; 0 || age &gt; 150) {\n            throw new IllegalArgumentException(\"\u5e74\u9f84\u4e0d\u5408\u6cd5\");\n        }\n        this.age = age;\n    }\n    \n    <em>\/\/ \u63d0\u4f9b\u4e1a\u52a1\u65b9\u6cd5\uff0c\u4e0d\u76f4\u63a5\u66b4\u9732\u5185\u90e8\u96c6\u5408<\/em>\n    public void addPermission(String permission) {\n        if (permissions == null) {\n            permissions = new ArrayList&lt;&gt;();\n        }\n        <em>\/\/ \u53ef\u4ee5\u6dfb\u52a0\u6743\u9650\u6821\u9a8c\u903b\u8f91<\/em>\n        permissions.add(permission);\n    }\n    \n    <em>\/\/ \u8fd4\u56de\u4e0d\u53ef\u4fee\u6539\u7684\u96c6\u5408\uff0c\u4fdd\u62a4\u5185\u90e8\u6570\u636e<\/em>\n    public List&lt;String&gt; getPermissions() {\n        return Collections.unmodifiableList(permissions);\n    }\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u7ee7\u627f\u7684\u7ec6\u8282<\/strong><\/h4>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>\/\/ \u62bd\u8c61\u7c7b\uff1a\u53ef\u4ee5\u6709\u62bd\u8c61\u65b9\u6cd5\u548c\u5177\u4f53\u65b9\u6cd5<\/em>\npublic abstract class Animal {\n    protected String name;\n    \n    <em>\/\/ \u62bd\u8c61\u65b9\u6cd5\uff1a\u5b50\u7c7b\u5fc5\u987b\u5b9e\u73b0<\/em>\n    public abstract void makeSound();\n    \n    <em>\/\/ \u5177\u4f53\u65b9\u6cd5\uff1a\u5b50\u7c7b\u53ef\u4ee5\u7ee7\u627f<\/em>\n    public void eat() {\n        System.out.println(name + \"\u6b63\u5728\u5403\u4e1c\u897f\");\n    }\n    \n    <em>\/\/ final\u65b9\u6cd5\uff1a\u5b50\u7c7b\u4e0d\u80fd\u91cd\u5199<\/em>\n    public final void sleep() {\n        System.out.println(\"\u7761\u89c9\u4e2d...\");\n    }\n}\n\n<em>\/\/ \u7ee7\u627f\u7684\u5173\u952e\u70b9<\/em>\npublic class Dog extends Animal {\n    <em>\/\/ \u5fc5\u987b\u5b9e\u73b0\u62bd\u8c61\u65b9\u6cd5<\/em>\n    @Override\n    public void makeSound() {\n        System.out.println(\"\u6c6a\u6c6a\u6c6a\");\n    }\n    \n    <em>\/\/ \u53ef\u4ee5\u91cd\u5199\u7236\u7c7b\u65b9\u6cd5<\/em>\n    @Override\n    public void eat() {\n        super.eat(); <em>\/\/ \u8c03\u7528\u7236\u7c7b\u65b9\u6cd5<\/em>\n        System.out.println(\"\u72d7\u5543\u9aa8\u5934\");\n    }\n    \n    <em>\/\/ \u4e0d\u80fd\u91cd\u5199final\u65b9\u6cd5<\/em>\n    <em>\/\/ public void sleep() {} \/\/ \u7f16\u8bd1\u9519\u8bef<\/em>\n}<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>\u591a\u6001\u7684\u4e09\u79cd\u5f62\u5f0f<\/strong><\/h4>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class PolymorphismDemo {\n    public static void main(String[] args) {\n        <em>\/\/ 1. \u7f16\u8bd1\u65f6\u591a\u6001\uff08\u65b9\u6cd5\u91cd\u8f7d\uff09<\/em>\n        Calculator calc = new Calculator();\n        calc.add(1, 2);           <em>\/\/ \u4e24\u4e2a\u6574\u6570<\/em>\n        calc.add(1.0, 2.0);        <em>\/\/ \u4e24\u4e2a\u6d6e\u70b9\u6570<\/em>\n        calc.add(1, 2, 3);         <em>\/\/ \u4e09\u4e2a\u6574\u6570<\/em>\n        \n        <em>\/\/ 2. \u8fd0\u884c\u65f6\u591a\u6001\uff08\u65b9\u6cd5\u91cd\u5199\uff09<\/em>\n        Animal animal1 = new Dog();\n        Animal animal2 = new Cat();\n        animal1.makeSound(); <em>\/\/ \u8f93\u51fa\uff1a\u6c6a\u6c6a\u6c6a<\/em>\n        animal2.makeSound(); <em>\/\/ \u8f93\u51fa\uff1a\u55b5\u55b5\u55b5<\/em>\n        \n        <em>\/\/ 3. \u53c2\u6570\u591a\u6001\uff08\u6cdb\u578b\uff09<\/em>\n        List&lt;String&gt; stringList = new ArrayList&lt;&gt;();\n        List&lt;Integer&gt; intList = new ArrayList&lt;&gt;();\n    }\n}\n\nclass Calculator {\n    <em>\/\/ \u65b9\u6cd5\u91cd\u8f7d\uff1a\u53c2\u6570\u4e2a\u6570\u4e0d\u540c<\/em>\n    public int add(int a, int b) {\n        return a + b;\n    }\n    \n    <em>\/\/ \u65b9\u6cd5\u91cd\u8f7d\uff1a\u53c2\u6570\u7c7b\u578b\u4e0d\u540c<\/em>\n    public double add(double a, double b) {\n        return a + b;\n    }\n    \n    <em>\/\/ \u65b9\u6cd5\u91cd\u8f7d\uff1a\u53c2\u6570\u4e2a\u6570\u4e0d\u540c<\/em>\n    public int add(int a, int b, int c) {\n        return a + b + c;\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>String\u6df1\u5ea6\u89e3\u6790<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class StringDeepDive {\n    public static void main(String[] args) {\n        <em>\/\/ 1. \u5b57\u7b26\u4e32\u5e38\u91cf\u6c60<\/em>\n        String s1 = \"hello\";\n        String s2 = \"hello\";\n        String s3 = new String(\"hello\");\n        String s4 = s3.intern(); <em>\/\/ \u624b\u52a8\u5165\u6c60<\/em>\n        \n        System.out.println(s1 == s2);      <em>\/\/ true\uff08\u540c\u4e00\u4e2a\u5e38\u91cf\u6c60\u5bf9\u8c61\uff09<\/em>\n        System.out.println(s1 == s3);      <em>\/\/ false\uff08\u5806\u4e2d\u65b0\u5bf9\u8c61\uff09<\/em>\n        System.out.println(s1 == s4);      <em>\/\/ true\uff08\u8fd4\u56de\u5e38\u91cf\u6c60\u5bf9\u8c61\uff09<\/em>\n        \n        <em>\/\/ 2. \u5b57\u7b26\u4e32\u62fc\u63a5\u4f18\u5316<\/em>\n        String str1 = \"a\" + \"b\" + \"c\";     <em>\/\/ \u7f16\u8bd1\u671f\u4f18\u5316\u4e3a\"abc\"<\/em>\n        String str2 = \"a\";\n        String str3 = str2 + \"b\";           <em>\/\/ \u8fd0\u884c\u65f6\u4f7f\u7528StringBuilder<\/em>\n        \n        <em>\/\/ 3. \u5faa\u73af\u4e2d\u62fc\u63a5\u5b57\u7b26\u4e32\u7684\u6b63\u786e\u65b9\u5f0f<\/em>\n        <em>\/\/ \u9519\u8bef\u65b9\u5f0f\uff1a\u6bcf\u6b21\u5faa\u73af\u521b\u5efaStringBuilder<\/em>\n        String result = \"\";\n        for (int i = 0; i &lt; 1000; i++) {\n            result += i;  <em>\/\/ \u6bcf\u6b21\u90fd\u4f1a\u521b\u5efa\u65b0\u5bf9\u8c61<\/em>\n        }\n        \n        <em>\/\/ \u6b63\u786e\u65b9\u5f0f<\/em>\n        StringBuilder sb = new StringBuilder();\n        for (int i = 0; i &lt; 1000; i++) {\n            sb.append(i);\n        }\n        String correct = sb.toString();\n        \n        <em>\/\/ 4. String\u4e0d\u53ef\u53d8\u6027\u7684\u597d\u5904<\/em>\n        <em>\/\/ - \u7ebf\u7a0b\u5b89\u5168\uff1a\u53ef\u4ee5\u65e0\u9501\u5171\u4eab<\/em>\n        <em>\/\/ - \u7f13\u5b58hash\u503c\uff1aString\u7684hashCode\u53ea\u8ba1\u7b97\u4e00\u6b21<\/em>\n        <em>\/\/ - \u5b57\u7b26\u4e32\u5e38\u91cf\u6c60\uff1a\u590d\u7528\u5bf9\u8c61\u8282\u7701\u5185\u5b58<\/em>\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>\u96c6\u5408\u6846\u67b6\u6e90\u7801\u7ea7\u7406\u89e3<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>HashMap\u6e90\u7801\u89e3\u6790<\/strong><\/h4>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class HashMapSourceAnalysis {\n    <em>\/\/ 1. \u91cd\u8981\u53c2\u6570<\/em>\n    static final int DEFAULT_INITIAL_CAPACITY = 1 &lt;&lt; 4; <em>\/\/ 16<\/em>\n    static final float DEFAULT_LOAD_FACTOR = 0.75f;\n    static final int TREEIFY_THRESHOLD = 8;  <em>\/\/ \u94fe\u8868\u8f6c\u7ea2\u9ed1\u6811\u9608\u503c<\/em>\n    static final int UNTREEIFY_THRESHOLD = 6; <em>\/\/ \u7ea2\u9ed1\u6811\u8f6c\u94fe\u8868\u9608\u503c<\/em>\n    \n    <em>\/\/ 2. put\u65b9\u6cd5\u6d41\u7a0b<\/em>\n    <em>\/*<\/em>\n     * 1. \u8ba1\u7b97key\u7684hash\u503c\uff1akey.hashCode() ^ (key.hashCode() &gt;&gt;&gt; 16)\n     * 2. \u5982\u679ctable\u4e3a\u7a7a\uff0c\u8fdb\u884cresize()\u521d\u59cb\u5316\n     * 3. \u8ba1\u7b97\u7d22\u5f15\uff1ai = (n - 1) &amp; hash\n     * 4. \u5982\u679c\u4f4d\u7f6e\u4e3a\u7a7a\uff0c\u76f4\u63a5\u63d2\u5165\n     * 5. \u5982\u679c\u4e0d\u4e3a\u7a7a\uff0c\u5224\u65adkey\u662f\u5426\u76f8\u7b49\n     * 6. \u5982\u679c\u662f\u6811\u8282\u70b9\uff0c\u8c03\u7528\u7ea2\u9ed1\u6811\u63d2\u5165\n     * 7. \u5982\u679c\u662f\u94fe\u8868\uff0c\u904d\u5386\u67e5\u627e\uff0c\u5982\u679c\u627e\u5230\u5219\u66ff\u6362\uff0c\u5426\u5219\u5728\u94fe\u8868\u5c3e\u90e8\u63d2\u5165\n     * 8. \u63d2\u5165\u540e\u68c0\u67e5\u94fe\u8868\u957f\u5ea6\u662f\u5426\u8d85\u8fc78\uff0c\u8d85\u8fc7\u8f6c\u7ea2\u9ed1\u6811\n     * 9. \u68c0\u67e5size\u662f\u5426\u8d85\u8fc7threshold\uff0c\u8d85\u8fc7\u5219resize()\u6269\u5bb9\n     *\/\n    \n    <em>\/\/ 3. get\u65b9\u6cd5\u6d41\u7a0b<\/em>\n    <em>\/*<\/em>\n     * 1. \u8ba1\u7b97hash\u503c\n     * 2. \u8ba1\u7b97\u7d22\u5f15\n     * 3. \u68c0\u67e5\u7b2c\u4e00\u4e2a\u8282\u70b9\uff0c\u5982\u679ckey\u76f8\u7b49\u5219\u8fd4\u56de\n     * 4. \u5982\u679c\u4e0d\u76f8\u7b49\uff0c\u68c0\u67e5\u662f\u6811\u8282\u70b9\u8fd8\u662f\u94fe\u8868\u8282\u70b9\n     * 5. \u6811\u8282\u70b9\u8c03\u7528\u6811\u7684\u67e5\u627e\u65b9\u6cd5\n     * 6. \u94fe\u8868\u8282\u70b9\u904d\u5386\u67e5\u627e\n     *\/\n    \n    <em>\/\/ 4. \u6269\u5bb9\u673a\u5236<\/em>\n    <em>\/*<\/em>\n     * 1. \u65b0\u5bb9\u91cf = \u65e7\u5bb9\u91cf * 2\n     * 2. \u521b\u5efa\u65b0\u6570\u7ec4\uff0c\u5bb9\u91cf\u4e3a\u65e7\u6570\u7ec42\u500d\n     * 3. \u91cd\u65b0\u8ba1\u7b97\u7d22\u5f15\uff1a\u5143\u7d20\u5728\u65b0\u6570\u7ec4\u7684\u4f4d\u7f6e\u8981\u4e48\u662f\u539f\u4f4d\u7f6e\uff0c\u8981\u4e48\u662f\u539f\u4f4d\u7f6e+\u65e7\u5bb9\u91cf\n     * 4. \u56e0\u4e3ahash &amp; oldCap == 0\u7684\u5224\u65ad\n     *\/\n}\n\n<em>\/\/ ConcurrentHashMap\u6e90\u7801\u7279\u70b9<\/em>\npublic class ConcurrentHashMapFeatures {\n    <em>\/*<\/em>\n     * JDK7\uff1a\u5206\u6bb5\u9501\u673a\u5236\n     * - \u5185\u90e8\u4f7f\u7528Segment\u6570\u7ec4\uff0c\u6bcf\u4e2aSegment\u7ee7\u627fReentrantLock\n     * - \u9ed8\u8ba416\u4e2aSegment\uff0c\u652f\u630116\u4e2a\u7ebf\u7a0b\u5e76\u53d1\u5199\u5165\n     * \n     * JDK8\uff1aCAS + synchronized\n     * - \u629b\u5f03\u5206\u6bb5\u9501\uff0c\u4f7f\u7528CAS + synchronized\u5b9e\u73b0\n     * - \u9501\u7c92\u5ea6\u66f4\u7ec6\uff1a\u53ea\u9501\u94fe\u8868\u6216\u7ea2\u9ed1\u6811\u7684\u5934\u8282\u70b9\n     * - \u5e76\u53d1\u5ea6\u66f4\u9ad8\n     * \n     * \u91cd\u8981\u65b9\u6cd5\uff1a\n     * - put\uff1a\u5148\u5c1d\u8bd5CAS\u63d2\u5165\uff0c\u5931\u8d25\u5219synchronized\u9501\u5934\u8282\u70b9\n     * - get\uff1a\u4e0d\u52a0\u9501\uff0c\u4f7f\u7528volatile\u4fdd\u8bc1\u53ef\u89c1\u6027\n     * - size\uff1a\u4f7f\u7528CounterCell\u6570\u7ec4\u964d\u4f4e\u7ade\u4e89\n     *\/\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80&nbsp;<strong>\u4e8c\u3001JVM\u6df1\u5ea6\u89e3\u6790<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>JVM\u5185\u5b58\u533a\u57df\u8be6\u89e3<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class JVMMemoryAreas {\n    <em>\/*<\/em>\n     * 1. \u7a0b\u5e8f\u8ba1\u6570\u5668\uff08\u7ebf\u7a0b\u79c1\u6709\uff09\n     * - \u8bb0\u5f55\u5f53\u524d\u7ebf\u7a0b\u6267\u884c\u7684\u5b57\u8282\u7801\u6307\u4ee4\u5730\u5740\n     * - \u552f\u4e00\u4e0d\u4f1aOOM\u7684\u533a\u57df\n     * \n     * 2. Java\u865a\u62df\u673a\u6808\uff08\u7ebf\u7a0b\u79c1\u6709\uff09\n     * - \u6bcf\u4e2a\u65b9\u6cd5\u8c03\u7528\u521b\u5efa\u4e00\u4e2a\u6808\u5e27\n     * - \u6808\u5e27\u5305\u542b\uff1a\u5c40\u90e8\u53d8\u91cf\u8868\u3001\u64cd\u4f5c\u6570\u6808\u3001\u52a8\u6001\u94fe\u63a5\u3001\u65b9\u6cd5\u51fa\u53e3\n     * - StackOverflowError\uff1a\u6808\u6df1\u5ea6\u8d85\u8fc7\u9650\u5236\n     * - OutOfMemoryError\uff1a\u52a8\u6001\u6269\u5c55\u65f6\u65e0\u6cd5\u7533\u8bf7\u8db3\u591f\u5185\u5b58\n     * \n     * 3. \u672c\u5730\u65b9\u6cd5\u6808\uff08\u7ebf\u7a0b\u79c1\u6709\uff09\n     * - \u4e3aNative\u65b9\u6cd5\u670d\u52a1\n     * - HotSpot\u5c06\u865a\u62df\u673a\u6808\u548c\u672c\u5730\u65b9\u6cd5\u6808\u5408\u4e8c\u4e3a\u4e00\n     * \n     * 4. Java\u5806\uff08\u7ebf\u7a0b\u5171\u4eab\uff09\n     * - \u5b58\u653e\u5bf9\u8c61\u5b9e\u4f8b\n     * - \u5783\u573e\u56de\u6536\u7684\u4e3b\u8981\u533a\u57df\n     * - \u5206\u4ee3\uff1a\u65b0\u751f\u4ee3\uff08Eden\u3001Survivor0\u3001Survivor1\uff09\u3001\u8001\u5e74\u4ee3\n     * - OutOfMemoryError\uff1a\u6ca1\u6709\u5185\u5b58\u5b8c\u6210\u5b9e\u4f8b\u5206\u914d\n     * \n     * 5. \u65b9\u6cd5\u533a\uff08\u7ebf\u7a0b\u5171\u4eab\uff09\n     * - \u5b58\u50a8\u7c7b\u4fe1\u606f\u3001\u5e38\u91cf\u3001\u9759\u6001\u53d8\u91cf\u3001\u5373\u65f6\u7f16\u8bd1\u540e\u7684\u4ee3\u7801\n     * - \u6c38\u4e45\u4ee3\uff08JDK7\uff09 \/ \u5143\u7a7a\u95f4\uff08JDK8\uff09\n     * - \u8fd0\u884c\u65f6\u5e38\u91cf\u6c60\uff1aClass\u6587\u4ef6\u4e2d\u7684\u5e38\u91cf\u6c60\n     * - OutOfMemoryError\uff1a\u65e0\u6cd5\u6ee1\u8db3\u5185\u5b58\u5206\u914d\u9700\u6c42\n     *\/\n    \n    <em>\/\/ \u5185\u5b58\u5206\u914d\u793a\u4f8b<\/em>\n    public void memoryAllocationDemo() {\n        <em>\/\/ \u5bf9\u8c61\u5728Eden\u533a\u5206\u914d<\/em>\n        byte[] allocation1 = new byte[2 * 1024 * 1024]; <em>\/\/ 2MB<\/em>\n        \n        <em>\/\/ \u5927\u5bf9\u8c61\u76f4\u63a5\u8fdb\u5165\u8001\u5e74\u4ee3<\/em>\n        <em>\/\/ -XX:PretenureSizeThreshold=3M<\/em>\n        byte[] allocation2 = new byte[4 * 1024 * 1024]; <em>\/\/ 4MB<\/em>\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>\u5783\u573e\u56de\u6536\u6df1\u5165\u7406\u89e3<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class GarbageCollectionDeepDive {\n    <em>\/*<\/em>\n     * 1. \u5224\u65ad\u5bf9\u8c61\u662f\u5426\u53ef\u56de\u6536\n     * - \u5f15\u7528\u8ba1\u6570\u6cd5\uff08\u65e0\u6cd5\u89e3\u51b3\u5faa\u73af\u5f15\u7528\uff09\n     * - \u53ef\u8fbe\u6027\u5206\u6790\uff08GC Roots\uff09\n     *   GC Roots\u5305\u62ec\uff1a\n     *   - \u865a\u62df\u673a\u6808\u5f15\u7528\u7684\u5bf9\u8c61\n     *   - \u65b9\u6cd5\u533a\u9759\u6001\u5c5e\u6027\u5f15\u7528\u7684\u5bf9\u8c61\n     *   - \u65b9\u6cd5\u533a\u5e38\u91cf\u5f15\u7528\u7684\u5bf9\u8c61\n     *   - \u672c\u5730\u65b9\u6cd5\u6808JNI\u5f15\u7528\u7684\u5bf9\u8c61\n     *\/\n    \n    <em>\/\/ \u5faa\u73af\u5f15\u7528\u793a\u4f8b<\/em>\n    public void circularReferenceDemo() {\n        class Node {\n            Node next;\n        }\n        Node a = new Node();\n        Node b = new Node();\n        a.next = b;\n        b.next = a;\n        a = null;\n        b = null;\n        <em>\/\/ \u5373\u4f7f\u5faa\u73af\u5f15\u7528\uff0cGC Roots\u4e0d\u53ef\u8fbe\uff0c\u4ecd\u4f1a\u88ab\u56de\u6536<\/em>\n    }\n    \n    <em>\/*<\/em>\n     * 2. \u5783\u573e\u6536\u96c6\u7b97\u6cd5\n     * \n     * \u6807\u8bb0-\u6e05\u9664\u7b97\u6cd5\n     * \u4f18\u70b9\uff1a\u5b9e\u73b0\u7b80\u5355\n     * \u7f3a\u70b9\uff1a\u4ea7\u751f\u5185\u5b58\u788e\u7247\u3001\u6548\u7387\u4e0d\u9ad8\n     * \n     * \u590d\u5236\u7b97\u6cd5\uff08\u65b0\u751f\u4ee3\uff09\n     * \u539f\u7406\uff1a\u5c06\u5185\u5b58\u5206\u4e3a\u4e24\u5757\uff0c\u53ea\u4f7f\u7528\u4e00\u5757\uff0c\u56de\u6536\u65f6\u5c06\u5b58\u6d3b\u5bf9\u8c61\u590d\u5236\u5230\u53e6\u4e00\u5757\n     * \u4f18\u70b9\uff1a\u4e0d\u4f1a\u4ea7\u751f\u788e\u7247\uff0c\u5b9e\u73b0\u7b80\u5355\n     * \u7f3a\u70b9\uff1a\u5185\u5b58\u5229\u7528\u7387\u53ea\u670950%\n     * \n     * \u6807\u8bb0-\u6574\u7406\u7b97\u6cd5\uff08\u8001\u5e74\u4ee3\uff09\n     * \u539f\u7406\uff1a\u6807\u8bb0\u540e\uff0c\u5c06\u6240\u6709\u5b58\u6d3b\u5bf9\u8c61\u5411\u4e00\u7aef\u79fb\u52a8\n     * \u4f18\u70b9\uff1a\u6ca1\u6709\u5185\u5b58\u788e\u7247\n     * \u7f3a\u70b9\uff1a\u79fb\u52a8\u5bf9\u8c61\u9700\u8981Stop The World\n     * \n     * \u5206\u4ee3\u6536\u96c6\u7b97\u6cd5\n     * \u65b0\u751f\u4ee3\uff1a\u590d\u5236\u7b97\u6cd5\uff08\u5bf9\u8c61\u5b58\u6d3b\u7387\u4f4e\uff09\n     * \u8001\u5e74\u4ee3\uff1a\u6807\u8bb0-\u6e05\u9664\u6216\u6807\u8bb0-\u6574\u7406\uff08\u5bf9\u8c61\u5b58\u6d3b\u7387\u9ad8\uff09\n     *\/\n    \n    <em>\/*<\/em>\n     * 3. \u5783\u573e\u6536\u96c6\u5668\u8be6\u89e3\n     * \n     * Serial\u6536\u96c6\u5668\n     * - \u5355\u7ebf\u7a0b\uff0cClient\u6a21\u5f0f\u9ed8\u8ba4\n     * - \u8fdb\u884c\u5783\u573e\u56de\u6536\u65f6\uff0c\u5fc5\u987b\u6682\u505c\u6240\u6709\u5de5\u4f5c\u7ebf\u7a0b\n     * \n     * ParNew\u6536\u96c6\u5668\n     * - Serial\u7684\u591a\u7ebf\u7a0b\u7248\u672c\uff0cServer\u6a21\u5f0f\u9996\u9009\n     * - \u53ea\u6709\u5b83\u80fd\u4e0eCMS\u914d\u5408\u5de5\u4f5c\n     * \n     * Parallel Scavenge\u6536\u96c6\u5668\n     * - \u76ee\u6807\u662f\u8fbe\u5230\u53ef\u63a7\u5236\u7684\u541e\u5410\u91cf\n     * - \u81ea\u9002\u5e94\u8c03\u8282\u7b56\u7565\n     * \n     * Serial Old\u6536\u96c6\u5668\n     * - Serial\u7684\u8001\u5e74\u4ee3\u7248\u672c\uff0c\u6807\u8bb0-\u6574\u7406\u7b97\u6cd5\n     * \n     * Parallel Old\u6536\u96c6\u5668\n     * - Parallel Scavenge\u7684\u8001\u5e74\u4ee3\u7248\u672c\n     * - JDK1.6\u5f00\u59cb\u63d0\u4f9b\n     * \n     * CMS\u6536\u96c6\u5668\n     * - \u4ee5\u83b7\u53d6\u6700\u77ed\u56de\u6536\u505c\u987f\u65f6\u95f4\u4e3a\u76ee\u6807\n     * - \u6d41\u7a0b\uff1a\u521d\u59cb\u6807\u8bb0(STW) \u2192 \u5e76\u53d1\u6807\u8bb0 \u2192 \u91cd\u65b0\u6807\u8bb0(STW) \u2192 \u5e76\u53d1\u6e05\u9664\n     * - \u7f3a\u70b9\uff1aCPU\u654f\u611f\u3001\u6d6e\u52a8\u5783\u573e\u3001\u7a7a\u95f4\u788e\u7247\n     * \n     * G1\u6536\u96c6\u5668\n     * - \u9762\u5411\u670d\u52a1\u7aef\uff0cJDK9+\u9ed8\u8ba4\n     * - \u5c06\u5806\u5212\u5206\u4e3a\u591a\u4e2aRegion\n     * - \u53ef\u9884\u6d4b\u7684\u505c\u987f\u65f6\u95f4\u6a21\u578b\n     *\/\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>\u7c7b\u52a0\u8f7d\u673a\u5236\u8be6\u89e3<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class ClassLoaderDeepDive {\n    <em>\/*<\/em>\n     * 1. \u7c7b\u52a0\u8f7d\u5168\u8fc7\u7a0b\n     * \n     * \u52a0\u8f7d\uff1a\n     * - \u901a\u8fc7\u7c7b\u7684\u5168\u9650\u5b9a\u540d\u83b7\u53d6\u4e8c\u8fdb\u5236\u5b57\u8282\u6d41\n     * - \u5c06\u5b57\u8282\u6d41\u9759\u6001\u5b58\u50a8\u7ed3\u6784\u8f6c\u6362\u4e3a\u65b9\u6cd5\u533a\u8fd0\u884c\u65f6\u6570\u636e\u7ed3\u6784\n     * - \u751f\u6210Class\u5bf9\u8c61\u4f5c\u4e3a\u65b9\u6cd5\u533a\u8fd9\u4e2a\u7c7b\u7684\u8bbf\u95ee\u5165\u53e3\n     * \n     * \u9a8c\u8bc1\uff1a\n     * - \u6587\u4ef6\u683c\u5f0f\u9a8c\u8bc1\uff08\u9b54\u6570\u3001\u7248\u672c\u53f7\u7b49\uff09\n     * - \u5143\u6570\u636e\u9a8c\u8bc1\uff08\u662f\u5426\u6709\u7236\u7c7b\u3001\u662f\u5426\u7ee7\u627ffinal\u7c7b\u7b49\uff09\n     * - \u5b57\u8282\u7801\u9a8c\u8bc1\uff08\u6570\u636e\u6d41\u548c\u63a7\u5236\u6d41\u5206\u6790\uff09\n     * - \u7b26\u53f7\u5f15\u7528\u9a8c\u8bc1\uff08\u5339\u914d\u6027\u68c0\u67e5\uff09\n     * \n     * \u51c6\u5907\uff1a\n     * - \u4e3a\u7c7b\u53d8\u91cf\u5206\u914d\u5185\u5b58\u5e76\u8bbe\u7f6e\u521d\u59cb\u503c\uff08\u5982static int a = 123\uff1b\u51c6\u5907\u9636\u6bb5a=0\uff09\n     * - final static\u53d8\u91cf\u76f4\u63a5\u8d4b\u503c\u4e3a\u8bbe\u5b9a\u503c\n     * \n     * \u89e3\u6790\uff1a\n     * - \u5c06\u5e38\u91cf\u6c60\u5185\u7684\u7b26\u53f7\u5f15\u7528\u66ff\u6362\u4e3a\u76f4\u63a5\u5f15\u7528\n     * - \u5305\u62ec\u7c7b\u6216\u63a5\u53e3\u89e3\u6790\u3001\u5b57\u6bb5\u89e3\u6790\u3001\u65b9\u6cd5\u89e3\u6790\u7b49\n     * \n     * \u521d\u59cb\u5316\uff1a\n     * - \u6267\u884c\u7c7b\u6784\u9020\u5668&lt;clinit&gt;()\u65b9\u6cd5\n     * - \u6309\u987a\u5e8f\u6536\u96c6\u6240\u6709\u7c7b\u53d8\u91cf\u7684\u8d4b\u503c\u52a8\u4f5c\u548c\u9759\u6001\u8bed\u53e5\u5757\n     *\/\n    \n    <em>\/\/ \u7c7b\u521d\u59cb\u5316\u65f6\u673a<\/em>\n    <em>\/*<\/em>\n     * 1. \u9047\u5230new\u3001getstatic\u3001putstatic\u3001invokestatic\u6307\u4ee4\u65f6\n     * 2. \u4f7f\u7528java.lang.reflect\u8fdb\u884c\u53cd\u5c04\u8c03\u7528\u65f6\n     * 3. \u521d\u59cb\u5316\u5b50\u7c7b\u65f6\uff0c\u7236\u7c7b\u672a\u521d\u59cb\u5316\u5148\u521d\u59cb\u5316\u7236\u7c7b\n     * 4. \u865a\u62df\u673a\u542f\u52a8\u65f6\uff0c\u5305\u542bmain\u65b9\u6cd5\u7684\u7c7b\n     * 5. \u4f7f\u7528JDK7\u52a8\u6001\u8bed\u8a00\u652f\u6301\u65f6\n     *\/\n    \n    static class Parent {\n        static {\n            System.out.println(\"Parent init\");\n        }\n    }\n    \n    static class Child extends Parent {\n        static {\n            System.out.println(\"Child init\");\n        }\n    }\n    \n    public static void main(String[] args) {\n        <em>\/\/ \u4e0d\u4f1a\u89e6\u53d1\u521d\u59cb\u5316\u7684\u60c5\u51b5<\/em>\n        Parent[] parents = new Parent[10]; <em>\/\/ \u6570\u7ec4\u5b9a\u4e49<\/em>\n        System.out.println(Child.class);   <em>\/\/ \u8bbf\u95ee\u7c7b\u5e38\u91cf<\/em>\n    }\n    \n    <em>\/*<\/em>\n     * 2. \u7c7b\u52a0\u8f7d\u5668\n     * \n     * \u542f\u52a8\u7c7b\u52a0\u8f7d\u5668(Bootstrap ClassLoader)\n     * - \u52a0\u8f7d JAVA_HOME\/lib \u4e0b\u7684\u7c7b\n     * - C++\u5b9e\u73b0\uff0cJava\u4e2d\u65e0\u6cd5\u83b7\u53d6\n     * \n     * \u6269\u5c55\u7c7b\u52a0\u8f7d\u5668(Extension ClassLoader)\n     * - \u52a0\u8f7d JAVA_HOME\/lib\/ext \u4e0b\u7684\u7c7b\n     * - Java\u5b9e\u73b0\uff0csun.misc.Launcher$ExtClassLoader\n     * \n     * \u5e94\u7528\u7c7b\u52a0\u8f7d\u5668(Application ClassLoader)\n     * - \u52a0\u8f7d classpath \u4e0b\u7684\u7c7b\n     * - \u9ed8\u8ba4\u7684\u7ebf\u7a0b\u4e0a\u4e0b\u6587\u7c7b\u52a0\u8f7d\u5668\n     * \n     * \u81ea\u5b9a\u4e49\u7c7b\u52a0\u8f7d\u5668\n     * - \u7ee7\u627fClassLoader\uff0c\u91cd\u5199findClass\u65b9\u6cd5\n     *\/\n    \n    <em>\/\/ \u53cc\u4eb2\u59d4\u6d3e\u6a21\u578b<\/em>\n    <em>\/*<\/em>\n     * \u5de5\u4f5c\u6d41\u7a0b\uff1a\n     * 1. \u7c7b\u52a0\u8f7d\u5668\u6536\u5230\u7c7b\u52a0\u8f7d\u8bf7\u6c42\n     * 2. \u5148\u59d4\u6d3e\u7ed9\u7236\u7c7b\u52a0\u8f7d\u5668\u52a0\u8f7d\n     * 3. \u7236\u7c7b\u52a0\u8f7d\u5668\u65e0\u6cd5\u52a0\u8f7d\u65f6\uff0c\u624d\u81ea\u5df1\u5c1d\u8bd5\u52a0\u8f7d\n     * \n     * \u597d\u5904\uff1a\n     * - \u907f\u514d\u7c7b\u7684\u91cd\u590d\u52a0\u8f7d\n     * - \u4fdd\u8bc1Java\u6838\u5fc3API\u7684\u5b89\u5168\n     *\/\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u26a1&nbsp;<strong>\u4e09\u3001\u5e76\u53d1\u7f16\u7a0b\u6df1\u5ea6\u89e3\u6790<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>\u7ebf\u7a0b\u57fa\u7840\u4e0e\u7ebf\u7a0b\u6c60<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class ThreadDeepDive {\n    <em>\/\/ 1. \u7ebf\u7a0b\u72b6\u6001\u8f6c\u6362<\/em>\n    <em>\/*<\/em>\n     * NEW \u2192 RUNNABLE \u2192 BLOCKED\/WAITING\/TIMED_WAITING \u2192 TERMINATED\n     * \n     * NEW\uff1a\u65b0\u5efa\u672a\u542f\u52a8\n     * RUNNABLE\uff1a\u53ef\u8fd0\u884c\u72b6\u6001\uff08\u5305\u542b\u5c31\u7eea\u548c\u8fd0\u884c\uff09\n     * BLOCKED\uff1a\u963b\u585e\u7b49\u5f85\u9501\n     * WAITING\uff1a\u65e0\u9650\u671f\u7b49\u5f85\uff08wait\u3001join\u3001park\uff09\n     * TIMED_WAITING\uff1a\u9650\u671f\u7b49\u5f85\n     * TERMINATED\uff1a\u7ec8\u6b62\n     *\/\n    \n    <em>\/\/ 2. \u7ebf\u7a0b\u6c60\u53c2\u6570\u8be6\u89e3<\/em>\n    public void threadPoolParams() {\n        ThreadPoolExecutor executor = new ThreadPoolExecutor(\n            5,  <em>\/\/ corePoolSize\uff1a\u6838\u5fc3\u7ebf\u7a0b\u6570<\/em>\n            10, <em>\/\/ maximumPoolSize\uff1a\u6700\u5927\u7ebf\u7a0b\u6570<\/em>\n            60, <em>\/\/ keepAliveTime\uff1a\u7a7a\u95f2\u7ebf\u7a0b\u5b58\u6d3b\u65f6\u95f4<\/em>\n            TimeUnit.SECONDS,\n            new LinkedBlockingQueue&lt;&gt;(100), <em>\/\/ \u5de5\u4f5c\u961f\u5217<\/em>\n            Executors.defaultThreadFactory(), <em>\/\/ \u7ebf\u7a0b\u5de5\u5382<\/em>\n            new ThreadPoolExecutor.AbortPolicy() <em>\/\/ \u62d2\u7edd\u7b56\u7565<\/em>\n        );\n        \n        <em>\/*<\/em>\n         * \u7ebf\u7a0b\u6c60\u5de5\u4f5c\u539f\u7406\uff1a\n         * 1. \u63d0\u4ea4\u4efb\u52a1\uff0c\u5982\u679c\u5f53\u524d\u7ebf\u7a0b\u6570 &lt; corePoolSize\uff0c\u521b\u5efa\u65b0\u7ebf\u7a0b\u6267\u884c\n         * 2. \u5982\u679c &gt;= corePoolSize\uff0c\u4efb\u52a1\u653e\u5165\u961f\u5217\n         * 3. \u5982\u679c\u961f\u5217\u5df2\u6ee1\uff0c\u4e14\u7ebf\u7a0b\u6570 &lt; maximumPoolSize\uff0c\u521b\u5efa\u65b0\u7ebf\u7a0b\n         * 4. \u5982\u679c\u7ebf\u7a0b\u6570\u8fbe\u5230maximumPoolSize\uff0c\u6267\u884c\u62d2\u7edd\u7b56\u7565\n         * \n         * \u62d2\u7edd\u7b56\u7565\uff1a\n         * AbortPolicy\uff1a\u629b\u51fa\u5f02\u5e38\uff08\u9ed8\u8ba4\uff09\n         * CallerRunsPolicy\uff1a\u8c03\u7528\u8005\u7ebf\u7a0b\u6267\u884c\n         * DiscardPolicy\uff1a\u4e22\u5f03\u4efb\u52a1\n         * DiscardOldestPolicy\uff1a\u4e22\u5f03\u961f\u5217\u6700\u8001\u7684\u4efb\u52a1\n         *\/\n    }\n    \n    <em>\/\/ 3. \u56db\u79cd\u7ebf\u7a0b\u6c60\u7684\u9690\u60a3<\/em>\n    <em>\/*<\/em>\n     * FixedThreadPool\n     * - \u6838\u5fc3\u7ebf\u7a0b\u6570=\u6700\u5927\u7ebf\u7a0b\u6570\n     * - \u4f7f\u7528LinkedBlockingQueue\uff08\u65e0\u754c\u961f\u5217\uff09\n     * - \u9690\u60a3\uff1a\u961f\u5217\u53ef\u80fd\u65e0\u9650\u589e\u957f\uff0c\u5bfc\u81f4OOM\n     * \n     * CachedThreadPool\n     * - \u6838\u5fc3\u7ebf\u7a0b0\uff0c\u6700\u5927\u7ebf\u7a0bInteger.MAX_VALUE\n     * - \u4f7f\u7528SynchronousQueue\n     * - \u9690\u60a3\uff1a\u7ebf\u7a0b\u6570\u65e0\u9650\u589e\u957f\uff0c\u5bfc\u81f4OOM\n     * \n     * SingleThreadExecutor\n     * - \u6838\u5fc3\u7ebf\u7a0b=\u6700\u5927\u7ebf\u7a0b=1\n     * - \u4f7f\u7528LinkedBlockingQueue\n     * - \u9690\u60a3\uff1a\u961f\u5217\u53ef\u80fd\u65e0\u9650\u589e\u957f\n     * \n     * ScheduledThreadPool\n     * - \u4f7f\u7528DelayedWorkQueue\n     * - \u9690\u60a3\uff1a\u961f\u5217\u53ef\u80fd\u65e0\u9650\u589e\u957f\n     *\/\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>\u9501\u7684\u6df1\u5165\u7406\u89e3<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class LockDeepDive {\n    <em>\/\/ 1. synchronized \u539f\u7406<\/em>\n    <em>\/*<\/em>\n     * \u5e95\u5c42\u5b9e\u73b0\uff1a\n     * - \u4ee3\u7801\u5757\uff1amonitorenter + monitorexit\n     * - \u65b9\u6cd5\uff1aACC_SYNCHRONIZED\u6807\u5fd7\n     * \n     * \u9501\u5347\u7ea7\u8fc7\u7a0b\uff08\u65e0\u9501 \u2192 \u504f\u5411\u9501 \u2192 \u8f7b\u91cf\u7ea7\u9501 \u2192 \u91cd\u91cf\u7ea7\u9501\uff09\n     * \n     * \u504f\u5411\u9501\uff1a\n     * - \u9501\u5bf9\u8c61\u5934\u8bb0\u5f55\u7ebf\u7a0bID\n     * - \u540c\u4e00\u7ebf\u7a0b\u518d\u6b21\u83b7\u53d6\u9501\uff0c\u53ea\u9700\u6bd4\u8f83\u7ebf\u7a0bID\n     * \n     * \u8f7b\u91cf\u7ea7\u9501\uff1a\n     * - CAS\u83b7\u53d6\u9501\n     * - \u9002\u7528\u4e8e\u7ebf\u7a0b\u4ea4\u66ff\u6267\u884c\n     * \n     * \u91cd\u91cf\u7ea7\u9501\uff1a\n     * - \u4f9d\u8d56\u64cd\u4f5c\u7cfb\u7edf\u7684Mutex Lock\n     * - \u7ebf\u7a0b\u963b\u585e\u548c\u5524\u9192\u9700\u8981\u4e0a\u4e0b\u6587\u5207\u6362\n     *\/\n    \n    <em>\/\/ 2. ReentrantLock \u539f\u7406<\/em>\n    <em>\/*<\/em>\n     * \u57fa\u4e8eAQS\uff08AbstractQueuedSynchronizer\uff09\n     * \n     * AQS\u539f\u7406\uff1a\n     * - \u7ef4\u62a4volatile int state\uff08\u540c\u6b65\u72b6\u6001\uff09\n     * - CLH\u961f\u5217\uff08\u53cc\u5411\u94fe\u8868\uff09\n     * \n     * \u72ec\u5360\u6a21\u5f0f\uff1a\n     * tryAcquire \u2192 tryRelease\n     * \n     * \u5171\u4eab\u6a21\u5f0f\uff1a\n     * tryAcquireShared \u2192 tryReleaseShared\n     *\/\n    \n    <em>\/\/ 3. \u6b7b\u9501\u793a\u4f8b\u548c\u6392\u67e5<\/em>\n    public void deadLockDemo() {\n        Object lock1 = new Object();\n        Object lock2 = new Object();\n        \n        Thread t1 = new Thread(() -&gt; {\n            synchronized (lock1) {\n                try { Thread.sleep(100); } catch (Exception e) {}\n                synchronized (lock2) {\n                    System.out.println(\"t1\u5b8c\u6210\");\n                }\n            }\n        });\n        \n        Thread t2 = new Thread(() -&gt; {\n            synchronized (lock2) {\n                try { Thread.sleep(100); } catch (Exception e) {}\n                synchronized (lock1) {\n                    System.out.println(\"t2\u5b8c\u6210\");\n                }\n            }\n        });\n        \n        t1.start();\n        t2.start();\n        \n        <em>\/\/ \u6392\u67e5\u65b9\u6cd5\uff1a<\/em>\n        <em>\/\/ 1. jps \u67e5\u770bjava\u8fdb\u7a0b<\/em>\n        <em>\/\/ 2. jstack &lt;pid&gt; \u67e5\u770b\u7ebf\u7a0b\u5806\u6808<\/em>\n        <em>\/\/ 3. jconsole\/jvisualvm \u56fe\u5f62\u5316\u5de5\u5177<\/em>\n    }\n    \n    <em>\/\/ 4. volatile \u548c happen-before<\/em>\n    <em>\/*<\/em>\n     * volatile\u7279\u6027\uff1a\n     * 1. \u53ef\u89c1\u6027\uff1a\u5199\u64cd\u4f5c\u7acb\u5373\u5237\u65b0\u5230\u4e3b\u5b58\uff0c\u8bfb\u64cd\u4f5c\u4ece\u4e3b\u5b58\u8bfb\u53d6\n     * 2. \u7981\u6b62\u6307\u4ee4\u91cd\u6392\u5e8f\n     * \n     * happen-before\u89c4\u5219\uff1a\n     * 1. \u7a0b\u5e8f\u6b21\u5e8f\u89c4\u5219\n     * 2. volatile\u53d8\u91cf\u89c4\u5219\n     * 3. \u9501\u89c4\u5219\n     * 4. \u4f20\u9012\u6027\n     * 5. \u7ebf\u7a0b\u542f\u52a8\u89c4\u5219\n     * 6. \u7ebf\u7a0b\u7ec8\u6b62\u89c4\u5219\n     * 7. \u7ebf\u7a0b\u4e2d\u65ad\u89c4\u5219\n     * 8. \u5bf9\u8c61\u7ec8\u7ed3\u89c4\u5219\n     *\/\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfd7\ufe0f&nbsp;<strong>\u56db\u3001Spring\u6846\u67b6\u6e90\u7801\u7ea7\u7406\u89e3<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>IOC\u5bb9\u5668\u6e90\u7801\u5206\u6790<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class SpringIOCDeepDive {\n    <em>\/*<\/em>\n     * 1. BeanFactory \u548c ApplicationContext \u533a\u522b\n     * BeanFactory\uff1a\u5ef6\u8fdf\u52a0\u8f7d\uff0c\u7b2c\u4e00\u6b21getBean\u624d\u521b\u5efa\n     * ApplicationContext\uff1a\u9884\u52a0\u8f7d\uff0c\u5bb9\u5668\u542f\u52a8\u65f6\u521b\u5efa\n     * \n     * 2. BeanFactory \u7ee7\u627f\u4f53\u7cfb\n     * BeanFactory\n     *   \u2514\u2500\u2500 HierarchicalBeanFactory\n     *        \u2514\u2500\u2500 ConfigurableBeanFactory\n     *             \u2514\u2500\u2500 AutowireCapableBeanFactory\n     *                  \u2514\u2500\u2500 ListableBeanFactory\n     *                       \u2514\u2500\u2500 ApplicationContext\n     *\/\n    \n    <em>\/\/ 3. BeanDefinition \u89e3\u6790\u8fc7\u7a0b<\/em>\n    <em>\/*<\/em>\n     * XML\u914d\u7f6e\u65b9\u5f0f\uff1a\n     * XmlBeanDefinitionReader\n     * 1. \u52a0\u8f7dXML\u6587\u4ef6\uff08ResourceLoader\uff09\n     * 2. \u89e3\u6790XML\uff08DocumentLoader\uff09\n     * 3. \u6ce8\u518cBeanDefinition\uff08BeanDefinitionRegistry\uff09\n     * \n     * \u6ce8\u89e3\u914d\u7f6e\u65b9\u5f0f\uff1a\n     * ClassPathBeanDefinitionScanner\n     * 1. \u626b\u63cf\u6307\u5b9a\u5305\u4e0b\u7684\u7c7b\n     * 2. \u8fc7\u6ee4\u51fa\u5e26\u6709@Component\u7b49\u6ce8\u89e3\u7684\u7c7b\n     * 3. \u751f\u6210BeanDefinition\u5e76\u6ce8\u518c\n     *\/\n    \n    <em>\/\/ 4. Bean\u751f\u547d\u5468\u671f\u6e90\u7801\u7ea7\u522b<\/em>\n    @Component\n    public class BeanLifecycleDemo implements BeanNameAware, BeanFactoryAware,\n            InitializingBean, DisposableBean {\n        \n        private String name;\n        \n        public BeanLifecycleDemo() {\n            System.out.println(\"1. \u5b9e\u4f8b\u5316\");\n        }\n        \n        @Autowired\n        public void setName(String name) {\n            System.out.println(\"2. \u5c5e\u6027\u8d4b\u503c\");\n            this.name = name;\n        }\n        \n        @Override\n        public void setBeanName(String name) {\n            System.out.println(\"3. BeanNameAware\");\n        }\n        \n        @Override\n        public void setBeanFactory(BeanFactory beanFactory) {\n            System.out.println(\"4. BeanFactoryAware\");\n        }\n        \n        @PostConstruct\n        public void postConstruct() {\n            System.out.println(\"5. @PostConstruct\");\n        }\n        \n        @Override\n        public void afterPropertiesSet() {\n            System.out.println(\"6. InitializingBean\");\n        }\n        \n        @Bean(initMethod = \"initMethod\")\n        public void initMethod() {\n            System.out.println(\"7. init-method\");\n        }\n        \n        @PreDestroy\n        public void preDestroy() {\n            System.out.println(\"8. @PreDestroy\");\n        }\n        \n        @Override\n        public void destroy() {\n            System.out.println(\"9. DisposableBean\");\n        }\n        \n        <em>\/\/ \u5b8c\u6574\u6d41\u7a0b\uff1a<\/em>\n        <em>\/\/ \u5b9e\u4f8b\u5316 \u2192 \u5c5e\u6027\u8d4b\u503c \u2192 Aware\u63a5\u53e3 \u2192 BeanPostProcessor\u524d\u7f6e\u5904\u7406<\/em>\n        <em>\/\/ \u2192 @PostConstruct \u2192 InitializingBean \u2192 init-method<\/em>\n        <em>\/\/ \u2192 BeanPostProcessor\u540e\u7f6e\u5904\u7406 \u2192 \u4f7f\u7528\u4e2d \u2192 @PreDestroy<\/em>\n        <em>\/\/ \u2192 DisposableBean \u2192 destroy-method<\/em>\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>AOP\u539f\u7406\u6df1\u5ea6\u89e3\u6790<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class AOPDeepDive {\n    <em>\/*<\/em>\n     * 1. AOP\u6982\u5ff5\n     * Aspect\uff1a\u5207\u9762\uff08@Aspect\uff09\n     * JoinPoint\uff1a\u8fde\u63a5\u70b9\uff08\u65b9\u6cd5\u8c03\u7528\uff09\n     * Advice\uff1a\u901a\u77e5\uff08@Before\u3001@After\u7b49\uff09\n     * Pointcut\uff1a\u5207\u70b9\uff08\u5339\u914d\u8fde\u63a5\u70b9\u7684\u8868\u8fbe\u5f0f\uff09\n     * Introduction\uff1a\u5f15\u5165\uff08\u4e3a\u7c7b\u6dfb\u52a0\u65b0\u65b9\u6cd5\u5c5e\u6027\uff09\n     * Target Object\uff1a\u76ee\u6807\u5bf9\u8c61\n     * AOP Proxy\uff1a\u4ee3\u7406\u5bf9\u8c61\n     * Weaving\uff1a\u7ec7\u5165\n     *\/\n    \n    <em>\/\/ 2. \u52a8\u6001\u4ee3\u7406\u4e24\u79cd\u65b9\u5f0f<\/em>\n    <em>\/*<\/em>\n     * JDK\u52a8\u6001\u4ee3\u7406\n     * - \u57fa\u4e8e\u63a5\u53e3\uff0c\u5b9e\u73b0InvocationHandler\n     * - \u751f\u6210\u4ee3\u7406\u7c7b\u5b9e\u73b0\u76ee\u6807\u63a5\u53e3\n     * - \u9002\u7528\u4e8e\u6709\u63a5\u53e3\u7684\u60c5\u51b5\n     *\/\n    public class JdkProxyDemo {\n        public Object createProxy(Object target) {\n            return Proxy.newProxyInstance(\n                target.getClass().getClassLoader(),\n                target.getClass().getInterfaces(),\n                (proxy, method, args) -&gt; {\n                    System.out.println(\"\u524d\u7f6e\u589e\u5f3a\");\n                    Object result = method.invoke(target, args);\n                    System.out.println(\"\u540e\u7f6e\u589e\u5f3a\");\n                    return result;\n                }\n            );\n        }\n    }\n    \n    <em>\/*<\/em>\n     * CGLIB\u52a8\u6001\u4ee3\u7406\n     * - \u57fa\u4e8e\u7ee7\u627f\uff0c\u5b9e\u73b0MethodInterceptor\n     * - \u751f\u6210\u76ee\u6807\u7c7b\u7684\u5b50\u7c7b\n     * - \u9002\u7528\u4e8e\u6ca1\u6709\u63a5\u53e3\u7684\u7c7b\n     *\/\n    public class CglibProxyDemo implements MethodInterceptor {\n        public Object createProxy(Class&lt;?&gt; targetClass) {\n            Enhancer enhancer = new Enhancer();\n            enhancer.setSuperclass(targetClass);\n            enhancer.setCallback(this);\n            return enhancer.create();\n        }\n        \n        @Override\n        public Object intercept(Object obj, Method method, \n                Object[] args, MethodProxy proxy) throws Throwable {\n            System.out.println(\"\u524d\u7f6e\u589e\u5f3a\");\n            Object result = proxy.invokeSuper(obj, args);\n            System.out.println(\"\u540e\u7f6e\u589e\u5f3a\");\n            return result;\n        }\n    }\n    \n    <em>\/\/ 3. Spring AOP \u9009\u62e9\u7b56\u7565<\/em>\n    <em>\/*<\/em>\n     * \u5982\u679c\u76ee\u6807\u7c7b\u5b9e\u73b0\u4e86\u63a5\u53e3\uff0c\u9ed8\u8ba4\u4f7f\u7528JDK\u52a8\u6001\u4ee3\u7406\n     * \u5982\u679c\u6ca1\u6709\u5b9e\u73b0\u63a5\u53e3\uff0c\u4f7f\u7528CGLIB\n     * \u53ef\u4ee5\u901a\u8fc7\u914d\u7f6e\u5f3a\u5236\u4f7f\u7528CGLIB\n     * @EnableAspectJAutoProxy(proxyTargetClass = true)\n     *\/\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>Spring\u4e8b\u52a1\u7ba1\u7406<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Service\npublic class TransactionDeepDive {\n    <em>\/*<\/em>\n     * 1. \u4e8b\u52a1\u4f20\u64ad\u884c\u4e3a\n     * \n     * REQUIRED\uff08\u9ed8\u8ba4\uff09\n     * - \u652f\u6301\u5f53\u524d\u4e8b\u52a1\uff0c\u5982\u679c\u6ca1\u6709\u5219\u521b\u5efa\u65b0\u4e8b\u52a1\n     * \n     * SUPPORTS\n     * - \u652f\u6301\u5f53\u524d\u4e8b\u52a1\uff0c\u5982\u679c\u6ca1\u6709\u5219\u4ee5\u975e\u4e8b\u52a1\u65b9\u5f0f\u6267\u884c\n     * \n     * MANDATORY\n     * - \u652f\u6301\u5f53\u524d\u4e8b\u52a1\uff0c\u5982\u679c\u6ca1\u6709\u5219\u629b\u51fa\u5f02\u5e38\n     * \n     * REQUIRES_NEW\n     * - \u521b\u5efa\u65b0\u4e8b\u52a1\uff0c\u5982\u679c\u6709\u5f53\u524d\u4e8b\u52a1\u5219\u6302\u8d77\n     * \n     * NOT_SUPPORTED\n     * - \u4ee5\u975e\u4e8b\u52a1\u65b9\u5f0f\u6267\u884c\uff0c\u5982\u679c\u6709\u5f53\u524d\u4e8b\u52a1\u5219\u6302\u8d77\n     * \n     * NEVER\n     * - \u4ee5\u975e\u4e8b\u52a1\u65b9\u5f0f\u6267\u884c\uff0c\u5982\u679c\u6709\u5f53\u524d\u4e8b\u52a1\u5219\u629b\u51fa\u5f02\u5e38\n     * \n     * NESTED\n     * - \u5982\u679c\u5f53\u524d\u4e8b\u52a1\u5b58\u5728\uff0c\u5219\u5d4c\u5957\u4e8b\u52a1\u6267\u884c\n     *\/\n    \n    @Transactional(propagation = Propagation.REQUIRED)\n    public void methodA() {\n        <em>\/\/ \u4e8b\u52a1\u65b9\u6cd5<\/em>\n    }\n    \n    <em>\/\/ 2. \u4e8b\u52a1\u5931\u6548\u7684\u573a\u666f<\/em>\n    <em>\/*<\/em>\n     * 1. \u6570\u636e\u5e93\u5f15\u64ce\u4e0d\u652f\u6301\u4e8b\u52a1\uff08MyISAM\uff09\n     * 2. \u6ce8\u89e3\u5728\u975epublic\u65b9\u6cd5\u4e0a\n     * 3. \u540c\u4e00\u4e2a\u7c7b\u4e2d\u65b9\u6cd5\u8c03\u7528\uff08\u81ea\u8c03\u7528\uff09\n     * 4. \u5f02\u5e38\u88abcatch\u6355\u83b7\u672a\u629b\u51fa\n     * 5. \u629b\u51fa\u68c0\u67e5\u5f02\u5e38\uff08\u975eRuntimeException\uff09\n     * 6. \u4f20\u64ad\u884c\u4e3a\u8bbe\u7f6e\u95ee\u9898\n     *\/\n    \n    @Autowired\n    private TransactionDeepDive self;\n    \n    public void callMethod() {\n        <em>\/\/ \u9519\u8bef\uff1a\u4e8b\u52a1\u5931\u6548<\/em>\n        methodA(); <em>\/\/ \u81ea\u8c03\u7528<\/em>\n        \n        <em>\/\/ \u6b63\u786e\uff1a\u901a\u8fc7\u4ee3\u7406\u8c03\u7528<\/em>\n        self.methodA();\n    }\n    \n    <em>\/\/ 3. \u4e8b\u52a1\u9694\u79bb\u7ea7\u522b<\/em>\n    <em>\/*<\/em>\n     * DEFAULT\uff1a\u4f7f\u7528\u6570\u636e\u5e93\u9ed8\u8ba4\n     * READ_UNCOMMITTED\uff1a\u8bfb\u672a\u63d0\u4ea4\n     * READ_COMMITTED\uff1a\u8bfb\u5df2\u63d0\u4ea4\n     * REPEATABLE_READ\uff1a\u53ef\u91cd\u590d\u8bfb\n     * SERIALIZABLE\uff1a\u4e32\u884c\u5316\n     *\/\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\uddc3\ufe0f&nbsp;<strong>\u4e94\u3001\u6570\u636e\u5e93\u6df1\u5ea6\u89e3\u6790<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>MySQL\u7d22\u5f15\u539f\u7406<\/strong><\/h3>\n\n\n\n<p>sql<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>-- 1. B+\u6811\u7d22\u5f15\u8be6\u89e3<\/em>\n<em>\/*<\/em>\n * \u4e3a\u4ec0\u4e48\u7528B+\u6811\uff1a\n * - \u975e\u53f6\u5b50\u8282\u70b9\u4e0d\u5b58\u50a8\u6570\u636e\uff0c\u53ef\u4ee5\u5b58\u50a8\u66f4\u591a\u7d22\u5f15\n * - \u6240\u6709\u6570\u636e\u90fd\u5728\u53f6\u5b50\u8282\u70b9\uff0c\u67e5\u8be2\u7a33\u5b9a\n * - \u53f6\u5b50\u8282\u70b9\u53cc\u5411\u94fe\u8868\uff0c\u8303\u56f4\u67e5\u8be2\u9ad8\u6548\n * \n * \u805a\u7c07\u7d22\u5f15\uff08InnoDB\uff09\n * - \u6570\u636e\u548c\u7d22\u5f15\u5b58\u50a8\u5728\u4e00\u8d77\n * - \u4e3b\u952e\u7d22\u5f15\u5c31\u662f\u805a\u7c07\u7d22\u5f15\n * - \u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u5b8c\u6574\u884c\u6570\u636e\n * \n * \u975e\u805a\u7c07\u7d22\u5f15\uff08MyISAM\uff09\n * - \u6570\u636e\u548c\u7d22\u5f15\u5206\u5f00\u5b58\u50a8\n * - \u53f6\u5b50\u8282\u70b9\u5b58\u50a8\u6570\u636e\u5730\u5740\n *\/\n\n<em>-- 2. \u7d22\u5f15\u4f7f\u7528\u539f\u5219<\/em>\nCREATE TABLE `user` (\n  `id` int NOT NULL AUTO_INCREMENT,\n  `name` varchar(50) DEFAULT NULL,\n  `age` int DEFAULT NULL,\n  `create_time` datetime DEFAULT NULL,\n  PRIMARY KEY (`id`),\n  KEY `idx_name_age` (`name`,`age`), <em>-- \u590d\u5408\u7d22\u5f15<\/em>\n  KEY `idx_create_time` (`create_time`)\n) ENGINE=InnoDB;\n\n<em>-- \u6700\u5de6\u524d\u7f00\u539f\u5219<\/em>\nEXPLAIN SELECT * FROM user WHERE name = '\u5f20\u4e09'; <em>-- \u4f7f\u7528\u7d22\u5f15<\/em>\nEXPLAIN SELECT * FROM user WHERE age = 20; <em>-- \u4e0d\u4f7f\u7528\u7d22\u5f15<\/em>\nEXPLAIN SELECT * FROM user WHERE name = '\u5f20\u4e09' AND age = 20; <em>-- \u4f7f\u7528\u7d22\u5f15<\/em>\n\n<em>-- \u7d22\u5f15\u4e0b\u63a8\uff08ICP\uff09<\/em>\nSELECT * FROM user WHERE name LIKE '\u5f20%' AND age = 20;\n<em>-- 5.6\u4e4b\u524d\uff1a\u6839\u636ename\u627e\u5230\u4e3b\u952e\uff0c\u56de\u8868\u67e5\u6570\u636e\uff0c\u518d\u8fc7\u6ee4age<\/em>\n<em>-- 5.6\u4e4b\u540e\uff1a\u6839\u636ename\u627e\u5230\u4e3b\u952e\u65f6\uff0c\u76f4\u63a5\u5728\u5f15\u64ce\u5c42\u8fc7\u6ee4age<\/em>\n\n<em>-- 3. \u7d22\u5f15\u5931\u6548\u573a\u666f<\/em>\n<em>-- \u5bf9\u7d22\u5f15\u5217\u4f7f\u7528\u51fd\u6570<\/em>\nEXPLAIN SELECT * FROM user WHERE YEAR(create_time) = 2023;\n\n<em>-- \u9690\u5f0f\u7c7b\u578b\u8f6c\u6362<\/em>\nEXPLAIN SELECT * FROM user WHERE name = 123; <em>-- name\u662fvarchar\u7c7b\u578b<\/em>\n\n<em>-- \u4e0d\u7b26\u5408\u6700\u5de6\u524d\u7f00<\/em>\nEXPLAIN SELECT * FROM user WHERE age = 20;\n\n<em>-- like\u4ee5%\u5f00\u5934<\/em>\nEXPLAIN SELECT * FROM user WHERE name LIKE '%\u4e09';\n\n<em>-- or\u6761\u4ef6<\/em>\nEXPLAIN SELECT * FROM user WHERE name = '\u5f20\u4e09' OR age = 20;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>SQL\u4f18\u5316\u5b9e\u6218<\/strong><\/h3>\n\n\n\n<p>sql<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>-- 1. \u5206\u9875\u4f18\u5316<\/em>\n<em>-- \u4f20\u7edf\u5206\u9875\uff08\u8d8a\u5f80\u540e\u8d8a\u6162\uff09<\/em>\nSELECT * FROM user ORDER BY id LIMIT 100000, 20;\n\n<em>-- \u4f18\u5316\u65b9\u68481\uff1a\u8bb0\u5f55\u4e0a\u6b21\u4f4d\u7f6e<\/em>\nSELECT * FROM user WHERE id &gt; 100000 ORDER BY id LIMIT 20;\n\n<em>-- \u4f18\u5316\u65b9\u68482\uff1a\u5b50\u67e5\u8be2<\/em>\nSELECT * FROM user \nWHERE id &gt;= (SELECT id FROM user ORDER BY id LIMIT 100000, 1) \nLIMIT 20;\n\n<em>-- 2. \u8fde\u63a5\u4f18\u5316<\/em>\n<em>-- \u5c0f\u8868\u9a71\u52a8\u5927\u8868<\/em>\n<em>-- \u5047\u8bbeuser\u8868100\u6761\uff0corder\u88681\u4e07\u6761<\/em>\n<em>-- \u63a8\u8350<\/em>\nSELECT * FROM user u INNER JOIN order o ON u.id = o.user_id;\n\n<em>-- 3. \u6392\u5e8f\u4f18\u5316<\/em>\n<em>-- \u907f\u514dfilesort<\/em>\nCREATE INDEX idx_age_name ON user(age, name);\n\n<em>-- \u6392\u5e8f\u5b57\u6bb5\u548c\u67e5\u8be2\u5b57\u6bb5\u4e00\u81f4<\/em>\nSELECT age, name FROM user ORDER BY age, name;\n\n<em>-- 4. \u5206\u7ec4\u4f18\u5316<\/em>\n<em>-- \u4f7f\u7528\u7d22\u5f15<\/em>\nCREATE INDEX idx_user_date ON order(user_id, create_time);\n\nSELECT user_id, COUNT(*) \nFROM order \nWHERE create_time &gt;= '2024-01-01' \nGROUP BY user_id;<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3.&nbsp;<strong>MySQL\u9501\u673a\u5236<\/strong><\/h3>\n\n\n\n<p>sql<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>-- 1. \u884c\u9501\u3001\u8868\u9501\u3001\u95f4\u9699\u9501<\/em>\n<em>-- \u8868\u9501<\/em>\nLOCK TABLES user READ;\nLOCK TABLES user WRITE;\n\n<em>-- \u884c\u9501\uff08InnoDB\uff09<\/em>\n<em>-- \u5171\u4eab\u9501\uff08S\u9501\uff09<\/em>\nSELECT * FROM user WHERE id = 1 LOCK IN SHARE MODE;\n\n<em>-- \u6392\u4ed6\u9501\uff08X\u9501\uff09<\/em>\nSELECT * FROM user WHERE id = 1 FOR UPDATE;\n\n<em>-- \u95f4\u9699\u9501\uff08\u89e3\u51b3\u5e7b\u8bfb\uff09<\/em>\n<em>-- \u9501\u4f4f\u7684\u662f\u7d22\u5f15\u8bb0\u5f55\u4e4b\u95f4\u7684\u95f4\u9699<\/em>\nSELECT * FROM user WHERE age BETWEEN 10 AND 20 FOR UPDATE;\n\n<em>-- 2. \u6b7b\u9501\u6848\u4f8b<\/em>\n<em>-- \u4e8b\u52a11<\/em>\nBEGIN;\nUPDATE user SET name = '\u5f20\u4e09' WHERE id = 1;\nUPDATE user SET name = '\u674e\u56db' WHERE id = 2;\nCOMMIT;\n\n<em>-- \u4e8b\u52a12<\/em>\nBEGIN;\nUPDATE user SET name = '\u738b\u4e94' WHERE id = 2;\nUPDATE user SET name = '\u8d75\u516d' WHERE id = 1;\nCOMMIT;\n\n<em>-- 3. \u6b7b\u9501\u6392\u67e5<\/em>\n<em>-- \u67e5\u770b\u5f53\u524d\u4e8b\u52a1<\/em>\nSELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;\n\n<em>-- \u67e5\u770b\u9501\u7b49\u5f85<\/em>\nSELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;\n\n<em>-- \u67e5\u770b\u9501\u7b49\u5f85\u4e8b\u52a1<\/em>\nSELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;\n\n<em>-- \u5f00\u542f\u6b7b\u9501\u65e5\u5fd7<\/em>\nSET GLOBAL innodb_print_all_deadlocks = ON;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27&nbsp;<strong>\u516d\u3001Redis\u6df1\u5ea6\u89e3\u6790<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.&nbsp;<strong>Redis\u6570\u636e\u7ed3\u6784\u5e95\u5c42\u5b9e\u73b0<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public class RedisDataStructure {\n    <em>\/*<\/em>\n     * 1. String\uff08SDS - Simple Dynamic String\uff09\n     * - \u9884\u5206\u914d\u7a7a\u95f4\uff0c\u51cf\u5c11\u5185\u5b58\u91cd\u5206\u914d\u6b21\u6570\n     * - \u4e8c\u8fdb\u5236\u5b89\u5168\n     * - \u517c\u5bb9C\u5b57\u7b26\u4e32\n     * \n     * 2. List\uff08quicklist\uff09\n     * - \u538b\u7f29\u5217\u8868\uff08ziplist\uff09+ \u53cc\u5411\u94fe\u8868\n     * - \u5143\u7d20\u5c11\u65f6\u7528ziplist\u8282\u7701\u5185\u5b58\n     * - \u5143\u7d20\u591a\u65f6\u8f6c\u4e3a\u53cc\u5411\u94fe\u8868\n     * \n     * 3. Hash\n     * - \u5143\u7d20\u5c11\u65f6\u7528ziplist\n     * - \u5143\u7d20\u591a\u65f6\u7528dict\uff08\u54c8\u5e0c\u8868\uff09\n     * - \u6e10\u8fdb\u5f0frehash\n     * \n     * 4. Set\n     * - \u5143\u7d20\u90fd\u662f\u6574\u6570\u4e14\u5c11\u65f6\u7528intset\n     * - \u5426\u5219\u7528dict\n     * \n     * 5. ZSet\uff08\u8df3\u8868\uff09\n     * - \u5143\u7d20\u5c11\u65f6\u7528ziplist\n     * - \u5426\u5219\u7528skiplist + dict\n     * - \u8df3\u8868\uff1a\u591a\u7ea7\u7d22\u5f15\u5b9e\u73b0O(logN)\u67e5\u8be2\n     *\/\n    \n    <em>\/\/ 2. \u8df3\u8868\u5b9e\u73b0\u539f\u7406<\/em>\n    <em>\/*<\/em>\n     * \u4e3a\u4ec0\u4e48\u7528\u8df3\u8868\u4e0d\u7528\u5e73\u8861\u6811\uff1f\n     * - \u5b9e\u73b0\u7b80\u5355\n     * - \u8303\u56f4\u67e5\u8be2\u65b9\u4fbf\n     * - \u66f4\u5bb9\u6613\u63a7\u5236\u7d22\u5f15\u5c42\u7ea7\n     * \n     * \u5c42\u7ea7\uff1a\u968f\u673a\u751f\u6210\uff0c1\u7ea7\u6982\u738750%\uff0c2\u7ea725%\uff0c\u4ee5\u6b64\u7c7b\u63a8\n     * \u67e5\u8be2\uff1a\u4ece\u6700\u9ad8\u5c42\u5f00\u59cb\uff0c\u627e\u5230\u6700\u540e\u4e00\u4e2a\u5c0f\u4e8e\u76ee\u6807\u503c\u7684\u8282\u70b9\uff0c\u7136\u540e\u964d\u5c42\n     *\/\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2.&nbsp;<strong>\u7f13\u5b58\u95ee\u9898\u89e3\u51b3\u65b9\u6848<\/strong><\/h3>\n\n\n\n<p>java<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">@Service\npublic class RedisCacheSolution {\n    @Autowired\n    private StringRedisTemplate redisTemplate;\n    \n    <em>\/\/ 1. \u7f13\u5b58\u7a7f\u900f\uff08\u67e5\u8be2\u4e0d\u5b58\u5728\u7684\u6570\u636e\uff09<\/em>\n    public String getDataWithPenetration(String key) {\n        <em>\/\/ \u4ece\u7f13\u5b58\u83b7\u53d6<\/em>\n        String value = redisTemplate.opsForValue().get(key);\n        if (value != null) {\n            return value;\n        }\n        \n        <em>\/\/ \u7f13\u5b58\u4e0d\u5b58\u5728\uff0c\u4ece\u6570\u636e\u5e93\u67e5\u8be2<\/em>\n        value = queryFromDB(key);\n        \n        if (value != null) {\n            <em>\/\/ \u6570\u636e\u5e93\u5b58\u5728\uff0c\u5199\u5165\u7f13\u5b58<\/em>\n            redisTemplate.opsForValue().set(key, value, 1, TimeUnit.HOURS);\n        } else {\n            <em>\/\/ \u6570\u636e\u5e93\u4e0d\u5b58\u5728\uff0c\u7f13\u5b58\u7a7a\u503c\uff08\u8bbe\u7f6e\u8f83\u77ed\u8fc7\u671f\u65f6\u95f4\uff09<\/em>\n            redisTemplate.opsForValue().set(key, \"NULL\", 5, TimeUnit.MINUTES);\n        }\n        \n        return value;\n    }\n    \n    <em>\/\/ 2. \u7f13\u5b58\u51fb\u7a7f\uff08\u70ed\u70b9key\u8fc7\u671f\uff09<\/em>\n    <em>\/\/ \u65b9\u6848<\/em><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udcda&nbsp;Java\u57fa\u7840\u9762\u8bd5\u9898&#46;&#46;&#46;<\/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":[],"class_list":["post-193","post","type-post","status-publish","format-standard","hentry","category-general"],"_links":{"self":[{"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=\/wp\/v2\/posts\/193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=193"}],"version-history":[{"count":2,"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=\/wp\/v2\/posts\/193\/revisions"}],"predecessor-version":[{"id":195,"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=\/wp\/v2\/posts\/193\/revisions\/195"}],"wp:attachment":[{"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wp.988978.xyz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}