{"$schema": "https://c3voc.de/schedule/schema.json", "generator": {"name": "pretalx", "version": "2026.1.1"}, "schedule": {"url": "https://pretalx.com/jcconf-2025/schedule/", "version": "0.24", "base_url": "https://pretalx.com", "conference": {"acronym": "jcconf-2025", "title": "JCConf 2025", "start": "2025-09-19", "end": "2025-09-19", "daysCount": 1, "timeslot_duration": "00:05", "time_zone_name": "Asia/Taipei", "colors": {"primary": "#3aa57c"}, "rooms": [{"name": "401", "slug": "4459-401", "guid": "a250931c-41cc-5e13-bdde-fb4960a2b1cf", "description": null, "capacity": null}, {"name": "402AB", "slug": "4460-402ab", "guid": "4e2539d4-e2f0-57eb-8474-a8dd0c6e061e", "description": null, "capacity": null}, {"name": "402CD", "slug": "4461-402cd", "guid": "cb46eb54-4e22-5277-9f1f-0f0b00d3bdae", "description": null, "capacity": null}, {"name": "203", "slug": "4462-203", "guid": "c2e2f700-18ed-5655-8760-4ce34968be50", "description": null, "capacity": null}, {"name": "403", "slug": "4463-403", "guid": "61fbf807-b787-54cf-a485-9e97d1b601cf", "description": null, "capacity": null}], "tracks": [{"name": "Promotion", "slug": "5773-promotion", "color": "#C19D0C"}, {"name": "402AB", "slug": "5774-402ab", "color": "#268785"}, {"name": "401", "slug": "5775-401", "color": "#D0104C"}, {"name": "402CD", "slug": "5776-402cd", "color": "#1B813E"}, {"name": "203", "slug": "5777-203", "color": "#954A45"}, {"name": "403", "slug": "5778-403", "color": "#574C57"}], "days": [{"index": 1, "date": "2025-09-19", "day_start": "2025-09-19T04:00:00+08:00", "day_end": "2025-09-20T03:59:00+08:00", "rooms": {"401": [{"guid": "8c69da0f-93f6-53b8-a51a-ce820c3c84a4", "code": "U8DEVV", "id": 78349, "logo": null, "date": "2025-09-19T09:25:00+08:00", "start": "09:25", "duration": "00:10", "room": "401", "slug": "jcconf-2025-78349-opening", "url": "https://pretalx.com/jcconf-2025/talk/U8DEVV/", "title": "Opening", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "Opening", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/U8DEVV/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/U8DEVV/", "attachments": []}, {"guid": "3d7154de-12e0-51d2-9a8c-55c48f815896", "code": "KRNWHV", "id": 80020, "logo": null, "date": "2025-09-19T09:35:00+08:00", "start": "09:35", "duration": "00:05", "room": "401", "slug": "jcconf-2025-80020-line", "url": "https://pretalx.com/jcconf-2025/talk/KRNWHV/", "title": "\u5ba3\u50b3\u8b70\u7a0b - LINE", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "\u7e3d\u90e8\u4f4d\u65bc\u65e5\u672c\u7684LINE\u4ee5\u300c\u62c9\u8fd1\u4f60\u6211\u7684\u8ddd\u96e2\u300d\u70ba\u4f01\u696d\u4f7f\u547d\uff0c\u900f\u904e\u591a\u5143\u7684\u884c\u52d5\u670d\u52d9\u8207\u5167\u5bb9\uff0c\u81f4\u529b\u5c07\u4eba\u5011\u3001\u8cc7\u8a0a\u8207\u793e\u6703\u7dca\u5bc6\u9023\u7d50\u3002\u81ea2011\u5e746\u6708\u4ee5\u901a\u8a0a\u8edf\u9ad4\u7684\u578b\u614b\u63a8\u51fa\uff0c\u73fe\u66f4\u63a8\u5c55\u5176\u591a\u5143\u7684\u5168\u7403\u751f\u614b\u7cfb\uff0c\u4e26\u5c07\u89f8\u89d2\u5ef6\u4f38\u81f3\u4eba\u5de5\u667a\u6167\u3001\u91d1\u878d\u79d1\u6280\u7b49\u9818\u57df\uff0c\u7a4d\u6975\u5be6\u73fe\u300c\u667a\u6167\u5165\u53e3\u300d\u7684\u9858\u666f\uff0c2021\u5e743\u6708\uff0cLINE\u8207\u65e5\u672c\u898f\u6a21\u6700\u5927\u7684\u7db2\u8def\u79d1\u6280\u96c6\u5718\u4e4b\u4e00Z Holdings \u6b63\u5f0f\u6574\u4f75\uff0c\u672a\u4f86\u4e5f\u5c07\u6301\u7e8c\u63d0\u4f9b\u7528\u6236\u4eab\u6709\u6700\u5373\u6642\u3001\u4fbf\u5229\u7684\u884c\u52d5\u751f\u6d3b\u3002\u6b32\u77ad\u89e3\u66f4\u591a\u8cc7\u8a0a\uff0c\u8acb\u700f\u89bd\u5b98\u65b9\u7db2\u7ad9\uff1ahttp://linecorp.com/zh-hant/", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/KRNWHV/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/KRNWHV/", "attachments": []}, {"guid": "8fc5fbd0-5a9b-5de2-8efb-2a411b7c8bf0", "code": "8PBNXM", "id": 75893, "logo": null, "date": "2025-09-19T09:40:00+08:00", "start": "09:40", "duration": "00:45", "room": "401", "slug": "jcconf-2025-75893-from-the-jdk-21-25-langage-api-jvm-en", "url": "https://pretalx.com/jcconf-2025/talk/8PBNXM/", "title": "From the JDK 21 25: Langage, API, JVM (EN)", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "The 25 version of the JDK is a version on which vendors offer Long Term Support (LTS), and thus a version that companies and projects will adopt. It probably makes sense to take a look at all the features added to the JDK between 21 and 25, in the language, the API, and the JVM. This presentation focuses on four elements. This first one is the in-memory data processing, with the Gatherer API, the last addition to the Stream API. The second one has to do with asynchronous programming with the Loom project. Loom delivered Virtual Threads as a final feature in the JDK 21, and fixed the pinning issue in the JDK 24. It is delivering Scoped Values, a replacement of ThreadLocals as a final feature in the JDK 25, and a new version of the Structured Concurrency API, still as a preview feature in the JDK 25. And at last, we will talk about immutability and null values handling, with Stable Values, a new API available as a preview feature, also in the JDK 25.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "JZRPNT", "name": "Jose PAUMARD", "avatar": "https://pretalx.com/media/avatars/JZRPNT_QpIIjmA.webp", "biography": null, "public_name": "Jose PAUMARD", "guid": "eebfa352-e923-5817-b18a-7a72c3bb39a7", "url": "https://pretalx.com/jcconf-2025/speaker/JZRPNT/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/8PBNXM/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/8PBNXM/", "attachments": []}, {"guid": "d14bfcbf-c8ec-5e84-a270-9ad618828eb7", "code": "XBXDYR", "id": 78348, "logo": null, "date": "2025-09-19T10:25:00+08:00", "start": "10:25", "duration": "00:10", "room": "401", "slug": "jcconf-2025-78348-break", "url": "https://pretalx.com/jcconf-2025/talk/XBXDYR/", "title": "Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/XBXDYR/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/XBXDYR/", "attachments": []}, {"guid": "ea491feb-beda-58bf-88e7-660b7aa7d469", "code": "XEQMGG", "id": 80021, "logo": null, "date": "2025-09-19T10:35:00+08:00", "start": "10:35", "duration": "00:05", "room": "401", "slug": "jcconf-2025-80021", "url": "https://pretalx.com/jcconf-2025/talk/XEQMGG/", "title": "\u5ba3\u50b3\u8b70\u7a0b - \u5b8f\u5ead\u79d1\u6280", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "\u5b8f\u5ead\u79d1\u6280 Microfusion \u662f Microsoft Infrastructure Partner \u8207 Solution Partner\uff0c\u540c\u6642\u4e5f\u662f GitHub \u6388\u6b0a\u92b7\u552e\u8207\u6280\u8853\u5408\u4f5c\u5925\u4f34\u3002\u5c08\u7cbe\u65bc\u63d0\u4f9b\u4e00\u7ad9\u5f0f\u96f2\u7aef\u89e3\u6c7a\u65b9\u6848\uff0c\u64c1\u6709\u5c08\u696d\u7684\u67b6\u69cb\u5e2b\u3001\u7dad\u904b\u5718\u968a\u8207\u6578\u64da\u61c9\u7528\u5718\u968a\uff0c\u5354\u52a9\u5ba2\u6236\u9032\u884c\u96f2\u7aef\u9077\u79fb\u3001IT \u67b6\u69cb\u73fe\u4ee3\u5316\u3001\u6578\u64da\u5206\u6790\u3001\u96f2\u7aef\u4ee3\u7ba1\u7b49\u61c9\u7528\u5c0e\u5165\u8207\u6700\u4f73\u5316\u670d\u52d9\u3002\n\n\u6b64\u5916\uff0c\u5b8f\u5ead\u79d1\u6280\u4e5f\u63d0\u4f9b GitHub \u4f01\u696d\u7d1a\u89e3\u6c7a\u65b9\u6848\uff0c\u5354\u52a9\u958b\u767c\u5718\u968a\u5c0e\u5165 DevOps \u8207 AI \u958b\u767c\u5de5\u5177\uff0c\u52a0\u901f\u8edf\u9ad4\u958b\u767c\u6d41\u7a0b\u3001\u63d0\u5347\u5718\u968a\u5354\u4f5c\u6548\u80fd\u3002\u81f3\u4eca\u5df2\u5354\u52a9\u570b\u5167\u5916\u8d85\u904e 2000 \u5bb6\u4f01\u696d\u5b8c\u6210\u6578\u4f4d\u8f49\u578b\uff0c\u6db5\u84cb\u96f6\u552e\u3001\u7269\u6d41\u3001\u88fd\u9020\u3001\u91d1\u878d\u3001\u904a\u6232\u3001\u6559\u80b2\u8207\u516c\u90e8\u9580\u7b49\u591a\u5143\u7522\u696d\u9818\u57df\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/XEQMGG/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/XEQMGG/", "attachments": []}, {"guid": "79b237b8-df24-5789-8c78-4d2f341c4f8e", "code": "RWQKBX", "id": 73542, "logo": null, "date": "2025-09-19T10:40:00+08:00", "start": "10:40", "duration": "00:45", "room": "401", "slug": "jcconf-2025-73542-java-25-lts-in-2025", "url": "https://pretalx.com/jcconf-2025/talk/RWQKBX/", "title": "Java 25 LTS in 2025", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "2025 \u5e74\uff0c\u6211\u5011\u8eac\u9022 Java \u5e73\u53f0\u8a95\u751f 30 \u9031\u5e74\u7684\u76db\u4e8b\uff0c\u540c\u6642\u4e5f\u8fce\u4f86\u4e86\u95dc\u9375\u7684\u9577\u671f\u652f\u63f4\u7248\u672c Java 25 \u7684\u767c\u5e03\u3002\u672c\u6b21\u8b70\u7a0b\u5c07\u5e36\u9818\u5927\u5bb6\u4e00\u540c\u56de\u9867\u4e26\u63a2\u8a0e\u9019\u500b\u627f\u5148\u555f\u5f8c\u7248\u672c\u6240\u5e36\u4f86\u7684\u91cd\u5927\u8b8a\u9769\u3002\u5167\u5bb9\u5c07\u6db5\u84cb\u4eca\u5e74\u4e0a\u7dda\u7684 Java 24 \u53ca Java 25 \u7684\u6838\u5fc3\u65b0\u7279\u6027\uff0c\u5305\u542b\u5f48\u6027\u5efa\u69cb\u5f0f\u4e3b\u9ad4\u3001\u985e\u5225\u6a94\u6848 API\u3001\u4e32\u6d41\u805a\u96c6\u5668\u3001\u7bc4\u570d\u503c\u3001\u6a21\u7d44\u532f\u5165\u5ba3\u544a\u3001\u7c21\u6f54\u539f\u59cb\u6a94\u548c\u5be6\u4f8b\u4e3b\u65b9\u6cd5\u7b49\u7b49\u3002\u5e0c\u671b\u80fd\u70ba\u8cc7\u6df1\u7684 Java \u958b\u767c\u8005\u63d0\u4f9b\u4e00\u4efd\u6e05\u6670\u7684\u85cd\u5716\uff0c\u4e0d\u50c5\u7406\u89e3\u65b0\u529f\u80fd\u7684\u300c\u662f\u4ec0\u9ebc\u300d\u8207\u300c\u5982\u4f55\u7528\u300d\uff0c\u66f4\u6d1e\u6089\u5176\u80cc\u5f8c\u7684\u300c\u70ba\u4ec0\u9ebc\u300d\uff0c\u70ba\u4e0b\u4e00\u500b\u4e09\u5341\u5e74\u7684 Java \u6280\u8853\u6f14\u9032\u5960\u5b9a\u7a69\u56fa\u7684\u57fa\u77f3\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "G9HLDU", "name": "Joseph Kuo", "avatar": "https://pretalx.com/media/avatars/G9HLDU_IjdNFmr.webp", "biography": "\u5341\u4e94\u6b72\u7372\u8d08\u820a\u7684 386 \u96fb\u8166\uff0c\u6c92\u6709\u786c\u789f\u548c\u5149\u789f\u6a5f\u7121\u6cd5\u73a9\u5927\u88dc\u5e16\uff0c\u53ea\u80fd\u8d70\u4e0a\u5beb\u7a0b\u5f0f\u9019\u689d\u4e0d\u6b78\u8def\u3002\u9ad8\u4e2d\u6642\u958b\u767c\u4e86\u884c\u4e8b\u66c6\u8edf\u9ad4\u548c\u5c0f\u904a\u6232\uff0c\u5927\u5b78\u5538\u6578\u5b78\u526f\u4fee\u8cc7\u5de5\u73a9 C / C++ / Java\u3002\u67b6\u904e BBS \u548c\u90e8\u843d\u683c\uff0c\u6253\u5de5\u5916\u5305\u505a\u5f62\u8c61\u7db2\u7ad9\u3001\u96fb\u5546\u5e73\u53f0\u548c\u9032\u92b7\u5b58\u7cfb\u7d71\uff0c\u4e5f\u9806\u624b\u5beb\u904e MUD \u6587\u5b57\u904a\u6232\u3002\u66fe\u5728\u9023\u9396\u8cc7\u8a0a\u6559\u80b2\u6a5f\u69cb\u3001\u52a0\u503c\u7c21\u8a0a\u670d\u52d9\u5546\u3001\u5206\u6563\u5f0f\u96f2\u7aef\u5f71\u97f3\u5e73\u53f0\u3001\u5168\u7403\u96fb\u5b50\u5546\u52d9\u5e73\u53f0\u3001\u8cc7\u5b89\u9632\u8b77\u3001\u7528\u6236\u884c\u70ba\u5ee3\u544a\u7ba1\u7406\u3001\u667a\u6167\u7269\u806f\u7db2\u7b49\u516c\u53f8\u5de5\u4f5c\uff0c\u8ca0\u8cac\u5404\u5f0f\u5927\u578b\u5c08\u6848\u7684\u5546\u696d\u9700\u6c42\u3001\u7b56\u7565\u898f\u5283\u3001\u898f\u683c\u5206\u6790\u3001\u67b6\u69cb\u8a2d\u8a08\u3001\u958b\u767c\u5be6\u4f5c\u3001\u6e2c\u8a66\u8abf\u6821\u3001\u90e8\u7f72\u7dad\u904b\u3001\u9810\u6e2c\u5b78\u7fd2\uff0c\u4ee5\u53ca\u6280\u8853\u6307\u5c0e\u3002\u5c08\u9577\u662f Java\u3001\u8edf\u9ad4\u5de5\u7a0b\u3001\u7cfb\u7d71\u67b6\u69cb\u3001\u8a2d\u8a08\u6a21\u5f0f\u3001\u96f2\u7aef\u904b\u7b97\u3001\u908a\u7de3\u904b\u7b97\u3001\u7269\u806f\u7db2\u53ca\u5404\u5f0f\u76f8\u95dc\u6280\u8853\u3002\u72c2\u71b1\u5730\u559c\u611b\u628a\u73a9\u5404\u7a2e\u65b0\u77e5\u6280\u8853\uff0c\u9858\u671b\u662f\u80fd\u4e00\u8f29\u5b50\u5beb\u7a0b\u5f0f\u5beb\u5230\u8001\u3002", "public_name": "Joseph Kuo", "guid": "2c2dea2e-dc37-5673-8c63-51bc1db138b0", "url": "https://pretalx.com/jcconf-2025/speaker/G9HLDU/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/RWQKBX/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/RWQKBX/", "attachments": []}, {"guid": "e90cdd21-5158-5727-ad19-c7f2120db7c5", "code": "9VA8VX", "id": 78350, "logo": null, "date": "2025-09-19T11:25:00+08:00", "start": "11:25", "duration": "00:12", "room": "401", "slug": "jcconf-2025-78350-break", "url": "https://pretalx.com/jcconf-2025/talk/9VA8VX/", "title": "Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/9VA8VX/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/9VA8VX/", "attachments": []}, {"guid": "2ffe8298-d1fc-525f-90b1-df77eb5b8598", "code": "BX8QSH", "id": 80087, "logo": null, "date": "2025-09-19T11:37:00+08:00", "start": "11:37", "duration": "00:03", "room": "401", "slug": "jcconf-2025-80087-jetbrains", "url": "https://pretalx.com/jcconf-2025/talk/BX8QSH/", "title": "\u5ba3\u50b3\u8b70\u7a0b - JetBrains", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "-", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/BX8QSH/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/BX8QSH/", "attachments": []}, {"guid": "d362571e-a21d-5814-8429-08bed92983e9", "code": "77YVZM", "id": 79310, "logo": null, "date": "2025-09-19T11:40:00+08:00", "start": "11:40", "duration": "00:45", "room": "401", "slug": "jcconf-2025-79310-kotlin--ai-agent-koog-agent-framework", "url": "https://pretalx.com/jcconf-2025/talk/77YVZM/", "title": "\u4ee5 Kotlin \u6253\u9020 AI Agent\uff1aKoog Agent Framework \u5be6\u6230\u5165\u9580", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "\u96a8\u8457 AI \u6280\u8853\u7684\u8fc5\u901f\u6f14\u9032\uff0c\u958b\u767c\u8005\u5728\u6253\u9020 AI \u61c9\u7528\u6642\uff0c\u8d8a\u4f86\u8d8a\u9700\u8981\u4e00\u5957\u80fd\u63d0\u4f9b\u5b8c\u6574\u5143\u4ef6\u3001\u591a\u6a21\u578b\u6574\u5408\u80fd\u529b\uff0c\u4ee5\u53ca\u5177\u9ad8\u5ea6\u5f48\u6027\u8207\u53ef\u64f4\u5145\u6027\u7684\u67b6\u69cb\u3002\u70ba\u56de\u61c9\u9019\u6a23\u7684\u9700\u6c42\uff0cJetBrains \u5718\u968a\u5ef6\u7e8c\u4e00\u8cab\u5f9e\u5be6\u969b\u958b\u767c\u9700\u6c42\u51fa\u767c\u7684\u7cbe\u795e\uff0c\u63a8\u51fa\u7531 Kotlin \u539f\u751f\u6253\u9020\u7684 Agent Framework - Koog\u3002\n\nKoog \u652f\u63f4\u5f9e\u55ae\u8f2a\u5c0d\u8a71\u7684\u7c21\u6613\u4ee3\u7406\uff0c\u5230\u591a\u5de5\u5177\u5354\u4f5c\u7684\u8907\u96dc\u5de5\u4f5c\u6d41\u7a0b\uff0c\u4e26\u900f\u904e\u8c50\u5bcc\u6a21\u7d44\u8207\u512a\u96c5\u7684 Kotlin DSL\uff0c\u8b93\u958b\u767c\u8005\u80fd\u4f9d\u5c08\u6848\u9700\u6c42\u81ea\u7531\u7d44\u5408\u3001\u5feb\u901f\u69cb\u5efa\u5177\u5099\u4e32\u6d41\u56de\u61c9\u3001\u6301\u4e45\u8a18\u61b6\u7b49\u80fd\u529b\u7684\u667a\u80fd\u4ee3\u7406\u3002\n\n\u672c\u5834\u5206\u4eab\u5c07\u5f9e\u6700\u57fa\u790e\u7684\u5c0d\u8a71\u4ee3\u7406\u5165\u9580\uff0c\u5e36\u5927\u5bb6\u4e00\u6b65\u6b65\u6253\u9020\u7b2c\u4e00\u500b Koog Agent\uff0c\u4e26\u6df1\u5165\u63a2\u8a0e AI \u61c9\u7528\u958b\u767c\u4e2d\u5e38\u898b\u7684\u6311\u6230\u8207\u5be6\u4f5c\u7b56\u7565\uff0c\u4f8b\u5982\uff1a\u591a LLM \u5207\u63db\u3001MCP \u6574\u5408\u3001\u8a18\u61b6\u7cfb\u7d71\u8a2d\u8a08\u8207\u6b77\u53f2\u58d3\u7e2e\u7b49\u3002\u5982\u679c\u4f60\u6b63\u5728\u5c0b\u627e\u4e00\u5957\u5f37\u5927\u4e14\u8cbc\u8fd1 Kotlin \u958b\u767c\u8005\u601d\u7dad\u7684 Agent Framework\uff0cKoog \u5c07\u662f\u503c\u5f97\u95dc\u6ce8\u7684\u65b0\u9078\u64c7\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "JL9ME8", "name": "\u8303\u8056\u4f51", "avatar": "https://pretalx.com/media/avatars/JL9ME8_D9NU8WS.webp", "biography": "JetBrains \u6280\u8853\u50b3\u6559\u58eb\uff0c\u8ca0\u8cac\u63a8\u5ee3 Kotlin\u3001JetBrains IDE \u53ca\u76f8\u95dc\u6280\u8853\u3002\u5e73\u6642\u9189\u5fc3\u65bc\u6280\u8853\u7814\u7a76\uff0c\u5c08\u6ce8\u65bc Web\u3001\u5f8c\u7aef\u6280\u8853\u53ca\u80fd\u63d0\u5347\u751f\u7522\u529b\u7684\u6280\u5de7\uff0c\u81f4\u529b\u65bc\u5c07\u8907\u96dc\u7684\u6280\u8853\u540d\u8a5e\u7528\u901a\u4fd7\u6613\u61c2\u7684\u65b9\u5f0f\u8b93\u65b0\u624b\u4e5f\u80fd\u5438\u6536\u3002\u5de5\u4f5c\u4e4b\u9918\u4e5f\u662f\u591a\u5e74\u6280\u8853\u793e\u7fa4\u5fd7\u5de5\uff0c\u7a4d\u6975\u53c3\u8207\u958b\u6e90\u793e\u7fa4\u904b\u4f5c\u3002", "public_name": "\u8303\u8056\u4f51", "guid": "b371ad3e-b8cd-5f3e-840d-7d234620bfe3", "url": "https://pretalx.com/jcconf-2025/speaker/JL9ME8/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/77YVZM/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/77YVZM/", "attachments": []}, {"guid": "a6ebc904-5d46-5acd-8bdd-5493479d884c", "code": "MTV9D7", "id": 78351, "logo": null, "date": "2025-09-19T12:25:00+08:00", "start": "12:25", "duration": "00:57", "room": "401", "slug": "jcconf-2025-78351-lunch-and-break", "url": "https://pretalx.com/jcconf-2025/talk/MTV9D7/", "title": "\ud83c\udf74Lunch and Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "\ud83c\udf74Lunch and Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/MTV9D7/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/MTV9D7/", "attachments": []}, {"guid": "d5bfa446-894b-5b78-a00b-27ad214caa33", "code": "7WSAT9", "id": 80088, "logo": null, "date": "2025-09-19T13:22:00+08:00", "start": "13:22", "duration": "00:03", "room": "401", "slug": "jcconf-2025-80088-mysql", "url": "https://pretalx.com/jcconf-2025/talk/7WSAT9/", "title": "\u5ba3\u50b3\u8b70\u7a0b - MySQL", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "-", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/7WSAT9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/7WSAT9/", "attachments": []}, {"guid": "c730be03-307c-5e20-a69b-87948d73ce43", "code": "SKGNMC", "id": 72792, "logo": null, "date": "2025-09-19T13:25:00+08:00", "start": "13:25", "duration": "00:15", "room": "401", "slug": "jcconf-2025-72792-spring-authorization-server--otp", "url": "https://pretalx.com/jcconf-2025/talk/SKGNMC/", "title": "\u6cd5\u898f\u63b0\u63b0\uff01Spring Authorization Server \u7684 OTP \u6574\u5408\u5feb\u653b", "subtitle": "", "track": "401", "type": "Quickie", "language": "zh-hant", "abstract": "\u5728 OIDC \u7684\u8a8d\u8b49\u6d41\u7a0b\u4e2d\uff0c\u900f\u904e\u5ba2\u88fd\u5316 Spring Authorization Server\uff0c\u52a0\u5165\u7b2c\u4e8c\u500b\u8a8d\u8b49\u56e0\u5b50 (OTP)\uff0c\u4ee5\u9054\u6210\u90e8\u5206\u6cd5\u898f\uff0c\u898f\u7bc4\u767b\u5165\u6642\u9700\u8981 MFA (Multi-factor Authentication) \u8981\u6c42\u7684\u5feb\u901f\u65b9\u6848\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "8PPWNJ", "name": "Sam Wang", "avatar": null, "biography": "Hi \u6211\u662fSam\uff0c\u4efb\u8077\u65bc\u677e\u51cc\u79d1\u6280 \u7814\u767c\u90e8\u9580\uff0c\u6301\u7e8c\u65bc Java \u958b\u767c\u548c\u5bb9\u5668\u5316\u6280\u8853\u947d\u7814\u3002", "public_name": "Sam Wang", "guid": "2de6bf4d-eb19-5ad6-a800-d16c19937f62", "url": "https://pretalx.com/jcconf-2025/speaker/8PPWNJ/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/SKGNMC/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/SKGNMC/", "attachments": []}, {"guid": "1bcd35f4-3360-5ef2-8fb9-c1279dc94e8e", "code": "GKFHPQ", "id": 78352, "logo": null, "date": "2025-09-19T13:40:00+08:00", "start": "13:40", "duration": "00:05", "room": "401", "slug": "jcconf-2025-78352-break", "url": "https://pretalx.com/jcconf-2025/talk/GKFHPQ/", "title": "Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/GKFHPQ/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/GKFHPQ/", "attachments": []}, {"guid": "be2972d8-1c43-512c-bdd2-44383a7992e0", "code": "HV9QYX", "id": 74742, "logo": null, "date": "2025-09-19T13:45:00+08:00", "start": "13:45", "duration": "00:15", "room": "401", "slug": "jcconf-2025-74742-spring-ai-openapi--agent---api", "url": "https://pretalx.com/jcconf-2025/talk/HV9QYX/", "title": "\u7528 Spring AI + OpenAPI \u64f4\u5145 Agent \u80fd\u529b\uff1a\u8b93\u4f60\u7684 API \u63a5\u4e0a\u81ea\u7136\u8a9e\u8a00", "subtitle": "", "track": "401", "type": "Quickie", "language": "zh-hant", "abstract": "\u60f3\u8b93\u4f60\u7684\u5f8c\u7aef API \u80fd\u88ab AI \u81ea\u7136\u8a9e\u8a00\u9a45\u52d5\uff1f\u672c\u5834\u5206\u4eab\u5c07\u793a\u7bc4\u5982\u4f55\u7d50\u5408 Spring AI\u3001OpenAPI Generator \u4ee5\u53ca Feign Client\uff0c\u6253\u9020\u4e00\u500b\u80fd\u7406\u89e3\u8a9e\u610f\u3001\u9078\u64c7\u6b63\u78ba API \u547c\u53eb\u3001\u4e26\u56de\u61c9\u4f7f\u7528\u8005\u9700\u6c42\u7684\u667a\u6167\u52a9\u624b\u3002\n\n\u4f60\u5c07\u6703\u770b\u5230\u5982\u4f55\u8b93 AI agent \u7406\u89e3 OpenAPI \u5b9a\u7fa9\u3001\u81ea\u52d5\u4e32\u63a5 Feign client \u6210\u70ba\u53ef\u57f7\u884c\u5de5\u5177\uff0c\u4e26\u900f\u904e Spring AI agent \u6a5f\u5236\u8b93\u9019\u4e9b\u5de5\u5177\u80fd\u88ab\u8a9e\u8a00\u6a21\u578b\u6709\u6548\u8abf\u5ea6\u3002\n\n\u7121\u9700\u5b78 LangChain\uff0c\u4e5f\u4e0d\u9700\u8981\u984d\u5916\u5efa\u6a21\u77e5\u8b58\uff0c\u9019\u6b21\u6211\u5011\u5c08\u6ce8\u65bc\u300c\u7528\u719f\u6089\u7684 Spring \u751f\u614b\uff0c\u505a\u51fa\u80fd\u771f\u7684\u843d\u5730\u7684 AI \u52a9\u7406\u300d\uff0c\u8b93\u4f60\u7684 API \u76f4\u63a5\u63a5\u4e0a\u81ea\u7136\u8a9e\u8a00\uff0c\u5be6\u73fe API as Copilot \u7684\u9858\u666f\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "7KG87A", "name": "\u9673\u51a0\u7def", "avatar": "https://pretalx.com/media/avatars/7KG87A_S6UA6nv.webp", "biography": "\u6211\u53eb\u9673\u51a0\u7def, \u76ee\u524d\u4efb\u8077\u65bc\u570b\u6cf0\u91d1\u63a7, \u64d4\u4efb\u52a9\u7406\u67b6\u69cb\u5e2b", "public_name": "\u9673\u51a0\u7def", "guid": "f91a7a0a-884a-558a-a236-0d8c6b51576b", "url": "https://pretalx.com/jcconf-2025/speaker/7KG87A/"}, {"code": "GQLFTE", "name": "Samson", "avatar": "https://pretalx.com/media/avatars/GQLFTE_SNOfQje.webp", "biography": "\u60a8\u597d\uff0c\u6211\u662f\u4e00\u4f4d\u8cc7\u6df1\u7684\u8edf\u9ad4\u5de5\u7a0b\u5e2b\uff0c\u64c1\u6709\u8c50\u5bcc\u7684\u7cfb\u7d71\u958b\u767c\u8207\u67b6\u69cb\u8a2d\u8a08\u7d93\u9a57\u3002\u6211\u7684\u8077\u6daf\u59cb\u65bc\u5168\u7aef\u958b\u767c\uff0c\u719f\u7a14\u524d\u5f8c\u7aef\u6280\u8853\uff0c\u5305\u542b Angular\u3001Java Spring MVC \u7b49\u3002\u96a8\u5f8c\uff0c\u6211\u5c08\u6ce8\u65bc\u5f8c\u7aef\u958b\u767c\uff0c\u6df1\u5165\u7814\u7a76\u5fae\u670d\u52d9\u67b6\u69cb\u8207\u96f2\u7aef\u6280\u8853\uff0c\u5305\u542b GCP \u8207 AWS\u3002\u6211\u66fe\u4e3b\u5c0e\u55ae\u9ad4\u5f0f\u67b6\u69cb\u7684\u5fae\u670d\u52d9\u91cd\u69cb\uff0c\u6210\u529f\u63d0\u5347\u7cfb\u7d71\u7684\u4f75\u767c\u8655\u7406\u80fd\u529b\u8207\u7a69\u5b9a\u6027\u3002\n\n\u76ee\u524d\uff0c\u6211\u65bc\u570b\u6cf0\u91d1\u63a7\u64d4\u4efb\u52a9\u7406\u67b6\u69cb\u5e2b\uff0c\u8ca0\u8cac\u63d0\u51fa\u7cfb\u7d71\u89e3\u6c7a\u65b9\u6848\u8207\u6982\u5ff5\u9a57\u8b49 (POC)\uff0c\u7279\u5225\u805a\u7126\u65bc Spring AI \u61c9\u7528\u8207 AI \u9a45\u52d5\u7684\u81ea\u52d5\u5316\u5de5\u5177\u958b\u767c\u3002\u8fd1\u671f\u6211\u81f4\u529b\u65bc\u63a2\u7d22\u5982\u4f55\u5229\u7528 Spring AI \u7684\u5f37\u5927\u80fd\u529b\uff0c\u7d50\u5408 OpenAPI \u898f\u7bc4\uff0c\u6253\u9020\u51fa\u80fd\u7406\u89e3\u4e26\u4e92\u52d5\u7684\u667a\u6167\u5316 API \u52a9\u624b\u3002\u6211\u5c0d\u65bc\u900f\u904e AI \u63d0\u5347\u958b\u767c\u6548\u7387\u3001\u512a\u5316 API \u4f7f\u7528\u9ad4\u9a57\u62b1\u6709\u6975\u5927\u71b1\u60c5\u3002\n\n\u6211\u7684\u6280\u8853\u5c08\u9577\u6db5\u84cb\u5fae\u670d\u52d9\u67b6\u69cb\u3001\u96f2\u7aef\u904b\u7b97\u3001\u7cfb\u7d71\u8a2d\u8a08\u8207\u958b\u767c\uff0c\u4e26\u6301\u7e8c\u95dc\u6ce8 AI \u6280\u8853\u5728\u8edf\u9ad4\u5de5\u7a0b\u9818\u57df\u7684\u5275\u65b0\u61c9\u7528\u3002\u6211\u6a02\u65bc\u5206\u4eab\u6280\u8853\u77e5\u8b58\uff0c\u4e26\u671f\u5f85\u5728 JJConf \u8207\u5927\u5bb6\u4e00\u540c\u63a2\u8a0e\u5982\u4f55\u904b\u7528 Spring AI \u70ba\u958b\u767c\u8005\u5e36\u4f86\u66f4\u591a\u50f9\u503c\u3002", "public_name": "Samson", "guid": "9bbf8632-f3f8-5359-9908-398506c152c6", "url": "https://pretalx.com/jcconf-2025/speaker/GQLFTE/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/HV9QYX/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/HV9QYX/", "attachments": []}, {"guid": "aab5801f-16d1-52ae-a796-56e2e118b35a", "code": "PSLV3R", "id": 78353, "logo": null, "date": "2025-09-19T14:00:00+08:00", "start": "14:00", "duration": "00:07", "room": "401", "slug": "jcconf-2025-78353-break", "url": "https://pretalx.com/jcconf-2025/talk/PSLV3R/", "title": "Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/PSLV3R/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/PSLV3R/", "attachments": []}, {"guid": "fe2e8d0f-ca37-5247-9272-c212fc2ea834", "code": "MW8SZH", "id": 80089, "logo": null, "date": "2025-09-19T14:07:00+08:00", "start": "14:07", "duration": "00:03", "room": "401", "slug": "jcconf-2025-80089-tsmc", "url": "https://pretalx.com/jcconf-2025/talk/MW8SZH/", "title": "\u5ba3\u50b3\u8b70\u7a0b - TSMC", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "-", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/MW8SZH/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/MW8SZH/", "attachments": []}, {"guid": "75b2b7f1-7087-5f80-8f7e-3f5e9c3d8af1", "code": "KHJHAG", "id": 74633, "logo": null, "date": "2025-09-19T14:10:00+08:00", "start": "14:10", "duration": "00:45", "room": "401", "slug": "jcconf-2025-74633-jvm--ai--gc", "url": "https://pretalx.com/jcconf-2025/talk/KHJHAG/", "title": "JVM \u5167\u90e8\u6a5f\u5236\uff1aAI \u5de5\u4f5c\u8ca0\u8f09\u7684 GC \u8abf\u6821\u8207\u8a18\u61b6\u9ad4\u512a\u5316", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "\u96a8\u8457 AI \u61c9\u7528\u7684\u666e\u53ca\uff0cJava \u7cfb\u7d71\u9762\u81e8\u524d\u6240\u672a\u6709\u7684\u8a18\u61b6\u9ad4\u6311\u6230\uff1a10GB+ \u7684\u6a21\u578b\u8f09\u5165\u3001\u6578\u5341\u842c\u500b\u5411\u91cf\u7269\u4ef6\u3001\u9023\u7e8c\u7684\u5927\u578b\u9663\u5217\u64cd\u4f5c\u3002\u8207\u6b64\u540c\u6642\uff0c2023-2025\u5e74\u898b\u8b49\u4e86 Java GC \u7684\u300c\u5206\u4ee3\u9769\u547d\u300d\uff1aGenerational ZGC \u5b8c\u6210\u6b77\u53f2\u6027\u8f49\u578b\u3001Shenandoah \u5373\u5c07\u52a0\u5165\u5206\u4ee3\u9663\u71df\u3001Compact Object Headers \u958b\u555f\u8a18\u61b6\u9ad4\u65b0\u7d00\u5143\u3002\n\n\u672c\u8b70\u7a0b\u5c07\u6df1\u5165\u89e3\u6790\u9019\u5834 GC \u9769\u547d\u5c0d AI \u5de5\u4f5c\u8ca0\u8f09\u7684\u5f71\u97ff\uff0c\u5f9e Netflix \u7684\u6578\u5343\u5fae\u670d\u52d9 ZGC \u90e8\u7f72\u5230 Apache Cassandra \u7684 4 \u500d\u6548\u80fd\u7a81\u7834\uff0c\u5f9e\u5be6\u9a57\u5ba4\u7684\u6280\u8853\u5275\u65b0\u5230\u751f\u7522\u74b0\u5883\u7684\u5be6\u969b\u61c9\u7528\u3002\u900f\u904e\u6700\u65b0\u7684\u57fa\u6e96\u6e2c\u8a66\u548c\u4f01\u696d\u6848\u4f8b\uff0c\u70ba Java AI \u61c9\u7528\u63d0\u4f9b 2025 \u5e74\u6700\u524d\u6cbf\u7684\u8abf\u512a\u7b56\u7565\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "9BFBEL", "name": "Jiayun Zhou", "avatar": null, "biography": ".", "public_name": "Jiayun Zhou", "guid": "4e5cbb7d-8f69-5c99-9e8f-6238869e04b7", "url": "https://pretalx.com/jcconf-2025/speaker/9BFBEL/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/KHJHAG/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/KHJHAG/", "attachments": []}, {"guid": "0ffc84e3-7d27-5540-902a-39df8ae9e14f", "code": "KPLLZB", "id": 78354, "logo": null, "date": "2025-09-19T14:55:00+08:00", "start": "14:55", "duration": "00:07", "room": "401", "slug": "jcconf-2025-78354-break", "url": "https://pretalx.com/jcconf-2025/talk/KPLLZB/", "title": "Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/KPLLZB/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/KPLLZB/", "attachments": []}, {"guid": "10c578e4-74b8-5ead-bc86-6d141fb60459", "code": "TUT8U9", "id": 80090, "logo": null, "date": "2025-09-19T15:02:00+08:00", "start": "15:02", "duration": "00:03", "room": "401", "slug": "jcconf-2025-80090", "url": "https://pretalx.com/jcconf-2025/talk/TUT8U9/", "title": "\u5ba3\u50b3\u8b70\u7a0b - \u8857\u53e3\u652f\u4ed8", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "-", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/TUT8U9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/TUT8U9/", "attachments": []}, {"guid": "15316352-7305-5426-80dc-032dbdd4ce58", "code": "UEELRJ", "id": 71879, "logo": null, "date": "2025-09-19T15:05:00+08:00", "start": "15:05", "duration": "00:45", "room": "401", "slug": "jcconf-2025-71879-java-beyond-frameworks-avoiding-lock-in-with-agnostic-design-en", "url": "https://pretalx.com/jcconf-2025/talk/UEELRJ/", "title": "Java Beyond Frameworks: Avoiding Lock-In with Agnostic Design (EN)", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "The Problem: Modern Java applications often become prisoners of their frameworks. While tools like Spring Boot and Quarkus accelerate development, they create hidden costs: vendor lock-in, bloated dependencies and rigid architectures. What happens when your project outgrows your framework or a new, better tool emerges?\n\nThe Solution: This talk introduces a layered approach to Java development, isolating framework dependencies while keeping core logic pure with Java and Jakarta EE. Through examples, you\u2019ll see:\n- How to decouple business logic using JSR standards\n- Strategies to replace framework-specific annotations\n- Cloud integration without framework coupling.\n\nTrade-Offs: Yes, this demands more upfront effort like writing custom persistence layers, rigorous tests, and meticulous docs. But the payoff is code that\u2019s adaptable, testable, and maintainable across frameworks, teams and decades.\n\nKey Takeaways:\n- Practical patterns for agnostic design.\n- When (and when not) to adopt this approach.\n\nJoin me to rethink Java development: less framework magic, more future-proof code.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "UB7VAB", "name": "Rijo Sam", "avatar": "https://pretalx.com/media/avatars/UB7VAB_YBtVcUZ.webp", "biography": "Rijo works as a Java Chapter Lead at ABN AMRO Bank, Netherlands. He possesses extensive experience in developing applications within the payments and credits sector of the banking domain. \nRijo is originally from India and now settled in Netherlands.\nEmbracing Dutch culture, he enjoys eating his sandwich while riding his bike ;-)", "public_name": "Rijo Sam", "guid": "ed3415a9-4d10-5189-80e4-fa0a23e39438", "url": "https://pretalx.com/jcconf-2025/speaker/UB7VAB/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/UEELRJ/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/UEELRJ/", "attachments": []}, {"guid": "a4e039da-ad36-5266-9641-12af71db5203", "code": "QGPDVZ", "id": 78355, "logo": null, "date": "2025-09-19T15:50:00+08:00", "start": "15:50", "duration": "00:27", "room": "401", "slug": "jcconf-2025-78355-tea-time", "url": "https://pretalx.com/jcconf-2025/talk/QGPDVZ/", "title": "\u2615 Tea Time", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "\u2615 Tea Time", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/QGPDVZ/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/QGPDVZ/", "attachments": []}, {"guid": "b197efc2-9be3-53dd-8a7c-93b14b908d50", "code": "PFTFUV", "id": 80091, "logo": null, "date": "2025-09-19T16:17:00+08:00", "start": "16:17", "duration": "00:03", "room": "401", "slug": "jcconf-2025-80091", "url": "https://pretalx.com/jcconf-2025/talk/PFTFUV/", "title": "\u5ba3\u50b3\u8b70\u7a0b - \u570b\u6cf0\u91d1\u63a7", "subtitle": "", "track": "Promotion", "type": "Session", "language": "zh-hant", "abstract": "-", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/PFTFUV/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/PFTFUV/", "attachments": []}, {"guid": "8e67a957-6403-5853-8fd6-06a296ae9039", "code": "GNA3AF", "id": 79861, "logo": null, "date": "2025-09-19T16:20:00+08:00", "start": "16:20", "duration": "00:45", "room": "401", "slug": "jcconf-2025-79861", "url": "https://pretalx.com/jcconf-2025/talk/GNA3AF/", "title": "\u58de\u4e86\uff0c\u7cfb\u7d71\u767c\u751f\u932f\u8aa4\u4e86", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "\u7576\u5b8c\u6210\u4e86\u4e00\u500b\u529f\u80fd\u7684\u958b\u767c\u4f46\u537b\u767c\u751f\u4e86\u610f\u6599\u4e4b\u5916\u7684\u932f\u8aa4\uff0c\u9664\u4e86\u91cd\u65b0\u68b3\u7406\u9700\u6c42\u5167\u5bb9\u3001\u8207\u4f7f\u7528\u8005\u8a0e\u8ad6\u4f8b\u5916\u60c5\u5883\u3001\u88dc\u5145\u6e2c\u8a66\u6848\u4f8b\u8207\u5728\u7a0b\u5f0f\u4e2d\u52a0\u5165 try catch\uff0c\u6211\u5011\u9084\u80fd\u505a\u4e9b\u4ec0\u9ebc\uff1f\n\u7576\u7cfb\u7d71\u5f9e\u55ae\u9ad4(monolithic)\u9010\u6f38\u7684\u9577\u5927\uff0c\u9032\u800c\u62c6\u5206\u6210\u5fae\u670d\u52d9(microservices)\uff0c\u5f9e\u4f7f\u7528\u51fd\u5f0f\u5eab\u5230\u5c0e\u5165\u4e2d\u9593\u4ef6(middleware)\u7b49\uff0c\u5728\u9019\u4e9b\u904e\u7a0b\u4e2d\u6211\u5011\u9700\u8981\u600e\u9ebc\u8655\u7406\u932f\u8aa4\u7684\u554f\u984c\uff1f\n\n\u672c\u6b21\u5206\u4eab\u5167\u5bb9\u4e26\u4e0d\u6703\u5c08\u6ce8\u5728\u67d0\u4e00\u7279\u5b9a\u5143\u4ef6\u3001\u51fd\u5f0f\u5eab\u7684\u4f7f\u7528\u6216\u7a0b\u5f0f\u61c9\u5982\u4f55\u64b0\u5beb\uff0c\u6211\u5011\u6703\u5f80\u67b6\u69cb\u5c64\u7d1a\u3001\u8a2d\u8a08\u6c7a\u7b56\u9032\u884c\u5206\u4eab\u3001\u8a0e\u8ad6\u8207\u601d\u8003\uff0c\n\u5206\u4eab\u7684\u5167\u5bb9\u6703\u570d\u7e5e\u5728\u5982\u4f55\u78ba\u5be6\u7684\u5b8c\u6210\u4e00\u500b\u696d\u52d9\u6d41\u7a0b\uff0c\u5118\u53ef\u80fd\u7684\u907f\u514d\u767c\u751f\u932f\u8aa4\u5f8c\u5c0e\u81f4\u7684\u4e00\u7cfb\u5217\u707d\u96e3", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "QSBNSX", "name": "Steven Wang", "avatar": null, "biography": null, "public_name": "Steven Wang", "guid": "ab3455b1-30da-5794-ae31-1cba87d019eb", "url": "https://pretalx.com/jcconf-2025/speaker/QSBNSX/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/GNA3AF/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/GNA3AF/", "attachments": []}, {"guid": "49206422-bdd9-52e0-b856-75a232a08f54", "code": "QNZAY9", "id": 78356, "logo": null, "date": "2025-09-19T17:05:00+08:00", "start": "17:05", "duration": "00:10", "room": "401", "slug": "jcconf-2025-78356-break", "url": "https://pretalx.com/jcconf-2025/talk/QNZAY9/", "title": "Break", "subtitle": "", "track": null, "type": "Quickie", "language": "zh-hant", "abstract": "Break", "description": null, "recording_license": "", "do_not_record": false, "persons": [], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/QNZAY9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/QNZAY9/", "attachments": []}, {"guid": "792c3141-a810-5e02-a639-4522ee98cc7a", "code": "QA9GRR", "id": 78184, "logo": null, "date": "2025-09-19T17:15:00+08:00", "start": "17:15", "duration": "00:45", "room": "401", "slug": "jcconf-2025-78184-spring-boot-test--no-rec", "url": "https://pretalx.com/jcconf-2025/talk/QA9GRR/", "title": "\u7576\u6e2c\u8a66\u6210\u70ba\u958b\u767c\u74f6\u9838\uff1a\u6df1\u5165 Spring Boot Test \u8abf\u6559\u5be6\u6230 (NO REC)", "subtitle": "", "track": "401", "type": "Session", "language": "zh-hant", "abstract": "\u5728\u7522\u54c1\u958b\u767c\u904e\u7a0b\u4e2d\uff0c\u6211\u5011\u7684\u5f8c\u7aef\u529f\u80fd\u8d8a\u4f86\u8d8a\u8c50\u5bcc\uff0c\u55ae\u5143\u6e2c\u8a66\u4e5f\u8d8a\u5beb\u8d8a\u591a\uff0c\u4f46\u4f34\u96a8\u800c\u4f86\u7684\u662f\u5169\u500b\u75db\u9ede\uff1a\n\n1. \u6e2c\u8a66\u7c92\u5ea6\u592a\u7d30\uff0c\u6bcf\u6b21\u91cd\u69cb\u3001\u67b6\u69cb\u8abf\u6574\u90fd\u8b8a\u5f97\u5bf8\u6b65\u96e3\u884c\n2. 2000+ \u500b\u6e2c\u8a66\u9700\u8981\u8dd1 10+ \u5206\u9418\uff0cCI/CD \u6d41\u7a0b\u8b8a\u6210\u4e86\u6f2b\u9577\u7684\u7b49\u5f85\n\n\u6e2c\u8a66\u672c\u8a72\u662f\u958b\u767c\u7684\u52a9\u529b\uff0c\u70ba\u4f55\u537b\u6210\u70ba\u6700\u5927\u7684\u963b\u7919\uff1f\n\u9019\u662f\u4e00\u500b\u5728\u56f0\u5883\u4e2d\u7a81\u7834\u91cd\u570d\u7684\u5be6\u6230\u6545\u4e8b\uff0c\u5206\u4eab\u6211\u5011\u5982\u4f55\u91cd\u65b0\u601d\u8003\u6e2c\u8a66\u7b56\u7565\uff0c\u8b93\u6e2c\u8a66\u67b6\u69cb\u812b\u80ce\u63db\u9aa8\uff0c\u4e26\u6df1\u5165 Spring Boot Test \u539f\u7406\uff0c\u627e\u5230\u6548\u80fd\u512a\u5316\u7684\u95dc\u9375\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "TZPWVJ", "name": "Abi Chang", "avatar": "https://pretalx.com/media/avatars/TZPWVJ_JKMP8jP.webp", "biography": "\u5f8c\u7aef\u5de5\u7a0b\u5e2b\uff0c\u8cc7\u6df1\u53c8\u4e0d\u8cc7\u6df1\u7684\u90a3\u7a2e\n\u6bcd\u8a9e\u662f\u5e74\u5e74\u90fd\u8eba\u68fa\u6750\uff0c\u4f46\u4e00\u76f4\u6c92\u88ab\u84cb\u68fa\u5165\u571f\u70ba\u5b89\u7684 Java\n\u8eab\u517c TDD \u90aa\u6559\u6559\u5f92\uff0c\u5c0d\u91cd\u69cb\u5c0f\u6709\u7814\u7a76\uff0c\u559c\u6b61\u6574\u7406\u6771\u897f\uff08\u5305\u542b\u7a0b\u5f0f\u78bc\uff09\u3002\n\u9762\u5c0d\u6df7\u4e82\u7684 Legacy Code\uff0c\u7e3d\u662f\u5148\u4ee5\u4e00\u53e5\u7d93\u5178\u7684\u300c\u5beb\u4e09\u5c0f\u300d\u958b\u982d\uff0c\u518d\u57cb\u982d\u91cd\u69cb\u6210\u512a\u96c5\u3001\u6e05\u6670\u3001\u53ef\u8b80\u3001\u7c21\u55ae\u7684\u7d50\u69cb\u3002", "public_name": "Abi Chang", "guid": "1f5c5f79-ae5d-5194-97ee-ce09a9f0bfc6", "url": "https://pretalx.com/jcconf-2025/speaker/TZPWVJ/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/QA9GRR/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/QA9GRR/", "attachments": []}], "402AB": [{"guid": "41cba5ee-68ad-5829-aafa-96401ee52c04", "code": "XMRGXA", "id": 74752, "logo": null, "date": "2025-09-19T10:40:00+08:00", "start": "10:40", "duration": "00:45", "room": "402AB", "slug": "jcconf-2025-74752-spring-boot-querydsl-graphql--api", "url": "https://pretalx.com/jcconf-2025/talk/XMRGXA/", "title": "Spring Boot \u00d7 QueryDSL \u00d7 GraphQL\uff1a\u6253\u9020\u5f48\u6027\u53c8\u5b89\u5168\u7684\u4f01\u696d\u7d1a\u52d5\u614b\u67e5\u8a62 API", "subtitle": "", "track": "402AB", "type": "Session", "language": "zh-hant", "abstract": "1. \u70ba\u4ec0\u9ebc\u4f01\u696d\u67e5\u8a62 API \u9700\u8981\u300c\u52d5\u614b\u67e5\u8a62\u300d\u8207\u300c\u6b04\u4f4d\u6b0a\u9650\u300d\uff1f\n\u696d\u52d9\u90e8\u9580\u3001\u8cc7\u6599\u5206\u6790\u5e2b\u3001IT \u5718\u968a\u7684\u591a\u5143\u67e5\u8a62\u9700\u6c42\n\u5e38\u898b\u7684\u67e5\u8a62\u75db\u9ede\uff1a\u904e\u5ea6\u4f9d\u8cf4\u591a\u7d44\u56fa\u5b9a API\u3001\u689d\u4ef6\u7d44\u5408\u5f48\u6027\u5dee\u3001\u6b04\u4f4d\u5916\u6d29\u98a8\u96aa\n\u6b0a\u9650\u63a7\u7ba1\u6311\u6230\uff1a\u4e0d\u540c\u89d2\u8272\u3001\u90e8\u9580\u3001\u7cfb\u7d71\u9593\u5c0d\u8cc7\u6599\u5b58\u53d6\u7684\u8907\u96dc\u898f\u5247\n\n2. \u6280\u8853\u9078\u578b\u8207\u67b6\u69cb\u8a2d\u8a08\n\u70ba\u4f55\u9078\u64c7 QueryDSL\uff1f\u5b83\u5728\u52d5\u614b\u67e5\u8a62\u3001\u985e\u578b\u5b89\u5168\u4e0a\u7684\u512a\u52e2\nGraphQL \u7684\u5f48\u6027\u67e5\u8a62\u8207\u6b04\u4f4d\u88c1\u5207 (projection) \u7279\u6027\n\u7d50\u5408 Spring Boot + QueryDSL + GraphQL \u67b6\u69cb\u5716\n\u50b3\u7d71 REST API vs. GraphQL \u67e5\u8a62 API\uff1a\u7dad\u8b77\u8207\u64f4\u5c55\u6027\u7684\u6bd4\u8f03\n\n3. QueryDSL \u5be6\u4f5c\u52d5\u614b\u67e5\u8a62\u7684\u95dc\u9375\u6280\u5de7\n\u7528 PredicateBuilder \u52d5\u614b\u7d44\u5408\u689d\u4ef6 (AND/OR\u3001IN\u3001LIKE \u7b49)\n\u652f\u63f4\u8907\u96dc\u67e5\u8a62\u8a9e\u610f\uff08\u5340\u9593\u3001\u6a21\u7cca\u3001\u806f\u96c6\u3001\u591a\u8868 Join\uff09\n\u600e\u9ebc\u4fdd\u6301\u67e5\u8a62\u6548\u80fd\u8207\u6613\u7dad\u8b77\u6027\n\u8207 JPA\u3001Spring Data \u7684\u6574\u5408\u7d93\u9a57\n\n4. GraphQL \u5be6\u73fe\u5f48\u6027\u67e5\u8a62\u8207\u6b04\u4f4d\u6b0a\u9650\u63a7\u7ba1\nSchema \u8a2d\u8a08\uff1a\u5982\u4f55\u8a2d\u8a08 Query/Mutation\uff0c\u652f\u63f4\u52d5\u614b\u6b04\u4f4d\u9078\u64c7\n\u8cc7\u6599\u56de\u50b3\u6b04\u4f4d\u52d5\u614b\u7d44\u88dd (Resolver)\n\u6b0a\u9650\u9a57\u8b49\u6a5f\u5236\uff1a\u81ea\u8a02 Directive\u3001Context\u3001DataFetcher \u5c64\u7d1a\u7684\u6b0a\u9650\u5224\u65b7\n\u6b04\u4f4d\u654f\u611f\u8cc7\u6599\u906e\u853d\u3001\u52d5\u614b\u904e\u6ffe\uff08\u5982\u53ea\u8b93\u7279\u5b9a\u89d2\u8272\u770b\u898b\u7279\u5b9a\u6b04\u4f4d\uff09\n\n5. \u6b0a\u9650\u63a7\u7ba1\u6846\u67b6\u6574\u5408\n\u6b0a\u9650\u8cc7\u6599\u4f86\u6e90\u8a2d\u8a08\uff08OAuth claim \uff09\n\u6b0a\u9650\u6aa2\u67e5\u6d41\u7a0b\uff1aRequest > GraphQL Context > Data Fetcher/Resolver > Entity \u6b04\u4f4d\n\u5be6\u4f5c\u7d30\u7bc0\u8207\u5e38\u898b\u6b0a\u9650\u6f0f\u6d1e\u9632\u7bc4\n\n6. \u7dad\u904b\u8207\u6548\u80fd\u8003\u91cf\n\u5927\u91cf\u67e5\u8a62\u4e0b\u7684\u6548\u80fd\u512a\u5316\uff08N+1 \u554f\u984c\u3001\u5206\u9801\u8a2d\u8a08\u3001\u6279\u6b21\u67e5\u8a62\uff09\n\u76e3\u63a7\u8207\u7a3d\u6838\uff1a\u5982\u4f55\u8a18\u9304 API \u67e5\u8a62\u884c\u70ba\uff0c\u65b9\u4fbf\u4e8b\u5f8c\u7a3d\u6838\u53ca\u8ffd\u8e64", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "XBX9H8", "name": "\u65b9\u6631\u5091 (Archie)", "avatar": "https://pretalx.com/media/avatars/XBX9H8_BmbLkpr.webp", "biography": "\u4e2d\u570b\u4fe1\u8a17\u9280\u884c\u91d1\u878d\u4ea4\u6613\u8cc7\u8a0a\u90e8\u5f8c\u7aef\u5de5\u7a0b\u5e2b\n\u5805\u6301\u300c\u7d66\u4e88\u8005\u300d\u7cbe\u795e\uff0c\u7a4d\u6975\u63a8\u52d5\u5718\u968a\u5c0e\u5165\u65b0\u6280\u8853\u548c\u8a2d\u8a08\u6a21\u5f0f\u3002\u5c08\u6ce8\u7cfb\u7d71\u7a69\u5b9a\u6027\uff0c\u540c\u6642\u6eff\u8db3\u696d\u52d9\u591a\u5143\u9700\u6c42\uff0c\u5728\u6280\u8853\u947d\u7814\u8207\u5be6\u52d9\u61c9\u7528\u4e4b\u9593\u4e0d\u65b7\u8ffd\u6c42\u6700\u4f73\u5e73\u8861", "public_name": "\u65b9\u6631\u5091 (Archie)", "guid": "840f79bf-c941-542b-9fa5-597f40dc68d4", "url": "https://pretalx.com/jcconf-2025/speaker/XBX9H8/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/XMRGXA/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/XMRGXA/", "attachments": [{"title": "Slide", "url": "/media/jcconf-2025/submissions/XMRGXA/resources/Archie_JCConf__ByqaLni.pdf", "type": "related"}]}, {"guid": "0a51cd18-957c-5b4b-8b39-de15c32f3a86", "code": "YYHHLP", "id": 75548, "logo": null, "date": "2025-09-19T11:40:00+08:00", "start": "11:40", "duration": "00:45", "room": "402AB", "slug": "jcconf-2025-75548-kotlin--java", "url": "https://pretalx.com/jcconf-2025/talk/YYHHLP/", "title": "\u7528 Kotlin \u958b\u767c\u5373\u6709 Java \u5c08\u6848\u7684\u6b77\u7a0b\u4e09\u968e\u6bb5", "subtitle": "", "track": "402AB", "type": "Session", "language": "zh-hant", "abstract": "Kotlin \u4e0d\u53ea\u662f\u884c\u52d5\u7aef\u958b\u767c\u7684\u5229\u5668\u3002\u5176\u73fe\u4ee3\u5316\u7279\u6027\u548c\u5353\u8d8a\u7684\u8868\u9054\u6027\u4ea6\u5f97\u5230\u8a31\u591a\u5f8c\u7aef\u958b\u767c\u8005\u7684\u63a1\u7528\u3002\u672c\u6b21\u5c07\u5206\u4eab\u500b\u4eba\u5728\u516c\u53f8\u5167\u63a8\u52d5\u7528 Kotlin \u958b\u767c legacy Java \u5c08\u6848\u7684\u5fc3\u5f97\u5206\u4eab\u3002\u628a Java Developer \u9032\u5165 Kotlin \u6b77\u7a0b\u7684\u5206\u6210\u4e09\u968e\u6bb5 1) \u7528 Kotlin \u5beb Test Case 2) \u5beb\u7684\u50cf Java \u7684 Kotlin 3) \u5beb\u7684\u50cf Kotlin \u7684 Kotlin \u3002\u7e3d\u7d50\u5404\u968e\u6bb5\u53ef\u80fd\u9047\u5230\u7684\u6311\u6230\u8207 Tips.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "EKBKNK", "name": "Brandy Chang", "avatar": "https://pretalx.com/media/avatars/EKBKNK_uAQlSJi.webp", "biography": "10\u5e74\u591a\u7684\u5f8c\u7aef\u5de5\u7a0b\u5e2b\uff0c\u8fd1\u5e74\u4f86\u81f4\u529b\u65bc\u63a8\u52d5\u4ee5 Kotlin Quarkus \u958b\u767c\u5f8c\u7aef\u5c08\u6848\u3002", "public_name": "Brandy Chang", "guid": "46ac7446-d97d-576e-8477-03313918714a", "url": "https://pretalx.com/jcconf-2025/speaker/EKBKNK/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/YYHHLP/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/YYHHLP/", "attachments": [{"title": "\u7c21\u5831\u521d\u7a3f", "url": "/media/jcconf-2025/submissions/YYHHLP/resources/JCConf_2025_-__o2Mc3OY.pdf", "type": "related"}]}, {"guid": "2f98852f-ee91-5b66-afe0-cd23d5d894da", "code": "RU3SL9", "id": 72810, "logo": null, "date": "2025-09-19T13:25:00+08:00", "start": "13:25", "duration": "00:15", "room": "402AB", "slug": "jcconf-2025-72810-java", "url": "https://pretalx.com/jcconf-2025/talk/RU3SL9/", "title": "\u5f9e\u6846\u67b6\u5230\u4eba\u624d\uff1a Java \u958b\u767c\u5be6\u8e10\u8207\u5de5\u7a0b\u5e2b\u4eba\u624d\u990a\u6210", "subtitle": "", "track": "402AB", "type": "Quickie", "language": "zh-hant", "abstract": "\u9762\u5c0d\u6578\u4f4d\u91d1\u878d\u52a0\u901f\u767c\u5c55\u8207\u4eba\u624d\u57f9\u990a\u7684\u96d9\u91cd\u6311\u6230\uff0c\u4f01\u696d IT \u90e8\u9580\u7684\u6838\u5fc3\u8ab2\u984c\u5df2\u8f49\u5411\u6253\u9020\u73fe\u4ee3\u5316\u958b\u767c\u74b0\u5883\u3001\u652f\u63f4\u96f2\u7aef\u67b6\u69cb\uff0c\u4e26\u5168\u9762\u63d0\u5347\u5718\u968a\u6230\u529b\u3002\u8fd1\u5e74\u4f86\uff0c\u6211\u5011\u7a4d\u6975\u63a8\u52d5\u5168\u7aef\u958b\u767c\u6a19\u6e96\u5316\u8207\u81ea\u52a9\u958b\u767c\u5de5\u5177\u7684\u843d\u5730\u61c9\u7528\uff0c\u81f4\u529b\u65bc\u6253\u9020\u4e00\u5957\u96c6\u6846\u67b6\u5efa\u7f6e\u3001\u5de5\u5177\u6574\u5408\u3001\u958b\u767c\u8005\u5e73\u53f0\u53ca\u4eba\u624d\u57f9\u80b2\u8def\u5f91\u65bc\u4e00\u8eab\u7684\u73fe\u4ee3\u5316\u958b\u767c\u6a21\u5f0f\u3002\u672c\u6b21\u5206\u4eab\u5c07\u805a\u7126\u65bc\u4e0a\u8ff0\u56db\u5927\u63a8\u52d5\u91cd\u9ede\uff0c\u6df1\u5165\u5256\u6790\u5982\u4f55\u5728\u91d1\u878d\u696d\u843d\u5be6\u5bb9\u5668\u5316\u96f2\u7aef\u958b\u767c\u6a19\u6e96\u3001\u5354\u52a9\u5718\u968a\u63d0\u5347\u751f\u7522\u529b\u8207\u8edf\u9ad4\u54c1\u8cea\uff0c\u9032\u800c\u70ba\u7d44\u7e54\u5e36\u4f86\u9577\u671f\u5275\u65b0\u8207\u6c38\u7e8c\u767c\u5c55\u3002\n\n\n\u4e00\u3001\u6253\u9020CUB-SDK\u958b\u767c\u6846\u67b6\n\u6211\u5011\u4ee5Java\u70ba\u6838\u5fc3\u6280\u8853\uff0c\u4e3b\u5c0e\u5efa\u69cb\u884c\u5167\u5c08\u5c6c\u7684\u300cCUB-SDK\u300d\u958b\u767c\u6846\u67b6\uff0c\u81f4\u529b\u65bc\u63d0\u4f9b\u958b\u7bb1\u5373\u7528\u7684\u67b6\u69cb\u8a2d\u8a08\uff0c\u8b93\u540c\u4ec1\u80fd\u5c08\u6ce8\u65bc\u696d\u52d9\u908f\u8f2f\u958b\u767c\uff0c\u540c\u6642\u7d71\u4e00\u5b89\u5168\u6027\u4fee\u6b63\uff0c\u514d\u9664\u7248\u672c\u6574\u5408\u8207\u5f31\u9ede\u4fee\u6b63\u7684\u56f0\u64fe\uff0c\u4e26\u6301\u7e8c\u5f15\u5165\u6700\u65b0\u529f\u80fd\u8207\u6700\u4f73\u5be6\u8e10\uff0c\u5df2\u6210\u70ba\u8cc7\u8a0a\u90e8\u9580Java\u5fae\u670d\u52d9\u5bb9\u5668\u5316\u958b\u767c\u7684\u6a19\u6e96\u898f\u683c\u3002CUB-SDK\u4e0d\u50c5\u964d\u4f4e\u5718\u968a\u958b\u767c\u9580\u6abb\uff0c\u66f4\u78ba\u4fdd\u7a0b\u5f0f\u78bc\u54c1\u8cea\u3001\u8cc7\u8a0a\u5b89\u5168\u8207\u5e73\u53f0\u76e3\u63a7\u7684\u4e00\u81f4\u6027\uff0c\u4e26\u63d0\u4f9b\u6301\u7e8c\u7684\u6280\u8853\u552e\u5f8c\u670d\u52d9\uff0c\u5354\u52a9\u5404\u5c08\u6848\u5718\u968a\u8fc5\u901f\u5c0e\u5165\u3001\u7dad\u6301\u6700\u4f73\u5be6\u8e10\u3002\n\n\u4e8c\u3001\u5c0e\u5165\u958b\u767c AI \u52a9\u624b\u8207\u667a\u6167\u5de5\u5177\n\u6211\u5011\u7a4d\u6975\u5c0e\u5165 GitHub Copilot \u7b49 AI \u958b\u767c\u52a9\u624b \uff0c\u4e26\u81ea\u7814\u300cCUB Genie\u300dAI \u52a9\u624b\uff0c\u5354\u52a9\u958b\u767c\u4eba\u54e1\u9032\u884c\u7a0b\u5f0f\u78bc\u5efa\u8b70\u3001\u81ea\u52d5\u7522\u751f\u55ae\u5143\u6e2c\u8a66\uff0c\u9032\u800c\u512a\u5316\u958b\u767c\u6548\u7387\u8207\u7a0b\u5f0f\u54c1\u8cea\u3002\u9019\u4e9b\u5de5\u5177\u4e0d\u50c5\u964d\u4f4e\u65b0\u624b\u9580\u6abb\uff0c\u4e5f\u80fd\u5728\u5718\u968a\u4e2d\u63a8\u5ee3\u73fe\u4ee3 AI \u5354\u540c\u7a0b\u5f0f\u8a2d\u8a08\u6a21\u5f0f\uff0c\u9032\u4e00\u6b65\u63d0\u5347\u7814\u767c\u80fd\u91cf\u8207\u5de5\u7a0b\u5e2b\u7684\u8077\u6daf\u767c\u5c55\u3002\n\n\n\u4e09\u3001\u5efa\u7f6e\u958b\u767c\u8005\u81ea\u52a9\u5e73\u53f0\n\u6211\u5011\u5c07SonarQube\u3001JFrog\u7b49\u5de5\u5177\u6574\u5408\u81f3CI/CD\u6d41\u7a0b\u4e2d\uff0c\u4e26\u5efa\u69cb\u4e00\u500b\u958b\u767c\u8005\u81ea\u52a9\u5e73\u53f0\uff0c\u4f9b\u5c08\u6848\u6210\u54e1\u5373\u6642\u5be9\u67e5\u3001\u8ffd\u8e64\u54c1\u8cea\u8cc7\u8a0a\uff0c\u4e3b\u52d5\u767c\u73fe\u6280\u8853\u50b5\u8207\u6f5b\u5728\u98a8\u96aa\uff0c\u9032\u800c\u5be6\u8e10\u54c1\u8cea\u53ef\u8996\u5316\u8207\u654f\u6377\u56de\u994b\u5faa\u74b0\u3002\u66f4\u9032\u4e00\u6b65\uff0c\u958b\u767c\u8005\u81ea\u52a9\u5e73\u53f0\u4e5f\u6574\u5408\u4e86CUB-SDK\u7a0b\u5f0f\u78bc\u7522\u751f\u5668\u3001\u5e38\u898b\u7a0b\u5f0f\u6a19\u6e96\u5316\u7bc4\u4f8b\u8207\u6846\u67b6\u61c9\u7528\u6307\u5f15\uff0c\u5354\u52a9\u958b\u767c\u5718\u968a\u80fd\u5feb\u901f\u5c0e\u5165\u6700\u4f73\u5be6\u8e10\u3001\u6e1b\u5c11\u6e9d\u901a\u8207\u4ea4\u4ed8\u6210\u672c\u3002\u6b64\u5e73\u53f0\u6210\u70ba\u5404\u90e8\u9580\u5354\u4f5c\u3001\u77e5\u8b58\u4ea4\u6d41\u8207\u6a19\u6e96\u63a8\u5ee3\u7684\u91cd\u8981\u5834\u57df\uff0c\u52a0\u901f\u6574\u9ad4\u6280\u8853\u5347\u7d1a\u3002\n\n\u56db\u3001\u57f9\u80b2IT\u89d2\u8272\u4eba\u624d\u68af\u968a\n\n\u6211\u5011\u4e0d\u50c5\u5c08\u6ce8\u65bc\u6280\u8853\u5275\u65b0\uff0c\u66f4\u5f9e\u96c6\u5718\u5c64\u7d1a\u63a8\u52d5Java\u5168\u7aef\u5de5\u7a0b\u5e2b\u7684\u9577\u671f\u57f9\u990a\u8a08\u756b\u3002\u900f\u904e\u7a4d\u6975\u5438\u5f15\u65b0\u9bae\u4eba\u8207\u975e\u8cc7\u8a0a\u672c\u79d1\u751f\u52a0\u5165\u5718\u968a\uff0c\u642d\u914d\u5167\u90e8\u8a13\u7df4\u8207\u5c08\u6848\u5be6\u6230\uff0c\u5354\u52a9\u5de5\u7a0b\u5e2b\u5f9eProgrammer\u9010\u6b65\u6649\u5347System Design\u3001System Analyst\u3001SRE\u6216DevOps\u7b49\u8077\u4f4d\uff0c\u5be6\u8e10\u8de8\u9818\u57dfT\u578b\u4eba\u624d\u990a\u6210\uff0c\u9032\u800c\u6253\u9020\u7d44\u7e54\u654f\u6377\u8f49\u578b\u7684\u5805\u5be6\u5e95\u860a\u3002\u9019\u4e00\u5957\u8def\u5f91\u8a2d\u8a08\uff0c\u4f7f\u958b\u767c\u5718\u968a\u80fd\u56e0\u61c9\u91d1\u878d\u6578\u4f4d\u8f49\u578b\u4e0b\u7684\u5feb\u901f\u9700\u6c42\u8b8a\u9769\uff0c\u4e26\u6301\u7e8c\u6ce8\u5165\u5275\u65b0\u80fd\u91cf\u3002\n\n\n\u672c\u5834\u5206\u4eab\u5c07\u4ee5\u771f\u5be6\u6848\u4f8b\u89e3\u6790\u4e0a\u8ff0\u56db\u5927\u5be6\u8e10\uff0c\u4e26\u5206\u4eab\u5927\u578b\u91d1\u878d\u7d44\u7e54\u4e2d\u63a8\u52d5\u6280\u8853\u5275\u65b0\u3001\u6d41\u7a0b\u6574\u5408\u3001\u4eba\u624d\u8f49\u578b\u7684\u5177\u9ad4\u6311\u6230\u8207\u6536\u7a6b\u3002\u671f\u5f85\u85c9\u6b64\u8207Java\u793e\u7fa4\u5925\u4f34\u4ea4\u6d41\uff0c\u5171\u540c\u63a8\u52d5\u4f01\u696d\u6578\u4f4d\u5275\u65b0\u8207\u958b\u767c\u8005\u6210\u9577\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "ZA7MTZ", "name": "alansid", "avatar": "https://pretalx.com/media/avatars/ZA7MTZ_GQ3tMOO.webp", "biography": "\u4efb\u8077\u65bc\u570b\u6cf0\u4e16\u83ef\u9280\u884c\u79d1\u6280\u61c9\u7528\u767c\u5c55\u90e8\uff0c\u904e\u53bb\u66fe\u53c3\u8207\u6ac3\u54e1\u7cfb\u7d71\u3001\u91d1\u670d\u7cfb\u7d71\u7b49\u5927\u578b\u5c08\u6848\u5efa\u7f6e\u3002\u76ee\u524d\u8ca0\u8cacAI\u76f8\u95dc\u61c9\u7528\u5c0e\u5165\uff0c\u5bb9\u5668\u5316\u61c9\u7528\u7a0b\u5f0f\u67b6\u69cb\u8207\u6846\u67b6\u8a2d\u8a08\uff0c\u65b0\u6280\u8853\u7684\u7814\u7a76\u3001\u958b\u767c\u8207\u63a8\u5ee3\u3002", "public_name": "alansid", "guid": "dbc45d6d-7a21-5889-8c8b-8ba3181490fb", "url": "https://pretalx.com/jcconf-2025/speaker/ZA7MTZ/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/RU3SL9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/RU3SL9/", "attachments": []}, {"guid": "700992da-56c7-578e-a62b-05bc33fbabf4", "code": "VEAF7U", "id": 72708, "logo": null, "date": "2025-09-19T13:45:00+08:00", "start": "13:45", "duration": "00:15", "room": "402AB", "slug": "jcconf-2025-72708-intellij-plugin", "url": "https://pretalx.com/jcconf-2025/talk/VEAF7U/", "title": "\u6253\u9020\u4f60\u5c08\u5c6c\u7684 IntelliJ Plugin\uff1a\u5f9e\u96f6\u958b\u59cb\u7684\u958b\u767c\u5be6\u6230", "subtitle": "", "track": "402AB", "type": "Quickie", "language": "zh-hant", "abstract": "IntelliJ \u662f\u8a31\u591a Java \u958b\u767c\u8005\u611b\u7528\u7684 IDE\uff0c\u4f46\u4f60\u662f\u5426\u4e5f\u66fe\u7d93\u7ffb\u904d Plugin Marketplace\uff0c\u537b\u59cb\u7d42\u627e\u4e0d\u5230\u771f\u6b63\u7b26\u5408\u9700\u6c42\u7684\u63d2\u4ef6\uff1f\u5fc3\u60f3\uff1a\u300c\u5982\u679c\u6709 XXX \u529f\u80fd\u5c31\u597d\u4e86\uff01\u300d\n\n\u65e2\u7136\u5982\u6b64\uff0c\u4f55\u4e0d\u81ea\u5df1\u52d5\u624b\u505a\u4e00\u500b\uff1f\n\n\u672c\u5834\u6f14\u8b1b\u5c07\u5e36\u4f60\u5feb\u901f\u638c\u63e1\u4f7f\u7528 Java \u958b\u767c IntelliJ Plugin \u7684\u57fa\u672c\u6d41\u7a0b\uff0c\u5f9e\u6982\u5ff5\u5165\u9580\u5230\u5be6\u969b\u64cd\u4f5c\uff0c\u4e26\u4ecb\u7d39\u5982\u4f55\u5c07\u5b8c\u6210\u7684\u63d2\u4ef6\u767c\u4f48\u5230 JetBrains Plugin Marketplace\u3002\u8b93\u4f60\u6253\u9020\u5c08\u5c6c\u5de5\u5177\u7684\u540c\u6642\uff0c\u4e5f\u80fd\u5c07\u6210\u679c\u5206\u4eab\u7d66\u66f4\u591a\u958b\u767c\u8005\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "NCBHWD", "name": "\u5f35\u54c1\u7fd4 Pino", "avatar": "https://pretalx.com/media/avatars/NCBHWD_OO7RHvr.webp", "biography": "\u4efb\u8077\u65bc\u570b\u6cf0\u91d1\u63a7 \u6578\u6578\u767c\n\u64c1\u6709 5 \u5e74\u7684\u5f8c\u7aef\u5de5\u7a0b\u5e2b\u7d93\u9a57\n\u4e3b\u8981\u958b\u767c\u8a9e\u8a00\u70ba Java+Spring Boot", "public_name": "\u5f35\u54c1\u7fd4 Pino", "guid": "e558b7f1-894a-535c-97dc-20b1d5413844", "url": "https://pretalx.com/jcconf-2025/speaker/NCBHWD/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/VEAF7U/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/VEAF7U/", "attachments": [{"title": "\u7c21\u5831", "url": "/media/jcconf-2025/submissions/VEAF7U/resources/JCCONF_2025-in_HsvLbMa.pdf", "type": "related"}]}, {"guid": "9f3ee020-4d07-51b0-b454-a9e3545b3921", "code": "PGXXWX", "id": 75460, "logo": null, "date": "2025-09-19T14:10:00+08:00", "start": "14:10", "duration": "00:45", "room": "402AB", "slug": "jcconf-2025-75460-kmp--cmp", "url": "https://pretalx.com/jcconf-2025/talk/PGXXWX/", "title": "\u4e00\u5361\u901a\u5c0e\u5165 KMP \u8207 CMP \u7684\u7522\u54c1\u7dda\u7b56\u7565\u8207\u5fc3\u5f97\u5206\u4eab", "subtitle": "", "track": "402AB", "type": "Session", "language": "zh-hant", "abstract": "\u4f5c\u70ba\u53f0\u7063\u652f\u4ed8\u670d\u52d9\u7684\u9818\u5c0e\u54c1\u724c\uff0c\u4e00\u5361\u901a\u6295\u5165 Kotlin Multiplatform (KMP) \u5df2\u8fd1\u4e09\u5e74\u3002\u6211\u5011\u7684\u5be6\u8e10\u5834\u666f\u5f9e\u5ee3\u70ba\u4eba\u77e5\u7684 iPASS MONEY app\uff0c\u5ef6\u4f38\u81f3\u63a1\u7528 Compose  Multiplatform (CMP) \u7684\u5546\u5bb6\u7ba1\u7406\u5f8c\u53f0\u3002\u672c\u6b21\u5206\u4eab\u5c07\u6df1\u5165\u5256\u6790\u6211\u5011\u5728\u4e0d\u540c\u7522\u54c1\u7dda\u7684\u5c0e\u5165\u7b56\u7565\u8207\u5be6\u6230\u5fc3\u5f97\u3002\u66f4\u91cd\u8981\u7684\u662f\uff0c\u6211\u5011\u5c07\u5206\u4eab\u672a\u4f86\u7684\u6280\u8853\u5c55\u671b\uff1a\u5982\u4f55\u898f\u5283\u63a1\u7528   Kotlin/Wasm\uff0c\u5c07\u5546\u5bb6\u5f8c\u53f0\u64f4\u5c55\u81f3\u7db2\u9801\u7aef\uff0c\u5be6\u73fe iOS\u3001Android\u3001Web \u4e09\u5e73\u53f0\u5171\u4eab\u696d\u52d9\u908f\u8f2f\u8207 UI \u7684\u7d42\u6975\u76ee\u6a19\u3002\u6211\u5011\u5c07\u7d50\u5408 JetBrains \u8207 Google \u7684\u5b98\u65b9\u85cd\u5716\u9032\u884c\u63a2\u8a0e\uff0c\u5e0c\u671b\u80fd\u70ba\u540c\u6a23\u8d70\u5728\u9019\u689d\u8def\u4e0a\u7684\u958b\u767c\u8005\u8207\u4f01\u696d\u5148\u9032\uff0c\u5e36\u4f86\u7b2c\u4e00\u624b\u7684\u555f\u767c\u8207\u6df1\u5165\u7684\u8a0e\u8ad6\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "JTYJNB", "name": "\u6797\u5b87\u8ed2", "avatar": "https://pretalx.com/media/avatars/JTYJNB_f6gm4DA.webp", "biography": "\u5f9e 2010 \u5e74\u81f3\u4eca\uff0c\u6797\u5b87\u8ed2\u958b\u767c Android app \u5df2\u6709\u8d85\u904e\u5341\u9918\u5e74\u7684\u5149\u9670\uff0c\u8ddf\u96a8\u8457\u5b98\u65b9\u7684 Jetpack libraries \u8173\u6b65\u4e00\u8def\u5f9e Java \u5230 Kotlin \u518d\u62d3\u5c55\u5230 Kotlin Multiplatform (KMP) \u8207 Compose Multiplatform (CMP) \u9818\u57df\uff0c\u8fd1\u4e09\u5e74\u4f86\u96d9\u5200\u6d41\u540c\u6642\u958b\u767c iOS app\uff0c\u5c08\u6ce8\u5728\u8b93 Mobile app\u64c1\u6709\u826f\u597d\u7684\u539f\u751f\u9ad4\u9a57\u8207\u4e0b\u8f09\u5927\u5c0f\u3002", "public_name": "\u6797\u5b87\u8ed2", "guid": "25d99ae8-6561-5642-bcdf-1d9e4c354e9a", "url": "https://pretalx.com/jcconf-2025/speaker/JTYJNB/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/PGXXWX/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/PGXXWX/", "attachments": [{"title": "\u6700\u7d42\u7248", "url": "/media/jcconf-2025/submissions/PGXXWX/resources/JCConf_2025_Sl_jNLuBFz.pdf", "type": "related"}]}, {"guid": "a54c12ef-30fb-51f0-98ab-38efaa9eb827", "code": "DUJKF9", "id": 72794, "logo": null, "date": "2025-09-19T15:05:00+08:00", "start": "15:05", "duration": "00:45", "room": "402AB", "slug": "jcconf-2025-72794-kotlin--ai", "url": "https://pretalx.com/jcconf-2025/talk/DUJKF9/", "title": "\u7576 Kotlin \u9047\u4e0a AI\uff1a\u6253\u9020\u65b0\u805e\u6458\u8981\u81ea\u52d5\u5316\u7684\u5be6\u4f5c\u5be6\u9304", "subtitle": "", "track": "402AB", "type": "Session", "language": "zh-hant", "abstract": "\u5728\u8cc7\u8a0a\u7206\u70b8\u7684\u6642\u4ee3\uff0c\u65b0\u805e\u53d6\u5f97\u4e0d\u518d\u56f0\u96e3\uff0c\u56f0\u96e3\u7684\u662f\u5f9e\u5927\u91cf\u8cc7\u6599\u4e2d\u5feb\u901f\u638c\u63e1\u91cd\u9ede\u3002\u8fd1\u5e74\u4f86 AI \u7684\u8208\u8d77\uff0c\u5404\u884c\u5404\u696d\u90fd\u5617\u8a66\u5c0e\u5165 AI\uff0c\u8fc5\u901f\u767c\u5c55\u7684\u7576\u4e0b\uff0c\u96d6\u5e36\u4f86 AI \u7126\u616e\uff0c\u4f46\u4e5f\u540c\u6642\u8fce\u4f86\u6548\u7387\u63d0\u5347\u53ca\u53c3\u8207\u66f4\u591a\u7522\u54c1\u8a2d\u8a08\u7684\u65b0\u5951\u6a5f\u3002\u672c\u5834\u5206\u4eab\u5c07\u4ecb\u7d39\u5982\u4f55\u4ee5 Kotlin \u642d\u914d Spring Boot \u8207 Spring AI\uff0c\u6253\u9020\u4e00\u500b\u81ea\u52d5\u5316\u751f\u6210 Kotlin \u6280\u8853\u65b0\u805e\u6458\u8981\u7684\u5e73\u53f0\u3002\u5f9e\u5b9a\u6642\u4efb\u52d9\u555f\u52d5\u3001\u65b0\u805e\u5167\u5bb9\u64f7\u53d6\u3001AI \u751f\u6210\u6458\u8981\u3001\u975c\u614b\u7db2\u9801\u8207\u8a02\u95b1\u63a8\u9001\uff0c\u5f9e\u4e2d\u62c6\u89e3\u6574\u500b\u81ea\u52d5\u5316\u6d41\u7a0b\u7684\u8a2d\u8a08\u8207\u5be6\u4f5c\u7d30\u7bc0\u3002\u6b64\u5916\uff0c\u6211\u5011\u4e5f\u6703\u5206\u4eab\u958b\u767c\u904e\u7a0b\u4e2d\u904b\u7528 Vibe Coding \u7684\u958b\u767c\u7d93\u9a57\uff0c\u52a0\u901f\u5be6\u73fe MVP \u7522\u54c1\uff0c\u8b93\u958b\u767c\u8005\u805a\u7126\u5728\u6700\u91cd\u8981\u7684\u696d\u52d9\u908f\u8f2f\u8207\u7528\u6236\u9ad4\u9a57\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "JL9ME8", "name": "\u8303\u8056\u4f51", "avatar": "https://pretalx.com/media/avatars/JL9ME8_D9NU8WS.webp", "biography": "JetBrains \u6280\u8853\u50b3\u6559\u58eb\uff0c\u8ca0\u8cac\u63a8\u5ee3 Kotlin\u3001JetBrains IDE \u53ca\u76f8\u95dc\u6280\u8853\u3002\u5e73\u6642\u9189\u5fc3\u65bc\u6280\u8853\u7814\u7a76\uff0c\u5c08\u6ce8\u65bc Web\u3001\u5f8c\u7aef\u6280\u8853\u53ca\u80fd\u63d0\u5347\u751f\u7522\u529b\u7684\u6280\u5de7\uff0c\u81f4\u529b\u65bc\u5c07\u8907\u96dc\u7684\u6280\u8853\u540d\u8a5e\u7528\u901a\u4fd7\u6613\u61c2\u7684\u65b9\u5f0f\u8b93\u65b0\u624b\u4e5f\u80fd\u5438\u6536\u3002\u5de5\u4f5c\u4e4b\u9918\u4e5f\u662f\u591a\u5e74\u6280\u8853\u793e\u7fa4\u5fd7\u5de5\uff0c\u7a4d\u6975\u53c3\u8207\u958b\u6e90\u793e\u7fa4\u904b\u4f5c\u3002", "public_name": "\u8303\u8056\u4f51", "guid": "b371ad3e-b8cd-5f3e-840d-7d234620bfe3", "url": "https://pretalx.com/jcconf-2025/speaker/JL9ME8/"}, {"code": "JWDK8N", "name": "Andy Lu", "avatar": "https://pretalx.com/media/avatars/JWDK8N_rScLq4v.webp", "biography": "Hi \u6211\u662f Andy, \u662f\u4e00\u540d App \u958b\u767c\u8005\uff0c\u71b1\u611b Kotlin \uff0c\u73fe\u5728\u642d\u4e0a AI \u706b\u7bad\u524d\u5f80\u65b0\u4e16\u754c\u3002", "public_name": "Andy Lu", "guid": "fa631d1a-ba3d-583d-a8ec-7e7009637bea", "url": "https://pretalx.com/jcconf-2025/speaker/JWDK8N/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/DUJKF9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/DUJKF9/", "attachments": []}, {"guid": "f8eab53c-6dc5-548f-b09f-3b1720c80e16", "code": "NRSTU9", "id": 71099, "logo": null, "date": "2025-09-19T16:20:00+08:00", "start": "16:20", "duration": "00:45", "room": "402AB", "slug": "jcconf-2025-71099-ai-driven-development-with-java-kotlin", "url": "https://pretalx.com/jcconf-2025/talk/NRSTU9/", "title": "AI Driven Development with Java & Kotlin", "subtitle": "", "track": "402AB", "type": "Session", "language": "zh-hant", "abstract": "Reviewing the development of AI over the past few years, AI has now transitioned from a consultant to an agent. In this agenda, we will demonstrate how to rapidly develop Spring Boot CRUD APIs for Java and Kotlin through pre-defined prompts and instruction files.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "VZSMLQ", "name": "Vincent Huang", "avatar": "https://pretalx.com/media/avatars/VZSMLQ_1NwZ5oD.webp", "biography": "Vincent is a coder, speaker, mentor, and leader in the field. He specialize in the joint areas of JVM language programming (Java, Kotlin, Scala) and DevOps.", "public_name": "Vincent Huang", "guid": "2f9b3798-01b9-5a47-95fc-8ca5b9af4a87", "url": "https://pretalx.com/jcconf-2025/speaker/VZSMLQ/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/NRSTU9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/NRSTU9/", "attachments": []}, {"guid": "29ae2e6e-4b71-5394-a975-90f0ad5ab761", "code": "EYRB9M", "id": 70989, "logo": null, "date": "2025-09-19T17:15:00+08:00", "start": "17:15", "duration": "00:45", "room": "402AB", "slug": "jcconf-2025-70989-ktor--non-blocking", "url": "https://pretalx.com/jcconf-2025/talk/EYRB9M/", "title": "\u4ee5\u70ba\u7528 Ktor \u5c31 non-blocking \u4e86\uff1f\u4f46\u4f60\u5beb\u7684\u53ef\u80fd\u4e0d\u662f\uff1a\u5f9e\u8e29\u5751\u5230\u89e3\u6cd5\u7684\u5be6\u6230\u5206\u4eab", "subtitle": "", "track": "402AB", "type": "Session", "language": "zh-hant", "abstract": "Ktor \u5929\u751f\u652f\u63f4 non-blocking\u3001\u57fa\u65bc coroutine \u7684\u67b6\u69cb\uff0c\u5f88\u9069\u5408\u6253\u9020\u9ad8\u6548\u80fd\u7684\u5f8c\u7aef\u670d\u52d9\u3002\n\n\u4f46\u5be6\u969b\u4e0a\uff0c\u5373\u4f7f\u6846\u67b6\u662f\u975e\u963b\u585e\u7684\uff0c\u4f60\u5beb\u7684\u7a0b\u5f0f\u78bc\u4e5f\u53ef\u80fd\u9ed8\u9ed8\u7684\u85cf\u8457\u963b\u585e\u7684\u90e8\u5206\u3002\n\n\u9019\u5834\u6f14\u8b1b\u5c07\u5f9e coroutine \u7684\u57f7\u884c\u6a21\u578b\u5207\u5165\uff0c\u6df1\u5165\u89e3\u6790\uff1a\n\n- \u70ba\u4ec0\u9ebc non-blocking \u67b6\u69cb\u4e2d\uff0c\u9084\u6703\u6709 blocking code \u7684\u51fa\u73fe\uff1f\n- \u5e38\u898b\u7684 blocking code \u4f86\u6e90\u6709\u54ea\u4e9b\uff1f\n- \u600e\u9ebc\u6b63\u78ba\u8655\u7406 blocking\uff0c\u907f\u514d\u5f71\u97ff\u7a0b\u5f0f\u6548\u80fd\n- \u5982\u4f55\u8a2d\u8a08\u4e7e\u6de8\u7684\u67b6\u69cb\uff0c\u8b93 blocking code \u88ab\u63a7\u7ba1\u3001\u53ef\u9810\u6e2c\n\n\u5982\u679c\u4f60\u6b63\u5728\u4f7f\u7528 Ktor \u6216 coroutine \u67b6\u69cb\u958b\u767c\u5f8c\u7aef\uff0c\u9019\u5834\u5206\u4eab\u80fd\u5e6b\u52a9\u4f60\u66f4\u6709\u610f\u8b58\u5730\u5beb\u51fa\u771f\u6b63\u975e\u963b\u585e\u3001\u7a69\u5b9a\u3001\u5177\u5f48\u6027\u7684\u7a0b\u5f0f\u78bc\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "VKYCZB", "name": "Recca Chao", "avatar": "https://pretalx.com/media/avatars/VKYCZB_qTFRozH.webp", "biography": "\u5c08\u6ce8\u65bc\u5f8c\u7aef\u958b\u767c\u8207\u958b\u767c\u6559\u80b2\u7684\u5de5\u7a0b\u5e2b\uff0c\u95dc\u6ce8\u9818\u57df\u5305\u542b Laravel\u3001Ktor \u8207 Kotlin \u751f\u614b\u5708\u3002Taiwan Kotlin User Group \u7ba1\u7406\u54e1\u3002\n\n\u76ee\u524d\u4e5f\u7814\u7a76 Kotlin \u5728 quarkus \u548c spring boot \u4e0a\u9762\u7684\u61c9\u7528", "public_name": "Recca Chao", "guid": "5ba70ca6-0568-5ba4-a03b-9b60c23d3281", "url": "https://pretalx.com/jcconf-2025/speaker/VKYCZB/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/EYRB9M/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/EYRB9M/", "attachments": []}], "402CD": [{"guid": "77fe0678-184e-53de-9fb0-db9b0dbf44d6", "code": "HRKTVE", "id": 74067, "logo": null, "date": "2025-09-19T10:40:00+08:00", "start": "10:40", "duration": "00:45", "room": "402CD", "slug": "jcconf-2025-74067-tree-sitter", "url": "https://pretalx.com/jcconf-2025/talk/HRKTVE/", "title": "\u89e3\u5bc6\u7a0b\u5f0f\u78bc\u7684\u9aa8\u9abc\uff1a\u6df1\u5165\u7406\u89e3 Tree-sitter \u8207\u5176\u7d50\u69cb\u5316\u672c\u8cea\u3002", "subtitle": "", "track": "402CD", "type": "Session", "language": "zh-hant", "abstract": "\u73fe\u4ee3\u7a0b\u5f0f\u78bc\u7de8\u8f2f\u5668\u63d0\u4f9b\u4e86\u4ee4\u4eba\u9a5a\u8c54\u7684\u529f\u80fd\uff1a\u8a9e\u6cd5\u9ad8\u4eae\u5ea6\u3001\u81ea\u52d5\u683c\u5f0f\u5316\u3001\u4ee5\u53ca\u8df3\u8f49\u5b9a\u7fa9\u3002\u9019\u4e9b\u80fd\u529b\u80cc\u5f8c\u7684\u57fa\u77f3\uff0c\u90fd\u662f\u300c\u7a0b\u5f0f\u8a9e\u6cd5\u7d50\u69cb\u300d\u7684\u89e3\u6790\u3002\n\n\u5728\u50b3\u7d71\u4e0a\uff0c\u4e0d\u540c\u8a9e\u8a00\u5f80\u5f80\u9700\u8981\u5404\u81ea\u7368\u7acb\u7684 parser \u8207\u5de5\u5177\u93c8\uff0c\u7f3a\u4e4f\u4e00\u81f4\u7684\u6a19\u6e96\u3002GitHub \u63a8\u51fa\u7684 Tree-sitter \u6539\u8b8a\u4e86\u9019\u500b\u73fe\u72c0\uff1a\u5b83\u80fd\u4ee5\u9ad8\u6548\u4e14\u901a\u7528\u7684\u65b9\u5f0f\u7522\u751f Concrete Syntax Tree (CST)\uff0c\u4e26\u900f\u904e\u67e5\u8a62 API \u63d0\u4f9b\u7d66\u7de8\u8f2f\u5668\u8207 IDE \u4f7f\u7528\u3002\n\n\u9019\u5834\u5206\u4eab\u5c07\u5f9e\u57fa\u790e\u5230\u61c9\u7528\uff0c\u5e36\u4f60\u9010\u6b65\u7406\u89e3\uff1a\n\n* Tree-sitter \u7684\u6838\u5fc3\u6982\u5ff5 - parsing/query \u7cfb\u7d71\u3002\n* \u5be6\u52d9\u61c9\u7528\u6848\u4f8b - \u5728 Neovim \u4e2d\u5be6\u4f5c\u300c\u8df3\u8f49\u5b9a\u7fa9\u300d\u529f\u80fd\u3002\n* \u672a\u4f86\u5c55\u671b - \u7d50\u69cb\u5316\u7a0b\u5f0f\u78bc\u8cc7\u6599\u5728 AI \u9818\u57df\u7684\u6f5b\u529b\uff1aCST/AST \u5982\u4f55\u8f14\u52a9 LLM \u66f4\u7cbe\u78ba\u5730\u7406\u89e3\u7a0b\u5f0f\u908f\u8f2f\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "DX3GH7", "name": "Laurence Chen", "avatar": "https://pretalx.com/media/avatars/DX3GH7_kJbNV1F.webp", "biography": "IT \u9867\u554f\u3001\u8b1b\u8005\u3001\u4f5c\u5bb6\u3002\u559c\u6b61\u5feb\u901f\u8fed\u4ee3 (fast iteration) \u8207\u63d0\u9ad8\u7522\u51fa\u3002\n\n\u73fe\u8077\uff1a\n- REPLWARE ( https://replware.dev ) CEO\n- \u53f0\u7063 Clojure \u793e\u7fa4 ( https://clojure.tw/ ) \u7dda\u4e0b\u6d3b\u52d5\u4e3b\u8fa6\u4eba\n- Taipei dbt Meetup \u793e\u7fa4 ( https://medium.com/dbt-local-taiwan ) \u7dda\u4e0b\u6d3b\u52d5\u4e3b\u8fa6\u4eba\n\n\u8457\u4f5c\uff1a\n- \u5f9e\u932f\u8aa4\u5230\u5275\u65b0 ( https://leanpub.com/errors_to_innovation/ )\n- \u5f9e\u8a66\u7b97\u8868\u5230\u8cc7\u6599\u5e73\u53f0\uff1a\u91cd\u69cb\u8cc7\u6599\u5de5\u7a0b\u7684\u6280\u8853\u8207\u5718\u968a ( https://replware.dev/mds )", "public_name": "Laurence Chen", "guid": "0068a84c-6b26-5407-bd93-3cadfed80acf", "url": "https://pretalx.com/jcconf-2025/speaker/DX3GH7/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/HRKTVE/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/HRKTVE/", "attachments": [{"title": "\u8b70\u7a0b\u6295\u5f71\u7247", "url": "/media/jcconf-2025/submissions/HRKTVE/resources/treesitter_Z4qsCDz.pdf", "type": "related"}]}, {"guid": "fd345dad-3a4f-541b-ba4e-a329f0244607", "code": "PXNRD9", "id": 71852, "logo": null, "date": "2025-09-19T11:40:00+08:00", "start": "11:40", "duration": "00:45", "room": "402CD", "slug": "jcconf-2025-71852-simplifying-java-build-tooling-with-object-oriented-programming-en", "url": "https://pretalx.com/jcconf-2025/talk/PXNRD9/", "title": "Simplifying Java Build Tooling with Object Oriented Programming (EN)", "subtitle": "", "track": "402CD", "type": "Session", "language": "zh-hant", "abstract": "The Java language is known to be fast, safe, and easy, but Java build tools like Maven or Gradle do not always live up to that reputation. This talk will explore what \"could be\" - where current Java build tools fall short of expectations in performance, IDE support, and extensibility - and why there's room to improve. We will end with a demonstration of an experimental build tool \"Mill\" that makes use of techniques object oriented programming to dramatically simplify the experience of using a Java build tool, proving out the idea that Java build tooling has the potential to be much faster, safer, and easier than it is today.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "KY8QHH", "name": "Li Haoyi", "avatar": "https://pretalx.com/media/avatars/KY8QHH_WeoP7KU.webp", "biography": "Li Haoyi graduated from MIT, has built infrastructure for high-growth companies like Dropbox and Databricks, and has been a major contributor to the open source JVM community. Haoyi has deep experience in the JVM and has used it professionally to build cloud infrastructure, distributed backend systems, programming languages, high-performance web applications, and much more.", "public_name": "Li Haoyi", "guid": "864452e6-6d97-57c6-81b1-8bdeb201283d", "url": "https://pretalx.com/jcconf-2025/speaker/KY8QHH/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/PXNRD9/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/PXNRD9/", "attachments": []}, {"guid": "3d45b672-90e7-533c-b1da-4d17361aab87", "code": "PYLURT", "id": 74197, "logo": null, "date": "2025-09-19T13:25:00+08:00", "start": "13:25", "duration": "00:15", "room": "402CD", "slug": "jcconf-2025-74197-aijava-no-rec", "url": "https://pretalx.com/jcconf-2025/talk/PYLURT/", "title": "\u7528AI\u9032\u884c\u8001\u820ajava\u5c08\u6848\u7684\u73fe\u4ee3\u5316\u91cd\u69cb\u7d93\u9a57\u8ac7 (NO REC)", "subtitle": "", "track": "402CD", "type": "Quickie", "language": "zh-hant", "abstract": "\u4ecb\u7d39\u904b\u7528 AI \u5de5\u5177\uff08\u5982 GitHub Copilot\uff09\u5354\u52a9\u516c\u53f8\u5167\u90e8\u8001\u820a Java \u5c08\u6848\u7684\u73fe\u4ee3\u5316\u91cd\u69cb\u3002\u9019\u4e9b\u5c08\u6848\u539f\u672c\u63a1\u7528 Java 8\uff0c\u672a\u4f7f\u7528\u4efb\u4f55\u6846\u67b6\uff0c\u529f\u80fd\u7686\u7531\u958b\u767c\u4eba\u54e1\u5be6\u4f5c\uff0c\u6a21\u7d44\u9593\u4ee5\u51fd\u5f0f\u4e92\u76f8\u547c\u53eb\uff0c\u90e8\u7f72\u65bc WebLogic \u6216 JBoss \u7b49\u50b3\u7d71\u61c9\u7528\u4f3a\u670d\u5668\u4e0a\u3002\u900f\u904e VSCode \u642d\u914d GitHub Copilot\uff0c\u6210\u529f\u7522\u751f\u7cfb\u7d71\u8a2d\u8a08\u6587\u4ef6\u3001\u8cc7\u6599\u5eab\u7d50\u69cb\u6587\u4ef6\u8207 OpenAPI \u898f\u683c\uff0c\u9032\u4e00\u6b65\u8f49\u5316\u70ba\u57fa\u65bc Java 17 \u8207 Spring Boot 3 \u7684\u73fe\u4ee3\u5316\u67b6\u69cb\u3002\u4e26\u6574\u7406\u51fa\u4e00\u5957\u65b9\u6cd5\u8ad6\uff0c\u8b93\u958b\u767c\u8005\u53ef\u5229\u7528\u6587\u4ef6\u8207 AI \u5354\u4f5c\uff0c\u6709\u7cfb\u7d71\u5730\u5c07\u820a\u5c08\u6848\u91cd\u69cb\u70ba\u53ef\u7dad\u8b77\u3001\u53ef\u64f4\u5c55\u7684\u73fe\u4ee3\u5316\u67b6\u69cb\u3002\u672c\u6f14\u8b1b\u5c07\u5206\u4eab\u8f49\u63db\u7684\u7d93\u9a57\u548c\u9047\u5230\u7684\u6311\u6230\uff0c\u9069\u5408\u5c0dAI\u5354\u4f5c\u6709\u8208\u8da3\u7684 Java \u958b\u767c\u8005\u53c3\u8003\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "YP9HWC", "name": "\u8a31\u5b50\u8b19", "avatar": null, "biography": "\u5de5\u4f5c\u7d93\u9a57\u4e3b\u8981\u662f\u91d1\u878d\u696d\u5f8c\u7aef\u7cfb\u7d71\u958b\u767c\n\n\u76ee\u524d\u5728\u570b\u6cf0\u91d1\u63a7 \u6578\u6578\u767c \u96f2\u7aef\u7b56\u7565\u767c\u5c55\u90e8 \u96f2\u7aef\u6280\u8853\u79d1\n\u64d4\u4efb\u5fae\u670d\u52d9\u958b\u767c\u5de5\u7a0b\u5e2b", "public_name": "\u8a31\u5b50\u8b19", "guid": "96bac996-0b34-56b2-ad1f-50f502f23329", "url": "https://pretalx.com/jcconf-2025/speaker/YP9HWC/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/PYLURT/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/PYLURT/", "attachments": [{"title": "\u6295\u5f71\u7247", "url": "/media/jcconf-2025/submissions/PYLURT/resources/AIjava_Q8npTSM.pdf", "type": "related"}]}, {"guid": "7c1ec49f-2e99-5956-b7ef-74ddcba168f6", "code": "PEWWJE", "id": 71136, "logo": null, "date": "2025-09-19T13:45:00+08:00", "start": "13:45", "duration": "00:15", "room": "402CD", "slug": "jcconf-2025-71136-java--apache-camel", "url": "https://pretalx.com/jcconf-2025/talk/PEWWJE/", "title": "\u5f9e Java \u50b3\u7d71\u5beb\u6cd5\u9032\u5316\u5230 Apache Camel\uff1a\u4e00\u6b21\u641e\u61c2\u6574\u5408\u578b\u958b\u767c", "subtitle": "", "track": "402CD", "type": "Quickie", "language": "zh-hant", "abstract": "\u5728\u4f01\u696d\u61c9\u7528\u958b\u767c\u4e2d\uff0c\u8d85\u904e 70% \u7684\u6642\u9593\u8207\u8cc7\u6e90\u90fd\u82b1\u5728\u300c\u7cfb\u7d71\u6574\u5408\u300d\u4e0a\u3002\u7121\u8ad6\u662f\u8655\u7406 CSV \u6a94\u6848\u3001\u4e32\u63a5 Kafka\u3001\u5b58\u53d6\u8cc7\u6599\u5eab\uff0c\u6216\u662f\u547c\u53eb REST API\uff0c\u6211\u5011\u90fd\u7fd2\u6163\u7528 Java \u5beb\u5927\u91cf\u7684 if/else\u3001try/catch\u3001\u81ea\u8a02\u6392\u7a0b\u8207\u932f\u8aa4\u91cd\u8a66\u6a5f\u5236\uff0c\u9019\u4e9b\u96dc\u4e82\u7684\u6574\u5408\u908f\u8f2f\u8b93\u7a0b\u5f0f\u78bc\u96e3\u4ee5\u7dad\u8b77\uff0c\u7cfb\u7d71\u8026\u5408\u5ea6\u5347\u9ad8\u3001\u91cd\u8907\u6027\u9ad8\u3001\u6e2c\u8a66\u56f0\u96e3\u3002\n\n\u672c\u5834\u5206\u4eab\u5c07\u4ee5\u958b\u767c\u8005\u8996\u89d2\u51fa\u767c\uff0c\u5f9e\u300cJava \u50b3\u7d71\u6574\u5408\u5beb\u6cd5\u300d\u4f5c\u70ba\u5207\u5165\u9ede\uff0c\u5e36\u9818\u89c0\u773e\u5be6\u969b\u6bd4\u8f03\u50b3\u7d71\u65b9\u5f0f\u8207 Apache Camel \u5be6\u4f5c\u65b9\u5f0f\u7684\u5dee\u7570\u3002\u6211\u5c07\u4ecb\u7d39 Apache Camel \u7684\u6838\u5fc3\u8a2d\u8a08\u7406\u5ff5\uff1aRouteBuilder DSL\uff0c\u5982\u4f55\u4ee5\u7c21\u6f54\u8a9e\u6cd5\u5b9a\u7fa9\u8cc7\u6599\u6d41\u3001\u5be6\u4f5c\u932f\u8aa4\u91cd\u8a66\u8207\u683c\u5f0f\u8f49\u63db\uff0c\u4e26\u5c55\u793a\u5169\u500b\u5e38\u898b\u6574\u5408\u5834\u666f\u7684\u5be6\u6230\u7a0b\u5f0f\u78bc\uff1a\n\n\u6a94\u6848\u8655\u7406\u81ea\u52d5\u4e0a\u50b3\uff1aCSV \u279c JSON \u279c API\n\u8a0a\u606f\u8f49\u9001\u4e2d\u4ecb\u670d\u52d9\uff1aKafka \u279c \u6b04\u4f4d\u8f49\u63db \u279c \u5beb\u5165\u8cc7\u6599\u5eab\n\n\u900f\u904e\u7bc4\u4f8b\u5c0d\u7167\uff0c\u8b93\u958b\u767c\u8005\u5feb\u901f\u638c\u63e1 Camel \u7684\u4f7f\u7528\u5834\u666f\u8207\u50f9\u503c\u3002\u9069\u5408\u4efb\u4f55\u66fe\u7d93\u81ea\u5df1\u624b\u523b\u6574\u5408\u6d41\u7a0b\u3001\u60f3\u63d0\u5347\u6574\u5408\u6548\u7387\u8207\u53ef\u7dad\u8b77\u6027\u7684 Java \u5de5\u7a0b\u5e2b\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "KKSULN", "name": "\u9673\u4ec1\u5091", "avatar": null, "biography": "\u570b\u6cf0\u91d1\u63a7 \u8cc7\u6df1\u5de5\u7a0b\u5e2b\n\u6df1\u4fe1\u8edf\u9ad4\u958b\u767c\u7684\u6838\u5fc3\uff0c\u59cb\u7d42\u662f\u70ba\u4e86\u89e3\u6c7a\u771f\u5be6\u4e16\u754c\u7684\u554f\u984c\u3002\u56e0\u6b64\uff0c\u71b1\u8877\u65bc\u6316\u6398\u9700\u6c42\u7684\u672c\u8cea\uff0c\u81f4\u529b\u65bc\u7528\u6700\u7c21\u6f54\u3001\u6700\u7a69\u56fa\u7684\u6280\u8853\u5be6\u73fe\u65b9\u6848\u3002\u5728\u9762\u5c0d\u8907\u96dc\u7684\u5546\u696d\u908f\u8f2f\u8207\u591a\u8b8a\u7684\u6280\u8853\u9078\u9805\u6642\uff0c\u5c08\u6ce8\u65bc\u5c0b\u627e\u80fd\u5275\u9020\u9577\u9060\u50f9\u503c\u7684\u6700\u4f73\u5e73\u8861\u9ede\u3002", "public_name": "\u9673\u4ec1\u5091", "guid": "92f4b76f-7861-5df9-8ad0-26b36c37780e", "url": "https://pretalx.com/jcconf-2025/speaker/KKSULN/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/PEWWJE/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/PEWWJE/", "attachments": [{"title": "Apache Camel\u6295\u5f71\u7247", "url": "/media/jcconf-2025/submissions/PEWWJE/resources/2025_JCconf__A_HPlmapT.pdf", "type": "related"}]}, {"guid": "53ee32a5-3cb5-582a-b890-94dd6e14a0ce", "code": "YH93GG", "id": 74392, "logo": null, "date": "2025-09-19T14:10:00+08:00", "start": "14:10", "duration": "00:45", "room": "402CD", "slug": "jcconf-2025-74392-rbac--rebac--no-rec", "url": "https://pretalx.com/jcconf-2025/talk/YH93GG/", "title": "\u5f9e RBAC \u5230 ReBAC\uff1a\u6253\u9020\u9ad8\u6027\u80fd\u7d30\u7c92\u5ea6\u6b0a\u9650\u7ba1\u7406 (NO REC)", "subtitle": "", "track": "402CD", "type": "Session", "language": "zh-hant", "abstract": "OpenFGA \u662f\u4e00\u500b\u958b\u6e90\u7684\u7d30\u7c92\u5ea6\u6388\u6b0a\u7cfb\u7d71\uff0c\u9748\u611f\u4f86\u81ea Google Zanzibar\uff0c\u57fa\u65bc\u95dc\u4fc2\u578b\u8a2a\u554f\u63a7\u5236\uff08ReBAC\uff09\u3002\u900f\u904e\u76f4\u89c0\u7684\u5efa\u6a21\u8a9e\u8a00\u5b9a\u7fa9\u7269\u4ef6\u9593\u95dc\u4fc2\uff08\u5982\u300c\u7528\u6236 A \u662f\u6587\u4ef6 B \u7684\u64c1\u6709\u8005\u300d\uff09\uff0c\u5be6\u73fe\u9748\u6d3b\u3001\u9ad8\u6548\u7684\u6b0a\u9650\u7ba1\u7406\uff0c\u8d85\u8d8a\u50b3\u7d71 RBAC \u548c ABAC\u3002OpenFGA \u652f\u63f4\u591a\u8a9e\u8a00 SDK\uff08Java\u3001Python\u3001Go \u7b49\uff09\uff0c\u63d0\u4f9b Check \u548c ListObjects \u7b49 API\uff0c\u9069\u7528\u65bc\u5354\u4f5c\u5e73\u53f0\u3001\u6587\u4ef6\u5171\u4eab\u53ca API \u5b89\u5168\u7b49\u5834\u666f\u3002\u8207 Spring Security \u7121\u7e2b\u6574\u5408\uff0c\u900f\u904e OpenFGA Spring Boot Starter \u7c21\u5316 Java \u61c9\u7528\u6388\u6b0a\u5be6\u73fe\uff0c\u652f\u63f4\u5feb\u901f\u6b0a\u9650\u6aa2\u67e5\u548c\u6e2c\u8a66\u3002\u4f5c\u70ba CNCF Sandbox \u9805\u76ee\uff0cOpenFGA \u64c1\u6709\u6d3b\u8e8d\u793e\u7fa4\uff0c\u652f\u63f4 PostgreSQL\u3001MySQL \u7b49\u8cc7\u6599\u5eab\uff0c\u78ba\u4fdd\u9ad8\u6027\u80fd\u3002Playground \u5de5\u5177\u8b93\u958b\u767c\u8005\u53ef\u8996\u89ba\u5316\u6e2c\u8a66\u6388\u6b0a\u908f\u8f2f\uff0c\u52a0\u901f\u958b\u767c\u6d41\u7a0b\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "CQQZ7H", "name": "ethan", "avatar": null, "biography": ".. .--- .---..-...- .- - .-.-.- --. .. -. . .-.", "public_name": "ethan", "guid": "6e5d9fac-265c-535e-bd46-4a3d513ab46c", "url": "https://pretalx.com/jcconf-2025/speaker/CQQZ7H/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/YH93GG/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/YH93GG/", "attachments": []}, {"guid": "6cd568bc-f647-5abd-86c6-794ba90d0f27", "code": "TKURPV", "id": 74737, "logo": null, "date": "2025-09-19T15:05:00+08:00", "start": "15:05", "duration": "00:45", "room": "402CD", "slug": "jcconf-2025-74737-zero-downtime-db-migration-using-kafka-connect", "url": "https://pretalx.com/jcconf-2025/talk/TKURPV/", "title": "Zero downtime DB migration using Kafka Connect", "subtitle": "", "track": "402CD", "type": "Session", "language": "zh-hant", "abstract": "I would like to share how we have utilized Kafka Connect to complete DB migration with zero downtime. Kafka Connect is a tool for building scalable and reliable data pipelines between Apache Kafka and other data systems. Kafka Connect allows us to ingest entire DB into Kafka topics so that export connector can migrate the data from Kafka topics to another DB. Kafka Connect also supports rollback to previous DB in case any issue happens after the migration is done which is usually very hard for built-in DB migration tools. Moreover, Kafka Connect not only supports DB to DB or table to table migrations, but also supports custom write strategy which could let us migrate only part of the data we need.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "S8YNVH", "name": "haocheng", "avatar": "https://pretalx.com/media/avatars/S8YNVH_KHNA4AD.webp", "biography": "Senior Engineer at LY corp, interested in Java, JVM, Continuous Integration and Test-Driven Development, also organizer of JCConf and TWJUG", "public_name": "haocheng", "guid": "48995865-495c-5608-ad60-c511edc214d4", "url": "https://pretalx.com/jcconf-2025/speaker/S8YNVH/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/TKURPV/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/TKURPV/", "attachments": [{"title": "Kafka Connect slides", "url": "/media/jcconf-2025/submissions/TKURPV/resources/kafka-connect_w5kFXG0.pdf", "type": "related"}]}, {"guid": "3e3aaf4f-f40c-5750-8400-a531e6b9e0ec", "code": "MG9UCH", "id": 73868, "logo": null, "date": "2025-09-19T16:20:00+08:00", "start": "16:20", "duration": "00:45", "room": "402CD", "slug": "jcconf-2025-73868-temporal", "url": "https://pretalx.com/jcconf-2025/talk/MG9UCH/", "title": "\u7d50\u5408 Temporal \u8207\u719f\u6089\u7684\u7a0b\u5f0f\u8a9e\u8a00\uff0c\u5be6\u73fe\u5de5\u4f5c\u6d41\u5373\u7a0b\u5f0f\u78bc\uff0c\u6253\u9020\u9ad8\u97cc\u6027\u7cfb\u7d71", "subtitle": "", "track": "402CD", "type": "Session", "language": "zh-hant", "abstract": "Building Resilient Systems with Temporal, Workflow as Code in Your Favorite Languages\n\n\u5728\u73fe\u4ee3\u5206\u6563\u5f0f\u7cfb\u7d71\u4e2d\uff0c\u50b3\u7d71\u4f9d\u8cf4\u624b\u52d5\u64b0\u5beb\u7a0b\u5f0f\u8207\u72c0\u614b\u7ba1\u7406\u7684\u65b9\u5f0f\uff0c\u5e38\u9762\u81e8\u932f\u8aa4\u8655\u7406\u8207\u7cfb\u7d71\u6062\u5fa9\u7684\u8907\u96dc\u6311\u6230\uff0c\u5c0e\u81f4\u958b\u767c\u8207\u7dad\u904b\u6210\u672c\u6301\u7e8c\u6500\u5347\u3002\n\n\u672c\u6b21\u7c21\u5831\u5c07\u4ecb\u7d39 Temporal \u5de5\u4f5c\u6d41\u5f15\u64ce\uff0c\u91cd\u9ede\u8aaa\u660e\u5176\u6838\u5fc3\u67b6\u69cb\u8207 API \u4f7f\u7528\uff0c\u4e86\u89e3\u5982\u4f55\u900f\u904e\u300cWorkflow as Code\u300d\u7684\u8a2d\u8a08\u7406\u5ff5\uff0c\u8b93\u958b\u767c\u8005\u53ef\u4ee5\u904b\u7528\u719f\u6089\u7684\u7a0b\u5f0f\u8a9e\u8a00\uff0c\u6253\u9020\u9ad8\u97cc\u6027\u4e14\u5177\u64f4\u5c55\u6027\u7684\u6d41\u7a0b\u7cfb\u7d71\uff0c\u5354\u52a9\u63d0\u5347\u6d41\u7a0b\u81ea\u52d5\u5316\u7684\u53ef\u9760\u5ea6\u8207\u958b\u767c\u6548\u7387\uff0c\u4e26\u6709\u6548\u964d\u4f4e\u7cfb\u7d71\u8907\u96dc\u5ea6\u8207\u7dad\u8b77\u98a8\u96aa\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "KJD8WT", "name": "\u59dc\u653f\u5b8f Jiang", "avatar": "https://pretalx.com/media/avatars/KJD8WT_aUkVTZM.webp", "biography": "\u8edf\u9ad4\u5de5\u7a0b\u5e2b\n\n\u958b\u767c\u904e\u524d\u7aef\u3001\u5f8c\u7aef\u7684\u7a0b\u5f0f\uff0c\u7dad\u904b\u904e\u96f2\u7aef\u3001\u5730\u7aef\u7684\u74b0\u5883\n\n\u504f\u597d\u627e\u5c0b\u7c21\u55ae\u65b9\u5f0f\u53bb\u89e3\u6c7a\u91cd\u8907\u7e41\u96dc\u554f\u984c\u7684\u4eba", "public_name": "\u59dc\u653f\u5b8f Jiang", "guid": "afe2882f-87bc-538f-ad67-a05a325cf19e", "url": "https://pretalx.com/jcconf-2025/speaker/KJD8WT/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/MG9UCH/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/MG9UCH/", "attachments": []}, {"guid": "5ad57102-a5b4-5b03-a3f1-aa80fe0a71f8", "code": "9AYD8Z", "id": 72595, "logo": null, "date": "2025-09-19T17:15:00+08:00", "start": "17:15", "duration": "00:45", "room": "402CD", "slug": "jcconf-2025-72595-current-status-of-java-web-frameworks-en", "url": "https://pretalx.com/jcconf-2025/talk/9AYD8Z/", "title": "Current status of Java Web Frameworks (EN)", "subtitle": "", "track": "402CD", "type": "Session", "language": "zh-hant", "abstract": "Java web applications were based on Java EE and were built around servlets/JSPs, but the presence of Java EE/Jakarta EE is fading as Spring Boot has become mainstream. In addition, cloud and containers have come into use, full-stack frameworks such as Quarkus and Micronaut have begun to appear, and MicroProfile has begun to work as a standard specification.\nIn this session, we will introduce request processing frameworks divided into three types: imperative, declarative, and component, and summarize the changes that have occurred in their execution environments in line with the cloud, and introduce the current situation.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "7NYX9C", "name": "Naoki Kishida", "avatar": "https://pretalx.com/media/avatars/7NYX9C_RTlufSt.webp", "biography": "Japanese Java engineer", "public_name": "Naoki Kishida", "guid": "774e2d7f-6242-568d-89bf-6beb296dd3aa", "url": "https://pretalx.com/jcconf-2025/speaker/7NYX9C/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/9AYD8Z/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/9AYD8Z/", "attachments": []}], "203": [{"guid": "0f80f718-74d1-576b-93e7-b2b9434441ad", "code": "TGB7WJ", "id": 71085, "logo": null, "date": "2025-09-19T11:40:00+08:00", "start": "11:40", "duration": "00:45", "room": "203", "slug": "jcconf-2025-71085-let-s-guava-it-up-google-core-libraries-for-java", "url": "https://pretalx.com/jcconf-2025/talk/TGB7WJ/", "title": "Let's Guava it up! Google Core Libraries for Java", "subtitle": "", "track": "203", "type": "Session", "language": "zh-hant", "abstract": "\u5e36\u4f60\u9032\u53bb Google \u70ba Java \u5c08\u6848\u6240\u958b\u767c\u7684Libraries\u7684\u4e16\u754c\uff01\u5206\u4eab\u5de5\u4f5c\u4e0a\u4f7f\u7528Guava\u6700\u5be6\u7528\u7684\u8d85\u591a\u6280\u5de7\uff0c\u8b93\u958b\u767c\u8005\u5011\u7ad9\u5728Google\u5de8\u4eba\u7684\u80a9\u8180\u4e0a\u958b\u767c\u3002\n\n\u5176\u4e2d\u5305\u542b\u65b0\u578b\u96c6\u5408\u985e\u578b\uff08\u5982\u591a\u91cd\u6620\u5c04\u548c\u591a\u91cd\u96c6\u5408\uff09\u3001\u4e0d\u53ef\u8b8a\u96c6\u5408\u3001\u5716\u5f62\u5eab\uff0c\u4ee5\u53ca\u7528\u65bc\u4e26\u767c\u3001I/O\u3001\u54c8\u5e0c\u3001\u57fa\u672c\u985e\u578b\u3001\u5b57\u7b26\u4e32\u7b49\u7684\u5be6\u7528\u5de5\u5177\u3002\u5b83\u5728 Google \u5167\u90e8\u7684\u5927\u591a\u6578 Java \u9805\u76ee\u4e2d\u5ee3\u6cdb\u4f7f\u7528\uff0c\u4e5f\u88ab\u8a31\u591a\u5176\u4ed6\u516c\u53f8\u5ee3\u6cdb\u63a1\u7528\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "PNJCJ3", "name": "\u4e0d\u60f3\u52a0\u73ed\u7684\u5de5\u7a0b\u5e2b Justin", "avatar": "https://pretalx.com/media/avatars/PNJCJ3_3uRpj2i.webp", "biography": "2024 JCConf Speaker\n\u4e0d\u60f3\u52a0\u73ed\uff0c\u4f46\u5e38\u5e38\u5728\u52a0\u73ed\u7684\u5de5\u7a0b\u5e2b\u3002\n\n\u64c1\u6709\u591a\u5e74 Java \u958b\u767c\u7d93\u9a57\uff0c\u71b1\u611b\u7814\u7a76\u6280\u8853\u4e26\u5206\u4eab\u8e29\u5751\u7d93\u9a57\uff0c\n\u5e0c\u671b\u80fd\u8ca2\u737b\u66f4\u591a\u958b\u6e90\u6280\u8853\u56de\u994b\u7d66\u793e\u7fa4\u3002", "public_name": "\u4e0d\u60f3\u52a0\u73ed\u7684\u5de5\u7a0b\u5e2b Justin", "guid": "18abf8f3-2f61-55b2-8422-3b17d9282f6d", "url": "https://pretalx.com/jcconf-2025/speaker/PNJCJ3/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/TGB7WJ/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/TGB7WJ/", "attachments": []}, {"guid": "ac8c8bb6-df6d-58cd-a304-1c8960ab7445", "code": "FUZ7B8", "id": 72823, "logo": null, "date": "2025-09-19T13:25:00+08:00", "start": "13:25", "duration": "00:15", "room": "203", "slug": "jcconf-2025-72823-quarkus---maven-extension--no-rec", "url": "https://pretalx.com/jcconf-2025/talk/FUZ7B8/", "title": "\u6253\u9020\u90e8\u9580\u5c08\u5c6c\u7684 Quarkus \u958b\u767c\u9ad4\u9a57\uff1a\u7528 Maven + Extension \u5efa\u7acb\u4e00\u81f4\u5316\u958b\u767c\u6d41\u7a0b (NO REC)", "subtitle": "", "track": "203", "type": "Quickie", "language": "zh-hant", "abstract": "\u5728\u90e8\u9580\u63a8\u884c Quarkus \u7684\u904e\u7a0b\u4e2d\uff0c\u6211\u5011\u9047\u5230\u4e86\u4e00\u500b\u719f\u6089\u4e14\u666e\u904d\u7684\u6311\u6230\uff1a\u6bcf\u500b\u5c08\u6848\u5728\u555f\u52d5\u968e\u6bb5\u90fd\u9700\u8981\u91cd\u8907\u8a2d\u5b9a\u4f9d\u8cf4\u3001\u8655\u7406\u8cc7\u6599\u5eab\u9023\u7dda\u3001\u5f15\u5165\u5e38\u7528\u7684\u5de5\u5177\u3002\u9019\u4e9b\u91cd\u8907\u6027\u7684\u5de5\u4f5c\u4e0d\u50c5\u8017\u8cbb\u958b\u767c\u8005\u5927\u91cf\u6642\u9593\uff0c\u4e5f\u5bb9\u6613\u56e0\u4eba\u800c\u7570\u7522\u751f\u5be6\u4f5c\u5dee\u7570\uff0c\u9032\u800c\u5f71\u97ff\u6574\u9ad4\u7dad\u904b\u54c1\u8cea\u8207\u6548\u7387\u3002\n\u70ba\u4e86\u89e3\u6c7a\u9019\u500b\u75db\u9ede\uff0c\u6211\u5011\u8a2d\u8a08\u4e86\u4e00\u5957\u57fa\u65bc Maven \u8207 Quarkus Extension \u7684\u6574\u5408\u65b9\u6848\uff0c\u4e26\u9032\u4e00\u6b65\u6253\u9020\u90e8\u9580\u5c08\u5c6c\u7684\u958b\u767c\u5957\u4ef6\uff0c\u900f\u904e Maven\u3001Quarkus Extension\u3001\u81ea\u52d5\u5316\u914d\u7f6e\u8207\u5171\u7528\u6a21\u7d44\u7684\u6574\u5408\uff0c\u5efa\u7acb\u51fa\u4e00\u5957\u300c\u5f9e\u5efa\u6848\u3001\u4f9d\u8cf4\u7ba1\u7406\u3001\u958b\u767c\u6d41\u7a0b\u5230\u8cc7\u6599\u5eab\u9023\u7dda\u300d\u7684\u6a19\u6e96\u5316\u958b\u767c\u9ad4\u9a57\uff0c\u958b\u767c\u8005\u53ea\u8981\u5c08\u6ce8\u5728\u696d\u52d9\u908f\u8f2f\u4e0a\uff0c\u8b93\u958b\u767c\u6d41\u7a0b\u66f4\u6709\u6548\u7387\u3002\n\n\u672c\u8b70\u7a0b\u5c07\u5206\u4eab\u6211\u5011\u7684\u5b8c\u6574\u5be6\u6230\u6b77\u7a0b\uff0c\u5305\u62ec\uff1a\n\u2022 \u6a19\u6e96\u5316\u5efa\u6848\u6a21\u677f\uff1a\u5982\u4f55\u7528 Maven + Extension \u5efa\u7acb\u5c08\u5c6c\u65bc\u90e8\u9580\u7684 Quarkus \u958b\u767c\u5957\u4ef6\n\u2022 \u5171\u7528\u4f9d\u8cf4\u8207\u6a21\u7d44\u7ba1\u7406\uff1a\u7d71\u4e00\u8cc7\u6599\u5eab\u9023\u7dda\u8207\u8a2d\u5b9a\u65b9\u5f0f\u7684\u5be6\u4f5c\u65b9\u5f0f\n\u2022 \u63d0\u5347\u958b\u767c\u6548\u7387\uff1a\u5982\u4f55\u8b93\u65b0\u4eba\u4e5f\u80fd\u5feb\u901f\u4e0a\u624b\u3001\u8cc7\u6df1\u958b\u767c\u8005\u7dad\u8b77\u66f4\u8f15\u9b06", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "NA8RKD", "name": "\u738b\u4fe1\u51f1", "avatar": null, "biography": "\u73fe\u4efb\u65bc\u570b\u6cf0\u4e16\u83ef\u5546\u696d\u9280\u884c  \u7cfb\u7d71\u5206\u6790\u5e2b\n\u5fae\u670d\u52d9\u76f8\u95dc\u958b\u767c\u7d93\u9a57\u7d04\u4e94\u5e74", "public_name": "\u738b\u4fe1\u51f1", "guid": "5481c70c-68f3-5b24-8ddb-fc3e3dd16d72", "url": "https://pretalx.com/jcconf-2025/speaker/NA8RKD/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/FUZ7B8/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/FUZ7B8/", "attachments": []}, {"guid": "16d71a29-308e-55b8-802c-3f8cb9b3d3fa", "code": "YLBJ9U", "id": 72865, "logo": null, "date": "2025-09-19T13:45:00+08:00", "start": "13:45", "duration": "00:15", "room": "203", "slug": "jcconf-2025-72865-k6--java--no-rec", "url": "https://pretalx.com/jcconf-2025/talk/YLBJ9U/", "title": "\u4f7f\u7528 k6 \u6253\u9020\u9ad8\u6548\u80fd\u7684 Java \u61c9\u7528\u8ca0\u8f09\u6e2c\u8a66 (NO REC)", "subtitle": "", "track": "203", "type": "Quickie", "language": "zh-hant", "abstract": "\u7cfb\u7d71\u5728\u958b\u767c\u74b0\u5883\u904b\u884c\u9806\u66a2\uff0c\u4f46\u4e00\u4e0a\u7dda\u5c31\u51fa\u73fe\u6548\u80fd\u554f\u984c\uff1f\u672c\u6b21\u5206\u4eab\u5c07\u4ecb\u7d39\u5982\u4f55\u7528 k6 \u9019\u6b3e\u73fe\u4ee3\u5316\u8ca0\u8f09\u6e2c\u8a66\u5de5\u5177\uff0c\u63d0\u524d\u5728\u6e2c\u8a66\u968e\u6bb5\u767c\u73fe\u4e26\u89e3\u6c7a\u9019\u4e9b\u554f\u984c\u3002\n\nk6 \u4ee5 JavaScript \u64b0\u5beb\u6e2c\u8a66\u8173\u672c\uff0c\u5b78\u7fd2\u9580\u6abb\u4f4e\u3001\u8cc7\u6e90\u6548\u7387\u9ad8\uff0c\u80fd\u7121\u7e2b\u6574\u5408\u81f3 CI/CD \u6d41\u7a0b\u3002\u672c 15 \u5206\u9418\u5feb\u8b1b\u6db5\u84cb\uff1ak6 \u57fa\u790e\u6982\u5ff5\u3001\u6e2c\u8a66\u5834\u666f\u8a2d\u8a08\u3001\u5be6\u969b\u6848\u4f8b\u5206\u6790\u3001CI/CD \u6574\u5408\u5be6\u8e10\u3002\n\n\u9069\u5408 Java \u958b\u767c\u8005\u3001DevOps \u5de5\u7a0b\u5e2b\u8207\u6e2c\u8a66\u5de5\u7a0b\u5e2b\uff0c\u5e6b\u52a9\u5718\u968a\u5efa\u7acb\u9ad8\u6548\u7684\u8ca0\u8f09\u6e2c\u8a66\u7b56\u7565\uff0c\u5f9e\u53cd\u61c9\u5f0f\u8f49\u70ba\u4e3b\u52d5\u5f0f\u7684\u6548\u80fd\u7ba1\u7406\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "8VWQKD", "name": "Ruei", "avatar": null, "biography": "\u83dc\u9ce5\u5de5\u7a0b\u5e2b", "public_name": "Ruei", "guid": "004b7829-1662-5ca5-8ed4-7e6368bca430", "url": "https://pretalx.com/jcconf-2025/speaker/8VWQKD/"}, {"code": "NHB7VG", "name": "Charles Zheng", "avatar": null, "biography": "\u66ab\u586b", "public_name": "Charles Zheng", "guid": "3bf1f33e-dc57-5ece-a2ba-3d491fde2556", "url": "https://pretalx.com/jcconf-2025/speaker/NHB7VG/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/YLBJ9U/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/YLBJ9U/", "attachments": []}, {"guid": "b2e4a714-e4a1-5c86-92df-0bb0a200c856", "code": "9EZPFT", "id": 73866, "logo": null, "date": "2025-09-19T14:10:00+08:00", "start": "14:10", "duration": "00:45", "room": "203", "slug": "jcconf-2025-73866-mysql-javaide-mysql-for-vs-code", "url": "https://pretalx.com/jcconf-2025/talk/9EZPFT/", "title": "\u6df7\u7136\u5929\u6210\u7684,\u652f\u63f4\u6574\u500bMySQL Java\u61c9\u7528\u7cfb\u7d71\u751f\u547d\u9031\u671f\u7684IDE \u2013 MySQL for VS Code", "subtitle": "", "track": "203", "type": "Session", "language": "zh-hant", "abstract": "MySQL VS Code \u662f\u4e00\u500b\u6574\u5408MySQL \u548cVisual Studio Code \u7684\u5de5\u5177\uff0c\u5b83\u8b93\u4f7f\u7528\u8005\u80fd\u5728VS Code \u74b0\u5883\u4e2d\u76f4\u63a5\u64cd\u4f5cMySQL \u8cc7\u6599\u5eab\u3002 \u5176\u4e3b\u8981\u529f\u80fd\u5305\u62ec\uff1a\u700f\u89bd\u548c\u7ba1\u7406MySQL \u8cc7\u6599\u5eab\u7cfb\u7d71\uff0c\u63d0\u4f9bnotebook\u4ecb\u9762\u9032\u884c\u4e92\u52d5\u5f0f\u8cc7\u6599\u5eab\u64cd\u4f5c\uff0c\u4ee5\u53ca\u76f4\u63a5\u5728VS Code \u4e2d\u4f7f\u7528MySQL Shell \u7684GUI \u63a7\u5236\u53f0\u3002\n\u5728\u9019\u6b21\u7684\u6f14\u8b1b\u4e2d,\u6211\u5c07\u70ba\u5927\u5bb6\u4ecb\u7d39:\n\u2022\t\u5982\u4f55 \u5c07\u8cc7\u6599\u5eab\u64cd\u4f5c\u6574\u5408\u5230VS Code\uff0c\u65b9\u4fbfJava\u61c9\u7528\u7cfb\u7d71\u958b\u767c\u8005\u5728\u540c\u4e00\u500b\u74b0\u5883\u4e2d\u5b8c\u6210Java\u7de8\u5beb\u548c\u8cc7\u6599\u5eab\u64cd\u4f5c.\n\u2022\tMySQL for VS Code\u80fd\u63d0\u4f9b\u90a3\u4e9b\u6bd4\u50b3\u7d71MySQL \u7528\u6236\u7aef\u66f4\u591a\u7684\u529f\u80fd\u548c\u4fbf\u5229\u6027\uff0c\u4f8b\u5982\u7b46\u8a18\u672c\u4ecb\u9762\u3001GUI \u63a7\u5236\u53f0\u7b49.\n\u2022\t\u5982\u4f55\u64f4\u5c55\u7684\u4ecb\u9762\u8a2d\u8a08\u53cb\u597d\uff0c\u65b9\u4fbf\u4f7f\u7528\u8005\u5feb\u901f\u4e0a\u624b. \n\u2022\t\u4ee5\u53caVS Code\u5982\u5982\u4f55\u6574\u5408MySQL Connector/J,\u8b93Java\u958b\u767c\u8005\u80fd\u8f15\u9b06\u7684\u638c\u63e1MySQL JDBC driver\u7684\u53c3\u6578\u548c\u7279\u6027.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "7WMKLH", "name": "\u675c\u4fee\u6587", "avatar": "https://pretalx.com/media/avatars/7WMKLH_0sfLZPo.webp", "biography": "\u675c\u4fee\u6587\u76ee\u524d\u662fOracle \u516c\u53f8\u8cc7\u6df1 MySQL \u89e3\u6c7a\u65b9\u6848\u5de5\u7a0b\u7d93\u7406\uff0c\u9818\u5c0e\u6771\u4e9e\u5340MySQL \u89e3\u6c7a\u65b9\u6848\u5de5\u7a0b\u5718\u968a\uff0c\u81f4\u529b\u65bc\u63a8\u5ee3 MySQL \u6280\u8853\u4e26\u5e6b\u52a9\u95dc\u9375\u4f01\u696d\u7528\u6236\u63a1\u7528 MySQL\uff0cIvan \u662f\u81fa\u7063 MySQL \u4f7f\u7528\u8005\u7d44\u7684\u53ec\u96c6\u4eba\uff0c\u8a72\u7d44\u662f\u4e00\u500b\u6d3b\u8e8d\u7684 MySQL \u793e\u5340\uff0c\u53c3\u8207\u8005\u8d85\u904e 6200 \u4eba\u3002\n\u6709\u95dc\u675c\u4fee\u6587\u7684\u80cc\u666f\u8a73\u60c5\uff0c\u8acb\u53c3\u95b1\u4ed6\u7684LinkedIn\u9801 https://www.linkedin.com/in/ivan-tu-0a330a126/", "public_name": "\u675c\u4fee\u6587", "guid": "97db11fb-b380-5d60-a303-a41e442dfcdb", "url": "https://pretalx.com/jcconf-2025/speaker/7WMKLH/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/9EZPFT/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/9EZPFT/", "attachments": []}, {"guid": "a52cd19c-d528-5152-9e33-97fe9424fe15", "code": "SGSUPL", "id": 71726, "logo": null, "date": "2025-09-19T15:05:00+08:00", "start": "15:05", "duration": "00:45", "room": "203", "slug": "jcconf-2025-71726-building-a-community-for-developers-to-connect-the-challenge-of-the-japan-java-user-group-en", "url": "https://pretalx.com/jcconf-2025/talk/SGSUPL/", "title": "Building a Community for Developers to Connect: The Challenge of the Japan Java User Group (EN)", "subtitle": "", "track": "203", "type": "Session", "language": "zh-hant", "abstract": "For developers to continue growing, acquiring knowledge alone is not enough. Interaction with other engineers, hands-on learning opportunities, and continuous stimulation are essential.\n\nThe Japan Java User Group (JJUG) has been fostering such an environment for over 20 years, now boasting a membership of more than 13,000. Through large conferences held twice a year (JJUG CCC), monthly night seminars, even an unconference held at hot spring resorts (JOnsen), JJUG has established itself as a vibrant and active community.\n\nThis talk will review how JJUG has provided a forum for engineers to learn and interact with each other, and provide insight into measures to maintain ongoing activities and to strengthen international ties. Additionally, we will explore the challenges JJUG currently faces and its vision for the future.", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "7FJ8PC", "name": "Takaaki Sugiyama", "avatar": "https://pretalx.com/media/avatars/7FJ8PC_Mn0FNfT.webp", "biography": "Takaaki has long time experience of system development with Java, ShellScript, Linux, FreeBSD, etc. He also works as a technical writer and a trainer in engineering education. He has written some Java books and has some serial publication in technical media. He is a board member of Japan Java User Group.", "public_name": "Takaaki Sugiyama", "guid": "b415ae5d-55ec-534f-8a7b-f5af5d86e22c", "url": "https://pretalx.com/jcconf-2025/speaker/7FJ8PC/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/SGSUPL/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/SGSUPL/", "attachments": []}, {"guid": "f184fa2d-6c96-5a37-a5f4-3348160d1091", "code": "AJFLFQ", "id": 71290, "logo": null, "date": "2025-09-19T16:20:00+08:00", "start": "16:20", "duration": "00:45", "room": "203", "slug": "jcconf-2025-71290-spring-boot--gcp", "url": "https://pretalx.com/jcconf-2025/talk/AJFLFQ/", "title": "Spring Boot \u96f2\u539f\u751f\u5be6\u6230\uff1aGCP \u95dc\u9375\u670d\u52d9\u6574\u5408\u3001\u6210\u672c\u512a\u5316\u8207\u9ad8\u6548\u7dad\u904b", "subtitle": "", "track": "203", "type": "Session", "language": "zh-hant", "abstract": "\u96a8\u8457\u96f2\u539f\u751f\u6642\u4ee3\u7684\u666e\u53ca\uff0cJava \u61c9\u7528\u7684\u958b\u767c\u8207\u90e8\u7f72\u65b9\u5f0f\u4ea6\u96a8\u4e4b\u6301\u7e8c\u6f14\u9032\u3002\u672c\u8b70\u7a0b\u5c07\u6df1\u5165\u63a2\u8a0e\u5982\u4f55\u5229\u7528 Spring Boot 3 \u548c JDK 21\uff0c\u5728 Google Cloud Platform (GCP) \u4e0a\u6253\u9020\u73fe\u4ee3\u5316\u3001\u9ad8\u6548\u80fd\u4e14\u6613\u65bc\u7dad\u904b\u7684\u61c9\u7528\u7a0b\u5f0f\uff0c\u4e26\u5206\u4eab\u5728\u771f\u5be6\u60c5\u5883\u4e2d\u5982\u4f55\u514b\u670d\u6574\u5408\u6311\u6230\u8207\u512a\u5316\u6210\u672c\u3002\n\n\u6b64\u8b70\u7a0b\u5c07\u5f9e\u4e00\u500b\u5be6\u969b\u7684 Spring Boot \u5c08\u6848\u51fa\u767c\uff0c\u9010\u6b65\u5c55\u793a\u5982\u4f55\u570d\u7e5e\u4e00\u500b\u6838\u5fc3\u696d\u52d9\u5834\u666f\uff0c\u4e32\u806f\u4e26\u9ad8\u6548\u904b\u7528 GKE\u3001Cloud SQL\u3001Cloud Run \u7b49\u95dc\u9375 GCP \u670d\u52d9\uff0c\u5be6\u73fe\u5f9e\u958b\u767c\u5230\u7dad\u904b\u7684\u5b8c\u6574\u6d41\u7a0b\u3002\n1.  **\u5bb9\u5668\u5316\u8207 GKE \u90e8\u7f72\uff1a** \u5c07 Spring Boot \u61c9\u7528\u7a0b\u5f0f\u5bb9\u5668\u5316\uff0c\u4e26\u90e8\u7f72\u5230 Google Kubernetes Engine (GKE)\uff0c\u5be6\u73fe\u5f48\u6027\u64f4\u5c55\u8207\u9ad8\u53ef\u7528\u6027\u3002\n2.  **GCP \u8cc7\u6599\u670d\u52d9\u6574\u5408\uff1a**\n    * **Cloud SQL (PostgreSQL)\uff1a** \u5982\u4f55\u6574\u5408\u95dc\u806f\u5f0f\u8cc7\u6599\u5eab\uff0c\u4e26\u63a2\u8a0e\u9023\u7dda\u7ba1\u7406\u8207\u6548\u80fd\u8abf\u6821\u7b56\u7565\u3002\n    * **Cloud Memorystore (Redis)\uff1a** \u6574\u5408\u5feb\u53d6\u670d\u52d9\uff0c\u63d0\u5347\u61c9\u7528\u7a0b\u5f0f\u56de\u61c9\u901f\u5ea6\u3002\n    * **Cloud Storage Bucket\uff1a** \u5132\u5b58\u8207\u7ba1\u7406\u975c\u614b\u8cc7\u6e90\u8207\u5927\u578b\u6a94\u6848\u3002\n3.  **\u5b89\u5168\u6027\u5be6\u8e10\uff1a** \u5229\u7528 Secret Manager \u5b89\u5168\u5730\u7ba1\u7406\u61c9\u7528\u7a0b\u5f0f\u5bc6\u9470\u8207\u914d\u7f6e\u3002\n4.  **\u7121\u4f3a\u670d\u5668\u63a2\u7d22\uff1a** \u5982\u4f55\u5c07\u670d\u52d9\u4ee5 Cloud Run \u90e8\u7f72\uff0c\u5be6\u73fe\u6309\u9700\u4ed8\u8cbb\u8207\u5feb\u901f\u8fed\u4ee3\u3002\n5.  **\u81ea\u52d5\u5316\u4efb\u52d9\uff1a** \u900f\u904e Cloud Scheduler \u5b89\u6392\u5b9a\u6642\u4efb\u52d9\uff0c\u89f8\u767c\u5927\u8cc7\u6599\u904b\u7b97\u6d41\u7a0b\u3001\u540c\u6b65\u8cc7\u6599\u7b49\u4efb\u52d9\uff0c\u4e26\u63a2\u8a0e\u5982\u4f55\u8a2d\u8a08\u66f4\u5177\u5f48\u6027\u8207\u5bb9\u932f\u6027\u7684\u6392\u7a0b\u6a5f\u5236\u3002\n6.  **\u53ef\u89c0\u6e2c\u6027\u8207\u7dad\u904b\uff1a** \u7d50\u5408 GCP \u7684\u76e3\u63a7\u8207\u65e5\u8a8c\u670d\u52d9\uff0c\u78ba\u4fdd\u670d\u52d9\u7a69\u5b9a\u904b\u884c\u3002\n\n\u9069\u5408\u5e0c\u671b\u5c07 Spring Boot \u61c9\u7528\u7a0b\u5f0f\u9077\u79fb\u4e0a\u96f2\uff0c\u6216\u60f3\u5728 GCP \u4e0a\u69cb\u5efa\u5168\u65b0\u96f2\u539f\u751f\u61c9\u7528\u7684 Java \u958b\u767c\u8005\u8207\u5718\u968a\u9818\u5c0e\u8005\u3002\u60a8\u5c07\u5b78\u7fd2\u5230\u6700\u65b0\u7684\u6280\u8853\u68e7\u7d44\u5408\u4ee5\u53ca\u5728 GCP \u4e0a\u7684\u6700\u4f73\u5be6\u8e10\uff0c\u4e26\u80fd\u5c07\u9019\u4e9b\u7d93\u9a57\u76f4\u63a5\u61c9\u7528\u65bc\u60a8\u7684\u5c08\u6848\u4e2d\uff0c\u63d0\u5347\u958b\u767c\u6548\u7387\u8207\u7cfb\u7d71\u7a69\u5b9a\u6027\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "FXJLXM", "name": "\u8521\u627f\u8aed Frank Tsai", "avatar": "https://pretalx.com/media/avatars/FXJLXM_VSHX3RI.webp", "biography": "\u64c1\u6709\u8d85\u904e15\u5e74\u7684 .Net\u3001Java \u958b\u767c\u7d93\u9a57\uff0c\u5177\u5099\u8c50\u5bcc\u7684 T-SQL\u3001MySQL\u3001PostgreSQL \u6548\u80fd\u8abf\u6821\u7d93\u9a57\uff0c\u7d2f\u7a4d 9 \u5e74\u4ee5\u4e0a AWS/GCP \u96f2\u7aef\u67b6\u69cb\u5be6\u6230\u7d93\u9a57\uff0c\u73fe\u4efb\u570b\u6cf0\u91d1\u63a7\u6578\u6578\u767c\u4e2d\u5fc3\u6578\u4f4d\u67b6\u69cb\u767c\u5c55\u90e8\u8cc7\u6df1\u67b6\u69cb\u5e2b\uff0c\u5c08\u6ce8\u65bc\u7cfb\u7d71\u67b6\u69cb\u8a2d\u8a08\u3001\u6548\u80fd\u512a\u5316\u53ca\u5718\u968a\u6280\u8853\u63d0\u5347\u3002\u904e\u5f80\u63a8\u52d5 CI/CD\u3001\u5fae\u670d\u52d9\u3001\u96f2\u7aef\u670d\u52d9\u6700\u4f73\u5316\uff0c\u4e26\u900f\u904e\u8cc7\u6599\u5eab\u6b63\u898f\u5316\u3001\u67e5\u8a62\u512a\u5316\u53ca\u5feb\u53d6\u6a5f\u5236\uff0c\u5927\u5e45\u63d0\u5347\u7cfb\u7d71\u6548\u80fd\u53ca\u7a69\u5b9a\u6027\u3002\n\n\u71b1\u8877\u6280\u8853\u63a8\u5ee3\u8207\u77e5\u8b58\u5206\u4eab\uff0c\u81f4\u529b\u65bc\u512a\u5316\u958b\u767c\u6d41\u7a0b\u3001\u5efa\u7acb\u5718\u968a\u77e5\u8b58\u5eab\u53ca\u6a19\u6e96\u5316\u958b\u767c\u6e96\u5247\u3002\u64c5\u9577\u5c07\u8907\u96dc\u7684\u6280\u8853\u6311\u6230\u8f49\u5316\u70ba\u5177\u9ad4\u53ef\u884c\u7684\u89e3\u6c7a\u65b9\u6848\uff0c\u6210\u529f\u63a8\u52d5\u591a\u9805\u6280\u8853\u9769\u65b0\uff0c\u900f\u904e\u5be6\u8e10\u8207\u6307\u5c0e\u5e6b\u52a9\u5718\u968a\u6210\u9577\uff0c\u4e26\u6a02\u65bc\u8207\u5718\u968a\u4e00\u540c\u514b\u670d\u56f0\u96e3\u3002", "public_name": "\u8521\u627f\u8aed Frank Tsai", "guid": "f16299c8-cc53-51d9-9844-a7537acf1549", "url": "https://pretalx.com/jcconf-2025/speaker/FXJLXM/"}], "links": [{"title": "LinkedIn", "url": "https://www.linkedin.com/in/frank-tsai-technical", "type": "related"}], "feedback_url": "https://pretalx.com/jcconf-2025/talk/AJFLFQ/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/AJFLFQ/", "attachments": []}], "403": [{"guid": "7429c20b-7c93-5ddf-8bb0-1c05e83dc55d", "code": "L9GKTZ", "id": 79835, "logo": null, "date": "2025-09-19T12:30:00+08:00", "start": "12:30", "duration": "00:50", "room": "403", "slug": "jcconf-2025-79835-claude-code-lunch-talk--vibe--value", "url": "https://pretalx.com/jcconf-2025/talk/L9GKTZ/", "title": "Claude Code Lunch Talk\uff1a\u5f9e Vibe \u5230 Value", "subtitle": "", "track": "403", "type": "Workshop", "language": "zh-hant", "abstract": "\u6c92\u6709\u7c21\u5831\u3001\u91cd\u4ea4\u6d41\uff0c\u4f86\u4e00\u8d77\u804a\u804a\u600e\u9ebc\u628a Claude Code \u7528\u5230\u503c\u56de\u7968\u50f9\uff01\u73fe\u5728\u54ea\u4e9b\u529f\u80fd\u6700\u80fd\u62c9\u5347\u7522\u51fa\uff1f\u54ea\u4e9b\u5834\u666f\u8a72\u907f\u514d\uff1f\u5e36\u8457\u4f60\u7684\u554f\u984c\u4f86\uff0c\u5e36\u8457\u53ef\u884c\u7684\u4e0b\u4e00\u6b65\u8d70\u3002\u8207\u4e00\u4f4d\u7528 Vibe Coding \u505a\u5230\u7522\u54c1\u4e0a\u7dda\u3001\u6bcf\u6708\u628a $100 \u65b9\u6848\u7528\u5230\u6975\u81f4\u7684\u8cc7\u6df1\u4e00\u689d\u9f8d\u5de5\u7a0b\u5e2b Cash\uff0c\u4ea4\u6d41\u554f\u984c\u3001\u5be6\u6230\u7d93\u9a57\u8207\u907f\u5751\u5fc3\u6cd5\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "LQSFWE", "name": "Cash Wu", "avatar": "https://pretalx.com/media/avatars/LQSFWE_gweOvwh.webp", "biography": "\u4e00\u500b\u534a\u8def\u51fa\u5bb6\u8aa4\u5165\u6b67\u9014\u7684\u7a0b\u5f0f\u5b85\n\u96dc\u98df\u6027\u6280\u8853\u958b\u767c\u8005\n\u6bcf\u500b\u9818\u57df\u5404\u6709\u4e00\u9ede\u9ede\u7814\u7a76\n\u610f\u5916\u7684\u63a5\u89f8\u5230\u654f\u6377\u5f0f\u958b\u767c\u800c\u958b\u59cb\u611b\u4e0a\u5b83\n\u76f8\u4fe1\u5beb\u7a0b\u5f0f\u53ef\u4ee5\u6539\u8b8a\u4e16\u754c\n\u53ef\u4ee5\u4f7f\u7528\u9023\u7d50\u627e\u5230\u6211\uff1ahttps://link.cashwu.com/", "public_name": "Cash Wu", "guid": "b5520a18-8722-519a-b9e1-dd2483a5d4ad", "url": "https://pretalx.com/jcconf-2025/speaker/LQSFWE/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/L9GKTZ/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/L9GKTZ/", "attachments": []}, {"guid": "cfe9b34a-d436-5c31-836d-0706e601603d", "code": "8W9CUH", "id": 79837, "logo": null, "date": "2025-09-19T15:55:00+08:00", "start": "15:55", "duration": "00:25", "room": "403", "slug": "jcconf-2025-79837-tea-cake-cash-claude-code", "url": "https://pretalx.com/jcconf-2025/talk/8W9CUH/", "title": "Tea \u2716\ufe0e Cake \u2716\ufe0e Cash \u2716\ufe0e Claude Code", "subtitle": "", "track": "403", "type": "Workshop", "language": "zh-hant", "abstract": "\u5348\u9910\u9084\u6c92\u804a\u904e\u766e\uff1f\u4e0b\u5348\u8336\u518d\u4f86\u4e00\u6ce2\uff01\u5e36\u8457\u597d\u5947\u8207\u771f\u5be6\u60c5\u5883\uff0cCash \u4ee5\u91cd\u5ea6\u4f7f\u7528\u8005\u8996\u89d2\uff0c\u4ea4\u6d41\u53ef\u8907\u88fd\u7684 Claude Code \u5c0f\u62db\u5f0f\u8207\u907f\u5751\u6307\u5357\u3002\u5e36\u554f\u984c\u4f86\u3001\u5e36\u62db\u5f0f\u8d70\u3001\u5171\u540c\u5b78\u7fd2\uff0c30 \u5206\u9418\u9ad8\u5bc6\u5ea6\u5438\u6536\u3002", "description": null, "recording_license": "", "do_not_record": false, "persons": [{"code": "LQSFWE", "name": "Cash Wu", "avatar": "https://pretalx.com/media/avatars/LQSFWE_gweOvwh.webp", "biography": "\u4e00\u500b\u534a\u8def\u51fa\u5bb6\u8aa4\u5165\u6b67\u9014\u7684\u7a0b\u5f0f\u5b85\n\u96dc\u98df\u6027\u6280\u8853\u958b\u767c\u8005\n\u6bcf\u500b\u9818\u57df\u5404\u6709\u4e00\u9ede\u9ede\u7814\u7a76\n\u610f\u5916\u7684\u63a5\u89f8\u5230\u654f\u6377\u5f0f\u958b\u767c\u800c\u958b\u59cb\u611b\u4e0a\u5b83\n\u76f8\u4fe1\u5beb\u7a0b\u5f0f\u53ef\u4ee5\u6539\u8b8a\u4e16\u754c\n\u53ef\u4ee5\u4f7f\u7528\u9023\u7d50\u627e\u5230\u6211\uff1ahttps://link.cashwu.com/", "public_name": "Cash Wu", "guid": "b5520a18-8722-519a-b9e1-dd2483a5d4ad", "url": "https://pretalx.com/jcconf-2025/speaker/LQSFWE/"}], "links": [], "feedback_url": "https://pretalx.com/jcconf-2025/talk/8W9CUH/feedback/", "origin_url": "https://pretalx.com/jcconf-2025/talk/8W9CUH/", "attachments": []}]}}]}}}