{"@attributes":{"version":"2.0"},"channel":{"title":"Java on \u9694\u53f6\u9ec4\u83ba Yanbin's Blog - \u8f6f\u4ef6\u7f16\u7a0b\u5b9e\u8df5","link":"https:\/\/yanbin.blog\/tags\/java\/","description":"Recent content in Java on \u9694\u53f6\u9ec4\u83ba Yanbin's Blog - \u8f6f\u4ef6\u7f16\u7a0b\u5b9e\u8df5","generator":"Hugo -- gohugo.io","language":"en-us","managingEditor":"yabqiu@gmail.com (Yanbin Qiu)","webMaster":"yabqiu@gmail.com (Yanbin Qiu)","copyright":"Yanbin \u9694\u53f6\u9ec4\u83ba","lastBuildDate":"Fri, 06 Mar 2026 16:20:20 -0600","item":[{"title":"C \u8bed\u8a00\uff0cBash, Java \u5982\u4f55\u54cd\u5e94 Linux Signal","link":"https:\/\/yanbin.blog\/c-bash-java-react-to-ipc-signal\/","pubDate":"Fri, 06 Mar 2026 16:20:20 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/c-bash-java-react-to-ipc-signal\/","description":"\n<p>\u672c\u6587\u521d\u8877\u662f\u8981\u4e13\u6ce8\u5728 Docker \u5185\u7684\u5e94\u7528\u8fdb\u7a0b\u5982\u4f55\u4e0e\u5916\u90e8\u53d1\u8fc7\u6765\u7684 Linux \u4fe1\u53f7\u8fdb\u884c\u54cd\u5e94\u3002\u5177\u4f53\u5e94\u7528\u5728\u5f53\u8fd0\u884c\u4e3a\u4e00\u4e2a ECS \u7684 Docker \u5bb9\u5668\u65f6\uff0c\u5bf9 ECS \u7684 AutoScaling\n\u4ee5\u53ca\u90e8\u7f72\u65f6\u5982\u4f55\u8ba9\u5e94\u7528\u80fd\u6b63\u786e\u6536\u5230\u76f8\u5e94\u7684\u4fe1\u53f7\u3002\u53ef\u662f\u4e00\u63d0\u53ca\u8fd9\u4e00\u8bdd\u9898\uff0c\u601d\u7ef4\u5c31\u4ea7\u751f\u4e86\u6781\u5927\u7684\u53d1\u6563\uff0c\u5f88\u60f3\u597d\u597d\u634b\u4e00\u634b\u8fdb\u7a0b\u4e0e Linux \u4fe1\u53f7\u4e4b\u95f4\u5173\u7cfb\u548c\u76f8\u5173\u7684\u6982\u5ff5\u3002\n\u5173\u4e8e Linux \u7684 Signal \u8bf7\u53c2\u8003 Wikipedia \u7684 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Signal_%28IPC%29\">Signal(IPC)<\/a>.<\/p>\n<p>\u672c\u6587\u4ee5\u6e10\u8fdb\u7684\u65b9\u5f0f\uff0c\u4ece\u4fe1\u53f7\u7684\u7b80\u4ecb\uff0c\u672c\u5730 C, Bash, Java \u7a0b\u5e8f\u4e0e\u4fe1\u53f7\uff0c\u7136\u540e\u5c06\u5728\u4e0b\u4e00\u7bc7\u5b66\u4e60\u672c\u5730 Docker \u5bb9\u5668\u5185\u8fdb\u7a0b\u4e0e\u4fe1\u53f7\u7684\u5904\u7406\uff0cECS \u7684\u5bb9\u5668\u4e0e ASG\uff0c\u90e8\u7f72\u884c\u4e3a\u7684\u4fe1\u53f7\u54cd\u5e94\u3002<\/p>"},{"title":"\u300a100 Java Mistakes and How to Avoid Them\u300b\u7b14\u8bb0 3","link":"https:\/\/yanbin.blog\/100-java-mistakes-and-how-to-avoid-them-notes-3\/","pubDate":"Thu, 28 Dec 2023 00:56:44 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/100-java-mistakes-and-how-to-avoid-them-notes-3\/","description":"\n\u672c\u4e66\u7684\u9605\u8bfb\u53c8\u6401\u7f6e\u4e86\u8bb8\u4e45\uff0c\u867d\u7136\u611f\u89c9 Manning \u51fa\u7248\u793e\u7684\u8fd9\u4e00 <code>100 Mistakes<\/code> \u7cfb\u5217\u4ece\u4e66\u7684\u8d28\u91cf\u4e0d\u662f\u90a3\u4e48\u7684\u9ad8\uff0c\u4f46\u5f00\u4e86\u5934\u8fd8\u662f\u7ee7\u7eed\u4ece\u672c\u4e66 40% \u7684\u4f4d\u7f6e\u5f80\u4e0b\u3002<\/p>\n<br\/>\n\u5f00\u59cb\u8981\u8bb2\u8ff0\u5230\u5f02\u5e38\u4e86\uff0c\u5f02\u5e38\u8fd8\u662f\u6709\u5fc5\u8981\u8ba4\u771f\u5bf9\u5f85\u7684\uff0c\u6bd4\u5982<br\/><br\/>\n<ol>\n<li>Java \u4e2d\u5f88\u5bb9\u6613\u88ab CheckedException \u5f04\u5f97\u4ee3\u7801\u4e0d\u6574\u6d01<\/li>\n<li>\u7f3a\u5c11\u5fc5\u8981\u7684\u53c2\u6570\u68c0\u67e5\uff0c\u4e0d\u820d\u5f97\u629b\u51fa\u5f02\u5e38\uff0c\u89c6\u5f02\u5e38\u4e3a Bug<\/li>\n<li>\u4e0d\u660e\u786e\u51fa\u73b0\u5f02\u5e38\u65f6\u540e\u7eed\u5982\u4f55\u5904\u7406\uff0c<\/li>\n<li>\u6216\u8005\u662f\u6355\u83b7\u800c\u9690\u85cf\u4e86\u5f02\u5e38\u81f4\u4f7f\u5b9a\u4f4d\u9519\u8bef\u53d8\u5f97\u66f4\u96be\u3002<\/li>\n<\/ol><br\/>\nJava \u7684\u4e3b\u8981\u5f02\u5e38\u5927\u5206\u7c7b\u662f<br\/>\n<blockquote>\nThrowable<br \/>\n\u251c\u2500\u2500 Error<br \/>\n\u2514\u2500\u2500 Exception<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500 RuntimeException\n<\/blockquote>\nNullPointerException, \u8fd9\u6050\u6015\u662f\u4e00\u4e2a\u6700\u5e38\u89c1\u7684\u5f02\u5e38\uff0cJava \u5bf9\u4e00\u4e2a\u5bf9\u8c61\u662f\u5426\u80fd\u4e3a null \u503c\u6ca1\u4ec0\u4e48\u7ea6\u675f\uff0c\u751a\u81f3\u7528 null \u6765\u8868\u793a\u4e1a\u52a1\u4e0a\u7684\u7a7a\u3002\u6bd4\u5982\u8bf4\u65b9\u6cd5\u7684\u53c2\u6570\u4e0e\u8fd4\u56de\u503c\uff0cJava \u90fd\u53ef\u4ee5\u662f null \u503c\uff0c\u800c\u5728 Kotlin \u4e2d\u975e\u660e\u786e\u53ef\u4e3a null \u7684\u65f6\u4e0d\u80fd\u4e3a null"},{"title":"\u300a100 Java Mistakes and How to Avoid Them\u300b\u7b14\u8bb0 2","link":"https:\/\/yanbin.blog\/100-java-mistakes-and-how-to-avoid-them-notes-2\/","pubDate":"Wed, 25 Oct 2023 15:59:21 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/100-java-mistakes-and-how-to-avoid-them-notes-2\/","description":"\n\u7ee7\u7eed\u9605\u8bfb\u672c\u4e66\uff0c\u7f16\u7a0b\u8bed\u8a00\u5904\u7406\u6570\u503c\u90fd\u6709\u53ef\u80fd\u51fa\u73b0\u95ee\u9898\uff0c\u5982\u6ea2\u51fa\uff0c\u6574\u6570\u7684\u6700\u5927\u6700\u5c0f\u503c\u4e0d\u5bf9\u79f0\uff0cDouble.NaN \u7b49\u3002<\/p>\n<br\/>\n\u7531\u4e8e Java \u5b66\u4e86 C\uff0c\u4e5f\u7528 0 \u5f00\u59cb\u7684\u6570\u5b57\u6765\u8868\u793a 8 \u8fdb\u5236\u6570\uff0c\u5982 037, 010 \u5206\u522b\u662f\u5341\u8fdb\u5236\u7684 31 \u548c 8\uff0c\u8fd9\u4e0e\u73b0\u5b9e\u4e0d\u76f8\u7b26\u3002\u56e0\u4e3a\u5982\u679c\u4f60\u5728\u7eb8\u4e0a\u5199\u4e0b 037, 010, \u51e0\u4e4e\u6240\u6709\u4eba(\u9664\u4e86\u67d0\u4e9b\u7a0b\u5e8f\u5458)\u90fd\u4f1a\u8ba4\u4e3a\u5b83\u4eec\u5c31\u662f\u5341\u8fdb\u5236\u7684 37 \u548c 10\u3002\u4f46\u662f Java \u8868\u793a 2 \u8fdb\u5236, 16 \u8fdb\u5236\u7684\u65b9\u5f0f\u6ca1\u6709\u95ee\u9898\u7684\uff0c\u5982 0b10, 0x37\u3002IntelliJ IDEA \u770b\u5230\u4f7f\u7528 0 \u5f00\u5934\u7684 8 \u8fdb\u5236\u6570\u4f1a\u4e0d\u5efa\u8bae\u90a3\u4e48\u4f7f\u7528. 8 \u8fdb\u5236\u6570\u5b57\u7684\u8303\u56f4\u662f 0~8, \u6240\u4ee5 09 \u662f\u9519\u8bef\u7684, \u4f46\u662f Java \u7f16\u8bd1\u5668\u4f3c\u4e4e\u5bf9\u6b64\u5f88\u964c\u751f.<br\/><br\/>\nint a = 09;<br\/><br\/>\nIntelliJ IDEA \u4f1a\u63d0\u793a <code>Integer number too large<\/code>, \u7f16\u8bd1\u5668\u63d0\u793a\u8bf4 <code>java: ';' expected<\/code>, \u6709\u70b9\u9a74\u5507\u4e0d\u5bf9\u9a6c\u5634.<br\/><br\/>\n\u73b0\u5728\u51e0\u4e4e\u6ca1\u6709\u5fc5\u8981\u4f7f\u7528 0 \u5f00\u59cb\u7684 8 \u8fdb\u5236\u6570\u7684\u65b9\u5f0f, \u6216\u8bb8\u8fd8\u6709\u7528\u7684\u5c31\u662f\u8868\u793a Unix \u4e0b\u6587\u4ef6\u6743\u9650, \u5982<br\/><br\/>\nint fileMode = 0644<br\/><br\/>\n\u6240\u4ee5\u4efb\u4f55\u65f6\u5019\u770b\u5230 0 \u5f00\u5934\u7684\u6570\u5b57\u90fd\u5fc5\u987b\u4ed4\u7ec6\u68c0\u89c6, \u57fa\u672c\u53ef\u4ee5\u7981\u6b62\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f"},{"title":"JDBC \u8fde\u63a5\u4e32\u4e2d\u6307\u5b9a\u5f53\u524d schema(\u542b Oracle, DB2, PostgreSQL \u548c SQLServer)","link":"https:\/\/yanbin.blog\/jdbc-conn-string-specify-current-schema\/","pubDate":"Thu, 03 Feb 2022 11:22:14 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/jdbc-conn-string-specify-current-schema\/","description":"\n\u73b0\u5728\u6d41\u884c\u6570\u636e\u90fd\u6709 Schema \u7684\u6982\u5ff5\uff0c\u4e00\u822c\u4f5c\u4e3a\u6570\u636e\u5e93\u5bf9\u8c61(\u8868\uff0c\u51fd\u6570\uff0c\u5b58\u50a8\u8fc7\u7a0b\u7b49)\u7684\u547d\u540d\u7a7a\u95f4\u3002\u6240\u4ee5\u5728\u6570\u636e\u5e93\u7aef\u5f80\u5f80\u5b58\u5728 \u5b9e\u4f8b\/\u6570\u636e\u5e93\/Schema \u8fd9\u6837\u5c42\u7ea7\u5212\u5206\u3002\u5bf9\u4e8e DB2 \u548c Oracle \u7528\u5ba2\u6237\u7aef\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u6570\u636e\u5e93\u5e76\u975e\u6613\u4e8b\uff0c\u7075\u6d3b\u7684\u5728\u6570\u636e\u5e93\u4e2d\u8f83\u8f7b\u91cf\u7684\u5212\u5206\u9694\u79bb\u7a7a\u95f4\u7684\u529e\u6cd5\u56e0\u6570\u636e\u5e93\u7c7b\u578b\u800c\u5f02<br\/><br\/>\n<ol>\n<li>MySQL: \u521b\u5efa\u6570\u636e\u5e93(create database), create schema \u662f create database \u7684\u522b\u540d<\/li>\n<li>PostgreSQL: create database \u521b\u5efa\u65b0\u7684\u6570\u636e\u5e93\uff0c\u6216\u5728\u5f53\u524d\u6570\u636e\u5e93\u4e0b\u7528 create schema \u521b\u5efa schema<\/li>\n<li>SQLServer: \u548c PostgreSQL \u4e00\u6837\u7684\u81ea\u7531\uff0ccreate database \u521b\u5efa\u65b0\u7684\u6570\u636e\u5e93\uff0c\u6216\u5728\u5f53\u524d\u6570\u636e\u5e93\u4e0b\u7528 create schema \u521b\u5efa schema<\/li>\n<li>DB2\uff1a \u7528 create schema \u521b\u5efa\u65b0\u7684 schema, \u6216\u521b\u5efa\u6570\u636e\u5e93\u5bf9\u8c61\u65f6\u76f4\u63a5\u52a0\u4e0a\u524d\u7f00\uff0ccreate table abc.test1..., \u6ca1\u6709 abc schema\u00a0\u5219\u4f1a\u81ea\u52a8\u521b\u5efa<\/li>\n<li>Oracle: create schema \u8f83\u9ebb\u70e6\uff0c\u6d89\u53ca\u5230 authorization. \u4f46\u53ef\u4ee5\u901a\u8fc7 create user \u521b\u5efa\u65b0\u7528\u6237\u540e\u5c31\u6709\u4e86\u5bf9\u5e94\u7684\u65b0 schema<\/li>\n<\/ol>\n<br\/>\n\u4e0b\u9762\u6211\u4eec\u6765\u4e86\u89e3\u4e0b\u5728 PostgreSQL\/SQLServer \u4e2d\u521b\u5efa\u65b0\u7684 schema\uff0c\u5982\u4f55\u5728 JDBC \u8fde\u63a5\u5b57\u4e32\u4e2d\u6307\u5b9a\u9ed8\u8ba4 schema, \u540c\u65f6\u4e5f\u6d89\u53ca\u5230 database\/schema\/user \u7684\u521b\u5efa\u4ee5\u53ca\u5728 SQL \u4e2d\u5982\u4f55\u5207\u6362\u3002"},{"title":"Java 10 ~ 16 \u4e00\u8def\u5411\u524d\u51b2(\u65b0\u7279\u6027\u4e00\u7ba9\u7b50)","link":"https:\/\/yanbin.blog\/java-10-16-new-features\/","pubDate":"Sat, 08 May 2021 00:06:57 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-10-16-new-features\/","description":"\nJava \u4e00\u8def\u7a81\u7a81\u7a81\uff0c \u7248\u672c 16 \u5728 2021-03-16 \u90fd\u53d1\u5e03\u4e86, \u800c\u6211\u4eec\u4e00\u76f4\u788d\u4e8e Java 9 \u7684\u5927\u6539\u8fd8\u5728 Java 8 \u4e0a\u539f\u5730\u8e0f\u6b65, \u4ee5\u5f80\u6bcf\u5f53\u6709\u65b0\u7248\u672c JDK \u53d1\u5e03\u540e\u90fd\u662f\u5f88\u5feb\u5c31\u9a8c\u8bc1\uff0c\u7acb\u9a6c\u5347\u7ea7\u3002<a href=\"https:\/\/www.codejava.net\/java-se\/java-se-versions-history\">Java SE versions history<\/a>) \u5217\u51fa\u4e86\u6240\u6709 Java \u7684\u5386\u53f2\u7248\u672c\u7684\u53d1\u5e03\u65e5\u671f\u3002\u5728\u4eca\u5929(2021-05-04) \u7f51\u7ad9 <a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase-downloads.html\">Java SE Downloads<\/a>\u00a0\u4e0a\u76f4\u63a5\u63d0\u4f9b\u4e0b\u8f7d\u7684 Java SE \u7248\u672c\u6709\u4ee5\u4e0b\u4e09<br\/>\n<ol>\n<li>Java SE 16.0.1<\/li>\n<li>Java SE 11.0.11(LTS)<\/li>\n<li>Java SE 8u291<\/li>\n<\/ol>\n<br\/>\n\u4e24\u4e2a LTS(\u957f\u671f\u652f\u6301) \u7248 8 \u548c\u00a0 11\uff0c\u5916\u52a0\u4e00\u4e2a\u76ee\u524d\u6700\u65b0\u7684\u975e\u00a0 LTS \u7248\u672c 16, \u5176\u4ed6\u7684\u7248\u672c\u90fd\u88ab\u5f52\u6863\u5230\u4e86 <a href=\"https:\/\/www.oracle.com\/java\/technologies\/oracle-java-archive-downloads.html\">Java Archive<\/a>. \u67e5\u770b\u4e00\u4e0b <a href=\"https:\/\/www.oracle.com\/java\/technologies\/java-se-support-roadmap.html\">Java \u652f\u6301\u7684 roadmap<\/a>, \u51e0\u4e2a LTS \u7248\u672c\u7684\u670d\u52a1\u652f\u6301\u5e74\u9650<br\/>\n<blockquote>\n\u7248\u672c\u672c\u00a0 \u00a0 \u00a0 \u53d1\u5e03\u65e5\u00a0 \u00a0 \u00a0 \u00a0\u539f\u5b9a\u652f\u6301\u81f3\u00a0 \u00a0 \u00a0 \u5ef6\u671f\u652f\u6301\u81f3<br \/>\nJava 8\u00a0 \u00a0 \u00a0 2014\/3\u00a0 \u00a0 \u00a0 \u00a02022\/3\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<span style=\"color: #800000;\"><strong>2030\/12<\/strong><\/span><br \/>\nJava 11\u00a0 \u00a0 \u00a02018\/9\u00a0 \u00a0 \u00a0 2023\/9\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2026\/9<br \/>\nJava 17\u00a0 \u00a0 \u00a02021\/9\u00a0 \u00a0 \u00a0 2026\/9\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2029\/9\n<\/blockquote>\n\u6ce8\u610f\u5230 Java 8 \u5c06\u6bd4 Java 11 \u548c\u5c06\u6765\u7684 Java 17 \u751f\u547d\u529b\u8fd8\u987d\u5f3a\uff0c\u4e00\u4e0b\u5c31\u89c9\u5f97\u8fd9\u4e48\u4e45\u575a\u5b88\u5728 Java 8 \u7684\u9635\u5730\u4e0a\u4e0d\u5e94\u89c9\u5f97\u6709\u4ec0\u4e48\u597d\u5bb3\u7f9e\u7684\u3002\u773c\u770b\u7740\u4e0b\u4e00\u4e2a LTS \u7248\u672c\u7684 Java 17 \u5c31\u8981\u5728\u4eca\u5e74 9 \u6708\u4efd\u53d1\u5e03\u4e86\uff0cJava 11 \u770b\u6765\u662f\u8981\u9519\u8fc7\u4e86\uff0c\u7b49\u51c6\u5907\u597d\u548c Java 8 \u544a\u522b\u65f6\u8981\u76f4\u63a5\u8df3\u5230 Java 17 \u4e86\u3002"},{"title":"\u8bd5\u624b RxJava 2.x \u53ca\u5bf9\u7ebf\u7a0b\u7684\u521d\u6b65\u7406\u89e3","link":"https:\/\/yanbin.blog\/rxjava-get-started\/","pubDate":"Wed, 19 Jun 2019 23:57:56 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/rxjava-get-started\/","description":"\n\u5728\u8fdb\u884c\u6570\u636e\u6d41\u5904\u7406\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u4e00\u4e2a\u9ad8\u6548\u82d7\u6761\u7684\u6d41\u5904\u7406\u7ec4\u4ef6\uff0c\u6bd4\u5982\u5bf9\u8f93\u5165\u6d41\u80fd\u8fdb\u884c\u5206\u7ec4(\u7a97\u53e3)\uff0c\u80fd\u8fdb\u884c\u6d41\u91cf\u63a7\u5236(Back Pressure - \u80cc\u538b)\uff0c\u8fd9\u4e5f\u5c31\u6d89\u53ca\u5230\u54cd\u5e94\u5f0f\u7f16\u7a0b\uff0c\u6d41\u5904\u7406\u6846\u67b6\u3002\u8fd9\u65b9\u9762\u5982\u679c\u76f4\u63a5\u57fa\u4e8e Akka actor \u6765\u6784\u5efa Akka ActorSystem \u4e5f\u662f\u6bd4\u8f83\u590d\u6742\uff0c\u4f9d\u8d56\u7684\u7ec4\u4ef6\u4e5f\u4e0d\u5c11\u3002\u8fd8\u6709\u6784\u7b51\u5728 Akka actor \u4e4b\u4e0a\u7684 Akka Streams\uff0c\u518d\u5f80\u4e0a\u7684 Flink Streaming\uff0c\u5b83\u4eec\u90fd\u6709\u50cf\u6ed1\u52a8\uff0c\u6eda\u52a8\u7a97\u53e3\u7684\u6982\u5ff5\uff0c\u4f46\u662f\u4f9d\u8d56\u66f4\u4e0d\u5f97\u4e86\u3002\u4e00\u4e2a\u57fa\u672c\u7684 Flink Streaming \u7684\u9879\u76ee\u4f1a\u4f9d\u8d56\u5230 45 M \u4ee5\u4e0a\u7684\u7b2c\u4e09\u65b9\u7ec4\u4ef6\uff0c\u5982\u679c\u7528\u5b83\u6765\u5199\u4e00\u4e2a\u6570\u636e\u6d41\u5904\u7406\u7684\u5171\u4eab\u7ec4\u4ef6\uff0c\u90a3\u771f\u662f\u8981\u547d\u3002Spring 5 \u4e5f\u5f00\u59cb\u5e26\u4e0a\u4e86\u81ea\u5df1\u7684 Reactive-Streams \u5b9e\u73b0 Spring Reactor, \u60f3\u8981\u628a\u5b83\u4ece Spring \u4e2d\u5355\u72ec\u62bd\u79bb\u51fa\u4e5f\u975e\u6613\u4e8b\u3002<\/p>\n<blockquote>\nFlink Streaming \u7ec4\u4ef6\u4f9d\u8d56\uff1aorg.apache.fling:flink-streaming-java_2.12:1.80, \u4f1a\u4f9d\u8d56\u4e8e\u5176\u4ed6\u8bf8\u5982 akka-stream, akka-actor, flink-core, flink-clients, scala-library \u7b49\u975e\u5e38\u591a\u7684\u4e1c\u897f\n<\/blockquote>\n\u800c\u53e6\u4e00\u4e2a\u8457\u540d\u7684\u54cd\u5e94\u5f0f\u6846\u67b6 RxJava 2 \u5c31\u6e05\u723d\u591a\u4e86\uff0c\u5b8c\u5168\u6ca1\u6709\u7b2c\u4e09\u65b9\u4f9d\u8d56\uff0c\u8981\u8bf4\u6709\u4e5f\u5c31\u662f\u5b9a\u4e49\u4e86\u56db\u4e2a\u63a5\u53e3\u7684 reactive-streams(2 KB \u5927\u5c0f)\uff0c\u5c31\u81ea\u8eab\u90a3\u4e2a\u00a0 rxjava-2.2.9.jar \u5305\u53ea\u6709 2.3 M\uff0c\u8fd9\u624d\u53eb\u8f7b\u91cf\u7ea7\u3002\u56e0\u4e3a\u5b83\u8bbe\u8ba1\u6765\u662f\u80fd\u88ab\u5e94\u7528\u4e8e Android \u5ba2\u6237\u7aef\u5e94\u7528\u7684\uff0cAndriod \u4e0a\u7684 rxandriod-1.2.1.aar \u53ea\u6709 9 K\u3002\u6240\u4ee5 RxJava 2.x \u592a\u9002\u5408\u7528\u6765\u5199\u4e00\u4e9b\u5c0f\u7684\u5171\u4eab\u7ec4\u4ef6\u4e86\u3002"},{"title":"Java \u4e0e'\u5d4c\u5165\u5f0f' PostgreSQL \u6570\u636e\u5e93\u7684\u5355\u5143\u6d4b\u8bd5","link":"https:\/\/yanbin.blog\/java-postgresql-unit-test\/","pubDate":"Mon, 03 Jun 2019 23:14:58 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-postgresql-unit-test\/","description":"\n<p>\u5728\u6211\u4eec\u5bf9\u6570\u636e\u5e93 DAO \u7c7b\u8fdb\u884c\u5355\u5143\u6d4b\u8bd5\u65f6\uff0c\u901a\u5e38\u4e0d\u5e94\u8be5\u4f9d\u8d56\u4e8e\u4e00\u4e2a\u5916\u90e8\u6570\u636e\u5e93\uff0c\u6240\u4ee5\u4f1a\u9009\u7528\u7279\u5b9a\u6bd4\u8f83\u63a5\u8fd1\u4e8e\u771f\u5b9e\u6570\u636e\u5e93\u7c7b\u578b\u7684\u5185\u5b58\u6216\u5d4c\u5165\u5f0f\u6570\u636e\u5e93\uff0c\u5982 HSQLDB(HyperSQL), H2, Derby \u7b49\u3002\u4f46\u603b\u96be\u514d\u4f1a\u7528\u5230\u7279\u5b9a\u6570\u636e\u5e93\u7684\u7279\u6027\uff0c\u8fd9\u65f6\u5019\u5c31\u65e0\u6cd5\u7528\u524d\u8ff0\u5404\u79cd\u6570\u636e\u5e93\u8fdb\u884c\u6d4b\u8bd5\u4e86\u3002\u975e\u8981\u5355\u5143\u6d4b\u8bd5\u4e2d\u8986\u76d6\u5230\u6240\u7528\u7684\u6570\u636e\u5e93\u7279\u6027\u7684\u8bdd\u53ef\u4ee5\u9009\u62e9\u7528 docker\uff0c\u5982 <a href=\"https:\/\/www.testcontainers.org\/\">Testcontainers<\/a>, \u7ecf\u8fc7\u6a21\u5757\u6269\u5c55\uff0c\u5b83\u53ef\u4ee5\u7531 docker \u6765\u542f\u52a8\u8bb8\u591a\u79cd\u7c7b\u578b\u7684\u6570\u636e\u5e93\uff0cMySQL, Postgres, Oracle-XE, MS SQL Server, Couchbase \u7b49\u7b49\uff0c\u8be6\u60c5\u89c1 <a href=\"https:\/\/www.testcontainers.org\/modules\/databases\/\">Database containers<\/a>\u3002\u521a\u4e86\u89e3\u5230\u7684\u662f\u5b83\u7684\u6a21\u5757\u5316\u7684\u65e0\u9650\u53ef\u80fd\uff0c\u50cf\u652f\u6301 Kafka Containers \u548c Localstack Module \u7b49\u3002<\/p>\n<p>\u8fd9\u91cc\u5c31\u4e0d\u8d70 Testcontainers \u90a3\u6761\u8def -- \u8981\u6c42\u6784\u5efa\u670d\u52a1\u5668\u4e0a\u4e5f\u8981\u6709 docker\u3002\u65e9\u5148\u5e0c\u671b\u80fd\u627e\u5230\u4e00\u79cd\u5d4c\u5165\u5f0f\u6216\u5185\u5b58 PostgreSQL \u6570\u636e\u5e93\uff0c\u540e\u6765\u53d1\u73b0 PostgreSQL \u672a\u80fd\u63d0\u4f9b In-Process \u548c In-Memory \u7684\u542f\u52a8\u65b9\u5f0f\uff0c\u597d\u5728 PostgreSQL \u662f\u5f00\u6e90\uff0c\u6709\u4eba\u53ef\u4ee5\u628a\u5b83\u6539\u9020\u4e3a\u5c0f\u578b\u7684\u53ef\u7531\u6d4b\u8bd5\u4ee3\u7801\u542f\u505c\u7684\u672c\u5730\u6570\u636e\u5e93\u3002\u6709\u4e24\u4e2a\u5177\u6709\u4ee3\u8868\u6027\u7684\u7ec4\u4ef6\uff0c\u5206\u522b\u662f <a href=\"https:\/\/github.com\/opentable\/otj-pg-embedded\">OpenTable Embedded PostgreSQL Component<\/a> \u548c <a href=\"https:\/\/github.com\/yandex-qatools\/postgresql-embedded\">Embedded PostgreSQL Server<\/a>\uff0c\u5b83\u4eec\u90fd\u53f7\u79f0\u662f Embedded\uff0c\u6240\u8c13\u5d4c\u5165\u5f0f\uff0c\u5176\u5b9e\u662f\u8fdb\u6d4b\u8bd5\u8fdb\u7a0b\u5916\u7684\u6570\u636e\u5e93\u3002<\/p>\n<p>\u4e0b\u9762\u7b80\u5355\u4f53\u9a8c\u4e0b\u4e24\u4e2a\u7ec4\u4ef6\u7684\u7528\u6cd5"},{"title":"\u4e00\u4e2a\u7b80\u5355\u7684 Java \u81ea\u52a8\u6279\u5904\u7406\u961f\u5217","link":"https:\/\/yanbin.blog\/simple-java-auto-batch-queue\/","pubDate":"Fri, 17 Feb 2017 01:58:38 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/simple-java-auto-batch-queue\/","description":"\n\u5b9e\u9645\u4e2d\u53ef\u80fd\u6709\u8fd9\u6837\u7684\u5e94\u7528\u573a\u666f\uff0c\u5f97\u5230\u4e00\u4e2a\u8bb0\u5f55\u4e0d\u9700\u8981\u7acb\u5373\u53bb\u5904\u7406\u5b83\uff0c\u800c\u662f\u7b49\u7d2f\u79ef\u5230\u4e00\u5b9a\u6570\u91cf\u65f6\u518d\u6279\u91cf\u5904\u7406\u5b83\u4eec\u3002\u6211\u4eec\u53ef\u4ee5\u7528\u4e00\u4e2a\u8ba1\u6570\u5668\uff0c\u6765\u4e00\u4e2a\u52a0\u4e00\u4e2a\uff0c\u91cf\u5927\u65f6\u4e00\u5757\u5904\u7406\uff0c\u7136\u540e\u53c8\u91cd\u96f6\u5f00\u59cb\u8ba1\u6570\u3002\u5982\u679c\u8bb0\u5f55\u7684\u6765\u6e90\u5355\u4e00\u8fd8\u597d\u529e\uff0c\u8981\u662f\u6709\u591a\u4e2a\u6570\u636e\u6e90\u6765\u63d0\u4f9b\u8bb0\u5f55\u5c31\u4f1a\u6709\u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\u6570\u636e\u4e22\u5931\u7684\u95ee\u9898\u3002<\/p>\n<br\/>\n\u8fd9\u91cc\u6211\u7f16\u5199\u4e86\u4e00\u4e2a\u6700\u7b80\u5355\u7684\u4efb\u52a1\u6279\u5904\u7406\u7684\u961f\u5217\uff0c\u6784\u9020\u4e86\u544a\u8bc9\u5b83\u6279\u5904\u7406\u6570\u91cf\uff0c\u6d88\u8d39\u8005\uff0c\u7136\u540e\u5c31\u53ea\u7ba1\u5f80\u961f\u5217\u91cc\u6dfb\u52a0\u8bb0\u5f55\uff0c\u961f\u5217\u5728\u6ee1\u8db3\u6761\u4ef6\u65f6\u81ea\u52a8\u8fdb\u884c\u6279\u5904\u7406\u3002\u56e0\u4e3a\u5185\u90e8\u4f7f\u7528\u7684\u662f <code>BlockingQuque<\/code> \u6765\u5b58\u50a8\u8bb0\u5f55\uff0c\u6240\u4ee5\u591a\u7ebf\u7a0b\u5f80\u91cc\u540c\u65f6\u6dfb\u52a0\u8bb0\u5f55\u4e5f\u6ca1\u5173\u7cfb\uff0c\u6700\u540e\u7684\u672a\u8fbe\u5230 <code>batchSize<\/code>, \u7684\u90a3\u4e9b\u8bb0\u5f55\u53ef\u4e3b\u52a8\u8c03\u7528 <code>completeAll()<\/code> \u51fd\u6570\u6216\u5728\u8fbe\u5230 timeout \u540e\u6765\u89e6\u53d1\u6279\u5904\u7406\uff0c\u5e76\u4e14\u7ed3\u675f\u961f\u5217\u5185\u7684\u5faa\u73af\u7ebf\u7a0b\u3002<br\/><br\/>\n\u6ce8\u610f: \u591a\u7ebf\u7a0b\u73af\u5883\u4e0b\u5f80\u4e00\u4e2a\u65e0\u7ebf\u7a0b\u4fdd\u62a4\u7684\u96c6\u5408\u6216\u7ed3\u6784\u4e2d\uff0c\u5982 ArrayList, LinkedList, HashMap, StringBuilder \u4e2d\u6dfb\u52a0\u8bb0\u5f55\u975e\u5e38\u5bb9\u6613\u9020\u6210\u6570\u636e\u7684\u4e22\u5931\uff0c\u800c\u5f80\u6709\u7ebf\u7a0b\u4fdd\u62a4\u7684\u76ee\u7684\u5730\u5199\u4e1c\u897f\u5c31\u5b89\u5168\u4e86\uff0c\u5982 Vector, Hashtable, StringBuffer, BlockingQueue\u3002\u5f53\u7136\u6027\u80fd\u4e0a\u8981\u4ed8\u51fa\u4e00\u70b9\u4ee3\u4ef7\uff0c\u4e0d\u8fc7\u5bf9\u4e8e\u4f7f\u7528\u4e86\u53ef\u91cd\u5165\u9501(ReentrantLock), \u800c\u975e\u540c\u6b65\u9501(synchronized) \u7684\u6570\u636e\u7ed3\u6784\u8fd8\u662f\u53ef\u4ee5\u653e\u5fc3\u4f7f\u7528\u7684\u3002<br\/><br\/>\n\u4e0b\u9762\u662f BatchQueue \u7684\u7b80\u5355\u5b9e\u73b0"},{"title":"Java \u8bed\u8a00\u7684\u51e0\u4e2a\u7f3a\u9677\u4e4b\u516d: \u65e0\u5b57\u7b26\u4e32\u63d2\u503c","link":"https:\/\/yanbin.blog\/java-language-defect-no-string-interpolation\/","pubDate":"Tue, 12 Jul 2016 02:07:43 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-language-defect-no-string-interpolation\/","description":"\nJava \u5728\u5b9a\u4e49\u5b57\u7b26\u4e32\u7684\u65f6\u5019\u4e0d\u652f\u6301\u5b57\u7b26\u4e32\u63d2\u503c, \u5373\u4e0d\u80fd\u5728\u5b57\u7b26\u4e32\u4e2d\u6355\u83b7\u4f5c\u7528\u57df\u4e2d\u7684\u53d8\u91cf, \u7528\u6765\u7ec4\u6210\u5f53\u524d\u5b57\u7b26\u4e32. \u800c\u8fd9\u53ef\u4ee5\u8bf4\u662f\u5176\u4ed6\u5404\u79cd\u8a00\u90fd\u5177\u5907\u7684\u57fa\u672c\u7279\u6027. \u4f8b\u5982 Bash \u4e2d\u53ef\u4ee5\u8fd9\u6837\n<br\/>\n<blockquote>\nbash-3.2$ name=Yanbin<br \/>\nbash-3.2$ echo \"Hello $name\"<br \/>\nHello Yanbin\n<\/blockquote>\nJava \u4e2d\u4e0d\u652f\u6301\u7c7b\u4f3c\u7684\u65b9\u5f0f<br\/>\n<blockquote>\nString name = \"Yanbin\";<br \/>\nString greeting = \"Hello $name\"; \u00a0\/\/Java \u4e2d\u65e0\u6cd5\u628a $name \u66ff\u6362\u4e3a name \u53d8\u91cf\u503c \"Yanbin\"\n<\/blockquote>\n\u800c\u4f7f\u7528 Java \u5fc5\u987b\u7528 String \u7684\u9759\u6001\u65b9\u6cd5 format (\u6ce8\u610f\u662f\u9759\u6001\u65b9\u6cd5\u54e6) \u6765\u95f4\u63a5\u7684\u683c\u5f0f\u5316\u51fa\u4e00\u4e2a\u5b57\u7b26\u4e32, \u53ef\u4ee5\u8fd9\u4e48\u5199<br\/>\n<blockquote>\nString.format(\"Hello %s\", \"World\");<br \/>\nString.format(\"%1$s %1$s %s %s %2$s\", \"aa\", 10); \u00a0 \u00a0\/\/aa aa aa 10 10\n<\/blockquote>\n\u6211\u4eec\u770b\u5230\u5728\u7528 format \u683c\u5f0f\u5316\u65f6\u5339\u914d\u53c2\u6570\u4f1a\u662f\u4e00\u4e2a\u4e0d\u5c0f\u7684\u95ee\u9898, \u76f8\u540c\u4f7f\u7528\u6cd5\u7684\u6253\u5370\u8f93\u51fa\u65b9\u6cd5\u662f <code>System.out.printf()<\/code>. \u522b\u8bf4\u5b57\u7b26\u4e32\u63d2\u503c\u4e86, \u5982\u679c format \u65b9\u6cd5\u662f String \u7684\u4e00\u4e2a\u5b9e\u4f8b\u65b9\u6cd5\u5e94\u7528\u8d77\u6765\u90fd\u4f1a\u4fbf\u5229\u4e9b, \u5982 <code>\"Hello %s\".format(\"World\")<\/code>\u00a0\u4f1a\u5bb9\u6613\u8bfb\u4e9b, Scala \u7684\u5b57\u7b26\u4e32\u5b9e\u4f8b\u5c31\u6709 <code>format<\/code>\u00a0\u65b9\u6cd5\u4e86."},{"title":"Java \u8bed\u8a00\u7684\u51e0\u4e2a\u7f3a\u9677\u4e4b\u4e94: \u591a\u8fd4\u56de\u503c\u95ee\u9898","link":"https:\/\/yanbin.blog\/java-language-defect-no-multiple-returns\/","pubDate":"Sun, 10 Jul 2016 02:10:26 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-language-defect-no-multiple-returns\/","description":"\n\u5e0c\u671b Java \u80fd\u652f\u6301\u52a8\u6001\u5bf9\u8c61(\u533f\u540d\u5bf9\u8c61) \u7684\u7279\u6027\u662f\u6e90\u4e8e\u60f3\u8981 Java \u65b9\u6cd5\u80fd\u4f18\u96c5\u7684\u8fd4\u56de\u591a\u4e2a\u503c. \u76ee\u524d\u5982\u679c\u5e0c\u671b Java \u65b9\u6cd5\u8fd4\u56de\u591a\u4e2a\u503c\u7684\u505a\u6cd5\u6709\u8fd4\u56de\u4e00\u4e2a\u81ea\u5b9a\u4e49\u5bf9\u8c61, \u6570\u7ec4\u6216\u5217\u8868, \u6216 Map. \u8fd9\u79cd\u9700\u6c42\u591a\u53d1\u751f\u5728\u79c1\u6709\u65b9\u6cd5\u4e0a, \u4f46\u76ee\u524d\u7684\u89e3\u51b3\u529e\u6cd5\u6709\u5982\u4e0b\u5f0a\u7aef:<\/p>\n<br\/>\n<ol>\n<li>\u5982\u679c\u7528\u81ea\u5b9a\u4e49\u7c7b\u6765\u4f5c\u4e3a\u8fd4\u56de\u7c7b\u578b\u7684\u8bdd, \u4f1a\u4f7f\u5f97\u7c7b\u8fc7\u4e8e\u6742\u4e71, \u800c\u4e14\u8fd9\u4e9b\u81ea\u5b9a\u4e49\u7c7b\u7684\u590d\u7528\u6027\u4e0d\u9ad8<\/li>\n<li>\u6570\u7ec4\u6216\u5217\u8868\u6709\u592a\u5f3a\u7684\u987a\u5e8f\u4f9d\u8d56, \u6ca1\u6709\u5c5e\u6027\u540d\u544a\u77e5\u6bcf\u4e2a\u4f4d\u7f6e\u4e0a\u503c\u7684\u610f\u4e49, \u800c\u4e14\u7c7b\u578b\u90fd\u5fc5\u987b\u4e3a Object<\/li>\n<li>\u8fd4\u56de Map \u7684, \u5728\u7ef4\u62a4 Key \u4e0a\u5bb9\u6613\u51fa\u9519(\u6216\u987b\u4e3a Key \u5b9a\u4e49\u5f88\u591a\u5b57\u7b26\u4e32\u5e38\u91cf), \u4e14\u7c7b\u578b\u4e5f\u662f\u4e3a Object.<\/li>\n<\/ol>\n<br\/>\n\u8bf4\u4e86\u4e0a\u9762\u8bb8\u591a, \u5404\u4f4d\u53ef\u80fd\u8fd8\u4e0d\u5b9a\u6e05\u695a\u6211\u60f3\u8981\u7684\u662f\u4ec0\u4e48, \u5176\u5b9e\u5c31\u662f\u7c7b\u4f3c\u4e8e C# \u7684\u533f\u540d\u5bf9\u8c61(\u6216\u66f0\u52a8\u6001\u5bf9\u8c61), \u770b\u4e00\u6bb5 C# \u00a0\u7684\u65b9\u6cd5\u8fd4\u56de\u4e00\u4e2a\u533f\u540d\u5bf9\u8c61\u7684\u4f8b\u5b50(.NET3.5 \u5f00\u59cb\u5f15\u5165\u533f\u540d\u5bf9\u8c61, .NET 4.0 \u540e\u533f\u540d\u5bf9\u8c61\u53ef\u4ee5\u4f5c\u4e3a\u51fd\u6570\u503c)"},{"title":"Java \u8bed\u8a00\u7684\u51e0\u4e2a\u7f3a\u9677\u4e4b\u56db: \u8fc7\u65f6\u7684 JavaBean","link":"https:\/\/yanbin.blog\/java-language-defect-4-outdated-javabean\/","pubDate":"Sat, 09 Jul 2016 03:35:14 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-language-defect-4-outdated-javabean\/","description":"\n\u66fe\u51e0\u4f55\u65f6\u5728\u4e1a\u52a1\u5206\u5c42\u7ed3\u6784\u4e2d\u7684 VO \u6216 DTO \u5c42\u5145\u65a5\u7740\u65e0\u6570\u7684\u6807\u51c6 JavaBean \u7c7b, \u90a3\u4e9b\u788d\u624b\u811a\u7684 getter\/setter \u65b9\u6cd5\u7b80\u503c\u4e0d\u5fcd\u76f4\u89c6. \u6216\u8bb8 JavaBean \u8bbe\u5b9a\u89c4\u8303\u7684\u7528\u610f\u662f\u5f53\u67d0\u4e9b\u5c5e\u6027\u4e3a\u53ea\u8bfb\u65f6\u4e0d\u63d0\u4f9b setter \u65b9\u6cd5, \u800c\u5b9e\u9645\u4f7f\u7528\u65f6, \u56e0 getter\/setter \u90fd\u540c\u65f6\u5177\u5907, \u90a3\u4e48 JavaBean \u7684\u6240\u6709\u79c1\u6709\u5c5e\u6027\u53c8\u4f55\u5f02\u4e8e\u516c\u6709\u5c5e\u6027\u5462.\u00a0<\/p>\n<br\/>\n\u66f4\u522b\u8bf4\u5bf9\u4e8e\u67d0\u4e9b\u5f62\u5f0f\u7684\u5c5e\u6027\u540d, \u82e5\u5c5e\u6027\u540d\u4e3a <code>xCoordinate<\/code>\u00a0\u00a0\u65f6, \u5b83\u6240\u5bf9\u5e94\u7684 getter \u65b9\u6cd5\u5206\u522b\u662f <code>getxCoordinate()<\/code>,\u4e00\u822c\u7684 IDE \u90fd\u4f1a\u4e3a\u5b83\u81ea\u52a8\u751f\u6210 <code>getXCoordinate()<\/code>\u00a0\u65b9\u6cd5, \u8fd9\u662f\u9519\u8bef\u7684. \u00a0\u5b9e\u9645\u4e0a <code>getXCoordinate()<\/code>\u00a0\u5bf9\u5e94\u7684\u5c5e\u6027\u540d\u662f <code>XCoordinate<\/code>.\u00a0<br\/><br\/>\n\u6240\u4ee5 Play Framework 1 \u4ee5\u53ca Play Framework 2.4.6 \u4e4b\u524d\u7684\u7248\u672c\u91c7\u7528\u4e86\u5b57\u8282\u7801\u589e\u5f3a\u7684\u6280\u672f, \u5b9e\u73b0\u4e86\u50cf Objective-C \u7684 @property \u7684\u7279\u6027, \u5373\u53ea\u8981\u58f0\u660e\u516c\u6709\u5c5e\u6027, \u7f16\u8bd1\u5668\u4e3a\u8be5\u5c5e\u6027\u751f\u6210\u9ed8\u8ba4\u7684 getter\/setter \u65b9\u6cd5, \u60a8\u4e5f\u53ef\u4ee5\u624b\u5de5\u53bb\u8986\u76d6\u4e2a\u522b\u9ed8\u8ba4\u7684 getter\/setter \u65b9\u6cd5.<br\/><br\/>\n\u56e0\u6b64\u5728 Play Framework \u4e2d\u4e66\u5199\u7684\u7684 \u00a0model \u7c7b\u5c31\u53ea\u9700\u8981\u5c5e\u6027\u4e86, \u50cf<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">User<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kt\">int<\/span><span class=\"w\"> <\/span><span class=\"n\">id<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">name<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">email<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">address<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">6<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u5c31\u8fd9\u4e48\u7b80\u5355, \u60f3\u50cf\u4e00\u4e0b\u5982\u679c\u6211\u4eec\u4e3a\u4e00\u4e2a\u4f17\u591a\u5c5e\u6027\u7684 model \u7c7b\u8865\u5168\u6240\u6709\u7684 getter\/setter \u65b9\u6cd5\u8bfb\u8d77\u6765\u6709\u591a\u6050\u6016."},{"title":"Java \u8bed\u8a00\u7684\u51e0\u4e2a\u7f3a\u9677\u4e4b\u4e09: \u4e0d\u652f\u6301 var \u7c7b\u578b\u63a8\u65ad","link":"https:\/\/yanbin.blog\/java-language-defect-3-not-support-var-type-infer\/","pubDate":"Sat, 09 Jul 2016 02:26:36 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-language-defect-3-not-support-var-type-infer\/","description":"\n<p>\u867d\u8bf4 Java \u7684\u652f\u6301\u6cdb\u578b\u4ee5\u53ca\u8fd1\u671f Lambda \u00a0\u8868\u8fbe\u5f0f\u7684\u52a0\u5165, \u5728\u5bf9\u7c7b\u578b\u8fdb\u884c\u63a8\u65ad\u4e0a\u5df2\u7ecf\u5f88\u5f3a\u5927\u4e86, \u4f46\u5728\u7c7b\u578b\u58f0\u660e\u7684\u65f6\u5019\u4ecd\u7136\u7565\u663e\u5197\u4f59,\n\u6700\u4e3b\u8981\u7684\u4e00\u70b9\u662f Java \u4e0d\u80fd\u50cf Scala \u90a3\u6837\u5728\u58f0\u660e\u53d8\u91cf\u6709\u8d4b\u503c\u7684\u60c5\u51b5\u4e0b\u8fdb\u884c\u7c7b\u578b\u63a8\u65ad. \u6211\u4eec\u5148\u6765\u770b\u4e0b Java \u00a0\u5df2\u7ecf\u4e3a\u6211\u4eec\u6240\u8fdb\u884c\u7684\u6539\u8fdb:<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">strings<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">();<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u521a\u5f15\u5165\u6cdb\u578b\u65f6\u6211\u4eec\u662f\u8fd9\u6837<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">strings<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;&gt;<\/span><span class=\"p\">();<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u540e\u6765\u53d8\u6210\u8fd9\u6837\u4e86, \u53ef\u4ee5\u94bb\u77f3\u7b26\u53f7\u63a8\u65ad, Java 7<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"n\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">list<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;&gt;<\/span><span class=\"p\">();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"n\">list<\/span><span class=\"p\">.<\/span><span class=\"na\">addAll<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ArrayList<\/span><span class=\"o\">&lt;&gt;<\/span><span class=\"p\">());<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u6839\u636e list.addAll() \u4e0a\u4e0b\u6587\u63a8\u65ad\u8981\u521b\u5efa\u7684\u7c7b\u578b\u662f new ArrayList&lt;String&gt;(), Java 8<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"kd\">interface<\/span> <span class=\"nc\">Foo<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">dodo<\/span><span class=\"p\">();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"n\">Foo<\/span><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"o\">-&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Foo:dodo()&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/Java 8 Lambda \u53ef\u4ee5\u6839\u636e Lambda \u8868\u8fbe\u5f0f\u7684\u7b7e\u540d\u63a8\u65ad\u51fa\u63a5\u53e3\u7c7b\u578b<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"n\">foo<\/span><span class=\"p\">.<\/span><span class=\"na\">dodo<\/span><span class=\"p\">();<\/span><\/span><\/span><\/code><\/pre><\/div>\n<p>\u5728 Java 7 \u7684\u6cdb\u578b\u65b9\u6cd5\u5176\u5b9e\u4e5f\u662f\u53ef\u4ee5\u901a\u8fc7\u58f0\u660e\u7c7b\u578b\u4e0e\u65b9\u6cd5\u53c2\u6570\u6765\u63a8\u65ad\u8981\u8fd4\u56de\u7684\u5177\u4f53\u7c7b\u578b\u7684."},{"title":"Java \u8bed\u8a00\u7684\u51e0\u4e2a\u7f3a\u9677\u4e4b\u4e8c: equals() \u6bd4\u8f83\u5b57\u7b26\u4e32","link":"https:\/\/yanbin.blog\/java-language-defect-2-equals-compare-strings\/","pubDate":"Sat, 09 Jul 2016 00:50:45 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-language-defect-2-equals-compare-strings\/","description":"\n\u5bf9\u4e8e\u9762\u5411\u5bf9\u8c61\u7684\u8bed\u8a00\u4e0d\u77e5\u9053\u9664\u4e86 Java \u8fd8\u6709\u6ca1\u522b\u7684\u8bed\u8a00\u4f1a\u62ff\u600e\u4e48\u6bd4\u8f83\u4e24\u4e2a\u5b57\u7b26\u4e32\u76f8\u7b49\u9891\u9891\u4f5c\u4e3a\u9762\u8bd5\u9898\u6765\u8003. \u539f\u672c\u662f\u5728\u7f16\u7a0b\u8bed\u8a00\u4e2d\u4e24\u4e2a\u5b57\u7b26\u4e32\u5185\u5bb9\u662f\u5426\u76f8\u7b49\u65f6\u7528 <code>==<\/code>\u00a0\u6bd4\u8f83\u65f6\u5374\u53ef\u80fd\u662f\u4e0d\u5bf9\u7684. \u5728 Java \u4e2d\n<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"s\">&#34;ab&#34;<\/span><span class=\"w\"> <\/span><span class=\"o\">==<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;ab&#34;<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/true<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"s\">&#34;ab&#34;<\/span><span class=\"w\"> <\/span><span class=\"o\">==<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;new String(&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34;) \/\/false\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"s\">&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34; == String.value(&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34;) \/\/true\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"><span class=\"s\">new String(&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34;).equals(new String(&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34;)) \/\/true\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\"><span class=\"s\">new String(&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34;).intern() == new String(&#34;<\/span><span class=\"n\">ab<\/span><span class=\"s\">&#34;).intern() \/\/true<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u5728 Java \u4e2d\u660e\u660e\u770b\u5230\u4e24\u4e2a\u5b57\u7b26\u4e32\u5185\u5bb9\u4e00\u6837\u7528 <code>==<\/code>\u00a0\u8fdb\u884c\u6bd4\u8f83\u591a\u6570\u65f6\u5019\u4e0d\u662f\u4f60\u60f3\u8981\u7684\u7ed3\u679c, \u53ea\u6709\u7528 <code>equals()<\/code>\u00a0\u65b9\u6cd5\u624d\u662f\u738b\u9053. \u00a0\u4f7f\u7528 Java \u7684\u5b57\u7b26\u4e32\u5fc5\u987b\u4e86\u89e3\u5b83\u5185\u90e8\u662f\u600e\u4e48\u5b58\u50a8\u7684. \u6bd4\u4e8e\u4e0a\u9762\u7684\u7ed3\u679c\u6211\u4e0d\u4f5c\u7ec6\u8bf4, \u4e3b\u8981\u6d89\u53ca\u5230\u5b57\u7b26\u4e32\u5e38\u91cf\u6c60\u53ca\u5185\u90e8\u72b6\u6001, <code>==<\/code>\u00a0\u6bd4\u8f83\u5f15\u7528, <code>equals()<\/code>\u00a0\u6bd4\u8f83\u5185\u5bb9.<br\/><br\/>\nJava \u8fd8\u5e38\u5e38\u5bf9 <code>equals<\/code>\u00a0\u6bd4\u8f83\u5b57\u7b26\u4e32\u6d25\u6d25\u4e50\u9053, \u800c\u6211\u4ecd\u7136\u8ba4\u4e3a\u5b83\u662f\u8bed\u8a00\u8bbe\u8ba1\u4e0a\u7684\u4e00\u4e2a\u7f3a\u9677, \u6240\u4ee5 JVM \u4e0a\u7684\u5176\u4ed6\u7f16\u7a0b\u8bed\u8a00\u5982 Groovy, Scala \u7eb7\u7eb7\u5012\u52fe, \u65e0\u4e00\u4e0d\u662f\u7528<code>==<\/code>\u00a0\u6765\u6bd4\u8f83\u5b57\u7b26\u4e32\u7684\u5185\u5bb9, \u5b83\u4eec\u4e5f\u63d0\u4f9b\u5b57\u7b26\u4e32\u5f15\u7528\u7684\u6bd4\u8f83, \u4f46\u591a\u5c11\u4eba\u5b9e\u9645\u5173\u5fc3\u4e24\u4e2a\u5b57\u7b26\u4e32\u7684\u5f15\u7528\u662f\u5426\u76f8\u540c\u5462, \u53cd\u6b63\u5b57\u7b26\u4e32\u8bbe\u8ba1\u7684\u662f Immutable \u7684.<br\/><br\/>\n\u82e5\u8bf4\u662f\u56e0\u4e3a Java \u4e0d\u652f\u6301\u64cd\u4f5c\u7b26\u7684\u91cd\u8f7d, \u4f46\u53ef\u4ee5\u50cf Scala, Groovy \u90a3\u6837\u5728\u7f16\u8bd1\u5668\u4e0a\u4e0b\u529f\u592b\u7684. \u6700\u7ec8\u6211\u60f3\u4f9d\u7136\u662f\u53d7\u7d2f\u4e8e 100% \u6e90\u4ee3\u7801\u4e0e\u4e8c\u8fdb\u5236\u7684\u517c\u5bb9\u6027, \u6539\u8fdb\u7684\u8bdd\u4f1a\u9020\u6210\u65e9\u5148\u4ee3\u7801\u7684\u884c\u4e3a\u9519\u4e71."},{"title":"Java \u8bed\u8a00\u7684\u51e0\u4e2a\u7f3a\u9677\u4e4b\u4e00: \u65e0 Here Document","link":"https:\/\/yanbin.blog\/java-language-defect-1-no-here-document\/","pubDate":"Fri, 08 Jul 2016 23:43:47 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-language-defect-1-no-here-document\/","description":"\nJava \u00a0\u8bed\u8a00\u7531\u4e8e\u4e00\u76f4\u8981\u4fdd\u6301\u6e90\u4ee3\u7801\u53ca\u4e8c\u8fdb\u5236\u7684\u5411\u540e\u517c\u5bb9, \u6240\u4ee5\u5c3d\u7ba1\u8bed\u6cd5\u4e0a\u6709\u4e86\u5f88\u5927\u7684\u6f14\u8fdb, \u4f46\u6709\u4e9b\u4e1c\u897f\u4ecd\u7136\u65e0\u6cd5\u89e6\u53ca. \u00a0\u4e0d\u50cf\u6709\u4e9b\u65b0\u751f\u4ee3\u7684\u8bed\u8a00\u8bbe\u8ba1\u65f6\u53ef\u4ee5\u535a\u91c7\u4f17\u957f, \u6216\u8005\u50cf Scala \u90a3\u79cd\u8bed\u8a00\u5411\u540e\u517c\u5bb9\u6027\u7684\u8981\u6c42\u6ca1\u8fd9\u4e48\u82db\u523b, Scala \u53ea\u8981\u4fdd\u6301\u4e3b, \u6b21\u7248\u672c\u76f8\u540c\u65f6\u7684\u517c\u5bb9\u6027. Java \u5219\u4e0d\u540c, 1.0 \u7684\u4ee3\u7801\u6216\u5b57\u8282\u7801\u653e\u5230 1.8 \u4e0b\u8fd8\u8981\u80fd\u8dd1.\n<br\/>\n\u5b9e\u9645\u5e94\u7528\u4e2d\u5728\u591a\u4e2a\u8bed\u8a00\u5207\u6362\u65f6, \u5f88\u81ea\u7136\u7684\u4f1a\u5bf9\u5176\u4ed6\u8bed\u8a00\u4e0e Java \u8fdb\u884c\u6a2a\u5411\u5bf9\u6bd4. \u611f\u89c9 Java \u8bed\u8a00\u6709\u51e0\u4e2a\u7f3a\u9677, \u4e0d\u5728\u6b64\u7bc7\u4e2d\u4e00\u4e00\u5217\u4e3e, \u53ea\u628a\u7b2c\u4e00\u4e2a\u4e0d\u8db3\u4e4b\u5904\u9053\u6765.<br\/><br\/>\nJava \u6ca1\u6709 Here Document \u7684\u652f\u6301, Here Document \u53c8\u79f0 heredoc, hereis, here-string, here-script, \u518d\u901a\u4fd7\u70b9\u8bb2\u5c31\u662f\u591a\u884c\u5b57\u7b26\u4e32(multiline string). \u5728 Java \u4e2d\u5982\u679c\u8981\u5b9a\u4e49\u591a\u884c\u5b57\u7b26\u4e32, \u9700\u8981\u8fde\u4e32\u7684\u52a0\u53f7\u53ca\u6362\u884c\u7b26(\\n), \u5982\u4e0b<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">content<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;This is a\\n&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;multiline\\n&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;string content&#34;<\/span><span class=\"w\"> <\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u66fe\u7ecf\u4e3a\u4e86\u5bfb\u6c42 Java \u5bf9 Here Document \u7684\u652f\u6301, \u5c1d\u8bd5\u8fc7 Java \u7684 \u00a0APT(Java Annotation Processing Tool), \u5b9a\u4e49\u6ce8\u89e3 @HereDocument \u4f7f\u7528\u6ce8\u91ca, \u7f16\u8bd1\u65f6\u5e26 <code>-processor<\/code> \u53c2\u6570, \u4f46\u662f\u6ce8\u91ca\u4e2d\u7684\u683c\u5f0f\u5f88\u5bb9\u6613\u88ab IDE \u7ed9\u81ea\u52a8\u683c\u5f0f\u5316\u6389, \u89c1 <a href=\"java-implement-here-document\/\">Java \u7684\u591a\u884c\u5b57\u7b26\u4e32 Here Document \u7684\u5b9e\u73b0<\/a>. \u6240\u4ee5\u8fd9\u79cd\u5c1d\u8bd5\u5f88\u5feb\u5c31\u653e\u5f03\u4e86, \u56e0\u4e3a\u9879\u76ee\u4e2d\u7528 Java \u548c \u00a0Scala \u6df7\u5408\u7f16\u7a0b, \u771f\u6b63\u9700\u8981 Here Document \u7684\u5730\u65b9\u76f4\u63a5\u7528 Scala \u4ee3\u7801\u5c31\u884c\u4e86."},{"title":"Scala \u548c Java \u7684\u96c6\u5408\u7c7b\u578b\u76f8\u4e92\u8f6c\u6362","link":"https:\/\/yanbin.blog\/scala-java-collections-cast\/","pubDate":"Sun, 08 May 2016 00:15:16 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/scala-java-collections-cast\/","description":"\n\u5728 Scala \u548c Java \u6df7\u5408\u7f16\u7a0b\u65f6\u514d\u4e0d\u4e86\u9700\u8981\u8fdb\u884c\u96c6\u5408\u7c7b\u578b\u5728\u4e24\u79cd\u8bed\u8a00\u95f4\u76f8\u4e92\u8f6c\u6362\uff0c\u66f4\u591a\u7684\u662f\u5728 Scala \u8c03\u7528 Java \u7684\u65b9\u6cd5\u65f6\u628a Scala \u7684\u96c6\u5408\u8f6c\u578b\u4e3a Java \u7684\u96c6\u5408\u3002\u5178\u578b\u573a\u666f\u662f\uff1a<\/p>\n<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-scala\" data-lang=\"scala\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"n\">public<\/span> <span class=\"n\">void<\/span> <span class=\"n\">process<\/span><span class=\"o\">(<\/span><span class=\"n\">java<\/span><span class=\"o\">.<\/span><span class=\"n\">util<\/span><span class=\"o\">.<\/span><span class=\"nc\">List<\/span><span class=\"o\">&lt;<\/span><span class=\"nc\">String<\/span><span class=\"o\">&gt;<\/span> <span class=\"n\">orderIds<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"> <span class=\"o\">......<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"o\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u4e0a\u9762\u5b9a\u4e49\u7684 Java \u65b9\u6cd5\uff0c\u5982\u679c\u8981\u5728 Scala \u4e2d\u8c03\u7528\u5b83\uff0c\u4e0d\u8003\u8651\u4e24\u79cd\u8bed\u8a00\u7684\u96c6\u4f53\u7c7b\u578b\u8f6c\u6362\u7684\u8bdd\uff0c\u53ef\u4ee5\u76f4\u63a5\u4f20\u5165 Java \u4ee3\u7801\u8981\u6c42\u7684\u7c7b\u578b\uff0c\u50cf\u8fd9\u6837<br\/><br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-scala\" data-lang=\"scala\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"k\">val<\/span> <span class=\"n\">orderIds<\/span> <span class=\"k\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">java<\/span><span class=\"o\">.<\/span><span class=\"n\">util<\/span><span class=\"o\">.<\/span><span class=\"nc\">ArrayList<\/span><span class=\"o\">[<\/span><span class=\"kt\">String<\/span><span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"n\">orderIds<\/span><span class=\"o\">.<\/span><span class=\"n\">add<\/span><span class=\"o\">(<\/span><span class=\"s\">&#34;SJ001&#34;<\/span><span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"n\">process<\/span><span class=\"o\">(<\/span><span class=\"n\">orderIds<\/span><span class=\"o\">)<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u8fd9\u6837\u5f53\u7136\u53ef\u4ee5\uff0c\u4f46\u4e0d\u80fd\u4eab\u53d7\u5230 Scala \u8bed\u8a00\u4e2d\u96c6\u5408\u4f7f\u7528\u7684\u4fbf\u5229\u6027\uff0c\u5982\u5feb\u6377\u7684\u6784\u9020\uff0c\u4e30\u5bcc\u7684\u602a\u5f02\u7684\u65b9\u6cd5(++, ::, ## \u7b49)\u3002\u6240\u4ee5\u5e0c\u671b\u6b64\u65f6 Scala \u4e2d\u8c03\u7528 <code>process()<\/code>\u00a0 \u80fd\u63a5\u8fd1\u8fd9\u79cd\u65b9\u6cd5<br\/><br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-scala\" data-lang=\"scala\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"n\">process<\/span><span class=\"o\">(<\/span><span class=\"nc\">List<\/span><span class=\"o\">(<\/span><span class=\"s\">&#34;SJ001&#34;<\/span><span class=\"o\">,<\/span> <span class=\"s\">&#34;SJ002&#34;<\/span><span class=\"o\">))<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u7279\u522b\u662f\u5f53 Java \u63a5\u53d7\u4e00\u4e2a java.util.Map \u65f6\uff0c\u80fd\u5728 Scala \u91cc\u76f4\u63a5\u4f20\u5165 <code>Map(\"key1\" -&gt; \"value1\", \u00a0\"key2\" -&gt; \"value2\")<\/code>\u00a0\u5c31\u65b9\u4fbf\u8bb8\u591a\u3002<br\/><br\/>\n\u7528\u65b9\u6cd5\u6765\u5b8c\u6210 Scala \u548c Java \u95f4\u5bf9\u5e94\u96c6\u5408\u7c7b\u578b\u7684\u8f6c\u6362\u5f53\u7136\u6ca1\u95ee\u9898\uff0c\u4f46\u522b\u5fd8\u4e86 Scala \u8fd8\u652f\u6301\u9690\u5f0f\u8f6c\u6362\uff0c\u90a3\u5c31\u662f\u53ea\u8981\u5728 Scala \u4ee3\u7801\u4e2d\u5f15\u5165 <a href=\"http:\/\/www.scala-lang.org\/api\/2.8.0\/scala\/collection\/JavaConversions$.html\">collection.JavaConversions._<\/a>\u00a0\u5bf9\u4e8e\u4e0a\u9762\u7684\u65b9\u6cd5\u5728 Scala \u4e2d\u5c31\u53ef\u4ee5\u76f4\u63a5\u4f20\u5165 Scala \u7684 List() \u4e86\u3002\u4e5f\u5c31\u662f"},{"title":"Java \u7684 fork-join \u6846\u67b6\u5b9e\u4f8b\u5907\u5fd8","link":"https:\/\/yanbin.blog\/java-fork-join-framework-memo\/","pubDate":"Tue, 29 Dec 2015 00:17:41 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-fork-join-framework-memo\/","description":"\nJava 7 \u9996\u6b21\u5f15\u5165\u4e86 fork\/join \u6846\u67b6\uff0c\u4f46\u4e00\u76f4\u672a\u66fe\u76f4\u63a5\u5c1d\u8bd5. \u800c\u4e14\u57fa\u672c\u4e0a\u4e5f\u5f88\u5c11\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u76f4\u63a5\u5199 fork-join \u7684\u4ee3\u7801\uff0c\u5728\u6211\u4eec\u4f7f\u7528\u7b2c\u4e09\u65b9\u7ec4\u4ef6\u65f6\u5012\u662f\u95f4\u63a5\u4f1a\u63a5\u89e6\u5230 fork\/join \u6846\u67b6\u3002\u8b6c\u5982 Akka \u7684 fork-join-executor, sbt \u6267\u884c\u6d4b\u8bd5\u7528\u4f8b\u65f6\u4e5f\u662f\u9ed8\u8ba4 fork\/join \u5e76\u53d1\u6267\u884c\u3002fork-join \u53ef\u4ee5\u5e2e\u52a9\u6211\u4eec\u628a\u8ba1\u7b97\u4efb\u52a1\u7c92\u5ea6\u7ec6\u5316\uff0c\u5e76\u66f4\u6709\u6548\u7684\u5229\u7528\u591a CPU \u5185\u6838\u3002<br\/><br\/>\nfork-join \u4e0e map-reduce \u6709\u4e9b\u76f8\u59a8\uff0c\u5728 Java 7 \u65f6\u4ee3\u6211\u5176\u5b9e\u662f\u5ffd\u89c6\u4e86\u5b83\u7684\u5b58\u5728\u3002\u76ee\u4eca\u6b63\u5728\u4e86\u89e3 Java 8 \u7684\u00a0 parallelStream \u65f6\uff0c\u56e0\u4e3a\u5b83\u7684\u5e95\u5c42\u5b9e\u73b0\u4e5f\u662f fork\/join, \u6240\u4ee5\u6709\u5174\u81f4\u53bb\u7a0d\u52a0\u4f53\u9a8c\u4e00\u4e0b\u3002fork\/join \u7684\u7b97\u6cd5\u7b80\u5355\u6765\u8bb2\u5c31\u662f\u9012\u5f52\u5bf9\u534a\u53bb\u7ec6\u5316\u8ba1\u7b97\u4efb\u52a1\uff0c\u53ca\u5230\u4e0d\u80fd\u7ec6\u5316\u65f6\u7531\u591a\u5185\u6838(\u7ebf\u7a0b)\u53bb\u8ba1\u7b97\u88ab\u62c6\u5206\u7684\u4efb\u52a1\uff0c\u6700\u540e\u53cd\u65b9\u5411\u628a\u7ed3\u679c\u6c47\u603b\u3002<br\/><br\/>\n\u4e0b\u9762\u662f\u4ece \u300aJava 8 IN ACTION\u300b\u4e2d\u622a\u7684\u4e00\u4e2a\u8bf4\u660e fork\/join \u7684\u5904\u7406\u8fc7\u7a0b"},{"title":"Java \u63a5\u53e3\u5e38\u91cf\u53cd\u6a21\u5f0f\u53ca\u5982\u4f55\u5b9a\u4e49 Java \u5e38\u91cf","link":"https:\/\/yanbin.blog\/java-constant-interface-anti-pattern\/","pubDate":"Mon, 13 Jul 2015 16:13:46 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-constant-interface-anti-pattern\/","description":"\n<p>\u521d\u5b66 Java \u7684\u4eba\u5f88\u4e0d\u7ecf\u610f\u95f4\u5c31\u4f1a\u628a\u5e38\u91cf\u5b9a\u4e49\u5728\u63a5\u53e3\u4e2d\uff0c\u5927\u6982\u552f\u4e00\u7684\u7406\u7531\u662f\u63a5\u53e3\u4e0d\u80fd\u5b9e\u4f8b\u5316\uff0c\u800c\u4f7f\u7528\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684\u5e38\u91cf\u4e5f\u662f\u4e0d\u7528\u9644\u7740\u5728\u5b9e\u4f8b\u4e0a\u7684\u3002\n\u8fd9\u4e3b\u8981\u8fd8\u662f JDK \u672c\u8eab\u7ed9\u6211\u4eec\u505a\u4e86\u5f88\u591a\u8fd9\u6837\u7684\u699c\u6837,\n\u5982\u00a0 <a href=\"http:\/\/docs.oracle.com\/javase\/7\/docs\/api\/java\/io\/ObjectStreamConstants.html\" target=\"_blank\">java.io.ObjectStreamConstans<\/a>\uff0c\n\u591a\u662f\u51fa\u73b0\u5728 Enum \u7c7b\u578b\u5230\u6765\u4e4b\u524d\u3002<\/p>\n<p>\u5176\u5b9e Java \u7684\u63a5\u53e3\u5e38\u91cf\u662f\u4e00\u79cd\u53cd\u6a21\u5f0f\uff0c\u7406\u7531\u5982\u4e0b\uff1a<\/p>\n<p>1. \u63a5\u53e3\u662f\u4e0d\u80fd\u963b\u6b62\u88ab\u5b9e\u73b0\u6216\u7ee7\u627f\u7684\uff0c \u4e5f\u5c31\u662f\u8bf4\u5b50\u63a5\u53e3\u6216\u5b9e\u73b0\u4e2d\u662f\u80fd\u591f\u8986\u76d6\u6389\u5e38\u91cf\u7684\u5b9a\u4e49(\u91cd\u540d)\uff0c\u8fd9\u6837\u901a\u8fc7\u7236\uff0c\u5b50\u63a5\u53e3(\u6216\u5b9e\u73b0) \u53bb\u5f15\u7528\u5e38\u91cf\u662f\u53ef\u80fd\u4e0d\u4e00\u81f4\u7684<br \/>\n2. \u540c\u6837\u7684\uff0c\u7531\u4e8e\u88ab\u5b9e\u73b0\u6216\u7ee7\u627f\uff0c\u9020\u6210\u5728\u7ee7\u627f\u6811\u4e2d\u53ef\u4ee5\u7528\u5927\u91cf\u7684\u63a5\u53e3, \u7c7b \u6216\u5b9e\u4f8b\u53bb\u5f15\u7528 \u540c\u4e00\u4e2a\u5e38\u91cf\uff0c\u4ece\u800c\u9020\u6210\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684\u5e38\u91cf\u6c61\u67d3\u4e86\u547d\u540d\u7a7a\u95f4\u3002(Java \u7f16\u8bd1\u5668\u7adf\u7136\u5141\u8bb8\u4f7f\u7528\u5b9e\u4f8b\u53bb\u5f15\u7528\u7c7b\u53d8\u91cf)<br \/>\n3. \u63a5\u53e3\u6697\u542b\u7684\u610f\u601d\u662f\uff1a\u5b83\u662f\u9700\u88ab\u5b9e\u73b0\u7684\uff0c\u4ee3\u8868\u7740\u4e00\u79cd\u7c7b\u578b\uff0c\u5b83\u7684\u516c\u6709\u6210\u5458\u662f\u8981\u88ab\u66b4\u9732\u7684 API\u3002\u800c\u5728\u63a5\u53e3\u4e2d\u5b9a\u4e49\u7684\u5e38\u91cf\u8bf4\u4e0d\u4e0a\u662f API\n<\/p>\n<p>4. \u8fd9\u70b9\u6709\u4e9b\u91cd\u590d\uff0cJava \u5141\u8bb8\u901a\u8fc7\u5b50\u7c7b\u53bb\u5f15\u7528\u7236\u7c7b\u4e2d\u5b9a\u4e49\u7684\u5e38\u91cf\uff0c\u5404\u7ea7\u5bf9\u50cf\u5b9e\u4f8b\u53bb\u5f15\u7528\u7236\u7c7b\u7684\u5e38\u91cf\uff0c\u6240\u4ee5\u8fd9\u4f1a\u9020\u6210\u76f8\u5f53\u7684\u6df7\u4e71\u4e0d\u582a\u3002\u5b9a\u4e49\u7684\u5e38\u91cf\u4e0d\u80fd\u4fdd\u8bc1\u5355\u4e00\u7684\u5f15\u7528\u65b9\u5f0f\u3002<\/p>\n<p>\u53c2\u89c1\uff1a <a href=\"http:\/\/blog.csdn.net\/hosterzhu\/article\/details\/9833665\" target=\"_blank\">Effective java \u7b2c 19 \u6761: \u63a5\u53e3\u53ea\u7528\u4e8e\u5b9a\u4e49\u7c7b\u578b<\/a><\/p>\n<p>\u65e2\u7136\u63a5\u53e3\u4e2d\u4e0d\u9002\u4e8e\u5b9a\u4e49\u5e38\u91cf\uff0c\u90a3\u4e48\u8be5\u5728\u4f55\u5904\u4e3a\u5e38\u91cf\u5b89\u5bb6\u5462\uff1f\u63a5\u53e3\u4e3a \u5b9e\u73b0\/\u7ee7\u627f \u800c\u751f\uff0c\u5982\u679c\u653e\u5728\u7c7b\u4e2d\uff0c\u5e76\u4e14\u8fd9\u4e2a\u7c7b\u662f final\uff0c\u4e14\u5c01\u95ed\u6389\u6784\u9020\u65b9\u6cd5\u5c31\u884c\u3002\n\u4e8e\u662f\u6211\u4eec\u5148\u524d\u7684\u63a5\u53e3\u5e38\u91cf\u5b9a\u4e49"},{"title":"Java \u53cd\u5c04\u4fee\u6539 final \u5c5e\u6027\u503c","link":"https:\/\/yanbin.blog\/java-reflection-modify-final-field-value\/","pubDate":"Thu, 25 Jun 2015 16:47:24 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-reflection-modify-final-field-value\/","description":"\n\u4f7f\u7528\u8fc7 Java \u53cd\u5c04\u7684\u5927\u591a\u90fd\u77e5\u9053, \u60f3\u8981\u4fee\u6539\u67d0\u4e2a\u7c7b\u6216\u5bf9\u8c61\u7684\u79c1\u6709\u53d8\u91cf\u7684\u503c\u7684\u8bdd, \u5728\u8c03\u7528 set \u8bbe\u7f6e\u65b0\u503c\u4e4b\u524d\u6267\u884c\u4e00\u4e0b setAccessible(true) \u5373\u53ef\u3002\u8fd9\u6837\u5229\u7528\u7684 Java \u7684\u53cd\u5c04\u5c31\u80fd\u7ed5\u8fc7 private \u7684\u9650\u5236 \uff0c\u4e0d\u518d\u6709 IllegalAccessException \u5f02\u5e38\u4e86\u3002\u8fd9\u662f\u4e00\u4e2a trick, \u8c03\u7528 Java \u7684\u79c1\u6709\u65b9\u6cd5\u4e5f\u80fd\u8fd9\u4e48\u505a\uff0c\u6709\u4e9b\u4eba\u6216\u8bb8\u6216\u8fd9\u6837\u6765\u6d4b\u8bd5 Java \u79c1\u6709\u65b9\u6cd5\u3002<\/p>\n<br\/>\n\u63d0\u524d\u8bf4\u4e00\u53e5\uff1a\u5728\u4fee\u6539 final \u578b\u503c\u65f6\uff0c\u8981\u7279\u522b\u7559\u610f\u5b83\u7684\u5e38\u91cf\u503c\u672c\u8eab\u662f\u5426\u88ab\u7f16\u8bd1\u5668\u4f18\u5316\u5185\u8054\u5230\u67d0\u5904\uff0c\u5426\u5219\u4f60\u4f1a\u770b\u5230\u867d\u7136\u6ca1\u4ec0\u4e48\u5f02\u5e38\uff0c\u4f46\u53d6\u51fa\u7684\u8fd8\u662f\u539f\u6765\u7684\u503c\u3002\u540e\u9762\u4f1a\u7a0d\u4e3a\u6df1\u5165\u7684\u8bb2\u5230\u3002<br\/><br\/>\n\u4f8b\u5982\u4e0b\u9762\u662f\u4e00\u6bb5\u5b8c\u6574\u7684\u4ee3\u7801, \u7531\u4e8e\u8c03\u7528\u4e86 setAccessiable(true), \u6240\u4ee5\u80fd\u6210\u529f\u628a OneCity \u7684\u79c1\u6709\u5c5e\u6027 name \u7684\u503c\u6539\u4e3a \"Shenzhen\"\uff1a"},{"title":"Java \u7684\u533f\u540d\u7c7b\u521d\u59cb\u5316\u5757\u4e2d\u5982\u4f55\u8bbf\u95ee\u540c\u540d\u53c2\u6570?","link":"https:\/\/yanbin.blog\/java-anonymous-class-access-same-name-parameter\/","pubDate":"Tue, 26 Aug 2014 23:54:44 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-anonymous-class-access-same-name-parameter\/","description":"\n\u56e0\u4e3a\u5199\u8fc7\u7c7b\u4f3c\u4e0b\u9762\u7684\u4e00\u6bb5\u4ee3\u7801\u6765\u5b9e\u59cb\u5316\u4e00\u4e2a\u533f\u540d\u5b9e\u4f8b<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kn\">package<\/span><span class=\"w\"> <\/span><span class=\"nn\">cc.unmi<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">Test<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">name<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"n\">Test<\/span><span class=\"w\"> <\/span><span class=\"nf\">buildTest<\/span><span class=\"p\">(<\/span><span class=\"kd\">final<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">name<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">Test<\/span><span class=\"w\"> <\/span><span class=\"n\">test<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">Test<\/span><span class=\"p\">(){{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"na\">name<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">name<\/span><span class=\"p\">;<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u5e0c\u671b\u628a buildTest() \u65b9\u6cd5\u53c2\u6570\u4e2d\u7684 name \u8d4b\u7ed9 this.name<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}};<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">test<\/span><span class=\"p\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">);<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/ \u4ecd\u7136\u662f null<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">test<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n\u770b\u4e0a\u9762\u7684\u00a0<code>buildTest()<\/code> \u65b9\u6cd5\u4e2d\u7684\u00a0<code>this.name = name<\/code> \u5e0c\u671b\u80fd\u628a\u65b9\u6cd5\u53c2\u6570 final String name \u4e2d\u7684 name \u503c\u8d4b\u503c\u7ed9 this.name, \u4f46\u662f\u65e0\u6548\uff0cthis.name = name \u662f\u5728\u628a\u81ea\u5df1\u8d4b\u7ed9\u81ea\u5df1\u3002"},{"title":"\u4ee3\u7801\u4e2d\u5982\u4f55\u83b7\u5f97 Java \u65b9\u6cd5\u7684\u5f62\u5f0f\u53c2\u6570\u540d","link":"https:\/\/yanbin.blog\/retrieve-java-method-formal-parameter-names\/","pubDate":"Sun, 24 Aug 2014 14:07:48 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/retrieve-java-method-formal-parameter-names\/","description":"\n\u5bf9\u4e8e\u4e00\u4e2a Java \u65b9\u6cd5 foo(int id, String name); \u6211\u4eec\u5982\u4f55\u80fd\u5728\u4ee3\u7801\u4e2d\u83b7\u5f97\u5f62\u5f0f\u53c2\u6570\u540d id \u548c name \u5462\uff1f<\/p>\n<br\/>\n\u6211\u4eec\u77e5\u9053\u901a\u8fc7\u53cd\u5c04 API\u00a0<code>Method.getGenericParameterTypes()<\/code> \u53ef\u4ee5\u83b7\u5f97\u65b9\u6cd5\u7684\u53c2\u6570\u7c7b\u578b\uff0c\u4f46\u662f\u5bf9\u4e8e\u53c2\u6570\u540d\u4e00\u822c\u5c31\u662f arg0, arg1, arg2 ..., \u56e0\u4e3a Java \u7f16\u8bd1\u65f6\u628a\u5f62\u5f0f\u53c2\u6570\u540d\u64e6\u9664\u4e86\u3002\u6240\u4ee5\u5bf9\u5b8c\u5168\u64e6\u9664\u4e86\u5f62\u5f0f\u53c2\u6570\u540d\u7684\u5b57\u8282\u7801\u5e94\u8be5\u662f\u6ca1\u529e\u6cd5\u4e86\uff0c\u4f46\u6211\u4eec\u81ea\u5df1\u5199\u7684\u7c7b\u8fd8\u662f\u6709\u80fd\u529b\u53bb\u7ba1\u63a7\u7684\u3002<br\/><br\/>\n\u5bf9\u4e8e\u81ea\u5df1\u5199\u7684\u7c7b\uff0c\u6709\u4e24\u79cd\u529e\u6cd5\u83b7\u5f97\u5f62\u5f0f\u53c2\u6570\u540d\uff0c\u5206\u522b\u662f<br\/><br\/>\n1) Java8 \u7684 -parameters \u7f16\u8bd1\u53c2\u6570\uff0c\u7136\u540e\u7528 Java8 \u65b0\u5f15\u5165\u7684\u53cd\u5c04 API <a href=\"http:\/\/docs.oracle.com\/javase\/8\/docs\/api\/java\/lang\/reflect\/Parameter.html\" target=\"_blank\" rel=\"noopener\">Parameter<\/a><br\/><br\/>\n\u6211\u4eec\u5148\u5728 Java8 \u4e0b\u8fd0\u884c\u4e0b\u9762\u7684\u4ee3\u7801"},{"title":"Java \u548c Scala \u8c03\u7528\u53d8\u53c2\u7684\u65b9\u5f0f","link":"https:\/\/yanbin.blog\/java-scala-call-varargs-method\/","pubDate":"Mon, 21 Jul 2014 00:11:24 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-scala-call-varargs-method\/","description":"\nJava \u548c Scala \u90fd\u652f\u6301\u53d8\u53c2\u65b9\u6cd5, \u5199\u5728\u6700\u540e\u7684\u4f4d\u7f6e\u4e0a\uff0c\u6700\u57fa\u672c\u7684\u8c03\u7528\u65b9\u5f0f\u4e5f\u90fd\u662f\u4e00\u6837\u7684\uff0c\u4e00\u4e2a\u4e2a\u7f57\u5217\u8fc7\u53bb\u3002\u4e5f\u53ef\u4ee5\u4f20\u5165\u6570\u7ec4\u53c2\u6570\uff0c\u56e0\u4e3a\u53d8\u53c2\u672c\u8d28\u4e0a\u5c31\u662f\u4e00\u4e2a\u6570\u7ec4\uff0c\u5c31\u662f\u628a ... \u5f00\u59cb\u4f4d\u7f6e\u5230\u6700\u540e\u4e00\u4e2a\u53c2\u6570\u90fd\u6536\u7eb3\u5230\u6570\u7ec4\u4e2d\u53bb\uff0c\u6240\u4ee5\u53d8\u53c2\u4e4b\u6240\u4ee5\u8981\u653e\u5728\u6700\u540e\u7684\u4f4d\u7f6e\u4e0a\uff0c\u4e14\u4e00\u4e2a\u65b9\u6cd5\u4e2d\u6700\u591a\u53ea\u80fd\u6709\u4e00\u4e2a\u53d8\u53c2\u7c7b\u578b\u3002<\/p>\n<br\/>\n\u8fd9\u91cc\u4e3b\u8981\u662f\u5bf9\u6bd4 Scala \u5bf9\u53d8\u53c2\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u57fa\u672c\u8c03\u7528\u6cd5\u5f53\u7136\u662f\u6ca1\u95ee\u9898\u7684\uff0c\u4f46\u662f\u5728\u4f20\u5165\u6570\u7ec4\u4f5c\u4e3a\u53d8\u53c2\u7684\u53c2\u6570\u5217\u8868\u4e0e Java \u76f8\u5bf9\u65f6\u5c31\u7a0d\u6709\u53d8\u5316\u4e86\u3002<br\/><br\/>\n\u53e6\u5916\u63d0\u4e00\u4e0b\uff0c\u5982\u679c\u60f3\u4f20\u5165 List \u4f5c\u4e3a\u53d8\u53c2\u5217\u8868\uff0c\u800c\u4e0d\u662f\u6574\u4f53\u4f5c\u4e3a\u53d8\u53c2\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20\u5c31\u662f\u8c03\u7528\u96c6\u5408\u7684 toArray() \u65b9\u6cd5\u8f6c\u6362\u6210\u4e00\u4e2a\u6570\u7ec4\u4f20\u5165\u3002<br\/><br\/>\n\u4e0b\u9762\u770b Java \u4e2d\u5bf9\u53d8\u53c2\u65b9\u6cd5\u7684\u8c03\u7528\uff0c\u53c2\u6570\u5217\u8868\u548c\u6570\u7ec4<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">JavaVarArgs<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;a&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;b&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;c&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">foo<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span><span class=\"p\">{<\/span><span class=\"s\">&#34;d&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;e&#34;<\/span><span class=\"p\">});<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">foo<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"p\">...<\/span><span class=\"na\">params<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">params<\/span><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34; : &#34;<\/span><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"n\">params<\/span><span class=\"p\">.<\/span><span class=\"na\">length<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">for<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">s<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"n\">params<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">s<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"Java \u8bbe\u8ba1\u4e4b\u521d\u4e3a\u4f55\u5c31\u4e0d\u8ba9\u7528 == \u6bd4\u8f83\u4e24\u5b57\u7b26\u4e32\u5462\uff1f","link":"https:\/\/yanbin.blog\/java-why-cannot-compare-strings-with\/","pubDate":"Thu, 24 Apr 2014 00:14:45 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-why-cannot-compare-strings-with\/","description":"\nJava \u7684\u5b57\u7b26\u4e32\u503c\u6bd4\u8f83\u4e0d\u80fd\u7528 == \u53f7\u8fd9\u4e2a\u8bbe\u8ba1\u4e0d\u77e5\u9053\u6700\u521d\u662f\u600e\u4e48\u8003\u8651\u7684\uff0c\u5b83\u6700\u5927\u7684\u8d21\u732e\u65e0\u7591\u662f\u6ecb\u751f\u4e86\u4e00\u4e2a\u957f\u4e45\u672a\u8870\u7684\u9762\u8bd5\u9898\uff0c\u52a0\u4e4b\u8fde Code Review \u90fd\u53ef\u80fd\u88ab\u5ffd\u7565\u6389\u7684 Bug\u3002\u672c\u6765\u4e24\u4e2a\u5b57\u7b26\u4e32\u7528\u7b49\u53f7\u76f8\u6bd4\u8f83\u662f\u6700\u81ea\u7136\u800c\u7136\u7684\u505a\u6cd5\uff0c\u7136\u800c\u5b83\u5374\u662f\u8981\u8feb\u4f7f\u6211\u4eec\u76f8\u4fe1\u60f3\u5f53\u7136\u5f88\u53ef\u80fd\u662f\u9519\u8bef\u7684\u90a3\u6837\u4e00\u4e2a\u9053\u7406\u3002<br\/>\n<br\/>\n\u6211\u4e00\u76f4\u8ba4\u4e3a Java \u7684\u5b57\u7b26\u4e32\u6bd4\u8f83\u503c\u4e0d\u80fd\u7528 == \u800c\u5fc5\u987b\u7528 equals() \u65b9\u6cd5\u662f\u4e2a\u4e0d\u6070\u5f53\u7684\u8bbe\u8ba1\uff0c\u8fd9\u4ece\u5176\u4ed6\u79cd\u79cd\u8bed\u8a00\u7684\u73b0\u5b9e\u505a\u6cd5(\u4eba\u5bb6\u90fd\u7528 == \u6bd4\u8f83\u503c)\u5c31\u77e5\u9053\u3002<br\/>\n<br\/>\n\u731c\u60f3\u4e00\u4e0b Java \u4e3a\u4f55\u8981\u8fd9\u6837\u5bf9\u5f85\u5b57\u7b26\u4e32\uff0c\u53ef\u80fd Java \u53c8\u60f3\u7c7b\u578b\u5168\u90e8\u5bf9\u8c61\u5316\uff0c\u540c\u65f6\u8003\u8651\u5230\u65b9\u4fbf\u6027\uff0c\u4ecd\u7136\u4fdd\u7559\u4e86 int, short, boolean \u7b49\u539f\u59cb\u7c7b\u578b\uff0c\u5b83\u4eec\u662f\u53ef\u4ee5\u7528 == \u6bd4\u8f83\u503c\uff0c\u5176\u4ed6\u771f\u6b63\u7684\u5bf9\u8c61\u7c7b\u578b\u7528 equals() \u65b9\u6cd5\u6bd4\u8f83\u4e5f\u662f\u65e0\u53ef\u539a\u975e\u7684\u3002\u8fd9\u65f6\u5019\u5939\u7f1d\u4e2d\u7684\u5b57\u7b26\u4e32\u5374\u88ab\u4e3a\u96be\u5230\u4e86\uff0c\u5b83\u90a3\u4e48\u7684\u5e38\u7528\uff0c\u8fd8\u5e38\u4ee5\u5b57\u9762\u91cf\u7684\u9762\u76ee\u51fa\u73b0\uff0c\u5b83\u66f4\u8be5\u662f\u4e2a\u57fa\u672c\u7c7b\u578b\uff0c\u800c\u5b9e\u4e3a\u5bf9\u8c61\u7c7b\u578b\uff0c\u56e0\u6b64\u4e0d\u88ab\u8ba4\u53ef\u7528 == \u76f4\u63a5\u6bd4\u8f83\u503c\uff0c \u800c\u9009\u62e9\u4e86\u7528 equals() \u65b9\u6cd5\u6765\u6bd4\u8f83\u5b57\u7b26\u4e32\u503c\u3002<br\/>\n<br\/>\n\u800c\u53e6\u4e00\u65b9\u9762\uff0c\u7531\u4e8e\u5b57\u7b26\u4e32\u662f\u591a\u4f8b\u7684\uff0c\u6240\u4ee5\u6709\u4e9b\u60c5\u51b5\u4e0b\u53c8\u66f4\u4ee4\u4eba\u8ff7\u60d1\uff0c\u6bd4\u5982\u4e0b\u9762\u7684\u79cd\u79cd\u60c5\u51b5"},{"title":"Java \u63a7\u5236\u53f0\u8f93\u51fa\u767e\u5206\u6bd4\u8fdb\u5ea6\u6307\u5668","link":"https:\/\/yanbin.blog\/java-console-perent-progress\/","pubDate":"Thu, 20 Feb 2014 00:46:13 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-console-perent-progress\/","description":"\n\u7528 Java \u5728\u63a7\u5236\u53f0\u4e0b\u8f93\u51fa\u7528\u00a0<code>System.out.print()<\/code> \u8fd9\u6837\u7684\u65b9\u6cd5\uff0c\u90a3\u4e48\u8981\u5728\u540c\u4e00\u884c\u8f93\u51fa\u8c61 FTP \u4f20\u6587\u4ef6\u90a3\u6837\u7684\u8fdb\u5ea6\u6307\u793a\u600e\u4e48\u505a\u5462\uff0c\u5b83\u9700\u8981\u5728\u540c\u4e00\u884c\u76f8\u540c\u7684\u4f4d\u7f6e\u4e0a\u64e6\u9664\u5e76\u8f93\u51fa\u65b0\u767e\u5206\u6570\u3002\u6bd4\u5982\u524d\u4e00\u884c\u6253\u5370\u4e86 1%\uff0c \u4e0b\u4e00\u6b21\u5c31\u628a 1% \u64e6\u9664\u6389\uff0c\u540c\u4e00\u4f4d\u7f6e\u4e0a\u6253\u5370 2%\uff0c\u5c31\u5f62\u6210\u4e86\u8d70\u8fdb\u5ea6\u7684\u6548\u679c\u3002\u5982\u4e0b\uff1a<\/p>\n<br\/>\n<img class=\"aligncenter post-image\"\nsrc=\"https:\/\/yanbin.blog\/posts\/2014\/java-console-perent-progress\/console_percent.gif\"\nwidth=\"340px\"\n\/>\n\u6211\u4eec\u8981\u7528\u5230\u7684\u529e\u6cd5\u662f<code> System.out.print(\"\\b\")<\/code> \u5c31\u4f1a\u5728\u63a7\u5236\u53f0\u4e0b\u5f80\u56de\u5220\u6389\u4e00\u4e2a\u5b57\u7b26\uff0c\u5982\u679c\u4f60\u60f3\u56de\u5220\u591a\u4e2a\u5b57\u7b26\u5c31\u6253\u5370\u591a\u4e2a \"\\b\" \u5427\uff0c\u53ea\u56de\u5220\u9664\u5230\u5f53\u524d\u884c\u9996\uff0c\u4e5f\u5c31\u662f\u4e0d\u56de\u5f71\u54cd\u5230\u4e0a\u4e00\u884c\u7684\u8f93\u51fa\u3002\u600e\u4e48\u5220\u9664\u5f53\u524d\u884c\u5168\u90e8\u8f93\u51fa\u6216\u6307\u5b9a\u7684\u5b57\u7b26\u6570\u5462\uff0c\u4e24\u4e2a\u529e\u6cd5\uff1a<br\/><br\/>\n\u8f93\u51fa\u8db3\u591f\u591a\u7684 \"\\b\"\uff0c\u4f1a\u5220\u9664\u5230\u884c\u9996\u4e3a\u6b62\uff0c\u8fd9\u6837\u505a\u5176\u5b9e\u4e5f\u4e0d\u4fdd\u9669\uff0c\u8c01\u77e5\u9053\u4e0a\u4e00\u884c\u4f1a\u591a\u5c11\u5b57\u7b26\u5462<br \/>\n\u7cbe\u786e\u63a7\u5236\u56de\u5220\u591a\u5c11\u4e2a\u5b57\u7b26\uff0c\u6709\u65f6\u5019\u4e5f\u9700\u8981\u4fdd\u7559\u524d\u9762\u4e00\u4e9b\u5185\u5bb9"},{"title":"\u6269\u5c55 JUnit 4\uff0c\u4f7f\u7528\u5b9a\u5236\u7684 Runner","link":"https:\/\/yanbin.blog\/extend-junit-4-customized-runner\/","pubDate":"Wed, 17 Apr 2013 02:59:19 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/extend-junit-4-customized-runner\/","description":"\nJUnit\u00a0\u7684\u6d4b\u8bd5\u7528\u4f8b\u603b\u662f\u7531\u00a0Runner\u00a0\u53bb\u6267\u884c\uff0cJUnit\u00a0\u63d0\u4f9b\u4e86 @RunWith\u00a0\u8fd9\u4e2a\u6d4b\u8bd5\u7c7b\u7684 Annotation,\u00a0\u53ef\u6765\u6307\u5b9a\u81ea\u5b9a\u4e49\u7684 Runner\u3002\u5982\u679c\u672a\u6307\u5b9a\u7279\u522b\u7684\u00a0 Runner\uff0c\u90a3\u4e48\u4f1a\u91c7\u7528\u9ed8\u8ba4\u7684 Runner\uff0c\u53ef\u80fd\u4e0d\u540c\u7684\u73af\u5883\uff0c\u5982 Eclipse\uff0c\u63a7\u5236\u53f0\u4e0b\u4f1a\u6709\u4e0d\u540c\u7684\u9ed8\u8ba4 Runner\u3002<\/p>\n<br\/>\n\u5982\u679c\u4e0d\u6e05\u695a Runner\u00a0\u662f\u4ec0\u4e48\uff0c\u90a3\u4e48\u53ef\u80fd\u89c1\u8fc7 @RunWith(SpringJUnit4ClassRunner.class)\u00a0\u8fd9\u4e2a\u4e1c\u897f\uff0c\u5b83\u6709\u52a9\u4f60\u52a0\u8f7d Spring\u00a0\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u53ca\u4e0e Spring\u00a0\u76f8\u5173\u7684\u4e8b\u7269\u3002<br\/><br\/>\n\u90a3\u4e48\u81ea\u5b9a\u4e49\u7684 Runner\u00a0\u6709\u4ec0\u4e48\u7528\u5462\uff1f\u5b83\u53ef\u4ee5\u622a\u83b7\u5230 @BeforeClass, @AfterClass, @Before, @After\u00a0\u8fd9\u4e9b\u4e8b\u4ef6\uff0c\u4e5f\u5c31\u662f\u80fd\u5728\u6d4b\u8bd5\u7c7b\u5f00\u59cb\u548c\u7ed3\u675f\u6267\u884c\u524d\u540e\uff0c\u6bcf\u4e2a\u6d4b\u8bd5\u65b9\u6cd5\u7684\u6267\u884c\u524d\u540e\u5904\u7406\u70b9\u4e8b\u60c5\u3002<br\/><br\/>\n\u6bd4\u5982\u8bf4\u4ece\u5916\u90e8\u8bfb\u53d6\u5185\u5bb9\u8fdb\u884c\u521d\u59cb\u5316\u6d4b\u8bd5\u6570\u636e\uff0c\u800c\u4e14 JUnit\u00a0\u672c\u8eab\u5c31\u63d0\u4f9b\u4e86 @RunWith(Parameterized.class)\u00a0\u00a0\u8fd9\u4e2a\u53c2\u6570\u5316 Runner\uff0c\u7528\u4e86\u4e3a\u5e26\u53c2\u6570\u6d4b\u8bd5\u65b9\u6cd5\u5faa\u73af\u586b\u5145\u6570\u636e\u8fdb\u884c\u6d4b\u8bd5\u3002JUnit\u00a0\u7684\u53c2\u6570\u5316\u6d4b\u8bd5\u6bd4 C#\u00a0\u8fd8\u662f\u8981\u7b28\u62d9\u4e00\u4e9b\uff0cC#\u00a0\u76f4\u63a5\u7528\u65b9\u6cd5\u6ce8\u89e3\u4e00\u884c\u884c\u8bbe\u7f6e\u53c2\u6570\uff0c\u6211\u60f3 JUnit\u00a0\u7a0d\u52a0\u5b9a\u5236\u7684\u8bdd\u4e5f\u884c\u7684\u3002"},{"title":"\u7b80\u5355\u5b9e\u73b0 Java \u7684 Tuple \u5143\u7ec4\u6570\u636e\u7c7b\u578b","link":"https:\/\/yanbin.blog\/simple-java-tuple-datatype\/","pubDate":"Mon, 04 Feb 2013 06:32:42 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/simple-java-tuple-datatype\/","description":"\n\u5143\u7ec4\u7c7b\u578b\uff0c\u5373 Tuple \u5e38\u5728\u811a\u672c\u8bed\u8a00\u4e2d\u51fa\u73b0\uff0c\u4f8b\u5982 Scala \u7684 (\"Unmi\", \"fantasia@sina.com\", \"blahbla\")\u3002\u5143\u7ec4\u53ef\u8ba4\u4e3a\u662f\u8c61\u6570\u7ec4\u4e00\u6837\u7684\u5bb9\u5668\uff0c\u5b83\u7684\u76ee\u7684\u662f\u8ba9\u4f60\u65b9\u4fbf\u6784\u9020\u548c\u5f15\u7528\uff0c\u4f8b\u5982 Pair \u53ef\u8ba4\u4e3a\u662f\u4e00\u4e2a\u53ea\u80fd\u5b58\u4e24\u4e2a\u5143\u7d20\u7684\u5143\u7ec4\uff0c\u50cf\u662f\u4e2a Map\uff1b \u771f\u6b63\u7684\u5143\u7ec4\u5e94\u8be5\u662f\u53ef\u4ee5\u4efb\u610f\u591a\u4e2a\u5143\u7d20\u7684\u5bb9\u5668\uff0c\u7ed5\u6765\u7ed5\u53bb\uff0c\u5b83\u8fd8\u662f\u6570\u7ec4\uff0c\u6216\u5217\u8868\uff0c\u6240\u4ee5\u6211\u4eec\u5b9e\u73b0\u4e0a\u8fd8\u662f\u8981\u501f\u52a9\u4e8e\u6570\u7ec4\u6216\u662f\u5217\u8868\u3002<\/p>\n<br\/>\n\u5148\u770b Scala \u4e2d\u4ec0\u4e48\u662f\u5143\u7ec4\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-scala\" data-lang=\"scala\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"k\">val<\/span> <span class=\"n\">tuple<\/span> <span class=\"k\">=<\/span> <span class=\"o\">(<\/span><span class=\"s\">&#34;Unmi&#34;<\/span><span class=\"o\">,<\/span> <span class=\"s\">&#34;fantasia@sina.com&#34;<\/span><span class=\"o\">,<\/span> <span class=\"s\">&#34;blahblah...&#34;<\/span><span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"n\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">tuple<\/span><span class=\"o\">.<\/span><span class=\"n\">_1<\/span><span class=\"o\">)<\/span> <span class=\"o\">\/\/<\/span><span class=\"n\">\u8f93\u51fa<\/span> <span class=\"nc\">Unmi<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\nScala \u4e2d\u8bbf\u95ee\u4ece 1 \u5f00\u59cb\uff0c\u7528 ._1 \u65b9\u5f0f\u6765\u8bbf\u95ee\u5176\u4e2d\u7684\u5143\u7d20\u3002<br\/><br\/>\n\u53c2\u7167\u4e8e\u6b64\uff0c\u5199\u51fa\u4e00\u4e2a Java \u7248\u672c\u7684 Tuple\uff0c\u4e3a\u589e\u957f\u4f60\u7684\u952e\u76d8\u7684\u4f7f\u7528\u5bff\u547d\uff0c\u6211\u4eec\u628a\u65b9\u6cd5\u540d\u4e5f\u7f29\u77ed\u4e86\uff0c\u4f8b\u5982 make \u7f29\u5199\u4e3a mk\uff0c\u5f15\u7528\u5143\u7d20\u7684\u65b9\u6cd5\u540d\u4e3a _\uff0c\u4ecd\u7136\u4fdd\u6301 Java \u7684\u4e60\u60ef\uff0c\u7d22\u5f15\u4ece 0 \u5f00\u59cb\uff1a"},{"title":"Java \u91cc\u628a InputStream \u8f6c\u6362\u6210 String \u7684\u51e0\u79cd\u65b9\u6cd5","link":"https:\/\/yanbin.blog\/java-convert-inputstream-to-string\/","pubDate":"Fri, 01 Feb 2013 05:35:57 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-convert-inputstream-to-string\/","description":"\n\u6211\u4eec\u5728 Java \u4e2d\u7ecf\u5e38\u4f1a\u78b0\u5230\u5982\u4f55\u628a InputStream \u8f6c\u6362\u6210 String \u7684\u60c5\u5f62\uff0c\u6bd4\u5982\u4ece\u6587\u4ef6\u6216\u7f51\u7edc\u5f97\u5230\u4e00\u4e2a InputStream\uff0c\u9700\u8981\u8f6c\u6362\u6210\u5b57\u7b26\u4e32\u8f93\u51fa\u6216\u8d4b\u7ed9\u522b\u7684\u53d8\u91cf\u3002<\/p>\n<br\/>\n\u672a\u771f\u6b63\u5173\u6ce8\u8fd9\u4e2a\u95ee\u9898\u4e4b\u524d\u6211\u5e38\u7528\u7684\u529e\u6cd5\u5c31\u662f\u6309\u5b57\u8282\u4e00\u6b21\u6b21\u8bfb\u5230\u7f13\u51b2\u533a\uff0c\u6216\u662f\u5efa\u7acb BufferedReader \u9010\u884c\u8bfb\u53d6\u3002\u5176\u5b9e\u5927\u53ef\u4e0d\u5fc5\u8d39\u6b64\u5468\u6298\uff0c\u6211\u4eec\u53ef\u4ee5\u7528 Apache commons IOUtils\uff0c\u6216\u8005\u662f JDK 1.5 \u540e\u7684 Scanner\uff0c\u8fd8\u53ef\u7528 Google\u00a0 Guava \u5e93\u7684 CharStreams\u3002\u5230\u4e86 JDK7\uff0c\u82e5\u8981\u4ece\u6587\u4ef6\u4e2d\u76f4\u63a5\u5f97\u5230\u5b57\u7b26\u4e32\u8fd8\u80fd\u7528 java.nio.file.Files#readAllLines \u548c java.nio.file.Files#readAllBytes \u65b9\u6cd5\u3002<br\/><br\/>\n\u4e0b\u9762\u770b\u5404\u4e2a\u4f8b\u5b50\uff0c\u4e3a\u80fd\u591f\u5b9e\u9645\u7528\u8fd0\uff0c\u4f8b\u5b50\u5199\u5728 main \u65b9\u6cd5\u91cc\uff0c\u5e76\u4ece\u6587\u4ef6\u83b7\u5f97\u4e00\u4e2a InputStream\uff0c\u4ee3\u7801\u4e2d\u628a\u53ef\u80fd\u8981\u6355\u83b7\u7684\u5f02\u5e38\u629b\u51fa\u6765\u3002\u518d\u5c31\u662f\u6ce8\u610f\u5904\u7406\u8f93\u5165\u8f93\u51fa\u6d41\u65f6\u6709\u6d89\u53ca\u5230\u5b57\u7b26\u96c6\uff0c\u5b57\u7b26\u96c6\u4e71\u4e86\u5c31\u4e71\u7801\u4e86\uff0c\u9ed8\u8ba4\u5b57\u7b26\u96c6\u662f System.getProperty(\"file.encoding\")\uff0c\u901a\u5e38\u6211\u4eec\u90fd\u7528 UTF-8\uff0c\u5f02\u5e38 UnsupportedEncodingException \u7ee7\u627f\u81ea IOException\u3002<br\/><br\/>\n\u4e0b\u9762\u7684 6 \u4e2a\u65b9\u6cd5\u4e2d\u5e94\u8be5\u6709\u4e00\u4e2a\u4f60\u80fd\u770b\u5f97\u4e0a\u7684\u5427\uff0c\u7528 Groovy\uff0cScala \u7684\u9664\u5916\uff0c\u82e5\u672a\u627e\u5230\u4e00\u4e2a\u9042\u610f\u7684\uff0c\u544a\u8bc9\u6211\uff0c\u4f60\u6709\u597d\u529e\u6cd5\u66f4\u5e94\u8be5\u544a\u8bc9\u6211\u3002<br\/><br\/>\n<strong>1. \u4f7f\u7528 JDK 5 \u7684 Scanner<\/strong><br\/>"},{"title":"Scala 2.10.0 \u65b0\u7279\u6027\u4e4b\u52a8\u6001\u5c5e\u6027\u3001\u65b9\u6cd5","link":"https:\/\/yanbin.blog\/scala-2-10-0-new-feature-dynamic\/","pubDate":"Sat, 19 Jan 2013 13:34:15 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/scala-2-10-0-new-feature-dynamic\/","description":"\n\u6700\u65e9\u7684\u4ecb\u7ecd\u00a0Scala\u00a0\u8bed\u8a00\u7684\u4e66\u90fd\u662f\u4ee5\u00a0Scala\u00a0\u7684\u9759\u6001\u7c7b\u578b\u7cfb\u7edf\u4e3a\u50b2\u3002Scala\u00a0\u4e5f\u7b97\u662f\u4e2a\u811a\u672c\u8bed\u8a00\uff0c\u5374\u4e0d\u50cf\u5176\u4ed6\u8bb8\u591a\u811a\u672c\u8bed\u8a00\u90a3\u6837\u7c7b\u578b\u662f\u52a8\u6001\u7684\uff0c\u53ea\u6709\u6267\u884c\u65f6\u624d\u786e\u5b9a\uff0c\u800c Scala\u00a0\u5728\u6267\u884c\u524d\u5c31\u786e\u5b9a\u4e86\u7c7b\u578b\uff0c\u6bd4\u5982\u4f9d\u8d56\u4e8e\u6bd4\u00a0Java\u00a0\u66f4\u5f3a\u5927\u7684\u7c7b\u578b\u63a8\u65ad\u884c\u4e3a\u3002<\/p>\n<br\/>\n\u9759\u6001\u7c7b\u578b\u4e0d\u5149\u662f\u53d8\u91cf\u7c7b\u578b\u662f\u786e\u5b9a\u7684\uff0c\u8fd8\u6709\u6bd4\u5982\u5728\u4f7f\u7528\u00a0 qual.sel\u00a0\u65f6\uff0csel\u00a0\u8fd9\u4e2a\u5c5e\u6027\u6216\u662f\u65b9\u6cd5(Scala\u00a0\u7684\u8bbf\u95ee\u4e00\u81f4\u6027\uff0c\u5c5e\u6027\u548c\u65b9\u6cd5\u6709\u65f6\u5019\u5e76\u6ca1\u6709\u90a3\u4e48\u5927\u7684\u533a\u522b)\u5fc5\u987b\u5728 qual\u00a0\u7684\u7c7b\u578b\u4e2d\u58f0\u660e\u4e86\u7684\u3002<br\/><br\/>\nScala\u00a0\u601d\u8003\u518d\u4e09\u8fd8\u662f\u52a0\u5165\u4e86 Dynamic Types\uff0c\u8fd9\u4e2a\u7279\u6027\u5728\u00a0Scala 2.9\u00a0\u4e2d\u662f\u8bd5\u9a8c\u6027\u7684\uff0c\u5fc5\u987b\u7528 <span style=\"color: #800000;\">-Xexperimental<\/span>\u00a0\u8fdb\u884c\u5f00\u542f\uff0c\u5230\u4e86 Scala 2.10.0\u00a0\u4e2d\uff0c\u53ea\u6709\u4ee3\u7801\u4e2d <span style=\"color: #800000;\">import scala.language.dynamics<\/span> \u5c31\u53ef\u7528\u4e86\uff0c\u6216\u662f\u7f16\u8bd1\u65f6\u52a0 <span style=\"color: #800000;\">-language:dynamics<\/span> \u9009\u9879\u3002<br\/><br\/>\n\u867d\u7136 Scala 2.10.0\u00a0\u52a0\u8fdb\u4e86 Dynamic Types\u00a0\u7279\u6027\uff0c\u4f46 Scala\u00a0\u4ecd\u7136\u662f\u9759\u6001\u7c7b\u578b\u7684\u8bed\u8a00\uff0c\u56e0\u4e3a\u5728\u7f16\u8bd1\u5668\u540c\u6837\u4f1a\u68c0\u67e5\u591a\u51fa\u6765\u7684\u7c7b\u578b\u3002<br\/><br\/>\n\u6709\u4e86 Dynamic Types\u00a0\u4e4b\u540e\uff0cScala\u00a0\u53c8\u53ef\u66f4\u00a0DSL\u00a0\u4e86\uff0c\u65b9\u6cd5\u540d\u7684\u52a8\u6001\u4e0a\u53ef\u4ee5\u8ba9\u5b83\u968f\u65f6\u5305\u62ec\u6df1\u523b\u7684\u4e1a\u52a1\u542b\u4e49\u3002\u76f8\u6bd4 Java\u00a0\u7684\u00a0DSL\u00a0\u7684\u80fd\u529b\u5c31\u592a\u900a\u4e86\uff0c\u6211\u4eec\u51e0\u4e4e\u65e0\u6cd5\u5728 Java\u00a0\u9762\u524d\u63d0 DSL\u00a0\u8fd9\u56de\u4e8b\u3002"},{"title":"Scala 2.10 \u65b0\u7279\u6027\u4e4b\u4f7f\u7528\u9690\u5f0f\u7c7b\u8fdb\u884c\u7c7b\u578b\u9690\u5f0f\u8f6c\u6362","link":"https:\/\/yanbin.blog\/scala-2-10-new-features-implicit-class\/","pubDate":"Fri, 18 Jan 2013 12:50:28 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/scala-2-10-new-features-implicit-class\/","description":"\n<p>\u5728\u00a0Scala 2.10.0\u00a0\u4e4b\u524d\u7c7b\u578b\u7684\u9690\u5f0f\u8f6c\u6362\u5fc5\u987b\u901a\u8fc7\u9690\u5f0f\u65b9\u6cd5\u6765\u5b8c\u6210\uff0c\u73b0\u5728\u7684\u00a0Scala\u00a0\u53ef\u4ee5\u7528 implicit class\u00a0\u6765\u58f0\u660e\u7c7b\uff0c\n\u5e76\u4e14\u5b83\u7684\u4e3b\u6784\u9020\u5668 (Primary Constructor)\u00a0\u53ea\u6709\u4e00\u4e2a\u53c2\u6570\u65f6\uff0c\u5c31\u53ef\u4ee5\u7528\u6765\u628a\u53c2\u6570\u9690\u5f0f\u8f6c\u6362\u6210\u8be5\u7c7b\u578b\u3002\n<\/p>\n<p>\u80fd\u7406\u89e3\u4e0a\u9762\u4ec0\u4e48\u610f\u601d\uff0c\u77e5\u9053\u600e\u4e48\u7528\u9690\u5f0f\u7c7b\u5417\uff1f \u5c31\u4e0a\u9762\u90a3\u53e5\u8bdd\uff0c\u6211\u81ea\u5df1\u90fd\u4e0d\u77e5\u9053\u5728\u8bf4\u4ec0\u4e48\u3002<\/p>\n<p>\u9996\u5148\u8981\u77e5\u9053\u00a0Scala\u00a0\u5148\u524d\u662f\u600e\u4e48\u4f9d\u636e\u9690\u5f0f\u65b9\u6cd5\u8fdb\u884c\u7c7b\u578b\u7684\u9690\u5f0f\u8f6c\u6362\uff0c\u5176\u6b21\u53c8\u4f55\u8c13\u4e3b\u6784\u9020\u5668\u5462\uff1f \u5173\u4e8e\u00a0Scala 2.10.0\u00a0\u7684 implicit class\uff0c\n\u5b98\u65b9\u7684\u89e3\u91ca\u5728\u8fd9\u91cc <a title=\"Scala 2.10.0 implicit class\" href=\"http:\/\/docs.scala-lang.org\/sips\/pending\/implicit-classes.html\" target=\"_blank\">\nhttp:\/\/docs.scala-lang.org\/sips\/pending\/implicit-classes.html\n<\/a>\n\u518d\u591a\u8bf4\u53ea\u80fd\u8ba9\u5927\u5bb6\u66f4\u6478\u4e0d\u5230\u5934\uff0c\u5b9e\u4f8b\u6f14\u793a\u662f\u738b\u9053\uff1a<\/p>\n<p>\n<img class=\"aligncenter post-image\"\nsrc=\"https:\/\/yanbin.blog\/posts\/2013\/scala-2-10-new-features-implicit-class\/scala-2.10.0-implicit-class.png\"\nwidth=\"750px\"\n\/>"},{"title":"JavaDoc \u7f16\u7a0b\uff0c\u4e66\u5199\u81ea\u5b9a\u4e49\u7684 Doclet, \u5b9a\u5236\u8f93\u51fa","link":"https:\/\/yanbin.blog\/javadoc-customize-doclet\/","pubDate":"Thu, 20 Dec 2012 06:12:07 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/javadoc-customize-doclet\/","description":"\n\u524d\u4e00\u7bc7\u4ecb\u7ecd\u4e86 <a title=\"JavaDoc \u7f16\u7a0b\uff0c\u4e66\u5199\u81ea\u5b9a\u4e49\u7684 Taglet \u652f\u6301 @unmi \u7b49\" href=\"https:\/\/yanbin.blog\/javadoc-programming-customize-taglet\" target=\"_blank\" rel=\"noopener\">JavaDoc \u7f16\u7a0b\uff0c\u4e66\u5199\u81ea\u5b9a\u4e49\u7684 Taglet \u652f\u6301 @unmi \u7b49<\/a>, \u90a3\u65f6\u63d0\u5230\u4e86 Doclet\uff0c\u4f46\u662f\u5dee\u70b9\u65e0\u89c6\u4e86 Doclet\uff0c\u73b0\u5728\u624d\u77e5\u9053 Doclet \u771f\u662f\u592a\u5f3a\u5927\u4e86\uff0c\u6709\u4e86\u5b83\u4f60\u4f1a\u89c9\u5f97 javadoc \u5df2\u7ecf\u4e0d\u662f\u539f\u672c\u7684\u90a3\u4e2a javadoc \u4e86\uff0c\u522b\u518d\u628a javadoc \u770b\u4f5c\u53ea\u4f1a\u751f\u6210\u4e00\u5927\u5806 HTML \u6587\u4ef6\u7684\u5de5\u5177\u4e86\u3002\u5c24\u5176\u662f\u642d\u914d\u4e0a\u81ea\u5b9a\u4e49\u7684 Taglet\uff0c\u90a3\u53ef\u662f\uff0c\u81ea\u5df2\u4f53\u9a8c\u5427\u3002<\/p>\n<br\/>\nDoclet \u662f JavaDoc \u7684\u4e00\u4e2a\u5f88\u9686\u91cd\u7684\u6269\u5c55\u70b9\uff0c\u53ef\u4ee5\u5728\u6267\u884c javadoc \u65f6\u7528 -doclet \u6765\u6307\u5b9a\u81ea\u5df1\u7684 Doclet\uff0c\u90a3\u4e48 doclet \u53ef\u4ee5\u4e3a\u6211\u4eec\u505a\u4e9b\u4ec0\u4e48\u5462\uff1f<br\/><br\/>\n\u53ef\u4ee5\u4e3a\u6211\u4eec\u751f\u6210 HTML \u7684 JavaDoc API \u6587\u6863\uff0c\u8fd9\u5c31\u662f\u9ed8\u8ba4\u7684 com.sun.tools.doclets.standard.Standard \u4e3a\u6211\u4eec\u505a\u7684\u4e8b\uff0c\u8fd8\u53ef\u4ee5\u50cf\u4ee5\u524d\u90a3\u6837\u4ece\u6e90\u6587\u4ef6\u4e2d\u62bd\u53d6\u4fe1\u606f\u751f\u6210\u5404\u79cd XML \u6587\u4ef6\uff0c\u6216\u662f PDF, Excel\uff0c UML \u56fe\u7b49\u7b49\u4efb\u4f55\u53ef\u80fd\u7684\u5185\u5bb9\uff0c\u6216\u505a\u4efb\u4f55\u6709\u4f5c\u4e3a\u7684\u4e8b\u60c5\u3002\u603b\u4e4b\u5728 doclet \u4e2d\u53ef\u4ee5\u611f\u77e5\u9053\u5bf9\u4efb\u4f55\u5305\uff0c\u7c7b\uff0c\u65b9\u6cd5\uff0c\u5b57\u6bb5\u7b49\u7684\u904d\u5386\u3002\u8fd9\u91cc <a href=\"http:\/\/doclet.com\/\" target=\"_blank\" rel=\"noopener\">Doclet.com<\/a> \u6709\u5927\u91cf\u7684\u7b2c\u4e09\u65b9\u7684 doclet \u4f9b\u4f60\u9009\u62e9\uff0c\u5982\uff1a<br\/><br\/>\nAntDoclet, API Guide Doclet, EJBGen, Java2Rose Doclet, JDiff, JUnitDoclet, LaTeXtaglet, PDFDoclet, PublishedApiDoclet, ServletDoclet, Spell Check Doclet, UMLGraph, VelocityDoclet, XDoclet, xml-doclet \u7b49\u6570\u5341\u79cd Doclet, \u8fd8\u53ef\u4ee5\u627e\u5230\u522b\u7684\uff0c\u6240\u4ee5\u4f60\u8981\u662f\u4e0d\u60f3\u81ea\u5b9a\u4e49 Doclet \u7684\u8bdd\uff0c\u6709\u7b2c\u4e09\u65b9\u53ef\u7528\u5c31\u76f4\u63a5\u7528\u4eba\u5bb6\u7684\u5c31\u884c\u3002<br\/><br\/>\n\u603b\u6709\u7279\u6b8a\u9700\u6c42\u7684\u65f6\u5019\uff0c\u603b\u6709\u8981\u81ea\u5b9a\u4e49 Doclet \u7684\u65f6\u5019\u3002\u8bf4\u90a3\u4e48\u591a\u603b\u8981\u6765\u770b\u770b Doclet \u53ef\u4ee5\u7528\u6765\u505a\u4ec0\u4e48\uff0c\u89c1\u5982\u4e0b DocumentDoclet:"},{"title":"Java \u7684\u591a\u884c\u5b57\u7b26\u4e32 Here Document \u7684\u5b9e\u73b0","link":"https:\/\/yanbin.blog\/java-implement-here-document\/","pubDate":"Fri, 14 Dec 2012 23:21:36 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-implement-here-document\/","description":"\n\u5bfb\u6c42\u4e86\u5f88\u4e45\u5173\u4e8e\u5982\u4f55\u5728 Java \u4e2d\u5b9e\u73b0\u591a\u884c\u5b57\u7b26\u4e32\uff0c\u5373 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Here_document\" target=\"_blank\" rel=\"noopener\">Here Document<\/a>\u3002\u56e0\u4e3a\u5728\u6d4b\u8bd5\u4e2d\u51c6\u5907\u5927\u7684\u5b57\u7b26\u4e32\u6570\u636e\u662f\u4e0d\u5f97\u4e0d\u7528\u52a0\u53f7\u53bb\u62fc\u63a5\uff0c\u751a\u81f3\u662f\u9ebb\u70e6\u3002\u7a0d\u597d\u5c31\u662f\u7528 <a href=\"http:\/\/www.htmlescape.net\/javaescape_tool.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.htmlescape.net\/javaescape_tool.html<\/a> \u628a\u4f60\u8f93\u5165\u7684\u5927\u6bb5\u6587\u5b57\u751f\u6210 Java \u7684\u5b57\u7b26\u4e32\u3002<\/p>\n<br\/>\n\u627e\u8fc7\u4e00\u4e9b\u4ecb\u7ecd Java \u5b9e\u73b0 Here Document \u7684\u65b9\u6cd5\uff0c\u9996\u5148\u5927\u5bb6\u65e0\u4e00\u4e0d\u662f\u628a\u8fd9\u4e2a\u591a\u884c\u5b57\u7b26\u4e32\u585e\u5728\u6ce8\u91ca\u91cc\uff0c\u6709\u4e9b\u5b9e\u73b0\u5728\u8fd0\u884c\u8fd8\u5728\u4f9d\u8d56\u4e8e Java \u6e90\u6587\u4ef6\u4e2d\u7684\u6ce8\u91ca\uff0c\u8fd9\u4e0d\u592a\u53ef\u53d6\u3002\u806a\u660e\u7684\u505a\u6cd5\u5e94\u8be5\u8981\u53bb\u6253\u7f16\u8bd1\u5668\u7684\u4e3b\u610f\uff0c\u8ba9\u7f16\u8bd1\u540e\u4f53\u73b0\u5728 Class \u6587\u4ef6\u4e2d\uff0c\u53d8\u91cf\u5c31\u88ab\u8d4b\u4e0a\u4e86\u591a\u884c\u5b57\u7b26\u4e32\u503c\uff0c\u8fd9\u5c31\u662f JDK1.5 \u5f15\u5165\u7684 APT(Annotation Processing Tool)\uff0c\u5230 JDK1.6 \u540e\u53ef\u64cd\u4f5c\u6027\u66f4\u5f3a\u4e86\uff0c\u53ef\u4ee5 javac \u7684\u65f6\u5019\u5e26\u4e0a -processor \u53c2\u6570\u3002<br\/><br\/>\n\u5355\u5355\u4ece\u8bed\u6cd5\u7279\u6027\u4e0a\u6765\u8bb2\uff0c\u6211\u89c9\u5f97 Java \u4e0e\u73b0\u4eca\u6d41\u884c\u7684\u8bed\u8a00\u8fd8\u662f\u6709\u5dee\u8ddd\uff0c\u4e0d\u8fc7\u5b83\u4e00\u76f4\u5728\u6210\u957f\uff0c\u50cf JDK 1.5 \u548c 1.7 \u8fd9\u4e24\u4e2a\u7248\u672c\u5c31\u5e26\u6765\u4e86\u4e0d\u5c11\u597d\u4e1c\u897f\u3002\u60f3\u8981\u89c1\u8bc6\u4e00\u4e0b\u5176\u4ed6\u4e9b\u4e2a\u8bed\u8a00\uff0c\u5982 Perl, PHP, Ruby, C++11 \u600e\u4e48\u5b9e\u73b0 Here Document \u8fd8\u662f\u8bf7\u770b <a href=\"http:\/\/en.wikipedia.org\/wiki\/Here_document\" target=\"_blank\" rel=\"noopener\">http:\/\/en.wikipedia.org\/wiki\/Here_document<\/a>\u3002<br\/><br\/>\n\u5c31\u8fde Java \u6700\u4eb2\u5bc6\u7684\u6218\u53cb C# \u90fd\u65e9\u5b9e\u73b0\u4e86 Here Document\uff0c\u7528 @ \u7b26\u53f7\uff1a"},{"title":"\u4fdd\u6301\u987a\u5e8f\u7684 Java Properties \u7c7b","link":"https:\/\/yanbin.blog\/ordered-java-properties-class\/","pubDate":"Thu, 06 Dec 2012 23:46:36 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/ordered-java-properties-class\/","description":"\nJava \u7684 Properties \u52a0\u8f7d\u5c5e\u6027\u6587\u4ef6\u540e\u662f\u65e0\u6cd5\u4fdd\u8bc1\u8f93\u51fa\u7684\u987a\u5e8f\u4e0e\u6587\u4ef6\u4e2d\u4e00\u81f4\u7684\uff0c\u56e0\u4e3a Properties \u662f\u7ee7\u627f\u81ea Hashtable \u7684\uff0c key\/value \u90fd\u662f\u76f4\u63a5\u5b58\u5728 Hashtable \u4e2d\u7684\uff0c\u800c Hashtable \u662f\u4e0d\u4fdd\u8bc1\u8fdb\u51fa\u987a\u5e8f\u7684\u3002<\/p>\n<br\/>\n\u603b\u6709\u65f6\u5019\u4f1a\u6709\u5173\u5fc3\u987a\u5e8f\u4e00\u81f4\u7684\u9700\u6c42\uff0c\u6070\u5982\u6709 org.apache.commons.collections.OrderdMap\uff08\u5176\u5b9e\u7528 LinkedHashMap \u5c31\u662f\u4fdd\u8bc1\u987a\u5e8f\uff09 \u4e00\u6837\uff0c\u6211\u4eec\u4e5f\u60f3\u8981\u6709\u4e2a OrderdProperties\u3002\u7f51\u4e0a\u67e5\u4e86\u4e0b\u8fd8\u771f\u6709\uff1a<br\/><br\/>\n<a href=\"http:\/\/livedocs.adobe.com\/jrun\/4\/javadocs\/jrunx\/util\/OrderedProperties.html\" target=\"_blank\" rel=\"noopener\">http:\/\/livedocs.adobe.com\/jrun\/4\/javadocs\/jrunx\/util\/OrderedProperties.html<\/a><br\/><br\/>\n<a href=\"http:\/\/www.openrdf.org\/doc\/alibaba\/2.0-rc4\/apidocs\/org\/openrdf\/repository\/object\/composition\/helpers\/OrderedProperties.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.openrdf.org\/doc\/alibaba\/2.0-rc4\/apidocs\/org\/openrdf\/repository\/object\/composition\/helpers\/OrderedProperties.html<\/a><br\/><br\/>\n\u4e0d\u8fc7\u6ca1\u627e\u5230\u6e90\u7801\uff0c\u5176\u5b9e\u81ea\u5df1\u5199\u4e00\u4e2a OrderedProperties\u00a0 \u4e5f\u4e0d\u96be\uff0c\u5e76\u4e0d\u9700\u8981\u91cd\u5934\u5199\u8d77\uff0c\u53ea\u8981\u7ee7\u627f\u81ea Properties\uff0c\u8986\u76d6\u539f\u6765\u7684 put\/keys,keySet,stringPropertyNames \u5373\u53ef\uff0c\u5176\u4e2d\u7528\u4e00\u4e2a LinkedHashSet \u6765\u4fdd\u5b58\u5b83\u7684\u6240\u6709 key\u3002\u5b8c\u6574\u4ee3\u7801\u5982\u4e0b\uff1a"},{"title":"\u5207\u5206 Tomcat \u7684 catalina.out \u6587\u4ef6\uff0c\u89e3\u51b3\u65e5\u5fd7\u6587\u4ef6\u8fc7\u5927\u7684\u95ee\u9898","link":"https:\/\/yanbin.blog\/split-tomcat-catalina-out-file\/","pubDate":"Mon, 17 Sep 2012 03:06:54 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/split-tomcat-catalina-out-file\/","description":"\nTomcat \u4e0b\u65e5\u5fd7\u6587\u4ef6 catalina.out \u8fc7\u5927\uff0c\u51e0\u767e\u5146\u6216\u51e0\u4e2aG\uff0c\u8fdb\u800c\u9020\u6210\u518d\u4e5f\u65e0\u6cd5\u5199\u5165\u66f4\u591a\u7684\u65e5\u5fd7\u5185\u5bb9\uff0c\u81f3\u4f7f Tomcat \u65e0\u6cd5\u5904\u7406\u8bf7\u6c42\u3002\u9700\u7136\u4f60\u53ef\u4ee5\u5728 $TOMCAT_HOME\/logs \u76ee\u5f55\u4e0b\u770b\u5230\u6709 catalina.2012-09-16.log \u8fd9\u6837\u5206\u65e5\u671f\u7684\u5f52\u6863\uff0c\u4f46\u662f\u4e3b\u6587\u4ef6 catalina.out \u5374\u4e00\u76f4\u5728\u81a8\u80c0\u3002<\/p>\n<br\/>\n\u4f60\u53ef\u4ee5\u6bcf\u6b21\u624b\u5de5\u6216\u5b9a\u65f6(crontab\/\u8ba1\u5212\u4efb\u52a1)\u6e05\u7406 catalina.out \u6587\u4ef6\uff0c\u6216\u662f\u89c4\u5212\u597d\u65e5\u5fd7\u8f93\u51fa(\u7ec8\u7a76\u4e5f\u4f1a\u6709\u6ee1\u7684\u65f6\u5019)\u3002\u518d\u5c31\u662f\u6709\u4e24\u79cd\u8f83\u597d\u7684\u89e3\u51b3\u65b9\u6848\u53bb\u771f\u6b63\u7684\u5207\u5206 catalina.out \u6587\u4ef6\uff0c\u8ba9 catalina.out \u53ea\u5b58\u6709\u6700\u65b0\u7684\u65e5\u5fd7\u3002<br\/><br\/>\n\u4e00. \u6539\u7528 Log4J \u6765\u8f93\u51fa Tomcat \u65e5\u5fd7\uff0c\u501f\u52a9 Log4J \u7684\u5404\u79cd\u65e5\u5fd7\u5207\u5206\u7684\u529f\u80fd\u3002\u8be6\u60c5\u53ef\u53c2\u8003\uff1a <a href=\"http:\/\/baalwolf.iteye.com\/blog\/1464093\" target=\"_blank\" rel=\"noopener\">http:\/\/baalwolf.iteye.com\/blog\/1464093<\/a>\uff0c <a href=\"http:\/\/tomcat.apache.org\/tomcat-6.0-doc\/logging.html\" target=\"_blank\" rel=\"noopener\">http:\/\/tomcat.apache.org\/tomcat-6.0-doc\/logging.html<\/a>\u3002<br\/><br\/>\n\u4e8c. Linux \u4e0b\u4f7f\u7528 cronolog \u5de5\u5177\u6765\u5207\u5206 catalina.out<br\/><br\/>\n\u8fd9\u91cc\u91cd\u70b9\u4ecb\u7ecd\u8fd9\u79cd\u65b9\u6cd5\uff0c\u5177\u4f53\u6b65\u9aa4\u5982\u4e0b\uff1a"},{"title":"\u518d\u8bf4 Java \u4e2d\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u8fdb\u884c\u540e\u5411\u5f15\u7528($1,$2...)","link":"https:\/\/yanbin.blog\/re-java-regex-replace\/","pubDate":"Fri, 17 Aug 2012 10:31:18 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/re-java-regex-replace\/","description":"\n\u524d\u9762\u901a\u8fc7 <a title=\"\u5728 Java \u4e2d\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u8fdb\u884c\u540e\u5411\u5f15\u7528($1,$2...)\" href=\"https:\/\/yanbin.blog\/java-regex-replace-string\" target=\"_blank\" rel=\"noopener\">\u5728 Java \u4e2d\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u8fdb\u884c\u540e\u5411\u5f15\u7528($1,$2...)<\/a> \u8bb2\u4e86\u5728\u00a0Java\u00a0\u4e2d\u4f7f\u7528\u00a0JavaScript\u00a0\u548c\u00a0JRegex\u00a0\u6765\u5b9e\u73b0\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u540e\u5411\u5206\u7ec4\u5f15\u7528 $1, $2 \u66ff\u6362\u3002<br\/><br\/>\n\u81ea\u00a0JDK 1.4\u00a0\u51fa\u73b0\u6b63\u5219\u8868\u8fbe\u5f0f\u4ee5\u6765\u6211\u8fd8\u771f\u4e0d\u77e5\u9053\u00a0Java\u00a0\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u662f\u53ef\u4ee5\u5728\u66ff\u6362\u65f6\u7528 $1, $2\u00a0\u8fbe\u6210\u540e\u5411\u5206\u7ec4\u66ff\u6362\u7684\uff0c\u6240\u4ee5\u524d\u4e00\u7bc7\u8868\u8ff0\u6709\u4e9b\u51fa\u5165\u7684\u3002\u4e5f\u5c31\u662f\u8981\u5b9e\u73b0\u00a0JavaScript\u00a0\u4e2d\u7684<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-html\" data-lang=\"html\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"p\">&lt;<\/span><span class=\"nt\">script<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">src<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;abc def&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">des<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">src<\/span><span class=\"p\">.<\/span><span class=\"nx\">replace<\/span><span class=\"p\">(<\/span><span class=\"sr\">\/(\\w+)\\s+(\\w+)\/<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;$2 $1&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">write<\/span><span class=\"p\">(<\/span><span class=\"nx\">des<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\"> <span class=\"c1\">\/\/\u8f93\u51fa\u4e3a\uff1a def abc\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">6<\/span><span class=\"cl\"><span class=\"p\">&lt;\/<\/span><span class=\"nt\">script<\/span><span class=\"p\">&gt;<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u7684\u529f\u80fd\uff0c\u5b8c\u5168\u53ef\u4ee5\u4e0d\u6c42\u52a9\u4e8e\u7b2c\u4e09\u65b9\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u7ec4\u4ef6\u5e93\u6216\u662f\u901a\u8fc7\u00a0ScriptEngine + JavaScript\u00a0\u6765\u5b9e\u73b0\uff0c\u5728 Java\u00a0\u5b57\u7b26\u4e32\u7684:<br\/><br\/>\n<span style=\"color: #800000;\">public String replaceFirst(String regex, String replacement)<\/span><br \/>\n<span style=\"color: #800000;\">public String replaceAll(String regex, String replacement)<\/span><br\/><br\/>\n\u4e24\u65b9\u6cd5\u7684\u7b2c\u4e09\u4e2a\u53c2\u6570\u4e2d\u662f\u53ef\u4ee5\u7528 $1, $2 ...\u00a0\u6765\u5f15\u7528\u7b2c\u4e00\u4e2a\u53c2\u6570\u7684\u62ec\u53f7\u5206\u7ec4\u7684\uff0c\u7b80\u5355 Java \u793a\u4f8b\u4ee3\u7801\u5982\u4e0b\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"s\">&#34;abc def&#34;<\/span><span class=\"p\">.<\/span><span class=\"na\">replaceFirst<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;(\\\\w+)\\\\s+(\\\\w+)&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;$2 $1&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u7ed3\u679c\u4e3a def abc<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"s\">&#34;abc def aaa bbb&#34;<\/span><span class=\"p\">.<\/span><span class=\"na\">replaceAll<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;(\\\\w+)\\\\s+(\\\\w+)&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;$2 $1&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\"> <\/span><span class=\"o\">\/\/<\/span><span class=\"n\">\u7ed3\u679c\u662f<\/span><span class=\"w\"> <\/span><span class=\"n\">def<\/span><span class=\"w\"> <\/span><span class=\"n\">abc<\/span><span class=\"w\"> <\/span><span class=\"n\">bbb<\/span><span class=\"w\"> <\/span><span class=\"n\">aaa<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\nJava\u00a0\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u539f\u672c\u8fd8\u662f\u5f88\u5f3a\u5927\u7684\uff0c\u53ea\u6015\u4e0d\u80fd\u88ab\u4eba\u53d1\u73b0\u3002<br\/><br\/>\n2015-07-14\uff1a \u8865\u5145\u4e00\u70b9\uff0c\u5728\u6b63\u5219\u8868\u8fbe\u5f0f\u5916\u662f\u7528\u00a0 $1, $2 ... \u6765\u8fdb\u884c\u540e\u5411\u5f15\u7528\uff0c\u5982\u679c\u662f\u5728\u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u5c31\u9700\u8981\u7528\u00a0 \\1, \\2 ... \u7684\u5f62\u5f0f\u6765\u8fdb\u540e\u5411\u5f15\u7528\u3002\u4e0b\u9762\u4f8b\u5b50\uff0c\u66ff\u6362\u91cd\u590d\u51fa\u73b0\u7684\u4e24\u4f4d\u6570\u53ca\u4e4b\u95f4\u7684\u5185\u5bb9<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"s\">&#34;xx12abcd12345&#34;<\/span><span class=\"p\">.<\/span><span class=\"na\">replaceAll<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;(\\\\d{2}).+?\\\\1&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\"> <\/span><span class=\"o\">\/\/<\/span><span class=\"n\">\u7ed3\u679c\u4e3a<\/span><span class=\"w\"> <\/span><span class=\"n\">xx345<\/span><\/span><\/span><\/code><\/pre><\/div>"},{"title":"Java \u4e0b\u9ad8\u6548\u7684\u53cd\u5c04\u5de5\u5177\u5305 ReflectASM \u4f7f\u7528\u4f8b\u89e3","link":"https:\/\/yanbin.blog\/java-reflectasm-bytecode-usage\/","pubDate":"Thu, 16 Aug 2012 13:57:51 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-reflectasm-bytecode-usage\/","description":"\n<a title=\"ReflectASM\" href=\"http:\/\/code.google.com\/p\/reflectasm\/\" target=\"_blank\" rel=\"noopener\">ReflectASM<\/a> \u4f7f\u7528\u5b57\u8282\u7801\u751f\u6210\u7684\u65b9\u5f0f\u5b9e\u73b0\u4e86\u66f4\u4e3a\u9ad8\u6548\u7684\u53cd\u5c04\u673a\u5236\u3002\u6267\u884c\u65f6\u4f1a\u751f\u6210\u4e00\u4e2a\u5b58\u53d6\u7c7b\u6765 set\/get \u5b57\u6bb5\uff0c\u8bbf\u95ee\u65b9\u6cd5\u6216\u521b\u5efa\u5b9e\u4f8b\u3002\u4e00\u770b\u5230 ASM \u5c31\u80fd\u9886\u609f\u5230 ReflectASM \u4f1a\u7528\u5b57\u8282\u7801\u751f\u6210\u7684\u65b9\u5f0f\uff0c\u800c\u4e0d\u662f\u4f9d\u8d56\u4e8e Java \u672c\u8eab\u7684\u53cd\u5c04\u673a\u5236\u6765\u5b9e\u73b0\u7684\uff0c\u6240\u4ee5\u5b83\u66f4\u5feb\uff0c\u5e76\u4e14\u907f\u514d\u4e86\u8bbf\u95ee\u539f\u59cb\u7c7b\u578b\u56e0\u81ea\u52a8\u88c5\u7bb1\u800c\u4ea7\u751f\u7684\u95ee\u9898\u3002<\/p>\n<br\/>\n\u4e0b\u9762\u4e09\u4e2a\u56fe\u662f ReflectASM \u4e0e Java \u81ea\u8eab\u53cd\u5c04\u673a\u5236\u7684\u6027\u80fd\u5bf9\u6bd4\uff0c\u8868\u73b0\u5f88\u4e0d\u9519\u7684\u3002<br\/><br\/>\n<p style=\"text-align: center;\"><img class=\"aligncenter\" src=\"http:\/\/chart.apis.google.com\/chart?chma=100&amp;chtt=Field%20Set\/Get&amp;chs=700x62&amp;chd=t:1402081,11339107&amp;chds=0,11339107&amp;chxl=0:%7CJava%20Reflection%7CFieldAccess&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;chco=6600FF&amp;.png\" alt=\"\" width=\"700\" height=\"62\" \/><\/p>\n<br\/>\n<p style=\"text-align: center;\"><img class=\"aligncenter\" src=\"http:\/\/chart.apis.google.com\/chart?chma=100&amp;chtt=Method%20Call&amp;chs=700x62&amp;chd=t:97390,208750&amp;chds=0,208750&amp;chxl=0:%7CJava%20Reflection%7CMethodAccess&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;chco=6600AA&amp;.png\" alt=\"\" width=\"700\" height=\"62\" \/><\/p>\n<br\/>\n<p style=\"text-align: center;\"><img class=\"aligncenter\" src=\"http:\/\/chart.apis.google.com\/chart?chma=100&amp;chtt=Constructor&amp;chs=700x62&amp;chd=t:2853063,5828993&amp;chds=0,5828993&amp;chxl=0:%7CJava%20Reflection%7CConstructorAccess&amp;cht=bhg&amp;chbh=10&amp;chxt=y&amp;chco=660066&amp;.png\" alt=\"\" width=\"700\" height=\"62\" \/><\/p>\n<br\/>\n\u6d4b\u8bd5\u4ee3\u7801\u5305\u542b\u5728\u9879\u76ee\u6587\u4ef6\u4e2d. \u4e0a\u9762\u56fe\u5f62\u662f\u5728 Oracle \u7684 Java 7u3, server VM \u4e0b\u6d4b\u8bd5\u51fa\u7684\u7ed3\u679c\u3002<br\/><br\/>\n\u4e0b\u9762\u6211\u4eec\u81ea\u5df1\u6765\u505a\u4e2a\u6d4b\u8bd5\uff0c\u6d4b\u8bd5\u73af\u5883\u662f Mac OS X 10.8, 2.4G Core 2 Duo, 4G RAM, 64 \u4f4d JDK 1.6."},{"title":"Java \u4f7f\u7528 dom4j \u6765\u83b7\u5f97 XML \u6587\u6863\u7684 innerXML","link":"https:\/\/yanbin.blog\/java-dom4j-get-innerxml\/","pubDate":"Tue, 17 Jul 2012 07:27:01 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-dom4j-get-innerxml\/","description":"\n\u5728\u7f51\u9875\u7684 Document \u4e2d\u5982\u679c\u60f3\u8981\u83b7\u5f97\u67d0\u4e2a\u7ed3\u70b9\u7684 innerHTML \u5c31\u884c\uff0c\u800c\u5728 Java \u5904\u7406 XML \u6587\u6863\u65f6\u60f3\u8981\u83b7\u5f97\u67d0\u4e2a\u8282\u70b9\u7684\u7684 innerXML \u5c31\u6ca1\u90a3\u4e48\u7b80\u5355\u7684\uff0c\u6807\u51c6\u7684 org.w3c.Element \u548c\u00a0 org.w3c.Node \u5747\u672a\u63d0\u4f9b\u7c7b\u4f3c innerXML \u7684\u65b9\u6cd5\u3002<\/p>\n<br\/>\n\u5e78\u597d\uff0c\u6211\u4eec\u5e38\u7528\u7684 dom4j \u91cc\u7684 org.dom4j.Node \u6709\u4e00\u4e2a\u65b9\u6cd5\u662f String asXML()\uff0c\u4e0d\u8fc7\u5b83\u7684\u610f\u4e49\u76f8\u5f53\u4e8e\u662f outerXML\uff0c\u4e5f\u5c31\u662f\u8bf4\u5b83\u8fd4\u56de\u7684\u5185\u5bb9\u8fd8\u5305\u62ec\u8282\u70b9\u672c\u8eab\u3002<br\/><br\/>\n\u6bd4\u5982\u6709\u8fd9\u4e48\u5728\u4e2a XML \u6587\u6863\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-xml\" data-lang=\"xml\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"nt\">&lt;BookList&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"> description of book 1\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"> <span class=\"nt\">&lt;Book<\/span> <span class=\"na\">id=<\/span><span class=\"s\">&#34;1&#34;<\/span><span class=\"nt\">&gt;<\/span>Unmi<span class=\"nt\">&lt;\/Book&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"><span class=\"nt\">&lt;\/BookList&gt;<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u5728 Java \u4e2d\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u8fdb\u884c\u540e\u5411\u5f15\u7528($1,$2...)","link":"https:\/\/yanbin.blog\/java-regex-replace-string\/","pubDate":"Wed, 25 Apr 2012 06:02:32 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-regex-replace-string\/","description":"\n\u81ea JDK1.4 \u5f15\u5165\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u652f\u6301\u53ef\u79f0\u5f97\u4e0a\u662f\u6b21\u5927\u6539\u53d8\uff0c<del>\u53ef Java \u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u80fd\u529b\u8fd8\u662f\u5f88\u5f31\uff0c\u522b\u8bf4\u548c Perl \u6bd4\u4e86\uff0c\u5c31\u662f\u548c C# \u548c JavaScript \u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u6bd4\u8f83\u6765\u4e5f\u900a\u8272\u4e0d\u5c11<\/del>\uff0c\u4e0d\u8fc7\u73b0\u5728 JVM \u4e0a\u6709\u5176\u4ed6\u8bed\u8a00\u5bf9\u6b63\u5219\u8868\u8fbe\u5f0f\u6709\u6240\u589e\u5f3a\uff0c\u50cf Groovy, jRuby \u548c Scala\u3002<\/p>\n<br\/>\n<span style=\"color: #ff0000;\">[\u4fee\u6b63\u4e00\u4e0b]\u00a0\u7b2c\u4e00\u53e5\u8bdd\u7684\u8bf4\u6cd5\u662f\u6709\u8bef\u7684\uff0c\u5176\u5b9e\u00a0JDK\u00a0\u672c\u8eab\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u5c31\u652f\u6301\u66ff\u6362\u65f6\u7528 $1, $2\u00a0\u90a3\u6837\u7684\u540e\u5411\u5206\u7ec4\u5f15\u7528\uff0c\u4f8b\u5982\uff1a<\/span><br \/>\n<span style=\"color: #ff0000;\"> String s = \"abc def\".replaceAll(\"(\\\\w+)\\\\s+(\\\\w+)\", \"$2 $1\");\u00a0 \/\/s\u00a0\u5c31\u662f\u00a0 \"def\u00a0abc\"\uff0creplaceFirst\u00a0\u4e5f\u53ef\u4ee5\u7528 $1, $2\u00a0\u7684\u66ff\u6362\u3002<\/span><br\/><br\/>\n<del>\u6bd4\u5982\u5728 Java \u4e2d\u8981\u5b9e\u73b0\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u5206\u7ec4\uff0c\u540e\u5411\u5f15\u7528\u7684\u65b9\u5f0f\u8fdb\u884c\u66ff\u6362\u633a\u590d\u6742\u7684<\/del>\uff0c\u50cf JavaScript \u5b8c\u6210\u4e24\u4e2a\u5206\u7ec4\u7684\u8c03\u6362\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-html\" data-lang=\"html\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"p\">&lt;<\/span><span class=\"nt\">script<\/span><span class=\"p\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">src<\/span> <span class=\"o\">=<\/span> <span class=\"s2\">&#34;abc def&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"> <span class=\"kd\">var<\/span> <span class=\"nx\">des<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">src<\/span><span class=\"p\">.<\/span><span class=\"nx\">replace<\/span><span class=\"p\">(<\/span><span class=\"sr\">\/(\\w+)\\s+(\\w+)\/<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;$2 $1&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"> <span class=\"nb\">document<\/span><span class=\"p\">.<\/span><span class=\"nx\">write<\/span><span class=\"p\">(<\/span><span class=\"nx\">des<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\"> <span class=\"c1\">\/\/\u8f93\u51fa\u4e3a\uff1a def abc\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">6<\/span><span class=\"cl\"><span class=\"p\">&lt;\/<\/span><span class=\"nt\">script<\/span><span class=\"p\">&gt;<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u5728 Java \u4e2d\u53ef\u5f97\u7528\u4e0a Pattern, Matcher\uff0c\u8fd8\u8981 find()\/group() \u7b49\u64cd\u4f5c\uff0c\u4e8e\u662f\u6211\u5c31\u4f1a\u8003\u8651\u5728 Java \u4e2d\u5b8c\u6210\u7c7b\u4f3c\u7684\u529f\u80fd\u6709\u6ca1\u6709\u66f2\u7ebf\u7684\u65b9\u6cd5\uff0c\u6709\u7684\u3002\u4f60\u53ef\u4ee5\u8c03\u7528 JVM \u4e0a\u5176\u4ed6\u8bed\u8a00\u7684\u529f\u80fd\uff0c\u6211\u8fd9\u91cc\u7528\u5217\u4e86\u4e24\u79cd\u5b9e\u73b0\u65b9\u5f0f<br\/><br\/>\nJDK1.6 \u8d77\u53ef\u501f\u52a9 ScriptEngineManager \u4f7f\u7528 JavaScript \u76f8\u5e94\u7684\u51fd\u6570\uff0c\u9664\u6b64\u4e4b\u5916\u8fd8\u53ef\u7528\u7b2c\u4e09\u65b9\u7684\u5e93 <a href=\"http:\/\/jregex.sourceforge.net\/\" target=\"_blank\" rel=\"noopener\">JRegex<\/a>\uff0c\u5177\u4f53\u5b9e\u73b0\uff0c\u8bf7\u53c2\u89c1\u5982\u4e0b\u4ee3\u7801\uff0c\u8fd8\u5e26\u4e86\u6d4b\u8bd5\u7528\u4f8b\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kn\">package<\/span><span class=\"w\"> <\/span><span class=\"nn\">cc.unmi.utils<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"nn\">javax.script.Invocable<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"nn\">javax.script.ScriptEngine<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"nn\">javax.script.ScriptEngineManager<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"nn\">jregex.Pattern<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"nn\">jregex.Replacer<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">StringUtils<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"nf\">replaceStringByJS<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">src<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">jsRegex<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">replacement<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">ScriptEngineManager<\/span><span class=\"w\"> <\/span><span class=\"n\">manager<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ScriptEngineManager<\/span><span class=\"p\">();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">ScriptEngine<\/span><span class=\"w\"> <\/span><span class=\"n\">engine<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">manager<\/span><span class=\"p\">.<\/span><span class=\"na\">getEngineByName<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;JavaScript&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">script<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">14<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;function rep(target, regex, replacement){\\n&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">15<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34; var patt = new RegExp(regex,&#39;g&#39;);\\n&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">16<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34; return target.replace(patt, replacement);\\n&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">17<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;}&#34;<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">18<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">19<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">try<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">20<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">engine<\/span><span class=\"p\">.<\/span><span class=\"na\">eval<\/span><span class=\"p\">(<\/span><span class=\"n\">script<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">21<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">Invocable<\/span><span class=\"w\"> <\/span><span class=\"n\">inv<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">Invocable<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">engine<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">22<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">result<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">inv<\/span><span class=\"p\">.<\/span><span class=\"na\">invokeFunction<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;rep&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">src<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">jsRegex<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">23<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">replacement<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">24<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">result<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">25<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\"> <\/span><span class=\"k\">catch<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">Exception<\/span><span class=\"w\"> <\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">26<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">throw<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">RuntimeException<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">27<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">28<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">29<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">30<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"nf\">replaceStringByJRegex<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">src<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">regex<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">replacement<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">31<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">Pattern<\/span><span class=\"w\"> <\/span><span class=\"n\">pattern<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">Pattern<\/span><span class=\"p\">(<\/span><span class=\"n\">regex<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">32<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">Replacer<\/span><span class=\"w\"> <\/span><span class=\"n\">replacer<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">pattern<\/span><span class=\"p\">.<\/span><span class=\"na\">replacer<\/span><span class=\"p\">(<\/span><span class=\"n\">replacement<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">33<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">result<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">replacer<\/span><span class=\"p\">.<\/span><span class=\"na\">replace<\/span><span class=\"p\">(<\/span><span class=\"n\">src<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">34<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">result<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">35<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">36<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">37<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">38<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">link<\/span><span class=\"o\">=<\/span><span class=\"s\">&#34;&lt;link url=\\&#34;http:\/\/unmi.cc\\&#34; &gt;\\&#34;Home\\&#34;&lt;\/link&gt;&#34;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">39<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"o\">+<\/span><span class=\"s\">&#34;&lt;link url=\\&#34;http:\/\/unmi.cc\/tag\/java\\&#34; &gt;\\&#34;Java\\&#34;&lt;\/link&gt;&#34;<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">40<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">jsString<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">StringUtils<\/span><span class=\"p\">.<\/span><span class=\"na\">replaceStringByJS<\/span><span class=\"p\">(<\/span><span class=\"n\">link<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">41<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;&lt;link\\\\s+url=\\\\\\&#34;(.+?)\\\\\\&#34;.[^\/]*?&gt;\\\\\\&#34;(.+?)\\\\\\&#34;&lt;\/link&gt;&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;&lt;a href=\\&#34;$1\\&#34;&gt;$2&lt;\/a&gt;&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">42<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">jsString<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">43<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">44<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">jregexString<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">StringUtils<\/span><span class=\"p\">.<\/span><span class=\"na\">replaceStringByJRegex<\/span><span class=\"p\">(<\/span><span class=\"n\">link<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">45<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"s\">&#34;&lt;link\\\\s+url=\\\\\\&#34;(.+?)\\\\\\&#34;.[^\/]*?&gt;\\\\\\&#34;(.+?)\\\\\\&#34;&lt;\/link&gt;&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;&lt;a href=\\&#34;$1\\&#34;&gt;$2&lt;\/a&gt;&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">46<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">jregexString<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">47<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">48<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">49<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"cm\">\/*\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">50<\/span><span class=\"cl\"><span class=\"cm\"> * \u7a0b\u5e8f\u8f93\u51fa\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">51<\/span><span class=\"cl\"><span class=\"cm\"> * &lt;a href=&#34;http:\/\/unmi.cc&#34;&gt;Home&lt;\/a&gt;&lt;a href=&#34;http:\/\/unmi.cc\/tag\/java&#34;&gt;Java&lt;\/a&gt;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">52<\/span><span class=\"cl\"><span class=\"cm\"> * &lt;a href=&#34;http:\/\/unmi.cc&#34;&gt;Home&lt;\/a&gt;&lt;a href=&#34;http:\/\/unmi.cc\/tag\/java&#34;&gt;Java&lt;\/a&gt;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">53<\/span><span class=\"cl\"><span class=\"cm\"> *\/<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">54<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u8d77\u521d\u6211\u662f\u7528\u7684\u7b2c\u4e00\u79cd\u65b9\u6cd5\uff0c\u540e\u6765\u627e\u5230\u4e86\u7b2c\u4e8c\u79cd\u65b9\u5f0f\uff0c\u611f\u89c9\u7528 JRegex \u66f4\u4f18\u96c5\u4e9b\u3002"},{"title":"\u6709\u4e00\u79cd\u65b9\u6cd5\u7ed9 XSLT \u4e2d\u53d8\u91cf\u8fdb\u884c\u8d4b\u503c\uff0c\u662f\u4fdd\u6301\u72b6\u6001\u7684\u90a3\u79cd","link":"https:\/\/yanbin.blog\/xslt-assign-variables\/","pubDate":"Tue, 03 May 2011 13:55:11 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/xslt-assign-variables\/","description":"\n\u5728 XSLT \u4e2d\u58f0\u660e\u53d8\u91cf\u53ef\u4ee5\u7528 &lt;xsl:variable&gt; \u548c &lt;xsl:param&gt;\uff0c\u5b83\u4eec\u7684\u533a\u522b\u662f\u53ef\u4ee5\u901a\u8fc7 &lt;xsl:param&gt; \u4ece\u5916\u90e8\u5411 XSLT \u6587\u4ef6\u4f20\u53c2\u6570\uff0c\u9664\u6b64\u4e4b\u5916\uff0c\u5728 xslt \u5185\u90e8\u4f7f\u7528\u65f6\u8fd9\u4e24\u8005\u7684\u7528\u6cd5\u57fa\u672c\u662f\u4e00\u6837\u7684\u3002\u4e0b\u9762\u53ea\u4ee5 &lt;xsl:variable&gt; \u4e3a\u4f8b\u5b50\uff0c\u4f8b\u5b50\u4e2d\u7684 xsl:variable \u66ff\u6362\u6210 xsl:param \u4e5f\u662f\u80fd run \u7684\u3002<\/p>\n<br\/>\n&lt;xsl:variable&gt; \u7684\u57fa\u672c\u7528\u6cd5\u662f\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-xml\" data-lang=\"xml\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"nt\">&lt;xsl:variable<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;username&#34;<\/span> <span class=\"na\">select=<\/span><span class=\"s\">&#34;&#39;Initial&#39;&#34;<\/span><span class=\"nt\">\/&gt;<\/span> <span class=\"c\">&lt;!-- \u4e0d\u5199 select \u5219\u9ed8\u8ba4\u4e3a &#39;&#39; --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"nt\">&lt;xsl:variable<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;username&#34;<\/span> <span class=\"na\">select=<\/span><span class=\"s\">&#34;&#39;New Value&#39;&#34;<\/span><span class=\"nt\">\/&gt;<\/span> <span class=\"c\">&lt;!-- \u8d4b\u503c --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\"><span class=\"nt\">&lt;xsl:value-of<\/span> <span class=\"na\">select=<\/span><span class=\"s\">&#34;$username&#34;<\/span><span class=\"nt\">\/&gt;<\/span> <span class=\"c\">&lt;!-- \u663e\u793a\u53d8\u91cf\u503c\uff0c\u53d8\u91cf\u540d\u524d\u52a0\u4e0a $ \u7b26\u53f7 --&gt;<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u5e94\u7528 JAXB \u628a XML \u8f6c\u6362\u6210\u76f8\u5e94\u7684 JavaBean","link":"https:\/\/yanbin.blog\/jaxb-xml-javabean-start\/","pubDate":"Thu, 21 Apr 2011 07:23:15 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/jaxb-xml-javabean-start\/","description":"\n\u8de8\u7cfb\u7edf\u7684\u8c03\u7528\u76ee\u524d\u65e0\u7591\u662f WebService \u7684\u5929\u4e0b\uff0c\u6307\u7684\u662f\u901a\u8fc7 HTTP \u8bf7\u6c42\u65b9\u5f0f\u83b7\u5f97 XML \u6216 JSON \u6570\u636e\u7684\u65b9\u5f0f\uff0cRESTFul \u4e5f\u5f97\u5230\u4e86\u5f88\u597d\u7684\u5e94\u7528\u3002\u89c4\u8303\u610f\u4e49\u4e0a\u7684 Soap \u8c03\u7528\u4e0d\u77e5\u9053\u8fd8\u4e0d\u591a\u4e0d\u591a\uff0c\u53cd\u6b63\u5f53\u5e74\u7528\u8fc7\u7684 Corba \u9c9c\u6709\u8033\u95fb\u4e86\uff0c\u5c31\u50cf\u5f88\u591a\u4eba\u5bf9 EJB2 \u4e0d\u4f1a\u6709\u6982\u5ff5\u4e00\u6837\u3002<\/p>\n<br\/>\nJava \u5728\u8c03\u7528 WebService \u83b7\u5f97\u4e86 XML \u4e4b\u540e\uff0c\u63a5\u4e0b\u6765\u4e00\u79cd\u5e38\u89c1\u7684\u5904\u7406\u65b9\u5f0f\u5c31\u662f\u628a\u5b83\u8f6c\u6362\u6210\u76f8\u5e94\u7684 JavaBean\uff0c\u518d\u4e22\u7ed9\u5176\u4ed6\u7ec4\u4ef6\u50cf Jsp \u6807\u7b7e\uff0cFreeMarker \u7b49\u53bb\u5c31\u5f88\u6d41\u7545\u4e86\u3002\u5173\u4e8e XML \u4e0e JavaBean \u4e92\u76f8\u8f6c\u6362\u6709\u4e24\u4e2a\u64cd\u4f5c\u53eb\u505a\uff1aMarshaller \u548c Unmarshaller\uff0c\u8fd8\u6ca1\u89c1\u4e00\u4e2a\u6743\u5a01\u7684\u7ffb\u8bd1\uff0c\u5927\u6982\u5c31\u662f\u7f16\u7ec4\u4e0e\u53cd\u7f16\u7ec4\uff0c\u610f\u4e49\u5982\u540c\u5e8f\u5217\u5316\u4e0e\u53cd\u5e8f\u5217\u5316\u3002\u4e5f\u5c31\u662f\u7531 JavaBean \u5230 XML \u53eb\u505a Marshal\uff0c\u7531 XML \u5230 Java \u53eb\u505a Unmarshal\u3002<br\/><br\/>\n\u901a\u5e38\u4ece XML \u5230 JavaBean \u7684\u8f6c\u6362\u673a\u4f1a\u5927\u7684\u591a\uff0c\u6240\u4ee5\u6211\u4e3b\u8981\u4e5f\u662f\u7814\u7a76\u4e86\u4e0b\u5982\u4f55\u628a XML \u6620\u5c04\u6210 JavaBean\uff0c\u867d\u7136\u73b0\u5728\u7684\u5de5\u5177\u4e00\u6837\u4e5f\u90fd\u652f\u6301\u8fd9\u4e24\u4e2a\u65b9\u5411\u7684\u8f6c\u6362\u3002\u6709\u8bb8\u591a\u7ec4\u4ef6\u53ef\u4ee5\u505a\u5230\uff0c\u50cf <a href=\"http:\/\/www.oracle.com\/technetwork\/articles\/javase\/index-140168.html\" target=\"_blank\" rel=\"noopener\">JAXB<\/a>(Java Architecture for XML Binding)\u3001"},{"title":"Java \u4f55\u65e5\u80fd\u968f\u610f\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u5bf9\u8c61\u88c5\u7bb1","link":"https:\/\/yanbin.blog\/java-how-to-implements-custom-autobox\/","pubDate":"Tue, 11 Jan 2011 06:31:47 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-how-to-implements-custom-autobox\/","description":"\nJava \u6b65\u5165\u5230 Tiger \u540e\u589e\u52a0\u4e86\u81ea\u52a8\u62c6\u88c5\u7bb1\u7279\u6027\uff0c\u6784\u9020 Integer \u4e0d\u7528 Integer i = new Integer(1); \u6216\u8005 Integer i = Integer.valueOf(1); \u53ea\u8981\u5199\u6210 Integer i=1 \u5c31\u884c\u4e86\u3002Java \u7684\u81ea\u52a8\u62c6\u88c5\u7bb1\u53ea\u662f\u9488\u5bf9\u57fa\u672c\u7c7b\u578b\u4e0e\u5176\u5c01\u88c5\u7c7b\u578b\u4e4b\u95f4\u7684\u8f6c\u6362\uff0c\u65e0\u6cd5\u81ea\u5b9a\u4e49\u7c7b\u4f3c\u7684\u884c\u4e3a\uff0c\u6bd4\u5982\u60f3\u5b9e\u73b0\u67d0\u4e2a\u81ea\u5b9a\u4e49\u7c7b Item\uff0c\u80fd\u591f\u901a\u8fc7 Item i = 1; \u5c31\u5b8c\u6210\u4ece\u6574\u5f62 1 \u5230\u81ea\u5b9a\u4e49\u7c7b\u7684\u81ea\u52a8\u88c5\u7bb1\u529f\u80fd\u3002<\/p>\n<br\/>\nJava \u5728\u76ee\u524d\u8fd8\u662f\u6ca1\u529e\u6cd5\u505a\u5230\u7684\uff0c\u5f53\u7136\u4e5f\u662f\u6211\u81ea\u5df1\u7684\u4e00\u4e2a\u731c\u60f3\u3002Java \u7684\u81ea\u52a8\u62c6\u88c5\u7bb1\u4e0e C# \u76f8\u6bd4\u4e5f\u662f\u8981\u5f31\u4e9b\uff0cC# \u4e2d int\u00a0\u4ec5\u4ec5\u662f Int32 \u8fd9\u6837\u7684\u7c7b\u578b\u7684\u522b\u540d\uff0c\u6240\u4ee5\u5b83\u4eec\u4e5f\u662f\u7b49\u6548\u7684\uff0c\u58f0\u660e int i=0; \u4f60\u5c31\u53ef\u4ee5\u547c\u53eb i.ToString() \u65b9\u6cd5\u4e86\u3002\u53ef\u4ee5\u8bf4 C# \u6bd4 Java \u66f4\u5bf9\u8c61\u5316\u4e86\u3002<br\/><br\/>\n\u73b0\u5728\u6765\u770b\u4e0b C++ \u662f\u600e\u4e48\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7c7b\u7684 Item i = 10; \u8fd9\u6837\u7684\u58f0\u660e\u7684\uff0c\u89c1\u4ee3\u7801\uff1a"},{"title":"Java \u7684\u65b9\u6cd5\u7b7e\u540d\u4e0e\u5b57\u6bb5\u7c7b\u578b\u8868\u793a-[Ljava.lang.String;","link":"https:\/\/yanbin.blog\/java-signatures-data-types\/","pubDate":"Mon, 10 Jan 2011 11:19:39 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-signatures-data-types\/","description":"\n\u6211\u4eec\u4ec0\u4e48\u65f6\u5019\u4f1a\u63a5\u89e6\u5230 Java \u7684\u65b9\u6cd5\u7b7e\u540d\u5462\uff1f\u5728\u8fdb\u884c JNI \u8c03\u7528\u65f6\uff0c\u8fd8\u6709\u5728\u770b\u65b9\u6cd5\u91cd\u8f7d\u65f6\u3002\u91cd\u8f7d\u7684\u65b9\u6cd5\u662f\u6709\u4e0d\u540c\u7684\u65b9\u6cd5\u7b7e\u540d\u7684\uff0c\u800c\u662f\u4e0d\u533a\u5206\u8fd4\u56de\u503c\uff0c\u800c\u5b9e\u9645\u65b9\u6cd5\u7b7e\u540d\u8fd8\u63c9\u5165\u4e86\u8fd4\u56de\u503c\u7c7b\u578b\u7684\uff0c\u8fd8\u6709\u5c31\u662f javap -s \u67e5\u770b\u65b9\u6cd5\u7b7e\u540d\u65f6\uff0c\u5982 javap -s java.util.Date\u3002<br\/>\n<br\/>\n\u770b\u6765\u65b9\u6cd5\u7b7e\u540d\u4e0e\u6211\u4eec\u5b9e\u9645\u5de5\u4f5c\u7684\u5173\u7cfb\u8fd8\u771f\u7684\u4e0d\u5927\u3002\u5012\u662f\u6709\u6b21\u9047\u7740\u4e86\uff0c\u4e8b\u51fa\u4e8e Struts2 \u5e94\u7528\u4e2d\u63d0\u4ea4\u8868\u5355\u65f6\u62a5\u51fa\u4e86\u4e0b\u9762\u7684\u9519\u8bef\uff1a<br\/>\n<br\/>\n00:43:59.716 [http-8080-4] WARN\u00a0 com.opensymphony.xwork2.ognl.OgnlValueStack - Error setting expression 'version' with value <span style=\"color: #993300;\">'[Ljava.lang.String;@e18a9a'<br\/>\n<\/span>ognl.MethodFailedException: Method \"<span style=\"color: #993300;\">setVersion<\/span>\" failed for object <a href=\"mailto:cc.unmi.model.Post@ed0cd7\">cc.unmi.model.Post@ed0cd7<\/a><br\/>\n\u00a0at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1285) ~[ognl-3.0.jar:na]<br\/>\n\u00a0at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474) ~[ognl-3.0.jar:na]<br\/>\n\u00a0at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85"},{"title":"XSLT \u8c03\u7528 Java \u7684\u7c7b\u65b9\u6cd5","link":"https:\/\/yanbin.blog\/xslt-call-java-method\/","pubDate":"Mon, 10 Jan 2011 05:30:04 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/xslt-call-java-method\/","description":"\n\u66fe\u7ecf\u6709\u4e24\u7bc7\u4ecb\u7ecd\u4e86\u5728 XSLT \u91cc\u5982\u4f55\u8c03\u7528 C# \u6216 Js \u5199\u7684\u51fd\u6570\uff0c\u5176\u4e2d\u7528\u5230\u4e86\u4e0e\u5fae\u8f6f\u76f8\u5173\u7684\uff0c\u50cf\uff1axmlns:msxsl=\"urn:schemas-microsoft-com:xslt\",\u00a0 &lt;msxsl:script implements-prefix=\"unmifn\" language=\"C#\"&gt;\u3002\u56de\u5230\u4e86 Java \u73af\u5883\u540c\u6837\u5f97\u8003\u8651\u5728 XSLT \u4e2d\u5982\u4f55\u8c03\u7528 Java \u7684\u65b9\u6cd5\uff0c\u6bd5\u7adf\u5728 XSLT \u5916\u5904\u7406\u5185\u5bb9\u8981\u65b9\u4fbf\u8bb8\u591a\u3002<\/p>\n<br\/>\n\u53c2\u8003\u4e86\u4e00\u4e9b\u7f51\u4e0a\u7684\u6587\u7ae0\uff0c\u5927\u591a\u8bb2\u7684\u4e0d\u600e\u4e48\u597d\u7406\u89e3\u4e0e\u5e94\u7528\uff0c\u672a\u5c1d\u8bd5\u4e4b\u524d\u4e0d\u514d\u8ba9\u4eba\u60f3\u7f29\u624b\u3002\u5176\u5b9e\u505a\u8d77\u6765\u53ef\u4ee5\u66f4\u7b80\u5355\u4e9b\uff0c\u4e24\u6b65\u800c\u5df2\uff1a<br\/><br\/>\n1\uff09 \u58f0\u660e\u65f6\u6307\u5b9a\u5305\u540d\u548c\u51fd\u6570\u524d\u7f00<br \/>\n2\uff09 \u8c03\u7528\u65f6\u52a0\u4e0a\u524d\u7f00\u548c\u7c7b\u540d\u53ca\u9759\u6001\u65b9\u6cd5\uff0c\u4f20\u5165\u53c2\u6570<br\/><br\/>\n\u8981\u60f3\u518d\u6df1\u5165\u4e9b\uff0c\u53ef\u6ce8\u610f\u6709\u65f6\u5019 Java \u51fd\u6570\u5e94\u8be5\u4f20\u5165\u7684\u53c2\u6570\u7c7b\u578b\u662f\u4ec0\u4e48\uff1f\u662f\u5426\u80fd\u8c03\u7528\u975e\u9759\u6001\u65b9\u6cd5\uff0cpublic \u662f\u6700\u57fa\u672c\u7684\u8981\u6c42\uff0c\u4ee5\u53ca\u901a\u8fc7\u4ec0\u4e48\u7ec4\u4ef6\u6765\u8c03\u7528\u7684\u7b49\u7b49\u3002"},{"title":"\u5982\u4f55\u8ba9 Map \u4e2d\u7684\u503c\u6309\u653e\u5165\u987a\u5e8f\u8f93\u51fa","link":"https:\/\/yanbin.blog\/map-sorted-output-by-input\/","pubDate":"Tue, 07 Dec 2010 07:20:52 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/map-sorted-output-by-input\/","description":"\n<span style=\"color: #ff0000;\">\u7b14\u8005\u81f4: \u5f53\u4f60\u6253\u5f00\u8fd9\u4e2a\u9875\u9762\u7684\u65f6\u5019, \u57fa\u672c\u5c31\u65e0\u9700\u518d\u770b\u540e\u9762\u7684\u5185\u5bb9\u4e86, \u56e0\u4e3a\u76f4\u63a5\u7528 <code>LinkedHashMap<\/code>\u00a0\u5c31\u80fd\u6ee1\u8db3\u60a8\u7684\u9700\u6c42. \u00a0\u6587\u4e2d\u5bf9\u8fd9\u4e2a\u95ee\u9898\u7684\u63a2\u7d22\u53ea\u662f\u4e0d\u77e5\u9053\u522b\u4eba\u65e9\u5df2\u8fc7\u6cb3\u4e86, \u4ecd\u7136\u5728\u6cb3\u91cc\u6478\u7740\u77f3\u5934. <code>LinkedHashMap<\/code>\u00a0\u662f JDK 1.4 \u52a0\u8fdb\u6765\u7684, \u4e4b\u6240\u4ee5\u6709 <code>apache-commons ListOrderedMap<\/code>\u00a0\u5927\u7ea6\u662f\u56e0\u4e3a\u5b83\u6700\u65e9\u6240\u5904\u7684\u662f JDK 1.4 \u4e4b\u524d\u7684\u5e74\u4ee3.<\/span><\/p>\n<hr \/><br\/>\n\u5728\u4f7f\u7528 Java \u7684 Hashmap \u65f6\uff0c\u8f93\u51fa Map \u4e2d\u7684\u503c\u5982\u4f55\u4f7f\u4e4b\u6309\u653e\u5165\u7684\u987a\u5e8f\u8f93\u51fa\u6765\uff0c\u50cf List\u00a0\u90a3\u6837\u4fdd\u6301\u987a\u5e8f\u3002\u8fd9\u91cc\u7684\u987a\u5e8f\u4e0d\u662f\u8bf4\u5bf9\u96c6\u5408\u4e2d\u7684\u6570\u636e\u8fdb\u884c\u7684\u6392\u5e8f\uff0c\u8981\u662f\u7684\u8bdd\u7528 TreeMap\uff0c\u50cf TreeSet \u4e00\u6837\u5c31\u884c\u3002 \u6211\u4eec\u770b\u4e2a\u4f8b\u5b50\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"n\">Map<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">map<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">HashMap<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">String<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">Integer<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"><span class=\"n\">map<\/span><span class=\"p\">.<\/span><span class=\"na\">put<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;a&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">12<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"><span class=\"n\">map<\/span><span class=\"p\">.<\/span><span class=\"na\">put<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;b&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">11<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"><span class=\"n\">map<\/span><span class=\"p\">.<\/span><span class=\"na\">put<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;c&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">3<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">6<\/span><span class=\"cl\"><span class=\"k\">for<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">key<\/span><span class=\"w\"> <\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"n\">map<\/span><span class=\"p\">.<\/span><span class=\"na\">keySet<\/span><span class=\"p\">())<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">7<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">map<\/span><span class=\"p\">.<\/span><span class=\"na\">get<\/span><span class=\"p\">(<\/span><span class=\"n\">key<\/span><span class=\"p\">));<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">8<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u7406\u89e3 Java \u6b63\u5219\u8868\u8fbe\u5f0f\u602a\u5f02\u7684 \\\\ \u548c \\\\\\\\\uff0c\u8ba9\u60a8\u89c1\u602a\u4e0d\u602a","link":"https:\/\/yanbin.blog\/understand-java-regex-backslash\/","pubDate":"Mon, 29 Nov 2010 06:40:57 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-regex-backslash\/","description":"\n<p>Java \u8bed\u8a00\u91cc\u7684\u51e0\u5927\u53d8\u9769\uff0c\u4e00\u4e3a jdk1.4 \u5f15\u5165\u7684\u6b63\u5219\u8868\u8fbe\u5f0f\uff0cjdk1.5 \u5f15\u5165\u7684\u6cdb\u578b\u3002\u6ca1\u6709\u6cdb\u578b\u4e4b\u524d\u6709\u4e0d\u5c11\u4eba\u66fe\u60f3\u65b9\u8bbe\u6cd5\u4ece\u7f16\u8bd1\u5668\u5165\u624b\u8ba9 Java \u652f\u6301\u6cdb\u578b\u3002\u8bf4\u5230\u6cdb\u578b\u00a0 Perl \u65e0\u7591\u662f\u8be5\u65b9\u9762\u7684\u4f7c\u4f7c\u8005\uff0c\u867d\u7136\u6211\u4eec\u4e0d\u8981\u6c42 Java \u7684\u6b63\u5219\u8868\u5f0f\u80fd\u50cf Perl \u90a3\u6837\u53ef\u4ee5\u7528\u6765\u5199\u8bd7\uff0c\u4f46\u81f3\u5c11\u80fd\u6709 JavaScript \u597d\u7528\u4e9b\uff0c\u53ef\u662f\u8fd8\u4e0d\u5982\u3002JavaScript \u91cc \/\/ \u4e24\u659c\u7ebf\u4e00\u6846\u5c31\u662f\u4e00\u4e2a\u6a21\u5f0f\uff0c\u5206\u7ec4\u548c\u540e\u5411\u5f15\u7528\u66f4\u65b9\u4fbf\uff0c\u5f53\u7136\u524d\u9762\u90a3\u4e24\u5bb6\u4f19\u662f\u52a8\u6001\u7684\uff0c\u4e0d\u592a\u597d\u6bd4\u3002<\/p>\n<p>\u590d\u6742\u7684\u7528\u6cd5\u4e0d\u8bf4\uff0c\u4e14\u8bf4 Java \u7684\u6b63\u5219\u8868\u8fbe\u5f0f\u5728\u5339\u914d\u70b9(.) \u00a0\u548c\u659c\u6760(\\)\uff0c\u8868\u8fbe\u5f0f\u8981\u5206\u522b\u5199\u4f5c \\\\. \u548c <a>\\\\\\\\<\/a>\uff0c\u96be\u770b\u4e9b\uff0c\u4e0d\u597d\u7406\u89e3\u3002\u5e78\u597d\u8fd8\u6709\u4e9b\u4eba\u8bb0\u4f4f\u4e86\uff0c\u5339\u914d\u70b9(.) \u6216\u00a0\u00a0{\u3001[\u3001(\u3001?\u3001$\u3001^ \u548c * \u8fd9\u4e9b\u7279\u6b8a\u7b26\u53f7\u8981\u8981\u524d\u52a0\u53cc\u659c\u6846\uff0c\u5339\u914d \\ \u65f6\u8981\u7528\u56db\u659c\u6760\uff0c\u8fd9\u786e\u5b9e\u80fd\u8ba9\u4f60\u5305\u8d70\u5929\u6daf\u7684\u3002\u90a3\u4e48\u4e3a\u4ec0\u4e48\u662f\u8fd9\u6837\u5462\uff0c\u4e0d\u662f\u4e00\u4e2a\u659c\u6760\u3001\u4e09\u4e2a\u6216\u66f4\u591a\u5462\uff0c\u6240\u4ee5\u77e5\u5176\u7136\u8fd8\u8981\u77e5\u5176\u6240\u4ee5\u7136\uff0c\u8fd9\u6837\u624d\u80fd\u6bcf\u6b21\u5fc3\u4e2d\u6709\u6570\uff0c\u65b9\u80fd\u4ee5\u4e00\u53d8\u5e94\u4e07\u53d8\u3002"},{"title":"\u5982\u4f55\u5728 js \u4ee3\u7801\u4e2d\u4f7f\u7528 jsp \u6807\u7b7e\u6216 Java \u4ee3\u7801","link":"https:\/\/yanbin.blog\/use-jsp-tag-in-js\/","pubDate":"Wed, 17 Nov 2010 06:01:04 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/use-jsp-tag-in-js\/","description":"\nJSP \u6807\u7b7e\u8fd8\u662f\u5f88\u65b9\u4fbf\u7684\uff0c\u6bd4\u5982 Struts\u3001Spring \u7b49\u63d0\u4f9b\u7ed9\u6211\u4eec\u7684 JSP \u6807\u7b7e\uff0c\u53ef\u4ee5\u7528\u5b83\u4eec\u6765\u83b7\u53d6\u53d8\u91cf\u6216\u8fdb\u884c\u4e00\u4e9b\u8ba1\u7b97\u3002\u6bd4\u5982 struts2 \u7684 &lt;s:url value=\"\/admin\/unmi.action\"\/&gt; \u4f1a\u4e3a\u6211\u4eec\u81ea\u52a8\u5728\u524d\u9762\u9644\u52a0\u4e0a\u5e94\u7528\u4e0a\u4e0b\u6587\uff0c\u5982\u5b9e\u9645\u4f1a\u751f\u6210 \/testsite\/admin\/unmi.action\u3002\u8fd8\u6709\u66f4\u591a\u66f4\u65b9\u4fbf\u7684\u6807\u7b7e\u4f7f\u7528\uff0c\u6bd4\u5982\u7528\u6807\u7b7e\u83b7\u53d6\u5230 session \u6216\u8bf7\u6c42\u4e2d\u7684\u6570\u636e\u4f5c\u4e3a js \u7684\u53d8\u91cf\u7b49\u3002\u00a0<\/p>\n<br\/>\n\u5f15\u7533\u6b64\u8bdd\u9898\u7684\uff0c\u5176\u5b9e\u4e0d\u5149\u662f\u5728 JS \u4e2d\u4f7f\u7528 JSP \u6807\u7b7e\uff0c\u53ef\u7528 JSP \u6807\u7b7e\u7684\u5730\u65b9\u5f53\u7136\u53ef\u4ee5\u76f4\u63a5\u5199 Java \u4ee3\u7801\uff0c\u5373 ScriptLet \u4ee3\u7801\u3002"},{"title":"\u6b65\u6b65\u7406\u89e3 JAVA \u6cdb\u578b\u7f16\u7a0b(\u4e09)","link":"https:\/\/yanbin.blog\/understand-java-generic-3\/","pubDate":"Fri, 16 Apr 2010 04:53:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-generic-3\/","description":"\n\u524d\u9762\u4ecb\u7ecd\u7684\u65e0\u8bba\u662f\u6cdb\u578b\u7c7b\u8fd8\u662f\u6cdb\u578b\u65b9\u6cd5\uff0c\u57fa\u672c\u4e0a\u90fd\u662f\u628a\u5b9a\u4e49\u7684\u7c7b\u578b\u53c2\u6570\u4f5c\u4e3a\u4e00\u4e2a\u6574\u4f53\u6765\u64cd\u4f5c\uff0c\u653e\u5230\u6570\u7ec4\u6216\u53d6\u51fa\u6765\uff0c\u9876\u591a\u5c31\u662f\u8c03\u7528\u4e86\u4e00\u4e0b hashCode() \u65b9\u6cd5\uff0c\u56e0\u4e3a\u8fd9\u662f Java \u7684\u6839\u5bf9\u8c61\u62e5\u6709\u7684\u65b9\u6cd5\u3002\u6bd4\u5982\u8bf4\u4e00\u4e2a\u6cdb\u578b\u6570\u7ec4\uff0c\u8981\u5f97\u5230\u5176\u4e2d\u7684\u6700\u5c0f\u5143\u7d20\uff1a<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kn\">package<\/span><span class=\"w\"> <\/span><span class=\"nn\">com.unmi<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"cm\"> * \u6cdb\u578b\uff0c\u7c7b\u578b\u53d8\u91cf\u7684\u9650\u5b9a\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"cm\"> * @author Unmi\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"cm\"> *\/<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">ArrayAlg<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">T<\/span><span class=\"w\"> <\/span><span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">T<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"p\">){<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">a<\/span><span class=\"o\">==<\/span><span class=\"kc\">null<\/span><span class=\"w\"> <\/span><span class=\"o\">||<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"p\">.<\/span><span class=\"na\">length<\/span><span class=\"w\"> <\/span><span class=\"o\">==<\/span><span class=\"n\">0<\/span><span class=\"p\">){<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"kc\">null<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">T<\/span><span class=\"w\"> <\/span><span class=\"n\">smallest<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"o\">[<\/span><span class=\"n\">0<\/span><span class=\"o\">]<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">14<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">for<\/span><span class=\"p\">(<\/span><span class=\"kt\">int<\/span><span class=\"w\"> <\/span><span class=\"n\">i<\/span><span class=\"o\">=<\/span><span class=\"n\">0<\/span><span class=\"p\">;<\/span><span class=\"n\">i<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">a<\/span><span class=\"p\">.<\/span><span class=\"na\">length<\/span><span class=\"p\">;<\/span><span class=\"n\">i<\/span><span class=\"o\">++<\/span><span class=\"p\">){<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">15<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">if<\/span><span class=\"p\">(<\/span><span class=\"n\">smallest<\/span><span class=\"p\">.<\/span><span class=\"na\">compareTo<\/span><span class=\"p\">(<\/span><span class=\"n\">a<\/span><span class=\"o\">[<\/span><span class=\"n\">i<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span><span class=\"o\">&gt;<\/span><span class=\"n\">0<\/span><span class=\"p\">){<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">16<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">smallest<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"o\">[<\/span><span class=\"n\">i<\/span><span class=\"o\">]<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">17<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">18<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">19<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">20<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">smallest<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">21<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">22<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u6b65\u6b65\u7406\u89e3 JAVA \u6cdb\u578b\u7f16\u7a0b(\u4e8c)","link":"https:\/\/yanbin.blog\/understand-java-generic-2\/","pubDate":"Thu, 15 Apr 2010 23:56:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-generic-2\/","description":"\n\u524d\u9762\u8bb2\u4e86\u6cdb\u578b\u7c7b\u7684\u5b9a\u4e49\uff0c\u4f60\u4e5f\u53ef\u4ee5\u5728\u4e00\u4e2a\u666e\u901a\u7c7b\u4e2d\u5355\u5355\u5b9a\u4e49\u4e00\u4e2a\u6cdb\u578b\u65b9\u6cd5\u3002\u4e5f\u5c31\u662f\u8bf4\u7c7b\u80fd\u591f\u5e26\u4e2a\u7c7b\u578b\u53c2\u6570\uff0c\u65b9\u6cd5\u4e5f\u53ef\u4ee5\u5e26\u7c7b\u578b\u53c2\u6570\u7684\u3002\u8fd8\u662f\u6765\u770b\u4e2a\u4f8b\u5b50(\u5305\u62ec\u5982\u4f55\u5e94\u7528)\uff0c\u4e00\u4e2a\u83b7\u5f97\u6570\u7ec4\u4e2d\u95f4\u5143\u7d20\u7684\u65b9\u6cd5\uff0c\u56e0\u4e3a\u6570\u7ec4\u4e2d\u5b58\u50a8\u5143\u7d20\u7684\u7c7b\u578b\u662f\u4e0d\u5b9a\u7684\uff0c\u6240\u4ee5\u628a\u8be5\u65b9\u6cd5\u5b9a\u4e49\u6210\u6cdb\u578b\u7684\u3002<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kn\">package<\/span><span class=\"w\"> <\/span><span class=\"nn\">com.unmi<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"cm\"> * \u6cdb\u578b\u65b9\u6cd5\u793a\u4f8b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"cm\"> * @author Unmi\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"cm\"> *\/<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">ArrayAlg<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u8fd9\u4e2a\u5c31\u662f\u5728\u666e\u901a\u7c7b ArrayAlg \u4e2d\u5b9a\u4e49\u7684\u6cdb\u578b\u65b9\u6cd5<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"o\">&lt;<\/span><span class=\"n\">T<\/span><span class=\"o\">&gt;<\/span><span class=\"w\"> <\/span><span class=\"n\">T<\/span><span class=\"w\"> <\/span><span class=\"nf\">getMiddle<\/span><span class=\"p\">(<\/span><span class=\"n\">T<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"p\">){<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">return<\/span><span class=\"w\"> <\/span><span class=\"n\">a<\/span><span class=\"o\">[<\/span><span class=\"n\">a<\/span><span class=\"p\">.<\/span><span class=\"na\">length<\/span><span class=\"o\">\/<\/span><span class=\"n\">2<\/span><span class=\"o\">]<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">14<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">15<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">names<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"s\">&#34;Fantasia&#34;<\/span><span class=\"p\">,<\/span><span class=\"s\">&#34;Unmi&#34;<\/span><span class=\"p\">,<\/span><span class=\"s\">&#34;Kypfos&#34;<\/span><span class=\"p\">};<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">16<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"c1\">\/\/String middle = ArrayAlg.&lt;String&gt;getMiddle(names);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">17<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">18<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u4e0a\u9762\u90a3\u6837\u5199\u662f\u53ef\u4ee5\uff0c\u7f16\u8bd1\u5668\u53ef\u63a8\u65ad\u51fa\u8981\u8c03\u7528\u7684\u65b9\u6cd5\uff0c\u6240\u4ee5\u7701\u53bb&lt;String&gt;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">19<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">String<\/span><span class=\"w\"> <\/span><span class=\"n\">middle<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">ArrayAlg<\/span><span class=\"p\">.<\/span><span class=\"na\">getMiddle<\/span><span class=\"p\">(<\/span><span class=\"n\">names<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">20<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"n\">middle<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">21<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">22<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u6b65\u6b65\u7406\u89e3 JAVA \u6cdb\u578b\u7f16\u7a0b(\u4e00)","link":"https:\/\/yanbin.blog\/understand-java-generic-1\/","pubDate":"Thu, 15 Apr 2010 12:13:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-generic-1\/","description":"\nJDK 1.5 \u76f8\u5bf9\u4e8e JDK 1.4 \u6765\u8bf4\u53d8\u5316\u6700\u5927\u7684\u90e8\u5206\u5c31\u662f\u6cdb\u578b\uff0c\u751a\u81f3\u53ef\u4ee5\u8bf4\u81ea Java 1.0 \u53d1\u5e03\u4ee5\u6765\u4e5f\u662f\u6700\u5927\u7684\u4e00\u6b21\u8bed\u8a00\u53d8\u5316\uff0c\u56e0\u4e3a\u8981\u6d89\u53ca\u5230\u7f16\u8bd1\u5668\u7684\u5927\u6539\u52a8\u3002\u5f88\u65e9\u7684\u65f6\u5019\u5927\u5bb6\u5bf9\u6cdb\u578b\u7684\u547c\u58f0\u5f88\u5927\uff0c\u6b63\u5982 C++ \u7684\u6a21\u677f\uff0cC# \u7684\u6cdb\u578b\u786e\u5b9e\u662f\u4e2a\u503c\u5f97\u501f\u9274\u7684\u597d\u7279\u6027\u3002JDK1.5 \u8fd9\u524d\uff0c\u5f88\u591a\u4eba\u5bf9\u4e8e\u6cdb\u578b\u662f\u6025\u4e0d\u53ef\u8010\uff0c\u5728 JDK1.4\u00a0\u4e0b\u642d\u914d\u4e00\u4e2a\u5916\u6302\u7684 Generic Java \u7f16\u8bd1\u5668\uff0c\u901a\u8001\u5b9e -Xbootclasspath\u3001-bootclasspath \u540c\u6837\u80fd\u8ba9\u4f60\u5728 1.4\u00a0\u7684 JDK \u4e0a\u4f7f\u7528\u6cdb\u578b\uff1a<\/p>\n<br\/>\njavac -J-Xbootclasspath\/p:JSR14HOME\\gjcrt.jar -bootclasspath JSR14HOME\\collect.jar;JDK141HOME\\jre\\lib\\rt.jar -source 1.5 FileName.java<br \/>\njava -Xbootclasspath\/p:JSR14HOME\\gjc-rt.jar FileName"},{"title":"Java \u7ebf\u7a0b\u540c\u6b65\uff0c\u5bf9\u8c61\u9501\u4e0e\u4e92\u65a5\u89c4\u5219","link":"https:\/\/yanbin.blog\/java-thread-sync-lock-mutex\/","pubDate":"Thu, 08 Apr 2010 20:03:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-thread-sync-lock-mutex\/","description":"\n<p>\u5728\u524d\u9762\u4e00\u7bc7\n<a id=\"Editor_Results_rprSelectionList_ctl01_LinkTitle\" class=\"titlelink\" href=\"https:\/\/yanbin.blog\/java-synchronized-method-codes\/\">\n\u662f\u540c\u6b65\u65b9\u6cd5\u8fd8\u662f synchronized \u4ee3\u7801\uff1f-- \u8be6\u89e3\u591a\u7ebf\u7a0b\u540c\u6b65\u89c4\u5219<\/a>\n\u5176\u5b9e\u5df2\u6e05\u695a\u8bb2\u8ff0\u4e86\u8fd9\u91cc\u60f3\u8981\u662f\u89e3\u7684\u8bdd\u9898\uff0c\u53ea\u662f\u4e4b\u524d\u7684\u957f\u7bc7\u5927\u8bba\uff0c\u6ca1\u4e2a\u91cd\u70b9\uff0c\u8bfb\u6765\u5b9e\u5728\u4f1a\u8ba9\u4eba\u53d7\u7d2f\uff0c\u6545\u5728\u6b64\u5355\u5217\u4e00\u4e13\u9898\uff0c\u5047\u4ee5\u56fe\u793a\uff0c\u4e5f\u4e3a\u81ea\u5df1\u52a0\u6df1\u5bf9\u540c\u6b65\u9501\u7684\u7406\u89e3\u3002\u9053\u4e2d\u4eba\u89c9\u5f97\u54ea\u91cc\u8bf4\u5f97\u6709\u51fa\u5165\u6216\u6709\u66f4\u5999\u7684\u7406\u89e3\u65b9\u5f0f\uff0c\u5c3d\u7ba1\u62cd\u8fc7\u6765\u3002\n<\/p>\n<p>\u8bb0\u5f97\u6211\u521d\u8bc6\u591a\u7ebf\u7a0b\u65f6\uff0c\u5c31\u662f\u5f88\u7b80\u5355\u5316\u7684\u53bb\u7406\u89e3\u4e86\u540c\u6b65\uff1a\u8bf4\u5230\u8981\u540c\u6b65\uff0c\u65e0\u5916\u4e4e\u5c31\u662f\u7ed9\u65b9\u6cd5\u52a0 synchronized \u5173\u952e\u5b57\uff0c\u6216\u8005\u7ed9\u4ee3\u7801\u5757\u52a0\u4e0a synchronized(this)\n\u62ec\u8d77\u6765[\u6ce8\uff1ajdk 1.5 \u540e\u53ef\u7528 Lock \u6765\u540c\u6b65\u4ee3\u7801]\uff0c\u4ee5\u4e3a\u8fd9\u6837\u5c31\u4e07\u4e8b\u5927\u5409\uff0c\u5c31\u80fd\u4fdd\u8bc1\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c\u65f6\uff0c\u53e6\u4e00\u4e2a\u7ebf\u7a0b\u5c31\u8fdb\u4e0d\u6765\u3002\n\u5176\u5b9e\u4e0d\u5c3d\u7136\uff0c\u56e0\u4e3a\u9759\u6001\u540c\u6b65\u65b9\u6cd5\u4e0e\u975e\u9759\u6001\u540c\u6b65\u65b9\u6cd5\u662f\u6709\u533a\u522b\u7684\uff0c\u800c synchronized(this) \u62ec\u53f7\u4e2d\u662f\u7528 this \u8fd8\u662f\u8981\u7528\u522b\u7684\u5bf9\u8c61\uff0c\u4e5f\u662f\u6709\u8bb2\u7a76\u7684\uff0c\n\u8fd9\u4e9b\u95ee\u9898\u53ef\u4ee5\u9605\u8bfb\u524d\u4e00\u7bc7\uff1a\n<a id=\"Editor_Results_rprSelectionList_ctl01_LinkTitle\" class=\"titlelink\" href=\"https:\/\/yanbin.blog\/java-synchronized-method-codes\/\">\n\u662f\u540c\u6b65\u65b9\u6cd5\u8fd8\u662f synchronized \u4ee3\u7801\uff1f-- \u8be6\u89e3\u591a\u7ebf\u7a0b\u540c\u6b65\u89c4\u5219\n<\/a>\u3002"},{"title":"SLF4J \u7684\u51e0\u79cd\u5b9e\u9645\u5e94\u7528\u6a21\u5f0f--\u4e4b\u4e09\uff1aJCL-Over-SLF4J+SLF4J","link":"https:\/\/yanbin.blog\/jcl-over-slf4j-slf4j\/","pubDate":"Wed, 07 Apr 2010 10:42:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/jcl-over-slf4j-slf4j\/","description":"\n\u6211\u4eec\u524d\u9762\u5df2\u7ecf\u8bb2\u8fc7\u4e86 SLF4J \u7684\u4e24\u79cd\u7528\u6cd5\uff1aSLF4J+Log4J\u00a0 \u548c SLF4J+Logback\uff0c\u90a3\u662f\u5728\u6bd4\u8f83\u7406\u60f3\u7684\u60c5\u51b5\u4e0b\uff0c\u6240\u7528\u7ec4\u4ef6\u53ea\u4f7f\u7528\u4e86 SLF4J \u8fd9\u4e00\u79cd\u7edf\u4e00\u65e5\u5fd7\u6846\u67b6\u7684\u65f6\u5019\u3002\u53ef\u662f JCL\u00a0\u4e00\u76f4\u5f71\u54cd\u6df1\u8fdc\uff0cSLF4J \u6e10\u5165\u4f73\u5883\u7684\u65f6\u4e2a\uff0c\u5728\u4f60\u7684\u9879\u76ee\u4e2d\u5f88\u53ef\u80fd\u6240\u7528\u7684\u7ec4\u4ef6\uff0c\u5b83\u4eec\u5206\u522b\u7528\u4e86 JCL \u548c SLF4J \u4e24\u79cd\u7ec4\u4ef6\u3002\u6bd4\u5982\u8bf4\u5728\u9879\u76ee\u4e2d\u7528\u4e86 Hibernate 3.5 \u548c Struts\uff0c\u6216\u5176\u4ed6 Apache \u7684\u4e00\u4e9b\u5f00\u6e90\u7ec4\u4ef6\uff0c\u4f60\u5927\u7ea6\u4e5f\u4e0d\u60f3\u7528\u4e86 SLF4J \u7684\u7ec4\u4ef6\u65e5\u5fd7\u4fe1\u606f\u8f93\u51fa\u5230 A \u5904\uff0c\u7528\u4e86 JCL \u7684\u7ec4\u4ef6\u65e5\u5fd7\u8f93\u51fa\u5230 B \u5904\uff0c\u90a3\u4f60\u81ea\u5df1\u5199\u7684\u4ee3\u7801\u4e2d\u7684\u65e5\u5fd7\u4fe1\u606f\u8be5\u5f80\u54ea\u513f\u5199\u5462\uff1f<\/p>\n<br\/>\n\u4e2d\u56fd\u4eba\u4e00\u76f4\u90fd\u613f\u8ffd\u6c42\u5927\u4e00\u7edf\uff0c\u4e0d\u559c\u6b22\u57ce\u90a6\u5236\u7684\u4fbf\u4e8e\u5206\u800c\u6cbb\u4e4b\u3002\u4f46\u8bf4\u5230\u65e5\u5fd7\u8f93\u51fa\u8fd8\u662f\u5f97\u7edf\u4e00\u5230\u5355\u4e00\u901a\u9053\u4e2d\u6765\uff0c\u4e00\u65b9\u9762\u591a\u4e2a\u901a\u9053\u6d6a\u8d39\u8d44\u6e90\uff0c\u53e6\u65b9\u9762\u4e5f\u4fbf\u4e8e\u914d\u7f6e\u548c\u7ba1\u7406\u3002\u90a3\u4e48\u65e2\u7136 SLF4J \u662f\u8d8b\u52bf\uff0c\u5f53 SLF4J \u548c JCL \u88ab\u4e22\u5230\u4e00\u4e2a\u575b\u5b50\u91cc\uff0c\u9996\u5148\u4f1a\u8ba9 SLF4J \u4e3a\u4e3b\uff0cJCL \u4e3a\u8f85\uff0c\u4e5f\u5c31\u662f\u8981\u628a JCL \u6865\u63a5\u5230 SLF4J \u4e0a\u6765\uff0c\u901a\u8fc7 SLF4J \u7edf\u4e00\u8f93\u51fa\u65e5\u5fd7\u4fe1\u606f\u3002\u4e8e\u662f\u4e5f\u5c31\u662f\u8fd9\u7bc7\u8981\u4ecb\u7ecd\u7684 SLF4J \u4f7f\u7528\u6a21\u5f0f\uff1aJCL-Over-SLF4J+SLF4J\u3002"},{"title":"\u662f\u540c\u6b65\u65b9\u6cd5\u8fd8\u662f synchronized \u4ee3\u7801\uff1f\u2013 \u8be6\u89e3\u591a\u7ebf\u7a0b\u540c\u6b65\u89c4\u5219","link":"https:\/\/yanbin.blog\/java-synchronized-method-codes\/","pubDate":"Mon, 22 Mar 2010 11:55:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-synchronized-method-codes\/","description":"\n\u719f\u6089 Java \u7684\u591a\u7ebf\u7a0b\u7684\u4e00\u822c\u90fd\u77e5\u9053\u4f1a\u6709\u6570\u636e\u4e0d\u4e00\u81f4\u7684\u60c5\u51b5\u53d1\u751f\uff0c\u6bd4\u5982\u4e24\u4e2a\u7ebf\u7a0b\u5728\u64cd\u4f5c\u540c\u4e00\u4e2a\u7c7b\u53d8\u91cf\u65f6\uff0c\u800c\u4fdd\u62a4\u6570\u636e\u4e0d\u81f3\u4e8e\u9519\u4e71\u7684\u529e\u6cd5\u5c31\u662f\u8ba9\u65b9\u6cd5\u540c\u6b65\u6216\u8005\u4ee3\u7801\u5757\u540c\u6b65\u3002\u540c\u6b65\u65f6\u975e\u539f\u5b50\u64cd\u4f5c\u5c31\u5f97\u540c\u6b65\uff0c\u6bd4\u5982\u4e00\u4e2a\u7b80\u5355\u7684 1.2+1 \u8fd0\u7b97\u4e5f\u8be5\u540c\u6b65\uff0c\u4ee5\u4fdd\u8bc1\u4e00\u4e2a\u4ee3\u7801\u5757\u6216\u65b9\u6cd5\u6210\u4e3a\u4e00\u4e2a\u539f\u5b50\u64cd\u4f5c\u3002<br\/>\n<br\/>\n\u7b80\u5355\u70b9\u8bf4\u5c31\u662f\u7ed9\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u53ef\u80fd\u4f1a\u9020\u6210\u6570\u636e\u7834\u574f\u7684\u65b9\u6cd5\uff0c\u505a\u6cd5\u6709\u4e24\u79cd\uff0c\u4ee5\u53ca\u4e00\u4e9b\u7591\u95ee\uff1a<br\/>\n<br\/>\n<span style=\"color: #0000ff;\"><u>1. \u4e0d\u8bba\u662f\u9759\u6001\u7684\u6216\u975e\u9759\u6001\u7684\u65b9\u6cd5\u90fd\u52a0\u4e0a synchronized \u5173\u952e\u5b57\uff0c\u90a3\u9759\u6001\u7684\u65b9\u6cd5\u548c\u975e\u9759\u6001\u7684\u65b9\u6cd5\u524d\u52a0\u4e0a synchronized \u5173\u952e\u5b57\u6709\u533a\u522b\u5417\uff1f<\/u><\/span><br\/>\n<br\/>\n<u>2. \u6216\u8005\u5728\u53ef\u7591\u7684\u4ee3\u7801\u5757\u4e24\u65c1\u7528 synchronized(this) \u6216 synchronized(someObject) \u5305\u88f9\u8d77\u6765\uff0c\u800c\u9009\u7528 this \u8fd8\u662f\u67d0\u4e00\u4e2a\u5bf9\u8c61--someObject\uff0c\u53c8\u6709\u4ec0\u4e48\u4e0d\u540c\u5462\uff1f<\/u><br\/>"},{"title":"Java NIO \u5e94\u7528 -- \u4f7f\u7528\u5185\u5b58\u6620\u5c04\u6587\u4ef6\u5b9e\u73b0\u8fdb\u7a0b\u95f4\u901a\u4fe1","link":"https:\/\/yanbin.blog\/java-nio-memory-mapping-communicate\/","pubDate":"Fri, 19 Mar 2010 03:30:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-nio-memory-mapping-communicate\/","description":"\n\u4e00\u770b\u5230 Java NIO \u7684\u5185\u5b58\u6620\u5c04\u6587\u4ef6(MappedByteBuffer)\uff0c\u8ba9\u6211\u7acb\u5373\u5c31\u8054\u60f3\u5230 Windows \u7cfb\u7edf\u7684\u5185\u5b58\u6620\u5c04\u6587\u4ef6\u3002Windows \u7cfb\u7edf\u7684\u5185\u5b58\u6620\u5c04\u6587\u4ef6\u80fd\u7528\u6765\u5728\u591a\u4e2a\u8fdb\u7a0b\u95f4\u5171\u4eab\u6570\u636e\uff0c\u5373\u8fdb\u7a0b\u95f4\u7684\u5171\u4eab\u5185\u5b58\uff0c\u662f\u901a\u8fc7\u628a\u540c\u4e00\u5757\u5185\u5b58\u533a\u57df\u6620\u5c04\u5230\u4e0d\u540c\u8fdb\u7a0b\u7684\u5730\u5740\u7a7a\u95f4\u4e2d\uff0c\u4ece\u800c\u8fbe\u5230\u5171\u4eab\u5185\u5b58\u3002<br\/><br\/>\nJava NIO \u7684\u5185\u5b58\u6620\u5c04\u6587\u4ef6\u548c Windows \u7cfb\u7edf\u4e0b\u7684\u4e00\u6837\uff0c\u90fd\u80fd\u628a\u7269\u7406\u6587\u4ef6\u7684\u5185\u5bb9\u6620\u5c04\u5230\u5185\u5b58\u4e2d\uff0c\u90a3\u4e48 MappedByteBuffer \u662f\u5426\u80fd\u7528\u6765\u5728\u4e0d\u540c Java \u8fdb\u7a0b(JVM) \u95f4\u5171\u4eab\u6570\u636e\u5462\uff1f\u7b54\u6848\u662f\u80af\u5b9a\u7684\uff0c\u8fd9\u6837\u5728\u901a\u5e38\u7684 Socket \u65b9\u5f0f\u6765\u5b9e\u73b0 Java \u8fdb\u7a0b\u95f4\u901a\u4fe1\u4e4b\u4e0a\u53c8\u591a\u4e86\u4e00\u79cd\u65b9\u6cd5\u3002"},{"title":"\u5171\u4eab\u5185\u5b58\u5728Java\u4e2d\u5b9e\u73b0\u548c\u5e94\u7528[\u8f6c]","link":"https:\/\/yanbin.blog\/share-memory-for-java\/","pubDate":"Thu, 18 Mar 2010 23:14:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/share-memory-for-java\/","description":"\n<strong>1\u3001\u5171\u4eab\u5185\u5b58\u5bf9\u5e94\u5e94\u7528\u5f00\u53d1\u7684\u610f\u4e49<\/strong><br\/>\n<br\/>\n\u5bf9\u719f\u77e5UNIX\u7cfb\u7edf\u5e94\u7528\u5f00\u53d1\u7684\u7a0b\u5e8f\u5458\u6765\u8bf4\uff0cIPC\uff08InterProcess Communication\uff09\u673a\u5236\u662f\u975e\u5e38\u719f\u6089\u7684\uff0cIPC\u57fa\u672c\u5305\u62ec\u5171\u4eab\u5185\u5b58\u3001\u4fe1\u53f7\u706f\u64cd\u4f5c\u3001\u6d88\u606f\u961f\u5217\u3001\u4fe1\u53f7\u5904\u7406\u7b49\u90e8\u5206\uff0c\u662f\u5f00\u53d1\u5e94\u7528\u4e2d\u975e\u5e38\u91cd\u8981\u7684\u5fc5\u4e0d\u53ef\u5c11\u7684\u5de5\u5177\u3002\u5176\u4e2d\u5171\u4eab\u5185\u5b58IPC\u673a\u5236\u7684\u5173\u952e\uff0c\u5bf9\u4e8e\u6570\u636e\u5171\u4eab\u3001\u7cfb\u7edf\u5feb\u901f\u67e5\u8be2\u3001\u52a8\u6001\u914d\u7f6e\u3001\u51cf\u5c11\u8d44\u6e90\u8017\u8d39\u7b49\u5747\u6709\u72ec\u5230\u7684\u4f18\u70b9\u3002<br\/>\n<br\/>\n\u5bf9\u5e94UNIX\u7cfb\u7edf\u6765\u8bf4\uff0c\u5171\u4eab\u5185\u5b58\u5206\u4e3a\u4e00\u822c\u5171\u4eab\u5185\u5b58\u548c\u6620\u50cf\u6587\u4ef6\u5171\u4eab\u5185\u5b58\u4e24\u79cd\uff0c\u800c\u5bf9\u5e94Windows\uff0c\u5b9e\u9645\u4e0a\u53ea\u6709\u6620\u50cf\u6587\u4ef6\u5171\u4eab\u5185\u5b58\u4e00\u79cd\u3002\u6240\u4ee5Java\u5e94\u7528\u4e2d\uff0c\u4e5f\u662f\u53ea\u80fd\u521b\u5efa\u6620\u50cf\u6587\u4ef6\u5171\u4eab\u5185\u5b58\u3002"},{"title":"Java NIO \u5165\u95e8\u5b66\u4e60(\u8bfb\u5199\u6587\u4ef6)","link":"https:\/\/yanbin.blog\/java-nio-access-fil\/","pubDate":"Thu, 18 Mar 2010 05:51:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-nio-access-fil\/","description":"\n\u6211\u4eec\u7528\u539f\u6709 IO \u8bfb\u5199\u6587\u4ef6\u5e94\u8be5\u4e0d\u4f1a\u964c\u751f\u4e86\uff0c\u987a\u5e26\u56de\u987e\u4e00\u4e0b\uff0c\u5927\u81f4\u4e24\u79cd\uff1a\n<br\/>\n1. \u5728 InputStream \u6216 OutputStream \u4e0a\u8bfb\u5199\u5b57\u8282\u6216\u5b57\u8282\u6570\u7ec4\uff0c\u8bfb InputStream \u65f6\u7528\u662f\u5426\u8fd4\u56de -1 \u6765\u5224\u65ad\u662f\u5426\u5230\u8fbe\u672b\u5c3e\u3002<br \/>\n2. \u5305\u88c5\u6210 Reader\/Writer \u53ef\u4ee5\u76f4\u63a5\u8bfb\u5199\u5b57\u7b26\u4e32\uff0c\u8fdb\u4e00\u6b65\u5305\u88c5\u5230 BufferedReader\/BufferedWriter \u5c31\u53ef\u4ee5\u6309\u884c\u8bfb\u5199\u4e86\u3002readLine() \u65f6\u770b\u662f\u5426\u8fd4\u56de null \u65ad\u5b9a\u662f\u5426\u8bfb\u5b8c\u4e86\u6700\u540e\u4e00\u884c\u3002<br\/><br\/>\n\u73b0\u5728\u6211\u4eec\u8981\u7528 NIO \u6765\u8bfb\u5199\u6587\u4ef6\uff0c\u80af\u5b9a\u662f\u8981\u7528\u5230 Channel \u548c Buffer \u4e86\u3002\u4e00\u53e5\u8bdd\u63cf\u8ff0\u8fc7\u7a0b\u5c31\u662f\u4ece FileInputStream \u5f97\u5230\u7684 FileChannel \u4e2d\u8bfb\u53d6\u6570\u636e\u5230 Buffer \u4e2d\uff0c\u518d\u5904\u7406 Buffer \u4e2d\u7684\u6570\u636e\u3002\u770b\u4ee3\u7801\uff1a"},{"title":"Java NIO \u5165\u95e8\u5b66\u4e60(\u901a\u9053\u548c\u7f13\u51b2\u533a)","link":"https:\/\/yanbin.blog\/java-nio-channel-buffer\/","pubDate":"Thu, 18 Mar 2010 02:30:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-nio-channel-buffer\/","description":"\n<p>\u5bf9\u4e8e NIO \u6765\u8bf4\uff0cChannel(\u901a\u9053) \u548c Buffer(\u7f13\u51b2\u533a) \u8fd9\u4e24\u4e2a\u4e1c\u897f\u662f\u4e0d\u5f97\u4e0d\u63d0\u7684\uff0c\u56e0\u4e3a\u5b83\u4eec\u662f NIO \u7684\u6838\u5fc3\u5bf9\u8c61\uff0c\u51e0\u4e4e\u6bcf\u4e00\u4e2a I\/O \u64cd\u4f5c\u90fd\u8981\u5b83\u4eec\u3002<\/p>\n<p>\u901a\u9053\u662f\u5bf9\u539f I\/O \u6d41\u7684\u6a21\u62df\uff0c\u4f46\u6709\u4e0d\u540c\u7684\u662f\u5b83\u662f\u53cc\u5411\u7684\uff0c\u4e0d\u518d\u50cf\u6d41\u90a3\u6837\u5206 InputStream \u548c OutputStream\uff0c\u901a\u9053\u7684\u53cc\u5411\u6027\u66f4\u597d\u7684\u53cd\u6620\u4e86\u5e95\u5c42\u64cd\u4f5c\u7cfb\u7edf\u7684\u771f\u8bc6\u60c5\u51b5\u3002\u4e5f\u4e0d\u80fd\u50cf\u539f I\/O \u90a3\u6837\u53ef\u4ee5\u76f4\u63a5\u5f80\u6d41\u91cc\u5199\u6216\u8bfb\u6570\u636e\uff0c\u5728\u901a\u9053\u4e86\u4f20\u8f93\u6570\u636e\u5fc5\u987b\u7ecf\u7531\u7f13\u51b2\u533a\u3002\u6709\u70b9\u7c7b\u4f3c\u539f I\/O \u6d41\u901a\u8fc7\u8fc7\u6ee4\u5668\u6d41 BufferedInputStream \u548c BufferedOutputStream \u6765\u8bfb\u5199\u6570\u636e\u3002<\/p>\n<p>FileInputStream\/FileOutputStream\/RandomAccessFile\/DatagramSocket\/ServerSocket\/Socket \u7684 getChannel() \u65b9\u6cd5\u53ef\u4ee5\u83b7\u5f97\u76f8\u5e94\u7c7b\u578b\u7684 Channel\uff0cChannel \u7684\u7c7b\u578b\u6709 FileChannel\/SocketChannel\/SelectableChannel\/DatagramChannel\/ServerSocketChannel \u7b49\u3002"},{"title":"Java NIO \u5165\u95e8\u5b66\u4e60(\u8fc7\u95e8)","link":"https:\/\/yanbin.blog\/java-nio-get-started\/","pubDate":"Wed, 17 Mar 2010 05:45:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-nio-get-started\/","description":"\n<p>Java NIO(New IO) \u8fd8\u662f\u5728 JDK 1.4 \u4e2d\u5f15\u5165\u7684\u65b0\u7279\u6027\u3002JDK 1.4 \u7684\u53e6\u4e00\u91cd\u8981\u7279\u6027\u6b63\u5219\u8868\u8fbe\u5f0f\u5927\u5bb6\u5e94\u8be5\u7ecf\u5e38\u7528\u5230\uff0c\u4f46 NIO \u5c31\u53ef\u80fd\u4f7f\u7528\u5be5\u5be5\u4e86\uff0c\u5927\u6982\u662f\u7f18\u4e8e\u65e7\u6709 IO \u4f53\u7cfb\u4ecd\u7136\u591f\u7528\u3002\u6709\u5982 JDK1.5 \u65e9\u5c31\u6cdb\u578b\u548c\u6ce8\u89e3\u4e86\uff0c\u4f46\u57fa\u4e8e\u5404\u79cd\u539f\u56e0\u800c\u65e0\u6cd5\u4eb2\u529b\u53bb\u5b9e\u8df5\u6cdb\u578b\u548c\u6ce8\u89e3\u4e00\u822c\uff0cNIO \u591a\u6570\u65f6\u5019\u4e5f\u53ea\u662f\u4e0e\u6211\u4eec\u64e6\u7740\u80a9\u800c\u5df2\u3002<\/p>\n<p>\u76f8\u6bd4\u4e0e Old IO\uff0cNIO\u00a0\u5728\u67d0\u4e9b\u9886\u57df\u91cc\u786e\u6709\u5176\u8fc7\u4eba\u4e4b\u5904\uff0c\u6240\u4ee5\u73b0\u5728\u8ba9\u6211\u4eec\u4e00\u8d77\u6765\u5bf9 NIO \u6709\u4e2a\u66f4\u695a\u7684\u8ba4\u8bc6\u3002<\/p>\n<p>NIO \u7684\u76f8\u5173 API\uff0c\u5728 java.nio \u4e2d\uff0c\u5b83\u4f1a\u4e0e\u4f60\u7ea0\u7f20\u7684\u5c31\u662f\u5404\u79cd <span style=\"color: #ff0000;\">Channel<\/span> \u548c <span style=\"color: #ff0000;\">Buffer<\/span>\u3002\u76f8\u5173\u7684\u5e94\u7528\u5728\u4e8e\u5904\u7406\u901a\u9053\u548c\u7f13\u51b2\u533a\u3001\u5f02\u6b65(\u975e\u963b\u585e)\u7684 IO\u3001\u6587\u4ef6\u7684\u9501\u5b9a\u3001\u5b57\u7b26\u96c6\u7684\u5904\u7406\u4e0a\u3002"},{"title":"\u672c\u60f3\u505a\u4e2a Scala \u7684\u63a8\u5e7f\uff0c\u65e0\u5948\u672c\u53ef\u6ce8\u518c\u7684\u57df\u540d\u5931\u4e86\u65f6\u673a\uff0c\u671b\u5927\u5bb6\u80fd\u51fa\u8c0b\u5212\u7b56","link":"https:\/\/yanbin.blog\/promote-scala-miss-dn\/","pubDate":"Mon, 14 Sep 2009 14:18:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/promote-scala-miss-dn\/","description":"\n\u4e86\u89e3\u4e86\u4e0b Scala(<a href=\"http:\/\/www.scala-lang.org\">http:\/\/www.scala-lang.org<\/a>) \u8bed\u8a00\u7684\u7279\u6027\uff0c\u4e5f\u89c9\u5f97\u9887\u6709\u4e9b\u641e\u5934\u3002\n\u9996\u5148\u4e0d\u5931\u9762\u8c61\u5bf9\u8c61\u7684\u7279\u5f81\uff0c\u53c8\u80fd\u4f5c\u6cdb\u51fd\u7f16\u7a0b\uff0c\u5e76\u80fd\u50cf Erlang\u00a0\u90a3\u6837\u9002\u7528\u4e8e\u591a\u6838\u3001\u5e76\u53d1\u7f16\u7a0b\u3002\n\u4e14\u770b\u770b\u8fd9\u4e2a\u8bed\u8a00\u7684\u540d\u79f0 <strong>Scala<\/strong>ble\uff0c\u5373\u53ef\u77e5\u5b83\u7684\u5fd7\u5411\u4e4b\u8fdc\u5927\u3002\u529b\u6c42\u4ee5\u9ad8\u5b9a\u5236\u3001\u6269\u5c55\u6027\u53bb\u5e94\u7528\u4e8e\uff0c\u65e0\u8bba\u662f\u5c0f\u8f6f\u4ef6\u8fd8\u662f\u5927\u5e94\u7528\u3002<br \/><br \/>\nGroovy \u4e4b\u7236\u8bf4\u8fc7\uff1a\u8981\u662f\u65e9\u77e5\u6709 Scala\uff0c\u5c31\u4e0d\u4f1a\u518d\u53d1\u660e Groovy\u3002\u8fd9\u4e24\u4e1c\u897f\u90fd\u662f\u6784\u7b51\u5728 JVM \u5e73\u53f0\u7684\uff0c\u8981\u8bf4 Groovy \u53d1\u5c55\u81f3\u5ff5\u4eca\uff0c\u6240\u5f97\u5956\u9879\u4e5f\u4e0d\u5c11\uff0c\u63a8\u5e7f\u597d\u50cf\u4e0d\u548b\u6837\u3002\n\u4ee5\u53ca\u6709\u201cScala \u5c06\u6210\u4e3a\u73b0\u4ee3 Web 2.0 \u7684\u53d1\u8d77\u8bed\u8a00\u201d \u7684\u8bba\u8c03\uff0c\u8fd8\u6709 Scala \u5b9e\u9645\u5728 Twitter \u4e0a\u7684\u5e94\u7528\u7b49\u7b49\u3002<br \/><br \/>\n\u7136\u800c\uff0c\u56fd\u5185\u597d\u50cf\u5bf9\u00a0 Scala \u7684\u4e86\u89e3\u8fd8\u4e0d\u591a\uff0c\u4e8e\u662f\u6ecb\u751f\u4e86\u4e00\u4e2a\u5728\u56fd\u5185\u5bf9\u5b83\u8fdb\u884c\u63a8\u5e7f\u7684\u5ff5\u5934\uff1a\u5efa\u4e2a\u7ad9\u70b9\u3001\u5f04\u4e2a\u57df\u540d\u3001\u7d27\u8ddf Scala \u7684\u811a\u6b65\uff0c\u7f51\u53cb\u70ed\u5fc3\u53c2\u4e0e\u3002\n\u5c31\u50cf\u4eba\u540d\u4e00\u6837\uff0c\u57df\u540d\u4e5f\u5e94\u8be5\u662f\u8981\u8ba9\u4eba\u5370\u50cf\u6df1\u523b\u7684\u3002\u524d\u51e0\u5929\u5728\u4e07\u7f51\u4e0a\u641c\u7d22\u65f6\u50cf scalachina.com\u3001scalacn.com\u3001cnscala \u7b49\u90fd\u6ca1\u4eba\u7528\uff0c\u53ef\u662f\u5de5\u4f5c\u5fd9\u4e86\u4e0b\uff0c\n\u803d\u6401\u4e86\u51e0\u5929\uff0c\u90a3\u51e0\u4e2a\u57df\u540d\u5c31\u88ab\u4eba\u5360\u4e86\u53bb\uff0c\u5e76\u4e14\u4e5f\u80fd\u770b\u5230\u4eba\u5bb6\u7684\u9875\u9762\u4e86\u3002<br \/><br \/>\n\u6ca1\u5948\uff0c\u65f6\u95f4\u4e0a\u54b1\u662f\u5dee\u4e86\u4e00\u6b65\uff0c\u90a3\u6211\u8fd8\u662f\u6709\u4fe1\u606f\u5728\u5176\u4ed6\u65b9\u9762\u505a\u5f97\u66f4\u597d\u7684\u554a\u3002\u518d\u8bf4\u5462\uff0c\u4e5f\u6ca1\u8fc7\u51e0\u4e2a \u4ec0\u4e48\u4ec0\u4e48\u4e2d\u56fd \u7684\u7f51\u7ad9\u505a\u5f97\u7279\u522b\u51fa\u8272\u7684\u5440\uff0c\n\u770b\u770b JavaEye \u662f\u600e\u4e48\u540e\u6765\u5d1b\u8d77\u7684\u5c31\u77e5\u9053\u4e86\u3002\u6211\u7684\u76ee\u6807\u662f\u60f3\u505a\u51fa\u4e00\u4e2a\u50cf JavaEye \u90a3\u6837\u7684\u4e1c\u897f\uff0c\u770b\u8fc7\u6709\u4e2a\u53eb PhpEye\uff0c\u5982\u679c\u518d\u53eb ScalaEye \u5c31\u6709\u4e9b\u8001\u571f\u4e86\uff0c\n\u539f\u672c\u60f3\u7684 Scala \u4e2d\u56fd \u8fd9\u6837\u7684\u540d\u79f0\u5c31\u6709\u4e9b\u4fd7\u7684\u3002<br \/><br \/>"},{"title":"iBatis \u4f7f\u7528 OSCache \u4f5c\u7f13\u5b58\u4e0e java.io.FileNotFoundException \u5f02\u5e38","link":"https:\/\/yanbin.blog\/ibatis-oscache-java-io-filenotfoundexception\/","pubDate":"Wed, 19 Aug 2009 00:09:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/ibatis-oscache-java-io-filenotfoundexception\/","description":"\n\u8fd9\u79cd\u5f02\u5e38\u53ea\u4f1a\u53d1\u751f\u5728 Windows \u5e73\u53f0\u4e0a\uff0c\u53ef\u4ee5\u8bf4\u662f\u00a0iBatis \u7684\u4e00\u4e2a Bug\uff0c\u5927\u7ea6\u00a0iBatis \u7684\u5f00\u53d1\u6d4b\u8bd5\u4eba\u5458\u90fd\u6bd4\u8f83\u70ed\u8877\u4e8e Unix \u65cf\u7cfb\u7684\u5e73\u53f0\uff0c\u800c\u5ffd\u7565\u4e86 Windows \u4e0b\u7684\u517c\u5bb9\u6027\u6d4b\u8bd5\u3002<\/p>\n<br\/>\n\u51fa\u73b0 FileNotFoundException \u5f02\u5e38\u7684\u60c5\u5f62\u662f\u8fd9\u6837\u7684\uff1aWindows7 + iBatis2.3.0.677 + OSCache2.4.1\u3002<br\/><br\/>\niBatis \u4e2d\u914d\u7f6e\u4f7f\u7528 OSCache \u7f13\u5b58\uff0c\u5728\u6620\u5c04\u6587\u4ef6 Product.xml \u4e2d\u6709\u5982\u4e0b\u58f0\u660e\u7247\u65ad\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-xml\" data-lang=\"xml\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"nt\">&lt;cacheModel<\/span> <span class=\"na\">type=<\/span><span class=\"s\">&#34;OSCACHE&#34;<\/span> <span class=\"na\">id=<\/span><span class=\"s\">&#34;productCache&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">2<\/span><span class=\"cl\"> <span class=\"nt\">&lt;flushOnExecute<\/span> <span class=\"na\">statement=<\/span><span class=\"s\">&#34;Product.insert&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">3<\/span><span class=\"cl\"> <span class=\"nt\">&lt;flushOnExecute<\/span> <span class=\"na\">statement=<\/span><span class=\"s\">&#34;Product.delete&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">4<\/span><span class=\"cl\"><span class=\"nt\">&lt;\/cacheModel&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">5<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">6<\/span><span class=\"cl\"><span class=\"nt\">&lt;select<\/span> <span class=\"na\">id=<\/span><span class=\"s\">&#34;getById&#34;<\/span> <span class=\"na\">cacheModel=<\/span><span class=\"s\">&#34;productCache&#34;<\/span> <span class=\"na\">parameterClass=<\/span><span class=\"s\">&#34;int&#34;<\/span> <span class=\"na\">resultClass=<\/span><span class=\"s\">&#34;Product&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">7<\/span><span class=\"cl\"> select id, name,description as desc1 from test_product where id = #value#\n<\/span><\/span><span class=\"line\"><span class=\"ln\">8<\/span><span class=\"cl\"><span class=\"nt\">&lt;\/select&gt;<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\nOSCache \u7684 oscache.properties \u4e2d\u6307\u660e\u7528\u78c1\u76d8\u6587\u4ef6\u7f13\u5b58\u6570\u636e\uff0c\u6ce8\u610f\u4ee5\u4e0b\u51e0\u4e2a\u914d\u7f6e\uff1a"},{"title":"\u4e5f\u8bf4 Java \u7684\u53cc\u62ec\u7b26\u521d\u59cb\u5316, \u5176\u5b9e\u5c31\u662f\u4ee4\u4eba\u8d39\u89e3\u7684\u4e0d\u89c4\u8303\u4ee3\u7801","link":"https:\/\/yanbin.blog\/java-double-brackets-initial\/","pubDate":"Wed, 12 Aug 2009 03:33:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-double-brackets-initial\/","description":"\n\u521d\u770b cgaolei \u7ffb\u8bd1\u7684 <a href=\"http:\/\/www.javaeye.com\/topic\/418542\" target=\"_blank\" rel=\"noopener\">Java\u6280\u5de7\u4e4b\u53cc\u62ec\u5f27\u521d\u59cb\u5316<\/a> \u4e00\u6587\uff0c\u8d70\u9a6c\u89c2\u82b1\uff0c\u53ea\u77e5\u7528\u6cd5\uff0c\u672a\u7ec6\u770b\u540e\u9762\u7684\u89e3\u91ca\u3002\u851a\u4e3a\u60ca\u8273\uff0c\u5fc3\u91cc\u60f3 Java \u7adf\u7136\u6709\u8fd9\u4e48\u795e\u5947\u7684\u8bed\u6cd5\u800c\u4e00\u76f4\u672a\u5f97\u77e5\u3002\u56e0\u4e3a\u5728\u521d\u59cb\u5316\u96c6\u5408\u65f6\u786e\u5b9e\u65b9\u4fbf\u4e0d\u5c11\u3002\u539f\u6765\u505a\u67d0\u4e9b\u6d4b\u8bd5\u8981\u521d\u59cb\u5316\u96c6\u5408\u65f6\u4f1a\u7528\u5230 commons-lang\u00a0\u5305\u548c JDK \u7684 Arrays \u5de5\u5177\u7c7b\uff0c\u73b0\u5728\u77e5\u9053\u53ef\u4ee5\u8fd9\u4e48\u7528\u4e86\uff1a<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"n\">Map<\/span><span class=\"w\"> <\/span><span class=\"n\">map<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">HashMap<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"p\">{{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Name&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;Unmi&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;QQ&#34;<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;1125535&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"p\">}};<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"n\">List<\/span><span class=\"w\"> <\/span><span class=\"n\">stooges<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">ArrayList<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"p\">{{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Larry&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Moe&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">add<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Curly&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"p\">}};<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n\u770b\u8d77\u6765\u90fd\u662f\u5728\u4e00\u6761\u8bed\u53e5\u91cc\u5b8c\u6210\uff0c\u800c\u4e0d\u9700\u8981\u5206\u6b65\u9aa4\u5199\u6210:"},{"title":"\u4f7f\u7528 XStream \u5728 JavaBean \u4e0e XML\/JSON \u4e4b\u95f4\u76f8\u4e92\u8f6c\u6362","link":"https:\/\/yanbin.blog\/xstream-javabean-xml-json\/","pubDate":"Tue, 11 Aug 2009 08:18:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/xstream-javabean-xml-json\/","description":"\nXML \u548c JSON \u662f\u5f53\u4eca\u5e38\u7528\u7684\u4e24\u79cd\u6570\u636e\u63cf\u8ff0\u4e0e\u4f20\u8f93\u7684\u683c\u5f0f\uff0c\u7279\u522b\u662f\u6d89\u53ca\u5230 JS \u65f6\u4f7f\u7528 JSON \u9887\u4e3a\u9891\u7e41\u3002\u81ea\u7136\uff0c\u5728 Java\u00a0 \u7684\u4e16\u754c\u91cc\u5c11\u4e0d\u4e86\u5b8c\u6210 JavaBean \u4e0e\u8fd9\u4e24\u79cd\u683c\u5f0f\u76f8\u4e92\u8f6c\u6362\u7684\u7ec4\u4ef6\uff0c\u90a3\u5c31\u662f XStream \u548c JSON-lib\u3002\u8fd9\u91cc\u6211\u7b80\u5355\u8bb0\u4e0b XStream\u00a0 \u7684\u7528\u6cd5\u3002<\/p>\n<br\/>\n\u5176\u5b9e\u76f8\u7c7b\u4f3c\u7684\u5de5\u5177\u65e9\u5df2\u6709\u4e4b\u3002\u5982\u679c\u7528\u8fc7 DWR \u7684\u540c\u5fd7\uff0c\u4e00\u5b9a\u6709\u5370\u50cf\uff0cDWR \u8fdb\u884c\u8fdc\u7a0b\u65b9\u6cd5\u8c03\u7528\u65f6\u4e5f\u80fd\u4e3a\u4f60\u5b8c\u6210 JavaBean \u548c JSON \u683c\u5f0f\u7684\u53cc\u5411\u8f6c\u6362\u7684\uff0c\u6240\u4f9d\u8d56\u7684\u662f\u5b83\u7684\u5404\u79cd Converter\u3002\u518d\u8981\u662f\u5bf9 Struts1 \u7684\u7ec6\u8282\u6709\u6240\u6ce8\u610f\u7684\u8bdd\uff0cStruts1 \u7684 ActionServlet \u5728\u521d\u59cb\u5316 struts-config.xml \u65f6\u662f\u901a\u8fc7 <a href=\"http:\/\/commons.apache.org\/digester\/\" target=\"_blank\" rel=\"noopener\">commons-digester<\/a> \u6765\u5b8c\u6210 XML \u5230 JavaBean \u8f6c\u6362\u7684\u3002\u76f8\u5e94\u7684 Apache \u4e5f\u6709\u4e00\u4e2a <a href=\"http:\/\/commons.apache.org\/betwixt\/\" target=\"_blank\" rel=\"noopener\">commons-betwixt<\/a> \u5b9e\u73b0\u4e86 JavaBean \u5230 XML \u7684\u751f\u6210\u3002"},{"title":"\u5173\u4e8e JavaBean \u89c4\u8303\u4f60\u8fd8\u662f\u5e94\u8be5\u77e5\u9053\u7684\u4e8c\u4e09\u4e8b(\u8865\u5145)","link":"https:\/\/yanbin.blog\/about-javabean-spec-plus\/","pubDate":"Thu, 02 Jul 2009 04:42:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/about-javabean-spec-plus\/","description":"\n<p>\u524d\u9762\u5199\u8fc7\u4e00\u7bc7\uff1a<a id=\"viewpost1_TitleUrl\" href=\"https:\/\/yanbin.blog\/about-javabean-spec\/\" target=\"_blank\">\n<span style=\"color: #000080;\">\u5173\u4e8e JavaBean \u89c4\u8303\u4f60\u8fd8\u662f\u5e94\u8be5\u77e5\u9053\u7684\u4e8c\u4e09\u4e8b<\/span>\n<\/a>\uff0c\u53d1\u73b0\u8fd8\u7565\u53d7\u5173\u6ce8\u3002\u5176\u4e2d\u6709\u4eba\u5bf9 boolean \u578b\u5c5e\u6027\u7684 getter\/setter \u65b9\u6cd5\u8fd8\u6709\u4e9b\u60f3\u6cd5\uff0c\u4ee5\u53ca JavaBean \u7684\u89c4\u8303\u662f\u6839\u636e\u5c5e\u6027\u540d\u627e\u76f8\u5e94\u7684\ngetter\/setter \u65b9\u6cd5\uff0c\u8fd8\u662f\u7531 getter\/setter \u5b9a\u4f4d\u5c5e\u6027\u5462\u3002\u672c\u6587\u4e3b\u8981\u5c31\u8fd9\u4e24\u95ee\u9898\u5c55\u5f00\u8bdd\u9898\uff0c\u539f\u672c\u60f3\u9644\u4e2d\u524d\u7bc7\u4e2d\u53bb\uff0c\u4f46\u8003\u8651\u4f1a\u8ba9\u524d\u6587\u51cc\u4e71\uff0c\u6240\u4ee5\u53e6\u7acb\u65b0\u7bc7\u3002\n<\/p>\n<p><strong>1. \u5173\u4e8e boolean\u00a0 \u578b\u5c5e\u6027<br \/> <\/strong><br \/> \u5206\u522b\u6765\u770b\u770b Eclipse(3.5) \u548c NetBean(6.7) \u7684\u91cd\u6784\u529f\u80fd\u5bf9\noolean student \u548c boolean isStudent \u751f\u6210\u4ec0\u4e48\u6837\u7684 getter\/setter \u65b9\u6cd5\u7684\u3002"},{"title":"\u5173\u4e8e JavaBean \u89c4\u8303\u4f60\u8fd8\u662f\u5e94\u8be5\u77e5\u9053\u7684\u4e8c\u4e09\u4e8b","link":"https:\/\/yanbin.blog\/about-javabean-spec\/","pubDate":"Wed, 01 Jul 2009 09:19:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/about-javabean-spec\/","description":"\n\u4f5c\u4e3a Java\u00a0 \u7a0b\u5e8f\u5458\uff0c\u5bf9\u4e8e JavaBean \u4e5f\u8bb8\u4f60\u4f1a\u8bf4\u518d\u719f\u6089\u4e0d\u8fc7\u4e86\uff0c\u5b83\u8d2f\u7a7f\u5728\u7cfb\u7edf\u7684\u591a\u5c42\u4e2d\uff0c\u4e0d\u540c\u7684\u53eb\u6cd5\u6709 PO\u3001VO\u3001DTO\u3001POJO\u3001DO(Domain Object)\u3002\u7136\u800c\u5b83\u65e0\u5916\u4e4e\u5c31\u662f\u4e00\u4e2a Class \u7c7b\uff0c\u5e26\u4e0a\u4e9b\u5c5e\u6027\u548c\u5b83\u4eec\u7684 setter\/getter \u65b9\u6cd5\uff0cset\/get \u540e\u9762\u90a3\u4e00\u4e2a\u5b57\u6bcd\u5927\u5199\u3002\u867d\u7136\u6211\u4eec\u73b0\u5728\u5f88\u5c11\u628a JavaBean \u4e0e\u90a3\u4e2a\u53e4\u8001\u7684 2.0 \u7684\u00a0EJB \u641e\u6df7\uff0c\u4f46\u4e3a\u4ec0\u4e48\u660e\u660e\u7528 IDE \u4e3a\u5c5e\u6027\u751f\u6210\u7684 getter\/setter \u65b9\u6cd5\uff0c\u5e94\u7528\u4e00\u8fd0\u884c\uff0c\u8fd8\u662f\u62a5\u627e\u4e0d\u5230\u67d0\u4e2a bean \u5c5e\u6027\u7684 setter \u6216 getter \u65b9\u6cd5\u5462\uff1f<br\/>\n<br\/>\n\u8981\u77e5\u9053\uff0c\u5728 Sun \u7684\u7f51\u7ad9\u4e0a\u90a3\u4e2a\u5173\u4e8e JavaBean \u89c4\u8303\u7684 PDF \u6587\u6863\u53ef\u662f\u6709\u8db3\u8db3\u5b9e\u5b9e\u7684 114 \u9875\u554a\u3002\u96be\u514d\u6709\u4e9b\u89c4\u5219\u6709\u70b9\u53e4\u602a\uff0c\u81f3\u4f7f\u77e5\u540d\u7684 IDE \u90fd\u96be\u4ee5\u5e94\u5bf9\uff0c\u6240\u4ee5\u6211\u4eec\u8fd8\u662f\u6709\u5fc5\u8981\u4e86\u89e3\u5176\u4e2d\u4e8c\u4e09\uff0c\u6765\u89c4\u8303\u6211\u4eec\u7684 JavaBean \u548c\u89e3\u91ca\u4e00\u4e9b\u60c5\u5f62\u3002<br\/>\n<br\/>\nSun\u00a0 \u7684\u5173\u4e8e JavaBean \u89c4\u8303\u89c1\uff1a<a href=\"http:\/\/java.sun.com\/javase\/technologies\/desktop\/javabeans\/docs\/spec.html\">http:\/\/java.sun.com\/javase\/technologies\/desktop\/javabeans\/docs\/spec.html<\/a>\uff0c\u5176\u4e2d\u53ef\u4e0b\u8f7d\u5230 JavaBean \u89c4\u8303\u7684\u00a0 PDF \u6587\u6863\u3002"},{"title":"\u8bf7\u6559\u4e00\u4e0b Servlet \u4e2d\u5982\u4f55\u8bbe\u5b9a\u4e0b\u8f7d\u6587\u4ef6\u4fdd\u5b58\u7528\u7684\u5b57\u7b26\u96c6","link":"https:\/\/yanbin.blog\/servlet-download-encoding\/","pubDate":"Thu, 18 Jun 2009 03:33:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/servlet-download-encoding\/","description":"\n<p>\u5728\u524d\u9762\u4e00\u7bc7\u65e5\u5fd7\uff1a<a href=\"https:\/\/yanbin.blog\/understand-apply-struts2-file-download\/\" target=\"_blank\">\n\u7406\u89e3\u548c\u7075\u6d3b\u5e94\u7528 Struts2 \u7684\u6587\u4ef6\u4e0b\u8f7d\u529f\u80fd\n<\/a>\u00a0\u8fd8\u7559\u4e0b\u4e00\u4e2a\u95ee\u9898\uff0c\u5728 Servlet \u4e2d\u652f\u6301\u6587\u4ef6\u4e0b\u8f7d\u529f\u80fd\u65f6\uff0c\u5ba2\u6237\u4fdd\u5b58\u4e0b\u8f7d\u6587\u4ef6\u6240\u7528\u7684\u5b57\u7b26\u96c6\u603b\u662f ANSI(ISO8859-1)\uff0c\n\u5982\u4f55\u80fd\u8bbe\u5b9a\u5ba2\u6237\u4fdd\u5b58\u6587\u4ef6\u7528\u7684\u5b57\u7b26\u96c6\u5462\uff1f\u50cf BlogJava \u7684\u5907\u4efd\u6570\u636e\u529f\u80fd\u4e0b\u8f7d\u540e\u5c31\u662f\u7528\u7684 UTF-8 \u5b57\u7b26\u96c6\u7684\u3002\n\u81ea\u5df1\u4f5c\u4e86\u4e00\u4e9b\u5c1d\u8bd5\uff0c\u603b\u662f\u65e0\u6d4e\u4e8e\u4e8b\uff0c\u770b\u5982\u4e0b\u4ee3\u7801\u662f Servlet \u7684 doGet() \u65b9\u6cd5\uff1a<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">doGet<\/span><span class=\"p\">(<\/span><span class=\"n\">HttpServletRequest<\/span><span class=\"w\"> <\/span><span class=\"n\">request<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">HttpServletResponse<\/span><span class=\"w\"> <\/span><span class=\"n\">response<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">throws<\/span><span class=\"w\"> <\/span><span class=\"n\">ServletException<\/span><span class=\"p\">,<\/span><span class=\"w\"> <\/span><span class=\"n\">IOException<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"c1\">\/\/ PrintWriter out = response.getWriter();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">PrintWriter<\/span><span class=\"w\"> <\/span><span class=\"n\">out<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">PrintWriter<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">OutputStreamWriter<\/span><span class=\"p\">(<\/span><span class=\"n\">response<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">.<\/span><span class=\"na\">getOutputStream<\/span><span class=\"p\">(),<\/span><span class=\"w\"> <\/span><span class=\"s\">&#34;UTF-8&#34;<\/span><span class=\"p\">));<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"na\">setContentType<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;text\/plain;charset=UTF-8&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">response<\/span><span class=\"p\">.<\/span><span class=\"na\">setHeader<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Content-Disposition&#34;<\/span><span class=\"p\">,<\/span><span class=\"s\">&#34;attachment;filename=down.txt&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">write<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Servlet download file test&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">close<\/span><span class=\"p\">();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>"},{"title":"\u4f7f\u7528 DWR \u6211\u662f\u8fd9\u6837\u505a\u7b80\u5355\u5206\u9875\u7684[\u81ea\u5df1\u8bb0\u5f55\u4e00\u4e0b]","link":"https:\/\/yanbin.blog\/dwr-simple-pagination\/","pubDate":"Wed, 17 Jun 2009 21:21:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/dwr-simple-pagination\/","description":"\nDWR \u672c\u8eab\u672a\u63d0\u4f9b\u5206\u9875\u7684\u529f\u80fd\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u8981\u81ea\u5df1\u6765\u5b9e\u73b0\u3002\u5982\u679c\u628a\u540e\u53f0\u7684\u6240\u6709\u8bb0\u5f55\u90fd\u62c9\u5230\u9875\u9762\u7528 JS \u5206\u9875\uff0c\u90a3\u662f\u5f88\u4e0d\u73b0\u5b9e\u7684\u3002\u56e0\u6b64\uff0c\u867d\u8bf4\u662f DWR \u5206\u9875\uff0c\u4f46\u8fd8\u5f97\u670d\u52a1\u7aef\u6765\u652f\u6301\uff0c\u7531\u670d\u52a1\u7aef\u7684\u8fdc\u7a0b\u65b9\u6cd5\u53ea\u8fd4\u56de\u5f53\u524d\u9875\u6240\u663e\u793a\u7684\u8bb0\u5f55\uff0cDWR \u81ea\u5df1\u8981\u660e\u786e\u5f53\u524d\u662f\u7b2c\u51e0\u9875\uff0c\u662f\u5426\u6709\u4e0a\u4e00\u9875\u3001\u4e0b\u4e00\u9875\u3002<\/p>\n<br\/>\n\u8fd8\u662f\u7528\u4ee3\u7801\u6765\u8bf4\u660e\u5427\uff0c\u5206\u89e3\u4e3a\u4e09\u90e8\u5206\u4ee3\u7801\uff1a<br\/><br\/>\n1. \u66b4\u9732\u7ed9 DWR \u8c03\u7528\u7684 Java \u7684\u8fdc\u7a0b\u65b9\u6cd5<br \/>\n2. JS \u7684 DWR \u8c03\u7528<br \/>\n3. \u663e\u793a\u5206\u9875\u5bfc\u822a\u680f<br\/><br\/>\n<strong>DWR \u8981\u8c03\u7528\u7684\u00a0Java \u65b9\u6cd5\uff1a<\/strong><br\/>"},{"title":"DWR \u7684 DWRUtil.addRows() \u51fd\u6570\u7684\u4f7f\u7528","link":"https:\/\/yanbin.blog\/dwr-dwrutil-addrows-function\/","pubDate":"Fri, 12 Jun 2009 02:55:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/dwr-dwrutil-addrows-function\/","description":"\n\u4f7f\u7528 DWR \u4e00\u4e2a\u5e38\u7528\u7684\u64cd\u4f5c\u5c31\u662f\u53d6\u5230\u7684\u6570\u636e\u5f80\u8868\u683c\u91cc\u586b\u5145\uff0c\u8fd9\u5c31\u662f DWR \u7684 DWRUtil.addRows() \u64cd\u4f5c\u4e86\uff0c\u672c\u7bc7\u5c31\u662f\u4ee5\u4f8b\u5b50\u8be6\u7ec6\u8bf4\u660e\u8fd9\u4e2a\u51fd\u6570\u7684\u7528\u6cd5\u3002\u800c\u53e6\u4e00\u4e2a\u79fb\u9664\u6240\u6709\u8868\u683c\u884c\u7684\u64cd\u4f5c DWRUtil.removeAllRows() \u4f7f\u7528\u7b80\u5355\u5c31\u4e0d\u591a\u8bf4\u660e\u4e86\u3002<\/p>\n<br\/>\n\u5f00\u59cb\u7684\u65f6\u5019\u6211\u4eec\u8fd8\u662f\u8981\u5bf9\u8fd9\u4e2a\u51fd\u6570\u7684\u539f\u578b\u52a0\u4ee5\u8bf4\u660e\uff0c\u867d\u7136\u6709\u4e9b\u4fd7\u5957\uff0c\u4f46\u8fd8\u662f\u5fc5\u8981\u7684\uff1a<br\/><br\/>\n<span style=\"color: #800080;\">DWRUtil.addRows(id, array, cellfuncs, [options]);<\/span><br\/><br\/>\n\u63cf\u8ff0:<br \/>\n\u5411\u6307\u5b9aid\u7684table\u5143\u7d20\u6dfb\u52a0\u884c\u3002\u5b83\u4f7f\u7528\u6570\u7ec4\u4e2d\u7684\u6bcf\u4e00\u4e2a\u5143\u7d20(\u5bf9\u8c61)\u5728table\u4e2d\u521b\u5efa\u4e00\u884c\u3002\u7136\u540e\u7528 cellfuncs \u6570\u7ec4\u4e2d\u7684\u5bf9\u5e94\u7684\u51fd\u6570\u521b\u5efa\u4e00\u4e2a\u5217\u3002\u5355\u5143\u683c\u662f\u4f9d\u6b21\u7528 cellfunc \u6839\u636e\u6ca1\u6709\u6570\u7ec4\u4e2d\u7684\u5143\u7d20\u521b\u5efa\u51fa\u6765\u7684\u3002<br\/><br\/>\nDWR1.1\u5f00\u59cb\uff0caddRows()\u4e5f\u53ef\u4ee5\u7528\u5bf9\u8c61(\u904d\u5386\u5bf9\u8c61\u7684\u5c5e\u6027\u521b\u5efa\u884c)\u505a\u4e3a\u6570\u636e\u3002\u5982\u679c\u4f60\u7528\u4e00\u4e2a\u5bf9\u8c61\u4ee3\u66ff\u4e00\u4e2a\u6570\u7ec4\u6765\u521b\u5efa\u5355\u5143\u683c\uff0c\u8fd9\u4e2a\u5bf9\u8c61\u4f1a\u88ab\u4f20\u9012\u7ed9cell\u51fd\u6570\u3002"},{"title":"\u4e86\u89e3 Java ClassLoader -- \u4e3a\u4fbf\u4e8e\u9605\u8bfb\u6574\u7406\u505a\u6210\u4e86\u4e00\u4e2a CHM \u6587\u4ef6","link":"https:\/\/yanbin.blog\/understand-java-classloader-chm\/","pubDate":"Wed, 13 May 2009 05:43:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-classloader-chm\/","description":"\n<p>Java \u7a0b\u5e8f\u5458\u8fd8\u662f\u5e94\u8be5\u5bf9 Java ClassLoader\u00a0\u6709\u6240\u4e86\u89e3\uff0c\u66fe\u7ecf\u95ee\u8fc7\u4e00\u4e2a\u505a Java \u7684 JVM\u00a0 \u662f\u4ec0\u4e48\uff1f\u7ed3\u679c\u662f\uff1a\u6ca1\u542c\u8fc7\u3002\n\u6c57\u989c\u4e86\u5427\uff0c\u4f46\u4e5f\u4e0d\u5c11\u5199 JSP \u7684\u751a\u81f3\u662f Java \u4ee3\u7801\u7684\u771f\u7684\u53ef\u80fd\u4e0d\u4e86\u89e3 ClassLoader\uff0c\u6240\u4ee5\u5bf9 Classpath \u4ecd\u7136\u8d39\u89e3\u3002\nJRE \u672c\u8eab\u5c31\u6709\u4e00\u4e2a ClassLoader \u5c42\u6b21\uff0c\u66f4\u522b\u8bf4\u5728\u5404\u79cd\u5e94\u7528\u670d\u52a1\u5668\u4e2d\u56e0\u4e3a ClassLoader \u5c42\u6b21\u7684\u56e0\u7d20\u4ea7\u751f\u4e86\u83ab\u540d\u5176\u5999\u7684\u95ee\u9898\u3002\n\u4f8b\u5982\uff0c\u6570\u636e\u5e93\u9a71\u52a8\u6709\u65f6\u5019\u5e94\u8be5\u653e\u5728\u54ea\u4e2a\u76ee\u5f55\u4e2d\uff0c\u600e\u4e48\u5e94\u7528\u5374\u52a0\u8f7d\u4e86\u4e00\u4e2a\u65e7\u7248\u7684 Jar \u5305\u7b49\u7b49\u3002<\/p>\n<p>\u672c\u7bc7\u7684 Understand Java ClassLoader.chm \u6587\u4ef6\u662f\u6211\u6839\u636e IBM \u5f00\u53d1\u8005\u7f51\u7ad9\u4e0a\u7684\n<a href=\"https:\/\/www6.software.ibm.com\/developerworks\/cn\/education\/java\/j-classloader\/tutorial\">\nhttps:\/\/www6.software.ibm.com\/developerworks\/cn\/education\/java\/j-classloader\/tutorial<\/a>\n\u6574\u7406\u800c\u6210\u7684\u3002\u4ee5\u524d\u662f\u7528 Visual CHM \u5de5\u5177\u6765\u5236\u4f5c CHM \u6587\u4ef6\uff0c\u800c\u8fd9\u4e2a\u5462\u662f\u7528 FAR \u751f\u6210\u7684\uff0c\u611f\u89c9 FAR \u7684\u529f\u80fd\u8981\u5f3a\u5927\u4e9b\u3002"},{"title":"\u56db\u3001\u6df1\u5165\u4e0bpackage,import:(\u6458)","link":"https:\/\/yanbin.blog\/inside-package-import-4\/","pubDate":"Fri, 10 Apr 2009 11:19:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/inside-package-import-4\/","description":"\n\u6ce8\uff1a\u56e0package,import\u6d89\u53ca\u8f83\u591a\u5185\u5bb9\uff0c\u53e6\u5f00\u4e00\u4e2a\u5e16\u5b50\u4e86\uff0c\u4f46\u4e3a\u4e86\u4fdd\u8bc1\u6b64\u8d34\u5185\u5bb9\u4e0e\u6807\u9898\u76f8\u7b26\uff0c\u5728\u6b64\u4e5f\u628a\u5199\u4e0a\u4e86\u8be5\u90e8\u5206\u5185\u5bb9\uff08\u63aa\u8f9e\u6709\u6574\u7406\uff09<br\/>\n\u00a0<br\/>\n<strong>\u6df1\u5165\u4e0bpackage,import:<\/strong><br\/>\n<br\/>\n\u00a0 \u00a0 \u51e1\u662f\u548cjava\u8bbe\u8ba1\u76f8\u5173\u7684\u5de5\u5177\uff0c\u90fd\u4f1a\u7528\u5230package\u4e0eimport\uff0c\u5230\u5e95\u8fd9\u4e24\u4e2a\u4e1c\u4e1c\u662f\u505a\u4ec0\u4e48\u7684\uff0c\u5982\u4f55\u7528\uff0c\u5b83\u4eec\u7684\u5185\u90e8\u673a\u7406\u53c8\u662f\u5982\u4f55\u5462\uff0c\u4eca\u4ec5\u5c31\u4e2a\u4eba\u7684\u7406\u89e3\u8c08\u8c08\u770b\u6cd5\uff0c\u91cc\u9762\u4e00\u4e9b\u9519\u6f0f\uff0c\u7591\u70b9\u4e5f\u8bf7\u670b\u53cb\u4eec\u6307\u51fa\uff1a<br\/>\n<br\/>\n\u4e00\uff0c package,import\u5f15\u5165\u539f\u56e0\uff1a<br\/>\n<br\/>\npackage:<br\/>\n\u00a0 \u00a0 \u6211\u4eec\u90fd\u719f\u6089\u8d85\u5e02\uff0c\u8d85\u5e02\u867d\u7136\u5e9e\u5927\uff0c\u4e1c\u897f\u7e41\u591a\uff0c\u4f46\u7ba1\u7406\u7684\u4e95\u4e95\u6709\u6761\uff0c\u5f88\u5bb9\u6613\u627e\u5230\u67d0\u6837\u4e1c\u4e1c\uff0c\uff1b\u4e4b\u6240\u4ee5\u80fd\u5982\u6b64\uff0c\u4e00\u4e2a\u5f88\u91cd\u8981\u7684\u539f\u56e0\u5c31\u662f\u91c7\u7528\u4e86\u5206\u7c7b\u653e\u7f6e\uff0c\u8fd9\u6837\u65e2\u65b9\u4fbf\u4e86\u7ba1\u7406\uff0c\u53c8\u65b9\u4fbf\u4e86\u5bfb\u627e<br\/>\n\u00a0 \u00a0 Package\u4e5f\u662f\u4e00\u4e2a\u5206\u7c7b\u653e\u7f6e\u4e1c\u4e1c\u7684\u533a\u57df\uff0c\u4e0d\u8fc7\u5b83\u653e\u7684\u4e0d\u662f\u5546\u54c1\u800c\u662fjava\u4e2d\u7684\u7c7b\u3002Java\u4e2d\u6709\u5404\u79cd\u5404\u6837\u7684\u7c7b\uff0c<br\/>\n\u5185\u5bb9\u4e30\u5bcc\uff0c\u7e41\u591a\uff0c\u4e3a\u4e86\u66f4\u597d\u7684\u7ba1\u7406\uff0c\u8bc6\u522b\uff0c\u5c31\u4e3a\u6bcf\u4e00\u7c7b\u578b\u7684\u7c7b\u5efa\u7acb\u4e00\u4e2a\u533a\u57df\uff0c\u8fd9\u4e2a\u533a\u57df\u5c31\u662f\u5305"},{"title":"\u4e09\u3001\u6211\u5bf9java\u4e2d\u7c7b\u8def\u5f84\u7684\u7406\u89e3(\u6458)","link":"https:\/\/yanbin.blog\/understand-java-classpath\/","pubDate":"Fri, 10 Apr 2009 11:18:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-classpath\/","description":"\nJava\u4e2d\u7684\u7c7b\u8def\u5f84\u5206\u201c\u7f16\u8bd1\u540e\u7684\u5b58\u653e\u8def\u5f84\u201d \u548c \u201c\u8fd0\u884c\u65f6\u7684\u67e5\u627e\u8def\u5f84\u201d\uff0c\u4e0b\u9762\u5206\u522b\u8c08\u8c08<br\/>\n<br\/>\n<strong>1. java\u7f16\u8bd1\u540e\u7684\u7c7b\u5b58\u653e\u8def\u5f84\uff0c<\/strong><br\/>\n<br\/>\n\u5206\u4e24\u79cd\uff1a\u201c\u6e90\u6587\u4ef6\u88ab\u76f4\u63a5\u7f16\u8bd1\u201d\u548c\u201c\u6e90\u6587\u4ef6\u88ab\u95f4\u63a5\u7f16\u8bd1\u201d<br\/>\n\u00a0 \u00a0 \u00a0 \u00a0 1-1\u6e90\u6587\u4ef6\u76f4\u63a5\u7f16\u8bd1<br\/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u4ec0\u4e48\u662f\u6e90\u6587\u4ef6\u76f4\u63a5\u7f16\u8bd1\uff1a\u5373\u901a\u8fc7javac\u76f4\u63a5\u7f16\u8bd1\u6e90\u6587\u4ef6<br\/>\n\u5efa\u7acbd:\\my\u76ee\u5f55\uff0c\u5728\u5176\u76ee\u5f55\u4e0b\u65b0\u5efa\u4e00\u4e2a\u6587\u4ef6\uff0c\u5982\u4e0b\uff1a<br\/>\n<br\/>\nPublic class HelloWorld{<br\/>\n\u00a0 \u00a0 Public static void main(String[] args){<br\/>\n\u00a0 \u00a0 \u00a0 \u00a0 System.out.println(\u201cHelloWorld\u201d);<br\/>\n\u00a0 \u00a0 }<br\/>\n}<br\/>\n<br\/>\n\u5728\u547d\u4ee4\u884c\u8f93\u5165\uff1a javac HelloWorld.java<br\/>\n<br\/>\n\u8fd9\u65f6\u5728d:\\my\u8fd9\u4e2a\u76ee\u5f55\u4e0b\u5c31\u4ea7\u751f\u4e86\u4e00\u4e2a\u7c7b\u6587\u4ef6HelloWorld.class"},{"title":"\u4e8c\u3001\u6211\u5bf9java\u4e2d\u7c7b\u88c5\u8f7d\u7684\u7406\u89e3(\u6458)","link":"https:\/\/yanbin.blog\/understand-java-classloader\/","pubDate":"Fri, 10 Apr 2009 11:13:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-classloader\/","description":"\n1.Java\u4e2d\u7684\u6240\u6709\u7c7b\uff0c\u5fc5\u987b\u88ab\u88c5\u8f7d\u5230jvm\u4e2d\u624d\u80fd\u8fd0\u884c\uff0c\u8fd9\u4e2a\u88c5\u8f7d\u5de5\u4f5c\u662f\u7531jvm\u4e2d\u7684\u7c7b\u88c5\u8f7d\u5668\u5b8c\u6210\u7684\uff0c<br\/>\n\u7c7b\u88c5\u8f7d\u5668\u6240\u505a\u7684\u5de5\u4f5c\u5b9e\u8d28\u662f\u628a\u7c7b\u6587\u4ef6\u4ece\u786c\u76d8\u8bfb\u53d6\u5230\u5185\u5b58\u4e2d<br\/>\n<br\/>\n2.java\u4e2d\u7684\u7c7b\u5927\u81f4\u5206\u4e3a\u4e09\u79cd\uff1a<br\/>\n\u00a0 \u00a0 1.\u7cfb\u7edf\u7c7b<br\/>\n\u00a0 \u00a0 2.\u6269\u5c55\u7c7b<br\/>\n\u00a0 \u00a0 3.\u7531\u7a0b\u5e8f\u5458\u81ea\u5b9a\u4e49\u7684\u7c7b<br\/>\n<br\/>\n3.\u7c7b\u88c5\u8f7d\u65b9\u5f0f\uff0c\u6709\u4e24\u79cd<br\/>\n\u00a0 \u00a0 1.\u9690\u5f0f\u88c5\u8f7d\uff0c \u7a0b\u5e8f\u5728\u8fd0\u884c\u8fc7\u7a0b\u4e2d\u5f53\u78b0\u5230\u901a\u8fc7new \u7b49\u65b9\u5f0f\u751f\u6210\u5bf9\u8c61\u65f6\uff0c\u9690\u5f0f\u8c03\u7528\u7c7b\u88c5\u8f7d\u5668\u52a0\u8f7d\u5bf9\u5e94\u7684\u7c7b\u5230jvm\u4e2d\uff0c<br\/>\n\u00a0 \u00a0 2.\u663e\u5f0f\u88c5\u8f7d\uff0c \u901a\u8fc7class.forname()\u7b49\u65b9\u6cd5\uff0c\u663e\u5f0f\u52a0\u8f7d\u9700\u8981\u7684\u7c7b<br\/>\n\u00a0 \u9690\u5f0f\u52a0\u8f7d\u4e0e\u663e\u5f0f\u52a0\u8f7d\u7684\u533a\u522b\uff1a<br\/>\n\u00a0 \u00a0 \u4e24\u8005\u672c\u8d28\u662f\u4e00\u6837?\uff0c"},{"title":"\u4e00\u3001\u6211\u5bf9java\u4e2d\u7f16\u7801\u7684\u7406\u89e3(\u6458)","link":"https:\/\/yanbin.blog\/understand-java-encoding\/","pubDate":"Fri, 10 Apr 2009 11:12:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/understand-java-encoding\/","description":"\n1. \u7f16\u7801\u7684\u4ea7\u751f<br\/>\n\u00a0 \u00a0 \u5bf9\u7535\u8111\u800c\u8a00\uff0c\u53ea\u8ba4\u8bc60\uff0c1\uff1b \u800c\u73b0\u5b9e\u4e16\u754c\u662f\u7531\u5404\u79cd\u7b26\u5408\u7ec4\u6210\uff0c\u8981\u60f3\u8ba9\u8ba1\u7b97\u673a\u89e3\u91ca\u73b0\u5b9e\u4e16\u754c\uff0c\u5c31\u5fc5\u987b\u5efa\u7acb\u4e00\u5957\u73b0\u5b9e\u4e16\u754c\u4e2d\u7684\u7b26\u53f7 \u548c \u8ba1\u7b97\u673a\u80fd\u5904\u7406\u7684\u7b26\u53f7\u4e4b\u95f4\u7684\u5bf9\u5e94\u5173\u7cfb\uff0c\u8fd9\u4e2a\u5bf9\u5e94\u5173\u7cfb\u5c31\u662f\u7f16\u7801<br\/>\n<br\/>\n2. \u5728\u4e00\u4e2a\u7f16\u8f91\u5668\u4e2d\uff0c\u5f53\u6211\u4eec\u5728\u952e\u76d8\u4e0a\u6572\u5165\u4e00\u4e2a\u5b57\u7b26\u65f6\uff0c\u5728\u8be5\u7f16\u8f91\u5668\u4e0a\u5c31\u4f1a\u663e\u793a\u5bf9\u5e94\u7684\u5b57\u7b26\uff0c\u8fd9\u4e2a\u8fc7\u7a0b\u7528\u8ba1\u7b97\u673a\u6267\u884c\u6b65\u9aa4\u6765\u89e3\u91ca\u5927\u81f4\u5982\u4e0b\uff1a<br\/>\n\u00a0 \u00a0 \u8f93\u5165\u5b57\u7b26 \u2013&gt; \u7f16\u8f91\u5668\u6839\u636e\u8bbe\u5b9a\u7684\u7f16\u7801\u683c\u5f0f\u628a\u5b57\u7b26\u7f16\u621001\u683c\u5f0f -&gt; \u7f16\u8f91\u5668\u518d\u6309\u7f16\u7801\u89c4\u5219\u5bf901\u89e3\u7801\u2013&gt; \u663e\u793a\u5b57\u7b26<br\/>\n<br\/>\n3.\u51e0\u79cd\u5e38\u89c1\u7684\u7f16\u7801\u683c\u5f0f<br\/>\n1. ASCII\u7801\uff1a\u00a0<br\/>\n\u00a0 \u00a0 \u8ba1\u7b97\u673a\u4e2d\u6700\u65e9\u7684\u4e00\u5957\u7f16\u7801\u683c\u5f0f\uff0c\u91c7\u75287\u4f4d\u4e8c\u8fdb\u5236\u8868\u793a\u4e00\u4e2a\u5e38\u89c1\u7684\u5b57\u7b26\uff0c\u6211\u4eec\u77e5\u9053\uff0c\u8ba1\u7b97\u673a\u662f\u6309\u7167\u5b57\u8282\u6765\u5904\u7406\u6570\u636e\u7684\uff0c\u4e00\u4e2a\u5b57\u82828\u4f4d\uff0c\u56e0\u6b64\u7528\u4e00\u4e2a\u5b57\u8282\u5c31\u53ef\u4ee5\u8868\u793a\u4e00\u4e2aASCII\u5b57\u7b26\uff0c\u4e14\u8fd8\u6709\u4e00\u4e2a\u4f4d\u7a7a\u4f4d\uff0c\u89c4\u5b9a\u6700\u9ad8\u4f4d\u4e0d\u7528\uff0c\u5e38\u89c1\u7684\u628a\u6700\u9ad8\u4f4d\u8bbe\u5b9a\u4e3a0\u3002 7\u4f4d\u4e8c\u8fdb\u5236\u6700\u591a\u53ef\u4ee5\u8868\u793a128\u4e2a\u5b57\u7b26\uff082\u76847\u6b21\u65b9\uff09\uff0cASCII\u7801\u53ea\u80fd\u8868\u793a\u5e38\u89c1\u7684\u82f1\u6587\u5b57\u7b26\uff0c\u6570\u5b57\uff0c\u548c\u5c11\u91cf\u7684\u7b26\u53f7\uff08\u6ca1\u529e\u6cd5\uff0c\u8c01\u8ba9\u8ba1\u7b97\u673a\u662f\u4eba\u5bb6\u8001\u7f8e\u5148\u53d1\u660e\u7684\u554a\uff0c\u4f18\u5148\u8003\u8651\u672c\u571f\u8bed\u8a00\uff0c\u7406\u89e3\u7406\u89e3\uff09<br\/>\n\u6ce8\uff1a \u7531\u4e8eASCII\u6700\u65e9\u5b9a\u4e49\uff0c\u4f7f\u7528\u5e7f\u6cdb\uff0c\u4f7f\u5f97\u4e4b\u540e\u51fa\u73b0\u7684\u65b0\u7684\u201d\u5b57\u7b26\u201c(\u4e0d\u662f\u6c49\u5b57\u5594)\u7f16\u7801\u90fd\u5c3d\u91cf\u548c\u5b83\u517c\u5bb9"},{"title":"JVM \u5bf9 Java \u5f02\u5e38\u7684\u5904\u7406\u539f\u7406\uff08try.catch \u5b50\u53e5\uff09","link":"https:\/\/yanbin.blog\/jvm-java-handle-try-catch\/","pubDate":"Tue, 07 Apr 2009 09:38:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/jvm-java-handle-try-catch\/","description":"\n\u6700\u521d\u6211\u4eec\u7528 Java \u5199 JSP \u7684\u65f6\u5019\uff0c\u51e0\u4e4e\u53ef\u4ee5\u4e0d\u89e6\u53ca\u5f02\u5e38\uff0c\u56e0\u4e3a Servlet \u5bb9\u5668\u4f1a\u628a API \u629b\u51fa\u7684\u5f02\u5e38\u5305\u88c5\u6210 ServletException \u4e22\u7ed9\u5bb9\u5668\u53bb\u5904\u7406\u3002\u518d\u540e\u6765\u5e94\u7528\u5206\u5c42\uff0c\u4ee3\u7801\u4e2d\u8981\u5904\u7406\u7684\u5f02\u5e38\u4fbf\u591a\u4e86\uff0c\u4e00\u822c\u4f1a\u8f6c\u6362\u6210\u81ea\u5b9a\u4e49\u7684\u4e1a\u52a1\u5f02\u5e38\u7c7b\uff0c\u7528 try-catch-throw customerException-finally\u3002\u518d\u5230\u5982\u4eca\u5404\u79cd\u6846\u67b6\u65e5\u81fb\u6210\u719f\uff0c\u4ee3\u7801\u4e2d\u663e\u5f0f\u7684\u5f02\u5e38\u5904\u7406\u53c8\u6e10\u6e10\u5c11\u4e86\u4e9b\uff0c\u501f\u52a9\u4e8e AOP \u6a2a\u884c\uff0c\u5f02\u5e38\u5bf9\u4e1a\u52a1\u7684\u5f71\u54cd\u63cf\u8ff0\u88ab\u79fb\u5165\u5230\u4e86\u914d\u7f6e\u6587\u4ef6\u4e2d\u4e86\uff0c\u4f8b\u5982\uff0c\u4e8b\u7269\u5904\u7406\u3001\u6743\u9650\u7684\u63a7\u5236\u7b49\u3002<br\/>\n<br\/>\n\u8fd9\u9887\u6709\u4e9b\u50cf\u624b\u673a\u7684\u53d1\u5c55\uff0c\u5f53\u901a\u4fe1\u6280\u672f\u4e0d\u751a\u53d1\u8fbe\u7684\u65f6\u5019\uff0c\u624b\u91cc\u6293\u7684\u662f\u7816\u5934\uff0c\u4fe1\u53f7\u662f\u6a21\u62df\u7684\u3002\u540e\u6765\u6162\u6162\u7626\u8eab\u6210\u4e24\u4e09\u6839\u624b\u6307\u5927\u5c0f\uff0c\u751a\u81f3\u662f\u5c31\u4e00\u652f\u7b14\u4f3c\u7684\uff0c\u53ef\u5982\u4eca\u4fe1\u606f\u91cf\u5927\u4e86\uff0c\u5c4f\u5e55\u8981\u5927\uff0c\u518d\u914d\u4e0a QWERT \u952e\u76d8\uff0c\u673a\u8eab\u81ea\u7136\u5c31\u80a5\u7855\u4e86\u3002<br\/>\n<br\/>\n\u5f53\u7136\u4e0e\u624b\u673a\u7684\u4e2a\u5934\u53d8\u8fc1\u7565\u6709\u4e0d\u540c\u7684\u662f\uff0c\u4efb\u51ed\u4f60\u600e\u4e48\u5bf9\u5f85 Java \u4e2d\u5f02\u5e38\uff0c\u5207\u5165 AOP \u4e5f\u597d\uff0c\u5728 JVM \u4e2d\u5904\u7406\u5f02\u5e38\u7684\u5185\u5728\u673a\u5236\u59cb\u7ec8\u672a\u53d8\u3002"},{"title":"\u6709\u5173\u4e8e JVM \u7684\u5783\u573e\u6536\u96c6(\u4e09)","link":"https:\/\/yanbin.blog\/about-jvm-gc-3\/","pubDate":"Wed, 01 Apr 2009 00:27:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/about-jvm-gc-3\/","description":"\n<strong>\u5bf9\u8c61\u53ef\u89e6\u53ca\u65f6\u7684\u751f\u547d\u5468\u671f<\/strong><\/p><br\/><br\/>\n\u5728 JVM 1.2 \u4e4b\u524d\uff0c\u5806\u4e2d\u7684\u5bf9\u8c61\u5206\u4e3a\u4e09\u79cd\u72b6\u6001\uff0c\u5206\u522b\u662f\uff1a<br\/><br\/>\n1. \u53ef\u89e6\u53ca\u7684 -- \u4ece\u6839\u8282\u70b9\u5f00\u59cb\u53ef\u8ffd\u8e2a\u5230<br \/>\n2. \u53ef\u590d\u6d3b\u7684 -- \u4ece\u6839\u8282\u70b9\u5f00\u59cb\u8ffd\u8e2a\u4e0d\u5230\uff0c\u4f46\u6709\u53ef\u80fd\u88ab\u7ec8\u7ed3\u65b9\u6cd5\u89e6\u53ca\u5e76\u590d\u6d3b\u3002\u4e0d\u4ec5\u4ec5\u662f\u90a3\u4e9b\u58f0\u660e\u4e86 finalize() \u65b9\u6cd5\u7684\u5bf9\u8c61\uff0c\u800c\u662f\u6240\u6709\u7684\u5bf9\u8c61\u90fd\u8981\u7ecf\u8fc7\u53ef\u590d\u6d3b\u72b6\u6001<br \/>\n3. \u4e0d\u53ef\u89e6\u53ca\u7684 -- \u4ee5\u4e0a\u4e24\u79cd\u53ef\u80fd\u6027\u90fd\u4e0d\u5b58\u5728\uff0c\u53ef\u4ee5\u771f\u6b63\u56de\u6536\u5b83\u4eec\u6240\u5360\u636e\u7684\u5185\u5b58\u4e86<br\/><br\/>\n\u7248\u672c 1.2 \u4e2d\uff0c\u53ef\u89e6\u53ca\u6309\u5f3a\u5f31\u8fdb\u4e00\u6b65\u7ec6\u5206\u4e3a\uff1a<br\/><br\/>\n1. \u5f3a\u53ef\u89e6\u53ca -- \u5373\u539f\u6765\u7684\u53ef\u89e6\u53ca\uff0c\u4ece\u6839\u8282\u70b9\u5f00\u59cb\u7684\u4efb\u4f55\u76f4\u63a5\u5f15\u7528\uff0c\u5982\u4e00\u4e2a\u5c40\u90e8\u53d8\u91cf\u6216\u4efb\u4f55\u4ece\u5f3a\u53ef\u89e6\u53ca\u5bf9\u8c61\u7684\u5b9e\u4f8b\u5f15\u7528\u7684\u5bf9\u8c61<br \/>\n2. \u8f6f\u53ef\u89e6\u53ca -- \u8868\u73b0\u4e3a SoftReference \u6240\u5f15\u7528\u7684\u5bf9\u8c61<br \/>\n3. \u5f31\u53ef\u89e6\u53ca -- \u8868\u73b0\u4e3a WeakReference \u6240\u5f15\u7528\u7684\u5bf9\u8c61<br \/>\n4. \u5f71\u5b50\u53ef\u89e6\u53ca -- \u8868\u73b0\u4e3a PhantomReference \u6240\u5f15\u7528\u7684\u5bf9\u8c61"},{"title":"\u7528 p6spy \u6765\u89c2\u5bdf Java \u7a0b\u5e8f\u4e2d\u6267\u884c\u7684\u6240\u6709 SQL \u8bed\u53e5\uff08\u4e94. \u7ed3\u5408 IronTrack SQL\uff09","link":"https:\/\/yanbin.blog\/p6spy-view-executing-sql-irontrack\/","pubDate":"Tue, 31 Mar 2009 03:18:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/p6spy-view-executing-sql-irontrack\/","description":"\n<p>\u672c\u60f3\u628a p6spy \u7ed3\u5408 SQL Profiler \u6216 IronTrack SQL \u7684\u4f7f\u7528\u4ecb\u7ecd\u6387\u51d1\u4e8e\u4e00\u5757\u6765\u5199\u3002\u7b80\u5355\u70b9\u8bf4\uff0c\u53ea\u662f\u4e00\u8d34\u4e0a\u56fe\u6837\uff0c\u7bc7\u5e45\u4fbf\u9700\u62d6\u62c9\u96be\u9042\u4eba\u613f\uff0c\u4e5f\u597d\uff0c\n\u7d22\u6027\u628a\u5b83\u4eec\u5206\u6210\u4e24\u4e2a\u7bc7\u7ae0\u3002\u4e00\u6765\u6bcf\u7bc7\u4e3b\u65e8\u9c9c\u660e\uff0c\u4e8c\u6765\u4e94\u7bc7\u6210\u4e00\u7cfb\u5217\u6bd4\u8d77\u56db\u66f4\u6765\u7684\u81ea\u7136\u4e14\u5409\u5229\u3002<\/p>\n<p>\u524d\u9762\u8bb2\u8fc7 p6spy \u672c\u8eab\u5c31\u53ef\u5229\u7528 Log4j \u7684\u00a0SocketAppender \u5411\u8fdc\u7aef\u53d1\u9001\u65e5\u5fd7\uff0cSQL Profiler\u00a0\u4e0d\u8fc7\u662f\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\u4f5c\u4e86\u8fdb\u4e00\u6b65\u62d3\u5c55\u3002\n\u800c\u63a5\u4e0b\u6765\u8981\u8bf4\u7684 IronTrack SQL \u5c31\u7565\u6709\u4e0d\u540c\u4e86\uff0c\u770b\u5b83\u5e26\u7684 p6spy.properties \u6587\u4ef6\uff0c\u91cc\u9762\u6709 IronTrack SQL \u7ed9 p6spy \u5b9a\u5236\u7684\u4e00\u4e2a\u6a21\u5757\uff1a\nmodule.ibeam=com.irongrid.ibeam.server.IBeamFactory\u3002\u5b83\u7528\u5230\u4e86 log4j-1.2.8.jar\uff0c\u4e0d\u8fc7\u8fd8\u5f97\u7814\u7a76\u4e0b Log4j \u5728\u5176\u4e2d\u6240\u8d77\u7684\u4f5c\u6765\u3002\n\u73b0\u5728\u5c31\u6765\u4ecb\u7ecd p6spy \u7ed3\u5408 IrconTrack SQL \u7684\u4f7f\u7528\uff0c\u6700\u597d\u662f\u4f60\u77e5\u9053\u5982\u4f55\u5355\u72ec\u4f7f\u7528 p6spy\u3002\u538b\u7f29\u5305\u91cc\u6709\u6587\u6863\uff1a\u662f IronTrackSQL\\docs\\index.html\u3002<\/p>"},{"title":"\u7528 p6spy \u6765\u89c2\u5bdf Java \u7a0b\u5e8f\u4e2d\u6267\u884c\u7684\u6240\u6709 SQL \u8bed\u53e5\uff08\u56db. \u7ed3\u5408 SQL Profiler\uff09","link":"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-profiler\/","pubDate":"Mon, 30 Mar 2009 20:34:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-profiler\/","description":"\n<p>p6spy \u867d\u597d\uff0c\u4f46\u628a SQL \u8bed\u53e5\u8f93\u51fa\u5230\u6587\u4ef6\u6216\u662f\u63a7\u5236\u53f0\u4e2d\u770b\u8d77\u6765\u6709\u4e9b\u5403\u529b\u3002\u82e5\u80fd\u56fe\u5f62\u754c\u9762\u5c55\u793a\u51fa\u6765\u4fbf\u53ef\u4e00\u76ee\u4e86\u7136\uff0c\u4eb2\u5207\u8bb8\u591a\u3002\u6709\u79cd\u65b9\u6cd5\u662f\u914d\u7f6e p6spy.properties\n\u4f7f\u7528 Log4j \u7684 SocketAppender\uff0c\u7136\u540e\u542f\u52a8 Log4j \u7684 org.apache.log4j.net.SocketServer \u754c\u9762\uff0c\u6216\u662f\u5728 Eclipse log4j plug-in \u4e2d\u4e5f\u80fd\u89c2\u5bdf\u6240\u6267\u884c\u7684 SQL \u8bed\u53e5\u3002<\/p>\n<p>\u4e0d\u8fc7\u8fd8\u6709\u79cd\u66f4\u4e13\u4e1a\u505a\u6cd5\uff0c\u672c\u7bc7\u5c06\u4ecb\u7ecd p6spy \u5982\u4f55\u7ed3\u5408 Sql Profiler \u6216 IronTrack SQL \u6765\u4f7f\u7528\uff0c\u5e76\u9644\u4ee5\u8d34\u56fe\uff0c\u6765\u611f\u53d7\u4e00\u4e0b\u5427\u3002\u4e5f\u4ee5\u6b64\u6765\u5b8c\u6210\u5173\u4e8e p6spy \u7684\u8fd9\u4e2a\u7cfb\u5217\u3002\n\u5176\u5b9e\u4f60\u5230\u540e\u9762\u4e5f\u4f1a\u53d1\u73b0\uff0c\u5373\u4fbf\u662f\u7528 Sql Pofier \u7684\u5b9e\u73b0\u8fc7\u7a0b\u4e5f\u662f\u501f\u52a9\u4e86 Log4j \u7684 SocketApender\uff0c\u4f60\u53ef\u4ee5\u4ece\u5b83\u81ea\u5df1\u5e26\u7684 p6spy.properties \u6587\u4ef6\u4e2d\u7684\u914d\u7f6e\u770b\u51fa\u6765\uff0c\n\u5373\u5176\u4e2d\u7684 log4j.appender.SQLPROFILER_CLIENT=org.apache.log4j.net.SocketAppender \u8fd9\u4e48\u4e00\u4e2a\u914d\u7f6e\u3002"},{"title":"\u7528 p6spy \u6765\u89c2\u5bdf Java \u7a0b\u5e8f\u4e2d\u6267\u884c\u7684\u6240\u6709 SQL \u8bed\u53e5\uff08\u4e8c. Tomcat \u4e0b\u7684\u914d\u7f6e\uff09","link":"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-tomcat\/","pubDate":"Fri, 13 Mar 2009 02:15:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-tomcat\/","description":"\n\u5728\u524d\u7bc7 <a href=\"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-first\/\" target=\"_blank\" rel=\"noopener\">\u7528 p6spy \u6765\u89c2\u5bdf Java \u7a0b\u5e8f\u4e2d\u6267\u884c\u7684\u6240\u6709 SQL \u8bed\u53e5(\u4e00. \u5f15\u5b50\uff09<\/a>\u00a0\u5927\u7565\u4ecb\u7ecd\u4e86 p6spy\uff0c\u5e76\u4e14\u5728 <a href=\"http:\/\/www.p6spy.com\/documentation\/install.htm#install\">http:\/\/www.p6spy.com\/documentation\/install.htm#install<\/a>\u00a0\u4e5f\u6709 p6spy \u5728\u4e0d\u540c\u670d\u52a1\u5668\u4e0b\u7684\u5b89\u88c5\u65b9\u6cd5\u3002\u672c\u6587\u4e0d\u6253\u7b97\u4f9d\u7167\u5b98\u65b9\u7684\u8bf4\u660e\u6765\u505a\uff0c\u6211\u4eec\u8ba9 Tomcat \u7684 Common \u7c7b\u52a0\u8f7d\u5668\u6765\u52a0\u8f7d p6spy.jar \u5305\uff0c\u5305\u542b\u4e86 Tomcat 5\/6 \u4e0b\u7684 p6spy \u914d\u7f6e\uff0c\u6570\u636e\u5e93\u8fde\u63a5\u6c60\u5b9e\u73b0\u7528 C3P0\uff0c\u6570\u636e\u5e93\u4e3a Oracle\uff0c\u914d\u7f6e\u5728\u4e00\u4e2a\u4e0e\u5e94\u7528\u540c\u540d\u7684\u5355\u72ec\u7684 xml \u6587\u4ef6\u4e2d\uff0cTomcat \u4e2d\u662f\u5728\u5e94\u7528\u7684 META-INF\/context.xml \u6587\u4ef6\u4e2d\u3002\u6b65\u9aa4\u5982\u4e0b\uff1a<br\/><br\/>\n<strong>1. \u8f6f\u4ef6\u51c6\u5907<br \/>\n<\/strong><br \/>\n\u4e0b\u8f7d Tomcat 5 \u6216\u8005 6 \u8fdb\u884c\u5b89\u88c5\uff0c\u4e0d\u5fc5\u591a\u8bf4\u3002\u5047\u8bbe\u7f6e Tomcat \u7684\u76ee\u5f55\u4e3a $TOMCAT_HOME\u3002<br \/>\n\u4e0b\u8f7d <a href=\"http:\/\/prdownloads.sourceforge.net\/p6spy\/p6spy-install.zip?download\"><span style=\"font-family: Verdana; font-size: x-small;\">p6spy-install.zip<\/span><\/a>\uff0c\u89e3\u538b\u7f29 p6spy-install.zip\uff0c\u5176\u4e2d\u6709 p6spy.jar \u548c spy.properties<br \/>\n\u51c6\u5907\u597d\u6570\u636e\u5e93\u7684\u9a71\u52a8\u5305\uff0c\u6bd4\u5982 Oracle \u7684 classes12.jar\uff0c\u548c C3P0 \u5b9e\u73b0\u5305\uff0c\u5982 c3p0-0.9.0.2.jar\u3002"},{"title":"\u7528 p6spy \u6765\u89c2\u5bdf Java \u7a0b\u5e8f\u4e2d\u6267\u884c\u7684\u6240\u6709 SQL \u8bed\u53e5\uff08\u4e00. \u5f15\u5b50\uff09","link":"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-first\/","pubDate":"Wed, 11 Mar 2009 09:20:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/p6spy-view-java-executing-sql-first\/","description":"\n\u4e00\u4e2a\u4f01\u4e1a\u5e94\u7528\u7a0b\u5e8f\u7684\u6027\u80fd\u74f6\u9888\u53ef\u80fd\u4f1a\u5728\u786c\u4ef6\u914d\u7f6e\u3001\u7f51\u7edc\u65b9\u9762\u3001\u7a0b\u5e8f\u4ee3\u7801\u3001\u5e94\u7528\u670d\u52a1\u5668\u914d\u7f6e\u3001\u6570\u636e\u5e93\u914d\u7f6e\u3001SQL \u8bed\u53e5\u3002\u8fd9\u91cc\u6211\u628a\u672c\u6587\u7684\u5173\u6ce8\u70b9 SQL \u65e0\u610f\u95f4\u653e\u5728\u4e86\u6700\u540e\uff0c\u5176\u5b9e\u5b83\u4e0d\u5e76\u4e0d\u610f\u5473\u7740\u6700\u540e\u8003\u8651\u7684\uff0c\u800c\u662f\u8fc7\u7a0b\u4e2d\u5c31\u8981\u65f6\u523b\u7559\u610f\u7684\u3002<br\/>\n<br\/>\nSQL \u8bed\u53e5\u7684\u4f18\u5316\u603b\u5f97\u628a\u6240\u6267\u884c\u8bed\u53e5\u6293\u51fa\u6765\u77a7\u77a7\uff0c\u5206\u6790\u5206\u6790\u3002\u5982\u679c\u76f4\u63a5\u7528 JDBC \u6216\u8005\u662f\u7c7b iBatis \u7684\u4e1c\u897f\u6765\u8bbf\u95ee\u6570\u636e\u5e93\uff0c\u90a3\u6240\u6267\u884c\u7684 SQL \u8bed\u53e5\u662f\u660e\u786e\u7684\uff0c\u800c\u73b0\u5728\u7684\u9879\u76ee\u5927\u591a\u4f1a\u7528 ORM \u7ec4\u4ef6\uff0c\u4f8b\u5982 Hibernate\u3001JPA\u3001CMP\u3001TopLink \u90fd\u6709\u81ea\u5df1\u7279\u5b9a\u7684\u67e5\u8be2\u8bed\u6cd5\uff0c\u6700\u7ec8\u5f53\u7136\u8981\u8f6c\u6362\u6210 SQL \u8bed\u53e5\u7684\uff0c\u6240\u4ee5\u4f1a\u751f\u6210\u4ec0\u4e48\u6837\u7684 SQL \u8bed\u53e5\u5c31\u4e0d\u751a\u660e\u4e86\uff0c\u82e5\u4eba\u4e3a\u7684\u770b\u7740\u4e13\u6709\u67e5\u8be2\u8bed\u53e5\u6765\u76f8\u8c61\u51fa SQL \u8bed\u53e5\u5e76\u975e\u6613\u4e8b\u3002\u867d\u7136 Hibernate \u8bbe\u7f6e show_sql=true \u65f6\u4e5f\u80fd\u6253\u5370\u51fa\u751f\u6210\u7684 SQL(\u5e26\uff1f\u53f7\u53c2\u6570)\uff0c\u914d\u5408\u8be6\u7ec6\u7684\u65e5\u5fd7\u53c2\u6570\u503c\u4e5f\u53ef\u4ee5\u5bf9\u4e0a\uff0c\u4e0d\u8fc7\u633a\u9ebb\u70e6\u7684\u3002"},{"title":"\u6709\u5173\u4e8e JVM \u7684\u5783\u573e\u6536\u96c6(\u4e8c)","link":"https:\/\/yanbin.blog\/about-jvm-gc\/","pubDate":"Mon, 15 Dec 2008 21:51:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/about-jvm-gc\/","description":"\n<p>\n<strong>\u81ea\u9002\u5e94\u6536\u96c6\u5668<\/strong><\/p>\n<p>\u5728\u7b2c\u4e00\u7bc7\uff1a<a href=\"http:\/\/unmi.cc\/about-jvm-1\/\" target=\"_blank\">\u6709\u5173\u4e8e JVM \u7684\u5783\u573e\u6536\u96c6(\u4e00)<\/a>\u00a0 \u4e2d\u8c08\u5230\u8fc7\u51e0\u79cd\u5783\u573e\u6536\u96c6\u7684\u7b97\u6cd5\uff0c\n\u7136\u800c\u6211\u4eec\u7684 JVM \u542f\u52a8\u4e4b\u540e\u5e76\u4e0d\u8981\u6c42\u5f7b\u5934\u5f7b\u5c3e\u7684\u6b7b\u677f\u7684\u4f7f\u7528\u4e00\u79cd\u5783\u573e\u6536\u96c6\u7b97\u6cd5\uff0c\u56fa\u5b9a\u7684\u7b97\u6cd5\u53c2\u6570\u3002\u56e0\u4e3a\u67d0\u79cd\u60c5\u51b5\u4e0b\u67d0\u4e9b\u5783\u573e\u6536\u96c6\u7b97\u6cd5\u5de5\u4f5c\u5f97\u66f4\u597d\uff0c\n\u800c\u522b\u5916\u4e00\u4e9b\u6536\u96c6\u7b97\u6cd5\u5728\u53e6\u5916\u7684\u60c5\u51b5\u4e0b\u5de5\u4f5c\u5f97\u66f4\u597d\uff0c\u6240\u4ee5\u81ea\u9002\u5e94\u7684\u5783\u573e\u6536\u96c6\u6280\u672f\u5e94\u8fd0\u800c\u751f\u3002\u81ea\u9002\u5e94\u7b97\u6cd5\u76d1\u89c6\u5806\u4e2d\u7684\u60c5\u5f62\uff0c\u5e76\u4e14\u5bf9\u5e94\u7684\u8c03\u6574\u4e3a\u5408\u9002\u7684\u5783\u573e\u6536\u96c6\u6280\u672f\u3002\n\u6216\u80fd\u662f\u6362\u4e00\u79cd\u5783\u573e\u6536\u96c6\u7b97\u6cd5\uff0c\u6216\u8005\u662f\u8c03\u6574\u5f53\u524d\u7b97\u6cd5\u53c2\u6570\uff0c\u6216\u8005\u628a\u5806\u5212\u5206\u4e3a\u5b50\u5806\uff0c\u540c\u65f6\u5728\u4e0d\u540c\u7684\u5b50\u5806\u4e2d\u4f7f\u7528\u4e0d\u540c\u7684\u7b97\u6cd5\u3002\n<\/p>\n<p><strong>\u7b80\u8ff0\u706b\u8f66\u7b97\u6cd5<\/strong><\/p>\n<p>\u5783\u573e\u6536\u96c6\u4e00\u822c\u90fd\u4f1a\u505c\u6b62\u6574\u4e2a\u7a0b\u5e8f\u7684\u8fd0\u884c\u6765\u67e5\u627e\u548c\u6536\u96c6\u5783\u573e\u5bf9\u8c61\uff0c\u5b83\u4eec\u53ef\u80fd\u5728\u7a0b\u5e8f\u6267\u884c\u7684\u4efb\u610f\u65f6\u523b\u6682\u505c\uff0c\u5e76\u4e14\u6682\u505c\u7684\u65f6\u95f4\u4e5f\u65e0\u6cd5\u786e\u5b9a\u3002\n\u5783\u573e\u6536\u96c6\u4e5f\u53ef\u80fd\u4f7f\u5f97\u7a0b\u5e8f\u5bf9\u4e8b\u4ef6\u54cd\u5e94\u8fdf\u949d\uff0c\u65e0\u6cd5\u6ee1\u8db3\u5b9e\u65f6\u7cfb\u7edf\u7684\u8981\u6c42\u3002\u5982\u679c\u4e00\u79cd\u5783\u573e\u6536\u96c6\u7b97\u6cd5\u53ef\u80fd\u5bfc\u81f4\u7528\u6237\u53ef\u5bdf\u89c9\u7684\u5230\u7684\u505c\u987f\u6216\u8005\u4f7f\u5f97\u7a0b\u5e8f\u65e0\u6cd5\u9002\u5408\u5b9e\u65f6\u7cfb\u7edf\u7684\u8981\u6c42\uff0c\n\u8fd9\u79cd\u7b97\u6cd5\u88ab\u79f0\u4f5c\u7834\u574f\u6027\u3002\u5783\u573e\u6536\u96c6\u7b97\u6cd5\u7684\u8fd8\u6709\u4e00\u4e2a\u57fa\u672c\u76ee\u6807\u662f\u4f7f\u672c\u8d28\u4e0a\u7684\u7834\u574f\u6027\u5c3d\u53ef\u80fd\u5c11\uff0c\u5982\u679c\u53ef\u80fd\u7684\u8bdd\uff0c\u5c3d\u53ef\u80fd\u6d88\u9664\u8fd9\u79cd\u7834\u574f\u6027\u3002\n<\/p>"},{"title":"\u7b80\u5355\u4f8b\u5b50\u6f14\u793a\u5982\u4f55\u8fdb\u884c\u7c7b\u7684\u70ed\u52a0\u8f7d(Hot Deployment)","link":"https:\/\/yanbin.blog\/simple-java-hot-deployment\/","pubDate":"Tue, 21 Oct 2008 11:38:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/simple-java-hot-deployment\/","description":"\n<p>\u5e94\u7528\u670d\u52a1\u5668\u4e00\u822c\u90fd\u652f\u6301\u70ed\u90e8\u7f72(Hot Deployment)\uff0c\u66f4\u65b0\u4ee3\u7801\u65f6\u628a\u65b0\u7f16\u8bd1\u7684\u786e\u7c7b\u66ff\u6362\u65e7\u7684\u5c31\u884c\uff0c\u540e\u9762\u7684\u7a0b\u5e8f\u5c31\u6267\u884c\u65b0\u7c7b\u4e2d\u7684\u4ee3\u7801\u3002\u8fd9\u4e5f\u662f\u7531\u5404\u79cd\u5e94\u7528\u670d\u52a1\u5668\u7684\u72ec\u6709\u7684\u7c7b\u52a0\u8f7d\u5668\u5c42\u6b21\u5b9e\u73b0\u7684\u3002\u90a3\u5982\u4f55\u5728\u6211\u4eec\u7684\u7a0b\u5e8f\u4e2d\u4e5f\u5b9e\u73b0\u8fd9\u79cd\u70ed\u52a0\u8f7d\u529f\u80fd\u5462\uff1f\u5373\u8981\u5728\u865a\u62df\u673a\u4e0d\u5173\u95ed\u7684\u60c5\u51b5\u4e0b(\u6bd4\u5982\u4e00\u4e2a)\uff0c\u6362\u4e2a\u7c7b\uff0cJVM \u5c31\u77e5\u9053\u52a0\u8f7d\u8fd9\u4e2a\u65b0\u7c7b\uff0c\u6267\u884c\u65b0\u7c7b\u4e2d\u7684\u903b\u8f91\u5462\uff1f\u4e0b\u9762\u5c31\u7b80\u5355\u6f14\u793a\u8fd9\u6837\u4e00\u4e2a\u70ed\u52a0\u8f7d\u7684\u4f8b\u5b50\uff0c\u9996\u5148\u5927\u81f4\u4e86\u89e3\u4e00\u4e0b\u7c7b\u52a0\u8f7d\u5668\u3002<\/p>\n<p><strong>\u6807\u51c6 Java \u542f\u52a8\u5668\u7684\u7c7b\u52a0\u8f7d\u5668\u5c42\u6b21<\/strong><\/p>\n<p>1. \u5f15\u5bfc\u7c7b\u52a0\u8f7d\u5668(bootstrap):\u00a0\u00a0 \u52a0\u8f7d\u5185\u6838 API\uff0c\u5982 rt.jar(java.lang\u3001java.io \u7b49)<br \/><br\/>\n2. \u6269\u5c55\u7c7b\u52a0\u8f7d\u5668(extension):\u00a0\u00a0 \u52a0\u8f7d\u7684\u9ed8\u8ba4\u6269\u5c55\u6765\u81ea\u4e8e jre\/lib\/ext<br \/><br\/>\n3. \u7cfb\u7edf\u7c7b\u52a0\u8f7d\u5668(system):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u7c7b\u8def\u5f84\u4e0a\u7684\u7c7b\uff0c\u5982 com.unmi.*<\/p>\n<p>\u8bf4\u660e\uff1a\u8fd9\u53ea\u662f\u6807\u51c6 Java \u542f\u52a8\u5668\u8fd0\u884c\u7a0b\u5e8f\u65f6\u7684\u7c7b\u52a0\u8f7d\u5668\u5c42\u6b21\uff0c\u50cf\u5e94\u7528\u670d\u52a1\u5668\u4e2d\u7684\u7c7b\u52a0\u8f7d\u5668\u901a\u5e38\u4f1a\u591a\u4e00\u4e24\u5c42\uff0c\u4e5f\u662f\u5728\u8fd9\u4e2a\u57fa\u7840\u4e0a\u7684\u5ef6\u4f38\u3002\u4e0a\u9762\u7684\u7c7b\u52a0\u8f7d\u5c42\u6b21\u5b58\u5728\u81ea\u4e0a\u800c\u4e0b\u7684\u59d4\u6258\u5173\u7cfb\uff0c\u59d4\u6258\u52a0\u8f7d\u4e0d\u5728\u8fd9\u91cc\u7ec6\u8bb2\u3002"},{"title":"\u6709\u5173\u4e8e JVM \u7684\u5783\u573e\u6536\u96c6(\u4e00)","link":"https:\/\/yanbin.blog\/about-jvm-1\/","pubDate":"Tue, 21 Oct 2008 01:18:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/about-jvm-1\/","description":"\n<p>Java \u4e2d\u4f7f\u7528 new\u3001newarray\u3001anewarray \u548c multianewarray \u6307\u4ee4\u6765\u521b\u5efa\u7684\u5bf9\u8c61\uff0c\u5f53\u8fd9\u4e9b\u5bf9\u8c61\u4e0d\u518d\u4f7f\u7528\u65f6\u7531\u5783\u573e\u6536\u96c6\u6765\u91ca\u653e\u3002\n<span style=\"color: #800080;\">\u90a3\u4e48 \u53cd\u5e8f\u5217\u5316\u7b49\u90fd\u662f\u95f4\u63a5\u4f7f\u7528\u4e86\u524d\u9762\u7684\u67d0\u4e2a\u6307\u4ee4, clone()\u00a0 \u662f\u4e2a\u672c\u5730\u65b9\u6cd5\uff1f<\/span>\n<\/p>\n<p>JVM \u89c4\u8303\u4e0d\u9700\u8981\u4efb\u4f55\u7279\u5b9a\u7684\u5783\u573e\u6536\u96c6\u6280\u672f\uff0c\u751a\u81f3\u4e5f\u6ca1\u8981\u6c42\u6709\u5783\u573e\u6536\u96c6\u673a\u5236\u3002\n<span style=\"color: #800080;\">\u5927\u6982\u53ea\u662f\u8bf4\u4e0d\u9700\u8981\u624b\u5de5\u91ca\u653e\u5185\u5b58\uff0c\u5177\u4f53\u600e\u4e48\u5b9e\u73b0\u5404 JVM \u81ea\u884c\u51b3\u5b9a\u3002<\/span><\/p>\n<p>GC \u9664\u4e86\u91ca\u653e\u4e0d\u518d\u88ab\u5f15\u7528\u7684\u5bf9\u8c61\uff0c\u8fd8\u8981\u5904\u7406\u5806\u788e\u7247\uff0c\n\u6574\u7406\u51fa\u8fde\u7eed\u7684\u7a7a\u95f2\u7a7a\u95f4\u624d\u80fd\u653e\u5f97\u4e0b\u65b0\u7684\u5bf9\u8c61\u3002\u4e0d\u81f3\u4e8e\u51fa\u73b0\u603b\u7684\u7a7a\u95f2\u7a7a\u95f4\u8db3\u591f\uff0c\u4f46\u788e\u7247\u592a\u591a\u800c\u62a5\u51fa \"Out of Memory\" \u7684\u5f02\u5e38\u3002<\/p>\n<p>GC \u6709\u4e24\u4e2a\u597d\u5904\uff1a\n\u4e00\u4e2a\u662f\u63d0\u9ad8\u4e86\u751f\u4ea7\u7387\uff0c\u4e0d\u7528\u57cb\u5934\u4e8e Memory Link \u7684\u6709\u65f6\u751a\u81f3\u662f\u9010\u884c\u7684\u68c0\u67e5\uff1b\u4e8c\uff0cGC \u4e5f\u662f Java \u5b89\u5168\u7b56\u7565\u7684\u4e00\u90e8\u5206\uff0c\u6709\u4e86\u5b83\u4e0d\u81f3\u4e8e\u56e0\u9519\u8bef\u7684\u91ca\u653e\u5185\u5b58\u800c\u5bfc\u81f3 JVM \u5d29\u6e83\u3002\n\u4f46\u662f GC \u7684\u4e00\u4e2a\u6f5c\u5728\u7f3a\u9677\u5f71\u54cd\u4e86\u7a0b\u5e8f\u7684\u6027\u80fd\uff0c\u5b83\u9700\u8981\u4e00\u76f4\u5728\u540e\u53f0\u4e0d\u65f6\u7684\u505a\u4e9b\u4e8b\u60c5\uff0c\u800c\u4e14\u5b9e\u65f6\u6027\u4e5f\u6709\u6240\u6b20\u7f3a\u3002"},{"title":"\u8ba9 Java \u8f7b\u677e\u4e50\u52a8\u8d77\u6765\uff0c\u4f7f\u7528 JFugue \u5236\u4f5c\u81ea\u5df1\u7684\u97f3\u4e50","link":"https:\/\/yanbin.blog\/java-music-jfugue\/","pubDate":"Fri, 19 Sep 2008 04:53:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-music-jfugue\/","description":"\n\u5b66\u8fc7\u6216\u7528\u8fc7 Basic \u7684\u670b\u53cb\u5927\u7ea6\u8fd8\u4f1a\u8bb0\u5f97\uff0c\u5728 Basic \u91cc\u8981\u6f14\u594f(\u5f53\u65f6\u8fd8\u662f\u4ece PC \u5587\u53ed\u91cc\u53d1\u51fa\u7684\uff0c\u73b0\u5728\u4e5f\u80fd\u8d70\u58f0\u5361\u4e86)\u4e00\u6bb5 <span style=\"color: #0000ff;\">\u54c6\u6765\u54aa\u53d1\u5506\u62c9\u897f\u54c6<\/span> \u53ef\u4ee5\u5199\u6210\uff1a<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-basic\" data-lang=\"basic\"><span class=\"line\"><span class=\"ln\">1<\/span><span class=\"cl\"><span class=\"kr\">PLAY<\/span><span class=\"w\"> <\/span><span class=\"s2\">&#34;C D E F G A B O6C&#34;<\/span><\/span><\/span><\/code><\/pre><\/div>\n\u76f4\u63a5\u7528 JDK \u53ef\u6ca1\u6709\u8fd9\u4e48\u7b80\u5355\uff0c\u867d\u7136 JDK 1.3 \u5f00\u59cb\u5c31\u5f15\u5165\u4e86 Java Sound API \u5904\u7406 MIDI(Musical Instrument Digital Interface)\uff0c\u53ef\u662f\u5b83\u7684\u63a5\u53e3\u5f88\u96be\u4f7f\u7528\uff0c\n\u53e6\u5916\uff0cSun \u4e5f\u4e13\u4e3a\u89c6\u3001\u97f3\u9891\u7684\u6355\u83b7\u3001\u56de\u653e\u3001\u683c\u5f0f\u8f6c\u6362\u63d0\u4f9b\u4e86\n<a href=\"http:\/\/java.sun.com\/javase\/technologies\/desktop\/media\/jmf\/\" target=\"_blank\">Java Media Framework API <\/a>\n(JMF)\uff0c\u4f46\u4e0d\u80fd\u7528\u6765\u521b\u4f5c\u3002\u6709\u4e00\u4e2a\u5f00\u6e90\u7684\u7ec4\u4ef6 JFugue(<a href=\"http:\/\/www.jfugue.org\/\">http:\/\/www.jfugue.org\/<\/a>)\uff0c\n\u5b83\u80fd\u8ba9\u4f60\u5c3d\u663e\u97f3\u4e50\u65b9\u9762\u7684\u5929\u8d4b\uff0c\u7ed9\u4f60\u4e00\u4e2a\u9ad8\u7ea7\u6613\u7528\u7684\u63a5\u53e3\u6765\u64cd\u4f5c Java Sound\uff0c\u5236\u4f5c\u81ea\u5df1\u7684 MIDI \u97f3\u4e50\u3002"},{"title":"\u78b0\u5230\u4e00\u4e2a\u4e0d\u77e5\u5982\u4f55\u89e3\u91ca\u7684 Java \u63a7\u5236\u53f0\u7a0b\u5e8f\u7684\u5185\u5b58\u95ee\u9898","link":"https:\/\/yanbin.blog\/explain-java-console-memory-leak\/","pubDate":"Tue, 22 Jul 2008 00:19:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/explain-java-console-memory-leak\/","description":"\n\u6709\u4e00 Java \u63a7\u5236\u53f0\u7a0b\u5e8f\uff0c\u542f\u52a8\u7ecf\u8fc7\u4e00\u6bb5\u65f6\u95f4\u4e4b\u540e\u4ece Windows \u4efb\u52a1\u7ba1\u7406\u5668\u91cc\u770b\u5b83\u6240\u5360\u7528\u7684\u5185\u5b58\u7a33\u5b9a\u5728 540M \u5de6\u53f3\u3002<\/p>\n<br\/>\n\u542f\u52a8\u53c2\u6570\u662f\uff1a-Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128<br\/><br\/>\n\u4f46\u53ea\u8981\u4f60\u628a\u90a3\u4e2a\u63a7\u5236\u53f0\u7a97\u53e3\u6700\u5c0f\u5316\u540e\uff0c\u89c2\u5bdf\u5230\u7684\u5185\u5b58\u7528\u77ac\u95f4\u4e0b\u964d\u5230 100 \u591aM\uff0c\u6709\u65f6\u5019\u751a\u81f3\u662f\u51e0\u5341M\u3002\u7136\u540e\u4e0d\u7ba1\u662f\u7a97\u53e3\u4fdd\u6301\u6700\u5c0f\u5316\u8fd8\u662f\u6062\u590d\u4e86\uff0c\u5b83\u6240\u5360\u7528\u7684\u5185\u5b58\u53c8\u4ee5\u51e0\u5341M\u51e0\u5341M\u7684\u4e0a\u626c\uff0c\u76f4\u81f3\u5148\u524d\u7684 540 M \u5de6\u53f3\u3002\u6bcf\u6b21\u6700\u5c0f\u5316\u7a97\u53e3\u90fd\u53ef\u4ee5\u89c2\u5bdf\u5230\u8fd9\u79cd\u73b0\u8c61\u3002<br\/><br\/>\n\u63a7\u5236\u53f0\u7a97\u53e3\u7684\u53c2\u6570\uff1a\u5c4f\u5e55\u7f13\u51b2\u533a\u5927\u5c0f\uff1a\u5bbd 120\uff1b\u9ad8 300\u3002\u7a97\u53e3\u5927\u5c0f\uff1a\u5bbd 120\uff1b\u9ad8 40\u3002<br\/><br\/>\n\u4e0d\u77e5\u9053\u5728\u63a7\u5236\u53f0\u7a97\u53e3\u6700\u5c0f\u5316\u90a3\u65f6\uff0cJVM \u505a\u4e86\u4e9b\u4ec0\u4e48\u4e8b\u60c5\u80fd\u8ba9\u5185\u5b58\u9aa4\u964d\u4e0b\u6765\uff0c\u800c\u590d\u53c8\u5347\u56de\u53bb\u3002"},{"title":"\u5229\u7528 Ant \u7684 SQL Task \u6765\u5b9e\u73b0\u81ea\u5df1\u7684 Java \u6267\u884c SQL \u811a\u672c\u6587\u4ef6\u7684\u529f\u80fd","link":"https:\/\/yanbin.blog\/ant-sql-task-exec-sql-scripts\/","pubDate":"Thu, 24 Apr 2008 08:03:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/ant-sql-task-exec-sql-scripts\/","description":"\n\u524d\u9762\u8bb0\u8f7d\u8fc7\u4e00\u7bc7 <a href=\"https:\/\/yanbin.blog\/java-execute-sql-script-file\/\" target=\"_blank\" rel=\"noopener noreferrer\">Java \u6267\u884c SQL \u811a\u672c\u6587\u4ef6<\/a>\uff0c\u8fd9\u91cc\u8fb9\u5b8c\u5168\u662f\u7531\u81ea\u5df1\u5199\u4ee3\u7801\u6765\u5206\u79bb\u51fa\u811a\u672c\u4e2d\u7684\u6bcf\u4e00\u4e2a SQL \u8bed\u53e5\u7684\uff0c\u6709\u4e0d\u5c11\u7f3a\u9677\u3002\u5f53\u65f6\u8fd8\u4e0d\u592a\u6e05\u695a ANT \u672c\u8eab\u63d0\u4f9b\u4e86\u529f\u80fd\u5f88\u5f3a\u7684\u6267\u884c SQL \u8bed\u53e5\u548c\u811a\u672c\u7684 SQL Task \u53ef\u7528\u3002\u4ee5\u4e0b\u4f9d\u6b21\u7b80\u5355\u4ecb\u7ecd\u5982\u4f55\u5728 build.xml \u4e2d\u6267\u884c\u00a0SQL \u8bed\u53e5\u6216\u811a\u672c\uff1bJava \u4ee3\u7801\u4e2d\u5982\u4f55\u8c03\u7528 ant \u7684 SQLExec \u7c7b\u6267\u884c SQL \u811a\u672c\uff0c\u6700\u540e\u8003\u8651\u00a0 ant.jar \u7684\u4e2a\u5934\u8bf4\u5927\u4e5f\u4e0d\u5c0f\uff0c1M \u591a\uff0c\u5982\u679c\u53ea\u7528\u4e8e\u6267\u884c SQL \u811a\u672c\uff0c\u5219\u7edd\u5927\u90e8\u5206\u4ee3\u7801\u5c31\u662f\u5783\u573e\uff0c\u6240\u4ee5\u4ece\u540c\u62bd\u79bb\u51fa\u9700\u8981\u7684\u4e24\u4e2a\u7c7b JDBCTask \u548c SQLExec\uff0c\u5b8c\u5168\u53bb\u9664\u4e86\u5bf9 ant.jar \u5305\u7684\u4f9d\u8d56\u3002<br\/><br\/>\n\u6709\u5173 ant \u7684\u66f4\u8be6\u7ec6\u7684\u8bb0\u5f55\u8bf7\u53c2\u89c1\uff0c<a href=\"http:\/\/ant.apache.org\/manual\/CoreTasks\/sql.html\">http:\/\/ant.apache.org\/manual\/CoreTasks\/sql.html<\/a> \u3002"},{"title":"JAVA\u7a0b\u5e8f\u542f\u52a8\u5355\u4e00\u5b9e\u4f8b\u5999\u62db[\u8f6c]","link":"https:\/\/yanbin.blog\/java-startup-single-instance\/","pubDate":"Mon, 24 Mar 2008 06:54:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-startup-single-instance\/","description":"\n\u6bcf\u65e5E\u8bfb,\u95f4\u9694\u51e0\u5929,\u663e\u7684\u6bcf\u65e5E\u8bfb\u4e0d\u6bcf\u4e86,\u65b0\u95fb\u8fc7\u540e,\u7cbe\u5f69\u7ee7\u7eed!\n<br\/><br\/>\n\u4eca\u513f,\u60f3\u8d77\u6765\u6628\u513f,\u89e3\u51b3\u7684\u4e00\u95ee\u9898,\u8d34\u51fa\u6765\u5927\u5bb6\u5b66\u4e60\u4e0b,\u7531\u4e8e\u5de5\u4f5c\u9700\u8981,\u5b66\u4e60,\u54c8\u54c8~!<br\/><br\/>\n\u624b\u5934\u7684\u4e00\u4e2a\u4efb\u52a1,\u662f\u4e2ajava\u7684SWT\u505a\u7684\u684c\u9762\u5e94\u7528\u7a0b\u5e8f,\u6709\u4e00\u9700\u6c42\u662f,\u7a0b\u5e8f\u53ea\u80fd\u542f\u52a8\u4e00\u4e2a\u5b9e\u4f8b,\u4e8c\u6b21\u542f\u52a8\u4f1a\u63d0\u793a\u542f\u52a8\u5931\u8d25!\u7f51\u4e0a\u8f6c\u4e86\u4e00\u5927\u5708\u51e0\u5929\u4e5f\u6ca1\u627e\u5230\u6bd4\u8f83\u7406\u60f3\u7684\u89e3\u51b3\u65b9\u6cd5,\u5728CSND\u7b49\u4e13\u4e1a\u7a0b\u5e8f\u5458\u7f51\u7ad9\u4e0a\u67e5\u627e\u8fc7,\u4e5f\u6ca1\u6709\u627e\u5230!\u6211\u6b63\u8981\u653e\u5f03\u7684\u65f6\u5019,\u54c8\u54c8,\u88ab\u6211\u627e\u5230\u4e86!<br\/><br\/>\n\u627e\u4e86\u4e00\u5199\u65b9\u6848\uff0c\u603b\u7ed3\u8d77\u6765\u5c31\u662f\uff0c\u7cfb\u7edf\u5355\u4e00\u5b9e\u4f8b\uff0c\u5c31\u662f\u67e5\u770b\u5171\u7528\u8d44\u6e90\uff0c\u5982\u679c\u88ab\u5360\u7528\uff0c\u8bf4\u660e\u5df2\u7ecf\u542f\u52a8\uff01\u6709\u4eba\u8bf4\u7528\u5355\u4f8b\u6a21\u5f0f\uff0c\u90a3\u662f\u6ca1\u6709\u4f5c\u7528\u7684\uff01<br\/><br\/>\n\u7f51\u4e0a\u627e\u5230\u7684\u51e0\u79cd\u89e3\u51b3\u65b9\u6848:"},{"title":"Java \u6267\u884c SQL \u811a\u672c\u6587\u4ef6","link":"https:\/\/yanbin.blog\/java-execute-sql-script-file\/","pubDate":"Tue, 22 Jan 2008 01:21:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-execute-sql-script-file\/","description":"\n\u5047\u5b9aJava \u7a0b\u5e8f\u4e2d\u8981\u5b9a\u671f\u6267\u884c SQL \u8bed\u53e5\uff0c\u56e0\u9700\u6c42\u53d8\u66f4\u5e94\u4fee\u6539\u539f\u6709 SQL \u8bed\u53e5\u6216\u8005\u52a0\u4e0a\u66f4\u591a\u7684\u8bed\u53e5\u65f6\uff0c\u4e0d\u5f97\u4e0d\u4fee\u6539\u6e90\u4ee3\u7801\uff0c\u7136\u540e\u518d\u6b21\u7f16\u8bd1\u3002\n\u8981\u662f\u628a SQL \u8bed\u53e5\u5199\u5728\u5355\u72ec\u7684 SQL \u811a\u672c\u6587\u4ef6\u4e2d\uff0c\u7531 Java \u7a0b\u5e8f\u6765\u5b9a\u65f6\u52a0\u8f7d\u6267\u884c\uff0c\u90a3\u4e48\u6bcf\u6b21\u6539\u52a8\u65f6\u4ec5\u4ec5\u4fee\u6539 SQL \u811a\u672c\u6587\u4ef6\u5c31\u884c\u4e86\u3002\n<br\/>\nJava \u6ca1\u6709\u63d0\u4f9b\u73b0\u6210\u7684\u4e1c\u897f\uff0c\u6240\u4ee5\u81ea\u5df1\u5199\u4e86\u4e00\u4e2a\u8fd9\u6837\u7684 SQL \u811a\u672c\u6267\u884c\u7c7b SqlFileExecutor\u3002\u652f\u6301\u901a\u7528\u7684 SQL \u811a\u672c\u6587\u4ef6\uff0c\"--\" \u4f5c\u4e3a\u6ce8\u91ca\u524d\u5bfc\u7b26\uff0c\u5206\u53f7 \";\"\n\u5206\u9694\u8bed\u53e5\u3002\u4e0d\u652f\u6301 MySQL \u7684 \/*...*\/ \u5f62\u5f0f\u7684\u6ce8\u91ca\u683c\u5f0f\u3002\u5bf9\u4e8e Windows \u548c Linux\/Unix \u4e0b\u7f16\u8f91\u7684\u811a\u672c\u6587\u4ef6\u90fd\u6d4b\u8bd5\u901a\u8fc7\u3002\n\u8fd9\u4e24\u4e2a\u7cfb\u7edf\u6587\u4ef6\u4e2d\u7684\u6362\u884c\u7b26\u4e0d\u4e00\u6837\uff0cWindows \u662f \"\\r\\n\"\uff0cLinux\/Unix \u662f \"\\n\"\u3002"},{"title":"\u4e3a\u4f55\u4e0d\u76f4\u63a5\u4f7f\u7528 Oracle \u63d0\u4f9b\u7684\u8fde\u63a5\u6c60\u5b9e\u73b0","link":"https:\/\/yanbin.blog\/use-oracle-carried-connection-pool\/","pubDate":"Wed, 16 Jan 2008 14:47:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/use-oracle-carried-connection-pool\/","description":"\n\u6211\u5728 Websphere Application Server (WAS) \u4e0b\u914d\u7f6e JDBC \u63d0\u4f9b\u7a0b\u5e8f\u65f6\uff0c\u9009\u62e9\u4e86 Oracle JDBC Driver \u786e\u5b9a\u4e4b\u540e\uff0c\u770b\u5230\u6700\u540e\u4e00\u4e2a\u9009\u9879\u662f\uff1aoracle.jdbc.pool.OracleConnectionPoolDataSource\u3002<\/p>\n<br\/>\n\u987e\u540d\u601d\u4e49\uff0c\u8fd9\u662f\u4e00\u4e2a DataSource \u5b9e\u73b0\u4e3a\uff0c\u5c31\u50cf DBCP \u7684 BasicDataSource \u4e00\u6837\u3002\u90a3\u4e48\u80fd\u4e0d\u80fd\u4e5f\u50cf BasicDataSource \u90a3\u6837\uff0c\u901a\u8fc7 new BasicDataSource()\uff0c\u7136\u540e\u8bbe\u7f6e\u5404\u4e2a\u5fc5\u987b\u7684\u5c5e\u6027\u5f97\u5230\u4e00\u4e2a\u6570\u636e\u6e90 DataSource \u5462\uff1f\u8fd9\u4e2a OracleConnectionPoolDataSource \u53c8\u662f\u5728\u54ea\u4e2a\u5305\u91cc\u5462\uff1f"},{"title":"Java\u4e2d\u7c7bC\/C++\u7684sizeof()\u64cd\u4f5c\uff0c\u77e5\u6653\u5b9e\u4f8b\u5927\u5c0f","link":"https:\/\/yanbin.blog\/java-sizeof\/","pubDate":"Fri, 28 Sep 2007 10:35:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-sizeof\/","description":"\n\u5728C\/C++\u4e2d\u6709sizeof()\u64cd\u4f5c\uff0c\u53ef\u8f7b\u6613\u83b7\u77e5\u67d0\u4e2a\u7c7b\u578b\u6216\u5b9e\u4f8b\u5360\u7528\u5185\u5b58\u5927\u5c0f\uff0csizeof(int) \u6216\u8005 sizeof(new TestClass)\u3002\u53ef\u662fJava\u4e2d\u53ef\u6ca1\u6709\u8fd9\u4e48\u76f4\u89c2\u7684\u65b9\u6cd5\u53ef\u7528\u3002<br\/>\n<br\/>\n\u56e0\u672c\u4eba\u770b\u8fc7\u4e0d\u5c11\u4eba\u5199\u4ee3\u7801\u603b\u7231\u5199\u6210<br\/>\n<br\/>\nList userList = new ArrayList();\u00a0\u00a0 \/\/\u6ce8\uff1a\u58f0\u660e\u65f6\u5373\u521d\u59cb\u5316\u4e00\u4e2a\u7a7a ArrayList<br\/>\nuserList = userDao.getAllUsers();\u00a0 \/\/\u6ce8\uff1a\u65b9\u6cd5getAllUsers()\u4e2d\u4f1a\u751f\u6210\u4e00\u4e2aArrayList\u7684<br\/>\n<br\/>\n\u4e0a\u9762\u5c31\u9020\u6210\u5e73\u767d\u591a\u4e86\u4e00\u4e2a\u7a7a\u7684 ArrayList(),\u521b\u5efa\u5b8c\u540e\u5373\u523b\u5c31\u63a8\u5411GC\u5904\u7f6e\uff0c\u6211\u5c31\u5728\u60f3\u8fd9\u6837\u4e00\u4e2a\u7a7a\u7684 ArrayList \u4f1a\u5360\u7528\u591a\u5c11\u5185\u5b58\uff0c\u4e8e\u662f\u627e\u6765\u4e86 Optimizeit \u89c2\u5bdf\u540e\u53d1\u73b0\u4e00\u4e2a\u7a7a\u7684 ArrayList \u8981\u5360\u53bb 24b \u5185\u5b58\u3002\u90a3 Java \u4e2d\u6709\u6ca1\u6709\u66f4\u4fbf\u7684\u6377\u7684\u65b9\u6cd5\u5462\uff0c\u4e8e\u662f\u5728\u7f51\u4e0a google \"java sizeof\"\uff0c\u5f15\u51fa\u4e0d\u5c11\u8bdd\u9898\u3002"},{"title":"\u5728 Java \u4e2d\u64cd\u4f5c Windows \u6ce8\u518c\u8868","link":"https:\/\/yanbin.blog\/java-access-windows-registry\/","pubDate":"Sun, 02 Sep 2007 08:41:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-access-windows-registry\/","description":"\n\u60f3\u505a\u4e2a\u4e1c\u897f\uff0c\u8981\u83b7IE\u7684\u4ee3\u7406\u8bbe\u7f6e\uff0c\u770b\u7f51\u4e0a\u4ecb\u7ecd\u57fa\u672c\u90fd\u662f\u8bfb\u53d6\u6ce8\u518c\u8868\u7684\u65b9\u5f0f\uff0c\u6ca1\u63d0\u5230\u8bf4\u501f\u52a9\u4e8e\u7279\u5b9a\u7684 Win32 API\u3002\u800c JDK \u63d0\u4f9b\u64cd\u4f5c Windows \u7684 API \u4e5f\u5c31\u662f Preferences\uff0c\u56e0\u4e3a\u8fd9\u4e2a API \u4e5f\u662f\u8de8\u5e73\u53f0\u7684\uff0c\u6240\u529f\u80fd\u6bd4\u8f83\u5f31\uff0c\u5728 Win32 \u4e0b\u53ea\u80fd\u7528\u6765\u64cd\u4f5c HKCU\\Software\\JavaSoft \u548c HKLM\\Software\\JavaSoft \u4e0b\u53ca\u5b50\u8282\u70b9\u7684\u6570\u636e\u3002<\/p>\n<br\/>\n\u81ea\u7531\u8bbf\u95ee\u6ce8\u518c\u8868\u5176\u4ed6\u952e\u7684\u503c\u5149\u7528 Java \u662f\u505a\u4e0d\u5230\u7684\uff0c\u5fc5\u7136\u65b9\u6848\u5c31\u662f JNI\uff0c\u4e00\u5f00\u59cb\u4e5f\u81ea\u5df1\u6765\u5b9e\u73b0\u8fd9\u4e2a JNI \u52a8\u6001\u5e93\uff0c\u540e\u6765\u61d2\u4e86\u4e00\u4e0b\uff0c\u60f3\u7740\u7f51\u4e0a\u5e94\u8be5\u7528\u73b0\u6210\u7684\u5b9e\u73b0\uff0cGoogle \u4e86\u4e00\u4e0b\uff0c\u679c\u7136\u4e0d\u51fa\u6240\u671b\uff0c\u5c31\u662f <a href=\"http:\/\/www.trustice.com\/java\/jnireg\/index.shtml\">http:\/\/www.trustice.com\/java\/jnireg\/index.shtml<\/a> \u4e0b\u7684 <a href=\"http:\/\/www.gjt.org\/download\/time\/java\/jnireg\/registry-3.1.3.zip\">registry-3.1.3.zip<\/a>(\u5305\u542b\u6e90\u4ee3\u7801)\u3002\u53ef\u4ee5\u5229\u7528\u5b83\u8bbf\u95ee\u3001\u4fee\u6539\u3001\u5bfc\u51fa\u6ce8\u518c\u8868\u9879\u5230\u6587\u4ef6\u7b49\u3002\u89e3\u5f00 registry-3.1.3.zip\uff0c\u5728 bin \u76ee\u5f55\u4e2d\u53ef\u4ee5\u770b\u5230\u4e24\u4e2a\u6587\u4ef6 ICE_JNIRegistry.dll \u548c registry.jar\uff0c\u52a8\u6001\u5e93\u5c31\u662f\u672c\u5730\u4ee3\u7801\u5b9e\u73b0\u3002<br\/>"},{"title":"java\u7248\u672c\u7684escape\u548cunescape\u51fd\u6570","link":"https:\/\/yanbin.blog\/java-escape-unescape\/","pubDate":"Thu, 23 Aug 2007 00:21:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-escape-unescape\/","description":"\n\u6709\u65f6\u5019\u6211\u4eec\u5728\u5904\u7406\u9875\u9762\u63d0\u4ea4\u8fc7\u6765\u7684\u4e2d\u6587\u4ea7\u751f\u4e71\u7801\u4e0d\u5bb9\u6613\u89e3\u51b3\u65f6\uff0c\u6bd4\u5982\u9875\u9762\u9009\u62e9\u4e86\u522b\u7684\u7f16\u7801\uff0c\u800c AJAX \u662f\u7528\u7684 UTF-8 \u5b57\u7b26\u96c6\uff0c\u6211\u4eec\u53ef\u4ee5\u5bf9\u8981\u53d1\u9001\u5230\u670d\u52a1\u5668\u7684\u4e2d\u6587\u7528 Javascript \u7684 escape \u51fd\u6570\u8fdb\u884c\u7f16\u7801\uff0c\u7136\u800c Java \u4e2d\u53c8\u6ca1\u6709\u76f8\u5e94\u7684 unescape \u51fd\u6570\u3002<\/p>\n<br\/>\n\u800c\u4e14 Java \u4e2d\u7684 java.net.URLDecoder\/java.net.URLEncoder \u4e5f\u5bf9\u5e94\u4e0d\u4e0a javascript \u7684 encodeURI\/decodeURI \u548c encodeURIComponent\/decodeURIComponent \u51fd\u6570\u3002<br\/><br\/>\n\u6240\u4ee5\u6211\u53bb\u7f51\u4e0a\u627e\u6765\u4e86\u4e00\u6bb5\u80fd\u591f\u4e0e Javascript \u7684 escape\/unescape \u51fd\u6570\u7684\u4ee3\u7801\u3002"},{"title":"\u8f83\u4e3a\u5b8c\u7f8e\u7684\u4e00\u79cd\u6807\u9898\u7f29\u7565\u663e\u793a\u65b9\u6cd5","link":"https:\/\/yanbin.blog\/title-fixed-width\/","pubDate":"Wed, 04 Jul 2007 07:08:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/title-fixed-width\/","description":"\n\u901a\u5e38\u5728\u7f51\u9875\u91cc\u90fd\u6709\u4e00\u79cd\u8fd9\u6837\u7684\u9700\u6c42\uff0c\u4e3a\u4e86\u754c\u9762\u6574\u6d01\uff0c\u5728\u663e\u793a\u6807\u9898\u65f6\u9700\u8981\u628a\u957f\u6807\u9898\u4ee5\u90e8\u5206\u52a0\u7701\u7565\u53f7\u8fde\u7f00\u663e\u793a\uff0c\u5c31\u6bd4\u5982\u4e2d\u56fd\u535a\u5ba2\u7f51\u663e\u793a\u65e5\u5fd7\u6807\u9898--\u4e0b\u9762\u90a3\u6837<\/p>\n<br\/>\n\u00b7\u5728VC6\u4e2d\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\u89e3\u6790...(2007-06-24)<br \/>\n\u00b7VC\u4e2d\u4f7f\u7528CInternet...(2007-06-23)<br \/>\n\u00b7\u5f00\u6e90\u5d4c\u5165\u5f0f\u6570\u636e\u5e93 SQLit...(2007-06-23)\u00a0<br\/><br\/>\n\u95ee\u9898\u4e00\u662f\u524d\u9762\u90a3\u90e8\u5206\u5b57\u7b26\u4e32\u600e\u4e48\u6765\u786e\u5b9a\uff0c\u4e0a\u9762\u5f88\u660e\u663e\u793a\u7684\u770b\u5f97\u51fa\u6765\uff0c\u56e0\u4e3a\u6807\u9898\u4e2d\u6df7\u6742\u7740\u4e2d\u82f1\u6587\uff0c\u4ecd\u7136\u6ca1\u6709\u8fbe\u5230\u521d\u8877\u3002"},{"title":"\u638c\u63e1\u4e00\u79cdJava\u6a21\u677f\u6280\u672f \u2013 Velocity","link":"https:\/\/yanbin.blog\/master-java-template-velocity\/","pubDate":"Mon, 04 Jun 2007 09:53:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/master-java-template-velocity\/","description":"\n\u539f\u6765\u7684\u9879\u76ee\u4e2d\u57fa\u672c\u90fd\u662f\u7528 JSP+Tag\u00a0 \u6765\u5c55\u793a\u5185\u5bb9\uff0c\u6709\u65f6\u4e5f\u6709 Jasper Report \u505a\u62a5\u8868\uff0c\u62a5\u8868\u4e5f\u7b97\u662f\u4e00\u79cd\u6a21\u677f\u6280\u672f\uff0c\u53ea\u662f\u6709\u4e9b\u91cd\u91cf\u7ea7\u3002\u770b\u8fc7 Spring \u7684\u4e66\u7c4d\uff0c\u90fd\u4f1a\u5bf9 Velocity \u548c FreeMaker \u6709\u4ecb\u7ecd\uff0c\u5e26\u52a8\u4e86\u6211\u5bf9\u5148\u524d\u770b\u8fc7\u7684 *.vm \u6587\u4ef6\u7684\u7814\u7a76\u63d0\u4e0a\u4e86\u65e5\u7a0b\uff0c\u4e86\u89e3\u4e4b\u540e\uff0c\u5df2\u89c9\u76f8\u89c1\u6068\u665a\u3002<\/p>\n<br\/>\n\u4e0b\u9762\u8bb2\u5229\u7528 Velocity \u600e\u4e48\u66f4\u597d\u89e3\u51b3\u76ee\u524d\u9879\u76ee\u7684\u4e00\u4e2a\u7b80\u5355\u95ee\u9898\uff1a\u7cfb\u7edf\u5728\u8fdb\u884c\u652f\u4ed8\u4e86\u652f\u4ed8\u540e\uff0c\u81ea\u5df1\u6309\u8bbe\u5b9a\u7684\u4fe1\u606f\u6a21\u677f\u53d1\u9001\u4e00\u6761\u77ed\u4fe1\u7ed9\u8d23\u4efb\u4eba\u3002\u4fe1\u606f\u6a21\u677f\u662f\uff1a<br\/><br\/>\n<span style=\"color: #0000ff;\">{\u5355\u636e\u8d23\u4efb\u4eba}\uff1a\u60a8\u7684 {\u5355\u636e\u53f7} \u53f7{\u5355\u636e\u7c7b\u578b}\u5728 {\u64cd\u4f5c\u65e5\u671f} \u65e5\u5df2\u652f\u4ed8<\/span>"},{"title":"Java Web\u5e94\u7528\u56e0tld\u6587\u4ef6\u635f\u574f\u51fa\u73b0\u7684\u9519\u8bef","link":"https:\/\/yanbin.blog\/java-webapp-tld-damage\/","pubDate":"Tue, 14 Nov 2006 03:40:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-webapp-tld-damage\/","description":"\n\u90e8\u7f72\u4e00\u4e2a Web \u5e94\u7528\u5230 WebSphere Application Server\u3000\u4e2d\uff0c\u6d4f\u89c8 index.jsp \u9875\u9762\u65f6\u800c\u6b63\u5e38\uff0c\u65f6\u800c\u51fa\u73b0500\u9519\u8bef\uff0c\u67e5\u770b\u670d\u52a1\u5668\u8f93\u51fa\u65e5\u5fd7\u53ef\u4ee5\u770b\u5230\u4ee5\u4e0b\u9519\u8bef\uff0c<\/p>\n<br\/>\n<span style=\"color: #ff0033;\">E SRVE0026E: [Servlet Error]-[This absolute uri &amp;#40;http:\/\/jakarta.apache.org\/struts\/tags-logic&amp;#41; cannot be resolved in either web.xml or the jar files deployed with this application]: org.apache.jasper.JasperException: This absolute uri (http:\/\/jakarta.apache.org\/struts\/tags-logic) cannot be resolved in either web.xml or the jar files deployed with this application"},{"title":"\u4e3a\u4f55Java\u7684\u6709\u5305\u540d\u7684\u7c7b\u4e0d\u80fd\u5f15\u7528\u9ed8\u8ba4\u5305\u4e2d\u7684\u7c7b","link":"https:\/\/yanbin.blog\/java-cannot-import-default-package\/","pubDate":"Wed, 23 Aug 2006 11:26:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-cannot-import-default-package\/","description":"\n\u6709\u4e24\u4e2ajava\u7c7b\uff0c\u6e90\u4ee3\u7801\u5982\u4e0b\uff1a<br\/><br\/>\n<table style=\"margin:auto; width: 750px; border-collapse: collapse;\" border=\"1\" cellspacing=\"2\" cellpadding=\"2\" bordercolor=\"#e7f7fe\">\n<tbody>\n<tr valign=\"top\">\n<td width=\"50%\">\u00a0\/\/\u6ca1\u6307\u5b9a\u5305\u540d\uff0c\u4e5f\u5c31\u662f\u5728\u9ed8\u8ba4\u5305\u4e2dpublic class B {<br\/>\n\u00a0 public void print(){<br\/>\n\u00a0\u00a0\u00a0 System.out.println(\"Printed By B Class\");<br\/>\n\u00a0 }<br\/>\n}<\/td>\n<td width=\"50%\">\u00a0package com.unmi;<br\/>\nimport B; \/\/\u5f15\u7528\u9ed8\u8ba4\u5305\u4e2d\u7684B\u7c7b<br\/>\npublic class A {<br\/>\n\u00a0 public static void main(String[] args) {<br\/>\n\u00a0\u00a0\u00a0 B b = new B(); \/\/\u5728A\u4e2d\u60f3\u8981\u5f15\u7528\u9ed8\u8ba4\u5305\u4e2d\u7684B\u7c7b<br\/>\n\u00a0 }<br\/>\n}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<br\/>\n\u5148\u4e0d\u8bf4\u5728IDE\u4e2d\u5982\u4f55\u7f16\u8bd1\u5b83\u4eec\u4ee5\u53ca\u4f1a\u63d0\u793a\u4ec0\u4e48\u8bed\u6cd5\u9519\u8bef\uff0c\u53ea\u662f\u7528\u547d\u4ee4javac\u6765\u7f16\u8bd1\u5b83\u4eec\uff0c\u5148\u662f\u628a\u5b83\u4eec\u653e\u5728\u540c\u4e00\u4e2a\u76ee\u5f55\u4e0b\uff0c\u6ce8\u610f\u7684\u662f\uff0c\u867d\u7136A.java\u6709package unmi.com;\u58f0\u660e\uff0c\u6211\u4eec\u8fd8\u662f\u5148\u628a\u5b83\u653e\u5728\u4e0bB.java\u540c\u4e00\u76ee\u5f55\uff0c\u5e0c\u671b\u7531javac\u547d\u4ee4\u6765\u751f\u6210\u76f8\u5bf9\u5e94\u7684\u5305\u76ee\u5f55\u3002"},{"title":"\u6536\u96c6\u7684\u4e00\u4e9b\u6709\u5173\u4e2d\u6587\u5206\u8bcd\u7684\u8d44\u6e90","link":"https:\/\/yanbin.blog\/chinese-analyzer-resources\/","pubDate":"Sat, 24 Jun 2006 07:27:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/chinese-analyzer-resources\/","description":"\n<span id=\"showcontent\">\u00a01. <a href=\"http:\/\/drupal.org\/node\/53886\">Chinese Word Splitter(\u4e2d\u6587\u5206\u8bcd)<\/a>\u00a0 (*)<br\/>\n\u00a02. <a href=\"http:\/\/www.lietu.com\/doc\/index.htm\">\u730e\u5154--\u4e2d\u6587\u5206\u8bcd\u6280\u672f\u6587\u6863<\/a>\u00a0(*)<br\/>\n\u00a03. <a href=\"http:\/\/www.jesoft.cn\/posts\/list\/5.page\">Lucene\u4e2d\u6587\u5206\u8bcd\u7ec4\u4ef6 JE-Analysis 1.3.1<\/a>\u00a0(*)<br\/>\n\u00a04. <a href=\"http:\/\/www.ieee.org.cn\/dispbbs.asp?boardID=2&amp;ID=25555\">\u51e0\u4e2a\u514d\u8d39\u7684\u4e2d\u6587\u5206\u8bcd\u6a21\u5757<\/a><br\/>\n\u00a05. <a href=\"http:\/\/www.nlp.org.cn\/project\/project.php?proj_id=6\">\u8ba1\u7b97\u6240\u6c49\u8bed\u8bcd\u6cd5\u5206\u6790\u7cfb\u7edf ICTCLAS<\/a>\u00a0(*)<br\/>\n\u00a06. <a href=\"http:\/\/www.xml.org.cn\/printpage.asp?BoardID=2&amp;id=11502\">fenci\uff0cJava \u7684 ICTCLAS<br\/>\n<\/a>\u00a07. AutoSplit\uff0c\u53e6\u4e00\u4e2a Java \u7684 ICTCLAS<br\/>\n\u00a08. <a href=\"http:\/\/www.donews.net\/accesine\">\u5c0f\u53ee\u549a\u4e2d\u6587\u5206\u8bcd\u3000\u4ecb\u7ecd\u9875\u9762<\/a>"},{"title":"\u8fd0\u884c Think In Java\u4e2d\u7684 RMI \u793a\u4f8b\u53ef\u80fd\u4ea7\u751f\u7684\u51e0\u79cd\u5f02\u5e38\u53ca\u89e3\u51b3","link":"https:\/\/yanbin.blog\/think-in-java-rmi-exception\/","pubDate":"Sat, 24 Jun 2006 04:38:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/think-in-java-rmi-exception\/","description":"\n\u5728Think In Java\u91cc\u6709\u4e00\u4e2a\u793a\u4f8b RMI \u7684\u4ee3\u7801 PerfectTime, \u53ef\u662f\u5176\u4e2d\u5e76\u6ca1\u6709\u628a\u6709\u4e9b\u6267\u884c\u7ec6\u8282\u8bf4\u660e\u4e86\uff0c\u4e5f\u5c31\u53ef\u4ee5\u9020\u6210\u65b0\u624b\u8fd0\u884c\u5b83\u4f1a\u51fa\u67d0\u4e9b\u5f02\u5e38\u800c\u4e0d\u77e5\u6240\u63aa\u3002\u4e0b\u9762\u5c06\u5217\u51fa\u53ef\u80fd\u4ea7\u751f\u7684\u5f02\u5e38\uff0c\u5e76\u8bf4\u660e\u89e3\u51b3\u529e\u6cd5\uff0c\u5982\u8bfb\u8005\u5728\u6267\u884c\u5f53\u4e2d\u8fd8\u9047\u5230\u5176\u4ed6\u672a\u5217\u51fa\u7684\u5f02\u5e38\uff0c\u53ef\u7559\u8a00\u544a\u77e5\uff0c\u543e\u5c06\u5c3d\u529b\u800c\u4e3a\u3002<br\/>\n<br\/>\n\u9996\u5148\u628a\u4ee3\u7801PerfectTime\u548cDisplayPerfectTime \u4e2d\u7684<span style=\"color: #004488;\">\/\/colossus:2005\/PerfectTime<\/span>\u6539\u4e3a<span style=\"color: #004488;\">\/\/localhost:2005\/PerfectTime<\/span> ,\u56e0\u4e3acolossus\u4e3a\u673a\u5668\u540d\uff0c\u6240\u4ee5\u6539\u4e3alocalhost\u6307\u5411\u672c\u673a\uff0c\u4e0d\u7136\u627e\u4e0d\u5230\u4e3b\u673acolossus\u7684\u3002<br\/>\n<br\/>\n\u5df2\u7ecf\u7528\u547d\u4ee4 RMIC \u751f\u6210PerfectTime_Stub.class\uff0c\u5e76\u4e14\u6267\u884c\u4e86\u547d\u4ee4 rmiregistry 2005"},{"title":"JAVA RMI \u5feb\u901f\u5165\u95e8\u5b9e\u4f8b","link":"https:\/\/yanbin.blog\/java-rmi-get-started\/","pubDate":"Sat, 24 Jun 2006 01:29:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-rmi-get-started\/","description":"\n\u672c\u5b9e\u4f8b\u4e3a\u53c2\u8003\u591a\u7bc7\u6587\u7ae0\u5199\u5c31\u800c\u6210\uff0c\u7f51\u4e0a\u53ca\u4e66\u4e0a\u5404\u7c7b\u6587\u7ae0\u4ecb\u7ecd\u5982\u4f55\u4f7f\u7528RMI\u6709\u591a\u79cd\u5b9e\u4f8b\u53ef\u53c2\u8003\uff0c\u8b6c\u5982\u6709\uff1a\n<br\/>\n1. \u7528\u547d\u4ee4rmiregistry\u542f\u52a8RMI\u6ce8\u518c\u670d\u52a1\u7684<br \/>\n2. \u540c\u65f6\u521b\u5efa\u5b58\u6839(stub)\u548c\u9aa8\u67b6(skeleton)\u7684<br \/>\n3. \u53ea\u521b\u5efa\u5b58\u6839\u7c7b\u7684(jdk1.2\u4ee5\u540e\u7248\u672c)<br \/>\n4. \u901a\u8fc7RemoteRef\u548crmi:\/\/\u534f\u8bae\u5b57\u4e32\u65b9\u5f0f\u7684<br \/>\n5. \u6bd4\u8f83\u5c11\u8bb2\u5230\u7684\u7528LocateRegistry\u76f4\u63a5\u5728\u4ee3\u7801\u4e0a\u542f\u52a8RMI\u6ce8\u518c\u670d\u52a1\u7684\u3002<br\/><br\/>\n\u4ee5\u4e0a\u63cf\u8ff0\u5e76\u975e\u660e\u663e\u5206\u7c7b\uff0c\u6bd4\u5982\uff0c\u4f60\u603b\u662f\u53ef\u4ee5\u9009\u62e9\u7528rmiregistry\u6216\u8005\u4ee3\u7801LocateRegistry\u542f\u52a8RMI\u6ce8\u518c\u670d\u52a1<br\/><br\/>\n\u4e0b\u9762\u6211\u5c06\u4ecb\u7ecd\u4e00\u4e2a\u5b8c\u6574\u7684\u5b9e\u4f8b\uff0c\u8ba9\u521d\u5b66\u8005\u80fd\u5feb\u901f\u4f53\u9a8cRMI\u7684\u529f\u7528\u3002<br\/><br\/>\n\u5206\u4e3a\u4ee5\u4e0b\u56db\u4e2a\u6b65\u9aa4"},{"title":"\u4f60\u5e94\u8be5\u77e5\u9053\u768410\u4ef6\u5173\u4e8eJava 6\u7684\u4e8b\u60c5 [\u8f6c]","link":"https:\/\/yanbin.blog\/maybe-unknown-java6-10-thing\/","pubDate":"Thu, 22 Jun 2006 13:26:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/maybe-unknown-java6-10-thing\/","description":"\n<a href=\"http:\/\/java.sun.com\/developer\/technicalArticles\/J2SE\/Desktop\/mustang\/beta2.html\">http:\/\/java.sun.com\/developer\/technicalArticles\/J2SE\/Desktop\/mustang\/beta2.html<\/a> \u4e00\u6587\u4e2d\u63cf\u8ff0\u4e86\u4f60\u5e94\u8be5\u77e5\u9053\u768410\u4ef6\u5173\u4e8eJava 6\u7684\u4e8b\u60c5\uff0c\u4e0b\u9762\u603b\u7ed3\u5982\u4e0b<br\/>\n<br\/>\n<strong>1.Web Services.<\/strong> \u4f18\u5148\u652f\u6301\u7f16\u5199 XML web service \u5ba2\u6237\u7aef\u7a0b\u5e8f\u3002\u4f60\u53ef\u4ee5\u7528\u8fc7\u7b80\u5355\u7684annotaion\u5c06\u4f60\u7684API\u53d1\u5e03\u6210.NET\u4ea4\u4e92\u7684web services. Mustang \u6dfb\u52a0\u4e86\u65b0\u7684\u89e3\u6790\u548c XML \u5728 Java object-mapping APIs\u4e2d, \u4e4b\u524d\u53ea\u5728Java EE\u5e73\u53f0\u5b9e\u73b0\u6216\u8005Java Web Services Pack\u4e2d\u63d0\u4f9b.<br\/>\n<br\/>\n<strong>2.Scripting.<\/strong> \u73b0\u5728\u4f60\u53ef\u4ee5\u5728Java\u6e90\u4ee3\u7801\u4e2d\u6df7\u5165JavaScript\u4e86\uff0c\u8fd9\u5bf9\u5f00\u53d1\u539f\u578b\u5f88\u6709\u6709\u7528\uff0c\u4f60\u4e5f\u53ef\u4ee5\u63d2\u5165\u81ea\u5df1\u7684\u811a\u672c\u5f15\u64ce\u3002"},{"title":"\u4f7f\u7528JNative,\u5728Java\u4e2d\u4f20\u9012\u4e00\u4e2aC\/C++\u7ed3\u6784\u53c2\u6570\u5230\u52a8\u6001\u5e93\u4e2d","link":"https:\/\/yanbin.blog\/jnative-java-pass-struct\/","pubDate":"Thu, 18 May 2006 10:38:00 -0500","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/jnative-java-pass-struct\/","description":"\n<p>\u7528C++\u5199\u7684\u52a8\u6001\u5e93\u7684\u5bfc\u51fa\u65b9\u6cd5\u7684\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-cpp\" data-lang=\"cpp\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"k\">struct<\/span> <span class=\"nc\">TestStruct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"> <span class=\"kt\">int<\/span> <span class=\"n\">a<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"> <span class=\"kt\">int<\/span> <span class=\"n\">b<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"p\">};<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"k\">extern<\/span> <span class=\"s\">&#34;C&#34;<\/span> <span class=\"kr\">__declspec<\/span><span class=\"p\">(<\/span><span class=\"n\">dllexport<\/span><span class=\"p\">)<\/span> <span class=\"n\">TestStruct<\/span><span class=\"o\">*<\/span> <span class=\"n\">ShowStruct<\/span><span class=\"p\">(<\/span><span class=\"n\">TestStruct<\/span><span class=\"o\">*<\/span> <span class=\"n\">testStruct<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"> <span class=\"n\">cout<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"s\">&#34;\u5728\u52a8\u6001\u5e93\u4e2d\u6253\u5370\uff1a\u4f20\u5165\u52a8\u6001\u5e93\u4e2d\u7684\u7ed3\u6784\u6210\u5458a\u7684\u503c\u4e3a:&#34;<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"n\">testStruct<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">a<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"n\">endl<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"> <span class=\"c1\">\/\/\u6539\u53d8\u4f20\u5165\u7ed3\u6784\u6210\u5458a\u7684\u503c\u4e3a100\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"> <span class=\"n\">testStruct<\/span><span class=\"o\">-&gt;<\/span><span class=\"n\">a<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">100<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"> <span class=\"k\">return<\/span> <span class=\"n\">testStruct<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u4f7f\u7528Java\u7684\u53cd\u5c04\u8c03\u7528\u65b9\u6cd5\u5e94\u6ce8\u610f\u7684\u5f02\u5e38\u5904\u7406","link":"https:\/\/yanbin.blog\/java-reflect-exception-handle\/","pubDate":"Tue, 07 Mar 2006 10:07:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/java-reflect-exception-handle\/","description":"\n\u5148\u770b\u4e0b\u9762\u7684\u4ee3\u7801\uff0c\u770b\u770b\u7a0b\u5e8f\u6267\u884c\u4f1a\u662f\u4ec0\u4e48\u6837\u7684\u7ed3\u679c\uff1a\n<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"kn\">import<\/span><span class=\"w\"> <\/span><span class=\"nn\">java.lang.reflect.Method<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\"><span class=\"cm\">\/**\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"cm\"> * @author Unmi\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\"><span class=\"cm\"> *\/<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">class<\/span> <span class=\"nc\">ExceptionTest<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">main<\/span><span class=\"p\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span><span class=\"w\"> <\/span><span class=\"n\">args<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">try<\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">foo1<\/span><span class=\"p\">();<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"k\">catch<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">MyException<\/span><span class=\"w\"> <\/span><span class=\"n\">me<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Exception Type: MyException&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"k\">catch<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"n\">Exception<\/span><span class=\"w\"> <\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">System<\/span><span class=\"p\">.<\/span><span class=\"na\">out<\/span><span class=\"p\">.<\/span><span class=\"na\">println<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Exception Type: Exception&#34;<\/span><span class=\"p\">);<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">14<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">15<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">16<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">17<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">foo1<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"kd\">throws<\/span><span class=\"w\"> <\/span><span class=\"n\">Exception<\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">18<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">Method<\/span><span class=\"w\"> <\/span><span class=\"n\">method<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"n\">ExceptionTest<\/span><span class=\"p\">.<\/span><span class=\"na\">class<\/span><span class=\"p\">.<\/span><span class=\"na\">getDeclaredMethod<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;foo2&#34;<\/span><span class=\"p\">,<\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">Class<\/span><span class=\"o\">[]<\/span><span class=\"p\">{});<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">19<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">20<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"c1\">\/\/\u6ce8\u610f\u8c03\u7528foo2\u65f6\uff0cfoo2\u65b9\u6cd5\u4f1a\u629b\u51faMyException\u5f02\u5e38<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">21<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"n\">method<\/span><span class=\"p\">.<\/span><span class=\"na\">invoke<\/span><span class=\"p\">(<\/span><span class=\"kc\">null<\/span><span class=\"p\">,<\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">Object<\/span><span class=\"o\">[]<\/span><span class=\"p\">{});<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">22<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">23<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">24<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"kd\">public<\/span><span class=\"w\"> <\/span><span class=\"kd\">static<\/span><span class=\"w\"> <\/span><span class=\"kt\">void<\/span><span class=\"w\"> <\/span><span class=\"nf\">foo2<\/span><span class=\"p\">()<\/span><span class=\"w\"> <\/span><span class=\"kd\">throws<\/span><span class=\"w\"> <\/span><span class=\"n\">Exception<\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">25<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"k\">throw<\/span><span class=\"w\"> <\/span><span class=\"k\">new<\/span><span class=\"w\"> <\/span><span class=\"n\">MyException<\/span><span class=\"p\">();<\/span><span class=\"w\"> <\/span><span class=\"c1\">\/\/foo2\u65b9\u6cd5\u76f4\u63a5\u629b\u51fa\u5f02\u5e38<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">26<\/span><span class=\"cl\"><span class=\"w\"> <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">27<\/span><span class=\"cl\"><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">28<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">29<\/span><span class=\"cl\"><span class=\"c1\">\/\/\u4e00\u4e2a\u81ea\u5b9a\u4e49\u7684\u5f02\u5e38<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">30<\/span><span class=\"cl\"><span class=\"kd\">class<\/span> <span class=\"nc\">MyException<\/span><span class=\"w\"> <\/span><span class=\"kd\">extends<\/span><span class=\"w\"> <\/span><span class=\"n\">Exception<\/span><span class=\"p\">{<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">31<\/span><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"ln\">32<\/span><span class=\"cl\"><span class=\"p\">}<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>"},{"title":"\u7eafJava\u7a0b\u5e8f\u8bfb\u53d6DBF\u6587\u4ef6\u578b\u6570\u636e\u5e93","link":"https:\/\/yanbin.blog\/pure-java-access-dbf\/","pubDate":"Fri, 03 Mar 2006 11:03:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/pure-java-access-dbf\/","description":"\n\u8fd8\u8bb0\u5f97\u90a3\u4e2a\u53e4\u8001\u7684Foxbase\u548cFoxpro\u4ea7\u751f\u7684\u6570\u636e\u5e93\u5417\uff1f\u4e0eaccess\uff08MDB\uff09\u7c7b\u4f3c\u7684\u6587\u4ef6\u578b\u6570\u636e\u5e93\uff0c\u53ef\u662f\u6709\u4e9b\u5730\u65b9\u6709\u4eba\u8fd8\u5728\u7528\u5b83\u3002DBF\u6570\u636e\u5e93\u4e00\u822c\u90fd\u662f\u5728Foxbase\u6216Foxpro\u4e2d\u6216\u7531\u5b83\u4eec\u751f\u6210\u7684\u5e94\u7528\u7a0b\u5e8f\u6765\u8bbf\u95ee\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5efa\u7acbODBC\u7684\u65b9\u5f0f\u6765\u8bbf\u95ee\u3002<\/p>\n<br\/>\nJava\u8981\u8bbf\u95ee\u4ec0\u4e48\u6570\u636e\u5e93\u7b2c\u4e00\u4e2a\u5ff5\u5934\u5c31\u4f1a\u662f\u6709\u6ca1\u6709\u76f8\u5e94\u7684\u9a71\u52a8\u554a\uff0c\u6709\u9a71\u52a8\u90a3\u597d\u529e\uff0c\u82e5\u662f\u6ca1\u6709\u9a71\u52a8\u90a3\u80fd\u4e0d\u80fd\u901a\u8fc7\u914d\u7f6eODBC\uff0c\u7528JDBC-ODBC\u6865\u6765\u8bbf\u95ee\u5462\uff1f\u5f53\u7136Java\u8bbf\u95eeDBF\u6587\u4ef6\u662f\u53ef\u4ee5\u901a\u8fc7JDBC\uff0dODBC\u7684\u65b9\u5f0f\uff0c\u4f46\u8fd9\u6837\u7684\u8bdd\u662f\u4e0d\u662f\u7eafJava\u5b9e\u73b0\u8fd8\u8bf4\uff0c\u5012\u662f\u5f97\u4e3a\u8981\u8bbf\u95ee\u7684DBF\u6587\u4ef6\u5efa\u4e00\u4e2a\u6570\u636e\u6e90\u9ebb\u70e6\uff0c\u5c24\u5176\u662f\u7a0b\u5e8f\u79fb\u690d\u65f6\u3002"},{"title":"Oracle\u4e2d\u7684Java\u5b58\u50a8\u8fc7\u7a0b\u7684\u64cd\u4f5c\u6743\u9650","link":"https:\/\/yanbin.blog\/oracle-java-permissions\/","pubDate":"Mon, 16 Jan 2006 00:47:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/oracle-java-permissions\/","description":"\n\u5f53\u6211\u4eec\u5728Oracle\u4e2d\u7528Java\u5199\u7684\u5b58\u50a8\u8fc7\u7a0b\u65b9\u6cd5\u4e2d\uff0c\u5982\u679c\u8bbf\u95ee\u4e86\u672c\u5730\u6587\u4ef6\u7cfb\u7edf\u3001\u8fde\u63a5\u4e86\u7f51\u7edc\u3001\u6216\u8005\u8fd0\u884c\u7cfb\u7edf\u547d\u4ee4\uff0c\u5c31\u5fc5\u987b\u4e3a\u6267\u884c\u8be5\u8fc7\u7a0b\u7684\u6a21\u5f0f\u8d4b\u4e88\u76f8\u5e94\u7684\u6743\u9650\u3002\u4e0d\u7136\u6267\u884c\u8be5\u5b58\u50a8\u8fc7\u7a0b\u5c31\u4f1a\u62a5\u65e0\u8be5\u64cd\u4f5c\u6743\u9650\u7684\u5f02\u5e38\u3002<\/p>\n<br\/>\n\u672c\u6587\u6240\u9762\u5bf9\u7684\u662f\u54ea\u4e9b\u4f1a\u7528Java\u5199\u5b58\u50a8\u8fc7\u7a0b\u7684\u670b\u53cb\uff0c\u53ef\u80fd\u4f60\u4eec\u5728\u7528Java\u5199Oracle\u7684\u5b58\u50a8\u8fc7\u7a0b\u4e5f\u9047\u5230\u8fc7\u7c7b\u4f3c\u95ee\u9898\u3002\u5e0c\u671b\u5bf9\u4ed6\u4eec\u80fd\u6709\u6240\u5e2e\u52a9\u3002\u5173\u4e8e\u5982\u4f55\u7528Java\u5199Oracle\u7684\u5b58\u50a8\u8fc7\u7a0b\u8bf7\u53c2\u8003\u6211\u524d\u9762\u7684\u4e00\u7bc7\u6587\u7ae0\uff1a<a href=\"https:\/\/yanbin.blog\/oracle8i-develop-java-procedure\/\">Oracle8i\u4e2d\u4f7f\u7528Java\u8bed\u8a00\u6765\u5f00\u53d1\u5b58\u50a8\u8fc7\u7a0b<\/a>\uff0c\u5176\u4e2d\u6709\u76f8\u5e94\u7684\u4ee3\u7801\u3002"},{"title":"Oracle8i\u4e2d\u4f7f\u7528Java\u8bed\u8a00\u6765\u5f00\u53d1\u5b58\u50a8\u8fc7\u7a0b","link":"https:\/\/yanbin.blog\/oracle8i-develop-java-procedure\/","pubDate":"Sun, 15 Jan 2006 22:12:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/oracle8i-develop-java-procedure\/","description":"\n\u5728Oracle8i\u4e4b\u524d\uff0c\u5f00\u53d1\u4eba\u5458\u53ea\u80fd\u4f7f\u7528PL\/SQL\u6765\u5f00\u53d1\u5b58\u50a8\u8fc7\u7a0b\u3002\u800c\u5728Oracle8i\u4e4b\u4e2d\uff0c\u4e0d\u4ec5\u53ef\u4ee5\u4f7f\u7528\u539f\u6709\u7684PL\/SQL\u5f00\u53d1\u5b58\u50a8\u8fc7\u7a0b\uff0c\u800c\u4e14\u4e5f\u53ef\u4ee5\u4f7f\u7528Java\u8bed\u8a00\u6765\u5f00\u53d1\u5b58\u50a8\u8fc7\u7a0b\u3002\u672c\u7bc7\u6587\u7ae0\u5c06\u7b80\u5355\u4ecb\u7ecd\u5173\u4e8e\u8fd9\u65b9\u9762\u7684\u77e5\u8bc6\uff0c\u5305\u62ec\u4ee5\u4e0b\u5185\u5bb9\uff1a(\u7070\u8272\u663e\u793a\u7684\u90e8\u5206\u5728\u6b64\u5c06\u4e0d\u4f5c\u8be6\u7ec6\u4ecb\u7ecd)<\/p>\n<br\/>\n\u672c\u6587\u662f\u6211\u53c2\u8003\u7f51\u4e0a\u8d44\u6599\uff0c\u6574\u7406\u51fa\u6765\u7684\u4e00\u4efd\uff0c\u6587\u4e2d\u6240\u6709\u4ee3\u7801\u8bed\u53e5\u5747\u771f\u5b9e\u53ef\u7528\uff0c\u56e0\u53ea\u662f\u4f5c\u6d4b\u8bd5\uff0c\u6240\u4ee5\u4ee3\u7801\u672a\u8868\u73b0\u5b9e\u9645\u4e1a\u52a1\u64cd\u4f5c\u3002<br\/><br\/>\n<a href=\"#1\">\u4e00. \u5b58\u50a8\u8fc7\u7a0b\u7b80\u4ecb<\/a><br \/>"},{"title":"\u4e00\u4e2a\u5207\u5b9e\u53ef\u7528\u7684CheckStyle\u7684build.xml\u6587\u4ef6","link":"https:\/\/yanbin.blog\/checkstyle-build-xml\/","pubDate":"Wed, 04 Jan 2006 09:13:00 -0600","author":"yabqiu@gmail.com (Yanbin Qiu)","guid":"https:\/\/yanbin.blog\/checkstyle-build-xml\/","description":"\n\u7f51\u4e0a\u627e\u4e86\u597d\u4e9b\u4e2a\u5173\u4e8eCheckStyle\u7684\u6587\u7ae0\u90fd\u662f\u6284\u6284\u6284\u4e00\u5927\u901a\uff0c\u5374\u6ca1\u6709\u4e00\u4e2abuild.xml\u7740\u5b9e\u53ef\u8fd0\u884c,<br \/>\n\u5728\u8fd9\u91cc\u6211\u4e5f\u662f\u53c2\u8003\u7740\u4e00\u7f16\uff0c\u6539\u6539\u6210\u80fd\u6210\u529f\u8fd0\u884c\u5e76\u80fd\u751f\u6210\u6b63\u786e\u62a5\u544a\uff0c\u53d1\u9001 Email \u7684build.xml\u6587\u4ef6<\/p>\n<br\/>\n<div class=\"highlight\"><pre tabindex=\"0\" class=\"chroma\"><code class=\"language-xml\" data-lang=\"xml\"><span class=\"line\"><span class=\"ln\"> 1<\/span><span class=\"cl\"><span class=\"ni\">&amp;lt;<\/span>?xml version=&#34;1.0&#34; encoding=&#34;gb2312&#34;?&gt;\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 2<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 3<\/span><span class=\"cl\"><span class=\"c\">&lt;!-- ANT make file checkstype --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 4<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 5<\/span><span class=\"cl\"><span class=\"c\">&lt;!-- See &lt;a href=&#34;http:\/\/jakarta.apache.org\/ant&#34; data-mce-href=&#34;http:\/\/jakarta.apache.org\/ant&#34;&gt;http:\/\/jakarta.apache.org\/ant&lt;\/a&gt; for info about ANT --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 6<\/span><span class=\"cl\"><span class=\"c\">&lt;!-- \u7f51\u4e0a\u4e0b\u6765\u7684CheckStyle\u89e3\u538b\u5728d:\/javalib\/CheckStyle\/checkstyle-4.1\u4e2d --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 7<\/span><span class=\"cl\"><span class=\"nt\">&lt;project<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle&#34;<\/span> <span class=\"na\">default=<\/span><span class=\"s\">&#34;checkstyle&#34;<\/span> <span class=\"na\">basedir=<\/span><span class=\"s\">&#34;d:\/javalib\/CheckStyle\/checkstyle-4.1&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 8<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\"> 9<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- CheckStyle\u914d\u7f6e,\u8fd9\u91cc\u4f60\u66ff\u6362\u6210\u4f60\u5b9e\u9645\u7684\u73af\u5883 --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">10<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;project.docs.dir&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${basedir}\/contrib&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">11<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">12<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u6e90\u4ee3\u7801\u7684\u76ee\u5f55\u662fe:\/eclipseworkspace\/talupdate\/src --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">13<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;project.src.dir&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;e:\/eclipseworkspace\/talupdate\/src&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">14<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">15<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u5efa\u7acb\u4e86build\u76ee\u5f55\u5728\u5176\u4e2d\u751f\u6210\u62a5\u544a --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">16<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;project.checkstyleReport.dir&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${basedir}\/build&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">17<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle.jar&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${basedir}\/checkstyle-all-4.1.jar&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">18<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">19<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u4f7f\u7528SUN\u7684\u4ee3\u7801\u89c4\u8303\uff0c\u53ef\u66ff\u6362\u6210\u516c\u53f8\u81ea\u5df1\u7684\u89c4\u8303 --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">20<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle.config&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${basedir}\/sun_checks.xml&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">21<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle.report.style&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${project.docs.dir}\/checkstyle-noframes.xsl&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">22<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle.result&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${project.checkstyleReport.dir}\/checkstyle_result.xml&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">23<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle.report&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;${project.checkstyleReport.dir}\/checkstyle_report.html&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">24<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">25<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u5b9a\u4e49\u53d1\u9001\u90ae\u4ef6\u5217\u8868 --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">26<\/span><span class=\"cl\"> <span class=\"nt\">&lt;property<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;mail.list&#34;<\/span> <span class=\"na\">value=<\/span><span class=\"s\">&#34;(User1)user1@xxx.com,(User2)user2@xxx.com&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">27<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">28<\/span><span class=\"cl\"> <span class=\"nt\">&lt;target<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;init&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">29<\/span><span class=\"cl\"> <span class=\"nt\">&lt;tstamp\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">30<\/span><span class=\"cl\"> <span class=\"nt\">&lt;\/target&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">31<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">32<\/span><span class=\"cl\"> <span class=\"c\">&lt;!--CheckStyle\u811a\u6b65--&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">33<\/span><span class=\"cl\"> <span class=\"nt\">&lt;taskdef<\/span> <span class=\"na\">resource=<\/span><span class=\"s\">&#34;checkstyletask.properties&#34;<\/span> <span class=\"na\">classpath=<\/span><span class=\"s\">&#34;${checkstyle.jar}&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">34<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">35<\/span><span class=\"cl\"> <span class=\"nt\">&lt;target<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle&#34;<\/span> <span class=\"na\">depends=<\/span><span class=\"s\">&#34;init&#34;<\/span> <span class=\"na\">description=<\/span><span class=\"s\">&#34;\u5bf9java\u6e90\u4ee3\u7801\u8fdb\u884c\u68c0\u67e5\u5e76\u4ea7\u751f\u68c0\u67e5\u62a5\u544a. &#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">36<\/span><span class=\"cl\"> <span class=\"nt\">&lt;checkstyle<\/span> <span class=\"na\">config=<\/span><span class=\"s\">&#34;${checkstyle.config}&#34;<\/span> <span class=\"na\">failOnViolation=<\/span><span class=\"s\">&#34;false&#34;<\/span> <span class=\"na\">failureProperty=<\/span><span class=\"s\">&#34;checkstyle.failure&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">37<\/span><span class=\"cl\"> <span class=\"nt\">&lt;formatter<\/span> <span class=\"na\">type=<\/span><span class=\"s\">&#34;xml&#34;<\/span> <span class=\"na\">tofile=<\/span><span class=\"s\">&#34;${checkstyle.result}&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">38<\/span><span class=\"cl\"> <span class=\"nt\">&lt;fileset<\/span> <span class=\"na\">dir=<\/span><span class=\"s\">&#34;${project.src.dir}&#34;<\/span> <span class=\"na\">includes=<\/span><span class=\"s\">&#34;**\/*.java&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">39<\/span><span class=\"cl\"> <span class=\"nt\">&lt;\/checkstyle&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">40<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">41<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u751f\u6210\u62a5\u544a,\u5176\u683c\u5f0f\u53d6\u51b3\u4e8e${checkstyle.report.style} --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">42<\/span><span class=\"cl\"> <span class=\"nt\">&lt;style<\/span> <span class=\"na\">in=<\/span><span class=\"s\">&#34;${checkstyle.result}&#34;<\/span> <span class=\"na\">out=<\/span><span class=\"s\">&#34;${checkstyle.report}&#34;<\/span> <span class=\"na\">style=<\/span><span class=\"s\">&#34;${checkstyle.report.style}&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">43<\/span><span class=\"cl\"> <span class=\"nt\">&lt;\/target&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">44<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">45<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u5f53\u6709\u4e0d\u89c4\u8303\u7684\u60c5\u51b5\u53d1\u751f\u65f6\u5c06\u68c0\u67e5\u7ed3\u679c\u53d1\u9001\u5230 --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">46<\/span><span class=\"cl\"> <span class=\"nt\">&lt;target<\/span> <span class=\"na\">name=<\/span><span class=\"s\">&#34;checkstyle-nightly&#34;<\/span> <span class=\"na\">depends=<\/span><span class=\"s\">&#34;checkstyle&#34;<\/span> <span class=\"na\">if=<\/span><span class=\"s\">&#34;checkstyle.failure&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">47<\/span><span class=\"cl\"> <span class=\"na\">description=<\/span><span class=\"s\">&#34;Sends email if checkstyle detected code conventions violations.&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">48<\/span><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"ln\">49<\/span><span class=\"cl\"> <span class=\"c\">&lt;!-- \u5982\u679c\u90ae\u4ef6\u670d\u52a1\u5668\u9700\u8981\u9a8c\u8bc1\uff0c\u5219\u52a0\u4e0a user \u548c password \u5c5e\u6027 --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">50<\/span><span class=\"cl\"> <span class=\"nt\">&lt;mail<\/span> <span class=\"na\">from=<\/span><span class=\"s\">&#34;(Admin)admin@xxx.com&#34;<\/span> <span class=\"na\">tolist=<\/span><span class=\"s\">&#34;${mail.list}&#34;<\/span> <span class=\"na\">mailhost=<\/span><span class=\"s\">&#34;mail.xxx.com&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">51<\/span><span class=\"cl\"> <span class=\"na\">subject=<\/span><span class=\"s\">&#34; checkstyle result from project reports&#34;<\/span> <span class=\"na\">files=<\/span><span class=\"s\">&#34;${checkstyle.report}&#34;<\/span><span class=\"nt\">\/&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">52<\/span><span class=\"cl\"> <span class=\"nt\">&lt;\/target&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"ln\">53<\/span><span class=\"cl\"><span class=\"nt\">&lt;\/project&gt;<\/span><\/span><\/span><\/code><\/pre><\/div>\n<br\/>\n&lt;\u7ee7\u7eed\u8865\u5145\u5185\u5bb9&gt;"}]}}